From 2e4a23c31508aaf3de782852c00dc812f9c7f137 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 4 Oct 2023 14:33:17 -0600 Subject: [PATCH 0001/1117] Initial Commit --- .github/dependabot.yml | 10 + .gitignore | 19 + .gitmodules | 3 + .vscode/settings.json | 5 + Cargo.toml | 17 + LICENSE | 674 ++++++++++++ build.rs | 58 ++ build_release.sh | 3 + parallel-rdp/interface.cpp | 405 ++++++++ parallel-rdp/interface.hpp | 18 + parallel-rdp/parallel-rdp-standalone | 1 + parallel-rdp/spirv.hpp | 109 ++ parallel-rdp/wsi_platform.cpp | 60 ++ parallel-rdp/wsi_platform.hpp | 21 + src/device.rs | 262 +++++ src/device/ai.rs | 169 ++++ src/device/cache.rs | 281 +++++ src/device/cart.rs | 55 + src/device/cart_rom.rs | 151 +++ src/device/controller.rs | 93 ++ src/device/cop0.rs | 377 +++++++ src/device/cop1.rs | 719 +++++++++++++ src/device/cop2.rs | 137 +++ src/device/cpu.rs | 284 ++++++ src/device/cpu_instructions.rs | 1406 ++++++++++++++++++++++++++ src/device/events.rs | 88 ++ src/device/exceptions.rs | 136 +++ src/device/fpu_instructions.rs | 700 +++++++++++++ src/device/is_viewer.rs | 37 + src/device/memory.rs | 164 +++ src/device/mi.rs | 168 +++ src/device/pi.rs | 164 +++ src/device/pif.rs | 222 ++++ src/device/pif/rom.rs | 177 ++++ src/device/rdp.rs | 165 +++ src/device/rdram.rs | 86 ++ src/device/ri.rs | 34 + src/device/rsp_cpu.rs | 429 ++++++++ src/device/rsp_interface.rs | 432 ++++++++ src/device/rsp_su_instructions.rs | 1022 +++++++++++++++++++ src/device/rsp_vu_instructions.rs | 1253 +++++++++++++++++++++++ src/device/si.rs | 119 +++ src/device/sram.rs | 13 + src/device/tlb.rs | 269 +++++ src/device/unmapped.rs | 12 + src/device/vi.rs | 163 +++ src/main.rs | 30 + src/ui.rs | 32 + src/ui/audio.rs | 50 + src/ui/input.rs | 56 + src/ui/video.rs | 40 + 51 files changed, 11398 insertions(+) create mode 100644 .github/dependabot.yml create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 .vscode/settings.json create mode 100644 Cargo.toml create mode 100644 LICENSE create mode 100644 build.rs create mode 100755 build_release.sh create mode 100644 parallel-rdp/interface.cpp create mode 100644 parallel-rdp/interface.hpp create mode 160000 parallel-rdp/parallel-rdp-standalone create mode 100644 parallel-rdp/spirv.hpp create mode 100644 parallel-rdp/wsi_platform.cpp create mode 100644 parallel-rdp/wsi_platform.hpp create mode 100644 src/device.rs create mode 100644 src/device/ai.rs create mode 100644 src/device/cache.rs create mode 100644 src/device/cart.rs create mode 100644 src/device/cart_rom.rs create mode 100644 src/device/controller.rs create mode 100644 src/device/cop0.rs create mode 100644 src/device/cop1.rs create mode 100644 src/device/cop2.rs create mode 100644 src/device/cpu.rs create mode 100644 src/device/cpu_instructions.rs create mode 100644 src/device/events.rs create mode 100644 src/device/exceptions.rs create mode 100644 src/device/fpu_instructions.rs create mode 100644 src/device/is_viewer.rs create mode 100644 src/device/memory.rs create mode 100644 src/device/mi.rs create mode 100644 src/device/pi.rs create mode 100644 src/device/pif.rs create mode 100644 src/device/pif/rom.rs create mode 100644 src/device/rdp.rs create mode 100644 src/device/rdram.rs create mode 100644 src/device/ri.rs create mode 100644 src/device/rsp_cpu.rs create mode 100644 src/device/rsp_interface.rs create mode 100644 src/device/rsp_su_instructions.rs create mode 100644 src/device/rsp_vu_instructions.rs create mode 100644 src/device/si.rs create mode 100644 src/device/sram.rs create mode 100644 src/device/tlb.rs create mode 100644 src/device/unmapped.rs create mode 100644 src/device/vi.rs create mode 100644 src/main.rs create mode 100644 src/ui.rs create mode 100644 src/ui/audio.rs create mode 100644 src/ui/input.rs create mode 100644 src/ui/video.rs diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..13b4ef5 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,10 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" + - package-ecosystem: "cargo" + directory: "/" + schedule: + interval: "daily" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..196e176 --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +# Generated by Cargo +# will have compiled files and executables +debug/ +target/ + +# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries +# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html +Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk + +# MSVC Windows builds of rustc generate these, which store debugging information +*.pdb + + +# Added by cargo + +/target diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..208959e --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "parallel-rdp/parallel-rdp-standalone"] + path = parallel-rdp/parallel-rdp-standalone + url = https://github.com/Themaister/parallel-rdp-standalone.git diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..08b453c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "rust-analyzer.linkedProjects": [ + "./Cargo.toml" + ] +} diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..36d9393 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "rust64" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +sdl2 = "0.35" + +[build-dependencies] +cc = { version = "1.0", features = ["parallel"] } +pkg-config = "0.3" + +[profile.release] +lto = true +codegen-units = 1 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..448bc87 --- /dev/null +++ b/build.rs @@ -0,0 +1,58 @@ +fn main() { + let sdl = pkg_config::Config::new().probe("sdl2").unwrap(); + let mut build = cc::Build::new(); + build + .cpp(true) + .flag("-Wno-missing-field-initializers") + .flag("-Wno-unused-parameter") + .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/command_ring.cpp") + .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/rdp_device.cpp") + .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/rdp_dump_write.cpp") + .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/rdp_renderer.cpp") + .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/video_interface.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/buffer.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/buffer_pool.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/command_buffer.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/command_pool.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/context.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/cookie.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/descriptor_set.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/device.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/event_manager.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/fence.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/fence_manager.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/image.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/indirect_layout.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/memory_allocator.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/pipeline_event.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/query_pool.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/render_pass.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/sampler.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/semaphore.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/semaphore_manager.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/shader.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/texture/texture_format.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/wsi.cpp") + .file("parallel-rdp/parallel-rdp-standalone/util/arena_allocator.cpp") + .file("parallel-rdp/parallel-rdp-standalone/util/logging.cpp") + .file("parallel-rdp/parallel-rdp-standalone/util/thread_id.cpp") + .file("parallel-rdp/parallel-rdp-standalone/util/aligned_alloc.cpp") + .file("parallel-rdp/parallel-rdp-standalone/util/timer.cpp") + .file("parallel-rdp/parallel-rdp-standalone/util/timeline_trace_file.cpp") + .file("parallel-rdp/parallel-rdp-standalone/util/thread_name.cpp") + .file("parallel-rdp/parallel-rdp-standalone/volk/volk.c") + .file("parallel-rdp/interface.cpp") + .file("parallel-rdp/wsi_platform.cpp") + .include("parallel-rdp/parallel-rdp-standalone/parallel-rdp") + .include("parallel-rdp/parallel-rdp-standalone/volk") + .include("parallel-rdp/parallel-rdp-standalone/vulkan") + .include("parallel-rdp/parallel-rdp-standalone/vulkan-headers/include") + .include("parallel-rdp/parallel-rdp-standalone/util") + .includes(sdl.include_paths); + + #[cfg(target_os = "windows")] + { + build.flag("-DVK_USE_PLATFORM_WIN32_KHR"); + } + build.compile("parallel-rdp"); +} diff --git a/build_release.sh b/build_release.sh new file mode 100755 index 0000000..adacbd7 --- /dev/null +++ b/build_release.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +RUSTFLAGS='-C target-cpu=x86-64-v3' cargo build --release diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp new file mode 100644 index 0000000..a5118ec --- /dev/null +++ b/parallel-rdp/interface.cpp @@ -0,0 +1,405 @@ +#include "wsi_platform.hpp" +#include "wsi.hpp" +#include "rdp_device.hpp" +#include "interface.hpp" +#include "spirv.hpp" + +using namespace Vulkan; + +#define DP_STATUS_XBUS_DMA 0x01 +#define DP_STATUS_FREEZE 0x02 +#define DP_STATUS_FLUSH 0x04 +#define DP_STATUS_START_GCLK 0x008 +#define DP_STATUS_TMEM_BUSY 0x010 +#define DP_STATUS_PIPE_BUSY 0x020 +#define DP_STATUS_CMD_BUSY 0x040 +#define DP_STATUS_CBUF_READY 0x080 +#define DP_STATUS_DMA_BUSY 0x100 +#define DP_STATUS_END_VALID 0x200 +#define DP_STATUS_START_VALID 0x400 + +enum dpc_registers +{ + DPC_START_REG, + DPC_END_REG, + DPC_CURRENT_REG, + DPC_STATUS_REG, + DPC_CLOCK_REG, + DPC_BUFBUSY_REG, + DPC_PIPEBUSY_REG, + DPC_TMEM_REG, + DPC_REGS_COUNT +}; + +enum vi_registers +{ + VI_STATUS_REG, + VI_ORIGIN_REG, + VI_WIDTH_REG, + VI_V_INTR_REG, + VI_CURRENT_REG, + VI_BURST_REG, + VI_V_SYNC_REG, + VI_H_SYNC_REG, + VI_LEAP_REG, + VI_H_START_REG, + VI_V_START_REG, + VI_V_BURST_REG, + VI_X_SCALE_REG, + VI_Y_SCALE_REG, + VI_REGS_COUNT +}; + +static void *rdram; +static SDL_Window *window; +static RDP::CommandProcessor *processor; +static WSI *wsi; +static uint32_t cmd_data[0x00040000 >> 2]; +static int cmd_cur; +static int cmd_ptr; +static uint8_t emu_running; +static uint64_t rdp_sync_signal; +static uint32_t vi_registers[14]; + +static uint64_t last_frame_counter; +static uint64_t frame_counter; + +static const unsigned cmd_len_lut[64] = { + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 4, + 6, + 12, + 14, + 12, + 14, + 20, + 22, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, +}; + +enum +{ + MB_RDRAM_DRAM_ALIGNMENT_REQUIREMENT = 64 * 1024 +}; + +void vk_init(void *mem_base, uint32_t rdram_size) +{ + rdram = mem_base; + bool window_vsync = 0; + wsi = new WSI; + SDL_WSIPlatform *wsi_platform = new SDL_WSIPlatform; + wsi_platform->set_window(window); + wsi->set_platform(wsi_platform); + wsi->set_present_mode(window_vsync ? PresentMode::SyncToVBlank : PresentMode::UnlockedMaybeTear); + wsi->set_backbuffer_srgb(false); + Context::SystemHandles handles = {}; + if (!::Vulkan::Context::init_loader(nullptr)) + { + vk_close(); + } + if (!wsi->init_simple(1, handles)) + { + vk_close(); + } + RDP::CommandProcessorFlags flags = 0; + processor = new RDP::CommandProcessor(wsi->get_device(), rdram, 0, rdram_size, rdram_size / 2, flags); + + if (!processor->device_is_supported()) + { + delete processor; + delete wsi; + processor = nullptr; + vk_close(); + } + wsi->begin_frame(); + + emu_running = 1; + last_frame_counter = 0; + frame_counter = 0; +} + +void vk_close() +{ + delete processor; + delete wsi; +} + +int sdl_event_filter(void *userdata, SDL_Event *event) +{ + if (event->type == SDL_WINDOWEVENT) + { + switch (event->window.event) + { + case SDL_WINDOWEVENT_CLOSE: + emu_running = 0; + break; + default: + break; + } + } + + return 0; +} + +void set_sdl_window(void *_window) +{ + window = (SDL_Window *)_window; + SDL_SetEventFilter(sdl_event_filter, nullptr); +} + +static void render_frame(Vulkan::Device &device) +{ + RDP::ScanoutOptions options = {}; + Vulkan::ImageHandle image = processor->scanout(options); + + // Normally reflection is automated. + Vulkan::ResourceLayout vertex_layout = {}; + Vulkan::ResourceLayout fragment_layout = {}; + fragment_layout.output_mask = 1 << 0; + fragment_layout.sets[0].sampled_image_mask = 1 << 0; + + // This request is cached. + auto *program = device.request_program(vertex_spirv, sizeof(vertex_spirv), + fragment_spirv, sizeof(fragment_spirv), + &vertex_layout, + &fragment_layout); + + // Blit image on screen. + auto cmd = device.request_command_buffer(); + { + auto rp = device.get_swapchain_render_pass(Vulkan::SwapchainRenderPass::ColorOnly); + cmd->begin_render_pass(rp); + + VkViewport vp = cmd->get_viewport(); + // Adjust the viewport here for aspect ratio correction. + + cmd->set_program(program); + + // Basic default render state. + cmd->set_opaque_state(); + cmd->set_depth_test(false, false); + cmd->set_cull_mode(VK_CULL_MODE_NONE); + + // If we don't have an image, we just get a cleared screen in the render pass. + if (image) + { + cmd->set_texture(0, 0, image->get_view(), Vulkan::StockSampler::LinearClamp); + cmd->set_viewport(vp); + // The vertices are constants in the shader. + // Draws fullscreen quad using oversized triangle. + cmd->draw(3); + } + + cmd->end_render_pass(); + } + device.submit(cmd); +} + +void rdp_set_vi_register(uint32_t reg, uint32_t value) +{ + processor->set_vi_register(RDP::VIRegister(reg), value); + vi_registers[reg] = value; +} + +uint8_t rdp_update_screen() +{ + auto &device = wsi->get_device(); + render_frame(device); + wsi->end_frame(); + wsi->begin_frame(); + frame_counter++; + return emu_running; +} + +static uint32_t viCalculateHorizonalWidth(uint32_t hstart, uint32_t xscale, uint32_t width) +{ + if (xscale == 0) + return 320; + + uint32_t start = ((hstart & 0x03FF0000) >> 16) & 0x3FF; + uint32_t end = (hstart & 0x3FF); + uint32_t delta; + if (end > start) + delta = end - start; + else + delta = start - end; + uint32_t scale = (xscale & 0xFFF); + + if (delta == 0) + { + delta = width; + } + + return (delta * scale) / 0x400; +} + +static uint32_t viCalculateVerticalHeight(uint32_t vstart, uint32_t yscale) +{ + if (yscale == 0) + return 240; + + uint32_t start = ((vstart & 0x03FF0000) >> 16) & 0x3FF; + uint32_t end = (vstart & 0x3FF); + uint32_t delta; + if (end > start) + delta = end - start; + else + delta = start - end; + uint32_t scale = (yscale & 0xFFF); + + return (delta * scale) / 0x800; +} + +uint64_t rdp_process_commands(uint32_t *dpc_regs, uint8_t *SP_DMEM) +{ + uint64_t interrupt_timer = 0; + const uint32_t DP_CURRENT = dpc_regs[DPC_CURRENT_REG] & 0x00FFFFF8; + const uint32_t DP_END = dpc_regs[DPC_END_REG] & 0x00FFFFF8; + + int length = DP_END - DP_CURRENT; + if (length <= 0) + return interrupt_timer; + + length = unsigned(length) >> 3; + if ((cmd_ptr + length) & ~(0x0003FFFF >> 3)) + return interrupt_timer; + + dpc_regs[DPC_STATUS_REG] |= DP_STATUS_PIPE_BUSY | DP_STATUS_START_GCLK; + + uint32_t offset = DP_CURRENT; + if (dpc_regs[DPC_STATUS_REG] & DP_STATUS_XBUS_DMA) + { + do + { + offset &= 0xFF8; + cmd_data[2 * cmd_ptr + 0] = SDL_SwapBE32(*reinterpret_cast(SP_DMEM + offset)); + cmd_data[2 * cmd_ptr + 1] = SDL_SwapBE32(*reinterpret_cast(SP_DMEM + offset + 4)); + offset += sizeof(uint64_t); + cmd_ptr++; + } while (--length > 0); + } + else + { + if (DP_END > 0x7ffffff || DP_CURRENT > 0x7ffffff) + { + return interrupt_timer; + } + else + { + do + { + offset &= 0xFFFFF8; + cmd_data[2 * cmd_ptr + 0] = *reinterpret_cast((uint8_t *)rdram + offset); + cmd_data[2 * cmd_ptr + 1] = *reinterpret_cast((uint8_t *)rdram + offset + 4); + offset += sizeof(uint64_t); + cmd_ptr++; + } while (--length > 0); + } + } + + while (cmd_cur - cmd_ptr < 0) + { + uint32_t w1 = cmd_data[2 * cmd_cur]; + uint32_t command = (w1 >> 24) & 63; + int cmd_length = cmd_len_lut[command]; + + if (cmd_ptr - cmd_cur - cmd_length < 0) + { + dpc_regs[DPC_START_REG] = dpc_regs[DPC_CURRENT_REG] = dpc_regs[DPC_END_REG]; + return interrupt_timer; + } + + if (command >= 8) + processor->enqueue_command(cmd_length * 2, &cmd_data[2 * cmd_cur]); + + if (RDP::Op(command) == RDP::Op::SyncFull) + { + if (frame_counter != last_frame_counter) // Only sync once per frame + { + rdp_sync_signal = processor->signal_timeline(); + last_frame_counter = frame_counter; + } + else + { + rdp_sync_signal = 0; + } + + uint32_t width = viCalculateHorizonalWidth(vi_registers[VI_H_START_REG], vi_registers[VI_X_SCALE_REG], vi_registers[VI_WIDTH_REG]); + uint32_t height = viCalculateVerticalHeight(vi_registers[VI_V_START_REG], vi_registers[VI_Y_SCALE_REG]); + interrupt_timer = width * height * 4; + + dpc_regs[DPC_STATUS_REG] &= ~(DP_STATUS_PIPE_BUSY | DP_STATUS_START_GCLK); + } + + cmd_cur += cmd_length; + } + + cmd_ptr = 0; + cmd_cur = 0; + dpc_regs[DPC_CURRENT_REG] = dpc_regs[DPC_END_REG]; + dpc_regs[DPC_STATUS_REG] |= DP_STATUS_CBUF_READY; + + return interrupt_timer; +} + +void full_sync() +{ + if (rdp_sync_signal) + { + processor->wait_for_timeline(rdp_sync_signal); + } +} diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp new file mode 100644 index 0000000..c084e85 --- /dev/null +++ b/parallel-rdp/interface.hpp @@ -0,0 +1,18 @@ +#pragma once + +#ifdef __cplusplus +extern "C" +{ +#endif + + void vk_init(void *mem_base, uint32_t rdram_size); + void vk_close(); + void set_sdl_window(void *_window); + void rdp_set_vi_register(uint32_t reg, uint32_t value); + uint8_t rdp_update_screen(); + uint64_t rdp_process_commands(uint32_t *dpc_regs, uint8_t *SP_DMEM); + void full_sync(); + +#ifdef __cplusplus +} +#endif diff --git a/parallel-rdp/parallel-rdp-standalone b/parallel-rdp/parallel-rdp-standalone new file mode 160000 index 0000000..37bf296 --- /dev/null +++ b/parallel-rdp/parallel-rdp-standalone @@ -0,0 +1 @@ +Subproject commit 37bf2967e3dd18e059cf5563717bb6c88c261f33 diff --git a/parallel-rdp/spirv.hpp b/parallel-rdp/spirv.hpp new file mode 100644 index 0000000..50619fc --- /dev/null +++ b/parallel-rdp/spirv.hpp @@ -0,0 +1,109 @@ +#pragma once + +static const uint32_t vertex_spirv[] = + {0x07230203, 0x00010000, 0x000d000a, 0x00000034, + 0x00000000, 0x00020011, 0x00000001, 0x0006000b, + 0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e, + 0x00000000, 0x0003000e, 0x00000000, 0x00000001, + 0x0008000f, 0x00000000, 0x00000004, 0x6e69616d, + 0x00000000, 0x00000008, 0x00000016, 0x0000002b, + 0x00040047, 0x00000008, 0x0000000b, 0x0000002a, + 0x00050048, 0x00000014, 0x00000000, 0x0000000b, + 0x00000000, 0x00050048, 0x00000014, 0x00000001, + 0x0000000b, 0x00000001, 0x00050048, 0x00000014, + 0x00000002, 0x0000000b, 0x00000003, 0x00050048, + 0x00000014, 0x00000003, 0x0000000b, 0x00000004, + 0x00030047, 0x00000014, 0x00000002, 0x00040047, + 0x0000002b, 0x0000001e, 0x00000000, 0x00020013, + 0x00000002, 0x00030021, 0x00000003, 0x00000002, + 0x00040015, 0x00000006, 0x00000020, 0x00000001, + 0x00040020, 0x00000007, 0x00000001, 0x00000006, + 0x0004003b, 0x00000007, 0x00000008, 0x00000001, + 0x0004002b, 0x00000006, 0x0000000a, 0x00000000, + 0x00020014, 0x0000000b, 0x00030016, 0x0000000f, + 0x00000020, 0x00040017, 0x00000010, 0x0000000f, + 0x00000004, 0x00040015, 0x00000011, 0x00000020, + 0x00000000, 0x0004002b, 0x00000011, 0x00000012, + 0x00000001, 0x0004001c, 0x00000013, 0x0000000f, + 0x00000012, 0x0006001e, 0x00000014, 0x00000010, + 0x0000000f, 0x00000013, 0x00000013, 0x00040020, + 0x00000015, 0x00000003, 0x00000014, 0x0004003b, + 0x00000015, 0x00000016, 0x00000003, 0x0004002b, + 0x0000000f, 0x00000017, 0xbf800000, 0x0004002b, + 0x0000000f, 0x00000018, 0x00000000, 0x0004002b, + 0x0000000f, 0x00000019, 0x3f800000, 0x0007002c, + 0x00000010, 0x0000001a, 0x00000017, 0x00000017, + 0x00000018, 0x00000019, 0x00040020, 0x0000001b, + 0x00000003, 0x00000010, 0x0004002b, 0x00000006, + 0x0000001f, 0x00000001, 0x0004002b, 0x0000000f, + 0x00000023, 0x40400000, 0x0007002c, 0x00000010, + 0x00000024, 0x00000017, 0x00000023, 0x00000018, + 0x00000019, 0x0007002c, 0x00000010, 0x00000027, + 0x00000023, 0x00000017, 0x00000018, 0x00000019, + 0x00040017, 0x00000029, 0x0000000f, 0x00000002, + 0x00040020, 0x0000002a, 0x00000003, 0x00000029, + 0x0004003b, 0x0000002a, 0x0000002b, 0x00000003, + 0x0004002b, 0x0000000f, 0x0000002f, 0x3f000000, + 0x0005002c, 0x00000029, 0x00000033, 0x0000002f, + 0x0000002f, 0x00050036, 0x00000002, 0x00000004, + 0x00000000, 0x00000003, 0x000200f8, 0x00000005, + 0x0004003d, 0x00000006, 0x00000009, 0x00000008, + 0x000500aa, 0x0000000b, 0x0000000c, 0x00000009, + 0x0000000a, 0x000300f7, 0x0000000e, 0x00000000, + 0x000400fa, 0x0000000c, 0x0000000d, 0x0000001d, + 0x000200f8, 0x0000000d, 0x00050041, 0x0000001b, + 0x0000001c, 0x00000016, 0x0000000a, 0x0003003e, + 0x0000001c, 0x0000001a, 0x000200f9, 0x0000000e, + 0x000200f8, 0x0000001d, 0x000500aa, 0x0000000b, + 0x00000020, 0x00000009, 0x0000001f, 0x000300f7, + 0x00000022, 0x00000000, 0x000400fa, 0x00000020, + 0x00000021, 0x00000026, 0x000200f8, 0x00000021, + 0x00050041, 0x0000001b, 0x00000025, 0x00000016, + 0x0000000a, 0x0003003e, 0x00000025, 0x00000024, + 0x000200f9, 0x00000022, 0x000200f8, 0x00000026, + 0x00050041, 0x0000001b, 0x00000028, 0x00000016, + 0x0000000a, 0x0003003e, 0x00000028, 0x00000027, + 0x000200f9, 0x00000022, 0x000200f8, 0x00000022, + 0x000200f9, 0x0000000e, 0x000200f8, 0x0000000e, + 0x00050041, 0x0000001b, 0x0000002c, 0x00000016, + 0x0000000a, 0x0004003d, 0x00000010, 0x0000002d, + 0x0000002c, 0x0007004f, 0x00000029, 0x0000002e, + 0x0000002d, 0x0000002d, 0x00000000, 0x00000001, + 0x0005008e, 0x00000029, 0x00000030, 0x0000002e, + 0x0000002f, 0x00050081, 0x00000029, 0x00000032, + 0x00000030, 0x00000033, 0x0003003e, 0x0000002b, + 0x00000032, 0x000100fd, 0x00010038}; + +static const uint32_t fragment_spirv[] = + {0x07230203, 0x00010000, 0x000d000a, 0x00000015, + 0x00000000, 0x00020011, 0x00000001, 0x0006000b, + 0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e, + 0x00000000, 0x0003000e, 0x00000000, 0x00000001, + 0x0007000f, 0x00000004, 0x00000004, 0x6e69616d, + 0x00000000, 0x00000009, 0x00000011, 0x00030010, + 0x00000004, 0x00000007, 0x00040047, 0x00000009, + 0x0000001e, 0x00000000, 0x00040047, 0x0000000d, + 0x00000022, 0x00000000, 0x00040047, 0x0000000d, + 0x00000021, 0x00000000, 0x00040047, 0x00000011, + 0x0000001e, 0x00000000, 0x00020013, 0x00000002, + 0x00030021, 0x00000003, 0x00000002, 0x00030016, + 0x00000006, 0x00000020, 0x00040017, 0x00000007, + 0x00000006, 0x00000004, 0x00040020, 0x00000008, + 0x00000003, 0x00000007, 0x0004003b, 0x00000008, + 0x00000009, 0x00000003, 0x00090019, 0x0000000a, + 0x00000006, 0x00000001, 0x00000000, 0x00000000, + 0x00000000, 0x00000001, 0x00000000, 0x0003001b, + 0x0000000b, 0x0000000a, 0x00040020, 0x0000000c, + 0x00000000, 0x0000000b, 0x0004003b, 0x0000000c, + 0x0000000d, 0x00000000, 0x00040017, 0x0000000f, + 0x00000006, 0x00000002, 0x00040020, 0x00000010, + 0x00000001, 0x0000000f, 0x0004003b, 0x00000010, + 0x00000011, 0x00000001, 0x0004002b, 0x00000006, + 0x00000013, 0x00000000, 0x00050036, 0x00000002, + 0x00000004, 0x00000000, 0x00000003, 0x000200f8, + 0x00000005, 0x0004003d, 0x0000000b, 0x0000000e, + 0x0000000d, 0x0004003d, 0x0000000f, 0x00000012, + 0x00000011, 0x00070058, 0x00000007, 0x00000014, + 0x0000000e, 0x00000012, 0x00000002, 0x00000013, + 0x0003003e, 0x00000009, 0x00000014, 0x000100fd, + 0x00010038}; diff --git a/parallel-rdp/wsi_platform.cpp b/parallel-rdp/wsi_platform.cpp new file mode 100644 index 0000000..4cfc213 --- /dev/null +++ b/parallel-rdp/wsi_platform.cpp @@ -0,0 +1,60 @@ +#include "wsi_platform.hpp" +#include + +VkSurfaceKHR SDL_WSIPlatform::create_surface(VkInstance instance, VkPhysicalDevice gpu) +{ + VkSurfaceKHR surface = nullptr; + SDL_bool result = SDL_Vulkan_CreateSurface(window, instance, &surface); + if (result != SDL_TRUE) + { + printf("Error creating surface\n"); + } + return surface; +} + +void SDL_WSIPlatform::destroy_surface(VkInstance instance, VkSurfaceKHR surface) +{ +} + +std::vector SDL_WSIPlatform::get_instance_extensions() +{ + + unsigned int extensionCount = 0; + SDL_Vulkan_GetInstanceExtensions(window, &extensionCount, nullptr); + std::vector extensionNames(extensionCount); + SDL_bool result = SDL_Vulkan_GetInstanceExtensions(window, &extensionCount, extensionNames.data()); + if (result != SDL_TRUE) + { + printf("Error creating surface\n"); + } + return extensionNames; +} + +uint32_t SDL_WSIPlatform::get_surface_width() +{ + int w, h; + SDL_GetWindowSize(window, &w, &h); + return w; +} + +uint32_t SDL_WSIPlatform::get_surface_height() +{ + int w, h; + SDL_GetWindowSize(window, &w, &h); + return h; +} + +bool SDL_WSIPlatform::alive(Vulkan::WSI &wsi) +{ + return true; +} + +void SDL_WSIPlatform::poll_input() +{ + SDL_PumpEvents(); +} + +void SDL_WSIPlatform::set_window(SDL_Window *_window) +{ + window = _window; +} diff --git a/parallel-rdp/wsi_platform.hpp b/parallel-rdp/wsi_platform.hpp new file mode 100644 index 0000000..5c1c0fe --- /dev/null +++ b/parallel-rdp/wsi_platform.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include "wsi.hpp" +#include + +class SDL_WSIPlatform : public Vulkan::WSIPlatform +{ +public: + VkSurfaceKHR create_surface(VkInstance instance, VkPhysicalDevice gpu) override; + void destroy_surface(VkInstance instance, VkSurfaceKHR surface) override; + std::vector get_instance_extensions() override; + uint32_t get_surface_width() override; + uint32_t get_surface_height() override; + bool alive(Vulkan::WSI &wsi) override; + void poll_input() override; + void set_window(SDL_Window *_window); + +private: + VkSurfaceKHR surface; + SDL_Window *window; +}; diff --git a/src/device.rs b/src/device.rs new file mode 100644 index 0000000..3ed2e22 --- /dev/null +++ b/src/device.rs @@ -0,0 +1,262 @@ +use crate::ui; + +pub mod ai; +pub mod cache; +pub mod cart; +pub mod cart_rom; +pub mod controller; +pub mod cop0; +pub mod cop1; +pub mod cop2; +pub mod cpu; +pub mod cpu_instructions; +pub mod events; +pub mod exceptions; +pub mod fpu_instructions; +pub mod is_viewer; +pub mod memory; +pub mod mi; +pub mod pi; +pub mod pif; +pub mod rdp; +pub mod rdram; +pub mod ri; +pub mod rsp_cpu; +pub mod rsp_interface; +pub mod rsp_su_instructions; +pub mod rsp_vu_instructions; +pub mod si; +pub mod sram; +pub mod tlb; +pub mod unmapped; +pub mod vi; + +pub struct Device { + pub ui: ui::Ui, + byte_swap: usize, + cpu: cpu::Cpu, + pif: pif::Pif, + cart: cart_rom::Cart, + memory: memory::Memory, + rsp: rsp_interface::Rsp, + rdp: rdp::Rdp, + pub rdram: rdram::Rdram, + mi: mi::Mi, + pi: pi::Pi, + vi: vi::Vi, + ai: ai::Ai, + si: si::Si, + ri: ri::Ri, +} + +impl Device { + pub fn new() -> Device { + let mut byte_swap: usize = 0; + let test: [u8; 4] = [1, 2, 3, 4]; + // if the host computer is little endian, that means the RDRAM will be stored as little endian + // when accessing bytes in RDRAM, we need to swap them by XORing with the byte_swap value (3) + if u32::from_le_bytes(test) == u32::from_ne_bytes(test) { + byte_swap = 3; + } + Device { + ui: ui::Ui::new(), + byte_swap: byte_swap, + cpu: cpu::Cpu { + cop0: cop0::Cop0 { + regs: [0; cop0::COP0_REGS_COUNT as usize], + reg_write_masks: [0; cop0::COP0_REGS_COUNT as usize], + reg_latch: 0, + instrs: [cop0::reserved; 32], + instrs2: [cop0::reserved; 32], + tlb_lut_w: vec![ + tlb::TlbLut { + address: 0, + cached: false, + }; + 0x100000 + ], + tlb_lut_r: vec![ + tlb::TlbLut { + address: 0, + cached: false, + }; + 0x100000 + ], + tlb_entries: [tlb::TlbEntry { + mask: 0, + vpn2: 0, + region: 0, + g: 0, + asid: 0, + pfn_even: 0, + c_even: 0, + d_even: 0, + v_even: 0, + pfn_odd: 0, + c_odd: 0, + d_odd: 0, + v_odd: 0, + start_even: 0, + end_even: 0, + phys_even: 0, + start_odd: 0, + end_odd: 0, + phys_odd: 0, + }; 32], + }, + cop1: cop1::Cop1 { + fcr0: 0, + fcr31: 0, + fgr32: [[0; 4]; 32], + fgr64: [[0; 8]; 32], + instrs: [cop1::reserved; 32], + b_instrs: [cop1::reserved; 4], + s_instrs: [cop1::reserved; 64], + d_instrs: [cop1::reserved; 64], + w_instrs: [cop1::reserved; 64], + l_instrs: [cop1::reserved; 64], + }, + cop2: cop2::Cop2 { + instrs: [cop2::reserved; 32], + reg_latch: 0, + }, + branch_state: cpu::BranchState { + state: cpu::State::Step, + pc: 0, + }, + gpr: [0; 32], + clock_rate: 0, + pc: 0xBFC00000, + llbit: false, + lo: 0, + hi: 0, + running: 0, + instrs: [cop0::reserved; 64], + special_instrs: [cop0::reserved; 64], + regimm_instrs: [cop0::reserved; 32], + events: vec![], + next_event_count: u64::MAX, + next_event: None, + }, + pif: pif::Pif { + rom: [0; 1984], + ram: [0; 64], + channels: [pif::PifChannel { + tx: None, + tx_buf: None, + rx: None, + rx_buf: None, + process: None, + }; 5], + }, + cart: cart_rom::Cart { + rom: Vec::new(), + is_viewer_buffer: [0; 0xFFFF], + pal: false, + latch: 0, + cic_seed: 0, + cic_type: cart_rom::CicType::CicNus6102, + rdram_size_offset: 0, + }, + memory: memory::Memory { + fast_read: [unmapped::read_mem; 0x2000], + memory_map_read: [unmapped::read_mem; 0x2000], + memory_map_write: [unmapped::write_mem; 0x2000], + icache: [cache::ICache { + valid: false, + index: 0, + tag: 0, + words: [0; 8], + instruction: [cop0::reserved; 8], + }; 512], + dcache: [cache::DCache { + valid: false, + dirty: false, + tag: 0, + index: 0, + words: [0; 4], + }; 512], + }, + rdram: rdram::Rdram { mem: vec![] }, + rsp: rsp_interface::Rsp { + cpu: rsp_cpu::Cpu { + branch_state: rsp_cpu::BranchState { + state: cpu::State::Step, + pc: 0, + }, + broken: false, + halted: false, + sync_point: false, + gpr: [0; 32], + vpr: [0; 32], + reciprocals: [0; 512], + inverse_square_roots: [0; 512], + divdp: false, + divin: 0, + divout: 0, + vcol: unsafe { std::arch::x86_64::_mm_setzero_si128() }, + vcoh: unsafe { std::arch::x86_64::_mm_setzero_si128() }, + vccl: unsafe { std::arch::x86_64::_mm_setzero_si128() }, + vcch: unsafe { std::arch::x86_64::_mm_setzero_si128() }, + vce: unsafe { std::arch::x86_64::_mm_setzero_si128() }, + accl: unsafe { std::arch::x86_64::_mm_setzero_si128() }, + accm: unsafe { std::arch::x86_64::_mm_setzero_si128() }, + acch: unsafe { std::arch::x86_64::_mm_setzero_si128() }, + special_instrs: [rsp_su_instructions::reserved; 48], + regimm_instrs: [rsp_su_instructions::reserved; 18], + cop0_instrs: [rsp_su_instructions::reserved; 5], + cop2_instrs: [rsp_su_instructions::reserved; 32], + lwc2_instrs: [rsp_su_instructions::reserved; 12], + swc2_instrs: [rsp_su_instructions::reserved; 12], + instrs: [rsp_su_instructions::reserved; 64], + vec_instrs: [rsp_vu_instructions::reserved; 64], + }, + regs: [0; rsp_interface::SP_REGS_COUNT as usize], + regs2: [0; rsp_interface::SP_REGS2_COUNT as usize], + mem: [0; 0x2000], + fifo: [rsp_interface::RspDma { + dir: rsp_interface::DmaDir::None, + length: 0, + memaddr: 0, + dramaddr: 0, + }; 2], + }, + rdp: rdp::Rdp { + regs_dpc: [0; rdp::DPC_REGS_COUNT as usize], + regs_dps: [0; rdp::DPS_REGS_COUNT as usize], + }, + mi: mi::Mi { + regs: [0; mi::MI_REGS_COUNT as usize], + }, + pi: pi::Pi { + regs: [0; pi::PI_REGS_COUNT as usize], + }, + ai: ai::Ai { + regs: [0; ai::AI_REGS_COUNT as usize], + last_read: 0, + delayed_carry: false, + fifo: [ai::AiDma { + address: 0, + length: 0, + duration: 0, + }; 2], + }, + si: si::Si { + regs: [0; si::SI_REGS_COUNT as usize], + dma_dir: si::DmaDir::None, + }, + ri: ri::Ri { + regs: [0; ri::RI_REGS_COUNT as usize], + }, + vi: vi::Vi { + regs: [0; vi::VI_REGS_COUNT as usize], + clock: 0, + field: 0, + delay: 0, + count_per_scanline: 0, + last_vi_time: std::time::Instant::now(), + vi_period: std::time::Duration::from_secs_f64(0.0), + }, + } + } +} diff --git a/src/device/ai.rs b/src/device/ai.rs new file mode 100644 index 0000000..2b192b4 --- /dev/null +++ b/src/device/ai.rs @@ -0,0 +1,169 @@ +use crate::device; +use crate::ui; + +pub const AI_DRAM_ADDR_REG: u32 = 0; +pub const AI_LEN_REG: u32 = 1; +//pub const AI_CONTROL_REG: u32 = 2; +pub const AI_STATUS_REG: u32 = 3; +pub const AI_DACRATE_REG: u32 = 4; +//pub const AI_BITRATE_REG: u32 = 5; +pub const AI_REGS_COUNT: u32 = 6; + +pub const AI_STATUS_BUSY: u32 = 0x40000000; +pub const AI_STATUS_FULL: u32 = 0x80000000; + +pub struct Ai { + pub regs: [u32; AI_REGS_COUNT as usize], + pub fifo: [AiDma; 2], + pub last_read: u64, + pub delayed_carry: bool, +} + +#[derive(Copy, Clone)] +pub struct AiDma { + pub address: u64, + pub length: u64, + pub duration: u64, +} + +pub fn get_remaining_dma_length(device: &mut device::Device) -> u64 { + if device.ai.fifo[0].duration == 0 { + return 0; + } + + let next_ai_event = device::events::get_event(device, device::events::EventType::AI); + if next_ai_event == None { + return 0; + } + + let remaining_dma_duration = + next_ai_event.unwrap().count - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize]; + + let dma_length = remaining_dma_duration * device.ai.fifo[0].length / device.ai.fifo[0].duration; + return dma_length & !7; +} + +pub fn get_dma_duration(device: &mut device::Device) -> u64 { + let samples_per_sec = device.vi.clock / (1 + device.ai.regs[AI_DACRATE_REG as usize]) as u64; + let bytes_per_sample = 4; /* XXX: assume 16bit stereo - should depends on bitrate instead */ + let length = (device.ai.regs[AI_LEN_REG as usize] & !7) as u64; + + return length * (device.cpu.clock_rate / (bytes_per_sample * samples_per_sec)); +} + +pub fn do_dma(device: &mut device::Device) { + device.ai.last_read = device.ai.fifo[0].length; + + if device.ai.delayed_carry { + device.ai.fifo[0].address += 0x2000; + } + + if ((device.ai.fifo[0].address + device.ai.fifo[0].length) & 0x1FFF) == 0 { + device.ai.delayed_carry = true; + } else { + device.ai.delayed_carry = false; + } + + /* schedule end of dma event */ + device::events::create_event( + device, + device::events::EventType::AI, + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + device.ai.fifo[0].duration, + dma_event, + ) +} + +pub fn fifo_push(device: &mut device::Device) { + let duration = get_dma_duration(device); + + if (device.ai.regs[AI_STATUS_REG as usize] & AI_STATUS_BUSY) != 0 { + device.ai.fifo[1].address = + device.ai.regs[AI_DRAM_ADDR_REG as usize] as u64 & device::rdram::RDRAM_MASK as u64; + device.ai.fifo[1].length = (device.ai.regs[AI_LEN_REG as usize] & !7) as u64; + device.ai.fifo[1].duration = duration; + device.ai.regs[AI_STATUS_REG as usize] |= AI_STATUS_FULL; + } else { + device.ai.fifo[0].address = + device.ai.regs[AI_DRAM_ADDR_REG as usize] as u64 & device::rdram::RDRAM_MASK as u64; + device.ai.fifo[0].length = (device.ai.regs[AI_LEN_REG as usize] & !7) as u64; + device.ai.fifo[0].duration = duration; + device.ai.regs[AI_STATUS_REG as usize] |= AI_STATUS_BUSY; + + device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_AI); + do_dma(device); + } +} + +pub fn fifo_pop(device: &mut device::Device) { + if device.ai.regs[AI_STATUS_REG as usize] & AI_STATUS_FULL != 0 { + device.ai.fifo[0].address = device.ai.fifo[1].address; + device.ai.fifo[0].length = device.ai.fifo[1].length; + device.ai.fifo[0].duration = device.ai.fifo[1].duration; + device.ai.regs[AI_STATUS_REG as usize] &= !AI_STATUS_FULL; + + do_dma(device); + } else { + device.ai.regs[AI_STATUS_REG as usize] &= !AI_STATUS_BUSY; + device.ai.delayed_carry = false; + } +} + +pub fn read_regs( + device: &mut device::Device, + address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + let reg = (address & 0xFFFF) >> 2; + match reg as u32 { + AI_LEN_REG => { + let value = get_remaining_dma_length(device); + let diff = device.ai.fifo[0].length - device.ai.last_read; + + ui::audio::play_audio( + device, + (device.ai.fifo[0].address + diff) as usize, + device.ai.last_read - value, + ); + + device.ai.last_read = value; + return value as u32; + } + _ => return device.ai.regs[reg as usize], + } +} + +pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { + let reg = (address & 0xFFFF) >> 2; + match reg as u32 { + AI_LEN_REG => { + device::memory::masked_write_32(&mut device.ai.regs[reg as usize], value, mask); + if device.ai.regs[reg as usize] != 0 { + fifo_push(device) + } + } + AI_STATUS_REG => device::mi::clear_rcp_interrupt(device, device::mi::MI_INTR_AI), + AI_DACRATE_REG => { + if device.ai.regs[reg as usize] != value & mask { + let frequency = device.vi.clock / (1 + (value & mask)) as u64; + ui::audio::init(&mut device.ui, frequency) + } + device::memory::masked_write_32(&mut device.ai.regs[reg as usize], value, mask) + } + _ => device::memory::masked_write_32(&mut device.ai.regs[reg as usize], value, mask), + } +} + +pub fn dma_event(device: &mut device::Device) { + if device.ai.last_read != 0 { + let diff = device.ai.fifo[0].length - device.ai.last_read; + ui::audio::play_audio( + device, + (device.ai.fifo[0].address + diff) as usize, + device.ai.last_read, + ); + device.ai.last_read = 0; + } + + fifo_pop(device); + device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_AI); +} diff --git a/src/device/cache.rs b/src/device/cache.rs new file mode 100644 index 0000000..3c94da0 --- /dev/null +++ b/src/device/cache.rs @@ -0,0 +1,281 @@ +use crate::device; + +#[derive(Copy, Clone)] +pub struct ICache { + pub valid: bool, + pub tag: u32, + pub index: u16, + pub words: [u32; 8], + pub instruction: [fn(&mut device::Device, u32); 8], +} + +#[derive(Copy, Clone)] +pub struct DCache { + pub valid: bool, + pub dirty: bool, + pub tag: u32, + pub index: u16, + pub words: [u32; 4], +} + +pub fn icache_hit(device: &mut device::Device, line_index: usize, phys_address: u64) -> bool { + return device.memory.icache[line_index].valid + && (device.memory.icache[line_index].tag & 0x1ffffffc) == (phys_address & !0xFFF) as u32; +} + +pub fn icache_writeback(device: &mut device::Device, line_index: usize) { + device::cop0::add_cycles(device, device::rdram::rdram_calculate_cycles(32)); + + let cache_address = ((device.memory.icache[line_index].tag + | (device.memory.icache[line_index].index) as u32) + & 0x1ffffffc) as u64; + device.memory.memory_map_write[(cache_address >> 16) as usize]( + device, + cache_address | 0x0, + device.memory.icache[line_index].words[0], + 0xFFFFFFFF, + ); + device.memory.memory_map_write[(cache_address >> 16) as usize]( + device, + cache_address | 0x4, + device.memory.icache[line_index].words[1], + 0xFFFFFFFF, + ); + device.memory.memory_map_write[(cache_address >> 16) as usize]( + device, + cache_address | 0x8, + device.memory.icache[line_index].words[2], + 0xFFFFFFFF, + ); + device.memory.memory_map_write[(cache_address >> 16) as usize]( + device, + cache_address | 0xC, + device.memory.icache[line_index].words[3], + 0xFFFFFFFF, + ); + device.memory.memory_map_write[(cache_address >> 16) as usize]( + device, + cache_address | 0x10, + device.memory.icache[line_index].words[4], + 0xFFFFFFFF, + ); + device.memory.memory_map_write[(cache_address >> 16) as usize]( + device, + cache_address | 0x14, + device.memory.icache[line_index].words[5], + 0xFFFFFFFF, + ); + device.memory.memory_map_write[(cache_address >> 16) as usize]( + device, + cache_address | 0x18, + device.memory.icache[line_index].words[6], + 0xFFFFFFFF, + ); + device.memory.memory_map_write[(cache_address >> 16) as usize]( + device, + cache_address | 0x1C, + device.memory.icache[line_index].words[7], + 0xFFFFFFFF, + ); +} + +pub fn icache_fill(device: &mut device::Device, line_index: usize, phys_address: u64) { + device::cop0::add_cycles(device, 8); + + device.memory.icache[line_index].valid = true; + device.memory.icache[line_index].tag = (phys_address & !0xFFF) as u32; + let cache_address = ((device.memory.icache[line_index].tag + | (device.memory.icache[line_index].index) as u32) + & 0x1ffffffc) as u64; + device.memory.icache[line_index].words[0] = device.memory.memory_map_read + [(cache_address >> 16) as usize]( + device, + cache_address | 0x0, + device::memory::AccessSize::Icache, + ); + device.memory.icache[line_index].words[1] = device.memory.memory_map_read + [(cache_address >> 16) as usize]( + device, + cache_address | 0x4, + device::memory::AccessSize::Icache, + ); + device.memory.icache[line_index].words[2] = device.memory.memory_map_read + [(cache_address >> 16) as usize]( + device, + cache_address | 0x8, + device::memory::AccessSize::Icache, + ); + device.memory.icache[line_index].words[3] = device.memory.memory_map_read + [(cache_address >> 16) as usize]( + device, + cache_address | 0xC, + device::memory::AccessSize::Icache, + ); + device.memory.icache[line_index].words[4] = device.memory.memory_map_read + [(cache_address >> 16) as usize]( + device, + cache_address | 0x10, + device::memory::AccessSize::Icache, + ); + device.memory.icache[line_index].words[5] = device.memory.memory_map_read + [(cache_address >> 16) as usize]( + device, + cache_address | 0x14, + device::memory::AccessSize::Icache, + ); + device.memory.icache[line_index].words[6] = device.memory.memory_map_read + [(cache_address >> 16) as usize]( + device, + cache_address | 0x18, + device::memory::AccessSize::Icache, + ); + device.memory.icache[line_index].words[7] = device.memory.memory_map_read + [(cache_address >> 16) as usize]( + device, + cache_address | 0x1C, + device::memory::AccessSize::Icache, + ); + + device.memory.icache[line_index].instruction[0] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[0]); + device.memory.icache[line_index].instruction[1] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[1]); + device.memory.icache[line_index].instruction[2] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[2]); + device.memory.icache[line_index].instruction[3] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[3]); + device.memory.icache[line_index].instruction[4] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[4]); + device.memory.icache[line_index].instruction[5] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[5]); + device.memory.icache[line_index].instruction[6] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[6]); + device.memory.icache[line_index].instruction[7] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[7]); +} + +pub fn icache_fetch(device: &mut device::Device, phys_address: u64) { + let line_index = ((phys_address >> 5) & 0x1FF) as usize; + if !icache_hit(device, line_index, phys_address) { + icache_fill(device, line_index, phys_address) + } + device.memory.icache[line_index].instruction[((phys_address >> 2) & 7) as usize]( + device, + device.memory.icache[line_index].words[((phys_address >> 2) & 7) as usize], + ); +} + +pub fn dcache_hit(device: &mut device::Device, line_index: usize, phys_address: u64) -> bool { + return device.memory.dcache[line_index].valid + && (device.memory.dcache[line_index].tag & 0x1ffffffc) == (phys_address & !0xFFF) as u32; +} + +pub fn dcache_writeback(device: &mut device::Device, line_index: usize) { + device::cop0::add_cycles(device, device::rdram::rdram_calculate_cycles(16)); + + device.memory.dcache[line_index].dirty = false; + + let cache_address = ((device.memory.dcache[line_index].tag + | (device.memory.dcache[line_index].index) as u32) + & 0x1ffffffc) as u64; + device.memory.memory_map_write[(cache_address >> 16) as usize]( + device, + cache_address | 0x0, + device.memory.dcache[line_index].words[0], + 0xFFFFFFFF, + ); + device.memory.memory_map_write[(cache_address >> 16) as usize]( + device, + cache_address | 0x4, + device.memory.dcache[line_index].words[1], + 0xFFFFFFFF, + ); + device.memory.memory_map_write[(cache_address >> 16) as usize]( + device, + cache_address | 0x8, + device.memory.dcache[line_index].words[2], + 0xFFFFFFFF, + ); + device.memory.memory_map_write[(cache_address >> 16) as usize]( + device, + cache_address | 0xC, + device.memory.dcache[line_index].words[3], + 0xFFFFFFFF, + ); +} + +pub fn dcache_fill(device: &mut device::Device, line_index: usize, phys_address: u64) { + device::cop0::add_cycles(device, 7); + + device.memory.dcache[line_index].valid = true; + device.memory.dcache[line_index].dirty = false; + + device.memory.dcache[line_index].tag = (phys_address & !0xFFF) as u32; + let cache_address = ((device.memory.dcache[line_index].tag + | (device.memory.dcache[line_index].index) as u32) + & 0x1ffffffc) as u64; + device.memory.dcache[line_index].words[0] = device.memory.memory_map_read + [(cache_address >> 16) as usize]( + device, + cache_address | 0x0, + device::memory::AccessSize::Dcache, + ); + device.memory.dcache[line_index].words[1] = device.memory.memory_map_read + [(cache_address >> 16) as usize]( + device, + cache_address | 0x4, + device::memory::AccessSize::Dcache, + ); + device.memory.dcache[line_index].words[2] = device.memory.memory_map_read + [(cache_address >> 16) as usize]( + device, + cache_address | 0x8, + device::memory::AccessSize::Dcache, + ); + device.memory.dcache[line_index].words[3] = device.memory.memory_map_read + [(cache_address >> 16) as usize]( + device, + cache_address | 0xC, + device::memory::AccessSize::Dcache, + ); +} + +pub fn dcache_read(device: &mut device::Device, phys_address: u64) -> u32 { + let line_index = ((phys_address >> 4) & 0x1FF) as usize; + if !dcache_hit(device, line_index, phys_address) { + if device.memory.dcache[line_index].valid && device.memory.dcache[line_index].dirty { + dcache_writeback(device, line_index) + } + dcache_fill(device, line_index, phys_address) + } else { + device::cop0::add_cycles(device, 1) + } + return device.memory.dcache[line_index].words[((phys_address >> 2) & 3) as usize]; +} + +pub fn dcache_write(device: &mut device::Device, phys_address: u64, value: u32, mask: u32) { + let line_index = ((phys_address >> 4) & 0x1FF) as usize; + if !dcache_hit(device, line_index, phys_address) { + if device.memory.dcache[line_index].valid && device.memory.dcache[line_index].dirty { + dcache_writeback(device, line_index) + } + dcache_fill(device, line_index, phys_address) + } else { + device::cop0::add_cycles(device, 1) + } + device::memory::masked_write_32( + &mut device.memory.dcache[line_index].words[((phys_address >> 2) & 3) as usize], + value, + mask, + ); + device.memory.dcache[line_index].dirty = true; +} + +pub fn init(device: &mut device::Device) { + for (pos, i) in device.memory.icache.iter_mut().enumerate() { + i.index = (pos << 5) as u16 & 0xFE0 + } + for (pos, i) in device.memory.dcache.iter_mut().enumerate() { + i.index = (pos << 4) as u16 & 0xFF0 + } +} diff --git a/src/device/cart.rs b/src/device/cart.rs new file mode 100644 index 0000000..5d1dde2 --- /dev/null +++ b/src/device/cart.rs @@ -0,0 +1,55 @@ +use crate::device; + +pub const JCMD_STATUS: u8 = 0x00; +pub const JCMD_EEPROM_READ: u8 = 0x04; +pub const JCMD_EEPROM_WRITE: u8 = 0x05; +pub const JCMD_RESET: u8 = 0xff; + +//pub const JDT_AF_RTC: u16 = 0x1000; /* RTC */ +pub const JDT_EEPROM_4K: u16 = 0x8000; /* 4k EEPROM */ +//pub const JDT_EEPROM_16K: u16 = 0xc000; /* 16k EEPROM */ +pub const EEPROM_TYPE: u16 = JDT_EEPROM_4K; // todo, support 16k eeprom + //pub const EEPROM_BLOCK_SIZE: usize = 8; + +pub fn process(device: &mut device::Device, channel: usize) { + let cmd = device.pif.ram[device.pif.channels[channel].tx_buf.unwrap()]; + + match cmd { + JCMD_RESET => { /* reset */ } + JCMD_STATUS => { + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] = EEPROM_TYPE as u8; + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap() + 1] = + (EEPROM_TYPE >> 8) as u8; + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap() + 2] = 0; + } + JCMD_EEPROM_READ => { + eeprom_read_block( + device, + device.pif.channels[channel].tx_buf.unwrap() + 1, + device.pif.channels[channel].rx_buf.unwrap(), + ); + } + JCMD_EEPROM_WRITE => eeprom_write_block( + device, + device.pif.channels[channel].tx_buf.unwrap() + 1, + device.pif.channels[channel].tx_buf.unwrap() + 2, + device.pif.channels[channel].rx_buf.unwrap(), + ), + _ => { + panic!("unknown cart command") + } + } +} + +pub fn eeprom_read_block(_device: &mut device::Device, _block: usize, _data: usize) { + panic!("eeprom read") +} + +pub fn eeprom_write_block( + _device: &mut device::Device, + _block: usize, + _data: usize, + _status: usize, +) { + panic!("eeprom write") +} diff --git a/src/device/cart_rom.rs b/src/device/cart_rom.rs new file mode 100644 index 0000000..6d25e92 --- /dev/null +++ b/src/device/cart_rom.rs @@ -0,0 +1,151 @@ +use crate::device; +use std::collections::hash_map::DefaultHasher; +use std::hash::{Hash, Hasher}; + +pub enum CicType { + CicNus6101, + CicNus6102, + CicNus6103, + CicNus6105, + CicNus6106, +} + +pub const CART_MASK: usize = 0xFFFFFFF; +pub struct Cart { + pub rom: Vec, + pub is_viewer_buffer: [u8; 0xFFFF], + pub pal: bool, + pub latch: u32, + pub cic_type: CicType, + pub cic_seed: u8, + pub rdram_size_offset: usize, +} + +pub fn read_mem_fast( + device: &mut device::Device, + address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + let masked_address = address as usize & CART_MASK; + return u32::from_be_bytes( + device.cart.rom[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ); +} + +pub fn read_mem( + device: &mut device::Device, + address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + let cycles = device::pi::calculate_cycles(device, 1, 4); + device::cop0::add_cycles(device, cycles); + + // well known cart ROM oddity, if a read is perfomed while PI_STATUS_IO_BUSY is set, the latched value is returned rather than the data at the specified address + if device.pi.regs[device::pi::PI_STATUS_REG as usize] & device::pi::PI_STATUS_IO_BUSY != 0 { + return device.cart.latch; + } else { + let masked_address = address as usize & CART_MASK; + return u32::from_be_bytes( + device.cart.rom[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ); + } +} + +pub fn write_mem(device: &mut device::Device, _address: u64, value: u32, mask: u32) { + device.cart.latch = value & mask; + + device.pi.regs[device::pi::PI_STATUS_REG as usize] |= device::pi::PI_STATUS_IO_BUSY; + + let cycles = device::pi::calculate_cycles(device, 1, 4); + device::events::create_event( + device, + device::events::EventType::PI, + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + cycles, + device::pi::dma_event, + ); +} + +pub fn dma_read(device: &mut device::Device, _cart_addr: u32, _dram_addr: u32, length: u32) -> u64 { + return device::pi::calculate_cycles(device, 1, length); +} + +// cart is big endian, rdram is native endian +pub fn dma_write(device: &mut device::Device, cart_addr: u32, dram_addr: u32, length: u32) -> u64 { + let mut i = dram_addr & device::rdram::RDRAM_MASK as u32; + let mut j = cart_addr & CART_MASK as u32; + while i < (dram_addr & device::rdram::RDRAM_MASK as u32) + length + && j < device.cart.rom.len() as u32 + { + device.rdram.mem[i as usize ^ device.byte_swap] = device.cart.rom[j as usize]; + i += 1; + j += 1; + } + while i < (dram_addr & device::rdram::RDRAM_MASK as u32) + length { + // DMAs that extend past the end of the ROM return 0's for the portion that extends past the ROM length + device.rdram.mem[i as usize ^ device.byte_swap] = 0; + i += 1; + } + return device::pi::calculate_cycles(device, 1, length); +} + +pub fn init(device: &mut device::Device, rom_file: Vec) { + device.cart.rom = rom_file; + set_system_region(device, device.cart.rom[0x3E]); + set_cic(device) +} + +pub fn set_system_region(device: &mut device::Device, country: u8) { + let pal_codes: [u8; 8] = [b'D', b'F', b'I', b'P', b'S', b'U', b'X', b'Y']; + for i in pal_codes { + if country == i { + device.cart.pal = true + } + } +} + +pub fn set_cic(device: &mut device::Device) { + let hash = calculate_hash(&device.cart.rom[0x40..0x1000]); + match hash { + 0x83a9a60ad75b3ed9 => { + device.cart.cic_type = CicType::CicNus6101; + device.cart.cic_seed = 0x3F; + device.cart.rdram_size_offset = 0x318; + } + 0x3c1e2f5171ec2b8 => { + device.cart.cic_type = CicType::CicNus6102; + device.cart.cic_seed = 0x3F; + device.cart.rdram_size_offset = 0x318; + } + 0xdbdb0cb696006257 => { + device.cart.cic_type = CicType::CicNus6103; + device.cart.cic_seed = 0x78; + device.cart.rdram_size_offset = 0x318; + } + 0x3d51ac3a48960357 => { + device.cart.cic_type = CicType::CicNus6105; + device.cart.cic_seed = 0x91; + device.cart.rdram_size_offset = 0x3F0; + } + 0x90135a02ea97ba9f => { + device.cart.cic_type = CicType::CicNus6106; + device.cart.cic_seed = 0x85; + device.cart.rdram_size_offset = 0x318; + } + _ => { + device.cart.cic_type = CicType::CicNus6102; + device.cart.cic_seed = 0x3F; + device.cart.rdram_size_offset = 0x318; + println!("unknown IPL3 {:#01x}", hash) + } + } +} + +fn calculate_hash(t: &[T]) -> u64 { + let mut s = DefaultHasher::new(); + t.hash(&mut s); + s.finish() +} diff --git a/src/device/controller.rs b/src/device/controller.rs new file mode 100644 index 0000000..b9f3da7 --- /dev/null +++ b/src/device/controller.rs @@ -0,0 +1,93 @@ +use crate::device; +use crate::ui; + +pub const JCMD_STATUS: u8 = 0x00; +pub const JCMD_CONTROLLER_READ: u8 = 0x01; +pub const JCMD_PAK_READ: u8 = 0x02; +pub const JCMD_PAK_WRITE: u8 = 0x03; +//pub const JCMD_VRU_READ: u8 = 0x09; +//pub const JCMD_VRU_WRITE: u8 = 0x0A; +//pub const JCMD_VRU_READ_STATUS: u8 = 0x0B; +//pub const JCMD_VRU_WRITE_CONFIG: u8 = 0x0C; +//pub const JCMD_VRU_WRITE_INIT: u8 = 0x0D; +pub const JCMD_RESET: u8 = 0xff; + +//pub const JDT_NONE: u16 = 0x0000; +pub const JDT_JOY_ABS_COUNTERS: u16 = 0x0001; /* joystick with absolute coordinates */ +//pub const JDT_JOY_REL_COUNTERS: u16 = 0x0002; /* joystick with relative coordinates (= mouse) */ +pub const JDT_JOY_PORT: u16 = 0x0004; /* has port for external paks */ +//pub const JDT_VRU: u16 = 0x0100; /* VRU */ +pub const PAK_CHUNK_SIZE: usize = 0x20; +pub const CONT_STATUS: u8 = 0; +pub const CONT_FLAVOR: u16 = JDT_JOY_ABS_COUNTERS | JDT_JOY_PORT; + +pub fn process(device: &mut device::Device, channel: usize) { + let cmd = device.pif.ram[device.pif.channels[channel].tx_buf.unwrap()]; + + match cmd { + JCMD_RESET => { /* reset */ } + JCMD_STATUS => { + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] = CONT_FLAVOR as u8; + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap() + 1] = + (CONT_FLAVOR >> 8) as u8; + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap() + 2] = CONT_STATUS; + } + JCMD_CONTROLLER_READ => { + let offset = device.pif.channels[channel].rx_buf.unwrap(); + let input = ui::input::get(&mut device.ui, channel); + device.pif.ram[offset..offset + 4].copy_from_slice(&input.to_ne_bytes()); + } + JCMD_PAK_READ => pak_read_block( + device, + device.pif.channels[channel].tx_buf.unwrap() + 1, + device.pif.channels[channel].rx_buf.unwrap(), + device.pif.channels[channel].rx_buf.unwrap() + 32, + ), + JCMD_PAK_WRITE => pak_write_block( + device, + device.pif.channels[channel].tx_buf.unwrap() + 1, + device.pif.channels[channel].tx_buf.unwrap() + 3, + device.pif.channels[channel].rx_buf.unwrap(), + ), + _ => panic!("unknown controller command"), + } +} + +pub fn pak_read_block(device: &mut device::Device, _addr_acrc: usize, data: usize, dcrc: usize) { + //let address = (device.pif.ram[addr_acrc] << 8) | (device.pif.ram[addr_acrc + 1] & 0xe0); + + //TODO: paks + device.pif.ram[dcrc] = !pak_data_crc(device, data, PAK_CHUNK_SIZE) +} + +pub fn pak_write_block(device: &mut device::Device, _addr_acrc: usize, data: usize, dcrc: usize) { + //let address = (device.pif.ram[addr_acrc] << 8) | (device.pif.ram[addr_acrc + 1] & 0xe0); + + //TODO: paks + device.pif.ram[dcrc] = !pak_data_crc(device, data, PAK_CHUNK_SIZE) +} + +pub fn pak_data_crc(device: &mut device::Device, data_offset: usize, size: usize) -> u8 { + let mut i = 0; + let mut crc = 0; + + while i <= size { + let mut mask = 0x80; + while mask >= 1 { + let xor_tap; + if crc & 0x80 != 0 { + xor_tap = 0x85 + } else { + xor_tap = 0x00 + } + crc <<= 1; + if i != size && (device.pif.ram[data_offset + i] & mask) != 0 { + crc |= 1; + } + crc ^= xor_tap; + mask >>= 1 + } + i += 1; + } + return crc; +} diff --git a/src/device/cop0.rs b/src/device/cop0.rs new file mode 100644 index 0000000..7d85cf0 --- /dev/null +++ b/src/device/cop0.rs @@ -0,0 +1,377 @@ +use crate::device; + +pub const COP0_INDEX_REG: u32 = 0; +pub const COP0_RANDOM_REG: u32 = 1; +pub const COP0_ENTRYLO0_REG: u32 = 2; +pub const COP0_ENTRYLO1_REG: u32 = 3; +pub const COP0_CONTEXT_REG: u32 = 4; +pub const COP0_PAGEMASK_REG: u32 = 5; +pub const COP0_WIRED_REG: u32 = 6; +//pub const COP0_UNUSED_7: u32 = 7; +pub const COP0_BADVADDR_REG: u32 = 8; +pub const COP0_COUNT_REG: u32 = 9; +pub const COP0_ENTRYHI_REG: u32 = 10; +pub const COP0_COMPARE_REG: u32 = 11; +pub const COP0_STATUS_REG: u32 = 12; +pub const COP0_CAUSE_REG: u32 = 13; +pub const COP0_EPC_REG: u32 = 14; +pub const COP0_PREVID_REG: u32 = 15; +pub const COP0_CONFIG_REG: u32 = 16; +pub const COP0_LLADDR_REG: u32 = 17; +//pub const COP0_WATCHLO_REG: u32 = 18; +//pub const COP0_WATCHHI_REG: u32 = 19; +pub const COP0_XCONTEXT_REG: u32 = 20; +//pub const COP0_UNUSED_21: u32 = 21; +//pub const COP0_UNUSED_22: u32 = 22; +//pub const COP0_UNUSED_23: u32 = 23; +//pub const COP0_UNUSED_24: u32 = 24; +//pub const COP0_UNUSED_25: u32 = 25; +//pub const COP0_PARITYERR_REG: u32 = 26; +//pub const COP0_CACHEERR_REG: u32 = 27; +pub const COP0_TAGLO_REG: u32 = 28; +//pub const COP0_TAGHI_REG: u32 = 29; +pub const COP0_ERROREPC_REG: u32 = 30; +//pub const COP0_UNUSED_31: u32 = 31; +pub const COP0_REGS_COUNT: u32 = 32; + +pub const COP0_STATUS_IE: u64 = 1 << 0; +pub const COP0_STATUS_EXL: u64 = 1 << 1; +pub const COP0_STATUS_ERL: u64 = 1 << 2; +pub const COP0_STATUS_BEV: u64 = 1 << 22; +pub const COP0_STATUS_FR: u64 = 1 << 26; +pub const COP0_STATUS_CU1: u64 = 1 << 29; +pub const COP0_STATUS_CU2: u64 = 1 << 30; + +//pub const COP0_CAUSE_EXCCODE_INTR: u64 = 0 << 2; +pub const COP0_CAUSE_EXCCODE_TLBL: u64 = 2 << 2; +pub const COP0_CAUSE_EXCCODE_TLBS: u64 = 3 << 2; +//pub const COP0_CAUSE_EXCCODE_ADEL: u64 = 4 << 2; +//pub const COP0_CAUSE_EXCCODE_ADES: u64 = 5 << 2; +pub const COP0_CAUSE_EXCCODE_SYS: u64 = 8 << 2; +pub const COP0_CAUSE_EXCCODE_BP: u64 = 9 << 2; +pub const COP0_CAUSE_EXCCODE_RI: u64 = 10 << 2; +pub const COP0_CAUSE_EXCCODE_CPU: u64 = 11 << 2; +pub const COP0_CAUSE_EXCCODE_TR: u64 = 13 << 2; +pub const COP0_CAUSE_EXCCODE_FPE: u64 = 15 << 2; +pub const COP0_CAUSE_IP2: u64 = 1 << 10; +pub const COP0_CAUSE_IP7: u64 = 1 << 15; +pub const COP0_CAUSE_BD: u64 = 1 << 31; + +pub const COP0_CAUSE_CE1: u64 = 1 << 28; +pub const COP0_CAUSE_CE2: u64 = 1 << 29; + +pub const COP0_CAUSE_IP_MASK: u64 = 0b00000000000000001111111100000000; +pub const COP0_CAUSE_EXCCODE_MASK: u64 = 0x1F << 2; +pub const COP0_CONTEXT_BADVPN2_MASK: u64 = 0b00000000011111111111111111110000; +pub const COP0_XCONTEXT_BADVPN2_MASK: u64 = 0b01111111111111111111111111110000; +pub const COP0_XCONTEXT_REGION_MASK: u64 = 0b110000000000000000000000000000000; + +const COP0_INDEX_REG_MASK: u64 = 0b10000000000000000000000000111111; +//const COP0_RANDOM_REG_MASK: u64 = 0b00000000000000000000000000111111; +const COP0_ENTRYLO_REG_MASK: u64 = + 0b0000000000000000000000000000000000111111111111111111111111111111; +const COP0_CONTEXT_REG_MASK: u64 = + 0b1111111111111111111111111111111111111111100000000000000000000000; +const COP0_PAGEMASK_REG_MASK: u64 = 0b00000001111111111110000000000000; +const COP0_WIRED_REG_MASK: u64 = 0b00000000000000000000000000111111; +const COP0_ENTRYHI_REG_MASK: u64 = + 0b1100000000000000000000001111111111111111111111111110000011111111; +const COP0_STATUS_REG_MASK: u64 = 0b11111111010101111111111111111111; +const COP0_CAUSE_REG_MASK: u64 = 0b00000000000000000000001100000000; +const COP0_CONFIG_REG_MASK: u64 = 0b00001111000000001000000000001111; +const COP0_LLADDR_REG_MASK: u64 = 0b11111111111111111111111111111111; +const COP0_WATCHLO_REG_MASK: u64 = 0b11111111111111111111111111111011; +const COP0_WATCHHI_REG_MASK: u64 = 0b00000000000000000000000000001111; +const COP0_XCONTEXT_REG_MASK: u64 = + 0b1111111111111111111111111111111000000000000000000000000000000000; +const COP0_PARITYERR_REG_MASK: u64 = 0b00000000000000000000000011111111; +const COP0_TAGLO_REG_MASK: u64 = 0b00001111111111111111111111000000; + +pub struct Cop0 { + pub reg_latch: u64, + pub regs: [u64; COP0_REGS_COUNT as usize], + pub reg_write_masks: [u64; COP0_REGS_COUNT as usize], + pub instrs: [fn(&mut device::Device, u32); 32], + pub instrs2: [fn(&mut device::Device, u32); 32], + pub tlb_lut_r: Vec, + pub tlb_lut_w: Vec, + pub tlb_entries: [device::tlb::TlbEntry; 32], +} + +pub fn mfc0(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] = device::cpu_instructions::se32( + (get_control_registers(device, device::cpu_instructions::rd(opcode))) as u32 as i32, + ) +} + +pub fn dmfc0(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] = + get_control_registers(device, device::cpu_instructions::rd(opcode)) +} + +pub fn mtc0(device: &mut device::Device, opcode: u32) { + device::cop0::set_control_registers( + device, + device::cpu_instructions::rd(opcode), + device::cpu_instructions::se32( + device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] as u32 as i32, + ), + ) +} + +pub fn dmtc0(device: &mut device::Device, opcode: u32) { + device::cop0::set_control_registers( + device, + device::cpu_instructions::rd(opcode), + device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize], + ) +} + +pub fn tlbr(device: &mut device::Device, _opcode: u32) { + device::tlb::read(device, device.cpu.cop0.regs[COP0_INDEX_REG as usize]) +} + +pub fn tlbwi(device: &mut device::Device, _opcode: u32) { + device::tlb::write(device, device.cpu.cop0.regs[COP0_INDEX_REG as usize]) +} + +pub fn tlbwr(device: &mut device::Device, _opcode: u32) { + let random = set_random_register(device); + device::tlb::write(device, random) +} + +pub fn tlbp(device: &mut device::Device, _opcode: u32) { + device::tlb::probe(device) +} + +pub fn eret(device: &mut device::Device, _opcode: u32) { + if device.cpu.cop0.regs[COP0_STATUS_REG as usize] & COP0_STATUS_ERL != 0 { + device.cpu.pc = device.cpu.cop0.regs[COP0_ERROREPC_REG as usize]; + device.cpu.cop0.regs[COP0_STATUS_REG as usize] &= !COP0_STATUS_ERL + } else { + device.cpu.pc = device.cpu.cop0.regs[COP0_EPC_REG as usize]; + device.cpu.cop0.regs[COP0_STATUS_REG as usize] &= !COP0_STATUS_EXL + } + device.cpu.branch_state.state = device::cpu::State::Exception; + device.cpu.llbit = false; + device::exceptions::check_pending_interrupts(device) +} + +pub fn execute_cp0(device: &mut device::Device, opcode: u32) { + device.cpu.cop0.instrs2[(opcode & 0x3F) as usize](device, opcode) +} + +pub fn syscall(device: &mut device::Device, _opcode: u32) { + device::exceptions::syscall_exception(device) +} + +pub fn break_(device: &mut device::Device, _opcode: u32) { + device::exceptions::break_exception(device) +} + +pub fn reserved(device: &mut device::Device, _opcode: u32) { + device::exceptions::reserved_exception(device, 0); +} + +pub fn get_control_registers(device: &mut device::Device, index: u32) -> u64 { + match index { + COP0_COUNT_REG => return device.cpu.cop0.regs[index as usize] >> 1, + COP0_RANDOM_REG => return set_random_register(device), + 7 | 21 | 22 | 23 | 24 | 25 | 31 => return device.cpu.cop0.reg_latch, + _ => return device.cpu.cop0.regs[index as usize], + } +} + +pub fn set_control_registers(device: &mut device::Device, index: u32, mut data: u64) { + device.cpu.cop0.reg_latch = data; + match index { + COP0_COUNT_REG => { + data <<= 1; + device::events::translate_events( + device, + device.cpu.cop0.regs[COP0_COUNT_REG as usize], + data, + ) + } + COP0_WIRED_REG => device.cpu.cop0.regs[COP0_RANDOM_REG as usize] = 31, + COP0_COMPARE_REG => { + let current_count = (device.cpu.cop0.regs[COP0_COUNT_REG as usize] >> 1) & 0xFFFFFFFF; + let mut event_time = + (device.cpu.cop0.regs[COP0_COUNT_REG as usize] & 0xFFFFFFFF00000000) | (data << 1); + if current_count >= data { + event_time += !0 as u32 as u64 + } + let compare_event: &mut device::events::Event = + device::events::get_event(device, device::events::EventType::COMPARE).unwrap(); + compare_event.count = event_time; // reschedule the next compare interrupt event + device::events::set_next_event(device); + device.cpu.cop0.regs[COP0_CAUSE_REG as usize] &= !COP0_CAUSE_IP7; + } + COP0_STATUS_REG => { + if data & COP0_STATUS_FR != device.cpu.cop0.regs[index as usize] & COP0_STATUS_FR { + device::cop1::set_fgr_registers(device, data) + } + if data & COP0_STATUS_CU1 != device.cpu.cop0.regs[index as usize] & COP0_STATUS_CU1 { + device::cop1::set_usable(device, data & COP0_STATUS_CU1 != 0) + } + if data & COP0_STATUS_CU2 != device.cpu.cop0.regs[index as usize] & COP0_STATUS_CU2 { + device::cop2::set_usable(device, data & COP0_STATUS_CU2 != 0) + } + } + _ => {} + } + device::memory::masked_write_64( + &mut device.cpu.cop0.regs[index as usize], + data, + device.cpu.cop0.reg_write_masks[index as usize], + ); + device::exceptions::check_pending_interrupts(device); +} + +pub fn compare_event(device: &mut device::Device) { + device.cpu.cop0.regs[COP0_CAUSE_REG as usize] &= !COP0_CAUSE_EXCCODE_MASK; + device.cpu.cop0.regs[COP0_CAUSE_REG as usize] |= COP0_CAUSE_IP7; + + device::events::create_event( + device, + device::events::EventType::COMPARE, + device.cpu.next_event_count + (!0 as u32 as u64), + compare_event, + ); + device::exceptions::check_pending_interrupts(device); +} + +pub fn set_random_register(device: &mut device::Device) -> u64 { + if device.cpu.cop0.regs[COP0_WIRED_REG as usize] > 31 { + return (u64::MAX - device.cpu.cop0.regs[COP0_COUNT_REG as usize]) & 0x3F; + } else { + return (u64::MAX - device.cpu.cop0.regs[COP0_COUNT_REG as usize]) + % (32 - device.cpu.cop0.regs[COP0_WIRED_REG as usize]) + + device.cpu.cop0.regs[COP0_WIRED_REG as usize]; + } +} + +pub fn add_cycles(device: &mut device::Device, cycles: u64) { + device.cpu.cop0.regs[COP0_COUNT_REG as usize] += cycles // COUNT_REG is shifted right 1 bit when read by MFC0 +} + +pub fn init(device: &mut device::Device) { + device.cpu.cop0.reg_write_masks = [ + COP0_INDEX_REG_MASK, + 0, // Random, read only + COP0_ENTRYLO_REG_MASK, + COP0_ENTRYLO_REG_MASK, + COP0_CONTEXT_REG_MASK, + COP0_PAGEMASK_REG_MASK, + COP0_WIRED_REG_MASK, + 0, // 7 + 0, // BadVAddr, read only + !0 as u32 as u64, // count + COP0_ENTRYHI_REG_MASK, + !0 as u32 as u64, // compare + COP0_STATUS_REG_MASK, + COP0_CAUSE_REG_MASK, + !0, // EPC + 0, // previd, read only + COP0_CONFIG_REG_MASK, + COP0_LLADDR_REG_MASK, + COP0_WATCHLO_REG_MASK, + COP0_WATCHHI_REG_MASK, + COP0_XCONTEXT_REG_MASK, + 0, // 21 + 0, // 22 + 0, // 23 + 0, // 24 + 0, // 25 + COP0_PARITYERR_REG_MASK, + 0, // cache error + COP0_TAGLO_REG_MASK, + 0, // taghi + !0, // ErrorPC + 0, // 31 + ]; + + device.cpu.cop0.instrs = [ + device::cop0::mfc0, // 0 + device::cop0::dmfc0, // 1 + device::cop0::reserved, // 2 + device::cop0::reserved, // 3 + device::cop0::mtc0, // 4 + device::cop0::dmtc0, // 5 + device::cop0::reserved, // 6 + device::cop0::reserved, // 7 + device::cop0::reserved, // 8 + device::cop0::reserved, // 9 + device::cop0::reserved, // 10 + device::cop0::reserved, // 11 + device::cop0::reserved, // 12 + device::cop0::reserved, // 13 + device::cop0::reserved, // 14 + device::cop0::reserved, // 15 + device::cop0::execute_cp0, // 16 + device::cop0::reserved, // 17 + device::cop0::reserved, // 18 + device::cop0::reserved, // 19 + device::cop0::reserved, // 20 + device::cop0::reserved, // 21 + device::cop0::reserved, // 22 + device::cop0::reserved, // 23 + device::cop0::reserved, // 24 + device::cop0::reserved, // 25 + device::cop0::reserved, // 26 + device::cop0::reserved, // 27 + device::cop0::reserved, // 28 + device::cop0::reserved, // 29 + device::cop0::reserved, // 30 + device::cop0::reserved, // 31 + ]; + + device.cpu.cop0.instrs2 = [ + device::cop0::reserved, // 0 + device::cop0::tlbr, // 1 + device::cop0::tlbwi, // 2 + device::cop0::reserved, // 3 + device::cop0::reserved, // 4 + device::cop0::reserved, // 5 + device::cop0::tlbwr, // 6 + device::cop0::reserved, // 7 + device::cop0::tlbp, // 8 + device::cop0::reserved, // 9 + device::cop0::reserved, // 10 + device::cop0::reserved, // 11 + device::cop0::reserved, // 12 + device::cop0::reserved, // 13 + device::cop0::reserved, // 14 + device::cop0::reserved, // 15 + device::cop0::reserved, // 16 + device::cop0::reserved, // 17 + device::cop0::reserved, // 18 + device::cop0::reserved, // 19 + device::cop0::reserved, // 20 + device::cop0::reserved, // 21 + device::cop0::reserved, // 22 + device::cop0::reserved, // 23 + device::cop0::eret, // 24 + device::cop0::reserved, // 25 + device::cop0::reserved, // 26 + device::cop0::reserved, // 27 + device::cop0::reserved, // 28 + device::cop0::reserved, // 29 + device::cop0::reserved, // 30 + device::cop0::reserved, // 31 + ]; + // taken from VR4300 manual + device.cpu.cop0.regs[COP0_RANDOM_REG as usize] = 0b00000000000000000000000000011111; + device.cpu.cop0.regs[COP0_CONFIG_REG as usize] = 0b01110000000001101110010001100000; + device.cpu.cop0.regs[COP0_STATUS_REG as usize] = 0b00000000010000000000000000000100; + device.cpu.cop0.regs[COP0_PREVID_REG as usize] = 0b00000000000000000000101100100010; + device.cpu.cop0.regs[COP0_EPC_REG as usize] = 0b11111111111111111111111111111111; + device.cpu.cop0.regs[COP0_ERROREPC_REG as usize] = 0b11111111111111111111111111111111; + + device::events::create_event( + device, + device::events::EventType::COMPARE, + !0 as u32 as u64, + compare_event, + ) +} diff --git a/src/device/cop1.rs b/src/device/cop1.rs new file mode 100644 index 0000000..3b66e07 --- /dev/null +++ b/src/device/cop1.rs @@ -0,0 +1,719 @@ +use crate::device; + +//pub const FCR31_FLAG_INEXACT_BIT: u32 = 1 << 2; +//pub const FCR31_FLAG_UNDERFLOW_BIT: u32 = 1 << 3; +//pub const FCR31_FLAG_OVERFLOW_BIT: u32 = 1 << 4; +//pub const FCR31_FLAG_DIVBYZERO_BIT: u32 = 1 << 5; +//pub const FCR31_FLAG_INVALID_BIT: u32 = 1 << 6; +//pub const FCR31_ENABLE_INEXACT_BIT: u32 = 1 << 7; +//pub const FCR31_ENABLE_UNDERFLOW_BIT: u32 = 1 << 8; +//pub const FCR31_ENABLE_OVERFLOW_BIT: u32 = 1 << 9; +//pub const FCR31_ENABLE_DIVBYZERO_BIT: u32 = 1 << 10; +//pub const FCR31_ENABLE_INVALID_BIT: u32 = 1 << 11; +//pub const FCR31_CAUSE_INEXACT_BIT: u32 = 1 << 12; +//pub const FCR31_CAUSE_UNDERFLOW_BIT: u32 = 1 << 13; +//pub const FCR31_CAUSE_OVERFLOW_BIT: u32 = 1 << 14; +//pub const FCR31_CAUSE_DIVBYZERO_BIT: u32 = 1 << 15; +//pub const FCR31_CAUSE_INVALID_BIT: u32 = 1 << 16; +pub const FCR31_CAUSE_UNIMP_BIT: u32 = 1 << 17; +pub const FCR31_CMP_BIT: u32 = 1 << 23; + +pub const FCR31_CAUSE_MASK: u32 = 0b00000000000000111111000000000000; +pub const FCR31_ENABLE_MASK: u32 = 0b00000000000000000000111110000000; +pub const FCR31_WRITE_MASK: u32 = 0b00000001100000111111111111111111; + +pub struct Cop1 { + pub fcr0: u32, + pub fcr31: u32, + pub fgr32: [[u8; 4]; 32], + pub fgr64: [[u8; 8]; 32], + pub instrs: [fn(&mut device::Device, u32); 32], + pub b_instrs: [fn(&mut device::Device, u32); 4], + pub s_instrs: [fn(&mut device::Device, u32); 64], + pub d_instrs: [fn(&mut device::Device, u32); 64], + pub w_instrs: [fn(&mut device::Device, u32); 64], + pub l_instrs: [fn(&mut device::Device, u32); 64], +} + +pub fn lwc1(device: &mut device::Device, opcode: u32) { + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.cpu.gpr[device::cpu_instructions::rs(opcode) as usize].wrapping_add( + device::cpu_instructions::se16(device::cpu_instructions::imm(opcode) as i16), + ), + device::memory::AccessType::Read, + ); + if err { + return; + } + let value = device::memory::data_read( + device, + phys_address, + device::memory::AccessSize::Word, + cached, + ) + .to_ne_bytes(); + set_fpr_single( + device, + device::fpu_instructions::ft(opcode) as usize, + f32::from_ne_bytes(value), + false, + ) +} + +pub fn ldc1(device: &mut device::Device, opcode: u32) { + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.cpu.gpr[device::cpu_instructions::rs(opcode) as usize].wrapping_add( + device::cpu_instructions::se16(device::cpu_instructions::imm(opcode) as i16), + ), + device::memory::AccessType::Read, + ); + if err { + return; + } + + let mut w = [2; 32]; + w[0] = device::memory::data_read( + device, + phys_address, + device::memory::AccessSize::Dword, + cached, + ); + w[1] = device::memory::data_read( + device, + phys_address + 4, + device::memory::AccessSize::Dword, + cached, + ); + let value = ((w[0] as u64) << 32) | (w[1]) as u64; + set_fpr_double( + device, + device::fpu_instructions::ft(opcode) as usize, + f64::from_ne_bytes(value.to_ne_bytes()), + ) +} + +pub fn swc1(device: &mut device::Device, opcode: u32) { + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.cpu.gpr[device::cpu_instructions::rs(opcode) as usize].wrapping_add( + device::cpu_instructions::se16(device::cpu_instructions::imm(opcode) as i16), + ), + device::memory::AccessType::Write, + ); + if err { + return; + } + let value = get_fpr_single(device, device::fpu_instructions::ft(opcode) as usize).to_ne_bytes(); + device::memory::data_write( + device, + phys_address, + u32::from_ne_bytes(value), + 0xFFFFFFFF, + cached, + ); +} + +pub fn sdc1(device: &mut device::Device, opcode: u32) { + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.cpu.gpr[device::cpu_instructions::rs(opcode) as usize].wrapping_add( + device::cpu_instructions::se16(device::cpu_instructions::imm(opcode) as i16), + ), + device::memory::AccessType::Write, + ); + if err { + return; + } + + let value = get_fpr_double(device, device::fpu_instructions::ft(opcode) as usize).to_ne_bytes(); + + device::memory::data_write( + device, + phys_address, + u32::from_ne_bytes(value[4..8].try_into().unwrap()), + 0xFFFFFFFF, + cached, + ); + device::memory::data_write( + device, + phys_address + 4, + u32::from_ne_bytes(value[0..4].try_into().unwrap()), + 0xFFFFFFFF, + cached, + ) +} + +pub fn mfc1(device: &mut device::Device, opcode: u32) { + let value = get_fpr_single(device, device::fpu_instructions::fs(opcode) as usize); + device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] = + device::cpu_instructions::se32(u32::from_ne_bytes(value.to_ne_bytes()) as i32); +} + +pub fn dmfc1(device: &mut device::Device, opcode: u32) { + let value = get_fpr_double(device, device::fpu_instructions::fs(opcode) as usize); + device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] = + u64::from_ne_bytes(value.to_ne_bytes()); +} + +pub fn cfc1(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] = device::cpu_instructions::se32( + get_control_registers_fpu(device, device::fpu_instructions::fs(opcode)) as i32, + ) +} + +pub fn dcfc1(device: &mut device::Device, _opcode: u32) { + device.cpu.cop1.fcr31 &= !FCR31_CAUSE_MASK; + device.cpu.cop1.fcr31 |= FCR31_CAUSE_UNIMP_BIT; + device::exceptions::floating_point_exception(device) +} + +pub fn mtc1(device: &mut device::Device, opcode: u32) { + let value = f32::from_ne_bytes( + (device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] as u32).to_ne_bytes(), + ); + set_fpr_single( + device, + device::fpu_instructions::fs(opcode) as usize, + value, + false, + ) +} + +pub fn dmtc1(device: &mut device::Device, opcode: u32) { + let value = f64::from_ne_bytes( + device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize].to_ne_bytes(), + ); + set_fpr_double(device, device::fpu_instructions::fs(opcode) as usize, value) +} + +pub fn ctc1(device: &mut device::Device, opcode: u32) { + set_control_registers_fpu( + device, + device::fpu_instructions::fs(opcode), + device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] as u32, + ) +} + +pub fn dctc1(device: &mut device::Device, _opcode: u32) { + device.cpu.cop1.fcr31 &= !FCR31_CAUSE_MASK; + device.cpu.cop1.fcr31 |= FCR31_CAUSE_UNIMP_BIT; + device::exceptions::floating_point_exception(device) +} + +pub fn execute_cop1_b(device: &mut device::Device, opcode: u32) { + device.cpu.cop1.b_instrs[((opcode >> 16) & 0x3) as usize](device, opcode) +} + +pub fn execute_cop1_s(device: &mut device::Device, opcode: u32) { + device.cpu.cop1.s_instrs[(opcode & 0x3F) as usize](device, opcode) +} + +pub fn execute_cop1_d(device: &mut device::Device, opcode: u32) { + device.cpu.cop1.d_instrs[(opcode & 0x3F) as usize](device, opcode) +} + +pub fn execute_cop1_l(device: &mut device::Device, opcode: u32) { + device.cpu.cop1.l_instrs[(opcode & 0x3F) as usize](device, opcode) +} + +pub fn execute_cop1_w(device: &mut device::Device, opcode: u32) { + device.cpu.cop1.w_instrs[(opcode & 0x3F) as usize](device, opcode) +} + +pub fn unusable(device: &mut device::Device, _opcode: u32) { + device::exceptions::cop_unusable_exception(device, device::cop0::COP0_CAUSE_CE1) +} + +pub fn reserved(_device: &mut device::Device, _opcode: u32) { + panic!("cop1 reserved"); +} + +pub fn get_control_registers_fpu(device: &mut device::Device, index: u32) -> u32 { + match index { + 0 => return device.cpu.cop1.fcr0, + 31 => return device.cpu.cop1.fcr31, + _ => { + panic!("unknown FCR register") + } + } +} + +pub fn set_control_registers_fpu(device: &mut device::Device, index: u32, data: u32) { + match index { + 0 => { // read only + } + + 31 => { + device.cpu.cop1.fcr31 = data & FCR31_WRITE_MASK as u32; + // the Cause bits are ANDed with the Enable bits to check for exceptions + // "Unimplemented Operation" has no Enable bit and always causes an exception + if (device.cpu.cop1.fcr31 & FCR31_CAUSE_MASK) >> 5 + & (device.cpu.cop1.fcr31 & FCR31_ENABLE_MASK) + != 0 + || device.cpu.cop1.fcr31 & FCR31_CAUSE_UNIMP_BIT != 0 + { + device::exceptions::floating_point_exception(device) + } + } + _ => { + panic!("unknown FCR register") + } + } +} + +pub fn set_fpr_single(device: &mut device::Device, index: usize, value: f32, clear_high: bool) { + let bytes = value.to_ne_bytes(); + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_FR + == 0 + { + device.cpu.cop1.fgr32[index] = bytes; + } else { + let bytes_lo = bytes; + let bytes_hi: [u8; 4]; + if clear_high { + bytes_hi = [0, 0, 0, 0]; + } else { + bytes_hi = device.cpu.cop1.fgr64[index][4..8].try_into().unwrap() + } + device.cpu.cop1.fgr64[index] = [bytes_lo, bytes_hi].concat().try_into().unwrap(); + } +} + +pub fn get_fpr_single(device: &mut device::Device, index: usize) -> f32 { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_FR + == 0 + { + return f32::from_ne_bytes(device.cpu.cop1.fgr32[index]); + } else { + return f32::from_ne_bytes(device.cpu.cop1.fgr64[index][0..4].try_into().unwrap()); + } +} + +pub fn set_fpr_double(device: &mut device::Device, index: usize, value: f64) { + let bytes = value.to_ne_bytes(); + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_FR + == 0 + { + device.cpu.cop1.fgr32[index & !1] = bytes[0..4].try_into().unwrap(); + device.cpu.cop1.fgr32[(index & !1) + 1] = bytes[4..8].try_into().unwrap(); + } else { + device.cpu.cop1.fgr64[index] = bytes; + } +} + +pub fn get_fpr_double(device: &mut device::Device, index: usize) -> f64 { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_FR + == 0 + { + let bytes_lo = device.cpu.cop1.fgr32[index & !1]; + let bytes_hi = device.cpu.cop1.fgr32[(index & !1) + 1]; + return f64::from_ne_bytes([bytes_lo, bytes_hi].concat().try_into().unwrap()); + } else { + return f64::from_ne_bytes(device.cpu.cop1.fgr64[index]); + } +} + +pub fn init(device: &mut device::Device) { + set_fgr_registers(device, 0); + set_usable(device, false); + device.cpu.cop1.fcr0 = 0b101000000000; + + device.cpu.cop1.b_instrs = [ + device::fpu_instructions::bc1f, // 0 + device::fpu_instructions::bc1t, // 1 + device::fpu_instructions::bc1fl, // 2 + device::fpu_instructions::bc1tl, // 3 + ]; + + device.cpu.cop1.s_instrs = [ + device::fpu_instructions::add_s, // 0 + device::fpu_instructions::sub_s, // 1 + device::fpu_instructions::mul_s, // 2 + device::fpu_instructions::div_s, // 3 + device::fpu_instructions::sqrt_s, // 4 + device::fpu_instructions::abs_s, // 5 + device::fpu_instructions::mov_s, // 6 + device::fpu_instructions::neg_s, // 7 + device::fpu_instructions::round_l_s, // 8 + device::fpu_instructions::trunc_l_s, // 9 + device::fpu_instructions::ceil_l_s, // 10 + device::fpu_instructions::floor_l_s, // 11 + device::fpu_instructions::round_w_s, // 12 + device::fpu_instructions::trunc_w_s, // 13 + device::fpu_instructions::ceil_w_s, // 14 + device::fpu_instructions::floor_w_s, // 15 + device::cop1::reserved, // 16 + device::cop1::reserved, // 17 + device::cop1::reserved, // 18 + device::cop1::reserved, // 19 + device::cop1::reserved, // 20 + device::cop1::reserved, // 21 + device::cop1::reserved, // 22 + device::cop1::reserved, // 23 + device::cop1::reserved, // 24 + device::cop1::reserved, // 25 + device::cop1::reserved, // 26 + device::cop1::reserved, // 27 + device::cop1::reserved, // 28 + device::cop1::reserved, // 29 + device::cop1::reserved, // 30 + device::cop1::reserved, // 31 + device::cop1::reserved, // 32 + device::fpu_instructions::cvt_d_s, // 33 + device::cop1::reserved, // 34 + device::cop1::reserved, // 35 + device::fpu_instructions::cvt_w_s, // 36 + device::fpu_instructions::cvt_l_s, // 37 + device::cop1::reserved, // 38 + device::cop1::reserved, // 38 + device::cop1::reserved, // 40 + device::cop1::reserved, // 41 + device::cop1::reserved, // 42 + device::cop1::reserved, // 43 + device::cop1::reserved, // 44 + device::cop1::reserved, // 45 + device::cop1::reserved, // 46 + device::cop1::reserved, // 47 + device::fpu_instructions::c_f_s, // 48 + device::fpu_instructions::c_un_s, // 49 + device::fpu_instructions::c_eq_s, // 50 + device::fpu_instructions::c_ueq_s, // 51 + device::fpu_instructions::c_olt_s, // 52 + device::fpu_instructions::c_ult_s, // 53 + device::fpu_instructions::c_ole_s, // 54 + device::fpu_instructions::c_ule_s, // 55 + device::fpu_instructions::c_sf_s, // 56 + device::fpu_instructions::c_ngle_s, // 57 + device::fpu_instructions::c_seq_s, // 58 + device::fpu_instructions::c_ngl_s, // 59 + device::fpu_instructions::c_lt_s, // 60 + device::fpu_instructions::c_nge_s, // 61 + device::fpu_instructions::c_le_s, // 62 + device::fpu_instructions::c_ngt_s, // 63 + ]; + + device.cpu.cop1.d_instrs = [ + device::fpu_instructions::add_d, // 0 + device::fpu_instructions::sub_d, // 1 + device::fpu_instructions::mul_d, // 2 + device::fpu_instructions::div_d, // 3 + device::fpu_instructions::sqrt_d, // 4 + device::fpu_instructions::abs_d, // 5 + device::fpu_instructions::mov_d, // 6 + device::fpu_instructions::neg_d, // 7 + device::fpu_instructions::round_l_d, // 8 + device::fpu_instructions::trunc_l_d, // 9 + device::fpu_instructions::ceil_l_d, // 10 + device::fpu_instructions::floor_l_d, // 11 + device::fpu_instructions::round_w_d, // 12 + device::fpu_instructions::trunc_w_d, // 13 + device::fpu_instructions::ceil_w_d, // 14 + device::fpu_instructions::floor_w_d, // 15 + device::cop1::reserved, // 16 + device::cop1::reserved, // 17 + device::cop1::reserved, // 18 + device::cop1::reserved, // 19 + device::cop1::reserved, // 20 + device::cop1::reserved, // 21 + device::cop1::reserved, // 22 + device::cop1::reserved, // 23 + device::cop1::reserved, // 24 + device::cop1::reserved, // 25 + device::cop1::reserved, // 26 + device::cop1::reserved, // 27 + device::cop1::reserved, // 28 + device::cop1::reserved, // 29 + device::cop1::reserved, // 30 + device::cop1::reserved, // 31 + device::fpu_instructions::cvt_s_d, // 32 + device::cop1::reserved, // 33 + device::cop1::reserved, // 34 + device::cop1::reserved, // 35 + device::fpu_instructions::cvt_w_d, // 36 + device::fpu_instructions::cvt_l_d, // 37 + device::cop1::reserved, // 38 + device::cop1::reserved, // 38 + device::cop1::reserved, // 40 + device::cop1::reserved, // 41 + device::cop1::reserved, // 42 + device::cop1::reserved, // 43 + device::cop1::reserved, // 44 + device::cop1::reserved, // 45 + device::cop1::reserved, // 46 + device::cop1::reserved, // 47 + device::fpu_instructions::c_f_d, // 48 + device::fpu_instructions::c_un_d, // 49 + device::fpu_instructions::c_eq_d, // 50 + device::fpu_instructions::c_ueq_d, // 51 + device::fpu_instructions::c_olt_d, // 52 + device::fpu_instructions::c_ult_d, // 53 + device::fpu_instructions::c_ole_d, // 54 + device::fpu_instructions::c_ule_d, // 55 + device::fpu_instructions::c_sf_d, // 56 + device::fpu_instructions::c_ngle_d, // 57 + device::fpu_instructions::c_seq_d, // 58 + device::fpu_instructions::c_ngl_d, // 59 + device::fpu_instructions::c_lt_d, // 60 + device::fpu_instructions::c_nge_d, // 61 + device::fpu_instructions::c_le_d, // 62 + device::fpu_instructions::c_ngt_d, // 63 + ]; + + device.cpu.cop1.l_instrs = [ + device::cop1::reserved, // 0 + device::cop1::reserved, // 1 + device::cop1::reserved, // 2 + device::cop1::reserved, // 3 + device::cop1::reserved, // 4 + device::cop1::reserved, // 5 + device::cop1::reserved, // 6 + device::cop1::reserved, // 7 + device::cop1::reserved, // 8 + device::cop1::reserved, // 9 + device::cop1::reserved, // 10 + device::cop1::reserved, // 11 + device::cop1::reserved, // 12 + device::cop1::reserved, // 13 + device::cop1::reserved, // 14 + device::cop1::reserved, // 15 + device::cop1::reserved, // 16 + device::cop1::reserved, // 17 + device::cop1::reserved, // 18 + device::cop1::reserved, // 19 + device::cop1::reserved, // 20 + device::cop1::reserved, // 21 + device::cop1::reserved, // 22 + device::cop1::reserved, // 23 + device::cop1::reserved, // 24 + device::cop1::reserved, // 25 + device::cop1::reserved, // 26 + device::cop1::reserved, // 27 + device::cop1::reserved, // 28 + device::cop1::reserved, // 29 + device::cop1::reserved, // 30 + device::cop1::reserved, // 31 + device::fpu_instructions::cvt_s_l, // 32 + device::fpu_instructions::cvt_d_l, // 33 + device::cop1::reserved, // 34 + device::cop1::reserved, // 35 + device::cop1::reserved, // 36 + device::cop1::reserved, // 37 + device::cop1::reserved, // 38 + device::cop1::reserved, // 39 + device::cop1::reserved, // 40 + device::cop1::reserved, // 41 + device::cop1::reserved, // 42 + device::cop1::reserved, // 43 + device::cop1::reserved, // 44 + device::cop1::reserved, // 45 + device::cop1::reserved, // 46 + device::cop1::reserved, // 47 + device::cop1::reserved, // 48 + device::cop1::reserved, // 49 + device::cop1::reserved, // 50 + device::cop1::reserved, // 51 + device::cop1::reserved, // 52 + device::cop1::reserved, // 53 + device::cop1::reserved, // 54 + device::cop1::reserved, // 55 + device::cop1::reserved, // 56 + device::cop1::reserved, // 57 + device::cop1::reserved, // 58 + device::cop1::reserved, // 59 + device::cop1::reserved, // 60 + device::cop1::reserved, // 61 + device::cop1::reserved, // 62 + device::cop1::reserved, // 63 + ]; + + device.cpu.cop1.w_instrs = [ + device::cop1::reserved, // 0 + device::cop1::reserved, // 1 + device::cop1::reserved, // 2 + device::cop1::reserved, // 3 + device::cop1::reserved, // 4 + device::cop1::reserved, // 5 + device::cop1::reserved, // 6 + device::cop1::reserved, // 7 + device::cop1::reserved, // 8 + device::cop1::reserved, // 9 + device::cop1::reserved, // 10 + device::cop1::reserved, // 11 + device::cop1::reserved, // 12 + device::cop1::reserved, // 13 + device::cop1::reserved, // 14 + device::cop1::reserved, // 15 + device::cop1::reserved, // 16 + device::cop1::reserved, // 17 + device::cop1::reserved, // 18 + device::cop1::reserved, // 19 + device::cop1::reserved, // 20 + device::cop1::reserved, // 21 + device::cop1::reserved, // 22 + device::cop1::reserved, // 23 + device::cop1::reserved, // 24 + device::cop1::reserved, // 25 + device::cop1::reserved, // 26 + device::cop1::reserved, // 27 + device::cop1::reserved, // 28 + device::cop1::reserved, // 29 + device::cop1::reserved, // 30 + device::cop1::reserved, // 31 + device::fpu_instructions::cvt_s_w, // 32 + device::fpu_instructions::cvt_d_w, // 33 + device::cop1::reserved, // 34 + device::cop1::reserved, // 35 + device::cop1::reserved, // 36 + device::cop1::reserved, // 37 + device::cop1::reserved, // 38 + device::cop1::reserved, // 39 + device::cop1::reserved, // 40 + device::cop1::reserved, // 41 + device::cop1::reserved, // 42 + device::cop1::reserved, // 43 + device::cop1::reserved, // 44 + device::cop1::reserved, // 45 + device::cop1::reserved, // 46 + device::cop1::reserved, // 47 + device::cop1::reserved, // 48 + device::cop1::reserved, // 49 + device::cop1::reserved, // 50 + device::cop1::reserved, // 51 + device::cop1::reserved, // 52 + device::cop1::reserved, // 53 + device::cop1::reserved, // 54 + device::cop1::reserved, // 55 + device::cop1::reserved, // 56 + device::cop1::reserved, // 57 + device::cop1::reserved, // 58 + device::cop1::reserved, // 59 + device::cop1::reserved, // 60 + device::cop1::reserved, // 61 + device::cop1::reserved, // 62 + device::cop1::reserved, // 63 + ]; +} + +pub fn set_fgr_registers(device: &mut device::Device, status_reg: u64) { + // this method doesn't account for undocumented behaviour (accessing odd numbered registers in half mode) + if (status_reg & device::cop0::COP0_STATUS_FR) == 0 { + let mut i = 0; + while i < 32 { + let bytes = device.cpu.cop1.fgr64[i]; + device.cpu.cop1.fgr32[i] = bytes[0..4].try_into().unwrap(); + device.cpu.cop1.fgr32[i + 1] = bytes[4..8].try_into().unwrap(); + i += 2; + } + } else { + let mut i = 0; + while i < 32 { + let bytes_lo = device.cpu.cop1.fgr32[i]; + let bytes_hi = device.cpu.cop1.fgr32[i + 1]; + device.cpu.cop1.fgr64[i] = [bytes_lo, bytes_hi].concat().try_into().unwrap(); + i += 2; + } + } +} + +pub fn set_usable(device: &mut device::Device, usable: bool) { + if !usable { + device.cpu.instrs[49] = device::cop1::unusable; // lwc1 + device.cpu.instrs[53] = device::cop1::unusable; // ldc1 + device.cpu.instrs[57] = device::cop1::unusable; // swc1 + device.cpu.instrs[61] = device::cop1::unusable; // sdc1 + device.cpu.cop1.instrs = [ + device::cop1::unusable, // 0 + device::cop1::unusable, // 1 + device::cop1::unusable, // 2 + device::cop1::unusable, // 3 + device::cop1::unusable, // 4 + device::cop1::unusable, // 5 + device::cop1::unusable, // 6 + device::cop1::unusable, // 7 + device::cop1::unusable, // 8 + device::cop1::unusable, // 9 + device::cop1::unusable, // 10 + device::cop1::unusable, // 11 + device::cop1::unusable, // 12 + device::cop1::unusable, // 13 + device::cop1::unusable, // 14 + device::cop1::unusable, // 15 + device::cop1::unusable, // 16 + device::cop1::unusable, // 17 + device::cop1::unusable, // 18 + device::cop1::unusable, // 19 + device::cop1::unusable, // 20 + device::cop1::unusable, // 21 + device::cop1::unusable, // 22 + device::cop1::unusable, // 23 + device::cop1::unusable, // 24 + device::cop1::unusable, // 25 + device::cop1::unusable, // 26 + device::cop1::unusable, // 27 + device::cop1::unusable, // 28 + device::cop1::unusable, // 29 + device::cop1::unusable, // 30 + device::cop1::unusable, // 31 + ] + } else { + device.cpu.instrs[49] = device::cop1::lwc1; + device.cpu.instrs[53] = device::cop1::ldc1; + device.cpu.instrs[57] = device::cop1::swc1; + device.cpu.instrs[61] = device::cop1::sdc1; + device.cpu.cop1.instrs = [ + device::cop1::mfc1, // 0 + device::cop1::dmfc1, // 1 + device::cop1::cfc1, // 2 + device::cop1::dcfc1, // 3 + device::cop1::mtc1, // 4 + device::cop1::dmtc1, // 5 + device::cop1::ctc1, // 6 + device::cop1::dctc1, // 7 + device::cop1::execute_cop1_b, // 8 + device::cop1::reserved, // 9 + device::cop1::reserved, // 10 + device::cop1::reserved, // 11 + device::cop1::reserved, // 12 + device::cop1::reserved, // 13 + device::cop1::reserved, // 14 + device::cop1::reserved, // 15 + device::cop1::execute_cop1_s, // 16 + device::cop1::execute_cop1_d, // 17 + device::cop1::reserved, // 18 + device::cop1::reserved, // 19 + device::cop1::execute_cop1_w, // 20 + device::cop1::execute_cop1_l, // 21 + device::cop1::reserved, // 22 + device::cop1::reserved, // 23 + device::cop1::reserved, // 24 + device::cop1::reserved, // 25 + device::cop1::reserved, // 26 + device::cop1::reserved, // 27 + device::cop1::reserved, // 28 + device::cop1::reserved, // 29 + device::cop1::reserved, // 30 + device::cop1::reserved, // 31 + ] + } + // we have to recalculate the instruction pointers in the icache + for i in 0..512 { + device.memory.icache[i].instruction[0] = + device::cpu::decode_opcode(device, device.memory.icache[i].words[0]); + device.memory.icache[i].instruction[1] = + device::cpu::decode_opcode(device, device.memory.icache[i].words[1]); + device.memory.icache[i].instruction[2] = + device::cpu::decode_opcode(device, device.memory.icache[i].words[2]); + device.memory.icache[i].instruction[3] = + device::cpu::decode_opcode(device, device.memory.icache[i].words[3]); + device.memory.icache[i].instruction[4] = + device::cpu::decode_opcode(device, device.memory.icache[i].words[4]); + device.memory.icache[i].instruction[5] = + device::cpu::decode_opcode(device, device.memory.icache[i].words[5]); + device.memory.icache[i].instruction[6] = + device::cpu::decode_opcode(device, device.memory.icache[i].words[6]); + device.memory.icache[i].instruction[7] = + device::cpu::decode_opcode(device, device.memory.icache[i].words[7]) + } +} diff --git a/src/device/cop2.rs b/src/device/cop2.rs new file mode 100644 index 0000000..cc9bd1d --- /dev/null +++ b/src/device/cop2.rs @@ -0,0 +1,137 @@ +use crate::device; + +pub struct Cop2 { + pub instrs: [fn(&mut device::Device, u32); 32], + pub reg_latch: u64, +} + +pub fn mfc2(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] = + device::cpu_instructions::se32((device.cpu.cop2.reg_latch) as u32 as i32) +} + +pub fn dmfc2(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] = device.cpu.cop2.reg_latch +} + +pub fn cfc2(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] = + device::cpu_instructions::se32((device.cpu.cop2.reg_latch) as u32 as i32) +} + +pub fn mtc2(device: &mut device::Device, opcode: u32) { + device.cpu.cop2.reg_latch = device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] +} + +pub fn dmtc2(device: &mut device::Device, opcode: u32) { + device.cpu.cop2.reg_latch = device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] +} + +pub fn ctc2(device: &mut device::Device, opcode: u32) { + device.cpu.cop2.reg_latch = device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] +} + +pub fn reserved(device: &mut device::Device, _opcode: u32) { + device::exceptions::reserved_exception(device, device::cop0::COP0_CAUSE_CE2); +} + +pub fn unusable(device: &mut device::Device, _opcode: u32) { + device::exceptions::cop_unusable_exception(device, device::cop0::COP0_CAUSE_CE2) +} + +pub fn init(device: &mut device::Device) { + set_usable(device, false); +} + +pub fn set_usable(device: &mut device::Device, usable: bool) { + if !usable { + device.cpu.cop2.instrs = [ + device::cop2::unusable, // 0 + device::cop2::unusable, // 1 + device::cop2::unusable, // 2 + device::cop2::unusable, // 3 + device::cop2::unusable, // 4 + device::cop2::unusable, // 5 + device::cop2::unusable, // 6 + device::cop2::unusable, // 7 + device::cop2::unusable, // 8 + device::cop2::unusable, // 9 + device::cop2::unusable, // 10 + device::cop2::unusable, // 11 + device::cop2::unusable, // 12 + device::cop2::unusable, // 13 + device::cop2::unusable, // 14 + device::cop2::unusable, // 15 + device::cop2::unusable, // 16 + device::cop2::unusable, // 17 + device::cop2::unusable, // 18 + device::cop2::unusable, // 19 + device::cop2::unusable, // 20 + device::cop2::unusable, // 21 + device::cop2::unusable, // 22 + device::cop2::unusable, // 23 + device::cop2::unusable, // 24 + device::cop2::unusable, // 25 + device::cop2::unusable, // 26 + device::cop2::unusable, // 27 + device::cop2::unusable, // 28 + device::cop2::unusable, // 29 + device::cop2::unusable, // 30 + device::cop2::unusable, // 31 + ] + } else { + device.cpu.cop2.instrs = [ + device::cop2::mfc2, // 0 + device::cop2::dmfc2, // 1 + device::cop2::cfc2, // 2 + device::cop2::reserved, // 3 + device::cop2::mtc2, // 4 + device::cop2::dmtc2, // 5 + device::cop2::ctc2, // 6 + device::cop2::reserved, // 7 + device::cop2::reserved, // 8 + device::cop2::reserved, // 9 + device::cop2::reserved, // 10 + device::cop2::reserved, // 11 + device::cop2::reserved, // 12 + device::cop2::reserved, // 13 + device::cop2::reserved, // 14 + device::cop2::reserved, // 15 + device::cop2::reserved, // 16 + device::cop2::reserved, // 17 + device::cop2::reserved, // 18 + device::cop2::reserved, // 19 + device::cop2::reserved, // 20 + device::cop2::reserved, // 21 + device::cop2::reserved, // 22 + device::cop2::reserved, // 23 + device::cop2::reserved, // 24 + device::cop2::reserved, // 25 + device::cop2::reserved, // 26 + device::cop2::reserved, // 27 + device::cop2::reserved, // 28 + device::cop2::reserved, // 29 + device::cop2::reserved, // 30 + device::cop2::reserved, // 31 + ] + } + // we have to recalculate the instruction pointers in the icache + for i in 0..512 { + device.memory.icache[i].instruction[0] = + device::cpu::decode_opcode(device, device.memory.icache[i].words[0]); + device.memory.icache[i].instruction[1] = + device::cpu::decode_opcode(device, device.memory.icache[i].words[1]); + device.memory.icache[i].instruction[2] = + device::cpu::decode_opcode(device, device.memory.icache[i].words[2]); + device.memory.icache[i].instruction[3] = + device::cpu::decode_opcode(device, device.memory.icache[i].words[3]); + device.memory.icache[i].instruction[4] = + device::cpu::decode_opcode(device, device.memory.icache[i].words[4]); + device.memory.icache[i].instruction[5] = + device::cpu::decode_opcode(device, device.memory.icache[i].words[5]); + device.memory.icache[i].instruction[6] = + device::cpu::decode_opcode(device, device.memory.icache[i].words[6]); + device.memory.icache[i].instruction[7] = + device::cpu::decode_opcode(device, device.memory.icache[i].words[7]) + } +} diff --git a/src/device/cpu.rs b/src/device/cpu.rs new file mode 100644 index 0000000..12fe8ae --- /dev/null +++ b/src/device/cpu.rs @@ -0,0 +1,284 @@ +use crate::device; + +#[derive(PartialEq)] +pub enum State { + Step, + Take, + NotTaken, + DelaySlotTaken, + DelaySlotNotTaken, + Discard, + Exception, +} + +pub struct BranchState { + pub state: State, + pub pc: u64, +} +pub struct Cpu { + pub cop0: device::cop0::Cop0, + pub cop1: device::cop1::Cop1, + pub cop2: device::cop2::Cop2, + pub branch_state: BranchState, + pub gpr: [u64; 32], + pub pc: u64, + pub lo: u64, + pub hi: u64, + pub running: u8, + pub llbit: bool, + pub clock_rate: u64, + pub instrs: [fn(&mut device::Device, u32); 64], + pub special_instrs: [fn(&mut device::Device, u32); 64], + pub regimm_instrs: [fn(&mut device::Device, u32); 32], + pub events: Vec, + pub next_event_count: u64, + pub next_event: Option, +} + +pub fn decode_opcode(device: &mut device::Device, opcode: u32) -> fn(&mut device::Device, u32) { + match opcode >> 26 { + 0 => device.cpu.special_instrs[(opcode & 0x3F) as usize], // SPECIAL + 1 => device.cpu.regimm_instrs[((opcode >> 16) & 0x1F) as usize], // REGIMM + 16 => device.cpu.cop0.instrs[((opcode >> 21) & 0x1F) as usize], // COP0 + 17 => device.cpu.cop1.instrs[((opcode >> 21) & 0x1F) as usize], // COP1 + 18 => device.cpu.cop2.instrs[((opcode >> 21) & 0x1F) as usize], // COP2 + _ => device.cpu.instrs[(opcode >> 26) as usize], + } +} + +pub fn init(device: &mut device::Device) { + device.cpu.clock_rate = 93750000; + + device.cpu.instrs = [ + device::cop0::reserved, // SPECIAL + device::cop0::reserved, // REGIMM + device::cpu_instructions::j, // 2 + device::cpu_instructions::jal, // 3 + device::cpu_instructions::beq, // 4 + device::cpu_instructions::bne, // 5 + device::cpu_instructions::blez, // 6 + device::cpu_instructions::bgtz, // 7 + device::cpu_instructions::addi, // 8 + device::cpu_instructions::addiu, // 9 + device::cpu_instructions::slti, // 10 + device::cpu_instructions::sltiu, // 11 + device::cpu_instructions::andi, // 12 + device::cpu_instructions::ori, // 13 + device::cpu_instructions::xori, // 14 + device::cpu_instructions::lui, // 15 + device::cop0::reserved, // COP0 + device::cop0::reserved, // COP1 + device::cop0::reserved, // COP2 + device::cop0::reserved, // 19 + device::cpu_instructions::beql, // 20 + device::cpu_instructions::bnel, // 21 + device::cpu_instructions::blezl, // 22 + device::cpu_instructions::bgtzl, // 23 + device::cpu_instructions::daddi, // 24 + device::cpu_instructions::daddiu, // 25 + device::cpu_instructions::ldl, // 26 + device::cpu_instructions::ldr, // 27 + device::cop0::reserved, // 28 + device::cop0::reserved, // 29 + device::cop0::reserved, // 30 + device::cop0::reserved, // 31 + device::cpu_instructions::lb, // 32 + device::cpu_instructions::lh, // 33 + device::cpu_instructions::lwl, // 34 + device::cpu_instructions::lw, // 35 + device::cpu_instructions::lbu, // 36 + device::cpu_instructions::lhu, // 37 + device::cpu_instructions::lwr, // 38 + device::cpu_instructions::lwu, // 39 + device::cpu_instructions::sb, // 40 + device::cpu_instructions::sh, // 41 + device::cpu_instructions::swl, // 42 + device::cpu_instructions::sw, // 43 + device::cpu_instructions::sdl, // 44 + device::cpu_instructions::sdr, // 45 + device::cpu_instructions::swr, // 46 + device::cpu_instructions::cache, // 47 + device::cpu_instructions::ll, // 48 + device::cop1::lwc1, // 49 + device::cop0::reserved, // 50 + device::cop0::reserved, // 51 + device::cpu_instructions::lld, // 52 + device::cop1::ldc1, // 53 + device::cop0::reserved, // 54 + device::cpu_instructions::ld, // 55 + device::cpu_instructions::sc, // 56 + device::cop1::swc1, // 57 + device::cop0::reserved, // 58 + device::cop0::reserved, // 59 + device::cpu_instructions::scd, // 60 + device::cop1::sdc1, // 61 + device::cop0::reserved, // 62 + device::cpu_instructions::sd, // 63 + ]; + device.cpu.special_instrs = [ + device::cpu_instructions::sll, // 0 + device::cop0::reserved, // 1 + device::cpu_instructions::srl, // 2 + device::cpu_instructions::sra, // 3 + device::cpu_instructions::sllv, // 4 + device::cop0::reserved, // 5 + device::cpu_instructions::srlv, // 6 + device::cpu_instructions::srav, // 7 + device::cpu_instructions::jr, // 8 + device::cpu_instructions::jalr, // 9 + device::cop0::reserved, // 10 + device::cop0::reserved, // 11 + device::cop0::syscall, // 12 + device::cop0::break_, // 13 + device::cop0::reserved, // 14 + device::cpu_instructions::sync, // 15 + device::cpu_instructions::mfhi, // 16 + device::cpu_instructions::mthi, // 17 + device::cpu_instructions::mflo, // 18 + device::cpu_instructions::mtlo, // 19 + device::cpu_instructions::dsllv, // 20 + device::cop0::reserved, // 21 + device::cpu_instructions::dsrlv, // 22 + device::cpu_instructions::dsrav, // 23 + device::cpu_instructions::mult, // 24 + device::cpu_instructions::multu, // 25 + device::cpu_instructions::div, // 26 + device::cpu_instructions::divu, // 27 + device::cpu_instructions::dmult, // 28 + device::cpu_instructions::dmultu, // 29 + device::cpu_instructions::ddiv, // 30 + device::cpu_instructions::ddivu, // 31 + device::cpu_instructions::add, // 32 + device::cpu_instructions::addu, // 33 + device::cpu_instructions::sub, // 34 + device::cpu_instructions::subu, // 35 + device::cpu_instructions::and, // 36 + device::cpu_instructions::or, // 37 + device::cpu_instructions::xor, // 38 + device::cpu_instructions::nor, // 39 + device::cop0::reserved, // 40 + device::cop0::reserved, // 41 + device::cpu_instructions::slt, // 42 + device::cpu_instructions::sltu, // 43 + device::cpu_instructions::dadd, // 44 + device::cpu_instructions::daddu, // 45 + device::cpu_instructions::dsub, // 46 + device::cpu_instructions::dsubu, // 47 + device::cpu_instructions::tge, // 48 + device::cpu_instructions::tgeu, // 49 + device::cpu_instructions::tlt, // 50 + device::cpu_instructions::tltu, // 51 + device::cpu_instructions::teq, // 52 + device::cop0::reserved, // 53 + device::cpu_instructions::tne, // 54 + device::cop0::reserved, // 55 + device::cpu_instructions::dsll, // 56 + device::cop0::reserved, // 57 + device::cpu_instructions::dsrl, // 58 + device::cpu_instructions::dsra, // 59 + device::cpu_instructions::dsll32, // 60 + device::cop0::reserved, // 61 + device::cpu_instructions::dsrl32, // 62 + device::cpu_instructions::dsra32, // 63 + ]; + device.cpu.regimm_instrs = [ + device::cpu_instructions::bltz, // 0 + device::cpu_instructions::bgez, // 1 + device::cpu_instructions::bltzl, // 2 + device::cpu_instructions::bgezl, // 3 + device::cop0::reserved, // 4 + device::cop0::reserved, // 5 + device::cop0::reserved, // 6 + device::cop0::reserved, // 7 + device::cpu_instructions::tgei, // 8 + device::cpu_instructions::tgeiu, // 9 + device::cpu_instructions::tlti, // 10 + device::cpu_instructions::tltiu, // 11 + device::cpu_instructions::teqi, // 12 + device::cop0::reserved, // 13 + device::cpu_instructions::tnei, // 14 + device::cop0::reserved, // 15 + device::cpu_instructions::bltzal, // 16 + device::cpu_instructions::bgezal, // 17 + device::cpu_instructions::bltzall, // 18 + device::cpu_instructions::bgezall, // 19 + device::cop0::reserved, // 20 + device::cop0::reserved, // 21 + device::cop0::reserved, // 22 + device::cop0::reserved, // 23 + device::cop0::reserved, // 24 + device::cop0::reserved, // 25 + device::cop0::reserved, // 26 + device::cop0::reserved, // 27 + device::cop0::reserved, // 28 + device::cop0::reserved, // 29 + device::cop0::reserved, // 30 + device::cop0::reserved, // 31 + ]; + device::cop0::init(device); + device::cop1::init(device); + device::cop2::init(device); +} + +pub fn in_delay_slot(device: &mut device::Device) -> bool { + return device.cpu.branch_state.state == State::DelaySlotTaken + || device.cpu.branch_state.state == State::DelaySlotNotTaken; +} + +pub fn in_delay_slot_taken(device: &mut device::Device) -> bool { + return device.cpu.branch_state.state == State::DelaySlotTaken; +} + +pub fn run(device: &mut device::Device) { + device.cpu.running = 1; + while device.cpu.running == 1 { + device.cpu.gpr[0] = 0; // gpr 0 is read only + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.cpu.pc, + device::memory::AccessType::Read, + ); + if err { + continue; // TLB exception + } + if cached { + device::cache::icache_fetch(device, phys_address) + } else { + let opcode = device.memory.memory_map_read[(phys_address >> 16) as usize]( + device, + phys_address, + device::memory::AccessSize::Word, + ); + device::cpu::decode_opcode(device, opcode)(device, opcode); + } + match device.cpu.branch_state.state { + State::Step => device.cpu.pc += 4, + State::Take => { + device.cpu.pc += 4; + device.cpu.branch_state.state = State::DelaySlotTaken + } + State::NotTaken => { + device.cpu.pc += 4; + device.cpu.branch_state.state = State::DelaySlotNotTaken + } + State::DelaySlotTaken => { + device.cpu.pc = device.cpu.branch_state.pc; + device.cpu.branch_state.state = State::Step + } + State::DelaySlotNotTaken => { + device.cpu.pc += 4; + device.cpu.branch_state.state = State::Step + } + State::Discard => { + device.cpu.pc += 8; + device.cpu.branch_state.state = State::Step + } + State::Exception => device.cpu.branch_state.state = State::Step, + } + device::cop0::add_cycles(device, 1); + if device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] > device.cpu.next_event_count + { + device::events::trigger_event(device) + } + } +} diff --git a/src/device/cpu_instructions.rs b/src/device/cpu_instructions.rs new file mode 100644 index 0000000..79aba19 --- /dev/null +++ b/src/device/cpu_instructions.rs @@ -0,0 +1,1406 @@ +use crate::device; + +pub fn rd(opcode: u32) -> u32 { + return (opcode >> 11) & 0x1F; +} + +pub fn rs(opcode: u32) -> u32 { + return (opcode >> 21) & 0x1F; +} + +pub fn rt(opcode: u32) -> u32 { + return (opcode >> 16) & 0x1F; +} + +pub fn sa(opcode: u32) -> u32 { + return (opcode >> 6) & 0x1F; +} + +pub fn imm(opcode: u32) -> u16 { + return opcode as u16; +} + +pub fn se32(value: i32) -> u64 { + return value as i64 as u64; +} + +pub fn se16(value: i16) -> u64 { + return value as i64 as u64; +} + +pub fn se8(value: i8) -> u64 { + return value as i64 as u64; +} + +pub fn bshift>(address: T) -> u64 { + return ((address.into() & 3) ^ 3) << 3; +} + +pub fn hshift>(address: T) -> u64 { + return ((address.into() & 2) ^ 2) << 3; +} + +pub fn bits_below_mask>(x: T) -> u64 { + return (1 << x.into()) - 1; +} + +pub fn bits_above_mask>(x: T) -> u64 { + return !bits_below_mask(x); +} + +pub fn check_relative_idle_loop(device: &mut device::Device, opcode: u32) { + let (phys_address, _, err) = device::memory::translate_address( + device, + device.cpu.pc, + device::memory::AccessType::Lookup, + ); + if err { + return; + } + if imm(opcode) as i16 == -1 + && device.memory.fast_read[(phys_address >> 16) as usize]( + device, + phys_address + 4, + device::memory::AccessSize::Word, + ) == 0 + { + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] = device.cpu.next_event_count + } +} + +pub fn check_absolute_idle_loop(device: &mut device::Device, opcode: u32) { + let (phys_address, _, err) = device::memory::translate_address( + device, + device.cpu.pc, + device::memory::AccessType::Lookup, + ); + if err { + return; + } + if (opcode & 0x3FFFFFF) as u64 == (phys_address & 0x0FFFFFFF) >> 2 + && device.memory.fast_read[(phys_address >> 16) as usize]( + device, + phys_address + 4, + device::memory::AccessSize::Word, + ) == 0 + { + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] = device.cpu.next_event_count + } +} + +pub fn j(device: &mut device::Device, opcode: u32) { + if device::cpu::in_delay_slot_taken(device) { + return; + } + check_absolute_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = + (device.cpu.pc + 4) & 0xFFFFFFFFF0000000 | ((opcode & 0x3FFFFFF) << 2) as u64 +} + +pub fn jal(device: &mut device::Device, opcode: u32) { + if device::cpu::in_delay_slot_taken(device) { + device.cpu.gpr[31] = device.cpu.branch_state.pc + 4 + } else { + device.cpu.gpr[31] = device.cpu.pc + 8 + } + if !device::cpu::in_delay_slot_taken(device) { + check_absolute_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = + (device.cpu.pc + 4) & 0xFFFFFFFFF0000000 | ((opcode & 0x3FFFFFF) << 2) as u64 + } else if !device::cpu::in_delay_slot(device) { + device.cpu.branch_state.state = device::cpu::State::NotTaken; + } +} + +pub fn beq(device: &mut device::Device, opcode: u32) { + if device.cpu.gpr[rs(opcode) as usize] == device.cpu.gpr[rt(opcode) as usize] { + check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + } else { + device.cpu.branch_state.state = device::cpu::State::NotTaken; + } +} + +pub fn bne(device: &mut device::Device, opcode: u32) { + if device.cpu.gpr[rs(opcode) as usize] != device.cpu.gpr[rt(opcode) as usize] { + check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + } else { + device.cpu.branch_state.state = device::cpu::State::NotTaken; + } +} + +pub fn blez(device: &mut device::Device, opcode: u32) { + if device.cpu.gpr[rs(opcode) as usize] as i64 <= 0 { + check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + } else { + device.cpu.branch_state.state = device::cpu::State::NotTaken; + } +} + +pub fn bgtz(device: &mut device::Device, opcode: u32) { + if device.cpu.gpr[rs(opcode) as usize] as i64 > 0 { + check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + } else { + device.cpu.branch_state.state = device::cpu::State::NotTaken; + } +} + +pub fn addi(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rt(opcode) as usize] = + se32(device.cpu.gpr[rs(opcode) as usize] as i32).wrapping_add(se16(imm(opcode) as i16)) +} + +pub fn addiu(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rt(opcode) as usize] = + se32(device.cpu.gpr[rs(opcode) as usize] as i32).wrapping_add(se16(imm(opcode) as i16)) +} + +pub fn slti(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rt(opcode) as usize] = + ((device.cpu.gpr[rs(opcode) as usize] as i64) < (imm(opcode) as i16 as i64)) as u64 +} + +pub fn sltiu(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rt(opcode) as usize] = + (device.cpu.gpr[rs(opcode) as usize] < se16(imm(opcode) as i16)) as u64 +} + +pub fn andi(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rt(opcode) as usize] = device.cpu.gpr[rs(opcode) as usize] & imm(opcode) as u64 +} + +pub fn ori(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rt(opcode) as usize] = device.cpu.gpr[rs(opcode) as usize] | imm(opcode) as u64 +} + +pub fn xori(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rt(opcode) as usize] = device.cpu.gpr[rs(opcode) as usize] ^ imm(opcode) as u64 +} + +pub fn lui(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rt(opcode) as usize] = se32(((imm(opcode) as u32) << 16) as i32) +} + +pub fn beql(device: &mut device::Device, opcode: u32) { + if device.cpu.gpr[rs(opcode) as usize] == device.cpu.gpr[rt(opcode) as usize] { + check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + } else { + device.cpu.branch_state.state = device::cpu::State::Discard; + } +} + +pub fn bnel(device: &mut device::Device, opcode: u32) { + if device.cpu.gpr[rs(opcode) as usize] != device.cpu.gpr[rt(opcode) as usize] { + check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + } else { + device.cpu.branch_state.state = device::cpu::State::Discard; + } +} + +pub fn blezl(device: &mut device::Device, opcode: u32) { + if device.cpu.gpr[rs(opcode) as usize] as i64 <= 0 { + check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + } else { + device.cpu.branch_state.state = device::cpu::State::Discard; + } +} + +pub fn bgtzl(device: &mut device::Device, opcode: u32) { + if device.cpu.gpr[rs(opcode) as usize] as i64 > 0 { + check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + } else { + device.cpu.branch_state.state = device::cpu::State::Discard; + } +} + +pub fn daddi(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rt(opcode) as usize] = + device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)) +} + +pub fn daddiu(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rt(opcode) as usize] = + device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)) +} + +pub fn ldl(device: &mut device::Device, opcode: u32) { + let addr = device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)); + let n = addr & 7; + let shift = 8 * n; + let mask = bits_below_mask(8 * n); + + let (phys_address, cached, err) = + device::memory::translate_address(device, addr & !7, device::memory::AccessType::Read); + if err { + return; + } + + let mut w = [0; 2]; + w[0] = device::memory::data_read( + device, + phys_address, + device::memory::AccessSize::Dword, + cached, + ); + w[1] = device::memory::data_read( + device, + phys_address + 4, + device::memory::AccessSize::Dword, + cached, + ); + device.cpu.gpr[rt(opcode) as usize] = (device.cpu.gpr[rt(opcode) as usize] & mask) + | (((((w[0]) as u64) << 32) | (w[1]) as u64) << shift) +} + +pub fn ldr(device: &mut device::Device, opcode: u32) { + let addr = device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)); + let n = addr & 7; + let shift = 8 * (7 - n); + let mask; + if n == 7 { + mask = 0 + } else { + mask = bits_above_mask(8 * (n + 1)) + } + + let (phys_address, cached, err) = + device::memory::translate_address(device, addr & !7, device::memory::AccessType::Read); + if err { + return; + } + + let mut w = [0; 2]; + w[0] = device::memory::data_read( + device, + phys_address, + device::memory::AccessSize::Dword, + cached, + ); + w[1] = device::memory::data_read( + device, + phys_address + 4, + device::memory::AccessSize::Dword, + cached, + ); + device.cpu.gpr[rt(opcode) as usize] = (device.cpu.gpr[rt(opcode) as usize] & mask) + | (((((w[0]) as u64) << 32) | (w[1]) as u64) >> shift) +} + +pub fn lb(device: &mut device::Device, opcode: u32) { + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)), + device::memory::AccessType::Read, + ); + if err { + return; + } + + let shift = bshift(phys_address); + device.cpu.gpr[rt(opcode) as usize] = se8((device::memory::data_read( + device, + phys_address & !0x3, + device::memory::AccessSize::Word, + cached, + ) >> shift) as u8 as i8) +} + +pub fn lh(device: &mut device::Device, opcode: u32) { + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)), + device::memory::AccessType::Read, + ); + if err { + return; + } + + let shift = hshift(phys_address); + device.cpu.gpr[rt(opcode) as usize] = se16( + (device::memory::data_read( + device, + phys_address & !0x3, + device::memory::AccessSize::Word, + cached, + ) >> shift) as u16 as i16, + ) +} + +pub fn lwl(device: &mut device::Device, opcode: u32) { + let addr = device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)); + let n = addr & 3; + let shift = 8 * n; + let mask = bits_below_mask(8 * n) as u32; + + let (phys_address, cached, err) = + device::memory::translate_address(device, addr & !3, device::memory::AccessType::Read); + if err { + return; + } + + device.cpu.gpr[rt(opcode) as usize] = se32( + ((device.cpu.gpr[rt(opcode) as usize] as u32) & mask + | device::memory::data_read( + device, + phys_address, + device::memory::AccessSize::Word, + cached, + ) << shift) as i32, + ) +} + +pub fn lw(device: &mut device::Device, opcode: u32) { + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)), + device::memory::AccessType::Read, + ); + if err { + return; + } + + device.cpu.gpr[rt(opcode) as usize] = se32(device::memory::data_read( + device, + phys_address, + device::memory::AccessSize::Word, + cached, + ) as i32) +} + +pub fn lbu(device: &mut device::Device, opcode: u32) { + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)), + device::memory::AccessType::Read, + ); + if err { + return; + } + + let shift = bshift(phys_address); + device.cpu.gpr[rt(opcode) as usize] = (device::memory::data_read( + device, + phys_address & !0x3, + device::memory::AccessSize::Word, + cached, + ) >> shift) as u8 as u64 +} + +pub fn lhu(device: &mut device::Device, opcode: u32) { + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)), + device::memory::AccessType::Read, + ); + if err { + return; + } + + let shift = hshift(phys_address); + device.cpu.gpr[rt(opcode) as usize] = (device::memory::data_read( + device, + phys_address & !0x3, + device::memory::AccessSize::Word, + cached, + ) >> shift) as u16 as u64 +} + +pub fn lwr(device: &mut device::Device, opcode: u32) { + let addr = device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)); + let n = addr & 3; + let shift = 8 * (3 - n); + let mask; + if n == 3 { + mask = 0 + } else { + mask = bits_above_mask(8 * (n + 1)) + } + + let (phys_address, cached, err) = + device::memory::translate_address(device, addr & !3, device::memory::AccessType::Read); + if err { + return; + } + + device.cpu.gpr[rt(opcode) as usize] = se32( + ((device.cpu.gpr[rt(opcode) as usize] as u32) & (mask as u32) + | device::memory::data_read( + device, + phys_address, + device::memory::AccessSize::Word, + cached, + ) >> shift) as i32, + ) +} + +pub fn lwu(device: &mut device::Device, opcode: u32) { + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)), + device::memory::AccessType::Read, + ); + if err { + return; + } + + device.cpu.gpr[rt(opcode) as usize] = device::memory::data_read( + device, + phys_address, + device::memory::AccessSize::Word, + cached, + ) as u64 +} + +pub fn sb(device: &mut device::Device, opcode: u32) { + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)), + device::memory::AccessType::Write, + ); + if err { + return; + } + + let shift = bshift(phys_address); + + device::memory::data_write( + device, + phys_address & !0x3, + (device.cpu.gpr[rt(opcode) as usize] as u32) << shift, + 0xFF << shift, + cached, + ) +} + +pub fn sh(device: &mut device::Device, opcode: u32) { + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)), + device::memory::AccessType::Write, + ); + if err { + return; + } + + let shift = hshift(phys_address); + + device::memory::data_write( + device, + phys_address & !0x3, + (device.cpu.gpr[rt(opcode) as usize] as u32) << shift, + 0xFFFF << shift, + cached, + ) +} + +pub fn swl(device: &mut device::Device, opcode: u32) { + let addr = device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)); + let n = addr & 3; + let shift = 8 * n; + + let mask; + if n == 0 { + mask = !0 as u32 + } else { + mask = bits_below_mask(8 * (4 - n)) as u32 + } + + let (phys_address, cached, err) = + device::memory::translate_address(device, addr & !3, device::memory::AccessType::Write); + if err { + return; + } + device::memory::data_write( + device, + phys_address, + (device.cpu.gpr[rt(opcode) as usize] >> shift) as u32, + mask, + cached, + ) +} + +pub fn sw(device: &mut device::Device, opcode: u32) { + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)), + device::memory::AccessType::Write, + ); + if err { + return; + } + + device::memory::data_write( + device, + phys_address, + device.cpu.gpr[rt(opcode) as usize] as u32, + 0xFFFFFFFF, + cached, + ) +} + +pub fn sdl(device: &mut device::Device, opcode: u32) { + let addr = device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)); + let n = addr & 7; + let shift = 8 * n; + + let mask; + if n == 0 { + mask = !0 as u64 + } else { + mask = bits_below_mask(8 * (8 - n)) + } + + let (phys_address, cached, err) = + device::memory::translate_address(device, addr & !7, device::memory::AccessType::Write); + if err { + return; + } + + let value = device.cpu.gpr[rt(opcode) as usize] >> shift; + device::memory::data_write( + device, + phys_address, + (value >> 32) as u32, + (mask >> 32) as u32, + cached, + ); + device::memory::data_write(device, phys_address + 4, value as u32, mask as u32, cached) +} + +pub fn sdr(device: &mut device::Device, opcode: u32) { + let addr = device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)); + let n = addr & 7; + let shift = 8 * (7 - n); + + let mask = bits_above_mask(8 * (7 - n)); + + let (phys_address, cached, err) = + device::memory::translate_address(device, addr & !7, device::memory::AccessType::Write); + if err { + return; + } + + let value = device.cpu.gpr[rt(opcode) as usize] << shift; + device::memory::data_write( + device, + phys_address, + (value >> 32) as u32, + (mask >> 32) as u32, + cached, + ); + device::memory::data_write(device, phys_address + 4, value as u32, mask as u32, cached) +} + +pub fn swr(device: &mut device::Device, opcode: u32) { + let addr = device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)); + let n = addr & 3; + let shift = 8 * (3 - n); + + let mask = bits_above_mask(8 * (3 - n)) as u32; + + let (phys_address, cached, err) = + device::memory::translate_address(device, addr & !3, device::memory::AccessType::Write); + if err { + return; + } + device::memory::data_write( + device, + phys_address, + (device.cpu.gpr[rt(opcode) as usize] << shift) as u32, + mask, + cached, + ) +} + +pub fn cache(device: &mut device::Device, opcode: u32) { + let (phys_address, _, err) = device::memory::translate_address( + device, + device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)), + device::memory::AccessType::Read, + ); + if err { + return; + } + + let dcache_line = ((phys_address >> 4) & 0x1FF) as usize; + let icache_line = ((phys_address >> 5) & 0x1FF) as usize; + match rt(opcode) { + 0x00 => { + //icache index invalidate + device.memory.icache[icache_line].valid = false + } + 0x04 => { + //icache load tag + let mut valid = 0; + if device.memory.icache[icache_line].valid { + valid = 1 + } + device::memory::masked_write_64( + &mut device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize], + valid << 7, + 0x80, + ); + device::memory::masked_write_64( + &mut device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize], + 0, + 0x40, + ); + device::memory::masked_write_64( + &mut device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize], + (device.memory.icache[icache_line].tag >> 4) as u64, + 0xFFFFF00, + ) + } + 0x08 => { + //icache store tag + device.memory.icache[icache_line].valid = + (device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize] & 0x80) >> 7 != 0; + device.memory.icache[icache_line].tag = + ((device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize] & 0xFFFFF00) << 4) + as u32 + } + 0x10 => { + //icache hit invalidate + if device::cache::icache_hit(device, icache_line, phys_address) { + device.memory.icache[icache_line].valid = false + } + } + 0x14 => { + //icache fill + device::cache::icache_fill(device, icache_line, phys_address) + } + 0x18 => { + //icache hit write back + if device::cache::icache_hit(device, icache_line, phys_address) { + device::cache::icache_writeback(device, icache_line) + } + } + 0x01 => { + //dcache index write back invalidate + if device.memory.dcache[dcache_line].dirty && device.memory.dcache[dcache_line].valid { + device::cache::dcache_writeback(device, dcache_line) + } + device.memory.dcache[dcache_line].valid = false + } + 0x05 => { + //dcache index load tag + let mut valid = 0; + let mut dirty = 0; + if device.memory.dcache[dcache_line].valid { + valid = 1 + } + if device.memory.dcache[dcache_line].dirty { + dirty = 1 + } + device::memory::masked_write_64( + &mut device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize], + valid << 7, + 0x80, + ); + device::memory::masked_write_64( + &mut device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize], + dirty << 6, + 0x40, + ); + device::memory::masked_write_64( + &mut device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize], + (device.memory.dcache[dcache_line].tag >> 4) as u64, + 0xFFFFF00, + ) + } + 0x09 => { + //dcache index store tag + device.memory.dcache[dcache_line].valid = + (device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize] & 0x80) >> 7 != 0; + device.memory.dcache[dcache_line].dirty = + (device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize] & 0x40) >> 6 != 0; + device.memory.dcache[dcache_line].tag = + ((device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize] & 0xFFFFF00) << 4) + as u32 + } + 0x0D => { + //dcache create dirty exclusive + if !device::cache::dcache_hit(device, dcache_line, phys_address) + && device.memory.dcache[dcache_line].dirty + { + device::cache::dcache_writeback(device, dcache_line) + } + device.memory.dcache[dcache_line].tag = (phys_address & !0xFFF) as u32; + device.memory.dcache[dcache_line].valid = true; + device.memory.dcache[dcache_line].dirty = true + } + 0x11 => { + //dcache hit invalidate + if device::cache::dcache_hit(device, dcache_line, phys_address) { + device.memory.dcache[dcache_line].valid = false; + device.memory.dcache[dcache_line].dirty = false + } + } + 0x15 => { + //dcache hit write back invalidate + if device::cache::dcache_hit(device, dcache_line, phys_address) { + if device.memory.dcache[dcache_line].dirty { + device::cache::dcache_writeback(device, dcache_line) + } + device.memory.dcache[dcache_line].valid = false + } + } + 0x19 => { + //dcache hit write back + if device::cache::dcache_hit(device, dcache_line, phys_address) { + if device.memory.dcache[dcache_line].dirty { + device::cache::dcache_writeback(device, dcache_line) + } + } + } + _ => { + panic!("unknown cache code {:#01x}", rt(opcode)) + } + } +} + +pub fn ll(device: &mut device::Device, opcode: u32) { + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)), + device::memory::AccessType::Read, + ); + if err { + return; + } + + device.cpu.gpr[rt(opcode) as usize] = se32(device::memory::data_read( + device, + phys_address, + device::memory::AccessSize::Word, + cached, + ) as i32); + device.cpu.llbit = true; + device.cpu.cop0.regs[device::cop0::COP0_LLADDR_REG as usize] = phys_address >> 4 +} + +pub fn lld(device: &mut device::Device, opcode: u32) { + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)), + device::memory::AccessType::Read, + ); + if err { + return; + } + + let mut w = [0; 2]; + w[0] = device::memory::data_read( + device, + phys_address, + device::memory::AccessSize::Dword, + cached, + ); + w[1] = device::memory::data_read( + device, + phys_address + 4, + device::memory::AccessSize::Dword, + cached, + ); + device.cpu.gpr[rt(opcode) as usize] = ((w[0] as u64) << 32) | (w[1]) as u64; + + device.cpu.llbit = true; + device.cpu.cop0.regs[device::cop0::COP0_LLADDR_REG as usize] = phys_address >> 4 +} + +pub fn ld(device: &mut device::Device, opcode: u32) { + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)), + device::memory::AccessType::Read, + ); + if err { + return; + } + + let mut w = [0; 2]; + w[0] = device::memory::data_read( + device, + phys_address, + device::memory::AccessSize::Dword, + cached, + ); + w[1] = device::memory::data_read( + device, + phys_address + 4, + device::memory::AccessSize::Dword, + cached, + ); + device.cpu.gpr[rt(opcode) as usize] = ((w[0] as u64) << 32) | (w[1]) as u64 +} + +pub fn sc(device: &mut device::Device, opcode: u32) { + if device.cpu.llbit { + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)), + device::memory::AccessType::Write, + ); + if err { + return; + } + + device.cpu.llbit = false; + device::memory::data_write( + device, + phys_address, + device.cpu.gpr[rt(opcode) as usize] as u32, + 0xFFFFFFFF, + cached, + ); + device.cpu.gpr[rt(opcode) as usize] = 1 + } else { + device.cpu.gpr[rt(opcode) as usize] = 0 + } +} + +pub fn scd(device: &mut device::Device, opcode: u32) { + if device.cpu.llbit { + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)), + device::memory::AccessType::Write, + ); + if err { + return; + } + + device.cpu.llbit = false; + device::memory::data_write( + device, + phys_address, + (device.cpu.gpr[rt(opcode) as usize] >> 32) as u32, + 0xFFFFFFFF, + cached, + ); + device::memory::data_write( + device, + phys_address + 4, + device.cpu.gpr[rt(opcode) as usize] as u32, + 0xFFFFFFFF, + cached, + ); + device.cpu.gpr[rt(opcode) as usize] = 1 + } else { + device.cpu.gpr[rt(opcode) as usize] = 0 + } +} + +pub fn sd(device: &mut device::Device, opcode: u32) { + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)), + device::memory::AccessType::Write, + ); + if err { + return; + } + + device::memory::data_write( + device, + phys_address, + (device.cpu.gpr[rt(opcode) as usize] >> 32) as u32, + 0xFFFFFFFF, + cached, + ); + device::memory::data_write( + device, + phys_address + 4, + device.cpu.gpr[rt(opcode) as usize] as u32, + 0xFFFFFFFF, + cached, + ) +} + +pub fn sll(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = + se32(((device.cpu.gpr[rt(opcode) as usize] as u32) << sa(opcode)) as i32) +} + +pub fn srl(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = + se32(((device.cpu.gpr[rt(opcode) as usize] as u32) >> sa(opcode)) as i32) +} + +pub fn sra(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = + se32(((device.cpu.gpr[rt(opcode) as usize] as i64) >> sa(opcode)) as i32) +} + +pub fn sllv(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = se32( + ((device.cpu.gpr[rt(opcode) as usize] as u32) + << (device.cpu.gpr[rs(opcode) as usize] as u32 & 31)) as i32, + ) +} + +pub fn srlv(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = se32( + ((device.cpu.gpr[rt(opcode) as usize] as u32) + >> (device.cpu.gpr[rs(opcode) as usize] as u32 & 31)) as i32, + ) +} + +pub fn srav(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = se32( + ((device.cpu.gpr[rt(opcode) as usize] as i64) >> (device.cpu.gpr[rs(opcode) as usize] & 31)) + as i32, + ) +} + +pub fn jr(device: &mut device::Device, opcode: u32) { + if !device::cpu::in_delay_slot_taken(device) { + check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.gpr[rs(opcode) as usize]; + } else if !device::cpu::in_delay_slot(device) { + device.cpu.branch_state.state = device::cpu::State::NotTaken; + } +} + +pub fn jalr(device: &mut device::Device, opcode: u32) { + let in_delay_slot_taken = device::cpu::in_delay_slot_taken(device); + + if !in_delay_slot_taken { + check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.gpr[rs(opcode) as usize]; + } else if !device::cpu::in_delay_slot(device) { + device.cpu.branch_state.state = device::cpu::State::NotTaken; + } + + if in_delay_slot_taken { + device.cpu.gpr[rd(opcode) as usize] = device.cpu.branch_state.pc + 4 + } else { + device.cpu.gpr[rd(opcode) as usize] = device.cpu.pc + 8 + } +} + +pub fn sync(_device: &mut device::Device, _opcode: u32) {} + +pub fn mfhi(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = device.cpu.hi +} + +pub fn mthi(device: &mut device::Device, opcode: u32) { + device.cpu.hi = device.cpu.gpr[rs(opcode) as usize] +} + +pub fn mflo(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = device.cpu.lo +} + +pub fn mtlo(device: &mut device::Device, opcode: u32) { + device.cpu.lo = device.cpu.gpr[rs(opcode) as usize] +} + +pub fn dsllv(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = + device.cpu.gpr[rt(opcode) as usize] << (device.cpu.gpr[rs(opcode) as usize] & 63) +} + +pub fn dsrlv(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = + device.cpu.gpr[rt(opcode) as usize] >> (device.cpu.gpr[rs(opcode) as usize] & 63) +} + +pub fn dsrav(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = ((device.cpu.gpr[rt(opcode) as usize] as i64) + >> (device.cpu.gpr[rs(opcode) as usize] & 63)) + as u64 +} + +pub fn mult(device: &mut device::Device, opcode: u32) { + let result = ((device.cpu.gpr[rs(opcode) as usize]) as i32 as i64) + .wrapping_mul(device.cpu.gpr[rt(opcode) as usize] as i32 as i64); + + device.cpu.lo = se32((result) as i32); + device.cpu.hi = se32((result >> 32) as i32); + + device::cop0::add_cycles(device, 4); +} + +pub fn multu(device: &mut device::Device, opcode: u32) { + let result = + device.cpu.gpr[rs(opcode) as usize].wrapping_mul(device.cpu.gpr[rt(opcode) as usize]); + + device.cpu.lo = se32((result) as u32 as i32); + device.cpu.hi = se32((result >> 32) as u32 as i32); + + device::cop0::add_cycles(device, 4); +} + +pub fn div(device: &mut device::Device, opcode: u32) { + if (device.cpu.gpr[rt(opcode) as usize]) as i32 != 0 { + device.cpu.lo = se32( + (device.cpu.gpr[rs(opcode) as usize] as i32) + .wrapping_div(device.cpu.gpr[rt(opcode) as usize] as i32), + ); + device.cpu.hi = se32( + (device.cpu.gpr[rs(opcode) as usize] as i32) + .wrapping_rem(device.cpu.gpr[rt(opcode) as usize] as i32), + ); + } else { + if (device.cpu.gpr[rs(opcode) as usize] as i32) < 0 { + device.cpu.lo = 1 + } else { + device.cpu.lo = !0 as u64 + } + device.cpu.hi = se32(device.cpu.gpr[rs(opcode) as usize] as i32) + } + + device::cop0::add_cycles(device, 36) +} + +pub fn divu(device: &mut device::Device, opcode: u32) { + if (device.cpu.gpr[rt(opcode) as usize]) as u32 != 0 { + device.cpu.lo = se32( + ((device.cpu.gpr[rs(opcode) as usize] as u32) + / (device.cpu.gpr[rt(opcode) as usize] as u32)) as i32, + ); + device.cpu.hi = se32( + ((device.cpu.gpr[rs(opcode) as usize] as u32) + % (device.cpu.gpr[rt(opcode) as usize] as u32)) as i32, + ); + } else { + device.cpu.lo = !0 as u64; + device.cpu.hi = se32(device.cpu.gpr[rs(opcode) as usize] as u32 as i32) + } + + device::cop0::add_cycles(device, 36) +} + +pub fn dmult(device: &mut device::Device, opcode: u32) { + let result = ((device.cpu.gpr[rs(opcode) as usize] as i64 as i128) + * (device.cpu.gpr[rt(opcode) as usize] as i64 as i128)) as u128; + device.cpu.lo = result as u64; + device.cpu.hi = (result >> 64) as u64; + device::cop0::add_cycles(device, 7) +} + +pub fn dmultu(device: &mut device::Device, opcode: u32) { + let result = (device.cpu.gpr[rs(opcode) as usize] as u128) + * (device.cpu.gpr[rt(opcode) as usize] as u128); + device.cpu.lo = result as u64; + device.cpu.hi = (result >> 64) as u64; + device::cop0::add_cycles(device, 7) +} + +pub fn ddiv(device: &mut device::Device, opcode: u32) { + if device.cpu.gpr[rt(opcode) as usize] as i64 != 0 { + device.cpu.lo = (((device.cpu.gpr[rs(opcode) as usize] as i64) as i128) + / (device.cpu.gpr[rt(opcode) as usize] as i64) as i128) as u64; + device.cpu.hi = (((device.cpu.gpr[rs(opcode) as usize] as i64) as i128) + % (device.cpu.gpr[rt(opcode) as usize] as i64) as i128) as u64; + } else { + if ((device.cpu.gpr[rs(opcode) as usize]) as i64) < 0 { + device.cpu.lo = 1 + } else { + device.cpu.lo = !0 as u64 + } + device.cpu.hi = device.cpu.gpr[rs(opcode) as usize] + } + device::cop0::add_cycles(device, 68); +} + +pub fn ddivu(device: &mut device::Device, opcode: u32) { + if device.cpu.gpr[rt(opcode) as usize] != 0 { + device.cpu.lo = device.cpu.gpr[rs(opcode) as usize] / device.cpu.gpr[rt(opcode) as usize]; + device.cpu.hi = device.cpu.gpr[rs(opcode) as usize] % device.cpu.gpr[rt(opcode) as usize] + } else { + device.cpu.lo = !0 as u64; + device.cpu.hi = device.cpu.gpr[rs(opcode) as usize] + } + device::cop0::add_cycles(device, 68); +} + +pub fn add(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = se32( + (device.cpu.gpr[rs(opcode) as usize] as u32) + .wrapping_add(device.cpu.gpr[rt(opcode) as usize] as u32) as i32, + ) +} + +pub fn addu(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = se32( + (device.cpu.gpr[rs(opcode) as usize] as u32) + .wrapping_add(device.cpu.gpr[rt(opcode) as usize] as u32) as i32, + ) +} + +pub fn sub(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = se32( + (device.cpu.gpr[rs(opcode) as usize] as u32) + .wrapping_sub(device.cpu.gpr[rt(opcode) as usize] as u32) as i32, + ) +} + +pub fn subu(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = se32( + (device.cpu.gpr[rs(opcode) as usize] as u32) + .wrapping_sub(device.cpu.gpr[rt(opcode) as usize] as u32) as i32, + ) +} + +pub fn and(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = + device.cpu.gpr[rs(opcode) as usize] & device.cpu.gpr[rt(opcode) as usize] +} + +pub fn or(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = + device.cpu.gpr[rs(opcode) as usize] | device.cpu.gpr[rt(opcode) as usize] +} + +pub fn xor(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = + device.cpu.gpr[rs(opcode) as usize] ^ device.cpu.gpr[rt(opcode) as usize] +} + +pub fn nor(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = + !(device.cpu.gpr[rs(opcode) as usize] | device.cpu.gpr[rt(opcode) as usize]) +} + +pub fn slt(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = ((device.cpu.gpr[rs(opcode) as usize] as i64) + < (device.cpu.gpr[rt(opcode) as usize] as i64)) + as u64 +} + +pub fn sltu(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = + (device.cpu.gpr[rs(opcode) as usize] < device.cpu.gpr[rt(opcode) as usize]) as u64 +} + +pub fn dadd(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = + device.cpu.gpr[rs(opcode) as usize].wrapping_add(device.cpu.gpr[rt(opcode) as usize]) +} + +pub fn daddu(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = + device.cpu.gpr[rs(opcode) as usize].wrapping_add(device.cpu.gpr[rt(opcode) as usize]) +} + +pub fn dsub(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = + device.cpu.gpr[rs(opcode) as usize].wrapping_sub(device.cpu.gpr[rt(opcode) as usize]) +} + +pub fn dsubu(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = + device.cpu.gpr[rs(opcode) as usize].wrapping_sub(device.cpu.gpr[rt(opcode) as usize]) +} + +pub fn tge(device: &mut device::Device, opcode: u32) { + if (device.cpu.gpr[rs(opcode) as usize] as i64) >= (device.cpu.gpr[rt(opcode) as usize] as i64) + { + device::exceptions::trap_exception(device) + } +} + +pub fn tgeu(device: &mut device::Device, opcode: u32) { + if device.cpu.gpr[rs(opcode) as usize] >= device.cpu.gpr[rt(opcode) as usize] { + device::exceptions::trap_exception(device) + } +} + +pub fn tlt(device: &mut device::Device, opcode: u32) { + if (device.cpu.gpr[rs(opcode) as usize] as i64) < (device.cpu.gpr[rt(opcode) as usize] as i64) { + device::exceptions::trap_exception(device) + } +} + +pub fn tltu(device: &mut device::Device, opcode: u32) { + if device.cpu.gpr[rs(opcode) as usize] < device.cpu.gpr[rt(opcode) as usize] { + device::exceptions::trap_exception(device) + } +} + +pub fn teq(device: &mut device::Device, opcode: u32) { + if device.cpu.gpr[rs(opcode) as usize] == device.cpu.gpr[rt(opcode) as usize] { + device::exceptions::trap_exception(device) + } +} + +pub fn tne(device: &mut device::Device, opcode: u32) { + if device.cpu.gpr[rs(opcode) as usize] != device.cpu.gpr[rt(opcode) as usize] { + device::exceptions::trap_exception(device) + } +} + +pub fn dsll(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = device.cpu.gpr[rt(opcode) as usize] << sa(opcode) +} + +pub fn dsrl(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = device.cpu.gpr[rt(opcode) as usize] >> sa(opcode) +} + +pub fn dsra(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = + ((device.cpu.gpr[rt(opcode) as usize] as i64) >> sa(opcode)) as u64 +} + +pub fn dsll32(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = device.cpu.gpr[rt(opcode) as usize] << (32 + sa(opcode)) +} + +pub fn dsrl32(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = device.cpu.gpr[rt(opcode) as usize] >> (32 + sa(opcode)) +} + +pub fn dsra32(device: &mut device::Device, opcode: u32) { + device.cpu.gpr[rd(opcode) as usize] = + ((device.cpu.gpr[rt(opcode) as usize] as i64) >> (32 + sa(opcode))) as u64 +} + +pub fn bltz(device: &mut device::Device, opcode: u32) { + if ((device.cpu.gpr[rs(opcode) as usize]) as i64) < 0 { + check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + } else { + device.cpu.branch_state.state = device::cpu::State::NotTaken; + } +} + +pub fn bgez(device: &mut device::Device, opcode: u32) { + if (device.cpu.gpr[rs(opcode) as usize] as i64) >= 0 { + check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + } else { + device.cpu.branch_state.state = device::cpu::State::NotTaken; + } +} + +pub fn bltzl(device: &mut device::Device, opcode: u32) { + if ((device.cpu.gpr[rs(opcode) as usize]) as i64) < 0 { + check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + } else { + device.cpu.branch_state.state = device::cpu::State::Discard; + } +} + +pub fn bgezl(device: &mut device::Device, opcode: u32) { + if (device.cpu.gpr[rs(opcode) as usize] as i64) >= 0 { + check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + } else { + device.cpu.branch_state.state = device::cpu::State::Discard; + } +} + +pub fn tgei(device: &mut device::Device, opcode: u32) { + if (device.cpu.gpr[rs(opcode) as usize] as i64) >= (imm(opcode) as i16 as i64) { + device::exceptions::trap_exception(device) + } +} + +pub fn tgeiu(device: &mut device::Device, opcode: u32) { + if device.cpu.gpr[rs(opcode) as usize] >= se16(imm(opcode) as i16) { + device::exceptions::trap_exception(device) + } +} + +pub fn tlti(device: &mut device::Device, opcode: u32) { + if (device.cpu.gpr[rs(opcode) as usize] as i64) < (imm(opcode) as i16 as i64) { + device::exceptions::trap_exception(device) + } +} + +pub fn tltiu(device: &mut device::Device, opcode: u32) { + if device.cpu.gpr[rs(opcode) as usize] < se16(imm(opcode) as i16) { + device::exceptions::trap_exception(device) + } +} + +pub fn teqi(device: &mut device::Device, opcode: u32) { + if (device.cpu.gpr[rs(opcode) as usize] as i64) == (imm(opcode) as i16 as i64) { + device::exceptions::trap_exception(device) + } +} + +pub fn tnei(device: &mut device::Device, opcode: u32) { + if (device.cpu.gpr[rs(opcode) as usize] as i64) != (imm(opcode) as i16 as i64) { + device::exceptions::trap_exception(device) + } +} + +pub fn bltzal(device: &mut device::Device, opcode: u32) { + if ((device.cpu.gpr[rs(opcode) as usize]) as i64) < 0 { + check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + } else { + device.cpu.branch_state.state = device::cpu::State::NotTaken; + } + device.cpu.gpr[31] = device.cpu.pc + 8 +} + +pub fn bgezal(device: &mut device::Device, opcode: u32) { + let in_delay_slot = device::cpu::in_delay_slot(device); + + if device.cpu.gpr[rs(opcode) as usize] as i64 >= 0 { + check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + } else { + device.cpu.branch_state.state = device::cpu::State::NotTaken; + } + + if in_delay_slot { + device.cpu.gpr[31] = device.cpu.branch_state.pc + 4 + } else { + device.cpu.gpr[31] = device.cpu.pc + 8 + } +} + +pub fn bltzall(device: &mut device::Device, opcode: u32) { + if ((device.cpu.gpr[rs(opcode) as usize]) as i64) < 0 { + check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + } else { + device.cpu.branch_state.state = device::cpu::State::Discard; + } + device.cpu.gpr[31] = device.cpu.pc + 8 +} + +pub fn bgezall(device: &mut device::Device, opcode: u32) { + if device.cpu.gpr[rs(opcode) as usize] as i64 >= 0 { + check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + } else { + device.cpu.branch_state.state = device::cpu::State::Discard; + } + device.cpu.gpr[31] = device.cpu.pc + 8 +} diff --git a/src/device/events.rs b/src/device/events.rs new file mode 100644 index 0000000..900e23b --- /dev/null +++ b/src/device/events.rs @@ -0,0 +1,88 @@ +use crate::device; + +#[derive(PartialEq, Copy, Clone)] +pub enum EventType { + AI, + SI, + VI, + PI, + DP, + SP, + SPDma, + COMPARE, +} + +#[derive(PartialEq, Copy, Clone)] +pub struct Event { + pub name: EventType, + pub count: u64, + pub handler: fn(&mut device::Device), +} + +pub fn create_event( + device: &mut device::Device, + name: EventType, + when: u64, + handler: fn(&mut device::Device), +) { + let event = Event { + name: name, + count: when, + handler: handler, + }; + if get_event(device, name) != None { + panic! {"duplicate event {}", name as usize} + } + device.cpu.events.push(event); + set_next_event(device); +} + +pub fn get_event(device: &mut device::Device, name: EventType) -> Option<&mut Event> { + for i in device.cpu.events.iter_mut() { + if i.name == name { + return Some(i); + } + } + return None; +} + +pub fn remove_event(device: &mut device::Device, name: EventType) { + let mut remove_index: usize = 0; + let mut found = false; + for (pos, i) in device.cpu.events.iter_mut().enumerate() { + if i.name == name { + found = true; + remove_index = pos; + break; + } + } + if found { + device.cpu.events.remove(remove_index); + } +} + +pub fn trigger_event(device: &mut device::Device) { + let next_event_name = device.cpu.next_event.unwrap().name; + remove_event(device, next_event_name); + + let handler = device.cpu.next_event.unwrap().handler; + handler(device); + set_next_event(device); +} + +pub fn set_next_event(device: &mut device::Device) { + device.cpu.next_event_count = u64::MAX; + for i in device.cpu.events.iter() { + if i.count < device.cpu.next_event_count { + device.cpu.next_event_count = i.count; + device.cpu.next_event = Some(*i); + } + } +} + +pub fn translate_events(device: &mut device::Device, old_count: u64, new_count: u64) { + for i in device.cpu.events.iter_mut() { + i.count = i.count - old_count + new_count + } + set_next_event(device); +} diff --git a/src/device/exceptions.rs b/src/device/exceptions.rs new file mode 100644 index 0000000..18497cd --- /dev/null +++ b/src/device/exceptions.rs @@ -0,0 +1,136 @@ +use crate::device; + +pub fn check_pending_interrupts(device: &mut device::Device) { + if (device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] + & device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] + & device::cop0::COP0_CAUSE_IP_MASK) + == 0 + { + // interrupt disabled, or no pending interrupts + return; + } + + if (device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] + & (device::cop0::COP0_STATUS_IE + | device::cop0::COP0_STATUS_EXL + | device::cop0::COP0_STATUS_ERL)) + != device::cop0::COP0_STATUS_IE + { + // interrupts disabled globally, or error/exception is already set + return; + } + + exception_general(device); +} + +pub fn floating_point_exception(device: &mut device::Device) { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = + device::cop0::COP0_CAUSE_EXCCODE_FPE; + + exception_general(device) +} + +pub fn trap_exception(device: &mut device::Device) { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = + device::cop0::COP0_CAUSE_EXCCODE_TR; + + exception_general(device) +} + +pub fn syscall_exception(device: &mut device::Device) { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = + device::cop0::COP0_CAUSE_EXCCODE_SYS; + + exception_general(device) +} + +pub fn break_exception(device: &mut device::Device) { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = + device::cop0::COP0_CAUSE_EXCCODE_BP; + + exception_general(device) +} + +pub fn reserved_exception(device: &mut device::Device, cop: u64) { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = + device::cop0::COP0_CAUSE_EXCCODE_RI | cop; + + exception_general(device) +} + +pub fn cop_unusable_exception(device: &mut device::Device, cop: u64) { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = + device::cop0::COP0_CAUSE_EXCCODE_CPU | cop; + + exception_general(device) +} + +pub fn tlb_miss_exception( + device: &mut device::Device, + address: u64, + access_type: device::memory::AccessType, +) { + if access_type == device::memory::AccessType::Read { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = + device::cop0::COP0_CAUSE_EXCCODE_TLBL + } else { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = + device::cop0::COP0_CAUSE_EXCCODE_TLBS + } + + device.cpu.cop0.regs[device::cop0::COP0_BADVADDR_REG as usize] = address; + device::memory::masked_write_64( + &mut device.cpu.cop0.regs[device::cop0::COP0_CONTEXT_REG as usize], + address >> 9, + device::cop0::COP0_CONTEXT_BADVPN2_MASK, + ); + device::memory::masked_write_64( + &mut device.cpu.cop0.regs[device::cop0::COP0_XCONTEXT_REG as usize], + address >> 9, + device::cop0::COP0_XCONTEXT_BADVPN2_MASK, + ); + device::memory::masked_write_64( + &mut device.cpu.cop0.regs[device::cop0::COP0_XCONTEXT_REG as usize], + address >> 31, + device::cop0::COP0_XCONTEXT_REGION_MASK, + ); + + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_EXL + == 0 + { + device.cpu.pc -= 0x180 + } + + exception_general(device) +} + +pub fn exception_general(device: &mut device::Device) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_EXL + == 0 + { + device.cpu.cop0.regs[device::cop0::COP0_EPC_REG as usize] = device.cpu.pc; + if device::cpu::in_delay_slot(device) { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] |= + device::cop0::COP0_CAUSE_BD; + device.cpu.cop0.regs[device::cop0::COP0_EPC_REG as usize] -= 4; + } else { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= + !device::cop0::COP0_CAUSE_BD; + } + } + + device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] |= device::cop0::COP0_STATUS_EXL; + + let vector_offset: u32 = 0x180; + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_BEV + == 0 + { + device.cpu.pc = device::cpu_instructions::se32((0x80000000 + vector_offset) as i32); + } else { + device.cpu.pc = device::cpu_instructions::se32((0xBFC00200 + vector_offset) as i32); + } + + device.cpu.branch_state.state = device::cpu::State::Exception; + + device::cop0::add_cycles(device, 2); +} diff --git a/src/device/fpu_instructions.rs b/src/device/fpu_instructions.rs new file mode 100644 index 0000000..824fa8b --- /dev/null +++ b/src/device/fpu_instructions.rs @@ -0,0 +1,700 @@ +use crate::device; + +pub fn fs(opcode: u32) -> u32 { + return (opcode >> 11) & 0x1F; +} + +pub fn ft(opcode: u32) -> u32 { + return (opcode >> 16) & 0x1F; +} + +pub fn fd(opcode: u32) -> u32 { + return (opcode >> 6) & 0x1F; +} + +pub fn bc1f(device: &mut device::Device, opcode: u32) { + if device.cpu.cop1.fcr31 & device::cop1::FCR31_CMP_BIT == 0 { + device::cpu_instructions::check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(device::cpu_instructions::se16( + device::cpu_instructions::imm(opcode << 2) as i16, + )) + 4; + } else { + device.cpu.branch_state.state = device::cpu::State::NotTaken; + } +} + +pub fn bc1t(device: &mut device::Device, opcode: u32) { + if device.cpu.cop1.fcr31 & device::cop1::FCR31_CMP_BIT != 0 { + device::cpu_instructions::check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(device::cpu_instructions::se16( + device::cpu_instructions::imm(opcode << 2) as i16, + )) + 4; + } else { + device.cpu.branch_state.state = device::cpu::State::NotTaken; + } +} + +pub fn bc1fl(device: &mut device::Device, opcode: u32) { + if device.cpu.cop1.fcr31 & device::cop1::FCR31_CMP_BIT == 0 { + device::cpu_instructions::check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(device::cpu_instructions::se16( + device::cpu_instructions::imm(opcode << 2) as i16, + )) + 4; + } else { + device.cpu.branch_state.state = device::cpu::State::Discard; + } +} + +pub fn bc1tl(device: &mut device::Device, opcode: u32) { + if device.cpu.cop1.fcr31 & device::cop1::FCR31_CMP_BIT != 0 { + device::cpu_instructions::check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(device::cpu_instructions::se16( + device::cpu_instructions::imm(opcode << 2) as i16, + )) + 4; + } else { + device.cpu.branch_state.state = device::cpu::State::Discard; + } +} + +pub fn add_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_single(device, ft(opcode) as usize); + device::cop1::set_fpr_single(device, fd(opcode) as usize, fs + ft, true); + device::cop0::add_cycles(device, 2) +} + +pub fn sub_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_single(device, ft(opcode) as usize); + device::cop1::set_fpr_single(device, fd(opcode) as usize, fs - ft, true); + device::cop0::add_cycles(device, 2) +} + +pub fn mul_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_single(device, ft(opcode) as usize); + device::cop1::set_fpr_single(device, fd(opcode) as usize, fs * ft, true); + device::cop0::add_cycles(device, 4) +} + +pub fn div_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_single(device, ft(opcode) as usize); + device::cop1::set_fpr_single(device, fd(opcode) as usize, fs / ft, true); + device::cop0::add_cycles(device, 28) +} + +pub fn sqrt_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + device::cop1::set_fpr_single(device, fd(opcode) as usize, fs.sqrt(), true); + device::cop0::add_cycles(device, 28) +} + +pub fn abs_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + device::cop1::set_fpr_single(device, fd(opcode) as usize, fs.abs(), true); + device::cop0::add_cycles(device, 2) +} + +pub fn mov_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + device::cop1::set_fpr_double(device, fd(opcode) as usize, fs); +} + +pub fn neg_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + device::cop1::set_fpr_single(device, fd(opcode) as usize, -fs, true); +} + +pub fn round_l_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let value = f64::from_ne_bytes((fs.round_ties_even() as i64).to_ne_bytes()); + device::cop1::set_fpr_double(device, fd(opcode) as usize, value); + device::cop0::add_cycles(device, 4) +} + +pub fn trunc_l_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let value = f64::from_ne_bytes((fs.trunc() as i64).to_ne_bytes()); + device::cop1::set_fpr_double(device, fd(opcode) as usize, value); + device::cop0::add_cycles(device, 4) +} + +pub fn ceil_l_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let value = f64::from_ne_bytes((fs.ceil() as i64).to_ne_bytes()); + device::cop1::set_fpr_double(device, fd(opcode) as usize, value); + device::cop0::add_cycles(device, 4) +} + +pub fn floor_l_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let value = f64::from_ne_bytes((fs.floor() as i64).to_ne_bytes()); + device::cop1::set_fpr_double(device, fd(opcode) as usize, value); + device::cop0::add_cycles(device, 4) +} + +pub fn round_w_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let value = f32::from_ne_bytes((fs.round_ties_even() as i32).to_ne_bytes()); + device::cop1::set_fpr_single(device, fd(opcode) as usize, value, true); + device::cop0::add_cycles(device, 4) +} + +pub fn trunc_w_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let value = f32::from_ne_bytes((fs.trunc() as i32).to_ne_bytes()); + device::cop1::set_fpr_single(device, fd(opcode) as usize, value, true); + device::cop0::add_cycles(device, 4) +} + +pub fn ceil_w_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let value = f32::from_ne_bytes((fs.ceil() as i32).to_ne_bytes()); + device::cop1::set_fpr_single(device, fd(opcode) as usize, value, true); + device::cop0::add_cycles(device, 4) +} + +pub fn floor_w_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let value = f32::from_ne_bytes((fs.floor() as i32).to_ne_bytes()); + device::cop1::set_fpr_single(device, fd(opcode) as usize, value, true); + device::cop0::add_cycles(device, 4) +} + +pub fn cvt_d_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + device::cop1::set_fpr_double(device, fd(opcode) as usize, fs as f64); + device::cop0::add_cycles(device, 4) +} + +pub fn cvt_w_s(device: &mut device::Device, opcode: u32) { + match device.cpu.cop1.fcr31 & 3 { + 0 => round_w_s(device, opcode), + 1 => trunc_w_s(device, opcode), + 2 => ceil_w_s(device, opcode), + 3 => floor_w_s(device, opcode), + _ => panic!("unknown cvt_w_s"), + } +} + +pub fn cvt_l_s(device: &mut device::Device, opcode: u32) { + match device.cpu.cop1.fcr31 & 3 { + 0 => round_l_s(device, opcode), + 1 => trunc_l_s(device, opcode), + 2 => ceil_l_s(device, opcode), + 3 => floor_l_s(device, opcode), + _ => panic!("unknown cvt_l_s"), + } +} + +pub fn c_f_s(device: &mut device::Device, _opcode: u32) { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT +} + +pub fn c_un_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_single(device, ft(opcode) as usize); + if fs.is_nan() || ft.is_nan() { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_eq_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_single(device, ft(opcode) as usize); + if fs.is_nan() || ft.is_nan() { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + return; + } + if fs == ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_ueq_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_single(device, ft(opcode) as usize); + if fs.is_nan() || ft.is_nan() { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + return; + } + if fs == ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_olt_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_single(device, ft(opcode) as usize); + if fs.is_nan() || ft.is_nan() { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + return; + } + if fs < ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_ult_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_single(device, ft(opcode) as usize); + if fs.is_nan() || ft.is_nan() { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + return; + } + if fs < ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_ole_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_single(device, ft(opcode) as usize); + if fs.is_nan() || ft.is_nan() { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + return; + } + if fs <= ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_ule_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_single(device, ft(opcode) as usize); + if fs.is_nan() || ft.is_nan() { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + return; + } + if fs <= ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_sf_s(device: &mut device::Device, _opcode: u32) { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; +} + +pub fn c_ngle_s(device: &mut device::Device, _opcode: u32) { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; +} + +pub fn c_seq_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_single(device, ft(opcode) as usize); + + if fs == ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_ngl_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_single(device, ft(opcode) as usize); + + if fs == ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_lt_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_single(device, ft(opcode) as usize); + + if fs < ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_nge_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_single(device, ft(opcode) as usize); + + if fs < ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_le_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_single(device, ft(opcode) as usize); + + if fs <= ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_ngt_s(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_single(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_single(device, ft(opcode) as usize); + + if fs <= ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn add_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_double(device, ft(opcode) as usize); + device::cop1::set_fpr_double(device, fd(opcode) as usize, fs + ft); + device::cop0::add_cycles(device, 2) +} + +pub fn sub_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_double(device, ft(opcode) as usize); + device::cop1::set_fpr_double(device, fd(opcode) as usize, fs - ft); + device::cop0::add_cycles(device, 2) +} + +pub fn mul_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_double(device, ft(opcode) as usize); + device::cop1::set_fpr_double(device, fd(opcode) as usize, fs * ft); + device::cop0::add_cycles(device, 7) +} + +pub fn div_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_double(device, ft(opcode) as usize); + device::cop1::set_fpr_double(device, fd(opcode) as usize, fs / ft); + device::cop0::add_cycles(device, 57) +} + +pub fn sqrt_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + device::cop1::set_fpr_double(device, fd(opcode) as usize, fs.sqrt()); + device::cop0::add_cycles(device, 57) +} + +pub fn abs_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + device::cop1::set_fpr_double(device, fd(opcode) as usize, fs.abs()); + device::cop0::add_cycles(device, 2) +} + +pub fn mov_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + device::cop1::set_fpr_double(device, fd(opcode) as usize, fs); +} + +pub fn neg_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + device::cop1::set_fpr_double(device, fd(opcode) as usize, -fs); +} + +pub fn round_l_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let value = f64::from_ne_bytes((fs.round_ties_even() as i64).to_ne_bytes()); + device::cop1::set_fpr_double(device, fd(opcode) as usize, value); + device::cop0::add_cycles(device, 4) +} + +pub fn trunc_l_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let value = f64::from_ne_bytes((fs.trunc() as i64).to_ne_bytes()); + device::cop1::set_fpr_double(device, fd(opcode) as usize, value); + device::cop0::add_cycles(device, 4) +} + +pub fn ceil_l_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let value = f64::from_ne_bytes((fs.ceil() as i64).to_ne_bytes()); + device::cop1::set_fpr_double(device, fd(opcode) as usize, value); + device::cop0::add_cycles(device, 4) +} + +pub fn floor_l_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let value = f64::from_ne_bytes((fs.floor() as i64).to_ne_bytes()); + device::cop1::set_fpr_double(device, fd(opcode) as usize, value); + device::cop0::add_cycles(device, 4) +} + +pub fn round_w_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let value = f32::from_ne_bytes((fs.round_ties_even() as i32).to_ne_bytes()); + device::cop1::set_fpr_single(device, fd(opcode) as usize, value, true); + device::cop0::add_cycles(device, 4) +} + +pub fn trunc_w_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let value = f32::from_ne_bytes((fs.trunc() as i32).to_ne_bytes()); + device::cop1::set_fpr_single(device, fd(opcode) as usize, value, true); + device::cop0::add_cycles(device, 4) +} + +pub fn ceil_w_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let value = f32::from_ne_bytes((fs.ceil() as i32).to_ne_bytes()); + device::cop1::set_fpr_single(device, fd(opcode) as usize, value, true); + device::cop0::add_cycles(device, 4) +} + +pub fn floor_w_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let value = f32::from_ne_bytes((fs.floor() as i32).to_ne_bytes()); + device::cop1::set_fpr_single(device, fd(opcode) as usize, value, true); + device::cop0::add_cycles(device, 4) +} + +pub fn cvt_s_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + device::cop1::set_fpr_single(device, fd(opcode) as usize, fs as f32, true); + device::cop0::add_cycles(device, 4) +} + +pub fn cvt_w_d(device: &mut device::Device, opcode: u32) { + match device.cpu.cop1.fcr31 & 3 { + 0 => round_w_d(device, opcode), + 1 => trunc_w_d(device, opcode), + 2 => ceil_w_d(device, opcode), + 3 => floor_w_d(device, opcode), + _ => panic!("unknown cvt_w_d"), + } +} + +pub fn cvt_l_d(device: &mut device::Device, opcode: u32) { + match device.cpu.cop1.fcr31 & 3 { + 0 => round_l_d(device, opcode), + 1 => trunc_l_d(device, opcode), + 2 => ceil_l_d(device, opcode), + 3 => floor_l_d(device, opcode), + _ => panic!("unknown cvt_l_d"), + } +} + +pub fn c_f_d(device: &mut device::Device, _opcode: u32) { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; +} + +pub fn c_un_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_double(device, ft(opcode) as usize); + if fs.is_nan() || ft.is_nan() { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_eq_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_double(device, ft(opcode) as usize); + if fs.is_nan() || ft.is_nan() { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + return; + } + if fs == ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_ueq_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_double(device, ft(opcode) as usize); + if fs.is_nan() || ft.is_nan() { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + return; + } + if fs == ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_olt_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_double(device, ft(opcode) as usize); + if fs.is_nan() || ft.is_nan() { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + return; + } + if fs < ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_ult_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_double(device, ft(opcode) as usize); + if fs.is_nan() || ft.is_nan() { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + return; + } + if fs < ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_ole_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_double(device, ft(opcode) as usize); + if fs.is_nan() || ft.is_nan() { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + return; + } + if fs <= ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_ule_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_double(device, ft(opcode) as usize); + if fs.is_nan() || ft.is_nan() { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + return; + } + if fs <= ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_sf_d(device: &mut device::Device, _opcode: u32) { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; +} + +pub fn c_ngle_d(device: &mut device::Device, _opcode: u32) { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; +} + +pub fn c_seq_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_double(device, ft(opcode) as usize); + + if fs == ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_ngl_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_double(device, ft(opcode) as usize); + + if fs == ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_lt_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_double(device, ft(opcode) as usize); + + if fs < ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_nge_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_double(device, ft(opcode) as usize); + + if fs < ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_le_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_double(device, ft(opcode) as usize); + + if fs <= ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn c_ngt_d(device: &mut device::Device, opcode: u32) { + let fs = device::cop1::get_fpr_double(device, fs(opcode) as usize); + let ft = device::cop1::get_fpr_double(device, ft(opcode) as usize); + + if fs <= ft { + device.cpu.cop1.fcr31 |= device::cop1::FCR31_CMP_BIT; + } else { + device.cpu.cop1.fcr31 &= !device::cop1::FCR31_CMP_BIT; + } +} + +pub fn cvt_s_l(device: &mut device::Device, opcode: u32) { + let fs = + i64::from_ne_bytes(device::cop1::get_fpr_double(device, fs(opcode) as usize).to_ne_bytes()); + device::cop1::set_fpr_single(device, fd(opcode) as usize, fs as f32, true); + device::cop0::add_cycles(device, 4) +} + +pub fn cvt_d_l(device: &mut device::Device, opcode: u32) { + let fs = + i64::from_ne_bytes(device::cop1::get_fpr_double(device, fs(opcode) as usize).to_ne_bytes()); + device::cop1::set_fpr_double(device, fd(opcode) as usize, fs as f64); + device::cop0::add_cycles(device, 4) +} + +pub fn cvt_s_w(device: &mut device::Device, opcode: u32) { + let fs = + i32::from_ne_bytes(device::cop1::get_fpr_single(device, fs(opcode) as usize).to_ne_bytes()); + device::cop1::set_fpr_single(device, fd(opcode) as usize, fs as f32, true); + device::cop0::add_cycles(device, 4) +} + +pub fn cvt_d_w(device: &mut device::Device, opcode: u32) { + let fs = i32::from_ne_bytes( + device::cop1::get_fpr_double(device, fs(opcode) as usize).to_ne_bytes()[0..4] + .try_into() + .unwrap(), + ); + device::cop1::set_fpr_double(device, fd(opcode) as usize, fs as f64); + device::cop0::add_cycles(device, 4) +} diff --git a/src/device/is_viewer.rs b/src/device/is_viewer.rs new file mode 100644 index 0000000..8aeba97 --- /dev/null +++ b/src/device/is_viewer.rs @@ -0,0 +1,37 @@ +use crate::device; +use std::str; + +pub const IS_VIEWER_MASK: usize = 0xFFFF; + +pub fn read_mem( + device: &mut device::Device, + address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + let masked_address = address as usize & IS_VIEWER_MASK; + return u32::from_be_bytes( + device.cart.is_viewer_buffer[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ); +} + +pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { + let masked_address = address as usize & IS_VIEWER_MASK; + if masked_address == 0x14 { + let length = (value & mask) as u64; + let data = + str::from_utf8(&device.cart.is_viewer_buffer[0x20 as usize..(0x20 + length) as usize]) + .unwrap(); + print!("{}", data); + } else { + let mut data = u32::from_be_bytes( + device.cart.is_viewer_buffer[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ); + device::memory::masked_write_32(&mut data, value, mask); + device.cart.is_viewer_buffer[masked_address..masked_address + 4] + .copy_from_slice(&data.to_be_bytes()); + } +} diff --git a/src/device/memory.rs b/src/device/memory.rs new file mode 100644 index 0000000..39c0f0a --- /dev/null +++ b/src/device/memory.rs @@ -0,0 +1,164 @@ +use crate::device; + +pub const MM_RDRAM_DRAM: usize = 0x00000000; +pub const MM_RDRAM_REGS: usize = 0x03f00000; +pub const MM_RSP_MEM: usize = 0x04000000; +pub const MM_RSP_REGS: usize = 0x04040000; +pub const MM_RSP_REGS_PC: usize = 0x04080000; +pub const MM_DPC_REGS: usize = 0x04100000; +pub const MM_DPS_REGS: usize = 0x04200000; +pub const MM_MI_REGS: usize = 0x04300000; +pub const MM_VI_REGS: usize = 0x04400000; +pub const MM_AI_REGS: usize = 0x04500000; +pub const MM_PI_REGS: usize = 0x04600000; +pub const MM_RI_REGS: usize = 0x04700000; +pub const MM_SI_REGS: usize = 0x04800000; +//const MM_DOM2_ADDR1: usize = 0x05000000; +pub const MM_DOM2_ADDR2: usize = 0x08000000; +pub const MM_CART_ROM: usize = 0x10000000; +pub const MM_PIF_MEM: usize = 0x1fc00000; +pub const MM_DOM1_ADDR3: usize = 0x1fd00000; +pub const MM_IS_VIEWER: usize = 0x13ff0000; + +#[derive(PartialEq)] +pub enum AccessType { + Write, + Read, + Lookup, +} + +#[derive(Copy, Clone)] +pub enum AccessSize { + // None = 0, + Word = 4, + Dword = 8, + Dcache = 16, + Icache = 32, +} + +pub struct Memory { + pub fast_read: [fn(&mut device::Device, u64, AccessSize) -> u32; 0x2000], // fast_read is used for lookups that try to detect idle loops + pub memory_map_read: [fn(&mut device::Device, u64, AccessSize) -> u32; 0x2000], + pub memory_map_write: [fn(&mut device::Device, u64, u32, u32); 0x2000], + pub icache: [device::cache::ICache; 512], + pub dcache: [device::cache::DCache; 512], +} + +pub fn masked_write_32(dst: &mut u32, value: u32, mask: u32) { + *dst = (*dst & !mask) | (value & mask); +} + +pub fn masked_write_64(dst: &mut u64, value: u64, mask: u64) { + *dst = (*dst & !mask) | (value & mask); +} + +pub fn translate_address( + device: &mut device::Device, + address: u64, + access_type: AccessType, +) -> (u64, bool, bool) { + let mut cached = false; + if (address & 0xc0000000) != 0x80000000 { + return device::tlb::get_physical_address(device, address, access_type); + } else if address & 0x20000000 == 0 { + cached = true; + } + return (address & 0x1FFFFFFF, cached, false); +} + +pub fn data_read( + device: &mut device::Device, + phys_address: u64, + access_size: AccessSize, + cached: bool, +) -> u32 { + if cached { + device::cache::dcache_read(device, phys_address) + } else { + return device.memory.memory_map_read[(phys_address >> 16) as usize]( + device, + phys_address, + access_size, + ); + } +} + +pub fn data_write( + device: &mut device::Device, + phys_address: u64, + value: u32, + mask: u32, + cached: bool, +) { + if cached { + device::cache::dcache_write(device, phys_address, value, mask) + } else { + device.memory.memory_map_write[(phys_address >> 16) as usize]( + device, + phys_address, + value, + mask, + ) + } +} + +pub fn init(device: &mut device::Device) { + for i in 0..0x2000 { + if i >= MM_RDRAM_DRAM >> 16 && i <= (MM_RDRAM_DRAM + 0x03EFFFFF) >> 16 { + device.memory.fast_read[i] = device::rdram::read_mem_fast; + device.memory.memory_map_read[i] = device::rdram::read_mem; + device.memory.memory_map_write[i] = device::rdram::write_mem; + } else if i >= MM_RDRAM_REGS >> 16 && i <= (MM_RDRAM_REGS + 0xFFFFF) >> 16 { + device.memory.memory_map_read[i] = device::rdram::read_regs; + device.memory.memory_map_write[i] = device::rdram::write_regs; + } else if i >= MM_RSP_MEM >> 16 && i <= (MM_RSP_MEM + 0x3FFFF) >> 16 { + device.memory.fast_read[i] = device::rsp_interface::read_mem_fast; + device.memory.memory_map_read[i] = device::rsp_interface::read_mem; + device.memory.memory_map_write[i] = device::rsp_interface::write_mem; + } else if i >= MM_RSP_REGS >> 16 && i <= (MM_RSP_REGS + 0xFFFF) >> 16 { + device.memory.memory_map_read[i] = device::rsp_interface::read_regs; + device.memory.memory_map_write[i] = device::rsp_interface::write_regs; + } else if i >= MM_RSP_REGS_PC >> 16 && i <= (MM_RSP_REGS_PC + 0xFFFF) >> 16 { + device.memory.memory_map_read[i] = device::rsp_interface::read_regs2; + device.memory.memory_map_write[i] = device::rsp_interface::write_regs2; + } else if i >= MM_DPC_REGS >> 16 && i <= (MM_DPC_REGS + 0xFFFF) >> 16 { + device.memory.memory_map_read[i] = device::rdp::read_regs_dpc; + device.memory.memory_map_write[i] = device::rdp::write_regs_dpc; + } else if i >= MM_DPS_REGS >> 16 && i <= (MM_DPS_REGS + 0xFFFF) >> 16 { + device.memory.memory_map_read[i] = device::rdp::read_regs_dps; + device.memory.memory_map_write[i] = device::rdp::write_regs_dps; + } else if i >= MM_MI_REGS >> 16 && i <= (MM_MI_REGS + 0xFFFF) >> 16 { + device.memory.memory_map_read[i] = device::mi::read_regs; + device.memory.memory_map_write[i] = device::mi::write_regs; + } else if i >= MM_VI_REGS >> 16 && i <= (MM_VI_REGS + 0xFFFF) >> 16 { + device.memory.memory_map_read[i] = device::vi::read_regs; + device.memory.memory_map_write[i] = device::vi::write_regs; + } else if i >= MM_AI_REGS >> 16 && i <= (MM_AI_REGS + 0xFFFF) >> 16 { + device.memory.memory_map_read[i] = device::ai::read_regs; + device.memory.memory_map_write[i] = device::ai::write_regs; + } else if i >= MM_PI_REGS >> 16 && i <= (MM_PI_REGS + 0xFFFF) >> 16 { + device.memory.memory_map_read[i] = device::pi::read_regs; + device.memory.memory_map_write[i] = device::pi::write_regs; + } else if i >= MM_RI_REGS >> 16 && i <= (MM_RI_REGS + 0xFFFF) >> 16 { + device.memory.memory_map_read[i] = device::ri::read_regs; + device.memory.memory_map_write[i] = device::ri::write_regs; + } else if i >= MM_SI_REGS >> 16 && i <= (MM_SI_REGS + 0xFFFF) >> 16 { + device.memory.memory_map_read[i] = device::si::read_regs; + device.memory.memory_map_write[i] = device::si::write_regs; + } else if i >= MM_DOM2_ADDR2 >> 16 && i <= (MM_DOM2_ADDR2 + 0x1FFFF) >> 16 { + device.memory.memory_map_read[i] = device::sram::read_mem; + device.memory.memory_map_write[i] = device::sram::write_mem; + } else if i >= MM_CART_ROM >> 16 && i <= (MM_CART_ROM + device.cart.rom.len() - 1) >> 16 { + device.memory.fast_read[i] = device::cart_rom::read_mem_fast; + device.memory.memory_map_read[i] = device::cart_rom::read_mem; + device.memory.memory_map_write[i] = device::cart_rom::write_mem; + } else if i >= MM_IS_VIEWER >> 16 && i <= (MM_IS_VIEWER + 0xFFFF) >> 16 { + device.memory.memory_map_read[i] = device::is_viewer::read_mem; + device.memory.memory_map_write[i] = device::is_viewer::write_mem; + } else if i >= MM_PIF_MEM >> 16 && i <= (MM_PIF_MEM + 0xFFFF) >> 16 { + device.memory.memory_map_read[i] = device::pif::read_mem; + device.memory.memory_map_write[i] = device::pif::write_mem; + } + } + device::cache::init(device) +} diff --git a/src/device/mi.rs b/src/device/mi.rs new file mode 100644 index 0000000..6c34397 --- /dev/null +++ b/src/device/mi.rs @@ -0,0 +1,168 @@ +use crate::device; + +pub const MI_INIT_MODE_REG: u32 = 0; +pub const MI_VERSION_REG: u32 = 1; +pub const MI_INTR_REG: u32 = 2; +pub const MI_INTR_MASK_REG: u32 = 3; +pub const MI_REGS_COUNT: u32 = 4; + +/* read */ +pub const MI_INTR_SP: u32 = 1 << 0; +pub const MI_INTR_SI: u32 = 1 << 1; +pub const MI_INTR_AI: u32 = 1 << 2; +pub const MI_INTR_VI: u32 = 1 << 3; +pub const MI_INTR_PI: u32 = 1 << 4; +pub const MI_INTR_DP: u32 = 1 << 5; + +/* write */ +pub const MI_CLR_SP: u32 = 1 << 0; +pub const MI_SET_SP: u32 = 1 << 1; +pub const MI_CLR_SI: u32 = 1 << 2; +pub const MI_SET_SI: u32 = 1 << 3; +pub const MI_CLR_AI: u32 = 1 << 4; +pub const MI_SET_AI: u32 = 1 << 5; +pub const MI_CLR_VI: u32 = 1 << 6; +pub const MI_SET_VI: u32 = 1 << 7; +pub const MI_CLR_PI: u32 = 1 << 8; +pub const MI_SET_PI: u32 = 1 << 9; +pub const MI_CLR_DP: u32 = 1 << 10; +pub const MI_SET_DP: u32 = 1 << 11; + +/* mode read */ +pub const MI_INIT_MODE: u32 = 1 << 7; +pub const MI_EBUS_MODE: u32 = 1 << 8; +pub const MI_RDRAM_MODE: u32 = 1 << 9; + +/* mode write */ +pub const MI_CLR_INIT: u32 = 1 << 7; +pub const MI_SET_INIT: u32 = 1 << 8; +pub const MI_CLR_EBUS: u32 = 1 << 9; +pub const MI_SET_EBUS: u32 = 1 << 10; +pub const MI_CLR_DP_INTR: u32 = 1 << 11; +pub const MI_CLR_RDRAM: u32 = 1 << 12; +pub const MI_SET_RDRAM: u32 = 1 << 13; + +pub const MI_INIT_LENGTH_MASK: u32 = 0b1111111; + +pub struct Mi { + pub regs: [u32; MI_REGS_COUNT as usize], +} + +pub fn read_regs( + device: &mut device::Device, + address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + return device.mi.regs[((address & 0xFFFF) >> 2) as usize]; +} + +pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { + let reg = (address & 0xFFFF) >> 2; + match reg as u32 { + MI_INIT_MODE_REG => update_init_mode(device, value), + MI_INTR_MASK_REG => update_intr_mask(device, value), + _ => device::memory::masked_write_32(&mut device.mi.regs[reg as usize], value, mask), + } + + if device.mi.regs[MI_INTR_REG as usize] & device.mi.regs[MI_INTR_MASK_REG as usize] != 0 { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= + !device::cop0::COP0_CAUSE_EXCCODE_MASK; + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] |= device::cop0::COP0_CAUSE_IP2; + } else { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= + !device::cop0::COP0_CAUSE_IP2; + } + device::exceptions::check_pending_interrupts(device) +} + +pub fn update_init_mode(device: &mut device::Device, w: u32) { + device.mi.regs[MI_INIT_MODE_REG as usize] &= !MI_INIT_LENGTH_MASK; + device.mi.regs[MI_INIT_MODE_REG as usize] |= w & MI_INIT_LENGTH_MASK; + + if w & MI_CLR_INIT != 0 { + device.mi.regs[MI_INIT_MODE_REG as usize] &= !MI_INIT_MODE + } + if w & MI_SET_INIT != 0 { + device.mi.regs[MI_INIT_MODE_REG as usize] |= MI_INIT_MODE + } + if w & MI_CLR_EBUS != 0 { + device.mi.regs[MI_INIT_MODE_REG as usize] &= !MI_EBUS_MODE + } + if w & MI_SET_EBUS != 0 { + device.mi.regs[MI_INIT_MODE_REG as usize] |= MI_EBUS_MODE + } + if w & MI_CLR_RDRAM != 0 { + device.mi.regs[MI_INIT_MODE_REG as usize] &= !MI_RDRAM_MODE + } + if w & MI_SET_RDRAM != 0 { + device.mi.regs[MI_INIT_MODE_REG as usize] |= MI_RDRAM_MODE + } + + if w & MI_CLR_DP_INTR != 0 { + clear_rcp_interrupt(device, MI_INTR_DP) + } +} + +pub fn update_intr_mask(device: &mut device::Device, w: u32) { + if w & MI_CLR_SP != 0 { + device.mi.regs[MI_INTR_MASK_REG as usize] &= !MI_INTR_SP + } + if w & MI_SET_SP != 0 { + device.mi.regs[MI_INTR_MASK_REG as usize] |= MI_INTR_SP + } + if w & MI_CLR_SI != 0 { + device.mi.regs[MI_INTR_MASK_REG as usize] &= !MI_INTR_SI + } + if w & MI_SET_SI != 0 { + device.mi.regs[MI_INTR_MASK_REG as usize] |= MI_INTR_SI + } + if w & MI_CLR_AI != 0 { + device.mi.regs[MI_INTR_MASK_REG as usize] &= !MI_INTR_AI + } + if w & MI_SET_AI != 0 { + device.mi.regs[MI_INTR_MASK_REG as usize] |= MI_INTR_AI + } + if w & MI_CLR_VI != 0 { + device.mi.regs[MI_INTR_MASK_REG as usize] &= !MI_INTR_VI + } + if w & MI_SET_VI != 0 { + device.mi.regs[MI_INTR_MASK_REG as usize] |= MI_INTR_VI + } + if w & MI_CLR_PI != 0 { + device.mi.regs[MI_INTR_MASK_REG as usize] &= !MI_INTR_PI + } + if w & MI_SET_PI != 0 { + device.mi.regs[MI_INTR_MASK_REG as usize] |= MI_INTR_PI + } + if w & MI_CLR_DP != 0 { + device.mi.regs[MI_INTR_MASK_REG as usize] &= !MI_INTR_DP + } + if w & MI_SET_DP != 0 { + device.mi.regs[MI_INTR_MASK_REG as usize] |= MI_INTR_DP + } +} + +pub fn clear_rcp_interrupt(device: &mut device::Device, interrupt: u32) { + device.mi.regs[MI_INTR_REG as usize] &= !interrupt; + + if device.mi.regs[MI_INTR_REG as usize] & device.mi.regs[MI_INTR_MASK_REG as usize] == 0 { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= + !device::cop0::COP0_CAUSE_IP2; + } + device::exceptions::check_pending_interrupts(device) +} + +pub fn set_rcp_interrupt(device: &mut device::Device, interrupt: u32) { + device.mi.regs[MI_INTR_REG as usize] |= interrupt; + + if device.mi.regs[MI_INTR_REG as usize] & device.mi.regs[MI_INTR_MASK_REG as usize] != 0 { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= + !device::cop0::COP0_CAUSE_EXCCODE_MASK; + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] |= device::cop0::COP0_CAUSE_IP2; + } + device::exceptions::check_pending_interrupts(device) +} + +pub fn init(device: &mut device::Device) { + device.mi.regs[MI_VERSION_REG as usize] = 0x02020102 +} diff --git a/src/device/pi.rs b/src/device/pi.rs new file mode 100644 index 0000000..7406169 --- /dev/null +++ b/src/device/pi.rs @@ -0,0 +1,164 @@ +use crate::device; + +pub const PI_DRAM_ADDR_REG: u32 = 0; +pub const PI_CART_ADDR_REG: u32 = 1; +pub const PI_RD_LEN_REG: u32 = 2; +pub const PI_WR_LEN_REG: u32 = 3; +pub const PI_STATUS_REG: u32 = 4; +pub const PI_BSD_DOM1_LAT_REG: u32 = 5; +pub const PI_BSD_DOM1_PWD_REG: u32 = 6; +pub const PI_BSD_DOM1_PGS_REG: u32 = 7; +pub const PI_BSD_DOM1_RLS_REG: u32 = 8; +pub const PI_BSD_DOM2_LAT_REG: u32 = 9; +pub const PI_BSD_DOM2_PWD_REG: u32 = 10; +pub const PI_BSD_DOM2_PGS_REG: u32 = 11; +pub const PI_BSD_DOM2_RLS_REG: u32 = 12; +pub const PI_REGS_COUNT: u32 = 13; + +/* PI_STATUS - read */ +pub const PI_STATUS_DMA_BUSY: u32 = 1 << 0; +pub const PI_STATUS_IO_BUSY: u32 = 1 << 1; +//pub const PI_STATUS_ERROR: u32 = 1 << 2; +pub const PI_STATUS_INTERRUPT: u32 = 1 << 3; + +/* PI_STATUS - write */ +pub const PI_STATUS_RESET: u32 = 1 << 0; +pub const PI_STATUS_CLR_INTR: u32 = 1 << 1; + +pub struct Pi { + pub regs: [u32; PI_REGS_COUNT as usize], +} + +pub struct PiHandler { + read: fn(&mut device::Device, u32, u32, u32) -> u64, + write: fn(&mut device::Device, u32, u32, u32) -> u64, +} + +pub fn read_regs( + device: &mut device::Device, + address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + return device.pi.regs[((address & 0xFFFF) >> 2) as usize]; +} + +pub fn dma_read(device: &mut device::Device) { + let handler = get_handler(device.pi.regs[PI_CART_ADDR_REG as usize]); + let cycles = (handler.read)( + device, + device.pi.regs[PI_CART_ADDR_REG as usize], + device.pi.regs[PI_DRAM_ADDR_REG as usize], + device.pi.regs[PI_RD_LEN_REG as usize] + 1, + ); + + device::events::create_event( + device, + device::events::EventType::PI, + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + cycles, + dma_event, + ); + + device.pi.regs[PI_STATUS_REG as usize] |= PI_STATUS_DMA_BUSY +} + +pub fn dma_write(device: &mut device::Device) { + let handler = get_handler(device.pi.regs[PI_CART_ADDR_REG as usize]); + let cycles = (handler.write)( + device, + device.pi.regs[PI_CART_ADDR_REG as usize], + device.pi.regs[PI_DRAM_ADDR_REG as usize], + device.pi.regs[PI_WR_LEN_REG as usize] + 1, + ); + + device::events::create_event( + device, + device::events::EventType::PI, + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + cycles, + dma_event, + ); + + device.pi.regs[PI_STATUS_REG as usize] |= PI_STATUS_DMA_BUSY +} + +pub fn get_handler(address: u32) -> PiHandler { + let mut handler = PiHandler { + read: device::cart_rom::dma_read, + write: device::cart_rom::dma_write, + }; + if address >= device::memory::MM_CART_ROM as u32 { + if address >= device::memory::MM_DOM1_ADDR3 as u32 { + panic!("unimplemented handler") + //RW(cart, cart_dom3); + } else { + handler.read = device::cart_rom::dma_read; + handler.write = device::cart_rom::dma_write; + } + } else if address >= device::memory::MM_DOM2_ADDR2 as u32 { + panic!("sram handler") + //RW(cart, cart_dom2); + } else { + panic!("unknown pi handler") + } + return handler; +} + +pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { + let reg = (address & 0xFFFF) >> 2; + match reg as u32 { + PI_RD_LEN_REG => { + device::memory::masked_write_32(&mut device.pi.regs[reg as usize], value, mask); + device::pi::dma_read(device) + } + PI_WR_LEN_REG => { + device::memory::masked_write_32(&mut device.pi.regs[reg as usize], value, mask); + device::pi::dma_write(device) + } + PI_STATUS_REG => { + if value & mask & PI_STATUS_CLR_INTR != 0 { + device.pi.regs[reg as usize] &= !PI_STATUS_INTERRUPT; + device::mi::clear_rcp_interrupt(device, device::mi::MI_INTR_PI); + } + if value & mask & PI_STATUS_RESET != 0 { + device.pi.regs[PI_STATUS_REG as usize] = 0 + } + } + PI_BSD_DOM1_LAT_REG | PI_BSD_DOM1_PWD_REG | PI_BSD_DOM1_PGS_REG | PI_BSD_DOM1_RLS_REG + | PI_BSD_DOM2_LAT_REG | PI_BSD_DOM2_PWD_REG | PI_BSD_DOM2_PGS_REG | PI_BSD_DOM2_RLS_REG => { + device::memory::masked_write_32(&mut device.pi.regs[reg as usize], value & 0xFF, mask) + } + _ => device::memory::masked_write_32(&mut device.pi.regs[reg as usize], value, mask), + } +} + +pub fn calculate_cycles(device: &mut device::Device, domain: i32, length: u32) -> u64 { + let mut cycles: f64 = 0.0; + let (page_size, latency, pulse_width, release, pages); + let page_size_base: f64 = 2.0; + + if domain == 1 { + latency = (device.pi.regs[PI_BSD_DOM1_LAT_REG as usize] + 1) as f64; + pulse_width = (device.pi.regs[PI_BSD_DOM1_PWD_REG as usize] + 1) as f64; + release = (device.pi.regs[PI_BSD_DOM1_RLS_REG as usize] + 1) as f64; + page_size = page_size_base.powf((device.pi.regs[PI_BSD_DOM1_PGS_REG as usize] + 2) as f64); + } else if domain == 2 { + latency = (device.pi.regs[PI_BSD_DOM2_LAT_REG as usize] + 1) as f64; + pulse_width = (device.pi.regs[PI_BSD_DOM2_PWD_REG as usize] + 1) as f64; + release = (device.pi.regs[PI_BSD_DOM2_RLS_REG as usize] + 1) as f64; + page_size = page_size_base.powf((device.pi.regs[PI_BSD_DOM2_PGS_REG as usize] + 2) as f64); + } else { + panic!("unknown pi dma") + } + pages = (length as f64 / page_size).ceil(); + + cycles += (14.0 + latency) * pages; + cycles += (pulse_width + release) * (length as f64 / 2.0); + cycles += 5.0 * pages; + return (cycles * 1.5) as u64; // Converting RCP clock speed to CPU clock speed +} + +pub fn dma_event(device: &mut device::Device) { + device.pi.regs[PI_STATUS_REG as usize] &= !(PI_STATUS_DMA_BUSY | PI_STATUS_IO_BUSY); + device.pi.regs[PI_STATUS_REG as usize] |= PI_STATUS_INTERRUPT; + + device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_PI) +} diff --git a/src/device/pif.rs b/src/device/pif.rs new file mode 100644 index 0000000..ccdd985 --- /dev/null +++ b/src/device/pif.rs @@ -0,0 +1,222 @@ +mod rom; +use crate::device; + +pub struct Pif { + pub rom: [u8; 1984], + pub ram: [u8; 64], + pub channels: [PifChannel; 5], +} + +#[derive(Copy, Clone)] +pub struct PifChannel { + pub tx: Option, + pub tx_buf: Option, + pub rx: Option, + pub rx_buf: Option, + pub process: Option, +} + +pub const PIF_RAM_SIZE: usize = 64; +const PIF_CHANNELS_COUNT: usize = 5; +const PIF_RAM_OFFSET: usize = 0x7C0; +const PIF_MASK: usize = 0xFFFF; + +pub fn read_mem( + device: &mut device::Device, + address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + device::cop0::add_cycles(device, 3000); //based on https://github.com/rasky/n64-systembench + + let value; + let mut masked_address = address as usize & PIF_MASK; + if masked_address < PIF_RAM_OFFSET { + value = u32::from_be_bytes( + device.pif.rom[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ); + } else { + masked_address -= PIF_RAM_OFFSET; + value = u32::from_be_bytes( + device.pif.ram[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ); + } + return value; +} + +pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { + let mut masked_address = address as usize & PIF_MASK; + if masked_address < PIF_RAM_OFFSET { + panic! {"write to pif rom"} + } + masked_address -= PIF_RAM_OFFSET; + let mut data = u32::from_be_bytes( + device.pif.ram[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ); + device::memory::masked_write_32(&mut data, value, mask); + device.pif.ram[masked_address..masked_address + 4].copy_from_slice(&data.to_be_bytes()); + + device.si.dma_dir = device::si::DmaDir::Write; + device::events::create_event( + device, + device::events::EventType::SI, + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + 3200, + device::si::dma_event, + ); //based on https://github.com/rasky/n64-systembench + device.si.regs[device::si::SI_STATUS_REG as usize] |= + device::si::SI_STATUS_DMA_BUSY | device::si::SI_STATUS_IO_BUSY +} + +pub fn process_channel(device: &mut device::Device, channel: usize) -> usize { + /* don't process channel if it has been disabled */ + if device.pif.channels[channel].tx == None { + return 0; + } + + /* reset Tx/Rx just in case */ + device.pif.ram[device.pif.channels[channel].tx.unwrap()] &= 0x3f; + device.pif.ram[device.pif.channels[channel].rx.unwrap()] &= 0x3f; + + /* set NoResponse if no device is connected */ + if device.pif.channels[channel].process == None { + device.pif.ram[device.pif.channels[channel].rx.unwrap()] |= 0x80; + return 0; + } + + /* do device processing */ + let process_handler = device.pif.channels[channel].process.unwrap(); + process_handler(device, channel); + return 1; +} + +pub fn update_pif_ram(device: &mut device::Device) -> u64 { + let mut active_channels = 0; + for k in 0..PIF_CHANNELS_COUNT { + active_channels += process_channel(device, k) + } + return (24000 + (active_channels * 28000)) as u64; +} + +pub fn disable_pif_channel(channel: &mut PifChannel) { + channel.tx = None; + channel.rx = None; + channel.tx_buf = None; + channel.rx_buf = None; +} + +pub fn setup_pif_channel(device: &mut device::Device, channel: usize, buf: usize) -> usize { + let tx = device.pif.ram[buf] & 0x3f; + let rx = device.pif.ram[buf + 1] & 0x3f; + + /* XXX: check out of bounds accesses */ + + device.pif.channels[channel].tx = Some(buf); + device.pif.channels[channel].rx = Some(buf + 1); + device.pif.channels[channel].tx_buf = Some(buf + 2); + device.pif.channels[channel].rx_buf = Some(buf + 2 + tx as usize); + + return (2 + tx + rx) as usize; +} + +pub fn setup_channels_format(device: &mut device::Device) { + let mut i: usize = 0; + let mut k: usize = 0; + while i < PIF_RAM_SIZE && k < PIF_CHANNELS_COUNT { + match device.pif.ram[i] { + 0x00 => { + /* skip channel */ + disable_pif_channel(&mut device.pif.channels[k]); + k += 1; + i += 1; + } + + 0xff => { + /* dummy data */ + i += 1; + } + + 0xfe => { + /* end of channel setup - remaining channels are disabled */ + while k < PIF_CHANNELS_COUNT { + disable_pif_channel(&mut device.pif.channels[k]); + k += 1; + } + } + + 0xfd => { + /* channel reset - send reset command and discard the results */ + { + panic!("channel reset") + } + } + + _ => { + /* setup channel */ + + /* HACK?: some games sends bogus PIF commands while accessing controller paks + * Yoshi Story, Top Gear Rally 2, Indiana Jones, ... + * When encountering such commands, we skip this bogus byte. + */ + if (i + 1 < PIF_RAM_SIZE) && (device.pif.ram[i + 1] == 0xfe) { + i += 1; + continue; + } + + if (i + 2) >= PIF_RAM_SIZE { + i = PIF_RAM_SIZE; + continue; + } + + i += setup_pif_channel(device, k, i); + k += 1; + } + } + } +} + +pub fn process_ram(device: &mut device::Device) { + let mut clrmask = 0x00; + let command = device.pif.ram[0x3F]; + if command & 0x01 != 0 { + // Configure joybus protocol + setup_channels_format(device); + clrmask |= 0x01 + } + if command & 0x02 != 0 { + // Challenge / response for protection + panic!("pif command 0x02"); + } + if command & 0x08 != 0 { + // Terminate boot process + clrmask |= 0x08; + } + if command & 0x10 != 0 { + // ROM lockout + for i in device.pif.rom.iter_mut() { + *i = 0 + } + } + if command & 0x20 != 0 { + // Acquire checksum + device.pif.ram[0x3F] = 0x80 + } + device.pif.ram[0x3F] &= !clrmask +} + +pub fn init(device: &mut device::Device, pal: bool) { + if pal { + device.pif.rom = rom::PAL_PIF_ROM; + } else { + device.pif.rom = rom::NTSC_PIF_ROM; + } + device.pif.ram[0x26] = device.cart.cic_seed; + device.pif.ram[0x27] = device.cart.cic_seed; + + device.pif.channels[0].process = Some(device::controller::process); + device.pif.channels[4].process = Some(device::cart::process) +} diff --git a/src/device/pif/rom.rs b/src/device/pif/rom.rs new file mode 100644 index 0000000..f4b519b --- /dev/null +++ b/src/device/pif/rom.rs @@ -0,0 +1,177 @@ +pub const NTSC_PIF_ROM: [u8; 1984] = [ + 60, 9, 52, 0, 64, 137, 96, 0, 60, 9, 0, 6, 53, 41, 228, 99, 64, 137, 128, 0, 60, 8, 164, 4, + 141, 8, 0, 16, 49, 8, 0, 1, 81, 0, 255, 253, 60, 8, 164, 4, 36, 8, 0, 10, 60, 1, 164, 4, 172, + 40, 0, 16, 60, 8, 164, 4, 141, 8, 0, 24, 49, 8, 0, 1, 85, 0, 255, 253, 60, 8, 164, 4, 36, 8, 0, + 3, 60, 1, 164, 96, 172, 40, 0, 16, 36, 8, 3, 255, 60, 1, 164, 64, 172, 40, 0, 12, 60, 1, 164, + 64, 172, 32, 0, 36, 60, 1, 164, 64, 172, 32, 0, 16, 60, 1, 164, 80, 172, 32, 0, 0, 60, 1, 164, + 80, 172, 32, 0, 4, 60, 8, 164, 4, 141, 8, 0, 16, 49, 8, 0, 4, 85, 0, 255, 253, 60, 8, 164, 4, + 60, 11, 164, 0, 60, 12, 191, 192, 60, 13, 191, 192, 37, 107, 16, 0, 37, 140, 0, 212, 37, 173, + 7, 28, 141, 137, 0, 0, 37, 140, 0, 4, 37, 107, 0, 4, 21, 141, 255, 252, 173, 105, 255, 252, 60, + 11, 164, 0, 60, 29, 164, 0, 37, 107, 16, 0, 1, 96, 0, 8, 55, 189, 31, 240, 60, 13, 191, 192, + 141, 168, 7, 252, 37, 173, 7, 192, 49, 8, 0, 128, 85, 0, 255, 252, 60, 13, 191, 192, 141, 168, + 0, 36, 60, 11, 176, 0, 0, 8, 156, 194, 50, 115, 0, 1, 0, 8, 188, 130, 18, 96, 0, 2, 50, 247, 0, + 1, 60, 11, 166, 0, 0, 8, 178, 2, 49, 10, 0, 255, 0, 8, 172, 66, 141, 168, 0, 60, 36, 9, 0, 16, + 50, 214, 0, 255, 50, 181, 0, 1, 36, 20, 0, 1, 1, 9, 64, 37, 60, 9, 164, 128, 141, 41, 0, 24, + 49, 41, 0, 2, 85, 32, 255, 253, 60, 9, 164, 128, 173, 168, 0, 60, 60, 12, 164, 96, 36, 8, 0, + 255, 173, 136, 0, 20, 173, 136, 0, 24, 36, 8, 0, 15, 173, 136, 0, 28, 36, 8, 0, 3, 173, 136, 0, + 32, 141, 105, 0, 0, 60, 13, 164, 16, 37, 140, 0, 0, 49, 40, 0, 255, 173, 136, 0, 20, 0, 9, 66, + 2, 173, 136, 0, 24, 0, 9, 68, 2, 173, 136, 0, 28, 0, 9, 69, 2, 173, 136, 0, 32, 141, 175, 0, + 12, 32, 8, 15, 192, 33, 107, 0, 64, 49, 239, 0, 1, 17, 224, 0, 7, 37, 173, 0, 12, 60, 13, 164, + 16, 141, 175, 0, 12, 37, 173, 0, 12, 49, 239, 0, 32, 85, 224, 255, 252, 60, 13, 164, 16, 60, + 13, 164, 0, 37, 173, 0, 0, 0, 8, 48, 37, 33, 173, 0, 64, 141, 105, 0, 0, 33, 8, 255, 252, 33, + 107, 0, 4, 33, 173, 0, 4, 21, 0, 255, 251, 173, 169, 255, 252, 60, 8, 108, 7, 53, 8, 137, 101, + 1, 72, 0, 25, 0, 0, 32, 18, 36, 132, 0, 1, 60, 5, 164, 0, 36, 165, 0, 64, 4, 17, 0, 19, 0, 0, + 0, 0, 39, 189, 255, 208, 20, 160, 0, 2, 175, 191, 0, 28, 0, 192, 40, 37, 39, 166, 0, 44, 4, 17, + 0, 255, 39, 167, 0, 40, 143, 164, 0, 40, 143, 174, 0, 44, 1, 196, 16, 35, 20, 64, 0, 2, 0, 64, + 24, 37, 0, 128, 24, 37, 143, 191, 0, 28, 39, 189, 0, 48, 0, 96, 16, 37, 3, 224, 0, 8, 0, 0, 0, + 0, 39, 189, 255, 32, 175, 191, 0, 60, 175, 183, 0, 52, 175, 182, 0, 48, 175, 181, 0, 44, 175, + 180, 0, 40, 175, 179, 0, 36, 175, 178, 0, 32, 175, 177, 0, 28, 175, 176, 0, 24, 140, 174, 0, 0, + 0, 0, 24, 37, 39, 163, 0, 180, 39, 162, 0, 116, 1, 196, 128, 38, 36, 66, 0, 16, 172, 80, 255, + 244, 172, 80, 255, 248, 172, 80, 255, 252, 20, 67, 255, 251, 172, 80, 255, 240, 140, 176, 0, 0, + 0, 0, 136, 37, 0, 160, 176, 37, 36, 23, 0, 32, 2, 0, 160, 37, 142, 208, 0, 0, 38, 49, 0, 1, 36, + 15, 3, 239, 142, 211, 0, 4, 38, 214, 0, 4, 1, 241, 32, 35, 2, 32, 48, 37, 4, 17, 255, 204, 2, + 0, 40, 37, 143, 163, 0, 116, 143, 164, 0, 120, 2, 0, 40, 37, 0, 67, 24, 33, 175, 163, 0, 116, + 4, 17, 255, 197, 2, 32, 48, 37, 143, 184, 0, 124, 60, 5, 108, 7, 175, 162, 0, 120, 3, 16, 200, + 38, 175, 185, 0, 124, 52, 165, 137, 101, 38, 4, 0, 5, 4, 17, 255, 188, 2, 32, 48, 37, 143, 168, + 0, 128, 2, 144, 8, 43, 0, 72, 72, 33, 16, 32, 0, 7, 175, 169, 0, 128, 143, 164, 0, 152, 2, 0, + 40, 37, 4, 17, 255, 179, 2, 32, 48, 37, 16, 0, 0, 4, 175, 162, 0, 152, 143, 170, 0, 152, 1, 80, + 88, 33, 175, 171, 0, 152, 50, 130, 0, 31, 143, 174, 0, 132, 2, 226, 24, 35, 0, 112, 104, 4, 0, + 80, 96, 6, 1, 141, 168, 37, 0, 112, 200, 6, 0, 80, 192, 4, 1, 213, 120, 33, 175, 175, 0, 132, + 3, 25, 40, 37, 143, 164, 0, 144, 4, 17, 255, 160, 2, 32, 48, 37, 143, 163, 0, 140, 175, 162, 0, + 144, 2, 3, 8, 43, 80, 32, 0, 8, 143, 171, 0, 132, 143, 168, 0, 128, 2, 17, 80, 33, 1, 3, 72, + 33, 1, 42, 24, 38, 16, 0, 0, 5, 175, 163, 0, 140, 143, 171, 0, 132, 1, 112, 96, 33, 1, 131, 24, + 38, 175, 163, 0, 140, 0, 20, 22, 194, 143, 175, 0, 136, 2, 226, 24, 35, 0, 112, 112, 6, 0, 80, + 104, 4, 1, 174, 144, 37, 0, 112, 64, 4, 0, 80, 200, 6, 1, 242, 192, 33, 175, 184, 0, 136, 3, + 40, 40, 37, 143, 164, 0, 148, 4, 17, 255, 131, 2, 32, 48, 37, 36, 1, 3, 240, 18, 33, 0, 57, + 175, 162, 0, 148, 143, 164, 0, 176, 2, 64, 40, 37, 4, 17, 255, 124, 2, 32, 48, 37, 0, 16, 30, + 194, 2, 227, 80, 35, 1, 83, 88, 6, 0, 115, 72, 4, 1, 43, 40, 37, 0, 64, 32, 37, 4, 17, 255, + 116, 2, 32, 48, 37, 175, 162, 0, 176, 143, 164, 0, 172, 2, 160, 40, 37, 4, 17, 255, 111, 2, 32, + 48, 37, 50, 18, 0, 31, 2, 242, 160, 35, 2, 147, 104, 4, 2, 83, 96, 6, 1, 141, 40, 37, 0, 64, + 32, 37, 4, 17, 255, 103, 2, 32, 48, 37, 143, 169, 0, 168, 50, 99, 0, 31, 2, 80, 112, 6, 2, 144, + 120, 4, 2, 227, 200, 35, 1, 207, 56, 37, 3, 51, 64, 4, 0, 115, 192, 6, 143, 173, 0, 156, 3, 8, + 80, 37, 1, 39, 88, 33, 1, 106, 96, 33, 175, 162, 0, 172, 175, 172, 0, 168, 2, 96, 40, 37, 2, + 32, 48, 37, 4, 17, 255, 85, 1, 176, 32, 33, 143, 174, 0, 160, 175, 162, 0, 156, 2, 96, 40, 37, + 2, 32, 48, 37, 4, 17, 255, 79, 1, 208, 32, 38, 143, 175, 0, 148, 143, 184, 0, 164, 175, 162, 0, + 160, 1, 240, 200, 38, 3, 56, 64, 33, 16, 0, 255, 115, 175, 168, 0, 164, 143, 163, 0, 116, 0, 0, + 136, 37, 39, 179, 0, 116, 36, 21, 0, 16, 36, 20, 0, 1, 175, 163, 0, 100, 175, 163, 0, 104, 175, + 163, 0, 108, 175, 163, 0, 112, 142, 112, 0, 0, 143, 173, 0, 100, 50, 2, 0, 31, 2, 226, 88, 35, + 1, 112, 80, 4, 0, 80, 72, 6, 1, 42, 96, 37, 1, 172, 112, 33, 2, 14, 8, 43, 16, 32, 0, 5, 175, + 174, 0, 100, 143, 175, 0, 104, 1, 240, 200, 33, 16, 0, 0, 6, 175, 185, 0, 104, 143, 164, 0, + 104, 2, 0, 40, 37, 4, 17, 255, 44, 2, 32, 48, 37, 175, 162, 0, 104, 50, 24, 0, 2, 0, 24, 64, + 66, 50, 18, 0, 1, 85, 18, 0, 6, 143, 164, 0, 108, 143, 171, 0, 108, 1, 112, 72, 33, 16, 0, 0, + 6, 175, 169, 0, 108, 143, 164, 0, 108, 2, 0, 40, 37, 4, 17, 255, 30, 2, 32, 48, 37, 175, 162, + 0, 108, 86, 146, 0, 6, 143, 164, 0, 112, 143, 170, 0, 112, 1, 80, 104, 38, 16, 0, 0, 6, 175, + 173, 0, 112, 143, 164, 0, 112, 2, 0, 40, 37, 4, 17, 255, 19, 2, 32, 48, 37, 175, 162, 0, 112, + 38, 49, 0, 1, 22, 53, 255, 209, 38, 115, 0, 4, 143, 164, 0, 100, 143, 165, 0, 104, 4, 17, 255, + 11, 2, 32, 48, 37, 143, 172, 0, 112, 143, 174, 0, 108, 143, 176, 0, 24, 143, 177, 0, 28, 143, + 178, 0, 32, 143, 179, 0, 36, 143, 180, 0, 40, 143, 181, 0, 44, 143, 182, 0, 48, 143, 183, 0, + 52, 143, 191, 0, 60, 0, 64, 32, 37, 39, 189, 0, 224, 4, 17, 0, 8, 1, 142, 40, 38, 0, 133, 0, + 25, 0, 0, 112, 16, 172, 206, 0, 0, 0, 0, 120, 18, 172, 239, 0, 0, 3, 224, 0, 8, 0, 0, 0, 0, 60, + 11, 191, 192, 141, 104, 7, 240, 60, 10, 255, 255, 48, 132, 255, 255, 1, 10, 64, 36, 0, 136, 32, + 37, 37, 107, 7, 192, 60, 9, 164, 128, 141, 41, 0, 24, 49, 41, 0, 2, 85, 32, 255, 253, 60, 9, + 164, 128, 173, 100, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 9, + 164, 128, 141, 41, 0, 24, 49, 41, 0, 2, 85, 32, 255, 253, 60, 9, 164, 128, 141, 104, 0, 60, 36, + 9, 0, 32, 173, 101, 0, 52, 1, 9, 64, 37, 60, 9, 164, 128, 141, 41, 0, 24, 49, 41, 0, 2, 85, 32, + 255, 253, 60, 9, 164, 128, 173, 104, 0, 60, 32, 9, 0, 16, 33, 41, 255, 255, 85, 32, 255, 255, + 33, 41, 255, 255, 141, 104, 0, 60, 49, 10, 0, 128, 80, 10, 255, 250, 32, 9, 0, 16, 36, 10, 0, + 64, 1, 10, 64, 37, 60, 9, 164, 128, 141, 41, 0, 24, 49, 41, 0, 2, 85, 32, 255, 253, 60, 9, 164, + 128, 173, 104, 0, 60, 60, 11, 164, 0, 37, 107, 0, 0, 33, 107, 0, 64, 1, 96, 0, 8, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +]; + +pub const PAL_PIF_ROM: [u8; 1984] = [ + 60, 9, 52, 0, 64, 137, 96, 0, 60, 9, 0, 6, 53, 41, 228, 99, 64, 137, 128, 0, 60, 8, 164, 4, + 141, 8, 0, 16, 49, 8, 0, 1, 81, 0, 255, 253, 60, 8, 164, 4, 36, 8, 0, 10, 60, 1, 164, 4, 172, + 40, 0, 16, 60, 8, 164, 4, 141, 8, 0, 24, 49, 8, 0, 1, 85, 0, 255, 253, 60, 8, 164, 4, 36, 8, 0, + 3, 60, 1, 164, 96, 172, 40, 0, 16, 36, 8, 3, 255, 60, 1, 164, 64, 172, 40, 0, 12, 60, 1, 164, + 64, 172, 32, 0, 36, 60, 1, 164, 64, 172, 32, 0, 16, 60, 1, 164, 80, 172, 32, 0, 0, 60, 1, 164, + 80, 172, 32, 0, 4, 60, 8, 164, 4, 141, 8, 0, 16, 49, 8, 0, 4, 85, 0, 255, 253, 60, 8, 164, 4, + 60, 11, 164, 0, 60, 12, 191, 192, 60, 13, 191, 192, 37, 107, 16, 0, 37, 140, 0, 212, 37, 173, + 7, 32, 141, 137, 0, 0, 37, 140, 0, 4, 37, 107, 0, 4, 21, 141, 255, 252, 173, 105, 255, 252, 60, + 11, 164, 0, 60, 29, 164, 0, 37, 107, 16, 0, 1, 96, 0, 8, 55, 189, 31, 240, 60, 13, 191, 192, + 141, 168, 7, 252, 37, 173, 7, 192, 49, 8, 0, 128, 85, 0, 255, 252, 60, 13, 191, 192, 141, 168, + 0, 36, 60, 11, 176, 0, 0, 8, 188, 130, 0, 8, 156, 194, 50, 247, 0, 1, 50, 115, 0, 1, 18, 96, 0, + 2, 54, 247, 0, 6, 60, 11, 166, 0, 0, 8, 178, 2, 49, 10, 0, 255, 0, 8, 172, 66, 141, 168, 0, 60, + 36, 9, 0, 16, 50, 214, 0, 255, 50, 181, 0, 1, 36, 20, 0, 0, 1, 9, 64, 37, 60, 9, 164, 128, 141, + 41, 0, 24, 49, 41, 0, 2, 85, 32, 255, 253, 60, 9, 164, 128, 173, 168, 0, 60, 60, 12, 164, 96, + 36, 8, 0, 255, 173, 136, 0, 20, 173, 136, 0, 24, 36, 8, 0, 15, 173, 136, 0, 28, 36, 8, 0, 3, + 173, 136, 0, 32, 141, 105, 0, 0, 60, 13, 164, 16, 37, 140, 0, 0, 49, 40, 0, 255, 173, 136, 0, + 20, 0, 9, 66, 2, 173, 136, 0, 24, 0, 9, 68, 2, 173, 136, 0, 28, 0, 9, 69, 2, 173, 136, 0, 32, + 141, 175, 0, 12, 32, 8, 15, 192, 33, 107, 0, 64, 49, 239, 0, 1, 17, 224, 0, 7, 37, 173, 0, 12, + 60, 13, 164, 16, 141, 175, 0, 12, 37, 173, 0, 12, 49, 239, 0, 32, 85, 224, 255, 252, 60, 13, + 164, 16, 60, 13, 164, 0, 37, 173, 0, 0, 0, 8, 48, 37, 33, 173, 0, 64, 141, 105, 0, 0, 33, 8, + 255, 252, 33, 107, 0, 4, 33, 173, 0, 4, 21, 0, 255, 251, 173, 169, 255, 252, 60, 8, 108, 7, 53, + 8, 137, 101, 1, 72, 0, 25, 0, 0, 32, 18, 36, 132, 0, 1, 60, 5, 164, 0, 36, 165, 0, 64, 4, 17, + 0, 19, 0, 0, 0, 0, 39, 189, 255, 208, 20, 160, 0, 2, 175, 191, 0, 28, 0, 192, 40, 37, 39, 166, + 0, 44, 4, 17, 0, 255, 39, 167, 0, 40, 143, 164, 0, 40, 143, 174, 0, 44, 1, 196, 16, 35, 20, 64, + 0, 2, 0, 64, 24, 37, 0, 128, 24, 37, 143, 191, 0, 28, 39, 189, 0, 48, 0, 96, 16, 37, 3, 224, 0, + 8, 0, 0, 0, 0, 39, 189, 255, 32, 175, 191, 0, 60, 175, 183, 0, 52, 175, 182, 0, 48, 175, 181, + 0, 44, 175, 180, 0, 40, 175, 179, 0, 36, 175, 178, 0, 32, 175, 177, 0, 28, 175, 176, 0, 24, + 140, 174, 0, 0, 0, 0, 24, 37, 39, 163, 0, 180, 39, 162, 0, 116, 1, 196, 128, 38, 36, 66, 0, 16, + 172, 80, 255, 244, 172, 80, 255, 248, 172, 80, 255, 252, 20, 67, 255, 251, 172, 80, 255, 240, + 140, 176, 0, 0, 0, 0, 136, 37, 0, 160, 176, 37, 36, 23, 0, 32, 2, 0, 160, 37, 142, 208, 0, 0, + 38, 49, 0, 1, 36, 15, 3, 239, 142, 211, 0, 4, 38, 214, 0, 4, 1, 241, 32, 35, 2, 32, 48, 37, 4, + 17, 255, 204, 2, 0, 40, 37, 143, 163, 0, 116, 143, 164, 0, 120, 2, 0, 40, 37, 0, 67, 24, 33, + 175, 163, 0, 116, 4, 17, 255, 197, 2, 32, 48, 37, 143, 184, 0, 124, 60, 5, 108, 7, 175, 162, 0, + 120, 3, 16, 200, 38, 175, 185, 0, 124, 52, 165, 137, 101, 38, 4, 0, 5, 4, 17, 255, 188, 2, 32, + 48, 37, 143, 168, 0, 128, 2, 144, 8, 43, 0, 72, 72, 33, 16, 32, 0, 7, 175, 169, 0, 128, 143, + 164, 0, 152, 2, 0, 40, 37, 4, 17, 255, 179, 2, 32, 48, 37, 16, 0, 0, 4, 175, 162, 0, 152, 143, + 170, 0, 152, 1, 80, 88, 33, 175, 171, 0, 152, 50, 130, 0, 31, 143, 174, 0, 132, 2, 226, 24, 35, + 0, 112, 104, 4, 0, 80, 96, 6, 1, 141, 168, 37, 0, 112, 200, 6, 0, 80, 192, 4, 1, 213, 120, 33, + 175, 175, 0, 132, 3, 25, 40, 37, 143, 164, 0, 144, 4, 17, 255, 160, 2, 32, 48, 37, 143, 163, 0, + 140, 175, 162, 0, 144, 2, 3, 8, 43, 80, 32, 0, 8, 143, 171, 0, 132, 143, 168, 0, 128, 2, 17, + 80, 33, 1, 3, 72, 33, 1, 42, 24, 38, 16, 0, 0, 5, 175, 163, 0, 140, 143, 171, 0, 132, 1, 112, + 96, 33, 1, 131, 24, 38, 175, 163, 0, 140, 0, 20, 22, 194, 143, 175, 0, 136, 2, 226, 24, 35, 0, + 112, 112, 6, 0, 80, 104, 4, 1, 174, 144, 37, 0, 112, 64, 4, 0, 80, 200, 6, 1, 242, 192, 33, + 175, 184, 0, 136, 3, 40, 40, 37, 143, 164, 0, 148, 4, 17, 255, 131, 2, 32, 48, 37, 36, 1, 3, + 240, 18, 33, 0, 57, 175, 162, 0, 148, 143, 164, 0, 176, 2, 64, 40, 37, 4, 17, 255, 124, 2, 32, + 48, 37, 0, 16, 30, 194, 2, 227, 80, 35, 1, 83, 88, 6, 0, 115, 72, 4, 1, 43, 40, 37, 0, 64, 32, + 37, 4, 17, 255, 116, 2, 32, 48, 37, 175, 162, 0, 176, 143, 164, 0, 172, 2, 160, 40, 37, 4, 17, + 255, 111, 2, 32, 48, 37, 50, 18, 0, 31, 2, 242, 160, 35, 2, 147, 104, 4, 2, 83, 96, 6, 1, 141, + 40, 37, 0, 64, 32, 37, 4, 17, 255, 103, 2, 32, 48, 37, 143, 169, 0, 168, 50, 99, 0, 31, 2, 80, + 112, 6, 2, 144, 120, 4, 2, 227, 200, 35, 1, 207, 56, 37, 3, 51, 64, 4, 0, 115, 192, 6, 143, + 173, 0, 156, 3, 8, 80, 37, 1, 39, 88, 33, 1, 106, 96, 33, 175, 162, 0, 172, 175, 172, 0, 168, + 2, 96, 40, 37, 2, 32, 48, 37, 4, 17, 255, 85, 1, 176, 32, 33, 143, 174, 0, 160, 175, 162, 0, + 156, 2, 96, 40, 37, 2, 32, 48, 37, 4, 17, 255, 79, 1, 208, 32, 38, 143, 175, 0, 148, 143, 184, + 0, 164, 175, 162, 0, 160, 1, 240, 200, 38, 3, 56, 64, 33, 16, 0, 255, 115, 175, 168, 0, 164, + 143, 163, 0, 116, 0, 0, 136, 37, 39, 179, 0, 116, 36, 21, 0, 16, 36, 20, 0, 1, 175, 163, 0, + 100, 175, 163, 0, 104, 175, 163, 0, 108, 175, 163, 0, 112, 142, 112, 0, 0, 143, 173, 0, 100, + 50, 2, 0, 31, 2, 226, 88, 35, 1, 112, 80, 4, 0, 80, 72, 6, 1, 42, 96, 37, 1, 172, 112, 33, 2, + 14, 8, 43, 16, 32, 0, 5, 175, 174, 0, 100, 143, 175, 0, 104, 1, 240, 200, 33, 16, 0, 0, 6, 175, + 185, 0, 104, 143, 164, 0, 104, 2, 0, 40, 37, 4, 17, 255, 44, 2, 32, 48, 37, 175, 162, 0, 104, + 50, 24, 0, 2, 0, 24, 64, 66, 50, 18, 0, 1, 85, 18, 0, 6, 143, 164, 0, 108, 143, 171, 0, 108, 1, + 112, 72, 33, 16, 0, 0, 6, 175, 169, 0, 108, 143, 164, 0, 108, 2, 0, 40, 37, 4, 17, 255, 30, 2, + 32, 48, 37, 175, 162, 0, 108, 86, 146, 0, 6, 143, 164, 0, 112, 143, 170, 0, 112, 1, 80, 104, + 38, 16, 0, 0, 6, 175, 173, 0, 112, 143, 164, 0, 112, 2, 0, 40, 37, 4, 17, 255, 19, 2, 32, 48, + 37, 175, 162, 0, 112, 38, 49, 0, 1, 22, 53, 255, 209, 38, 115, 0, 4, 143, 164, 0, 100, 143, + 165, 0, 104, 4, 17, 255, 11, 2, 32, 48, 37, 143, 172, 0, 112, 143, 174, 0, 108, 143, 176, 0, + 24, 143, 177, 0, 28, 143, 178, 0, 32, 143, 179, 0, 36, 143, 180, 0, 40, 143, 181, 0, 44, 143, + 182, 0, 48, 143, 183, 0, 52, 143, 191, 0, 60, 0, 64, 32, 37, 39, 189, 0, 224, 4, 17, 0, 8, 1, + 142, 40, 38, 0, 133, 0, 25, 0, 0, 112, 16, 172, 206, 0, 0, 0, 0, 120, 18, 172, 239, 0, 0, 3, + 224, 0, 8, 0, 0, 0, 0, 60, 11, 191, 192, 141, 104, 7, 240, 60, 10, 255, 255, 48, 132, 255, 255, + 1, 10, 64, 36, 0, 136, 32, 37, 37, 107, 7, 192, 60, 9, 164, 128, 141, 41, 0, 24, 49, 41, 0, 2, + 85, 32, 255, 253, 60, 9, 164, 128, 173, 100, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 60, 9, 164, 128, 141, 41, 0, 24, 49, 41, 0, 2, 85, 32, 255, 253, 60, 9, 164, + 128, 141, 104, 0, 60, 36, 9, 0, 32, 173, 101, 0, 52, 1, 9, 64, 37, 60, 9, 164, 128, 141, 41, 0, + 24, 49, 41, 0, 2, 85, 32, 255, 253, 60, 9, 164, 128, 173, 104, 0, 60, 32, 9, 0, 16, 33, 41, + 255, 255, 85, 32, 255, 255, 33, 41, 255, 255, 141, 104, 0, 60, 49, 10, 0, 128, 80, 10, 255, + 250, 32, 9, 0, 16, 36, 10, 0, 64, 1, 10, 64, 37, 60, 9, 164, 128, 141, 41, 0, 24, 49, 41, 0, 2, + 85, 32, 255, 253, 60, 9, 164, 128, 173, 104, 0, 60, 60, 11, 164, 0, 37, 107, 0, 0, 33, 107, 0, + 64, 1, 96, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +]; diff --git a/src/device/rdp.rs b/src/device/rdp.rs new file mode 100644 index 0000000..b258a01 --- /dev/null +++ b/src/device/rdp.rs @@ -0,0 +1,165 @@ +use crate::device; +use crate::ui; + +pub const DPC_START_REG: u32 = 0; +pub const DPC_END_REG: u32 = 1; +pub const DPC_CURRENT_REG: u32 = 2; +pub const DPC_STATUS_REG: u32 = 3; +pub const DPC_CLOCK_REG: u32 = 4; +pub const DPC_BUFBUSY_REG: u32 = 5; +pub const DPC_PIPEBUSY_REG: u32 = 6; +pub const DPC_TMEM_REG: u32 = 7; +pub const DPC_REGS_COUNT: u32 = 8; + +//pub const DPS_TBIST_REG: u32 = 0; +//pub const DPS_TEST_MODE_REG: u32 = 1; +//pub const DPS_BUFTEST_ADDR_REG: u32 = 2; +//pub const DPS_BUFTEST_DATA_REG: u32 = 3; +pub const DPS_REGS_COUNT: u32 = 4; + +/* DPC status - read */ +pub const DPC_STATUS_XBUS_DMEM_DMA: u32 = 1 << 0; +pub const DPC_STATUS_FREEZE: u32 = 1 << 1; +pub const DPC_STATUS_FLUSH: u32 = 1 << 2; +pub const DPC_STATUS_START_GCLK: u32 = 1 << 3; +pub const DPC_STATUS_TMEM_BUSY: u32 = 1 << 4; +pub const DPC_STATUS_PIPE_BUSY: u32 = 1 << 5; +pub const DPC_STATUS_CMD_BUSY: u32 = 1 << 6; +pub const DPC_STATUS_CBUF_READY: u32 = 1 << 7; +//pub const DPC_STATUS_DMA_BUSY: u32 = 1 << 8; +//pub const DPC_STATUS_END_VALID: u32 = 1 << 9; +pub const DPC_STATUS_START_VALID: u32 = 1 << 10; +/* DPC status - write */ +pub const DPC_CLR_XBUS_DMEM_DMA: u32 = 1 << 0; +pub const DPC_SET_XBUS_DMEM_DMA: u32 = 1 << 1; +pub const DPC_CLR_FREEZE: u32 = 1 << 2; +pub const DPC_SET_FREEZE: u32 = 1 << 3; +pub const DPC_CLR_FLUSH: u32 = 1 << 4; +pub const DPC_SET_FLUSH: u32 = 1 << 5; +pub const DPC_CLR_TMEM_CTR: u32 = 1 << 6; +pub const DPC_CLR_PIPE_CTR: u32 = 1 << 7; +pub const DPC_CLR_CMD_CTR: u32 = 1 << 8; +pub const DPC_CLR_CLOCK_CTR: u32 = 1 << 9; + +pub struct Rdp { + pub regs_dpc: [u32; DPC_REGS_COUNT as usize], + pub regs_dps: [u32; DPS_REGS_COUNT as usize], +} + +pub fn read_regs_dpc( + device: &mut device::Device, + address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + return device.rdp.regs_dpc[((address & 0xFFFF) >> 2) as usize]; +} + +pub fn write_regs_dpc(device: &mut device::Device, address: u64, value: u32, mask: u32) { + let reg = (address & 0xFFFF) >> 2; + match reg as u32 { + DPC_CURRENT_REG | DPC_CLOCK_REG | DPC_BUFBUSY_REG | DPC_PIPEBUSY_REG | DPC_TMEM_REG => {} + DPC_STATUS_REG => update_dpc_status(device, value & mask), + DPC_START_REG => { + if (device.rdp.regs_dpc[DPC_STATUS_REG as usize] & DPC_STATUS_START_VALID) == 0 { + device::memory::masked_write_32( + &mut device.rdp.regs_dpc[reg as usize], + value & 0xFFFFF8, + mask, + ) + } + device.rdp.regs_dpc[DPC_STATUS_REG as usize] |= DPC_STATUS_START_VALID + } + DPC_END_REG => { + device::memory::masked_write_32( + &mut device.rdp.regs_dpc[reg as usize], + value & 0xFFFFF8, + mask, + ); + if (device.rdp.regs_dpc[DPC_STATUS_REG as usize] & DPC_STATUS_START_VALID) != 0 { + device.rdp.regs_dpc[DPC_CURRENT_REG as usize] = + device.rdp.regs_dpc[DPC_START_REG as usize]; + device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !DPC_STATUS_START_VALID + } + let timer = ui::video::process_rdp_list(&mut device.rdp.regs_dpc, &mut device.rsp.mem); + if timer != 0 { + device::events::create_event( + device, + device::events::EventType::DP, + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + timer, + rdp_interrupt_event, + ) + } + } + _ => device::memory::masked_write_32(&mut device.rdp.regs_dpc[reg as usize], value, mask), + } +} + +pub fn read_regs_dps( + device: &mut device::Device, + address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + return device.rdp.regs_dps[((address & 0xFFFF) >> 2) as usize]; +} + +pub fn write_regs_dps(device: &mut device::Device, address: u64, value: u32, mask: u32) { + device::memory::masked_write_32( + &mut device.rdp.regs_dps[((address & 0xFFFF) >> 2) as usize], + value, + mask, + ) +} + +pub fn update_dpc_status(device: &mut device::Device, w: u32) { + /* clear / set xbus_dmem_dma */ + if w & DPC_CLR_XBUS_DMEM_DMA != 0 { + device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !DPC_STATUS_XBUS_DMEM_DMA + } + if w & DPC_SET_XBUS_DMEM_DMA != 0 { + device.rdp.regs_dpc[DPC_STATUS_REG as usize] |= DPC_STATUS_XBUS_DMEM_DMA + } + + /* clear / set freeze */ + if w & DPC_CLR_FREEZE != 0 { + device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !DPC_STATUS_FREEZE + } + if w & DPC_SET_FREEZE != 0 { + device.rdp.regs_dpc[DPC_STATUS_REG as usize] |= DPC_STATUS_FREEZE + } + + /* clear / set flush */ + if w & DPC_CLR_FLUSH != 0 { + device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !DPC_STATUS_FLUSH + } + if w & DPC_SET_FLUSH != 0 { + device.rdp.regs_dpc[DPC_STATUS_REG as usize] |= DPC_STATUS_FLUSH + } + + if w & DPC_CLR_TMEM_CTR != 0 { + device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !DPC_STATUS_TMEM_BUSY; + device.rdp.regs_dpc[DPC_TMEM_REG as usize] = 0 + } + if w & DPC_CLR_PIPE_CTR != 0 { + device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !DPC_STATUS_PIPE_BUSY; + device.rdp.regs_dpc[DPC_PIPEBUSY_REG as usize] = 0 + } + if w & DPC_CLR_CMD_CTR != 0 { + device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !DPC_STATUS_CMD_BUSY; + device.rdp.regs_dpc[DPC_BUFBUSY_REG as usize] = 0 + } + + /* clear clock counter */ + if w & DPC_CLR_CLOCK_CTR != 0 { + device.rdp.regs_dpc[DPC_CLOCK_REG as usize] = 0 + } +} + +pub fn init(device: &mut device::Device) { + device.rdp.regs_dpc[DPC_STATUS_REG as usize] |= + DPC_STATUS_START_GCLK | DPC_STATUS_PIPE_BUSY | DPC_STATUS_CBUF_READY; +} + +pub fn rdp_interrupt_event(device: &mut device::Device) { + ui::video::rdp_full_sync(); + device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_DP) +} diff --git a/src/device/rdram.rs b/src/device/rdram.rs new file mode 100644 index 0000000..86b2eb0 --- /dev/null +++ b/src/device/rdram.rs @@ -0,0 +1,86 @@ +use crate::device; +use std::alloc::{alloc, Layout}; + +pub const RDRAM_MASK: usize = 0xFFFFFF; + +pub const RDRAM_SIZE: usize = 0x800000; // 8MB + +pub struct Rdram { + pub mem: Vec, +} + +pub fn read_mem_fast( + device: &mut device::Device, + address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + let masked_address = address as usize & RDRAM_MASK; + return u32::from_ne_bytes( + device.rdram.mem[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ); +} + +pub fn read_mem( + device: &mut device::Device, + address: u64, + access_size: device::memory::AccessSize, +) -> u32 { + device::cop0::add_cycles( + device, + rdram_calculate_cycles(access_size as u64) / (access_size as u64 / 4), + ); + let masked_address = address as usize & RDRAM_MASK; + if address < RDRAM_SIZE as u64 { + return u32::from_ne_bytes( + device.rdram.mem[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ); + } else { + return 0; + } +} + +pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { + if address < RDRAM_SIZE as u64 { + let mut data = u32::from_ne_bytes( + device.rdram.mem[address as usize..(address + 4) as usize] + .try_into() + .unwrap(), + ); + device::memory::masked_write_32(&mut data, value, mask); + device.rdram.mem[address as usize..(address + 4) as usize] + .copy_from_slice(&data.to_ne_bytes()); + } +} + +pub fn read_regs( + _device: &mut device::Device, + _address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + panic!("rdram read reg"); +} + +pub fn write_regs(_device: &mut device::Device, _address: u64, _value: u32, _mask: u32) { + panic!("rdram write reg"); +} + +pub fn init(device: &mut device::Device) -> (*mut u8, usize) { + let alignment = 64 * 1024; + let layout = Layout::from_size_align(RDRAM_SIZE, alignment).expect("Invalid layout"); + let ptr = unsafe { alloc(layout) }; + device.rdram.mem = unsafe { Vec::from_raw_parts(ptr, RDRAM_SIZE, RDRAM_SIZE) }; + + // hack, skip RDRAM initialization + let data: u32 = RDRAM_SIZE as u32; + device.rdram.mem[device.cart.rdram_size_offset..device.cart.rdram_size_offset + 4] + .copy_from_slice(&data.to_ne_bytes()); + return (ptr, RDRAM_SIZE); +} + +pub fn rdram_calculate_cycles(length: u64) -> u64 { + return 31 + (length / 3); // https://hcs64.com/dma.html, https://github.com/rasky/n64-systembench +} diff --git a/src/device/ri.rs b/src/device/ri.rs new file mode 100644 index 0000000..aff8efc --- /dev/null +++ b/src/device/ri.rs @@ -0,0 +1,34 @@ +use crate::device; + +//pub const RI_MODE_REG: u32 = 0; +//pub const RI_CONFIG_REG: u32 = 1; +//pub const RI_CURRENT_LOAD_REG: u32 = 2; +pub const RI_SELECT_REG: u32 = 3; +//pub const RI_REFRESH_REG: u32 = 4; +//pub const RI_LATENCY_REG: u32 = 5; +//pub const RI_ERROR_REG: u32 = 6; +//pub const RI_WERROR_REG: u32 = 7; +pub const RI_REGS_COUNT: u32 = 8; + +pub struct Ri { + pub regs: [u32; RI_REGS_COUNT as usize], +} + +pub fn read_regs( + device: &mut device::Device, + address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + if ((address & 0xFFFF) >> 2) as u32 == RI_SELECT_REG { + return 0x14; // hack, skip RDRAM initialization + } + return device.ri.regs[((address & 0xFFFF) >> 2) as usize]; +} + +pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { + device::memory::masked_write_32( + &mut device.ri.regs[((address & 0xFFFF) >> 2) as usize], + value, + mask, + ); +} diff --git a/src/device/rsp_cpu.rs b/src/device/rsp_cpu.rs new file mode 100644 index 0000000..bda2de3 --- /dev/null +++ b/src/device/rsp_cpu.rs @@ -0,0 +1,429 @@ +use crate::device; + +pub struct BranchState { + pub state: device::cpu::State, + pub pc: u32, +} + +pub struct Cpu { + pub branch_state: BranchState, + pub broken: bool, + pub halted: bool, + pub sync_point: bool, + pub gpr: [u32; 32], + pub vpr: [u128; 32], + pub reciprocals: [u16; 512], + pub inverse_square_roots: [u16; 512], + pub vcol: std::arch::x86_64::__m128i, + pub vcoh: std::arch::x86_64::__m128i, + pub vccl: std::arch::x86_64::__m128i, + pub vcch: std::arch::x86_64::__m128i, + pub vce: std::arch::x86_64::__m128i, + pub accl: std::arch::x86_64::__m128i, + pub accm: std::arch::x86_64::__m128i, + pub acch: std::arch::x86_64::__m128i, + pub divdp: bool, + pub divin: i16, + pub divout: i16, + pub special_instrs: [fn(&mut device::Device, u32); 48], + pub regimm_instrs: [fn(&mut device::Device, u32); 18], + pub cop0_instrs: [fn(&mut device::Device, u32); 5], + pub cop2_instrs: [fn(&mut device::Device, u32); 32], + pub lwc2_instrs: [fn(&mut device::Device, u32); 12], + pub swc2_instrs: [fn(&mut device::Device, u32); 12], + pub instrs: [fn(&mut device::Device, u32); 64], + pub vec_instrs: [fn(&mut device::Device, u32); 64], +} + +pub fn in_delay_slot(device: &mut device::Device) -> bool { + return device.rsp.cpu.branch_state.state == device::cpu::State::DelaySlotTaken + || device.rsp.cpu.branch_state.state == device::cpu::State::DelaySlotNotTaken; +} + +pub fn in_delay_slot_taken(device: &mut device::Device) -> bool { + return device.rsp.cpu.branch_state.state == device::cpu::State::DelaySlotTaken; +} + +pub fn run(device: &mut device::Device) -> u64 { + device.rsp.cpu.broken = false; + let mut cycle_counter = 0; + while !device.rsp.cpu.halted && !device.rsp.cpu.sync_point { + device.rsp.cpu.gpr[0] = 0; // gpr 0 is read only + let offset = 0x1000 + device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] as usize; + let opcode = u32::from_be_bytes(device.rsp.mem[offset..offset + 4].try_into().unwrap()); + execute_opcode(device, opcode)(device, opcode); + match device.rsp.cpu.branch_state.state { + device::cpu::State::Step => { + device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] += 4 + } + device::cpu::State::Take => { + device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] += 4; + device.rsp.cpu.branch_state.state = device::cpu::State::DelaySlotTaken + } + device::cpu::State::NotTaken => { + device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] += 4; + device.rsp.cpu.branch_state.state = device::cpu::State::DelaySlotNotTaken + } + device::cpu::State::DelaySlotTaken => { + device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] = + device.rsp.cpu.branch_state.pc; + device.rsp.cpu.branch_state.state = device::cpu::State::Step + } + device::cpu::State::DelaySlotNotTaken => { + device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] += 4; + device.rsp.cpu.branch_state.state = device::cpu::State::Step + } + device::cpu::State::Discard => { + device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] += 8; + device.rsp.cpu.branch_state.state = device::cpu::State::Step + } + device::cpu::State::Exception => { + device.rsp.cpu.branch_state.state = device::cpu::State::Step + } + } + device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] &= 0xFFC; + + cycle_counter += 1; + + if device.rsp.cpu.broken && device.rsp.cpu.branch_state.state == device::cpu::State::Step { + break; + } + } + return (cycle_counter as f64 * 1.5) as u64; // converting RCP clock to CPU clock +} + +pub fn execute_opcode(device: &mut device::Device, opcode: u32) -> fn(&mut device::Device, u32) { + match opcode >> 26 { + 0 => { + // SPECIAL + return device.rsp.cpu.special_instrs[(opcode & 0x3F) as usize]; + } + 1 => { + // REGIMM + return device.rsp.cpu.regimm_instrs[((opcode >> 16) & 0x1F) as usize]; + } + 16 => { + // COP0 + return device.rsp.cpu.cop0_instrs[((opcode >> 21) & 0x1F) as usize]; + } + 18 => { + // COP2 + return device.rsp.cpu.cop2_instrs[((opcode >> 21) & 0x1F) as usize]; + } + 50 => { + // LWC2 + return device.rsp.cpu.lwc2_instrs[((opcode >> 11) & 0x1F) as usize]; + } + 58 => { + // SWC2 + return device.rsp.cpu.swc2_instrs[((opcode >> 11) & 0x1F) as usize]; + } + _ => return device.rsp.cpu.instrs[(opcode >> 26) as usize], + } +} + +pub fn init(device: &mut device::Device) { + device.rsp.cpu.reciprocals[0] = !0 as u16; + let mut index = 1; + while index < 512 { + let a = (index + 512) as u64; + let b = ((1 as u64) << 34) / a; + device.rsp.cpu.reciprocals[index] = ((b + 1) >> 8) as u16; + index += 1; + } + + index = 0; + while index < 512 { + let mut shift = 0; + if index % 2 == 1 { + shift = 1 + } + let a = ((index + 512) >> shift) as u64; + let mut b = (1 << 17) as u64; + //find the largest b where b < 1.0 / sqrt(a) + while a * (b + 1) * (b + 1) < ((1 as u64) << 44) { + b += 1; + } + device.rsp.cpu.inverse_square_roots[index] = (b >> 1) as u16; + index += 1; + } + + device.rsp.cpu.instrs = [ + device::rsp_su_instructions::reserved, // SPECIAL + device::rsp_su_instructions::reserved, // REGIMM + device::rsp_su_instructions::j, // 2 + device::rsp_su_instructions::jal, // 3 + device::rsp_su_instructions::beq, // 4 + device::rsp_su_instructions::bne, // 5 + device::rsp_su_instructions::blez, // 6 + device::rsp_su_instructions::bgtz, // 7 + device::rsp_su_instructions::addi, // 8 + device::rsp_su_instructions::addiu, // 9 + device::rsp_su_instructions::slti, // 10 + device::rsp_su_instructions::sltiu, // 11 + device::rsp_su_instructions::andi, // 12 + device::rsp_su_instructions::ori, // 13 + device::rsp_su_instructions::xori, // 14 + device::rsp_su_instructions::lui, // 15 + device::rsp_su_instructions::reserved, // COP0 + device::rsp_su_instructions::reserved, // COP1 + device::rsp_su_instructions::reserved, // COP2 + device::rsp_su_instructions::reserved, // 19 + device::rsp_su_instructions::reserved, // 20 + device::rsp_su_instructions::reserved, // 21 + device::rsp_su_instructions::reserved, // 22 + device::rsp_su_instructions::reserved, // 23 + device::rsp_su_instructions::reserved, // 24 + device::rsp_su_instructions::reserved, // 25 + device::rsp_su_instructions::reserved, // 26 + device::rsp_su_instructions::reserved, // 27 + device::rsp_su_instructions::reserved, // 28 + device::rsp_su_instructions::reserved, // 29 + device::rsp_su_instructions::reserved, // 30 + device::rsp_su_instructions::reserved, // 31 + device::rsp_su_instructions::lb, // 32 + device::rsp_su_instructions::lh, // 33 + device::rsp_su_instructions::reserved, // 34 + device::rsp_su_instructions::lw, // 35 + device::rsp_su_instructions::lbu, // 36 + device::rsp_su_instructions::lhu, // 37 + device::rsp_su_instructions::reserved, // 38 + device::rsp_su_instructions::lwu, // 39 + device::rsp_su_instructions::sb, // 40 + device::rsp_su_instructions::sh, // 41 + device::rsp_su_instructions::reserved, // 42 + device::rsp_su_instructions::sw, // 43 + device::rsp_su_instructions::reserved, // 44 + device::rsp_su_instructions::reserved, // 45 + device::rsp_su_instructions::reserved, // 46 + device::rsp_su_instructions::reserved, // 47 + device::rsp_su_instructions::reserved, // 48 + device::rsp_su_instructions::reserved, // 49 + device::rsp_su_instructions::reserved, // lwc2 + device::rsp_su_instructions::reserved, // 51 + device::rsp_su_instructions::reserved, // 52 + device::rsp_su_instructions::reserved, // 53 + device::rsp_su_instructions::reserved, // 54 + device::rsp_su_instructions::reserved, // 55 + device::rsp_su_instructions::reserved, // 56 + device::rsp_su_instructions::reserved, // 57 + device::rsp_su_instructions::reserved, // swc2 + device::rsp_su_instructions::reserved, // 59 + device::rsp_su_instructions::reserved, // 60 + device::rsp_su_instructions::reserved, // 61 + device::rsp_su_instructions::reserved, // 62 + device::rsp_su_instructions::reserved, // 63 + ]; + + device.rsp.cpu.special_instrs = [ + device::rsp_su_instructions::sll, // 0 + device::rsp_su_instructions::reserved, // 1 + device::rsp_su_instructions::srl, // 2 + device::rsp_su_instructions::sra, // 3 + device::rsp_su_instructions::sllv, // 4 + device::rsp_su_instructions::reserved, // 5 + device::rsp_su_instructions::srlv, // 6 + device::rsp_su_instructions::srav, // 7 + device::rsp_su_instructions::jr, // 8 + device::rsp_su_instructions::jalr, // 9 + device::rsp_su_instructions::reserved, // 10 + device::rsp_su_instructions::reserved, // 11 + device::rsp_su_instructions::reserved, // 12 + device::rsp_su_instructions::break_, // 13 + device::rsp_su_instructions::reserved, // 14 + device::rsp_su_instructions::reserved, // 15 + device::rsp_su_instructions::reserved, // 16 + device::rsp_su_instructions::reserved, // 17 + device::rsp_su_instructions::reserved, // 18 + device::rsp_su_instructions::reserved, // 19 + device::rsp_su_instructions::reserved, // 20 + device::rsp_su_instructions::reserved, // 21 + device::rsp_su_instructions::reserved, // 22 + device::rsp_su_instructions::reserved, // 23 + device::rsp_su_instructions::reserved, // 24 + device::rsp_su_instructions::reserved, // 25 + device::rsp_su_instructions::reserved, // 26 + device::rsp_su_instructions::reserved, // 27 + device::rsp_su_instructions::reserved, // 28 + device::rsp_su_instructions::reserved, // 29 + device::rsp_su_instructions::reserved, // 30 + device::rsp_su_instructions::reserved, // 31 + device::rsp_su_instructions::add, // 32 + device::rsp_su_instructions::addu, // 33 + device::rsp_su_instructions::sub, // 34 + device::rsp_su_instructions::subu, // 35 + device::rsp_su_instructions::and, // 36 + device::rsp_su_instructions::or, // 37 + device::rsp_su_instructions::xor, // 38 + device::rsp_su_instructions::nor, // 39 + device::rsp_su_instructions::reserved, // 40 + device::rsp_su_instructions::reserved, // 41 + device::rsp_su_instructions::slt, // 42 + device::rsp_su_instructions::sltu, // 43 + device::rsp_su_instructions::reserved, // 44 + device::rsp_su_instructions::reserved, // 45 + device::rsp_su_instructions::reserved, // 46 + device::rsp_su_instructions::reserved, // 47 + ]; + + device.rsp.cpu.regimm_instrs = [ + device::rsp_su_instructions::bltz, // 0 + device::rsp_su_instructions::bgez, // 1 + device::rsp_su_instructions::reserved, // 2 + device::rsp_su_instructions::reserved, // 3 + device::rsp_su_instructions::reserved, // 4 + device::rsp_su_instructions::reserved, // 5 + device::rsp_su_instructions::reserved, // 6 + device::rsp_su_instructions::reserved, // 7 + device::rsp_su_instructions::reserved, // 8 + device::rsp_su_instructions::reserved, // 9 + device::rsp_su_instructions::reserved, // 10 + device::rsp_su_instructions::reserved, // 11 + device::rsp_su_instructions::reserved, // 12 + device::rsp_su_instructions::reserved, // 13 + device::rsp_su_instructions::reserved, // 14 + device::rsp_su_instructions::reserved, // 15 + device::rsp_su_instructions::bltzal, // 16 + device::rsp_su_instructions::bgezal, // 17 + ]; + + device.rsp.cpu.cop0_instrs = [ + device::rsp_su_instructions::mfc0, // 0 + device::rsp_su_instructions::reserved, // 1 + device::rsp_su_instructions::reserved, // 2 + device::rsp_su_instructions::reserved, // 3 + device::rsp_su_instructions::mtc0, // 4 + ]; + + device.rsp.cpu.cop2_instrs = [ + device::rsp_su_instructions::mfc2, // 0 + device::rsp_su_instructions::reserved, // 1 + device::rsp_su_instructions::cfc2, // 2 + device::rsp_su_instructions::reserved, // 3 + device::rsp_su_instructions::mtc2, // 4 + device::rsp_su_instructions::reserved, // 5 + device::rsp_su_instructions::ctc2, // 6 + device::rsp_su_instructions::reserved, // 7 + device::rsp_su_instructions::reserved, // 8 + device::rsp_su_instructions::reserved, // 9 + device::rsp_su_instructions::reserved, // 10 + device::rsp_su_instructions::reserved, // 11 + device::rsp_su_instructions::reserved, // 12 + device::rsp_su_instructions::reserved, // 13 + device::rsp_su_instructions::reserved, // 14 + device::rsp_su_instructions::reserved, // 15 + device::rsp_vu_instructions::execute_vec, // 16 + device::rsp_vu_instructions::execute_vec, // 17 + device::rsp_vu_instructions::execute_vec, // 18 + device::rsp_vu_instructions::execute_vec, // 19 + device::rsp_vu_instructions::execute_vec, // 20 + device::rsp_vu_instructions::execute_vec, // 21 + device::rsp_vu_instructions::execute_vec, // 22 + device::rsp_vu_instructions::execute_vec, // 23 + device::rsp_vu_instructions::execute_vec, // 24 + device::rsp_vu_instructions::execute_vec, // 25 + device::rsp_vu_instructions::execute_vec, // 26 + device::rsp_vu_instructions::execute_vec, // 27 + device::rsp_vu_instructions::execute_vec, // 28 + device::rsp_vu_instructions::execute_vec, // 29 + device::rsp_vu_instructions::execute_vec, // 30 + device::rsp_vu_instructions::execute_vec, // 31 + ]; + + device.rsp.cpu.lwc2_instrs = [ + device::rsp_su_instructions::lbv, // 0 + device::rsp_su_instructions::lsv, // 1 + device::rsp_su_instructions::llv, // 2 + device::rsp_su_instructions::ldv, // 3 + device::rsp_su_instructions::lqv, // 4 + device::rsp_su_instructions::lrv, // 5 + device::rsp_su_instructions::lpv, // 6 + device::rsp_su_instructions::luv, // 7 + device::rsp_su_instructions::lhv, // 8 + device::rsp_su_instructions::lfv, // 9 + device::rsp_su_instructions::lwv, // 10 + device::rsp_su_instructions::ltv, // 11 + ]; + + device.rsp.cpu.swc2_instrs = [ + device::rsp_su_instructions::sbv, // 0 + device::rsp_su_instructions::ssv, // 1 + device::rsp_su_instructions::slv, // 2 + device::rsp_su_instructions::sdv, // 3 + device::rsp_su_instructions::sqv, // 4 + device::rsp_su_instructions::srv, // 5 + device::rsp_su_instructions::spv, // 6 + device::rsp_su_instructions::suv, // 7 + device::rsp_su_instructions::shv, // 8 + device::rsp_su_instructions::sfv, // 9 + device::rsp_su_instructions::swv, // 10 + device::rsp_su_instructions::stv, // 11 + ]; + + device.rsp.cpu.vec_instrs = [ + device::rsp_vu_instructions::vmulf, // 0 + device::rsp_vu_instructions::vmulu, // 1 + device::rsp_vu_instructions::vrndp, // 2 + device::rsp_vu_instructions::vmulq, // 3 + device::rsp_vu_instructions::vmudl, // 4 + device::rsp_vu_instructions::vmudm, // 5 + device::rsp_vu_instructions::vmudn, // 6 + device::rsp_vu_instructions::vmudh, // 7 + device::rsp_vu_instructions::vmacf, // 8 + device::rsp_vu_instructions::vmacu, // 9 + device::rsp_vu_instructions::vrndn, // 10 + device::rsp_vu_instructions::vmacq, // 11 + device::rsp_vu_instructions::vmadl, // 12 + device::rsp_vu_instructions::vmadm, // 13 + device::rsp_vu_instructions::vmadn, // 14 + device::rsp_vu_instructions::vmadh, // 15 + device::rsp_vu_instructions::vadd, // 16 + device::rsp_vu_instructions::vsub, // 17 + device::rsp_vu_instructions::vzero, // 18 + device::rsp_vu_instructions::vabs, // 19 + device::rsp_vu_instructions::vaddc, // 20 + device::rsp_vu_instructions::vsubc, // 21 + device::rsp_vu_instructions::vzero, // 22 + device::rsp_vu_instructions::vzero, // 23 + device::rsp_vu_instructions::vzero, // 24 + device::rsp_vu_instructions::vzero, // 25 + device::rsp_vu_instructions::vzero, // 26 + device::rsp_vu_instructions::vzero, // 27 + device::rsp_vu_instructions::vzero, // 28 + device::rsp_vu_instructions::vsar, // 29 + device::rsp_vu_instructions::vzero, // 30 + device::rsp_vu_instructions::vzero, // 31 + device::rsp_vu_instructions::vlt, // 32 + device::rsp_vu_instructions::veq, // 33 + device::rsp_vu_instructions::vne, // 34 + device::rsp_vu_instructions::vge, // 35 + device::rsp_vu_instructions::vcl, // 36 + device::rsp_vu_instructions::vch, // 37 + device::rsp_vu_instructions::vcr, // 38 + device::rsp_vu_instructions::vmrg, // 39 + device::rsp_vu_instructions::vand, // 40 + device::rsp_vu_instructions::vnand, // 41 + device::rsp_vu_instructions::vor, // 42 + device::rsp_vu_instructions::vnor, // 43 + device::rsp_vu_instructions::vxor, // 44 + device::rsp_vu_instructions::vnxor, // 45 + device::rsp_vu_instructions::vzero, // 46 + device::rsp_vu_instructions::vzero, // 47 + device::rsp_vu_instructions::vrcp, // 48 + device::rsp_vu_instructions::vrcpl, // 49 + device::rsp_vu_instructions::vrcph, // 50 + device::rsp_vu_instructions::vmov, // 51 + device::rsp_vu_instructions::vrsq, // 52 + device::rsp_vu_instructions::vrsql, // 53 + device::rsp_vu_instructions::vrsqh, // 54 + device::rsp_vu_instructions::vnop, // 55 + device::rsp_vu_instructions::vzero, // 56 + device::rsp_vu_instructions::vzero, // 57 + device::rsp_vu_instructions::vzero, // 58 + device::rsp_vu_instructions::vzero, // 59 + device::rsp_vu_instructions::vzero, // 60 + device::rsp_vu_instructions::vzero, // 61 + device::rsp_vu_instructions::vzero, // 62 + device::rsp_vu_instructions::vnop, // 63 + ] +} diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs new file mode 100644 index 0000000..6969f55 --- /dev/null +++ b/src/device/rsp_interface.rs @@ -0,0 +1,432 @@ +use crate::device; + +pub const SP_MEM_ADDR_REG: u32 = 0; +pub const SP_DRAM_ADDR_REG: u32 = 1; +pub const SP_RD_LEN_REG: u32 = 2; +pub const SP_WR_LEN_REG: u32 = 3; +pub const SP_STATUS_REG: u32 = 4; +pub const SP_DMA_FULL_REG: u32 = 5; +pub const SP_DMA_BUSY_REG: u32 = 6; +pub const SP_SEMAPHORE_REG: u32 = 7; +pub const SP_REGS_COUNT: u32 = 8; + +pub const SP_PC_REG: u32 = 0; +//pub const SP_IBIST_REG: u32 = 1; +pub const SP_REGS2_COUNT: u32 = 2; + +/* SP_STATUS - read */ +pub const SP_STATUS_HALT: u32 = 1 << 0; +pub const SP_STATUS_BROKE: u32 = 1 << 1; +pub const SP_STATUS_DMA_BUSY: u32 = 1 << 2; +pub const SP_STATUS_DMA_FULL: u32 = 1 << 3; +//pub const SP_STATUS_IO_FULL: u32 = 1 << 4; +pub const SP_STATUS_SSTEP: u32 = 1 << 5; +pub const SP_STATUS_INTR_BREAK: u32 = 1 << 6; +pub const SP_STATUS_SIG0: u32 = 1 << 7; +pub const SP_STATUS_SIG1: u32 = 1 << 8; +pub const SP_STATUS_SIG2: u32 = 1 << 9; +pub const SP_STATUS_SIG3: u32 = 1 << 10; +pub const SP_STATUS_SIG4: u32 = 1 << 11; +pub const SP_STATUS_SIG5: u32 = 1 << 12; +pub const SP_STATUS_SIG6: u32 = 1 << 13; +pub const SP_STATUS_SIG7: u32 = 1 << 14; + +/* SP_STATUS - write */ +pub const SP_CLR_HALT: u32 = 1 << 0; +pub const SP_SET_HALT: u32 = 1 << 1; +pub const SP_CLR_BROKE: u32 = 1 << 2; +pub const SP_CLR_INTR: u32 = 1 << 3; +pub const SP_SET_INTR: u32 = 1 << 4; +pub const SP_CLR_SSTEP: u32 = 1 << 5; +pub const SP_SET_SSTEP: u32 = 1 << 6; +pub const SP_CLR_INTR_BREAK: u32 = 1 << 7; +pub const SP_SET_INTR_BREAK: u32 = 1 << 8; +pub const SP_CLR_SIG0: u32 = 1 << 9; +pub const SP_SET_SIG0: u32 = 1 << 10; +pub const SP_CLR_SIG1: u32 = 1 << 11; +pub const SP_SET_SIG1: u32 = 1 << 12; +pub const SP_CLR_SIG2: u32 = 1 << 13; +pub const SP_SET_SIG2: u32 = 1 << 14; +pub const SP_CLR_SIG3: u32 = 1 << 15; +pub const SP_SET_SIG3: u32 = 1 << 16; +pub const SP_CLR_SIG4: u32 = 1 << 17; +pub const SP_SET_SIG4: u32 = 1 << 18; +pub const SP_CLR_SIG5: u32 = 1 << 19; +pub const SP_SET_SIG5: u32 = 1 << 20; +pub const SP_CLR_SIG6: u32 = 1 << 21; +pub const SP_SET_SIG6: u32 = 1 << 22; +pub const SP_CLR_SIG7: u32 = 1 << 23; +pub const SP_SET_SIG7: u32 = 1 << 24; + +pub const RSP_MEM_MASK: usize = 0x1FFF; + +#[derive(PartialEq, Copy, Clone)] +pub enum DmaDir { + None, + Write, + Read, +} + +#[derive(Copy, Clone)] +pub struct RspDma { + pub dir: DmaDir, + pub length: u32, + pub memaddr: u32, + pub dramaddr: u32, +} + +pub struct Rsp { + pub cpu: device::rsp_cpu::Cpu, + pub regs: [u32; SP_REGS_COUNT as usize], + pub regs2: [u32; SP_REGS2_COUNT as usize], + pub mem: [u8; 0x2000], + pub fifo: [RspDma; 2], +} + +pub fn read_mem_fast( + device: &mut device::Device, + address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + let masked_address = address as usize & RSP_MEM_MASK; + return u32::from_be_bytes( + device.rsp.mem[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ); +} + +pub fn read_mem( + device: &mut device::Device, + address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + let masked_address = address as usize & RSP_MEM_MASK; + return u32::from_be_bytes( + device.rsp.mem[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ); +} + +pub fn write_mem(device: &mut device::Device, address: u64, value: u32, _mask: u32) { + let masked_address = address as usize & RSP_MEM_MASK; + let mut data = u32::from_be_bytes( + device.rsp.mem[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ); + device::memory::masked_write_32(&mut data, value, 0xFFFFFFFF); + device.rsp.mem[masked_address..masked_address + 4].copy_from_slice(&data.to_be_bytes()) + + // SH/SB are broken: They overwrite the whole 32 bit, filling everything that isn't written with zeroes +} + +pub fn do_dma(device: &mut device::Device, dma: RspDma) { + let l = dma.length; + + let length = ((l & 0xfff) | 7) + 1; + let count = ((l >> 12) & 0xff) + 1; + let skip = (l >> 20) & 0xff8; + + let mut mem_addr = dma.memaddr & 0xff8; + let mut dram_addr = dma.dramaddr & 0xfffff8; + let offset = dma.memaddr & 0x1000; + + if dma.dir == DmaDir::Read { + let mut j = 0; + while j < count { + let mut i = 0; + while i < length { + device.rdram.mem[dram_addr as usize ^ device.byte_swap] = + device.rsp.mem[(offset + (mem_addr & 0xFFF)) as usize]; + mem_addr += 1; + dram_addr += 1; + i += 1; + } + dram_addr += skip; + j += 1; + } + } else { + let mut j = 0; + while j < count { + let mut i = 0; + while i < length { + device.rsp.mem[(offset + (mem_addr & 0xFFF)) as usize] = + device.rdram.mem[dram_addr as usize ^ device.byte_swap]; + mem_addr += 1; + dram_addr += 1; + i += 1; + } + dram_addr += skip; + j += 1; + } + } + device.rsp.regs[SP_MEM_ADDR_REG as usize] = (mem_addr & 0xfff) + (dma.memaddr & 0x1000); + device.rsp.regs[SP_DRAM_ADDR_REG as usize] = dram_addr; + device.rsp.regs[SP_RD_LEN_REG as usize] = 0xff8; + device.rsp.regs[SP_WR_LEN_REG as usize] = 0xff8; + + device::events::create_event( + device, + device::events::EventType::SPDma, + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + + device::rdram::rdram_calculate_cycles((count * length) as u64) + + 9, + device::rsp_interface::fifo_pop, + ); +} + +pub fn fifo_push(device: &mut device::Device, dir: DmaDir) { + if device.rsp.regs[SP_DMA_FULL_REG as usize] != 0 { + panic!("RSP DMA already full") + } + + if device.rsp.regs[SP_DMA_BUSY_REG as usize] != 0 { + device.rsp.fifo[1].dir = dir; + if dir == DmaDir::Read { + device.rsp.fifo[1].length = device.rsp.regs[SP_WR_LEN_REG as usize] + } else { + device.rsp.fifo[1].length = device.rsp.regs[SP_RD_LEN_REG as usize] + } + device.rsp.fifo[1].memaddr = device.rsp.regs[SP_MEM_ADDR_REG as usize]; + device.rsp.fifo[1].dramaddr = device.rsp.regs[SP_DRAM_ADDR_REG as usize]; + device.rsp.regs[SP_DMA_FULL_REG as usize] = 1; + device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_DMA_FULL + } else { + device.rsp.fifo[0].dir = dir; + if dir == DmaDir::Read { + device.rsp.fifo[0].length = device.rsp.regs[SP_WR_LEN_REG as usize] + } else { + device.rsp.fifo[0].length = device.rsp.regs[SP_RD_LEN_REG as usize] + } + device.rsp.fifo[0].memaddr = device.rsp.regs[SP_MEM_ADDR_REG as usize]; + device.rsp.fifo[0].dramaddr = device.rsp.regs[SP_DRAM_ADDR_REG as usize]; + device.rsp.regs[SP_DMA_BUSY_REG as usize] = 1; + device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_DMA_BUSY; + + do_dma(device, device.rsp.fifo[0]) + } +} + +pub fn fifo_pop(device: &mut device::Device) { + if device.rsp.regs[SP_DMA_FULL_REG as usize] != 0 { + device.rsp.fifo[0].dir = device.rsp.fifo[1].dir; + device.rsp.fifo[0].length = device.rsp.fifo[1].length; + device.rsp.fifo[0].memaddr = device.rsp.fifo[1].memaddr; + device.rsp.fifo[0].dramaddr = device.rsp.fifo[1].dramaddr; + device.rsp.regs[SP_DMA_FULL_REG as usize] = 0; + device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_DMA_FULL; + + do_dma(device, device.rsp.fifo[0]) + } else { + device.rsp.regs[SP_DMA_BUSY_REG as usize] = 0; + device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_DMA_BUSY + } +} + +pub fn read_regs( + device: &mut device::Device, + address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + let reg = (address & 0xFFFF) >> 2; + match reg as u32 { + SP_SEMAPHORE_REG => { + let value = device.rsp.regs[reg as usize]; + device.rsp.regs[reg as usize] = 1; + return value; + } + _ => return device.rsp.regs[reg as usize], + } +} + +pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { + let reg = (address & 0xFFFF) >> 2; + match reg as u32 { + SP_STATUS_REG => update_sp_status(device, value), + SP_RD_LEN_REG => { + device::memory::masked_write_32(&mut device.rsp.regs[reg as usize], value, mask); + fifo_push(device, DmaDir::Write) + } + SP_WR_LEN_REG => { + device::memory::masked_write_32(&mut device.rsp.regs[reg as usize], value, mask); + fifo_push(device, DmaDir::Read) + } + SP_SEMAPHORE_REG => { + device::memory::masked_write_32(&mut device.rsp.regs[reg as usize], 0, mask) + } + _ => { + device::memory::masked_write_32(&mut device.rsp.regs[reg as usize], value, mask); + } + } +} + +pub fn read_regs2( + device: &mut device::Device, + address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + return device.rsp.regs2[((address & 0xFFFF) >> 2) as usize]; +} + +pub fn write_regs2(device: &mut device::Device, address: u64, value: u32, mask: u32) { + let reg = (address & 0xFFFF) >> 2; + match reg as u32 { + SP_PC_REG => { + device::memory::masked_write_32( + &mut device.rsp.regs2[reg as usize], + value & 0xFFC, + mask, + ); + } + _ => device::memory::masked_write_32(&mut device.rsp.regs2[reg as usize], value, mask), + } +} + +pub fn update_sp_status(device: &mut device::Device, w: u32) { + let was_halted = device.rsp.regs[SP_STATUS_REG as usize] & SP_STATUS_HALT != 0; + + /* clear / set halt */ + if w & SP_CLR_HALT != 0 && w & SP_SET_HALT == 0 { + device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_HALT + } + if w & SP_SET_HALT != 0 && w & SP_CLR_HALT == 0 { + device::events::remove_event(device, device::events::EventType::SP); + device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_HALT + } + + /* clear broke */ + if w & SP_CLR_BROKE != 0 { + device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_BROKE + } + + /* clear SP interrupt */ + if (w & SP_CLR_INTR) != 0 && (w & SP_SET_INTR) == 0 { + device::mi::clear_rcp_interrupt(device, device::mi::MI_INTR_SP) + } + /* set SP interrupt */ + if (w & SP_SET_INTR) != 0 && (w & SP_CLR_INTR) == 0 { + device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_SP) + } + + /* clear / set single step */ + if w & SP_CLR_SSTEP != 0 && w & SP_SET_SSTEP == 0 { + device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_SSTEP + } + if w & SP_SET_SSTEP != 0 && w & SP_CLR_SSTEP == 0 { + device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_SSTEP + } + + /* clear / set interrupt on break */ + if w & SP_CLR_INTR_BREAK != 0 && w & SP_SET_INTR_BREAK == 0 { + device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_INTR_BREAK + } + if w & SP_SET_INTR_BREAK != 0 && w & SP_CLR_INTR_BREAK == 0 { + device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_INTR_BREAK + } + + /* clear / set signal 0 */ + if w & SP_CLR_SIG0 != 0 && w & SP_SET_SIG0 == 0 { + device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_SIG0 + } + if w & SP_SET_SIG0 != 0 && w & SP_CLR_SIG0 == 0 { + device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_SIG0 + } + + /* clear / set signal 1 */ + if w & SP_CLR_SIG1 != 0 && w & SP_SET_SIG1 == 0 { + device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_SIG1 + } + if w & SP_SET_SIG1 != 0 && w & SP_CLR_SIG1 == 0 { + device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_SIG1 + } + + /* clear / set signal 2 */ + if w & SP_CLR_SIG2 != 0 && w & SP_SET_SIG2 == 0 { + device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_SIG2 + } + if w & SP_SET_SIG2 != 0 && w & SP_CLR_SIG2 == 0 { + device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_SIG2 + } + + /* clear / set signal 3 */ + if w & SP_CLR_SIG3 != 0 && w & SP_SET_SIG3 == 0 { + device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_SIG3 + } + if w & SP_SET_SIG3 != 0 && w & SP_CLR_SIG3 == 0 { + device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_SIG3 + } + + /* clear / set signal 4 */ + if w & SP_CLR_SIG4 != 0 && w & SP_SET_SIG4 == 0 { + device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_SIG4 + } + if w & SP_SET_SIG4 != 0 && w & SP_CLR_SIG4 == 0 { + device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_SIG4 + } + + /* clear / set signal 5 */ + if w & SP_CLR_SIG5 != 0 && w & SP_SET_SIG5 == 0 { + device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_SIG5 + } + if w & SP_SET_SIG5 != 0 && w & SP_CLR_SIG5 == 0 { + device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_SIG5 + } + + /* clear / set signal 6 */ + if w & SP_CLR_SIG6 != 0 && w & SP_SET_SIG6 == 0 { + device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_SIG6 + } + if w & SP_SET_SIG6 != 0 && w & SP_CLR_SIG6 == 0 { + device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_SIG6 + } + + /* clear / set signal 7 */ + if w & SP_CLR_SIG7 != 0 && w & SP_SET_SIG7 == 0 { + device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_SIG7 + } + if w & SP_SET_SIG7 != 0 && w & SP_CLR_SIG7 == 0 { + device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_SIG7 + } + + if device.rsp.regs[SP_STATUS_REG as usize] & SP_STATUS_HALT == 0 && was_halted { + device.rsp.cpu.broken = false; + device.rsp.cpu.halted = false; + device.rsp.cpu.sync_point = false; + do_task(device); + } +} + +pub fn do_task(device: &mut device::Device) { + let timer = device::rsp_cpu::run(device); + + device::events::create_event( + device, + device::events::EventType::SP, + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + timer, + rsp_event, + ) +} + +pub fn rsp_event(device: &mut device::Device) { + if device.rsp.cpu.broken { + device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_HALT | SP_STATUS_BROKE; + + if device.rsp.regs[SP_STATUS_REG as usize] & SP_STATUS_INTR_BREAK != 0 { + device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_SP) + } + return; + } + if device.rsp.cpu.halted { + device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_HALT; + return; + } + device.rsp.cpu.sync_point = false; + do_task(device) +} + +pub fn init(device: &mut device::Device) { + device.rsp.regs[SP_STATUS_REG as usize] = 1; + device::rsp_cpu::init(device); +} diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs new file mode 100644 index 0000000..697e2e9 --- /dev/null +++ b/src/device/rsp_su_instructions.rs @@ -0,0 +1,1022 @@ +use crate::device; +use std::arch::x86_64::*; + +pub fn rd(opcode: u32) -> u32 { + return (opcode >> 11) & 0x1F; +} + +pub fn rs(opcode: u32) -> u32 { + return (opcode >> 21) & 0x1F; +} + +pub fn rt(opcode: u32) -> u32 { + return (opcode >> 16) & 0x1F; +} + +pub fn sa(opcode: u32) -> u32 { + return (opcode >> 6) & 0x1F; +} + +pub fn imm(opcode: u32) -> u16 { + return opcode as u16; +} + +pub fn voffset(opcode: u32) -> u8 { + return (opcode & 0x7F) as u8; +} + +pub fn velement(opcode: u32) -> u8 { + return ((opcode >> 7) & 0xF) as u8; +} + +pub fn sign_extend_7bit_offset(offset: u8, shift_amount: u32) -> u32 { + let soffset = (((offset << 1) & 0x80) | offset) as i8; + + return (((soffset) as i32) as u32) << shift_amount; +} + +pub fn modify_vpr_byte(vpr: &mut u128, value: u8, element: u8) { + let pos = 15 - (element & 15); + let mask = 0xFF << (pos * 8); + *vpr &= !mask; + *vpr |= (value as u128) << (pos * 8); +} + +pub fn get_vpr_byte(vpr: u128, element: u8) -> u8 { + let pos = 15 - (element & 15); + return (vpr >> (pos * 8)) as u8; +} + +pub fn modify_vpr_element(vpr: &mut u128, value: u16, element: u8) { + let pos = 7 - (element & 7); + let mask = 0xFFFF << (pos * 16); + *vpr &= !mask; + *vpr |= (value as u128) << (pos * 16); +} + +pub fn get_vpr_element(vpr: u128, element: u8) -> u16 { + let pos = 7 - (element & 7); + return (vpr >> (pos * 16)) as u16; +} + +pub fn j(device: &mut device::Device, opcode: u32) { + if device::rsp_cpu::in_delay_slot_taken(device) { + return; + } + device.rsp.cpu.branch_state.state = device::cpu::State::Take; + device.rsp.cpu.branch_state.pc = + (device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + 4) & 0xF0000000 + | ((opcode & 0x3FFFFFF) << 2) as u32 +} + +pub fn jal(device: &mut device::Device, opcode: u32) { + if device::rsp_cpu::in_delay_slot_taken(device) { + device.rsp.cpu.gpr[31] = (device.rsp.cpu.branch_state.pc + 4) & 0xFFF + } else { + device.rsp.cpu.gpr[31] = + (device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + 8) & 0xFFF + } + if !device::rsp_cpu::in_delay_slot_taken(device) { + device.rsp.cpu.branch_state.state = device::cpu::State::Take; + device.rsp.cpu.branch_state.pc = + (device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + 4) & 0xF0000000 + | ((opcode & 0x3FFFFFF) << 2) as u32 + } else if !device::rsp_cpu::in_delay_slot(device) { + device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; + } +} + +pub fn beq(device: &mut device::Device, opcode: u32) { + if device.rsp.cpu.gpr[rs(opcode) as usize] == device.rsp.cpu.gpr[rt(opcode) as usize] { + device.rsp.cpu.branch_state.state = device::cpu::State::Take; + device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + .wrapping_add(imm(opcode << 2) as i16 as i32 as u32) + + 4 + } else { + device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; + } +} + +pub fn bne(device: &mut device::Device, opcode: u32) { + if device.rsp.cpu.gpr[rs(opcode) as usize] != device.rsp.cpu.gpr[rt(opcode) as usize] { + device.rsp.cpu.branch_state.state = device::cpu::State::Take; + device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + .wrapping_add(imm(opcode << 2) as i16 as i32 as u32) + + 4 + } else { + device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; + } +} + +pub fn blez(device: &mut device::Device, opcode: u32) { + if device.rsp.cpu.gpr[rs(opcode) as usize] as i32 <= 0 { + device.rsp.cpu.branch_state.state = device::cpu::State::Take; + device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + .wrapping_add(imm(opcode << 2) as i16 as i32 as u32) + + 4 + } else { + device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; + } +} + +pub fn bgtz(device: &mut device::Device, opcode: u32) { + if device.rsp.cpu.gpr[rs(opcode) as usize] as i32 > 0 { + device.rsp.cpu.branch_state.state = device::cpu::State::Take; + device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + .wrapping_add(imm(opcode << 2) as i16 as i32 as u32) + + 4 + } else { + device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; + } +} + +pub fn addi(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rt(opcode) as usize] = + device.rsp.cpu.gpr[rs(opcode) as usize].wrapping_add(imm(opcode) as i16 as i32 as u32) +} + +pub fn addiu(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rt(opcode) as usize] = + device.rsp.cpu.gpr[rs(opcode) as usize].wrapping_add(imm(opcode) as i16 as i32 as u32) +} + +pub fn slti(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rt(opcode) as usize] = + ((device.rsp.cpu.gpr[rs(opcode) as usize] as i32) < (imm(opcode) as i16 as i32)) as u32 +} + +pub fn sltiu(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rt(opcode) as usize] = + (device.rsp.cpu.gpr[rs(opcode) as usize] < (imm(opcode) as i16 as i32 as u32)) as u32 +} + +pub fn andi(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rt(opcode) as usize] = + device.rsp.cpu.gpr[rs(opcode) as usize] & (imm(opcode)) as u32 +} + +pub fn ori(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rt(opcode) as usize] = + device.rsp.cpu.gpr[rs(opcode) as usize] | (imm(opcode)) as u32 +} + +pub fn xori(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rt(opcode) as usize] = + device.rsp.cpu.gpr[rs(opcode) as usize] ^ (imm(opcode)) as u32 +} + +pub fn lui(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rt(opcode) as usize] = (imm(opcode) as u32) << 16 +} + +pub fn lb(device: &mut device::Device, opcode: u32) { + let address = + device.rsp.cpu.gpr[rs(opcode) as usize].wrapping_add(imm(opcode) as i16 as i32 as u32); + + device.rsp.cpu.gpr[rt(opcode) as usize] = + device.rsp.mem[address as usize & 0xFFF] as i8 as i32 as u32 +} + +pub fn lh(device: &mut device::Device, opcode: u32) { + let address = + device.rsp.cpu.gpr[rs(opcode) as usize].wrapping_add(imm(opcode) as i16 as i32 as u32); + + let mut w = [0; 2]; + w[0] = device.rsp.mem[address as usize & 0xFFF]; + w[1] = device.rsp.mem[(address as usize + 1) & &0xFFF]; + + device.rsp.cpu.gpr[rt(opcode) as usize] = + (((w[0] as u16) << 8) | w[1] as u16) as i16 as i32 as u32 +} + +pub fn lw(device: &mut device::Device, opcode: u32) { + let address = + device.rsp.cpu.gpr[rs(opcode) as usize].wrapping_add(imm(opcode) as i16 as i32 as u32); + + let mut w = [0; 4]; + w[0] = device.rsp.mem[address as usize & 0xFFF]; + w[1] = device.rsp.mem[(address as usize + 1) & &0xFFF]; + w[2] = device.rsp.mem[(address as usize + 2) & &0xFFF]; + w[3] = device.rsp.mem[(address as usize + 3) & &0xFFF]; + + device.rsp.cpu.gpr[rt(opcode) as usize] = + (w[0] as u32) << 24 | (w[1] as u32) << 16 | (w[2] as u32) << 8 | (w[3] as u32) +} + +pub fn lbu(device: &mut device::Device, opcode: u32) { + let address = + device.rsp.cpu.gpr[rs(opcode) as usize].wrapping_add(imm(opcode) as i16 as i32 as u32); + + device.rsp.cpu.gpr[rt(opcode) as usize] = device.rsp.mem[address as usize & 0xFFF] as u32 +} + +pub fn lhu(device: &mut device::Device, opcode: u32) { + let address = + device.rsp.cpu.gpr[rs(opcode) as usize].wrapping_add(imm(opcode) as i16 as i32 as u32); + + let mut w = [0; 2]; + w[0] = device.rsp.mem[address as usize & 0xFFF]; + w[1] = device.rsp.mem[(address as usize + 1) & &0xFFF]; + + device.rsp.cpu.gpr[rt(opcode) as usize] = (((w[0] as u16) << 8) | w[1] as u16) as u32 +} + +pub fn lwu(device: &mut device::Device, opcode: u32) { + let address = + device.rsp.cpu.gpr[rs(opcode) as usize].wrapping_add(imm(opcode) as i16 as i32 as u32); + + let mut w = [0; 4]; + w[0] = device.rsp.mem[address as usize & 0xFFF]; + w[1] = device.rsp.mem[(address as usize + 1) & &0xFFF]; + w[2] = device.rsp.mem[(address as usize + 2) & &0xFFF]; + w[3] = device.rsp.mem[(address as usize + 3) & &0xFFF]; + + device.rsp.cpu.gpr[rt(opcode) as usize] = + (w[0] as u32) << 24 | (w[1] as u32) << 16 | (w[2] as u32) << 8 | (w[3] as u32) +} + +pub fn sb(device: &mut device::Device, opcode: u32) { + let address = + device.rsp.cpu.gpr[rs(opcode) as usize].wrapping_add(imm(opcode) as i16 as i32 as u32); + + device.rsp.mem[address as usize & 0xFFF] = (device.rsp.cpu.gpr[rt(opcode) as usize]) as u8; +} + +pub fn sh(device: &mut device::Device, opcode: u32) { + let address = + device.rsp.cpu.gpr[rs(opcode) as usize].wrapping_add(imm(opcode) as i16 as i32 as u32); + + device.rsp.mem[address as usize & 0xFFF] = (device.rsp.cpu.gpr[rt(opcode) as usize] >> 8) as u8; + device.rsp.mem[(address as usize + 1) & 0xFFF] = + (device.rsp.cpu.gpr[rt(opcode) as usize]) as u8; +} + +pub fn sw(device: &mut device::Device, opcode: u32) { + let address = + device.rsp.cpu.gpr[rs(opcode) as usize].wrapping_add(imm(opcode) as i16 as i32 as u32); + + device.rsp.mem[address as usize & 0xFFF] = + (device.rsp.cpu.gpr[rt(opcode) as usize] >> 24) as u8; + device.rsp.mem[(address as usize + 1) & 0xFFF] = + (device.rsp.cpu.gpr[rt(opcode) as usize] >> 16) as u8; + device.rsp.mem[(address as usize + 2) & 0xFFF] = + (device.rsp.cpu.gpr[rt(opcode) as usize] >> 8) as u8; + device.rsp.mem[(address as usize + 3) & 0xFFF] = + (device.rsp.cpu.gpr[rt(opcode) as usize]) as u8; +} + +pub fn sll(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rd(opcode) as usize] = + (device.rsp.cpu.gpr[rt(opcode) as usize] as u32) << sa(opcode) +} + +pub fn srl(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rd(opcode) as usize] = + (device.rsp.cpu.gpr[rt(opcode) as usize] as u32) >> sa(opcode) +} + +pub fn sra(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rd(opcode) as usize] = + ((device.rsp.cpu.gpr[rt(opcode) as usize] as i32) >> sa(opcode)) as u32 +} + +pub fn sllv(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rd(opcode) as usize] = + device.rsp.cpu.gpr[rt(opcode) as usize] << (device.rsp.cpu.gpr[rs(opcode) as usize] & 31) +} + +pub fn srlv(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rd(opcode) as usize] = + device.rsp.cpu.gpr[rt(opcode) as usize] >> (device.rsp.cpu.gpr[rs(opcode) as usize] & 31) +} + +pub fn srav(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rd(opcode) as usize] = ((device.rsp.cpu.gpr[rt(opcode) as usize] as i32) + >> (device.rsp.cpu.gpr[rs(opcode) as usize] & 31)) + as u32 +} + +pub fn jr(device: &mut device::Device, opcode: u32) { + if !device::rsp_cpu::in_delay_slot_taken(device) { + device.rsp.cpu.branch_state.state = device::cpu::State::Take; + device.rsp.cpu.branch_state.pc = device.rsp.cpu.gpr[rs(opcode) as usize] + } else if !device::rsp_cpu::in_delay_slot(device) { + device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; + } +} + +pub fn jalr(device: &mut device::Device, opcode: u32) { + let in_delay_slot_taken = device::rsp_cpu::in_delay_slot_taken(device); + + if !in_delay_slot_taken { + device.rsp.cpu.branch_state.state = device::cpu::State::Take; + device.rsp.cpu.branch_state.pc = device.rsp.cpu.gpr[rs(opcode) as usize] + } else if !device::rsp_cpu::in_delay_slot(device) { + device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; + } + + if in_delay_slot_taken { + device.rsp.cpu.gpr[rd(opcode) as usize] = (device.rsp.cpu.branch_state.pc + 4) & 0xFFF + } else { + device.rsp.cpu.gpr[rd(opcode) as usize] = + (device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + 8) & 0xFFF + } +} + +pub fn break_(device: &mut device::Device, _opcode: u32) { + device.rsp.cpu.broken = true; +} + +pub fn add(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rd(opcode) as usize] = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(device.rsp.cpu.gpr[rt(opcode) as usize]) +} + +pub fn addu(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rd(opcode) as usize] = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(device.rsp.cpu.gpr[rt(opcode) as usize]) +} + +pub fn sub(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rd(opcode) as usize] = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_sub(device.rsp.cpu.gpr[rt(opcode) as usize]) +} + +pub fn subu(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rd(opcode) as usize] = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_sub(device.rsp.cpu.gpr[rt(opcode) as usize]) +} + +pub fn and(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rd(opcode) as usize] = + device.rsp.cpu.gpr[rs(opcode) as usize] & device.rsp.cpu.gpr[rt(opcode) as usize] +} + +pub fn or(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rd(opcode) as usize] = + device.rsp.cpu.gpr[rs(opcode) as usize] | device.rsp.cpu.gpr[rt(opcode) as usize] +} + +pub fn xor(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rd(opcode) as usize] = + device.rsp.cpu.gpr[rs(opcode) as usize] ^ device.rsp.cpu.gpr[rt(opcode) as usize] +} + +pub fn nor(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rd(opcode) as usize] = + !(device.rsp.cpu.gpr[rs(opcode) as usize] | device.rsp.cpu.gpr[rt(opcode) as usize]) +} + +pub fn slt(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rd(opcode) as usize] = ((device.rsp.cpu.gpr[rs(opcode) as usize] as i32) + < (device.rsp.cpu.gpr[rt(opcode) as usize] as i32)) + as u32 +} + +pub fn sltu(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rd(opcode) as usize] = + (device.rsp.cpu.gpr[rs(opcode) as usize] < device.rsp.cpu.gpr[rt(opcode) as usize]) as u32 +} + +pub fn bltz(device: &mut device::Device, opcode: u32) { + if (device.rsp.cpu.gpr[rs(opcode) as usize] as i32) < 0 { + device.rsp.cpu.branch_state.state = device::cpu::State::Take; + device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + .wrapping_add(imm(opcode << 2) as i16 as i32 as u32) + + 4 + } else { + device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; + } +} + +pub fn bgez(device: &mut device::Device, opcode: u32) { + if device.rsp.cpu.gpr[rs(opcode) as usize] as i32 >= 0 { + device.rsp.cpu.branch_state.state = device::cpu::State::Take; + device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + .wrapping_add(imm(opcode << 2) as i16 as i32 as u32) + + 4 + } else { + device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; + } +} + +pub fn bltzal(device: &mut device::Device, opcode: u32) { + if (device.rsp.cpu.gpr[rs(opcode) as usize] as i32) < 0 { + device.rsp.cpu.branch_state.state = device::cpu::State::Take; + device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + .wrapping_add(imm(opcode << 2) as i16 as i32 as u32) + + 4 + } else { + device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; + } + device.rsp.cpu.gpr[31] = + (device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + 8) & 0xFFF +} + +pub fn bgezal(device: &mut device::Device, opcode: u32) { + if (device.rsp.cpu.gpr[rs(opcode) as usize] as i32) >= 0 { + device.rsp.cpu.branch_state.state = device::cpu::State::Take; + device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + .wrapping_add(imm(opcode << 2) as i16 as i32 as u32) + + 4 + } else { + device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; + } + device.rsp.cpu.gpr[31] = + (device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + 8) & 0xFFF +} + +pub fn mfc0(device: &mut device::Device, opcode: u32) { + if rd(opcode) < device::rsp_interface::SP_REGS_COUNT { + device.rsp.cpu.gpr[rt(opcode) as usize] = device::rsp_interface::read_regs( + device, + (rd(opcode) << 2) as u64, + device::memory::AccessSize::Word, + ) + } else { + device.rsp.cpu.gpr[rt(opcode) as usize] = device::rdp::read_regs_dpc( + device, + ((rd(opcode) - device::rsp_interface::SP_REGS_COUNT) << 2) as u64, + device::memory::AccessSize::Word, + ) + } + device.rsp.cpu.sync_point = true; +} + +pub fn mtc0(device: &mut device::Device, opcode: u32) { + if rd(opcode) < device::rsp_interface::SP_REGS_COUNT { + device::rsp_interface::write_regs( + device, + (rd(opcode) << 2) as u64, + device.rsp.cpu.gpr[rt(opcode) as usize], + 0xFFFFFFFF, + ) + } else { + device::rdp::write_regs_dpc( + device, + ((rd(opcode) - device::rsp_interface::SP_REGS_COUNT) << 2) as u64, + device.rsp.cpu.gpr[rt(opcode) as usize], + 0xFFFFFFFF, + ) + } + if rd(opcode) == device::rsp_interface::SP_STATUS_REG + && device.rsp.cpu.gpr[rt(opcode) as usize] & device::rsp_interface::SP_SET_HALT != 0 + { + device.rsp.regs[device::rsp_interface::SP_STATUS_REG as usize] &= + !device::rsp_interface::SP_STATUS_HALT; // set halt when event happens + device.rsp.cpu.halted = true // the RSP can halt itself by setting SP_SET_HALT + } + device.rsp.cpu.sync_point = true; +} + +pub fn mfc2(device: &mut device::Device, opcode: u32) { + let hi = get_vpr_byte(device.rsp.cpu.vpr[rd(opcode) as usize], velement(opcode)); + let lo = get_vpr_byte( + device.rsp.cpu.vpr[rd(opcode) as usize], + velement(opcode) + 1, + ); + device.rsp.cpu.gpr[rt(opcode) as usize] = ((hi as u16) << 8 | (lo as u16)) as i16 as i32 as u32 +} + +pub fn cfc2(device: &mut device::Device, opcode: u32) { + let hi; + let lo; + let mut zero = unsafe { _mm_setzero_si128() }; + match rd(opcode) & 3 { + 0x00 => { + hi = &mut device.rsp.cpu.vcoh; + lo = &mut device.rsp.cpu.vcol; + } + 0x01 => { + hi = &mut device.rsp.cpu.vcch; + lo = &mut device.rsp.cpu.vccl; + } + 0x02 | 0x03 => { + hi = &mut zero; + lo = &mut device.rsp.cpu.vce; + } + _ => { + panic!("unknown ctc2") + } + } + + unsafe { + let reverse = _mm_set_epi8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + device.rsp.cpu.gpr[rt(opcode) as usize] = + (_mm_movemask_epi8(_mm_shuffle_epi8(_mm_packs_epi16(*hi, *lo), reverse))) as i16 as u32; + } +} + +pub fn mtc2(device: &mut device::Device, opcode: u32) { + modify_vpr_byte( + &mut device.rsp.cpu.vpr[rd(opcode) as usize], + (device.rsp.cpu.gpr[rt(opcode) as usize] >> 8) as u8, + velement(opcode), + ); + if velement(opcode) != 15 { + modify_vpr_byte( + &mut device.rsp.cpu.vpr[rd(opcode) as usize], + device.rsp.cpu.gpr[rt(opcode) as usize] as u8, + velement(opcode) + 1, + ); + } +} + +pub fn ctc2(device: &mut device::Device, opcode: u32) { + let hi; + let lo; + let mut zero = unsafe { _mm_setzero_si128() }; + match rd(opcode) & 3 { + 0x00 => { + hi = &mut device.rsp.cpu.vcoh; + lo = &mut device.rsp.cpu.vcol; + } + 0x01 => { + hi = &mut device.rsp.cpu.vcch; + lo = &mut device.rsp.cpu.vccl; + } + 0x02 | 0x03 => { + hi = &mut zero; + lo = &mut device.rsp.cpu.vce; + } + _ => { + panic!("unknown ctc2") + } + } + + unsafe { + let mask = _mm_set_epi16( + 0x0101, + 0x0202, + 0x0404, + 0x0808, + 0x1010, + 0x2020, + 0x4040, + 0x8080u16 as i16, + ); + *lo = _mm_cmpeq_epi8( + _mm_and_si128( + _mm_set1_epi8(!device.rsp.cpu.gpr[rt(opcode) as usize] as i8), + mask, + ), + _mm_setzero_si128(), + ); + *hi = std::arch::x86_64::_mm_cmpeq_epi8( + _mm_and_si128( + _mm_set1_epi8(!(device.rsp.cpu.gpr[rt(opcode) as usize] >> 8) as i8), + mask, + ), + _mm_setzero_si128(), + ); + } +} + +pub fn lbv(device: &mut device::Device, opcode: u32) { + let address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 0)); + + let element = velement(opcode); + modify_vpr_byte( + &mut device.rsp.cpu.vpr[rt(opcode) as usize], + device.rsp.mem[(address & 0xFFF) as usize], + element, + ); +} + +pub fn lsv(device: &mut device::Device, opcode: u32) { + let mut address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 1)); + + let mut element = velement(opcode); + let end = std::cmp::min(element + 2, 16); + while element < end { + modify_vpr_byte( + &mut device.rsp.cpu.vpr[rt(opcode) as usize], + device.rsp.mem[(address & 0xFFF) as usize], + element, + ); + address += 1; + element += 1; + } +} + +pub fn llv(device: &mut device::Device, opcode: u32) { + let mut address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 2)); + + let mut element = velement(opcode); + let end = std::cmp::min(element + 4, 16); + while element < end { + modify_vpr_byte( + &mut device.rsp.cpu.vpr[rt(opcode) as usize], + device.rsp.mem[(address & 0xFFF) as usize], + element, + ); + address += 1; + element += 1; + } +} + +pub fn ldv(device: &mut device::Device, opcode: u32) { + let mut address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 3)); + + let mut element = velement(opcode); + let end = std::cmp::min(element + 8, 16); + while element < end { + modify_vpr_byte( + &mut device.rsp.cpu.vpr[rt(opcode) as usize], + device.rsp.mem[(address & 0xFFF) as usize], + element, + ); + address += 1; + element += 1; + } +} + +pub fn lqv(device: &mut device::Device, opcode: u32) { + let mut address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 4)); + + let mut element = velement(opcode); + let end = std::cmp::min(16 + element - ((address & 15) as u8), 16); + while element < end { + modify_vpr_byte( + &mut device.rsp.cpu.vpr[rt(opcode) as usize], + device.rsp.mem[(address & 0xFFF) as usize], + element, + ); + address += 1; + element += 1; + } +} + +pub fn lrv(device: &mut device::Device, opcode: u32) { + let mut address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 4)); + + let mut element = 16u8.wrapping_sub(((address & 15) as u8).wrapping_sub(velement(opcode))); + address &= !15; + while element < 16 { + modify_vpr_byte( + &mut device.rsp.cpu.vpr[rt(opcode) as usize], + device.rsp.mem[(address & 0xFFF) as usize], + element, + ); + address += 1; + element += 1; + } +} + +pub fn lpv(device: &mut device::Device, opcode: u32) { + let mut address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 3)); + + let index = ((address & 7) as u8).wrapping_sub(velement(opcode)); + address &= !7; + let mut offset: u8 = 0; + while offset < 8 { + modify_vpr_element( + &mut device.rsp.cpu.vpr[rt(opcode) as usize], + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(offset)) & 15) as u32)) + & 0xFFF) as usize] as u16) + << 8, + offset, + ); + offset += 1; + } +} + +pub fn luv(device: &mut device::Device, opcode: u32) { + let mut address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 3)); + + let index = ((address & 7) as u8).wrapping_sub(velement(opcode)); + address &= !7; + let mut offset: u8 = 0; + while offset < 8 { + modify_vpr_element( + &mut device.rsp.cpu.vpr[rt(opcode) as usize], + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(offset)) & 15) as u32)) + & 0xFFF) as usize] as u16) + << 7, + offset, + ); + offset += 1; + } +} + +pub fn lhv(device: &mut device::Device, opcode: u32) { + let mut address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 4)); + + let index = ((address & 7) as u8).wrapping_sub(velement(opcode)); + address &= !7; + let mut offset: u8 = 0; + while offset < 8 { + modify_vpr_element( + &mut device.rsp.cpu.vpr[rt(opcode) as usize], + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(offset * 2)) & 15) as u32)) + & 0xFFF) as usize] as u16) + << 7, + offset, + ); + offset += 1; + } +} + +pub fn lfv(device: &mut device::Device, opcode: u32) { + let mut address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 4)); + + let index = ((address & 7) as u8).wrapping_sub(velement(opcode)); + address &= !7; + let start = velement(opcode); + let end = std::cmp::min(start + 8, 16); + let mut tmp: u128 = 0; + let mut offset: u8 = 0; + while offset < 4 { + modify_vpr_element( + &mut tmp, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(offset * 4)) & 15) as u32)) + & 0xFFF) as usize] as u16) + << 7, + offset, + ); + modify_vpr_element( + &mut tmp, + (device.rsp.mem[((address + .wrapping_add(((index.wrapping_add(offset * 4).wrapping_add(8)) & 15) as u32)) + & 0xFFF) as usize] as u16) + << 7, + offset + 4, + ); + offset += 1; + } + offset = start; + while offset < end { + let value = get_vpr_byte(tmp, offset); + modify_vpr_byte(&mut device.rsp.cpu.vpr[rt(opcode) as usize], value, offset); + offset += 1; + } +} + +pub fn lwv(_device: &mut device::Device, _opcode: u32) {} + +pub fn ltv(device: &mut device::Device, opcode: u32) { + let mut address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 4)); + + let begin = address & !7; + address = begin + (((velement(opcode)) as u32 + (address & 8)) & 15); + let vtbase = rt(opcode) & !7; + let mut vtoff = (velement(opcode)) as u32 >> 1; + let mut i = 0; + while i < 8 { + modify_vpr_byte( + &mut device.rsp.cpu.vpr[(vtbase + vtoff) as usize], + device.rsp.mem[(address & 0xFFF) as usize], + i * 2, + ); + address += 1; + if address == begin + 16 { + address = begin + } + modify_vpr_byte( + &mut device.rsp.cpu.vpr[(vtbase + vtoff) as usize], + device.rsp.mem[(address & 0xFFF) as usize], + i * 2 + 1, + ); + address += 1; + if address == begin + 16 { + address = begin + } + vtoff = (vtoff + 1) & 7; + i += 1; + } +} + +pub fn sbv(device: &mut device::Device, opcode: u32) { + let address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 0)); + + device.rsp.mem[(address & 0xFFF) as usize] = + get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], velement(opcode)) +} + +pub fn ssv(device: &mut device::Device, opcode: u32) { + let mut address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 1)); + + let mut element = velement(opcode); + let end = element + 2; + while element < end { + device.rsp.mem[(address & 0xFFF) as usize] = + get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], element); + address += 1; + element += 1; + } +} + +pub fn slv(device: &mut device::Device, opcode: u32) { + let mut address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 2)); + + let mut element = velement(opcode); + let end = element + 4; + while element < end { + device.rsp.mem[(address & 0xFFF) as usize] = + get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], element); + address += 1; + element += 1; + } +} + +pub fn sdv(device: &mut device::Device, opcode: u32) { + let mut address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 3)); + + let mut element = velement(opcode); + let end = element + 8; + while element < end { + device.rsp.mem[(address & 0xFFF) as usize] = + get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], element); + address += 1; + element += 1; + } +} + +pub fn sqv(device: &mut device::Device, opcode: u32) { + let mut address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 4)); + + let mut element = velement(opcode); + let end = element + (16 - (address & 15)) as u8; + while element < end { + device.rsp.mem[(address & 0xFFF) as usize] = + get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], element); + address += 1; + element += 1; + } +} + +pub fn srv(device: &mut device::Device, opcode: u32) { + let mut address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 4)); + + let mut element = velement(opcode); + let end = element + (address & 15) as u8; + let base = (16 - (address & 15)) as u8; + address &= !15; + while element < end { + device.rsp.mem[(address & 0xFFF) as usize] = + get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], element + base); + address += 1; + element += 1; + } +} + +pub fn spv(device: &mut device::Device, opcode: u32) { + let mut address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 3)); + + let mut element = velement(opcode); + let end = element + 8; + while element < end { + if (element & 15) < 8 { + device.rsp.mem[(address & 0xFFF) as usize] = + get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], (element & 7) << 1); + } else { + device.rsp.mem[(address & 0xFFF) as usize] = + (get_vpr_element(device.rsp.cpu.vpr[rt(opcode) as usize], element) >> 7) as u8; + } + address += 1; + element += 1; + } +} + +pub fn suv(device: &mut device::Device, opcode: u32) { + let mut address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 3)); + + let mut element = velement(opcode); + let end = element + 8; + while element < end { + if (element & 15) < 8 { + device.rsp.mem[(address & 0xFFF) as usize] = + (get_vpr_element(device.rsp.cpu.vpr[rt(opcode) as usize], element) >> 7) as u8; + } else { + device.rsp.mem[(address & 0xFFF) as usize] = + get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], (element & 7) << 1); + } + address += 1; + element += 1; + } +} + +pub fn shv(device: &mut device::Device, opcode: u32) { + let mut address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 4)); + + let element = velement(opcode); + let index = (address & 7) as u8; + address &= !7; + let mut offset = 0; + while offset < 8 { + let byte_val = element + offset * 2; + let value = get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], byte_val) << 1 + | get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], byte_val + 1) >> 7; + device.rsp.mem[((address + ((index + offset * 2) & 15) as u32) & 0xFFF) as usize] = value; + offset += 1; + } +} + +pub fn sfv(device: &mut device::Device, opcode: u32) { + let mut address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 4)); + let base = address & 7; + address &= !7; + let element = velement(opcode); + let elements; + match element { + 0 | 15 => { + elements = [0, 1, 2, 3]; + } + 1 => { + elements = [6, 7, 4, 5]; + } + 4 => { + elements = [1, 2, 3, 0]; + } + 5 => { + elements = [7, 4, 5, 6]; + } + 8 => { + elements = [4, 5, 6, 7]; + } + 11 => { + elements = [3, 0, 1, 2]; + } + 12 => { + elements = [5, 6, 7, 4]; + } + _ => { + device.rsp.mem[((address + ((base + 0) & 15)) & 0xFFF) as usize] = 0; + device.rsp.mem[((address + ((base + 4) & 15)) & 0xFFF) as usize] = 0; + device.rsp.mem[((address + ((base + 8) & 15)) & 0xFFF) as usize] = 0; + device.rsp.mem[((address + ((base + 12) & 15)) & 0xFFF) as usize] = 0; + return; + } + } + let mut offset = 0; + let mut i = 0; + while i < 4 { + device.rsp.mem[((address + ((base + offset) & 15)) & 0xFFF) as usize] = + (get_vpr_element(device.rsp.cpu.vpr[rt(opcode) as usize], elements[i]) >> 7) as u8; + offset += 4; + i += 1; + } +} + +pub fn swv(device: &mut device::Device, opcode: u32) { + let mut address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 4)); + + let mut element = velement(opcode); + let end = element + 16; + let mut base = address & 7; + address &= !7; + while element < end { + device.rsp.mem[((address + (base & 15)) & 0xFFF) as usize] = + get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], element); + base += 1; + element += 1; + } +} + +pub fn stv(device: &mut device::Device, opcode: u32) { + let mut address = device.rsp.cpu.gpr[rs(opcode) as usize] + .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 4)); + let start = rt(opcode) & !7; + let end = start + 8; + let mut element = 16 - (velement(opcode) & !1); + let mut base = (address & 7).wrapping_sub((velement(opcode) & !1) as u32); + address &= !7; + let mut offset = start; + while offset < end { + device.rsp.mem[((address + (base & 15)) & 0xFFF) as usize] = + get_vpr_byte(device.rsp.cpu.vpr[offset as usize], element); + base = base.wrapping_add(1); + element += 1; + device.rsp.mem[((address + (base & 15)) & 0xFFF) as usize] = + get_vpr_byte(device.rsp.cpu.vpr[offset as usize], element); + base = base.wrapping_add(1); + element += 1; + offset += 1; + } +} + +pub fn reserved(_device: &mut device::Device, _opcode: u32) { + panic!("rsp su reserved") +} diff --git a/src/device/rsp_vu_instructions.rs b/src/device/rsp_vu_instructions.rs new file mode 100644 index 0000000..4c1419f --- /dev/null +++ b/src/device/rsp_vu_instructions.rs @@ -0,0 +1,1253 @@ +use crate::device; +use std::arch::x86_64::*; + +pub fn vt(opcode: u32) -> u32 { + return (opcode >> 16) & 0x1F; +} + +pub fn ve(opcode: u32) -> u32 { + return (opcode >> 21) & 0xF; +} + +pub fn vs(opcode: u32) -> u32 { + return (opcode >> 11) & 0x1F; +} + +pub fn vd(opcode: u32) -> u32 { + return (opcode >> 6) & 0x1F; +} + +pub fn de(opcode: u32) -> u32 { + return (opcode >> 11) & 0x7; +} + +pub fn clamp_signed_32(value: i32) -> i16 { + if value < -32768 { + return -32768; + } + if value > 32767 { + return 32767; + } + return value as i16; +} + +pub fn clamp_signed_64(value: i64) -> i16 { + if value < -32768 { + return -32768; + } + if value > 32767 { + return 32767; + } + return value as i16; +} + +pub fn count_leading_zeros(value: u32) -> u32 { + let mut index = 31; + while index >= 0 { + if (value >> index) & 1 != 0 { + break; + } + index -= 1; + } + return (31 - index) as u32; +} + +pub fn s_clip(x: i64, bits: u32) -> i64 { + let b = (1 as u64) << (bits - 1); + let m = b * 2 - 1; + return ((((x as u64) & m) ^ b).wrapping_sub(b)) as i64; +} + +pub fn modify_vpr_element(vpr: &mut u128, value: u16, element: u8) { + let pos = 7 - (element & 7); + let mask = 0xFFFF << (pos * 16); + *vpr &= !mask; + *vpr |= (value as u128) << (pos * 16); +} + +pub fn get_vpr_element(vpr: u128, element: u8) -> u16 { + let pos = 7 - (element & 7); + return (vpr >> (pos * 16)) as u16; +} + +pub fn vte(vt: u128, index: usize) -> __m128i { + unsafe { + let shuffle = [ + //vector + _mm_set_epi8(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0), //01234567 + _mm_set_epi8(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0), //01234567 + //scalar quarter + _mm_set_epi8(15, 14, 15, 14, 11, 10, 11, 10, 7, 6, 7, 6, 3, 2, 3, 2), //00224466 + _mm_set_epi8(13, 12, 13, 12, 9, 8, 9, 8, 5, 4, 5, 4, 1, 0, 1, 0), //11335577 + //scalar half + _mm_set_epi8(15, 14, 15, 14, 15, 14, 15, 14, 7, 6, 7, 6, 7, 6, 7, 6), //00004444 + _mm_set_epi8(13, 12, 13, 12, 13, 12, 13, 12, 5, 4, 5, 4, 5, 4, 5, 4), //11115555 + _mm_set_epi8(11, 10, 11, 10, 11, 10, 11, 10, 3, 2, 3, 2, 3, 2, 3, 2), //22226666 + _mm_set_epi8(9, 8, 9, 8, 9, 8, 9, 8, 1, 0, 1, 0, 1, 0, 1, 0), //33337777 + //scalar whole + _mm_set_epi8( + 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, + ), //00000000 + _mm_set_epi8( + 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, + ), //11111111 + _mm_set_epi8( + 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, + ), //22222222 + _mm_set_epi8(9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8), //33333333 + _mm_set_epi8(7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6), //44444444 + _mm_set_epi8(5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4), //55555555 + _mm_set_epi8(3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2), //66666666 + _mm_set_epi8(1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0), //77777777 + ]; + return _mm_shuffle_epi8(std::mem::transmute(vt), shuffle[index]); + } +} + +pub fn vmulf(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let (mut lo, mut hi, mut round, mut sign1, sign2, neq, eq, neg); + unsafe { + lo = _mm_mullo_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + round = _mm_cmpeq_epi16(_mm_setzero_si128(), _mm_setzero_si128()); + sign1 = _mm_srli_epi16(lo, 15); + lo = _mm_add_epi16(lo, lo); + round = _mm_slli_epi16(round, 15); + hi = _mm_mulhi_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + sign2 = _mm_srli_epi16(lo, 15); + device.rsp.cpu.accl = _mm_add_epi16(round, lo); + sign1 = _mm_add_epi16(sign1, sign2); + hi = _mm_slli_epi16(hi, 1); + neq = _mm_cmpeq_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + device.rsp.cpu.accm = _mm_add_epi16(hi, sign1); + neg = _mm_srai_epi16(device.rsp.cpu.accm, 15); + + eq = _mm_and_si128(neq, neg); + device.rsp.cpu.acch = _mm_andnot_si128(neq, neg); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute(_mm_add_epi16(device.rsp.cpu.accm, eq)); + } +} + +pub fn vmulu(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let (mut lo, mut hi, mut round, mut sign1, sign2, neq, neg); + unsafe { + lo = _mm_mullo_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + round = _mm_cmpeq_epi16(_mm_setzero_si128(), _mm_setzero_si128()); + sign1 = _mm_srli_epi16(lo, 15); + lo = _mm_add_epi16(lo, lo); + round = _mm_slli_epi16(round, 15); + hi = _mm_mulhi_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + sign2 = _mm_srli_epi16(lo, 15); + device.rsp.cpu.accl = _mm_add_epi16(round, lo); + sign1 = _mm_add_epi16(sign1, sign2); + hi = _mm_slli_epi16(hi, 1); + neq = _mm_cmpeq_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + device.rsp.cpu.accm = _mm_add_epi16(hi, sign1); + neg = _mm_srai_epi16(device.rsp.cpu.accm, 15); + + device.rsp.cpu.acch = _mm_andnot_si128(neq, neg); + hi = _mm_or_si128(device.rsp.cpu.accm, neg); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute(_mm_andnot_si128(device.rsp.cpu.acch, hi)); + } +} + +pub fn vrndp(device: &mut device::Device, opcode: u32) { + let vte = unsafe { + std::mem::transmute(vte( + device.rsp.cpu.vpr[vt(opcode) as usize], + ve(opcode) as usize, + )) + }; + let acch: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.acch) }; + let accm: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accm) }; + let accl: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accl) }; + + let mut n = 0; + while n < 8 { + let mut product = get_vpr_element(vte, n) as i16 as i32; + if vs(opcode) & 1 != 0 { + product <<= 16 + } + let mut acc = 0; + acc |= get_vpr_element(*acch, n) as i64; + acc <<= 16; + acc |= get_vpr_element(*accm, n) as i64; + acc <<= 16; + acc |= get_vpr_element(*accl, n) as i64; + acc <<= 16; + acc >>= 16; + if acc >= 0 { + acc = s_clip(acc + (product as i64), 48) + } + modify_vpr_element(acch, (acc >> 32) as u16, n); + modify_vpr_element(accm, (acc >> 16) as u16, n); + modify_vpr_element(accl, acc as u16, n); + modify_vpr_element( + &mut device.rsp.cpu.vpr[vd(opcode) as usize], + clamp_signed_64(acc >> 16) as u16, + n, + ); + + n += 1; + } +} + +pub fn vmulq(device: &mut device::Device, opcode: u32) { + let vte = unsafe { + std::mem::transmute(vte( + device.rsp.cpu.vpr[vt(opcode) as usize], + ve(opcode) as usize, + )) + }; + let acch: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.acch) }; + let accm: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accm) }; + let accl: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accl) }; + + let mut n = 0; + while n < 8 { + let mut product = (get_vpr_element(device.rsp.cpu.vpr[vs(opcode) as usize], n) as i16 + as i32) + .wrapping_mul(get_vpr_element(vte, n) as i16 as i32); + if product < 0 { + product += 31; + } + modify_vpr_element(acch, (product >> 16) as u16, n); + modify_vpr_element(accm, (product) as u16, n); + modify_vpr_element(accl, 0, n); + modify_vpr_element( + &mut device.rsp.cpu.vpr[vd(opcode) as usize], + (clamp_signed_32(product >> 1) & !15) as u16, + n, + ); + n += 1; + } +} + +pub fn vmudl(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + unsafe { + device.rsp.cpu.accl = _mm_mulhi_epu16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + device.rsp.cpu.accm = _mm_setzero_si128(); + device.rsp.cpu.acch = _mm_setzero_si128(); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + } +} + +pub fn vmudm(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let (sign, vta); + unsafe { + device.rsp.cpu.accl = _mm_mullo_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + device.rsp.cpu.accm = _mm_mulhi_epu16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + sign = _mm_srai_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + 15, + ); + vta = _mm_and_si128(vte, sign); + device.rsp.cpu.accm = _mm_sub_epi16(device.rsp.cpu.accm, vta); + device.rsp.cpu.acch = _mm_srai_epi16(device.rsp.cpu.accm, 15); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accm); + } +} + +pub fn vmudn(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let (sign, vsa); + unsafe { + device.rsp.cpu.accl = _mm_mullo_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + device.rsp.cpu.accm = _mm_mulhi_epu16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + sign = _mm_srai_epi16(vte, 15); + vsa = _mm_and_si128( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + sign, + ); + device.rsp.cpu.accm = _mm_sub_epi16(device.rsp.cpu.accm, vsa); + device.rsp.cpu.acch = _mm_srai_epi16(device.rsp.cpu.accm, 15); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + } +} + +pub fn vmudh(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let (lo, hi); + unsafe { + device.rsp.cpu.accl = _mm_setzero_si128(); + device.rsp.cpu.accm = _mm_mullo_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + device.rsp.cpu.acch = _mm_mulhi_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + lo = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); + hi = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_packs_epi32(lo, hi)); + } +} + +pub fn vmacf(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let (mut lo, mut md, mut hi, mut carry, mut omask); + unsafe { + lo = _mm_mullo_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + hi = _mm_mulhi_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + md = _mm_slli_epi16(hi, 1); + carry = _mm_srli_epi16(lo, 15); + hi = _mm_srai_epi16(hi, 15); + md = _mm_or_si128(md, carry); + lo = _mm_slli_epi16(lo, 1); + omask = _mm_adds_epu16(device.rsp.cpu.accl, lo); + device.rsp.cpu.accl = _mm_add_epi16(device.rsp.cpu.accl, lo); + omask = _mm_cmpeq_epi16(device.rsp.cpu.accl, omask); + omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); + md = _mm_sub_epi16(md, omask); + carry = _mm_cmpeq_epi16(md, _mm_setzero_si128()); + carry = _mm_and_si128(carry, omask); + hi = _mm_sub_epi16(hi, carry); + omask = _mm_adds_epu16(device.rsp.cpu.accm, md); + device.rsp.cpu.accm = _mm_add_epi16(device.rsp.cpu.accm, md); + omask = _mm_cmpeq_epi16(device.rsp.cpu.accm, omask); + omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); + device.rsp.cpu.acch = _mm_add_epi16(device.rsp.cpu.acch, hi); + device.rsp.cpu.acch = _mm_sub_epi16(device.rsp.cpu.acch, omask); + + lo = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); + hi = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_packs_epi32(lo, hi)); + } +} + +pub fn vmacu(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let (mut lo, mut md, mut hi, mut carry, mut omask, mmask, hmask); + unsafe { + lo = _mm_mullo_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + hi = _mm_mulhi_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + md = _mm_slli_epi16(hi, 1); + carry = _mm_srli_epi16(lo, 15); + hi = _mm_srai_epi16(hi, 15); + md = _mm_or_si128(md, carry); + lo = _mm_slli_epi16(lo, 1); + omask = _mm_adds_epu16(device.rsp.cpu.accl, lo); + device.rsp.cpu.accl = _mm_add_epi16(device.rsp.cpu.accl, lo); + omask = _mm_cmpeq_epi16(device.rsp.cpu.accl, omask); + omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); + md = _mm_sub_epi16(md, omask); + carry = _mm_cmpeq_epi16(md, _mm_setzero_si128()); + carry = _mm_and_si128(carry, omask); + hi = _mm_sub_epi16(hi, carry); + omask = _mm_adds_epu16(device.rsp.cpu.accm, md); + device.rsp.cpu.accm = _mm_add_epi16(device.rsp.cpu.accm, md); + omask = _mm_cmpeq_epi16(device.rsp.cpu.accm, omask); + omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); + device.rsp.cpu.acch = _mm_add_epi16(device.rsp.cpu.acch, hi); + device.rsp.cpu.acch = _mm_sub_epi16(device.rsp.cpu.acch, omask); + + mmask = _mm_srai_epi16(device.rsp.cpu.accm, 15); + hmask = _mm_srai_epi16(device.rsp.cpu.acch, 15); + md = _mm_or_si128(mmask, device.rsp.cpu.accm); + omask = _mm_cmpgt_epi16(device.rsp.cpu.acch, _mm_setzero_si128()); + md = _mm_andnot_si128(hmask, md); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_or_si128(omask, md)); + } +} + +pub fn vrndn(device: &mut device::Device, opcode: u32) { + let vte = unsafe { + std::mem::transmute(vte( + device.rsp.cpu.vpr[vt(opcode) as usize], + ve(opcode) as usize, + )) + }; + let acch: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.acch) }; + let accm: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accm) }; + let accl: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accl) }; + + let mut n = 0; + while n < 8 { + let mut product = get_vpr_element(vte, n) as i16 as i32; + if vs(opcode) & 1 != 0 { + product <<= 16 + } + let mut acc = 0; + acc |= get_vpr_element(*acch, n) as i64; + acc <<= 16; + acc |= get_vpr_element(*accm, n) as i64; + acc <<= 16; + acc |= get_vpr_element(*accl, n) as i64; + acc <<= 16; + acc >>= 16; + if acc < 0 { + acc = s_clip(acc + (product as i64), 48) + } + modify_vpr_element(acch, (acc >> 32) as u16, n); + modify_vpr_element(accm, (acc >> 16) as u16, n); + modify_vpr_element(accl, acc as u16, n); + modify_vpr_element( + &mut device.rsp.cpu.vpr[vd(opcode) as usize], + clamp_signed_64(acc >> 16) as u16, + n, + ); + + n += 1; + } +} + +pub fn vmacq(device: &mut device::Device, opcode: u32) { + let acch: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.acch) }; + let accm: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accm) }; + + let mut n = 0; + while n < 8 { + let mut product = + (get_vpr_element(*acch, n) as i32) << 16 | (get_vpr_element(*accm, n) as i32); + if product < 0 && (product & (1 << 5)) == 0 { + product += 32 + } else if product >= 32 && (product & (1 << 5)) == 0 { + product -= 32 + } + modify_vpr_element(acch, (product >> 16) as u16, n); + modify_vpr_element(accm, (product) as u16, n); + modify_vpr_element( + &mut device.rsp.cpu.vpr[vd(opcode) as usize], + (clamp_signed_32(product >> 1) & !15) as u16, + n, + ); + n += 1; + } +} + +pub fn vmadl(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let (mut hi, mut omask, nhi, nmd, shi, smd, cmask, cval); + unsafe { + hi = _mm_mulhi_epu16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + omask = _mm_adds_epu16(device.rsp.cpu.accl, hi); + device.rsp.cpu.accl = _mm_add_epi16(device.rsp.cpu.accl, hi); + omask = _mm_cmpeq_epi16(device.rsp.cpu.accl, omask); + omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); + hi = _mm_sub_epi16(_mm_setzero_si128(), omask); + omask = _mm_adds_epu16(device.rsp.cpu.accm, hi); + device.rsp.cpu.accm = _mm_add_epi16(device.rsp.cpu.accm, hi); + omask = _mm_cmpeq_epi16(device.rsp.cpu.accm, omask); + omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); + device.rsp.cpu.acch = _mm_sub_epi16(device.rsp.cpu.acch, omask); + nhi = _mm_srai_epi16(device.rsp.cpu.acch, 15); + nmd = _mm_srai_epi16(device.rsp.cpu.accm, 15); + shi = _mm_cmpeq_epi16(nhi, device.rsp.cpu.acch); + smd = _mm_cmpeq_epi16(nhi, nmd); + cmask = _mm_and_si128(smd, shi); + cval = _mm_cmpeq_epi16(nhi, _mm_setzero_si128()); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute(_mm_blendv_epi8(cval, device.rsp.cpu.accl, cmask)); + } +} + +pub fn vmadm(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let (mut lo, mut hi, sign, vta, mut omask); + unsafe { + lo = _mm_mullo_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + hi = _mm_mulhi_epu16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + sign = _mm_srai_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + 15, + ); + vta = _mm_and_si128(vte, sign); + hi = _mm_sub_epi16(hi, vta); + omask = _mm_adds_epu16(device.rsp.cpu.accl, lo); + device.rsp.cpu.accl = _mm_add_epi16(device.rsp.cpu.accl, lo); + omask = _mm_cmpeq_epi16(device.rsp.cpu.accl, omask); + omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); + hi = _mm_sub_epi16(hi, omask); + omask = _mm_adds_epu16(device.rsp.cpu.accm, hi); + device.rsp.cpu.accm = _mm_add_epi16(device.rsp.cpu.accm, hi); + omask = _mm_cmpeq_epi16(device.rsp.cpu.accm, omask); + omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); + hi = _mm_srai_epi16(hi, 15); + device.rsp.cpu.acch = _mm_add_epi16(device.rsp.cpu.acch, hi); + device.rsp.cpu.acch = _mm_sub_epi16(device.rsp.cpu.acch, omask); + lo = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); + hi = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_packs_epi32(lo, hi)); + } +} + +pub fn vmadn(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let (lo, mut hi, sign, vsa, mut omask, nhi, nmd, shi, smd, cmask, cval); + unsafe { + lo = _mm_mullo_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + hi = _mm_mulhi_epu16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + sign = _mm_srai_epi16(vte, 15); + vsa = _mm_and_si128( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + sign, + ); + hi = _mm_sub_epi16(hi, vsa); + omask = _mm_adds_epu16(device.rsp.cpu.accl, lo); + device.rsp.cpu.accl = _mm_add_epi16(device.rsp.cpu.accl, lo); + omask = _mm_cmpeq_epi16(device.rsp.cpu.accl, omask); + omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); + hi = _mm_sub_epi16(hi, omask); + omask = _mm_adds_epu16(device.rsp.cpu.accm, hi); + device.rsp.cpu.accm = _mm_add_epi16(device.rsp.cpu.accm, hi); + omask = _mm_cmpeq_epi16(device.rsp.cpu.accm, omask); + omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); + hi = _mm_srai_epi16(hi, 15); + device.rsp.cpu.acch = _mm_add_epi16(device.rsp.cpu.acch, hi); + device.rsp.cpu.acch = _mm_sub_epi16(device.rsp.cpu.acch, omask); + nhi = _mm_srai_epi16(device.rsp.cpu.acch, 15); + nmd = _mm_srai_epi16(device.rsp.cpu.accm, 15); + shi = _mm_cmpeq_epi16(nhi, device.rsp.cpu.acch); + smd = _mm_cmpeq_epi16(nhi, nmd); + cmask = _mm_and_si128(smd, shi); + cval = _mm_cmpeq_epi16(nhi, _mm_setzero_si128()); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute(_mm_blendv_epi8(cval, device.rsp.cpu.accl, cmask)); + } +} + +pub fn vmadh(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let (mut lo, mut hi, mut omask); + unsafe { + lo = _mm_mullo_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + hi = _mm_mulhi_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + omask = _mm_adds_epu16(device.rsp.cpu.accm, lo); + device.rsp.cpu.accm = _mm_add_epi16(device.rsp.cpu.accm, lo); + omask = _mm_cmpeq_epi16(device.rsp.cpu.accm, omask); + omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); + hi = _mm_sub_epi16(hi, omask); + device.rsp.cpu.acch = _mm_add_epi16(device.rsp.cpu.acch, hi); + lo = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); + hi = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_packs_epi32(lo, hi)); + } +} + +pub fn vadd(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let (sum, mut min, max); + unsafe { + sum = _mm_add_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + device.rsp.cpu.accl = _mm_sub_epi16(sum, device.rsp.cpu.vcol); + min = _mm_min_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + max = _mm_max_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + min = _mm_subs_epi16(min, device.rsp.cpu.vcol); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_adds_epi16(min, max)); + device.rsp.cpu.vcol = _mm_setzero_si128(); + device.rsp.cpu.vcoh = _mm_setzero_si128(); + } +} + +pub fn vsub(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let (udiff, sdiff, ov); + unsafe { + udiff = _mm_sub_epi16(vte, device.rsp.cpu.vcol); + sdiff = _mm_subs_epi16(vte, device.rsp.cpu.vcol); + device.rsp.cpu.accl = _mm_sub_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + udiff, + ); + ov = _mm_cmpgt_epi16(sdiff, udiff); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_subs_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + sdiff, + )); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_adds_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vd(opcode) as usize]), + ov, + )); + device.rsp.cpu.vcol = _mm_setzero_si128(); + device.rsp.cpu.vcoh = _mm_setzero_si128(); + } +} + +pub fn vzero(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + unsafe { + device.rsp.cpu.accl = _mm_add_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_xor_si128( + std::mem::transmute(device.rsp.cpu.vpr[vd(opcode) as usize]), + std::mem::transmute(device.rsp.cpu.vpr[vd(opcode) as usize]), + )); + } +} + +pub fn vabs(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let (vs0, slt); + unsafe { + vs0 = _mm_cmpeq_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + _mm_setzero_si128(), + ); + slt = _mm_srai_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + 15, + ); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_andnot_si128(vs0, vte)); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_xor_si128( + std::mem::transmute(device.rsp.cpu.vpr[vd(opcode) as usize]), + slt, + )); + device.rsp.cpu.accl = _mm_sub_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vd(opcode) as usize]), + slt, + ); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_subs_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vd(opcode) as usize]), + slt, + )); + } +} + +pub fn vaddc(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let sum; + unsafe { + sum = _mm_adds_epu16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + device.rsp.cpu.accl = _mm_add_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + device.rsp.cpu.vcol = _mm_cmpeq_epi16(sum, device.rsp.cpu.accl); + device.rsp.cpu.vcol = _mm_cmpeq_epi16(device.rsp.cpu.vcol, _mm_setzero_si128()); + device.rsp.cpu.vcoh = _mm_setzero_si128(); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + } +} + +pub fn vsubc(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let (equal, udiff, diff0); + unsafe { + udiff = _mm_subs_epu16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + equal = _mm_cmpeq_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + diff0 = _mm_cmpeq_epi16(udiff, _mm_setzero_si128()); + device.rsp.cpu.vcoh = _mm_cmpeq_epi16(equal, _mm_setzero_si128()); + device.rsp.cpu.vcol = _mm_andnot_si128(equal, diff0); + device.rsp.cpu.accl = _mm_sub_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + } +} + +pub fn vsar(device: &mut device::Device, opcode: u32) { + match ve(opcode) { + 0x8 => { + device.rsp.cpu.vpr[vd(opcode) as usize] = + unsafe { std::mem::transmute(device.rsp.cpu.acch) }; + } + 0x9 => { + device.rsp.cpu.vpr[vd(opcode) as usize] = + unsafe { std::mem::transmute(device.rsp.cpu.accm) }; + } + 0xa => { + device.rsp.cpu.vpr[vd(opcode) as usize] = + unsafe { std::mem::transmute(device.rsp.cpu.accl) }; + } + _ => { + device.rsp.cpu.vpr[vd(opcode) as usize] = 0; + } + } +} + +pub fn vlt(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let (mut eq, lt); + unsafe { + eq = _mm_cmpeq_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + lt = _mm_cmplt_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + eq = _mm_and_si128(device.rsp.cpu.vcoh, eq); + eq = _mm_and_si128(device.rsp.cpu.vcol, eq); + device.rsp.cpu.vccl = _mm_or_si128(lt, eq); + device.rsp.cpu.accl = _mm_blendv_epi8( + vte, + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + device.rsp.cpu.vccl, + ); + device.rsp.cpu.vcch = _mm_setzero_si128(); + device.rsp.cpu.vcoh = _mm_setzero_si128(); + device.rsp.cpu.vcol = _mm_setzero_si128(); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + } +} + +pub fn veq(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let eq; + unsafe { + eq = _mm_cmpeq_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + device.rsp.cpu.vccl = _mm_andnot_si128(device.rsp.cpu.vcoh, eq); + device.rsp.cpu.accl = _mm_blendv_epi8( + vte, + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + device.rsp.cpu.vccl, + ); + device.rsp.cpu.vcch = _mm_setzero_si128(); //unverified + device.rsp.cpu.vcoh = _mm_setzero_si128(); + device.rsp.cpu.vcol = _mm_setzero_si128(); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + } +} + +pub fn vne(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let (eq, ne); + unsafe { + eq = _mm_cmpeq_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + ne = _mm_cmpeq_epi16(eq, _mm_setzero_si128()); + device.rsp.cpu.vccl = _mm_and_si128(device.rsp.cpu.vcoh, eq); + device.rsp.cpu.vccl = _mm_or_si128(device.rsp.cpu.vccl, ne); + device.rsp.cpu.accl = _mm_blendv_epi8( + vte, + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + device.rsp.cpu.vccl, + ); + device.rsp.cpu.vcch = _mm_setzero_si128(); + device.rsp.cpu.vcoh = _mm_setzero_si128(); + device.rsp.cpu.vcol = _mm_setzero_si128(); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + } +} + +pub fn vge(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let (mut eq, gt, es); + unsafe { + eq = _mm_cmpeq_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + gt = _mm_cmpgt_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + es = _mm_and_si128(device.rsp.cpu.vcoh, device.rsp.cpu.vcol); + eq = _mm_andnot_si128(es, eq); + device.rsp.cpu.vccl = _mm_or_si128(gt, eq); + device.rsp.cpu.accl = _mm_blendv_epi8( + vte, + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + device.rsp.cpu.vccl, + ); + device.rsp.cpu.vcch = _mm_setzero_si128(); + device.rsp.cpu.vcoh = _mm_setzero_si128(); + device.rsp.cpu.vcol = _mm_setzero_si128(); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + } +} + +pub fn vcl(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let ( + mut nvt, + diff, + mut ncarry, + nvce, + diff0, + mut lec1, + mut lec2, + leeq, + mut geeq, + mut le, + mut ge, + mask, + ); + unsafe { + nvt = _mm_xor_si128(vte, device.rsp.cpu.vcol); + nvt = _mm_sub_epi16(nvt, device.rsp.cpu.vcol); + diff = _mm_sub_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + nvt, + ); + ncarry = _mm_adds_epu16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + ncarry = _mm_cmpeq_epi16(diff, ncarry); + nvce = _mm_cmpeq_epi16(device.rsp.cpu.vce, _mm_setzero_si128()); + diff0 = _mm_cmpeq_epi16(diff, _mm_setzero_si128()); + lec1 = _mm_and_si128(diff0, ncarry); + lec1 = _mm_and_si128(nvce, lec1); + lec2 = _mm_or_si128(diff0, ncarry); + lec2 = _mm_and_si128(device.rsp.cpu.vce, lec2); + leeq = _mm_or_si128(lec1, lec2); + geeq = _mm_subs_epu16( + vte, + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + ); + geeq = _mm_cmpeq_epi16(geeq, _mm_setzero_si128()); + le = _mm_andnot_si128(device.rsp.cpu.vcoh, device.rsp.cpu.vcol); + le = _mm_blendv_epi8(device.rsp.cpu.vccl, leeq, le); + ge = _mm_or_si128(device.rsp.cpu.vcol, device.rsp.cpu.vcoh); + ge = _mm_blendv_epi8(geeq, device.rsp.cpu.vcch, ge); + mask = _mm_blendv_epi8(ge, le, device.rsp.cpu.vcol); + device.rsp.cpu.accl = _mm_blendv_epi8( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + nvt, + mask, + ); + device.rsp.cpu.vcch = ge; + device.rsp.cpu.vccl = le; + device.rsp.cpu.vcoh = _mm_setzero_si128(); + device.rsp.cpu.vcol = _mm_setzero_si128(); + device.rsp.cpu.vce = _mm_setzero_si128(); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + } +} + +pub fn vch(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let (mut nvt, diff, diff0, vtn, mut dlez, dgez, mask); + unsafe { + device.rsp.cpu.vcol = _mm_xor_si128( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + device.rsp.cpu.vcol = _mm_cmplt_epi16(device.rsp.cpu.vcol, _mm_setzero_si128()); + nvt = _mm_xor_si128(vte, device.rsp.cpu.vcol); + nvt = _mm_sub_epi16(nvt, device.rsp.cpu.vcol); + diff = _mm_sub_epi16( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + nvt, + ); + diff0 = _mm_cmpeq_epi16(diff, _mm_setzero_si128()); + vtn = _mm_cmplt_epi16(vte, _mm_setzero_si128()); + dlez = _mm_cmpgt_epi16(diff, _mm_setzero_si128()); + dgez = _mm_or_si128(dlez, diff0); + dlez = _mm_cmpeq_epi16(_mm_setzero_si128(), dlez); + device.rsp.cpu.vcch = _mm_blendv_epi8(dgez, vtn, device.rsp.cpu.vcol); + device.rsp.cpu.vccl = _mm_blendv_epi8(vtn, dlez, device.rsp.cpu.vcol); + device.rsp.cpu.vce = _mm_cmpeq_epi16(diff, device.rsp.cpu.vcol); + device.rsp.cpu.vce = _mm_and_si128(device.rsp.cpu.vce, device.rsp.cpu.vcol); + device.rsp.cpu.vcoh = _mm_or_si128(diff0, device.rsp.cpu.vce); + device.rsp.cpu.vcoh = _mm_cmpeq_epi16(device.rsp.cpu.vcoh, _mm_setzero_si128()); + mask = _mm_blendv_epi8( + device.rsp.cpu.vcch, + device.rsp.cpu.vccl, + device.rsp.cpu.vcol, + ); + device.rsp.cpu.accl = _mm_blendv_epi8( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + nvt, + mask, + ); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + } +} + +pub fn vcr(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let (mut sign, mut dlez, mut dgez, nvt, mask); + unsafe { + sign = _mm_xor_si128( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + sign = _mm_srai_epi16(sign, 15); + dlez = _mm_and_si128( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + sign, + ); + dlez = _mm_add_epi16(dlez, vte); + device.rsp.cpu.vccl = _mm_srai_epi16(dlez, 15); + dgez = _mm_or_si128( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + sign, + ); + dgez = _mm_min_epi16(dgez, vte); + device.rsp.cpu.vcch = _mm_cmpeq_epi16(dgez, vte); + nvt = _mm_xor_si128(vte, sign); + mask = _mm_blendv_epi8(device.rsp.cpu.vcch, device.rsp.cpu.vccl, sign); + device.rsp.cpu.accl = _mm_blendv_epi8( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + nvt, + mask, + ); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + device.rsp.cpu.vcol = _mm_setzero_si128(); + device.rsp.cpu.vcoh = _mm_setzero_si128(); + device.rsp.cpu.vce = _mm_setzero_si128(); + } +} + +pub fn vmrg(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + unsafe { + device.rsp.cpu.accl = _mm_blendv_epi8( + vte, + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + device.rsp.cpu.vccl, + ); + device.rsp.cpu.vcoh = _mm_setzero_si128(); + device.rsp.cpu.vcol = _mm_setzero_si128(); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + } +} + +pub fn vand(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + unsafe { + device.rsp.cpu.accl = _mm_and_si128( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + } +} + +pub fn vnand(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + unsafe { + device.rsp.cpu.accl = _mm_and_si128( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + device.rsp.cpu.accl = _mm_xor_si128(device.rsp.cpu.accl, _mm_set1_epi32(-1)); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + } +} + +pub fn vor(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + unsafe { + device.rsp.cpu.accl = _mm_or_si128( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + } +} + +pub fn vnor(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + unsafe { + device.rsp.cpu.accl = _mm_or_si128( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + device.rsp.cpu.accl = _mm_xor_si128(device.rsp.cpu.accl, _mm_set1_epi32(-1)); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + } +} + +pub fn vxor(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + unsafe { + device.rsp.cpu.accl = _mm_xor_si128( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + } +} + +pub fn vnxor(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + unsafe { + device.rsp.cpu.accl = _mm_xor_si128( + std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + vte, + ); + device.rsp.cpu.accl = _mm_xor_si128(device.rsp.cpu.accl, _mm_set1_epi32(-1)); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + } +} + +pub fn vrcp(device: &mut device::Device, opcode: u32) { + let mut result; + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let input = + get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32; + let mask = input >> 31; + let mut data = input ^ mask; + if input > -32768 { + data -= mask + } + if data == 0 { + result = 0x7fffffff + } else if input == -32768 { + result = 0xffff0000 + } else { + let shift = count_leading_zeros(data as u32); + let index = (((data as u64) << shift) & 0x7fc00000) >> 22; + result = device.rsp.cpu.reciprocals[index as usize] as u32; + result = (0x10000 | result) << 14; + result = (result >> (31 - shift)) ^ mask as u32 + } + device.rsp.cpu.divdp = false; + device.rsp.cpu.divout = (result >> 16) as i16; + device.rsp.cpu.accl = vte; + modify_vpr_element( + &mut device.rsp.cpu.vpr[vd(opcode) as usize], + result as u16, + de(opcode) as u8, + ); +} + +pub fn vrcpl(device: &mut device::Device, opcode: u32) { + let mut result; + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let input; + if device.rsp.cpu.divdp { + input = (device.rsp.cpu.divin as i32) << 16 + | get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as u16 + as i32 + } else { + input = get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 + as i32; + } + let mask = input >> 31; + let mut data = input ^ mask; + if input > -32768 { + data -= mask + } + if data == 0 { + result = 0x7fffffff + } else if input == -32768 { + result = 0xffff0000 + } else { + let shift = count_leading_zeros(data as u32); + let index = (((data as u64) << shift) & 0x7fc00000) >> 22; + result = device.rsp.cpu.reciprocals[index as usize] as u32; + result = (0x10000 | result) << 14; + result = (result >> (31 - shift)) ^ mask as u32 + } + device.rsp.cpu.divdp = false; + device.rsp.cpu.divout = (result >> 16) as i16; + device.rsp.cpu.accl = vte; + modify_vpr_element( + &mut device.rsp.cpu.vpr[vd(opcode) as usize], + result as u16, + de(opcode) as u8, + ); +} + +pub fn vrcph(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + device.rsp.cpu.accl = vte; + device.rsp.cpu.divdp = true; + + device.rsp.cpu.divin = + get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16; + modify_vpr_element( + &mut device.rsp.cpu.vpr[vd(opcode) as usize], + device.rsp.cpu.divout as u16, + de(opcode) as u8, + ); +} + +pub fn vmov(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let value = get_vpr_element(unsafe { std::mem::transmute(vte) }, de(opcode) as u8); + modify_vpr_element( + &mut device.rsp.cpu.vpr[vd(opcode) as usize], + value, + de(opcode) as u8, + ); + device.rsp.cpu.accl = vte; +} + +pub fn vrsq(device: &mut device::Device, opcode: u32) { + let mut result; + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let input = + get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32; + let mask = input >> 31; + let mut data = input ^ mask; + if input > -32768 { + data -= mask + } + if data == 0 { + result = 0x7fffffff + } else if input == -32768 { + result = 0xffff0000 + } else { + let shift = count_leading_zeros(data as u32); + let index = (((data as u64) << shift) & 0x7fc00000) as u32 >> 22; + result = + (device.rsp.cpu.inverse_square_roots[((index & 0x1fe) | (shift & 1)) as usize]) as u32; + result = (0x10000 | result) << 14; + result = (result >> ((31 - shift) >> 1)) ^ mask as u32 + } + device.rsp.cpu.divdp = false; + device.rsp.cpu.divout = (result >> 16) as i16; + device.rsp.cpu.accl = vte; + modify_vpr_element( + &mut device.rsp.cpu.vpr[vd(opcode) as usize], + result as u16, + de(opcode) as u8, + ); +} + +pub fn vrsql(device: &mut device::Device, opcode: u32) { + let mut result; + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let input; + if device.rsp.cpu.divdp { + input = (device.rsp.cpu.divin as i32) << 16 + | get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as u16 + as i32; + } else { + input = get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 + as i32; + } + let mask = input >> 31; + let mut data = input ^ mask; + if input > -32768 { + data -= mask + } + if data == 0 { + result = 0x7fffffff + } else if input == -32768 { + result = 0xffff0000 + } else { + let shift = count_leading_zeros(data as u32); + let index = (((data as u64) << shift) & 0x7fc00000) as u32 >> 22; + result = + (device.rsp.cpu.inverse_square_roots[((index & 0x1fe) | (shift & 1)) as usize]) as u32; + result = (0x10000 | result) << 14; + result = (result >> ((31 - shift) >> 1)) ^ mask as u32 + } + device.rsp.cpu.divdp = false; + device.rsp.cpu.divout = (result >> 16) as i16; + device.rsp.cpu.accl = vte; + modify_vpr_element( + &mut device.rsp.cpu.vpr[vd(opcode) as usize], + result as u16, + de(opcode) as u8, + ); +} + +pub fn vrsqh(device: &mut device::Device, opcode: u32) { + let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + device.rsp.cpu.accl = vte; + device.rsp.cpu.divdp = true; + + device.rsp.cpu.divin = + get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16; + modify_vpr_element( + &mut device.rsp.cpu.vpr[vd(opcode) as usize], + device.rsp.cpu.divout as u16, + de(opcode) as u8, + ); +} + +pub fn vnop(_device: &mut device::Device, _opcode: u32) {} + +pub fn execute_vec(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.vec_instrs[(opcode & 0x3F) as usize](device, opcode) +} + +pub fn reserved(_device: &mut device::Device, _opcode: u32) { + panic!("rsp vu reserved") +} diff --git a/src/device/si.rs b/src/device/si.rs new file mode 100644 index 0000000..97cab13 --- /dev/null +++ b/src/device/si.rs @@ -0,0 +1,119 @@ +use crate::device; + +pub const SI_DRAM_ADDR_REG: u32 = 0; +pub const SI_PIF_ADDR_RD64B_REG: u32 = 1; +//pub const SI_R2_REG: u32 = 2; +//pub const SI_R3_REG: u32 = 3; +pub const SI_PIF_ADDR_WR64B_REG: u32 = 4; +//pub const SI_R5_REG: u32 = 5; +pub const SI_STATUS_REG: u32 = 6; +pub const SI_REGS_COUNT: u32 = 7; + +pub const SI_STATUS_DMA_BUSY: u32 = 1 << 0; +pub const SI_STATUS_IO_BUSY: u32 = 1 << 1; +//pub const SI_STATUS_DMA_ERROR: u32 = 1 << 3; +pub const SI_STATUS_INTERRUPT: u32 = 1 << 12; + +#[derive(PartialEq)] +pub enum DmaDir { + None, + Write, + Read, +} + +pub struct Si { + pub regs: [u32; SI_REGS_COUNT as usize], + pub dma_dir: DmaDir, +} + +pub fn read_regs( + device: &mut device::Device, + address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + return device.si.regs[((address & 0xFFFF) >> 2) as usize]; +} + +pub fn dma_read(device: &mut device::Device) { + device.si.dma_dir = DmaDir::Read; + + let duration = device::pif::update_pif_ram(device); + + device.si.regs[SI_STATUS_REG as usize] |= SI_STATUS_DMA_BUSY; + + device::events::create_event( + device, + device::events::EventType::SI, + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + duration, + dma_event, + ) +} + +pub fn dma_write(device: &mut device::Device) { + device.si.dma_dir = DmaDir::Write; + + copy_pif_rdram(device); + + device.si.regs[SI_STATUS_REG as usize] |= SI_STATUS_DMA_BUSY; + + device::events::create_event( + device, + device::events::EventType::SI, + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + 5200, //based on https://github.com/rasky/n64-systembench + dma_event, + ) +} + +pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { + let reg = (address & 0xFFFF) >> 2; + match reg as u32 { + SI_STATUS_REG => { + device.si.regs[reg as usize] &= !SI_STATUS_INTERRUPT; + device::mi::clear_rcp_interrupt(device, device::mi::MI_INTR_SI) + } + SI_PIF_ADDR_RD64B_REG => dma_read(device), + SI_PIF_ADDR_WR64B_REG => dma_write(device), + _ => device::memory::masked_write_32(&mut device.si.regs[reg as usize], value, mask), + } +} + +//rdram is in native endian format, and pif memory is in big endian format +pub fn copy_pif_rdram(device: &mut device::Device) { + let dram_addr = device.si.regs[SI_DRAM_ADDR_REG as usize] as usize & device::rdram::RDRAM_MASK; + if device.si.dma_dir == DmaDir::Write { + let mut i = 0; + while i < device::pif::PIF_RAM_SIZE { + let data = u32::from_ne_bytes( + device.rdram.mem[dram_addr + i..dram_addr + i + 4] + .try_into() + .unwrap(), + ); + device.pif.ram[i..i + 4].copy_from_slice(&data.to_be_bytes()); + i += 4; + } + } else if device.si.dma_dir == DmaDir::Read { + let mut i = 0; + while i < device::pif::PIF_RAM_SIZE { + let data = u32::from_be_bytes(device.pif.ram[i..i + 4].try_into().unwrap()); + device.rdram.mem[dram_addr + i..dram_addr + i + 4].copy_from_slice(&data.to_ne_bytes()); + i += 4; + } + } else { + panic!("si dma unknown") + } +} + +pub fn dma_event(device: &mut device::Device) { + if device.si.dma_dir == DmaDir::Write { + device::pif::process_ram(device); + } else if device.si.dma_dir == DmaDir::Read { + device::si::copy_pif_rdram(device); + } else { + panic!("si dma unknown") + } + device.si.dma_dir = DmaDir::None; + device.si.regs[SI_STATUS_REG as usize] &= !(SI_STATUS_DMA_BUSY | SI_STATUS_IO_BUSY); + device.si.regs[SI_STATUS_REG as usize] |= SI_STATUS_INTERRUPT; + + device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_SI) +} diff --git a/src/device/sram.rs b/src/device/sram.rs new file mode 100644 index 0000000..7a06aed --- /dev/null +++ b/src/device/sram.rs @@ -0,0 +1,13 @@ +use crate::device; + +pub fn read_mem( + _device: &mut device::Device, + _address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + panic!("sream read"); +} + +pub fn write_mem(_device: &mut device::Device, _address: u64, _value: u32, _mask: u32) { + panic!("sram write"); +} diff --git a/src/device/tlb.rs b/src/device/tlb.rs new file mode 100644 index 0000000..35d8e7a --- /dev/null +++ b/src/device/tlb.rs @@ -0,0 +1,269 @@ +use crate::device; + +#[derive(Copy, Clone)] +pub struct TlbLut { + pub address: u64, + pub cached: bool, +} + +#[derive(Copy, Clone)] +pub struct TlbEntry { + pub mask: u64, + pub vpn2: u64, + pub region: u8, + pub g: u8, + pub asid: u8, + pub pfn_even: u64, + pub c_even: u8, + pub d_even: u8, + pub v_even: u8, + pub pfn_odd: u64, + pub c_odd: u8, + pub d_odd: u8, + pub v_odd: u8, + + pub start_even: u64, + pub end_even: u64, + pub phys_even: u64, + pub start_odd: u64, + pub end_odd: u64, + pub phys_odd: u64, +} + +pub fn read(device: &mut device::Device, index: u64) { + if index > 31 { + return; + } + device.cpu.cop0.regs[device::cop0::COP0_PAGEMASK_REG as usize] = + (device.cpu.cop0.tlb_entries[index as usize].mask << 13) as u64; + + device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] = + (device.cpu.cop0.tlb_entries[index as usize].region as u64) << 62 + | device.cpu.cop0.tlb_entries[index as usize].vpn2 << 13 + | (device.cpu.cop0.tlb_entries[index as usize].asid) as u64; + + device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO0_REG as usize] = + (device.cpu.cop0.tlb_entries[index as usize].pfn_even << 6) + | (device.cpu.cop0.tlb_entries[index as usize].c_even << 3) as u64 + | (device.cpu.cop0.tlb_entries[index as usize].d_even << 2) as u64 + | (device.cpu.cop0.tlb_entries[index as usize].v_even << 1) as u64 + | (device.cpu.cop0.tlb_entries[index as usize].g) as u64; + + device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO1_REG as usize] = + (device.cpu.cop0.tlb_entries[index as usize].pfn_odd << 6) + | (device.cpu.cop0.tlb_entries[index as usize].c_odd << 3) as u64 + | (device.cpu.cop0.tlb_entries[index as usize].d_odd << 2) as u64 + | (device.cpu.cop0.tlb_entries[index as usize].v_odd << 1) as u64 + | (device.cpu.cop0.tlb_entries[index as usize].g) as u64 +} + +pub fn write(device: &mut device::Device, index: u64) { + if index > 31 { + return; + } + tlb_unmap(device, index); + + device.cpu.cop0.tlb_entries[index as usize].g = (device.cpu.cop0.regs + [device::cop0::COP0_ENTRYLO0_REG as usize] + & device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO1_REG as usize] + & 1) as u8; + + device.cpu.cop0.tlb_entries[index as usize].pfn_even = + (device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO0_REG as usize] >> 6) & 0xFFFFF; + device.cpu.cop0.tlb_entries[index as usize].pfn_odd = + (device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO1_REG as usize] >> 6) & 0xFFFFF; + device.cpu.cop0.tlb_entries[index as usize].c_even = + ((device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO0_REG as usize] >> 3) & 7) as u8; + device.cpu.cop0.tlb_entries[index as usize].c_odd = + ((device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO1_REG as usize] >> 3) & 7) as u8; + device.cpu.cop0.tlb_entries[index as usize].d_even = + ((device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO0_REG as usize] >> 2) & 1) as u8; + device.cpu.cop0.tlb_entries[index as usize].d_odd = + ((device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO1_REG as usize] >> 2) & 1) as u8; + device.cpu.cop0.tlb_entries[index as usize].v_even = + ((device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO0_REG as usize] >> 1) & 1) as u8; + device.cpu.cop0.tlb_entries[index as usize].v_odd = + ((device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO1_REG as usize] >> 1) & 1) as u8; + device.cpu.cop0.tlb_entries[index as usize].asid = + device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] as u8; + + device.cpu.cop0.tlb_entries[index as usize].mask = + (device.cpu.cop0.regs[device::cop0::COP0_PAGEMASK_REG as usize] >> 13) & 0xFFF; + + device.cpu.cop0.tlb_entries[index as usize].vpn2 = + (device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] >> 13) & 0x7FFFFFF; + + device.cpu.cop0.tlb_entries[index as usize].region = + (device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] >> 62) as u8; + + device.cpu.cop0.tlb_entries[index as usize].mask &= 0b101010101010; + device.cpu.cop0.tlb_entries[index as usize].mask |= + device.cpu.cop0.tlb_entries[index as usize].mask >> 1; + + device.cpu.cop0.tlb_entries[index as usize].vpn2 &= + !device.cpu.cop0.tlb_entries[index as usize].mask; + + device.cpu.cop0.tlb_entries[index as usize].start_even = + (device.cpu.cop0.tlb_entries[index as usize].vpn2 << 13) & 0xFFFFFFFF; + device.cpu.cop0.tlb_entries[index as usize].end_even = + device.cpu.cop0.tlb_entries[index as usize].start_even + + (device.cpu.cop0.tlb_entries[index as usize].mask << 12) + + 0xFFF; + device.cpu.cop0.tlb_entries[index as usize].phys_even = + device.cpu.cop0.tlb_entries[index as usize].pfn_even << 12; + + device.cpu.cop0.tlb_entries[index as usize].start_odd = + device.cpu.cop0.tlb_entries[index as usize].end_even + 1; + device.cpu.cop0.tlb_entries[index as usize].end_odd = + device.cpu.cop0.tlb_entries[index as usize].start_odd + + (device.cpu.cop0.tlb_entries[index as usize].mask << 12) + + 0xFFF; + device.cpu.cop0.tlb_entries[index as usize].phys_odd = + device.cpu.cop0.tlb_entries[index as usize].pfn_odd << 12; + + tlb_map(device, index); +} + +pub fn probe(device: &mut device::Device) { + device.cpu.cop0.regs[device::cop0::COP0_INDEX_REG as usize] = 0x80000000; // set probe failure + for (pos, e) in device.cpu.cop0.tlb_entries.iter().enumerate() { + if e.vpn2 & !e.mask + != ((device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] >> 13) & 0x7FFFFFF) + & !e.mask + { + continue; + } + if e.region != (device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] >> 62) as u8 { + continue; + } + if e.g == 0 { + if e.asid != device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] as u8 { + continue; + } + } + device.cpu.cop0.regs[device::cop0::COP0_INDEX_REG as usize] = pos as u64; + break; + } +} + +pub fn tlb_unmap(device: &mut device::Device, index: u64) { + let e = &mut device.cpu.cop0.tlb_entries[index as usize]; + + if e.v_even != 0 { + let mut i = e.start_even; + while i < e.end_even { + device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].address = 0; + device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].cached = false; + i += 0x1000 + } + if e.d_even != 0 { + let mut i = e.start_even; + while i < e.end_even { + device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].address = 0; + device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].cached = false; + i += 0x1000 + } + } + } + + if e.v_odd != 0 { + let mut i = e.start_odd; + while i < e.end_odd { + device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].address = 0; + device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].cached = false; + i += 0x1000 + } + if e.d_odd != 0 { + let mut i = e.start_odd; + while i < e.end_odd { + device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].address = 0; + device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].cached = false; + i += 0x1000 + } + } + } +} + +pub fn tlb_map(device: &mut device::Device, index: u64) { + let e = &mut device.cpu.cop0.tlb_entries[index as usize]; + + if e.v_even != 0 { + if e.start_even < e.end_even + && !(e.start_even >= 0x80000000 && e.end_even < 0xC0000000) + && e.phys_even < 0x20000000 + { + let mut i = e.start_even; + while i < e.end_even { + device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].address = + 0x80000000 | (e.phys_even + (i - e.start_even) + 0xFFF) as u64; + device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].cached = e.c_even != 2; + i += 0x1000 + } + if e.d_even != 0 { + let mut i = e.start_even; + while i < e.end_even { + device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].address = + 0x80000000 | (e.phys_even + (i - e.start_even) + 0xFFF) as u64; + device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].cached = e.c_even != 2; + i += 0x1000 + } + } + } + } + + if e.v_odd != 0 { + if e.start_odd < e.end_odd + && !(e.start_odd >= 0x80000000 && e.end_odd < 0xC0000000) + && e.phys_odd < 0x20000000 + { + let mut i = e.start_odd; + while i < e.end_odd { + device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].address = + 0x80000000 | (e.phys_odd + (i - e.start_odd) + 0xFFF) as u64; + device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].cached = e.c_odd != 2; + i += 0x1000 + } + if e.d_odd != 0 { + let mut i = e.start_odd; + while i < e.end_odd { + device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].address = + 0x80000000 | (e.phys_odd + (i - e.start_odd) + 0xFFF) as u64; + device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].cached = e.c_odd != 2; + i += 0x1000 + } + } + } + } +} + +pub fn get_physical_address( + device: &mut device::Device, + address: u64, + access_type: device::memory::AccessType, +) -> (u64, bool, bool) { + if access_type == device::memory::AccessType::Write { + if device.cpu.cop0.tlb_lut_w[(address >> 12) as usize].address != 0 { + return ( + (device.cpu.cop0.tlb_lut_w[(address >> 12) as usize].address & 0xFFFFF000) + | (address & 0xFFF), + device.cpu.cop0.tlb_lut_w[(address >> 12) as usize].cached, + false, + ); + } + } else { + if device.cpu.cop0.tlb_lut_r[(address >> 12) as usize].address != 0 { + return ( + (device.cpu.cop0.tlb_lut_r[(address >> 12) as usize].address & 0xFFFFF000) + | (address & 0xFFF), + device.cpu.cop0.tlb_lut_r[(address >> 12) as usize].cached, + false, + ); + } + } + + if access_type != device::memory::AccessType::Lookup { + device::exceptions::tlb_miss_exception(device, address, access_type) + } + + return (0, false, true); +} diff --git a/src/device/unmapped.rs b/src/device/unmapped.rs new file mode 100644 index 0000000..26b49d9 --- /dev/null +++ b/src/device/unmapped.rs @@ -0,0 +1,12 @@ +use crate::device; + +pub fn read_mem( + _device: &mut device::Device, + address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + let value = (address & 0xFFFF) as u32; + return value | (value << 16); +} + +pub fn write_mem(_device: &mut device::Device, _address: u64, _value: u32, _mask: u32) {} diff --git a/src/device/vi.rs b/src/device/vi.rs new file mode 100644 index 0000000..f87b183 --- /dev/null +++ b/src/device/vi.rs @@ -0,0 +1,163 @@ +use crate::device; +use crate::ui; + +pub const VI_STATUS_REG: u32 = 0; +//pub const VI_ORIGIN_REG: u32 = 1; +//pub const VI_WIDTH_REG: u32 = 2; +pub const VI_V_INTR_REG: u32 = 3; +pub const VI_CURRENT_REG: u32 = 4; +//pub const VI_BURST_REG: u32 = 5; +pub const VI_V_SYNC_REG: u32 = 6; +pub const VI_H_SYNC_REG: u32 = 7; +//pub const VI_LEAP_REG: u32 = 8; +//pub const VI_H_START_REG: u32 = 9; +//pub const VI_V_START_REG: u32 = 10; +//pub const VI_V_BURST_REG: u32 = 11; +//pub const VI_X_SCALE_REG: u32 = 12; +//pub const VI_Y_SCALE_REG: u32 = 13; +pub const VI_REGS_COUNT: u32 = 14; + +pub struct Vi { + pub regs: [u32; VI_REGS_COUNT as usize], + pub clock: u64, + pub delay: u64, + pub field: u32, + pub count_per_scanline: u64, + pub last_vi_time: std::time::Instant, + pub vi_period: std::time::Duration, +} + +//static mut FRAME_COUNTER: u64 = 0; + +pub fn set_expected_refresh_rate(device: &mut device::Device) { + let expected_refresh_rate = device.vi.clock as f64 + / (device.vi.regs[VI_V_SYNC_REG as usize] + 1) as f64 + / ((device.vi.regs[VI_H_SYNC_REG as usize] & 0xFFF) + 1) as f64 + * 2.0; + device.vi.delay = (device.cpu.clock_rate as f64 / expected_refresh_rate) as u64; + device.vi.count_per_scanline = + device.vi.delay / (device.vi.regs[VI_V_SYNC_REG as usize] + 1) as u64; + + device.vi.vi_period = std::time::Duration::from_secs_f64(1.0 / expected_refresh_rate); +} + +pub fn set_vertical_interrupt(device: &mut device::Device) { + if device::events::get_event(device, device::events::EventType::VI) == None + && device.vi.regs[VI_V_INTR_REG as usize] < device.vi.regs[VI_V_SYNC_REG as usize] + { + device::events::create_event( + device, + device::events::EventType::VI, + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + device.vi.delay, + vertical_interrupt_event, + ) + } +} + +pub fn set_current_line(device: &mut device::Device) { + let delay = device.vi.delay; + let next_vi = device::events::get_event(device, device::events::EventType::VI); + if next_vi != None { + device.vi.regs[VI_CURRENT_REG as usize] = ((delay + - (next_vi.unwrap().count + - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize])) + / device.vi.count_per_scanline) + as u32; + + // wrap around VI_CURRENT_REG if needed + if device.vi.regs[VI_CURRENT_REG as usize] >= device.vi.regs[VI_V_SYNC_REG as usize] { + device.vi.regs[VI_CURRENT_REG as usize] -= device.vi.regs[VI_V_SYNC_REG as usize] + } + } + /* update current field */ + device.vi.regs[VI_CURRENT_REG as usize] = + (device.vi.regs[VI_CURRENT_REG as usize] & !1) | device.vi.field +} + +pub fn read_regs( + device: &mut device::Device, + address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + let reg = (address & 0xFFFF) >> 2; + if reg as u32 == VI_CURRENT_REG { + set_current_line(device) + } + return device.vi.regs[reg as usize]; +} + +pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { + let reg = (address & 0xFFFF) >> 2; + match reg as u32 { + VI_CURRENT_REG => device::mi::clear_rcp_interrupt(device, device::mi::MI_INTR_VI), + VI_V_INTR_REG => { + device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); + set_vertical_interrupt(device); + ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) + } + VI_V_SYNC_REG => { + device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); + set_vertical_interrupt(device); + set_expected_refresh_rate(device); + ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) + } + VI_H_SYNC_REG => { + device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); + set_expected_refresh_rate(device); + ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) + } + _ => { + device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); + ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) + } + } +} + +pub fn vertical_interrupt_event(device: &mut device::Device) { + device.cpu.running = ui::video::update_screen(); + + /* + unsafe { + FRAME_COUNTER += 1; + } + */ + + let elapsed = device.vi.last_vi_time.elapsed(); + if elapsed < device.vi.vi_period { + let diff = device.vi.vi_period - elapsed; + std::thread::sleep(diff); + } + device.vi.last_vi_time = std::time::Instant::now(); + + /* toggle vi field if in interlaced mode */ + device.vi.field ^= (device.vi.regs[VI_STATUS_REG as usize] >> 6) & 0x1; + + device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_VI); + + device::events::create_event( + device, + device::events::EventType::VI, + device.cpu.next_event_count + device.vi.delay, + vertical_interrupt_event, + ) +} + +pub fn init(device: &mut device::Device) { + if device.cart.pal { + device.vi.clock = 49656530 + } else { + device.vi.clock = 48681812 + } + /* + std::thread::spawn(move || { + let mut last_count = 0; + loop { + unsafe { + println!("{:?}", FRAME_COUNTER - last_count); + last_count = FRAME_COUNTER; + } + std::thread::sleep(std::time::Duration::from_secs(1)); + } + }); + */ +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..3c3cad5 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,30 @@ +#![feature(round_ties_even)] +use std::env; +use std::fs; +mod device; +mod ui; + +fn main() { + let args: Vec = env::args().collect(); + let file_path = &args[1]; + let contents = fs::read(file_path).expect("Should have been able to read the file"); + + let mut device = device::Device::new(); + + device::cart_rom::init(&mut device, contents); // cart needs to come before rdram + + // rdram pointer is shared with parallel-rdp + let (rdram_ptr, rdram_size) = device::rdram::init(&mut device); + + ui::audio::init(&mut device.ui, 33600); + ui::video::init(&mut device.ui, rdram_ptr, rdram_size); + + device::mi::init(&mut device); + device::pif::init(&mut device, false); + device::memory::init(&mut device); + device::rsp_interface::init(&mut device); + device::rdp::init(&mut device); + device::vi::init(&mut device); + device::cpu::init(&mut device); + device::cpu::run(&mut device); +} diff --git a/src/ui.rs b/src/ui.rs new file mode 100644 index 0000000..f0b4f16 --- /dev/null +++ b/src/ui.rs @@ -0,0 +1,32 @@ +pub mod audio; +pub mod input; +pub mod video; + +pub struct Ui { + pub sdl_context: Option, + pub video_subsystem: Option, + pub audio_subsystem: Option, + pub window: Option, + pub audio_device: Option>, +} + +impl Ui { + pub fn new() -> Ui { + let sdl_context = sdl2::init().unwrap(); + let video_subsystem = sdl_context.video().unwrap(); + let audio_subsystem = sdl_context.audio().unwrap(); + let window = video_subsystem + .window("gopher64", 640, 480) + .position_centered() + .vulkan() + .build() + .unwrap(); + Ui { + sdl_context: Some(sdl_context), + video_subsystem: Some(video_subsystem), + audio_subsystem: Some(audio_subsystem), + window: Some(window), + audio_device: None, + } + } +} diff --git a/src/ui/audio.rs b/src/ui/audio.rs new file mode 100644 index 0000000..9a4d96a --- /dev/null +++ b/src/ui/audio.rs @@ -0,0 +1,50 @@ +use crate::device; +use crate::ui; + +pub fn init(ui: &mut ui::Ui, frequency: u64) { + let desired_spec = sdl2::audio::AudioSpecDesired { + freq: Some(frequency as i32), + channels: Some(2), + samples: None, + }; + ui.audio_device = Some( + ui.audio_subsystem + .as_mut() + .unwrap() + .open_queue::(None, &desired_spec) + .unwrap(), + ); + ui.audio_device.as_mut().unwrap().resume(); +} + +pub fn play_audio(device: &mut device::Device, dram_addr: usize, length: u64) { + let audio_device = device.ui.audio_device.as_mut().unwrap(); + let mut primary_buffer: Vec = vec![0; length as usize / 2]; + let mut i = 0; + while i < length as usize / 2 { + // Left channel + primary_buffer[i] = device.rdram.mem[dram_addr + (i * 2) + 2] as i16 + | (device.rdram.mem[dram_addr + (i * 2) + 3] as i16) << 8; + + // Right channel + primary_buffer[i + 1] = device.rdram.mem[dram_addr + (i * 2)] as i16 + | (device.rdram.mem[dram_addr + (i * 2) + 1] as i16) << 8; + i += 2; + } + + let audio_queued = audio_device.size() as f64; + let acceptable_latency = (audio_device.spec().freq as f64 * 0.2) * 4.0; + let min_latency = (audio_device.spec().freq as f64 * 0.02) * 4.0; + + if audio_device.status() != sdl2::audio::AudioStatus::Paused && audio_queued < min_latency { + audio_device.pause(); + } else if audio_device.status() == sdl2::audio::AudioStatus::Paused + && audio_queued >= (min_latency * 2.0) + { + audio_device.resume(); + } + + if audio_queued < acceptable_latency { + let _ = audio_device.queue_audio(&primary_buffer); + } +} diff --git a/src/ui/input.rs b/src/ui/input.rs new file mode 100644 index 0000000..9d902c6 --- /dev/null +++ b/src/ui/input.rs @@ -0,0 +1,56 @@ +use crate::ui; + +pub const MAX_AXIS_VALUE: f64 = 85.0; + +pub fn bound_axis(x: &mut f64, y: &mut f64) { + let radius = 95.0; // this is roughly the maxium diagonal distance of the controller + + // Calculate the distance from the origin (0, 0) + let distance = f64::sqrt((*x) * (*x) + (*y) * (*y)); + + // If the distance is greater than the radius, scale the coordinates + if distance > radius { + let scale_factor = radius / distance; + *x *= scale_factor; + *y *= scale_factor; + } +} +pub fn get(ui: &mut ui::Ui, _channel: usize) -> u32 { + let context = ui.sdl_context.as_mut().unwrap(); + let events = context.event_pump().unwrap(); + let keyboard_state = events.keyboard_state(); + + let mut keys = 0; + keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::D) as u32) << 0; + keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::A) as u32) << 1; + keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::S) as u32) << 2; + keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::W) as u32) << 3; + keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::Return) as u32) << 4; + keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::Z) as u32) << 5; + keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::LCtrl) as u32) << 6; + keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::LShift) as u32) << 7; + keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::L) as u32) << 8; + keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::J) as u32) << 9; + keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::K) as u32) << 10; + keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::I) as u32) << 11; + keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::C) as u32) << 12; + keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::X) as u32) << 13; + + let mut x: f64 = 0.0; + let mut y: f64 = 0.0; + if keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::Left) { + x = -MAX_AXIS_VALUE + } else if keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::Right) { + x = MAX_AXIS_VALUE + } + if keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::Down) { + y = -MAX_AXIS_VALUE + } else if keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::Up) { + y = MAX_AXIS_VALUE + } + bound_axis(&mut x, &mut y); + + keys |= (x.round() as i8 as u32) << 16; + keys |= (y.round() as i8 as u32) << 24; + return keys; +} diff --git a/src/ui/video.rs b/src/ui/video.rs new file mode 100644 index 0000000..3e98e51 --- /dev/null +++ b/src/ui/video.rs @@ -0,0 +1,40 @@ +use crate::ui; + +extern "C" { + pub fn vk_init(rdram_ptr: usize, rdram_size: u32); + pub fn set_sdl_window(window: usize); + pub fn rdp_update_screen() -> u8; + pub fn rdp_set_vi_register(reg: u32, value: u32); + pub fn rdp_process_commands(dpc_regs: &mut [u32; 8], SP_DMEM: &mut [u8; 8192]) -> u64; + pub fn full_sync(); +} + +pub fn init(ui: &mut ui::Ui, rdram_ptr: *mut u8, rdram_size: usize) { + unsafe { + set_sdl_window(ui.window.as_mut().unwrap().raw() as usize); + vk_init(rdram_ptr as usize, rdram_size as u32) + } +} + +pub fn update_screen() -> u8 { + // when the window is closed, running is set to 0 + let running = unsafe { rdp_update_screen() }; + return running; +} + +pub fn set_register(reg: u32, value: u32) { + unsafe { + rdp_set_vi_register(reg, value); + } +} + +pub fn process_rdp_list(dpc_regs: &mut [u32; 8], sp_dmem: &mut [u8; 8192]) -> u64 { + let timer = unsafe { rdp_process_commands(dpc_regs, sp_dmem) }; + return timer; +} + +pub fn rdp_full_sync() { + unsafe { + full_sync(); + } +} From f7a586a1e0bafc0fef56056019a5843d71425e9d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 4 Oct 2023 17:52:58 -0600 Subject: [PATCH 0002/1117] add build workflow (#2) * add build workflow * more * more * more * more * more * more * more * more * more * more * more * fix * more * more * more * more * more * remove pkg-config * remove * more * fix * last --- .github/workflows/build.yml | 51 +++++++++++++++++++++++++++++++++++++ Cargo.toml | 10 +++++--- build.rs | 11 +++++--- 3 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..b178dee --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,51 @@ +name: Rust + +on: + push: + branches: ["main"] + pull_request: + branches: ["main"] + +env: + CARGO_TERM_COLOR: always + +jobs: + build-linux: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + - name: Update rust + run: | + rustup default nightly + rustup update + - name: Build + run: | + ./build_release.sh + - name: Upload file + uses: actions/upload-artifact@v3 + with: + name: gopher64-linux + path: target/release/gopher64 + + build-windows: + runs-on: windows-latest + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + - name: Update rust + shell: bash + run: | + rustup default nightly + rustup update + - name: Build + shell: bash + run: | + ./build_release.sh + - name: Upload file + uses: actions/upload-artifact@v3 + with: + name: gopher64-windows + path: target/release/gopher64.exe diff --git a/Cargo.toml b/Cargo.toml index 36d9393..c434382 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,16 +1,20 @@ [package] -name = "rust64" +name = "gopher64" version = "0.1.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -sdl2 = "0.35" +sdl2-sys = { git = "https://github.com/Rust-SDL2/rust-sdl2.git" } + +[dependencies.sdl2] +git = "https://github.com/Rust-SDL2/rust-sdl2.git" +default-features = false +features = ["static-link","bundled"] [build-dependencies] cc = { version = "1.0", features = ["parallel"] } -pkg-config = "0.3" [profile.release] lto = true diff --git a/build.rs b/build.rs index 448bc87..2e3e002 100644 --- a/build.rs +++ b/build.rs @@ -1,10 +1,7 @@ fn main() { - let sdl = pkg_config::Config::new().probe("sdl2").unwrap(); let mut build = cc::Build::new(); build .cpp(true) - .flag("-Wno-missing-field-initializers") - .flag("-Wno-unused-parameter") .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/command_ring.cpp") .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/rdp_device.cpp") .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/rdp_dump_write.cpp") @@ -48,11 +45,17 @@ fn main() { .include("parallel-rdp/parallel-rdp-standalone/vulkan") .include("parallel-rdp/parallel-rdp-standalone/vulkan-headers/include") .include("parallel-rdp/parallel-rdp-standalone/util") - .includes(sdl.include_paths); + .includes(std::env::var("DEP_SDL2_INCLUDE")); #[cfg(target_os = "windows")] { build.flag("-DVK_USE_PLATFORM_WIN32_KHR"); } + #[cfg(target_os = "linux")] + { + build + .flag("-Wno-missing-field-initializers") + .flag("-Wno-unused-parameter"); + } build.compile("parallel-rdp"); } From 20b0d88727a13874a42a48d6cd11cdf80a8c7925 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Oct 2023 22:03:12 -0600 Subject: [PATCH 0003/1117] Bump actions/checkout from 3 to 4 (#3) Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b178dee..bb94a2b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,7 +13,7 @@ jobs: build-linux: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: recursive - name: Update rust @@ -32,7 +32,7 @@ jobs: build-windows: runs-on: windows-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: recursive - name: Update rust From 06738ea9655b87bf75b4420ee0587b63ae9d6d70 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 4 Oct 2023 22:43:36 -0600 Subject: [PATCH 0004/1117] more --- Cargo.toml | 1 + src/device.rs | 2 ++ src/device/cart_rom.rs | 32 ++++++++++++++++++-------------- src/device/is_viewer.rs | 8 ++++---- 4 files changed, 25 insertions(+), 18 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index c434382..8aa7590 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +sha2 = "0.10" sdl2-sys = { git = "https://github.com/Rust-SDL2/rust-sdl2.git" } [dependencies.sdl2] diff --git a/src/device.rs b/src/device.rs index 3ed2e22..c5cf0a6 100644 --- a/src/device.rs +++ b/src/device.rs @@ -47,6 +47,7 @@ pub struct Device { ai: ai::Ai, si: si::Si, ri: ri::Ri, + game: String, } impl Device { @@ -59,6 +60,7 @@ impl Device { byte_swap = 3; } Device { + game: String::new(), ui: ui::Ui::new(), byte_swap: byte_swap, cpu: cpu::Cpu { diff --git a/src/device/cart_rom.rs b/src/device/cart_rom.rs index 6d25e92..808f610 100644 --- a/src/device/cart_rom.rs +++ b/src/device/cart_rom.rs @@ -1,6 +1,5 @@ use crate::device; -use std::collections::hash_map::DefaultHasher; -use std::hash::{Hash, Hasher}; +use sha2::{Digest, Sha256}; pub enum CicType { CicNus6101, @@ -95,7 +94,12 @@ pub fn dma_write(device: &mut device::Device, cart_addr: u32, dram_addr: u32, le pub fn init(device: &mut device::Device, rom_file: Vec) { device.cart.rom = rom_file; set_system_region(device, device.cart.rom[0x3E]); - set_cic(device) + set_cic(device); + + let data = + std::str::from_utf8(&device.cart.rom[0x20 as usize..(0x20 + 0x14) as usize]).unwrap(); + let hash = calculate_hash(&device.cart.rom); + device.game = format!("{}-{}", data.trim(), hash); } pub fn set_system_region(device: &mut device::Device, country: u8) { @@ -109,28 +113,28 @@ pub fn set_system_region(device: &mut device::Device, country: u8) { pub fn set_cic(device: &mut device::Device) { let hash = calculate_hash(&device.cart.rom[0x40..0x1000]); - match hash { - 0x83a9a60ad75b3ed9 => { + match hash.as_str() { + "B99F06C4802C2377E31E388435955EF3E99C618A6D55D24699D828EB1075F1EB" => { device.cart.cic_type = CicType::CicNus6101; device.cart.cic_seed = 0x3F; device.cart.rdram_size_offset = 0x318; } - 0x3c1e2f5171ec2b8 => { + "61E88238552C356C23D19409FE5570EE6910419586BC6FC740F638F761ADC46E" => { device.cart.cic_type = CicType::CicNus6102; device.cart.cic_seed = 0x3F; device.cart.rdram_size_offset = 0x318; } - 0xdbdb0cb696006257 => { + "BF3620D30817007091EBE9BDDD1B88C23B8A0052170B3309CDE5B6B4238E45E7" => { device.cart.cic_type = CicType::CicNus6103; device.cart.cic_seed = 0x78; device.cart.rdram_size_offset = 0x318; } - 0x3d51ac3a48960357 => { + "04B7BC6717A9F0EB724CF927E74AD3876C381CBB280D841736FC5E55580B756B" => { device.cart.cic_type = CicType::CicNus6105; device.cart.cic_seed = 0x91; device.cart.rdram_size_offset = 0x3F0; } - 0x90135a02ea97ba9f => { + "36ADC40148AF56F0D78CD505EB6A90117D1FD6F11C6309E52ED36BC4C6BA340E" => { device.cart.cic_type = CicType::CicNus6106; device.cart.cic_seed = 0x85; device.cart.rdram_size_offset = 0x318; @@ -139,13 +143,13 @@ pub fn set_cic(device: &mut device::Device) { device.cart.cic_type = CicType::CicNus6102; device.cart.cic_seed = 0x3F; device.cart.rdram_size_offset = 0x318; - println!("unknown IPL3 {:#01x}", hash) + println!("unknown IPL3 {}", hash) } } } -fn calculate_hash(t: &[T]) -> u64 { - let mut s = DefaultHasher::new(); - t.hash(&mut s); - s.finish() +fn calculate_hash(data: &[u8]) -> String { + let mut hasher = Sha256::new(); + hasher.update(data); + format!("{:X}", hasher.finalize()) } diff --git a/src/device/is_viewer.rs b/src/device/is_viewer.rs index 8aeba97..6c05766 100644 --- a/src/device/is_viewer.rs +++ b/src/device/is_viewer.rs @@ -1,5 +1,4 @@ use crate::device; -use std::str; pub const IS_VIEWER_MASK: usize = 0xFFFF; @@ -20,9 +19,10 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 let masked_address = address as usize & IS_VIEWER_MASK; if masked_address == 0x14 { let length = (value & mask) as u64; - let data = - str::from_utf8(&device.cart.is_viewer_buffer[0x20 as usize..(0x20 + length) as usize]) - .unwrap(); + let data = std::str::from_utf8( + &device.cart.is_viewer_buffer[0x20 as usize..(0x20 + length) as usize], + ) + .unwrap(); print!("{}", data); } else { let mut data = u32::from_be_bytes( From 7dc0a3902aa89a9e2276e7bbe9f76fe901bc5fc2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 5 Oct 2023 10:01:33 -0600 Subject: [PATCH 0005/1117] eeprom saves (#4) * eeprom start * finish --- Cargo.toml | 1 + src/device.rs | 2 +- src/device/cart.rs | 40 +++++++++++++++++++++++++--------- src/main.rs | 4 ++++ src/ui.rs | 7 ++++++ src/ui/storage.rs | 53 ++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 96 insertions(+), 11 deletions(-) create mode 100644 src/ui/storage.rs diff --git a/Cargo.toml b/Cargo.toml index 8aa7590..353e2e8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +dirs = "5.0" sha2 = "0.10" sdl2-sys = { git = "https://github.com/Rust-SDL2/rust-sdl2.git" } diff --git a/src/device.rs b/src/device.rs index c5cf0a6..d9be928 100644 --- a/src/device.rs +++ b/src/device.rs @@ -47,7 +47,7 @@ pub struct Device { ai: ai::Ai, si: si::Si, ri: ri::Ri, - game: String, + pub game: String, } impl Device { diff --git a/src/device/cart.rs b/src/device/cart.rs index 5d1dde2..bfeb53b 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -1,4 +1,5 @@ use crate::device; +use crate::ui; pub const JCMD_STATUS: u8 = 0x00; pub const JCMD_EEPROM_READ: u8 = 0x04; @@ -9,7 +10,7 @@ pub const JCMD_RESET: u8 = 0xff; pub const JDT_EEPROM_4K: u16 = 0x8000; /* 4k EEPROM */ //pub const JDT_EEPROM_16K: u16 = 0xc000; /* 16k EEPROM */ pub const EEPROM_TYPE: u16 = JDT_EEPROM_4K; // todo, support 16k eeprom - //pub const EEPROM_BLOCK_SIZE: usize = 8; +pub const EEPROM_BLOCK_SIZE: usize = 8; pub fn process(device: &mut device::Device, channel: usize) { let cmd = device.pif.ram[device.pif.channels[channel].tx_buf.unwrap()]; @@ -41,15 +42,34 @@ pub fn process(device: &mut device::Device, channel: usize) { } } -pub fn eeprom_read_block(_device: &mut device::Device, _block: usize, _data: usize) { - panic!("eeprom read") +pub fn eeprom_read_block(device: &mut device::Device, block: usize, offset: usize) { + let address = device.pif.ram[block as usize] as usize * EEPROM_BLOCK_SIZE; + + if address < device.ui.saves.eeprom.len() { + device.pif.ram[offset..offset + EEPROM_BLOCK_SIZE] + .copy_from_slice(&device.ui.saves.eeprom[address..address + EEPROM_BLOCK_SIZE]); + } else { + for i in 0..EEPROM_BLOCK_SIZE { + device.pif.ram[offset + i] = 0; + } + } } -pub fn eeprom_write_block( - _device: &mut device::Device, - _block: usize, - _data: usize, - _status: usize, -) { - panic!("eeprom write") +pub fn eeprom_write_block(device: &mut device::Device, block: usize, offset: usize, status: usize) { + let address = device.pif.ram[block as usize] as usize * EEPROM_BLOCK_SIZE; + + if address + EEPROM_BLOCK_SIZE > device.ui.saves.eeprom.len() { + device + .ui + .saves + .eeprom + .resize(address + EEPROM_BLOCK_SIZE, 0) + } + + device.ui.saves.eeprom[address..address + EEPROM_BLOCK_SIZE] + .copy_from_slice(&device.pif.ram[offset..offset + EEPROM_BLOCK_SIZE]); + + device.pif.ram[status as usize] = 0x00; + + ui::storage::write_save(&mut device.ui, ui::storage::SaveTypes::Eeprom); } diff --git a/src/main.rs b/src/main.rs index 3c3cad5..5a0af97 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,5 +26,9 @@ fn main() { device::rdp::init(&mut device); device::vi::init(&mut device); device::cpu::init(&mut device); + + ui::storage::init(&mut device.ui, device.game.as_str()); + ui::storage::load_saves(&mut device.ui); + device::cpu::run(&mut device); } diff --git a/src/ui.rs b/src/ui.rs index f0b4f16..dbcbb6f 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -1,8 +1,11 @@ pub mod audio; pub mod input; +pub mod storage; pub mod video; pub struct Ui { + pub paths: storage::Paths, + pub saves: storage::Saves, pub sdl_context: Option, pub video_subsystem: Option, pub audio_subsystem: Option, @@ -22,6 +25,10 @@ impl Ui { .build() .unwrap(); Ui { + paths: storage::Paths { + eep_file_path: std::path::PathBuf::new(), + }, + saves: storage::Saves { eeprom: Vec::new() }, sdl_context: Some(sdl_context), video_subsystem: Some(video_subsystem), audio_subsystem: Some(audio_subsystem), diff --git a/src/ui/storage.rs b/src/ui/storage.rs new file mode 100644 index 0000000..3cc4db5 --- /dev/null +++ b/src/ui/storage.rs @@ -0,0 +1,53 @@ +use crate::ui; + +pub enum SaveTypes { + Eeprom, +} + +pub struct Paths { + pub eep_file_path: std::path::PathBuf, +} + +pub struct Saves { + pub eeprom: Vec, +} + +pub fn init(ui: &mut ui::Ui, game_name: &str) { + let mut base_path = dirs::data_dir().unwrap(); + base_path.push("gopher64"); + base_path.push("saves"); + + let result = std::fs::create_dir_all(base_path.clone()); + if result.is_err() { + panic!("could not create save dir") + } + + ui.paths.eep_file_path = base_path; + ui.paths.eep_file_path.push(game_name.to_owned() + ".eep"); +} + +pub fn load_saves(ui: &mut ui::Ui) { + let eep = std::fs::read(&mut ui.paths.eep_file_path); + if eep.is_ok() { + ui.saves.eeprom = eep.unwrap(); + } +} + +pub fn write_save(ui: &mut ui::Ui, save_type: SaveTypes) { + let path: &std::path::Path; + let data: &Vec; + match save_type { + SaveTypes::Eeprom => { + path = ui.paths.eep_file_path.as_ref(); + data = ui.saves.eeprom.as_ref(); + } + } + let result = std::fs::write(path, data); + if result.is_err() { + panic!( + "could not save {} {}", + path.display(), + result.err().unwrap() + ) + } +} From b7d133cb37aeef745b2c49a7b5893a4a2c30a4fd Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 5 Oct 2023 11:43:13 -0600 Subject: [PATCH 0006/1117] sram support (#5) * sram support * more --- src/device.rs | 2 - src/device/cart.rs | 43 ++++++++++++----- src/device/cart_rom.rs | 3 +- src/device/pi.rs | 4 +- src/device/sram.rs | 98 +++++++++++++++++++++++++++++++++++-- src/main.rs | 2 +- src/ui.rs | 15 +++++- src/ui/storage.rs | 106 +++++++++++++++++++++++++++++++++++++++-- 8 files changed, 244 insertions(+), 29 deletions(-) diff --git a/src/device.rs b/src/device.rs index d9be928..3ed2e22 100644 --- a/src/device.rs +++ b/src/device.rs @@ -47,7 +47,6 @@ pub struct Device { ai: ai::Ai, si: si::Si, ri: ri::Ri, - pub game: String, } impl Device { @@ -60,7 +59,6 @@ impl Device { byte_swap = 3; } Device { - game: String::new(), ui: ui::Ui::new(), byte_swap: byte_swap, cpu: cpu::Cpu { diff --git a/src/device/cart.rs b/src/device/cart.rs index bfeb53b..5e1762d 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -8,8 +8,7 @@ pub const JCMD_RESET: u8 = 0xff; //pub const JDT_AF_RTC: u16 = 0x1000; /* RTC */ pub const JDT_EEPROM_4K: u16 = 0x8000; /* 4k EEPROM */ -//pub const JDT_EEPROM_16K: u16 = 0xc000; /* 16k EEPROM */ -pub const EEPROM_TYPE: u16 = JDT_EEPROM_4K; // todo, support 16k eeprom +pub const JDT_EEPROM_16K: u16 = 0xc000; /* 16k EEPROM */ pub const EEPROM_BLOCK_SIZE: usize = 8; pub fn process(device: &mut device::Device, channel: usize) { @@ -18,9 +17,19 @@ pub fn process(device: &mut device::Device, channel: usize) { match cmd { JCMD_RESET => { /* reset */ } JCMD_STATUS => { - device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] = EEPROM_TYPE as u8; + let eeprom_type; + if device + .ui + .save_type + .contains(&ui::storage::SaveTypes::Eeprom16k) + { + eeprom_type = JDT_EEPROM_16K; + } else { + eeprom_type = JDT_EEPROM_4K; + } + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] = eeprom_type as u8; device.pif.ram[device.pif.channels[channel].rx_buf.unwrap() + 1] = - (EEPROM_TYPE >> 8) as u8; + (eeprom_type >> 8) as u8; device.pif.ram[device.pif.channels[channel].rx_buf.unwrap() + 2] = 0; } JCMD_EEPROM_READ => { @@ -45,14 +54,16 @@ pub fn process(device: &mut device::Device, channel: usize) { pub fn eeprom_read_block(device: &mut device::Device, block: usize, offset: usize) { let address = device.pif.ram[block as usize] as usize * EEPROM_BLOCK_SIZE; - if address < device.ui.saves.eeprom.len() { - device.pif.ram[offset..offset + EEPROM_BLOCK_SIZE] - .copy_from_slice(&device.ui.saves.eeprom[address..address + EEPROM_BLOCK_SIZE]); - } else { - for i in 0..EEPROM_BLOCK_SIZE { - device.pif.ram[offset + i] = 0; - } + if address + EEPROM_BLOCK_SIZE > device.ui.saves.eeprom.len() { + device + .ui + .saves + .eeprom + .resize(address + EEPROM_BLOCK_SIZE, 0) } + + device.pif.ram[offset..offset + EEPROM_BLOCK_SIZE] + .copy_from_slice(&device.ui.saves.eeprom[address..address + EEPROM_BLOCK_SIZE]); } pub fn eeprom_write_block(device: &mut device::Device, block: usize, offset: usize, status: usize) { @@ -71,5 +82,13 @@ pub fn eeprom_write_block(device: &mut device::Device, block: usize, offset: usi device.pif.ram[status as usize] = 0x00; - ui::storage::write_save(&mut device.ui, ui::storage::SaveTypes::Eeprom); + let mut save_type = ui::storage::SaveTypes::Eeprom4k; + if device + .ui + .save_type + .contains(&ui::storage::SaveTypes::Eeprom16k) + { + save_type = ui::storage::SaveTypes::Eeprom16k + } + ui::storage::write_save(&mut device.ui, save_type); } diff --git a/src/device/cart_rom.rs b/src/device/cart_rom.rs index 808f610..62c0000 100644 --- a/src/device/cart_rom.rs +++ b/src/device/cart_rom.rs @@ -99,7 +99,8 @@ pub fn init(device: &mut device::Device, rom_file: Vec) { let data = std::str::from_utf8(&device.cart.rom[0x20 as usize..(0x20 + 0x14) as usize]).unwrap(); let hash = calculate_hash(&device.cart.rom); - device.game = format!("{}-{}", data.trim(), hash); + device.ui.game_name = format!("{}-{}", data.trim(), hash); + device.ui.game_id = String::from_utf8(device.cart.rom[0x3B..0x3E].to_vec()).unwrap(); } pub fn set_system_region(device: &mut device::Device, country: u8) { diff --git a/src/device/pi.rs b/src/device/pi.rs index 7406169..4db371d 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -94,8 +94,8 @@ pub fn get_handler(address: u32) -> PiHandler { handler.write = device::cart_rom::dma_write; } } else if address >= device::memory::MM_DOM2_ADDR2 as u32 { - panic!("sram handler") - //RW(cart, cart_dom2); + handler.read = device::sram::dma_read; + handler.write = device::sram::dma_write; } else { panic!("unknown pi handler") } diff --git a/src/device/sram.rs b/src/device/sram.rs index 7a06aed..c95f0ca 100644 --- a/src/device/sram.rs +++ b/src/device/sram.rs @@ -1,13 +1,101 @@ use crate::device; +use crate::ui; + +pub const SRAM_MASK: usize = 0xFFFF; pub fn read_mem( - _device: &mut device::Device, - _address: u64, + device: &mut device::Device, + address: u64, _access_size: device::memory::AccessSize, ) -> u32 { - panic!("sream read"); + if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { + let masked_address = address as usize & SRAM_MASK; + + if masked_address + 4 > device.ui.saves.sram.len() { + device.ui.saves.sram.resize(masked_address + 4, 0) + } + + return u32::from_be_bytes( + device.ui.saves.sram[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ); + } else { + panic!("flash read") + } } -pub fn write_mem(_device: &mut device::Device, _address: u64, _value: u32, _mask: u32) { - panic!("sram write"); +pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { + if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { + let masked_address = address as usize & SRAM_MASK; + + if masked_address + 4 > device.ui.saves.sram.len() { + device.ui.saves.sram.resize(masked_address + 4, 0) + } + + let mut data = u32::from_be_bytes( + device.ui.saves.sram[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ); + device::memory::masked_write_32(&mut data, value, mask); + device.ui.saves.sram[masked_address..masked_address + 4] + .copy_from_slice(&data.to_be_bytes()); + + ui::storage::write_save(&mut device.ui, ui::storage::SaveTypes::Sram); + } else { + panic!("flash write") + } +} + +// cart is big endian, rdram is native endian +pub fn dma_read(device: &mut device::Device, cart_addr: u32, dram_addr: u32, length: u32) -> u64 { + if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { + let mut i = dram_addr & device::rdram::RDRAM_MASK as u32; + let mut j = cart_addr & SRAM_MASK as u32; + + if (cart_addr + length) as usize > device.ui.saves.sram.len() { + device + .ui + .saves + .sram + .resize((cart_addr + length) as usize, 0) + } + + while j < cart_addr + length { + device.ui.saves.sram[j as usize] = device.rdram.mem[i as usize ^ device.byte_swap]; + i += 1; + j += 1; + } + + ui::storage::write_save(&mut device.ui, ui::storage::SaveTypes::Sram); + return device::pi::calculate_cycles(device, 2, length); + } else { + panic!("flash dma read") + } +} + +// cart is big endian, rdram is native endian +pub fn dma_write(device: &mut device::Device, cart_addr: u32, dram_addr: u32, length: u32) -> u64 { + if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { + let mut i = dram_addr & device::rdram::RDRAM_MASK as u32; + let mut j = cart_addr & SRAM_MASK as u32; + + if (cart_addr + length) as usize > device.ui.saves.sram.len() { + device + .ui + .saves + .sram + .resize((cart_addr + length) as usize, 0) + } + + while i < dram_addr + length { + device.rdram.mem[i as usize ^ device.byte_swap] = device.ui.saves.sram[j as usize]; + i += 1; + j += 1; + } + return device::pi::calculate_cycles(device, 2, length); + } else { + panic!("flash dma write") + } } diff --git a/src/main.rs b/src/main.rs index 5a0af97..033077b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -27,7 +27,7 @@ fn main() { device::vi::init(&mut device); device::cpu::init(&mut device); - ui::storage::init(&mut device.ui, device.game.as_str()); + ui::storage::init(&mut device.ui); ui::storage::load_saves(&mut device.ui); device::cpu::run(&mut device); diff --git a/src/ui.rs b/src/ui.rs index dbcbb6f..24d45bc 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -4,6 +4,9 @@ pub mod storage; pub mod video; pub struct Ui { + pub save_type: Vec, + pub game_name: String, + pub game_id: String, pub paths: storage::Paths, pub saves: storage::Saves, pub sdl_context: Option, @@ -25,10 +28,20 @@ impl Ui { .build() .unwrap(); Ui { + save_type: vec![], + game_name: String::new(), + game_id: String::new(), paths: storage::Paths { eep_file_path: std::path::PathBuf::new(), + fla_file_path: std::path::PathBuf::new(), + sra_file_path: std::path::PathBuf::new(), + pak_file_path: std::path::PathBuf::new(), + }, + saves: storage::Saves { + eeprom: Vec::new(), + sram: Vec::new(), + flash: Vec::new(), }, - saves: storage::Saves { eeprom: Vec::new() }, sdl_context: Some(sdl_context), video_subsystem: Some(video_subsystem), audio_subsystem: Some(audio_subsystem), diff --git a/src/ui/storage.rs b/src/ui/storage.rs index 3cc4db5..caeecee 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -1,18 +1,86 @@ use crate::ui; +#[derive(PartialEq)] pub enum SaveTypes { - Eeprom, + Eeprom4k, + Eeprom16k, + Sram, + Flash, } pub struct Paths { pub eep_file_path: std::path::PathBuf, + pub sra_file_path: std::path::PathBuf, + pub fla_file_path: std::path::PathBuf, + pub pak_file_path: std::path::PathBuf, } pub struct Saves { pub eeprom: Vec, + pub sram: Vec, + pub flash: Vec, } -pub fn init(ui: &mut ui::Ui, game_name: &str) { +pub fn get_save_type(game_id: &str) -> Vec { + match game_id { + "NB7" | // Banjo-Tooie [Banjo to Kazooie no Daiboken 2 (J)] + "NGT" | // City Tour GrandPrix - Zen Nihon GT Senshuken + "NFU" | // Conker's Bad Fur Day + "NCW" | // Cruis'n World + "NCZ" | // Custom Robo V2 + "ND6" | // Densha de Go! 64 + "NDO" | // Donkey Kong 64 + "ND2" | // Doraemon 2: Nobita to Hikari no Shinden + "N3D" | // Doraemon 3: Nobita no Machi SOS! + "NMX" | // Excitebike 64 + "NGC" | // GT 64: Championship Edition + "NIM" | // Ide Yosuke no Mahjong Juku + "NNB" | // Kobe Bryant in NBA Courtside + "NMV" | // Mario Party 3 + "NM8" | // Mario Tennis + "NEV" | // Neon Genesis Evangelion + "NPP" | // Parlor! Pro 64: Pachinko Jikki Simulation Game + "NUB" | // PD Ultraman Battle Collection 64 + "NPD" | // Perfect Dark + "NRZ" | // Ridge Racer 64 + "NR7" | // Robot Poncots 64: 7tsu no Umi no Caramel + "NEP" | // Star Wars Episode I: Racer + "NYS" // Yoshi's Story + => { + return vec![SaveTypes::Eeprom16k] + } + "NCC" | // Command & Conquer + "NDA" | // Derby Stallion 64 + "NAF" | // Doubutsu no Mori + "NJF" | // Jet Force Gemini [Star Twins (J)] + "NKJ" | // Ken Griffey Jr.'s Slugfest + "NZS" | // Legend of Zelda: Majora's Mask [Zelda no Densetsu - Mujura no Kamen (J)] + "NM6" | // Mega Man 64 + "NCK" | // NBA Courtside 2 featuring Kobe Bryant + "NMQ" | // Paper Mario + "NPN" | // Pokemon Puzzle League + "NPF" | // Pokemon Snap [Pocket Monsters Snap (J)] + "NPO" | // Pokemon Stadium + "CP2" | // Pocket Monsters Stadium 2 (J) + "NP3" | // Pokemon Stadium 2 [Pocket Monsters Stadium - Kin Gin (J)] + "NRH" | // Rockman Dash - Hagane no Boukenshin (J) + "NSQ" | // StarCraft 64 + "NT9" | // Tigger's Honey Hunt + "NW4" | // WWF No Mercy + "NDP" // Dinosaur Planet (Unlicensed) + =>{ + return vec![SaveTypes::Flash] + } + _ => { + return vec![SaveTypes::Eeprom4k, SaveTypes::Sram] + } + } +} + +pub fn init(ui: &mut ui::Ui) { + let id = ui.game_id.as_str(); + ui.save_type = get_save_type(id); + let mut base_path = dirs::data_dir().unwrap(); base_path.push("gopher64"); base_path.push("saves"); @@ -22,8 +90,20 @@ pub fn init(ui: &mut ui::Ui, game_name: &str) { panic!("could not create save dir") } - ui.paths.eep_file_path = base_path; - ui.paths.eep_file_path.push(game_name.to_owned() + ".eep"); + ui.paths.eep_file_path = base_path.clone(); + ui.paths + .eep_file_path + .push(ui.game_name.to_owned() + ".eep"); + + ui.paths.sra_file_path = base_path.clone(); + ui.paths + .sra_file_path + .push(ui.game_name.to_owned() + ".sra"); + + ui.paths.fla_file_path = base_path.clone(); + ui.paths + .fla_file_path + .push(ui.game_name.to_owned() + ".fla"); } pub fn load_saves(ui: &mut ui::Ui) { @@ -31,16 +111,32 @@ pub fn load_saves(ui: &mut ui::Ui) { if eep.is_ok() { ui.saves.eeprom = eep.unwrap(); } + let sra = std::fs::read(&mut ui.paths.sra_file_path); + if sra.is_ok() { + ui.saves.sram = sra.unwrap(); + } + let fla = std::fs::read(&mut ui.paths.fla_file_path); + if fla.is_ok() { + ui.saves.flash = fla.unwrap(); + } } pub fn write_save(ui: &mut ui::Ui, save_type: SaveTypes) { let path: &std::path::Path; let data: &Vec; match save_type { - SaveTypes::Eeprom => { + SaveTypes::Eeprom4k | SaveTypes::Eeprom16k => { path = ui.paths.eep_file_path.as_ref(); data = ui.saves.eeprom.as_ref(); } + SaveTypes::Sram => { + path = ui.paths.sra_file_path.as_ref(); + data = ui.saves.sram.as_ref(); + } + SaveTypes::Flash => { + path = ui.paths.fla_file_path.as_ref(); + data = ui.saves.flash.as_ref(); + } } let result = std::fs::write(path, data); if result.is_err() { From 6d69daad74025b2c4514037ca7a61f48a9442cbb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 5 Oct 2023 12:10:01 -0600 Subject: [PATCH 0007/1117] better rsp timing (#6) --- src/device.rs | 3 +++ src/device/rsp_cpu.rs | 23 ++++++++++++++++++++++- src/device/rsp_vu_instructions.rs | 1 + 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/device.rs b/src/device.rs index 3ed2e22..c9a4f7c 100644 --- a/src/device.rs +++ b/src/device.rs @@ -180,6 +180,9 @@ impl Device { rdram: rdram::Rdram { mem: vec![] }, rsp: rsp_interface::Rsp { cpu: rsp_cpu::Cpu { + last_instruction_type: rsp_cpu::InstructionType::Su, + instruction_type: rsp_cpu::InstructionType::Su, + pipeline_full: false, branch_state: rsp_cpu::BranchState { state: cpu::State::Step, pc: 0, diff --git a/src/device/rsp_cpu.rs b/src/device/rsp_cpu.rs index bda2de3..e8b9376 100644 --- a/src/device/rsp_cpu.rs +++ b/src/device/rsp_cpu.rs @@ -5,7 +5,16 @@ pub struct BranchState { pub pc: u32, } +#[derive(PartialEq, Copy, Clone)] +pub enum InstructionType { + Su, + Vu, +} + pub struct Cpu { + pub last_instruction_type: InstructionType, + pub instruction_type: InstructionType, + pub pipeline_full: bool, pub branch_state: BranchState, pub broken: bool, pub halted: bool, @@ -48,6 +57,7 @@ pub fn run(device: &mut device::Device) -> u64 { device.rsp.cpu.broken = false; let mut cycle_counter = 0; while !device.rsp.cpu.halted && !device.rsp.cpu.sync_point { + device.rsp.cpu.instruction_type = InstructionType::Su; device.rsp.cpu.gpr[0] = 0; // gpr 0 is read only let offset = 0x1000 + device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] as usize; let opcode = u32::from_be_bytes(device.rsp.mem[offset..offset + 4].try_into().unwrap()); @@ -83,7 +93,18 @@ pub fn run(device: &mut device::Device) -> u64 { } device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] &= 0xFFC; - cycle_counter += 1; + if device.rsp.cpu.instruction_type == device.rsp.cpu.last_instruction_type { + cycle_counter += 1; + device.rsp.cpu.pipeline_full = false; + } else { + device.rsp.cpu.last_instruction_type = device.rsp.cpu.instruction_type; + if device.rsp.cpu.pipeline_full { + cycle_counter += 1; + device.rsp.cpu.pipeline_full = false; + } else { + device.rsp.cpu.pipeline_full = true; + } + } if device.rsp.cpu.broken && device.rsp.cpu.branch_state.state == device::cpu::State::Step { break; diff --git a/src/device/rsp_vu_instructions.rs b/src/device/rsp_vu_instructions.rs index 4c1419f..e1e2189 100644 --- a/src/device/rsp_vu_instructions.rs +++ b/src/device/rsp_vu_instructions.rs @@ -1245,6 +1245,7 @@ pub fn vrsqh(device: &mut device::Device, opcode: u32) { pub fn vnop(_device: &mut device::Device, _opcode: u32) {} pub fn execute_vec(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.instruction_type = device::rsp_cpu::InstructionType::Vu; device.rsp.cpu.vec_instrs[(opcode & 0x3F) as usize](device, opcode) } From 61fcbd765b7b12b8dac90b7406afd3d22f748d05 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 5 Oct 2023 12:17:56 -0600 Subject: [PATCH 0008/1117] no save for PPG --- src/device/cart.rs | 9 ++++++++- src/ui/storage.rs | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/device/cart.rs b/src/device/cart.rs index 5e1762d..f864373 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -24,9 +24,16 @@ pub fn process(device: &mut device::Device, channel: usize) { .contains(&ui::storage::SaveTypes::Eeprom16k) { eeprom_type = JDT_EEPROM_16K; - } else { + } else if device + .ui + .save_type + .contains(&ui::storage::SaveTypes::Eeprom4k) + { eeprom_type = JDT_EEPROM_4K; + } else { + return; } + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] = eeprom_type as u8; device.pif.ram[device.pif.channels[channel].rx_buf.unwrap() + 1] = (eeprom_type >> 8) as u8; diff --git a/src/ui/storage.rs b/src/ui/storage.rs index caeecee..e0abd8e 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -71,6 +71,8 @@ pub fn get_save_type(game_id: &str) -> Vec { =>{ return vec![SaveTypes::Flash] } + "NPQ" // Powerpuff Girls: Chemical X Traction + => {return vec![];} _ => { return vec![SaveTypes::Eeprom4k, SaveTypes::Sram] } From ad8e64ede57799884de11a06a0e2b9e8ba6e4271 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 5 Oct 2023 12:20:37 -0600 Subject: [PATCH 0009/1117] add cycles --- src/device/sram.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/device/sram.rs b/src/device/sram.rs index c95f0ca..355ebdc 100644 --- a/src/device/sram.rs +++ b/src/device/sram.rs @@ -8,6 +8,9 @@ pub fn read_mem( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { + let cycles = device::pi::calculate_cycles(device, 2, 4); + device::cop0::add_cycles(device, cycles); + if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { let masked_address = address as usize & SRAM_MASK; @@ -46,6 +49,16 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 } else { panic!("flash write") } + + device.pi.regs[device::pi::PI_STATUS_REG as usize] |= device::pi::PI_STATUS_IO_BUSY; + + let cycles = device::pi::calculate_cycles(device, 2, 4); + device::events::create_event( + device, + device::events::EventType::PI, + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + cycles, + device::pi::dma_event, + ); } // cart is big endian, rdram is native endian From 723e307f6a84d607b5d12f173ab11ab50ad5b3a5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 5 Oct 2023 12:23:35 -0600 Subject: [PATCH 0010/1117] default data for saves --- src/device/cart.rs | 4 ++-- src/device/sram.rs | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/device/cart.rs b/src/device/cart.rs index f864373..7ef35f0 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -66,7 +66,7 @@ pub fn eeprom_read_block(device: &mut device::Device, block: usize, offset: usiz .ui .saves .eeprom - .resize(address + EEPROM_BLOCK_SIZE, 0) + .resize(address + EEPROM_BLOCK_SIZE, 0xFF) } device.pif.ram[offset..offset + EEPROM_BLOCK_SIZE] @@ -81,7 +81,7 @@ pub fn eeprom_write_block(device: &mut device::Device, block: usize, offset: usi .ui .saves .eeprom - .resize(address + EEPROM_BLOCK_SIZE, 0) + .resize(address + EEPROM_BLOCK_SIZE, 0xFF) } device.ui.saves.eeprom[address..address + EEPROM_BLOCK_SIZE] diff --git a/src/device/sram.rs b/src/device/sram.rs index 355ebdc..20cc127 100644 --- a/src/device/sram.rs +++ b/src/device/sram.rs @@ -15,7 +15,7 @@ pub fn read_mem( let masked_address = address as usize & SRAM_MASK; if masked_address + 4 > device.ui.saves.sram.len() { - device.ui.saves.sram.resize(masked_address + 4, 0) + device.ui.saves.sram.resize(masked_address + 4, 0xFF) } return u32::from_be_bytes( @@ -33,7 +33,7 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 let masked_address = address as usize & SRAM_MASK; if masked_address + 4 > device.ui.saves.sram.len() { - device.ui.saves.sram.resize(masked_address + 4, 0) + device.ui.saves.sram.resize(masked_address + 4, 0xFF) } let mut data = u32::from_be_bytes( @@ -72,7 +72,7 @@ pub fn dma_read(device: &mut device::Device, cart_addr: u32, dram_addr: u32, len .ui .saves .sram - .resize((cart_addr + length) as usize, 0) + .resize((cart_addr + length) as usize, 0xFF) } while j < cart_addr + length { @@ -99,7 +99,7 @@ pub fn dma_write(device: &mut device::Device, cart_addr: u32, dram_addr: u32, le .ui .saves .sram - .resize((cart_addr + length) as usize, 0) + .resize((cart_addr + length) as usize, 0xFF) } while i < dram_addr + length { From 33b138610c468ea5c87b9a972713db6f4237c0a5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 5 Oct 2023 13:05:35 -0600 Subject: [PATCH 0011/1117] optimize vte --- Cargo.toml | 1 + src/device.rs | 1 + src/device/rsp_cpu.rs | 32 +++++++ src/device/rsp_vu_instructions.rs | 134 +++++++++++------------------- 4 files changed, 81 insertions(+), 87 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 353e2e8..342f5c8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,3 +21,4 @@ cc = { version = "1.0", features = ["parallel"] } [profile.release] lto = true codegen-units = 1 +debug = 1 diff --git a/src/device.rs b/src/device.rs index c9a4f7c..ecba004 100644 --- a/src/device.rs +++ b/src/device.rs @@ -197,6 +197,7 @@ impl Device { divdp: false, divin: 0, divout: 0, + shuffle: unsafe { [std::arch::x86_64::_mm_setzero_si128(); 16] }, vcol: unsafe { std::arch::x86_64::_mm_setzero_si128() }, vcoh: unsafe { std::arch::x86_64::_mm_setzero_si128() }, vccl: unsafe { std::arch::x86_64::_mm_setzero_si128() }, diff --git a/src/device/rsp_cpu.rs b/src/device/rsp_cpu.rs index e8b9376..da0c5b7 100644 --- a/src/device/rsp_cpu.rs +++ b/src/device/rsp_cpu.rs @@ -1,4 +1,5 @@ use crate::device; +use std::arch::x86_64::*; pub struct BranchState { pub state: device::cpu::State, @@ -19,6 +20,7 @@ pub struct Cpu { pub broken: bool, pub halted: bool, pub sync_point: bool, + pub shuffle: [__m128i; 16], pub gpr: [u32; 32], pub vpr: [u128; 32], pub reciprocals: [u16; 512], @@ -169,6 +171,36 @@ pub fn init(device: &mut device::Device) { index += 1; } + device.rsp.cpu.shuffle = unsafe { + [ + //vector + _mm_set_epi8(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0), //01234567 + _mm_set_epi8(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0), //01234567 + //scalar quarter + _mm_set_epi8(15, 14, 15, 14, 11, 10, 11, 10, 7, 6, 7, 6, 3, 2, 3, 2), //00224466 + _mm_set_epi8(13, 12, 13, 12, 9, 8, 9, 8, 5, 4, 5, 4, 1, 0, 1, 0), //11335577 + //scalar half + _mm_set_epi8(15, 14, 15, 14, 15, 14, 15, 14, 7, 6, 7, 6, 7, 6, 7, 6), //00004444 + _mm_set_epi8(13, 12, 13, 12, 13, 12, 13, 12, 5, 4, 5, 4, 5, 4, 5, 4), //11115555 + _mm_set_epi8(11, 10, 11, 10, 11, 10, 11, 10, 3, 2, 3, 2, 3, 2, 3, 2), //22226666 + _mm_set_epi8(9, 8, 9, 8, 9, 8, 9, 8, 1, 0, 1, 0, 1, 0, 1, 0), //33337777 + //scalar whole + _mm_set_epi8( + 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, + ), //00000000 + _mm_set_epi8( + 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, + ), //11111111 + _mm_set_epi8( + 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, + ), //22222222 + _mm_set_epi8(9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8), //33333333 + _mm_set_epi8(7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6), //44444444 + _mm_set_epi8(5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4), //55555555 + _mm_set_epi8(3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2), //66666666 + _mm_set_epi8(1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0), //77777777 + ] + }; device.rsp.cpu.instrs = [ device::rsp_su_instructions::reserved, // SPECIAL device::rsp_su_instructions::reserved, // REGIMM diff --git a/src/device/rsp_vu_instructions.rs b/src/device/rsp_vu_instructions.rs index e1e2189..f686244 100644 --- a/src/device/rsp_vu_instructions.rs +++ b/src/device/rsp_vu_instructions.rs @@ -70,42 +70,17 @@ pub fn get_vpr_element(vpr: u128, element: u8) -> u16 { return (vpr >> (pos * 16)) as u16; } -pub fn vte(vt: u128, index: usize) -> __m128i { +pub fn vte(device: &mut device::Device, vt: u32, index: usize) -> __m128i { unsafe { - let shuffle = [ - //vector - _mm_set_epi8(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0), //01234567 - _mm_set_epi8(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0), //01234567 - //scalar quarter - _mm_set_epi8(15, 14, 15, 14, 11, 10, 11, 10, 7, 6, 7, 6, 3, 2, 3, 2), //00224466 - _mm_set_epi8(13, 12, 13, 12, 9, 8, 9, 8, 5, 4, 5, 4, 1, 0, 1, 0), //11335577 - //scalar half - _mm_set_epi8(15, 14, 15, 14, 15, 14, 15, 14, 7, 6, 7, 6, 7, 6, 7, 6), //00004444 - _mm_set_epi8(13, 12, 13, 12, 13, 12, 13, 12, 5, 4, 5, 4, 5, 4, 5, 4), //11115555 - _mm_set_epi8(11, 10, 11, 10, 11, 10, 11, 10, 3, 2, 3, 2, 3, 2, 3, 2), //22226666 - _mm_set_epi8(9, 8, 9, 8, 9, 8, 9, 8, 1, 0, 1, 0, 1, 0, 1, 0), //33337777 - //scalar whole - _mm_set_epi8( - 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, - ), //00000000 - _mm_set_epi8( - 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, - ), //11111111 - _mm_set_epi8( - 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, - ), //22222222 - _mm_set_epi8(9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8), //33333333 - _mm_set_epi8(7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6), //44444444 - _mm_set_epi8(5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4), //55555555 - _mm_set_epi8(3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2), //66666666 - _mm_set_epi8(1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0), //77777777 - ]; - return _mm_shuffle_epi8(std::mem::transmute(vt), shuffle[index]); + return _mm_shuffle_epi8( + std::mem::transmute(device.rsp.cpu.vpr[vt as usize]), + device.rsp.cpu.shuffle[index], + ); } } pub fn vmulf(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut lo, mut hi, mut round, mut sign1, sign2, neq, eq, neg); unsafe { lo = _mm_mullo_epi16( @@ -139,7 +114,7 @@ pub fn vmulf(device: &mut device::Device, opcode: u32) { } pub fn vmulu(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut lo, mut hi, mut round, mut sign1, sign2, neq, neg); unsafe { lo = _mm_mullo_epi16( @@ -173,12 +148,7 @@ pub fn vmulu(device: &mut device::Device, opcode: u32) { } pub fn vrndp(device: &mut device::Device, opcode: u32) { - let vte = unsafe { - std::mem::transmute(vte( - device.rsp.cpu.vpr[vt(opcode) as usize], - ve(opcode) as usize, - )) - }; + let vte = unsafe { std::mem::transmute(vte(device, vt(opcode), ve(opcode) as usize)) }; let acch: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.acch) }; let accm: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accm) }; let accl: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accl) }; @@ -214,12 +184,7 @@ pub fn vrndp(device: &mut device::Device, opcode: u32) { } pub fn vmulq(device: &mut device::Device, opcode: u32) { - let vte = unsafe { - std::mem::transmute(vte( - device.rsp.cpu.vpr[vt(opcode) as usize], - ve(opcode) as usize, - )) - }; + let vte = unsafe { std::mem::transmute(vte(device, vt(opcode), ve(opcode) as usize)) }; let acch: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.acch) }; let accm: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accm) }; let accl: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accl) }; @@ -245,7 +210,7 @@ pub fn vmulq(device: &mut device::Device, opcode: u32) { } pub fn vmudl(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_mulhi_epu16( std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), @@ -258,7 +223,7 @@ pub fn vmudl(device: &mut device::Device, opcode: u32) { } pub fn vmudm(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let (sign, vta); unsafe { device.rsp.cpu.accl = _mm_mullo_epi16( @@ -281,7 +246,7 @@ pub fn vmudm(device: &mut device::Device, opcode: u32) { } pub fn vmudn(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let (sign, vsa); unsafe { device.rsp.cpu.accl = _mm_mullo_epi16( @@ -304,7 +269,7 @@ pub fn vmudn(device: &mut device::Device, opcode: u32) { } pub fn vmudh(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let (lo, hi); unsafe { device.rsp.cpu.accl = _mm_setzero_si128(); @@ -323,7 +288,7 @@ pub fn vmudh(device: &mut device::Device, opcode: u32) { } pub fn vmacf(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut lo, mut md, mut hi, mut carry, mut omask); unsafe { lo = _mm_mullo_epi16( @@ -361,7 +326,7 @@ pub fn vmacf(device: &mut device::Device, opcode: u32) { } pub fn vmacu(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut lo, mut md, mut hi, mut carry, mut omask, mmask, hmask); unsafe { lo = _mm_mullo_epi16( @@ -402,12 +367,7 @@ pub fn vmacu(device: &mut device::Device, opcode: u32) { } pub fn vrndn(device: &mut device::Device, opcode: u32) { - let vte = unsafe { - std::mem::transmute(vte( - device.rsp.cpu.vpr[vt(opcode) as usize], - ve(opcode) as usize, - )) - }; + let vte = unsafe { std::mem::transmute(vte(device, vt(opcode), ve(opcode) as usize)) }; let acch: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.acch) }; let accm: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accm) }; let accl: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accl) }; @@ -467,7 +427,7 @@ pub fn vmacq(device: &mut device::Device, opcode: u32) { } pub fn vmadl(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut hi, mut omask, nhi, nmd, shi, smd, cmask, cval); unsafe { hi = _mm_mulhi_epu16( @@ -496,7 +456,7 @@ pub fn vmadl(device: &mut device::Device, opcode: u32) { } pub fn vmadm(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut lo, mut hi, sign, vta, mut omask); unsafe { lo = _mm_mullo_epi16( @@ -532,7 +492,7 @@ pub fn vmadm(device: &mut device::Device, opcode: u32) { } pub fn vmadn(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let (lo, mut hi, sign, vsa, mut omask, nhi, nmd, shi, smd, cmask, cval); unsafe { lo = _mm_mullo_epi16( @@ -573,7 +533,7 @@ pub fn vmadn(device: &mut device::Device, opcode: u32) { } pub fn vmadh(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut lo, mut hi, mut omask); unsafe { lo = _mm_mullo_epi16( @@ -597,7 +557,7 @@ pub fn vmadh(device: &mut device::Device, opcode: u32) { } pub fn vadd(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let (sum, mut min, max); unsafe { sum = _mm_add_epi16( @@ -621,7 +581,7 @@ pub fn vadd(device: &mut device::Device, opcode: u32) { } pub fn vsub(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let (udiff, sdiff, ov); unsafe { udiff = _mm_sub_epi16(vte, device.rsp.cpu.vcol); @@ -645,7 +605,7 @@ pub fn vsub(device: &mut device::Device, opcode: u32) { } pub fn vzero(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_add_epi16( std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), @@ -659,7 +619,7 @@ pub fn vzero(device: &mut device::Device, opcode: u32) { } pub fn vabs(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let (vs0, slt); unsafe { vs0 = _mm_cmpeq_epi16( @@ -687,7 +647,7 @@ pub fn vabs(device: &mut device::Device, opcode: u32) { } pub fn vaddc(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let sum; unsafe { sum = _mm_adds_epu16( @@ -706,7 +666,7 @@ pub fn vaddc(device: &mut device::Device, opcode: u32) { } pub fn vsubc(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let (equal, udiff, diff0); unsafe { udiff = _mm_subs_epu16( @@ -749,7 +709,7 @@ pub fn vsar(device: &mut device::Device, opcode: u32) { } pub fn vlt(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut eq, lt); unsafe { eq = _mm_cmpeq_epi16( @@ -776,7 +736,7 @@ pub fn vlt(device: &mut device::Device, opcode: u32) { } pub fn veq(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let eq; unsafe { eq = _mm_cmpeq_epi16( @@ -797,7 +757,7 @@ pub fn veq(device: &mut device::Device, opcode: u32) { } pub fn vne(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let (eq, ne); unsafe { eq = _mm_cmpeq_epi16( @@ -820,7 +780,7 @@ pub fn vne(device: &mut device::Device, opcode: u32) { } pub fn vge(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut eq, gt, es); unsafe { eq = _mm_cmpeq_epi16( @@ -847,7 +807,7 @@ pub fn vge(device: &mut device::Device, opcode: u32) { } pub fn vcl(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let ( mut nvt, diff, @@ -906,7 +866,7 @@ pub fn vcl(device: &mut device::Device, opcode: u32) { } pub fn vch(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut nvt, diff, diff0, vtn, mut dlez, dgez, mask); unsafe { device.rsp.cpu.vcol = _mm_xor_si128( @@ -946,7 +906,7 @@ pub fn vch(device: &mut device::Device, opcode: u32) { } pub fn vcr(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut sign, mut dlez, mut dgez, nvt, mask); unsafe { sign = _mm_xor_si128( @@ -981,7 +941,7 @@ pub fn vcr(device: &mut device::Device, opcode: u32) { } pub fn vmrg(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_blendv_epi8( vte, @@ -995,7 +955,7 @@ pub fn vmrg(device: &mut device::Device, opcode: u32) { } pub fn vand(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_and_si128( std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), @@ -1006,7 +966,7 @@ pub fn vand(device: &mut device::Device, opcode: u32) { } pub fn vnand(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_and_si128( std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), @@ -1018,7 +978,7 @@ pub fn vnand(device: &mut device::Device, opcode: u32) { } pub fn vor(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_or_si128( std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), @@ -1029,7 +989,7 @@ pub fn vor(device: &mut device::Device, opcode: u32) { } pub fn vnor(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_or_si128( std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), @@ -1041,7 +1001,7 @@ pub fn vnor(device: &mut device::Device, opcode: u32) { } pub fn vxor(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_xor_si128( std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), @@ -1052,7 +1012,7 @@ pub fn vxor(device: &mut device::Device, opcode: u32) { } pub fn vnxor(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_xor_si128( std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), @@ -1065,7 +1025,7 @@ pub fn vnxor(device: &mut device::Device, opcode: u32) { pub fn vrcp(device: &mut device::Device, opcode: u32) { let mut result; - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let input = get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32; let mask = input >> 31; @@ -1096,7 +1056,7 @@ pub fn vrcp(device: &mut device::Device, opcode: u32) { pub fn vrcpl(device: &mut device::Device, opcode: u32) { let mut result; - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let input; if device.rsp.cpu.divdp { input = (device.rsp.cpu.divin as i32) << 16 @@ -1133,7 +1093,7 @@ pub fn vrcpl(device: &mut device::Device, opcode: u32) { } pub fn vrcph(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); device.rsp.cpu.accl = vte; device.rsp.cpu.divdp = true; @@ -1147,7 +1107,7 @@ pub fn vrcph(device: &mut device::Device, opcode: u32) { } pub fn vmov(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let value = get_vpr_element(unsafe { std::mem::transmute(vte) }, de(opcode) as u8); modify_vpr_element( &mut device.rsp.cpu.vpr[vd(opcode) as usize], @@ -1159,7 +1119,7 @@ pub fn vmov(device: &mut device::Device, opcode: u32) { pub fn vrsq(device: &mut device::Device, opcode: u32) { let mut result; - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let input = get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32; let mask = input >> 31; @@ -1191,7 +1151,7 @@ pub fn vrsq(device: &mut device::Device, opcode: u32) { pub fn vrsql(device: &mut device::Device, opcode: u32) { let mut result; - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); let input; if device.rsp.cpu.divdp { input = (device.rsp.cpu.divin as i32) << 16 @@ -1229,7 +1189,7 @@ pub fn vrsql(device: &mut device::Device, opcode: u32) { } pub fn vrsqh(device: &mut device::Device, opcode: u32) { - let vte = vte(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as usize); + let vte = vte(device, vt(opcode), ve(opcode) as usize); device.rsp.cpu.accl = vte; device.rsp.cpu.divdp = true; From fde0af6f9bce751415bb21c431ecadacbc997351 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 5 Oct 2023 18:42:23 -0600 Subject: [PATCH 0012/1117] change cop unusable code --- src/device/cop0.rs | 6 -- src/device/cop1.rs | 253 ++++++++++++++++++++++++++------------------- src/device/cop2.rs | 167 +++++++++++++----------------- 3 files changed, 219 insertions(+), 207 deletions(-) diff --git a/src/device/cop0.rs b/src/device/cop0.rs index 7d85cf0..121c236 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -211,12 +211,6 @@ pub fn set_control_registers(device: &mut device::Device, index: u32, mut data: if data & COP0_STATUS_FR != device.cpu.cop0.regs[index as usize] & COP0_STATUS_FR { device::cop1::set_fgr_registers(device, data) } - if data & COP0_STATUS_CU1 != device.cpu.cop0.regs[index as usize] & COP0_STATUS_CU1 { - device::cop1::set_usable(device, data & COP0_STATUS_CU1 != 0) - } - if data & COP0_STATUS_CU2 != device.cpu.cop0.regs[index as usize] & COP0_STATUS_CU2 { - device::cop2::set_usable(device, data & COP0_STATUS_CU2 != 0) - } } _ => {} } diff --git a/src/device/cop1.rs b/src/device/cop1.rs index 3b66e07..a071ecd 100644 --- a/src/device/cop1.rs +++ b/src/device/cop1.rs @@ -36,6 +36,12 @@ pub struct Cop1 { } pub fn lwc1(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 + == 0 + { + return unusable(device, opcode); + } + let (phys_address, cached, err) = device::memory::translate_address( device, device.cpu.gpr[device::cpu_instructions::rs(opcode) as usize].wrapping_add( @@ -62,6 +68,12 @@ pub fn lwc1(device: &mut device::Device, opcode: u32) { } pub fn ldc1(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 + == 0 + { + return unusable(device, opcode); + } + let (phys_address, cached, err) = device::memory::translate_address( device, device.cpu.gpr[device::cpu_instructions::rs(opcode) as usize].wrapping_add( @@ -95,6 +107,12 @@ pub fn ldc1(device: &mut device::Device, opcode: u32) { } pub fn swc1(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 + == 0 + { + return unusable(device, opcode); + } + let (phys_address, cached, err) = device::memory::translate_address( device, device.cpu.gpr[device::cpu_instructions::rs(opcode) as usize].wrapping_add( @@ -116,6 +134,12 @@ pub fn swc1(device: &mut device::Device, opcode: u32) { } pub fn sdc1(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 + == 0 + { + return unusable(device, opcode); + } + let (phys_address, cached, err) = device::memory::translate_address( device, device.cpu.gpr[device::cpu_instructions::rs(opcode) as usize].wrapping_add( @@ -146,30 +170,60 @@ pub fn sdc1(device: &mut device::Device, opcode: u32) { } pub fn mfc1(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 + == 0 + { + return unusable(device, opcode); + } + let value = get_fpr_single(device, device::fpu_instructions::fs(opcode) as usize); device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] = device::cpu_instructions::se32(u32::from_ne_bytes(value.to_ne_bytes()) as i32); } pub fn dmfc1(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 + == 0 + { + return unusable(device, opcode); + } + let value = get_fpr_double(device, device::fpu_instructions::fs(opcode) as usize); device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] = u64::from_ne_bytes(value.to_ne_bytes()); } pub fn cfc1(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 + == 0 + { + return unusable(device, opcode); + } + device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] = device::cpu_instructions::se32( get_control_registers_fpu(device, device::fpu_instructions::fs(opcode)) as i32, ) } -pub fn dcfc1(device: &mut device::Device, _opcode: u32) { +pub fn dcfc1(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 + == 0 + { + return unusable(device, opcode); + } + device.cpu.cop1.fcr31 &= !FCR31_CAUSE_MASK; device.cpu.cop1.fcr31 |= FCR31_CAUSE_UNIMP_BIT; device::exceptions::floating_point_exception(device) } pub fn mtc1(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 + == 0 + { + return unusable(device, opcode); + } + let value = f32::from_ne_bytes( (device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] as u32).to_ne_bytes(), ); @@ -182,6 +236,12 @@ pub fn mtc1(device: &mut device::Device, opcode: u32) { } pub fn dmtc1(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 + == 0 + { + return unusable(device, opcode); + } + let value = f64::from_ne_bytes( device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize].to_ne_bytes(), ); @@ -189,6 +249,12 @@ pub fn dmtc1(device: &mut device::Device, opcode: u32) { } pub fn ctc1(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 + == 0 + { + return unusable(device, opcode); + } + set_control_registers_fpu( device, device::fpu_instructions::fs(opcode), @@ -196,29 +262,65 @@ pub fn ctc1(device: &mut device::Device, opcode: u32) { ) } -pub fn dctc1(device: &mut device::Device, _opcode: u32) { +pub fn dctc1(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 + == 0 + { + return unusable(device, opcode); + } + device.cpu.cop1.fcr31 &= !FCR31_CAUSE_MASK; device.cpu.cop1.fcr31 |= FCR31_CAUSE_UNIMP_BIT; device::exceptions::floating_point_exception(device) } pub fn execute_cop1_b(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 + == 0 + { + return unusable(device, opcode); + } + device.cpu.cop1.b_instrs[((opcode >> 16) & 0x3) as usize](device, opcode) } pub fn execute_cop1_s(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 + == 0 + { + return unusable(device, opcode); + } + device.cpu.cop1.s_instrs[(opcode & 0x3F) as usize](device, opcode) } pub fn execute_cop1_d(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 + == 0 + { + return unusable(device, opcode); + } + device.cpu.cop1.d_instrs[(opcode & 0x3F) as usize](device, opcode) } pub fn execute_cop1_l(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 + == 0 + { + return unusable(device, opcode); + } + device.cpu.cop1.l_instrs[(opcode & 0x3F) as usize](device, opcode) } pub fn execute_cop1_w(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 + == 0 + { + return unusable(device, opcode); + } + device.cpu.cop1.w_instrs[(opcode & 0x3F) as usize](device, opcode) } @@ -226,8 +328,14 @@ pub fn unusable(device: &mut device::Device, _opcode: u32) { device::exceptions::cop_unusable_exception(device, device::cop0::COP0_CAUSE_CE1) } -pub fn reserved(_device: &mut device::Device, _opcode: u32) { - panic!("cop1 reserved"); +pub fn reserved(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 + == 0 + { + return unusable(device, opcode); + } + + device::exceptions::reserved_exception(device, device::cop0::COP0_CAUSE_CE1); } pub fn get_control_registers_fpu(device: &mut device::Device, index: u32) -> u32 { @@ -317,7 +425,6 @@ pub fn get_fpr_double(device: &mut device::Device, index: usize) -> f64 { pub fn init(device: &mut device::Device) { set_fgr_registers(device, 0); - set_usable(device, false); device.cpu.cop1.fcr0 = 0b101000000000; device.cpu.cop1.b_instrs = [ @@ -594,6 +701,41 @@ pub fn init(device: &mut device::Device) { device::cop1::reserved, // 62 device::cop1::reserved, // 63 ]; + + device.cpu.cop1.instrs = [ + device::cop1::mfc1, // 0 + device::cop1::dmfc1, // 1 + device::cop1::cfc1, // 2 + device::cop1::dcfc1, // 3 + device::cop1::mtc1, // 4 + device::cop1::dmtc1, // 5 + device::cop1::ctc1, // 6 + device::cop1::dctc1, // 7 + device::cop1::execute_cop1_b, // 8 + device::cop1::reserved, // 9 + device::cop1::reserved, // 10 + device::cop1::reserved, // 11 + device::cop1::reserved, // 12 + device::cop1::reserved, // 13 + device::cop1::reserved, // 14 + device::cop1::reserved, // 15 + device::cop1::execute_cop1_s, // 16 + device::cop1::execute_cop1_d, // 17 + device::cop1::reserved, // 18 + device::cop1::reserved, // 19 + device::cop1::execute_cop1_w, // 20 + device::cop1::execute_cop1_l, // 21 + device::cop1::reserved, // 22 + device::cop1::reserved, // 23 + device::cop1::reserved, // 24 + device::cop1::reserved, // 25 + device::cop1::reserved, // 26 + device::cop1::reserved, // 27 + device::cop1::reserved, // 28 + device::cop1::reserved, // 29 + device::cop1::reserved, // 30 + device::cop1::reserved, // 31 + ] } pub fn set_fgr_registers(device: &mut device::Device, status_reg: u64) { @@ -616,104 +758,3 @@ pub fn set_fgr_registers(device: &mut device::Device, status_reg: u64) { } } } - -pub fn set_usable(device: &mut device::Device, usable: bool) { - if !usable { - device.cpu.instrs[49] = device::cop1::unusable; // lwc1 - device.cpu.instrs[53] = device::cop1::unusable; // ldc1 - device.cpu.instrs[57] = device::cop1::unusable; // swc1 - device.cpu.instrs[61] = device::cop1::unusable; // sdc1 - device.cpu.cop1.instrs = [ - device::cop1::unusable, // 0 - device::cop1::unusable, // 1 - device::cop1::unusable, // 2 - device::cop1::unusable, // 3 - device::cop1::unusable, // 4 - device::cop1::unusable, // 5 - device::cop1::unusable, // 6 - device::cop1::unusable, // 7 - device::cop1::unusable, // 8 - device::cop1::unusable, // 9 - device::cop1::unusable, // 10 - device::cop1::unusable, // 11 - device::cop1::unusable, // 12 - device::cop1::unusable, // 13 - device::cop1::unusable, // 14 - device::cop1::unusable, // 15 - device::cop1::unusable, // 16 - device::cop1::unusable, // 17 - device::cop1::unusable, // 18 - device::cop1::unusable, // 19 - device::cop1::unusable, // 20 - device::cop1::unusable, // 21 - device::cop1::unusable, // 22 - device::cop1::unusable, // 23 - device::cop1::unusable, // 24 - device::cop1::unusable, // 25 - device::cop1::unusable, // 26 - device::cop1::unusable, // 27 - device::cop1::unusable, // 28 - device::cop1::unusable, // 29 - device::cop1::unusable, // 30 - device::cop1::unusable, // 31 - ] - } else { - device.cpu.instrs[49] = device::cop1::lwc1; - device.cpu.instrs[53] = device::cop1::ldc1; - device.cpu.instrs[57] = device::cop1::swc1; - device.cpu.instrs[61] = device::cop1::sdc1; - device.cpu.cop1.instrs = [ - device::cop1::mfc1, // 0 - device::cop1::dmfc1, // 1 - device::cop1::cfc1, // 2 - device::cop1::dcfc1, // 3 - device::cop1::mtc1, // 4 - device::cop1::dmtc1, // 5 - device::cop1::ctc1, // 6 - device::cop1::dctc1, // 7 - device::cop1::execute_cop1_b, // 8 - device::cop1::reserved, // 9 - device::cop1::reserved, // 10 - device::cop1::reserved, // 11 - device::cop1::reserved, // 12 - device::cop1::reserved, // 13 - device::cop1::reserved, // 14 - device::cop1::reserved, // 15 - device::cop1::execute_cop1_s, // 16 - device::cop1::execute_cop1_d, // 17 - device::cop1::reserved, // 18 - device::cop1::reserved, // 19 - device::cop1::execute_cop1_w, // 20 - device::cop1::execute_cop1_l, // 21 - device::cop1::reserved, // 22 - device::cop1::reserved, // 23 - device::cop1::reserved, // 24 - device::cop1::reserved, // 25 - device::cop1::reserved, // 26 - device::cop1::reserved, // 27 - device::cop1::reserved, // 28 - device::cop1::reserved, // 29 - device::cop1::reserved, // 30 - device::cop1::reserved, // 31 - ] - } - // we have to recalculate the instruction pointers in the icache - for i in 0..512 { - device.memory.icache[i].instruction[0] = - device::cpu::decode_opcode(device, device.memory.icache[i].words[0]); - device.memory.icache[i].instruction[1] = - device::cpu::decode_opcode(device, device.memory.icache[i].words[1]); - device.memory.icache[i].instruction[2] = - device::cpu::decode_opcode(device, device.memory.icache[i].words[2]); - device.memory.icache[i].instruction[3] = - device::cpu::decode_opcode(device, device.memory.icache[i].words[3]); - device.memory.icache[i].instruction[4] = - device::cpu::decode_opcode(device, device.memory.icache[i].words[4]); - device.memory.icache[i].instruction[5] = - device::cpu::decode_opcode(device, device.memory.icache[i].words[5]); - device.memory.icache[i].instruction[6] = - device::cpu::decode_opcode(device, device.memory.icache[i].words[6]); - device.memory.icache[i].instruction[7] = - device::cpu::decode_opcode(device, device.memory.icache[i].words[7]) - } -} diff --git a/src/device/cop2.rs b/src/device/cop2.rs index cc9bd1d..be7a851 100644 --- a/src/device/cop2.rs +++ b/src/device/cop2.rs @@ -6,32 +6,69 @@ pub struct Cop2 { } pub fn mfc2(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU2 + == 0 + { + return unusable(device, opcode); + } device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] = device::cpu_instructions::se32((device.cpu.cop2.reg_latch) as u32 as i32) } pub fn dmfc2(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU2 + == 0 + { + return unusable(device, opcode); + } device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] = device.cpu.cop2.reg_latch } pub fn cfc2(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU2 + == 0 + { + return unusable(device, opcode); + } device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] = device::cpu_instructions::se32((device.cpu.cop2.reg_latch) as u32 as i32) } pub fn mtc2(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU2 + == 0 + { + return unusable(device, opcode); + } device.cpu.cop2.reg_latch = device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] } pub fn dmtc2(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU2 + == 0 + { + return unusable(device, opcode); + } device.cpu.cop2.reg_latch = device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] } pub fn ctc2(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU2 + == 0 + { + return unusable(device, opcode); + } + device.cpu.cop2.reg_latch = device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] } -pub fn reserved(device: &mut device::Device, _opcode: u32) { +pub fn reserved(device: &mut device::Device, opcode: u32) { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU2 + == 0 + { + return unusable(device, opcode); + } + device::exceptions::reserved_exception(device, device::cop0::COP0_CAUSE_CE2); } @@ -40,98 +77,38 @@ pub fn unusable(device: &mut device::Device, _opcode: u32) { } pub fn init(device: &mut device::Device) { - set_usable(device, false); -} - -pub fn set_usable(device: &mut device::Device, usable: bool) { - if !usable { - device.cpu.cop2.instrs = [ - device::cop2::unusable, // 0 - device::cop2::unusable, // 1 - device::cop2::unusable, // 2 - device::cop2::unusable, // 3 - device::cop2::unusable, // 4 - device::cop2::unusable, // 5 - device::cop2::unusable, // 6 - device::cop2::unusable, // 7 - device::cop2::unusable, // 8 - device::cop2::unusable, // 9 - device::cop2::unusable, // 10 - device::cop2::unusable, // 11 - device::cop2::unusable, // 12 - device::cop2::unusable, // 13 - device::cop2::unusable, // 14 - device::cop2::unusable, // 15 - device::cop2::unusable, // 16 - device::cop2::unusable, // 17 - device::cop2::unusable, // 18 - device::cop2::unusable, // 19 - device::cop2::unusable, // 20 - device::cop2::unusable, // 21 - device::cop2::unusable, // 22 - device::cop2::unusable, // 23 - device::cop2::unusable, // 24 - device::cop2::unusable, // 25 - device::cop2::unusable, // 26 - device::cop2::unusable, // 27 - device::cop2::unusable, // 28 - device::cop2::unusable, // 29 - device::cop2::unusable, // 30 - device::cop2::unusable, // 31 - ] - } else { - device.cpu.cop2.instrs = [ - device::cop2::mfc2, // 0 - device::cop2::dmfc2, // 1 - device::cop2::cfc2, // 2 - device::cop2::reserved, // 3 - device::cop2::mtc2, // 4 - device::cop2::dmtc2, // 5 - device::cop2::ctc2, // 6 - device::cop2::reserved, // 7 - device::cop2::reserved, // 8 - device::cop2::reserved, // 9 - device::cop2::reserved, // 10 - device::cop2::reserved, // 11 - device::cop2::reserved, // 12 - device::cop2::reserved, // 13 - device::cop2::reserved, // 14 - device::cop2::reserved, // 15 - device::cop2::reserved, // 16 - device::cop2::reserved, // 17 - device::cop2::reserved, // 18 - device::cop2::reserved, // 19 - device::cop2::reserved, // 20 - device::cop2::reserved, // 21 - device::cop2::reserved, // 22 - device::cop2::reserved, // 23 - device::cop2::reserved, // 24 - device::cop2::reserved, // 25 - device::cop2::reserved, // 26 - device::cop2::reserved, // 27 - device::cop2::reserved, // 28 - device::cop2::reserved, // 29 - device::cop2::reserved, // 30 - device::cop2::reserved, // 31 - ] - } - // we have to recalculate the instruction pointers in the icache - for i in 0..512 { - device.memory.icache[i].instruction[0] = - device::cpu::decode_opcode(device, device.memory.icache[i].words[0]); - device.memory.icache[i].instruction[1] = - device::cpu::decode_opcode(device, device.memory.icache[i].words[1]); - device.memory.icache[i].instruction[2] = - device::cpu::decode_opcode(device, device.memory.icache[i].words[2]); - device.memory.icache[i].instruction[3] = - device::cpu::decode_opcode(device, device.memory.icache[i].words[3]); - device.memory.icache[i].instruction[4] = - device::cpu::decode_opcode(device, device.memory.icache[i].words[4]); - device.memory.icache[i].instruction[5] = - device::cpu::decode_opcode(device, device.memory.icache[i].words[5]); - device.memory.icache[i].instruction[6] = - device::cpu::decode_opcode(device, device.memory.icache[i].words[6]); - device.memory.icache[i].instruction[7] = - device::cpu::decode_opcode(device, device.memory.icache[i].words[7]) - } + device.cpu.cop2.instrs = [ + device::cop2::mfc2, // 0 + device::cop2::dmfc2, // 1 + device::cop2::cfc2, // 2 + device::cop2::reserved, // 3 + device::cop2::mtc2, // 4 + device::cop2::dmtc2, // 5 + device::cop2::ctc2, // 6 + device::cop2::reserved, // 7 + device::cop2::reserved, // 8 + device::cop2::reserved, // 9 + device::cop2::reserved, // 10 + device::cop2::reserved, // 11 + device::cop2::reserved, // 12 + device::cop2::reserved, // 13 + device::cop2::reserved, // 14 + device::cop2::reserved, // 15 + device::cop2::reserved, // 16 + device::cop2::reserved, // 17 + device::cop2::reserved, // 18 + device::cop2::reserved, // 19 + device::cop2::reserved, // 20 + device::cop2::reserved, // 21 + device::cop2::reserved, // 22 + device::cop2::reserved, // 23 + device::cop2::reserved, // 24 + device::cop2::reserved, // 25 + device::cop2::reserved, // 26 + device::cop2::reserved, // 27 + device::cop2::reserved, // 28 + device::cop2::reserved, // 29 + device::cop2::reserved, // 30 + device::cop2::reserved, // 31 + ] } From 3edbca1485b5aa1fcf7c8f67afc0ba7a7c1f1f38 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 5 Oct 2023 19:57:12 -0600 Subject: [PATCH 0013/1117] Events cleanup (#7) * cleanup * more * more * clean --- Cargo.toml | 1 - build_debug.sh | 3 +++ src/device.rs | 8 ++++++-- src/device/cop0.rs | 6 +++--- src/device/cpu.rs | 4 ++-- src/device/events.rs | 48 ++++++++++++++++--------------------------- src/device/rsp_cpu.rs | 11 +++++----- 7 files changed, 37 insertions(+), 44 deletions(-) create mode 100755 build_debug.sh diff --git a/Cargo.toml b/Cargo.toml index 342f5c8..353e2e8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,4 +21,3 @@ cc = { version = "1.0", features = ["parallel"] } [profile.release] lto = true codegen-units = 1 -debug = 1 diff --git a/build_debug.sh b/build_debug.sh new file mode 100755 index 0000000..2879946 --- /dev/null +++ b/build_debug.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +RUSTFLAGS='-C target-cpu=x86-64-v3' cargo build diff --git a/src/device.rs b/src/device.rs index ecba004..f5e80a7 100644 --- a/src/device.rs +++ b/src/device.rs @@ -134,9 +134,13 @@ impl Device { instrs: [cop0::reserved; 64], special_instrs: [cop0::reserved; 64], regimm_instrs: [cop0::reserved; 32], - events: vec![], + events: [events::Event { + enabled: false, + count: u64::MAX, + handler: events::dummy_event, + }; events::EventType::EventTypeCount as usize], next_event_count: u64::MAX, - next_event: None, + next_event: 0, }, pif: pif::Pif { rom: [0; 1984], diff --git a/src/device/cop0.rs b/src/device/cop0.rs index 121c236..a1d7654 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -202,7 +202,7 @@ pub fn set_control_registers(device: &mut device::Device, index: u32, mut data: event_time += !0 as u32 as u64 } let compare_event: &mut device::events::Event = - device::events::get_event(device, device::events::EventType::COMPARE).unwrap(); + device::events::get_event(device, device::events::EventType::Compare).unwrap(); compare_event.count = event_time; // reschedule the next compare interrupt event device::events::set_next_event(device); device.cpu.cop0.regs[COP0_CAUSE_REG as usize] &= !COP0_CAUSE_IP7; @@ -228,7 +228,7 @@ pub fn compare_event(device: &mut device::Device) { device::events::create_event( device, - device::events::EventType::COMPARE, + device::events::EventType::Compare, device.cpu.next_event_count + (!0 as u32 as u64), compare_event, ); @@ -364,7 +364,7 @@ pub fn init(device: &mut device::Device) { device::events::create_event( device, - device::events::EventType::COMPARE, + device::events::EventType::Compare, !0 as u32 as u64, compare_event, ) diff --git a/src/device/cpu.rs b/src/device/cpu.rs index 12fe8ae..e56db38 100644 --- a/src/device/cpu.rs +++ b/src/device/cpu.rs @@ -30,9 +30,9 @@ pub struct Cpu { pub instrs: [fn(&mut device::Device, u32); 64], pub special_instrs: [fn(&mut device::Device, u32); 64], pub regimm_instrs: [fn(&mut device::Device, u32); 32], - pub events: Vec, + pub events: [device::events::Event; device::events::EventType::EventTypeCount as usize], pub next_event_count: u64, - pub next_event: Option, + pub next_event: usize, } pub fn decode_opcode(device: &mut device::Device, opcode: u32) -> fn(&mut device::Device, u32) { diff --git a/src/device/events.rs b/src/device/events.rs index 900e23b..59c8eb3 100644 --- a/src/device/events.rs +++ b/src/device/events.rs @@ -9,12 +9,13 @@ pub enum EventType { DP, SP, SPDma, - COMPARE, + Compare, + EventTypeCount, } #[derive(PartialEq, Copy, Clone)] pub struct Event { - pub name: EventType, + pub enabled: bool, pub count: u64, pub handler: fn(&mut device::Device), } @@ -25,57 +26,40 @@ pub fn create_event( when: u64, handler: fn(&mut device::Device), ) { - let event = Event { - name: name, + device.cpu.events[name as usize] = Event { + enabled: true, count: when, handler: handler, }; - if get_event(device, name) != None { - panic! {"duplicate event {}", name as usize} - } - device.cpu.events.push(event); set_next_event(device); } pub fn get_event(device: &mut device::Device, name: EventType) -> Option<&mut Event> { - for i in device.cpu.events.iter_mut() { - if i.name == name { - return Some(i); - } + if device.cpu.events[name as usize].enabled { + return Some(&mut device.cpu.events[name as usize]); } return None; } pub fn remove_event(device: &mut device::Device, name: EventType) { - let mut remove_index: usize = 0; - let mut found = false; - for (pos, i) in device.cpu.events.iter_mut().enumerate() { - if i.name == name { - found = true; - remove_index = pos; - break; - } - } - if found { - device.cpu.events.remove(remove_index); - } + device.cpu.events[name as usize].enabled = false; } pub fn trigger_event(device: &mut device::Device) { - let next_event_name = device.cpu.next_event.unwrap().name; - remove_event(device, next_event_name); + let next_event_name = device.cpu.next_event; + device.cpu.events[next_event_name].enabled = false; - let handler = device.cpu.next_event.unwrap().handler; + let handler = device.cpu.events[next_event_name].handler; handler(device); set_next_event(device); } pub fn set_next_event(device: &mut device::Device) { device.cpu.next_event_count = u64::MAX; - for i in device.cpu.events.iter() { - if i.count < device.cpu.next_event_count { + for (pos, i) in device.cpu.events.iter().enumerate() { + if i.enabled && i.count < device.cpu.next_event_count { device.cpu.next_event_count = i.count; - device.cpu.next_event = Some(*i); + device.cpu.next_event = pos; } } } @@ -86,3 +70,7 @@ pub fn translate_events(device: &mut device::Device, old_count: u64, new_count: } set_next_event(device); } + +pub fn dummy_event(_device: &mut device::Device) { + panic!("dummy event") +} diff --git a/src/device/rsp_cpu.rs b/src/device/rsp_cpu.rs index da0c5b7..15d40ca 100644 --- a/src/device/rsp_cpu.rs +++ b/src/device/rsp_cpu.rs @@ -58,7 +58,7 @@ pub fn in_delay_slot_taken(device: &mut device::Device) -> bool { pub fn run(device: &mut device::Device) -> u64 { device.rsp.cpu.broken = false; let mut cycle_counter = 0; - while !device.rsp.cpu.halted && !device.rsp.cpu.sync_point { + while !device.rsp.cpu.sync_point { device.rsp.cpu.instruction_type = InstructionType::Su; device.rsp.cpu.gpr[0] = 0; // gpr 0 is read only let offset = 0x1000 + device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] as usize; @@ -66,7 +66,10 @@ pub fn run(device: &mut device::Device) -> u64 { execute_opcode(device, opcode)(device, opcode); match device.rsp.cpu.branch_state.state { device::cpu::State::Step => { - device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] += 4 + device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] += 4; + if device.rsp.cpu.broken { + break; + } } device::cpu::State::Take => { device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] += 4; @@ -107,10 +110,6 @@ pub fn run(device: &mut device::Device) -> u64 { device.rsp.cpu.pipeline_full = true; } } - - if device.rsp.cpu.broken && device.rsp.cpu.branch_state.state == device::cpu::State::Step { - break; - } } return (cycle_counter as f64 * 1.5) as u64; // converting RCP clock to CPU clock } From 96a7b35619a2d3642098324aa4dcda6756d9dd13 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 5 Oct 2023 21:01:27 -0600 Subject: [PATCH 0014/1117] cache rsp instructions (#8) * cache rsp instructions * more * fix --- src/device.rs | 11 +-- src/device/rsp_cpu.rs | 165 +++++++++++++++++++++++++++++------- src/device/rsp_interface.rs | 45 +++++++--- src/device/sram.rs | 2 +- 4 files changed, 175 insertions(+), 48 deletions(-) diff --git a/src/device.rs b/src/device.rs index f5e80a7..df12329 100644 --- a/src/device.rs +++ b/src/device.rs @@ -184,6 +184,7 @@ impl Device { rdram: rdram::Rdram { mem: vec![] }, rsp: rsp_interface::Rsp { cpu: rsp_cpu::Cpu { + instructions: [rsp_su_instructions::reserved; 0x1000 / 4], last_instruction_type: rsp_cpu::InstructionType::Su, instruction_type: rsp_cpu::InstructionType::Su, pipeline_full: false, @@ -210,12 +211,12 @@ impl Device { accl: unsafe { std::arch::x86_64::_mm_setzero_si128() }, accm: unsafe { std::arch::x86_64::_mm_setzero_si128() }, acch: unsafe { std::arch::x86_64::_mm_setzero_si128() }, - special_instrs: [rsp_su_instructions::reserved; 48], - regimm_instrs: [rsp_su_instructions::reserved; 18], - cop0_instrs: [rsp_su_instructions::reserved; 5], + special_instrs: [rsp_su_instructions::reserved; 64], + regimm_instrs: [rsp_su_instructions::reserved; 32], + cop0_instrs: [rsp_su_instructions::reserved; 32], cop2_instrs: [rsp_su_instructions::reserved; 32], - lwc2_instrs: [rsp_su_instructions::reserved; 12], - swc2_instrs: [rsp_su_instructions::reserved; 12], + lwc2_instrs: [rsp_su_instructions::reserved; 32], + swc2_instrs: [rsp_su_instructions::reserved; 32], instrs: [rsp_su_instructions::reserved; 64], vec_instrs: [rsp_vu_instructions::reserved; 64], }, diff --git a/src/device/rsp_cpu.rs b/src/device/rsp_cpu.rs index 15d40ca..ddbc403 100644 --- a/src/device/rsp_cpu.rs +++ b/src/device/rsp_cpu.rs @@ -13,6 +13,7 @@ pub enum InstructionType { } pub struct Cpu { + pub instructions: [fn(&mut device::Device, u32); 0x1000 / 4], pub last_instruction_type: InstructionType, pub instruction_type: InstructionType, pub pipeline_full: bool, @@ -36,12 +37,12 @@ pub struct Cpu { pub divdp: bool, pub divin: i16, pub divout: i16, - pub special_instrs: [fn(&mut device::Device, u32); 48], - pub regimm_instrs: [fn(&mut device::Device, u32); 18], - pub cop0_instrs: [fn(&mut device::Device, u32); 5], + pub special_instrs: [fn(&mut device::Device, u32); 64], + pub regimm_instrs: [fn(&mut device::Device, u32); 32], + pub cop0_instrs: [fn(&mut device::Device, u32); 32], pub cop2_instrs: [fn(&mut device::Device, u32); 32], - pub lwc2_instrs: [fn(&mut device::Device, u32); 12], - pub swc2_instrs: [fn(&mut device::Device, u32); 12], + pub lwc2_instrs: [fn(&mut device::Device, u32); 32], + pub swc2_instrs: [fn(&mut device::Device, u32); 32], pub instrs: [fn(&mut device::Device, u32); 64], pub vec_instrs: [fn(&mut device::Device, u32); 64], } @@ -63,7 +64,12 @@ pub fn run(device: &mut device::Device) -> u64 { device.rsp.cpu.gpr[0] = 0; // gpr 0 is read only let offset = 0x1000 + device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] as usize; let opcode = u32::from_be_bytes(device.rsp.mem[offset..offset + 4].try_into().unwrap()); - execute_opcode(device, opcode)(device, opcode); + + device.rsp.cpu.instructions + [(device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] / 4) as usize]( + device, opcode, + ); + match device.rsp.cpu.branch_state.state { device::cpu::State::Step => { device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] += 4; @@ -114,7 +120,7 @@ pub fn run(device: &mut device::Device) -> u64 { return (cycle_counter as f64 * 1.5) as u64; // converting RCP clock to CPU clock } -pub fn execute_opcode(device: &mut device::Device, opcode: u32) -> fn(&mut device::Device, u32) { +pub fn decode_opcode(device: &mut device::Device, opcode: u32) -> fn(&mut device::Device, u32) { match opcode >> 26 { 0 => { // SPECIAL @@ -316,6 +322,22 @@ pub fn init(device: &mut device::Device) { device::rsp_su_instructions::reserved, // 45 device::rsp_su_instructions::reserved, // 46 device::rsp_su_instructions::reserved, // 47 + device::rsp_su_instructions::reserved, // 48 + device::rsp_su_instructions::reserved, // 49 + device::rsp_su_instructions::reserved, // 50 + device::rsp_su_instructions::reserved, // 51 + device::rsp_su_instructions::reserved, // 52 + device::rsp_su_instructions::reserved, // 53 + device::rsp_su_instructions::reserved, // 54 + device::rsp_su_instructions::reserved, // 55 + device::rsp_su_instructions::reserved, // 56 + device::rsp_su_instructions::reserved, // 57 + device::rsp_su_instructions::reserved, // 58 + device::rsp_su_instructions::reserved, // 59 + device::rsp_su_instructions::reserved, // 60 + device::rsp_su_instructions::reserved, // 61 + device::rsp_su_instructions::reserved, // 62 + device::rsp_su_instructions::reserved, // 63 ]; device.rsp.cpu.regimm_instrs = [ @@ -337,6 +359,20 @@ pub fn init(device: &mut device::Device) { device::rsp_su_instructions::reserved, // 15 device::rsp_su_instructions::bltzal, // 16 device::rsp_su_instructions::bgezal, // 17 + device::rsp_su_instructions::reserved, // 18 + device::rsp_su_instructions::reserved, // 19 + device::rsp_su_instructions::reserved, // 20 + device::rsp_su_instructions::reserved, // 21 + device::rsp_su_instructions::reserved, // 22 + device::rsp_su_instructions::reserved, // 23 + device::rsp_su_instructions::reserved, // 24 + device::rsp_su_instructions::reserved, // 25 + device::rsp_su_instructions::reserved, // 26 + device::rsp_su_instructions::reserved, // 27 + device::rsp_su_instructions::reserved, // 28 + device::rsp_su_instructions::reserved, // 29 + device::rsp_su_instructions::reserved, // 30 + device::rsp_su_instructions::reserved, // 31 ]; device.rsp.cpu.cop0_instrs = [ @@ -345,6 +381,33 @@ pub fn init(device: &mut device::Device) { device::rsp_su_instructions::reserved, // 2 device::rsp_su_instructions::reserved, // 3 device::rsp_su_instructions::mtc0, // 4 + device::rsp_su_instructions::reserved, // 5 + device::rsp_su_instructions::reserved, // 6 + device::rsp_su_instructions::reserved, // 7 + device::rsp_su_instructions::reserved, // 8 + device::rsp_su_instructions::reserved, // 9 + device::rsp_su_instructions::reserved, // 10 + device::rsp_su_instructions::reserved, // 11 + device::rsp_su_instructions::reserved, // 12 + device::rsp_su_instructions::reserved, // 13 + device::rsp_su_instructions::reserved, // 14 + device::rsp_su_instructions::reserved, // 15 + device::rsp_su_instructions::reserved, // 16 + device::rsp_su_instructions::reserved, // 17 + device::rsp_su_instructions::reserved, // 18 + device::rsp_su_instructions::reserved, // 19 + device::rsp_su_instructions::reserved, // 20 + device::rsp_su_instructions::reserved, // 21 + device::rsp_su_instructions::reserved, // 22 + device::rsp_su_instructions::reserved, // 23 + device::rsp_su_instructions::reserved, // 24 + device::rsp_su_instructions::reserved, // 25 + device::rsp_su_instructions::reserved, // 26 + device::rsp_su_instructions::reserved, // 27 + device::rsp_su_instructions::reserved, // 28 + device::rsp_su_instructions::reserved, // 29 + device::rsp_su_instructions::reserved, // 30 + device::rsp_su_instructions::reserved, // 31 ]; device.rsp.cpu.cop2_instrs = [ @@ -383,33 +446,73 @@ pub fn init(device: &mut device::Device) { ]; device.rsp.cpu.lwc2_instrs = [ - device::rsp_su_instructions::lbv, // 0 - device::rsp_su_instructions::lsv, // 1 - device::rsp_su_instructions::llv, // 2 - device::rsp_su_instructions::ldv, // 3 - device::rsp_su_instructions::lqv, // 4 - device::rsp_su_instructions::lrv, // 5 - device::rsp_su_instructions::lpv, // 6 - device::rsp_su_instructions::luv, // 7 - device::rsp_su_instructions::lhv, // 8 - device::rsp_su_instructions::lfv, // 9 - device::rsp_su_instructions::lwv, // 10 - device::rsp_su_instructions::ltv, // 11 + device::rsp_su_instructions::lbv, // 0 + device::rsp_su_instructions::lsv, // 1 + device::rsp_su_instructions::llv, // 2 + device::rsp_su_instructions::ldv, // 3 + device::rsp_su_instructions::lqv, // 4 + device::rsp_su_instructions::lrv, // 5 + device::rsp_su_instructions::lpv, // 6 + device::rsp_su_instructions::luv, // 7 + device::rsp_su_instructions::lhv, // 8 + device::rsp_su_instructions::lfv, // 9 + device::rsp_su_instructions::lwv, // 10 + device::rsp_su_instructions::ltv, // 11 + device::rsp_su_instructions::reserved, // 12 + device::rsp_su_instructions::reserved, // 13 + device::rsp_su_instructions::reserved, // 14 + device::rsp_su_instructions::reserved, // 15 + device::rsp_su_instructions::reserved, // 16 + device::rsp_su_instructions::reserved, // 17 + device::rsp_su_instructions::reserved, // 18 + device::rsp_su_instructions::reserved, // 19 + device::rsp_su_instructions::reserved, // 20 + device::rsp_su_instructions::reserved, // 21 + device::rsp_su_instructions::reserved, // 22 + device::rsp_su_instructions::reserved, // 23 + device::rsp_su_instructions::reserved, // 24 + device::rsp_su_instructions::reserved, // 25 + device::rsp_su_instructions::reserved, // 26 + device::rsp_su_instructions::reserved, // 27 + device::rsp_su_instructions::reserved, // 28 + device::rsp_su_instructions::reserved, // 29 + device::rsp_su_instructions::reserved, // 30 + device::rsp_su_instructions::reserved, // 31 ]; device.rsp.cpu.swc2_instrs = [ - device::rsp_su_instructions::sbv, // 0 - device::rsp_su_instructions::ssv, // 1 - device::rsp_su_instructions::slv, // 2 - device::rsp_su_instructions::sdv, // 3 - device::rsp_su_instructions::sqv, // 4 - device::rsp_su_instructions::srv, // 5 - device::rsp_su_instructions::spv, // 6 - device::rsp_su_instructions::suv, // 7 - device::rsp_su_instructions::shv, // 8 - device::rsp_su_instructions::sfv, // 9 - device::rsp_su_instructions::swv, // 10 - device::rsp_su_instructions::stv, // 11 + device::rsp_su_instructions::sbv, // 0 + device::rsp_su_instructions::ssv, // 1 + device::rsp_su_instructions::slv, // 2 + device::rsp_su_instructions::sdv, // 3 + device::rsp_su_instructions::sqv, // 4 + device::rsp_su_instructions::srv, // 5 + device::rsp_su_instructions::spv, // 6 + device::rsp_su_instructions::suv, // 7 + device::rsp_su_instructions::shv, // 8 + device::rsp_su_instructions::sfv, // 9 + device::rsp_su_instructions::swv, // 10 + device::rsp_su_instructions::stv, // 11 + device::rsp_su_instructions::reserved, // 12 + device::rsp_su_instructions::reserved, // 13 + device::rsp_su_instructions::reserved, // 14 + device::rsp_su_instructions::reserved, // 15 + device::rsp_su_instructions::reserved, // 16 + device::rsp_su_instructions::reserved, // 17 + device::rsp_su_instructions::reserved, // 18 + device::rsp_su_instructions::reserved, // 19 + device::rsp_su_instructions::reserved, // 20 + device::rsp_su_instructions::reserved, // 21 + device::rsp_su_instructions::reserved, // 22 + device::rsp_su_instructions::reserved, // 23 + device::rsp_su_instructions::reserved, // 24 + device::rsp_su_instructions::reserved, // 25 + device::rsp_su_instructions::reserved, // 26 + device::rsp_su_instructions::reserved, // 27 + device::rsp_su_instructions::reserved, // 28 + device::rsp_su_instructions::reserved, // 29 + device::rsp_su_instructions::reserved, // 30 + device::rsp_su_instructions::reserved, // 31 ]; device.rsp.cpu.vec_instrs = [ diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index 6969f55..3f56128 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -117,7 +117,13 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, _mask: u .unwrap(), ); device::memory::masked_write_32(&mut data, value, 0xFFFFFFFF); - device.rsp.mem[masked_address..masked_address + 4].copy_from_slice(&data.to_be_bytes()) + device.rsp.mem[masked_address..masked_address + 4].copy_from_slice(&data.to_be_bytes()); + + if masked_address & 0x1000 != 0 { + // imem being updated + device.rsp.cpu.instructions[((masked_address & 0xFFF) / 4) as usize] = + device::rsp_cpu::decode_opcode(device, data); + } // SH/SB are broken: They overwrite the whole 32 bit, filling everything that isn't written with zeroes } @@ -138,11 +144,17 @@ pub fn do_dma(device: &mut device::Device, dma: RspDma) { while j < count { let mut i = 0; while i < length { - device.rdram.mem[dram_addr as usize ^ device.byte_swap] = - device.rsp.mem[(offset + (mem_addr & 0xFFF)) as usize]; - mem_addr += 1; - dram_addr += 1; - i += 1; + let data = u32::from_be_bytes( + device.rsp.mem[(offset + (mem_addr & 0xFFF)) as usize + ..(offset + (mem_addr & 0xFFF)) as usize + 4] + .try_into() + .unwrap(), + ); + device.rdram.mem[dram_addr as usize..dram_addr as usize + 4] + .copy_from_slice(&data.to_ne_bytes()); + mem_addr += 4; + dram_addr += 4; + i += 4; } dram_addr += skip; j += 1; @@ -152,11 +164,22 @@ pub fn do_dma(device: &mut device::Device, dma: RspDma) { while j < count { let mut i = 0; while i < length { - device.rsp.mem[(offset + (mem_addr & 0xFFF)) as usize] = - device.rdram.mem[dram_addr as usize ^ device.byte_swap]; - mem_addr += 1; - dram_addr += 1; - i += 1; + let data = u32::from_ne_bytes( + device.rdram.mem[dram_addr as usize..dram_addr as usize + 4] + .try_into() + .unwrap(), + ); + if offset != 0 { + // imem being updated + device.rsp.cpu.instructions[((mem_addr & 0xFFF) / 4) as usize] = + device::rsp_cpu::decode_opcode(device, data); + } + device.rsp.mem[(offset + (mem_addr & 0xFFF)) as usize + ..(offset + (mem_addr & 0xFFF)) as usize + 4] + .copy_from_slice(&data.to_be_bytes()); + mem_addr += 4; + dram_addr += 4; + i += 4; } dram_addr += skip; j += 1; diff --git a/src/device/sram.rs b/src/device/sram.rs index 20cc127..48fe57a 100644 --- a/src/device/sram.rs +++ b/src/device/sram.rs @@ -75,7 +75,7 @@ pub fn dma_read(device: &mut device::Device, cart_addr: u32, dram_addr: u32, len .resize((cart_addr + length) as usize, 0xFF) } - while j < cart_addr + length { + while i < dram_addr + length { device.ui.saves.sram[j as usize] = device.rdram.mem[i as usize ^ device.byte_swap]; i += 1; j += 1; From 36c56dacce154ca486418a96e3247c6228bb2d4c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 5 Oct 2023 21:17:40 -0600 Subject: [PATCH 0015/1117] add readme --- .github/workflows/build.yml | 4 ++-- README.md | 32 ++++++++++++++++++++++++++++++++ build_debug.sh | 2 +- build_release.sh | 2 +- 4 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 README.md diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bb94a2b..ee590f6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,8 +18,8 @@ jobs: submodules: recursive - name: Update rust run: | - rustup default nightly rustup update + rustup install nightly - name: Build run: | ./build_release.sh @@ -38,8 +38,8 @@ jobs: - name: Update rust shell: bash run: | - rustup default nightly rustup update + rustup install nightly - name: Build shell: bash run: | diff --git a/README.md b/README.md new file mode 100644 index 0000000..68fc9da --- /dev/null +++ b/README.md @@ -0,0 +1,32 @@ +# gopher64 + +## goals + +1. Performance. I want to be able to use this emulator on my laptop. +2. Easy to use. +3. Easy to work on. Dynamic recompilers perform well, but they are very hard to read and understand. This emulator will only have interpreters for the CPU and RSP. Additionally, it is completely written in Rust (besides Parallel-RDP), a modern programming language with a growing user base. I've tried to avoid the use of macros, which can reduce some repetitiveness in the code, but also reduce readability. + +## building and usage + +1. Install rust: https://www.rust-lang.org/tools/install +2. `rustup install nightly` +3. `git clone --recursive https://github.com/gopher64/gopher64.git` +4. `cd gopher64` +5. `./build_release.sh` +6. `./target/release/gopher64 /path/to/rom.z64` + +## controls + +Right now, only keyboard is supported. Keys are mapped according to mupen64plus defaults: https://mupen64plus.org/wiki/index.php/KeyboardSetup#2._Default_Key_Mappings_for_SDL-Input_Plugin + +## contributing + +I am very open to contributions! Please reach out to me via a GitHub issue, or via discord (loganmc10) before doing substantial work on a PR. + +## license + +Gopher64 is licensed under the GPLv3 license. Many portions of gopher64 have been adapted from mupen64plus and/or ares. The license for mupen64plus can be found here: https://github.com/mupen64plus/mupen64plus-core/blob/master/LICENSES. The license for ares can be found here: https://github.com/ares-emulator/ares/blob/master/LICENSE. + +## where to download + +Builds can be found as artifacts on [GitHub Actions](https://github.com/gopher64/gopher64/actions?query=branch%3Amain) diff --git a/build_debug.sh b/build_debug.sh index 2879946..a56659e 100755 --- a/build_debug.sh +++ b/build_debug.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -RUSTFLAGS='-C target-cpu=x86-64-v3' cargo build +RUSTFLAGS='-C target-cpu=x86-64-v3' cargo +nightly build diff --git a/build_release.sh b/build_release.sh index adacbd7..08f5cb5 100755 --- a/build_release.sh +++ b/build_release.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -RUSTFLAGS='-C target-cpu=x86-64-v3' cargo build --release +RUSTFLAGS='-C target-cpu=x86-64-v3' cargo +nightly build --release From dfcd0a21d7a80607795e8b5b9c5a2446d77d06b7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 6 Oct 2023 09:41:27 -0600 Subject: [PATCH 0016/1117] clean up build process (#9) * clean up build process * more * more * add mac * more * more * Update build.rs --- .cargo/config.toml | 8 ++++++++ .github/workflows/build.yml | 26 ++++++++++++++++++++------ README.md | 2 +- build.rs | 3 ++- build_debug.sh | 3 --- build_release.sh | 3 --- rust-toolchain.toml | 2 ++ 7 files changed, 33 insertions(+), 14 deletions(-) create mode 100644 .cargo/config.toml delete mode 100755 build_debug.sh delete mode 100755 build_release.sh create mode 100644 rust-toolchain.toml diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..2786085 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,8 @@ +[target.x86_64-unknown-linux-gnu] +rustflags = ["-C", "target-cpu=x86-64-v3"] + +[target.x86_64-pc-windows-msvc] +rustflags = ["-C", "target-cpu=x86-64-v3"] + +[target.x86_64-apple-darwin] +rustflags = ["-C", "target-cpu=x86-64-v2"] diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ee590f6..5830f3a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,10 +19,9 @@ jobs: - name: Update rust run: | rustup update - rustup install nightly - name: Build run: | - ./build_release.sh + cargo build --release -v - name: Upload file uses: actions/upload-artifact@v3 with: @@ -36,16 +35,31 @@ jobs: with: submodules: recursive - name: Update rust - shell: bash run: | rustup update - rustup install nightly - name: Build - shell: bash run: | - ./build_release.sh + cargo build --release -v - name: Upload file uses: actions/upload-artifact@v3 with: name: gopher64-windows path: target/release/gopher64.exe + + build-macos: + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Update rust + run: | + rustup update + - name: Build + run: | + cargo build --release -v + - name: Upload file + uses: actions/upload-artifact@v3 + with: + name: gopher64-mac + path: target/release/gopher64 diff --git a/README.md b/README.md index 68fc9da..a265b0e 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ 2. `rustup install nightly` 3. `git clone --recursive https://github.com/gopher64/gopher64.git` 4. `cd gopher64` -5. `./build_release.sh` +5. `cargo build --release` 6. `./target/release/gopher64 /path/to/rom.z64` ## controls diff --git a/build.rs b/build.rs index 2e3e002..e0272b7 100644 --- a/build.rs +++ b/build.rs @@ -2,6 +2,7 @@ fn main() { let mut build = cc::Build::new(); build .cpp(true) + .std("c++17") .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/command_ring.cpp") .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/rdp_device.cpp") .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/rdp_dump_write.cpp") @@ -51,7 +52,7 @@ fn main() { { build.flag("-DVK_USE_PLATFORM_WIN32_KHR"); } - #[cfg(target_os = "linux")] + #[cfg(any(target_os = "linux", target_os = "macos"))] { build .flag("-Wno-missing-field-initializers") diff --git a/build_debug.sh b/build_debug.sh deleted file mode 100755 index a56659e..0000000 --- a/build_debug.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -RUSTFLAGS='-C target-cpu=x86-64-v3' cargo +nightly build diff --git a/build_release.sh b/build_release.sh deleted file mode 100755 index 08f5cb5..0000000 --- a/build_release.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -RUSTFLAGS='-C target-cpu=x86-64-v3' cargo +nightly build --release diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000..5d56faf --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "nightly" From 6fb559a599fa21ba2bef54b790d81a1f3878be43 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 6 Oct 2023 09:47:41 -0600 Subject: [PATCH 0017/1117] update build steps --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index a265b0e..1893483 100644 --- a/README.md +++ b/README.md @@ -9,11 +9,10 @@ ## building and usage 1. Install rust: https://www.rust-lang.org/tools/install -2. `rustup install nightly` -3. `git clone --recursive https://github.com/gopher64/gopher64.git` -4. `cd gopher64` -5. `cargo build --release` -6. `./target/release/gopher64 /path/to/rom.z64` +2. `git clone --recursive https://github.com/gopher64/gopher64.git` +3. `cd gopher64` +4. `cargo build --release` +5. `./target/release/gopher64 /path/to/rom.z64` ## controls From 95b50577466b8ea9b0ec178cb155ca9025ce3345 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 6 Oct 2023 10:51:30 -0600 Subject: [PATCH 0018/1117] masking fix --- src/device/cart_rom.rs | 19 ++++++++++++------- src/device/sram.rs | 26 ++++++++++++++++++++------ 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/src/device/cart_rom.rs b/src/device/cart_rom.rs index 62c0000..67af3cc 100644 --- a/src/device/cart_rom.rs +++ b/src/device/cart_rom.rs @@ -73,17 +73,22 @@ pub fn dma_read(device: &mut device::Device, _cart_addr: u32, _dram_addr: u32, l } // cart is big endian, rdram is native endian -pub fn dma_write(device: &mut device::Device, cart_addr: u32, dram_addr: u32, length: u32) -> u64 { - let mut i = dram_addr & device::rdram::RDRAM_MASK as u32; - let mut j = cart_addr & CART_MASK as u32; - while i < (dram_addr & device::rdram::RDRAM_MASK as u32) + length - && j < device.cart.rom.len() as u32 - { +pub fn dma_write( + device: &mut device::Device, + mut cart_addr: u32, + mut dram_addr: u32, + length: u32, +) -> u64 { + dram_addr &= device::rdram::RDRAM_MASK as u32; + cart_addr &= CART_MASK as u32; + let mut i = dram_addr; + let mut j = cart_addr; + while i < dram_addr + length && j < device.cart.rom.len() as u32 { device.rdram.mem[i as usize ^ device.byte_swap] = device.cart.rom[j as usize]; i += 1; j += 1; } - while i < (dram_addr & device::rdram::RDRAM_MASK as u32) + length { + while i < dram_addr + length { // DMAs that extend past the end of the ROM return 0's for the portion that extends past the ROM length device.rdram.mem[i as usize ^ device.byte_swap] = 0; i += 1; diff --git a/src/device/sram.rs b/src/device/sram.rs index 48fe57a..4f11620 100644 --- a/src/device/sram.rs +++ b/src/device/sram.rs @@ -62,10 +62,17 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 } // cart is big endian, rdram is native endian -pub fn dma_read(device: &mut device::Device, cart_addr: u32, dram_addr: u32, length: u32) -> u64 { +pub fn dma_read( + device: &mut device::Device, + mut cart_addr: u32, + mut dram_addr: u32, + length: u32, +) -> u64 { if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { - let mut i = dram_addr & device::rdram::RDRAM_MASK as u32; - let mut j = cart_addr & SRAM_MASK as u32; + dram_addr &= device::rdram::RDRAM_MASK as u32; + cart_addr &= SRAM_MASK as u32; + let mut i = dram_addr; + let mut j = cart_addr; if (cart_addr + length) as usize > device.ui.saves.sram.len() { device @@ -89,10 +96,17 @@ pub fn dma_read(device: &mut device::Device, cart_addr: u32, dram_addr: u32, len } // cart is big endian, rdram is native endian -pub fn dma_write(device: &mut device::Device, cart_addr: u32, dram_addr: u32, length: u32) -> u64 { +pub fn dma_write( + device: &mut device::Device, + mut cart_addr: u32, + mut dram_addr: u32, + length: u32, +) -> u64 { if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { - let mut i = dram_addr & device::rdram::RDRAM_MASK as u32; - let mut j = cart_addr & SRAM_MASK as u32; + dram_addr &= device::rdram::RDRAM_MASK as u32; + cart_addr &= SRAM_MASK as u32; + let mut i = dram_addr; + let mut j = cart_addr; if (cart_addr + length) as usize > device.ui.saves.sram.len() { device From 8762c287143335d379290878db42ba4534869c1f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 6 Oct 2023 11:07:50 -0600 Subject: [PATCH 0019/1117] pi dma fixes --- src/device/pi.rs | 61 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 13 deletions(-) diff --git a/src/device/pi.rs b/src/device/pi.rs index 4db371d..d743758 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -39,17 +39,32 @@ pub fn read_regs( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { - return device.pi.regs[((address & 0xFFFF) >> 2) as usize]; + let reg = (address & 0xFFFF) >> 2; + match reg as u32 { + PI_WR_LEN_REG | PI_RD_LEN_REG => { + return 0x7F; + } + PI_CART_ADDR_REG => return device.pi.regs[reg as usize] & 0xFFFFFFFE, + PI_DRAM_ADDR_REG => return device.pi.regs[reg as usize] & 0xFFFFFE, + _ => { + return device.pi.regs[reg as usize]; + } + } } pub fn dma_read(device: &mut device::Device) { let handler = get_handler(device.pi.regs[PI_CART_ADDR_REG as usize]); - let cycles = (handler.read)( - device, - device.pi.regs[PI_CART_ADDR_REG as usize], - device.pi.regs[PI_DRAM_ADDR_REG as usize], - device.pi.regs[PI_RD_LEN_REG as usize] + 1, - ); + + let cart_addr = device.pi.regs[PI_CART_ADDR_REG as usize] & !1; + let dram_addr = device.pi.regs[PI_DRAM_ADDR_REG as usize] & 0xFFFFFE; + let mut length = (device.pi.regs[PI_RD_LEN_REG as usize] & 0xFFFFFF) + 1; + + /* PI seems to treat the first 128 bytes differently, see https://n64brew.dev/wiki/Peripheral_Interface#Unaligned_DMA_transfer */ + if length >= 0x7f && (length & 1) != 0 { + length += 1; + } + + let cycles = (handler.read)(device, cart_addr, dram_addr, length); device::events::create_event( device, @@ -58,17 +73,31 @@ pub fn dma_read(device: &mut device::Device) { dma_event, ); + /* Update PI_DRAM_ADDR_REG and PI_CART_ADDR_REG */ + device.pi.regs[PI_DRAM_ADDR_REG as usize] = + (device.pi.regs[PI_DRAM_ADDR_REG as usize] + length + 7) & !7; + device.pi.regs[PI_CART_ADDR_REG as usize] = + (device.pi.regs[PI_CART_ADDR_REG as usize] + length + 1) & !1; + device.pi.regs[PI_STATUS_REG as usize] |= PI_STATUS_DMA_BUSY } pub fn dma_write(device: &mut device::Device) { let handler = get_handler(device.pi.regs[PI_CART_ADDR_REG as usize]); - let cycles = (handler.write)( - device, - device.pi.regs[PI_CART_ADDR_REG as usize], - device.pi.regs[PI_DRAM_ADDR_REG as usize], - device.pi.regs[PI_WR_LEN_REG as usize] + 1, - ); + + let cart_addr = device.pi.regs[PI_CART_ADDR_REG as usize] & !1; + let dram_addr = device.pi.regs[PI_DRAM_ADDR_REG as usize] & 0xFFFFFE; + let mut length = (device.pi.regs[PI_WR_LEN_REG as usize] & 0xFFFFFF) + 1; + + /* PI seems to treat the first 128 bytes differently, see https://n64brew.dev/wiki/Peripheral_Interface#Unaligned_DMA_transfer */ + if length >= 0x7f && (length & 1) != 0 { + length += 1; + } + if length <= 0x80 { + length -= dram_addr & 0x7; + } + + let cycles = (handler.write)(device, cart_addr, dram_addr, length); device::events::create_event( device, @@ -77,6 +106,12 @@ pub fn dma_write(device: &mut device::Device) { dma_event, ); + /* Update PI_DRAM_ADDR_REG and PI_CART_ADDR_REG */ + device.pi.regs[PI_DRAM_ADDR_REG as usize] = + (device.pi.regs[PI_DRAM_ADDR_REG as usize] + length + 7) & !7; + device.pi.regs[PI_CART_ADDR_REG as usize] = + (device.pi.regs[PI_CART_ADDR_REG as usize] + length + 1) & !1; + device.pi.regs[PI_STATUS_REG as usize] |= PI_STATUS_DMA_BUSY } From a9bff5c568ae64d28f5ab9496593f31ad82ac4fa Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 6 Oct 2023 11:15:49 -0600 Subject: [PATCH 0020/1117] fix rsp test --- src/device/rsp_cpu.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/device/rsp_cpu.rs b/src/device/rsp_cpu.rs index ddbc403..d5bf54e 100644 --- a/src/device/rsp_cpu.rs +++ b/src/device/rsp_cpu.rs @@ -88,11 +88,17 @@ pub fn run(device: &mut device::Device) -> u64 { device::cpu::State::DelaySlotTaken => { device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] = device.rsp.cpu.branch_state.pc; - device.rsp.cpu.branch_state.state = device::cpu::State::Step + device.rsp.cpu.branch_state.state = device::cpu::State::Step; + if device.rsp.cpu.broken { + break; + } } device::cpu::State::DelaySlotNotTaken => { device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] += 4; - device.rsp.cpu.branch_state.state = device::cpu::State::Step + device.rsp.cpu.branch_state.state = device::cpu::State::Step; + if device.rsp.cpu.broken { + break; + } } device::cpu::State::Discard => { device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] += 8; From c193b0377126b8217e390abafa39c364c3fdefab Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 6 Oct 2023 13:37:43 -0600 Subject: [PATCH 0021/1117] Tlb fixes (#10) * tlb fixes * more * more * more * more * back * clean --- src/device/cop0.rs | 1 + src/device/cpu_instructions.rs | 42 +++++++++++++++++----------- src/device/exceptions.rs | 50 ++++++++++++++++++++++++++-------- 3 files changed, 66 insertions(+), 27 deletions(-) diff --git a/src/device/cop0.rs b/src/device/cop0.rs index a1d7654..56a0772 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -43,6 +43,7 @@ pub const COP0_STATUS_CU1: u64 = 1 << 29; pub const COP0_STATUS_CU2: u64 = 1 << 30; //pub const COP0_CAUSE_EXCCODE_INTR: u64 = 0 << 2; +pub const COP0_CAUSE_EXCCODE_MOD: u64 = 1 << 2; pub const COP0_CAUSE_EXCCODE_TLBL: u64 = 2 << 2; pub const COP0_CAUSE_EXCCODE_TLBS: u64 = 3 << 2; //pub const COP0_CAUSE_EXCCODE_ADEL: u64 = 4 << 2; diff --git a/src/device/cpu_instructions.rs b/src/device/cpu_instructions.rs index 79aba19..301c703 100644 --- a/src/device/cpu_instructions.rs +++ b/src/device/cpu_instructions.rs @@ -246,11 +246,12 @@ pub fn ldl(device: &mut device::Device, opcode: u32) { let shift = 8 * n; let mask = bits_below_mask(8 * n); - let (phys_address, cached, err) = - device::memory::translate_address(device, addr & !7, device::memory::AccessType::Read); + let (mut phys_address, cached, err) = + device::memory::translate_address(device, addr, device::memory::AccessType::Read); if err { return; } + phys_address &= !7; let mut w = [0; 2]; w[0] = device::memory::data_read( @@ -280,11 +281,12 @@ pub fn ldr(device: &mut device::Device, opcode: u32) { mask = bits_above_mask(8 * (n + 1)) } - let (phys_address, cached, err) = - device::memory::translate_address(device, addr & !7, device::memory::AccessType::Read); + let (mut phys_address, cached, err) = + device::memory::translate_address(device, addr, device::memory::AccessType::Read); if err { return; } + phys_address &= !7; let mut w = [0; 2]; w[0] = device::memory::data_read( @@ -349,11 +351,12 @@ pub fn lwl(device: &mut device::Device, opcode: u32) { let shift = 8 * n; let mask = bits_below_mask(8 * n) as u32; - let (phys_address, cached, err) = - device::memory::translate_address(device, addr & !3, device::memory::AccessType::Read); + let (mut phys_address, cached, err) = + device::memory::translate_address(device, addr, device::memory::AccessType::Read); if err { return; } + phys_address &= !3; device.cpu.gpr[rt(opcode) as usize] = se32( ((device.cpu.gpr[rt(opcode) as usize] as u32) & mask @@ -433,11 +436,12 @@ pub fn lwr(device: &mut device::Device, opcode: u32) { mask = bits_above_mask(8 * (n + 1)) } - let (phys_address, cached, err) = - device::memory::translate_address(device, addr & !3, device::memory::AccessType::Read); + let (mut phys_address, cached, err) = + device::memory::translate_address(device, addr, device::memory::AccessType::Read); if err { return; } + phys_address &= !3; device.cpu.gpr[rt(opcode) as usize] = se32( ((device.cpu.gpr[rt(opcode) as usize] as u32) & (mask as u32) @@ -522,11 +526,13 @@ pub fn swl(device: &mut device::Device, opcode: u32) { mask = bits_below_mask(8 * (4 - n)) as u32 } - let (phys_address, cached, err) = - device::memory::translate_address(device, addr & !3, device::memory::AccessType::Write); + let (mut phys_address, cached, err) = + device::memory::translate_address(device, addr, device::memory::AccessType::Write); if err { return; } + phys_address &= !3; + device::memory::data_write( device, phys_address, @@ -567,11 +573,12 @@ pub fn sdl(device: &mut device::Device, opcode: u32) { mask = bits_below_mask(8 * (8 - n)) } - let (phys_address, cached, err) = - device::memory::translate_address(device, addr & !7, device::memory::AccessType::Write); + let (mut phys_address, cached, err) = + device::memory::translate_address(device, addr, device::memory::AccessType::Write); if err { return; } + phys_address &= !7; let value = device.cpu.gpr[rt(opcode) as usize] >> shift; device::memory::data_write( @@ -591,11 +598,12 @@ pub fn sdr(device: &mut device::Device, opcode: u32) { let mask = bits_above_mask(8 * (7 - n)); - let (phys_address, cached, err) = - device::memory::translate_address(device, addr & !7, device::memory::AccessType::Write); + let (mut phys_address, cached, err) = + device::memory::translate_address(device, addr, device::memory::AccessType::Write); if err { return; } + phys_address &= !7; let value = device.cpu.gpr[rt(opcode) as usize] << shift; device::memory::data_write( @@ -615,11 +623,13 @@ pub fn swr(device: &mut device::Device, opcode: u32) { let mask = bits_above_mask(8 * (3 - n)) as u32; - let (phys_address, cached, err) = - device::memory::translate_address(device, addr & !3, device::memory::AccessType::Write); + let (mut phys_address, cached, err) = + device::memory::translate_address(device, addr, device::memory::AccessType::Write); if err { return; } + phys_address &= !3; + device::memory::data_write( device, phys_address, diff --git a/src/device/exceptions.rs b/src/device/exceptions.rs index 18497cd..14adacd 100644 --- a/src/device/exceptions.rs +++ b/src/device/exceptions.rs @@ -20,49 +20,49 @@ pub fn check_pending_interrupts(device: &mut device::Device) { return; } - exception_general(device); + exception_general(device, 0x180); } pub fn floating_point_exception(device: &mut device::Device) { device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = device::cop0::COP0_CAUSE_EXCCODE_FPE; - exception_general(device) + exception_general(device, 0x180) } pub fn trap_exception(device: &mut device::Device) { device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = device::cop0::COP0_CAUSE_EXCCODE_TR; - exception_general(device) + exception_general(device, 0x180) } pub fn syscall_exception(device: &mut device::Device) { device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = device::cop0::COP0_CAUSE_EXCCODE_SYS; - exception_general(device) + exception_general(device, 0x180) } pub fn break_exception(device: &mut device::Device) { device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = device::cop0::COP0_CAUSE_EXCCODE_BP; - exception_general(device) + exception_general(device, 0x180) } pub fn reserved_exception(device: &mut device::Device, cop: u64) { device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = device::cop0::COP0_CAUSE_EXCCODE_RI | cop; - exception_general(device) + exception_general(device, 0x180) } pub fn cop_unusable_exception(device: &mut device::Device, cop: u64) { device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = device::cop0::COP0_CAUSE_EXCCODE_CPU | cop; - exception_general(device) + exception_general(device, 0x180) } pub fn tlb_miss_exception( @@ -94,17 +94,46 @@ pub fn tlb_miss_exception( address >> 31, device::cop0::COP0_XCONTEXT_REGION_MASK, ); + device::memory::masked_write_64( + &mut device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize], + address, + 0xFFFFE000, + ); + + let mut vector_offset = 0x180; + let mut valid = true; + for i in device.cpu.cop0.tlb_entries { + if address & !3 >= i.start_even && address & !3 <= i.end_even { + valid = i.v_even != 0; + if valid && access_type == device::memory::AccessType::Write && i.d_even == 0 { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = + device::cop0::COP0_CAUSE_EXCCODE_MOD; + valid = false; + } + break; + } + if address & !3 >= i.start_odd && address & !3 <= i.start_odd { + valid = i.v_odd != 0; + if valid && access_type == device::memory::AccessType::Write && i.d_odd == 0 { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = + device::cop0::COP0_CAUSE_EXCCODE_MOD; + valid = false; + } + break; + } + } if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_EXL == 0 + && valid { - device.cpu.pc -= 0x180 + vector_offset = 0; } - exception_general(device) + exception_general(device, vector_offset) } -pub fn exception_general(device: &mut device::Device) { +pub fn exception_general(device: &mut device::Device, vector_offset: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_EXL == 0 { @@ -121,7 +150,6 @@ pub fn exception_general(device: &mut device::Device) { device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] |= device::cop0::COP0_STATUS_EXL; - let vector_offset: u32 = 0x180; if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_BEV == 0 { From cb4b7b878f71a3048abcb41ce081782ed1dc5d62 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 6 Oct 2023 18:50:25 -0600 Subject: [PATCH 0022/1117] simplify audio --- src/ui/audio.rs | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 9a4d96a..125aeb9 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -32,19 +32,5 @@ pub fn play_audio(device: &mut device::Device, dram_addr: usize, length: u64) { i += 2; } - let audio_queued = audio_device.size() as f64; - let acceptable_latency = (audio_device.spec().freq as f64 * 0.2) * 4.0; - let min_latency = (audio_device.spec().freq as f64 * 0.02) * 4.0; - - if audio_device.status() != sdl2::audio::AudioStatus::Paused && audio_queued < min_latency { - audio_device.pause(); - } else if audio_device.status() == sdl2::audio::AudioStatus::Paused - && audio_queued >= (min_latency * 2.0) - { - audio_device.resume(); - } - - if audio_queued < acceptable_latency { - let _ = audio_device.queue_audio(&primary_buffer); - } + let _ = audio_device.queue_audio(&primary_buffer); } From edbf10212b377485cbde3eadac75d2cf8894163d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 6 Oct 2023 20:23:59 -0600 Subject: [PATCH 0023/1117] rework frame limiter --- src/device.rs | 1 + src/device/vi.rs | 20 +++++++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/device.rs b/src/device.rs index df12329..9ba8224 100644 --- a/src/device.rs +++ b/src/device.rs @@ -262,6 +262,7 @@ impl Device { clock: 0, field: 0, delay: 0, + holdover: std::time::Duration::from_secs(0), count_per_scanline: 0, last_vi_time: std::time::Instant::now(), vi_period: std::time::Duration::from_secs_f64(0.0), diff --git a/src/device/vi.rs b/src/device/vi.rs index f87b183..5f8864a 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -22,6 +22,7 @@ pub struct Vi { pub clock: u64, pub delay: u64, pub field: u32, + pub holdover: std::time::Duration, pub count_per_scanline: u64, pub last_vi_time: std::time::Instant, pub vi_period: std::time::Duration, @@ -123,9 +124,22 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { */ let elapsed = device.vi.last_vi_time.elapsed(); - if elapsed < device.vi.vi_period { - let diff = device.vi.vi_period - elapsed; - std::thread::sleep(diff); + if elapsed <= device.vi.vi_period { + let sleep_time = device.vi.vi_period - elapsed; + let remaining_holdover_space = device.vi.vi_period - device.vi.holdover; // holdover can't exceed the vi period + if sleep_time <= remaining_holdover_space { + device.vi.holdover += sleep_time; // donate all time to the holdover + } else { + device.vi.holdover += remaining_holdover_space; // max out holdover + std::thread::sleep(sleep_time - remaining_holdover_space); // sleep the rest of the time + } + } else { + let over_time = elapsed - device.vi.vi_period; // this is how much we overshot the vi period + if over_time <= device.vi.holdover { + device.vi.holdover -= over_time; // consume some holdover + } else { + device.vi.holdover -= device.vi.holdover; // consume all holdover + } } device.vi.last_vi_time = std::time::Instant::now(); From 1318adaafb9c3588664dbabf2d44544c9144667a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 6 Oct 2023 20:30:49 -0600 Subject: [PATCH 0024/1117] only once --- src/device/vi.rs | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index 5f8864a..c140a58 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -92,20 +92,26 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u match reg as u32 { VI_CURRENT_REG => device::mi::clear_rcp_interrupt(device, device::mi::MI_INTR_VI), VI_V_INTR_REG => { - device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); - set_vertical_interrupt(device); - ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) + if device.vi.regs[reg as usize] != value & mask { + device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); + set_vertical_interrupt(device); + ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) + } } VI_V_SYNC_REG => { - device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); - set_vertical_interrupt(device); - set_expected_refresh_rate(device); - ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) + if device.vi.regs[reg as usize] != value & mask { + device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); + set_vertical_interrupt(device); + set_expected_refresh_rate(device); + ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) + } } VI_H_SYNC_REG => { - device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); - set_expected_refresh_rate(device); - ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) + if device.vi.regs[reg as usize] != value & mask { + device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); + set_expected_refresh_rate(device); + ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) + } } _ => { device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); From 935065a3ad8f3c3acdfd1e4ae05ed566d91418f7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 6 Oct 2023 20:43:20 -0600 Subject: [PATCH 0025/1117] audio tweak --- src/device/ai.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/device/ai.rs b/src/device/ai.rs index 2b192b4..63a26de 100644 --- a/src/device/ai.rs +++ b/src/device/ai.rs @@ -117,15 +117,17 @@ pub fn read_regs( match reg as u32 { AI_LEN_REG => { let value = get_remaining_dma_length(device); - let diff = device.ai.fifo[0].length - device.ai.last_read; + if value < device.ai.last_read { + let diff = device.ai.fifo[0].length - device.ai.last_read; - ui::audio::play_audio( - device, - (device.ai.fifo[0].address + diff) as usize, - device.ai.last_read - value, - ); + ui::audio::play_audio( + device, + (device.ai.fifo[0].address + diff) as usize, + device.ai.last_read - value, + ); - device.ai.last_read = value; + device.ai.last_read = value; + } return value as u32; } _ => return device.ai.regs[reg as usize], From ccbade0c6b5e5ddd015cd1e1ef2fc76a0a00d89f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 6 Oct 2023 20:58:35 -0600 Subject: [PATCH 0026/1117] add sdl headers --- .github/workflows/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5830f3a..85a7c1b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,6 +16,9 @@ jobs: - uses: actions/checkout@v4 with: submodules: recursive + - name: Install sdl2 headers + run: | + sudo apt -y install libsdl2-dev - name: Update rust run: | rustup update From 75f3ab713e0d4c6905cfe2a1851d2c83ad38aa42 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 6 Oct 2023 21:05:39 -0600 Subject: [PATCH 0027/1117] install sdl2 headers (#11) --- .github/workflows/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 85a7c1b..c78882a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -55,6 +55,9 @@ jobs: - uses: actions/checkout@v4 with: submodules: recursive + - name: Install sdl2 headers + run: | + brew install sdl2 - name: Update rust run: | rustup update From 14b1c8830431f5b4fb5ee64d40c425b4b8cd4ce7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 6 Oct 2023 21:36:15 -0600 Subject: [PATCH 0028/1117] move ai signal --- src/device/ai.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/device/ai.rs b/src/device/ai.rs index 63a26de..3be622e 100644 --- a/src/device/ai.rs +++ b/src/device/ai.rs @@ -70,7 +70,9 @@ pub fn do_dma(device: &mut device::Device) { device::events::EventType::AI, device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + device.ai.fifo[0].duration, dma_event, - ) + ); + + device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_AI); } pub fn fifo_push(device: &mut device::Device) { @@ -89,7 +91,6 @@ pub fn fifo_push(device: &mut device::Device) { device.ai.fifo[0].duration = duration; device.ai.regs[AI_STATUS_REG as usize] |= AI_STATUS_BUSY; - device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_AI); do_dma(device); } } @@ -167,5 +168,4 @@ pub fn dma_event(device: &mut device::Device) { } fifo_pop(device); - device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_AI); } From 2c677ddb0c093d6f465feee303ee3bc9dab40495 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 6 Oct 2023 21:39:54 -0600 Subject: [PATCH 0029/1117] make func --- src/device/vi.rs | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index c140a58..97fb9be 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -129,25 +129,7 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { } */ - let elapsed = device.vi.last_vi_time.elapsed(); - if elapsed <= device.vi.vi_period { - let sleep_time = device.vi.vi_period - elapsed; - let remaining_holdover_space = device.vi.vi_period - device.vi.holdover; // holdover can't exceed the vi period - if sleep_time <= remaining_holdover_space { - device.vi.holdover += sleep_time; // donate all time to the holdover - } else { - device.vi.holdover += remaining_holdover_space; // max out holdover - std::thread::sleep(sleep_time - remaining_holdover_space); // sleep the rest of the time - } - } else { - let over_time = elapsed - device.vi.vi_period; // this is how much we overshot the vi period - if over_time <= device.vi.holdover { - device.vi.holdover -= over_time; // consume some holdover - } else { - device.vi.holdover -= device.vi.holdover; // consume all holdover - } - } - device.vi.last_vi_time = std::time::Instant::now(); + speed_limiter(device); /* toggle vi field if in interlaced mode */ device.vi.field ^= (device.vi.regs[VI_STATUS_REG as usize] >> 6) & 0x1; @@ -181,3 +163,25 @@ pub fn init(device: &mut device::Device) { }); */ } + +pub fn speed_limiter(device: &mut device::Device) { + let elapsed = device.vi.last_vi_time.elapsed(); + if elapsed <= device.vi.vi_period { + let sleep_time = device.vi.vi_period - elapsed; + let remaining_holdover_space = device.vi.vi_period - device.vi.holdover; // holdover can't exceed the vi period + if sleep_time <= remaining_holdover_space { + device.vi.holdover += sleep_time; // donate all time to the holdover + } else { + device.vi.holdover += remaining_holdover_space; // max out holdover + std::thread::sleep(sleep_time - remaining_holdover_space); // sleep the rest of the time + } + } else { + let over_time = elapsed - device.vi.vi_period; // this is how much we overshot the vi period + if over_time <= device.vi.holdover { + device.vi.holdover -= over_time; // consume some holdover + } else { + device.vi.holdover -= device.vi.holdover; // consume all holdover + } + } + device.vi.last_vi_time = std::time::Instant::now(); +} From 4be4fa66d9520ccfcb2129cc6c75612a5e6dcc92 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 6 Oct 2023 22:00:05 -0600 Subject: [PATCH 0030/1117] audio stuff --- src/ui/audio.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 125aeb9..05488b2 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -32,5 +32,16 @@ pub fn play_audio(device: &mut device::Device, dram_addr: usize, length: u64) { i += 2; } - let _ = audio_device.queue_audio(&primary_buffer); + let audio_queued = audio_device.size() as f64; + let acceptable_latency = (audio_device.spec().freq as f64 * 0.2) * 4.0; + let min_latency = (audio_device.spec().freq as f64 * 0.02) * 4.0; + + if audio_device.status() != sdl2::audio::AudioStatus::Paused && audio_queued < min_latency { + let silence_buffer: Vec = vec![0; ((min_latency - audio_queued) * 2.0) as usize & !1]; + let _ = audio_device.queue_audio(&silence_buffer); + } + + if audio_queued < acceptable_latency { + let _ = audio_device.queue_audio(&primary_buffer); + } } From cc3534fa355d487b1a1864cb51a92a69577cdee5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 6 Oct 2023 22:00:43 -0600 Subject: [PATCH 0031/1117] not needed --- src/ui/audio.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 05488b2..0277e11 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -36,7 +36,7 @@ pub fn play_audio(device: &mut device::Device, dram_addr: usize, length: u64) { let acceptable_latency = (audio_device.spec().freq as f64 * 0.2) * 4.0; let min_latency = (audio_device.spec().freq as f64 * 0.02) * 4.0; - if audio_device.status() != sdl2::audio::AudioStatus::Paused && audio_queued < min_latency { + if audio_queued < min_latency { let silence_buffer: Vec = vec![0; ((min_latency - audio_queued) * 2.0) as usize & !1]; let _ = audio_device.queue_audio(&silence_buffer); } From b0dfb6ad8c586daf74482d42f2a842c9517c3881 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 7 Oct 2023 08:18:52 -0600 Subject: [PATCH 0032/1117] cache rsp opcode --- src/device.rs | 5 ++++- src/device/rsp_cpu.rs | 17 ++++++++++------- src/device/rsp_interface.rs | 6 ++++-- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/device.rs b/src/device.rs index 9ba8224..6b3fcb1 100644 --- a/src/device.rs +++ b/src/device.rs @@ -184,7 +184,10 @@ impl Device { rdram: rdram::Rdram { mem: vec![] }, rsp: rsp_interface::Rsp { cpu: rsp_cpu::Cpu { - instructions: [rsp_su_instructions::reserved; 0x1000 / 4], + instructions: [rsp_cpu::Instructions { + func: rsp_su_instructions::reserved, + opcode: 0, + }; 0x1000 / 4], last_instruction_type: rsp_cpu::InstructionType::Su, instruction_type: rsp_cpu::InstructionType::Su, pipeline_full: false, diff --git a/src/device/rsp_cpu.rs b/src/device/rsp_cpu.rs index d5bf54e..f2788a5 100644 --- a/src/device/rsp_cpu.rs +++ b/src/device/rsp_cpu.rs @@ -6,6 +6,12 @@ pub struct BranchState { pub pc: u32, } +#[derive(Copy, Clone)] +pub struct Instructions { + pub func: fn(&mut device::Device, u32), + pub opcode: u32, +} + #[derive(PartialEq, Copy, Clone)] pub enum InstructionType { Su, @@ -13,7 +19,7 @@ pub enum InstructionType { } pub struct Cpu { - pub instructions: [fn(&mut device::Device, u32); 0x1000 / 4], + pub instructions: [Instructions; 0x1000 / 4], pub last_instruction_type: InstructionType, pub instruction_type: InstructionType, pub pipeline_full: bool, @@ -62,13 +68,10 @@ pub fn run(device: &mut device::Device) -> u64 { while !device.rsp.cpu.sync_point { device.rsp.cpu.instruction_type = InstructionType::Su; device.rsp.cpu.gpr[0] = 0; // gpr 0 is read only - let offset = 0x1000 + device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] as usize; - let opcode = u32::from_be_bytes(device.rsp.mem[offset..offset + 4].try_into().unwrap()); - device.rsp.cpu.instructions - [(device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] / 4) as usize]( - device, opcode, - ); + let instruction = device.rsp.cpu.instructions + [(device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] / 4) as usize]; + (instruction.func)(device, instruction.opcode); match device.rsp.cpu.branch_state.state { device::cpu::State::Step => { diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index 3f56128..37ca1ed 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -121,8 +121,9 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, _mask: u if masked_address & 0x1000 != 0 { // imem being updated - device.rsp.cpu.instructions[((masked_address & 0xFFF) / 4) as usize] = + device.rsp.cpu.instructions[((masked_address & 0xFFF) / 4) as usize].func = device::rsp_cpu::decode_opcode(device, data); + device.rsp.cpu.instructions[((masked_address & 0xFFF) / 4) as usize].opcode = data; } // SH/SB are broken: They overwrite the whole 32 bit, filling everything that isn't written with zeroes @@ -171,8 +172,9 @@ pub fn do_dma(device: &mut device::Device, dma: RspDma) { ); if offset != 0 { // imem being updated - device.rsp.cpu.instructions[((mem_addr & 0xFFF) / 4) as usize] = + device.rsp.cpu.instructions[((mem_addr & 0xFFF) / 4) as usize].func = device::rsp_cpu::decode_opcode(device, data); + device.rsp.cpu.instructions[((mem_addr & 0xFFF) / 4) as usize].opcode = data; } device.rsp.mem[(offset + (mem_addr & 0xFFF)) as usize ..(offset + (mem_addr & 0xFFF)) as usize + 4] From 6fd82d6e91558a540c5af24f9027124b9ee44f19 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 7 Oct 2023 08:21:00 -0600 Subject: [PATCH 0033/1117] more simple --- src/device/cache.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/device/cache.rs b/src/device/cache.rs index 3c94da0..ed848fc 100644 --- a/src/device/cache.rs +++ b/src/device/cache.rs @@ -159,9 +159,10 @@ pub fn icache_fetch(device: &mut device::Device, phys_address: u64) { if !icache_hit(device, line_index, phys_address) { icache_fill(device, line_index, phys_address) } - device.memory.icache[line_index].instruction[((phys_address >> 2) & 7) as usize]( + let item = ((phys_address >> 2) & 7) as usize; + device.memory.icache[line_index].instruction[item]( device, - device.memory.icache[line_index].words[((phys_address >> 2) & 7) as usize], + device.memory.icache[line_index].words[item], ); } From cb96c84100c2ca0b86adaceec7674d8d48b93a98 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 7 Oct 2023 19:23:44 -0600 Subject: [PATCH 0034/1117] small opt --- src/device.rs | 1 + src/device/cpu.rs | 2 ++ src/device/cpu_instructions.rs | 26 +++++--------------------- src/device/memory.rs | 1 - src/device/tlb.rs | 4 +--- 5 files changed, 9 insertions(+), 25 deletions(-) diff --git a/src/device.rs b/src/device.rs index 6b3fcb1..8b62424 100644 --- a/src/device.rs +++ b/src/device.rs @@ -127,6 +127,7 @@ impl Device { gpr: [0; 32], clock_rate: 0, pc: 0xBFC00000, + pc_phys: 0, llbit: false, lo: 0, hi: 0, diff --git a/src/device/cpu.rs b/src/device/cpu.rs index e56db38..f037b96 100644 --- a/src/device/cpu.rs +++ b/src/device/cpu.rs @@ -22,6 +22,7 @@ pub struct Cpu { pub branch_state: BranchState, pub gpr: [u64; 32], pub pc: u64, + pub pc_phys: u64, pub lo: u64, pub hi: u64, pub running: u8, @@ -241,6 +242,7 @@ pub fn run(device: &mut device::Device) { if err { continue; // TLB exception } + device.cpu.pc_phys = phys_address; if cached { device::cache::icache_fetch(device, phys_address) } else { diff --git a/src/device/cpu_instructions.rs b/src/device/cpu_instructions.rs index 301c703..24b3921 100644 --- a/src/device/cpu_instructions.rs +++ b/src/device/cpu_instructions.rs @@ -49,18 +49,10 @@ pub fn bits_above_mask>(x: T) -> u64 { } pub fn check_relative_idle_loop(device: &mut device::Device, opcode: u32) { - let (phys_address, _, err) = device::memory::translate_address( - device, - device.cpu.pc, - device::memory::AccessType::Lookup, - ); - if err { - return; - } if imm(opcode) as i16 == -1 - && device.memory.fast_read[(phys_address >> 16) as usize]( + && device.memory.fast_read[(device.cpu.pc_phys >> 16) as usize]( device, - phys_address + 4, + device.cpu.pc_phys + 4, device::memory::AccessSize::Word, ) == 0 { @@ -69,18 +61,10 @@ pub fn check_relative_idle_loop(device: &mut device::Device, opcode: u32) { } pub fn check_absolute_idle_loop(device: &mut device::Device, opcode: u32) { - let (phys_address, _, err) = device::memory::translate_address( - device, - device.cpu.pc, - device::memory::AccessType::Lookup, - ); - if err { - return; - } - if (opcode & 0x3FFFFFF) as u64 == (phys_address & 0x0FFFFFFF) >> 2 - && device.memory.fast_read[(phys_address >> 16) as usize]( + if (opcode & 0x3FFFFFF) as u64 == (device.cpu.pc_phys & 0x0FFFFFFF) >> 2 + && device.memory.fast_read[(device.cpu.pc_phys >> 16) as usize]( device, - phys_address + 4, + device.cpu.pc_phys + 4, device::memory::AccessSize::Word, ) == 0 { diff --git a/src/device/memory.rs b/src/device/memory.rs index 39c0f0a..829f1f8 100644 --- a/src/device/memory.rs +++ b/src/device/memory.rs @@ -24,7 +24,6 @@ pub const MM_IS_VIEWER: usize = 0x13ff0000; pub enum AccessType { Write, Read, - Lookup, } #[derive(Copy, Clone)] diff --git a/src/device/tlb.rs b/src/device/tlb.rs index 35d8e7a..8caee88 100644 --- a/src/device/tlb.rs +++ b/src/device/tlb.rs @@ -261,9 +261,7 @@ pub fn get_physical_address( } } - if access_type != device::memory::AccessType::Lookup { - device::exceptions::tlb_miss_exception(device, address, access_type) - } + device::exceptions::tlb_miss_exception(device, address, access_type); return (0, false, true); } From 4a672bbbc3854ff9a06eb1599202d72e521346cc Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 7 Oct 2023 19:49:50 -0600 Subject: [PATCH 0035/1117] startup values --- src/device/cop0.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/device/cop0.rs b/src/device/cop0.rs index 56a0772..b0541aa 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -362,6 +362,8 @@ pub fn init(device: &mut device::Device) { device.cpu.cop0.regs[COP0_PREVID_REG as usize] = 0b00000000000000000000101100100010; device.cpu.cop0.regs[COP0_EPC_REG as usize] = 0b11111111111111111111111111111111; device.cpu.cop0.regs[COP0_ERROREPC_REG as usize] = 0b11111111111111111111111111111111; + device.cpu.cop0.regs[COP0_BADVADDR_REG as usize] = 0xFFFFFFFF; + device.cpu.cop0.regs[COP0_CONTEXT_REG as usize] = 0x7FFFF0; device::events::create_event( device, From a094b3a7d3537a6c5d2ad5c0c238ac4a34bead5b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 7 Oct 2023 21:00:09 -0600 Subject: [PATCH 0036/1117] jalr --- src/device/cpu_instructions.rs | 17 +++++++++-------- src/device/rsp_su_instructions.rs | 15 ++++++++------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/device/cpu_instructions.rs b/src/device/cpu_instructions.rs index 24b3921..afc55d5 100644 --- a/src/device/cpu_instructions.rs +++ b/src/device/cpu_instructions.rs @@ -975,21 +975,22 @@ pub fn jr(device: &mut device::Device, opcode: u32) { } pub fn jalr(device: &mut device::Device, opcode: u32) { + let target = device.cpu.gpr[rs(opcode) as usize]; let in_delay_slot_taken = device::cpu::in_delay_slot_taken(device); - if !in_delay_slot_taken { - check_relative_idle_loop(device, opcode); - device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = device.cpu.gpr[rs(opcode) as usize]; - } else if !device::cpu::in_delay_slot(device) { - device.cpu.branch_state.state = device::cpu::State::NotTaken; - } - if in_delay_slot_taken { device.cpu.gpr[rd(opcode) as usize] = device.cpu.branch_state.pc + 4 } else { device.cpu.gpr[rd(opcode) as usize] = device.cpu.pc + 8 } + + if !in_delay_slot_taken { + check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = target; + } else if !device::cpu::in_delay_slot(device) { + device.cpu.branch_state.state = device::cpu::State::NotTaken; + } } pub fn sync(_device: &mut device::Device, _opcode: u32) {} diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index 697e2e9..8976dd0 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -306,21 +306,22 @@ pub fn jr(device: &mut device::Device, opcode: u32) { } pub fn jalr(device: &mut device::Device, opcode: u32) { + let target = device.rsp.cpu.gpr[rs(opcode) as usize]; let in_delay_slot_taken = device::rsp_cpu::in_delay_slot_taken(device); - if !in_delay_slot_taken { - device.rsp.cpu.branch_state.state = device::cpu::State::Take; - device.rsp.cpu.branch_state.pc = device.rsp.cpu.gpr[rs(opcode) as usize] - } else if !device::rsp_cpu::in_delay_slot(device) { - device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; - } - if in_delay_slot_taken { device.rsp.cpu.gpr[rd(opcode) as usize] = (device.rsp.cpu.branch_state.pc + 4) & 0xFFF } else { device.rsp.cpu.gpr[rd(opcode) as usize] = (device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + 8) & 0xFFF } + + if !in_delay_slot_taken { + device.rsp.cpu.branch_state.state = device::cpu::State::Take; + device.rsp.cpu.branch_state.pc = target + } else if !device::rsp_cpu::in_delay_slot(device) { + device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; + } } pub fn break_(device: &mut device::Device, _opcode: u32) { From c74d0e4c405a2ceb4e2723b2c162f53eb7a91f74 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 8 Oct 2023 08:27:13 -0600 Subject: [PATCH 0037/1117] Revert "jalr" This reverts commit a094b3a7d3537a6c5d2ad5c0c238ac4a34bead5b. --- src/device/cpu_instructions.rs | 17 ++++++++--------- src/device/rsp_su_instructions.rs | 15 +++++++-------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/device/cpu_instructions.rs b/src/device/cpu_instructions.rs index afc55d5..24b3921 100644 --- a/src/device/cpu_instructions.rs +++ b/src/device/cpu_instructions.rs @@ -975,22 +975,21 @@ pub fn jr(device: &mut device::Device, opcode: u32) { } pub fn jalr(device: &mut device::Device, opcode: u32) { - let target = device.cpu.gpr[rs(opcode) as usize]; let in_delay_slot_taken = device::cpu::in_delay_slot_taken(device); + if !in_delay_slot_taken { + check_relative_idle_loop(device, opcode); + device.cpu.branch_state.state = device::cpu::State::Take; + device.cpu.branch_state.pc = device.cpu.gpr[rs(opcode) as usize]; + } else if !device::cpu::in_delay_slot(device) { + device.cpu.branch_state.state = device::cpu::State::NotTaken; + } + if in_delay_slot_taken { device.cpu.gpr[rd(opcode) as usize] = device.cpu.branch_state.pc + 4 } else { device.cpu.gpr[rd(opcode) as usize] = device.cpu.pc + 8 } - - if !in_delay_slot_taken { - check_relative_idle_loop(device, opcode); - device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = target; - } else if !device::cpu::in_delay_slot(device) { - device.cpu.branch_state.state = device::cpu::State::NotTaken; - } } pub fn sync(_device: &mut device::Device, _opcode: u32) {} diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index 8976dd0..697e2e9 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -306,22 +306,21 @@ pub fn jr(device: &mut device::Device, opcode: u32) { } pub fn jalr(device: &mut device::Device, opcode: u32) { - let target = device.rsp.cpu.gpr[rs(opcode) as usize]; let in_delay_slot_taken = device::rsp_cpu::in_delay_slot_taken(device); + if !in_delay_slot_taken { + device.rsp.cpu.branch_state.state = device::cpu::State::Take; + device.rsp.cpu.branch_state.pc = device.rsp.cpu.gpr[rs(opcode) as usize] + } else if !device::rsp_cpu::in_delay_slot(device) { + device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; + } + if in_delay_slot_taken { device.rsp.cpu.gpr[rd(opcode) as usize] = (device.rsp.cpu.branch_state.pc + 4) & 0xFFF } else { device.rsp.cpu.gpr[rd(opcode) as usize] = (device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + 8) & 0xFFF } - - if !in_delay_slot_taken { - device.rsp.cpu.branch_state.state = device::cpu::State::Take; - device.rsp.cpu.branch_state.pc = target - } else if !device::rsp_cpu::in_delay_slot(device) { - device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; - } } pub fn break_(device: &mut device::Device, _opcode: u32) { From a8261e82a0f4bed030e2312bb7cb08371be17325 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 8 Oct 2023 08:27:57 -0600 Subject: [PATCH 0038/1117] small cleanup --- src/device/cpu.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/device/cpu.rs b/src/device/cpu.rs index f037b96..3d01ca9 100644 --- a/src/device/cpu.rs +++ b/src/device/cpu.rs @@ -234,7 +234,8 @@ pub fn run(device: &mut device::Device) { device.cpu.running = 1; while device.cpu.running == 1 { device.cpu.gpr[0] = 0; // gpr 0 is read only - let (phys_address, cached, err) = device::memory::translate_address( + let (cached, err); + (device.cpu.pc_phys, cached, err) = device::memory::translate_address( device, device.cpu.pc, device::memory::AccessType::Read, @@ -242,17 +243,18 @@ pub fn run(device: &mut device::Device) { if err { continue; // TLB exception } - device.cpu.pc_phys = phys_address; + if cached { - device::cache::icache_fetch(device, phys_address) + device::cache::icache_fetch(device, device.cpu.pc_phys) } else { - let opcode = device.memory.memory_map_read[(phys_address >> 16) as usize]( + let opcode = device.memory.memory_map_read[(device.cpu.pc_phys >> 16) as usize]( device, - phys_address, + device.cpu.pc_phys, device::memory::AccessSize::Word, ); device::cpu::decode_opcode(device, opcode)(device, opcode); } + match device.cpu.branch_state.state { State::Step => device.cpu.pc += 4, State::Take => { From f5fad4b53e59bef902cae94ca831b41600e5e99f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 8 Oct 2023 12:38:12 -0600 Subject: [PATCH 0039/1117] fix multu --- src/device/cpu_instructions.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/device/cpu_instructions.rs b/src/device/cpu_instructions.rs index 24b3921..6f0ff53 100644 --- a/src/device/cpu_instructions.rs +++ b/src/device/cpu_instructions.rs @@ -1037,8 +1037,8 @@ pub fn mult(device: &mut device::Device, opcode: u32) { } pub fn multu(device: &mut device::Device, opcode: u32) { - let result = - device.cpu.gpr[rs(opcode) as usize].wrapping_mul(device.cpu.gpr[rt(opcode) as usize]); + let result = (device.cpu.gpr[rs(opcode) as usize] as u32 as u64) + .wrapping_mul(device.cpu.gpr[rt(opcode) as usize] as u32 as u64); device.cpu.lo = se32((result) as u32 as i32); device.cpu.hi = se32((result >> 32) as u32 as i32); From 6c0f3f5aec0b703e07f33069055cd142e03d8a94 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 8 Oct 2023 12:47:59 -0600 Subject: [PATCH 0040/1117] fix crash --- src/device/vi.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/device/vi.rs b/src/device/vi.rs index 97fb9be..0e4fbc5 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -40,6 +40,9 @@ pub fn set_expected_refresh_rate(device: &mut device::Device) { device.vi.delay / (device.vi.regs[VI_V_SYNC_REG as usize] + 1) as u64; device.vi.vi_period = std::time::Duration::from_secs_f64(1.0 / expected_refresh_rate); + if device.vi.holdover > device.vi.vi_period { + device.vi.holdover = device.vi.vi_period; + } } pub fn set_vertical_interrupt(device: &mut device::Device) { From e1bce6345cbd2077f83333c7364b7abafad39f6c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 8 Oct 2023 14:33:39 -0600 Subject: [PATCH 0041/1117] fix tlb return --- src/device/tlb.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/device/tlb.rs b/src/device/tlb.rs index 8caee88..3210861 100644 --- a/src/device/tlb.rs +++ b/src/device/tlb.rs @@ -244,7 +244,7 @@ pub fn get_physical_address( if access_type == device::memory::AccessType::Write { if device.cpu.cop0.tlb_lut_w[(address >> 12) as usize].address != 0 { return ( - (device.cpu.cop0.tlb_lut_w[(address >> 12) as usize].address & 0xFFFFF000) + (device.cpu.cop0.tlb_lut_w[(address >> 12) as usize].address & 0x1FFFF000) | (address & 0xFFF), device.cpu.cop0.tlb_lut_w[(address >> 12) as usize].cached, false, @@ -253,7 +253,7 @@ pub fn get_physical_address( } else { if device.cpu.cop0.tlb_lut_r[(address >> 12) as usize].address != 0 { return ( - (device.cpu.cop0.tlb_lut_r[(address >> 12) as usize].address & 0xFFFFF000) + (device.cpu.cop0.tlb_lut_r[(address >> 12) as usize].address & 0x1FFFF000) | (address & 0xFFF), device.cpu.cop0.tlb_lut_r[(address >> 12) as usize].cached, false, From f06905130d7a055095c369eba7057cab1be683aa Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 9 Oct 2023 16:13:03 -0600 Subject: [PATCH 0042/1117] fix typo --- src/device/exceptions.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/device/exceptions.rs b/src/device/exceptions.rs index 14adacd..42008f7 100644 --- a/src/device/exceptions.rs +++ b/src/device/exceptions.rs @@ -112,7 +112,7 @@ pub fn tlb_miss_exception( } break; } - if address & !3 >= i.start_odd && address & !3 <= i.start_odd { + if address & !3 >= i.start_odd && address & !3 <= i.end_odd { valid = i.v_odd != 0; if valid && access_type == device::memory::AccessType::Write && i.d_odd == 0 { device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = From 1f0fbd6eafd9ceeff7508ada00e960d5d57ac037 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 9 Oct 2023 16:15:19 -0600 Subject: [PATCH 0043/1117] watch for dp freeze --- src/device/rdp.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/device/rdp.rs b/src/device/rdp.rs index b258a01..565e345 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -124,7 +124,8 @@ pub fn update_dpc_status(device: &mut device::Device, w: u32) { device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !DPC_STATUS_FREEZE } if w & DPC_SET_FREEZE != 0 { - device.rdp.regs_dpc[DPC_STATUS_REG as usize] |= DPC_STATUS_FREEZE + device.rdp.regs_dpc[DPC_STATUS_REG as usize] |= DPC_STATUS_FREEZE; + panic!("DP freeze") } /* clear / set flush */ From 65c91ed359268199e1b3bfbfdd14665d9c21a32d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 9 Oct 2023 20:54:17 -0600 Subject: [PATCH 0044/1117] clean up speed limiter --- Cargo.toml | 1 + src/device.rs | 4 +--- src/device/vi.rs | 39 ++++++++++++++------------------------- 3 files changed, 16 insertions(+), 28 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 353e2e8..73256c5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,6 +7,7 @@ edition = "2021" [dependencies] dirs = "5.0" +governor = "0.6.0" sha2 = "0.10" sdl2-sys = { git = "https://github.com/Rust-SDL2/rust-sdl2.git" } diff --git a/src/device.rs b/src/device.rs index 8b62424..6152be9 100644 --- a/src/device.rs +++ b/src/device.rs @@ -266,10 +266,8 @@ impl Device { clock: 0, field: 0, delay: 0, - holdover: std::time::Duration::from_secs(0), count_per_scanline: 0, - last_vi_time: std::time::Instant::now(), - vi_period: std::time::Duration::from_secs_f64(0.0), + limiter: None, }, } } diff --git a/src/device/vi.rs b/src/device/vi.rs index 0e4fbc5..cbef522 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -1,5 +1,6 @@ use crate::device; use crate::ui; +use governor::clock::Clock; pub const VI_STATUS_REG: u32 = 0; //pub const VI_ORIGIN_REG: u32 = 1; @@ -22,10 +23,8 @@ pub struct Vi { pub clock: u64, pub delay: u64, pub field: u32, - pub holdover: std::time::Duration, + pub limiter: Option, pub count_per_scanline: u64, - pub last_vi_time: std::time::Instant, - pub vi_period: std::time::Duration, } //static mut FRAME_COUNTER: u64 = 0; @@ -39,10 +38,11 @@ pub fn set_expected_refresh_rate(device: &mut device::Device) { device.vi.count_per_scanline = device.vi.delay / (device.vi.regs[VI_V_SYNC_REG as usize] + 1) as u64; - device.vi.vi_period = std::time::Duration::from_secs_f64(1.0 / expected_refresh_rate); - if device.vi.holdover > device.vi.vi_period { - device.vi.holdover = device.vi.vi_period; - } + let quota = governor::Quota::with_period(std::time::Duration::from_secs_f64( + 1.0 / expected_refresh_rate, + )) + .unwrap(); + device.vi.limiter = Some(governor::RateLimiter::direct(quota)) } pub fn set_vertical_interrupt(device: &mut device::Device) { @@ -168,23 +168,12 @@ pub fn init(device: &mut device::Device) { } pub fn speed_limiter(device: &mut device::Device) { - let elapsed = device.vi.last_vi_time.elapsed(); - if elapsed <= device.vi.vi_period { - let sleep_time = device.vi.vi_period - elapsed; - let remaining_holdover_space = device.vi.vi_period - device.vi.holdover; // holdover can't exceed the vi period - if sleep_time <= remaining_holdover_space { - device.vi.holdover += sleep_time; // donate all time to the holdover - } else { - device.vi.holdover += remaining_holdover_space; // max out holdover - std::thread::sleep(sleep_time - remaining_holdover_space); // sleep the rest of the time - } - } else { - let over_time = elapsed - device.vi.vi_period; // this is how much we overshot the vi period - if over_time <= device.vi.holdover { - device.vi.holdover -= over_time; // consume some holdover - } else { - device.vi.holdover -= device.vi.holdover; // consume all holdover - } + let result = device.vi.limiter.as_ref().unwrap().check(); + if result.is_err() { + let outcome = result.unwrap_err(); + let dur = outcome.wait_time_from(governor::clock::DefaultClock::default().now()); + std::thread::sleep(dur); + + let _ = device.vi.limiter.as_ref().unwrap().check(); } - device.vi.last_vi_time = std::time::Instant::now(); } From a6bafe96187db0f337f19b1d8258a95960b4bf1f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 9 Oct 2023 22:11:02 -0600 Subject: [PATCH 0045/1117] fix pal rom loading --- src/device/pif.rs | 4 ++-- src/main.rs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/device/pif.rs b/src/device/pif.rs index ccdd985..94fb25e 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -208,8 +208,8 @@ pub fn process_ram(device: &mut device::Device) { device.pif.ram[0x3F] &= !clrmask } -pub fn init(device: &mut device::Device, pal: bool) { - if pal { +pub fn init(device: &mut device::Device) { + if device.cart.pal { device.pif.rom = rom::PAL_PIF_ROM; } else { device.pif.rom = rom::NTSC_PIF_ROM; diff --git a/src/main.rs b/src/main.rs index 033077b..c4ce230 100644 --- a/src/main.rs +++ b/src/main.rs @@ -20,7 +20,7 @@ fn main() { ui::video::init(&mut device.ui, rdram_ptr, rdram_size); device::mi::init(&mut device); - device::pif::init(&mut device, false); + device::pif::init(&mut device); device::memory::init(&mut device); device::rsp_interface::init(&mut device); device::rdp::init(&mut device); From e2995d5b598314230d371d0ebf010a876a37d9df Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 10 Oct 2023 19:43:25 -0600 Subject: [PATCH 0046/1117] event fixes (#12) * fix vi stuff * more * more fix * rename --- src/device/cart_rom.rs | 2 +- src/device/cop0.rs | 15 ++++++--------- src/device/events.rs | 4 +++- src/device/vi.rs | 13 ++----------- 4 files changed, 12 insertions(+), 22 deletions(-) diff --git a/src/device/cart_rom.rs b/src/device/cart_rom.rs index 67af3cc..03e7f0d 100644 --- a/src/device/cart_rom.rs +++ b/src/device/cart_rom.rs @@ -104,7 +104,7 @@ pub fn init(device: &mut device::Device, rom_file: Vec) { let data = std::str::from_utf8(&device.cart.rom[0x20 as usize..(0x20 + 0x14) as usize]).unwrap(); let hash = calculate_hash(&device.cart.rom); - device.ui.game_name = format!("{}-{}", data.trim(), hash); + device.ui.game_name = format!("{}-{}", data.trim().trim_matches(char::from(0)), hash); device.ui.game_id = String::from_utf8(device.cart.rom[0x3B..0x3E].to_vec()).unwrap(); } diff --git a/src/device/cop0.rs b/src/device/cop0.rs index b0541aa..1242d11 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -185,6 +185,7 @@ pub fn get_control_registers(device: &mut device::Device, index: u32) -> u64 { pub fn set_control_registers(device: &mut device::Device, index: u32, mut data: u64) { device.cpu.cop0.reg_latch = data; + data &= device.cpu.cop0.reg_write_masks[index as usize]; match index { COP0_COUNT_REG => { data <<= 1; @@ -197,14 +198,14 @@ pub fn set_control_registers(device: &mut device::Device, index: u32, mut data: COP0_WIRED_REG => device.cpu.cop0.regs[COP0_RANDOM_REG as usize] = 31, COP0_COMPARE_REG => { let current_count = (device.cpu.cop0.regs[COP0_COUNT_REG as usize] >> 1) & 0xFFFFFFFF; - let mut event_time = - (device.cpu.cop0.regs[COP0_COUNT_REG as usize] & 0xFFFFFFFF00000000) | (data << 1); + let mut compare_event_time = + (device.cpu.cop0.regs[COP0_COUNT_REG as usize] & 0xFFFFFFFF00000000) + (data << 1); if current_count >= data { - event_time += !0 as u32 as u64 + compare_event_time += !0 as u32 as u64 } let compare_event: &mut device::events::Event = device::events::get_event(device, device::events::EventType::Compare).unwrap(); - compare_event.count = event_time; // reschedule the next compare interrupt event + compare_event.count = compare_event_time; // reschedule the next compare interrupt event device::events::set_next_event(device); device.cpu.cop0.regs[COP0_CAUSE_REG as usize] &= !COP0_CAUSE_IP7; } @@ -215,11 +216,7 @@ pub fn set_control_registers(device: &mut device::Device, index: u32, mut data: } _ => {} } - device::memory::masked_write_64( - &mut device.cpu.cop0.regs[index as usize], - data, - device.cpu.cop0.reg_write_masks[index as usize], - ); + device::memory::masked_write_64(&mut device.cpu.cop0.regs[index as usize], data, !0 as u64); device::exceptions::check_pending_interrupts(device); } diff --git a/src/device/events.rs b/src/device/events.rs index 59c8eb3..a8fd78c 100644 --- a/src/device/events.rs +++ b/src/device/events.rs @@ -66,7 +66,9 @@ pub fn set_next_event(device: &mut device::Device) { pub fn translate_events(device: &mut device::Device, old_count: u64, new_count: u64) { for i in device.cpu.events.iter_mut() { - i.count = i.count - old_count + new_count + if i.enabled { + i.count = i.count - old_count + new_count; + } } set_next_event(device); } diff --git a/src/device/vi.rs b/src/device/vi.rs index cbef522..e07d6b1 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -5,7 +5,7 @@ use governor::clock::Clock; pub const VI_STATUS_REG: u32 = 0; //pub const VI_ORIGIN_REG: u32 = 1; //pub const VI_WIDTH_REG: u32 = 2; -pub const VI_V_INTR_REG: u32 = 3; +//pub const VI_V_INTR_REG: u32 = 3; pub const VI_CURRENT_REG: u32 = 4; //pub const VI_BURST_REG: u32 = 5; pub const VI_V_SYNC_REG: u32 = 6; @@ -46,9 +46,7 @@ pub fn set_expected_refresh_rate(device: &mut device::Device) { } pub fn set_vertical_interrupt(device: &mut device::Device) { - if device::events::get_event(device, device::events::EventType::VI) == None - && device.vi.regs[VI_V_INTR_REG as usize] < device.vi.regs[VI_V_SYNC_REG as usize] - { + if device::events::get_event(device, device::events::EventType::VI) == None { device::events::create_event( device, device::events::EventType::VI, @@ -94,13 +92,6 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u let reg = (address & 0xFFFF) >> 2; match reg as u32 { VI_CURRENT_REG => device::mi::clear_rcp_interrupt(device, device::mi::MI_INTR_VI), - VI_V_INTR_REG => { - if device.vi.regs[reg as usize] != value & mask { - device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); - set_vertical_interrupt(device); - ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) - } - } VI_V_SYNC_REG => { if device.vi.regs[reg as usize] != value & mask { device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); From c75c1e780c7ef0ce22f63db145bf2e5278274075 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 10 Oct 2023 20:03:13 -0600 Subject: [PATCH 0047/1117] fix flush mode --- src/device.rs | 1 + src/device/cop1.rs | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/device.rs b/src/device.rs index 6152be9..18e4a4d 100644 --- a/src/device.rs +++ b/src/device.rs @@ -107,6 +107,7 @@ impl Device { cop1: cop1::Cop1 { fcr0: 0, fcr31: 0, + flush_mode: 0, fgr32: [[0; 4]; 32], fgr64: [[0; 8]; 32], instrs: [cop1::reserved; 32], diff --git a/src/device/cop1.rs b/src/device/cop1.rs index a071ecd..c885ce3 100644 --- a/src/device/cop1.rs +++ b/src/device/cop1.rs @@ -17,6 +17,7 @@ use crate::device; //pub const FCR31_CAUSE_INVALID_BIT: u32 = 1 << 16; pub const FCR31_CAUSE_UNIMP_BIT: u32 = 1 << 17; pub const FCR31_CMP_BIT: u32 = 1 << 23; +pub const FCR31_FS_BIT: u32 = 1 << 24; pub const FCR31_CAUSE_MASK: u32 = 0b00000000000000111111000000000000; pub const FCR31_ENABLE_MASK: u32 = 0b00000000000000000000111110000000; @@ -25,6 +26,7 @@ pub const FCR31_WRITE_MASK: u32 = 0b00000001100000111111111111111111; pub struct Cop1 { pub fcr0: u32, pub fcr31: u32, + pub flush_mode: u32, pub fgr32: [[u8; 4]; 32], pub fgr64: [[u8; 8]; 32], pub instrs: [fn(&mut device::Device, u32); 32], @@ -364,6 +366,24 @@ pub fn set_control_registers_fpu(device: &mut device::Device, index: u32, data: { device::exceptions::floating_point_exception(device) } + + unsafe { + let flush_mode; + if (device.cpu.cop1.fcr31 & 2) != 0 { + if (device.cpu.cop1.fcr31 & FCR31_FS_BIT) != 0 { + flush_mode = std::arch::x86_64::_MM_FLUSH_ZERO_OFF + } else { + flush_mode = std::arch::x86_64::_MM_FLUSH_ZERO_ON; + } + } else { + flush_mode = std::arch::x86_64::_MM_FLUSH_ZERO_ON; + } + if flush_mode != device.cpu.cop1.flush_mode { + #[allow(deprecated)] + std::arch::x86_64::_MM_SET_FLUSH_ZERO_MODE(flush_mode); + device.cpu.cop1.flush_mode = flush_mode; + } + } } _ => { panic!("unknown FCR register") From 819f5a7d8b81bd85c1cab8ca0a6a2c7a270d50c0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 10 Oct 2023 20:38:11 -0600 Subject: [PATCH 0048/1117] fix masking --- src/device/cop0.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/device/cop0.rs b/src/device/cop0.rs index 1242d11..5dff659 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -185,9 +185,9 @@ pub fn get_control_registers(device: &mut device::Device, index: u32) -> u64 { pub fn set_control_registers(device: &mut device::Device, index: u32, mut data: u64) { device.cpu.cop0.reg_latch = data; - data &= device.cpu.cop0.reg_write_masks[index as usize]; match index { COP0_COUNT_REG => { + data &= 0xFFFFFFFF; data <<= 1; device::events::translate_events( device, @@ -197,6 +197,7 @@ pub fn set_control_registers(device: &mut device::Device, index: u32, mut data: } COP0_WIRED_REG => device.cpu.cop0.regs[COP0_RANDOM_REG as usize] = 31, COP0_COMPARE_REG => { + data &= 0xFFFFFFFF; let current_count = (device.cpu.cop0.regs[COP0_COUNT_REG as usize] >> 1) & 0xFFFFFFFF; let mut compare_event_time = (device.cpu.cop0.regs[COP0_COUNT_REG as usize] & 0xFFFFFFFF00000000) + (data << 1); @@ -216,7 +217,11 @@ pub fn set_control_registers(device: &mut device::Device, index: u32, mut data: } _ => {} } - device::memory::masked_write_64(&mut device.cpu.cop0.regs[index as usize], data, !0 as u64); + device::memory::masked_write_64( + &mut device.cpu.cop0.regs[index as usize], + data, + device.cpu.cop0.reg_write_masks[index as usize], + ); device::exceptions::check_pending_interrupts(device); } From 43f86bf5bf84d311a089837d272c5fa3b684c72c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 10 Oct 2023 20:52:17 -0600 Subject: [PATCH 0049/1117] fix again --- src/device/cop0.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/device/cop0.rs b/src/device/cop0.rs index 5dff659..6dce2d2 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -193,7 +193,9 @@ pub fn set_control_registers(device: &mut device::Device, index: u32, mut data: device, device.cpu.cop0.regs[COP0_COUNT_REG as usize], data, - ) + ); + device.cpu.cop0.regs[COP0_COUNT_REG as usize] = data; + return; } COP0_WIRED_REG => device.cpu.cop0.regs[COP0_RANDOM_REG as usize] = 31, COP0_COMPARE_REG => { From e4f4d6a9ae1ac9a300ae7ff1f7f966d76c8680ca Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 10 Oct 2023 21:31:04 -0600 Subject: [PATCH 0050/1117] clean up compare --- src/device/cop0.rs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/device/cop0.rs b/src/device/cop0.rs index 6dce2d2..851a1f6 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -201,15 +201,18 @@ pub fn set_control_registers(device: &mut device::Device, index: u32, mut data: COP0_COMPARE_REG => { data &= 0xFFFFFFFF; let current_count = (device.cpu.cop0.regs[COP0_COUNT_REG as usize] >> 1) & 0xFFFFFFFF; - let mut compare_event_time = - (device.cpu.cop0.regs[COP0_COUNT_REG as usize] & 0xFFFFFFFF00000000) + (data << 1); - if current_count >= data { - compare_event_time += !0 as u32 as u64 + let mut compare_event_diff = data as u32 - current_count as u32; + + if compare_event_diff == 0 { + compare_event_diff += !0 as u32; } - let compare_event: &mut device::events::Event = - device::events::get_event(device, device::events::EventType::Compare).unwrap(); - compare_event.count = compare_event_time; // reschedule the next compare interrupt event - device::events::set_next_event(device); + + device::events::create_event( + device, + device::events::EventType::Compare, + device.cpu.cop0.regs[COP0_COUNT_REG as usize] + ((compare_event_diff as u64) << 1), + compare_event, + ); device.cpu.cop0.regs[COP0_CAUSE_REG as usize] &= !COP0_CAUSE_IP7; } COP0_STATUS_REG => { From 3d94f14c5b16a4354442bccd49edc2ce13b8444c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 10 Oct 2023 21:31:51 -0600 Subject: [PATCH 0051/1117] wrapping sub --- src/device/cop0.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/device/cop0.rs b/src/device/cop0.rs index 851a1f6..81bb1cc 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -201,7 +201,7 @@ pub fn set_control_registers(device: &mut device::Device, index: u32, mut data: COP0_COMPARE_REG => { data &= 0xFFFFFFFF; let current_count = (device.cpu.cop0.regs[COP0_COUNT_REG as usize] >> 1) & 0xFFFFFFFF; - let mut compare_event_diff = data as u32 - current_count as u32; + let mut compare_event_diff = (data as u32).wrapping_sub(current_count as u32); if compare_event_diff == 0 { compare_event_diff += !0 as u32; From 010e0f3fd82248bb22218cc96304e5aea78b70fd Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 11 Oct 2023 10:36:06 -0600 Subject: [PATCH 0052/1117] fix wdc --- src/device/ai.rs | 3 +-- src/device/events.rs | 1 + src/device/mi.rs | 17 +++++++++++++++++ src/device/rsp_interface.rs | 2 +- 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/device/ai.rs b/src/device/ai.rs index 3be622e..cb5aeb3 100644 --- a/src/device/ai.rs +++ b/src/device/ai.rs @@ -71,8 +71,7 @@ pub fn do_dma(device: &mut device::Device) { device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + device.ai.fifo[0].duration, dma_event, ); - - device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_AI); + device::mi::schedule_rcp_interrupt(device, device::mi::MI_INTR_AI); } pub fn fifo_push(device: &mut device::Device) { diff --git a/src/device/events.rs b/src/device/events.rs index a8fd78c..ee5e850 100644 --- a/src/device/events.rs +++ b/src/device/events.rs @@ -8,6 +8,7 @@ pub enum EventType { PI, DP, SP, + InterruptCheck, SPDma, Compare, EventTypeCount, diff --git a/src/device/mi.rs b/src/device/mi.rs index 6c34397..be58643 100644 --- a/src/device/mi.rs +++ b/src/device/mi.rs @@ -163,6 +163,23 @@ pub fn set_rcp_interrupt(device: &mut device::Device, interrupt: u32) { device::exceptions::check_pending_interrupts(device) } +pub fn schedule_rcp_interrupt(device: &mut device::Device, interrupt: u32) { + device.mi.regs[MI_INTR_REG as usize] |= interrupt; + + if device.mi.regs[MI_INTR_REG as usize] & device.mi.regs[MI_INTR_MASK_REG as usize] != 0 { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= + !device::cop0::COP0_CAUSE_EXCCODE_MASK; + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] |= device::cop0::COP0_CAUSE_IP2; + } + + device::events::create_event( + device, + device::events::EventType::InterruptCheck, + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize], + device::exceptions::check_pending_interrupts, + ) +} + pub fn init(device: &mut device::Device) { device.mi.regs[MI_VERSION_REG as usize] = 0x02020102 } diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index 37ca1ed..ab99ea7 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -332,7 +332,7 @@ pub fn update_sp_status(device: &mut device::Device, w: u32) { } /* set SP interrupt */ if (w & SP_SET_INTR) != 0 && (w & SP_CLR_INTR) == 0 { - device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_SP) + device::mi::schedule_rcp_interrupt(device, device::mi::MI_INTR_SP); } /* clear / set single step */ From 8fd7bef85dd2e5cbb2cfa439b400d02d2b0dd74d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 11 Oct 2023 12:23:14 -0600 Subject: [PATCH 0053/1117] fix ppl --- src/device/controller.rs | 2 +- src/device/pif.rs | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/device/controller.rs b/src/device/controller.rs index b9f3da7..e5c0248 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -49,7 +49,7 @@ pub fn process(device: &mut device::Device, channel: usize) { device.pif.channels[channel].tx_buf.unwrap() + 3, device.pif.channels[channel].rx_buf.unwrap(), ), - _ => panic!("unknown controller command"), + _ => println!("unknown controller command {}", cmd), } } diff --git a/src/device/pif.rs b/src/device/pif.rs index 94fb25e..b38f0d0 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -150,9 +150,8 @@ pub fn setup_channels_format(device: &mut device::Device) { 0xfd => { /* channel reset - send reset command and discard the results */ - { - panic!("channel reset") - } + k += 1; + i += 1; } _ => { From 0f0565b8b7b565c78e77a529831c4e1d7d41c92d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 11 Oct 2023 12:33:31 -0600 Subject: [PATCH 0054/1117] fix powerpuff girls --- src/device/cart.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/device/cart.rs b/src/device/cart.rs index 7ef35f0..276a6e3 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -31,6 +31,7 @@ pub fn process(device: &mut device::Device, channel: usize) { { eeprom_type = JDT_EEPROM_4K; } else { + device.pif.ram[device.pif.channels[channel].rx.unwrap()] |= 0x80; return; } From fe2c7752ea05e6dbbc4fbd0c65256d7c1fa51c5d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 11 Oct 2023 13:16:00 -0600 Subject: [PATCH 0055/1117] standardize file size --- src/device/cart.rs | 17 +++++------------ src/device/sram.rs | 26 ++++++++++---------------- 2 files changed, 15 insertions(+), 28 deletions(-) diff --git a/src/device/cart.rs b/src/device/cart.rs index 276a6e3..9c64ce7 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -10,6 +10,7 @@ pub const JCMD_RESET: u8 = 0xff; pub const JDT_EEPROM_4K: u16 = 0x8000; /* 4k EEPROM */ pub const JDT_EEPROM_16K: u16 = 0xc000; /* 16k EEPROM */ pub const EEPROM_BLOCK_SIZE: usize = 8; +pub const EEPROM_MAX_SIZE: usize = 0x800; pub fn process(device: &mut device::Device, channel: usize) { let cmd = device.pif.ram[device.pif.channels[channel].tx_buf.unwrap()]; @@ -62,12 +63,8 @@ pub fn process(device: &mut device::Device, channel: usize) { pub fn eeprom_read_block(device: &mut device::Device, block: usize, offset: usize) { let address = device.pif.ram[block as usize] as usize * EEPROM_BLOCK_SIZE; - if address + EEPROM_BLOCK_SIZE > device.ui.saves.eeprom.len() { - device - .ui - .saves - .eeprom - .resize(address + EEPROM_BLOCK_SIZE, 0xFF) + if device.ui.saves.eeprom.len() < EEPROM_MAX_SIZE { + device.ui.saves.eeprom.resize(EEPROM_MAX_SIZE, 0xFF) } device.pif.ram[offset..offset + EEPROM_BLOCK_SIZE] @@ -77,12 +74,8 @@ pub fn eeprom_read_block(device: &mut device::Device, block: usize, offset: usiz pub fn eeprom_write_block(device: &mut device::Device, block: usize, offset: usize, status: usize) { let address = device.pif.ram[block as usize] as usize * EEPROM_BLOCK_SIZE; - if address + EEPROM_BLOCK_SIZE > device.ui.saves.eeprom.len() { - device - .ui - .saves - .eeprom - .resize(address + EEPROM_BLOCK_SIZE, 0xFF) + if device.ui.saves.eeprom.len() < EEPROM_MAX_SIZE { + device.ui.saves.eeprom.resize(EEPROM_MAX_SIZE, 0xFF) } device.ui.saves.eeprom[address..address + EEPROM_BLOCK_SIZE] diff --git a/src/device/sram.rs b/src/device/sram.rs index 4f11620..6f1e92e 100644 --- a/src/device/sram.rs +++ b/src/device/sram.rs @@ -2,6 +2,8 @@ use crate::device; use crate::ui; pub const SRAM_MASK: usize = 0xFFFF; +pub const SRAM_SIZE: usize = 0x8000; +//pub const FLASHRAM_SIZE: usize = 0x20000; pub fn read_mem( device: &mut device::Device, @@ -14,8 +16,8 @@ pub fn read_mem( if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { let masked_address = address as usize & SRAM_MASK; - if masked_address + 4 > device.ui.saves.sram.len() { - device.ui.saves.sram.resize(masked_address + 4, 0xFF) + if device.ui.saves.sram.len() < SRAM_SIZE { + device.ui.saves.sram.resize(SRAM_SIZE, 0xFF) } return u32::from_be_bytes( @@ -32,8 +34,8 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { let masked_address = address as usize & SRAM_MASK; - if masked_address + 4 > device.ui.saves.sram.len() { - device.ui.saves.sram.resize(masked_address + 4, 0xFF) + if device.ui.saves.sram.len() < SRAM_SIZE { + device.ui.saves.sram.resize(SRAM_SIZE, 0xFF) } let mut data = u32::from_be_bytes( @@ -74,12 +76,8 @@ pub fn dma_read( let mut i = dram_addr; let mut j = cart_addr; - if (cart_addr + length) as usize > device.ui.saves.sram.len() { - device - .ui - .saves - .sram - .resize((cart_addr + length) as usize, 0xFF) + if device.ui.saves.sram.len() < SRAM_SIZE { + device.ui.saves.sram.resize(SRAM_SIZE, 0xFF) } while i < dram_addr + length { @@ -108,12 +106,8 @@ pub fn dma_write( let mut i = dram_addr; let mut j = cart_addr; - if (cart_addr + length) as usize > device.ui.saves.sram.len() { - device - .ui - .saves - .sram - .resize((cart_addr + length) as usize, 0xFF) + if device.ui.saves.sram.len() < SRAM_SIZE { + device.ui.saves.sram.resize(SRAM_SIZE, 0xFF) } while i < dram_addr + length { From 2a137a8b62be55513705607314b8bdd3b78358fb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 11 Oct 2023 13:21:50 -0600 Subject: [PATCH 0056/1117] cleanup sram --- src/device/sram.rs | 143 ++++++++++++++++++++++++--------------------- 1 file changed, 78 insertions(+), 65 deletions(-) diff --git a/src/device/sram.rs b/src/device/sram.rs index 6f1e92e..ee2aded 100644 --- a/src/device/sram.rs +++ b/src/device/sram.rs @@ -5,6 +5,24 @@ pub const SRAM_MASK: usize = 0xFFFF; pub const SRAM_SIZE: usize = 0x8000; //pub const FLASHRAM_SIZE: usize = 0x20000; +pub fn format_sram(device: &mut device::Device) { + if device.ui.saves.sram.len() < SRAM_SIZE { + device.ui.saves.sram.resize(SRAM_SIZE, 0xFF) + } +} + +pub fn read_mem_sram(device: &mut device::Device, address: u64) -> u32 { + let masked_address = address as usize & SRAM_MASK; + + format_sram(device); + + return u32::from_be_bytes( + device.ui.saves.sram[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ); +} + pub fn read_mem( device: &mut device::Device, address: u64, @@ -14,40 +32,31 @@ pub fn read_mem( device::cop0::add_cycles(device, cycles); if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { - let masked_address = address as usize & SRAM_MASK; - - if device.ui.saves.sram.len() < SRAM_SIZE { - device.ui.saves.sram.resize(SRAM_SIZE, 0xFF) - } - - return u32::from_be_bytes( - device.ui.saves.sram[masked_address..masked_address + 4] - .try_into() - .unwrap(), - ); + return read_mem_sram(device, address); } else { panic!("flash read") } } +pub fn write_mem_sram(device: &mut device::Device, address: u64, value: u32, mask: u32) { + let masked_address = address as usize & SRAM_MASK; + + format_sram(device); + + let mut data = u32::from_be_bytes( + device.ui.saves.sram[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ); + device::memory::masked_write_32(&mut data, value, mask); + device.ui.saves.sram[masked_address..masked_address + 4].copy_from_slice(&data.to_be_bytes()); + + ui::storage::write_save(&mut device.ui, ui::storage::SaveTypes::Sram); +} + pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { - let masked_address = address as usize & SRAM_MASK; - - if device.ui.saves.sram.len() < SRAM_SIZE { - device.ui.saves.sram.resize(SRAM_SIZE, 0xFF) - } - - let mut data = u32::from_be_bytes( - device.ui.saves.sram[masked_address..masked_address + 4] - .try_into() - .unwrap(), - ); - device::memory::masked_write_32(&mut data, value, mask); - device.ui.saves.sram[masked_address..masked_address + 4] - .copy_from_slice(&data.to_be_bytes()); - - ui::storage::write_save(&mut device.ui, ui::storage::SaveTypes::Sram); + write_mem_sram(device, address, value, mask) } else { panic!("flash write") } @@ -63,60 +72,64 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 ); } -// cart is big endian, rdram is native endian -pub fn dma_read( +pub fn dma_read_sram( device: &mut device::Device, mut cart_addr: u32, mut dram_addr: u32, length: u32, -) -> u64 { +) { + dram_addr &= device::rdram::RDRAM_MASK as u32; + cart_addr &= SRAM_MASK as u32; + let mut i = dram_addr; + let mut j = cart_addr; + + format_sram(device); + + while i < dram_addr + length { + device.ui.saves.sram[j as usize] = device.rdram.mem[i as usize ^ device.byte_swap]; + i += 1; + j += 1; + } + + ui::storage::write_save(&mut device.ui, ui::storage::SaveTypes::Sram); +} + +// cart is big endian, rdram is native endian +pub fn dma_read(device: &mut device::Device, cart_addr: u32, dram_addr: u32, length: u32) -> u64 { if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { - dram_addr &= device::rdram::RDRAM_MASK as u32; - cart_addr &= SRAM_MASK as u32; - let mut i = dram_addr; - let mut j = cart_addr; - - if device.ui.saves.sram.len() < SRAM_SIZE { - device.ui.saves.sram.resize(SRAM_SIZE, 0xFF) - } - - while i < dram_addr + length { - device.ui.saves.sram[j as usize] = device.rdram.mem[i as usize ^ device.byte_swap]; - i += 1; - j += 1; - } - - ui::storage::write_save(&mut device.ui, ui::storage::SaveTypes::Sram); - return device::pi::calculate_cycles(device, 2, length); + dma_read_sram(device, cart_addr, dram_addr, length) } else { panic!("flash dma read") } + return device::pi::calculate_cycles(device, 2, length); } -// cart is big endian, rdram is native endian -pub fn dma_write( +pub fn dma_write_sram( device: &mut device::Device, mut cart_addr: u32, mut dram_addr: u32, length: u32, -) -> u64 { +) { + dram_addr &= device::rdram::RDRAM_MASK as u32; + cart_addr &= SRAM_MASK as u32; + let mut i = dram_addr; + let mut j = cart_addr; + + format_sram(device); + + while i < dram_addr + length { + device.rdram.mem[i as usize ^ device.byte_swap] = device.ui.saves.sram[j as usize]; + i += 1; + j += 1; + } +} + +// cart is big endian, rdram is native endian +pub fn dma_write(device: &mut device::Device, cart_addr: u32, dram_addr: u32, length: u32) -> u64 { if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { - dram_addr &= device::rdram::RDRAM_MASK as u32; - cart_addr &= SRAM_MASK as u32; - let mut i = dram_addr; - let mut j = cart_addr; - - if device.ui.saves.sram.len() < SRAM_SIZE { - device.ui.saves.sram.resize(SRAM_SIZE, 0xFF) - } - - while i < dram_addr + length { - device.rdram.mem[i as usize ^ device.byte_swap] = device.ui.saves.sram[j as usize]; - i += 1; - j += 1; - } - return device::pi::calculate_cycles(device, 2, length); + dma_write_sram(device, cart_addr, dram_addr, length) } else { panic!("flash dma write") } + return device::pi::calculate_cycles(device, 2, length); } From 02416a9786beb1195504aed4982b3a8f342feb3e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 11 Oct 2023 13:24:20 -0600 Subject: [PATCH 0057/1117] use func --- src/device/cart.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/device/cart.rs b/src/device/cart.rs index 9c64ce7..a5230aa 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -60,12 +60,16 @@ pub fn process(device: &mut device::Device, channel: usize) { } } -pub fn eeprom_read_block(device: &mut device::Device, block: usize, offset: usize) { - let address = device.pif.ram[block as usize] as usize * EEPROM_BLOCK_SIZE; - +pub fn format_eeprom(device: &mut device::Device) { if device.ui.saves.eeprom.len() < EEPROM_MAX_SIZE { device.ui.saves.eeprom.resize(EEPROM_MAX_SIZE, 0xFF) } +} + +pub fn eeprom_read_block(device: &mut device::Device, block: usize, offset: usize) { + let address = device.pif.ram[block as usize] as usize * EEPROM_BLOCK_SIZE; + + format_eeprom(device); device.pif.ram[offset..offset + EEPROM_BLOCK_SIZE] .copy_from_slice(&device.ui.saves.eeprom[address..address + EEPROM_BLOCK_SIZE]); @@ -74,9 +78,7 @@ pub fn eeprom_read_block(device: &mut device::Device, block: usize, offset: usiz pub fn eeprom_write_block(device: &mut device::Device, block: usize, offset: usize, status: usize) { let address = device.pif.ram[block as usize] as usize * EEPROM_BLOCK_SIZE; - if device.ui.saves.eeprom.len() < EEPROM_MAX_SIZE { - device.ui.saves.eeprom.resize(EEPROM_MAX_SIZE, 0xFF) - } + format_eeprom(device); device.ui.saves.eeprom[address..address + EEPROM_BLOCK_SIZE] .copy_from_slice(&device.pif.ram[offset..offset + EEPROM_BLOCK_SIZE]); From f07a6d271449fdb717d547c580d1f7ca36abfc6d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 11 Oct 2023 17:05:23 -0600 Subject: [PATCH 0058/1117] flash saves (#13) * flash saves * clean * remove byte swap --- src/device.rs | 8 ++ src/device/sram.rs | 210 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 213 insertions(+), 5 deletions(-) diff --git a/src/device.rs b/src/device.rs index 18e4a4d..33ad0b5 100644 --- a/src/device.rs +++ b/src/device.rs @@ -47,6 +47,7 @@ pub struct Device { ai: ai::Ai, si: si::Si, ri: ri::Ri, + flashram: sram::Flashram, } impl Device { @@ -270,6 +271,13 @@ impl Device { count_per_scanline: 0, limiter: None, }, + flashram: sram::Flashram { + status: 0, + erase_page: 0, + page_buf: [0xff; 128], + silicon_id: [sram::FLASHRAM_TYPE_ID, sram::MX29L1100_ID], + mode: sram::FlashramMode::ReadArray, + }, } } } diff --git a/src/device/sram.rs b/src/device/sram.rs index ee2aded..910ee1f 100644 --- a/src/device/sram.rs +++ b/src/device/sram.rs @@ -3,7 +3,29 @@ use crate::ui; pub const SRAM_MASK: usize = 0xFFFF; pub const SRAM_SIZE: usize = 0x8000; -//pub const FLASHRAM_SIZE: usize = 0x20000; +pub const FLASHRAM_SIZE: usize = 0x20000; +pub const FLASHRAM_TYPE_ID: u32 = 0x11118001; +pub const MX29L1100_ID: u32 = 0x00c2001e; +pub const MX29L0000_ID: u32 = 0x00c20000; +pub const MX29L0001_ID: u32 = 0x00c20001; + +#[derive(PartialEq)] +pub enum FlashramMode { + ReadArray, + ReadSiliconId, + Status, + SectorErase, + ChipErase, + PageProgram, +} + +pub struct Flashram { + pub status: u32, + pub mode: FlashramMode, + pub erase_page: u16, + pub page_buf: [u8; 128], + pub silicon_id: [u32; 2], +} pub fn format_sram(device: &mut device::Device) { if device.ui.saves.sram.len() < SRAM_SIZE { @@ -11,6 +33,12 @@ pub fn format_sram(device: &mut device::Device) { } } +pub fn format_flash(device: &mut device::Device) { + if device.ui.saves.flash.len() < FLASHRAM_SIZE { + device.ui.saves.flash.resize(FLASHRAM_SIZE, 0xFF) + } +} + pub fn read_mem_sram(device: &mut device::Device, address: u64) -> u32 { let masked_address = address as usize & SRAM_MASK; @@ -23,6 +51,20 @@ pub fn read_mem_sram(device: &mut device::Device, address: u64) -> u32 { ); } +pub fn read_mem_flash(device: &mut device::Device, address: u64) -> u32 { + if (address & 0x1ffff) == 0x00000 && device.flashram.mode == FlashramMode::Status { + /* read Status register */ + return device.flashram.status; + } else if (address & 0x1ffff) == 0x0000 && device.flashram.mode == FlashramMode::ReadArray { + /* flashram MMIO read are not supported except for the "dummy" read @0x0000 done before DMA. + * returns a "dummy" value. */ + return 0; + } else { + /* other accesses are not implemented */ + panic!("unknown flashram read") + } +} + pub fn read_mem( device: &mut device::Device, address: u64, @@ -34,7 +76,7 @@ pub fn read_mem( if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { return read_mem_sram(device, address); } else { - panic!("flash read") + return read_mem_flash(device, address); } } @@ -54,11 +96,25 @@ pub fn write_mem_sram(device: &mut device::Device, address: u64, value: u32, mas ui::storage::write_save(&mut device.ui, ui::storage::SaveTypes::Sram); } +pub fn write_mem_flash(device: &mut device::Device, address: u64, value: u32, mask: u32) { + if (address & 0x1ffff) == 0x00000 && device.flashram.mode == FlashramMode::Status { + /* clear/set Status register */ + device.flashram.status = (value & mask) & 0xff; + } else if (address & 0x1ffff) == 0x10000 { + /* set command */ + format_flash(device); + flashram_command(device, value & mask); + } else { + /* other accesses are not implemented */ + panic!("unknown flashram write") + } +} + pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { write_mem_sram(device, address, value, mask) } else { - panic!("flash write") + write_mem_flash(device, address, value, mask) } device.pi.regs[device::pi::PI_STATUS_REG as usize] |= device::pi::PI_STATUS_IO_BUSY; @@ -94,12 +150,30 @@ pub fn dma_read_sram( ui::storage::write_save(&mut device.ui, ui::storage::SaveTypes::Sram); } +pub fn dma_read_flash(device: &mut device::Device, cart_addr: u32, dram_addr: u32, length: u32) { + format_flash(device); + + if (cart_addr & 0x1ffff) == 0x00000 + && length == 128 + && device.flashram.mode == FlashramMode::PageProgram + { + /* load page buf using DMA */ + for i in 0..length { + device.flashram.page_buf[i as usize] = + device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap]; + } + } else { + /* other accesses are not implemented */ + panic!("unknown flash dma read") + } +} + // cart is big endian, rdram is native endian pub fn dma_read(device: &mut device::Device, cart_addr: u32, dram_addr: u32, length: u32) -> u64 { if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { dma_read_sram(device, cart_addr, dram_addr, length) } else { - panic!("flash dma read") + dma_read_flash(device, cart_addr, dram_addr, length) } return device::pi::calculate_cycles(device, 2, length); } @@ -124,12 +198,138 @@ pub fn dma_write_sram( } } +pub fn dma_write_flash( + device: &mut device::Device, + mut cart_addr: u32, + mut dram_addr: u32, + length: u32, +) { + dram_addr &= device::rdram::RDRAM_MASK as u32; + + if (cart_addr & 0x1ffff) == 0x00000 + && length == 8 + && device.flashram.mode == FlashramMode::ReadSiliconId + { + /* read Silicon ID using DMA */ + device.rdram.mem[dram_addr as usize..dram_addr as usize + 4] + .copy_from_slice(&device.flashram.silicon_id[0].to_ne_bytes()); + dram_addr += 4; + device.rdram.mem[dram_addr as usize..dram_addr as usize + 4] + .copy_from_slice(&device.flashram.silicon_id[1].to_ne_bytes()); + } else if (cart_addr & 0x1ffff) < 0x10000 && device.flashram.mode == FlashramMode::ReadArray { + format_flash(device); + /* adjust flashram address before starting DMA. */ + if device.flashram.silicon_id[1] == MX29L1100_ID + || device.flashram.silicon_id[1] == MX29L0000_ID + || device.flashram.silicon_id[1] == MX29L0001_ID + { + /* "old" flash needs special address adjusting */ + cart_addr = (cart_addr & 0xffff) * 2; + } else { + /* "new" flash doesn't require special address adjusting at DMA start. */ + cart_addr &= 0xffff; + } + + /* do actual DMA */ + for i in 0..length { + device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap] = + device.ui.saves.flash[(cart_addr + i) as usize]; + } + } else { + /* other accesses are not implemented */ + panic!("unknown flash dma write") + } +} + // cart is big endian, rdram is native endian pub fn dma_write(device: &mut device::Device, cart_addr: u32, dram_addr: u32, length: u32) -> u64 { if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { dma_write_sram(device, cart_addr, dram_addr, length) } else { - panic!("flash dma write") + dma_write_flash(device, cart_addr, dram_addr, length) } return device::pi::calculate_cycles(device, 2, length); } + +pub fn flashram_command(device: &mut device::Device, command: u32) { + match command & 0xff000000 { + 0x3c000000 => { + /* set chip erase mode */ + device.flashram.mode = FlashramMode::ChipErase; + } + + 0x4b000000 => { + /* set sector erase mode, set erase sector */ + device.flashram.mode = FlashramMode::SectorErase; + device.flashram.erase_page = command as u16; + } + + 0x78000000 => { + /* set erase busy flag */ + device.flashram.status |= 0x02; + + /* do chip/sector erase */ + if device.flashram.mode == FlashramMode::SectorErase { + let offset = (device.flashram.erase_page & 0xff80) * 128; + for i in 0..128 * 128 { + device.ui.saves.flash[offset as usize + i] = 0xFF; + } + ui::storage::write_save(&mut device.ui, ui::storage::SaveTypes::Flash); + } else if device.flashram.mode == FlashramMode::ChipErase { + for i in 0..FLASHRAM_SIZE { + device.ui.saves.flash[i] = 0xFF; + } + ui::storage::write_save(&mut device.ui, ui::storage::SaveTypes::Flash); + } else { + panic!("Unexpected flash erase command") + } + + /* clear erase busy flag, set erase success flag, transition to status mode */ + device.flashram.status &= !0x02; + device.flashram.status |= 0x08; + device.flashram.mode = FlashramMode::Status; + } + + 0xa5000000 => { + /* set program busy flag */ + device.flashram.status |= 0x01; + + /* program selected page */ + let offset = (command as u16) * 128; + for i in 0..128 { + device.ui.saves.flash[(offset + i) as usize] = device.flashram.page_buf[i as usize]; + } + ui::storage::write_save(&mut device.ui, ui::storage::SaveTypes::Flash); + + /* clear program busy flag, set program success flag, transition to status mode */ + device.flashram.status &= !0x01; + device.flashram.status |= 0x04; + device.flashram.mode = FlashramMode::Status; + } + + 0xb4000000 => { + /* set page program mode */ + device.flashram.mode = FlashramMode::PageProgram; + } + + 0xd2000000 => { + /* set status mode */ + device.flashram.mode = FlashramMode::Status; + } + + 0xe1000000 => { + /* set silicon_id mode */ + device.flashram.mode = FlashramMode::ReadSiliconId; + device.flashram.status |= 0x01; /* Needed for Pokemon Puzzle League */ + } + + 0xf0000000 => { + /* set read mode */ + device.flashram.mode = FlashramMode::ReadArray; + } + + _ => { + panic!("unknown flash command") + } + } +} From 80ea6b2c1fef9c906d60d1f382d0a36c0628ea88 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 11 Oct 2023 17:13:49 -0600 Subject: [PATCH 0059/1117] paper mario fixes --- src/device/pi.rs | 5 +++-- src/device/tlb.rs | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/device/pi.rs b/src/device/pi.rs index d743758..13fac55 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -122,8 +122,9 @@ pub fn get_handler(address: u32) -> PiHandler { }; if address >= device::memory::MM_CART_ROM as u32 { if address >= device::memory::MM_DOM1_ADDR3 as u32 { - panic!("unimplemented handler") - //RW(cart, cart_dom3); + // this should result in all 0's being read/written + handler.read = device::cart_rom::dma_read; + handler.write = device::cart_rom::dma_write; } else { handler.read = device::cart_rom::dma_read; handler.write = device::cart_rom::dma_write; diff --git a/src/device/tlb.rs b/src/device/tlb.rs index 3210861..8574c8c 100644 --- a/src/device/tlb.rs +++ b/src/device/tlb.rs @@ -238,9 +238,11 @@ pub fn tlb_map(device: &mut device::Device, index: u64) { pub fn get_physical_address( device: &mut device::Device, - address: u64, + mut address: u64, access_type: device::memory::AccessType, ) -> (u64, bool, bool) { + address &= 0xffffffff; + if access_type == device::memory::AccessType::Write { if device.cpu.cop0.tlb_lut_w[(address >> 12) as usize].address != 0 { return ( From b468c05e80a0bd85cfce8e7baf69e0a81e889df7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 11 Oct 2023 17:35:52 -0600 Subject: [PATCH 0060/1117] 6105 cic challenge --- src/device/pif.rs | 72 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/src/device/pif.rs b/src/device/pif.rs index b38f0d0..865a0e1 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -20,6 +20,7 @@ pub const PIF_RAM_SIZE: usize = 64; const PIF_CHANNELS_COUNT: usize = 5; const PIF_RAM_OFFSET: usize = 0x7C0; const PIF_MASK: usize = 0xFFFF; +const CHL_LEN: usize = 0x20; pub fn read_mem( device: &mut device::Device, @@ -188,7 +189,14 @@ pub fn process_ram(device: &mut device::Device) { } if command & 0x02 != 0 { // Challenge / response for protection - panic!("pif command 0x02"); + /* disable channel processing when doing CIC challenge */ + for k in 0..PIF_CHANNELS_COUNT { + disable_pif_channel(&mut device.pif.channels[k]); + } + + /* CIC Challenge */ + process_cic_challenge(device); + clrmask |= 0x02; } if command & 0x08 != 0 { // Terminate boot process @@ -219,3 +227,65 @@ pub fn init(device: &mut device::Device) { device.pif.channels[0].process = Some(device::controller::process); device.pif.channels[4].process = Some(device::cart::process) } + +pub fn process_cic_challenge(device: &mut device::Device) { + let mut challenge: [u8; 30] = [0; 30]; + let mut response: [u8; 30] = [0; 30]; + + /* format the 'challenge' message into 30 nibbles for X-Scale's CIC code */ + for i in 0..15 { + challenge[i * 2] = (device.pif.ram[0x30 + i] >> 4) & 0x0f; + challenge[i * 2 + 1] = device.pif.ram[0x30 + i] & 0x0f; + } + + /* calculate the proper response for the given challenge (X-Scale's algorithm) */ + n64_cic_nus_6105(challenge, &mut response, CHL_LEN - 2); + device.pif.ram[0x2e] = 0; + device.pif.ram[0x2f] = 0; + + /* re-format the 'response' into a byte stream */ + for i in 0..15 { + device.pif.ram[0x30 + i] = (response[i * 2] << 4) + response[i * 2 + 1]; + } +} + +pub fn n64_cic_nus_6105(chl: [u8; 30], rsp: &mut [u8; 30], len: usize) { + let lut0: [u8; 0x10] = [ + 0x4, 0x7, 0xA, 0x7, 0xE, 0x5, 0xE, 0x1, 0xC, 0xF, 0x8, 0xF, 0x6, 0x3, 0x6, 0x9, + ]; + let lut1: [u8; 0x10] = [ + 0x4, 0x1, 0xA, 0x7, 0xE, 0x5, 0xE, 0x1, 0xC, 0x9, 0x8, 0x5, 0x6, 0x3, 0xC, 0x9, + ]; + + let mut key = 0xB; + let mut lut = lut0.as_ref(); + for i in 0..len { + rsp[i] = (key + 5 * chl[i]) & 0xF; + key = lut[rsp[i] as usize]; + let sgn = (rsp[i] >> 3) & 0x1; + let mut mag; + if sgn == 1 { + mag = !rsp[i] + } else { + mag = rsp[i] + } + mag &= 0x7; + let mut modd; + if mag % 3 == 1 { + modd = sgn + } else { + modd = 1 - sgn; + } + if lut == lut1 && (rsp[i] == 0x1 || rsp[i] == 0x9) { + modd = 1; + } + if lut == lut1 && (rsp[i] == 0xB || rsp[i] == 0xE) { + modd = 0; + } + if modd == 1 { + lut = &lut1; + } else { + lut = &lut0; + } + } +} From c8b9b707e5518fc0e743cb9a2c92110c07334ef8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 11 Oct 2023 17:44:13 -0600 Subject: [PATCH 0061/1117] dp freeze --- src/device.rs | 1 + src/device/rdp.rs | 32 ++++++++++++++++++++++---------- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/device.rs b/src/device.rs index 33ad0b5..0b9c212 100644 --- a/src/device.rs +++ b/src/device.rs @@ -239,6 +239,7 @@ impl Device { rdp: rdp::Rdp { regs_dpc: [0; rdp::DPC_REGS_COUNT as usize], regs_dps: [0; rdp::DPS_REGS_COUNT as usize], + wait_frozen: false, }, mi: mi::Mi { regs: [0; mi::MI_REGS_COUNT as usize], diff --git a/src/device/rdp.rs b/src/device/rdp.rs index 565e345..fa1dadf 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -44,6 +44,7 @@ pub const DPC_CLR_CLOCK_CTR: u32 = 1 << 9; pub struct Rdp { pub regs_dpc: [u32; DPC_REGS_COUNT as usize], pub regs_dps: [u32; DPS_REGS_COUNT as usize], + pub wait_frozen: bool, } pub fn read_regs_dpc( @@ -80,20 +81,28 @@ pub fn write_regs_dpc(device: &mut device::Device, address: u64, value: u32, mas device.rdp.regs_dpc[DPC_START_REG as usize]; device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !DPC_STATUS_START_VALID } - let timer = ui::video::process_rdp_list(&mut device.rdp.regs_dpc, &mut device.rsp.mem); - if timer != 0 { - device::events::create_event( - device, - device::events::EventType::DP, - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + timer, - rdp_interrupt_event, - ) + if device.rdp.regs_dpc[DPC_STATUS_REG as usize] & DPC_STATUS_FREEZE == 0 { + run_rdp(device) + } else { + device.rdp.wait_frozen = true; } } _ => device::memory::masked_write_32(&mut device.rdp.regs_dpc[reg as usize], value, mask), } } +pub fn run_rdp(device: &mut device::Device) { + let timer = ui::video::process_rdp_list(&mut device.rdp.regs_dpc, &mut device.rsp.mem); + if timer != 0 { + device::events::create_event( + device, + device::events::EventType::DP, + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + timer, + rdp_interrupt_event, + ) + } +} + pub fn read_regs_dps( device: &mut device::Device, address: u64, @@ -121,11 +130,14 @@ pub fn update_dpc_status(device: &mut device::Device, w: u32) { /* clear / set freeze */ if w & DPC_CLR_FREEZE != 0 { - device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !DPC_STATUS_FREEZE + device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !DPC_STATUS_FREEZE; + if device.rdp.wait_frozen { + run_rdp(device); + device.rdp.wait_frozen = false; + } } if w & DPC_SET_FREEZE != 0 { device.rdp.regs_dpc[DPC_STATUS_REG as usize] |= DPC_STATUS_FREEZE; - panic!("DP freeze") } /* clear / set flush */ From 3f2a49eb21645317088334eb5090865f253e14ee Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 11 Oct 2023 17:48:22 -0600 Subject: [PATCH 0062/1117] fix dk64 --- src/device.rs | 1 + src/device/rsp_cpu.rs | 9 +++++---- src/device/rsp_su_instructions.rs | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/device.rs b/src/device.rs index 0b9c212..a6fa71d 100644 --- a/src/device.rs +++ b/src/device.rs @@ -201,6 +201,7 @@ impl Device { broken: false, halted: false, sync_point: false, + cycle_counter: 0, gpr: [0; 32], vpr: [0; 32], reciprocals: [0; 512], diff --git a/src/device/rsp_cpu.rs b/src/device/rsp_cpu.rs index f2788a5..c83188b 100644 --- a/src/device/rsp_cpu.rs +++ b/src/device/rsp_cpu.rs @@ -27,6 +27,7 @@ pub struct Cpu { pub broken: bool, pub halted: bool, pub sync_point: bool, + pub cycle_counter: u64, pub shuffle: [__m128i; 16], pub gpr: [u32; 32], pub vpr: [u128; 32], @@ -64,7 +65,7 @@ pub fn in_delay_slot_taken(device: &mut device::Device) -> bool { pub fn run(device: &mut device::Device) -> u64 { device.rsp.cpu.broken = false; - let mut cycle_counter = 0; + device.rsp.cpu.cycle_counter = 0; while !device.rsp.cpu.sync_point { device.rsp.cpu.instruction_type = InstructionType::Su; device.rsp.cpu.gpr[0] = 0; // gpr 0 is read only @@ -114,19 +115,19 @@ pub fn run(device: &mut device::Device) -> u64 { device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] &= 0xFFC; if device.rsp.cpu.instruction_type == device.rsp.cpu.last_instruction_type { - cycle_counter += 1; + device.rsp.cpu.cycle_counter += 1; device.rsp.cpu.pipeline_full = false; } else { device.rsp.cpu.last_instruction_type = device.rsp.cpu.instruction_type; if device.rsp.cpu.pipeline_full { - cycle_counter += 1; + device.rsp.cpu.cycle_counter += 1; device.rsp.cpu.pipeline_full = false; } else { device.rsp.cpu.pipeline_full = true; } } } - return (cycle_counter as f64 * 1.5) as u64; // converting RCP clock to CPU clock + return (device.rsp.cpu.cycle_counter as f64 * 1.5) as u64; // converting RCP clock to CPU clock } pub fn decode_opcode(device: &mut device::Device, opcode: u32) -> fn(&mut device::Device, u32) { diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index 697e2e9..c742d65 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -440,6 +440,7 @@ pub fn mfc0(device: &mut device::Device, opcode: u32) { device::memory::AccessSize::Word, ) } + device.rsp.cpu.cycle_counter += 4; // needed for DK64 device.rsp.cpu.sync_point = true; } From e1e19e76abe056a88d3b38ad509d041d51598d55 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 11 Oct 2023 20:42:30 -0600 Subject: [PATCH 0063/1117] support swapped roms --- src/main.rs | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index c4ce230..1a23fb1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,10 +4,38 @@ use std::fs; mod device; mod ui; +fn swap_rom(contents: Vec) -> Vec { + let test = u32::from_be_bytes(contents[0..4].try_into().unwrap()); + if test == 0x80371240 { + // z64 + return contents; + } else if test == 0x37804012 { + // v64 + let mut data: Vec = vec![0; contents.len()]; + for i in (0..contents.len()).step_by(2) { + let temp = u16::from_ne_bytes(contents[i..i + 2].try_into().unwrap()); + data[i..i + 2].copy_from_slice(&temp.to_be_bytes()); + } + return data; + } else if test == 0x40123780 { + // n64 + let mut data: Vec = vec![0; contents.len()]; + for i in (0..contents.len()).step_by(4) { + let temp = u32::from_ne_bytes(contents[i..i + 4].try_into().unwrap()); + data[i..i + 4].copy_from_slice(&temp.to_be_bytes()); + } + return data; + } else { + panic!("unknown rom format") + } +} + fn main() { let args: Vec = env::args().collect(); let file_path = &args[1]; - let contents = fs::read(file_path).expect("Should have been able to read the file"); + let mut contents = fs::read(file_path).expect("Should have been able to read the file"); + + contents = swap_rom(contents); let mut device = device::Device::new(); From a88b46ad52f39d18916f8919b09f2bb5b7e5329f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 11 Oct 2023 21:21:39 -0600 Subject: [PATCH 0064/1117] zip support --- Cargo.toml | 3 ++- src/main.rs | 24 ++++++++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 73256c5..90251e1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,8 @@ edition = "2021" [dependencies] dirs = "5.0" -governor = "0.6.0" +zip = "0.6" +governor = "0.6" sha2 = "0.10" sdl2-sys = { git = "https://github.com/Rust-SDL2/rust-sdl2.git" } diff --git a/src/main.rs b/src/main.rs index 1a23fb1..4787a61 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ #![feature(round_ties_even)] use std::env; use std::fs; +use std::io::Read; mod device; mod ui; @@ -32,8 +33,27 @@ fn swap_rom(contents: Vec) -> Vec { fn main() { let args: Vec = env::args().collect(); - let file_path = &args[1]; - let mut contents = fs::read(file_path).expect("Should have been able to read the file"); + let file_path = std::path::Path::new(&args[1]); + let mut contents = vec![]; + if file_path.extension().unwrap().to_ascii_lowercase() == "zip" { + let zip_file = fs::File::open(file_path).unwrap(); + let mut archive = zip::ZipArchive::new(zip_file).unwrap(); + for i in 0..archive.len() { + let mut file = archive.by_index(i).unwrap(); + let extension = file + .enclosed_name() + .unwrap() + .extension() + .unwrap() + .to_ascii_lowercase(); + if extension == "z64" || extension == "n64" || extension == "v64" { + file.read_to_end(&mut contents) + .expect("could not read zip file"); + } + } + } else { + contents = fs::read(file_path).expect("Should have been able to read the file"); + } contents = swap_rom(contents); From 861abeb5cce938f13ae86452163bd7a3d909372c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 11 Oct 2023 21:22:11 -0600 Subject: [PATCH 0065/1117] only read first file --- src/main.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main.rs b/src/main.rs index 4787a61..50b4721 100644 --- a/src/main.rs +++ b/src/main.rs @@ -49,6 +49,7 @@ fn main() { if extension == "z64" || extension == "n64" || extension == "v64" { file.read_to_end(&mut contents) .expect("could not read zip file"); + break; } } } else { From e9ef94170764c5ca0dfe4e1f1af71428eb7e4b06 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 11 Oct 2023 22:08:22 -0600 Subject: [PATCH 0066/1117] 7z support --- Cargo.toml | 1 + src/main.rs | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 90251e1..f9672de 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,7 @@ edition = "2021" dirs = "5.0" zip = "0.6" governor = "0.6" +sevenz-rust = "0.5" sha2 = "0.10" sdl2-sys = { git = "https://github.com/Rust-SDL2/rust-sdl2.git" } diff --git a/src/main.rs b/src/main.rs index 50b4721..ecc1732 100644 --- a/src/main.rs +++ b/src/main.rs @@ -52,6 +52,30 @@ fn main() { break; } } + } else if file_path.extension().unwrap().to_ascii_lowercase() == "7z" { + let mut archive = + sevenz_rust::SevenZReader::open(file_path, sevenz_rust::Password::empty()).unwrap(); + + let mut found = false; + archive + .for_each_entries( + &mut |entry: &sevenz_rust::SevenZArchiveEntry, reader: &mut dyn std::io::Read| { + let name = entry.name().to_ascii_lowercase(); + if !found + && (name.ends_with("z64") || name.ends_with("n64") || name.ends_with("v64")) + { + reader + .read_to_end(&mut contents) + .expect("could not read zip file"); + found = true; + } else { + //skip other files + std::io::copy(reader, &mut std::io::sink())?; + } + Ok(true) + }, + ) + .expect("ok"); } else { contents = fs::read(file_path).expect("Should have been able to read the file"); } From 0224d75beaa374c8067bd6183f39de3f93c7eab3 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 12 Oct 2023 10:19:49 -0600 Subject: [PATCH 0067/1117] mempak support (#14) * mempak support * fix * read and write * format func * formatting * finish --- src/device.rs | 2 + src/device/controller.rs | 59 ++++++++++++++++++++----- src/device/mempak.rs | 93 ++++++++++++++++++++++++++++++++++++++++ src/device/pif.rs | 7 +++ src/ui.rs | 1 + src/ui/storage.rs | 15 +++++++ 6 files changed, 167 insertions(+), 10 deletions(-) create mode 100644 src/device/mempak.rs diff --git a/src/device.rs b/src/device.rs index a6fa71d..85eb879 100644 --- a/src/device.rs +++ b/src/device.rs @@ -15,6 +15,7 @@ pub mod exceptions; pub mod fpu_instructions; pub mod is_viewer; pub mod memory; +pub mod mempak; pub mod mi; pub mod pi; pub mod pif; @@ -154,6 +155,7 @@ impl Device { rx: None, rx_buf: None, process: None, + pak_handler: None, }; 5], }, cart: cart_rom::Cart { diff --git a/src/device/controller.rs b/src/device/controller.rs index e5c0248..54c3e03 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -18,9 +18,16 @@ pub const JDT_JOY_ABS_COUNTERS: u16 = 0x0001; /* joystick with absolute coordina pub const JDT_JOY_PORT: u16 = 0x0004; /* has port for external paks */ //pub const JDT_VRU: u16 = 0x0100; /* VRU */ pub const PAK_CHUNK_SIZE: usize = 0x20; -pub const CONT_STATUS: u8 = 0; +pub const CONT_STATUS_PAK_NOT_PRESENT: u8 = 0; +pub const CONT_STATUS_PAK_PRESENT: u8 = 1; pub const CONT_FLAVOR: u16 = JDT_JOY_ABS_COUNTERS | JDT_JOY_PORT; +#[derive(Copy, Clone)] +pub struct PakHandler { + pub read: fn(&mut device::Device, usize, u16, usize, usize), + pub write: fn(&mut device::Device, usize, u16, usize, usize), +} + pub fn process(device: &mut device::Device, channel: usize) { let cmd = device.pif.ram[device.pif.channels[channel].tx_buf.unwrap()]; @@ -30,7 +37,13 @@ pub fn process(device: &mut device::Device, channel: usize) { device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] = CONT_FLAVOR as u8; device.pif.ram[device.pif.channels[channel].rx_buf.unwrap() + 1] = (CONT_FLAVOR >> 8) as u8; - device.pif.ram[device.pif.channels[channel].rx_buf.unwrap() + 2] = CONT_STATUS; + if device.pif.channels[channel].pak_handler.is_none() { + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap() + 2] = + CONT_STATUS_PAK_NOT_PRESENT; + } else { + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap() + 2] = + CONT_STATUS_PAK_PRESENT; + } } JCMD_CONTROLLER_READ => { let offset = device.pif.channels[channel].rx_buf.unwrap(); @@ -42,29 +55,55 @@ pub fn process(device: &mut device::Device, channel: usize) { device.pif.channels[channel].tx_buf.unwrap() + 1, device.pif.channels[channel].rx_buf.unwrap(), device.pif.channels[channel].rx_buf.unwrap() + 32, + channel, ), JCMD_PAK_WRITE => pak_write_block( device, device.pif.channels[channel].tx_buf.unwrap() + 1, device.pif.channels[channel].tx_buf.unwrap() + 3, device.pif.channels[channel].rx_buf.unwrap(), + channel, ), _ => println!("unknown controller command {}", cmd), } } -pub fn pak_read_block(device: &mut device::Device, _addr_acrc: usize, data: usize, dcrc: usize) { - //let address = (device.pif.ram[addr_acrc] << 8) | (device.pif.ram[addr_acrc + 1] & 0xe0); +pub fn pak_read_block( + device: &mut device::Device, + addr_acrc: usize, + data: usize, + dcrc: usize, + channel: usize, +) { + let address = + (device.pif.ram[addr_acrc] as u16) << 8 | (device.pif.ram[addr_acrc + 1] & 0xe0) as u16; + let handler = device.pif.channels[channel].pak_handler; - //TODO: paks - device.pif.ram[dcrc] = !pak_data_crc(device, data, PAK_CHUNK_SIZE) + if !handler.is_none() { + (handler.unwrap().read)(device, channel, address, data, PAK_CHUNK_SIZE); + device.pif.ram[dcrc] = pak_data_crc(device, data, PAK_CHUNK_SIZE) + } else { + device.pif.ram[dcrc] = !pak_data_crc(device, data, PAK_CHUNK_SIZE) + } } -pub fn pak_write_block(device: &mut device::Device, _addr_acrc: usize, data: usize, dcrc: usize) { - //let address = (device.pif.ram[addr_acrc] << 8) | (device.pif.ram[addr_acrc + 1] & 0xe0); +pub fn pak_write_block( + device: &mut device::Device, + addr_acrc: usize, + data: usize, + dcrc: usize, + channel: usize, +) { + let address = + (device.pif.ram[addr_acrc] as u16) << 8 | (device.pif.ram[addr_acrc + 1] & 0xe0) as u16; + let handler = device.pif.channels[channel].pak_handler; - //TODO: paks - device.pif.ram[dcrc] = !pak_data_crc(device, data, PAK_CHUNK_SIZE) + if !handler.is_none() { + (handler.unwrap().write)(device, channel, address, data, PAK_CHUNK_SIZE); + device.pif.ram[dcrc] = pak_data_crc(device, data, PAK_CHUNK_SIZE) + } else { + device.pif.ram[dcrc] = !pak_data_crc(device, data, PAK_CHUNK_SIZE) + } } pub fn pak_data_crc(device: &mut device::Device, data_offset: usize, size: usize) -> u8 { diff --git a/src/device/mempak.rs b/src/device/mempak.rs new file mode 100644 index 0000000..802acee --- /dev/null +++ b/src/device/mempak.rs @@ -0,0 +1,93 @@ +use crate::device; +use crate::ui; + +pub const MEMPAK_SIZE: usize = 0x8000; +pub const MPK_PAGE_SIZE: usize = 256; + +pub fn format_mempak(device: &mut device::Device) { + if device.ui.saves.mempak.len() < MEMPAK_SIZE * 4 { + device.ui.saves.mempak.resize(MEMPAK_SIZE * 4, 0); + + let page_0: [u8; MPK_PAGE_SIZE] = [ + /* Label area */ + 0x81, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, + 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, + 0x1c, 0x1d, 0x1e, 0x1f, /* Main ID area */ + 0xff, 0xff, 0xff, 0xff, 0x05, 0x1a, 0x5f, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, + 0x66, 0x25, 0x99, 0xcd, /* Unused */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, /* ID area backup #1 */ + 0xff, 0xff, 0xff, 0xff, 0x05, 0x1a, 0x5f, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, + 0x66, 0x25, 0x99, 0xcd, /* ID area backup #2 */ + 0xff, 0xff, 0xff, 0xff, 0x05, 0x1a, 0x5f, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, + 0x66, 0x25, 0x99, 0xcd, /* Unused */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, /* ID area backup #3 */ + 0xff, 0xff, 0xff, 0xff, 0x05, 0x1a, 0x5f, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, + 0x66, 0x25, 0x99, 0xcd, /* Unused */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + ]; + for i in 0..4 { + let offset = i * MEMPAK_SIZE; + + /* Fill Page 0 with pre-initialized content */ + device.ui.saves.mempak[offset..offset + MPK_PAGE_SIZE].copy_from_slice(&page_0); + + /* Fill INODE page 1 and update it's checkum */ + let start_page = 5; + for i in 1 * MPK_PAGE_SIZE..2 * start_page { + device.ui.saves.mempak[offset + i] = 0; + } + for i in (1 * MPK_PAGE_SIZE + 2 * start_page..2 * MPK_PAGE_SIZE).step_by(2) { + device.ui.saves.mempak[offset + i + 0] = 0x00; + device.ui.saves.mempak[offset + i + 1] = 0x03; + } + device.ui.saves.mempak[offset + (1 * MPK_PAGE_SIZE + 1)] = 0x71; + + /* Page 2 is identical to page 1 */ + let page1 = offset + 1 * MPK_PAGE_SIZE; + let page2 = offset + 2 * MPK_PAGE_SIZE; + let page1data = device.ui.saves.mempak[page1..page1 + MPK_PAGE_SIZE].to_vec(); + device.ui.saves.mempak[page2..page2 + MPK_PAGE_SIZE].copy_from_slice(&page1data); + + /* Remaining pages DIR+DATA (3...) are initialized with 0x00 */ + for i in 3 * MPK_PAGE_SIZE..MEMPAK_SIZE - 3 * MPK_PAGE_SIZE { + device.ui.saves.mempak[offset + i] = 0; + } + } + } +} + +pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usize, size: usize) { + if (address as usize) < MEMPAK_SIZE { + format_mempak(device); + + let offset = (channel * MEMPAK_SIZE) + address as usize; + device.pif.ram[data..data + size] + .copy_from_slice(&device.ui.saves.mempak[offset..offset + size]) + } else { + for i in 0..size { + device.pif.ram[data + i] = 0; + } + } +} + +pub fn write(device: &mut device::Device, channel: usize, address: u16, data: usize, size: usize) { + if (address as usize) < MEMPAK_SIZE { + format_mempak(device); + + let offset = (channel * MEMPAK_SIZE) + address as usize; + device.ui.saves.mempak[offset..offset + size] + .copy_from_slice(&device.pif.ram[data..data + size]); + + ui::storage::write_save(&mut device.ui, ui::storage::SaveTypes::Mempak); + } +} diff --git a/src/device/pif.rs b/src/device/pif.rs index 865a0e1..da04114 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -14,6 +14,7 @@ pub struct PifChannel { pub rx: Option, pub rx_buf: Option, pub process: Option, + pub pak_handler: Option, } pub const PIF_RAM_SIZE: usize = 64; @@ -224,6 +225,12 @@ pub fn init(device: &mut device::Device) { device.pif.ram[0x26] = device.cart.cic_seed; device.pif.ram[0x27] = device.cart.cic_seed; + let mempak_handler = device::controller::PakHandler { + read: device::mempak::read, + write: device::mempak::write, + }; + + device.pif.channels[0].pak_handler = Some(mempak_handler); device.pif.channels[0].process = Some(device::controller::process); device.pif.channels[4].process = Some(device::cart::process) } diff --git a/src/ui.rs b/src/ui.rs index 24d45bc..6ab45f0 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -41,6 +41,7 @@ impl Ui { eeprom: Vec::new(), sram: Vec::new(), flash: Vec::new(), + mempak: Vec::new(), }, sdl_context: Some(sdl_context), video_subsystem: Some(video_subsystem), diff --git a/src/ui/storage.rs b/src/ui/storage.rs index e0abd8e..2d9ef49 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -6,6 +6,7 @@ pub enum SaveTypes { Eeprom16k, Sram, Flash, + Mempak, } pub struct Paths { @@ -19,6 +20,7 @@ pub struct Saves { pub eeprom: Vec, pub sram: Vec, pub flash: Vec, + pub mempak: Vec, } pub fn get_save_type(game_id: &str) -> Vec { @@ -106,6 +108,11 @@ pub fn init(ui: &mut ui::Ui) { ui.paths .fla_file_path .push(ui.game_name.to_owned() + ".fla"); + + ui.paths.pak_file_path = base_path.clone(); + ui.paths + .pak_file_path + .push(ui.game_name.to_owned() + ".mpk"); } pub fn load_saves(ui: &mut ui::Ui) { @@ -121,6 +128,10 @@ pub fn load_saves(ui: &mut ui::Ui) { if fla.is_ok() { ui.saves.flash = fla.unwrap(); } + let mempak = std::fs::read(&mut ui.paths.pak_file_path); + if mempak.is_ok() { + ui.saves.mempak = mempak.unwrap(); + } } pub fn write_save(ui: &mut ui::Ui, save_type: SaveTypes) { @@ -139,6 +150,10 @@ pub fn write_save(ui: &mut ui::Ui, save_type: SaveTypes) { path = ui.paths.fla_file_path.as_ref(); data = ui.saves.flash.as_ref(); } + SaveTypes::Mempak => { + path = ui.paths.pak_file_path.as_ref(); + data = ui.saves.mempak.as_ref(); + } } let result = std::fs::write(path, data); if result.is_err() { From 6fa2292fe48bf0c11df7ec63ecb9c58b0f4d7417 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 12 Oct 2023 12:21:58 -0600 Subject: [PATCH 0068/1117] resizeable window --- parallel-rdp/interface.cpp | 34 +++++++++++++++++++++++++++++++++- src/ui.rs | 1 + 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index a5118ec..54c00fe 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -201,6 +201,38 @@ void set_sdl_window(void *_window) SDL_SetEventFilter(sdl_event_filter, nullptr); } +static void calculate_viewport(float *x, float *y, float *width, float *height) +{ + bool window_widescreen = false; + int32_t display_width = (window_widescreen ? 854 : 640); + int32_t display_height = 480; + + int w, h; + SDL_GetWindowSize(window, &w, &h); + + *width = w; + *height = h; + *x = 0; + *y = 0; + int32_t hw = display_height * *width; + int32_t wh = display_width * *height; + + // add letterboxes or pillarboxes if the window has a different aspect ratio + // than the current display mode + if (hw > wh) + { + int32_t w_max = wh / display_height; + *x += (*width - w_max) / 2; + *width = w_max; + } + else if (hw < wh) + { + int32_t h_max = hw / display_width; + *y += (*height - h_max) / 2; + *height = h_max; + } +} + static void render_frame(Vulkan::Device &device) { RDP::ScanoutOptions options = {}; @@ -225,7 +257,7 @@ static void render_frame(Vulkan::Device &device) cmd->begin_render_pass(rp); VkViewport vp = cmd->get_viewport(); - // Adjust the viewport here for aspect ratio correction. + calculate_viewport(&vp.x, &vp.y, &vp.width, &vp.height); cmd->set_program(program); diff --git a/src/ui.rs b/src/ui.rs index 6ab45f0..4021a18 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -25,6 +25,7 @@ impl Ui { .window("gopher64", 640, 480) .position_centered() .vulkan() + .resizable() .build() .unwrap(); Ui { From f345ab6968e52fbbb4d63b6fc2015e305c27e1c3 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 12 Oct 2023 12:51:17 -0600 Subject: [PATCH 0069/1117] avoid error --- src/device/pif.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/device/pif.rs b/src/device/pif.rs index da04114..69b0960 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -152,6 +152,7 @@ pub fn setup_channels_format(device: &mut device::Device) { 0xfd => { /* channel reset - send reset command and discard the results */ + disable_pif_channel(&mut device.pif.channels[k]); // not sure about this k += 1; i += 1; } From 2a077ae048b129a87bb7fd1ee5bca1e04147b464 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 12 Oct 2023 14:16:43 -0600 Subject: [PATCH 0070/1117] fix some rdp issues --- parallel-rdp/interface.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 54c00fe..6bdd71a 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -411,7 +411,15 @@ uint64_t rdp_process_commands(uint32_t *dpc_regs, uint8_t *SP_DMEM) } uint32_t width = viCalculateHorizonalWidth(vi_registers[VI_H_START_REG], vi_registers[VI_X_SCALE_REG], vi_registers[VI_WIDTH_REG]); + if (width == 0) + { + width = 320; + } uint32_t height = viCalculateVerticalHeight(vi_registers[VI_V_START_REG], vi_registers[VI_Y_SCALE_REG]); + if (height == 0) + { + height = 240; + } interrupt_timer = width * height * 4; dpc_regs[DPC_STATUS_REG] &= ~(DP_STATUS_PIPE_BUSY | DP_STATUS_START_GCLK); From 86326683bd7663dd5401e4561160d0d095f88441 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 12 Oct 2023 18:11:08 -0600 Subject: [PATCH 0071/1117] fullscreen option --- Cargo.toml | 1 + src/main.rs | 17 +++++++++++++---- src/ui.rs | 9 +-------- src/ui/video.rs | 14 +++++++++++++- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index f9672de..27fa37a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,7 @@ governor = "0.6" sevenz-rust = "0.5" sha2 = "0.10" sdl2-sys = { git = "https://github.com/Rust-SDL2/rust-sdl2.git" } +clap = { version = "4.4", features = ["derive"] } [dependencies.sdl2] git = "https://github.com/Rust-SDL2/rust-sdl2.git" diff --git a/src/main.rs b/src/main.rs index ecc1732..349b730 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,18 @@ #![feature(round_ties_even)] -use std::env; use std::fs; use std::io::Read; mod device; mod ui; +use clap::Parser; + +/// N64 emulator +#[derive(Parser, Debug)] +#[command(author, version, about, long_about = None)] +struct Args { + game: Option, + #[arg(short, long)] + fullscreen: bool, +} fn swap_rom(contents: Vec) -> Vec { let test = u32::from_be_bytes(contents[0..4].try_into().unwrap()); @@ -32,8 +41,8 @@ fn swap_rom(contents: Vec) -> Vec { } fn main() { - let args: Vec = env::args().collect(); - let file_path = std::path::Path::new(&args[1]); + let args = Args::parse(); + let file_path = std::path::Path::new(args.game.as_ref().unwrap()); let mut contents = vec![]; if file_path.extension().unwrap().to_ascii_lowercase() == "zip" { let zip_file = fs::File::open(file_path).unwrap(); @@ -90,7 +99,7 @@ fn main() { let (rdram_ptr, rdram_size) = device::rdram::init(&mut device); ui::audio::init(&mut device.ui, 33600); - ui::video::init(&mut device.ui, rdram_ptr, rdram_size); + ui::video::init(&mut device.ui, rdram_ptr, rdram_size, args.fullscreen); device::mi::init(&mut device); device::pif::init(&mut device); diff --git a/src/ui.rs b/src/ui.rs index 4021a18..0e273f0 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -21,13 +21,6 @@ impl Ui { let sdl_context = sdl2::init().unwrap(); let video_subsystem = sdl_context.video().unwrap(); let audio_subsystem = sdl_context.audio().unwrap(); - let window = video_subsystem - .window("gopher64", 640, 480) - .position_centered() - .vulkan() - .resizable() - .build() - .unwrap(); Ui { save_type: vec![], game_name: String::new(), @@ -47,7 +40,7 @@ impl Ui { sdl_context: Some(sdl_context), video_subsystem: Some(video_subsystem), audio_subsystem: Some(audio_subsystem), - window: Some(window), + window: None, audio_device: None, } } diff --git a/src/ui/video.rs b/src/ui/video.rs index 3e98e51..54ba79a 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -9,7 +9,19 @@ extern "C" { pub fn full_sync(); } -pub fn init(ui: &mut ui::Ui, rdram_ptr: *mut u8, rdram_size: usize) { +pub fn init(ui: &mut ui::Ui, rdram_ptr: *mut u8, rdram_size: usize, fullscreen: bool) { + let mut builder = ui + .video_subsystem + .as_ref() + .unwrap() + .window("gopher64", 640, 480); + builder.position_centered().vulkan(); + if fullscreen { + builder.fullscreen(); + } else { + builder.resizable(); + } + ui.window = Some(builder.build().unwrap()); unsafe { set_sdl_window(ui.window.as_mut().unwrap().raw() as usize); vk_init(rdram_ptr as usize, rdram_size as u32) From 39afb26bfc12a8b4bafd729aa0406b98dcf66771 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 12 Oct 2023 18:20:06 -0600 Subject: [PATCH 0072/1117] allow exiting full screen --- parallel-rdp/interface.cpp | 15 ++++++++++++++- parallel-rdp/interface.hpp | 2 +- src/ui/video.rs | 4 ++-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 6bdd71a..cbd29b1 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -50,6 +50,7 @@ enum vi_registers VI_REGS_COUNT }; +static bool fullscreen; static void *rdram; static SDL_Window *window; static RDP::CommandProcessor *processor; @@ -136,8 +137,9 @@ enum MB_RDRAM_DRAM_ALIGNMENT_REQUIREMENT = 64 * 1024 }; -void vk_init(void *mem_base, uint32_t rdram_size) +void vk_init(void *mem_base, uint32_t rdram_size, uint8_t _fullscreen) { + fullscreen = _fullscreen != 0; rdram = mem_base; bool window_vsync = 0; wsi = new WSI; @@ -191,6 +193,17 @@ int sdl_event_filter(void *userdata, SDL_Event *event) break; } } + else if (fullscreen && event->type == SDL_KEYDOWN) + { + switch (event->key.keysym.scancode) + { + case SDL_SCANCODE_ESCAPE: + emu_running = 0; + break; + default: + break; + } + } return 0; } diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index c084e85..cf5abd2 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -5,7 +5,7 @@ extern "C" { #endif - void vk_init(void *mem_base, uint32_t rdram_size); + void vk_init(void *mem_base, uint32_t rdram_size, uint8_t fullscreen); void vk_close(); void set_sdl_window(void *_window); void rdp_set_vi_register(uint32_t reg, uint32_t value); diff --git a/src/ui/video.rs b/src/ui/video.rs index 54ba79a..089d833 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -1,7 +1,7 @@ use crate::ui; extern "C" { - pub fn vk_init(rdram_ptr: usize, rdram_size: u32); + pub fn vk_init(rdram_ptr: usize, rdram_size: u32, fullscreen: u8); pub fn set_sdl_window(window: usize); pub fn rdp_update_screen() -> u8; pub fn rdp_set_vi_register(reg: u32, value: u32); @@ -24,7 +24,7 @@ pub fn init(ui: &mut ui::Ui, rdram_ptr: *mut u8, rdram_size: usize, fullscreen: ui.window = Some(builder.build().unwrap()); unsafe { set_sdl_window(ui.window.as_mut().unwrap().raw() as usize); - vk_init(rdram_ptr as usize, rdram_size as u32) + vk_init(rdram_ptr as usize, rdram_size as u32, fullscreen as u8) } } From 4abdb0d4f84c4943d823dcd9c0a270d39ae279f6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 12 Oct 2023 20:28:09 -0600 Subject: [PATCH 0073/1117] command and conquer boots --- src/device/sram.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/device/sram.rs b/src/device/sram.rs index 910ee1f..5af1058 100644 --- a/src/device/sram.rs +++ b/src/device/sram.rs @@ -270,7 +270,7 @@ pub fn flashram_command(device: &mut device::Device, command: u32) { /* do chip/sector erase */ if device.flashram.mode == FlashramMode::SectorErase { - let offset = (device.flashram.erase_page & 0xff80) * 128; + let offset: usize = (device.flashram.erase_page & 0xff80) as usize * 128; for i in 0..128 * 128 { device.ui.saves.flash[offset as usize + i] = 0xFF; } @@ -295,7 +295,7 @@ pub fn flashram_command(device: &mut device::Device, command: u32) { device.flashram.status |= 0x01; /* program selected page */ - let offset = (command as u16) * 128; + let offset: usize = (command & 0xffff) as usize * 128; for i in 0..128 { device.ui.saves.flash[(offset + i) as usize] = device.flashram.page_buf[i as usize]; } From 0c973200107d3756f1933f81d67cdbf7bc09648b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 12 Oct 2023 20:32:17 -0600 Subject: [PATCH 0074/1117] fix controller detection --- src/device/cart.rs | 3 +-- src/device/controller.rs | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/device/cart.rs b/src/device/cart.rs index a5230aa..33641b5 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -16,8 +16,7 @@ pub fn process(device: &mut device::Device, channel: usize) { let cmd = device.pif.ram[device.pif.channels[channel].tx_buf.unwrap()]; match cmd { - JCMD_RESET => { /* reset */ } - JCMD_STATUS => { + JCMD_RESET | JCMD_STATUS => { let eeprom_type; if device .ui diff --git a/src/device/controller.rs b/src/device/controller.rs index 54c3e03..e839fdb 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -32,8 +32,7 @@ pub fn process(device: &mut device::Device, channel: usize) { let cmd = device.pif.ram[device.pif.channels[channel].tx_buf.unwrap()]; match cmd { - JCMD_RESET => { /* reset */ } - JCMD_STATUS => { + JCMD_RESET | JCMD_STATUS => { device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] = CONT_FLAVOR as u8; device.pif.ram[device.pif.channels[channel].rx_buf.unwrap() + 1] = (CONT_FLAVOR >> 8) as u8; From 7591416da4144e1d061785776674e015326dc32e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 12 Oct 2023 20:43:23 -0600 Subject: [PATCH 0075/1117] move to function --- src/main.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main.rs b/src/main.rs index 349b730..524b0c3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -40,9 +40,7 @@ fn swap_rom(contents: Vec) -> Vec { } } -fn main() { - let args = Args::parse(); - let file_path = std::path::Path::new(args.game.as_ref().unwrap()); +fn get_rom_contents(file_path: &std::path::Path) -> Vec { let mut contents = vec![]; if file_path.extension().unwrap().to_ascii_lowercase() == "zip" { let zip_file = fs::File::open(file_path).unwrap(); @@ -89,11 +87,18 @@ fn main() { contents = fs::read(file_path).expect("Should have been able to read the file"); } - contents = swap_rom(contents); + return swap_rom(contents); +} + +fn main() { + let args = Args::parse(); + let file_path = std::path::Path::new(args.game.as_ref().unwrap()); + + let rom_contents = get_rom_contents(file_path); let mut device = device::Device::new(); - device::cart_rom::init(&mut device, contents); // cart needs to come before rdram + device::cart_rom::init(&mut device, rom_contents); // cart needs to come before rdram // rdram pointer is shared with parallel-rdp let (rdram_ptr, rdram_size) = device::rdram::init(&mut device); From 46464e6ad9ba2e55e2e9a154ea00e55a887082eb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 14 Oct 2023 07:31:30 -0600 Subject: [PATCH 0076/1117] zero alloc rdram --- src/device/rdram.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/device/rdram.rs b/src/device/rdram.rs index 86b2eb0..2e62344 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -1,5 +1,5 @@ use crate::device; -use std::alloc::{alloc, Layout}; +use std::alloc::{alloc_zeroed, Layout}; pub const RDRAM_MASK: usize = 0xFFFFFF; @@ -71,7 +71,7 @@ pub fn write_regs(_device: &mut device::Device, _address: u64, _value: u32, _mas pub fn init(device: &mut device::Device) -> (*mut u8, usize) { let alignment = 64 * 1024; let layout = Layout::from_size_align(RDRAM_SIZE, alignment).expect("Invalid layout"); - let ptr = unsafe { alloc(layout) }; + let ptr = unsafe { alloc_zeroed(layout) }; device.rdram.mem = unsafe { Vec::from_raw_parts(ptr, RDRAM_SIZE, RDRAM_SIZE) }; // hack, skip RDRAM initialization From 62743d963765788cb1da966168e39d9ec0788a9d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 14 Oct 2023 14:19:38 -0600 Subject: [PATCH 0077/1117] fix branch offset (#15) --- src/device/cpu_instructions.rs | 32 ++++++++--------- src/device/fpu_instructions.rs | 24 ++++++------- src/device/rsp_su_instructions.rs | 60 ++++++++++++++++++------------- 3 files changed, 64 insertions(+), 52 deletions(-) diff --git a/src/device/cpu_instructions.rs b/src/device/cpu_instructions.rs index 6f0ff53..d1790c6 100644 --- a/src/device/cpu_instructions.rs +++ b/src/device/cpu_instructions.rs @@ -102,7 +102,7 @@ pub fn beq(device: &mut device::Device, opcode: u32) { if device.cpu.gpr[rs(opcode) as usize] == device.cpu.gpr[rt(opcode) as usize] { check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { device.cpu.branch_state.state = device::cpu::State::NotTaken; } @@ -112,7 +112,7 @@ pub fn bne(device: &mut device::Device, opcode: u32) { if device.cpu.gpr[rs(opcode) as usize] != device.cpu.gpr[rt(opcode) as usize] { check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { device.cpu.branch_state.state = device::cpu::State::NotTaken; } @@ -122,7 +122,7 @@ pub fn blez(device: &mut device::Device, opcode: u32) { if device.cpu.gpr[rs(opcode) as usize] as i64 <= 0 { check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { device.cpu.branch_state.state = device::cpu::State::NotTaken; } @@ -132,7 +132,7 @@ pub fn bgtz(device: &mut device::Device, opcode: u32) { if device.cpu.gpr[rs(opcode) as usize] as i64 > 0 { check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { device.cpu.branch_state.state = device::cpu::State::NotTaken; } @@ -178,7 +178,7 @@ pub fn beql(device: &mut device::Device, opcode: u32) { if device.cpu.gpr[rs(opcode) as usize] == device.cpu.gpr[rt(opcode) as usize] { check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { device.cpu.branch_state.state = device::cpu::State::Discard; } @@ -188,7 +188,7 @@ pub fn bnel(device: &mut device::Device, opcode: u32) { if device.cpu.gpr[rs(opcode) as usize] != device.cpu.gpr[rt(opcode) as usize] { check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { device.cpu.branch_state.state = device::cpu::State::Discard; } @@ -198,7 +198,7 @@ pub fn blezl(device: &mut device::Device, opcode: u32) { if device.cpu.gpr[rs(opcode) as usize] as i64 <= 0 { check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { device.cpu.branch_state.state = device::cpu::State::Discard; } @@ -208,7 +208,7 @@ pub fn bgtzl(device: &mut device::Device, opcode: u32) { if device.cpu.gpr[rs(opcode) as usize] as i64 > 0 { check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { device.cpu.branch_state.state = device::cpu::State::Discard; } @@ -1276,7 +1276,7 @@ pub fn bltz(device: &mut device::Device, opcode: u32) { if ((device.cpu.gpr[rs(opcode) as usize]) as i64) < 0 { check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { device.cpu.branch_state.state = device::cpu::State::NotTaken; } @@ -1286,7 +1286,7 @@ pub fn bgez(device: &mut device::Device, opcode: u32) { if (device.cpu.gpr[rs(opcode) as usize] as i64) >= 0 { check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { device.cpu.branch_state.state = device::cpu::State::NotTaken; } @@ -1296,7 +1296,7 @@ pub fn bltzl(device: &mut device::Device, opcode: u32) { if ((device.cpu.gpr[rs(opcode) as usize]) as i64) < 0 { check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { device.cpu.branch_state.state = device::cpu::State::Discard; } @@ -1306,7 +1306,7 @@ pub fn bgezl(device: &mut device::Device, opcode: u32) { if (device.cpu.gpr[rs(opcode) as usize] as i64) >= 0 { check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { device.cpu.branch_state.state = device::cpu::State::Discard; } @@ -1352,7 +1352,7 @@ pub fn bltzal(device: &mut device::Device, opcode: u32) { if ((device.cpu.gpr[rs(opcode) as usize]) as i64) < 0 { check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { device.cpu.branch_state.state = device::cpu::State::NotTaken; } @@ -1365,7 +1365,7 @@ pub fn bgezal(device: &mut device::Device, opcode: u32) { if device.cpu.gpr[rs(opcode) as usize] as i64 >= 0 { check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { device.cpu.branch_state.state = device::cpu::State::NotTaken; } @@ -1381,7 +1381,7 @@ pub fn bltzall(device: &mut device::Device, opcode: u32) { if ((device.cpu.gpr[rs(opcode) as usize]) as i64) < 0 { check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { device.cpu.branch_state.state = device::cpu::State::Discard; } @@ -1392,7 +1392,7 @@ pub fn bgezall(device: &mut device::Device, opcode: u32) { if device.cpu.gpr[rs(opcode) as usize] as i64 >= 0 { check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode << 2) as i16)) + 4; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { device.cpu.branch_state.state = device::cpu::State::Discard; } diff --git a/src/device/fpu_instructions.rs b/src/device/fpu_instructions.rs index 824fa8b..8350bce 100644 --- a/src/device/fpu_instructions.rs +++ b/src/device/fpu_instructions.rs @@ -16,9 +16,9 @@ pub fn bc1f(device: &mut device::Device, opcode: u32) { if device.cpu.cop1.fcr31 & device::cop1::FCR31_CMP_BIT == 0 { device::cpu_instructions::check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(device::cpu_instructions::se16( - device::cpu_instructions::imm(opcode << 2) as i16, - )) + 4; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add( + device::cpu_instructions::se16(device::cpu_instructions::imm(opcode) as i16) << 2, + ) + 4; } else { device.cpu.branch_state.state = device::cpu::State::NotTaken; } @@ -28,9 +28,9 @@ pub fn bc1t(device: &mut device::Device, opcode: u32) { if device.cpu.cop1.fcr31 & device::cop1::FCR31_CMP_BIT != 0 { device::cpu_instructions::check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(device::cpu_instructions::se16( - device::cpu_instructions::imm(opcode << 2) as i16, - )) + 4; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add( + device::cpu_instructions::se16(device::cpu_instructions::imm(opcode) as i16) << 2, + ) + 4; } else { device.cpu.branch_state.state = device::cpu::State::NotTaken; } @@ -40,9 +40,9 @@ pub fn bc1fl(device: &mut device::Device, opcode: u32) { if device.cpu.cop1.fcr31 & device::cop1::FCR31_CMP_BIT == 0 { device::cpu_instructions::check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(device::cpu_instructions::se16( - device::cpu_instructions::imm(opcode << 2) as i16, - )) + 4; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add( + device::cpu_instructions::se16(device::cpu_instructions::imm(opcode) as i16) << 2, + ) + 4; } else { device.cpu.branch_state.state = device::cpu::State::Discard; } @@ -52,9 +52,9 @@ pub fn bc1tl(device: &mut device::Device, opcode: u32) { if device.cpu.cop1.fcr31 & device::cop1::FCR31_CMP_BIT != 0 { device::cpu_instructions::check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = device.cpu.pc.wrapping_add(device::cpu_instructions::se16( - device::cpu_instructions::imm(opcode << 2) as i16, - )) + 4; + device.cpu.branch_state.pc = device.cpu.pc.wrapping_add( + device::cpu_instructions::se16(device::cpu_instructions::imm(opcode) as i16) << 2, + ) + 4; } else { device.cpu.branch_state.state = device::cpu::State::Discard; } diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index c742d65..161f15e 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -21,6 +21,10 @@ pub fn imm(opcode: u32) -> u16 { return opcode as u16; } +pub fn se16(value: i16) -> u32 { + return value as i32 as u32; +} + pub fn voffset(opcode: u32) -> u8 { return (opcode & 0x7F) as u8; } @@ -89,9 +93,10 @@ pub fn jal(device: &mut device::Device, opcode: u32) { pub fn beq(device: &mut device::Device, opcode: u32) { if device.rsp.cpu.gpr[rs(opcode) as usize] == device.rsp.cpu.gpr[rt(opcode) as usize] { device.rsp.cpu.branch_state.state = device::cpu::State::Take; - device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] - .wrapping_add(imm(opcode << 2) as i16 as i32 as u32) - + 4 + device.rsp.cpu.branch_state.pc = device.rsp.regs2 + [device::rsp_interface::SP_PC_REG as usize] + .wrapping_add(se16(imm(opcode) as i16) << 2) + + 4; } else { device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; } @@ -100,9 +105,10 @@ pub fn beq(device: &mut device::Device, opcode: u32) { pub fn bne(device: &mut device::Device, opcode: u32) { if device.rsp.cpu.gpr[rs(opcode) as usize] != device.rsp.cpu.gpr[rt(opcode) as usize] { device.rsp.cpu.branch_state.state = device::cpu::State::Take; - device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] - .wrapping_add(imm(opcode << 2) as i16 as i32 as u32) - + 4 + device.rsp.cpu.branch_state.pc = device.rsp.regs2 + [device::rsp_interface::SP_PC_REG as usize] + .wrapping_add(se16(imm(opcode) as i16) << 2) + + 4; } else { device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; } @@ -111,9 +117,10 @@ pub fn bne(device: &mut device::Device, opcode: u32) { pub fn blez(device: &mut device::Device, opcode: u32) { if device.rsp.cpu.gpr[rs(opcode) as usize] as i32 <= 0 { device.rsp.cpu.branch_state.state = device::cpu::State::Take; - device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] - .wrapping_add(imm(opcode << 2) as i16 as i32 as u32) - + 4 + device.rsp.cpu.branch_state.pc = device.rsp.regs2 + [device::rsp_interface::SP_PC_REG as usize] + .wrapping_add(se16(imm(opcode) as i16) << 2) + + 4; } else { device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; } @@ -122,9 +129,10 @@ pub fn blez(device: &mut device::Device, opcode: u32) { pub fn bgtz(device: &mut device::Device, opcode: u32) { if device.rsp.cpu.gpr[rs(opcode) as usize] as i32 > 0 { device.rsp.cpu.branch_state.state = device::cpu::State::Take; - device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] - .wrapping_add(imm(opcode << 2) as i16 as i32 as u32) - + 4 + device.rsp.cpu.branch_state.pc = device.rsp.regs2 + [device::rsp_interface::SP_PC_REG as usize] + .wrapping_add(se16(imm(opcode) as i16) << 2) + + 4; } else { device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; } @@ -381,9 +389,10 @@ pub fn sltu(device: &mut device::Device, opcode: u32) { pub fn bltz(device: &mut device::Device, opcode: u32) { if (device.rsp.cpu.gpr[rs(opcode) as usize] as i32) < 0 { device.rsp.cpu.branch_state.state = device::cpu::State::Take; - device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] - .wrapping_add(imm(opcode << 2) as i16 as i32 as u32) - + 4 + device.rsp.cpu.branch_state.pc = device.rsp.regs2 + [device::rsp_interface::SP_PC_REG as usize] + .wrapping_add(se16(imm(opcode) as i16) << 2) + + 4; } else { device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; } @@ -392,9 +401,10 @@ pub fn bltz(device: &mut device::Device, opcode: u32) { pub fn bgez(device: &mut device::Device, opcode: u32) { if device.rsp.cpu.gpr[rs(opcode) as usize] as i32 >= 0 { device.rsp.cpu.branch_state.state = device::cpu::State::Take; - device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] - .wrapping_add(imm(opcode << 2) as i16 as i32 as u32) - + 4 + device.rsp.cpu.branch_state.pc = device.rsp.regs2 + [device::rsp_interface::SP_PC_REG as usize] + .wrapping_add(se16(imm(opcode) as i16) << 2) + + 4; } else { device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; } @@ -403,9 +413,10 @@ pub fn bgez(device: &mut device::Device, opcode: u32) { pub fn bltzal(device: &mut device::Device, opcode: u32) { if (device.rsp.cpu.gpr[rs(opcode) as usize] as i32) < 0 { device.rsp.cpu.branch_state.state = device::cpu::State::Take; - device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] - .wrapping_add(imm(opcode << 2) as i16 as i32 as u32) - + 4 + device.rsp.cpu.branch_state.pc = device.rsp.regs2 + [device::rsp_interface::SP_PC_REG as usize] + .wrapping_add(se16(imm(opcode) as i16) << 2) + + 4; } else { device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; } @@ -416,9 +427,10 @@ pub fn bltzal(device: &mut device::Device, opcode: u32) { pub fn bgezal(device: &mut device::Device, opcode: u32) { if (device.rsp.cpu.gpr[rs(opcode) as usize] as i32) >= 0 { device.rsp.cpu.branch_state.state = device::cpu::State::Take; - device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] - .wrapping_add(imm(opcode << 2) as i16 as i32 as u32) - + 4 + device.rsp.cpu.branch_state.pc = device.rsp.regs2 + [device::rsp_interface::SP_PC_REG as usize] + .wrapping_add(se16(imm(opcode) as i16) << 2) + + 4; } else { device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; } From ffdf84e22150ec9a28c72d607fa680b94eea6864 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 14 Oct 2023 14:41:18 -0600 Subject: [PATCH 0078/1117] use desktop fullscreen mode (#16) --- src/ui/video.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/video.rs b/src/ui/video.rs index 089d833..883addc 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -17,7 +17,7 @@ pub fn init(ui: &mut ui::Ui, rdram_ptr: *mut u8, rdram_size: usize, fullscreen: .window("gopher64", 640, 480); builder.position_centered().vulkan(); if fullscreen { - builder.fullscreen(); + builder.fullscreen_desktop(); } else { builder.resizable(); } From 77d9f65196938056f7c0b40110466301472451a9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 15 Oct 2023 10:09:17 -0600 Subject: [PATCH 0079/1117] RTC (#17) * RTC * fix --- Cargo.toml | 1 + src/device.rs | 1 + src/device/cart.rs | 100 ++++++++++++++++++++++++++++++++++++++++- src/device/cart_rom.rs | 1 + 4 files changed, 102 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 27fa37a..6e0208d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,7 @@ dirs = "5.0" zip = "0.6" governor = "0.6" sevenz-rust = "0.5" +chrono = "0.4" sha2 = "0.10" sdl2-sys = { git = "https://github.com/Rust-SDL2/rust-sdl2.git" } clap = { version = "4.4", features = ["derive"] } diff --git a/src/device.rs b/src/device.rs index 85eb879..61f7050 100644 --- a/src/device.rs +++ b/src/device.rs @@ -166,6 +166,7 @@ impl Device { cic_seed: 0, cic_type: cart_rom::CicType::CicNus6102, rdram_size_offset: 0, + rtc: cart::AfRtc { control: 0x0200 }, }, memory: memory::Memory { fast_read: [unmapped::read_mem; 0x2000], diff --git a/src/device/cart.rs b/src/device/cart.rs index 33641b5..975c403 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -1,17 +1,32 @@ +use chrono::Datelike; +use chrono::Timelike; + use crate::device; use crate::ui; pub const JCMD_STATUS: u8 = 0x00; pub const JCMD_EEPROM_READ: u8 = 0x04; pub const JCMD_EEPROM_WRITE: u8 = 0x05; +pub const JCMD_AF_RTC_STATUS: u8 = 0x06; +pub const JCMD_AF_RTC_READ: u8 = 0x07; +pub const JCMD_AF_RTC_WRITE: u8 = 0x08; pub const JCMD_RESET: u8 = 0xff; -//pub const JDT_AF_RTC: u16 = 0x1000; /* RTC */ +pub const JDT_AF_RTC: u16 = 0x1000; /* RTC */ pub const JDT_EEPROM_4K: u16 = 0x8000; /* 4k EEPROM */ pub const JDT_EEPROM_16K: u16 = 0xc000; /* 16k EEPROM */ pub const EEPROM_BLOCK_SIZE: usize = 8; pub const EEPROM_MAX_SIZE: usize = 0x800; +pub struct AfRtc { + pub control: u16, +} + +pub fn byte2bcd(mut n: u32) -> u8 { + n %= 100; + return (((n / 10) << 4) | (n % 10)) as u8; +} + pub fn process(device: &mut device::Device, channel: usize) { let cmd = device.pif.ram[device.pif.channels[channel].tx_buf.unwrap()]; @@ -53,6 +68,27 @@ pub fn process(device: &mut device::Device, channel: usize) { device.pif.channels[channel].tx_buf.unwrap() + 2, device.pif.channels[channel].rx_buf.unwrap(), ), + JCMD_AF_RTC_STATUS => { + /* set type and status */ + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] = JDT_AF_RTC as u8; + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap() + 1] = + (JDT_AF_RTC >> 8) as u8; + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap() + 2] = 0x00; + } + JCMD_AF_RTC_READ => { + af_rtc_read_block( + device, + device.pif.channels[channel].tx_buf.unwrap() + 1, + device.pif.channels[channel].rx_buf.unwrap(), + device.pif.channels[channel].rx_buf.unwrap() + 8, + ); + } + JCMD_AF_RTC_WRITE => af_rtc_write_block( + device, + device.pif.channels[channel].tx_buf.unwrap() + 1, + device.pif.channels[channel].tx_buf.unwrap() + 2, + device.pif.channels[channel].rx_buf.unwrap(), + ), _ => { panic!("unknown cart command") } @@ -94,3 +130,65 @@ pub fn eeprom_write_block(device: &mut device::Device, block: usize, offset: usi } ui::storage::write_save(&mut device.ui, save_type); } + +pub fn time2data(device: &mut device::Device, offset: usize) { + let now: chrono::DateTime = chrono::Local::now(); + + device.pif.ram[offset] = byte2bcd(now.second()); + device.pif.ram[offset + 1] = byte2bcd(now.minute()); + device.pif.ram[offset + 2] = 0x80 + byte2bcd(now.hour()); + device.pif.ram[offset + 3] = byte2bcd(now.day()); + device.pif.ram[offset + 4] = byte2bcd(now.weekday().num_days_from_sunday()); + device.pif.ram[offset + 5] = byte2bcd(now.month()); + device.pif.ram[offset + 6] = byte2bcd(now.year() as u32 - 1900); + device.pif.ram[offset + 7] = byte2bcd((now.year() as u32 - 1900) / 100); +} + +pub fn af_rtc_read_block(device: &mut device::Device, block: usize, offset: usize, status: usize) { + match device.pif.ram[block as usize] { + 0 => { + device.pif.ram[offset] = device.cart.rtc.control as u8; + device.pif.ram[offset + 1] = (device.cart.rtc.control >> 8) as u8; + device.pif.ram[status as usize] = 0x00; + } + 1 => { + panic!("AF-RTC reading block 1 is not implemented !"); + } + 2 => { + time2data(device, offset); + device.pif.ram[status as usize] = 0x00; + } + _ => { + panic!("AF-RTC read invalid block"); + } + } +} +pub fn af_rtc_write_block(device: &mut device::Device, block: usize, offset: usize, status: usize) { + match device.pif.ram[block as usize] { + 0 => { + device.cart.rtc.control = + (device.pif.ram[offset + 1] as u16) << 8 | device.pif.ram[offset] as u16; + device.pif.ram[status as usize] = 0x00; + } + 1 => { + /* block 1 read-only when control[0] is set */ + if (device.cart.rtc.control & 0x01) != 0 { + return; + } + panic!("AF-RTC writing block 1 is not implemented !"); + } + 2 => { + /* block 2 read-only when control[1] is set */ + if (device.cart.rtc.control & 0x02) != 0 { + return; + } + + /* TODO: implement block 2 writes */ + panic!("AF-RTC writing block 2 is not implemented !"); + } + + _ => { + panic!("AF-RTC write invalid block"); + } + } +} diff --git a/src/device/cart_rom.rs b/src/device/cart_rom.rs index 03e7f0d..fe32fa2 100644 --- a/src/device/cart_rom.rs +++ b/src/device/cart_rom.rs @@ -18,6 +18,7 @@ pub struct Cart { pub cic_type: CicType, pub cic_seed: u8, pub rdram_size_offset: usize, + pub rtc: device::cart::AfRtc, } pub fn read_mem_fast( From a75e7a08cb1a6c0d477ca1848f7edda83def7631 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 15 Oct 2023 19:56:54 +0300 Subject: [PATCH 0080/1117] shift jis support --- Cargo.toml | 1 + src/device/cart_rom.rs | 40 +++++++++++++++++++++++++++++++++++----- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 6e0208d..0be22a5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,7 @@ edition = "2021" dirs = "5.0" zip = "0.6" governor = "0.6" +encoding_rs = "0.8" sevenz-rust = "0.5" chrono = "0.4" sha2 = "0.10" diff --git a/src/device/cart_rom.rs b/src/device/cart_rom.rs index fe32fa2..7a78265 100644 --- a/src/device/cart_rom.rs +++ b/src/device/cart_rom.rs @@ -7,6 +7,7 @@ pub enum CicType { CicNus6103, CicNus6105, CicNus6106, + CicNus5167, } pub const CART_MASK: usize = 0xFFFFFFF; @@ -69,8 +70,14 @@ pub fn write_mem(device: &mut device::Device, _address: u64, value: u32, mask: u ); } -pub fn dma_read(device: &mut device::Device, _cart_addr: u32, _dram_addr: u32, length: u32) -> u64 { - return device::pi::calculate_cycles(device, 1, length); +pub fn dma_read( + _device: &mut device::Device, + _cart_addr: u32, + _dram_addr: u32, + _length: u32, +) -> u64 { + panic!("cart rom write"); + // return device::pi::calculate_cycles(device, 1, length); } // cart is big endian, rdram is native endian @@ -102,10 +109,28 @@ pub fn init(device: &mut device::Device, rom_file: Vec) { set_system_region(device, device.cart.rom[0x3E]); set_cic(device); - let data = - std::str::from_utf8(&device.cart.rom[0x20 as usize..(0x20 + 0x14) as usize]).unwrap(); + let decoded_game_name; + let jis_string; + let utf8_result = std::str::from_utf8(&device.cart.rom[0x20 as usize..(0x20 + 0x14) as usize]); + if utf8_result.is_ok() { + decoded_game_name = utf8_result.unwrap() + } else { + let (jis_result, _enc, jis_errors) = + encoding_rs::SHIFT_JIS.decode(&device.cart.rom[0x20 as usize..(0x20 + 0x14) as usize]); + if jis_errors { + decoded_game_name = "Unknown" + } else { + jis_string = jis_result.to_string(); + decoded_game_name = jis_string.as_str(); + } + } let hash = calculate_hash(&device.cart.rom); - device.ui.game_name = format!("{}-{}", data.trim().trim_matches(char::from(0)), hash); + device.ui.game_name = format!( + "{}-{}", + decoded_game_name.trim().trim_matches(char::from(0)), + hash + ); + device.ui.game_id = String::from_utf8(device.cart.rom[0x3B..0x3E].to_vec()).unwrap(); } @@ -146,6 +171,11 @@ pub fn set_cic(device: &mut device::Device) { device.cart.cic_seed = 0x85; device.cart.rdram_size_offset = 0x318; } + "53C0088FB777870D0AF32F0251E964030E2E8B72E830C26042FD191169508C05" => { + device.cart.cic_type = CicType::CicNus5167; + device.cart.cic_seed = 0xdd; + device.cart.rdram_size_offset = 0x318; + } _ => { device.cart.cic_type = CicType::CicNus6102; device.cart.cic_seed = 0x3F; From c3fb872d6f99093813c5729832f8585d155fe717 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 16 Oct 2023 12:20:58 -0600 Subject: [PATCH 0081/1117] rom saves (#18) * rom saves * more * more * more * works but slow * use json * clean * clean * clean --- Cargo.toml | 1 + src/device/cart_rom.rs | 60 +++++++++++++++++++++++------------------- src/device/vi.rs | 2 +- src/main.rs | 2 ++ src/ui.rs | 6 +++-- src/ui/audio.rs | 4 +-- src/ui/storage.rs | 29 +++++++++++++++++--- 7 files changed, 68 insertions(+), 36 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 0be22a5..8bfe5b7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,7 @@ governor = "0.6" encoding_rs = "0.8" sevenz-rust = "0.5" chrono = "0.4" +serde_json = "1.0" sha2 = "0.10" sdl2-sys = { git = "https://github.com/Rust-SDL2/rust-sdl2.git" } clap = { version = "4.4", features = ["derive"] } diff --git a/src/device/cart_rom.rs b/src/device/cart_rom.rs index 7a78265..58bcbe9 100644 --- a/src/device/cart_rom.rs +++ b/src/device/cart_rom.rs @@ -1,4 +1,5 @@ use crate::device; +use crate::ui; use sha2::{Digest, Sha256}; pub enum CicType { @@ -71,13 +72,28 @@ pub fn write_mem(device: &mut device::Device, _address: u64, value: u32, mask: u } pub fn dma_read( - _device: &mut device::Device, - _cart_addr: u32, - _dram_addr: u32, - _length: u32, + device: &mut device::Device, + mut cart_addr: u32, + mut dram_addr: u32, + length: u32, ) -> u64 { - panic!("cart rom write"); - // return device::pi::calculate_cycles(device, 1, length); + dram_addr &= device::rdram::RDRAM_MASK as u32; + cart_addr &= CART_MASK as u32; + + for i in 0..length { + device.cart.rom[(cart_addr + i) as usize] = + device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap]; + + device.ui.saves.romsave.insert( + (cart_addr + i).to_string(), + serde_json::to_value(device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap]) + .unwrap(), + ); + } + + ui::storage::write_save(&mut device.ui, ui::storage::SaveTypes::Romsave); + + return device::pi::calculate_cycles(device, 1, length); } // cart is big endian, rdram is native endian @@ -109,31 +125,21 @@ pub fn init(device: &mut device::Device, rom_file: Vec) { set_system_region(device, device.cart.rom[0x3E]); set_cic(device); - let decoded_game_name; - let jis_string; - let utf8_result = std::str::from_utf8(&device.cart.rom[0x20 as usize..(0x20 + 0x14) as usize]); - if utf8_result.is_ok() { - decoded_game_name = utf8_result.unwrap() - } else { - let (jis_result, _enc, jis_errors) = - encoding_rs::SHIFT_JIS.decode(&device.cart.rom[0x20 as usize..(0x20 + 0x14) as usize]); - if jis_errors { - decoded_game_name = "Unknown" - } else { - jis_string = jis_result.to_string(); - decoded_game_name = jis_string.as_str(); - } - } - let hash = calculate_hash(&device.cart.rom); - device.ui.game_name = format!( - "{}-{}", - decoded_game_name.trim().trim_matches(char::from(0)), - hash - ); + device.ui.game_hash = calculate_hash(&device.cart.rom); device.ui.game_id = String::from_utf8(device.cart.rom[0x3B..0x3E].to_vec()).unwrap(); } +pub fn load_rom_save(device: &mut device::Device) { + if device.ui.saves.romsave.is_empty() { + return; + } + for (key, value) in device.ui.saves.romsave.iter() { + device.cart.rom[key.parse::().unwrap()] = + serde_json::from_value(value.clone()).unwrap() + } +} + pub fn set_system_region(device: &mut device::Device, country: u8) { let pal_codes: [u8; 8] = [b'D', b'F', b'I', b'P', b'S', b'U', b'X', b'Y']; for i in pal_codes { diff --git a/src/device/vi.rs b/src/device/vi.rs index e07d6b1..2007aa9 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -165,6 +165,6 @@ pub fn speed_limiter(device: &mut device::Device) { let dur = outcome.wait_time_from(governor::clock::DefaultClock::default().now()); std::thread::sleep(dur); - let _ = device.vi.limiter.as_ref().unwrap().check(); + device.vi.limiter.as_ref().unwrap().check().unwrap(); } } diff --git a/src/main.rs b/src/main.rs index 524b0c3..3a15a31 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,5 @@ #![feature(round_ties_even)] +#![feature(string_remove_matches)] use std::fs; use std::io::Read; mod device; @@ -116,6 +117,7 @@ fn main() { ui::storage::init(&mut device.ui); ui::storage::load_saves(&mut device.ui); + device::cart_rom::load_rom_save(&mut device); device::cpu::run(&mut device); } diff --git a/src/ui.rs b/src/ui.rs index 0e273f0..4a084d6 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -5,8 +5,8 @@ pub mod video; pub struct Ui { pub save_type: Vec, - pub game_name: String, pub game_id: String, + pub game_hash: String, pub paths: storage::Paths, pub saves: storage::Saves, pub sdl_context: Option, @@ -23,19 +23,21 @@ impl Ui { let audio_subsystem = sdl_context.audio().unwrap(); Ui { save_type: vec![], - game_name: String::new(), game_id: String::new(), + game_hash: String::new(), paths: storage::Paths { eep_file_path: std::path::PathBuf::new(), fla_file_path: std::path::PathBuf::new(), sra_file_path: std::path::PathBuf::new(), pak_file_path: std::path::PathBuf::new(), + romsave_file_path: std::path::PathBuf::new(), }, saves: storage::Saves { eeprom: Vec::new(), sram: Vec::new(), flash: Vec::new(), mempak: Vec::new(), + romsave: serde_json::Map::new(), }, sdl_context: Some(sdl_context), video_subsystem: Some(video_subsystem), diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 0277e11..00ebc0f 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -38,10 +38,10 @@ pub fn play_audio(device: &mut device::Device, dram_addr: usize, length: u64) { if audio_queued < min_latency { let silence_buffer: Vec = vec![0; ((min_latency - audio_queued) * 2.0) as usize & !1]; - let _ = audio_device.queue_audio(&silence_buffer); + audio_device.queue_audio(&silence_buffer).unwrap(); } if audio_queued < acceptable_latency { - let _ = audio_device.queue_audio(&primary_buffer); + audio_device.queue_audio(&primary_buffer).unwrap(); } } diff --git a/src/ui/storage.rs b/src/ui/storage.rs index 2d9ef49..32586df 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -7,6 +7,7 @@ pub enum SaveTypes { Sram, Flash, Mempak, + Romsave, } pub struct Paths { @@ -14,6 +15,7 @@ pub struct Paths { pub sra_file_path: std::path::PathBuf, pub fla_file_path: std::path::PathBuf, pub pak_file_path: std::path::PathBuf, + pub romsave_file_path: std::path::PathBuf, } pub struct Saves { @@ -21,6 +23,7 @@ pub struct Saves { pub sram: Vec, pub flash: Vec, pub mempak: Vec, + pub romsave: serde_json::Map, } pub fn get_save_type(game_id: &str) -> Vec { @@ -97,22 +100,27 @@ pub fn init(ui: &mut ui::Ui) { ui.paths.eep_file_path = base_path.clone(); ui.paths .eep_file_path - .push(ui.game_name.to_owned() + ".eep"); + .push(ui.game_id.to_owned() + "-" + &ui.game_hash + ".eep"); ui.paths.sra_file_path = base_path.clone(); ui.paths .sra_file_path - .push(ui.game_name.to_owned() + ".sra"); + .push(ui.game_id.to_owned() + "-" + &ui.game_hash + ".sra"); ui.paths.fla_file_path = base_path.clone(); ui.paths .fla_file_path - .push(ui.game_name.to_owned() + ".fla"); + .push(ui.game_id.to_owned() + "-" + &ui.game_hash + ".fla"); ui.paths.pak_file_path = base_path.clone(); ui.paths .pak_file_path - .push(ui.game_name.to_owned() + ".mpk"); + .push(ui.game_id.to_owned() + "-" + &ui.game_hash + ".mpk"); + + ui.paths.romsave_file_path = base_path.clone(); + ui.paths + .romsave_file_path + .push(ui.game_id.to_owned() + "-" + &ui.game_hash + ".romsave"); } pub fn load_saves(ui: &mut ui::Ui) { @@ -132,6 +140,15 @@ pub fn load_saves(ui: &mut ui::Ui) { if mempak.is_ok() { ui.saves.mempak = mempak.unwrap(); } + let romsave = std::fs::read(&mut ui.paths.romsave_file_path); + if romsave.is_ok() { + ui.saves.romsave = serde_json::from_slice(romsave.unwrap().as_ref()).unwrap(); + } +} + +pub fn write_rom_save(ui: &mut ui::Ui) { + let f = std::fs::File::create(ui.paths.romsave_file_path.clone()).unwrap(); + serde_json::to_writer(f, &ui.saves.romsave).unwrap(); } pub fn write_save(ui: &mut ui::Ui, save_type: SaveTypes) { @@ -154,6 +171,10 @@ pub fn write_save(ui: &mut ui::Ui, save_type: SaveTypes) { path = ui.paths.pak_file_path.as_ref(); data = ui.saves.mempak.as_ref(); } + SaveTypes::Romsave => { + write_rom_save(ui); + return; + } } let result = std::fs::write(path, data); if result.is_err() { From 887e56110175df880b1e6396ac59d965a4331a30 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 16 Oct 2023 22:26:36 +0300 Subject: [PATCH 0082/1117] remove unused --- Cargo.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 8bfe5b7..3e36ec9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,6 @@ edition = "2021" dirs = "5.0" zip = "0.6" governor = "0.6" -encoding_rs = "0.8" sevenz-rust = "0.5" chrono = "0.4" serde_json = "1.0" From 94cfc616787e36582fe8b601bc70530884ec906a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 23 Oct 2023 21:44:14 +0300 Subject: [PATCH 0083/1117] controller config (#19) * controller config * more * list controllers * add config file * save at end * fix path * more * clean * readme * more * assign controller * clear option * more * add bind profile * pretty * stub * comments * add comment * move * more * use i * use none * add types * more * more * more * more * more * more controller stuff * some joystick * cleaner * func * func * more * clean * more func * more * hat * change defauly * only p1 * bind using guid * more * windows * add font * more * clean * warnins * more * more * more * more * more * joystick * clean * more * more --- Cargo.toml | 2 + README.md | 30 ++- data/Roboto-Regular.ttf | Bin 0 -> 168260 bytes src/device/cart.rs | 18 +- src/device/cart_rom.rs | 9 +- src/device/mempak.rs | 27 +-- src/device/sram.rs | 37 +-- src/main.rs | 88 ++++++- src/ui.rs | 66 ++++- src/ui/config.rs | 41 ++++ src/ui/input.rs | 515 ++++++++++++++++++++++++++++++++++++++-- src/ui/storage.rs | 52 ++-- src/ui/video.rs | 33 +++ 13 files changed, 818 insertions(+), 100 deletions(-) create mode 100644 data/Roboto-Regular.ttf create mode 100644 src/ui/config.rs diff --git a/Cargo.toml b/Cargo.toml index 3e36ec9..f02be25 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,8 +11,10 @@ zip = "0.6" governor = "0.6" sevenz-rust = "0.5" chrono = "0.4" +serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha2 = "0.10" +rusttype = "0.9" sdl2-sys = { git = "https://github.com/Rust-SDL2/rust-sdl2.git" } clap = { version = "4.4", features = ["derive"] } diff --git a/README.md b/README.md index 1893483..be9099d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,29 @@ # gopher64 +``` +Usage: gopher64 [OPTIONS] [GAME] + +Arguments: + [GAME] + +Options: + -f, --fullscreen + + -c, --configure-input-profile + Create a new input profile (keyboard/gamepad mappings). + -b, --bind-input-profile + Must also specify --port. Used to bind a previously created profile to a port + -l, --list-controllers + Lists connected controllers which can be used in --assign-controller + -a, --assign-controller + Must also specify --port. Used to assign a controller listed in --list-controllers to a port + -p, --port + Valid values: 1-4. To be used alongside --bind-input-profile and --assign-controller + -h, --help + Print help + -V, --version + Print version +``` ## goals 1. Performance. I want to be able to use this emulator on my laptop. @@ -16,7 +40,11 @@ ## controls -Right now, only keyboard is supported. Keys are mapped according to mupen64plus defaults: https://mupen64plus.org/wiki/index.php/KeyboardSetup#2._Default_Key_Mappings_for_SDL-Input_Plugin +Keys are mapped according to mupen64plus defaults: https://mupen64plus.org/wiki/index.php/KeyboardSetup#2._Default_Key_Mappings_for_SDL-Input_Plugin. Xbox-style controllers also have a default mapping applied. + +You can create you own mappings by running `./gopher64 --configure-input-profile my_profile`. You then bind that profile to a port: `./gopher64 --bind-input-profile my_profile --port 1` + +In order to use a controller (for example, an Xbox controller), run `./gopher64 --list-controllers` to get a list of attached controllers, and then assign it by doing `./gopher64 --assign-controller --port 1` ## contributing diff --git a/data/Roboto-Regular.ttf b/data/Roboto-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ddf4bfacb396e97546364ccfeeb9c31dfaea4c25 GIT binary patch literal 168260 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

S&jh1n&JeeMOkU4{=4@cYr6k z(ax=L|s)4kSST31>;ptckO_^V^T9xBEDa;HjTYh`K}oyXu_h<1|<>J?*}M z_pN2n9G6MC$WAI?$U?FnI``L8W)^o)BV!P5DDM^Dp<4A|-bV83(N%hr%JcH;Mvmvf zabV=(>{)?-Z6BOhoQIA_ZSX+;dyKbxbtFaJ@`~Go>%13f#KV-=OQ~q$bHK<788q}q z!3^#&4)djubc-6QXmCR$?(J^ht_2LE4uQDY_m6s@>c_n*5h&F(Lr&e$^R`oV+yy%Jm$1XX53TRMp- zTrza)av|@CQ{}l#7(OW#Vfbhu`!gXB&m>3y305S)ZQ{N3ES_8=bjPfxUdXZH$+=XJ znuGretdmtM`KG~}D_7Zz#W1=F5j{YnX5e&fuoLxoru79!-6YqGjZC#(KD2lj(0T>< z7E^c>)5x#ry~UT%Y3P!fAgSc!zFxHNxAe-i zd6O4EEtZ$goR=Xcu74xL9xPTh7L7l@Wz8S64(@z#+}ke>e{uilY2e1{a?iA{3XY(v zaT8V~dvssmY-72Hr~+H=p<-k>>KbgdhjhNA+}(gSc0AY~E6v>(a1wqdzTxNbfcu$rJo9co2}{f}e$KawlH4&%uLYUbl(0V=f z@6dW%%1)O&4%M#1$BYxNyI95W*qv^zGoF`VztTAToaMNLA1+4lbEX{2JDeCajdfwl`a34YDYx57q$G&3m&&*5FJa`QdcW z!F&sx@f-8=+4c=A_4xeY@xM0W08bJ0!K`u2V|b3BgKv#sk})5;*R`m2z$g4K31=L7 zO2NXX&$sCRKWS8oj$*6X&3xbdK9Cvc8W>}?c*23e^;wbt+BN>B-BZ`C1Fy+w%S(hvucm84bN}l zwTV?pSxM89wk91ZMWmB}6r~Cxy(ghd5s}`J zB1pHOVn750q$*87K=dsj5}JUtP(lfWl0blvKmy6V7jlz((@-hd?{oGh5ES3<_viii z{qf7@wX-`rJ3Djc%$YN1_UzSO9RK36Qa+^`mzq=ReCZOUyOds7`iIiVWonffQs!{k zSId4=_V;on%N;7`EdO-{y@Fqb+7%oX)ru`EeqQmie>eXL{=fO#0;~aT0;U8U2{;>& z9AH!`UFqXW36(2UUR~Ms(%>roRTfvdQ}wN?d#cr}How}B)$UhsUH!A_7hkUV@{U(J zzw+rTNi{mx*juwy&9OC4*37Qex7OTRKiB%LmaVq6cFWpRYyVa|wN8yX?dy!F^In|| zb)xE|)h$r>jk?n_ll){nqvOzE=CSA+KF-(5At64eq`E z?(3^w&uloX;hsi*jm9=Q(b&6j$Hu#x6m9Zh6L-_VrU#n6*lcO@0?ns4k8a`DVswjR zEnjW1SoVK3^`Ubum7#Gwt=;NTM;Nak+!4KN? zXt%oE?e;C(zt?_shpHX=cUaruMo0gSA9lRascNTHo&7t1(mA`!2VK(M81P1TSEcLl zuHoHkciY+hjqa{0_*Mwg8-mdfZ)VFW@&ashY zM}~}CFmmOnVx#7bT0Uyys9#3?Hu|N}UyM!|?HZ$v@f}lk%;+(Z@4of!sj;t*T|M^E zxOd0Jyf^s0JL6l8UpC%0q0xlx6Anx`HR1lh*>WaYC;Ck+GqK*pUK6KHTsv{!#1j)Q zPV%1AZqnvSk&~`Zx;weh58-`pf$*-|zH6jSm)mSop)AKl1x% z{zu8vx__*F%-hPJ4E*HSCvl(L|J3i(S3X_y>G4k=O)oXQ%k+fLDt)&7Gj~XlkeVSQ zLMDZ*2{{sScE)Qn=FBWH^YfYaKR^EY@h{&0;`Z!%vj@)pX^wTyr*nRp`@-Ch=7xRQ z;>)F9o|so`UZ;5<&pR={-2Be-=gr@HF&%*nQ zdM#SGSY14F@yW&RB~_O!ToSgl$kJ9zLzdc?wOqF0Yw`7@uN~hE{AR~D>B~DV-?*aW ziX|%|SC(J-&dQ%x+E=~2YV@jIs|&9#y?W&8tKYu$?Y3{-Yu;aTZEfSVE7sLq*L>Z| zb;;k=|8DAcw)Gv?hi(YiuxDe_jZxnReZS}XKQ_I!Y5S(QANu^T?}rONHu!PczpDJ} z%YUW*)cmK$<*y7`UG-)||frQ??2TXt=&zIDRZeLt7_dG^n{wyE2OZhL>*ylrc? zg>E~x?fSOVUpoA9V7vGBQQI$Ve-zp+bYrM(NAn%ScU;+#vUB{-sGT{xe0TZps=q66 z*IT46}wODsj}z8J=cHj`Rls9`rdc;M(k_5 zuhTx;{`&jB+wb~q)Ne5dsydYke0t>TBU_Gy9l3ra z<48_efv|wEMqzJ+jSTxVY+2Zru;XFZ!`w%`j+Q@K|7hol_b0KH&J2f~o9m!JIU(hfZBSm2&F$)7t4$r@Nf)b9%(-Pfjm8{oU!Ur;nY!b~^Qpex}TsSI@LRGvv&) zGfU3=bY}ONurpWBq(9cjt z2A}PJcJkSIXTLvt@a&bdY3Dkh+jTDDT;jPuB8x;;i)<13R^-^o&m&hyhDM%>ycwB& zzR>wP=ifd*=KPHFE6@LO{>1tC^Y<^P7m8e{a-rFU9v8-32)VHQ!nO-1FT`KSx>)dH zrHhR(_P99uV#vki7q?$Lc`@!{=B2kUy?1HWrEf3oymb1~%}ZHP1*6`NS`f7{YJb$l zsJN)i=mOCJ(T$?pM)!%H5dBH?(&%;3yP}Uo$3)+b{`0cmkE`OU_f@~ErLOv4t$wxc)ecvOUj69m;;a9I3=!BT%EXvaV_II#SM)c6E`DnW!$E?(701^H{-J73&od+FBjh+{*Cy) z@$bY>ik}`oFMfIay7(XCe~Ax|kBd)=e|WRl%^EiYZ+5=f^X9uZXWsnw=Jz)b-n?=% z?UvWAinm_B)%n(lThni?xD|S9->tA)*KcJc6ild`&?KQ-!svt<39A!!C7er0N>man zBvwtVm)Iilt;Dg3UnH(g{5A1>qCL^LUFvq-+nsKYxIO*$irb;L&)mL!`{A7ucWT{f ze`na8@pnGHv-Hm9J7ITX?zob?lKhhzC3R04oisCPb<&=s3rV)5$H_j)FC+&f*Gdjd z?w33zc|r0I$%m3-lGAKnwu-hUww|_kZ8L4FY@xPOwwtzWdqMk)_R97;_NMk8_R;nb z`wIIn_HcWgJ=0OZ;qR#FXygcVbaRY!Om}?a*y;##oO4`rBstuUM|ZvNmbmMGxBA_= zcOCa?+nt0C~aWcn6&rPW~MDnTb;HwZExD~vtG8>KYl-V8*KSvs>zwPFE6L?{d%G*T8@OA$ySV$fN4O`tKXrfU{>Ht* zz0JMf9qzv5j&~=!Q{CC_$LW^z!s#!hmrt*fUMsypdh_(4^e*Y|q)$&@p1v)8Px_(s znDm?J*%<{hif5F~sGLzFqfJJ~j2;<%Glpi2$(WQeEn{Y8;mp37`!kPbMrI~uKFCtD zie#0^s+v_Vt3_7FtX^3|v);>^mNh$TY1X=|Em^;!9ZC&Rtz2yL&7ax~@@;y53S-_d&5V|Fi{SxaWv09(sV6?Rs^Qn5(CX5A^BcJxiPz zt^X-TC?mv3^`Q7dJuRwglSDcFOMW?JsVJ{D5LMK&VzJg)6eIm)umubN13?3@8q5M+ zzyvT{af{i?4)L;HRJ7NJiWT%H7ezU*(xN%{ zG}g}xUp+$fQY(t3T6mNlw>N8reFMO30u?!o0U&=Sa+ClWwmWgHB zQSpxcp7_k#k@ziQq54?N)Puzk)g{`17V1p#u|8L<*6xb7YDwOpeki68KTZ1{go$@( z&$p}%L^o?=F`lvndQCGj^gz)^(hqy_kNmdFeCtv1h8`-W>q|sC^6ICr5#Q*i#30LR zQC@irP^<`1XGGA;Y%@VH-Vw6{)7@|B9>n(Gj*?uF*GF^<&mr|d_&?8gK zRW)O`-cStHPKeFgSK=#et5~Rw5i=xB)otP<^%YT1J1IU^ABll#Uw$)8Jo=XqkH-_T z%Jg_3VKu@=YGHVwpqR+4co}8cVc8@qLc@`k7NQ?91b91vYBUy8n#9%7>Y zg&58n&3auGwJGmly_*=OSD~#byS`9NQ&))N(6x%@q|7JaO&Q;XW0|(5=&lbCi!9%Z zx1qrx>k2VV-ylBH+ZeId_M)T35U*HM& z{~^$Et=12^Ulz5k{^AAQPxRK;i8Xo;uwK-(xWroQ9&2Qrc1={bM4I(oqxTUbtsjat z)^*h9cTvImI_Y|YE@HTK4&iW7M;~Q4I3H;}BdS@G$m2`nvCPNIoBL{r8G0`x&Z`Dx z`9rMIqeON1&DX1-IAbj+4q7jXWtK#-+(#F`dR>AyDvNH~4bfS)hd!USFCa?lny77_ z!%JQYdA=m3=jCmwC#LG{DC=V}h4vi@Cep_5fK5U?!1Dc|rqxI6pii%n<-pqg6S8N4 zK1^)X7E`AiT(iJ`8%0^`5b*--vs2$E*6>#9_sE*n)&(Na@;U9n+KzsmI$aPy(GE+z zUxnUTVu>XU-iQ|CpmSrq+g|pnDPFVmho26L<@$1XYCPc>@j2m_);gl4e#p3K=G|AU zw&XxN7qs6=8Q>S%Z?o>?8C{V}EyP;c5A>hJC@`9}o+j{nQ%h~0(+d8&FW$C(E&4$3 z;nrT_bxRHLD&Jn}q4QhIUPncsb*gCTg&eeQ5Q|CszFuC8uxt~RE&d`H-dN7>EY;C7 zL`}_KjMqyD;r%jp)!b0s&u~xxdETG6&p58j@kStp{UwjYS6@SJ14}D-v?cQU2T@pA zB?g1K$_nukVORCC7^U72&D5jfCFEGJzDT^S?iBOrzh7JW^851BMGvnnB2axtj0Js= zF-?&*uWN(pAILH5TcVnWI2a6aV7DD6gB8dL*lO8Twl76UK$OzSE(pTkJ zQdG3i>xeIOZ&5?-EcU32#CxiSEYC!SzsGaui)Pl#9_VR=-wNIjfPVEwKko*jKjoKl zbQvCXg*JtTh`@{XyaXpytXp#%CQPw0sTNP&;)b^ z9kk_Q5#!=I%|_ZLqJn;047YSfcD_X4E-sc@niKkprFsb0sV}m89`e07AA;{k!m5ZPAfueXcA)Zf>Fs`^8MrjZ%Li%pCI)tS)Y7R9vCOlGnNxx00-bFkA5X}to%T?lKNF1 z&}T|Ym^viS`&%gM#q*?Y`P>kF(^8r?l698l`46GgNo70yV+f6;&IrBsQjfKS=LmNa zItinoXDKD!cu2Szono&Ri-$G3t<;myRX0l=lYY8ENk`8?*Cl*ghUy%~LK#Lf&dFy$ zpTCCs7~`O97fG+bhK!{@(Z3ethHvJE!%UqSz4bqaCJ&+8<`2V#k8F3@7XNMNg-$N@ zV#y=2-ArCVH<$Xc)Y0>YQcsn7saY4PlZF_FO-LC_-~UG-AEX?~55-{|M&2$YJOy@{ za#!}7ze39J{E#v}|Ffj*$q(dF{^#T!OPT%*WZ!fc-+(P3g0fh_T#a$S91nJjne=IM ze2}48J~=i>^BRHmo2-EhVW{0%h!g@ zQqL%1d56Bg!uZy_j&5T1586rc9z48P^6X#dW0FT?yK=2Dd0jEvSnA?Z|3+sr^=@=) zb50@qww${#U!v__=2^*7?>759p{aMvK8emRc~m~r%u~(>85`vDrEdMCd@>#BDc_D~ z%EkP^oGVH>K>1|ZO!*}Hyws^>IdbQKrc9wMQXXhh|E7P?55JOf$(#qGf6Fv^y!_WN zkGIYFvz%8~V17;imU@;flbk>1$*H`unzDy-m~$8A8y+3nc<9|n^z-RJpO$l5^#43L zX3~^-jiiSca}7B^Fxx}UrSr+bygrmC*G&DC`IwxO<=yurZ)hfIA!%oZd9ox=ug?pa zr^va4q`N75{~9vCG3Ox6Ys|R^bLzbMK0h=fo*(}ldH$FB<=vN8zkd#S3!u62+do~G zv}64FmhgMp`isBH&wS_Y^u@-BeCN-~+r0Vje+vI9Hy0yEnJ?$foBt`yg%cEEp?AEKX=Ti zq5qf@Bke!3|C#n5$uH6lB*WbCRQ7W@Hs*!7W8>^6{VDI+QZFgw$&2U6F>mIRu`PG( zlFvndE+=J9UYOU1^Tr^{$((wo+^=K|vs5%f)R&A|dN{Idq)}FXWTctb(A}iGH)W_P z-_hsM?WLaoL~cv{U&`d%xq>q#GB+>_6y zUwk1al3rtTc;UjQ!-KLp9ewJ0rj~LZ<@sYZThnJNi-m=i?bR06#+8bmP`f1Fk>*DU z&tC$rRo#StKhFGROuMdK+lf}JqVsjY93kHETCH+H`A%Nbn^;0Q@t3|#@|hMtp8`6W zsj6nRcv)3V(=D9nyvLgRr>Y$2-d6rB7OPdYSosEc-kCRXs;=s~W~OFOa@AX&Xl$&f zbBV0U!)j5j^4#J@Vol>B&(w7~v2;xhKM#$9sFpf8gy^ zz{jGSk1)?T@;uv1#>q$dm`7eb%*X1(O(sobk>nvy2Hqqgt&B4deZ0(@C=Xwv^Rf77 zl2WRoKzl2{$t_y|qF6NDs`}6hw1byd0WU9EI_}YZWOd9Z@pRcFB-Nl4CAWGBA8zq9 zfq8|Utd#l3y^z`}OAYa5>21Cq} za+7W2xvH6jmicp!>O~tp`IA+XT=V3Q`zRA_tI8+IJIz0NT_(*tmlyN>nYlbU*K?ak zmdD)kC4LfTW+(4cd7h+|>l&y+>VQe}e@s<;(HEvq(E`=|%iQ|cKt zUd_}LdXJCht5w$KX$!Qa+6FCD+pnGBU8E>2Mz5mR(S!7^`cQqm{*gXg|4!em@8BB& z=k=?4qMprnq5Ukyc@eHi5KK=#$i~7IdU%|hUe>MNQ{`LKv_&4(p z^q=DYng1sLE&f0I@8JEQLjjh6;sGTCDg{&xs2wn{l3K}H$+uFmN@Xfls8pj;`$~f= zji?flrrtmPP|q<8`Fn-(PuAL>T5q7%zlbn#N?a6nz6fY2eo8T=s#0BfRq3e=Rz~I4 zdcCrpT0c-r<<|NnwZ2BJQI>LRJ&Rf|)Rt-AYdf^xvl^otB;}fMOgU#9Wym}N@Cr~^ zHB_(~DLcUy@Uv0U@G>kpf8?YnX_8nuBXRSeJe`adhI4JDU^x+}V)WEioXGcO4TlKx%?5Avs}P!jgnV3A1i}o$ygY zms?wI{(NiQt+lt7-&%HS&aHQE^}N;nMr!fB1%9_4P>(C8On#Szd-|8eAvIF)yHo1r zgX{Z?9Xe+M8 znR<-$;D7m3KT|{08R|^+b9ENh&5zYZ>SA??x>Q}Jel4(Ds^6%~)fMVWb(NSUzED@I z->PfWwdy+cJ26|#QMagD)t}XE>M!bcF;{%4hN?T%o$4+X%Y!(^Qx07K_AUHC@e6Gu13LTfMLTE|!R;>L2Q#>I3zm`bd4u zH^IKv3TcHkKdq=%Oe?N_s!mtGP}gfUw3=Eit+rM`E2tIGeCe6nwb>$6o1@Le&b@S zv>&t|ML1U4ll1k|yk{OE&Wdx|zeJ=suO(^QM3nZ6h}O0vwRUJb#bt3t#Av&cRLUU{B`Um=lT85U1^qr%BrgT=i=%4D-wJa@LyU&+wx+>iizF>^B z@2R|njGm_SQr=d2>k3i~l~t+$x>f0;^wmGsKhewT<&=I(e`SC&5UKX1GDt74&r`-L z6OeH<^Zt)BI>{E;{LT8odHT!^bZczss#7wUAd3{JpXwehR^d4_8&E5c&J{*47o63UY|Ptq2kTn zquKZD9T3{8PuVAjBl`4dQY%!K*>DG`=k+0jF}WEKno)Hg*9x`N?BpM+RqfWhd+*SY zz_OvO0{fH=2=EUI4eQoBG%T=eK%YLfLak5ANLfD}UCL8hubQFOS89cNdvbWQcWA4! zp`y>cc{0B@dshw!4VgEu>^y3acOLfa`95Boe;bYpTJt7J~cbN**l0L22jKTHAAZh)e0?GGxTMGLN#|(Q|9{5d$afcRzerU_IZoB zJ$vsL)iuY2K4n8IQ&|7G`~09=Zk()T;hLeX=I-+seS7bCSp=5d&#MWJK;jG42*rnZ zr{bs9P<9qo*zYacq;8e6e!`n2V5NQ2+5sgv+^hC(->ABIr1fa~T9uMAP9NB%S&h>2 z$ntv4N~L|}k#*vL;Cf}{k=K$B`ZuX8kG!Xk?AEx9Jo4!o^mTRnT#u3!mp5zRUQ>-Rn`22+lh2TSLP{ZH`(KGnTN≤FHXCuU9Qce=@vmZ{%9^5??OaVQJ8!4u8-w;yt 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 { } pub fn load_rom_save(device: &mut device::Device) { - if device.ui.saves.romsave.is_empty() { + if device.ui.saves.romsave.0.is_empty() { return; } - for (key, value) in device.ui.saves.romsave.iter() { + for (key, value) in device.ui.saves.romsave.0.iter() { device.cart.rom[key.parse::().unwrap()] = serde_json::from_value(value.clone()).unwrap() } diff --git a/src/device/mempak.rs b/src/device/mempak.rs index 802acee..fe2902b 100644 --- a/src/device/mempak.rs +++ b/src/device/mempak.rs @@ -1,12 +1,11 @@ use crate::device; -use crate::ui; pub const MEMPAK_SIZE: usize = 0x8000; pub const MPK_PAGE_SIZE: usize = 256; pub fn format_mempak(device: &mut device::Device) { - if device.ui.saves.mempak.len() < MEMPAK_SIZE * 4 { - device.ui.saves.mempak.resize(MEMPAK_SIZE * 4, 0); + if device.ui.saves.mempak.0.len() < MEMPAK_SIZE * 4 { + device.ui.saves.mempak.0.resize(MEMPAK_SIZE * 4, 0); let page_0: [u8; MPK_PAGE_SIZE] = [ /* Label area */ @@ -39,28 +38,28 @@ pub fn format_mempak(device: &mut device::Device) { let offset = i * MEMPAK_SIZE; /* Fill Page 0 with pre-initialized content */ - device.ui.saves.mempak[offset..offset + MPK_PAGE_SIZE].copy_from_slice(&page_0); + device.ui.saves.mempak.0[offset..offset + MPK_PAGE_SIZE].copy_from_slice(&page_0); /* Fill INODE page 1 and update it's checkum */ let start_page = 5; for i in 1 * MPK_PAGE_SIZE..2 * start_page { - device.ui.saves.mempak[offset + i] = 0; + device.ui.saves.mempak.0[offset + i] = 0; } for i in (1 * MPK_PAGE_SIZE + 2 * start_page..2 * MPK_PAGE_SIZE).step_by(2) { - device.ui.saves.mempak[offset + i + 0] = 0x00; - device.ui.saves.mempak[offset + i + 1] = 0x03; + device.ui.saves.mempak.0[offset + i + 0] = 0x00; + device.ui.saves.mempak.0[offset + i + 1] = 0x03; } - device.ui.saves.mempak[offset + (1 * MPK_PAGE_SIZE + 1)] = 0x71; + device.ui.saves.mempak.0[offset + (1 * MPK_PAGE_SIZE + 1)] = 0x71; /* Page 2 is identical to page 1 */ let page1 = offset + 1 * MPK_PAGE_SIZE; let page2 = offset + 2 * MPK_PAGE_SIZE; - let page1data = device.ui.saves.mempak[page1..page1 + MPK_PAGE_SIZE].to_vec(); - device.ui.saves.mempak[page2..page2 + MPK_PAGE_SIZE].copy_from_slice(&page1data); + let page1data = device.ui.saves.mempak.0[page1..page1 + MPK_PAGE_SIZE].to_vec(); + device.ui.saves.mempak.0[page2..page2 + MPK_PAGE_SIZE].copy_from_slice(&page1data); /* Remaining pages DIR+DATA (3...) are initialized with 0x00 */ for i in 3 * MPK_PAGE_SIZE..MEMPAK_SIZE - 3 * MPK_PAGE_SIZE { - device.ui.saves.mempak[offset + i] = 0; + device.ui.saves.mempak.0[offset + i] = 0; } } } @@ -72,7 +71,7 @@ pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usi let offset = (channel * MEMPAK_SIZE) + address as usize; device.pif.ram[data..data + size] - .copy_from_slice(&device.ui.saves.mempak[offset..offset + size]) + .copy_from_slice(&device.ui.saves.mempak.0[offset..offset + size]) } else { for i in 0..size { device.pif.ram[data + i] = 0; @@ -85,9 +84,9 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us format_mempak(device); let offset = (channel * MEMPAK_SIZE) + address as usize; - device.ui.saves.mempak[offset..offset + size] + device.ui.saves.mempak.0[offset..offset + size] .copy_from_slice(&device.pif.ram[data..data + size]); - ui::storage::write_save(&mut device.ui, ui::storage::SaveTypes::Mempak); + device.ui.saves.mempak.1 = true } } diff --git a/src/device/sram.rs b/src/device/sram.rs index 5af1058..108845d 100644 --- a/src/device/sram.rs +++ b/src/device/sram.rs @@ -28,14 +28,14 @@ pub struct Flashram { } pub fn format_sram(device: &mut device::Device) { - if device.ui.saves.sram.len() < SRAM_SIZE { - device.ui.saves.sram.resize(SRAM_SIZE, 0xFF) + if device.ui.saves.sram.0.len() < SRAM_SIZE { + device.ui.saves.sram.0.resize(SRAM_SIZE, 0xFF) } } pub fn format_flash(device: &mut device::Device) { - if device.ui.saves.flash.len() < FLASHRAM_SIZE { - device.ui.saves.flash.resize(FLASHRAM_SIZE, 0xFF) + if device.ui.saves.flash.0.len() < FLASHRAM_SIZE { + device.ui.saves.flash.0.resize(FLASHRAM_SIZE, 0xFF) } } @@ -45,7 +45,7 @@ pub fn read_mem_sram(device: &mut device::Device, address: u64) -> u32 { format_sram(device); return u32::from_be_bytes( - device.ui.saves.sram[masked_address..masked_address + 4] + device.ui.saves.sram.0[masked_address..masked_address + 4] .try_into() .unwrap(), ); @@ -86,14 +86,14 @@ pub fn write_mem_sram(device: &mut device::Device, address: u64, value: u32, mas format_sram(device); let mut data = u32::from_be_bytes( - device.ui.saves.sram[masked_address..masked_address + 4] + device.ui.saves.sram.0[masked_address..masked_address + 4] .try_into() .unwrap(), ); device::memory::masked_write_32(&mut data, value, mask); - device.ui.saves.sram[masked_address..masked_address + 4].copy_from_slice(&data.to_be_bytes()); + device.ui.saves.sram.0[masked_address..masked_address + 4].copy_from_slice(&data.to_be_bytes()); - ui::storage::write_save(&mut device.ui, ui::storage::SaveTypes::Sram); + device.ui.saves.sram.1 = true } pub fn write_mem_flash(device: &mut device::Device, address: u64, value: u32, mask: u32) { @@ -142,12 +142,12 @@ pub fn dma_read_sram( format_sram(device); while i < dram_addr + length { - device.ui.saves.sram[j as usize] = device.rdram.mem[i as usize ^ device.byte_swap]; + device.ui.saves.sram.0[j as usize] = device.rdram.mem[i as usize ^ device.byte_swap]; i += 1; j += 1; } - ui::storage::write_save(&mut device.ui, ui::storage::SaveTypes::Sram); + device.ui.saves.sram.1 = true } pub fn dma_read_flash(device: &mut device::Device, cart_addr: u32, dram_addr: u32, length: u32) { @@ -192,7 +192,7 @@ pub fn dma_write_sram( format_sram(device); while i < dram_addr + length { - device.rdram.mem[i as usize ^ device.byte_swap] = device.ui.saves.sram[j as usize]; + device.rdram.mem[i as usize ^ device.byte_swap] = device.ui.saves.sram.0[j as usize]; i += 1; j += 1; } @@ -233,7 +233,7 @@ pub fn dma_write_flash( /* do actual DMA */ for i in 0..length { device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap] = - device.ui.saves.flash[(cart_addr + i) as usize]; + device.ui.saves.flash.0[(cart_addr + i) as usize]; } } else { /* other accesses are not implemented */ @@ -272,14 +272,14 @@ pub fn flashram_command(device: &mut device::Device, command: u32) { if device.flashram.mode == FlashramMode::SectorErase { let offset: usize = (device.flashram.erase_page & 0xff80) as usize * 128; for i in 0..128 * 128 { - device.ui.saves.flash[offset as usize + i] = 0xFF; + device.ui.saves.flash.0[offset as usize + i] = 0xFF; } - ui::storage::write_save(&mut device.ui, ui::storage::SaveTypes::Flash); + device.ui.saves.flash.1 = true } else if device.flashram.mode == FlashramMode::ChipErase { for i in 0..FLASHRAM_SIZE { - device.ui.saves.flash[i] = 0xFF; + device.ui.saves.flash.0[i] = 0xFF; } - ui::storage::write_save(&mut device.ui, ui::storage::SaveTypes::Flash); + device.ui.saves.flash.1 = true } else { panic!("Unexpected flash erase command") } @@ -297,9 +297,10 @@ pub fn flashram_command(device: &mut device::Device, command: u32) { /* program selected page */ let offset: usize = (command & 0xffff) as usize * 128; for i in 0..128 { - device.ui.saves.flash[(offset + i) as usize] = device.flashram.page_buf[i as usize]; + device.ui.saves.flash.0[(offset + i) as usize] = + device.flashram.page_buf[i as usize]; } - ui::storage::write_save(&mut device.ui, ui::storage::SaveTypes::Flash); + device.ui.saves.flash.1 = true; /* clear program busy flag, set program success flag, transition to status mode */ device.flashram.status &= !0x01; diff --git a/src/main.rs b/src/main.rs index 3a15a31..4b692ad 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,6 +13,46 @@ struct Args { game: Option, #[arg(short, long)] fullscreen: bool, + #[arg( + short, + long, + value_name = "PROFILE_NAME", + help = "Create a new input profile (keyboard/gamepad mappings)." + )] + configure_input_profile: Option, + #[arg( + short, + long, + value_name = "PROFILE_NAME", + help = "Must also specify --port. Used to bind a previously created profile to a port" + )] + bind_input_profile: Option, + #[arg( + short, + long, + help = "Lists connected controllers which can be used in --assign-controller" + )] + list_controllers: bool, + #[arg( + short, + long, + value_name = "CONTROLLER_NUMBER", + help = "Must also specify --port. Used to assign a controller listed in --list-controllers to a port" + )] + assign_controller: Option, + #[arg( + short, + long, + value_name = "PORT", + help = "Valid values: 1-4. To be used alongside --bind-input-profile and --assign-controller" + )] + port: Option, + #[arg( + short = 'z', + long, + help = "Clear all input profile bindings and controller assignments" + )] + clear_input_bindings: bool, } fn swap_rom(contents: Vec) -> Vec { @@ -93,12 +133,55 @@ fn get_rom_contents(file_path: &std::path::Path) -> Vec { fn main() { let args = Args::parse(); + let mut device = device::Device::new(); + + if args.clear_input_bindings { + ui::input::clear_bindings(&mut device.ui); + return; + } + if args.port.is_some() { + let port = args.port.unwrap(); + if port < 1 || port > 4 { + println!("Port must be betwen 1 and 4"); + return; + } + } + if args.list_controllers { + ui::input::list_controllers(&mut device.ui); + return; + } + if args.assign_controller.is_some() { + if args.port.is_none() { + println!("Must specify port number"); + return; + } + ui::input::assign_controller( + &mut device.ui, + args.assign_controller.unwrap(), + args.port.unwrap(), + ); + return; + } + if args.bind_input_profile.is_some() { + if args.port.is_none() { + println!("Must specify port number"); + return; + } + ui::input::bind_input_profile( + &mut device.ui, + args.bind_input_profile.unwrap(), + args.port.unwrap(), + ); + return; + } + if args.configure_input_profile.is_some() { + ui::input::configure_input_profile(&mut device.ui, args.configure_input_profile.unwrap()); + return; + } let file_path = std::path::Path::new(args.game.as_ref().unwrap()); let rom_contents = get_rom_contents(file_path); - let mut device = device::Device::new(); - device::cart_rom::init(&mut device, rom_contents); // cart needs to come before rdram // rdram pointer is shared with parallel-rdp @@ -106,6 +189,7 @@ fn main() { ui::audio::init(&mut device.ui, 33600); ui::video::init(&mut device.ui, rdram_ptr, rdram_size, args.fullscreen); + ui::input::init(&mut device.ui); device::mi::init(&mut device); device::pif::init(&mut device); diff --git a/src/ui.rs b/src/ui.rs index 4a084d6..e8176ca 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -1,9 +1,13 @@ pub mod audio; +pub mod config; pub mod input; pub mod storage; pub mod video; pub struct Ui { + pub controllers: [input::Controllers; 4], + pub config_file_path: std::path::PathBuf, + pub config: config::Config, pub save_type: Vec, pub game_id: String, pub game_hash: String, @@ -12,16 +16,66 @@ pub struct Ui { pub sdl_context: Option, pub video_subsystem: Option, pub audio_subsystem: Option, + pub joystick_subsystem: Option, + pub controller_subsystem: Option, pub window: Option, pub audio_device: Option>, } +impl Drop for Ui { + fn drop(&mut self) { + storage::write_saves(self); + write_config(self); + } +} + +fn write_config(ui: &mut Ui) { + let f = std::fs::File::create(ui.config_file_path.clone()).unwrap(); + serde_json::to_writer_pretty(f, &ui.config).unwrap(); +} + impl Ui { pub fn new() -> Ui { let sdl_context = sdl2::init().unwrap(); let video_subsystem = sdl_context.video().unwrap(); let audio_subsystem = sdl_context.audio().unwrap(); + let joystick_subsystem = sdl_context.joystick().unwrap(); + let controller_subsystem = sdl_context.game_controller().unwrap(); + + let config_file_path = dirs::config_dir() + .unwrap() + .join("gopher64") + .join("config.json"); + let config_file = std::fs::read(config_file_path.clone()); + let mut config_map = config::Config::new(); + if config_file.is_ok() { + let result = serde_json::from_slice(config_file.unwrap().as_ref()); + if result.is_ok() { + config_map = result.unwrap(); + } + } + Ui { + controllers: [ + input::Controllers { + game_controller: None, + joystick: None, + }, + input::Controllers { + game_controller: None, + joystick: None, + }, + input::Controllers { + game_controller: None, + joystick: None, + }, + input::Controllers { + game_controller: None, + joystick: None, + }, + ], + config_file_path: config_file_path, + config: config_map, save_type: vec![], game_id: String::new(), game_hash: String::new(), @@ -33,15 +87,17 @@ impl Ui { romsave_file_path: std::path::PathBuf::new(), }, saves: storage::Saves { - eeprom: Vec::new(), - sram: Vec::new(), - flash: Vec::new(), - mempak: Vec::new(), - romsave: serde_json::Map::new(), + eeprom: (Vec::new(), false), + sram: (Vec::new(), false), + flash: (Vec::new(), false), + mempak: (Vec::new(), false), + romsave: (serde_json::Map::new(), false), }, sdl_context: Some(sdl_context), video_subsystem: Some(video_subsystem), audio_subsystem: Some(audio_subsystem), + joystick_subsystem: Some(joystick_subsystem), + controller_subsystem: Some(controller_subsystem), window: None, audio_device: None, } diff --git a/src/ui/config.rs b/src/ui/config.rs new file mode 100644 index 0000000..4514d0b --- /dev/null +++ b/src/ui/config.rs @@ -0,0 +1,41 @@ +use crate::ui; + +#[derive(serde::Serialize, serde::Deserialize)] +pub struct InputProfile { + pub keys: [(bool, i32); 18], + pub controller_buttons: [(bool, i32); 14], + pub controller_axis: [(bool, i32, i16); 18], + pub joystick_buttons: [(bool, u32); 14], + pub joystick_hat: [(bool, u32, i8); 14], + pub joystick_axis: [(bool, u32, i16); 18], +} + +#[derive(serde::Serialize, serde::Deserialize)] +pub struct Input { + pub input_profiles: std::collections::HashMap, + pub input_profile_binding: [String; 4], + pub controller_assignment: [Option; 4], +} +#[derive(serde::Serialize, serde::Deserialize)] +pub struct Config { + pub input: Input, +} + +impl Config { + pub fn new() -> Config { + let mut input_profiles = std::collections::HashMap::new(); + input_profiles.insert("default".to_string(), ui::input::get_default_profile()); + Config { + input: Input { + input_profile_binding: [ + "default".to_string(), + "default".to_string(), + "default".to_string(), + "default".to_string(), + ], + controller_assignment: [None, None, None, None], + input_profiles: input_profiles, + }, + } + } +} diff --git a/src/ui/input.rs b/src/ui/input.rs index 9d902c6..efefccb 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -1,7 +1,36 @@ +use std::ops::Neg; + use crate::ui; +pub const R_DPAD: usize = 0; +pub const L_DPAD: usize = 1; +pub const D_DPAD: usize = 2; +pub const U_DPAD: usize = 3; +pub const START_BUTTON: usize = 4; +pub const Z_TRIG: usize = 5; +pub const B_BUTTON: usize = 6; +pub const A_BUTTON: usize = 7; +pub const R_CBUTTON: usize = 8; +pub const L_CBUTTON: usize = 9; +pub const D_CBUTTON: usize = 10; +pub const U_CBUTTON: usize = 11; +pub const R_TRIG: usize = 12; +pub const L_TRIG: usize = 13; +pub const X_AXIS: usize = 16; +pub const Y_AXIS: usize = 24; + +pub const AXIS_LEFT: usize = 14; +pub const AXIS_RIGHT: usize = 15; +pub const AXIS_UP: usize = 16; +pub const AXIS_DOWN: usize = 17; + pub const MAX_AXIS_VALUE: f64 = 85.0; +pub struct Controllers { + pub game_controller: Option, + pub joystick: Option, +} + pub fn bound_axis(x: &mut f64, y: &mut f64) { let radius = 95.0; // this is roughly the maxium diagonal distance of the controller @@ -15,42 +44,478 @@ pub fn bound_axis(x: &mut f64, y: &mut f64) { *y *= scale_factor; } } -pub fn get(ui: &mut ui::Ui, _channel: usize) -> u32 { + +pub fn set_axis_from_joystick( + profile: &ui::config::InputProfile, + joystick: &sdl2::joystick::Joystick, +) -> (f64, f64) { + let mut x = 0.0; + let mut y = 0.0; + if profile.joystick_axis[AXIS_LEFT].0 { + let axis_position = joystick.axis(profile.joystick_axis[AXIS_LEFT].1).unwrap(); + if axis_position as isize * profile.joystick_axis[AXIS_LEFT].2 as isize > 0 { + x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; + } + } + if profile.joystick_axis[AXIS_RIGHT].0 { + let axis_position = joystick.axis(profile.joystick_axis[AXIS_RIGHT].1).unwrap(); + if axis_position as isize * profile.joystick_axis[AXIS_RIGHT].2 as isize > 0 { + x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; + } + } + if profile.joystick_axis[AXIS_DOWN].0 { + let axis_position = joystick.axis(profile.joystick_axis[AXIS_DOWN].1).unwrap(); + if axis_position as isize * profile.joystick_axis[AXIS_DOWN].2 as isize > 0 { + y = (axis_position as f64 * MAX_AXIS_VALUE as f64 / i16::MAX as f64).neg(); + } + } + if profile.joystick_axis[AXIS_UP].0 { + let axis_position = joystick.axis(profile.joystick_axis[AXIS_UP].1).unwrap(); + if axis_position as isize * profile.joystick_axis[AXIS_UP].2 as isize > 0 { + y = (axis_position as f64 * MAX_AXIS_VALUE as f64 / i16::MAX as f64).neg(); + } + } + return (x, y); +} + +pub fn set_axis_from_controller( + profile: &ui::config::InputProfile, + controller: &sdl2::controller::GameController, +) -> (f64, f64) { + unsafe { + let mut x = 0.0; + let mut y = 0.0; + if profile.controller_axis[AXIS_LEFT].0 { + let axis_position = + controller.axis(std::mem::transmute(profile.controller_axis[AXIS_LEFT].1)); + if axis_position as isize * profile.controller_axis[AXIS_LEFT].2 as isize > 0 { + x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; + } + } + if profile.controller_axis[AXIS_RIGHT].0 { + let axis_position = + controller.axis(std::mem::transmute(profile.controller_axis[AXIS_RIGHT].1)); + if axis_position as isize * profile.controller_axis[AXIS_RIGHT].2 as isize > 0 { + x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; + } + } + if profile.controller_axis[AXIS_DOWN].0 { + let axis_position = + controller.axis(std::mem::transmute(profile.controller_axis[AXIS_DOWN].1)); + if axis_position as isize * profile.controller_axis[AXIS_DOWN].2 as isize > 0 { + y = (axis_position as f64 * MAX_AXIS_VALUE as f64 / i16::MAX as f64).neg(); + } + } + if profile.controller_axis[AXIS_UP].0 { + let axis_position = + controller.axis(std::mem::transmute(profile.controller_axis[AXIS_UP].1)); + if axis_position as isize * profile.controller_axis[AXIS_UP].2 as isize > 0 { + y = (axis_position as f64 * MAX_AXIS_VALUE as f64 / i16::MAX as f64).neg(); + } + } + return (x, y); + } +} + +pub fn set_axis_from_keys( + profile: &ui::config::InputProfile, + keyboard_state: sdl2::keyboard::KeyboardState, +) -> (f64, f64) { + unsafe { + let mut x = 0.0; + let mut y = 0.0; + if profile.keys[AXIS_LEFT].0 { + if keyboard_state.is_scancode_pressed(std::mem::transmute(profile.keys[AXIS_LEFT].1)) { + x = -MAX_AXIS_VALUE + } + } + if profile.keys[AXIS_RIGHT].0 { + if keyboard_state.is_scancode_pressed(std::mem::transmute(profile.keys[AXIS_RIGHT].1)) { + x = MAX_AXIS_VALUE + } + } + if profile.keys[AXIS_DOWN].0 { + if keyboard_state.is_scancode_pressed(std::mem::transmute(profile.keys[AXIS_DOWN].1)) { + y = -MAX_AXIS_VALUE + } + } + if profile.keys[AXIS_UP].0 { + if keyboard_state.is_scancode_pressed(std::mem::transmute(profile.keys[AXIS_UP].1)) { + y = MAX_AXIS_VALUE + } + } + return (x, y); + } +} + +pub fn set_buttons_from_joystick( + profile: &ui::config::InputProfile, + i: usize, + joystick: &sdl2::joystick::Joystick, + keys: &mut u32, +) { + let profile_joystick_button = profile.joystick_buttons[i]; + if profile_joystick_button.0 { + *keys |= (joystick.button(profile_joystick_button.1).unwrap() as u32) << i; + } + + let profile_joystick_hat = profile.joystick_hat[i]; + if profile_joystick_hat.0 { + if joystick.hat(profile_joystick_hat.1).unwrap() + == unsafe { std::mem::transmute(profile_joystick_hat.2) } + { + *keys |= 1 << i; + } + } + + let profile_joystick_axis = profile.joystick_axis[i]; + if profile_joystick_axis.0 { + let axis_position = unsafe { + joystick + .axis(std::mem::transmute(profile_joystick_axis.1)) + .unwrap() + }; + if axis_position as isize * profile_joystick_axis.2 as isize > 0 { + if axis_position.saturating_abs() > i16::MAX / 2 { + *keys |= 1 << i; + } + } + } +} + +pub fn set_buttons_from_controller( + profile: &ui::config::InputProfile, + i: usize, + controller: &sdl2::controller::GameController, + keys: &mut u32, +) { + let profile_controller_button = profile.controller_buttons[i]; + if profile_controller_button.0 { + unsafe { + *keys |= + (controller.button(std::mem::transmute(profile_controller_button.1)) as u32) << i; + } + } + + let profile_controller_axis = profile.controller_axis[i]; + if profile_controller_axis.0 { + let axis_position = + unsafe { controller.axis(std::mem::transmute(profile_controller_axis.1)) }; + if axis_position as isize * profile_controller_axis.2 as isize > 0 { + if axis_position.saturating_abs() > i16::MAX / 2 { + *keys |= 1 << i; + } + } + } +} + +pub fn get(ui: &mut ui::Ui, channel: usize) -> u32 { let context = ui.sdl_context.as_mut().unwrap(); let events = context.event_pump().unwrap(); let keyboard_state = events.keyboard_state(); + let profile_name = ui.config.input.input_profile_binding[channel].clone(); + let profile = ui.config.input.input_profiles.get(&profile_name).unwrap(); let mut keys = 0; - keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::D) as u32) << 0; - keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::A) as u32) << 1; - keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::S) as u32) << 2; - keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::W) as u32) << 3; - keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::Return) as u32) << 4; - keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::Z) as u32) << 5; - keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::LCtrl) as u32) << 6; - keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::LShift) as u32) << 7; - keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::L) as u32) << 8; - keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::J) as u32) << 9; - keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::K) as u32) << 10; - keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::I) as u32) << 11; - keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::C) as u32) << 12; - keys |= (keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::X) as u32) << 13; + let controller = &ui.controllers[channel].game_controller; + let joystick = &ui.controllers[channel].joystick; + for i in 0..14 { + if profile_name != "default" || (channel == 0 && profile_name == "default") { + let profile_key = profile.keys[i]; + if profile_key.0 { + unsafe { + keys |= (keyboard_state.is_scancode_pressed(std::mem::transmute(profile_key.1)) + as u32) + << i; + } + } + } + + if joystick.is_some() { + set_buttons_from_joystick(profile, i, joystick.as_ref().unwrap(), &mut keys); + } else if controller.is_some() { + set_buttons_from_controller(profile, i, controller.as_ref().unwrap(), &mut keys); + } + } let mut x: f64 = 0.0; let mut y: f64 = 0.0; - if keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::Left) { - x = -MAX_AXIS_VALUE - } else if keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::Right) { - x = MAX_AXIS_VALUE + + if profile_name != "default" || (channel == 0 && profile_name == "default") { + (x, y) = set_axis_from_keys(profile, keyboard_state); } - if keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::Down) { - y = -MAX_AXIS_VALUE - } else if keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::Up) { - y = MAX_AXIS_VALUE + + if joystick.is_some() { + (x, y) = set_axis_from_joystick(profile, joystick.as_ref().unwrap()) + } else if controller.is_some() { + (x, y) = set_axis_from_controller(profile, controller.as_ref().unwrap()) } bound_axis(&mut x, &mut y); - keys |= (x.round() as i8 as u32) << 16; - keys |= (y.round() as i8 as u32) << 24; + keys |= (x.round() as i8 as u8 as u32) << X_AXIS; + keys |= (y.round() as i8 as u8 as u32) << Y_AXIS; return keys; } + +pub fn list_controllers(ui: &mut ui::Ui) { + let joystick_subsystem = ui.joystick_subsystem.as_ref().unwrap(); + let num_joysticks = joystick_subsystem.num_joysticks().unwrap(); + if num_joysticks == 0 { + println!("No controllers connected") + } + for i in 0..num_joysticks { + println!("{}: {}", i, joystick_subsystem.name_for_index(i).unwrap()) + } +} + +pub fn assign_controller(ui: &mut ui::Ui, controller: u32, port: usize) { + let joystick_subsystem = ui.joystick_subsystem.as_ref().unwrap(); + let num_joysticks = joystick_subsystem.num_joysticks().unwrap(); + if controller < num_joysticks { + ui.config.input.controller_assignment[port - 1] = Some( + joystick_subsystem + .device_guid(controller) + .unwrap() + .to_string(), + ); + } else { + println!("Invalid controller number") + } +} + +pub fn bind_input_profile(ui: &mut ui::Ui, profile: String, port: usize) { + if ui.config.input.input_profiles.contains_key(&profile) { + ui.config.input.input_profile_binding[port - 1] = profile; + } else { + println!("Invalid profile name") + } +} + +pub fn clear_bindings(ui: &mut ui::Ui) { + for i in 0..4 { + ui.config.input.controller_assignment[i] = None; + ui.config.input.input_profile_binding[i] = "default".to_string(); + } +} + +pub fn configure_input_profile(ui: &mut ui::Ui, profile: String) { + if profile == "default" { + println!("Profile name cannot be default"); + return; + } + let joystick_subsystem = ui.sdl_context.as_ref().unwrap().joystick().unwrap(); + let mut joysticks = vec![]; + for i in 0..joystick_subsystem.num_joysticks().unwrap() { + joysticks.push(ui.sdl_context.as_ref().unwrap().joystick().unwrap().open(i)); + } + + let mut builder = + ui.video_subsystem + .as_ref() + .unwrap() + .window("configure input profile", 640, 480); + builder.position_centered(); + let window = builder.build().unwrap(); + let mut canvas = window.into_canvas().build().unwrap(); + let font = + rusttype::Font::try_from_bytes(include_bytes!("../../data/Roboto-Regular.ttf")).unwrap(); + + let key_labels = [ + ("A", A_BUTTON), + ("B", B_BUTTON), + ("Start", START_BUTTON), + ("D Up", U_DPAD), + ("D Down", D_DPAD), + ("D Left", L_DPAD), + ("D Right", R_DPAD), + ("C Up", U_CBUTTON), + ("C Down", D_CBUTTON), + ("C Left", L_CBUTTON), + ("C Right", R_CBUTTON), + ("L", L_TRIG), + ("R", R_TRIG), + ("Z", Z_TRIG), + ("Control Stick Up", AXIS_UP), + ("Control Stick Down", AXIS_DOWN), + ("Control Stick Left", AXIS_LEFT), + ("Control Stick Right", AXIS_RIGHT), + ]; + + let mut new_keys = [(false, 0); 18]; + let mut new_joystick_buttons = [(false, 0u32); 14]; + let mut new_joystick_hat = [(false, 0u32, 0); 14]; + let mut new_joystick_axis = [(false, 0u32, 0); 18]; + + let mut last_axis_result = (false, 0, 0); + let mut event_pump = ui.sdl_context.as_ref().unwrap().event_pump().unwrap(); + for (key, value) in key_labels.iter() { + for _event in event_pump.poll_iter() {} // clear events + + ui::video::draw_text( + format!("Select binding for: {key}").as_str(), + &mut canvas, + &font, + ); + + let mut key_set = false; + while !key_set { + std::thread::sleep(std::time::Duration::from_millis(100)); + for event in event_pump.poll_iter() { + match event { + sdl2::event::Event::Window { + win_event: sdl2::event::WindowEvent::Close, + .. + } => return, + sdl2::event::Event::KeyDown { + scancode: Some(scancode), + .. + } => { + new_keys[*value] = (true, scancode as i32); + key_set = true + } + sdl2::event::Event::JoyButtonDown { button_idx, .. } => { + new_joystick_buttons[*value] = (true, button_idx as u32); + key_set = true + } + sdl2::event::Event::JoyHatMotion { hat_idx, state, .. } => { + new_joystick_hat[*value] = + unsafe { (true, hat_idx as u32, std::mem::transmute(state)) }; + key_set = true + } + sdl2::event::Event::JoyAxisMotion { + axis_idx, + value: axis_value, + .. + } => { + if axis_value.saturating_abs() > 24576 { + let result = ( + true, + axis_idx as u32, + axis_value / axis_value.saturating_abs(), + ); + if result != last_axis_result { + new_joystick_axis[*value] = result; + last_axis_result = result; + key_set = true + } + } + } + _ => {} + } + } + } + } + + let new_profile = ui::config::InputProfile { + keys: new_keys, + controller_buttons: Default::default(), + controller_axis: Default::default(), + joystick_buttons: new_joystick_buttons, + joystick_hat: new_joystick_hat, + joystick_axis: new_joystick_axis, + }; + ui.config.input.input_profiles.insert(profile, new_profile); +} + +pub fn get_default_profile() -> ui::config::InputProfile { + let mut default_controller_buttons = [(false, 0); 14]; + let mut default_controller_axis = [(false, 0, 0); 18]; + let mut default_keys = [(false, 0); 18]; + default_keys[R_DPAD] = (true, sdl2::keyboard::Scancode::D as i32); + default_keys[L_DPAD] = (true, sdl2::keyboard::Scancode::A as i32); + default_keys[D_DPAD] = (true, sdl2::keyboard::Scancode::S as i32); + default_keys[U_DPAD] = (true, sdl2::keyboard::Scancode::W as i32); + default_keys[START_BUTTON] = (true, sdl2::keyboard::Scancode::Return as i32); + default_keys[Z_TRIG] = (true, sdl2::keyboard::Scancode::Z as i32); + default_keys[B_BUTTON] = (true, sdl2::keyboard::Scancode::LCtrl as i32); + default_keys[A_BUTTON] = (true, sdl2::keyboard::Scancode::LShift as i32); + default_keys[R_CBUTTON] = (true, sdl2::keyboard::Scancode::L as i32); + default_keys[L_CBUTTON] = (true, sdl2::keyboard::Scancode::J as i32); + default_keys[D_CBUTTON] = (true, sdl2::keyboard::Scancode::K as i32); + default_keys[U_CBUTTON] = (true, sdl2::keyboard::Scancode::I as i32); + default_keys[R_TRIG] = (true, sdl2::keyboard::Scancode::C as i32); + default_keys[L_TRIG] = (true, sdl2::keyboard::Scancode::X as i32); + default_keys[AXIS_LEFT] = (true, sdl2::keyboard::Scancode::Left as i32); + default_keys[AXIS_RIGHT] = (true, sdl2::keyboard::Scancode::Right as i32); + default_keys[AXIS_UP] = (true, sdl2::keyboard::Scancode::Up as i32); + default_keys[AXIS_DOWN] = (true, sdl2::keyboard::Scancode::Down as i32); + + default_controller_buttons[R_DPAD] = (true, sdl2::controller::Button::DPadRight as i32); + default_controller_buttons[L_DPAD] = (true, sdl2::controller::Button::DPadLeft as i32); + default_controller_buttons[D_DPAD] = (true, sdl2::controller::Button::DPadDown as i32); + default_controller_buttons[U_DPAD] = (true, sdl2::controller::Button::DPadUp as i32); + default_controller_buttons[START_BUTTON] = (true, sdl2::controller::Button::Start as i32); + default_controller_axis[Z_TRIG] = (true, sdl2::controller::Axis::TriggerLeft as i32, 1); + default_controller_buttons[B_BUTTON] = (true, sdl2::controller::Button::X as i32); + default_controller_buttons[A_BUTTON] = (true, sdl2::controller::Button::A as i32); + default_controller_axis[R_CBUTTON] = (true, sdl2::controller::Axis::RightX as i32, 1); + default_controller_axis[L_CBUTTON] = (true, sdl2::controller::Axis::RightX as i32, -1); + default_controller_axis[D_CBUTTON] = (true, sdl2::controller::Axis::RightY as i32, 1); + default_controller_axis[U_CBUTTON] = (true, sdl2::controller::Axis::RightY as i32, -1); + default_controller_buttons[R_TRIG] = (true, sdl2::controller::Button::RightShoulder as i32); + default_controller_buttons[L_TRIG] = (true, sdl2::controller::Button::LeftShoulder as i32); + default_controller_axis[AXIS_LEFT] = (true, sdl2::controller::Axis::LeftX as i32, -1); + default_controller_axis[AXIS_RIGHT] = (true, sdl2::controller::Axis::LeftX as i32, 1); + default_controller_axis[AXIS_UP] = (true, sdl2::controller::Axis::LeftY as i32, -1); + default_controller_axis[AXIS_DOWN] = (true, sdl2::controller::Axis::LeftY as i32, 1); + + ui::config::InputProfile { + keys: default_keys, + controller_buttons: default_controller_buttons, + controller_axis: default_controller_axis, + joystick_buttons: Default::default(), + joystick_hat: Default::default(), + joystick_axis: Default::default(), + } +} + +pub fn init(ui: &mut ui::Ui) { + let joystick_subsystem = ui.joystick_subsystem.as_ref().unwrap(); + let mut taken = [false; 4]; + for i in 0..4 { + let controller_assignment = &ui.config.input.controller_assignment[i]; + if controller_assignment.is_some() { + let mut joystick_index = u32::MAX; + let guid = controller_assignment.clone().unwrap(); + for i in 0..joystick_subsystem.num_joysticks().unwrap() { + if joystick_subsystem.device_guid(i).unwrap().to_string() == guid + && !taken[i as usize] + { + joystick_index = i; + taken[i as usize] = true; + break; + } + } + if joystick_index < u32::MAX { + if ui.config.input.input_profile_binding[i] == "default" { + let controller_result = ui + .sdl_context + .as_ref() + .unwrap() + .game_controller() + .unwrap() + .open(joystick_index); + if controller_result.is_ok() { + ui.controllers[i].game_controller = Some(controller_result.unwrap()); + } + } + if ui.controllers[i].game_controller.is_none() { + let joystick_result = ui + .sdl_context + .as_ref() + .unwrap() + .joystick() + .unwrap() + .open(joystick_index); + if joystick_result.is_err() { + println!("could not connect joystick") + } else { + ui.controllers[i].joystick = Some(joystick_result.unwrap()); + } + } + } else { + println!("Could not bind assigned controller"); + } + } + } +} diff --git a/src/ui/storage.rs b/src/ui/storage.rs index 32586df..172eb2c 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -18,12 +18,14 @@ pub struct Paths { pub romsave_file_path: std::path::PathBuf, } +// the bool indicates whether the save has been written to +// if that is the case, it will be flushed to the disk when the program closes pub struct Saves { - pub eeprom: Vec, - pub sram: Vec, - pub flash: Vec, - pub mempak: Vec, - pub romsave: serde_json::Map, + pub eeprom: (Vec, bool), + pub sram: (Vec, bool), + pub flash: (Vec, bool), + pub mempak: (Vec, bool), + pub romsave: (serde_json::Map, bool), } pub fn get_save_type(game_id: &str) -> Vec { @@ -88,9 +90,7 @@ pub fn init(ui: &mut ui::Ui) { let id = ui.game_id.as_str(); ui.save_type = get_save_type(id); - let mut base_path = dirs::data_dir().unwrap(); - base_path.push("gopher64"); - base_path.push("saves"); + let base_path = dirs::data_dir().unwrap().join("gopher64").join("saves"); let result = std::fs::create_dir_all(base_path.clone()); if result.is_err() { @@ -126,23 +126,23 @@ pub fn init(ui: &mut ui::Ui) { pub fn load_saves(ui: &mut ui::Ui) { let eep = std::fs::read(&mut ui.paths.eep_file_path); if eep.is_ok() { - ui.saves.eeprom = eep.unwrap(); + ui.saves.eeprom.0 = eep.unwrap(); } let sra = std::fs::read(&mut ui.paths.sra_file_path); if sra.is_ok() { - ui.saves.sram = sra.unwrap(); + ui.saves.sram.0 = sra.unwrap(); } let fla = std::fs::read(&mut ui.paths.fla_file_path); if fla.is_ok() { - ui.saves.flash = fla.unwrap(); + ui.saves.flash.0 = fla.unwrap(); } let mempak = std::fs::read(&mut ui.paths.pak_file_path); if mempak.is_ok() { - ui.saves.mempak = mempak.unwrap(); + ui.saves.mempak.0 = mempak.unwrap(); } let romsave = std::fs::read(&mut ui.paths.romsave_file_path); if romsave.is_ok() { - ui.saves.romsave = serde_json::from_slice(romsave.unwrap().as_ref()).unwrap(); + ui.saves.romsave.0 = serde_json::from_slice(romsave.unwrap().as_ref()).unwrap(); } } @@ -151,25 +151,43 @@ pub fn write_rom_save(ui: &mut ui::Ui) { serde_json::to_writer(f, &ui.saves.romsave).unwrap(); } +pub fn write_saves(ui: &mut ui::Ui) { + if ui.saves.eeprom.1 { + write_save(ui, SaveTypes::Eeprom16k) + } + if ui.saves.sram.1 { + write_save(ui, SaveTypes::Sram) + } + if ui.saves.flash.1 { + write_save(ui, SaveTypes::Flash) + } + if ui.saves.mempak.1 { + write_save(ui, SaveTypes::Mempak) + } + if ui.saves.romsave.1 { + write_save(ui, SaveTypes::Romsave) + } +} + pub fn write_save(ui: &mut ui::Ui, save_type: SaveTypes) { let path: &std::path::Path; let data: &Vec; match save_type { SaveTypes::Eeprom4k | SaveTypes::Eeprom16k => { path = ui.paths.eep_file_path.as_ref(); - data = ui.saves.eeprom.as_ref(); + data = ui.saves.eeprom.0.as_ref(); } SaveTypes::Sram => { path = ui.paths.sra_file_path.as_ref(); - data = ui.saves.sram.as_ref(); + data = ui.saves.sram.0.as_ref(); } SaveTypes::Flash => { path = ui.paths.fla_file_path.as_ref(); - data = ui.saves.flash.as_ref(); + data = ui.saves.flash.0.as_ref(); } SaveTypes::Mempak => { path = ui.paths.pak_file_path.as_ref(); - data = ui.saves.mempak.as_ref(); + data = ui.saves.mempak.0.as_ref(); } SaveTypes::Romsave => { write_rom_save(ui); diff --git a/src/ui/video.rs b/src/ui/video.rs index 883addc..f6d120d 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -50,3 +50,36 @@ pub fn rdp_full_sync() { full_sync(); } } + +pub fn draw_text( + text: &str, + canvas: &mut sdl2::render::Canvas, + font: &rusttype::Font, +) { + let text_size = 32; + let scale = rusttype::Scale::uniform(text_size as f32); + let v_metrics = font.v_metrics(scale); + let offset = rusttype::point(10.0, 10.0 + v_metrics.ascent); + + // Clear the canvas + canvas.set_draw_color(sdl2::pixels::Color::RGB(0, 0, 0)); + canvas.clear(); + + for glyph in font.layout(text, scale, offset) { + if let Some(bb) = glyph.pixel_bounding_box() { + glyph.draw(|x, y, v| { + let x = x as i32 + bb.min.x; + let y = y as i32 + bb.min.y + (240 - text_size); + if v > 0.5 { + canvas.set_draw_color(sdl2::pixels::Color::RGB(255, 255, 255)); + canvas + .draw_point(sdl2::rect::Point::new(x, y)) + .expect("Error drawing pixel"); + } + }); + } + } + + // Present the canvas + canvas.present(); +} From f969e71f17d9cb99202a41ff4835e33533bf6940 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 24 Oct 2023 11:45:22 +0300 Subject: [PATCH 0084/1117] don't use !0 (#21) * don't use !0 * fix type --- src/device/cop0.rs | 24 ++++++++++++------------ src/device/cpu_instructions.rs | 12 ++++++------ src/device/rsp_cpu.rs | 2 +- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/device/cop0.rs b/src/device/cop0.rs index 81bb1cc..3407fcf 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -204,7 +204,7 @@ pub fn set_control_registers(device: &mut device::Device, index: u32, mut data: let mut compare_event_diff = (data as u32).wrapping_sub(current_count as u32); if compare_event_diff == 0 { - compare_event_diff += !0 as u32; + compare_event_diff += u32::MAX; } device::events::create_event( @@ -237,7 +237,7 @@ pub fn compare_event(device: &mut device::Device) { device::events::create_event( device, device::events::EventType::Compare, - device.cpu.next_event_count + (!0 as u32 as u64), + device.cpu.next_event_count + (u32::MAX as u64), compare_event, ); device::exceptions::check_pending_interrupts(device); @@ -266,15 +266,15 @@ pub fn init(device: &mut device::Device) { COP0_CONTEXT_REG_MASK, COP0_PAGEMASK_REG_MASK, COP0_WIRED_REG_MASK, - 0, // 7 - 0, // BadVAddr, read only - !0 as u32 as u64, // count + 0, // 7 + 0, // BadVAddr, read only + u32::MAX as u64, // count COP0_ENTRYHI_REG_MASK, - !0 as u32 as u64, // compare + u32::MAX as u64, // compare COP0_STATUS_REG_MASK, COP0_CAUSE_REG_MASK, - !0, // EPC - 0, // previd, read only + u64::MAX, // EPC + 0, // previd, read only COP0_CONFIG_REG_MASK, COP0_LLADDR_REG_MASK, COP0_WATCHLO_REG_MASK, @@ -288,9 +288,9 @@ pub fn init(device: &mut device::Device) { COP0_PARITYERR_REG_MASK, 0, // cache error COP0_TAGLO_REG_MASK, - 0, // taghi - !0, // ErrorPC - 0, // 31 + 0, // taghi + u64::MAX, // ErrorPC + 0, // 31 ]; device.cpu.cop0.instrs = [ @@ -375,7 +375,7 @@ pub fn init(device: &mut device::Device) { device::events::create_event( device, device::events::EventType::Compare, - !0 as u32 as u64, + u32::MAX as u64, compare_event, ) } diff --git a/src/device/cpu_instructions.rs b/src/device/cpu_instructions.rs index d1790c6..9b6531a 100644 --- a/src/device/cpu_instructions.rs +++ b/src/device/cpu_instructions.rs @@ -505,7 +505,7 @@ pub fn swl(device: &mut device::Device, opcode: u32) { let mask; if n == 0 { - mask = !0 as u32 + mask = u32::MAX } else { mask = bits_below_mask(8 * (4 - n)) as u32 } @@ -552,7 +552,7 @@ pub fn sdl(device: &mut device::Device, opcode: u32) { let mask; if n == 0 { - mask = !0 as u64 + mask = u64::MAX } else { mask = bits_below_mask(8 * (8 - n)) } @@ -1060,7 +1060,7 @@ pub fn div(device: &mut device::Device, opcode: u32) { if (device.cpu.gpr[rs(opcode) as usize] as i32) < 0 { device.cpu.lo = 1 } else { - device.cpu.lo = !0 as u64 + device.cpu.lo = u64::MAX } device.cpu.hi = se32(device.cpu.gpr[rs(opcode) as usize] as i32) } @@ -1079,7 +1079,7 @@ pub fn divu(device: &mut device::Device, opcode: u32) { % (device.cpu.gpr[rt(opcode) as usize] as u32)) as i32, ); } else { - device.cpu.lo = !0 as u64; + device.cpu.lo = u64::MAX; device.cpu.hi = se32(device.cpu.gpr[rs(opcode) as usize] as u32 as i32) } @@ -1112,7 +1112,7 @@ pub fn ddiv(device: &mut device::Device, opcode: u32) { if ((device.cpu.gpr[rs(opcode) as usize]) as i64) < 0 { device.cpu.lo = 1 } else { - device.cpu.lo = !0 as u64 + device.cpu.lo = u64::MAX } device.cpu.hi = device.cpu.gpr[rs(opcode) as usize] } @@ -1124,7 +1124,7 @@ pub fn ddivu(device: &mut device::Device, opcode: u32) { device.cpu.lo = device.cpu.gpr[rs(opcode) as usize] / device.cpu.gpr[rt(opcode) as usize]; device.cpu.hi = device.cpu.gpr[rs(opcode) as usize] % device.cpu.gpr[rt(opcode) as usize] } else { - device.cpu.lo = !0 as u64; + device.cpu.lo = u64::MAX; device.cpu.hi = device.cpu.gpr[rs(opcode) as usize] } device::cop0::add_cycles(device, 68); diff --git a/src/device/rsp_cpu.rs b/src/device/rsp_cpu.rs index c83188b..f221e64 100644 --- a/src/device/rsp_cpu.rs +++ b/src/device/rsp_cpu.rs @@ -161,7 +161,7 @@ pub fn decode_opcode(device: &mut device::Device, opcode: u32) -> fn(&mut device } pub fn init(device: &mut device::Device) { - device.rsp.cpu.reciprocals[0] = !0 as u16; + device.rsp.cpu.reciprocals[0] = u16::MAX; let mut index = 1; while index < 512 { let a = (index + 512) as u64; From 46625f31040c677a35a2b7418f54959dcedaca15 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 24 Oct 2023 14:20:48 +0300 Subject: [PATCH 0085/1117] clippy fixes (#22) * clippy fixes * typo fix * more * more * more * more * more * more * add workflow --- .github/workflows/lint.yml | 28 ++++++++++ src/device.rs | 2 +- src/device/ai.rs | 19 +++---- src/device/cache.rs | 22 ++++---- src/device/cart.rs | 18 +++---- src/device/cart_rom.rs | 14 ++--- src/device/controller.rs | 15 ++---- src/device/cop0.rs | 18 +++---- src/device/cop1.rs | 29 +++++------ src/device/cpu.rs | 12 ++--- src/device/cpu_instructions.rs | 72 +++++++++++++------------- src/device/events.rs | 4 +- src/device/fpu_instructions.rs | 6 +-- src/device/is_viewer.rs | 6 +-- src/device/memory.rs | 16 +++--- src/device/mempak.rs | 10 ++-- src/device/mi.rs | 2 +- src/device/pi.rs | 28 ++++------ src/device/pif.rs | 20 ++++--- src/device/rdp.rs | 4 +- src/device/rdram.rs | 14 ++--- src/device/ri.rs | 2 +- src/device/rsp_cpu.rs | 32 ++++++------ src/device/rsp_interface.rs | 18 +++---- src/device/rsp_su_instructions.rs | 83 ++++++++++++----------------- src/device/rsp_vu_instructions.rs | 50 +++++++++--------- src/device/si.rs | 2 +- src/device/sram.rs | 21 ++++---- src/device/tlb.rs | 86 +++++++++++++------------------ src/device/unmapped.rs | 2 +- src/device/vi.rs | 8 +-- src/main.rs | 8 +-- src/ui.rs | 4 +- src/ui/config.rs | 2 +- src/ui/input.rs | 85 ++++++++++++++---------------- src/ui/storage.rs | 14 ++--- src/ui/video.rs | 8 +-- 37 files changed, 376 insertions(+), 408 deletions(-) create mode 100644 .github/workflows/lint.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..305812c --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,28 @@ +name: Rust-lint + +on: + push: + branches: ["main"] + pull_request: + branches: ["main"] + +env: + CARGO_TERM_COLOR: always + +jobs: + lint-linux: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Install sdl2 headers + run: | + sudo apt -y install libsdl2-dev + - name: Update rust + run: | + rustup update + rustup component add clippy + - name: Lint + run: | + cargo clippy -- -Dwarnings diff --git a/src/device.rs b/src/device.rs index 61f7050..b3a7f7a 100644 --- a/src/device.rs +++ b/src/device.rs @@ -62,7 +62,7 @@ impl Device { } Device { ui: ui::Ui::new(), - byte_swap: byte_swap, + byte_swap, cpu: cpu::Cpu { cop0: cop0::Cop0 { regs: [0; cop0::COP0_REGS_COUNT as usize], diff --git a/src/device/ai.rs b/src/device/ai.rs index cb5aeb3..e37b3eb 100644 --- a/src/device/ai.rs +++ b/src/device/ai.rs @@ -32,7 +32,7 @@ pub fn get_remaining_dma_length(device: &mut device::Device) -> u64 { } let next_ai_event = device::events::get_event(device, device::events::EventType::AI); - if next_ai_event == None { + if next_ai_event.is_none() { return 0; } @@ -40,15 +40,15 @@ pub fn get_remaining_dma_length(device: &mut device::Device) -> u64 { next_ai_event.unwrap().count - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize]; let dma_length = remaining_dma_duration * device.ai.fifo[0].length / device.ai.fifo[0].duration; - return dma_length & !7; + dma_length & !7 } -pub fn get_dma_duration(device: &mut device::Device) -> u64 { +pub fn get_dma_duration(device: &device::Device) -> u64 { let samples_per_sec = device.vi.clock / (1 + device.ai.regs[AI_DACRATE_REG as usize]) as u64; let bytes_per_sample = 4; /* XXX: assume 16bit stereo - should depends on bitrate instead */ let length = (device.ai.regs[AI_LEN_REG as usize] & !7) as u64; - return length * (device.cpu.clock_rate / (bytes_per_sample * samples_per_sec)); + length * (device.cpu.clock_rate / (bytes_per_sample * samples_per_sec)) } pub fn do_dma(device: &mut device::Device) { @@ -58,11 +58,8 @@ pub fn do_dma(device: &mut device::Device) { device.ai.fifo[0].address += 0x2000; } - if ((device.ai.fifo[0].address + device.ai.fifo[0].length) & 0x1FFF) == 0 { - device.ai.delayed_carry = true; - } else { - device.ai.delayed_carry = false; - } + device.ai.delayed_carry = + ((device.ai.fifo[0].address + device.ai.fifo[0].length) & 0x1FFF) == 0; /* schedule end of dma event */ device::events::create_event( @@ -128,9 +125,9 @@ pub fn read_regs( device.ai.last_read = value; } - return value as u32; + value as u32 } - _ => return device.ai.regs[reg as usize], + _ => device.ai.regs[reg as usize], } } diff --git a/src/device/cache.rs b/src/device/cache.rs index ed848fc..3ea3558 100644 --- a/src/device/cache.rs +++ b/src/device/cache.rs @@ -18,9 +18,9 @@ pub struct DCache { pub words: [u32; 4], } -pub fn icache_hit(device: &mut device::Device, line_index: usize, phys_address: u64) -> bool { - return device.memory.icache[line_index].valid - && (device.memory.icache[line_index].tag & 0x1ffffffc) == (phys_address & !0xFFF) as u32; +pub fn icache_hit(device: &device::Device, line_index: usize, phys_address: u64) -> bool { + device.memory.icache[line_index].valid + && (device.memory.icache[line_index].tag & 0x1ffffffc) == (phys_address & !0xFFF) as u32 } pub fn icache_writeback(device: &mut device::Device, line_index: usize) { @@ -31,7 +31,7 @@ pub fn icache_writeback(device: &mut device::Device, line_index: usize) { & 0x1ffffffc) as u64; device.memory.memory_map_write[(cache_address >> 16) as usize]( device, - cache_address | 0x0, + cache_address, device.memory.icache[line_index].words[0], 0xFFFFFFFF, ); @@ -90,7 +90,7 @@ pub fn icache_fill(device: &mut device::Device, line_index: usize, phys_address: device.memory.icache[line_index].words[0] = device.memory.memory_map_read [(cache_address >> 16) as usize]( device, - cache_address | 0x0, + cache_address, device::memory::AccessSize::Icache, ); device.memory.icache[line_index].words[1] = device.memory.memory_map_read @@ -166,9 +166,9 @@ pub fn icache_fetch(device: &mut device::Device, phys_address: u64) { ); } -pub fn dcache_hit(device: &mut device::Device, line_index: usize, phys_address: u64) -> bool { - return device.memory.dcache[line_index].valid - && (device.memory.dcache[line_index].tag & 0x1ffffffc) == (phys_address & !0xFFF) as u32; +pub fn dcache_hit(device: &device::Device, line_index: usize, phys_address: u64) -> bool { + device.memory.dcache[line_index].valid + && (device.memory.dcache[line_index].tag & 0x1ffffffc) == (phys_address & !0xFFF) as u32 } pub fn dcache_writeback(device: &mut device::Device, line_index: usize) { @@ -181,7 +181,7 @@ pub fn dcache_writeback(device: &mut device::Device, line_index: usize) { & 0x1ffffffc) as u64; device.memory.memory_map_write[(cache_address >> 16) as usize]( device, - cache_address | 0x0, + cache_address, device.memory.dcache[line_index].words[0], 0xFFFFFFFF, ); @@ -218,7 +218,7 @@ pub fn dcache_fill(device: &mut device::Device, line_index: usize, phys_address: device.memory.dcache[line_index].words[0] = device.memory.memory_map_read [(cache_address >> 16) as usize]( device, - cache_address | 0x0, + cache_address, device::memory::AccessSize::Dcache, ); device.memory.dcache[line_index].words[1] = device.memory.memory_map_read @@ -251,7 +251,7 @@ pub fn dcache_read(device: &mut device::Device, phys_address: u64) -> u32 { } else { device::cop0::add_cycles(device, 1) } - return device.memory.dcache[line_index].words[((phys_address >> 2) & 3) as usize]; + device.memory.dcache[line_index].words[((phys_address >> 2) & 3) as usize] } pub fn dcache_write(device: &mut device::Device, phys_address: u64, value: u32, mask: u32) { diff --git a/src/device/cart.rs b/src/device/cart.rs index beb9efe..d31f7b4 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -24,7 +24,7 @@ pub struct AfRtc { pub fn byte2bcd(mut n: u32) -> u8 { n %= 100; - return (((n / 10) << 4) | (n % 10)) as u8; + (((n / 10) << 4) | (n % 10)) as u8 } pub fn process(device: &mut device::Device, channel: usize) { @@ -102,7 +102,7 @@ pub fn format_eeprom(device: &mut device::Device) { } pub fn eeprom_read_block(device: &mut device::Device, block: usize, offset: usize) { - let address = device.pif.ram[block as usize] as usize * EEPROM_BLOCK_SIZE; + let address = device.pif.ram[block] as usize * EEPROM_BLOCK_SIZE; format_eeprom(device); @@ -111,14 +111,14 @@ pub fn eeprom_read_block(device: &mut device::Device, block: usize, offset: usiz } pub fn eeprom_write_block(device: &mut device::Device, block: usize, offset: usize, status: usize) { - let address = device.pif.ram[block as usize] as usize * EEPROM_BLOCK_SIZE; + let address = device.pif.ram[block] as usize * EEPROM_BLOCK_SIZE; format_eeprom(device); device.ui.saves.eeprom.0[address..address + EEPROM_BLOCK_SIZE] .copy_from_slice(&device.pif.ram[offset..offset + EEPROM_BLOCK_SIZE]); - device.pif.ram[status as usize] = 0x00; + device.pif.ram[status] = 0x00; device.ui.saves.eeprom.1 = true } @@ -137,18 +137,18 @@ pub fn time2data(device: &mut device::Device, offset: usize) { } pub fn af_rtc_read_block(device: &mut device::Device, block: usize, offset: usize, status: usize) { - match device.pif.ram[block as usize] { + match device.pif.ram[block] { 0 => { device.pif.ram[offset] = device.cart.rtc.control as u8; device.pif.ram[offset + 1] = (device.cart.rtc.control >> 8) as u8; - device.pif.ram[status as usize] = 0x00; + device.pif.ram[status] = 0x00; } 1 => { panic!("AF-RTC reading block 1 is not implemented !"); } 2 => { time2data(device, offset); - device.pif.ram[status as usize] = 0x00; + device.pif.ram[status] = 0x00; } _ => { panic!("AF-RTC read invalid block"); @@ -156,11 +156,11 @@ pub fn af_rtc_read_block(device: &mut device::Device, block: usize, offset: usiz } } pub fn af_rtc_write_block(device: &mut device::Device, block: usize, offset: usize, status: usize) { - match device.pif.ram[block as usize] { + match device.pif.ram[block] { 0 => { device.cart.rtc.control = (device.pif.ram[offset + 1] as u16) << 8 | device.pif.ram[offset] as u16; - device.pif.ram[status as usize] = 0x00; + device.pif.ram[status] = 0x00; } 1 => { /* block 1 read-only when control[0] is set */ diff --git a/src/device/cart_rom.rs b/src/device/cart_rom.rs index 707a718..23eaac4 100644 --- a/src/device/cart_rom.rs +++ b/src/device/cart_rom.rs @@ -28,11 +28,11 @@ pub fn read_mem_fast( _access_size: device::memory::AccessSize, ) -> u32 { let masked_address = address as usize & CART_MASK; - return u32::from_be_bytes( + u32::from_be_bytes( device.cart.rom[masked_address..masked_address + 4] .try_into() .unwrap(), - ); + ) } pub fn read_mem( @@ -45,14 +45,14 @@ pub fn read_mem( // well known cart ROM oddity, if a read is perfomed while PI_STATUS_IO_BUSY is set, the latched value is returned rather than the data at the specified address if device.pi.regs[device::pi::PI_STATUS_REG as usize] & device::pi::PI_STATUS_IO_BUSY != 0 { - return device.cart.latch; + device.cart.latch } else { let masked_address = address as usize & CART_MASK; - return u32::from_be_bytes( + u32::from_be_bytes( device.cart.rom[masked_address..masked_address + 4] .try_into() .unwrap(), - ); + ) } } @@ -92,7 +92,7 @@ pub fn dma_read( device.ui.saves.romsave.1 = true; - return device::pi::calculate_cycles(device, 1, length); + device::pi::calculate_cycles(device, 1, length) } // cart is big endian, rdram is native endian @@ -116,7 +116,7 @@ pub fn dma_write( device.rdram.mem[i as usize ^ device.byte_swap] = 0; i += 1; } - return device::pi::calculate_cycles(device, 1, length); + device::pi::calculate_cycles(device, 1, length) } pub fn init(device: &mut device::Device, rom_file: Vec) { diff --git a/src/device/controller.rs b/src/device/controller.rs index e839fdb..f73cbf0 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -78,7 +78,7 @@ pub fn pak_read_block( (device.pif.ram[addr_acrc] as u16) << 8 | (device.pif.ram[addr_acrc + 1] & 0xe0) as u16; let handler = device.pif.channels[channel].pak_handler; - if !handler.is_none() { + if handler.is_some() { (handler.unwrap().read)(device, channel, address, data, PAK_CHUNK_SIZE); device.pif.ram[dcrc] = pak_data_crc(device, data, PAK_CHUNK_SIZE) } else { @@ -97,7 +97,7 @@ pub fn pak_write_block( (device.pif.ram[addr_acrc] as u16) << 8 | (device.pif.ram[addr_acrc + 1] & 0xe0) as u16; let handler = device.pif.channels[channel].pak_handler; - if !handler.is_none() { + if handler.is_some() { (handler.unwrap().write)(device, channel, address, data, PAK_CHUNK_SIZE); device.pif.ram[dcrc] = pak_data_crc(device, data, PAK_CHUNK_SIZE) } else { @@ -105,19 +105,14 @@ pub fn pak_write_block( } } -pub fn pak_data_crc(device: &mut device::Device, data_offset: usize, size: usize) -> u8 { +pub fn pak_data_crc(device: &device::Device, data_offset: usize, size: usize) -> u8 { let mut i = 0; let mut crc = 0; while i <= size { let mut mask = 0x80; while mask >= 1 { - let xor_tap; - if crc & 0x80 != 0 { - xor_tap = 0x85 - } else { - xor_tap = 0x00 - } + let xor_tap = if crc & 0x80 != 0 { 0x85 } else { 0x00 }; crc <<= 1; if i != size && (device.pif.ram[data_offset + i] & mask) != 0 { crc |= 1; @@ -127,5 +122,5 @@ pub fn pak_data_crc(device: &mut device::Device, data_offset: usize, size: usize } i += 1; } - return crc; + crc } diff --git a/src/device/cop0.rs b/src/device/cop0.rs index 3407fcf..09c6b5e 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -174,12 +174,12 @@ pub fn reserved(device: &mut device::Device, _opcode: u32) { device::exceptions::reserved_exception(device, 0); } -pub fn get_control_registers(device: &mut device::Device, index: u32) -> u64 { +pub fn get_control_registers(device: &device::Device, index: u32) -> u64 { match index { - COP0_COUNT_REG => return device.cpu.cop0.regs[index as usize] >> 1, - COP0_RANDOM_REG => return set_random_register(device), - 7 | 21 | 22 | 23 | 24 | 25 | 31 => return device.cpu.cop0.reg_latch, - _ => return device.cpu.cop0.regs[index as usize], + COP0_COUNT_REG => device.cpu.cop0.regs[index as usize] >> 1, + COP0_RANDOM_REG => set_random_register(device), + 7 | 21 | 22 | 23 | 24 | 25 | 31 => device.cpu.cop0.reg_latch, + _ => device.cpu.cop0.regs[index as usize], } } @@ -243,13 +243,13 @@ pub fn compare_event(device: &mut device::Device) { device::exceptions::check_pending_interrupts(device); } -pub fn set_random_register(device: &mut device::Device) -> u64 { +pub fn set_random_register(device: &device::Device) -> u64 { if device.cpu.cop0.regs[COP0_WIRED_REG as usize] > 31 { - return (u64::MAX - device.cpu.cop0.regs[COP0_COUNT_REG as usize]) & 0x3F; + (u64::MAX - device.cpu.cop0.regs[COP0_COUNT_REG as usize]) & 0x3F } else { - return (u64::MAX - device.cpu.cop0.regs[COP0_COUNT_REG as usize]) + (u64::MAX - device.cpu.cop0.regs[COP0_COUNT_REG as usize]) % (32 - device.cpu.cop0.regs[COP0_WIRED_REG as usize]) - + device.cpu.cop0.regs[COP0_WIRED_REG as usize]; + + device.cpu.cop0.regs[COP0_WIRED_REG as usize] } } diff --git a/src/device/cop1.rs b/src/device/cop1.rs index c885ce3..ace74f8 100644 --- a/src/device/cop1.rs +++ b/src/device/cop1.rs @@ -340,10 +340,10 @@ pub fn reserved(device: &mut device::Device, opcode: u32) { device::exceptions::reserved_exception(device, device::cop0::COP0_CAUSE_CE1); } -pub fn get_control_registers_fpu(device: &mut device::Device, index: u32) -> u32 { +pub fn get_control_registers_fpu(device: &device::Device, index: u32) -> u32 { match index { - 0 => return device.cpu.cop1.fcr0, - 31 => return device.cpu.cop1.fcr31, + 0 => device.cpu.cop1.fcr0, + 31 => device.cpu.cop1.fcr31, _ => { panic!("unknown FCR register") } @@ -356,7 +356,7 @@ pub fn set_control_registers_fpu(device: &mut device::Device, index: u32, data: } 31 => { - device.cpu.cop1.fcr31 = data & FCR31_WRITE_MASK as u32; + device.cpu.cop1.fcr31 = data & FCR31_WRITE_MASK; // the Cause bits are ANDed with the Enable bits to check for exceptions // "Unimplemented Operation" has no Enable bit and always causes an exception if (device.cpu.cop1.fcr31 & FCR31_CAUSE_MASK) >> 5 @@ -399,23 +399,22 @@ pub fn set_fpr_single(device: &mut device::Device, index: usize, value: f32, cle device.cpu.cop1.fgr32[index] = bytes; } else { let bytes_lo = bytes; - let bytes_hi: [u8; 4]; - if clear_high { - bytes_hi = [0, 0, 0, 0]; + let bytes_hi: [u8; 4] = if clear_high { + [0, 0, 0, 0] } else { - bytes_hi = device.cpu.cop1.fgr64[index][4..8].try_into().unwrap() - } + device.cpu.cop1.fgr64[index][4..8].try_into().unwrap() + }; device.cpu.cop1.fgr64[index] = [bytes_lo, bytes_hi].concat().try_into().unwrap(); } } -pub fn get_fpr_single(device: &mut device::Device, index: usize) -> f32 { +pub fn get_fpr_single(device: &device::Device, index: usize) -> f32 { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_FR == 0 { - return f32::from_ne_bytes(device.cpu.cop1.fgr32[index]); + f32::from_ne_bytes(device.cpu.cop1.fgr32[index]) } else { - return f32::from_ne_bytes(device.cpu.cop1.fgr64[index][0..4].try_into().unwrap()); + f32::from_ne_bytes(device.cpu.cop1.fgr64[index][0..4].try_into().unwrap()) } } @@ -431,15 +430,15 @@ pub fn set_fpr_double(device: &mut device::Device, index: usize, value: f64) { } } -pub fn get_fpr_double(device: &mut device::Device, index: usize) -> f64 { +pub fn get_fpr_double(device: &device::Device, index: usize) -> f64 { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_FR == 0 { let bytes_lo = device.cpu.cop1.fgr32[index & !1]; let bytes_hi = device.cpu.cop1.fgr32[(index & !1) + 1]; - return f64::from_ne_bytes([bytes_lo, bytes_hi].concat().try_into().unwrap()); + f64::from_ne_bytes([bytes_lo, bytes_hi].concat().try_into().unwrap()) } else { - return f64::from_ne_bytes(device.cpu.cop1.fgr64[index]); + f64::from_ne_bytes(device.cpu.cop1.fgr64[index]) } } diff --git a/src/device/cpu.rs b/src/device/cpu.rs index 3d01ca9..08205ff 100644 --- a/src/device/cpu.rs +++ b/src/device/cpu.rs @@ -36,7 +36,7 @@ pub struct Cpu { pub next_event: usize, } -pub fn decode_opcode(device: &mut device::Device, opcode: u32) -> fn(&mut device::Device, u32) { +pub fn decode_opcode(device: &device::Device, opcode: u32) -> fn(&mut device::Device, u32) { match opcode >> 26 { 0 => device.cpu.special_instrs[(opcode & 0x3F) as usize], // SPECIAL 1 => device.cpu.regimm_instrs[((opcode >> 16) & 0x1F) as usize], // REGIMM @@ -221,13 +221,13 @@ pub fn init(device: &mut device::Device) { device::cop2::init(device); } -pub fn in_delay_slot(device: &mut device::Device) -> bool { - return device.cpu.branch_state.state == State::DelaySlotTaken - || device.cpu.branch_state.state == State::DelaySlotNotTaken; +pub fn in_delay_slot(device: &device::Device) -> bool { + device.cpu.branch_state.state == State::DelaySlotTaken + || device.cpu.branch_state.state == State::DelaySlotNotTaken } -pub fn in_delay_slot_taken(device: &mut device::Device) -> bool { - return device.cpu.branch_state.state == State::DelaySlotTaken; +pub fn in_delay_slot_taken(device: &device::Device) -> bool { + device.cpu.branch_state.state == State::DelaySlotTaken } pub fn run(device: &mut device::Device) { diff --git a/src/device/cpu_instructions.rs b/src/device/cpu_instructions.rs index 9b6531a..36875ab 100644 --- a/src/device/cpu_instructions.rs +++ b/src/device/cpu_instructions.rs @@ -1,51 +1,51 @@ use crate::device; pub fn rd(opcode: u32) -> u32 { - return (opcode >> 11) & 0x1F; + (opcode >> 11) & 0x1F } pub fn rs(opcode: u32) -> u32 { - return (opcode >> 21) & 0x1F; + (opcode >> 21) & 0x1F } pub fn rt(opcode: u32) -> u32 { - return (opcode >> 16) & 0x1F; + (opcode >> 16) & 0x1F } pub fn sa(opcode: u32) -> u32 { - return (opcode >> 6) & 0x1F; + (opcode >> 6) & 0x1F } pub fn imm(opcode: u32) -> u16 { - return opcode as u16; + opcode as u16 } pub fn se32(value: i32) -> u64 { - return value as i64 as u64; + value as i64 as u64 } pub fn se16(value: i16) -> u64 { - return value as i64 as u64; + value as i64 as u64 } pub fn se8(value: i8) -> u64 { - return value as i64 as u64; + value as i64 as u64 } pub fn bshift>(address: T) -> u64 { - return ((address.into() & 3) ^ 3) << 3; + ((address.into() & 3) ^ 3) << 3 } pub fn hshift>(address: T) -> u64 { - return ((address.into() & 2) ^ 2) << 3; + ((address.into() & 2) ^ 2) << 3 } pub fn bits_below_mask>(x: T) -> u64 { - return (1 << x.into()) - 1; + (1 << x.into()) - 1 } pub fn bits_above_mask>(x: T) -> u64 { - return !bits_below_mask(x); + !bits_below_mask(x) } pub fn check_relative_idle_loop(device: &mut device::Device, opcode: u32) { @@ -228,6 +228,7 @@ pub fn ldl(device: &mut device::Device, opcode: u32) { let addr = device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)); let n = addr & 7; let shift = 8 * n; + let mask = bits_below_mask(8 * n); let (mut phys_address, cached, err) = @@ -258,12 +259,12 @@ pub fn ldr(device: &mut device::Device, opcode: u32) { let addr = device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)); let n = addr & 7; let shift = 8 * (7 - n); - let mask; - if n == 7 { - mask = 0 + + let mask = if n == 7 { + 0 } else { - mask = bits_above_mask(8 * (n + 1)) - } + bits_above_mask(8 * (n + 1)) + }; let (mut phys_address, cached, err) = device::memory::translate_address(device, addr, device::memory::AccessType::Read); @@ -333,6 +334,7 @@ pub fn lwl(device: &mut device::Device, opcode: u32) { let addr = device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)); let n = addr & 3; let shift = 8 * n; + let mask = bits_below_mask(8 * n) as u32; let (mut phys_address, cached, err) = @@ -413,12 +415,12 @@ pub fn lwr(device: &mut device::Device, opcode: u32) { let addr = device.cpu.gpr[rs(opcode) as usize].wrapping_add(se16(imm(opcode) as i16)); let n = addr & 3; let shift = 8 * (3 - n); - let mask; - if n == 3 { - mask = 0 + + let mask = if n == 3 { + 0 } else { - mask = bits_above_mask(8 * (n + 1)) - } + bits_above_mask(8 * (n + 1)) + }; let (mut phys_address, cached, err) = device::memory::translate_address(device, addr, device::memory::AccessType::Read); @@ -503,12 +505,11 @@ pub fn swl(device: &mut device::Device, opcode: u32) { let n = addr & 3; let shift = 8 * n; - let mask; - if n == 0 { - mask = u32::MAX + let mask = if n == 0 { + u32::MAX } else { - mask = bits_below_mask(8 * (4 - n)) as u32 - } + bits_below_mask(8 * (4 - n)) as u32 + }; let (mut phys_address, cached, err) = device::memory::translate_address(device, addr, device::memory::AccessType::Write); @@ -550,12 +551,11 @@ pub fn sdl(device: &mut device::Device, opcode: u32) { let n = addr & 7; let shift = 8 * n; - let mask; - if n == 0 { - mask = u64::MAX + let mask = if n == 0 { + u64::MAX } else { - mask = bits_below_mask(8 * (8 - n)) - } + bits_below_mask(8 * (8 - n)) + }; let (mut phys_address, cached, err) = device::memory::translate_address(device, addr, device::memory::AccessType::Write); @@ -758,10 +758,10 @@ pub fn cache(device: &mut device::Device, opcode: u32) { } 0x19 => { //dcache hit write back - if device::cache::dcache_hit(device, dcache_line, phys_address) { - if device.memory.dcache[dcache_line].dirty { - device::cache::dcache_writeback(device, dcache_line) - } + if device::cache::dcache_hit(device, dcache_line, phys_address) + && device.memory.dcache[dcache_line].dirty + { + device::cache::dcache_writeback(device, dcache_line) } } _ => { diff --git a/src/device/events.rs b/src/device/events.rs index ee5e850..b425716 100644 --- a/src/device/events.rs +++ b/src/device/events.rs @@ -30,7 +30,7 @@ pub fn create_event( device.cpu.events[name as usize] = Event { enabled: true, count: when, - handler: handler, + handler, }; set_next_event(device); } @@ -39,7 +39,7 @@ pub fn get_event(device: &mut device::Device, name: EventType) -> Option<&mut Ev if device.cpu.events[name as usize].enabled { return Some(&mut device.cpu.events[name as usize]); } - return None; + None } pub fn remove_event(device: &mut device::Device, name: EventType) { diff --git a/src/device/fpu_instructions.rs b/src/device/fpu_instructions.rs index 8350bce..007a18c 100644 --- a/src/device/fpu_instructions.rs +++ b/src/device/fpu_instructions.rs @@ -1,15 +1,15 @@ use crate::device; pub fn fs(opcode: u32) -> u32 { - return (opcode >> 11) & 0x1F; + (opcode >> 11) & 0x1F } pub fn ft(opcode: u32) -> u32 { - return (opcode >> 16) & 0x1F; + (opcode >> 16) & 0x1F } pub fn fd(opcode: u32) -> u32 { - return (opcode >> 6) & 0x1F; + (opcode >> 6) & 0x1F } pub fn bc1f(device: &mut device::Device, opcode: u32) { diff --git a/src/device/is_viewer.rs b/src/device/is_viewer.rs index 6c05766..0f8767b 100644 --- a/src/device/is_viewer.rs +++ b/src/device/is_viewer.rs @@ -8,11 +8,11 @@ pub fn read_mem( _access_size: device::memory::AccessSize, ) -> u32 { let masked_address = address as usize & IS_VIEWER_MASK; - return u32::from_be_bytes( + u32::from_be_bytes( device.cart.is_viewer_buffer[masked_address..masked_address + 4] .try_into() .unwrap(), - ); + ) } pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { @@ -20,7 +20,7 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 if masked_address == 0x14 { let length = (value & mask) as u64; let data = std::str::from_utf8( - &device.cart.is_viewer_buffer[0x20 as usize..(0x20 + length) as usize], + &device.cart.is_viewer_buffer[0x20_usize..(0x20 + length) as usize], ) .unwrap(); print!("{}", data); diff --git a/src/device/memory.rs b/src/device/memory.rs index 829f1f8..4aebc40 100644 --- a/src/device/memory.rs +++ b/src/device/memory.rs @@ -17,7 +17,7 @@ pub const MM_SI_REGS: usize = 0x04800000; pub const MM_DOM2_ADDR2: usize = 0x08000000; pub const MM_CART_ROM: usize = 0x10000000; pub const MM_PIF_MEM: usize = 0x1fc00000; -pub const MM_DOM1_ADDR3: usize = 0x1fd00000; +//pub const MM_DOM1_ADDR3: usize = 0x1fd00000; pub const MM_IS_VIEWER: usize = 0x13ff0000; #[derive(PartialEq)] @@ -62,7 +62,7 @@ pub fn translate_address( } else if address & 0x20000000 == 0 { cached = true; } - return (address & 0x1FFFFFFF, cached, false); + (address & 0x1FFFFFFF, cached, false) } pub fn data_read( @@ -74,11 +74,11 @@ pub fn data_read( if cached { device::cache::dcache_read(device, phys_address) } else { - return device.memory.memory_map_read[(phys_address >> 16) as usize]( + device.memory.memory_map_read[(phys_address >> 16) as usize]( device, phys_address, access_size, - ); + ) } } @@ -103,14 +103,14 @@ pub fn data_write( pub fn init(device: &mut device::Device) { for i in 0..0x2000 { - if i >= MM_RDRAM_DRAM >> 16 && i <= (MM_RDRAM_DRAM + 0x03EFFFFF) >> 16 { + if (MM_RDRAM_DRAM >> 16..=(MM_RDRAM_DRAM + 0x03EFFFFF) >> 16).contains(&i) { device.memory.fast_read[i] = device::rdram::read_mem_fast; device.memory.memory_map_read[i] = device::rdram::read_mem; device.memory.memory_map_write[i] = device::rdram::write_mem; - } else if i >= MM_RDRAM_REGS >> 16 && i <= (MM_RDRAM_REGS + 0xFFFFF) >> 16 { + } else if (MM_RDRAM_REGS >> 16..=(MM_RDRAM_REGS + 0xFFFFF) >> 16).contains(&i) { device.memory.memory_map_read[i] = device::rdram::read_regs; device.memory.memory_map_write[i] = device::rdram::write_regs; - } else if i >= MM_RSP_MEM >> 16 && i <= (MM_RSP_MEM + 0x3FFFF) >> 16 { + } else if (MM_RSP_MEM >> 16..=(MM_RSP_MEM + 0x3FFFF) >> 16).contains(&i) { device.memory.fast_read[i] = device::rsp_interface::read_mem_fast; device.memory.memory_map_read[i] = device::rsp_interface::read_mem; device.memory.memory_map_write[i] = device::rsp_interface::write_mem; @@ -144,7 +144,7 @@ pub fn init(device: &mut device::Device) { } else if i >= MM_SI_REGS >> 16 && i <= (MM_SI_REGS + 0xFFFF) >> 16 { device.memory.memory_map_read[i] = device::si::read_regs; device.memory.memory_map_write[i] = device::si::write_regs; - } else if i >= MM_DOM2_ADDR2 >> 16 && i <= (MM_DOM2_ADDR2 + 0x1FFFF) >> 16 { + } else if (MM_DOM2_ADDR2 >> 16..=(MM_DOM2_ADDR2 + 0x1FFFF) >> 16).contains(&i) { device.memory.memory_map_read[i] = device::sram::read_mem; device.memory.memory_map_write[i] = device::sram::write_mem; } else if i >= MM_CART_ROM >> 16 && i <= (MM_CART_ROM + device.cart.rom.len() - 1) >> 16 { diff --git a/src/device/mempak.rs b/src/device/mempak.rs index fe2902b..222cd91 100644 --- a/src/device/mempak.rs +++ b/src/device/mempak.rs @@ -42,17 +42,17 @@ pub fn format_mempak(device: &mut device::Device) { /* Fill INODE page 1 and update it's checkum */ let start_page = 5; - for i in 1 * MPK_PAGE_SIZE..2 * start_page { + for i in MPK_PAGE_SIZE..2 * start_page { device.ui.saves.mempak.0[offset + i] = 0; } - for i in (1 * MPK_PAGE_SIZE + 2 * start_page..2 * MPK_PAGE_SIZE).step_by(2) { - device.ui.saves.mempak.0[offset + i + 0] = 0x00; + for i in (MPK_PAGE_SIZE + 2 * start_page..2 * MPK_PAGE_SIZE).step_by(2) { + device.ui.saves.mempak.0[offset + i] = 0x00; device.ui.saves.mempak.0[offset + i + 1] = 0x03; } - device.ui.saves.mempak.0[offset + (1 * MPK_PAGE_SIZE + 1)] = 0x71; + device.ui.saves.mempak.0[offset + (MPK_PAGE_SIZE + 1)] = 0x71; /* Page 2 is identical to page 1 */ - let page1 = offset + 1 * MPK_PAGE_SIZE; + let page1 = offset + MPK_PAGE_SIZE; let page2 = offset + 2 * MPK_PAGE_SIZE; let page1data = device.ui.saves.mempak.0[page1..page1 + MPK_PAGE_SIZE].to_vec(); device.ui.saves.mempak.0[page2..page2 + MPK_PAGE_SIZE].copy_from_slice(&page1data); diff --git a/src/device/mi.rs b/src/device/mi.rs index be58643..e277b9e 100644 --- a/src/device/mi.rs +++ b/src/device/mi.rs @@ -53,7 +53,7 @@ pub fn read_regs( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { - return device.mi.regs[((address & 0xFFFF) >> 2) as usize]; + device.mi.regs[((address & 0xFFFF) >> 2) as usize] } pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { diff --git a/src/device/pi.rs b/src/device/pi.rs index 13fac55..7f59cdc 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -41,14 +41,10 @@ pub fn read_regs( ) -> u32 { let reg = (address & 0xFFFF) >> 2; match reg as u32 { - PI_WR_LEN_REG | PI_RD_LEN_REG => { - return 0x7F; - } - PI_CART_ADDR_REG => return device.pi.regs[reg as usize] & 0xFFFFFFFE, - PI_DRAM_ADDR_REG => return device.pi.regs[reg as usize] & 0xFFFFFE, - _ => { - return device.pi.regs[reg as usize]; - } + PI_WR_LEN_REG | PI_RD_LEN_REG => 0x7F, + PI_CART_ADDR_REG => device.pi.regs[reg as usize] & 0xFFFFFFFE, + PI_DRAM_ADDR_REG => device.pi.regs[reg as usize] & 0xFFFFFE, + _ => device.pi.regs[reg as usize], } } @@ -121,21 +117,15 @@ pub fn get_handler(address: u32) -> PiHandler { write: device::cart_rom::dma_write, }; if address >= device::memory::MM_CART_ROM as u32 { - if address >= device::memory::MM_DOM1_ADDR3 as u32 { - // this should result in all 0's being read/written - handler.read = device::cart_rom::dma_read; - handler.write = device::cart_rom::dma_write; - } else { - handler.read = device::cart_rom::dma_read; - handler.write = device::cart_rom::dma_write; - } + handler.read = device::cart_rom::dma_read; + handler.write = device::cart_rom::dma_write; } else if address >= device::memory::MM_DOM2_ADDR2 as u32 { handler.read = device::sram::dma_read; handler.write = device::sram::dma_write; } else { panic!("unknown pi handler") } - return handler; + handler } pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { @@ -166,7 +156,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } } -pub fn calculate_cycles(device: &mut device::Device, domain: i32, length: u32) -> u64 { +pub fn calculate_cycles(device: &device::Device, domain: i32, length: u32) -> u64 { let mut cycles: f64 = 0.0; let (page_size, latency, pulse_width, release, pages); let page_size_base: f64 = 2.0; @@ -189,7 +179,7 @@ pub fn calculate_cycles(device: &mut device::Device, domain: i32, length: u32) - cycles += (14.0 + latency) * pages; cycles += (pulse_width + release) * (length as f64 / 2.0); cycles += 5.0 * pages; - return (cycles * 1.5) as u64; // Converting RCP clock speed to CPU clock speed + (cycles * 1.5) as u64 // Converting RCP clock speed to CPU clock speed } pub fn dma_event(device: &mut device::Device) { diff --git a/src/device/pif.rs b/src/device/pif.rs index 69b0960..a10be7e 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -30,23 +30,21 @@ pub fn read_mem( ) -> u32 { device::cop0::add_cycles(device, 3000); //based on https://github.com/rasky/n64-systembench - let value; let mut masked_address = address as usize & PIF_MASK; if masked_address < PIF_RAM_OFFSET { - value = u32::from_be_bytes( + u32::from_be_bytes( device.pif.rom[masked_address..masked_address + 4] .try_into() .unwrap(), - ); + ) } else { masked_address -= PIF_RAM_OFFSET; - value = u32::from_be_bytes( + u32::from_be_bytes( device.pif.ram[masked_address..masked_address + 4] .try_into() .unwrap(), - ); + ) } - return value; } pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { @@ -76,7 +74,7 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 pub fn process_channel(device: &mut device::Device, channel: usize) -> usize { /* don't process channel if it has been disabled */ - if device.pif.channels[channel].tx == None { + if device.pif.channels[channel].tx.is_none() { return 0; } @@ -85,7 +83,7 @@ pub fn process_channel(device: &mut device::Device, channel: usize) -> usize { device.pif.ram[device.pif.channels[channel].rx.unwrap()] &= 0x3f; /* set NoResponse if no device is connected */ - if device.pif.channels[channel].process == None { + if device.pif.channels[channel].process.is_none() { device.pif.ram[device.pif.channels[channel].rx.unwrap()] |= 0x80; return 0; } @@ -93,7 +91,7 @@ pub fn process_channel(device: &mut device::Device, channel: usize) -> usize { /* do device processing */ let process_handler = device.pif.channels[channel].process.unwrap(); process_handler(device, channel); - return 1; + 1 } pub fn update_pif_ram(device: &mut device::Device) -> u64 { @@ -101,7 +99,7 @@ pub fn update_pif_ram(device: &mut device::Device) -> u64 { for k in 0..PIF_CHANNELS_COUNT { active_channels += process_channel(device, k) } - return (24000 + (active_channels * 28000)) as u64; + (24000 + (active_channels * 28000)) as u64 } pub fn disable_pif_channel(channel: &mut PifChannel) { @@ -122,7 +120,7 @@ pub fn setup_pif_channel(device: &mut device::Device, channel: usize, buf: usize device.pif.channels[channel].tx_buf = Some(buf + 2); device.pif.channels[channel].rx_buf = Some(buf + 2 + tx as usize); - return (2 + tx + rx) as usize; + (2 + tx + rx) as usize } pub fn setup_channels_format(device: &mut device::Device) { diff --git a/src/device/rdp.rs b/src/device/rdp.rs index fa1dadf..abea28f 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -52,7 +52,7 @@ pub fn read_regs_dpc( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { - return device.rdp.regs_dpc[((address & 0xFFFF) >> 2) as usize]; + device.rdp.regs_dpc[((address & 0xFFFF) >> 2) as usize] } pub fn write_regs_dpc(device: &mut device::Device, address: u64, value: u32, mask: u32) { @@ -108,7 +108,7 @@ pub fn read_regs_dps( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { - return device.rdp.regs_dps[((address & 0xFFFF) >> 2) as usize]; + device.rdp.regs_dps[((address & 0xFFFF) >> 2) as usize] } pub fn write_regs_dps(device: &mut device::Device, address: u64, value: u32, mask: u32) { diff --git a/src/device/rdram.rs b/src/device/rdram.rs index 2e62344..77685d1 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -15,11 +15,11 @@ pub fn read_mem_fast( _access_size: device::memory::AccessSize, ) -> u32 { let masked_address = address as usize & RDRAM_MASK; - return u32::from_ne_bytes( + u32::from_ne_bytes( device.rdram.mem[masked_address..masked_address + 4] .try_into() .unwrap(), - ); + ) } pub fn read_mem( @@ -33,13 +33,13 @@ pub fn read_mem( ); let masked_address = address as usize & RDRAM_MASK; if address < RDRAM_SIZE as u64 { - return u32::from_ne_bytes( + u32::from_ne_bytes( device.rdram.mem[masked_address..masked_address + 4] .try_into() .unwrap(), - ); + ) } else { - return 0; + 0 } } @@ -78,9 +78,9 @@ pub fn init(device: &mut device::Device) -> (*mut u8, usize) { let data: u32 = RDRAM_SIZE as u32; device.rdram.mem[device.cart.rdram_size_offset..device.cart.rdram_size_offset + 4] .copy_from_slice(&data.to_ne_bytes()); - return (ptr, RDRAM_SIZE); + (ptr, RDRAM_SIZE) } pub fn rdram_calculate_cycles(length: u64) -> u64 { - return 31 + (length / 3); // https://hcs64.com/dma.html, https://github.com/rasky/n64-systembench + 31 + (length / 3)// https://hcs64.com/dma.html, https://github.com/rasky/n64-systembench } diff --git a/src/device/ri.rs b/src/device/ri.rs index aff8efc..8a0a77b 100644 --- a/src/device/ri.rs +++ b/src/device/ri.rs @@ -22,7 +22,7 @@ pub fn read_regs( if ((address & 0xFFFF) >> 2) as u32 == RI_SELECT_REG { return 0x14; // hack, skip RDRAM initialization } - return device.ri.regs[((address & 0xFFFF) >> 2) as usize]; + device.ri.regs[((address & 0xFFFF) >> 2) as usize] } pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { diff --git a/src/device/rsp_cpu.rs b/src/device/rsp_cpu.rs index f221e64..9bd52bf 100644 --- a/src/device/rsp_cpu.rs +++ b/src/device/rsp_cpu.rs @@ -54,13 +54,13 @@ pub struct Cpu { pub vec_instrs: [fn(&mut device::Device, u32); 64], } -pub fn in_delay_slot(device: &mut device::Device) -> bool { - return device.rsp.cpu.branch_state.state == device::cpu::State::DelaySlotTaken - || device.rsp.cpu.branch_state.state == device::cpu::State::DelaySlotNotTaken; +pub fn in_delay_slot(device: &device::Device) -> bool { + device.rsp.cpu.branch_state.state == device::cpu::State::DelaySlotTaken + || device.rsp.cpu.branch_state.state == device::cpu::State::DelaySlotNotTaken } -pub fn in_delay_slot_taken(device: &mut device::Device) -> bool { - return device.rsp.cpu.branch_state.state == device::cpu::State::DelaySlotTaken; +pub fn in_delay_slot_taken(device: &device::Device) -> bool { + device.rsp.cpu.branch_state.state == device::cpu::State::DelaySlotTaken } pub fn run(device: &mut device::Device) -> u64 { @@ -127,36 +127,36 @@ pub fn run(device: &mut device::Device) -> u64 { } } } - return (device.rsp.cpu.cycle_counter as f64 * 1.5) as u64; // converting RCP clock to CPU clock + (device.rsp.cpu.cycle_counter as f64 * 1.5) as u64 // converting RCP clock to CPU clock } -pub fn decode_opcode(device: &mut device::Device, opcode: u32) -> fn(&mut device::Device, u32) { +pub fn decode_opcode(device: &device::Device, opcode: u32) -> fn(&mut device::Device, u32) { match opcode >> 26 { 0 => { // SPECIAL - return device.rsp.cpu.special_instrs[(opcode & 0x3F) as usize]; + device.rsp.cpu.special_instrs[(opcode & 0x3F) as usize] } 1 => { // REGIMM - return device.rsp.cpu.regimm_instrs[((opcode >> 16) & 0x1F) as usize]; + device.rsp.cpu.regimm_instrs[((opcode >> 16) & 0x1F) as usize] } 16 => { // COP0 - return device.rsp.cpu.cop0_instrs[((opcode >> 21) & 0x1F) as usize]; + device.rsp.cpu.cop0_instrs[((opcode >> 21) & 0x1F) as usize] } 18 => { // COP2 - return device.rsp.cpu.cop2_instrs[((opcode >> 21) & 0x1F) as usize]; + device.rsp.cpu.cop2_instrs[((opcode >> 21) & 0x1F) as usize] } 50 => { // LWC2 - return device.rsp.cpu.lwc2_instrs[((opcode >> 11) & 0x1F) as usize]; + device.rsp.cpu.lwc2_instrs[((opcode >> 11) & 0x1F) as usize] } 58 => { // SWC2 - return device.rsp.cpu.swc2_instrs[((opcode >> 11) & 0x1F) as usize]; + device.rsp.cpu.swc2_instrs[((opcode >> 11) & 0x1F) as usize] } - _ => return device.rsp.cpu.instrs[(opcode >> 26) as usize], + _ => device.rsp.cpu.instrs[(opcode >> 26) as usize], } } @@ -165,7 +165,7 @@ pub fn init(device: &mut device::Device) { let mut index = 1; while index < 512 { let a = (index + 512) as u64; - let b = ((1 as u64) << 34) / a; + let b = (1_u64 << 34) / a; device.rsp.cpu.reciprocals[index] = ((b + 1) >> 8) as u16; index += 1; } @@ -179,7 +179,7 @@ pub fn init(device: &mut device::Device) { let a = ((index + 512) >> shift) as u64; let mut b = (1 << 17) as u64; //find the largest b where b < 1.0 / sqrt(a) - while a * (b + 1) * (b + 1) < ((1 as u64) << 44) { + while a * (b + 1) * (b + 1) < (1_u64 << 44) { b += 1; } device.rsp.cpu.inverse_square_roots[index] = (b >> 1) as u16; diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index ab99ea7..8d99af3 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -89,11 +89,11 @@ pub fn read_mem_fast( _access_size: device::memory::AccessSize, ) -> u32 { let masked_address = address as usize & RSP_MEM_MASK; - return u32::from_be_bytes( + u32::from_be_bytes( device.rsp.mem[masked_address..masked_address + 4] .try_into() .unwrap(), - ); + ) } pub fn read_mem( @@ -102,11 +102,11 @@ pub fn read_mem( _access_size: device::memory::AccessSize, ) -> u32 { let masked_address = address as usize & RSP_MEM_MASK; - return u32::from_be_bytes( + u32::from_be_bytes( device.rsp.mem[masked_address..masked_address + 4] .try_into() .unwrap(), - ); + ) } pub fn write_mem(device: &mut device::Device, address: u64, value: u32, _mask: u32) { @@ -121,9 +121,9 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, _mask: u if masked_address & 0x1000 != 0 { // imem being updated - device.rsp.cpu.instructions[((masked_address & 0xFFF) / 4) as usize].func = + device.rsp.cpu.instructions[(masked_address & 0xFFF) / 4].func = device::rsp_cpu::decode_opcode(device, data); - device.rsp.cpu.instructions[((masked_address & 0xFFF) / 4) as usize].opcode = data; + device.rsp.cpu.instructions[(masked_address & 0xFFF) / 4].opcode = data; } // SH/SB are broken: They overwrite the whole 32 bit, filling everything that isn't written with zeroes @@ -260,9 +260,9 @@ pub fn read_regs( SP_SEMAPHORE_REG => { let value = device.rsp.regs[reg as usize]; device.rsp.regs[reg as usize] = 1; - return value; + value } - _ => return device.rsp.regs[reg as usize], + _ => device.rsp.regs[reg as usize], } } @@ -292,7 +292,7 @@ pub fn read_regs2( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { - return device.rsp.regs2[((address & 0xFFFF) >> 2) as usize]; + device.rsp.regs2[((address & 0xFFFF) >> 2) as usize] } pub fn write_regs2(device: &mut device::Device, address: u64, value: u32, mask: u32) { diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index 161f15e..3db83ff 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -2,41 +2,41 @@ use crate::device; use std::arch::x86_64::*; pub fn rd(opcode: u32) -> u32 { - return (opcode >> 11) & 0x1F; + (opcode >> 11) & 0x1F } pub fn rs(opcode: u32) -> u32 { - return (opcode >> 21) & 0x1F; + (opcode >> 21) & 0x1F } pub fn rt(opcode: u32) -> u32 { - return (opcode >> 16) & 0x1F; + (opcode >> 16) & 0x1F } pub fn sa(opcode: u32) -> u32 { - return (opcode >> 6) & 0x1F; + (opcode >> 6) & 0x1F } pub fn imm(opcode: u32) -> u16 { - return opcode as u16; + opcode as u16 } pub fn se16(value: i16) -> u32 { - return value as i32 as u32; + value as i32 as u32 } pub fn voffset(opcode: u32) -> u8 { - return (opcode & 0x7F) as u8; + (opcode & 0x7F) as u8 } pub fn velement(opcode: u32) -> u8 { - return ((opcode >> 7) & 0xF) as u8; + ((opcode >> 7) & 0xF) as u8 } pub fn sign_extend_7bit_offset(offset: u8, shift_amount: u32) -> u32 { let soffset = (((offset << 1) & 0x80) | offset) as i8; - return (((soffset) as i32) as u32) << shift_amount; + (((soffset) as i32) as u32) << shift_amount } pub fn modify_vpr_byte(vpr: &mut u128, value: u8, element: u8) { @@ -48,7 +48,7 @@ pub fn modify_vpr_byte(vpr: &mut u128, value: u8, element: u8) { pub fn get_vpr_byte(vpr: u128, element: u8) -> u8 { let pos = 15 - (element & 15); - return (vpr >> (pos * 8)) as u8; + (vpr >> (pos * 8)) as u8 } pub fn modify_vpr_element(vpr: &mut u128, value: u16, element: u8) { @@ -60,7 +60,7 @@ pub fn modify_vpr_element(vpr: &mut u128, value: u16, element: u8) { pub fn get_vpr_element(vpr: u128, element: u8) -> u16 { let pos = 7 - (element & 7); - return (vpr >> (pos * 16)) as u16; + (vpr >> (pos * 16)) as u16 } pub fn j(device: &mut device::Device, opcode: u32) { @@ -70,7 +70,7 @@ pub fn j(device: &mut device::Device, opcode: u32) { device.rsp.cpu.branch_state.state = device::cpu::State::Take; device.rsp.cpu.branch_state.pc = (device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + 4) & 0xF0000000 - | ((opcode & 0x3FFFFFF) << 2) as u32 + | ((opcode & 0x3FFFFFF) << 2) } pub fn jal(device: &mut device::Device, opcode: u32) { @@ -84,7 +84,7 @@ pub fn jal(device: &mut device::Device, opcode: u32) { device.rsp.cpu.branch_state.state = device::cpu::State::Take; device.rsp.cpu.branch_state.pc = (device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + 4) & 0xF0000000 - | ((opcode & 0x3FFFFFF) << 2) as u32 + | ((opcode & 0x3FFFFFF) << 2) } else if !device::rsp_cpu::in_delay_slot(device) { device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; } @@ -191,7 +191,7 @@ pub fn lh(device: &mut device::Device, opcode: u32) { let mut w = [0; 2]; w[0] = device.rsp.mem[address as usize & 0xFFF]; - w[1] = device.rsp.mem[(address as usize + 1) & &0xFFF]; + w[1] = device.rsp.mem[(address as usize + 1) & 0xFFF]; device.rsp.cpu.gpr[rt(opcode) as usize] = (((w[0] as u16) << 8) | w[1] as u16) as i16 as i32 as u32 @@ -203,9 +203,9 @@ pub fn lw(device: &mut device::Device, opcode: u32) { let mut w = [0; 4]; w[0] = device.rsp.mem[address as usize & 0xFFF]; - w[1] = device.rsp.mem[(address as usize + 1) & &0xFFF]; - w[2] = device.rsp.mem[(address as usize + 2) & &0xFFF]; - w[3] = device.rsp.mem[(address as usize + 3) & &0xFFF]; + w[1] = device.rsp.mem[(address as usize + 1) & 0xFFF]; + w[2] = device.rsp.mem[(address as usize + 2) & 0xFFF]; + w[3] = device.rsp.mem[(address as usize + 3) & 0xFFF]; device.rsp.cpu.gpr[rt(opcode) as usize] = (w[0] as u32) << 24 | (w[1] as u32) << 16 | (w[2] as u32) << 8 | (w[3] as u32) @@ -224,7 +224,7 @@ pub fn lhu(device: &mut device::Device, opcode: u32) { let mut w = [0; 2]; w[0] = device.rsp.mem[address as usize & 0xFFF]; - w[1] = device.rsp.mem[(address as usize + 1) & &0xFFF]; + w[1] = device.rsp.mem[(address as usize + 1) & 0xFFF]; device.rsp.cpu.gpr[rt(opcode) as usize] = (((w[0] as u16) << 8) | w[1] as u16) as u32 } @@ -235,9 +235,9 @@ pub fn lwu(device: &mut device::Device, opcode: u32) { let mut w = [0; 4]; w[0] = device.rsp.mem[address as usize & 0xFFF]; - w[1] = device.rsp.mem[(address as usize + 1) & &0xFFF]; - w[2] = device.rsp.mem[(address as usize + 2) & &0xFFF]; - w[3] = device.rsp.mem[(address as usize + 3) & &0xFFF]; + w[1] = device.rsp.mem[(address as usize + 1) & 0xFFF]; + w[2] = device.rsp.mem[(address as usize + 2) & 0xFFF]; + w[3] = device.rsp.mem[(address as usize + 3) & 0xFFF]; device.rsp.cpu.gpr[rt(opcode) as usize] = (w[0] as u32) << 24 | (w[1] as u32) << 16 | (w[2] as u32) << 8 | (w[3] as u32) @@ -274,13 +274,11 @@ pub fn sw(device: &mut device::Device, opcode: u32) { } pub fn sll(device: &mut device::Device, opcode: u32) { - device.rsp.cpu.gpr[rd(opcode) as usize] = - (device.rsp.cpu.gpr[rt(opcode) as usize] as u32) << sa(opcode) + device.rsp.cpu.gpr[rd(opcode) as usize] = device.rsp.cpu.gpr[rt(opcode) as usize] << sa(opcode) } pub fn srl(device: &mut device::Device, opcode: u32) { - device.rsp.cpu.gpr[rd(opcode) as usize] = - (device.rsp.cpu.gpr[rt(opcode) as usize] as u32) >> sa(opcode) + device.rsp.cpu.gpr[rd(opcode) as usize] = device.rsp.cpu.gpr[rt(opcode) as usize] >> sa(opcode) } pub fn sra(device: &mut device::Device, opcode: u32) { @@ -951,37 +949,22 @@ pub fn sfv(device: &mut device::Device, opcode: u32) { let base = address & 7; address &= !7; let element = velement(opcode); - let elements; - match element { - 0 | 15 => { - elements = [0, 1, 2, 3]; - } - 1 => { - elements = [6, 7, 4, 5]; - } - 4 => { - elements = [1, 2, 3, 0]; - } - 5 => { - elements = [7, 4, 5, 6]; - } - 8 => { - elements = [4, 5, 6, 7]; - } - 11 => { - elements = [3, 0, 1, 2]; - } - 12 => { - elements = [5, 6, 7, 4]; - } + let elements = match element { + 0 | 15 => [0, 1, 2, 3], + 1 => [6, 7, 4, 5], + 4 => [1, 2, 3, 0], + 5 => [7, 4, 5, 6], + 8 => [4, 5, 6, 7], + 11 => [3, 0, 1, 2], + 12 => [5, 6, 7, 4], _ => { - device.rsp.mem[((address + ((base + 0) & 15)) & 0xFFF) as usize] = 0; + device.rsp.mem[((address + (base & 15)) & 0xFFF) as usize] = 0; device.rsp.mem[((address + ((base + 4) & 15)) & 0xFFF) as usize] = 0; device.rsp.mem[((address + ((base + 8) & 15)) & 0xFFF) as usize] = 0; device.rsp.mem[((address + ((base + 12) & 15)) & 0xFFF) as usize] = 0; return; } - } + }; let mut offset = 0; let mut i = 0; while i < 4 { diff --git a/src/device/rsp_vu_instructions.rs b/src/device/rsp_vu_instructions.rs index f686244..2e47548 100644 --- a/src/device/rsp_vu_instructions.rs +++ b/src/device/rsp_vu_instructions.rs @@ -2,23 +2,23 @@ use crate::device; use std::arch::x86_64::*; pub fn vt(opcode: u32) -> u32 { - return (opcode >> 16) & 0x1F; + (opcode >> 16) & 0x1F } pub fn ve(opcode: u32) -> u32 { - return (opcode >> 21) & 0xF; + (opcode >> 21) & 0xF } pub fn vs(opcode: u32) -> u32 { - return (opcode >> 11) & 0x1F; + (opcode >> 11) & 0x1F } pub fn vd(opcode: u32) -> u32 { - return (opcode >> 6) & 0x1F; + (opcode >> 6) & 0x1F } pub fn de(opcode: u32) -> u32 { - return (opcode >> 11) & 0x7; + (opcode >> 11) & 0x7 } pub fn clamp_signed_32(value: i32) -> i16 { @@ -28,7 +28,7 @@ pub fn clamp_signed_32(value: i32) -> i16 { if value > 32767 { return 32767; } - return value as i16; + value as i16 } pub fn clamp_signed_64(value: i64) -> i16 { @@ -38,7 +38,7 @@ pub fn clamp_signed_64(value: i64) -> i16 { if value > 32767 { return 32767; } - return value as i16; + value as i16 } pub fn count_leading_zeros(value: u32) -> u32 { @@ -49,13 +49,13 @@ pub fn count_leading_zeros(value: u32) -> u32 { } index -= 1; } - return (31 - index) as u32; + (31 - index) as u32 } pub fn s_clip(x: i64, bits: u32) -> i64 { - let b = (1 as u64) << (bits - 1); + let b = 1_u64 << (bits - 1); let m = b * 2 - 1; - return ((((x as u64) & m) ^ b).wrapping_sub(b)) as i64; + ((((x as u64) & m) ^ b).wrapping_sub(b)) as i64 } pub fn modify_vpr_element(vpr: &mut u128, value: u16, element: u8) { @@ -67,15 +67,15 @@ pub fn modify_vpr_element(vpr: &mut u128, value: u16, element: u8) { pub fn get_vpr_element(vpr: u128, element: u8) -> u16 { let pos = 7 - (element & 7); - return (vpr >> (pos * 16)) as u16; + (vpr >> (pos * 16)) as u16 } -pub fn vte(device: &mut device::Device, vt: u32, index: usize) -> __m128i { +pub fn vte(device: &device::Device, vt: u32, index: usize) -> __m128i { unsafe { - return _mm_shuffle_epi8( + _mm_shuffle_epi8( std::mem::transmute(device.rsp.cpu.vpr[vt as usize]), device.rsp.cpu.shuffle[index], - ); + ) } } @@ -1057,15 +1057,13 @@ pub fn vrcp(device: &mut device::Device, opcode: u32) { pub fn vrcpl(device: &mut device::Device, opcode: u32) { let mut result; let vte = vte(device, vt(opcode), ve(opcode) as usize); - let input; - if device.rsp.cpu.divdp { - input = (device.rsp.cpu.divin as i32) << 16 + let input = if device.rsp.cpu.divdp { + (device.rsp.cpu.divin as i32) << 16 | get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as u16 as i32 } else { - input = get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 - as i32; - } + get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32 + }; let mask = input >> 31; let mut data = input ^ mask; if input > -32768 { @@ -1152,15 +1150,13 @@ pub fn vrsq(device: &mut device::Device, opcode: u32) { pub fn vrsql(device: &mut device::Device, opcode: u32) { let mut result; let vte = vte(device, vt(opcode), ve(opcode) as usize); - let input; - if device.rsp.cpu.divdp { - input = (device.rsp.cpu.divin as i32) << 16 + let input = if device.rsp.cpu.divdp { + (device.rsp.cpu.divin as i32) << 16 | get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as u16 - as i32; + as i32 } else { - input = get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 - as i32; - } + get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32 + }; let mask = input >> 31; let mut data = input ^ mask; if input > -32768 { diff --git a/src/device/si.rs b/src/device/si.rs index 97cab13..2a6663f 100644 --- a/src/device/si.rs +++ b/src/device/si.rs @@ -31,7 +31,7 @@ pub fn read_regs( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { - return device.si.regs[((address & 0xFFFF) >> 2) as usize]; + device.si.regs[((address & 0xFFFF) >> 2) as usize] } pub fn dma_read(device: &mut device::Device) { diff --git a/src/device/sram.rs b/src/device/sram.rs index 108845d..9e54611 100644 --- a/src/device/sram.rs +++ b/src/device/sram.rs @@ -44,17 +44,17 @@ pub fn read_mem_sram(device: &mut device::Device, address: u64) -> u32 { format_sram(device); - return u32::from_be_bytes( + u32::from_be_bytes( device.ui.saves.sram.0[masked_address..masked_address + 4] .try_into() .unwrap(), - ); + ) } -pub fn read_mem_flash(device: &mut device::Device, address: u64) -> u32 { +pub fn read_mem_flash(device: &device::Device, address: u64) -> u32 { if (address & 0x1ffff) == 0x00000 && device.flashram.mode == FlashramMode::Status { /* read Status register */ - return device.flashram.status; + device.flashram.status } else if (address & 0x1ffff) == 0x0000 && device.flashram.mode == FlashramMode::ReadArray { /* flashram MMIO read are not supported except for the "dummy" read @0x0000 done before DMA. * returns a "dummy" value. */ @@ -74,9 +74,9 @@ pub fn read_mem( device::cop0::add_cycles(device, cycles); if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { - return read_mem_sram(device, address); + read_mem_sram(device, address) } else { - return read_mem_flash(device, address); + read_mem_flash(device, address) } } @@ -175,7 +175,7 @@ pub fn dma_read(device: &mut device::Device, cart_addr: u32, dram_addr: u32, len } else { dma_read_flash(device, cart_addr, dram_addr, length) } - return device::pi::calculate_cycles(device, 2, length); + device::pi::calculate_cycles(device, 2, length) } pub fn dma_write_sram( @@ -248,7 +248,7 @@ pub fn dma_write(device: &mut device::Device, cart_addr: u32, dram_addr: u32, le } else { dma_write_flash(device, cart_addr, dram_addr, length) } - return device::pi::calculate_cycles(device, 2, length); + device::pi::calculate_cycles(device, 2, length) } pub fn flashram_command(device: &mut device::Device, command: u32) { @@ -272,7 +272,7 @@ pub fn flashram_command(device: &mut device::Device, command: u32) { if device.flashram.mode == FlashramMode::SectorErase { let offset: usize = (device.flashram.erase_page & 0xff80) as usize * 128; for i in 0..128 * 128 { - device.ui.saves.flash.0[offset as usize + i] = 0xFF; + device.ui.saves.flash.0[offset + i] = 0xFF; } device.ui.saves.flash.1 = true } else if device.flashram.mode == FlashramMode::ChipErase { @@ -297,8 +297,7 @@ pub fn flashram_command(device: &mut device::Device, command: u32) { /* program selected page */ let offset: usize = (command & 0xffff) as usize * 128; for i in 0..128 { - device.ui.saves.flash.0[(offset + i) as usize] = - device.flashram.page_buf[i as usize]; + device.ui.saves.flash.0[offset + i] = device.flashram.page_buf[i]; } device.ui.saves.flash.1 = true; diff --git a/src/device/tlb.rs b/src/device/tlb.rs index 8574c8c..a84e7e4 100644 --- a/src/device/tlb.rs +++ b/src/device/tlb.rs @@ -35,7 +35,7 @@ pub fn read(device: &mut device::Device, index: u64) { return; } device.cpu.cop0.regs[device::cop0::COP0_PAGEMASK_REG as usize] = - (device.cpu.cop0.tlb_entries[index as usize].mask << 13) as u64; + device.cpu.cop0.tlb_entries[index as usize].mask << 13; device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] = (device.cpu.cop0.tlb_entries[index as usize].region as u64) << 62 @@ -136,10 +136,8 @@ pub fn probe(device: &mut device::Device) { if e.region != (device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] >> 62) as u8 { continue; } - if e.g == 0 { - if e.asid != device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] as u8 { - continue; - } + if e.g == 0 && e.asid != device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] as u8 { + continue; } device.cpu.cop0.regs[device::cop0::COP0_INDEX_REG as usize] = pos as u64; break; @@ -187,51 +185,43 @@ pub fn tlb_unmap(device: &mut device::Device, index: u64) { pub fn tlb_map(device: &mut device::Device, index: u64) { let e = &mut device.cpu.cop0.tlb_entries[index as usize]; - if e.v_even != 0 { - if e.start_even < e.end_even - && !(e.start_even >= 0x80000000 && e.end_even < 0xC0000000) - && e.phys_even < 0x20000000 - { + if e.v_even != 0 && e.start_even < e.end_even + && !(e.start_even >= 0x80000000 && e.end_even < 0xC0000000) && e.phys_even < 0x20000000 { + let mut i = e.start_even; + while i < e.end_even { + device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].address = + 0x80000000 | (e.phys_even + (i - e.start_even) + 0xFFF); + device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].cached = e.c_even != 2; + i += 0x1000 + } + if e.d_even != 0 { let mut i = e.start_even; while i < e.end_even { - device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].address = - 0x80000000 | (e.phys_even + (i - e.start_even) + 0xFFF) as u64; - device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].cached = e.c_even != 2; + device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].address = + 0x80000000 | (e.phys_even + (i - e.start_even) + 0xFFF); + device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].cached = e.c_even != 2; i += 0x1000 } - if e.d_even != 0 { - let mut i = e.start_even; - while i < e.end_even { - device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].address = - 0x80000000 | (e.phys_even + (i - e.start_even) + 0xFFF) as u64; - device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].cached = e.c_even != 2; - i += 0x1000 - } - } } } - if e.v_odd != 0 { - if e.start_odd < e.end_odd - && !(e.start_odd >= 0x80000000 && e.end_odd < 0xC0000000) - && e.phys_odd < 0x20000000 - { + if e.v_odd != 0 && e.start_odd < e.end_odd + && !(e.start_odd >= 0x80000000 && e.end_odd < 0xC0000000) && e.phys_odd < 0x20000000 { + let mut i = e.start_odd; + while i < e.end_odd { + device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].address = + 0x80000000 | (e.phys_odd + (i - e.start_odd) + 0xFFF); + device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].cached = e.c_odd != 2; + i += 0x1000 + } + if e.d_odd != 0 { let mut i = e.start_odd; while i < e.end_odd { - device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].address = - 0x80000000 | (e.phys_odd + (i - e.start_odd) + 0xFFF) as u64; - device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].cached = e.c_odd != 2; + device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].address = + 0x80000000 | (e.phys_odd + (i - e.start_odd) + 0xFFF); + device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].cached = e.c_odd != 2; i += 0x1000 } - if e.d_odd != 0 { - let mut i = e.start_odd; - while i < e.end_odd { - device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].address = - 0x80000000 | (e.phys_odd + (i - e.start_odd) + 0xFFF) as u64; - device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].cached = e.c_odd != 2; - i += 0x1000 - } - } } } } @@ -252,18 +242,16 @@ pub fn get_physical_address( false, ); } - } else { - if device.cpu.cop0.tlb_lut_r[(address >> 12) as usize].address != 0 { - return ( - (device.cpu.cop0.tlb_lut_r[(address >> 12) as usize].address & 0x1FFFF000) - | (address & 0xFFF), - device.cpu.cop0.tlb_lut_r[(address >> 12) as usize].cached, - false, - ); - } + } else if device.cpu.cop0.tlb_lut_r[(address >> 12) as usize].address != 0 { + return ( + (device.cpu.cop0.tlb_lut_r[(address >> 12) as usize].address & 0x1FFFF000) + | (address & 0xFFF), + device.cpu.cop0.tlb_lut_r[(address >> 12) as usize].cached, + false, + ); } device::exceptions::tlb_miss_exception(device, address, access_type); - return (0, false, true); + (0, false, true) } diff --git a/src/device/unmapped.rs b/src/device/unmapped.rs index 26b49d9..520648b 100644 --- a/src/device/unmapped.rs +++ b/src/device/unmapped.rs @@ -6,7 +6,7 @@ pub fn read_mem( _access_size: device::memory::AccessSize, ) -> u32 { let value = (address & 0xFFFF) as u32; - return value | (value << 16); + value | (value << 16) } pub fn write_mem(_device: &mut device::Device, _address: u64, _value: u32, _mask: u32) {} diff --git a/src/device/vi.rs b/src/device/vi.rs index 2007aa9..7bef6d7 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -46,7 +46,7 @@ pub fn set_expected_refresh_rate(device: &mut device::Device) { } pub fn set_vertical_interrupt(device: &mut device::Device) { - if device::events::get_event(device, device::events::EventType::VI) == None { + if device::events::get_event(device, device::events::EventType::VI).is_none() { device::events::create_event( device, device::events::EventType::VI, @@ -59,7 +59,7 @@ pub fn set_vertical_interrupt(device: &mut device::Device) { pub fn set_current_line(device: &mut device::Device) { let delay = device.vi.delay; let next_vi = device::events::get_event(device, device::events::EventType::VI); - if next_vi != None { + if next_vi.is_some() { device.vi.regs[VI_CURRENT_REG as usize] = ((delay - (next_vi.unwrap().count - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize])) @@ -85,7 +85,7 @@ pub fn read_regs( if reg as u32 == VI_CURRENT_REG { set_current_line(device) } - return device.vi.regs[reg as usize]; + device.vi.regs[reg as usize] } pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { @@ -158,7 +158,7 @@ pub fn init(device: &mut device::Device) { */ } -pub fn speed_limiter(device: &mut device::Device) { +pub fn speed_limiter(device: &device::Device) { let result = device.vi.limiter.as_ref().unwrap().check(); if result.is_err() { let outcome = result.unwrap_err(); diff --git a/src/main.rs b/src/main.rs index 4b692ad..435a0ef 100644 --- a/src/main.rs +++ b/src/main.rs @@ -59,7 +59,7 @@ fn swap_rom(contents: Vec) -> Vec { let test = u32::from_be_bytes(contents[0..4].try_into().unwrap()); if test == 0x80371240 { // z64 - return contents; + contents } else if test == 0x37804012 { // v64 let mut data: Vec = vec![0; contents.len()]; @@ -128,7 +128,7 @@ fn get_rom_contents(file_path: &std::path::Path) -> Vec { contents = fs::read(file_path).expect("Should have been able to read the file"); } - return swap_rom(contents); + swap_rom(contents) } fn main() { @@ -141,13 +141,13 @@ fn main() { } if args.port.is_some() { let port = args.port.unwrap(); - if port < 1 || port > 4 { + if !(1..=4).contains(&port) { println!("Port must be betwen 1 and 4"); return; } } if args.list_controllers { - ui::input::list_controllers(&mut device.ui); + ui::input::list_controllers(&device.ui); return; } if args.assign_controller.is_some() { diff --git a/src/ui.rs b/src/ui.rs index e8176ca..b65433e 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -29,7 +29,7 @@ impl Drop for Ui { } } -fn write_config(ui: &mut Ui) { +fn write_config(ui: &Ui) { let f = std::fs::File::create(ui.config_file_path.clone()).unwrap(); serde_json::to_writer_pretty(f, &ui.config).unwrap(); } @@ -74,7 +74,7 @@ impl Ui { joystick: None, }, ], - config_file_path: config_file_path, + config_file_path, config: config_map, save_type: vec![], game_id: String::new(), diff --git a/src/ui/config.rs b/src/ui/config.rs index 4514d0b..0514ab3 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -34,7 +34,7 @@ impl Config { "default".to_string(), ], controller_assignment: [None, None, None, None], - input_profiles: input_profiles, + input_profiles, }, } } diff --git a/src/ui/input.rs b/src/ui/input.rs index efefccb..d91adc2 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -66,16 +66,16 @@ pub fn set_axis_from_joystick( if profile.joystick_axis[AXIS_DOWN].0 { let axis_position = joystick.axis(profile.joystick_axis[AXIS_DOWN].1).unwrap(); if axis_position as isize * profile.joystick_axis[AXIS_DOWN].2 as isize > 0 { - y = (axis_position as f64 * MAX_AXIS_VALUE as f64 / i16::MAX as f64).neg(); + y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); } } if profile.joystick_axis[AXIS_UP].0 { let axis_position = joystick.axis(profile.joystick_axis[AXIS_UP].1).unwrap(); if axis_position as isize * profile.joystick_axis[AXIS_UP].2 as isize > 0 { - y = (axis_position as f64 * MAX_AXIS_VALUE as f64 / i16::MAX as f64).neg(); + y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); } } - return (x, y); + (x, y) } pub fn set_axis_from_controller( @@ -103,17 +103,17 @@ pub fn set_axis_from_controller( let axis_position = controller.axis(std::mem::transmute(profile.controller_axis[AXIS_DOWN].1)); if axis_position as isize * profile.controller_axis[AXIS_DOWN].2 as isize > 0 { - y = (axis_position as f64 * MAX_AXIS_VALUE as f64 / i16::MAX as f64).neg(); + y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); } } if profile.controller_axis[AXIS_UP].0 { let axis_position = controller.axis(std::mem::transmute(profile.controller_axis[AXIS_UP].1)); if axis_position as isize * profile.controller_axis[AXIS_UP].2 as isize > 0 { - y = (axis_position as f64 * MAX_AXIS_VALUE as f64 / i16::MAX as f64).neg(); + y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); } } - return (x, y); + (x, y) } } @@ -124,27 +124,27 @@ pub fn set_axis_from_keys( unsafe { let mut x = 0.0; let mut y = 0.0; - if profile.keys[AXIS_LEFT].0 { - if keyboard_state.is_scancode_pressed(std::mem::transmute(profile.keys[AXIS_LEFT].1)) { - x = -MAX_AXIS_VALUE - } + if profile.keys[AXIS_LEFT].0 + && keyboard_state.is_scancode_pressed(std::mem::transmute(profile.keys[AXIS_LEFT].1)) + { + x = -MAX_AXIS_VALUE } - if profile.keys[AXIS_RIGHT].0 { - if keyboard_state.is_scancode_pressed(std::mem::transmute(profile.keys[AXIS_RIGHT].1)) { - x = MAX_AXIS_VALUE - } + if profile.keys[AXIS_RIGHT].0 + && keyboard_state.is_scancode_pressed(std::mem::transmute(profile.keys[AXIS_RIGHT].1)) + { + x = MAX_AXIS_VALUE } - if profile.keys[AXIS_DOWN].0 { - if keyboard_state.is_scancode_pressed(std::mem::transmute(profile.keys[AXIS_DOWN].1)) { - y = -MAX_AXIS_VALUE - } + if profile.keys[AXIS_DOWN].0 + && keyboard_state.is_scancode_pressed(std::mem::transmute(profile.keys[AXIS_DOWN].1)) + { + y = -MAX_AXIS_VALUE } - if profile.keys[AXIS_UP].0 { - if keyboard_state.is_scancode_pressed(std::mem::transmute(profile.keys[AXIS_UP].1)) { - y = MAX_AXIS_VALUE - } + if profile.keys[AXIS_UP].0 + && keyboard_state.is_scancode_pressed(std::mem::transmute(profile.keys[AXIS_UP].1)) + { + y = MAX_AXIS_VALUE } - return (x, y); + (x, y) } } @@ -160,25 +160,20 @@ pub fn set_buttons_from_joystick( } let profile_joystick_hat = profile.joystick_hat[i]; - if profile_joystick_hat.0 { - if joystick.hat(profile_joystick_hat.1).unwrap() + if profile_joystick_hat.0 + && joystick.hat(profile_joystick_hat.1).unwrap() == unsafe { std::mem::transmute(profile_joystick_hat.2) } - { - *keys |= 1 << i; - } + { + *keys |= 1 << i; } let profile_joystick_axis = profile.joystick_axis[i]; if profile_joystick_axis.0 { - let axis_position = unsafe { - joystick - .axis(std::mem::transmute(profile_joystick_axis.1)) - .unwrap() - }; - if axis_position as isize * profile_joystick_axis.2 as isize > 0 { - if axis_position.saturating_abs() > i16::MAX / 2 { - *keys |= 1 << i; - } + let axis_position = joystick.axis(profile_joystick_axis.1).unwrap(); + if axis_position as isize * profile_joystick_axis.2 as isize > 0 + && axis_position.saturating_abs() > i16::MAX / 2 + { + *keys |= 1 << i; } } } @@ -201,10 +196,10 @@ pub fn set_buttons_from_controller( if profile_controller_axis.0 { let axis_position = unsafe { controller.axis(std::mem::transmute(profile_controller_axis.1)) }; - if axis_position as isize * profile_controller_axis.2 as isize > 0 { - if axis_position.saturating_abs() > i16::MAX / 2 { - *keys |= 1 << i; - } + if axis_position as isize * profile_controller_axis.2 as isize > 0 + && axis_position.saturating_abs() > i16::MAX / 2 + { + *keys |= 1 << i; } } } @@ -220,7 +215,7 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> u32 { let controller = &ui.controllers[channel].game_controller; let joystick = &ui.controllers[channel].joystick; for i in 0..14 { - if profile_name != "default" || (channel == 0 && profile_name == "default") { + if profile_name != "default" || channel == 0 { let profile_key = profile.keys[i]; if profile_key.0 { unsafe { @@ -241,7 +236,7 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> u32 { let mut x: f64 = 0.0; let mut y: f64 = 0.0; - if profile_name != "default" || (channel == 0 && profile_name == "default") { + if profile_name != "default" || channel == 0 { (x, y) = set_axis_from_keys(profile, keyboard_state); } @@ -254,10 +249,10 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> u32 { keys |= (x.round() as i8 as u8 as u32) << X_AXIS; keys |= (y.round() as i8 as u8 as u32) << Y_AXIS; - return keys; + keys } -pub fn list_controllers(ui: &mut ui::Ui) { +pub fn list_controllers(ui: &ui::Ui) { let joystick_subsystem = ui.joystick_subsystem.as_ref().unwrap(); let num_joysticks = joystick_subsystem.num_joysticks().unwrap(); if num_joysticks == 0 { diff --git a/src/ui/storage.rs b/src/ui/storage.rs index 172eb2c..d897521 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -54,7 +54,7 @@ pub fn get_save_type(game_id: &str) -> Vec { "NEP" | // Star Wars Episode I: Racer "NYS" // Yoshi's Story => { - return vec![SaveTypes::Eeprom16k] + vec![SaveTypes::Eeprom16k] } "NCC" | // Command & Conquer "NDA" | // Derby Stallion 64 @@ -76,12 +76,12 @@ pub fn get_save_type(game_id: &str) -> Vec { "NW4" | // WWF No Mercy "NDP" // Dinosaur Planet (Unlicensed) =>{ - return vec![SaveTypes::Flash] + vec![SaveTypes::Flash] } "NPQ" // Powerpuff Girls: Chemical X Traction - => {return vec![];} + => {vec![]} _ => { - return vec![SaveTypes::Eeprom4k, SaveTypes::Sram] + vec![SaveTypes::Eeprom4k, SaveTypes::Sram] } } } @@ -146,12 +146,12 @@ pub fn load_saves(ui: &mut ui::Ui) { } } -pub fn write_rom_save(ui: &mut ui::Ui) { +pub fn write_rom_save(ui: &ui::Ui) { let f = std::fs::File::create(ui.paths.romsave_file_path.clone()).unwrap(); serde_json::to_writer(f, &ui.saves.romsave).unwrap(); } -pub fn write_saves(ui: &mut ui::Ui) { +pub fn write_saves(ui: &ui::Ui) { if ui.saves.eeprom.1 { write_save(ui, SaveTypes::Eeprom16k) } @@ -169,7 +169,7 @@ pub fn write_saves(ui: &mut ui::Ui) { } } -pub fn write_save(ui: &mut ui::Ui, save_type: SaveTypes) { +pub fn write_save(ui: &ui::Ui, save_type: SaveTypes) { let path: &std::path::Path; let data: &Vec; match save_type { diff --git a/src/ui/video.rs b/src/ui/video.rs index f6d120d..4d24af6 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -30,8 +30,8 @@ pub fn init(ui: &mut ui::Ui, rdram_ptr: *mut u8, rdram_size: usize, fullscreen: pub fn update_screen() -> u8 { // when the window is closed, running is set to 0 - let running = unsafe { rdp_update_screen() }; - return running; + + unsafe { rdp_update_screen() } } pub fn set_register(reg: u32, value: u32) { @@ -41,8 +41,8 @@ pub fn set_register(reg: u32, value: u32) { } pub fn process_rdp_list(dpc_regs: &mut [u32; 8], sp_dmem: &mut [u8; 8192]) -> u64 { - let timer = unsafe { rdp_process_commands(dpc_regs, sp_dmem) }; - return timer; + + unsafe { rdp_process_commands(dpc_regs, sp_dmem) } } pub fn rdp_full_sync() { From 53d2fd780679d6cf8c653f69f098e8170a03de44 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 24 Oct 2023 15:54:28 +0300 Subject: [PATCH 0086/1117] add icon --- data/icon.ico | Bin 0 -> 99353 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/icon.ico diff --git a/data/icon.ico b/data/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c5e7317962f61efe91737f6af163f2993748e61d GIT binary patch literal 99353 zcmV)bK&ig~00966000000096X0OJM$09F7106;(h0096X04PEL067N%05C8B0096X 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 Date: Tue, 24 Oct 2023 16:07:31 +0300 Subject: [PATCH 0087/1117] add windows icon (#23) * add windows icon * more --- Cargo.toml | 1 + build.rs | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index f02be25..7f71110 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,6 +24,7 @@ default-features = false features = ["static-link","bundled"] [build-dependencies] +winres = "0.1" cc = { version = "1.0", features = ["parallel"] } [profile.release] diff --git a/build.rs b/build.rs index e0272b7..e17f480 100644 --- a/build.rs +++ b/build.rs @@ -51,6 +51,11 @@ fn main() { #[cfg(target_os = "windows")] { build.flag("-DVK_USE_PLATFORM_WIN32_KHR"); + + winres::WindowsResource::new() + .set_icon("data/icon.ico") + .compile() + .unwrap(); } #[cfg(any(target_os = "linux", target_os = "macos"))] { From 268048f76c7173cf69c26ba5e54488192435f432 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 25 Oct 2023 09:45:07 +0300 Subject: [PATCH 0088/1117] move func --- Cargo.toml | 1 + src/main.rs | 57 +++++++++++++++++++++++++++++------------------------ 2 files changed, 32 insertions(+), 26 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 7f71110..04d0dca 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,6 +13,7 @@ sevenz-rust = "0.5" chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" +egui = "0.23" sha2 = "0.10" rusttype = "0.9" sdl2-sys = { git = "https://github.com/Rust-SDL2/rust-sdl2.git" } diff --git a/src/main.rs b/src/main.rs index 435a0ef..a1ade90 100644 --- a/src/main.rs +++ b/src/main.rs @@ -131,6 +131,33 @@ fn get_rom_contents(file_path: &std::path::Path) -> Vec { swap_rom(contents) } +fn run_game(file_path: &std::path::Path, device: &mut device::Device, fullscreen: bool) { + let rom_contents = get_rom_contents(file_path); + + device::cart_rom::init(device, rom_contents); // cart needs to come before rdram + + // rdram pointer is shared with parallel-rdp + let (rdram_ptr, rdram_size) = device::rdram::init(device); + + ui::audio::init(&mut device.ui, 33600); + ui::video::init(&mut device.ui, rdram_ptr, rdram_size, fullscreen); + ui::input::init(&mut device.ui); + + device::mi::init(device); + device::pif::init(device); + device::memory::init(device); + device::rsp_interface::init(device); + device::rdp::init(device); + device::vi::init(device); + device::cpu::init(device); + + ui::storage::init(&mut device.ui); + ui::storage::load_saves(&mut device.ui); + device::cart_rom::load_rom_save(device); + + device::cpu::run(device); +} + fn main() { let args = Args::parse(); let mut device = device::Device::new(); @@ -178,30 +205,8 @@ fn main() { ui::input::configure_input_profile(&mut device.ui, args.configure_input_profile.unwrap()); return; } - let file_path = std::path::Path::new(args.game.as_ref().unwrap()); - - let rom_contents = get_rom_contents(file_path); - - device::cart_rom::init(&mut device, rom_contents); // cart needs to come before rdram - - // rdram pointer is shared with parallel-rdp - let (rdram_ptr, rdram_size) = device::rdram::init(&mut device); - - ui::audio::init(&mut device.ui, 33600); - ui::video::init(&mut device.ui, rdram_ptr, rdram_size, args.fullscreen); - ui::input::init(&mut device.ui); - - device::mi::init(&mut device); - device::pif::init(&mut device); - device::memory::init(&mut device); - device::rsp_interface::init(&mut device); - device::rdp::init(&mut device); - device::vi::init(&mut device); - device::cpu::init(&mut device); - - ui::storage::init(&mut device.ui); - ui::storage::load_saves(&mut device.ui); - device::cart_rom::load_rom_save(&mut device); - - device::cpu::run(&mut device); + if args.game.is_some() { + let file_path = std::path::Path::new(args.game.as_ref().unwrap()); + run_game(file_path, &mut device, args.fullscreen); + } } From cce163921eea8ab879e6fb4fb8d0d28c6f1f222a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 2 Nov 2023 10:45:11 -0600 Subject: [PATCH 0089/1117] gui (#24) * gui * name * more * more * fix * warn * more * remove dnd * more * more * more * more * more * more * more * more * more * linter * more * more * more * more * linter * more * linter * fix * more --- Cargo.toml | 4 +- src/device.rs | 105 +++++++++++++++++++++++ src/main.rs | 221 ++++++++++++++++-------------------------------- src/ui.rs | 1 + src/ui/gui.rs | 220 +++++++++++++++++++++++++++++++++++++++++++++++ src/ui/input.rs | 4 + 6 files changed, 404 insertions(+), 151 deletions(-) create mode 100644 src/ui/gui.rs diff --git a/Cargo.toml b/Cargo.toml index 04d0dca..361f544 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,9 +13,11 @@ sevenz-rust = "0.5" chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -egui = "0.23" +eframe = "0.23" +rfd = {version = "0.12", default-features = false, features = ["xdg-portal"] } sha2 = "0.10" rusttype = "0.9" +futures = "0.3" sdl2-sys = { git = "https://github.com/Rust-SDL2/rust-sdl2.git" } clap = { version = "4.4", features = ["derive"] } diff --git a/src/device.rs b/src/device.rs index b3a7f7a..6834082 100644 --- a/src/device.rs +++ b/src/device.rs @@ -1,4 +1,6 @@ use crate::ui; +use std::fs; +use std::io::Read; pub mod ai; pub mod cache; @@ -32,6 +34,109 @@ pub mod tlb; pub mod unmapped; pub mod vi; +pub fn run_game(file_path: &std::path::Path, device: &mut Device, fullscreen: bool) { + let rom_contents = get_rom_contents(file_path); + + cart_rom::init(device, rom_contents); // cart needs to come before rdram + + // rdram pointer is shared with parallel-rdp + let (rdram_ptr, rdram_size) = rdram::init(device); + + ui::audio::init(&mut device.ui, 33600); + ui::video::init(&mut device.ui, rdram_ptr, rdram_size, fullscreen); + ui::input::init(&mut device.ui); + + mi::init(device); + pif::init(device); + memory::init(device); + rsp_interface::init(device); + rdp::init(device); + vi::init(device); + cpu::init(device); + + ui::storage::init(&mut device.ui); + ui::storage::load_saves(&mut device.ui); + cart_rom::load_rom_save(device); + + cpu::run(device); +} + +fn swap_rom(contents: Vec) -> Vec { + let test = u32::from_be_bytes(contents[0..4].try_into().unwrap()); + if test == 0x80371240 { + // z64 + contents + } else if test == 0x37804012 { + // v64 + let mut data: Vec = vec![0; contents.len()]; + for i in (0..contents.len()).step_by(2) { + let temp = u16::from_ne_bytes(contents[i..i + 2].try_into().unwrap()); + data[i..i + 2].copy_from_slice(&temp.to_be_bytes()); + } + return data; + } else if test == 0x40123780 { + // n64 + let mut data: Vec = vec![0; contents.len()]; + for i in (0..contents.len()).step_by(4) { + let temp = u32::from_ne_bytes(contents[i..i + 4].try_into().unwrap()); + data[i..i + 4].copy_from_slice(&temp.to_be_bytes()); + } + return data; + } else { + panic!("unknown rom format") + } +} + +fn get_rom_contents(file_path: &std::path::Path) -> Vec { + let mut contents = vec![]; + if file_path.extension().unwrap().to_ascii_lowercase() == "zip" { + let zip_file = fs::File::open(file_path).unwrap(); + let mut archive = zip::ZipArchive::new(zip_file).unwrap(); + for i in 0..archive.len() { + let mut file = archive.by_index(i).unwrap(); + let extension = file + .enclosed_name() + .unwrap() + .extension() + .unwrap() + .to_ascii_lowercase(); + if extension == "z64" || extension == "n64" || extension == "v64" { + file.read_to_end(&mut contents) + .expect("could not read zip file"); + break; + } + } + } else if file_path.extension().unwrap().to_ascii_lowercase() == "7z" { + let mut archive = + sevenz_rust::SevenZReader::open(file_path, sevenz_rust::Password::empty()).unwrap(); + + let mut found = false; + archive + .for_each_entries( + &mut |entry: &sevenz_rust::SevenZArchiveEntry, reader: &mut dyn std::io::Read| { + let name = entry.name().to_ascii_lowercase(); + if !found + && (name.ends_with("z64") || name.ends_with("n64") || name.ends_with("v64")) + { + reader + .read_to_end(&mut contents) + .expect("could not read zip file"); + found = true; + } else { + //skip other files + std::io::copy(reader, &mut std::io::sink())?; + } + Ok(true) + }, + ) + .expect("ok"); + } else { + contents = fs::read(file_path).expect("Should have been able to read the file"); + } + + swap_rom(contents) +} + pub struct Device { pub ui: ui::Ui, byte_swap: usize, diff --git a/src/main.rs b/src/main.rs index a1ade90..44c754b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,7 @@ #![feature(round_ties_even)] #![feature(string_remove_matches)] -use std::fs; -use std::io::Read; +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release + mod device; mod ui; use clap::Parser; @@ -55,158 +55,79 @@ struct Args { clear_input_bindings: bool, } -fn swap_rom(contents: Vec) -> Vec { - let test = u32::from_be_bytes(contents[0..4].try_into().unwrap()); - if test == 0x80371240 { - // z64 - contents - } else if test == 0x37804012 { - // v64 - let mut data: Vec = vec![0; contents.len()]; - for i in (0..contents.len()).step_by(2) { - let temp = u16::from_ne_bytes(contents[i..i + 2].try_into().unwrap()); - data[i..i + 2].copy_from_slice(&temp.to_be_bytes()); - } - return data; - } else if test == 0x40123780 { - // n64 - let mut data: Vec = vec![0; contents.len()]; - for i in (0..contents.len()).step_by(4) { - let temp = u32::from_ne_bytes(contents[i..i + 4].try_into().unwrap()); - data[i..i + 4].copy_from_slice(&temp.to_be_bytes()); - } - return data; - } else { - panic!("unknown rom format") - } -} +fn main() { + let cache_dir = dirs::cache_dir().unwrap().join("gopher64"); -fn get_rom_contents(file_path: &std::path::Path) -> Vec { - let mut contents = vec![]; - if file_path.extension().unwrap().to_ascii_lowercase() == "zip" { - let zip_file = fs::File::open(file_path).unwrap(); - let mut archive = zip::ZipArchive::new(zip_file).unwrap(); - for i in 0..archive.len() { - let mut file = archive.by_index(i).unwrap(); - let extension = file - .enclosed_name() - .unwrap() - .extension() - .unwrap() - .to_ascii_lowercase(); - if extension == "z64" || extension == "n64" || extension == "v64" { - file.read_to_end(&mut contents) - .expect("could not read zip file"); - break; + let _ = std::fs::create_dir_all(cache_dir.clone()); + let _ = std::fs::remove_file(cache_dir.clone().join("game_running")); + + let args = Args::parse(); + let args_as_strings: Vec = std::env::args().collect(); + let args_count = args_as_strings.len(); + if args_count > 1 { + let mut device = device::Device::new(); + + if args.clear_input_bindings { + ui::input::clear_bindings(&mut device.ui); + return; + } + if args.port.is_some() { + let port = args.port.unwrap(); + if !(1..=4).contains(&port) { + println!("Port must be betwen 1 and 4"); + return; } } - } else if file_path.extension().unwrap().to_ascii_lowercase() == "7z" { - let mut archive = - sevenz_rust::SevenZReader::open(file_path, sevenz_rust::Password::empty()).unwrap(); + if args.list_controllers { + ui::input::list_controllers(&device.ui); + return; + } + if args.assign_controller.is_some() { + if args.port.is_none() { + println!("Must specify port number"); + return; + } + ui::input::assign_controller( + &mut device.ui, + args.assign_controller.unwrap(), + args.port.unwrap(), + ); + return; + } + if args.bind_input_profile.is_some() { + if args.port.is_none() { + println!("Must specify port number"); + return; + } + ui::input::bind_input_profile( + &mut device.ui, + args.bind_input_profile.unwrap(), + args.port.unwrap(), + ); + return; + } + if args.configure_input_profile.is_some() { + ui::input::configure_input_profile( + &mut device.ui, + args.configure_input_profile.unwrap(), + ); + return; + } - let mut found = false; - archive - .for_each_entries( - &mut |entry: &sevenz_rust::SevenZArchiveEntry, reader: &mut dyn std::io::Read| { - let name = entry.name().to_ascii_lowercase(); - if !found - && (name.ends_with("z64") || name.ends_with("n64") || name.ends_with("v64")) - { - reader - .read_to_end(&mut contents) - .expect("could not read zip file"); - found = true; - } else { - //skip other files - std::io::copy(reader, &mut std::io::sink())?; - } - Ok(true) - }, - ) - .expect("ok"); + if args.game.is_some() { + let file_path = std::path::Path::new(args.game.as_ref().unwrap()); + device::run_game(file_path, &mut device, args.fullscreen); + } } else { - contents = fs::read(file_path).expect("Should have been able to read the file"); - } - - swap_rom(contents) -} - -fn run_game(file_path: &std::path::Path, device: &mut device::Device, fullscreen: bool) { - let rom_contents = get_rom_contents(file_path); - - device::cart_rom::init(device, rom_contents); // cart needs to come before rdram - - // rdram pointer is shared with parallel-rdp - let (rdram_ptr, rdram_size) = device::rdram::init(device); - - ui::audio::init(&mut device.ui, 33600); - ui::video::init(&mut device.ui, rdram_ptr, rdram_size, fullscreen); - ui::input::init(&mut device.ui); - - device::mi::init(device); - device::pif::init(device); - device::memory::init(device); - device::rsp_interface::init(device); - device::rdp::init(device); - device::vi::init(device); - device::cpu::init(device); - - ui::storage::init(&mut device.ui); - ui::storage::load_saves(&mut device.ui); - device::cart_rom::load_rom_save(device); - - device::cpu::run(device); -} - -fn main() { - let args = Args::parse(); - let mut device = device::Device::new(); - - if args.clear_input_bindings { - ui::input::clear_bindings(&mut device.ui); - return; - } - if args.port.is_some() { - let port = args.port.unwrap(); - if !(1..=4).contains(&port) { - println!("Port must be betwen 1 and 4"); - return; - } - } - if args.list_controllers { - ui::input::list_controllers(&device.ui); - return; - } - if args.assign_controller.is_some() { - if args.port.is_none() { - println!("Must specify port number"); - return; - } - ui::input::assign_controller( - &mut device.ui, - args.assign_controller.unwrap(), - args.port.unwrap(), - ); - return; - } - if args.bind_input_profile.is_some() { - if args.port.is_none() { - println!("Must specify port number"); - return; - } - ui::input::bind_input_profile( - &mut device.ui, - args.bind_input_profile.unwrap(), - args.port.unwrap(), - ); - return; - } - if args.configure_input_profile.is_some() { - ui::input::configure_input_profile(&mut device.ui, args.configure_input_profile.unwrap()); - return; - } - if args.game.is_some() { - let file_path = std::path::Path::new(args.game.as_ref().unwrap()); - run_game(file_path, &mut device, args.fullscreen); + let options = eframe::NativeOptions { + initial_window_size: Some(eframe::egui::vec2(640.0, 480.0)), + ..Default::default() + }; + eframe::run_native( + "gopher64", + options, + Box::new(|_cc| Box::new(ui::gui::GopherEguiApp::new())), + ) + .unwrap(); } } diff --git a/src/ui.rs b/src/ui.rs index b65433e..9ac67dd 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -1,5 +1,6 @@ pub mod audio; pub mod config; +pub mod gui; pub mod input; pub mod storage; pub mod video; diff --git a/src/ui/gui.rs b/src/ui/gui.rs new file mode 100644 index 0000000..e75f73d --- /dev/null +++ b/src/ui/gui.rs @@ -0,0 +1,220 @@ +use crate::device; +use crate::ui; +use eframe::egui; + +pub struct GopherEguiApp { + configure_profile: bool, + profile_name: String, + controllers: Vec, + selected_controller: [i32; 4], + selected_profile: [String; 4], + input_profiles: Vec, +} + +fn get_input_profiles(game_ui: &ui::Ui) -> Vec { + let mut profiles = vec![]; + for key in game_ui.config.input.input_profiles.keys() { + profiles.push((*key).clone()) + } + profiles +} + +fn get_controllers(game_ui: &ui::Ui) -> Vec { + let mut controllers: Vec = vec![]; + + let joystick_subsystem = game_ui.joystick_subsystem.as_ref().unwrap(); + let num_joysticks = joystick_subsystem.num_joysticks().unwrap(); + for i in 0..num_joysticks { + controllers.push(joystick_subsystem.name_for_index(i).unwrap()); + } + controllers +} + +impl GopherEguiApp { + pub fn new() -> GopherEguiApp { + let game_ui = ui::Ui::new(); + let joystick_subsystem = game_ui.joystick_subsystem.as_ref().unwrap(); + let num_joysticks = joystick_subsystem.num_joysticks().unwrap(); + let mut guids: Vec = vec![]; + for i in 0..num_joysticks { + guids.push(joystick_subsystem.device_guid(i).unwrap().to_string()); + } + let mut selected_controller = [-1, -1, -1, -1]; + for (pos, item) in game_ui + .config + .input + .controller_assignment + .iter() + .enumerate() + { + if item.is_some() { + for (guid_pos, guid) in guids.iter().enumerate() { + if item.as_deref().unwrap() == *guid { + selected_controller[pos] = guid_pos as i32; + break; + } + } + } + } + GopherEguiApp { + configure_profile: false, + profile_name: "".to_string(), + selected_profile: game_ui.config.input.input_profile_binding.clone(), + selected_controller, + controllers: get_controllers(&game_ui), + input_profiles: get_input_profiles(&game_ui), + } + } +} + +fn save_config(game_ui: &mut ui::Ui, selected_controller: [i32; 4], selected_profile: [String; 4]) { + let joystick_subsystem = game_ui.joystick_subsystem.as_ref().unwrap(); + for (pos, item) in selected_controller.iter().enumerate() { + if *item != -1 { + game_ui.config.input.controller_assignment[pos] = Some( + joystick_subsystem + .device_guid(*item as u32) + .unwrap() + .to_string(), + ); + } else { + game_ui.config.input.controller_assignment[pos] = None + } + } + + game_ui.config.input.input_profile_binding = selected_profile; +} + +impl Drop for GopherEguiApp { + fn drop(&mut self) { + let mut game_ui = ui::Ui::new(); + save_config( + &mut game_ui, + self.selected_controller, + self.selected_profile.clone(), + ); + } +} + +impl eframe::App for GopherEguiApp { + fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { + if self.configure_profile { + egui::Window::new("Configure Input Profile") + // .open(&mut self.configure_profile) + .show(ctx, |ui| { + ui.horizontal(|ui| { + let name_label = ui.label("Profile Name: "); + ui.text_edit_singleline(&mut self.profile_name) + .labelled_by(name_label.id); + }); + ui.horizontal(|ui| { + if ui.button("Configure Profile").clicked() { + let profile_name = self.profile_name.clone(); + execute(async { + let mut game_ui = ui::Ui::new(); + ui::input::configure_input_profile(&mut game_ui, profile_name); + }); + self.configure_profile = false; + if !self.profile_name.is_empty() && self.profile_name != "default" { + self.input_profiles.push(self.profile_name.clone()) + } + }; + if ui.button("Close").clicked() { + self.configure_profile = false + }; + }); + }); + } + + egui::CentralPanel::default().show(ctx, |ui| { + ui.set_enabled(!self.configure_profile); + + if ui.button("Open ROM").clicked() { + // Spawn dialog on main thread + let task = rfd::AsyncFileDialog::new().pick_file(); + let selected_controller = self.selected_controller; + let selected_profile = self.selected_profile.clone(); + execute(async move { + let file = task.await; + + if let Some(file) = file { + let running_file = dirs::cache_dir() + .unwrap() + .join("gopher64") + .join("game_running"); + if running_file.exists() { + return; + } + let _ = std::fs::File::create(running_file.clone()); + let mut device = device::Device::new(); + save_config(&mut device.ui, selected_controller, selected_profile); + device::run_game(std::path::Path::new(file.path()), &mut device, false); + let _ = std::fs::remove_file(running_file.clone()); + } + }); + } + + if ui.button("Configure Input Profile").clicked() { + let running_file = dirs::cache_dir() + .unwrap() + .join("gopher64") + .join("game_running"); + if running_file.exists() { + return; + } + self.configure_profile = true; + } + + ui.add_space(32.0); + ui.label("Controller Config:"); + egui::Grid::new("some_unique_id").show(ui, |ui| { + ui.label("Port"); + ui.label("Profile"); + ui.label("Controller"); + ui.end_row(); + for i in 0..4 { + ui.label(format!("{}", i + 1)); + + egui::ComboBox::from_id_source(format!("profile-combo-{}", i)) + .selected_text(self.selected_profile[i].clone()) + .show_ui(ui, |ui| { + for j in 0..self.input_profiles.len() { + ui.selectable_value( + &mut self.selected_profile[i], + self.input_profiles[j].clone(), + self.input_profiles[j].clone(), + ); + } + }); + + let controller_text = if self.selected_controller[i] == -1 { + "None".to_string() + } else { + self.controllers[self.selected_controller[i] as usize].clone() + }; + egui::ComboBox::from_id_source(format!("controller-combo-{}", i)) + .selected_text(controller_text) + .show_ui(ui, |ui| { + ui.selectable_value( + &mut self.selected_controller[i], + -1, + "None".to_string(), + ); + for j in 0..self.controllers.len() { + ui.selectable_value( + &mut self.selected_controller[i], + j as i32, + self.controllers[j].clone(), + ); + } + }); + ui.end_row(); + } + }); + }); + } +} + +fn execute + Send + 'static>(f: F) { + std::thread::spawn(move || futures::executor::block_on(f)); +} diff --git a/src/ui/input.rs b/src/ui/input.rs index d91adc2..30a3fc2 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -298,6 +298,10 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String) { println!("Profile name cannot be default"); return; } + if profile.is_empty() { + println!("Profile name cannot be empty"); + return; + } let joystick_subsystem = ui.sdl_context.as_ref().unwrap().joystick().unwrap(); let mut joysticks = vec![]; for i in 0..joystick_subsystem.num_joysticks().unwrap() { From e848bfbd812fee7526fe8a2c7068a24824e52a9c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 2 Nov 2023 12:17:39 -0600 Subject: [PATCH 0090/1117] fix crash --- src/main.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main.rs b/src/main.rs index 44c754b..a046014 100644 --- a/src/main.rs +++ b/src/main.rs @@ -56,8 +56,10 @@ struct Args { } fn main() { + let config_dir = dirs::config_dir().unwrap().join("gopher64"); let cache_dir = dirs::cache_dir().unwrap().join("gopher64"); + let _ = std::fs::create_dir_all(config_dir.clone()); let _ = std::fs::create_dir_all(cache_dir.clone()); let _ = std::fs::remove_file(cache_dir.clone().join("game_running")); From 52caa9cee3d631a34cf5576cf058cb2335fb2d0c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 2 Nov 2023 12:44:49 -0600 Subject: [PATCH 0091/1117] more --- data/gopher64.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 data/gopher64.svg diff --git a/data/gopher64.svg b/data/gopher64.svg new file mode 100644 index 0000000..0098375 --- /dev/null +++ b/data/gopher64.svg @@ -0,0 +1 @@ + \ No newline at end of file From 2f1a1b1479a23d1ae6a317597383942930767237 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 3 Nov 2023 09:03:01 -0600 Subject: [PATCH 0092/1117] fix small gui bug --- src/ui/gui.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index e75f73d..32a6968 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -115,7 +115,9 @@ impl eframe::App for GopherEguiApp { ui::input::configure_input_profile(&mut game_ui, profile_name); }); self.configure_profile = false; - if !self.profile_name.is_empty() && self.profile_name != "default" { + if !self.profile_name.is_empty() + && !self.input_profiles.contains(&self.profile_name) + { self.input_profiles.push(self.profile_name.clone()) } }; From e848789965f0316478a09d14a7c6b523dc6c7c85 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 4 Nov 2023 12:54:15 -0600 Subject: [PATCH 0093/1117] Create FUNDING.yml --- .github/FUNDING.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..df6c3b2 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,2 @@ +github: loganmc10 +patreon: loganmc10 From ac30d7a6ddb3782071f72c7a76e9f402cde1a419 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 5 Nov 2023 20:08:59 -0700 Subject: [PATCH 0094/1117] update ver to 0.1.1 --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 361f544..d2a0d16 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.0" +version = "0.1.1" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From 034fa7c29c0bb78ae20479183b23d0dbc1223cca Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 5 Nov 2023 20:31:08 -0700 Subject: [PATCH 0095/1117] fix window resize --- parallel-rdp/interface.cpp | 4 ++++ parallel-rdp/wsi_platform.cpp | 5 +++++ parallel-rdp/wsi_platform.hpp | 1 + 3 files changed, 10 insertions(+) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index cbd29b1..34acc78 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -184,11 +184,15 @@ int sdl_event_filter(void *userdata, SDL_Event *event) { if (event->type == SDL_WINDOWEVENT) { + SDL_WSIPlatform *platform = (SDL_WSIPlatform *)&wsi->get_platform(); switch (event->window.event) { case SDL_WINDOWEVENT_CLOSE: emu_running = 0; break; + case SDL_WINDOWEVENT_RESIZED: + platform->do_resize(); + break; default: break; } diff --git a/parallel-rdp/wsi_platform.cpp b/parallel-rdp/wsi_platform.cpp index 4cfc213..8bf77ce 100644 --- a/parallel-rdp/wsi_platform.cpp +++ b/parallel-rdp/wsi_platform.cpp @@ -58,3 +58,8 @@ void SDL_WSIPlatform::set_window(SDL_Window *_window) { window = _window; } + +void SDL_WSIPlatform::do_resize() +{ + resize = true; +} diff --git a/parallel-rdp/wsi_platform.hpp b/parallel-rdp/wsi_platform.hpp index 5c1c0fe..9b82fc8 100644 --- a/parallel-rdp/wsi_platform.hpp +++ b/parallel-rdp/wsi_platform.hpp @@ -14,6 +14,7 @@ public: bool alive(Vulkan::WSI &wsi) override; void poll_input() override; void set_window(SDL_Window *_window); + void do_resize(); private: VkSurfaceKHR surface; From 00c236ce8c5f7ec2ac5f82a827c8729e6fcad333 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 5 Nov 2023 21:51:41 -0700 Subject: [PATCH 0096/1117] fix linter --- src/device.rs | 2 +- src/device/cpu.rs | 2 +- src/device/events.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/device.rs b/src/device.rs index 6834082..fce584c 100644 --- a/src/device.rs +++ b/src/device.rs @@ -247,7 +247,7 @@ impl Device { enabled: false, count: u64::MAX, handler: events::dummy_event, - }; events::EventType::EventTypeCount as usize], + }; events::EventType::Count as usize], next_event_count: u64::MAX, next_event: 0, }, diff --git a/src/device/cpu.rs b/src/device/cpu.rs index 08205ff..617ba51 100644 --- a/src/device/cpu.rs +++ b/src/device/cpu.rs @@ -31,7 +31,7 @@ pub struct Cpu { pub instrs: [fn(&mut device::Device, u32); 64], pub special_instrs: [fn(&mut device::Device, u32); 64], pub regimm_instrs: [fn(&mut device::Device, u32); 32], - pub events: [device::events::Event; device::events::EventType::EventTypeCount as usize], + pub events: [device::events::Event; device::events::EventType::Count as usize], pub next_event_count: u64, pub next_event: usize, } diff --git a/src/device/events.rs b/src/device/events.rs index b425716..774a55e 100644 --- a/src/device/events.rs +++ b/src/device/events.rs @@ -11,7 +11,7 @@ pub enum EventType { InterruptCheck, SPDma, Compare, - EventTypeCount, + Count, } #[derive(PartialEq, Copy, Clone)] From 5af1c1f7ee5eeb2afe591f8fedde37addd2885fb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 24 Nov 2023 09:03:01 -0700 Subject: [PATCH 0097/1117] Update eframe/egui (#29) --- Cargo.toml | 2 +- src/main.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index d2a0d16..39dc674 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ sevenz-rust = "0.5" chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -eframe = "0.23" +eframe = "0.24" rfd = {version = "0.12", default-features = false, features = ["xdg-portal"] } sha2 = "0.10" rusttype = "0.9" diff --git a/src/main.rs b/src/main.rs index a046014..5e6ac45 100644 --- a/src/main.rs +++ b/src/main.rs @@ -122,7 +122,7 @@ fn main() { } } else { let options = eframe::NativeOptions { - initial_window_size: Some(eframe::egui::vec2(640.0, 480.0)), + viewport: eframe::egui::ViewportBuilder::default().with_inner_size([640.0, 480.0]), ..Default::default() }; eframe::run_native( From 13d6992ca1dbb2ce4ac30269f930d405fda81b49 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 24 Nov 2023 09:03:23 -0700 Subject: [PATCH 0098/1117] bump ver to 0.1.2 --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 39dc674..0341478 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.1" +version = "0.1.2" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From 981a8e8f050a78334b6e48a633cb3df7a13228b6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Dec 2023 19:56:37 -0700 Subject: [PATCH 0099/1117] Bump actions/upload-artifact from 3 to 4 (#32) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3 to 4. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c78882a..744b94a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,7 +26,7 @@ jobs: run: | cargo build --release -v - name: Upload file - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: gopher64-linux path: target/release/gopher64 @@ -44,7 +44,7 @@ jobs: run: | cargo build --release -v - name: Upload file - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: gopher64-windows path: target/release/gopher64.exe @@ -65,7 +65,7 @@ jobs: run: | cargo build --release -v - name: Upload file - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: gopher64-mac path: target/release/gopher64 From 3e4efe110beea152dd3cdccd420548159d2a3b78 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 19:36:18 -0700 Subject: [PATCH 0100/1117] Update eframe requirement from 0.24 to 0.25 (#33) Updates the requirements on [eframe](https://github.com/emilk/egui) to permit the latest version. - [Release notes](https://github.com/emilk/egui/releases) - [Changelog](https://github.com/emilk/egui/blob/master/CHANGELOG.md) - [Commits](https://github.com/emilk/egui/compare/0.24.0...0.25.0) --- updated-dependencies: - dependency-name: eframe dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 0341478..0dbc95f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ sevenz-rust = "0.5" chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -eframe = "0.24" +eframe = "0.25" rfd = {version = "0.12", default-features = false, features = ["xdg-portal"] } sha2 = "0.10" rusttype = "0.9" From f12baef633f0cf530bce197cb8c325893747c3b9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 14 Jan 2024 20:45:58 -0700 Subject: [PATCH 0101/1117] Update rfd (#35) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 0dbc95f..f919f5e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" eframe = "0.25" -rfd = {version = "0.12", default-features = false, features = ["xdg-portal"] } +rfd = {version = "0.13", default-features = false, features = ["xdg-portal", "async-std"] } sha2 = "0.10" rusttype = "0.9" futures = "0.3" From 1ffa58678983114ac279d1924ee93b4ece808747 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 14 Jan 2024 21:05:28 -0700 Subject: [PATCH 0102/1117] bump version to 0.1.3 (#36) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index f919f5e..f7c6ca0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.2" +version = "0.1.3" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From 44dd53b3670a024dfaf3dc7c1a7ae7b4b890cca2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 22 Jan 2024 08:31:19 -0700 Subject: [PATCH 0103/1117] round_ties_even is default now (#37) --- src/main.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 5e6ac45..5b669a0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,3 @@ -#![feature(round_ties_even)] #![feature(string_remove_matches)] #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release From 93aafafa753dd9c6056e6123e408d2b9d936ccb8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 22 Jan 2024 08:47:57 -0700 Subject: [PATCH 0104/1117] Remove string_remove_matches (#38) --- src/main.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 5b669a0..2840054 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,3 @@ -#![feature(string_remove_matches)] #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release mod device; From 1dcfe3a25d42059158a10a4d56ae82ae72b19531 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 28 Jan 2024 12:11:56 -0700 Subject: [PATCH 0105/1117] Use sdl crate v0.36 (#40) --- Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index f7c6ca0..e49aa07 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,11 +18,11 @@ rfd = {version = "0.13", default-features = false, features = ["xdg-portal", "a sha2 = "0.10" rusttype = "0.9" futures = "0.3" -sdl2-sys = { git = "https://github.com/Rust-SDL2/rust-sdl2.git" } +sdl2-sys = "0.36" clap = { version = "4.4", features = ["derive"] } [dependencies.sdl2] -git = "https://github.com/Rust-SDL2/rust-sdl2.git" +version = "0.36" default-features = false features = ["static-link","bundled"] From febf321d58e65df38a6f6f1d14557f3a99a95f9e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 28 Jan 2024 12:33:52 -0700 Subject: [PATCH 0106/1117] Update download link (#42) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index be9099d..3f35990 100644 --- a/README.md +++ b/README.md @@ -56,4 +56,4 @@ Gopher64 is licensed under the GPLv3 license. Many portions of gopher64 have bee ## where to download -Builds can be found as artifacts on [GitHub Actions](https://github.com/gopher64/gopher64/actions?query=branch%3Amain) +https://github.com/gopher64/gopher64/releases From 19354fe732cb4ae81193f14d6f989eec63040957 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 28 Jan 2024 12:42:20 -0700 Subject: [PATCH 0107/1117] bump version to 0.1.4 (#41) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index e49aa07..2627c57 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.3" +version = "0.1.4" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From 97928e1612de40739632831c4f656e3123f68319 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Feb 2024 21:17:15 -0700 Subject: [PATCH 0108/1117] Update eframe requirement from 0.25 to 0.26 (#46) Updates the requirements on [eframe](https://github.com/emilk/egui) to permit the latest version. - [Release notes](https://github.com/emilk/egui/releases) - [Changelog](https://github.com/emilk/egui/blob/master/CHANGELOG.md) - [Commits](https://github.com/emilk/egui/compare/0.25.0...0.26.0) --- updated-dependencies: - dependency-name: eframe dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 2627c57..791e801 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ sevenz-rust = "0.5" chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -eframe = "0.25" +eframe = "0.26" rfd = {version = "0.13", default-features = false, features = ["xdg-portal", "async-std"] } sha2 = "0.10" rusttype = "0.9" From 4ff7a640d814af58509bb4c533454c2ca6abc962 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 8 Feb 2024 07:29:35 -0700 Subject: [PATCH 0109/1117] Update rust beta (#44) --- rust-toolchain.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 5d56faf..ce4bff1 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "nightly" +channel = "beta" From 979c3666df020b0cc72e2bedb2c1c330f9e9d058 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 25 Feb 2024 19:18:51 -0700 Subject: [PATCH 0110/1117] Update rfd requirement from 0.13 to 0.14 (#48) Updates the requirements on [rfd](https://github.com/PolyMeilex/rfd) to permit the latest version. - [Release notes](https://github.com/PolyMeilex/rfd/releases) - [Changelog](https://github.com/PolyMeilex/rfd/blob/master/CHANGELOG.md) - [Commits](https://github.com/PolyMeilex/rfd/compare/0.13.0...0.14.0) --- updated-dependencies: - dependency-name: rfd dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 791e801..597b7d7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" eframe = "0.26" -rfd = {version = "0.13", default-features = false, features = ["xdg-portal", "async-std"] } +rfd = {version = "0.14", default-features = false, features = ["xdg-portal", "async-std"] } sha2 = "0.10" rusttype = "0.9" futures = "0.3" From 42919d141a1490953f56e343cb08218c05261a56 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 25 Feb 2024 19:25:26 -0700 Subject: [PATCH 0111/1117] clean up RFD features (#49) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 597b7d7..819934a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" eframe = "0.26" -rfd = {version = "0.14", default-features = false, features = ["xdg-portal", "async-std"] } +rfd = "0.14" sha2 = "0.10" rusttype = "0.9" futures = "0.3" From 182cb78649b8d749e0f6f9d9f8b2ffc925c518b7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 21 Mar 2024 07:19:34 -0600 Subject: [PATCH 0112/1117] Use rust stable (#39) --- rust-toolchain.toml | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 rust-toolchain.toml diff --git a/rust-toolchain.toml b/rust-toolchain.toml deleted file mode 100644 index ce4bff1..0000000 --- a/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "beta" From 3bac21a9085f40e9a6b273c66cd941a83d73d1ea Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 21 Mar 2024 12:05:28 -0600 Subject: [PATCH 0113/1117] bump version to 0.1.5 (#50) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 819934a..77e3717 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.4" +version = "0.1.5" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From 7ea1516d52e5dfee3b54e99d1c95f0b5e61918ee Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Mar 2024 20:53:38 -0600 Subject: [PATCH 0114/1117] Update eframe requirement from 0.26 to 0.27 (#51) Updates the requirements on [eframe](https://github.com/emilk/egui) to permit the latest version. - [Release notes](https://github.com/emilk/egui/releases) - [Changelog](https://github.com/emilk/egui/blob/master/CHANGELOG.md) - [Commits](https://github.com/emilk/egui/compare/0.26.0...0.27.0) --- updated-dependencies: - dependency-name: eframe dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 77e3717..6c90741 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ sevenz-rust = "0.5" chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -eframe = "0.26" +eframe = "0.27" rfd = "0.14" sha2 = "0.10" rusttype = "0.9" From 2911be7debc50a8ca394481011c325b1a8a9dff3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 7 Apr 2024 20:49:42 -0600 Subject: [PATCH 0115/1117] Update sevenz-rust requirement from 0.5 to 0.6 (#52) --- updated-dependencies: - dependency-name: sevenz-rust dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 6c90741..9b6114f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ edition = "2021" dirs = "5.0" zip = "0.6" governor = "0.6" -sevenz-rust = "0.5" +sevenz-rust = "0.6" chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" From 0bad5999c1b72dd0e6ece790bcc3da7747dd2d41 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 21 Apr 2024 20:44:19 -0600 Subject: [PATCH 0116/1117] Update zip requirement from 0.6 to 1.1 (#53) --- updated-dependencies: - dependency-name: zip dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 9b6114f..6f27c7d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [dependencies] dirs = "5.0" -zip = "0.6" +zip = "1.1" governor = "0.6" sevenz-rust = "0.6" chrono = "0.4" From 49ba66f0a37ad6a7e47d4d73252068469aa5b379 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 2 May 2024 07:29:48 -0600 Subject: [PATCH 0117/1117] Fix linter errors (#55) --- .github/workflows/build.yml | 2 +- src/ui/storage.rs | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 744b94a..980c706 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -50,7 +50,7 @@ jobs: path: target/release/gopher64.exe build-macos: - runs-on: macos-latest + runs-on: macos-13 steps: - uses: actions/checkout@v4 with: diff --git a/src/ui/storage.rs b/src/ui/storage.rs index d897521..dc2c41a 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -97,27 +97,27 @@ pub fn init(ui: &mut ui::Ui) { panic!("could not create save dir") } - ui.paths.eep_file_path = base_path.clone(); + ui.paths.eep_file_path.clone_from(&base_path); ui.paths .eep_file_path .push(ui.game_id.to_owned() + "-" + &ui.game_hash + ".eep"); - ui.paths.sra_file_path = base_path.clone(); + ui.paths.sra_file_path.clone_from(&base_path); ui.paths .sra_file_path .push(ui.game_id.to_owned() + "-" + &ui.game_hash + ".sra"); - ui.paths.fla_file_path = base_path.clone(); + ui.paths.fla_file_path.clone_from(&base_path); ui.paths .fla_file_path .push(ui.game_id.to_owned() + "-" + &ui.game_hash + ".fla"); - ui.paths.pak_file_path = base_path.clone(); + ui.paths.pak_file_path.clone_from(&base_path); ui.paths .pak_file_path .push(ui.game_id.to_owned() + "-" + &ui.game_hash + ".mpk"); - ui.paths.romsave_file_path = base_path.clone(); + ui.paths.romsave_file_path.clone_from(&base_path); ui.paths .romsave_file_path .push(ui.game_id.to_owned() + "-" + &ui.game_hash + ".romsave"); From b8ce85b9fd62f0620248b400af2bfd31d6fb6cd2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 24 May 2024 11:22:14 -0600 Subject: [PATCH 0118/1117] update parallel rdp --- parallel-rdp/parallel-rdp-standalone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parallel-rdp/parallel-rdp-standalone b/parallel-rdp/parallel-rdp-standalone index 37bf296..7cdcaa3 160000 --- a/parallel-rdp/parallel-rdp-standalone +++ b/parallel-rdp/parallel-rdp-standalone @@ -1 +1 @@ -Subproject commit 37bf2967e3dd18e059cf5563717bb6c88c261f33 +Subproject commit 7cdcaa3db907b8f68cc145c405475e2e11689f13 From 3b1ef2938d8ec298847d58d2ce84dfb1b0978f11 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 24 May 2024 11:49:22 -0600 Subject: [PATCH 0119/1117] Bump version to 0.1.6 (#57) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 6f27c7d..9e1a281 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.5" +version = "0.1.6" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From 9eb4e73c4df2f3bbf5ca6682343e0ac448425210 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 26 May 2024 20:54:48 -0600 Subject: [PATCH 0120/1117] Update zip requirement from 1.1 to 2.1 (#60) Updates the requirements on [zip](https://github.com/zip-rs/zip2) to permit the latest version. - [Release notes](https://github.com/zip-rs/zip2/releases) - [Changelog](https://github.com/zip-rs/zip2/blob/master/CHANGELOG.md) - [Commits](https://github.com/zip-rs/zip2/compare/1.1.0...v2.1.0) --- updated-dependencies: - dependency-name: zip dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 9e1a281..dc79e6d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [dependencies] dirs = "5.0" -zip = "1.1" +zip = "2.1" governor = "0.6" sevenz-rust = "0.6" chrono = "0.4" From ce5ee30ef0908e88ca15dca9e4f727f91443a008 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 27 May 2024 12:37:21 -0600 Subject: [PATCH 0121/1117] Update parallel rdp --- build.rs | 1 + parallel-rdp/parallel-rdp-standalone | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/build.rs b/build.rs index e17f480..24a6286 100644 --- a/build.rs +++ b/build.rs @@ -37,6 +37,7 @@ fn main() { .file("parallel-rdp/parallel-rdp-standalone/util/aligned_alloc.cpp") .file("parallel-rdp/parallel-rdp-standalone/util/timer.cpp") .file("parallel-rdp/parallel-rdp-standalone/util/timeline_trace_file.cpp") + .file("parallel-rdp/parallel-rdp-standalone/util/environment.cpp") .file("parallel-rdp/parallel-rdp-standalone/util/thread_name.cpp") .file("parallel-rdp/parallel-rdp-standalone/volk/volk.c") .file("parallel-rdp/interface.cpp") diff --git a/parallel-rdp/parallel-rdp-standalone b/parallel-rdp/parallel-rdp-standalone index 7cdcaa3..ff3b858 160000 --- a/parallel-rdp/parallel-rdp-standalone +++ b/parallel-rdp/parallel-rdp-standalone @@ -1 +1 @@ -Subproject commit 7cdcaa3db907b8f68cc145c405475e2e11689f13 +Subproject commit ff3b858dd3a7ca27bd7c91fc894a7acd13fc0bcf From 4da7cd055194023ee20eed832374156c6768fb37 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 27 May 2024 13:23:56 -0600 Subject: [PATCH 0122/1117] Update parallel-rdp WSI integration (#61) * Update parallel-rdp WSI integration * fix build * disable mac build --- .github/workflows/build.yml | 41 +++++++++++++++++------------------ parallel-rdp/wsi_platform.cpp | 5 +++++ parallel-rdp/wsi_platform.hpp | 2 +- 3 files changed, 26 insertions(+), 22 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 980c706..3e16b53 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -48,24 +48,23 @@ jobs: with: name: gopher64-windows path: target/release/gopher64.exe - - build-macos: - runs-on: macos-13 - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - name: Install sdl2 headers - run: | - brew install sdl2 - - name: Update rust - run: | - rustup update - - name: Build - run: | - cargo build --release -v - - name: Upload file - uses: actions/upload-artifact@v4 - with: - name: gopher64-mac - path: target/release/gopher64 +# build-macos: +# runs-on: macos-13 +# steps: +# - uses: actions/checkout@v4 +# with: +# submodules: recursive +# - name: Install sdl2 headers +# run: | +# brew install sdl2 +# - name: Update rust +# run: | +# rustup update +# - name: Build +# run: | +# cargo build --release -v +# - name: Upload file +# uses: actions/upload-artifact@v4 +# with: +# name: gopher64-mac +# path: target/release/gopher64 diff --git a/parallel-rdp/wsi_platform.cpp b/parallel-rdp/wsi_platform.cpp index 8bf77ce..e7d2377 100644 --- a/parallel-rdp/wsi_platform.cpp +++ b/parallel-rdp/wsi_platform.cpp @@ -54,6 +54,11 @@ void SDL_WSIPlatform::poll_input() SDL_PumpEvents(); } +void SDL_WSIPlatform::poll_input_async(Granite::InputTrackerHandler *handler) +{ + SDL_PumpEvents(); +} + void SDL_WSIPlatform::set_window(SDL_Window *_window) { window = _window; diff --git a/parallel-rdp/wsi_platform.hpp b/parallel-rdp/wsi_platform.hpp index 9b82fc8..c8dbdf8 100644 --- a/parallel-rdp/wsi_platform.hpp +++ b/parallel-rdp/wsi_platform.hpp @@ -13,10 +13,10 @@ public: uint32_t get_surface_height() override; bool alive(Vulkan::WSI &wsi) override; void poll_input() override; + void poll_input_async(Granite::InputTrackerHandler *handler) override; void set_window(SDL_Window *_window); void do_resize(); private: - VkSurfaceKHR surface; SDL_Window *window; }; From 64dae8970d05f8e5f5eaef7c83b958b6c1a9eef1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 27 May 2024 13:35:34 -0600 Subject: [PATCH 0123/1117] Bump ver to 0.1.7 (#62) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index dc79e6d..68c19c3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.6" +version = "0.1.7" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From 711edef9cc92d38d2ab32102b971f4146128ea19 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 29 May 2024 07:09:16 -0600 Subject: [PATCH 0124/1117] update parallel rdp --- parallel-rdp/parallel-rdp-standalone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parallel-rdp/parallel-rdp-standalone b/parallel-rdp/parallel-rdp-standalone index ff3b858..aba102d 160000 --- a/parallel-rdp/parallel-rdp-standalone +++ b/parallel-rdp/parallel-rdp-standalone @@ -1 +1 @@ -Subproject commit ff3b858dd3a7ca27bd7c91fc894a7acd13fc0bcf +Subproject commit aba102d246b0279dd94a7c431b1d0f1b267cc681 From bbb0bd14476023732dc12a81ba154d93d209d0eb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 29 May 2024 07:26:24 -0600 Subject: [PATCH 0125/1117] re-enable mac os build (#63) * re-enable mac os build * collapse --- .cargo/config.toml | 8 +------- .github/workflows/build.yml | 41 +++++++++++++++++++------------------ 2 files changed, 22 insertions(+), 27 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 2786085..0b2d8b4 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,8 +1,2 @@ -[target.x86_64-unknown-linux-gnu] +[build] rustflags = ["-C", "target-cpu=x86-64-v3"] - -[target.x86_64-pc-windows-msvc] -rustflags = ["-C", "target-cpu=x86-64-v3"] - -[target.x86_64-apple-darwin] -rustflags = ["-C", "target-cpu=x86-64-v2"] diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3e16b53..980c706 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -48,23 +48,24 @@ jobs: with: name: gopher64-windows path: target/release/gopher64.exe -# build-macos: -# runs-on: macos-13 -# steps: -# - uses: actions/checkout@v4 -# with: -# submodules: recursive -# - name: Install sdl2 headers -# run: | -# brew install sdl2 -# - name: Update rust -# run: | -# rustup update -# - name: Build -# run: | -# cargo build --release -v -# - name: Upload file -# uses: actions/upload-artifact@v4 -# with: -# name: gopher64-mac -# path: target/release/gopher64 + + build-macos: + runs-on: macos-13 + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Install sdl2 headers + run: | + brew install sdl2 + - name: Update rust + run: | + rustup update + - name: Build + run: | + cargo build --release -v + - name: Upload file + uses: actions/upload-artifact@v4 + with: + name: gopher64-mac + path: target/release/gopher64 From d644617d623c322b3074390f4a1779bd0b96ee54 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 30 May 2024 19:49:56 -0600 Subject: [PATCH 0126/1117] Fix some crashes with test rom (#64) * Fix some crashes with test rom * fix lint --- src/device/cart_rom.rs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/device/cart_rom.rs b/src/device/cart_rom.rs index 23eaac4..76f17eb 100644 --- a/src/device/cart_rom.rs +++ b/src/device/cart_rom.rs @@ -80,14 +80,16 @@ pub fn dma_read( cart_addr &= CART_MASK as u32; for i in 0..length { - device.cart.rom[(cart_addr + i) as usize] = - device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap]; + if cart_addr + i < device.cart.rom.len() as u32 { + device.cart.rom[(cart_addr + i) as usize] = + device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap]; - device.ui.saves.romsave.0.insert( - (cart_addr + i).to_string(), - serde_json::to_value(device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap]) - .unwrap(), - ); + device.ui.saves.romsave.0.insert( + (cart_addr + i).to_string(), + serde_json::to_value(device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap]) + .unwrap(), + ); + } } device.ui.saves.romsave.1 = true; @@ -127,6 +129,9 @@ pub fn init(device: &mut device::Device, rom_file: Vec) { device.ui.game_hash = calculate_hash(&device.cart.rom); device.ui.game_id = String::from_utf8(device.cart.rom[0x3B..0x3E].to_vec()).unwrap(); + if device.ui.game_id.contains('\0') { + device.ui.game_id = String::from("UNK"); + } } pub fn load_rom_save(device: &mut device::Device) { From f9dbaeeb230dcefe559e8cd56360d18b8469ec93 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 4 Jun 2024 07:51:23 -0600 Subject: [PATCH 0127/1117] Update RDP (#66) --- parallel-rdp/parallel-rdp-standalone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parallel-rdp/parallel-rdp-standalone b/parallel-rdp/parallel-rdp-standalone index aba102d..e8a425f 160000 --- a/parallel-rdp/parallel-rdp-standalone +++ b/parallel-rdp/parallel-rdp-standalone @@ -1 +1 @@ -Subproject commit aba102d246b0279dd94a7c431b1d0f1b267cc681 +Subproject commit e8a425fabc3a25d1855d5f217c6857e5e9bf1af2 From bdd15e340b9e1f0438445f66954577702717b470 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 13 Jun 2024 14:04:32 -0600 Subject: [PATCH 0128/1117] Add annotations suggested by linter (#68) --- src/device/rsp_vu_instructions.rs | 482 ++++++++++++++++++++++-------- src/ui.rs | 1 + src/ui/input.rs | 68 +++-- 3 files changed, 403 insertions(+), 148 deletions(-) diff --git a/src/device/rsp_vu_instructions.rs b/src/device/rsp_vu_instructions.rs index 2e47548..93f015a 100644 --- a/src/device/rsp_vu_instructions.rs +++ b/src/device/rsp_vu_instructions.rs @@ -73,7 +73,9 @@ pub fn get_vpr_element(vpr: u128, element: u8) -> u16 { pub fn vte(device: &device::Device, vt: u32, index: usize) -> __m128i { unsafe { _mm_shuffle_epi8( - std::mem::transmute(device.rsp.cpu.vpr[vt as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vt as usize], + ), device.rsp.cpu.shuffle[index], ) } @@ -84,7 +86,9 @@ pub fn vmulf(device: &mut device::Device, opcode: u32) { let (mut lo, mut hi, mut round, mut sign1, sign2, neq, eq, neg); unsafe { lo = _mm_mullo_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); round = _mm_cmpeq_epi16(_mm_setzero_si128(), _mm_setzero_si128()); @@ -92,7 +96,9 @@ pub fn vmulf(device: &mut device::Device, opcode: u32) { lo = _mm_add_epi16(lo, lo); round = _mm_slli_epi16(round, 15); hi = _mm_mulhi_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); sign2 = _mm_srli_epi16(lo, 15); @@ -100,7 +106,9 @@ pub fn vmulf(device: &mut device::Device, opcode: u32) { sign1 = _mm_add_epi16(sign1, sign2); hi = _mm_slli_epi16(hi, 1); neq = _mm_cmpeq_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); device.rsp.cpu.accm = _mm_add_epi16(hi, sign1); @@ -108,8 +116,10 @@ pub fn vmulf(device: &mut device::Device, opcode: u32) { eq = _mm_and_si128(neq, neg); device.rsp.cpu.acch = _mm_andnot_si128(neq, neg); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute(_mm_add_epi16(device.rsp.cpu.accm, eq)); + device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute::< + std::arch::x86_64::__m128i, + u128, + >(_mm_add_epi16(device.rsp.cpu.accm, eq)); } } @@ -118,7 +128,9 @@ pub fn vmulu(device: &mut device::Device, opcode: u32) { let (mut lo, mut hi, mut round, mut sign1, sign2, neq, neg); unsafe { lo = _mm_mullo_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); round = _mm_cmpeq_epi16(_mm_setzero_si128(), _mm_setzero_si128()); @@ -126,7 +138,9 @@ pub fn vmulu(device: &mut device::Device, opcode: u32) { lo = _mm_add_epi16(lo, lo); round = _mm_slli_epi16(round, 15); hi = _mm_mulhi_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); sign2 = _mm_srli_epi16(lo, 15); @@ -134,7 +148,9 @@ pub fn vmulu(device: &mut device::Device, opcode: u32) { sign1 = _mm_add_epi16(sign1, sign2); hi = _mm_slli_epi16(hi, 1); neq = _mm_cmpeq_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); device.rsp.cpu.accm = _mm_add_epi16(hi, sign1); @@ -143,12 +159,21 @@ pub fn vmulu(device: &mut device::Device, opcode: u32) { device.rsp.cpu.acch = _mm_andnot_si128(neq, neg); hi = _mm_or_si128(device.rsp.cpu.accm, neg); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute(_mm_andnot_si128(device.rsp.cpu.acch, hi)); + std::mem::transmute::(_mm_andnot_si128( + device.rsp.cpu.acch, + hi, + )); } } pub fn vrndp(device: &mut device::Device, opcode: u32) { - let vte = unsafe { std::mem::transmute(vte(device, vt(opcode), ve(opcode) as usize)) }; + let vte = unsafe { + std::mem::transmute::(vte( + device, + vt(opcode), + ve(opcode) as usize, + )) + }; let acch: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.acch) }; let accm: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accm) }; let accl: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accl) }; @@ -184,7 +209,13 @@ pub fn vrndp(device: &mut device::Device, opcode: u32) { } pub fn vmulq(device: &mut device::Device, opcode: u32) { - let vte = unsafe { std::mem::transmute(vte(device, vt(opcode), ve(opcode) as usize)) }; + let vte = unsafe { + std::mem::transmute::(vte( + device, + vt(opcode), + ve(opcode) as usize, + )) + }; let acch: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.acch) }; let accm: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accm) }; let accl: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accl) }; @@ -213,12 +244,15 @@ pub fn vmudl(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_mulhi_epu16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); device.rsp.cpu.accm = _mm_setzero_si128(); device.rsp.cpu.acch = _mm_setzero_si128(); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(device.rsp.cpu.accl); } } @@ -227,21 +261,28 @@ pub fn vmudm(device: &mut device::Device, opcode: u32) { let (sign, vta); unsafe { device.rsp.cpu.accl = _mm_mullo_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); device.rsp.cpu.accm = _mm_mulhi_epu16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); sign = _mm_srai_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), 15, ); vta = _mm_and_si128(vte, sign); device.rsp.cpu.accm = _mm_sub_epi16(device.rsp.cpu.accm, vta); device.rsp.cpu.acch = _mm_srai_epi16(device.rsp.cpu.accm, 15); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accm); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(device.rsp.cpu.accm); } } @@ -250,21 +291,28 @@ pub fn vmudn(device: &mut device::Device, opcode: u32) { let (sign, vsa); unsafe { device.rsp.cpu.accl = _mm_mullo_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); device.rsp.cpu.accm = _mm_mulhi_epu16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); sign = _mm_srai_epi16(vte, 15); vsa = _mm_and_si128( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), sign, ); device.rsp.cpu.accm = _mm_sub_epi16(device.rsp.cpu.accm, vsa); device.rsp.cpu.acch = _mm_srai_epi16(device.rsp.cpu.accm, 15); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(device.rsp.cpu.accl); } } @@ -274,16 +322,21 @@ pub fn vmudh(device: &mut device::Device, opcode: u32) { unsafe { device.rsp.cpu.accl = _mm_setzero_si128(); device.rsp.cpu.accm = _mm_mullo_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); device.rsp.cpu.acch = _mm_mulhi_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); lo = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); hi = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_packs_epi32(lo, hi)); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(_mm_packs_epi32(lo, hi)); } } @@ -292,11 +345,15 @@ pub fn vmacf(device: &mut device::Device, opcode: u32) { let (mut lo, mut md, mut hi, mut carry, mut omask); unsafe { lo = _mm_mullo_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); hi = _mm_mulhi_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); md = _mm_slli_epi16(hi, 1); @@ -321,7 +378,8 @@ pub fn vmacf(device: &mut device::Device, opcode: u32) { lo = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); hi = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_packs_epi32(lo, hi)); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(_mm_packs_epi32(lo, hi)); } } @@ -330,11 +388,15 @@ pub fn vmacu(device: &mut device::Device, opcode: u32) { let (mut lo, mut md, mut hi, mut carry, mut omask, mmask, hmask); unsafe { lo = _mm_mullo_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); hi = _mm_mulhi_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); md = _mm_slli_epi16(hi, 1); @@ -362,12 +424,19 @@ pub fn vmacu(device: &mut device::Device, opcode: u32) { md = _mm_or_si128(mmask, device.rsp.cpu.accm); omask = _mm_cmpgt_epi16(device.rsp.cpu.acch, _mm_setzero_si128()); md = _mm_andnot_si128(hmask, md); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_or_si128(omask, md)); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(_mm_or_si128(omask, md)); } } pub fn vrndn(device: &mut device::Device, opcode: u32) { - let vte = unsafe { std::mem::transmute(vte(device, vt(opcode), ve(opcode) as usize)) }; + let vte = unsafe { + std::mem::transmute::(vte( + device, + vt(opcode), + ve(opcode) as usize, + )) + }; let acch: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.acch) }; let accm: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accm) }; let accl: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accl) }; @@ -431,7 +500,9 @@ pub fn vmadl(device: &mut device::Device, opcode: u32) { let (mut hi, mut omask, nhi, nmd, shi, smd, cmask, cval); unsafe { hi = _mm_mulhi_epu16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); omask = _mm_adds_epu16(device.rsp.cpu.accl, hi); @@ -451,7 +522,11 @@ pub fn vmadl(device: &mut device::Device, opcode: u32) { cmask = _mm_and_si128(smd, shi); cval = _mm_cmpeq_epi16(nhi, _mm_setzero_si128()); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute(_mm_blendv_epi8(cval, device.rsp.cpu.accl, cmask)); + std::mem::transmute::(_mm_blendv_epi8( + cval, + device.rsp.cpu.accl, + cmask, + )); } } @@ -460,15 +535,21 @@ pub fn vmadm(device: &mut device::Device, opcode: u32) { let (mut lo, mut hi, sign, vta, mut omask); unsafe { lo = _mm_mullo_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); hi = _mm_mulhi_epu16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); sign = _mm_srai_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), 15, ); vta = _mm_and_si128(vte, sign); @@ -487,7 +568,8 @@ pub fn vmadm(device: &mut device::Device, opcode: u32) { device.rsp.cpu.acch = _mm_sub_epi16(device.rsp.cpu.acch, omask); lo = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); hi = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_packs_epi32(lo, hi)); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(_mm_packs_epi32(lo, hi)); } } @@ -496,16 +578,22 @@ pub fn vmadn(device: &mut device::Device, opcode: u32) { let (lo, mut hi, sign, vsa, mut omask, nhi, nmd, shi, smd, cmask, cval); unsafe { lo = _mm_mullo_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); hi = _mm_mulhi_epu16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); sign = _mm_srai_epi16(vte, 15); vsa = _mm_and_si128( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), sign, ); hi = _mm_sub_epi16(hi, vsa); @@ -528,7 +616,11 @@ pub fn vmadn(device: &mut device::Device, opcode: u32) { cmask = _mm_and_si128(smd, shi); cval = _mm_cmpeq_epi16(nhi, _mm_setzero_si128()); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute(_mm_blendv_epi8(cval, device.rsp.cpu.accl, cmask)); + std::mem::transmute::(_mm_blendv_epi8( + cval, + device.rsp.cpu.accl, + cmask, + )); } } @@ -537,11 +629,15 @@ pub fn vmadh(device: &mut device::Device, opcode: u32) { let (mut lo, mut hi, mut omask); unsafe { lo = _mm_mullo_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); hi = _mm_mulhi_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); omask = _mm_adds_epu16(device.rsp.cpu.accm, lo); @@ -552,7 +648,8 @@ pub fn vmadh(device: &mut device::Device, opcode: u32) { device.rsp.cpu.acch = _mm_add_epi16(device.rsp.cpu.acch, hi); lo = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); hi = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_packs_epi32(lo, hi)); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(_mm_packs_epi32(lo, hi)); } } @@ -561,20 +658,27 @@ pub fn vadd(device: &mut device::Device, opcode: u32) { let (sum, mut min, max); unsafe { sum = _mm_add_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); device.rsp.cpu.accl = _mm_sub_epi16(sum, device.rsp.cpu.vcol); min = _mm_min_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); max = _mm_max_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); min = _mm_subs_epi16(min, device.rsp.cpu.vcol); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_adds_epi16(min, max)); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(_mm_adds_epi16(min, max)); device.rsp.cpu.vcol = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); } @@ -587,18 +691,26 @@ pub fn vsub(device: &mut device::Device, opcode: u32) { udiff = _mm_sub_epi16(vte, device.rsp.cpu.vcol); sdiff = _mm_subs_epi16(vte, device.rsp.cpu.vcol); device.rsp.cpu.accl = _mm_sub_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), udiff, ); ov = _mm_cmpgt_epi16(sdiff, udiff); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_subs_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), - sdiff, - )); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_adds_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vd(opcode) as usize]), - ov, - )); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(_mm_subs_epi16( + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), + sdiff, + )); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(_mm_adds_epi16( + std::mem::transmute::( + device.rsp.cpu.vpr[vd(opcode) as usize], + ), + ov, + )); device.rsp.cpu.vcol = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); } @@ -608,13 +720,20 @@ pub fn vzero(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_add_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_xor_si128( - std::mem::transmute(device.rsp.cpu.vpr[vd(opcode) as usize]), - std::mem::transmute(device.rsp.cpu.vpr[vd(opcode) as usize]), - )); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(_mm_xor_si128( + std::mem::transmute::( + device.rsp.cpu.vpr[vd(opcode) as usize], + ), + std::mem::transmute::( + device.rsp.cpu.vpr[vd(opcode) as usize], + ), + )); } } @@ -623,26 +742,39 @@ pub fn vabs(device: &mut device::Device, opcode: u32) { let (vs0, slt); unsafe { vs0 = _mm_cmpeq_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), _mm_setzero_si128(), ); slt = _mm_srai_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), 15, ); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_andnot_si128(vs0, vte)); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_xor_si128( - std::mem::transmute(device.rsp.cpu.vpr[vd(opcode) as usize]), - slt, - )); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(_mm_andnot_si128(vs0, vte)); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(_mm_xor_si128( + std::mem::transmute::( + device.rsp.cpu.vpr[vd(opcode) as usize], + ), + slt, + )); device.rsp.cpu.accl = _mm_sub_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vd(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vd(opcode) as usize], + ), slt, ); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(_mm_subs_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vd(opcode) as usize]), - slt, - )); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(_mm_subs_epi16( + std::mem::transmute::( + device.rsp.cpu.vpr[vd(opcode) as usize], + ), + slt, + )); } } @@ -651,17 +783,22 @@ pub fn vaddc(device: &mut device::Device, opcode: u32) { let sum; unsafe { sum = _mm_adds_epu16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); device.rsp.cpu.accl = _mm_add_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); device.rsp.cpu.vcol = _mm_cmpeq_epi16(sum, device.rsp.cpu.accl); device.rsp.cpu.vcol = _mm_cmpeq_epi16(device.rsp.cpu.vcol, _mm_setzero_si128()); device.rsp.cpu.vcoh = _mm_setzero_si128(); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(device.rsp.cpu.accl); } } @@ -670,37 +807,47 @@ pub fn vsubc(device: &mut device::Device, opcode: u32) { let (equal, udiff, diff0); unsafe { udiff = _mm_subs_epu16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); equal = _mm_cmpeq_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); diff0 = _mm_cmpeq_epi16(udiff, _mm_setzero_si128()); device.rsp.cpu.vcoh = _mm_cmpeq_epi16(equal, _mm_setzero_si128()); device.rsp.cpu.vcol = _mm_andnot_si128(equal, diff0); device.rsp.cpu.accl = _mm_sub_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(device.rsp.cpu.accl); } } pub fn vsar(device: &mut device::Device, opcode: u32) { match ve(opcode) { 0x8 => { - device.rsp.cpu.vpr[vd(opcode) as usize] = - unsafe { std::mem::transmute(device.rsp.cpu.acch) }; + device.rsp.cpu.vpr[vd(opcode) as usize] = unsafe { + std::mem::transmute::(device.rsp.cpu.acch) + }; } 0x9 => { - device.rsp.cpu.vpr[vd(opcode) as usize] = - unsafe { std::mem::transmute(device.rsp.cpu.accm) }; + device.rsp.cpu.vpr[vd(opcode) as usize] = unsafe { + std::mem::transmute::(device.rsp.cpu.accm) + }; } 0xa => { - device.rsp.cpu.vpr[vd(opcode) as usize] = - unsafe { std::mem::transmute(device.rsp.cpu.accl) }; + device.rsp.cpu.vpr[vd(opcode) as usize] = unsafe { + std::mem::transmute::(device.rsp.cpu.accl) + }; } _ => { device.rsp.cpu.vpr[vd(opcode) as usize] = 0; @@ -713,11 +860,15 @@ pub fn vlt(device: &mut device::Device, opcode: u32) { let (mut eq, lt); unsafe { eq = _mm_cmpeq_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); lt = _mm_cmplt_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); eq = _mm_and_si128(device.rsp.cpu.vcoh, eq); @@ -725,13 +876,16 @@ pub fn vlt(device: &mut device::Device, opcode: u32) { device.rsp.cpu.vccl = _mm_or_si128(lt, eq); device.rsp.cpu.accl = _mm_blendv_epi8( vte, - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), device.rsp.cpu.vccl, ); device.rsp.cpu.vcch = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(device.rsp.cpu.accl); } } @@ -740,19 +894,24 @@ pub fn veq(device: &mut device::Device, opcode: u32) { let eq; unsafe { eq = _mm_cmpeq_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); device.rsp.cpu.vccl = _mm_andnot_si128(device.rsp.cpu.vcoh, eq); device.rsp.cpu.accl = _mm_blendv_epi8( vte, - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), device.rsp.cpu.vccl, ); device.rsp.cpu.vcch = _mm_setzero_si128(); //unverified device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(device.rsp.cpu.accl); } } @@ -761,7 +920,9 @@ pub fn vne(device: &mut device::Device, opcode: u32) { let (eq, ne); unsafe { eq = _mm_cmpeq_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); ne = _mm_cmpeq_epi16(eq, _mm_setzero_si128()); @@ -769,13 +930,16 @@ pub fn vne(device: &mut device::Device, opcode: u32) { device.rsp.cpu.vccl = _mm_or_si128(device.rsp.cpu.vccl, ne); device.rsp.cpu.accl = _mm_blendv_epi8( vte, - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), device.rsp.cpu.vccl, ); device.rsp.cpu.vcch = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(device.rsp.cpu.accl); } } @@ -784,11 +948,15 @@ pub fn vge(device: &mut device::Device, opcode: u32) { let (mut eq, gt, es); unsafe { eq = _mm_cmpeq_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); gt = _mm_cmpgt_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); es = _mm_and_si128(device.rsp.cpu.vcoh, device.rsp.cpu.vcol); @@ -796,13 +964,16 @@ pub fn vge(device: &mut device::Device, opcode: u32) { device.rsp.cpu.vccl = _mm_or_si128(gt, eq); device.rsp.cpu.accl = _mm_blendv_epi8( vte, - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), device.rsp.cpu.vccl, ); device.rsp.cpu.vcch = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(device.rsp.cpu.accl); } } @@ -826,11 +997,15 @@ pub fn vcl(device: &mut device::Device, opcode: u32) { nvt = _mm_xor_si128(vte, device.rsp.cpu.vcol); nvt = _mm_sub_epi16(nvt, device.rsp.cpu.vcol); diff = _mm_sub_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), nvt, ); ncarry = _mm_adds_epu16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); ncarry = _mm_cmpeq_epi16(diff, ncarry); @@ -843,7 +1018,9 @@ pub fn vcl(device: &mut device::Device, opcode: u32) { leeq = _mm_or_si128(lec1, lec2); geeq = _mm_subs_epu16( vte, - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), ); geeq = _mm_cmpeq_epi16(geeq, _mm_setzero_si128()); le = _mm_andnot_si128(device.rsp.cpu.vcoh, device.rsp.cpu.vcol); @@ -852,7 +1029,9 @@ pub fn vcl(device: &mut device::Device, opcode: u32) { ge = _mm_blendv_epi8(geeq, device.rsp.cpu.vcch, ge); mask = _mm_blendv_epi8(ge, le, device.rsp.cpu.vcol); device.rsp.cpu.accl = _mm_blendv_epi8( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), nvt, mask, ); @@ -861,7 +1040,8 @@ pub fn vcl(device: &mut device::Device, opcode: u32) { device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); device.rsp.cpu.vce = _mm_setzero_si128(); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(device.rsp.cpu.accl); } } @@ -870,14 +1050,18 @@ pub fn vch(device: &mut device::Device, opcode: u32) { let (mut nvt, diff, diff0, vtn, mut dlez, dgez, mask); unsafe { device.rsp.cpu.vcol = _mm_xor_si128( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); device.rsp.cpu.vcol = _mm_cmplt_epi16(device.rsp.cpu.vcol, _mm_setzero_si128()); nvt = _mm_xor_si128(vte, device.rsp.cpu.vcol); nvt = _mm_sub_epi16(nvt, device.rsp.cpu.vcol); diff = _mm_sub_epi16( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), nvt, ); diff0 = _mm_cmpeq_epi16(diff, _mm_setzero_si128()); @@ -897,11 +1081,14 @@ pub fn vch(device: &mut device::Device, opcode: u32) { device.rsp.cpu.vcol, ); device.rsp.cpu.accl = _mm_blendv_epi8( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), nvt, mask, ); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(device.rsp.cpu.accl); } } @@ -910,18 +1097,24 @@ pub fn vcr(device: &mut device::Device, opcode: u32) { let (mut sign, mut dlez, mut dgez, nvt, mask); unsafe { sign = _mm_xor_si128( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); sign = _mm_srai_epi16(sign, 15); dlez = _mm_and_si128( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), sign, ); dlez = _mm_add_epi16(dlez, vte); device.rsp.cpu.vccl = _mm_srai_epi16(dlez, 15); dgez = _mm_or_si128( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), sign, ); dgez = _mm_min_epi16(dgez, vte); @@ -929,11 +1122,14 @@ pub fn vcr(device: &mut device::Device, opcode: u32) { nvt = _mm_xor_si128(vte, sign); mask = _mm_blendv_epi8(device.rsp.cpu.vcch, device.rsp.cpu.vccl, sign); device.rsp.cpu.accl = _mm_blendv_epi8( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), nvt, mask, ); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(device.rsp.cpu.accl); device.rsp.cpu.vcol = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vce = _mm_setzero_si128(); @@ -945,12 +1141,15 @@ pub fn vmrg(device: &mut device::Device, opcode: u32) { unsafe { device.rsp.cpu.accl = _mm_blendv_epi8( vte, - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), device.rsp.cpu.vccl, ); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(device.rsp.cpu.accl); } } @@ -958,10 +1157,13 @@ pub fn vand(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_and_si128( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(device.rsp.cpu.accl); } } @@ -969,11 +1171,14 @@ pub fn vnand(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_and_si128( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); device.rsp.cpu.accl = _mm_xor_si128(device.rsp.cpu.accl, _mm_set1_epi32(-1)); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(device.rsp.cpu.accl); } } @@ -981,10 +1186,13 @@ pub fn vor(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_or_si128( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(device.rsp.cpu.accl); } } @@ -992,11 +1200,14 @@ pub fn vnor(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_or_si128( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); device.rsp.cpu.accl = _mm_xor_si128(device.rsp.cpu.accl, _mm_set1_epi32(-1)); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(device.rsp.cpu.accl); } } @@ -1004,10 +1215,13 @@ pub fn vxor(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_xor_si128( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(device.rsp.cpu.accl); } } @@ -1015,11 +1229,14 @@ pub fn vnxor(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_xor_si128( - std::mem::transmute(device.rsp.cpu.vpr[vs(opcode) as usize]), + std::mem::transmute::( + device.rsp.cpu.vpr[vs(opcode) as usize], + ), vte, ); device.rsp.cpu.accl = _mm_xor_si128(device.rsp.cpu.accl, _mm_set1_epi32(-1)); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::(device.rsp.cpu.accl); } } @@ -1106,7 +1323,10 @@ pub fn vrcph(device: &mut device::Device, opcode: u32) { pub fn vmov(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let value = get_vpr_element(unsafe { std::mem::transmute(vte) }, de(opcode) as u8); + let value = get_vpr_element( + unsafe { std::mem::transmute::(vte) }, + de(opcode) as u8, + ); modify_vpr_element( &mut device.rsp.cpu.vpr[vd(opcode) as usize], value, diff --git a/src/ui.rs b/src/ui.rs index 9ac67dd..5ca3fdd 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -18,6 +18,7 @@ pub struct Ui { pub video_subsystem: Option, pub audio_subsystem: Option, pub joystick_subsystem: Option, + #[allow(dead_code)] pub controller_subsystem: Option, pub window: Option, pub audio_device: Option>, diff --git a/src/ui/input.rs b/src/ui/input.rs index 30a3fc2..e055192 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -87,28 +87,36 @@ pub fn set_axis_from_controller( let mut y = 0.0; if profile.controller_axis[AXIS_LEFT].0 { let axis_position = - controller.axis(std::mem::transmute(profile.controller_axis[AXIS_LEFT].1)); + controller.axis(std::mem::transmute::( + profile.controller_axis[AXIS_LEFT].1, + )); if axis_position as isize * profile.controller_axis[AXIS_LEFT].2 as isize > 0 { x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; } } if profile.controller_axis[AXIS_RIGHT].0 { let axis_position = - controller.axis(std::mem::transmute(profile.controller_axis[AXIS_RIGHT].1)); + controller.axis(std::mem::transmute::( + profile.controller_axis[AXIS_RIGHT].1, + )); if axis_position as isize * profile.controller_axis[AXIS_RIGHT].2 as isize > 0 { x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; } } if profile.controller_axis[AXIS_DOWN].0 { let axis_position = - controller.axis(std::mem::transmute(profile.controller_axis[AXIS_DOWN].1)); + controller.axis(std::mem::transmute::( + profile.controller_axis[AXIS_DOWN].1, + )); if axis_position as isize * profile.controller_axis[AXIS_DOWN].2 as isize > 0 { y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); } } if profile.controller_axis[AXIS_UP].0 { let axis_position = - controller.axis(std::mem::transmute(profile.controller_axis[AXIS_UP].1)); + controller.axis(std::mem::transmute::( + profile.controller_axis[AXIS_UP].1, + )); if axis_position as isize * profile.controller_axis[AXIS_UP].2 as isize > 0 { y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); } @@ -125,22 +133,34 @@ pub fn set_axis_from_keys( let mut x = 0.0; let mut y = 0.0; if profile.keys[AXIS_LEFT].0 - && keyboard_state.is_scancode_pressed(std::mem::transmute(profile.keys[AXIS_LEFT].1)) + && keyboard_state + .is_scancode_pressed(std::mem::transmute::( + profile.keys[AXIS_LEFT].1, + )) { x = -MAX_AXIS_VALUE } if profile.keys[AXIS_RIGHT].0 - && keyboard_state.is_scancode_pressed(std::mem::transmute(profile.keys[AXIS_RIGHT].1)) + && keyboard_state + .is_scancode_pressed(std::mem::transmute::( + profile.keys[AXIS_RIGHT].1, + )) { x = MAX_AXIS_VALUE } if profile.keys[AXIS_DOWN].0 - && keyboard_state.is_scancode_pressed(std::mem::transmute(profile.keys[AXIS_DOWN].1)) + && keyboard_state + .is_scancode_pressed(std::mem::transmute::( + profile.keys[AXIS_DOWN].1, + )) { y = -MAX_AXIS_VALUE } if profile.keys[AXIS_UP].0 - && keyboard_state.is_scancode_pressed(std::mem::transmute(profile.keys[AXIS_UP].1)) + && keyboard_state + .is_scancode_pressed(std::mem::transmute::( + profile.keys[AXIS_UP].1, + )) { y = MAX_AXIS_VALUE } @@ -162,7 +182,9 @@ pub fn set_buttons_from_joystick( let profile_joystick_hat = profile.joystick_hat[i]; if profile_joystick_hat.0 && joystick.hat(profile_joystick_hat.1).unwrap() - == unsafe { std::mem::transmute(profile_joystick_hat.2) } + == unsafe { + std::mem::transmute::(profile_joystick_hat.2) + } { *keys |= 1 << i; } @@ -187,15 +209,20 @@ pub fn set_buttons_from_controller( let profile_controller_button = profile.controller_buttons[i]; if profile_controller_button.0 { unsafe { - *keys |= - (controller.button(std::mem::transmute(profile_controller_button.1)) as u32) << i; + *keys |= (controller.button(std::mem::transmute::( + profile_controller_button.1, + )) as u32) + << i; } } let profile_controller_axis = profile.controller_axis[i]; if profile_controller_axis.0 { - let axis_position = - unsafe { controller.axis(std::mem::transmute(profile_controller_axis.1)) }; + let axis_position = unsafe { + controller.axis(std::mem::transmute::( + profile_controller_axis.1, + )) + }; if axis_position as isize * profile_controller_axis.2 as isize > 0 && axis_position.saturating_abs() > i16::MAX / 2 { @@ -219,8 +246,10 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> u32 { let profile_key = profile.keys[i]; if profile_key.0 { unsafe { - keys |= (keyboard_state.is_scancode_pressed(std::mem::transmute(profile_key.1)) - as u32) + keys |= (keyboard_state + .is_scancode_pressed(std::mem::transmute::( + profile_key.1, + )) as u32) << i; } } @@ -377,8 +406,13 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String) { key_set = true } sdl2::event::Event::JoyHatMotion { hat_idx, state, .. } => { - new_joystick_hat[*value] = - unsafe { (true, hat_idx as u32, std::mem::transmute(state)) }; + new_joystick_hat[*value] = unsafe { + ( + true, + hat_idx as u32, + std::mem::transmute::(state), + ) + }; key_set = true } sdl2::event::Event::JoyAxisMotion { From fb756d5d94030b222204e7b5aa72313e1545b43f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 13 Jun 2024 14:08:01 -0600 Subject: [PATCH 0129/1117] Update parallel rdp (#67) --- parallel-rdp/parallel-rdp-standalone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parallel-rdp/parallel-rdp-standalone b/parallel-rdp/parallel-rdp-standalone index e8a425f..7e5ad30 160000 --- a/parallel-rdp/parallel-rdp-standalone +++ b/parallel-rdp/parallel-rdp-standalone @@ -1 +1 @@ -Subproject commit e8a425fabc3a25d1855d5f217c6857e5e9bf1af2 +Subproject commit 7e5ad30b8c6e5b863c117997c459441649da9bc7 From 74db103659fa39a14e83bbcd8ab8b0b83770b63c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 13 Jun 2024 14:48:29 -0600 Subject: [PATCH 0130/1117] Bump to 0.1.8 (#69) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 68c19c3..3296993 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.7" +version = "0.1.8" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From c6bfea5018f21340a1317fb3fa35991c875c224a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 14 Jun 2024 01:35:46 -0600 Subject: [PATCH 0131/1117] Update rust sdl2 to 0.37 (#72) --- Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 3296993..9da1c3f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,11 +18,11 @@ rfd = "0.14" sha2 = "0.10" rusttype = "0.9" futures = "0.3" -sdl2-sys = "0.36" +sdl2-sys = "0.37" clap = { version = "4.4", features = ["derive"] } [dependencies.sdl2] -version = "0.36" +version = "0.37" default-features = false features = ["static-link","bundled"] From b560944234eb8924c83709151c67a74cea04cc40 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 4 Jul 2024 22:19:05 +0200 Subject: [PATCH 0132/1117] Update eframe to 0.28 (#74) --- Cargo.toml | 2 +- src/main.rs | 2 +- src/ui/gui.rs | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 9da1c3f..84d5de6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ sevenz-rust = "0.6" chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -eframe = "0.27" +eframe = "0.28" rfd = "0.14" sha2 = "0.10" rusttype = "0.9" diff --git a/src/main.rs b/src/main.rs index 2840054..0a4bc05 100644 --- a/src/main.rs +++ b/src/main.rs @@ -126,7 +126,7 @@ fn main() { eframe::run_native( "gopher64", options, - Box::new(|_cc| Box::new(ui::gui::GopherEguiApp::new())), + Box::new(|_cc| Ok(Box::new(ui::gui::GopherEguiApp::new()))), ) .unwrap(); } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 32a6968..e2eaf9d 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -129,7 +129,9 @@ impl eframe::App for GopherEguiApp { } egui::CentralPanel::default().show(ctx, |ui| { - ui.set_enabled(!self.configure_profile); + if self.configure_profile { + ui.disable() + } if ui.button("Open ROM").clicked() { // Spawn dialog on main thread From 877eff0fd4eca215a29a67f963fec4bd1d0ed31b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 25 Aug 2024 16:52:13 +0200 Subject: [PATCH 0133/1117] update parallel rdp --- parallel-rdp/parallel-rdp-standalone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parallel-rdp/parallel-rdp-standalone b/parallel-rdp/parallel-rdp-standalone index 7e5ad30..353ab9d 160000 --- a/parallel-rdp/parallel-rdp-standalone +++ b/parallel-rdp/parallel-rdp-standalone @@ -1 +1 @@ -Subproject commit 7e5ad30b8c6e5b863c117997c459441649da9bc7 +Subproject commit 353ab9d38f3c2add6cbd39e0f6ced7fc16270f60 From 4cbdae2fcefa0396229c569f7f7e0fb3410bc9cb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 25 Aug 2024 17:58:42 +0200 Subject: [PATCH 0134/1117] Bump version to 0.1.9 (#75) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 84d5de6..5efd2af 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.8" +version = "0.1.9" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From e02ac097036d20eb0af867a19daf693240c346f7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 25 Aug 2024 23:01:52 +0200 Subject: [PATCH 0135/1117] Fix build target for optimizations (#76) --- .cargo/config.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 0b2d8b4..5135434 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,2 +1,2 @@ -[build] +[target.'cfg(target_arch = "x86_64")'] rustflags = ["-C", "target-cpu=x86-64-v3"] From ae97990308a00450609465ff7c59c7410fe76cb7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 28 Aug 2024 12:35:52 +0200 Subject: [PATCH 0136/1117] Add x86_64 build flag for parallel-rdp (#77) * Add x86_64 build flag for parallel-rdp * Fix flag * Update build.rs --- build.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/build.rs b/build.rs index 24a6286..af91305 100644 --- a/build.rs +++ b/build.rs @@ -51,6 +51,10 @@ fn main() { #[cfg(target_os = "windows")] { + #[cfg(target_arch = "x86_64")] + { + build.flag("/arch:AVX2"); + } build.flag("-DVK_USE_PLATFORM_WIN32_KHR"); winres::WindowsResource::new() @@ -60,6 +64,10 @@ fn main() { } #[cfg(any(target_os = "linux", target_os = "macos"))] { + #[cfg(target_arch = "x86_64")] + { + build.flag("-march=x86-64-v3"); + } build .flag("-Wno-missing-field-initializers") .flag("-Wno-unused-parameter"); From bc83dd26ee303c05aa24b35a0b1871433d63c51f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 2 Sep 2024 19:57:47 +0200 Subject: [PATCH 0137/1117] Update parallel-rdp (#78) --- parallel-rdp/parallel-rdp-standalone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parallel-rdp/parallel-rdp-standalone b/parallel-rdp/parallel-rdp-standalone index 353ab9d..1a8cbce 160000 --- a/parallel-rdp/parallel-rdp-standalone +++ b/parallel-rdp/parallel-rdp-standalone @@ -1 +1 @@ -Subproject commit 353ab9d38f3c2add6cbd39e0f6ced7fc16270f60 +Subproject commit 1a8cbce2f6dffa8552f21312152eb47dadcb05b6 From e9e1e000c25333ab4752ab5d133ed524e6437d59 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 2 Sep 2024 20:07:27 +0200 Subject: [PATCH 0138/1117] Bump to 0.1.10 (#79) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 5efd2af..2391339 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.9" +version = "0.1.10" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From e87c4736ee24e66d8d75338775a5669bc2596326 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 7 Oct 2024 14:35:12 +0200 Subject: [PATCH 0139/1117] Update parallel-rdp (#80) --- parallel-rdp/parallel-rdp-standalone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parallel-rdp/parallel-rdp-standalone b/parallel-rdp/parallel-rdp-standalone index 1a8cbce..d1cc912 160000 --- a/parallel-rdp/parallel-rdp-standalone +++ b/parallel-rdp/parallel-rdp-standalone @@ -1 +1 @@ -Subproject commit 1a8cbce2f6dffa8552f21312152eb47dadcb05b6 +Subproject commit d1cc912c5c47abaf9b6b155d3cd15255df65cf5b From b1c6dd29104881cce6d8c0c22e9d62dc05de2652 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 17 Oct 2024 20:35:39 +0200 Subject: [PATCH 0140/1117] Add unsafe keyword for extern C (#83) --- src/ui/video.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/video.rs b/src/ui/video.rs index 4d24af6..30b1211 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -1,6 +1,6 @@ use crate::ui; -extern "C" { +unsafe extern "C" { pub fn vk_init(rdram_ptr: usize, rdram_size: u32, fullscreen: u8); pub fn set_sdl_window(window: usize); pub fn rdp_update_screen() -> u8; From 14e3fe2a55a43d8b420fb1effb14c047c09cd36e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 18 Oct 2024 21:14:29 +0200 Subject: [PATCH 0141/1117] Update rfd requirement from 0.14 to 0.15 (#86) Updates the requirements on [rfd](https://github.com/PolyMeilex/rfd) to permit the latest version. - [Release notes](https://github.com/PolyMeilex/rfd/releases) - [Changelog](https://github.com/PolyMeilex/rfd/blob/master/CHANGELOG.md) - [Commits](https://github.com/PolyMeilex/rfd/compare/0.14.0...0.15.0) --- updated-dependencies: - dependency-name: rfd dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 2391339..b5643f6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" eframe = "0.28" -rfd = "0.14" +rfd = "0.15" sha2 = "0.10" rusttype = "0.9" futures = "0.3" From 5e7f562d0d8b2aad01bc31ff22693c44b6a8d0e0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 18 Oct 2024 21:22:51 +0200 Subject: [PATCH 0142/1117] update eframe to 0.29 (#87) --- Cargo.toml | 2 +- src/ui/gui.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b5643f6..b84e67d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ sevenz-rust = "0.6" chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -eframe = "0.28" +eframe = "0.29" rfd = "0.15" sha2 = "0.10" rusttype = "0.9" diff --git a/src/ui/gui.rs b/src/ui/gui.rs index e2eaf9d..f80d533 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -179,7 +179,7 @@ impl eframe::App for GopherEguiApp { for i in 0..4 { ui.label(format!("{}", i + 1)); - egui::ComboBox::from_id_source(format!("profile-combo-{}", i)) + egui::ComboBox::from_id_salt(format!("profile-combo-{}", i)) .selected_text(self.selected_profile[i].clone()) .show_ui(ui, |ui| { for j in 0..self.input_profiles.len() { @@ -196,7 +196,7 @@ impl eframe::App for GopherEguiApp { } else { self.controllers[self.selected_controller[i] as usize].clone() }; - egui::ComboBox::from_id_source(format!("controller-combo-{}", i)) + egui::ComboBox::from_id_salt(format!("controller-combo-{}", i)) .selected_text(controller_text) .show_ui(ui, |ui| { ui.selectable_value( From 8d331e1aed096dba88ae5008b59aafe45a85abc0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Oct 2024 05:07:08 +0200 Subject: [PATCH 0143/1117] Update governor requirement from 0.6 to 0.7 (#88) Updates the requirements on [governor](https://github.com/boinkor-net/governor) to permit the latest version. - [Release notes](https://github.com/boinkor-net/governor/releases) - [Changelog](https://github.com/boinkor-net/governor/blob/master/release.toml) - [Commits](https://github.com/boinkor-net/governor/compare/v0.6.0...v0.7.0) --- updated-dependencies: - dependency-name: governor dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index b84e67d..dd5cbf6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" [dependencies] dirs = "5.0" zip = "2.1" -governor = "0.6" +governor = "0.7" sevenz-rust = "0.6" chrono = "0.4" serde = { version = "1.0", features = ["derive"] } From ca33797973fc8aaff1903093f3336c9e3a9d5121 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 10 Nov 2024 22:53:53 +0100 Subject: [PATCH 0144/1117] Update parallel-rdp (#90) --- parallel-rdp/parallel-rdp-standalone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parallel-rdp/parallel-rdp-standalone b/parallel-rdp/parallel-rdp-standalone index d1cc912..388d70f 160000 --- a/parallel-rdp/parallel-rdp-standalone +++ b/parallel-rdp/parallel-rdp-standalone @@ -1 +1 @@ -Subproject commit d1cc912c5c47abaf9b6b155d3cd15255df65cf5b +Subproject commit 388d70f5835b352d841d9d9e5a08c5de01470f41 From 6dec154351cc877098f694b8b00df0dc1cb8f447 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 10 Nov 2024 23:01:50 +0100 Subject: [PATCH 0145/1117] Bump to 0.1.11 (#91) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index dd5cbf6..f86ebe8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.10" +version = "0.1.11" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From c962589478d4885f1d9ccd7dd79a6b055ef282d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 06:46:17 +0100 Subject: [PATCH 0146/1117] Update governor requirement from 0.7 to 0.8 (#92) Updates the requirements on [governor](https://github.com/boinkor-net/governor) to permit the latest version. - [Release notes](https://github.com/boinkor-net/governor/releases) - [Changelog](https://github.com/boinkor-net/governor/blob/master/release.toml) - [Commits](https://github.com/boinkor-net/governor/compare/v0.7.0...v0.8.0) --- updated-dependencies: - dependency-name: governor dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index f86ebe8..191d73f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" [dependencies] dirs = "5.0" zip = "2.1" -governor = "0.7" +governor = "0.8" sevenz-rust = "0.6" chrono = "0.4" serde = { version = "1.0", features = ["derive"] } From b70c943a43d9ee5eb755b5a523f71a203d475cb0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Dec 2024 06:52:15 +0100 Subject: [PATCH 0147/1117] Update eframe requirement from 0.29 to 0.30 (#93) Updates the requirements on [eframe](https://github.com/emilk/egui) to permit the latest version. - [Release notes](https://github.com/emilk/egui/releases) - [Changelog](https://github.com/emilk/egui/blob/master/CHANGELOG.md) - [Commits](https://github.com/emilk/egui/compare/0.29.0...0.30.0) --- updated-dependencies: - dependency-name: eframe dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 191d73f..0b58e90 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ sevenz-rust = "0.6" chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -eframe = "0.29" +eframe = "0.30" rfd = "0.15" sha2 = "0.10" rusttype = "0.9" From a40e795036fad21a2e19a99627baf298c6ce66bd Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 23 Dec 2024 10:15:30 +0100 Subject: [PATCH 0148/1117] deal with out-of-bounds reads for RDRAM->RSP DMA (#94) --- src/device/rsp_interface.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index 8d99af3..8735de2 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -165,11 +165,14 @@ pub fn do_dma(device: &mut device::Device, dma: RspDma) { while j < count { let mut i = 0; while i < length { - let data = u32::from_ne_bytes( - device.rdram.mem[dram_addr as usize..dram_addr as usize + 4] - .try_into() - .unwrap(), - ); + let mut data = 0; + if dram_addr < device::rdram::RDRAM_SIZE as u32 { + data = u32::from_ne_bytes( + device.rdram.mem[dram_addr as usize..dram_addr as usize + 4] + .try_into() + .unwrap(), + ); + } if offset != 0 { // imem being updated device.rsp.cpu.instructions[((mem_addr & 0xFFF) / 4) as usize].func = From 0eadc38917e77afb87c1e05beee8576a70b97ecf Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 23 Dec 2024 11:20:09 +0100 Subject: [PATCH 0149/1117] fix out-of-bound access in sram (#95) --- src/device/sram.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/device/sram.rs b/src/device/sram.rs index 9e54611..155ae4c 100644 --- a/src/device/sram.rs +++ b/src/device/sram.rs @@ -141,7 +141,7 @@ pub fn dma_read_sram( format_sram(device); - while i < dram_addr + length { + while i < dram_addr + length && i < device::rdram::RDRAM_SIZE as u32 { device.ui.saves.sram.0[j as usize] = device.rdram.mem[i as usize ^ device.byte_swap]; i += 1; j += 1; @@ -191,7 +191,7 @@ pub fn dma_write_sram( format_sram(device); - while i < dram_addr + length { + while i < dram_addr + length && i < device::rdram::RDRAM_SIZE as u32 { device.rdram.mem[i as usize ^ device.byte_swap] = device.ui.saves.sram.0[j as usize]; i += 1; j += 1; From f9de4110ce292e983dc60ece2696ab89b6b3ebcc Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 23 Dec 2024 12:09:18 +0100 Subject: [PATCH 0150/1117] Bump to 0.1.12 (#96) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 0b58e90..ac1f4de 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.11" +version = "0.1.12" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From 5409b0f5d4254328c90efa8291c400a3768c141c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 29 Dec 2024 12:06:59 +0100 Subject: [PATCH 0151/1117] use spin sleep for more accurate VI timing (#97) --- Cargo.toml | 1 + src/device/vi.rs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index ac1f4de..dd3a5f9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,6 +19,7 @@ sha2 = "0.10" rusttype = "0.9" futures = "0.3" sdl2-sys = "0.37" +spin_sleep = "1.3" clap = { version = "4.4", features = ["derive"] } [dependencies.sdl2] diff --git a/src/device/vi.rs b/src/device/vi.rs index 7bef6d7..44d8c99 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -163,7 +163,7 @@ pub fn speed_limiter(device: &device::Device) { if result.is_err() { let outcome = result.unwrap_err(); let dur = outcome.wait_time_from(governor::clock::DefaultClock::default().now()); - std::thread::sleep(dur); + spin_sleep::sleep(dur); device.vi.limiter.as_ref().unwrap().check().unwrap(); } From 2c60f6bf81670ff4a2edbfb9ad6e394ea0ff82e3 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 29 Dec 2024 12:15:01 +0100 Subject: [PATCH 0152/1117] Bumpto 0.1.13 (#98) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index dd3a5f9..16daef2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.12" +version = "0.1.13" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From 415c3eca40a039e280296cfbda38dcd8c0131eaa Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 31 Dec 2024 22:15:39 +0100 Subject: [PATCH 0153/1117] Clippy fixes (#99) --- src/device.rs | 4 ++-- src/device/cart.rs | 2 +- src/device/controller.rs | 4 ++-- src/device/cop1.rs | 3 +-- src/device/cpu_instructions.rs | 10 ++++------ src/device/rsp_su_instructions.rs | 9 ++++----- src/device/rsp_vu_instructions.rs | 8 +++----- src/device/tlb.rs | 3 +-- src/ui/audio.rs | 6 ++---- 9 files changed, 20 insertions(+), 29 deletions(-) diff --git a/src/device.rs b/src/device.rs index fce584c..8d037a3 100644 --- a/src/device.rs +++ b/src/device.rs @@ -89,7 +89,7 @@ fn swap_rom(contents: Vec) -> Vec { fn get_rom_contents(file_path: &std::path::Path) -> Vec { let mut contents = vec![]; - if file_path.extension().unwrap().to_ascii_lowercase() == "zip" { + if file_path.extension().unwrap().eq_ignore_ascii_case("zip") { let zip_file = fs::File::open(file_path).unwrap(); let mut archive = zip::ZipArchive::new(zip_file).unwrap(); for i in 0..archive.len() { @@ -106,7 +106,7 @@ fn get_rom_contents(file_path: &std::path::Path) -> Vec { break; } } - } else if file_path.extension().unwrap().to_ascii_lowercase() == "7z" { + } else if file_path.extension().unwrap().eq_ignore_ascii_case("7z") { let mut archive = sevenz_rust::SevenZReader::open(file_path, sevenz_rust::Password::empty()).unwrap(); diff --git a/src/device/cart.rs b/src/device/cart.rs index d31f7b4..bd5aa8e 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -159,7 +159,7 @@ pub fn af_rtc_write_block(device: &mut device::Device, block: usize, offset: usi match device.pif.ram[block] { 0 => { device.cart.rtc.control = - (device.pif.ram[offset + 1] as u16) << 8 | device.pif.ram[offset] as u16; + ((device.pif.ram[offset + 1] as u16) << 8) | device.pif.ram[offset] as u16; device.pif.ram[status] = 0x00; } 1 => { diff --git a/src/device/controller.rs b/src/device/controller.rs index f73cbf0..5631b8f 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -75,7 +75,7 @@ pub fn pak_read_block( channel: usize, ) { let address = - (device.pif.ram[addr_acrc] as u16) << 8 | (device.pif.ram[addr_acrc + 1] & 0xe0) as u16; + ((device.pif.ram[addr_acrc] as u16) << 8) | (device.pif.ram[addr_acrc + 1] & 0xe0) as u16; let handler = device.pif.channels[channel].pak_handler; if handler.is_some() { @@ -94,7 +94,7 @@ pub fn pak_write_block( channel: usize, ) { let address = - (device.pif.ram[addr_acrc] as u16) << 8 | (device.pif.ram[addr_acrc + 1] & 0xe0) as u16; + ((device.pif.ram[addr_acrc] as u16) << 8) | (device.pif.ram[addr_acrc + 1] & 0xe0) as u16; let handler = device.pif.channels[channel].pak_handler; if handler.is_some() { diff --git a/src/device/cop1.rs b/src/device/cop1.rs index ace74f8..1441674 100644 --- a/src/device/cop1.rs +++ b/src/device/cop1.rs @@ -359,8 +359,7 @@ pub fn set_control_registers_fpu(device: &mut device::Device, index: u32, data: device.cpu.cop1.fcr31 = data & FCR31_WRITE_MASK; // the Cause bits are ANDed with the Enable bits to check for exceptions // "Unimplemented Operation" has no Enable bit and always causes an exception - if (device.cpu.cop1.fcr31 & FCR31_CAUSE_MASK) >> 5 - & (device.cpu.cop1.fcr31 & FCR31_ENABLE_MASK) + if ((device.cpu.cop1.fcr31 & FCR31_CAUSE_MASK) >> 5) & (device.cpu.cop1.fcr31 & FCR31_ENABLE_MASK) != 0 || device.cpu.cop1.fcr31 & FCR31_CAUSE_UNIMP_BIT != 0 { diff --git a/src/device/cpu_instructions.rs b/src/device/cpu_instructions.rs index 36875ab..1dad9e8 100644 --- a/src/device/cpu_instructions.rs +++ b/src/device/cpu_instructions.rs @@ -345,13 +345,12 @@ pub fn lwl(device: &mut device::Device, opcode: u32) { phys_address &= !3; device.cpu.gpr[rt(opcode) as usize] = se32( - ((device.cpu.gpr[rt(opcode) as usize] as u32) & mask - | device::memory::data_read( + ((device.cpu.gpr[rt(opcode) as usize] as u32) & mask | (device::memory::data_read( device, phys_address, device::memory::AccessSize::Word, cached, - ) << shift) as i32, + ) << shift)) as i32, ) } @@ -430,13 +429,12 @@ pub fn lwr(device: &mut device::Device, opcode: u32) { phys_address &= !3; device.cpu.gpr[rt(opcode) as usize] = se32( - ((device.cpu.gpr[rt(opcode) as usize] as u32) & (mask as u32) - | device::memory::data_read( + ((device.cpu.gpr[rt(opcode) as usize] as u32) & (mask as u32) | (device::memory::data_read( device, phys_address, device::memory::AccessSize::Word, cached, - ) >> shift) as i32, + ) >> shift)) as i32, ) } diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index 3db83ff..9a31ab8 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -208,7 +208,7 @@ pub fn lw(device: &mut device::Device, opcode: u32) { w[3] = device.rsp.mem[(address as usize + 3) & 0xFFF]; device.rsp.cpu.gpr[rt(opcode) as usize] = - (w[0] as u32) << 24 | (w[1] as u32) << 16 | (w[2] as u32) << 8 | (w[3] as u32) + ((w[0] as u32) << 24) | ((w[1] as u32) << 16) | ((w[2] as u32) << 8) | (w[3] as u32) } pub fn lbu(device: &mut device::Device, opcode: u32) { @@ -240,7 +240,7 @@ pub fn lwu(device: &mut device::Device, opcode: u32) { w[3] = device.rsp.mem[(address as usize + 3) & 0xFFF]; device.rsp.cpu.gpr[rt(opcode) as usize] = - (w[0] as u32) << 24 | (w[1] as u32) << 16 | (w[2] as u32) << 8 | (w[3] as u32) + ((w[0] as u32) << 24) | ((w[1] as u32) << 16) | ((w[2] as u32) << 8) | (w[3] as u32) } pub fn sb(device: &mut device::Device, opcode: u32) { @@ -486,7 +486,7 @@ pub fn mfc2(device: &mut device::Device, opcode: u32) { device.rsp.cpu.vpr[rd(opcode) as usize], velement(opcode) + 1, ); - device.rsp.cpu.gpr[rt(opcode) as usize] = ((hi as u16) << 8 | (lo as u16)) as i16 as i32 as u32 + device.rsp.cpu.gpr[rt(opcode) as usize] = (((hi as u16) << 8) | (lo as u16)) as i16 as i32 as u32 } pub fn cfc2(device: &mut device::Device, opcode: u32) { @@ -936,8 +936,7 @@ pub fn shv(device: &mut device::Device, opcode: u32) { let mut offset = 0; while offset < 8 { let byte_val = element + offset * 2; - let value = get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], byte_val) << 1 - | get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], byte_val + 1) >> 7; + let value = (get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], byte_val) << 1) | (get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], byte_val + 1) >> 7); device.rsp.mem[((address + ((index + offset * 2) & 15) as u32) & 0xFFF) as usize] = value; offset += 1; } diff --git a/src/device/rsp_vu_instructions.rs b/src/device/rsp_vu_instructions.rs index 93f015a..ee51a96 100644 --- a/src/device/rsp_vu_instructions.rs +++ b/src/device/rsp_vu_instructions.rs @@ -478,7 +478,7 @@ pub fn vmacq(device: &mut device::Device, opcode: u32) { let mut n = 0; while n < 8 { let mut product = - (get_vpr_element(*acch, n) as i32) << 16 | (get_vpr_element(*accm, n) as i32); + ((get_vpr_element(*acch, n) as i32) << 16) | (get_vpr_element(*accm, n) as i32); if product < 0 && (product & (1 << 5)) == 0 { product += 32 } else if product >= 32 && (product & (1 << 5)) == 0 { @@ -1275,8 +1275,7 @@ pub fn vrcpl(device: &mut device::Device, opcode: u32) { let mut result; let vte = vte(device, vt(opcode), ve(opcode) as usize); let input = if device.rsp.cpu.divdp { - (device.rsp.cpu.divin as i32) << 16 - | get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as u16 + ((device.rsp.cpu.divin as i32) << 16) | get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as u16 as i32 } else { get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32 @@ -1371,8 +1370,7 @@ pub fn vrsql(device: &mut device::Device, opcode: u32) { let mut result; let vte = vte(device, vt(opcode), ve(opcode) as usize); let input = if device.rsp.cpu.divdp { - (device.rsp.cpu.divin as i32) << 16 - | get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as u16 + ((device.rsp.cpu.divin as i32) << 16) | get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as u16 as i32 } else { get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32 diff --git a/src/device/tlb.rs b/src/device/tlb.rs index a84e7e4..b6bb9e9 100644 --- a/src/device/tlb.rs +++ b/src/device/tlb.rs @@ -38,8 +38,7 @@ pub fn read(device: &mut device::Device, index: u64) { device.cpu.cop0.tlb_entries[index as usize].mask << 13; device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] = - (device.cpu.cop0.tlb_entries[index as usize].region as u64) << 62 - | device.cpu.cop0.tlb_entries[index as usize].vpn2 << 13 + ((device.cpu.cop0.tlb_entries[index as usize].region as u64) << 62) | (device.cpu.cop0.tlb_entries[index as usize].vpn2 << 13) | (device.cpu.cop0.tlb_entries[index as usize].asid) as u64; device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO0_REG as usize] = diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 00ebc0f..a48da04 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -23,12 +23,10 @@ pub fn play_audio(device: &mut device::Device, dram_addr: usize, length: u64) { let mut i = 0; while i < length as usize / 2 { // Left channel - primary_buffer[i] = device.rdram.mem[dram_addr + (i * 2) + 2] as i16 - | (device.rdram.mem[dram_addr + (i * 2) + 3] as i16) << 8; + primary_buffer[i] = device.rdram.mem[dram_addr + (i * 2) + 2] as i16 | ((device.rdram.mem[dram_addr + (i * 2) + 3] as i16) << 8); // Right channel - primary_buffer[i + 1] = device.rdram.mem[dram_addr + (i * 2)] as i16 - | (device.rdram.mem[dram_addr + (i * 2) + 1] as i16) << 8; + primary_buffer[i + 1] = device.rdram.mem[dram_addr + (i * 2)] as i16 | ((device.rdram.mem[dram_addr + (i * 2) + 1] as i16) << 8); i += 2; } From 12e37b0b29f37ff4b0027f534c2c74d0c4a80683 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 31 Dec 2024 22:21:55 +0100 Subject: [PATCH 0154/1117] code formatting (#100) --- src/device/cop1.rs | 3 ++- src/device/cpu_instructions.rs | 6 ++++-- src/device/rdram.rs | 2 +- src/device/rsp_su_instructions.rs | 6 ++++-- src/device/rsp_vu_instructions.rs | 6 ++++-- src/device/tlb.rs | 20 ++++++++++++++------ src/ui/audio.rs | 6 ++++-- src/ui/video.rs | 3 +-- 8 files changed, 34 insertions(+), 18 deletions(-) diff --git a/src/device/cop1.rs b/src/device/cop1.rs index 1441674..98e007a 100644 --- a/src/device/cop1.rs +++ b/src/device/cop1.rs @@ -359,7 +359,8 @@ pub fn set_control_registers_fpu(device: &mut device::Device, index: u32, data: device.cpu.cop1.fcr31 = data & FCR31_WRITE_MASK; // the Cause bits are ANDed with the Enable bits to check for exceptions // "Unimplemented Operation" has no Enable bit and always causes an exception - if ((device.cpu.cop1.fcr31 & FCR31_CAUSE_MASK) >> 5) & (device.cpu.cop1.fcr31 & FCR31_ENABLE_MASK) + if ((device.cpu.cop1.fcr31 & FCR31_CAUSE_MASK) >> 5) + & (device.cpu.cop1.fcr31 & FCR31_ENABLE_MASK) != 0 || device.cpu.cop1.fcr31 & FCR31_CAUSE_UNIMP_BIT != 0 { diff --git a/src/device/cpu_instructions.rs b/src/device/cpu_instructions.rs index 1dad9e8..57b608d 100644 --- a/src/device/cpu_instructions.rs +++ b/src/device/cpu_instructions.rs @@ -345,7 +345,8 @@ pub fn lwl(device: &mut device::Device, opcode: u32) { phys_address &= !3; device.cpu.gpr[rt(opcode) as usize] = se32( - ((device.cpu.gpr[rt(opcode) as usize] as u32) & mask | (device::memory::data_read( + ((device.cpu.gpr[rt(opcode) as usize] as u32) & mask + | (device::memory::data_read( device, phys_address, device::memory::AccessSize::Word, @@ -429,7 +430,8 @@ pub fn lwr(device: &mut device::Device, opcode: u32) { phys_address &= !3; device.cpu.gpr[rt(opcode) as usize] = se32( - ((device.cpu.gpr[rt(opcode) as usize] as u32) & (mask as u32) | (device::memory::data_read( + ((device.cpu.gpr[rt(opcode) as usize] as u32) & (mask as u32) + | (device::memory::data_read( device, phys_address, device::memory::AccessSize::Word, diff --git a/src/device/rdram.rs b/src/device/rdram.rs index 77685d1..df8ed5c 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -82,5 +82,5 @@ pub fn init(device: &mut device::Device) -> (*mut u8, usize) { } pub fn rdram_calculate_cycles(length: u64) -> u64 { - 31 + (length / 3)// https://hcs64.com/dma.html, https://github.com/rasky/n64-systembench + 31 + (length / 3) // https://hcs64.com/dma.html, https://github.com/rasky/n64-systembench } diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index 9a31ab8..64b95e2 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -486,7 +486,8 @@ pub fn mfc2(device: &mut device::Device, opcode: u32) { device.rsp.cpu.vpr[rd(opcode) as usize], velement(opcode) + 1, ); - device.rsp.cpu.gpr[rt(opcode) as usize] = (((hi as u16) << 8) | (lo as u16)) as i16 as i32 as u32 + device.rsp.cpu.gpr[rt(opcode) as usize] = + (((hi as u16) << 8) | (lo as u16)) as i16 as i32 as u32 } pub fn cfc2(device: &mut device::Device, opcode: u32) { @@ -936,7 +937,8 @@ pub fn shv(device: &mut device::Device, opcode: u32) { let mut offset = 0; while offset < 8 { let byte_val = element + offset * 2; - let value = (get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], byte_val) << 1) | (get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], byte_val + 1) >> 7); + let value = (get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], byte_val) << 1) + | (get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], byte_val + 1) >> 7); device.rsp.mem[((address + ((index + offset * 2) & 15) as u32) & 0xFFF) as usize] = value; offset += 1; } diff --git a/src/device/rsp_vu_instructions.rs b/src/device/rsp_vu_instructions.rs index ee51a96..214456c 100644 --- a/src/device/rsp_vu_instructions.rs +++ b/src/device/rsp_vu_instructions.rs @@ -1275,7 +1275,8 @@ pub fn vrcpl(device: &mut device::Device, opcode: u32) { let mut result; let vte = vte(device, vt(opcode), ve(opcode) as usize); let input = if device.rsp.cpu.divdp { - ((device.rsp.cpu.divin as i32) << 16) | get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as u16 + ((device.rsp.cpu.divin as i32) << 16) + | get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as u16 as i32 } else { get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32 @@ -1370,7 +1371,8 @@ pub fn vrsql(device: &mut device::Device, opcode: u32) { let mut result; let vte = vte(device, vt(opcode), ve(opcode) as usize); let input = if device.rsp.cpu.divdp { - ((device.rsp.cpu.divin as i32) << 16) | get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as u16 + ((device.rsp.cpu.divin as i32) << 16) + | get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as u16 as i32 } else { get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32 diff --git a/src/device/tlb.rs b/src/device/tlb.rs index b6bb9e9..d32bfbb 100644 --- a/src/device/tlb.rs +++ b/src/device/tlb.rs @@ -38,7 +38,8 @@ pub fn read(device: &mut device::Device, index: u64) { device.cpu.cop0.tlb_entries[index as usize].mask << 13; device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] = - ((device.cpu.cop0.tlb_entries[index as usize].region as u64) << 62) | (device.cpu.cop0.tlb_entries[index as usize].vpn2 << 13) + ((device.cpu.cop0.tlb_entries[index as usize].region as u64) << 62) + | (device.cpu.cop0.tlb_entries[index as usize].vpn2 << 13) | (device.cpu.cop0.tlb_entries[index as usize].asid) as u64; device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO0_REG as usize] = @@ -135,7 +136,8 @@ pub fn probe(device: &mut device::Device) { if e.region != (device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] >> 62) as u8 { continue; } - if e.g == 0 && e.asid != device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] as u8 { + if e.g == 0 && e.asid != device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] as u8 + { continue; } device.cpu.cop0.regs[device::cop0::COP0_INDEX_REG as usize] = pos as u64; @@ -184,8 +186,11 @@ pub fn tlb_unmap(device: &mut device::Device, index: u64) { pub fn tlb_map(device: &mut device::Device, index: u64) { let e = &mut device.cpu.cop0.tlb_entries[index as usize]; - if e.v_even != 0 && e.start_even < e.end_even - && !(e.start_even >= 0x80000000 && e.end_even < 0xC0000000) && e.phys_even < 0x20000000 { + if e.v_even != 0 + && e.start_even < e.end_even + && !(e.start_even >= 0x80000000 && e.end_even < 0xC0000000) + && e.phys_even < 0x20000000 + { let mut i = e.start_even; while i < e.end_even { device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].address = @@ -204,8 +209,11 @@ pub fn tlb_map(device: &mut device::Device, index: u64) { } } - if e.v_odd != 0 && e.start_odd < e.end_odd - && !(e.start_odd >= 0x80000000 && e.end_odd < 0xC0000000) && e.phys_odd < 0x20000000 { + if e.v_odd != 0 + && e.start_odd < e.end_odd + && !(e.start_odd >= 0x80000000 && e.end_odd < 0xC0000000) + && e.phys_odd < 0x20000000 + { let mut i = e.start_odd; while i < e.end_odd { device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].address = diff --git a/src/ui/audio.rs b/src/ui/audio.rs index a48da04..96153b8 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -23,10 +23,12 @@ pub fn play_audio(device: &mut device::Device, dram_addr: usize, length: u64) { let mut i = 0; while i < length as usize / 2 { // Left channel - primary_buffer[i] = device.rdram.mem[dram_addr + (i * 2) + 2] as i16 | ((device.rdram.mem[dram_addr + (i * 2) + 3] as i16) << 8); + primary_buffer[i] = device.rdram.mem[dram_addr + (i * 2) + 2] as i16 + | ((device.rdram.mem[dram_addr + (i * 2) + 3] as i16) << 8); // Right channel - primary_buffer[i + 1] = device.rdram.mem[dram_addr + (i * 2)] as i16 | ((device.rdram.mem[dram_addr + (i * 2) + 1] as i16) << 8); + primary_buffer[i + 1] = device.rdram.mem[dram_addr + (i * 2)] as i16 + | ((device.rdram.mem[dram_addr + (i * 2) + 1] as i16) << 8); i += 2; } diff --git a/src/ui/video.rs b/src/ui/video.rs index 30b1211..e4df252 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -30,7 +30,7 @@ pub fn init(ui: &mut ui::Ui, rdram_ptr: *mut u8, rdram_size: usize, fullscreen: pub fn update_screen() -> u8 { // when the window is closed, running is set to 0 - + unsafe { rdp_update_screen() } } @@ -41,7 +41,6 @@ pub fn set_register(reg: u32, value: u32) { } pub fn process_rdp_list(dpc_regs: &mut [u32; 8], sp_dmem: &mut [u8; 8192]) -> u64 { - unsafe { rdp_process_commands(dpc_regs, sp_dmem) } } From e103118407726529de24134465b05f71456f3c3f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 1 Jan 2025 16:46:54 +0100 Subject: [PATCH 0155/1117] Use github action to set up rust (#102) --- .github/workflows/build.yml | 12 +++--------- .github/workflows/lint.yml | 9 +++++---- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 980c706..99b42d2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,9 +19,7 @@ jobs: - name: Install sdl2 headers run: | sudo apt -y install libsdl2-dev - - name: Update rust - run: | - rustup update + - uses: actions-rust-lang/setup-rust-toolchain@v1 - name: Build run: | cargo build --release -v @@ -37,9 +35,7 @@ jobs: - uses: actions/checkout@v4 with: submodules: recursive - - name: Update rust - run: | - rustup update + - uses: actions-rust-lang/setup-rust-toolchain@v1 - name: Build run: | cargo build --release -v @@ -58,9 +54,7 @@ jobs: - name: Install sdl2 headers run: | brew install sdl2 - - name: Update rust - run: | - rustup update + - uses: actions-rust-lang/setup-rust-toolchain@v1 - name: Build run: | cargo build --release -v diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 305812c..329543f 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -19,10 +19,11 @@ jobs: - name: Install sdl2 headers run: | sudo apt -y install libsdl2-dev - - name: Update rust - run: | - rustup update - rustup component add clippy + - uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + components: clippy + - name: Rustfmt Check + uses: actions-rust-lang/rustfmt@v1 - name: Lint run: | cargo clippy -- -Dwarnings From 31bad0416d746a466953a7ac3de9c67f10d5f14f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 6 Jan 2025 10:08:58 +0100 Subject: [PATCH 0156/1117] Code cleanup (#103) --- .vscode/settings.json | 5 -- build.rs | 7 +-- parallel-rdp/interface.cpp | 99 +++++++++++++++++++------------------ parallel-rdp/interface.hpp | 32 +++++++++--- src/device.rs | 20 +++++--- src/device/cpu.rs | 6 +-- src/device/rdp.rs | 6 ++- src/device/rdram.rs | 19 ++++--- src/device/rsp_interface.rs | 2 +- src/device/sram.rs | 4 +- src/device/vi.rs | 14 +++--- src/ui.rs | 1 - src/ui/video.rs | 81 +++++++++++++++++++++++------- 13 files changed, 181 insertions(+), 115 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 08b453c..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "rust-analyzer.linkedProjects": [ - "./Cargo.toml" - ] -} diff --git a/build.rs b/build.rs index af91305..0522db8 100644 --- a/build.rs +++ b/build.rs @@ -1,7 +1,10 @@ fn main() { + println!("cargo:rerun-if-changed=parallel-rdp"); + let mut build = cc::Build::new(); build .cpp(true) + .warnings(false) .std("c++17") .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/command_ring.cpp") .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/rdp_device.cpp") @@ -68,9 +71,7 @@ fn main() { { build.flag("-march=x86-64-v3"); } - build - .flag("-Wno-missing-field-initializers") - .flag("-Wno-unused-parameter"); } + build.compile("parallel-rdp"); } diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 34acc78..ed23ebb 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -51,16 +51,16 @@ enum vi_registers }; static bool fullscreen; -static void *rdram; static SDL_Window *window; static RDP::CommandProcessor *processor; +static SDL_WSIPlatform *wsi_platform; static WSI *wsi; static uint32_t cmd_data[0x00040000 >> 2]; static int cmd_cur; static int cmd_ptr; -static uint8_t emu_running; +static bool emu_running; static uint64_t rdp_sync_signal; -static uint32_t vi_registers[14]; +static GFX_INFO gfx_info; static uint64_t last_frame_counter; static uint64_t frame_counter; @@ -132,18 +132,16 @@ static const unsigned cmd_len_lut[64] = { 1, }; -enum +void rdp_init(void *_window, GFX_INFO _gfx_info, bool _fullscreen) { - MB_RDRAM_DRAM_ALIGNMENT_REQUIREMENT = 64 * 1024 -}; + window = (SDL_Window *)_window; + SDL_SetEventFilter(sdl_event_filter, nullptr); -void vk_init(void *mem_base, uint32_t rdram_size, uint8_t _fullscreen) -{ - fullscreen = _fullscreen != 0; - rdram = mem_base; + gfx_info = _gfx_info; + fullscreen = _fullscreen; bool window_vsync = 0; wsi = new WSI; - SDL_WSIPlatform *wsi_platform = new SDL_WSIPlatform; + wsi_platform = new SDL_WSIPlatform; wsi_platform->set_window(window); wsi->set_platform(wsi_platform); wsi->set_present_mode(window_vsync ? PresentMode::SyncToVBlank : PresentMode::UnlockedMaybeTear); @@ -151,47 +149,61 @@ void vk_init(void *mem_base, uint32_t rdram_size, uint8_t _fullscreen) Context::SystemHandles handles = {}; if (!::Vulkan::Context::init_loader(nullptr)) { - vk_close(); + rdp_close(); } if (!wsi->init_simple(1, handles)) { - vk_close(); + rdp_close(); } RDP::CommandProcessorFlags flags = 0; - processor = new RDP::CommandProcessor(wsi->get_device(), rdram, 0, rdram_size, rdram_size / 2, flags); + processor = new RDP::CommandProcessor(wsi->get_device(), gfx_info.RDRAM, 0, gfx_info.RDRAM_SIZE, gfx_info.RDRAM_SIZE / 2, flags); if (!processor->device_is_supported()) { delete processor; delete wsi; processor = nullptr; - vk_close(); + rdp_close(); } wsi->begin_frame(); - emu_running = 1; + emu_running = true; last_frame_counter = 0; frame_counter = 0; } -void vk_close() +void rdp_close() { - delete processor; - delete wsi; + wsi->end_frame(); + + if (processor) + { + delete processor; + processor = nullptr; + } + if (wsi) + { + delete wsi; + wsi = nullptr; + } + if (wsi_platform) + { + delete wsi_platform; + wsi_platform = nullptr; + } } int sdl_event_filter(void *userdata, SDL_Event *event) { if (event->type == SDL_WINDOWEVENT) { - SDL_WSIPlatform *platform = (SDL_WSIPlatform *)&wsi->get_platform(); switch (event->window.event) { case SDL_WINDOWEVENT_CLOSE: - emu_running = 0; + emu_running = false; break; case SDL_WINDOWEVENT_RESIZED: - platform->do_resize(); + wsi_platform->do_resize(); break; default: break; @@ -202,7 +214,7 @@ int sdl_event_filter(void *userdata, SDL_Event *event) switch (event->key.keysym.scancode) { case SDL_SCANCODE_ESCAPE: - emu_running = 0; + emu_running = false; break; default: break; @@ -212,12 +224,6 @@ int sdl_event_filter(void *userdata, SDL_Event *event) return 0; } -void set_sdl_window(void *_window) -{ - window = (SDL_Window *)_window; - SDL_SetEventFilter(sdl_event_filter, nullptr); -} - static void calculate_viewport(float *x, float *y, float *width, float *height) { bool window_widescreen = false; @@ -301,10 +307,9 @@ static void render_frame(Vulkan::Device &device) void rdp_set_vi_register(uint32_t reg, uint32_t value) { processor->set_vi_register(RDP::VIRegister(reg), value); - vi_registers[reg] = value; } -uint8_t rdp_update_screen() +bool rdp_update_screen() { auto &device = wsi->get_device(); render_frame(device); @@ -353,11 +358,11 @@ static uint32_t viCalculateVerticalHeight(uint32_t vstart, uint32_t yscale) return (delta * scale) / 0x800; } -uint64_t rdp_process_commands(uint32_t *dpc_regs, uint8_t *SP_DMEM) +uint64_t rdp_process_commands() { uint64_t interrupt_timer = 0; - const uint32_t DP_CURRENT = dpc_regs[DPC_CURRENT_REG] & 0x00FFFFF8; - const uint32_t DP_END = dpc_regs[DPC_END_REG] & 0x00FFFFF8; + const uint32_t DP_CURRENT = *gfx_info.DPC_CURRENT_REG & 0x00FFFFF8; + const uint32_t DP_END = *gfx_info.DPC_END_REG & 0x00FFFFF8; int length = DP_END - DP_CURRENT; if (length <= 0) @@ -367,16 +372,16 @@ uint64_t rdp_process_commands(uint32_t *dpc_regs, uint8_t *SP_DMEM) if ((cmd_ptr + length) & ~(0x0003FFFF >> 3)) return interrupt_timer; - dpc_regs[DPC_STATUS_REG] |= DP_STATUS_PIPE_BUSY | DP_STATUS_START_GCLK; + *gfx_info.DPC_STATUS_REG |= DP_STATUS_PIPE_BUSY | DP_STATUS_START_GCLK; uint32_t offset = DP_CURRENT; - if (dpc_regs[DPC_STATUS_REG] & DP_STATUS_XBUS_DMA) + if (*gfx_info.DPC_STATUS_REG & DP_STATUS_XBUS_DMA) { do { offset &= 0xFF8; - cmd_data[2 * cmd_ptr + 0] = SDL_SwapBE32(*reinterpret_cast(SP_DMEM + offset)); - cmd_data[2 * cmd_ptr + 1] = SDL_SwapBE32(*reinterpret_cast(SP_DMEM + offset + 4)); + cmd_data[2 * cmd_ptr + 0] = SDL_SwapBE32(*reinterpret_cast(gfx_info.DMEM + offset)); + cmd_data[2 * cmd_ptr + 1] = SDL_SwapBE32(*reinterpret_cast(gfx_info.DMEM + offset + 4)); offset += sizeof(uint64_t); cmd_ptr++; } while (--length > 0); @@ -392,8 +397,8 @@ uint64_t rdp_process_commands(uint32_t *dpc_regs, uint8_t *SP_DMEM) do { offset &= 0xFFFFF8; - cmd_data[2 * cmd_ptr + 0] = *reinterpret_cast((uint8_t *)rdram + offset); - cmd_data[2 * cmd_ptr + 1] = *reinterpret_cast((uint8_t *)rdram + offset + 4); + cmd_data[2 * cmd_ptr + 0] = *reinterpret_cast(gfx_info.RDRAM + offset); + cmd_data[2 * cmd_ptr + 1] = *reinterpret_cast(gfx_info.RDRAM + offset + 4); offset += sizeof(uint64_t); cmd_ptr++; } while (--length > 0); @@ -408,7 +413,7 @@ uint64_t rdp_process_commands(uint32_t *dpc_regs, uint8_t *SP_DMEM) if (cmd_ptr - cmd_cur - cmd_length < 0) { - dpc_regs[DPC_START_REG] = dpc_regs[DPC_CURRENT_REG] = dpc_regs[DPC_END_REG]; + *gfx_info.DPC_START_REG = *gfx_info.DPC_CURRENT_REG = *gfx_info.DPC_END_REG; return interrupt_timer; } @@ -427,19 +432,19 @@ uint64_t rdp_process_commands(uint32_t *dpc_regs, uint8_t *SP_DMEM) rdp_sync_signal = 0; } - uint32_t width = viCalculateHorizonalWidth(vi_registers[VI_H_START_REG], vi_registers[VI_X_SCALE_REG], vi_registers[VI_WIDTH_REG]); + uint32_t width = viCalculateHorizonalWidth(*gfx_info.VI_H_START_REG, *gfx_info.VI_X_SCALE_REG, *gfx_info.VI_WIDTH_REG); if (width == 0) { width = 320; } - uint32_t height = viCalculateVerticalHeight(vi_registers[VI_V_START_REG], vi_registers[VI_Y_SCALE_REG]); + uint32_t height = viCalculateVerticalHeight(*gfx_info.VI_V_START_REG, *gfx_info.VI_Y_SCALE_REG); if (height == 0) { height = 240; } interrupt_timer = width * height * 4; - dpc_regs[DPC_STATUS_REG] &= ~(DP_STATUS_PIPE_BUSY | DP_STATUS_START_GCLK); + *gfx_info.DPC_STATUS_REG &= ~(DP_STATUS_PIPE_BUSY | DP_STATUS_START_GCLK); } cmd_cur += cmd_length; @@ -447,13 +452,13 @@ uint64_t rdp_process_commands(uint32_t *dpc_regs, uint8_t *SP_DMEM) cmd_ptr = 0; cmd_cur = 0; - dpc_regs[DPC_CURRENT_REG] = dpc_regs[DPC_END_REG]; - dpc_regs[DPC_STATUS_REG] |= DP_STATUS_CBUF_READY; + *gfx_info.DPC_CURRENT_REG = *gfx_info.DPC_END_REG; + *gfx_info.DPC_STATUS_REG |= DP_STATUS_CBUF_READY; return interrupt_timer; } -void full_sync() +void rdp_full_sync() { if (rdp_sync_signal) { diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index cf5abd2..c000293 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -1,17 +1,35 @@ #pragma once #ifdef __cplusplus +#include + extern "C" { #endif - void vk_init(void *mem_base, uint32_t rdram_size, uint8_t fullscreen); - void vk_close(); - void set_sdl_window(void *_window); - void rdp_set_vi_register(uint32_t reg, uint32_t value); - uint8_t rdp_update_screen(); - uint64_t rdp_process_commands(uint32_t *dpc_regs, uint8_t *SP_DMEM); - void full_sync(); + typedef struct + { + uint8_t *RDRAM; + uint8_t *DMEM; + uint32_t RDRAM_SIZE; + uint32_t *DPC_CURRENT_REG; + uint32_t *DPC_START_REG; + uint32_t *DPC_END_REG; + uint32_t *DPC_STATUS_REG; + uint32_t *VI_H_START_REG; + uint32_t *VI_V_START_REG; + uint32_t *VI_X_SCALE_REG; + uint32_t *VI_Y_SCALE_REG; + uint32_t *VI_WIDTH_REG; + } GFX_INFO; + + void rdp_init(void *_window, GFX_INFO _gfx_info, bool fullscreen); + void rdp_close(); + void rdp_set_vi_register(uint32_t reg, uint32_t value); + bool rdp_update_screen(); + uint64_t rdp_process_commands(); + void rdp_full_sync(); + int sdl_event_filter(void *userdata, SDL_Event *event); #ifdef __cplusplus } diff --git a/src/device.rs b/src/device.rs index 8d037a3..63e70be 100644 --- a/src/device.rs +++ b/src/device.rs @@ -40,10 +40,10 @@ pub fn run_game(file_path: &std::path::Path, device: &mut Device, fullscreen: bo cart_rom::init(device, rom_contents); // cart needs to come before rdram // rdram pointer is shared with parallel-rdp - let (rdram_ptr, rdram_size) = rdram::init(device); + rdram::init(device); ui::audio::init(&mut device.ui, 33600); - ui::video::init(&mut device.ui, rdram_ptr, rdram_size, fullscreen); + ui::video::init(device, fullscreen); ui::input::init(&mut device.ui); mi::init(device); @@ -59,6 +59,9 @@ pub fn run_game(file_path: &std::path::Path, device: &mut Device, fullscreen: bo cart_rom::load_rom_save(device); cpu::run(device); + + ui::video::close(); + ui::storage::write_saves(&device.ui); } fn swap_rom(contents: Vec) -> Vec { @@ -144,12 +147,12 @@ pub struct Device { pif: pif::Pif, cart: cart_rom::Cart, memory: memory::Memory, - rsp: rsp_interface::Rsp, - rdp: rdp::Rdp, + pub rsp: rsp_interface::Rsp, + pub rdp: rdp::Rdp, pub rdram: rdram::Rdram, mi: mi::Mi, pi: pi::Pi, - vi: vi::Vi, + pub vi: vi::Vi, ai: ai::Ai, si: si::Si, ri: ri::Ri, @@ -239,7 +242,7 @@ impl Device { llbit: false, lo: 0, hi: 0, - running: 0, + running: false, instrs: [cop0::reserved; 64], special_instrs: [cop0::reserved; 64], regimm_instrs: [cop0::reserved; 32], @@ -292,7 +295,10 @@ impl Device { words: [0; 4], }; 512], }, - rdram: rdram::Rdram { mem: vec![] }, + rdram: rdram::Rdram { + mem: vec![], + size: 0x800000, + }, rsp: rsp_interface::Rsp { cpu: rsp_cpu::Cpu { instructions: [rsp_cpu::Instructions { diff --git a/src/device/cpu.rs b/src/device/cpu.rs index 617ba51..afaa6db 100644 --- a/src/device/cpu.rs +++ b/src/device/cpu.rs @@ -25,7 +25,7 @@ pub struct Cpu { pub pc_phys: u64, pub lo: u64, pub hi: u64, - pub running: u8, + pub running: bool, pub llbit: bool, pub clock_rate: u64, pub instrs: [fn(&mut device::Device, u32); 64], @@ -231,8 +231,8 @@ pub fn in_delay_slot_taken(device: &device::Device) -> bool { } pub fn run(device: &mut device::Device) { - device.cpu.running = 1; - while device.cpu.running == 1 { + device.cpu.running = true; + while device.cpu.running { device.cpu.gpr[0] = 0; // gpr 0 is read only let (cached, err); (device.cpu.pc_phys, cached, err) = device::memory::translate_address( diff --git a/src/device/rdp.rs b/src/device/rdp.rs index abea28f..07feb99 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -92,7 +92,8 @@ pub fn write_regs_dpc(device: &mut device::Device, address: u64, value: u32, mas } pub fn run_rdp(device: &mut device::Device) { - let timer = ui::video::process_rdp_list(&mut device.rdp.regs_dpc, &mut device.rsp.mem); + let timer = ui::video::process_rdp_list(); + if timer != 0 { device::events::create_event( device, @@ -173,6 +174,7 @@ pub fn init(device: &mut device::Device) { } pub fn rdp_interrupt_event(device: &mut device::Device) { - ui::video::rdp_full_sync(); + ui::video::full_sync(); + device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_DP) } diff --git a/src/device/rdram.rs b/src/device/rdram.rs index df8ed5c..79a9418 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -3,10 +3,9 @@ use std::alloc::{alloc_zeroed, Layout}; pub const RDRAM_MASK: usize = 0xFFFFFF; -pub const RDRAM_SIZE: usize = 0x800000; // 8MB - pub struct Rdram { pub mem: Vec, + pub size: u32, } pub fn read_mem_fast( @@ -32,7 +31,7 @@ pub fn read_mem( rdram_calculate_cycles(access_size as u64) / (access_size as u64 / 4), ); let masked_address = address as usize & RDRAM_MASK; - if address < RDRAM_SIZE as u64 { + if address < device.rdram.size as u64 { u32::from_ne_bytes( device.rdram.mem[masked_address..masked_address + 4] .try_into() @@ -44,7 +43,7 @@ pub fn read_mem( } pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { - if address < RDRAM_SIZE as u64 { + if address < device.rdram.size as u64 { let mut data = u32::from_ne_bytes( device.rdram.mem[address as usize..(address + 4) as usize] .try_into() @@ -68,17 +67,17 @@ pub fn write_regs(_device: &mut device::Device, _address: u64, _value: u32, _mas panic!("rdram write reg"); } -pub fn init(device: &mut device::Device) -> (*mut u8, usize) { +pub fn init(device: &mut device::Device) { let alignment = 64 * 1024; - let layout = Layout::from_size_align(RDRAM_SIZE, alignment).expect("Invalid layout"); + let layout = + Layout::from_size_align(device.rdram.size as usize, alignment).expect("Invalid layout"); let ptr = unsafe { alloc_zeroed(layout) }; - device.rdram.mem = unsafe { Vec::from_raw_parts(ptr, RDRAM_SIZE, RDRAM_SIZE) }; + device.rdram.mem = + unsafe { Vec::from_raw_parts(ptr, device.rdram.size as usize, device.rdram.size as usize) }; // hack, skip RDRAM initialization - let data: u32 = RDRAM_SIZE as u32; device.rdram.mem[device.cart.rdram_size_offset..device.cart.rdram_size_offset + 4] - .copy_from_slice(&data.to_ne_bytes()); - (ptr, RDRAM_SIZE) + .copy_from_slice(&device.rdram.size.to_ne_bytes()); } pub fn rdram_calculate_cycles(length: u64) -> u64 { diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index 8735de2..ae98bf3 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -166,7 +166,7 @@ pub fn do_dma(device: &mut device::Device, dma: RspDma) { let mut i = 0; while i < length { let mut data = 0; - if dram_addr < device::rdram::RDRAM_SIZE as u32 { + if dram_addr < device.rdram.size { data = u32::from_ne_bytes( device.rdram.mem[dram_addr as usize..dram_addr as usize + 4] .try_into() diff --git a/src/device/sram.rs b/src/device/sram.rs index 155ae4c..35f715e 100644 --- a/src/device/sram.rs +++ b/src/device/sram.rs @@ -141,7 +141,7 @@ pub fn dma_read_sram( format_sram(device); - while i < dram_addr + length && i < device::rdram::RDRAM_SIZE as u32 { + while i < dram_addr + length && i < device.rdram.size { device.ui.saves.sram.0[j as usize] = device.rdram.mem[i as usize ^ device.byte_swap]; i += 1; j += 1; @@ -191,7 +191,7 @@ pub fn dma_write_sram( format_sram(device); - while i < dram_addr + length && i < device::rdram::RDRAM_SIZE as u32 { + while i < dram_addr + length && i < device.rdram.size { device.rdram.mem[i as usize ^ device.byte_swap] = device.ui.saves.sram.0[j as usize]; i += 1; j += 1; diff --git a/src/device/vi.rs b/src/device/vi.rs index 44d8c99..4e69e57 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -4,18 +4,18 @@ use governor::clock::Clock; pub const VI_STATUS_REG: u32 = 0; //pub const VI_ORIGIN_REG: u32 = 1; -//pub const VI_WIDTH_REG: u32 = 2; +pub const VI_WIDTH_REG: u32 = 2; //pub const VI_V_INTR_REG: u32 = 3; pub const VI_CURRENT_REG: u32 = 4; //pub const VI_BURST_REG: u32 = 5; pub const VI_V_SYNC_REG: u32 = 6; pub const VI_H_SYNC_REG: u32 = 7; //pub const VI_LEAP_REG: u32 = 8; -//pub const VI_H_START_REG: u32 = 9; -//pub const VI_V_START_REG: u32 = 10; +pub const VI_H_START_REG: u32 = 9; +pub const VI_V_START_REG: u32 = 10; //pub const VI_V_BURST_REG: u32 = 11; -//pub const VI_X_SCALE_REG: u32 = 12; -//pub const VI_Y_SCALE_REG: u32 = 13; +pub const VI_X_SCALE_REG: u32 = 12; +pub const VI_Y_SCALE_REG: u32 = 13; pub const VI_REGS_COUNT: u32 = 14; pub struct Vi { @@ -97,21 +97,19 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); set_vertical_interrupt(device); set_expected_refresh_rate(device); - ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) } } VI_H_SYNC_REG => { if device.vi.regs[reg as usize] != value & mask { device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); set_expected_refresh_rate(device); - ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) } } _ => { device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); - ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) } } + ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) } pub fn vertical_interrupt_event(device: &mut device::Device) { diff --git a/src/ui.rs b/src/ui.rs index 5ca3fdd..ab15778 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -26,7 +26,6 @@ pub struct Ui { impl Drop for Ui { fn drop(&mut self) { - storage::write_saves(self); write_config(self); } } diff --git a/src/ui/video.rs b/src/ui/video.rs index e4df252..f65a7fa 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -1,36 +1,79 @@ -use crate::ui; +use crate::device; -unsafe extern "C" { - pub fn vk_init(rdram_ptr: usize, rdram_size: u32, fullscreen: u8); - pub fn set_sdl_window(window: usize); - pub fn rdp_update_screen() -> u8; - pub fn rdp_set_vi_register(reg: u32, value: u32); - pub fn rdp_process_commands(dpc_regs: &mut [u32; 8], SP_DMEM: &mut [u8; 8192]) -> u64; - pub fn full_sync(); +#[repr(C)] +pub struct GfxInfo { + pub rdram: *mut u8, + pub dmem: *mut u8, + pub rdram_size: u32, + pub dpc_current_reg: *mut u32, + pub dpc_start_reg: *mut u32, + pub dpc_end_reg: *mut u32, + pub dpc_status_reg: *mut u32, + pub vi_h_start_reg: *mut u32, + pub vi_v_start_reg: *mut u32, + pub vi_x_scale_reg: *mut u32, + pub vi_y_scale_reg: *mut u32, + pub vi_width_reg: *mut u32, } -pub fn init(ui: &mut ui::Ui, rdram_ptr: *mut u8, rdram_size: usize, fullscreen: bool) { - let mut builder = ui +unsafe extern "C" { + pub fn rdp_init(window: usize, gfx_info: GfxInfo, fullscreen: bool); + pub fn rdp_close(); + pub fn rdp_update_screen() -> bool; + pub fn rdp_set_vi_register(reg: u32, value: u32); + pub fn rdp_process_commands() -> u64; + pub fn rdp_full_sync(); +} + +pub fn init(device: &mut device::Device, fullscreen: bool) { + let mut builder = device + .ui .video_subsystem .as_ref() .unwrap() .window("gopher64", 640, 480); + builder.position_centered().vulkan(); + if fullscreen { builder.fullscreen_desktop(); } else { builder.resizable(); } - ui.window = Some(builder.build().unwrap()); + device.ui.window = Some(builder.build().unwrap()); + + let gfx_info = GfxInfo { + rdram: device.rdram.mem.as_mut_ptr(), + dmem: device.rsp.mem.as_mut_ptr(), + rdram_size: device.rdram.size, + dpc_current_reg: &mut device.rdp.regs_dpc[device::rdp::DPC_CURRENT_REG as usize], + dpc_start_reg: &mut device.rdp.regs_dpc[device::rdp::DPC_START_REG as usize], + dpc_end_reg: &mut device.rdp.regs_dpc[device::rdp::DPC_END_REG as usize], + dpc_status_reg: &mut device.rdp.regs_dpc[device::rdp::DPC_STATUS_REG as usize], + vi_h_start_reg: &mut device.vi.regs[device::vi::VI_H_START_REG as usize], + vi_v_start_reg: &mut device.vi.regs[device::vi::VI_V_START_REG as usize], + vi_x_scale_reg: &mut device.vi.regs[device::vi::VI_X_SCALE_REG as usize], + vi_y_scale_reg: &mut device.vi.regs[device::vi::VI_Y_SCALE_REG as usize], + vi_width_reg: &mut device.vi.regs[device::vi::VI_WIDTH_REG as usize], + }; + unsafe { - set_sdl_window(ui.window.as_mut().unwrap().raw() as usize); - vk_init(rdram_ptr as usize, rdram_size as u32, fullscreen as u8) + rdp_init( + device.ui.window.as_mut().unwrap().raw() as usize, + gfx_info, + fullscreen, + ) } } -pub fn update_screen() -> u8 { - // when the window is closed, running is set to 0 +pub fn close() { + unsafe { + rdp_close(); + } +} +pub fn update_screen() -> bool { + // when the window is closed, running is set to false unsafe { rdp_update_screen() } } @@ -40,13 +83,13 @@ pub fn set_register(reg: u32, value: u32) { } } -pub fn process_rdp_list(dpc_regs: &mut [u32; 8], sp_dmem: &mut [u8; 8192]) -> u64 { - unsafe { rdp_process_commands(dpc_regs, sp_dmem) } +pub fn process_rdp_list() -> u64 { + unsafe { rdp_process_commands() } } -pub fn rdp_full_sync() { +pub fn full_sync() { unsafe { - full_sync(); + rdp_full_sync(); } } From 376fc856609069c2ab8b37db617ec4e92cdb85c1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 6 Jan 2025 18:15:52 +0100 Subject: [PATCH 0157/1117] Fix typo (#104) --- build.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.rs b/build.rs index 0522db8..a374871 100644 --- a/build.rs +++ b/build.rs @@ -1,5 +1,5 @@ fn main() { - println!("cargo:rerun-if-changed=parallel-rdp"); + println!("cargo::rerun-if-changed=parallel-rdp"); let mut build = cc::Build::new(); build From 508ae5bc17466c97f60917ade27a0cfc4f4c116a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 6 Jan 2025 19:08:47 +0100 Subject: [PATCH 0158/1117] build updates (#105) * build updates * more * more * more * more --- .github/workflows/build.yml | 27 ++++++++++++++++++++------- .github/workflows/lint.yml | 5 +---- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 99b42d2..6510f9d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,6 +12,8 @@ env: jobs: build-linux: runs-on: ubuntu-latest + env: + TARGET: x86_64-unknown-linux-gnu steps: - uses: actions/checkout@v4 with: @@ -20,33 +22,41 @@ jobs: run: | sudo apt -y install libsdl2-dev - uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + rustflags: "" - name: Build run: | - cargo build --release -v + cargo build --release -v --target=${{ env.TARGET }} - name: Upload file uses: actions/upload-artifact@v4 with: name: gopher64-linux - path: target/release/gopher64 + path: target/${{ env.TARGET }}/release/gopher64 build-windows: runs-on: windows-latest + env: + TARGET: x86_64-pc-windows-msvc steps: - uses: actions/checkout@v4 with: submodules: recursive - uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + rustflags: "" - name: Build run: | - cargo build --release -v + cargo build --release -v --target=${{ env.TARGET }} - name: Upload file uses: actions/upload-artifact@v4 with: name: gopher64-windows - path: target/release/gopher64.exe + path: target/${{ env.TARGET }}/release/gopher64.exe build-macos: - runs-on: macos-13 + runs-on: macos-latest + env: + TARGET: x86_64-apple-darwin steps: - uses: actions/checkout@v4 with: @@ -55,11 +65,14 @@ jobs: run: | brew install sdl2 - uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + target: ${{ env.TARGET }} + rustflags: "" - name: Build run: | - cargo build --release -v + cargo build --release -v --target=${{ env.TARGET }} - name: Upload file uses: actions/upload-artifact@v4 with: name: gopher64-mac - path: target/release/gopher64 + path: target/${{ env.TARGET }}/release/gopher64 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 329543f..0ffe90d 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -16,12 +16,9 @@ jobs: - uses: actions/checkout@v4 with: submodules: recursive - - name: Install sdl2 headers - run: | - sudo apt -y install libsdl2-dev - uses: actions-rust-lang/setup-rust-toolchain@v1 with: - components: clippy + components: clippy, rustfmt - name: Rustfmt Check uses: actions-rust-lang/rustfmt@v1 - name: Lint From c3dee292a2e62dd864d2176ebae772a2dfb725d0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 6 Jan 2025 19:11:27 +0100 Subject: [PATCH 0159/1117] build update (#106) --- .github/workflows/build.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6510f9d..06f20f8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -61,9 +61,6 @@ jobs: - uses: actions/checkout@v4 with: submodules: recursive - - name: Install sdl2 headers - run: | - brew install sdl2 - uses: actions-rust-lang/setup-rust-toolchain@v1 with: target: ${{ env.TARGET }} From 913ec771bb3e965e4b640f8b62cd4988c0ccd4f8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 7 Jan 2025 09:11:59 +0100 Subject: [PATCH 0160/1117] new speed limiter code (#107) * new speed limiter code * add version --- src/device.rs | 1 + src/device/vi.rs | 10 ++++++++-- src/ui/gui.rs | 2 ++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/device.rs b/src/device.rs index 63e70be..658d7f5 100644 --- a/src/device.rs +++ b/src/device.rs @@ -386,6 +386,7 @@ impl Device { delay: 0, count_per_scanline: 0, limiter: None, + vi_counter: 0, }, flashram: sram::Flashram { status: 0, diff --git a/src/device/vi.rs b/src/device/vi.rs index 4e69e57..9b48712 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -25,10 +25,13 @@ pub struct Vi { pub field: u32, pub limiter: Option, pub count_per_scanline: u64, + pub vi_counter: u64, } //static mut FRAME_COUNTER: u64 = 0; +const LIMIT_BUFFER: u64 = 3; + pub fn set_expected_refresh_rate(device: &mut device::Device) { let expected_refresh_rate = device.vi.clock as f64 / (device.vi.regs[VI_V_SYNC_REG as usize] + 1) as f64 @@ -39,7 +42,7 @@ pub fn set_expected_refresh_rate(device: &mut device::Device) { device.vi.delay / (device.vi.regs[VI_V_SYNC_REG as usize] + 1) as u64; let quota = governor::Quota::with_period(std::time::Duration::from_secs_f64( - 1.0 / expected_refresh_rate, + (1.0 / expected_refresh_rate) * LIMIT_BUFFER as f64, )) .unwrap(); device.vi.limiter = Some(governor::RateLimiter::direct(quota)) @@ -121,7 +124,10 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { } */ - speed_limiter(device); + device.vi.vi_counter += 1; + if device.vi.vi_counter % LIMIT_BUFFER == 0 { + speed_limiter(device); + } /* toggle vi field if in interlaced mode */ device.vi.field ^= (device.vi.regs[VI_STATUS_REG as usize] >> 6) & 0x1; diff --git a/src/ui/gui.rs b/src/ui/gui.rs index f80d533..abfd195 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -215,6 +215,8 @@ impl eframe::App for GopherEguiApp { ui.end_row(); } }); + ui.add_space(32.0); + ui.label(format!("Version: {}", env!("CARGO_PKG_VERSION"))); }); } } From f5d4160a5b77bdb694c36fe3cfbe2b0b062af10f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 7 Jan 2025 09:17:46 +0100 Subject: [PATCH 0161/1117] Bump to 0.1.14 (#108) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 16daef2..475d159 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.13" +version = "0.1.14" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From 774bb672fde1a1b2e5165989fdc209adca139a51 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 7 Jan 2025 12:04:37 +0100 Subject: [PATCH 0162/1117] Fix cart ROM save (#109) --- src/device/pif.rs | 2 +- src/device/si.rs | 2 +- src/ui/storage.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/device/pif.rs b/src/device/pif.rs index a10be7e..b707e62 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -99,7 +99,7 @@ pub fn update_pif_ram(device: &mut device::Device) -> u64 { for k in 0..PIF_CHANNELS_COUNT { active_channels += process_channel(device, k) } - (24000 + (active_channels * 28000)) as u64 + (24000 + (active_channels * 30000)) as u64 } pub fn disable_pif_channel(channel: &mut PifChannel) { diff --git a/src/device/si.rs b/src/device/si.rs index 2a6663f..10643cf 100644 --- a/src/device/si.rs +++ b/src/device/si.rs @@ -59,7 +59,7 @@ pub fn dma_write(device: &mut device::Device) { device::events::create_event( device, device::events::EventType::SI, - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + 5200, //based on https://github.com/rasky/n64-systembench + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + 6000, //based on https://github.com/rasky/n64-systembench dma_event, ) } diff --git a/src/ui/storage.rs b/src/ui/storage.rs index dc2c41a..f708230 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -148,7 +148,7 @@ pub fn load_saves(ui: &mut ui::Ui) { pub fn write_rom_save(ui: &ui::Ui) { let f = std::fs::File::create(ui.paths.romsave_file_path.clone()).unwrap(); - serde_json::to_writer(f, &ui.saves.romsave).unwrap(); + serde_json::to_writer(f, &ui.saves.romsave.0).unwrap(); } pub fn write_saves(ui: &ui::Ui) { From 89673df459e1775f4170990a6858f96332d71d4b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 7 Jan 2025 12:34:36 +0100 Subject: [PATCH 0163/1117] Add multi controller option (#110) --- src/device/pif.rs | 8 ++++++-- src/ui/config.rs | 2 ++ src/ui/gui.rs | 21 +++++++++++++++++++-- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/device/pif.rs b/src/device/pif.rs index b707e62..f400648 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -229,8 +229,12 @@ pub fn init(device: &mut device::Device) { write: device::mempak::write, }; - device.pif.channels[0].pak_handler = Some(mempak_handler); - device.pif.channels[0].process = Some(device::controller::process); + for i in 0..4 { + if device.ui.config.input.controller_enabled[i] { + device.pif.channels[i].pak_handler = Some(mempak_handler); + device.pif.channels[i].process = Some(device::controller::process); + } + } device.pif.channels[4].process = Some(device::cart::process) } diff --git a/src/ui/config.rs b/src/ui/config.rs index 0514ab3..0ace824 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -15,6 +15,7 @@ pub struct Input { pub input_profiles: std::collections::HashMap, pub input_profile_binding: [String; 4], pub controller_assignment: [Option; 4], + pub controller_enabled: [bool; 4], } #[derive(serde::Serialize, serde::Deserialize)] pub struct Config { @@ -35,6 +36,7 @@ impl Config { ], controller_assignment: [None, None, None, None], input_profiles, + controller_enabled: [true, false, false, false], }, } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index abfd195..24946ea 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -9,6 +9,7 @@ pub struct GopherEguiApp { selected_controller: [i32; 4], selected_profile: [String; 4], input_profiles: Vec, + controller_enabled: [bool; 4], } fn get_input_profiles(game_ui: &ui::Ui) -> Vec { @@ -63,11 +64,17 @@ impl GopherEguiApp { selected_controller, controllers: get_controllers(&game_ui), input_profiles: get_input_profiles(&game_ui), + controller_enabled: game_ui.config.input.controller_enabled, } } } -fn save_config(game_ui: &mut ui::Ui, selected_controller: [i32; 4], selected_profile: [String; 4]) { +fn save_config( + game_ui: &mut ui::Ui, + selected_controller: [i32; 4], + selected_profile: [String; 4], + controller_enabled: [bool; 4], +) { let joystick_subsystem = game_ui.joystick_subsystem.as_ref().unwrap(); for (pos, item) in selected_controller.iter().enumerate() { if *item != -1 { @@ -83,6 +90,7 @@ fn save_config(game_ui: &mut ui::Ui, selected_controller: [i32; 4], selected_pro } game_ui.config.input.input_profile_binding = selected_profile; + game_ui.config.input.controller_enabled = controller_enabled; } impl Drop for GopherEguiApp { @@ -92,6 +100,7 @@ impl Drop for GopherEguiApp { &mut game_ui, self.selected_controller, self.selected_profile.clone(), + self.controller_enabled, ); } } @@ -138,6 +147,7 @@ impl eframe::App for GopherEguiApp { let task = rfd::AsyncFileDialog::new().pick_file(); let selected_controller = self.selected_controller; let selected_profile = self.selected_profile.clone(); + let controller_enabled = self.controller_enabled; execute(async move { let file = task.await; @@ -151,7 +161,12 @@ impl eframe::App for GopherEguiApp { } let _ = std::fs::File::create(running_file.clone()); let mut device = device::Device::new(); - save_config(&mut device.ui, selected_controller, selected_profile); + save_config( + &mut device.ui, + selected_controller, + selected_profile, + controller_enabled, + ); device::run_game(std::path::Path::new(file.path()), &mut device, false); let _ = std::fs::remove_file(running_file.clone()); } @@ -173,11 +188,13 @@ impl eframe::App for GopherEguiApp { ui.label("Controller Config:"); egui::Grid::new("some_unique_id").show(ui, |ui| { ui.label("Port"); + ui.label("Enabled"); ui.label("Profile"); ui.label("Controller"); ui.end_row(); for i in 0..4 { ui.label(format!("{}", i + 1)); + ui.checkbox(&mut self.controller_enabled[i], ""); egui::ComboBox::from_id_salt(format!("profile-combo-{}", i)) .selected_text(self.selected_profile[i].clone()) From 24b464fea4ae65b3a4aa43b8df6f3141de9e229d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 7 Jan 2025 13:38:57 +0100 Subject: [PATCH 0164/1117] Add option for high-res graphics (#111) --- parallel-rdp/interface.cpp | 7 ++++++- parallel-rdp/interface.hpp | 2 +- src/ui/config.rs | 6 ++++++ src/ui/gui.rs | 10 ++++++++++ src/ui/video.rs | 3 ++- 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index ed23ebb..5dda251 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -132,7 +132,7 @@ static const unsigned cmd_len_lut[64] = { 1, }; -void rdp_init(void *_window, GFX_INFO _gfx_info, bool _fullscreen) +void rdp_init(void *_window, GFX_INFO _gfx_info, bool _fullscreen, bool _upscale) { window = (SDL_Window *)_window; SDL_SetEventFilter(sdl_event_filter, nullptr); @@ -156,6 +156,11 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, bool _fullscreen) rdp_close(); } RDP::CommandProcessorFlags flags = 0; + if (_upscale) + { + flags |= RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_2X_BIT; + flags |= RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT; + } processor = new RDP::CommandProcessor(wsi->get_device(), gfx_info.RDRAM, 0, gfx_info.RDRAM_SIZE, gfx_info.RDRAM_SIZE / 2, flags); if (!processor->device_is_supported()) diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index c000293..a14a8dc 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -23,7 +23,7 @@ extern "C" uint32_t *VI_WIDTH_REG; } GFX_INFO; - void rdp_init(void *_window, GFX_INFO _gfx_info, bool fullscreen); + void rdp_init(void *_window, GFX_INFO _gfx_info, bool fullscreen, bool _upscale); void rdp_close(); void rdp_set_vi_register(uint32_t reg, uint32_t value); bool rdp_update_screen(); diff --git a/src/ui/config.rs b/src/ui/config.rs index 0ace824..82839da 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -18,8 +18,13 @@ pub struct Input { pub controller_enabled: [bool; 4], } #[derive(serde::Serialize, serde::Deserialize)] +pub struct Video { + pub upscale: bool, +} +#[derive(serde::Serialize, serde::Deserialize)] pub struct Config { pub input: Input, + pub video: Video, } impl Config { @@ -38,6 +43,7 @@ impl Config { input_profiles, controller_enabled: [true, false, false, false], }, + video: Video { upscale: false }, } } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 24946ea..faa2c8a 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -10,6 +10,7 @@ pub struct GopherEguiApp { selected_profile: [String; 4], input_profiles: Vec, controller_enabled: [bool; 4], + upscale: bool, } fn get_input_profiles(game_ui: &ui::Ui) -> Vec { @@ -65,6 +66,7 @@ impl GopherEguiApp { controllers: get_controllers(&game_ui), input_profiles: get_input_profiles(&game_ui), controller_enabled: game_ui.config.input.controller_enabled, + upscale: game_ui.config.video.upscale, } } } @@ -74,6 +76,7 @@ fn save_config( selected_controller: [i32; 4], selected_profile: [String; 4], controller_enabled: [bool; 4], + upscale: bool, ) { let joystick_subsystem = game_ui.joystick_subsystem.as_ref().unwrap(); for (pos, item) in selected_controller.iter().enumerate() { @@ -91,6 +94,8 @@ fn save_config( game_ui.config.input.input_profile_binding = selected_profile; game_ui.config.input.controller_enabled = controller_enabled; + + game_ui.config.video.upscale = upscale; } impl Drop for GopherEguiApp { @@ -101,6 +106,7 @@ impl Drop for GopherEguiApp { self.selected_controller, self.selected_profile.clone(), self.controller_enabled, + self.upscale, ); } } @@ -148,6 +154,7 @@ impl eframe::App for GopherEguiApp { let selected_controller = self.selected_controller; let selected_profile = self.selected_profile.clone(); let controller_enabled = self.controller_enabled; + let upscale = self.upscale; execute(async move { let file = task.await; @@ -166,6 +173,7 @@ impl eframe::App for GopherEguiApp { selected_controller, selected_profile, controller_enabled, + upscale, ); device::run_game(std::path::Path::new(file.path()), &mut device, false); let _ = std::fs::remove_file(running_file.clone()); @@ -233,6 +241,8 @@ impl eframe::App for GopherEguiApp { } }); ui.add_space(32.0); + ui.checkbox(&mut self.upscale, "High-Res Graphics"); + ui.add_space(32.0); ui.label(format!("Version: {}", env!("CARGO_PKG_VERSION"))); }); } diff --git a/src/ui/video.rs b/src/ui/video.rs index f65a7fa..dbf0276 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -17,7 +17,7 @@ pub struct GfxInfo { } unsafe extern "C" { - pub fn rdp_init(window: usize, gfx_info: GfxInfo, fullscreen: bool); + pub fn rdp_init(window: usize, gfx_info: GfxInfo, fullscreen: bool, upscale: bool); pub fn rdp_close(); pub fn rdp_update_screen() -> bool; pub fn rdp_set_vi_register(reg: u32, value: u32); @@ -62,6 +62,7 @@ pub fn init(device: &mut device::Device, fullscreen: bool) { device.ui.window.as_mut().unwrap().raw() as usize, gfx_info, fullscreen, + device.ui.config.video.upscale, ) } } From e02add967655d6dbad4012bbf9bf1055d2a3619d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 7 Jan 2025 19:54:15 +0100 Subject: [PATCH 0165/1117] Remove pub modifier for consts (#114) --- src/device/ai.rs | 16 +++---- src/device/cart.rs | 24 +++++----- src/device/cart_rom.rs | 2 +- src/device/controller.rs | 38 +++++++-------- src/device/cop0.rs | 44 ++++++++--------- src/device/cop1.rs | 40 ++++++++-------- src/device/is_viewer.rs | 2 +- src/device/memory.rs | 32 ++++++------- src/device/mempak.rs | 4 +- src/device/mi.rs | 54 ++++++++++----------- src/device/pi.rs | 34 +++++++------- src/device/rdp.rs | 58 +++++++++++------------ src/device/ri.rs | 16 +++---- src/device/rsp_interface.rs | 94 ++++++++++++++++++------------------- src/device/si.rs | 16 +++---- src/device/sram.rs | 10 ++-- src/device/vi.rs | 18 +++---- src/ui/input.rs | 42 ++++++++--------- 18 files changed, 272 insertions(+), 272 deletions(-) diff --git a/src/device/ai.rs b/src/device/ai.rs index e37b3eb..cb52742 100644 --- a/src/device/ai.rs +++ b/src/device/ai.rs @@ -1,16 +1,16 @@ use crate::device; use crate::ui; -pub const AI_DRAM_ADDR_REG: u32 = 0; -pub const AI_LEN_REG: u32 = 1; -//pub const AI_CONTROL_REG: u32 = 2; -pub const AI_STATUS_REG: u32 = 3; -pub const AI_DACRATE_REG: u32 = 4; -//pub const AI_BITRATE_REG: u32 = 5; +const AI_DRAM_ADDR_REG: u32 = 0; +const AI_LEN_REG: u32 = 1; +// const AI_CONTROL_REG: u32 = 2; +const AI_STATUS_REG: u32 = 3; +const AI_DACRATE_REG: u32 = 4; +// const AI_BITRATE_REG: u32 = 5; pub const AI_REGS_COUNT: u32 = 6; -pub const AI_STATUS_BUSY: u32 = 0x40000000; -pub const AI_STATUS_FULL: u32 = 0x80000000; +const AI_STATUS_BUSY: u32 = 0x40000000; +const AI_STATUS_FULL: u32 = 0x80000000; pub struct Ai { pub regs: [u32; AI_REGS_COUNT as usize], diff --git a/src/device/cart.rs b/src/device/cart.rs index bd5aa8e..e2a688d 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -4,19 +4,19 @@ use chrono::Timelike; use crate::device; use crate::ui; -pub const JCMD_STATUS: u8 = 0x00; -pub const JCMD_EEPROM_READ: u8 = 0x04; -pub const JCMD_EEPROM_WRITE: u8 = 0x05; -pub const JCMD_AF_RTC_STATUS: u8 = 0x06; -pub const JCMD_AF_RTC_READ: u8 = 0x07; -pub const JCMD_AF_RTC_WRITE: u8 = 0x08; -pub const JCMD_RESET: u8 = 0xff; +const JCMD_STATUS: u8 = 0x00; +const JCMD_EEPROM_READ: u8 = 0x04; +const JCMD_EEPROM_WRITE: u8 = 0x05; +const JCMD_AF_RTC_STATUS: u8 = 0x06; +const JCMD_AF_RTC_READ: u8 = 0x07; +const JCMD_AF_RTC_WRITE: u8 = 0x08; +const JCMD_RESET: u8 = 0xff; -pub const JDT_AF_RTC: u16 = 0x1000; /* RTC */ -pub const JDT_EEPROM_4K: u16 = 0x8000; /* 4k EEPROM */ -pub const JDT_EEPROM_16K: u16 = 0xc000; /* 16k EEPROM */ -pub const EEPROM_BLOCK_SIZE: usize = 8; -pub const EEPROM_MAX_SIZE: usize = 0x800; +const JDT_AF_RTC: u16 = 0x1000; /* RTC */ +const JDT_EEPROM_4K: u16 = 0x8000; /* 4k EEPROM */ +const JDT_EEPROM_16K: u16 = 0xc000; /* 16k EEPROM */ +const EEPROM_BLOCK_SIZE: usize = 8; +const EEPROM_MAX_SIZE: usize = 0x800; pub struct AfRtc { pub control: u16, diff --git a/src/device/cart_rom.rs b/src/device/cart_rom.rs index 76f17eb..2358255 100644 --- a/src/device/cart_rom.rs +++ b/src/device/cart_rom.rs @@ -10,7 +10,7 @@ pub enum CicType { CicNus5167, } -pub const CART_MASK: usize = 0xFFFFFFF; +const CART_MASK: usize = 0xFFFFFFF; pub struct Cart { pub rom: Vec, pub is_viewer_buffer: [u8; 0xFFFF], diff --git a/src/device/controller.rs b/src/device/controller.rs index 5631b8f..b4fd019 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -1,26 +1,26 @@ use crate::device; use crate::ui; -pub const JCMD_STATUS: u8 = 0x00; -pub const JCMD_CONTROLLER_READ: u8 = 0x01; -pub const JCMD_PAK_READ: u8 = 0x02; -pub const JCMD_PAK_WRITE: u8 = 0x03; -//pub const JCMD_VRU_READ: u8 = 0x09; -//pub const JCMD_VRU_WRITE: u8 = 0x0A; -//pub const JCMD_VRU_READ_STATUS: u8 = 0x0B; -//pub const JCMD_VRU_WRITE_CONFIG: u8 = 0x0C; -//pub const JCMD_VRU_WRITE_INIT: u8 = 0x0D; -pub const JCMD_RESET: u8 = 0xff; +const JCMD_STATUS: u8 = 0x00; +const JCMD_CONTROLLER_READ: u8 = 0x01; +const JCMD_PAK_READ: u8 = 0x02; +const JCMD_PAK_WRITE: u8 = 0x03; +//const JCMD_VRU_READ: u8 = 0x09; +//const JCMD_VRU_WRITE: u8 = 0x0A; +//const JCMD_VRU_READ_STATUS: u8 = 0x0B; +//const JCMD_VRU_WRITE_CONFIG: u8 = 0x0C; +//const JCMD_VRU_WRITE_INIT: u8 = 0x0D; +const JCMD_RESET: u8 = 0xff; -//pub const JDT_NONE: u16 = 0x0000; -pub const JDT_JOY_ABS_COUNTERS: u16 = 0x0001; /* joystick with absolute coordinates */ -//pub const JDT_JOY_REL_COUNTERS: u16 = 0x0002; /* joystick with relative coordinates (= mouse) */ -pub const JDT_JOY_PORT: u16 = 0x0004; /* has port for external paks */ -//pub const JDT_VRU: u16 = 0x0100; /* VRU */ -pub const PAK_CHUNK_SIZE: usize = 0x20; -pub const CONT_STATUS_PAK_NOT_PRESENT: u8 = 0; -pub const CONT_STATUS_PAK_PRESENT: u8 = 1; -pub const CONT_FLAVOR: u16 = JDT_JOY_ABS_COUNTERS | JDT_JOY_PORT; +//const JDT_NONE: u16 = 0x0000; +const JDT_JOY_ABS_COUNTERS: u16 = 0x0001; /* joystick with absolute coordinates */ +//const JDT_JOY_REL_COUNTERS: u16 = 0x0002; /* joystick with relative coordinates (= mouse) */ +const JDT_JOY_PORT: u16 = 0x0004; /* has port for external paks */ +//const JDT_VRU: u16 = 0x0100; /* VRU */ +const PAK_CHUNK_SIZE: usize = 0x20; +const CONT_STATUS_PAK_NOT_PRESENT: u8 = 0; +const CONT_STATUS_PAK_PRESENT: u8 = 1; +const CONT_FLAVOR: u16 = JDT_JOY_ABS_COUNTERS | JDT_JOY_PORT; #[derive(Copy, Clone)] pub struct PakHandler { diff --git a/src/device/cop0.rs b/src/device/cop0.rs index 09c6b5e..f414e8b 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -1,37 +1,37 @@ use crate::device; pub const COP0_INDEX_REG: u32 = 0; -pub const COP0_RANDOM_REG: u32 = 1; +const COP0_RANDOM_REG: u32 = 1; pub const COP0_ENTRYLO0_REG: u32 = 2; pub const COP0_ENTRYLO1_REG: u32 = 3; pub const COP0_CONTEXT_REG: u32 = 4; pub const COP0_PAGEMASK_REG: u32 = 5; -pub const COP0_WIRED_REG: u32 = 6; -//pub const COP0_UNUSED_7: u32 = 7; +const COP0_WIRED_REG: u32 = 6; +//const COP0_UNUSED_7: u32 = 7; pub const COP0_BADVADDR_REG: u32 = 8; pub const COP0_COUNT_REG: u32 = 9; pub const COP0_ENTRYHI_REG: u32 = 10; -pub const COP0_COMPARE_REG: u32 = 11; +const COP0_COMPARE_REG: u32 = 11; pub const COP0_STATUS_REG: u32 = 12; pub const COP0_CAUSE_REG: u32 = 13; pub const COP0_EPC_REG: u32 = 14; -pub const COP0_PREVID_REG: u32 = 15; -pub const COP0_CONFIG_REG: u32 = 16; +const COP0_PREVID_REG: u32 = 15; +const COP0_CONFIG_REG: u32 = 16; pub const COP0_LLADDR_REG: u32 = 17; -//pub const COP0_WATCHLO_REG: u32 = 18; -//pub const COP0_WATCHHI_REG: u32 = 19; +//const COP0_WATCHLO_REG: u32 = 18; +//const COP0_WATCHHI_REG: u32 = 19; pub const COP0_XCONTEXT_REG: u32 = 20; -//pub const COP0_UNUSED_21: u32 = 21; -//pub const COP0_UNUSED_22: u32 = 22; -//pub const COP0_UNUSED_23: u32 = 23; -//pub const COP0_UNUSED_24: u32 = 24; -//pub const COP0_UNUSED_25: u32 = 25; -//pub const COP0_PARITYERR_REG: u32 = 26; -//pub const COP0_CACHEERR_REG: u32 = 27; +//const COP0_UNUSED_21: u32 = 21; +//const COP0_UNUSED_22: u32 = 22; +//const COP0_UNUSED_23: u32 = 23; +//const COP0_UNUSED_24: u32 = 24; +//const COP0_UNUSED_25: u32 = 25; +//const COP0_PARITYERR_REG: u32 = 26; +//const COP0_CACHEERR_REG: u32 = 27; pub const COP0_TAGLO_REG: u32 = 28; -//pub const COP0_TAGHI_REG: u32 = 29; -pub const COP0_ERROREPC_REG: u32 = 30; -//pub const COP0_UNUSED_31: u32 = 31; +//const COP0_TAGHI_REG: u32 = 29; +const COP0_ERROREPC_REG: u32 = 30; +//const COP0_UNUSED_31: u32 = 31; pub const COP0_REGS_COUNT: u32 = 32; pub const COP0_STATUS_IE: u64 = 1 << 0; @@ -42,12 +42,12 @@ pub const COP0_STATUS_FR: u64 = 1 << 26; pub const COP0_STATUS_CU1: u64 = 1 << 29; pub const COP0_STATUS_CU2: u64 = 1 << 30; -//pub const COP0_CAUSE_EXCCODE_INTR: u64 = 0 << 2; +//const COP0_CAUSE_EXCCODE_INTR: u64 = 0 << 2; pub const COP0_CAUSE_EXCCODE_MOD: u64 = 1 << 2; pub const COP0_CAUSE_EXCCODE_TLBL: u64 = 2 << 2; pub const COP0_CAUSE_EXCCODE_TLBS: u64 = 3 << 2; -//pub const COP0_CAUSE_EXCCODE_ADEL: u64 = 4 << 2; -//pub const COP0_CAUSE_EXCCODE_ADES: u64 = 5 << 2; +//const COP0_CAUSE_EXCCODE_ADEL: u64 = 4 << 2; +//const COP0_CAUSE_EXCCODE_ADES: u64 = 5 << 2; pub const COP0_CAUSE_EXCCODE_SYS: u64 = 8 << 2; pub const COP0_CAUSE_EXCCODE_BP: u64 = 9 << 2; pub const COP0_CAUSE_EXCCODE_RI: u64 = 10 << 2; @@ -55,7 +55,7 @@ pub const COP0_CAUSE_EXCCODE_CPU: u64 = 11 << 2; pub const COP0_CAUSE_EXCCODE_TR: u64 = 13 << 2; pub const COP0_CAUSE_EXCCODE_FPE: u64 = 15 << 2; pub const COP0_CAUSE_IP2: u64 = 1 << 10; -pub const COP0_CAUSE_IP7: u64 = 1 << 15; +const COP0_CAUSE_IP7: u64 = 1 << 15; pub const COP0_CAUSE_BD: u64 = 1 << 31; pub const COP0_CAUSE_CE1: u64 = 1 << 28; diff --git a/src/device/cop1.rs b/src/device/cop1.rs index 98e007a..eb6c7f7 100644 --- a/src/device/cop1.rs +++ b/src/device/cop1.rs @@ -1,27 +1,27 @@ use crate::device; -//pub const FCR31_FLAG_INEXACT_BIT: u32 = 1 << 2; -//pub const FCR31_FLAG_UNDERFLOW_BIT: u32 = 1 << 3; -//pub const FCR31_FLAG_OVERFLOW_BIT: u32 = 1 << 4; -//pub const FCR31_FLAG_DIVBYZERO_BIT: u32 = 1 << 5; -//pub const FCR31_FLAG_INVALID_BIT: u32 = 1 << 6; -//pub const FCR31_ENABLE_INEXACT_BIT: u32 = 1 << 7; -//pub const FCR31_ENABLE_UNDERFLOW_BIT: u32 = 1 << 8; -//pub const FCR31_ENABLE_OVERFLOW_BIT: u32 = 1 << 9; -//pub const FCR31_ENABLE_DIVBYZERO_BIT: u32 = 1 << 10; -//pub const FCR31_ENABLE_INVALID_BIT: u32 = 1 << 11; -//pub const FCR31_CAUSE_INEXACT_BIT: u32 = 1 << 12; -//pub const FCR31_CAUSE_UNDERFLOW_BIT: u32 = 1 << 13; -//pub const FCR31_CAUSE_OVERFLOW_BIT: u32 = 1 << 14; -//pub const FCR31_CAUSE_DIVBYZERO_BIT: u32 = 1 << 15; -//pub const FCR31_CAUSE_INVALID_BIT: u32 = 1 << 16; -pub const FCR31_CAUSE_UNIMP_BIT: u32 = 1 << 17; +//const FCR31_FLAG_INEXACT_BIT: u32 = 1 << 2; +//const FCR31_FLAG_UNDERFLOW_BIT: u32 = 1 << 3; +//const FCR31_FLAG_OVERFLOW_BIT: u32 = 1 << 4; +//const FCR31_FLAG_DIVBYZERO_BIT: u32 = 1 << 5; +//const FCR31_FLAG_INVALID_BIT: u32 = 1 << 6; +//const FCR31_ENABLE_INEXACT_BIT: u32 = 1 << 7; +//const FCR31_ENABLE_UNDERFLOW_BIT: u32 = 1 << 8; +//const FCR31_ENABLE_OVERFLOW_BIT: u32 = 1 << 9; +//const FCR31_ENABLE_DIVBYZERO_BIT: u32 = 1 << 10; +//const FCR31_ENABLE_INVALID_BIT: u32 = 1 << 11; +//const FCR31_CAUSE_INEXACT_BIT: u32 = 1 << 12; +//const FCR31_CAUSE_UNDERFLOW_BIT: u32 = 1 << 13; +//const FCR31_CAUSE_OVERFLOW_BIT: u32 = 1 << 14; +//const FCR31_CAUSE_DIVBYZERO_BIT: u32 = 1 << 15; +//const FCR31_CAUSE_INVALID_BIT: u32 = 1 << 16; +const FCR31_CAUSE_UNIMP_BIT: u32 = 1 << 17; pub const FCR31_CMP_BIT: u32 = 1 << 23; -pub const FCR31_FS_BIT: u32 = 1 << 24; +const FCR31_FS_BIT: u32 = 1 << 24; -pub const FCR31_CAUSE_MASK: u32 = 0b00000000000000111111000000000000; -pub const FCR31_ENABLE_MASK: u32 = 0b00000000000000000000111110000000; -pub const FCR31_WRITE_MASK: u32 = 0b00000001100000111111111111111111; +const FCR31_CAUSE_MASK: u32 = 0b00000000000000111111000000000000; +const FCR31_ENABLE_MASK: u32 = 0b00000000000000000000111110000000; +const FCR31_WRITE_MASK: u32 = 0b00000001100000111111111111111111; pub struct Cop1 { pub fcr0: u32, diff --git a/src/device/is_viewer.rs b/src/device/is_viewer.rs index 0f8767b..9f7b776 100644 --- a/src/device/is_viewer.rs +++ b/src/device/is_viewer.rs @@ -1,6 +1,6 @@ use crate::device; -pub const IS_VIEWER_MASK: usize = 0xFFFF; +const IS_VIEWER_MASK: usize = 0xFFFF; pub fn read_mem( device: &mut device::Device, diff --git a/src/device/memory.rs b/src/device/memory.rs index 4aebc40..cc15fd9 100644 --- a/src/device/memory.rs +++ b/src/device/memory.rs @@ -1,24 +1,24 @@ use crate::device; -pub const MM_RDRAM_DRAM: usize = 0x00000000; -pub const MM_RDRAM_REGS: usize = 0x03f00000; -pub const MM_RSP_MEM: usize = 0x04000000; -pub const MM_RSP_REGS: usize = 0x04040000; -pub const MM_RSP_REGS_PC: usize = 0x04080000; -pub const MM_DPC_REGS: usize = 0x04100000; -pub const MM_DPS_REGS: usize = 0x04200000; -pub const MM_MI_REGS: usize = 0x04300000; -pub const MM_VI_REGS: usize = 0x04400000; -pub const MM_AI_REGS: usize = 0x04500000; -pub const MM_PI_REGS: usize = 0x04600000; -pub const MM_RI_REGS: usize = 0x04700000; -pub const MM_SI_REGS: usize = 0x04800000; +const MM_RDRAM_DRAM: usize = 0x00000000; +const MM_RDRAM_REGS: usize = 0x03f00000; +const MM_RSP_MEM: usize = 0x04000000; +const MM_RSP_REGS: usize = 0x04040000; +const MM_RSP_REGS_PC: usize = 0x04080000; +const MM_DPC_REGS: usize = 0x04100000; +const MM_DPS_REGS: usize = 0x04200000; +const MM_MI_REGS: usize = 0x04300000; +const MM_VI_REGS: usize = 0x04400000; +const MM_AI_REGS: usize = 0x04500000; +const MM_PI_REGS: usize = 0x04600000; +const MM_RI_REGS: usize = 0x04700000; +const MM_SI_REGS: usize = 0x04800000; //const MM_DOM2_ADDR1: usize = 0x05000000; pub const MM_DOM2_ADDR2: usize = 0x08000000; pub const MM_CART_ROM: usize = 0x10000000; -pub const MM_PIF_MEM: usize = 0x1fc00000; -//pub const MM_DOM1_ADDR3: usize = 0x1fd00000; -pub const MM_IS_VIEWER: usize = 0x13ff0000; +const MM_PIF_MEM: usize = 0x1fc00000; +//const MM_DOM1_ADDR3: usize = 0x1fd00000; +const MM_IS_VIEWER: usize = 0x13ff0000; #[derive(PartialEq)] pub enum AccessType { diff --git a/src/device/mempak.rs b/src/device/mempak.rs index 222cd91..c8bd7ef 100644 --- a/src/device/mempak.rs +++ b/src/device/mempak.rs @@ -1,7 +1,7 @@ use crate::device; -pub const MEMPAK_SIZE: usize = 0x8000; -pub const MPK_PAGE_SIZE: usize = 256; +const MEMPAK_SIZE: usize = 0x8000; +const MPK_PAGE_SIZE: usize = 256; pub fn format_mempak(device: &mut device::Device) { if device.ui.saves.mempak.0.len() < MEMPAK_SIZE * 4 { diff --git a/src/device/mi.rs b/src/device/mi.rs index e277b9e..6ca54e7 100644 --- a/src/device/mi.rs +++ b/src/device/mi.rs @@ -1,9 +1,9 @@ use crate::device; -pub const MI_INIT_MODE_REG: u32 = 0; -pub const MI_VERSION_REG: u32 = 1; -pub const MI_INTR_REG: u32 = 2; -pub const MI_INTR_MASK_REG: u32 = 3; +const MI_INIT_MODE_REG: u32 = 0; +const MI_VERSION_REG: u32 = 1; +const MI_INTR_REG: u32 = 2; +const MI_INTR_MASK_REG: u32 = 3; pub const MI_REGS_COUNT: u32 = 4; /* read */ @@ -15,34 +15,34 @@ pub const MI_INTR_PI: u32 = 1 << 4; pub const MI_INTR_DP: u32 = 1 << 5; /* write */ -pub const MI_CLR_SP: u32 = 1 << 0; -pub const MI_SET_SP: u32 = 1 << 1; -pub const MI_CLR_SI: u32 = 1 << 2; -pub const MI_SET_SI: u32 = 1 << 3; -pub const MI_CLR_AI: u32 = 1 << 4; -pub const MI_SET_AI: u32 = 1 << 5; -pub const MI_CLR_VI: u32 = 1 << 6; -pub const MI_SET_VI: u32 = 1 << 7; -pub const MI_CLR_PI: u32 = 1 << 8; -pub const MI_SET_PI: u32 = 1 << 9; -pub const MI_CLR_DP: u32 = 1 << 10; -pub const MI_SET_DP: u32 = 1 << 11; +const MI_CLR_SP: u32 = 1 << 0; +const MI_SET_SP: u32 = 1 << 1; +const MI_CLR_SI: u32 = 1 << 2; +const MI_SET_SI: u32 = 1 << 3; +const MI_CLR_AI: u32 = 1 << 4; +const MI_SET_AI: u32 = 1 << 5; +const MI_CLR_VI: u32 = 1 << 6; +const MI_SET_VI: u32 = 1 << 7; +const MI_CLR_PI: u32 = 1 << 8; +const MI_SET_PI: u32 = 1 << 9; +const MI_CLR_DP: u32 = 1 << 10; +const MI_SET_DP: u32 = 1 << 11; /* mode read */ -pub const MI_INIT_MODE: u32 = 1 << 7; -pub const MI_EBUS_MODE: u32 = 1 << 8; -pub const MI_RDRAM_MODE: u32 = 1 << 9; +const MI_INIT_MODE: u32 = 1 << 7; +const MI_EBUS_MODE: u32 = 1 << 8; +const MI_RDRAM_MODE: u32 = 1 << 9; /* mode write */ -pub const MI_CLR_INIT: u32 = 1 << 7; -pub const MI_SET_INIT: u32 = 1 << 8; -pub const MI_CLR_EBUS: u32 = 1 << 9; -pub const MI_SET_EBUS: u32 = 1 << 10; -pub const MI_CLR_DP_INTR: u32 = 1 << 11; -pub const MI_CLR_RDRAM: u32 = 1 << 12; -pub const MI_SET_RDRAM: u32 = 1 << 13; +const MI_CLR_INIT: u32 = 1 << 7; +const MI_SET_INIT: u32 = 1 << 8; +const MI_CLR_EBUS: u32 = 1 << 9; +const MI_SET_EBUS: u32 = 1 << 10; +const MI_CLR_DP_INTR: u32 = 1 << 11; +const MI_CLR_RDRAM: u32 = 1 << 12; +const MI_SET_RDRAM: u32 = 1 << 13; -pub const MI_INIT_LENGTH_MASK: u32 = 0b1111111; +const MI_INIT_LENGTH_MASK: u32 = 0b1111111; pub struct Mi { pub regs: [u32; MI_REGS_COUNT as usize], diff --git a/src/device/pi.rs b/src/device/pi.rs index 7f59cdc..dcbf518 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -1,29 +1,29 @@ use crate::device; -pub const PI_DRAM_ADDR_REG: u32 = 0; -pub const PI_CART_ADDR_REG: u32 = 1; -pub const PI_RD_LEN_REG: u32 = 2; -pub const PI_WR_LEN_REG: u32 = 3; +const PI_DRAM_ADDR_REG: u32 = 0; +const PI_CART_ADDR_REG: u32 = 1; +const PI_RD_LEN_REG: u32 = 2; +const PI_WR_LEN_REG: u32 = 3; pub const PI_STATUS_REG: u32 = 4; -pub const PI_BSD_DOM1_LAT_REG: u32 = 5; -pub const PI_BSD_DOM1_PWD_REG: u32 = 6; -pub const PI_BSD_DOM1_PGS_REG: u32 = 7; -pub const PI_BSD_DOM1_RLS_REG: u32 = 8; -pub const PI_BSD_DOM2_LAT_REG: u32 = 9; -pub const PI_BSD_DOM2_PWD_REG: u32 = 10; -pub const PI_BSD_DOM2_PGS_REG: u32 = 11; -pub const PI_BSD_DOM2_RLS_REG: u32 = 12; +const PI_BSD_DOM1_LAT_REG: u32 = 5; +const PI_BSD_DOM1_PWD_REG: u32 = 6; +const PI_BSD_DOM1_PGS_REG: u32 = 7; +const PI_BSD_DOM1_RLS_REG: u32 = 8; +const PI_BSD_DOM2_LAT_REG: u32 = 9; +const PI_BSD_DOM2_PWD_REG: u32 = 10; +const PI_BSD_DOM2_PGS_REG: u32 = 11; +const PI_BSD_DOM2_RLS_REG: u32 = 12; pub const PI_REGS_COUNT: u32 = 13; /* PI_STATUS - read */ -pub const PI_STATUS_DMA_BUSY: u32 = 1 << 0; +const PI_STATUS_DMA_BUSY: u32 = 1 << 0; pub const PI_STATUS_IO_BUSY: u32 = 1 << 1; -//pub const PI_STATUS_ERROR: u32 = 1 << 2; -pub const PI_STATUS_INTERRUPT: u32 = 1 << 3; +//const PI_STATUS_ERROR: u32 = 1 << 2; +const PI_STATUS_INTERRUPT: u32 = 1 << 3; /* PI_STATUS - write */ -pub const PI_STATUS_RESET: u32 = 1 << 0; -pub const PI_STATUS_CLR_INTR: u32 = 1 << 1; +const PI_STATUS_RESET: u32 = 1 << 0; +const PI_STATUS_CLR_INTR: u32 = 1 << 1; pub struct Pi { pub regs: [u32; PI_REGS_COUNT as usize], diff --git a/src/device/rdp.rs b/src/device/rdp.rs index 07feb99..2b323ca 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -5,41 +5,41 @@ pub const DPC_START_REG: u32 = 0; pub const DPC_END_REG: u32 = 1; pub const DPC_CURRENT_REG: u32 = 2; pub const DPC_STATUS_REG: u32 = 3; -pub const DPC_CLOCK_REG: u32 = 4; -pub const DPC_BUFBUSY_REG: u32 = 5; -pub const DPC_PIPEBUSY_REG: u32 = 6; -pub const DPC_TMEM_REG: u32 = 7; +const DPC_CLOCK_REG: u32 = 4; +const DPC_BUFBUSY_REG: u32 = 5; +const DPC_PIPEBUSY_REG: u32 = 6; +const DPC_TMEM_REG: u32 = 7; pub const DPC_REGS_COUNT: u32 = 8; -//pub const DPS_TBIST_REG: u32 = 0; -//pub const DPS_TEST_MODE_REG: u32 = 1; -//pub const DPS_BUFTEST_ADDR_REG: u32 = 2; -//pub const DPS_BUFTEST_DATA_REG: u32 = 3; +//const DPS_TBIST_REG: u32 = 0; +//const DPS_TEST_MODE_REG: u32 = 1; +//const DPS_BUFTEST_ADDR_REG: u32 = 2; +//const DPS_BUFTEST_DATA_REG: u32 = 3; pub const DPS_REGS_COUNT: u32 = 4; /* DPC status - read */ -pub const DPC_STATUS_XBUS_DMEM_DMA: u32 = 1 << 0; -pub const DPC_STATUS_FREEZE: u32 = 1 << 1; -pub const DPC_STATUS_FLUSH: u32 = 1 << 2; -pub const DPC_STATUS_START_GCLK: u32 = 1 << 3; -pub const DPC_STATUS_TMEM_BUSY: u32 = 1 << 4; -pub const DPC_STATUS_PIPE_BUSY: u32 = 1 << 5; -pub const DPC_STATUS_CMD_BUSY: u32 = 1 << 6; -pub const DPC_STATUS_CBUF_READY: u32 = 1 << 7; -//pub const DPC_STATUS_DMA_BUSY: u32 = 1 << 8; -//pub const DPC_STATUS_END_VALID: u32 = 1 << 9; -pub const DPC_STATUS_START_VALID: u32 = 1 << 10; +const DPC_STATUS_XBUS_DMEM_DMA: u32 = 1 << 0; +const DPC_STATUS_FREEZE: u32 = 1 << 1; +const DPC_STATUS_FLUSH: u32 = 1 << 2; +const DPC_STATUS_START_GCLK: u32 = 1 << 3; +const DPC_STATUS_TMEM_BUSY: u32 = 1 << 4; +const DPC_STATUS_PIPE_BUSY: u32 = 1 << 5; +const DPC_STATUS_CMD_BUSY: u32 = 1 << 6; +const DPC_STATUS_CBUF_READY: u32 = 1 << 7; +//const DPC_STATUS_DMA_BUSY: u32 = 1 << 8; +//const DPC_STATUS_END_VALID: u32 = 1 << 9; +const DPC_STATUS_START_VALID: u32 = 1 << 10; /* DPC status - write */ -pub const DPC_CLR_XBUS_DMEM_DMA: u32 = 1 << 0; -pub const DPC_SET_XBUS_DMEM_DMA: u32 = 1 << 1; -pub const DPC_CLR_FREEZE: u32 = 1 << 2; -pub const DPC_SET_FREEZE: u32 = 1 << 3; -pub const DPC_CLR_FLUSH: u32 = 1 << 4; -pub const DPC_SET_FLUSH: u32 = 1 << 5; -pub const DPC_CLR_TMEM_CTR: u32 = 1 << 6; -pub const DPC_CLR_PIPE_CTR: u32 = 1 << 7; -pub const DPC_CLR_CMD_CTR: u32 = 1 << 8; -pub const DPC_CLR_CLOCK_CTR: u32 = 1 << 9; +const DPC_CLR_XBUS_DMEM_DMA: u32 = 1 << 0; +const DPC_SET_XBUS_DMEM_DMA: u32 = 1 << 1; +const DPC_CLR_FREEZE: u32 = 1 << 2; +const DPC_SET_FREEZE: u32 = 1 << 3; +const DPC_CLR_FLUSH: u32 = 1 << 4; +const DPC_SET_FLUSH: u32 = 1 << 5; +const DPC_CLR_TMEM_CTR: u32 = 1 << 6; +const DPC_CLR_PIPE_CTR: u32 = 1 << 7; +const DPC_CLR_CMD_CTR: u32 = 1 << 8; +const DPC_CLR_CLOCK_CTR: u32 = 1 << 9; pub struct Rdp { pub regs_dpc: [u32; DPC_REGS_COUNT as usize], diff --git a/src/device/ri.rs b/src/device/ri.rs index 8a0a77b..bfc1844 100644 --- a/src/device/ri.rs +++ b/src/device/ri.rs @@ -1,13 +1,13 @@ use crate::device; -//pub const RI_MODE_REG: u32 = 0; -//pub const RI_CONFIG_REG: u32 = 1; -//pub const RI_CURRENT_LOAD_REG: u32 = 2; -pub const RI_SELECT_REG: u32 = 3; -//pub const RI_REFRESH_REG: u32 = 4; -//pub const RI_LATENCY_REG: u32 = 5; -//pub const RI_ERROR_REG: u32 = 6; -//pub const RI_WERROR_REG: u32 = 7; +//const RI_MODE_REG: u32 = 0; +//const RI_CONFIG_REG: u32 = 1; +//const RI_CURRENT_LOAD_REG: u32 = 2; +const RI_SELECT_REG: u32 = 3; +//const RI_REFRESH_REG: u32 = 4; +//const RI_LATENCY_REG: u32 = 5; +//const RI_ERROR_REG: u32 = 6; +//const RI_WERROR_REG: u32 = 7; pub const RI_REGS_COUNT: u32 = 8; pub struct Ri { diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index ae98bf3..275c089 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -1,64 +1,64 @@ use crate::device; -pub const SP_MEM_ADDR_REG: u32 = 0; -pub const SP_DRAM_ADDR_REG: u32 = 1; -pub const SP_RD_LEN_REG: u32 = 2; -pub const SP_WR_LEN_REG: u32 = 3; +const SP_MEM_ADDR_REG: u32 = 0; +const SP_DRAM_ADDR_REG: u32 = 1; +const SP_RD_LEN_REG: u32 = 2; +const SP_WR_LEN_REG: u32 = 3; pub const SP_STATUS_REG: u32 = 4; -pub const SP_DMA_FULL_REG: u32 = 5; -pub const SP_DMA_BUSY_REG: u32 = 6; -pub const SP_SEMAPHORE_REG: u32 = 7; +const SP_DMA_FULL_REG: u32 = 5; +const SP_DMA_BUSY_REG: u32 = 6; +const SP_SEMAPHORE_REG: u32 = 7; pub const SP_REGS_COUNT: u32 = 8; pub const SP_PC_REG: u32 = 0; -//pub const SP_IBIST_REG: u32 = 1; +//const SP_IBIST_REG: u32 = 1; pub const SP_REGS2_COUNT: u32 = 2; /* SP_STATUS - read */ pub const SP_STATUS_HALT: u32 = 1 << 0; -pub const SP_STATUS_BROKE: u32 = 1 << 1; -pub const SP_STATUS_DMA_BUSY: u32 = 1 << 2; -pub const SP_STATUS_DMA_FULL: u32 = 1 << 3; -//pub const SP_STATUS_IO_FULL: u32 = 1 << 4; -pub const SP_STATUS_SSTEP: u32 = 1 << 5; -pub const SP_STATUS_INTR_BREAK: u32 = 1 << 6; -pub const SP_STATUS_SIG0: u32 = 1 << 7; -pub const SP_STATUS_SIG1: u32 = 1 << 8; -pub const SP_STATUS_SIG2: u32 = 1 << 9; -pub const SP_STATUS_SIG3: u32 = 1 << 10; -pub const SP_STATUS_SIG4: u32 = 1 << 11; -pub const SP_STATUS_SIG5: u32 = 1 << 12; -pub const SP_STATUS_SIG6: u32 = 1 << 13; -pub const SP_STATUS_SIG7: u32 = 1 << 14; +const SP_STATUS_BROKE: u32 = 1 << 1; +const SP_STATUS_DMA_BUSY: u32 = 1 << 2; +const SP_STATUS_DMA_FULL: u32 = 1 << 3; +//const SP_STATUS_IO_FULL: u32 = 1 << 4; +const SP_STATUS_SSTEP: u32 = 1 << 5; +const SP_STATUS_INTR_BREAK: u32 = 1 << 6; +const SP_STATUS_SIG0: u32 = 1 << 7; +const SP_STATUS_SIG1: u32 = 1 << 8; +const SP_STATUS_SIG2: u32 = 1 << 9; +const SP_STATUS_SIG3: u32 = 1 << 10; +const SP_STATUS_SIG4: u32 = 1 << 11; +const SP_STATUS_SIG5: u32 = 1 << 12; +const SP_STATUS_SIG6: u32 = 1 << 13; +const SP_STATUS_SIG7: u32 = 1 << 14; /* SP_STATUS - write */ -pub const SP_CLR_HALT: u32 = 1 << 0; +const SP_CLR_HALT: u32 = 1 << 0; pub const SP_SET_HALT: u32 = 1 << 1; -pub const SP_CLR_BROKE: u32 = 1 << 2; -pub const SP_CLR_INTR: u32 = 1 << 3; -pub const SP_SET_INTR: u32 = 1 << 4; -pub const SP_CLR_SSTEP: u32 = 1 << 5; -pub const SP_SET_SSTEP: u32 = 1 << 6; -pub const SP_CLR_INTR_BREAK: u32 = 1 << 7; -pub const SP_SET_INTR_BREAK: u32 = 1 << 8; -pub const SP_CLR_SIG0: u32 = 1 << 9; -pub const SP_SET_SIG0: u32 = 1 << 10; -pub const SP_CLR_SIG1: u32 = 1 << 11; -pub const SP_SET_SIG1: u32 = 1 << 12; -pub const SP_CLR_SIG2: u32 = 1 << 13; -pub const SP_SET_SIG2: u32 = 1 << 14; -pub const SP_CLR_SIG3: u32 = 1 << 15; -pub const SP_SET_SIG3: u32 = 1 << 16; -pub const SP_CLR_SIG4: u32 = 1 << 17; -pub const SP_SET_SIG4: u32 = 1 << 18; -pub const SP_CLR_SIG5: u32 = 1 << 19; -pub const SP_SET_SIG5: u32 = 1 << 20; -pub const SP_CLR_SIG6: u32 = 1 << 21; -pub const SP_SET_SIG6: u32 = 1 << 22; -pub const SP_CLR_SIG7: u32 = 1 << 23; -pub const SP_SET_SIG7: u32 = 1 << 24; +const SP_CLR_BROKE: u32 = 1 << 2; +const SP_CLR_INTR: u32 = 1 << 3; +const SP_SET_INTR: u32 = 1 << 4; +const SP_CLR_SSTEP: u32 = 1 << 5; +const SP_SET_SSTEP: u32 = 1 << 6; +const SP_CLR_INTR_BREAK: u32 = 1 << 7; +const SP_SET_INTR_BREAK: u32 = 1 << 8; +const SP_CLR_SIG0: u32 = 1 << 9; +const SP_SET_SIG0: u32 = 1 << 10; +const SP_CLR_SIG1: u32 = 1 << 11; +const SP_SET_SIG1: u32 = 1 << 12; +const SP_CLR_SIG2: u32 = 1 << 13; +const SP_SET_SIG2: u32 = 1 << 14; +const SP_CLR_SIG3: u32 = 1 << 15; +const SP_SET_SIG3: u32 = 1 << 16; +const SP_CLR_SIG4: u32 = 1 << 17; +const SP_SET_SIG4: u32 = 1 << 18; +const SP_CLR_SIG5: u32 = 1 << 19; +const SP_SET_SIG5: u32 = 1 << 20; +const SP_CLR_SIG6: u32 = 1 << 21; +const SP_SET_SIG6: u32 = 1 << 22; +const SP_CLR_SIG7: u32 = 1 << 23; +const SP_SET_SIG7: u32 = 1 << 24; -pub const RSP_MEM_MASK: usize = 0x1FFF; +const RSP_MEM_MASK: usize = 0x1FFF; #[derive(PartialEq, Copy, Clone)] pub enum DmaDir { diff --git a/src/device/si.rs b/src/device/si.rs index 10643cf..11adf44 100644 --- a/src/device/si.rs +++ b/src/device/si.rs @@ -1,18 +1,18 @@ use crate::device; -pub const SI_DRAM_ADDR_REG: u32 = 0; -pub const SI_PIF_ADDR_RD64B_REG: u32 = 1; -//pub const SI_R2_REG: u32 = 2; -//pub const SI_R3_REG: u32 = 3; -pub const SI_PIF_ADDR_WR64B_REG: u32 = 4; -//pub const SI_R5_REG: u32 = 5; +const SI_DRAM_ADDR_REG: u32 = 0; +const SI_PIF_ADDR_RD64B_REG: u32 = 1; +//const SI_R2_REG: u32 = 2; +//const SI_R3_REG: u32 = 3; +const SI_PIF_ADDR_WR64B_REG: u32 = 4; +//const SI_R5_REG: u32 = 5; pub const SI_STATUS_REG: u32 = 6; pub const SI_REGS_COUNT: u32 = 7; pub const SI_STATUS_DMA_BUSY: u32 = 1 << 0; pub const SI_STATUS_IO_BUSY: u32 = 1 << 1; -//pub const SI_STATUS_DMA_ERROR: u32 = 1 << 3; -pub const SI_STATUS_INTERRUPT: u32 = 1 << 12; +//const SI_STATUS_DMA_ERROR: u32 = 1 << 3; +const SI_STATUS_INTERRUPT: u32 = 1 << 12; #[derive(PartialEq)] pub enum DmaDir { diff --git a/src/device/sram.rs b/src/device/sram.rs index 35f715e..e40e941 100644 --- a/src/device/sram.rs +++ b/src/device/sram.rs @@ -1,13 +1,13 @@ use crate::device; use crate::ui; -pub const SRAM_MASK: usize = 0xFFFF; -pub const SRAM_SIZE: usize = 0x8000; -pub const FLASHRAM_SIZE: usize = 0x20000; +const SRAM_MASK: usize = 0xFFFF; +const SRAM_SIZE: usize = 0x8000; +const FLASHRAM_SIZE: usize = 0x20000; pub const FLASHRAM_TYPE_ID: u32 = 0x11118001; pub const MX29L1100_ID: u32 = 0x00c2001e; -pub const MX29L0000_ID: u32 = 0x00c20000; -pub const MX29L0001_ID: u32 = 0x00c20001; +const MX29L0000_ID: u32 = 0x00c20000; +const MX29L0001_ID: u32 = 0x00c20001; #[derive(PartialEq)] pub enum FlashramMode { diff --git a/src/device/vi.rs b/src/device/vi.rs index 9b48712..43cb8e3 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -2,18 +2,18 @@ use crate::device; use crate::ui; use governor::clock::Clock; -pub const VI_STATUS_REG: u32 = 0; -//pub const VI_ORIGIN_REG: u32 = 1; +const VI_STATUS_REG: u32 = 0; +//const VI_ORIGIN_REG: u32 = 1; pub const VI_WIDTH_REG: u32 = 2; -//pub const VI_V_INTR_REG: u32 = 3; -pub const VI_CURRENT_REG: u32 = 4; -//pub const VI_BURST_REG: u32 = 5; -pub const VI_V_SYNC_REG: u32 = 6; -pub const VI_H_SYNC_REG: u32 = 7; -//pub const VI_LEAP_REG: u32 = 8; +//const VI_V_INTR_REG: u32 = 3; +const VI_CURRENT_REG: u32 = 4; +//const VI_BURST_REG: u32 = 5; +const VI_V_SYNC_REG: u32 = 6; +const VI_H_SYNC_REG: u32 = 7; +//const VI_LEAP_REG: u32 = 8; pub const VI_H_START_REG: u32 = 9; pub const VI_V_START_REG: u32 = 10; -//pub const VI_V_BURST_REG: u32 = 11; +//const VI_V_BURST_REG: u32 = 11; pub const VI_X_SCALE_REG: u32 = 12; pub const VI_Y_SCALE_REG: u32 = 13; pub const VI_REGS_COUNT: u32 = 14; diff --git a/src/ui/input.rs b/src/ui/input.rs index e055192..173b057 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -2,29 +2,29 @@ use std::ops::Neg; use crate::ui; -pub const R_DPAD: usize = 0; -pub const L_DPAD: usize = 1; -pub const D_DPAD: usize = 2; -pub const U_DPAD: usize = 3; -pub const START_BUTTON: usize = 4; -pub const Z_TRIG: usize = 5; -pub const B_BUTTON: usize = 6; -pub const A_BUTTON: usize = 7; -pub const R_CBUTTON: usize = 8; -pub const L_CBUTTON: usize = 9; -pub const D_CBUTTON: usize = 10; -pub const U_CBUTTON: usize = 11; -pub const R_TRIG: usize = 12; -pub const L_TRIG: usize = 13; -pub const X_AXIS: usize = 16; -pub const Y_AXIS: usize = 24; +const R_DPAD: usize = 0; +const L_DPAD: usize = 1; +const D_DPAD: usize = 2; +const U_DPAD: usize = 3; +const START_BUTTON: usize = 4; +const Z_TRIG: usize = 5; +const B_BUTTON: usize = 6; +const A_BUTTON: usize = 7; +const R_CBUTTON: usize = 8; +const L_CBUTTON: usize = 9; +const D_CBUTTON: usize = 10; +const U_CBUTTON: usize = 11; +const R_TRIG: usize = 12; +const L_TRIG: usize = 13; +const X_AXIS: usize = 16; +const Y_AXIS: usize = 24; -pub const AXIS_LEFT: usize = 14; -pub const AXIS_RIGHT: usize = 15; -pub const AXIS_UP: usize = 16; -pub const AXIS_DOWN: usize = 17; +const AXIS_LEFT: usize = 14; +const AXIS_RIGHT: usize = 15; +const AXIS_UP: usize = 16; +const AXIS_DOWN: usize = 17; -pub const MAX_AXIS_VALUE: f64 = 85.0; +const MAX_AXIS_VALUE: f64 = 85.0; pub struct Controllers { pub game_controller: Option, From ba6fe1bc05adc941636f5ce87530bad8eea0fd25 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 9 Jan 2025 10:31:21 +0100 Subject: [PATCH 0166/1117] VRU support (#115) * VRU support * clean * more * more * more * more * more * more * more * add mappings * more * more * more * more * VRU window * more * more * more * more * more * change fony * more * clippy * clip * demo * demo * if * fix * if * if --- Cargo.toml | 2 + data/NotoSansJP-Regular.ttf | Bin 0 -> 5733060 bytes src/device.rs | 19 + src/device/controller.rs | 22 +- src/device/events.rs | 1 + src/device/pif.rs | 4 + src/device/vi.rs | 2 +- src/device/vru.rs | 2997 +++++++++++++++++++++++++++++++++++ src/main.rs | 2 +- src/ui.rs | 1 + src/ui/config.rs | 2 + src/ui/gui.rs | 113 +- src/ui/vru.rs | 28 + 13 files changed, 3175 insertions(+), 18 deletions(-) create mode 100644 data/NotoSansJP-Regular.ttf create mode 100644 src/device/vru.rs create mode 100644 src/ui/vru.rs diff --git a/Cargo.toml b/Cargo.toml index 475d159..0d6b99e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,12 +14,14 @@ chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" eframe = "0.30" +epaint = "0.30" rfd = "0.15" sha2 = "0.10" rusttype = "0.9" futures = "0.3" sdl2-sys = "0.37" spin_sleep = "1.3" +encoding_rs = "0.8" clap = { version = "4.4", features = ["derive"] } [dependencies.sdl2] diff --git a/data/NotoSansJP-Regular.ttf b/data/NotoSansJP-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b2dad730d76d876ea9e4d0c5ec89ac699512f00f GIT binary patch literal 5733060 zcmdpf349dA5_j)pc4xCW2qcgYAPFIa5bgjWFd?(M(~E#ya*2Q-_kAM*3Ic+Hq9XFt zr#$s}qE8e>5fBv-5q*k^sHj{5a)ZdJh?(zSJu`bG0YSv~ec$A_)5mmIU)5FB-Blgt zV2mZ=C9{TpUzfmd*AHLIn6whHd#~YvR;;o^V$9JF;i}hk>eyxL)7^3yyWu9rp51m$ zmu~)hH*||(EM^yD?PqlC(jaf);osjy{vJqwQZRm5w1UARKKwm$6eEd z$=XEbIQPnseiOzbJ^|l3T=$TXQwD$c?X+8&t3?*O&imxhLH!11e)(|#@G|f{e<&hi z%XgsqEI~MH=%|U4e?C6pK_*o=&K#AzBgYKrmpbBDc@|Z>A;NrAzsX|*KT6R^KNRUR zM)w;v=+#$7PGl@_zGD7GyAA#){Iy5(XA9M*?%4Dn<=rRvP)g_d*(~N7%#L zAnagn5t}65Rhe|lkf9SDlui=0m6+sMfWR7&QN%l3H_Uj++qYcdX%-cAfa13;%SWZdL(DD+KAmw-(y1LaUVhFiV80od!}t=e^E1p}sxAIY+Z zj2|?DWe@E)dKfDh(QkA=Rxq;P#L+Ap`RIv4`W%+YZewXyjD(m$0|$*6KW5Zu zq)c@bp%xAqILsEihFg9IOL29!{1S_IamydYye`@DqlM0Gmfy*SJI7mo7t3;Xu>1;p zNM33A-OMAuZ26-di=t93zsKQ`5-fiVYvQnB#yK+CYAZgTHDPyJ{>o^lRTgk6mJK%J z9noQa4=}Kg6(582Z7qK+^I+sfdmVA1b~)maw}};B4!xLV`4a%As^u@wDj>I+mwb%* z*+|xp4PYZ!03$jPwd#ksF^C-)bi1%YY!n+747W#kAi_5zwjJCd82yQ1`9pDC@nslr zeX9N#x1B{KeT%c${hs%0Qg3sM<=o=qRkB$ zM~_e&uC;ogU9hJzKn=#?>ln=cLC8t{O}#t-wWGS5anv(I&?bUMt)c#=l+@RQk#4j| zYxh|;zKlU{&^Yu%u8|0vWeh~QREC+dHdFDXJ7}aCrp~aY6IdFq#1!<2I~OmT~JyZ z){}KZ-}qR@yxV*99JQubCs7vFW;A}(`u@l<7Qa#W4Hmh}E|bcjR&_$Yn?=jH==s*7 z$EnY9fQ{5z>NSFV4eC1xe0m^x}m^Mv}1u+xNR&MO*Yvp;oFmr(*Lr7|HB&SGY) zUAFv_O?%&Z=CzHVu@5J{*F%&;vuF&fC)!W*WC+S?i#B&a4KhA_c3sK_hgE~N!IadW zGz+M2M7ozMZan|Nam3^R52$yBSgkDC)6_DW1B9!D2Q*))brVoNwZNVu)L*_J?ou6Z zMrxXqp?O7fnZ}gHcNE<5qOWKiGQ#pwdaA2E@4F#nVlYvLE{LZ-8YF5$H6Mr>LbQi) z)yzYFnmg1xRN^p^x;|Q7nzq#gCJnM$PcD8}jf(yvCe&$Opw{N0mU-|;jt$|( zG@2pa&;flw^E-pp5`4nOo?7TL2RNZel3deG3CZy}Nl1>VBq2GngoO0DkdSV(BqT`A zZG9awh=W3=O@LbwaO+KmquS^z4dd30-Got}z^1c#Y!Q2cy(plTV+weBHO#WctO)d} zE9(pTJdMp|533)#Qe5(}miZK{G<*oYNk z&Ua=vVoYv@^zr~(%$_d=Q-)NZ%4#BBMSow%dIQ_Xv8ikhTfiP;&snXHV)3jpq>={U zVF6%KFW~N2%<h%Pppx{I3@Nf6 zW`+)Iy#cdzH2B;sb}xH`Jq@W8k63p=;D_{D9T?LLxZR%h06tD)GueFhFnfwE?bmPQ zM0w(syax;zHC7&dCGUYFhYgX3Udem#EyD)N{jcObbl8N6a_=j8Qysbwy@L1fvCRtP zPFMCWXe_rKKK4r9%^S*m_}D-H#$fi7i>~NBX23|f04w&9a-MjH`^}h$_|YQ=jF9VI z$$Kn~TK1K^$KTw4ikxvJ?@5EkPn0WN(R=*FJUL;~6}&+-9H4=;3QhpUtRTX)zNCEt zddG=(Iq{AcZ=y6rjp&Wt9=vINwWlXX-_`~OH>y$xT#*xdade7 z>5o^tugX)E*HvDeFxb;hSuH;<50{fb)xDtb#HGxA2^U~s4}mx4`64bDAN>kaIMnxo zX(j2LV=6NK&d&2@>>T?|9ixs`NAW`5QXQlY=3aH0I$gb0y-mGcouSTDXQ@-vsp>82 zWOal(l4F~J>zwldZ^2dkwc^+C*1QdG%dh3_czfP~cjTS;b-Xk0!n^WrygR?1_ux11 zp1c?D&2Qv=cwc@K@5lS|0em1I#0T>sd?+8rhw~A9Bp<~`^D%rZAIHb@349{InNQ-k z@X34%pUQ9LxAAFwI=`LI;4}Fweg~h;=kPoEU3@N|$M5F%@cH~+ejmS|FW?XGh5SLj zi2s8>#2@C5@PG10`D1)B{}+FpKf#~m|K?Ber};DdS^gYoxj0X@HhENzKXBrZ}Bz!ZT=2_m#^jT@pb%tzMg-;H}DVnM*b21nE#i5 z!awDk_-Fic{srI6zvNr^SNv=K4d2SY<=^q|`8K|t@8CQ6F8%}G&G+!V{71fz@8<{j zL4JrI=12HZevJRbkMp1T34W5F;-~o;ewP2jf92=+Z~Q#}ofmT>zygkd6o?AQ0cXG! zPy+5ibifmc3B(5C0`Y-zfrLQ$K!reJASqBWP$`fcNC{L9qz0-4ss^eB(gNv$j6n53 zW}rqOD^N3#9jFz^3Dgec2I>Ur2I>Xs2O0z#1{wwO0*wPr0!;(?fo6e%K=VM0fEp+a zvxsiz`($uz~I1;z|g?3!0^C`z{tR;z-V=XI#C@M z7!w$$&Qb4F$Ei05#;cP869N+hHwPvKZV5~dObJX4+#0woFfA}WaC=}zU}j)e;EurT zz?{IHfx7~81M>oR2kr^X58NBLj~8)G9i|RZhpNLdKhoK0{4sWx{l*-QFCAYpmt%)x zCsU*u(o7aDPmm|F7XOOc88BIjw_!lTO6&`SJY*W_UdwVxuc`{hWdu1le%7A@3>Cgt?qVo zR`;rV9bMFY>OM!;LaET@=vLUKu#KZ<;n~8oj$TFEi%vOu>#Oy*9250-^miPS^!N1l z9k+z$FXnxD{bl_X$Cvst{Z;)neYyU+{)WCne^XznucDm15zj+Gk zRw_u!PV|*0l*jQp`^GcIGbOfV%Pw&X;%|uGUCvdmWa?wMu-@bKK4>(vai7LFf@f+j6 zj^AD`Ex}X1ZH2okEJz%g_-Ue%R3T|m(km5HD=w%sJlUD-POh3qd<`Sr?grY@+GUZqYItqQL)q{@OSuUCz&+M$|U?RZ+Bw2^5`(+ku6>8;ZHrjJS= zoxU!8L;Cg%HKT1t*Ni7JHdjAh{bZ&ib6kx#vi_O%c-D@ZQ8hDa4yw7Z=6l)h?AqCl zvJ11@WY5iBk-akKg`B0eAF2IBZb9x%XzhkNgsjd)E!^<`FfsuiS@3j z_e%ZQ^?$1WdxOLV%^Qqw@N|RM8hp^Ou;GJwD1(rCNDRw*mMVaZCd`^{C_m-*sOcAUd?(pd!X6t&5jmqEjZP@Y4i5Y zZ*RV=_KmgY=8wThw(xKd$KqzWXE}4k@>tHKxQTHSSybH0xRp$fZyev4Ipg1ne}}o^ z_r~vKO1ao_vCN%-0b|h##}bY)PlY)Z=CGIw4^()7#U`#wT*cy&d`UhQpL}ETjjUX9 z-{ih5A$ec&K2|=ZN=g-0q4F)2Z()h4qfYS6-MDMxuB=x6sQghZC;w>vQC2(uRQ@TJ+bp430;|*P zbhFc}Zu6PVXR>-NGFoJ?`YqbG=)fAZ?9j3UYt-^^%fl?M=(OfyjWxGco&~f-EuD4L zs%yCW2`QzAEdRx6M3!6`lR_w{5(?w^B&KCVr z^lQ<%qThZ4K zb=R)fdT2LjJ+)q1Z|z2{kJeYaN$aQe*9K?S7{Mrb3oQQBy2j5byq zr;SJN+^kK~ZqX)dQ?#ktt=etcG;O+eyEa3csm;>v&}M6Mv^%xCw7J?m?QZQJZN7G| zcAs{?wm^G8Tc|y#Eke&etUaRrQ+pIW>|js+MKk|@I`4tK|Fd}?qSjF!$1Lqh?FH>+ zZ5eR`m2N-WuNe-Ugc6+t}O8TSWNmZRc(8?cnX`?WDzcyKAxDK3bf2 zuy?3;m=^CHK{)Qc)qA^lrk3cP?Y-N3zxP2c$@{4HG4B)Jr%lZFKI>hgrFj3NRrbE> zeO*g6XMuNxccpig_bu;xTAFvGmhSzU=7jg4_ptYv_b2Zu?`iKDt%ld|IkYUF>~qmP z@wv^J;*0lH@FmiG@m29v^QCF^e3`zQT76%AUmndKUvpmzt&y*=^c?ba@^uc)BVTXd zjlMp3?C;_4 zv`Hdy@}pjFVr>NueUZSgx*E(s&~_G(0dZC&C?1__1pCsCf(5Q)*jRE*B9sy=#T18Xg?(_s!|7iFsi|L|A+Zw^nsB4W<}SEzTZ>J z)5Y_g=N-=%p1qzUkS|goVT^~2u^{HjYJP94kCzMYu-?n_G@^dQ03uz=SF*otr#P*3@AeY<=$z&U3lenb# zr1FqZG$El>tJt~X$chUpuBf=BqEV@!((p>-D&1LWL#5r8+)^XCHe?q+q?db>Ukpkx z@hP=Zx~B9<83$R$18HUq$upI|to(Co`P8&jZ|V);whK~^Rgoa!)T+`_$T%HLDW}St zReq?ln`E7;i>rQE^>au(&8y9a)Kf97y^wq!N_#qOY1+GG$UkWr1z|FfTHRZHSoPV} zzo>rHmWMJ=)TmcuN{u&atjemE)iZ0JDII0)74lJL%^M*j-CT1$j;tvi>B*NBwt58mn&zdF*;2kG(Ak(;|-r}xU`YdXkeo;jqYjm zexr}VNrbd2TewF+-`Tb4lF8}NN@AJ1ctJbVh2|3SI@L0jqkoFE1 zoGLii+-1pp&op1w{O1-0En2p?qs7Zbzd^RB2_8NYym}gVFZ3R)-2+K}L~3Jl2G5w7 zPTDe?H)wBpt|87)v=qEy1GvLl?PKi|;t;VdwQa;Dw4*^DaoXe(@i%C{YlfGpwY)BG zbUBwd&KqB@rng*(UwEr})77YiOmB^ZISF?V=K$Ym>dp5y_ZGDrM=OUA_b6KB?e6X6 z?c*H~;vU|q;2pOS_wddQ@{UKm{}kNgN#Y;gXTUw4_b&1Nht?n9Aj?c1lG4DtA|=*F4(taERa3yqBaq-*egHA>l#3%YItxl6{@;HLV-?&g;H6 zg1l#)?|t9;5C@{wnZkV*`P2Lv{!H!0+#UX`I&J;6 z{dN3}>Ktrw4m_zz-KqY9x}*F>b$+eex~@YTRBxj{pbhc2qLm&EiszfKNR}oT|}G@T#YXTjjmzUq*b& z|GxiIlSBEx^Y3i&yZ;sc5#6CXb$5tMHSVLAZ+wHzsq|z$#o|_X>a~h)(sPMd6%8j| zRpSA{t$g5D*XY;kZS;29y%xvno_|)qKL6+ZJ!-FJ<%oaj18m+^5D)G(k@%NBg*X`T zFMVe7md&H}Ir?1f(dK8GZ`1E?{(ydei!8y*7SUQ*|0nS@{b~IfOD@KGSUVb82bWj{ zV-4(`T5*B3{uMGXt$a(adaE7xHHld9iuJCqT}E4955l~NRqnmnjeM_(RqYeGW5jCK zTFYW3driGQ^=E_AhOc7FSi|~1wb!tqd04-qAKMUxBdVqku-2^0m_uq~@oDb42E5wl z)G0BY1fRYgocbB?>Q`bm#B3G(n#Xn$Jezh1OpZM<&g9vRbuPOgQ065{AXiKnNm z1y}D2u1-Atc;%lfpH1}$&YqLn%;N6jQs;rgFG_thby?~L!Rd+5cQCnomHkytR&5x; z;X8xJzgul>S{(R%D{%VGX}!ShiPyiIwl3`yC{}iQPwaIpP2ZlrKO-h1Eu+5R_U3*^ zZuJJ$iQo6KIQ}8<{9{3`zbJD%IDfR@{i{HU+~EE-!2jn!0(cADKeJ}Tnk|Cd|6Ys# zSHn8Lw%94T4tpg}({4%jn(VdNUj`+CTWj53YhFkmpdA5ACU`vODaZxObKd*|slb*A zGAya!M#u%TbMMLhAa_IV54k6?m(U0j!hGx|Y{ah2uDXu8(V$0t>kg4~Ha%X`o9& zW@vZ@QbPqHH%x})uuRAfb@S@wk<`!~dpoAQFemS!ynpAtnDIzm<1E?Xk*0N;wrV;sOma|!?9ft352LU@G%o)iru>kOO3(#5Onr%UT&T$B|;;hB2J}~anfBGd#+V*HeU^A z{^=|OC)Jra{m#OXJg4$%WSz zLgR||)Y$<2Gv0s=!rpp5+YrJ6$206R{WJY@?51zlztp$rU+G`#-{@QQZ}so=@AYl^ zc72DwQ{SckpzqfA=zH}a^?mw&{eXT@KcpYlkLXABWBO0}as6lggnm*#rJvT%=x6m` z^k4OJ`fvJq{dc`sH#p-CF7YTXb0>Fkg}Zq)wsB*yeH+K)c{!fI%kv66ktgwryb@35 zDZDaImbe_Sh^GsfYXYramo7dtwyf)9}b$DG~kJsl7ctfNv`7k`_seSU)l1{l$n65FZ|H&IPG~IXFV&_H`SHuDs{E`mbylLTYX1;S6!>V zr>;}q#~IKE>IU^gb)))``my?7^%M0|b(8v;`nmdrx>@~F-J*V_eyx6^ZdJckzf-?g zx2fCJ9qLYXm-+)vj`rZ(=trCy?N<+|2h~IBVfBc5R6VBtq#jp)R!^uW)l=$e^^AH} z{YCv%J*WPro>zZYi&ZGy7dmjx6jdn8_Z4329PaoMr^HQoQ=VVgjxZaodD)IBtM-na z|F5^Xu${DsS_w>u3C9FzWZlee!U@@C){jofSbsVtBPsz587%1C5MaWqY#5!fu~GVZ zoU4ry8bspMJ$4c6A3G~{a?E7UM$e<386KR_d-6Of(Z$h6qPIqGie3@@V)X3j;n6om zca6@A&UPPnuXC?-zvO<>{g8XE`!;t&WuLNH*{G~hmMD)aNv`9rhR$N=Dd!63ZO-w| zhR$qfRr!d#McydCBtHaP?JcK9or~HLwLWTP)T2?;qsB({jOq}@qgq5YjLMEmjf#(A z(s5~@v|f5#x=)%Y4VAo7rc}vM>{#!3(lOmJ)Y03~%2D4@$>9O#I>U~z-E1rS7=0ou zTbP_wGkSN{Ln8DAPKCA!-QaDXHunr@NH&N)!xF_Etu{l7Uj%yHbWoBGMDlq zlbjuu|1hVszq6UMy0bsx;}O3EsdVQE3b;8Ar>$YOEr2HY0C$5 zK7-H*XHVs6;TC|CrU0T_c@jCRC{GD^$f^7rzAAvxKbYciq_{!(7vj^Ly`BA)Cs3;! zoEkv`FRl-cS`}P3R(TANdpgsUN8#o)VZi( z1*B}I+=WyLh|6NOqtTMFN8K}gf!>o4MNg)dw9rXtS>XO7j%DF~q)WwLOg z3kgWKpu8Ipn~pRIz^9uw+a(`!g zWguK&Zg5QdA)E-D9w2H*Q2WD2BTDm+=Gje1fu2zM3JBDr)LVU!YJ@Wt>2E~IIT-5^ zzya!4w8@zg#OhumS3?Cjik4At%aA##Js#x-0lB9Fdo+A$<1DXS4_{9wcP1#^;qy`p z2&OY0vJ}b1a^YF{)bDr#& zssi^D+@v?vRrxR8++7au0(Ugt&6J&Z*HXU1JJVec<&}e!OtxyW@-cl!31qF5fmxQs z;@xDy)m8Zk?+)$+ybIhON~P?=yO#1b-kFf=S3vXk8EDKdf{y8I=-5t#X6jJr2KR=< z-3ih-hooKrDZZ|9n0iJzhkWCdGkA}6yYcR-{ET-8We?u1-L>)7-4*aIaL3}^OxcQe zrpT2fawWR!pm#d4_R24CI{?-x;f}S!Nme+~os0OkNOvACdQkZtEr!d+27QT$5j}=J zCw#iWosD-#cTK!IxN9L_C#)&Tu^G_FB@2q1u!4wa6ZMvIRE&5BZNs@LMUBWBA&^OsP=4nkhB#l`K5mNYesi62jUeVr)L49Lk4y z``y*>uAyu~4(j7ig*(;?Ct2Y{K;oDIO@KEx{+}Qi?o_-3?#g&`&m|XaUFusx)!z83EaAT&U$G*qA29zPq5!oLqO{pm$ z)eK>fi{@1mcMZJjyEE~wt9(bfsc!Nlq|QY@QJp_SY(B!6W8h^!BGgNv^sU_)csByX zG@8Z0$uxv}D%X>y}0rSfF3QDhhySpWmQkDk4ydk~-H}It};tN)u z$O9Wvd{HC5EEiv@h%YT7zPu*B09TL)tq3dURq+M*gD(Z*OZd1h6JOCXdXJCt1MB7jUja{#3x}1h+C=;=3tu zJHSnb+a7MEl%>iCa4V+Icef)K;q`En5WbdNgx`moh%nhRCL+8JZUuzfkc;qpaLXgy znq1U36?-hl*#Wi-vg_w;BU{T>vSk-(gP-`0^0KHuuonH$lHSpn!u$=#vwy&>!jIkK=C`4y63qO+ni*;yHqL=|UMXEn$X z>COyirZWq&XD%e5e8?~b&gRaR&LYU!UZ)>2KZmq`jk7f*hPKXYo$Z|MogE-;SVfyX}*ofh_ktwNids_ylFtSA!dTiCwZNv7aX50;$z$~lIOhVjOV!L5cEuT zc(!^rdp_}O@T~Q$_Pp+S*|Ws+lxMN$A7L1+@t%>`Nw~?=)6><{!PDB~ z_Y`{aJqd-WL5eb{jTEuZv!TJ%?r3b$BNF z@#sgQ7e>#IzB778^lj0TqQ_z%Vjy-RdSWl4Lv-tCe{^AVessg=oaoHxs?n9A6QVuQ zvb)&*i~EH8hS7WXFiM(kOvaj$SMbHC_*#{Iba5%)s(eD|I18Sbg>iSE(v zq3-_f-tO-1PVTmD?k;i{xbxg~-P!I8cd9$d9q)F#CFQ(wMmeq=QuZo4l&#qD_(a*D ztW{PkuPZNO=i@15vGS0zK)G9)txQ)YE8~@s%3$RtrKi$W>7cZRl4YTiuQXJ0l`JJq zNl_{&v5HG!u5+$au4Ar!u3fJ0Tw7e5TpL~MTx(n_T+3W9x}I@8?s~+v&^6z6r)#=v zs%xTabXnu*8tUrr>h0?8>f~zc;;tfBfh*5d*Ol$caHYDET=6cqOLCrfo^c*`9&+w= z?r?5(Zgzg++~8d6T|H6phP|HW&rQErVKd()VtIUr`X%^3S1KiF=WNgmZ%tqpr?>HM( z{bco%Y_!nQ9fMQ7d2DRWdu!gy#^Ee)AsdggyA^DL(9)e)=a)Lau$ysO)`v~PY1u36 z7HHD^&L%^9xfh#)GcH&HLc3)LyA^sZ{n>3oS9cmtsK&7AIEm`TZWlYTGsI5pcIeIi z#&$v{wmjPfExiWp2k5k_Y&Xt;{A>?2>e{h=IQi+y_T${AH#>lHpMLBhbW?}1L(p{@ z$qqx?Wg0sI9n{;|QPMhP$DnPxfE^bayFZJa-V;rNV1L`6c;2I?2K5Kp(uLa5^FtN?5^3g$~Hp60Sh$iChLwPb9S%YamJe9g?=B zp2r$bQh&qgilm;y%1Tmy#ri^0e<6ueJ&V&9Nj(FuBB`fo&7z(nsZ%|Pm5ijGfP^Zk zKjXAUQjcSuCaFK+^hQ#TL2i}Qqu_OtdIbDPQV(MVEUAaE(vZ}H;OCNh0DN6i_cI^f z`ykIr>W?@LlGMFeYf9=KoDNCqZb(Ry`U6gjBy|^7JCeGSBxQ96@Jdp*LpqSuZQ#U` z`aNU?N&OBogQR|o(~ zx&gFbQa`|Hn53?UeH|+fNnMW9IZ1sDoJvw( z#qP1BF2iYpq`rdFJ75ST6G>f)Jq1a93F{+C#f~T5FG9`$=77&g>JrRO3Fk@<_+Q5U zG2(e6<^Z-w=>znEz;_AS4`Y~AG#qn6f^Nh(Cgt_=e+d65%o_iHzdVcZm)9Wt<(Y)PygK18C);s}rxX72 zG{RqAjqsOOCH&=82!DAh;V-XD_{&oWe|a+DFRw)S%PSK8@+87vo=Eu1D-izj@`S%U zf$*1?BmCv@gugtF@R!FD{_+^YU+y9N<O!%w+PWY>zC;ZiaBmC9R5&r7G68`GH5dP|C34ir7gunV}!e9Lq z;jey@@K--U_^ba+_^Tf${MCOV{MC;U{^~~wfAu4TzxrXqU;Pl_uYQp5S3f}btM4cL z)%Owp>OT_x>U#-)^*w~Y`fkEs{RhHdeHY=czLW4*-$D4RZzufKw-Ns8-xL1o-x2=m z-xB`nTM2*lZwP;3{{#HhzasqAw-Em7UlRW6n+bpQF9?72&w;-JQ$aIdel6iE zw4E?|MZ>jugtefq5_Es3;XMje7g!4l?7&a*Hw8tOwB9D>f>Hx>LA4$DNm+{TKH%#3 z%(Zxr0!0TVYZz%?56z2rJ5YLHGN`@;jXTuOd!{ll7`lFs5^jShNZx!eMprxC602Im zb8riZ*CPt8e@1hzupLfqLAinTpxpQZ$_?BHf%~A`zf%~A`zf%~A`znt z2jvFtgK`7+LAinZ#Ph$vdkNvbJYL`t11_O=ohziRI6)QGvsfekhSkny`|MQTgi~~! zr-p0N7M=D?v9)Q*(!z6%X=@SEsD;Hv37uNl3WeES#4RApi*T)4&EbuX-)&kDm91Y3 zi;OT0+wu*(wsl5Rucc#4HX7l2wpxs-X`8s(vegLFw@vCnR!O$bt+3b#*SjT~4WV_b zRq{TgC7YVJWVsQkdrS5kDGju0WozKVk^?%pl_x_B=mL7UrL}O$!o#$LinQ<`ja;ox zxK3_*Ltm!P(#qB9hwJ5rtUhebT+{jk`nke}Dt#4MQAKF!wj^t+vbA)DhHg+lS6G9D zY3PzoNY+lRbMgBlj*R&W>D+rsBvb1%72H8{~Bj-D=Ze(%W$ClokcGyd2V2=y?Qn^Jv#d z*hG^>G}2M}2tDKHU>j@e8k1E}C(AAUn!yP$Raj%llW z0qtW?xc+g%v7jZ<#GnQ;teYdWkVht(ddRCRyP_~{WZ2`9{j;r+Ox8u=TFGQzWa=cl zlM|DxT6)Q3WfZBI42|*ReXy4WCbmaXnJmvu&E{)_W^-x1X4@8uG@ET(sPUF|Guf!aCMrV5*|Ll(Q_DGI z$!_aAlSO-XShU+Z&txSPuJ>HhUg|=+&$bnONCTQIr$YMA1Eh>hwQt{u1kiu>2R*8OWT($lS8bW#+9wQw@l)itn2Z-AAo{Y3`E1gxT~Vnv>V z)qUto6jsCKu(HOz0$9tFwuhZZ0>pT%wo|ck&&Do5=nLKB6NeReWvu3FVrL-qh3@l> z#i~37EBq|%7Bn1+o5UQQF8&@dX#8kL+l#+P^&3CJ;lKEMER|Jw@i*P1kDvr!a7k#6%?OTyTH!5MBYMs;2?Zc8tL+PBthp~Lx^Hh(gq<=4X z@_6M#6{>o&q8DRq?fh8ZA{|cS9CT|gV>58}(K*^1of_?SpTW7t%h17Gh%=1Q?jHDq zDYd&H{!-m;oK&2_ImKpWz4Ds!q;j8fn|p>b8mAF$@mHW^D@lq3Jx%)C;raxBtMRu4 zrwwymlUxIFico;lgCv|9{Ng;MjCO8ue(YT7e9^hcISc0kJ(cxNFJNRl^Wdwh6gWNd zFY+er_Cx2K?wyeb%Uxx^+ytesm(yf-)S;+PqF#)e@0=AiDQX~eJv&4dM&(8&IcF*B zqvECW(iv$l{x(Z%r5BX~X)%8HNh776Qfnz+%8^`-Q;yw^PaLZqkDx!2>6RwOa7$Br z?2&ZjIIqV&P0(7y-AiLxRouCBJIkayl~_Z%Q;Fr_PNjQT6WpqFFKdchl^$gIxKZg* z)`H{aBF7H)lI}HPV{ot0K{gJz8vVp3(tSp33hpyH z%Wmbxycjney48WkZgmiTgN@yMlyQWQ#_w79pTqBYV>gqLVi{5_MvBFOF~&0HM9gZ$ zJV!D76=OGI7mIY85W5<&&mm^Dh&h6oBLo{UM?`6qW)osI0s0aC1%6-Rx5YSu6wutU zzAi&(Yp`r8iC``ZmO>C#iyU_SmLZ06Efb~K^;^i-7-#s~C}Ay1d{5+ACQ6|eZxy9b znRXp_i`Jd7WB3_SbF&x1TL%qU^a90{uAAKhu$)r|g4Wq7w^}8_28C)QN?L3|Sd5;a z+ME4IwHJL9j9DKMLnA;rX-pPkq&5Z9Q7rX@8DpoT8ZAQ!=13`Fx##j1G0w};H+K1i z5h2*m~;7i!BU^rAURoA^2lSEyg@_7Y~AeMd0@GewLIS&RwV80sl|?97}oR=uc4pA&uZ z6591P`eq$!|2}>jL?4+o^B}c7C#VOheU$Qum2xXeqLk(w2p_xk0vp0(%=tuf(3}-r zSdwTjwf+ohLu0m^xx(tV7(IG~O2ij)Mg(WDNK0)d3^IFjuc%4n%rSe^87vcXlaDpd z1j{8%CFs=a15t}X#(Ko8N6dQc$C;r`0)MGwf!F*2mWJ;~f^*BvPpRp<35jY&*tswW zoAMKEn#*S2*tloX8YlPvzAH_X+@bfK2V*O z@jg~7CEgulc)dk&s646@&Bsu^?HIF`ggw-fP%Q}`B4em7l#3{rnageowI7=5XbIJh zaFf~}qL}vFH%qr$V2_%ai_)y-BSf#8bkn9`<`__jXzGz5#@TeqEQeYk=t8h$iXo`) z24iUCLv^ufvppY8%&F{>2Psu^hxu9~}{8 zjYOTSdV%i)66!~g>~=D`y^I@v z`#_o}4Kb1rC9DJ>AsTyGL*pY>WIW4eV-=woxVy~w5$41I*7SCsA)or)Vp z?}VItFJC0?2Ymszf4+wMK3DN|xWV%q+}XJY_j4YE1bddB!@ZMJanodIY|Xyjt zwa}jAurT=(1pH7w`+F;+9cyg7!Ws#88KZDZ&_=3rbNmVrrr&k=H8XJP54W80JnGO6 zdHf!j`0rKZvMs_nHaBbtcTGVxcV8(Hy!9LI$yy3FXq+9sL$K1w(%(XWIg8HD&X;S)Mpi7Z9@LffJ6Tk^{RqC z>WlvEX5i*@v?bq|g#62q{+}3wYtVNq*f1lF4L6zr&PSNX&xy9CqyKKk_+(+sTcFPM z(B@eDRAV;U*@<0`_C%wPl2HDK#qY7fXj5;rd$du2Upx4_vp)DOC_cgZV@zftesS?j z=+kzrC&KjWgn7~l;qLg&HBuc6__7svQWd{UV=4M(o#;F2j}+r2q#X`U&`Q2VzJ)P) zwv2i19PUIM_|*tVmJ`%j;Dor3mLppWu1xFu`a~z zSU2#*0(L$4Vhh%Tcq6+3w=8#Ny?J-ugAKt=%Dvfe+@m}cYwqD3|MdZD_wj5h-It6N z_7pyaO~Y-;Gud?9j(iuJjr)=3vpKjM`9U@hEBJ@m{kRSJUu+@Wgv|bd)%+6nFm6D8 zi7m$c$1k%da0Bu(_9X5-&}LDcpa&hCPkjkKbX>@wI#{dmgtRf5evH*5l9E z%ee3OE4Cb~|E+8#ZaUu1R?!W|>}~7>>}Bubj^hJtEp9kI#NNjp$3L<4*bg|vHqyPu zY!mJ^{*8Ukivx^(fm@Bsvn}BDW7%H1@t6HbxBasHfmwk&*g?9_mmLn$T0wy^o^Wkx zK=6KWe!=%+Trauq#_hfvq2;~M(bZ9e|2wb%dw(Im)*5?B^go*71eeB6BlZPd*vBh} zm?ZHdo40K2?|G2RgZ;i}krq~G*xjoQT_=qZM@W#rkax&GK$G*Jd`LblABA4$?@nfF zyTgL}RIp5{GeJTf?e#p;NFM9*$#jUlAHi74C5HWhrkif<98T8 z=wTr2MA{R^0Z0V2ONUTCivA2Ft>}&{rLSn}>H4?J5%d-`qPxZDnv>s_l&i!>i2&pu;0TKPTV zp8%Cy4jE{(vDLWS_{Dh7xX);c_P!5@%h3MUF>Q25&;*`W`LWhMxJz_{?|O7=qjkf*^-`Zg`wi*kKY}DmdV8aTu`Ad9z z58-!F*GEzAQ}C}v%{D=zpqHnhAFf61)?&ow z883k=ZZ#f2s(FC10QGvoc*O_+c5AfrdE*dzWTp{^R`)gL8VUH-hd;|mFJ53QEItp| z!x5JXoH&DCX@|V+kUkG%oM_Cz*u0272pBPFWjo_J{N@7&x%4A=_XwB?#v-^=EI-9h z$8Vk$o?85)@ed;dV|6X!GL2QJ%RRuq$$-BcW4RuX?n2sv;(wrgpV6oI74+f~5&tZ3 z_#@+Sl;0fnl0}(s0auGv+?~Q;Nx7Qyzw&dyi4&CV-D&+9&@0e_-X7( zQN6g0aYOOFD4(J2_aS{MaPI{2%*6<)7uBSsnSL ze4f>ni)Dl5JENQmD}W|_9BT<%_6(-Mz9XA;f=zQS>*lQMY{h!O!l)~o09*ZD>{jQE z&OU6Wv!8P?yTdumIgHK2Zu}^Ax464~KHcWQ7UMRLrR;IR&7Tn5{7J#hUj#S*lKlsF zb8KgC;x>*S*jn)Plk9!mw(&dr4EJj|*jB;8zc1QZw3BTs+E=unZ7(_r%b=Y>S|uo$ z;8uz}Prg@PfVtqu5xD7akA}HeOBe?bt_^n& zT>7)qlD{tEAs-vA$X{_ogt6u@*5bD;^eqVgcf>UhgO!8u-cULlUU5alQ9ZF%F;0qB z)x+KSQ{`J>t1wNTF5fQCkY~!XE@F~FJ5GbM{YoLsy*(oKs=grkUf?NN zI@bLcdBEwcHiOn5Hd|mPH~Ys9{k<;6E8@W}!DT(*C5NzDVM6vf3xA3HG-3cKPGc_% z@SjMG-3jp+MV?L&KLUuDB8GQEp$TXo4_~Wi1q_-jWF&Zs12E6qU;UC_>Z_%<) z#=qTn;Wm_A708a_A^EiI6n}4QN!+8-%ZmH6wIZAZ#0!q}pN0F!`AT9Si?Z>@%Ih|9 z2P=p&AINpzpyvDWN7O>hQTR>w1lCAVpo7IoaXylglnLyLBeAv-5AgnQBrweG5;2kA zONSu2ek4YP=9JwYF~cbB|9VE1uJ6TSY+7f}tBa-m-+wDPQWx)QU>h)y9&;9%{{PjR zdRkE765NF_2K&>c9-`5uBCQC}cSsXxA7P-C%EUxU0E{N7qM?=e>N@yeWLUQy!#eaB zX1vu7tf4@iv1=E6u$Bc6g^d3m_T|fZ6nuRRYojAJT_Ivx!JqO?4 z{oqvi|Jx^gW?GHx{+Bj35jq@9{6b(ai>ey0hcaHsC+6ozq4|S(dI3ltqkNICSF__EVi! zOk&6AuUO>;$2*{B<2OyD}Kw?&M2m2Baq^r=|Y zTf3IQoiou&%&$^w8&S*^NVj4JoiNvZ;dCD3X70*~xhr;5cZJ$j$`=}$M4HR!hfqvd z;z&9W_TlP#X;gB>9wVeOQO6+7F=s?j0twc|m_}d9nlGi(nwfBxWZ|^!B7d1<77hXO zlu5zEF4Tg7_zKdgmj`8p81mvx@ja8MF|z>~ksyDa3voe8HJbv1VAfNI_)? ziE<}>qdaD*LHAekq2^_jWTiYEPJ7L`(r*C;D_#2wB+u`$^8FEbcPzvwQFoGVEp8o5 zE7nU$jWum}AK2d`UBEzoXull7k9PErp+C?%dZ>lMJuT8i^r%R1kyrQ$Do$I&`V?@( zPEbQ2tP|8wgz(v|qn08k&RgM=z;A@q5eXOHiIUPti}5Z2>MstKEL+qMXN{L$4Au*T zEn6(N%$$+yfIlA3ODtVTxyH$`)VACk7G-*EY$)~NG9tuTq$Tm-gi`E%i?O2lWzD|kTS5j~=ugP}> z2Ov&)>8-lpX}7tjgFY&?7hE=vzl<`2wZ4$YlstnFaiUHsgW(Hg3vnQOJkS%R*y2M22%U?0)t(h)p<{{<^Vdfu$!R*0Gw5$jEh0CFxe@V}!$YGZRC@hgJ z`H}Pq$;#G;fE)*%*>}Sdl2?I#*j7qcA|Am~X{{vCDy115Yxf`J4d)K9QlQ+!pwAmB zO+h_O%-IUvZiX^ZGm$Pt4MZKF*R~ohSdE(5IX)HXkvm*EGw})*9wf=VO_1Ot$oSzs z9D1sU>1)ZyPFpJeDLclh=f{BZK`?Gt(D$#%eFiIa870{{$i+#+YP?s&W=6=%@PqQ2 zYYSN61Rtwa-vK}OnCI`}6V9B>2Uci|ekC8s%a(L2T*dxg5=ZfsUB@G?Dk+!} zFv7>fjJIcdFx4M;fO*03|AVCXOf*Dr5uD(of6kH&7otSyGtv*R`$1sWAH%$o6okQ| z%&o8hWUw6;59)XrTK7v!LoQ7LLusJP++Tdh4I*e8?Ya?{#_SdFcEQHr@7lMhZPzN) zw|30sxj~tVEIlsF2mhWGKb>q};JI9^#khQa0Z{*gXgW(mjR^bAT_V(ha3;JeuzomA zt2m@8V;q35hs_qjYU2>JKCL-K>G2~TLMdpbI{p^j7@{q()S(tYGbdD=uVB$haTd+M zO8i@rZcEEWBGnRDA#@eKy~Zu@3vL8{Cwc&F`pV{dII)Lrz}0?mhXJ&c@cT5xSIjao zDl~8;}do0B?^0-epSHCKO--gR&Fug<&f&m?VhQ5I$VJ7F`%}iQ30qI3<07O&hJl!*=OH>20b5 z`+7G&r2+h<)Skto7>rYYaU-znkGH5saN3;U#eiJb2bQ1Azgo+^@b$XEQpy?~|rgis5 zNbf{%gwB%CYNvAv(i%F6Ke8HRu>Zc)HA{&CE-ToaQbWdxpyMV4n?i^b7Ij3+%See7 z)T-|xBcC<%5={JrlpKs97`5%tRds2sP6J11ZU<#G_^rAJU29iIP=itxB1#}2oX7W4 zRMO;CfKGJAW#ecmAb({ zk!sJg&==vu?G@CX@VyrFQ>>sMBwwV8y;bt*HvK69;cp6-sK2}HF|sQI*}~eNK>w7O zLnR>DS+24x=9Ps%p`sweIm1Gx)mR+uPK9Di_)P8__Faq>R>G9d8lxJ2R~tzN1(hnn z^FfcrewA7CKc3@Q&+Hdcmyk;UQH)slxCtz7SfVGcPEbMl)T&aeL0}SgGA{i=t4<4U zwMR%>)`&&4ie$>aN45agkYo{FI<>^S9l&gpz)-uE;^fnek9^}^Ej(C(Y$e_s4ll&p zk)Zb9f`K$vz!kIPP+d?vOVTy#e(97eoO0VzVc0q=^>0~;gz+S^{`Nb3H`I>1G#7gT zAqhD1kMjKaa{dT1eUHEs3cqvVT;XYHy%c&d8&}Y1fh(7om64c-Grli@s~;gX%0cQ- zKLmkAQd`g>>@kY-7dlhi75UZ76kY~2j6VYhT}3v`p-1e!>_aSemP$T|{mhI*&c)$h zQPah^N#hIqJM)HrE$v5Y+T#(>$|@;5NBEAvm7~;|S$O)t!jD@$Rz<@3Th<(rMOvY7 zTnbNMV?=14V=eJoc#3d8R>4@$mwarx0sA>x*OEr_3`piocAfiiwxT ze?li%fJF2EkZ~u*^keMW{0q>xV2|`P%J~>yRvBZlUm3w^E~CVYBqfO{9Lpjx7pH)4 zUL9jwyI3WVm41TuFyAUZKy1TN;c#_ey`cycoNkq9wxK z9r$Lo0vIaxJBX@Z9@LAcHdll8TF`VcA0UU@C0{&$$*=al1@(#e9TR$wKLIAz4Zy)I z_|cnIV-!9s_@8NQToTxy4x7??-m0)8V$)o5kdLTQPV`Yae*Zg`VZ(|1K zw$3=Vnvg8IY^{6EIQxy88ZY6o#{O-he4ux`&Dlg5MM=;&w?{=#Nt4T=ys{*uODOIF zNz5{+hr@Sbsl?D&fm>a2Uk2wDav&dRa}uurEil^$j1(FL)>!SqcZ?;Zun5|Dfy!P& zG@Tv*-s|EmcI{9Lae9D0-UA9v*TVT)s zJ>GPFA?)zLtDdHDy#(Nwki@)Qz>*^)ZWlm#q@x^Oj)Hn!P@)Pi%pcx!XId32fu~KU)YaU z5$DdzL-4=87K764rXYUh2qQdMU1eZ zd16jc+laCY=y3O7ys!oehON73%7S=#ab!gfxVywVh;3pH5UnVo(@v=_;YqNl&k8X{ zVy%eTWcJi9$`70nQUqwmPP?bfI$Q$uOHN|Zq7cU=pP;wlAWGt7__vGsF?X!dxmYT+ zwFJ&zJoW!=U+ujb+>m5)s^ex2f#Jb^{rl?tmvIx&`0z*IDdsHj@{-0hJa5^43)@SK zy^ZT-=eg2Y(DT!#MKG`q?GQgx_qjwpuC%1TGk>^@LVM(bHc_iAit<<0rR2zm@cXYG zH8C!PZM6D_-WuILM)S!EmpBLb)9p*7oPxiG?IVY^Dtvtk+2Yck5N|D+9wjA!A48`W zZQ6-deW9NI=W3J|>dUJE{qKYs+Vvz{FH5HSQ?(I$@TM*dBu?TS z5$D3;{Rf#8>+?%_BIN|^83*SJl?3?^v<@?g<`cBngw#ZS5q~N0|1gb{Qbcfd#Du6v zIJLNRt-nzIlI2q`q4xAPTSami$%52QvBO?6$DawC(6LYPC+cU`>;JHK9&mP7W!^t$=H3bE^iJr_KtgXxD5*1(Ug**i0)*Z{ zilP*;!`cZlSTjkt+}c7xh)p{45_w$_(`>%09yZT%xAau*%+!3@H6E1lpEkDcv4S( ze@fLZze`!Iui87${`>HAj`vr~QhV#~v>P_+Q`HyZFRbWu&+6|z#43|pe=A|#r-1tQ zhVr>>smgkv-Fo!Zr^VH$XdCm{ts`s<)q3Z%>wAUPr@iclC;2Q^vv{XI=PiFNLnChU z|7=w6Xw;p4YoOZida8Z0^*fMy-}Ak7neeHd?0%u&_2%{;)PMdB`9T@4XQUBmo#{6; z_{|Ic!jAqbnEqWZo=;2lNvT@p@5im@R%@)AH7VBn?AC_*{wbYm!bX2~>j)b|bwfX? zleql#y7I|r>!)ap&L?*3$$0Gz*gkse#zI%_dEVu$_nY0?SNh9es?neP*=_rNHzX}% z;yJkW+vJsbx#PYQf3J2!aWtOi+S{-Sq+R>H2kou?^GVCo!Jtpm7jk^n(}R9L4o-9T zbN!zi`l~eq^`XBCz4m_f&#HWH)%?m6V@=k+c}#oppC&E!{F2sTxvyI5QF~-<*6pLN zd)MxJVg36GFGU=%HucDV9HDM8__oI3CwV@N(BJ1Ob2e~3&2<^{|I8lFkMi5Z8^|eq z2DbsrL8!~`GW@Vqw%kEH*K4GDitGPB-2#7fM(Px;$vlgS_ka42^+Ib}S$+wuf2zV>^!s!aL&PtrUyP^@*jbyZj=+jy?E>eV~{FF@=6E!6J{ zmt4C_)*bp=YaRN35&6HthKd`h=Y)p-R@;th@1oZ*eSWZy{$lpnw7>ojg9Fl}v{jm% zrt0stO;0`g20nf3qyDbjnR-n~=j$~wU8UEg^fJAUPB*64=$rW7sMjog!{1xd?DV$u zk+dM)n;uB#q=(Yu=|X+;@0Vr!4ZUtm-%LM9FHb*Aed%@Sr|G$LXZmIOb$UY}KhH}ioH5~y zeBOk!CY+U*O<6f*W!5)N=KWQljq)!e#Nb4yioH`R9!z4(6Pee~~Gz4lUN4-kKlULENWz4lIr>a|ZgOs{4-T(5og zoy|w6)<^0!HXWtc2-SQ-+E3MJo?}2+{AS+7IV zDS8c0r|Na6zO(ss^~(x4tgL`-G^ZCTU)I49WgTp*nY~e2zdYTnvEQQCQR!B_I?Bq} zuB?m>t&F!x^7iyDjrZMpjYxl)KA^FDP%9>>R5G<{94p=A{g z(<=O?dU;Z>j`X*B<@7DRI?}iG%IQ0Lb)={C%IUj$HPiR>>PoBhYNqe&)s>#stEsj8 z1Mxr9t0VoLURmEd_9MxEtXG%59r5p#Tc2K?=^4F-YQ_IlmOs-gr~j>2Gd-(USNaFN zn(60yb?I9+|55yEy}I;m#{WnBFZAk4|D;z_JLWm@ztn43`jvK$HcrlI``pNlG$D6s z7fmd?XooypyJ&muqETs59<9B!L*6`Zo{r92+_3dzZ@4R=~H1Cu5N%Ql*dEc}^yLzl7 z`{n)8!n}XpKkbyq<#CdX&*Rggd_X=xk^}RBk{px|N<;F&`QUVXJ|rI|{_uQwIw2pC zj}U)kJ~Ew{kJ1@2CQr~AF(eqd_vkJpO{ZfXXcagNoiC*IiH-)()n{rTAWYKr%8KyK0PhTXXG=*pOw#& z&EmXR{F1yRovm}}Y)O{prD@lEPCh3s&FAKGB{?sjm(Iz{@-kVTuT$#Wd_lfY{6+a9 zSzeqk5r1jEG@X|(%a@72JYSxcU?!-pRX5xL%u=$jrm6LFV8O*|BCzy@i*n0#J@7XQv9p3zKJ*AoNpF?OTIW!zdFBK{O$R6@vq6R5&zo!TJf*TuM_|J{Ce?k$Zrt;ru-(Y+dK1}`uENG&HDGP z`K|i*?fLEc_nrBj`uE-W-TL=E`91pgz4^UqX#VT`*ZTK;`F%R4-=E(v`3Ld`#D6e< zQ2gEbZt)+=9}@rJ{9*AQ$vRc?J^3E-AI%>X|FQfr@gL707ypU;3Gw&ld&S?E?-T#Y ztnYizpUR&Se}BGT`~&#`@ek$)#XpoE68~_1So|aT5%HhSpBBG7FHg<1rQPy(^LNwk z`Fr_$X=GlNS4r~y{C!ED&QDA7ll+skjc&qc(ze`%X*1o0|B$xSefV?nzstW%=j&cP zD~;wx)a}-xJ;;r?g-)o`5fXy=!Ebf|98`SRihZIl~ya=AgLlpAzvxj`G{2Ax)JP@O7z z=~U5cSh+#F^#t`&WpbuoJ>>@7wcMS(gsw`rr?ro;4|m!H+R zxKoFf+ccMZG?#m{Lr-m5o#h_wN`IqQv)ra#Opcj`&yPCdEYsi%}X_0)2wzO>w_ zr^}NiT zx_RbKT~_YY%`2vk(Jl&w%mAmt*a(7;>yYu+;l6-=0&}+&Kx_!Ap$Cev(zjA}VL^tS5 zb+?_SdvrhDqrO2m3peOymI#K=O8!eCglblTW-*yV{$cI*tdV`sS?N0i%f zWVszjl-qG+xgAH8+i_&M9Y>Vgab&q2N0i%fWVs!Ol-sdUZpR_zc5IZ}aa6e-N0-}i zRJk2Tm)mhvxgAHB+i_I69Y>ejaa6e-N0-}ic)1;imD_Q6xgCd<+i`fg9fy_Mad^2M zhn3rLt8zPzE4SnLayxEXZpU%ub{t=B$4$%axNEr`cPqE!7P=juOgu&xg)pc zU1Qprca3S6az}2eXMnwQFQoLw(NBziWc1rczkc*>qi@pd^?F@B`pnTMjP4#iZqzfQ zo*4DOsM|)(8g%8u{6g4~=}w$iqf9M*M8V|I%yahzCa8GvcpCym7=0 zBla3GV)*03&mR7g;hPNa820O7KOgptUf&w_^dtli6^m_fU>xP{@?DS#B4m)hb zJ;NG9|8?lIL!TJ>$k2BUy=CadL%WA}44pi5;?S3j{KF<6-sFT$W{Hm5WDmW%hCDaq zeM4>-GOp{_UBBphrfYfEU0pBln$>kw*8yE)x*E-2G{4h)sQHfO%bS-rPiY?89Mfzx zo^L$Uc%t!HeW`i9~28mBZCH4bX**y!kbrgL@Y)1BWLeRb#Eo$u&;ZRfnsqdWKL z9Mkdpj^{g`>G(v)2S#7r@ve^jbcgF%U$0c|{#C?{YubFOuj(`rcB zx0|TX2h-5T!;Od2$i}A|pH8Ec$CuLR#+Msk(f3$C(fC^0q4ABz-=>`!-)=mecGI_6 z|D(RO`WKDo(ov0HHhz;PHU6dXFX_0(ZyW!XCO6jTgU=bwj%G*dX*QaT)T?i>-Ym^* zZqeK#&2Dbh+$zm!Zrj`^&27G`vF|`>ki| zo2}*)^-0n+cl>d#qXA+*8;~*jw0V&C2G!!olJX5hkr! z(L7r8m^IHgj}@k>Jx!P{%w5yhoTnIz*Q`t(>TR{6uP)q5^{Zz($ySJ4p{T1Bb#-%M ziMUcx`V^&4QTh~RwW9P*xPQ&c2@lGvA+P)JS}V!QVrAN7ZM4nhC5iHSUU{unUaPT9 znOLc-xxMr|2)jwQyFd?%r6Dr;tdez~`dX#=CF?7tUpM|%rjsOV#cz$fHCAW2THkj5 zv(|W3OnRzp3Cl&Yd3YMrJVIEk zr{HF6O}IY|oA98X+d9g4WS531YO8LWDk|$}OVO=`Z54f-=s|+AlTS4Ztr{s4Dxz7c zMz^xeq;gU|_bH$I$}Ev_u_McMo@%XMf#uAtq>Ob{Ss|{#3aVD>-ip1djCEc0(6)SA z8mi5lS=y=|^IG;0eXPy7uZ*-cE6m~QG(>i+EJo8>(F@i*Pqxzb6>V!K_extf_ZG0K z)_j=JAT566)Y?Dm`f6pdR$7grwUSuhCEF5z#+v6<{TZs`JZ0Drx4hXc^a!(+)d*R) zs>OVbZ`E5BTcJI*LVIdObAiUQNUO9pj@Bq!vwpPlKSnsV%p0R@X{q3H?e^!DLD_fm zT_NqNvSRL*_U>{Pw074j#aN{ntJWJuhfc&ToBQfLOm1#f?a|h5V#TwgSZCBK?y5Ou zWv{HN+N#GE8X=x{7q3I*by)G_L|fPQ3`Ob|dW1Q`T#Z0;!%o(z!MeOlBUq_>;fgiO z745#}7-@DE_D{pYIM?;bIPX)I&&zU^ELUmFedYWcCw{!pI#pL{{3|v7mFn|8^|`8f zitNrWEBfxzCo7;eN0Z8_)#`)Q*4op=ouqtQdA3$tIfA#GZRO9-Zskucj}+nzaLO)JKF2HKE{b@UV&B#Hz9K)Z zetstCcHp$sY^+p9D^;15I(Jv;-dWXriR5F20|X);B}~%Ht(&RUWi5A0-XqKrS~Im$ zReN3)Sk=6s+!@T4zU`>-gnIj)PS90?GDw+G>fe8B&81f4mBLf9`fjo8lcn;M?0*Z- z>bz@8yGq(sYj4BZT93?0IiDI&>0E4`;;U3^`um#jb>SQ9B9@tGG#--AcNG73()_-f z8*09?x<~p{nRTZ;JDIuR4B>q0)2*tRQcIu26y1Z0^RR4Iihffd)9(rT9kZ(DSXaIk zN0!yfQI>tmvQIg28@5(Nu138s&MH-|+?J}RrIs`$S+4$;t3N8dQgL*THNK_leY;e~ zXXv-o&$r9ybRWp7wTg3D;SG8BF+U-T&uZ^?G@jI`{#G;A+4y|Xa*k*gWyeYXd1)UN zi2W1MXM~@Y3O!%$DsJ|^#^)q`O!$JZLim#KH^P^NCzR*cgsOs7|9xp2d6wrF`c)r& ziqNMBeTvYh2z`psrwG)(Pqpt;?fbM!`c#kAs>kZa4}^bEjGqhtC_J}zbSu;5Wd?}& zgzz=NQCJ<-dQ+sl!Ch8PfyVu^_(HkS(X2{aRU_z=rmyiCp+1sz zeXdZStsU@V(Z3h^gnv@jztZmPEER3dm)9gS)ye=#$)KtoPl4>XAL$8!d2X$$wRf(f zu5SEc?Q@-eQXxrSC26gU){4s6+lgyEK3n*lS* zJ#bg!0cG%z`g}xrFBh-XuReyUk74n7PW>&{>@C;qEpPlnCway&W$SkN?b;YCs&QW_ z&5vcjPQwnVuhw<@i_^Ssz1h)Osv7s{>3Ox@QLJ}Is1M$ISTns;g-YJ1mFGG7t>%YS zTXwGIsN$OYY3}wHG*)b~jGQT>eZWBPRXXkk#cH2^68;3sIK3~?iy_n3ri(iD- z9r{T?>$Ny(4%Bal-V?5$`ZJETV>pWhy(-PN zokHcic0P%tyw}`a;me|55`H4QQ})zJHtXrpMSHceD}GU4#YqoIuiWcCv`hRRQPsRa z>nP0>7^}wZdakEO7wu^uE8rL9j`K;yIlQKG4CYV#n%{}4j%ywlB^KkBZms-Lwa2Ti zG11RjIb%?tYpib*r_{IZ=YDRJ?`p-Me%}?nJ;ZX%I=xOd&kKhMUl1k=)Y|PTr?s^^ zT5&%i>?9ncTHGnRPlfl3zEWTf?IyfWVC?-t`EImM`L6YmKY5jP7^!N#RzANCU+HtD zD`SJVEqjc36=nUd?Xx}>#!!u;%x8T}vE3hEkLfn{l~2h>YpLWIaxJ+lSLA7GEAKzD zsm2w@S5mfEu`kn_xLbW_eNqeLYnb0LqRe+^pf`yBy>O!NPlC>Yq`kO?Gv%9s zYOk*OtgukP&g-}y-|Ky_{Zx6CIpbVa4gaKktMPi=Ysc$+s=Zd~p&G8$Z^+MkGuAWu zSMl?YbPpcU0zCI=I!8ELvS(}jm1+z5i^8W`NSd>9@9MlRXZ&qyzh1amI77HPV6J%0 zVYwr8Zj`%vH_?NHONH|)da>vUf^uNr6}y{6ZxpT<*q_6NHwyTm+gO|~pNJpS+USBT z)8FnIBXl3p(XDp+s3>?_g>jfB@3$GEVqj9ZxY|&Hmh!tuFlvuke-WCFOuNK}e zUj3wZ2umtB1~~(dlX(W#lRscSf$dFSC0QNVQ3v``E(Jdk)ws(V-Cb1cHf>$C$?Z=C z^L4z&H&xFaP4UkAg`)c_<_n3N6;J110leF$Q5SjZO|2VDZX;fRF}zUq{4X9S|5$7B z5!Jg|&uiPPcVTUNXSD^l`=gHYV$rqzDrfSpw_mJ&9oPMp`$2bvYxhUF)aq*g4bd2< zKiiUn;iJ#XxXG*QSOpO!We<)j)ej>Ft!tatZ;M%V(mKsI9IVz z4&}WJHKHDjm;Sl$=LxS9_NcIx=wQ#c_sVv6f&7ShQw7VB34XpSpHmzn+2z7n0`=#; zdQ~r;`|?-SCO7Jh?ZE=^7YmmNtiPuPa-^Q<_7+|$==n08R<*0XOJ0NE`3$E+&)yw3 zD2EQkAnvKc*@B*J+SMc<(~@WIZ`bU7;_+cFf#svb1KOH{e32;YLg--p?+}>t>B3Zj zXA{Okt(FSR(-b`){7lc_JuSfJj|r0JWka4!M*`UyNj&2?Tp;#jft(o+wIo++L%!b^ zPEZ_b{($f+fjNRwhcyEAJw;#*EfA>ttO~?n9G?`JSM-|;$aR*K&utDBW!xtVs&~mj z&po9d=1;ZBSBq*~C1+~#m%=&1al#zoT7kTjYssH@jF(*AAWRb2AM|-eh2Mz2OSoIO zTtL5-K#W%kJU1>DP7<(Hee+OJ$#bXZ8N!(Y`j-p%y;}IkiYMmz0%Imu+2<}{JMqNn z5SRz*^PKP+VK3?5BFq%8+{$yk##Q>8D@y*~7Uj%hysU*I1Zu~AR*oemIUOWCE^IH* zKjWdkYP4fGGPH-RlMVU`!WR^rxa97nEBW`-7s?db+?` zA~*PZg>3}Z7`1%6z#LLP>~|KvC|oa4w`+xas&Ojca?gB2l)8LMpw2H7UM1Wv$Tu$( z{e(d7pB3IGyjj>)y5Ryf+e%<9)1UbKTH#S)tlIAs7#C;vMB#M;c^)YoELh?69GoItCs0rA(bDfLL|Mnw|6Bo^X##W1T4tQo z3q5&}kLr{+6-Eg|DqdsESzx>X9^EDtZC1S6>6hYdul0x>cX{4i^xs4~M1L=QOT5ku z)_z%!Uzd#B$c6klmm<(TCqR*7^DFr-tJ=t<%Nl3?ig@ZHS;^OV{8;UVK;EK>HhgIF z-nQg~PqPBNQ0Dzk@p0^3tu}k2yk~q&cE4@KPH(FC)uP8%h+`w)&sTER*Q?e3jOYU` zzN`n<)t*8iFE-9_}Lq8)QZDH zTUMXxnM${Z=#Iixg7#9LCEfo2pJTTdDZh4ckwqM&_CUC;W*>e3f9JRVPn`P;Ra^Gi zKzNn(H&-_7@g!)^ma{|W!Fp@uh05vQE6zSu{yn0co%4jT0(Uw0EaQBsu&c1Au(z;Z z1?~jU5OfcepFus}qG>Zx_RM%;a{;~1n-b$-QTpqy+Vn$z#FcK1&fK-{p=OKMnN~pm zTMN`?Q-O02O6(be&M|&YP;7~%bFYAY##OxfUGoR=}bcD5Z3&%vb7KP@>}!UmcFbVY>DxdaCt>nisEy$KnbyYfqAIU9^{-opl;{035wp-_H|m>mz-ZB`^5tL z+F&2BR-pS<^0BQpKQAcnC)n4oY{|-;V9WE!9D%vS57{{3L;?Hx0&$4V^BT5$3bw^Q zVxiin3!E3xhV_gcc}KZ@YI^I93W5wWSnibi~Vrc*akgq^26T!^hc?2%!_;hdn@{oC*y!dM4LL#e3Az_ zIbX&@8-%_y?Ye)x?R7?6+Y{G3N^C~&^#|YRR zRLKq%-J|01@%Z4ie)AVZ*-MuQ^nI+r-sMap_G>E2Imh0;SfK9MgJl9T*6l?CW5W+z zAj}oeVM`lZ`gSeGif0bpKBLl;C%I!Qoo$t$j%qAKUc5}`41~OG6OsFP{sB=(bWm!@_~;w{?220E80dQi z#_pP81Msule#jit^(RNKNzPRJUJhiziax{Nlq*x(0cEXaw8%xeJ| zK#v`@Ko6yDJ7l(nCk{4_hb_EgI1X{K2k_X$+=!2@bFe*a$8v7=v(9Z|V`~Zzs6V#Y zIX5UW`n3;!Qv|5>bDc&J%lN^|tMx!2Ovg zJ~HBZJ)()=siyZKwj~LIk?i=bl;*Sq-4IC3Y>yR19W1h%46Oa+ZdgRW@d708b zc8-a!+mRxVaiSkO;2iN|o*mP<#9BBO^>RPRh+}*E)0cVEm=7`N8y&Ie$1!b38#~+3 zw$3q~vwdA7>urx7#6B%EwJ-OH{n2^vBI8;A)q?ZCTD+fEc!rJ7qP=PpbDBU*o~_7d zszANqk@I|noonFwnv%m(;WXiR0Xg?H&p13U5TD$71m4FGn`bZL!ShT*Kg7Wo-nm^U z9`HPc9v+`_g!6@E0)3w(oF$wnkSi3sIeI4JebGe%b>e-^BH?5KA9CidCq8Y!81RSU z=R1*j*g=Vfjr(DI$QKIe4i#8q$jF;oLOmBe*U<*l*F2Q`p(j+7Jb0gAo%NF|8RI@v zK+d@6lW`i1iMo%SL_C3P&0&`BhCBn@D<6#a}zw&wgn?!lu{0rd~73DbZ)WkU>$H%#Nu4r3^EqRawdiDch2A#+1dGwq+HnD*7bQ{Wg z@tQ&JSkZJgtc`{!7u!rs;5PO=yn#7K}pu1SWm$6+SoF{Pp5&Kl(Bmo^VfFE^c+~|0p z4>ho*f9h-BsDme;83Jo`mOvgo0{N0B)VZUhp2)$gg;xoTllJApxq{ab@$q48&K4L4 z{ULK*sNsT2c8nBzNA8cl0XZ>d?1@dk z=Lyt+x?)eA$rqlnW8?a9E)#=#QwMa|aZW-R1C%=2me|OsE9V(LtPjTRypXYuW(k}d z%soEv^hJF9nImi&KY9Zhd0|5i^8}9$Th0;WoIm7-jy+8sZAV;q@&KGq z=LyU+ZDP>}>w~_%2b?4Q;BPQyYgyKt{ z?vL>hpSJ5wezZ+lQyv$-#9%&q1@?zyIWKC;dYKb+#6mwqATP#7TzKm3zQ|#^K>pbK zyhD#IGTZoEp#NzCwB1-()AlD{j|F?L0cwMeKAazvzR*G4hT>~Ve9oI*f&9>Uy+=EA zta;l^6;BLm%H2Ya^o0+g9sRMLU4eDqEztMT0(QjpnsFN&^XRdsZM)b9@mUXEAJ|f3 z>J{xc6Nq6@8+iO|2lf0gCdN&C_iJBM?<;J`lQkT5$k`XjTt6uCC?k%?NDSMuKiDhS zd%dyu@O94EvSuBVTC)z>r<@U-+pO(dD$1Nu8^+K04DK}Z{n6+{9?`DeMn^wTYRdTF z>7O<{GJqWvx$}cJ(6dLFlL-|)Ow?yJ^&q$N1^7cMiVbz4rtne6a{zYK3SZU%@uAGO z=M5iX^a_p(HIE&8&})SG0OU!(wnGMQ>Rect^otxB`Cx~fIYy2ioq-OJH@VpdTk1zn zhYHvu!xlS_>2UG*5*It}aP+kChqn(g4iu=1V?Y5lC632vKjOe!M-G5kaoz5rHvM>9 z=*Z1^+XoxQNKE>249BC+tUuQqJI}`)@#NvS3&gv=_&Z1X06yR88y)qbKd&ERI}dCa z13tuJ+|=0hfX)=q*^fLtE-0}LYV0vVJ%^SN!)qCy{Lr~Sx9I~tI)hlmr_WhIZoTs( zhU1{a-m)0edyASOH|-VgnDmK`y2O~4+m1e%-?>6vhmHG%vKBcP?R$LSsSR@G+ zAH+DGGblFX7;R&|juokE?wGsDpXYdN=!<6wc;b*FZO$?L;PJCB&t%x~+-zCwi+IF$ zZ0J=2a@+Aejwg)?MM7YRbTk|%xD+GzU_3D4P;|oeO<*d+NMs4Z<+h*k9u9U)4SfW z&vtfyt}Ny{FXV2yDg8v={nlmmw(X#tow04+XWT%(*w*#50kw*Cs@vIjW8}`Q9gT6! zo4T*)7j@1v%G&uLcF9i8J53%k!(6dn+(j=CalHC_ltH>XTGj?JL;J$_X%arY-c$#!2M3Gy~a3eSwp^;Sd(>M=k7T| z&$>ER;J)@6ao<-|GUB3(G4bWOh_$;|;5`xVAN+oUHo5UWi1+W@$xydhr`Rm0C_Hxu z6tM0sV~?Oi22K=aR}`Lp*oUlb+QjY^ykE$b_b09glrbJE@Qh<1gC`y~@b;ljJwc9+ z_k)h*+S!L#JRj1gZjQ};LSEFHy4s#N^g$b2;Mi_Q9WwgFhWPHEKG8WYJZmM&c&0#4 z|Kx#=z8%l=?HKd{j;W~gvYhuj#Gy?L=RzD}+um~8^oNc$WW9624n6A*khan>`T@?_Uw7+J1e?Wl)VeRRA8?7y!V`n;_K%(_U;q`fA${~`^yCG zBIkk}9-V86%=R7=?Oq{1+u9x*V%QIAKU2nr96QUL18vKo{mElo_hr9&Y`1L(js0Ar z_5}jtp{CS2=0-hOudItBgxF7v`9J*n^G-cjlhloxagI?}&QI1Sca7ILHp>LoBsrg-$KEAXO?*27}$}&`+(Zlai&x<%Q;tAm)OG7r^n>;j58BG z@`)9Hq$qWoCQxJdX@AFX+cwk&I9}w*iTQ}J%tIXm9zVA|7Td(O{cY$=!4*Bs`=XQOLh#BKz z7k#|Pkb5sp7Vmg<`zY^^=bVgv>{i9IEaqcbJyx`_Zr3Ufdw8b68DSliH3)UgxCW!0 z^~h#bK2Z-}uXA1RyR0sEJNDstJVU}WkK}KgI0yEJP8DL?y#3rZ?XK*dJ9Ot-jCOUk z|3K6+2eLs|-y_klzq}nY+FAznx{NZ$LA)3f8MR~&;6pq>8_N1HPb}-;xl5qDw~Ieh zwhUWhGw*)?N8hxemSJxheVr{pdEZX|hYR$@o$r{Y#OM7xXE78xYo2kz6T6OB1J@$T z>h}G$WBkb1pQq~n(H5O^sN2=$^|tNf`mD#c%|JBzM1CM2bnWuNpXW{cwu^@>%HfFx zxPPKP^2D@X{hn%91LwzDaz4;@wvOvQ>g_16$Bj9{TOa$Z^D%zZSsr7eCuWqvTZXTLt9 z+qh5r+t%%cCIgW=B;hBh^Rq)xL-^1fGNAP&CB{ni_@aYkVNllms`a^$- zz_Thf!5nSe!xp*Mv2*rV$N_t7 zcy>h($PXXJi7k5TkTFiiLhj5hw!|Vwe90ZSfAZ}X@WX~R+AG+H9H=ql2gHs!J16p( zB0!15dVxAO;+rRidFGS6V@zUrZDU89c;rQ0$)EShvjxYZ{^+qKPjo%PaRT<_0-aj% z*y8&pfw?9wpM8>tYfLQqXZ+Z5rVtNVw_rW~$nb}S zFE%D_^vCxy!DHkZ+dR+Ketz~{?Dw_U`1#N8Q_hzR|7!*M@VI#%?-iB`;{<$(iw!)o zohsfkDDMHV#fJA;Jo7UqWCni7iD6%Cuy@_Cb$sNkAGd8wK7jXV z)Q0!f{+Y3VMu;CZ07nSC46j^c-NjbJpIPl`0!pB3K%mW@1+9oH;H3A)`{1f z?HHH+$OU<8ZO6L7pFW`2J0^D25xH|`ZMa|b=nP`mp8mbA(G%15?h6_9 zAn(Hk?4l2Cbja}W{&GL)@FzE7A*XFWXj})_*p6|a#}|q(@!;vtcGlUKwn6RiL&wdP(y5-BYOHqP8`oEa$=*y9>BX6=4m?yGU7T0ZFJ=BdRrFb zBXeJ-$h^*CuFiv8>+8yKh)rI^a{bB4yywZWVxQ#c99ir5peJ7RBPWlWIPmDn344QB zjNg4Z$JnQBp~PTM;zK*;gD>NzFW1;}=J8_Vy7|2UHpuZKrYU-C(K`o^1qv8H_V|+< zc_DLt&WD__K}T)eCozca{vC@pd#|o@+xyaf#Brao z@TIo)@%mytVTYd2is9Y2V>u6WUgutG&V#tb$H)H80~>hc?w|3%dtBt>`NBT-9c%75 z?gLvuZsv*WaZ_8%@d3W4JXXuG!``vIwu#4hJr|DWvDh9tHm)slcyfvPnfLhZk1sm+ z<8f0LVq?!OdAVQoi-q|DJbAfK zYDn#{B_?u@1)lpEd(H|dcAUB9ogX>Vuls}&$M-w2@blPwHXEhA%2kK~@$85TbbSDKpcH|6fqpB!D^C?_6k9UEdgA1E=%fx8Dga)8>V z&eI0W6~5#|+x?LPJTdvXQPg?O;J2uTAVovmB zn@DYEY8`Ff8#5O72en=7$9m=+y~j!{&SCPScGTMOxl^&l7de#m#{ZK5b-(D`#)o+# zhV5fK%djUlI>rs}KA^`xFpUix%C`1tpQ@pZ0Hd>FH3_9wo_hz~q6Z2dbR_~OSrpo3C7>OxMAg$;R5 z7toOpZPpuSBr@(?pKs2cnD+HpIct!)zVuNa6FFc5;GKu(i!l(-u`PEWme{{V9`FRY^8y#b( zU&lRMJnO>y?_%-9=3HPsu6Mi8amVp@$0Sh=VU<;NEh*=^xAsa<4<~G5lr<^uat41DVH-pZ5V{MD84!Z`$Jp z@}VDMF&=c-@jEq)m3=T@AlDhfbm5AsO$_qJ-*bW8|KP=|f#>(XbB#ZtHRiR)nx_`* z37;9PUw{m_R>@d%GrVI9AZ=z$b5*Ks}^bL>h9N}Dn-=D;fG0=8jz2Z3oiN%?L zpX=>4Nxta0CpZ@`6wq;g&^NIFzT^+!fzKhIam3)9#h$Yiz3q|lj7HwX=bU3KrgOxT zKlVPK@!@RqSq8gu|GbZ~vPju9r`k-s4$EKZ}oY3_O#C9!^(XV|Rmof3o!5+c4N5BXBxc0E8 zcE}t98`gzmnO-T`B?4o>hBmdPE`a#F--hB(-vmdo?`CcnS1v^8<3ZM%tIFm^hIsSfq3|`&YTZ*LhhWp#XGKL zj_)p0BS>j_&N{z<2iyh{o?O)4j*`r zA3L9Q-IW}B#^F8THk2HQIa$DlJ^=Gd9@qfZANylb)wZqY1Y3YFG0BIqP-oYWIMW2| zW(qR|Y{=Q;nI#@OY6(R@Te!SxBRfCvOT`24|EZPU=NI;%TR6AkX?s3c^Ry=l=q*QP zAUh|tIZLPy`f(NYxxn}tFZYSh6J*$$+RuB>{Xkhi%oFjjr;bo+hMxNS8QOlx49hs9 z&Ev~Fkhj+-b!E(q4gGlGAmI=J8MgEb57?uO%lRN9KKlt<%dzA68W|uie(v9X*ik$8 z14W1J1i`sSN-XTqL!&Qt_&ew5$N1c@V|(6@mJVC$!C1(P8nB1Z(FZc@$qgBOP%C1g zi+#DDD1&GG_`y2|cye=o?Q+L9+T(*A`9P`Rq>8r=c^%f7*7XCm?Ng`rX(vZ!U}ye? zqRbIaPTPSUSA9pR!xzLDRYwf5T z49|IpooTy1EHjO9+xbO1c;|1wsJE<6x2y6Rj4i(I1AFIGkLmW#8;I>#^|-VLirr4v zPDYOX<%vA@PoMQU#>QhAh}tj48;ozvIr`T7vJPs#Zc}gfXJDk=Jda zUw>nCA2Dt{PSnA-^Qqg=c3$usifMiHiRXFb+BP$&q`#@BkJosaUI(_x9imUNM~00A*06B7eDUSXa|qnF*in6w{@(6 zZCl&8y|I*-F>d5zEY`Z)tS8$I)IVb$Nbh+4QTKt~^^3Mq z-%j42KH9=F9?S4CEHjNc@czMaQ~aWh$L{@!-9R~^vyWr8qmB{dMmutdc|;z&`go&n zoyV8{fcta*#Bprr?RJb~dsExeb}lo-M<00f_A#x??L*A|`i}A#)4s@@Q?!MT{bJ93 zV;RrMb(Vm*-o-XpNr@M{OhaBOV4g=1^>XREzTI9=f99*c$J1>Oe& z)-QBkMdws9U#Wp1>PqE=73y$e^Dzw9~vj{`4G?j9hm zik^7g0z4Qm^a#Yn9+^L5xVUQDwjCvZ`X*=Yz5RulV>_S0%7|lI*3M*s{23E+o(Gl+ z*dLyCZyA*LzxdggSlH9%eH1ptBPV=& z1ZslZV{ttE;2Agjls!fM#F|r4d~L_)B(AGt&=2;+hR2_E#CVX=CYJkORPpW?8~lOC zO`PK@8FqZ;f**SCb?oVfvD(kMGama<1N8K>e?@8Ij|~(*?3@E~+aUAU@Si21w+$3M zlw6?1v)nq`fUzN)TeYpHzi2Z>?HK}k>!8dxwT*c(N3_X}zHN_;HfO`d0=4seA?KcS zpWJ8Ez;!sM(zzdgMiqUL+aDc!p7lXI<_lZSJLJw89e%VuZYVNz$UPRz+$VZsIfnDJ z9n`Rm+y7D2&mryl=W}A_fLs|%tON6e9^Ib{YWnBKXy?zE+R5v(4cRfjb)VSwI*GFX z;RmkS3tgZ8s&l|Td!cL9F5Z9D`n4M?vJLI|{`@R|G3r&H>pwR~=lb8B{!bnMea?_S zcb)xrnWqHO#u9c}#Jc_yR1P(bEqNaFc;X@nX>-S!cLz}VShd=qi`+W`LBgRZ2*3kL$ zULW4^@r}S2AoJRxP5;pcnb(8$&Ve>L;xk|1{Vu-5G<9wsmt#-|d}%u`_uE~`(7ATD zf!fFK1)=mqJoiT|+u`Gw(<+j>Vcb zPv7v2kz6g0bwEZO>!5s|>pr3!o|xF%2Z}8^*1Y?qKh~Ueri_8J!gkcfe7#S%q3+MT z^Pue<&Bu7=ZA063k(#$%eU9vhooy|{$M*M%Una~FI6wJ3d$zEs0&;lP47K3Q=iK6a z;e4PT#D}Mb@WkflE}Wxt1wJ!nPWh~k9MI!uU*`zrX9f!dVtHK>108uIJ40aZ0CJDZ zabnv%)V%FXqdeNt4`A$^ZRk8kaz_q`W1ewRGp|Yi41{|L8{$A|qw`w#y~X&Z3-kkg zk9Uj5k97s5{!n1su~pmSg8Gg@N8O1xN1z|uQ%7RB4#Wf=7joLz*Jbu$T+YLFa?L#N z{@l}hkbUKTh>P6yA{ILGbzJuiC4cm`Lk1WxGI-V>lzz#jN3cCP62t9j72jJ?{D?n8 zATN&-89Wr&j`;BCSiiO-KC-a_ddBQIrH!67fW61$zR&~Y0G>GbkS9K@HRRNoHi&lE z;)Be#j0ZU~U?2KrjUel(XpD&udgtdgjXiy!cb?e9xZP^IFLc-fc&}0P09!u?5X0*Q z`yK%sD83%Ied!-N+EWGEes6({c-Et%JysxAuRvVd?$f#27rDu~ zzObVW91~iXbJk%`j@UwNPk!+H?&So5@zEFS-FD6edaiJ}fDdhQbN`$L^}cCeC|ptL zXmcl!5AWT4Po5&4pL3ySU7Rlvmp+hjZ?LbtrjP;jfLsB3^H9fwCs!yn_xVrT{g_AR zT(BiRbvj8vN1MFo3ivP{`eE<6p4d1?=&=GZ@#DN*C`5gITv6xxau(3P`|uo*hih*? z@`^I}Sps_JMm^moclwEb?iW9Jax{-0wz~+#v#o34JWSC$AD#=`FEQ}v%=0}&n`b%u z@^gIW?0(QOpU^174n!So+nBn4_fe;|Gey69h(jBl$3mNVp+?LR>y@!Vkuf&xu|bXv zc|p;`BPR|#>jV3F!h8WayyKz654#xx?Og?GOdQ(4dBNk$dM4iS0yV;){;&hYgt~v{ zg+Fn<_E?L=LCzTPK}H)N*J8SO$L2YP^SP(eTaG{Tj}JEFKpgb$mpUV7ts_6UqVUwk z=Lj~$nJw5K8rL^%Y-Ut8t||M0-071#I#0&!F>yxI2W?_fC*m3Sk|We(_k7SNcI3&Bhg#>vMkG}amnV7eEsBNNbuzd85x!XVLEra$ak2dV1*p577 zbK9|e4p z*V3k%RMIhMM}Po!FUX0#H7vG=xdRHoO7Qw%pO@R%oMmQmIypEdfkyf=NWdy!IxSh zBNmkRZmem>g&%g@NA!)J+|kpgYern>hYUN*=*#`X^L*!ioEvM&_2T)FoV?ELOAg#4 z#|!ZEPtL?d2KC-0XYv4+5eFagf+yeE0x{vSrLJ=X?{)IRp7V63K)?3oPC`fCpZQ;&waTM)`NW=6G~o= z!#JqpEP>paXZsV|JUNmpewM)_XZ?~7ZQ$D2-~CxfUc_?l)WK&THt1&x*?ySl^D_j<$1GevZ-Z*>^*G zGWP5E(Eip6I@?8G^BdCJZZLG9e(;Za*Py?+KJWX}Z;agi)@h7kU6e)M_fC|V-;ghM zV+8I#|Gxq7++jRp0iJC*)7i`Lrtk(n+_`S^>|s7qKF5f*(Z_b&zmcbHJL{k`D?3ws ztVc#)_M>gPNG&&YzvKuHjWKNpMF-47sW)J+%ofH8yr063T2BmZWZ04;&v!hdxQz@w z&v@(~VjyE}(nc5em1WovgTCCS*Me<$=Ht1aXCTfaAy;&J!8$J7U{0paY$;(Ffjb{LU44wjf8qvnn+J=8oJlF896LUrza7LLw zU;O1&o0^~_2mF|OKs@FY+8>A)b#5OZIXvqw>fw8Woc`>C&TZ4Ea~x!KdA&`Yu#dKp zw=Twvylo>zAM--zwQlOT_M?4Zl?T4GZEKr$6kFb}a~@0=IDgnrJr(7gqs?02d>SXv z59<&)de$%kZHe=8Ap*XAZW+#SdHZL&lnzR8e^DEacem{u3S_Vv{rL6`jWn z&s|8HzKCm{bvnM1lhZ*JPaN0h;EKnmx8j{2`M|r44?OvtA#hi-pYR3rL7pBPl-i+# zn#Z4UaE2gbzcB{vu_b48?vI}lAmcM2`anJyuqL8C<8j-RIM~H_QO91b>!WR*$G$G3 z?U<&vaU059TVAIzkC>1BqrIP-ZHGCy#Xg{K^6wEG*JGhgZP+J_nK;-{YkX}F z<<21o;?ic%U=MG~USnMN5*Hoya_){v4DtjA2-wXKx&=O;r7tiufU}QrA)`N@(~tq; zFec|gJKEBAEc&92Ei&4`e2jse?QLhu?>D%A){%MgfTw@tfSA@p#|p7No)2{Pw+vhJ z!~wQJXISTakt2(goNON{cATw)0ed#*1>F&FG^I@m!N=ZyWD9 z=BF-;{n@Tve*MYZpY^eA-hJAJe$dtR*u}ZA{Xi6-dK|a$>yM8yvGH0%PJW)R=-;kB z^|3jw<+Lth2nGulup>U}(F1+r?(=p5J=hdi|V-b2Y8Ut=rY( z(r(wM#m0K67Gj$Q;u-T0ga#C+84j)@8Ko@uQ7-D7iwxG=X|YecUg$ zcTTjqQ=kzZKQe3?6R=I>EsHdctmEW=R$Omw=XulCqd6MFl`X~ zbRWoh*7f@a}SY&sYx^7!U77&KLYQ zh>+nMpBv!Wv(A~%eLN4058qzFzB9yAFY*A+i8y>dLmX`CXh?R1z~?rXR^a`v`slbs zlrb(99uc~=My?S}Ep$9As`__4Dyn`uz9Oo=JKiNKzmCmCb?$a>CaRttuN75YI?iqB z)2BoqQX4<|StguQ@oIPK{bQ%rL8s=SvrBe=C#t^l`-OW1^_5lEj&F-@D{NEAkn21v z(C1%Sb;B-yQnngPezJv*PEqBP6gN*3b`*b$!1%5gIt0dhg@8{3hW#;mS5VGO)aY>@%N9;YUBpv-lIk{_yoS@hvyCJ@X#zU)IJJJ^311L!Hba zYl*RtQ=J|!8S6l2^cs!1@Yp?70ejXYKt}sD!gqwH1I`rx17SNMRkW&W#|>&Lr+kcR zdWYy=sjctVT^F2aIw%Wd`q?u3Ks~Ag;m1k!X*OhnrGDWgq6az0y6BO z9~8Kot`^=Yyj!5gR|!8A?iH2@?-d>wSjXQGekEYXSXno(6O>c>tU%oF3ttr8EWBEH zyYN=wtHNgl`q@F)NnlSf9{Qm!2MIT~kcW%zE}iLQ@e?JZUgL$sDr(+sQ{>vu|1Q`^ z{b&x?!`swmJpYlX=k#K=Su?DG|H!e@H|z30I*0#E{f||>HUzI3*0}DB@^ehiTiSL)(<{5UXfSfq!ICCEn770fP z$k5Lgka32eBp`=hC@?N!l9TOeBd34-nX8!sK0tXETkIpy(LO;qwBpH)yNmJA2XT=B z_?Um>PnXW|pxC>fw4=_vbHUa;K0IU05vYUZrnV&)%b>`ui}J`bpRqj5-n?p^M+%!r$9;`2xw4+Urdj{^p?gdq zmis_%xUWBjvW{J|=ua+290O~Fy@M@!)|uy-dLgH-P-?^6EfC1NUB1UkjxF~$ls)Wu zpc3QA%&t9sFR5fP4{WF;vVjb6%DcgY&@cI1hE1>yJG4X}dbL4V3yYHhAw3=g%1*ZRy8( zVvCM(om=s-pQ9v;ZS$-h$3TXEf3VNIDi-}Qug=N(4N>g5L&=}9(Vkg>zLBw3ku!hj z>h)$k>}BMv9eD3;_LXZ!F6=SKa&C+n9)CdFJhs5LP~tIe=7+ZZZ4>Q@gFX8nyGsPy zao3oK;)gwa%#(Wo*w*n`8`WMc>jWEQ#DE$T#S?FeaGAiF#2%qG*q$a3n|qr*1m+6# zGeejxaQF`i$!+c?nFEVWDkA8X9V2_?6EEDht*ia{U&IF#- z$Q2%2#z-H>RFt^3JwZJCmwike{Ct+;&$zI)&kXUzV!x0pKJMQ<`9>MJafc$KFLHuE zM6fNf7#}h~8y&Jq6`dven1GxdVju8;J#Icy@3|<8JbQq4924V?Hs)tb4j2bx^BAbf z1OYpI0b{vNSR!DzQ1IB$+m|>Ogtq%?N10FN17Gha_61`kFP>vu+c<`}cbEs(_aXrs z$Du#`qaQNX^R7a>eC*@rr@9UKB0Ez!Lh$@Dht$IB0UPR2_owZ>4bQmiu-r9uT|Exl z+b&Xgz}abgQ`_N>>|B94q?S^M?|byrOI%zFmxg>^D|NKJ9#%d(ckL*jSgWN!Iyz0XynxKVt2p(1Qi?B?o+IV@H3)^ErXelvX;I6kg+$&$v#k@WB77zvloc#{_$ZyF#p)IXP`VoK#7knd3x>R!*d04 zY=Gmr-5-r(>d)rIl9MBQmRiGmUyu`ZK^Es5J^PS+rd4q5>^so7S=aQ3jmJbCc}`=` z0msLNb$H6qQ5*Va z&Zsr>N1HQ^+IkHj_Z%SeTp}Z1kE2d)*PjjN73*+OMQ4gm6!61`bBT4yvn%_Sy191T zIdQ*ozPW$aC4S^>iq84i4(gbuma%@Bd-8yi8@W;&#!b!0)%nMmalGUh+tCgl9eL3Q zZFuL+yp0p6Ico$=6}TI*^|@_7kB_nR*Qe`;4`3YT?e8|v7Ub_bqp#b@x zoUvt(A6v=od%4=qm;6$Nrf7$LKK-a@ zUBZVdYTj*A$vb|jpV40`JKn2bSlN^JyMm-xoKMOhsq2)P@_;(BM6wK2$ z4;8ZZVu9+E&lafHRl+^OofYWQJha}9x~R9EY2D6k)-cbG(3>@Op5eNc3-^ucu$Hp+ zmZ%M-KIc||$4>ILAkM?m&1;X+FY~Vc^T$Q0lhFBysMiATUH23U&A;a7{~aGwd$)Bo z-zfhZhdi0Ohd)xD$u5%a4%uues{YG&bG;;`{4s%??n$Sme@dTD_oegFz3HrUcRE@B z?vqYTEohP(~h#ZJ)M!3ski&n{Ip!{ccgRlIwRep zsBcJ*>ECPB|0%Lrnm&>~+3|G8H_~s?9cg^tF|Af_A60*!NVC&(>8I(Dbdl_)$$#H; zLOM(y$E2^PUDD-gNxD8Q))>a7YtoU*YM(Su+SNmDqWYZPX9MOoK8)5 zrbkn^#(uq`El_3l)YyKXK9D}F-g?vi^13Wk<<1&@~Qr{z{J*K0kBc?;91E)u37alM@;GQqu^Tp|ed;WfU)IDFC_KMZw zo-f^VPi!7B9TB?EwEMJ6GM*5t{ijo>&Dpb4rV}FDaoTBmP;kF=b$onJjpdos#>{GC z;)u56bo4#{lrE2+_MFa71qV)hXFey#>+ocMWO6(z(>X3)C&zko{7=d}&rQu|XWCC& z{OEM|;ty6fq}pjZKK&n)NJl06`kbYs^8cTl7`Mg$gyekqbZDX;66}$=UpC#HxjO4l z$V_uOryCZ(GhMrKDt8=)3)G<#iyn-qB|tAlNOJgjtM<~ z@yhAJksTjg9q`>h*e%#MI5jvfI3_r1)jq!A4=IxK$aU|J-Hp@Nt-N8nW#z7E!^(R@ zFAfe1-k0@nPq!=%4!`Gg(8@Q59+z+RCvvS(B^UALG+_Uny>GGPka6IX6a zjYmu;F3y=AzH;Jp!paSi?>b$w*!7-Ir>1SW58KwgbK16Yb8!8t{Wd;}mqqvK>0ygI z)B6q6l`9XNc3Ag_Y2U?PO*`TjzdIe2yoW3vIz4I5f4I4?)^TL=A2}Tm>_eY-<-v*l z+I6Q-rz~EQ+5f@nj1O6SCjDGLy?ybl)$jUuFWxpC9UKEZF+wC*YSH|AFacP9Vuq(Ads1MA*2J!o|g%zwb*;CuctdvJB==Y#*g@=Mdf zU!K1`7?3md{;W@3-2?kj*n`(3?n^T_^Iik%o;IDix(AuRJt#8!|DHX#F!c9>&!zTF zU!K1`7?AvTudeOEi0nc3X`8)R?OlE|K=ota^(^m9)9WXa@0UaWDfDkvd$#Y+9;$D- zXS(hKxjWyVwVvf(rtZdPr_)w_{&2RLYgnCa`fIHJo9}Y0u3O79Q@lXQb`p{|pYR%^O%GA3-{u zPY!R#C!%|MzK{PxVtq0=IG^j@8gcH*_vpU~eO2nb_dIP{IVJDFucnVHrae~A(%M3TY_^}@jKyvCwvgy*Tdq<)wkPs&0B&;#BN*k+ZM;<^XZt?-*~UdnZF^r>({+* zIx=?%vR-V=n||!dk@tK)pA#1adr#AsHUt;M_SV2})~5u1Oa6B7g~c!DziIxH)!(!G zto-7%F0$7IzQ_JzYW8mg?+^03a`AJ)apC=j`R?Gi0{=$vfZ*$b_XK|uh^>zg27Z^m zJNVJyOM%}|Md}Gu8VugU8zY?+M{= z4Aidf?NPlhgRir2ec&wJ8DvjZ_l4Xnlk?u+Frj~VFQ)A4mwy92ci>0)G|2IL2k#B^ zsZR83iH9ZL*AgE{Jo}?obII?x)&IWRoqSbbubfr?{&Dmg80EW1|Fx{`zG8hXXZru= zSX1^SSUuDB^wfLt<@JGC2VM8)#w|ibUEI?yS4N0-!kSNS7&Dy z+v)jVD*tNw6|;6DKgw3~&UUM_U8=Wr*XLhL7hm}2S{h^BQ}30nrCZHA`gnW6XI1$% z=;F4_I9UBR;R8a!=L&RvdU$xq44-%ZEkMObVbc<(tOxk_$<;UcVWEcyR|Go;J_8R9 zekKrapTOr3?3el;8T#;<^7T0Yw+Frp__t&4<>^8Gy>0d1t6v>@T5xgv#QS2f*S%Q% zx5usF|3|P}u@Hp(>sIX5?kEpSL}J>um11#GN+ZRvPQrC zUb^}{?+ID|Qr4+?qE0&|NQTo;eFSU6OwQ7D}g-!XYlmkuLC{l@BH8~`L4Rh zy}0N6{02RL`eOb?D~L}0A6>%FX04CB)vM>r8G|nb>UvCIMt>FjSn#yK`+ZmN`QUqk zp9pRbejs>CV1LATcW_7W^8p|Gcw6wp!P^3J`wzjN2Y(pc80h2ZV4uKuxUIo0!Fjs!tW5I@5MR6 z{^8TZV!zP$1$ug3pr(%nuMEua%HT%=a=l#>ct`d9_+UeDW^iKQzP%R z<}9wxRZnIhm)f@lWMXX&)NylQ5A>1QFR~Ad!^7VcuzzV_Kjg6or_XR+KRV+Lp)Z*s z?nyH)5A~*jd-e9+_0)76MK>Uvd_U78)(ZP2H?8I_r zUl^E|IL_9K(uY0Cne!g6{(kzotnI0pie-;44x9(GZ@>1yS^Bl$bAhv_mb(LQQ(~{) zgDs)o5XkLJL-u-gpUm%#fqMD9DL6TJW{~+Tek0TjZV%24Iwxn!jJ|c`l8Ttg6je{5ZU5;L*F$+4{r;e5UBa$nZ7Rc ztuyrS`Ji>*5MIo#|04V^26qH^1$PF|2%Z^yE_iA1o54$Fd?GYG%2G@ zn*wjX`*M8Xytr@n-#Pw5{{8W3!3Dwj0of}8c8|(hT|bkWbAA?b{C#Nd@9O*f`=QRR zdj2wqZu)HW&e?AVzaIQ!a8YE=qFA|ei`|0Wu?;pzV__@9A3 zKN5H!zA1Rey#AipxsP<;9{wSrpA5X8FAsh&5NloN8$wSAb>ANL?;MZ#f2h8-;*yPU zM(zvyFWHa2|K9oi{y$v%*J`$p$qbGPdI$2kwfetj@aEWepC9Jrow3*69z5OSgRfN` z{}yrfO8xrDTekXdV~2%;&*9C1J`WD^Cauor=+NT8@aE#P8Gl@`PjF1IQ(&HWeOZff zY_MzKJ(lB;K#cVPdvW9=dtLC_U{i2mz}Nig#qfRU?BJS!Odn!i9_$dvC+~v-_SSi4 zS9{tcRIR%NYOw#03hb#o-bJ-I8#e~*)u2b8Kiw<#&ki0Js2QFSTpL^xI78m}wa%Bm z_%EL?J#G*CMz;+6Va|Fp6S>X_$O`*=P+;!%+}`dPusbt2H8?c5C}685vA`TgyV2In z`P5$j)yqu>&0)rBAS?gk?W~WC9DGl-C-zqS^8)*zwy`etFRxqM_T<&?7~hKnwRJ}J zMi26+e_Qa@zJzU z8rUa!(XRx#?A;-O?+@<{E$-0DgSNI@zhAGdOLwF(Wd2CP(u)EB5u^z^v^X z8?$eIdHJfjvyjtTes$o@K&>D?A9_7I1J?!4k^XlNoNMQXewRROaqNLw)OBMZf9u8b zH3znAHU-Y5_eV_UgZ=5j837r+TG;FDq8W7j$<*lm)4zLuc3=kX+4^}s+xoYv)!z;3 z{y^|Q1GQcl+!Ba!W$=_B^(-D3`kuht%tuVQelNIt{_d}4`OL#Us)8({_cgCZ0$eYmx7xEHuPqz7IRR$d7@^Gnu}SJ ztCL(zKDF!Kh@}R(@%GZ5^OIjJI%hzS*3F{_=SofLG)vUkp|c-)-z}iiH=Yg3X4hcP zfGt^V=&b8sJzMhKXI*2FjdHaB}U>dJcy$~({H8*jN+d6!Y2*3`54kRcwM>PLIB_E*2!u9b&OZH;9fqo4Po z@%Nhf+E$J_L+#PJv+BJYZFksCoN=$#>OqX=9&N|iqfP5+kM(H`bmZ&H&m9=`%Qld%r7JXKQaSrEL11`F>;#?Xi62BOPPlyY@K)Y|++L{TQ=4)E(E8 zyW_jZv4MT}S$a&M2Xg&;XUV;l=LcfClWJsder)l; z#$9cV?C6~d@zjZK2`&iKpa->?fxb~P^E^2)!!rXqb+;}#^sI-@PpxvPmp@)z)@w?u1jlo{jBeLq#L872Y#o{)S0N=Dd8^+?D2tt`Ix(X@OH4J12sC^ zbo|(Dn%8=_&UsoqE0o>a0)E~Ny`pAwX>7hev~#wn&f${+yxECokHj=9wW0Qy{>p&P zd{MSy+n4=kYSv~iCg7oRws^j1A?C>Qtqf16mdf1O<`>`0)NeMem=(W6;^Z`kWKqIcK9*pl3(c zp7T!qZ~gG6N7*(WzCD-9G0v4AyKMm;eDl;YXPfrsO;jUWwV-s)IlgEujYZ!2@#M8dTeH~s&Ww(%IZ<(H z*BD(luDjK_)TVxHp>lWKTgVqWr>@n5S5xb(Z*3aW%-M|b*|L-WaWnO{HimP6H&1@- z)X@1J93I%PwFmB~b@T9Pyu)YyutCO;t+HQv;tkNQHT6vEo4Up&0$^pQHJ;Cp*|~7Z_^$# zPbV&a@YdEJB||%>>RO9?G1^s+%2R!9n#bBcjP}d??t@;w?%%TA7?aLE`krz`P+R`3 znM`ffpBaAdfZYDnr|YqI`o@u0O}=BI_DJrr9=iI=*Y8=)!FJ@`@2=H|Z%kDFai2Rw zalB=6u^HnwUS;T!vrS{$r^eNb{k_v1eCvny?D( z{(_po-1*R*6}&U(TS4#4&|Mt3zk3GqpAm?ycQxqC8QwBOZPw;0hFIoh4)W`pj-S0` z(_XB})y2mgP=501MGa!9K_0gD9>irUp0zW{-yGTX?C=M(W6MTfJefJrqjdb}ti`9Z z-X-vE`Cg_^`CG%dCX*l46FTab`P!2Ey=P|nm7DMSVDurkUZ!M)y!2>&N1xis-8gcU zH+TFP!`@l5Yfs{vd;J=>`o>^W-Drz9TlRV$ZOB?*<5Z81vhwYFw5x3?+v@T4!MDf8 za|Y^%It$~vcFyV;v*)<_`iyszPP}Cs>oHc>rRLRm%d|F?i{Jh#W3v{-T}w{3+)wQ~ zkDiw?hdWujk&ZT%d*9tVbF2(y>(1fj>Nzq;cjfNDebFP|^8$IT{T33Fp0791x^Ks( z@Zwn)Y~(ZxG4v(Q=75cN(PyVPW^z? zpICIL80LZ3gL=gvcSqb^K6K>big#LI&g|>2-rjXRnWY%O#@?z^tiI*^%|y+3x%l!y z#iKJrw0lf%4fYPqm|iY(L4mFNZx-}=m8bcv?XUXo417kZou1AaK-KK?W$&5FVWxEA z(wVC|fSufGC&$|>xy_1?m?%A3u&oWc40^Vea zm(x9@V{=yEPT|e3Gqumx&2oO?@WHcPrg9uS%d2B|b|Aj<**xU#86Wb)g8JAGx%9zT zt#s@*2hI)u#y&H=8M+hpP7iuyC!d+qo83zT`=ZA~gVzLld|B|~fR3$mF2A*R zzG{K}XL?X5+sbR>T#&PKChRR6`-0N3t*G$tLsG4=}2mOs1N*ay33bcwDeG*c4nG*jK*d*nd1Y|K+Qv7|}X2)iX-*{?kOupi< z!;|Z=>&EW6(lb0e(4Sb&qWL&OU^ZgHTLbg5_hyWms~l$1y|3@4nRztu4FCM;W;~>2?d~Q1|4d zfX*Dmg`RVB?0c$r@`6ugczrsT_CvpTwq|a&c=N4)DgDTgexqDm^^l2gAFc6XI4|xr zy%^3>c{X_Y**ZUHd&PTK#K5z&)}P+U8pGa-MYfE!|ytD^lL4Zc~jJ@9`Vd$oI}qV`|)hB?;J<_##N8`dh5u#-{V}! z*@^4U)pso_mh+%LZ(?ou_8e5!T-GCB{r0HY=*1jbcWw3B^Ek%s+{t>DT9fBEN{ga-+Y0rvD96@Z$oSBoW>aCYtuEl z*7>cS+T`k4YaOFMet9nD*x9zf+Em`Pn0g>Lzus4KsBQC!WlzTVe0*O}vwMY#>HX|1 ze6F}prw97oJX3PtPuQOui0|%;sXqH7p3f%KnetiH8ri9h9jL3mX#MeK=yO$mvGh?Y zKDl$Go~?mg8v-%ttl3-Rp*5m>fxbTF%>`e3y!np$#%7}@Gijdsvp3WFjg+l5TlJ2) z$n;BAJGSM=8ICdWd^*cf$G17^FHdD^U~fNBx>1ksxuzGRamKnT6SuWgCPv?g%35P% zm?N39#lE$;zqK7{>m6n4eynYKd}r3* zm-ThuT2E!2Rec(hzBZ+Fl`qRiU1N;%uD-hVKgt`kIci%Q{ZytGpDA6Blz-34S}{+H zo?Hx6oy-2@W-|J->ALk>ul0U39zBfqW1RAh>l`fa#c1R0akso@{VgT7^)A6V!4-jX zM&@(XcLhC)?arASA9b@Mqhsgu7LW30W6hu4?tyynWX=;k+tx+zcQs$1rF8wyj=v<( zBb|7963f2e`Ki&rHL&x&R&2TCb-y+SzHgApw_|W>&>DP(=$*bj%FPzNe5UNl*qf){ z++>#qevhj|4eiyLQ4d+~vc1F0)!(LMY{VXGu+{_A4^@-ca$gs`H`o$9J9uT_-);2G z@8ZB+Fe`O_Q{ekExq2@Oo-nV;_}XtgJ9i!r`hIS3eQ;UeH#hkOf%xm^wV3S@FFy(w z4t#C+S8rd~_#H$hu6lg7RCaWDHqH%R4I2V;5t9z+#2{xwhLVYg-x$bW{;rvCJ@uhK zGjKM^)OCJ9epJvH{OZ#=vLgd_V$_EXAN#p2Fk|(yEgk1G=4{N)%zm(~9ChDXQz?1t zRY%uXhTlA|-7EXX4&S))J9k?He$G0bx@&`)FMaLAFze=Gk4Mi7_>3@DYx6es&6sR{7FhM%6rY7b;;AxEw0@M_}gv&9-X@ok>gV@~R%Z@=}?cW1}1b>Pj2A0Jfg&Z2g7V|{AsEXc)Z9gRgMZ~dAJ zZ7up7&y=|ALAJ?x8;uUPWKRuJpLD$~Ip{FCW#)~6= z<8?09`fR_}z01{!$A-Unow*s*rn%a`9_ZTN7{4_&uQfe;wN~GCbD$&NzG}x$%&yVK z#gB2>bv?$ZzxqetF{b|M+JDb7o8}S6zR1DW+8puAam~BF&EIpvwzH(O?u^B5zS@v= ze;QMKa`#-X>Yx+PXKdrt9+hYL3|8OsrpDGTt~DF+#+g<|zSdl;N99!~UY^dQw68<4AKnXS)fe&*MC$p`g8$J(n~Yvydlv;Val?-(7MF^AaguX?pNK3j5hod0rv z?VVlg#V_Y;jqV|ypL+GruQkw-jcc=GPv*>w=XbPgUOn_qw64$=g7BHJDgVt=OWag%3zp;HkP@`Dp;P*=Jv)|g}_RO64fWA?7;2fJ3 zyYqvS1GC%|ur)t%+2J<^YzuO6&JN_W&;0bmo{o&2x!O1JPYLXgeLXYK7e8@Py{bzL zJb$yW2jpN*sB_GY9_3%OXL7ccH%8ZT;LWkJk;+R~J375B+mAU$|B)YSWIwKJx4pQX z4?DhkuaEVzUv;%#Yi+M8AN}=eZO_Dp+LfAleMY^W=-APZy84#hm##L>N%@i57iWVE z9rveojrMqVXIW-#KPzuc>+)l~@^tF&y8g?Qel44|Wc3wWO?s?sEqY%u#@UW`Un!vYT7GQDeP|5yzUDFRM{Vyb))@D`YG=2+|E*(teT}i#;yb@l zw_N|ITZ^xKKU+qd`#O((581EP_gXTxdcLoI`LS7^)%aP_8khICIrX%xt50eB?z+_X zoqx?8;6KJ3`Q=*1UbZ)j?aAf2uYGABWB$r|-mJ&?Y}c}{Uvp#lM zcQ*XSn&=y=^3wX2Zcn~kZ|%|6R9acrrS-9f_Ux?Tm+flbn&?NKzA@^HE`tx5??kBI z3gFJWtIkmGzd5n#EakxKzi~H&7n3bHUL3WEMTRFwt!qawPHV^0xuf#*J1a`=`!6{^ z5YN5xT}A%JmkatEgRk%B^m3rBr#8MP`)$-2sG)ZJ@y)3Q_T;{ERn7+d4lzT#_^nr; ze5~7>SZvtSk+V~$-wLSjmhFeHoINLgAE=q0j=kR!c=@dXFFrr}jb9&(d&R~a&6&TM zp&)+O?0~O0bn1|Yt=T~B%md$8dgMdax=}N)jk(lEzx3_7HjQD;w)3i8zr*_dXQr)R z{>C0_VJ8+D=s`_-M8(y!+SFvv&J4^`E#}rb&4N7}G2b4@2|cSl_h@V9CkCj&*=Rj< zg*yC3^t<)r;JsgC-ab944=HU_GHbLctd zM^=Bn^3+ETI&(#r!A^ej#+w}*^Tu~}%YN2!*@NoDz>l)(P-miRxyq}T@76#s{N-=F z+KrT5^=NrE^*3{Jb)s^Pem$eh{$e;24CTC!WnG9 z+N|*B2hQHrfj#iKM1IE1JGb)aUo2G4I|8}9TjDjY*|RqnI`vwES(x7ufqC(h+g$Nb zJ9UYVUK98}h1VOoJwU}FJ1poKQu9$k@1~gpx!Hlg6R6Q19}tk0w~yB3mEnO89h>T{ z#YbVUfDX@}ExmKpH;=wNxwV>_8xLYNHk*R1a&}^kG36GQe|s3~;X^MU+8Auex|RbE z;)}-yKiZMAp{u^VvjaZj$*0~?-r7s)#bFDLB~Rnfi_!kX?i|!&T|ai!^Al&(H}7td z^KHG(Ok?2H!k>*dq|~{`w`R7l58T1G1n$D7!2P-^xFqm-vN^asaGuHBm&*e7-VN_Q zs;^6ftLL@5NDl6dyK`RP9***Jvlhc$0rmBs=+PY96ZfZc?E2`)z#3)4#~m;SGWCkD z9&2~I@=`i>)schwqwZ?`Rftk?T zCzQ@RwSMO93%TCSn7(%W!MZR*yts|c$N2#7m32`+>&D|}eMB(o$9VK~Y}S(Nfel@2 zw60%sShMZ^jPlyb(;VAoo{kJQ267x0kS~J`edCS#$}98v;xl55#oykdU{BS2?!31D zV7BhD^U2@3=j`zC{0^O|^Xndvq4q`$_l(ZkS?`@k!FeDDcC``1xnxs)b)|ITS1%Ts zcLRmSC~xgdb?wb@XKODWUcGF`TqDn>@0hxqr~NiYYpQSUx@JeFX0pC{aNS zqv}VC>iMy6Z)kg~u0A8(V~9m=f6>l)w8hKU8rjrtm+;N+{4_V8&L7WaIi_>dx*OY! z**S-`7n7Zt*)OztO39q{=0U}*Eq`a0T<>b7^SMQCzG&|Rei^$)2BUmjtBtO*8-JSYVhPhKWgbY z?%C{{(S7umkl6$G-u%ZiV!yhdjiHYEmoEE|lhvnorD8S?yPlCzUw({TnSETAlhKQf z@0qGCIiL1}rz^9ebvjVy4 z)WTjKXIU(3?**GuwOOAXuvG_p{%RnrpB~KG*(|J24%EO8)YO_$eTj!>kNQs6wR-vM z(LC{hX9H}!d1j8%?;nuY$NtqG&xS3Td!%MQ*3L=eHGlohgH6}X(Yrih#(t!DF*_48AhTY!Rfl-Z!N!_DDo1_H1Fr_>&KVN7pc9W? zeR%bcdn{(-@w1jwyw<{=4JuaSk9OoR_QYS^=E%nyZEua^EVm~9iM&C#>K?9 zFMigwX+AZ%uhxytuC`AJh|TZgT3f1t=l6z=XA`;PRzz`4W-R1 zkDARv{pL`fjXNo>nwMurE>F)3KeFcVJ-}Slz_<4dB{K`Oebo*kdoBTwu1 zR_FuBKsc7dFny*h}-$^V1i*o-Z1NUzuFBVNYIKo5re6 z-s(o`Ok1PPEw;TO@0s>_V-94?xxQN2=qGO1W`*y%RNUp*zOy@f%Qo!9seR+QPmR;P z>Ux}E_a~4@I9By@z(MsD}4XKyJya_w^6*#W6Z;jzP_mM zS?z~y&kh~Ay2#yOGW>{9-njI&t?a($(fw&1VxBt3Xq@GkjW<%Z-kHX6##$>Gm{(=X zbj;Pb&e3SMC2O@g*W#lie9pPIeT%(o_GNS6U7_c9b@0^Si8D`Mo$tD0*qg0^??z;5 zXKz0CTRb{rZd3jZNb%Q#$oRd9*#tb4{=zs4u;GNBjEQCwpO!+lP6og^e>MHXCy| zGawVMKH{qX#z0TvJT|x^xO-lIZ>YZMM#xjhr{;njUwYQOw(n+EJM^yLn*;rekCNNN zF^0N(UK*EuXQYqD6~mtE$z8E7YGW2-KDKn?lplTMc9xwTcJew4Y^D28*M_|P)W&|9U(f2;SL^KFch1dQ%BMM6hnZ9_hqwB!;G*Et zfZp5rUBPt$8+n{1I``Pwao)|&ITM==oEE6(NrBHNpADx3@>rXhGbiq*z}rc#roMe_ z=|OzhBM`s58p!yQdE>=Umzjb3(8j_$^Sy_tn3b0<+l(>HfL_md`-QUUTr2DBD<6H> z09pA`GT$$uvCT~%=sCfbz?_^>^ON7(G4^aP?AOMbdaF0j@ZQjgWsmHy*!DzRpRx8s zOnP%7*NZpBo|?P!FBaauH@+U!!nX6%pBlt=Hof!W^49}j@zgCZ-9CZ5eC4ELPi7u? ze(c%kNgwRU@oF(Ix%rrfb$#R^S6B0xN6(htKuq(o|MH4Uu1{yWbMhHRFP6_VHOSFA z#A!WdAeTPXV^-qG!B-9Z=ne?vF)MunJ92wvO|L(5-z(4;Ufs@;dc{+pHNCmkPCor~ zzT)p6prAH$#M^H?AH10Apd-`2zSX4u+L(vJOy{dCZKDIg70~ameLVyBf*5 zm;CT#Z0N-{2XX3)r?U_A_?}5M=|>%Ms8qeio%J1r1zOCYCO**XvHgFhR00MA!# zdT$&vY%hB3Jk{iGn5X>E8c}*V)uq4oNpALPP%nS+ohP~2sfo-!i=kg@_fHLaV@IbS zb;!v^{a|+bW#?|lhmxy74*Q`7@%fNhi$lg_5kSYlm7AMp}(Fpw&wXVQ2NT*J`J?vU;b?I6E>NGoXQL)UE zAFx+n_ln-0nT`9YCcW{&109>5Mf*rbrx(2QVWxY`ytO*z5wH8JPj!jU2Cpxaof`En z78^1#==IFs8m$dVuRc^gd{3LH7>y}De?DTEFEl1wGeOzl#cN)2IbdrbE}kujb50U+2$< zePhzgL5^CB-!;3|P}|lZCmt1Z^s(M0sK1!{vo6?(?L4+7cJ)E!EV^zz^+)w6|5#J) zeP;7%ee8?oqUURmTBp378+&(zjX2I{>tNR!$n3d0+qpEhT)>tL@cf;tzWL3;R?hm2 z^2S0tGkj|i+gh!tJgE0&lwUHh$(l>Nu|B%y7H^y*zOnlT*bDRNdG4&tg^ay9dwb-e zFX-elcW=J)?JYAOls(>CWo^!T&+DB-cN(zUz*k3x-yZ1o)V!!%dcvCpTD^M8v(uk- zXQ4-RqGW1?#^6&P)j!%iDBsb~9*YHHkN%Cvhn#Kmu@%qSUeK#o9DI9m4r)u+TFA}b ze8}xl=h7HxYiJDqVs{4immObJjs2`q2U)>KzUCB%EjzW;9+jtlYLFlGzR+9K^K-_# z9x0tY&?_Ial5fwT_d<-yn~%Qz(TUmG^w%7_hv&nVta5eALyxC-ww*`v>gD01PBvz^ zF*qae=7ah2mDd`D?w5G>-&(9)18>je0Xe;1^`RcT`O8U9hUYJ?I?SF-eclwj*wwS` z-l<8vQv-g^Ae|n2fAkV04M*XI37e&)Wtyvy>go#*mjEp^B4%Xafu(03MV#c)Q+@5^Q_ zzuMn0tnb=AF29!TC>#0ul)4Y)m#I5)U%t!sYpuN>l`qHg z{#IAIY*Tq@?`qfRSMnKcy)Rum)8pRsx6E2G-TB^u<$R4nKE4g!B=4B_t~tLN>P-Z9 z-8=7HMSX9!U+VOxdB^m#B`}v013BFxJl*<0UE--9+)MAKy7}SxiOZ+@er~FNW1t?k z*4qMh{9Y9JOoP7H-di=&< z0q|_~%7(r+<;BJ~hdTKb;>xRkc9o;%19bMGeC5tOANtdR`lw59*7n%l(@*2qpPxOn z2WyW?s*vSuk<)(+_`1R-8zG~05 z_9%ZkGq!GTV$d~~IJGBdSAD4%Kqn?&e)`3a_0*rfa%@*IYTV2m58#R(UyLj(Q@79*^_8puXR6kw2f9_>%=)nE2YwGusC=li-t+EUI8VSAwZH62*;tz=eSJ|rW4zjwj`nOTM+^St zm+7*Pc+fjne)J>jx;>GNJUyA2G>4d#qoX~Z?HIQ_>fW>_Yq7^VMxMU0P`b_%PgZ?x z>#vU1LRNcreLL{2U7YgurHA@A_9!2HMt$pT+|jNw?@@i)7rXL3=WNK?qw@D1qI2fR z$y%EnpjUD+UliOJH14J0`8)UCGQRE&_>SmY+b{83tF_N}Z-LKtKFwq8`>j~)$o<;` z8~MplP?zrrd@c-p-*Xq`rB|c6cMg0X5L1t>jf{=h;Z@kw;DR?C8vBL!f7JvDBp&J<9KUX}{}| z*(Yl@%XC>rZ$7AA>D6F8!gptD`Ox~H-e%u5D{qd`pH1V^TiYKt@-_wvY#O`vXGP{S zh8$HBTHmh4Bd_0hPVG~D_^F8uZ;zMnhJMZ7`BW?F%sJQ2OKEv~SQ(xiwcn#0Uw!3l z8^^wrJNNkN>f^59i_zBE**T~mDh^xckPfwOeEjIwc;s@6fd@JS#zK}1j{!3$9awO5MPYOcJJi1ZeH>D zST~n7Upg}J)z7y!tplwusz&j>L7hK8JX<{4oNBUmZfnoKv#M;lcRp%qeeCdjYb(Y$ zW4Yw5tr&Rrd|M|wa{BHgzP01^3bi8}!LPddm6A6fnK-3mJ~njX)&~WBR^GhTRc_rn z#Ii1}Z7CnRWnX!GF4<3WYP?eZ=GC(%+E>@&`mF7_BClU-uWjXBkG7)>-(E(a zF?VOjcE?~`*MB*t^%xI7#vJX}>WAK)YaIP`T^VY>&EM=tJzb%{+V+g82Tq!CVyMq9 zpN*#m+Xh?`{<`4Wfzn?ygAT0O+%(hbubOq}Xj>ohf-gU7Jh1DUZj@D5JzCjFN4_>> zBgmH_*IM?q8{^(G$1~IC1(ydG1((jeIRbfMeMNBDOvSx2pyx+VN8WfSpROMrp3NA$ zF&m?C_$=eXHDtBnFLu{xbIXfI$uACSt8Y2mI~|*`#_AeV9I`QI^26zv--`@JIbGqOfEe8;{!F&9}_$(5Kj)hogSPJoD$Gki^0bX z*r?Mi)oOltvD7F3=0H7WLC)vo8R`(1ObvK`@}C!&tDeOH{G*4lZpQKR0;#8M-u zmwnf$HJ=TETEqnNFlYQ|Z)ROD$Etj!dL7rD*(j5DT<<=t&2-c?|Iv|)Z4JwLmgVLy z&az$CrK1g5v0S70&faoAWMa^d6c6sYnc7G5J2qfz&sy_Z)EQ$>cYPp_GvSViYffzJ zrF-ZM+JE(<_LBY9fX;fincp>Z??5eV&DJ{t=LPKLb05T0Lvx73hu-%_YkIlVqdvT| zEO+ZxGrc>{&zdd%g1{MX4*A8DN1y7Ghp)KKi`v+=fA-F_eCD=C&|J>8IE_KBe|JR= zYg9~B{do3ZjgqOk^2)l_Q~k~guU|T~saZ|C%#<8&FVJGA@a*KQZFTk!y5c?;RScxXwNQ;{$I={Wpd0xl@zc=*XNY^S5@l>LX9>drglwGiR$lC|TG1 z@#Zwz`Q9N8Tk%f~`n?1tL)`;4q4GQ5sJQB*8}r?m_4aT>bg(UWaiFFP12N7F%*E`? zNImBUV#~eH4EyiCJ$9z}V&Cw<7TtdaUa!uETs>=IFM|!)Xk%`*tG?@H%Fj6^x3|lB z>oKtEm2fXdVQ_^}!N8-t9U8r>0RimkOh zYK+=1_cGRQu6&E;W5Zvp>a4|gp2@)*OfE<58=s!cn!fAS)0*WZbLYJk-X=2llMnxX z7P7PUnd^M3r!w<1i@qzZ=kmzJ_B~HLe%4~T^K$Va^S+>41O68UTLSN_dfa=qzE`QE zHS)o$MNJP0sweY(!F$c=d^*&MJ{qj#0eT0K2W zo5Jf`e`5BXp?5yWE)JZ1HuUY^o{B54&j~f^TOKkqvB&JU2I8nsy*_K{)GDS~>>8-= z^qGVQZp&f-rBzCw|gW$d13#}pB(tvb9bs|Q4Th8tAQNVH(u>##^2tUCm9>@?SF01 z?uD6HJ69;*>cwr{w}!tna9++0HV5L0b84UtI%kX@Di&DVJ9<5w6gX3I^TUh7t`rY! zplei*;>ge6oWy88w0+}yzS#38Q-k%t1oG7WD@PfvFmeQ_=^K} z(4$)2nG1po12VCk6ZDCJo(g)g zZwmCI-p&a12I{G`wtjT%$y~@#=L4@ka0lcO-@Cdwu!q+4jU^s`xyaP3pWc77vEF0l zrPIS#t`2UF&6|REvt4<8@TTCk!7GE?f;X=F)5RaeN8DiX{uz<2%BNZ9Z5rPvZx_sd z%XG0rbeY>iKWx4)_{hv#|Jn@kVOTG|JAN++ek%CR;3tFhwfIo%el_%4gEs^(nepb( z^tEt)|2Fi=!G;;x>jkV2t_hrn_XZyi|G~gH_@3a8f=hz`7+LbJ{CIfp(A$H%gICP- z-J$CLlOVaK&jr5|{FmVOg1?;c-$MU9vC{YAHQ}EUh;w^zPw?pA9l>7&dN=Pq1LyR8 z!LI~=AN*DDe?@+5=(h*I5v2F&A7}bcp`Q*?^J*NuIio)x{9^Fi>E)L~)f_Bt2+h0~ z@~h)Zfmpv4{AuL&_`ipKeefgU|7&Q@&f>%2bIuoE7y6$Ae*Y=!t)YJ%=vyu6WA$!* zKJ@p4#9sO7*pcTgTFJglhb+D@JtBD1O!p4`p5XG}=HQIrrr^REXNF!J+!mZ2oEmHn z9u{l~4i3l;2u=w$1p5c)2Xx2G*fsQ|;E}>L~z zu)8eSClJ?K{rXY=Ie{K_3?3J#flR&f@0b4nNAPFCa{_x|HXjYHjs79QxxpSY-5PpE zbkCddfzZ2x7YBC+FAQEC*q>Jg&e+5LUqbKpe717FPG5aTk5B%8OZ;;^Uq1Ie|6e=0 z@{7}fE1y|?i~lWqmHV=PgL&WZZ;wA?PWX)-okG}a- zu15XXi!t9NS=%oV7u8>7%T!!4eV-nPtC#KzUF#J`uJ&b*{~&N?)a^5x4h8mLKYAYQ zk@a~&XQKx>?ANY=S~_EOoExa=%zzDh`PiusPp%hG!wEB$V~;=_*e6hLArD#Urtmie zPY%?1av-*tVCHuO`gmG!ai9+MbsyzXlXLslVB@^@PN?tH0KYz9=R1@d_&f7r9T&Ja z?2ioe0j<@%^nikUV-{lY-)-jEi;1dBP3+mI+bs1&#vjryiB zjJ3T)i-*qqjiJ{K_=oUU1eea#8MeMW@EOvc)Z&h+8JyJ}13B%t9?Y5zA82pp3~WFw zd#*?J_E~RyO2sEf`O?X2KlnSt=LF8WJl!K_LXI(?GvqGtC+Clvjq|A%GbZ<@sjK_r z4HsXX^ry^}jTk2dYNJ=Hy*@5bgI>H#*h1q}kBZ^* zm;RuA(4Q8FBS&d#u~wrTAcwV>@^|0lcP{zi?Zt+G-H8D|a{YTJ#8PYXY>)C2S5EcG ziH^03Rhc+!<E%^{y!NAz7vFPU+M1mE)>aw13}?hVz`U*H!aEl)2;3|3&YTW!wrstB{I3tj zGo)X=>qk9$K0e^LXF$%+Jj64jPX%mm3-rG+FdKQE8FbESz>8HL6_dStr7m~HeFm{m z`L+gZ&Y$@+LfuJvHIf(Sg=Y)r1Zu4>ogUOj&WG&E;Ko3Wg<7F?k8oO$Jyu;)G*@6tkr&8&@<_bIZN(nVL!xEuRG084*Sa<1^ZQb zWzKy0QZs?BmnogIJ^G5x&V1xRTaTLPQ2n9$t-iWa`mYvZ@Y8>Lt*`wiw-4>fKA5F? zy%*}>ub0b$ivsg3teq8mD2{sol{o_!%ra-kc?16Pi0e%Qwdj9&zs(B7R~KJ4ouxCw z&l;~k>&j8R^Pwxx-uuT^ZfiR6Ys07e(7Dl#pxfiaZ-_EjmT8pDLGeYI2!}l)A$LA@*;elCLvysm{N09gY;h{6ft3@As1!{Ok zK&Dm@pFLhLeFx0OxwH4|dsf+6^JA-iV7n=h)BO<7yv!5jvp&$f*zCk~zj}{b2P&pn z)0xAVlfL^zZq2STx$)*E2IyTJId=+tF7q{aHPzRg@McZ7M_?b##vIw|Tm9lU5B^^Q zv1{L0U8AGEa_2`K&WL?6yY7SDto06Jf;n3Ab2iln&G&{ zt7(*V-CCA?tZTDO*NQjV(>ESE>Kd!HjO+R=$7fSJwC4h?4s9O1Ig8Wzls0eIXl1o8 zUAD0n+g-A^VBef$XVX4@Xit@+?j$|l9PsYFwOr1> zx!K1@&ucRdv9BP#O!C2`RPH7^Mb}}zt4$`jam*{ z{BHgZyXPvlgr2*K-_75de>Z%v^2D5(*H1^T{Ou}ky8kDqtq=aN-@S_`1UDqcM?+r| zyeIsR1m7AweC5dL_~7c`uwegSw_xAk=KLBU>uzrTMV zP_tgv2l9RM%%2mwArOQ7qM7<{0zMi%aF+dKs2Jq_CeIIjdcd!L+c%3vz!op|^}+81 z^6wUqPr)++^Z(^_f4a^&%N<#HMriKe;?3bd5&q0j-^;vZQ;@Ui@A<2L)3^WbAUIpW z;%V#Na?drZ_|wI?k>%_yoXJ;)-X8kHp}u20FVy*cX7JeH{NVe7cLb?t^}qMHE0oU% zg72E~#?ZeCJ{#N|TpOGmxDPi5Ij5`tK6Xv$3xmX8xHIf74dl8c_;~Q6!7af{1Mkh2 zAZL8_zeRX_D12ie54dCQHL&$P9G)LsKjR~z-qoiE*9D2c@NS(QO8)9l`StPP;Ew`5 zdQ+bj-Gf5Kz9~2}upes69a}skNDV8$82owo%xv+9d-aRNTWkvNUdoqx7yREeuM=-^ zc-Bt}?g*YZ)2D^XaZzACX9VvG-V$6EsO!1GtpPhdnXz223|<>-3-oqdAkWdE?VpcY z5=-r?|9=1E&~FL!_-(<}f&B1C!6#;XXXxvLR|Gzj^aEyXCh+Xwdjk8a&g|FXfuV`D zy6>rN@wlwt7RdR>fwSQJe0OwLhB|ZRaYOJ!!CQluM0Y^&;PBrR=#lNKBKwKpuwbXG z<=cN==bSA*8Dut#MUc7|r^V(ULu0$xGdM4>m%9duyU^EufwLID)z9xkLJtb;*IB`_ z0oiWB!-Lyq*h@aSudAPRdb6MG^z3t4?Braf8$CkP#?ZL}~=LOFU^!AS6rvf^&aQ@VAb07}t9N7csQ9bUF*=2^S=RfPkgZy_j)4l)q z*bsPA@Jo4>4-S4}npU2kstyUx4W1YLNbqOV^mRK0j|rX@ye0UtY5MxTf^&j*P1F4j z4Q>fOJx%w&F?i!NJ>a6?Gt>0I#D3tbgC7rmf0`b2zu@`P^x)V%_`9d+Av*`p4n7im zcA9p0Xz-jMx*a|i{OvS7^r+zc;Jv}$Ow*3n1n-=tosJD&F-<$~7=+*X1;GcWX_v!- zmjpi*r2btW6hyXbV(j{j!E1x>pQhao3cfY?i)q^ZhTu1*X^-8fY0pJ)c93{`{^x1h z>w!Vmdu1Mb{pB?6o!RaE^V77?NkQW6^LNv&bQy$59G2c8hTXPO=s`mno$_f6Bozb*KKX?jHL4|;HLR&aB0&on(U^M2$v1V0@7 z!!#Y7nH~Hs({xCBJLIz9g~5k{%=pj~gWG~%nWn?e3BE8*hu<3fZ=BC;c& z8+>t^j=CVoULBp@kG?#3%QPMHb-|Ir6~Rk`=pS`_kaKeE(Lwh8xP60x55C(~0Tp#N<2a0l}rgpG?!q$$RqOPSYu`nx<2ebNxz?cpI`G8{@n2&C|4L zk07y6yEwQ#cw6vm)3o^!L3-bk*>3rPX*&IY;O*0N#(BYio2E0<=b0a!rn7bka<g{>!bhcG+lW^@abuKOlJ9*UkLs#SMiA8d#CBDLxR@?iF@@oP17~0<(iz+Yc~Yh z*T>y4P1|-3zB9-iuRA~Zt!cXc=HTVQyMvth>;KC%-HpP4E3>^T`R@9{G`;9K zLE^nQb9`~m>Wlw;n!f4UAUVG&eZAx%!SjR91Yew{mtHeXFH2o7`^Mls!Jkgk%QLr^ zKPGr*@R!r{%_jwk^@?4BTc_!jdj+qXrn}So-M3BCtFo7`x?`GN{jebW@tW-0YqIyR z%^7;_&rZ|pa<0DRk-^_g)9X{`8#2>3eBU&E>l1>^^*^M?H=Z#~-?m@y>3l?dY?|Jj zS-fTc;3>i1Pt#kk4E}1GzWt_YdfT2s^1gjtkomnmd-9I!r|F%k@13dnT~7>teVX2# zS-d;3z9X~zj`cz2^_}VMJ5$?t9TEKGG=2AZ!KbF_J=X=9&-Z-GG=1->L2`cIho|ZL zllS|R_XpDN4?Zf$p8imB|8RQv;m=Lek7U1pG`jb03^MEYrJncw#5BD>GkgE{PSXdD z4`TDd^!LH+-;aI6G<_&_e(00a^y9CdrVk$yw{+ppO~hPUL5@RH2uWc!Ou+7 z$DS0tICx9&-r!e)?8{G{61*Vz_%!|0<{){0IttiX-kz!poMzuoGv}G?S76!Au9ivI)1@10XmY>->Y@ahvxUf`1W0&;vraEQAPSMGKJ^ z5TZYW5Mw5UnA;%4+6*D~eh6_&lD`n*-hvRXD}?y@AS9rk1dN^V5QId_ASCVwAxRAK z07BC1d>K0mLh@D+QZ$E<(t(gFJA~AkA*A8lG~Aa~B#Q_&r5g(&J@=&_0U<+O2pPFA z<9reYArouPT!tKgkcBm5O-`ml$i}*}7lDw&Bh;LeT5`36kUJX$wm`_U1VY|N5b|+c z{+Q$fgaQr7cL)XdK`2xoLg9FXH5cLBqU9kJOG~aoDBcZ134^c)B_~5DRgPSSPIWgz zV2^A3fKZcO*P^Gjvyy8N>Tq7&yb$WC%2#qR}-w+xzUz2*|3xuZJ z-;8xN*9gbA;CgCV2SO`)*y2)#Ez=<^stzYGxilL1R14Ez9LFy{?E zNgk4)5QcMd~8AJAvw-AP=AdLv?7)rl~euFTKYiC$aQj7E?Gsrf={lmC_IQI|F zL28g5WCqzvE)(V&k$_O=h;D>&M;s#`A&iVcSm#J;AIWt$auc}*fxpIuQK<;~HL44l zOL&})qQ248Jvu*OFGf!w%rp7{gfS+`M5tlR0J4glhcK40#&Y}E#$*aPLcT&6$F(}H z4q;FD_g)ysevfC)@wEy47*9XOGv5TCWFy=@fpI6$&k3gpV@zaS6WRBPeF(jucpbtd zfutez$#B9RPGUbMQ}^T&gxe;wf0NngDM<+DPZ>n^lTQ$)CMMK6bp?41VOnw0nan3A z3H_cPovvmQmlABQHtkz^0xd>r4{g_jYv?C+PLc$z#t`e^Oxp4^BMc%juUz@&mkQNdo=Gig!%kEH=oDHf`;S|ghd8PPRfy4g!L`DL+JV9cqA8TN?8Bm zHRLqmyd~7XguX6iP0KlF#W+G=R;DH+3H@0`KUXo&Dz4*I08ehYaC;R5qtqK-?_Y!G3M=R5bivJaF;#4cNM~ez7QUECCv5k4Fvv~6rS*Se$I9L zoIQI^UtZ)VTw5=jL3qXeul|GZn#bbnj}YEa^Vy&y3&K}w{CWk#x6%;4)AR52;rmwzKL$eh zNuPf1A*}V+LOb``5YA!^5AVlLW zM5`7=`zS=`{r}^}hUoSpD@sk4wstCFC6W0Wn4*h_TX=;-o#{zF2=C#y(5FK#Y@;v?A0Tm-WOQ zO0GhTmyA>*b0NmBL8vXkFv7=#e4cO?#6%e(Cg!-rYo(u}VLPRXaee)&*kq zst{}N=bE!2){0LaK&-tHVx1Qd>rqF2#%RF24KG4$>_co4CiJH1ZivlhKx|GeE!f+Z z^r7Vkh^@v$Y|TEki4L)CA@Ut!yKfNN|Ap9*b32WL*qQOWuuok%r&|Ju-4#-bEF>=> z_9#dgr)O+J9lcz#9wOfli@i5P>_dmAt_;wX_Eg*dt?#4))Eb&idKIF4&`yiT@5oWSE@ zVr__%Dv&!6C)2Mfc?f$jmEKG%Mm|BDPG4t8WGTd%)5$}K{5>zuP7iTTh_HuqS^vC& zgn8y~gSenSVGRrSLtMmti+e*{LLZjigt(0Rmi>aboIPEU2I5M_Ubz?ID)xJI3UUPE zn&A-FvZl54dEHcq>+_Pu5I4}z4Xk$~kJJA$5cXyh`?cve#LfJ9%NmGVxqh}KhPXX| zxI-mRAnuGuT9G*rcNruV;kw>ElQ8$5WDxhtWCg^1ognV7OSu04pC5P+@n9{ogq(tS z$Rx~v=rqK`%*EgB;*l;8k8(TTZ;D6HLOhn4?1OlG2)PdN1h<{c2k{j3oSF~ubQZD_ z;+eFhI9UeqtVaHWc#iAj+#*7s&yR$7p$?%p7uG?%=#s2t55!9~3FBXS0P%7R(v{qT zc%>-ey1vS|SC2xxMs3%a^BOf=k4?r9)^?*W;X1rojzmGc)sD<1Jl<}{B-6-l!u571 zKB-5T@6LAe9O7Mic9(PSvak09Qj##{y(Q#3#QQY}*VuiorTcFoK1e|d5w4*J?A1fA zw})IGj~bB^5FfWE^zsS)f5N;^lam(YJj7=XVZF~--}7dK`d{QFTzfD1_>%R#qPMTQ zk!KKJk0u)+zTrB3!!`GoHNOiJ=6=r}z2~+M^yk9?h#w=QKlujnQ)x1g942=melAFA zlfi^_f9XfIlCKcI79iswe)9<9d}sXc^y~-M)K8sUhxls-#NWjrM)_nR#6OM6afpA} z&%duA{+mo*LBdLM2a?bek~j*IG#e7%Q%a#pP zk#~^v{A4V72+43sW3m>K$#~{4@*a}agnWQxS0O{m9&(Lvo0FK-C*#Qm!fmccG7@fc zuR!wRlQD$a_mzh!+PUg0o`#g~8KnGMAQj;Af(=L%q{1~J6`?Oh z`BhAoV>5sb337{dL0H2h4^vkp2v^3H1-218GQc@*UF9laPk7=fej<;<;97By;d@ zlr)MSj;0S|<3k$P9@2RBjHkq;3Dh)^eV@1$(j>0q$;%;4=?-aXDM-`eL7GkL!0PXB;(hHL8VQAp?L!FhUf z;X0&?T#J`w!nJs1A*8G9;kB-iuD618qc^0Rxgg!@1L-#Vc4s7{yY%~BRY>=%LwZ0D z9yTZR{t?&CV|w=FAf%_P?b&Ha&zbinYj~9#((59S-o%CUmfGLZi}wzs59uL&)FJUT zy7ZZKf8n^VjQ@?>zsG{~LxaTMYtk>S*WVI(2Px_sq(59&e-9%B3n3u}`HqkjB5x6r zQzN95Mo6uNkTwV*eGWp#JcP`(2wD9RvboJ6?rem-{RsKT5emmaDDo7c=r0k9`30fa zSRQyF6*erI_ptq{YwZn3?tOIAVN)bgqoj4sO1ubT5)@uWC*p} zhERu?2=V$#s55nT%Ysn%+z9n}fl#l82=#uAP+#WhN52LN2n}M6AwX#8D};vkMQFr1 zghp*gXbkg?WBl=p5t_(2lV>0_WduUgt|BypF=ypKX!ae1=F+EmhY(tj8KFhYySNBK zOKu~y>>5JLk08YL9$K9kp*5^~%^!r;lJ%(&+Q51?(%=6$e-oc?9)r-9-3V>Hh|o6H zu$?+~D&#LhyII#B`nk70Li$) z3J~TyP4CYz-dV;v*9;-PmknL)fY7A`2wh%@(6vSgT~`S`yOEvTMCfKwau10sdCodrL+m2-MA7p;pkt}_M92x{!t^rw*$TP_5 zPRLqS$a-9|39``*vN;m6RTr{tl4FqFG>|=kT!ie8f*j-`j2Bi(WAYMmq#^kMIa({o z(GNh5Q4(^@fLwzd>mcOV6(Gl{1vzeJas+a`A&_}3T~1&T=1tg?oPeB&+7kPO`;#Ok z4pH)TJYb6bmQgt=Ruh1_Z<z%A| zH^^4VynZL|{RVkI`*wi79O9TGhan$*5BYcz$R|cXJ~ZZm`;8$#j0gE~D#%ZYL4L~qJZG&hWOCDIH^w5L#F zx5aA-B|#-935!BWOp=hK`Jp7|m=u$tq>2Y6ZFeZ?dO=CQA4-ND zP%>47lKCQ(tmC0%9}XpFVJNu)B`-DQD^D0R-)<=RYmpO#ItoN5`=AueMp~1_gjx!5 zZlUc^3O9$sdpndOhoKauhGIIYMy^9Co|B9sU!jy(2BqXCD5Y3qsc%q9Q(Kv?P|9W` zrO8CX?d2+vrQ`{e@{C>n7nBODs{(aZj7g}g;twd5n7`6bD3w=2sluF9=wX%9P^yZg zEZGXB+E6IfeX<@(jpF1nl$sn@lX+@wfl_-6lsZkI)Xfd0UK%L%Whf0euE9wt4O0;M z(I^#R{f()$Ng;9$O4DOdn$d^mc}WzMmbIa@S_P$bA1G~DPum<&+I@i1{tuK+(McV0 z4@&24P`ZqS(v|ger9WN&LFrbXus_|)kPA?Hq$5+wH7Gq3lP*wtrH0a*HTLGueU?D! zn;c3%de*Nqc>$&W3@8ICLK&Epe1bA)1(d<9pbX*sA&fnAH2Di<*l{Ssxo-sZjqFCA zLE&`|Wz-@lqXp6!%9!lrAe6E72-nIu&L7WM6BIHH%EU=fCKV^FZ!*1`LZ7Bghca~z zlxZc&7bw%)6Z$gaD3qBTJBvQe;?J|QK$#O4%3Rhm_Xw1ET$}S#63$=H49dbrP!<(~ zvY5ITbImN_n5B83EaRMI8=)*O3}uB#m}_M$D60xWSC>|*V^Ic^U<+e?r4 z?t`-LHI)4Wpd6qF2W2t~%Aq1q4#y_{pd1+nh39LOqg-3Zxb}|yg2MAO$_e)Kk{K%X5E*$&aZ5Oa+N)~`UJ|g zpHQw}f^uUwl$+Fkt3Q<6W1-w(t-Ow}+~wT+At(#(Z9b@Hl>P1j@_mP+l>|tEW)jG=}mvHs4KsM>j`JkOvSW1yN{pjthk+O42EF`&9Rp?b-n`gNcNWuS&DLXBi4 z*P%vx2{lGss4)vejg<*%Y!W9w)VN`&@v1?MpB8F@;ZPIShMH(O)Wpn_ z4>d%@qr3?&47Mm{9XpAW=~BeS%sb9n^xAp%y9%wQw}3MFv7G%K63GK`l;? zO3Z{>l8>cMLoJg5YFR)ncNS{-y-+J`g<6r?DxHE_`7qR~v7uHQ1hqPK*7yLG@8{K8 zxuMpU$sMS5IltZ{sP*eYZNPC2uR?9K8fxQiP@DXQ+Vlt1W`Cga_mQ*(R9@9++4rvXqqcZb@AzIKfRwOdB0-RX08j_sLQMG^C_fc3>^{`t%s-O#jO6%H)HeD6)G?eh zmWm>xN;8ERrG!JW2kF8L0#`b-OwEB#=%he`$FCH z9_khW>Q;KPEf3V~5vV)p>COdEcX14_$EkZZLEYCB>VfD`53&b`5XGe+EG1Eimf8chH2|(8N8^LTjKYo1kg8 zpc%QKnH!*4U!mFSp*ei?WWl&_$rV!kxdp`~2~E!{AyhBm=9W} ztI)D^gO;rewCsnV|EA#W=sj0%)cB zLo3aC$}HmT&zGQ;uK|tMdbCQ5p;gHatt$0ZXO5c9pw$`&tqwKTO9!n!Yi~FLT4UDM zv@Nt|^ryv0XszN9&TX9&TAKvq7__#mxt#*7y$r2`PCh{EcopuzFfKku}E`>HYDYPL&p$)wOZTJN8 z588->&_;63DCQa+6WSQg8AEMjw?gB62HN;UWG%D_O`uIoOs+$l)D7BXgV5Wl8KF(f z0ByPhZAKbsGg%X_!)UXr6Z$iIAfb12dJuZU*ZJDK_9P10eEPhAIv2WRJG4cdzvw-* zB@vQ?FwWAx(3a&QbD%9}Pgi_|wyGqw)ybf(83t`_dT8rvlE=_Cl!msEIyZ6+{5Kxj zrcBT_(~~W%Z41Y4<-Bci$uDTzPeI$koIBe=+f@wO?n==1P}knf; z1!&hqXxFDhyYZ8^&5wh2s}T7F?e-aHciuv~OHKFoLc7nJA8`J|y3ig`+v5_@p3H~# zjCDNU0qx}=!v4I#b(f@ z;m|`nq06(NE7hQ@#mOJ&+8gLb9C8Y}`42kZkLdOY=uRi-?mFn+a_Ihi=)p?p;kVGE zWq}^OGV~b9$aCniRKj_2K+Z#tdlY*7F!Th>!F%cTL>BbKJ)tM52|Z~he*7RW^yG}0 z;xF`6I`q`5p{H30JuP*lSD7d$9+@Z{}0dyriMN!0rbK2U`T7|Lk~b7#+pV@_sA*GM`z~8Hp)OBI{^B)70@S` z&?nA>KIs|sDI1_qWxsh`>obNzpZN{?tbfqwM1wxJ81#7+q0esueZfiSix_wDbLh+1 zi{&q%uVn01hoP_84V|x{^$oG0Z>$IXKi0jObG9<(wyw~3jDWuLIP~4@>)uw-_fz-5 zw9pS-f_`Kf^kekyL{I3a=-rw8(9dpxey%L^^CH;{{Q@;#oB;h&CFqxPK)+G|`qiw^ zukq*WIicSu2>m8w-(roodqBU#-rgMq{T^$3z}yeX<2ulv($i;g34MLezP~h}zheJh z)q?&yMCj$4&V+j2{s;YCRl+{KPe!Qo1NVJo>`$EYi8XxY&tIlO|H|I-{!je}xBoZ| z{pUjHzuH3oJso<~P3V8vhd)oC|D}e1(aCEV*aU;0oHWD3k-V|3}+GyZv}Y*!_P%VkvA}cs)Uc> ztuP{0$bA^mxIfx07|~n9h{1U=>%oX6z=&NPMx636;zlFyV8r_jBSA$N2~(2~FcJ@g zkz^)}q>EuB+Xf@~4HzjB5^77yI#P8d&tarK3M0*S7-`GGNJqWtd%?&Mk8oSYB`|nC z&d5wHSxUjkIuu5>doXgefsvDS@mMwTBp}qszt=|o*)R&+hEb>!jKU9L6a|c8)KUC9 zj8f}ilxBQh*D}h?f>E|E`3j?aOmZAXh5ukw`O1^?%jbOy($c&FKg+`JbmB8=*MmR%!1K>EQ|qF2x}Y2x&}Ug zF^IVbXCTbQ*VM)k`Zcry;rbf36vps6Fh+3u2*w^s|3}fcQS@u{M;K#{!x%dl#<*lK z#E{vJ^$bJ~J#*tqzX1|9q zhnnVggE6l**#TpIC2|=C@2@i!nuLBXDh*??NEX0Y!djP7-!kT2#Fv6{FxK~mv4Lx71M_a22;;w1FgC>^^mH?GZAnia!Qed`#?~V+ zw!MI{y(RerV`p?2yBx9w#_mq!H;g^IVeD-WV_y##`}@H-P!z^NdT{VMj6)@19Om(H zn4TVC-lGZ`1LIg-7{{6CIO{&ic)SP0;JyCF>18m^^n!7=F^qFr$tD=*IqyOZLQNN$ z>(V+HyqDj&avH|fX)vzogt@NwhjAl2jGN4NlW}jIhjE))_`cq_a|y;>#=W;5#{CS0 z;~%hwhdp6D;`2w`|Csxplp}9pJe>vOSvwfd=fik00LDw^c-08TYsPxbTHZW?@pd1K zcg+8OHjED(|1mz{_D@@3eC`V4%P1IM7s2?>+P>50AGu)sWUqcrf$^I$ql&=zQya!# zu3_FAXJRHyVLD8)5=<#f7Q+lxgDGbuzhNqmVXAXsYBk71nEG>=#z~mw8JN6xz_ho+ zbVZn61g0MwW{{BFfEk_wGtv)cwEZxnSAZE~7|fV0Va93>Gj<1KM2rI*Mf zm>JW;%v2L5f0vnAa=^^$kv}lA-GP~%8gdMWnUnK#U4)tYHOxG_VCL-$GhZ6Q=lMUw zEN~uX!Rs&!wS!r>7|bFMU=}M*=tqenFiX;>k~d+NPC`z@EYlDs&x4xf4#6xx4`zio zFf0CrSvd=#KUEIHtX2zV^_1i#%$nz5)|vvd_A;1tX27gF0cJhws?WR)FTiZ{7G{(9 zFq?w#dGppVTTF)8vH{FiKVi1X1+y*vY1ay7`yntp8st69PMcwN-VL+MLYQ3{w;T6$ zp9-_bQkXrIrjnTbN_M!W=gW=6G%!{~6{4>YDfi=46hWYQmhxIny`5N7O_He06F2P*JT2~Z;$#a4x@BK1YG5+eIFxT9IxsF=bpMkj{3g#va z=4Ni+QXl44K5lyhllOF)JF~&$eO%^l*0`q{%)PT=@|>S}z=e5`J{_W#Bhg?U9Sidq zd&TST=1KPa6!o3v+Bp*!=Gm4o&)tN1p#{uK?DG|Ra+R^J<$-yfUfy86d`)BCUIX*a zKbZHp|9)+l4+_J4_yH#0FPKl5>nVMDo)PAYrZ8Xbf%)2p`G)?#Z4C2Wf0*y7{o^E< zpI5>B8XqR#2be#q!u+`j=I>-Mqu#;%I}a9Oz~c2nODYFTE(S~K3rn+L>1|;d4`Ep; zVcGLxIon`)sbTpoUi#UBML!2?){YQajp4_4AB zSjjiRN|l^&TXD+BXqV9t!wVPzTyD{~WAS>lra zU}aqmD;wu$&rL4E%CQ7iPU^~e7gnyxuyR*`m4{>V41twbCTC#f7s*gq1&+ch$T9rP zsZ}@|tRgF56|D!W7_}7-$ZJ?7w!$iT2Ue-`uu5-%#cK~%+1P|XmpcHf{47`%`oO9< z5mx2J`s+)v*Ya}7`xn^cqwHT+?4_LLU!m6W^J+SH?fmM(G z*H1&%!D>Li8$5=^>wQ*Zjhu$nq$I4S=}8o?)RV71&1tJO?ct*NC=R>ItE zzrbooAKPz+)u9orjvZm~a~f7B`qY`RJG164MPc!^ht+j1tZv20DOlZ)!|K7l_AEg@ z!Qwrl7VizU`fv^O9So~qI`R=#|Ld>@P}9Iwum)9zH8=~bAv$5KpZ8;y<95}>tbPYAJ%2oa)ooR^6@IYxwaP8^$DNfotm)j zj)8S=6Ri8kVLccE>ml<#nhfhP>wfYF*0Tbzp3|G>Z(+T71?%NvSg$U?dd+^mIRWb} zx4ka{>jPtc^0kG2? zhMo2u?DWORFW4C!*qJNA&N2md))BC?OR#fvgq9BlyJ&XU#hI@JbC&|4<}%Dt_BHHsn_!ox-ip*#sT1tV$6!}w&D8_gHCTU5=BxDy zcAZ?X>vCT`YHARNaBd^Uu84kNE=XF!a1K8br!0sWFJ+OPWh24w(_U2=s{;>PTCC^~@+W~t3 zYaFl=_8=ejU}_zb8un27J#0Gc5%h6X8rWkBldG`DE`&XBWvEuy-=X?hdf`aP90}1A8Cq;_G(%;A+^1 zmcc&EZAb3FKIXta-U9Xs<~#Wt_G$WiW(e$aIbfgXTDm}umpJBfH^Q7(zQewH8uoRI z9D;q5p5BTJ`*sT0cQV4hOFj2uz`h?Le_%hj0sA5Actl-~7r}nA0`^n(`x)2K^Ukne zjD-Di4(wO-jsFqJG1&i-z(EL(kP8m4sX0v{7)<7l)G}DV&TY;ba;I zCvz(}Svfvi9XQ#K!^v3-POcqr@??jTw+Wnl%%A@loPzz}6b76kCY++R;S{?Er}!f{ zB|E?=brVkM&2Y-5gHw*$$}fadVGEo}2As;};8Ym}r)ozy)o#J5&RT0+f>Wy(oH}vg z@b$4%pE?_`hDKH4G;RZ@$viksKf>YtHcpEea9XB?(<(Zg)|ue6sQ{<#G&t=(!D;^$ zPDd9`rzdc_FhGx83c(edDnVJ+j>gYnckaWb4q7vW5)31?atIMb)YnVAI6EXJIZ49;BU zo}VAif<15+G4A3yaF$Z%^0shRFzzb)xrW+#4cuAR1I~KZzu^TOp1*T8(Z4Mmzbyo3 zJ8R#;ns!})v!@80ee`bsU^oZ4@6c#ChkwC2x)#pypKwktgL9f*pJ@W;Y(qHbsNn*0 zUMv9T(keJt!f>vBgmZ)XZr+7+dp4ZA8Q}1qedhsvev}^0lUQ(`6@>GA9GsUq;k?cP z=MA;Jr3dc^!TC554*y0uU#amM>;4{_a1H$!59cSn`gI%5Z}v5c_5ES3f4LU_6@-g~ zaD|F+MHjA=4sK{7T=@fBC3>)&>3#VY=n6;#UW?mW{FS6!p-Ut=F2u6Zg%F&eg^f;O63-+z#A4%$es6+`Qf4=IaPIe@t>2Zh^UQ3#K5S;1)Uow+P1;{U3ke^4M{U zZ--lgo|Ie(w-n>@I+$DL0^D*2`3ATAdbkyC!L3BymCnJf+!St=mT;?5SG9L=Yglk= z+T<(TTF2nleg(H~8@TnDw*l*F$UZcR4YzRyxJ~Fo(=BkDv6dFm;I_;Ow^drWtvA7K zL)yN9+n(_{(3_4s;dVL=w+pp*Ed;k)UAWy@f6wS}d(DU2Co$Z<)Y11gT;Av6_HPS! zKmo$K2A+pIXb{}Nwc!pK0(aRI0(?uOiOH?p?>l9AtV zH+_W5_oVKYl;i~5t@Yq;W1ZWF!`;yv?oK}6H4rXepSpW0z}?Fl_c7=GiEt0hfqRhS z4y}fJcpBUzgW(>11ot@goS=r2`Qe^o%rgeuv#jAfy}iJGU*ej*v=;7V#=fEw_VFs` zTxHyAnc!ZJL5{+`!L@U9DO_HUc5hvSdz(4#P{Z9^aPOrjZ{gnG2A8i>-G|HIK1xfT z!+lKep5!I;?CBx6&#J+Fo|>$I`-1&>nVD>b`-*X1a~;2qg8SwS+_#+fj#}T1hx?xE z>iuiDALzlyT5vzH?oS`!e(nyJ*TLMc0ik!_p2Ge93@*Q;!TrhSzjna=-GFeNL{SUR z)w}=V!$Wy^LJoLhD)NZmC`>|k;3=8msp;TpG2!Vd`3%q42hS=6&u$0L8351i0ne*L zp2G_a@&{h{AH2vfc+nUq`h0jXTEL4L7hWtAUhELOI0C%5HQ~ieNuuDz{{%0=L3j!8 z!%G|;UXrZvk`{%RY$UwoN8zOy1TSSHc&QG|}W58Jn+xy-Ks-Rp|z=>QH#qxV?G@cr~c8=2&>O zGQq3OoOSlWAL(1KtdJH>)(f*_YtWOA2p66La_;qmf!9lU=9;3FU>_}@lv^P3KR_@P1Ym0{!-e02$YzUTBc{x?#+ z3w)z3d^0V4OCnd{+wb5zZ{hRYmG2#Z?^lN(B!eH0kZbTGd*Mf$2|xNs_%WKnk4a)N ze(bgI<5YnkcL)4Sr!!I@)esR`Nat-`a|KOMD3BT-C_!U@Z#Z>Ss)q!875&Wv0U!7xW zW`SRewboeQeNzfnf`jnl(#k^z3xgz%eo%f*$d^K>U^^ z;kTlHt>|CthVa|uf!|hu-_9hD;dfxn4)mMHrr*gU+u(O@3BOBR_+7if?-qxggWsJ# z_Q(mpXEgY|xUVZ`zus>lY{E4sO^KY|1M z#N;OYovd#c{o2zV{=OOT5A273Xfpi65khZ{a7`Yg{^K#=pGXM*WD)qMX2CyG7XI1( z@XsBDf1cVdvUitC!oSS?S6SQDi}0^Kgnxs6-ej&@+;@8y{5$pG-<<~k9{YNK3w++M z=|B7r{-Z|lAKT;#{3rDK=~4L4*u&><;lJSedf5s7E9Q8;2mTxS@OCQvcbDORP~m^1 z@1OF*|IBssg?y!_-#WnmJ_Y^{j{V6xf2W7f*V6u<_VE9n<`EbnzY&N<5lGz-gjyny zZy-=BBhU^bFyso+2oJ5ggP?jf1Uxq!)VzwI)-(jQ znY+#}1oaH^7C{3SK|^}k$VSkZ`kHWF)13&KJx9^&Wu5)9Bj`^Cyh1Q2HDT@{ z@evFyf?(KL1jFge2-Yz27=lro5R5*LV9YfHV^<&;*8;)#0SG3r#}g|cn8Y!YcOjT6 zlZObVQyahYC78*5voa!>og2ZN4hZIQEzM7gU;%Y3N{L{xgj3>yz2_-_q@P29GHWB9!&0q@xkw%0a2yTcxbYB^#CPeS}-JN4WJ4gxlstxP4ZHJ5X0g&h4BD;jYxytuVsfHz3^O8p6Gp zw>S0mO^_d3kD}<*%KzL>wglAVmcn+C+2;uoL5MCG`;l*(gUJ@JOr412YMsJocL3rf|e%&p5 zwB{1RYab!Jf&JJ>{$uRT9KWSA!dq7(yzL^wJ1QW&b2`Gijv%}z2f}+tBfRf6!UuXI ze5e7!N9fB@_T$(%gpW@^_$0kM#onHohVZ$`2wy0H@Ws~%U&)T})%*xwqeuKaRQSdV zgl}a)_>PG1-NFdpXYKqvRQSzgA{pNzlKCtm zS>7O$Z6hK%W+RfTJtDb}B9f;P*@Z~nwTR?nj{HRsDUcVDf_V@r#Ci(-L8LI_72*D( zn-D2>ACVFX5GiSqzlfBg4*va!luJWAE$CefYH7I`kyfm`b!9}_a9mr)Yu6Hy_QeqCKy4k9A=0S;BAuzH zOH)L;(#vkt+nw5bu;!j^5b0GGk=_{*>BISbmm|`TF?e56WI!WC2F^re&}c*kUq@uf z4@8DVM`U;m!kR{0Mr7m$L`Ky@WHkFQdM*BsqO%N_;`o~QFK7r3cimktEL3Ygl9RAD6$$IK zZ+)DEKNV}kSrRsCdsBpj&GKQ3_HR+Ww>~3bn__O4{v9_+*!hx#-SS9(e+hd_2&s0t*6G5pfy1WXLFKpPV?;i84@lWCE?;b z5-ztRLF*qAuFBJE@>%!jOt{gJ1g-l?xRsrR+nNV=77InxNw< z36G|c@c1DKPxbfn^gapCrTO_T5?(AOLC0DXUOgw_O&Jp2Rv_V>;(QRF59$%kS{Sp-8Wgs&KWc#a{>cNo$Z z#E@H9DUBhz4}YSC6c@h|eK3@qi=os73_st-P-Z)Z zvM(@{dyJucRSXrAW2lsfp|ZGCd5xjkd<@k)VW?3OLrv|kC0(^^VW?XI!>{68U;7%= z#?WvFhDMDrG#-ed$vg~AmA{#uGSVV527NvmT0O(iW&{RZFJNfj0YeAH=_o%sXTZ>9 z4u-DpFmx}Bp+`jwJ?mlk{cjAtlVa%O!O%AghW=Iz1MCAw7=}pC&>|RyEyFOv zi(#a4j5>i~jOsErC5CaT%Xr=GeqwG6lV)O=vKGU%vKXds!Z70`hCg0nnDrLJ9Qio6 z8isl5KYuia1=6ud92TqQOU_|fraCMa@0IdwbwdnmnDu%KQZc9gVEIjqbGpTdmW=cH^x9WjKRM#>imH*s{QeD7!#jj%vuLyw&57FAI6yT z2*%vMV$8D|ucOE6BoigCL9nUM$M z%-I-cWy3goJ;pg-G0v-xasKZZ7xclna301*;VcZbM_}3(i8>L~h`fQnvQRkM8+Y4aSx=`b;M2x#_823!as5KzQ{Vgya z+>G(?PK-w{V>~AP$Hn!8L->I4q!;5U@j2ZI;~CAHv-0cwuY!17Q2j6N#&}uvxKbD6 z)ifBd6~uVGI>vu$VZ3n+@r{Sb^Fu3`N66yxWgFn;NW@#_PO{}skWUrb4g zVMHu3CA$$c?u@SIZRHU@EDV8F($YAx|<50FnNXxZ!vkB30E=s`e5>_um3Bi zfMNvI9?B^^!4y7(DY6t(v<#*g!atbe{e%aY66;{f62hcgT${2U#FXs}rtHd_qqLw{ zIbUPSofK0Zlc4vyhoI@lBAD{!5O!k9zYtS_-k1vJ7QSIBv=&q0pM`grep0L=n=om; zh^bghOvM{wDv=OC;kC?UMURC6A z9vv$%HIQ$=*@Weo8vTW-vBou3Et_S;)I5Nxg|xL$-(qiYv{{Ks$Mj6?R$*!{ zZ#v|`)G>ysQ(ECArY=b^bu|hPF?Cmt?kh0$IFG5Py!`z$rd}GWb?7GDGvCy&hM>Ci z--T&_Fi@HXWx+I99uHoJX-HK}Lq}m6b^+4}aT@VIOe2?K8r25V=m@4U!!eCjjBz6{ zjcqvm)0h@%o-S#CY3V6U%hqFBJ^|B8FQ!$=Fs+`2X^rOj+S{1cN#}a?*`Tq1 zb;q=^F{aHGFl{-BY1;3j)3KSD zP87uSx8~@{6oPV}$|S7CbXxP~jB0(>Dd_#VoS4oh2+Dt9ET)U{=#n^HmVZ|cW4gK# z({;^*f3{(|A%AZChv}vt(=Fw_tv+|8U&jDV_r>#peEOgCJycyDeZ}-7D<+*UGd)|5 z>AC!RaTe3dH<(_#F}796e5YJD_|4E*FmcO4DWBMZhzQ~KO8uv}!{3nk8UBt{8 zJ)!J5<|H5VrBnr_hQcR4s))um~%@{o}h3FbKaYn^X0{y-y%H4T;LMsf`4N!v4tma2|6V`B+yT*PDY`zwgWql3;EqFMpH9 zMh!4GmPbu&n44C>+-xl7<})$35Qmm21!-*c2y>fynA>i~+-@D__5(0?$SJ73;~$ti zRm9v`{kvqv+*O`xO}Dvw89`ioD#!2TF!xFjRI}b|G56VyxvxCzcNBAf@f|4N1}WFz zG?<5^#XPhs=3y-`5BFjop>ZRmb>vFSqi$gyBVWg=j^p}b9AN>oDfo8aHP-=DD9R&mV+&fxKHNeT&m$UZUJfGh<$+ zS}*?*^9pHPDW0oTm({BAnlG5w$=CJL^QU~;&yaeVK?e(~$%9vk`!Th=h z<~Ij0zm=AE8!^8>jrqeQ%pX;=&yz80J-GRsa{gBgi;l)vzRQUvNmV@o>vt^4j$%pS z!ICm179C5pq)IKk!IC-|mNW;kq|;x2mdxK{Nf?R6_#+mR+RUG^Skq&% zIkDJBU~z23;;Mqh-3E)+c3QkUu=oyP@&An_a0N^7Uo7E#SR&o9LjwqR*^8%v{fSQ@9r(qs;nrq8i7H)Cm$6HCi_SX!0C z(z-kr-S@@PHanJf;?`bzI*MB->F<0IOP57hy3WGVO+NHUg+;&VEWek;(o17|cfitD zy81Q8(ti||0q3v`@?#lX6w6T6O!sTC3|C!7KEpElM=WC+U>T=<5Z_=c!}i?`7moBmN^Bn%-xJ--gqqY_hMO?9Lu7zSQcx%uD`M@ zlg{P4u&k7qtJS{7i)C#L%R1F^eLpOJw#TyJI+nlw!?MYSW%JKiw)Dla^&c$Thhf>F zI_}(tWp@!Qdlq2PGgK`5ujz4IYCqHm%i%9rj;gN5#$Y+FJUT9E`FkstQ}wW%7Oyjx zu$&W*^O|254q~}<8OxPgSguaRa=ikUf2L#kH$4`uHL={9gyoJK%iUgB?v2KBUvu++ zDX=`0XOGrmd6EUoQ+fYPT3%$p^3s9j)jlk*mE(AT~HUBIhzcj=0 zRT}^M9V?fx>N~PE=@G2SYhX>$6Kl!`SX242{!k8U>RDLRYCBz4tm%tm%}^L?#%5SE zsZZuFSPhl18s}m)e~;Bt5v#Q+R@*wPj;dIlTd}&UVD-$$>iZ3ApfA?o9IRo*id@AS z8;dpm6>F9{ShFs}nr$i890jrFEQ>XlxaDqwHP2$KdEaBrcN}X0#VTaLT6iDUB9pNe zRgB^-u$C0hQs=Oic3>@|+~t((mz`KEsBcB_uiP4Im3vsL?!j8^EY=#0u-5E@wRQ%q zb<|d`0@h!LW38{a4enz7Er7LAH>{0&VQq2)Ycmhl=JT+&%!swsuUK2FPuqG}+a18# zehbzPSFmK{_gQRyzQLICU zVI7_q>j>!?`4867udt3CjCFi-tP^)&oxB$7)XG?=kHk7dV`hHCI_rN}=X{5CuK3NH zigm$3toq!rF1m$vNiwXuUckCk{g#))x-uQsRoAet8H9E19jxmUu>Pr%RV24+OCuERFThMyy9tV%2X#>v7G2zcuz$ z7Obb|V?Co9ojZ#4g8aFtx?I*=y7B_+H7nNZow44K&YOy(|NquI;&N9x?o0Fk#<9NB_zxDWAE#mc?8W+3bK$>NdgAOEJ-Jax9>JF4 zG`8PsZGkP`5L=c!*s}G(mg6qAT#K;f(e{rnZ29Y9EBFJp!Wo5Y*nYZ) zt*8lGv9{QXPrz2<6E>|qvi-aTTj_n+%I3vZPEW}#p95P3wN=vi%4e}vwPCAv61dw| zTgQ&rI%mhGV`{c;?XdM!&fm{r>tzwdt9Ld*9QtTn-^tkeDOdk2g7^*CgKeO+4eEz& zNIq;smtoWWYHTCw=#hfTJ?b{LG15BbPi$j<#Wt=fw(;$;P52kvB<-Kv4cioXJXNu$ zNyiL3wwbB1{Sn4Cs}r`_bFs~l9<52T&7X#Cf$FpBF{4 zoLB#YZLQkY-Ng3iD{OyB*T#a_HVwqKc{#SN(!cElwjI5(?NW{QRKT{kv>tt^S|5ToTF?Yid74e`AB8rz*5 z*zTqgwqm=t7Tf&|*dE-$_P^`c9{q>y@g{6fHNT#Du|3a#?PX3uoL}qx8?e1?i0xes zZ0}X;4@QcNT{(rG+=xyWYm$O`N;SqaKy9_f-9U4+$T!_fnmE%kMr@vG-NY z`l&`*>t`R(8T&x>8?+ev5OEr+_rp$OA1?1lh||ak*hdLkJ7gcz2m4snbled=+VceV z3Foj+(%8xJeTv3Tt%rS@e41Vq`;3&r2JACcvp?k5to_($Ps2V(Ue4Wwecnv$^RHoF zD1M8~*cZ#ACH1i{H3;%^*`L^#U&g*-E%udnu&q>|C0{;jdIv^&rADFd3j59x-HyUfc>uOcTb$}E5`%H`k&_BL-l*4 z+B{aRpNfmt=GvcYj=$K7{iQg*PJ#VRG2t8bck=3eDeNEQm)8E-Kg;_st+0PfEr{=b zS8=cxhyK1DNekde_A`#;({ZGDj3ebY9I320e#nO-wVoEA`ZJC+PjKk_l_R|$M}}TF zGHE;WZX5|4aTxU8_y~tNi5}ycABXh@4%>4a_7^yud2zV<<8U9x;W>oEt1@`j(u4qtxFxO4q|t=1&~u>frdL3yuoK zaa2_NN~3X9-h-oxxK)+b>O*kU_<*B!G8}cHIO+y*)RPatuEJ6O9FB%*aQs#sN29hl z8t=lp4a@!!c$KjM& z={Wv;hT|{2Zk&K)(*_)ypW@g$6vy`5IP`nOvGWfcyWZm1qj7u7M~aop{R{JuO+-7CiV zLpPjhR^m*T2WN(#ab_HhGt)hsnIGabY{hBHgwtFZr{z3On_le)aXP{2%7D{-1gCcc zPMv3U2D;$XS_x-pEY8UHIHPxQ#+%|yyn{2#8=P66xw8$GNlu&Sk30iZITVb#bl|r`5}FuGxokoqYXs zBF+sfac-=EbJI4QTaw`1`WWZ-+BkQ%!@1jzbI%r>dl%!}_YLO(`F%*99G-;psQ4Yb zjq^lDoPS@$dFmIOr#s+0vjgWjKhE=2a9)u9OJ8tam50~| zb^k!ucgb)ixsNN^0$eHT<4So8SE~HDQYXcgHh?SLdR!Tbe4bqbef4lb|82D0D^>Iv@Q*SMlfaK*>q%HqeBRr_*u!j-EYt~{x6<=u@d zUldn?skjQ6a1}m*tBCp)osX+{H(Vu-;3{H`{Bpk;z_9tB9^57aj0M`Whs`Y5DNot=` z5!Y1pomK_c^i{ZKJiw)U`nhHm#-;1)U2`VlnydEtinTyKF5H1j=Tclt5^ybTg=^V9 zT+0<}g}AL$yw%FLrYEkoTX3yAgX_;txc-XZ+9)lX`r_Jr1J~A~xVDMI_KUc7i1W^y zxOU5{Jy&t<8;5KEFkA<}!*ysnt|K{c9W~=R))CivR!ZXO#D>aBdH- z^QUoLl$J~Vaa~s1mHoJ`DaLi>`sX9Af7|2IF(KD2?Z2%#a#wop)xdRMUj7eU450o~Oh0Vi~TNb8x-VzBi9?y&I3~gB91uvba8J9(=xx>#J(`Um4tV#+}51 zJL&JZldZ>{A~)`ot#E&@_o@EHoq7@OwEc0XZ-hIe6SvNLxD&SFHhjcwO2lpP;kNF@ zZO?$)5ykCnjoY0Lx91n!-s-r09dHK*;0|@c9f{zMzQ7&ti#zc+?yRG5XK#o*$6MUF zF5u3izIhMf&X)yu{++lBPQYDw2JRxoa2H*NyZAWVCC=b3^#FGn(#+szcKEH`EfT=pC*-YH`|I^=N8Ll(liZ}Kf?s08#k1vjULK@))?uo)=JMJm&$)|xp5o2_ihH4SYweeNNm!54kf(bglaX_j=V-*UP#$Nb6sNaBr-Fdy^UW=G?fqSdE5uu;XbIChlb)lEFDK)<36gs$Hn#UQn*iU!hL!m?z5?I zpD&C1f;_$`Z5RK;eMw$kNrL;TxLsR|`?_@hvmW=2!MOib&RYq%Z)@D05xDQR$9-=C z?)z$gumku1F5!Oo2KVFdgy*=QHpTr+dR{2s%bU1g%ey!8alajh``tv`?-ldI3EZDN zxIatpmq)n2IdK1101vbAByr+NItfp*{dkg}#gnov9$jDS`Joe@)Q9k-d4VTgYdq=O z;K^_dPo^|@GQY)R=!eIsSMxYLmU(!r>Sz0c$I%pz^BNv^dpw@M@%S>~@pr?c-`}24 zeLUd{c%pOh#KDtT5Kq<&c(N72lf4U`9Ha5%)c)KyJbCo~N9E0L#Z#awobk@GE z>eqb&o}T6K^h%AV&nP_of_VCuz%$T`XK+zGLtEn+q4%StVN6Fn>Jky5anXbIk|G+b&H=dae;a@y|JjF9h+GlsdGe;WccE&TW zI-dEe-TdWv7KnqsUwalQ_u_1LmU!?i)!3zf;aMhsmRG{FqA#A6v+%5%j%T&7W*VNg z`Gi+^)+z7$26+Cghi5|p;S-*X@_SQmJezCb*-{(NR$*IGVKJWV(!WD|c8cS!OL%r) z!Lw&Cp1n)(>{I)GwIA>cAMhOd5zpZqg8Cg%{-fvd9RC5&3B~){g6E|AoqUYvbY(ne zYTwRanT0=b7AKNpsX?*C$^C*PpaY;emKM{|o2k<sR`c9JMkI{;x*R9Yif_zd=RfSjMvs3uYEgS zX9%yW7hd-^yq?W?y@&Any?6ub@diKP4QIfsXK;F>IfajSWAE`M&cK^R`?58{nbimp#Y3!i0C_ zk9b#Iz^m^^-gQpA>*wR$AkQ|c_M4?o_aF3bxr%q|c)Z&x3)}E+*Xs^9-kpBDyA)&h z6uf&5;N7bl?|XrF{|vkb>fk+S7Y^e+v>5N+c_gy-??>FK7 zuo3Sk#r?Dy@8>gkzbf8W&6jTr@i7lyl7je>mcf_IgD-h+d@1(h`~C-fsgemt@%=Cm zpPqf>)9(*ox@`C|goVxcGJeFD={Ua3C-5bF#%D||oWW%l8|;{44Pl_#0or!}toRt?)N|MO^rbZp2qi zoQi+KSF$3$Qupzdmew+p@s&M|@0UgR${)g4(T1;52Yi*6;j3!JSFI?%>f7+uc!aO! zb$qqE;Hx7J_0;cI^{c-EUjyZAC?3D*wXxcpEWy|8XMD{^;A=4iU#mj+T1$JIviRD* z#@GG`zK+t`={UYFUVL5EzuPH%-KDqZAbh{?#@Fi_zCNAt_4^Lr0Qo*pbsF>v-;jRz zhRU1aN$`!Rif_~md}CCS#kWd)*JQ!Bb``#L^6}40`2MPoZ?pPpEx&J@a&Oo8 z9jfKdfAH=8AHKcvYkyjN2ioF0R2tur?)Z*zDEUTMpmNo%n8_#dmi)zWcNBJ?x6_k+?k8>yz{No~6O}qKU8%-%I)T z@(aFKivL=kzt$Xh^8nx5-T3s`;(M=nAByAqm{ibQ`!oyRXT|-JAK%yHg8cq=9z9u4 z_#b|q^YbU!hd-GEfAS#y6k+@+MPfImwCLHx2l#h+~o{_KC^&oLaozQg%*+wtd7j=a6_=Tofw z>4bmq7u<}$a9aF7HN{_KIsT$A@fYubzr;@bCD#Za@t4xRQeW`@ybgcq{P@eLe;H{g zJ0E|!)A)aRgTMT7{1xWnuQ(omrFQr$SH@o@C;qA_geCa34%4r7AO7n1@Yhi6n#J(f z%8tKw0DqkX;X3}h{qff;EPTdaU;OHC!{1;u{)Sia|E4^R&fssXyiJbc*Zuqa&FbQB zZpGh1Ia(&i->RH&AAjqc_}d)A-&XzGtG&J6cQoSflofyH)cCt7Zf!I74gY{t_y=aeKd3hT!By}Nxr=}3I{d>1;UB&i z|A>D0N2+~PW&EQXVkiAP5e`4;h#DL|1{NM zy6P}Poc?Hve^zGvvlVAf8T@l=;h!fi^W}$rZ}}G}#v<`vEKirF#J|iUe8InbE&dg& z@UO~?f3h+z}_81M%M*i~oW2{ZDO=D&g06 zLjRMx_@An7PsibZrg{9_hyR5O|I1wXU!@o1!yEB_+Z(^GgY&r!4Rh7UGKM+V= zj6j+)1k&m?T?Yc`y#z9(7IqNGc#J@%Lj*D}A&@YOfZC1BY}z-62pT zCxKe&3DoXNpiU&}1cnWN{2@XxbwPq@G7E1Brn3@E--}?zK?E~BCz#NIpy510 z<2Zt*E(Fbm30j&Ev>qgA(?0u1f{uR(Ixi7)9Vh61K+x+Fo)PqICg`6*FtCeY@CL!q zN`m2w1S7`?Mn4mbS0Sj+#9)?91haVwX7>}+H4DL<9^pN~Twe+1$xl${8G}C#CYWzH z!TgN~77&ku{RtLYMX<2?6{$zCXkLQF<`XP_mtcw41WR5e_;V+MrI!&bo0?#`QUrey z&k8jOR{Wh{rN#s+4j~R zf|K=rs=S*vmEep*1pi1&aF%?YBj4ufbwO2v3&nMDR)S0B5?n4mE7lWSm5t!)F9g@_ zCb+&i!3|>wZX7{y^FD%GeYg9LBME|PbgVbQUy8x z)n){*DeraF=|+8m{|+U1Q+;nK-klJ^yKM;GmyZAaNbsTBAD1KevxnJ{`f2nm3=N?`sx<-zE{F6rm(p2qnEvDESCNDSd=eWg?Wim2i_#+VsL2 zLg{`Zr1dkQ3?&I=Oh+h_`ehzND4{YTt)B@Q>ku+2mN^e0OCjMgA?s;E_I!k#sf8ni zT*nA`5`+(gbRApB_m)sVQ001rs)$e3{)DQ1BUGa`p_*$6)e`C`UfubG z>b)ma{})0H8W3vuicq6Cp~lkHMEaX15^6S>Q1hOIT67@P@*<&D#|gF3*tS0rYS)oa z2M?i+^$B&_PN+)?LS5CjTUSCoT!eZSC8YbchI&au?;C{rW+&8d8leI5XQ2ETqkAyZgA+$v`+`5_2_N0V%ydb3KnuT_cC$wh#gh{m+CmPA8l>k#NFh!p7Ew z&6x;Wni94pC#*H>VdnzEZuRq~C+ts3IIxaz$V@nVhj6qJ;n;q{iGvC2xO6z%cEUM+ zC!8xS;XF~odDj!pSAlT;mV^t8Azbh^;lfo3|Fnc~(Mp7iTM3s?&QkdZmrg~vjN+9` zP52k(tk8^b#Z!bU|4X>)E5g<960UiLu-0vb>ntN&uR7uS4#Ev?5dQ5w;l>*YH&r|x zj}EsOM7UKa!fkwn+pZzpem>z&DF}ByO}J}q!rf~U?pc{|uVRGzNN3;iga^nUt*;6X zkvGHM5gs9qqgxOjyMple9fT+DB0PB$;i(e|>l)$k%qE0qw;?>wNO(at!i&Ur$rQrN z%M)H%l<;c#zoszZwJ8a&%Sw3tuY~{9d);p-{MQM>8|9U*2@Y?O_N~1MZJi?# zkMQpA2=B>Bcy9s1`^0m9A;JgL@1QsylJ~myDy(B(;iIb4F?oMne*7IGe6kPW)5?8j zGU2o92wEZuE z@I(2e>ng)f(h+{DIzAVNmwv*p&Jcd18o!f{_m>EN{76{;d&6H26aJPDt-c}h-C-h0 zYZ6JefJh1hk(5t}q?$$KhlfPc>?V?4Z5i4T$vA^Z=4wO|77;PLC1MH@F|Q<5KTq}rp3K8)YC*m(bBrt+V@EDQMJ0g+HM53LE=-z;l_$MM+#u3T7mPoc&L~;xv zk}Ext-0O(sRX?2@iR8OOq(F8eTALBkckswhrHB+!-eRkWl*mP-gBi(&RpoX4-Dvh)9bKMD!at(z+Lswpod^TTP^cVt3p~q|-AZ`pp~Z_B)XtP9iG z9GP&H$fQw3rby>B6OrjFiOl?&$RFY~yCIP|--yg>Ol1CkA`7Kqkvv>7h{&>}M3!G7 zvQl2I{*}nuBt+I7A@XN^A{*q@tMiFOE}SNEsV$K!njhEl6S@AJ$PIb*?;9ew z6iaLIBKOV`c_1GDdr#z%ay%JGBC6v+(bP?ernyHn-6WzJ#u3fbl4ydBs9_UP(?p_{ z%0#X2iQ2mpbv7gF);`Z+qP~wrgPDnjt`d#ZBpOwY_ynR^)Ry%=(d<7F&FLhXYah`( zVWPVKRy2PGq6PjUS|}w^t#geQc|^3>NTMYw5!ErAXlaO+IYsoB{6xzyAX-u5D$OIR zwLsBoIfzz2K(yv7qP3S1t(%)@y;Vf(3k{{KQ5B+%ZxU^moT!eqL|fh^+IlC^wzG+L zP`-|e+gTj6{xsU{DA6A6iT2cXuS-Px)FRriHqik?hz`>DA$Foe_YfVvpXkVgL`Ux> zI`&_p6O2SBr6W3d1<|PmiB4}rbY=&lvvLxhtvGXq`J;(0EJbv2gy_=JM3)aFy3$H? z^?IUf|0B9yKK<2==%!9Yw(H2CHi`(DIdrBJg zKP`H0FwqOMh+gVT^ol&Zx}E6trbM;wA^PtKqPNBpy;F|pJ!!aqhv-A`e59ODx)6O< zi0Jb(L|>&M`nogGcSVTmoK^JW5~5$u68*N380(28sYNVVXJRRO6Z`%Ru^(O#OPiWl zy352eCL@+fuL=JU(=)|l=I+F-1BluGAm;p&n0qrZ?@eNX6U0IXh()szi$5fmH8-*B z>XY*nu{;rC`Gyk9-&S}@tiVEI1?Lbetk^#lAXX#~v7)7k6{}0E_-$e(XA}E*5V11N ziIv?&teoaXiY?SIT`V6tLrHG9?Kx{%< zViUg-)48hH)D*;~sa7+J5u4eL*sL+c=Hw$b_c*b6@^HR=KwQrV=Ez-L!Ol-Tn+^Kr+mhQc!iS3g&2L=*5 zB+iGI5<5DX*s<5dPRt~BQu)t_-#I(6^Sg;%)V#P{m)O-q#IFBA?1skPj1s%`ozRHb z?PkR893^(Q0kM19*7K@j4{i|CF}IlRZ5Vr`agQ~3o*X9jRQ;aqCH7o8USuKmGBdGP znqRLC#NJdO_O=DFck=lC0%9NJ@kiC+({^H?<@p!!_?Cm1)-uGIO*~0e;z8z6JLV?d>38Ctn-cHRhhNS@oRqjQBKhpHY|iA0FbfW5nl-B0g8V<~=2@ zXV1qM$?wJDwnW>@au8oWi1>x z;wQ@yKP5hAnh-zRgZR0b#LsKI{CT~~dz)**h=NBmYD;#vn6 zzq6b8J=N;IG(6Zt{GpZjqglkC*oi+C*Jmw>KUWQ3%BxqZ?Hk2-SB&_3)$e0#;-6Hv z&)iNBmCv4S{Oyhmb{QY2RUk;Lk6NUYhM#M(YK#pxOs@Bjr2o58g}45DO_o#d(-=4SPq*@VTUn2np9n(Y?SaqwA6~W*sR% zlqY3eGg8KD+=Th0OqAZqV@R3u6)8W8&$J?>Os`MM4E397B4w73l-VmtnHwZ!p0q4* zld>o~DT`yIED@idXlB4u3~Qr4d$Wy2d%^z59J z&8pQF)lk3ZQg&!Q>>NhQF2&gMIVt-xk+OdxDZk2tLmGE@HYrEt&oOy=;tNtv-Y4bs zX;RJ(BIUg1*`*w$Tvnf}s_kzRNV%bTbZaOnclMETSA6bC%l$T_JZM15Lr8g~Irql` zQl3cD6M6opO^}yQdyw)>e4dvO6!*n?QeLhmMeCPSUQHq8ua5+6Uw0+tZOc_4HlrfX=52j2T zFn#bnrp&3BvglaWyuu?)x`)k_eGn#{hco5)4AV!7le4Ta8B;Dpc#0|aQcQWOV#=FK zIEpFXSD18N)>I&XN&m;yR7m3rkH=KRg{f!`;UK1Bi!l{1ENsG5Li|b=6~g&b!(tOo=6!l3g(w)r2dUQX31}eyTi`mtv~Y9aGisFjdpGy5d$>o*G*))travv-+57 zmBdtgD5g5nQRin&b=zX97sm9tS2%&G{!f@19KqD^TTG2qqegErHU3z*imAy-Oic%1 zYL>vH?}4V~GcdJKjlYayYWblcZ(AwXSLZQ({Q^_#Q<&P0z|?LJruI89bvT5nqw;l9 z|4t7ub)Jf;OC8}Qrfyv@b&p{BrVyqceKCEj`OtG6rvJUd)JuJP|AVQ|HcWlTVCvTn zQ-66r;2TT>D`FZX{@=9}o?`kw1=Empg66_d_1E<#)9|dAbRV2)=G0h)|X~7*#3#D_B@-NCaC}6$C!@X#&j${rsLv!{9jBb#$!4;5R*PPO{e=| zI`a(Exn`Kouf}v?KcYXVA9L<;m_P1?InN5r`68I}PsUu}8fL9MHy8c^ zbCK?ti@Grv`x0~Uy_idWfVq?nbLoDVKlvGRnbVldp2b}5IOg&~#X*=;%40TF!EEk? z*|HC_ts!Q6N6d~Tn05Z%>{dR{X3ReI^ZkuEuoH9e3Fgpt%;9^OBPTIOXJL-%b^Jc& zq+qD+Q}M0b3Uiex=BlqSSC3<^(ExMJFy_yuVAg%C<~sQ>*Hzwnidp}2%ndGKZg>mx z7fmrYmYybOFgKMK%@n`+7R+C&Z_7uRzY_1S#iw<4%x&afTg7W%7;^`C*vW#q^Bl}w zb-Y^&=I+%of8)cfbEIaiDKz(-fVr1q_TGcJZyC(`Ury%!Y8xmngT!0w3e7{ZU>;fz z^RTO!bw7rAr1nSU!8}_2j&)-G;R(DC8s^3QFfUn+d1(R6%LZW9Gj7Z)#AD@T%&XgAUNaZ- z+Vhy#WyZX|1?COnyiu`!QNPVcFmKC>zIF4 z--AD6)-_-A5!L;eav$%3`NSH`C$C`EJs9RQs_|L*bza;rs9u+fVZM?b^Huq9Z6W6C zZp=64W4@*1cck;Ke7s*m5SQOuVt&{Y^P_>7AK%9O#Dw|JikP3ui)X6W^B0(3*24Uk z+Fv)o{P%Lq|Aa8VU4{9b{CmFw{bvs>X`EQneuqWR;;>}sjU}UyNv|_kz>;MTmaJ#7 zWVc}X(7^Ih1}r(-V9A{s%g4WA$*2ANAuI)+VJYOsQdq}|yu(tg1D4_qv6N_yrQ|&< zrLSNqQxi+MLRczH!BX)C7So4VEI};RVpwb@EcX3aoJ+8{Ct&do!s4%lC9nZY$bluI z{Lv9uVlS{H=3q%4z>+FHpQ>-=lUSFC1J=_QsfGqH3N@9y)l z^tgoOe_gTkmd3tOEd3s086Y1Ay}~khGZx)TZ5fsZ%ZPMXv>w(nO5?{|$MVBpSjG>) zqTffBNky2nX7SlpO85!O_Q6wtK%OTb1u=*aUhUI8yEXTz2_%bXf#O0*wb4vc7evakL zKUmHc#BzQJmJ27aTzr7#(m5=b<hun7?#J=vHWoq%agZQ{yc)^=?pB-r180Yda(}6OV#_;&sbh( z!J_A{S>A~IKl0{n3oQSdvAoNM<$Y5u{|&~8f(7xSn~@7USlm(5^LesSc^=> zTJ#Rq;#sklh+-`{6lxo(>G>vy@Z4i<;+rB8p?t-~f@9gzd;NbwjgJ!3U~ z+(N7q(qWzS5!T7yW1aFB)~Tw?^gLK+tj9W2nr1!5I;SAkxr?#RJBW2b2l3Uyieue5 z7wfLmSa-|Iy{TCDe}eVE8LS5t|M1sXwFb_5EDhEZ%70RIKV1RqnFUzSmBo5q<1T)Q z^^#&=k)~^_u>N)p>y5%#Z*IeSOEGS5#d_C+_1;db54>1^Z-@1v+8!HN{}_e!iS#_3 ziS_v&tS{u#tBqJ+i}M@hek&dChGKnx4jZMhrTHFP+9%l3kH?l#`?^=zmU$Jnthcb~ zoSH4iAJ}q%E%#|`d6rv6Wkg ztwLpN6=z|q^d6h;)wfw6VY83L=6H(DodKKYA8fw!*aCiR!N0LZKEtN_7HqKr*y3?) ziC)-}YBM6(QpN4lB(};Wu~n&pt*XXV|5!MKt;PdvHIHGdRS8>d>8Nu6TiwUlKG*U3 zDcBk`!`5&Jwnoy@xE!`7J+L+1iLJR}wou=eO|i9lj_qspX)VsJf5+D52)4E_u(eN% ztwSGd9py!*8`!!;v2`7cty@EE-F?`;`5(3(J+bM0vaRP*Z2vopt+(R#$&Rh>C)oOZ zhpoTH4g4D0AnE+B5Vpasv3>s+wjp=14J(6fct>nn|7jcf3${_pJx2Y;regcyCARU^ zuubTUZQ>Am0}a z!=`Iywk7+p{iJwWpJrR$8`}!`v?>p_)d6g4lxuARY(H4b^M&Poc|BoMR|Q`IkwAJuwBiF?OJPWzsbKF^6qATY&wTvyL}AX-CEf04a25+ zZu@;UwugUUd#t(m=iR&uT%%S=_+iN)u{ZN!Z@wLSi@VrccEjFk6ZWsGVAnY?dmF`UTOND6 z*4W!G#ol2L_D<^GS+Tkdz}{8yx{b#EO>yi!j$rQ@!2Un+?6n_zA93g>js06-A21*L zAjSGlehxl|eaJZMLr-HLp1?lxBkZFzcC5DJz&>7FCn@J-#r;uUOudSIS|9AwzsEjf zB=%YPvCr;~ea-{y^ZH_6kQMvFlh`$1?YallzVvVG%Xea5Sp@s4Vc6GH!@gGf)=Aq2 z<=doKn`dL+Dn8q@Vc+o(`!0F7*DcJzzE2$Xt-`+Fz$c_2emyYuMVxiemI2v zhB6E^-S1rtexTX1WTOQwWVb?ic`@JlJ`rMaq`oF_=&1?HZ z<$U-A`y;jgAz%JbeV%l{{^tnny6?vROnRR8!u}#V_LsG>zf$~H((zXh?5{gv|GNS9 zH*xI$e2)F?C)oe3i~U_`;R5#e%Kcvl9Jp|#$%7+pBOK`t<4Au8M~3G(GM>bd=@O32 z6>((Ak0WbQ9NF^X$UXzdhvRT)9ggFp0yuK|apd|4M{bS(SjgkXk#{i%mr~+{)fXl42RBNIULn-ID6x8X{@_F4$nj!zAQNWaU6k$ID%Digg(I$u7e{| z8Ao&r4y{>s#E;@gyv1RBj3ZUKKh1=rGB~QF5&ptaEi;bl;#))UYYxZpSxp?Z#Hn@@ z9Ceo9sCx!SJ@L`?Nk@a)I2s0VG+KzGaY-CaisNXixXl{jXxspGVhZ)DW%F(k6j{hlEFL~0Z zFOI&dQ-2GN0qt-M6xTtY;n4YJ$KaoF49SLL==V5=skXyU;TWm>qXIZam%uTm2#&GS zar`g|$9VOd@F$K*J8(=si9_#2$5g$Zb{EGC<(&CDj@kKf%n{FdRdCE-iesSz$D&y{ z7N5nT_o8EI0>`pxI9BAuu`(-;Rn2g$mOpFL;`mv8)?LG~AvcbVzvB31F^(Qbd-RtSJPR3~;gVXV$upg(h zIZoHtINc?2ddB1QHNvU2#?HVwoWV0V!wYa~&6+c={)sTov z&h`PE9mKzryy<)iXV)$`yDQf>%JJ=2IJGXw*-P>JsJ-tUoc%ZB9GHUhJH`2aEY6{g zaSnTcb7XOxqqH3({y%iZIbOLZG{ZSj-cEdobCUKaZ^1dGEzTd8&Na%pwhYdn6@Og<=lWhaHw?nLQT#V4j;^me^%>*bB0gJ{W7`Fs+YjK} zsd2l+XSa^;IgWE*A)NcQf8ZCK2Xo*&)EDPr)%J*Ldh{yJR9$%xIX+6SB@vRv=-BqJ3p?E`{BxS16RJv z!r!>^t6zb2xC)NLRj325!een2Ig6{94Oj7>aFv*XtK@ZDrOx2`#EeVlE?wmmqrApe zc!jG{EnF#I;WF*VWj=|^>cnN!R%`5CuDQ585nR5!xB?S#1@$SWb2zSW7+0jApz+bW zxMGKK#oORYe1R*eV@3d1Y9-+ou1{a%(%L0gl}os)ibJ)dxU~M*Rnv;=vxM*zSFQE9 zYOlgoM_$yeh^wCBe4a)ShXy5ZHEf5gQFmNlXk6oSxSE#7)l4~C$hR-^;A$zYt;*v1 zN`8GM4_h0!+O)*gwm+_Rirb+uu8u+{dDgixt}c6Vb^8Wa_a?Z$k#;?A#`Ue*dS1cR zOZj>)$JJ*6uD|2u2_LAQ(SA-;97eh*UxWptqhs$xTsO+$y43>LopreGslE>e;ClEWu1CuM zhvxBp5O>~*da5rp@yU{4zUx;I4d7-tX?xuRJ^PukL8*qP_0e8!vakrAEU){#t zIuGtP;@tKf?)C}X9j4>%D9<_vad*jwyK6_>-FD*cE{;94|E)OxuOjYVdfmGYZmk7$ z>$pf8TSq! z?wyTs?^4@tY1>m8_g;R0G5_dFiI z1y3+No{;)Ra^s2C#uHP{_;ozVHFykh{Pbfym0RMeG7wKSjjKKkPmNW0KKlVrEsd*v z4Nsjnc`C_HV`;b~VBPX`yC zj+60p{uYmZi+j4>!}CocJUuSp=~)#|FZJ)O_2Ja_;1-_m#CvdiJVQ$0875yx zWWzHmJD$;_@r=ELXT0K0SdM4n89Y<+;hFjqp6MDhvpSyH$MDSSjAy~`covt!^HW9P zB%Y<>x=ebP5682j2cDHaJgXMrS$!JMnoW4t>iEx3@#wq0XZ>wF8~(+!@dO?{OU(1j zRXkflc(!WHwk~+KYut{Dcy@``u6KC$l*hC8Gd%k~$Fu(co&&G(91P$&)Bw-nFYz3a z{-YD|9Gi>h_;EZZyWu${FHdj4b4Ibx^}%z#JDv->@mzd_=d%30(hSelj(DzZ!}FWk zugk9+&+*&}5##=|R z>Mq7x?>D^l@8fMK&W--U+jt}1rlasSFM+qk2D~j5qt$i1UsuE1dN1C#H}SU5f>-zI zdON94=OuW%eucN&O1$4R!uxFnygfh1+p7;=t*7$#m9G9}@D32yK_B7$PPvBE#yhMK z-VrXmqlV!fBdtHwz&k!G-ibN!PO6FbM>F23;;l7O-WgZ$&Q^}O@@jq_ybHx?(P6wx zp5a~E5ATW~-c|YVt`Vo7d*EF^7VoAscsDEGW@*|YZ1dpVE?;+?!n@NaoW#3ZI(E;( zyH{iNx7oWt9o_@V{p)7D2i5P8YH?U&k1EHpyLgYk#(Uxqyr(|Fd-_YfXIkSu`vC8G z3*HOTaPfP*mloo^QU$NpN_nsS5ASb%@m}AK_lCyaQk>hH@ZK$e_ue|Z_x1XBX?`g0 z9tZGh&6M}abG%Pgt7r21xyHO~hWFKi4VnpC)+UuE6_F{=Gksl;BIV9ACNw zzVsdOWw?$nQwqKh9^lLJ1HPy zYh`@}6|c}6d_{ctivAB@v8VV-w8K|&KfY48@adjHUm3+HR|#MFrucNCN+!&uleXZhPQ$NQ}e6EW4+`r)SI`R4bz!#W;FL(f7=qkQQUVPCYzSsqPx=!Uw z4##I`%%|1yRsIoQRq$1d;;ViXU(KTUK5LGz)*5_uZ20P)#aB=9>d(j5P&yi&#P`Kp zd`;ToYq|knb1S|U9r1lBO|3q`_tk8Ct-IoD^AcaXX878l!q@RLe4Q5H>yigwSLyC9 z55Liv9+U9(wBY;SRD8WF5zqBmAWqa_g$boOA^sO$AZ_PA(YaioVr`oJPh;QQ;_+o%tKRXNJ z+cgW{o)mn0598b49^Zjo_zud0L!I#*mLEsQ<2#-f-wDM#rT(XH;5$14-#Nv+Pz|5f z6!Y`j_}_8u)I>o7=bW>A9r7d(ZGaNX7TN#yr}F?~e-jo~U+DtK)li z1>XyK^=b{i*M;%DDT(hN#d~`e-@6dL_b>6Y2!Glzex0xPXQ+ZdQ+oWF!JlOa{%o1? zXMc=8$5;42dVxRJ9sGGd#-Fz@{`}?f7np*-;6?m}^Wra}u|-$mFWv)xi7WU^Wy4>( zI{q?>RaUXeYg~oZ_$#R`MS0CX;I|gRZ<~SN(FDKqFn)Iwzvmu)Up4&xhxkJo@P{|x zj~>7uZ;U^ozJ|D_p1@zZ2L7rVU%e*&8prW}=EYxY82&ox@Yj8c|8wclJu?1AY4Lw? z2!E5U_?z{{-(nK}mcQfw>K6Xi_3*b*zjor^{x1HG($hIR{x0gTHLCvZ;?!d>{+`|O z_bQ6N_j>$VJK*o12mgTn_y?81KR65iA?5H7Q`_*L@sIoj|EMka$0+s>x$uv>jDNzn z_$Pgdf68+FQ@i1x-Vpyxjh!_V{~T$YHx~bb)A$#K@Gr@V|EB@?m&Ng~_z=JTp88j7 z+}aEH*Lm=7kgpq`D0z-R=^qJ{8AYI6 z2?FKc5~%naft1e(nBEbvTqa-}Pr#9ffO8fBk8=531OgQZgjN!WtRoN`OCWKWK&m)Y z&PAZgEdp9E8K{1jK+Q7*YTYAHw=;py`x0p2CD8CCfyOfkG#yQ#g>!_Rr z#z)zVP>sMw_1hF9@QZxf`~`t6LkVpCmcX`~1a{a7?2HoFl|o?m zcmjLY64+OY!2bONbpL7KU?&2Ho)b8toJUo=W2)(KaX8VMz{xcPPS+)HW-fuVCkdQa z?Jj6;T&hLja(4n(HW0Yhi@^0P1a2tbE%|bL1%bOi5xB2d55)c95CV^O5_qh9PpkxV zohI-sPT=`KL4Lnbo)>osyzD{X)dT{6wIHDDG=aaj6L|BAz}vh8{%uR(osPY~Lg2s0 z1X)8c&1iyYHxf+Oi(vW*1T!=zsOMn>GhHQ^Ik#|~V3tD!v+7v3?+Ip~PcTPOf**A! zm~$M#T-ONZK1eW6c7k~;5X@JLpw{vS3)UxCxIDokZ3q_KPO!MzN{k>_su;o2UV@)= zB3R}}f@Mz-)OXKdg;E47)+AVIIKh;u1a(a_Xns!6+LfS9dF`_ZI>gtdKJHTly+MM$ z!36!v9XLiX_?}>R5W&bjg0YSSXOtD+n%65?pbg;3_-8)#|?{ zzwk4`wbG+|zJlx86I|be;0AHo*o5Gw3 zlHl1V1kX$N#qIVm{#~9tG7)?nCiuij z@M$K3&s5jv8vC*fL9ML~{{02Pf0XxaXM*o85&Z8HLTN07(sd)0VH}~14&fT1OlJvw z@Q6^B+Jv(HN+^3tLLW9Jlw%5^oVkQOg!Ej%(8oU#%2PpDNGM-ELir*Kcnv~{7K9A(OkGZ>a#=!EdJw95mr(WcglZ%S)tpaA*Zo7aE)%L#fKc7{ zgzD!Z)F30FhEoYOT1M!LV}u&3Pcx0tciK>klZ0AI=T~hAwN{?CaYF6X)|LGr-{)2q_fv&gnIu#sE@exYfh;DJVFBw6B>Am(4bp{ z1`j3leNjQo*Nqbme9B=gvR$KG~p*glQt8Y z+>X!`)$d2~m@4kmRuP)6n$74(Xy$Z6vy@xUauV9Tp3q*^W8Vfs2bvQ4wGW|#mk1rMOX!H^-?5s6j*HVtX*~6k&>8VLs~G1~ z30-JL=%QX<_7J+VlF&8P>9@m#Zqz1pa|fZ@%5z8Y@BT;V{uV;NXCd@(2BF8Q`4i30 zKjqys)lF+_Locrr`b+cawe-E|KzM`Nd=m*5SWLLkaKc3<6E3!iaEbYZOC2R# z#zMGUe!>;<5!Q1u!ln|0Ekg<0vk-RHBJBR0u*XE$yNGZgoiLqna1!BAYr^62grnJo zw}j*6g?EILUlBG|5l&r7_|uz&tAq(x)tKsvS6zH-b|n1SW5TsA5w4S!aNS{q>xpmu z{)8KxAguM`;V;CgaVNq}#t?4yDdFZl3AZ>$_)8sYwT1B4xd^x3Ot|eR!tD+d?y#M3 z$KMEdR*o*;6YeHX-Fp-MW-Z}wrKjf|!o9?$k3qQaDZ>5J5+0y9gR&9+PH_f5BRnKM z;i1wrd=TN09}^z6lkk{Ugvb6$cw7;}<697(aGbFI#)qd=Bs^7prd=kiXYGY&?jt-q zBjGvHHdmbI%_6)YL3p9YFA}#UqX{pS)@2&Id_Cb+Ny4k8Tvv2j&nym`RYQ37?RTlk*6l4ii3ejqtg9 zgwLxc7kd!CByLy4Bk}p84B;nR z2|slaekKoJ6ej#qUcY)u__b=J@73YAX$b!-9q)c8{9kV(X-W`DJD*7UQbaPQBa&$$ zk<8PHWOWnC_AQYQKPHkx`#A>?$z6xY$9srq9c(0jm`H&WL<$WhQp8H6SSBLHzavtz zERoVaBA<*UQnoXZa(@!3@GlX4$Bvlu60yuCVw*(7v5AOF@jPnt8iHwqlonI5b4>8NbllA`YM0_rbGsuB=TJ? zB7?6J8J3mE@H0e4o+2_v8pj?dGOjw2@#l!>+-zj>??ir-zUk64Q+;NSAu@L$k@=5_ zEGj}|NtDRaAw-rd$IA0W)@&oPR(*c<3ipYuuSR5ppUB1xL^jC-{pOEs`H09?#oKm` z$aeAHX%N{ZPj`PuWY2CQ`;tWVi@UBfL=ILVa%d!x!}9XTA4HBNh#Y@NGJysk~;@7F~1OpM6CC5gP-N#s8#(KPvproB%z{V}2$ zCldXjFwx8%h-UqesP6fWX5UXVM>nE5+Y!y(ifA4SQJt@f<{v|}-~gh9cM>gnk!XpM zL`!uh`bk%!Wh)WYvrnTHmJ!ujqo`>HQR}Bf?OBOB{wC^9N7P$`sJ|Z3U|OOf^^F`Q z8WVKxG-~7~np%+Przu1$*CJX)9I7RVRzFR&=4hg|qD1R7B3gG9QTvJVeK@Bsx*LCtHb5 zk%v=T5}l^pGddBSm5u1^jYQ|xB&y%}(FGq8UD%!IVrg6QhUn6nM3+m;3i-22<5!;| zy0$gZpQU5HIBx7p^q2BPH_suuRr8o^XPv3O--iRZ*pKOy$%abi_E5v%%;SoK}RYAR-}5ya{&Bv$VuVxONTru!me zjg}H?{2j5T>f5{^F@5KYwbcGs>4<&ZmRRc(#M(+*`y{cB^@(-vORVcaV%_b;zIjdT z+nvOEohP5U(A}_H~If#vk6Z>Hgu?YcUlNu1yXJ2gU zd1BKi5SyvjvlVCVFU01{yMmIRNQAxh`kWMzh)DAU5nV?^5dT( z#NJBRyRpRHztUA58}T&Th^MmZMnz-giJlj^{A2uMK;|cMcbBX5; z5&!rd@w^9#=Wj^7;Ag}Omn2@~I`LvdiI=EFyi_mZpVTB?wixkp4~SRTN4%1mxc*N} z+^j1}mRrPaHHh195O+=>?k+*x^OU%69r3^r;-RU;BcBtGRUjU}N<6uecxof!m5UOu za+`QHwbfWm{Ied!YbS`;xk$WTW8(E&5^q?Icq7HqI+b|Sjl^4s+n3vkx4K5Wbq3;X zQ;4@$TZf&*J1It&QN+7Bh<_tK-{vL$zwX5K|K;O-P8092ej~?+`p^`kGA`l5&u== z4(B1RwN>%sZ-}4#m-y)|#Lr68`6ry&=EU#)kGQUL#~(@K zAFYW0DL&6i5r5H-_^TlC*L#V-QT^WbApY(J3Hp#odxJ!V^d$7G`b6g8B(g3dk$ohI z9M4JQyg=gPG$isCA(6iwiGqzt6y89h=xGwguahXXlEf!RNtC@wqC$BRm0FW9J4jfb zkgz=_;ap0>y?})GUlLlckqE6N5iLX_UWr7qE{W7#Br5MCp><1%8dXWus!yV}V$>1p z6(dn!xf`q^(db(ejoXuGDxS?OB$^*4@ntI#tum7MY9fi&6G*iEfkgW#i4L}WWl3!Mi^OKd+B%aZ|XxpTxaxBp&G4!(${KKO&*^qKRkH`n(f~moXB5`~U z->oMJB-1n@nYJRybQwsd?@2O4W0DzXk<7G>VJbIQxwCTUQk@i zMUu7zNxOrjV?Ie&9+K`0B)w6RzWpQvQ%Q!tBpJy_GWv{ULR^iHgkMR1>LgiNF{&;h zS$z@7n#xnF8p%2(N!C42^7GXs8?+_aNSYc8P5vX3iSJ3C>`L;~JCdhgkvy}T zn`b20f;em&bk^7%!QFCLP7wUgv)&8NSm?@a@e|ET}JX#~x= zcV|exUqSM}B^cbqNb?pWT|gLsk^UM+#@ZN}e!$2)3L|TA4BZ1`WY2=};b4p$e_`ZI zgORHMM(#?&dW<|FjJzgcH%7iMG4e+-3ZxZQU=*B(QRqjE!s9TCw#F#-Jx1}17$p_I zv|^MQfl>A=jBl~gxa(qg z)?j$|V(7e@;r|aqe=Ci^?-;>m7@>5+QsGaGu=0g_3%_DS#68kUP`{}7M<-*%#5q<| zP`=neVJb$vy|7$(jFIRlJjFUiPv|c!!>F$P>P>{x7&USU6$N=%V*y6ZLc&C0i*OU; zv#_Apy3ft1B~NOJTdirrKH(uo?F_i?zc_2p-R>hz_&Y$?qxOOU6ndkW&)TCrQp^EMjOW)DW&l7cw5 zQ=QsrYSEGLY@m{dvFjxo82@U@`VQ*>;~JVE|Wxs35+Izc>t)c#b> zkE!x)s`N~iM^iN?rm0TTq-eJsE+nk0NbLH9Gtr+u$ zV$6>UcQF=p66E#5^%z>KY%J1tvAkM*4P(jY7(aa?9K={E4a=l|xx84e{S_-PR%(Cc zX^d5>&uWkGC&rrL7;AF~hcSL0kFn0cST7zMY=Yi@8^w2{-cy_E37drfFn);((!M#p zpuU@@2;#Oy{%`qF_y=RFyxyu@+u94_w!NRQ17k;Np)ZEkM;kk(Yv&D&UE;NCHpXsg z+>;k$ulD!8#MpNRW4~&*|2f71jn_IlentJE-|}@D9cyaXj=3#$ow=Sam<5 z*hl2&(cHpr3|$X3j{SvkTyy*Q0gMw?;S$EluY|K0r(D85jMGkGDaIM~*Jqn?R{hQn z5!C0L>Tyna&;5yUUS6DEBm9kVp||i5<6=8O^}p0#c!6+EISeJ^*odtZ0s-s?`>%e|M2kkTMT zBqNbkL`e!6mCTfpl2YOS?EmXE!$QU?M#-Pq{MaJMuGKP>x=y4gtXxH%NGDg(N zI3+|zek0TvX_YZ58h(~BhVsSikui3xjB(UGz6fXserv|a=O>K3M=&PS2g&$S=%-ZL zD~-CR(|;LFWz5WxF>AVv)9K^vWisYauUxK~zeL6Y>QMNJj59uvaVFQCHD1PI9~n!? zXZAE1OXcMB!jruY3Og?wYDjBnCTZx57lHEG`I zAmiEq8P`$n^|a@^jH!)tWPI-{88_1=@0(=Ya#_Z$wK8rWF5`#&WZX&n?@E?&H|6}e zmyCNVWZXwy`|%%0l<|`i84o@oB%-SbyzLaQ+;H5`kYM9dN)H?U3pD<1+R5L#7vp0(thFDO0bOGW8xPQ=bJg^&KQrzpXM2cwVM~ zM`aqkP9{F=XfpW8H1su@hTV~A#M3hI*SeYgl%M|#mOhKd%iIyqsDVf5fWQzDyrYVbLn);qh zk*~@WwNfTNvu>JpK&H5Anc{zwiN7&yO7f5?IT23ClyXm|H0qg7dt?U4#B(H5b`RJs zQx4_K-7i!A%QEpy!8C*XX1*^|Q9GH6xqbRdWLlUlQ^Q*_E$uARvKM4pPP`QnGQGM}rq_D|eY+}2rZ>W5dXsXzbwsAs z_}9?hYl~!BhkUocOdGbz^q#j&n<8b}OdjulBhv>lGHs(Twin98=YmZ;>ty<lIa-rJYFl)H|=FQ@smua{*~!8zO%z*;yX&F z?+42C!+n{4jF#!b6`3xLf$wCxGE1hb)aR#nW%}75(=X`PDZ`BnnQlD^8)f>nLZ;ss zJHOjxxMP{!KGV{4# zvroLtz8hrrTPbs+7VxUfjdNsf5(M{UZk8x>^S&~-XfJci44GTuZ@o!oo`aj)T4ioG zR^~?wWPU7D=Epyl`H3qscW5Sa#~yG;=BGQ#{7g%kpM6f|=e%U@d{E}DgmuI2&b4~n zlljFb;i$~L(q!&EROUWE%iOn(%>53_-2b7>h7y@yHo`8MNA-bqGLL=+ro#!D$0W!+ zwyDhHQe-yvmf4gqv-y(DR^r&wWwsBL*)dCI=V+N-2ASQIhke96eyYq9U}BuildvaO z%glX`IdGWFK@ORNyTfIfLn>qr9Vv4dGJJ&05iXghjFWll44EU>$Q(_5qmeN`$vllR z$1aySE>~v07i&(ampQ2y{3~+`Wk{tS%m;J&>oR97l{qs>=Bx;rr;{f8OPO=_$ejDJ z%=xrU!6BIoH_AMdG_zXCTofmBF}{+&WiE}Cxooq{6*ieGZ^}Gpw#;)sl9|s}n5(%~ z%>|j~(|-%FYfs8tPu&+5%Dm`9nHN7U^AfK6N@tmuos)URT$x|}P3G6=lh^6rRr6(j zvq;s&F^DxA^)v`GH;`t+fK{8qo>Rt z9+CMY^4raL`}k3r_i(+vcV*s3+4w%J`BU;dNShv_{Xff-`N$(Of6h2M>XezYrui%E z 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

mJoT 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

>td2BO60QM1hRUQmI+(Je^r8 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

o_l1Ii9axx< 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%0DJBE`!z!qruO|CnDa~}};PFu~yd5}O) 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
J2RWDNU69DH9wd|fXOc<^hr_Fv4%%Dn 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 z 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≧+v{y{}DVR0N%|!~Jg&$)1?o$#-JZDVeMcku$Z?95ob(q4!u3YviElGs}X z;p^B32L8&JXF^|9)U$Yu`cGamjMhDib?3-zN-Z?hmhyE*5wyebsRvq8cRl{}G-zcW zIrGpB|LE+z9hBJ}sA@-D5M?&T&WqCRItlgPwkxhX5ksQLu9x`Y0}C|WL{~B zTw}<80@G68Shue2bFc?4U_?JdhYKl_3z$hAQ23fLY0-~`ZWB-z43r8;Wx+cXwx#Go zioX|?R@jsklB!Caw6!6V*;Tr5bx_-LLzFz9RtJ_$!707Hv+I<%r=fS(XotRIF(vaV zN0?LX^WxKBaVpN6=Y5gG~Q_&wDArmSGG1}Y+3?ZGAV5>!X4G+)QmK- zOiu5$VENN4D?*GWpSBMuN8Qvt=N_#r$@iAE9=uDRY^+DYL4E@uzI<>WqcHM7!( zBCVxIbJRomF46$abAD)Ue>DkhIkP}qBjOO~P12;s zD+l1^`{ZNH3245@jO&#NF(ayN1b`69jhlU%)vRwjIu>Pl?x9}3MViT3e`On4R4>q}_zjDu zIoiU`dFvveHYyCSnSD4_B9ZYEBF%|3;9xQpD_PiVhj}vAIv9(K@bu_!2q1NUf?raO z{Tc(eCumn99A#clKFZMawD~t~@xyRv_tHz4`3-aWOakcev&~!?H0j$n%&>}dI)QOu z5f$?f_dCSZJF|LW_q+foBLdq4j5kGzgf%1CXb#vxTNPu>3<>ME9w|`zieME=i;ci6 z&#gaZF#zv`rA2pqmbr$tE?SRba9Jp?75nsHJOc(80Clp>FRZ)^&5@~C7Z_|JF6NKx zK~U2VSdp^-);PKUqmO!U$m~H>`f;a4raC`Qrx(`O$PQ+-UQtc3PO8<3Sfiq^E)#g` zfXGqXq<3VEiQY=+T@%KZl59$*QMc8Be5p4e7V&2)By}>6UoCdYRBnri8qS~}(<`eR zO$mRuo%%^T^L_mFRO$~6>o>2d;j5J;p-T@&I+-12rK+h>tf1S|7IjS}ZBcbxytxJg zv-XFXm)|nlL@-&v4J|Vu6r-oD&UDl$(D3yUC{`g(@FXOt<0M`yoLVdvotwW+C|HgM z2ZD)f%bwyfj|ovd+Xeve{6+qSYk+usLyRi#?*4>JuE{O&maA{+0nniH=-!7rRSsck zO_>-~*hEH?1lTX-f~o*?wKiyfMWx00C$Q*MpWkLvu!R(We*bwx*^}G0<(eE#l}f2s z0xZ&5Os83?4Hp_*9h&;e_a~>OvL+Num=oawA0%@q|NA4a2^SNci~z<~qtO5(i8l=s zKC~%Kh;D4??A%|zd{bE7e>_3ec6Od_v(`(JK&j~MGKWkp3eeTuNa^!`w~#+Ft`G%6 zNtlr~A!q=lhqN0=z509~z0**!z-K94oVL_1avM$Y?sa{B+zUIRXG*=p|Ey^pOcK)5MCjaJ10!LsiVV>`kQ1uXi}jB%YoYMmuC3$ zp6enRS~;Oh{Xqz7#3n7|(wu z)LY~kZJCn1F#Fc6Zk+p3w(tHG^^K;cYIU8uK0qu8muyfg{58f5Hb#k{hxS?efkI{| zVaWsaK#-5(soM-ojF*_j)bTx7Tj*mO*Z_C~6s`!oQ9*W>YJQj{2C+SH2K92jfkdFV zyf7I$@%&?YE`6NOrH`i|Ddu1~Euh;qKvrsoSLg5`c=0i?od&pd zyo-nm7z*X5b9VI%CCq;_4TKqQBdJL2mb?4Go`kk^XdraVd2XPIQ09%<9M%pySF1RA|5U=`EMyTJ?h?P|u(qWJYUX1bUjm<@S| zI)h!<2kjtlU{3ja?5quW3v37%)=hNBV=q;#B%Bqi6iFe=QEO#2j-7mhx-CEJZ|G?_ zs^2ysWdb+jDfqxw;sjM%onc;UXP(MX+p!-F!wD!$y5kn0*WXE|B^VEz?Ysh<(Iz&= z#1CVF0wgE&4ZR6*Sm9#Ei7uGHSR$#ZA%{ovk9kVlx#t0bxv*2 z_qGEZU(+Q4$~ntCS)mg`GcJ!!?|vG7xTlZ#r~V{SJ`R9=@ZO*H9ym?Lycf_V*w1VO=gK6Ar2I!hvE zHke|`CPV!)uil)@u&(4J_&%;Ng6mozcO~%Ia6O?lqL|#$0rpxH7QOf(#|}>MI_#nv z^S`lCbMrSJ$;qpxbf9j1qPI-?A842QbzJSX@Y6h#i!ANcH|X2sR!d$|j2|mjY->{v z0o8g-?)5AQf7G^Z!}4ko1Yc#d7cUQdoS#WwU_kD&)f7tw4Yf-=dQ&3xZo!3=)p4v{ z%p^|(zlB3X@s=aW13fxwzKy*Vx8lVT8yu>_YvBz!>vr#^O7rg+smb}fFY4&{zO(c5 zE=#u0k5O7^_yR z(&!a(mqDBL6REf?r+{`$rAflP+W}BwM&%_MeR4_-7VYY%WsT1eAM>se8}jFO$`k9R zf+C)1U|G1B=1INfx)hM1sI4jHi`Zm?sCQwj9Oe!ZTH%B44vH^dvT}3F_DWghdU9pm zjGP|Im?F#2(w1x6{}QE+3kPq#qD7?F@EZ1B$)4cT;4``CjdL%>9td`?@o;jdSj7q5 z{*PUzwi6NaHS;-6cM?$Z@;CjX3x3s9S1+FBsI|>noIgM+ncr>6W-lpUz9lS&C8FL) z?o1D-DK&H3VP=S^TNP!Mny99_lH7(iZG%egtJbI7KqSG44fSNAtlL2<214^K5U=5A zm%;`biU{GD*&1{9R8f423pUxqSu}!d!Kan%XSRAsKXcy$z=+Z30#J@BPl_cX=BtdQ zXQT$^q*M*2_-W7bfXFU(C0d!eIIwC}CUbu4t%J%=5YX5V6=o?}hGa8uF$M=1?-E5> z0q~?28=6+mE0x$q?iuqLQ)F8ej9@mWJ72`tT&LHkeQ8hDMlNhG$)9B3^%P*>TyG^B za5oDkc1#+aaQO=6niZ8B!x##g7zG7XR{iz|YBv)d?h8l}>%p-Bglf$(!|6{tJ7;$A zOo17>5`{{b7^u-cnG-2_HW2>=v3vmN#k9&}=b3Frp4TVOZyXOJu+jn4UTb1Qk{o|{ z<3>_@3v+qLmbp2=vvmS(+rW}3%&Qu)vat!2aj0n8tg7%)VQhEYAeVb9bs1N?83K!1 zP=$D)aBaC`=z|0T`;4GFcw*d&0S0SDCxUPwH!y~y@(L%kh^OMPM*Pbly<>FmTFb`6Dlhw>g3NAEtUFp>6lYJtchF3XvQO!32jms#M zdZZ$Q-QOs7xRk9*kL%(F{H_JQW1e%4%&!ep&YoTdOHlp&uRuqOOBT5$KvlL1IOtQs zZb5=rjIGdKp~qwSjm3kESqhs@L)u*^l%cBX4=IQoP}TG8w@&)-=vp$gOS|dJ{ua7CP`@`q$@sp$Omj;TkxC-wO?~{qV=FUqGtW`#7RnSrn1OaO zwa>x#)%f`3RZ8+{n3f z^G!|{_X<(*AtEPtFtHh^L`;UQ=P!_1h0FFhOJdZ#yWAZ44e+bs1e zJlCH0{#7*#7R)LICoXXHPZ{=-Ce&)!VS-vQh;nqG8NBSuklWp7sEjy7Q@Uwx}pOdjt5ais1LEf-Z~rBcy0m9$>&FNZ`*s&v^z`56PdF^XbR4#rYb0f7~8{e^_9H)`A+`bEhs~(pKoN&oGK#9KjHMC z;VnnQE0j`yD{(mhjuC2jhDf{ViUK{63;WFlir+Ds({sZ)uO_%|^=#=P2WvOxS=hFN zf>B{t4px$dKL5Wkt#cOY5cxIJN2&W-Zf=rmCz(E8_MZMKSv08eP`!hh%v&7!P}FxH^y8RT^*zeA< z<)5bJCi1URYx94$I$}2l^Fxz{_q>ErN3Kz{VcEQ+w$bzK_jyKkik97GVKX1I=!ygp<8 zL|fs%yV;#>)3mB1nKyu${xp-ud4(G~I`&{BCmTARq%I{qJ{{q~ZM{n~`A{v+ld3%5 zMjQLLO^c}IUa2h5vpi|dZRpctFOqS_-pOQMbY9jVb-{d?-j*vBB8k@vrY%z|_d3ZA zm9IBvRoS}wl5R^fVJ?mgz*W& zvc+KZob_u|!7W!clGn*5<`Q_)6rImYDM$X#J=CH6I*@aRCJ|uh9q=#P01UmG<5Xpa z*UzJj7hLe<`R6B?=(^M;8ESul|6N&+qGVR;7_$>Z{&p4$pD+Ia_Cutp9SJx?u%l-s z0W7}B;c8=;8pl@w8^l^|I1gZa*fIhO18(i;0AY*mK&Xa%#?#q(4Lj}zgaUWhY`Q4L zpY?bL33+bVhV4{SE|_W|6@i*nH5ImOf@$mM@S(mm)tv=ca09S2s|{?g|F_pVnWb@} zm9m=G>Mon(p`&OhF7ApgWA)r}2UV$d}5?MPS{1KmnE(5cQ2qwb} zN>JuXkw(B1l#r!4B2t;0ew{)=L%9@)a4vtO+MyB8XmF)9&8k#ay6*mcIB{~{Ne&U8 zZ&SC}QnnT&wI#DZ3K;w^16#MRtHt{jI&@WRgo>jm z#I>tJy;CH5Ue{D_a{Gy2|7E~!iWy5yN#-lr)654mU`Q)}kjP*#IhM?SSx7IrHANX^ z57^!~bjdCR!P)WiQ&?Gyba7>|n2r^HJXhQ}Ouqi3IbBND9zn zz!X)N`5h9IR8lUBEly*!9GxAJkgEc<+x7tNA&Bf)%~a{Lb2q1j<;^Ws5}rgr`Hv0k zU(s(SB~ZN<@u}BR8Izg+!YE<)D?5aKw~EHZZw*@nK=TZ z-fyOM(9)*82O{#SMTUXcJ#mZ0VCBN8BW(AFYr&J2uMW>&sShPEBAt}Aw8rPsO632&SF>v2e^p;a7tw?jgN)6*x+(P ze1+==(9u}hU+|FU*r8$UPbSxN0ne{5OesZ6>?s~5sAdvkuu56sjjfiH)YV}a!wv$l1?*_AH3%F zIJuO|JF(da^XtN5aeO2_SYA#EyN8XdW^?hu4;KsKC0MM2R|IZHL0q(`cV4{UMcnP2 z#hOVi%^xLKcWO+A;V4K*y26#fNtzc7?z{S$986frTzPQYaJ+HfHOD%!zSw>2%3Vw> zYV-?IeBVt;ZJ977EIko2H&sg8Bo&PyC0>L{mv0Qq0VXBA=?9rEms=z(ltzw98)@UAX99#bTbLBF%&YC8zT{NQ(?V; z2bgllFpI-HonxhmSaCR{m~**$oLeu9%6}L;1z|2B2Bh#;_(ci_>6{2^E;T=YV=WYY zmgUIv9WY+Gy_%8?psZr@Y*ZrcpX>SlAMwAaq&Df$0OV%{O1_iRZSj+jOo1${ zeb3Gn9G1F4A@f&(H%pkIi)Cdk@CcGr`plUW^Q1edwX1n>=u4z3ec|l>YOIWJ0Pqf* zS32PI7IX+Oi)MW^T2Zi#U}`7U8@W219H<4aUQ-glL4mK zAF`I*UB7pA+by0wVJ%N;H12z*FJj`>Rx6wKVK)FHs8o{n^pi5l&f= zPVWrf(67v0*+$kOobo~HB=avA7V$5cKDc6rR|v%Pnu}x1B$GlH2K~a4WVZulc25PX zMtoAc#1v|~5y?r*47!**g?)}~?R5UX>{4J|Xd*=&x2_&|Nq@4wXJH99)s@D?1RbVAO8Js=I7Lk{1Kwf%5>^j zHIeXLO(OaA8Dl@_wdqCGIkG=(8s2r!8lGNq_}Q)0^b9G>?>DKSaXJA7AnGIL-v500 zYIIYQ_pQ|dwPuA+LFB(sWp-AA2uO*4wNE|w+BJPfg->c(eg`BqIv|F=a2B42ZDPnu zi-MgWgHrIe;a0LY58jwX&;jA((r2EXC8hhvQI+xUSfc21>d|~|4$5zW{L<4*thA@+ zkLfhIH=FG;bxkRQA$tDFU1ny7q_(+ATrR7uua=X8K|^k+5(bb|3}u+*K|{8`0_J#? z^{0R|Dos;0@pzp1Epsb9CI1yA&woW`)Xf_-L%H5DdsVYe;P!ij0ja;zC+XF;uAb$9 znW*N$1&!L!x;aj%Q)C@p!lDL`fO<~`TpLPLRsc%a4*eF3CM}z^YSJdKKyc96Lp(kM zt{6UJ>p#3Z1fjtqfK<#*IGi4D$Nz#;erU$21J)@^f-on&W%(3y$~Onb#2E#R%V!=Z zLgt$}P{Y|mHi)DFO}!z5X)p6hjWZEZ*Q-N`4@35rYN!fTwlHg=vWAMbvc|1xxsh-8 zIt2>g2Z`Yhso{HXrI%k;sbqr0!u)krF1M?E$%c@;@0J8jRnMO40$c7FSy&fXIAj6h zm1D}>W$it&Sc$B8OOw*w+hKaOQeIX8Ey$IXBTgtrJG_q0?kauj#!|0mWyd{Av9!D# zCTusg>J_D4ssk_8HW|mrPjZ~cQxFtStoU>Mp!OfXPvgDVX#O#bgHz}CW2;9)b3+g| z#lr??><+Mos0j@>G8RF}FQkBeKdP*=^B-KH$wNM4v|oPlg*%tqqiyS-8xYmBG|Kp5 zKIPjKJ8wqDP?DAR!}L$Rs4GiN$$)gOD_>`z_}t=G*k?QV=z;Q9IN5Z^SmYDr#!rDI^plEzW|Sd2K1~vFh=dppHIwPUB5)S z1Pm`FOPQk-`3=*Ea>KU|s(gx=+?IbI^a@^uYpzbOL1x-U`qE z{d?g>QA(JM@`cM%ZVU}ClNJQ*ts?7Rf7dLo-2?R{Ax6dB(;xa@f8*}a1giZUiD z_JM(1_+s3|6BSJO2x#DGVp~13+1-BVT~~BpAB8Sd2-nJ}>+(y;Woh_z%{71c!?MGN zUwaKkk>Ex^@2Ohqt>px(A`!&&hm4KvtbMl`Fvgzp$KFELe_1CQV zy6>!74EE?@gpMk6sBg%AHZD>^`#nx=H?VAt0;h((K}GZ%Z9KaH1$Rv?!`UI<;0#?W z2Ie=WbGj()KhnElu8#EV&&tLRBU8SBI+gL2aWhe6M)fO^tk&npb@&QE7^_>gx>Q_S=z& zw%2LwDNmR7ItpRR#8Cmp0@n~(#OLl5>|rF4#Jphh!to=8b0I+`$3d3 zr0N531NtaIcoKx>hCP-RNV114?Z{z zD#zbbLmf;w-Jj58YO%4gI%+z0=hbp)g=TPTFV2bYUf-?!joaGVATNd15As4>tWq}m zD2c%87YKMyCS(TWS_|Yd0ibDeS_NU9yUYa{v@*}hPh~Q@TW=m>_2j>fk;5md9$L4q zUOMk|gs)JQ1aFeJwGqjYx38!IEk<71-sdj5t4Uc_rV6X7D*woQVYDNW&I52I4P z3ZqojST9o0;gm&HSw=NrhtxWyHtNbaV_a%>8hj9vxKL_W3+|rdoQ(|_oM?9N78Kq3 zcrg%956);J@SuW96P761es?%D>YkeuAgYOq%4@=&zMMX)OZUAStGpl~v`Q<7a(n_( zgoS4dPHdtkXFxXbVwlb1H+Ow-p*a>;XTd>qHOM{10kC=9yPnoi3FGll-%I5 z871KKu0k%Jg^;$O?KF-+7tuss!6?E(n6O6JJ5n4$#4-H>E*`AsL?cP&QVa7pkhpPp zLnjvHyEjiZ6FTglSypWd1sO%q6;p)d(N{A{jW$sSAciL_mI#>Vo37|m$M-a+pnGN# zIm2`__pq{TnaqW)Hx0^iS4F74*zPGu);a|`y|{GO@wx75|A4g=rc4W6j()q(F-TR6 zKI6pfTvmp_y~L`^m4>|;8$F4+H1^*CjKtO{RIRo+>V$J-hgT*fHcoICIKn9jWCy5{ zor}VPr#|O+AP&z_GKL*9O%NvlvQ+fZ4XlBkLEH@?^3S@9Y&0b;Uxj z*0(5b_D&vh*<8a@m>1Kfn#}IyZV~hb*k*5xw5*+N6T9W^<>yBWtM$w|snJ=~7K~%q zcm~2V0X#H3Xd2j6^Gx6m6hnulKu|eViJ+`IlX>S0`~_19cQAYR^_58Bw(!Nm{5=>q z;B70Nw=$^cyr!LcFOk1I3p3oWCU5um?;jW-^1i+hQ$@YTtC~B*?U_BF;|3^YK8PKV z*Cl}&8Lxp`X$Sa}Yxm<=8l24wfm11_qBI_648w{AP(0YhYVnwFD13Z+bz@-fl~<=> zV0H3}OSi%&$mGx1(C8Vd{``G5YD50A<*^u98IL~!np!UvLjeEMO(FTf&2hTDMFx$O zG?chYBueee@g0ea5|<>XZ7_TAa%K$>e>Bt_uI`4cm82tT0uO2X{%-nBn$t-rRyJHv z*FY(!Ig|Er=N4ZBZ5@7m9E^cB539X+e8&SH(m2-MI)*fv_YYhW)2``N*wi*!g;1RJ&RHAm7Z9c7#F#2Rk ziG-)(@uf73A0%R%jPPlmLL@Rugm!_^5w^I_r!P<@pqBt{^- zx6{L`T?nL`rjk_`{PmY7_BX;&=hf`|$rEogx768tdfhFafqvqi_wWsy(lqhKeNr<& z-D466`gY&_OV4H<4gaTrBighAMTx#lD3;Q6iBKf6d0}5FzCTI7c2*r3p#vn{HG@5w z$L$LSo_LIKZ}5l}_ovuW&AL}eqy5E@6zEf0upqc0@SB{1k<85)y}&+#Z)&FlePkVT zNX8CbxE8YknAHIqZgSL4J)MDHpOiPQnq{dr&s=_WT;WgzMOxK&ttv}Ngf>$*<_N`; z;5wHO5OC(xdav18s^OC-vda4TgM0{V`({_msXxaUOPmsA==k+<%FDd}duAT_Rgv*KDuSNu|0MllgMdE=yr(Yqh%xgWj z-+pZjRUX0zk6xQ$?aC?o^aNxONgJp-*bAJUAEBJ#%8kc-(9v3u zPsRYH5Trl~SztIcu?1n^|Cd2Q7|_iWxq_Tx1}jtk?I{fKQtOE#;XQumOJ1? z3ROCV)T&jr*s;I0Q7TdJC2EBLQ1!{o-S8|XFp2T5XwBh1o<<|=JAlgfW%(QJs`^%2 zs$$6XY4S1k^cw;KD1p` zM`q1xXD(l-UU*jsQ-P)%*pMGlVlG0)`)^>AGi={4^n9{b7*+`rvf_M6F62k?G0s;N zZ3Al)Fo`=4bD9}wc6L#l^A{6aSJyM-?JnlAELqd7@+xCuy@q)tsj-%1X$!>jMI!X7 z?I0`xAndED{0(XHWr{piU*UYc{r_oq9e09aWMajWB;Es|-!EdrVkA(k6y0D|*{B5Rixroipm;G;^@WIJm>f z4`TaQ_($O#cqz0AL3prACt%Mh3-e5fx>!LOtkS_wv9T#M{Xp~JT1cir$RezSxgf-Z z_U5zT;dF%4?Q-uRtPvUMa7v+yD}tLT4hZp{9e1 z0Z4@^s!%=#w2u$Q7=HT~5z2dL&w>T5Z~XLgn_Vd2k_&;5%qwyGG6s=>FZY$J+2eSc zP1rCP#{k?5T?1SPYY&&K1qyA(_?ozXXBT~7-a7P}6-qv12^+f_6DaP_e)rv(Gmd!N zi`?D@_JF?Ip)!KP1aJ+jyCk|(9ke;RVRnf@0??sOT2sAzzN^+bcX|H0G2$e&4$24a zNRsepE!$g}cd6gUKT4XIWlm_XE>V;s=|xQ^ChwdQ(#SyCw>G!@Xrm_3pp9sogHpCs zqgRx}xCb0n!j)>CET~L!X$MXKtprqj;@qu5(!m;hHf7}m>tH3=)Rl#Q;8mgRZURc) zz~&(hDCoW#DU!ELmLpi=!cIW)=iR%R1<+6(Bzu^Px~bV|rXmSL12exM4=`7z$&s{J zse-IiCNTT?(0UJWczON;g|^L^a<-eOu3&5ULFU!ac@5o)C%5(Pd5;UOjhmKbj^^! zAn881(lYv4{RM|}WXZ4k$kbf!`*d2G`ZjqB^8y`ck473>dRh-HzRJ$#2zPAiq}8(z z&9%a85&e{HJ_5fjUF4WPNPFl$x z;PK{u02mN8_z{_eaeN=wBLH8%LLIJnq>Jb#-hi>S+mTb()v|Sr3fcCIp-kwlt1A<0 zwIT|&v~-nzL3yCLoZlGKli~WRb=z7Y(hRO&%xoneF=p};W&!hSueH5J?Nc|m&-K`1 zt!j^^B`UOc_IiA^s~ek9C4Uk1aK4k&b#>9+yMq_*su!q~CAH_Rsmnd6l}b^8i>_d*srCdjk08jhipn)f&xz{yy_3xL|*wN^idTz4v3(2E5>hblQX`2{K>++$Nwa z|Kx;V4nsM-;h^ccdBP4N-U+Uh1ELD1`-dHR33|!sbyKJpfT9lr8lX96J3XT#-<0_y z+p!MvCXs}tNtTr~Q1Kp9$k?uQJLQRd;sNF~J@*OoJ4cU7RUyz&p6rUMKFPQtYTHXs|b>DbdYggjk_2wA+HA1vI+nQ z#t0LBd@Qg*q9uk2a^OY%>56MG!e9n|` zfYJsP%Ht%QpjQ0PCQE}_0%N$Gu82)UG21_jMx#H^ZJXb1#-K(Y8(tb>K2=K;HFY4U z5{j9Cb5455aFX$ZkFS9W>2tJu%sX%s+;I>%t6C9#=7R{RIuHG{zFTRU)bjFAC_8#dmd?kwm%p- zhiJ7OC~J?T%Q47XPMygE9jK>=cBYw2!sPACk6uOIqLjOy+UplV>gwEb*Rr-5$JV<< z9(n7Zk2bvCGXJFrGo5)QnU7!0yiqV|&jFtk(NVltM!-ia*)~@|)$tAS%K#5rE3R0> zfg1&Y2s1ObGnchyMc4N?avG8|cqmjPe6+JOJz#7#wL=XPjL|=t5lEL!naO}I>xI>Q zF)(HjV}n@TA=JPD8Xw3|Cof9vOH`^mQ7`9Yj@wZ>HJFiI`zN}`#^L`&#&2b z=s0E_C^1rJ$YQXDUN z4Nl>;YY4?K3)1P;fvbDuDbU`00*A9i$Tnu*&4IvoX@yo3N0zQTEEWm#dCJ4MQWrHg z5=mnt)1+~f1bMdiV(L<5y+o&>hSLBFuNA0TY;kL=p)*9T4%tAE|Ju<{*(MP=3-gI- zU1Ic20x3M1!`w%0)c8hh2FLVveL0(bMA#KL4TBWM+jNXj8meNa4Pa{%iVx#v!h>II z9FBJy-Ujodvl#O5_pIZZ5S_DnI_$rj5V3Y3477(Ok8Wl5AMWhz=`z;q!*aXj-q?w! z=29~sy(2-^wmIWLWeobaK$rJs=JpiXnv?5wnMPP2Kd9{p@>)CusBKWOYDc>i4gvMY zB(t`qw}tw@OKDTx60gCWNFRcPk!~vy^XU@~duPt(wRLts8(~I35n=_f9x!%?4twZ> z9Oin}uyG{m0?HA0n;)m`g_Dj1O-{R-JMCln7ZL}djt67oA(e*j1Ms>S*W*zrUR*57 zpxH~)3rBB|(&^F1fwhs%zVi_+j$MBjn+SZ3({GWkZIj$02+oB~zHLZoy7ac?EX8s;C^!-J4@ph3rXt2r1DRsNFV3 z9OWV!P5^lv>Mp(}9CGM^W((732-qb6Fc{D+ae+1_4p^>47FjT%5+=4!b*Xv1O#_2}q5v}*Jd>cTKnlZ2VJ4>_;Cx|R73 z4kC`F``MVsH5OVXk<&VN(&}@4ZV|^Qs${fNoN^Fb$ONt{Kw6k6mq5qC|0whoNUvNv zU4aF27$3Wb)p#1XHBQ~#=xA326p?Ro`owS$3w#azp+>M`aY~T?ziWQ?-I@-bwyJmM zEWTMfvMK9Vx-&8(-{y4)v1^;c;j3>u0&8l}xO%WJB7J?>f=UkDe4NIf!2AS<@B_ z2bS_Z(ddlM&WC_}$ww{Pp8y%Nt1G`5nMuHiTkV~_EFj5U5upu9MjpQ+K^=JKop&0T zJE`okV^QW~a?@RR-A!TkGSw)9aTF<6jDsicgML7c!cp}296(V!;Vz9`cKDF+LD7&S ztFed~YS@=SSrMQUVPQ9Na;mHsNW*SyR*&Eqa2|P|ale#I{sRU9G7B;rVT9f;@)Fa` zu{SnoG+{@|5drc>JRfg=FZ?j`b20-mgBhR#bo07(p^w2TVYl=h@KG_+QUUIV7z$RQ z$>%ltKc=kJcT<=-N1=KVDQsfBJGQs7kg)^9?4L(K2VeQ~CNQZPvn6+om2tt&WF z+5;m&KyT&4$mx4IstTwGq+BqASIp9WUZ7*FS1m3-3NE$%C_02$FrE`!eyq>1(IbcU z&Q(hCLjKItoMFj{IYPtNe#l2)>E0CK7ts53x>X^Br z5$FPfhGjDy4asd8CJ#X2{Y*hvV7^Tgwx=90kiC^j&>G-l#C`e}7=nkbr~2HCimEAD z9qN*rhZZ+dtC$anowO69;g=Q@&}KLRHQYof`1d&F5~4O(vMOR?J_cIY z7T8K@7i^`L+LAwTds1SvO4BmCwUii`w+*n8zak-_v>t?Eq)C}U%RdqFE?OJJ`c(6( z*}_KWj0KfKv$$&B$Vfx!>YZVMSrXo{a!!3H2cWY-Q*M^KHA11rD^r@pK+$zYNw(2F zK4qr;{q?xKPwMDv>0rf4{q7Zg;KWy;wP>p6x+ZP zP-vMA5!AUcz}Q(F--9BCJGOaTDG*G40i9;I5n!^y_CZG^5}fO?4`*dMy(M^EpE`R* zgk0BU%+6@$!-Ua>f%c12Qcs0R?35b)Ha;QD_etc$c4Jj#20JQBWmwuRH4FP!nC1wi zjU`f0bOT-Bbs0s?v@W2NWCu&7%xh788m$gg_;nnC*+hM#&Ru(PK&aL6>(0OApQ`fd z!)}q5=j;yusXYY^7#1w|=Lunw-`HGe8~b@OiUAmB=mACkHEuaL%0Y8~Mi*|45K4!%s19 zQwKAI2~mUk`0h1TFi@A@dK})=!HPUhl+D2t!*S_y@TTY*3cilJ#K=gcU|>rScD}$z z1&cgR_GT>{ytAO_3EwVM%@)B_DO;2k>6GMh7n`ST$%>letumfSKq?Q!R!vPBKmF{p zkF(0bG-k#r7*$0w%$bY8A5}n;p?vU;6t%3c@1nlGR_3u>)X6Nd{d{Q9OoT9PNYgN< zyQzJzaQma}P~I#FoFvzEz*U@Q;k5oh907YbQH*?CW*!-I$QQ((o~hXWJA^wn@snel z9lYBZh5vtsm;eVs5(zEBg=iZ09#@MEq}VX25{r<))IGlp2*|3w+u~#}ov!)W&(?)* z9v1an3svll#K5ySZG4%m&@b+G@LhhVz*nw}^eb%AHnHw0@==btGhIfmWX_{dI*XhM z)b4Dh6nsx-lA4hrzWjB1IVj(zd^tPy2D3{-1c`@b<@%_;LJfMg_h}{aigF-}HMJU) zWxgJz3+ND*bQ;lE4&Ts1x>Jp&L0D3U%;eS;|LS*&O6E$t%rGUH^+z*qYxg7 zWjq&+9*ahq7s(gQ4@k|jgjg@h@I2l7R?u>VV9}10waNafF%jT)~I`&BBf)m&bGUrp86dhWk)c!_5tFSY zr9Bpby_Z=&W#9a?US!k@)h$EoYUZA&mG~5z?CL(Sxu~V`+yu~}7)MqXSkNP!#b7N0 zE=plx(6-_io|NDi7z+_5CNi8n1-mLmF}tywRSf6O&t!a*Hvd^^29hs`4rZg6%Jty9 z(Sd*PGwNV|{da9d+tNa7#nsh{D1u>gmYgCPV_1G?2a+`p$N4jS78Ql zy17l_a9%L~;~FBqu_KM2p1lk3JEEYNBH-@`pJ1+q@Cu58LZl<0(p_qYz*p@TYt%x5 z^V3RnReoUwXb;vjXqm73MBdE$DKy}sy^AA`4^b7=NN*awWF?A~k=bM;b196#hN2od zpFF~JSUNl3ggNBbgOup~^}Da?B1?bU`{q*`iL$YgFA>tQv`JN2db(wLxbQxEOnPyxkM}pg@BgQWuVz91SK?xQaM)ks3r*ksR}=k1S&TlqT^El=yqX*wGg#703i5{ciMx_VmS>^7?{JzxidFxvJZdb~5j0lp&*4wr-TCJl|bno6TNb)v|Xb6S!vDI3qqhL9ooK@c_FSZ z6XDoGjaEoW+)#=wE9LtG0Y8k4(~>Vq;7d4m8M$7YZ33jWyiFnzjQ$CWtutAHoOUoR zn?j+5EiKjGkT!*>My=2`Fh8r8>lHk)Rm@lEbvLOcVz)~mrK{^T3ZIAkG|p5~dggK~ z=9o%cWr2uU8UI)8GUh|}lHCKBj7uohXIY;vSThLT@si7q8}FIfv7v8OKKKR?ZbRY`Bg`v8ANmL3x zb2(&*PrO$M7j9cXl$L=02>pCsj4-*xuZ1=FNw&=XlF2 zcLJIKy5`Iu5LN-zGnilt^Wng6(K+U(kCIGn+rl`oJEoDv%(dj-rSd9urKX1LF+Re4 zGbl0{1$BoXyCS^_1uteP*&>e{R2cCEe*um)eHP~6075f|rkv|o;Ub`wMJt0B18i}D zghM7AkNN@wdsq0xR7KxSG0L3HGXF=-%-?RL4&=8qQEuop`mnj-{L3y+P!eA3l8e@Z zvw=DE@T5>NgOf$rtkz>?J!zqi!^pdP+w%9fzt~27)dUwpL<5DL7Rxn^v#006?(SCR zXYewv@9zP<>WN}bUU(7C+u~pV`0xOScv!J}{J7v!0LveT{KwIganWjYwCtu8v7wi9 zIp7N1LM~x8!Ba<>@*gkG$t#DmFpWbL>-I_iYaX0i2lxrUe*Um+RfluVnlJ$VqSh5t z86SqDz~#QE_4Xk((sL@9i|7I7;ft0pKfZKnj9I&Ix__WIZAH-06pF>|f2|x$Xpxj+ z?w!+M)CT8vTVRllzz`q&GE0>CYjwts(o|`ejlJv`H%|1Z6R~<6RtRr`#}ES`d?Q>6 z0-n`Xco3x@d)s2ZwTJ=LJfbXtogtE9EPhv>1ERr=G(>JPnvft<;%azJcwtq zAP^8zf`SlvKD9G-O&Z+90!UTPryCBlzuKAqL|IOh7W>9Bo-C&wcpB7Axgs0ay5okB z4oA07K8wg%4DH6c`S2XV_8})^d<$Xhtr{7e91)qVmQzUg!xs)<>8Wrtn-E(7>4|ND zqrIxkwB&!8eDlqPaWPB;1rZ#fzgjOOLrLOlaf)R^8pf~l zWTTq^Zet^5o{tq`b}^S2w6*)KD7Y!yP7F(hV)q7IH%JbLO4dIN@uU=*YBW zU*u)x`<4s$pWg(6*L1^%ZJQd&?aW)uz6UL_kVIe7n)S)I{Edu!z?_6k>JQ;lV;AS!SXX-4Hy2IUSIl4WK-f>dh{wq0}` zX(w~ofA_mowcBjc(k^(MQ_Q5 zbe^0^W9@Fkld@U{eHTf4*g(DZRbq72U!fF7zC9pJW;R>E%dh0eH*Bw`K81Gc**6S>cw*$ zZpZ8;B%R4HD{9ZbBFB&I+15zTcw(1cP~)lEeUONoDi$uRs;XQ(FaIRckl;B*-I|{* zkAE3G!n{qMs}q{7@@ARC22%q+{3|wzhEyJhY-x+s=U2CDDoTG-qw(4$)l!%Dz?3Nm zhKGa9gKSp#Q~HgBiXj6;bFcA_l5{C z8Io{*hOJH*KgJ4b@kMmH=kU&jZkbbTpSEUK zWm0B6N-kqIz*9}x@*jSb&F<~%)N@q`OPN`He;@_P7D8scq7#DoTk-R5iyXHnc?#lt=`1 zLM8v8$~|D!*#}Wy#FM{JiOt&?4>X=5vGXM;wQy=oIG-K66N;)VsL8}0ykb@j%fZsx zIOaHjScN+W{IEix!1XG?sQV(!^*?{&F6{ALM9&+&iR=ez*a14#oge5RgYAZTU5&Qt z_F4;&80*x*HffSJG=Y?+L7W(<)~;xjReI}ORn+ei=4L~kzW%Xl&p?-{&e$=aOqUp& zre}CYNwmL8x2Z{5=B{&85LxDt48)whl;nwR+sI#x_K;3zi0`RTl=+o)%JPc$vMc*r zv{IK?QInXd*7!S&c3sM2azu1`V`6WWrlD2~v&EbKlw8{1s+D@+$Kq3E>e5c5Lz{x4 z2L_S1PUxB}g`fnp+#xub%R$m=9m*v9*zG;5(NK@cAB%Od7~pvJ3m6Yn5+^VaxL#FU z-XHuV!82bt_jOq80QHZp-WiLV)R}`3BKr2*cal=ICQ?mFgsw)BnAa8Y%&QgXMb=25 zK4R$}0?{s!zc+Q)*I&Pul4{r=6u25;kZ~^JUQjJCiEQEK+ICa6zf52hmv%;(`=Dlb z9GdNn#P{!ZGq>XXnn2j#lOuu<#D( z@+@}hX@QMb$)4LNq}lU5N>qgY!9 zTpg4c^~{kZRDKxV@6zeRZCW=!#&c3rktMcS1ydXhNl(f$5Tn}Kww`xh=tD~H>$d3N zLQ|JrfBjp8_jjho;Ow!Qt^Gjia{wLYrLmG2#|Uc%7u?C}e$Il9EmS@kzs|+@s_-uC zwS|*aY>Y1cUbK@eh6l%QyyFO+3#tkhfgLgmMk&vn%$%%qcP4c(;;EB#H#=i3s*tidR@v$RZGkpbYn+*xeDI~k)chCj&+JS1 zmNxLAqpo58F>Js4JC08@l2N9l4F@JczW}V%R*g39PPpP`a=__M8?378I-A?ulQG*Z zoqf(SRW+DoOw+wuXB(hCWNu~t z%e+PphNG>SFf1){L?18IR5)HTS1k)bl?-QUA!BO^x3maa6yq7z^%O2<5ekJ6Zvxd0 z$y+RvR-CtY)_*D15Ac7l2=>$>O`)H3Lu&I^oQZ?1B$|lf^Xfw?C%=tvYmCLn^k|eE z%Ki0u9->t$VNZvFq*CfYGpeFA)hQlK0HPdLx|ow3m+c9drvO|w z>Z$fS!em$baA+h<)~iiXKn`M0ef;q|pcY+e0ZnTfxdSl4Z{*FoS^bz9@=WbHKk0uv zuyJ)cXspp?^A^_tbITPms13={50n2+T*Q0~e%r%h7vmjY=($mAbsS=a`-Jxm7jVo# z!AV0I4zO-mS{PqM*8LPg#Ic~Kc)FLLI`wZ{Ed!gy4a3bx zzkyDyZo3n@O+Y093=UYk-<#aSPMdRt+?a+DjjP3~W_uF2o-7OZKKk_^oFbe^5<(V5 z99|V)87~uFEKCK8To4UhJJw;23l)uJNyT(HO6|<=xt)ZV7fjed$%k5r8ghZhK}Yug zG4>XKag}KsXumTVcX!t$lVsdyG8#`)cXxN{LTPEyBBjM$7B9}?vamQTzJlxmyNfIf zEd1DZ4)=Y}%p@tW_uiIaCdnkt`Of#f`n=CWKi&0?W!~maj#|*Ud7ilo3{yg&<;6EF zs$MvpA1~PmqCr56@nMPnXP$l~&ss-+kNiaR1M~y*8C-GhF|&7^`PZv?+jI| za{=ueIe0pZ zajD&MO3YqPE0T&-iQB8pkMki_X3K<^dY4*6r0zSVheapWRg6++=(0t))`4z`y!`Y-&yQ5X;Vq9Q=iWM-IWW-z~u^5 ziHh5urI#q$r&`$1R5tW>ssb|x%p71k@T~iD?H>TlEz>Fl9NJ7p+Y~EDE@K;dI+cNG z{U$V;o;7f+n*mMmNZqNTmDEF66NUReZp;h->8&0~c^gN&;bJggVURGe$u+g(jJJ@9 zQGR9bV~j)U_r4JaHO7(ZbY#y~6IIAI&YDGKKu_h2h%p_N$7SL4ofU~%Q4GQ4pgY4C za?VRxrnd78BLBqa>`S)h;DF?}Ew+_f*Y3!`0ZD9M{TqPs&1}}kg0fa=AlA~Vj|HTD zX&{bkbVP^drcBM_Ergpx6|OCV&&_2rtxII zZ>Y-vX@69GhPC5xHJ;1TM0PCWGZh7b4YH9W2yTFg$jWbu1C>afH!f(6r$hX3gw+488Hhp0#Wg#rO`rLE0 zgP7?Lv7D5;YNBM|LSR1HZ^^7!vLy0KJPTyV57Orwki16hg3N)#{qFejR}%BcMYWod zB5CfjfHM$|F~Zfo%xVBq&;!OHn3w>G*Qzlm)j|opIxK}Y%p=@T=ALOs0mqmVgLC1r z7?7`yqz9G;_KZFz!yarroCisy)dn%PIkx{pLk zlbTr;lP+MB`Za{l*SAX*7Kuv3_ViB9_}6VqfVto%H?KG(ZOaX`fdD5bH?OQ&5HL@j z-OSaCd~+sG3EQVHT^8W#M1f_Crjlr|Wp1H?@g^E-e#I>XD0Ye+$xZv=3U<9-=mfZj_HsDSPD8?|miE+F2 zH3l~{3}9%OtHv`^kpr(WdO(}JFgVBtY{E9yl!0nz@0U=C?tl-Y)J@f?YmpD=Viy1S zcPZ+O>gElsO~=n7!km4<`Xmg&^AfA)kX`24Ym&$uP!OX%=N)hiZxb%T3Wi^gA$y5D)PfuJ1lQIHTadJBpo7%w$kDd%s!ihoiFlo&2 z4CqAIR~V*Z=?ya%JRuOC{*Ml19UILU<2o6l$1|!ehkK6MUubU{QEGy<ApTP4irTyDi^OU5fH*P6Hqf~QZ>6cpw;N+bcEFl#iCZ<@2=ozg-0H+(w}x{ z!)=m~s((Y?f9?Q!$$^7ZB-OlRbp%diaM83Xzcv^Jw38$Fq*>XDZ0y_m`u1gy%@j?%p+uPgrSRT+^n1vNaaYJYu18=!P(u$30W?S^tah zqLyw$5XaO}!fPOSK-glr z2+1#UPC((?<3f>y!-t_mfbI$X9jTVKbupooq(qBD3Nt6xWS-{Nw+RA*)&o#@HqDtRFYj%3yS7*X zAL|x+mPJJFX*Q{CMoeWW>b3eZb*I!()`5^4=(zc-yVVR)WuqN>4EAG|=_b_5?2b`= z^O3B+ap~aj(0?@Iq>=77mYCW2RpuQysRdxvA5x(-uWHOPytzw$i!B(qy?L&k=C`k;o^3+OBaivCn<-6}rshAcfaUv={ofyYT z5`8WB#r$%eyavR(->d8O7To=o-Sj7aWd1mcta6HjP?XO~eMg;I-C?B$ zs`s233|&X>H(D`8cS&K8h8fX#87Mw# zsSkNj}nHGEpocb{-E(-9M4 zqV`vJ62O9NM0ZqwoQ7a_qKbIO_vkB{V&D7S9j9g)e(#<1jNx*^GDha8Kz-9${k}lG z^TYmpetn_vx6aNmz4cbNIuKC1RUM(Y&Oc<}Lg7f;Ng0`IR7+ce`Yu7<{4#}35fyD44w zob;^Btny^)H`VDihzF3pBki24*Fyd^fBvO&=jQ4C(?IqWdJ~O@y97yYD-ixPD#?ws z%s!?WW^s|GwHIoxYp|BT1%3^5bj(StKV$6Gu+JlPe2f}Ao*Ehe1b5-RF#X4zPWLDT zl*bE(ZI}^in2iK)D0~5u0gR94P$1>C8~HL;A#Nayq*@@ILeGUf7C7;x!8m!t^s!Fm-uY8t$|U%o1lld`eK$J)s$fN1B0d^Q&}vaVpjJBY8qGcuoKqtl4e5 zC0Y8)v_sLovxN;GyVn|$Ni}cMa^Q^+0B;0Hma~AOjstb}A#!Rr@q!){2>xmT3T@nJ zgmEj2P{T7$SsXHV%%5x)>3RC0*-RVjcGiQxutH71Cm+jZR6HQ-;9l4@& zWWxhXb+A+8AiKh4TCT8hVd&|9CL(B~qVN}g4u&=-)HS}q^5R`t}?)w!e}z!k?>#^Zl?Rk$jzm95qAElxT6%*4br5r0K}@WmHj%m}P`T@Jbh z5x$K3UW?i)0DeEHRr;=%3-~4z;Kscza#!9f32g8j89Bx!>*%JTzh8u23(jULi z{J*!rDgdMyLVFY?d}z4iUdxL{(C%^QH4R%j{6)}u4QJ9LiQ=duh`%y!2IeRZ1Ky}; z-G04RZ6Ak_UP^~$s9UQl=W%+cV z$M>vn#++#$zEauLwqylT)8JTVgXA8;O|_T-$IWWoesvWMylO!7Fy+jeiDo2o8spu} z2r6DaybZII(Nqi&j4|Bfj9qEm>Df5zAV*t4PV1Lxv>-+*<{8_aJRq2TJ!q>a!io|_ zPNq+WM+W6W!d-ViyO1^S$vb<=wGmS)Dv!w{sk;Cn|0;IozzOb4UNs)LgmSDg8JeBj zLw^lyXgn5?V7Uqhjpumv1-%~zM($0emZnnefJg_H$aoX5Z>_aJ8%^m{21Ded>Sq*5 zb^}`VRFN`gDQ$smLG{q^dQz4sEdFNL2!x`RJ%sD2o@gjR5#)gJlU8Yb8sq> z@ox-K90sPiQ0PCIg&QW0gH-}OUYOGwC7T66Da7P6_GScq$Ly!s=nqMOA@hMvMILvz zP9M@Y>jtOOuXlB^3xE&;!95XI-(m#;fftfTZ=OOX-EcuVN!sYw$%Q0MKfPNn@i}L> zIZCdjTSG1^gGW>;gfPos5U|81qpwZLuAcE1`Xl6gq4Y(GZ?FL9OK!T`DH7%Xm_7M8 zOBH!6pv&eAF=M`yOkPSqa-km1G)ruRF>fdqucw+gtS}2!`;NeWi>I^f=7^H3WXpr< zw`X3mG2b5-YPiX=rDxw=-gw-9h`7&(zb@1 z%>tGm^+REOM(;Dmf5AFKvzG-5;H<`kAG2SfWQ^MyJ5r-+h_%)?Q;=+}kEfm#zkIx; z_ks-hvPYLr=?c0;a*{u_WBW>Pi+9EL-C01T0tmAD@9AU~y#V`|6{MIZvU2(QKJBc1 z*UtyOiK$1oj;Cj?BA2dMK`&lK4V59YJWCG^ULg1|{zcI`XR1Txm^S;Bkk|zRoiSx= ztDDR(mBKfY8!o>*Ow;riY3eY|-pcM}Orp3=O-U9DJeC92=KkTbYooAJ zQ?0KZWyC7NK5UT8;-17pS-nWcG`rCYF$RkXwV2oejy&v8EDExi%{MwYpw2H8N~KR2 z6_cTBt|2$xNWXXVXwxN^^fFUN&(ZN+DM^QcXBQeAOtW|ND)~AcSDITowmCg5CE`IkCMz$kP@Cz0|M8Eo4%o4Lwho-A!N_X9 zx2q1ESW?TT8Ziu$NJHS#u<4^Qd$3DJrrMYSL}RLrftfM;;}^NsRw`J1#f}(yBJS(E zqE~7W=f!6F-Mm!KE;nfjQvjY0-IkAO9np3RlpMQ*Cj^2lE($R#oMw*6X5_ehl4E^5 zXKq0+ODg9Ur^U=rzyVTCAUZhcTfP}I9j`A^KV~=ON$w=M+>+MFv<0qAm(?mXIr_YT zfgOE)5&AXNEi%5iwT&a>Q;CdL=5^i{o>UCWd3p^`>;}&V$o1_!yVVWr@U`7*8VR zP`M^&+f)l*4>+>0=DPm=-TnPh`o(Ta*fz&1Hc$1`&t=1Yk3N^9Xb6YxcjH{vSF;{| zFuEn&dX;n}=8z97WkiUA{`ZRR?p;`d5D#41NxCR)^%FbQU%gk!7-cn5`<<1M7y*%_ zBczYM4<2h7?9%kI)FR1>t<+TP*=^B?96nVMD0!$`(;G7Mtlaegow;}ejNIn6a$S)= zTqc13>Gan)tTyM^v0HCljT38KnAVN&AcmGE1<$UW)d4@S ziPyw$LTYZpk?=?pixRNeQZ8G`7QpcU{<|W8o;J(nadXy`)R6xc3KA*%y7x}+mB=L& zL~?HIJ9C7B@`1On_~{Dz^N%0wf@yJ9{*HGE?_#Ld(i>UlRF9KOGCh&rXkYfr92p$9 z*2Yt_jkCJ9sHi4j5M-;wY%V3UZ~)uPqS#!n4vA#2BioocYPe26X#dn&&|SY4SYXh= zU=m@uF|`|Zl8r_*+5q$*(2TB==fSs(vI4-T+l*>ztGc>2#V%pw;HYx3sPF6hJC&9iWG1XfE zDyK~Xb;*SwJ5VCvvo6?cN+yqI&b#>BEJr40r4F8bAbA@7-_X_J2z_?w%HSm-APhN; zepqh+W*$)31hO5lfXy%h+(-=?C7>EU4CNP+%)H1677&p=^&JS$m=8Ci4R^h1)bK4B z$3lc#EA+sglu#&*#bnFqflgRZoY$L4JyGo>DIn#X4Mm2e0COiNZnz6Uf~b52+Cg%W zw{7l3L#uxL9C|@atZ9ljX~;IF9%cfXN|jc~CjuDE6`Kvsenk^KF)cQTLP9+e7bVR@ zd7QGybh|`?!e{w2=x?Y?Vv}Pe5#Ra3dGvSJ#~x`{C$omIF`JnrR|gadMd-YI{?rHN zbVp%`Em}0?w%;X?>pK)OW%P&ZBO5lYZ0CV|ck}!ui`u~`SimTZaIokA7mJ#08E6I6 z!15=J**oU!F&B>tOB!hs;{zaktv}Zm2>P>N9x-#^*5Bu@KR3hy*mV=xSZ*i0m#IRG z0Ig2wpVz+%QE>g0AGyOo%V9_K@Sw5`dR-q4>QaWR%xT@5R(KU{Lamx?%g9{vc7a+! zFUVYZ&rE9Su`BW+|H=#%U))YkZ&{Wk!P%|$gryLdr)9BD`ad0V3n#=jlNIf{c40{1 z|A%ST#vEJ8&u^GvD7hAHOhE*Y+Bn}3Hw{eo^VGuT3Ef-M-nDxxT#YclYsG=ij*EV` zk*yZ2e&}3keg)VPZq{iBdc zI;a8aDZ|jhew95PQ1CTeSz9Dy@DHZdLLHD$aQl=8xVyNPR zgV@u?Y#Fly&cT?8SoC31UDP81PXz|y|Ib7*IzlFshSg*S))`;4KmhG}l!O9xPbbIK-r1L=qu9xJ#$$=>oj{yvArNrHEE4nKyf#rGCNCdGqFt$Bgf&E{s9a0 zK}d=oC{k;(+2!eUfc`J(kr-eGSs9^k>k#V|957crrB3@Bg+O4lbHz=q0fofvq@T>a zm)rgWi^bme_-P%`PUHA?-g)XBGM>oS3@p)+ghuMN6Dmu1nH#~1`xuPx2uCW$u+1>{ zkK?q+%820UQH6YrE$Y$Mh_})}=rElAf!l*6ZkU)FJbXkTnHiC<<8k6lbF!99LR!s) z!3{ug9ngjg2T|>K^m$|*QqC1nX~>-f6dRPl0HFCnSJxf+BX5$WVF#n-?eTfWX<8)h zk)qd>27yIcBt`UMakG8pfs4jLtkHYUo&~1YilGaa01f&4L&6{Fm*`4a;&dW@-)0jE zbAQe5r@y6G$%FLgMx>$}2DH7ECHtyJslf{}Pg-?FlhX)Ex<;MR>ttR}!XS2dWG1=W z)z4CAr{#PiAS>oOqWz&xade6U<|0f3l6Lz0sA+J>ig(;pDj*)p@zd{r5nD7E-hPco zqrNMd6artvVgowZ-q0JskdGM=L-uT7%@QL4ngV5M-5BVWsSB#BrjRdb+1T#i_tG~@ zpq<@KjiJZ0Lhu z4r`>|)nG)yk|-*y!XX{$Of?P?9zHZ<*#5z62*aZWWEJ4|!_C=mC{Fc9c-%={T3x(^ zwea}m9+v6&N9T~QY4Ou|oc`V0OJ?---PYH)u)p=rLnuBz=k*cwY&SnGC8}u`tiK7eR-w{YG?7;b{tKqgfw`AxQsaDOLX|@ zuC73@!X-;dY^X^ZtFAXlYeG?GR@1+pJ$m#{Ecw(c;yh5U?l`R@N88EAQF=mw%t=m8 z0?*wxVUn z5GDQjno4D_ckz1Y`CgtUw;@&1Ve9NQ8F1Cm`Ri8|Bu#pKEH zr>4<=v1eaSz6h<(Zu(wk&)&hh3a*t4Hm|W?5m;Hfy?Lm0G=ieKQz4`FFjLmTTM7@n zJdE0ZQO`J**S7FW{AMzJK-~_hvX4Fn&8?;IaNtn(XWiY8k+&c%?{e1%5jO#aA{6ma z;T0+spiF*EkrmKFgkd!HB{j}oy~;F}es1#QGbc?-fig{y{(J^-6(;GY7UrH$l7BOe zV>y6NKpd-}XBvTb!0jA~EG$s3uaTG_1y+NR19mKPIisQrW?$BJF6?D(t+oJc8Bo(1 zp4_H@4a^gb4c(nDW?5qta9S6}@BR&fkS0VE=; z>BDHA{MGeBdE8VqCbZ-fU_g{Cx<8Mi_UT&+_{)T1cbytq`#)mCvQxcaQe7$SI2A&pK6Cv0mtAID>xAQY{D~x@cJN%txrN*Fi>cuu0;qg=skwnLr zi}k-)$e+I(4+ zwn_x4EJ^kRmk`S6mzH{AYmyS7LFOJq;7x|Pe6vO?J9NAS#*>P)TODxEd5~T9m&U% z$t1brKmLFH>mLF!N6wE6RJ?JqNriw6$wNi%P%(a|6e^>wJV{e54MNy!TGr>!mt`uQkkPBMe}8Kfru6PF5qq$5s6$a19KU6R5fAZ&vj7 zZU;z9Trmg*yp`m^KKku$4fiSXSUn@z%*Gi z$yg(?fq6ly`f*@jX4Ij{>qhGAOu*pQvY~o6I?Ws2Md+fSN7zzJQAQPk(X22L21Xh1 zIvR%0!1J(^s#|+%E2=PlLTH-e;UsFA?BUTTFRNhV1@*JNehu%R86Ye31zO-(v*4Vu zoqldxyp7x3E+;O5C?wDcGdv}S{xeXJrBeIS>4WiWSJ7Ld>#hfGkvh*@{E{JM_u(vy zpGak^w`8cOE98EW{yMUK_vRp13Al_E>sAF{zFNjtdbmPX)FpP<-eZYhK8MrJ@Hf_1@yYI->9S^;BYj zDc-pi_|5i9M4(VvLS?31t5SJ~H{KP2tJi-Puf)pP4 z#T)J!emVRF@qu9_?hu3)H2g~Axk01S7{^6C7(^+~5Z;pImCE+ymE$F-aob6`s_*cq zc=b68ii~Z-Bh!vesNZ*WUEZs7%VQFoqabriBN8k9a7t3u& z3e{64sp={@qzWLxs;5p#-ILyu`zS@7nz)=EM26P*AYBv(&GGtGQ0YMO+k)<#YvTe*^n3=m_%@+L_)WCdqcsMH>*z?S1xKgO&;ki97AR{L zoKYL7>t#Aypcd(g;{7<`Uv7Z0YmOdJ@3m4o{8~XW28ekom35Kx2jt~5Q>5kj=kF7X znsw7R<+&O`YUKpw^FDK@yjh+j1M0!G-9kNYVABL0{nN<@o_f@nVS|Ednj;n|t~z#6 z0fZhUGNH(zl!Qz~z%`E?wHq=t-#a59`pqsI+`{ZV2P}#1GJ}`FwJUz(ET2~*QK?fG5-cC7(`k;`} zJGch1Rs-{*Vxa*1u*3GP-zzL1Y!Ed!~1^OoZtfJ5(y?2L1?|?Rom4 zFB8*~P<3l(&`q9EtxRMAM^=E^WHQVNZNcph5A-wWQ*ir_z*i7S4XXp0Z^M%}p2;XX zTQBJ_vnznce2n^Y)zi;fcKjmhnuIYCl%+v$o&Ez%rhVF}Dl{itows$0wM`|K`mvO@ z1qgCm=sR&94;~j%cUK2_*{8F6zoA62M8axirZ$vNG5eZc;FY&dGJ4fLQuNevK=o+! zS*<~rC%dxQmDy~7{tg_m6PU?fWJ(ywP~@nmfe5}IfIWjnuhlq@hL8w|Mt)Z6LL#8aA2@++MI*kiG~U4}5l{#F#Rte)o@20Zda|2thQ70%KC{h4sd-$`d_d3 z?m4YVs^sqb%{4%6eU?j}p0;%?N*E4pn~_z}EJPUp3{myS|2K+CKN>*wUL7gL>X9tD z7bvY2?8NmY(KWB7Zldd0NPvJkGQ0;j8GUy=ZD2D*!)b57Rv5e=mAc; zUmS==BZ-WfK4FY#?e@X@>zv1<16am~4xfR>aq34^P>B5K`)0rNk~)#tn@H>m`!XCo zKVhE-lHwI)!5{;mucQG12rseZpw#jGulw3hCptoQ@8iPO2f;Dkj-$kAG=cq#X*7V@c zojciWKrF=5u;pH@?3-@_^ew!q*~SGHtU8M-f1(?xS(U&RDN(JMgJm<2MR-Rku z!Fy|;`*2yrps|430R=QB0OU0vHvlM5`cyJ z?P02k@VXX)F!|?*ePX6na8cnTG<+O&!a0GPiaA0Y&lJQc%(rrD^##D5Kz$)vuPD}`@2Lya?`;QbAWA#&w=@XQ|RASCKP4q8F>I>XC}pH zBc2mRIEKW*+Mn~$HO1G2!VYyv8+H>$3C8Ay;aa5)gkXgHnh*?26s4c{HMfuh{z%)F z+4=8vdM<}0GJ&8e|NFKowVj{bxXdp!a6NOE9{)1?R%X%PSdq@^htw>Vp>0J6s=>5N zfNq&Z!PGtrGJk{I($nG|1UVQf9E2BPhN!}Lxsehe3YCPx@?g#9SLYkq^;O55RLL9w z2*m4AW+PsxackwMS}+bVCgTmU*fUZRVgNt25P}IAU}SuE>e`7?%wYuxbiJ2w=pPR~ z|NM5KSv`!=~EVgFGuE;rG*;xqBd*EWRth}Cb!$WEe=JSpT1Tk zZqZHMkmu@!sTJc@SD6PE7sW2q(H|>kmEaB=&J~*G9-LZuSE!XclY|((Xq0wLupo@ ze9BdEj!eo9pHF{O1oWMVR)XZLmV82MOS;Gkr^mX`*wnVn#dWP{6SXXH%52mXnmtLyY~nP`9w=F0}lEj+Ivf2D225b}-hGvsyU zftR~&Q)aZFQbY69Ao(*b+4`5e0q=50Fa3VkkIm*zMYAGTox#pm7LgpH%VE>t1>-Zo9;v$GEIGSO zP{lwn*cEk9F6xV8-g4sQ!zE(G4VOD&;TbtQtN_3x3dt>&dm3mj{Fv0hUh-d@k*!ZW zLDEk?d3~2usRDi^5#N>ME2=+MDwfYayZPqJUVq(|%UQqu7BugcUU9|y)vJet#0v%# zl{1sn1@UaaDI8nlm5vNna;K{kHb@c6-Khyg7v2#Y(5s8E@nR6HJ!pX2r|UmJ#gLTKeYQ0I*2 z?M+I)B^MR-@H~V2m$J3OdE3hNxo)wV)yz_S>KE&TPJ#B434mqq z$;XufBTw3qxM^VXjJ!(h5z52;3(0b^+%J>L{a&fIO(s?bX$gP}rTTnz|HK7yfk&p_ zwiIL6;Y zPk;AaCN1rXaSXyxmUxUQ;K4|eOjeW)AaPJzhK^*t*u*a-(ie4DiRnG z3>c|5`^e|!j@We+R`A8ycwr;#=GDpcDJhW2(u4Ug$;-=F~CgLxr%u9UBD*Fr8e4yK;t*cG=4Gb#CwaA48jR$33t5$Jh~ z&TxJabWd@+wec{FM_^j1J~@xZ|Bw14Ba7&QGNn^&$)hYnrd z2R}BtY4vRC7L_Wj(x{>(ts)>dC;|&B_6GsI^W4s zF!j8VuCnHsVIWP6R3moZ1buT)QYkR=MXuH$SR*5JUms)@>$Rs^W4;Ao(MX?Nn=qSD z3j^?UG1-6p24k6pX`f;;+CU988c1k*&=+FNfX~d)gxB~D=r754jWh}7`J<{D0Vp!#B4S5sNa>r!l(JV>QYjmA3J_r07MZ_{rKZl1f$HO zp01`zY;f>TP`jbBG@W@NdxHpy+)_>MrpNzFzd>n_g?H@$`93AvzkGSyG?68#5o$Zv zfH>}l@1<7I1I2HPhv+}CrmTcy-35F-kFe~cDshb_0cI&RGC3@ZUxpera%LQ~u@mu< zF-pW;iHSQt@Un5oD(hh}<#3{C}}d&jSW`G3%`3 zo5tZZDY+Q6Lg|Yb-p1P>eUvVcmGqGbvDlgM__vIp4U7tZ64VF9VQ~ljUJeLsa4Z;_ z$464SlAUi6+H=$tsFj;noYu$I2ugbvYF{=lJY^6xpN0-Dw(;{4w+qP^f`$k4O%$(* zEoXz>;vxSCAJay#Tflk7+Y zBjxHwxB@p4Zzhv~!ac>CjW?JL&kPY5^Eqgw!sqS|yuX#-u`f{}VPQB@|X zWy$2ic)b0)f4tlse>R;4OkxLJ{qj$+ZFN9M{cODiKjJcL=$bT?FQx&#?;3EL2Tt6! zctsfAVxV!NA+25CXw%BJFavtt(V;NxMc^{5M{*+ovJ;q_>R=WK2IB5iR0rM ztR{XnFOX5d{opzGkG~Wul-nC{==fzDHPrn|p$eM!b zw@niFSfgBDvB9kx&672{3R2^k%Yw}v2e_A|NLyH7HW|j=U|(SYnOFushcO|(#=l&! zLUOo;r0z)@V@S@@ z-l-EJCF%HWgDgnq)}H-T-Z-Tlio5)dA$x)B2Ic4F5eeuO-ytv1PodK*{^DRqk(71wfkWJT+JXl`)3_Ut&~a){buUZ`b}ul`SRN4?xzUv~ZRMDK z;kpD=eB*28)-Yrnq}bBLHrh4GgDbYa`DO?G(%qp@%Yh|9iCWwwv^ANg=;<+`9$22G@GRFv40*?$nD`6!@ z6kg!gH&zS+PH1bu+Kd!(YHc+j+=lOEZh!r~?zk3yU_Xjb6DhC^y-OXeZX-5Wo>lZ$ z%jxfy{DulwUy@XwSj?IIKo5!8FWAThLe}jUd!!}rhEt18KmY;ehIGZ6=lhxs+2rv* z;3mN~W(=Sky@#{pK#RJQ`Z0I*cl5vWXRIKGUCf{4zv*us4SERY!rKMi@A5oh6p_y(;H z2K9)$Th_2ZjN60D$50MKH?%mo6eEk&01=PQ_ZthxZY*xYOZ<<8goD(CC}}f}MQABe z^_%y4dR7(+@0ChhGVZlIvrSSdH??(1d)B)?44kyw@UlPH&RHcga5o%w5pKI{n%k>Q z#;X4w?p=YOwGm(yyFLv*t zA0Z|B5lZ8$#8h0hnj`Zk$#WWKmk!AK*s3VKZs~;(3rT!8ZS{Li5s)f&d7cs2U~tAE zrvBuXcsw${yxG@=6_+gvO~qYwR?G>f@IhE_q^E5tH3}I_b8Rp_H#~MY%#pqYRtMur zX1g*mBbHuaU&5|zFwNpt#PS=gI(Jkw$(VKKT;n%mpw8Sl280w1GfW+@@6psTiR%(( zBq9MuY<7!loW>7$eVAwKSNT=_VRa~?^V|9yR18VCw&wE}O{5eew+ARKcs7gR{Y>~k zjwRuEhAMQqv-2z%s=tm8+AWt~9B1d7248>ub!d#{=qClam$N&*qV}~bLh6Xb;dsyw zR68Mcg65j~C;5EI?IChr)b2LVN23cOk&bVnx{al*=UJV@fw~sDYF;RzG{#ki0B~DlN3Wy1&}m|vgCRPz zVKE}9FYU-P7EaosjZjZQS!7hKhaI^_p=)%WGukbX9^AxX%2xeroZ4MIh3I>FUQ0{j z!KgpJGc8t7c}lt?p=l9hc+FeW+F+YFCu$9p+ajkNI=4gw?84cnZ3V>i)qq&GR6qD6 zndJ8LY;O@8xUC!m;RZlr&m+L$MGCZX8l*FYSqXEyVzK*XZ1H*suGE=8*UUhqJ(A!u0-G3Kdb zPKRMRoS=o(#(WR=A@&UHql>7}>54X5^7a05Efs3miTdtur~okWOzj=$te97guQi@W z-ou;`=ATzPC$YMZKR|YNb$tb+mbX<5)Qm2nOd50o7p2C@5z(@=ed?@MM)3L6!>!ht zevXFMHks&y9gAjILY8TZ>G5{&1f4?`j7jarWKiam1>-APt#bqL#=s2H@3+os&jH7SNzLMJh6?jrFOd!3= z#23gy&`5aEi#9Ykr`I{G-~?#vX9g?@gKuNFfMBWdY%!_u&kJoeAO;#FG)#Dim@Ikt zE^5(4HEt<0)PTSZCy|!RD?HYc(yJ;0Sp5AAeKdLG!T&=txYexFk8fE_0oOM5EYP
7<(IdA|2@$_;QH^VuG_&i@*Vl*cC}~g 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/Uo+_?;#-q^j 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 z zhLVs|Yz%tcl8q>5yFE$G8^N^pc`y+_NKZL_<3apvSy$IbKo!3P8yw(TNPU#Ig2v!= z;4t6(r=QxF%#V!HD;OupncL6k=~>g=9b#UBwP}Oha_FQ2TVZwn>&rR$r7Y-YntD74 z2i!u>KECf3^tB&%b)6W7BB5|Cf=QV+D2(qTwagnI1gKk6`R)k4l5w1o%dO33!^|<* zu~jE-1Dl32J~9A-3))bH5#lU^WT+B{niE4nd$7c-M<0h+1t~Kj_&tsDx96C6hoNgs z1I)M(WR|}wl{HuvT|O4&H%4!tZD77=vZTU_W<@AT_-wa=73QI9ku(C=HPpTNeliaR zsoaz$>*JTJqDv+_xUi`jxAAE8>U&nX_%I&Ows7CP3!CJ%pkJY^uOHb)&dYyA-9CQ& zcGP6Nbyn(0xWN{%fI|iAp}eP=RS7M7)#zK$b7PGKFLclxyyc-cKZ#|=G+IinAi*QQE zl2;zQGC*xiB$mYEe&%cDgT#MEv2TIL{Is=mUPp~k=9cgrk+Ct8x2M&?^3)f{e$MxT;1899VaHa-FLrQcHY^4;~b=1%vBtwQJM3FBOsU+0-H zag<$LDKzJLd+k$l%T3Ty>)1M~qh8h2AcxVYUSJ-hkmNI`h;UXz5LKWfl_3rVe4ky8 zVz7(~i15JSrmG4@2tG^DK?E8wC`JQ>#m)baUl<|zCI2+K#MMZ&BaguiT+18<9``Tg zhWdxs!&ENLrpH={O)6=$pSyn?Xd%W{%<54e|JJ*1dzQ>S+D}GzcK!}hQEPI!)!A%- zc{`L$#Dn2%X!D|LY&;E2F1%w+H?5kxXTC+^5-Jj-7bcl+Ibu0KA<+xSOL-VB#w>sv zu0L@SpB!e!e3qoOt!Iqp>V?CnH7l)&gw3-!%Jt2xC%Y0nMTN=A6$&aK z6BAcht2jEduEJ)QI4lA_h#seN3%sB>(c{2*DzyqW;3!0Kmy5gr?- zHbhACg2NkU+C`ND%h*->9@(#y@=Y?I%p!epxr8Tlz$|dOy;0(@l9A!R3SG+O+XU|yF3hD=g?#}#q13xb|IzA|TNAX59|I_U zHS&KBf*Spe+mcCZ{ni7cxLVPe8#dSGLYLprC)V?Wt5(kaIjFMp!dx2}lTx^3eyN?A zMz!`b)4S`*`-}tVQt-zQS6=C7$b#1FU&!-~Q%BoCn$a?9dUNZvZXE>p>eh58^Q{sH z(i(l*tFfiDN<;P?=3&tM_~y0NjsVa++~A-N71I^GTZ{p4f;G-Kz={I)_ntXyO;Izr z%z(37AA&-_ir}U&f;{cGL#im>4o3$4G+ZnO2VdgYra~A>ml9AsW%v&k!71`93g=V< zEB9}3T|w?;`bT7KXY>N8j^Ehnr$AYDE1BI!jjJKw-Fk0W=a_q8)`@N|+kRBydl-MVIZt+MXyHItO}bEZ}4 zs;19_+PDff-^p{?(8m^Vni83BB=8mHVXGI5lENBd;*Q4`-`N}!;pn1IV;>W&HJila z@0LA6?5Y5idZ?gQV!MIK_o1jY8}qX}o25~1g-~uExsI7J=U@L~8I#DGbdi}If6MrQ zY(Tjw+0lB59&}W7i+sLc$jgj>CXqAW!*vhTdX|0E(UC|P21Zs$W&G|AE$NdO#c7d_ zNw{^cv&Q0V?BOe#TV364nt(di0d0t1pMSppb22i(1Ov$^#IyH-3;mq33p75ZSmk#p z^vw#XI*@qe;v`u!Yt}V0VXoiBW@Z5`cq+bZs*4ZOxwhexTgZUK*xB{lb4{;f-mYmJ zrIMFfIzE-aU!{)1kml4^?EnT$VkmnRFn?vW(5_4bz%WuSe(T|O0nChOJa@-c`A6Hp zZdxJNx`PgRn z8i6qtUL1r8f9_OhHN6pvC*;)TL}DTHO^$D9uHkC+g6euL48$^+FR z|2Z4h2g!ueZwjmqn0rU09-J1%7gE16*MzrRv>|}-l<(|yYg$?7f~0cfVifW~8}N^^ zz-OGn$|w}$4U9cFc&5wu-RV|ssFAp(uoH_(62>QBcp*+L9Aex93g@;jzWC}ZvIXfy z%<8YcGQ$*E5Y~qqHd>^dzh?{6|F{Bl1Em*ip*j>*9`c+ss2V3z#*1!l=^aTGvvAFY#FW$2A68}e1k<&@pOk&sfsoeSWTZmz^BaZGqY99WV)|q;Y^pb zN(2HGt&ycuDkW~2WBLN-cII1?L%?Tejl=jc>hbnlGIwTRd9T9d4FTbo_OIKxAxP#Q z|HuMkreW{Zzyak8*!8-Tz7A?c|l?E8UBY+#_Jkudls$yPvvRq`N@b|QnwjASsw5#hC zP~N{e2b-n+rjEneS95fL*%P^NXZdECcl=X}3+_f}U^k19diCd@ndivu$B%(5`ciTk zs5gpWKio;*Oa~#-EdeQh=*t)nwq_o{<7E?US)ax_GORz9?)v{cT4nql*amE;0XkJU zQs4?p`UljN8BTR?5;~uGv5rbkS~{T@Cx>?T=YK0LkL|y&3v3iB)FD-?Gd|cjuDC$O zgyfoc4;Sy4u1|@+_`;*QB{VU1mpwxI08p&@mghVkqd~&?AM@#<4*E zi?c@dNV~bi8dTM}F9=k&MU-JhIF-Nn)mK55lX~F=QyWKSF~E>JzRk>kDkD`Y;gIt9 z9J>$pE}dq^_FS}PQ6pcYo#o-vYPUlVjK?%jcu>2I4TV??VpC6|9 zu-HYJfIuxON_1g>>`bM|094i_iFf-5}w+fgiI}ClG0;>^p<#g1}4D)&$$PexZhTF~5#oFpA4uf-A zLR~k}rqo5^wvPRo8`>%H@w}r7mP1wt_DleC$C>*QJ1*HA1VIWqaPG$QBX=;jXSc4b z8S@?lKBguqF=+Uzn_-t3cf6^hSVPqF_s)BzMZP zaoAG$V12VN7e;;WV1d0XsgCfm2<9_-X) zsY=$XZiXr5u2HxHu+_-H^6!GxDIqS~y z_N;%_3olC){o5t5#n6VnR17UK_rqW$$O0lgU`b~b77Z;XF53TFKvLk10vf#!)bm+Ma6JDEG?R+x#V?pe|U z@jQ26Wxt+CeeRhx4aQ`gbuI&`Bia84n@A_NH!us^h%%iwbA=9NyAtw_J16d4ZslwA z!m9O$&uD6PWep9ACNFF<7i_XiPLdYau{~`WR&*IQ8TbgaXs}+TWBtc(+D$HC0ub^yGG*{d;p z5E?-ohmG*56U@!YZ5N;K;{s;fvg*9`5zt3kl_s40EfRZ;I%kRMh{En1HQZKZ8!-mr zjXqeJ{j_#4-mn9qI}V(xsnDo%QuJSnH@Hx28Vc*nA`l7|r*O0oRbhz&06k$ki@+0( zW&v=#P`$ymMoI#;0vg7DWiKLTe#+-z9L5^z^PF6x>hQz4t4fGqp7rq#z8UIH1gE3X}u4MIW$*Tp;DM? z-^=$=)fu>((GzD`UmeS`O z-%76N?R`6!+YDlA!lrPuK+!0nDkyQIUf^nIuyH*NO6u!&4)l?U&1wb6!3udO2P+Ur zgdFCpcFK@W!O)FxP)%A=1!pn_sJ8qQKXrF60Qa{CrLOPlmg#g|LGYWV7Le88JuR1d>Q{o} zBokKnn0`h_g(9{NVJPx**&9^dU^P7Ry!2xgf>^g-g&r|40~(S zk)wN~B9)Q{eBoV5up4BbkHvOJ-#iE$^qz8BRZgACw+<}>-yf1vF4Y<(=pyaB6xzlD zY2zl9i-^p8UUc|dZ;>b1nfN2ZrD>$N-0vxN`ma%2^sU}r@_865-rsDQy)q`Qlt!0L zC(l<-TM@y%w)NM{u3~p(s)h!TUX#xm$wL5l7^b#Ra*-wJ7E5XBuT9ZNEb>%59!!ME zbt%w%93aoK18RMEZdNa?Wi%~)9%m-05^43cu5(6UXm@Dk0vkw9399>soV(bUs;a6#15!>A0#UJcE-$kj1KdULFmk{p6Ql5alqv6Q0 z1F&sN!S8(N(JV1`&Pgq8UeQUNEu5q_6;3v58`e97Dy5)yA*}7HkLm2X`UWnA!mWvy zIwH(Eag?EyLSb=pNrA%~EpRyRf;mCi4^6%i$ptnxk~JK9>n+~PFH^6+TG=5`Sd3V` z7|e3si=8sHx)J9{qqlgASf+S zx_b+?ii6lbGyF5LbL%P(47iKz^H;74!W>czm{nioS;3lUAg&hoCShADR%$m4LbHJj zdgx*xk%GV0!ygGay%EYa{2q51C%tUk9$EOe67U1J5V$LH9;O+Q7HS6WAOQH_xo#Jy z00g3sAo~DZhMOdc#TbVnaUJmn3a(1=g?hfFlw( zX3uk9WH*~E2r z%C{4u05|N5-VypflMshoBfZ4kUx5EnFTPmO!dFxpg<8G1+AKQXCR3@BK7hh3uvPfh zfXH0wHC7V0Uu3TE>Z%4JDw_hfE0RP^?NE6Yc6NOe56}q^t!jkSvnIu>%5(_~bgIS3 ze&1#3*0?lXpSdbiaiv!oOF^S7(ZvpQD7YTkn`uC9)q1(iqEoloiG;Sd$Ye?pqgILj z)GYu-#2L^~99Ud$7-RcQM{a>iODf@Io_abD@a3-%h!YUdhJiwBip(=;G8^(PxwEIj zr0;fWs~Ta1x5Eq_HiNdJyKnw2D{5ihvTF98X$x;&2D|8>|Fh?~6J{I&hPFzVCLGp) z)GScQ7c8)~wi?BAx3(%^;uoT|!Y=1id?C}YcIL8aH?5s&metb6?)lep_AoYfjpjTV za5L*+DEm-}?S1cPv3rRgd)xCSZKc*zA-AasEz&xr$_kim)wk(A=E1pM7>9Mu z9_aDauG*duXzBRYLb?wi@0VxT*hRay}i5peUKczm-2V9b34a=?W5e+ z#=83O^$D^H;8ZKLqUnkXNF`L{Ow)rQ;%{c((bu-rYmf(|^u=b^!uacKg9>IL0Be#` zgikBlXUvkCD-t0ET}4Y>p+uFlzg-I}ca_QXKX$$9gE6nzcW+FDEzMew!dpjGT)cQu zb3g3j)B)Ot0-IxJlZ&vXqa=`>fikK*p?q-4sVNT^BQK&DSOlSe9PyE*Ut@WI<>*)> zv)DoT|2LNsgM}|eXMz7UG^xqW3XGt*$-9qRd9v}J|16KK9K_9q-8i;V^{Ypk-fSt3 ztw@9wPLYVerlSMrRzT7EYhUY-83Y!ag_~QEf|`Z8wpvi@wF>PX75l@eTty{S=TlOH zBrMjmGhnaI6HibVE*M(*u#Ey`dbN59@1Ayuol z!lwM`QN$H3M<9h5dHtb%aRB0fWky6s<^k8PoWh?{Ip(|SA=Yv6jVsz0q5t#^>z#~2 zFRop__olASqkERuA_>T~{)SUXMMfsW=)k)P_;n+VLkx}ZpDj{w0gNp_LJQ8qWT+1c zW|AHl(6reWuixG%0@7T=_I2~_v@Te;qd~0Gh#GcmSY#&`@}xcg=i$}l$L7?Q71J!V z(I7JQE?8Axzj9Fz5O9qW%k*ouG{KYDp^5pmku+)KNic#;b{O1~#BlEfF8b1>Yzxu*h+lGa9>RkSrJoyNoiRy(dU{2CT1Ul|xMcKHw9KNEZa z-MVw_%=_He-#3#60gYMb_SaF{d)Zrish`28c}lqH7&L-z3y1|qGxaMiuDze z@Lg}Lf@d(mGrU@Q1|5Lw9i?X|e-m`8JcEVL39?~DHFj14vGihzA0uC4dtT1x`7vdv zshty5YiS6~WNdZbT2WZyi})2p*`u@3zIwj|%z_8Y?fLphNL1_h+k~OGo&uh^6`uB# zrsdF{wN9l+ZdJHW2_m>OEmnU#h`N?gXed_^M8$dew1WM z0A9h_m7w^f6Rra1(2CLAwY*xa4Ud-E(j!p{Emjf2_O#K&@YGJLz*Jo!bhs5C_4WNW zC-qEA3*ghY_t+)mR=;z4Pes6(pHA)1_OP4uQf*6%P{#0pm97oAsXxIRH7|>7+_W}` zxTkl~vc*0aR8-alv~g`H04;T#pBl9R;}jQi>8F7$V#pIHxoj(Y%G9)F`7{e-1e@)dw=y1GJ}+k!87r8|p=BEzpi%6EdVTcv zRFqO?uJpo+ykxf}q9`)xaZUqj)bj0yQB}^Ac`h6Ikb`&91Xg)J2K&_#a(5(Y5tKvigk*bqG1Glcpt`({%wx=~i%y8Ie zRLzI3-{4j{W%i|;wx`9Opo_^ULovVXTcUXvUwOD0RjwND`TX4 z-bef3OQ3r!Y8n@*v35WWv9*MqHtsbXm%blWz8BQg-d)c*bb`}ZK>&;16Y$geAn1=41(k6J>`5yS+@qiQOVzOvo$T$ zsBa;DvWq?H=+VX& z<*doNgQs&yBh8)K_mXGdnI2lB66Mbvtm9d`x{kVs`nzEe!YI@yo7-v*7qn7sQ%WeM zd6~W{mCyBut~Uz*B5REu+ZR^R2A#+>ZFNI(<)9I}7M1h1wLy_)1F!uRo{1~}u~75C zJwXYeIrxprU4aSme@GQ!^VH-oUA|tWas#qSYSX8mvQtoCjru_kj3UE!DS4Gn-R>X~ zv8`EFLCduC@ZY$>%u~I+wr2mKJM(Bq`P2Kp?7sd?uNV{{`pzEozdj)A-Z~w*H@mMR zP5nSnp>vE@Lmlb(QRkpRoLd~1N+kpb2%OMVqNR&gvQKn91IsVwo7=Z9us|pkRZLr* zXk0M>D`$;N<=n09l#;jU{5Frspc95)y5LE>2chK*&HJpE2#xV2y|h)4n-|sz3h!L~ z5Ef-J3bo+ePmlL1wF(~K%u0`fqJ)ejd-R8Q{bTb_zxmwh26+t~J^tA1-&y%z8~}Q; z?{f#B<@UXF1IHSm47?+ksw!yp1}LVAnsA8uKvx4huV^Qr8U)Baw1_yMY+|QQSw8!$ zE+@5i#03ENL{b)-2=Y9>m=UN%av@(pC`wu*=kX|!PGVM|Xitpd9-%CS-|WT}&Bk6?ja32rcWa0PMvrKf z+9+4rO}ZWrkukn3Fa^cR3LP{2{#6Zx$IJdSL#B4zb!$u(J9g@uGPPj$Q=8kBYB|ND z;KC@OM5h(Y-?-<2k@uhMb_l2F0mdmS4{N7j4?i(Mx(8vc_(GV1K(H9scmVQ49rEa3 z?&;x0l!0WM6)4ocf%b*ca56{-rI6{#zeMq%?Ir8c8jRChf!9~v=o8BsYCX(Z!Tmj@ zX+E%fm0jVH)g8Wzmc&}>C7oP=Bd)Bskg_8fs`M$Llx3t4md6$jdf=aWU^bsikT8sK z3QMJwsGK6>2ZAYJMCHm26OKI9!CO6ihTPQGN2lydx9#gdpWS}_*2Rl`H$FNWdfcMf zj~)-gs+orhPxev!`xH7|dx)hcpDQ@Z7HkgP4096_$qJB z{^<{Y_-s}YS}{{>)C*^?j;RWdVdC^eJ}-#Kz4c8Nk&&rth`47!;^d_R5|7_2BRhHo zT6gE_e!5zbU*2k0^7NU^uHSvR^r-p;K&|$CuF~Ui@QWRPBF&^o29zTE*8pjj5Nhhf;;^1|L|Oszae=P zWxvUbGFiy5_{Jxe!io!e{zC`n>DezDyH}oCuBaBTx^qp|$SxKZ`rtEn2) zgsKu@*EFfWzK-!qy+NOx`Y4;_DIQ_}_4N}0NMJ?I8@~MMsr25jf9^<=#HMP${plYZ zRu{9xv#RF9*KcrPmbhf|_8jdAdFU=>I2Mq>`&B@ufx8y47penA1I#s26I>Ihibk(V zsUuS~Ie2>@h=NBAkv;6;bJ;8(f?zmVB{VSR`jBfn;|;nY2->|)=|%ESR%}Ks;lK1K z4Te1QoEV{}3%cmkmeQwDH|^WK8WKVoRJ@zQOgI_BaMu)5z<37xSr+7^LbX5(k+cAz8gV5HI{5 z)uJxHViIq}Blbz0K97w0TPDL-J<9(5os$8kLN9XN@Y>(+eCYUx&x8=`Nq+g?XIxHW zQ_|o!Hl^Yd-L+2I8}ZUzs&JgUYn9+ja1*oyn3F{jh@vmS5)otT7-*N%@!)=M@{i85 z<$PQBwbB+v>bectynolREd09b=+^#x9GNg!6ogeC3}Bp~h8^~+~eOKT+N{`o(tPOY71m02ZK)0Y3Hx@Z42Hn~kwy(N(3csn)*~k3HJ~Kz>m0(TV%||;nTv9l}E0lIts6m1$kP*H<=)10irLX zalA+@k0EOuwwLk4GFLcJg{4J(&@o6md=60^UF)oszDK^yb~{l9ntW3wk5o;a<)JGj z&Vf$t_j@%)@U;gX@0GL z{-6a|=H}c$?OTPP*r3DDFXk!GwS_lET=6Rrifl{-KfZN6iOxQkI|rBt;H8YVsb{*M{j76e_ipwdKr<5aC0q{zCg~Y+n&-AO#k3&* z2jGeU(li?wdim`ouw&1I=*cuRm^TH_BQF_Wkh6iG+pFc6Zo~b{Qhzmn<(R< zKgZ)Hb^SV%ac&z=DGtw+%O&De<-nqqG1?-JUbCRDFcXu2MEDf|h}-B?oKZfLvL zQ!5TheIVXRZAMq}p4&+?0;L~PUq((fIy#Q-Tjy5TCAHV=KCm=Lsfi39q`JjtyxkD zujYbRlT_knGDc2LRM}?@S#8$obN+9P4_)hk#2I~P6BC3ar&S$qielAjrl$8OD@8Vs6UNlUl+3N$H|3BPehPvP zgX}YRbahdFsl6_0=7CJODeSN96W6+|Lch4G*1~|E%=#LQDc#1X`8~6ox_Fq!YcTn3 za=Be1xBJ)?L*3H}3}A@hd>&V}9N4?g34ktbUASSZf(bQ6B=zcKb3I}@$o%;(XV%(M zI-cN)DEPjR`;7wmhEhFM-YGZUC`uiSv#6>2)110t+cMbBNH17luk2U0ubYM>=UJQD z)rDt~t$G%=wkBkbV0|UP(WXe9tyf&*bXY`wM6RTiEd$H;emVH)=T5gm!$sJ5^z_+W z#dY7i$BRH+_=yj0JOPUsxc5pO+PBfIbjfVXHg6L$(9CerSzYP6n!sh^_G=zw=f&(` z^omN6_s0=;7yNT zeD4p}e(Me=PUVF+6 zUOZvdNL(x5euxb=^bdHMfL_taAL~d;3|?CzVZeQm7$f0N7kFCSCV^WDVq`9R{!}It zlsbd)N5lM0MX*{EA`rX*d8rXyJ;!v>kvY1$&e~|_tVN0#6Up!@ZGnhm`FoJ z(xgcORzYqrWQgTgt-m4r3rk=~($Jg`tN5M$R((@F<(Erz()4vpI~5j-K)?fbiJkwA>9XifhHmZ1%A`!IStU z4u8D~CXGcE(K>rS?eN+}esPW6#(Y8!vwN(4l|kB@OaP_0T1J7il0;~3jMITsvtN{K zH_OR;J-{G8I^rr1?iqEJJV~^ZA5{zGc>tWu01uTc$|O-kw{doOZ5_0Ya^P?&7&K_6(}Ad#9Uw^CEUf z=QFIE^qX2X&920}-_XA-nONF`Z6?|TtD)i3*#7hOm~~+;C5hDa+3XKMkKt+PI9x|Au+!KjWEy+n zWI9cOnpq%b2F%VBuCw*iPN*&ebdA#{f!6JBL1Ah?b)azLu`IQG#4YW|3ew5Br8ol& zA8CW8p(TzfEaDumm7WxZUT``9xs#kVp)VAwY&so6a&6OkUW84-4~I< zPUP69Q%U4CdR>>3NNHyqFbuf{6`%c|J|Hy&2b-Zo)!5_JidfmiwKU^Fgp#)V98&6^ z*;mtPIVhfeaci4g4b3S)xRg9tE+J{!@Z_G4=e+Rw&mE7;tLX5-yUsr;Erri<<#dvX zG=?Q9^wC(RU_M`LwBu*ffyhSyT2;ksU$!mGdEiEsHSGZWxy;5I@KywQ)x)qub6|kD z`&DkYx=rn@ExgyMby`FjQKkLEX8XboNP+;;(6;sS&syiN-;SgqVZ-(fi)`fPEIFQe z17gZojJ8}yh2EUW5o1+XyQvc9PQPJl+_-$GlF{qM#-4dAqS0&S=W&jXshqZab0d6I z>wg}HrSf@TURS^p2K5g=^$zxOvJ$1A}D+=~C zY4-K$Qn@-&g_)_#Ci#D6|M3^OJYw1X=n}>v>)NxbS5vSfZU?EIpg{_yOBF1RHb?8Q zbcuNAI>w1G&z`CG><0?EQ4%`w#9ZWl0L-)>Xb827;o z?`>C(06vGV-{?}hkxQ{PCwBRrbXpmR_+;?%m}lU;o(d*joZ}E&h>Bpt#Yq)R5n$Z_ z7&SOZXt9@SPENoIPl39^%{-Ea7EBk6Oo<)Mj6`&Ek3QoACJOCqCysU#)V*o3GgzIo z?s{RrutIw6Q=1D?$jTqQ6JBRrDl$ZS0#0#&vAG>^b=fJ^Hek;xJW7NywkoIJRgZ(4 z;hW1i0qXzOvvpU=<= zff+<&fvYWbDtIbeH7u0W3v70IVHHlzo`MoBAhr1;W>~BzstDKB_KIuW2v0KUSQj_2EG80euYBO>4yU|Hv~c3TqFcB1+Cjg0U_z~Y;~O7 z&>VT~RSwyJGXy_a2Bk{vG(0m%&BtFTKn9Ubi+VZb%QHbre+-R90a9-ZGvq5-saDhM zrzGN<2u%zBn9q|;rtmW9VqZDl(h`(dy}=3r3~bc7YFYu6vWZ=^6>?MRi`hL{*dFmJ zdv7K3NEL1Xri5bZl`oqLDe6b1Y)ajHX#Ykx08;j)P~l1w?FngK*Vfgj;-cQOrOt+Y ziV^$-3dS^|*kC)l`4O*RxGECmNEqO4k5RG0yCm3?dVM<(@Wfl5YYDq& z@JguN_DU&`Yau7Xg@0{OEO10I{2tsm7T#VUR+YU!@bx&UhH|l6{(E`QfqbjKpWVyl z*|SrgYj4egHZYyNWyd>JL(A4BFvrf{vdjBYhfJ^Lr};|VS37aUFDo=yUg|K%>m=P0 zU##$CTG#IGa&+>tg=6HWS-WBAuIoIE5%{>9j%VVl7xWl0|90&@JIJbJmUNp@UD1)L zRzkEhYKAHi*<7cw1b`j;+u#q+Nn_C(HcC3UhYw)(qc? z9d~1^ZQxd++SS=0^Y7 z19eo_f(3WYpWn*fyuRyYb_&^L>e{=s8rfQqI>(yUaI7^+)%@+9+_T{U7Td7;l4L?` z;<~GBENDda@Kc^E9)tW_=dRoY$Uhw7`fFyqW|^^aV-jJjp40p5Sj{%HW}cxK?%0R zeT>8FlKq1`#4fb;s{$#z7*JL_jAdLalf|`>igty?M6;jus*~H6A_W&_#FRO8_r^i& z4ou&g)dJ$mu|Ur%p}!A!tAk^KLaQp^hMr?ES||H7SCGwmN*k9 zTc*x()t+iUaq`AS#PjN}JGj3=v-YJMZD?@5JKx;}H{S_nHu@=ROZi^I=-G^NQAU83 z5f{hx-0`HqYbOyqy%n-Gz)mqR11x|QMxWT`ssUICu~VYY8+s$~_L6vZ9o1EMWgRxO zZp-J#pa5gTF`o|92brX*z9Awf-O>$jcEUDBUdv1DO<8g%8!J@9*R6)`y}#;=qp#cV9R`{+&WluX!q!~TsRsRyH}K>Yya z%6oy_5yJeoQUoPgG-w-Q5Js<~?QSSis@cV$kh_bzF#NxUDn5|TD4s+jjoGDYK~0Ao zb`lEsVp?nn`lz>BlqQWrAh*keN^J#ePLm5GMsslQdKXN3*_LeD)=k$zJGe_7ON8X` z_08Z3kvV1MfRo~u_URuN658+yFrR3p$V69!e6>U3YNx$QRL|Hv zE(wn=v{hOp741y`f2F6{jj1H{TH*i5*V)&)$#d*(Qdvyuo>Vp+-oMeKazXIkvW=lV z(Wskg(Y1D_R3(E!-PWQeKt<`rn}J!%#cwp}BBlvYwXKB@>)W}%PhQrLhfuH2OZ64L zDC4&CKAj^1p;*k%@)=m*^;f7{Ww1W5N34*63Y-$RnO^auL;A{okY-=c@IpP0UO0by zL*wc5Pn{15vJaj=cS|C9^1(+R3}5xrqMFw;Bgv}@3c0$H4C~A(ON(#HCGe#Xjxxw_ z7cjhY+e6E3YP>p_x4NLJ(MRG~_Kf@BHn8iYup(zzp-10Q0m3m2iqkPohe zv(7FGh^>xV39qVaIQ#RkG1aJVG^Sdw}@<+ zD(Du;ppep4hc~bH+PxdLQP(M_-gzJ*0_{fs&f`5DH|_L*Vh0mAa%bk5|026LgJG3D zt`S-x#cA~(kTM;Ceb8)*X$Yt}8b%JKB<)*FBOQ}_*N->}16*C|$}v@mfB=YzzNk@r z+_LiY5+L9Um!DZvOL{@zw`%7jOHitG&b?cV!#}#};qWBsSGr-j(C^#sxaU*~nv?v- zBe&j|GH(9LZ7$HFp#$f>zo&(#Jo~}9Agzb3DyP1C=-R8E2uiHu{DPBnDcH;N!I_|# z?TCidWSFS~ED3i4aKHgvzH-Tcl@K_d(wdO5YS*o7WKT2@T z{ab7kb8W_gg9O;{fb*?g9~6f+uB>JM*xAWb-ud%0bs#ToKmN{sqM>g7>wC{+g|Kjb z#>d2SWbI4G9hlAf?s{h@92yR@mGw#S(6C892p(w#3?*M7haDX@z6^?Wat>V|)pPr} z%Y__ga&W$7vEUFA1GrcPJkLax$UvK8A=flGKu?M1Nosm^jcG*S7_&as0laWehf=N-OVo0y;Ma{hZ;hx`XmM}IDV#2KO69D1sO#biYQdLsBgd#} zx_;Mc2dtlfater{p=5auf*e=%-M%k`ODO7g99@u31FPWKPwtwo(Q&K-rB?;*G$A7& zJoC}x>>FCgtf|$;nxR?0RVJ_BR;Tn|dp-MsP%mwgn)WB%TC|MJWcsrbGOVNiF z6M$moIO4~y;IMAR9Ss$@m4O_{<^GkG+S83VM;ULeVb}yB@24(9-XW$rL|*750`e}; zu>YGS`-k7+HL_2&-*8}i2*v9CYq#%A0!zMxw~T?|y-a;eT+*mXwI?uUVGdlz=@eic zNp9I^Kc^i6o&;M4BRXN23r8C#BUQl1zrt&N?Tt5TGMS;&!_(>BGc6>NlW2qn&~cK< zU~J!^K|Nv?7$LLs*7nji&=>L0 z)%F^On$kt~4!6%s!Cw?3ZAKf4D=^_fAJtndlm{>!naG47MPJNtNs{O*U} zlq&@r?pod;Q{mLwO3irU<{z(q_sjP+z)rpBZBM_pcp@-rteXT+R|R93#W5d5 zW~>lJ`=J_{31S?ZiZ>I#6Q`D4yq05xZGZ`N`5|E^A3`j`)Lg1ME_of-F(Yq~1MI#b zB4j`N_K-Z>2AU9hv8^?%RDF;&&1^u7C)P*0dI?V~QA%VMI6ZrDOiHQ{N#qj#zk3B0 zu~{8_rAFM+SEpq~S8ceF7rV(b-Q67r*4eT9?Ad&%D_Ak@Y(3;9!q7?F#C+kDSie)MdCC_ej_j3blO|yZ zfN=QINcJ`^sjI`W1*G7P9RYC80uF#({|pLujSEg&&caE_+P}4bqudjt(g^hJ`zJw6BWxMg2^(DjE;TySpxQ zQ{MFOUwAVMAd1Z}Fz!$Z;|^jBQOGzdLNi6~2C@iJ94HG<4BaQu7$k~|^<3)-z5V27 zPDydegKGiN&{fF*PH}o8Mlspc7Q5l*PD&|iJG4EQ&ld)-+CL?qWJqr%!~3M^)>9{1 zfR4pa?mu#%fh=y+JF6u!heTFwXFp%~5%uPOaqY(ju(Exk!)}Id@)c}!tkXtYg)uj- zK*MUb_$v_Ux>~t?Clx4s&qOUOJaiWKkGgSVM50$}2FM~Wuc|T;yI5AwS7)O>(hlyH?<)BUYfFG9(eG!ge-pI{(Gk50bz;-hC2PsHg5U0B#6qG#=C2r= zt4P*)r*uhGrOr^8%el~Ik*ZaKBSfXYPn3%k36In#pyGCp3Q3?VUSHkWpiZii9c_`? zY?~&gY00uf$UuT2G6FOjoYOTimGPi+KwRT;R*C!)7tkGf-NS2%d}d}AwZyLpMf4GU zH2R5O6OLh89Q{VA5j2igBcMHDz>+e$*6t>3`C}=JEq?{fc@$Si^c5$!aq}MDMn0Hj zQOId*-o?4p^62^%?&^)bB1`9vh2m<(+)d3U{!b}7!yfAXYfhr&(k{6|K%rCQsbO^8 z0=tJD9%bS5)r;Wl+8=-G<+Djy4IMl2^u>1vzp{TnpPg@z8PnZDU|99fu2ly-RL@9U znY=-4EPc=-RRAY^lAsNV@F5njTzut?#1FJu$Yw^D5>E7Wi>{fsEYbYXGeaON+O%)y zs*URQ#=rTsVMDg5}4d8WE$MK6wJ_byFVhzieO@O~I)C*X4@xUuYb$Tdss z@Bt+a!x6&^HdQ!a$lW0osg0HF4a=WCULV8jsHbLxHJ z3yY^C5>E&Q27z{81MH6nG@09O+~NV6u4C2iLv1sjJQ<>G^7y%z=fkKM{tF!K9)^lN zGTVanTZLjrFzBS)wT-Pw?Ed4%j(f+1)F@zKbFW;cWAhtb5hv$aq~pU!M};Jv)>0mt zgsTCk(88~;2XP0`mW^TK;EK#7YI~-veqEQ5f;wRjEdE>DHEicAZK)t_7W*1&RXj>r z+u-BL6+(XlXc|5EVeX+Z)XFi%)7aeTslxec)WI)8gi>mDcj0#GajT+jX!cNz#4fAs zpWbUS^-S-tf^BpnAodTnDy;8*`~>9g#xX@#@!Mne-V3U6SBY5T=GD1A)3{SZ!T|Qh zFRjvwjMXTPVc!77WEdFg5wp-JHgGU`Ei_qt;woD;{XSMBH5u9%asgx`cGT%aFQD@5 z#~_2R>yGf`B2Nl!h{E!q# zshb>7j0c%cbrJ>`NOL;P{SIlT$}C)pK8b{6??1qCy(J?U`5RG)uRB_Y1d%X<$$J51)UNbSvgRelh_n zv7*e67nC!d)}seEx!~H_mu=nE$kZj0b&_U%SFTk9FJA+x`2UQ#RetERccIIiJQW|! z?F8eKK5V;b;9jAxr6^Ynve3_85onVCcD^u1?0#407f`S^*OQg02j zyzK5je*2Mx$Y5e-0$-*5ix4+a9q4VIkpoP1rT%egArRNFD?y(v08ACXJxr8g&%4z3 zZsDyTK1EIp447MkNABvu+AO(c?VJZ-l6WgOGzR_m#dh{@l&0`!_<4YOwlF~IyD7!+ zvt(6e>$Z7Sv{5HkC(~2wJpJ8CH4;Sit^IQXB)V$V!`EEX&Tip~^QT7|C=zI(xVa(L z7TD4-f^(ybNA_FErSTGiku`RchjsEGj_}IK%WV25x!l(jvQXuUn;xEv!zR=3KCsZh zek=BihiDj_dF=fZJNHr}Ee-{aEy6Ek&ZZ%qTV~^_H$T09wuz}QinRk3exZ)e>PQ{Ie<<1xyW)_O?QojhT4Iz?I(if2bv?Z;LF>O_h02l*` zR417GygcBIKoh%h8i4KTd6#TvPdo@y{h>J-7=dr=^QbPQ1$?PMB?O`qPY8xXm@27& zPiw>`DP1iFOhG~yQj;V*E@&6|m|CYzO6c^@StZZZ`Npi1TW4CNHMFUB#evXIEPMe7 zO-N`-okgtRTbiUs23x62jc5Nvc~5}$MtyXXGEyJJwrLG`urjaSShC+n$b2}%D7TzP zfWuK*;6(1LnDLPPs2@uXWV3(G%3S#t+|=99St~i3_N>{OgeBY2RdeB=Ukynl&t=Fr zhIjGw>`&W|9NrN{S*XDJoja4{)_^(cRZ41Tl{fhC$SaNsi({{KDf$;*Q32e)(J9|4 zE6@ewy@WYWGzZAsK^%cg_O65-{*3&dt%!vptCkF!>MI5ouRKeM+4daSo(bN$lCF_; zt{*A{t_qoW(v;J0pD}laBj%Vje-?q#`S;Xsjd!shu7H`%)<<4xndsHVMtpcRWG#Ph zj0?uqZ*8zc>q;)TRFITD;6%->80x=VS+?Teji#7S)-3f#Vc-nX*k9*VjoX$Wi+BFI zdgWAA$L1Mg7+;^gwOc(>c9kb$N)v>r3RG0EAbr)wriKceG1dHT7QDnC2OoRnOdGA$ z2~x+-oXv%Hefuml5si}IqrW~MZO&wig*3MH$Lnq3r^Z{44sJYJ zb{;ihrjz6Bb^&=Z&z`g7LARm~^rFSyu#tu?z=X5RW84-`kY!J2Ae*_F1iSxV?Akrs zLMV#kU$tRP@LyMTR=5i7i4v1v20UdqVE4GH3M1)~;yYoNcBHok3Fr8&vLXyIV>)i= zu1C0E+^dcWJ$q5m?bE(@f4_xn_{BE|wx`Vlv;6{%UfjN$Y#K1kT;Cv4D}_y)=a{tb z4(K9bL%TlYf3L+ol+kr+y9Nv2=gk^^oE(NJ=jPgZYc?l==9<{BYSwGjvsP_P;BJk? zrnU2G$?dJ|%fJ;7wu$a(n(l8B1x<{Cgo;*luv-=%x53qoh|%Bl;;)m|gviPG$uEZJmo%p9~-*9^@*GyFRBfvWph7<2~({=JroXc~RAKjudU zPD5A*Z-<2Qati>(`5 zsD8WsvDX$-bH4OQ7a2-9@-3=%RVvGVg}l?lej{hY3B)nU;3R+mxlNrqvL~o^%v-jY z{Q)JG2)aPtng6F6@3O@Xw{yu#_I=n7*v~$_Hw`b2djh^*s-25$d$h(T#5XyPBfLVH zU?G4+P$c9FMH~wiZta-c%Js>bJ@UH?N66{MhV3h?shZ_G3K!F#|N8e= z@sF|}{bLca3>h06E7~d&5%#yd?Zd~(?Vxwp;y-dGiz7(c(+6Jm9ykj-Z&ae5yN(9P z`)k&ueoemYGWYaZgSM%Ct%Tz7saC#7K>ei>0H+F*sXJ46rQ>t#YEn@ZgH}1m?ra$h z1g17)Zpr8~3+hX^Z>%9B_bAH2UvR-3z^E$kd!9UZgaV*6a{%>Dl05+X2jaxiRoxVl z<|Y2dg6FD!m&E%l3!EefSD zbb>SAXG+3!NRfAsBZG`%sdCMk@vBmb%^3k|lcCGuzUsu`hN^_Ms3*xwY{pOCV?*R6 z98Xut_85kM+rod-ZOic#pe(Cu_AJ9IRQ{-xf?sl9pHLcC@Nnhn3X{xEOPsC zFzO0b-k9SufbqlV6ntwq8~E$E(J9bsD+RCERr4iMOX}EL5LKE*Eh;>C2-9o=+Qy*W zrms+f=Ao|7M@gBwKBZDEmg>|r`*vPtwaP)_%{u17k4Y29=2FD^zys~E=59F9xo7%`;B#6s;u?oV=n_@dREeqmX;#!ueS7#b>g|Gu zcM|qh{PC5v)Ff*A!Y_#+3|I514{z^NsFl#jlsjRO8iCQC+^rv+C#7b-ym3Fse*ky2 zcHzb?bxfo=Dv7I`T4BZzRkfbwJzP4XVjrvv$S-qXf7AHOG%jnwL%`WXVfl=lE;u-# z07KWDSG+%*%fV(@eY74mBmsv6`ScUe@`njY$ZGf~{s39cRI%M{6NPAtty)6#z;L;q zEYA`kL8(ys&@=@56(r%QYLi@|U_?Cjksful)s6#Q_U3@#?|*;c1y4uEn9S$k^{6ml zrmc(CZxvwXBWb`XXXO_-I?Hqaymv-PBm+c4fzG0o4c+_c(~qd~w_X>--6+1ThuQyS zpKJY23%d~x2cn9q&Ok8pVqR}Hj%#lCAlsp{f#D1B4O0H)Q zlC^0{L`xY4_JhYNVYuDoW3;r02J$QWR9@GRfrVf?+SMMDe)ie(&->GrVcOr+6qZ(+ zr98P)A*iT_QTetu7?p3WV7DR~d}R>p1@P4h;hqcYQ&J_&Z4#K|LwrC^$5%db?E{9+ zBfCQ)rBYD0eg81~Kket+S({a>O~%D4UPsQNjfJST5idT*v0YOCVoS0tI8YWu@I!bT zt(V~3CJ)pA0^lDuvXoj`xa$D!0OMcKyw4;yWMgaSKpSPyfqMs$dO3LSVL$uxT<%WZw&9z3yp6-Ry+oZXZ2ETki#hf+kbP()DMRb(0RwF? z2sK^vW6{|iY82Ww^sR28u3>8i+W-UnX*>A|`!QkIm*Am`Bk33~|I3HQON$r0{NT`C z;CAPdck+2vL*3zf2Zf-vIC#&2Gv0&u4T8@XPQC9)oimqX@8&s&f8xWbZ5|4Y-<2Vc z<_lj3o=b)_8CzEO>(QrcI_JeAv)kaQA#>|nm7=z>KYzPrWh?vdR`MRK$^B-@DZNoj zUeP+Lrl2fVn5(DptHaYxZW|@cAD7FGt_0-`0-k;YxtCqeE+oC|b60GLoTnNKU;Q+f zdpjfd`eA(+<8ewTB`YCK8M165;~pEeKTUrC_B8j7mi^bok!BWJx3L~_HzdRrX}$6( zYHnmNIc}H&UI{6e5Q30P##LI_%q!+@!168qb9o6VNC-wU@+(B7AK>yVa-T$2FRfCv z!J_9sWir3WFaS!!TZ!EvgV@PM>RrI~t(dd*#vG{Hb?#d~q-Q^{?fl$Qq`WSFc()6z z4m2r1tb-rrrb6*vg}l~5u@fXId@%M`E1@3i>f*_w8=Z37D*sb#2eEwEcxsF_1FVOCQ)fuUcV~7^iKyWqQ@(hp)9FgyK5#+`7*uyoO?w*z8mVL5LkJ8Ed)X z1h|B&<3`C`5XYhY$#sGOMjh?#aA#DO*C-m>;|PXHyugEr4>eo z$AF^0z!(jQTrnWhM;i=eS~9e4do&Q;zPTX2Y7WfHK5O{up+i>ITCFj5bzl>?ccx8S zA0)@(m5mWiL>q7VpAoZ~JoBxD_kX)|E6SNKvcu<1x%QG^%^@sh6d3KpFvdZ}{U`}VAJpm;EdGA?qWL_rSLH&JZpJO)|6)QfCN!(_qqTLbaQ*^TQ+^-FS^hVUs%7?1(pQ zUuKormCh9#*gK%P_-}3}Bj_}MSf7Zz)^$6(0SYb`;JMF@%Mk0Js?I{WHD<)`@-a3< zve0W`YCWcHt;YuJ2qU`a;y82V+SSdty=;Fv&8uUqzF-ARxe1K{Pfd>IS`MJnXlI^A z&YPb6nq2{HnT$fO%f~6H*xkuU#lMPKS`(_IGTu_%DXnRV(pG7xp^AaI<&g|gkvfDr zI29lnwg_Z5rHPIPX-wM!d=sL`9PTb$fOUBnVb&i8mp!n!84f~1?y0ISD6TNwe2lv^1)c`XW7H0s&MIV`TfHO^sic2!)j zTMx(}4gnUq&VEj1q@tKYdu&1*%Tl5F5Y4hB+W=W2tITHtyNE(g8QkI&bv`7~_G_{RT~A zTUuSH=Vv3asw}jS?$G3JhUIEOC4A8&zP@pxfVEvGDB;0%sq_ZWrBe=x8DVmuQs<+ z`g8Io+Y-d4=O1&q!zok5&9uV?5cZedx=uUp3U)M&@C}q8!8S6i=%9TOA3&v%cu3aT zeLhX?fW{<_A0QneY`IU0;X#_7YAIQVwE5&ia2VV|3 z)}=Ns_sr&PphX061m|KiUtxF2TUj4MV1U(3VNUu^J2%LL+ zH4i8pD_=R~9R9~7=?soj_`w0&B-D>OpVxI=zuqH)?q~9RCbn+HG&AC`)$`VEj4sjK%hO{!QDrf2as zmBoOSAPqYzaa~eE9xb@aXNG2S}PKyeh;9rPPv%#w~&{ZV{6tI2EX4?Nq@7QN{{qaT81uBY6Nt&x)<3 z(oTc%SxK4hmMFKDz-TxkHdkDH=ajf zY5Wu9S-;TRTbrt#zjk9BrNOeN4!q<$aAyw1&9Y~22(bT`C+qq^5v;P461PupIfCkC zX8(+y6enA3=wDJFTY}gkXb;ZXkfK(w>&R)=2Zo2M49hCiMQ{RF8F~Q#;@}B%))=es z*s;Pd8`>W_T_2!wDsIC<)k#G@)r~O(2?wsuo`EXxd^rGARUHYVegM zM#>Xvn7K_%l!N75f;Mj1-_7_D{D(P#IdK-Z8Nsk54PDpXvjAm;9OmYP#;#7Zcx~pE zq}r}ZHfMcXVz%I_2)QM%bI<`0VuXdNJSm{sdcRlX2!|cQa6i{lQd(8X-c++R+7MjgC7-a5 zRLGT~5D?^=I!x-I=aIp-A@I#b+3m7AFwWTqp^|E!vS!N8;!%}9>Zq3)?SYjWXO|z> zM1&oPX56189Ry(P@Dk|ju_sfUH?0P{TeqXP*N#Gc9HI_epXsv2% z)LJ3`a#^a{Q<@r0V|&)IG~jp7@ln~FNF*2O#Udr2FNOs=gmJ+vlt7@CNUG&xK#G($ znUuNM%TH`w%!jem`D+5Cwv&9;#r~7ElWC^bt@EmI2HH4vWkbXA-s0k@*_+$Q=_p89 zNE<+5_pUH#7fX^dGt6q%EQIU#~3E)yqbnYCYGvePlx$`n+ z0;rp{OrxM&C37A(!^#~s05gU2GkMnGUy_4dSMu;3d4UFn5%+WJ#}M&AyRG2XYScq+ zTp5DB_F}S5p=fZ;@^n_jq8fH_Gf?{1#%Qy&>(=WQcoVxex_tJHyU2AKWyG~)O}(f> z>|Z?1MED)l!seS>e!#9Jjg^h7rhzD-L8Q;l4@Ks5Yv8*u#(`@Z$hxPhD#aq6!dhHP zEqaHitzTs~>65LNN>`>Wssg@&rhRCqpRu~sVU5Rjhrn%V45}q&vBDeHmjY#Z>bDG+ z;nZ)5bAwAyi@EhgnF9xl6w{072&M!+t=Q@gqe2q-3eQKcHTn?Ijr|0fNp=!faTvTojNtmen%qupW< z&j7`hXd);l2335^Y8MJzL)~>t_QuT)kT(*0cO1*Hhd`WkAA10zA`;}wV@c&9o(Q6Z z<7zK_IgaXx`4yLtat^#iyx{UK{5K*nx&G3PP%HW+Fi2?vsd}k@+)N>D9*(IY}apQF+&uzT8hYs0{AR{ zp(SK){&a!-VdR_e8{>%NuF7vL1i{bIn-UK(EHvKhWo6sZn-UIpg)vxdQc+uadY(ij zO^Q57Pj^uhdf~SNef1vt8JHR2Thde&tnk_~ zgD3V}xzZ(ow7hSzOX@OYJ4@C55C|9=a8UOoj6*oOD}C40%QP~2|%aM6d) zMjodpJvy#QGiE?Cu7_OuU#M={NG^9>p1OKu1*|jH&Q(Hnwf4+W)MtFO7^=1(hm&dlxwX0;dW3)f!;#q7t1XJ@Pk}H($!;soC_s`S&0$Ari1U zsyCdc_sHyyi}LK?j%6^AWA5Q|KyuU%dV4=ai9`1=QSr^~E$B|w)TZZ=Jzdf3ZYi*& z+}w3n(f@JpX{31hP%8GBkcX>|@N0#1I- zpaJv)lJs{DVOIg-V$gtHg@D&S#Irg<{F!I0H}StiKBYBHn5%=Y$X_fr@Gp^|FB{5! z9?oVd$*h}J*#PEj8s6QVZ#E@kng(^Uvt`!ZS2?&Ut-yQT6N_r_-}vqw=nVr7Tx-^8 z1+5)HL0r+E0>N=-Zf72HPz;@An>X$R2~@at$UsNcaG0x%)Q}Z~}zLq78y;6gtQ7x9R zgfd~mmWf6%SLXp)`+768OjNB@s_H2Il z(W?vH{X#XnIMFug#&7*zS?dCf34{%Tw$899j^=)-Hh=(yvT+<9oAL$ISe+E(<-+vN zD(T84qD382r)xiLbXc;0ja8OQLT0WkA6XFG=piy!sb%Oebn5} z&Ko4p8xU<^13;e_Pc?+|NJNYLmRdN( z-BG>+&bjQ!x2U?($m1`(@Sr$Y@N!`(tWm#RNIwo5c8%Si=5SO7*7q=kLd~oz zi#&rcvvG>DWV&eA%E9sStS(THD^iQoD;t&$ThPzT&@(hxPj1PL{F=pJ ze?zQup^hMgy)r>Vd-N&Gav+LTL;2e#u8k zl4`%IMQk+Co7?n$ew5!t{W|v$sDrLEWOvR7wJ$B#Fnx76zH*8VWx&kycVr0f{r6M! z6aT07Ofo4{;b@)0He^;=CNs^T@pAE);93EV02+???lO7+_?DGlOq=TBcNlpMQI^g^ zfjmL>I+2%rA?PcIZe&w<+502cT% zlXs{A%3nsU#Nd!uAWY+0re$&@gGNW(R`o#`so+ZX!DM9~a*S#&y+>~8RU374^I(h? znJtxw=(C-jmQO!@-~oCXnMywlhyfqS;Uk1yf@+n{UJze&13#P*)m9f=C94}eDA_U} zOdJ{est`a2U!nJ;OV<>L5DLV*)QcJS2 zK{f(Pjz%{upKB-l+;7u+e`l)a^T1TZ1sMj1cUtExc7brMl3hPb=r(kA>V5ijhT4>S zk-qZ(&hcCG^rk~VS*ZA}!CK%o`Fbt8lrrM-Hdqm85vOsR!b^!S+@_W1W>>$iHcprb zj`5p(oBR(gPGTA~k-Sg)UKtoz9kv%!ikKo%D1CPMD|2^u>Ej|f)J+CT$5?*9Iug~l z>Ei9R8QMj!&hn73+9t+ArwbT?Q(>aI>QY58ynW|2Dp`y^I`c*{p#(xO4(6-9A+($= zhhRk*!KXmDK&8+Cl*>9)mvv6Xa+&J|#~rJHG<3^N-1@^Cx>H>W9} zT%2Sp9p<>nt|Z&jx&{-c$ToWD9|Th=$v8xvtj3MQ-O+ZDjcUW7)6gL~?l)u+LnxpDU$5N!IuE+5+{x zd2vSMoz~4U3Nr&v0j(q!`r}JuU;m^j{h?0iRL0dFIklmy#9_rt-#665fL;t8Cqksu zai69c3^Zg-fwT0-?Ypj8?-N@1?j;-6xBkzC@UIQbbcGS2$Mgp?wKBvL(@T^VME6DP zn3pRUgppOdXXkCPGHIL*%|~3XF**8}NK#ddh6{p=FY>*?!8^b6oljZIM^2I7^#My9 z2lOCNM2Q-)1K!AS085sI3(h2a^2{fTHSaa2pyLjm%i9hFKJD$j7o15>(^{4?LqA@m=Fu-|CGr4tz*!0CfcqO$T$Nsw z6X`X4vbSCBu}L8JkvKfG-Q=G+kOGXJmJ8h7friMU0S0(&oUuMhO`{KSfF$ru4ul$% zJ}qbD{0U;%Ugzk~W0)xunlRYFtGu<~`at2ION`{ma%xHGOc(hPy&-!%7CRD)-H;bb zr5+0bcX*|REgbonWayVKsdYwxVe?dasj3 z1kMoB@zpWSAs1Zt9hasT;6qotTqwr?=^az8g~z}<%A&|sVUiHjqk~MK1$tXBh66~a zztJ|4Yjv494P2~6e?WdtJL@S&fnJ)uJ0S~4_-0WkAU&Go$yiFAn$71DaAe_H&2@T< zuFh%~)j~^IRzLzEsrhTyYXkvkKc*FtL{I{<4lMr2(<~13YCMm2UcEIa&~uwttdBlI zpOo=f6i-s8RY~1;rs4EJtvW5oVXO-({)rb(QlW2;N2Kgh!DPJEhhp%$)M!*1B|07M206h_Zhc0skPj>4m5@$1Un zS*_nLV5U$@>)DlHiV|v7#)+FrNXlkCK%}hwTSyS!prg-&)56z*sdwM4-QBGsPfN`p zZ6cWKFpx`tGE;|w@e_CUutePM+peYe_Hd+fUN=uJh18O;_+p{JAeRDOoX<0Q1$=QG zSHP#fXtyrflHeI7iB0p#bvbGRq*$+3SakBl-rZmv>SlDTBMc!Mp&`(UcXcW2LE6PB z78>ef?BtO>ErP(F!*6PMORh?bBtjOz^Wc9*kvcZNebaoNEpuRdLIhcD#U(fw>)`^p(ylXz%BP&o!Wa}jlT z;(P72JpK6kd|o8wY`LjlDg}-cA@W9sX$Dq$8ko9O3Z^Rfx0aqpSi48|zReh}{+2eoDE|PxqWAuqZx+m{R<4Z#A2z&p zDP*8C!3Y5PuxR>g z3{Rj=4a{s|V*jJ#@R1lA5tn^QdN-C4@DvO_7r{Wtks_wK5IMOAeR-WkY|t zoeFf*!}*W<`j$))`MO*AdJQkw-7HkRH6RU7?%=3Z{8+z#%-c2w@-%kD)RQCZ7q@LA z)4zFU-J5rZ(CEDV{x{c87EQeGcpDdy+lNoV6OW>fF+o62Gpqp19jJ26hx$7V2ms%y zYCvE{98BI+8*zXV|M!Z;KaGsgzd<|EAW|3T_b!6B8Rd~upO^S(a!j5skh_be1qJGK zt?IiNSh!pdl-2F<*FNu(jxujUc|yaW7{=y*mjup`y;N7}n}3JlQg`=zKo{KJ4Wlrz zN||bghO9jVYCj{tz@Ec-Q;}Z2$6GZ+qn<0g@ko1V4wcTqeBllHh{+Ba9T3|XRhutr z&o`zmXb}dXzYqrzQl@Q%@<|UvbOxm$hUZzeCKyIM8d_;#Zm$F^StZL?M8lq1d53T- zW*7+HVcw%?6sCb}*r8nP&5c=$P$Vo5IWR|-lLt)g0kK^ih#5Z=`=mW<3Lq`OTY8OZ zlEBmub+Hw4o~^~M;l9WiP zW}YP5a3({3stJcRIc+SaCE%|94E^&DvS=DKmkfWYI8?mt)OFz5q2#pfx#9ZGe{kJk zsnsbBfX%oie)UdhOu0q&`D@mP|AA1E+q2mw!18wLA?vA=piq#M3U`hClU0CyfX%+D zxH!%rurlZaA?+!U?}FGdR*FoO2p^f?3OZ6X(d-+ZTBs8A@f8Z0cw_5n+wsjVesj0GeSu|M*!Vx3T=6iaM6 zb;SJF~4r))64ct$WLpyQz4@M(Q)0eqX}TZ)J1pi zzdA-%#9*Gl%mnJ)pdB>vv4@TYvDXnec*os$Uv`mk(EJDhQ1i_A3>%8rPVB%o))d&R zmHV-Rs==KK^%yK1L}TXGffeRpJbeH5nEq9#P$p}3LPf9ja3r^;xN0xR z>Z)N9uLSdht~#+njSXm{j#D~Gr1W3c=5nN!Z+107kCm@!a2ShRs{^KNT!YofC(jqj z<7xOa@>3|~dF4`G0_?F*bXKsG5WAtW7qblX^&JO~?2T|FVpiMst9M1oCc3|E+s<{( zY>|lSxamZOuq(77X?)Msh-((12@6Ni(%vFSDWhlvUygb2jj85>P~oGz`}_%u(8dP0 z&xOkwY%0~(R0C^T5d-tHfCMyJ$<+AbnC4*55jzH#7YifzcFWb8-gZjD^X5gWtSks1 zRKy>(PR<172gD+uJU=gn?hCEcJ0)am%92f+e5S4rzy*NTw2c5eWA5|Mk70a_xh%&9 zsHaLdTU|(K@X8=7RZ-r)Qr3ox?@92gO;uitw)#6 zUzz_+p8i`7Zde>tj*j4@FycV?>8MsNu3%*qm9Wj2!grJkbBQ+ND~O8dq4K2{;z&Pu zv9HfAUcXuFOX(T_$NeDg8)W6Bk@FBx+= zMw!d8tdq^88%z(HStf0*@*Dk(6;*PPY^iGZ?L9jL;(Gi^XRbb5BU|2apqcJNekJ)T zLziA!By6En3{hVWwGG(yMMNSATObnDeOP4cLo@RngRpa=PxZ&v#_fkQTqQrVZ&O#R zcgK+&N6F6~+}zdHa^&_w_hjs_?m%EDxb-S zr0kt122qcoOv8tr1$_4W^_#`L*Q}guh6%a8d+z!rcAeKI6qxt|i))EP-|P?xOgy2j zagDHlvaa-RHk?x=PgHqEWlWtWZVvOpLF;$OMjg100E z-4=DV12MMSQj2+`7iul$ZKIN<@1(%xDCU7lFTEjiDxJP5ojw>-w6@eqWt^ra$$=P8 zR%f=dh0t&TrzMN2PHWcHHCakm5kLK-Yk~Rb6V`(rBGQ$hiBsPXb2SU6nQO9``7C{* zv?52%DJ`L9mhNLs`{gfxDcagFYpNXvYju`Fw{7d^VlG8-MJ%<_>L-aj;XqOTHCe~* zohw{Iy^&{|yK=ppABeUH!isQ55P|V1^zbT6S-T3$HFYZv#V>OiG8ZLAyQCA&Z+!{RPnQ^6cZl z7|IzFYi1xam#6Jt5Q$!a=us^Ks#8=)#zmhZ%jr`O9tZ8EzkuVd1-x&oz-sI%A*Mgg zOiJf~u;3f2fY=^Q< z5zjo@AN1t=OrID3gU+q(*Or zRW9t#ffKz~&>9a3Isg~~#Hu}#?rS3;_RaC{aHLW!?W8>m3mS<_s7Ov}090IJPvalDI|Ejyb!h>}^zqLK>gCEetD;9ExhfUxtmL zjBu`!SIocEibFRKB3*e&Vbz(~Hs;ntEk^huL@_LT@yAeXaWKhhV@A$^+8gIcF%iJ+ zHgKe{085R$($h1w$GK)o9T>0nEdx_s`lm!HmG~O2e{xZsM9!W6;2zt*Cj>t{F4S{R z{j|M6{zgljfMFqZIiX3MgRNPm?%XoYslv{PTR@QrC_iI~W}Olhk9PnErmk(D92Qi! z_}CRD5Etd>rtO~AyllTt=#bW*+(zHuwKx4BH?pls2tz$MU?>g$GQj9Xz?rWCwHlbj zevI@oM*FIK7hd~#tnhpI@q8)(Yf&h5@8d(1hy(sBE9n8$26vJV`{7qHSDYP$|~mN^QIf&O*ztDrdJqkp(22cm>h za&4g;KIDmOcCK^@4M208w`v0$NCF`g!bpMdt^lN=kR)KJ0MV))4J(|+sxKitMGc2t zc`E!GvQ7un%w&S?=-tOatHr2QAtk5i<>W+v|9^otcnetltd}AM{gJ*tdL&r}w=4Mo zZhxT+ZdU-feQz`IGTU~X^<)tJ^3L@3vSMN|4@7}; zW3bsVh3{zw8WaGr9iqpPc_^V;OYe{+U{?RLl+s~jXF2+MGSmxV=Lw0`NPpZbcK4^S zu8QZZ{8~#&p4@je_)NMPpUEMCA4pF*;4lXzKQF#oAfeK1)((RylhRxD>1;yRvcjna zWATqZ4{zDJwi(+1?kiR<_rW4yNmLclK*9I%`cTXp25id8DFxVArGn?y$|DAT$Gn-< zjeCCEirhrGNXsorJa&+=ev$AXBVIz@D+D$^AJJ5ZObFu z(3*1ny(>Wz_Hvj8>gmEyzMeIucKCz_e#0i64XB4!m$iRz`@*m81{X~*q`2X;{zJBx{-1~Hq;l@sZyp~F z)r|ENTzs~>`W17X&_d)o=PVu`(7Zt(kVni(V?;y#JCmu? zw=SG+<3IvBWv)kp_nZY5w5mq0hnoNaLRj@IfYf{Agx%#f7A^wpq|u_dtU+J>4lJw& z%H#@q0KS5(q0)zmM5;8Cao-zz;F!XwmX)vg{qKqQ^Uqi2IF`YLdFi=M5ZczGY703nUvkQ<=g7;s$mB>&#_x? zAnGa}p#%H&5;WIh^thm}&FFDSn3(=V&7uiAv@S@I(f6SUJ=)R!EF5Qu)aSLkM$@%% zMK|vF(O7npvXy?dklao$x}m4Xlz^#F3?#mJk)_k_()G;n@zhFA^YkA5>jh~HoaeNH z##XTV04(`27_W_wZj&KzMgs_>jFMaPq$5uV!0f)O96Y|gkq-?8``QEPu4`5~I4aQ4 z*?vQjJSST8jV`uS!b*HCdcmMagc0z9kEoJ4unWbS@X=al6-C0E#+a``@|uPXgqde0 zIT^DtaT_Y3NPzRs)Y)iZSXr)dOT+BCXk{FrWenr@QXQr5encASAKS?hdg}v4v09yO zVM%zdcEEjID;GCgr#J9`%N1x8)4%IBPg$2k?r>(s08N<8mkFR_yx6*7Z&|qwAlz!< z|E-gqqrRRW&ODYsLtk%39E-F(^`OLc^&x<|>A0F$LQk@ioxgZ4&jVq^&WGM!b|KIL zs>(O=qf$`E5rXVf={Z<0JjUOupujZDTJ~tIrkg$n(CiCLz$ft=%l^#(cBaJizsQH#Y@O9T zv1kN^YF$^>^dPO(YWeDTJ5WBeV4oRjg)zW0&dwl1DHgDo?d_-I@i{|6y$xNck?amli6uF@v z+A54HqKP)iQ0YNxdg(z{que=AG|J4qgB``A1zTy;Mfwc1dPxi5FrTWe8N#D zAj2={rcgaY%$BJgFUL7Q+9B4$R7i9C`68~|rR%b&GWyf+C zqPD^5(g99fP5gvB*cK4qouj`nZ zx2)5!t!P`cZ!*s!n7Dfm{Z6+oH#NjJ3H*bJR3|4-i9?wXS$E^eJ12+wrV2Ie-l_KV z_OHD8`>AF_szY0^O?Dor>MH{>1e)t^Xs&PAJjC~feS$1#G_;Ca6!V_FJ1Mg8qqjXm z-c$_SbE-pFFNhvJ`FaR4*3!a37-QEA))AMn^eR%{WEC8U-W z{P&X!dGad5{p&|P!|#3l@WtwEYvaFw(Mg1?Uw;h&wZIRmDE_oT!2^M zY_M~|O4L;^q<)m%nE!M7XDMm|eeVYEf?0OHZRVV%I^NLI4v9nnU0{%l1lS9U!w(Jj zQd6~W(C^RZLKZrmSh*Lf-0Jv^Ena?H))MxMV8bBG@s&!%MTH@>TlwJlWYTRjUgjO2Tz@ z3FRYyLamWY_FJi!3P04Oc5i3~O;Jw6>TRVj^TY;Z@rF$4k3iNRu^=!6wYcQe>dFSX zX#bQM_TiMctPYJW5hPt9rw%Q!D+wbG4XTPU)gDl_B`~^Wn45|T(ba_K0r-97aN7HF28*eCkRCA)-@d(3 z0@dHT<3wVdc+*y|*eZ0bJv0gxy2x}8wvG|nNVs*%u}cfh5_G_hFclzdopJ{OBNuiN zYQS;4$)RWPpD;JcpUKT2P2Wd9%^@KA-`L$flzw&rXU3y>@~H#kPez^5XLU4kjGNeGc&}wA@jw^?^HskDywoy$-$VeEud&tMA{cDcwmKD zkk))&3q2PDOkqb6hbmQFaeHOR8HFnNf>6a#m7Pjd2WU4e2UBs75XXW-zqKX{qy%Lm z6UK+zx{BQJN$ef z>FWb6ZI#vp=D3s)IxQ-o1B9G9DffytV@MPc1*v^y%FF}Of8F!i>KEnCQTJ-IDOMx`Kum$`;%^qsbF*% zdYN$i7Y)>p~xz(#D`bf(sAy!a(XHKGN`9P*VO`cDN5 z3?NU>?l$yJ_oLxSeiIR)Tl~s{rzZlxx9|8h3r+Oj>$g0#mZy+%);+x44)U^~k%pV4 zMdS$pRu<+@A-{8|>Xz#UtnAOz^nUsl(nP5d@T7*qjoWNID0@BEoa!Crr-GCKz^s^wjY!bc<`cBbg3%T+tWhH*h{#vLb2B=K z%RobFHWpl$N)DM!0L~R=Kx%lw^;D@*&rcMoTpy7;LS1gPk}YybxVmO%aALx15?>d# zroyszX((0dVqHJ7DM;?4=bDkV^MfM%p`!YMIet{AXr47NRT54HMGewmdz*~X=X|^G zoXfXJXP>^3RlM=vKRP|7Z#E=?12di3E5G*kA38nS_I7=fuA}4C{78;|J42c1XPZht zBd3&!EeotXwF+o-%S2r04)RkHuiqp5NWb)%lM#ts)N=F@SQ(T{uKJN8Vy9d_WubUl zP%fXaP#UcWM&}6#punhG9qd8hsjB453Xjgt;eS4+yod(FWi=hJn=p4a?>{|&{D^^* z*F5Rndm3nha?aq{g8@JInr_B`v^;eWXh_W~s?i1vh7<{E%??j`$e~Yn z85@k5%ysi38qmpgx%;jxTwY`wk3c++Hl3Yvw$!OtoSs=;|P#0J%^pGA)dvZYt zP5@4NI^;f=sx@JmMi;Jnt$D_Z*)t2q8W5XpR&m-yr{{$#4JkCoo(^3~EBVVS)~u4%CGFGbQ5Y`ptI?*THms&aJDB zq?94v#OcyM$(i&^WW8ecsUSzCWH%o=<5jk{YMRx-5dH1!9dr-Lm=bHI8IiH7?VBHJ zn^!1rwaF{ul!B$){?&ChJ{%466(^R#7DA+Qb-J#H1P}$wP$Ri)nhOt($@4hmSh;_T zg=aPNL?WY~jf>Z?ilaS5Y8e3?U>l0(yF5TT_DD=BoG6grX zRF=|p=4@cw&S{xLPbU)kZ(Gu7b`#&?YSPw;#avCJ%Txff11rZ33Uq*%n2>!m+dwN( zik1a_<&5&e6DbN>6whj6>lV2IUce3AKnxn+%t0&4OL^7;@DWAn9+tEtXo9cTalxt( zwp|G1|6xp@4r60gJ7#sNT0!MJr$S1uv~121rm4ng+&K8c$sxw-IIh4xI7ZE&gp3SV z$oE^D?U3(#Y+OIj3>rJHA}UixaZCTF#5=u(+FCk7?4SYHUlR(FjhpyzncoV6FekYNaNmB$sDcfgUT~_g_VHcN1P(y_0NTB$*#gI+ zMc$sKm&TM%GcUn4*~#a5W6Bs+xE+rcfYGBd>ew;?C2~pGjsVA0Z{*nBQu>T*WmxN< z=e;d2X`VL`W%2u`xdo#Oh3piM&}86a&zuN@@t~kx8B2ww4>uY*6WSJCXPV5`*7p|8 z26K0R%G|cG(O~Kwcy#0sCRwOkAgi0zqiSvbx~{LGtznXbdVpS(z46+u(Ct=n9V>QS zlYrGNBTTCqU>hTH+zeU_RBef#k(@xFz&Qol2{Qoo8vx zU{;GlT`NUvojj+@HCs+K5KYef#~6YosuQ?kD4Sj zGbRaHIhrIu52ReW4^>bFMy5@61vH(vfLq4l3AbP_1a%iqkYF_sv{lV@#!}>}DYLg+ z!B>+57#{)ZoJj&;SB~2CfR=O{AYGZT&D3h+@#o`Xmi)^v2mkVy>&P!@yQjd_cg#}}~^lFmHQd}-yE0=^BT9uEl z;MB2tWTI9vjP3*$k<_f`L1+h!=A+Df$pP4ZoQ9)}*Z|)SGGcz7#by;y|LFSng!Bj5 z?9W>_Zd)G!x2L*}>#px8(mM@OMOzzRTGyF_Hh`B^uN=7f8c;Pf@VcI(-&S!476t`E zumB>EV^I{JXRhOwu zX(`XhYiw~W_Ntv0{D^^X6x?!tAxx>Uiz0*e>zR7;6?*nV#p3@^oYFtNl$~~W(|2R6 zJdd{7$Ajq+Xi(GxAc)$SxvuN>4EY7!w!Fylg+M2iR(jicDaJ`9uxfRK~HO z;c*-qv@^>44f|}+{9!QQ)dyi}d??kb3cK1`);%VX3Q6ji!BHJ~8!9h=uk2?H^pvti zA-W&QS$jsVCQFL-eLdDfeQ)m$Z}(ky-4JeWz3#4imqvXDPWPiDa{sBlk2D=P(~lCo z{bvvR@0+N~EWGZ;D=8Ug%j3JJ$5`E)z>Q)%tN*4+lk`dYoi0kGX}V&rL*tmY@F#we ztFcKHRr!3LpBmbRiz>84mL-Rpn{rTvs~ zF{o5gQ6oWc;6>t4`CKyV1gD7wr7R2A3mVlGF;=)k7|u)^3esG%qeJ%e_5G3R=%J?- zKPoExfo5e+A1$F4=!%gCh~b(hpoGi zg5_{PQD0pSWyNL{Ih>eRkH<=u!$+-F#f~9f{jS<~s!eI;@`T8OS7bSaMHJseDi;y; z_FAH@b^FqMlPJAs?N=P@4*^n5&dD9x=%%~S3hzN2y^_6_Wrrpr%5MnB0xLS4gE>{F zGCe@g$~#xZU{uPBEq<%dw*LN2C}{T3w}>|VENvrMP5ZLRdWl1zF3b+LPD?AWNYxH5 zi4kSy)3kfi^{XKp(h6ML&(3<#Zt3l|xXr!&X;prg7hBrywUfjrKYKKZz1T^_0(g>9 zUl=Yl49l*MWsT(t+wj5RTA`Lh1KT+hs z=I_2`?=ub8+}bBH@%wJw>+2dA_>dBn{tmAPse4QFNS@q74}Z~hE4_p?>SIeL>S2F# zRry(g*6CeJp-ZYASRAJgeR_6qa9@9aoPLqKmSXzskJmWK7`RL@Pv|6o#acJ zXQo1>w~f@?(tU*A*XJEnf;>n<+2px1?kFT=ow9h2KGb>t^Yh5;r|(MxH0E+3GNLR} z>3nG_s%lPS5kvFhIS#FB!J_Fl`{YShk9G3YSuD^G0Iy7b-P@O4hO+ATJ(WJ7hS4@a z4|yCyj4#70$weJQB*cgIz-vr99e$4ObU?$vNvfKl`5A;Ks6YdTkO7R#INCr%{WPx8 zZZoi35Mw1E?L6JgYcb z2%DnqK4DCg>r2Zwb^W0LQV7dOzOcCjf;w5j&1s3RH$x@abN?CsTceK)4REb5fxHHEuCyW z0E*IbQ0Be)n&%rKkf5S;FRFU~#)$2wb*UwxGvl8SxJ*WUl+^g8gP`r6su?$REd zU@7gfjY}L&_62MIODt}*Z#_Q1*6@pm*O)e8_gP^t9NE$2^KL%)rC8kT+;w^~M=j{P zX`|({F6ydwIu9aC4pVf|0I-%cJXLmvKQOIJ36Yhr>0KBhBR(k@Zv>2O{(~%Y+hEKk z6kCC47sxcybgZjc-W1TbXj^9gU8Q-H+`O1Q5lB|`cNBZP`?I|@oua& ze+Rqm`~Cg@Ot}_q*c1k&4?nVL&HNLNh3htj0YlDd+q7|s2Q<=&FGCy|`V-pCI!*sE zLH~}J=-&-meAD`q6-^KTSGjugKu!S|uBNkpY9oV6e4?hnTTUfM1z_Q~W`6r~Zi`w5 zQaM3oDlWN|GL$~CQ$3|;uub~`yclCmdLxegFYSiRk`+n|ie&rIqidVXm z$oic&{?{<@SwWFpnn0h>69WUUkhl8jw|Z+wSqe!z9A!+}=daty5w@im<7Uu7e6o15 zNFUF!R?!Rh(>DO?X-|IreAqq zp{DI*`q2xFUOY`Mo?l=C2Z&$4^wOW-c;gH50-b*(*RsAPWG$v2onNQuA>9A&d7zfZ z$r9tHEhumlhsjJx8p`Ez^hkk~@itC2In|N)0y~dYs;5Rub<{Hul@N0=7TsBGt0y6E zn*q(^D=+nU_|CB55itZYNeqtJne0wkO9rYf(G;a*(gL`}#th+WX#p^rqit231z=(k zX8}f}U_>&=FhN37*p1GuztCn+u zOJ-S<9rX)0CfLv;>{vg1V~(TXXE-9k19^&Y#B!m~ppZr^gb$+Qd{A?j2-#!Sa?Hgo z6EsJ_Cj&gLgJP1%v~|)SAVI)t>V4N(eT?djnJ#ZBS36^J*c_F%(QVRNX7?-w;RgBC59?4S>^ z$*Ep+OxR8z#uL@l+xzutGM79hHrBLVPNJO;Q^AfP?fk zqyw(b_wx7UMm}Mk6nQ3@rPe9TWO&p!xI7tdWPp|BCOf0$SG(dakk;U#XL@1~wJzy> zz8A3sXhxKrr1be9wP|$T(QeDcq$x=xP2ZZh{mGeR+Cyhj{p1sPIv32L1VirL+;7Paq;;%PTfQ%aBgw%^dz zY0Rsd1HK*M*p97>opJlZEjzByDC+g>JX>phEh|<_NH--?5N*Grsaf5n^0~9!%AQU4 zudh=JuX}n$$$QZa-~vdO12zCTlzUB*K7ORlhi1KJqWFVgf)4@Bg?CS?-dDDo~Zap=hIAV(sp3vAna&Fz(jlNiNv z!7W(?^t?@WXvu?HG7!ol(r;4&`cwMmc|gHo&ma>^a0R2DMip)%gkm88=+F*0H|3EF zpaZq=;xZ_~bJUva#z0Lf;DC#-7CAvmJenmTKjYDEBW2{3KDnV++Y~S0G#JnTT%Feu zoRV&}D~K@_yycmtT!VPgQ#a1=I|ei@n!Zx+Wp@^JG?;3e0nX4@B)d{n@Y<0NZl94F z6sb9xertZ$!{7fsJ=xN~Yk^hb5SgZLqB0(3SmV>g{u6Z!1d@*RG$>oGpi+48lJ^O7 zdz8;%b!U~cEeypNivlR-3~s;NfY8wlWKJ!(k~Z0b$plmQkJK)8R>D|dSo35C-} z=aUMjg`Wmkt(p?`(kT&nmkv0PTR8Tf-L(oaqsYzVK({eemYk81dGvZRMcp`al2vJ) zHcO;+P9C%xtdpkvz4S5pU{CHycV#=gTgk}Ecg$GX#mcW;2|g6JS}<3R4Xc``{72OJ z&&ewK#6(I~`tN%NWNx=2qj1|EN!{~}xn$OpcXg44NlQmak`cGY*BOQuMF40LSu$B) zbj)7bD$wzQi)WN}UcT?}&+LkvN$p=U>{PiIF8Kw;=CZPE9*6a|$u(n2y{&%QEb8jk z)k{3UP<1cg)YiUXp$&NUu0^Y7{|Dj41Yvr-ECZTKPKCmA>4f!{*%-{&-va>!C0%Qv zVz`zoOR2@q9L5`v`$XW4ADX@8k1SYp{9!8&vvz~zXRDyTA)tqR1Xv*EiCkoXG{W=_ zj7-1mmMT@90hX9&kMZTZb3hjX`ynmg-b%zBDw~egRj08^vbuRUF6HRO^AAm@O+ME| zjbH3P?v1vL`JDt2PX;Z)}B#)Q=Xa=+! zhe*+ZQ%bf;Vrv$<*kUm&d`n8@TfD%nb}w99lC64Ry9W$B>sQ@Mz6{I5nm7!B{uPxr ztCEs>bLmU>s%|e*SnMGs!UpQjhhbS5NwgTW>q5K9?WZ6wfTWvX>RwJ zLpZK*s5F2RVHvRV0YG&aTF|ev=H@)w-1fzgJ!!f1GuNzY(#G3$t-53)-bK-O!LyGY z_?GjUa*2fcJWO80bgJO#loi!!c8yZb{N#eSJ+&QX0W{TH`bG+d6^Ut_Mo_~OTE!r)WlGMEl}=swDq^(Ty^OIVwV<=~k2IhKZz3)9 zJFF!ZK1ClQ-wVr(Dh^1Mf_f=Ejc=7Dqj)-$*d-3(E8lMj6B<*_PV~A(*xA zr7ZQaym6Y_+?mj6JgY+1OiHV0V7}IB;cH7KrBgOcb(=anw0c9PXoqjm^XPxU(jmt9 zg<8X*p~6hVE3N`|!+r=>-OPfNmxenQq*YenhKRxpnlQ59tD0M%5A&zi_Vyk_iyhLU zkheB04}i0lArh3I?v?4ZeGv%F=Ae@&ZV`Y+S$qWG)^%IbX>VVpx#FRm&MBC)iHDs!sS!mN7k+-Q!{jDhI~>jJjSYIj-v~e zwHB)A3~Zk_F^U00pqV-ggoZYi_2QXbR7v=%vAmPopD3RE9?|BwBFw<)oKeNmXz1nB@}Y+?b8*TxL^)!^gGC& zMEKB+IZy=aI}(-mg`WC{2ANUNDOEZJN;p%2?7Gy0|HO86Nmvwr1(5f zLTSR4HO#dsY{NxUeSZ(2d3p!w`{-9K4v=_aT%}Rnj~Y?;od_e^+d6G{MMQ2v^93Pa zXQCgdvj?xR3k^JFTU>W`x5!4Za&KDdK^tXJsp>QJRt@3GvR zR$1BkI_up@W7sF^0#!SDI+}U>WB|aF`kbP%sbNiPe8-l>uApP_mYqb{r|8~rAC`ef zo?220U4*m(mns_mx`eEFTw+jiL=F*Gt#e8fo0odfrq?;Vx<%Tw+%0#nD4HEZgI0U} zq$%`A`Bx>$>-Poq&bf;h({F@TZHa_2VM-;V?}}$1nBS>{icmRplw6PxH;7PIeqIrZ zw%~f}q1riK8;u}Dx}^d!Lj}QegC~Z+T9u63zM4B=jDXG%{Eh!X(`9t?BmV#+ChqlW z3I{E?4*I)$7}p-Vx7EM`YK1P)XzS(K0K?JDGlT2=lPCo|!x30EAFO=lt~d(v^^@}r zXb#1^zETt^741zx8Z)*U!!o?g%}lvmd}u=4n>?JJx(OsSu}Vl7V) zh_wnL@@OI?CG}nNLbB!-b%!R{GL$X7OJ2*Y&5%1vzckhhz$6HS7C~OC^mW$iI)}5E z)QXIJWh7yQZYK64?qfjIWq`e{LP?ke$?i-@b~ly-15QT5@IsLd=&Fpai6&HbWf%p_ zj6(Fvz1%Tt#fJZf3-@Hm@5rt6N;X`2~%R8Cj;*3^c4kxv8@TY ztZl8*E!{}S1Tr-*wL<^?-#?a#g3_jD6`))cE*rm8xbQX3TQRNYDLJ}S zmtp;XP)itLiK}&2RSg8?kW$bv2HNzLi!TbawV+MOg~lbLlYpfqQzAfHoG=mz*rH%p zy5wyaAtf|`sfC~KXmAS2wF3h$ba&g(#18*)9k#mm`nMg*apt|)LsGWmn|MGHpS)v= zo|sx1S2lUg*{%!cy@4w5ApyXL>uxre0y641^x_;*FHh5UzQ!cZsG&|ccJ)h*JV4Xh zw%oa}vDI172ju=%=;4|H2=YwjtYY?S2JT`U1_Qn2<-q%+I!c00L4oo_{RyEOo?s<%fwccQ_{6G+WG<519D1bT6iHN zX`0aulRRE#5>(X(uX=&Z`|*!Yo&>1y2gM^GSQ;LA3xH)Ed%%}m<^u8Qb(;$OM(F2d z7+@KR(cdf{-m|F{ffT+Ko389UllXNKJMPI}LqtMPwJO1|`o@=M)&+RuhcETkSGx!p zhw#iXbzD0422$mM!nHex4gYXob>~d3Ldu?f&)%l#xrVE53^LQ>n!W}zk5vx6!WNEv%%uK1ocA+#jup}AmSX6{@ zrG~E=+L(V*G3|JeBUi9}2cRG-4|}WlMhBdaB;+Pz>TMjCz-Xkh84&OT$H33>oRgox zOxshvL~B7BC7qdnU6s&au-A|P1I&uS2P7HEx*L0Y9Ub;LE7wOrl{&I^+03Uc;N2b; znR$_Q%jVc4NFU3z0)5QgArNpr>#$`M33=wvzJqs8$>zXSZ0s9qesGoE_Mj!u^p=nBYTm`rpd8n($<;o`l zQlU$th(UCtpP}zEmr?kDGlq=spC(;OXV+(b5Jx#B0+()+u}-M#c*yJz?D?TLjwXpNem8!?yu3$3Ovz=T1@D?})0 zAybQTG?ixs=+zmJ=^Ui*AZGektR!#F3y(oo2J_(H(fc0t)MD-!-bh^0MYN+0 z@zi*&RqLqH$?q6vB)rg=gEeOUi(%&?*V8&2p1CPi>GR+A_FjVyU+`LqXifU^;*a0V z|0CB#PowUgJNK43b2{kTo~u2tbY>H$3r+4_bFyUM|%TAW-8 z`cTW`YZWy}Bv&cDwP_*>BuA@PNwrhOr1$XtM*b+%-Z8hy@0#wRRulhw{3PtJ=&RNXqZz*_+6((kj1C4PmHpm)Fo9l=`$&7D;{S;k4Mu z%Pq?LrDLx8i|orE<^Ol&b-NR!4Fm?GfKi&6XqwfWYMSXJKR22)X}v|C$!F~K*^~}H zBf3VZ+avcI(l0E&W7kr@pk5l>c=*9pka!}@w_1-@8(=Mrc)<)H6|DedHZ#P*ix6#q zFqdQ|pyk{fLQ-^G8V)N4-X4)4&eI(ZP>%A9jxa7BykNGok-kBRm;(Cq#~)80IYMTF zJh?#Fq6~K!(h#wMcqbNmh3yML?L?HC5#}#ZW#+8Qa2wk|7mXv}Qtn#^u3plsr;HK* z<}2e+a78z-82M>+4CG_j2+&h0kAdo$F%Toh^pDJcr>Rrvza&Xl=>=*dOB6YLG$rvb zUp}{<{t3mo?dK=_qI!Y*@b~ubS#_}6NC0Oouui>gC;2R@u{4oNKww*RW^kGsh0rOnX!e2f+S;DZl1eU3>3^&rh$XHI8Ky-$ib6pJgYQ!C6q zBE67sM1c?P-XI(iinSnJ05|8GtiGBEVc8#eOtT~nYgNtB@FUZ5VA_xI#w3JC@H3}}3UC_R@i%3b}v8^NB~3K`;f>B}Z2LyRfgJHv?aN2(Aykg~^2 zZL#89guxW4808`xmQ14oh$ypmobuX%b`tiW+T3s}jVDx$+j$swv6N?u)rzcIm|M95 zsfT}lCjC7jKdA5zCv69f$Y<-K#hnmG!A5|iq2g+?0>#3ux4c}uuiOy^GIK*C^n!Bcl;K(wBnxbdEu zKamFXUAlmh=^8%<*$y(HtG5$M!C;Nqja-9^SD1M0nHMZMgPVr0A<~YP_d$?vFKbne z=F%v91Y90a#c`p{tB!AA#3vgn!vlxlB$!=3A3~buxBL3mz%1(+d6w?}daq0iisCE@ z*Bo?lg}iSm8l24Z`IlE|40_IMm^M#A&#mGrP7A6-8ZrmZA6@2;(IC`KS3kMF4Rb@p`Bp`wb ziG*@gC{Gt(1qN}C>jk|Erk#nWk)l@5l30Wpf&6T*A;9-WV$C9>K}hlSuqyg+E7zY$ z__?u89RTfz>3g6f&T18bA2{%SaawL45;g`HizKgGL^LST0I#)ZJVtJfhxZ=MvY;Ql ze=Dn7=;||wECY0me$60Lgu^ISk}jH*EzMMaWwHs@@Te1nMg00L1)eYH<>%$0a6r6l z-aN?46ZENQo4&b0F0u*aji_IW_0o&A&KTaCW!Z(AJ831n)KHcfa^y_fh8gq4lMeD% zRGnQ&`AYA9(cAkBc?0H;1?X_oR~Hp=Cs(iMyTf36G>^Xb(zViKx#M~Abm`AV`XuPV zy}vonnl71fe~c{_u_Cu^sFfHO+YFc)jE?BW_a~A-+q|Uv0OkkSlc=tN7K-y)Z9Vot zF>R`<(He70G8>}}-%K>&x#+$AyO&;SK2EZBQyzQ?gj|Cm{nC7@#XZ@cp>>H zCO5$Q40|}0wnUZSdWq}*7D`|GgM*q{df0^ewqTps+j}Ohu-4^SCeqTc@+vz-It|z- z11Rr2E2BZcnAEI{-YmRRytY7n4fyM{ih5q|U1(Q37UwmA#SWD&ljYU6$(W2kfY+L8kck6LpayXO#E%Yme_6UyAla!WG| zC3qPNdy%sH`{XlP-873RVJ3<8+x&n}OrDP?&)hcv^W46(*VFH(^I(Ng&`p-cN#@Jw+ZexrwriWfkLMR~t5?VsY3#sn~2m}&H0*??N{gH%t zF2B9+%$_rTAK&QBVws2_f$on7-~c1i41yfr3r=^8>GvS zO!silXN|BGyVB#x+=WjVC!bQCg#VIIE$3bF^BY>;E6ST@UA_wBAB4*;9`Hy?{{?1p zFMJ7AUzDNWT)zC4Wy=!uQT499N}wRJ+4@SEsaIKa{yWI}H$!3DlZbj`f?VjXWmt^Lw za{z}2WLK_PbI+PJq<7V-ROwYkeD&-!NL}jq+DLwO?w=}&rn?8moT%ckUDf1a0LjOy zg=snblyg>A=N+%iD&9K@{D;6(9&2E!F_^)IP^)p8c2;0rI}j@ zh1EQqbr6ASzjpF|uLyY{xki{3`7At9A_3& ztwqo{)YWTe?5@4vv-`6EX*kOXH=wQ6p?!#=XQiU$cUuGa3{#trFwT88k)R$9eY4o* zgF_$vJ^iU324$OP%M4_3TAE=}uxwla*amiFpo3OeQrnqt<-@p%2@z9Qylm6_tAAB%J|D0G? zednHoEpnHnVb=|(@1oCW#LD&#+y;=os+zr=1__t}grV)kZM$HHhvRe&+ACU&khuwg@c z-@dTFS1A%vTn<#N@ZS`P+AM)RdEflGLsq!sv5=qY;8B3wU@-{#ZmDhmvrjRm%Fxe2 zk#ndkTRE)xAvdh54Z7B5najp#!2PO(J*MY=#o2|qtDdn$2X&KU)SS}8#OhIcGpmar zVZiTOo$&~G_4&<1Tu^=)+EDN*@5m{OG0@-^b*9LcUU?#b0>5n$`qp|&x6-RlkfP5N z3BppgM{CkSlUso{fwvL(k#c{aLGotrZ|E`8=+YGnoe(s{t|hC-?RAS*EpdwsMuBVL zie+2fZvukc9;eYeq(1y8`4GNu=UljvOk0J zLp(zck+XrRVbRoT5coRKI%H}!2ndk~(iB*rezM{nrsqtDqneK4>OqAEe~Lj;EAbYa zU_h6o;=S&T2^jDeC02n?MwSGNo=2tzZVP z<^_&Al5O&dBTMX{mcuuVUK~&CSiq21Eh{eSp--g0Lbs7Qy7=b#R=ER)$S3@5ONM~! zBeTt47a^aNE~7ry%sYK5CbHQ?9fxjwu$L;;!Gd7}k(J0RXXI!ag6iZcSTbg89Jd{Q zeDJ9*0h2zJ%Uot@;P=Atlj%QK3S!Xrs9;cTJ`3T25q%`ev_&>h50&P5sZUB8f^xuw zJ2+^Mv|N6&Ahb#fCl5Z}bm*o&p+>bPF>~2wF9g5vfg@lIX~x0hq?t z$R!q)BJLzYfjubF357Dj&wD=UIMMN!c7UgEA_7xzL9br!5vyZEjZOWXN&v^iFaz37 zE&fyRns%sOel4{IwQ^mQ9?%Lp!cwu25K02lo-lsX;%D0Kk5;Y2QITTuC`}~~V@C#Y znHVMqRPk(~a&{P_ti%P?=M(ghh5V_XzPIQl_tA^)pA8l`!kj=MDLp~<(TDHs@9$LL zFbxpBtG2%>1nHuGa5+Q#K{@p@Z_+grBvoCY8v;f`qW>kQ=ye6`wx29= z_3iWXXdaXtYEs{y7pr)64!%^vBa(UrM+M%4W;>)#&+M zM*fZ~LXn&4HRP7OId17u`8;$>LJxZ4DWScALtdsYEs(nlO1*v{M&yE~yi_XuDVQ}~ zF>S6r*@WcM^rjSbmnFEm-eS(=`8I1NWpg})fGB>>m$B{D}>1>bV(TFOO&6ebfw_fM5mdV2q9neiwWBx zBg@qw0zq{#QDK=flYE^X6_DT3b*A24^8G^LgF@k_5^x>}b(;GuT|wp7Ec4cP!Dx7F z-8^%zXYu;5STF2YH$Hu427L&h8{$+`OM_%h&yqCxDD#WYKKnmnd4t}~Rkp0(*rp9^ zTID3&Ez9OPKx)!He^py(`G`qYudt0Sfn{>THY!W<$bdQ80BIPG5oJMr3T-MYki7t& z7~9G<{+D-(lQv?DJvBiFShk9aM;T8A6%RHUU}W+t=ayVmD*dVN<#)DF8-MlE;K96Q zY*`zQP8AN4;bH6i^&LV8?%@rK9hx8Y*>bj+rm_CT&ZdPU#)M&TLFsMImNUo6wLt6W zb}inx70t%`P9As$=yMlD1TeE7-MVp!yB$dL7jxzmOAw|GBz{7;d`^NV5KttcZOBKp zAZQ^l4yK*47CA5)Me0z-lh?K`cWI41>1MY%owYaEdUHR@Tn~k)+tS#V3aWt5p-qhi zT**i?{27B-6-@T|sAIdDzp;HgET`x5(@ae$f;OnC;sJz~-D&8^Ed;B%8LKL%4KHDY zTrrHZUvW;j9K?CBV3<4AKmaBUVB(pe8r&;#r{&s_2x9)_^KD7k9?a)w846+ernq~DtUAo@`;xXR-6!~FLpB?tW zzxal7uMD;xxUPV*AH|~=k_9S7sO{8qZ*1kjUAN`Gzj3AS-6l;(hasSkgl|caXELYh zAu_=Hy{T!eR}W#`GIMEL9pCD-^1CJOdY5Rfrfu=4Sym^~_s(k61{M#Spb@IgjlOFO zubf>6^KAm_@VJ}f9=~RJS|hfYg^JF3dq*mO1FNTl;muT$JY~QY1gbD4nrw;&{|>={ z?bP9kJ_inUH^nKHTo~PR@n+HTXkl-E?8x8u>AHNjP=YW&Y z^O+)0Tk7a{F33>V|Ko|b0_)c<^>~-9Tf3$T$DIqcg*iSZ&&e^(9&J_D6;19JK-$gR zSe1iS;S^8JZSeOn_d#q9lN!dPw`})N1@1V^_F*;>o=V(gWdaBaNdoudWIqoiTZ=b< zkmP|=15h;ZKuEHMj)UQP8|5t&Xpq>V0!5X2*t~A> zS3}0)>_(AI(l}OFDh~m1x>?cI8B`H|_6B+(Nm%0RXQOeWz|gQtPWxn>P4O)AaaKJmt%svN1o@TG~ z2?VBFai;jfl-#I-p>CC)w2sK@?1~)CNmgY-fiqWEW4)@u#==GthpFL<(*=LTC_QxO3&_9F+MIKk#;G*2wM6?uxb5$a1 z`UA_t%NU^H!(@PXnd0z=ywbmmqDLgeE4Ud$)ANNHXPjn+!u0&av6OQxj-Rrv9CUK^DMqrJb2wj<0kqqq2Jvh02p%1V+R{2flHGRc8{p6(hOLM z47~il)BU4D?E802Ojr{Mj%Il0Sf>gmWTb(@ie$^$Jz5~{i`4x)M=Puu)MF7b**of| zj=-^B4H}S}XY8ve8CK#jTP!mLHJoJ-Pn`@M!o$PiZz{t}xK2~nh6%+Gt~n5G%4>x2 zXZpqVRy8chfu8%my@Xoy&HK`1S*Ii0rHU&%Gf(82t{xLuB{L74%!*a~I)^|Ed9TB&2&D^Y-;hbIKh__bu$!fR&{@JhCB6S+(BL0jtJ7JX(4;zjZ_l z`eq{2!b@k8y=5rr;-h~fs zh|5$m4v-%dUL@ZMMbWkQ?A-s4*d;Ogf2dWJPHlx+>;r1?#tR&xHh^K%<$4c^Ijjw{ zgfWtE!KK$fWvB+X=@%MpFy#fnAS^0uXi!)?oBW8}$6Ch3Vd{T45a-Dh03|#X?JqNGAZ|1GfY^D_goC zgo>h@7heS6>>&A!&OmSgF!$^^CLrjz1iX4_cYSU+shYeM0BATf!w zz! zO*BAs7Wz7T)B%67yZblomar@&?EtqQrPb}zNaU2HPRi4|ZO&-3LofYLLebtKv`err z_=9BAo%^6kDA;%NnZFYa{mG7ep4Tb?DKjH_UmHR3C=V8TR(_MfY_kZdYjW>o{zMC@ zf7^^b2B$GKc!d7N?Q@F5QY}9>;>ulo`p55o=ds+;%eusRLHNQ0i4)@I==aBw6*Web zq_wU}gxoQ`gedb0^<3aFysSX^bD_I9}3800{0F!{JRfDd)J#fKF8R;;Aw{QKYTKFgdI1bAD9|8J%`oN= zqFBv$It9{dO9Zryt#uZ@r$JuYKi$|S=$XLm8yGf$C+kd7nCzcX)=480C(nj zH(nfEHfq6=HE?W*)}=Ns>@|r2vaybBUrhfU5SvIR>KkW@7FCm%S~}e%XAa!Kn#5Tp zvQ-$+;;U5wDhZU2bu$_P$ z2*n%p9Z&@Ts)@KJlN<<`^1$VS<|4E}rnX|SHmI>Y4>)X^-mx?I6!F~4! z{c2Et=v2C$kM`X4==?dSZ_lJaOEiu5UOcKKxg3`#=E`|eJ|823*eoMFj!-2sNQD-G z+$I(YORg_B=y@eeze!)f*>n3ETV1hWbJ~ji7aQCIy%xQ-Z{SV{`@9}tm2%s6cJAB~ z09caOxNK$1PWsV0E|0@ki(Bjv^X&<#NzCI3MPgSA#fni*(RrQhgARB+8W~PM*pr39 zo~7Uwf8%-6aC|TDsW_J6Kpm80OxFn;ycGlqD|V{v49Qet1R2iUD7?EezZn8QORm5Q z50kkvx1t>^ir(1;8qe(_d%Yh$L_x;h(gy=T7P$J1R*P`k>C*$3Urr8v^{dY&lec6t z^oJrz0PMnyNwv>gCvi!oK51fU2FSU>_=2dIoM>yi=ukIso8$Yp()HT({B1d5Ydp~= z<%@+>(?g>NR~3zfN=nqi#$bm}sBTpdibEvrMo~ks!^89WRaJorIb4@W!(s#`xM)-+ z>{bRsekrkMf8CwReuX{>t^8xu)f{Q)@Rf0ye-#Lm(H~Nx<8R*7CerHozN=n7K<35N zbq1l#Arl$xbjzws3c!yBPMLG`#P)2PMnQ3eMuU(;sr+6zFJ9=Ruy0EO7jRki1pQ-i zyb;`EnKnFJBM4&h$`=i1GWV^VBSV96a$;6SWzI%p*xHK8pqUp}LuEP23}lH;}ST0PChUg>74`Gj>Uao%D~UgYF3_^9-aXf8^AL@5Gb1; z_KfuEy0p2WyMnqT0yQ#ke{u>?L%p4$-ziXfddNyYqL*qCae-9K=^d(5w>FTmi<`$6 z%&Zd`4Ln<>ug^n%op}V1n)*o?jZEOEcL=*>KEGE&&++TJIt@W%EJpD(9V_S9r0{14 z7Wg%RB@AAp%Z@_)!*mTvm;xAJvBDHIOE+AOPRNMJgv*_l+QQZ(i6*ter(p05zF1z^ z%GG~%sZM@Deo6_efhS$7)J%2tqCZV@^$xp>}$E`WJk!J^A5xGo&95OD5 z@bKNuZoao!^++tR`#?8L5ksJj8ZtOT<7raFf8DUcnUE%xjuOJA<+E2zE|a zL37H~*S9bpK71q%{xZqKyXb!nn6d*N)R>8^`F+yS8`or2UAa;hi+FuOW(BPtTaZ;H zp~8g^id5WCIs-}FPpR=vjmshiKW>TDQQBi@9_zEhY^}hvPVaII_S@=h10$5YhJ%3@ zaYgXRFKU6Ai_o}S97FVBFV{%erZYb5duDyMjyrk+s zexO}wG6_>polKLG4|X2jYA;r@dOVE=NWfS!HMZvQB*F)m5l^L|QjS8HuOY5_?3$hD zEMl;!lHhhz-KFmtDOc$?HuAr;IYy0?9=p5K-mQo!67LojT5UQ6Fsmmak_bv}RHU62 z8ezvg$br1bkz79$x*6i(H9a6E)s`lIPWAVUrQUbg`YrX=AtIx90=-@c4p2O zRj#QonD-(*A8-z^Iw2SCNF2HGrsF9-q`lo&9y@xl696j|a%WwU5Upk@UcHd6ZUm0h zq1s7h_Yq`0kk7#0gFVIk8gnL@A|6%~t0A`Y0h_dHPRf#f%A2&t9RZ3#rLw5S;R={N zFyM~296H&DV0Pb$1J5)bxRG&18aQ>Zbt2kv_-KZb@ROJAKA6uxOCF(TQ6i+0(*KgS zg6>4Uw5i>%p!&d7T%c6TP#v`cjW?{#60w{sR>=7DKQpGW4w#!3b_^ZN)@{t9N?>jU zJrp$L2fadz)H|3X`s_`B>=sPjo99|Y;HPaES{`O68qH%H6V%!^g+ayhQhQZMX$yA% zoedWpQdhQR%nL?5Q30RJ7ck3?hEx>eN_8BxpNqwzp}KRDCH^N5UfZQ_9~rP^Y~7kh zFHy9$te9_Wv(29<{m;CQiRdtODShUT<3H~q@fcatO)sKvrdE7FS+HUUC$j9MwB3vP#f+KDNnC_>QBhCWs=v9FNE+8+-WQ=$Z zR?%bw6J zJ3flnE#8Qo%<#Ge*ILF_g``$tc>FGONJ*+of%QFeBr%Yb%hcMvh$ZOxuEoc3j4(ie>pYXZ zM=!~IW}UmXlW&xCZkTT_c$RJq!R&p2%0v>3J{Fa_?vA;m|cjqo$2o{JxP|)cb@9& z<3vzH$;vm2%|X8li8{z6Ww4D+&;3t=-TIe}WBCNRoId&$ zcC-=%a5pu8V1{Snf}Lq$Lu&&F;I;+*D1eI-NOu9{0;k$lm64jsj;_q@fxQYiUGUgA z^*ebU4HOj#;zsy^19YBM*gQvKmZXI$ak2O-_`lwnC(jk78da|fnF!rbh`Z=pccZIpAKV|&uHSoq-mefoi|CWz#yg#OxF~oHGqJFGxzt=>Y8ZCyS{~DzuNiQzGI=>^xjw}E4f8XRM;+~K1>>P|!x z(ZBWltq0n$4)QMTD8QKCD~8~rKBLSj)}&@OHTHL^z=&C-%gqZsU}|4f1TkElK;1pu z)I1z#$ZNX%cn7S72`<~Ivox$-Db89|+&w0*MRgtUF)O(}vtg=w6`&f(w5^#TKjsQ1 zSD}5wl{lD^9VNybw37sO#qxxTN5dM39pG2Xo-2evVXsePrx6ZPhF%G?aB5UPu%EP-zR2A{-Y z5jmG`-X@8pqS6>pxME8Bh&#H<0~1Atcp6p#XO1W9%44ImtV25+RONvca(2+EJtcd) z3M#qgqF+=z%=T_y6s20RSh_g-8dGLZ#P9tOcLG9~|9>1jsN2mA1p${@TH!sg~ z+}&*rH;K|BA1a7}uK2%-MMvDWaD69wn?~2pyW2dvtW9bcwNH%MULO=Ynr#w~)KYJ% ziUCgPK2*KdTcl)8m)fT0gT@J8V?HYPulK0E8!{%>tPzJ5Wy8LgdA#($rUI((Yo4Ui#Eio??-3z`vDe zu$uVH6dQDF)b2XI&1D0yS@C_mj^MMD{E^m!sRB^z&VE6YAP6ytDyQXUG1(fnhIJB~ zMB(vz(m#M{$?NG8TB)idC{%J2Sqtz2sm6(k+m{-xuo}{8 znKC;)=`zM^3O@)Zvt?tjtg6U1qt9LO0AL7``tZ4ue2?yqP;I53>!{Jv*U9bykW(CH z=7vM{Lg10S(xvlz#c{Ex85CIN&=13<%?rV$4IE69*aSUE@D&6Fk!G>e3*f_sk�~ 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 z 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

    UVg6Dmz)fedgYG#;7f+Iu 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%0Ap=7LcrBHxWY9hdE5v+4}I|W zAk)WB@f<91FZEe9Fl*L@vt}XZ%$X%hq)^1>+JFU%V;&~%76fP5M2@+wT_#;2uLkaj z67kB9+e_lkT5VIUmZ1JlZa8iH_~bo``!oiSDyOqk;chud&GVF8LsP2Ol~e{zg${^s zVcmPg8n%}3F48`xhnv=9B7LmYZnxv`=cbd)c}?TdHvG5YGg~I=t;f;E*Is+&74rALrzT)R zkJY!|?s(-DH0Pdse)Ah@6>(3q^=421AE|$%LF)c^>A3QzXt>PR88~Vc&@z%Qb;IQ^ z29bbcj`1W1-wEk52^f}(XJSEpJ|zcaQBI@`g%v=%7EmD{bRjaF8t2-@_bi70P`b&k zvRRHagjnMw~-hJm4zl*F}72t?PEZ@8Z{@+oP z@Q^wovP+PJC63E{9!XB-3w)Q5xLwjb&=a-3!aR5G^i}{6ZJtFec!=<)pR-0e7J)n+t!3dO;6(+24bjKT^G~jU&hz&@* z2}^hrvJ%0qL0f>DlLTq14;ziZC41AcOVGI=d_%BVF*cV)Jsnx%61wIUv}CPcD&!$R zn%c!25Ed4e3+PmVp`;ON%2!ME1&v%&TI&TSp^z$hiH5E~3}y9^QEA%C3o>bO(;LSl*>H;miS!EcEGjD!Z=ox1O+^DG= zMMkVwYjm9G%MQ#6@Hu91{dd8jC)Ro;ArQdiQKL#HSfmfTeyqr_hfd{iiR?x|>Ky3o z>SD2xPjcu$VF5BLAqyTNLWoH3kK9y3?K zJ`J8fMBLLFj{-eC3+>BJECW4uW&0{uIqzJxvjLplwe8C(DzLhUGRq=t2>4_+Y4MDJ zRL2f-w4#7S%?`6v0||vs;gfrY;xMYBajT=DOfuP>;F}dd#GufjyF=?MD8D+!vzSX# ztE_l-5ad~cT$3y)H*zB!!-Rw~sDw`#2MVrn4NQiGlkomH-vndr0)_6~`|jgC17F&I z{DWFPx=)WX)`V`Gf8LW%ep%W>ZAPK+G>}-ZNwnh^r48!BvSGd0E>QK%Li-37kzjL( z$6cDdHlQun#pZ@auIt$*HdeJ#Z5^Gha)MB^aX6>9H5&%Cp>N=Uub&k7rLL^HiWotS}Ad_13tXEkb&JXrcp}| zV?a3qyI7_z$ZTWgo`KYkM9HHc2jLOyH9V8r_Q|ltkNlKlzZ(ZvN4|RzU81?yweza! zz-d0?=coD*GHn|YXvy)%S*Y!r*+ssNTbZRLqM6u+nAh6ZP2JTmRw@gAmY8de@_5{> zVxiZvY-fY5oSKlLW|tPK z_-3(bYo8=OP0lw9^(#u~w=QE`VFigH%?)}z$z@5*G)QqROBU}7W5o)dEA857v-Mf6 zzWYBRH7*HX?rm+eYa=qFB8?ORT~IDkg|Bfqns$5OG2TlW9RMaoW)Tuzok$>Y-&_M% zE@P{PQelTKA~Pvq6c@iotc+aUc@H1nLqbGh2C_KeRq!U!;9NZ^le1KVIXwDv=t+P; zHtAVNODEjGbR#^T5tGTF5;|dC+pz;Zd&i{W)&SmH zIIK9b7TRvH{U2(eu*q;LhJhjw-qU6j-?wjVunqurXs}K?Xzx)(JN3 z!=;s9x6VH!WO9%$Z|!x%Mnt zbp67G*DqQ`%$;j=yQfE^zlb4Yj5?Dg2&*#Mq^|IFOp(@Rw0X?4zAbCR6>BsB$}ZP) zB<7-8q^m*KuC9Z+=|-+xEzHP)2KT)TIzBr)-}+mIbt?65QUWSBbfJ_jCR2PF_j-+~ zQPb)5btsfRhGFT+&59LeCs^U<#KJp-$K56JCvZ_Lq_TzFkf*nWDh|CfUzk# zSYM0*fm#O541@2XR%T(-_(Qf=!lvVPc3S?z5Z{&!*ZnCgandARK5wY%vvKNapTtp~ zd-@C>%pA-(eQwD{a;^DUr%Yo*U4PlRb5kl}r>uC~5=Y1~dv)FxUB19&aW7u+5%q|9 z(t;%mr&xJC)*Y^VG#l=Qw#<9S`tN+m<^~ZxsSmQA>-wStqw#{T@BCwN z@th1khtDittYuGXRW1!8qArDJ?YfVT9#{X)9U>q{42W0A?tzLJ*6`OO0Hc*A7>Z zB!C1$z*2|(Tu<0d24hObCi8shmG!bx!++D7*Nw^`uO~-g?!FqKq@lHRhK5 zbQ4D_Tyy^HxaQTeypqo*YeZwv(ges$$cOe)H|WILo?fn4z?v}Ap^Ev@?AaFsuctt( zCH3Q$oreCs@chLEAx~!z%6d0mzuq%#|CZSejnoa4Hp9zzB28hfJz!dt)g@NAv4#>{ zkRaqAPqMlJ$Zh~Xh})S>*hX+cI)!f*WZ=x6!f6APP~b|Ca2;?V2JbH}_D67yG@1;? zr@u8I_6#?m(8(|NIfTdOkx(Hnh!jF(tf^y~h{&X0CW>Xkf`mAf2uuHh1A9bH&=`#i zfe~3mx_gsCsfg80Ju!UM75hQIM#U+de)f5NCy>4cb6h&>wAopGVvAR88XQO6CWz(Y z!h#~5k4p*8K&aL02?zviq1gf~sbD_E@cY@}fIPwyz)?{FfE3p@@b3rzbc_HQ`5mE! z-#Hw(tb`wCdFd$$`Yg47?*l+^g2F?<4D96U^a8tA$wj+|SW?gM=}SQPnVi49&o1g0 zh9>V?Oe&?^<@=^b#rJpf%@Ie{8n&P>##smK4NWw}5&+okca`%m-CrW55?1caeY*?y zE`RvCed|4Zjhb{UJ>|07N~gSX%|;su9Q^L>cf51<3`KPAB$LxPG(Bf2o)k7)CQbnl z;D=xBX_f~x+s*K+;hBRB^uoI8^bW?q!LfHLjwNt~9Zz@2?Sx3R@SY2JatUYiHLL3i zG(?(nOD$-$p(CN>SV{)8?) z^^T=-o?b7I4{W`DoqgiIO>=rQVvkT&n7H&rsk*Vr9yBj)SQ4vTCVfxe4b|6czoB-a z3j7vWGx`Zg8rmDMO@{@)#sAoX?2#=f(;cludI>?FZP1=qM}xOZB{9zlm)$&_ zs}@eWX8#83V-s@+c5viM-tf+Og72wU(Iq=?U#vd~BNzQC2VfzWS!z)X- zPTIF+ZjV;t5h_a)mz|_A#FjZc)&&`BWTDfnt2EF}Y{S&EmJevb&M4~hwlx<^CtX_N zt3kqb>g-@0E)V9!x{a<0^%V7s;;eJpR2B` z-g_TOqtP_=-s^OCduBXtm`A+C(Xu9>!Ouh6(K|h@Tk{| zkSebWYr4f&;|9{*)#>1cp=|d{(58NQDCfdYKQ;?3EuyVrIqTF1UzsISNeKpGfG~iG z*nHv8&A&S#E&Y{xvhS7~u8whmi4E+!>e|8~ZYOlI_4>h)*@nPHZjGV0pSqjh9*TI$ zm?~RI$cY~Dz)gF)*fI$#_icC=9`N?XTckyht2#j@fT^G*_(C<~6aBjJ{b16S0$eX# zg5cZ_2RY@>;L_ngqi<4kz`NPMCd8uXvfDO-LW8;O#Hy5xIfJ8%EV^|AQzYfCK0L2W z`Ga0V)n<%ziAtK`fFaV2I(v=1He=K$E@{U?#<&lKdKH0y){+j($};doH)lYhm{Ci&su#c`i{yqvqhhb zs?F{-ep4>3R<{h<_3@C(;#$>h%p_GBZ6v7GCt*xhU#Qqj`3$v8o80R5*w;nX;Z1I} zzS;-T9_!Gs)f7H77wxS_2gLJ_?A(`!nMk;8H0MdkgrOz3Z^rR(`-v4X31TILFJ$*WLkdf-I4fhiKZ7}o%rVB8SJ9fjX zSGechb=~$cGhd_O8fLB8a|DW(OIq5^>x%l&Cb!m5?L#*_+xgQYN8p{{Som#*2$Gcp zQdJCgm)5t#&7$8&f*%Z!fcOSLSgGTv!1=%`%-D5yFZy1;%Ejx7 z1q866j^JwaP&svaI8MLM#STVQ!2y;wxb*lomPWAg=8+Bs^;b{_-_!?d&(o=7H2Xka z2#f400@;%pCBW$t+vt2WWve8lIZ3=kv{p>FDM+E$%NB5nXi_b0bE4PAj$gSFyx3d< zRc>_4kxiu+se9FhOIp0v4NjrGzoM5Is)Ht#rKfDr87h5NyJeuy>^Aog(U0K_JO(oy z3HWQc5bonf$?ZWrK@#5G2j99_o{iMcBd&F|K}lab~!kw~8K4?q;nC_CDS)XJ47mM>3J+ZEgI9~1I) z22xzybmuDfz||Y)bX19sct zU6dt|jeTCCgO5UEtwwx<>xuI;V^r3ajLl#kmSOE3|X(J_ukPi|3ei`oYmT2K!KtL1P@4PTj-zhQeNcNR=riWklgG z&Z|M5f@N2TURo=4~yod_OgJOu-;_G&Z{KaAv{<&Zj-G?piX5n1`wlZHI^s?1zUN|T*pi>pSYHr2VAwS` z8aFXnmc-%`?sk?IC9DE!kUkpFZt-v$ywK6CAUlIzen8mT-6n=@@@uF)>RypI*1~~$ z&lzFb8olUq9+QG16iYE>*rZB``KS)Io5sJ?yFs#Pb_ za8!;@PebI)(4ti@6bNY$tK#)6bkR$fZU7oosxVY;&7SR-yK(r$;7vjs3By_%c@PK6 zVud{2#gKCBF+QJrRZ7?C;uW}#j@tbtK}&BMszLx;HvZ}`01Rgtj z7=5cmUD=LD;!(T#nl<=2^ls==o2v5YMT_uj99|ogP?r=0j&c%Q;CMYn#aGh6=Xa7S z)dGHNhnpMZw}6k)IN(+l$YfO_;y4(7Gk;$8?s=($11QzG^PVN>1M0!SJ8rll1a&mK zd)t+VDxm5<(|7d7tK%Gnj9oeX^vFYc-)4YMP);A^`x8DgC<`ax)g9n^#^%|zrWy0$ z1T0|w^`nNSg9H{b2Z?JG24gnk^QaG2G#bd0A06MK^VIyfcT8Wp38DRz;{vDq&pWQG zh*a&RtFaC7(!RdEWs$QSh2n)%%qtP6!r{V-a}HO?#By)Mw}}ZRlcVCB#C!)&ViA)3 z+HXn%*I*XwQ{!d3;E}vGq6K_!-UflK9b&$x%PU$PCd5W{NNJD~PnEAIqPw3s`D(}b z_z2YG3Re5N&4KSyWjBjOFj;zWt_}A7=)zvoCgiZVB;OfeFaYl#y&mIzxO+G$>@#*Q zvjfLcq+a58M!J9p3`Tq+w1d;Rcot;Qfe|=X-1~hVsz#g*{g4NXKu0a4y;tz-q{XKA zYN^y%=8dc5bA(LPtfkTS89F|fda?5#kJ5T13kYdjN#=3S~voFgKa8i3OTSpy1 zH&bh16RiL$Z*1jIDJWKi1zKfDt`U5k(*`vi@UUk>+1+AhhXgKftAOZ$!PvW~b;Ltw zKUA5R;P6cle3IV@d!|^1q)04-;Ri14SM2lgy zE)(?C9lef=eIxXSfzhhY50@BoLig}m{r*;7NRiCOqz!%x6MprI0OPJCT-u2|J6S|c zV#PZ2!lww7HBCzs5+P7?8*xRj^~B1ggf+y`g%=;Kk3beZ(itg@VpN2~2`TU2{n%F1%>Dzgmj04KW9aEe!-dnJIkZu?K{T?#MR^Ha+3Mi2&XM#$82=*hSSRXmQGm&JDE>H8 zViR36({cONlE6_-uoQA$Bx~iboCJ{4Jm`WY-C~=01-}(Sd6@6?IEAPMy-juf7Vpp+ zBjh{)TP!&UA>npkkqTXVeSsn7=JxGm#Hp|K9lLQ~0++zyORnBuxOyTS&oZfIZ zXHYK*qJ@Ycq)g>vlJ6Hxwcj!l20nxOIjnuSBm_HZnVF-v70|s=RjXYnunS;gCp;W0 zL}y$ZOCT2EU010_{vU_0b}EHJr*rxvvd*EFvBMw^-czfE^FRTd8}Sh^CxLrk|Lta` zoWK6PZyjx;e%jaf`#U%q!Ls{yQ~wOPhDxfKqA;|kyKVlUCZO)0|D-sv{I>N_QnNPS zy*ei&`nmeZl4BbQp%_Z)`9Aequz?{Ngt{V9whq~1K&QbZ>K1B{_=sUzuzzV*E_Mq= z(fK=v7RZKf2n#Gc%k<&5tV&qZX4k}Gi|mR}Oy|_aB7a?U{fZQn)LK9fTkl5=xKi3>veB&x$C6``1 z&!>Aiq3%lr!+k`sYOb0yKyuaIuAnM--a)pX>bhrTzy58z|1$5dgfER^b$of z&KB^9@_gjqFCk2EARotq{N64M1;>LMaH`Ll8vbEDAf{$v1Hjt6J4LwQ?X)BDC)RVop9NAlk zKRd73mp?r5-lkM+ck$Z-K@S;Hri*dei*LMvM6bSDsvT=&qx+yXYZ9^b6`TveWa0C| zOg*VIKT@4bh8`b08%)Z=idDtLk~pV}hM72rK^g)Ew83(|fvb-cU40a6{8f{ zUh4791xBP;6o}Xx_EjZf7{Nt^*ePTnCWoK9VwEJbW6eB^(8e?LkF5Z1!UlNzyNm*z z)9XIR-QXC4jsM3$>rBHX-1tQJ6yQoUbtFv%6cqRj$kdDpqI2>xT`-T=BRsl_h}K^D zXHUbUgAM?j z&n&R{e8wNGZA%wAozBI}kvw3kR80wUZ{JpX^2)0&?zD96*t_>dyL;|*v&k}h{%@#L z{kPt9Z4!uUR?j2PEohRW10zHA1YYfQK3$j0k@aV{)z!xcKQMMK|PC$ z4gh`+8U34GS{hIDoSj`xURWN(?Sg|q0M9XF0+^1%kHEYv-l#62`%)n&VF!Q}n6SQY z7NR(Jv!*nsn!Q}CD}n0+1z3u}!>TaYj9(mFtl^w2+ZAiepbvVW^h_$+TWh-*U5cj&SO46%eeZ)?RV?Pbb6gO`qB@^{HqGul;bYF!Tx#)epGHMi9*Kz+pGff@@9 z_4lLg;`ka{i+)jD+qu}T)ugiz7KO78Z5akXS!g}VV}r|fn?lP+`{Q!1PRCc4M%Qdj z?tRg_dfoCis54lBOD+wf_xA69^Ivb%fd-3jdf|!K=-EjuP+boK$G!FELC1||KcG3~ zsDik`2(#+>h&gp(PMrd!?*hzre-Z9&yqAgMl~9A~WIq}$5*(g@PwExY2<*S%!Tcv* z$mZ}ti9xL|>pOUD;b;d5d>=#TlmIW<&FM@eJ2)Y5tw#*1_WbkIkBX!N+D`z2s|CgK z5P;wyfZ(%fbqGMP#khceKoG>>0iofFVL^d%cXK;R0he0XIQ96iW;!F?2dzELFY#W*er%2~zY2mz~D zB4U;3<7PY=BfZ^iyddfBXchhsOd>8XqL)h|rK0FV93IP&;*%Wex9`4t=be^FgpS;| z+|Ypir=A))!u2eeXHy$z45ucd#$9B0%m<$~2*VRZN9pX(8LQ6z+v4E!SR~LZFzrkd z)2VV8^@b@fTtU1J>TC4-!)JhPj@#*li8~;&KzXI)Ox^Aczy}^${Y8SZ9X>woBml98 zb`b!8^qC9U*x=NFQ_$R-ng<*AIgIZ!5k_+hd_k4>t)k4zuCmSFC};!iqO#EIuiaCY zWm*f)%m6W1dyGl1yo^)d?&y()f}+akSib@`NHayP61KHk;6(;z^@q8G^Bjd9L+_k+ zyt=)(l_*vb3pR@j^)hM5g!nvTCkc0&CnT9;EZ2ycXIbDBwhWtPmeDq?HkHsAH3`^1 z5nN%j8ODfH+3D}6R-~wJsI)wJB*YUl@;ydH$Vap((>s^Du zlek29{F=ok3)gIfBX&an3Y)bFrWt_nu5YGH)20A)hZ?X0z#zK(!T|j|Ek$$bZ!O0mI6`VevEjfPkDyEV@zJEBR|7Av+ibsPPqQA#j zGNlz>ckNfOn(;Z}#@agcKsdZ{i8*3kys`E|;q7cz+BgQgD2u9~A~m z^+!cNw$Bhu&3D;M5luY?Zeax{pgXR2@EOByr+q|6?H%-9St3_te1w=|j{`Rc<4FIH z8ZQ12qs}xYn4)>WUm+yY<0hyO@iI!ks#9dpFDKgrZNUDzyV`{4@p3r`E9yI8Gm!3$^2nebi%p$C`bFORm~qxE>gg*%sVK z=-2xu{dj1b;bt=+IrR5)XNE|m*JIJKveZoLvmf;Hih3>4CbNf6T#332Q2I;B!&Bd3%Uku z_%9&oS@bD|yhO0}S{nU;YJVB;(WJ7U;m}Uzb#bjvYB#Uvw{+G)Qn*X9W|Bm^v|RgL z8C_FC&f3=)gMav0ogb^iB+QSUo@kYvnS@Cp3EEo!%y2#6)43r`;}}wJ`)S}C$B!n{ zY#8AoE_fQy?`%RLnwOpYjFU;M88w>43ULKEYrTu-sr@}YnI4%B2K>}&zCGH`M&F}! z)bGor4H6jeu&`ZcV+4zsqF7AANehhz*eR`6&f{8KEhbKobhX1*{KMj{1@z0BnQ=_q zf6G-q?B?6K^WaFSj(8iH`eFD=K~^&CP=lFs@wAZw2hchr_5;8Cd2uavnYr;o*d z6}GKvSyh(G@Qu9A?-i6ukH2=Ztf{sZ+!aQJI&FL6i8A#f!7kVS#5Py+(5x@?n8l`Y zPAk_IDlVO+QZ|?jmEM3nw#{X=ZGcE`g4g-L#P{Wf20U)>RRLPmjbP|LHolWA`~$iV zHm-r-_v}V}2snbS4>85b0bAO}uW~vk(+a`*-)MfFz+pA?dFsYcOY_$s5GQMMFDDMw zE<#%L8WlwU=!Jd(Poa^BEGl`?g@Crri9}MiKq2S;BA{vGg?Szd7Qe;BMPYPJN-WM1 z9CCk5VdbP*7V5n;X=yjb3|=$p?z1l3efLr(Y^hyvblcp&mH1jRPikhC_!_bx&>(*f zJyhJ7y9m~}tlB$KF}lP|0x{WSZuio43R9n6ZRjTs>y3Rzi*c}al-sq@&DR&J9%1Vu zyVS8Xr0~ogGP(8D>BLj=Rj)pETZ{*wJb1%H-{=i&Zsohz?G0>pb6VHKWodz4*o(jo z*1;SW@L^jxXsJ$7P)&UYaN3YPo9}=Q4)`X~Z4C&W&8Nh8u|nDkP!Yll$jG5E7b-;& zkwS!cDOfw+Db#Bh&<}v^rys!cM5OlJU1%+JlNp_DTnFDnVl5bPcAwjAEnm z;{iWjefZgt!(5P8+3`DwYy6vARajniy#5RTvL=HP!d9tmFN4FV3kc7=y@dCQ7r|0jzGL3e6f+68qA|9TQM>&gpAaPi{Z=kr@O*dd#dV20p>%6=iw+&@`G$AmHwHm?y;-8dA4r}V7?S!TF zD@F{b6uJ*DXNPuPxvzKzDsL>P0ihn>69{zXE{>e$L`A)pnTvdw6YU=EL-YFjsE@F}&c`Y9f^~5=24ic6uQiTtq`ADr z<^>k&Z(riFSb9(|qoVFPw5yW~Rk>%wo?PuJ^z&+qs=9BJlMhvmW!dg*cGtLx3xLD1 zXU*d)knqGpE!ufb0(mX}i?Hou*lM6@&@%hjX4!&v})h`^>o7yw*NTF#PTqo8a z8h&4mxDLN!DR{FP^8|6aHrqw~Pt8HBuR?Jlk_rVzg*?}SVEj2L5QP|nLEkSLl7^tvWjk3QrED8m6p$?F3W^z0n+5*9o@H~2sE1lshE*L4 zJU13Zo_W34e6TXq!h?z(ddxRm6X(k1tjg)9MhkysQ0LO|LuP z8nhF)Q7dzYui56|%9U)#%3XV6^mp(zx;IqEjMz6=JGF{gG4sc3ZEH-U~Zh4|nF(eb(o3XyoWKpiO{eV)3s z2#&m~+NouX8RvG8PfZ}?CwMJDB=SS@XeuZ{7x8e{)1V)~2-yZP>rO@j5Hj|kx4|ck z(rIvB{j*}cj|)m@5M!?}5P38*9xydQdRUmAznQ!@pI2NGDlmKg6UvpuN@XbsBn{h@ zC83J^VJM`1>#bwQ?f^3WqTDb4e^ryjhRh$&eq?C@k_Pehdc2H^N1~TO7rvW%Dg6T4 zTL2p8AY7%}8a?08C08FPeo_4hSHKL<@Kp%pV)*JUfDEuX)J&+d7uFS5G;@kc2i%^) zuWM3(UEhZcvkiW>33t74SOT4;t%Hfv8KgFvat+Cv$qxTj{4$&MM-XjEU@n=h<0mS1 zaI0=-Ti7C#F$H!JTkUnUmjf+olG=gR zQ8yA}W$&3IEQOML_`Z0%V@TDZ8mQgO(4PH+yTnnrEG!i`9XR;t`5QVHjn1<3^;}EO z^qH;^Zg`!|3^N`o&wPta9Z%fOb$VMs!|d&BBZ(u2KmEb2vu7_9sM#|XI187Ydh-uo zOQr;GQ}2#(6-v$wq(g7H6%lp2Dlw~2pnik9umO%t!pz=wJ7zFCXn|@4&J}ZJtx%Oj z0pMe&$7Q%WIrq?-gFN_{a9ap>p;@kh7_xsVwVWG{BO{c-47cF{6Clr|;Z4vv-(OvHIsZ^1DvH@rSfa z9gS++H1YU%i&XwW>Y1u~*;BWKgch>v@IyAaZ@JB8S{T&3XBsuiQ1l6pIs(h!l#v9o zT++U5`IsBxAKN~2{u~z^9Uc+*1|vU_8zx;*W}TNC;Dj(rZ6K*8!Gp0nMpL+$$3L6~ z=z#d&=x%?rKx1}@`o*kbZ4g(jA%RSAHl}P>dIWmyT+-9s%JtC$5U&vS+Rt@Ff9;6_ zAP22h->#_BC0qpaf{WitS#wcIRuay_AkL}&dKX{D>cPOBzK|yqF1l6gHvPD_jlG zgI;K#mO3vPWo^<=V}3{X>(TODsSJ7X-|jBYlh?nscuX>={|oVdf{4|=(?Sf_?nfWXCEbqUC7m1%uXS#(=A&MzT3HDZ z5^h^o0G*4?c#$N-nzj#3w{_WudfsuJz7h+ouX&{HtVHD13~w)j{+63vH(hQi@r9_D z|8hxgXZNyAUoUIA+l0M>*3R19Wo6b`Y{@Y!IZB)%E@HaP$*_X2=g7K)n!VIdjj&OS z2`-e7HL(nmEL_|L3-=VQ%1BCa;O!2MO2ZHT?oKm9vGnLVE68!##<9z1)+n}n%)+-W zY7@8?TE*5yUX3A}(dvMohB|VY&1hN#cM9v$j?=X@2gHv?`c7q_wr+q5npA`s4bPE2 z?qKspPNAu%G^?B8z4;_32j@X%24-pztY3IME>CBHRZc`CKLHaD>W0FvK~+|vRb^8f zYKYNnA&rw>p9kKayB#`e9|~IIE`g5QngWTLBttDM5O4gja_EXMIKKL~UYbIYv$r!W zXMX~8^rIM=)+J=8o*n@aK%;XuIE9VwPCz)5hhl#5-^*97G{c;D%a-f=;X0ZDZebzT zB)Bv}1}uUU3#(|h)9NOvwyYNrrKb{ni zoSO*HadZWBsT;5UxF1uPHq;G+!Ig@$$N>#kfiIUMca=aqxk@B5t8ld>;I(8$LJ5bI zNjbjULh2W1m{J+%qSx-LU6&_YDxffxal@efT0%Df0t%hz-}JO5&^&Wt$*`LjAf0V4 zA@P&k&ca8T_tFHHIx*b7e9Xafj4s}z;SP*PMItawMYs(F@ zMDPCIZt4s)%CAZAZB7fv&o$Z1e1?m9tN1|i!}x*gu8n}BIy1QI@=L?Up`(|$*h)3o zx$pk@U-e1aIuv1fXUCgw@_;-72m13e~=nyF7`O{-oNLMM^WkcqVJ zo2Xwz9z)M&&i;^b1N9JAr{LJY0*(^8>h+PmfsvW@^95$FQar~+f&QzQ)NJHp#XvSQ|n0NL; zJMn03=n?cJ#RP}$=ZJtp?CaQkaRmIl{p*&Psqgm44f@eCL&A0EyZK_?t}jkCmGzD| z_2{N{O}tGo2tTxSFQgspxKfXjtOiDgdrX^szEr?d!1x`)HCYDN z1nV%=!deQ5k9LtkHwwfDNasnX*Cj*`RjWtQacVJk_T1XOb#IO{@^l4xY&UI#l7~HW z*DNhE2fb^(9%CU(^;Iec*j{!3ct=cbG`e&rpP8CMj6Rq|#46;Q`CT#4e9Hnc9{{#n zEY!*@Qq?x`^k#8R)hX7PCgGW*N<3_Ji z;TNjaI0)~54xm}sZe4lBkt$2cFI=;8q2WKSJ@*WAq+<5y{d>LC8&G?If(*z@kbH~> z;N%s4nMUv_P)@M2)uda@wYZ&Tw!faRZ_GI_&H@3-&29X3v=m2y*cB9vVI-4Gb@k$r zyi#c6OXD+EBs(*!`xN-3G;_9BPS$B9P!!8qRV)OlXAr~S$b1#FMHKkt5AZzxU@JeY zO6FryV!mwp!7hxIJ$q(=J4s1YLpP|_4}l(F&b5wxn$wC1jjOqrZ}&r{#Y$#SW9q;OAOY9Pu; zAbTRC^jNtCuG#%~%31_zwIo`g#?d!wpAbW}M>i5jYm1>8{VMTb>|w!ycaH_R&^pO~ zOeNImO?Izoxmnn;7JM=D6@$u<&+7ELT+v`Rl#51}p=00eef}hP>(c(|(V>O7(frD;4UM z($~N!;w;t%Z$LY!YuE)*zz*6TuDyf$!-d1#CuvPU(+<;&^Xqy|0j<}3GEbeMZh{Wc z_ZdfPAKqV}uF5g`1hb9?SwbPhcW8uq1QZ$oiRo80HJ&Zj1~$7?xWYdyh~^`L2(8kG zlQ2VEza4}uSSnoa7)5|z&B0TG5@AYI$K@t`WWcpe@ZT&qo24d>VQ^sZd)kq8DjHE? zQQ2!yg!g4}JdYJ^Bz)@*JkScNVA2ay9%0f20La7J)@<5X51K6VL0&6)@fkdW6Rfj-lTANWw8eC>sV1a6B84p#2kN z>CJohrl?P6r71hQHa#~D`{M&x?!o}M3!M?^0CR@%8gM)ecog+*ptu~bKnJNV@qs|? zqCfCwVOJPnSK|bxT$cu?GbMaaRs`qPRK%6l>SO3e>d6XPTM;W&B_AQ;I@6?#dJ6Ys z@sGHqslrwpHP4wx%BUgSAxx3&p&Bha|Iz{=po8vlxbJ#cd|me_JZvC3-mv5bVi6LFEg?e#wH=S zT3A4^3!Yg6;r}=37(UA&{6@ze8fU5DUQNs~(Ac3lI*)H2ro!PsIdnx!S7AXyq+I&M z0ggn>T6gE#yqq<_wZzA7S;tiImmeGs=-$nUlG#usMfj?wiYcRPZ>wF0rQ(Q7eS*|o z-VNJ=1j!C;7{5EOu<_agoqPyhgupIlDm*P5TYHC%^h4_woP(_C|)V+3hnZq-i@MIo60k!{vztOlo&j zW`UK6ru}{mOrG=Gs8b1{oRJ}T^1cw#4Q+7gz<>vAjIG*5)!TA&yah zc;#Dsj&IW{7uU6V6C79@VE-3D>>`2@5GNF;Sa?x_`U)Q&W=c$TS<)BXRLm4$HFurd z1T{CNcJWcs83b&1m3Fuusbx1U$8+dwZ(CK6vj%yl#M0(<^y}VCX!0FVZ;|koLF|~4 zw|l7D2}SMC(8QxUspm7K4cyC>JgbTK^=cL6E0x+;k%9VcJa_8PsDJv-ncX}*MI=lt zIkeDO-L+((dEI8OCiR_5?X9K-LA`gbMXQP?(SiKK*#{lwa>2+2Cp%RnqDC1?3cBQh z2T~|@NgD1Ip3cI3^g8OtReK)vD62u^ec7~qu*2cRXL1D2h3EA`>!4H)mkRfio9K#$ z4{)DAgga4~0{K0qG=GHm*7DCeJtE-9$I=q{;zyxArFB(3TO zg^N+QfNQYZ^_&pj;cg+{Ox*GKFk{Zcx2Mry$dZe}g2!<7Own`g46cDcu={WhCK#SpPoNose9E(hO$H<3Xs>@+XG^5}Gyg5P_1=K}5j>y@>6eHMe5(40!LWYaRT`6aZdy zgkW$ONhXiYIB5gUz~DAQtMxVYj6ahPu|KLEO@DHw?*+Zf)R@jLDq(qi8Aznks=N zTx|Y&A4baPR=i&8xJ>GIjjs!Eb^NX+v-Q+ps#1-nKMF;#IppRFxabJPM#K0OJ$M+n za>=OXELAKzKmPcMCkUf<&c#)Mk=wg-o}QYKQxyYgU-{vJREsJ|`9xmPVq%v$2K!TK zOFk;ei^DlaOYYJX#cH(|Vk*9#2NNs08>t;;E0@QVIK>zf@X;!UV*Kb@8xO4AO$+zV z;lZ|t?bNHu=b6QAb5*26Y*>2j5Oqi&-Rf$!ual4+>srLl4V?;OAp=n;SF+oU)r!$= zs`fO{#hnvHA?|CtpeT$%<75ULdSmtsT15B^v78Hj!?7DO~ zOE0XV!~!rv_G$PQ0T`)~pX3O0?o|L3!rK4AzRt*1MQDVd>OYEygkW$4cbpD20K>rO z3@y-HwDTKQOm?;4j(8#@A?8UozLE#YB{TI5mtpYC8!~g{98>S06%Gw^*)L5wGy`;m z&uNm=bu@(8I`cBAV4@Y4_#okD3bpiA3R*$4)I%bv$96}HHOJ@XX zB^Z@%pssI0&-YM2D1X{;M8LiqU+joL{37?G9D4cYprmz4i_9^el65Yz!A_-Y?U5Yp zBiM&R)GN>{r<+MMxgEM>@4n*X1mJ}Y5a1o-(f(H^&PNQobQdsKMF`l~B?9I`@jIrc zha106Iy18%!(kCW`ZAad=X^Q_Oro+Vo*sV^CeRt^n^gJ~tQ1pbhuq+@+B%R|QOn47 zFk}I(Bc65SsK%ez2j*w2wRfy7(r_#>e#=^bW6KVX1av=7iBqXSC`BZz=88EDPCd2v zARhL#@C>B0l0sh#DDy)eu7UInWQo^v&r=e#h5r30^nbNHi^w#(Hqym0IV><++0tq! zsei7$Za~1nNinwgz?h}7ZBb8<#$eve^yN}{YOTeqTL>6zF<>wdt=u4utRFSQ7G&Lw zB~fv7-FzdAoN5LZ!ueu>2G%0rq7h3p>Vu-qN&hXFg@v03Sq#TII?&Zm3HU7haL+}p zn16-sgt$(|KbRBy@6WsO6}@rh%#PIkbC^SSWC^9ebz_hri#`SE~e4zn>>zqzZbe*GYtihmYVD3dhma)B`}m z?oV*RgcOem?!VCMC%b@z4T8CjUkpc#@kU+0*tD>0wm{23c0;e=GZpD%rx*@=N@a>G z0sJ!&4e0a5BoE}gCPNMsEfl442$AqF*HhZ71?;}moS;}aIYGgyPf!?j<78WRD^Sxo z6uwC~Ywxw=@zpqPCw^EiuR#{-c66GWeWol@smgvRQT3fx4#|03B5HH3@UfLVuvr7? z6OdoWZp5^sj15AV{lyz53aMV)y3*h}{Z`Tk{Sz3ZNCYJ4!!-3me0zp?cQ5QPh`#m6 z{{nBrVTc@c=M)}V&9phoTArFCba~|TRmFai^`<)$$PK59R zB;QRvovMf;sER{}ClpZlm7xeU+s=Rnf@XZ{NB@O2tN_H4Sf7kHAJrvj&6SZ|G#u`Q zcR#_3;R*oXI{YgJ{*zN1eIc zOjEXX{X4KAsCSBKlSK-0psUpFn^yqh#2J7DN&$9of z8I?uWgQ|EXd~96AzW|FZu$s2+RNVra(Eu&<7@Yk0;BE;YyUAx@?9!w{;27|sG}H|Ag{(5_ECCq zs1yL3v7ws^g0OfxkV50rHsTC01r$%2`ofkvL7FgvK3u~(yO~AnMGx*1U+{sQ+u39+ zE{S0Js~gk9QQ*HQ2f?5U<%O@8uD%${JdPBLzb+OpDsWwW8Q_`YIcr5WZ%CkH$A-Fu z)L;%~Td@lfC!CquBmOY0?4%ui=kQz|PHu>AZ*3ugcngC?6Nf<)#Gp+0Zl3BSjy$mb zSB2w${p;UP6t7t46j->Hu?^jeZZh$$V*S{jUUWP4FqRo5>F)6EYYvpKWVGHL?!(<- zy41OY4Clf^A4o~N$j8^h z7p3OE85ihuWV=A6C~>XOt%qG3HZu>ln09OlF(ho?ipOUVGPcrb!Gr-wFP(q-6Y5TK zbuBtJG_t^*Mey#g)8HWN$#ijzf>_Zmh_DonSQ~C8wniK>7WGj&jSlkpZnjuXcJssn zCfF>V8h_=P=^U6B>j9zk^=#kLIcAf-e{@Xg80s^~OoP*@BVcpg$@j?uk!}$&J!Fch zfa%kuLMoD=z8Bnm`R))9mCW3&cN8uypbgxS$8Jq91tcSS(}Qa>hUfKj)^6R@%~x~7 zm+x8M!U*izxyA`YD?HEU-CNuD)?OyQ&mcR-M{Q!u+|gEu+cqc&CJUx!@@j*k0B>-k zMFTi7VW@=Pg#3%3X!B_`I{?HA(B}8_v;*w<74;Sn$tU)p#Q^*kQ*-f_`(NR~yI6hj zPQD@v9Ufs6B#ekiE9-5t#ax@q$`0_%HVYrd)INeW>$fn{+1dwr1~0NYttEjGuEiW4>DQGR!{iyxGMFP9iDD+cO^;j%J-2Q|`!UIHrXCDWEeyLIEV zEz`EcXNS)_g^oYJi^HOsPH@m^xV%gPBp3p3jz!qmE+s51444DLV+h;27)n)UtG-$wh=|u=^sXz;)6p;p*CJr6xQdVvc3S+A~L z>?EzWdp}c&&lO$t-6Dom>8~?YoSub2p#ZN^2H60EV6a7FE2xulDg*XW-RSU!)RyeO zQZ(*7O{)Z&KIWK%ZZ40%2=)ZRool{mpzc1$d%qdu>(`B5Ku4E8%`J~;;y>funBQXH#OyJQwCh@j3>rl+OpPns$IMp4e6QAC(yDcRNY$kZgafLmG8BtYOFiHlq3|h! zA*5S+eCK?V(9YKmtT{x=J4TFl?TnzNb-GEZ3PoZo?_Q(Dmh+aKPws#Rp@awVI%5bP zMBNbxYrU~^DYomt3tTU+KM0&L>jAh))7F2*)0^su7%nFOJc;@g;l-F||0R~)--qi)H$NbuRR&fhNT6}0(lca&u*chQ+z@#7kL zu`CO(naeYaW{&%$#Fk3?oEz6!p_4|scHg^H;T5^vQlHGz`ie!_-3_bbr&Axd$~!t0 z9g6O5v`Jn(xTlLWa@)6EgHWrl|4UYqp=wpCB#5to^;%Ebjgm>a-*8k>KNM;q|>)aXax@8CSs zg-73c=N*{xSV-NC{`KP@{}}A0mQlBHB&p@Mtib zol5-0xoZT<_)2q^W;m|%&NFLNu>>6!a5HtX9L0nu_Q@Fnj(J(rdJ?B0x)g;7>Y{Tz z9Y-6gHK0{KgUqI2<@1AgGeN;Fh&nnX&^lsz?TibrsBmH*4g?y@L%>&=%H?#Kl(H-q z4jzi)LYQU9YzDT@tYbM`qT1Onh}w%t5b1IKAVR_}J7uQYH@m>n@&{*F(O|C3kB3&EK-|@_Sz42qYmmF{BswvsCL%}Ne1|NFjc&$dtZ{lWbnA4kK>9M zOdc3{A-+k7*es@$Cu!o1A`j)7~yKG$b-!m#x-F`Ps9-Y^q(GAGXzK>fu{MWr+Rq(;># zSCcw%EY&d!H?86VA zJ$dqZB%nTYC1Ec;Qz7SA%=|l22r;+}KG?b<1``Vqc?JQPyfTDbww%vVv4vVLkL?!; zJ-THFW-`Sx&d?R3s(UO4p?}F;f5ZVO`}FuLUmF5Wk=1kRso^7>u5paA2Syht>_b(( z)HpCmUCHl)Ar`+Z9QBI^c}8gpHr*3>9bFv%kz0cwC%B-EdV@>8}3*d z@40%Jk+h2Kn{S#GFI-Y2zJ2xpV=MJ^_Lce6>1D4xH@)#SLAUb)U(-Qe7r5#AX*XS> zi+ZB?GSn=1?ZY$l5n?3+P867K!v$v!;@QMNQ9~%%SZw=Q3Vq76svp$3$|bY{CxcG( z4@&%2rSkuXwlcM-uoAB%gP#@PVP*Yi8lC_yDw9#^Y#$*|ihLr4@SP~B)sP;(QeMUa zKXxb2?6C4Lf@Vehz}derHs3NbLOtHwyQdedslG#8MV%P`_EUpgFl(U)zfG?Omt%Xm=Bivi4_s^g4F>WwEe3_zDopZum7uB zonxG}xI1Ap+gt=udQYw>Mms+?Gv<-7tqfc^=Q14M6`d7{~@T?;1(ycL~PMFt6 zJ)j%5zc^tBJ~BWL8~|Z{hr&|S$#lJs@;kyE{IJX)?iL~GyYD8bul|y6s%VA!>Q3s9 zz|W7vy|ThV>~>*(2AHFYn#hgv}WFQ&Yq;Xto@;IC*Nq_EbUj2QtZbuT}Nr_w}>%56&$6hFsc zpIozs`tI1+4Wpw`>Q3S(=Th27Cb|iewoJzbcp4+52q%IPxLzg@C4UoUjY-<|6z`kD zo~KQx2=GRq*|;TgcubgO;Y{c{nzR`al=>0ez;OM!;Y0=3$3@GvK(Ga!R`|O?7X18~ z2aCp&G0EddSlj{`0ONRD{42UQfD$5I2LTc^7MJv!VY?%B;;`H={SWV zp|de9V5zrJFj&Gs>C1KTehlvI_rcF1%)`GrfY-(fw8H-Wf55QiTQ2l#%G^V&u6^ZL zfwZJU;AhFrCZ)rE#Fq<$LYd%$By5!JA~njn&{TDC{j`5PVVFJpz|5I(2xDKD*^644 zzK0@UfzoJtB)KBT*h!tlT_>8C?R^LoC?NZhySUtEga2pzAf3tbi{FUyAz$w9L z0Z)P-(nLqj*BEM_{3{JvN#nnw$p`$*VgW6ltl+lUigJg%kSj=Y@nk4>GA~sT73HHD zh0Dw>a!f7HrOcTq$cV$~Z(z;%$`V&9)meC(7~NwiSufg~en3@d=uZbWYbvgv4EN_oAsQXh=M9ho z&KzdV8z`~~G#XSmuFILhm!Lmz!5K2l*>wsH+Ie_}j0-bl9=G5GF?G!cGLuEs%%8?~Y+cz(TKLBD^jWi9@P6xS^l+yR z8z{7$qvRU~_y9FzJzh<;1r*QAw+sr0hA9=A^75NrR)j#i?(sdOihcDno6XF! zAUJ;iZdjH(cFjoC@?Juehz9~mBAs!}c64h3-PGP{^|$CFiocPu{_G9J&ja~0-}~uW z2GDnFfBc=3RDt$DeyjEYE_KkD(^68n<;8!^ULWH^BVSm)VwthJd1h21XyKE#&h(H_ z8k(nbDF;FpM_H?vb@_;kes?sO5B=F(+5#r}9Ho+@&d*;pd{+7WUuwpBZlr@ATrrv)vZn})UTIka{5Aadl=kOA<6erh zVP2w=pA_ePn9=yu9WYNaljra_AVFB2cJiO-RFS%^n@HBaCBcRIFUnk%ieKidRHK#3 zeW;DP9z9J}S+vn86ax=~5j0fKSYHIy^Q1Y+be(^_ORX>WQuos#EkK7fboQ$|L7LE- zVsyg5-5jfZcp;^wwh_v)vB;a5_-;Bg){#N;Wa{;F2|(Bafbd|AF!Qq_jfuR7!``Gg z9*Q&C#}^lASUT5?UHCjc8}?uu#H5wSb5JnXRgC4Fd{MJt{%0C!K=69e&E>YVfx-k1 z%0~V$hjy20pZpAJ<&W_@M2uOaUXbI-e~BonR6su|z!GJzg%EO-7B)$JCzH7y=GfuH z>ZuW4VDS34=fK>n|$WS&y0@(?odBXhALw`obkGEvo*lqL7Jlp)`S?X!D zpL#)U;_?_mhY;~$v%yI;mpTcjhqs=+!Y}}?s*_o`Ta3kogTO>A#e+FmB7>b}8`TZn z3dJaEQr|Ywh&xBz4Pzuw5z!qY3`iP;ml2j*y6(@5bqYp_A=AE? zQMFoNE1KE)Y}%5Ihzla{BK`E3f%+u!l^FHU_PYsfy7p-%LnNsdy+qpK<%yY*v{u^b zML(l{oH<#0+vpgq!lvsIxHbdw*X#6^e!ChkN7EZCeGZEimZPq1I&N;8)6o zkX<;mn>v}5h8$dzz|wVd*X#Q^GBNAO_k+`uVihCHP&^FoVQw-(Iy-BJz_vUeWkWx% zkdZHhtFQ9OHNwAU>K1jH`Si43SDk2EfMBN?jMq(1_b_Cm`xfYdU{}uA){9u=zV{zX zU`yM`z3-yaK8aqz7FYyqxz?!4UedwWa6MZo)v~KKG&z3jHV}@01C-3r(`D3U(psA? zlRE^A+%aH`u;CHJ6mZGF9z9@kI~%i(rAAJAJ@oiPth?1W~_J+ zLq?l1%?!Zdb`AvF7AyZ=+5!Rp?px{fv2>bx9n{}*AQKh&VzJi*T789) z&HHeMKqt(TN+-VhvHBPZ=*d2wwY{aSDpgB@g>QxA2vz&_1Idy7`#^y$}vPZYlx9F2h;1D>Us zp`;Uk4R-_U&;W${O=a1+XbKJC83zYpt^G1f9IkEtSvvhtIz7_c`xJVD5@O@Ty!JE;eW-0iog zso$g9@44rm4?dqmfX&J0QwZcVFF^JeV7+4VM65s}MCo}h%m>q_5ri7e1*bt*w{Q~w zA8X$M-&S?@?Q>=Az4x$|EnAYcw`5K4mDo-kJA3Z{VJ7Sm3T1~~HiZ((rjW2{X(@C7 zg|b>o3$(O--wr6Wj7FF5d9EbO38CftexE^+;}`?y-1D4g{D-za_W6(WhWhvc>ARGT znerOxKTML}&<+;)fR;sjdsUjX_nwW!hE3OQsi=V1(3V+yO`o1i=hd!=%-8ln7^dA<-XUd*IT-^(=nrW#;Vt(azt|a=?6|bElZEW^@Hri?=z&W#{WK|bh@C6 zQi1<@$o~rSvN+~{AC`fQ9Tm7zAP)xIaBa>tufU&|{?sn<<|R-5MkeXI;I#qF2W(5I zqpKIksP^icoV0BxRDQ?M3#b_vYGx{&(lv|Nd8T;Z|pVCmibn3Ve)>7$S-!fWdf^EW;OBt z4ORT!u71Pf1V^Ri#m42*$i(sE9HorC;H0UT?DIj_Jy#;J^wOK@a)TbPa&U(@w#RW6 z2udtnArRwK6=4=wq^9U?d7}7zj{aAkyeaJ6n-dy1v2(Sp7Hc`D=PB6QOjZ{zyd+(F zFZfV{ZRQO#g+061*bw;c+lKX_XsXv6l3_nkCb@pMoTlfxi0-b$tDV0sPju zn!Y97zUh9ApiN?&TnF978u1&kuh5%$cwPcp(FeD9CTjPyAbDX*-v+LrameRNK(J`R?7g8K2ji9cQ~Kra zm_WDmO_aC#%bNiEvUY&454Q6~PzZ|H?VUN$3#{&Cm4>S0{bVYu2`GJv&bxf3dwKGewmuP5P8hS-TrF ztvWhiEpHl*D@AR5sW(3@RyfKUi=xM>HzibRZSFL`!tYZ?6oKIDg$=`Tg~%b0cym*H zrM;-NDzlKlyWo*UYp!OK)CrQZc|Z=Jx82;uikB<&67VmkA6*Lqj5hC)AJ)S!)dsDL ze1qz!zQIBJ{@y0N<7IK;^FWZwrb48G7nY{n zBvNudw`1872P(I~lUftWsEM2_pa+5M`78`#7enE=v*qfRZ`TJH5LGcFuN~yCkX&kv zF7V03E2ly3!3c|s+f4lq!LY*!so~WKHiMx!90QmgGCj6VP(O6H!&nv`>pFvj98L9C z4?O(i-#=zPYol1t9ojymd6T?fqOZ??aOBDN2R-VbI>6MTR+rNZqUo+q5KZ6IuS$)C zAyo1M{gGw;99!ww8JL4lZb})qN`*c}NFy){#YQd19%Hvk*cu)OtR1=Fyd=|7e7+LY zw_25|R*8ux;O+!Bt)QQ+;&*ste=SgB8JaV>O)YRsRDGMvgnH8UZA=|D+x<~ z*q;3`VXAo%j4oZRgpHD;Z^}9R_F$l05UZ&oED^?zJvs;oK9+aGX1Z(a^mT(eu~VSx znc6`gV638}$szdpqS;P>3;Ku(6OZ$ioN{scG~dTX&@o;;_W&S*)o;*HDmD*@AM zDwXz+KDzsEGM>-7-hKDhTj}$D`Ac$1zjb*O#jK;#Dl$QzL)HwCR)I(^lvuTDP>>Sx z-C3zf&K8J;{8m~7xjq?Ww5yG3_8`x`zpRh?#QltR^?mDA zP*>=+ip`b0Ugq8s)mR34O$KPtgyo5&-R8Efu&P~Pxb-+=4PNUWbl0a6qkscmT{kbA zTUDHuVs$hRj>oaX(_M$-;ml&LII4A{!0WZ%l&&vmQ?;Uz*)8kqb62bT_mj8YBAuXE zo+o$o6VfV_3PdKQJm&zdVqh-|q--7#=06|gn4^pG9KA3(?A29>i@pLBe1?u^ut*%< zi#0KDwnF!0Sr_gS^@%)~fEau2{lF_{nE}auRP~uMdHB8}iI++mZvV2dh{4!N96)Af zv3XsSWkGy)AfZBVuQxqNKYI1mJ@o&SxPhZwLVab>DYo@hj50&-pvz<%836tHq0yK+ zaYC0(Um1pQgo=AVhi*cHy^FNwnxG(Fo(Ne#yed6%&|!MW^D<{FOtFN58?`};`PzV{e7x9stgrgTK@Z(q^j*5^{J!l9M=JZ$6QIb`T1{LU!Ihl43)Ii*-% zBEfa*u3NJv4L(uJ>1X!RPY8u=iXMeSLQX&Nem7U8_kJ;Q8Er*b1w#0}S4CB=X2@y0#h#Q3d zFqpo84k4H^Z_9O_Qsfy$`Qs}c+Gs@Eu8Bmcx5YjX5Y%OI!4mzG6)Ub;xsn8yEz1H1 z=2t1CXRW2c;Re)+P7(cbJxUFdCuz8s|=K}RbAM5QyG{)HxyMWDyW&jCU5`>=GF zKVT~>4LREoJa`jKEAV(gjWan!JqR{1wTB(zCdZITf|=z0p;5aDd(Dxaa>D`78&-3LnsD zHvlOSh}eN~YqOxhlyU6I3Q=t9`MnfDydgroTYX8zv18^rbm4(Yx$*oH* zA`@S~aBWy#IB9hod~TfCPOcvtJ7;t>Nk0MzKhUtcw1IHi4+y8mML3UR%WDsY@FGlu zJP>4d`Y#>;`S(UY zs=1Ci0ujd&@*X^d`b#m@2f^?l3Kbc2OII!|xwbg4NnZK?sYeSUUqvR_2Ms z|8J~%nYah<81L|fs6=?5H=m5x^+*|}S93Bx2h}yOM0Q8=d$u0CPM7+!80P2zh`P zeIW?y>_ojMrfbjW+>i_7^bBx~zp8up6(yOJLD=8OLTgMF5JEiAV?uX@NzfTNrsdR@ zZ?s(2a$U>qSkq#^ZQg?6tfSV1JM4>ilSfhL<Y&qGLO3^3j z^e`?K0q2&8$hq)^T{-=XhV|NLVM5o0xU7s!I~y4NhWSpfbptpSBZ zqrx%_dISP6(-TA#D1b^?v_La?GJe|Gr^fh7d28X?>nr5ipxmhB2(8fS)zfVv-$FB2 z%`sHgN)l`ATm#oK^{BXO+{n>zbmcYT)S5P)o@<$4g8RJybxX}n5E~uuB0L8ZP?n$n zrQBj}FB=t24R?y;*7;!^4_~8O)Hpt1n^|vjBet<=MIVFnhmiS~n-(C;4PX-;ZV|bsukRam-pVXEsi~vXboGu30m?xgV518{>pYHTXL!5Or~lFq%V6=u|E)B`sf&9^p?pU zW5)us78tBQ%dZCpfyge9br+_BuN&ClMMUv={B{Fh!8QbiA}Khra|L|6r+x$fj5Wj{ zHxNr!I_w5M6Vew1^B(34U1O%t^}v}}?{;esNpxZ{+_d>g&Jl4hjU8;9T=IADs^U62 zU3?j^;sJTjXDQtdt|!>R?eZy>gMf=pmXYh^-|1?f)c7qv*MZlmdy* z#|8v;BBzygIQA(Wqy0vUp)|D2qc0eI#&S?^8y+;9%tIs8Q(Q+$FECZ;FGfbr8XF^= zk&!r^p>&LSeO)#ZMnr%{YbXz+xf{qvf^QA4-QUiSO1<44RByGzjf=TZW2{^|E@cRr z%fI$P0Z0|25&#FJ!N*{F2aG%jvX0<(nu~CZYY1fEfU7Dg=UhYR9xYk{T8t|MT>%eB z0fS2#?aa2e`38WtJ|f~Qy^B7oKwaIY@U+WZvJNl(Ij9kUJ6q#L z{h@X2SQpR8v#f%&8`W-`NGvI6SJ$w#C_jX17R=RxIf@nr6F8m3uyN?1OoNvV*4x;` zW@g85x752Q%`Ci`AJ)PVb@af%U#W2Q=ePcmew}QmFPj7^+gOpjQWnV-i4M4yO@5x3 zek75w{Qmdf{Vshj0%ky^^l(D$M@Xnez|7P;c0i5G0R!0jP$`mnl^AXO0B_5W| zTbbb_vpRV5VqSxp^4yt+@CmjUj2f_;(XPX#(!zJ*cR^HTnoUTNt*v1_@jF5VUAv;I zpuqZs6^=Z3(EOV~Us|ncoj;6p6e+?(ZbIKc|kneg!N{JgN63yh77#(k2&#cSB46xJ3?NPcNhdh=!qe?efno1oh=BeVzNouH9cwlM zP>$_iwb&JGU%NR7WBu;6(_pl%Y~yu?y jt-&cgPOjbSwR5^dsy?NI*A)e*g_1`^ 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ɭ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

    vv=NU*4yezy|R9e$ySw{lohlyrHy#`Jv?{U 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

    itLk|&`U1M!dgmR6rh*Y&i|J4!uh`42hQzb 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

    r9NUq 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 z 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 z

    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%0DTYQfTU!32UhkLRG?#WlcJomXkr4zR+ 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�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

    w?V@o-6U=%$eK!`U3PX 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�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

    K1GEYYY(OG)fi3VTVN4& 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

    3GixxS@PLM=rvgj?3ENud`4 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
      rlxlEs&2Y-<2S!mNqk1Ge#>tjHivgOv6pLj4?n@ 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 PakType, } pub fn process(device: &mut device::Device, channel: usize) { @@ -41,7 +53,23 @@ pub fn process(device: &mut device::Device, channel: usize) { JCMD_CONTROLLER_READ => { let offset = device.pif.channels[channel].rx_buf.unwrap(); let input = ui::input::get(&mut device.ui, channel); - device.pif.ram[offset..offset + 4].copy_from_slice(&input.to_ne_bytes()); + device.pif.ram[offset..offset + 4].copy_from_slice(&input.0.to_ne_bytes()); + if input.1 { + // pak change button pressed + if device::events::get_event(device, device::events::EventType::PakSwitch).is_none() + { + device.pif.channels[channel].change_pak = + (device.pif.channels[channel].pak_handler.unwrap().get_type)(); + device.pif.channels[channel].pak_handler = None; + device::events::create_event( + device, + device::events::EventType::PakSwitch, + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + + (device.cpu.clock_rate), // 1 second + pak_switch_event, + ) + } + } } JCMD_PAK_READ => pak_read_block( device, @@ -118,3 +146,28 @@ pub fn data_crc(device: &device::Device, data_offset: usize, size: usize) -> u8 } crc } + +pub fn pak_switch_event(device: &mut device::Device) { + for channel in device.pif.channels.iter_mut() { + if channel.change_pak != PakType::None { + if channel.change_pak == PakType::RumblePak { + let handler = device::controller::PakHandler { + read: device::controller::mempak::read, + write: device::controller::mempak::write, + get_type: device::controller::mempak::get_type, + }; + channel.pak_handler = Some(handler); + ui::audio::play_pak_switch(&mut device.ui, PakType::MemPak); + } else if channel.change_pak == PakType::MemPak { + let handler = device::controller::PakHandler { + read: device::controller::rumble::read, + write: device::controller::rumble::write, + get_type: device::controller::rumble::get_type, + }; + channel.pak_handler = Some(handler); + ui::audio::play_pak_switch(&mut device.ui, PakType::RumblePak); + } + channel.change_pak = PakType::None; + } + } +} diff --git a/src/device/mempak.rs b/src/device/controller/mempak.rs similarity index 97% rename from src/device/mempak.rs rename to src/device/controller/mempak.rs index c8bd7ef..f124c5c 100644 --- a/src/device/mempak.rs +++ b/src/device/controller/mempak.rs @@ -90,3 +90,7 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us device.ui.saves.mempak.1 = true } } + +pub fn get_type() -> device::controller::PakType { + device::controller::PakType::MemPak +} diff --git a/src/device/controller/rumble.rs b/src/device/controller/rumble.rs new file mode 100644 index 0000000..3140b35 --- /dev/null +++ b/src/device/controller/rumble.rs @@ -0,0 +1,24 @@ +use crate::device; + +pub fn read(device: &mut device::Device, _channel: usize, address: u16, data: usize, size: usize) { + let value: u8 = if (0x8000..0x9000).contains(&address) { + 0x80 + } else { + 0x00 + }; + + for i in 0..size { + device.pif.ram[data + i] = value; + } +} + +pub fn write(device: &mut device::Device, channel: usize, address: u16, data: usize, size: usize) { + if address == 0xc000 { + let rumble = device.pif.ram[data + size - 1]; + device::ui::input::set_rumble(&mut device.ui, channel, rumble); + } +} + +pub fn get_type() -> device::controller::PakType { + device::controller::PakType::RumblePak +} diff --git a/src/device/vru.rs b/src/device/controller/vru.rs similarity index 100% rename from src/device/vru.rs rename to src/device/controller/vru.rs diff --git a/src/device/events.rs b/src/device/events.rs index 12e64fd..d527f3d 100644 --- a/src/device/events.rs +++ b/src/device/events.rs @@ -12,6 +12,7 @@ pub enum EventType { SPDma, Compare, Vru, + PakSwitch, Count, } diff --git a/src/device/pif.rs b/src/device/pif.rs index c00d7c9..0898a21 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -15,6 +15,7 @@ pub struct PifChannel { pub rx_buf: Option, pub process: Option, pub pak_handler: Option, + pub change_pak: device::controller::PakType, } pub const PIF_RAM_SIZE: usize = 64; @@ -225,8 +226,9 @@ pub fn init(device: &mut device::Device) { device.pif.ram[0x27] = device.cart.cic_seed; let mempak_handler = device::controller::PakHandler { - read: device::mempak::read, - write: device::mempak::write, + read: device::controller::mempak::read, + write: device::controller::mempak::write, + get_type: device::controller::mempak::get_type, }; for i in 0..4 { @@ -237,7 +239,7 @@ pub fn init(device: &mut device::Device) { } if device.ui.config.input.emulate_vru { device.pif.channels[3].pak_handler = None; - device.pif.channels[3].process = Some(device::vru::process); + device.pif.channels[3].process = Some(device::controller::vru::process); } device.pif.channels[4].process = Some(device::cart::process) } diff --git a/src/ui.rs b/src/ui.rs index 79aba8f..9c93638 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -18,6 +18,7 @@ pub struct Ui { pub sdl_context: Option, pub video_subsystem: Option, pub audio_subsystem: Option, + pub pak_audio: Option, pub joystick_subsystem: Option, #[allow(dead_code)] pub controller_subsystem: Option, @@ -59,18 +60,22 @@ impl Ui { input::Controllers { game_controller: None, joystick: None, + rumble: false, }, input::Controllers { game_controller: None, joystick: None, + rumble: false, }, input::Controllers { game_controller: None, joystick: None, + rumble: false, }, input::Controllers { game_controller: None, joystick: None, + rumble: false, }, ], config_file_path, @@ -99,6 +104,7 @@ impl Ui { controller_subsystem: Some(controller_subsystem), window: None, audio_device: None, + pak_audio: None, } } } diff --git a/src/ui/audio.rs b/src/ui/audio.rs index aa00acd..751bd3f 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -1,6 +1,11 @@ use crate::device; use crate::ui; +pub struct PakAudio { + mempak: Vec, + rumblepak: Vec, +} + pub fn init(ui: &mut ui::Ui, frequency: u64) { let desired_spec = sdl2::audio::AudioSpecDesired { freq: Some(frequency as i32), @@ -15,6 +20,51 @@ pub fn init(ui: &mut ui::Ui, frequency: u64) { .unwrap(), ); ui.audio_device.as_ref().unwrap().resume(); + + let mempak_audio = sdl2::audio::AudioSpecWAV::load_wav_rw( + &mut sdl2::rwops::RWops::from_bytes(include_bytes!("../../data/mempak.wav")) + .expect("Could not mempak WAV file"), + ) + .expect("Could not load mempak WAV file"); + let rumblepak_audio = sdl2::audio::AudioSpecWAV::load_wav_rw( + &mut sdl2::rwops::RWops::from_bytes(include_bytes!("../../data/rumblepak.wav")) + .expect("Could not load rumblepak WAV file"), + ) + .expect("Could not load rumblepak WAV file"); + + let cvt = sdl2::audio::AudioCVT::new( + mempak_audio.format, + mempak_audio.channels, + mempak_audio.freq, + sdl2::audio::AudioFormat::S16LSB, + desired_spec.channels.unwrap(), + desired_spec.freq.unwrap(), + ) + .expect("Could not create AudioCVT"); + + let mempak_data = cvt.convert(mempak_audio.buffer().to_vec()); + let rumblepak_data = cvt.convert(rumblepak_audio.buffer().to_vec()); + ui.pak_audio = Some(PakAudio { + mempak: mempak_data, + rumblepak: rumblepak_data, + }); +} + +pub fn play_pak_switch(ui: &mut ui::Ui, pak: device::controller::PakType) { + let sound; + if pak == device::controller::PakType::RumblePak { + sound = &ui.pak_audio.as_ref().unwrap().rumblepak; + } else if pak == device::controller::PakType::MemPak { + sound = &ui.pak_audio.as_ref().unwrap().mempak; + } else { + return; + } + let audio_device = ui.audio_device.as_ref().unwrap(); + let i16_buffer: Vec = sound + .chunks_exact(2) + .map(|chunk| i16::from_le_bytes([chunk[0], chunk[1]])) + .collect(); + audio_device.queue_audio(&i16_buffer).unwrap(); } pub fn play_audio(device: &mut device::Device, dram_addr: usize, length: u64) { diff --git a/src/ui/config.rs b/src/ui/config.rs index 7d8938b..2711e03 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -2,12 +2,12 @@ use crate::ui; #[derive(serde::Serialize, serde::Deserialize)] pub struct InputProfile { - pub keys: [(bool, i32); 18], - pub controller_buttons: [(bool, i32); 14], - pub controller_axis: [(bool, i32, i16); 18], - pub joystick_buttons: [(bool, u32); 14], - pub joystick_hat: [(bool, u32, u8); 14], - pub joystick_axis: [(bool, u32, i16); 18], + pub keys: [(bool, i32); ui::input::PROFILE_SIZE], + pub controller_buttons: [(bool, i32); ui::input::PROFILE_SIZE], + pub controller_axis: [(bool, i32, i16); ui::input::PROFILE_SIZE], + pub joystick_buttons: [(bool, u32); ui::input::PROFILE_SIZE], + pub joystick_hat: [(bool, u32, u8); ui::input::PROFILE_SIZE], + pub joystick_axis: [(bool, u32, i16); ui::input::PROFILE_SIZE], pub dinput: bool, } diff --git a/src/ui/input.rs b/src/ui/input.rs index 9534380..666257a 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -16,17 +16,20 @@ const D_CBUTTON: usize = 10; const U_CBUTTON: usize = 11; const R_TRIG: usize = 12; const L_TRIG: usize = 13; -const X_AXIS: usize = 16; -const Y_AXIS: usize = 24; - const AXIS_LEFT: usize = 14; const AXIS_RIGHT: usize = 15; const AXIS_UP: usize = 16; const AXIS_DOWN: usize = 17; +const CHANGE_PAK: usize = 18; +pub const PROFILE_SIZE: usize = 19; + +const X_AXIS_SHIFT: usize = 16; +const Y_AXIS_SHIFT: usize = 24; const MAX_AXIS_VALUE: f64 = 85.0; pub struct Controllers { + pub rumble: bool, pub game_controller: Option, pub joystick: Option, } @@ -149,7 +152,7 @@ pub fn set_axis_from_controller( pub fn set_axis_from_keys( profile: &ui::config::InputProfile, - keyboard_state: sdl2::keyboard::KeyboardState, + keyboard_state: &sdl2::keyboard::KeyboardState, ) -> (f64, f64) { let mut x = 0.0; let mut y = 0.0; @@ -236,7 +239,69 @@ pub fn set_buttons_from_controller( } } -pub fn get(ui: &mut ui::Ui, channel: usize) -> u32 { +pub fn set_rumble(ui: &mut ui::Ui, channel: usize, rumble: u8) { + if !ui.controllers[channel].rumble { + return; + } + let controller = &mut ui.controllers[channel].game_controller; + let joystick = &mut ui.controllers[channel].joystick; + if controller.is_some() { + controller + .as_mut() + .unwrap() + .set_rumble( + (rumble & 1) as u16 * u16::MAX, + (rumble & 1) as u16 * u16::MAX, + (rumble & 1) as u32 * 60000, + ) + .unwrap(); + } else if joystick.is_some() { + joystick + .as_mut() + .unwrap() + .set_rumble( + (rumble & 1) as u16 * u16::MAX, + (rumble & 1) as u16 * u16::MAX, + (rumble & 1) as u32 * 60000, + ) + .unwrap(); + } +} + +pub fn change_paks( + profile: &ui::config::InputProfile, + joystick: &Option, + controller: &Option, + keyboard_state: &sdl2::keyboard::KeyboardState, +) -> bool { + let controller_button = profile.controller_buttons[CHANGE_PAK]; + let joystick_button = profile.joystick_buttons[CHANGE_PAK]; + let joystick_hat = profile.joystick_hat[CHANGE_PAK]; + let key = profile.keys[CHANGE_PAK]; + + let mut pressed = false; + if controller_button.0 { + pressed = controller + .as_ref() + .unwrap() + .button(get_button_from_i32(controller_button.1)); + } else if joystick_button.0 { + pressed = joystick + .as_ref() + .unwrap() + .button(joystick_button.1) + .unwrap(); + } else if joystick_hat.0 { + pressed = joystick.as_ref().unwrap().hat(joystick_hat.1).unwrap() + == sdl2::joystick::HatState::from_raw(joystick_hat.2); + } else if key.0 { + pressed = + keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::from_i32(key.1).unwrap()); + } + pressed +} + +pub fn get(ui: &mut ui::Ui, channel: usize) -> (u32, bool) { let events = ui.sdl_context.as_ref().unwrap().event_pump().unwrap(); let keyboard_state = events.keyboard_state(); @@ -267,7 +332,7 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> u32 { let mut y: f64 = 0.0; if profile_name != "default" || channel == 0 { - (x, y) = set_axis_from_keys(profile, keyboard_state); + (x, y) = set_axis_from_keys(profile, &keyboard_state); } if controller.is_some() { @@ -277,9 +342,13 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> u32 { } bound_axis(&mut x, &mut y); - keys |= (x.round() as i8 as u8 as u32) << X_AXIS; - keys |= (y.round() as i8 as u8 as u32) << Y_AXIS; - keys + keys |= (x.round() as i8 as u8 as u32) << X_AXIS_SHIFT; + keys |= (y.round() as i8 as u8 as u32) << Y_AXIS_SHIFT; + + ( + keys, + change_paks(profile, joystick, controller, &keyboard_state), + ) } pub fn list_controllers(ui: &ui::Ui) { @@ -359,7 +428,7 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { let font = rusttype::Font::try_from_bytes(include_bytes!("../../data/Roboto-Regular.ttf")).unwrap(); - let key_labels = [ + let key_labels: [(&str, usize); PROFILE_SIZE] = [ ("A", A_BUTTON), ("B", B_BUTTON), ("Start", START_BUTTON), @@ -378,14 +447,15 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { ("Control Stick Down", AXIS_DOWN), ("Control Stick Left", AXIS_LEFT), ("Control Stick Right", AXIS_RIGHT), + ("Change Pak", CHANGE_PAK), ]; - let mut new_keys = [(false, 0); 18]; - let mut new_joystick_buttons = [(false, 0u32); 14]; - let mut new_joystick_hat = [(false, 0u32, 0); 14]; - let mut new_joystick_axis = [(false, 0u32, 0); 18]; - let mut new_controller_buttons = [(false, 0i32); 14]; - let mut new_controller_axis = [(false, 0i32, 0); 18]; + let mut new_keys = [(false, 0); PROFILE_SIZE]; + let mut new_joystick_buttons = [(false, 0u32); PROFILE_SIZE]; + let mut new_joystick_hat = [(false, 0u32, 0); PROFILE_SIZE]; + let mut new_joystick_axis = [(false, 0u32, 0); PROFILE_SIZE]; + let mut new_controller_buttons = [(false, 0i32); PROFILE_SIZE]; + let mut new_controller_axis = [(false, 0i32, 0); PROFILE_SIZE]; let mut last_joystick_axis_result = (false, 0, 0); let mut last_controller_axis_result = (false, 0, 0); @@ -489,9 +559,9 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { } pub fn get_default_profile() -> ui::config::InputProfile { - let mut default_controller_buttons = [(false, 0); 14]; - let mut default_controller_axis = [(false, 0, 0); 18]; - let mut default_keys = [(false, 0); 18]; + let mut default_controller_buttons = [(false, 0); PROFILE_SIZE]; + let mut default_controller_axis = [(false, 0, 0); PROFILE_SIZE]; + let mut default_keys = [(false, 0); PROFILE_SIZE]; default_keys[R_DPAD] = (true, sdl2::keyboard::Scancode::D as i32); default_keys[L_DPAD] = (true, sdl2::keyboard::Scancode::A as i32); default_keys[D_DPAD] = (true, sdl2::keyboard::Scancode::S as i32); @@ -510,6 +580,7 @@ pub fn get_default_profile() -> ui::config::InputProfile { default_keys[AXIS_RIGHT] = (true, sdl2::keyboard::Scancode::Right as i32); default_keys[AXIS_UP] = (true, sdl2::keyboard::Scancode::Up as i32); default_keys[AXIS_DOWN] = (true, sdl2::keyboard::Scancode::Down as i32); + default_keys[CHANGE_PAK] = (true, sdl2::keyboard::Scancode::Comma as i32); default_controller_buttons[R_DPAD] = (true, sdl2::controller::Button::DPadRight as i32); default_controller_buttons[L_DPAD] = (true, sdl2::controller::Button::DPadLeft as i32); @@ -529,6 +600,7 @@ pub fn get_default_profile() -> ui::config::InputProfile { default_controller_axis[AXIS_RIGHT] = (true, sdl2::controller::Axis::LeftX as i32, 1); default_controller_axis[AXIS_UP] = (true, sdl2::controller::Axis::LeftY as i32, -1); default_controller_axis[AXIS_DOWN] = (true, sdl2::controller::Axis::LeftY as i32, 1); + default_controller_buttons[CHANGE_PAK] = (true, sdl2::controller::Button::Back as i32); ui::config::InputProfile { keys: default_keys, @@ -567,6 +639,14 @@ pub fn init(ui: &mut ui::Ui) { let controller_result = controller_subsystem.open(joystick_index); if controller_result.is_ok() { ui.controllers[i].game_controller = Some(controller_result.unwrap()); + if ui.controllers[i] + .game_controller + .as_ref() + .unwrap() + .has_rumble() + { + ui.controllers[i].rumble = true; + } } } @@ -579,6 +659,9 @@ pub fn init(ui: &mut ui::Ui) { ) } else { ui.controllers[i].joystick = Some(joystick_result.unwrap()); + if ui.controllers[i].joystick.as_ref().unwrap().has_rumble() { + ui.controllers[i].rumble = true; + } } } } else { From e4174c7d4bfb5ff93259fdc91a722282a5fa3c3d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 16 Jan 2025 19:49:20 +0100 Subject: [PATCH 0204/1117] cleanup some pak switching code --- src/device/controller.rs | 8 ++++---- src/device/controller/mempak.rs | 4 ---- src/device/controller/rumble.rs | 4 ---- src/device/pif.rs | 2 +- 4 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/device/controller.rs b/src/device/controller.rs index 075ca91..e315af8 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -31,7 +31,7 @@ pub enum PakType { pub struct PakHandler { pub read: fn(&mut device::Device, usize, u16, usize, usize), pub write: fn(&mut device::Device, usize, u16, usize, usize), - pub get_type: fn() -> PakType, + pub pak_type: PakType, } pub fn process(device: &mut device::Device, channel: usize) { @@ -59,7 +59,7 @@ pub fn process(device: &mut device::Device, channel: usize) { if device::events::get_event(device, device::events::EventType::PakSwitch).is_none() { device.pif.channels[channel].change_pak = - (device.pif.channels[channel].pak_handler.unwrap().get_type)(); + device.pif.channels[channel].pak_handler.unwrap().pak_type; device.pif.channels[channel].pak_handler = None; device::events::create_event( device, @@ -154,7 +154,7 @@ pub fn pak_switch_event(device: &mut device::Device) { let handler = device::controller::PakHandler { read: device::controller::mempak::read, write: device::controller::mempak::write, - get_type: device::controller::mempak::get_type, + pak_type: device::controller::PakType::MemPak, }; channel.pak_handler = Some(handler); ui::audio::play_pak_switch(&mut device.ui, PakType::MemPak); @@ -162,7 +162,7 @@ pub fn pak_switch_event(device: &mut device::Device) { let handler = device::controller::PakHandler { read: device::controller::rumble::read, write: device::controller::rumble::write, - get_type: device::controller::rumble::get_type, + pak_type: device::controller::PakType::RumblePak, }; channel.pak_handler = Some(handler); ui::audio::play_pak_switch(&mut device.ui, PakType::RumblePak); diff --git a/src/device/controller/mempak.rs b/src/device/controller/mempak.rs index f124c5c..c8bd7ef 100644 --- a/src/device/controller/mempak.rs +++ b/src/device/controller/mempak.rs @@ -90,7 +90,3 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us device.ui.saves.mempak.1 = true } } - -pub fn get_type() -> device::controller::PakType { - device::controller::PakType::MemPak -} diff --git a/src/device/controller/rumble.rs b/src/device/controller/rumble.rs index 3140b35..6356507 100644 --- a/src/device/controller/rumble.rs +++ b/src/device/controller/rumble.rs @@ -18,7 +18,3 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us device::ui::input::set_rumble(&mut device.ui, channel, rumble); } } - -pub fn get_type() -> device::controller::PakType { - device::controller::PakType::RumblePak -} diff --git a/src/device/pif.rs b/src/device/pif.rs index 0898a21..f3f1ad7 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -228,7 +228,7 @@ pub fn init(device: &mut device::Device) { let mempak_handler = device::controller::PakHandler { read: device::controller::mempak::read, write: device::controller::mempak::write, - get_type: device::controller::mempak::get_type, + pak_type: device::controller::PakType::MemPak, }; for i in 0..4 { From f6480ea3121e4ac4ae0f29497afb9a6fbaab5e8f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 16 Jan 2025 20:04:23 +0100 Subject: [PATCH 0205/1117] slight fix in audio code --- src/ui/audio.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 751bd3f..55a1056 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -19,7 +19,8 @@ pub fn init(ui: &mut ui::Ui, frequency: u64) { .open_queue::(None, &desired_spec) .unwrap(), ); - ui.audio_device.as_ref().unwrap().resume(); + let audio_device = ui.audio_device.as_ref().unwrap(); + audio_device.resume(); let mempak_audio = sdl2::audio::AudioSpecWAV::load_wav_rw( &mut sdl2::rwops::RWops::from_bytes(include_bytes!("../../data/mempak.wav")) @@ -36,9 +37,9 @@ pub fn init(ui: &mut ui::Ui, frequency: u64) { mempak_audio.format, mempak_audio.channels, mempak_audio.freq, - sdl2::audio::AudioFormat::S16LSB, - desired_spec.channels.unwrap(), - desired_spec.freq.unwrap(), + audio_device.spec().format, + audio_device.spec().channels, + audio_device.spec().freq, ) .expect("Could not create AudioCVT"); From dd767047fd8c8351972ff83949639bf5c8dd3bae Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 16 Jan 2025 22:21:33 +0100 Subject: [PATCH 0206/1117] make sure rumble is off when removing pak --- src/device/controller.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/device/controller.rs b/src/device/controller.rs index e315af8..965d425 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -148,9 +148,10 @@ pub fn data_crc(device: &device::Device, data_offset: usize, size: usize) -> u8 } pub fn pak_switch_event(device: &mut device::Device) { - for channel in device.pif.channels.iter_mut() { + for (i, channel) in device.pif.channels.iter_mut().enumerate() { if channel.change_pak != PakType::None { if channel.change_pak == PakType::RumblePak { + device::ui::input::set_rumble(&mut device.ui, i, 0); let handler = device::controller::PakHandler { read: device::controller::mempak::read, write: device::controller::mempak::write, From 9819fad475d56297ff2d08ec8b3f6e3576c3cd82 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 17 Jan 2025 09:08:53 +0100 Subject: [PATCH 0207/1117] fix crash --- src/ui/input.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ui/input.rs b/src/ui/input.rs index 666257a..14f9450 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -280,18 +280,18 @@ pub fn change_paks( let key = profile.keys[CHANGE_PAK]; let mut pressed = false; - if controller_button.0 { + if controller_button.0 && controller.is_some() { pressed = controller .as_ref() .unwrap() .button(get_button_from_i32(controller_button.1)); - } else if joystick_button.0 { + } else if joystick_button.0 && joystick.is_some() { pressed = joystick .as_ref() .unwrap() .button(joystick_button.1) .unwrap(); - } else if joystick_hat.0 { + } else if joystick_hat.0 && joystick.is_some() { pressed = joystick.as_ref().unwrap().hat(joystick_hat.1).unwrap() == sdl2::joystick::HatState::from_raw(joystick_hat.2); } else if key.0 { From d021cb5d32f142023779c38570b0e37e1a756371 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 17 Jan 2025 11:06:57 +0100 Subject: [PATCH 0208/1117] use mimalloc (#155) --- Cargo.toml | 1 + src/main.rs | 2 ++ 2 files changed, 3 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 3181308..71fcc47 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,6 +22,7 @@ futures = "0.3" sdl2-sys = "0.37" spin_sleep = "1.3" encoding_rs = "0.8" +mimalloc = "0.1" clap = { version = "4.4", features = ["derive"] } [dependencies.sdl2] diff --git a/src/main.rs b/src/main.rs index 8d43e1e..feab3e5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,6 @@ #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release +#[global_allocator] +static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; mod device; mod ui; From ee95816385ebb30c74b89a28828c8d8e5de55b62 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 17 Jan 2025 11:07:39 +0100 Subject: [PATCH 0209/1117] Use Box for audio files (#156) --- src/ui/audio.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 55a1056..969ae10 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -2,8 +2,8 @@ use crate::device; use crate::ui; pub struct PakAudio { - mempak: Vec, - rumblepak: Vec, + mempak: Box>, + rumblepak: Box>, } pub fn init(ui: &mut ui::Ui, frequency: u64) { @@ -43,11 +43,9 @@ pub fn init(ui: &mut ui::Ui, frequency: u64) { ) .expect("Could not create AudioCVT"); - let mempak_data = cvt.convert(mempak_audio.buffer().to_vec()); - let rumblepak_data = cvt.convert(rumblepak_audio.buffer().to_vec()); ui.pak_audio = Some(PakAudio { - mempak: mempak_data, - rumblepak: rumblepak_data, + mempak: Box::new(cvt.convert(mempak_audio.buffer().to_vec())), + rumblepak: Box::new(cvt.convert(rumblepak_audio.buffer().to_vec())), }); } From b065f807a2ceb7c94a60785834e3af90cca0f1cd Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 17 Jan 2025 11:27:30 +0100 Subject: [PATCH 0210/1117] Change box for audio (#157) * Remove box for audio * more --- src/ui/audio.rs | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 969ae10..a998b1d 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -2,8 +2,8 @@ use crate::device; use crate::ui; pub struct PakAudio { - mempak: Box>, - rumblepak: Box>, + mempak: Vec, + rumblepak: Vec, } pub fn init(ui: &mut ui::Ui, frequency: u64) { @@ -22,16 +22,18 @@ pub fn init(ui: &mut ui::Ui, frequency: u64) { let audio_device = ui.audio_device.as_ref().unwrap(); audio_device.resume(); - let mempak_audio = sdl2::audio::AudioSpecWAV::load_wav_rw( + let mempak_audio = Box::new(sdl2::audio::AudioSpecWAV::load_wav_rw( &mut sdl2::rwops::RWops::from_bytes(include_bytes!("../../data/mempak.wav")) .expect("Could not mempak WAV file"), - ) + )) .expect("Could not load mempak WAV file"); - let rumblepak_audio = sdl2::audio::AudioSpecWAV::load_wav_rw( - &mut sdl2::rwops::RWops::from_bytes(include_bytes!("../../data/rumblepak.wav")) - .expect("Could not load rumblepak WAV file"), - ) - .expect("Could not load rumblepak WAV file"); + let rumblepak_audio = Box::new( + sdl2::audio::AudioSpecWAV::load_wav_rw( + &mut sdl2::rwops::RWops::from_bytes(include_bytes!("../../data/rumblepak.wav")) + .expect("Could not load rumblepak WAV file"), + ) + .expect("Could not load rumblepak WAV file"), + ); let cvt = sdl2::audio::AudioCVT::new( mempak_audio.format, @@ -44,8 +46,8 @@ pub fn init(ui: &mut ui::Ui, frequency: u64) { .expect("Could not create AudioCVT"); ui.pak_audio = Some(PakAudio { - mempak: Box::new(cvt.convert(mempak_audio.buffer().to_vec())), - rumblepak: Box::new(cvt.convert(rumblepak_audio.buffer().to_vec())), + mempak: cvt.convert(mempak_audio.buffer().to_vec()), + rumblepak: cvt.convert(rumblepak_audio.buffer().to_vec()), }); } From b860be414335b14804cc6678e3e1d38195877012 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 17 Jan 2025 11:37:52 +0100 Subject: [PATCH 0211/1117] Bump to 0.1.20 (#158) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 71fcc47..8455849 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.19" +version = "0.1.20" edition = "2021" rust-version = "1.82" From 14ea0eee3fb04b7a5bfe8c3b07c409404940376f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 18 Jan 2025 09:59:18 +0100 Subject: [PATCH 0212/1117] cleanup loop detection (#160) * cleanup loop detection * more --- src/device/cpu_instructions.rs | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/device/cpu_instructions.rs b/src/device/cpu_instructions.rs index 57b608d..e452a26 100644 --- a/src/device/cpu_instructions.rs +++ b/src/device/cpu_instructions.rs @@ -60,8 +60,8 @@ pub fn check_relative_idle_loop(device: &mut device::Device, opcode: u32) { } } -pub fn check_absolute_idle_loop(device: &mut device::Device, opcode: u32) { - if (opcode & 0x3FFFFFF) as u64 == (device.cpu.pc_phys & 0x0FFFFFFF) >> 2 +pub fn check_absolute_idle_loop(device: &mut device::Device, target: u64) { + if device.cpu.pc == target && device.memory.fast_read[(device.cpu.pc_phys >> 16) as usize]( device, device.cpu.pc_phys + 4, @@ -76,10 +76,10 @@ pub fn j(device: &mut device::Device, opcode: u32) { if device::cpu::in_delay_slot_taken(device) { return; } - check_absolute_idle_loop(device, opcode); + let target = (device.cpu.pc + 4) & 0xFFFFFFFFF0000000 | ((opcode & 0x3FFFFFF) << 2) as u64; + check_absolute_idle_loop(device, target); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = - (device.cpu.pc + 4) & 0xFFFFFFFFF0000000 | ((opcode & 0x3FFFFFF) << 2) as u64 + device.cpu.branch_state.pc = target } pub fn jal(device: &mut device::Device, opcode: u32) { @@ -89,10 +89,10 @@ pub fn jal(device: &mut device::Device, opcode: u32) { device.cpu.gpr[31] = device.cpu.pc + 8 } if !device::cpu::in_delay_slot_taken(device) { - check_absolute_idle_loop(device, opcode); + let target = (device.cpu.pc + 4) & 0xFFFFFFFFF0000000 | ((opcode & 0x3FFFFFF) << 2) as u64; + check_absolute_idle_loop(device, target); device.cpu.branch_state.state = device::cpu::State::Take; - device.cpu.branch_state.pc = - (device.cpu.pc + 4) & 0xFFFFFFFFF0000000 | ((opcode & 0x3FFFFFF) << 2) as u64 + device.cpu.branch_state.pc = target } else if !device::cpu::in_delay_slot(device) { device.cpu.branch_state.state = device::cpu::State::NotTaken; } @@ -966,7 +966,6 @@ pub fn srav(device: &mut device::Device, opcode: u32) { pub fn jr(device: &mut device::Device, opcode: u32) { if !device::cpu::in_delay_slot_taken(device) { - check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; device.cpu.branch_state.pc = device.cpu.gpr[rs(opcode) as usize]; } else if !device::cpu::in_delay_slot(device) { @@ -978,7 +977,6 @@ pub fn jalr(device: &mut device::Device, opcode: u32) { let in_delay_slot_taken = device::cpu::in_delay_slot_taken(device); if !in_delay_slot_taken { - check_relative_idle_loop(device, opcode); device.cpu.branch_state.state = device::cpu::State::Take; device.cpu.branch_state.pc = device.cpu.gpr[rs(opcode) as usize]; } else if !device::cpu::in_delay_slot(device) { From 4ead0218d98f042994f495751fabaa23eb77cc4a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 18 Jan 2025 19:58:23 +0100 Subject: [PATCH 0213/1117] remove pub keyword where it isn't needed (#161) * remove pub keyword where it isn't needed * more * Update main.rs * more --- src/compat/aarch64.rs | 18 ++++++++-------- src/device/ai.rs | 12 +++++------ src/device/cache.rs | 2 +- src/device/cart.rs | 14 ++++++------- src/device/cart_rom.rs | 4 ++-- src/device/controller.rs | 8 ++++---- src/device/controller/mempak.rs | 2 +- src/device/controller/vru.rs | 6 +++--- src/device/cop0.rs | 28 ++++++++++++------------- src/device/cop1.rs | 32 ++++++++++++++--------------- src/device/cop2.rs | 14 ++++++------- src/device/cpu_instructions.rs | 14 ++++++------- src/device/events.rs | 2 +- src/device/exceptions.rs | 2 +- src/device/fpu_instructions.rs | 2 +- src/device/mi.rs | 4 ++-- src/device/pi.rs | 8 ++++---- src/device/pif.rs | 12 +++++------ src/device/rdp.rs | 6 +++--- src/device/rsp_interface.rs | 12 +++++------ src/device/rsp_su_instructions.rs | 34 +++++++++++++++---------------- src/device/rsp_vu_instructions.rs | 18 ++++++++-------- src/device/si.rs | 6 +++--- src/device/sram.rs | 27 ++++++++++-------------- src/device/tlb.rs | 4 ++-- src/device/vi.rs | 10 ++++----- src/main.rs | 1 + src/ui/input.rs | 14 ++++++------- src/ui/storage.rs | 6 +++--- 29 files changed, 159 insertions(+), 163 deletions(-) diff --git a/src/compat/aarch64.rs b/src/compat/aarch64.rs index e00d66d..9b9ab41 100644 --- a/src/compat/aarch64.rs +++ b/src/compat/aarch64.rs @@ -1,46 +1,46 @@ unsafe extern "C" { #[link_name = "_mm_srli_epi16__extern"] - pub fn _mm_srli_epi16(__a: __m128i, __imm8: ::std::os::raw::c_int) -> __m128i; + fn _mm_srli_epi16(__a: __m128i, __imm8: ::std::os::raw::c_int) -> __m128i; #[link_name = "_mm_insert_epi8__extern"] - pub fn _mm_insert_epi8( + fn _mm_insert_epi8( __a: __m128i, __i: ::std::os::raw::c_int, __imm8: ::std::os::raw::c_int, ) -> __m128i; #[link_name = "_mm_extract_epi8__extern"] - pub fn _mm_extract_epi8(__a: __m128i, __imm8: ::std::os::raw::c_int) -> ::std::os::raw::c_int; + fn _mm_extract_epi8(__a: __m128i, __imm8: ::std::os::raw::c_int) -> ::std::os::raw::c_int; #[link_name = "_mm_insert_epi16__extern"] - pub fn _mm_insert_epi16( + fn _mm_insert_epi16( __a: __m128i, __i: ::std::os::raw::c_int, __imm8: ::std::os::raw::c_int, ) -> __m128i; #[link_name = "_mm_extract_epi16__extern"] - pub fn _mm_extract_epi16(__a: __m128i, __imm8: ::std::os::raw::c_int) -> ::std::os::raw::c_int; + fn _mm_extract_epi16(__a: __m128i, __imm8: ::std::os::raw::c_int) -> ::std::os::raw::c_int; #[link_name = "_mm_insert_epi32__extern"] - pub fn _mm_insert_epi32( + fn _mm_insert_epi32( __a: __m128i, __i: ::std::os::raw::c_int, __imm8: ::std::os::raw::c_int, ) -> __m128i; #[link_name = "_mm_extract_epi32__extern"] - pub fn _mm_extract_epi32(__a: __m128i, __imm8: ::std::os::raw::c_int) -> ::std::os::raw::c_int; + fn _mm_extract_epi32(__a: __m128i, __imm8: ::std::os::raw::c_int) -> ::std::os::raw::c_int; #[link_name = "_mm_insert_epi64__extern"] - pub fn _mm_insert_epi64( + fn _mm_insert_epi64( __a: __m128i, __i: ::std::os::raw::c_longlong, __imm8: ::std::os::raw::c_int, ) -> __m128i; #[link_name = "_mm_extract_epi64__extern"] - pub fn _mm_extract_epi64( + fn _mm_extract_epi64( __a: __m128i, __imm8: ::std::os::raw::c_int, ) -> ::std::os::raw::c_longlong; diff --git a/src/device/ai.rs b/src/device/ai.rs index cb52742..08bb398 100644 --- a/src/device/ai.rs +++ b/src/device/ai.rs @@ -26,7 +26,7 @@ pub struct AiDma { pub duration: u64, } -pub fn get_remaining_dma_length(device: &mut device::Device) -> u64 { +fn get_remaining_dma_length(device: &mut device::Device) -> u64 { if device.ai.fifo[0].duration == 0 { return 0; } @@ -43,7 +43,7 @@ pub fn get_remaining_dma_length(device: &mut device::Device) -> u64 { dma_length & !7 } -pub fn get_dma_duration(device: &device::Device) -> u64 { +fn get_dma_duration(device: &device::Device) -> u64 { let samples_per_sec = device.vi.clock / (1 + device.ai.regs[AI_DACRATE_REG as usize]) as u64; let bytes_per_sample = 4; /* XXX: assume 16bit stereo - should depends on bitrate instead */ let length = (device.ai.regs[AI_LEN_REG as usize] & !7) as u64; @@ -51,7 +51,7 @@ pub fn get_dma_duration(device: &device::Device) -> u64 { length * (device.cpu.clock_rate / (bytes_per_sample * samples_per_sec)) } -pub fn do_dma(device: &mut device::Device) { +fn do_dma(device: &mut device::Device) { device.ai.last_read = device.ai.fifo[0].length; if device.ai.delayed_carry { @@ -71,7 +71,7 @@ pub fn do_dma(device: &mut device::Device) { device::mi::schedule_rcp_interrupt(device, device::mi::MI_INTR_AI); } -pub fn fifo_push(device: &mut device::Device) { +fn fifo_push(device: &mut device::Device) { let duration = get_dma_duration(device); if (device.ai.regs[AI_STATUS_REG as usize] & AI_STATUS_BUSY) != 0 { @@ -91,7 +91,7 @@ pub fn fifo_push(device: &mut device::Device) { } } -pub fn fifo_pop(device: &mut device::Device) { +fn fifo_pop(device: &mut device::Device) { if device.ai.regs[AI_STATUS_REG as usize] & AI_STATUS_FULL != 0 { device.ai.fifo[0].address = device.ai.fifo[1].address; device.ai.fifo[0].length = device.ai.fifo[1].length; @@ -152,7 +152,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } } -pub fn dma_event(device: &mut device::Device) { +fn dma_event(device: &mut device::Device) { if device.ai.last_read != 0 { let diff = device.ai.fifo[0].length - device.ai.last_read; ui::audio::play_audio( diff --git a/src/device/cache.rs b/src/device/cache.rs index 3ea3558..1b2e1da 100644 --- a/src/device/cache.rs +++ b/src/device/cache.rs @@ -205,7 +205,7 @@ pub fn dcache_writeback(device: &mut device::Device, line_index: usize) { ); } -pub fn dcache_fill(device: &mut device::Device, line_index: usize, phys_address: u64) { +fn dcache_fill(device: &mut device::Device, line_index: usize, phys_address: u64) { device::cop0::add_cycles(device, 7); device.memory.dcache[line_index].valid = true; diff --git a/src/device/cart.rs b/src/device/cart.rs index e2a688d..41f986c 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -22,7 +22,7 @@ pub struct AfRtc { pub control: u16, } -pub fn byte2bcd(mut n: u32) -> u8 { +fn byte2bcd(mut n: u32) -> u8 { n %= 100; (((n / 10) << 4) | (n % 10)) as u8 } @@ -95,13 +95,13 @@ pub fn process(device: &mut device::Device, channel: usize) { } } -pub fn format_eeprom(device: &mut device::Device) { +fn format_eeprom(device: &mut device::Device) { if device.ui.saves.eeprom.0.len() < EEPROM_MAX_SIZE { device.ui.saves.eeprom.0.resize(EEPROM_MAX_SIZE, 0xFF) } } -pub fn eeprom_read_block(device: &mut device::Device, block: usize, offset: usize) { +fn eeprom_read_block(device: &mut device::Device, block: usize, offset: usize) { let address = device.pif.ram[block] as usize * EEPROM_BLOCK_SIZE; format_eeprom(device); @@ -110,7 +110,7 @@ pub fn eeprom_read_block(device: &mut device::Device, block: usize, offset: usiz .copy_from_slice(&device.ui.saves.eeprom.0[address..address + EEPROM_BLOCK_SIZE]); } -pub fn eeprom_write_block(device: &mut device::Device, block: usize, offset: usize, status: usize) { +fn eeprom_write_block(device: &mut device::Device, block: usize, offset: usize, status: usize) { let address = device.pif.ram[block] as usize * EEPROM_BLOCK_SIZE; format_eeprom(device); @@ -123,7 +123,7 @@ pub fn eeprom_write_block(device: &mut device::Device, block: usize, offset: usi device.ui.saves.eeprom.1 = true } -pub fn time2data(device: &mut device::Device, offset: usize) { +fn time2data(device: &mut device::Device, offset: usize) { let now: chrono::DateTime = chrono::Local::now(); device.pif.ram[offset] = byte2bcd(now.second()); @@ -136,7 +136,7 @@ pub fn time2data(device: &mut device::Device, offset: usize) { device.pif.ram[offset + 7] = byte2bcd((now.year() as u32 - 1900) / 100); } -pub fn af_rtc_read_block(device: &mut device::Device, block: usize, offset: usize, status: usize) { +fn af_rtc_read_block(device: &mut device::Device, block: usize, offset: usize, status: usize) { match device.pif.ram[block] { 0 => { device.pif.ram[offset] = device.cart.rtc.control as u8; @@ -155,7 +155,7 @@ pub fn af_rtc_read_block(device: &mut device::Device, block: usize, offset: usiz } } } -pub fn af_rtc_write_block(device: &mut device::Device, block: usize, offset: usize, status: usize) { +fn af_rtc_write_block(device: &mut device::Device, block: usize, offset: usize, status: usize) { match device.pif.ram[block] { 0 => { device.cart.rtc.control = diff --git a/src/device/cart_rom.rs b/src/device/cart_rom.rs index 2358255..2a4756a 100644 --- a/src/device/cart_rom.rs +++ b/src/device/cart_rom.rs @@ -144,7 +144,7 @@ pub fn load_rom_save(device: &mut device::Device) { } } -pub fn set_system_region(device: &mut device::Device, country: u8) { +fn set_system_region(device: &mut device::Device, country: u8) { let pal_codes: [u8; 8] = [b'D', b'F', b'I', b'P', b'S', b'U', b'X', b'Y']; for i in pal_codes { if country == i { @@ -153,7 +153,7 @@ pub fn set_system_region(device: &mut device::Device, country: u8) { } } -pub fn set_cic(device: &mut device::Device) { +fn set_cic(device: &mut device::Device) { let hash = calculate_hash(&device.cart.rom[0x40..0x1000]); match hash.as_str() { "B99F06C4802C2377E31E388435955EF3E99C618A6D55D24699D828EB1075F1EB" => { diff --git a/src/device/controller.rs b/src/device/controller.rs index 965d425..d5af046 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -89,7 +89,7 @@ pub fn process(device: &mut device::Device, channel: usize) { } } -pub fn pak_read_block( +fn pak_read_block( device: &mut device::Device, addr_acrc: usize, data: usize, @@ -108,7 +108,7 @@ pub fn pak_read_block( } } -pub fn pak_write_block( +fn pak_write_block( device: &mut device::Device, addr_acrc: usize, data: usize, @@ -127,7 +127,7 @@ pub fn pak_write_block( } } -pub fn data_crc(device: &device::Device, data_offset: usize, size: usize) -> u8 { +fn data_crc(device: &device::Device, data_offset: usize, size: usize) -> u8 { let mut i = 0; let mut crc = 0; @@ -147,7 +147,7 @@ pub fn data_crc(device: &device::Device, data_offset: usize, size: usize) -> u8 crc } -pub fn pak_switch_event(device: &mut device::Device) { +fn pak_switch_event(device: &mut device::Device) { for (i, channel) in device.pif.channels.iter_mut().enumerate() { if channel.change_pak != PakType::None { if channel.change_pak == PakType::RumblePak { diff --git a/src/device/controller/mempak.rs b/src/device/controller/mempak.rs index c8bd7ef..48dc9be 100644 --- a/src/device/controller/mempak.rs +++ b/src/device/controller/mempak.rs @@ -3,7 +3,7 @@ use crate::device; const MEMPAK_SIZE: usize = 0x8000; const MPK_PAGE_SIZE: usize = 256; -pub fn format_mempak(device: &mut device::Device) { +fn format_mempak(device: &mut device::Device) { if device.ui.saves.mempak.0.len() < MEMPAK_SIZE * 4 { device.ui.saves.mempak.0.resize(MEMPAK_SIZE * 4, 0); diff --git a/src/device/controller/vru.rs b/src/device/controller/vru.rs index 5f738a0..e300fda 100644 --- a/src/device/controller/vru.rs +++ b/src/device/controller/vru.rs @@ -36,7 +36,7 @@ pub fn init(device: &mut device::Device) { create_word_mappings(device); } -pub fn reset_vru(device: &mut device::Device) { +fn reset_vru(device: &mut device::Device) { device.vru.status = 0x00; if device.cart.rom[0x3E] == /* Japan */ 0x4A || device.cart.rom[0x3E] == /* Demo */ 0x00 { device.vru.voice_state = VOICE_STATUS_READY; @@ -250,11 +250,11 @@ pub fn process(device: &mut device::Device, channel: usize) { } } -pub fn vru_talking_event(device: &mut device::Device) { +fn vru_talking_event(device: &mut device::Device) { device.vru.talking = false } -pub fn create_word_mappings(device: &mut device::Device) { +fn create_word_mappings(device: &mut device::Device) { device.vru.word_mappings = HashMap::from([ ( String::from("03A50024000303CF00A80003036000EA"), diff --git a/src/device/cop0.rs b/src/device/cop0.rs index f414e8b..0a4e7bb 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -99,18 +99,18 @@ pub struct Cop0 { pub tlb_entries: [device::tlb::TlbEntry; 32], } -pub fn mfc0(device: &mut device::Device, opcode: u32) { +fn mfc0(device: &mut device::Device, opcode: u32) { device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] = device::cpu_instructions::se32( (get_control_registers(device, device::cpu_instructions::rd(opcode))) as u32 as i32, ) } -pub fn dmfc0(device: &mut device::Device, opcode: u32) { +fn dmfc0(device: &mut device::Device, opcode: u32) { device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] = get_control_registers(device, device::cpu_instructions::rd(opcode)) } -pub fn mtc0(device: &mut device::Device, opcode: u32) { +fn mtc0(device: &mut device::Device, opcode: u32) { device::cop0::set_control_registers( device, device::cpu_instructions::rd(opcode), @@ -120,7 +120,7 @@ pub fn mtc0(device: &mut device::Device, opcode: u32) { ) } -pub fn dmtc0(device: &mut device::Device, opcode: u32) { +fn dmtc0(device: &mut device::Device, opcode: u32) { device::cop0::set_control_registers( device, device::cpu_instructions::rd(opcode), @@ -128,24 +128,24 @@ pub fn dmtc0(device: &mut device::Device, opcode: u32) { ) } -pub fn tlbr(device: &mut device::Device, _opcode: u32) { +fn tlbr(device: &mut device::Device, _opcode: u32) { device::tlb::read(device, device.cpu.cop0.regs[COP0_INDEX_REG as usize]) } -pub fn tlbwi(device: &mut device::Device, _opcode: u32) { +fn tlbwi(device: &mut device::Device, _opcode: u32) { device::tlb::write(device, device.cpu.cop0.regs[COP0_INDEX_REG as usize]) } -pub fn tlbwr(device: &mut device::Device, _opcode: u32) { +fn tlbwr(device: &mut device::Device, _opcode: u32) { let random = set_random_register(device); device::tlb::write(device, random) } -pub fn tlbp(device: &mut device::Device, _opcode: u32) { +fn tlbp(device: &mut device::Device, _opcode: u32) { device::tlb::probe(device) } -pub fn eret(device: &mut device::Device, _opcode: u32) { +fn eret(device: &mut device::Device, _opcode: u32) { if device.cpu.cop0.regs[COP0_STATUS_REG as usize] & COP0_STATUS_ERL != 0 { device.cpu.pc = device.cpu.cop0.regs[COP0_ERROREPC_REG as usize]; device.cpu.cop0.regs[COP0_STATUS_REG as usize] &= !COP0_STATUS_ERL @@ -158,7 +158,7 @@ pub fn eret(device: &mut device::Device, _opcode: u32) { device::exceptions::check_pending_interrupts(device) } -pub fn execute_cp0(device: &mut device::Device, opcode: u32) { +fn execute_cp0(device: &mut device::Device, opcode: u32) { device.cpu.cop0.instrs2[(opcode & 0x3F) as usize](device, opcode) } @@ -174,7 +174,7 @@ pub fn reserved(device: &mut device::Device, _opcode: u32) { device::exceptions::reserved_exception(device, 0); } -pub fn get_control_registers(device: &device::Device, index: u32) -> u64 { +fn get_control_registers(device: &device::Device, index: u32) -> u64 { match index { COP0_COUNT_REG => device.cpu.cop0.regs[index as usize] >> 1, COP0_RANDOM_REG => set_random_register(device), @@ -183,7 +183,7 @@ pub fn get_control_registers(device: &device::Device, index: u32) -> u64 { } } -pub fn set_control_registers(device: &mut device::Device, index: u32, mut data: u64) { +fn set_control_registers(device: &mut device::Device, index: u32, mut data: u64) { device.cpu.cop0.reg_latch = data; match index { COP0_COUNT_REG => { @@ -230,7 +230,7 @@ pub fn set_control_registers(device: &mut device::Device, index: u32, mut data: device::exceptions::check_pending_interrupts(device); } -pub fn compare_event(device: &mut device::Device) { +fn compare_event(device: &mut device::Device) { device.cpu.cop0.regs[COP0_CAUSE_REG as usize] &= !COP0_CAUSE_EXCCODE_MASK; device.cpu.cop0.regs[COP0_CAUSE_REG as usize] |= COP0_CAUSE_IP7; @@ -243,7 +243,7 @@ pub fn compare_event(device: &mut device::Device) { device::exceptions::check_pending_interrupts(device); } -pub fn set_random_register(device: &device::Device) -> u64 { +fn set_random_register(device: &device::Device) -> u64 { if device.cpu.cop0.regs[COP0_WIRED_REG as usize] > 31 { (u64::MAX - device.cpu.cop0.regs[COP0_COUNT_REG as usize]) & 0x3F } else { diff --git a/src/device/cop1.rs b/src/device/cop1.rs index 01239ea..8a4ee8a 100644 --- a/src/device/cop1.rs +++ b/src/device/cop1.rs @@ -173,7 +173,7 @@ pub fn sdc1(device: &mut device::Device, opcode: u32) { ) } -pub fn mfc1(device: &mut device::Device, opcode: u32) { +fn mfc1(device: &mut device::Device, opcode: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 == 0 { @@ -185,7 +185,7 @@ pub fn mfc1(device: &mut device::Device, opcode: u32) { device::cpu_instructions::se32(u32::from_ne_bytes(value.to_ne_bytes()) as i32); } -pub fn dmfc1(device: &mut device::Device, opcode: u32) { +fn dmfc1(device: &mut device::Device, opcode: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 == 0 { @@ -197,7 +197,7 @@ pub fn dmfc1(device: &mut device::Device, opcode: u32) { u64::from_ne_bytes(value.to_ne_bytes()); } -pub fn cfc1(device: &mut device::Device, opcode: u32) { +fn cfc1(device: &mut device::Device, opcode: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 == 0 { @@ -209,7 +209,7 @@ pub fn cfc1(device: &mut device::Device, opcode: u32) { ) } -pub fn dcfc1(device: &mut device::Device, opcode: u32) { +fn dcfc1(device: &mut device::Device, opcode: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 == 0 { @@ -221,7 +221,7 @@ pub fn dcfc1(device: &mut device::Device, opcode: u32) { device::exceptions::floating_point_exception(device) } -pub fn mtc1(device: &mut device::Device, opcode: u32) { +fn mtc1(device: &mut device::Device, opcode: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 == 0 { @@ -239,7 +239,7 @@ pub fn mtc1(device: &mut device::Device, opcode: u32) { ) } -pub fn dmtc1(device: &mut device::Device, opcode: u32) { +fn dmtc1(device: &mut device::Device, opcode: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 == 0 { @@ -252,7 +252,7 @@ pub fn dmtc1(device: &mut device::Device, opcode: u32) { set_fpr_double(device, device::fpu_instructions::fs(opcode) as usize, value) } -pub fn ctc1(device: &mut device::Device, opcode: u32) { +fn ctc1(device: &mut device::Device, opcode: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 == 0 { @@ -266,7 +266,7 @@ pub fn ctc1(device: &mut device::Device, opcode: u32) { ) } -pub fn dctc1(device: &mut device::Device, opcode: u32) { +fn dctc1(device: &mut device::Device, opcode: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 == 0 { @@ -278,7 +278,7 @@ pub fn dctc1(device: &mut device::Device, opcode: u32) { device::exceptions::floating_point_exception(device) } -pub fn execute_cop1_b(device: &mut device::Device, opcode: u32) { +fn execute_cop1_b(device: &mut device::Device, opcode: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 == 0 { @@ -288,7 +288,7 @@ pub fn execute_cop1_b(device: &mut device::Device, opcode: u32) { device.cpu.cop1.b_instrs[((opcode >> 16) & 0x3) as usize](device, opcode) } -pub fn execute_cop1_s(device: &mut device::Device, opcode: u32) { +fn execute_cop1_s(device: &mut device::Device, opcode: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 == 0 { @@ -298,7 +298,7 @@ pub fn execute_cop1_s(device: &mut device::Device, opcode: u32) { device.cpu.cop1.s_instrs[(opcode & 0x3F) as usize](device, opcode) } -pub fn execute_cop1_d(device: &mut device::Device, opcode: u32) { +fn execute_cop1_d(device: &mut device::Device, opcode: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 == 0 { @@ -308,7 +308,7 @@ pub fn execute_cop1_d(device: &mut device::Device, opcode: u32) { device.cpu.cop1.d_instrs[(opcode & 0x3F) as usize](device, opcode) } -pub fn execute_cop1_l(device: &mut device::Device, opcode: u32) { +fn execute_cop1_l(device: &mut device::Device, opcode: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 == 0 { @@ -318,7 +318,7 @@ pub fn execute_cop1_l(device: &mut device::Device, opcode: u32) { device.cpu.cop1.l_instrs[(opcode & 0x3F) as usize](device, opcode) } -pub fn execute_cop1_w(device: &mut device::Device, opcode: u32) { +fn execute_cop1_w(device: &mut device::Device, opcode: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 == 0 { @@ -328,7 +328,7 @@ pub fn execute_cop1_w(device: &mut device::Device, opcode: u32) { device.cpu.cop1.w_instrs[(opcode & 0x3F) as usize](device, opcode) } -pub fn unusable(device: &mut device::Device, _opcode: u32) { +fn unusable(device: &mut device::Device, _opcode: u32) { device::exceptions::cop_unusable_exception(device, device::cop0::COP0_CAUSE_CE1) } @@ -342,7 +342,7 @@ pub fn reserved(device: &mut device::Device, opcode: u32) { device::exceptions::reserved_exception(device, device::cop0::COP0_CAUSE_CE1); } -pub fn get_control_registers_fpu(device: &device::Device, index: u32) -> u32 { +fn get_control_registers_fpu(device: &device::Device, index: u32) -> u32 { match index { 0 => device.cpu.cop1.fcr0, 31 => device.cpu.cop1.fcr31, @@ -352,7 +352,7 @@ pub fn get_control_registers_fpu(device: &device::Device, index: u32) -> u32 { } } -pub fn set_control_registers_fpu(device: &mut device::Device, index: u32, data: u32) { +fn set_control_registers_fpu(device: &mut device::Device, index: u32, data: u32) { match index { 0 => { // read only } diff --git a/src/device/cop2.rs b/src/device/cop2.rs index be7a851..ddf5763 100644 --- a/src/device/cop2.rs +++ b/src/device/cop2.rs @@ -5,7 +5,7 @@ pub struct Cop2 { pub reg_latch: u64, } -pub fn mfc2(device: &mut device::Device, opcode: u32) { +fn mfc2(device: &mut device::Device, opcode: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU2 == 0 { @@ -15,7 +15,7 @@ pub fn mfc2(device: &mut device::Device, opcode: u32) { device::cpu_instructions::se32((device.cpu.cop2.reg_latch) as u32 as i32) } -pub fn dmfc2(device: &mut device::Device, opcode: u32) { +fn dmfc2(device: &mut device::Device, opcode: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU2 == 0 { @@ -24,7 +24,7 @@ pub fn dmfc2(device: &mut device::Device, opcode: u32) { device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] = device.cpu.cop2.reg_latch } -pub fn cfc2(device: &mut device::Device, opcode: u32) { +fn cfc2(device: &mut device::Device, opcode: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU2 == 0 { @@ -34,7 +34,7 @@ pub fn cfc2(device: &mut device::Device, opcode: u32) { device::cpu_instructions::se32((device.cpu.cop2.reg_latch) as u32 as i32) } -pub fn mtc2(device: &mut device::Device, opcode: u32) { +fn mtc2(device: &mut device::Device, opcode: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU2 == 0 { @@ -43,7 +43,7 @@ pub fn mtc2(device: &mut device::Device, opcode: u32) { device.cpu.cop2.reg_latch = device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] } -pub fn dmtc2(device: &mut device::Device, opcode: u32) { +fn dmtc2(device: &mut device::Device, opcode: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU2 == 0 { @@ -52,7 +52,7 @@ pub fn dmtc2(device: &mut device::Device, opcode: u32) { device.cpu.cop2.reg_latch = device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] } -pub fn ctc2(device: &mut device::Device, opcode: u32) { +fn ctc2(device: &mut device::Device, opcode: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU2 == 0 { @@ -72,7 +72,7 @@ pub fn reserved(device: &mut device::Device, opcode: u32) { device::exceptions::reserved_exception(device, device::cop0::COP0_CAUSE_CE2); } -pub fn unusable(device: &mut device::Device, _opcode: u32) { +fn unusable(device: &mut device::Device, _opcode: u32) { device::exceptions::cop_unusable_exception(device, device::cop0::COP0_CAUSE_CE2) } diff --git a/src/device/cpu_instructions.rs b/src/device/cpu_instructions.rs index e452a26..4843f2b 100644 --- a/src/device/cpu_instructions.rs +++ b/src/device/cpu_instructions.rs @@ -12,7 +12,7 @@ pub fn rt(opcode: u32) -> u32 { (opcode >> 16) & 0x1F } -pub fn sa(opcode: u32) -> u32 { +fn sa(opcode: u32) -> u32 { (opcode >> 6) & 0x1F } @@ -28,23 +28,23 @@ pub fn se16(value: i16) -> u64 { value as i64 as u64 } -pub fn se8(value: i8) -> u64 { +fn se8(value: i8) -> u64 { value as i64 as u64 } -pub fn bshift>(address: T) -> u64 { +fn bshift>(address: T) -> u64 { ((address.into() & 3) ^ 3) << 3 } -pub fn hshift>(address: T) -> u64 { +fn hshift>(address: T) -> u64 { ((address.into() & 2) ^ 2) << 3 } -pub fn bits_below_mask>(x: T) -> u64 { +fn bits_below_mask>(x: T) -> u64 { (1 << x.into()) - 1 } -pub fn bits_above_mask>(x: T) -> u64 { +fn bits_above_mask>(x: T) -> u64 { !bits_below_mask(x) } @@ -60,7 +60,7 @@ pub fn check_relative_idle_loop(device: &mut device::Device, opcode: u32) { } } -pub fn check_absolute_idle_loop(device: &mut device::Device, target: u64) { +fn check_absolute_idle_loop(device: &mut device::Device, target: u64) { if device.cpu.pc == target && device.memory.fast_read[(device.cpu.pc_phys >> 16) as usize]( device, diff --git a/src/device/events.rs b/src/device/events.rs index d527f3d..ee7c283 100644 --- a/src/device/events.rs +++ b/src/device/events.rs @@ -57,7 +57,7 @@ pub fn trigger_event(device: &mut device::Device) { set_next_event(device); } -pub fn set_next_event(device: &mut device::Device) { +fn set_next_event(device: &mut device::Device) { device.cpu.next_event_count = u64::MAX; for (pos, i) in device.cpu.events.iter().enumerate() { if i.enabled && i.count < device.cpu.next_event_count { diff --git a/src/device/exceptions.rs b/src/device/exceptions.rs index 42008f7..4558b71 100644 --- a/src/device/exceptions.rs +++ b/src/device/exceptions.rs @@ -133,7 +133,7 @@ pub fn tlb_miss_exception( exception_general(device, vector_offset) } -pub fn exception_general(device: &mut device::Device, vector_offset: u32) { +fn exception_general(device: &mut device::Device, vector_offset: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_EXL == 0 { diff --git a/src/device/fpu_instructions.rs b/src/device/fpu_instructions.rs index 007a18c..0b4824f 100644 --- a/src/device/fpu_instructions.rs +++ b/src/device/fpu_instructions.rs @@ -8,7 +8,7 @@ pub fn ft(opcode: u32) -> u32 { (opcode >> 16) & 0x1F } -pub fn fd(opcode: u32) -> u32 { +fn fd(opcode: u32) -> u32 { (opcode >> 6) & 0x1F } diff --git a/src/device/mi.rs b/src/device/mi.rs index 6ca54e7..595dd12 100644 --- a/src/device/mi.rs +++ b/src/device/mi.rs @@ -75,7 +75,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u device::exceptions::check_pending_interrupts(device) } -pub fn update_init_mode(device: &mut device::Device, w: u32) { +fn update_init_mode(device: &mut device::Device, w: u32) { device.mi.regs[MI_INIT_MODE_REG as usize] &= !MI_INIT_LENGTH_MASK; device.mi.regs[MI_INIT_MODE_REG as usize] |= w & MI_INIT_LENGTH_MASK; @@ -103,7 +103,7 @@ pub fn update_init_mode(device: &mut device::Device, w: u32) { } } -pub fn update_intr_mask(device: &mut device::Device, w: u32) { +fn update_intr_mask(device: &mut device::Device, w: u32) { if w & MI_CLR_SP != 0 { device.mi.regs[MI_INTR_MASK_REG as usize] &= !MI_INTR_SP } diff --git a/src/device/pi.rs b/src/device/pi.rs index f3dc713..54a82e1 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -30,7 +30,7 @@ pub struct Pi { pub regs: [u32; PI_REGS_COUNT as usize], } -pub struct PiHandler { +struct PiHandler { read: fn(&mut device::Device, u32, u32, u32) -> u64, write: fn(&mut device::Device, u32, u32, u32) -> u64, } @@ -49,7 +49,7 @@ pub fn read_regs( } } -pub fn dma_read(device: &mut device::Device) { +fn dma_read(device: &mut device::Device) { let handler = get_handler(device.pi.regs[PI_CART_ADDR_REG as usize]); let cart_addr = device.pi.regs[PI_CART_ADDR_REG as usize] & !1; @@ -79,7 +79,7 @@ pub fn dma_read(device: &mut device::Device) { device.pi.regs[PI_STATUS_REG as usize] |= PI_STATUS_DMA_BUSY } -pub fn dma_write(device: &mut device::Device) { +fn dma_write(device: &mut device::Device) { let handler = get_handler(device.pi.regs[PI_CART_ADDR_REG as usize]); let cart_addr = device.pi.regs[PI_CART_ADDR_REG as usize] & !1; @@ -112,7 +112,7 @@ pub fn dma_write(device: &mut device::Device) { device.pi.regs[PI_STATUS_REG as usize] |= PI_STATUS_DMA_BUSY } -pub fn get_handler(address: u32) -> PiHandler { +fn get_handler(address: u32) -> PiHandler { let mut handler = PiHandler { read: device::cart_rom::dma_read, write: device::cart_rom::dma_write, diff --git a/src/device/pif.rs b/src/device/pif.rs index f3f1ad7..d94765f 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -73,7 +73,7 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 device::si::SI_STATUS_DMA_BUSY | device::si::SI_STATUS_IO_BUSY } -pub fn process_channel(device: &mut device::Device, channel: usize) -> usize { +fn process_channel(device: &mut device::Device, channel: usize) -> usize { /* don't process channel if it has been disabled */ if device.pif.channels[channel].tx.is_none() { return 0; @@ -103,14 +103,14 @@ pub fn update_pif_ram(device: &mut device::Device) -> u64 { (24000 + (active_channels * 30000)) as u64 } -pub fn disable_pif_channel(channel: &mut PifChannel) { +fn disable_pif_channel(channel: &mut PifChannel) { channel.tx = None; channel.rx = None; channel.tx_buf = None; channel.rx_buf = None; } -pub fn setup_pif_channel(device: &mut device::Device, channel: usize, buf: usize) -> usize { +fn setup_pif_channel(device: &mut device::Device, channel: usize, buf: usize) -> usize { let tx = device.pif.ram[buf] & 0x3f; let rx = device.pif.ram[buf + 1] & 0x3f; @@ -124,7 +124,7 @@ pub fn setup_pif_channel(device: &mut device::Device, channel: usize, buf: usize (2 + tx + rx) as usize } -pub fn setup_channels_format(device: &mut device::Device) { +fn setup_channels_format(device: &mut device::Device) { let mut i: usize = 0; let mut k: usize = 0; while i < PIF_RAM_SIZE && k < PIF_CHANNELS_COUNT { @@ -244,7 +244,7 @@ pub fn init(device: &mut device::Device) { device.pif.channels[4].process = Some(device::cart::process) } -pub fn process_cic_challenge(device: &mut device::Device) { +fn process_cic_challenge(device: &mut device::Device) { let mut challenge: [u8; 30] = [0; 30]; let mut response: [u8; 30] = [0; 30]; @@ -265,7 +265,7 @@ pub fn process_cic_challenge(device: &mut device::Device) { } } -pub fn n64_cic_nus_6105(chl: [u8; 30], rsp: &mut [u8; 30], len: usize) { +fn n64_cic_nus_6105(chl: [u8; 30], rsp: &mut [u8; 30], len: usize) { let lut0: [u8; 0x10] = [ 0x4, 0x7, 0xA, 0x7, 0xE, 0x5, 0xE, 0x1, 0xC, 0xF, 0x8, 0xF, 0x6, 0x3, 0x6, 0x9, ]; diff --git a/src/device/rdp.rs b/src/device/rdp.rs index 2b323ca..973a7d2 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -91,7 +91,7 @@ pub fn write_regs_dpc(device: &mut device::Device, address: u64, value: u32, mas } } -pub fn run_rdp(device: &mut device::Device) { +fn run_rdp(device: &mut device::Device) { let timer = ui::video::process_rdp_list(); if timer != 0 { @@ -120,7 +120,7 @@ pub fn write_regs_dps(device: &mut device::Device, address: u64, value: u32, mas ) } -pub fn update_dpc_status(device: &mut device::Device, w: u32) { +fn update_dpc_status(device: &mut device::Device, w: u32) { /* clear / set xbus_dmem_dma */ if w & DPC_CLR_XBUS_DMEM_DMA != 0 { device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !DPC_STATUS_XBUS_DMEM_DMA @@ -173,7 +173,7 @@ pub fn init(device: &mut device::Device) { DPC_STATUS_START_GCLK | DPC_STATUS_PIPE_BUSY | DPC_STATUS_CBUF_READY; } -pub fn rdp_interrupt_event(device: &mut device::Device) { +fn rdp_interrupt_event(device: &mut device::Device) { ui::video::full_sync(); device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_DP) diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index 275c089..2fbb404 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -129,7 +129,7 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, _mask: u // SH/SB are broken: They overwrite the whole 32 bit, filling everything that isn't written with zeroes } -pub fn do_dma(device: &mut device::Device, dma: RspDma) { +fn do_dma(device: &mut device::Device, dma: RspDma) { let l = dma.length; let length = ((l & 0xfff) | 7) + 1; @@ -205,7 +205,7 @@ pub fn do_dma(device: &mut device::Device, dma: RspDma) { ); } -pub fn fifo_push(device: &mut device::Device, dir: DmaDir) { +fn fifo_push(device: &mut device::Device, dir: DmaDir) { if device.rsp.regs[SP_DMA_FULL_REG as usize] != 0 { panic!("RSP DMA already full") } @@ -237,7 +237,7 @@ pub fn fifo_push(device: &mut device::Device, dir: DmaDir) { } } -pub fn fifo_pop(device: &mut device::Device) { +fn fifo_pop(device: &mut device::Device) { if device.rsp.regs[SP_DMA_FULL_REG as usize] != 0 { device.rsp.fifo[0].dir = device.rsp.fifo[1].dir; device.rsp.fifo[0].length = device.rsp.fifo[1].length; @@ -312,7 +312,7 @@ pub fn write_regs2(device: &mut device::Device, address: u64, value: u32, mask: } } -pub fn update_sp_status(device: &mut device::Device, w: u32) { +fn update_sp_status(device: &mut device::Device, w: u32) { let was_halted = device.rsp.regs[SP_STATUS_REG as usize] & SP_STATUS_HALT != 0; /* clear / set halt */ @@ -426,7 +426,7 @@ pub fn update_sp_status(device: &mut device::Device, w: u32) { } } -pub fn do_task(device: &mut device::Device) { +fn do_task(device: &mut device::Device) { let timer = device::rsp_cpu::run(device); device::events::create_event( @@ -437,7 +437,7 @@ pub fn do_task(device: &mut device::Device) { ) } -pub fn rsp_event(device: &mut device::Device) { +fn rsp_event(device: &mut device::Device) { if device.rsp.cpu.broken { device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_HALT | SP_STATUS_BROKE; diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index 0081c49..6bbc0fd 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -8,45 +8,45 @@ use crate::device; #[cfg(target_arch = "x86_64")] use std::arch::x86_64::*; -pub fn rd(opcode: u32) -> u32 { +fn rd(opcode: u32) -> u32 { (opcode >> 11) & 0x1F } -pub fn rs(opcode: u32) -> u32 { +fn rs(opcode: u32) -> u32 { (opcode >> 21) & 0x1F } -pub fn rt(opcode: u32) -> u32 { +fn rt(opcode: u32) -> u32 { (opcode >> 16) & 0x1F } -pub fn sa(opcode: u32) -> u32 { +fn sa(opcode: u32) -> u32 { (opcode >> 6) & 0x1F } -pub fn imm(opcode: u32) -> u16 { +fn imm(opcode: u32) -> u16 { opcode as u16 } -pub fn se16(value: i16) -> u32 { +fn se16(value: i16) -> u32 { value as i32 as u32 } -pub fn voffset(opcode: u32) -> u8 { +fn voffset(opcode: u32) -> u8 { (opcode & 0x7F) as u8 } -pub fn velement(opcode: u32) -> u8 { +fn velement(opcode: u32) -> u8 { ((opcode >> 7) & 0xF) as u8 } -pub fn sign_extend_7bit_offset(offset: u8, shift_amount: u32) -> u32 { +fn sign_extend_7bit_offset(offset: u8, shift_amount: u32) -> u32 { let soffset = (((offset << 1) & 0x80) | offset) as i8; (((soffset) as i32) as u32) << shift_amount } -pub fn modify_vpr8(vpr: &mut __m128i, element: u8, value: u8) { +fn modify_vpr8(vpr: &mut __m128i, element: u8, value: u8) { unsafe { *vpr = match element & 15 { 0 => _mm_insert_epi8(*vpr, value as i32, 15), @@ -70,7 +70,7 @@ pub fn modify_vpr8(vpr: &mut __m128i, element: u8, value: u8) { } } -pub fn get_vpr8(vpr: __m128i, element: u8) -> u8 { +fn get_vpr8(vpr: __m128i, element: u8) -> u8 { unsafe { match element & 15 { 0 => _mm_extract_epi8(vpr, 15) as u8, @@ -126,7 +126,7 @@ pub fn get_vpr16(vpr: __m128i, element: u8) -> u16 { } } -pub fn modify_vpr32(vpr: &mut __m128i, element: u8, value: u32) { +fn modify_vpr32(vpr: &mut __m128i, element: u8, value: u32) { unsafe { *vpr = match element & 3 { 0 => _mm_insert_epi32(*vpr, value as i32, 3), @@ -138,7 +138,7 @@ pub fn modify_vpr32(vpr: &mut __m128i, element: u8, value: u32) { } } -pub fn get_vpr32(vpr: __m128i, element: u8) -> u32 { +fn get_vpr32(vpr: __m128i, element: u8) -> u32 { unsafe { match element & 3 { 0 => _mm_extract_epi32(vpr, 3) as u32, @@ -150,7 +150,7 @@ pub fn get_vpr32(vpr: __m128i, element: u8) -> u32 { } } -pub fn modify_vpr64(vpr: &mut __m128i, element: u8, value: u64) { +fn modify_vpr64(vpr: &mut __m128i, element: u8, value: u64) { unsafe { *vpr = match element & 1 { 0 => _mm_insert_epi64(*vpr, value as i64, 1), @@ -160,7 +160,7 @@ pub fn modify_vpr64(vpr: &mut __m128i, element: u8, value: u64) { } } -pub fn get_vpr64(vpr: __m128i, element: u8) -> u64 { +fn get_vpr64(vpr: __m128i, element: u8) -> u64 { unsafe { match element & 1 { 0 => _mm_extract_epi64(vpr, 1) as u64, @@ -170,11 +170,11 @@ pub fn get_vpr64(vpr: __m128i, element: u8) -> u64 { } } -pub fn modify_vpr128(vpr: &mut __m128i, value: u128) { +fn modify_vpr128(vpr: &mut __m128i, value: u128) { unsafe { *vpr = std::mem::transmute::(value) } } -pub fn get_vpr128(vpr: __m128i) -> u128 { +fn get_vpr128(vpr: __m128i) -> u128 { unsafe { std::mem::transmute::<__m128i, u128>(vpr) } } diff --git a/src/device/rsp_vu_instructions.rs b/src/device/rsp_vu_instructions.rs index e9f0833..15de7e4 100644 --- a/src/device/rsp_vu_instructions.rs +++ b/src/device/rsp_vu_instructions.rs @@ -9,41 +9,41 @@ use crate::device::rsp_su_instructions::{get_vpr16, modify_vpr16}; #[cfg(target_arch = "x86_64")] use std::arch::x86_64::*; -pub fn vt(opcode: u32) -> u32 { +fn vt(opcode: u32) -> u32 { (opcode >> 16) & 0x1F } -pub fn ve(opcode: u32) -> u32 { +fn ve(opcode: u32) -> u32 { (opcode >> 21) & 0xF } -pub fn vs(opcode: u32) -> u32 { +fn vs(opcode: u32) -> u32 { (opcode >> 11) & 0x1F } -pub fn vd(opcode: u32) -> u32 { +fn vd(opcode: u32) -> u32 { (opcode >> 6) & 0x1F } -pub fn de(opcode: u32) -> u32 { +fn de(opcode: u32) -> u32 { (opcode >> 11) & 0x7 } -pub fn clamp_signed_32(value: i32) -> i16 { +fn clamp_signed_32(value: i32) -> i16 { value.clamp(-32768, 32767) as i16 } -pub fn clamp_signed_64(value: i64) -> i16 { +fn clamp_signed_64(value: i64) -> i16 { value.clamp(-32768, 32767) as i16 } -pub fn s_clip(x: i64, bits: u32) -> i64 { +fn s_clip(x: i64, bits: u32) -> i64 { let b = 1_u64 << (bits - 1); let m = b * 2 - 1; ((((x as u64) & m) ^ b).wrapping_sub(b)) as i64 } -pub fn vte(device: &device::Device, vt: u32, index: usize) -> __m128i { +fn vte(device: &device::Device, vt: u32, index: usize) -> __m128i { unsafe { _mm_shuffle_epi8( device.rsp.cpu.vpr[vt as usize], diff --git a/src/device/si.rs b/src/device/si.rs index 11adf44..df1e644 100644 --- a/src/device/si.rs +++ b/src/device/si.rs @@ -34,7 +34,7 @@ pub fn read_regs( device.si.regs[((address & 0xFFFF) >> 2) as usize] } -pub fn dma_read(device: &mut device::Device) { +fn dma_read(device: &mut device::Device) { device.si.dma_dir = DmaDir::Read; let duration = device::pif::update_pif_ram(device); @@ -49,7 +49,7 @@ pub fn dma_read(device: &mut device::Device) { ) } -pub fn dma_write(device: &mut device::Device) { +fn dma_write(device: &mut device::Device) { device.si.dma_dir = DmaDir::Write; copy_pif_rdram(device); @@ -78,7 +78,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } //rdram is in native endian format, and pif memory is in big endian format -pub fn copy_pif_rdram(device: &mut device::Device) { +fn copy_pif_rdram(device: &mut device::Device) { let dram_addr = device.si.regs[SI_DRAM_ADDR_REG as usize] as usize & device::rdram::RDRAM_MASK; if device.si.dma_dir == DmaDir::Write { let mut i = 0; diff --git a/src/device/sram.rs b/src/device/sram.rs index e40e941..9ece908 100644 --- a/src/device/sram.rs +++ b/src/device/sram.rs @@ -27,19 +27,19 @@ pub struct Flashram { pub silicon_id: [u32; 2], } -pub fn format_sram(device: &mut device::Device) { +fn format_sram(device: &mut device::Device) { if device.ui.saves.sram.0.len() < SRAM_SIZE { device.ui.saves.sram.0.resize(SRAM_SIZE, 0xFF) } } -pub fn format_flash(device: &mut device::Device) { +fn format_flash(device: &mut device::Device) { if device.ui.saves.flash.0.len() < FLASHRAM_SIZE { device.ui.saves.flash.0.resize(FLASHRAM_SIZE, 0xFF) } } -pub fn read_mem_sram(device: &mut device::Device, address: u64) -> u32 { +fn read_mem_sram(device: &mut device::Device, address: u64) -> u32 { let masked_address = address as usize & SRAM_MASK; format_sram(device); @@ -51,7 +51,7 @@ pub fn read_mem_sram(device: &mut device::Device, address: u64) -> u32 { ) } -pub fn read_mem_flash(device: &device::Device, address: u64) -> u32 { +fn read_mem_flash(device: &device::Device, address: u64) -> u32 { if (address & 0x1ffff) == 0x00000 && device.flashram.mode == FlashramMode::Status { /* read Status register */ device.flashram.status @@ -80,7 +80,7 @@ pub fn read_mem( } } -pub fn write_mem_sram(device: &mut device::Device, address: u64, value: u32, mask: u32) { +fn write_mem_sram(device: &mut device::Device, address: u64, value: u32, mask: u32) { let masked_address = address as usize & SRAM_MASK; format_sram(device); @@ -96,7 +96,7 @@ pub fn write_mem_sram(device: &mut device::Device, address: u64, value: u32, mas device.ui.saves.sram.1 = true } -pub fn write_mem_flash(device: &mut device::Device, address: u64, value: u32, mask: u32) { +fn write_mem_flash(device: &mut device::Device, address: u64, value: u32, mask: u32) { if (address & 0x1ffff) == 0x00000 && device.flashram.mode == FlashramMode::Status { /* clear/set Status register */ device.flashram.status = (value & mask) & 0xff; @@ -128,12 +128,7 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 ); } -pub fn dma_read_sram( - device: &mut device::Device, - mut cart_addr: u32, - mut dram_addr: u32, - length: u32, -) { +fn dma_read_sram(device: &mut device::Device, mut cart_addr: u32, mut dram_addr: u32, length: u32) { dram_addr &= device::rdram::RDRAM_MASK as u32; cart_addr &= SRAM_MASK as u32; let mut i = dram_addr; @@ -150,7 +145,7 @@ pub fn dma_read_sram( device.ui.saves.sram.1 = true } -pub fn dma_read_flash(device: &mut device::Device, cart_addr: u32, dram_addr: u32, length: u32) { +fn dma_read_flash(device: &mut device::Device, cart_addr: u32, dram_addr: u32, length: u32) { format_flash(device); if (cart_addr & 0x1ffff) == 0x00000 @@ -178,7 +173,7 @@ pub fn dma_read(device: &mut device::Device, cart_addr: u32, dram_addr: u32, len device::pi::calculate_cycles(device, 2, length) } -pub fn dma_write_sram( +fn dma_write_sram( device: &mut device::Device, mut cart_addr: u32, mut dram_addr: u32, @@ -198,7 +193,7 @@ pub fn dma_write_sram( } } -pub fn dma_write_flash( +fn dma_write_flash( device: &mut device::Device, mut cart_addr: u32, mut dram_addr: u32, @@ -251,7 +246,7 @@ pub fn dma_write(device: &mut device::Device, cart_addr: u32, dram_addr: u32, le device::pi::calculate_cycles(device, 2, length) } -pub fn flashram_command(device: &mut device::Device, command: u32) { +fn flashram_command(device: &mut device::Device, command: u32) { match command & 0xff000000 { 0x3c000000 => { /* set chip erase mode */ diff --git a/src/device/tlb.rs b/src/device/tlb.rs index d32bfbb..e966684 100644 --- a/src/device/tlb.rs +++ b/src/device/tlb.rs @@ -145,7 +145,7 @@ pub fn probe(device: &mut device::Device) { } } -pub fn tlb_unmap(device: &mut device::Device, index: u64) { +fn tlb_unmap(device: &mut device::Device, index: u64) { let e = &mut device.cpu.cop0.tlb_entries[index as usize]; if e.v_even != 0 { @@ -183,7 +183,7 @@ pub fn tlb_unmap(device: &mut device::Device, index: u64) { } } -pub fn tlb_map(device: &mut device::Device, index: u64) { +fn tlb_map(device: &mut device::Device, index: u64) { let e = &mut device.cpu.cop0.tlb_entries[index as usize]; if e.v_even != 0 diff --git a/src/device/vi.rs b/src/device/vi.rs index f29c1d7..ccb7964 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -32,7 +32,7 @@ pub struct Vi { const LIMIT_BUFFER: u64 = 3; -pub fn set_expected_refresh_rate(device: &mut device::Device) { +fn set_expected_refresh_rate(device: &mut device::Device) { let expected_refresh_rate = device.vi.clock as f64 / (device.vi.regs[VI_V_SYNC_REG as usize] + 1) as f64 / ((device.vi.regs[VI_H_SYNC_REG as usize] & 0xFFF) + 1) as f64 @@ -48,7 +48,7 @@ pub fn set_expected_refresh_rate(device: &mut device::Device) { device.vi.limiter = Some(governor::RateLimiter::direct(quota)) } -pub fn set_vertical_interrupt(device: &mut device::Device) { +fn set_vertical_interrupt(device: &mut device::Device) { if device::events::get_event(device, device::events::EventType::VI).is_none() { device::events::create_event( device, @@ -59,7 +59,7 @@ pub fn set_vertical_interrupt(device: &mut device::Device) { } } -pub fn set_current_line(device: &mut device::Device) { +fn set_current_line(device: &mut device::Device) { let delay = device.vi.delay; let next_vi = device::events::get_event(device, device::events::EventType::VI); if next_vi.is_some() { @@ -115,7 +115,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) } -pub fn vertical_interrupt_event(device: &mut device::Device) { +fn vertical_interrupt_event(device: &mut device::Device) { device.cpu.running = ui::video::update_screen(); /* @@ -162,7 +162,7 @@ pub fn init(device: &mut device::Device) { */ } -pub fn speed_limiter(device: &device::Device) { +fn speed_limiter(device: &device::Device) { let result = device.vi.limiter.as_ref().unwrap().check(); if result.is_err() { let outcome = result.unwrap_err(); diff --git a/src/main.rs b/src/main.rs index feab3e5..3ab6f2c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,4 @@ +#![deny(warnings)] #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release #[global_allocator] static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; diff --git a/src/ui/input.rs b/src/ui/input.rs index 14f9450..a01064d 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -34,7 +34,7 @@ pub struct Controllers { pub joystick: Option, } -pub fn bound_axis(x: &mut f64, y: &mut f64) { +fn bound_axis(x: &mut f64, y: &mut f64) { let radius = 95.0; // this is roughly the maxium diagonal distance of the controller // Calculate the distance from the origin (0, 0) @@ -48,7 +48,7 @@ pub fn bound_axis(x: &mut f64, y: &mut f64) { } } -pub fn set_axis_from_joystick( +fn set_axis_from_joystick( profile: &ui::config::InputProfile, joystick: &sdl2::joystick::Joystick, ) -> (f64, f64) { @@ -114,7 +114,7 @@ fn get_button_from_i32(button: i32) -> sdl2::controller::Button { } } -pub fn set_axis_from_controller( +fn set_axis_from_controller( profile: &ui::config::InputProfile, controller: &sdl2::controller::GameController, ) -> (f64, f64) { @@ -150,7 +150,7 @@ pub fn set_axis_from_controller( (x, y) } -pub fn set_axis_from_keys( +fn set_axis_from_keys( profile: &ui::config::InputProfile, keyboard_state: &sdl2::keyboard::KeyboardState, ) -> (f64, f64) { @@ -187,7 +187,7 @@ pub fn set_axis_from_keys( (x, y) } -pub fn set_buttons_from_joystick( +fn set_buttons_from_joystick( profile: &ui::config::InputProfile, i: usize, joystick: &sdl2::joystick::Joystick, @@ -217,7 +217,7 @@ pub fn set_buttons_from_joystick( } } -pub fn set_buttons_from_controller( +fn set_buttons_from_controller( profile: &ui::config::InputProfile, i: usize, controller: &sdl2::controller::GameController, @@ -268,7 +268,7 @@ pub fn set_rumble(ui: &mut ui::Ui, channel: usize, rumble: u8) { } } -pub fn change_paks( +fn change_paks( profile: &ui::config::InputProfile, joystick: &Option, controller: &Option, diff --git a/src/ui/storage.rs b/src/ui/storage.rs index fadb2ca..afcb7a7 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -28,7 +28,7 @@ pub struct Saves { pub romsave: (serde_json::Map, bool), } -pub fn get_save_type(game_id: &str) -> Vec { +fn get_save_type(game_id: &str) -> Vec { match game_id { "NB7" | // Banjo-Tooie [Banjo to Kazooie no Daiboken 2 (J)] "NGT" | // City Tour GrandPrix - Zen Nihon GT Senshuken @@ -141,7 +141,7 @@ pub fn load_saves(ui: &mut ui::Ui) { } } -pub fn write_rom_save(ui: &ui::Ui) { +fn write_rom_save(ui: &ui::Ui) { let f = std::fs::File::create(ui.paths.romsave_file_path.clone()).unwrap(); serde_json::to_writer(f, &ui.saves.romsave.0).unwrap(); } @@ -164,7 +164,7 @@ pub fn write_saves(ui: &ui::Ui) { } } -pub fn write_save(ui: &ui::Ui, save_type: SaveTypes) { +fn write_save(ui: &ui::Ui, save_type: SaveTypes) { let path: &std::path::Path; let data: &Vec; match save_type { From dbd12516cf8652a143c0091da56304962b74999f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 19 Jan 2025 14:17:09 +0100 Subject: [PATCH 0214/1117] Netplay create room GUI (#162) * netplay * more * more * more * more * tokio * more * more * more * video * functions * more * use rusttls * fix broadcast --- Cargo.toml | 13 +- build.rs | 1 - parallel-rdp/interface.cpp | 25 +- parallel-rdp/interface.hpp | 1 - src/device.rs | 9 +- src/device/controller/vru.rs | 6 +- src/device/rdp.rs | 2 - src/main.rs | 3 +- src/ui/gui.rs | 521 ++++++++++++++++++++++++----------- src/ui/video.rs | 6 - src/ui/vru.rs | 10 +- 11 files changed, 396 insertions(+), 201 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 8455849..d06645a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,21 +15,30 @@ chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" eframe = "0.30" -rfd = "0.15" sha2 = "0.10" rusttype = "0.9" -futures = "0.3" +tokio = { version = "1.43", features = ["rt-multi-thread", "macros"] } sdl2-sys = "0.37" spin_sleep = "1.3" encoding_rs = "0.8" mimalloc = "0.1" clap = { version = "4.4", features = ["derive"] } +[dependencies.reqwest] +version = "0.12" +default-features = false +features = ["http2","rustls-tls","charset","json"] + [dependencies.sdl2] version = "0.37" default-features = false features = ["static-link","bundled"] +[dependencies.rfd] +version = "0.15" +default-features = false +features = ["xdg-portal","tokio"] + [build-dependencies] winres = "0.1" bindgen = "0.71" diff --git a/build.rs b/build.rs index c204cc9..05df125 100644 --- a/build.rs +++ b/build.rs @@ -96,7 +96,6 @@ fn main() { .allowlist_function("rdp_set_vi_register") .allowlist_function("rdp_update_screen") .allowlist_function("rdp_process_commands") - .allowlist_function("rdp_full_sync") .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) .generate() .expect("Unable to generate bindings"); diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index b621c56..4db181e 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -60,12 +60,8 @@ static uint32_t cmd_data[0x00040000 >> 2]; static int cmd_cur; static int cmd_ptr; static bool emu_running; -static uint64_t rdp_sync_signal; static GFX_INFO gfx_info; -static uint64_t last_frame_counter; -static uint64_t frame_counter; - static const unsigned cmd_len_lut[64] = { 1, 1, @@ -209,8 +205,6 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_sc wsi->begin_frame(); emu_running = true; - last_frame_counter = 0; - frame_counter = 0; } void rdp_close() @@ -336,7 +330,6 @@ bool rdp_update_screen() render_frame(device); wsi->end_frame(); wsi->begin_frame(); - frame_counter++; return emu_running; } @@ -443,15 +436,7 @@ uint64_t rdp_process_commands() if (RDP::Op(command) == RDP::Op::SyncFull) { - if (frame_counter != last_frame_counter) // Only sync once per frame - { - rdp_sync_signal = processor->signal_timeline(); - last_frame_counter = frame_counter; - } - else - { - rdp_sync_signal = 0; - } + processor->wait_for_timeline(processor->signal_timeline()); uint32_t width = viCalculateHorizonalWidth(*gfx_info.VI_H_START_REG, *gfx_info.VI_X_SCALE_REG, *gfx_info.VI_WIDTH_REG); if (width == 0) @@ -478,11 +463,3 @@ uint64_t rdp_process_commands() return interrupt_timer; } - -void rdp_full_sync() -{ - if (rdp_sync_signal) - { - processor->wait_for_timeline(rdp_sync_signal); - } -} diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 67075e8..b53268e 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -28,7 +28,6 @@ extern "C" void rdp_set_vi_register(uint32_t reg, uint32_t value); bool rdp_update_screen(); uint64_t rdp_process_commands(); - void rdp_full_sync(); #ifdef __cplusplus } diff --git a/src/device.rs b/src/device.rs index 8355c1f..2a82d96 100644 --- a/src/device.rs +++ b/src/device.rs @@ -53,6 +53,10 @@ pub fn run_game( fullscreen: bool, ) { let rom_contents = get_rom_contents(file_path); + if rom_contents.is_empty() { + println!("Could not read rom file"); + return; + } cart_rom::init(device, rom_contents); // cart needs to come before rdram @@ -106,11 +110,12 @@ fn swap_rom(contents: Vec) -> Vec { } return data; } else { - panic!("unknown rom format") + let data: Vec = vec![]; + data } } -fn get_rom_contents(file_path: &std::path::Path) -> Vec { +pub fn get_rom_contents(file_path: &std::path::Path) -> Vec { let mut contents = vec![]; if file_path.extension().unwrap().eq_ignore_ascii_case("zip") { let zip_file = fs::File::open(file_path).unwrap(); diff --git a/src/device/controller/vru.rs b/src/device/controller/vru.rs index e300fda..13b4a9d 100644 --- a/src/device/controller/vru.rs +++ b/src/device/controller/vru.rs @@ -26,8 +26,8 @@ pub struct Vru { pub words: Vec, pub talking: bool, pub word_mappings: HashMap, - pub window_notifier: Option>>, - pub word_receiver: Option>, + pub window_notifier: Option>>, + pub word_receiver: Option>, pub gui_ctx: Option, } @@ -187,7 +187,7 @@ pub fn process(device: &mut device::Device, channel: usize) { ui::vru::prompt_for_match( &device.vru.words, device.vru.window_notifier.as_ref().unwrap(), - device.vru.word_receiver.as_ref().unwrap(), + device.vru.word_receiver.as_mut().unwrap(), device.vru.gui_ctx.as_ref().unwrap(), ) } else { diff --git a/src/device/rdp.rs b/src/device/rdp.rs index 973a7d2..971425c 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -174,7 +174,5 @@ pub fn init(device: &mut device::Device) { } fn rdp_interrupt_event(device: &mut device::Device) { - ui::video::full_sync(); - device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_DP) } diff --git a/src/main.rs b/src/main.rs index 3ab6f2c..a69baff 100644 --- a/src/main.rs +++ b/src/main.rs @@ -62,7 +62,8 @@ struct Args { clear_input_bindings: bool, } -fn main() { +#[tokio::main] +async fn main() { let exe_path = std::env::current_exe().unwrap(); let portable_dir = exe_path.parent(); let portable = portable_dir.unwrap().join("portable.txt").exists(); diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 161b801..f5e88a7 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -2,11 +2,25 @@ use crate::device; use crate::ui; use eframe::egui; +pub struct Netplay { + session_name: String, + password: String, + player_name: String, + server: (String, String), + servers: std::collections::HashMap, + server_receiver: Option>>, + broadcast_socket: Option, + broadcast_timer: Option, +} + pub struct GopherEguiApp { config_dir: std::path::PathBuf, cache_dir: std::path::PathBuf, data_dir: std::path::PathBuf, configure_profile: bool, + netplay_create: bool, + netplay_join: bool, + netplay_wait: bool, profile_name: String, controllers: Vec, selected_controller: [i32; 4], @@ -19,9 +33,10 @@ pub struct GopherEguiApp { emulate_vru: bool, dinput: bool, show_vru_dialog: bool, - vru_window_receiver: Option>>, - vru_word_notifier: Option>, + vru_window_receiver: Option>>, + vru_word_notifier: Option>, vru_word_list: Vec, + netplay: Netplay, } struct SaveConfig { @@ -90,6 +105,9 @@ impl GopherEguiApp { config_dir: config_dir.clone(), data_dir: data_dir.clone(), configure_profile: false, + netplay_create: false, + netplay_join: false, + netplay_wait: false, profile_name: "".to_string(), selected_profile: game_ui.config.input.input_profile_binding.clone(), selected_controller, @@ -105,6 +123,16 @@ impl GopherEguiApp { vru_window_receiver: None, vru_word_notifier: None, vru_word_list: Vec::new(), + netplay: Netplay { + broadcast_socket: None, + broadcast_timer: None, + server_receiver: None, + session_name: "".to_string(), + password: "".to_string(), + player_name: "".to_string(), + server: ("".to_string(), "".to_string()), + servers: std::collections::HashMap::new(), + }, } } } @@ -149,130 +177,356 @@ impl Drop for GopherEguiApp { } } +fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { + egui::Window::new("Create Netplay Session").show(ctx, |ui| { + egui::Grid::new("button_grid").show(ui, |ui| { + let profile_name_label = ui.label("Profile Name:"); + let mut size = ui.spacing().interact_size; + size.x = 200.0; + ui.add_sized(size, |ui: &mut egui::Ui| { + ui.text_edit_singleline(&mut app.netplay.session_name) + .labelled_by(profile_name_label.id) + }); + + ui.end_row(); + + let password_label = ui.label("Password (Optional):"); + + ui.text_edit_singleline(&mut app.netplay.password) + .labelled_by(password_label.id); + + ui.end_row(); + + ui.label("ROM"); + if ui.button("Open ROM").clicked() { + // Spawn dialog on main thread + let task = rfd::AsyncFileDialog::new().pick_file(); + tokio::spawn(async { + let file = task.await; + + if let Some(file) = file { + let _rom_contents = device::get_rom_contents(file.path()); + } + }); + } + + ui.end_row(); + + let player_name_label = ui.label("Player Name:"); + + ui.text_edit_singleline(&mut app.netplay.player_name) + .labelled_by(player_name_label.id); + + ui.end_row(); + + ui.label("Server:"); + + if app.netplay.servers.is_empty() { + if app.netplay.broadcast_socket.is_none() { + app.netplay.broadcast_socket = Some( + std::net::UdpSocket::bind((std::net::Ipv4Addr::UNSPECIFIED, 0)) + .expect("couldn't bind to address"), + ); + let socket = app.netplay.broadcast_socket.as_ref().unwrap(); + socket + .set_broadcast(true) + .expect("set_broadcast call failed"); + socket + .set_nonblocking(true) + .expect("could not set up socket"); + let data: [u8; 1] = [1]; + socket + .send_to(&data, (std::net::Ipv4Addr::BROADCAST, 45000)) + .expect("couldn't send data"); + app.netplay.broadcast_timer = + Some(std::time::Instant::now() + std::time::Duration::from_secs(5)); + } + if app.netplay.server_receiver.is_none() { + let (tx, rx) = tokio::sync::mpsc::channel(1); + app.netplay.server_receiver = Some(rx); + + tokio::spawn(async move { + if let Ok(response) = + reqwest::get("https://m64p.s3.amazonaws.com/servers.json").await + { + if let Ok(servers) = response + .json::>() + .await + { + let _ = tx.send(servers).await; + } + } + }); + } + } + if app.netplay.broadcast_timer.is_some() + && std::time::Instant::now() > app.netplay.broadcast_timer.unwrap() + { + app.netplay.broadcast_timer = None; + } + if app.netplay.broadcast_socket.is_some() && app.netplay.broadcast_timer.is_some() { + let mut buffer = [0; 1024]; + let result = app + .netplay + .broadcast_socket + .as_ref() + .unwrap() + .recv_from(&mut buffer); + if result.is_ok() { + let (amt, _src) = result.unwrap(); + let data: std::collections::HashMap = + serde_json::from_slice(&buffer[..amt]).unwrap(); + for server in data.iter() { + let (server_name, server_ip) = server; + app.netplay + .servers + .insert(server_name.to_string(), server_ip.to_string()); + app.netplay.server = (server.0.clone(), server.1.clone()); + } + app.netplay.broadcast_socket = None; + } + } + if app.netplay.server_receiver.is_some() { + let result = app.netplay.server_receiver.as_mut().unwrap().try_recv(); + if result.is_ok() { + app.netplay.servers.extend(result.unwrap()); + app.netplay.server_receiver = None; + if app.netplay.server.0.is_empty() { + let first_server = app.netplay.servers.iter().next().unwrap(); + app.netplay.server = (first_server.0.clone(), first_server.1.clone()); + } + } + } + + egui::ComboBox::from_id_salt("server-combobox") + .selected_text(app.netplay.server.0.to_string()) + .show_ui(ui, |ui| { + for server in app.netplay.servers.iter() { + ui.selectable_value( + &mut app.netplay.server, + (server.0.clone(), server.1.clone()), + server.0, + ); + } + }); + + ui.end_row(); + + if ui.button("Create Session").clicked() { + app.netplay_create = false; + app.netplay_wait = true; + } + ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { + if ui.button("Close").clicked() { + app.netplay_create = false + }; + }) + }); + }); +} + +fn netplay_join(app: &mut GopherEguiApp, ctx: &egui::Context) { + egui::Window::new("Join Netplay Session").show(ctx, |ui| { + if ui.button("Close").clicked() { + app.netplay_join = false + }; + }); +} + +fn configure_profile(app: &mut GopherEguiApp, ctx: &egui::Context) { + egui::Window::new("Configure Input Profile") + // .open(&mut self.configure_profile) + .show(ctx, |ui| { + ui.horizontal(|ui| { + let name_label = ui.label("Profile Name:"); + ui.text_edit_singleline(&mut app.profile_name) + .labelled_by(name_label.id); + }); + ui.checkbox(&mut app.dinput, "Use DirectInput"); + ui.horizontal(|ui| { + if ui.button("Configure Profile").clicked() { + let profile_name = app.profile_name.clone(); + let config_dir = app.config_dir.clone(); + let dinput = app.dinput; + tokio::spawn(async move { + let mut game_ui = ui::Ui::new(config_dir); + ui::input::configure_input_profile(&mut game_ui, profile_name, dinput); + }); + app.configure_profile = false; + if !app.profile_name.is_empty() + && !app.input_profiles.contains(&app.profile_name) + { + app.input_profiles.push(app.profile_name.clone()) + } + }; + ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { + if ui.button("Close").clicked() { + app.configure_profile = false + }; + }) + }); + }); +} + +fn show_vru_dialog(app: &mut GopherEguiApp, ctx: &egui::Context) { + ctx.show_viewport_immediate( + egui::ViewportId::from_hash_of("vru_dialog"), + egui::ViewportBuilder::default() + .with_title("What would you like to say?") + .with_always_on_top(), + |ctx, class| { + assert!( + class == egui::ViewportClass::Immediate, + "This egui backend doesn't support multiple viewports" + ); + egui::CentralPanel::default().show(ctx, |ui| { + egui::Grid::new("vru_words").show(ui, |ui| { + for (i, v) in app.vru_word_list.iter().enumerate() { + if i % 5 == 0 { + ui.end_row(); + } + if ui.button((*v).to_string()).clicked() { + app.vru_word_notifier + .as_ref() + .unwrap() + .try_send(v.clone()) + .unwrap(); + app.show_vru_dialog = false; + } + } + }); + }); + + if ctx.input(|i| i.viewport().close_requested()) { + app.vru_word_notifier + .as_ref() + .unwrap() + .try_send(String::from("")) + .unwrap(); + app.show_vru_dialog = false; + } + }, + ); +} + +fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { + let task = rfd::AsyncFileDialog::new().pick_file(); + let selected_controller = app.selected_controller; + let selected_profile = app.selected_profile.clone(); + let controller_enabled = app.controller_enabled; + let upscale = app.upscale; + let integer_scaling = app.integer_scaling; + let fullscreen = app.fullscreen; + let emulate_vru = app.emulate_vru; + let config_dir = app.config_dir.clone(); + let cache_dir = app.cache_dir.clone(); + let data_dir = app.data_dir.clone(); + + let (vru_window_notifier, vru_window_receiver): ( + tokio::sync::mpsc::Sender>, + tokio::sync::mpsc::Receiver>, + ) = tokio::sync::mpsc::channel(1); + + let (vru_word_notifier, vru_word_receiver): ( + tokio::sync::mpsc::Sender, + tokio::sync::mpsc::Receiver, + ) = tokio::sync::mpsc::channel(1); + + if emulate_vru { + app.vru_window_receiver = Some(vru_window_receiver); + app.vru_word_notifier = Some(vru_word_notifier); + } + + let gui_ctx = ctx.clone(); + tokio::spawn(async move { + let file = task.await; + + if let Some(file) = file { + let running_file = cache_dir.join("game_running"); + if running_file.exists() { + return; + } + let result = std::fs::File::create(running_file.clone()); + if result.is_err() { + panic!("could not create running file: {}", result.err().unwrap()) + } + let mut device = device::Device::new(config_dir); + + let save_config_items = SaveConfig { + selected_controller, + selected_profile, + controller_enabled, + upscale, + integer_scaling, + fullscreen, + emulate_vru, + }; + save_config(&mut device.ui, save_config_items); + + if emulate_vru { + device.vru.window_notifier = Some(vru_window_notifier); + device.vru.word_receiver = Some(vru_word_receiver); + device.vru.gui_ctx = Some(gui_ctx); + } + device::run_game( + std::path::Path::new(file.path()), + data_dir, + &mut device, + fullscreen, + ); + let result = std::fs::remove_file(running_file.clone()); + if result.is_err() { + panic!("could not remove running file: {}", result.err().unwrap()) + } + } + }); +} + impl eframe::App for GopherEguiApp { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { + if self.netplay_create { + netplay_create(self, ctx); + } + + if self.netplay_join { + netplay_join(self, ctx); + } + if self.configure_profile { - egui::Window::new("Configure Input Profile") - // .open(&mut self.configure_profile) - .show(ctx, |ui| { - ui.horizontal(|ui| { - let name_label = ui.label("Profile Name: "); - ui.text_edit_singleline(&mut self.profile_name) - .labelled_by(name_label.id); - }); - ui.checkbox(&mut self.dinput, "Use DirectInput"); - ui.horizontal(|ui| { - if ui.button("Configure Profile").clicked() { - let profile_name = self.profile_name.clone(); - let config_dir = self.config_dir.clone(); - let dinput = self.dinput; - execute(async move { - let mut game_ui = ui::Ui::new(config_dir); - ui::input::configure_input_profile( - &mut game_ui, - profile_name, - dinput, - ); - }); - self.configure_profile = false; - if !self.profile_name.is_empty() - && !self.input_profiles.contains(&self.profile_name) - { - self.input_profiles.push(self.profile_name.clone()) - } - }; - if ui.button("Close").clicked() { - self.configure_profile = false - }; - }); - }); + configure_profile(self, ctx); } egui::CentralPanel::default().show(ctx, |ui| { if self.configure_profile { ui.disable() } + egui::Grid::new("button_grid") + .min_col_width(200.0) + .show(ui, |ui| { + if ui.button("Open ROM").clicked() { + open_rom(self, ctx); + } - if ui.button("Open ROM").clicked() { - // Spawn dialog on main thread - let task = rfd::AsyncFileDialog::new().pick_file(); - let selected_controller = self.selected_controller; - let selected_profile = self.selected_profile.clone(); - let controller_enabled = self.controller_enabled; - let upscale = self.upscale; - let integer_scaling = self.integer_scaling; - let fullscreen = self.fullscreen; - let emulate_vru = self.emulate_vru; - let config_dir = self.config_dir.clone(); - let cache_dir = self.cache_dir.clone(); - let data_dir = self.data_dir.clone(); + if ui.button("Netplay: Create Session").clicked() + && !self.cache_dir.join("game_running").exists() + { + self.netplay_create = true; + } - let (vru_window_notifier, vru_window_receiver): ( - std::sync::mpsc::Sender>, - std::sync::mpsc::Receiver>, - ) = std::sync::mpsc::channel(); + ui.end_row(); - let (vru_word_notifier, vru_word_receiver): ( - std::sync::mpsc::Sender, - std::sync::mpsc::Receiver, - ) = std::sync::mpsc::channel(); + if ui.button("Configure Input Profile").clicked() + && !self.cache_dir.join("game_running").exists() + { + self.configure_profile = true; + } - if emulate_vru { - self.vru_window_receiver = Some(vru_window_receiver); - self.vru_word_notifier = Some(vru_word_notifier); - } - - let gui_ctx = ctx.clone(); - execute(async move { - let file = task.await; - - if let Some(file) = file { - let running_file = cache_dir.join("game_running"); - if running_file.exists() { - return; - } - let result = std::fs::File::create(running_file.clone()); - if result.is_err() { - panic!("could not create running file: {}", result.err().unwrap()) - } - let mut device = device::Device::new(config_dir); - - let save_config_items = SaveConfig { - selected_controller, - selected_profile, - controller_enabled, - upscale, - integer_scaling, - fullscreen, - emulate_vru, - }; - save_config(&mut device.ui, save_config_items); - - if emulate_vru { - device.vru.window_notifier = Some(vru_window_notifier); - device.vru.word_receiver = Some(vru_word_receiver); - device.vru.gui_ctx = Some(gui_ctx); - } - device::run_game( - std::path::Path::new(file.path()), - data_dir, - &mut device, - fullscreen, - ); - let result = std::fs::remove_file(running_file.clone()); - if result.is_err() { - panic!("could not remove running file: {}", result.err().unwrap()) - } + if ui.button("Netplay: Join Session").clicked() + && !self.cache_dir.join("game_running").exists() + { + self.netplay_join = true; } }); - } - - if ui.button("Configure Input Profile").clicked() { - if self.cache_dir.join("game_running").exists() { - return; - } - self.configure_profile = true; - } ui.add_space(32.0); ui.label("Controller Config:"); @@ -336,7 +590,7 @@ impl eframe::App for GopherEguiApp { }); if self.emulate_vru && self.vru_window_receiver.is_some() { - let result = self.vru_window_receiver.as_ref().unwrap().try_recv(); + let result = self.vru_window_receiver.as_mut().unwrap().try_recv(); if result.is_ok() { self.show_vru_dialog = true; self.vru_word_list = result.unwrap(); @@ -344,52 +598,11 @@ impl eframe::App for GopherEguiApp { } if self.show_vru_dialog { - ctx.show_viewport_immediate( - egui::ViewportId::from_hash_of("vru_dialog"), - egui::ViewportBuilder::default() - .with_title("What would you like to say?") - .with_always_on_top(), - |ctx, class| { - assert!( - class == egui::ViewportClass::Immediate, - "This egui backend doesn't support multiple viewports" - ); - egui::CentralPanel::default().show(ctx, |ui| { - egui::Grid::new("vru_words").show(ui, |ui| { - for (i, v) in self.vru_word_list.iter().enumerate() { - if i % 5 == 0 { - ui.end_row(); - } - if ui.button((*v).to_string()).clicked() { - self.vru_word_notifier - .as_ref() - .unwrap() - .send(v.clone()) - .unwrap(); - self.show_vru_dialog = false; - } - } - }); - }); - - if ctx.input(|i| i.viewport().close_requested()) { - self.vru_word_notifier - .as_ref() - .unwrap() - .send(String::from("")) - .unwrap(); - self.show_vru_dialog = false; - } - }, - ); + show_vru_dialog(self, ctx); } } } -fn execute + Send + 'static>(f: F) { - std::thread::spawn(move || futures::executor::block_on(f)); -} - fn add_japanese_font(ctx: &egui::Context) { ctx.add_font(eframe::epaint::text::FontInsert::new( "japanese_font", diff --git a/src/ui/video.rs b/src/ui/video.rs index 43cc824..0ca6e8c 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -66,12 +66,6 @@ pub fn process_rdp_list() -> u64 { unsafe { rdp_process_commands() } } -pub fn full_sync() { - unsafe { - rdp_full_sync(); - } -} - pub fn draw_text( text: &str, canvas: &mut sdl2::render::Canvas, diff --git a/src/ui/vru.rs b/src/ui/vru.rs index 5d44f9c..c04c48d 100644 --- a/src/ui/vru.rs +++ b/src/ui/vru.rs @@ -4,18 +4,18 @@ use crate::ui; pub fn prompt_for_match( words: &[String], - window_notifier: &std::sync::mpsc::Sender>, - word_index_notifier: &std::sync::mpsc::Receiver, + window_notifier: &tokio::sync::mpsc::Sender>, + word_index_receiver: &mut tokio::sync::mpsc::Receiver, gui_ctx: &egui::Context, ) -> u16 { let mut dedup_words = words.to_owned(); dedup_words.sort(); dedup_words.dedup(); - window_notifier.send(dedup_words).unwrap(); + window_notifier.try_send(dedup_words).unwrap(); gui_ctx.request_repaint(); // this is so the window pops up right away - let mut result = word_index_notifier.try_recv(); + let mut result = word_index_receiver.try_recv(); while result.is_err() { - result = word_index_notifier.try_recv(); + result = word_index_receiver.try_recv(); std::thread::sleep(std::time::Duration::from_secs_f64(1.0 / 60.0)); ui::video::update_screen(); // so the OS doesn't complain about the game window being frozen } From 9eacf8a916094c696a84ffc3e1185151a8ad7997 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 19 Jan 2025 22:35:56 +0100 Subject: [PATCH 0215/1117] Finish netplay create room logic (#163) * Move files * more * auth * more --- Cargo.toml | 1 + src/device/cart_rom.rs | 2 +- src/ui/gui.rs | 204 ++++----------------------- src/ui/gui/netplay.rs | 304 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 330 insertions(+), 181 deletions(-) create mode 100644 src/ui/gui/netplay.rs diff --git a/Cargo.toml b/Cargo.toml index d06645a..81254f5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,6 +22,7 @@ sdl2-sys = "0.37" spin_sleep = "1.3" encoding_rs = "0.8" mimalloc = "0.1" +tungstenite = "0.26" clap = { version = "4.4", features = ["derive"] } [dependencies.reqwest] diff --git a/src/device/cart_rom.rs b/src/device/cart_rom.rs index 2a4756a..96afe9a 100644 --- a/src/device/cart_rom.rs +++ b/src/device/cart_rom.rs @@ -195,7 +195,7 @@ fn set_cic(device: &mut device::Device) { } } -fn calculate_hash(data: &[u8]) -> String { +pub fn calculate_hash(data: &[u8]) -> String { let mut hasher = Sha256::new(); hasher.update(data); format!("{:X}", hasher.finalize()) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index f5e88a7..0fb66cd 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -2,25 +2,13 @@ use crate::device; use crate::ui; use eframe::egui; -pub struct Netplay { - session_name: String, - password: String, - player_name: String, - server: (String, String), - servers: std::collections::HashMap, - server_receiver: Option>>, - broadcast_socket: Option, - broadcast_timer: Option, -} +mod netplay; pub struct GopherEguiApp { config_dir: std::path::PathBuf, cache_dir: std::path::PathBuf, data_dir: std::path::PathBuf, configure_profile: bool, - netplay_create: bool, - netplay_join: bool, - netplay_wait: bool, profile_name: String, controllers: Vec, selected_controller: [i32; 4], @@ -36,7 +24,7 @@ pub struct GopherEguiApp { vru_window_receiver: Option>>, vru_word_notifier: Option>, vru_word_list: Vec, - netplay: Netplay, + netplay: netplay::Netplay, } struct SaveConfig { @@ -105,9 +93,6 @@ impl GopherEguiApp { config_dir: config_dir.clone(), data_dir: data_dir.clone(), configure_profile: false, - netplay_create: false, - netplay_join: false, - netplay_wait: false, profile_name: "".to_string(), selected_profile: game_ui.config.input.input_profile_binding.clone(), selected_controller, @@ -123,10 +108,17 @@ impl GopherEguiApp { vru_window_receiver: None, vru_word_notifier: None, vru_word_list: Vec::new(), - netplay: Netplay { + netplay: netplay::Netplay { + error: "".to_string(), broadcast_socket: None, broadcast_timer: None, server_receiver: None, + game_info_receiver: None, + rom_label: "Open ROM".to_string(), + create: false, + join: false, + wait: false, + game_info: ("".to_string(), "".to_string(), "".to_string()), session_name: "".to_string(), password: "".to_string(), player_name: "".to_string(), @@ -177,162 +169,6 @@ impl Drop for GopherEguiApp { } } -fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { - egui::Window::new("Create Netplay Session").show(ctx, |ui| { - egui::Grid::new("button_grid").show(ui, |ui| { - let profile_name_label = ui.label("Profile Name:"); - let mut size = ui.spacing().interact_size; - size.x = 200.0; - ui.add_sized(size, |ui: &mut egui::Ui| { - ui.text_edit_singleline(&mut app.netplay.session_name) - .labelled_by(profile_name_label.id) - }); - - ui.end_row(); - - let password_label = ui.label("Password (Optional):"); - - ui.text_edit_singleline(&mut app.netplay.password) - .labelled_by(password_label.id); - - ui.end_row(); - - ui.label("ROM"); - if ui.button("Open ROM").clicked() { - // Spawn dialog on main thread - let task = rfd::AsyncFileDialog::new().pick_file(); - tokio::spawn(async { - let file = task.await; - - if let Some(file) = file { - let _rom_contents = device::get_rom_contents(file.path()); - } - }); - } - - ui.end_row(); - - let player_name_label = ui.label("Player Name:"); - - ui.text_edit_singleline(&mut app.netplay.player_name) - .labelled_by(player_name_label.id); - - ui.end_row(); - - ui.label("Server:"); - - if app.netplay.servers.is_empty() { - if app.netplay.broadcast_socket.is_none() { - app.netplay.broadcast_socket = Some( - std::net::UdpSocket::bind((std::net::Ipv4Addr::UNSPECIFIED, 0)) - .expect("couldn't bind to address"), - ); - let socket = app.netplay.broadcast_socket.as_ref().unwrap(); - socket - .set_broadcast(true) - .expect("set_broadcast call failed"); - socket - .set_nonblocking(true) - .expect("could not set up socket"); - let data: [u8; 1] = [1]; - socket - .send_to(&data, (std::net::Ipv4Addr::BROADCAST, 45000)) - .expect("couldn't send data"); - app.netplay.broadcast_timer = - Some(std::time::Instant::now() + std::time::Duration::from_secs(5)); - } - if app.netplay.server_receiver.is_none() { - let (tx, rx) = tokio::sync::mpsc::channel(1); - app.netplay.server_receiver = Some(rx); - - tokio::spawn(async move { - if let Ok(response) = - reqwest::get("https://m64p.s3.amazonaws.com/servers.json").await - { - if let Ok(servers) = response - .json::>() - .await - { - let _ = tx.send(servers).await; - } - } - }); - } - } - if app.netplay.broadcast_timer.is_some() - && std::time::Instant::now() > app.netplay.broadcast_timer.unwrap() - { - app.netplay.broadcast_timer = None; - } - if app.netplay.broadcast_socket.is_some() && app.netplay.broadcast_timer.is_some() { - let mut buffer = [0; 1024]; - let result = app - .netplay - .broadcast_socket - .as_ref() - .unwrap() - .recv_from(&mut buffer); - if result.is_ok() { - let (amt, _src) = result.unwrap(); - let data: std::collections::HashMap = - serde_json::from_slice(&buffer[..amt]).unwrap(); - for server in data.iter() { - let (server_name, server_ip) = server; - app.netplay - .servers - .insert(server_name.to_string(), server_ip.to_string()); - app.netplay.server = (server.0.clone(), server.1.clone()); - } - app.netplay.broadcast_socket = None; - } - } - if app.netplay.server_receiver.is_some() { - let result = app.netplay.server_receiver.as_mut().unwrap().try_recv(); - if result.is_ok() { - app.netplay.servers.extend(result.unwrap()); - app.netplay.server_receiver = None; - if app.netplay.server.0.is_empty() { - let first_server = app.netplay.servers.iter().next().unwrap(); - app.netplay.server = (first_server.0.clone(), first_server.1.clone()); - } - } - } - - egui::ComboBox::from_id_salt("server-combobox") - .selected_text(app.netplay.server.0.to_string()) - .show_ui(ui, |ui| { - for server in app.netplay.servers.iter() { - ui.selectable_value( - &mut app.netplay.server, - (server.0.clone(), server.1.clone()), - server.0, - ); - } - }); - - ui.end_row(); - - if ui.button("Create Session").clicked() { - app.netplay_create = false; - app.netplay_wait = true; - } - ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { - if ui.button("Close").clicked() { - app.netplay_create = false - }; - }) - }); - }); -} - -fn netplay_join(app: &mut GopherEguiApp, ctx: &egui::Context) { - egui::Window::new("Join Netplay Session").show(ctx, |ui| { - if ui.button("Close").clicked() { - app.netplay_join = false - }; - }); -} - fn configure_profile(app: &mut GopherEguiApp, ctx: &egui::Context) { egui::Window::new("Configure Input Profile") // .open(&mut self.configure_profile) @@ -484,12 +320,20 @@ fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { impl eframe::App for GopherEguiApp { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { - if self.netplay_create { - netplay_create(self, ctx); + if self.netplay.create { + netplay::netplay_create(self, ctx); } - if self.netplay_join { - netplay_join(self, ctx); + if self.netplay.join { + netplay::netplay_join(self, ctx); + } + + if self.netplay.wait { + netplay::netplay_wait(self, ctx); + } + + if !self.netplay.error.is_empty() { + netplay::netplay_error(self, ctx, self.netplay.error.clone()); } if self.configure_profile { @@ -510,7 +354,7 @@ impl eframe::App for GopherEguiApp { if ui.button("Netplay: Create Session").clicked() && !self.cache_dir.join("game_running").exists() { - self.netplay_create = true; + self.netplay.create = true; } ui.end_row(); @@ -524,7 +368,7 @@ impl eframe::App for GopherEguiApp { if ui.button("Netplay: Join Session").clicked() && !self.cache_dir.join("game_running").exists() { - self.netplay_join = true; + self.netplay.join = true; } }); diff --git a/src/ui/gui/netplay.rs b/src/ui/gui/netplay.rs new file mode 100644 index 0000000..73cb9b6 --- /dev/null +++ b/src/ui/gui/netplay.rs @@ -0,0 +1,304 @@ +use crate::device; +use crate::ui::gui::GopherEguiApp; +use eframe::egui; +use sha2::{Digest, Sha256}; + +const NETPLAY_VERSION: i32 = 17; +const EMU_NAME: &str = "gopher64"; +pub struct Netplay { + pub create: bool, + pub join: bool, + pub wait: bool, + pub session_name: String, + pub password: String, + pub player_name: String, + pub error: String, + pub rom_label: String, + pub server: (String, String), + pub game_info: (String, String, String), + pub servers: std::collections::HashMap, + pub server_receiver: + Option>>, + pub game_info_receiver: Option>, + pub broadcast_socket: Option, + pub broadcast_timer: Option, +} + +#[derive(serde::Serialize, serde::Deserialize, std::fmt::Debug)] +pub struct NetplayRoom { + room_name: String, + password: Option, + protected: Option, + #[serde(rename = "MD5")] + md5: String, + game_name: String, + port: Option, +} + +#[derive(serde::Serialize, serde::Deserialize, std::fmt::Debug)] +pub struct NetplayMessage { + #[serde(rename = "type")] + message_type: String, + player_name: Option, + client_sha: Option, + netplay_version: Option, + emulator: Option, + room: Option, + accept: Option, + message: Option, + auth: Option, + #[serde(rename = "authTime")] + auth_time: Option, +} + +pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { + egui::Window::new("Create Netplay Session").show(ctx, |ui| { + egui::Grid::new("button_grid").show(ui, |ui| { + let profile_name_label = ui.label("Session Name:"); + let mut size = ui.spacing().interact_size; + size.x = 200.0; + ui.add_sized(size, |ui: &mut egui::Ui| { + ui.text_edit_singleline(&mut app.netplay.session_name) + .labelled_by(profile_name_label.id) + }); + + ui.end_row(); + + let password_label = ui.label("Password (Optional):"); + + ui.text_edit_singleline(&mut app.netplay.password) + .labelled_by(password_label.id); + + ui.end_row(); + + ui.label("ROM"); + if ui.button(app.netplay.rom_label.clone()).clicked() { + let task = rfd::AsyncFileDialog::new().pick_file(); + let (tx, rx) = tokio::sync::mpsc::channel(1); + app.netplay.game_info_receiver = Some(rx); + let gui_ctx = ctx.clone(); + app.netplay.rom_label = "Inspecting ROM".to_string(); + tokio::spawn(async move { + let file = task.await; + + if let Some(file) = file { + let rom_contents = device::get_rom_contents(file.path()); + if !rom_contents.is_empty() { + let hash = device::cart_rom::calculate_hash(&rom_contents); + let game_name = std::str::from_utf8(&rom_contents[0x20..0x20 + 0x14]) + .unwrap() + .to_string(); + let _ = tx.send((hash, game_name, file.file_name())).await; + gui_ctx.request_repaint(); + } else { + let _ = tx + .send(("".to_string(), "".to_string(), "Invalid ROM".to_string())) + .await; + gui_ctx.request_repaint(); + } + } else { + let _ = tx + .send(("".to_string(), "".to_string(), "Open ROM".to_string())) + .await; + gui_ctx.request_repaint(); + } + }); + } + + ui.end_row(); + + let player_name_label = ui.label("Player Name:"); + + ui.text_edit_singleline(&mut app.netplay.player_name) + .labelled_by(player_name_label.id); + + ui.end_row(); + + ui.label("Server:"); + + if app.netplay.servers.is_empty() { + if app.netplay.broadcast_socket.is_none() { + app.netplay.broadcast_socket = Some( + std::net::UdpSocket::bind((std::net::Ipv4Addr::UNSPECIFIED, 0)) + .expect("couldn't bind to address"), + ); + let socket = app.netplay.broadcast_socket.as_ref().unwrap(); + socket + .set_broadcast(true) + .expect("set_broadcast call failed"); + socket + .set_nonblocking(true) + .expect("could not set up socket"); + let data: [u8; 1] = [1]; + socket + .send_to(&data, (std::net::Ipv4Addr::BROADCAST, 45000)) + .expect("couldn't send data"); + app.netplay.broadcast_timer = + Some(std::time::Instant::now() + std::time::Duration::from_secs(5)); + } + if app.netplay.server_receiver.is_none() { + let (tx, rx) = tokio::sync::mpsc::channel(1); + app.netplay.server_receiver = Some(rx); + let gui_ctx = ctx.clone(); + tokio::spawn(async move { + if let Ok(response) = + reqwest::get("https://m64p.s3.amazonaws.com/servers.json").await + { + if let Ok(servers) = response + .json::>() + .await + { + let _ = tx.send(servers).await; + gui_ctx.request_repaint(); + } + } + }); + } + } + if app.netplay.broadcast_timer.is_some() + && std::time::Instant::now() > app.netplay.broadcast_timer.unwrap() + { + app.netplay.broadcast_timer = None; + } + if app.netplay.broadcast_socket.is_some() && app.netplay.broadcast_timer.is_some() { + let mut buffer = [0; 1024]; + let result = app + .netplay + .broadcast_socket + .as_ref() + .unwrap() + .recv_from(&mut buffer); + if result.is_ok() { + let (amt, _src) = result.unwrap(); + let data: std::collections::HashMap = + serde_json::from_slice(&buffer[..amt]).unwrap(); + for server in data.iter() { + let (server_name, server_ip) = server; + app.netplay + .servers + .insert(server_name.to_string(), server_ip.to_string()); + app.netplay.server = (server.0.clone(), server.1.clone()); + } + app.netplay.broadcast_socket = None; + } + } + if app.netplay.server_receiver.is_some() { + let result = app.netplay.server_receiver.as_mut().unwrap().try_recv(); + if result.is_ok() { + app.netplay.servers.extend(result.unwrap()); + app.netplay.server_receiver = None; + if app.netplay.server.0.is_empty() { + let first_server = app.netplay.servers.iter().next().unwrap(); + app.netplay.server = (first_server.0.clone(), first_server.1.clone()); + } + } + } + if app.netplay.game_info_receiver.is_some() { + let result = app.netplay.game_info_receiver.as_mut().unwrap().try_recv(); + if result.is_ok() { + app.netplay.game_info_receiver = None; + let data = result.unwrap(); + if !data.0.is_empty() { + app.netplay.game_info = data; + app.netplay.rom_label = app.netplay.game_info.2.clone(); + } else { + app.netplay.rom_label = data.2; + } + } + } + + egui::ComboBox::from_id_salt("server-combobox") + .selected_text(app.netplay.server.0.to_string()) + .show_ui(ui, |ui| { + for server in app.netplay.servers.iter() { + ui.selectable_value( + &mut app.netplay.server, + (server.0.clone(), server.1.clone()), + server.0, + ); + } + }); + + ui.end_row(); + + if ui.button("Create Session").clicked() { + if app.netplay.player_name.is_empty() { + app.netplay.error = "Player Name cannot be empty".to_string(); + } else if app.netplay.session_name.is_empty() { + app.netplay.error = "Session Name cannot be empty".to_string(); + } else if app.netplay.game_info.0.is_empty() { + app.netplay.error = "ROM not loaded".to_string(); + } else { + let now_utc = chrono::Utc::now().timestamp_millis().to_string(); + let hasher = Sha256::new() + .chain_update(now_utc.clone()) + .chain_update(EMU_NAME); + let netplay_message = NetplayMessage { + message_type: "request_create_room".to_string(), + player_name: Some(app.netplay.player_name.clone()), + client_sha: Some(env!("CARGO_PKG_VERSION").to_string()), + netplay_version: Some(NETPLAY_VERSION), + emulator: Some(EMU_NAME.to_string()), + accept: None, + message: None, + auth_time: Some(now_utc), + auth: Some(format!("{:x}", hasher.finalize())), + room: Some(NetplayRoom { + room_name: app.netplay.session_name.clone(), + password: Some(app.netplay.password.clone()), + game_name: app.netplay.game_info.1.trim().to_string(), + md5: app.netplay.game_info.0.clone(), + protected: None, + port: None, + }), + }; + let (mut socket, _response) = + tungstenite::connect(app.netplay.server.1.clone()).expect("Can't connect"); + socket + .send(tungstenite::Message::Binary(tungstenite::Bytes::from( + serde_json::to_vec(&netplay_message).unwrap(), + ))) + .unwrap(); + let data = socket.read().unwrap().into_data(); + let message: NetplayMessage = serde_json::from_slice(data.as_ref()).unwrap(); + if message.accept.unwrap() == 0 { + app.netplay.create = false; + app.netplay.wait = true; + } else { + app.netplay.error = message.message.unwrap(); + } + } + } + ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { + if ui.button("Close").clicked() { + app.netplay.create = false + }; + }) + }); + }); +} + +pub fn netplay_join(app: &mut GopherEguiApp, ctx: &egui::Context) { + egui::Window::new("Join Netplay Session").show(ctx, |ui| { + if ui.button("Close").clicked() { + app.netplay.join = false + }; + }); +} + +pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { + egui::Window::new("Pending Netplay Session").show(ctx, |ui| { + if ui.button("Close").clicked() { + app.netplay.wait = false + }; + }); +} + +pub fn netplay_error(app: &mut GopherEguiApp, ctx: &egui::Context, error: String) { + egui::Window::new("Netplay Error").show(ctx, |ui| { + ui.label(error); + if ui.button("Close").clicked() { + app.netplay.error = "".to_string(); + }; + }); +} From 549d71bebf7026d3fadd3608ba27197cbf341dae Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 20 Jan 2025 07:56:11 +0100 Subject: [PATCH 0216/1117] repaint GUI while waiting for data --- src/ui/gui/netplay.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/ui/gui/netplay.rs b/src/ui/gui/netplay.rs index 73cb9b6..b713014 100644 --- a/src/ui/gui/netplay.rs +++ b/src/ui/gui/netplay.rs @@ -89,19 +89,17 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { .unwrap() .to_string(); let _ = tx.send((hash, game_name, file.file_name())).await; - gui_ctx.request_repaint(); } else { let _ = tx .send(("".to_string(), "".to_string(), "Invalid ROM".to_string())) .await; - gui_ctx.request_repaint(); } } else { let _ = tx .send(("".to_string(), "".to_string(), "Open ROM".to_string())) .await; - gui_ctx.request_repaint(); } + gui_ctx.request_repaint(); }); } @@ -135,6 +133,7 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { .expect("couldn't send data"); app.netplay.broadcast_timer = Some(std::time::Instant::now() + std::time::Duration::from_secs(5)); + ctx.request_repaint(); } if app.netplay.server_receiver.is_none() { let (tx, rx) = tokio::sync::mpsc::channel(1); @@ -181,6 +180,7 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { } app.netplay.broadcast_socket = None; } + ctx.request_repaint(); } if app.netplay.server_receiver.is_some() { let result = app.netplay.server_receiver.as_mut().unwrap().try_recv(); @@ -192,6 +192,7 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { app.netplay.server = (first_server.0.clone(), first_server.1.clone()); } } + ctx.request_repaint(); } if app.netplay.game_info_receiver.is_some() { let result = app.netplay.game_info_receiver.as_mut().unwrap().try_recv(); @@ -205,6 +206,7 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { app.netplay.rom_label = data.2; } } + ctx.request_repaint(); } egui::ComboBox::from_id_salt("server-combobox") From 0af411d662505ca8e733bbeea8cd58bd0beb4538 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 20 Jan 2025 11:58:15 +0100 Subject: [PATCH 0217/1117] Netplay wait room (#164) * netplay wait room * more * more * more * wait room * more * more --- Cargo.toml | 1 + src/ui/gui.rs | 21 +-- src/ui/gui/netplay.rs | 314 ++++++++++++++++++++++++++++++++++++++---- 3 files changed, 291 insertions(+), 45 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 81254f5..c94f1e2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,6 +22,7 @@ sdl2-sys = "0.37" spin_sleep = "1.3" encoding_rs = "0.8" mimalloc = "0.1" +regex = "1.11" tungstenite = "0.26" clap = { version = "4.4", features = ["derive"] } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 0fb66cd..038edca 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -108,23 +108,7 @@ impl GopherEguiApp { vru_window_receiver: None, vru_word_notifier: None, vru_word_list: Vec::new(), - netplay: netplay::Netplay { - error: "".to_string(), - broadcast_socket: None, - broadcast_timer: None, - server_receiver: None, - game_info_receiver: None, - rom_label: "Open ROM".to_string(), - create: false, - join: false, - wait: false, - game_info: ("".to_string(), "".to_string(), "".to_string()), - session_name: "".to_string(), - password: "".to_string(), - player_name: "".to_string(), - server: ("".to_string(), "".to_string()), - servers: std::collections::HashMap::new(), - }, + netplay: Default::default(), } } } @@ -271,6 +255,9 @@ fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { if emulate_vru { app.vru_window_receiver = Some(vru_window_receiver); app.vru_word_notifier = Some(vru_word_notifier); + } else { + app.vru_window_receiver = None; + app.vru_word_notifier = None; } let gui_ctx = ctx.clone(); diff --git a/src/ui/gui/netplay.rs b/src/ui/gui/netplay.rs index b713014..f957dcd 100644 --- a/src/ui/gui/netplay.rs +++ b/src/ui/gui/netplay.rs @@ -5,6 +5,8 @@ use sha2::{Digest, Sha256}; const NETPLAY_VERSION: i32 = 17; const EMU_NAME: &str = "gopher64"; + +#[derive(Default)] pub struct Netplay { pub create: bool, pub join: bool, @@ -14,9 +16,20 @@ pub struct Netplay { pub player_name: String, pub error: String, pub rom_label: String, + pub send_chat: bool, + pub begin_game: bool, + pub chat_log: String, + pub chat_message: String, + pub pending_begin: bool, + pub motd: String, + pub player_names: [String; 4], pub server: (String, String), + pub socket_waiting: bool, pub game_info: (String, String, String), pub servers: std::collections::HashMap, + pub waiting_session: Option, + pub socket: + Option>>, pub server_receiver: Option>>, pub game_info_receiver: Option>, @@ -24,18 +37,18 @@ pub struct Netplay { pub broadcast_timer: Option, } -#[derive(serde::Serialize, serde::Deserialize, std::fmt::Debug)] +#[derive(serde::Serialize, serde::Deserialize)] pub struct NetplayRoom { - room_name: String, + room_name: Option, password: Option, protected: Option, #[serde(rename = "MD5")] - md5: String, - game_name: String, + md5: Option, + game_name: Option, port: Option, } -#[derive(serde::Serialize, serde::Deserialize, std::fmt::Debug)] +#[derive(serde::Serialize, serde::Deserialize)] pub struct NetplayMessage { #[serde(rename = "type")] message_type: String, @@ -47,13 +60,14 @@ pub struct NetplayMessage { accept: Option, message: Option, auth: Option, + player_names: Option<[String; 4]>, #[serde(rename = "authTime")] auth_time: Option, } pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { egui::Window::new("Create Netplay Session").show(ctx, |ui| { - egui::Grid::new("button_grid").show(ui, |ui| { + egui::Grid::new("netplay_create_grid").show(ui, |ui| { let profile_name_label = ui.label("Session Name:"); let mut size = ui.spacing().interact_size; size.x = 200.0; @@ -72,7 +86,10 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { ui.end_row(); ui.label("ROM"); - if ui.button(app.netplay.rom_label.clone()).clicked() { + if app.netplay.rom_label.is_empty() { + app.netplay.rom_label = "Open ROM".to_string(); + } + if ui.button(&app.netplay.rom_label).clicked() { let task = rfd::AsyncFileDialog::new().pick_file(); let (tx, rx) = tokio::sync::mpsc::channel(1); app.netplay.game_info_receiver = Some(rx); @@ -223,6 +240,26 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { ui.end_row(); + if app.netplay.socket_waiting { + let data = app.netplay.socket.as_mut().unwrap().read(); + if data.is_ok() { + let message: NetplayMessage = + serde_json::from_slice(&data.unwrap().into_data()).unwrap(); + if message.accept.unwrap() == 0 { + if message.message_type == "reply_create_room" { + app.netplay.create = false; + app.netplay.wait = true; + app.netplay.waiting_session = Some(message.room.unwrap()); + } + } else { + app.netplay.error = message.message.unwrap(); + } + app.netplay.socket_waiting = false; + } + ctx.request_repaint(); + } + }); + ui.horizontal(|ui| { if ui.button("Create Session").clicked() { if app.netplay.player_name.is_empty() { app.netplay.error = "Player Name cannot be empty".to_string(); @@ -232,9 +269,12 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { app.netplay.error = "ROM not loaded".to_string(); } else { let now_utc = chrono::Utc::now().timestamp_millis().to_string(); - let hasher = Sha256::new() - .chain_update(now_utc.clone()) - .chain_update(EMU_NAME); + let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); + let mut game_name = app.netplay.game_info.1.trim().to_string(); + if game_name.is_empty() { + // If the ROM doesn't report a name, use the filename + game_name = app.netplay.rom_label.clone(); + } let netplay_message = NetplayMessage { message_type: "request_create_room".to_string(), player_name: Some(app.netplay.player_name.clone()), @@ -244,36 +284,39 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { accept: None, message: None, auth_time: Some(now_utc), + player_names: None, auth: Some(format!("{:x}", hasher.finalize())), room: Some(NetplayRoom { - room_name: app.netplay.session_name.clone(), + room_name: Some(app.netplay.session_name.clone()), password: Some(app.netplay.password.clone()), - game_name: app.netplay.game_info.1.trim().to_string(), - md5: app.netplay.game_info.0.clone(), + game_name: Some(game_name), + md5: Some(app.netplay.game_info.0.clone()), protected: None, port: None, }), }; let (mut socket, _response) = - tungstenite::connect(app.netplay.server.1.clone()).expect("Can't connect"); + tungstenite::connect(&app.netplay.server.1).expect("Can't connect"); socket .send(tungstenite::Message::Binary(tungstenite::Bytes::from( serde_json::to_vec(&netplay_message).unwrap(), ))) .unwrap(); - let data = socket.read().unwrap().into_data(); - let message: NetplayMessage = serde_json::from_slice(data.as_ref()).unwrap(); - if message.accept.unwrap() == 0 { - app.netplay.create = false; - app.netplay.wait = true; - } else { - app.netplay.error = message.message.unwrap(); + match socket.get_mut() { + tungstenite::stream::MaybeTlsStream::Plain(stream) => { + stream.set_nonblocking(true) + } + _ => unimplemented!(), } + .expect("could not set socket to non-blocking"); + app.netplay.socket_waiting = true; + app.netplay.socket = Some(socket); } } + ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { if ui.button("Close").clicked() { - app.netplay.create = false + app.netplay = Default::default(); }; }) }); @@ -282,17 +325,232 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { pub fn netplay_join(app: &mut GopherEguiApp, ctx: &egui::Context) { egui::Window::new("Join Netplay Session").show(ctx, |ui| { - if ui.button("Close").clicked() { - app.netplay.join = false - }; + egui::Grid::new("netplay_join_grid").show(ui, |_ui| {}); + ui.horizontal(|ui| { + ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { + if ui.button("Close").clicked() { + app.netplay = Default::default(); + }; + }); + }); }); } pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { - egui::Window::new("Pending Netplay Session").show(ctx, |ui| { - if ui.button("Close").clicked() { - app.netplay.wait = false + let motd_message = NetplayMessage { + message_type: "request_motd".to_string(), + player_name: None, + client_sha: None, + netplay_version: None, + emulator: None, + accept: None, + player_names: None, + message: None, + auth_time: None, + auth: None, + room: None, + }; + let request_players = NetplayMessage { + message_type: "request_players".to_string(), + player_name: None, + client_sha: None, + netplay_version: None, + player_names: None, + emulator: None, + accept: None, + message: None, + auth_time: None, + auth: None, + room: Some(NetplayRoom { + room_name: None, + password: None, + game_name: None, + md5: None, + protected: None, + port: app.netplay.waiting_session.as_ref().unwrap().port, + }), + }; + let socket = app.netplay.socket.as_mut().unwrap(); + if !app.netplay.socket_waiting { + socket + .send(tungstenite::Message::Binary(tungstenite::Bytes::from( + serde_json::to_vec(&motd_message).unwrap(), + ))) + .unwrap(); + socket + .send(tungstenite::Message::Binary(tungstenite::Bytes::from( + serde_json::to_vec(&request_players).unwrap(), + ))) + .unwrap(); + app.netplay.socket_waiting = true; + } + + if app.netplay.begin_game { + let begin_game = NetplayMessage { + message_type: "request_begin_game".to_string(), + player_name: None, + client_sha: None, + netplay_version: None, + player_names: None, + emulator: None, + accept: None, + message: None, + auth_time: None, + auth: None, + room: Some(NetplayRoom { + room_name: None, + password: None, + game_name: None, + md5: None, + protected: None, + port: app.netplay.waiting_session.as_ref().unwrap().port, + }), }; + socket + .send(tungstenite::Message::Binary(tungstenite::Bytes::from( + serde_json::to_vec(&begin_game).unwrap(), + ))) + .unwrap(); + app.netplay.begin_game = false; + } + + if app.netplay.send_chat { + let send_chat = NetplayMessage { + message_type: "request_chat_message".to_string(), + player_name: Some(app.netplay.player_name.clone()), + client_sha: None, + netplay_version: None, + player_names: None, + emulator: None, + accept: None, + message: Some(app.netplay.chat_message.clone()), + auth_time: None, + auth: None, + room: Some(NetplayRoom { + room_name: None, + password: None, + game_name: None, + md5: None, + protected: None, + port: app.netplay.waiting_session.as_ref().unwrap().port, + }), + }; + app.netplay.chat_message.clear(); + socket + .send(tungstenite::Message::Binary(tungstenite::Bytes::from( + serde_json::to_vec(&send_chat).unwrap(), + ))) + .unwrap(); + app.netplay.send_chat = false; + } + + if app.netplay.socket_waiting { + let data = socket.read(); + if data.is_ok() { + let message: NetplayMessage = + serde_json::from_slice(&data.unwrap().into_data()).unwrap(); + if message.accept.unwrap() == 0 { + if message.message_type == "reply_motd" { + let re = regex::Regex::new(r"<[^>]*>").unwrap(); + app.netplay.motd = re + .replace_all(message.message.unwrap().as_str(), "") + .into_owned(); + } else if message.message_type == "reply_players" { + app.netplay.player_names = message.player_names.unwrap(); + } else if message.message_type == "reply_chat_message" { + app.netplay.chat_log.push_str(&message.message.unwrap()); + app.netplay.chat_log.push('\n'); + } else if message.message_type == "reply_begin_game" { + app.netplay = Default::default(); + return; + } + } else { + app.netplay.error = message.message.unwrap(); + } + } + ctx.request_repaint(); + } + + egui::Window::new("Pending Netplay Session").show(ctx, |ui| { + egui::Grid::new("netplay_wait_grid_1").show(ui, |ui| { + ui.label("Session Name:"); + let room_name = app + .netplay + .waiting_session + .as_ref() + .unwrap() + .room_name + .as_ref() + .unwrap(); + let game_name = app + .netplay + .waiting_session + .as_ref() + .unwrap() + .game_name + .as_ref() + .unwrap(); + ui.label(room_name); + ui.end_row(); + ui.label("Game Name:"); + ui.label(game_name); + ui.end_row(); + for i in 0..4 { + ui.label(format!("Player {}:", i + 1)); + ui.label(app.netplay.player_names[i].clone()); + ui.end_row(); + } + }); + egui::ScrollArea::vertical() + .max_height(100.0) + .stick_to_bottom(true) + .show(ui, |ui| { + ui.add( + egui::TextEdit::multiline(&mut app.netplay.chat_log) + .interactive(false) + .desired_width(ui.available_width()), + ); + }); + + ui.horizontal(|ui| { + let mut size = ui.spacing().interact_size; + size.x = 200.0; + + ui.add_sized( + size, + egui::TextEdit::singleline(&mut app.netplay.chat_message) + .hint_text("Enter chat message here"), + ); + + if ui + .add_enabled(!app.netplay.send_chat, egui::Button::new("Send Message")) + .clicked() + && !app.netplay.chat_message.is_empty() + { + app.netplay.send_chat = true; + } + }); + + ui.add_space(16.0); + ui.label(app.netplay.motd.clone()); + ui.add_space(16.0); + + ui.horizontal(|ui| { + let button_enabled = app.netplay.player_name == app.netplay.player_names[0] + && !app.netplay.pending_begin; + if ui + .add_enabled(button_enabled, egui::Button::new("Start Session")) + .clicked() + { + app.netplay.begin_game = true; + app.netplay.pending_begin = true; + } + ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { + if ui.button("Close").clicked() { + app.netplay = Default::default(); + }; + }); + }); }); } From 004af133ebe4fdc9855564d8b45ddf7539866f9e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 20 Jan 2025 15:24:11 +0100 Subject: [PATCH 0218/1117] Netplay join room (#165) * netplay Join room * more * more * more * more * more * more --- src/ui/gui/netplay.rs | 431 +++++++++++++++++++++++++++++++++--------- 1 file changed, 341 insertions(+), 90 deletions(-) diff --git a/src/ui/gui/netplay.rs b/src/ui/gui/netplay.rs index f957dcd..bb00209 100644 --- a/src/ui/gui/netplay.rs +++ b/src/ui/gui/netplay.rs @@ -15,13 +15,17 @@ pub struct Netplay { pub password: String, pub player_name: String, pub error: String, - pub rom_label: String, + pub create_rom_label: String, + pub join_rom_label: String, pub send_chat: bool, + pub have_sessions: Option<(String, String)>, pub begin_game: bool, pub chat_log: String, pub chat_message: String, + pub selected_session: Option, pub pending_begin: bool, pub motd: String, + pub sessions: Vec, pub player_names: [String; 4], pub server: (String, String), pub socket_waiting: bool, @@ -37,7 +41,7 @@ pub struct Netplay { pub broadcast_timer: Option, } -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(serde::Serialize, serde::Deserialize, PartialEq, Default, Clone)] pub struct NetplayRoom { room_name: Option, password: Option, @@ -63,6 +67,90 @@ pub struct NetplayMessage { player_names: Option<[String; 4]>, #[serde(rename = "authTime")] auth_time: Option, + rooms: Option>, +} + +fn get_servers(app: &mut GopherEguiApp, ctx: &egui::Context) { + if app.netplay.servers.is_empty() { + if app.netplay.broadcast_socket.is_none() { + app.netplay.broadcast_socket = Some( + std::net::UdpSocket::bind((std::net::Ipv4Addr::UNSPECIFIED, 0)) + .expect("couldn't bind to address"), + ); + let socket = app.netplay.broadcast_socket.as_ref().unwrap(); + socket + .set_broadcast(true) + .expect("set_broadcast call failed"); + socket + .set_nonblocking(true) + .expect("could not set up socket"); + let data: [u8; 1] = [1]; + socket + .send_to(&data, (std::net::Ipv4Addr::BROADCAST, 45000)) + .expect("couldn't send data"); + app.netplay.broadcast_timer = + Some(std::time::Instant::now() + std::time::Duration::from_secs(5)); + ctx.request_repaint(); + } + if app.netplay.server_receiver.is_none() { + let (tx, rx) = tokio::sync::mpsc::channel(1); + app.netplay.server_receiver = Some(rx); + let gui_ctx = ctx.clone(); + tokio::spawn(async move { + if let Ok(response) = + reqwest::get("https://m64p.s3.amazonaws.com/servers.json").await + { + if let Ok(servers) = response + .json::>() + .await + { + let _ = tx.send(servers).await; + gui_ctx.request_repaint(); + } + } + }); + } + } + if app.netplay.broadcast_timer.is_some() + && std::time::Instant::now() > app.netplay.broadcast_timer.unwrap() + { + app.netplay.broadcast_timer = None; + } + if app.netplay.broadcast_socket.is_some() && app.netplay.broadcast_timer.is_some() { + let mut buffer = [0; 1024]; + let result = app + .netplay + .broadcast_socket + .as_ref() + .unwrap() + .recv_from(&mut buffer); + if result.is_ok() { + let (amt, _src) = result.unwrap(); + let data: std::collections::HashMap = + serde_json::from_slice(&buffer[..amt]).unwrap(); + for server in data.iter() { + let (server_name, server_ip) = server; + app.netplay + .servers + .insert(server_name.to_string(), server_ip.to_string()); + app.netplay.server = (server.0.clone(), server.1.clone()); + } + app.netplay.broadcast_socket = None; + } + ctx.request_repaint(); + } + if app.netplay.server_receiver.is_some() { + let result = app.netplay.server_receiver.as_mut().unwrap().try_recv(); + if result.is_ok() { + app.netplay.servers.extend(result.unwrap()); + app.netplay.server_receiver = None; + if app.netplay.server.0.is_empty() { + let first_server = app.netplay.servers.iter().next().unwrap(); + app.netplay.server = (first_server.0.clone(), first_server.1.clone()); + } + } + ctx.request_repaint(); + } } pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { @@ -86,15 +174,15 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { ui.end_row(); ui.label("ROM"); - if app.netplay.rom_label.is_empty() { - app.netplay.rom_label = "Open ROM".to_string(); + if app.netplay.create_rom_label.is_empty() { + app.netplay.create_rom_label = "Open ROM".to_string(); } - if ui.button(&app.netplay.rom_label).clicked() { + if ui.button(&app.netplay.create_rom_label).clicked() { let task = rfd::AsyncFileDialog::new().pick_file(); let (tx, rx) = tokio::sync::mpsc::channel(1); app.netplay.game_info_receiver = Some(rx); let gui_ctx = ctx.clone(); - app.netplay.rom_label = "Inspecting ROM".to_string(); + app.netplay.create_rom_label = "Inspecting ROM".to_string(); tokio::spawn(async move { let file = task.await; @@ -131,86 +219,8 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { ui.label("Server:"); - if app.netplay.servers.is_empty() { - if app.netplay.broadcast_socket.is_none() { - app.netplay.broadcast_socket = Some( - std::net::UdpSocket::bind((std::net::Ipv4Addr::UNSPECIFIED, 0)) - .expect("couldn't bind to address"), - ); - let socket = app.netplay.broadcast_socket.as_ref().unwrap(); - socket - .set_broadcast(true) - .expect("set_broadcast call failed"); - socket - .set_nonblocking(true) - .expect("could not set up socket"); - let data: [u8; 1] = [1]; - socket - .send_to(&data, (std::net::Ipv4Addr::BROADCAST, 45000)) - .expect("couldn't send data"); - app.netplay.broadcast_timer = - Some(std::time::Instant::now() + std::time::Duration::from_secs(5)); - ctx.request_repaint(); - } - if app.netplay.server_receiver.is_none() { - let (tx, rx) = tokio::sync::mpsc::channel(1); - app.netplay.server_receiver = Some(rx); - let gui_ctx = ctx.clone(); - tokio::spawn(async move { - if let Ok(response) = - reqwest::get("https://m64p.s3.amazonaws.com/servers.json").await - { - if let Ok(servers) = response - .json::>() - .await - { - let _ = tx.send(servers).await; - gui_ctx.request_repaint(); - } - } - }); - } - } - if app.netplay.broadcast_timer.is_some() - && std::time::Instant::now() > app.netplay.broadcast_timer.unwrap() - { - app.netplay.broadcast_timer = None; - } - if app.netplay.broadcast_socket.is_some() && app.netplay.broadcast_timer.is_some() { - let mut buffer = [0; 1024]; - let result = app - .netplay - .broadcast_socket - .as_ref() - .unwrap() - .recv_from(&mut buffer); - if result.is_ok() { - let (amt, _src) = result.unwrap(); - let data: std::collections::HashMap = - serde_json::from_slice(&buffer[..amt]).unwrap(); - for server in data.iter() { - let (server_name, server_ip) = server; - app.netplay - .servers - .insert(server_name.to_string(), server_ip.to_string()); - app.netplay.server = (server.0.clone(), server.1.clone()); - } - app.netplay.broadcast_socket = None; - } - ctx.request_repaint(); - } - if app.netplay.server_receiver.is_some() { - let result = app.netplay.server_receiver.as_mut().unwrap().try_recv(); - if result.is_ok() { - app.netplay.servers.extend(result.unwrap()); - app.netplay.server_receiver = None; - if app.netplay.server.0.is_empty() { - let first_server = app.netplay.servers.iter().next().unwrap(); - app.netplay.server = (first_server.0.clone(), first_server.1.clone()); - } - } - ctx.request_repaint(); - } + get_servers(app, ctx); + if app.netplay.game_info_receiver.is_some() { let result = app.netplay.game_info_receiver.as_mut().unwrap().try_recv(); if result.is_ok() { @@ -218,9 +228,9 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { let data = result.unwrap(); if !data.0.is_empty() { app.netplay.game_info = data; - app.netplay.rom_label = app.netplay.game_info.2.clone(); + app.netplay.create_rom_label = app.netplay.game_info.2.clone(); } else { - app.netplay.rom_label = data.2; + app.netplay.create_rom_label = data.2; } } ctx.request_repaint(); @@ -273,7 +283,7 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { let mut game_name = app.netplay.game_info.1.trim().to_string(); if game_name.is_empty() { // If the ROM doesn't report a name, use the filename - game_name = app.netplay.rom_label.clone(); + game_name = app.netplay.create_rom_label.clone(); } let netplay_message = NetplayMessage { message_type: "request_create_room".to_string(), @@ -283,6 +293,7 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { emulator: Some(EMU_NAME.to_string()), accept: None, message: None, + rooms: None, auth_time: Some(now_utc), player_names: None, auth: Some(format!("{:x}", hasher.finalize())), @@ -323,14 +334,250 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { }); } +fn get_sessions(app: &mut GopherEguiApp, ctx: &egui::Context) { + if app.netplay.have_sessions.is_some() + && app.netplay.server != app.netplay.have_sessions.as_ref().unwrap().clone() + { + // User has changed the server + app.netplay.have_sessions = None; + app.netplay.socket = None; + } + if app.netplay.socket.is_none() { + let (mut sock, _response) = + tungstenite::connect(&app.netplay.server.1).expect("Can't connect"); + match sock.get_mut() { + tungstenite::stream::MaybeTlsStream::Plain(stream) => stream.set_nonblocking(true), + _ => unimplemented!(), + } + .expect("could not set socket to non-blocking"); + app.netplay.socket = Some(sock); + } + let socket = app.netplay.socket.as_mut().unwrap(); + if app.netplay.have_sessions.is_none() { + let now_utc = chrono::Utc::now().timestamp_millis().to_string(); + let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); + let request_rooms = NetplayMessage { + message_type: "request_get_rooms".to_string(), + player_name: None, + client_sha: None, + netplay_version: Some(NETPLAY_VERSION), + player_names: None, + emulator: Some(EMU_NAME.to_string()), + accept: None, + rooms: None, + message: None, + auth_time: Some(now_utc), + auth: Some(format!("{:x}", hasher.finalize())), + room: None, + }; + + socket + .send(tungstenite::Message::Binary(tungstenite::Bytes::from( + serde_json::to_vec(&request_rooms).unwrap(), + ))) + .unwrap(); + app.netplay.have_sessions = Some(app.netplay.server.clone()); + app.netplay.socket_waiting = true; + ctx.request_repaint(); + } +} + pub fn netplay_join(app: &mut GopherEguiApp, ctx: &egui::Context) { + if app.netplay.socket_waiting { + let socket = app.netplay.socket.as_mut().unwrap(); + let data = socket.read(); + if data.is_ok() { + let message: NetplayMessage = + serde_json::from_slice(&data.unwrap().into_data()).unwrap(); + if message.accept.unwrap() == 0 { + if message.message_type == "reply_get_rooms" { + if message.rooms.is_some() { + app.netplay.sessions = message.rooms.unwrap(); + } + } else if message.message_type == "reply_join_room" { + app.netplay.join = false; + app.netplay.wait = true; + app.netplay.waiting_session = Some(message.room.unwrap()); + } + app.netplay.socket_waiting = false; + } else { + app.netplay.error = message.message.unwrap(); + app.netplay.join_rom_label = "Join Session (Open ROM)".to_string(); + } + } + ctx.request_repaint(); + } + if app.netplay.game_info_receiver.is_some() { + let result = app.netplay.game_info_receiver.as_mut().unwrap().try_recv(); + if result.is_ok() { + app.netplay.game_info_receiver = None; + let data = result.unwrap(); + if !data.0.is_empty() { + app.netplay.game_info = data; + + let netplay_message = NetplayMessage { + message_type: "request_join_room".to_string(), + player_name: Some(app.netplay.player_name.clone()), + client_sha: Some(env!("CARGO_PKG_VERSION").to_string()), + netplay_version: None, + emulator: None, + accept: None, + message: None, + rooms: None, + auth_time: None, + player_names: None, + auth: None, + room: Some(NetplayRoom { + room_name: None, + password: Some(app.netplay.password.clone()), + game_name: None, + md5: Some(app.netplay.game_info.0.clone()), + protected: None, + port: app.netplay.selected_session.as_ref().unwrap().port, + }), + }; + let socket = app.netplay.socket.as_mut().unwrap(); + socket + .send(tungstenite::Message::Binary(tungstenite::Bytes::from( + serde_json::to_vec(&netplay_message).unwrap(), + ))) + .unwrap(); + + app.netplay.socket_waiting = true; + } else { + app.netplay.error = data.2; + app.netplay.join_rom_label = "Join Session (Open ROM)".to_string(); + } + } + ctx.request_repaint(); + } egui::Window::new("Join Netplay Session").show(ctx, |ui| { - egui::Grid::new("netplay_join_grid").show(ui, |_ui| {}); ui.horizontal(|ui| { + let mut size = ui.spacing().interact_size; + size.x = 100.0; + ui.add_sized( + size, + egui::TextEdit::singleline(&mut app.netplay.player_name).hint_text("Player name"), + ); + + get_servers(app, ctx); + + ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { + if ui.button("Refresh").clicked() { + app.netplay.socket = None; + app.netplay.have_sessions = None; + app.netplay.selected_session = None; + ctx.request_repaint(); + } + egui::ComboBox::from_id_salt("server-combobox") + .selected_text(app.netplay.server.0.to_string()) + .show_ui(ui, |ui| { + for server in app.netplay.servers.iter() { + ui.selectable_value( + &mut app.netplay.server, + (server.0.clone(), server.1.clone()), + server.0, + ); + } + }); + }); + }); + if !app.netplay.server.0.is_empty() { + get_sessions(app, ctx); + } + ui.add_space(16.0); + if app.netplay.sessions.is_empty() { + ui.label("No sessions available"); + } else { + egui::Grid::new("netplay_join_grid").show(ui, |ui| { + ui.label(egui::RichText::new("Session Name (click to select)").underline()); + ui.label(egui::RichText::new("Game Name").underline()); + ui.label(egui::RichText::new("Password Protected").underline()); + ui.end_row(); + + for room in app.netplay.sessions.iter() { + ui.selectable_value( + &mut app.netplay.selected_session, + Some(room.clone()), + room.room_name.as_ref().unwrap(), + ); + ui.label(room.game_name.as_ref().unwrap()); + ui.label(room.protected.unwrap_or(false).to_string()); + ui.end_row(); + } + }); + } + ui.add_space(16.0); + ui.horizontal(|ui| { + let mut size = ui.spacing().interact_size; + size.x = 130.0; + ui.add_sized( + size, + egui::TextEdit::singleline(&mut app.netplay.password) + .hint_text("Password (if required)"), + ); ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { if ui.button("Close").clicked() { app.netplay = Default::default(); }; + if app.netplay.join_rom_label.is_empty() { + app.netplay.join_rom_label = "Join Session (Open ROM)".to_string(); + } + if ui.button(&app.netplay.join_rom_label).clicked() { + if app.netplay.player_name.is_empty() { + app.netplay.error = "Player Name cannot be empty".to_string(); + } else if app.netplay.selected_session.is_none() { + app.netplay.error = "No session selected".to_string(); + } else if app + .netplay + .selected_session + .as_ref() + .unwrap() + .protected + .unwrap() + && app.netplay.password.is_empty() + { + app.netplay.error = "Session requires a password".to_string(); + } else { + let task = rfd::AsyncFileDialog::new().pick_file(); + let (tx, rx) = tokio::sync::mpsc::channel(1); + app.netplay.game_info_receiver = Some(rx); + let gui_ctx = ctx.clone(); + app.netplay.join_rom_label = "Inspecting ROM".to_string(); + tokio::spawn(async move { + let file = task.await; + + if let Some(file) = file { + let rom_contents = device::get_rom_contents(file.path()); + if !rom_contents.is_empty() { + let hash = device::cart_rom::calculate_hash(&rom_contents); + let game_name = + std::str::from_utf8(&rom_contents[0x20..0x20 + 0x14]) + .unwrap() + .to_string(); + let _ = tx.send((hash, game_name, file.file_name())).await; + } else { + let _ = tx + .send(( + "".to_string(), + "".to_string(), + "Invalid ROM".to_string(), + )) + .await; + } + } else { + let _ = tx + .send(( + "".to_string(), + "".to_string(), + "No ROM selected".to_string(), + )) + .await; + } + gui_ctx.request_repaint(); + }); + } + }; }); }); }); @@ -344,6 +591,7 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { netplay_version: None, emulator: None, accept: None, + rooms: None, player_names: None, message: None, auth_time: None, @@ -357,6 +605,7 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { netplay_version: None, player_names: None, emulator: None, + rooms: None, accept: None, message: None, auth_time: None, @@ -392,6 +641,7 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { client_sha: None, netplay_version: None, player_names: None, + rooms: None, emulator: None, accept: None, message: None, @@ -421,6 +671,7 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { client_sha: None, netplay_version: None, player_names: None, + rooms: None, emulator: None, accept: None, message: Some(app.netplay.chat_message.clone()), From ada4b7e3b4673fc78b03bebfa8be302655470d6d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 20 Jan 2025 21:29:46 +0100 Subject: [PATCH 0219/1117] Netplay registration (#166) * Register player * more * more * more * more * more --- src/device.rs | 11 +-- src/main.rs | 8 +- src/netplay.rs | 89 +++++++++++++++++++++++ src/ui/gui.rs | 69 +++++++++++++----- src/ui/gui/{netplay.rs => gui_netplay.rs} | 55 +++++++++++--- 5 files changed, 197 insertions(+), 35 deletions(-) create mode 100644 src/netplay.rs rename src/ui/gui/{netplay.rs => gui_netplay.rs} (93%) diff --git a/src/device.rs b/src/device.rs index 2a82d96..a89afbf 100644 --- a/src/device.rs +++ b/src/device.rs @@ -10,6 +10,7 @@ include!(concat!(env!("OUT_DIR"), "/simd_bindings.rs")); #[cfg(target_arch = "x86_64")] use std::arch::x86_64::*; +use crate::netplay; use crate::ui; use std::collections::HashMap; use std::fs; @@ -47,17 +48,11 @@ pub mod unmapped; pub mod vi; pub fn run_game( - file_path: &std::path::Path, + rom_contents: Vec, data_dir: std::path::PathBuf, device: &mut Device, fullscreen: bool, ) { - let rom_contents = get_rom_contents(file_path); - if rom_contents.is_empty() { - println!("Could not read rom file"); - return; - } - cart_rom::init(device, rom_contents); // cart needs to come before rdram // rdram pointer is shared with parallel-rdp @@ -166,6 +161,7 @@ pub fn get_rom_contents(file_path: &std::path::Path) -> Vec { } pub struct Device { + pub netplay: Option, pub ui: ui::Ui, byte_swap: usize, cpu: cpu::Cpu, @@ -195,6 +191,7 @@ impl Device { byte_swap = 3; } Device { + netplay: None, ui: ui::Ui::new(config_dir), byte_swap, cpu: cpu::Cpu { diff --git a/src/main.rs b/src/main.rs index a69baff..1d2729e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,6 +4,7 @@ static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; mod device; +mod netplay; mod ui; use clap::Parser; @@ -156,7 +157,12 @@ async fn main() { if args.game.is_some() { let file_path = std::path::Path::new(args.game.as_ref().unwrap()); - device::run_game(file_path, data_dir, &mut device, args.fullscreen); + let rom_contents = device::get_rom_contents(file_path); + if rom_contents.is_empty() { + println!("Could not read rom file"); + return; + } + device::run_game(rom_contents, data_dir, &mut device, args.fullscreen); } } else { let options = eframe::NativeOptions { diff --git a/src/netplay.rs b/src/netplay.rs new file mode 100644 index 0000000..10ab273 --- /dev/null +++ b/src/netplay.rs @@ -0,0 +1,89 @@ +use crate::device; +use crate::ui; +use std::io::{Read, Write}; +//UDP packet formats +//const UDP_SEND_KEY_INFO: u8 = 0; +//const UDP_RECEIVE_KEY_INFO: u8 = 1; +//const UDP_REQUEST_KEY_INFO: u8 = 2; +//const UDP_RECEIVE_KEY_INFO_GRATUITOUS: u8 = 3; +//const UDP_SYNC_DATA: u8 = 4; + +//TCP packet formats +//const TCP_SEND_SAVE: u8 = 1; +//const TCP_RECEIVE_SAVE: u8 = 2; +//const TCP_SEND_SETTINGS: u8 = 3; +//const TCP_RECEIVE_SETTINGS: u8 = 4; +const TCP_REGISTER_PLAYER: u8 = 5; +const TCP_GET_REGISTRATION: u8 = 6; +const TCP_DISCONNECT_NOTICE: u8 = 7; + +pub struct Netplay { + // udp_socket: std::net::UdpSocket, + tcp_stream: std::net::TcpStream, + player_number: u8, +} + +pub fn init( + mut peer_addr: std::net::SocketAddr, + session: ui::gui::gui_netplay::NetplayRoom, + player_number: u8, +) -> Netplay { + peer_addr.set_port(session.port.unwrap() as u16); + let udp_socket = if peer_addr.is_ipv4() { + std::net::UdpSocket::bind((std::net::Ipv4Addr::UNSPECIFIED, 0)) + .expect("couldn't bind to address") + } else { + std::net::UdpSocket::bind((std::net::Ipv6Addr::UNSPECIFIED, 0)) + .expect("couldn't bind to address") + }; + udp_socket.connect(peer_addr).unwrap(); + + let mut stream = std::net::TcpStream::connect(peer_addr).unwrap(); + + let regid = (player_number + 1) as u32; + let mut request: [u8; 8] = [ + TCP_REGISTER_PLAYER, + player_number, + 0, //plugin/pak + 0, //rawdata + 0, //regid (u32) + 0, //regid (u32) + 0, //regid (u32) + 0, //regid (u32) + ]; + + request[4..8].copy_from_slice(®id.to_be_bytes()); + stream.write_all(&request).unwrap(); + + let mut response: [u8; 2] = [0, 0]; + stream.read_exact(&mut response).unwrap(); + if response[0] != 1 { + panic!("Failed to register player"); + } + let _buffer_target = response[1]; + + let request: [u8; 1] = [TCP_GET_REGISTRATION]; + stream.write_all(&request).unwrap(); + let mut response: [u8; 24] = [0; 24]; + stream.read_exact(&mut response).unwrap(); + + let mut reg_id: [u32; 4] = [0; 4]; + for i in 0..4 { + // reg_id of 0 means no player connected + reg_id[i] = u32::from_be_bytes(response[(i * 6)..(i * 6) + 4].try_into().unwrap()); + } + Netplay { + // udp_socket, + tcp_stream: stream, + player_number, + } +} + +pub fn close(device: &mut device::Device) { + let netplay = device.netplay.as_mut().unwrap(); + let regid = (netplay.player_number + 1) as u32; + let mut request: [u8; 5] = [TCP_DISCONNECT_NOTICE, 0, 0, 0, 0]; + request[1..5].copy_from_slice(®id.to_be_bytes()); + + netplay.tcp_stream.write_all(&request).unwrap(); +} diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 038edca..cd675a7 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -1,8 +1,8 @@ use crate::device; +use crate::netplay; use crate::ui; use eframe::egui; - -mod netplay; +pub mod gui_netplay; pub struct GopherEguiApp { config_dir: std::path::PathBuf, @@ -24,7 +24,7 @@ pub struct GopherEguiApp { vru_window_receiver: Option>>, vru_word_notifier: Option>, vru_word_list: Vec, - netplay: netplay::Netplay, + pub netplay: gui_netplay::GuiNetplay, } struct SaveConfig { @@ -229,18 +229,38 @@ fn show_vru_dialog(app: &mut GopherEguiApp, ctx: &egui::Context) { ); } -fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { - let task = rfd::AsyncFileDialog::new().pick_file(); +pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { + let task; + let netplay; + let selected_controller = app.selected_controller; let selected_profile = app.selected_profile.clone(); let controller_enabled = app.controller_enabled; let upscale = app.upscale; let integer_scaling = app.integer_scaling; let fullscreen = app.fullscreen; - let emulate_vru = app.emulate_vru; + let mut emulate_vru = app.emulate_vru; let config_dir = app.config_dir.clone(); let cache_dir = app.cache_dir.clone(); let data_dir = app.data_dir.clone(); + let peer_addr; + let session; + let player_number; + + if app.netplay.player_name.is_empty() { + task = Some(rfd::AsyncFileDialog::new().pick_file()); + netplay = false; + peer_addr = None; + session = None; + player_number = None; + } else { + task = None; + netplay = true; + emulate_vru = false; + peer_addr = app.netplay.peer_addr; + session = app.netplay.waiting_session.clone(); + player_number = Some(app.netplay.player_number); + } let (vru_window_notifier, vru_window_receiver): ( tokio::sync::mpsc::Sender>, @@ -260,13 +280,15 @@ fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { app.vru_word_notifier = None; } + let rom_contents = app.netplay.rom_contents.clone(); let gui_ctx = ctx.clone(); tokio::spawn(async move { - let file = task.await; + let file = if !netplay { task.unwrap().await } else { None }; - if let Some(file) = file { + if file.is_some() || netplay { let running_file = cache_dir.join("game_running"); if running_file.exists() { + println!("Game already running"); return; } let result = std::fs::File::create(running_file.clone()); @@ -291,12 +313,23 @@ fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { device.vru.word_receiver = Some(vru_word_receiver); device.vru.gui_ctx = Some(gui_ctx); } - device::run_game( - std::path::Path::new(file.path()), - data_dir, - &mut device, - fullscreen, - ); + + if netplay { + device.netplay = Some(netplay::init( + peer_addr.unwrap(), + session.unwrap(), + player_number.unwrap(), + )); + device::run_game(rom_contents, data_dir, &mut device, fullscreen); + netplay::close(&mut device); + } else { + let rom_contents = device::get_rom_contents(file.unwrap().path()); + if rom_contents.is_empty() { + println!("Could not read rom file"); + } else { + device::run_game(rom_contents, data_dir, &mut device, fullscreen); + } + } let result = std::fs::remove_file(running_file.clone()); if result.is_err() { panic!("could not remove running file: {}", result.err().unwrap()) @@ -308,19 +341,19 @@ fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { impl eframe::App for GopherEguiApp { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { if self.netplay.create { - netplay::netplay_create(self, ctx); + gui_netplay::netplay_create(self, ctx); } if self.netplay.join { - netplay::netplay_join(self, ctx); + gui_netplay::netplay_join(self, ctx); } if self.netplay.wait { - netplay::netplay_wait(self, ctx); + gui_netplay::netplay_wait(self, ctx); } if !self.netplay.error.is_empty() { - netplay::netplay_error(self, ctx, self.netplay.error.clone()); + gui_netplay::netplay_error(self, ctx, self.netplay.error.clone()); } if self.configure_profile { diff --git a/src/ui/gui/netplay.rs b/src/ui/gui/gui_netplay.rs similarity index 93% rename from src/ui/gui/netplay.rs rename to src/ui/gui/gui_netplay.rs index bb00209..be9802a 100644 --- a/src/ui/gui/netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -1,4 +1,5 @@ use crate::device; +use crate::ui::gui; use crate::ui::gui::GopherEguiApp; use eframe::egui; use sha2::{Digest, Sha256}; @@ -6,8 +7,10 @@ use sha2::{Digest, Sha256}; const NETPLAY_VERSION: i32 = 17; const EMU_NAME: &str = "gopher64"; +type GameInfo = (String, String, String, Vec); + #[derive(Default)] -pub struct Netplay { +pub struct GuiNetplay { pub create: bool, pub join: bool, pub wait: bool, @@ -24,19 +27,22 @@ pub struct Netplay { pub chat_message: String, pub selected_session: Option, pub pending_begin: bool, + pub peer_addr: Option, pub motd: String, pub sessions: Vec, + pub rom_contents: Vec, + pub player_number: u8, pub player_names: [String; 4], pub server: (String, String), pub socket_waiting: bool, - pub game_info: (String, String, String), + pub game_info: GameInfo, pub servers: std::collections::HashMap, pub waiting_session: Option, pub socket: Option>>, pub server_receiver: Option>>, - pub game_info_receiver: Option>, + pub game_info_receiver: Option>, pub broadcast_socket: Option, pub broadcast_timer: Option, } @@ -49,7 +55,7 @@ pub struct NetplayRoom { #[serde(rename = "MD5")] md5: Option, game_name: Option, - port: Option, + pub port: Option, } #[derive(serde::Serialize, serde::Deserialize)] @@ -193,15 +199,27 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { let game_name = std::str::from_utf8(&rom_contents[0x20..0x20 + 0x14]) .unwrap() .to_string(); - let _ = tx.send((hash, game_name, file.file_name())).await; + let _ = tx + .send((hash, game_name, file.file_name(), rom_contents)) + .await; } else { let _ = tx - .send(("".to_string(), "".to_string(), "Invalid ROM".to_string())) + .send(( + "".to_string(), + "".to_string(), + "Invalid ROM".to_string(), + vec![], + )) .await; } } else { let _ = tx - .send(("".to_string(), "".to_string(), "Open ROM".to_string())) + .send(( + "".to_string(), + "".to_string(), + "Open ROM".to_string(), + vec![], + )) .await; } gui_ctx.request_repaint(); @@ -228,6 +246,7 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { let data = result.unwrap(); if !data.0.is_empty() { app.netplay.game_info = data; + app.netplay.rom_contents = app.netplay.game_info.3.clone(); app.netplay.create_rom_label = app.netplay.game_info.2.clone(); } else { app.netplay.create_rom_label = data.2; @@ -278,6 +297,7 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { } else if app.netplay.game_info.0.is_empty() { app.netplay.error = "ROM not loaded".to_string(); } else { + app.netplay.rom_contents = app.netplay.game_info.3.clone(); let now_utc = chrono::Utc::now().timestamp_millis().to_string(); let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); let mut game_name = app.netplay.game_info.1.trim().to_string(); @@ -315,6 +335,7 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { .unwrap(); match socket.get_mut() { tungstenite::stream::MaybeTlsStream::Plain(stream) => { + app.netplay.peer_addr = Some(stream.peer_addr().unwrap()); stream.set_nonblocking(true) } _ => unimplemented!(), @@ -346,7 +367,10 @@ fn get_sessions(app: &mut GopherEguiApp, ctx: &egui::Context) { let (mut sock, _response) = tungstenite::connect(&app.netplay.server.1).expect("Can't connect"); match sock.get_mut() { - tungstenite::stream::MaybeTlsStream::Plain(stream) => stream.set_nonblocking(true), + tungstenite::stream::MaybeTlsStream::Plain(stream) => { + app.netplay.peer_addr = Some(stream.peer_addr().unwrap()); + stream.set_nonblocking(true) + } _ => unimplemented!(), } .expect("could not set socket to non-blocking"); @@ -555,13 +579,16 @@ pub fn netplay_join(app: &mut GopherEguiApp, ctx: &egui::Context) { std::str::from_utf8(&rom_contents[0x20..0x20 + 0x14]) .unwrap() .to_string(); - let _ = tx.send((hash, game_name, file.file_name())).await; + let _ = tx + .send((hash, game_name, file.file_name(), rom_contents)) + .await; } else { let _ = tx .send(( "".to_string(), "".to_string(), "Invalid ROM".to_string(), + vec![], )) .await; } @@ -571,6 +598,7 @@ pub fn netplay_join(app: &mut GopherEguiApp, ctx: &egui::Context) { "".to_string(), "".to_string(), "No ROM selected".to_string(), + vec![], )) .await; } @@ -712,6 +740,15 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { app.netplay.chat_log.push_str(&message.message.unwrap()); app.netplay.chat_log.push('\n'); } else if message.message_type == "reply_begin_game" { + let mut player = 0; + for (i, name) in app.netplay.player_names.iter().enumerate() { + if *name == app.netplay.player_name { + player = i; + break; + } + } + app.netplay.player_number = player as u8; + gui::open_rom(app, ctx); app.netplay = Default::default(); return; } From 26f0936dc761cf3d609d61d62a3d63c4fe31fc01 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 20 Jan 2025 21:48:39 +0100 Subject: [PATCH 0220/1117] disable VRU during netplay (#167) --- src/ui/gui.rs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index cd675a7..8303584 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -239,7 +239,7 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { let upscale = app.upscale; let integer_scaling = app.integer_scaling; let fullscreen = app.fullscreen; - let mut emulate_vru = app.emulate_vru; + let emulate_vru = app.emulate_vru; let config_dir = app.config_dir.clone(); let cache_dir = app.cache_dir.clone(); let data_dir = app.data_dir.clone(); @@ -256,7 +256,6 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { } else { task = None; netplay = true; - emulate_vru = false; peer_addr = app.netplay.peer_addr; session = app.netplay.waiting_session.clone(); player_number = Some(app.netplay.player_number); @@ -272,7 +271,7 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { tokio::sync::mpsc::Receiver, ) = tokio::sync::mpsc::channel(1); - if emulate_vru { + if emulate_vru && !netplay { app.vru_window_receiver = Some(vru_window_receiver); app.vru_word_notifier = Some(vru_word_notifier); } else { @@ -308,12 +307,6 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { }; save_config(&mut device.ui, save_config_items); - if emulate_vru { - device.vru.window_notifier = Some(vru_window_notifier); - device.vru.word_receiver = Some(vru_word_receiver); - device.vru.gui_ctx = Some(gui_ctx); - } - if netplay { device.netplay = Some(netplay::init( peer_addr.unwrap(), @@ -323,6 +316,12 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { device::run_game(rom_contents, data_dir, &mut device, fullscreen); netplay::close(&mut device); } else { + if emulate_vru { + device.vru.window_notifier = Some(vru_window_notifier); + device.vru.word_receiver = Some(vru_word_receiver); + device.vru.gui_ctx = Some(gui_ctx); + } + let rom_contents = device::get_rom_contents(file.unwrap().path()); if rom_contents.is_empty() { println!("Could not read rom file"); From 1a823399ab92054915e0591b975b4a7028da6da7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 22 Jan 2025 09:48:09 +0100 Subject: [PATCH 0221/1117] fix loading ROM in netplay --- src/ui/gui/gui_netplay.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index be9802a..54a57ec 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -297,7 +297,6 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { } else if app.netplay.game_info.0.is_empty() { app.netplay.error = "ROM not loaded".to_string(); } else { - app.netplay.rom_contents = app.netplay.game_info.3.clone(); let now_utc = chrono::Utc::now().timestamp_millis().to_string(); let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); let mut game_name = app.netplay.game_info.1.trim().to_string(); @@ -438,6 +437,7 @@ pub fn netplay_join(app: &mut GopherEguiApp, ctx: &egui::Context) { let data = result.unwrap(); if !data.0.is_empty() { app.netplay.game_info = data; + app.netplay.rom_contents = app.netplay.game_info.3.clone(); let netplay_message = NetplayMessage { message_type: "request_join_room".to_string(), From ba8f39f28304fb92ce81908117d97139b0814b74 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 22 Jan 2025 11:10:54 +0100 Subject: [PATCH 0222/1117] Netplay sync save files (#168) --- src/device.rs | 4 +- src/device/cart.rs | 2 +- src/device/controller/mempak.rs | 2 +- src/device/sram.rs | 4 +- src/netplay.rs | 31 ++++++++++-- src/ui/storage.rs | 90 +++++++++++++++++++++++++++------ 6 files changed, 107 insertions(+), 26 deletions(-) diff --git a/src/device.rs b/src/device.rs index a89afbf..345994f 100644 --- a/src/device.rs +++ b/src/device.rs @@ -74,13 +74,13 @@ pub fn run_game( cpu::init(device); ui::storage::init(&mut device.ui, data_dir); - ui::storage::load_saves(&mut device.ui); + ui::storage::load_saves(&mut device.ui, &mut device.netplay); cart_rom::load_rom_save(device); cpu::run(device); ui::video::close(); - ui::storage::write_saves(&device.ui); + ui::storage::write_saves(&device.ui, &device.netplay); } fn swap_rom(contents: Vec) -> Vec { diff --git a/src/device/cart.rs b/src/device/cart.rs index 41f986c..e59bc44 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -16,7 +16,7 @@ const JDT_AF_RTC: u16 = 0x1000; /* RTC */ const JDT_EEPROM_4K: u16 = 0x8000; /* 4k EEPROM */ const JDT_EEPROM_16K: u16 = 0xc000; /* 16k EEPROM */ const EEPROM_BLOCK_SIZE: usize = 8; -const EEPROM_MAX_SIZE: usize = 0x800; +pub const EEPROM_MAX_SIZE: usize = 0x800; pub struct AfRtc { pub control: u16, diff --git a/src/device/controller/mempak.rs b/src/device/controller/mempak.rs index 48dc9be..0361678 100644 --- a/src/device/controller/mempak.rs +++ b/src/device/controller/mempak.rs @@ -1,6 +1,6 @@ use crate::device; -const MEMPAK_SIZE: usize = 0x8000; +pub const MEMPAK_SIZE: usize = 0x8000; const MPK_PAGE_SIZE: usize = 256; fn format_mempak(device: &mut device::Device) { diff --git a/src/device/sram.rs b/src/device/sram.rs index 9ece908..e54589a 100644 --- a/src/device/sram.rs +++ b/src/device/sram.rs @@ -2,8 +2,8 @@ use crate::device; use crate::ui; const SRAM_MASK: usize = 0xFFFF; -const SRAM_SIZE: usize = 0x8000; -const FLASHRAM_SIZE: usize = 0x20000; +pub const SRAM_SIZE: usize = 0x8000; +pub const FLASHRAM_SIZE: usize = 0x20000; pub const FLASHRAM_TYPE_ID: u32 = 0x11118001; pub const MX29L1100_ID: u32 = 0x00c2001e; const MX29L0000_ID: u32 = 0x00c20000; diff --git a/src/netplay.rs b/src/netplay.rs index 10ab273..2255e9c 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -9,8 +9,8 @@ use std::io::{Read, Write}; //const UDP_SYNC_DATA: u8 = 4; //TCP packet formats -//const TCP_SEND_SAVE: u8 = 1; -//const TCP_RECEIVE_SAVE: u8 = 2; +const TCP_SEND_SAVE: u8 = 1; +const TCP_RECEIVE_SAVE: u8 = 2; //const TCP_SEND_SETTINGS: u8 = 3; //const TCP_RECEIVE_SETTINGS: u8 = 4; const TCP_REGISTER_PLAYER: u8 = 5; @@ -19,8 +19,31 @@ const TCP_DISCONNECT_NOTICE: u8 = 7; pub struct Netplay { // udp_socket: std::net::UdpSocket, - tcp_stream: std::net::TcpStream, - player_number: u8, + pub tcp_stream: std::net::TcpStream, + pub player_number: u8, +} + +pub fn send_save(netplay: &mut Netplay, save_type: &str, save_data: &[u8], size: usize) { + let mut request: Vec = [TCP_SEND_SAVE].to_vec(); + request.extend_from_slice(save_type.as_bytes()); + request.push(0); // null terminate string + request.extend_from_slice(&(size as u32).to_be_bytes()); + + let mut send_data = save_data.to_owned(); + send_data.resize(size, 0); // pad with zeros if needed + request.extend(send_data); + netplay.tcp_stream.write_all(&request).unwrap(); +} + +pub fn receive_save(netplay: &mut Netplay, save_type: &str, save_data: &mut Vec, size: usize) { + let mut request: Vec = [TCP_RECEIVE_SAVE].to_vec(); + request.extend_from_slice(save_type.as_bytes()); + request.push(0); // null terminate string + netplay.tcp_stream.write_all(&request).unwrap(); + + let mut response: Vec = vec![0; size]; + netplay.tcp_stream.read_exact(&mut response).unwrap(); + *save_data = response; } pub fn init( diff --git a/src/ui/storage.rs b/src/ui/storage.rs index afcb7a7..36244a1 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -1,3 +1,5 @@ +use crate::device; +use crate::netplay; use crate::ui; #[derive(PartialEq)] @@ -118,7 +120,7 @@ pub fn init(ui: &mut ui::Ui, data_dir: std::path::PathBuf) { .push(ui.game_id.to_owned() + "-" + &ui.game_hash + ".romsave"); } -pub fn load_saves(ui: &mut ui::Ui) { +pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { let eep = std::fs::read(&mut ui.paths.eep_file_path); if eep.is_ok() { ui.saves.eeprom.0 = eep.unwrap(); @@ -139,6 +141,60 @@ pub fn load_saves(ui: &mut ui::Ui) { if romsave.is_ok() { ui.saves.romsave.0 = serde_json::from_slice(romsave.unwrap().as_ref()).unwrap(); } + if netplay.is_some() { + if netplay.as_ref().unwrap().player_number == 0 { + netplay::send_save( + netplay.as_mut().unwrap(), + "eep", + &ui.saves.eeprom.0, + device::cart::EEPROM_MAX_SIZE, + ); + netplay::send_save( + netplay.as_mut().unwrap(), + "sra", + &ui.saves.sram.0, + device::sram::SRAM_SIZE, + ); + netplay::send_save( + netplay.as_mut().unwrap(), + "fla", + &ui.saves.flash.0, + device::sram::FLASHRAM_SIZE, + ); + netplay::send_save( + netplay.as_mut().unwrap(), + "mpk", + &ui.saves.mempak.0, + device::controller::mempak::MEMPAK_SIZE * 4, + ); + } else { + netplay::receive_save( + netplay.as_mut().unwrap(), + "eep", + &mut ui.saves.eeprom.0, + device::cart::EEPROM_MAX_SIZE, + ); + netplay::receive_save( + netplay.as_mut().unwrap(), + "sra", + &mut ui.saves.sram.0, + device::sram::SRAM_SIZE, + ); + netplay::receive_save( + netplay.as_mut().unwrap(), + "fla", + &mut ui.saves.flash.0, + device::sram::FLASHRAM_SIZE, + ); + netplay::receive_save( + netplay.as_mut().unwrap(), + "mpk", + &mut ui.saves.mempak.0, + device::controller::mempak::MEMPAK_SIZE * 4, + ); + } + ui.saves.romsave.0 = Default::default(); // can't do romsaves with the current netplay implementation + } } fn write_rom_save(ui: &ui::Ui) { @@ -146,21 +202,23 @@ fn write_rom_save(ui: &ui::Ui) { serde_json::to_writer(f, &ui.saves.romsave.0).unwrap(); } -pub fn write_saves(ui: &ui::Ui) { - if ui.saves.eeprom.1 { - write_save(ui, SaveTypes::Eeprom16k) - } - if ui.saves.sram.1 { - write_save(ui, SaveTypes::Sram) - } - if ui.saves.flash.1 { - write_save(ui, SaveTypes::Flash) - } - if ui.saves.mempak.1 { - write_save(ui, SaveTypes::Mempak) - } - if ui.saves.romsave.1 { - write_save(ui, SaveTypes::Romsave) +pub fn write_saves(ui: &ui::Ui, netplay: &Option) { + if netplay.is_none() || netplay.as_ref().unwrap().player_number == 0 { + if ui.saves.eeprom.1 { + write_save(ui, SaveTypes::Eeprom16k) + } + if ui.saves.sram.1 { + write_save(ui, SaveTypes::Sram) + } + if ui.saves.flash.1 { + write_save(ui, SaveTypes::Flash) + } + if ui.saves.mempak.1 { + write_save(ui, SaveTypes::Mempak) + } + if ui.saves.romsave.1 && netplay.is_none() { + write_save(ui, SaveTypes::Romsave) + } } } From 87ae2b940a0ae34afd727410b239926b86a4f2ce Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 22 Jan 2025 13:21:19 +0100 Subject: [PATCH 0223/1117] optimize save loading --- src/ui/storage.rs | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/ui/storage.rs b/src/ui/storage.rs index 36244a1..9ffb3d4 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -121,26 +121,29 @@ pub fn init(ui: &mut ui::Ui, data_dir: std::path::PathBuf) { } pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { - let eep = std::fs::read(&mut ui.paths.eep_file_path); - if eep.is_ok() { - ui.saves.eeprom.0 = eep.unwrap(); - } - let sra = std::fs::read(&mut ui.paths.sra_file_path); - if sra.is_ok() { - ui.saves.sram.0 = sra.unwrap(); - } - let fla = std::fs::read(&mut ui.paths.fla_file_path); - if fla.is_ok() { - ui.saves.flash.0 = fla.unwrap(); - } - let mempak = std::fs::read(&mut ui.paths.pak_file_path); - if mempak.is_ok() { - ui.saves.mempak.0 = mempak.unwrap(); - } - let romsave = std::fs::read(&mut ui.paths.romsave_file_path); - if romsave.is_ok() { - ui.saves.romsave.0 = serde_json::from_slice(romsave.unwrap().as_ref()).unwrap(); + if netplay.is_none() || netplay.as_ref().unwrap().player_number == 0 { + let eep = std::fs::read(&mut ui.paths.eep_file_path); + if eep.is_ok() { + ui.saves.eeprom.0 = eep.unwrap(); + } + let sra = std::fs::read(&mut ui.paths.sra_file_path); + if sra.is_ok() { + ui.saves.sram.0 = sra.unwrap(); + } + let fla = std::fs::read(&mut ui.paths.fla_file_path); + if fla.is_ok() { + ui.saves.flash.0 = fla.unwrap(); + } + let mempak = std::fs::read(&mut ui.paths.pak_file_path); + if mempak.is_ok() { + ui.saves.mempak.0 = mempak.unwrap(); + } + let romsave = std::fs::read(&mut ui.paths.romsave_file_path); + if romsave.is_ok() { + ui.saves.romsave.0 = serde_json::from_slice(romsave.unwrap().as_ref()).unwrap(); + } } + if netplay.is_some() { if netplay.as_ref().unwrap().player_number == 0 { netplay::send_save( From 9257e8c66dfd634c21960977cd3a395279fd1e71 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 22 Jan 2025 13:23:59 +0100 Subject: [PATCH 0224/1117] clean up rom saving --- src/ui/storage.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/ui/storage.rs b/src/ui/storage.rs index 9ffb3d4..88d4c00 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -138,9 +138,12 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { if mempak.is_ok() { ui.saves.mempak.0 = mempak.unwrap(); } - let romsave = std::fs::read(&mut ui.paths.romsave_file_path); - if romsave.is_ok() { - ui.saves.romsave.0 = serde_json::from_slice(romsave.unwrap().as_ref()).unwrap(); + if netplay.is_none() { + // can't do romsaves with the current netplay implementation + let romsave = std::fs::read(&mut ui.paths.romsave_file_path); + if romsave.is_ok() { + ui.saves.romsave.0 = serde_json::from_slice(romsave.unwrap().as_ref()).unwrap(); + } } } @@ -196,7 +199,6 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { device::controller::mempak::MEMPAK_SIZE * 4, ); } - ui.saves.romsave.0 = Default::default(); // can't do romsaves with the current netplay implementation } } From 195412a48eedd8275d677d2e3458ac3cdd480ed3 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 22 Jan 2025 21:31:58 +0100 Subject: [PATCH 0225/1117] Netplay input sync (#169) * Netplay sync inputs * use wrapping add * non blocking * more * more * more * more * more * more * more * more * more * more * more * more * message * more * close * fixes * redirect rumble * more * fix * more * messages --- src/device.rs | 2 +- src/device/controller.rs | 20 ++- src/device/controller/rumble.rs | 6 +- src/device/pif.rs | 8 +- src/device/vi.rs | 9 +- src/netplay.rs | 223 ++++++++++++++++++++++++++++++-- src/ui/gui.rs | 19 +++ src/ui/gui/gui_netplay.rs | 17 ++- 8 files changed, 288 insertions(+), 16 deletions(-) diff --git a/src/device.rs b/src/device.rs index 345994f..abfd524 100644 --- a/src/device.rs +++ b/src/device.rs @@ -164,7 +164,7 @@ pub struct Device { pub netplay: Option, pub ui: ui::Ui, byte_swap: usize, - cpu: cpu::Cpu, + pub cpu: cpu::Cpu, pif: pif::Pif, cart: cart_rom::Cart, memory: memory::Memory, diff --git a/src/device/controller.rs b/src/device/controller.rs index d5af046..7bb2b22 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -1,4 +1,5 @@ use crate::device; +use crate::netplay; use crate::ui; pub mod mempak; @@ -52,7 +53,17 @@ pub fn process(device: &mut device::Device, channel: usize) { } JCMD_CONTROLLER_READ => { let offset = device.pif.channels[channel].rx_buf.unwrap(); - let input = ui::input::get(&mut device.ui, channel); + let input = if device.netplay.is_none() { + ui::input::get(&mut device.ui, channel) + } else { + if device.netplay.as_ref().unwrap().player_number as usize == channel { + let local_input = ui::input::get(&mut device.ui, 0); + netplay::send_input(device.netplay.as_ref().unwrap(), local_input); + } + + netplay::get_input(device, channel) + }; + device.pif.ram[offset..offset + 4].copy_from_slice(&input.0.to_ne_bytes()); if input.1 { // pak change button pressed @@ -151,7 +162,12 @@ fn pak_switch_event(device: &mut device::Device) { for (i, channel) in device.pif.channels.iter_mut().enumerate() { if channel.change_pak != PakType::None { if channel.change_pak == PakType::RumblePak { - device::ui::input::set_rumble(&mut device.ui, i, 0); + if device.netplay.is_none() { + device::ui::input::set_rumble(&mut device.ui, i, 0); + } else if device.netplay.as_ref().unwrap().player_number as usize == i { + device::ui::input::set_rumble(&mut device.ui, 0, 0); + } + let handler = device::controller::PakHandler { read: device::controller::mempak::read, write: device::controller::mempak::write, diff --git a/src/device/controller/rumble.rs b/src/device/controller/rumble.rs index 6356507..36d5aa5 100644 --- a/src/device/controller/rumble.rs +++ b/src/device/controller/rumble.rs @@ -15,6 +15,10 @@ pub fn read(device: &mut device::Device, _channel: usize, address: u16, data: us pub fn write(device: &mut device::Device, channel: usize, address: u16, data: usize, size: usize) { if address == 0xc000 { let rumble = device.pif.ram[data + size - 1]; - device::ui::input::set_rumble(&mut device.ui, channel, rumble); + if device.netplay.is_none() { + device::ui::input::set_rumble(&mut device.ui, channel, rumble); + } else if device.netplay.as_ref().unwrap().player_number as usize == channel { + device::ui::input::set_rumble(&mut device.ui, 0, rumble); + } } } diff --git a/src/device/pif.rs b/src/device/pif.rs index d94765f..8bab677 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -100,6 +100,7 @@ pub fn update_pif_ram(device: &mut device::Device) -> u64 { for k in 0..PIF_CHANNELS_COUNT { active_channels += process_channel(device, k) } + (24000 + (active_channels * 30000)) as u64 } @@ -232,7 +233,12 @@ pub fn init(device: &mut device::Device) { }; for i in 0..4 { - if device.ui.config.input.controller_enabled[i] { + if device.netplay.is_none() { + if device.ui.config.input.controller_enabled[i] { + device.pif.channels[i].pak_handler = Some(mempak_handler); + device.pif.channels[i].process = Some(device::controller::process); + } + } else if device.netplay.as_ref().unwrap().player_data[i].reg_id != 0 { device.pif.channels[i].pak_handler = Some(mempak_handler); device.pif.channels[i].process = Some(device::controller::process); } diff --git a/src/device/vi.rs b/src/device/vi.rs index ccb7964..2915317 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -1,4 +1,5 @@ use crate::device; +use crate::netplay; use crate::ui; use governor::clock::Clock; @@ -124,8 +125,14 @@ fn vertical_interrupt_event(device: &mut device::Device) { } */ + let mut enable_speed_limiter = true; + if device.netplay.is_some() { + netplay::send_sync_check(device); + enable_speed_limiter = !device.netplay.as_ref().unwrap().fast_forward; + } + device.vi.vi_counter += 1; - if device.vi.vi_counter % LIMIT_BUFFER == 0 { + if device.vi.vi_counter % LIMIT_BUFFER == 0 && enable_speed_limiter { speed_limiter(device); } diff --git a/src/netplay.rs b/src/netplay.rs index 2255e9c..050de35 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -1,12 +1,13 @@ use crate::device; use crate::ui; +use eframe::egui; use std::io::{Read, Write}; //UDP packet formats -//const UDP_SEND_KEY_INFO: u8 = 0; -//const UDP_RECEIVE_KEY_INFO: u8 = 1; -//const UDP_REQUEST_KEY_INFO: u8 = 2; -//const UDP_RECEIVE_KEY_INFO_GRATUITOUS: u8 = 3; -//const UDP_SYNC_DATA: u8 = 4; +const UDP_SEND_KEY_INFO: u8 = 0; +const UDP_RECEIVE_KEY_INFO: u8 = 1; +const UDP_REQUEST_KEY_INFO: u8 = 2; +const UDP_RECEIVE_KEY_INFO_GRATUITOUS: u8 = 3; +const UDP_SYNC_DATA: u8 = 4; //TCP packet formats const TCP_SEND_SAVE: u8 = 1; @@ -18,9 +19,34 @@ const TCP_GET_REGISTRATION: u8 = 6; const TCP_DISCONNECT_NOTICE: u8 = 7; pub struct Netplay { - // udp_socket: std::net::UdpSocket, - pub tcp_stream: std::net::TcpStream, + udp_socket: std::net::UdpSocket, + tcp_stream: std::net::TcpStream, pub player_number: u8, + pub player_data: [PlayerData; 4], + vi_counter: u32, + status: u8, + buffer_target: u8, + pub fast_forward: bool, + pub error_notifier: tokio::sync::mpsc::Sender, + pub gui_ctx: egui::Context, +} + +pub struct PlayerData { + lag: u8, + count: u32, + pub reg_id: u32, + input_events: std::collections::HashMap, +} + +struct InputEvent { + input: u32, + plugin: u8, +} + +fn send_error(netplay: &mut Netplay, error: String) { + netplay.error_notifier.try_send(error).unwrap(); + + netplay.gui_ctx.request_repaint(); // this is so the window pops up right away } pub fn send_save(netplay: &mut Netplay, save_type: &str, save_data: &[u8], size: usize) { @@ -46,10 +72,151 @@ pub fn receive_save(netplay: &mut Netplay, save_type: &str, save_data: &mut Vec< *save_data = response; } +pub fn send_sync_check(device: &mut device::Device) { + let netplay = device.netplay.as_mut().unwrap(); + if netplay.vi_counter % 600 == 0 { + let mut request: Vec = [UDP_SYNC_DATA].to_vec(); + request.extend_from_slice(&(netplay.vi_counter).to_be_bytes()); + + for i in 0..device::cop0::COP0_REGS_COUNT as usize { + request.extend_from_slice(&(device.cpu.cop0.regs[i] as u32).to_be_bytes()); + } + + netplay.udp_socket.send(&request).unwrap(); + } + netplay.vi_counter = netplay.vi_counter.wrapping_add(1); +} + +pub fn send_input(netplay: &Netplay, input: (u32, bool)) { + let mut request: Vec = [UDP_SEND_KEY_INFO].to_vec(); + request.push(netplay.player_number); + request.extend_from_slice( + &(netplay.player_data[netplay.player_number as usize].count).to_be_bytes(), + ); + request.extend_from_slice(&(input.0).to_be_bytes()); + request.push(input.1 as u8); + netplay.udp_socket.send(&request).unwrap(); +} + +pub fn get_input(device: &mut device::Device, channel: usize) -> (u32, bool) { + let netplay = device.netplay.as_mut().unwrap(); + let mut input = None; + + let timeout = std::time::Instant::now() + std::time::Duration::from_secs(10); + let mut request_timer = std::time::Instant::now() + std::time::Duration::from_millis(5); + request_input(netplay, channel); + while input.is_none() { + if std::time::Instant::now() > request_timer { + // sends a request packet every 5ms + request_input(netplay, channel); + request_timer = std::time::Instant::now() + std::time::Duration::from_millis(5); + } + process_incoming(netplay); + input = netplay.player_data[channel] + .input_events + .remove(&netplay.player_data[channel].count); + + if std::time::Instant::now() > timeout { + send_error( + netplay, + "Timed out waiting for input. Lost connection to server".to_string(), + ); + input = Some(InputEvent { + input: 0, + plugin: 0, + }); + device.cpu.running = false; + } + } + + netplay.fast_forward = netplay.player_data[channel].lag > 0 + && netplay.player_data[channel].input_events.len() as u8 > netplay.buffer_target; + + netplay.player_data[channel].count = netplay.player_data[channel].count.wrapping_add(1); + ( + input.as_ref().unwrap().input, + input.as_ref().unwrap().plugin != 0, + ) +} + +fn request_input(netplay: &Netplay, channel: usize) { + let mut request: Vec = [UDP_REQUEST_KEY_INFO].to_vec(); + request.push(channel as u8); //The player we need input for + request.extend_from_slice( + &(netplay.player_data[netplay.player_number as usize].reg_id).to_be_bytes(), + ); + request.extend_from_slice(&(netplay.player_data[channel].count).to_be_bytes()); + request.push(0); //spectator mode + request.push(netplay.player_data[channel].input_events.len() as u8); + netplay.udp_socket.send(&request).unwrap(); +} + +fn process_incoming(netplay: &mut Netplay) { + let mut buf: [u8; 1024] = [0; 1024]; + while let Ok(_incoming) = netplay.udp_socket.recv(&mut buf) { + match buf[0] { + UDP_RECEIVE_KEY_INFO | UDP_RECEIVE_KEY_INFO_GRATUITOUS => { + let player = buf[1] as usize; + //current_status is a status update from the server + //it will let us know if another player has disconnected, or the games have desynced + let current_status = buf[2]; + if buf[0] == UDP_RECEIVE_KEY_INFO { + netplay.player_data[player].lag = buf[3]; + } + if current_status != netplay.status { + if ((current_status & 0x1) ^ (netplay.status & 0x1)) != 0 { + send_error( + netplay, + format!("Players have desynced at VI {}", netplay.vi_counter), + ); + } + for dis in 1..5 { + if ((current_status & (0x1 << dis)) ^ (netplay.status & (0x1 << dis))) != 0 + { + send_error(netplay, format!("Player {} has disconnected", dis)); + } + } + netplay.status = current_status; + } + + let mut buffer_offset = 5; + for _i in 0..buf[4] { + let count = u32::from_be_bytes( + buf[buffer_offset..buffer_offset + 4].try_into().unwrap(), + ); + buffer_offset += 4; + + if (count.wrapping_sub(netplay.player_data[player].count)) > (u32::MAX / 2) { + //event doesn't need to be recorded + buffer_offset += 5; + continue; + } + + let input = u32::from_be_bytes( + buf[buffer_offset..buffer_offset + 4].try_into().unwrap(), + ); + buffer_offset += 4; + let plugin = buf[buffer_offset]; + buffer_offset += 1; + let input_event = InputEvent { input, plugin }; + netplay.player_data[player] + .input_events + .insert(count, input_event); + } + } + _ => { + panic! {"unknown UDP packet"} + } + } + } +} + pub fn init( mut peer_addr: std::net::SocketAddr, session: ui::gui::gui_netplay::NetplayRoom, player_number: u8, + error_notifier: tokio::sync::mpsc::Sender, + gui_ctx: egui::Context, ) -> Netplay { peer_addr.set_port(session.port.unwrap() as u16); let udp_socket = if peer_addr.is_ipv4() { @@ -60,6 +227,7 @@ pub fn init( .expect("couldn't bind to address") }; udp_socket.connect(peer_addr).unwrap(); + udp_socket.set_nonblocking(true).unwrap(); let mut stream = std::net::TcpStream::connect(peer_addr).unwrap(); @@ -83,7 +251,7 @@ pub fn init( if response[0] != 1 { panic!("Failed to register player"); } - let _buffer_target = response[1]; + let buffer_target = response[1]; let request: [u8; 1] = [TCP_GET_REGISTRATION]; stream.write_all(&request).unwrap(); @@ -96,9 +264,41 @@ pub fn init( reg_id[i] = u32::from_be_bytes(response[(i * 6)..(i * 6) + 4].try_into().unwrap()); } Netplay { - // udp_socket, + udp_socket, tcp_stream: stream, player_number, + vi_counter: 0, + status: 0, + buffer_target, + fast_forward: false, + error_notifier, + gui_ctx, + player_data: [ + PlayerData { + lag: 0, + count: 0, + reg_id: reg_id[0], + input_events: std::collections::HashMap::new(), + }, + PlayerData { + lag: 0, + count: 0, + reg_id: reg_id[1], + input_events: std::collections::HashMap::new(), + }, + PlayerData { + lag: 0, + count: 0, + reg_id: reg_id[2], + input_events: std::collections::HashMap::new(), + }, + PlayerData { + lag: 0, + count: 0, + reg_id: reg_id[3], + input_events: std::collections::HashMap::new(), + }, + ], } } @@ -109,4 +309,9 @@ pub fn close(device: &mut device::Device) { request[1..5].copy_from_slice(®id.to_be_bytes()); netplay.tcp_stream.write_all(&request).unwrap(); + netplay.tcp_stream.flush().unwrap(); + netplay + .tcp_stream + .shutdown(std::net::Shutdown::Both) + .unwrap(); } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 8303584..61fbb3e 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -22,6 +22,7 @@ pub struct GopherEguiApp { dinput: bool, show_vru_dialog: bool, vru_window_receiver: Option>>, + netplay_error_receiver: Option>, vru_word_notifier: Option>, vru_word_list: Vec, pub netplay: gui_netplay::GuiNetplay, @@ -105,6 +106,7 @@ impl GopherEguiApp { emulate_vru: game_ui.config.input.emulate_vru, show_vru_dialog: false, dinput: false, + netplay_error_receiver: None, vru_window_receiver: None, vru_word_notifier: None, vru_word_list: Vec::new(), @@ -261,6 +263,11 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { player_number = Some(app.netplay.player_number); } + let (netplay_error_notifier, netplay_error_receiver): ( + tokio::sync::mpsc::Sender, + tokio::sync::mpsc::Receiver, + ) = tokio::sync::mpsc::channel(8); + let (vru_window_notifier, vru_window_receiver): ( tokio::sync::mpsc::Sender>, tokio::sync::mpsc::Receiver>, @@ -271,6 +278,9 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { tokio::sync::mpsc::Receiver, ) = tokio::sync::mpsc::channel(1); + if netplay { + app.netplay_error_receiver = Some(netplay_error_receiver); + } if emulate_vru && !netplay { app.vru_window_receiver = Some(vru_window_receiver); app.vru_word_notifier = Some(vru_word_notifier); @@ -312,6 +322,8 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { peer_addr.unwrap(), session.unwrap(), player_number.unwrap(), + netplay_error_notifier, + gui_ctx, )); device::run_game(rom_contents, data_dir, &mut device, fullscreen); netplay::close(&mut device); @@ -351,6 +363,13 @@ impl eframe::App for GopherEguiApp { gui_netplay::netplay_wait(self, ctx); } + if self.netplay_error_receiver.is_some() { + let result = self.netplay_error_receiver.as_mut().unwrap().try_recv(); + if result.is_ok() { + self.netplay.error = result.unwrap(); + } + } + if !self.netplay.error.is_empty() { gui_netplay::netplay_error(self, ctx, self.netplay.error.clone()); } diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index 54a57ec..b0ea54b 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -347,6 +347,9 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { if ui.button("Close").clicked() { + let socket = app.netplay.socket.as_mut().unwrap(); + socket.close(None).unwrap(); + while socket.read().is_ok() {} app.netplay = Default::default(); }; }) @@ -542,6 +545,9 @@ pub fn netplay_join(app: &mut GopherEguiApp, ctx: &egui::Context) { ); ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { if ui.button("Close").clicked() { + let socket = app.netplay.socket.as_mut().unwrap(); + socket.close(None).unwrap(); + while socket.read().is_ok() {} app.netplay = Default::default(); }; if app.netplay.join_rom_label.is_empty() { @@ -647,8 +653,9 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { port: app.netplay.waiting_session.as_ref().unwrap().port, }), }; - let socket = app.netplay.socket.as_mut().unwrap(); + if !app.netplay.socket_waiting { + let socket = app.netplay.socket.as_mut().unwrap(); socket .send(tungstenite::Message::Binary(tungstenite::Bytes::from( serde_json::to_vec(&motd_message).unwrap(), @@ -684,6 +691,7 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { port: app.netplay.waiting_session.as_ref().unwrap().port, }), }; + let socket = app.netplay.socket.as_mut().unwrap(); socket .send(tungstenite::Message::Binary(tungstenite::Bytes::from( serde_json::to_vec(&begin_game).unwrap(), @@ -715,6 +723,7 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { }), }; app.netplay.chat_message.clear(); + let socket = app.netplay.socket.as_mut().unwrap(); socket .send(tungstenite::Message::Binary(tungstenite::Bytes::from( serde_json::to_vec(&send_chat).unwrap(), @@ -724,6 +733,7 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { } if app.netplay.socket_waiting { + let socket = app.netplay.socket.as_mut().unwrap(); let data = socket.read(); if data.is_ok() { let message: NetplayMessage = @@ -748,6 +758,8 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { } } app.netplay.player_number = player as u8; + socket.close(None).unwrap(); + while socket.read().is_ok() {} gui::open_rom(app, ctx); app.netplay = Default::default(); return; @@ -835,6 +847,9 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { } ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { if ui.button("Close").clicked() { + let socket = app.netplay.socket.as_mut().unwrap(); + socket.close(None).unwrap(); + while socket.read().is_ok() {} app.netplay = Default::default(); }; }); From bda2266d7407a12b46baa3f22e6fe5cf027ef581 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 22 Jan 2025 21:47:38 +0100 Subject: [PATCH 0226/1117] fix potential crash --- src/ui/gui/gui_netplay.rs | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index b0ea54b..1d55655 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -347,9 +347,10 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { if ui.button("Close").clicked() { - let socket = app.netplay.socket.as_mut().unwrap(); - socket.close(None).unwrap(); - while socket.read().is_ok() {} + if let Some(socket) = app.netplay.socket.as_mut() { + socket.close(None).unwrap(); + while socket.read().is_ok() {} + } app.netplay = Default::default(); }; }) @@ -545,9 +546,10 @@ pub fn netplay_join(app: &mut GopherEguiApp, ctx: &egui::Context) { ); ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { if ui.button("Close").clicked() { - let socket = app.netplay.socket.as_mut().unwrap(); - socket.close(None).unwrap(); - while socket.read().is_ok() {} + if let Some(socket) = app.netplay.socket.as_mut() { + socket.close(None).unwrap(); + while socket.read().is_ok() {} + } app.netplay = Default::default(); }; if app.netplay.join_rom_label.is_empty() { @@ -847,9 +849,10 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { } ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { if ui.button("Close").clicked() { - let socket = app.netplay.socket.as_mut().unwrap(); - socket.close(None).unwrap(); - while socket.read().is_ok() {} + if let Some(socket) = app.netplay.socket.as_mut() { + socket.close(None).unwrap(); + while socket.read().is_ok() {} + } app.netplay = Default::default(); }; }); From 040ca493c8b3b15770471dfc2be839f8388c6f0d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 22 Jan 2025 22:00:06 +0100 Subject: [PATCH 0227/1117] Update README.md --- README.md | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 81b1ea7..8e472e6 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # gopher64 +(gopher64 also has a GUI that can be launched by just running the executable) ``` Usage: gopher64 [OPTIONS] [GAME] @@ -11,6 +12,8 @@ Options: -c, --configure-input-profile Create a new input profile (keyboard/gamepad mappings). + -u, --use-dinput + Use DirectInput when configuring a new input profile. -b, --bind-input-profile Must also specify --port. Used to bind a previously created profile to a port -l, --list-controllers @@ -19,6 +22,8 @@ Options: Must also specify --port. Used to assign a controller listed in --list-controllers to a port -p, --port Valid values: 1-4. To be used alongside --bind-input-profile and --assign-controller + -z, --clear-input-bindings + Clear all input profile bindings and controller assignments -h, --help Print help -V, --version @@ -28,6 +33,18 @@ Options: There is no dedicated server at this point, but there is a #gopher64 channel on the simple64 server: https://discord.gg/R2cz7S94vD +## controls + +Keys are mapped according to mupen64plus defaults: https://mupen64plus.org/wiki/index.php/KeyboardSetup#2._Default_Key_Mappings_for_SDL-Input_Plugin. Xbox-style controllers also have a default mapping applied. + +You can create you own mappings by running `./gopher64 --configure-input-profile my_profile`. You then bind that profile to a port: `./gopher64 --bind-input-profile my_profile --port 1` + +In order to use a controller (for example, an Xbox controller), run `./gopher64 --list-controllers` to get a list of attached controllers, and then assign it by doing `./gopher64 --assign-controller --port 1` + +## portable mode + +If you would like to keep all the game data in the same folder as executable, you just need to create a file called "portable.txt" in the same directory as the executable. + ## goals 1. Performance. I want to be able to use this emulator on my laptop. @@ -42,18 +59,6 @@ There is no dedicated server at this point, but there is a #gopher64 channel on 4. `cargo build --release` 5. `./target/release/gopher64 /path/to/rom.z64` -## controls - -Keys are mapped according to mupen64plus defaults: https://mupen64plus.org/wiki/index.php/KeyboardSetup#2._Default_Key_Mappings_for_SDL-Input_Plugin. Xbox-style controllers also have a default mapping applied. - -You can create you own mappings by running `./gopher64 --configure-input-profile my_profile`. You then bind that profile to a port: `./gopher64 --bind-input-profile my_profile --port 1` - -In order to use a controller (for example, an Xbox controller), run `./gopher64 --list-controllers` to get a list of attached controllers, and then assign it by doing `./gopher64 --assign-controller --port 1` - -## portable mode - -If you would like to keep all the game data in the same folder as executable, you just need to create a file called "portable.txt" in the same directory as the executable. - ## contributing I am very open to contributions! Please reach out to me via a GitHub issue, or via discord (loganmc10) before doing substantial work on a PR. From 2c0710a44fc9e9bb7c0c921bcbe5bfbd9f816914 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 22 Jan 2025 22:12:39 +0100 Subject: [PATCH 0228/1117] Bump to 0.1.21 (#170) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index c94f1e2..419e795 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.20" +version = "0.1.21" edition = "2021" rust-version = "1.82" From 7d805ac69bfad372b0dbceeaa16a4254f05551ee Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 23 Jan 2025 09:47:00 +0100 Subject: [PATCH 0229/1117] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 8e472e6..7866a56 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,10 @@ You can create you own mappings by running `./gopher64 --configure-input-profile In order to use a controller (for example, an Xbox controller), run `./gopher64 --list-controllers` to get a list of attached controllers, and then assign it by doing `./gopher64 --assign-controller --port 1` +## netplay + +Gopher64 supports netplay (online play with others). It has a few public netplay servers. If you are interested in running a public netplay server, please let me know (open an issue or discussion, or contact me on Discord). You can also run the server (https://github.com/simple64/simple64-netplay-server) yourself on a LAN. + ## portable mode If you would like to keep all the game data in the same folder as executable, you just need to create a file called "portable.txt" in the same directory as the executable. From 8366ab0cadf6ba90e911a20264c74108ddb8956d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 23 Jan 2025 13:00:34 +0100 Subject: [PATCH 0230/1117] Netplay code improvements (#171) * better socket close code * Set TOS value on packets * better game name parsing --- Cargo.toml | 1 + src/netplay.rs | 4 ++ src/ui/gui/gui_netplay.rs | 96 +++++++++++++++++++++------------------ 3 files changed, 57 insertions(+), 44 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 419e795..56c6671 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,6 +24,7 @@ encoding_rs = "0.8" mimalloc = "0.1" regex = "1.11" tungstenite = "0.26" +socket2 = "0.5" clap = { version = "4.4", features = ["derive"] } [dependencies.reqwest] diff --git a/src/netplay.rs b/src/netplay.rs index 050de35..cda235e 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -18,6 +18,8 @@ const TCP_REGISTER_PLAYER: u8 = 5; const TCP_GET_REGISTRATION: u8 = 6; const TCP_DISCONNECT_NOTICE: u8 = 7; +const CS4: u32 = 32; + pub struct Netplay { udp_socket: std::net::UdpSocket, tcp_stream: std::net::TcpStream, @@ -226,6 +228,8 @@ pub fn init( std::net::UdpSocket::bind((std::net::Ipv6Addr::UNSPECIFIED, 0)) .expect("couldn't bind to address") }; + let socket_ref = socket2::SockRef::from(&udp_socket); + socket_ref.set_tos(CS4 << 2).unwrap(); udp_socket.connect(peer_addr).unwrap(); udp_socket.set_nonblocking(true).unwrap(); diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index 1d55655..99f2f41 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -193,25 +193,7 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { let file = task.await; if let Some(file) = file { - let rom_contents = device::get_rom_contents(file.path()); - if !rom_contents.is_empty() { - let hash = device::cart_rom::calculate_hash(&rom_contents); - let game_name = std::str::from_utf8(&rom_contents[0x20..0x20 + 0x14]) - .unwrap() - .to_string(); - let _ = tx - .send((hash, game_name, file.file_name(), rom_contents)) - .await; - } else { - let _ = tx - .send(( - "".to_string(), - "".to_string(), - "Invalid ROM".to_string(), - vec![], - )) - .await; - } + parse_rom_file(file, tx).await } else { let _ = tx .send(( @@ -299,7 +281,7 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { } else { let now_utc = chrono::Utc::now().timestamp_millis().to_string(); let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); - let mut game_name = app.netplay.game_info.1.trim().to_string(); + let mut game_name = app.netplay.game_info.1.to_string(); if game_name.is_empty() { // If the ROM doesn't report a name, use the filename game_name = app.netplay.create_rom_label.clone(); @@ -349,7 +331,12 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { if ui.button("Close").clicked() { if let Some(socket) = app.netplay.socket.as_mut() { socket.close(None).unwrap(); - while socket.read().is_ok() {} + loop { + match socket.read() { + Err(tungstenite::Error::ConnectionClosed) => break, + _ => continue, + }; + } } app.netplay = Default::default(); }; @@ -409,6 +396,30 @@ fn get_sessions(app: &mut GopherEguiApp, ctx: &egui::Context) { } } +async fn parse_rom_file(file: rfd::FileHandle, tx: tokio::sync::mpsc::Sender) { + let rom_contents = device::get_rom_contents(file.path()); + if !rom_contents.is_empty() { + let hash = device::cart_rom::calculate_hash(&rom_contents); + let game_name = std::str::from_utf8(&rom_contents[0x20..0x20 + 0x14]) + .unwrap() + .trim() + .replace('\0', "") + .to_string(); + let _ = tx + .send((hash, game_name, file.file_name(), rom_contents)) + .await; + } else { + let _ = tx + .send(( + "".to_string(), + "".to_string(), + "Invalid ROM".to_string(), + vec![], + )) + .await; + } +} + pub fn netplay_join(app: &mut GopherEguiApp, ctx: &egui::Context) { if app.netplay.socket_waiting { let socket = app.netplay.socket.as_mut().unwrap(); @@ -548,7 +559,12 @@ pub fn netplay_join(app: &mut GopherEguiApp, ctx: &egui::Context) { if ui.button("Close").clicked() { if let Some(socket) = app.netplay.socket.as_mut() { socket.close(None).unwrap(); - while socket.read().is_ok() {} + loop { + match socket.read() { + Err(tungstenite::Error::ConnectionClosed) => break, + _ => continue, + }; + } } app.netplay = Default::default(); }; @@ -580,26 +596,7 @@ pub fn netplay_join(app: &mut GopherEguiApp, ctx: &egui::Context) { let file = task.await; if let Some(file) = file { - let rom_contents = device::get_rom_contents(file.path()); - if !rom_contents.is_empty() { - let hash = device::cart_rom::calculate_hash(&rom_contents); - let game_name = - std::str::from_utf8(&rom_contents[0x20..0x20 + 0x14]) - .unwrap() - .to_string(); - let _ = tx - .send((hash, game_name, file.file_name(), rom_contents)) - .await; - } else { - let _ = tx - .send(( - "".to_string(), - "".to_string(), - "Invalid ROM".to_string(), - vec![], - )) - .await; - } + parse_rom_file(file, tx).await } else { let _ = tx .send(( @@ -761,7 +758,13 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { } app.netplay.player_number = player as u8; socket.close(None).unwrap(); - while socket.read().is_ok() {} + loop { + match socket.read() { + Err(tungstenite::Error::ConnectionClosed) => break, + _ => continue, + }; + } + gui::open_rom(app, ctx); app.netplay = Default::default(); return; @@ -851,7 +854,12 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { if ui.button("Close").clicked() { if let Some(socket) = app.netplay.socket.as_mut() { socket.close(None).unwrap(); - while socket.read().is_ok() {} + loop { + match socket.read() { + Err(tungstenite::Error::ConnectionClosed) => break, + _ => continue, + }; + } } app.netplay = Default::default(); }; From 5436b8c0fec1be04bea4be15b5d35d8d698bd9e8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 23 Jan 2025 14:02:14 +0100 Subject: [PATCH 0231/1117] Slightly better rdram init (#172) * Slightly better rdram init * var --- src/device.rs | 2 ++ src/device/rdram.rs | 38 +++++++++++++++++++++++++++++++++----- src/device/ri.rs | 14 ++++++++------ 3 files changed, 43 insertions(+), 11 deletions(-) diff --git a/src/device.rs b/src/device.rs index abfd524..67b0ff5 100644 --- a/src/device.rs +++ b/src/device.rs @@ -323,6 +323,7 @@ impl Device { rdram: rdram::Rdram { mem: vec![], size: 0x800000, + regs: [[0; rdram::RDRAM_REGS_COUNT as usize]; 4], }, rsp: rsp_interface::Rsp { cpu: rsp_cpu::Cpu { @@ -403,6 +404,7 @@ impl Device { }, ri: ri::Ri { regs: [0; ri::RI_REGS_COUNT as usize], + ram_init: false, }, vi: vi::Vi { regs: [0; vi::VI_REGS_COUNT as usize], diff --git a/src/device/rdram.rs b/src/device/rdram.rs index 83bb125..25d7c2b 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -1,11 +1,24 @@ use crate::device; use std::alloc::{alloc_zeroed, Layout}; +//const RDRAM_CONFIG_REG: u32 = 0; +//const RDRAM_DEVICE_ID_REG: u32 = 1; +//const RDRAM_DELAY_REG: u32 = 2; +const RDRAM_MODE_REG: u32 = 3; +//const RDRAM_REF_INTERVAL_REG: u32 = 4; +//const RDRAM_REF_ROW_REG: u32 = 5; +//const RDRAM_RAS_INTERVAL_REG: u32 = 6; +//const RDRAM_MIN_INTERVAL_REG: u32 = 7; +//const RDRAM_ADDR_SELECT_REG: u32 = 8; +//const RDRAM_DEVICE_MANUF_REG: u32 = 9; +pub const RDRAM_REGS_COUNT: u32 = 10; + pub const RDRAM_MASK: usize = 0xFFFFFF; pub struct Rdram { pub mem: Vec, pub size: u32, + pub regs: [[u32; RDRAM_REGS_COUNT as usize]; 4], } pub fn read_mem_fast( @@ -56,16 +69,26 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 } pub fn read_regs( - _device: &mut device::Device, + device: &mut device::Device, address: u64, _access_size: device::memory::AccessSize, ) -> u32 { - println!("Warning: read from RDRAM reg {:#x}", address); - 0 + let chip_id = address >> 13 & 3; + let reg = (address & 0x3FF) >> 2; + match reg as u32 { + RDRAM_MODE_REG => device.pi.regs[reg as usize] ^ 0xc0c0c0c0, + _ => device.rdram.regs[chip_id as usize][reg as usize], + } } -pub fn write_regs(_device: &mut device::Device, _address: u64, _value: u32, _mask: u32) { - panic!("rdram write reg"); +pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { + let chip_id = address >> 13 & 3; + let reg = (address & 0x3FF) >> 2; + device::memory::masked_write_32( + &mut device.rdram.regs[chip_id as usize][reg as usize], + value, + mask, + ) } pub fn init(device: &mut device::Device) { @@ -79,6 +102,11 @@ pub fn init(device: &mut device::Device) { // hack, skip RDRAM initialization device.rdram.mem[device.cart.rdram_size_offset..device.cart.rdram_size_offset + 4] .copy_from_slice(&device.rdram.size.to_ne_bytes()); + + device.ri.regs[device::ri::RI_MODE_REG as usize] = 0x0e; + device.ri.regs[device::ri::RI_CONFIG_REG as usize] = 0x40; + device.ri.regs[device::ri::RI_SELECT_REG as usize] = 0x14; + device.ri.regs[device::ri::RI_REFRESH_REG as usize] = 0x00063634; } pub fn rdram_calculate_cycles(length: u64) -> u64 { diff --git a/src/device/ri.rs b/src/device/ri.rs index bfc1844..55ae22b 100644 --- a/src/device/ri.rs +++ b/src/device/ri.rs @@ -1,10 +1,10 @@ use crate::device; -//const RI_MODE_REG: u32 = 0; -//const RI_CONFIG_REG: u32 = 1; +pub const RI_MODE_REG: u32 = 0; +pub const RI_CONFIG_REG: u32 = 1; //const RI_CURRENT_LOAD_REG: u32 = 2; -const RI_SELECT_REG: u32 = 3; -//const RI_REFRESH_REG: u32 = 4; +pub const RI_SELECT_REG: u32 = 3; +pub const RI_REFRESH_REG: u32 = 4; //const RI_LATENCY_REG: u32 = 5; //const RI_ERROR_REG: u32 = 6; //const RI_WERROR_REG: u32 = 7; @@ -12,6 +12,7 @@ pub const RI_REGS_COUNT: u32 = 8; pub struct Ri { pub regs: [u32; RI_REGS_COUNT as usize], + pub ram_init: bool, } pub fn read_regs( @@ -19,8 +20,9 @@ pub fn read_regs( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { - if ((address & 0xFFFF) >> 2) as u32 == RI_SELECT_REG { - return 0x14; // hack, skip RDRAM initialization + if ((address & 0xFFFF) >> 2) as u32 == RI_SELECT_REG && !device.ri.ram_init { + device::cop0::add_cycles(device, device.cpu.clock_rate / 2); // hack, simulate RDRAM initialization + device.ri.ram_init = true; } device.ri.regs[((address & 0xFFFF) >> 2) as usize] } From dae67b7e8b957d7cd5cf8a05d5e47153d10cef8d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 23 Jan 2025 15:14:16 +0100 Subject: [PATCH 0232/1117] Netplay fix for buffer reporting (#173) --- src/netplay.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index cda235e..57cceca 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -105,15 +105,14 @@ pub fn get_input(device: &mut device::Device, channel: usize) -> (u32, bool) { let mut input = None; let timeout = std::time::Instant::now() + std::time::Duration::from_secs(10); - let mut request_timer = std::time::Instant::now() + std::time::Duration::from_millis(5); - request_input(netplay, channel); + let mut request_timer = std::time::Instant::now() - std::time::Duration::from_millis(5); while input.is_none() { + process_incoming(netplay); // we execute process_incoming before request_input so that we send an accurate buffer count if std::time::Instant::now() > request_timer { // sends a request packet every 5ms request_input(netplay, channel); request_timer = std::time::Instant::now() + std::time::Duration::from_millis(5); } - process_incoming(netplay); input = netplay.player_data[channel] .input_events .remove(&netplay.player_data[channel].count); From 8cbe1ca5b2260cec9d2a482dd8af3bf9130349e7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 23 Jan 2025 16:52:50 +0100 Subject: [PATCH 0233/1117] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7866a56..f643a9c 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ Options: ``` ## discord -There is no dedicated server at this point, but there is a #gopher64 channel on the simple64 server: https://discord.gg/R2cz7S94vD +https://discord.gg/9RGXq8W8JQ ## controls From fdf493bfc36aaaf3c286eab0b8a6d755f6620eed Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 23 Jan 2025 20:11:06 +0100 Subject: [PATCH 0234/1117] Bump to 0.1.22 (#174) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 56c6671..8ddd0dc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.21" +version = "0.1.22" edition = "2021" rust-version = "1.82" From 02c8661b4e22814f3c71c7faac5c3f639be6c1e9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 25 Jan 2025 11:25:54 +0100 Subject: [PATCH 0235/1117] Use SDL3 (#175) * Use SDL3 * more * more * more * source * more * destory * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * fix * fix * more * more * more * more * more * more * more --- .github/workflows/build.yml | 2 +- .github/workflows/lint.yml | 4 + Cargo.toml | 7 +- build.rs | 5 +- parallel-rdp/interface.cpp | 31 +- parallel-rdp/wsi_platform.cpp | 21 +- parallel-rdp/wsi_platform.hpp | 2 +- src/device.rs | 4 +- src/device/ai.rs | 1 + src/main.rs | 8 +- src/ui.rs | 68 ++-- src/ui/audio.rs | 156 +++++--- src/ui/config.rs | 6 +- src/ui/gui.rs | 73 ++-- src/ui/input.rs | 712 ++++++++++++++++++++-------------- src/ui/video.rs | 67 ++-- 16 files changed, 693 insertions(+), 474 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9ac0a7d..05394b1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -102,7 +102,7 @@ jobs: path: target/${{ matrix.target }}/release/gopher64 build-windows: - runs-on: windows-latest + runs-on: windows-2025 strategy: fail-fast: false matrix: diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 0ffe90d..4d7c98e 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -19,6 +19,10 @@ jobs: - uses: actions-rust-lang/setup-rust-toolchain@v1 with: components: clippy, rustfmt + - name: Install SDL2 + run: | + sudo apt-get update + sudo apt-get -y install libsdl2-dev - name: Rustfmt Check uses: actions-rust-lang/rustfmt@v1 - name: Lint diff --git a/Cargo.toml b/Cargo.toml index 8ddd0dc..e5de0e2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,7 @@ eframe = "0.30" sha2 = "0.10" rusttype = "0.9" tokio = { version = "1.43", features = ["rt-multi-thread", "macros"] } -sdl2-sys = "0.37" +sdl3-sys = { version = "0.4", features = ["build-from-source-static"] } spin_sleep = "1.3" encoding_rs = "0.8" mimalloc = "0.1" @@ -32,11 +32,6 @@ version = "0.12" default-features = false features = ["http2","rustls-tls","charset","json"] -[dependencies.sdl2] -version = "0.37" -default-features = false -features = ["static-link","bundled"] - [dependencies.rfd] version = "0.15" default-features = false diff --git a/build.rs b/build.rs index 05df125..1a8fab7 100644 --- a/build.rs +++ b/build.rs @@ -52,7 +52,10 @@ fn main() { .include("parallel-rdp/parallel-rdp-standalone/vulkan") .include("parallel-rdp/parallel-rdp-standalone/vulkan-headers/include") .include("parallel-rdp/parallel-rdp-standalone/util") - .includes(std::env::var("DEP_SDL2_INCLUDE")); + .include( + std::path::PathBuf::from(std::env::var("DEP_SDL3_OUT_DIR").to_owned().unwrap()) + .join("include"), + ); let os = std::env::var("CARGO_CFG_TARGET_OS").unwrap(); let arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap(); diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 4db181e..3b8acc9 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -129,28 +129,19 @@ static const unsigned cmd_len_lut[64] = { 1, }; -int sdl_event_filter(void *userdata, SDL_Event *event) +bool sdl_event_filter(void *userdata, SDL_Event *event) { - if (event->type == SDL_WINDOWEVENT) + if (event->type == SDL_EVENT_WINDOW_CLOSE_REQUESTED) { - switch (event->window.event) - { - case SDL_WINDOWEVENT_CLOSE: - emu_running = false; - break; - case SDL_WINDOWEVENT_RESIZED: - if (emu_running) - { - wsi_platform->do_resize(); - } - break; - default: - break; - } + emu_running = false; } - else if (fullscreen && event->type == SDL_KEYDOWN) + else if (event->type == SDL_EVENT_WINDOW_RESIZED && emu_running) { - switch (event->key.keysym.scancode) + wsi_platform->do_resize(); + } + else if (event->type == SDL_EVENT_KEY_DOWN && fullscreen) + { + switch (event->key.scancode) { case SDL_SCANCODE_ESCAPE: emu_running = false; @@ -394,8 +385,8 @@ uint64_t rdp_process_commands() do { offset &= 0xFF8; - cmd_data[2 * cmd_ptr + 0] = SDL_SwapBE32(*reinterpret_cast(gfx_info.DMEM + offset)); - cmd_data[2 * cmd_ptr + 1] = SDL_SwapBE32(*reinterpret_cast(gfx_info.DMEM + offset + 4)); + cmd_data[2 * cmd_ptr + 0] = SDL_Swap32BE(*reinterpret_cast(gfx_info.DMEM + offset)); + cmd_data[2 * cmd_ptr + 1] = SDL_Swap32BE(*reinterpret_cast(gfx_info.DMEM + offset + 4)); offset += sizeof(uint64_t); cmd_ptr++; } while (--length > 0); diff --git a/parallel-rdp/wsi_platform.cpp b/parallel-rdp/wsi_platform.cpp index e7d2377..7a91423 100644 --- a/parallel-rdp/wsi_platform.cpp +++ b/parallel-rdp/wsi_platform.cpp @@ -1,11 +1,11 @@ #include "wsi_platform.hpp" -#include +#include VkSurfaceKHR SDL_WSIPlatform::create_surface(VkInstance instance, VkPhysicalDevice gpu) { VkSurfaceKHR surface = nullptr; - SDL_bool result = SDL_Vulkan_CreateSurface(window, instance, &surface); - if (result != SDL_TRUE) + bool result = SDL_Vulkan_CreateSurface(window, instance, NULL, &surface); + if (result != true) { printf("Error creating surface\n"); } @@ -14,18 +14,23 @@ VkSurfaceKHR SDL_WSIPlatform::create_surface(VkInstance instance, VkPhysicalDevi void SDL_WSIPlatform::destroy_surface(VkInstance instance, VkSurfaceKHR surface) { + SDL_Vulkan_DestroySurface(instance, surface, NULL); } std::vector SDL_WSIPlatform::get_instance_extensions() { unsigned int extensionCount = 0; - SDL_Vulkan_GetInstanceExtensions(window, &extensionCount, nullptr); - std::vector extensionNames(extensionCount); - SDL_bool result = SDL_Vulkan_GetInstanceExtensions(window, &extensionCount, extensionNames.data()); - if (result != SDL_TRUE) + char const *const *extensions = SDL_Vulkan_GetInstanceExtensions(&extensionCount); + if (extensions == NULL) { - printf("Error creating surface\n"); + printf("Error getting instance extensions\n"); + } + + std::vector extensionNames; + for (int i = 0; i < extensionCount; ++i) + { + extensionNames.push_back(extensions[i]); } return extensionNames; } diff --git a/parallel-rdp/wsi_platform.hpp b/parallel-rdp/wsi_platform.hpp index c8dbdf8..ddc606a 100644 --- a/parallel-rdp/wsi_platform.hpp +++ b/parallel-rdp/wsi_platform.hpp @@ -1,7 +1,7 @@ #pragma once #include "wsi.hpp" -#include +#include class SDL_WSIPlatform : public Vulkan::WSIPlatform { diff --git a/src/device.rs b/src/device.rs index 67b0ff5..b56589d 100644 --- a/src/device.rs +++ b/src/device.rs @@ -79,7 +79,9 @@ pub fn run_game( cpu::run(device); - ui::video::close(); + ui::input::close(&mut device.ui); + ui::video::close(&device.ui); + ui::audio::close(&mut device.ui); ui::storage::write_saves(&device.ui, &device.netplay); } diff --git a/src/device/ai.rs b/src/device/ai.rs index 08bb398..bb62d70 100644 --- a/src/device/ai.rs +++ b/src/device/ai.rs @@ -144,6 +144,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u AI_DACRATE_REG => { if device.ai.regs[reg as usize] != value & mask { let frequency = device.vi.clock / (1 + (value & mask)) as u64; + ui::audio::close(&mut device.ui); ui::audio::init(&mut device.ui, frequency) } device::memory::masked_write_32(&mut device.ai.regs[reg as usize], value, mask) diff --git a/src/main.rs b/src/main.rs index 1d2729e..9df8fe7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,6 +7,7 @@ mod device; mod netplay; mod ui; use clap::Parser; +use ui::gui; /// N64 emulator #[derive(Parser, Debug)] @@ -47,7 +48,7 @@ struct Args { value_name = "CONTROLLER_NUMBER", help = "Must also specify --port. Used to assign a controller listed in --list-controllers to a port" )] - assign_controller: Option, + assign_controller: Option, #[arg( short, long, @@ -119,7 +120,10 @@ async fn main() { } } if args.list_controllers { - ui::input::list_controllers(&device.ui); + let controllers = gui::get_controller_names(); + for (i, controller) in controllers.iter().enumerate() { + println!("Controller {}: {}", i, controller); + } return; } if args.assign_controller.is_some() { diff --git a/src/ui.rs b/src/ui.rs index 9c93638..15a75b9 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -7,6 +7,7 @@ pub mod video; pub mod vru; pub struct Ui { + pub keyboard_state: *const bool, pub controllers: [input::Controllers; 4], pub config_file_path: std::path::PathBuf, pub config: config::Config, @@ -15,19 +16,19 @@ pub struct Ui { pub game_hash: String, pub paths: storage::Paths, pub saves: storage::Saves, - pub sdl_context: Option, - pub video_subsystem: Option, - pub audio_subsystem: Option, - pub pak_audio: Option, - pub joystick_subsystem: Option, - #[allow(dead_code)] - pub controller_subsystem: Option, - pub window: Option, - pub audio_device: Option>, + pub pak_audio: audio::PakAudio, + pub window: *mut sdl3_sys::video::SDL_Window, + pub audio_stream: *mut sdl3_sys::audio::SDL_AudioStream, + pub pak_audio_stream: *mut sdl3_sys::audio::SDL_AudioStream, + pub audio_freq: f64, + pub audio_device: u32, } impl Drop for Ui { fn drop(&mut self) { + unsafe { + sdl3_sys::init::SDL_Quit(); + } write_config(self); } } @@ -37,13 +38,18 @@ fn write_config(ui: &Ui) { serde_json::to_writer_pretty(f, &ui.config).unwrap(); } +pub fn sdl_init(flag: sdl3_sys::init::SDL_InitFlags) { + unsafe { + let init = sdl3_sys::init::SDL_WasInit(0); + if init & flag == 0 && !sdl3_sys::init::SDL_InitSubSystem(flag) { + panic!("Could not initialize SDL subsystem: {}", flag); + } + } +} + impl Ui { pub fn new(config_dir: std::path::PathBuf) -> Ui { - let sdl_context = sdl2::init().unwrap(); - let video_subsystem = sdl_context.video().unwrap(); - let audio_subsystem = sdl_context.audio().unwrap(); - let joystick_subsystem = sdl_context.joystick().unwrap(); - let controller_subsystem = sdl_context.game_controller().unwrap(); + sdl_init(sdl3_sys::init::SDL_INIT_GAMEPAD); let config_file_path = config_dir.join("config.json"); let config_file = std::fs::read(config_file_path.clone()); @@ -58,26 +64,27 @@ impl Ui { Ui { controllers: [ input::Controllers { - game_controller: None, - joystick: None, + game_controller: std::ptr::null_mut(), + joystick: std::ptr::null_mut(), rumble: false, }, input::Controllers { - game_controller: None, - joystick: None, + game_controller: std::ptr::null_mut(), + joystick: std::ptr::null_mut(), rumble: false, }, input::Controllers { - game_controller: None, - joystick: None, + game_controller: std::ptr::null_mut(), + joystick: std::ptr::null_mut(), rumble: false, }, input::Controllers { - game_controller: None, - joystick: None, + game_controller: std::ptr::null_mut(), + joystick: std::ptr::null_mut(), rumble: false, }, ], + keyboard_state: std::ptr::null_mut(), config_file_path, config: config_map, save_type: vec![], @@ -97,14 +104,15 @@ impl Ui { mempak: (Vec::new(), false), romsave: (serde_json::Map::new(), false), }, - sdl_context: Some(sdl_context), - video_subsystem: Some(video_subsystem), - audio_subsystem: Some(audio_subsystem), - joystick_subsystem: Some(joystick_subsystem), - controller_subsystem: Some(controller_subsystem), - window: None, - audio_device: None, - pak_audio: None, + pak_audio: audio::PakAudio { + mempak: include_bytes!("../data/mempak.wav").to_vec(), + rumblepak: include_bytes!("../data/rumblepak.wav").to_vec(), + }, + window: std::ptr::null_mut(), + audio_stream: std::ptr::null_mut(), + pak_audio_stream: std::ptr::null_mut(), + audio_freq: 0.0, + audio_device: 0, } } } diff --git a/src/ui/audio.rs b/src/ui/audio.rs index a998b1d..f0fbe19 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -2,74 +2,101 @@ use crate::device; use crate::ui; pub struct PakAudio { - mempak: Vec, - rumblepak: Vec, + pub mempak: Vec, + pub rumblepak: Vec, } pub fn init(ui: &mut ui::Ui, frequency: u64) { - let desired_spec = sdl2::audio::AudioSpecDesired { - freq: Some(frequency as i32), - channels: Some(2), - samples: None, + ui::sdl_init(sdl3_sys::init::SDL_INIT_AUDIO); + + let audio_spec = sdl3_sys::audio::SDL_AudioSpec { + format: sdl3_sys::audio::SDL_AUDIO_S16LE, + freq: frequency as i32, + channels: 2, }; - ui.audio_device = Some( - ui.audio_subsystem - .as_ref() - .unwrap() - .open_queue::(None, &desired_spec) - .unwrap(), - ); - let audio_device = ui.audio_device.as_ref().unwrap(); - audio_device.resume(); - - let mempak_audio = Box::new(sdl2::audio::AudioSpecWAV::load_wav_rw( - &mut sdl2::rwops::RWops::from_bytes(include_bytes!("../../data/mempak.wav")) - .expect("Could not mempak WAV file"), - )) - .expect("Could not load mempak WAV file"); - let rumblepak_audio = Box::new( - sdl2::audio::AudioSpecWAV::load_wav_rw( - &mut sdl2::rwops::RWops::from_bytes(include_bytes!("../../data/rumblepak.wav")) - .expect("Could not load rumblepak WAV file"), + ui.audio_device = unsafe { + sdl3_sys::audio::SDL_OpenAudioDevice( + sdl3_sys::audio::SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, + &audio_spec, ) - .expect("Could not load rumblepak WAV file"), - ); + }; + if ui.audio_device == 0 { + panic!("Could not open audio device"); + } - let cvt = sdl2::audio::AudioCVT::new( - mempak_audio.format, - mempak_audio.channels, - mempak_audio.freq, - audio_device.spec().format, - audio_device.spec().channels, - audio_device.spec().freq, - ) - .expect("Could not create AudioCVT"); + let mut dst = Default::default(); + if !unsafe { + sdl3_sys::audio::SDL_GetAudioDeviceFormat(ui.audio_device, &mut dst, std::ptr::null_mut()) + } { + panic!("Could not get audio device format"); + } - ui.pak_audio = Some(PakAudio { - mempak: cvt.convert(mempak_audio.buffer().to_vec()), - rumblepak: cvt.convert(rumblepak_audio.buffer().to_vec()), - }); + ui.audio_stream = unsafe { sdl3_sys::audio::SDL_CreateAudioStream(&audio_spec, &dst) }; + if ui.audio_stream.is_null() { + return; + } + if !unsafe { sdl3_sys::audio::SDL_BindAudioStream(ui.audio_device, ui.audio_stream) } { + panic!("Could not bind audio stream"); + } + + let wav_audio_spec = sdl3_sys::audio::SDL_AudioSpec { + format: sdl3_sys::audio::SDL_AUDIO_S16LE, + freq: 24000, + channels: 1, + }; + + ui.pak_audio_stream = unsafe { sdl3_sys::audio::SDL_CreateAudioStream(&wav_audio_spec, &dst) }; + if !unsafe { sdl3_sys::audio::SDL_BindAudioStream(ui.audio_device, ui.pak_audio_stream) } { + panic!("Could not bind audio stream"); + } + + ui.audio_freq = audio_spec.freq as f64; +} + +pub fn close(ui: &mut ui::Ui) { + unsafe { + if !ui.audio_stream.is_null() { + sdl3_sys::audio::SDL_DestroyAudioStream(ui.audio_stream); + ui.audio_stream = std::ptr::null_mut(); + } + if !ui.pak_audio_stream.is_null() { + sdl3_sys::audio::SDL_DestroyAudioStream(ui.pak_audio_stream); + ui.pak_audio_stream = std::ptr::null_mut(); + } + sdl3_sys::audio::SDL_CloseAudioDevice(ui.audio_device); + ui.audio_device = 0; + } } pub fn play_pak_switch(ui: &mut ui::Ui, pak: device::controller::PakType) { + if ui.pak_audio_stream.is_null() { + return; + } + let sound; if pak == device::controller::PakType::RumblePak { - sound = &ui.pak_audio.as_ref().unwrap().rumblepak; + sound = &ui.pak_audio.rumblepak; } else if pak == device::controller::PakType::MemPak { - sound = &ui.pak_audio.as_ref().unwrap().mempak; + sound = &ui.pak_audio.mempak; } else { return; } - let audio_device = ui.audio_device.as_ref().unwrap(); - let i16_buffer: Vec = sound - .chunks_exact(2) - .map(|chunk| i16::from_le_bytes([chunk[0], chunk[1]])) - .collect(); - audio_device.queue_audio(&i16_buffer).unwrap(); + if !unsafe { + sdl3_sys::audio::SDL_PutAudioStreamData( + ui.pak_audio_stream, + sound.as_ptr() as *const std::ffi::c_void, + sound.len() as i32, + ) + } { + panic!("Could not play audio"); + } } pub fn play_audio(device: &mut device::Device, dram_addr: usize, length: u64) { - let audio_device = device.ui.audio_device.as_ref().unwrap(); + if device.ui.audio_stream.is_null() { + return; + } + let mut primary_buffer: Vec = vec![0; length as usize / 2]; let mut i = 0; while i < length as usize / 2 { @@ -83,16 +110,33 @@ pub fn play_audio(device: &mut device::Device, dram_addr: usize, length: u64) { i += 2; } - let audio_queued = audio_device.size() as f64; - let acceptable_latency = (audio_device.spec().freq as f64 * 0.2) * 4.0; - let min_latency = (audio_device.spec().freq as f64 * 0.02) * 4.0; + let audio_queued = + unsafe { sdl3_sys::audio::SDL_GetAudioStreamQueued(device.ui.audio_stream) } as f64; + let acceptable_latency = (device.ui.audio_freq * 0.2) * 4.0; + let min_latency = (device.ui.audio_freq * 0.02) * 4.0; if audio_queued < min_latency { - let silence_buffer: Vec = vec![0; ((min_latency - audio_queued) * 2.0) as usize & !1]; - audio_device.queue_audio(&silence_buffer).unwrap(); + let silence_buffer: Vec = vec![0; (min_latency - audio_queued) as usize & !3]; + if !unsafe { + sdl3_sys::audio::SDL_PutAudioStreamData( + device.ui.audio_stream, + silence_buffer.as_ptr() as *const std::ffi::c_void, + silence_buffer.len() as i32, + ) + } { + panic!("Could not play audio"); + } } - if audio_queued < acceptable_latency { - audio_device.queue_audio(&primary_buffer).unwrap(); + if audio_queued < acceptable_latency + && !unsafe { + sdl3_sys::audio::SDL_PutAudioStreamData( + device.ui.audio_stream, + primary_buffer.as_ptr() as *const std::ffi::c_void, + primary_buffer.len() as i32 * 2, + ) + } + { + panic!("Could not play audio"); } } diff --git a/src/ui/config.rs b/src/ui/config.rs index 2711e03..5864959 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -5,9 +5,9 @@ pub struct InputProfile { pub keys: [(bool, i32); ui::input::PROFILE_SIZE], pub controller_buttons: [(bool, i32); ui::input::PROFILE_SIZE], pub controller_axis: [(bool, i32, i16); ui::input::PROFILE_SIZE], - pub joystick_buttons: [(bool, u32); ui::input::PROFILE_SIZE], - pub joystick_hat: [(bool, u32, u8); ui::input::PROFILE_SIZE], - pub joystick_axis: [(bool, u32, i16); ui::input::PROFILE_SIZE], + pub joystick_buttons: [(bool, i32); ui::input::PROFILE_SIZE], + pub joystick_hat: [(bool, i32, u8); ui::input::PROFILE_SIZE], + pub joystick_axis: [(bool, i32, i16); ui::input::PROFILE_SIZE], pub dinput: bool, } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 61fbb3e..dee758a 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -10,7 +10,7 @@ pub struct GopherEguiApp { data_dir: std::path::PathBuf, configure_profile: bool, profile_name: String, - controllers: Vec, + controller_names: Vec, selected_controller: [i32; 4], selected_profile: [String; 4], input_profiles: Vec, @@ -46,17 +46,46 @@ fn get_input_profiles(game_ui: &ui::Ui) -> Vec { profiles } -fn get_controllers(game_ui: &ui::Ui) -> Vec { +pub fn get_controller_names() -> Vec { let mut controllers: Vec = vec![]; - let joystick_subsystem = game_ui.joystick_subsystem.as_ref().unwrap(); - let num_joysticks = joystick_subsystem.num_joysticks().unwrap(); - for i in 0..num_joysticks { - controllers.push(joystick_subsystem.name_for_index(i).unwrap()); + let mut joystick_count = 0; + let joysticks = unsafe { sdl3_sys::joystick::SDL_GetJoysticks(&mut joystick_count) }; + if !joysticks.is_null() { + for offset in 0..joystick_count as isize { + let name = unsafe { + std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickNameForID( + *(joysticks.offset(offset)), + )) + }; + controllers.push(name.to_string_lossy().to_string()); + } + unsafe { sdl3_sys::stdinc::SDL_free(joysticks as *mut std::ffi::c_void) }; } controllers } +pub fn get_controller_paths() -> Vec { + let mut controller_paths: Vec = vec![]; + + let mut joystick_count = 0; + let joysticks = unsafe { sdl3_sys::joystick::SDL_GetJoysticks(&mut joystick_count) }; + if !joysticks.is_null() { + for offset in 0..joystick_count as isize { + let path = unsafe { + std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickPathForID( + *(joysticks.offset(offset)), + )) + .to_string_lossy() + .to_string() + }; + controller_paths.push(path); + } + unsafe { sdl3_sys::stdinc::SDL_free(joysticks as *mut std::ffi::c_void) }; + } + controller_paths +} + impl GopherEguiApp { pub fn new( cc: &eframe::CreationContext<'_>, @@ -66,12 +95,8 @@ impl GopherEguiApp { ) -> GopherEguiApp { add_japanese_font(&cc.egui_ctx); let game_ui = ui::Ui::new(config_dir.clone()); - let joystick_subsystem = game_ui.joystick_subsystem.as_ref().unwrap(); - let num_joysticks = joystick_subsystem.num_joysticks().unwrap(); - let mut guids: Vec = vec![]; - for i in 0..num_joysticks { - guids.push(joystick_subsystem.device_guid(i).unwrap().to_string()); - } + let controller_paths = get_controller_paths(); + let mut selected_controller = [-1, -1, -1, -1]; for (pos, item) in game_ui .config @@ -81,9 +106,9 @@ impl GopherEguiApp { .enumerate() { if item.is_some() { - for (guid_pos, guid) in guids.iter().enumerate() { - if item.as_deref().unwrap() == *guid { - selected_controller[pos] = guid_pos as i32; + for (path_pos, path) in controller_paths.iter().enumerate() { + if item.as_deref().unwrap() == *path { + selected_controller[pos] = path_pos as i32; break; } } @@ -97,7 +122,7 @@ impl GopherEguiApp { profile_name: "".to_string(), selected_profile: game_ui.config.input.input_profile_binding.clone(), selected_controller, - controllers: get_controllers(&game_ui), + controller_names: get_controller_names(), input_profiles: get_input_profiles(&game_ui), controller_enabled: game_ui.config.input.controller_enabled, upscale: game_ui.config.video.upscale, @@ -116,15 +141,11 @@ impl GopherEguiApp { } fn save_config(game_ui: &mut ui::Ui, save_config_items: SaveConfig) { - let joystick_subsystem = game_ui.joystick_subsystem.as_ref().unwrap(); + let controller_paths = get_controller_paths(); for (pos, item) in save_config_items.selected_controller.iter().enumerate() { if *item != -1 { - game_ui.config.input.controller_assignment[pos] = Some( - joystick_subsystem - .device_guid(*item as u32) - .unwrap() - .to_string(), - ); + game_ui.config.input.controller_assignment[pos] = + Some(controller_paths[*item as usize].clone()); } else { game_ui.config.input.controller_assignment[pos] = None } @@ -437,7 +458,7 @@ impl eframe::App for GopherEguiApp { let controller_text = if self.selected_controller[i] == -1 { "None".to_string() } else { - self.controllers[self.selected_controller[i] as usize].clone() + self.controller_names[self.selected_controller[i] as usize].clone() }; egui::ComboBox::from_id_salt(format!("controller-combo-{}", i)) .selected_text(controller_text) @@ -447,11 +468,11 @@ impl eframe::App for GopherEguiApp { -1, "None".to_string(), ); - for j in 0..self.controllers.len() { + for j in 0..self.controller_names.len() { ui.selectable_value( &mut self.selected_controller[i], j as i32, - self.controllers[j].clone(), + self.controller_names[j].clone(), ); } }); diff --git a/src/ui/input.rs b/src/ui/input.rs index a01064d..0846820 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -30,8 +30,8 @@ const MAX_AXIS_VALUE: f64 = 85.0; pub struct Controllers { pub rumble: bool, - pub game_controller: Option, - pub joystick: Option, + pub game_controller: *mut sdl3_sys::gamepad::SDL_Gamepad, + pub joystick: *mut sdl3_sys::joystick::SDL_Joystick, } fn bound_axis(x: &mut f64, y: &mut f64) { @@ -50,30 +50,38 @@ fn bound_axis(x: &mut f64, y: &mut f64) { fn set_axis_from_joystick( profile: &ui::config::InputProfile, - joystick: &sdl2::joystick::Joystick, + joystick: *mut sdl3_sys::joystick::SDL_Joystick, ) -> (f64, f64) { let mut x = 0.0; let mut y = 0.0; if profile.joystick_axis[AXIS_LEFT].0 { - let axis_position = joystick.axis(profile.joystick_axis[AXIS_LEFT].1).unwrap(); + let axis_position = unsafe { + sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_LEFT].1) + }; if axis_position as isize * profile.joystick_axis[AXIS_LEFT].2 as isize > 0 { x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; } } if profile.joystick_axis[AXIS_RIGHT].0 { - let axis_position = joystick.axis(profile.joystick_axis[AXIS_RIGHT].1).unwrap(); + let axis_position = unsafe { + sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_RIGHT].1) + }; if axis_position as isize * profile.joystick_axis[AXIS_RIGHT].2 as isize > 0 { x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; } } if profile.joystick_axis[AXIS_DOWN].0 { - let axis_position = joystick.axis(profile.joystick_axis[AXIS_DOWN].1).unwrap(); + let axis_position = unsafe { + sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_DOWN].1) + }; if axis_position as isize * profile.joystick_axis[AXIS_DOWN].2 as isize > 0 { y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); } } if profile.joystick_axis[AXIS_UP].0 { - let axis_position = joystick.axis(profile.joystick_axis[AXIS_UP].1).unwrap(); + let axis_position = unsafe { + sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_UP].1) + }; if axis_position as isize * profile.joystick_axis[AXIS_UP].2 as isize > 0 { y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); } @@ -81,68 +89,85 @@ fn set_axis_from_joystick( (x, y) } -fn get_axis_from_i32(axis: i32) -> sdl2::controller::Axis { +fn get_axis_from_i32(axis: i32) -> sdl3_sys::gamepad::SDL_GamepadAxis { match axis { - 0 => sdl2::controller::Axis::LeftX, - 1 => sdl2::controller::Axis::LeftY, - 2 => sdl2::controller::Axis::RightX, - 3 => sdl2::controller::Axis::RightY, - 4 => sdl2::controller::Axis::TriggerLeft, - 5 => sdl2::controller::Axis::TriggerRight, + 0 => sdl3_sys::gamepad::SDL_GamepadAxis::LEFTX, + 1 => sdl3_sys::gamepad::SDL_GamepadAxis::LEFTY, + 2 => sdl3_sys::gamepad::SDL_GamepadAxis::RIGHTX, + 3 => sdl3_sys::gamepad::SDL_GamepadAxis::RIGHTY, + 4 => sdl3_sys::gamepad::SDL_GamepadAxis::LEFT_TRIGGER, + 5 => sdl3_sys::gamepad::SDL_GamepadAxis::RIGHT_TRIGGER, _ => panic!("Invalid axis"), } } -fn get_button_from_i32(button: i32) -> sdl2::controller::Button { +fn get_button_from_i32(button: i32) -> sdl3_sys::gamepad::SDL_GamepadButton { match button { - 0 => sdl2::controller::Button::A, - 1 => sdl2::controller::Button::B, - 2 => sdl2::controller::Button::X, - 3 => sdl2::controller::Button::Y, - 4 => sdl2::controller::Button::Back, - 5 => sdl2::controller::Button::Guide, - 6 => sdl2::controller::Button::Start, - 7 => sdl2::controller::Button::LeftStick, - 8 => sdl2::controller::Button::RightStick, - 9 => sdl2::controller::Button::LeftShoulder, - 10 => sdl2::controller::Button::RightShoulder, - 11 => sdl2::controller::Button::DPadUp, - 12 => sdl2::controller::Button::DPadDown, - 13 => sdl2::controller::Button::DPadLeft, - 14 => sdl2::controller::Button::DPadRight, + 0 => sdl3_sys::gamepad::SDL_GamepadButton::SOUTH, + 1 => sdl3_sys::gamepad::SDL_GamepadButton::EAST, + 2 => sdl3_sys::gamepad::SDL_GamepadButton::WEST, + 3 => sdl3_sys::gamepad::SDL_GamepadButton::NORTH, + 4 => sdl3_sys::gamepad::SDL_GamepadButton::BACK, + 5 => sdl3_sys::gamepad::SDL_GamepadButton::GUIDE, + 6 => sdl3_sys::gamepad::SDL_GamepadButton::START, + 7 => sdl3_sys::gamepad::SDL_GamepadButton::LEFT_STICK, + 8 => sdl3_sys::gamepad::SDL_GamepadButton::RIGHT_STICK, + 9 => sdl3_sys::gamepad::SDL_GamepadButton::LEFT_SHOULDER, + 10 => sdl3_sys::gamepad::SDL_GamepadButton::RIGHT_SHOULDER, + 11 => sdl3_sys::gamepad::SDL_GamepadButton::DPAD_UP, + 12 => sdl3_sys::gamepad::SDL_GamepadButton::DPAD_DOWN, + 13 => sdl3_sys::gamepad::SDL_GamepadButton::DPAD_LEFT, + 14 => sdl3_sys::gamepad::SDL_GamepadButton::DPAD_RIGHT, _ => panic!("Invalid button"), } } fn set_axis_from_controller( profile: &ui::config::InputProfile, - controller: &sdl2::controller::GameController, + controller: *mut sdl3_sys::gamepad::SDL_Gamepad, ) -> (f64, f64) { let mut x = 0.0; let mut y = 0.0; if profile.controller_axis[AXIS_LEFT].0 { - let axis_position = - controller.axis(get_axis_from_i32(profile.controller_axis[AXIS_LEFT].1)); + let axis_position = unsafe { + sdl3_sys::gamepad::SDL_GetGamepadAxis( + controller, + get_axis_from_i32(profile.controller_axis[AXIS_LEFT].1), + ) + }; if axis_position as isize * profile.controller_axis[AXIS_LEFT].2 as isize > 0 { x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; } } if profile.controller_axis[AXIS_RIGHT].0 { - let axis_position = - controller.axis(get_axis_from_i32(profile.controller_axis[AXIS_RIGHT].1)); + let axis_position = unsafe { + sdl3_sys::gamepad::SDL_GetGamepadAxis( + controller, + get_axis_from_i32(profile.controller_axis[AXIS_RIGHT].1), + ) + }; if axis_position as isize * profile.controller_axis[AXIS_RIGHT].2 as isize > 0 { x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; } } if profile.controller_axis[AXIS_DOWN].0 { - let axis_position = - controller.axis(get_axis_from_i32(profile.controller_axis[AXIS_DOWN].1)); + let axis_position = unsafe { + sdl3_sys::gamepad::SDL_GetGamepadAxis( + controller, + get_axis_from_i32(profile.controller_axis[AXIS_DOWN].1), + ) + }; if axis_position as isize * profile.controller_axis[AXIS_DOWN].2 as isize > 0 { y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); } } if profile.controller_axis[AXIS_UP].0 { - let axis_position = controller.axis(get_axis_from_i32(profile.controller_axis[AXIS_UP].1)); + let axis_position = unsafe { + sdl3_sys::gamepad::SDL_GetGamepadAxis( + controller, + get_axis_from_i32(profile.controller_axis[AXIS_UP].1), + ) + }; if axis_position as isize * profile.controller_axis[AXIS_UP].2 as isize > 0 { y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); } @@ -152,35 +177,27 @@ fn set_axis_from_controller( fn set_axis_from_keys( profile: &ui::config::InputProfile, - keyboard_state: &sdl2::keyboard::KeyboardState, + keyboard_state: *const bool, ) -> (f64, f64) { let mut x = 0.0; let mut y = 0.0; if profile.keys[AXIS_LEFT].0 - && keyboard_state.is_scancode_pressed( - sdl2::keyboard::Scancode::from_i32(profile.keys[AXIS_LEFT].1).unwrap(), - ) + && unsafe { *keyboard_state.offset(profile.keys[AXIS_LEFT].1 as isize) } { x = -MAX_AXIS_VALUE } if profile.keys[AXIS_RIGHT].0 - && keyboard_state.is_scancode_pressed( - sdl2::keyboard::Scancode::from_i32(profile.keys[AXIS_RIGHT].1).unwrap(), - ) + && unsafe { *keyboard_state.offset(profile.keys[AXIS_RIGHT].1 as isize) } { x = MAX_AXIS_VALUE } if profile.keys[AXIS_DOWN].0 - && keyboard_state.is_scancode_pressed( - sdl2::keyboard::Scancode::from_i32(profile.keys[AXIS_DOWN].1).unwrap(), - ) + && unsafe { *keyboard_state.offset(profile.keys[AXIS_DOWN].1 as isize) } { y = -MAX_AXIS_VALUE } if profile.keys[AXIS_UP].0 - && keyboard_state.is_scancode_pressed( - sdl2::keyboard::Scancode::from_i32(profile.keys[AXIS_UP].1).unwrap(), - ) + && unsafe { *keyboard_state.offset(profile.keys[AXIS_UP].1 as isize) } { y = MAX_AXIS_VALUE } @@ -190,25 +207,29 @@ fn set_axis_from_keys( fn set_buttons_from_joystick( profile: &ui::config::InputProfile, i: usize, - joystick: &sdl2::joystick::Joystick, + joystick: *mut sdl3_sys::joystick::SDL_Joystick, keys: &mut u32, ) { let profile_joystick_button = profile.joystick_buttons[i]; if profile_joystick_button.0 { - *keys |= (joystick.button(profile_joystick_button.1).unwrap() as u32) << i; + *keys |= (unsafe { + sdl3_sys::joystick::SDL_GetJoystickButton(joystick, profile_joystick_button.1) + } as u32) + << i; } let profile_joystick_hat = profile.joystick_hat[i]; if profile_joystick_hat.0 - && joystick.hat(profile_joystick_hat.1).unwrap() - == sdl2::joystick::HatState::from_raw(profile_joystick_hat.2) + && unsafe { sdl3_sys::joystick::SDL_GetJoystickHat(joystick, profile_joystick_hat.1) } + == profile_joystick_hat.2 { *keys |= 1 << i; } let profile_joystick_axis = profile.joystick_axis[i]; if profile_joystick_axis.0 { - let axis_position = joystick.axis(profile_joystick_axis.1).unwrap(); + let axis_position = + unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile_joystick_axis.1) }; if axis_position as isize * profile_joystick_axis.2 as isize > 0 && axis_position.saturating_abs() > i16::MAX / 2 { @@ -220,17 +241,28 @@ fn set_buttons_from_joystick( fn set_buttons_from_controller( profile: &ui::config::InputProfile, i: usize, - controller: &sdl2::controller::GameController, + controller: *mut sdl3_sys::gamepad::SDL_Gamepad, keys: &mut u32, ) { let profile_controller_button = profile.controller_buttons[i]; if profile_controller_button.0 { - *keys |= (controller.button(get_button_from_i32(profile_controller_button.1)) as u32) << i; + *keys |= (unsafe { + sdl3_sys::gamepad::SDL_GetGamepadButton( + controller, + get_button_from_i32(profile_controller_button.1), + ) + } as u32) + << i; } let profile_controller_axis = profile.controller_axis[i]; if profile_controller_axis.0 { - let axis_position = controller.axis(get_axis_from_i32(profile_controller_axis.1)); + let axis_position = unsafe { + sdl3_sys::gamepad::SDL_GetGamepadAxis( + controller, + get_axis_from_i32(profile_controller_axis.1), + ) + }; if axis_position as isize * profile_controller_axis.2 as isize > 0 && axis_position.saturating_abs() > i16::MAX / 2 { @@ -243,36 +275,34 @@ pub fn set_rumble(ui: &mut ui::Ui, channel: usize, rumble: u8) { if !ui.controllers[channel].rumble { return; } - let controller = &mut ui.controllers[channel].game_controller; - let joystick = &mut ui.controllers[channel].joystick; - if controller.is_some() { - controller - .as_mut() - .unwrap() - .set_rumble( + let controller = ui.controllers[channel].game_controller; + let joystick = ui.controllers[channel].joystick; + if !controller.is_null() { + unsafe { + sdl3_sys::gamepad::SDL_RumbleGamepad( + controller, (rumble & 1) as u16 * u16::MAX, (rumble & 1) as u16 * u16::MAX, (rumble & 1) as u32 * 60000, ) - .unwrap(); - } else if joystick.is_some() { - joystick - .as_mut() - .unwrap() - .set_rumble( + }; + } else if !joystick.is_null() { + unsafe { + sdl3_sys::joystick::SDL_RumbleJoystick( + joystick, (rumble & 1) as u16 * u16::MAX, (rumble & 1) as u16 * u16::MAX, (rumble & 1) as u32 * 60000, ) - .unwrap(); + }; } } fn change_paks( profile: &ui::config::InputProfile, - joystick: &Option, - controller: &Option, - keyboard_state: &sdl2::keyboard::KeyboardState, + joystick: *mut sdl3_sys::joystick::SDL_Joystick, + controller: *mut sdl3_sys::gamepad::SDL_Gamepad, + keyboard_state: *const bool, ) -> bool { let controller_button = profile.controller_buttons[CHANGE_PAK]; let joystick_button = profile.joystick_buttons[CHANGE_PAK]; @@ -280,51 +310,42 @@ fn change_paks( let key = profile.keys[CHANGE_PAK]; let mut pressed = false; - if controller_button.0 && controller.is_some() { - pressed = controller - .as_ref() - .unwrap() - .button(get_button_from_i32(controller_button.1)); - } else if joystick_button.0 && joystick.is_some() { - pressed = joystick - .as_ref() - .unwrap() - .button(joystick_button.1) - .unwrap(); - } else if joystick_hat.0 && joystick.is_some() { - pressed = joystick.as_ref().unwrap().hat(joystick_hat.1).unwrap() - == sdl2::joystick::HatState::from_raw(joystick_hat.2); + if controller_button.0 && !controller.is_null() { + pressed = unsafe { + sdl3_sys::gamepad::SDL_GetGamepadButton( + controller, + get_button_from_i32(controller_button.1), + ) + }; + } else if joystick_button.0 && !joystick.is_null() { + pressed = unsafe { sdl3_sys::joystick::SDL_GetJoystickButton(joystick, joystick_button.1) }; + } else if joystick_hat.0 && !joystick.is_null() { + pressed = unsafe { sdl3_sys::joystick::SDL_GetJoystickHat(joystick, joystick_hat.1) } + == joystick_hat.2; } else if key.0 { - pressed = - keyboard_state.is_scancode_pressed(sdl2::keyboard::Scancode::from_i32(key.1).unwrap()); + pressed = unsafe { *keyboard_state.offset(key.1 as isize) }; } pressed } pub fn get(ui: &mut ui::Ui, channel: usize) -> (u32, bool) { - let events = ui.sdl_context.as_ref().unwrap().event_pump().unwrap(); - let keyboard_state = events.keyboard_state(); - let profile_name = ui.config.input.input_profile_binding[channel].clone(); let profile = ui.config.input.input_profiles.get(&profile_name).unwrap(); let mut keys = 0; - let controller = &ui.controllers[channel].game_controller; - let joystick = &ui.controllers[channel].joystick; + let controller = ui.controllers[channel].game_controller; + let joystick = ui.controllers[channel].joystick; for i in 0..14 { if profile_name != "default" || channel == 0 { let profile_key = profile.keys[i]; if profile_key.0 { - keys |= (keyboard_state - .is_scancode_pressed(sdl2::keyboard::Scancode::from_i32(profile_key.1).unwrap()) - as u32) - << i; + keys |= (unsafe { *ui.keyboard_state.offset(profile_key.1 as isize) } as u32) << i; } } - if controller.is_some() { - set_buttons_from_controller(profile, i, controller.as_ref().unwrap(), &mut keys); - } else if joystick.is_some() { - set_buttons_from_joystick(profile, i, joystick.as_ref().unwrap(), &mut keys); + if !controller.is_null() { + set_buttons_from_controller(profile, i, controller, &mut keys); + } else if !joystick.is_null() { + set_buttons_from_joystick(profile, i, joystick, &mut keys); } } @@ -332,13 +353,13 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> (u32, bool) { let mut y: f64 = 0.0; if profile_name != "default" || channel == 0 { - (x, y) = set_axis_from_keys(profile, &keyboard_state); + (x, y) = set_axis_from_keys(profile, ui.keyboard_state); } - if controller.is_some() { - (x, y) = set_axis_from_controller(profile, controller.as_ref().unwrap()) - } else if joystick.is_some() { - (x, y) = set_axis_from_joystick(profile, joystick.as_ref().unwrap()) + if !controller.is_null() { + (x, y) = set_axis_from_controller(profile, controller) + } else if !joystick.is_null() { + (x, y) = set_axis_from_joystick(profile, joystick) } bound_axis(&mut x, &mut y); @@ -347,33 +368,27 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> (u32, bool) { ( keys, - change_paks(profile, joystick, controller, &keyboard_state), + change_paks(profile, joystick, controller, ui.keyboard_state), ) } -pub fn list_controllers(ui: &ui::Ui) { - let joystick_subsystem = ui.joystick_subsystem.as_ref().unwrap(); - let num_joysticks = joystick_subsystem.num_joysticks().unwrap(); - if num_joysticks == 0 { - println!("No controllers connected") - } - for i in 0..num_joysticks { - println!("{}: {}", i, joystick_subsystem.name_for_index(i).unwrap()) - } -} - -pub fn assign_controller(ui: &mut ui::Ui, controller: u32, port: usize) { - let joystick_subsystem = ui.joystick_subsystem.as_ref().unwrap(); - let num_joysticks = joystick_subsystem.num_joysticks().unwrap(); - if controller < num_joysticks { - ui.config.input.controller_assignment[port - 1] = Some( - joystick_subsystem - .device_guid(controller) - .unwrap() - .to_string(), - ); - } else { - println!("Invalid controller number") +pub fn assign_controller(ui: &mut ui::Ui, controller: i32, port: usize) { + let mut joystick_count = 0; + let joysticks = unsafe { sdl3_sys::joystick::SDL_GetJoysticks(&mut joystick_count) }; + if !joysticks.is_null() { + if controller < joystick_count { + let path = unsafe { + std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickPathForID( + *(joysticks.offset(controller as isize)), + )) + .to_string_lossy() + .to_string() + }; + ui.config.input.controller_assignment[port - 1] = Some(path); + } else { + println!("Invalid controller number") + } + unsafe { sdl3_sys::stdinc::SDL_free(joysticks as *mut std::ffi::c_void) }; } } @@ -392,7 +407,21 @@ pub fn clear_bindings(ui: &mut ui::Ui) { } } +fn close_controllers( + open_joysticks: Vec<*mut sdl3_sys::joystick::SDL_Joystick>, + open_controllers: Vec<*mut sdl3_sys::gamepad::SDL_Gamepad>, +) { + for joystick in open_joysticks { + unsafe { sdl3_sys::joystick::SDL_CloseJoystick(joystick) } + } + for controller in open_controllers { + unsafe { sdl3_sys::gamepad::SDL_CloseGamepad(controller) } + } +} + pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { + ui::sdl_init(sdl3_sys::init::SDL_INIT_VIDEO); + if profile == "default" { println!("Profile name cannot be default"); return; @@ -401,30 +430,48 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { println!("Profile name cannot be empty"); return; } - let controller_subsystem = ui.controller_subsystem.as_ref().unwrap(); - let joystick_subsystem = ui.joystick_subsystem.as_ref().unwrap(); - let mut controllers = vec![]; - let mut joysticks = vec![]; - for i in 0..joystick_subsystem.num_joysticks().unwrap() { - if !dinput { - if let Ok(controller) = controller_subsystem.open(i) { - controllers.push(controller); - continue; + let mut open_joysticks: Vec<*mut sdl3_sys::joystick::SDL_Joystick> = Vec::new(); + let mut open_controllers: Vec<*mut sdl3_sys::gamepad::SDL_Gamepad> = Vec::new(); + + let mut joystick_count = 0; + let joysticks = unsafe { sdl3_sys::joystick::SDL_GetJoysticks(&mut joystick_count) }; + if !joysticks.is_null() { + for offset in 0..joystick_count as isize { + if !dinput { + let controller = + unsafe { sdl3_sys::gamepad::SDL_OpenGamepad(*joysticks.offset(offset)) }; + if !controller.is_null() { + open_controllers.push(controller); + } + } else { + let joystick = + unsafe { sdl3_sys::joystick::SDL_OpenJoystick(*joysticks.offset(offset)) }; + if !joystick.is_null() { + open_joysticks.push(joystick); + } } } - if let Ok(joystick) = joystick_subsystem.open(i) { - joysticks.push(joystick); - } + unsafe { sdl3_sys::stdinc::SDL_free(joysticks as *mut std::ffi::c_void) }; } - let mut builder = - ui.video_subsystem - .as_ref() - .unwrap() - .window("configure input profile", 640, 480); - builder.position_centered(); - let window = builder.build().unwrap(); - let mut canvas = window.into_canvas().build().unwrap(); + let title = std::ffi::CString::new("configure input profile").unwrap(); + let mut window: *mut sdl3_sys::video::SDL_Window = std::ptr::null_mut(); + let mut renderer: *mut sdl3_sys::render::SDL_Renderer = std::ptr::null_mut(); + if !unsafe { + sdl3_sys::render::SDL_CreateWindowAndRenderer( + title.as_ptr(), + 640, + 480, + 0, + &mut window, + &mut renderer, + ) + } { + panic!("Could not create window and renderer") + } + if !unsafe { sdl3_sys::video::SDL_ShowWindow(window) } { + panic!("Could not show window") + } let font = rusttype::Font::try_from_bytes(include_bytes!("../../data/Roboto-Regular.ttf")).unwrap(); @@ -451,101 +498,90 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { ]; let mut new_keys = [(false, 0); PROFILE_SIZE]; - let mut new_joystick_buttons = [(false, 0u32); PROFILE_SIZE]; - let mut new_joystick_hat = [(false, 0u32, 0); PROFILE_SIZE]; - let mut new_joystick_axis = [(false, 0u32, 0); PROFILE_SIZE]; + let mut new_joystick_buttons = [(false, 0i32); PROFILE_SIZE]; + let mut new_joystick_hat = [(false, 0i32, 0); PROFILE_SIZE]; + let mut new_joystick_axis = [(false, 0i32, 0); PROFILE_SIZE]; let mut new_controller_buttons = [(false, 0i32); PROFILE_SIZE]; let mut new_controller_axis = [(false, 0i32, 0); PROFILE_SIZE]; let mut last_joystick_axis_result = (false, 0, 0); let mut last_controller_axis_result = (false, 0, 0); - let mut events = ui.sdl_context.as_ref().unwrap().event_pump().unwrap(); for (key, value) in key_labels.iter() { - for _event in events.poll_iter() {} // clear events + let mut event: sdl3_sys::events::SDL_Event = Default::default(); + while unsafe { sdl3_sys::events::SDL_PollEvent(&mut event) } {} // clear events ui::video::draw_text( format!("Select binding for: {key}").as_str(), - &mut canvas, + renderer, &font, ); let mut key_set = false; while !key_set { std::thread::sleep(std::time::Duration::from_millis(100)); - for event in events.poll_iter() { - match event { - sdl2::event::Event::Window { - win_event: sdl2::event::WindowEvent::Close, - .. - } => return, - sdl2::event::Event::KeyDown { - scancode: Some(scancode), - .. - } => { - new_keys[*value] = (true, scancode as i32); + while unsafe { sdl3_sys::events::SDL_PollEvent(&mut event) } { + let event_type = unsafe { event.r#type }; + if event_type == u32::from(sdl3_sys::events::SDL_EVENT_WINDOW_CLOSE_REQUESTED) { + close_controllers(open_joysticks, open_controllers); + return; + } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_KEY_DOWN) { + new_keys[*value] = (true, i32::from(unsafe { event.key.scancode })); + key_set = true + } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_GAMEPAD_BUTTON_DOWN) { + if !open_controllers.is_empty() { + new_controller_buttons[*value] = + (true, i32::from(unsafe { event.gbutton.button })); key_set = true } - sdl2::event::Event::ControllerButtonDown { button, .. } => { - if !controllers.is_empty() { - new_controller_buttons[*value] = (true, button as i32); + } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_GAMEPAD_AXIS_MOTION) { + let axis_value = unsafe { event.gaxis.value }; + let axis = unsafe { event.gaxis.axis }; + if !open_controllers.is_empty() && axis_value.saturating_abs() > i16::MAX / 2 { + let result = (true, axis as i32, axis_value / axis_value.saturating_abs()); + if result != last_controller_axis_result { + new_controller_axis[*value] = result; + last_controller_axis_result = result; key_set = true } } - sdl2::event::Event::ControllerAxisMotion { - axis, - value: axis_value, - .. - } => { - if !controllers.is_empty() && axis_value.saturating_abs() > i16::MAX / 2 { - let result = - (true, axis as i32, axis_value / axis_value.saturating_abs()); - if result != last_controller_axis_result { - new_controller_axis[*value] = result; - last_controller_axis_result = result; - key_set = true - } - } + } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_JOYSTICK_BUTTON_DOWN) + { + if !open_joysticks.is_empty() { + new_joystick_buttons[*value] = + (true, i32::from(unsafe { event.jbutton.button })); + key_set = true } - sdl2::event::Event::JoyButtonDown { button_idx, .. } => { - if !joysticks.is_empty() { - new_joystick_buttons[*value] = (true, button_idx as u32); + } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_JOYSTICK_HAT_MOTION) { + let state = unsafe { event.jhat.value }; + let hat = unsafe { event.jhat.hat }; + if !open_joysticks.is_empty() && state != sdl3_sys::joystick::SDL_HAT_CENTERED { + new_joystick_hat[*value] = (true, hat as i32, state); + key_set = true + } + } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_JOYSTICK_AXIS_MOTION) + { + let axis_value = unsafe { event.jaxis.value }; + let axis = unsafe { event.jaxis.axis }; + if !open_joysticks.is_empty() && axis_value.saturating_abs() > i16::MAX / 2 { + let result = (true, axis as i32, axis_value / axis_value.saturating_abs()); + if result != last_joystick_axis_result { + new_joystick_axis[*value] = result; + last_joystick_axis_result = result; key_set = true } } - sdl2::event::Event::JoyHatMotion { hat_idx, state, .. } => { - if !joysticks.is_empty() && state != sdl2::joystick::HatState::Centered { - new_joystick_hat[*value] = ( - true, - hat_idx as u32, - sdl2::joystick::HatState::to_raw(state), - ); - key_set = true - } - } - sdl2::event::Event::JoyAxisMotion { - axis_idx, - value: axis_value, - .. - } => { - if !joysticks.is_empty() && axis_value.saturating_abs() > i16::MAX / 2 { - let result = ( - true, - axis_idx as u32, - axis_value / axis_value.saturating_abs(), - ); - if result != last_joystick_axis_result { - new_joystick_axis[*value] = result; - last_joystick_axis_result = result; - key_set = true - } - } - } - _ => {} } } } } + close_controllers(open_joysticks, open_controllers); + + unsafe { + sdl3_sys::render::SDL_DestroyRenderer(renderer); + sdl3_sys::video::SDL_DestroyWindow(window); + } + let new_profile = ui::config::InputProfile { keys: new_keys, controller_buttons: new_controller_buttons, @@ -562,45 +598,103 @@ pub fn get_default_profile() -> ui::config::InputProfile { let mut default_controller_buttons = [(false, 0); PROFILE_SIZE]; let mut default_controller_axis = [(false, 0, 0); PROFILE_SIZE]; let mut default_keys = [(false, 0); PROFILE_SIZE]; - default_keys[R_DPAD] = (true, sdl2::keyboard::Scancode::D as i32); - default_keys[L_DPAD] = (true, sdl2::keyboard::Scancode::A as i32); - default_keys[D_DPAD] = (true, sdl2::keyboard::Scancode::S as i32); - default_keys[U_DPAD] = (true, sdl2::keyboard::Scancode::W as i32); - default_keys[START_BUTTON] = (true, sdl2::keyboard::Scancode::Return as i32); - default_keys[Z_TRIG] = (true, sdl2::keyboard::Scancode::Z as i32); - default_keys[B_BUTTON] = (true, sdl2::keyboard::Scancode::LCtrl as i32); - default_keys[A_BUTTON] = (true, sdl2::keyboard::Scancode::LShift as i32); - default_keys[R_CBUTTON] = (true, sdl2::keyboard::Scancode::L as i32); - default_keys[L_CBUTTON] = (true, sdl2::keyboard::Scancode::J as i32); - default_keys[D_CBUTTON] = (true, sdl2::keyboard::Scancode::K as i32); - default_keys[U_CBUTTON] = (true, sdl2::keyboard::Scancode::I as i32); - default_keys[R_TRIG] = (true, sdl2::keyboard::Scancode::C as i32); - default_keys[L_TRIG] = (true, sdl2::keyboard::Scancode::X as i32); - default_keys[AXIS_LEFT] = (true, sdl2::keyboard::Scancode::Left as i32); - default_keys[AXIS_RIGHT] = (true, sdl2::keyboard::Scancode::Right as i32); - default_keys[AXIS_UP] = (true, sdl2::keyboard::Scancode::Up as i32); - default_keys[AXIS_DOWN] = (true, sdl2::keyboard::Scancode::Down as i32); - default_keys[CHANGE_PAK] = (true, sdl2::keyboard::Scancode::Comma as i32); + default_keys[R_DPAD] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_D)); + default_keys[L_DPAD] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_A)); + default_keys[D_DPAD] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_S)); + default_keys[U_DPAD] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_W)); + default_keys[START_BUTTON] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_RETURN)); + default_keys[Z_TRIG] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_Z)); + default_keys[B_BUTTON] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_LCTRL)); + default_keys[A_BUTTON] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_LSHIFT)); + default_keys[R_CBUTTON] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_L)); + default_keys[L_CBUTTON] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_J)); + default_keys[D_CBUTTON] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_K)); + default_keys[U_CBUTTON] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_I)); + default_keys[R_TRIG] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_C)); + default_keys[L_TRIG] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_X)); + default_keys[AXIS_LEFT] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_LEFT)); + default_keys[AXIS_RIGHT] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_RIGHT)); + default_keys[AXIS_UP] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_UP)); + default_keys[AXIS_DOWN] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_DOWN)); + default_keys[CHANGE_PAK] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_COMMA)); - default_controller_buttons[R_DPAD] = (true, sdl2::controller::Button::DPadRight as i32); - default_controller_buttons[L_DPAD] = (true, sdl2::controller::Button::DPadLeft as i32); - default_controller_buttons[D_DPAD] = (true, sdl2::controller::Button::DPadDown as i32); - default_controller_buttons[U_DPAD] = (true, sdl2::controller::Button::DPadUp as i32); - default_controller_buttons[START_BUTTON] = (true, sdl2::controller::Button::Start as i32); - default_controller_axis[Z_TRIG] = (true, sdl2::controller::Axis::TriggerLeft as i32, 1); - default_controller_buttons[B_BUTTON] = (true, sdl2::controller::Button::X as i32); - default_controller_buttons[A_BUTTON] = (true, sdl2::controller::Button::A as i32); - default_controller_axis[R_CBUTTON] = (true, sdl2::controller::Axis::RightX as i32, 1); - default_controller_axis[L_CBUTTON] = (true, sdl2::controller::Axis::RightX as i32, -1); - default_controller_axis[D_CBUTTON] = (true, sdl2::controller::Axis::RightY as i32, 1); - default_controller_axis[U_CBUTTON] = (true, sdl2::controller::Axis::RightY as i32, -1); - default_controller_buttons[R_TRIG] = (true, sdl2::controller::Button::RightShoulder as i32); - default_controller_buttons[L_TRIG] = (true, sdl2::controller::Button::LeftShoulder as i32); - default_controller_axis[AXIS_LEFT] = (true, sdl2::controller::Axis::LeftX as i32, -1); - default_controller_axis[AXIS_RIGHT] = (true, sdl2::controller::Axis::LeftX as i32, 1); - default_controller_axis[AXIS_UP] = (true, sdl2::controller::Axis::LeftY as i32, -1); - default_controller_axis[AXIS_DOWN] = (true, sdl2::controller::Axis::LeftY as i32, 1); - default_controller_buttons[CHANGE_PAK] = (true, sdl2::controller::Button::Back as i32); + default_controller_buttons[R_DPAD] = ( + true, + i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_RIGHT), + ); + default_controller_buttons[L_DPAD] = ( + true, + i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_LEFT), + ); + default_controller_buttons[D_DPAD] = ( + true, + i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_DOWN), + ); + default_controller_buttons[U_DPAD] = ( + true, + i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_UP), + ); + default_controller_buttons[START_BUTTON] = + (true, i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_START)); + default_controller_axis[Z_TRIG] = ( + true, + i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFT_TRIGGER), + 1, + ); + default_controller_buttons[B_BUTTON] = + (true, i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_WEST)); + default_controller_buttons[A_BUTTON] = + (true, i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_SOUTH)); + default_controller_axis[R_CBUTTON] = ( + true, + i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTX), + 1, + ); + default_controller_axis[L_CBUTTON] = ( + true, + i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTX), + -1, + ); + default_controller_axis[D_CBUTTON] = ( + true, + i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTY), + 1, + ); + default_controller_axis[U_CBUTTON] = ( + true, + i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTY), + -1, + ); + default_controller_buttons[R_TRIG] = ( + true, + i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER), + ); + default_controller_buttons[L_TRIG] = ( + true, + i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_LEFT_SHOULDER), + ); + default_controller_axis[AXIS_LEFT] = ( + true, + i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTX), + -1, + ); + default_controller_axis[AXIS_RIGHT] = ( + true, + i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTX), + 1, + ); + default_controller_axis[AXIS_UP] = ( + true, + i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTY), + -1, + ); + default_controller_axis[AXIS_DOWN] = ( + true, + i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTY), + 1, + ); + default_controller_buttons[CHANGE_PAK] = + (true, i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_BACK)); ui::config::InputProfile { keys: default_keys, @@ -614,54 +708,69 @@ pub fn get_default_profile() -> ui::config::InputProfile { } pub fn init(ui: &mut ui::Ui) { - let joystick_subsystem = ui.joystick_subsystem.as_ref().unwrap(); - let controller_subsystem = ui.controller_subsystem.as_ref().unwrap(); + ui.keyboard_state = unsafe { sdl3_sys::keyboard::SDL_GetKeyboardState(std::ptr::null_mut()) }; + let mut taken = [false; 4]; for i in 0..4 { let controller_assignment = &ui.config.input.controller_assignment[i]; if controller_assignment.is_some() { - let mut joystick_index = u32::MAX; - let guid = controller_assignment.clone().unwrap(); - for i in 0..joystick_subsystem.num_joysticks().unwrap() { - if joystick_subsystem.device_guid(i).unwrap().to_string() == guid - && !taken[i as usize] - { - joystick_index = i; - taken[i as usize] = true; - break; + let mut joystick_id = 0; + let assigned_path = controller_assignment.as_ref().unwrap(); + + let mut joystick_count = 0; + let joysticks = unsafe { sdl3_sys::joystick::SDL_GetJoysticks(&mut joystick_count) }; + if !joysticks.is_null() { + for offset in 0..joystick_count as isize { + let path = unsafe { + std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickPathForID( + *(joysticks.offset(offset)), + )) + .to_string_lossy() + .to_string() + }; + if path == *assigned_path && !taken[offset as usize] { + joystick_id = unsafe { *(joysticks.offset(offset)) }; + taken[offset as usize] = true; + break; + } } + unsafe { sdl3_sys::stdinc::SDL_free(joysticks as *mut std::ffi::c_void) }; } - if joystick_index < u32::MAX { + if joystick_id != 0 { let profile_name = ui.config.input.input_profile_binding[i].clone(); let profile = ui.config.input.input_profiles.get(&profile_name).unwrap(); if !profile.dinput { - let controller_result = controller_subsystem.open(joystick_index); - if controller_result.is_ok() { - ui.controllers[i].game_controller = Some(controller_result.unwrap()); - if ui.controllers[i] - .game_controller - .as_ref() - .unwrap() - .has_rumble() - { - ui.controllers[i].rumble = true; - } - } - } - - if ui.controllers[i].game_controller.is_none() { - let joystick_result = joystick_subsystem.open(joystick_index); - if joystick_result.is_err() { - println!( - "could not connect joystick: {}", - joystick_result.err().unwrap() - ) + let gamepad = unsafe { sdl3_sys::gamepad::SDL_OpenGamepad(joystick_id) }; + if gamepad.is_null() { + println!("could not connect gamepad: {}", joystick_id) } else { - ui.controllers[i].joystick = Some(joystick_result.unwrap()); - if ui.controllers[i].joystick.as_ref().unwrap().has_rumble() { - ui.controllers[i].rumble = true; - } + ui.controllers[i].game_controller = gamepad; + let properties = + unsafe { sdl3_sys::gamepad::SDL_GetGamepadProperties(gamepad) }; + ui.controllers[i].rumble = unsafe { + sdl3_sys::properties::SDL_GetBooleanProperty( + properties, + sdl3_sys::gamepad::SDL_PROP_GAMEPAD_CAP_RUMBLE_BOOLEAN, + false, + ) + }; + } + } else { + let joystick = unsafe { sdl3_sys::joystick::SDL_OpenJoystick(joystick_id) }; + if joystick.is_null() { + println!("could not connect joystick: {}", joystick_id) + } else { + ui.controllers[i].joystick = joystick; + let properties = + unsafe { sdl3_sys::joystick::SDL_GetJoystickProperties(joystick) }; + ui.controllers[i].rumble = unsafe { + sdl3_sys::properties::SDL_GetBooleanProperty( + properties, + sdl3_sys::joystick::SDL_PROP_JOYSTICK_CAP_RUMBLE_BOOLEAN, + false, + ) + }; } } } else { @@ -670,3 +779,16 @@ pub fn init(ui: &mut ui::Ui) { } } } + +pub fn close(ui: &mut ui::Ui) { + for controller in ui.controllers.iter_mut() { + if !controller.joystick.is_null() { + unsafe { sdl3_sys::joystick::SDL_CloseJoystick(controller.joystick) } + controller.joystick = std::ptr::null_mut(); + } + if !controller.game_controller.is_null() { + unsafe { sdl3_sys::gamepad::SDL_CloseGamepad(controller.game_controller) } + controller.game_controller = std::ptr::null_mut(); + } + } +} diff --git a/src/ui/video.rs b/src/ui/video.rs index 0ca6e8c..dfa52e5 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -1,23 +1,29 @@ #![allow(non_snake_case)] include!(concat!(env!("OUT_DIR"), "/parallel_bindings.rs")); use crate::device; +use crate::ui; pub fn init(device: &mut device::Device, fullscreen: bool) { - let mut builder = device - .ui - .video_subsystem - .as_ref() - .unwrap() - .window("gopher64", 640, 480); + ui::sdl_init(sdl3_sys::init::SDL_INIT_VIDEO); - builder.position_centered().vulkan(); + let title = std::ffi::CString::new("gopher64").unwrap(); + + let mut flags = sdl3_sys::video::SDL_WINDOW_VULKAN; if fullscreen { - builder.fullscreen_desktop(); + flags |= sdl3_sys::video::SDL_WINDOW_FULLSCREEN; } else { - builder.resizable(); + flags |= sdl3_sys::video::SDL_WINDOW_RESIZABLE; + } + + device.ui.window = + unsafe { sdl3_sys::video::SDL_CreateWindow(title.as_ptr(), 640, 480, flags) }; + if device.ui.window.is_null() { + panic!("Could not create window"); + } + if !unsafe { sdl3_sys::video::SDL_ShowWindow(device.ui.window) } { + panic!("Could not show window"); } - device.ui.window = Some(builder.build().unwrap()); let gfx_info = GFX_INFO { RDRAM: device.rdram.mem.as_mut_ptr(), @@ -36,7 +42,7 @@ pub fn init(device: &mut device::Device, fullscreen: bool) { unsafe { rdp_init( - device.ui.window.as_ref().unwrap().raw() as *mut std::ffi::c_void, + device.ui.window as *mut std::ffi::c_void, gfx_info, device.ui.config.video.upscale, device.ui.config.video.integer_scaling, @@ -45,9 +51,10 @@ pub fn init(device: &mut device::Device, fullscreen: bool) { } } -pub fn close() { +pub fn close(ui: &ui::Ui) { unsafe { rdp_close(); + sdl3_sys::video::SDL_DestroyWindow(ui.window); } } @@ -66,19 +73,23 @@ pub fn process_rdp_list() -> u64 { unsafe { rdp_process_commands() } } -pub fn draw_text( - text: &str, - canvas: &mut sdl2::render::Canvas, - font: &rusttype::Font, -) { +pub fn draw_text(text: &str, renderer: *mut sdl3_sys::render::SDL_Renderer, font: &rusttype::Font) { let text_size = 32; let scale = rusttype::Scale::uniform(text_size as f32); let v_metrics = font.v_metrics(scale); let offset = rusttype::point(10.0, 10.0 + v_metrics.ascent); // Clear the canvas - canvas.set_draw_color(sdl2::pixels::Color::RGB(0, 0, 0)); - canvas.clear(); + unsafe { + sdl3_sys::render::SDL_SetRenderDrawColor( + renderer, + 0, + 0, + 0, + sdl3_sys::pixels::SDL_ALPHA_OPAQUE, + ); + sdl3_sys::render::SDL_RenderClear(renderer); + }; for glyph in font.layout(text, scale, offset) { if let Some(bb) = glyph.pixel_bounding_box() { @@ -86,15 +97,23 @@ pub fn draw_text( let x = x as i32 + bb.min.x; let y = y as i32 + bb.min.y + (240 - text_size); if v > 0.5 { - canvas.set_draw_color(sdl2::pixels::Color::RGB(255, 255, 255)); - canvas - .draw_point(sdl2::rect::Point::new(x, y)) - .expect("Error drawing pixel"); + unsafe { + sdl3_sys::render::SDL_SetRenderDrawColor( + renderer, + 255, + 255, + 255, + sdl3_sys::pixels::SDL_ALPHA_OPAQUE, + ); + sdl3_sys::render::SDL_RenderPoint(renderer, x as f32, y as f32); + }; } }); } } // Present the canvas - canvas.present(); + if !unsafe { sdl3_sys::render::SDL_RenderPresent(renderer) } { + panic!("Could not present renderer"); + } } From b0e9c29a0599314fb5b2b494b507124f87122a4b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 25 Jan 2025 12:43:37 +0100 Subject: [PATCH 0236/1117] SDL code tweaks (#177) * SDL code tweaks * more * more * more * more * more --- parallel-rdp/interface.cpp | 7 ++- src/main.rs | 2 +- src/netplay.rs | 21 ++++++--- src/ui.rs | 10 ++++ src/ui/gui.rs | 54 +++++++++------------- src/ui/input.rs | 95 ++++++++++++++++++-------------------- 6 files changed, 99 insertions(+), 90 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 3b8acc9..df9d276 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -157,7 +157,12 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_scaling, bool _fullscreen) { window = (SDL_Window *)_window; - SDL_AddEventWatch(sdl_event_filter, nullptr); + bool result = SDL_AddEventWatch(sdl_event_filter, nullptr); + if (!result) + { + printf("Could not add event watch.\n"); + return; + } gfx_info = _gfx_info; fullscreen = _fullscreen; diff --git a/src/main.rs b/src/main.rs index 9df8fe7..7902a9c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -120,7 +120,7 @@ async fn main() { } } if args.list_controllers { - let controllers = gui::get_controller_names(); + let controllers = gui::get_controller_names(&device.ui); for (i, controller) in controllers.iter().enumerate() { println!("Controller {}: {}", i, controller); } diff --git a/src/netplay.rs b/src/netplay.rs index 57cceca..afcd5f7 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -220,15 +220,22 @@ pub fn init( gui_ctx: egui::Context, ) -> Netplay { peer_addr.set_port(session.port.unwrap() as u16); - let udp_socket = if peer_addr.is_ipv4() { - std::net::UdpSocket::bind((std::net::Ipv4Addr::UNSPECIFIED, 0)) - .expect("couldn't bind to address") + let udp_socket; + if peer_addr.is_ipv4() { + udp_socket = std::net::UdpSocket::bind((std::net::Ipv4Addr::UNSPECIFIED, 0)) + .expect("couldn't bind to address"); + socket2::SockRef::from(&udp_socket) + .set_tos(CS4 << 2) + .unwrap(); } else { - std::net::UdpSocket::bind((std::net::Ipv6Addr::UNSPECIFIED, 0)) - .expect("couldn't bind to address") + udp_socket = std::net::UdpSocket::bind((std::net::Ipv6Addr::UNSPECIFIED, 0)) + .expect("couldn't bind to address"); + #[cfg(not(target_os = "windows"))] + socket2::SockRef::from(&udp_socket) + .set_tclass_v6(CS4 << 2) + .unwrap(); }; - let socket_ref = socket2::SockRef::from(&udp_socket); - socket_ref.set_tos(CS4 << 2).unwrap(); + udp_socket.connect(peer_addr).unwrap(); udp_socket.set_nonblocking(true).unwrap(); diff --git a/src/ui.rs b/src/ui.rs index 15a75b9..bfd3e12 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -22,11 +22,14 @@ pub struct Ui { pub pak_audio_stream: *mut sdl3_sys::audio::SDL_AudioStream, pub audio_freq: f64, pub audio_device: u32, + pub num_joysticks: i32, + pub joysticks: *mut sdl3_sys::joystick::SDL_JoystickID, } impl Drop for Ui { fn drop(&mut self) { unsafe { + sdl3_sys::stdinc::SDL_free(self.joysticks as *mut std::ffi::c_void); sdl3_sys::init::SDL_Quit(); } write_config(self); @@ -50,6 +53,11 @@ pub fn sdl_init(flag: sdl3_sys::init::SDL_InitFlags) { impl Ui { pub fn new(config_dir: std::path::PathBuf) -> Ui { sdl_init(sdl3_sys::init::SDL_INIT_GAMEPAD); + let mut num_joysticks = 0; + let joysticks = unsafe { sdl3_sys::joystick::SDL_GetJoysticks(&mut num_joysticks) }; + if joysticks.is_null() { + panic!("Could not get joystick list"); + } let config_file_path = config_dir.join("config.json"); let config_file = std::fs::read(config_file_path.clone()); @@ -113,6 +121,8 @@ impl Ui { pak_audio_stream: std::ptr::null_mut(), audio_freq: 0.0, audio_device: 0, + num_joysticks, + joysticks, } } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index dee758a..4b00dbb 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -46,43 +46,35 @@ fn get_input_profiles(game_ui: &ui::Ui) -> Vec { profiles } -pub fn get_controller_names() -> Vec { +pub fn get_controller_names(game_ui: &ui::Ui) -> Vec { let mut controllers: Vec = vec![]; - let mut joystick_count = 0; - let joysticks = unsafe { sdl3_sys::joystick::SDL_GetJoysticks(&mut joystick_count) }; - if !joysticks.is_null() { - for offset in 0..joystick_count as isize { - let name = unsafe { - std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickNameForID( - *(joysticks.offset(offset)), - )) - }; - controllers.push(name.to_string_lossy().to_string()); - } - unsafe { sdl3_sys::stdinc::SDL_free(joysticks as *mut std::ffi::c_void) }; + for offset in 0..game_ui.num_joysticks as isize { + let name = unsafe { + std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickNameForID( + *(game_ui.joysticks.offset(offset)), + )) + }; + controllers.push(name.to_string_lossy().to_string()); } + controllers } -pub fn get_controller_paths() -> Vec { +pub fn get_controller_paths(game_ui: &ui::Ui) -> Vec { let mut controller_paths: Vec = vec![]; - let mut joystick_count = 0; - let joysticks = unsafe { sdl3_sys::joystick::SDL_GetJoysticks(&mut joystick_count) }; - if !joysticks.is_null() { - for offset in 0..joystick_count as isize { - let path = unsafe { - std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickPathForID( - *(joysticks.offset(offset)), - )) - .to_string_lossy() - .to_string() - }; - controller_paths.push(path); - } - unsafe { sdl3_sys::stdinc::SDL_free(joysticks as *mut std::ffi::c_void) }; + for offset in 0..game_ui.num_joysticks as isize { + let path = unsafe { + std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickPathForID( + *(game_ui.joysticks.offset(offset)), + )) + .to_string_lossy() + .to_string() + }; + controller_paths.push(path); } + controller_paths } @@ -95,7 +87,7 @@ impl GopherEguiApp { ) -> GopherEguiApp { add_japanese_font(&cc.egui_ctx); let game_ui = ui::Ui::new(config_dir.clone()); - let controller_paths = get_controller_paths(); + let controller_paths = get_controller_paths(&game_ui); let mut selected_controller = [-1, -1, -1, -1]; for (pos, item) in game_ui @@ -122,7 +114,7 @@ impl GopherEguiApp { profile_name: "".to_string(), selected_profile: game_ui.config.input.input_profile_binding.clone(), selected_controller, - controller_names: get_controller_names(), + controller_names: get_controller_names(&game_ui), input_profiles: get_input_profiles(&game_ui), controller_enabled: game_ui.config.input.controller_enabled, upscale: game_ui.config.video.upscale, @@ -141,7 +133,7 @@ impl GopherEguiApp { } fn save_config(game_ui: &mut ui::Ui, save_config_items: SaveConfig) { - let controller_paths = get_controller_paths(); + let controller_paths = get_controller_paths(game_ui); for (pos, item) in save_config_items.selected_controller.iter().enumerate() { if *item != -1 { game_ui.config.input.controller_assignment[pos] = diff --git a/src/ui/input.rs b/src/ui/input.rs index 0846820..df17579 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -373,22 +373,17 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> (u32, bool) { } pub fn assign_controller(ui: &mut ui::Ui, controller: i32, port: usize) { - let mut joystick_count = 0; - let joysticks = unsafe { sdl3_sys::joystick::SDL_GetJoysticks(&mut joystick_count) }; - if !joysticks.is_null() { - if controller < joystick_count { - let path = unsafe { - std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickPathForID( - *(joysticks.offset(controller as isize)), - )) - .to_string_lossy() - .to_string() - }; - ui.config.input.controller_assignment[port - 1] = Some(path); - } else { - println!("Invalid controller number") - } - unsafe { sdl3_sys::stdinc::SDL_free(joysticks as *mut std::ffi::c_void) }; + if controller < ui.num_joysticks { + let path = unsafe { + std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickPathForID( + *(ui.joysticks.offset(controller as isize)), + )) + .to_string_lossy() + .to_string() + }; + ui.config.input.controller_assignment[port - 1] = Some(path); + } else { + println!("Invalid controller number") } } @@ -433,25 +428,20 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { let mut open_joysticks: Vec<*mut sdl3_sys::joystick::SDL_Joystick> = Vec::new(); let mut open_controllers: Vec<*mut sdl3_sys::gamepad::SDL_Gamepad> = Vec::new(); - let mut joystick_count = 0; - let joysticks = unsafe { sdl3_sys::joystick::SDL_GetJoysticks(&mut joystick_count) }; - if !joysticks.is_null() { - for offset in 0..joystick_count as isize { - if !dinput { - let controller = - unsafe { sdl3_sys::gamepad::SDL_OpenGamepad(*joysticks.offset(offset)) }; - if !controller.is_null() { - open_controllers.push(controller); - } - } else { - let joystick = - unsafe { sdl3_sys::joystick::SDL_OpenJoystick(*joysticks.offset(offset)) }; - if !joystick.is_null() { - open_joysticks.push(joystick); - } + for offset in 0..ui.num_joysticks as isize { + if !dinput { + let controller = + unsafe { sdl3_sys::gamepad::SDL_OpenGamepad(*ui.joysticks.offset(offset)) }; + if !controller.is_null() { + open_controllers.push(controller); + } + } else { + let joystick = + unsafe { sdl3_sys::joystick::SDL_OpenJoystick(*ui.joysticks.offset(offset)) }; + if !joystick.is_null() { + open_joysticks.push(joystick); } } - unsafe { sdl3_sys::stdinc::SDL_free(joysticks as *mut std::ffi::c_void) }; } let title = std::ffi::CString::new("configure input profile").unwrap(); @@ -709,6 +699,9 @@ pub fn get_default_profile() -> ui::config::InputProfile { pub fn init(ui: &mut ui::Ui) { ui.keyboard_state = unsafe { sdl3_sys::keyboard::SDL_GetKeyboardState(std::ptr::null_mut()) }; + if ui.keyboard_state.is_null() { + panic!("Could not get keyboard state"); + } let mut taken = [false; 4]; for i in 0..4 { @@ -717,25 +710,21 @@ pub fn init(ui: &mut ui::Ui) { let mut joystick_id = 0; let assigned_path = controller_assignment.as_ref().unwrap(); - let mut joystick_count = 0; - let joysticks = unsafe { sdl3_sys::joystick::SDL_GetJoysticks(&mut joystick_count) }; - if !joysticks.is_null() { - for offset in 0..joystick_count as isize { - let path = unsafe { - std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickPathForID( - *(joysticks.offset(offset)), - )) - .to_string_lossy() - .to_string() - }; - if path == *assigned_path && !taken[offset as usize] { - joystick_id = unsafe { *(joysticks.offset(offset)) }; - taken[offset as usize] = true; - break; - } + for offset in 0..ui.num_joysticks as isize { + let path = unsafe { + std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickPathForID( + *(ui.joysticks.offset(offset)), + )) + .to_string_lossy() + .to_string() + }; + if path == *assigned_path && !taken[offset as usize] { + joystick_id = unsafe { *(ui.joysticks.offset(offset)) }; + taken[offset as usize] = true; + break; } - unsafe { sdl3_sys::stdinc::SDL_free(joysticks as *mut std::ffi::c_void) }; } + if joystick_id != 0 { let profile_name = ui.config.input.input_profile_binding[i].clone(); let profile = ui.config.input.input_profiles.get(&profile_name).unwrap(); @@ -748,6 +737,9 @@ pub fn init(ui: &mut ui::Ui) { ui.controllers[i].game_controller = gamepad; let properties = unsafe { sdl3_sys::gamepad::SDL_GetGamepadProperties(gamepad) }; + if properties == 0 { + println!("could not get gamepad properties"); + } ui.controllers[i].rumble = unsafe { sdl3_sys::properties::SDL_GetBooleanProperty( properties, @@ -764,6 +756,9 @@ pub fn init(ui: &mut ui::Ui) { ui.controllers[i].joystick = joystick; let properties = unsafe { sdl3_sys::joystick::SDL_GetJoystickProperties(joystick) }; + if properties == 0 { + println!("could not get joystick properties"); + } ui.controllers[i].rumble = unsafe { sdl3_sys::properties::SDL_GetBooleanProperty( properties, From 416d43dee5e1823361a1f28a1f44aa0bd0580860 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 25 Jan 2025 14:16:51 +0100 Subject: [PATCH 0237/1117] small input cleanup --- src/ui/input.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/ui/input.rs b/src/ui/input.rs index df17579..bef3737 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -495,7 +495,6 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { let mut new_controller_axis = [(false, 0i32, 0); PROFILE_SIZE]; let mut last_joystick_axis_result = (false, 0, 0); - let mut last_controller_axis_result = (false, 0, 0); for (key, value) in key_labels.iter() { let mut event: sdl3_sys::events::SDL_Event = Default::default(); while unsafe { sdl3_sys::events::SDL_PollEvent(&mut event) } {} // clear events @@ -528,9 +527,9 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { let axis = unsafe { event.gaxis.axis }; if !open_controllers.is_empty() && axis_value.saturating_abs() > i16::MAX / 2 { let result = (true, axis as i32, axis_value / axis_value.saturating_abs()); - if result != last_controller_axis_result { + if result != last_joystick_axis_result { new_controller_axis[*value] = result; - last_controller_axis_result = result; + last_joystick_axis_result = result; key_set = true } } From 6292459f8b3b75d0a97a305bc26981fb81582c43 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 25 Jan 2025 15:41:58 +0100 Subject: [PATCH 0238/1117] install proper SDL Dependencies (#178) * install proper SDL Dependencies * install proper SDL Dependencies --- .github/workflows/build.yml | 22 ++++++++++++++++++---- .github/workflows/lint.yml | 11 +++++++++-- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 05394b1..cb41b86 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,7 +24,8 @@ jobs: with: target: ${{ matrix.target }} rustflags: "" - - name: Install SDL2 + - name: Install SDL Dependencies + # https://wiki.libsdl.org/SDL3/README/linux#build-dependencies if: matrix.target == 'aarch64-unknown-linux-gnu' run: | cat < deb822sources @@ -82,13 +83,26 @@ jobs: sudo apt-get update sudo apt-get -y dist-upgrade sudo apt-get -y install aptitude - sudo aptitude -y install libsdl2-dev:arm64 g++-aarch64-linux-gnu - - name: Install SDL2 + sudo aptitude -y install build-essential:arm64 git:arm64 make:arm64 \ + pkg-config:arm64 cmake:arm64 ninja-build:arm64 gnome-desktop-testing:arm64 libasound2-dev:arm64 libpulse-dev:arm64 \ + libaudio-dev:arm64 libjack-dev:arm64 libsndio-dev:arm64 libx11-dev:arm64 libxext-dev:arm64 \ + libxrandr-dev:arm64 libxcursor-dev:arm64 libxfixes-dev:arm64 libxi-dev:arm64 libxss-dev:arm64 \ + libxkbcommon-dev:arm64 libdrm-dev:arm64 libgbm-dev:arm64 libgl1-mesa-dev:arm64 libgles2-mesa-dev:arm64 \ + libegl1-mesa-dev:arm64 libdbus-1-dev:arm64 libibus-1.0-dev:arm64 libudev-dev:arm64 fcitx-libs-dev:arm64 \ + libpipewire-0.3-dev:arm64 libwayland-dev:arm64 libdecor-0-dev:arm64 liburing-dev:arm64 g++-aarch64-linux-gnu + - name: Install SDL Dependencies + # https://wiki.libsdl.org/SDL3/README/linux#build-dependencies if: matrix.target == 'x86_64-unknown-linux-gnu' run: | sudo apt-get update sudo apt-get -y dist-upgrade - sudo apt-get -y install libsdl2-dev + sudo apt-get -y install build-essential git make \ + pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \ + libaudio-dev libjack-dev libsndio-dev libx11-dev libxext-dev \ + libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev \ + libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ + libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \ + libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev - name: Set aarch64 linker if: matrix.target == 'aarch64-unknown-linux-gnu' run: echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 4d7c98e..2092299 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -19,10 +19,17 @@ jobs: - uses: actions-rust-lang/setup-rust-toolchain@v1 with: components: clippy, rustfmt - - name: Install SDL2 + - name: Install SDL Dependencies + # https://wiki.libsdl.org/SDL3/README/linux#build-dependencies run: | sudo apt-get update - sudo apt-get -y install libsdl2-dev + sudo apt-get -y install build-essential git make \ + pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \ + libaudio-dev libjack-dev libsndio-dev libx11-dev libxext-dev \ + libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev \ + libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ + libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \ + libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev - name: Rustfmt Check uses: actions-rust-lang/rustfmt@v1 - name: Lint From 6820da889c29f891774d5410d228f3ff5fbc8d5c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 25 Jan 2025 19:00:38 +0100 Subject: [PATCH 0239/1117] add icon for windows (#179) --- data/gopher64.png | Bin 0 -> 168229 bytes src/main.rs | 7 ++++++- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 data/gopher64.png diff --git a/data/gopher64.png b/data/gopher64.png new file mode 100644 index 0000000000000000000000000000000000000000..0b141ae0c3bc8be5def9cc1eb705f1f5d90ceef6 GIT binary patch literal 168229 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%0D}&aRHq`XTwD>ItJs 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 z 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 z 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 Date: Sat, 25 Jan 2025 19:14:20 +0100 Subject: [PATCH 0240/1117] Bump to 0.1.23 (#180) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index e5de0e2..5a2433c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.22" +version = "0.1.23" edition = "2021" rust-version = "1.82" From 75e59ee051c0fdbb3691e494f79f1619b1f62176 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 26 Jan 2025 11:27:33 +0100 Subject: [PATCH 0241/1117] cleanup dir detection (#181) * cleanup dir detection * more * more --- src/device.rs | 13 ++++--------- src/main.rs | 34 ++++++++-------------------------- src/ui.rs | 37 +++++++++++++++++++++++++++++++++++-- src/ui/gui.rs | 42 +++++++++++++++++------------------------- src/ui/storage.rs | 4 ++-- 5 files changed, 66 insertions(+), 64 deletions(-) diff --git a/src/device.rs b/src/device.rs index b56589d..621faaa 100644 --- a/src/device.rs +++ b/src/device.rs @@ -47,12 +47,7 @@ pub mod tlb; pub mod unmapped; pub mod vi; -pub fn run_game( - rom_contents: Vec, - data_dir: std::path::PathBuf, - device: &mut Device, - fullscreen: bool, -) { +pub fn run_game(rom_contents: Vec, device: &mut Device, fullscreen: bool) { cart_rom::init(device, rom_contents); // cart needs to come before rdram // rdram pointer is shared with parallel-rdp @@ -73,7 +68,7 @@ pub fn run_game( vi::init(device); cpu::init(device); - ui::storage::init(&mut device.ui, data_dir); + ui::storage::init(&mut device.ui); ui::storage::load_saves(&mut device.ui, &mut device.netplay); cart_rom::load_rom_save(device); @@ -184,7 +179,7 @@ pub struct Device { } impl Device { - pub fn new(config_dir: std::path::PathBuf) -> Device { + pub fn new() -> Device { let mut byte_swap: usize = 0; let test: [u8; 4] = [1, 2, 3, 4]; // if the host computer is little endian, that means the RDRAM will be stored as little endian @@ -194,7 +189,7 @@ impl Device { } Device { netplay: None, - ui: ui::Ui::new(config_dir), + ui: ui::Ui::new(), byte_swap, cpu: cpu::Cpu { cop0: cop0::Cop0 { diff --git a/src/main.rs b/src/main.rs index ac97e26..a53787a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -66,35 +66,21 @@ struct Args { #[tokio::main] async fn main() { - let exe_path = std::env::current_exe().unwrap(); - let portable_dir = exe_path.parent(); - let portable = portable_dir.unwrap().join("portable.txt").exists(); - let config_dir; - let cache_dir; - let data_dir; - if portable { - config_dir = portable_dir.unwrap().join("portable_data").join("config"); - cache_dir = portable_dir.unwrap().join("portable_data").join("cache"); - data_dir = portable_dir.unwrap().join("portable_data").join("data"); - } else { - config_dir = dirs::config_dir().unwrap().join("gopher64"); - cache_dir = dirs::cache_dir().unwrap().join("gopher64"); - data_dir = dirs::data_dir().unwrap().join("gopher64"); - }; + let dirs = ui::get_dirs(); - let mut result = std::fs::create_dir_all(config_dir.clone()); + let mut result = std::fs::create_dir_all(dirs.config_dir.clone()); if result.is_err() { panic!("could not create config dir: {}", result.err().unwrap()) } - result = std::fs::create_dir_all(cache_dir.clone()); + result = std::fs::create_dir_all(dirs.cache_dir.clone()); if result.is_err() { panic!("could not create cache dir: {}", result.err().unwrap()) } - result = std::fs::create_dir_all(data_dir.clone().join("saves")); + result = std::fs::create_dir_all(dirs.data_dir.clone().join("saves")); if result.is_err() { panic!("could not create data dir: {}", result.err().unwrap()) } - let running_file = cache_dir.join("game_running"); + let running_file = dirs.cache_dir.join("game_running"); if running_file.exists() { result = std::fs::remove_file(running_file); if result.is_err() { @@ -106,7 +92,7 @@ async fn main() { let args_as_strings: Vec = std::env::args().collect(); let args_count = args_as_strings.len(); if args_count > 1 { - let mut device = device::Device::new(config_dir); + let mut device = device::Device::new(); if args.clear_input_bindings { ui::input::clear_bindings(&mut device.ui); @@ -166,7 +152,7 @@ async fn main() { println!("Could not read rom file"); return; } - device::run_game(rom_contents, data_dir, &mut device, args.fullscreen); + device::run_game(rom_contents, &mut device, args.fullscreen); } } else { let options = eframe::NativeOptions { @@ -181,11 +167,7 @@ async fn main() { eframe::run_native( "gopher64", options, - Box::new(|cc| { - Ok(Box::new(ui::gui::GopherEguiApp::new( - cc, config_dir, cache_dir, data_dir, - ))) - }), + Box::new(|cc| Ok(Box::new(ui::gui::GopherEguiApp::new(cc)))), ) .unwrap(); } diff --git a/src/ui.rs b/src/ui.rs index bfd3e12..0fd4ac8 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -6,7 +6,14 @@ pub mod storage; pub mod video; pub mod vru; +pub struct Dirs { + pub config_dir: std::path::PathBuf, + pub cache_dir: std::path::PathBuf, + pub data_dir: std::path::PathBuf, +} + pub struct Ui { + pub dirs: Dirs, pub keyboard_state: *const bool, pub controllers: [input::Controllers; 4], pub config_file_path: std::path::PathBuf, @@ -50,8 +57,32 @@ pub fn sdl_init(flag: sdl3_sys::init::SDL_InitFlags) { } } +pub fn get_dirs() -> Dirs { + let exe_path = std::env::current_exe().unwrap(); + let portable_dir = exe_path.parent(); + let portable = portable_dir.unwrap().join("portable.txt").exists(); + let config_dir; + let cache_dir; + let data_dir; + if portable { + config_dir = portable_dir.unwrap().join("portable_data").join("config"); + cache_dir = portable_dir.unwrap().join("portable_data").join("cache"); + data_dir = portable_dir.unwrap().join("portable_data").join("data"); + } else { + config_dir = dirs::config_dir().unwrap().join("gopher64"); + cache_dir = dirs::cache_dir().unwrap().join("gopher64"); + data_dir = dirs::data_dir().unwrap().join("gopher64"); + }; + + Dirs { + config_dir, + cache_dir, + data_dir, + } +} + impl Ui { - pub fn new(config_dir: std::path::PathBuf) -> Ui { + pub fn new() -> Ui { sdl_init(sdl3_sys::init::SDL_INIT_GAMEPAD); let mut num_joysticks = 0; let joysticks = unsafe { sdl3_sys::joystick::SDL_GetJoysticks(&mut num_joysticks) }; @@ -59,7 +90,8 @@ impl Ui { panic!("Could not get joystick list"); } - let config_file_path = config_dir.join("config.json"); + let dirs = get_dirs(); + let config_file_path = dirs.config_dir.join("config.json"); let config_file = std::fs::read(config_file_path.clone()); let mut config_map = config::Config::new(); if config_file.is_ok() { @@ -123,6 +155,7 @@ impl Ui { audio_device: 0, num_joysticks, joysticks, + dirs, } } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 4b00dbb..4d71590 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -5,9 +5,7 @@ use eframe::egui; pub mod gui_netplay; pub struct GopherEguiApp { - config_dir: std::path::PathBuf, - cache_dir: std::path::PathBuf, - data_dir: std::path::PathBuf, + dirs: ui::Dirs, configure_profile: bool, profile_name: String, controller_names: Vec, @@ -79,14 +77,9 @@ pub fn get_controller_paths(game_ui: &ui::Ui) -> Vec { } impl GopherEguiApp { - pub fn new( - cc: &eframe::CreationContext<'_>, - config_dir: std::path::PathBuf, - cache_dir: std::path::PathBuf, - data_dir: std::path::PathBuf, - ) -> GopherEguiApp { + pub fn new(cc: &eframe::CreationContext<'_>) -> GopherEguiApp { add_japanese_font(&cc.egui_ctx); - let game_ui = ui::Ui::new(config_dir.clone()); + let game_ui = ui::Ui::new(); let controller_paths = get_controller_paths(&game_ui); let mut selected_controller = [-1, -1, -1, -1]; @@ -107,9 +100,6 @@ impl GopherEguiApp { } } GopherEguiApp { - cache_dir: cache_dir.clone(), - config_dir: config_dir.clone(), - data_dir: data_dir.clone(), configure_profile: false, profile_name: "".to_string(), selected_profile: game_ui.config.input.input_profile_binding.clone(), @@ -128,6 +118,11 @@ impl GopherEguiApp { vru_word_notifier: None, vru_word_list: Vec::new(), netplay: Default::default(), + dirs: ui::Dirs { + config_dir: game_ui.dirs.config_dir.clone(), + cache_dir: game_ui.dirs.cache_dir.clone(), + data_dir: game_ui.dirs.data_dir.clone(), + }, } } } @@ -154,7 +149,7 @@ fn save_config(game_ui: &mut ui::Ui, save_config_items: SaveConfig) { impl Drop for GopherEguiApp { fn drop(&mut self) { - let mut game_ui = ui::Ui::new(self.config_dir.clone()); + let mut game_ui = ui::Ui::new(); let save_config_items = SaveConfig { selected_controller: self.selected_controller, selected_profile: self.selected_profile.clone(), @@ -181,10 +176,9 @@ fn configure_profile(app: &mut GopherEguiApp, ctx: &egui::Context) { ui.horizontal(|ui| { if ui.button("Configure Profile").clicked() { let profile_name = app.profile_name.clone(); - let config_dir = app.config_dir.clone(); let dinput = app.dinput; tokio::spawn(async move { - let mut game_ui = ui::Ui::new(config_dir); + let mut game_ui = ui::Ui::new(); ui::input::configure_input_profile(&mut game_ui, profile_name, dinput); }); app.configure_profile = false; @@ -255,12 +249,10 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { let integer_scaling = app.integer_scaling; let fullscreen = app.fullscreen; let emulate_vru = app.emulate_vru; - let config_dir = app.config_dir.clone(); - let cache_dir = app.cache_dir.clone(); - let data_dir = app.data_dir.clone(); let peer_addr; let session; let player_number; + let cache_dir = app.dirs.cache_dir.clone(); if app.netplay.player_name.is_empty() { task = Some(rfd::AsyncFileDialog::new().pick_file()); @@ -317,7 +309,7 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { if result.is_err() { panic!("could not create running file: {}", result.err().unwrap()) } - let mut device = device::Device::new(config_dir); + let mut device = device::Device::new(); let save_config_items = SaveConfig { selected_controller, @@ -338,7 +330,7 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { netplay_error_notifier, gui_ctx, )); - device::run_game(rom_contents, data_dir, &mut device, fullscreen); + device::run_game(rom_contents, &mut device, fullscreen); netplay::close(&mut device); } else { if emulate_vru { @@ -351,7 +343,7 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { if rom_contents.is_empty() { println!("Could not read rom file"); } else { - device::run_game(rom_contents, data_dir, &mut device, fullscreen); + device::run_game(rom_contents, &mut device, fullscreen); } } let result = std::fs::remove_file(running_file.clone()); @@ -403,7 +395,7 @@ impl eframe::App for GopherEguiApp { } if ui.button("Netplay: Create Session").clicked() - && !self.cache_dir.join("game_running").exists() + && !self.dirs.cache_dir.join("game_running").exists() { self.netplay.create = true; } @@ -411,13 +403,13 @@ impl eframe::App for GopherEguiApp { ui.end_row(); if ui.button("Configure Input Profile").clicked() - && !self.cache_dir.join("game_running").exists() + && !self.dirs.cache_dir.join("game_running").exists() { self.configure_profile = true; } if ui.button("Netplay: Join Session").clicked() - && !self.cache_dir.join("game_running").exists() + && !self.dirs.cache_dir.join("game_running").exists() { self.netplay.join = true; } diff --git a/src/ui/storage.rs b/src/ui/storage.rs index 88d4c00..ea3a561 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -88,11 +88,11 @@ fn get_save_type(game_id: &str) -> Vec { } } -pub fn init(ui: &mut ui::Ui, data_dir: std::path::PathBuf) { +pub fn init(ui: &mut ui::Ui) { let id = ui.game_id.as_str(); ui.save_type = get_save_type(id); - let base_path = data_dir.join("saves"); + let base_path = ui.dirs.data_dir.join("saves"); ui.paths.eep_file_path.clone_from(&base_path); ui.paths From 9e88343c6b96502c921665a0a7ca13d73447d4a2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 26 Jan 2025 12:26:24 +0100 Subject: [PATCH 0242/1117] check accept value of netplay begin_game message (#182) --- src/ui/gui/gui_netplay.rs | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index 99f2f41..128f13c 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -757,17 +757,22 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { } } app.netplay.player_number = player as u8; - socket.close(None).unwrap(); - loop { - match socket.read() { - Err(tungstenite::Error::ConnectionClosed) => break, - _ => continue, - }; - } - gui::open_rom(app, ctx); - app.netplay = Default::default(); - return; + if message.accept.unwrap() == 0 { + socket.close(None).unwrap(); + loop { + match socket.read() { + Err(tungstenite::Error::ConnectionClosed) => break, + _ => continue, + }; + } + + gui::open_rom(app, ctx); + app.netplay = Default::default(); + return; + } else { + app.netplay.error = message.message.unwrap(); + } } } else { app.netplay.error = message.message.unwrap(); From b1bb96c7d29fbb03da8863602af27b68f927b4d6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 26 Jan 2025 15:00:49 +0100 Subject: [PATCH 0243/1117] use binary format for rom saves (#183) * use binary format for rom saves * more --- Cargo.toml | 1 + src/device/cart_rom.rs | 8 +++----- src/ui.rs | 2 +- src/ui/storage.rs | 8 ++++---- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 5a2433c..6792ae2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,6 +25,7 @@ mimalloc = "0.1" regex = "1.11" tungstenite = "0.26" socket2 = "0.5" +postcard = { version = "1.1", features = ["use-std"] } clap = { version = "4.4", features = ["derive"] } [dependencies.reqwest] diff --git a/src/device/cart_rom.rs b/src/device/cart_rom.rs index 96afe9a..600461f 100644 --- a/src/device/cart_rom.rs +++ b/src/device/cart_rom.rs @@ -85,9 +85,8 @@ pub fn dma_read( device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap]; device.ui.saves.romsave.0.insert( - (cart_addr + i).to_string(), - serde_json::to_value(device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap]) - .unwrap(), + cart_addr + i, + device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap], ); } } @@ -139,8 +138,7 @@ pub fn load_rom_save(device: &mut device::Device) { return; } for (key, value) in device.ui.saves.romsave.0.iter() { - device.cart.rom[key.parse::().unwrap()] = - serde_json::from_value(value.clone()).unwrap() + device.cart.rom[*key as usize] = *value } } diff --git a/src/ui.rs b/src/ui.rs index 0fd4ac8..8e6c425 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -142,7 +142,7 @@ impl Ui { sram: (Vec::new(), false), flash: (Vec::new(), false), mempak: (Vec::new(), false), - romsave: (serde_json::Map::new(), false), + romsave: (std::collections::HashMap::new(), false), }, pak_audio: audio::PakAudio { mempak: include_bytes!("../data/mempak.wav").to_vec(), diff --git a/src/ui/storage.rs b/src/ui/storage.rs index ea3a561..8015726 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -27,7 +27,7 @@ pub struct Saves { pub sram: (Vec, bool), pub flash: (Vec, bool), pub mempak: (Vec, bool), - pub romsave: (serde_json::Map, bool), + pub romsave: (std::collections::HashMap, bool), } fn get_save_type(game_id: &str) -> Vec { @@ -142,7 +142,7 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { // can't do romsaves with the current netplay implementation let romsave = std::fs::read(&mut ui.paths.romsave_file_path); if romsave.is_ok() { - ui.saves.romsave.0 = serde_json::from_slice(romsave.unwrap().as_ref()).unwrap(); + ui.saves.romsave.0 = postcard::from_bytes(romsave.unwrap().as_ref()).unwrap(); } } } @@ -203,8 +203,8 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { } fn write_rom_save(ui: &ui::Ui) { - let f = std::fs::File::create(ui.paths.romsave_file_path.clone()).unwrap(); - serde_json::to_writer(f, &ui.saves.romsave.0).unwrap(); + let data = postcard::to_stdvec(&ui.saves.romsave.0).unwrap(); + std::fs::write(ui.paths.romsave_file_path.clone(), data).unwrap(); } pub fn write_saves(ui: &ui::Ui, netplay: &Option) { From 333865e7de65bd8a075c17fab2690017d47dbbc5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 26 Jan 2025 17:47:17 +0100 Subject: [PATCH 0244/1117] dont create new UI on close (#184) * dont create new UI on close * dont create new UI on close * more * more * more * more * more --- src/main.rs | 4 ++-- src/ui.rs | 19 +---------------- src/ui/config.rs | 22 ++++++++++++++++++++ src/ui/gui.rs | 43 ++++++++++++++++++++++++--------------- src/ui/gui/gui_netplay.rs | 2 +- 5 files changed, 53 insertions(+), 37 deletions(-) diff --git a/src/main.rs b/src/main.rs index a53787a..f1c549d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -68,7 +68,7 @@ struct Args { async fn main() { let dirs = ui::get_dirs(); - let mut result = std::fs::create_dir_all(dirs.config_dir.clone()); + let mut result = std::fs::create_dir_all(dirs.config_dir); if result.is_err() { panic!("could not create config dir: {}", result.err().unwrap()) } @@ -76,7 +76,7 @@ async fn main() { if result.is_err() { panic!("could not create cache dir: {}", result.err().unwrap()) } - result = std::fs::create_dir_all(dirs.data_dir.clone().join("saves")); + result = std::fs::create_dir_all(dirs.data_dir.join("saves")); if result.is_err() { panic!("could not create data dir: {}", result.err().unwrap()) } diff --git a/src/ui.rs b/src/ui.rs index 8e6c425..125226a 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -16,7 +16,6 @@ pub struct Ui { pub dirs: Dirs, pub keyboard_state: *const bool, pub controllers: [input::Controllers; 4], - pub config_file_path: std::path::PathBuf, pub config: config::Config, pub save_type: Vec, pub game_id: String, @@ -39,15 +38,9 @@ impl Drop for Ui { sdl3_sys::stdinc::SDL_free(self.joysticks as *mut std::ffi::c_void); sdl3_sys::init::SDL_Quit(); } - write_config(self); } } -fn write_config(ui: &Ui) { - let f = std::fs::File::create(ui.config_file_path.clone()).unwrap(); - serde_json::to_writer_pretty(f, &ui.config).unwrap(); -} - pub fn sdl_init(flag: sdl3_sys::init::SDL_InitFlags) { unsafe { let init = sdl3_sys::init::SDL_WasInit(0); @@ -91,15 +84,6 @@ impl Ui { } let dirs = get_dirs(); - let config_file_path = dirs.config_dir.join("config.json"); - let config_file = std::fs::read(config_file_path.clone()); - let mut config_map = config::Config::new(); - if config_file.is_ok() { - let result = serde_json::from_slice(config_file.unwrap().as_ref()); - if result.is_ok() { - config_map = result.unwrap(); - } - } Ui { controllers: [ @@ -125,8 +109,7 @@ impl Ui { }, ], keyboard_state: std::ptr::null_mut(), - config_file_path, - config: config_map, + config: config::Config::new(), save_type: vec![], game_id: String::new(), game_hash: String::new(), diff --git a/src/ui/config.rs b/src/ui/config.rs index 5864959..ad8b4cc 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -31,8 +31,30 @@ pub struct Config { pub video: Video, } +impl Drop for Config { + fn drop(&mut self) { + write_config(self); + } +} + +fn write_config(config: &Config) { + let dirs = ui::get_dirs(); + let file_path = dirs.config_dir.join("config.json"); + let f = std::fs::File::create(file_path).unwrap(); + serde_json::to_writer_pretty(f, &config).unwrap(); +} + impl Config { pub fn new() -> Config { + let dirs = ui::get_dirs(); + let file_path = dirs.config_dir.join("config.json"); + let config_file = std::fs::read(file_path); + if config_file.is_ok() { + let result = serde_json::from_slice(config_file.unwrap().as_ref()); + if let Ok(result) = result { + return result; + } + } let mut input_profiles = std::collections::HashMap::new(); input_profiles.insert("default".to_string(), ui::input::get_default_profile()); Config { diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 4d71590..fa41e41 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -2,6 +2,7 @@ use crate::device; use crate::netplay; use crate::ui; use eframe::egui; + pub mod gui_netplay; pub struct GopherEguiApp { @@ -13,6 +14,7 @@ pub struct GopherEguiApp { selected_profile: [String; 4], input_profiles: Vec, controller_enabled: [bool; 4], + controller_paths: Vec, upscale: bool, integer_scaling: bool, fullscreen: bool, @@ -39,7 +41,7 @@ struct SaveConfig { fn get_input_profiles(game_ui: &ui::Ui) -> Vec { let mut profiles = vec![]; for key in game_ui.config.input.input_profiles.keys() { - profiles.push((*key).clone()) + profiles.push(key.clone()) } profiles } @@ -59,7 +61,7 @@ pub fn get_controller_names(game_ui: &ui::Ui) -> Vec { controllers } -pub fn get_controller_paths(game_ui: &ui::Ui) -> Vec { +fn get_controller_paths(game_ui: &ui::Ui) -> Vec { let mut controller_paths: Vec = vec![]; for offset in 0..game_ui.num_joysticks as isize { @@ -113,6 +115,7 @@ impl GopherEguiApp { emulate_vru: game_ui.config.input.emulate_vru, show_vru_dialog: false, dinput: false, + controller_paths, netplay_error_receiver: None, vru_window_receiver: None, vru_word_notifier: None, @@ -127,29 +130,31 @@ impl GopherEguiApp { } } -fn save_config(game_ui: &mut ui::Ui, save_config_items: SaveConfig) { - let controller_paths = get_controller_paths(game_ui); +fn save_config( + config: &mut ui::config::Config, + controller_paths: Vec, + save_config_items: SaveConfig, +) { for (pos, item) in save_config_items.selected_controller.iter().enumerate() { if *item != -1 { - game_ui.config.input.controller_assignment[pos] = + config.input.controller_assignment[pos] = Some(controller_paths[*item as usize].clone()); } else { - game_ui.config.input.controller_assignment[pos] = None + config.input.controller_assignment[pos] = None } } - game_ui.config.input.input_profile_binding = save_config_items.selected_profile; - game_ui.config.input.controller_enabled = save_config_items.controller_enabled; + config.input.input_profile_binding = save_config_items.selected_profile; + config.input.controller_enabled = save_config_items.controller_enabled; - game_ui.config.video.upscale = save_config_items.upscale; - game_ui.config.video.integer_scaling = save_config_items.integer_scaling; - game_ui.config.video.fullscreen = save_config_items.fullscreen; - game_ui.config.input.emulate_vru = save_config_items.emulate_vru; + config.video.upscale = save_config_items.upscale; + config.video.integer_scaling = save_config_items.integer_scaling; + config.video.fullscreen = save_config_items.fullscreen; + config.input.emulate_vru = save_config_items.emulate_vru; } impl Drop for GopherEguiApp { fn drop(&mut self) { - let mut game_ui = ui::Ui::new(); let save_config_items = SaveConfig { selected_controller: self.selected_controller, selected_profile: self.selected_profile.clone(), @@ -159,7 +164,12 @@ impl Drop for GopherEguiApp { fullscreen: self.fullscreen, emulate_vru: self.emulate_vru, }; - save_config(&mut game_ui, save_config_items); + let mut config = ui::config::Config::new(); + save_config( + &mut config, + self.controller_paths.clone(), + save_config_items, + ); } } @@ -253,6 +263,7 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { let session; let player_number; let cache_dir = app.dirs.cache_dir.clone(); + let controller_paths = app.controller_paths.clone(); if app.netplay.player_name.is_empty() { task = Some(rfd::AsyncFileDialog::new().pick_file()); @@ -320,7 +331,7 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { fullscreen, emulate_vru, }; - save_config(&mut device.ui, save_config_items); + save_config(&mut device.ui.config, controller_paths, save_config_items); if netplay { device.netplay = Some(netplay::init( @@ -346,7 +357,7 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { device::run_game(rom_contents, &mut device, fullscreen); } } - let result = std::fs::remove_file(running_file.clone()); + let result = std::fs::remove_file(running_file); if result.is_err() { panic!("could not remove running file: {}", result.err().unwrap()) } diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index 128f13c..fc1550b 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -347,7 +347,7 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { fn get_sessions(app: &mut GopherEguiApp, ctx: &egui::Context) { if app.netplay.have_sessions.is_some() - && app.netplay.server != app.netplay.have_sessions.as_ref().unwrap().clone() + && app.netplay.server != *app.netplay.have_sessions.as_ref().unwrap() { // User has changed the server app.netplay.have_sessions = None; From a2ba5baaa8ef1b24a02baa675d8f05c6856ed4b6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 26 Jan 2025 19:13:19 +0100 Subject: [PATCH 0245/1117] move sse2neon to versioned folder (#185) * move sse2neon to versioned folder * more --- build.rs | 2 +- src/compat/aarch64.c | 2 +- src/compat/{ => sse2neon/v1.8.0}/sse2neon.h | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename src/compat/{ => sse2neon/v1.8.0}/sse2neon.h (100%) diff --git a/build.rs b/build.rs index 1a8fab7..7141145 100644 --- a/build.rs +++ b/build.rs @@ -109,7 +109,7 @@ fn main() { if arch == "aarch64" { let simd_bindings = bindgen::Builder::default() - .header("src/compat/sse2neon.h") + .header("src/compat/sse2neon/v1.8.0/sse2neon.h") .allowlist_function("_mm_setzero_si128") .allowlist_function("_mm_set_epi8") .allowlist_function("_mm_movemask_epi8") diff --git a/src/compat/aarch64.c b/src/compat/aarch64.c index 2edac65..fe99f6c 100644 --- a/src/compat/aarch64.c +++ b/src/compat/aarch64.c @@ -1,4 +1,4 @@ -#include "src/compat/sse2neon.h" +#include "src/compat/sse2neon/v1.8.0/sse2neon.h" // Static wrappers diff --git a/src/compat/sse2neon.h b/src/compat/sse2neon/v1.8.0/sse2neon.h similarity index 100% rename from src/compat/sse2neon.h rename to src/compat/sse2neon/v1.8.0/sse2neon.h From 1f746c5b3606cc101086c8e70433661e451846e4 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 26 Jan 2025 22:17:50 +0100 Subject: [PATCH 0246/1117] Use SDL_Vulkan_GetVkGetInstanceProcAddr (#186) * static link MoltenVK * static link MoltenVK * test * test2 * test2 * more * more * more --- parallel-rdp/interface.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index df9d276..c6635c0 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -3,6 +3,7 @@ #include "rdp_device.hpp" #include "interface.hpp" #include "spirv.hpp" +#include using namespace Vulkan; @@ -175,7 +176,7 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_sc wsi->set_present_mode(window_vsync ? PresentMode::SyncToVBlank : PresentMode::UnlockedMaybeTear); wsi->set_backbuffer_srgb(false); Context::SystemHandles handles = {}; - if (!::Vulkan::Context::init_loader(nullptr)) + if (!::Vulkan::Context::init_loader((PFN_vkGetInstanceProcAddr)SDL_Vulkan_GetVkGetInstanceProcAddr())) { rdp_close(); } From 3dc28cc603258b081895238502aa240c4c5d82d5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 27 Jan 2025 07:36:53 +0100 Subject: [PATCH 0247/1117] Don't create UI in same thread as egui (#187) --- src/main.rs | 16 +++++++++++++++- src/ui/gui.rs | 45 +++++++++++++++++++-------------------------- 2 files changed, 34 insertions(+), 27 deletions(-) diff --git a/src/main.rs b/src/main.rs index f1c549d..34afd2f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -164,10 +164,24 @@ async fn main() { ), ..Default::default() }; + + let controllers_paths; + let controller_names; + { + let game_ui = ui::Ui::new(); + controllers_paths = gui::get_controller_paths(&game_ui); + controller_names = gui::get_controller_names(&game_ui); + } eframe::run_native( "gopher64", options, - Box::new(|cc| Ok(Box::new(ui::gui::GopherEguiApp::new(cc)))), + Box::new(|cc| { + Ok(Box::new(ui::gui::GopherEguiApp::new( + cc, + controllers_paths, + controller_names, + ))) + }), ) .unwrap(); } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index fa41e41..5d701f8 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -38,9 +38,9 @@ struct SaveConfig { emulate_vru: bool, } -fn get_input_profiles(game_ui: &ui::Ui) -> Vec { +fn get_input_profiles(config: &ui::config::Config) -> Vec { let mut profiles = vec![]; - for key in game_ui.config.input.input_profiles.keys() { + for key in config.input.input_profiles.keys() { profiles.push(key.clone()) } profiles @@ -61,7 +61,7 @@ pub fn get_controller_names(game_ui: &ui::Ui) -> Vec { controllers } -fn get_controller_paths(game_ui: &ui::Ui) -> Vec { +pub fn get_controller_paths(game_ui: &ui::Ui) -> Vec { let mut controller_paths: Vec = vec![]; for offset in 0..game_ui.num_joysticks as isize { @@ -79,19 +79,16 @@ fn get_controller_paths(game_ui: &ui::Ui) -> Vec { } impl GopherEguiApp { - pub fn new(cc: &eframe::CreationContext<'_>) -> GopherEguiApp { + pub fn new( + cc: &eframe::CreationContext<'_>, + controller_paths: Vec, + controller_names: Vec, + ) -> GopherEguiApp { add_japanese_font(&cc.egui_ctx); - let game_ui = ui::Ui::new(); - let controller_paths = get_controller_paths(&game_ui); + let config = ui::config::Config::new(); let mut selected_controller = [-1, -1, -1, -1]; - for (pos, item) in game_ui - .config - .input - .controller_assignment - .iter() - .enumerate() - { + for (pos, item) in config.input.controller_assignment.iter().enumerate() { if item.is_some() { for (path_pos, path) in controller_paths.iter().enumerate() { if item.as_deref().unwrap() == *path { @@ -104,15 +101,15 @@ impl GopherEguiApp { GopherEguiApp { configure_profile: false, profile_name: "".to_string(), - selected_profile: game_ui.config.input.input_profile_binding.clone(), + selected_profile: config.input.input_profile_binding.clone(), selected_controller, - controller_names: get_controller_names(&game_ui), - input_profiles: get_input_profiles(&game_ui), - controller_enabled: game_ui.config.input.controller_enabled, - upscale: game_ui.config.video.upscale, - integer_scaling: game_ui.config.video.integer_scaling, - fullscreen: game_ui.config.video.fullscreen, - emulate_vru: game_ui.config.input.emulate_vru, + controller_names, + input_profiles: get_input_profiles(&config), + controller_enabled: config.input.controller_enabled, + upscale: config.video.upscale, + integer_scaling: config.video.integer_scaling, + fullscreen: config.video.fullscreen, + emulate_vru: config.input.emulate_vru, show_vru_dialog: false, dinput: false, controller_paths, @@ -121,11 +118,7 @@ impl GopherEguiApp { vru_word_notifier: None, vru_word_list: Vec::new(), netplay: Default::default(), - dirs: ui::Dirs { - config_dir: game_ui.dirs.config_dir.clone(), - cache_dir: game_ui.dirs.cache_dir.clone(), - data_dir: game_ui.dirs.data_dir.clone(), - }, + dirs: ui::get_dirs(), } } } From 2148b1c198222bbfb4c0f01f1c1d4d3b06aad5b3 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 27 Jan 2025 08:52:29 +0100 Subject: [PATCH 0248/1117] Use github arm runner (#188) * Use github arm runner * more --- .github/workflows/build.yml | 80 ++++--------------------------------- 1 file changed, 7 insertions(+), 73 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cb41b86..6c40fcd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,11 +11,15 @@ env: jobs: build-linux: - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: - target: [x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu] + include: + - os: ubuntu-24.04 + target: x86_64-unknown-linux-gnu + - os: ubuntu-24.04-arm + target: aarch64-unknown-linux-gnu steps: - uses: actions/checkout@v4 with: @@ -26,73 +30,6 @@ jobs: rustflags: "" - name: Install SDL Dependencies # https://wiki.libsdl.org/SDL3/README/linux#build-dependencies - if: matrix.target == 'aarch64-unknown-linux-gnu' - run: | - cat < deb822sources - Types: deb - URIs: http://archive.ubuntu.com/ubuntu/ - Suites: noble - Components: main multiverse universe - Architectures: amd64 - - Types: deb - URIs: http://security.ubuntu.com/ubuntu/ - Suites: noble-security - Components: main multiverse universe - Architectures: amd64 - - Types: deb - URIs: http://archive.ubuntu.com/ubuntu/ - Suites: noble-updates - Components: main multiverse universe - Architectures: amd64 - - Types: deb - URIs: http://archive.ubuntu.com/ubuntu/ - Suites: noble-backports - Components: main multiverse universe - Architectures: amd64 - - Types: deb - URIs: http://ports.ubuntu.com/ - Suites: noble - Components: main multiverse universe - Architectures: arm64 - - Types: deb - URIs: http://ports.ubuntu.com/ - Suites: noble-security - Components: main multiverse universe - Architectures: arm64 - - Types: deb - URIs: http://ports.ubuntu.com/ - Suites: noble-updates - Components: main multiverse universe - Architectures: arm64 - - Types: deb - URIs: http://ports.ubuntu.com/ - Suites: noble-backports - Components: main multiverse universe - Architectures: arm64 - EOF - - sudo mv deb822sources /etc/apt/sources.list.d/ubuntu.sources - sudo dpkg --add-architecture arm64 - sudo apt-get update - sudo apt-get -y dist-upgrade - sudo apt-get -y install aptitude - sudo aptitude -y install build-essential:arm64 git:arm64 make:arm64 \ - pkg-config:arm64 cmake:arm64 ninja-build:arm64 gnome-desktop-testing:arm64 libasound2-dev:arm64 libpulse-dev:arm64 \ - libaudio-dev:arm64 libjack-dev:arm64 libsndio-dev:arm64 libx11-dev:arm64 libxext-dev:arm64 \ - libxrandr-dev:arm64 libxcursor-dev:arm64 libxfixes-dev:arm64 libxi-dev:arm64 libxss-dev:arm64 \ - libxkbcommon-dev:arm64 libdrm-dev:arm64 libgbm-dev:arm64 libgl1-mesa-dev:arm64 libgles2-mesa-dev:arm64 \ - libegl1-mesa-dev:arm64 libdbus-1-dev:arm64 libibus-1.0-dev:arm64 libudev-dev:arm64 fcitx-libs-dev:arm64 \ - libpipewire-0.3-dev:arm64 libwayland-dev:arm64 libdecor-0-dev:arm64 liburing-dev:arm64 g++-aarch64-linux-gnu - - name: Install SDL Dependencies - # https://wiki.libsdl.org/SDL3/README/linux#build-dependencies - if: matrix.target == 'x86_64-unknown-linux-gnu' run: | sudo apt-get update sudo apt-get -y dist-upgrade @@ -103,9 +40,6 @@ jobs: libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \ libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev - - name: Set aarch64 linker - if: matrix.target == 'aarch64-unknown-linux-gnu' - run: echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV - name: Build run: | cargo build --release -v --target=${{ matrix.target }} @@ -139,7 +73,7 @@ jobs: path: target/${{ matrix.target }}/release/gopher64.exe build-macos: - runs-on: macos-latest + runs-on: macos-14 strategy: fail-fast: false matrix: From cbc9045ad4bdc9e58b9f26a9e48e099f119e833d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 27 Jan 2025 12:02:42 +0100 Subject: [PATCH 0249/1117] print error message when sdl fails --- src/ui.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ui.rs b/src/ui.rs index 125226a..96ee1d6 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -45,7 +45,10 @@ pub fn sdl_init(flag: sdl3_sys::init::SDL_InitFlags) { unsafe { let init = sdl3_sys::init::SDL_WasInit(0); if init & flag == 0 && !sdl3_sys::init::SDL_InitSubSystem(flag) { - panic!("Could not initialize SDL subsystem: {}", flag); + let err = std::ffi::CStr::from_ptr(sdl3_sys::error::SDL_GetError()) + .to_str() + .unwrap(); + panic!("Could not initialize SDL subsystem: {}, {}", flag, err); } } } From 6f3393418084b2f14ddf78c1a815ccff5256054c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 27 Jan 2025 18:02:06 +0100 Subject: [PATCH 0250/1117] on mac, run game in new process (#189) * on mac, run game in new process * more * more * more * remove tokio * clippy * formatting * more * more * more * more * more * more * more * more * more --- Cargo.toml | 9 +- src/device/controller/vru.rs | 463 +++++++----------------------- src/device/rdram.rs | 4 +- src/device/rsp_su_instructions.rs | 2 +- src/main.rs | 3 +- src/netplay.rs | 6 +- src/ui/gui.rs | 123 +++++--- src/ui/gui/gui_netplay.rs | 104 ++++--- src/ui/vru.rs | 6 +- 9 files changed, 243 insertions(+), 477 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 6792ae2..aaa6b12 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,8 +17,8 @@ serde_json = "1.0" eframe = "0.30" sha2 = "0.10" rusttype = "0.9" -tokio = { version = "1.43", features = ["rt-multi-thread", "macros"] } sdl3-sys = { version = "0.4", features = ["build-from-source-static"] } +rfd = "0.15" spin_sleep = "1.3" encoding_rs = "0.8" mimalloc = "0.1" @@ -31,12 +31,7 @@ clap = { version = "4.4", features = ["derive"] } [dependencies.reqwest] version = "0.12" default-features = false -features = ["http2","rustls-tls","charset","json"] - -[dependencies.rfd] -version = "0.15" -default-features = false -features = ["xdg-portal","tokio"] +features = ["http2","rustls-tls","charset","json","blocking"] [build-dependencies] winres = "0.1" diff --git a/src/device/controller/vru.rs b/src/device/controller/vru.rs index 13b4a9d..3fd8915 100644 --- a/src/device/controller/vru.rs +++ b/src/device/controller/vru.rs @@ -26,8 +26,8 @@ pub struct Vru { pub words: Vec, pub talking: bool, pub word_mappings: HashMap, - pub window_notifier: Option>>, - pub word_receiver: Option>, + pub window_notifier: Option>>, + pub word_receiver: Option>, pub gui_ctx: Option, } @@ -187,7 +187,7 @@ pub fn process(device: &mut device::Device, channel: usize) { ui::vru::prompt_for_match( &device.vru.words, device.vru.window_notifier.as_ref().unwrap(), - device.vru.word_receiver.as_mut().unwrap(), + device.vru.word_receiver.as_ref().unwrap(), device.vru.gui_ctx.as_ref().unwrap(), ) } else { @@ -288,10 +288,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03A50024000303CF00A80003035D001200F900EA"), String::from("pikachu"), ), - ( - String::from("040801740024"), - String::from("hey!"), - ), + (String::from("040801740024"), String::from("hey!")), ( String::from("03CF00C603360405000F0234"), String::from("come-here"), @@ -324,10 +321,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("02E2006903FC000303B402E2018F"), String::from("lets-play"), ), - ( - String::from("040B00C002EB0213"), - String::from("hello"), - ), + (String::from("040B00C002EB0213"), String::from("hello")), ( String::from("043B0213000303AB00A5034803FC006903FC00A503270024"), String::from("open-sesame"), @@ -356,14 +350,8 @@ fn create_word_mappings(device: &mut device::Device) { String::from("042F01AD033603FC012602F10024"), String::from("im-sorry"), ), - ( - String::from("03FC023A0024"), - String::from("sorry"), - ), - ( - String::from("03FC012602F10024"), - String::from("sorry"), - ), + (String::from("03FC023A0024"), String::from("sorry")), + (String::from("03FC012602F10024"), String::from("sorry")), ( String::from("042F01B00003036000ED03DB030C00EA"), String::from("i-choose-you"), @@ -392,10 +380,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03A50024000303D8000303CF00C9"), String::from("pikka"), ), - ( - String::from("03A50024000303CF00A8"), - String::from("pika"), - ), + (String::from("03A50024000303CF00A8"), String::from("pika")), ( String::from("03A50024000303CF00A8000303A50024000303CF00A8"), String::from("pikapika"), @@ -440,10 +425,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03F600C60348000603870234"), String::from("thunder"), ), - ( - String::from("03F600C6033F0234"), - String::from("thunder"), - ), + (String::from("03F600C6033F0234"), String::from("thunder")), ( String::from("0432009F02E20066000303D8000303C602F10045000303D802F40087000303C6"), String::from("electric-rat"), @@ -489,7 +471,9 @@ fn create_word_mappings(device: &mut device::Device) { String::from("boing-boing"), ), ( - String::from("043801290348000303C000ED036C00A5033C0066000303D803FC000303C603FC000303BA018F00060366"), + String::from( + "043801290348000303C000ED036C00A5033C0066000303D803FC000303C603FC000303BA018F00060366", + ), String::from("on-to-the-next-stage!"), ), ( @@ -516,10 +500,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("039F020A02EE0006038700A5033C0087000303AB009F02EE"), String::from("golden-apple"), ), - ( - String::from("03A5002400030360"), - String::from("peach"), - ), + (String::from("03A5002400030360"), String::from("peach")), ( String::from("03FC000303C602FD012C00060372029D0024"), String::from("strawberry"), @@ -556,10 +537,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("032101A702EE00060390040B02340006037E"), String::from("wild-herb"), ), - ( - String::from("03D502D60348"), - String::from("corn"), - ), + (String::from("03D502D60348"), String::from("corn")), ( String::from("03B1014D000303B4000303D502D60348"), String::from("popcorn"), @@ -592,18 +570,12 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03CC008102F700A8000303C6"), String::from("carrot"), ), - ( - String::from("03CC02A300A8000303C6"), - String::from("carrot"), - ), + (String::from("03CC02A300A8000303C6"), String::from("carrot")), ( String::from("043200C60339030900A50348"), String::from("onion"), ), - ( - String::from("043200A5033F00A50348"), - String::from("onion"), - ), + (String::from("043200A5033F00A50348"), String::from("onion")), ( String::from("043501080339030900A50348"), String::from("onion"), @@ -621,7 +593,9 @@ fn create_word_mappings(device: &mut device::Device) { String::from("sweet-potato"), ), ( - String::from("0411014D000303C603FC03150024000303C6000303AB00C9000303BA018F0006038D0213"), + String::from( + "0411014D000303C603FC03150024000303C6000303AB00C9000303BA018F0006038D0213", + ), String::from("hot-sweet-potato"), ), ( @@ -732,10 +706,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03CF00C9000303B4000303CC018F000303D8"), String::from("cupcake"), ), - ( - String::from("03840174002703DB0024"), - String::from("daisy"), - ), + (String::from("03840174002703DB0024"), String::from("daisy")), ( String::from("03A50045000303C000E70339030900A8"), String::from("petunia"), @@ -768,10 +739,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03FC00C6034803F002EB01DD0234"), String::from("sunflower"), ), - ( - String::from("02DF003C02DF0024"), - String::from("lily"), - ), + (String::from("02DF003C02DF0024"), String::from("lily")), ( String::from("02FD021603DE0006037500C900060390"), String::from("rose-bud"), @@ -852,10 +820,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03D5014D000303AB0234000303D501CE0348"), String::from("copper-coin"), ), - ( - String::from("02FA00EA0006036F0024"), - String::from("ruby"), - ), + (String::from("02FA00EA0006036F0024"), String::from("ruby")), ( String::from("03FC008A03F001AA0300"), String::from("sapphire"), @@ -904,10 +869,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("037502340006039003F00069036C0234"), String::from("bird-feather"), ), - ( - String::from("037B020A02EE000303C6"), - String::from("bolt"), - ), + (String::from("037B020A02EE000303C6"), String::from("bolt")), ( String::from("032A0087000603A203390045000303C6"), String::from("magnet"), @@ -920,10 +882,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("0333025500060375009F02EE"), String::from("marble"), ), - ( - String::from("03D802F4018F000303C6"), - String::from("crate"), - ), + (String::from("03D802F4018F000303C6"), String::from("crate")), ( String::from("03D50255000603900006037B02D9000603900006037B014D000303D803FC"), String::from("cardboard-box"), @@ -936,10 +895,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("043B021603EA022804050297"), String::from("over-here"), ), - ( - String::from("040B009F02EB0213"), - String::from("hello"), - ), + (String::from("040B009F02EB0213"), String::from("hello")), ( String::from("039C010B00060390034501950024000303C6"), String::from("good-night"), @@ -972,18 +928,9 @@ fn create_word_mappings(device: &mut device::Device) { String::from("036C0087000303C603FC03F001AD0348"), String::from("thats-fine"), ), - ( - String::from("043B0213000303CC01740024"), - String::from("ok"), - ), - ( - String::from("04020276"), - String::from("sure"), - ), - ( - String::from("02FD01B0000303C6"), - String::from("right"), - ), + (String::from("043B0213000303CC01740024"), String::from("ok")), + (String::from("04020276"), String::from("sure")), + (String::from("02FD01B0000303C6"), String::from("right")), ( String::from("02E2006903FC0006038A00ED036C0087000303C6"), String::from("lets-do-that"), @@ -1012,18 +959,12 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03CF00C9000303BD00A8000303C301F2000303C6"), String::from("cut-it-out"), ), - ( - String::from("03450213"), - String::from("no"), - ), + (String::from("03450213"), String::from("no")), ( String::from("0318018F0006038700A80006039F0213"), String::from("way-to-go"), ), - ( - String::from("03F002EB01DD0234"), - String::from("flower"), - ), + (String::from("03F002EB01DD0234"), String::from("flower")), ( String::from("038400840348000303C603FC"), String::from("dance"), @@ -1104,14 +1045,8 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03F90009030C00E102E2018F000303BD0234"), String::from("see-you-later"), ), - ( - String::from("03F90009030C00EA"), - String::from("see-you"), - ), - ( - String::from("037B01B0"), - String::from("bye"), - ), + (String::from("03F90009030C00EA"), String::from("see-you")), + (String::from("037B01B0"), String::from("bye")), ( String::from("0411031B00A8000303BD0219030900A80006038A00CF0042035A"), String::from("what-are-you-doing?"), @@ -1164,10 +1099,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("04290045000303C603FC021603EA0237036C02B8"), String::from("its-over-there"), ), - ( - String::from("02DF003C02DF0024"), - String::from("lily"), - ), + (String::from("02DF003C02DF0024"), String::from("lily")), ( String::from("03FC00C6034803F002EB01DD0234"), String::from("sunflower"), @@ -1188,10 +1120,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("0438012C0006038100480402"), String::from("oddish"), ), - ( - String::from("03A202E800E70336"), - String::from("gloom"), - ), + (String::from("03A202E800E70336"), String::from("gloom")), ( String::from("03EA01A702EE000303B402E800E70336"), String::from("vileplume"), @@ -1200,14 +1129,8 @@ fn create_word_mappings(device: &mut device::Device) { String::from("042F01AD033603FC02BE0024"), String::from("im-sorry"), ), - ( - String::from("03FC02BE0024"), - String::from("sorry"), - ), - ( - String::from("03CC0084033F00A50348"), - String::from("cannon"), - ), + (String::from("03FC02BE0024"), String::from("sorry")), + (String::from("03CC0084033F00A50348"), String::from("cannon")), ( String::from("03810045000603930045000303C301F2000303C6"), String::from("dig-it-out"), @@ -1216,18 +1139,9 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03810045000603A2036C017A0234"), String::from("dig-there"), ), - ( - String::from("03810045000603A2"), - String::from("dig"), - ), - ( - String::from("03AE010202EE"), - String::from("pull"), - ), - ( - String::from("033F00C9000303C6"), - String::from("nut"), - ), + (String::from("03810045000603A2"), String::from("dig")), + (String::from("03AE010202EE"), String::from("pull")), + (String::from("033F00C9000303C6"), String::from("nut")), ( String::from("03780108033C0084033F00C9"), String::from("banana"), @@ -1244,10 +1158,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("0372029D002400060390000303C602F4006903E40234"), String::from("buried-treasure"), ), - ( - String::from("0408005D02EB0213"), - String::from("hello"), - ), + (String::from("0408005D02EB0213"), String::from("hello")), ( String::from("042F01A702E500CC03E7030C00EA"), String::from("i-love-you"), @@ -1312,26 +1223,17 @@ fn create_word_mappings(device: &mut device::Device) { String::from("041101290348000303BD0234"), String::from("haunter"), ), - ( - String::from("02FD0129035A"), - String::from("wrong"), - ), + (String::from("02FD0129035A"), String::from("wrong")), ( String::from("036C0087000303C603DE02FD0129035A"), String::from("thats-wrong"), ), - ( - String::from("03D503150045000303C6"), - String::from("quit"), - ), + (String::from("03D503150045000303C6"), String::from("quit")), ( String::from("03CF00C9000303B700450006038D01F2000303C6"), String::from("cut-it-out"), ), - ( - String::from("03CF00A503270297"), - String::from("c-mere"), - ), + (String::from("03CF00A503270297"), String::from("c-mere")), ( String::from("03CF00A5033604050297"), String::from("come-here"), @@ -1348,26 +1250,17 @@ fn create_word_mappings(device: &mut device::Device) { String::from("0321012C0003036001F2000303C6"), String::from("watch-out"), ), - ( - String::from("036C02B8"), - String::from("there"), - ), + (String::from("036C02B8"), String::from("there")), ( String::from("03FC03150042035A034501F2"), String::from("swing-now"), ), - ( - String::from("03FC03150042035A"), - String::from("swing"), - ), + (String::from("03FC03150042035A"), String::from("swing")), ( String::from("039F020D02FD01B0000303C6"), String::from("go-right"), ), - ( - String::from("02FD01B0000303C6"), - String::from("right"), - ), + (String::from("02FD01B0000303C6"), String::from("right")), ( String::from("03F00258036C022E02FD01B0000303C6"), String::from("farther-right"), @@ -1376,10 +1269,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("039F020A02E2006903F0000303C6"), String::from("go-left"), ), - ( - String::from("02E2006903F0000303C6"), - String::from("left"), - ), + (String::from("02E2006903F0000303C6"), String::from("left")), ( String::from("03F00258036C022B02E2006903F0000303C6"), String::from("farther-left"), @@ -1472,10 +1362,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("02DF004803F900420348000303BD00A503270024"), String::from("listen-to-me"), ), - ( - String::from("03F002FA00EA000303C6"), - String::from("fruit"), - ), + (String::from("03F002FA00EA000303C6"), String::from("fruit")), ( String::from("03450213000303C6000303A8008700060390"), String::from("notepad"), @@ -1500,14 +1387,8 @@ fn create_word_mappings(device: &mut device::Device) { String::from("0411014D000303C603FC03150024000303B4000303BA018F0006038D0213"), String::from("hot-sweet-potato"), ), - ( - String::from("03D200E102EE"), - String::from("cool"), - ), - ( - String::from("03F001AD0348"), - String::from("fine"), - ), + (String::from("03D200E102EE"), String::from("cool")), + (String::from("03F001AD0348"), String::from("fine")), ( String::from("0309023703FC0213000303C9030C00EA000303C6"), String::from("youre-so-cute"), @@ -1572,14 +1453,8 @@ fn create_word_mappings(device: &mut device::Device) { String::from("032A0087000603A2033F00A8000303C6"), String::from("magnet"), ), - ( - String::from("03D501CE0348"), - String::from("coin"), - ), - ( - String::from("036600D5009F02EE"), - String::from("jewel"), - ), + (String::from("03D501CE0348"), String::from("coin")), + (String::from("036600D5009F02EE"), String::from("jewel")), ( String::from("0333025500060375009F02EE"), String::from("marble"), @@ -1596,10 +1471,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03D50315004803DE000303C301AD0336"), String::from("quiz-time"), ), - ( - String::from("03B7002703E70024"), - String::from("tv"), - ), + (String::from("03B7002703E70024"), String::from("tv")), ( String::from("042F01B0000303D503150045000303C6"), String::from("i-quit"), @@ -1616,10 +1488,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03150024000303CF00A50348000303B402E2018F"), String::from("we-can-play"), ), - ( - String::from("0372008700060390"), - String::from("bad"), - ), + (String::from("0372008700060390"), String::from("bad")), ( String::from("0345014D000303C90045000303C3012F03F0"), String::from("knock-it-off"), @@ -1636,10 +1505,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("042F01AD03360345014D000303C6000303B402E201740042035A"), String::from("im-not-playing"), ), - ( - String::from("03D503150045000303C6"), - String::from("quit"), - ), + (String::from("03D503150045000303C6"), String::from("quit")), ( String::from("03FC000303C3014D000303B4036C0087000303C6"), String::from("stop-that"), @@ -1660,10 +1526,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03D802DF00210348036C0087000303BD00C9000303B4"), String::from("clean-that-up"), ), - ( - String::from("03B70048040200EA"), - String::from("tissue"), - ), + (String::from("03B70048040200EA"), String::from("tissue")), ( String::from("037500C002EE0006037500AB03FC02D9"), String::from("bulbasaur"), @@ -1768,10 +1631,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03FC000303A502880213"), String::from("spearow"), ), - ( - String::from("03ED02880213"), - String::from("fearow"), - ), + (String::from("03ED02880213"), String::from("fearow")), ( String::from("04260024000303CF00A5034803DE"), String::from("ekans"), @@ -1788,10 +1648,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03A50024000303CF00A80003036000EA"), String::from("pikachu"), ), - ( - String::from("02FD01B00003036000EA"), - String::from("raichu"), - ), + (String::from("02FD01B00003036000EA"), String::from("raichu")), ( String::from("03FC00840348040202FA00EA"), String::from("sandshrew"), @@ -1884,22 +1741,13 @@ fn create_word_mappings(device: &mut device::Device) { String::from("0438012C0006038100480402"), String::from("oddish"), ), - ( - String::from("03A202E800E70336"), - String::from("gloom"), - ), + (String::from("03A202E800E70336"), String::from("gloom")), ( String::from("03EA01A702EE000303B402E800E70336"), String::from("vileplume"), ), - ( - String::from("03B1024000AB03FC"), - String::from("paras"), - ), - ( - String::from("03A802A300AB03FC"), - String::from("paras"), - ), + (String::from("03B1024000AB03FC"), String::from("paras")), + (String::from("03A802A300AB03FC"), String::from("paras")), ( String::from("03B1024000AB03FC0066000303D8000303C6"), String::from("parasect"), @@ -1920,10 +1768,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03810045000603A202E500A8000303C6"), String::from("diglett"), ), - ( - String::from("0327001501F503F6"), - String::from("meowth"), - ), + (String::from("0327001501F503F6"), String::from("meowth")), ( String::from("03AB023703E400A50348"), String::from("persian"), @@ -2024,14 +1869,8 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03A202F4008A03EA02E50234"), String::from("graveler"), ), - ( - String::from("039F020A02E500A50336"), - String::from("golem"), - ), - ( - String::from("039F014402EE0336"), - String::from("golem"), - ), + (String::from("039F020A02E500A50336"), String::from("golem")), + (String::from("039F014402EE0336"), String::from("golem")), ( String::from("03B1021003390024000303BD00A8"), String::from("ponyta"), @@ -2060,18 +1899,12 @@ fn create_word_mappings(device: &mut device::Device) { String::from("032A0087000603A2033F00A8000303C3014A0348"), String::from("magneton"), ), - ( - String::from("0008"), - String::from("farfetch"), - ), + (String::from("0008"), String::from("farfetch")), ( String::from("038D02130006039002F100150213"), String::from("dodrio"), ), - ( - String::from("03F9001B02EE"), - String::from("seel"), - ), + (String::from("03F9001B02EE"), String::from("seel")), ( String::from("038A00EA0006039F014A035A"), String::from("dewgong"), @@ -2080,14 +1913,8 @@ fn create_word_mappings(device: &mut device::Device) { String::from("038A00EA0006039F014A0348"), String::from("dewgong"), ), - ( - String::from("03A202FD01AD032D0234"), - String::from("grimer"), - ), - ( - String::from("032D00C9000303D8"), - String::from("muk"), - ), + (String::from("03A202FD01AD032D0234"), String::from("grimer")), + (String::from("032D00C9000303D8"), String::from("muk")), ( String::from("0402005D02EE000603870234"), String::from("shellder"), @@ -2100,10 +1927,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("0396008A03FC000303C602DF00"), String::from("gastly"), ), - ( - String::from("0396008A03FC02DF0024"), - String::from("gastly"), - ), + (String::from("0396008A03FC02DF0024"), String::from("gastly")), ( String::from("041101290348000303BD0234"), String::from("haunter"), @@ -2232,10 +2056,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03CC018C035A0006039900AB03FC000303D5014A0348"), String::from("kangaskhan"), ), - ( - String::from("041102DC03F90024"), - String::from("horsea"), - ), + (String::from("041102DC03F90024"), String::from("horsea")), ( String::from("03F900240006039002F700A8"), String::from("seadra"), @@ -2260,10 +2081,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("0327004803FC000303BD0231033301AD0336"), String::from("mr.mime"), ), - ( - String::from("03FC01B3036C0234"), - String::from("scyther"), - ), + (String::from("03FC01B3036C0234"), String::from("scyther")), ( String::from("03630042035A000303D803FC"), String::from("jynx"), @@ -2280,18 +2098,9 @@ fn create_word_mappings(device: &mut device::Device) { String::from("032A0087000603A203330255"), String::from("magmar"), ), - ( - String::from("03A50042034803FC0234"), - String::from("pinsir"), - ), - ( - String::from("03C3020D02FD012F03FC"), - String::from("tauros"), - ), - ( - String::from("03C30246021603FC"), - String::from("tauros"), - ), + (String::from("03A50042034803FC0234"), String::from("pinsir")), + (String::from("03C3020D02FD012F03FC"), String::from("tauros")), + (String::from("03C30246021603FC"), String::from("tauros")), ( String::from("032A0087000603630045000303D50255000303B4"), String::from("magikarp"), @@ -2312,14 +2121,8 @@ fn create_word_mappings(device: &mut device::Device) { String::from("02E20087000303B402F700AB03FC"), String::from("lapras"), ), - ( - String::from("03810045000303C30213"), - String::from("ditto"), - ), - ( - String::from("0426002703E70024"), - String::from("eevee"), - ), + (String::from("03810045000303C30213"), String::from("ditto")), + (String::from("0426002703E70024"), String::from("eevee")), ( String::from("03EA018F000303B102BE0015014A0348"), String::from("vaporeon"), @@ -2416,10 +2219,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("0327030C00EA000303C000EA"), String::from("mewtwo"), ), - ( - String::from("0327030C00EA"), - String::from("mew"), - ), + (String::from("0327030C00EA"), String::from("mew")), ( String::from("03C3014D000303AB00AB03EA000603630045000603A202DF0024000303AB00AB03F0"), String::from("top-of-jigglypuff"), @@ -2456,10 +2256,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("038700C9000603A2000303C602F100150213"), String::from("dugtrio"), ), - ( - String::from("03A50045000603630024"), - String::from("pidgey"), - ), + (String::from("03A50045000603630024"), String::from("pidgey")), ( String::from("038D02130006038A00DB0213"), String::from("doduo"), @@ -2528,30 +2325,18 @@ fn create_word_mappings(device: &mut device::Device) { String::from("02E2006903FC000303B402E2018F"), String::from("lets-play"), ), - ( - String::from("02FD0129035A"), - String::from("wrong"), - ), + (String::from("02FD0129035A"), String::from("wrong")), ( String::from("0372008700060390000303A50024000303CF00A80003036000EA"), String::from("bad-pikachu"), ), - ( - String::from("0327004803FC"), - String::from("miss"), - ), + (String::from("0327004803FC"), String::from("miss")), ( String::from("038D02100348000303C6000303D5012302DF0045000303C6"), String::from("dont-call-it"), ), - ( - String::from("041101F503FC"), - String::from("house"), - ), - ( - String::from("041102100336"), - String::from("home"), - ), + (String::from("041101F503FC"), String::from("house")), + (String::from("041102100336"), String::from("home")), ( String::from("03EA00A202F1004500060381000F00C60348"), String::from("viridian"), @@ -2560,10 +2345,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03EA00A202F1004500060381000F00C6034803F002C400AB03FC000303C6"), String::from("viridian-forest"), ), - ( - String::from("043B0213000303CF0234"), - String::from("ochre"), - ), + (String::from("043B0213000303CF0234"), String::from("ochre")), ( String::from("043B0213000303CF0225031E010B0006039003DE"), String::from("ochre-woods"), @@ -2604,10 +2386,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03D502130006037E03ED004803FF0042035A0411020A02EE"), String::from("cobalt-fishing-hole"), ), - ( - String::from("03D5021603FC000303C6"), - String::from("coast"), - ), + (String::from("03D5021603FC000303C6"), String::from("coast")), ( String::from("03D502130006037B012302EE000303C6000303D5021603FC000303C6"), String::from("cobalt-coast"), @@ -2620,16 +2399,15 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03BD0231033F00A8000303B4"), String::from("turnip"), ), - ( - String::from("03BD02310348000303B4"), - String::from("turnip"), - ), + (String::from("03BD02310348000303B4"), String::from("turnip")), ( String::from("03FC03150024000303C6000303AB00A8000303BA018F0006038D0213"), String::from("sweet-potato"), ), ( - String::from("0411014D000303C603FC03150024000303C6000303AE010B000303BA018F0006038D0213"), + String::from( + "0411014D000303C603FC03150024000303C6000303AE010B000303BA018F0006038D0213", + ), String::from("hot-sweet-potato"), ), ( @@ -2640,18 +2418,12 @@ fn create_word_mappings(device: &mut device::Device) { String::from("04080084034B00420348036C02B8"), String::from("hang-in-there"), ), - ( - String::from("03AE010202EE"), - String::from("pull"), - ), + (String::from("03AE010202EE"), String::from("pull")), ( String::from("02F1001B02DF0045000303B700420348"), String::from("reel-it-in"), ), - ( - String::from("034501F2"), - String::from("now"), - ), + (String::from("034501F2"), String::from("now")), ( String::from("03CC00870003035D0045000303C6"), String::from("catch-it"), @@ -2676,14 +2448,8 @@ fn create_word_mappings(device: &mut device::Device) { String::from("02F1003C02DF002703F90045000303C6"), String::from("release-it"), ), - ( - String::from("02E500C6034800030360"), - String::from("lunch"), - ), - ( - String::from("03FC033C0087000303D8"), - String::from("snack"), - ), + (String::from("02E500C6034800030360"), String::from("lunch")), + (String::from("03FC033C0087000303D8"), String::from("snack")), ( String::from("02E2006903F90024000303C6"), String::from("lets-eat"), @@ -2700,10 +2466,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("042F01B0000603930045000303B70045000303C6"), String::from("i-get-it"), ), - ( - String::from("0411032101B0"), - String::from("why?"), - ), + (String::from("0411032101B0"), String::from("why?")), ( String::from("041101F2000303CF00C60336"), String::from("how-come?"), @@ -2728,10 +2491,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03FC000303C3014D000303B4036C0087000303C6"), String::from("stop-that"), ), - ( - String::from("03D503150045000303C6"), - String::from("quit"), - ), + (String::from("03D503150045000303C6"), String::from("quit")), ( String::from("03CF00C9000303B70045000303C301F2000303C6"), String::from("cut-it-out"), @@ -2744,10 +2504,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("02E20066000303C603DE0006039F0213"), String::from("lets-go"), ), - ( - String::from("031B0225012F03F0"), - String::from("we-re-off"), - ), + (String::from("031B0225012F03F0"), String::from("we-re-off")), ( String::from("03BA008700060393030902190045000303C6"), String::from("tag-youre-it"), @@ -2804,18 +2561,12 @@ fn create_word_mappings(device: &mut device::Device) { String::from("039F0213000303BD00C6033302460213"), String::from("go-tomorrow"), ), - ( - String::from("02FD014D000303D8"), - String::from("rock"), - ), + (String::from("02FD014D000303D8"), String::from("rock")), ( String::from("03F9004803DE023703FC"), String::from("scissors"), ), - ( - String::from("03A8018F000303AB0234"), - String::from("paper"), - ), + (String::from("03A8018F000303AB0234"), String::from("paper")), ( String::from("0381002A000303B10255000303C6"), String::from("depart"), @@ -2872,10 +2623,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03450213000602E50042032A002A000303C6"), String::from("no-limit"), ), - ( - String::from("03B7005A0348"), - String::from("ten"), - ), + (String::from("03B7005A0348"), String::from("ten")), ( String::from("03E7002A03F6000303B700090348"), String::from("fifteen"), @@ -2888,18 +2636,12 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03C30318004B0339038A002403EA019E03EA"), String::from("twenty-five"), ), - ( - String::from("036C02AC03BA0027"), - String::from("thirty"), - ), + (String::from("036C02AC03BA0027"), String::from("thirty")), ( String::from("036C02AC03BA002703EA019E03EA"), String::from("thirty-five"), ), - ( - String::from("03EA02D6000603900048"), - String::from("forty"), - ), + (String::from("03EA02D6000603900048"), String::from("forty")), ( String::from("03EA02D600060390004803EA019E03EA"), String::from("forty-five"), @@ -2928,10 +2670,7 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03FC004B036C00630348000303B7000903EA019E03EA"), String::from("seventy-five"), ), - ( - String::from("042C018C03B70009"), - String::from("eighty"), - ), + (String::from("042C018C03B70009"), String::from("eighty")), ( String::from("042C018C03B7000903EA019E03EA"), String::from("eighty-five"), diff --git a/src/device/rdram.rs b/src/device/rdram.rs index 25d7c2b..87a70d3 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -73,7 +73,7 @@ pub fn read_regs( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { - let chip_id = address >> 13 & 3; + let chip_id = (address >> 13) & 3; let reg = (address & 0x3FF) >> 2; match reg as u32 { RDRAM_MODE_REG => device.pi.regs[reg as usize] ^ 0xc0c0c0c0, @@ -82,7 +82,7 @@ pub fn read_regs( } pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { - let chip_id = address >> 13 & 3; + let chip_id = (address >> 13) & 3; let reg = (address & 0x3FF) >> 2; device::memory::masked_write_32( &mut device.rdram.regs[chip_id as usize][reg as usize], diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index 6bbc0fd..b454e73 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -721,7 +721,7 @@ pub fn lsv(device: &mut device::Device, opcode: u32) { modify_vpr16( &mut device.rsp.cpu.vpr[rt(opcode) as usize], element / 2, - (device.rsp.mem[(address & 0xFFF) as usize] as u16) << 8 + ((device.rsp.mem[(address & 0xFFF) as usize] as u16) << 8) | (device.rsp.mem[((address + 1) & 0xFFF) as usize] as u16), ); } else { diff --git a/src/main.rs b/src/main.rs index 34afd2f..62da9ef 100644 --- a/src/main.rs +++ b/src/main.rs @@ -64,8 +64,7 @@ struct Args { clear_input_bindings: bool, } -#[tokio::main] -async fn main() { +fn main() { let dirs = ui::get_dirs(); let mut result = std::fs::create_dir_all(dirs.config_dir); diff --git a/src/netplay.rs b/src/netplay.rs index afcd5f7..e14fa02 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -29,7 +29,7 @@ pub struct Netplay { status: u8, buffer_target: u8, pub fast_forward: bool, - pub error_notifier: tokio::sync::mpsc::Sender, + pub error_notifier: std::sync::mpsc::Sender, pub gui_ctx: egui::Context, } @@ -46,7 +46,7 @@ struct InputEvent { } fn send_error(netplay: &mut Netplay, error: String) { - netplay.error_notifier.try_send(error).unwrap(); + netplay.error_notifier.send(error).unwrap(); netplay.gui_ctx.request_repaint(); // this is so the window pops up right away } @@ -216,7 +216,7 @@ pub fn init( mut peer_addr: std::net::SocketAddr, session: ui::gui::gui_netplay::NetplayRoom, player_number: u8, - error_notifier: tokio::sync::mpsc::Sender, + error_notifier: std::sync::mpsc::Sender, gui_ctx: egui::Context, ) -> Netplay { peer_addr.set_port(session.port.unwrap() as u16); diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 5d701f8..40cec20 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -21,9 +21,9 @@ pub struct GopherEguiApp { emulate_vru: bool, dinput: bool, show_vru_dialog: bool, - vru_window_receiver: Option>>, - netplay_error_receiver: Option>, - vru_word_notifier: Option>, + vru_window_receiver: Option>>, + netplay_error_receiver: Option>, + vru_word_notifier: Option>, vru_word_list: Vec, pub netplay: gui_netplay::GuiNetplay, } @@ -180,9 +180,24 @@ fn configure_profile(app: &mut GopherEguiApp, ctx: &egui::Context) { if ui.button("Configure Profile").clicked() { let profile_name = app.profile_name.clone(); let dinput = app.dinput; - tokio::spawn(async move { - let mut game_ui = ui::Ui::new(); - ui::input::configure_input_profile(&mut game_ui, profile_name, dinput); + std::thread::spawn(move || { + if cfg!(target_os = "macos") { + let mut command = + std::process::Command::new(std::env::current_exe().unwrap()); + if dinput { + command.arg("--use-dinput"); + } + command.arg("--configure-input-profile"); + command.arg(profile_name); + + let status = command.status().expect("failed to execute process"); + if !status.success() { + panic!("process exited with: {}", status); + } + } else { + let mut game_ui = ui::Ui::new(); + ui::input::configure_input_profile(&mut game_ui, profile_name, dinput); + } }); app.configure_profile = false; if !app.profile_name.is_empty() @@ -221,7 +236,7 @@ fn show_vru_dialog(app: &mut GopherEguiApp, ctx: &egui::Context) { app.vru_word_notifier .as_ref() .unwrap() - .try_send(v.clone()) + .send(v.clone()) .unwrap(); app.show_vru_dialog = false; } @@ -233,7 +248,7 @@ fn show_vru_dialog(app: &mut GopherEguiApp, ctx: &egui::Context) { app.vru_word_notifier .as_ref() .unwrap() - .try_send(String::from("")) + .send(String::from("")) .unwrap(); app.show_vru_dialog = false; } @@ -242,7 +257,6 @@ fn show_vru_dialog(app: &mut GopherEguiApp, ctx: &egui::Context) { } pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { - let task; let netplay; let selected_controller = app.selected_controller; @@ -259,13 +273,11 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { let controller_paths = app.controller_paths.clone(); if app.netplay.player_name.is_empty() { - task = Some(rfd::AsyncFileDialog::new().pick_file()); netplay = false; peer_addr = None; session = None; player_number = None; } else { - task = None; netplay = true; peer_addr = app.netplay.peer_addr; session = app.netplay.waiting_session.clone(); @@ -273,19 +285,19 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { } let (netplay_error_notifier, netplay_error_receiver): ( - tokio::sync::mpsc::Sender, - tokio::sync::mpsc::Receiver, - ) = tokio::sync::mpsc::channel(8); + std::sync::mpsc::Sender, + std::sync::mpsc::Receiver, + ) = std::sync::mpsc::channel(); let (vru_window_notifier, vru_window_receiver): ( - tokio::sync::mpsc::Sender>, - tokio::sync::mpsc::Receiver>, - ) = tokio::sync::mpsc::channel(1); + std::sync::mpsc::Sender>, + std::sync::mpsc::Receiver>, + ) = std::sync::mpsc::channel(); let (vru_word_notifier, vru_word_receiver): ( - tokio::sync::mpsc::Sender, - tokio::sync::mpsc::Receiver, - ) = tokio::sync::mpsc::channel(1); + std::sync::mpsc::Sender, + std::sync::mpsc::Receiver, + ) = std::sync::mpsc::channel(); if netplay { app.netplay_error_receiver = Some(netplay_error_receiver); @@ -300,10 +312,41 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { let rom_contents = app.netplay.rom_contents.clone(); let gui_ctx = ctx.clone(); - tokio::spawn(async move { - let file = if !netplay { task.unwrap().await } else { None }; + std::thread::spawn(move || { + let file = if !netplay { + rfd::FileDialog::new().pick_file() + } else { + None + }; - if file.is_some() || netplay { + let save_config_items = SaveConfig { + selected_controller, + selected_profile, + controller_enabled, + upscale, + integer_scaling, + fullscreen, + emulate_vru, + }; + + if cfg!(target_os = "macos") && file.is_some() { + // mac os requires the process to be started on the main thread + // this means that netplay and VRU emulation will not work on mac os + { + let mut config = ui::config::Config::new(); + save_config(&mut config, controller_paths, save_config_items); + } + let mut command = std::process::Command::new(std::env::current_exe().unwrap()); + if fullscreen { + command.arg("--fullscreen"); + } + command.arg(file.unwrap().as_path()); + + let status = command.status().expect("failed to execute process"); + if !status.success() { + panic!("process exited with: {}", status); + } + } else if file.is_some() || netplay { let running_file = cache_dir.join("game_running"); if running_file.exists() { println!("Game already running"); @@ -313,17 +356,8 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { if result.is_err() { panic!("could not create running file: {}", result.err().unwrap()) } - let mut device = device::Device::new(); - let save_config_items = SaveConfig { - selected_controller, - selected_profile, - controller_enabled, - upscale, - integer_scaling, - fullscreen, - emulate_vru, - }; + let mut device = device::Device::new(); save_config(&mut device.ui.config, controller_paths, save_config_items); if netplay { @@ -343,7 +377,7 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { device.vru.gui_ctx = Some(gui_ctx); } - let rom_contents = device::get_rom_contents(file.unwrap().path()); + let rom_contents = device::get_rom_contents(file.unwrap().as_path()); if rom_contents.is_empty() { println!("Could not read rom file"); } else { @@ -373,7 +407,7 @@ impl eframe::App for GopherEguiApp { } if self.netplay_error_receiver.is_some() { - let result = self.netplay_error_receiver.as_mut().unwrap().try_recv(); + let result = self.netplay_error_receiver.as_ref().unwrap().try_recv(); if result.is_ok() { self.netplay.error = result.unwrap(); } @@ -397,8 +431,8 @@ impl eframe::App for GopherEguiApp { if ui.button("Open ROM").clicked() { open_rom(self, ctx); } - - if ui.button("Netplay: Create Session").clicked() + if !cfg!(target_os = "macos") + && ui.button("Netplay: Create Session").clicked() && !self.dirs.cache_dir.join("game_running").exists() { self.netplay.create = true; @@ -412,7 +446,8 @@ impl eframe::App for GopherEguiApp { self.configure_profile = true; } - if ui.button("Netplay: Join Session").clicked() + if !cfg!(target_os = "macos") + && ui.button("Netplay: Join Session").clicked() && !self.dirs.cache_dir.join("game_running").exists() { self.netplay.join = true; @@ -472,16 +507,18 @@ impl eframe::App for GopherEguiApp { ui.checkbox(&mut self.integer_scaling, "Integer Scaling"); ui.checkbox(&mut self.fullscreen, "Fullscreen (Esc closes game)"); ui.add_space(32.0); - ui.checkbox( - &mut self.emulate_vru, - "Emulate VRU (connects VRU to controller port 4)", - ); + if !cfg!(target_os = "macos") { + ui.checkbox( + &mut self.emulate_vru, + "Emulate VRU (connects VRU to controller port 4)", + ); + } ui.add_space(32.0); ui.label(format!("Version: {}", env!("CARGO_PKG_VERSION"))); }); if self.emulate_vru && self.vru_window_receiver.is_some() { - let result = self.vru_window_receiver.as_mut().unwrap().try_recv(); + let result = self.vru_window_receiver.as_ref().unwrap().try_recv(); if result.is_ok() { self.show_vru_dialog = true; self.vru_word_list = result.unwrap(); diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index fc1550b..0bcdf73 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -41,8 +41,8 @@ pub struct GuiNetplay { pub socket: Option>>, pub server_receiver: - Option>>, - pub game_info_receiver: Option>, + Option>>, + pub game_info_receiver: Option>, pub broadcast_socket: Option, pub broadcast_timer: Option, } @@ -99,20 +99,17 @@ fn get_servers(app: &mut GopherEguiApp, ctx: &egui::Context) { ctx.request_repaint(); } if app.netplay.server_receiver.is_none() { - let (tx, rx) = tokio::sync::mpsc::channel(1); + let (tx, rx) = std::sync::mpsc::channel(); app.netplay.server_receiver = Some(rx); let gui_ctx = ctx.clone(); - tokio::spawn(async move { + std::thread::spawn(move || { if let Ok(response) = - reqwest::get("https://m64p.s3.amazonaws.com/servers.json").await - { - if let Ok(servers) = response + reqwest::blocking::get("https://m64p.s3.amazonaws.com/servers.json") + .unwrap() .json::>() - .await - { - let _ = tx.send(servers).await; - gui_ctx.request_repaint(); - } + { + tx.send(response).unwrap(); + gui_ctx.request_repaint(); } }); } @@ -146,7 +143,7 @@ fn get_servers(app: &mut GopherEguiApp, ctx: &egui::Context) { ctx.request_repaint(); } if app.netplay.server_receiver.is_some() { - let result = app.netplay.server_receiver.as_mut().unwrap().try_recv(); + let result = app.netplay.server_receiver.as_ref().unwrap().try_recv(); if result.is_ok() { app.netplay.servers.extend(result.unwrap()); app.netplay.server_receiver = None; @@ -184,25 +181,23 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { app.netplay.create_rom_label = "Open ROM".to_string(); } if ui.button(&app.netplay.create_rom_label).clicked() { - let task = rfd::AsyncFileDialog::new().pick_file(); - let (tx, rx) = tokio::sync::mpsc::channel(1); + let (tx, rx) = std::sync::mpsc::channel(); app.netplay.game_info_receiver = Some(rx); let gui_ctx = ctx.clone(); app.netplay.create_rom_label = "Inspecting ROM".to_string(); - tokio::spawn(async move { - let file = task.await; + std::thread::spawn(move || { + let file = rfd::FileDialog::new().pick_file(); if let Some(file) = file { - parse_rom_file(file, tx).await + parse_rom_file(file, tx); } else { - let _ = tx - .send(( - "".to_string(), - "".to_string(), - "Open ROM".to_string(), - vec![], - )) - .await; + tx.send(( + "".to_string(), + "".to_string(), + "Open ROM".to_string(), + vec![], + )) + .unwrap(); } gui_ctx.request_repaint(); }); @@ -222,7 +217,7 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { get_servers(app, ctx); if app.netplay.game_info_receiver.is_some() { - let result = app.netplay.game_info_receiver.as_mut().unwrap().try_recv(); + let result = app.netplay.game_info_receiver.as_ref().unwrap().try_recv(); if result.is_ok() { app.netplay.game_info_receiver = None; let data = result.unwrap(); @@ -396,8 +391,8 @@ fn get_sessions(app: &mut GopherEguiApp, ctx: &egui::Context) { } } -async fn parse_rom_file(file: rfd::FileHandle, tx: tokio::sync::mpsc::Sender) { - let rom_contents = device::get_rom_contents(file.path()); +fn parse_rom_file(file: std::path::PathBuf, tx: std::sync::mpsc::Sender) { + let rom_contents = device::get_rom_contents(file.as_path()); if !rom_contents.is_empty() { let hash = device::cart_rom::calculate_hash(&rom_contents); let game_name = std::str::from_utf8(&rom_contents[0x20..0x20 + 0x14]) @@ -405,18 +400,21 @@ async fn parse_rom_file(file: rfd::FileHandle, tx: tokio::sync::mpsc::Sender>, - word_index_receiver: &mut tokio::sync::mpsc::Receiver, + window_notifier: &std::sync::mpsc::Sender>, + word_index_receiver: &std::sync::mpsc::Receiver, gui_ctx: &egui::Context, ) -> u16 { let mut dedup_words = words.to_owned(); dedup_words.sort(); dedup_words.dedup(); - window_notifier.try_send(dedup_words).unwrap(); + window_notifier.send(dedup_words).unwrap(); gui_ctx.request_repaint(); // this is so the window pops up right away let mut result = word_index_receiver.try_recv(); while result.is_err() { From 4730b7f2935ea6854a5b39c73a7ad0c65b63fd0d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 27 Jan 2025 18:12:03 +0100 Subject: [PATCH 0251/1117] Bump to 0.1.24 (#190) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index aaa6b12..def0840 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.23" +version = "0.1.24" edition = "2021" rust-version = "1.82" From f4714a78139b6a29ef6cbf95abfcd662dc84e1dc Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 27 Jan 2025 19:42:36 +0100 Subject: [PATCH 0252/1117] add rdram reg that libdragon seems to access (#191) * add rdram reg that libdragon seems to access * more --- src/device/rdram.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/device/rdram.rs b/src/device/rdram.rs index 87a70d3..9132c6f 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -77,6 +77,7 @@ pub fn read_regs( let reg = (address & 0x3FF) >> 2; match reg as u32 { RDRAM_MODE_REG => device.pi.regs[reg as usize] ^ 0xc0c0c0c0, + 0x80 => 0x00000000, //Row, needed for libdragon _ => device.rdram.regs[chip_id as usize][reg as usize], } } From 71b7baf6135e4458974e96771d22e5972cdf791f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 27 Jan 2025 22:50:49 +0100 Subject: [PATCH 0253/1117] fix masking pi regs (#192) --- src/device/pi.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/device/pi.rs b/src/device/pi.rs index 54a82e1..e2adb9c 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -149,10 +149,15 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u device.pi.regs[PI_STATUS_REG as usize] = 0 } } - PI_BSD_DOM1_LAT_REG | PI_BSD_DOM1_PWD_REG | PI_BSD_DOM1_PGS_REG | PI_BSD_DOM1_RLS_REG - | PI_BSD_DOM2_LAT_REG | PI_BSD_DOM2_PWD_REG | PI_BSD_DOM2_PGS_REG | PI_BSD_DOM2_RLS_REG => { + PI_BSD_DOM1_LAT_REG | PI_BSD_DOM1_PWD_REG | PI_BSD_DOM2_LAT_REG | PI_BSD_DOM2_PWD_REG => { device::memory::masked_write_32(&mut device.pi.regs[reg as usize], value & 0xFF, mask) } + PI_BSD_DOM1_PGS_REG | PI_BSD_DOM2_PGS_REG => { + device::memory::masked_write_32(&mut device.pi.regs[reg as usize], value & 0xF, mask) + } + PI_BSD_DOM1_RLS_REG | PI_BSD_DOM2_RLS_REG => { + device::memory::masked_write_32(&mut device.pi.regs[reg as usize], value & 0x3, mask) + } _ => device::memory::masked_write_32(&mut device.pi.regs[reg as usize], value, mask), } } From 27922fbf9c01ccfbdff3ad55dd53303c95f3cc4d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 28 Jan 2025 13:30:59 +0100 Subject: [PATCH 0254/1117] use TCP_RECEIVE_SAVE_WITH_SIZE for netplay (#193) * use TCP_RECEIVE_SAVE_WITH_SIZE for netplay * more * more * more --- src/netplay.rs | 17 +++++++------ src/ui/storage.rs | 63 ++++++++++++++++++++--------------------------- 2 files changed, 37 insertions(+), 43 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index e14fa02..163252e 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -11,12 +11,13 @@ const UDP_SYNC_DATA: u8 = 4; //TCP packet formats const TCP_SEND_SAVE: u8 = 1; -const TCP_RECEIVE_SAVE: u8 = 2; +//const TCP_RECEIVE_SAVE: u8 = 2; //const TCP_SEND_SETTINGS: u8 = 3; //const TCP_RECEIVE_SETTINGS: u8 = 4; const TCP_REGISTER_PLAYER: u8 = 5; const TCP_GET_REGISTRATION: u8 = 6; const TCP_DISCONNECT_NOTICE: u8 = 7; +const TCP_RECEIVE_SAVE_WITH_SIZE: u8 = 8; const CS4: u32 = 32; @@ -57,19 +58,21 @@ pub fn send_save(netplay: &mut Netplay, save_type: &str, save_data: &[u8], size: request.push(0); // null terminate string request.extend_from_slice(&(size as u32).to_be_bytes()); - let mut send_data = save_data.to_owned(); - send_data.resize(size, 0); // pad with zeros if needed - request.extend(send_data); + if size > 0 { + request.extend(save_data.to_owned()); + } netplay.tcp_stream.write_all(&request).unwrap(); } -pub fn receive_save(netplay: &mut Netplay, save_type: &str, save_data: &mut Vec, size: usize) { - let mut request: Vec = [TCP_RECEIVE_SAVE].to_vec(); +pub fn receive_save(netplay: &mut Netplay, save_type: &str, save_data: &mut Vec) { + let mut request: Vec = [TCP_RECEIVE_SAVE_WITH_SIZE].to_vec(); request.extend_from_slice(save_type.as_bytes()); request.push(0); // null terminate string netplay.tcp_stream.write_all(&request).unwrap(); - let mut response: Vec = vec![0; size]; + let mut size: [u8; 4] = [0; 4]; + netplay.tcp_stream.read_exact(&mut size).unwrap(); + let mut response: Vec = vec![0; u32::from_be_bytes(size) as usize]; netplay.tcp_stream.read_exact(&mut response).unwrap(); *save_data = response; } diff --git a/src/ui/storage.rs b/src/ui/storage.rs index 8015726..ad8dc86 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -1,4 +1,3 @@ -use crate::device; use crate::netplay; use crate::ui; @@ -138,12 +137,9 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { if mempak.is_ok() { ui.saves.mempak.0 = mempak.unwrap(); } - if netplay.is_none() { - // can't do romsaves with the current netplay implementation - let romsave = std::fs::read(&mut ui.paths.romsave_file_path); - if romsave.is_ok() { - ui.saves.romsave.0 = postcard::from_bytes(romsave.unwrap().as_ref()).unwrap(); - } + let romsave = std::fs::read(&mut ui.paths.romsave_file_path); + if romsave.is_ok() { + ui.saves.romsave.0 = postcard::from_bytes(romsave.unwrap().as_ref()).unwrap(); } } @@ -153,51 +149,46 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { netplay.as_mut().unwrap(), "eep", &ui.saves.eeprom.0, - device::cart::EEPROM_MAX_SIZE, + ui.saves.eeprom.0.len(), ); netplay::send_save( netplay.as_mut().unwrap(), "sra", &ui.saves.sram.0, - device::sram::SRAM_SIZE, + ui.saves.sram.0.len(), ); netplay::send_save( netplay.as_mut().unwrap(), "fla", &ui.saves.flash.0, - device::sram::FLASHRAM_SIZE, + ui.saves.flash.0.len(), ); netplay::send_save( netplay.as_mut().unwrap(), "mpk", &ui.saves.mempak.0, - device::controller::mempak::MEMPAK_SIZE * 4, + ui.saves.mempak.0.len(), + ); + let mut romsave_bytes: Vec = vec![]; + if !ui.saves.romsave.0.is_empty() { + romsave_bytes = postcard::to_stdvec(&ui.saves.romsave.0).unwrap(); + } + netplay::send_save( + netplay.as_mut().unwrap(), + "rom", + &romsave_bytes, + romsave_bytes.len(), ); } else { - netplay::receive_save( - netplay.as_mut().unwrap(), - "eep", - &mut ui.saves.eeprom.0, - device::cart::EEPROM_MAX_SIZE, - ); - netplay::receive_save( - netplay.as_mut().unwrap(), - "sra", - &mut ui.saves.sram.0, - device::sram::SRAM_SIZE, - ); - netplay::receive_save( - netplay.as_mut().unwrap(), - "fla", - &mut ui.saves.flash.0, - device::sram::FLASHRAM_SIZE, - ); - netplay::receive_save( - netplay.as_mut().unwrap(), - "mpk", - &mut ui.saves.mempak.0, - device::controller::mempak::MEMPAK_SIZE * 4, - ); + netplay::receive_save(netplay.as_mut().unwrap(), "eep", &mut ui.saves.eeprom.0); + netplay::receive_save(netplay.as_mut().unwrap(), "sra", &mut ui.saves.sram.0); + netplay::receive_save(netplay.as_mut().unwrap(), "fla", &mut ui.saves.flash.0); + netplay::receive_save(netplay.as_mut().unwrap(), "mpk", &mut ui.saves.mempak.0); + let mut romsave_bytes: Vec = vec![]; + netplay::receive_save(netplay.as_mut().unwrap(), "rom", &mut romsave_bytes); + if !romsave_bytes.is_empty() { + ui.saves.romsave.0 = postcard::from_bytes(&romsave_bytes).unwrap(); + } } } } @@ -221,7 +212,7 @@ pub fn write_saves(ui: &ui::Ui, netplay: &Option) { if ui.saves.mempak.1 { write_save(ui, SaveTypes::Mempak) } - if ui.saves.romsave.1 && netplay.is_none() { + if ui.saves.romsave.1 { write_save(ui, SaveTypes::Romsave) } } From 611121568e7d11116997f75a9721a592f0b59c46 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 28 Jan 2025 14:21:28 +0100 Subject: [PATCH 0255/1117] cache apt packages in github workflow (#194) --- .github/workflows/build.yml | 20 ++++++++++---------- .github/workflows/lint.yml | 19 ++++++++++--------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6c40fcd..3edbb7d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,16 +30,16 @@ jobs: rustflags: "" - name: Install SDL Dependencies # https://wiki.libsdl.org/SDL3/README/linux#build-dependencies - run: | - sudo apt-get update - sudo apt-get -y dist-upgrade - sudo apt-get -y install build-essential git make \ - pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \ - libaudio-dev libjack-dev libsndio-dev libx11-dev libxext-dev \ - libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev \ - libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ - libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \ - libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev + uses: awalsh128/cache-apt-pkgs-action@latest + with: + packages: build-essential git make \ + pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \ + libaudio-dev libjack-dev libsndio-dev libx11-dev libxext-dev \ + libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev \ + libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ + libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \ + libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev + version: 1.0 - name: Build run: | cargo build --release -v --target=${{ matrix.target }} diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 2092299..fb986ec 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -21,15 +21,16 @@ jobs: components: clippy, rustfmt - name: Install SDL Dependencies # https://wiki.libsdl.org/SDL3/README/linux#build-dependencies - run: | - sudo apt-get update - sudo apt-get -y install build-essential git make \ - pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \ - libaudio-dev libjack-dev libsndio-dev libx11-dev libxext-dev \ - libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev \ - libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ - libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \ - libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev + uses: awalsh128/cache-apt-pkgs-action@latest + with: + packages: build-essential git make \ + pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \ + libaudio-dev libjack-dev libsndio-dev libx11-dev libxext-dev \ + libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev \ + libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ + libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \ + libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev + version: 1.0 - name: Rustfmt Check uses: actions-rust-lang/rustfmt@v1 - name: Lint From ed8b4e8e02e0c0b32eb335d3eaeb640275e99220 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 28 Jan 2025 14:32:54 +0100 Subject: [PATCH 0256/1117] Bump to 0.1.25 (#195) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index def0840..b115059 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.24" +version = "0.1.25" edition = "2021" rust-version = "1.82" From 3e2189463f7541df87a8710043ba3322ce5e581b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 28 Jan 2025 20:56:42 +0100 Subject: [PATCH 0257/1117] static link MoltenVK (#196) * static link MoltenVK * static link MoltenVK * test * test * test * test * test * test * test * test * test * test * test * test * test --- .github/workflows/build.yml | 3 +++ build.rs | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3edbb7d..22dd9d9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -82,12 +82,15 @@ jobs: - uses: actions/checkout@v4 with: submodules: recursive + - name: Set up Homebrew + uses: Homebrew/actions/setup-homebrew@master - uses: actions-rust-lang/setup-rust-toolchain@v1 with: target: ${{ matrix.target }} rustflags: "" - name: Build run: | + brew install molten-vk cargo build --release -v --target=${{ matrix.target }} - name: Upload file uses: actions/upload-artifact@v4 diff --git a/build.rs b/build.rs index 7141145..807dcd3 100644 --- a/build.rs +++ b/build.rs @@ -158,4 +158,12 @@ fn main() { simd_build.include("."); simd_build.compile("simd"); } + + if os == "macos" { + // Add Homebrew lib path for Apple Silicon Macs + println!("cargo:rustc-link-search=native=/opt/homebrew/lib"); + // Add Homebrew lib path for Intel Macs + println!("cargo:rustc-link-search=native=/usr/local/lib"); + println!("cargo:rustc-link-lib=static=MoltenVK"); + } } From 687badc14208b2240c2acbfd68b9e4295bd4efc2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 29 Jan 2025 10:49:29 +0100 Subject: [PATCH 0258/1117] Modify RSP sync points (#198) * modify RSP sync points * more * more * more * more * more * more * more --- src/device.rs | 1 + src/device/rdp.rs | 11 ++++++++++- src/device/rsp_interface.rs | 28 +++++++++++++++++++++++----- src/device/rsp_su_instructions.rs | 3 --- 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/src/device.rs b/src/device.rs index 621faaa..b2970df 100644 --- a/src/device.rs +++ b/src/device.rs @@ -367,6 +367,7 @@ impl Device { regs: [0; rsp_interface::SP_REGS_COUNT as usize], regs2: [0; rsp_interface::SP_REGS2_COUNT as usize], mem: [0; 0x2000], + last_status_value: 0, fifo: [rsp_interface::RspDma { dir: rsp_interface::DmaDir::None, length: 0, diff --git a/src/device/rdp.rs b/src/device/rdp.rs index 971425c..c61f4db 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -52,7 +52,16 @@ pub fn read_regs_dpc( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { - device.rdp.regs_dpc[((address & 0xFFFF) >> 2) as usize] + let reg = (address & 0xFFFF) >> 2; + match reg as u32 { + DPC_CURRENT_REG => { + if device.rdp.wait_frozen { + device.rsp.cpu.sync_point = true; + } + device.rdp.regs_dpc[reg as usize] + } + _ => device.rdp.regs_dpc[reg as usize], + } } pub fn write_regs_dpc(device: &mut device::Device, address: u64, value: u32, mask: u32) { diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index 2fbb404..cec05b5 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -81,6 +81,7 @@ pub struct Rsp { pub regs2: [u32; SP_REGS2_COUNT as usize], pub mem: [u8; 0x2000], pub fifo: [RspDma; 2], + pub last_status_value: u32, } pub fn read_mem_fast( @@ -260,8 +261,27 @@ pub fn read_regs( ) -> u32 { let reg = (address & 0xFFFF) >> 2; match reg as u32 { + SP_DMA_BUSY_REG | SP_DMA_FULL_REG => { + if device.rsp.regs[reg as usize] != 0 { + device.rsp.cpu.sync_point = true; + } + device.rsp.regs[reg as usize] + } + SP_STATUS_REG => { + let value = device.rsp.regs[reg as usize] + & !(SP_STATUS_HALT | SP_STATUS_BROKE | SP_STATUS_INTR_BREAK); + if value == device.rsp.last_status_value && value != 0 { + device.rsp.cpu.sync_point = true; + } + device.rsp.last_status_value = value; + device.rsp.regs[reg as usize] + } SP_SEMAPHORE_REG => { let value = device.rsp.regs[reg as usize]; + if value == 1 { + device.rsp.cpu.sync_point = true; + device.rsp.cpu.cycle_counter += 4; // needed for DK64 + } device.rsp.regs[reg as usize] = 1; value } @@ -284,9 +304,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u SP_SEMAPHORE_REG => { device::memory::masked_write_32(&mut device.rsp.regs[reg as usize], 0, mask) } - _ => { - device::memory::masked_write_32(&mut device.rsp.regs[reg as usize], value, mask); - } + _ => device::memory::masked_write_32(&mut device.rsp.regs[reg as usize], value, mask), } } @@ -421,12 +439,13 @@ fn update_sp_status(device: &mut device::Device, w: u32) { if device.rsp.regs[SP_STATUS_REG as usize] & SP_STATUS_HALT == 0 && was_halted { device.rsp.cpu.broken = false; device.rsp.cpu.halted = false; - device.rsp.cpu.sync_point = false; do_task(device); } } fn do_task(device: &mut device::Device) { + device.rsp.cpu.sync_point = false; + device.rsp.last_status_value = 0; let timer = device::rsp_cpu::run(device); device::events::create_event( @@ -450,7 +469,6 @@ fn rsp_event(device: &mut device::Device) { device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_HALT; return; } - device.rsp.cpu.sync_point = false; do_task(device) } diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index b454e73..07d0e9f 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -565,8 +565,6 @@ pub fn mfc0(device: &mut device::Device, opcode: u32) { device::memory::AccessSize::Word, ) } - device.rsp.cpu.cycle_counter += 4; // needed for DK64 - device.rsp.cpu.sync_point = true; } pub fn mtc0(device: &mut device::Device, opcode: u32) { @@ -592,7 +590,6 @@ pub fn mtc0(device: &mut device::Device, opcode: u32) { !device::rsp_interface::SP_STATUS_HALT; // set halt when event happens device.rsp.cpu.halted = true // the RSP can halt itself by setting SP_SET_HALT } - device.rsp.cpu.sync_point = true; } pub fn mfc2(device: &mut device::Device, opcode: u32) { From 7219a4445cf6fe8343a60fbb398ec7dbb24e58aa Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 29 Jan 2025 11:14:50 +0100 Subject: [PATCH 0259/1117] add another sync point for RSP (#199) --- src/device/rsp_interface.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index cec05b5..2fb9886 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -273,6 +273,9 @@ pub fn read_regs( if value == device.rsp.last_status_value && value != 0 { device.rsp.cpu.sync_point = true; } + if value & (SP_STATUS_DMA_BUSY | SP_STATUS_DMA_FULL) != 0 { + device.rsp.cpu.sync_point = true; + } device.rsp.last_status_value = value; device.rsp.regs[reg as usize] } From 1b1313003cadaa25b8764038c55cc0050667dc1e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 29 Jan 2025 12:50:29 +0100 Subject: [PATCH 0260/1117] dont run rsp task when dma is busy (#200) --- src/device.rs | 1 + src/device/rsp_interface.rs | 25 +++++++++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/device.rs b/src/device.rs index b2970df..13cfad4 100644 --- a/src/device.rs +++ b/src/device.rs @@ -368,6 +368,7 @@ impl Device { regs2: [0; rsp_interface::SP_REGS2_COUNT as usize], mem: [0; 0x2000], last_status_value: 0, + run_after_dma: false, fifo: [rsp_interface::RspDma { dir: rsp_interface::DmaDir::None, length: 0, diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index 2fb9886..097db3f 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -82,6 +82,7 @@ pub struct Rsp { pub mem: [u8; 0x2000], pub fifo: [RspDma; 2], pub last_status_value: u32, + pub run_after_dma: bool, } pub fn read_mem_fast( @@ -250,7 +251,11 @@ fn fifo_pop(device: &mut device::Device) { do_dma(device, device.rsp.fifo[0]) } else { device.rsp.regs[SP_DMA_BUSY_REG as usize] = 0; - device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_DMA_BUSY + device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_DMA_BUSY; + if device.rsp.run_after_dma { + device.rsp.run_after_dma = false; + do_task(device); + } } } @@ -449,14 +454,18 @@ fn update_sp_status(device: &mut device::Device, w: u32) { fn do_task(device: &mut device::Device) { device.rsp.cpu.sync_point = false; device.rsp.last_status_value = 0; - let timer = device::rsp_cpu::run(device); + if device.rsp.regs[SP_DMA_BUSY_REG as usize] == 1 { + device.rsp.run_after_dma = true + } else { + let timer = device::rsp_cpu::run(device); - device::events::create_event( - device, - device::events::EventType::SP, - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + timer, - rsp_event, - ) + device::events::create_event( + device, + device::events::EventType::SP, + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + timer, + rsp_event, + ) + } } fn rsp_event(device: &mut device::Device) { From cb9309d7e49e4f1009ad0de07927e9338f838127 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 29 Jan 2025 20:21:49 +0100 Subject: [PATCH 0261/1117] RDP sync updates (#201) * RDP sync updates * rename * rename --- build.rs | 1 + parallel-rdp/interface.cpp | 13 +++++++------ parallel-rdp/interface.hpp | 1 + src/device/rdp.rs | 5 +++++ src/ui/video.rs | 4 ++++ 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/build.rs b/build.rs index 807dcd3..a717c62 100644 --- a/build.rs +++ b/build.rs @@ -98,6 +98,7 @@ fn main() { .allowlist_function("rdp_close") .allowlist_function("rdp_set_vi_register") .allowlist_function("rdp_update_screen") + .allowlist_function("rdp_full_sync") .allowlist_function("rdp_process_commands") .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) .generate() diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index c6635c0..5f8707d 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -62,6 +62,7 @@ static int cmd_cur; static int cmd_ptr; static bool emu_running; static GFX_INFO gfx_info; +static uint64_t sync_signal; static const unsigned cmd_len_lut[64] = { 1, @@ -383,8 +384,6 @@ uint64_t rdp_process_commands() if ((cmd_ptr + length) & ~(0x0003FFFF >> 3)) return interrupt_timer; - *gfx_info.DPC_STATUS_REG |= DP_STATUS_PIPE_BUSY | DP_STATUS_START_GCLK; - uint32_t offset = DP_CURRENT; if (*gfx_info.DPC_STATUS_REG & DP_STATUS_XBUS_DMA) { @@ -433,7 +432,7 @@ uint64_t rdp_process_commands() if (RDP::Op(command) == RDP::Op::SyncFull) { - processor->wait_for_timeline(processor->signal_timeline()); + sync_signal = processor->signal_timeline(); uint32_t width = viCalculateHorizonalWidth(*gfx_info.VI_H_START_REG, *gfx_info.VI_X_SCALE_REG, *gfx_info.VI_WIDTH_REG); if (width == 0) @@ -446,8 +445,6 @@ uint64_t rdp_process_commands() height = 240; } interrupt_timer = width * height * 4; - - *gfx_info.DPC_STATUS_REG &= ~(DP_STATUS_PIPE_BUSY | DP_STATUS_START_GCLK); } cmd_cur += cmd_length; @@ -456,7 +453,11 @@ uint64_t rdp_process_commands() cmd_ptr = 0; cmd_cur = 0; *gfx_info.DPC_CURRENT_REG = *gfx_info.DPC_END_REG; - *gfx_info.DPC_STATUS_REG |= DP_STATUS_CBUF_READY; return interrupt_timer; } + +void rdp_full_sync() +{ + processor->wait_for_timeline(sync_signal); +} diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index b53268e..67075e8 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -28,6 +28,7 @@ extern "C" void rdp_set_vi_register(uint32_t reg, uint32_t value); bool rdp_update_screen(); uint64_t rdp_process_commands(); + void rdp_full_sync(); #ifdef __cplusplus } diff --git a/src/device/rdp.rs b/src/device/rdp.rs index c61f4db..5d46e61 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -102,6 +102,7 @@ pub fn write_regs_dpc(device: &mut device::Device, address: u64, value: u32, mas fn run_rdp(device: &mut device::Device) { let timer = ui::video::process_rdp_list(); + device.rdp.regs_dpc[DPC_STATUS_REG as usize] |= DPC_STATUS_START_GCLK | DPC_STATUS_PIPE_BUSY; if timer != 0 { device::events::create_event( @@ -183,5 +184,9 @@ pub fn init(device: &mut device::Device) { } fn rdp_interrupt_event(device: &mut device::Device) { + device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !(DPC_STATUS_START_GCLK | DPC_STATUS_PIPE_BUSY); + + ui::video::full_sync(); + device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_DP) } diff --git a/src/ui/video.rs b/src/ui/video.rs index dfa52e5..ff38bf8 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -73,6 +73,10 @@ pub fn process_rdp_list() -> u64 { unsafe { rdp_process_commands() } } +pub fn full_sync() { + unsafe { rdp_full_sync() } +} + pub fn draw_text(text: &str, renderer: *mut sdl3_sys::render::SDL_Renderer, font: &rusttype::Font) { let text_size = 32; let scale = rusttype::Scale::uniform(text_size as f32); From 363ed0953aff863d2b7b3ad6c471e0577564b415 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 29 Jan 2025 20:49:21 +0100 Subject: [PATCH 0262/1117] set specific version for apt cache --- .github/workflows/build.yml | 2 +- .github/workflows/lint.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 22dd9d9..f5b426d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -39,7 +39,7 @@ jobs: libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \ libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev - version: 1.0 + version: ${{ matrix.target }}-1.0 - name: Build run: | cargo build --release -v --target=${{ matrix.target }} diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index fb986ec..cfaccc8 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -30,7 +30,7 @@ jobs: libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \ libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev - version: 1.0 + version: lint-1.0 - name: Rustfmt Check uses: actions-rust-lang/rustfmt@v1 - name: Lint From 026e4c0e74153580f2b536403ebbfeb7513181f9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 29 Jan 2025 21:06:36 +0100 Subject: [PATCH 0263/1117] Bump to 0.1.26 (#202) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index b115059..ddc411b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.25" +version = "0.1.26" edition = "2021" rust-version = "1.82" From f84444a12ead378b4403dec2c431540a41ee0c07 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 30 Jan 2025 14:42:04 +0100 Subject: [PATCH 0264/1117] remove rdp_full_sync (#203) * remove rdp_full_sync * swap * swap --- .github/workflows/build.yml | 5 +++++ build.rs | 1 - parallel-rdp/interface.cpp | 8 +------- parallel-rdp/interface.hpp | 1 - src/device/rdp.rs | 2 -- src/ui/video.rs | 4 ---- 6 files changed, 6 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f5b426d..e9481b7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -42,6 +42,11 @@ jobs: version: ${{ matrix.target }}-1.0 - name: Build run: | + sudo fallocate -l 4G /swapfile2 + sudo chmod 600 /swapfile2 + sudo mkswap /swapfile2 + sudo swapon /swapfile2 + free -h cargo build --release -v --target=${{ matrix.target }} - name: Upload file uses: actions/upload-artifact@v4 diff --git a/build.rs b/build.rs index a717c62..807dcd3 100644 --- a/build.rs +++ b/build.rs @@ -98,7 +98,6 @@ fn main() { .allowlist_function("rdp_close") .allowlist_function("rdp_set_vi_register") .allowlist_function("rdp_update_screen") - .allowlist_function("rdp_full_sync") .allowlist_function("rdp_process_commands") .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) .generate() diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 5f8707d..8be5c43 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -62,7 +62,6 @@ static int cmd_cur; static int cmd_ptr; static bool emu_running; static GFX_INFO gfx_info; -static uint64_t sync_signal; static const unsigned cmd_len_lut[64] = { 1, @@ -432,7 +431,7 @@ uint64_t rdp_process_commands() if (RDP::Op(command) == RDP::Op::SyncFull) { - sync_signal = processor->signal_timeline(); + processor->wait_for_timeline(processor->signal_timeline()); uint32_t width = viCalculateHorizonalWidth(*gfx_info.VI_H_START_REG, *gfx_info.VI_X_SCALE_REG, *gfx_info.VI_WIDTH_REG); if (width == 0) @@ -456,8 +455,3 @@ uint64_t rdp_process_commands() return interrupt_timer; } - -void rdp_full_sync() -{ - processor->wait_for_timeline(sync_signal); -} diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 67075e8..b53268e 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -28,7 +28,6 @@ extern "C" void rdp_set_vi_register(uint32_t reg, uint32_t value); bool rdp_update_screen(); uint64_t rdp_process_commands(); - void rdp_full_sync(); #ifdef __cplusplus } diff --git a/src/device/rdp.rs b/src/device/rdp.rs index 5d46e61..f9c2e21 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -186,7 +186,5 @@ pub fn init(device: &mut device::Device) { fn rdp_interrupt_event(device: &mut device::Device) { device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !(DPC_STATUS_START_GCLK | DPC_STATUS_PIPE_BUSY); - ui::video::full_sync(); - device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_DP) } diff --git a/src/ui/video.rs b/src/ui/video.rs index ff38bf8..dfa52e5 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -73,10 +73,6 @@ pub fn process_rdp_list() -> u64 { unsafe { rdp_process_commands() } } -pub fn full_sync() { - unsafe { rdp_full_sync() } -} - pub fn draw_text(text: &str, renderer: *mut sdl3_sys::render::SDL_Renderer, font: &rusttype::Font) { let text_size = 32; let scale = rusttype::Scale::uniform(text_size as f32); From fe5346235ece8b9de62a5ed411cc386a8c25131d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 30 Jan 2025 19:32:56 +0100 Subject: [PATCH 0265/1117] fix freeze in JFG (#204) * fix freeze in JFG * more --- .github/workflows/build.yml | 5 ----- src/device/rdp.rs | 1 + 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e9481b7..f5b426d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -42,11 +42,6 @@ jobs: version: ${{ matrix.target }}-1.0 - name: Build run: | - sudo fallocate -l 4G /swapfile2 - sudo chmod 600 /swapfile2 - sudo mkswap /swapfile2 - sudo swapon /swapfile2 - free -h cargo build --release -v --target=${{ matrix.target }} - name: Upload file uses: actions/upload-artifact@v4 diff --git a/src/device/rdp.rs b/src/device/rdp.rs index f9c2e21..6b04b90 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -54,6 +54,7 @@ pub fn read_regs_dpc( ) -> u32 { let reg = (address & 0xFFFF) >> 2; match reg as u32 { + DPC_CLOCK_REG => 0xFFFFFF, // needed for JFG DPC_CURRENT_REG => { if device.rdp.wait_frozen { device.rsp.cpu.sync_point = true; From ca2a3d423b3cdc8449e2387f7f99d94f1e62891d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 30 Jan 2025 19:33:47 +0100 Subject: [PATCH 0266/1117] Bump to 1.0.0 (#205) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index ddc411b..dcfbffe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.26" +version = "1.0.0" edition = "2021" rust-version = "1.82" From 39ffad3af33439df903e0dd4f8a4ce2d1d0e50fb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 30 Jan 2025 21:08:05 +0100 Subject: [PATCH 0267/1117] Bump to 1.0.1 (#206) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index dcfbffe..97c3144 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.0" +version = "1.0.1" edition = "2021" rust-version = "1.82" From 5c98a08fe476192209d3e032da736755b11dda0f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 1 Feb 2025 19:16:38 +0100 Subject: [PATCH 0268/1117] remove schedule_rcp_interrupt (#208) * remove schedule_rcp_interrupt * more * more * more --- src/device.rs | 1 + src/device/ai.rs | 2 +- src/device/cop0.rs | 10 +++++----- src/device/events.rs | 2 +- src/device/exceptions.rs | 37 ++++++++++++++++++++++++++++--------- src/device/mi.rs | 34 +++------------------------------- src/device/rsp_interface.rs | 2 +- 7 files changed, 40 insertions(+), 48 deletions(-) diff --git a/src/device.rs b/src/device.rs index 13cfad4..47dda62 100644 --- a/src/device.rs +++ b/src/device.rs @@ -196,6 +196,7 @@ impl Device { regs: [0; cop0::COP0_REGS_COUNT as usize], reg_write_masks: [0; cop0::COP0_REGS_COUNT as usize], reg_latch: 0, + pending_compare_interrupt: false, instrs: [cop0::reserved; 32], instrs2: [cop0::reserved; 32], tlb_lut_w: vec![ diff --git a/src/device/ai.rs b/src/device/ai.rs index bb62d70..db98341 100644 --- a/src/device/ai.rs +++ b/src/device/ai.rs @@ -68,7 +68,7 @@ fn do_dma(device: &mut device::Device) { device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + device.ai.fifo[0].duration, dma_event, ); - device::mi::schedule_rcp_interrupt(device, device::mi::MI_INTR_AI); + device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_AI); } fn fifo_push(device: &mut device::Device) { diff --git a/src/device/cop0.rs b/src/device/cop0.rs index 0a4e7bb..c4c34c6 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -55,14 +55,14 @@ pub const COP0_CAUSE_EXCCODE_CPU: u64 = 11 << 2; pub const COP0_CAUSE_EXCCODE_TR: u64 = 13 << 2; pub const COP0_CAUSE_EXCCODE_FPE: u64 = 15 << 2; pub const COP0_CAUSE_IP2: u64 = 1 << 10; -const COP0_CAUSE_IP7: u64 = 1 << 15; +pub const COP0_CAUSE_IP7: u64 = 1 << 15; pub const COP0_CAUSE_BD: u64 = 1 << 31; pub const COP0_CAUSE_CE1: u64 = 1 << 28; pub const COP0_CAUSE_CE2: u64 = 1 << 29; pub const COP0_CAUSE_IP_MASK: u64 = 0b00000000000000001111111100000000; -pub const COP0_CAUSE_EXCCODE_MASK: u64 = 0x1F << 2; +//pub const COP0_CAUSE_EXCCODE_MASK: u64 = 0x1F << 2; pub const COP0_CONTEXT_BADVPN2_MASK: u64 = 0b00000000011111111111111111110000; pub const COP0_XCONTEXT_BADVPN2_MASK: u64 = 0b01111111111111111111111111110000; pub const COP0_XCONTEXT_REGION_MASK: u64 = 0b110000000000000000000000000000000; @@ -97,6 +97,7 @@ pub struct Cop0 { pub tlb_lut_r: Vec, pub tlb_lut_w: Vec, pub tlb_entries: [device::tlb::TlbEntry; 32], + pub pending_compare_interrupt: bool, } fn mfc0(device: &mut device::Device, opcode: u32) { @@ -214,6 +215,7 @@ fn set_control_registers(device: &mut device::Device, index: u32, mut data: u64) compare_event, ); device.cpu.cop0.regs[COP0_CAUSE_REG as usize] &= !COP0_CAUSE_IP7; + device.cpu.cop0.pending_compare_interrupt = false; } COP0_STATUS_REG => { if data & COP0_STATUS_FR != device.cpu.cop0.regs[index as usize] & COP0_STATUS_FR { @@ -231,9 +233,7 @@ fn set_control_registers(device: &mut device::Device, index: u32, mut data: u64) } fn compare_event(device: &mut device::Device) { - device.cpu.cop0.regs[COP0_CAUSE_REG as usize] &= !COP0_CAUSE_EXCCODE_MASK; - device.cpu.cop0.regs[COP0_CAUSE_REG as usize] |= COP0_CAUSE_IP7; - + device.cpu.cop0.pending_compare_interrupt = true; device::events::create_event( device, device::events::EventType::Compare, diff --git a/src/device/events.rs b/src/device/events.rs index ee7c283..70d4f13 100644 --- a/src/device/events.rs +++ b/src/device/events.rs @@ -8,7 +8,7 @@ pub enum EventType { PI, DP, SP, - InterruptCheck, + Interrupt, SPDma, Compare, Vru, diff --git a/src/device/exceptions.rs b/src/device/exceptions.rs index 4558b71..5ddc51e 100644 --- a/src/device/exceptions.rs +++ b/src/device/exceptions.rs @@ -1,15 +1,6 @@ use crate::device; pub fn check_pending_interrupts(device: &mut device::Device) { - if (device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] - & device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] - & device::cop0::COP0_CAUSE_IP_MASK) - == 0 - { - // interrupt disabled, or no pending interrupts - return; - } - if (device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & (device::cop0::COP0_STATUS_IE | device::cop0::COP0_STATUS_EXL @@ -20,6 +11,34 @@ pub fn check_pending_interrupts(device: &mut device::Device) { return; } + if device.mi.regs[device::mi::MI_INTR_REG as usize] + & device.mi.regs[device::mi::MI_INTR_MASK_REG as usize] + != 0 + { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = device::cop0::COP0_CAUSE_IP2; + } else if device.cpu.cop0.pending_compare_interrupt { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = device::cop0::COP0_CAUSE_IP7; + device.cpu.cop0.pending_compare_interrupt = false; + } + + if (device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] + & device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] + & device::cop0::COP0_CAUSE_IP_MASK) + == 0 + { + // interrupt disabled, or no pending interrupts + return; + } + + device::events::create_event( + device, + device::events::EventType::Interrupt, + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize], + interrupt_exception, + ); +} + +pub fn interrupt_exception(device: &mut device::Device) { exception_general(device, 0x180); } diff --git a/src/device/mi.rs b/src/device/mi.rs index 595dd12..c48b491 100644 --- a/src/device/mi.rs +++ b/src/device/mi.rs @@ -2,8 +2,8 @@ use crate::device; const MI_INIT_MODE_REG: u32 = 0; const MI_VERSION_REG: u32 = 1; -const MI_INTR_REG: u32 = 2; -const MI_INTR_MASK_REG: u32 = 3; +pub const MI_INTR_REG: u32 = 2; +pub const MI_INTR_MASK_REG: u32 = 3; pub const MI_REGS_COUNT: u32 = 4; /* read */ @@ -64,11 +64,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u _ => device::memory::masked_write_32(&mut device.mi.regs[reg as usize], value, mask), } - if device.mi.regs[MI_INTR_REG as usize] & device.mi.regs[MI_INTR_MASK_REG as usize] != 0 { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= - !device::cop0::COP0_CAUSE_EXCCODE_MASK; - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] |= device::cop0::COP0_CAUSE_IP2; - } else { + if device.mi.regs[MI_INTR_REG as usize] & device.mi.regs[MI_INTR_MASK_REG as usize] == 0 { device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= !device::cop0::COP0_CAUSE_IP2; } @@ -149,37 +145,13 @@ pub fn clear_rcp_interrupt(device: &mut device::Device, interrupt: u32) { device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= !device::cop0::COP0_CAUSE_IP2; } - device::exceptions::check_pending_interrupts(device) } pub fn set_rcp_interrupt(device: &mut device::Device, interrupt: u32) { device.mi.regs[MI_INTR_REG as usize] |= interrupt; - - if device.mi.regs[MI_INTR_REG as usize] & device.mi.regs[MI_INTR_MASK_REG as usize] != 0 { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= - !device::cop0::COP0_CAUSE_EXCCODE_MASK; - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] |= device::cop0::COP0_CAUSE_IP2; - } device::exceptions::check_pending_interrupts(device) } -pub fn schedule_rcp_interrupt(device: &mut device::Device, interrupt: u32) { - device.mi.regs[MI_INTR_REG as usize] |= interrupt; - - if device.mi.regs[MI_INTR_REG as usize] & device.mi.regs[MI_INTR_MASK_REG as usize] != 0 { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= - !device::cop0::COP0_CAUSE_EXCCODE_MASK; - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] |= device::cop0::COP0_CAUSE_IP2; - } - - device::events::create_event( - device, - device::events::EventType::InterruptCheck, - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize], - device::exceptions::check_pending_interrupts, - ) -} - pub fn init(device: &mut device::Device) { device.mi.regs[MI_VERSION_REG as usize] = 0x02020102 } diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index 097db3f..60d1ce8 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -361,7 +361,7 @@ fn update_sp_status(device: &mut device::Device, w: u32) { } /* set SP interrupt */ if (w & SP_SET_INTR) != 0 && (w & SP_CLR_INTR) == 0 { - device::mi::schedule_rcp_interrupt(device, device::mi::MI_INTR_SP); + device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_SP); } /* clear / set single step */ From 7d63a694cccfbb4295e0b9bfe70b8d564b06813d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 1 Feb 2025 20:47:26 +0100 Subject: [PATCH 0269/1117] fix compare interrupt (#210) --- src/device/exceptions.rs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/device/exceptions.rs b/src/device/exceptions.rs index 5ddc51e..892a7fa 100644 --- a/src/device/exceptions.rs +++ b/src/device/exceptions.rs @@ -30,12 +30,16 @@ pub fn check_pending_interrupts(device: &mut device::Device) { return; } - device::events::create_event( - device, - device::events::EventType::Interrupt, - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize], - interrupt_exception, - ); + if device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] == device::cop0::COP0_CAUSE_IP7 { + interrupt_exception(device); + } else { + device::events::create_event( + device, + device::events::EventType::Interrupt, + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize], + interrupt_exception, + ); + } } pub fn interrupt_exception(device: &mut device::Device) { From a7c2c26d7881abcd9efba63a000a4ba97a820607 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 2 Feb 2025 11:23:32 +0100 Subject: [PATCH 0270/1117] minor tweak to interrupt system (#211) --- src/device.rs | 1 + src/device/cop0.rs | 1 + src/device/events.rs | 2 ++ src/device/exceptions.rs | 2 +- src/ui/audio.rs | 2 +- 5 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/device.rs b/src/device.rs index 47dda62..86f2673 100644 --- a/src/device.rs +++ b/src/device.rs @@ -196,6 +196,7 @@ impl Device { regs: [0; cop0::COP0_REGS_COUNT as usize], reg_write_masks: [0; cop0::COP0_REGS_COUNT as usize], reg_latch: 0, + is_event: false, pending_compare_interrupt: false, instrs: [cop0::reserved; 32], instrs2: [cop0::reserved; 32], diff --git a/src/device/cop0.rs b/src/device/cop0.rs index c4c34c6..36820f5 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -97,6 +97,7 @@ pub struct Cop0 { pub tlb_lut_r: Vec, pub tlb_lut_w: Vec, pub tlb_entries: [device::tlb::TlbEntry; 32], + pub is_event: bool, pub pending_compare_interrupt: bool, } diff --git a/src/device/events.rs b/src/device/events.rs index 70d4f13..3aa48ed 100644 --- a/src/device/events.rs +++ b/src/device/events.rs @@ -53,7 +53,9 @@ pub fn trigger_event(device: &mut device::Device) { device.cpu.events[next_event_name].enabled = false; let handler = device.cpu.events[next_event_name].handler; + device.cpu.cop0.is_event = true; handler(device); + device.cpu.cop0.is_event = false; set_next_event(device); } diff --git a/src/device/exceptions.rs b/src/device/exceptions.rs index 892a7fa..1e72d2c 100644 --- a/src/device/exceptions.rs +++ b/src/device/exceptions.rs @@ -30,7 +30,7 @@ pub fn check_pending_interrupts(device: &mut device::Device) { return; } - if device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] == device::cop0::COP0_CAUSE_IP7 { + if device.cpu.cop0.is_event { interrupt_exception(device); } else { device::events::create_event( diff --git a/src/ui/audio.rs b/src/ui/audio.rs index f0fbe19..fd309d9 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -116,7 +116,7 @@ pub fn play_audio(device: &mut device::Device, dram_addr: usize, length: u64) { let min_latency = (device.ui.audio_freq * 0.02) * 4.0; if audio_queued < min_latency { - let silence_buffer: Vec = vec![0; (min_latency - audio_queued) as usize & !3]; + let silence_buffer: Vec = vec![0; min_latency as usize & !3]; if !unsafe { sdl3_sys::audio::SDL_PutAudioStreamData( device.ui.audio_stream, From 1efdeafc317d3028b26c81baab97766d8f7a3588 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 2 Feb 2025 12:54:48 +0100 Subject: [PATCH 0271/1117] bump to 1.0.2 (#212) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 97c3144..4e0288c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.1" +version = "1.0.2" edition = "2021" rust-version = "1.82" From fba6a4a6d4d83689338529e611a88b8e131b3353 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 3 Feb 2025 10:22:21 +0100 Subject: [PATCH 0272/1117] support for Advanced Homebrew ROM Header (#213) * support for Advanced Homebrew ROM Header * more * more --- src/device.rs | 2 +- src/ui/storage.rs | 20 +++++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/device.rs b/src/device.rs index 86f2673..6561041 100644 --- a/src/device.rs +++ b/src/device.rs @@ -68,7 +68,7 @@ pub fn run_game(rom_contents: Vec, device: &mut Device, fullscreen: bool) { vi::init(device); cpu::init(device); - ui::storage::init(&mut device.ui); + ui::storage::init(&mut device.ui, &device.cart.rom); ui::storage::load_saves(&mut device.ui, &mut device.netplay); cart_rom::load_rom_save(device); diff --git a/src/ui/storage.rs b/src/ui/storage.rs index ad8dc86..0fd320d 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -29,7 +29,21 @@ pub struct Saves { pub romsave: (std::collections::HashMap, bool), } -fn get_save_type(game_id: &str) -> Vec { +fn get_save_type(rom: &[u8], game_id: &str) -> Vec { + let header_type = std::str::from_utf8(rom[0x3C..0x3E].try_into().unwrap()); + if header_type.is_ok() && header_type.unwrap() == "ED" { + let save_type = rom[0x3F] >> 4; + match save_type { + 0 => return vec![], + 1 => return vec![SaveTypes::Eeprom4k], + 2 => return vec![SaveTypes::Eeprom16k], + 3 => return vec![SaveTypes::Sram], + 4 => panic!("Unsupported save type: {:X}", save_type), + 5 => return vec![SaveTypes::Flash], + 6 => panic!("Unsupported save type: {:X}", save_type), + _ => panic!("Unknown save type: {:X}", save_type), + } + } match game_id { "NB7" | // Banjo-Tooie [Banjo to Kazooie no Daiboken 2 (J)] "NGT" | // City Tour GrandPrix - Zen Nihon GT Senshuken @@ -87,9 +101,9 @@ fn get_save_type(game_id: &str) -> Vec { } } -pub fn init(ui: &mut ui::Ui) { +pub fn init(ui: &mut ui::Ui, rom: &[u8]) { let id = ui.game_id.as_str(); - ui.save_type = get_save_type(id); + ui.save_type = get_save_type(rom, id); let base_path = ui.dirs.data_dir.join("saves"); From 14e45be3000628b7d5b2d23c61d9c0e5fb02e279 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 3 Feb 2025 16:41:46 +0100 Subject: [PATCH 0273/1117] SD card emulation (#214) * SD card emulation * more * more * more * more * more * more * more * better save name * better save name * better save name * more --- Cargo.toml | 1 + src/device.rs | 28 +-- src/device/cart.rs | 4 + src/device/{cart_rom.rs => cart/rom.rs} | 0 src/device/cart/sc64.rs | 233 ++++++++++++++++++++++++ src/device/{ => cart}/sram.rs | 0 src/device/memory.rs | 18 +- src/device/pi.rs | 17 +- src/ui.rs | 2 + src/ui/gui/gui_netplay.rs | 5 +- src/ui/storage.rs | 50 ++++- 11 files changed, 325 insertions(+), 33 deletions(-) rename src/device/{cart_rom.rs => cart/rom.rs} (100%) create mode 100644 src/device/cart/sc64.rs rename src/device/{ => cart}/sram.rs (100%) diff --git a/Cargo.toml b/Cargo.toml index 4e0288c..15b6754 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,6 +25,7 @@ mimalloc = "0.1" regex = "1.11" tungstenite = "0.26" socket2 = "0.5" +fatfs = "0.3" postcard = { version = "1.1", features = ["use-std"] } clap = { version = "4.4", features = ["derive"] } diff --git a/src/device.rs b/src/device.rs index 6561041..50b4f5e 100644 --- a/src/device.rs +++ b/src/device.rs @@ -19,7 +19,6 @@ use std::io::Read; pub mod ai; pub mod cache; pub mod cart; -pub mod cart_rom; pub mod controller; pub mod cop0; pub mod cop1; @@ -42,13 +41,12 @@ pub mod rsp_interface; pub mod rsp_su_instructions; pub mod rsp_vu_instructions; pub mod si; -pub mod sram; pub mod tlb; pub mod unmapped; pub mod vi; pub fn run_game(rom_contents: Vec, device: &mut Device, fullscreen: bool) { - cart_rom::init(device, rom_contents); // cart needs to come before rdram + cart::rom::init(device, rom_contents); // cart needs to come before rdram // rdram pointer is shared with parallel-rdp rdram::init(device); @@ -70,7 +68,7 @@ pub fn run_game(rom_contents: Vec, device: &mut Device, fullscreen: bool) { ui::storage::init(&mut device.ui, &device.cart.rom); ui::storage::load_saves(&mut device.ui, &mut device.netplay); - cart_rom::load_rom_save(device); + cart::rom::load_rom_save(device); cpu::run(device); @@ -163,18 +161,19 @@ pub struct Device { byte_swap: usize, pub cpu: cpu::Cpu, pif: pif::Pif, - cart: cart_rom::Cart, + cart: cart::rom::Cart, memory: memory::Memory, pub rsp: rsp_interface::Rsp, pub rdp: rdp::Rdp, pub rdram: rdram::Rdram, mi: mi::Mi, pi: pi::Pi, + sc64: cart::sc64::Sc64, pub vi: vi::Vi, ai: ai::Ai, si: si::Si, ri: ri::Ri, - flashram: sram::Flashram, + flashram: cart::sram::Flashram, pub vru: controller::vru::Vru, } @@ -290,13 +289,13 @@ impl Device { change_pak: controller::PakType::None, }; 5], }, - cart: cart_rom::Cart { + cart: cart::rom::Cart { rom: Vec::new(), is_viewer_buffer: [0; 0xFFFF], pal: false, latch: 0, cic_seed: 0, - cic_type: cart_rom::CicType::CicNus6102, + cic_type: cart::rom::CicType::CicNus6102, rdram_size_offset: 0, rtc: cart::AfRtc { control: 0x0200 }, }, @@ -389,6 +388,13 @@ impl Device { pi: pi::Pi { regs: [0; pi::PI_REGS_COUNT as usize], }, + sc64: cart::sc64::Sc64 { + regs: [0; cart::sc64::SC64_REGS_COUNT as usize], + regs_locked: true, + cfg: [0; cart::sc64::SC64_CFG_COUNT as usize], + sector: 0, + buffer: [0; 8192], + }, ai: ai::Ai { regs: [0; ai::AI_REGS_COUNT as usize], last_read: 0, @@ -416,12 +422,12 @@ impl Device { limiter: None, vi_counter: 0, }, - flashram: sram::Flashram { + flashram: cart::sram::Flashram { status: 0, erase_page: 0, page_buf: [0xff; 128], - silicon_id: [sram::FLASHRAM_TYPE_ID, sram::MX29L1100_ID], - mode: sram::FlashramMode::ReadArray, + silicon_id: [cart::sram::FLASHRAM_TYPE_ID, cart::sram::MX29L1100_ID], + mode: cart::sram::FlashramMode::ReadArray, }, vru: controller::vru::Vru { status: 0, diff --git a/src/device/cart.rs b/src/device/cart.rs index e59bc44..f004899 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -4,6 +4,10 @@ use chrono::Timelike; use crate::device; use crate::ui; +pub mod rom; +pub mod sc64; +pub mod sram; + const JCMD_STATUS: u8 = 0x00; const JCMD_EEPROM_READ: u8 = 0x04; const JCMD_EEPROM_WRITE: u8 = 0x05; diff --git a/src/device/cart_rom.rs b/src/device/cart/rom.rs similarity index 100% rename from src/device/cart_rom.rs rename to src/device/cart/rom.rs diff --git a/src/device/cart/sc64.rs b/src/device/cart/sc64.rs new file mode 100644 index 0000000..d60cc17 --- /dev/null +++ b/src/device/cart/sc64.rs @@ -0,0 +1,233 @@ +use crate::device; + +pub const SDCARD_SIZE: usize = 0x4000000; + +const SC64_SCR_REG: u32 = 0; +const SC64_DATA0_REG: u32 = 1; +const SC64_DATA1_REG: u32 = 2; +const SC64_IDENTIFIER_REG: u32 = 3; +const SC64_KEY_REG: u32 = 4; +//const SC64_IRQ_REG: u32 = 5; +//const SC64_AUX_REG: u32 = 6; +pub const SC64_REGS_COUNT: u32 = 7; + +pub const SC64_CFG_COUNT: u32 = 15; + +const SC64_BUFFER_MASK: usize = 0x1FFF; + +pub struct Sc64 { + pub buffer: [u8; 8192], + pub regs: [u32; SC64_REGS_COUNT as usize], + pub regs_locked: bool, + pub cfg: [u32; SC64_CFG_COUNT as usize], + pub sector: u32, +} + +fn format_sdcard(device: &mut device::Device) { + if device.ui.saves.sdcard.0.is_empty() { + device.ui.saves.sdcard.0.resize(SDCARD_SIZE, 0); + let buf = std::io::Cursor::new(&mut device.ui.saves.sdcard.0); + fatfs::format_volume(buf, fatfs::FormatVolumeOptions::new()).unwrap(); + } +} + +pub fn read_regs( + device: &mut device::Device, + address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + if device.sc64.regs_locked { + return 0; + } + let reg = (address & 0xFFFF) >> 2; + match reg as u32 { + SC64_SCR_REG | SC64_DATA0_REG | SC64_DATA1_REG => device.sc64.regs[reg as usize], + SC64_IDENTIFIER_REG => 0x53437632, + _ => panic!("unknown read reg {} address {:x}", reg, address), + } +} + +pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { + let reg = (address & 0xFFFF) >> 2; + match reg as u32 { + SC64_KEY_REG => { + device::memory::masked_write_32(&mut device.sc64.regs[reg as usize], value, mask); + if device.sc64.regs[SC64_KEY_REG as usize] == 0x4F434B5F { + device.sc64.regs_locked = false; + } else if device.sc64.regs[SC64_KEY_REG as usize] == 0xFFFFFFFF { + device.sc64.regs_locked = true; + } + } + SC64_DATA0_REG | SC64_DATA1_REG => { + if !device.sc64.regs_locked { + device::memory::masked_write_32(&mut device.sc64.regs[reg as usize], value, mask); + } + } + SC64_SCR_REG => { + if !device.sc64.regs_locked { + match char::from_u32(value & mask).unwrap() { + 'c' => { + // get config + device.sc64.regs[SC64_DATA1_REG as usize] = + device.sc64.cfg[device.sc64.regs[SC64_DATA0_REG as usize] as usize] + } + 'C' => { + // set config + std::mem::swap( + &mut device.sc64.cfg + [device.sc64.regs[SC64_DATA0_REG as usize] as usize], + &mut device.sc64.regs[SC64_DATA1_REG as usize], + ); + } + 'i' => { + // sd card operation + match device.sc64.regs[SC64_DATA1_REG as usize] { + 0 => { //Init SD card + } + 1 => { //Deinit SD card + } + _ => { + panic!( + "unknown sc64 sd card operation: {}", + device.sc64.regs[SC64_DATA1_REG as usize] + ) + } + } + } + 'I' => { + // set sd sector + device.sc64.sector = device.sc64.regs[SC64_DATA0_REG as usize]; + } + 's' => { + format_sdcard(device); + // read sd card + let address = device.sc64.regs[SC64_DATA0_REG as usize] as u64; + let offset = (device.sc64.sector * 512) as usize; + let length = (device.sc64.regs[SC64_DATA1_REG as usize] * 512) as usize; + let mut i = 0; + + while i < length { + if offset + i < device.ui.saves.sdcard.0.len() { + let data = u32::from_be_bytes( + device.ui.saves.sdcard.0[(offset + i)..(offset + i + 4)] + .try_into() + .unwrap(), + ); + + device.memory.memory_map_write[(address >> 16) as usize]( + device, + address + i as u64, + data, + 0xFFFFFFFF, + ); + } else { + panic!("sd card read out of bounds") + } + i += 4; + } + } + 'S' => { + format_sdcard(device); + // write sd card + let address = device.sc64.regs[SC64_DATA0_REG as usize] as u64; + let offset = (device.sc64.sector * 512) as usize; + let length = (device.sc64.regs[SC64_DATA1_REG as usize] * 512) as usize; + let mut i = 0; + + while i < length { + if offset + i < device.ui.saves.sdcard.0.len() { + let data = device.memory.memory_map_read[(address >> 16) as usize]( + device, + address + i as u64, + device::memory::AccessSize::Word, + ) + .to_be_bytes(); + device.ui.saves.sdcard.0[(offset + i)..(offset + i + 4)] + .copy_from_slice(&data); + } else { + panic!("sd card write out of bounds") + } + i += 4; + } + device.ui.saves.sdcard.1 = true; + } + _ => { + panic!( + "unknown sc64 command: {}", + char::from_u32(value & mask).unwrap() + ) + } + } + } + } + _ => panic!( + "unknown write reg {} address {:x} value {}", + reg, + address, + char::from_u32(value & mask).unwrap() + ), + } +} + +pub fn read_mem( + device: &mut device::Device, + address: u64, + _access_size: device::memory::AccessSize, +) -> u32 { + let masked_address = address as usize & SC64_BUFFER_MASK; + u32::from_be_bytes( + device.sc64.buffer[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ) +} + +pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { + let masked_address = address as usize & SC64_BUFFER_MASK; + let mut data = u32::from_be_bytes( + device.sc64.buffer[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ); + device::memory::masked_write_32(&mut data, value, mask); + device.sc64.buffer[masked_address..masked_address + 4].copy_from_slice(&data.to_be_bytes()); +} + +pub fn dma_read( + device: &mut device::Device, + mut cart_addr: u32, + mut dram_addr: u32, + length: u32, +) -> u64 { + dram_addr &= device::rdram::RDRAM_MASK as u32; + cart_addr &= SC64_BUFFER_MASK as u32; + let mut i = dram_addr; + let mut j = cart_addr; + + while i < dram_addr + length && i < device.rdram.size { + device.sc64.buffer[j as usize] = device.rdram.mem[i as usize ^ device.byte_swap]; + i += 1; + j += 1; + } + + device::pi::calculate_cycles(device, 1, length) +} + +pub fn dma_write( + device: &mut device::Device, + mut cart_addr: u32, + mut dram_addr: u32, + length: u32, +) -> u64 { + dram_addr &= device::rdram::RDRAM_MASK as u32; + cart_addr &= SC64_BUFFER_MASK as u32; + let mut i = dram_addr; + let mut j = cart_addr; + + while i < dram_addr + length && i < device.rdram.size { + device.rdram.mem[i as usize ^ device.byte_swap] = device.sc64.buffer[j as usize]; + i += 1; + j += 1; + } + device::pi::calculate_cycles(device, 1, length) +} diff --git a/src/device/sram.rs b/src/device/cart/sram.rs similarity index 100% rename from src/device/sram.rs rename to src/device/cart/sram.rs diff --git a/src/device/memory.rs b/src/device/memory.rs index d54e979..192ada4 100644 --- a/src/device/memory.rs +++ b/src/device/memory.rs @@ -19,6 +19,8 @@ pub const MM_CART_ROM: usize = 0x10000000; const MM_PIF_MEM: usize = 0x1fc00000; //const MM_DOM1_ADDR3: usize = 0x1fd00000; const MM_IS_VIEWER: usize = 0x13ff0000; +pub const MM_SC64_BUFFER: usize = 0x1ffe0000; +const MM_SC64_REGS: usize = 0x1fff0000; #[derive(PartialEq)] pub enum AccessType { @@ -142,18 +144,24 @@ pub fn init(device: &mut device::Device) { device.memory.memory_map_read[i] = device::si::read_regs; device.memory.memory_map_write[i] = device::si::write_regs; } else if (MM_DOM2_ADDR2 >> 16..=(MM_DOM2_ADDR2 + 0x1FFFF) >> 16).contains(&i) { - device.memory.memory_map_read[i] = device::sram::read_mem; - device.memory.memory_map_write[i] = device::sram::write_mem; + device.memory.memory_map_read[i] = device::cart::sram::read_mem; + device.memory.memory_map_write[i] = device::cart::sram::write_mem; } else if i >= MM_CART_ROM >> 16 && i <= (MM_CART_ROM + device.cart.rom.len() - 1) >> 16 { - device.memory.fast_read[i] = device::cart_rom::read_mem_fast; - device.memory.memory_map_read[i] = device::cart_rom::read_mem; - device.memory.memory_map_write[i] = device::cart_rom::write_mem; + device.memory.fast_read[i] = device::cart::rom::read_mem_fast; + device.memory.memory_map_read[i] = device::cart::rom::read_mem; + device.memory.memory_map_write[i] = device::cart::rom::write_mem; } else if i >= MM_IS_VIEWER >> 16 && i <= (MM_IS_VIEWER + 0xFFFF) >> 16 { device.memory.memory_map_read[i] = device::is_viewer::read_mem; device.memory.memory_map_write[i] = device::is_viewer::write_mem; } else if i >= MM_PIF_MEM >> 16 && i <= (MM_PIF_MEM + 0xFFFF) >> 16 { device.memory.memory_map_read[i] = device::pif::read_mem; device.memory.memory_map_write[i] = device::pif::write_mem; + } else if i >= MM_SC64_BUFFER >> 16 && i <= (MM_SC64_BUFFER + 0xFFFF) >> 16 { + device.memory.memory_map_read[i] = device::cart::sc64::read_mem; + device.memory.memory_map_write[i] = device::cart::sc64::write_mem; + } else if i >= MM_SC64_REGS >> 16 && i <= (MM_SC64_REGS + 0xFFFF) >> 16 { + device.memory.memory_map_read[i] = device::cart::sc64::read_regs; + device.memory.memory_map_write[i] = device::cart::sc64::write_regs; } } device::cache::init(device) diff --git a/src/device/pi.rs b/src/device/pi.rs index e2adb9c..2e94a50 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -114,15 +114,18 @@ fn dma_write(device: &mut device::Device) { fn get_handler(address: u32) -> PiHandler { let mut handler = PiHandler { - read: device::cart_rom::dma_read, - write: device::cart_rom::dma_write, + read: device::cart::rom::dma_read, + write: device::cart::rom::dma_write, }; - if address >= device::memory::MM_CART_ROM as u32 { - handler.read = device::cart_rom::dma_read; - handler.write = device::cart_rom::dma_write; + if address >= device::memory::MM_SC64_BUFFER as u32 { + handler.read = device::cart::sc64::dma_read; + handler.write = device::cart::sc64::dma_write; + } else if address >= device::memory::MM_CART_ROM as u32 { + handler.read = device::cart::rom::dma_read; + handler.write = device::cart::rom::dma_write; } else if address >= device::memory::MM_DOM2_ADDR2 as u32 { - handler.read = device::sram::dma_read; - handler.write = device::sram::dma_write; + handler.read = device::cart::sram::dma_read; + handler.write = device::cart::sram::dma_write; } else { panic!("unknown pi handler") } diff --git a/src/ui.rs b/src/ui.rs index 96ee1d6..4783b98 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -121,6 +121,7 @@ impl Ui { fla_file_path: std::path::PathBuf::new(), sra_file_path: std::path::PathBuf::new(), pak_file_path: std::path::PathBuf::new(), + sdcard_file_path: std::path::PathBuf::new(), romsave_file_path: std::path::PathBuf::new(), }, saves: storage::Saves { @@ -128,6 +129,7 @@ impl Ui { sram: (Vec::new(), false), flash: (Vec::new(), false), mempak: (Vec::new(), false), + sdcard: (Vec::new(), false), romsave: (std::collections::HashMap::new(), false), }, pak_audio: audio::PakAudio { diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index 0bcdf73..c1a88b6 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -394,12 +394,11 @@ fn get_sessions(app: &mut GopherEguiApp, ctx: &egui::Context) { fn parse_rom_file(file: std::path::PathBuf, tx: std::sync::mpsc::Sender) { let rom_contents = device::get_rom_contents(file.as_path()); if !rom_contents.is_empty() { - let hash = device::cart_rom::calculate_hash(&rom_contents); + let hash = device::cart::rom::calculate_hash(&rom_contents); let game_name = std::str::from_utf8(&rom_contents[0x20..0x20 + 0x14]) .unwrap() .trim() - .replace('\0', "") - .to_string(); + .replace('\0', ""); tx.send(( hash, game_name, diff --git a/src/ui/storage.rs b/src/ui/storage.rs index 0fd320d..beafdf5 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -8,6 +8,7 @@ pub enum SaveTypes { Sram, Flash, Mempak, + Sdcard, Romsave, } @@ -16,6 +17,7 @@ pub struct Paths { pub sra_file_path: std::path::PathBuf, pub fla_file_path: std::path::PathBuf, pub pak_file_path: std::path::PathBuf, + pub sdcard_file_path: std::path::PathBuf, pub romsave_file_path: std::path::PathBuf, } @@ -26,6 +28,7 @@ pub struct Saves { pub sram: (Vec, bool), pub flash: (Vec, bool), pub mempak: (Vec, bool), + pub sdcard: (Vec, bool), pub romsave: (std::collections::HashMap, bool), } @@ -102,35 +105,50 @@ fn get_save_type(rom: &[u8], game_id: &str) -> Vec { } pub fn init(ui: &mut ui::Ui, rom: &[u8]) { - let id = ui.game_id.as_str(); - ui.save_type = get_save_type(rom, id); + ui.save_type = get_save_type(rom, &ui.game_id); let base_path = ui.dirs.data_dir.join("saves"); + let game_name = std::str::from_utf8(&rom[0x20..0x20 + 0x14]) + .unwrap() + .trim() + .replace('\0', ""); + + let prefix = if game_name.is_empty() { + &ui.game_id + } else { + &game_name + }; + ui.paths.eep_file_path.clone_from(&base_path); ui.paths .eep_file_path - .push(ui.game_id.to_owned() + "-" + &ui.game_hash + ".eep"); + .push(prefix.to_owned() + "-" + &ui.game_hash + ".eep"); ui.paths.sra_file_path.clone_from(&base_path); ui.paths .sra_file_path - .push(ui.game_id.to_owned() + "-" + &ui.game_hash + ".sra"); + .push(prefix.to_owned() + "-" + &ui.game_hash + ".sra"); ui.paths.fla_file_path.clone_from(&base_path); ui.paths .fla_file_path - .push(ui.game_id.to_owned() + "-" + &ui.game_hash + ".fla"); + .push(prefix.to_owned() + "-" + &ui.game_hash + ".fla"); ui.paths.pak_file_path.clone_from(&base_path); ui.paths .pak_file_path - .push(ui.game_id.to_owned() + "-" + &ui.game_hash + ".mpk"); + .push(prefix.to_owned() + "-" + &ui.game_hash + ".mpk"); + + ui.paths.sdcard_file_path.clone_from(&base_path); + ui.paths + .sdcard_file_path + .push(prefix.to_owned() + "-" + &ui.game_hash + ".img"); ui.paths.romsave_file_path.clone_from(&base_path); ui.paths .romsave_file_path - .push(ui.game_id.to_owned() + "-" + &ui.game_hash + ".romsave"); + .push(prefix.to_owned() + "-" + &ui.game_hash + ".romsave"); } pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { @@ -151,6 +169,10 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { if mempak.is_ok() { ui.saves.mempak.0 = mempak.unwrap(); } + let sdcard = std::fs::read(&mut ui.paths.sdcard_file_path); + if sdcard.is_ok() { + ui.saves.sdcard.0 = sdcard.unwrap(); + } let romsave = std::fs::read(&mut ui.paths.romsave_file_path); if romsave.is_ok() { ui.saves.romsave.0 = postcard::from_bytes(romsave.unwrap().as_ref()).unwrap(); @@ -183,6 +205,12 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { &ui.saves.mempak.0, ui.saves.mempak.0.len(), ); + netplay::send_save( + netplay.as_mut().unwrap(), + "img", + &ui.saves.sdcard.0, + ui.saves.sdcard.0.len(), + ); let mut romsave_bytes: Vec = vec![]; if !ui.saves.romsave.0.is_empty() { romsave_bytes = postcard::to_stdvec(&ui.saves.romsave.0).unwrap(); @@ -198,6 +226,7 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { netplay::receive_save(netplay.as_mut().unwrap(), "sra", &mut ui.saves.sram.0); netplay::receive_save(netplay.as_mut().unwrap(), "fla", &mut ui.saves.flash.0); netplay::receive_save(netplay.as_mut().unwrap(), "mpk", &mut ui.saves.mempak.0); + netplay::receive_save(netplay.as_mut().unwrap(), "img", &mut ui.saves.sdcard.0); let mut romsave_bytes: Vec = vec![]; netplay::receive_save(netplay.as_mut().unwrap(), "rom", &mut romsave_bytes); if !romsave_bytes.is_empty() { @@ -226,6 +255,9 @@ pub fn write_saves(ui: &ui::Ui, netplay: &Option) { if ui.saves.mempak.1 { write_save(ui, SaveTypes::Mempak) } + if ui.saves.sdcard.1 && netplay.is_none() { + write_save(ui, SaveTypes::Sdcard) + } if ui.saves.romsave.1 { write_save(ui, SaveTypes::Romsave) } @@ -252,6 +284,10 @@ fn write_save(ui: &ui::Ui, save_type: SaveTypes) { path = ui.paths.pak_file_path.as_ref(); data = ui.saves.mempak.0.as_ref(); } + SaveTypes::Sdcard => { + path = ui.paths.sdcard_file_path.as_ref(); + data = ui.saves.sdcard.0.as_ref(); + } SaveTypes::Romsave => { write_rom_save(ui); return; From 920a0323c0af521d8b36f948906b951c0121d20b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 3 Feb 2025 16:49:42 +0100 Subject: [PATCH 0274/1117] cleanup --- src/ui/storage.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/storage.rs b/src/ui/storage.rs index beafdf5..4122025 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -255,7 +255,7 @@ pub fn write_saves(ui: &ui::Ui, netplay: &Option) { if ui.saves.mempak.1 { write_save(ui, SaveTypes::Mempak) } - if ui.saves.sdcard.1 && netplay.is_none() { + if ui.saves.sdcard.1 { write_save(ui, SaveTypes::Sdcard) } if ui.saves.romsave.1 { From 166b7daa9d8bc00f3d066b3a55565b0a4efcaef6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 3 Feb 2025 18:50:20 +0100 Subject: [PATCH 0275/1117] Bump to 1.0.3 (#215) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 15b6754..1d205d4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.2" +version = "1.0.3" edition = "2021" rust-version = "1.82" From ad4eddb40801de5b19dd25a5ad33b6445f787417 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 4 Feb 2025 13:01:33 +0100 Subject: [PATCH 0276/1117] Fix crash when game name cannot be parsed (#216) --- src/ui/gui/gui_netplay.rs | 10 ++++++---- src/ui/storage.rs | 9 +++++---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index c1a88b6..5cb816d 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -395,10 +395,12 @@ fn parse_rom_file(file: std::path::PathBuf, tx: std::sync::mpsc::Sender Date: Tue, 4 Feb 2025 13:14:57 +0100 Subject: [PATCH 0277/1117] Ignore summercart64 USB commands (#217) --- src/device/cart/sc64.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/device/cart/sc64.rs b/src/device/cart/sc64.rs index d60cc17..bd37c38 100644 --- a/src/device/cart/sc64.rs +++ b/src/device/cart/sc64.rs @@ -151,6 +151,8 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } device.ui.saves.sdcard.1 = true; } + 'U' => {} // USB_WRITE_STATUS, ignored + 'M' => {} // USB_WRITE, ignored _ => { panic!( "unknown sc64 command: {}", From f0eb5764c8edfe49fb09609bfa1b35b5caeb1cd5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 4 Feb 2025 15:37:55 +0100 Subject: [PATCH 0278/1117] emulate summercart64 ROM_WRITE_ENABLE flag (#218) * emulate summercart64 ROM_WRITE_ENABLE flag * clean up names --- src/device/cart/rom.rs | 49 ++++++++++++++++++++++++++++----------- src/device/cart/sc64.rs | 1 + src/ui/gui/gui_netplay.rs | 4 +++- src/ui/storage.rs | 4 +++- 4 files changed, 43 insertions(+), 15 deletions(-) diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 600461f..49a0364 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -56,7 +56,25 @@ pub fn read_mem( } } -pub fn write_mem(device: &mut device::Device, _address: u64, value: u32, mask: u32) { +pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { + if device.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] != 0 { + let masked_address = address as usize & CART_MASK; + let mut data = u32::from_be_bytes( + device.cart.rom[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ); + device::memory::masked_write_32(&mut data, value, mask); + device.cart.rom[masked_address..masked_address + 4].copy_from_slice(&data.to_be_bytes()); + for i in 0..4 { + device.ui.saves.romsave.0.insert( + (masked_address + i) as u32, + device.cart.rom[masked_address + i], + ); + } + device.ui.saves.romsave.1 = true; + } + device.cart.latch = value & mask; device.pi.regs[device::pi::PI_STATUS_REG as usize] |= device::pi::PI_STATUS_IO_BUSY; @@ -76,22 +94,26 @@ pub fn dma_read( mut dram_addr: u32, length: u32, ) -> u64 { - dram_addr &= device::rdram::RDRAM_MASK as u32; - cart_addr &= CART_MASK as u32; + if device.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] != 0 { + dram_addr &= device::rdram::RDRAM_MASK as u32; + cart_addr &= CART_MASK as u32; - for i in 0..length { - if cart_addr + i < device.cart.rom.len() as u32 { - device.cart.rom[(cart_addr + i) as usize] = - device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap]; + for i in 0..length { + if cart_addr + i < device.cart.rom.len() as u32 { + device.cart.rom[(cart_addr + i) as usize] = + device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap]; - device.ui.saves.romsave.0.insert( - cart_addr + i, - device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap], - ); + device + .ui + .saves + .romsave + .0 + .insert(cart_addr + i, device.cart.rom[(cart_addr + i) as usize]); + } } - } - device.ui.saves.romsave.1 = true; + device.ui.saves.romsave.1 = true; + } device::pi::calculate_cycles(device, 1, length) } @@ -183,6 +205,7 @@ fn set_cic(device: &mut device::Device) { device.cart.cic_type = CicType::CicNus5167; device.cart.cic_seed = 0xdd; device.cart.rdram_size_offset = 0x318; + device.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] = 1; } _ => { device.cart.cic_type = CicType::CicNus6102; diff --git a/src/device/cart/sc64.rs b/src/device/cart/sc64.rs index bd37c38..f55c247 100644 --- a/src/device/cart/sc64.rs +++ b/src/device/cart/sc64.rs @@ -11,6 +11,7 @@ const SC64_KEY_REG: u32 = 4; //const SC64_AUX_REG: u32 = 6; pub const SC64_REGS_COUNT: u32 = 7; +pub const SC64_ROM_WRITE_ENABLE: u32 = 1; pub const SC64_CFG_COUNT: u32 = 15; const SC64_BUFFER_MASK: usize = 0x1FFF; diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index 5cb816d..4435738 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -398,7 +398,9 @@ fn parse_rom_file(file: std::path::PathBuf, tx: std::sync::mpsc::Sender Date: Tue, 4 Feb 2025 15:42:29 +0100 Subject: [PATCH 0279/1117] collapse variable --- src/ui/gui/gui_netplay.rs | 6 ++++-- src/ui/storage.rs | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index 4435738..3d5ead5 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -399,8 +399,10 @@ fn parse_rom_file(file: std::path::PathBuf, tx: std::sync::mpsc::Sender Date: Tue, 4 Feb 2025 19:50:19 +0100 Subject: [PATCH 0280/1117] No need to check for ROM bounds on write (#219) * resize ROM when writing if needed * more --- src/device/cart/rom.rs | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 49a0364..47025d0 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -99,17 +99,15 @@ pub fn dma_read( cart_addr &= CART_MASK as u32; for i in 0..length { - if cart_addr + i < device.cart.rom.len() as u32 { - device.cart.rom[(cart_addr + i) as usize] = - device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap]; + device.cart.rom[(cart_addr + i) as usize] = + device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap]; - device - .ui - .saves - .romsave - .0 - .insert(cart_addr + i, device.cart.rom[(cart_addr + i) as usize]); - } + device + .ui + .saves + .romsave + .0 + .insert(cart_addr + i, device.cart.rom[(cart_addr + i) as usize]); } device.ui.saves.romsave.1 = true; From 96d2a72850ff8223c39089b585b264007450e40b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 4 Feb 2025 21:21:47 +0100 Subject: [PATCH 0281/1117] compress sd and rom saves during netplay (#220) * compress sd and rom saves during netplay * compress sd and rom saves during netplay --- src/ui/gui/gui_netplay.rs | 12 +----- src/ui/storage.rs | 77 +++++++++++++++++++++++++++++++-------- 2 files changed, 64 insertions(+), 25 deletions(-) diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index 3d5ead5..1d5286a 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -1,6 +1,6 @@ use crate::device; -use crate::ui::gui; use crate::ui::gui::GopherEguiApp; +use crate::ui::{self, gui}; use eframe::egui; use sha2::{Digest, Sha256}; @@ -395,15 +395,7 @@ fn parse_rom_file(file: std::path::PathBuf, tx: std::sync::mpsc::Sender Vec { } } -pub fn init(ui: &mut ui::Ui, rom: &[u8]) { - ui.save_type = get_save_type(rom, &ui.game_id); - - let base_path = ui.dirs.data_dir.join("saves"); - +pub fn get_game_name(rom: &[u8]) -> String { let mut game_name = "".to_owned(); let header_value = std::str::from_utf8(&rom[0x20..0x34]); if header_value.is_ok() { @@ -118,6 +116,15 @@ pub fn init(ui: &mut ui::Ui, rom: &[u8]) { .trim() .replace('\0', ""); } + game_name +} + +pub fn init(ui: &mut ui::Ui, rom: &[u8]) { + ui.save_type = get_save_type(rom, &ui.game_id); + + let base_path = ui.dirs.data_dir.join("saves"); + + let game_name = get_game_name(rom); let prefix = if game_name.is_empty() { &ui.game_id @@ -210,37 +217,77 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { &ui.saves.mempak.0, ui.saves.mempak.0.len(), ); + + let mut compressed_sd = Vec::new(); + if !ui.saves.sdcard.0.is_empty() { + compressed_sd = compress_file(&ui.saves.sdcard.0); + } netplay::send_save( netplay.as_mut().unwrap(), "img", - &ui.saves.sdcard.0, - ui.saves.sdcard.0.len(), + &compressed_sd, + compressed_sd.len(), ); - let mut romsave_bytes: Vec = vec![]; + + let mut compressed_romsave = Vec::new(); if !ui.saves.romsave.0.is_empty() { - romsave_bytes = postcard::to_stdvec(&ui.saves.romsave.0).unwrap(); + compressed_romsave = + compress_file(&postcard::to_stdvec(&ui.saves.romsave.0).unwrap()); } netplay::send_save( netplay.as_mut().unwrap(), "rom", - &romsave_bytes, - romsave_bytes.len(), + &compressed_romsave, + compressed_romsave.len(), ); } else { netplay::receive_save(netplay.as_mut().unwrap(), "eep", &mut ui.saves.eeprom.0); netplay::receive_save(netplay.as_mut().unwrap(), "sra", &mut ui.saves.sram.0); netplay::receive_save(netplay.as_mut().unwrap(), "fla", &mut ui.saves.flash.0); netplay::receive_save(netplay.as_mut().unwrap(), "mpk", &mut ui.saves.mempak.0); - netplay::receive_save(netplay.as_mut().unwrap(), "img", &mut ui.saves.sdcard.0); - let mut romsave_bytes: Vec = vec![]; - netplay::receive_save(netplay.as_mut().unwrap(), "rom", &mut romsave_bytes); - if !romsave_bytes.is_empty() { + + let mut compressed_sd = Vec::new(); + netplay::receive_save(netplay.as_mut().unwrap(), "img", &mut compressed_sd); + if !compressed_sd.is_empty() { + ui.saves.sdcard.0 = decompress_file(&compressed_sd); + } + + let mut compressed_romsave = Vec::new(); + netplay::receive_save(netplay.as_mut().unwrap(), "rom", &mut compressed_romsave); + if !compressed_romsave.is_empty() { + let romsave_bytes = decompress_file(&compressed_romsave); ui.saves.romsave.0 = postcard::from_bytes(&romsave_bytes).unwrap(); } } } } +fn decompress_file(input: &[u8]) -> Vec { + let mut decompressed_file = Vec::new(); + { + let mut reader = zip::ZipArchive::new(std::io::Cursor::new(input)).unwrap(); + let mut file = reader.by_index(0).unwrap(); + file.read_to_end(&mut decompressed_file).unwrap(); + } + decompressed_file +} + +fn compress_file(input: &[u8]) -> Vec { + let mut compressed_file = Vec::new(); + { + let mut writer = zip::ZipWriter::new(std::io::Cursor::new(&mut compressed_file)); + writer + .start_file( + "save", + zip::write::SimpleFileOptions::default() + .compression_method(zip::CompressionMethod::Deflated), + ) + .unwrap(); + writer.write_all(input).unwrap(); + } + compressed_file +} + fn write_rom_save(ui: &ui::Ui) { let data = postcard::to_stdvec(&ui.saves.romsave.0).unwrap(); std::fs::write(ui.paths.romsave_file_path.clone(), data).unwrap(); From 778a0a40159134f17c39ffcaf42eb2cde79c628e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Feb 2025 06:40:50 +0100 Subject: [PATCH 0282/1117] Update eframe requirement from 0.30 to 0.31 (#221) Updates the requirements on [eframe](https://github.com/emilk/egui) to permit the latest version. - [Release notes](https://github.com/emilk/egui/releases) - [Changelog](https://github.com/emilk/egui/blob/master/CHANGELOG.md) - [Commits](https://github.com/emilk/egui/compare/0.30.0...0.31.0) --- updated-dependencies: - dependency-name: eframe dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 1d205d4..0e69e46 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ sevenz-rust = "0.6" chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -eframe = "0.30" +eframe = "0.31" sha2 = "0.10" rusttype = "0.9" sdl3-sys = { version = "0.4", features = ["build-from-source-static"] } From 55ab1cb60b7ee5eebb49bc35a7096f4e0bc5c271 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 5 Feb 2025 10:29:07 +0100 Subject: [PATCH 0283/1117] Fix address masking in sc64 read/write (#222) * fix address masking for sc64 * more * more --- src/device/cart/sc64.rs | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/device/cart/sc64.rs b/src/device/cart/sc64.rs index f55c247..674d4bf 100644 --- a/src/device/cart/sc64.rs +++ b/src/device/cart/sc64.rs @@ -102,7 +102,15 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u 's' => { format_sdcard(device); // read sd card - let address = device.sc64.regs[SC64_DATA0_REG as usize] as u64; + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.sc64.regs[SC64_DATA0_REG as usize] as u64, + device::memory::AccessType::Write, + ); + if err { + panic!("TLB exception in SC64"); + } + let offset = (device.sc64.sector * 512) as usize; let length = (device.sc64.regs[SC64_DATA1_REG as usize] * 512) as usize; let mut i = 0; @@ -115,11 +123,12 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u .unwrap(), ); - device.memory.memory_map_write[(address >> 16) as usize]( + device::memory::data_write( device, - address + i as u64, + phys_address + i as u64, data, 0xFFFFFFFF, + cached, ); } else { panic!("sd card read out of bounds") @@ -130,17 +139,26 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u 'S' => { format_sdcard(device); // write sd card - let address = device.sc64.regs[SC64_DATA0_REG as usize] as u64; + let (phys_address, cached, err) = device::memory::translate_address( + device, + device.sc64.regs[SC64_DATA0_REG as usize] as u64, + device::memory::AccessType::Read, + ); + if err { + panic!("TLB exception in SC64"); + } + let offset = (device.sc64.sector * 512) as usize; let length = (device.sc64.regs[SC64_DATA1_REG as usize] * 512) as usize; let mut i = 0; while i < length { if offset + i < device.ui.saves.sdcard.0.len() { - let data = device.memory.memory_map_read[(address >> 16) as usize]( + let data = device::memory::data_read( device, - address + i as u64, + phys_address + i as u64, device::memory::AccessSize::Word, + cached, ) .to_be_bytes(); device.ui.saves.sdcard.0[(offset + i)..(offset + i + 4)] From 5b3e2a25de88ba0e78aaba19a2d692f74a62c10f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 5 Feb 2025 13:18:44 +0100 Subject: [PATCH 0284/1117] Fix out-of-bounds ROM dma (#223) * Fix out-of-bounds ROM dma * Fix out-of-bounds ROM dma * more --- src/device/cart/rom.rs | 22 ++++++++++++---------- src/device/cart/sc64.rs | 4 ++-- src/device/memory.rs | 2 +- src/device/pi.rs | 38 ++++++++++++++++++++++++++++++++++---- src/ui/storage.rs | 6 +++--- 5 files changed, 52 insertions(+), 20 deletions(-) diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 47025d0..be261c6 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -99,18 +99,20 @@ pub fn dma_read( cart_addr &= CART_MASK as u32; for i in 0..length { - device.cart.rom[(cart_addr + i) as usize] = - device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap]; + if cart_addr + i < device.cart.rom.len() as u32 { + device.cart.rom[(cart_addr + i) as usize] = + device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap]; - device - .ui - .saves - .romsave - .0 - .insert(cart_addr + i, device.cart.rom[(cart_addr + i) as usize]); + device + .ui + .saves + .romsave + .0 + .insert(cart_addr + i, device.cart.rom[(cart_addr + i) as usize]); + + device.ui.saves.romsave.1 = true; + } } - - device.ui.saves.romsave.1 = true; } device::pi::calculate_cycles(device, 1, length) diff --git a/src/device/cart/sc64.rs b/src/device/cart/sc64.rs index 674d4bf..9e1f6c6 100644 --- a/src/device/cart/sc64.rs +++ b/src/device/cart/sc64.rs @@ -44,7 +44,7 @@ pub fn read_regs( match reg as u32 { SC64_SCR_REG | SC64_DATA0_REG | SC64_DATA1_REG => device.sc64.regs[reg as usize], SC64_IDENTIFIER_REG => 0x53437632, - _ => panic!("unknown read reg {} address {:x}", reg, address), + _ => panic!("unknown read reg {} address {:#x}", reg, address), } } @@ -182,7 +182,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } } _ => panic!( - "unknown write reg {} address {:x} value {}", + "unknown write reg {} address {:#x} value {}", reg, address, char::from_u32(value & mask).unwrap() diff --git a/src/device/memory.rs b/src/device/memory.rs index 192ada4..a5707d7 100644 --- a/src/device/memory.rs +++ b/src/device/memory.rs @@ -16,7 +16,7 @@ const MM_SI_REGS: usize = 0x04800000; //const MM_DOM2_ADDR1: usize = 0x05000000; pub const MM_DOM2_ADDR2: usize = 0x08000000; pub const MM_CART_ROM: usize = 0x10000000; -const MM_PIF_MEM: usize = 0x1fc00000; +pub const MM_PIF_MEM: usize = 0x1fc00000; //const MM_DOM1_ADDR3: usize = 0x1fd00000; const MM_IS_VIEWER: usize = 0x13ff0000; pub const MM_SC64_BUFFER: usize = 0x1ffe0000; diff --git a/src/device/pi.rs b/src/device/pi.rs index 2e94a50..c02826c 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -117,17 +117,24 @@ fn get_handler(address: u32) -> PiHandler { read: device::cart::rom::dma_read, write: device::cart::rom::dma_write, }; - if address >= device::memory::MM_SC64_BUFFER as u32 { + if address >= device::memory::MM_SC64_BUFFER as u32 + && address < (device::memory::MM_SC64_BUFFER + 0x2000) as u32 + { handler.read = device::cart::sc64::dma_read; handler.write = device::cart::sc64::dma_write; - } else if address >= device::memory::MM_CART_ROM as u32 { + } else if address >= device::memory::MM_CART_ROM as u32 + && address < device::memory::MM_PIF_MEM as u32 + { handler.read = device::cart::rom::dma_read; handler.write = device::cart::rom::dma_write; - } else if address >= device::memory::MM_DOM2_ADDR2 as u32 { + } else if address >= device::memory::MM_DOM2_ADDR2 as u32 + && address < device::memory::MM_CART_ROM as u32 + { handler.read = device::cart::sram::dma_read; handler.write = device::cart::sram::dma_write; } else { - panic!("unknown pi handler") + handler.read = unknown_dma_read; + handler.write = unknown_dma_write; } handler } @@ -197,3 +204,26 @@ pub fn dma_event(device: &mut device::Device) { device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_PI) } + +fn unknown_dma_read( + device: &mut device::Device, + mut _cart_addr: u32, + mut _dram_addr: u32, + length: u32, +) -> u64 { + device::pi::calculate_cycles(device, 1, length) +} + +fn unknown_dma_write( + device: &mut device::Device, + mut _cart_addr: u32, + mut dram_addr: u32, + length: u32, +) -> u64 { + dram_addr &= device::rdram::RDRAM_MASK as u32; + + for i in 0..length { + device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap] = 0; + } + device::pi::calculate_cycles(device, 1, length) +} diff --git a/src/ui/storage.rs b/src/ui/storage.rs index cf739c5..c10a72c 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -43,10 +43,10 @@ fn get_save_type(rom: &[u8], game_id: &str) -> Vec { 1 => return vec![SaveTypes::Eeprom4k], 2 => return vec![SaveTypes::Eeprom16k], 3 => return vec![SaveTypes::Sram], - 4 => panic!("Unsupported save type: {:X}", save_type), + 4 => panic!("Unsupported save type: {}", save_type), 5 => return vec![SaveTypes::Flash], - 6 => panic!("Unsupported save type: {:X}", save_type), - _ => panic!("Unknown save type: {:X}", save_type), + 6 => panic!("Unsupported save type: {}", save_type), + _ => panic!("Unknown save type: {}", save_type), } } match game_id { From f4099cfcce873f1be4afca09aa9e9084a6e1001f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 5 Feb 2025 13:39:24 +0100 Subject: [PATCH 0285/1117] further sc64 cleanup (#224) * further sc64 cleanup * further sc64 cleanup --- src/device/cart/sc64.rs | 28 ++++++---------------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/src/device/cart/sc64.rs b/src/device/cart/sc64.rs index 9e1f6c6..4f831ce 100644 --- a/src/device/cart/sc64.rs +++ b/src/device/cart/sc64.rs @@ -102,15 +102,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u 's' => { format_sdcard(device); // read sd card - let (phys_address, cached, err) = device::memory::translate_address( - device, - device.sc64.regs[SC64_DATA0_REG as usize] as u64, - device::memory::AccessType::Write, - ); - if err { - panic!("TLB exception in SC64"); - } - + let address = device.sc64.regs[SC64_DATA0_REG as usize] as u64 & 0x1FFFFFFF; let offset = (device.sc64.sector * 512) as usize; let length = (device.sc64.regs[SC64_DATA1_REG as usize] * 512) as usize; let mut i = 0; @@ -125,10 +117,10 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u device::memory::data_write( device, - phys_address + i as u64, + address + i as u64, data, 0xFFFFFFFF, - cached, + false, ); } else { panic!("sd card read out of bounds") @@ -139,15 +131,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u 'S' => { format_sdcard(device); // write sd card - let (phys_address, cached, err) = device::memory::translate_address( - device, - device.sc64.regs[SC64_DATA0_REG as usize] as u64, - device::memory::AccessType::Read, - ); - if err { - panic!("TLB exception in SC64"); - } - + let address = device.sc64.regs[SC64_DATA0_REG as usize] as u64 & 0x1FFFFFFF; let offset = (device.sc64.sector * 512) as usize; let length = (device.sc64.regs[SC64_DATA1_REG as usize] * 512) as usize; let mut i = 0; @@ -156,9 +140,9 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u if offset + i < device.ui.saves.sdcard.0.len() { let data = device::memory::data_read( device, - phys_address + i as u64, + address + i as u64, device::memory::AccessSize::Word, - cached, + false, ) .to_be_bytes(); device.ui.saves.sdcard.0[(offset + i)..(offset + i + 4)] From a8e7c3c136d30e775e0cdc92a857cf58208492ad Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 5 Feb 2025 17:31:17 +0100 Subject: [PATCH 0286/1117] add Cargo.lock (#225) * add Cargo.lock * more * more --- .gitignore | 4 - Cargo.lock | 5641 ++++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 6 +- 3 files changed, 5642 insertions(+), 9 deletions(-) create mode 100644 Cargo.lock diff --git a/.gitignore b/.gitignore index 196e176..a3040a7 100644 --- a/.gitignore +++ b/.gitignore @@ -3,10 +3,6 @@ debug/ target/ -# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries -# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html -Cargo.lock - # These are backup files generated by rustfmt **/*.rs.bk diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..2e97401 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,5641 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ab_glyph" +version = "0.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3672c180e71eeaaac3a541fbbc5f5ad4def8b747c595ad30d674e43049f7b0" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser 0.25.0", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" + +[[package]] +name = "accesskit" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3d3b8f9bae46a948369bc4a03e815d4ed6d616bd00de4051133a5019dc31c5a" + +[[package]] +name = "accesskit_atspi_common" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c5dd55e6e94949498698daf4d48fb5659e824d7abec0d394089656ceaf99d4f" +dependencies = [ + "accesskit", + "accesskit_consumer", + "atspi-common", + "serde", + "thiserror 1.0.69", + "zvariant 4.2.0", +] + +[[package]] +name = "accesskit_consumer" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f47983a1084940ba9a39c077a8c63e55c619388be5476ac04c804cfbd1e63459" +dependencies = [ + "accesskit", + "hashbrown 0.15.2", + "immutable-chunkmap", +] + +[[package]] +name = "accesskit_macos" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7329821f3bd1101e03a7d2e03bd339e3ac0dc64c70b4c9f9ae1949e3ba8dece1" +dependencies = [ + "accesskit", + "accesskit_consumer", + "hashbrown 0.15.2", + "objc2", + "objc2-app-kit", + "objc2-foundation", +] + +[[package]] +name = "accesskit_unix" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcee751cc20d88678c33edaf9c07e8b693cd02819fe89053776f5313492273f5" +dependencies = [ + "accesskit", + "accesskit_atspi_common", + "async-channel", + "async-executor", + "async-task", + "atspi", + "futures-lite", + "futures-util", + "serde", + "zbus 4.4.0", +] + +[[package]] +name = "accesskit_windows" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24fcd5d23d70670992b823e735e859374d694a3d12bfd8dd32bd3bd8bedb5d81" +dependencies = [ + "accesskit", + "accesskit_consumer", + "hashbrown 0.15.2", + "paste", + "static_assertions", + "windows", + "windows-core 0.58.0", +] + +[[package]] +name = "accesskit_winit" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6a48dad5530b6deb9fc7a52cc6c3bf72cdd9eb8157ac9d32d69f2427a5e879" +dependencies = [ + "accesskit", + "accesskit_macos", + "accesskit_unix", + "accesskit_windows", + "raw-window-handle", + "winit", +] + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "getrandom 0.2.15", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "android-activity" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" +dependencies = [ + "android-properties", + "bitflags 2.8.0", + "cc", + "cesu8", + "jni", + "jni-sys", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys 0.6.0+11769913", + "num_enum", + "thiserror 1.0.69", +] + +[[package]] +name = "android-properties" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" + +[[package]] +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +dependencies = [ + "anstyle", + "once_cell", + "windows-sys 0.59.0", +] + +[[package]] +name = "arbitrary" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" +dependencies = [ + "derive_arbitrary", +] + +[[package]] +name = "arboard" +version = "3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df099ccb16cd014ff054ac1bf392c67feeef57164b05c42f037cd40f5d4357f4" +dependencies = [ + "clipboard-win", + "core-graphics", + "image", + "log", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "parking_lot", + "windows-sys 0.48.0", + "x11rb", +] + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "as-raw-xcb-connection" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" + +[[package]] +name = "ash" +version = "0.38.0+1.3.281" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" +dependencies = [ + "libloading", +] + +[[package]] +name = "ashpd" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9c39d707614dbcc6bed00015539f488d8e3fe3e66ed60961efc0c90f4b380b3" +dependencies = [ + "async-fs", + "async-net", + "enumflags2", + "futures-channel", + "futures-util", + "rand", + "raw-window-handle", + "serde", + "serde_repr", + "url", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "zbus 5.4.0", +] + +[[package]] +name = "async-broadcast" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" +dependencies = [ + "event-listener", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" +dependencies = [ + "async-lock", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-io" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" +dependencies = [ + "async-lock", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-net" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" +dependencies = [ + "async-io", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-process" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" +dependencies = [ + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener", + "futures-lite", + "rustix", + "tracing", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "async-signal" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix", + "signal-hook-registry", + "slab", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atomic-polyfill" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" +dependencies = [ + "critical-section", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "atspi" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be534b16650e35237bb1ed189ba2aab86ce65e88cc84c66f4935ba38575cecbf" +dependencies = [ + "atspi-common", + "atspi-connection", + "atspi-proxies", +] + +[[package]] +name = "atspi-common" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1909ed2dc01d0a17505d89311d192518507e8a056a48148e3598fef5e7bb6ba7" +dependencies = [ + "enumflags2", + "serde", + "static_assertions", + "zbus 4.4.0", + "zbus-lockstep", + "zbus-lockstep-macros", + "zbus_names 3.0.0", + "zvariant 4.2.0", +] + +[[package]] +name = "atspi-connection" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "430c5960624a4baaa511c9c0fcc2218e3b58f5dbcc47e6190cafee344b873333" +dependencies = [ + "atspi-common", + "atspi-proxies", + "futures-lite", + "zbus 4.4.0", +] + +[[package]] +name = "atspi-proxies" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e6c5de3e524cf967569722446bcd458d5032348554d9a17d7d72b041ab7496" +dependencies = [ + "atspi-common", + "serde", + "zbus 4.4.0", + "zvariant 4.2.0", +] + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bindgen" +version = "0.71.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" +dependencies = [ + "bitflags 2.8.0", + "cexpr", + "clang-sys", + "itertools", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash 2.1.0", + "shlex", + "syn", +] + +[[package]] +name = "bit-set" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0481a0e032742109b1133a095184ee93d88f3dc9e0d28a5d033dc77a073f44f" +dependencies = [ + "bit-vec 0.7.0", +] + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec 0.8.0", +] + +[[package]] +name = "bit-vec" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c54ff287cfc0a34f38a6b832ea1bd8e448a330b3e40a50859e6488bee07f22" + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" +dependencies = [ + "serde", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block2" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" +dependencies = [ + "objc2", +] + +[[package]] +name = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + +[[package]] +name = "bumpalo" +version = "3.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" + +[[package]] +name = "bytemuck" +version = "1.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + +[[package]] +name = "bytes" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" + +[[package]] +name = "bzip2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "calloop" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" +dependencies = [ + "bitflags 2.8.0", + "log", + "polling", + "rustix", + "slab", + "thiserror 1.0.69", +] + +[[package]] +name = "calloop-wayland-source" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" +dependencies = [ + "calloop", + "rustix", + "wayland-backend", + "wayland-client", +] + +[[package]] +name = "cc" +version = "1.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "755717a7de9ec452bf7f3f1a3099085deabd7f2962b861dae91ecd7a365903d2" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "cgl" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" +dependencies = [ + "libc", +] + +[[package]] +name = "chrono" +version = "0.4.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-targets 0.52.6", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "clap" +version = "4.5.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e77c3243bd94243c03672cb5154667347c457ca271254724f9f393aee1c05ff" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" + +[[package]] +name = "clipboard-win" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" +dependencies = [ + "error-code", +] + +[[package]] +name = "cmake" +version = "0.1.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e24a03c8b52922d68a1589ad61032f2c1aa5a8158d2aa0d93c6e9534944bbad6" +dependencies = [ + "cc", +] + +[[package]] +name = "cobs" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core-graphics" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cursor-icon" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" + +[[package]] +name = "dashmap" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "data-encoding" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e60eed09d8c01d3cee5b7d30acb059b76614c918fa0f992e0dd6eeb10daad6f" + +[[package]] +name = "deflate64" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b" + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derive_arbitrary" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", + "subtle", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.59.0", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dlib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +dependencies = [ + "libloading", +] + +[[package]] +name = "document-features" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0" +dependencies = [ + "litrs", +] + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "dpi" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" + +[[package]] +name = "ecolor" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "878e9005799dd739e5d5d89ff7480491c12d0af571d44399bcaefa1ee172dd76" +dependencies = [ + "bytemuck", + "emath", +] + +[[package]] +name = "eframe" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eba4c50d905804fe9ec4e159fde06b9d38f9440228617ab64a03d7a2091ece63" +dependencies = [ + "ahash", + "bytemuck", + "document-features", + "egui", + "egui-wgpu", + "egui-winit", + "egui_glow", + "glow", + "glutin", + "glutin-winit", + "image", + "js-sys", + "log", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "parking_lot", + "percent-encoding", + "profiling", + "raw-window-handle", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "web-time", + "winapi", + "windows-sys 0.59.0", + "winit", +] + +[[package]] +name = "egui" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d2768eaa6d5c80a6e2a008da1f0e062dff3c83eb2b28605ea2d0732d46e74d6" +dependencies = [ + "accesskit", + "ahash", + "bitflags 2.8.0", + "emath", + "epaint", + "log", + "nohash-hasher", + "profiling", +] + +[[package]] +name = "egui-wgpu" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d8151704bcef6271bec1806c51544d70e79ef20e8616e5eac01facfd9c8c54a" +dependencies = [ + "ahash", + "bytemuck", + "document-features", + "egui", + "epaint", + "log", + "profiling", + "thiserror 1.0.69", + "type-map", + "web-time", + "wgpu", + "winit", +] + +[[package]] +name = "egui-winit" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace791b367c1f63e6044aef2f3834904509d1d1a6912fd23ebf3f6a9af92cd84" +dependencies = [ + "accesskit_winit", + "ahash", + "arboard", + "bytemuck", + "egui", + "log", + "profiling", + "raw-window-handle", + "smithay-clipboard", + "web-time", + "webbrowser", + "winit", +] + +[[package]] +name = "egui_glow" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a53e2374a964c3c793cb0b8ead81bca631f24974bc0b747d1a5622f4e39fdd0" +dependencies = [ + "ahash", + "bytemuck", + "egui", + "glow", + "log", + "memoffset", + "profiling", + "wasm-bindgen", + "web-sys", + "winit", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "emath" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55b7b6be5ad1d247f11738b0e4699d9c20005ed366f2c29f5ec1f8e1de180bc2" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "embedded-io" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" + +[[package]] +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "endi" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" + +[[package]] +name = "enumflags2" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba2f4b465f5318854c6f8dd686ede6c0a9dc67d4b1ac241cf0eb51521a309147" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc4caf64a58d7a6d65ab00639b046ff54399a39f5f2554728895ace4b297cd79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "epaint" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "275b665a7b9611d8317485187e5458750850f9e64604d3c58434bb3fc1d22915" +dependencies = [ + "ab_glyph", + "ahash", + "bytemuck", + "ecolor", + "emath", + "epaint_default_fonts", + "log", + "nohash-hasher", + "parking_lot", + "profiling", +] + +[[package]] +name = "epaint_default_fonts" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9343d356d7cac894dacafc161b4654e0881301097bdf32a122ed503d97cb94b6" + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "error-code" +version = "3.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" + +[[package]] +name = "event-listener" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" +dependencies = [ + "event-listener", + "pin-project-lite", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fatfs" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05669f8e7e2d7badc545c513710f0eba09c2fbef683eb859fd79c46c355048e0" +dependencies = [ + "bitflags 1.3.2", + "byteorder", + "chrono", + "log", +] + +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "filetime" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +dependencies = [ + "cfg-if", + "libc", + "libredox", + "windows-sys 0.59.0", +] + +[[package]] +name = "filetime_creation" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c25b5d475550e559de5b0c0084761c65325444e3b6c9e298af9cefe7a9ef3a5f" +dependencies = [ + "cfg-if", + "filetime", + "windows-sys 0.52.0", +] + +[[package]] +name = "flate2" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-lite" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "gethostname" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +dependencies = [ + "libc", + "windows-targets 0.48.5", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets 0.52.6", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api", + "log", + "xml-rs", +] + +[[package]] +name = "glob" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" + +[[package]] +name = "glow" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "glutin" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03642b8b0cce622392deb0ee3e88511f75df2daac806102597905c3ea1974848" +dependencies = [ + "bitflags 2.8.0", + "cfg_aliases", + "cgl", + "core-foundation 0.9.4", + "dispatch", + "glutin_egl_sys", + "glutin_glx_sys", + "glutin_wgl_sys", + "libloading", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "once_cell", + "raw-window-handle", + "wayland-sys", + "windows-sys 0.52.0", + "x11-dl", +] + +[[package]] +name = "glutin-winit" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85edca7075f8fc728f28cb8fbb111a96c3b89e930574369e3e9c27eb75d3788f" +dependencies = [ + "cfg_aliases", + "glutin", + "raw-window-handle", + "winit", +] + +[[package]] +name = "glutin_egl_sys" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c4680ba6195f424febdc3ba46e7a42a0e58743f2edb115297b86d7f8ecc02d2" +dependencies = [ + "gl_generator", + "windows-sys 0.52.0", +] + +[[package]] +name = "glutin_glx_sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7bb2938045a88b612499fbcba375a77198e01306f52272e692f8c1f3751185" +dependencies = [ + "gl_generator", + "x11-dl", +] + +[[package]] +name = "glutin_wgl_sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e" +dependencies = [ + "gl_generator", +] + +[[package]] +name = "gopher64" +version = "1.0.3" +dependencies = [ + "bindgen", + "cc", + "chrono", + "clap", + "dirs", + "eframe", + "encoding_rs", + "fatfs", + "governor", + "mimalloc", + "postcard", + "regex", + "reqwest", + "rfd", + "rusttype", + "sdl3-sys", + "serde", + "serde_json", + "sevenz-rust", + "sha2", + "socket2", + "spin_sleep", + "tungstenite", + "winres", + "zip", +] + +[[package]] +name = "governor" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "842dc78579ce01e6a1576ad896edc92fca002dd60c9c3746b7fc2bec6fb429d0" +dependencies = [ + "cfg-if", + "dashmap", + "futures-sink", + "futures-timer", + "futures-util", + "no-std-compat", + "nonzero_ext", + "parking_lot", + "portable-atomic", + "quanta", + "rand", + "smallvec", + "spinning_top", +] + +[[package]] +name = "gpu-alloc" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" +dependencies = [ + "bitflags 2.8.0", + "gpu-alloc-types", +] + +[[package]] +name = "gpu-alloc-types" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" +dependencies = [ + "bitflags 2.8.0", +] + +[[package]] +name = "gpu-descriptor" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf29e94d6d243368b7a56caa16bc213e4f9f8ed38c4d9557069527b5d5281ca" +dependencies = [ + "bitflags 2.8.0", + "gpu-descriptor-types", + "hashbrown 0.15.2", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" +dependencies = [ + "bitflags 2.8.0", +] + +[[package]] +name = "h2" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "foldhash", +] + +[[package]] +name = "heapless" +version = "0.7.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" +dependencies = [ + "atomic-polyfill", + "hash32", + "rustc_version", + "serde", + "spin", + "stable_deref_trait", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hexf-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "http" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" + +[[package]] +name = "hyper" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +dependencies = [ + "futures-util", + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core 0.52.0", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "image" +version = "0.25.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd6f44aed642f18953a158afeb30206f4d50da59fbc66ecb53c66488de73563b" +dependencies = [ + "bytemuck", + "byteorder-lite", + "num-traits", + "png", + "tiff", +] + +[[package]] +name = "immutable-chunkmap" +version = "2.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f97096f508d54f8f8ab8957862eee2ccd628847b6217af1a335e1c44dee578" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "indexmap" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +dependencies = [ + "equivalent", + "hashbrown 0.15.2", +] + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + +[[package]] +name = "jpeg-decoder" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" + +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "khronos-egl" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" +dependencies = [ + "libc", + "libloading", + "pkg-config", +] + +[[package]] +name = "khronos_api" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" + +[[package]] +name = "libc" +version = "0.2.169" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" + +[[package]] +name = "libloading" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" +dependencies = [ + "cfg-if", + "windows-targets 0.52.6", +] + +[[package]] +name = "libmimalloc-sys" +version = "0.1.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23aa6811d3bd4deb8a84dde645f943476d13b248d818edcf8ce0b2f37f036b44" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.8.0", + "libc", + "redox_syscall 0.5.8", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + +[[package]] +name = "litrs" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "lockfree-object-pool" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" + +[[package]] +name = "log" +version = "0.4.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" + +[[package]] +name = "lzma-rs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "297e814c836ae64db86b36cf2a557ba54368d03f6afcd7d947c266692f71115e" +dependencies = [ + "byteorder", + "crc", +] + +[[package]] +name = "lzma-rust" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baab2bbbd7d75a144d671e9ff79270e903957d92fb7386fd39034c709bd2661" +dependencies = [ + "byteorder", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memmap2" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "metal" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" +dependencies = [ + "bitflags 2.8.0", + "block", + "core-graphics-types", + "foreign-types", + "log", + "objc", + "paste", +] + +[[package]] +name = "mimalloc" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68914350ae34959d83f732418d51e2427a794055d0b9529f48259ac07af65633" +dependencies = [ + "libmimalloc-sys", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +dependencies = [ + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", +] + +[[package]] +name = "naga" +version = "24.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e380993072e52eef724eddfcde0ed013b0c023c3f0417336ed041aa9f076994e" +dependencies = [ + "arrayvec", + "bit-set 0.8.0", + "bitflags 2.8.0", + "cfg_aliases", + "codespan-reporting", + "hexf-parse", + "indexmap", + "log", + "rustc-hash 1.1.0", + "spirv", + "strum", + "termcolor", + "thiserror 2.0.11", + "unicode-xid", +] + +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.8.0", + "jni-sys", + "log", + "ndk-sys 0.6.0+11769913", + "num_enum", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.5.0+25.2.9519653" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.8.0", + "cfg-if", + "cfg_aliases", + "libc", + "memoffset", +] + +[[package]] +name = "no-std-compat" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nonzero_ext" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" + +[[package]] +name = "nt-time" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2de419e64947cd8830e66beb584acc3fb42ed411d103e3c794dda355d1b374b5" +dependencies = [ + "chrono", + "time", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_enum" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[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-sys" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" + +[[package]] +name = "objc2" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" +dependencies = [ + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2-app-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +dependencies = [ + "bitflags 2.8.0", + "block2", + "libc", + "objc2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation", + "objc2-quartz-core", +] + +[[package]] +name = "objc2-cloud-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" +dependencies = [ + "bitflags 2.8.0", + "block2", + "objc2", + "objc2-core-location", + "objc2-foundation", +] + +[[package]] +name = "objc2-contacts" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-data" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +dependencies = [ + "bitflags 2.8.0", + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-image" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", + "objc2-metal", +] + +[[package]] +name = "objc2-core-location" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" +dependencies = [ + "block2", + "objc2", + "objc2-contacts", + "objc2-foundation", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-foundation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" +dependencies = [ + "bitflags 2.8.0", + "block2", + "dispatch", + "libc", + "objc2", +] + +[[package]] +name = "objc2-link-presentation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" +dependencies = [ + "block2", + "objc2", + "objc2-app-kit", + "objc2-foundation", +] + +[[package]] +name = "objc2-metal" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" +dependencies = [ + "bitflags 2.8.0", + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" +dependencies = [ + "bitflags 2.8.0", + "block2", + "objc2", + "objc2-foundation", + "objc2-metal", +] + +[[package]] +name = "objc2-symbols" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" +dependencies = [ + "bitflags 2.8.0", + "block2", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-image", + "objc2-core-location", + "objc2-foundation", + "objc2-link-presentation", + "objc2-quartz-core", + "objc2-symbols", + "objc2-uniform-type-identifiers", + "objc2-user-notifications", +] + +[[package]] +name = "objc2-uniform-type-identifiers" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-user-notifications" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" +dependencies = [ + "bitflags 2.8.0", + "block2", + "objc2", + "objc2-core-location", + "objc2-foundation", +] + +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "orbclient" +version = "0.3.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43" +dependencies = [ + "libredox", +] + +[[package]] +name = "ordered-float" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" +dependencies = [ + "num-traits", +] + +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "owned_ttf_parser" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05e6affeb1632d6ff6a23d2cd40ffed138e82f1532571a26f527c8a284bb2fbb" +dependencies = [ + "ttf-parser 0.15.2", +] + +[[package]] +name = "owned_ttf_parser" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4" +dependencies = [ + "ttf-parser 0.25.1", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.5.8", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest", + "hmac", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "pkg-config" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" + +[[package]] +name = "png" +version = "0.17.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "polling" +version = "3.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "pollster" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" + +[[package]] +name = "portable-atomic" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" + +[[package]] +name = "postcard" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170a2601f67cc9dba8edd8c4870b15f71a6a2dc196daec8c83f72b59dff628a8" +dependencies = [ + "cobs", + "embedded-io 0.4.0", + "embedded-io 0.6.1", + "heapless", + "serde", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "prettyplease" +version = "0.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6924ced06e1f7dfe3fa48d57b9f74f55d8915f5036121bef647ef4b204895fac" +dependencies = [ + "proc-macro2", + "syn", +] + +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "profiling" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d" + +[[package]] +name = "quanta" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bd1fe6824cea6538803de3ff1bc0cf3949024db3d43c9643024bfb33a807c0e" +dependencies = [ + "crossbeam-utils", + "libc", + "once_cell", + "raw-cpuid", + "wasi 0.11.0+wasi-snapshot-preview1", + "web-sys", + "winapi", +] + +[[package]] +name = "quick-xml" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "quick-xml" +version = "0.37.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "165859e9e55f79d67b96c5d96f4e88b6f2695a1972849c15a6a3f5c59fc2c003" +dependencies = [ + "memchr", +] + +[[package]] +name = "quinn" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.1.0", + "rustls", + "socket2", + "thiserror 2.0.11", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +dependencies = [ + "bytes", + "getrandom 0.2.15", + "rand", + "ring", + "rustc-hash 2.1.0", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.11", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "quote" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.15", +] + +[[package]] +name = "raw-cpuid" +version = "11.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6928fa44c097620b706542d428957635951bade7143269085389d42c8a4927e" +dependencies = [ + "bitflags 2.8.0", +] + +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +dependencies = [ + "bitflags 2.8.0", +] + +[[package]] +name = "redox_users" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" +dependencies = [ + "getrandom 0.2.15", + "libredox", + "thiserror 2.0.11", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "renderdoc-sys" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" + +[[package]] +name = "reqwest" +version = "0.12.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pemfile", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tower", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "windows-registry", +] + +[[package]] +name = "rfd" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a24763657bff09769a8ccf12c8b8a50416fb035fe199263b4c5071e4e3f006f" +dependencies = [ + "ashpd", + "block2", + "core-foundation 0.10.0", + "core-foundation-sys", + "js-sys", + "log", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "pollster", + "raw-window-handle", + "urlencoding", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-sys 0.59.0", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.15", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rpkg-config" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a2d2f3481209a6b42eec2fbb49063fb4e8d35b57023401495d4fe0f85c817f0" + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hash" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags 2.8.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustls" +version = "0.23.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" +dependencies = [ + "web-time", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rusttype" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ff8374aa04134254b7995b63ad3dc41c7f7236f69528b28553da7d72efaa967" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser 0.15.2", +] + +[[package]] +name = "rustversion" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" + +[[package]] +name = "ryu" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sctk-adwaita" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" +dependencies = [ + "ab_glyph", + "log", + "memmap2", + "smithay-client-toolkit", + "tiny-skia", +] + +[[package]] +name = "sdl3-src" +version = "3.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d30b2107d266ee8b9678ac5a905b25c061c03c662501fd60859e9d7e2f7e13" + +[[package]] +name = "sdl3-sys" +version = "0.4.3+SDL3-3.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb7ecf5e5f416b2e6408ebe1825ded6bdcac3b8c79e429aada3c79efc675e80d" +dependencies = [ + "cmake", + "rpkg-config", + "sdl3-src", +] + +[[package]] +name = "semver" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" + +[[package]] +name = "serde" +version = "1.0.217" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.217" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.138" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sevenz-rust" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26482cf1ecce4540dc782fc70019eba89ffc4d87b3717eb5ec524b5db6fdefef" +dependencies = [ + "bit-set 0.6.0", + "byteorder", + "crc", + "filetime_creation", + "js-sys", + "lzma-rust", + "nt-time", + "sha2", + "wasm-bindgen", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slotmap" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +dependencies = [ + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "smithay-client-toolkit" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" +dependencies = [ + "bitflags 2.8.0", + "calloop", + "calloop-wayland-source", + "cursor-icon", + "libc", + "log", + "memmap2", + "rustix", + "thiserror 1.0.69", + "wayland-backend", + "wayland-client", + "wayland-csd-frame", + "wayland-cursor", + "wayland-protocols", + "wayland-protocols-wlr", + "wayland-scanner", + "xkeysym", +] + +[[package]] +name = "smithay-clipboard" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc8216eec463674a0e90f29e0ae41a4db573ec5b56b1c6c1c71615d249b6d846" +dependencies = [ + "libc", + "smithay-client-toolkit", + "wayland-backend", +] + +[[package]] +name = "smol_str" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" +dependencies = [ + "serde", +] + +[[package]] +name = "socket2" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spin_sleep" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4196b31c8c1dc443543be4f4d0e827657fbf2b87387e5c8f229b14f1c046718a" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "spinning_top" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d96d2d1d716fb500937168cc09353ffdc7a012be8475ac7308e1bdf0e3923300" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spirv" +version = "0.3.0+sdk-1.3.268.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" +dependencies = [ + "bitflags 2.8.0", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strict-num" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tempfile" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91" +dependencies = [ + "cfg-if", + "fastrand", + "getrandom 0.3.1", + "once_cell", + "rustix", + "windows-sys 0.59.0", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +dependencies = [ + "thiserror-impl 2.0.11", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tiff" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + +[[package]] +name = "time" +version = "0.3.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-skia" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" +dependencies = [ + "arrayref", + "arrayvec", + "bytemuck", + "cfg-if", + "log", + "tiny-skia-path", +] + +[[package]] +name = "tiny-skia-path" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" + +[[package]] +name = "toml_edit" +version = "0.22.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02a8b472d1a3d7c18e2d61a489aee3453fd9031c33e4f55bd533f4a7adca1bee" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "ttf-parser" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd" + +[[package]] +name = "ttf-parser" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" + +[[package]] +name = "tungstenite" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413083a99c579593656008130e29255e54dcaae495be556cc26888f211648c24" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand", + "sha1", + "thiserror 2.0.11", + "utf-8", +] + +[[package]] +name = "type-map" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f" +dependencies = [ + "rustc-hash 1.1.0", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "uds_windows" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" +dependencies = [ + "memoffset", + "tempfile", + "winapi", +] + +[[package]] +name = "unicode-ident" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wayland-backend" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7208998eaa3870dad37ec8836979581506e0c5c64c20c9e79e9d2a10d6f47bf" +dependencies = [ + "cc", + "downcast-rs", + "rustix", + "scoped-tls", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-client" +version = "0.31.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2120de3d33638aaef5b9f4472bff75f07c56379cf76ea320bd3a3d65ecaf73f" +dependencies = [ + "bitflags 2.8.0", + "rustix", + "wayland-backend", + "wayland-scanner", +] + +[[package]] +name = "wayland-csd-frame" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" +dependencies = [ + "bitflags 2.8.0", + "cursor-icon", + "wayland-backend", +] + +[[package]] +name = "wayland-cursor" +version = "0.31.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a93029cbb6650748881a00e4922b076092a6a08c11e7fbdb923f064b23968c5d" +dependencies = [ + "rustix", + "wayland-client", + "xcursor", +] + +[[package]] +name = "wayland-protocols" +version = "0.32.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0781cf46869b37e36928f7b432273c0995aa8aed9552c556fb18754420541efc" +dependencies = [ + "bitflags 2.8.0", + "wayland-backend", + "wayland-client", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-plasma" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ccaacc76703fefd6763022ac565b590fcade92202492381c95b2edfdf7d46b3" +dependencies = [ + "bitflags 2.8.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-wlr" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248a02e6f595aad796561fa82d25601bd2c8c3b145b1c7453fc8f94c1a58f8b2" +dependencies = [ + "bitflags 2.8.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.31.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484" +dependencies = [ + "proc-macro2", + "quick-xml 0.37.2", + "quote", +] + +[[package]] +name = "wayland-sys" +version = "0.31.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbcebb399c77d5aa9fa5db874806ee7b4eba4e73650948e8f93963f128896615" +dependencies = [ + "dlib", + "log", + "once_cell", + "pkg-config", +] + +[[package]] +name = "web-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webbrowser" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea9fe1ebb156110ff855242c1101df158b822487e4957b0556d9ffce9db0f535" +dependencies = [ + "block2", + "core-foundation 0.10.0", + "home", + "jni", + "log", + "ndk-context", + "objc2", + "objc2-foundation", + "url", + "web-sys", +] + +[[package]] +name = "webpki-roots" +version = "0.26.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "weezl" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" + +[[package]] +name = "wgpu" +version = "24.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47f55718f85c2fa756edffa0e7f0e0a60aba463d1362b57e23123c58f035e4b6" +dependencies = [ + "arrayvec", + "bitflags 2.8.0", + "cfg_aliases", + "document-features", + "js-sys", + "log", + "parking_lot", + "profiling", + "raw-window-handle", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "24.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82a39b8842dc9ffcbe34346e3ab6d496b32a47f6497e119d762c97fcaae3cb37" +dependencies = [ + "arrayvec", + "bit-vec 0.8.0", + "bitflags 2.8.0", + "cfg_aliases", + "document-features", + "indexmap", + "log", + "naga", + "once_cell", + "parking_lot", + "profiling", + "raw-window-handle", + "rustc-hash 1.1.0", + "smallvec", + "thiserror 2.0.11", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-hal" +version = "24.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a782e5056b060b0b4010881d1decddd059e44f2ecd01e2db2971b48ad3627e5" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bitflags 2.8.0", + "bytemuck", + "cfg_aliases", + "core-graphics-types", + "glow", + "glutin_wgl_sys", + "gpu-alloc", + "gpu-descriptor", + "js-sys", + "khronos-egl", + "libc", + "libloading", + "log", + "metal", + "naga", + "ndk-sys 0.5.0+25.2.9519653", + "objc", + "once_cell", + "ordered-float", + "parking_lot", + "profiling", + "raw-window-handle", + "renderdoc-sys", + "rustc-hash 1.1.0", + "smallvec", + "thiserror 2.0.11", + "wasm-bindgen", + "web-sys", + "wgpu-types", + "windows", +] + +[[package]] +name = "wgpu-types" +version = "24.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50ac044c0e76c03a0378e7786ac505d010a873665e2d51383dcff8dd227dc69c" +dependencies = [ + "bitflags 2.8.0", + "js-sys", + "log", + "web-sys", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +dependencies = [ + "windows-core 0.58.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-implement" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winit" +version = "0.30.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5d74280aabb958072864bff6cfbcf9025cf8bfacdde5e32b5e12920ef703b0f" +dependencies = [ + "ahash", + "android-activity", + "atomic-waker", + "bitflags 2.8.0", + "block2", + "bytemuck", + "calloop", + "cfg_aliases", + "concurrent-queue", + "core-foundation 0.9.4", + "core-graphics", + "cursor-icon", + "dpi", + "js-sys", + "libc", + "memmap2", + "ndk", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "orbclient", + "percent-encoding", + "pin-project", + "raw-window-handle", + "redox_syscall 0.4.1", + "rustix", + "sctk-adwaita", + "smithay-client-toolkit", + "smol_str", + "tracing", + "unicode-segmentation", + "wasm-bindgen", + "wasm-bindgen-futures", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-protocols-plasma", + "web-sys", + "web-time", + "windows-sys 0.52.0", + "x11-dl", + "x11rb", + "xkbcommon-dl", +] + +[[package]] +name = "winnow" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86e376c75f4f43f44db463cf729e0d3acbf954d13e22c51e26e4c264b4ab545f" +dependencies = [ + "memchr", +] + +[[package]] +name = "winres" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c" +dependencies = [ + "toml", +] + +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.8.0", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "x11rb" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" +dependencies = [ + "as-raw-xcb-connection", + "gethostname", + "libc", + "libloading", + "once_cell", + "rustix", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" + +[[package]] +name = "xcursor" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ef33da6b1660b4ddbfb3aef0ade110c8b8a781a3b6382fa5f2b5b040fd55f61" + +[[package]] +name = "xdg-home" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "xkbcommon-dl" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" +dependencies = [ + "bitflags 2.8.0", + "dlib", + "log", + "once_cell", + "xkeysym", +] + +[[package]] +name = "xkeysym" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" + +[[package]] +name = "xml-rs" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5b940ebc25896e71dd073bad2dbaa2abfe97b0a391415e22ad1326d9c54e3c4" + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zbus" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725" +dependencies = [ + "async-broadcast", + "async-executor", + "async-fs", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "enumflags2", + "event-listener", + "futures-core", + "futures-sink", + "futures-util", + "hex", + "nix", + "ordered-stream", + "rand", + "serde", + "serde_repr", + "sha1", + "static_assertions", + "tracing", + "uds_windows", + "windows-sys 0.52.0", + "xdg-home", + "zbus_macros 4.4.0", + "zbus_names 3.0.0", + "zvariant 4.2.0", +] + +[[package]] +name = "zbus" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbddd8b6cb25d5d8ec1b23277b45299a98bfb220f1761ca11e186d5c702507f8" +dependencies = [ + "async-broadcast", + "async-executor", + "async-fs", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "enumflags2", + "event-listener", + "futures-core", + "futures-util", + "hex", + "nix", + "ordered-stream", + "serde", + "serde_repr", + "static_assertions", + "tracing", + "uds_windows", + "windows-sys 0.59.0", + "winnow", + "xdg-home", + "zbus_macros 5.4.0", + "zbus_names 4.2.0", + "zvariant 5.3.0", +] + +[[package]] +name = "zbus-lockstep" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca2c5dceb099bddaade154055c926bb8ae507a18756ba1d8963fd7b51d8ed1d" +dependencies = [ + "zbus_xml", + "zvariant 4.2.0", +] + +[[package]] +name = "zbus-lockstep-macros" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709ab20fc57cb22af85be7b360239563209258430bccf38d8b979c5a2ae3ecce" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "zbus-lockstep", + "zbus_xml", + "zvariant 4.2.0", +] + +[[package]] +name = "zbus_macros" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", + "zvariant_utils 2.1.0", +] + +[[package]] +name = "zbus_macros" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dac404d48b4e9cf193c8b49589f3280ceca5ff63519e7e64f55b4cf9c47ce146" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", + "zbus_names 4.2.0", + "zvariant 5.3.0", + "zvariant_utils 3.2.0", +] + +[[package]] +name = "zbus_names" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" +dependencies = [ + "serde", + "static_assertions", + "zvariant 4.2.0", +] + +[[package]] +name = "zbus_names" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" +dependencies = [ + "serde", + "static_assertions", + "winnow", + "zvariant 5.3.0", +] + +[[package]] +name = "zbus_xml" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab3f374552b954f6abb4bd6ce979e6c9b38fb9d0cd7cc68a7d796e70c9f3a233" +dependencies = [ + "quick-xml 0.30.0", + "serde", + "static_assertions", + "zbus_names 3.0.0", + "zvariant 4.2.0", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zip" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae9c1ea7b3a5e1f4b922ff856a129881167511563dc219869afe3787fc0c1a45" +dependencies = [ + "aes", + "arbitrary", + "bzip2", + "constant_time_eq", + "crc32fast", + "crossbeam-utils", + "deflate64", + "displaydoc", + "flate2", + "hmac", + "indexmap", + "lzma-rs", + "memchr", + "pbkdf2", + "rand", + "sha1", + "thiserror 2.0.11", + "time", + "zeroize", + "zopfli", + "zstd", +] + +[[package]] +name = "zopfli" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946" +dependencies = [ + "bumpalo", + "crc32fast", + "lockfree-object-pool", + "log", + "once_cell", + "simd-adler32", +] + +[[package]] +name = "zstd" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.13+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +dependencies = [ + "cc", + "pkg-config", +] + +[[package]] +name = "zvariant" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe" +dependencies = [ + "endi", + "enumflags2", + "serde", + "static_assertions", + "zvariant_derive 4.2.0", +] + +[[package]] +name = "zvariant" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31c951c21879c6e1d46ac5adfc34f698fefb465d498cf4ac87545849bd71bb5a" +dependencies = [ + "endi", + "enumflags2", + "serde", + "static_assertions", + "url", + "winnow", + "zvariant_derive 5.3.0", + "zvariant_utils 3.2.0", +] + +[[package]] +name = "zvariant_derive" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", + "zvariant_utils 2.1.0", +] + +[[package]] +name = "zvariant_derive" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eeb539471af098d9e63faf428c71ac4cd4efe0b5baa3c8a6b991c5f2543b70e" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", + "zvariant_utils 3.2.0", +] + +[[package]] +name = "zvariant_utils" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zvariant_utils" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "static_assertions", + "syn", + "winnow", +] diff --git a/Cargo.toml b/Cargo.toml index 0e69e46..9acb702 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,11 +28,7 @@ socket2 = "0.5" fatfs = "0.3" postcard = { version = "1.1", features = ["use-std"] } clap = { version = "4.4", features = ["derive"] } - -[dependencies.reqwest] -version = "0.12" -default-features = false -features = ["http2","rustls-tls","charset","json","blocking"] +reqwest = { version = "0.12", default-features = false, features = ["http2","rustls-tls","charset","json","blocking"] } [build-dependencies] winres = "0.1" From 58eaad1742860e7c07dce7f37f9218f2c669040a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 5 Feb 2025 19:31:38 +0100 Subject: [PATCH 0287/1117] remove some dependencies (#226) * remove some dependencies * more * more * more * more --- Cargo.lock | 580 ++--------------------------------- Cargo.toml | 7 +- src/device/controller/vru.rs | 6 +- src/main.rs | 3 +- src/netplay.rs | 6 +- src/ui/gui.rs | 198 ++++++------ src/ui/gui/gui_netplay.rs | 59 ++-- src/ui/vru.rs | 6 +- 8 files changed, 186 insertions(+), 679 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2e97401..1921e24 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,98 +18,6 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" -[[package]] -name = "accesskit" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3d3b8f9bae46a948369bc4a03e815d4ed6d616bd00de4051133a5019dc31c5a" - -[[package]] -name = "accesskit_atspi_common" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c5dd55e6e94949498698daf4d48fb5659e824d7abec0d394089656ceaf99d4f" -dependencies = [ - "accesskit", - "accesskit_consumer", - "atspi-common", - "serde", - "thiserror 1.0.69", - "zvariant 4.2.0", -] - -[[package]] -name = "accesskit_consumer" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f47983a1084940ba9a39c077a8c63e55c619388be5476ac04c804cfbd1e63459" -dependencies = [ - "accesskit", - "hashbrown 0.15.2", - "immutable-chunkmap", -] - -[[package]] -name = "accesskit_macos" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7329821f3bd1101e03a7d2e03bd339e3ac0dc64c70b4c9f9ae1949e3ba8dece1" -dependencies = [ - "accesskit", - "accesskit_consumer", - "hashbrown 0.15.2", - "objc2", - "objc2-app-kit", - "objc2-foundation", -] - -[[package]] -name = "accesskit_unix" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcee751cc20d88678c33edaf9c07e8b693cd02819fe89053776f5313492273f5" -dependencies = [ - "accesskit", - "accesskit_atspi_common", - "async-channel", - "async-executor", - "async-task", - "atspi", - "futures-lite", - "futures-util", - "serde", - "zbus 4.4.0", -] - -[[package]] -name = "accesskit_windows" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24fcd5d23d70670992b823e735e859374d694a3d12bfd8dd32bd3bd8bedb5d81" -dependencies = [ - "accesskit", - "accesskit_consumer", - "hashbrown 0.15.2", - "paste", - "static_assertions", - "windows", - "windows-core 0.58.0", -] - -[[package]] -name = "accesskit_winit" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6a48dad5530b6deb9fc7a52cc6c3bf72cdd9eb8157ac9d32d69f2427a5e879" -dependencies = [ - "accesskit", - "accesskit_macos", - "accesskit_unix", - "accesskit_windows", - "raw-window-handle", - "winit", -] - [[package]] name = "addr2line" version = "0.24.2" @@ -277,12 +185,6 @@ dependencies = [ "x11rb", ] -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - [[package]] name = "arrayvec" version = "0.7.6" @@ -310,8 +212,6 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9c39d707614dbcc6bed00015539f488d8e3fe3e66ed60961efc0c90f4b380b3" dependencies = [ - "async-fs", - "async-net", "enumflags2", "futures-channel", "futures-util", @@ -319,11 +219,12 @@ dependencies = [ "raw-window-handle", "serde", "serde_repr", + "tokio", "url", "wayland-backend", "wayland-client", "wayland-protocols", - "zbus 5.4.0", + "zbus", ] [[package]] @@ -338,102 +239,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "async-channel" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" -dependencies = [ - "concurrent-queue", - "event-listener-strategy", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-executor" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" -dependencies = [ - "async-task", - "concurrent-queue", - "fastrand", - "futures-lite", - "slab", -] - -[[package]] -name = "async-fs" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" -dependencies = [ - "async-lock", - "blocking", - "futures-lite", -] - -[[package]] -name = "async-io" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" -dependencies = [ - "async-lock", - "cfg-if", - "concurrent-queue", - "futures-io", - "futures-lite", - "parking", - "polling", - "rustix", - "slab", - "tracing", - "windows-sys 0.59.0", -] - -[[package]] -name = "async-lock" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" -dependencies = [ - "event-listener", - "event-listener-strategy", - "pin-project-lite", -] - -[[package]] -name = "async-net" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" -dependencies = [ - "async-io", - "blocking", - "futures-lite", -] - -[[package]] -name = "async-process" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" -dependencies = [ - "async-channel", - "async-io", - "async-lock", - "async-signal", - "async-task", - "blocking", - "cfg-if", - "event-listener", - "futures-lite", - "rustix", - "tracing", -] - [[package]] name = "async-recursion" version = "1.1.1" @@ -445,30 +250,6 @@ dependencies = [ "syn", ] -[[package]] -name = "async-signal" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" -dependencies = [ - "async-io", - "async-lock", - "atomic-waker", - "cfg-if", - "futures-core", - "futures-io", - "rustix", - "signal-hook-registry", - "slab", - "windows-sys 0.59.0", -] - -[[package]] -name = "async-task" -version = "4.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" - [[package]] name = "async-trait" version = "0.1.86" @@ -495,57 +276,6 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" -[[package]] -name = "atspi" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be534b16650e35237bb1ed189ba2aab86ce65e88cc84c66f4935ba38575cecbf" -dependencies = [ - "atspi-common", - "atspi-connection", - "atspi-proxies", -] - -[[package]] -name = "atspi-common" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1909ed2dc01d0a17505d89311d192518507e8a056a48148e3598fef5e7bb6ba7" -dependencies = [ - "enumflags2", - "serde", - "static_assertions", - "zbus 4.4.0", - "zbus-lockstep", - "zbus-lockstep-macros", - "zbus_names 3.0.0", - "zvariant 4.2.0", -] - -[[package]] -name = "atspi-connection" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "430c5960624a4baaa511c9c0fcc2218e3b58f5dbcc47e6190cafee344b873333" -dependencies = [ - "atspi-common", - "atspi-proxies", - "futures-lite", - "zbus 4.4.0", -] - -[[package]] -name = "atspi-proxies" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e6c5de3e524cf967569722446bcd458d5032348554d9a17d7d72b041ab7496" -dependencies = [ - "atspi-common", - "serde", - "zbus 4.4.0", - "zvariant 4.2.0", -] - [[package]] name = "autocfg" version = "1.4.0" @@ -662,19 +392,6 @@ dependencies = [ "objc2", ] -[[package]] -name = "blocking" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" -dependencies = [ - "async-channel", - "async-task", - "futures-io", - "futures-lite", - "piper", -] - [[package]] name = "bumpalo" version = "3.17.0" @@ -1212,7 +929,6 @@ dependencies = [ "egui-wgpu", "egui-winit", "egui_glow", - "glow", "glutin", "glutin-winit", "image", @@ -1223,6 +939,7 @@ dependencies = [ "objc2-foundation", "parking_lot", "percent-encoding", + "pollster", "profiling", "raw-window-handle", "static_assertions", @@ -1230,6 +947,7 @@ dependencies = [ "wasm-bindgen-futures", "web-sys", "web-time", + "wgpu", "winapi", "windows-sys 0.59.0", "winit", @@ -1241,7 +959,6 @@ version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d2768eaa6d5c80a6e2a008da1f0e062dff3c83eb2b28605ea2d0732d46e74d6" dependencies = [ - "accesskit", "ahash", "bitflags 2.8.0", "emath", @@ -1277,7 +994,6 @@ version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace791b367c1f63e6044aef2f3834904509d1d1a6912fd23ebf3f6a9af92cd84" dependencies = [ - "accesskit_winit", "ahash", "arboard", "bytemuck", @@ -1383,19 +1099,12 @@ dependencies = [ "bytemuck", "ecolor", "emath", - "epaint_default_fonts", "log", "nohash-hasher", "parking_lot", "profiling", ] -[[package]] -name = "epaint_default_fonts" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9343d356d7cac894dacafc161b4654e0881301097bdf32a122ed503d97cb94b6" - [[package]] name = "equivalent" version = "1.0.1" @@ -1554,7 +1263,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", - "futures-sink", ] [[package]] @@ -1563,25 +1271,6 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-lite" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "parking", - "pin-project-lite", -] - [[package]] name = "futures-macro" version = "0.3.31" @@ -1618,11 +1307,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-core", - "futures-io", "futures-macro", "futures-sink", "futures-task", - "memchr", "pin-project-lite", "pin-utils", "slab", @@ -1800,6 +1487,7 @@ dependencies = [ "sha2", "socket2", "spin_sleep", + "tokio", "tungstenite", "winres", "zip", @@ -2236,15 +1924,6 @@ dependencies = [ "tiff", ] -[[package]] -name = "immutable-chunkmap" -version = "2.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f97096f508d54f8f8ab8957862eee2ccd628847b6217af1a335e1c44dee578" -dependencies = [ - "arrayvec", -] - [[package]] name = "indexmap" version = "2.7.1" @@ -3051,17 +2730,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "piper" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" -dependencies = [ - "atomic-waker", - "fastrand", - "futures-io", -] - [[package]] name = "pkg-config" version = "0.3.31" @@ -3185,16 +2853,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "quick-xml" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "quick-xml" version = "0.37.2" @@ -3383,7 +3041,6 @@ dependencies = [ "base64", "bytes", "encoding_rs", - "futures-channel", "futures-core", "futures-util", "h2", @@ -3591,19 +3248,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sctk-adwaita" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" -dependencies = [ - "ab_glyph", - "log", - "memmap2", - "smithay-client-toolkit", - "tiny-skia", -] - [[package]] name = "sdl3-src" version = "3.2.2" @@ -3869,12 +3513,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "strict-num" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" - [[package]] name = "strsim" version = "0.11.1" @@ -4044,31 +3682,6 @@ dependencies = [ "time-core", ] -[[package]] -name = "tiny-skia" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" -dependencies = [ - "arrayref", - "arrayvec", - "bytemuck", - "cfg-if", - "log", - "tiny-skia-path", -] - -[[package]] -name = "tiny-skia-path" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" -dependencies = [ - "arrayref", - "bytemuck", - "strict-num", -] - [[package]] name = "tinystr" version = "0.7.6" @@ -4105,10 +3718,24 @@ dependencies = [ "libc", "mio", "pin-project-lite", + "signal-hook-registry", "socket2", + "tokio-macros", + "tracing", "windows-sys 0.52.0", ] +[[package]] +name = "tokio-macros" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tokio-rustls" version = "0.26.1" @@ -4554,7 +4181,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484" dependencies = [ "proc-macro2", - "quick-xml 0.37.2", + "quick-xml", "quote", ] @@ -4635,6 +4262,7 @@ dependencies = [ "document-features", "js-sys", "log", + "naga", "parking_lot", "profiling", "raw-window-handle", @@ -4683,6 +4311,7 @@ dependencies = [ "arrayvec", "ash", "bitflags 2.8.0", + "block", "bytemuck", "cfg_aliases", "core-graphics-types", @@ -5088,7 +4717,6 @@ dependencies = [ "raw-window-handle", "redox_syscall 0.4.1", "rustix", - "sctk-adwaita", "smithay-client-toolkit", "smol_str", "tracing", @@ -5243,44 +4871,6 @@ dependencies = [ "synstructure", ] -[[package]] -name = "zbus" -version = "4.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725" -dependencies = [ - "async-broadcast", - "async-executor", - "async-fs", - "async-io", - "async-lock", - "async-process", - "async-recursion", - "async-task", - "async-trait", - "blocking", - "enumflags2", - "event-listener", - "futures-core", - "futures-sink", - "futures-util", - "hex", - "nix", - "ordered-stream", - "rand", - "serde", - "serde_repr", - "sha1", - "static_assertions", - "tracing", - "uds_windows", - "windows-sys 0.52.0", - "xdg-home", - "zbus_macros 4.4.0", - "zbus_names 3.0.0", - "zvariant 4.2.0", -] - [[package]] name = "zbus" version = "5.4.0" @@ -5288,15 +4878,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cbddd8b6cb25d5d8ec1b23277b45299a98bfb220f1761ca11e186d5c702507f8" dependencies = [ "async-broadcast", - "async-executor", - "async-fs", - "async-io", - "async-lock", - "async-process", "async-recursion", - "async-task", "async-trait", - "blocking", "enumflags2", "event-listener", "futures-core", @@ -5307,51 +4890,15 @@ dependencies = [ "serde", "serde_repr", "static_assertions", + "tokio", "tracing", "uds_windows", "windows-sys 0.59.0", "winnow", "xdg-home", - "zbus_macros 5.4.0", - "zbus_names 4.2.0", - "zvariant 5.3.0", -] - -[[package]] -name = "zbus-lockstep" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca2c5dceb099bddaade154055c926bb8ae507a18756ba1d8963fd7b51d8ed1d" -dependencies = [ - "zbus_xml", - "zvariant 4.2.0", -] - -[[package]] -name = "zbus-lockstep-macros" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "709ab20fc57cb22af85be7b360239563209258430bccf38d8b979c5a2ae3ecce" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "zbus-lockstep", - "zbus_xml", - "zvariant 4.2.0", -] - -[[package]] -name = "zbus_macros" -version = "4.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", - "zvariant_utils 2.1.0", + "zbus_macros", + "zbus_names", + "zvariant", ] [[package]] @@ -5364,20 +4911,9 @@ dependencies = [ "proc-macro2", "quote", "syn", - "zbus_names 4.2.0", - "zvariant 5.3.0", - "zvariant_utils 3.2.0", -] - -[[package]] -name = "zbus_names" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" -dependencies = [ - "serde", - "static_assertions", - "zvariant 4.2.0", + "zbus_names", + "zvariant", + "zvariant_utils", ] [[package]] @@ -5389,20 +4925,7 @@ dependencies = [ "serde", "static_assertions", "winnow", - "zvariant 5.3.0", -] - -[[package]] -name = "zbus_xml" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3f374552b954f6abb4bd6ce979e6c9b38fb9d0cd7cc68a7d796e70c9f3a233" -dependencies = [ - "quick-xml 0.30.0", - "serde", - "static_assertions", - "zbus_names 3.0.0", - "zvariant 4.2.0", + "zvariant", ] [[package]] @@ -5560,19 +5083,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "zvariant" -version = "4.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe" -dependencies = [ - "endi", - "enumflags2", - "serde", - "static_assertions", - "zvariant_derive 4.2.0", -] - [[package]] name = "zvariant" version = "5.3.0" @@ -5585,21 +5095,8 @@ dependencies = [ "static_assertions", "url", "winnow", - "zvariant_derive 5.3.0", - "zvariant_utils 3.2.0", -] - -[[package]] -name = "zvariant_derive" -version = "4.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", - "zvariant_utils 2.1.0", + "zvariant_derive", + "zvariant_utils", ] [[package]] @@ -5612,18 +5109,7 @@ dependencies = [ "proc-macro2", "quote", "syn", - "zvariant_utils 3.2.0", -] - -[[package]] -name = "zvariant_utils" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" -dependencies = [ - "proc-macro2", - "quote", - "syn", + "zvariant_utils", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 9acb702..1195cd5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,11 +14,12 @@ sevenz-rust = "0.6" chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -eframe = "0.31" +eframe = { version = "0.31", default-features = false, features = ["wayland", "x11", "wgpu"] } sha2 = "0.10" rusttype = "0.9" sdl3-sys = { version = "0.4", features = ["build-from-source-static"] } -rfd = "0.15" +rfd = { version = "0.15", default-features = false, features = ["xdg-portal", "tokio"] } +tokio = {version = "1.43", features = ["rt-multi-thread", "macros"] } spin_sleep = "1.3" encoding_rs = "0.8" mimalloc = "0.1" @@ -28,7 +29,7 @@ socket2 = "0.5" fatfs = "0.3" postcard = { version = "1.1", features = ["use-std"] } clap = { version = "4.4", features = ["derive"] } -reqwest = { version = "0.12", default-features = false, features = ["http2","rustls-tls","charset","json","blocking"] } +reqwest = { version = "0.12", default-features = false, features = ["http2","rustls-tls","charset","json"] } [build-dependencies] winres = "0.1" diff --git a/src/device/controller/vru.rs b/src/device/controller/vru.rs index 3fd8915..a197f38 100644 --- a/src/device/controller/vru.rs +++ b/src/device/controller/vru.rs @@ -26,8 +26,8 @@ pub struct Vru { pub words: Vec, pub talking: bool, pub word_mappings: HashMap, - pub window_notifier: Option>>, - pub word_receiver: Option>, + pub window_notifier: Option>>, + pub word_receiver: Option>, pub gui_ctx: Option, } @@ -187,7 +187,7 @@ pub fn process(device: &mut device::Device, channel: usize) { ui::vru::prompt_for_match( &device.vru.words, device.vru.window_notifier.as_ref().unwrap(), - device.vru.word_receiver.as_ref().unwrap(), + device.vru.word_receiver.as_mut().unwrap(), device.vru.gui_ctx.as_ref().unwrap(), ) } else { diff --git a/src/main.rs b/src/main.rs index 62da9ef..34afd2f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -64,7 +64,8 @@ struct Args { clear_input_bindings: bool, } -fn main() { +#[tokio::main] +async fn main() { let dirs = ui::get_dirs(); let mut result = std::fs::create_dir_all(dirs.config_dir); diff --git a/src/netplay.rs b/src/netplay.rs index 163252e..ad65398 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -30,7 +30,7 @@ pub struct Netplay { status: u8, buffer_target: u8, pub fast_forward: bool, - pub error_notifier: std::sync::mpsc::Sender, + pub error_notifier: tokio::sync::mpsc::Sender, pub gui_ctx: egui::Context, } @@ -47,7 +47,7 @@ struct InputEvent { } fn send_error(netplay: &mut Netplay, error: String) { - netplay.error_notifier.send(error).unwrap(); + netplay.error_notifier.try_send(error).unwrap(); netplay.gui_ctx.request_repaint(); // this is so the window pops up right away } @@ -219,7 +219,7 @@ pub fn init( mut peer_addr: std::net::SocketAddr, session: ui::gui::gui_netplay::NetplayRoom, player_number: u8, - error_notifier: std::sync::mpsc::Sender, + error_notifier: tokio::sync::mpsc::Sender, gui_ctx: egui::Context, ) -> Netplay { peer_addr.set_port(session.port.unwrap() as u16); diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 40cec20..9dd3823 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -21,9 +21,9 @@ pub struct GopherEguiApp { emulate_vru: bool, dinput: bool, show_vru_dialog: bool, - vru_window_receiver: Option>>, - netplay_error_receiver: Option>, - vru_word_notifier: Option>, + vru_window_receiver: Option>>, + netplay_error_receiver: Option>, + vru_word_notifier: Option>, vru_word_list: Vec, pub netplay: gui_netplay::GuiNetplay, } @@ -84,7 +84,7 @@ impl GopherEguiApp { controller_paths: Vec, controller_names: Vec, ) -> GopherEguiApp { - add_japanese_font(&cc.egui_ctx); + add_fonts(&cc.egui_ctx); let config = ui::config::Config::new(); let mut selected_controller = [-1, -1, -1, -1]; @@ -236,7 +236,7 @@ fn show_vru_dialog(app: &mut GopherEguiApp, ctx: &egui::Context) { app.vru_word_notifier .as_ref() .unwrap() - .send(v.clone()) + .try_send(v.clone()) .unwrap(); app.show_vru_dialog = false; } @@ -248,7 +248,7 @@ fn show_vru_dialog(app: &mut GopherEguiApp, ctx: &egui::Context) { app.vru_word_notifier .as_ref() .unwrap() - .send(String::from("")) + .try_send(String::from("")) .unwrap(); app.show_vru_dialog = false; } @@ -285,19 +285,19 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { } let (netplay_error_notifier, netplay_error_receiver): ( - std::sync::mpsc::Sender, - std::sync::mpsc::Receiver, - ) = std::sync::mpsc::channel(); + tokio::sync::mpsc::Sender, + tokio::sync::mpsc::Receiver, + ) = tokio::sync::mpsc::channel(1); let (vru_window_notifier, vru_window_receiver): ( - std::sync::mpsc::Sender>, - std::sync::mpsc::Receiver>, - ) = std::sync::mpsc::channel(); + tokio::sync::mpsc::Sender>, + tokio::sync::mpsc::Receiver>, + ) = tokio::sync::mpsc::channel(1); let (vru_word_notifier, vru_word_receiver): ( - std::sync::mpsc::Sender, - std::sync::mpsc::Receiver, - ) = std::sync::mpsc::channel(); + tokio::sync::mpsc::Sender, + tokio::sync::mpsc::Receiver, + ) = tokio::sync::mpsc::channel(1); if netplay { app.netplay_error_receiver = Some(netplay_error_receiver); @@ -312,83 +312,89 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { let rom_contents = app.netplay.rom_contents.clone(); let gui_ctx = ctx.clone(); - std::thread::spawn(move || { - let file = if !netplay { - rfd::FileDialog::new().pick_file() - } else { - None - }; - let save_config_items = SaveConfig { - selected_controller, - selected_profile, - controller_enabled, - upscale, - integer_scaling, - fullscreen, - emulate_vru, - }; + let mut task = None; + if !netplay { + task = Some(rfd::AsyncFileDialog::new().pick_file()); + } + tokio::spawn(async move { + let file = if !netplay { task.unwrap().await } else { None }; - if cfg!(target_os = "macos") && file.is_some() { - // mac os requires the process to be started on the main thread - // this means that netplay and VRU emulation will not work on mac os - { - let mut config = ui::config::Config::new(); - save_config(&mut config, controller_paths, save_config_items); - } - let mut command = std::process::Command::new(std::env::current_exe().unwrap()); - if fullscreen { - command.arg("--fullscreen"); - } - command.arg(file.unwrap().as_path()); + std::thread::Builder::new() + .name("n64".to_string()) + .spawn(move || { + let save_config_items = SaveConfig { + selected_controller, + selected_profile, + controller_enabled, + upscale, + integer_scaling, + fullscreen, + emulate_vru, + }; - let status = command.status().expect("failed to execute process"); - if !status.success() { - panic!("process exited with: {}", status); - } - } else if file.is_some() || netplay { - let running_file = cache_dir.join("game_running"); - if running_file.exists() { - println!("Game already running"); - return; - } - let result = std::fs::File::create(running_file.clone()); - if result.is_err() { - panic!("could not create running file: {}", result.err().unwrap()) - } + if cfg!(target_os = "macos") && file.is_some() { + // mac os requires the process to be started on the main thread + // this means that netplay and VRU emulation will not work on mac os + { + let mut config = ui::config::Config::new(); + save_config(&mut config, controller_paths, save_config_items); + } + let mut command = std::process::Command::new(std::env::current_exe().unwrap()); + if fullscreen { + command.arg("--fullscreen"); + } + command.arg(file.unwrap().path()); - let mut device = device::Device::new(); - save_config(&mut device.ui.config, controller_paths, save_config_items); + let status = command.status().expect("failed to execute process"); + if !status.success() { + panic!("process exited with: {}", status); + } + } else if file.is_some() || netplay { + let running_file = cache_dir.join("game_running"); + if running_file.exists() { + println!("Game already running"); + return; + } + let result = std::fs::File::create(running_file.clone()); + if result.is_err() { + panic!("could not create running file: {}", result.err().unwrap()) + } - if netplay { - device.netplay = Some(netplay::init( - peer_addr.unwrap(), - session.unwrap(), - player_number.unwrap(), - netplay_error_notifier, - gui_ctx, - )); - device::run_game(rom_contents, &mut device, fullscreen); - netplay::close(&mut device); - } else { - if emulate_vru { - device.vru.window_notifier = Some(vru_window_notifier); - device.vru.word_receiver = Some(vru_word_receiver); - device.vru.gui_ctx = Some(gui_ctx); + let mut device = device::Device::new(); + save_config(&mut device.ui.config, controller_paths, save_config_items); + + if netplay { + device.netplay = Some(netplay::init( + peer_addr.unwrap(), + session.unwrap(), + player_number.unwrap(), + netplay_error_notifier, + gui_ctx, + )); + device::run_game(rom_contents, &mut device, fullscreen); + netplay::close(&mut device); + } else { + if emulate_vru { + device.vru.window_notifier = Some(vru_window_notifier); + device.vru.word_receiver = Some(vru_word_receiver); + device.vru.gui_ctx = Some(gui_ctx); + } + + let rom_contents = device::get_rom_contents(file.unwrap().path()); + if rom_contents.is_empty() { + println!("Could not read rom file"); + } else { + device::run_game(rom_contents, &mut device, fullscreen); + } + } + let result = std::fs::remove_file(running_file); + if result.is_err() { + panic!("could not remove running file: {}", result.err().unwrap()) + } } - - let rom_contents = device::get_rom_contents(file.unwrap().as_path()); - if rom_contents.is_empty() { - println!("Could not read rom file"); - } else { - device::run_game(rom_contents, &mut device, fullscreen); - } - } - let result = std::fs::remove_file(running_file); - if result.is_err() { - panic!("could not remove running file: {}", result.err().unwrap()) - } - } + }) + .unwrap(); }); } @@ -407,7 +413,7 @@ impl eframe::App for GopherEguiApp { } if self.netplay_error_receiver.is_some() { - let result = self.netplay_error_receiver.as_ref().unwrap().try_recv(); + let result = self.netplay_error_receiver.as_mut().unwrap().try_recv(); if result.is_ok() { self.netplay.error = result.unwrap(); } @@ -518,7 +524,7 @@ impl eframe::App for GopherEguiApp { }); if self.emulate_vru && self.vru_window_receiver.is_some() { - let result = self.vru_window_receiver.as_ref().unwrap().try_recv(); + let result = self.vru_window_receiver.as_mut().unwrap().try_recv(); if result.is_ok() { self.show_vru_dialog = true; self.vru_word_list = result.unwrap(); @@ -531,7 +537,21 @@ impl eframe::App for GopherEguiApp { } } -fn add_japanese_font(ctx: &egui::Context) { +fn add_fonts(ctx: &egui::Context) { + ctx.add_font(eframe::epaint::text::FontInsert::new( + "regular_font", + egui::FontData::from_static(include_bytes!("../../data/Roboto-Regular.ttf")), + vec![ + eframe::epaint::text::InsertFontFamily { + family: egui::FontFamily::Proportional, + priority: egui::epaint::text::FontPriority::Highest, + }, + eframe::epaint::text::InsertFontFamily { + family: egui::FontFamily::Monospace, + priority: egui::epaint::text::FontPriority::Highest, + }, + ], + )); ctx.add_font(eframe::epaint::text::FontInsert::new( "japanese_font", egui::FontData::from_static(include_bytes!("../../data/NotoSansJP-Regular.ttf")), diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index 1d5286a..5534987 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -41,8 +41,8 @@ pub struct GuiNetplay { pub socket: Option>>, pub server_receiver: - Option>>, - pub game_info_receiver: Option>, + Option>>, + pub game_info_receiver: Option>, pub broadcast_socket: Option, pub broadcast_timer: Option, } @@ -99,16 +99,14 @@ fn get_servers(app: &mut GopherEguiApp, ctx: &egui::Context) { ctx.request_repaint(); } if app.netplay.server_receiver.is_none() { - let (tx, rx) = std::sync::mpsc::channel(); + let (tx, rx) = tokio::sync::mpsc::channel(1); app.netplay.server_receiver = Some(rx); let gui_ctx = ctx.clone(); - std::thread::spawn(move || { - if let Ok(response) = - reqwest::blocking::get("https://m64p.s3.amazonaws.com/servers.json") - .unwrap() - .json::>() - { - tx.send(response).unwrap(); + let task = reqwest::get("https://m64p.s3.amazonaws.com/servers.json"); + tokio::spawn(async move { + let response = task.await; + if let Ok(response) = response { + tx.send(response.json().await.unwrap()).await.unwrap(); gui_ctx.request_repaint(); } }); @@ -143,7 +141,7 @@ fn get_servers(app: &mut GopherEguiApp, ctx: &egui::Context) { ctx.request_repaint(); } if app.netplay.server_receiver.is_some() { - let result = app.netplay.server_receiver.as_ref().unwrap().try_recv(); + let result = app.netplay.server_receiver.as_mut().unwrap().try_recv(); if result.is_ok() { app.netplay.servers.extend(result.unwrap()); app.netplay.server_receiver = None; @@ -181,15 +179,16 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { app.netplay.create_rom_label = "Open ROM".to_string(); } if ui.button(&app.netplay.create_rom_label).clicked() { - let (tx, rx) = std::sync::mpsc::channel(); + let (tx, rx) = tokio::sync::mpsc::channel(1); app.netplay.game_info_receiver = Some(rx); let gui_ctx = ctx.clone(); app.netplay.create_rom_label = "Inspecting ROM".to_string(); - std::thread::spawn(move || { - let file = rfd::FileDialog::new().pick_file(); + let task = rfd::AsyncFileDialog::new().pick_file(); + tokio::spawn(async move { + let file = task.await; if let Some(file) = file { - parse_rom_file(file, tx); + parse_rom_file(file, tx).await; } else { tx.send(( "".to_string(), @@ -197,6 +196,7 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { "Open ROM".to_string(), vec![], )) + .await .unwrap(); } gui_ctx.request_repaint(); @@ -217,7 +217,7 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { get_servers(app, ctx); if app.netplay.game_info_receiver.is_some() { - let result = app.netplay.game_info_receiver.as_ref().unwrap().try_recv(); + let result = app.netplay.game_info_receiver.as_mut().unwrap().try_recv(); if result.is_ok() { app.netplay.game_info_receiver = None; let data = result.unwrap(); @@ -391,19 +391,15 @@ fn get_sessions(app: &mut GopherEguiApp, ctx: &egui::Context) { } } -fn parse_rom_file(file: std::path::PathBuf, tx: std::sync::mpsc::Sender) { - let rom_contents = device::get_rom_contents(file.as_path()); +async fn parse_rom_file(file: rfd::FileHandle, tx: tokio::sync::mpsc::Sender) { + let rom_contents = device::get_rom_contents(file.path()); if !rom_contents.is_empty() { let hash = device::cart::rom::calculate_hash(&rom_contents); let game_name = ui::storage::get_game_name(&rom_contents); - tx.send(( - hash, - game_name, - file.file_name().unwrap().to_string_lossy().to_string(), - rom_contents, - )) - .unwrap(); + tx.send((hash, game_name, file.file_name(), rom_contents)) + .await + .unwrap(); } else { tx.send(( "".to_string(), @@ -411,6 +407,7 @@ fn parse_rom_file(file: std::path::PathBuf, tx: std::sync::mpsc::Sender>, - word_index_receiver: &std::sync::mpsc::Receiver, + window_notifier: &tokio::sync::mpsc::Sender>, + word_index_receiver: &mut tokio::sync::mpsc::Receiver, gui_ctx: &egui::Context, ) -> u16 { let mut dedup_words = words.to_owned(); dedup_words.sort(); dedup_words.dedup(); - window_notifier.send(dedup_words).unwrap(); + window_notifier.try_send(dedup_words).unwrap(); gui_ctx.request_repaint(); // this is so the window pops up right away let mut result = word_index_receiver.try_recv(); while result.is_err() { From ab31b44aacf1bc61c39f21a11135a43cc2bf81db Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 5 Feb 2025 22:19:47 +0100 Subject: [PATCH 0288/1117] Bump to 1.0.4 (#227) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 1195cd5..27b7369 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.3" +version = "1.0.4" edition = "2021" rust-version = "1.82" From cd2b3dd143293cf716a55dcae660d165c26cc3a1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 6 Feb 2025 14:31:11 +0100 Subject: [PATCH 0289/1117] update cargo lock --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 1921e24..8be50e9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1463,7 +1463,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.0.3" +version = "1.0.4" dependencies = [ "bindgen", "cc", From a9afd6bb5c90ac9837bb750d20545116945d0607 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 7 Feb 2025 22:29:20 +0100 Subject: [PATCH 0290/1117] Improve RDP emulation performance (#228) * Improve RDP emulation performance * more * more * more * more --- build.rs | 1 + parallel-rdp/interface.cpp | 59 ++++++-------------------------------- parallel-rdp/interface.hpp | 6 +--- src/device.rs | 1 + src/device/rdp.rs | 18 ++++++++++-- src/device/vi.rs | 10 +++---- src/ui/video.rs | 9 +++--- 7 files changed, 36 insertions(+), 68 deletions(-) diff --git a/build.rs b/build.rs index 807dcd3..1725dea 100644 --- a/build.rs +++ b/build.rs @@ -99,6 +99,7 @@ fn main() { .allowlist_function("rdp_set_vi_register") .allowlist_function("rdp_update_screen") .allowlist_function("rdp_process_commands") + .allowlist_function("rdp_full_sync") .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) .generate() .expect("Unable to generate bindings"); diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 8be5c43..aff96c0 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -62,6 +62,7 @@ static int cmd_cur; static int cmd_ptr; static bool emu_running; static GFX_INFO gfx_info; +static uint64_t sync_signal; static const unsigned cmd_len_lut[64] = { 1, @@ -330,45 +331,6 @@ bool rdp_update_screen() return emu_running; } -static uint32_t viCalculateHorizonalWidth(uint32_t hstart, uint32_t xscale, uint32_t width) -{ - if (xscale == 0) - return 320; - - uint32_t start = ((hstart & 0x03FF0000) >> 16) & 0x3FF; - uint32_t end = (hstart & 0x3FF); - uint32_t delta; - if (end > start) - delta = end - start; - else - delta = start - end; - uint32_t scale = (xscale & 0xFFF); - - if (delta == 0) - { - delta = width; - } - - return (delta * scale) / 0x400; -} - -static uint32_t viCalculateVerticalHeight(uint32_t vstart, uint32_t yscale) -{ - if (yscale == 0) - return 240; - - uint32_t start = ((vstart & 0x03FF0000) >> 16) & 0x3FF; - uint32_t end = (vstart & 0x3FF); - uint32_t delta; - if (end > start) - delta = end - start; - else - delta = start - end; - uint32_t scale = (yscale & 0xFFF); - - return (delta * scale) / 0x800; -} - uint64_t rdp_process_commands() { uint64_t interrupt_timer = 0; @@ -431,19 +393,9 @@ uint64_t rdp_process_commands() if (RDP::Op(command) == RDP::Op::SyncFull) { - processor->wait_for_timeline(processor->signal_timeline()); + sync_signal = processor->signal_timeline(); - uint32_t width = viCalculateHorizonalWidth(*gfx_info.VI_H_START_REG, *gfx_info.VI_X_SCALE_REG, *gfx_info.VI_WIDTH_REG); - if (width == 0) - { - width = 320; - } - uint32_t height = viCalculateVerticalHeight(*gfx_info.VI_V_START_REG, *gfx_info.VI_Y_SCALE_REG); - if (height == 0) - { - height = 240; - } - interrupt_timer = width * height * 4; + interrupt_timer = 60000; } cmd_cur += cmd_length; @@ -455,3 +407,8 @@ uint64_t rdp_process_commands() return interrupt_timer; } + +void rdp_full_sync() +{ + processor->wait_for_timeline(sync_signal); +} diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index b53268e..1796a28 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -16,11 +16,6 @@ extern "C" uint32_t *DPC_START_REG; uint32_t *DPC_END_REG; uint32_t *DPC_STATUS_REG; - uint32_t *VI_H_START_REG; - uint32_t *VI_V_START_REG; - uint32_t *VI_X_SCALE_REG; - uint32_t *VI_Y_SCALE_REG; - uint32_t *VI_WIDTH_REG; } GFX_INFO; void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_scaling, bool _fullscreen); @@ -28,6 +23,7 @@ extern "C" void rdp_set_vi_register(uint32_t reg, uint32_t value); bool rdp_update_screen(); uint64_t rdp_process_commands(); + void rdp_full_sync(); #ifdef __cplusplus } diff --git a/src/device.rs b/src/device.rs index 50b4f5e..d639059 100644 --- a/src/device.rs +++ b/src/device.rs @@ -381,6 +381,7 @@ impl Device { regs_dpc: [0; rdp::DPC_REGS_COUNT as usize], regs_dps: [0; rdp::DPS_REGS_COUNT as usize], wait_frozen: false, + last_status_value: 0, }, mi: mi::Mi { regs: [0; mi::MI_REGS_COUNT as usize], diff --git a/src/device/rdp.rs b/src/device/rdp.rs index 6b04b90..29a01ac 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -45,6 +45,7 @@ pub struct Rdp { pub regs_dpc: [u32; DPC_REGS_COUNT as usize], pub regs_dps: [u32; DPS_REGS_COUNT as usize], pub wait_frozen: bool, + pub last_status_value: u32, } pub fn read_regs_dpc( @@ -54,6 +55,15 @@ pub fn read_regs_dpc( ) -> u32 { let reg = (address & 0xFFFF) >> 2; match reg as u32 { + DPC_STATUS_REG => { + let value = + device.rdp.regs_dpc[reg as usize] & (DPC_STATUS_PIPE_BUSY | DPC_STATUS_CMD_BUSY); + if value == device.rdp.last_status_value && value != 0 { + device.rsp.cpu.sync_point = true; + } + device.rdp.last_status_value = value; + device.rdp.regs_dpc[reg as usize] + } DPC_CLOCK_REG => 0xFFFFFF, // needed for JFG DPC_CURRENT_REG => { if device.rdp.wait_frozen { @@ -103,7 +113,8 @@ pub fn write_regs_dpc(device: &mut device::Device, address: u64, value: u32, mas fn run_rdp(device: &mut device::Device) { let timer = ui::video::process_rdp_list(); - device.rdp.regs_dpc[DPC_STATUS_REG as usize] |= DPC_STATUS_START_GCLK | DPC_STATUS_PIPE_BUSY; + device.rdp.regs_dpc[DPC_STATUS_REG as usize] |= + DPC_STATUS_START_GCLK | DPC_STATUS_PIPE_BUSY | DPC_STATUS_CMD_BUSY; if timer != 0 { device::events::create_event( @@ -185,7 +196,10 @@ pub fn init(device: &mut device::Device) { } fn rdp_interrupt_event(device: &mut device::Device) { - device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !(DPC_STATUS_START_GCLK | DPC_STATUS_PIPE_BUSY); + ui::video::full_sync(); + + device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= + !(DPC_STATUS_START_GCLK | DPC_STATUS_PIPE_BUSY | DPC_STATUS_CMD_BUSY); device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_DP) } diff --git a/src/device/vi.rs b/src/device/vi.rs index 2915317..df277f6 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -5,18 +5,18 @@ use governor::clock::Clock; const VI_STATUS_REG: u32 = 0; //const VI_ORIGIN_REG: u32 = 1; -pub const VI_WIDTH_REG: u32 = 2; +//const VI_WIDTH_REG: u32 = 2; //const VI_V_INTR_REG: u32 = 3; const VI_CURRENT_REG: u32 = 4; //const VI_BURST_REG: u32 = 5; const VI_V_SYNC_REG: u32 = 6; const VI_H_SYNC_REG: u32 = 7; //const VI_LEAP_REG: u32 = 8; -pub const VI_H_START_REG: u32 = 9; -pub const VI_V_START_REG: u32 = 10; +//const VI_H_START_REG: u32 = 9; +//const VI_V_START_REG: u32 = 10; //const VI_V_BURST_REG: u32 = 11; -pub const VI_X_SCALE_REG: u32 = 12; -pub const VI_Y_SCALE_REG: u32 = 13; +//const VI_X_SCALE_REG: u32 = 12; +//const VI_Y_SCALE_REG: u32 = 13; pub const VI_REGS_COUNT: u32 = 14; pub struct Vi { diff --git a/src/ui/video.rs b/src/ui/video.rs index dfa52e5..8704166 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -33,11 +33,6 @@ pub fn init(device: &mut device::Device, fullscreen: bool) { DPC_START_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_START_REG as usize], DPC_END_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_END_REG as usize], DPC_STATUS_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_STATUS_REG as usize], - VI_H_START_REG: &mut device.vi.regs[device::vi::VI_H_START_REG as usize], - VI_V_START_REG: &mut device.vi.regs[device::vi::VI_V_START_REG as usize], - VI_X_SCALE_REG: &mut device.vi.regs[device::vi::VI_X_SCALE_REG as usize], - VI_Y_SCALE_REG: &mut device.vi.regs[device::vi::VI_Y_SCALE_REG as usize], - VI_WIDTH_REG: &mut device.vi.regs[device::vi::VI_WIDTH_REG as usize], }; unsafe { @@ -63,6 +58,10 @@ pub fn update_screen() -> bool { unsafe { rdp_update_screen() } } +pub fn full_sync() { + unsafe { rdp_full_sync() } +} + pub fn set_register(reg: u32, value: u32) { unsafe { rdp_set_vi_register(reg, value); From 271e4be68c9fda8e8b008878f11eb483233bf400 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 8 Feb 2025 21:20:59 +0100 Subject: [PATCH 0291/1117] disable rdp sync optimization to be safe (#229) --- build.rs | 1 - parallel-rdp/interface.cpp | 8 +------- parallel-rdp/interface.hpp | 1 - src/device/rdp.rs | 2 -- src/ui/video.rs | 4 ---- 5 files changed, 1 insertion(+), 15 deletions(-) diff --git a/build.rs b/build.rs index 1725dea..807dcd3 100644 --- a/build.rs +++ b/build.rs @@ -99,7 +99,6 @@ fn main() { .allowlist_function("rdp_set_vi_register") .allowlist_function("rdp_update_screen") .allowlist_function("rdp_process_commands") - .allowlist_function("rdp_full_sync") .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) .generate() .expect("Unable to generate bindings"); diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index aff96c0..eb3ba5a 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -62,7 +62,6 @@ static int cmd_cur; static int cmd_ptr; static bool emu_running; static GFX_INFO gfx_info; -static uint64_t sync_signal; static const unsigned cmd_len_lut[64] = { 1, @@ -393,7 +392,7 @@ uint64_t rdp_process_commands() if (RDP::Op(command) == RDP::Op::SyncFull) { - sync_signal = processor->signal_timeline(); + processor->wait_for_timeline(processor->signal_timeline()); interrupt_timer = 60000; } @@ -407,8 +406,3 @@ uint64_t rdp_process_commands() return interrupt_timer; } - -void rdp_full_sync() -{ - processor->wait_for_timeline(sync_signal); -} diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 1796a28..ba8832c 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -23,7 +23,6 @@ extern "C" void rdp_set_vi_register(uint32_t reg, uint32_t value); bool rdp_update_screen(); uint64_t rdp_process_commands(); - void rdp_full_sync(); #ifdef __cplusplus } diff --git a/src/device/rdp.rs b/src/device/rdp.rs index 29a01ac..3e826c0 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -196,8 +196,6 @@ pub fn init(device: &mut device::Device) { } fn rdp_interrupt_event(device: &mut device::Device) { - ui::video::full_sync(); - device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !(DPC_STATUS_START_GCLK | DPC_STATUS_PIPE_BUSY | DPC_STATUS_CMD_BUSY); diff --git a/src/ui/video.rs b/src/ui/video.rs index 8704166..ee4000d 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -58,10 +58,6 @@ pub fn update_screen() -> bool { unsafe { rdp_update_screen() } } -pub fn full_sync() { - unsafe { rdp_full_sync() } -} - pub fn set_register(reg: u32, value: u32) { unsafe { rdp_set_vi_register(reg, value); From 4c50203ad30333627e2a20525088c0c6176a219a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 8 Feb 2025 21:39:48 +0100 Subject: [PATCH 0292/1117] modify rdp sync code (#230) --- parallel-rdp/interface.cpp | 51 +++++++++++++++++++++++++++++++++++++- parallel-rdp/interface.hpp | 5 ++++ src/device/vi.rs | 10 ++++---- src/ui/video.rs | 5 ++++ 4 files changed, 65 insertions(+), 6 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index eb3ba5a..6a5c89f 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -330,6 +330,45 @@ bool rdp_update_screen() return emu_running; } +static uint32_t viCalculateHorizonalWidth(uint32_t hstart, uint32_t xscale, uint32_t width) +{ + if (xscale == 0) + return 320; + + uint32_t start = ((hstart & 0x03FF0000) >> 16) & 0x3FF; + uint32_t end = (hstart & 0x3FF); + uint32_t delta; + if (end > start) + delta = end - start; + else + delta = start - end; + uint32_t scale = (xscale & 0xFFF); + + if (delta == 0) + { + delta = width; + } + + return (delta * scale) / 0x400; +} + +static uint32_t viCalculateVerticalHeight(uint32_t vstart, uint32_t yscale) +{ + if (yscale == 0) + return 240; + + uint32_t start = ((vstart & 0x03FF0000) >> 16) & 0x3FF; + uint32_t end = (vstart & 0x3FF); + uint32_t delta; + if (end > start) + delta = end - start; + else + delta = start - end; + uint32_t scale = (yscale & 0xFFF); + + return (delta * scale) / 0x800; +} + uint64_t rdp_process_commands() { uint64_t interrupt_timer = 0; @@ -394,7 +433,17 @@ uint64_t rdp_process_commands() { processor->wait_for_timeline(processor->signal_timeline()); - interrupt_timer = 60000; + uint32_t width = viCalculateHorizonalWidth(*gfx_info.VI_H_START_REG, *gfx_info.VI_X_SCALE_REG, *gfx_info.VI_WIDTH_REG); + if (width == 0) + { + width = 320; + } + uint32_t height = viCalculateVerticalHeight(*gfx_info.VI_V_START_REG, *gfx_info.VI_Y_SCALE_REG); + if (height == 0) + { + height = 240; + } + interrupt_timer = width * height; } cmd_cur += cmd_length; diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index ba8832c..b53268e 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -16,6 +16,11 @@ extern "C" uint32_t *DPC_START_REG; uint32_t *DPC_END_REG; uint32_t *DPC_STATUS_REG; + uint32_t *VI_H_START_REG; + uint32_t *VI_V_START_REG; + uint32_t *VI_X_SCALE_REG; + uint32_t *VI_Y_SCALE_REG; + uint32_t *VI_WIDTH_REG; } GFX_INFO; void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_scaling, bool _fullscreen); diff --git a/src/device/vi.rs b/src/device/vi.rs index df277f6..2915317 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -5,18 +5,18 @@ use governor::clock::Clock; const VI_STATUS_REG: u32 = 0; //const VI_ORIGIN_REG: u32 = 1; -//const VI_WIDTH_REG: u32 = 2; +pub const VI_WIDTH_REG: u32 = 2; //const VI_V_INTR_REG: u32 = 3; const VI_CURRENT_REG: u32 = 4; //const VI_BURST_REG: u32 = 5; const VI_V_SYNC_REG: u32 = 6; const VI_H_SYNC_REG: u32 = 7; //const VI_LEAP_REG: u32 = 8; -//const VI_H_START_REG: u32 = 9; -//const VI_V_START_REG: u32 = 10; +pub const VI_H_START_REG: u32 = 9; +pub const VI_V_START_REG: u32 = 10; //const VI_V_BURST_REG: u32 = 11; -//const VI_X_SCALE_REG: u32 = 12; -//const VI_Y_SCALE_REG: u32 = 13; +pub const VI_X_SCALE_REG: u32 = 12; +pub const VI_Y_SCALE_REG: u32 = 13; pub const VI_REGS_COUNT: u32 = 14; pub struct Vi { diff --git a/src/ui/video.rs b/src/ui/video.rs index ee4000d..dfa52e5 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -33,6 +33,11 @@ pub fn init(device: &mut device::Device, fullscreen: bool) { DPC_START_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_START_REG as usize], DPC_END_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_END_REG as usize], DPC_STATUS_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_STATUS_REG as usize], + VI_H_START_REG: &mut device.vi.regs[device::vi::VI_H_START_REG as usize], + VI_V_START_REG: &mut device.vi.regs[device::vi::VI_V_START_REG as usize], + VI_X_SCALE_REG: &mut device.vi.regs[device::vi::VI_X_SCALE_REG as usize], + VI_Y_SCALE_REG: &mut device.vi.regs[device::vi::VI_Y_SCALE_REG as usize], + VI_WIDTH_REG: &mut device.vi.regs[device::vi::VI_WIDTH_REG as usize], }; unsafe { From 37b41c0f666ef34ea5e7f358d7b8a011a39c5366 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 8 Feb 2025 22:41:28 +0100 Subject: [PATCH 0293/1117] cleanup vi calc functions --- parallel-rdp/interface.cpp | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 6a5c89f..b2eec74 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -332,38 +332,27 @@ bool rdp_update_screen() static uint32_t viCalculateHorizonalWidth(uint32_t hstart, uint32_t xscale, uint32_t width) { - if (xscale == 0) - return 320; - - uint32_t start = ((hstart & 0x03FF0000) >> 16) & 0x3FF; + uint32_t start = (hstart >> 16) & 0x3FF; uint32_t end = (hstart & 0x3FF); uint32_t delta; if (end > start) delta = end - start; else - delta = start - end; + delta = 0; uint32_t scale = (xscale & 0xFFF); - if (delta == 0) - { - delta = width; - } - return (delta * scale) / 0x400; } static uint32_t viCalculateVerticalHeight(uint32_t vstart, uint32_t yscale) { - if (yscale == 0) - return 240; - - uint32_t start = ((vstart & 0x03FF0000) >> 16) & 0x3FF; + uint32_t start = (vstart >> 16) & 0x3FF; uint32_t end = (vstart & 0x3FF); uint32_t delta; if (end > start) delta = end - start; else - delta = start - end; + delta = 0; uint32_t scale = (yscale & 0xFFF); return (delta * scale) / 0x800; From ab5ef571065321feb808b5443d482ac5897a3212 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 9 Feb 2025 11:43:10 +0100 Subject: [PATCH 0294/1117] further function cleanup --- parallel-rdp/interface.cpp | 4 ++-- parallel-rdp/interface.hpp | 1 - src/device/vi.rs | 2 +- src/ui/video.rs | 1 - 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index b2eec74..46dd2af 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -330,7 +330,7 @@ bool rdp_update_screen() return emu_running; } -static uint32_t viCalculateHorizonalWidth(uint32_t hstart, uint32_t xscale, uint32_t width) +static uint32_t viCalculateHorizonalWidth(uint32_t hstart, uint32_t xscale) { uint32_t start = (hstart >> 16) & 0x3FF; uint32_t end = (hstart & 0x3FF); @@ -422,7 +422,7 @@ uint64_t rdp_process_commands() { processor->wait_for_timeline(processor->signal_timeline()); - uint32_t width = viCalculateHorizonalWidth(*gfx_info.VI_H_START_REG, *gfx_info.VI_X_SCALE_REG, *gfx_info.VI_WIDTH_REG); + uint32_t width = viCalculateHorizonalWidth(*gfx_info.VI_H_START_REG, *gfx_info.VI_X_SCALE_REG); if (width == 0) { width = 320; diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index b53268e..306d3c8 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -20,7 +20,6 @@ extern "C" uint32_t *VI_V_START_REG; uint32_t *VI_X_SCALE_REG; uint32_t *VI_Y_SCALE_REG; - uint32_t *VI_WIDTH_REG; } GFX_INFO; void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_scaling, bool _fullscreen); diff --git a/src/device/vi.rs b/src/device/vi.rs index 2915317..3f3d9d8 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -5,7 +5,7 @@ use governor::clock::Clock; const VI_STATUS_REG: u32 = 0; //const VI_ORIGIN_REG: u32 = 1; -pub const VI_WIDTH_REG: u32 = 2; +//const VI_WIDTH_REG: u32 = 2; //const VI_V_INTR_REG: u32 = 3; const VI_CURRENT_REG: u32 = 4; //const VI_BURST_REG: u32 = 5; diff --git a/src/ui/video.rs b/src/ui/video.rs index dfa52e5..ac039ad 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -37,7 +37,6 @@ pub fn init(device: &mut device::Device, fullscreen: bool) { VI_V_START_REG: &mut device.vi.regs[device::vi::VI_V_START_REG as usize], VI_X_SCALE_REG: &mut device.vi.regs[device::vi::VI_X_SCALE_REG as usize], VI_Y_SCALE_REG: &mut device.vi.regs[device::vi::VI_Y_SCALE_REG as usize], - VI_WIDTH_REG: &mut device.vi.regs[device::vi::VI_WIDTH_REG as usize], }; unsafe { From 421d53347920a16704f5f4fead587dadc3dd2d21 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 9 Feb 2025 11:45:36 +0100 Subject: [PATCH 0295/1117] update cargo packages (#231) --- Cargo.lock | 67 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8be50e9..4cc6dcf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -318,7 +318,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "shlex", "syn", ] @@ -485,9 +485,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.12" +version = "1.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "755717a7de9ec452bf7f3f1a3099085deabd7f2962b861dae91ecd7a365903d2" +checksum = "c7777341816418c02e033934a09f20dc0ccaf65a5201ef8a450ae0105a573fda" dependencies = [ "jobserver", "libc", @@ -1271,6 +1271,25 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-lite" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + [[package]] name = "futures-macro" version = "0.3.31" @@ -2591,9 +2610,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.2" +version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] name = "option-ext" @@ -2872,7 +2891,7 @@ dependencies = [ "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "rustls", "socket2", "thiserror 2.0.11", @@ -2890,7 +2909,7 @@ dependencies = [ "getrandom 0.2.15", "rand", "ring", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "rustls", "rustls-pki-types", "slab", @@ -3136,9 +3155,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustc_version" @@ -3250,15 +3269,15 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sdl3-src" -version = "3.2.2" +version = "3.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82d30b2107d266ee8b9678ac5a905b25c061c03c662501fd60859e9d7e2f7e13" +checksum = "652742893bbef3623ddbd049fa2eaeb7cf62f3f59ab1596727cfea3eb25fe5bb" [[package]] name = "sdl3-sys" -version = "0.4.3+SDL3-3.2.2" +version = "0.4.4+SDL3-3.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb7ecf5e5f416b2e6408ebe1825ded6bdcac3b8c79e429aada3c79efc675e80d" +checksum = "14062c68e4683b8ef222bbd1abb178310dd214c66db83f8080244546601473b1" dependencies = [ "cmake", "rpkg-config", @@ -4686,9 +4705,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winit" -version = "0.30.8" +version = "0.30.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5d74280aabb958072864bff6cfbcf9025cf8bfacdde5e32b5e12920ef703b0f" +checksum = "a809eacf18c8eca8b6635091543f02a5a06ddf3dad846398795460e6e0ae3cc0" dependencies = [ "ahash", "android-activity", @@ -4873,9 +4892,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.4.0" +version = "5.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbddd8b6cb25d5d8ec1b23277b45299a98bfb220f1761ca11e186d5c702507f8" +checksum = "59c333f648ea1b647bc95dc1d34807c8e25ed7a6feff3394034dc4776054b236" dependencies = [ "async-broadcast", "async-recursion", @@ -4883,7 +4902,7 @@ dependencies = [ "enumflags2", "event-listener", "futures-core", - "futures-util", + "futures-lite", "hex", "nix", "ordered-stream", @@ -4903,9 +4922,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.4.0" +version = "5.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dac404d48b4e9cf193c8b49589f3280ceca5ff63519e7e64f55b4cf9c47ce146" +checksum = "f325ad10eb0d0a3eb060203494c3b7ec3162a01a59db75d2deee100339709fc0" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -5085,9 +5104,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.3.0" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c951c21879c6e1d46ac5adfc34f698fefb465d498cf4ac87545849bd71bb5a" +checksum = "b2df9ee044893fcffbdc25de30546edef3e32341466811ca18421e3cd6c5a3ac" dependencies = [ "endi", "enumflags2", @@ -5101,9 +5120,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.3.0" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eeb539471af098d9e63faf428c71ac4cd4efe0b5baa3c8a6b991c5f2543b70e" +checksum = "74170caa85b8b84cc4935f2d56a57c7a15ea6185ccdd7eadb57e6edd90f94b2f" dependencies = [ "proc-macro-crate", "proc-macro2", From 99511b7cc66b3324e80a4d7e38812a151e7b69a7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 9 Feb 2025 11:56:47 +0100 Subject: [PATCH 0296/1117] bump to 1.0.5 (#232) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4cc6dcf..8a0f9b4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1482,7 +1482,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.0.4" +version = "1.0.5" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index 27b7369..6f80d4d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.4" +version = "1.0.5" edition = "2021" rust-version = "1.82" From 1c168c4bcda385bb67d0230a80d8c4484c51f3b0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 9 Feb 2025 17:34:29 +0100 Subject: [PATCH 0297/1117] add some CPU read cycles (#233) * add some CPU read cycles * more * more * more * use scissor region for rdp interrupt calc --- parallel-rdp/interface.cpp | 52 ++++++++++--------------------------- parallel-rdp/interface.hpp | 4 --- src/device/ai.rs | 6 +++-- src/device/cart/sc64.rs | 1 + src/device/mi.rs | 1 + src/device/pi.rs | 1 + src/device/rdp.rs | 2 ++ src/device/rdram.rs | 1 + src/device/ri.rs | 1 + src/device/rsp_interface.rs | 6 ++++- src/device/si.rs | 1 + src/device/vi.rs | 9 ++++--- src/ui/video.rs | 4 --- 13 files changed, 35 insertions(+), 54 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 46dd2af..819c4c4 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -62,6 +62,7 @@ static int cmd_cur; static int cmd_ptr; static bool emu_running; static GFX_INFO gfx_info; +static uint32_t region; static const unsigned cmd_len_lut[64] = { 1, @@ -330,34 +331,6 @@ bool rdp_update_screen() return emu_running; } -static uint32_t viCalculateHorizonalWidth(uint32_t hstart, uint32_t xscale) -{ - uint32_t start = (hstart >> 16) & 0x3FF; - uint32_t end = (hstart & 0x3FF); - uint32_t delta; - if (end > start) - delta = end - start; - else - delta = 0; - uint32_t scale = (xscale & 0xFFF); - - return (delta * scale) / 0x400; -} - -static uint32_t viCalculateVerticalHeight(uint32_t vstart, uint32_t yscale) -{ - uint32_t start = (vstart >> 16) & 0x3FF; - uint32_t end = (vstart & 0x3FF); - uint32_t delta; - if (end > start) - delta = end - start; - else - delta = 0; - uint32_t scale = (yscale & 0xFFF); - - return (delta * scale) / 0x800; -} - uint64_t rdp_process_commands() { uint64_t interrupt_timer = 0; @@ -406,6 +379,7 @@ uint64_t rdp_process_commands() while (cmd_cur - cmd_ptr < 0) { uint32_t w1 = cmd_data[2 * cmd_cur]; + uint32_t w2 = cmd_data[2 * cmd_cur + 1]; uint32_t command = (w1 >> 24) & 63; int cmd_length = cmd_len_lut[command]; @@ -418,21 +392,21 @@ uint64_t rdp_process_commands() if (command >= 8) processor->enqueue_command(cmd_length * 2, &cmd_data[2 * cmd_cur]); + if (RDP::Op(command) == RDP::Op::SetScissor) + { + uint32_t upper_left_x = ((w1 >> 12) & 0xFFF) >> 2; + uint32_t upper_left_y = (w1 & 0xFFF) >> 2; + uint32_t lower_right_x = ((w2 >> 12) & 0xFFF) >> 2; + uint32_t lower_right_y = (w2 & 0xFFF) >> 2; + region = (lower_right_x - upper_left_x) * (lower_right_y - upper_left_y); + } if (RDP::Op(command) == RDP::Op::SyncFull) { processor->wait_for_timeline(processor->signal_timeline()); - uint32_t width = viCalculateHorizonalWidth(*gfx_info.VI_H_START_REG, *gfx_info.VI_X_SCALE_REG); - if (width == 0) - { - width = 320; - } - uint32_t height = viCalculateVerticalHeight(*gfx_info.VI_V_START_REG, *gfx_info.VI_Y_SCALE_REG); - if (height == 0) - { - height = 240; - } - interrupt_timer = width * height; + interrupt_timer = region; + if (interrupt_timer == 0) + interrupt_timer = 5000; } cmd_cur += cmd_length; diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 306d3c8..ba8832c 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -16,10 +16,6 @@ extern "C" uint32_t *DPC_START_REG; uint32_t *DPC_END_REG; uint32_t *DPC_STATUS_REG; - uint32_t *VI_H_START_REG; - uint32_t *VI_V_START_REG; - uint32_t *VI_X_SCALE_REG; - uint32_t *VI_Y_SCALE_REG; } GFX_INFO; void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_scaling, bool _fullscreen); diff --git a/src/device/ai.rs b/src/device/ai.rs index db98341..8cc0607 100644 --- a/src/device/ai.rs +++ b/src/device/ai.rs @@ -111,7 +111,7 @@ pub fn read_regs( _access_size: device::memory::AccessSize, ) -> u32 { let reg = (address & 0xFFFF) >> 2; - match reg as u32 { + let return_value = match reg as u32 { AI_LEN_REG => { let value = get_remaining_dma_length(device); if value < device.ai.last_read { @@ -128,7 +128,9 @@ pub fn read_regs( value as u32 } _ => device.ai.regs[reg as usize], - } + }; + device::cop0::add_cycles(device, 20); + return_value } pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { diff --git a/src/device/cart/sc64.rs b/src/device/cart/sc64.rs index 4f831ce..8adb1cf 100644 --- a/src/device/cart/sc64.rs +++ b/src/device/cart/sc64.rs @@ -37,6 +37,7 @@ pub fn read_regs( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { + device::cop0::add_cycles(device, 20); if device.sc64.regs_locked { return 0; } diff --git a/src/device/mi.rs b/src/device/mi.rs index c48b491..81f02d7 100644 --- a/src/device/mi.rs +++ b/src/device/mi.rs @@ -53,6 +53,7 @@ pub fn read_regs( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { + device::cop0::add_cycles(device, 20); device.mi.regs[((address & 0xFFFF) >> 2) as usize] } diff --git a/src/device/pi.rs b/src/device/pi.rs index c02826c..691411e 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -40,6 +40,7 @@ pub fn read_regs( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { + device::cop0::add_cycles(device, 20); let reg = (address & 0xFFFF) >> 2; match reg as u32 { PI_WR_LEN_REG | PI_RD_LEN_REG => 0x7F, diff --git a/src/device/rdp.rs b/src/device/rdp.rs index 3e826c0..9df454c 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -53,6 +53,7 @@ pub fn read_regs_dpc( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { + device::cop0::add_cycles(device, 20); let reg = (address & 0xFFFF) >> 2; match reg as u32 { DPC_STATUS_REG => { @@ -131,6 +132,7 @@ pub fn read_regs_dps( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { + device::cop0::add_cycles(device, 20); device.rdp.regs_dps[((address & 0xFFFF) >> 2) as usize] } diff --git a/src/device/rdram.rs b/src/device/rdram.rs index 9132c6f..37d2615 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -73,6 +73,7 @@ pub fn read_regs( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { + device::cop0::add_cycles(device, 20); let chip_id = (address >> 13) & 3; let reg = (address & 0x3FF) >> 2; match reg as u32 { diff --git a/src/device/ri.rs b/src/device/ri.rs index 55ae22b..60056b4 100644 --- a/src/device/ri.rs +++ b/src/device/ri.rs @@ -20,6 +20,7 @@ pub fn read_regs( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { + device::cop0::add_cycles(device, 20); if ((address & 0xFFFF) >> 2) as u32 == RI_SELECT_REG && !device.ri.ram_init { device::cop0::add_cycles(device, device.cpu.clock_rate / 2); // hack, simulate RDRAM initialization device.ri.ram_init = true; diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index 60d1ce8..1c643ca 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -101,8 +101,10 @@ pub fn read_mem_fast( pub fn read_mem( device: &mut device::Device, address: u64, - _access_size: device::memory::AccessSize, + access_size: device::memory::AccessSize, ) -> u32 { + device::cop0::add_cycles(device, access_size as u64 / 4); + let masked_address = address as usize & RSP_MEM_MASK; u32::from_be_bytes( device.rsp.mem[masked_address..masked_address + 4] @@ -264,6 +266,7 @@ pub fn read_regs( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { + device::cop0::add_cycles(device, 20); let reg = (address & 0xFFFF) >> 2; match reg as u32 { SP_DMA_BUSY_REG | SP_DMA_FULL_REG => { @@ -321,6 +324,7 @@ pub fn read_regs2( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { + device::cop0::add_cycles(device, 20); device.rsp.regs2[((address & 0xFFFF) >> 2) as usize] } diff --git a/src/device/si.rs b/src/device/si.rs index df1e644..4751ebc 100644 --- a/src/device/si.rs +++ b/src/device/si.rs @@ -31,6 +31,7 @@ pub fn read_regs( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { + device::cop0::add_cycles(device, 20); device.si.regs[((address & 0xFFFF) >> 2) as usize] } diff --git a/src/device/vi.rs b/src/device/vi.rs index 3f3d9d8..9b825e2 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -12,11 +12,11 @@ const VI_CURRENT_REG: u32 = 4; const VI_V_SYNC_REG: u32 = 6; const VI_H_SYNC_REG: u32 = 7; //const VI_LEAP_REG: u32 = 8; -pub const VI_H_START_REG: u32 = 9; -pub const VI_V_START_REG: u32 = 10; +//const VI_H_START_REG: u32 = 9; +//const VI_V_START_REG: u32 = 10; //const VI_V_BURST_REG: u32 = 11; -pub const VI_X_SCALE_REG: u32 = 12; -pub const VI_Y_SCALE_REG: u32 = 13; +//const VI_X_SCALE_REG: u32 = 12; +//const VI_Y_SCALE_REG: u32 = 13; pub const VI_REGS_COUNT: u32 = 14; pub struct Vi { @@ -89,6 +89,7 @@ pub fn read_regs( if reg as u32 == VI_CURRENT_REG { set_current_line(device) } + device::cop0::add_cycles(device, 20); device.vi.regs[reg as usize] } diff --git a/src/ui/video.rs b/src/ui/video.rs index ac039ad..ee4000d 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -33,10 +33,6 @@ pub fn init(device: &mut device::Device, fullscreen: bool) { DPC_START_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_START_REG as usize], DPC_END_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_END_REG as usize], DPC_STATUS_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_STATUS_REG as usize], - VI_H_START_REG: &mut device.vi.regs[device::vi::VI_H_START_REG as usize], - VI_V_START_REG: &mut device.vi.regs[device::vi::VI_V_START_REG as usize], - VI_X_SCALE_REG: &mut device.vi.regs[device::vi::VI_X_SCALE_REG as usize], - VI_Y_SCALE_REG: &mut device.vi.regs[device::vi::VI_Y_SCALE_REG as usize], }; unsafe { From 7f6de5119f1654a25d04bae7eab8dab5a6888fc0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 10 Feb 2025 17:02:09 +0100 Subject: [PATCH 0298/1117] use git hash for netplay sync (#234) * use git hash for netplay sync * more --- build.rs | 8 ++++++++ src/ui/gui/gui_netplay.rs | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/build.rs b/build.rs index 807dcd3..08b1e6c 100644 --- a/build.rs +++ b/build.rs @@ -166,4 +166,12 @@ fn main() { println!("cargo:rustc-link-search=native=/usr/local/lib"); println!("cargo:rustc-link-lib=static=MoltenVK"); } + + let git_output = std::process::Command::new("git") + .args(["rev-parse", "HEAD"]) + .output() + .unwrap(); + + let git_hash = String::from_utf8(git_output.stdout).unwrap(); + println!("cargo:rustc-env=GIT_HASH={}", git_hash); } diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index 5534987..13ce59e 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -284,7 +284,7 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { let netplay_message = NetplayMessage { message_type: "request_create_room".to_string(), player_name: Some(app.netplay.player_name.clone()), - client_sha: Some(env!("CARGO_PKG_VERSION").to_string()), + client_sha: Some(env!("GIT_HASH").to_string()), netplay_version: Some(NETPLAY_VERSION), emulator: Some(EMU_NAME.to_string()), accept: None, @@ -449,7 +449,7 @@ pub fn netplay_join(app: &mut GopherEguiApp, ctx: &egui::Context) { let netplay_message = NetplayMessage { message_type: "request_join_room".to_string(), player_name: Some(app.netplay.player_name.clone()), - client_sha: Some(env!("CARGO_PKG_VERSION").to_string()), + client_sha: Some(env!("GIT_HASH").to_string()), netplay_version: None, emulator: None, accept: None, From 6c1f8d0ab031f454f9fbe773b544f8e523d3faf8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 10 Feb 2025 21:00:38 +0100 Subject: [PATCH 0299/1117] Remove fat LTO (#235) --- Cargo.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 6f80d4d..43f8f34 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,5 +37,4 @@ bindgen = "0.71" cc = { version = "1.2", features = ["parallel"] } [profile.release] -lto = true codegen-units = 1 From 22899719876caa82b0609b45dc178eccc969d548 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 11 Feb 2025 15:22:35 +0100 Subject: [PATCH 0300/1117] Savestate support (#236) * add save state support * bind to f5 * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * arm * arm * arm * arm * arm * more * more * more * more * more * more --- .github/workflows/build.yml | 3 - Cargo.lock | 10 ++ Cargo.toml | 1 + build.rs | 12 +-- parallel-rdp/interface.cpp | 54 +++++++--- parallel-rdp/interface.hpp | 11 +- src/device.rs | 88 +++++++++------- src/device/ai.rs | 18 ++-- src/device/cache.rs | 7 +- src/device/cart.rs | 30 +++++- src/device/cart/rom.rs | 42 ++------ src/device/cart/sc64.rs | 69 +++++++----- src/device/cart/sram.rs | 81 +++++++------- src/device/controller.rs | 18 ++-- src/device/controller/vru.rs | 26 +++-- src/device/cop0.rs | 97 ++++++++--------- src/device/cop1.rs | 21 +++- src/device/cop2.rs | 10 +- src/device/cpu.rs | 23 ++-- src/device/events.rs | 70 ++++++------ src/device/exceptions.rs | 3 +- src/device/memory.rs | 14 ++- src/device/mi.rs | 1 + src/device/pi.rs | 7 +- src/device/pif.rs | 31 ++++-- src/device/rdp.rs | 18 +++- src/device/rdram.rs | 1 + src/device/ri.rs | 1 + src/device/rsp_cpu.rs | 177 ++++++++++++++++++++----------- src/device/rsp_interface.rs | 18 ++-- src/device/si.rs | 9 +- src/device/tlb.rs | 4 +- src/device/vi.rs | 23 ++-- src/main.rs | 47 ++++++--- src/netplay.rs | 3 +- src/savestates.rs | 199 +++++++++++++++++++++++++++++++++++ src/ui.rs | 38 ++++--- src/ui/audio.rs | 6 +- src/ui/gui.rs | 73 ++++--------- src/ui/storage.rs | 58 +++++----- src/ui/video.rs | 38 +++++-- 41 files changed, 942 insertions(+), 518 deletions(-) create mode 100644 src/savestates.rs diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f5b426d..7941678 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -82,15 +82,12 @@ jobs: - uses: actions/checkout@v4 with: submodules: recursive - - name: Set up Homebrew - uses: Homebrew/actions/setup-homebrew@master - uses: actions-rust-lang/setup-rust-toolchain@v1 with: target: ${{ matrix.target }} rustflags: "" - name: Build run: | - brew install molten-vk cargo build --release -v --target=${{ matrix.target }} - name: Upload file uses: actions/upload-artifact@v4 diff --git a/Cargo.lock b/Cargo.lock index 8a0f9b4..fb70400 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1501,6 +1501,7 @@ dependencies = [ "rusttype", "sdl3-sys", "serde", + "serde-big-array", "serde_json", "sevenz-rust", "sha2", @@ -3299,6 +3300,15 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-big-array" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11fc7cc2c76d73e0f27ee52abbd64eec84d46f370c88371120433196934e4b7f" +dependencies = [ + "serde", +] + [[package]] name = "serde_derive" version = "1.0.217" diff --git a/Cargo.toml b/Cargo.toml index 43f8f34..9d79162 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,6 +14,7 @@ sevenz-rust = "0.6" chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" +serde-big-array = "0.5" eframe = { version = "0.31", default-features = false, features = ["wayland", "x11", "wgpu"] } sha2 = "0.10" rusttype = "0.9" diff --git a/build.rs b/build.rs index 08b1e6c..43eb5b7 100644 --- a/build.rs +++ b/build.rs @@ -99,6 +99,8 @@ fn main() { .allowlist_function("rdp_set_vi_register") .allowlist_function("rdp_update_screen") .allowlist_function("rdp_process_commands") + .allowlist_function("rdp_check_callback") + .allowlist_function("rdp_new_processor") .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) .generate() .expect("Unable to generate bindings"); @@ -159,14 +161,6 @@ fn main() { simd_build.compile("simd"); } - if os == "macos" { - // Add Homebrew lib path for Apple Silicon Macs - println!("cargo:rustc-link-search=native=/opt/homebrew/lib"); - // Add Homebrew lib path for Intel Macs - println!("cargo:rustc-link-search=native=/usr/local/lib"); - println!("cargo:rustc-link-lib=static=MoltenVK"); - } - let git_output = std::process::Command::new("git") .args(["rev-parse", "HEAD"]) .output() @@ -174,4 +168,6 @@ fn main() { let git_hash = String::from_utf8(git_output.stdout).unwrap(); println!("cargo:rustc-env=GIT_HASH={}", git_hash); + + println!("cargo:rustc-env=N64_STACK_SIZE={}", 8 * 1024 * 1024); } diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 819c4c4..5930ec2 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -60,7 +60,7 @@ static WSI *wsi; static uint32_t cmd_data[0x00040000 >> 2]; static int cmd_cur; static int cmd_ptr; -static bool emu_running; +static CALL_BACK callback; static GFX_INFO gfx_info; static uint32_t region; @@ -135,18 +135,25 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { if (event->type == SDL_EVENT_WINDOW_CLOSE_REQUESTED) { - emu_running = false; + callback.emu_running = false; } - else if (event->type == SDL_EVENT_WINDOW_RESIZED && emu_running) + else if (event->type == SDL_EVENT_WINDOW_RESIZED && callback.emu_running) { wsi_platform->do_resize(); } - else if (event->type == SDL_EVENT_KEY_DOWN && fullscreen) + else if (event->type == SDL_EVENT_KEY_DOWN) { switch (event->key.scancode) { case SDL_SCANCODE_ESCAPE: - emu_running = false; + if (fullscreen) + callback.emu_running = false; + break; + case SDL_SCANCODE_F5: + callback.save_state = true; + break; + case SDL_SCANCODE_F7: + callback.load_state = true; break; default: break; @@ -156,6 +163,22 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) return 0; } +void rdp_new_processor(GFX_INFO _gfx_info, bool _upscale) +{ + gfx_info = _gfx_info; + if (processor) + { + delete processor; + } + RDP::CommandProcessorFlags flags = 0; + if (_upscale) + { + flags |= RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_2X_BIT; + flags |= RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT; + } + processor = new RDP::CommandProcessor(wsi->get_device(), gfx_info.RDRAM, 0, gfx_info.RDRAM_SIZE, gfx_info.RDRAM_SIZE / 2, flags); +} + void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_scaling, bool _fullscreen) { window = (SDL_Window *)_window; @@ -185,13 +208,7 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_sc { rdp_close(); } - RDP::CommandProcessorFlags flags = 0; - if (_upscale) - { - flags |= RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_2X_BIT; - flags |= RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT; - } - processor = new RDP::CommandProcessor(wsi->get_device(), gfx_info.RDRAM, 0, gfx_info.RDRAM_SIZE, gfx_info.RDRAM_SIZE / 2, flags); + rdp_new_processor(gfx_info, _upscale); if (!processor->device_is_supported()) { @@ -202,7 +219,7 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_sc } wsi->begin_frame(); - emu_running = true; + callback.emu_running = true; } void rdp_close() @@ -322,13 +339,20 @@ void rdp_set_vi_register(uint32_t reg, uint32_t value) processor->set_vi_register(RDP::VIRegister(reg), value); } -bool rdp_update_screen() +void rdp_update_screen() { auto &device = wsi->get_device(); render_frame(device); wsi->end_frame(); wsi->begin_frame(); - return emu_running; +} + +CALL_BACK rdp_check_callback() +{ + CALL_BACK return_value = callback; + callback.save_state = false; + callback.load_state = false; + return return_value; } uint64_t rdp_process_commands() diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index ba8832c..7c8a51b 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -18,11 +18,20 @@ extern "C" uint32_t *DPC_STATUS_REG; } GFX_INFO; + typedef struct + { + bool emu_running; + bool save_state; + bool load_state; + } CALL_BACK; + void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_scaling, bool _fullscreen); void rdp_close(); void rdp_set_vi_register(uint32_t reg, uint32_t value); - bool rdp_update_screen(); + void rdp_update_screen(); + CALL_BACK rdp_check_callback(); uint64_t rdp_process_commands(); + void rdp_new_processor(GFX_INFO _gfx_info, bool _upscale); #ifdef __cplusplus } diff --git a/src/device.rs b/src/device.rs index d639059..9f95b35 100644 --- a/src/device.rs +++ b/src/device.rs @@ -10,11 +10,8 @@ include!(concat!(env!("OUT_DIR"), "/simd_bindings.rs")); #[cfg(target_arch = "x86_64")] use std::arch::x86_64::*; -use crate::netplay; -use crate::ui; -use std::collections::HashMap; -use std::fs; -use std::io::Read; +use crate::{netplay, ui}; +use std::{collections::HashMap, fs, io::Read}; pub mod ai; pub mod cache; @@ -45,14 +42,14 @@ pub mod tlb; pub mod unmapped; pub mod vi; -pub fn run_game(rom_contents: Vec, device: &mut Device, fullscreen: bool) { +pub fn run_game(rom_contents: Vec, device: &mut Device) { cart::rom::init(device, rom_contents); // cart needs to come before rdram // rdram pointer is shared with parallel-rdp rdram::init(device); - ui::audio::init(&mut device.ui, 33600); - ui::video::init(device, fullscreen); + ui::audio::init(&mut device.ui, device.ai.freq); + ui::video::init(device); ui::input::init(&mut device.ui); mi::init(device); @@ -61,6 +58,7 @@ pub fn run_game(rom_contents: Vec, device: &mut Device, fullscreen: bool) { controller::vru::init(device); } memory::init(device); + cache::init(device); rsp_interface::init(device); rdp::init(device); vi::init(device); @@ -155,26 +153,34 @@ pub fn get_rom_contents(file_path: &std::path::Path) -> Vec { swap_rom(contents) } +#[derive(serde::Serialize, serde::Deserialize)] pub struct Device { + #[serde(skip)] pub netplay: Option, + #[serde(skip, default = "ui::Ui::default")] pub ui: ui::Ui, byte_swap: usize, + pub save_state: bool, + pub load_state: bool, pub cpu: cpu::Cpu, - pif: pif::Pif, - cart: cart::rom::Cart, - memory: memory::Memory, + pub pif: pif::Pif, + pub cart: cart::Cart, + pub memory: memory::Memory, pub rsp: rsp_interface::Rsp, pub rdp: rdp::Rdp, pub rdram: rdram::Rdram, - mi: mi::Mi, - pi: pi::Pi, - sc64: cart::sc64::Sc64, + pub mi: mi::Mi, + pub pi: pi::Pi, pub vi: vi::Vi, - ai: ai::Ai, - si: si::Si, - ri: ri::Ri, - flashram: cart::sram::Flashram, + pub ai: ai::Ai, + pub si: si::Si, + pub ri: ri::Ri, pub vru: controller::vru::Vru, + pub vru_window: controller::vru::VruWindow, +} + +pub fn zero_m128i() -> __m128i { + unsafe { _mm_setzero_si128() } } impl Device { @@ -190,6 +196,8 @@ impl Device { netplay: None, ui: ui::Ui::new(), byte_swap, + save_state: false, + load_state: false, cpu: cpu::Cpu { cop0: cop0::Cop0 { regs: [0; cop0::COP0_REGS_COUNT as usize], @@ -271,10 +279,9 @@ impl Device { events: [events::Event { enabled: false, count: u64::MAX, - handler: events::dummy_event, - }; events::EventType::Count as usize], + }; events::EVENT_TYPE_COUNT], next_event_count: u64::MAX, - next_event: 0, + next_event: events::EVENT_TYPE_NONE, }, pif: pif::Pif { rom: [0; 1984], @@ -289,15 +296,29 @@ impl Device { change_pak: controller::PakType::None, }; 5], }, - cart: cart::rom::Cart { + cart: cart::Cart { rom: Vec::new(), is_viewer_buffer: [0; 0xFFFF], pal: false, latch: 0, cic_seed: 0, - cic_type: cart::rom::CicType::CicNus6102, + cic_type: cart::CicType::CicNus6102, rdram_size_offset: 0, rtc: cart::AfRtc { control: 0x0200 }, + sc64: cart::sc64::Sc64 { + regs: [0; cart::sc64::SC64_REGS_COUNT as usize], + regs_locked: true, + cfg: [0; cart::sc64::SC64_CFG_COUNT as usize], + sector: 0, + buffer: [0; 8192], + }, + flashram: cart::sram::Flashram { + status: 0, + erase_page: 0, + page_buf: [0xff; 128], + silicon_id: [cart::sram::FLASHRAM_TYPE_ID, cart::sram::MX29L1100_ID], + mode: cart::sram::FlashramMode::ReadArray, + }, }, memory: memory::Memory { fast_read: [unmapped::read_mem; 0x2000], @@ -389,16 +410,10 @@ impl Device { pi: pi::Pi { regs: [0; pi::PI_REGS_COUNT as usize], }, - sc64: cart::sc64::Sc64 { - regs: [0; cart::sc64::SC64_REGS_COUNT as usize], - regs_locked: true, - cfg: [0; cart::sc64::SC64_CFG_COUNT as usize], - sector: 0, - buffer: [0; 8192], - }, ai: ai::Ai { regs: [0; ai::AI_REGS_COUNT as usize], last_read: 0, + freq: 33600, delayed_carry: false, fifo: [ai::AiDma { address: 0, @@ -423,12 +438,10 @@ impl Device { limiter: None, vi_counter: 0, }, - flashram: cart::sram::Flashram { - status: 0, - erase_page: 0, - page_buf: [0xff; 128], - silicon_id: [cart::sram::FLASHRAM_TYPE_ID, cart::sram::MX29L1100_ID], - mode: cart::sram::FlashramMode::ReadArray, + vru_window: controller::vru::VruWindow { + window_notifier: None, + word_receiver: None, + gui_ctx: None, }, vru: controller::vru::Vru { status: 0, @@ -439,9 +452,6 @@ impl Device { words: Vec::new(), talking: false, word_mappings: HashMap::new(), - window_notifier: None, - word_receiver: None, - gui_ctx: None, }, } } diff --git a/src/device/ai.rs b/src/device/ai.rs index 8cc0607..58c44f3 100644 --- a/src/device/ai.rs +++ b/src/device/ai.rs @@ -1,5 +1,4 @@ -use crate::device; -use crate::ui; +use crate::{device, ui}; const AI_DRAM_ADDR_REG: u32 = 0; const AI_LEN_REG: u32 = 1; @@ -12,14 +11,16 @@ pub const AI_REGS_COUNT: u32 = 6; const AI_STATUS_BUSY: u32 = 0x40000000; const AI_STATUS_FULL: u32 = 0x80000000; +#[derive(serde::Serialize, serde::Deserialize)] pub struct Ai { pub regs: [u32; AI_REGS_COUNT as usize], pub fifo: [AiDma; 2], pub last_read: u64, pub delayed_carry: bool, + pub freq: u64, } -#[derive(Copy, Clone)] +#[derive(Copy, Clone, serde::Serialize, serde::Deserialize)] pub struct AiDma { pub address: u64, pub length: u64, @@ -31,7 +32,7 @@ fn get_remaining_dma_length(device: &mut device::Device) -> u64 { return 0; } - let next_ai_event = device::events::get_event(device, device::events::EventType::AI); + let next_ai_event = device::events::get_event(device, device::events::EVENT_TYPE_AI); if next_ai_event.is_none() { return 0; } @@ -64,9 +65,8 @@ fn do_dma(device: &mut device::Device) { /* schedule end of dma event */ device::events::create_event( device, - device::events::EventType::AI, + device::events::EVENT_TYPE_AI, device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + device.ai.fifo[0].duration, - dma_event, ); device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_AI); } @@ -145,9 +145,9 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u AI_STATUS_REG => device::mi::clear_rcp_interrupt(device, device::mi::MI_INTR_AI), AI_DACRATE_REG => { if device.ai.regs[reg as usize] != value & mask { - let frequency = device.vi.clock / (1 + (value & mask)) as u64; + device.ai.freq = device.vi.clock / (1 + (value & mask)) as u64; ui::audio::close(&mut device.ui); - ui::audio::init(&mut device.ui, frequency) + ui::audio::init(&mut device.ui, device.ai.freq) } device::memory::masked_write_32(&mut device.ai.regs[reg as usize], value, mask) } @@ -155,7 +155,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } } -fn dma_event(device: &mut device::Device) { +pub fn dma_event(device: &mut device::Device) { if device.ai.last_read != 0 { let diff = device.ai.fifo[0].length - device.ai.last_read; ui::audio::play_audio( diff --git a/src/device/cache.rs b/src/device/cache.rs index 1b2e1da..c89b17f 100644 --- a/src/device/cache.rs +++ b/src/device/cache.rs @@ -1,15 +1,16 @@ -use crate::device; +use crate::{device, savestates}; -#[derive(Copy, Clone)] +#[derive(Copy, Clone, serde::Serialize, serde::Deserialize)] pub struct ICache { pub valid: bool, pub tag: u32, pub index: u16, pub words: [u32; 8], + #[serde(skip, default = "savestates::default_instructions")] pub instruction: [fn(&mut device::Device, u32); 8], } -#[derive(Copy, Clone)] +#[derive(Copy, Clone, serde::Serialize, serde::Deserialize)] pub struct DCache { pub valid: bool, pub dirty: bool, diff --git a/src/device/cart.rs b/src/device/cart.rs index f004899..55d1e32 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -1,8 +1,7 @@ use chrono::Datelike; use chrono::Timelike; -use crate::device; -use crate::ui; +use crate::{device, ui}; pub mod rom; pub mod sc64; @@ -22,6 +21,17 @@ const JDT_EEPROM_16K: u16 = 0xc000; /* 16k EEPROM */ const EEPROM_BLOCK_SIZE: usize = 8; pub const EEPROM_MAX_SIZE: usize = 0x800; +#[derive(serde::Serialize, serde::Deserialize)] +pub enum CicType { + CicNus6101, + CicNus6102, + CicNus6103, + CicNus6105, + CicNus6106, + CicNus5167, +} + +#[derive(serde::Serialize, serde::Deserialize)] pub struct AfRtc { pub control: u16, } @@ -31,6 +41,22 @@ fn byte2bcd(mut n: u32) -> u8 { (((n / 10) << 4) | (n % 10)) as u8 } +#[derive(serde::Serialize, serde::Deserialize)] +pub struct Cart { + #[serde(skip)] + pub rom: Vec, + #[serde(with = "serde_big_array::BigArray")] + pub is_viewer_buffer: [u8; 0xFFFF], + pub pal: bool, + pub latch: u32, + pub cic_type: CicType, + pub cic_seed: u8, + pub rdram_size_offset: usize, + pub rtc: AfRtc, + pub sc64: sc64::Sc64, + pub flashram: sram::Flashram, +} + pub fn process(device: &mut device::Device, channel: usize) { let cmd = device.pif.ram[device.pif.channels[channel].tx_buf.unwrap()]; diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index be261c6..be5ef93 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -1,26 +1,7 @@ use crate::device; use sha2::{Digest, Sha256}; -pub enum CicType { - CicNus6101, - CicNus6102, - CicNus6103, - CicNus6105, - CicNus6106, - CicNus5167, -} - const CART_MASK: usize = 0xFFFFFFF; -pub struct Cart { - pub rom: Vec, - pub is_viewer_buffer: [u8; 0xFFFF], - pub pal: bool, - pub latch: u32, - pub cic_type: CicType, - pub cic_seed: u8, - pub rdram_size_offset: usize, - pub rtc: device::cart::AfRtc, -} pub fn read_mem_fast( device: &mut device::Device, @@ -57,7 +38,7 @@ pub fn read_mem( } pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { - if device.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] != 0 { + if device.cart.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] != 0 { let masked_address = address as usize & CART_MASK; let mut data = u32::from_be_bytes( device.cart.rom[masked_address..masked_address + 4] @@ -82,9 +63,8 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 let cycles = device::pi::calculate_cycles(device, 1, 4); device::events::create_event( device, - device::events::EventType::PI, + device::events::EVENT_TYPE_PI, device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + cycles, - device::pi::dma_event, ); } @@ -94,7 +74,7 @@ pub fn dma_read( mut dram_addr: u32, length: u32, ) -> u64 { - if device.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] != 0 { + if device.cart.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] != 0 { dram_addr &= device::rdram::RDRAM_MASK as u32; cart_addr &= CART_MASK as u32; @@ -177,38 +157,38 @@ fn set_cic(device: &mut device::Device) { let hash = calculate_hash(&device.cart.rom[0x40..0x1000]); match hash.as_str() { "B99F06C4802C2377E31E388435955EF3E99C618A6D55D24699D828EB1075F1EB" => { - device.cart.cic_type = CicType::CicNus6101; + device.cart.cic_type = device::cart::CicType::CicNus6101; device.cart.cic_seed = 0x3F; device.cart.rdram_size_offset = 0x318; } "61E88238552C356C23D19409FE5570EE6910419586BC6FC740F638F761ADC46E" => { - device.cart.cic_type = CicType::CicNus6102; + device.cart.cic_type = device::cart::CicType::CicNus6102; device.cart.cic_seed = 0x3F; device.cart.rdram_size_offset = 0x318; } "BF3620D30817007091EBE9BDDD1B88C23B8A0052170B3309CDE5B6B4238E45E7" => { - device.cart.cic_type = CicType::CicNus6103; + device.cart.cic_type = device::cart::CicType::CicNus6103; device.cart.cic_seed = 0x78; device.cart.rdram_size_offset = 0x318; } "04B7BC6717A9F0EB724CF927E74AD3876C381CBB280D841736FC5E55580B756B" => { - device.cart.cic_type = CicType::CicNus6105; + device.cart.cic_type = device::cart::CicType::CicNus6105; device.cart.cic_seed = 0x91; device.cart.rdram_size_offset = 0x3F0; } "36ADC40148AF56F0D78CD505EB6A90117D1FD6F11C6309E52ED36BC4C6BA340E" => { - device.cart.cic_type = CicType::CicNus6106; + device.cart.cic_type = device::cart::CicType::CicNus6106; device.cart.cic_seed = 0x85; device.cart.rdram_size_offset = 0x318; } "53C0088FB777870D0AF32F0251E964030E2E8B72E830C26042FD191169508C05" => { - device.cart.cic_type = CicType::CicNus5167; + device.cart.cic_type = device::cart::CicType::CicNus5167; device.cart.cic_seed = 0xdd; device.cart.rdram_size_offset = 0x318; - device.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] = 1; + device.cart.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] = 1; } _ => { - device.cart.cic_type = CicType::CicNus6102; + device.cart.cic_type = device::cart::CicType::CicNus6102; device.cart.cic_seed = 0x3F; device.cart.rdram_size_offset = 0x318; println!("unknown IPL3 {}", hash) diff --git a/src/device/cart/sc64.rs b/src/device/cart/sc64.rs index 8adb1cf..b035750 100644 --- a/src/device/cart/sc64.rs +++ b/src/device/cart/sc64.rs @@ -16,7 +16,9 @@ pub const SC64_CFG_COUNT: u32 = 15; const SC64_BUFFER_MASK: usize = 0x1FFF; +#[derive(serde::Serialize, serde::Deserialize)] pub struct Sc64 { + #[serde(with = "serde_big_array::BigArray")] pub buffer: [u8; 8192], pub regs: [u32; SC64_REGS_COUNT as usize], pub regs_locked: bool, @@ -38,12 +40,12 @@ pub fn read_regs( _access_size: device::memory::AccessSize, ) -> u32 { device::cop0::add_cycles(device, 20); - if device.sc64.regs_locked { + if device.cart.sc64.regs_locked { return 0; } let reg = (address & 0xFFFF) >> 2; match reg as u32 { - SC64_SCR_REG | SC64_DATA0_REG | SC64_DATA1_REG => device.sc64.regs[reg as usize], + SC64_SCR_REG | SC64_DATA0_REG | SC64_DATA1_REG => device.cart.sc64.regs[reg as usize], SC64_IDENTIFIER_REG => 0x53437632, _ => panic!("unknown read reg {} address {:#x}", reg, address), } @@ -53,37 +55,41 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u let reg = (address & 0xFFFF) >> 2; match reg as u32 { SC64_KEY_REG => { - device::memory::masked_write_32(&mut device.sc64.regs[reg as usize], value, mask); - if device.sc64.regs[SC64_KEY_REG as usize] == 0x4F434B5F { - device.sc64.regs_locked = false; - } else if device.sc64.regs[SC64_KEY_REG as usize] == 0xFFFFFFFF { - device.sc64.regs_locked = true; + device::memory::masked_write_32(&mut device.cart.sc64.regs[reg as usize], value, mask); + if device.cart.sc64.regs[SC64_KEY_REG as usize] == 0x4F434B5F { + device.cart.sc64.regs_locked = false; + } else if device.cart.sc64.regs[SC64_KEY_REG as usize] == 0xFFFFFFFF { + device.cart.sc64.regs_locked = true; } } SC64_DATA0_REG | SC64_DATA1_REG => { - if !device.sc64.regs_locked { - device::memory::masked_write_32(&mut device.sc64.regs[reg as usize], value, mask); + if !device.cart.sc64.regs_locked { + device::memory::masked_write_32( + &mut device.cart.sc64.regs[reg as usize], + value, + mask, + ); } } SC64_SCR_REG => { - if !device.sc64.regs_locked { + if !device.cart.sc64.regs_locked { match char::from_u32(value & mask).unwrap() { 'c' => { // get config - device.sc64.regs[SC64_DATA1_REG as usize] = - device.sc64.cfg[device.sc64.regs[SC64_DATA0_REG as usize] as usize] + device.cart.sc64.regs[SC64_DATA1_REG as usize] = device.cart.sc64.cfg + [device.cart.sc64.regs[SC64_DATA0_REG as usize] as usize] } 'C' => { // set config std::mem::swap( - &mut device.sc64.cfg - [device.sc64.regs[SC64_DATA0_REG as usize] as usize], - &mut device.sc64.regs[SC64_DATA1_REG as usize], + &mut device.cart.sc64.cfg + [device.cart.sc64.regs[SC64_DATA0_REG as usize] as usize], + &mut device.cart.sc64.regs[SC64_DATA1_REG as usize], ); } 'i' => { // sd card operation - match device.sc64.regs[SC64_DATA1_REG as usize] { + match device.cart.sc64.regs[SC64_DATA1_REG as usize] { 0 => { //Init SD card } 1 => { //Deinit SD card @@ -91,21 +97,23 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u _ => { panic!( "unknown sc64 sd card operation: {}", - device.sc64.regs[SC64_DATA1_REG as usize] + device.cart.sc64.regs[SC64_DATA1_REG as usize] ) } } } 'I' => { // set sd sector - device.sc64.sector = device.sc64.regs[SC64_DATA0_REG as usize]; + device.cart.sc64.sector = device.cart.sc64.regs[SC64_DATA0_REG as usize]; } 's' => { format_sdcard(device); // read sd card - let address = device.sc64.regs[SC64_DATA0_REG as usize] as u64 & 0x1FFFFFFF; - let offset = (device.sc64.sector * 512) as usize; - let length = (device.sc64.regs[SC64_DATA1_REG as usize] * 512) as usize; + let address = + device.cart.sc64.regs[SC64_DATA0_REG as usize] as u64 & 0x1FFFFFFF; + let offset = (device.cart.sc64.sector * 512) as usize; + let length = + (device.cart.sc64.regs[SC64_DATA1_REG as usize] * 512) as usize; let mut i = 0; while i < length { @@ -132,9 +140,11 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u 'S' => { format_sdcard(device); // write sd card - let address = device.sc64.regs[SC64_DATA0_REG as usize] as u64 & 0x1FFFFFFF; - let offset = (device.sc64.sector * 512) as usize; - let length = (device.sc64.regs[SC64_DATA1_REG as usize] * 512) as usize; + let address = + device.cart.sc64.regs[SC64_DATA0_REG as usize] as u64 & 0x1FFFFFFF; + let offset = (device.cart.sc64.sector * 512) as usize; + let length = + (device.cart.sc64.regs[SC64_DATA1_REG as usize] * 512) as usize; let mut i = 0; while i < length { @@ -182,7 +192,7 @@ pub fn read_mem( ) -> u32 { let masked_address = address as usize & SC64_BUFFER_MASK; u32::from_be_bytes( - device.sc64.buffer[masked_address..masked_address + 4] + device.cart.sc64.buffer[masked_address..masked_address + 4] .try_into() .unwrap(), ) @@ -191,12 +201,13 @@ pub fn read_mem( pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { let masked_address = address as usize & SC64_BUFFER_MASK; let mut data = u32::from_be_bytes( - device.sc64.buffer[masked_address..masked_address + 4] + device.cart.sc64.buffer[masked_address..masked_address + 4] .try_into() .unwrap(), ); device::memory::masked_write_32(&mut data, value, mask); - device.sc64.buffer[masked_address..masked_address + 4].copy_from_slice(&data.to_be_bytes()); + device.cart.sc64.buffer[masked_address..masked_address + 4] + .copy_from_slice(&data.to_be_bytes()); } pub fn dma_read( @@ -211,7 +222,7 @@ pub fn dma_read( let mut j = cart_addr; while i < dram_addr + length && i < device.rdram.size { - device.sc64.buffer[j as usize] = device.rdram.mem[i as usize ^ device.byte_swap]; + device.cart.sc64.buffer[j as usize] = device.rdram.mem[i as usize ^ device.byte_swap]; i += 1; j += 1; } @@ -231,7 +242,7 @@ pub fn dma_write( let mut j = cart_addr; while i < dram_addr + length && i < device.rdram.size { - device.rdram.mem[i as usize ^ device.byte_swap] = device.sc64.buffer[j as usize]; + device.rdram.mem[i as usize ^ device.byte_swap] = device.cart.sc64.buffer[j as usize]; i += 1; j += 1; } diff --git a/src/device/cart/sram.rs b/src/device/cart/sram.rs index e54589a..67d7146 100644 --- a/src/device/cart/sram.rs +++ b/src/device/cart/sram.rs @@ -1,5 +1,4 @@ -use crate::device; -use crate::ui; +use crate::{device, ui}; const SRAM_MASK: usize = 0xFFFF; pub const SRAM_SIZE: usize = 0x8000; @@ -9,7 +8,7 @@ pub const MX29L1100_ID: u32 = 0x00c2001e; const MX29L0000_ID: u32 = 0x00c20000; const MX29L0001_ID: u32 = 0x00c20001; -#[derive(PartialEq)] +#[derive(PartialEq, serde::Serialize, serde::Deserialize)] pub enum FlashramMode { ReadArray, ReadSiliconId, @@ -19,10 +18,12 @@ pub enum FlashramMode { PageProgram, } +#[derive(serde::Serialize, serde::Deserialize)] pub struct Flashram { pub status: u32, pub mode: FlashramMode, pub erase_page: u16, + #[serde(with = "serde_big_array::BigArray")] pub page_buf: [u8; 128], pub silicon_id: [u32; 2], } @@ -52,10 +53,11 @@ fn read_mem_sram(device: &mut device::Device, address: u64) -> u32 { } fn read_mem_flash(device: &device::Device, address: u64) -> u32 { - if (address & 0x1ffff) == 0x00000 && device.flashram.mode == FlashramMode::Status { + if (address & 0x1ffff) == 0x00000 && device.cart.flashram.mode == FlashramMode::Status { /* read Status register */ - device.flashram.status - } else if (address & 0x1ffff) == 0x0000 && device.flashram.mode == FlashramMode::ReadArray { + device.cart.flashram.status + } else if (address & 0x1ffff) == 0x0000 && device.cart.flashram.mode == FlashramMode::ReadArray + { /* flashram MMIO read are not supported except for the "dummy" read @0x0000 done before DMA. * returns a "dummy" value. */ return 0; @@ -97,9 +99,9 @@ fn write_mem_sram(device: &mut device::Device, address: u64, value: u32, mask: u } fn write_mem_flash(device: &mut device::Device, address: u64, value: u32, mask: u32) { - if (address & 0x1ffff) == 0x00000 && device.flashram.mode == FlashramMode::Status { + if (address & 0x1ffff) == 0x00000 && device.cart.flashram.mode == FlashramMode::Status { /* clear/set Status register */ - device.flashram.status = (value & mask) & 0xff; + device.cart.flashram.status = (value & mask) & 0xff; } else if (address & 0x1ffff) == 0x10000 { /* set command */ format_flash(device); @@ -122,9 +124,8 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 let cycles = device::pi::calculate_cycles(device, 2, 4); device::events::create_event( device, - device::events::EventType::PI, + device::events::EVENT_TYPE_PI, device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + cycles, - device::pi::dma_event, ); } @@ -150,11 +151,11 @@ fn dma_read_flash(device: &mut device::Device, cart_addr: u32, dram_addr: u32, l if (cart_addr & 0x1ffff) == 0x00000 && length == 128 - && device.flashram.mode == FlashramMode::PageProgram + && device.cart.flashram.mode == FlashramMode::PageProgram { /* load page buf using DMA */ for i in 0..length { - device.flashram.page_buf[i as usize] = + device.cart.flashram.page_buf[i as usize] = device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap]; } } else { @@ -203,20 +204,22 @@ fn dma_write_flash( if (cart_addr & 0x1ffff) == 0x00000 && length == 8 - && device.flashram.mode == FlashramMode::ReadSiliconId + && device.cart.flashram.mode == FlashramMode::ReadSiliconId { /* read Silicon ID using DMA */ device.rdram.mem[dram_addr as usize..dram_addr as usize + 4] - .copy_from_slice(&device.flashram.silicon_id[0].to_ne_bytes()); + .copy_from_slice(&device.cart.flashram.silicon_id[0].to_ne_bytes()); dram_addr += 4; device.rdram.mem[dram_addr as usize..dram_addr as usize + 4] - .copy_from_slice(&device.flashram.silicon_id[1].to_ne_bytes()); - } else if (cart_addr & 0x1ffff) < 0x10000 && device.flashram.mode == FlashramMode::ReadArray { + .copy_from_slice(&device.cart.flashram.silicon_id[1].to_ne_bytes()); + } else if (cart_addr & 0x1ffff) < 0x10000 + && device.cart.flashram.mode == FlashramMode::ReadArray + { format_flash(device); /* adjust flashram address before starting DMA. */ - if device.flashram.silicon_id[1] == MX29L1100_ID - || device.flashram.silicon_id[1] == MX29L0000_ID - || device.flashram.silicon_id[1] == MX29L0001_ID + if device.cart.flashram.silicon_id[1] == MX29L1100_ID + || device.cart.flashram.silicon_id[1] == MX29L0000_ID + || device.cart.flashram.silicon_id[1] == MX29L0001_ID { /* "old" flash needs special address adjusting */ cart_addr = (cart_addr & 0xffff) * 2; @@ -250,27 +253,27 @@ fn flashram_command(device: &mut device::Device, command: u32) { match command & 0xff000000 { 0x3c000000 => { /* set chip erase mode */ - device.flashram.mode = FlashramMode::ChipErase; + device.cart.flashram.mode = FlashramMode::ChipErase; } 0x4b000000 => { /* set sector erase mode, set erase sector */ - device.flashram.mode = FlashramMode::SectorErase; - device.flashram.erase_page = command as u16; + device.cart.flashram.mode = FlashramMode::SectorErase; + device.cart.flashram.erase_page = command as u16; } 0x78000000 => { /* set erase busy flag */ - device.flashram.status |= 0x02; + device.cart.flashram.status |= 0x02; /* do chip/sector erase */ - if device.flashram.mode == FlashramMode::SectorErase { - let offset: usize = (device.flashram.erase_page & 0xff80) as usize * 128; + if device.cart.flashram.mode == FlashramMode::SectorErase { + let offset: usize = (device.cart.flashram.erase_page & 0xff80) as usize * 128; for i in 0..128 * 128 { device.ui.saves.flash.0[offset + i] = 0xFF; } device.ui.saves.flash.1 = true - } else if device.flashram.mode == FlashramMode::ChipErase { + } else if device.cart.flashram.mode == FlashramMode::ChipErase { for i in 0..FLASHRAM_SIZE { device.ui.saves.flash.0[i] = 0xFF; } @@ -280,47 +283,47 @@ fn flashram_command(device: &mut device::Device, command: u32) { } /* clear erase busy flag, set erase success flag, transition to status mode */ - device.flashram.status &= !0x02; - device.flashram.status |= 0x08; - device.flashram.mode = FlashramMode::Status; + device.cart.flashram.status &= !0x02; + device.cart.flashram.status |= 0x08; + device.cart.flashram.mode = FlashramMode::Status; } 0xa5000000 => { /* set program busy flag */ - device.flashram.status |= 0x01; + device.cart.flashram.status |= 0x01; /* program selected page */ let offset: usize = (command & 0xffff) as usize * 128; for i in 0..128 { - device.ui.saves.flash.0[offset + i] = device.flashram.page_buf[i]; + device.ui.saves.flash.0[offset + i] = device.cart.flashram.page_buf[i]; } device.ui.saves.flash.1 = true; /* clear program busy flag, set program success flag, transition to status mode */ - device.flashram.status &= !0x01; - device.flashram.status |= 0x04; - device.flashram.mode = FlashramMode::Status; + device.cart.flashram.status &= !0x01; + device.cart.flashram.status |= 0x04; + device.cart.flashram.mode = FlashramMode::Status; } 0xb4000000 => { /* set page program mode */ - device.flashram.mode = FlashramMode::PageProgram; + device.cart.flashram.mode = FlashramMode::PageProgram; } 0xd2000000 => { /* set status mode */ - device.flashram.mode = FlashramMode::Status; + device.cart.flashram.mode = FlashramMode::Status; } 0xe1000000 => { /* set silicon_id mode */ - device.flashram.mode = FlashramMode::ReadSiliconId; - device.flashram.status |= 0x01; /* Needed for Pokemon Puzzle League */ + device.cart.flashram.mode = FlashramMode::ReadSiliconId; + device.cart.flashram.status |= 0x01; /* Needed for Pokemon Puzzle League */ } 0xf0000000 => { /* set read mode */ - device.flashram.mode = FlashramMode::ReadArray; + device.cart.flashram.mode = FlashramMode::ReadArray; } _ => { diff --git a/src/device/controller.rs b/src/device/controller.rs index 7bb2b22..6cf5b5f 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -1,6 +1,4 @@ -use crate::device; -use crate::netplay; -use crate::ui; +use crate::{device, netplay, savestates, ui}; pub mod mempak; pub mod rumble; @@ -21,16 +19,18 @@ const CONT_STATUS_PAK_PRESENT: u8 = 1; const CONT_STATUS_PAK_NOT_PRESENT: u8 = 2; const CONT_FLAVOR: u16 = JDT_JOY_ABS_COUNTERS | JDT_JOY_PORT; -#[derive(Copy, Clone, PartialEq)] +#[derive(Copy, Clone, PartialEq, serde::Serialize, serde::Deserialize)] pub enum PakType { None = 0, MemPak = 1, RumblePak = 2, } -#[derive(Copy, Clone)] +#[derive(Copy, Clone, serde::Serialize, serde::Deserialize)] pub struct PakHandler { + #[serde(skip, default = "savestates::default_pak_handler")] pub read: fn(&mut device::Device, usize, u16, usize, usize), + #[serde(skip, default = "savestates::default_pak_handler")] pub write: fn(&mut device::Device, usize, u16, usize, usize), pub pak_type: PakType, } @@ -67,17 +67,15 @@ pub fn process(device: &mut device::Device, channel: usize) { device.pif.ram[offset..offset + 4].copy_from_slice(&input.0.to_ne_bytes()); if input.1 { // pak change button pressed - if device::events::get_event(device, device::events::EventType::PakSwitch).is_none() - { + if device::events::get_event(device, device::events::EVENT_TYPE_PAK).is_none() { device.pif.channels[channel].change_pak = device.pif.channels[channel].pak_handler.unwrap().pak_type; device.pif.channels[channel].pak_handler = None; device::events::create_event( device, - device::events::EventType::PakSwitch, + device::events::EVENT_TYPE_PAK, device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + (device.cpu.clock_rate), // 1 second - pak_switch_event, ) } } @@ -158,7 +156,7 @@ fn data_crc(device: &device::Device, data_offset: usize, size: usize) -> u8 { crc } -fn pak_switch_event(device: &mut device::Device) { +pub fn pak_switch_event(device: &mut device::Device) { for (i, channel) in device.pif.channels.iter_mut().enumerate() { if channel.change_pak != PakType::None { if channel.change_pak == PakType::RumblePak { diff --git a/src/device/controller/vru.rs b/src/device/controller/vru.rs index a197f38..b82d434 100644 --- a/src/device/controller/vru.rs +++ b/src/device/controller/vru.rs @@ -17,17 +17,26 @@ const VOICE_STATUS_BUSY: u8 = 0x05; const JDT_VRU: u16 = 0x0100; /* VRU */ const CONT_FLAVOR: u16 = JDT_VRU; +#[derive(serde::Serialize, serde::Deserialize)] pub struct Vru { pub status: u8, pub voice_state: u8, pub load_offset: u8, pub voice_init: u8, + #[serde(with = "serde_big_array::BigArray")] pub word_buffer: [u16; 40], pub words: Vec, pub talking: bool, pub word_mappings: HashMap, +} + +#[derive(serde::Serialize, serde::Deserialize)] +pub struct VruWindow { + #[serde(skip)] pub window_notifier: Option>>, + #[serde(skip)] pub word_receiver: Option>, + #[serde(skip)] pub gui_ctx: Option, } @@ -160,14 +169,13 @@ pub fn process(device: &mut device::Device, channel: usize) { device.vru.voice_init = 2; device::events::create_event( device, - device::events::EventType::Vru, + device::events::EVENT_TYPE_VRU, device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + (device.cpu.clock_rate * 2), // 2 seconds - vru_talking_event, ) } else if device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] == 0xEF { device.vru.talking = false; - device::events::remove_event(device, device::events::EventType::Vru); + device::events::remove_event(device, device::events::EVENT_TYPE_VRU); } else if device.pif.ram[device.pif.channels[channel].tx_buf.unwrap() + 3] == 0x2 { device.vru.voice_init = 0; device.vru.words.clear(); @@ -178,17 +186,17 @@ pub fn process(device: &mut device::Device, channel: usize) { let offset = device.pif.channels[channel].tx_buf.unwrap() + 1; if u16::from_ne_bytes(device.pif.ram[offset..offset + 2].try_into().unwrap()) == 0 { device.vru.talking = false; - device::events::remove_event(device, device::events::EventType::Vru); + device::events::remove_event(device, device::events::EVENT_TYPE_VRU); } device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] = 0; } JCMD_VRU_READ => { - let index = if device.vru.window_notifier.is_some() { + let index = if device.vru_window.window_notifier.is_some() { ui::vru::prompt_for_match( &device.vru.words, - device.vru.window_notifier.as_ref().unwrap(), - device.vru.word_receiver.as_mut().unwrap(), - device.vru.gui_ctx.as_ref().unwrap(), + device.vru_window.window_notifier.as_ref().unwrap(), + device.vru_window.word_receiver.as_mut().unwrap(), + device.vru_window.gui_ctx.as_ref().unwrap(), ) } else { 0x7FFF @@ -250,7 +258,7 @@ pub fn process(device: &mut device::Device, channel: usize) { } } -fn vru_talking_event(device: &mut device::Device) { +pub fn vru_talking_event(device: &mut device::Device) { device.vru.talking = false } diff --git a/src/device/cop0.rs b/src/device/cop0.rs index 36820f5..280b590 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -1,4 +1,4 @@ -use crate::device; +use crate::{device, savestates}; pub const COP0_INDEX_REG: u32 = 0; const COP0_RANDOM_REG: u32 = 1; @@ -88,11 +88,14 @@ const COP0_XCONTEXT_REG_MASK: u64 = const COP0_PARITYERR_REG_MASK: u64 = 0b00000000000000000000000011111111; const COP0_TAGLO_REG_MASK: u64 = 0b00001111111111111111111111000000; +#[derive(serde::Serialize, serde::Deserialize)] pub struct Cop0 { pub reg_latch: u64, pub regs: [u64; COP0_REGS_COUNT as usize], pub reg_write_masks: [u64; COP0_REGS_COUNT as usize], + #[serde(skip, default = "savestates::default_instructions")] pub instrs: [fn(&mut device::Device, u32); 32], + #[serde(skip, default = "savestates::default_instructions")] pub instrs2: [fn(&mut device::Device, u32); 32], pub tlb_lut_r: Vec, pub tlb_lut_w: Vec, @@ -211,9 +214,8 @@ fn set_control_registers(device: &mut device::Device, index: u32, mut data: u64) device::events::create_event( device, - device::events::EventType::Compare, + device::events::EVENT_TYPE_COMPARE, device.cpu.cop0.regs[COP0_COUNT_REG as usize] + ((compare_event_diff as u64) << 1), - compare_event, ); device.cpu.cop0.regs[COP0_CAUSE_REG as usize] &= !COP0_CAUSE_IP7; device.cpu.cop0.pending_compare_interrupt = false; @@ -233,13 +235,12 @@ fn set_control_registers(device: &mut device::Device, index: u32, mut data: u64) device::exceptions::check_pending_interrupts(device); } -fn compare_event(device: &mut device::Device) { +pub fn compare_event(device: &mut device::Device) { device.cpu.cop0.pending_compare_interrupt = true; device::events::create_event( device, - device::events::EventType::Compare, + device::events::EVENT_TYPE_COMPARE, device.cpu.next_event_count + (u32::MAX as u64), - compare_event, ); device::exceptions::check_pending_interrupts(device); } @@ -258,42 +259,7 @@ pub fn add_cycles(device: &mut device::Device, cycles: u64) { device.cpu.cop0.regs[COP0_COUNT_REG as usize] += cycles // COUNT_REG is shifted right 1 bit when read by MFC0 } -pub fn init(device: &mut device::Device) { - device.cpu.cop0.reg_write_masks = [ - COP0_INDEX_REG_MASK, - 0, // Random, read only - COP0_ENTRYLO_REG_MASK, - COP0_ENTRYLO_REG_MASK, - COP0_CONTEXT_REG_MASK, - COP0_PAGEMASK_REG_MASK, - COP0_WIRED_REG_MASK, - 0, // 7 - 0, // BadVAddr, read only - u32::MAX as u64, // count - COP0_ENTRYHI_REG_MASK, - u32::MAX as u64, // compare - COP0_STATUS_REG_MASK, - COP0_CAUSE_REG_MASK, - u64::MAX, // EPC - 0, // previd, read only - COP0_CONFIG_REG_MASK, - COP0_LLADDR_REG_MASK, - COP0_WATCHLO_REG_MASK, - COP0_WATCHHI_REG_MASK, - COP0_XCONTEXT_REG_MASK, - 0, // 21 - 0, // 22 - 0, // 23 - 0, // 24 - 0, // 25 - COP0_PARITYERR_REG_MASK, - 0, // cache error - COP0_TAGLO_REG_MASK, - 0, // taghi - u64::MAX, // ErrorPC - 0, // 31 - ]; - +pub fn map_instructions(device: &mut device::Device) { device.cpu.cop0.instrs = [ device::cop0::mfc0, // 0 device::cop0::dmfc0, // 1 @@ -363,6 +329,46 @@ pub fn init(device: &mut device::Device) { device::cop0::reserved, // 30 device::cop0::reserved, // 31 ]; +} + +pub fn init(device: &mut device::Device) { + device.cpu.cop0.reg_write_masks = [ + COP0_INDEX_REG_MASK, + 0, // Random, read only + COP0_ENTRYLO_REG_MASK, + COP0_ENTRYLO_REG_MASK, + COP0_CONTEXT_REG_MASK, + COP0_PAGEMASK_REG_MASK, + COP0_WIRED_REG_MASK, + 0, // 7 + 0, // BadVAddr, read only + u32::MAX as u64, // count + COP0_ENTRYHI_REG_MASK, + u32::MAX as u64, // compare + COP0_STATUS_REG_MASK, + COP0_CAUSE_REG_MASK, + u64::MAX, // EPC + 0, // previd, read only + COP0_CONFIG_REG_MASK, + COP0_LLADDR_REG_MASK, + COP0_WATCHLO_REG_MASK, + COP0_WATCHHI_REG_MASK, + COP0_XCONTEXT_REG_MASK, + 0, // 21 + 0, // 22 + 0, // 23 + 0, // 24 + 0, // 25 + COP0_PARITYERR_REG_MASK, + 0, // cache error + COP0_TAGLO_REG_MASK, + 0, // taghi + u64::MAX, // ErrorPC + 0, // 31 + ]; + + map_instructions(device); + // taken from VR4300 manual device.cpu.cop0.regs[COP0_RANDOM_REG as usize] = 0b00000000000000000000000000011111; device.cpu.cop0.regs[COP0_CONFIG_REG as usize] = 0b01110000000001101110010001100000; @@ -373,10 +379,5 @@ pub fn init(device: &mut device::Device) { device.cpu.cop0.regs[COP0_BADVADDR_REG as usize] = 0xFFFFFFFF; device.cpu.cop0.regs[COP0_CONTEXT_REG as usize] = 0x7FFFF0; - device::events::create_event( - device, - device::events::EventType::Compare, - u32::MAX as u64, - compare_event, - ) + device::events::create_event(device, device::events::EVENT_TYPE_COMPARE, u32::MAX as u64) } diff --git a/src/device/cop1.rs b/src/device/cop1.rs index 8a4ee8a..01f53d2 100644 --- a/src/device/cop1.rs +++ b/src/device/cop1.rs @@ -1,4 +1,4 @@ -use crate::device; +use crate::{device, savestates}; //const FCR31_FLAG_INEXACT_BIT: u32 = 1 << 2; //const FCR31_FLAG_UNDERFLOW_BIT: u32 = 1 << 3; @@ -24,6 +24,7 @@ const FCR31_CAUSE_MASK: u32 = 0b00000000000000111111000000000000; const FCR31_ENABLE_MASK: u32 = 0b00000000000000000000111110000000; const FCR31_WRITE_MASK: u32 = 0b00000001100000111111111111111111; +#[derive(serde::Serialize, serde::Deserialize)] pub struct Cop1 { pub fcr0: u32, pub fcr31: u32, @@ -31,11 +32,17 @@ pub struct Cop1 { //pub flush_mode: u32, pub fgr32: [[u8; 4]; 32], pub fgr64: [[u8; 8]; 32], + #[serde(skip, default = "savestates::default_instructions")] pub instrs: [fn(&mut device::Device, u32); 32], + #[serde(skip, default = "savestates::default_instructions")] pub b_instrs: [fn(&mut device::Device, u32); 4], + #[serde(skip, default = "savestates::default_instructions")] pub s_instrs: [fn(&mut device::Device, u32); 64], + #[serde(skip, default = "savestates::default_instructions")] pub d_instrs: [fn(&mut device::Device, u32); 64], + #[serde(skip, default = "savestates::default_instructions")] pub w_instrs: [fn(&mut device::Device, u32); 64], + #[serde(skip, default = "savestates::default_instructions")] pub l_instrs: [fn(&mut device::Device, u32); 64], } @@ -448,10 +455,7 @@ pub fn get_fpr_double(device: &device::Device, index: usize) -> f64 { } } -pub fn init(device: &mut device::Device) { - set_fgr_registers(device, 0); - device.cpu.cop1.fcr0 = 0b101000000000; - +pub fn map_instructions(device: &mut device::Device) { device.cpu.cop1.b_instrs = [ device::fpu_instructions::bc1f, // 0 device::fpu_instructions::bc1t, // 1 @@ -763,6 +767,13 @@ pub fn init(device: &mut device::Device) { ] } +pub fn init(device: &mut device::Device) { + set_fgr_registers(device, 0); + device.cpu.cop1.fcr0 = 0b101000000000; + + map_instructions(device); +} + pub fn set_fgr_registers(device: &mut device::Device, status_reg: u64) { // this method doesn't account for undocumented behaviour (accessing odd numbered registers in half mode) if (status_reg & device::cop0::COP0_STATUS_FR) == 0 { diff --git a/src/device/cop2.rs b/src/device/cop2.rs index ddf5763..92e3c7a 100644 --- a/src/device/cop2.rs +++ b/src/device/cop2.rs @@ -1,6 +1,8 @@ -use crate::device; +use crate::{device, savestates}; +#[derive(serde::Serialize, serde::Deserialize)] pub struct Cop2 { + #[serde(skip, default = "savestates::default_instructions")] pub instrs: [fn(&mut device::Device, u32); 32], pub reg_latch: u64, } @@ -76,7 +78,7 @@ fn unusable(device: &mut device::Device, _opcode: u32) { device::exceptions::cop_unusable_exception(device, device::cop0::COP0_CAUSE_CE2) } -pub fn init(device: &mut device::Device) { +pub fn map_instructions(device: &mut device::Device) { device.cpu.cop2.instrs = [ device::cop2::mfc2, // 0 device::cop2::dmfc2, // 1 @@ -112,3 +114,7 @@ pub fn init(device: &mut device::Device) { device::cop2::reserved, // 31 ] } + +pub fn init(device: &mut device::Device) { + map_instructions(device); +} diff --git a/src/device/cpu.rs b/src/device/cpu.rs index afaa6db..a72ddd9 100644 --- a/src/device/cpu.rs +++ b/src/device/cpu.rs @@ -1,6 +1,6 @@ -use crate::device; +use crate::{device, savestates}; -#[derive(PartialEq)] +#[derive(PartialEq, serde::Serialize, serde::Deserialize)] pub enum State { Step, Take, @@ -11,10 +11,13 @@ pub enum State { Exception, } +#[derive(serde::Serialize, serde::Deserialize)] pub struct BranchState { pub state: State, pub pc: u64, } + +#[derive(serde::Serialize, serde::Deserialize)] pub struct Cpu { pub cop0: device::cop0::Cop0, pub cop1: device::cop1::Cop1, @@ -28,10 +31,13 @@ pub struct Cpu { pub running: bool, pub llbit: bool, pub clock_rate: u64, + #[serde(skip, default = "savestates::default_instructions")] pub instrs: [fn(&mut device::Device, u32); 64], + #[serde(skip, default = "savestates::default_instructions")] pub special_instrs: [fn(&mut device::Device, u32); 64], + #[serde(skip, default = "savestates::default_instructions")] pub regimm_instrs: [fn(&mut device::Device, u32); 32], - pub events: [device::events::Event; device::events::EventType::Count as usize], + pub events: [device::events::Event; device::events::EVENT_TYPE_COUNT], pub next_event_count: u64, pub next_event: usize, } @@ -47,9 +53,7 @@ pub fn decode_opcode(device: &device::Device, opcode: u32) -> fn(&mut device::De } } -pub fn init(device: &mut device::Device) { - device.cpu.clock_rate = 93750000; - +pub fn map_instructions(device: &mut device::Device) { device.cpu.instrs = [ device::cop0::reserved, // SPECIAL device::cop0::reserved, // REGIMM @@ -216,6 +220,13 @@ pub fn init(device: &mut device::Device) { device::cop0::reserved, // 30 device::cop0::reserved, // 31 ]; +} + +pub fn init(device: &mut device::Device) { + device.cpu.clock_rate = 93750000; + + map_instructions(device); + device::cop0::init(device); device::cop1::init(device); device::cop2::init(device); diff --git a/src/device/events.rs b/src/device/events.rs index 3aa48ed..10a3e83 100644 --- a/src/device/events.rs +++ b/src/device/events.rs @@ -1,58 +1,66 @@ use crate::device; -#[derive(PartialEq, Copy, Clone)] -pub enum EventType { - AI, - SI, - VI, - PI, - DP, - SP, - Interrupt, - SPDma, - Compare, - Vru, - PakSwitch, - Count, -} +pub const EVENT_TYPE_NONE: usize = 0; +pub const EVENT_TYPE_AI: usize = 1; +pub const EVENT_TYPE_SI: usize = 2; +pub const EVENT_TYPE_VI: usize = 3; +pub const EVENT_TYPE_PI: usize = 4; +pub const EVENT_TYPE_DP: usize = 5; +pub const EVENT_TYPE_SP: usize = 6; +pub const EVENT_TYPE_INT: usize = 7; +pub const EVENT_TYPE_SPDMA: usize = 8; +pub const EVENT_TYPE_COMPARE: usize = 9; +pub const EVENT_TYPE_VRU: usize = 10; +pub const EVENT_TYPE_PAK: usize = 11; +pub const EVENT_TYPE_COUNT: usize = 12; -#[derive(PartialEq, Copy, Clone)] +#[derive(PartialEq, Copy, Clone, serde::Serialize, serde::Deserialize)] pub struct Event { pub enabled: bool, pub count: u64, - pub handler: fn(&mut device::Device), } -pub fn create_event( - device: &mut device::Device, - name: EventType, - when: u64, - handler: fn(&mut device::Device), -) { - device.cpu.events[name as usize] = Event { +pub fn create_event(device: &mut device::Device, name: usize, when: u64) { + device.cpu.events[name] = Event { enabled: true, count: when, - handler, }; set_next_event(device); } -pub fn get_event(device: &mut device::Device, name: EventType) -> Option<&mut Event> { - if device.cpu.events[name as usize].enabled { - return Some(&mut device.cpu.events[name as usize]); +pub fn get_event(device: &mut device::Device, name: usize) -> Option<&mut Event> { + if device.cpu.events[name].enabled { + return Some(&mut device.cpu.events[name]); } None } -pub fn remove_event(device: &mut device::Device, name: EventType) { - device.cpu.events[name as usize].enabled = false; +pub fn remove_event(device: &mut device::Device, name: usize) { + device.cpu.events[name].enabled = false; +} + +fn get_event_handler(name: usize) -> fn(&mut device::Device) { + match name { + EVENT_TYPE_AI => device::ai::dma_event, + EVENT_TYPE_SI => device::si::dma_event, + EVENT_TYPE_VI => device::vi::vertical_interrupt_event, + EVENT_TYPE_PI => device::pi::dma_event, + EVENT_TYPE_DP => device::rdp::rdp_interrupt_event, + EVENT_TYPE_SP => device::rsp_interface::rsp_event, + EVENT_TYPE_INT => device::exceptions::interrupt_exception, + EVENT_TYPE_SPDMA => device::rsp_interface::fifo_pop, + EVENT_TYPE_COMPARE => device::cop0::compare_event, + EVENT_TYPE_VRU => device::controller::vru::vru_talking_event, + EVENT_TYPE_PAK => device::controller::pak_switch_event, + _ => dummy_event, + } } pub fn trigger_event(device: &mut device::Device) { let next_event_name = device.cpu.next_event; device.cpu.events[next_event_name].enabled = false; - let handler = device.cpu.events[next_event_name].handler; + let handler = get_event_handler(next_event_name); device.cpu.cop0.is_event = true; handler(device); device.cpu.cop0.is_event = false; diff --git a/src/device/exceptions.rs b/src/device/exceptions.rs index 1e72d2c..40353b0 100644 --- a/src/device/exceptions.rs +++ b/src/device/exceptions.rs @@ -35,9 +35,8 @@ pub fn check_pending_interrupts(device: &mut device::Device) { } else { device::events::create_event( device, - device::events::EventType::Interrupt, + device::events::EVENT_TYPE_INT, device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize], - interrupt_exception, ); } } diff --git a/src/device/memory.rs b/src/device/memory.rs index a5707d7..3b87d7c 100644 --- a/src/device/memory.rs +++ b/src/device/memory.rs @@ -1,4 +1,4 @@ -use crate::device; +use crate::{device, savestates}; const MM_RDRAM_DRAM: usize = 0x00000000; const MM_RDRAM_REGS: usize = 0x03f00000; @@ -28,20 +28,27 @@ pub enum AccessType { Read, } -#[derive(Copy, Clone)] +#[derive(Copy, Clone, Default)] pub enum AccessSize { - // None = 0, + #[default] + None = 0, Word = 4, Dword = 8, Dcache = 16, Icache = 32, } +#[derive(serde::Serialize, serde::Deserialize)] pub struct Memory { + #[serde(skip, default = "savestates::default_memory_read")] pub fast_read: [fn(&mut device::Device, u64, AccessSize) -> u32; 0x2000], // fast_read is used for lookups that try to detect idle loops + #[serde(skip, default = "savestates::default_memory_read")] pub memory_map_read: [fn(&mut device::Device, u64, AccessSize) -> u32; 0x2000], + #[serde(skip, default = "savestates::default_memory_write")] pub memory_map_write: [fn(&mut device::Device, u64, u32, u32); 0x2000], + #[serde(with = "serde_big_array::BigArray")] pub icache: [device::cache::ICache; 512], + #[serde(with = "serde_big_array::BigArray")] pub dcache: [device::cache::DCache; 512], } @@ -164,5 +171,4 @@ pub fn init(device: &mut device::Device) { device.memory.memory_map_write[i] = device::cart::sc64::write_regs; } } - device::cache::init(device) } diff --git a/src/device/mi.rs b/src/device/mi.rs index 81f02d7..82f1121 100644 --- a/src/device/mi.rs +++ b/src/device/mi.rs @@ -44,6 +44,7 @@ const MI_SET_RDRAM: u32 = 1 << 13; const MI_INIT_LENGTH_MASK: u32 = 0b1111111; +#[derive(serde::Serialize, serde::Deserialize)] pub struct Mi { pub regs: [u32; MI_REGS_COUNT as usize], } diff --git a/src/device/pi.rs b/src/device/pi.rs index 691411e..039b93d 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -26,6 +26,7 @@ const PI_STATUS_INTERRUPT: u32 = 1 << 3; const PI_STATUS_RESET: u32 = 1 << 0; const PI_STATUS_CLR_INTR: u32 = 1 << 1; +#[derive(serde::Serialize, serde::Deserialize)] pub struct Pi { pub regs: [u32; PI_REGS_COUNT as usize], } @@ -66,9 +67,8 @@ fn dma_read(device: &mut device::Device) { device::events::create_event( device, - device::events::EventType::PI, + device::events::EVENT_TYPE_PI, device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + cycles, - dma_event, ); /* Update PI_DRAM_ADDR_REG and PI_CART_ADDR_REG */ @@ -99,9 +99,8 @@ fn dma_write(device: &mut device::Device) { device::events::create_event( device, - device::events::EventType::PI, + device::events::EVENT_TYPE_PI, device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + cycles, - dma_event, ); /* Update PI_DRAM_ADDR_REG and PI_CART_ADDR_REG */ diff --git a/src/device/pif.rs b/src/device/pif.rs index 8bab677..8a494e3 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -1,18 +1,22 @@ mod rom; use crate::device; +#[derive(serde::Serialize, serde::Deserialize)] pub struct Pif { + #[serde(with = "serde_big_array::BigArray")] pub rom: [u8; 1984], + #[serde(with = "serde_big_array::BigArray")] pub ram: [u8; 64], pub channels: [PifChannel; 5], } -#[derive(Copy, Clone)] +#[derive(Copy, Clone, serde::Serialize, serde::Deserialize)] pub struct PifChannel { pub tx: Option, pub tx_buf: Option, pub rx: Option, pub rx_buf: Option, + #[serde(skip)] pub process: Option, pub pak_handler: Option, pub change_pak: device::controller::PakType, @@ -65,9 +69,8 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 device.si.dma_dir = device::si::DmaDir::Write; device::events::create_event( device, - device::events::EventType::SI, + device::events::EVENT_TYPE_SI, device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + 3200, - device::si::dma_event, ); //based on https://github.com/rasky/n64-systembench device.si.regs[device::si::SI_STATUS_REG as usize] |= device::si::SI_STATUS_DMA_BUSY | device::si::SI_STATUS_IO_BUSY @@ -217,6 +220,22 @@ pub fn process_ram(device: &mut device::Device) { device.pif.ram[0x3F] &= !clrmask } +pub fn connect_pif_channels(device: &mut device::Device) { + for i in 0..4 { + if device.netplay.is_none() { + if device.ui.config.input.controller_enabled[i] { + device.pif.channels[i].process = Some(device::controller::process); + } + } else if device.netplay.as_ref().unwrap().player_data[i].reg_id != 0 { + device.pif.channels[i].process = Some(device::controller::process); + } + } + if device.ui.config.input.emulate_vru { + device.pif.channels[3].process = Some(device::controller::vru::process); + } + device.pif.channels[4].process = Some(device::cart::process) +} + pub fn init(device: &mut device::Device) { if device.cart.pal { device.pif.rom = rom::PAL_PIF_ROM; @@ -232,22 +251,20 @@ pub fn init(device: &mut device::Device) { pak_type: device::controller::PakType::MemPak, }; + connect_pif_channels(device); + for i in 0..4 { if device.netplay.is_none() { if device.ui.config.input.controller_enabled[i] { device.pif.channels[i].pak_handler = Some(mempak_handler); - device.pif.channels[i].process = Some(device::controller::process); } } else if device.netplay.as_ref().unwrap().player_data[i].reg_id != 0 { device.pif.channels[i].pak_handler = Some(mempak_handler); - device.pif.channels[i].process = Some(device::controller::process); } } if device.ui.config.input.emulate_vru { device.pif.channels[3].pak_handler = None; - device.pif.channels[3].process = Some(device::controller::vru::process); } - device.pif.channels[4].process = Some(device::cart::process) } fn process_cic_challenge(device: &mut device::Device) { diff --git a/src/device/rdp.rs b/src/device/rdp.rs index 9df454c..cd35441 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -1,5 +1,4 @@ -use crate::device; -use crate::ui; +use crate::{device, savestates, ui}; pub const DPC_START_REG: u32 = 0; pub const DPC_END_REG: u32 = 1; @@ -41,6 +40,7 @@ const DPC_CLR_PIPE_CTR: u32 = 1 << 7; const DPC_CLR_CMD_CTR: u32 = 1 << 8; const DPC_CLR_CLOCK_CTR: u32 = 1 << 9; +#[derive(serde::Serialize, serde::Deserialize)] pub struct Rdp { pub regs_dpc: [u32; DPC_REGS_COUNT as usize], pub regs_dps: [u32; DPS_REGS_COUNT as usize], @@ -118,11 +118,19 @@ fn run_rdp(device: &mut device::Device) { DPC_STATUS_START_GCLK | DPC_STATUS_PIPE_BUSY | DPC_STATUS_CMD_BUSY; if timer != 0 { + if device.save_state { + // Right after full sync, good time for save state + device.save_state = false; + savestates::create_savestate(device); + } else if device.load_state { + // Right after full sync, good time for save state + device.load_state = false; + savestates::load_savestate(device); + } device::events::create_event( device, - device::events::EventType::DP, + device::events::EVENT_TYPE_DP, device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + timer, - rdp_interrupt_event, ) } } @@ -197,7 +205,7 @@ pub fn init(device: &mut device::Device) { DPC_STATUS_START_GCLK | DPC_STATUS_PIPE_BUSY | DPC_STATUS_CBUF_READY; } -fn rdp_interrupt_event(device: &mut device::Device) { +pub fn rdp_interrupt_event(device: &mut device::Device) { device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !(DPC_STATUS_START_GCLK | DPC_STATUS_PIPE_BUSY | DPC_STATUS_CMD_BUSY); diff --git a/src/device/rdram.rs b/src/device/rdram.rs index 37d2615..a94a468 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -15,6 +15,7 @@ pub const RDRAM_REGS_COUNT: u32 = 10; pub const RDRAM_MASK: usize = 0xFFFFFF; +#[derive(serde::Serialize, serde::Deserialize)] pub struct Rdram { pub mem: Vec, pub size: u32, diff --git a/src/device/ri.rs b/src/device/ri.rs index 60056b4..b6b5cec 100644 --- a/src/device/ri.rs +++ b/src/device/ri.rs @@ -10,6 +10,7 @@ pub const RI_REFRESH_REG: u32 = 4; //const RI_WERROR_REG: u32 = 7; pub const RI_REGS_COUNT: u32 = 8; +#[derive(serde::Serialize, serde::Deserialize)] pub struct Ri { pub regs: [u32; RI_REGS_COUNT as usize], pub ram_init: bool, diff --git a/src/device/rsp_cpu.rs b/src/device/rsp_cpu.rs index 3d41440..451f397 100644 --- a/src/device/rsp_cpu.rs +++ b/src/device/rsp_cpu.rs @@ -2,28 +2,32 @@ use device::__m128i; #[cfg(target_arch = "aarch64")] include!(concat!(env!("OUT_DIR"), "/simd_bindings.rs")); -use crate::device; +use crate::{device, savestates}; #[cfg(target_arch = "x86_64")] use std::arch::x86_64::*; +#[derive(serde::Serialize, serde::Deserialize)] pub struct BranchState { pub state: device::cpu::State, pub pc: u32, } -#[derive(Copy, Clone)] +#[derive(Copy, Clone, serde::Serialize, serde::Deserialize)] pub struct Instructions { + #[serde(skip, default = "savestates::default_instruction")] pub func: fn(&mut device::Device, u32), pub opcode: u32, } -#[derive(PartialEq, Copy, Clone)] +#[derive(PartialEq, Copy, Clone, serde::Serialize, serde::Deserialize)] pub enum InstructionType { Su, Vu, } +#[derive(serde::Serialize, serde::Deserialize)] pub struct Cpu { + #[serde(with = "serde_big_array::BigArray")] pub instructions: [Instructions; 0x1000 / 4], pub last_instruction_type: InstructionType, pub instruction_type: InstructionType, @@ -33,29 +37,79 @@ pub struct Cpu { pub halted: bool, pub sync_point: bool, pub cycle_counter: u64, + #[serde( + serialize_with = "savestates::serialize_m128i_array", + deserialize_with = "savestates::deserialize_m128i_array" + )] pub shuffle: [__m128i; 16], pub gpr: [u32; 32], + #[serde( + serialize_with = "savestates::serialize_m128i_array", + deserialize_with = "savestates::deserialize_m128i_array" + )] pub vpr: [__m128i; 32], + #[serde(with = "serde_big_array::BigArray")] pub reciprocals: [u16; 512], + #[serde(with = "serde_big_array::BigArray")] pub inverse_square_roots: [u16; 512], + #[serde( + serialize_with = "savestates::serialize_m128i", + deserialize_with = "savestates::deserialize_m128i" + )] pub vcol: __m128i, + #[serde( + serialize_with = "savestates::serialize_m128i", + deserialize_with = "savestates::deserialize_m128i" + )] pub vcoh: __m128i, + #[serde( + serialize_with = "savestates::serialize_m128i", + deserialize_with = "savestates::deserialize_m128i" + )] pub vccl: __m128i, + #[serde( + serialize_with = "savestates::serialize_m128i", + deserialize_with = "savestates::deserialize_m128i" + )] pub vcch: __m128i, + #[serde( + serialize_with = "savestates::serialize_m128i", + deserialize_with = "savestates::deserialize_m128i" + )] pub vce: __m128i, + #[serde( + serialize_with = "savestates::serialize_m128i", + deserialize_with = "savestates::deserialize_m128i" + )] pub accl: __m128i, + #[serde( + serialize_with = "savestates::serialize_m128i", + deserialize_with = "savestates::deserialize_m128i" + )] pub accm: __m128i, + #[serde( + serialize_with = "savestates::serialize_m128i", + deserialize_with = "savestates::deserialize_m128i" + )] pub acch: __m128i, pub divdp: bool, pub divin: i16, pub divout: i16, + #[serde(skip, default = "savestates::default_instructions")] pub special_instrs: [fn(&mut device::Device, u32); 64], + #[serde(skip, default = "savestates::default_instructions")] pub regimm_instrs: [fn(&mut device::Device, u32); 32], + #[serde(skip, default = "savestates::default_instructions")] pub cop0_instrs: [fn(&mut device::Device, u32); 32], + #[serde(skip, default = "savestates::default_instructions")] pub cop2_instrs: [fn(&mut device::Device, u32); 32], + #[serde(skip, default = "savestates::default_instructions")] pub lwc2_instrs: [fn(&mut device::Device, u32); 32], + #[serde(skip, default = "savestates::default_instructions")] pub swc2_instrs: [fn(&mut device::Device, u32); 32], + #[serde(skip, default = "savestates::default_instructions")] pub instrs: [fn(&mut device::Device, u32); 64], + #[serde(skip, default = "savestates::default_instructions")] pub vec_instrs: [fn(&mut device::Device, u32); 64], } @@ -165,62 +219,7 @@ pub fn decode_opcode(device: &device::Device, opcode: u32) -> fn(&mut device::De } } -pub fn init(device: &mut device::Device) { - device.rsp.cpu.reciprocals[0] = u16::MAX; - let mut index = 1; - while index < 512 { - let a = (index + 512) as u64; - let b = (1_u64 << 34) / a; - device.rsp.cpu.reciprocals[index] = ((b + 1) >> 8) as u16; - index += 1; - } - - index = 0; - while index < 512 { - let mut shift = 0; - if index % 2 == 1 { - shift = 1 - } - let a = ((index + 512) >> shift) as u64; - let mut b = (1 << 17) as u64; - //find the largest b where b < 1.0 / sqrt(a) - while a * (b + 1) * (b + 1) < (1_u64 << 44) { - b += 1; - } - device.rsp.cpu.inverse_square_roots[index] = (b >> 1) as u16; - index += 1; - } - - device.rsp.cpu.shuffle = unsafe { - [ - //vector - _mm_set_epi8(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0), //01234567 - _mm_set_epi8(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0), //01234567 - //scalar quarter - _mm_set_epi8(15, 14, 15, 14, 11, 10, 11, 10, 7, 6, 7, 6, 3, 2, 3, 2), //00224466 - _mm_set_epi8(13, 12, 13, 12, 9, 8, 9, 8, 5, 4, 5, 4, 1, 0, 1, 0), //11335577 - //scalar half - _mm_set_epi8(15, 14, 15, 14, 15, 14, 15, 14, 7, 6, 7, 6, 7, 6, 7, 6), //00004444 - _mm_set_epi8(13, 12, 13, 12, 13, 12, 13, 12, 5, 4, 5, 4, 5, 4, 5, 4), //11115555 - _mm_set_epi8(11, 10, 11, 10, 11, 10, 11, 10, 3, 2, 3, 2, 3, 2, 3, 2), //22226666 - _mm_set_epi8(9, 8, 9, 8, 9, 8, 9, 8, 1, 0, 1, 0, 1, 0, 1, 0), //33337777 - //scalar whole - _mm_set_epi8( - 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, - ), //00000000 - _mm_set_epi8( - 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, - ), //11111111 - _mm_set_epi8( - 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, - ), //22222222 - _mm_set_epi8(9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8), //33333333 - _mm_set_epi8(7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6), //44444444 - _mm_set_epi8(5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4), //55555555 - _mm_set_epi8(3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2), //66666666 - _mm_set_epi8(1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0), //77777777 - ] - }; +pub fn map_instructions(device: &mut device::Device) { device.rsp.cpu.instrs = [ device::rsp_su_instructions::reserved, // SPECIAL device::rsp_su_instructions::reserved, // REGIMM @@ -597,3 +596,63 @@ pub fn init(device: &mut device::Device) { device::rsp_vu_instructions::vnop, // 63 ] } + +pub fn init(device: &mut device::Device) { + device.rsp.cpu.reciprocals[0] = u16::MAX; + let mut index = 1; + while index < 512 { + let a = (index + 512) as u64; + let b = (1_u64 << 34) / a; + device.rsp.cpu.reciprocals[index] = ((b + 1) >> 8) as u16; + index += 1; + } + + index = 0; + while index < 512 { + let mut shift = 0; + if index % 2 == 1 { + shift = 1 + } + let a = ((index + 512) >> shift) as u64; + let mut b = (1 << 17) as u64; + //find the largest b where b < 1.0 / sqrt(a) + while a * (b + 1) * (b + 1) < (1_u64 << 44) { + b += 1; + } + device.rsp.cpu.inverse_square_roots[index] = (b >> 1) as u16; + index += 1; + } + + device.rsp.cpu.shuffle = unsafe { + [ + //vector + _mm_set_epi8(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0), //01234567 + _mm_set_epi8(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0), //01234567 + //scalar quarter + _mm_set_epi8(15, 14, 15, 14, 11, 10, 11, 10, 7, 6, 7, 6, 3, 2, 3, 2), //00224466 + _mm_set_epi8(13, 12, 13, 12, 9, 8, 9, 8, 5, 4, 5, 4, 1, 0, 1, 0), //11335577 + //scalar half + _mm_set_epi8(15, 14, 15, 14, 15, 14, 15, 14, 7, 6, 7, 6, 7, 6, 7, 6), //00004444 + _mm_set_epi8(13, 12, 13, 12, 13, 12, 13, 12, 5, 4, 5, 4, 5, 4, 5, 4), //11115555 + _mm_set_epi8(11, 10, 11, 10, 11, 10, 11, 10, 3, 2, 3, 2, 3, 2, 3, 2), //22226666 + _mm_set_epi8(9, 8, 9, 8, 9, 8, 9, 8, 1, 0, 1, 0, 1, 0, 1, 0), //33337777 + //scalar whole + _mm_set_epi8( + 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, + ), //00000000 + _mm_set_epi8( + 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, + ), //11111111 + _mm_set_epi8( + 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, + ), //22222222 + _mm_set_epi8(9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8), //33333333 + _mm_set_epi8(7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6), //44444444 + _mm_set_epi8(5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4), //55555555 + _mm_set_epi8(3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2), //66666666 + _mm_set_epi8(1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0), //77777777 + ] + }; + + map_instructions(device); +} diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index 1c643ca..bad92e8 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -60,14 +60,14 @@ const SP_SET_SIG7: u32 = 1 << 24; const RSP_MEM_MASK: usize = 0x1FFF; -#[derive(PartialEq, Copy, Clone)] +#[derive(PartialEq, Copy, Clone, serde::Serialize, serde::Deserialize)] pub enum DmaDir { None, Write, Read, } -#[derive(Copy, Clone)] +#[derive(Copy, Clone, serde::Serialize, serde::Deserialize)] pub struct RspDma { pub dir: DmaDir, pub length: u32, @@ -75,10 +75,12 @@ pub struct RspDma { pub dramaddr: u32, } +#[derive(serde::Serialize, serde::Deserialize)] pub struct Rsp { pub cpu: device::rsp_cpu::Cpu, pub regs: [u32; SP_REGS_COUNT as usize], pub regs2: [u32; SP_REGS2_COUNT as usize], + #[serde(with = "serde_big_array::BigArray")] pub mem: [u8; 0x2000], pub fifo: [RspDma; 2], pub last_status_value: u32, @@ -201,11 +203,10 @@ fn do_dma(device: &mut device::Device, dma: RspDma) { device::events::create_event( device, - device::events::EventType::SPDma, + device::events::EVENT_TYPE_SPDMA, device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + device::rdram::rdram_calculate_cycles((count * length) as u64) + 9, - device::rsp_interface::fifo_pop, ); } @@ -241,7 +242,7 @@ fn fifo_push(device: &mut device::Device, dir: DmaDir) { } } -fn fifo_pop(device: &mut device::Device) { +pub fn fifo_pop(device: &mut device::Device) { if device.rsp.regs[SP_DMA_FULL_REG as usize] != 0 { device.rsp.fifo[0].dir = device.rsp.fifo[1].dir; device.rsp.fifo[0].length = device.rsp.fifo[1].length; @@ -350,7 +351,7 @@ fn update_sp_status(device: &mut device::Device, w: u32) { device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_HALT } if w & SP_SET_HALT != 0 && w & SP_CLR_HALT == 0 { - device::events::remove_event(device, device::events::EventType::SP); + device::events::remove_event(device, device::events::EVENT_TYPE_SP); device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_HALT } @@ -465,14 +466,13 @@ fn do_task(device: &mut device::Device) { device::events::create_event( device, - device::events::EventType::SP, + device::events::EVENT_TYPE_SP, device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + timer, - rsp_event, ) } } -fn rsp_event(device: &mut device::Device) { +pub fn rsp_event(device: &mut device::Device) { if device.rsp.cpu.broken { device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_HALT | SP_STATUS_BROKE; diff --git a/src/device/si.rs b/src/device/si.rs index 4751ebc..50b2adb 100644 --- a/src/device/si.rs +++ b/src/device/si.rs @@ -14,13 +14,14 @@ pub const SI_STATUS_IO_BUSY: u32 = 1 << 1; //const SI_STATUS_DMA_ERROR: u32 = 1 << 3; const SI_STATUS_INTERRUPT: u32 = 1 << 12; -#[derive(PartialEq)] +#[derive(PartialEq, serde::Serialize, serde::Deserialize)] pub enum DmaDir { None, Write, Read, } +#[derive(serde::Serialize, serde::Deserialize)] pub struct Si { pub regs: [u32; SI_REGS_COUNT as usize], pub dma_dir: DmaDir, @@ -44,9 +45,8 @@ fn dma_read(device: &mut device::Device) { device::events::create_event( device, - device::events::EventType::SI, + device::events::EVENT_TYPE_SI, device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + duration, - dma_event, ) } @@ -59,9 +59,8 @@ fn dma_write(device: &mut device::Device) { device::events::create_event( device, - device::events::EventType::SI, + device::events::EVENT_TYPE_SI, device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + 6000, //based on https://github.com/rasky/n64-systembench - dma_event, ) } diff --git a/src/device/tlb.rs b/src/device/tlb.rs index e966684..5c0cd89 100644 --- a/src/device/tlb.rs +++ b/src/device/tlb.rs @@ -1,12 +1,12 @@ use crate::device; -#[derive(Copy, Clone)] +#[derive(Copy, Clone, serde::Serialize, serde::Deserialize)] pub struct TlbLut { pub address: u64, pub cached: bool, } -#[derive(Copy, Clone)] +#[derive(Copy, Clone, serde::Serialize, serde::Deserialize)] pub struct TlbEntry { pub mask: u64, pub vpn2: u64, diff --git a/src/device/vi.rs b/src/device/vi.rs index 9b825e2..cb884b1 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -1,6 +1,4 @@ -use crate::device; -use crate::netplay; -use crate::ui; +use crate::{device, netplay, ui}; use governor::clock::Clock; const VI_STATUS_REG: u32 = 0; @@ -19,11 +17,13 @@ const VI_H_SYNC_REG: u32 = 7; //const VI_Y_SCALE_REG: u32 = 13; pub const VI_REGS_COUNT: u32 = 14; +#[derive(serde::Serialize, serde::Deserialize)] pub struct Vi { pub regs: [u32; VI_REGS_COUNT as usize], pub clock: u64, pub delay: u64, pub field: u32, + #[serde(skip)] pub limiter: Option, pub count_per_scanline: u64, pub vi_counter: u64, @@ -33,7 +33,7 @@ pub struct Vi { const LIMIT_BUFFER: u64 = 3; -fn set_expected_refresh_rate(device: &mut device::Device) { +pub fn set_expected_refresh_rate(device: &mut device::Device) { let expected_refresh_rate = device.vi.clock as f64 / (device.vi.regs[VI_V_SYNC_REG as usize] + 1) as f64 / ((device.vi.regs[VI_H_SYNC_REG as usize] & 0xFFF) + 1) as f64 @@ -50,19 +50,18 @@ fn set_expected_refresh_rate(device: &mut device::Device) { } fn set_vertical_interrupt(device: &mut device::Device) { - if device::events::get_event(device, device::events::EventType::VI).is_none() { + if device::events::get_event(device, device::events::EVENT_TYPE_VI).is_none() { device::events::create_event( device, - device::events::EventType::VI, + device::events::EVENT_TYPE_VI, device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + device.vi.delay, - vertical_interrupt_event, ) } } fn set_current_line(device: &mut device::Device) { let delay = device.vi.delay; - let next_vi = device::events::get_event(device, device::events::EventType::VI); + let next_vi = device::events::get_event(device, device::events::EVENT_TYPE_VI); if next_vi.is_some() { device.vi.regs[VI_CURRENT_REG as usize] = ((delay - (next_vi.unwrap().count @@ -117,8 +116,9 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) } -fn vertical_interrupt_event(device: &mut device::Device) { - device.cpu.running = ui::video::update_screen(); +pub fn vertical_interrupt_event(device: &mut device::Device) { + ui::video::update_screen(); + ui::video::check_callback(device); /* unsafe { @@ -144,9 +144,8 @@ fn vertical_interrupt_event(device: &mut device::Device) { device::events::create_event( device, - device::events::EventType::VI, + device::events::EVENT_TYPE_VI, device.cpu.next_event_count + device.vi.delay, - vertical_interrupt_event, ) } diff --git a/src/main.rs b/src/main.rs index 34afd2f..f877979 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,7 @@ static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; mod device; mod netplay; +mod savestates; mod ui; use clap::Parser; use ui::gui; @@ -78,7 +79,11 @@ async fn main() { } result = std::fs::create_dir_all(dirs.data_dir.join("saves")); if result.is_err() { - panic!("could not create data dir: {}", result.err().unwrap()) + panic!("could not create save dir: {}", result.err().unwrap()) + } + result = std::fs::create_dir_all(dirs.data_dir.join("states")); + if result.is_err() { + panic!("could not create state dir: {}", result.err().unwrap()) } let running_file = dirs.cache_dir.join("game_running"); if running_file.exists() { @@ -91,11 +96,11 @@ async fn main() { let args = Args::parse(); let args_as_strings: Vec = std::env::args().collect(); let args_count = args_as_strings.len(); - if args_count > 1 { - let mut device = device::Device::new(); + if args_count > 1 && args.game.is_none() { + let mut ui = ui::Ui::new(); if args.clear_input_bindings { - ui::input::clear_bindings(&mut device.ui); + ui::input::clear_bindings(&mut ui); return; } if args.port.is_some() { @@ -106,7 +111,7 @@ async fn main() { } } if args.list_controllers { - let controllers = gui::get_controller_names(&device.ui); + let controllers = gui::get_controller_names(&ui); for (i, controller) in controllers.iter().enumerate() { println!("Controller {}: {}", i, controller); } @@ -118,7 +123,7 @@ async fn main() { return; } ui::input::assign_controller( - &mut device.ui, + &mut ui, args.assign_controller.unwrap(), args.port.unwrap(), ); @@ -130,7 +135,7 @@ async fn main() { return; } ui::input::bind_input_profile( - &mut device.ui, + &mut ui, args.bind_input_profile.unwrap(), args.port.unwrap(), ); @@ -138,22 +143,30 @@ async fn main() { } if args.configure_input_profile.is_some() { ui::input::configure_input_profile( - &mut device.ui, + &mut ui, args.configure_input_profile.unwrap(), args.use_dinput, ); return; } - - if args.game.is_some() { - let file_path = std::path::Path::new(args.game.as_ref().unwrap()); - let rom_contents = device::get_rom_contents(file_path); - if rom_contents.is_empty() { - println!("Could not read rom file"); - return; - } - device::run_game(rom_contents, &mut device, args.fullscreen); + } else if args.game.is_some() { + let file_path = std::path::Path::new(args.game.as_ref().unwrap()); + let rom_contents = device::get_rom_contents(file_path); + if rom_contents.is_empty() { + println!("Could not read rom file"); + return; } + let handle = std::thread::Builder::new() + .name("n64".to_string()) + .stack_size(env!("N64_STACK_SIZE").parse().unwrap()) + .spawn(move || { + let mut device = device::Device::new(); + device.ui.fullscreen = args.fullscreen; + device::run_game(rom_contents, &mut device); + }) + .unwrap(); + + handle.join().unwrap(); } else { let options = eframe::NativeOptions { viewport: eframe::egui::ViewportBuilder::default() diff --git a/src/netplay.rs b/src/netplay.rs index ad65398..4272e99 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -1,5 +1,4 @@ -use crate::device; -use crate::ui; +use crate::{device, ui}; use eframe::egui; use std::io::{Read, Write}; //UDP packet formats diff --git a/src/savestates.rs b/src/savestates.rs new file mode 100644 index 0000000..bb80b84 --- /dev/null +++ b/src/savestates.rs @@ -0,0 +1,199 @@ +use crate::{device, ui}; +#[cfg(target_arch = "aarch64")] +use device::__m128i; +use serde::de::{Deserialize, Deserializer, SeqAccess, Visitor}; +use serde::ser::{Serialize, SerializeSeq, Serializer}; +#[cfg(target_arch = "x86_64")] +use std::arch::x86_64::*; + +struct M128iArrayVisitor; + +impl<'de, const N: usize> Visitor<'de> for M128iArrayVisitor { + type Value = [__m128i; N]; + + fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { + formatter.write_str(&format!("an array of {} 128-bit integers", N)) + } + + fn visit_seq(self, mut seq: A) -> Result + where + A: SeqAccess<'de>, + { + let mut arr: [__m128i; N] = [device::zero_m128i(); N]; + for (index, item) in arr.iter_mut().enumerate().take(N) { + match seq.next_element::()? { + Some(value) => *item = unsafe { std::mem::transmute::(value) }, + None => return Err(serde::de::Error::invalid_length(index, &self)), + } + } + Ok(arr) + } +} + +pub fn deserialize_m128i_array<'de, D, const N: usize>( + deserializer: D, +) -> Result<[__m128i; N], D::Error> +where + D: serde::Deserializer<'de>, +{ + deserializer.deserialize_seq(M128iArrayVisitor) +} + +pub fn serialize_m128i(data: &__m128i, serializer: S) -> Result +where + S: Serializer, +{ + let bytes: u128 = unsafe { std::mem::transmute(*data) }; + bytes.serialize(serializer) +} + +pub fn deserialize_m128i<'de, D>(deserializer: D) -> Result<__m128i, D::Error> +where + D: Deserializer<'de>, +{ + let bytes = u128::deserialize(deserializer)?; + Ok(unsafe { std::mem::transmute::(bytes) }) +} + +pub fn serialize_m128i_array(value: &[__m128i], serializer: S) -> Result +where + S: serde::Serializer, +{ + let mut seq = serializer.serialize_seq(Some(value.len()))?; + + for item in value { + let bytes: u128 = unsafe { std::mem::transmute(*item) }; + seq.serialize_element(&bytes)?; + } + + seq.end() +} + +pub fn create_savestate(device: &device::Device) { + let data: &[(&[u8], &str)] = &[ + (&postcard::to_stdvec(device).unwrap(), "device"), + (&postcard::to_stdvec(&device.ui.saves).unwrap(), "saves"), + ]; + let compressed_file = ui::storage::compress_file(data); + std::fs::write(device.ui.paths.savestate_file_path.clone(), compressed_file).unwrap(); +} + +pub fn load_savestate(device: &mut device::Device) { + let savestate = std::fs::read(&mut device.ui.paths.savestate_file_path); + if savestate.is_ok() { + let device_bytes = ui::storage::decompress_file(savestate.as_ref().unwrap(), "device"); + let save_bytes = ui::storage::decompress_file(savestate.as_ref().unwrap(), "saves"); + let state: device::Device = postcard::from_bytes(&device_bytes).unwrap(); + + device.ui.saves = postcard::from_bytes(&save_bytes).unwrap(); + + device.cpu = state.cpu; + device.pif = state.pif; + + let rom = device.cart.rom.clone(); + device.cart = state.cart; + device.cart.rom = rom; + + device.memory = state.memory; + device.rsp = state.rsp; + device.rdp = state.rdp; + device.rdram = state.rdram; + device.mi = state.mi; + device.pi = state.pi; + device.vi = state.vi; + device.ai = state.ai; + device.si = state.si; + device.ri = state.ri; + device.vru = state.vru; + + device::memory::init(device); + device::vi::set_expected_refresh_rate(device); + device::cpu::map_instructions(device); + device::cop0::map_instructions(device); + device::cop1::map_instructions(device); + device::cop2::map_instructions(device); + device::rsp_cpu::map_instructions(device); + + let mut mem_addr = 0x1000; + while mem_addr < 0x2000 { + let data = + u32::from_be_bytes(device.rsp.mem[mem_addr..mem_addr + 4].try_into().unwrap()); + device.rsp.cpu.instructions[(mem_addr & 0xFFF) / 4].func = + device::rsp_cpu::decode_opcode(device, data); + device.rsp.cpu.instructions[(mem_addr & 0xFFF) / 4].opcode = data; + mem_addr += 4; + } + + for line_index in 0..512 { + device.memory.icache[line_index].instruction[0] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[0]); + device.memory.icache[line_index].instruction[1] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[1]); + device.memory.icache[line_index].instruction[2] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[2]); + device.memory.icache[line_index].instruction[3] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[3]); + device.memory.icache[line_index].instruction[4] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[4]); + device.memory.icache[line_index].instruction[5] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[5]); + device.memory.icache[line_index].instruction[6] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[6]); + device.memory.icache[line_index].instruction[7] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[7]); + } + + device::pif::connect_pif_channels(device); + for i in 0..4 { + if device.pif.channels[i].pak_handler.is_some() { + if device.pif.channels[i].pak_handler.unwrap().pak_type + == device::controller::PakType::RumblePak + { + let rumblepak_handler = device::controller::PakHandler { + read: device::controller::rumble::read, + write: device::controller::rumble::write, + pak_type: device::controller::PakType::RumblePak, + }; + device.pif.channels[i].pak_handler = Some(rumblepak_handler); + } else if device.pif.channels[i].pak_handler.unwrap().pak_type + == device::controller::PakType::MemPak + { + let mempak_handler = device::controller::PakHandler { + read: device::controller::mempak::read, + write: device::controller::mempak::write, + pak_type: device::controller::PakType::MemPak, + }; + device.pif.channels[i].pak_handler = Some(mempak_handler); + } + } + } + + ui::audio::close(&mut device.ui); + ui::audio::init(&mut device.ui, device.ai.freq); + ui::video::load_state(device); + } +} + +pub fn default_pak_handler() -> fn(&mut device::Device, usize, u16, usize, usize) { + device::controller::mempak::read +} + +pub fn default_instruction() -> fn(&mut device::Device, u32) { + device::cop0::reserved +} + +pub fn default_instructions() -> [fn(&mut device::Device, u32); N] +where + [fn(&mut device::Device, u32); N]: Sized, +{ + [device::cop0::reserved; N] +} + +pub fn default_memory_read( +) -> [fn(&mut device::Device, u64, device::memory::AccessSize) -> u32; 0x2000] { + [device::rdram::read_mem; 0x2000] +} + +pub fn default_memory_write() -> [fn(&mut device::Device, u64, u32, u32); 0x2000] { + [device::rdram::write_mem; 0x2000] +} diff --git a/src/ui.rs b/src/ui.rs index 4783b98..79929cd 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -26,17 +26,20 @@ pub struct Ui { pub window: *mut sdl3_sys::video::SDL_Window, pub audio_stream: *mut sdl3_sys::audio::SDL_AudioStream, pub pak_audio_stream: *mut sdl3_sys::audio::SDL_AudioStream, - pub audio_freq: f64, pub audio_device: u32, pub num_joysticks: i32, + pub fullscreen: bool, pub joysticks: *mut sdl3_sys::joystick::SDL_JoystickID, + pub with_sdl: bool, } impl Drop for Ui { fn drop(&mut self) { - unsafe { - sdl3_sys::stdinc::SDL_free(self.joysticks as *mut std::ffi::c_void); - sdl3_sys::init::SDL_Quit(); + if self.with_sdl { + unsafe { + sdl3_sys::stdinc::SDL_free(self.joysticks as *mut std::ffi::c_void); + sdl3_sys::init::SDL_Quit(); + } } } } @@ -78,14 +81,7 @@ pub fn get_dirs() -> Dirs { } impl Ui { - pub fn new() -> Ui { - sdl_init(sdl3_sys::init::SDL_INIT_GAMEPAD); - let mut num_joysticks = 0; - let joysticks = unsafe { sdl3_sys::joystick::SDL_GetJoysticks(&mut num_joysticks) }; - if joysticks.is_null() { - panic!("Could not get joystick list"); - } - + fn construct_ui(num_joysticks: i32, joysticks: *mut u32, with_sdl: bool) -> Ui { let dirs = get_dirs(); Ui { @@ -123,6 +119,7 @@ impl Ui { pak_file_path: std::path::PathBuf::new(), sdcard_file_path: std::path::PathBuf::new(), romsave_file_path: std::path::PathBuf::new(), + savestate_file_path: std::path::PathBuf::new(), }, saves: storage::Saves { eeprom: (Vec::new(), false), @@ -139,11 +136,26 @@ impl Ui { window: std::ptr::null_mut(), audio_stream: std::ptr::null_mut(), pak_audio_stream: std::ptr::null_mut(), - audio_freq: 0.0, audio_device: 0, + fullscreen: false, num_joysticks, joysticks, dirs, + with_sdl, } } + + pub fn default() -> Ui { + Self::construct_ui(0, std::ptr::null_mut(), false) + } + + pub fn new() -> Ui { + sdl_init(sdl3_sys::init::SDL_INIT_GAMEPAD); + let mut num_joysticks = 0; + let joysticks = unsafe { sdl3_sys::joystick::SDL_GetJoysticks(&mut num_joysticks) }; + if joysticks.is_null() { + panic!("Could not get joystick list"); + } + Self::construct_ui(num_joysticks, joysticks, true) + } } diff --git a/src/ui/audio.rs b/src/ui/audio.rs index fd309d9..cc02755 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -49,8 +49,6 @@ pub fn init(ui: &mut ui::Ui, frequency: u64) { if !unsafe { sdl3_sys::audio::SDL_BindAudioStream(ui.audio_device, ui.pak_audio_stream) } { panic!("Could not bind audio stream"); } - - ui.audio_freq = audio_spec.freq as f64; } pub fn close(ui: &mut ui::Ui) { @@ -112,8 +110,8 @@ pub fn play_audio(device: &mut device::Device, dram_addr: usize, length: u64) { let audio_queued = unsafe { sdl3_sys::audio::SDL_GetAudioStreamQueued(device.ui.audio_stream) } as f64; - let acceptable_latency = (device.ui.audio_freq * 0.2) * 4.0; - let min_latency = (device.ui.audio_freq * 0.02) * 4.0; + let acceptable_latency = (device.ai.freq as f64 * 0.2) * 4.0; + let min_latency = (device.ai.freq as f64 * 0.02) * 4.0; if audio_queued < min_latency { let silence_buffer: Vec = vec![0; min_latency as usize & !3]; diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 9dd3823..daf6571 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -1,6 +1,4 @@ -use crate::device; -use crate::netplay; -use crate::ui; +use crate::{device, netplay, ui}; use eframe::egui; pub mod gui_netplay; @@ -181,23 +179,8 @@ fn configure_profile(app: &mut GopherEguiApp, ctx: &egui::Context) { let profile_name = app.profile_name.clone(); let dinput = app.dinput; std::thread::spawn(move || { - if cfg!(target_os = "macos") { - let mut command = - std::process::Command::new(std::env::current_exe().unwrap()); - if dinput { - command.arg("--use-dinput"); - } - command.arg("--configure-input-profile"); - command.arg(profile_name); - - let status = command.status().expect("failed to execute process"); - if !status.success() { - panic!("process exited with: {}", status); - } - } else { - let mut game_ui = ui::Ui::new(); - ui::input::configure_input_profile(&mut game_ui, profile_name, dinput); - } + let mut game_ui = ui::Ui::new(); + ui::input::configure_input_profile(&mut game_ui, profile_name, dinput); }); app.configure_profile = false; if !app.profile_name.is_empty() @@ -322,6 +305,7 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { std::thread::Builder::new() .name("n64".to_string()) + .stack_size(env!("N64_STACK_SIZE").parse().unwrap()) .spawn(move || { let save_config_items = SaveConfig { selected_controller, @@ -333,24 +317,7 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { emulate_vru, }; - if cfg!(target_os = "macos") && file.is_some() { - // mac os requires the process to be started on the main thread - // this means that netplay and VRU emulation will not work on mac os - { - let mut config = ui::config::Config::new(); - save_config(&mut config, controller_paths, save_config_items); - } - let mut command = std::process::Command::new(std::env::current_exe().unwrap()); - if fullscreen { - command.arg("--fullscreen"); - } - command.arg(file.unwrap().path()); - - let status = command.status().expect("failed to execute process"); - if !status.success() { - panic!("process exited with: {}", status); - } - } else if file.is_some() || netplay { + if file.is_some() || netplay { let running_file = cache_dir.join("game_running"); if running_file.exists() { println!("Game already running"); @@ -372,20 +339,22 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { netplay_error_notifier, gui_ctx, )); - device::run_game(rom_contents, &mut device, fullscreen); + device.ui.fullscreen = fullscreen; + device::run_game(rom_contents, &mut device); netplay::close(&mut device); } else { if emulate_vru { - device.vru.window_notifier = Some(vru_window_notifier); - device.vru.word_receiver = Some(vru_word_receiver); - device.vru.gui_ctx = Some(gui_ctx); + device.vru_window.window_notifier = Some(vru_window_notifier); + device.vru_window.word_receiver = Some(vru_word_receiver); + device.vru_window.gui_ctx = Some(gui_ctx); } let rom_contents = device::get_rom_contents(file.unwrap().path()); if rom_contents.is_empty() { println!("Could not read rom file"); } else { - device::run_game(rom_contents, &mut device, fullscreen); + device.ui.fullscreen = fullscreen; + device::run_game(rom_contents, &mut device); } } let result = std::fs::remove_file(running_file); @@ -437,8 +406,7 @@ impl eframe::App for GopherEguiApp { if ui.button("Open ROM").clicked() { open_rom(self, ctx); } - if !cfg!(target_os = "macos") - && ui.button("Netplay: Create Session").clicked() + if ui.button("Netplay: Create Session").clicked() && !self.dirs.cache_dir.join("game_running").exists() { self.netplay.create = true; @@ -452,8 +420,7 @@ impl eframe::App for GopherEguiApp { self.configure_profile = true; } - if !cfg!(target_os = "macos") - && ui.button("Netplay: Join Session").clicked() + if ui.button("Netplay: Join Session").clicked() && !self.dirs.cache_dir.join("game_running").exists() { self.netplay.join = true; @@ -513,12 +480,12 @@ impl eframe::App for GopherEguiApp { ui.checkbox(&mut self.integer_scaling, "Integer Scaling"); ui.checkbox(&mut self.fullscreen, "Fullscreen (Esc closes game)"); ui.add_space(32.0); - if !cfg!(target_os = "macos") { - ui.checkbox( - &mut self.emulate_vru, - "Emulate VRU (connects VRU to controller port 4)", - ); - } + + ui.checkbox( + &mut self.emulate_vru, + "Emulate VRU (connects VRU to controller port 4)", + ); + ui.add_space(32.0); ui.label(format!("Version: {}", env!("CARGO_PKG_VERSION"))); }); diff --git a/src/ui/storage.rs b/src/ui/storage.rs index c10a72c..f9f9d69 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -1,5 +1,4 @@ -use crate::netplay; -use crate::ui; +use crate::{netplay, ui}; use std::io::Read; use std::io::Write; @@ -21,10 +20,12 @@ pub struct Paths { pub pak_file_path: std::path::PathBuf, pub sdcard_file_path: std::path::PathBuf, pub romsave_file_path: std::path::PathBuf, + pub savestate_file_path: std::path::PathBuf, } // the bool indicates whether the save has been written to // if that is the case, it will be flushed to the disk when the program closes +#[derive(serde::Serialize, serde::Deserialize)] pub struct Saves { pub eeprom: (Vec, bool), pub sram: (Vec, bool), @@ -122,7 +123,9 @@ pub fn get_game_name(rom: &[u8]) -> String { pub fn init(ui: &mut ui::Ui, rom: &[u8]) { ui.save_type = get_save_type(rom, &ui.game_id); - let base_path = ui.dirs.data_dir.join("saves"); + let saves_path = ui.dirs.data_dir.join("saves"); + + let states_path = ui.dirs.data_dir.join("states"); let game_name = get_game_name(rom); @@ -132,35 +135,40 @@ pub fn init(ui: &mut ui::Ui, rom: &[u8]) { &game_name }; - ui.paths.eep_file_path.clone_from(&base_path); + ui.paths.eep_file_path.clone_from(&saves_path); ui.paths .eep_file_path .push(prefix.to_owned() + "-" + &ui.game_hash + ".eep"); - ui.paths.sra_file_path.clone_from(&base_path); + ui.paths.sra_file_path.clone_from(&saves_path); ui.paths .sra_file_path .push(prefix.to_owned() + "-" + &ui.game_hash + ".sra"); - ui.paths.fla_file_path.clone_from(&base_path); + ui.paths.fla_file_path.clone_from(&saves_path); ui.paths .fla_file_path .push(prefix.to_owned() + "-" + &ui.game_hash + ".fla"); - ui.paths.pak_file_path.clone_from(&base_path); + ui.paths.pak_file_path.clone_from(&saves_path); ui.paths .pak_file_path .push(prefix.to_owned() + "-" + &ui.game_hash + ".mpk"); - ui.paths.sdcard_file_path.clone_from(&base_path); + ui.paths.sdcard_file_path.clone_from(&saves_path); ui.paths .sdcard_file_path .push(prefix.to_owned() + "-" + &ui.game_hash + ".img"); - ui.paths.romsave_file_path.clone_from(&base_path); + ui.paths.romsave_file_path.clone_from(&saves_path); ui.paths .romsave_file_path .push(prefix.to_owned() + "-" + &ui.game_hash + ".romsave"); + + ui.paths.savestate_file_path.clone_from(&states_path); + ui.paths + .savestate_file_path + .push(prefix.to_owned() + "-" + &ui.game_hash + ".state"); } pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { @@ -220,7 +228,7 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { let mut compressed_sd = Vec::new(); if !ui.saves.sdcard.0.is_empty() { - compressed_sd = compress_file(&ui.saves.sdcard.0); + compressed_sd = compress_file(&[(&ui.saves.sdcard.0, "save")]); } netplay::send_save( netplay.as_mut().unwrap(), @@ -232,7 +240,7 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { let mut compressed_romsave = Vec::new(); if !ui.saves.romsave.0.is_empty() { compressed_romsave = - compress_file(&postcard::to_stdvec(&ui.saves.romsave.0).unwrap()); + compress_file(&[(&postcard::to_stdvec(&ui.saves.romsave.0).unwrap(), "save")]); } netplay::send_save( netplay.as_mut().unwrap(), @@ -249,41 +257,43 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { let mut compressed_sd = Vec::new(); netplay::receive_save(netplay.as_mut().unwrap(), "img", &mut compressed_sd); if !compressed_sd.is_empty() { - ui.saves.sdcard.0 = decompress_file(&compressed_sd); + ui.saves.sdcard.0 = decompress_file(&compressed_sd, "save"); } let mut compressed_romsave = Vec::new(); netplay::receive_save(netplay.as_mut().unwrap(), "rom", &mut compressed_romsave); if !compressed_romsave.is_empty() { - let romsave_bytes = decompress_file(&compressed_romsave); + let romsave_bytes = decompress_file(&compressed_romsave, "save"); ui.saves.romsave.0 = postcard::from_bytes(&romsave_bytes).unwrap(); } } } } -fn decompress_file(input: &[u8]) -> Vec { +pub fn decompress_file(input: &[u8], name: &str) -> Vec { let mut decompressed_file = Vec::new(); { let mut reader = zip::ZipArchive::new(std::io::Cursor::new(input)).unwrap(); - let mut file = reader.by_index(0).unwrap(); + let mut file = reader.by_name(name).unwrap(); file.read_to_end(&mut decompressed_file).unwrap(); } decompressed_file } -fn compress_file(input: &[u8]) -> Vec { +pub fn compress_file(data: &[(&[u8], &str)]) -> Vec { let mut compressed_file = Vec::new(); { let mut writer = zip::ZipWriter::new(std::io::Cursor::new(&mut compressed_file)); - writer - .start_file( - "save", - zip::write::SimpleFileOptions::default() - .compression_method(zip::CompressionMethod::Deflated), - ) - .unwrap(); - writer.write_all(input).unwrap(); + for item in data { + writer + .start_file( + item.1, + zip::write::SimpleFileOptions::default() + .compression_method(zip::CompressionMethod::Zstd), + ) + .unwrap(); + writer.write_all(item.0).unwrap(); + } } compressed_file } diff --git a/src/ui/video.rs b/src/ui/video.rs index ee4000d..067afd6 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -1,16 +1,15 @@ #![allow(non_snake_case)] include!(concat!(env!("OUT_DIR"), "/parallel_bindings.rs")); -use crate::device; -use crate::ui; +use crate::{device, ui}; -pub fn init(device: &mut device::Device, fullscreen: bool) { +pub fn init(device: &mut device::Device) { ui::sdl_init(sdl3_sys::init::SDL_INIT_VIDEO); let title = std::ffi::CString::new("gopher64").unwrap(); let mut flags = sdl3_sys::video::SDL_WINDOW_VULKAN; - if fullscreen { + if device.ui.fullscreen { flags |= sdl3_sys::video::SDL_WINDOW_FULLSCREEN; } else { flags |= sdl3_sys::video::SDL_WINDOW_RESIZABLE; @@ -41,7 +40,7 @@ pub fn init(device: &mut device::Device, fullscreen: bool) { gfx_info, device.ui.config.video.upscale, device.ui.config.video.integer_scaling, - fullscreen, + device.ui.fullscreen, ) } } @@ -53,11 +52,38 @@ pub fn close(ui: &ui::Ui) { } } -pub fn update_screen() -> bool { +pub fn update_screen() { // when the window is closed, running is set to false unsafe { rdp_update_screen() } } +pub fn load_state(device: &mut device::Device) { + let gfx_info = GFX_INFO { + RDRAM: device.rdram.mem.as_mut_ptr(), + DMEM: device.rsp.mem.as_mut_ptr(), + RDRAM_SIZE: device.rdram.size, + DPC_CURRENT_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_CURRENT_REG as usize], + DPC_START_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_START_REG as usize], + DPC_END_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_END_REG as usize], + DPC_STATUS_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_STATUS_REG as usize], + }; + unsafe { + rdp_new_processor(gfx_info, device.ui.config.video.upscale); + } +} + +pub fn check_callback(device: &mut device::Device) { + let callback = unsafe { rdp_check_callback() }; + device.cpu.running = callback.emu_running; + if device.netplay.is_none() { + if callback.save_state { + device.save_state = true; + } else if callback.load_state { + device.load_state = true; + } + } +} + pub fn set_register(reg: u32, value: u32) { unsafe { rdp_set_vi_register(reg, value); From 8084a8cb80fb5eea9c06693f5ea6a5c62a6b594e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 11 Feb 2025 15:26:25 +0100 Subject: [PATCH 0301/1117] update cargo packages (#237) --- Cargo.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fb70400..12649e0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -448,9 +448,9 @@ dependencies = [ [[package]] name = "bzip2-sys" -version = "0.1.11+1.0.8" +version = "0.1.12+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +checksum = "72ebc2f1a417f01e1da30ef264ee86ae31d2dcd2d603ea283d3c244a883ca2a9" dependencies = [ "cc", "libc", @@ -616,9 +616,9 @@ dependencies = [ [[package]] name = "cmake" -version = "0.1.53" +version = "0.1.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24a03c8b52922d68a1589ad61032f2c1aa5a8158d2aa0d93c6e9534944bbad6" +checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" dependencies = [ "cc", ] @@ -797,9 +797,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.7.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e60eed09d8c01d3cee5b7d30acb059b76614c918fa0f992e0dd6eeb10daad6f" +checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" [[package]] name = "deflate64" @@ -3805,9 +3805,9 @@ checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" [[package]] name = "toml_edit" -version = "0.22.23" +version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02a8b472d1a3d7c18e2d61a489aee3453fd9031c33e4f55bd533f4a7adca1bee" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ "indexmap", "toml_datetime", @@ -4766,9 +4766,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86e376c75f4f43f44db463cf729e0d3acbf954d13e22c51e26e4c264b4ab545f" +checksum = "59690dea168f2198d1a3b0cac23b8063efcd11012f10ae4698f284808c8ef603" dependencies = [ "memchr", ] From a3e67d7ad90704656688ef436084f5c5503082a7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 11 Feb 2025 15:32:02 +0100 Subject: [PATCH 0302/1117] use cache-apt-pkgs-action@v1 (#238) --- .github/workflows/build.yml | 2 +- .github/workflows/lint.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7941678..6e08476 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,7 +30,7 @@ jobs: rustflags: "" - name: Install SDL Dependencies # https://wiki.libsdl.org/SDL3/README/linux#build-dependencies - uses: awalsh128/cache-apt-pkgs-action@latest + uses: awalsh128/cache-apt-pkgs-action@v1 with: packages: build-essential git make \ pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \ diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index cfaccc8..49e75fc 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -21,7 +21,7 @@ jobs: components: clippy, rustfmt - name: Install SDL Dependencies # https://wiki.libsdl.org/SDL3/README/linux#build-dependencies - uses: awalsh128/cache-apt-pkgs-action@latest + uses: awalsh128/cache-apt-pkgs-action@v1 with: packages: build-essential git make \ pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \ From ea012b45878fe7dfd3a25eedd97de3ec4ed86f15 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 11 Feb 2025 15:48:46 +0100 Subject: [PATCH 0303/1117] bump to 1.0.6 (#239) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 12649e0..88bc72c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1482,7 +1482,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.0.5" +version = "1.0.6" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index 9d79162..4dffb2a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.5" +version = "1.0.6" edition = "2021" rust-version = "1.82" From bda50f8d9d3040cdc5b5ee085506f58abab701c5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Feb 2025 06:13:45 +0100 Subject: [PATCH 0304/1117] Bump clap from 4.5.28 to 4.5.29 (#240) Bumps [clap](https://github.com/clap-rs/clap) from 4.5.28 to 4.5.29. - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.28...clap_complete-v4.5.29) --- updated-dependencies: - dependency-name: clap dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 88bc72c..bcd8e2a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -567,9 +567,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.28" +version = "4.5.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e77c3243bd94243c03672cb5154667347c457ca271254724f9f393aee1c05ff" +checksum = "8acebd8ad879283633b343856142139f2da2317c96b05b4dd6181c61e2480184" dependencies = [ "clap_builder", "clap_derive", @@ -577,9 +577,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.27" +version = "4.5.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7" +checksum = "f6ba32cbda51c7e1dfd49acc1457ba1a7dec5b64fe360e828acb13ca8dc9c2f9" dependencies = [ "anstream", "anstyle", diff --git a/Cargo.toml b/Cargo.toml index 4dffb2a..efd5984 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,7 +29,7 @@ tungstenite = "0.26" socket2 = "0.5" fatfs = "0.3" postcard = { version = "1.1", features = ["use-std"] } -clap = { version = "4.4", features = ["derive"] } +clap = { version = "4.5", features = ["derive"] } reqwest = { version = "0.12", default-features = false, features = ["http2","rustls-tls","charset","json"] } [build-dependencies] From b67268ff622c4b4a0dd63e800fadf87b182adb06 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 12 Feb 2025 09:19:39 +0100 Subject: [PATCH 0305/1117] fix PAL aspect ratio (#241) --- parallel-rdp/interface.cpp | 4 ++-- parallel-rdp/interface.hpp | 1 + src/ui/video.rs | 13 +++++++++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 5930ec2..f6bbd31 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -245,8 +245,8 @@ void rdp_close() static void calculate_viewport(float *x, float *y, float *width, float *height) { - const int32_t display_width = 320; - const int32_t display_height = 240; + const int32_t display_width = gfx_info.PAL ? 360 : 320; + const int32_t display_height = gfx_info.PAL ? 288 : 240; int w, h; SDL_GetWindowSize(window, &w, &h); diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 7c8a51b..00fcd9c 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -16,6 +16,7 @@ extern "C" uint32_t *DPC_START_REG; uint32_t *DPC_END_REG; uint32_t *DPC_STATUS_REG; + bool PAL; } GFX_INFO; typedef struct diff --git a/src/ui/video.rs b/src/ui/video.rs index 067afd6..6138f3f 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -15,8 +15,15 @@ pub fn init(device: &mut device::Device) { flags |= sdl3_sys::video::SDL_WINDOW_RESIZABLE; } - device.ui.window = - unsafe { sdl3_sys::video::SDL_CreateWindow(title.as_ptr(), 640, 480, flags) }; + let mut window_width = 640; + let mut window_height = 480; + if device.cart.pal { + window_width = 720; + window_height = 576; + } + device.ui.window = unsafe { + sdl3_sys::video::SDL_CreateWindow(title.as_ptr(), window_width, window_height, flags) + }; if device.ui.window.is_null() { panic!("Could not create window"); } @@ -32,6 +39,7 @@ pub fn init(device: &mut device::Device) { DPC_START_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_START_REG as usize], DPC_END_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_END_REG as usize], DPC_STATUS_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_STATUS_REG as usize], + PAL: device.cart.pal, }; unsafe { @@ -66,6 +74,7 @@ pub fn load_state(device: &mut device::Device) { DPC_START_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_START_REG as usize], DPC_END_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_END_REG as usize], DPC_STATUS_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_STATUS_REG as usize], + PAL: device.cart.pal, }; unsafe { rdp_new_processor(gfx_info, device.ui.config.video.upscale); From 0faf33fcfa6837e26dddc2676a3374ec8fdc1dd8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 12 Feb 2025 10:14:06 +0100 Subject: [PATCH 0306/1117] PAL aspect ratio adjustment (#242) --- parallel-rdp/interface.cpp | 2 +- src/ui/video.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index f6bbd31..eb3fa52 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -245,7 +245,7 @@ void rdp_close() static void calculate_viewport(float *x, float *y, float *width, float *height) { - const int32_t display_width = gfx_info.PAL ? 360 : 320; + const int32_t display_width = gfx_info.PAL ? 384 : 320; const int32_t display_height = gfx_info.PAL ? 288 : 240; int w, h; diff --git a/src/ui/video.rs b/src/ui/video.rs index 6138f3f..49b41ef 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -18,7 +18,7 @@ pub fn init(device: &mut device::Device) { let mut window_width = 640; let mut window_height = 480; if device.cart.pal { - window_width = 720; + window_width = 768; window_height = 576; } device.ui.window = unsafe { From 63b2ed69e4b7b216698ac6faebc89bc160b58ad5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 12 Feb 2025 16:09:42 +0100 Subject: [PATCH 0307/1117] don't modify cart.rom (#243) * don't modify cart.rom * don't modify cart.rom * don't modify cart.rom * more * more --- src/device.rs | 1 - src/device/cart/rom.rs | 75 ++++++++++++++++++++---------------------- 2 files changed, 35 insertions(+), 41 deletions(-) diff --git a/src/device.rs b/src/device.rs index 9f95b35..46aaef6 100644 --- a/src/device.rs +++ b/src/device.rs @@ -66,7 +66,6 @@ pub fn run_game(rom_contents: Vec, device: &mut Device) { ui::storage::init(&mut device.ui, &device.cart.rom); ui::storage::load_saves(&mut device.ui, &mut device.netplay); - cart::rom::load_rom_save(device); cpu::run(device); diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index be5ef93..888427b 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -3,17 +3,29 @@ use sha2::{Digest, Sha256}; const CART_MASK: usize = 0xFFFFFFF; +fn read_cart_word(device: &mut device::Device, address: usize) -> u32 { + let mut data: [u8; 4] = device.cart.rom[address..address + 4].try_into().unwrap(); + for i in 0..4 { + if device + .ui + .saves + .romsave + .0 + .contains_key(&(address as u32 + i)) + { + data[i as usize] = device.ui.saves.romsave.0[&(address as u32 + i)]; + } + } + u32::from_be_bytes(data) +} + pub fn read_mem_fast( device: &mut device::Device, address: u64, _access_size: device::memory::AccessSize, ) -> u32 { let masked_address = address as usize & CART_MASK; - u32::from_be_bytes( - device.cart.rom[masked_address..masked_address + 4] - .try_into() - .unwrap(), - ) + read_cart_word(device, masked_address) } pub fn read_mem( @@ -29,29 +41,22 @@ pub fn read_mem( device.cart.latch } else { let masked_address = address as usize & CART_MASK; - u32::from_be_bytes( - device.cart.rom[masked_address..masked_address + 4] - .try_into() - .unwrap(), - ) + read_cart_word(device, masked_address) } } pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { if device.cart.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] != 0 { let masked_address = address as usize & CART_MASK; - let mut data = u32::from_be_bytes( - device.cart.rom[masked_address..masked_address + 4] - .try_into() - .unwrap(), - ); + let mut data = read_cart_word(device, masked_address); device::memory::masked_write_32(&mut data, value, mask); - device.cart.rom[masked_address..masked_address + 4].copy_from_slice(&data.to_be_bytes()); - for i in 0..4 { - device.ui.saves.romsave.0.insert( - (masked_address + i) as u32, - device.cart.rom[masked_address + i], - ); + for (i, item) in data.to_be_bytes().iter().enumerate() { + device + .ui + .saves + .romsave + .0 + .insert((masked_address + i) as u32, *item); } device.ui.saves.romsave.1 = true; } @@ -80,15 +85,10 @@ pub fn dma_read( for i in 0..length { if cart_addr + i < device.cart.rom.len() as u32 { - device.cart.rom[(cart_addr + i) as usize] = - device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap]; - - device - .ui - .saves - .romsave - .0 - .insert(cart_addr + i, device.cart.rom[(cart_addr + i) as usize]); + device.ui.saves.romsave.0.insert( + cart_addr + i, + device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap], + ); device.ui.saves.romsave.1 = true; } @@ -110,7 +110,11 @@ pub fn dma_write( let mut i = dram_addr; let mut j = cart_addr; while i < dram_addr + length && j < device.cart.rom.len() as u32 { - device.rdram.mem[i as usize ^ device.byte_swap] = device.cart.rom[j as usize]; + if device.ui.saves.romsave.0.contains_key(&j) { + device.rdram.mem[i as usize ^ device.byte_swap] = device.ui.saves.romsave.0[&j]; + } else { + device.rdram.mem[i as usize ^ device.byte_swap] = device.cart.rom[j as usize]; + } i += 1; j += 1; } @@ -135,15 +139,6 @@ pub fn init(device: &mut device::Device, rom_file: Vec) { } } -pub fn load_rom_save(device: &mut device::Device) { - if device.ui.saves.romsave.0.is_empty() { - return; - } - for (key, value) in device.ui.saves.romsave.0.iter() { - device.cart.rom[*key as usize] = *value - } -} - fn set_system_region(device: &mut device::Device, country: u8) { let pal_codes: [u8; 8] = [b'D', b'F', b'I', b'P', b'S', b'U', b'X', b'Y']; for i in pal_codes { From 6ee55ce4ca9af754fa97b40f65f65445f62376c5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 12 Feb 2025 17:53:17 +0100 Subject: [PATCH 0308/1117] add a way to show internal FPS (#244) --- src/device.rs | 2 ++ src/device/vi.rs | 39 ++++++++++++++++++--------------------- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/src/device.rs b/src/device.rs index 46aaef6..5f98d9b 100644 --- a/src/device.rs +++ b/src/device.rs @@ -436,6 +436,8 @@ impl Device { count_per_scanline: 0, limiter: None, vi_counter: 0, + last_origin: 0, + internal_frame_counter: 0, }, vru_window: controller::vru::VruWindow { window_notifier: None, diff --git a/src/device/vi.rs b/src/device/vi.rs index cb884b1..16ca49f 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -2,7 +2,7 @@ use crate::{device, netplay, ui}; use governor::clock::Clock; const VI_STATUS_REG: u32 = 0; -//const VI_ORIGIN_REG: u32 = 1; +const VI_ORIGIN_REG: u32 = 1; //const VI_WIDTH_REG: u32 = 2; //const VI_V_INTR_REG: u32 = 3; const VI_CURRENT_REG: u32 = 4; @@ -27,10 +27,10 @@ pub struct Vi { pub limiter: Option, pub count_per_scanline: u64, pub vi_counter: u64, + pub last_origin: u32, + pub internal_frame_counter: u64, } -//static mut FRAME_COUNTER: u64 = 0; - const LIMIT_BUFFER: u64 = 3; pub fn set_expected_refresh_rate(device: &mut device::Device) { @@ -109,6 +109,13 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u set_expected_refresh_rate(device); } } + VI_ORIGIN_REG => { + device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); + if device.vi.regs[reg as usize] != device.vi.last_origin { + device.vi.last_origin = device.vi.regs[reg as usize]; + device.vi.internal_frame_counter += 1; + } + } _ => { device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); } @@ -120,12 +127,6 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { ui::video::update_screen(); ui::video::check_callback(device); - /* - unsafe { - FRAME_COUNTER += 1; - } - */ - let mut enable_speed_limiter = true; if device.netplay.is_some() { netplay::send_sync_check(device); @@ -137,6 +138,14 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { speed_limiter(device); } + /* + let vis = if device.cart.pal { 50 } else { 60 }; + if device.vi.vi_counter % vis == 0 { + println!("FPS: {}", device.vi.internal_frame_counter); + device.vi.internal_frame_counter = 0; + } + */ + /* toggle vi field if in interlaced mode */ device.vi.field ^= (device.vi.regs[VI_STATUS_REG as usize] >> 6) & 0x1; @@ -155,18 +164,6 @@ pub fn init(device: &mut device::Device) { } else { device.vi.clock = 48681812 } - /* - std::thread::spawn(move || { - let mut last_count = 0; - loop { - unsafe { - println!("{:?}", FRAME_COUNTER - last_count); - last_count = FRAME_COUNTER; - } - std::thread::sleep(std::time::Duration::from_secs(1)); - } - }); - */ } fn speed_limiter(device: &device::Device) { From d0965c03e12fbee0908df6ddba4b520a41193c04 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 12 Feb 2025 21:18:54 +0100 Subject: [PATCH 0309/1117] dynamically calculate speed limit frequency (#245) * dynamically calculate speed limit frequency * dynamically calculate speed limit frequency * dynamically calculate speed limit frequency * more --- src/device.rs | 4 ++++ src/device/vi.rs | 58 +++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 52 insertions(+), 10 deletions(-) diff --git a/src/device.rs b/src/device.rs index 5f98d9b..00c7278 100644 --- a/src/device.rs +++ b/src/device.rs @@ -438,6 +438,10 @@ impl Device { vi_counter: 0, last_origin: 0, internal_frame_counter: 0, + min_wait_time: std::time::Duration::from_secs(1), + frame_time: 0.0, + limit_freq: 2, + limit_freq_check: std::time::Instant::now(), }, vru_window: controller::vru::VruWindow { window_notifier: None, diff --git a/src/device/vi.rs b/src/device/vi.rs index 16ca49f..9258f79 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -29,24 +29,37 @@ pub struct Vi { pub vi_counter: u64, pub last_origin: u32, pub internal_frame_counter: u64, + pub min_wait_time: std::time::Duration, + pub frame_time: f64, + pub limit_freq: u64, + #[serde(skip)] + #[serde(default = "std::time::Instant::now")] + pub limit_freq_check: std::time::Instant, } -const LIMIT_BUFFER: u64 = 3; +const MAX_LIMIT_FREQ: u64 = 3; pub fn set_expected_refresh_rate(device: &mut device::Device) { let expected_refresh_rate = device.vi.clock as f64 / (device.vi.regs[VI_V_SYNC_REG as usize] + 1) as f64 / ((device.vi.regs[VI_H_SYNC_REG as usize] & 0xFFF) + 1) as f64 * 2.0; + device.vi.frame_time = 1.0 / expected_refresh_rate; device.vi.delay = (device.cpu.clock_rate as f64 / expected_refresh_rate) as u64; device.vi.count_per_scanline = device.vi.delay / (device.vi.regs[VI_V_SYNC_REG as usize] + 1) as u64; + create_limiter(device); +} + +fn create_limiter(device: &mut device::Device) { let quota = governor::Quota::with_period(std::time::Duration::from_secs_f64( - (1.0 / expected_refresh_rate) * LIMIT_BUFFER as f64, + device.vi.frame_time * device.vi.limit_freq as f64, )) .unwrap(); - device.vi.limiter = Some(governor::RateLimiter::direct(quota)) + device.vi.limiter = Some(governor::RateLimiter::direct(quota)); + let _ = device.vi.limiter.as_ref().unwrap().check(); + //println!("new limit freq: {}", device.vi.limit_freq); } fn set_vertical_interrupt(device: &mut device::Device) { @@ -134,16 +147,16 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { } device.vi.vi_counter += 1; - if device.vi.vi_counter % LIMIT_BUFFER == 0 && enable_speed_limiter { + if device.vi.vi_counter % device.vi.limit_freq == 0 && enable_speed_limiter { speed_limiter(device); } /* - let vis = if device.cart.pal { 50 } else { 60 }; - if device.vi.vi_counter % vis == 0 { - println!("FPS: {}", device.vi.internal_frame_counter); - device.vi.internal_frame_counter = 0; - } + let vis = if device.cart.pal { 50 } else { 60 }; + if device.vi.vi_counter % vis == 0 { + println!("FPS: {}", device.vi.internal_frame_counter); + device.vi.internal_frame_counter = 0; + } */ /* toggle vi field if in interlaced mode */ @@ -166,13 +179,38 @@ pub fn init(device: &mut device::Device) { } } -fn speed_limiter(device: &device::Device) { +fn speed_limiter(device: &mut device::Device) { let result = device.vi.limiter.as_ref().unwrap().check(); if result.is_err() { let outcome = result.unwrap_err(); let dur = outcome.wait_time_from(governor::clock::DefaultClock::default().now()); spin_sleep::sleep(dur); + if dur < device.vi.min_wait_time { + device.vi.min_wait_time = dur; + } let _ = device.vi.limiter.as_ref().unwrap().check(); + } else { + device.vi.min_wait_time = std::time::Duration::from_secs(0); + } + + if std::time::Instant::now() + .duration_since(device.vi.limit_freq_check) + .as_secs_f64() + > 1.0 + { + if device.vi.min_wait_time.as_secs_f64() == 0.0 && device.vi.limit_freq < MAX_LIMIT_FREQ { + device.vi.limit_freq += 1; + create_limiter(device); + } else if device.vi.min_wait_time.as_secs_f64() > device.vi.frame_time + && device.vi.limit_freq > 1 + { + device.vi.limit_freq -= 1; + create_limiter(device); + } + + //println!("limit freq: {}", device.vi.limit_freq); + device.vi.min_wait_time = std::time::Duration::from_secs(1); + device.vi.limit_freq_check = std::time::Instant::now(); } } From 2d09425ca1a6e8eb74cdcb47eff9ef41ba0a9fb9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 12 Feb 2025 22:04:30 +0100 Subject: [PATCH 0310/1117] fix rsp reserved commands (#246) --- src/device/rsp_cpu.rs | 128 +++++++++++++++--------------- src/device/rsp_su_instructions.rs | 7 +- 2 files changed, 69 insertions(+), 66 deletions(-) diff --git a/src/device/rsp_cpu.rs b/src/device/rsp_cpu.rs index 451f397..fab7f51 100644 --- a/src/device/rsp_cpu.rs +++ b/src/device/rsp_cpu.rs @@ -288,70 +288,70 @@ pub fn map_instructions(device: &mut device::Device) { ]; device.rsp.cpu.special_instrs = [ - device::rsp_su_instructions::sll, // 0 - device::rsp_su_instructions::reserved, // 1 - device::rsp_su_instructions::srl, // 2 - device::rsp_su_instructions::sra, // 3 - device::rsp_su_instructions::sllv, // 4 - device::rsp_su_instructions::reserved, // 5 - device::rsp_su_instructions::srlv, // 6 - device::rsp_su_instructions::srav, // 7 - device::rsp_su_instructions::jr, // 8 - device::rsp_su_instructions::jalr, // 9 - device::rsp_su_instructions::reserved, // 10 - device::rsp_su_instructions::reserved, // 11 - device::rsp_su_instructions::reserved, // 12 - device::rsp_su_instructions::break_, // 13 - device::rsp_su_instructions::reserved, // 14 - device::rsp_su_instructions::reserved, // 15 - device::rsp_su_instructions::reserved, // 16 - device::rsp_su_instructions::reserved, // 17 - device::rsp_su_instructions::reserved, // 18 - device::rsp_su_instructions::reserved, // 19 - device::rsp_su_instructions::reserved, // 20 - device::rsp_su_instructions::reserved, // 21 - device::rsp_su_instructions::reserved, // 22 - device::rsp_su_instructions::reserved, // 23 - device::rsp_su_instructions::reserved, // 24 - device::rsp_su_instructions::reserved, // 25 - device::rsp_su_instructions::reserved, // 26 - device::rsp_su_instructions::reserved, // 27 - device::rsp_su_instructions::reserved, // 28 - device::rsp_su_instructions::reserved, // 29 - device::rsp_su_instructions::reserved, // 30 - device::rsp_su_instructions::reserved, // 31 - device::rsp_su_instructions::add, // 32 - device::rsp_su_instructions::addu, // 33 - device::rsp_su_instructions::sub, // 34 - device::rsp_su_instructions::subu, // 35 - device::rsp_su_instructions::and, // 36 - device::rsp_su_instructions::or, // 37 - device::rsp_su_instructions::xor, // 38 - device::rsp_su_instructions::nor, // 39 - device::rsp_su_instructions::reserved, // 40 - device::rsp_su_instructions::reserved, // 41 - device::rsp_su_instructions::slt, // 42 - device::rsp_su_instructions::sltu, // 43 - device::rsp_su_instructions::reserved, // 44 - device::rsp_su_instructions::reserved, // 45 - device::rsp_su_instructions::reserved, // 46 - device::rsp_su_instructions::reserved, // 47 - device::rsp_su_instructions::reserved, // 48 - device::rsp_su_instructions::reserved, // 49 - device::rsp_su_instructions::reserved, // 50 - device::rsp_su_instructions::reserved, // 51 - device::rsp_su_instructions::reserved, // 52 - device::rsp_su_instructions::reserved, // 53 - device::rsp_su_instructions::reserved, // 54 - device::rsp_su_instructions::reserved, // 55 - device::rsp_su_instructions::reserved, // 56 - device::rsp_su_instructions::reserved, // 57 - device::rsp_su_instructions::reserved, // 58 - device::rsp_su_instructions::reserved, // 59 - device::rsp_su_instructions::reserved, // 60 - device::rsp_su_instructions::reserved, // 61 - device::rsp_su_instructions::reserved, // 62 - device::rsp_su_instructions::reserved, // 63 + device::rsp_su_instructions::sll, // 0 + device::rsp_su_instructions::special_reserved, // 1 + device::rsp_su_instructions::srl, // 2 + device::rsp_su_instructions::sra, // 3 + device::rsp_su_instructions::sllv, // 4 + device::rsp_su_instructions::special_reserved, // 5 + device::rsp_su_instructions::srlv, // 6 + device::rsp_su_instructions::srav, // 7 + device::rsp_su_instructions::jr, // 8 + device::rsp_su_instructions::jalr, // 9 + device::rsp_su_instructions::special_reserved, // 10 + device::rsp_su_instructions::special_reserved, // 11 + device::rsp_su_instructions::special_reserved, // 12 + device::rsp_su_instructions::break_, // 13 + device::rsp_su_instructions::special_reserved, // 14 + device::rsp_su_instructions::special_reserved, // 15 + device::rsp_su_instructions::special_reserved, // 16 + device::rsp_su_instructions::special_reserved, // 17 + device::rsp_su_instructions::special_reserved, // 18 + device::rsp_su_instructions::special_reserved, // 19 + device::rsp_su_instructions::special_reserved, // 20 + device::rsp_su_instructions::special_reserved, // 21 + device::rsp_su_instructions::special_reserved, // 22 + device::rsp_su_instructions::special_reserved, // 23 + device::rsp_su_instructions::special_reserved, // 24 + device::rsp_su_instructions::special_reserved, // 25 + device::rsp_su_instructions::special_reserved, // 26 + device::rsp_su_instructions::special_reserved, // 27 + device::rsp_su_instructions::special_reserved, // 28 + device::rsp_su_instructions::special_reserved, // 29 + device::rsp_su_instructions::special_reserved, // 30 + device::rsp_su_instructions::special_reserved, // 31 + device::rsp_su_instructions::add, // 32 + device::rsp_su_instructions::addu, // 33 + device::rsp_su_instructions::sub, // 34 + device::rsp_su_instructions::subu, // 35 + device::rsp_su_instructions::and, // 36 + device::rsp_su_instructions::or, // 37 + device::rsp_su_instructions::xor, // 38 + device::rsp_su_instructions::nor, // 39 + device::rsp_su_instructions::special_reserved, // 40 + device::rsp_su_instructions::special_reserved, // 41 + device::rsp_su_instructions::slt, // 42 + device::rsp_su_instructions::sltu, // 43 + device::rsp_su_instructions::special_reserved, // 44 + device::rsp_su_instructions::special_reserved, // 45 + device::rsp_su_instructions::special_reserved, // 46 + device::rsp_su_instructions::special_reserved, // 47 + device::rsp_su_instructions::special_reserved, // 48 + device::rsp_su_instructions::special_reserved, // 49 + device::rsp_su_instructions::special_reserved, // 50 + device::rsp_su_instructions::special_reserved, // 51 + device::rsp_su_instructions::special_reserved, // 52 + device::rsp_su_instructions::special_reserved, // 53 + device::rsp_su_instructions::special_reserved, // 54 + device::rsp_su_instructions::special_reserved, // 55 + device::rsp_su_instructions::special_reserved, // 56 + device::rsp_su_instructions::special_reserved, // 57 + device::rsp_su_instructions::special_reserved, // 58 + device::rsp_su_instructions::special_reserved, // 59 + device::rsp_su_instructions::special_reserved, // 60 + device::rsp_su_instructions::special_reserved, // 61 + device::rsp_su_instructions::special_reserved, // 62 + device::rsp_su_instructions::special_reserved, // 63 ]; device.rsp.cpu.regimm_instrs = [ diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index 07d0e9f..36ef6fd 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -1204,6 +1204,9 @@ pub fn stv(device: &mut device::Device, opcode: u32) { } } -pub fn reserved(_device: &mut device::Device, _opcode: u32) { - panic!("rsp su reserved") +pub fn special_reserved(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.gpr[rd(opcode) as usize] = + device.rsp.cpu.gpr[rs(opcode) as usize] >> (device.rsp.cpu.gpr[rs(opcode) as usize] & 31) } + +pub fn reserved(_device: &mut device::Device, _opcode: u32) {} From 74c65750a33a5aaf58130c51cda6b91b0503422f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 13 Feb 2025 11:40:06 +0100 Subject: [PATCH 0311/1117] add some sdl window flags (#247) --- src/ui/video.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ui/video.rs b/src/ui/video.rs index 49b41ef..3bab3a6 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -14,6 +14,7 @@ pub fn init(device: &mut device::Device) { } else { flags |= sdl3_sys::video::SDL_WINDOW_RESIZABLE; } + flags |= sdl3_sys::video::SDL_WINDOW_INPUT_FOCUS; let mut window_width = 640; let mut window_height = 480; @@ -30,6 +31,7 @@ pub fn init(device: &mut device::Device) { if !unsafe { sdl3_sys::video::SDL_ShowWindow(device.ui.window) } { panic!("Could not show window"); } + unsafe { sdl3_sys::everything::SDL_HideCursor() }; let gfx_info = GFX_INFO { RDRAM: device.rdram.mem.as_mut_ptr(), From 2010b82c8ef4f7740c32e31fbb6eb12e927e214f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 13 Feb 2025 11:57:16 +0100 Subject: [PATCH 0312/1117] remove dead code --- parallel-rdp/wsi_platform.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/parallel-rdp/wsi_platform.cpp b/parallel-rdp/wsi_platform.cpp index 7a91423..5259c7c 100644 --- a/parallel-rdp/wsi_platform.cpp +++ b/parallel-rdp/wsi_platform.cpp @@ -61,7 +61,6 @@ void SDL_WSIPlatform::poll_input() void SDL_WSIPlatform::poll_input_async(Granite::InputTrackerHandler *handler) { - SDL_PumpEvents(); } void SDL_WSIPlatform::set_window(SDL_Window *_window) From b01bbaa82fe38a9e63ca3e7db3b22f583acf5430 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 13 Feb 2025 21:04:15 +0100 Subject: [PATCH 0313/1117] update cargo packages --- Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bcd8e2a..c94bc84 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2221,9 +2221,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" +checksum = "b3b1c9bd4fe1f0f8b387f6eb9eb3b4a1aa26185e5750efb9140301703f62cd1b" dependencies = [ "adler2", "simd-adler32", @@ -3184,9 +3184,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.22" +version = "0.23.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7" +checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" dependencies = [ "once_cell", "ring", From 500b4bb50537131d4319ff37b1202d84508fa41b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 13 Feb 2025 21:05:22 +0100 Subject: [PATCH 0314/1117] only try to assign enabled controllers (#248) --- src/ui/input.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/input.rs b/src/ui/input.rs index bef3737..3921800 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -705,7 +705,7 @@ pub fn init(ui: &mut ui::Ui) { let mut taken = [false; 4]; for i in 0..4 { let controller_assignment = &ui.config.input.controller_assignment[i]; - if controller_assignment.is_some() { + if controller_assignment.is_some() && ui.config.input.controller_enabled[i] { let mut joystick_id = 0; let assigned_path = controller_assignment.as_ref().unwrap(); From 3aca3c166472b073e02daab65513029b5498ad80 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 13 Feb 2025 21:28:47 +0100 Subject: [PATCH 0315/1117] bump to 1.0.7 (#249) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c94bc84..0f079ee 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1482,7 +1482,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.0.6" +version = "1.0.7" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index efd5984..b035b49 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.6" +version = "1.0.7" edition = "2021" rust-version = "1.82" From 8f20abe8137979eec306b9941515bb2ac624ffff Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 13 Feb 2025 22:09:17 +0100 Subject: [PATCH 0316/1117] update_screen after speed limiter (#250) --- src/device/vi.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index 9258f79..d50c45e 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -137,7 +137,6 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } pub fn vertical_interrupt_event(device: &mut device::Device) { - ui::video::update_screen(); ui::video::check_callback(device); let mut enable_speed_limiter = true; @@ -150,6 +149,7 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { if device.vi.vi_counter % device.vi.limit_freq == 0 && enable_speed_limiter { speed_limiter(device); } + ui::video::update_screen(); /* let vis = if device.cart.pal { 50 } else { 60 }; From df9ad377d3c47facf9d40602345bccfa92f5b9fc Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 14 Feb 2025 10:07:58 +0100 Subject: [PATCH 0317/1117] add cycles for rsp mfc0 (#251) * add cycles for rsp mfc0 * more --- src/device.rs | 1 + src/device/rdp.rs | 4 +++- src/device/rsp_cpu.rs | 3 +++ src/device/rsp_interface.rs | 5 +++-- src/device/rsp_su_instructions.rs | 1 + 5 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/device.rs b/src/device.rs index 00c7278..02e3d6e 100644 --- a/src/device.rs +++ b/src/device.rs @@ -357,6 +357,7 @@ impl Device { pc: 0, }, broken: false, + running: false, halted: false, sync_point: false, cycle_counter: 0, diff --git a/src/device/rdp.rs b/src/device/rdp.rs index cd35441..d9e76ba 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -53,7 +53,9 @@ pub fn read_regs_dpc( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { - device::cop0::add_cycles(device, 20); + if !device.rsp.cpu.running { + device::cop0::add_cycles(device, 20); + } let reg = (address & 0xFFFF) >> 2; match reg as u32 { DPC_STATUS_REG => { diff --git a/src/device/rsp_cpu.rs b/src/device/rsp_cpu.rs index fab7f51..7e382a6 100644 --- a/src/device/rsp_cpu.rs +++ b/src/device/rsp_cpu.rs @@ -34,6 +34,7 @@ pub struct Cpu { pub pipeline_full: bool, pub branch_state: BranchState, pub broken: bool, + pub running: bool, pub halted: bool, pub sync_point: bool, pub cycle_counter: u64, @@ -125,6 +126,7 @@ pub fn in_delay_slot_taken(device: &device::Device) -> bool { pub fn run(device: &mut device::Device) -> u64 { device.rsp.cpu.broken = false; device.rsp.cpu.cycle_counter = 0; + device.rsp.cpu.running = true; while !device.rsp.cpu.sync_point { device.rsp.cpu.instruction_type = InstructionType::Su; device.rsp.cpu.gpr[0] = 0; // gpr 0 is read only @@ -186,6 +188,7 @@ pub fn run(device: &mut device::Device) -> u64 { } } } + device.rsp.cpu.running = false; (device.rsp.cpu.cycle_counter as f64 * 1.5) as u64 // converting RCP clock to CPU clock } diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index bad92e8..2916cc3 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -267,7 +267,9 @@ pub fn read_regs( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { - device::cop0::add_cycles(device, 20); + if !device.rsp.cpu.running { + device::cop0::add_cycles(device, 20); + } let reg = (address & 0xFFFF) >> 2; match reg as u32 { SP_DMA_BUSY_REG | SP_DMA_FULL_REG => { @@ -292,7 +294,6 @@ pub fn read_regs( let value = device.rsp.regs[reg as usize]; if value == 1 { device.rsp.cpu.sync_point = true; - device.rsp.cpu.cycle_counter += 4; // needed for DK64 } device.rsp.regs[reg as usize] = 1; value diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index 36ef6fd..eb8a6f5 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -552,6 +552,7 @@ pub fn bgezal(device: &mut device::Device, opcode: u32) { } pub fn mfc0(device: &mut device::Device, opcode: u32) { + device.rsp.cpu.cycle_counter += 2; if rd(opcode) < device::rsp_interface::SP_REGS_COUNT { device.rsp.cpu.gpr[rt(opcode) as usize] = device::rsp_interface::read_regs( device, From b7d194e12d27ad0851d7b69e69ee901facabe32b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 14 Feb 2025 12:29:49 +0100 Subject: [PATCH 0318/1117] alt_return to toggle fullscreen (#252) * alt_return to toggle fullscreen * more --- parallel-rdp/interface.cpp | 9 ++++++++- src/ui/input.rs | 23 +++++++++++++++++++---- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index eb3fa52..39eb6ff 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -141,10 +141,17 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { wsi_platform->do_resize(); } - else if (event->type == SDL_EVENT_KEY_DOWN) + else if (event->type == SDL_EVENT_KEY_UP) { switch (event->key.scancode) { + case SDL_SCANCODE_RETURN: + if (event->key.mod & SDL_KMOD_ALT) + { + fullscreen = !fullscreen; + SDL_SetWindowFullscreen(window, fullscreen); + } + break; case SDL_SCANCODE_ESCAPE: if (fullscreen) callback.emu_running = false; diff --git a/src/ui/input.rs b/src/ui/input.rs index 3921800..0663864 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -334,10 +334,20 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> (u32, bool) { let mut keys = 0; let controller = ui.controllers[channel].game_controller; let joystick = ui.controllers[channel].joystick; + + let alt_pressed = unsafe { + // ignore key presses if ALT is pressed + *ui.keyboard_state + .offset(i32::from(sdl3_sys::scancode::SDL_SCANCODE_LALT) as isize) + || *ui + .keyboard_state + .offset(i32::from(sdl3_sys::scancode::SDL_SCANCODE_RALT) as isize) + }; + for i in 0..14 { if profile_name != "default" || channel == 0 { let profile_key = profile.keys[i]; - if profile_key.0 { + if profile_key.0 && !alt_pressed { keys |= (unsafe { *ui.keyboard_state.offset(profile_key.1 as isize) } as u32) << i; } } @@ -513,9 +523,14 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { if event_type == u32::from(sdl3_sys::events::SDL_EVENT_WINDOW_CLOSE_REQUESTED) { close_controllers(open_joysticks, open_controllers); return; - } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_KEY_DOWN) { - new_keys[*value] = (true, i32::from(unsafe { event.key.scancode })); - key_set = true + } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_KEY_UP) { + if unsafe { + event.key.scancode != sdl3_sys::scancode::SDL_SCANCODE_LALT + && event.key.scancode != sdl3_sys::scancode::SDL_SCANCODE_RALT + } { + new_keys[*value] = (true, i32::from(unsafe { event.key.scancode })); + key_set = true + } } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_GAMEPAD_BUTTON_DOWN) { if !open_controllers.is_empty() { new_controller_buttons[*value] = From a1c2ac21bec881fc3d4437080e3aa3772cce7411 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 14 Feb 2025 21:32:11 +0100 Subject: [PATCH 0319/1117] fix hidden rdram size --- parallel-rdp/interface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 39eb6ff..a44c5a0 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -183,7 +183,7 @@ void rdp_new_processor(GFX_INFO _gfx_info, bool _upscale) flags |= RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_2X_BIT; flags |= RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT; } - processor = new RDP::CommandProcessor(wsi->get_device(), gfx_info.RDRAM, 0, gfx_info.RDRAM_SIZE, gfx_info.RDRAM_SIZE / 2, flags); + processor = new RDP::CommandProcessor(wsi->get_device(), gfx_info.RDRAM, 0, gfx_info.RDRAM_SIZE, gfx_info.RDRAM_SIZE / 8, flags); } void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_scaling, bool _fullscreen) From 8566eee9069a7270536404684ddf064bd6f6f5c7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 14 Feb 2025 22:20:15 +0100 Subject: [PATCH 0320/1117] fix possible crash in is viewer --- src/device/is_viewer.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/device/is_viewer.rs b/src/device/is_viewer.rs index 9f7b776..3a660bf 100644 --- a/src/device/is_viewer.rs +++ b/src/device/is_viewer.rs @@ -21,9 +21,10 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 let length = (value & mask) as u64; let data = std::str::from_utf8( &device.cart.is_viewer_buffer[0x20_usize..(0x20 + length) as usize], - ) - .unwrap(); - print!("{}", data); + ); + if data.is_ok() { + print!("{}", data.unwrap()); + } } else { let mut data = u32::from_be_bytes( device.cart.is_viewer_buffer[masked_address..masked_address + 4] From e04a151d498daf53b8e2d8159b36da5cf726702d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 15 Feb 2025 08:29:37 +0100 Subject: [PATCH 0321/1117] set DPC_PIPEBUSY_REG (#253) * set DPC_PIPEBUSY_REG * revert hidden rdram change * more --- parallel-rdp/interface.cpp | 2 +- src/device/rdp.rs | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index a44c5a0..39eb6ff 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -183,7 +183,7 @@ void rdp_new_processor(GFX_INFO _gfx_info, bool _upscale) flags |= RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_2X_BIT; flags |= RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT; } - processor = new RDP::CommandProcessor(wsi->get_device(), gfx_info.RDRAM, 0, gfx_info.RDRAM_SIZE, gfx_info.RDRAM_SIZE / 8, flags); + processor = new RDP::CommandProcessor(wsi->get_device(), gfx_info.RDRAM, 0, gfx_info.RDRAM_SIZE, gfx_info.RDRAM_SIZE / 2, flags); } void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_scaling, bool _fullscreen) diff --git a/src/device/rdp.rs b/src/device/rdp.rs index d9e76ba..20172ff 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -118,6 +118,7 @@ fn run_rdp(device: &mut device::Device) { let timer = ui::video::process_rdp_list(); device.rdp.regs_dpc[DPC_STATUS_REG as usize] |= DPC_STATUS_START_GCLK | DPC_STATUS_PIPE_BUSY | DPC_STATUS_CMD_BUSY; + device.rdp.regs_dpc[DPC_PIPEBUSY_REG as usize] = 0xFFFFFF; if timer != 0 { if device.save_state { @@ -205,6 +206,7 @@ fn update_dpc_status(device: &mut device::Device, w: u32) { pub fn init(device: &mut device::Device) { device.rdp.regs_dpc[DPC_STATUS_REG as usize] |= DPC_STATUS_START_GCLK | DPC_STATUS_PIPE_BUSY | DPC_STATUS_CBUF_READY; + device.rdp.regs_dpc[DPC_PIPEBUSY_REG as usize] = 0xFFFFFF; } pub fn rdp_interrupt_event(device: &mut device::Device) { From ba006ddd5368cdb9559a7f89137dbe524ca419d0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 15 Feb 2025 15:54:25 +0100 Subject: [PATCH 0322/1117] add transferpak wav --- data/transferpak.wav | Bin 0 -> 91724 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/transferpak.wav diff --git a/data/transferpak.wav b/data/transferpak.wav new file mode 100644 index 0000000000000000000000000000000000000000..599afd4cb07807470e61bd269260d3af7235671d GIT binary patch literal 91724 zcmYIw1$b0P_xH^8b<4&RAXtIoPI33*F2$YVPJ!Ysh2mDUxVsg1myiUA5#pQm-D~sB zWdHB;LI?l}$w);CJ_1NY5>6pcG~j>+=m7(CxC9RbKm#p)LO3@0U>Zn|2ybNEZ-Dzn;iu4_jQdY`;737Bw}{`8tAr09&WmtQMC8TqJeU^%_>mju zbfZG#!bbq7xp7V}P7B~e!8z#SHhj1aFMcEbUr8B1x$w_fT!z%jVorhLyreA=*RSBz zAikH2Y4PCp<>GW1-}y0(qH>3Z|XpAu^_mWW1TW%?IPMnbc<+|9qU>+eiH{u;A=R(mc;MEaE@r4Bd+)yQLKycIByJoV=UG@ z(gKTHvlQ1Z;Ck)2J+_!q9;Xv+B>HK^=aAj7xDOPjN5Isoi1eAzOM1xRvkucw=q8*A zSyvEqmGF${DA8gObJv6UE@BQ4jUxxqR3dc>%blDF*NIhz^oGK12)Jgt*bc~hVwHsB zDlSRt4`~Ro24V{#d*Sd~qER8sVQ>w4{1b4`47e_H@tqA{jrflAIs&H~@YR58W-#># z_f3P_;P8*ad35;46}KuBpGgm4@f)JOMDm0qghmekm|~vL_|5;g0CC^&1MYvwripzM z+C$n-w2)|^h-oJD6P;6vX%F2I8xGl3pje9waBgq0C4|bzIKQvB_a3a>L41&OQXApv z|5_w>MDqxi`iieap9zNuxBd7>Xe8VWp^1v$F~!m#`~$d`I^1K@D}uEWt_LULXQI6- zu8;8ke{v-6IIQOiu8mMe_z=5O2M1Dl$F$w=iAxRvAd+bK4fovG3SUUA|9AX zG-REm1d$tQn=NjWl;Vra5}lXuJK`}2bsAinAYKr+9r6rB6B`92EY6W>6jNzk77O@e7eBS?NyC#fgoM~UAh93VR3 z$9F_yNNys3B4>i^M1P2F{|^gE92ByDqQgwFT!@4SF9}@)rwC2|^GFPCm-Le8Du?+` zqC?Uv;F@e_GRytW4a2V9INxV#`9|R$Yhb11H&`zRS zJ1!HB>mf*FDQ=y3@c(%<9+xoU`bZx&xD^WXhIq74j7#*IaF|#O;W_cM#BK>15X2^2 zA{rIqXDAvbIz}vjpbC*oC>{^l4dFSlFH(Q#kE9Uo4e72EON;mcl16fcd<|)b=s7_= zl18E_(n6?RV(sKD@m)lJy~Wr?a7&MQN>G%b9l-&j!KC#6M~48WgXm$%$C6kvghs@35?@UENi>tt zMy$<)^O97Olk|)r5{c47H4qFUewxrl`bu;(#C;-nlAoMOq)DudJd-;EJ`-7(iYX`Y zq82}gv?`<-M3;&GB6b_H3c?p6-~U|+$3tE_q!WCx-jPTqg#1Kyq-P=QC%hz9O0b`# z61s?d$XjB$M2CoX5A}oCHbKfz^h+opEfXvLpVUH8BB6z7T?j!41`#A7SK`e`v_&kK zNQc-m(I`TlzF2nuiG}0wV=*Ra&vqINU97k-*jeTbkK9ezy6Tc-R7ovL{riH`~0zQ-2 zHH38Jj*MJMIzbsSa@OO6ATzOU!Y`6Wu#S`=;}!B0s)cZ#&_@uCcsVjoAhtqqh~y(O zAYP4(j7|6;7-+?*He5f%xrl9%u|y=k5;>7^Fu9Ucf@{RnkocTLGX&3w9Ee27nWPdM zU~vil|58bdL@$UI5xgP(mY@rf73qBl<4G?GUEw${iC#r4x6r##Zh|4C?;+nF^2WqZ z5Klp5Na`b3;t~JX4$&Zjr9_`Y(J<*D@qIdcCP+g(D$#xtvyhrX`Vbo75$h$INTNP- zF`vx%jzoqez9XC@Tp&>d;R4av(8wwzMPk{Z(IMdkK`0_y4X%w)P4t!c94k&EdQUh? zct|)%q)Ns+Ap{{Mh_tQv9q9?dK|(nh6MJ!giKiu6o{zQc8y-==Mqkhie13=?peyJy zI*HbxRcH}fhvwqn473wX#z!wS1t0s+UUUN;K^xJ0GzwKkzo1#ThP$XgN=Flv2ck~8 zp>&4znG~iq(}gMx>%&Qum+DJ3gFV41)DT4i5BLrr!YwcoJ_OsrV)!2BLk%?n9tHit zT(A+$0V!x2Qq&#lEOov*Og*HYQXi;6Rf7cdM%}1xSI?-I)aU9aHAA(bmYBiR6Njdc#yW8b};0xisgjp>GT zb?Q1?1vL2SGbP<(?BdA7HNs0zud4aS^UM<&Ge@3-Y z1j>_oNP}dvk|?*rlyjJiTTpA{k>4qmv2@LFKP*dahl61_$XADe^3(`4LFz4*R|bLW z@Mn4lbrtkg~RpXE-<6!oO)05#wkFbk+af+fLK z^@2JcRZ@?^PSksKwiGK*g;%Lq>XC9nuAp88hv77^5WK?u8Gxo!cc~}paWPstq4rX% zDQA^r>J2>uS=2ge6dD4$fU9T<=tjR`eqwS}v)owOjNza!x-J`)Z4Bi4z)fnZ5{Ayo z(dZ6SQK-aLf^I235GR$TBJ`&W*Z2rI+0#Ti#MRNs>>~A~xIius8gV8*8Y~dkDnC=* z;2`)4v{b80wWX?9f8x}d^lO$pT^bCxHYnU}c3$7Qms*^!wupjuDXY>ZJOe&N(`Mso3ZlQ+|Qa#m|d zdNFtCmDDaJOgt~Qrf$}pFU40)wK5{L z4{O$0sxHPNA61`uL%ozgNl)Y|-~`H$*GOAcEez5ZSUY`I)rp3HAuwC%O;=^B1E;K& z&r7sg08W5A>T>ESy_>2FTf&pL{}FNtbqsw-6KS&Q51;|Qmw^Ma7TFk%3u9`dCGuf( zpVF~w84)d#PfGRFd7uJhL3?lnd1YRHDP4mH*&g(2rM*-rcY)W1#{3`XrGK2yB}u3^ z^^ua{T+|jVg*V_WsupOVM9WsW0(Li$~onCH4=^mXOt#Nk@}vg zW>{?;uF<0h-utcy?*@4=-BR;`n@#mnZ-{BqY4s!3ikhtK5cdYXVgva!##$Ela6WYl z#<0m$J@K^bYEiBFqG7v4mt=# zE3wCNplEnTEhoFA!%8N6#~h;n1=Z!bfy==xi3eloyPV3@Rd0$nM&DT=GJ#~wB zyZe=x%H``@nj7eMGM&|Kfeh~=&sK3Ry-qt;7ooc${6m#c;sQ({FL+fwNM+y|`&Ouv zGE43z{~`Y_A4Q8`1guQ$r{bul&`FPHGwJziVqmLyUwr~zfr)SyI-}GD_n2ye$bLX8 zM2|l$U{Tt`*~~8L1b7KN)KS*LW>OVESEYftFgQ+X4I=2B>|px7^3-qlR#p#bb{iy~ zR>Hjbp6%jY>MOUB|IWSPHgG;_A@a81Ms30t-{uS#6+Dga3-<(Ht zM0;1*M0Zu526hEMDW9q9)B+_lFfnjL{lU!Po3hiWKfy?8o|kuT^&JBy0#iD?clu@=0DK#><~TX)an5rF}1CP(x+t zZxy&KJy7RS7peKMm3lzlE;W*eqlNTCZYl3$5Iim~489P*%1(8>@&}g8WtfU;ptHcC zPEmTm0kE&a$^Fz3R0ZlDY=Y*ilRz$ZqA2 z^JAErnDXh8QEDbm4?I*n%pl=6z8rTE4iFEzTYGz>lFUv1s^%`QXZ}(yNvGu(>VNcj z#!tV-SbL4WO4k6lm0sd0e@XFY`giRYeTKFy9Vbn6@9_)_4pepEFtv~=pi*#@x|9Bi z$)u{H3Sw7ZO7OjMT=^k&l%}b_0z0*wc}rn1d+hw$)l0M!HCm&ye+;t%yajtx7*_sl&05%U3@lKTXP`pkiMa!aUT zs&NIh0d-VHAOrNmeryXCQd;y-ZmOPBX*}rvnR-rlVi|5GI|*KuS4fY7Lq$Kv_HN(+ zu)_bS;Y=+$0?kzt(N^jT)1K<54wC$VXfYu5fSb8^u8=`s44(RFsF)N<8Y7kq_K@`I z5!jOHz;(t0o@A=2x+b_Xa4v}PUd@2L*?xQ-ZUVEOS_M6-qE-fDsew#ix-|463JpXP zscdRGJOnNxw|pn)3LKOQ)x|KIVwg>IPxw?lsgze@C5QN0YOcmm7nn_KXX+s8kH%0^b%6SRsYq;qmFlt*RK z!|8qCjT|N&6o*Qq)f7|;^V&%Fqb1lB%tH57ja)+7B(0Elpr5EZY$bj)cZyj94XBAa z0lfqQOac|54qgDaVIgJ2G2Rq<5cM8LVcKlajaGw>pdt8(;?O(w3$nw1;Tp;X=Yh5A zTe$#7f)8=L|DRf@deIut9IQhBsa4h1@-?xB_=h+_dM>A`&4C~6fxTc8Fh`A6N-L+8 z3hD@y0y{IW*t%>4T?({TYRU7kZ3v(pjw$YN|FCtKyVMuJp_@u`Rfk808$d3Igx4TN z|4Vmf4ltR_4K|Z`g5&lfAOZ^1@7QABun#$&f5_F~nzIwxMQm559!8=TR5DeW{)b+| zs0_`nV0W@Z*!9dTrV;}gnYJ<`n6AuaI+^mrdvG;Xo}PjEIfLo|edxM+L(NhtbX)zZ zjF2_bGaMJ$g6?3ExLXQJ-=)RU0r4!>$KC#+ejyMY>>y5)>dPH5jxQIt1&;?x1v34& z{Zsw5{r~y51nvcAi+jX!;?iKf;M2g2!2H10fF;;B_-k-WFfUj~oGV?CH!FqeR8$7& z;bJ@@+63QW)czan21%eitOlRJD)b6wEW3}b!OHX`$^-tuqsc6=16HU0q?|a)+dy5W z=202&8|VfSQAIp1J)}l}6>t~T3;V*l)B*SuMo|-~bn0iiIxSPv={C$E_ANh1lb}^J zPC*nNYF22?I=`-_{(wHh(81WwbkH==Jl1^HeA1j?SzvBvzHZiAI#|wGQY>4oyzPe7 zVB2oBSznn1!wg{(wNFa(HgOlYmU}Y;hb0o5Rt>s5PaF&K4*YnZc_!m<#<RT z*$XrcyaNY8BDe^$K@s?lM_n7iJTL|f2P5$OPc5`bWz@&Y0cEc0KwaQ)%0kohPgF8U zMhgdDGQQR=JRQ4Np=uEBkjoi5MRVV$gsIRa>&EEr>1r9KoBp;ewe=0F9oEct*xKA$-MYZK!dA)tXL#R;X_4_! z527MtqGH~}#Kg{zJrJvltsFBf>U#KV%N^Z3dbrrwbtrF0_K+W=vn%EOSx~!hZb7xY znm=Zx=YKhsbTo1Or;JaB6DNMIk=*c0oz!<3%YOWwH_CCxb9_2DBNVDy!a*-%6jwd18V%D_9t~=&$5!?y2r7aEvO5 z$Xk^&IeSm`iQN7LJ)D=kpM&YjNidTh%+BVD_zdB=W}Y@&XVTjYBaOeBlP!a6iD6^x z5ABQW1H-!7)>v+t(hN`^)Xvhj)0Wl^*6%k=GEFu2v~II)39A-FWIrgqZnhv zYHKayYTat>VC_ZiTWu%pKH)oCm%64*55&4R6_nybpt6cn(7Z@l-?l7L(7t(TMtb=1#WPc2ne;sKe0((M_YTMUD<{V7qFP zbdkbeOa&OGR+Kgb+WMw>OzuIhCs=+1oxeEaoga!EMXd9g^Mz}gXMwLMuwH7Tz5re5 zEo?3y&>Yn{^_vXS4P6Y?wXM13a96OjXIbH2`RVzd!a5#r;F@v^PGbsKFDo36Ua zn1;sS`HX9ngU!(lGQ2Z?wbcr*8hJcwTy&-AXOSDjpWFU3w=uf(etk(}Uvquib9?K^ z7SUH@&c)7+T^)NRW>s`f)Uv3W(S2k3#Z@i2B;iomcR!V_G^CPRPK^82cuAc3{mGlX z_iA3xy?XJ+ojbK2z{eGz-G5pCy)WrR+M}#q=DVCW>RYX^C%)cE?UUIh2Rck%hu92U zXGRF6bYX^`M%CEL)EOUBOsS?T=GT^+*73IAY{#ulECy3A{Wl?nSqQdDv)ws4`qYu{ z<>&jKjDPy|)vJ#w--cyJ6*UT2Ky^OJ@RzM^gf*&M)a}S;5#1xSk)xv?#JrBPmu#Of zy!4eax64#0y}iV`=+5@Nru#ZYsLeC{5x$P*xpu$)vGJvOq*W7!?0qAr#;lKzPber` zqQbn&wX3^oj;^!5wp3kHp+(d&COY5z?%u7PXI>o3Ilkk}(JKdTZ+U2cIru~OFHthA-(ochBX?rG4jR;`NbVv~$3AnWT> zFfMC&TE{O5Nv#u)f2y6>KPfro-PdQ|!oF4fvMp&_Vx`1upT~dMkZ~}tnfE=quI*<3 zC%$_*rBb7+ud6<-ys*Ob(xqbm2zQz=Y>V=@%dIYxP-gdg6Hc=GA}? zdsAv<1b)oTE6DF!(5)bl-@2f#W16c@;3rT;6KRWzeP6n2#qw45RI6F-!Oxq@eT#c$ z>#K=C&%B=s7XA1&qhVV4w9o0SzQ<&z<`(4tSvbTYJ9-w)DvEISbRF`H4BS$hGRt%k zwzz0mvTYe}x$)({mEE6^5+_E~w|vsGHN4bGM zz{m6ub`(ePHTdEDX#O|;JO4Lc0$QV6WymzWwal}f4!aq)#dg_p)R>{WC+y-V?h0P? z=`GyWW*P=q?%L-?4~nl;Dl6emLPDtyB}&Hs9d|hXVaYKG{YrVFOB!DIA0|iKzJ8?E zw&9!KY-{~b_(|)f!FR4co12{O$YL&rmrAHm_I#;-W2)GvS_fD=h8ZJgM1P1aS;ASe zXX#31-k084@^aKoQ)}v}t7ZD>w>2J4xM{pP>uSxLu6uW%U;p?d?Rb87e-@}I#2Y-u z4#vj%51O;WK23l9S@Q_{mZ-eg>+#)6{2MY|XfvJo{tC_b=WL zNlgB7Gcz`ybuSK{SJS9!Trc6Rrl+>H_KRkw=D8+8x5bcSULJNn;(k=Q=qHhv?D3Yl zIt%-UdfWe#vqj!7S=Z8grKP7W%FNF0P}td16l75}oyorEF9 zK02~ztiMEfLW9!7O20^WmC&v9$g)x8dMEr6^Hy8KGxO8os}uIsUiZ(cdRtZ>9C&fp z-K{UXrTmlMm2MnauL4tJTh%W=S>qGJH&_~(>X>SnUKw+ZKa8!-xz^WVIpO#0i_MMs z^1)3x=A^ODPux3wtIw@{|223Ncvbj$%l93w#;AhsK-j_Pa&ZS@)Tnn6cH2cviwNY|zVy(~il;6^-W&d8(Bgj$ZwY$s} z?NcIVM?A1+TZds>elJ|W9>mJFWZ$rJISoIE|G{lw&2$qqPwe1rQ?xF>Feff&Lhil% z#YOA9X6YQzaT~M`4C73XOv%P%y-l0SEvLtWG^MlrL~14vRf1|&unw#TH_;@uwlY&z zrR!2JnNv)v0lcDmbG5WVLq|(1TcPb&+b&CW(-8eN4aa|E3MrNfr_NKenAO}@AxnEq z?=}oHHZs05tkqA&3x(OjW}&YzS@W~5i=nN#nypHBRMfrbuCeaeW^u0AC$UAb8L^vU zkHthsZMDi=IiL9L>ccT-bN|WT)9YZ}Gq#)2kH)>uNa~*RhxD6ie~IJepOjyckP>|@ z?6Y~8X@;?dLDH|)hZz$*BZONH%?xmMy$$*lN4qx;&CsiW>1uP~G7sZ>6+P^s`7JOVzeP2`n4Qd05Cl@yDT zBL5<9kd}xEL5F{xub=m(=aJ{3*XhS=E2uBMlE0{pHPkT17?0>PH6^%AcuRR6oa-Cy z_7^pCjB!+OcJbT}R8%;~GP!IUyc9c2C=yC&e8NMat?-F|%yU@NOKB_X_UNkUTpCVz z&)%Zl@Go#4ul!v>*TH*g4tr0Sr~hG6t!?e|!v76lZ9i#Ar^YtCwlG`)0< z^~;UrEh}y1!)HboMO}|^$I5XTadYB|VzxyV+5IM3OCxhZ&5mUC3t430dtre3?)Q|YrI7*i!48tSBtwN$EU%1a_u*2!Oz$!g; zH_Pdef?nRc|N7SPTiW}hUzGoRe7{>{Ey^jA15cPyfM;XYSH=Y7y!rUkjA>mUgXo#1&c#mpU%HwEh#s&`izxk&IJ4n}+^$5TtuqT{?XK8oC=P()e z!t(@;nKE2QVYBwAeuS~SDa=&b*joQkQ<0Bj+tUrH0F0$N(RTI;pRC<#sA@iE>1#Du zTU)xBpBi@3pKVXWHik6`Ul!ggd}o9uf{#p(a765hSQa+j zGDd%jA4Hb~yTyCXOBn?(t6XIcZ`d_`Z{)Gl*Ka=`p7iNQf#*-QD6CECh@an8zF#4; z)bpr~=AD|-7#9%r5A&A0%#Y%(Fjc7Is#YBC?wp(RwfnnEPtQIW{2=OS@C{7)nl;Ha zS?R^kGM|e$5c?p0L)^Ql@3#JU<3m2(jw(U9shZ3craXI+8AI=e`_zBMo8BLe3AsnU zKTSW7o|w5Sr%}-|KZ8!N({zIQl9dfhupKc+8WM#l_A}gtwyW*cQfLHt1N~H8`V3xg z+=dn_6Q!QP`ToJaC|`uXZ?KpA2>n8r<_tn}O?6EJ;Rd&ad55>4BuQ0*Kly3j7QAs& zBbsGFU4>490@#gOM^&MY;`L_{tcNow7yW^ygmv06`dH%=BlgsW#rkyZW8pUUh8aoE zrH0^Hj5~~jd#1Ul?`0Ze*8d&X?wWjliGWrPJQ*DB-kFKR*qse7Sw)0W*Vn)O* zj-MI7Jic<=rkE9xLf9B{b$z0S7pil4%sw*ahecqA^21Xz>*d>ex0akPadh;N8)tf5 z*F4_xJ}Y%Y5kv;lZ*it_ttxCSU$bQW$U%{hChJ1MPreSSkF8~>YI_l0IYD5C>oPP=`DsjL zY9%;^wxe0VLgBS3b|_y{Xobfnv+-KmF*Hox8|>|ezA@fB?;QW%!PauFs)1XmFnSx+ z9Zp8AlupvzV8g(yz`w!o(kNu4S92pYQ+3nyQF=;uR9Mc&Pz}&Qd8KFTc_<>n`dV>tyXXomoH7P|q~lGRAf!Y^;5Y{YO}pu#&b$)@X~<)XCHq z{~DUVT29&egl~;Xj@cczC~j)(k(erx+2K!YoMnM=pZ2mQPFT#(6RHS}xn1B?u(jh_ z`k};zuLeEYeZT#G?{Ag9dH2rtXX}z?6+BcrXl9!0S@UdOTY_z_<&rT**PGYS4^eaF zr1Va%rw+n1{Lcbcoj?duoVmdz43gqT|Ob!71!Xo_yp99n#jK3 z^%{rJP-wy5WfPcY)MYe986Y(hvx7^-ENPi?3h##KfexuoC0_X`PmmYM(TbuhK#yP- zW+MN)R@EOj#+vRJ7Z?ue4ru1{E!okuhUx)F!9i3L<`uU`b4p*=Bv>M?zgb6F^DK8Q zPc4fqH!Pnmi>+z4*l;E)CiZijH-27;opBMd6{9+Yx3JAHzcc#vQ}lL2Yg0qZ6pW$ROi)nB9&0oFg%x6G&YOa2Z) zL7J@OAPv=k=IJYNE$X8*kUj^G203x9^sCYqMZsZsbCkklvp;do*i?EWyn{Zfqw#*7 zJ>V!ciLr1U`Mdls{vG!-%h8R&VCAydBXGh$+wThKq%}$s-sMn@-cBE)d(oSyUhqAd zpte@N$uF=h22#z~xq?UAMt@ze*MHR3)pX-euy~IH)ey%~1DHWv3yn*+%DB$VT2riV ztUIg|t!40*?KPG$7S>YE^2|CjObWji**JP!OjK;kxJhxljT##a)+;KU528&g-Z$#6y9)ba+Y`RbspDCV`>#Dz^TWATYhvukPlw(Rs^}f0l?{>Nenm`11 z(3_c#YNxPJamq%C5l01{_+q_% zJc;gAo_@aMfGF8fMas+!W*2kq_z?nwM>n@MPRd_8SN}4FO zlt;^3sg~2*Yd4Pw{~xD)1lP&o&va1O@S~ zyBTOHx{hvRU!?=_U=1$m!7CPx;cXa4OV8`gngL+woXt?&joN@^L^Ji2Mj(wNUNjbnw_v$5x5 z@8j{s=GZ{Yt>~|j2@&PP--iidudT8<(wtyCjW=Mn!!uh^OaRnDQ^a|J2s~?j#OL*f z`_}r+zAnCOUz7*9$2t2u1{6NYi_NW@v+&3AY;A5*&WYSnx$|@T<}J?sEiWOjOYY`e zJ~ttk%I%UnCT~xE)xs@~g+)!A*PTmTaqiu2-qXRe#dE;3&$9vlUU{l{$9N}rP2Mh^ zRqiT2aGa-Dbg@GSB!_ighJ2)qh}2P+4+2jj%=;x=ihTuTWk`&ChG zjrQPOwF^KVaD(S~h4cho&FGC+vcBS-NEexXYzyu@7s3Csx)a(q+QpiGgwnzS{ydk)&SE3kR0c5~CY3qEjAN!Vzc60< zAl;ZALHDK4&>T~bdCat8X>Kw1h^xh~=9Bs6!ULg&=96Zj_PlPr{vX3o(?;`l>x8g= z;gMJ(Rbpz#I${^a^^AKEdnLA1?1-3)(f>r%j+zu1jQA~LM0hQGN816*9Mcc|TJ00Q zFE@{U&g^2I(<+q)7lSuyDP_2{EI2ff;Q!`5(S?JC`n>R0a zV9tQ-ML+Vhe$Pt$-t>FS_a)!svmRu1{*m~@^`m5VqwJ_`^h1}uGCL+`T~0#oi_6Mh_LQ&#wq4fOmW!5w7S1xpJlfRX_?Ka( zVZGt9p}?@pxYTscbk+3G)Y#O+^u+ksIM}!Zzul^TtlOoXqDjME){Z?*bLtWhP+yFW z1A}Azo4haG9bKGrzT;BC@w}Hgt{?GP^E30(52n>gRlc77QaWX0(x}fn6T=dZeQNc| z@$tdODIeQ^togC~$J-xke2Pqbp1AV!p`@bZOJDx|mY8PAteMp(dq8fx{KA6cj!Dke z?h4+Qz8-<2L0VcUe^;8Ikzf&AL{*{p(Js0>^NyLq*5+PvfASTDH^Sd|#!0~IUZwS? z^a+M3hCdDW4SHiI<8tFp+?&^U_NAn$A?{rxQwvi&Qxj7u(|6-j<5uGUV;SRl!$^Zq z@6hkp$LNRaUTe!~n`?4~s={HuGk=;J$UR`Yu})?uUI!k-jAYs~KQrx^KFsgT8iryA zvB%j;++i+?pNwtiFF_HOYP_1a+DW>S`aJzA!xCdR(_nL1OSrX}?UC(j*cE$Jc%Sga z;U~jyhsQ)%Be;m{@FU^>g>MQU6W$pk(&@0Dtk2E+4Tp8RG!KQY{4};XQisk&9Z&Z%eb9BBW-EwpWiNhee~s2N>*~~WH$L> z(#@pBNo$f0CLKz;l9ZbCYjXLNT3;G{jr;cc+r-ogX|2+K$rzBi@w+E$PWIuPExG^X zoz15T|8}^FI=N=K&w7Bby?2_tI|1QA};Vs!&p6(#Gn(>z?Q@ z8}=K=m`a!*nk|<8mbaF!R*$utZHeu;?TIbN_StsAcEk3;78a%p+ir`tEwqZ3U6#(4 z<7R_-fT_SZ#JJM%R9{D*tm~&cqPJ!TuQ@0r6)T_%BU~@u!#5LN3F9>twUTz1ZnnOiVVv=h=^yhk z%TVhu+nBI7VNL8i?a%F->}~BG?e4I&u+sMLVZH1N?Gx=y>_@`LR+D@js%FyBAWSIN`DHKk~3VVC?#xr=gYWb$h|>ANyM zXI9TT_(Px5BKOz4?fGX41V{a%WzN;Ex9%!lzqhi#MWA7@vDg#KV7<~qt%!GIH-!xD z|2n!WQ=4_M(>aAZ#{VXSYnEyPn*Q2%+Eu#B`gDCWY}@sX>x^HG)l7X%+f2~h);!%@ z&1^Ai&63Gz4w%lGdYJ~87McvEo5tP7na0+}QbrfXgn)jheyYBV{+e#HZmh1H&Va{T zw{bL6L)%c>Mf;1ksy1HRTiaKATAQprtaWO8=s!&HOWP@q4q|68v$eAU0x@6!*~oAqwpC_L`luG^-gbiH-^wI=Oqyf>hS z_Jd}crjn+%;OEEjOS!>pY3678H7o(Dp`}WMJXi7rF9aI-Q@pD^UtKGlHHvCGz7!nD zzmoS)?(Cci*}whRlXdmGk~uPSddAcA2I*(h^l4{P&!;|3-J3cx^;qhKRFt|Y?Mqs% z^w#N~^rab3GfIDVe(&_dn*AxeM(*(3-gzhTGYcxbOKl;A<@%nChE%wR#bqjTkbftASv{SX0wB5CMu#LyHZ8Uu~ zy)|)~SdCk_DMV|&2;+q-c%8gRs4KL`JIY1~dHj0*B%i{s;%oA6xVc;j#0>8^w(zn73y}x@7y5GCnxt=-WoXd-BMdKXMQN@v6*u5~Ouv{Tk zxU8U7fg}HJe)Ifa@*Cu*<;}`V%uCC=nD<}a!n~&WKNlnvv@Y0E=qj{2#yct&ohVx9 zyyjG$9bJ1}k)GzBjUK0GnQy)Slt0B^FK{nVC72kb#L42X(tN23-bE3wN@}iZ0wVqt z<^momN6|az`^*U3(>RP5W%-r-zx+r%`#(zai?+X((cQv(QYz@&cn|Cl{cG$2$LJG` zHw_;R>kKoDdyM^zlxd{#obiTngi&K+O@~d@%ri}Iaq91QeKp>+-PpzS!)P!bGMqFV zGq8peh6%>yhSG*J`rq{>^>MmvU5ZZ8L0y>kjb^iEgm#vumavrH$YtiUbf zI`hfwclrc9k$Hi43yq?lQcvhO`ZoUf#)x+|orB+?8`K8>qWk#EmI-+8V|%j0rL;i#Ed2=17dMKZr14U^s1d)3N2R7x zFR?*TFD;aMh&_Twf_CYu*fV%8P!#AMRD#QcUBy)KN}yRl4r~cV2UiEEz#ac(zdMi~ zp$WD;8T6G1KR^`e{X+BpB1Nc z4-5+I42%nO4JL_7ATjt@Y>VX-DXt5y5!>VMBz8!vq_6TQ^{r}EE-1_J^@2K7-JmW* zWnnp#rnbVPfkN~c9DsH_hH!wFFot>z8&hlWj9y=Q44!cug6vdFb`3QS@2BfQccd1v zsq7{C9n+opmpRP&xH{}$wiL6By{PLc3}*IFf3Wj48GHtwp^Ost@(sDo^b~ym2-k3z z$`!T=|8j+(9ZYAZVKlnMK7~AWO#7W*OLw9(s1BMHoE>b0-wF{MKEgs>N;8fhi$ipQQ4@z^dI(cA@Ezqw4ZDdjPq@n{rq`YI~DK}+SX zNZ~I&F5y{+xeMC1^wxCq@0oxB|(9nrJ#z8N5>;;CXr$<|_H>GdPVN0^{Ws%51oSx~i5{QkjLqN+uJQp<}r6 zOfI;uG^a*Tvr%<6ni)&&L<`_Jt^|7*98%tc*YK>GqCN-LDLbC|$x)uFBZUWi6H1ix zgPF8}|4P-yYcNaL5?pUoEtm$Ma&?4F>>?>8(3*AY>@YKMS~|lFrOnDKv99PNASVVVLVv01s*Fqn6q%46eAu|XM$DqB=l=AOkBb|(K4W^|C#@ZdY?Pa zER^Q^hpMG09>g<~U=wLC8cMm9Tlh=5h2V^IS^9$-&0@->9&)Uj3u=K|$`CxCwn7!9 z%Ib1h9*$OCiDTuL=np)L{{jAx3sFnp!7~)+)!Eu4Zh_p$Q!Y4>X{>cJ=L3t}kAug# zb=s!F0sl(Jq<}13G_QmXuhBbF-J#18p2+XqX8$oN)-aH9dSAF==@zy$ex*CAa5FvJ z)K|FTODignQjFtlKz*Lquc)tfXyifG>K*FegBogWLRUIT9*tMQ(>aCNi@$uE$+c!T zL8!Kswx}GniPed;{1{#XFO^}^Uc5WBD*o#2p!`w3ul|6;p$&DWzv1s@b|6j#uq(WV zUdZ9nX3&)#z^BVAy-S0qz%uq8{syL!Y{sjtNjMI9MR#DHsCt;k$Iz{$#^Pe;fvGL; z^=@&Dr}oXhfX>pa}2ZO9H1xA}e(%TQ-D<*CK04yGy(U@{u5 zEK$ORmt03h@_h5p)Kxd`0~$OIIEAJO-l1U)EAu1AgT+zU0?;n zS51?EtLSaeE;#h9sIH#KfS&)%_W{%84A}_xfiNWn9p_l~PbDj0kv{T247=eY_emGe zwlPly)%-o>b$AwM2i249gx70+h+}D&elxA}an8A*l6ju-U-3^zKY6RhYp6zfeL3FO z$bmmi?F2@ti`2uY9Y*t3C|vFh$H5hNfAB;6k1&S80qPO)tT>h}WIq5)u$BLw{D!(u zeMZxj(vm~%f=3eo$1Io7O13N|;XP#|)EQI?KZ$M{cx%%HNdSSZwrs%zwqd#bG z8N4vj`L}C>YA~MHepgT8{m)(T4%exiLHky9Nna(masurXDjH(Bi)g&>iDw$KUw4K1 z&*d$2Qlf4gbIo_qQ&KhQpX>irO|CtjNX-&^6~1dhoje~GVcW|-^cJ`_Qxslt;=yFk zE9o3}Qh%4Z=sn;wt2MN4?Pl(gG|KNLmc%{ zVDOCC3jHaBv4iFPo+W`fOg-TQIN{5a59pU$w!>Mj8J@bps;g#dNPluncBOI)Bj#w| zI#aS2dbe9E#xK(La&^nk3asHB=AouB0dvm9qUub4Yj5oxH6G8|{s+GbTXZ|9ZPHfX zX#Z1nseVk@LcX{AW9}0<(qu6O*}?uYE=nzhXQjr1mOj=qPTU~$(Op6=UzOl%=x1W7 z!+78NYrKMT7Fg6JQce1*HiH|gob-HE-|E{5K6#OEL*ONSQ$I@g0kPf}(l+Ly)~9_D zsOrg;6Eu45A*HU^K?Ld{bU{_vn_Qa!q_S5QE@FQUd#g?JClzXa3v{0%Jlx8H>-nXqkv5b5mj8aidCv!JmboeD<7(?3 z3To@VbE9EYu(6L-6Zk>82=$ulv}YgMB1E%=(vsj>^ho#rX!;89D3Y%0Y8{_A2_Z;= zJHZL=?(Xg^E{hX%UzUZ%-Q8K--5r93kc0?v;u-Dk`cEbQxARPP80oIQb*sAS-gD2{ zY-ytYRj|lekK2uU!vwyf(we@OG(=wOAe*{H+2>wHe{%n5S6t;ClCp)n%+=Anl@+w3 z-eBw|8B`Cum-?4JTt7+MjM*nq%Ml`kA!LO1kv8E`kzu#?pW}(+ zI@zy#C9l#x+V|Kikmll6v9e%yD^8;B5HduU)QoHDN^o~p%Mw+3C|)34U3Zl*dtRHzz065y~r9ADYGKB!f_2T%2da#UI>cOsANQ|yP-U(zjMFimpycO6!yi9HSPNe#zu z`(P3xJf`!s`TQPQmvoi%+-BvvyCxsOmDYAsUoMiiSM@?&EGCvI2b2%O8~p-(ghK37 z9KqU8ZYDpSHgoYL5V7{vQaE>6OK>%%d*nEtYVTbKoek&-E|9*Y1IZR{w7Q+fb4w7% z58_H`Tih>5XXF{javQY}b-MCaS%oz>$9a;m+GG9=|559z9pqjK75IsW&K={fao@B} zS~KmERsu8o3DiGSQX`ZwvJ91~C&)!LM7t-nB&D>W?mOCb?ya^;8%mDycJfKt;;!x< zLstpgg&KTaZLe}jyG~y6C$&pJQH^TV3)x31 z(r&6%ImoZ(f>6zVRy$7CXbseOTEHEr|I)3f{kWnIR|)Df-N>(na<`Gi4i|?agRxQb zP&1VKBu|_z_2cim<~X0a%jlN_ncRom0-k9r*&{BJAM&k~F+k*>r%7D4{E&O%_I18- zU*Jb_fAKE0glmv1kCqgsbAQw43Tk+04{3zpBC#}2TS?3DeFT-;O1i1@)JW}rq%~gO z1N+4)<%xR{P32b!kF_JNSFRjQM9%dY@2^&NmrxrC9mVIuC9LaH)ool0{yB-$?8+$R zmRgt8Am^21WIk`!Jk`-Omnf*WUy5~XC~;~Zv_O6UR|^&8;bb|tmFBCx)Mumz|AT)_ z!x4R+Lj&k#dYliy{2r?G(Dnci5H5V?CunB1HEBz>V6`_;bE`8|Uv-xHn43wd~ z+DrY;@1mPkAFV6tjkUr@>P7^l2KR~tajocdtULW^ZSJVnh|c8|=?a&^b>WVw3_g+&x$HflrgFf_nU?iNh|>CahOoqPZp zUvFAh3nlZB^Q(fIi#YYE+JjE#c4F`QC(Tsnf-PYz*1#OBT>*73&*(Pz;eN2^tm97O zC~L`fRLo2T&&Nl4f)3|8a8J1Jbd=VZrjaVzHr1P4;l}grxQ#Rc9y3B4N5=D>e08oH zeF*M^sU#7V{y)|Jh!y+~6`Ct)g8By6_!&G$sbK!-Lmp6x-Xzs%G`SB(3$Rz==xs?d zylpu8+JQ>R;>3p@!nx-mKRJhPpj+rQ(u8)?WUU!l!~rXy9Hlk+&3qR3fRsaJ+E(n< z=h5bzM!#bX6vDmJM1Bmp!1v^h!e(wiokh~rQ{dUS3|hMI%Dt%jyHC%PI$BM7 z67zOfRL>m(&qZxi-ln04%X25`KVX@djg}>;17X`&B!RA>>7*C9D{M594x?qbFs?oc z;{;S+jYNfM9GOD8amm1h+@}8^)0axxkOg!H{Y;$PG;)$lfd#!0u`7nW>Sr27=93Lt zS?-knymV$ zC4n|cCap;Y@`FsG?cga*!GsZxTB-h|J8g#ZX<)Uu!_5Mt$~087zXP|6NGg-RwAwgQ zB1r)2$bK@OzM?m@98w;m`VqeQ4E29~xP9o!v#3^W$x#wU_R=YIDp){{g7G2>946~Q zLp2Y~Cim$9a)9*VeqeT=g-@@62c`_F41c34dpB&Qfg@uXu&HC|GFXL>KXBz)7$Z9T zswNOOTQFz70pH3v@*k=%1Hg>53uk==D|O>q6C1c~HsgF1aK1&DrJm5vKt64ui@=5w zMCQ`wV0MWi5n#xv4FpdsFqzcW(y13LFoElemKP&;=?P#@~fp0_DJom>J3eO*IzmC%0kU=9~u?0o!Qsi+Y>~7-6czimSK^V0rn9`rUsKHBxB; zX49#toi7QNo1t7~ZalufgZ@o7gBfHkX+Z+(+1El*iX0S<0^4!Iu&M@0o-dsT|1%e{H(fQLBjh$pNtBdU6bS(&zY_ih2GE_z$*|=d?5D z#f8#_Us*+^~Lzk1@B6ET9HP8o#r-K2!5Vb zbX1`qwW7aCGV;Brfe;u?5=md2r$6e0=FwmxaC5;q5RG|dIrw`bwEgr78OdGXdXwh( zHn^_1K++Xh%r0aHtxh-7>GVFT`F7x*@Ri;mU%;Ff0ydqO7(*A(cNfSU(v)mL+_60B z@7Vl57g4%vm?NKpS7!m*8V&}42Izr#=<~tc5ONeVTsN*QcZ?g2J*fb^!x~ZyeV2(@ zX(Lyg-v*zaLDIk{v>9{KWt?FHsY*729qSz(K^$0<7sKqBgF8zt?j@=XLoj!~rF&r2 zC8#{CfPUBuFPu)Nq2|66d}%6X(~lU7E4beLDB1}lCyoBZ9diDQ8Q z=&KE)#i)q-+T-9G8mkS!U9&jm{!fUq{y{^qVhW`Dwf)*4t-RJ7(XgA^G3^9qlYtls zy}%yii}C%4oW$5+yrX}RL!=63pX+o8^})P*1y#&E{e&y(1BRiYS`%%!7OCCPno|Yw zulqoAjH0DzD17)J+CL88>4@H~2hOExi0QT_1@PduxVArG)2Fm6-UELQa0^EZN z3*%AcoWwWg2lL=OKy`2fE{1d^OX*(itNK~xv@Y7;T5Ij9`XBgeeB47^JzTY1*PKV4 zqn-Vo{~#yfaDH_XSAc7q%i=EMR$aecsV>!3!aWhSy;I!J-G|-hQQ=%x>4z0&Yh{qq z5zlFO)m{lyLX^qMK&20!LzJ${d$8gJp!WAaWd|ymZzx3Vpzc!tQ3 zkFrO_N7s+Ln>Z~s<9B9GT)`w~xDrCT1I0T=zsE4e_&+d=TrqdGcJvGe62jLv!Do-p zVedg+mpx`!JWa(x+7~;vrst%!O<$Ov zo$ksQnRz~YY~CQ-pU%0;pR_k0D+cH)8={N@&AGrI_Vo<*I_72cuIoL{`>gk2?@r#g zyxw^(^WdyK%w3ICcSouw{6X%k8g|Da1z&O+X6{WZmvSSyTuQCf2dQbP_0yiEUCa=( zO6U0I)yscbaKZk~IbV4M1_x2xEKf#d$$0Bx&(~f9eX4-!dW+v`zny-(UmxGOJ~60i z9_O>mC)a1UPhTIq_j&J?-eKM^yz)Goc`o)yvt9wIW=9Wi&(dChdcXG>fW&u+>wjJR)j4r{T;&)kDljtS z+lR08>z;4jzBi86#|0#HOh1#oy`ZAYrn#`2*7SXh(Z*-SRi@=;z10Y`c|)JJzQ26` z@Y~?m%Fo9)(<{cBWxOT#-a;20@sUOofWWLTBThP*3Q+1LNVz@5ASj>Fd^1`~`W00rK^KY+u-rhbMP!YZS z_QN9e{g(LF^BL)tZPl4m^$(;y{AXHSeeb&Eh_}rt2+Qx9w<|X#r(Vv4>}^?*nPW3c zXNG0I%{-JP=UmJElwaDu*7?LeNPX>|?6_FaBClQkR7W!o0>=0SdzCfr;8r`0IhOQZ$+HqC#t;AbUre*;+CRGg@cdzo8XCFl%ln8r zACA5Yf4A)Y{*R|VKa3n2GcTcEYKg1|`Q=>SwOjlbDNLVlC}*l|*34Gx91kC_nm#T3 z8u>c|76jHWK?7ro&-1V9Yxiho>M9TAo+}R>9SdgU*3Z6@dF{75V|_*eP-kV*5>xgh z_fG2n>#syt0!{dkxFm_BPR|I-9+$u0aYUIyqJ{5re?w2xMe_;ERBKs}ZyxVGle|j# z{OhawRq-ztFe#u)K)8RiV(Wc}dO!8ZHfI?GU2{Z2Mgj?Y$ZZ88&S`5^urV(%_geOb ztYMkt_rY{IZF9=vF>n9<{*Qq7T3f8Y-&3E@UN3;NziF}=D(Y9uo)QnXg^gH&m&49&B3LJa zwNq+)Fl>xP)@+kD2m7Jr{6w+8Tuy(_Fv65-9%g;zk?ZN{ZS!8@Q_1(3ZwbE_ezl4% zF7~3By;v##y8iY3V~e#e7VbCMx2(@1ueBckS>jD=jcpCyx=!LE8sZGgeVex6*VVY# z*gLURV(Y~Ij5!dqC^kQK-!gYIq3DUMtfK(+yKUb8}RyU-U@v%<($u9qql(JKO7pXDg3CEqzSI4bSBXVkI6- zqFQU^f$LxAG{++Q5!;G_`T6bg)STDZkF%<09najISvTur*3Il%==F_Gy({bYhW3cg@VX486 z3chbZY}DHAVyFG?_q@!x1o+aEo9r)-7lf!h# z)YG)Un5RD>+XY`v)Xuv*J15&`7W~RBoBel2Udqy6UI`21O2$2nn-M=fp-1AS#5aj6 z5~CBM4k;hQmvPXI$ zPuJZ6vhjiLvF?Jd5il#Iq@@DZg7j~-v|@KPbSchrxc^sm&33(U-FNMEdAh1OhdVae zgY6#nh4z+?A;qr2MA08*=&vL%pS$9fT1ND&03?h&o z^^7lo>5tVNlWR)x!eTxQ>(>>C1!QQ6;Ea5z{h=j-530Me%6-Q5*{L{;4vW3JZBs!& z!N7up1=DS_>{lF5oW5=zymoG-q?(9`;S4nxoFI$1PC{wvvD`qf>F*f!8-E$wn`)a3 zCY>n;_z2FVH{CQYGp;gJ(A9V6J@ouQu-zJ zm3PYVas(dhuE7*?|^Sx^?O0)n#`S<*}t_6j|@Zlvb1|?ozoX(cx5in zYL^q6`vJ^SNp=Hp54p%z4s*r3)+5SXSFH*bP9IW_t+0g_;wxZ{&x`HB=~oi0e#uzt zufYCiA~j=u+YxwWKdg;UVRgKfbR^)NpwqN-V3~ZaxRizJ7{mh4lF!^@{vRM~rUF~D zL~JB}0&Y4KNc0e4fN)+25jTqQqK{NXGD$JwzoMtORJemxCnfE$Q*D9R*(-2_4$(Sj zb+CR9(j+ZbJ*tjY!_?|(TXl9eLRrsihiel zjJ|^2Lq8p8IWL2^A1c-r{V zSX18;4r9gbFC64wp$4it8G+phRr{)$%66=Jv%nwJ#QnlG*44tLIy0Rgo!gzAogW;_ z9bFw^;IWBy^ujuNge%2W0pHWW{PV>b;b`p0v8UPVJC-?;9Rbey&fnmJ%5`PCKD(;8 zYC4UME4GaVi}QEoxpEKX&dWWRtLDB2IzGK1+Sb|L+n#7EZ5vf^JHLN^$NWwC^$G-A zF?$2YXy+rB(_KsT2b0Su?Yy=bwIU<6TUrb3N#YPuIl})1>|qz_2dX_{q`uN=U_KTI z^>Jmjgpt5NM+?P(7+oT+6k7tpxJa-78Q&Cfx(lcUB#40>hL5}^)sbsy&adWQftzg` zU!PCnqJf*w0u$+IFjgvjoVXY^EvDNqf0Q1JAHby34Lg`Bd|RQ0v_{tq96INXRgCfa zF1m2ZA|4Rd2v>xyLT%9@?v+C2d}*N6My!d*ZVezMuZc#>k5XD#_N_Zjshdt6KoUJ||ia5W6PvLi?ZnrO2ojU=J*V%|N z_NAVh4J=Fjv{32+*4cAl-OWXe!Hr#*4qT=)fetySHbZ@DH2gmVXqM~R0dPAV1y9gu zz82Wu!rgA?V&{IKw#K_|x+J$j;SnbstnO0wzz;%QkDaa1!&@CU9kO$R(}r0z*yX~0 z%H@3Lst!)rm+BrhPPyV9=la|E&and?uml`OX|6z}f*P+b1~1V%EgqG%C*Av83C_pP zZ08(Tb@w-SLnTz{iQU!-B~?jOG_>y_kW(eV5%b#JQgJ9wH5XMuHL*8O1fy^QW}FZ7 zFp0s6@PV*H*vj|ge}M~k6rzJm=~~?9C&AV`rN!bSAmvVQ_4&1YBoM0O`IX#ZVC6m# ziN7oa$R~CGVg&smi&A&t7IzxaxC)#}7$(Muccpu%%^n6s$9QnHo(IDDZ)u{mM(iWB zM>^^gvU3xwxf zb@D^Qz8^W3L*RA!z;y`<;fqO-RU(HcpuG*Y{-MFab@7&Vr+FlU@a3~d!%jh*}l zS__e+o^+|UU%jOY+8u2$;xnbO&#nXZo4^=GABB1D7>K(7ezkNLt3ONtEZL5+88>V9OVLd3Qu|jzUw~_B?>|ObPu_KXm~2> zMjj#RF$s}`dYDtYBX+SJ(Su~LB}=&0?<%h~0uH3IRzk~HgS6AyHO-4&LB>hYHmQx( zaoCT4K}3Ek;t8QN78OCu5wY1wztU4c&8+~FQy*?S;*^18G+n55*V^Nk^R<^+A4JVQ zqc?A0R&4{8yq5GZc$c>#SF#mnJq$*sgX(KFTD^z1c1CQ%gm_0oig+dIiJTfLSP&Ci zglNYLFvML2yYdV~dxwCdxf1SKClDiItoi2=&itOHHoNTz0-qPO~A|| z<7^>V8;9b))E+UYHQYjO4!4w>hu5v}3D2b??&**GNHAEMgSirDUu|SGssLY@jblDS ztokxyoL`Y6NhKMGMEydxAquZiFogeKCc6=*{~P(XE93>f^%Lih#IN??uGa}ItV1f1 zP|^%>+cu;n*rXd^j<1bTR2Ga`A|jS4X#IEeMJys>1lM04-|dA6d4GJf7_1>8sx*)+ zM|5^K?xFi|7u|}y&Kg9lry~9}oJE(Bf#?O^>h6d>he9#R6U^U?pPs3rWa0R~5HWlP zdtRjfp$89vb9Os=b{p)t1+TW_oo#skGQElKJfI)(NG)VhXPo9TVwY~<9hiEH9kE?K z3C8u*!+8P_T~0(C>jc<%FTBeL~B^w%nkq?w2q{}1n-2RiO1 zT5$o-8;F!$!QcCcWBr5&xF}WO=2A3QqZUzK3nBKG(|_+KbItXbiebO0}QA4I)JlW~PUH5h)y zxX{PLhiBqUlMq{-h>XfuoVOGFxFP(wE}o5Xgj&d9l!B)+7JEw(ye==$qGgClcy(;JHNGSnECEFHBd2=}5T2 zO3%*B^n)00KhtwzIxtKFfhlS@;LFU9v+;`QTruSrPguqq-(V_OIruys-zZYdVM=D~ zGo~HDR07!OU|Kdz%_bPW5d;e|RhyFdcWLAt%A+qD6k4u2=9enCZ-pQ}UIy=1!Lwwc zy-VV~lK52_^nWG%rXoJ8fky?r3c1WCJT@KMLznwXkNRIeu=~^#}ty7 z#)g9PC*!+JIWQ5gbMXsP;We-shS}1;@C-~3&W?7cqji~Rw*%i}iYQDy!~<40z~)Rh zOTiU0-3X>a#M;9&Lzs3A)8){^DojI&*|h|Y>r>cjrU}BdV3-yln+b|^I+#B)-94tB zmyNc?;xBtJ{l%hVGsOqyCpP#bn>7?5sg3$t| zZ4`nYE011e|7JQ?%y*bR1@k;+88*V0QWsv}eWt9zl&6?p4^!!4XJ=|4et57Mn5hmj z@2QOQRVnlYc5c>Z?AXkUO5mH!8=1}?Q$1uOjCpY${FrIJF`W$w=VIzZY^>$rYFRHa ztsSQO$VMa6W?_10tlydH66+P#LiS0~sA4KX?8)>bncfe(2Bs~>G^E%Oih6>Lc>}JA z%{)kmqQ}@fOp%k>f}MfQQLHD}SYkRTY+hikW4~eQ8%!C5Da|o;AErc^gg(kddzqdO zQ^;Z0;J_86;I6=Ci=XJh_`>@G8?)}h@yv89{aoFTgdkYh(I1%-*aA z*%6uN6zQ6>wlKeBDk$tcO!6^5 z>~6#C#dLTC9E(}IXr!_Cm^w|79wxJj0IL@%3o-9u%5H2$!p>Nv63DKE&G0%rnXXHb zx)}QgI}aOeMS5zi&)Mfi3V}tsVP$X(rV+<}!~BH3E?RN0(Z=*X+5L*C4>Er(Qb1yw zE^Iz3vLsuNu|8nqITtfT7J8K_s4|t8-|)%ILXRubie=v{@M=-OA zH`>Cq5{uLfi}Y^UxM%Z6NwmoK|N9c_g(9C}M`UA$>HD$!RFMK)(F{_g3&+MCQ`cet zF(ZHjg8dj@Rt{qB}iX zjsBkk-T&!eF{Pg(#haqpgK1H+`xN_Iq-w@y1a?-Y;#8!AR`kuHd4eh9v2n{3cbGT$ zq1V|g$Fx}4j8Sy|W3w!~e|rX0JUu<^jO ziHbDi*w|$1O-!eh>H9FNhB?bY_sJ?aEkE9Y~E!QCD4*P&n<;;{GKOO|LRWu0e6zlth7@M6`LTtyc}`9 zRl*za4&CJH0imFWI#4a{3z-W$+GtbUaUv08SctXpC~^(RlPPsOMj)$htOMRgBy2f3r5AXC-d4Y}xE?qK&`S2LH>xyj{+ z_;9$Aiz<<^N=ayc_$hYx1ZBAbJiX!vHJ<&@c`!gQZl-ccISR#`#!905nEQZxxjPW? zmXYp3uAR<1PQ|I=!oy63urxZMwz;LdPGB7Ud2FRKY)T@J+^_b1}HU1$|tc`_nn z#jr|Wf|dMF*drCu%%9ppZ4S7W)lbBH3$qh=9G%v-DanoudrMcGww_NB+e@XzTt1v{jY{x!(gu03E<-LO{Uuc74Z<{WyIi2V zs?XECM5S3e5FgWlx=iCgh*zX)(j6h6n~!+cFmVVfr)SEufbBiUE$00AEkZH5g|3tS zf$p^IBXtFPMp+?Fs3mnlp5(J!88mJ?1V7=K&`%7Nf~1z>1AKmw|AhR&|D@T7vsV|V z^FiGF!hKR>jEpf{aWF1i6K3%K++FNRZvZEB88w<)5QDCb`^#4DtZ)x8zKhav>4x-C zyaTrQeC&yTqH=3HUzM-P-v{g1Nuj6EiJwiTX@VN1yi;YYX3Jruj)uz9Z>W{5MkGfB zQf{C+2eCIdn1W<&0G-W!<}X4QqYH4W2F5MUUbH&k;A@rLz z4H1{x=*{cs!<#^X?4<3;VCZE{<<f|6aUoypoQi${!HXh5Z184ejShh7V zgW=i?^$PrQuX+IbDjyIneW#sLyxezOot5S^nh#@K@8TT33Fk-3&_x=DxYJOeAA91A zYt>?OE*Bz>mp&ra)T35G*B0QlU0QRlf}nxLr#Qb;-RTIjbFOgO zMp!O=mIjF_d?l_Yy{zt0mb%Zn?zm35=DAL~+9O(hPTfXU2%ge<@fd#)a~#7Rg<({@ z1hNtg@njk1fl^#GQU!6hv52dR+6s3)#}-?NeTMUZG88eq3h2wXbf7j>U8V-m+nk@U zPiQU-2R88_qE0f&=; z(grB^-L;ke+6Zolut!MY|KaNZ&D}$~FLo6zVwf-Kcf|RE)lF)w`bs?nrjvm* zf_y?v$_j1`_FN7!k{5-O{28tj?kEj$pUENHz;$sXu zorqu!B^KaziaL{zo5;}`HcUgA8t7Pw2iCe7$ORZ$MA7ql)wc&*^y3xmYFLKasM`_=Dw zBm!$4iW<&sh*Q+Vjxv*6LDr$t*irO(xdqCCes5%6kX#F@JK?Uo7khq=;(#p9fLyaKMG1uj# zj)2};C=j>Jprv#}`a?b{{U^Q^`tj|^S9ORoL+OoKd@UlfMnrJ?YBkgl+;>)C47Sx) zW5zfHRA*;yFn@@jix$i#y=X3KVMnP}aCz0It$_U>1unD6>SG|J{FI%FN!2NH-03cV zV67G?542lE&v)Q^k_1G)uW3GrWiBs_1`WX4Vgus3r?k7!Yx|;2qtCT_;2OAhCw9 ziQad&a~!e>_8azU&Uvm-rH+;X|B1$Izet?|e$zq9C+9F*>%3Aq^>eo79Lmeck1E(` zyK8%7Z|8`%2RUr^-FCC%r~Rz6tZRj9se86NURi)y>Wr$mzBu~Z?0I8yXJ>cFZkate z+nwDrH$MM_y^nJ_vONdgwbhGSBGziJF$X7h4Ex7T#f|XS`KZSn{eYJk_BK<1kO>>yFl82wiT#w-%)LPAY!)!1wHI*|R zG5Q&A8YJTc<8V`^>A5)xd=7%?i~c#P_si<+@PH}uEV;E@MYlz_6$}t{jXO-8&CAU$ zQ-Sf8VTfMR57q}6HiCWikm(Qe5c3^8hnvb6E9(#GCdy5uXdwkL_!S)GJ>-4*m!@;( zzssl{@o z#Jlo#`L(oF)=LvmKixrkBcOuKc_IIFR{abmX?Q|l?DOxnzHRz+`Qw$3TOuOActlnD zc|U1E#>yPu0+XYI%U^8)H1%2T3pbrRNTwt6G9Ejw!$8!xL+$BxWt7WkbLLdfe3{-M zJu7WmdPe%1-_x?{xx36&hqr6Z(QCUE7Z+r@D=@c!TMsPjFtMV_Mqz~4|N+K$- zgZUao5VAgAl`%5?QSoDzvom*GjaNF>Yai4LM@w;)m zu^hNXUKkn}>l@D+t-vyTHO7K3PaQRH~UHIj1`qxGQ#IB>ED?KSbKt5sE)a!VYTk8 zbRAU?w#=`GJgIjA8i;C6F2wARjLIiJ(IBwUH{ zip>8o;?1UKgP+RJ?mX@P((moWPZMGnry6WS=?*bWUrIkxKSXy;E-vp9y#yO~7J1}3 z9L4+GIJ(icVy3M_wH(R$gEWSV3cDqqFw`6Teq{~(hv z3#?hwfNGt~yZPlpH83!R$nA8M_2Uhp#@(jXmICWs&l6t9eM$mjS<|nX?`QA*p4F_$ zrul{jI$!B;VInlXUU5gEsy7SyumpaM@UJiz%5+uu>tK*b=Rb-Ib)Lp9<`&kfo;AEi zc}?+};Thx+X|b7R7ek5zrOMJFDNwh`Fv=KV7^%zT+h}#2F}7y5sRg8&)8DUm%lEqFX3U*4PrW{7L|K!zWp;EF6W*BX`yVKAyJTu$%VG_@PMB)w zw($?OKi!9&;f{^=#`(e7uhS|fH%WXIe?M-^&ndBg#I%du6u%+mcvc5{b6QC^(|XqT zqknwBvtmbm`g#_#WElF$4f&zkOV=gGEJu0gQP(N=K_wQelG4gC*F(o;+l_*+1r6*s zoCB5F)Xe9IW%W_U?v|d`<<@nUZ{YLXE^ia&5u^5Axd$fG9J-R54b7Gx{3_mq-^A^P z7VKEGtr+H#7lAk zyt2A=zUOA|3qFT@>U!sT95El!CyO<>2z8%pzhj)EmQ!}00b6BPp`rXvpJR%&Z1Mcl zdxg&!-&VfMd^UP^uteyi1S1{e_>d_iY~(>z3j zQ5d40adxt|ww(ko&NJt6eZ_{{c(sG;rai&d&@tAXLbr$u4e^%x zUb}qO`kwL40^cU_1-@#%!7HUYlg{9(L;NB+455fO+SE?YTAl_mSUho$MU&)|*tN&!I zVDYwovkvuGXz6dt(sz;93gx+Ns9YGYDOjIB7TW0M8yA3wxx1GLw%*ddv%EWb{LeUE z4k4Fa#|k{M4XHb#4!_!Yz5B7i-P3oB+818{SkNnfQ0}M9G8q9Fp9>Pl$1aL$@U_Y3JD<*d-UJnwx4%4c z)@ysrp~W|a#8nz!^-9$`l_!@wQPSocWxCC;b~*FPWlhUipC0g=&t8xhYx8gpa{cLw za&C6=&MHnn*AjO-Z7TO%I%J&aq5919zfpX7V2|SMigoq!H&qk6tHbScbC+gGne{SD zW{=9dYd@e&=iW<83^l-@XtTU9Q{x4FRe2OR>34%UXqnVm{#*Vkd59BGiJ0hK2Y;Aa zkehcd*Oi-*ALw|Z)Z`8NOO|%tC;SHaTm9GimGpV+@rT*Z;3L-(I-$brJ?%!;a3O*} zm~tx0edIIJ1F@Vq5=bIDe-^#5PW}gLrIP0LmSFJcEwCIlEyiqZ70QuJb(12YGNA;j zi5&a~DMSC>lww)!QPy)DIN!Q?RI~0de=r6ZymZU4F8RzG_?}!-t~qDnW1#hy!DVrS zg%<^jgUKNhls9yVEO~1;CWvs>4m=2P6jy45; z1#Rpn9HEZf0y(!_mNnyYYT2aBp9SA@KE3|X;=|rgso%2_=472vCL1gIpDPnpp>pNk zl}4A}SY}vYfA89c1bW1NG^cOoz~3J-C+AEr80h@1ETfIcHYj552QTnvM}(ujvy1DL z@|7MGs~bZ-=lWTTM+8<0tmc2i`=hyuJdDOTO6FhB{+0P9vu5_E+yV5Y_^*RbJrvFmepFh$$}7dCmUI*4F;Panjv}HW6m( z8kyc$Cj*uK)F;~ei)Sh88Dn+bAHpBxv)Vy9?N;4w)NR^b)D3qM1-UtR3w!FT=)wG{ z+oYSP3j)40-!RfN&OFGn6KL83Q$J&Ws01_@ZjerzMIEL@L6f^46j+m_{`&tJ>zkWd z+F7btx|k(!7CzAZB?AM62-z*@-&K_*XaEg|D#~l@KaNOmL=7Xk9B@%l{6FAG9;cgZ zIBj@j{MUFKs#!YVtsCo|*v*tQ)Hhm8UgnPGd{aroIB}$!m)kNaHsbER+*9jz9oT$v zTZO|lFNZ#@|Fv;)H^)h1|DdcYN9!D}f2&Sv^-ASi1U9wQAx8^3Wa%=SXSd87oPRXW zn)6qtHREdPy`(MizoNTGdVksedD2(IkM#-bf0uRD*H!VIU8;Tgm6ft8dX>LXdP(v6 z-m>vESIgBjzkT-P%u-q1bN1)oadcNY(Qse`ZfZl7B&W#{YOe^CU^&-N^(>bpcQp6# z8sX<1@HpU+{|Vogp6iW4;zQMD-=CL~ZOVR{{U%o_xBxZHCEQ1G1(cD>7#kRu8pi2k z<-eu5Vvg`jND^jmW2N1hoY>yp(y6e&J{2uw4;ez>; z^@&F(&-)(W7c-YI&euJMLg6rO79#1xh!4h46#p;uNymb#vJH+_3VY97Ak5CnsXD7+ zpmB+5fcY+X_%@h7nr0cZ^>uWWr2#@UekmAwn?ko93IzOQ@lSkzG`JoU^u*B1;A1Gz zcho1yCOHCyAA_LkZDWZSI+wsXhs zZhG@HIyUR3;4bD-aaOJ1x&gHtSMx6y8PLe0Lhbo**6GZU?7g{n!7g_=r+9Wk)}hR$ z8N*YGCmfHi@?DPn@B8hT(ZB9wCOf;y@4UQ9G%M3Mq+RfsQWXO4_*S;QlY7!5j>Nnl z*7(qaOO!+9R5oo&x7Q6KPN4AB|N6JCcS6r>*jn_Dxa}Iq19WZlN%}s9%?5v{ z`MlLFma9sY5KmizyX<3rhA>IIEcxh4>Objc8fF;0fUpkJf7g}Pak}I35;+-~!0YuT zP!IOSP{Rbn_dLJ=h1eAGPBJj^VZ z<4oS>0@GacUh^Zf$#Tg28|d*T`e1RHs^*?dEcvnNon@zn?ya%2&i?3AYj2Kzx&1p$ zyXn?hq5_APe^%L6xow3>rS<+%=CXXABPzFePHt{rTXit!zH(P~ow1M1FPl9${qe8% zKe->PA~!@<`O!b_P3q0O-t<4?bl)Q-ewJ!ldUa5mzrXho(@Zf=^>Uc=x9614IhXra zL4vcZwvt~f{Q{o3o~V$a;AaVOEVs9E$gV1C5O+xW+xXME*ZZz-8$ZqGt0zyon^MUf3j*l{U(=;Mq-$Hp6oL zRCy8j-!c@c8nXfqOF2Xf|EJj`x51;<~+3m{?wzf^1O=R||QLA%afaArh$)GF3+q&;5)V z$nDT$-2v=xKkU8hN!z78cvOL6@p|1CT|>RM{-Q2N?k*pYqQnEhG2Pfi*FgFpzn5Nd$CcT(mf2aUj)a{tjlPF{3;)(V z>RW98q=Uap*fO=@x^U|{@9jRZUZK`X#xwFTv4k*_-_QT%BLoZf{u6a8bP4iWX)F}d zYpZpf-JsrbDBCM%SKe}ahI<6*Bi`2yF*Y?9nAe#f8Jp`zONaP|WTAEhRYa(drr)_3 z;fl0YzAFEaRzT;uG~(4;)b+|kcL!yWItIF5nMl%K)VfQQ%`e@{;&Pxl$X~J3L1!o{nlf=K{Z}Ug^sX%of;G6R! z7}Ff`Zf8*SOi(w!pXid~bP^BCr}ZK#R~H+W>wF{+ekP3p_m2&%Sfa!2P+g1F zFfy7qqEcZGGHvJiNnBT`VYddFb338jK4FkV<#7F3jGJM`e+<#Oqf!~+F^Sf8sBY}0 zH>-2Co#36kfqP>Y{s?!S{7uJc;m82=f;y`Q8OIx>J-X|LK+{&#J++6bysRrDl@R>7 zb~FU~+o9l|c@1WaV~EN=MMd!=AxNmrPe5IA4~|1#<&bESyXuR{J zDqgNBv1-{yn%- z!1hD3X=A!m`-B|Fdv&n(U8@JwW*0Jy8xAi%4DH&NTqRUOU*ym6|H0?};a3Q?#I>k| zs0be+;yF@LnO86=vuE;=xXfq>Qbhk7yEUO%%8iVZIZD9~=MMEM-HG;PVzvBJt*8zM z58g#^4t?dKgaa6Lo#Z639e9%bmA8&B1!MDqa+7lMbHC*W+lM>5LEC&Nv>`64m7wuZ z*3G*dj?NA%>VD2RU%6Lm^EkHt%R0(`VrvCu2(K*Q8G~@k+SYZ|v zLYhf^q#DwDaXM;7R^ra_FKT37aF@7esH&)hc$CKN!>DKkjcY|)rnS=AYCW`5$l+H< z&Dj$E5>&zmW2|V%B^;32BEGmttRkj>lj{xg#}=_NSjyv3Ni=}}4Lz8r>T2b#dx`tF zyDX|29BPcV9tf;K$N{wkzRnA1i{C(gIZ)p;5=ibToP->fjptDNVc;ELyy&j^sC|*; zucv%d&LERD0tgjf;505_EpS>5Ria(d&ZW+LXG6DMZA2Gy8-)NV4Y-JVq6Q`8Pg;u7 z&FykNbzDTm;hL?P-N%vRnD5-;tc04wr}h^1yS7!feKx(_&r#sKuB@b``0tqaZiwHJ zOGzP(=^C74zI!b0|IZa2vc*%#N$v!8LN4^lKI8#^C>7mDo$VY)?62*D)8;A$K7-fD z`wO(5Hb>>v`^rINCNC)K)ep#_C2~!Le~`fsmix+!5Od$lRiUksUn&Jm#J}n;?I1lw zIw8im7aR_6fn~pd8A3-rfp!ifm9aZL3>cxWkjr0%a`Ov#u!?E|!VTnZLmB%ryyF3~ z^=}Xzc8mXE)xA)741T2ZSXFb}C2|1T7DjG0lowVa!@LZiJmHQb#tuXXX4^YLJMkQT zSy{>zcZ!lY7JK79{1vV>^3d~X*O|{3I9QXUN|o^LSAU!0g%?*~50~U+NFF ziZ)k^(Hep+W*+z<8X#}90FmMn>Rc#}9E957WNj|EL-xRq%YpIc5SeTUG{Gg*J5~k8 z=Poj=kAQiv3C@q%h&A6-cO$#~k9tBqr%K@OX$?M#6{w4xfGVzK+FJ0M9MP^L2dZg5 zz?js9JB;zS4iyqV$-h8NO{c%L=h{;o`3|iQJa}oa4X>p2kq_O3-)=)a7y&=UUW}aD zxU#Jn`9Dz2wH7(jc{ECEsX5fQP(j=e29a{eoQ?tx<2$&fdV|^K3-zFXBKsbUyhygT zgZ2bt&1@)|#DJY*J1p-k)N$$n9QqgXC+7=a*@tI6{sZ!gPO<>Frv+flD2YtWWm*k* znX;(wILp07_Mih73DitS;I%3NJ97)ObtOKIpCoL9w#_L-S6skT?E`w?xYil=X{jyM zvan9E(P6+D)dPcy3Cid1)qUVyE{;|HdO8UFJ<;4qegi+0{|#=F8$f9dMD5{p%tsxy z4VoQ@iMv4ge*}vEFt7(Jkzbwy1lCa070p4;_!5w8rGTNof*O@Hau-}C&4KA+7`RN> zEf$DV9$DZ)WHv0m8MuR?`1Cnlf(n>^Kr4-d2fe0cfYlL@3va~vaNo!>9KneB>K*XU zGEhVPVEZx1v@&FF1z^;8u!Ot^IywRfIv-%J=Yyjro&<39xj|faaM?-R6O4dnKm^Fh zzgy6&)sRQ8g}TZ2KWaPS|7$Vo^1&!H2P5D<_iK>-$v^mDjVBk?6!f#UG0e%?C@u;1t ziT%xCaD6w2jmDzRvLZYx9b6_0FuInYBBT*U<8}YCk?;~W;3}>B9O0t4xXm|@Q_rX|F*$WJAn5}rp15}8G-RS7yj7=tuv80 zSn@G!UKu0r31TRrcvJ*u(^d3vAXxlvVkWqQUP{H?vkA^V16Y~m@Y;!}RB4Z1%mEtc zJdVBwc&45B<}Vru4_r|=Uu^=TPajyJBwb^9d?`7Q?QqaBbI+)BXY<$->>7 zpvMfr4aMW%-{3h(@SqI5&I3MDPaL?8hlT#O2*2NoJHu5V;BsKqa(H;dza04XTlCOR zj8aye!LY_ApqVoZ`J3qEidbKPS+ z&!RGH9==~0Xi+vYAjN|_Age^NqMxeZ{p#@Dim0=&;&aw^1^!S2=j;xfEhEz~HhbgF zZiRK&EEI*>q+d7+tA>fgUsgjAj~Rr$pMXyk>IqBt!OSojzn_Y0ERPY(a9`)pH%XXh zdZ8B&lk1pkE}&ng0;T#MV{#R)e;NFd)n73L6030=j9#w_OHx=a4(G{5>sS?5S$KDA z*rhLgF%;-W0d<#&=(iWJ9rz>BWB$OyvRb+txV~V_b__9_kG4i(24HnN(KuE<(8+li zQ4IC$3y-gjIk6PJ-vF;l0e+#>kV9H56l76@UJtt0+klWRkuWcS4V67zz6vO+1}F_|2uIHc?mB}#CI6F z^((ISEN01dg=E8ulGoK=A*GTW8IuflLg=!f2F3qJ{l)mV)}KE{U`{#_k?Gz4RI99GcX za3pp=`hiy7!<9y0b}0D&-p0JQe&Ml0aC9RoZ)}BVd@I^n4Xx_|e{7GIhv2g;SST7- za}G9p0E>KscckFK?onoV3&WLD9GO*1{KA<0h0ocUSiOyeKJ|q+i#QG&Q5<@@7_Oo| z9?j6l&2c}fie6-hdsYj@>Y7-MmIr2t68K&id~y)l(i7g-8{@4B5NWOPY!C0~fzN8g zn*Ok$1HP388zdEaChHSc$-^p-67k-9JU-$10lgIqJH()UN%%%4d?gvr@3=n3OlCum zsd%6HN)l!-cARt^hoGP86yA#)z!Msx#U;@jtO}OxPJRRbuArxjVH8xxXk>m8T-eX7 z9*DKigch>1CE&c@VZQ{NGXtZa&4h+R+XUhlL9hUu9qJYKO+)nW0Q4o8HSwM|F#f6V z)u-r(uV^U_2yY0&ugbx81Y?BNusPvBtcs1H+)JR%tj2~_-Z5M|L%|2(+hy>qgjP1k z$Y}}thT(h_&~8@AQ39>5jq|mDhc#yiPh53*^oRle$I$W&jbDVv4=6mcCwkrtTd*|> z8y_{%tE?i4&C#p^Mh`1_#?~k8Wv0{oF6p&&491nE36hh zfx6TO*gs@r1hdMFAUtK%{N%#(SU#CA+;qK0%hs)vangD^g>t=mt=6kjK{n_7!WOjCDy1S~n zs=MART$wbNJSjpN5@wQQ#Dm`nwa1``38O>!y%aoo4B8okvq&0M=u<)|O87g?|4r&k zLIg{|)&=8J8s~hl4GQ{(`X>`sT7_#xp)G{5wZU3^#|&N!&sQAh8t}BgU|p9hZ4^ZE zN@>NaXyApd#vFeKdRr7N7zhmNADAbG!#C*w-D?Um4F&i$%dAo4_IoS96h#96Lk`YnWB^{BF3E7Rk;5{`{N+@;VJ&yyA zbWN@hHwy3N+-&Syc-0?e*}ge@Waj0pMOnpjXWN~qO>si=RR08ZH&@6dv^?lrLe-_<|3pYX;fwU}Te2{x zyoW_4AH)gm4D;(v4O~NjCmRI~z7O3bnIOz|EMDZ%UBj%o2cxkBzQ=4tQuE-2EyLd% z@LGqyU4z$Z{J#?KjmSsdgZ3Q6>m+>hlbEefVCKIB>Ai~=d3aBu`(N=4Ns#Z~c#>$y z;b%P6SKKcO|I=T;p%-Lz6Y(?AKR0Fgb%v0=q|r2QU z{|-E}2fY!8`5_v;Pkyxuth@&BANR)9_cC4ChRR@hESREu%NJ#%5{6h{FTBz%SfyAa zzrwykN9jDcc}9YrTR=oO4iRn(te|*NnWA>eOp?7uKy*>?5q*EI{1z6lfY7 zR*dvmg)9NtcOrU7LNp!;{L5{u5In~JpRuO&4r>ixnNRrb8Ms70xd)-6N6_v)@W(eGidl|6U5$un4kEUtxcdymEOXG?D-a{C2L5If zqWn$xZ8gSW5soj%|9`?8pNi2LhSdm~go%}B(?K)B^x_+f-lw?O&`8A~Wl!mZKS0kl8ONrZf-e*u&) zVIBjh%KxDpi64MwkRp(^s*t?Skki)qSr=Bq0L^#fx&e$_NwlLXS{4S0u8dEEpasM_ zU_c890ZHv3G$X-$C8+=LXg;WI+nVtWrS!eoZvX$Z^iz!^#Sl%$uihN=F)2vL~< zjZDK;3744VxAt1h3pCfcA$PP&OddFkXQ0`f{G2fSEP>fZi+g0jYSG+7=vYEL7VvA) z|4{veP$f(&gJ&Q#A|d-jab7|EO@1-qq{&YMkPNN&z~0d;or`0+_&)_di8q4m#}B`a zq@#q6CPX*c2rvGk^V4w#AuEZiK!c|<;7u`b96ah5uvQ81e14&&M%=v+KBd{rg}adj zA{GT=S;&t$ky=QY-5eYxoH!vSdGxRj@`H_D^aT0c+wC${50i5Nrjq{-hU8%&;!4WE&Osc~JxnzFcW0R0<`_K~!R_@AVo*1!lWPmv_y zWoey>Fst;v01pY-Ws(w?KmMSr1aST&XCxZ|Y&BhzdW^nFy+wFu>N&y_(>M?&ln}sH z+=cM=guNzNAVhHi^eWl&03w-Cp@e%bh5rNk7lNlF-kvwse0+-6 zWXui$3q;Z{qgM#Q9zaY}k8JNi(IX{r z-6D`5imk|Y2j&Gr`qP^x_5kqpvtvKDkCz$8IerkRBFoQM4< zoIBZ7;&HLz-Z|(Sdb(UZZ5GZWOBJwHX?}~93adrY9NBE*#~>LXOgix~kflzhh|BLPfqaGTkl-@4;{F5ihA;tM?+)d5}<@PX*?*E_(p@DG`XqA^cGFB+Wb_ zQtIV6o6|mbl6|MMf%C4bwfBi!1(_MS?00x>X4vO`*iUKB9YVI$Gwvoo3^~a?RO!gL znkB9fKJZ{G^PIJNbN{u~ao+aqmpWiI>o@%AE%H3DJR&~|`^1~TnO74G<1N{uSZTh+ zuEGY?GjTNM1}jrI_EmZ?t-y2EjT_D{MYV-`s7#aLd*=HtzhpoT8(jBgIwTUB^Agb=}q7TT~8FhJa7= zqO=c;_Sb>U30CT`FMtP0XAiL>xN5*u%@+;AcVHD4VE6JI`xJiTHtfZ2<$nR?Y2@Cp zx0!27YoPXOu)*9awl>oMyqV8g9oL4vgE*urJjHwrYW_$Eq!@VwzTKTEi~Y?K>_#y8 z|Am-&5NpSd`M;>Qna%8A3u0&e2Ryv>%s<#?bz|PHjQS&|*uR(=*olb7IH8IW@N!$g z`}+~-q^m$emXud2XJI{1y+ZCT$18&vhkP45`wtZnIMm9_5k%?zSvT;Nf}G$hCm+LZ zaxy&7rpyoEev2`C!59y-FCXwVWpvnmy~fymEhNMZ(672c-*tsr*xia_3o};{Z4YDavR>GsdC;qJh_^l1dzvC&11IReSm_Ez z?AH?emj#q=h&w(5T^|Y$Mf7{&Uf8adyzY11_7h#om4jAp8V*l|pTDO92h@H%7{6gfd zyy2?}J-PO%nKA<02zHi7wWl^1*)G8Mw?i5i7{%sIAuGLL|4V}DwUJT~>)NOA6sXB3qc$rl6c(00qH1aj zFbo#Le(!L3Fm|*jN%^twJ{>ss{K_6Vzs!MK^oG0_$kwaajg}D&UdQ_yp7Em0VUKPB zo+d{gA*;c5*d4pw<-m!sA4uCZxau3=w{=o|DM%_V2~q{{Ae4l5nZcA;Mjj*m^qul; z@GV4c!+kI|B>PrM2eH>b5YZ5_e)|k{N3|Mm&slX}pk5nkTB~pIzX zxW+n%<}taWvJRv>Q*%aT*{V|h}0>m@hOW_Rwd^pg(lBWxsX;g zb7FSO+&Ov4cDrMtbEk8iE7E<$TTh2TkKl(~S@GlTiC{hWZGqGf3h@@rKZxf6u+fuJ;n=zPwJV>vMUEc+y=)*J#%j z*Hrf)&tcDQkJ(emz1B6-b;xzVz1oxMt$}*L2Vs#ugH53umx9U_%Y>QYAE*$&MLh*v z=z6^hIo~eBHA8j7G-TyI1DpL8y$r0u0>fGZi)`cnbQiUCwR1I()Sc9uFk`Jje$hBM z7vI2R5h2bHRKgzUw+8utw}sW>F4Zr%9pBXtL7r3;{N~BpK{}7FnBfrk<5|-+Q?hA< zxvAx|xu)f~`LTJ5*q1+4$$oAN#(S{xSN;te*>_KS%3-ulZdj zc6fZ}#JR}>Qtzhyl~E`AQ0_u|tn(lDIPZO5135pkD89j7T@fp(t84Cq)jCGAO*2`O ztj@0~q-lV<+h@UqQ4@T`HMnW)5mfZKFL#p!-*V4v_ht0=A=hkIWmh6h^yhMp!XbmC6>{MkgM*{0*jY7H-B{z%9MU?qBT!8vNvGB4 z)5q!F>rUxJU5K`XrYUmaZvhEA4O|M1_}N@fwkY^W>&UgG4L$)?;dXo1flH;U_oe5F zXD6y~k3tUDP_N0`#M{tUTPiB^*d6?idT-;nJg|0D5Q-xsY_)2G`nTqhwmx{*C0(q3 z339M28w(p*V~pXlK>&ODQlK@r0MmNVnBTb0;MF_yB@DFQ+*=X+v|g6{grWn z>4d40$!Uxk~9N3G39W1&pkjq?^Z^Yfi9_&MS2A6#OymdS|u2^R) z=VfPp*95l@?7!W-Hn0fu;9+0oY31u6amrN8upLkh=CH5;?7D8%D0NA7Wpzb$8TG%& z(hb$_(iYTp*Li>sUZg&WyyD-;(W)uz;0u5OJcV5hzS`p8=5~OQdnU&3q&LI!)?@R` z@K!|amZiQPK8N=zQ1i3AYEc@7Bkt?C=rc=jyr06CI?zq`jg|)xOu}X?42II$5_|f6!3N zSj!Y|dTlyyo@*Y2x+aaRBdtZO#ez0l=LPA4ZwDLmIZ)Z-PH=M2iJ;R#{{}S-x)4+# zXpQxR^}Xeu^}1!MWt6#y;gI&Lkju32PH;@Lg=Y`Ud7tCW`H_`BtzlBZxH`YJ(IG#F ze82E*!PgaEj9-p@Dg3q6w@r~nzR&xy=*Nzzagl=}KS#FuG5=TDxUq?;$&b?JWX{Mg zn0wFG$KJ%*$vxQ<>HW_)O0Lfy8zyOs7v;A!KDOFWf zAC+CaC0-Y1qOyB^_yOy{Dl(Ci!F}+Jzl#3a$#uc*KmvTwuRJS601w&9Ls zEwW?vTvtxyUqCOf33G%M$T*D^I*Ipz%e$`9tAD97Rh88ZQ8A#N=CNi0kQ%qObG2)= zr!kVpz_))zAEOU8h=!_$nuhL%{e~EW)>yzO8NM3M84epx8{Qal44JUwoek{`R)gAL zGT4Ba(gGtlNS~}*t<&nJYeTj1n&+A^nv?1->Yl2tK&KZ1BlJCF{oZ88D^=z0QfFUV zZ!1rE_Z{bSM{3>~+n>2%Ikv2cnNs@6w1KH|a(Yr^V$sAY3H#zJ#V?M_h}{r7C3a72 zR&4RO1#u~H<>If!8xz(gbV>|LicgA4-jUKNwM1HMnv|~1ESOb3yG%}nTzBqs+m^gV z_L+{(&W5fA?(Uwp-hsXe;P!Zf7~>YZnd=OuoR7ja@ssMh`k-dImeu{M3)ZjDXQRGK zl%b*Vl<~bW9o2^ln`)bCm>QZInM#}TjE9U}VblIIY&G;Tr0Q4d!}LpmbC{;(wEHz0 z&0Muj6``6at`vUoZTT}?ePlKFLq=nF?7xl1uG=Y8rxN8;(gLZOR94FK36jhA1Z-ae ze3gCoyraDJP=&OjSMALLW7S#DQ_lzdJmE?3U~-79B+zupHK32la7P? zWV2ilSrffcAs~TW$?1{Hc}nOn7E`@b9ai_j2shCF(jL*Z)u-uq8wR31BcP$3%&F$7 zmRqO*a>!ads98|8pguuMgVqI22pSmFEvQ1!3+pUvDeD`{bW5=1mU*bzW!hq@YC2%7 zV7z81W;mxWtzW16rER7?2UON$by4-7s(-~N!a9B~7s38QMa{`lV_!AzL-!ceLkPBS zvE9z;ll?REO~%0VxYT_qOOhuil}ntQuovYb*2Otu+sB@Z=^m5y``z#C-(6zP#du>n z#h#7LAGa#5RJ=F-UBcPK14*lr`=vBb?US}BJu;(f*30a2xqEGKdDR^~ooif0JzKmP zzG3nwr3f3&jp8>6PsOjQS760jr){D8hzcGyw7nH9c30C~Q;tbzwwOzqJDKO3uL4OP zWGQVaVaaF7L(Q4X=EdeP^FvcBwAEmo3%}$~$aGiTVeJ=97OY_#Qf*9&JaXR>3KBh0}%I7gm6-u}ZLWq)ta zwl_o8vC+B9sd24#WxD#HX22{@G4D_B1>Y>GnVbu5xTdJR_X8Qf(}3X+#3$l-RVXTa z{Hdv~&DLJfHPgS*4}%s?!5ldr3sd9Fm&|$QI+mrD3zjI0Y$;@|VJ&D?ETUCoby*%; z_F2|ix>{W3Q|3A5n&!8r0VcKSh_R;et)ZVG)bJCvwwmb^bSrdj?F8*3O%u&$=xv5- zw#p4ZHV$~3n|w1q85zMV*)ymj`PFX69vL;UKv`f*od+r%1TlVj{Lu`xP~_rX|iYu&62rFC+yQVaFd&hamW5LF}fSj`6Q zIC!+N@Mg;zPa3P5cAK>3iRRxn;KTr2|lo090*A+Bn(28pPS(PstmTP`*Lx4mK5o$?)%$Y z+IgrkOIkmIC7xjvvq>p|;jR1RBZU1}X`ZDP%}Y_imau68shm^Q#x zeKHO+Mi~|x3K;%DO`cD>Il3ac9Y71M*HqEOVwGwcylhVW099`?fXWCHA7Y*u0aU^| zWb3x(cC$NBZSx|$|9rkX9;a)fGsFHcFUfW{_fpQ#>?@g3>4np-rwmD6ne-vCZQ{p- zU-5Bq_hZvyy2a>Y!eSc6ERIy+$ zy$EE?D(yo}Va;UqQSX4R-*jn(bf(d+6;AKWdGqwCBEi zsN3XDab0%pa!qqJa}{>U$o4-DwxBuA(a!$P$Yphcl8Yo&P3)cUC_Xg)SX|M# z;jy_fTQKT|n5OWe8^s=ujg9RQcPlO^eouTvLVCix#DpYOO3l>OX&=({nZ2^EXV=d? zYO~rOIi|V_d)9e#!MSq)bz-gD2>z^)A(mCw)r4#9+7pSIJ2EDr{2}ZH4zf=*;T>4)*b1t>)C+nAwyund-^_OynWI} zWGE9us0Vf2$^sdp|kNOG<|{TgDC{{ zq*j}EnxDXqNoEUXCdnLWK4TtfE@^g}j+)w-l8vj3rHz;2ezk2p5|aD1r*Chbh7q?H!|5e z)4ImG*1E|$!dlh(!LrCw$8yKq$IO}6nu?pY8Pg5*4ZHMdx}Lgw+G5&Sn%k%YG(vSl z%qK1va`}P$8+c+{+0WRmKaF)hs@L&U>LJDXCi#-UJL9E6!EVz102D9p)M5*^9{7;H~Q&{)G44TXRBvOq~z@ez0npctqsHCBjpzZ-l? z{=zoOcF?BFI}B}qk`AA5u8eCIpD+Gw+}PMv zG4o>H#N3aq8$Ud;YVwzqhpFw-ZlpC&cVyVI=H`l z!1VNI!KTUI5$dB7mqk4i`vl2Y71^ONXsZF4K2|$kyIz~7oudnft?z^gWQP6)7|*8Z zQW0H-8b%@-2{&ZxPwRW29@snGCEZS4W!*t-aqU6PXiYs$sAiS=3J}6`g|+;DsFr$y zt;`~P7nc*u7PLXxK(o!2~6WCtUean4Sd~WZ3?;!6xZ+Cd`lcaRXB`?N! zqxv7T{VvxWb&U*Sf0aw!0`0j055)+7vad1K_=o9?X{@=2CCgIATFpAgx*G4I))v+T z%W6wgOEPrcX^t@$hR5;|mF3>S>sH{kMwwQd4`RkkF?XOotBVuB+=#r*crvB9~fe>6YQ>bJgDQjE0E6`nUDtx)X5UrnP&{MvyEsP`k!e;oDZ z&zHfkx4)VB-u5Z_^PgXjeGUG4;LGAKV9M>8ypI#u*{IypPVOZQKx7wz^{a2Lm9UXl zToIlgKDE*YWB-`#%+x~O(IE!KVpP$Z_WEB2x3Q-wpXr5hjB&5=tnrcYnQ<|Gdu<$P z+GP4-oMR}X+ox_UHs_;(hs1I6*9=w-gE-7^GHJ-c-b`}0})2GDczW6l#F*!<+3nV zNlJn1>%O(L^|F-Ww+?P6Q}F8s5}=ZkNfyk7T`dtLZ# z-47X`XMfunHT{P<`s1$>asMUWN@h~0q_|QhApLQmYX`Uq-gDg{HM?9(9IG77Tot@m zrEQ8znd>{~nw2*;XJb}+=84ST8D%pp89y@KW;My(mnYjV*}LWmwxhX*yvxq}zHMBx zdYgWvajY76}sT0b;6pFViLWr%UJZm`CSHJ2wUA7Sox$JAK++i)kDX;=1iLAIt z=ztaax+-4d)z;Hr(~r;>)C~bk-eNHZmFpH`&E5#S_*`DiM`Ax`p5jB4*2q`Scf~hY znkoN8weYjphmVsDkmCAsccm-4lK)dYpsJ~^0d`FV^&kslg@3 zKJ8S^Yt?Y9NIwx?i@#NOVZ%PE|5ddWTLB3>R|psDptb7hOPBm6H zE-)T96|vL~3JcMOehAGA?GtLrHzULrd?thoRYLa_7*XJ6fnfy`^AE~DEnivdKGQ95 zS}Zm_HswbI7jFK?XwYpDmdkD3UG3-dD%i_9dpa8AR7w8!bHkS|?@qqo^eO#w#mK>5 z4t<*U;g9#*Kb-qC;w$qlDXQd;>Cww#x+hdlTbpgq8|qx-;PP7L%+2|h*UHnL5wR|m z#BB%Gd7`_YbFO2#9Oe$@5c)7hKn zY3T{`M0npz?bvN%1>HnrJ@a03Z*!I@+tk_o!(7tR#d6S66A{WzYo4Wn`GVo4R#Ht9 zW^sRD&-o$y892^aipN*X^Uk@)QO9x1vETXH<#c;I=b*#Wv0v0r%90+*kCaYq7+($i zVK+6qv~#p+np|~D)Bx0|FM?s9oVE&Px_#;dv9vG;Y}C=dHLe$qANE_W6OxB{$pp!g z=cX&f8SN4pf&Fin1o;SxsS|aO#1SJHOjTclccM_3fvvpPqc#`-2db{rgAaqO<`S#WUWe7szOvRW)~t zJm)ZsF@1mm}ML&Hl}N&{HZ7)or9G#8haHRqVzBTKRov9vcvLWS z02Td+ZNZF_`${XYo>odK4IcJa;8)0FN?@12G7!qyY&q;q9pyJ7t74X_2%dSF>L?KG z;X+~5N;HD)GXfP)=c}%Y>DcG%!E<1m_z2eWHKJFXqAH?_5?hG-P!SWWA;LYO8mfs7 z0?WlgO$p67bu%!bh?-X#mv#l%NUj;1nl>2q#*)U-#(k!K<{jpx<}CAb%N^@Stb8xE z-nG0j*S7Sr6tOr>#Y_g{Ib$F5X;WYG9pio2v68x}y8rYQbuZz1_Z2Jfk<0_>o7d&M znfEsLT(&ObW}@w<@UhaHYi|yJuKq(tRr5Pv=DrPkvHfNE+uolVMHTwBEKy zJvd`(*1eo&why+iwl;Y)^7iK~%{!cDun%!8aX*mWa&6VgI=g{4e%061)zhBTRx*4r zuMKVy8XLMj-#eEdD^(vIu6-m?D?ICUHPy} z;X}3hGVVIAH0KT1HqSum9PR`4$JuJ(07&U0BgQyPZ#)&sI0xjo331543* zelv9Sl{yoVaSWugD6IT%wM!GPEvmb#T>w^7oocS=5;Wpav4&U$d%$W)$Z@QJods*g zZm^cT;SQi$C5w8bv(+oXmCvdUh~LH1>KB@|c*=K%s>c4{Bt37OZPa6IB~!BbJD5Sc z289NfMYZ(`LC-C`IoEi=gq1j}H>g$YaR5V-%k5P#Brq~O+ayiOt zX|AuL`+&WHt!U2H%uy-5W8Qyj_0IIF$Ll_yhD8;Qt`~jjYvXs{o>zNT>GhFMK|dV{ zh0@fSEwZj>Mr8T2?&lVB-uJ>UY0ApBBAX>;`pj2T$L>94nF zuc=-MOAx_iajY<0oB;0ItNd`L5tx+bxwbjyVki2CcRkjRf|TW8=Q!n==PBYXECCtJ z>BU4_ha{av~Wtf;fr+cv&Y%99Qzz=^M+-9j=%ctt3rx|Lc=L5# z310GUcWrVGfUVeJ8C(f+RxZ>bAoef-qtWJc~EO5KPlu%<(u(7i?T>T9UNaHn?Sg%r4&bb6DunWzxB=Wc#B+1NpuCiw&mKh9$$s_|uns!zDff&o3zoWCn#S5K z+H|c)TU=LMC+goCR-2;CTP!`Tw=Cn#J>l;!H@z}#G7qz?w=}VAHIKkpV_hXfAN?fl8}%|V1YAsB)Mr#H?U7$I#dE_|+;J&Klh!wGPSl8xhu;}K zHu%0M_E_S^xPDPH-j06u=xMjtb-vb(DV#bZ^FdZzX1cCN81QZqq2M)jPDcjvc_%er=y0&!qjG`61WhJn#8WD$2ZJ)3_O!5&NU|j7cLH)><})l+8aa|D}9Wf*htl3@Uwu z{(@nwX_)z6lhN=|ox>fH4|;oeOo*<}doFtVdv>~~xjrEuaFflJ+s*b*p4$1$ecPvp zCteDSCykM(8p=-RU#Pn4>KW5aRm?q1cEeWvDb(ctTh~DEM7D@SKSI}DqgLheVca|> zS-y|@5g(BAwor2Vc6$GCUw0IIr3%>0n1%!>4oO*l(x}a$9;Y zeU}BcDt})%1OA(9ut6HJlNc-V>I0hoI-fqoxZ612_}*|;-&p@sHv-&rXARAaAz<-t zZ?qdG8Vc$2>&ojE>UgYgR5WZc%rY$2U)3+umDTOjp4FDs712M}uLd*mMRh;bOL#p! zRcnM%${_cu?E5L5lJk<6XKc(#%BhiADdFii{oCm0MPFU~ROWYd(%-3jk`rUj{8$@V zHtNc+28mKear<3&XJlTjhn=13>n&+f`MU=9li#cAuI;C{1F?2rC@3#;^|PO|?{t0g ziQr`!A`f#nv+d02l^UMfCc~4H>!|E0>kaZ)U8fzD9giHPU1K~oq(w{%;eE ziSUhof&r?b`k6M-aMK)W9b#Ew?4|81j^P%g4sjm8NGyxJL0&k;ev+&CT6+4rH@Kg8 z>iK3$ZBSLG3b^?f`gVJ*-kDyXubX1w#t1p$G|Z{NVhQ0Y_OM?FgH=iDCfXg^_ORYw z)qeQyn|T%-;oHC>whycKyAa!LQpU@Tq;_m2OU_FHlr=v=B7MPa2;w$l_I0w~}Bw-)C%`os69pHN-D<_*fi%QGsK-@lw^&fM9Tl_JtADFywW9us?4(WV zQHWT|tJ|vgA%o(!y0!W?7|33TTf}CnQ&@|*r*5u}P(MR9(*SipSdyE%WBUF2XZlL| zMY_*!|dJAdUIPn(kXH12Cc{$x4Dk#a6R z_Lt-P?x^8Ej{kZayFT$y%FeX<8Qaslr&Uh#q;JkC?ELOsCofRSqgMP0(-oyxZ&O;MnGfbyjf?aQ6gLWUQ@UZg{TN_AoEo@z6ETv)XI& zbp^Z84fJ?4>eDphp7MVnFKaCJDYvSBt4gSLid)47DwF!7x-2Rc+yfKj06q>`wPWzQ zjf&ANk+b_zxhkJU9i^j)`T8PP)-6B5*v$ckt0po*qmZ|2XGE?t-(K(vHL;F8P`HFl z&j$QSzP@kaz<)(;tIMctv;{0d8ZcT}xC^K)d=zM|V#rfHfvjFNcZ=)D zFNSB)iLZtI%+HrTx9(`e4 z>l|{1=OMQ=63k`!k%=6~b>*)kmA#Nq6}dknvF5N%IE$={Bf>o7gQ#%bT;9t&`7iut zz8$!{bbKkq6@&QJyct!{cOye_4R;*AL>A^ICz$2ESSwED(m9^DBFFG1AAwcl6_}wL zsVb^?l@`2FI`v`oY0RuUv}1I`v<1MQSsy!wzrgya(oN9R2XoseFBVhJT^D=< zl^IGSxu3VI`;=>+r@LH%YauRFomUl7br5R{Pq?K_FZm`otp>_}Gn2v9dYFAB*M=-E zv0uwOY9HX5>Fpz5K_#>EzJKBKt#&MT9&;b@EmPLA7rD!*OtX_2rJR>tav>&#P3L!u zH&yXqkgO%1<7;r`SeZG(y1CK95OES1*AH>Wm>fAxx(sVET-nboVUK}t<)Jc6E+g&3 zTHg^VQZ^vMn}@mCj7;dCU?Mq#deueQQh*rj;ve!`c@sZ|d&$m1c8mrLr0Y@LVUUnd zn9A=(W=0=Wz37X|JWII{aL7(Z2JtTBfVX55fK}|lCb65iFyuznfVD|MO(p?Y#>H%H zR8}8`oX_!m31k7Nu&XeW{eXP?NMs>5=6$G&=El>MWn+NF<&cX!3HR=R9mWN~i8IV+ zpiSLiXKCzbU}%N?Wr0Zp{&hXjun&P|sE%yj1~~5{(6wig+20e4M1_^7@>H-kg~}0N zmzpYv$*-k}QUlCZ`91z4DD*haR6c$Crw!QFf&Y*w0V%K{sFv{bRU3?rIHucfIjmTk% zg4TA0-tIx>Ohvv57q>FOxX*iPVK=RjH^N)X zTOYe}U%k71o6y2>un02nF$clzk)e!W9)MqIFIyTMfM<|PwVOQ)WXmq}+Fc+i5`gSz ztK3Gdrf8keg~uJJfZz z0d0$UNV0a^&i@p20TFx;5q656LcEPSEW&ZqZTsQ zKPruw&B&9!4343mz$27Ju2>Yaj;+h>#VYS<JV3z_uiz|j>9R7EN973~Aw_X;rRd%<{A z6_w=Dxgls zOkj@P$bvh@o@Q6Gqu7GTRnY*qkPVc9Ng0ehIjrt0Kf&`Bj2WjN_B6Voy3Z&%Q!b_0 zw%pn1ockH?ls)`7xpSO zsM@H7wfG2W+=w=>#^;y7opuN3Y=A{*3v>ciXcmC~2*cgOfej`$AS?1utKidtc((Nz zh5hKg>p%-RnPO}M|Ay&`!~ClT@I{x3CyhtVCBm|TknB+ZW8d< zO<^Ss%nNXXwM74fp_e8?2Kz$lPGC>2uv`Su_+9kjNw6Gk048OTTpxUJ|G_c{ejb@Z zu$)VQm?;9O0xvUA%5=T2V1;U>@PK;uVKKDHi1U2WDdca-hfYm+Itug;-8v^qf4O|?SXAf z$NjJ1ipPNk*#m6J3iQJ)Wu(#vwJN)zM@FD$=7Oi_3iLe#a|+cD4uSrHX%^CQ1Tu34 z^0XNe(+AlttEOQWiq}YRG@OBz^?@6y z3a-~4SLlh+9g6QyW!B)z&wQ;w7L-PNbDwr#3Zb0C}xdXkhNC0 zQxo9rt7671iL(kqxATA-tc!d0fXlMmwm6kwaWp?|u7`@xC~UIpK;j-H+anb`qNS_HF|AQ zupH4~1$ho>I*%Q#fARkV=-)wbA56fQ6T+YP4BDU%sTXVGIjD-c8GWqB^-H05i=Y>X zb)_sYnZ)aM2}~2j14Za-4mhNLVN(_Z3$zd;dkAcFZoMrv{;)J-A&1+6^g0i% zIg1`4{2^&QSX$AeE&N%OpP`*MnCripFtgH8C8)c zv~*eYGU1{Npe4D$s=o!+?*&?y3i&1$1sY9a4&>ShyfSFm4GsA9YuXjvJf=>?899Ww#RHF5HNho1jL4@O~3 zKf`PKiZOZ(nLY*moQE0YAN0y&cw2|jg7eT=tV!a$SGZR+u2BeDRt~*e3u71R*C4B( z`==TDt{7UF49<81SQZrMWF0({8oos;?)ww{z~dXGpzFkrK{FSjlJn#5a7cUy$ZZ$c zlRB`Nl_0a7(eI-$1C55<3`Vas$GDWkI1%$kee_XtNG~yL5wf0vR2ReNB+pfFG{k>Q z_S=>Uep^B;R>aUp73&E_P6+Dq81FEg9g1%UFw1(#PbnNNiS}6_J1+Dt&3yTBgg7Ph z;kr)rdJ0-(13ub>yHiba(x7DM^KZOUpvQTz8N~8LymiD?9AiEUL{-%mBoJKo!J^<15{NePZv4ftGy7 zPvU8#cOv?TxO;v>7IPpcghMAz2tw_Xo+g7wgS7WIaPch0qAc$I6LUv0u9Aqe^82NN zSPs*0g!r@aF!z>04~3$=#C}1%V#Mp01pOygwPeWr3t0FQm=&(TM!kV#e}g`}gx21H z^|_8?-*9c>1R?e@JHA2n--%bq0bDRua4!wnqdBP%?o$ccODtC{F-~>RGbM0FS@cF_ z^ig$;RZ)xzVg8A;gqRX&rYVJM1bU7nt0<1sRf)-szEv4xT@A0Ae(7xpi$fA0;hztQ zO{*$iC(Pu%S}>@P9?5?cZBT7AP`pCH@xA|``mzg7^_ zUIIQRHW?Ok5V0c=69V-t^(BqJ0X^cw5#q%nt)jl7UdqKW(n+#VWY37NH5q@U;EL(E zW55<9;{J3j!2Cj1Az;&p`O^*SK(av+LgO0XwKcfiCW-s*!k z6@nMh#NVdn;M6S+uH>?a^~wOz{~giBMyx7qg8#S&@zmd7b~_I5uan>Ft&BdTb{G(e zWn=b!h-;FMbPu!icKA$F@LGUqVFj@K>kx@-!fPu$@SBjk=aALa#4vOG2Liog}<6^?Nu zt3}LF6)*;5-Dtj`cYa*4FnXRWoEj}4_QQ0)-|-b~c@C@l64Fh-J%bl=6W+!R|C8Ur zk%#!~A*BB~Z1gky_7s}&8u~z*@B{C7d@m7tkO}|f3;N!M)@tE{3`3MP0MXD|JlB0l z>PGa{C3vnP_6NozhTI{y2CMV{uZ z`VOMiV&I*s2uW)P%M=c8r6YdUg{*1ttpXTTV)X8U&#PmkJK+Dy=ttsYZVK5i4M`++ zN;)?feP7StTV${ELn8B`*Q-G4i9@k2u1bDEV_XAl4Ddh4zzd={aXuo&Er{NaBgQ+1 zc;GNB3PlD-5PP3SOnDwZ58%i_|EI^WUa%c9^%vs7zwphqe%V@rXm$#GsuAd&Ua&+R zpiOPilFsmJNfzj-%iw8=%O@1$7J^r>e-z2y(@aj@L7IOA^ZYVJ^Y?Gq#wh$u^4m(X zUcn4UUiM1;g=aNPLA5Uq3uQR|b zlZEHW@ZXa-Z|G^<{^twKjsc56&qRzg#55z}6`1)HoFABD$kvj7m4_qr#Kim~z!KBQ z2iUNPpQivcg5t13ei`FN5OFEfj7u{FG4Rl_z3`{gX)4U<#QxAS8 zc4y)_BK|9y@rf~)dY~X$mmkkf8bls0`Q#QHEsCS$>ss)WSh*;YApe7y;K&~!@06lS zVsXSR@H1fD$?qYaFk)FEo-AS$B92z_K#5a``1Od#F3W$MSk6))HN=5LqfEX8%@*WG zkrt3|MV;Hxq?IiZ*fFDBhFnJ&{+DWtI|30IZ=i)htjg};q*qF$7 z4e%Hf^D)iK#CAmYA&y$oJvxJCcxn%g9(|iU8EO$dqY6()aTc*rv3MfVCgRfz!N?P1 zaH#)x1CA5-FU2qPBGxOCKKh+}IR$eWv47FuR(zj&l&(YLNiP~bVsQ&_xzU;eeL`$| zbev{aiX4c8i~Ix{ahh)_3JS2mk^jm2M=ZcZ*Q{{;Fs7(Gs0a}>RkO{4o6 z@f{8BO8;mkCU1#GCU7os8a?_xae$> z(|3t|n2wWeqn451N7jVyP9s1*JZT5@GLQ4g2d5U1wIC~F#~1`S;s~QL zA#Ed$Hi}Y-!;55yycgn6rq+>^P+Wrp@SG{)C3(|AiUX|kG#=E_K-9wFJM^~^=cv$< zLijd$@qy=2pj*T+O;W4)SJZvzmmD0SaVPm8t~xAx)_~?_LA}CiH`RW4f#)L2_XR%ES$It6@N+4A!1?%X zBi54Vf#rBQ)~GLG1$i!3)DB>6`~X&JmtrU3Csx2S;Tchswie7hBd}7{5Kp#WG2;B` zY$s)q=e~WGYnen=I0igHOOai7krUWU;HWCdTDVN`G}*zOyq1e$-=S4TRF){j4#ghH zU+`CU<9bEef56tWnaRR$X~+Y=iq>vJX7w%1R7cR~buiz3hK~@9=bC|HK_0KT8i{w*9+^BagYhD-ZLBJ&C(FYgqmUV*jQwL zJ%!i35k38koyrUxb6k)6tGf#mM)>@*E;2;G*h|BJ%qO&hD?)k>Ka8_cH&X%Fb$KlJ|+{E&EnD z&aRdk%T_Ka-(b9QlIrm8U0Vb;L(h7Nxa!d-Bt;{0u zLRDuP@J*Rk-XLWF>SB+RV!Vk8&rf1*cw6|MvM+@z%2-dHuOaH@JyK>cVbV~!2v<{y z^+|GXE<}m+=zWuY=~5eJkKEAL5Zo!<6-2pgh~)NdV1oGB>T)}R%B8~AxdBWvLWbUj&t?^NkLFgl{W+zIuq%KMYZW%&1 z9S}{uu(vxBb@U1`YuHsBcDZoXyZmK%yawiP`CnxlS6_U_)yAGrW%dSpiceRH_;P*q zl`32hX0p;pek*@rB2XRc3M$kk$cq`4`>g0>Nvf+1W_u&soQ3pH<9ad`!GYEf>}NhO zGgM`6ph{JHW+AX)8n!SDNOgV~pTJI5=E_yMp{jL!2=hf6k8Iu2sF=9{du0ujOlhVR zEv;c>whCJJ2zzSZ*y@TwnlF8muopQ?A*AOk<1mjtFNo{2it=$D_ojT_bI9{Ue$RH{+9_0Lxi#9*Nx9&g zBo9SK#xUP5?|LR&_{MjTHSU_;TkLkB06#{VDy1=R*~iK#X{7uT)eTqjCAnp&`8NeR zI+?A>OqYEUs=Xkt?FYnVJ0=qrvo5M)on}^ppDzayN_*x6>Tu1FzbK=)L?AQ|qvl*9 zvl-bG8dN8&iz;F{@bS(thmnCb95}u;OdNZK`+!l&l_r2a?PUoXM%b0JTy8UyIvJwRhP13F_w#AKSSj{*iE0U z++cQaUgRFVVxGwkkm!k()ZD<1uo`PhN&hhA!e{z=D9c`lf`UtzDW7iOg(WErHg{{ip^zHsnVc1CWB zT^6w`e;HNL98!XGSlT7MmHq*b+&{iPa5{?kzI&(m)=9(Vt@0zO9^`+lq?cYwgJq|( z6gyxSAvgE1CZcDS!xucsOvJwOKE&Y;pIOW;7y#@^2w?0vsvJ|MqP&zIrvauM8pt`Xl{*oy4J zQ^H&R88?h=##F$5V<}YZYsx#hGHfogpvFihUlXu^m6A>%1NN!!hxfB5)!ocp#682k z-<{Ai}tMtFWDY2(*1Hy zv-@l(a!ffIpw(Ywv`kM;eVuYT>3u>>+~L?GaU73{3uEQyI(R zppGG9^WDr>A>W9Qhrum_%LiM6X9xMLsh0KTvZir{_qxBe&or|7qpFG6igz-3as?^V z+ZTCFLp{^n<6PC86&(%j^--%kG_Mn|H2Lhlynpkm*_$|)I!C*|dro_c`67HWK(Erj)fLod>qhBzX^&}&YhHmX z%%UEuZV$FD1^j*M`8n{u?xAYyabyzxgnT#W9wT=MnX+tq%m^pJahQobxL9Pseo>VL z{`!PATsKtrLpK?GMmr51jXq-}@b_oIJD{=bHQzLkvm{$eSVvnPn|=YS(8iQt`oH$h zJ4&i5Yx{Mp>ULM?uCD3;O_C;v1VvF$F@T_e1B@781_6(-D$^De@$tT z{9Dq^iNzkn-6VdTIl?*F@soX=5r{fLvVLB1U-@TcAD7K3yQyqdX}{8~B}a?579|xu zUUXUUwIzQoZCSRh?BnvPiVIbVwVu%X;Rhl=M*6ZlN~Q6g6@2yw|_mnBRMe74D-!T?3-``{;L)7tJ%Rd=p5?o14HTKhTk?eGA8tPZJU}q zKrGLM3Fa5j=aXxmt*Nbc*EnnLs|nRK3oZ?{i>!%Wu+)b!P-gTXi|0X`b z?(4t6QMuHa;e6Kd5V83*!yvzOxZ?%qF6U29AH0^;&d1o*89EgAMbE;-dj1iCw*Ds) zhq@ndK0{{b0LSlUMqGlkU$k3|Ssp1VExNs^vT$tvi+PQ6hnzccdj9dVM?5*}a|(|v zIkGtC)yyde^AG&_(BHFm9ewHe=o5QS^f*y|B5f zKgO3k29f)@AyP{$cUfq0?b7N#l~JC?jP}w_CM;M;C~Yw zzTf}nq}je5V0NPkr{ON#<$cIA+!bWH_&xhXgNzR1wc}wke08X@b_qE5X4S7VjQz24 zT;-#c?^mW*Jy<=hW?pTl;FBQH8irEIX`2)+u${EeaAupE;~oJo{DApRf65!Tj)g;;Mwr-b`>IzqsFY4|Dt7!(6@MCoSHzU}%@nFoD`9z2+RVD`a*nM02ZI{D<;9v3=XY@GM!{Nn}w z;?ZSgRbPjT9ZlVDC%l)K0miB{(c#ZX@z(2}{z8LB4L@l3b;IWx<~6vOo>xDoUhlN0 zQ}}^gvZq^tlV6FpsZ(Ee(9e|Zz{~~Pg6e{I3I`W0FaDx*arr%!ORIjY9$4Ep)GM;a*3)s=Tt^4zQ6cRCYp&U2{XJ;di!~O^oEzaJ+A7w z2-)o&;HRl1C%g^Wxe3NF+ZrN<8;Dr0VP=0J8AdlVNAEU@jQWmV&hBP&kZMMJm-q)k z7G%4IdE5!#B_8*6NV+X)DxSN(zs&zYpm%b0@=Ynu)RL6BDJxR0Oz|gg^|kOMI>$yn zsC}-cs@5NTAvn0ILFxAVSI=E>y8DUkM>`y8n6oE)QT88McW2f+6gaSZU#tDk9`GI7 zeDL0brw(*JG%MRY-u%q(=lAE{kyk(eg@W}(pOjuv`AzMbXn*r6Pch80Z4&QFT;OXF zcqlce-h}j{>HE@)(pxr|)S!QZY3cRqKb1BkWoqCjUwne$x!OI_eJ8cInP+Vegr2NE z2_7sP|9oHB+S2_cQ;YW%wk^oa>zX$$Z%BUEf~tbY3lod}R{U&fb$N%X@2Wqp@zzeP zy*{`;R2uo!aGM_2L{AYIAy2|o?-cK-gn%#3e>hN{JSZhG<-z110u_FzKNqf;J_)Ts z*XENof6V=vd!%b{+ziKh+m(?Sp;N({;ObDza9VhHC_UJ}W_i`5%6lrC!}pU>a~AHd zJ+(c8XM+pib^bH^l0O8WvT)8}|5 zw&w%)53a{tuejcFedn6uDuYX|#%yK6)CcF*IL9Iw;D>`Xc*95}lR0WnC&K&8-qOC4 zjNozhLbBu=$A@4`c`Lp}yc;CRd#*zF9p38_E+%}C7{Pa}N5fAhzUdp1v^;65e;&-J z+XKG`UJHB^i1#l`%=IjY%eQ|Q%?o!8e+E7-x2mFSNs%Le(8bV&$>-zG8YfpCy*1~H ztiNV;$r_q9Gwar@g_+Y2uRl2azQG}It-TYR3UmG1-pl`sf)O@1o*x0G{fN9*@)(7nNX>1p*_roEQ3JuuEc zD=Fxk>iaNprMJZOq4}u2zHLNg6gzD9uf4ANLPg{9U8QGA#+IBZzM*(p(bt8$3gQah z$~Ox77mh66Tl!V`!HU9)W$@=6s{Eq*=3qEH&34hg)mdX6jZ1}Hd7dl7lag?QZ%R^A z|3H5)|L6YO1E&JFCPxB^f!w4Oz9Jak{s9-mWrD=x3e1 z%{M^uWSYh1@VM*Z2f5yKf8@#c9DuFW=83vHc}{q)^w#&j=vhsl+|mUBE5834SHSfm zT%cpjp3a$$+dv(hbv*2xOO%@q;^}V3tvuc)pFRT0te@GK7mDu5_8_nyz@}QgQE_PJiIOQzO1w? zGiy}#-lNH<9zXX+?u~g<@<$ZBQRoKHl389}-8{0;aUuSG&kRo?NR-L+qSKSA1H)5Z zPfbl*k(N=c#gP-#qW1KVuK+vXs;bm)4t}W znscx#&8z&Nd}Qgb#T|+#7tblVyYw?2J4(Bh-BmuiVs_=4s{4qUPS(6s`)2Ti(16GR z+bxcn=Eb;y@#*o0{YSD9Fxc!e*RI1NNzO2Vh! z_TC>o)$YBnsqyvVwmQFOY_ZKg4g|+4_OAXU`f{W=bZ@9AcqsTls2z+y+k)4?cRW5= z7#vP)zAh98k9&3axk%S&4_iy)A^XjY0@Ix#a7ZVddtolS-c{l1>i(;Hh-fr$~?x#J^dk=WqBoxAIS?V31keM(!VL^g3 zp^f)4?=#+z_tAtKy*IiRIX6dV2N{1t@K9qmq+_R@XJwEGr@`=VL zK0Chr*yl%f<}A#Rr^iR!%@bxNuJt*SzE4{2-yaC1Je*QLr93di-#2Nc z??Ychcs0LBYM-<>aTz%7m*dtrw>rjw#A@Z3VlTDzie3m$3cVg&QoErhspi4z@2l!p zeOLKN<%e)5K3jFH>T_83R#widY+BW!dMoJh2SQh~v-+9vZRG0Dj4rS_?PDF^JHLZl z?Hl;U?~gwK7XN8Dli&4x1~XQk=QP~s>pcrSZ+M2{hfljaaIn7$ANxdn=>ssi3-4vh1Y%}>o8<~!zS zGt+s&agFnOkcl5TH#wI%*E&Dsn>6Rw@XH)`zG;3Aw(wr_OXmU5ZX?Vu%pP$a;x3vY z^DQuo>1H2uF85w;xNpoeN$sY+Mv6npa#<+_kh#`QA!T?F*slaJ5Wh24_R$RCEj&;p?62 z&7b4u#E~$##x>J*&~*nh2i-h3dltL5y4HZk_c3aAnAz;2vclQV zxq{h`?M5T^;Sd_2kh!zQ>=v*+lE-cY*GB7s7Mv4l%MSMi;iKXEVM^T^?FZgqDOv6} z^LUJ`=xg9pu7C}F3(@dc$22_YNpPA+;f?><@e7#0e(?YI1iAZ+dAXV6T<)C7EXyM2 zKj8fDXm&HZns=LR%(iASzjlK;ue;gIY-;v4UpKe2!;8T{soFef{%kHbmzwKf4A~AB zj2{+>__)2a!eVnijC&K|j_AX_k2jdN(9#3U+u&Y1?40K83l?9cCToBbTyeQPm;^hE^-HBq-lKTg`ZoR~v|OVpVz7Sdd(A z*Cf;~s~r#wguV|w9u;6|0!;2+_&(o z@5AR^7JnaBIs?T26Y(S9SGk-Ktv$Y)QSqj@SK{u8bH;5o7ve`}n-gGd?QELnKIcNv zT6Z~bb9RJ_sTs^(QCj~OW;{M~yyJM1yFHAL9qt$kx^fVG?LgiQ1t9_1NTC$1k%TlRynV;TTOzj^Z&8T<7(U77i~c zz;pJqAi1`&w(%tq-F*8jFltl5%8h|hpsT%|y%7ji4|9?(d&tN&{=v?QQ@|4Sg=M^> z(cZWWZsCjUdiW`8U-z*l;UI5%BiY!mfb8kR9`|jdsnMdy?#SZEi;)4KsFNcRZ18mW zkMN4{2jK~zn|g(>2{(bu)C3n_9Lfuw4E-8f9{P~SbD;su@@0f-g9X9U!2`j4!5zVM z!TG_daQr_L973PhA=oL{5_Db=2Gh*i{k3OmPu3nL_WcRghVivyYM-l}26k>i?Yi16 zwcFvTUI}yFw%P-%yPO75=MJXBQGE^bU*m(bf{TO8f*XR{gGY$0TZM*l|81coU=}Mw zkx(+TyQ9Oi!@q|ekt^B%XdJe^85Euu1l2Rlb#5giBaLh%@#;B@8^Lr<2eY`}&|1g{ z`&@SQFdaA2W4?h7{pKilG^OPqa=wT?FL&+%-|aS=z~Ryr8}4d$GCN|2UC@#nd4Iim zoq3Jf-fV6*Hoc~}`*%85qdT+M;o}t^&wvc> zfI+?j+f8>k92K#)-ojk*GEnI++eg9+e?7P~m%Z9J$$m-OjFs?4JP)e47f7{wtPPz9 zyRi{lejn7@DCVSH@rDVjw6?3_}`ZndW( z=h&AMl5}KsimbKY*uiBT2&Qf9YO{w=+nKfchCNz7!yn9Nx0a=mC6N`8k0R3}Z{i<@ zpfPvhA#RWK=Kr0MzRcd=9=SPkEx6J)>`K!al;U-fPLUfx{dMPvo;1~e{^a2MpigoSjl<6s_YZOYs<1sq>X} zt;}fURTuGkl1#^=JWp~=5g8=PIn$pqvXq6Ry;SSlGRRod?$^rEQ{Ja=CT&=oyq@d` z?Udb}XD3?bS{^shO1IEvchYh_$?{N^ZHJg7wDWvh&QhkokV#i?UG3_cj$AC9N(X-F zz;8{Fn)2j?DY=&G3MJBlZXoq- zLMqyI@q8>F?IKx!r((I3C#bh_I+dw$6vuab;&I z<4E~MR$iVH>D7I!jCw1JTzNynO6X6SK*AqrcSdV(Oy#V3`6S$pq_5w!qoObeI?LcJ z?F%X$*Z#Z80TO~$coMa?{zu8=w(`uBA+Ov+WoPQD%CfR{+*JOu_6pU$o64TE_R~xw zA5I94#xW`C2<08>Z0&lh9P|4BER{0otQ{hy>&hCkvJq7->#1BPlbTp zOOtl?a))@@QRv$fSmH;vb3}*Qvr*ZkhV2w}X~ztqpWI~SG9E$qS7Vpkkp3}_{{c+e zm)PisWCKm6f0;xt`zB+XxjdGV1N1)M{te{n60CX$)+#$Wz;$F1VKg8cEid72Mcl`S z4k>eASWH>2cEePLYZR+7@hz3uL?s!DRcJyLcDRrGYZvcKusXt%En_`&3FY}7zr7J# zTFmHbAtike?=pu>pAEFlW~3o(-%(1?Dzd0>V*WMd-v&#JKG9v_=8->avzZBh7{B{B zN2YV7bEKoceZRfC^K!GNndIEU9BL9#*0Z4NZ!>~qjC8Y)B$GncetqG=z?xLk@ahR-@zW0sFhe6{C&C zw(j&ZuMtz0VaM+p9qqs43G2Z#KRS9@_@&61XwU{jZ1jf66Vcw}95n$6-3{5lL|Y9Z zo_HQi>Akjftk#bN(fbY_X94>MUa&PZ-nM-eeVtLqWMi1o!L}MtOLiam4?jgmz_?LC zuJ~lM={zIimT2E$=BXb9^=*(-ag4ZaH@Oe3q8;!Re%5TdQR}v7=#XghXbEgj3)vef zHR^VJWf)-Z1Gb0l_Zi2?Y8Y;;weLfXJkfWIJMjwL>=yozNY_uL)Q>f42>)g zy%lK>hW^875}Li!w#K-_c8=PN$EMT4Kzv8<`F(UB`|fRlHR(%sl$m1tmUyX@IB+EU zF$}i#VVwDi;dL}HeuGcp0es6wc8A{|-DMjM8(K}w>-NPuwlPv^#!7{ceKI#j2O8|b z2c~5a88@}jzC<9;(_`PyebNk}Ji3t`HXU9I<+pEVr^70^P)^zw5Ea!D1r4RoYlI$| zAj$3YS1(0#;OCeYtpqLe8d-k5n4vj?uI;9@OV}}fpiLQcFM|7@gO&A0TW{cgKgM$P zj*xAbYP%B-fEi?vJw&~S;A1P%k>|mUpN*W3OvN)ji$2dFOQ&x%63Jw*SA(39QudC# z1J36Ic)0bmONPv3%GeleMkCk@mgDo(Gn9hZzlIs4 zm3Y%FwsiPO2ZFD^NS^4@XfxXQbN1Yv8{JK&O9J^a8PVgB1(D%o@64fukw{MDX6&ex zyw62&M5K~knZZsC)#OUHF)}Fk39=wxqL(=zU4~b>mpRPI)L|uOT*p;MMX$9@z&pb0 z00y~)oirCx`r+(_ZUXL(RgE|ah(3AkgI0mLt8Lbs)+W+H}^M2*?x|W z1rGzR8-|E7%CLYoD~gaijNEpiRc-M7KOu=#k*Cn;c(Ql8*nX#vtb$u6$X>v|vD4ji z`0yO~77C(2pzEWJdH9JmV(pgr1R+j)!aXpHETCkpWDv5e!S8)bth5pBoJ{Td6H6sT zKfzM_fr9QsrrJEBn|53!j+*YVwPs}4#rTc>VjI231i5{B^>QtZL^3mFOBM#(17 zKa8bTv*^uNMNhF$=N|I9Dro(u*|l^WeZoh`=RxdeBDu6Bk=J0~nh%T23~X-^NT>&} zsz;IU+eEfK=qEfNw#$*uOpY#PWagl^a=;q2obh@eMpaW8>zrWxGM{lutfXIdyFTA%${*CYL3iBU4~ zA(MFAZaYBi;^((v#17+;+f%Soq{5Uk9zT8=_0GfwKV=SK68{si%BLvrUwC~G$#tRE zt4}Qs5TUjL|J0u>>LK**Ptbz>(SQ!r_g1p*HraZ{Mue}!ShB(xW9&eFDU2-tf{mZ2 zL{EU*`JIQap2gNGoBnp-dP6Y z(#PQg>dSm%V|F{9i-*{4dz~>sQzVv!m2JZVJVTst2ASN1-e%*|`VcEdqeB^eHpK6K z%uIQc=o!Z9?=vUSfquU;vyxlMwd;pA-cO4KY{$^mC1gT6iIIM0XO!PSsJ+A-$QDMp zBe9*E@v!Hq-)Uk;Mf9hM2Pfkf8{tD+!`-r#p652=)S~E};NR|wMd-p8+H7K-P=E3( z+HeQ07*9_=gfbjvwxc_9jxW?JBn;H1U9eNw@ zoR2LQ;F0KdJC4k*+9O{^e}xIB$GR5*dI z==MFF)qtpF0q4xa)_y^&wi20d!w+k8bb`;*vA+FyKoco8LzXjXpY_Z@KTW*%5Rvc@ zG_O6aDt@5()K+XHkHu!N;_(NWw8Bw5*wu_*?}|NzRqVltMkB)#qNhP<-D3269dXt# z@QWSCXH8(V>Y_bcbH-5a@ddIRgdcc;Xt4qY$KA|ot;FwV;bX2Of?0+SyNCGwO6tFa z^6z4_-jZ__VPxRB50Ux#DslWtW{X;JWM5*18OU)Ja{QiJALPGSZ;0QxZ!T8%AhSd( zkzIdA#~w5)Kw0`z=jlY;ub`uA=tthf0$yZnZi8)WBC*^S_Q1X#Jv~d0o`42`~q{#Afz62FYNI?~WZ;Xmb3?Z~bleryol z#tuuze#UL{8J}z=))CssLyS~}_BN-aX+$uGVzVu$DN7Ti_$YW`>FSqgWfp$Mps(&p z4)&GCwaj{TF>WQQ+fPmIrT;pIZ+wmtKO2+JquB88lu9VSa^j;u=wY`Y+4E>>^H|#t z!-txTH-+HQC@_z*c8;;r3`6!k(a8z4xs$$F7|WAbWF?s^PomLd=pTDfKOu7Wapm3A zW)ny0*Qdx@e*``29g}=9=N;zkRPHzik2Ve8{u(;hAm$A;*OG&diFrgAM_IoI`R}5K z*h264cUpA^o;jY{NtzAO2Vuce@hm=$zX_WVt4K%gbqjVZPahW>u?w}cgBJW0Ti8pC zau_WxMh+J#aUohFT$hb&-b6`ivP18C7(hzoDV`q#XF3qLmt zOJBvE*Kr@!)}(i9ho9(y2BzU9*_{rVevW?ar?oxIW(W=J#$Hax=D_|y=g$)XHN?NP zqMmo*UwR?iX6WrvO8yT@7U5UTJYCM*RY#68z$I;H4C(gab5o=%R)~f~{X>X&7UHW{ zv!ncaycD}(^Uc^;YlwlVKURD*XLqGsUdF)}(W#Bt*g~vz3);CIo85#gcOX|~k*`B5 z{-BlqphQBCd9c=|)T#mR#3Lglnb-}4#%;#GIfxL9wR@Jt*Xw z#ZF;z#ic z<1e~#hEQ@&T1sp>VJtNr%}vB6EtH{HfP{yZCJRL@lx;)GtyxL&jaQL2U7W(cAH5%twka~pl@q<-GB$4O%L@x`ZS-G-HA?$8zW48i+NnYo_^)q z?>TlS+M36ALKzG7CxolT|H24`Z-omMqE@qnWn4v^7s8Kgb~Qi=+ha=usd*>#Q*)KV zi3;u3n6?lrjW`_wXl@o>QOpSIXtPtau5h$MoH}S3;bVo~6WfTBt2Cjmn#=0IRoiiu zWTdD$Q?X8n@t`~M*Nm)MK=bFVX|L<~?$79vn8yau0)zP^POC@w<}Z|RAo1BV^ok>C zm%q|(osq93dj;2SMC&;4;rU4B47JSVe?Fe(3?&t2{wy`l!b9ZnD%`p-$>MhtB3sDF zGQKO}y=JGy!66*5c!e}WTSDE$H>Kl+CKmTl1c_SwN;Ui{^kKVLZLg+gcT=y4I&nx^ITnWQ~x7QBr(khl`h1pg$*^)qYSQe9kOZ9yJUQTX2J`& zLWJ`agWQT-w5SlQn)8>JZ^t!tR%cpBJR#!L zX~5lu0Jp3z6)RL(bJ0C{ZgD|Kp5iMJid!@CxoAWVvN?}j&mkKz*QoWy{bcbzSx8-J zR1&4~BN1`T*wGmwS<7Qr6X%QLpE}o)GBl*bO{j^qQy6=3Uuec($a~dLSWgQ#DkQAX zqQZy@_gzD4sm;Vmv>$JA5N#LV%qb+U8T2fkhhyF&pH?iT7uL+QbXZ(eh15a(Qu==) zrr|}{m6(%cUt%y2!abk!LiC2#%((b~LTH0pOu8V(8X;tb+7*|R)`aAhR5s!FH8ZZL zOuRrA?piAX)zm@=bFuFUtuK}-twM-RK(q2q`P2+4+z{(&#abjTHTjnY$hsL)xe|$A zi*1QBL|k;z12Id8O{ihaGl{(@1v?SKTQwGwSvtpv!B3^HrVf&c))0b}QY=jEV;0<= zYqyALxK@r*(AFkg(TVI*@YPyJ&^nLi{pAI;zM*oF09V!u ziP#&&qo)=Z7oV6Kq$6oaR?Gup7Z4+c_zc9yP)vJ@f8*l6Y4dsPRcu_c>C@Ql5v)bp zE%uPon5K)J2p|voYNM=LaMd3zNlzhl9Nn?@)NZ&tF+MO!k}vo+^rm<+>9?4Cw5lm3Yuc`98^v8vXG<>9qTD^3aZC)TQN zfHKMstuR-GD9WASB)flsTIR_m$Gjj6Hx zg`|~&6eOR^I8Hn>lB%wyd;^Vo6e-JJN#DgSA%8A^DGo95@W|7tzp_|sYrMD29315mSiDrA?dR$Kzuruj*7EQ-aLm@a7&YX>I1!nsWGcJr7$1|B?kLU}`NcYo7hi|P z1!HNVT1I`U)x$NV^)zBpFJtwhn(4B7RN1N`Ofe{m{Y`qWHd3r7FE5)=A7sTgD!DY; z@&n39kvCALfmKU+vI{Yfr1fuQGl*fv^1fn@l1Eb>gvKgX|D+ZX7na3`B@ZWA%h!oX zO8iKYvt>`g<$H-#FT0x#mYFS!Jjp@*wXP)oJGGK5wU!oD?tyxFUES&_N~wdqwk+G~wWS5} z-158Xm&CVdl}6{wmSv^VojQM_`>2eHfb?Gdvz2cm+tE3)WA!U)(E$I|*NE9krI7_H zX0vojCDmB65<9cJw9pefIv=iAjYXx2@^X^3 zys{W?lvh&sjY=sG(12H!Pj+HS%o+P+G2tjuQYqCFiv>#KGTDhrq*0fm39C+Z)}@|X z9^c@;idED%xOuPkmRFLeQFe~}pZ>&oq-a+ChQ8I6#fhmb7%>T{SFt4R;}}U?ahGMO z(tFiUHB)RWd8^M$p=RRVYRE(589l|3E1PP=Cs~$dO>OY7`lMf!4Px1%yr%B0>nR_} z%HmS%>b~N?Nuw^(IUS{V#Pa-#P828Vy!yO~pIdx^ib2&UOS5&p7;NSD)q^OqijURY z>Ic;CTD^%zEAo$4WLXgNb6Q_e-cnX97SUYANj~M^mBnZ#CfXwGT~Ul?+H`gK16{`& zWlO`QbCyq&st8)XNU@0YU+pT! zAzfS7v&QdMTxrFF8lUN%G$esD>oiJ!LN=xm zvBmnTvZ^Jd!8%{jis~z0pc+`U(EX%&`c*Nj7?ETF(pzgJr=D7Ur)sKtNy8K|N*k?D z8uO{e#ll`!4r!|uH7okCVt8r3^g?I4c*svFW6G*`T^^Wnv&8nKBPsamC3eTK>YaXDilJbgCRe^>B(G)t_5&jurbV`c$8* zoIz>bF-9<1^b?xL)finpgYxUtJ1F{8JE`Rr{VP7V{_9m*C_U6W{UTO3MHY(DH5!vW zi(63dt^Q1(Bq1GZ{VpFYS?GJ6ssH*$zv?LY9G!1nU1#d9`c7B3u3LAk&QmU3-TCT4 z>yD6iSik7M&eSiuo^?fCv+gO4vTCbW^}Fh4tZ($2ReI}ui*Hr+vhHA&S=UqvEh$-d zkS^+4Y7^^flAa{X!T#ASZ*i66ZPj|BJqWh>0mYmgUs-x9@mh`OuR{Kfv)-h_cx+5*ANHW%W z)^GaOI!2#${kn&)VBN1yc6GI_)4cyYvaW=BwXUV}tWT1Xb=H5rT34>Sp4Fb#b@bno zt>kOH(|6V<{Z?02y;{$IKf`MCy5p?ZfB*FFchUW=62>n7zxwyDvi<9D>pFGqq`TGC z;(t2&U+4Y5-u-9EtWy4GS*^QTcle*~^WWdqo$=ql{J%=_zx%E3nsu-LyR-iLD68Ie zE&t!YU;5^f1TIP7k_0YE;F1I`N#K$ME=k~$1TIP7k_0YE;F1I`N#K$ME=k~$1TIP7 I|4#z{2jn|k6951J literal 0 HcmV?d00001 From c2780c78b3afaed32122b756e0801e3e6faedb7b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 15 Feb 2025 18:32:36 +0100 Subject: [PATCH 0323/1117] Transferpak stub (#254) * transferpak support * more * more --- src/device/controller.rs | 48 ++++++++++++++++++---------- src/device/controller/transferpak.rs | 19 +++++++++++ src/ui.rs | 1 + src/ui/audio.rs | 3 ++ 4 files changed, 54 insertions(+), 17 deletions(-) create mode 100644 src/device/controller/transferpak.rs diff --git a/src/device/controller.rs b/src/device/controller.rs index 6cf5b5f..59c15d8 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -2,6 +2,7 @@ use crate::{device, netplay, savestates, ui}; pub mod mempak; pub mod rumble; +pub mod transferpak; pub mod vru; pub const JCMD_STATUS: u8 = 0x00; @@ -24,6 +25,7 @@ pub enum PakType { None = 0, MemPak = 1, RumblePak = 2, + TransferPak = 3, } #[derive(Copy, Clone, serde::Serialize, serde::Deserialize)] @@ -159,29 +161,41 @@ fn data_crc(device: &device::Device, data_offset: usize, size: usize) -> u8 { pub fn pak_switch_event(device: &mut device::Device) { for (i, channel) in device.pif.channels.iter_mut().enumerate() { if channel.change_pak != PakType::None { - if channel.change_pak == PakType::RumblePak { - if device.netplay.is_none() { - device::ui::input::set_rumble(&mut device.ui, i, 0); - } else if device.netplay.as_ref().unwrap().player_number as usize == i { - device::ui::input::set_rumble(&mut device.ui, 0, 0); - } + //stop rumble if it is on + if device.netplay.is_none() { + device::ui::input::set_rumble(&mut device.ui, i, 0); + } else if device.netplay.as_ref().unwrap().player_number as usize == i { + device::ui::input::set_rumble(&mut device.ui, 0, 0); + } - let handler = device::controller::PakHandler { + let new_pak_type = match channel.change_pak { + PakType::MemPak => PakType::RumblePak, + PakType::RumblePak => PakType::MemPak, + _ => { + panic!("Invalid pak type"); + } + }; + + if new_pak_type == PakType::MemPak { + channel.pak_handler = Some(device::controller::PakHandler { read: device::controller::mempak::read, write: device::controller::mempak::write, - pak_type: device::controller::PakType::MemPak, - }; - channel.pak_handler = Some(handler); - ui::audio::play_pak_switch(&mut device.ui, PakType::MemPak); - } else if channel.change_pak == PakType::MemPak { - let handler = device::controller::PakHandler { + pak_type: new_pak_type, + }); + } else if new_pak_type == PakType::RumblePak { + channel.pak_handler = Some(device::controller::PakHandler { read: device::controller::rumble::read, write: device::controller::rumble::write, - pak_type: device::controller::PakType::RumblePak, - }; - channel.pak_handler = Some(handler); - ui::audio::play_pak_switch(&mut device.ui, PakType::RumblePak); + pak_type: new_pak_type, + }); + } else if new_pak_type == PakType::TransferPak { + channel.pak_handler = Some(device::controller::PakHandler { + read: device::controller::transferpak::read, + write: device::controller::transferpak::write, + pak_type: new_pak_type, + }); } + ui::audio::play_pak_switch(&mut device.ui, new_pak_type); channel.change_pak = PakType::None; } } diff --git a/src/device/controller/transferpak.rs b/src/device/controller/transferpak.rs new file mode 100644 index 0000000..d9c261a --- /dev/null +++ b/src/device/controller/transferpak.rs @@ -0,0 +1,19 @@ +use crate::device; + +pub fn read( + _device: &mut device::Device, + _channel: usize, + _address: u16, + _data: usize, + _size: usize, +) { +} + +pub fn write( + _device: &mut device::Device, + _channel: usize, + _address: u16, + _data: usize, + _size: usize, +) { +} diff --git a/src/ui.rs b/src/ui.rs index 79929cd..95d0d0d 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -132,6 +132,7 @@ impl Ui { pak_audio: audio::PakAudio { mempak: include_bytes!("../data/mempak.wav").to_vec(), rumblepak: include_bytes!("../data/rumblepak.wav").to_vec(), + transferpak: include_bytes!("../data/transferpak.wav").to_vec(), }, window: std::ptr::null_mut(), audio_stream: std::ptr::null_mut(), diff --git a/src/ui/audio.rs b/src/ui/audio.rs index cc02755..41d966f 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -4,6 +4,7 @@ use crate::ui; pub struct PakAudio { pub mempak: Vec, pub rumblepak: Vec, + pub transferpak: Vec, } pub fn init(ui: &mut ui::Ui, frequency: u64) { @@ -76,6 +77,8 @@ pub fn play_pak_switch(ui: &mut ui::Ui, pak: device::controller::PakType) { sound = &ui.pak_audio.rumblepak; } else if pak == device::controller::PakType::MemPak { sound = &ui.pak_audio.mempak; + } else if pak == device::controller::PakType::TransferPak { + sound = &ui.pak_audio.transferpak; } else { return; } From baee7ffb8211d83ff3663d28e1c357f1ca54ad42 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 15 Feb 2025 23:10:04 +0100 Subject: [PATCH 0324/1117] update cargo packages --- Cargo.lock | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0f079ee..e87efd1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -485,9 +485,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.13" +version = "1.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7777341816418c02e033934a09f20dc0ccaf65a5201ef8a450ae0105a573fda" +checksum = "0c3d1b2e905a3a7b00a6141adb0e4c0bb941d11caf55349d863942a1cc44e3c9" dependencies = [ "jobserver", "libc", @@ -1107,9 +1107,9 @@ dependencies = [ [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" @@ -2922,9 +2922,9 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.9" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" +checksum = "e46f3055866785f6b92bc6164b76be02ca8f2eb4b002c0354b28cf4c119e5944" dependencies = [ "cfg_aliases", "libc", @@ -3123,15 +3123,14 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.8" +version = "0.17.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "e75ec5e92c4d8aede845126adc388046234541629e76029599ed35a003c7ed24" dependencies = [ "cc", "cfg-if", "getrandom 0.2.15", "libc", - "spin", "untrusted", "windows-sys 0.52.0", ] @@ -3435,9 +3434,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.2" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" [[package]] name = "smithay-client-toolkit" From 91a5483452100857905d3782780389fa635045f6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 15 Feb 2025 23:11:38 +0100 Subject: [PATCH 0325/1117] bump to 1.0.8 (#255) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e87efd1..8ec3edf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1482,7 +1482,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.0.7" +version = "1.0.8" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index b035b49..f35a121 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.7" +version = "1.0.8" edition = "2021" rust-version = "1.82" From dc5a78a75e7f73652e1577e3d75abae52520579a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 16 Feb 2025 11:04:59 +0100 Subject: [PATCH 0326/1117] use audio for netplay messages (#256) * use audio for netplay messages * more --- data/netplay_desync.wav | Bin 0 -> 201164 bytes data/netplay_lost_connection.wav | Bin 0 -> 108044 bytes data/netplay_p1_disconnected.wav | Bin 0 -> 97484 bytes data/netplay_p2_disconnected.wav | Bin 0 -> 103244 bytes data/netplay_p3_disconnected.wav | Bin 0 -> 101804 bytes data/netplay_p4_disconnected.wav | Bin 0 -> 101804 bytes src/netplay.rs | 38 ++++++++----------- src/ui.rs | 17 +++++++-- src/ui/audio.rs | 61 ++++++++++++++++++++++--------- src/ui/gui.rs | 19 ---------- 10 files changed, 71 insertions(+), 64 deletions(-) create mode 100644 data/netplay_desync.wav create mode 100644 data/netplay_lost_connection.wav create mode 100644 data/netplay_p1_disconnected.wav create mode 100644 data/netplay_p2_disconnected.wav create mode 100644 data/netplay_p3_disconnected.wav create mode 100644 data/netplay_p4_disconnected.wav diff --git a/data/netplay_desync.wav b/data/netplay_desync.wav new file mode 100644 index 0000000000000000000000000000000000000000..dd461d33e7576cf323d4634b1cdbf2b54e052732 GIT binary patch literal 201164 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≫U0$pQu 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�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

      %0LM_(K=NmqGFd2YM=yQ{eCyZ>_cau37xeC5t} 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 F{{WJYk4pdm literal 0 HcmV?d00001 diff --git a/data/netplay_lost_connection.wav b/data/netplay_lost_connection.wav new file mode 100644 index 0000000000000000000000000000000000000000..903219a51cda68bf03311f056b7947b60da33b41 GIT binary patch literal 108044 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 z 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 literal 0 HcmV?d00001 diff --git a/data/netplay_p1_disconnected.wav b/data/netplay_p1_disconnected.wav new file mode 100644 index 0000000000000000000000000000000000000000..96f512dfc9e570a003cd9b9c024b2919d7fb30dc GIT binary patch literal 97484 zcmZ6z1$-69_XoPOa^3GuZrnY%ySqctQd|n9xR>IkNQ)FJuB8QvyE`F-Kp=!9B#;pI z>wb54-b`+JzyEvL&+c8B9XaQFzUR#BOosLC)hosXSC8sCvgh>Kiy~A6K>)Np8b=Uo z?h*t^sEDbP7EK~h8W!R|H{|}?T+jo(|7`?8p*Iy0v~|HC!F<>5bECawvK zj&5j!W@v{dSck4`=-P>XU1+nSyAHIO(Oo;*SaipMo;snW{)$Ie*7_@)w;kQZX^rUD zTAzyv9dSyW2bM7|&Gug^Un$OdSzxKS&=V{ZED78eEL#>ymPB{3gt44`HRn)S93<=8 z!PMVn&{H9jxUl|h{4R$|!}6u;?_-IIkv8x4JoT->IwS~;6nylh#M)+1JupT{lpdo4*Z*tXecBVFJ3Puyh+2xZ z?Msg_C97|{4Bb^A6wwH0Dnf(KE&6N^Kf`ai zkq+@@N6#=uF>c&Q$5_`KDhFSCP&)kFUB6+>`|`qfaDF%^pJijDV7X(h`}jeKa`0)} zXSot2D~vmzonvP4)LSLSAX|?~^um9CI48^kSPEEsK15*|`cUq(4^W>Mt}U*q1EqDM zGal8_TVHEjLpzdy&%UrEv8-^OSR-B}H6JfvEB3V=W7lUt9BLsx_etSv+kCc&rGmMN zuTSCQs{h+&AM$aX{;$pA5^>G2&0t&Oku0&)Fat73GCl_UiVnaa(-ch--rNj%^xa4I_y}_Kwed zGQfEWQQlbYWc@GJ9+n<1!S{!?g?)h(*%5_~N>q{%ZU3`oEwU4AEk0Yp_TjTNWqsWg z=o(w20;SNRH0pZ$QlmTArtzEj4a@~fbR|PA$0@PR;tlhJ5aok81lzFB1L54TKf;{g z^IuYw1J*y535(i5qLi4CD3nH4|1O2@U{=EN$Nor+-o;!cM@O6rbA^wO)aXo!?hESi zA0>x*q4dvW}>k2|o3aUv`5`6Fz>*h27bt@m&al-h&RSdb^gR*n4~ zL0}eus5Ur%-ydcjAJ(z_uzfiGD+!l?G34{7*ymwvkO*Bqba>FO?;PU;v+~z=`207% z#)!mz4C9kVt-*N3`oK8S)}uy@w2c{9fu3NQ;M6{r#D3F*%Ews8y6|Bf=i}pi%##@3 z_WE{XkA~A?eE)x05L>|4HsDwQ`+F=&EG-|qV!Ou-z`p;SD<`- zo*3&MKT-c@X(Dt^qG#B1E74tTJwE)=nFN)lt}g+z1dd3t9I%A3JTY&|>ZOg#$0#K0 zYv)Uc+ll4&|H9(|mFSpxIU*LtApqCch{yZFo(Bjb0lck=lUpB?%93YL>Ee)<~e`C==K4UE07 zn8m4m=`aGZEndfSIFEU~W)ifzw_)vxiuSKQL|EcDew zeeF&7d=&OmzE~H_3fn7YFN}O_cUWq;{aDACZLoZB9EQ!Hk4G1jZWPF^2FT_6FFpaP*7ijOF0N1a5)Pk7B9&o?>3dZ(;Vp zwZzdP<{Zo%7&Z7^+^g`(3gZt)kGO7_6>+H;OE|9d*(i=ie7eRO!VH4nz)=MDw>W0U ze2F(-Y~j-tt~+iCMlXH`*VkteU+o~`bDb~NwihP>)MZEY9#sba}bAlMj z56b~tvCl$rOMN{{j07JBajfKvYB8^2yTBO2af>hN@X5*NAAKcY>ELTYy;ObuT5J>l z!$0OlpPl2pa5RaT4ciL#X8`dWj%a;c?>oAX*TA05f$nkMn(z5vn-K z%hxaVwbUmg%zr+H!Daj6JRy>UFHXW~@HtL}*#mPGeu`y-cRy{?E&^sC8KKxQB>kh`l9_4sa}uIpu3~ z@zs-H-oY}&_{4a@mWy-4y?!ix9A)5`0wNiH?Kk?O3+#=)MiDq)A4~as7e*;=KeimK zLEp#(ZYxFy_Odt+Z2P#57(cj7UrR9tG1f57?v{Fj9Z2M9`>KuO9s{ZQ$O^p zLubM0nI7$a=$Rg+)}jr2Ox$)K2V+U#_F}1Ew!<8PV{jk$;kx*IKE@HQF=kCHd!H}B z_`uS~u?21mj>+)u<6VqfEHR(e|F3;t)B7}yv5E8e|L?f%I2OQtZ8-7-5>VN* ziM22eHYHjSal|9|7u*I9!hc~oDocUNk`Ojn1Bf1{bs;d@Cn+jNTWuW0$-wYT;5;k z?iW}C3+uP{DBV+d2L26CqIaI7H0kgKd=EdsQkaXLJwdtV!=nGTM`u0Jowda8#2mEELi_i`U}6B#0;Sg?Ie1_w zYOw>}K&565=My;n$(Sw+5ri);tV6{Le2p6;$v=A&6ED#(L>_hkV2@K3- zh7wF-R?su)k&Ki6KtdEi0Pn| zP=ME9EV+zq2bzP4B%m6Q4iHanBp-t)lA+9G4k@Q5Qcb8$)E;UfHJdyQVn7-(7NuTH zl)+9!CuB{x2ruz3s&!8!$rvIJmJzRsCd65!`D^e3Y)m|bBMFY!3A8{1?h#Lj_rwf@ zy;PVDm&0%*Q3=A!4mb^dgwJ3MN}WWMBP{HNQ(=GT=6SvaBw!662L&*nH}dU}Y+J%) z#H=0|Kpa6h8wf|ik#GWBgMJSnN&kcrTF2mV9+O%0}o6Z64& zvJ;??tnEYtIF(KG9AeD~ZBzNV++X}^{(F82--g&mJYkP`V_BEyxYz4h%U?yFstNZh=2Hdyg$2|lR%!&^=7ymc^k9Kc?*A? z-Q{h95O@P=B@R)e3mVu=q8Sw|NMza(ci>vSfGi+-^LIcQq+t`HIoL)lCMzicbq`*J zd&npvgU{yw2KnS6g#U3|GP{HOz|TZ3a0=W(WPst!xAZ9@8O(y6pp-wrpN0u=4|kn^ zN<4rkz)bj=FM$!HjWiQi;Z}GNIEW;E4@9;Is^B5`iL2(d#7(v}oCG)`ow!WCCui^) zuY{jRgpr4dXZ&HFAQpjkl#?1uRB#K3)nF6R3r-^*fyrXd)Y^v(|g^!j_<_H<|RZo zKASzvJ%S$UAg!eO@#kPWx+6Uc{KPheneZG!8qc-zu4JD=H8+fVg|yHfKH)EOEs@lA zQ!{A^(VeBd6kJO+f;0Fj#Bq2Uc=-gxSa(1NVh%go)1H0EH-_QF2Z90>To|;HFUT;k z9E33!B=Z?7-vM?66A?q6XQduJN3c)a$32DoXMO?kBe5PX2j!%e@{n(MlJ7v52}cPU zleyp{Xb9tp)l@dwfE-KL(LWMmb~t~MTtIdu{m6Sn5g~vD-o@~Dg5}rq1G$alcCv^& z=bg#7BJaSVYz&cw^!zud;kT1n)H0^KFj3HfYQ!W6+k-e>Mf4DMlN_K)LI(Q+3EasZ z;d+A)%sqMs@jahMJ!ceDI>;d%)Fto|vFCYqD1Q_-=W2+lU;)1p-sXSfieVZVfRJAX zLYZf@1~y`YxKc8a8VC<@F8(mr+FpGc7Um}{2FNuC| zBXJZI5`TfFfZ@v#>(2(o+*)sp=ZI$|Zw1eY3EVx8j5We3WCtdLe2CoResGdZ0kgG%2sJ!JYy`Uq5|}_d%?h>)wlQXMJ;gyASHUi1Cwn#SR_-z0i!hab zMON`N(SjTRrED_$lVItRs>%e7m zV~H2wBh`i6%(Z~ynGIA5KMhU=%lYeE1M&!e&HI9v@g{JC%mOXo1wsQl6Q#7Cj3V1o zIm9v08eD^|0Ye-_c$`R-!2a}P`X4ZkAJ0e83^;={H;CE~_rsyQid~9$BF$6aZ3X9Z zy*xC#3H$;^a(UihejjW~=0P)m3r_`#K)m2vQA3#=DwnP$j&YC4>+m}^jw|P0!oF-5_Y2NUErYv= z3bH+!Mmottx`F6tVV&4d^qA>HXTY13Kas`m zX6GRfGnL!T?eKmf%*2mS32$*-iA2F3(!efZrxOjy{d_qmB3g6F-fgUv`$7&D^rMFJ zC)kJVBVsw+&Put~Fq}KdKLZlv30YzmxtCr|oB^xo*PtJ{4D<)>`2nyG|IQQaJ*>btf)vOG31kt~lete+!M}(fKzH~Picai2iayz`-bq{{{FB|wKJ~WZ@9>wr z1V067^8muZY}Uc$!6oc_wkL{5^7(t-+bHTg2;V`(CSVSx!r!jYkUep5A#ht(@ z5FUqcy}T4#&F13>Z%@2Fp>z=EtuCjfpaD3vg1WP#bMv5Tl@H!Yi;5F$=^H z54fKE59}RJCa>gX@TuSr;yUuktLfon6eDE*ArqNaWCRQ#cYxJkJM}mD9w=cNQA6J4 z|ME8CE^r#w=6>S!hqvHu?gw@YVW!$p=-VQViSkbMX_WKkS_mVQj86LZKWxreX88?-i3u}o_C>H!4#f!(`A}$WaZ*w@0=csF@C*Hfov&4Jf8_l+0d!UZD zKfH+Ii?iTI@)&uKN}&%^3i2c9gkszw-~-VSyhc3*15u7_?i6tlrHcpWQIFS)desw& zDxv{+4uZ*7WM?{&Zc1fP6X|#KLHb8JgWknV6aYblU?GaYM+>J4UCbrs3T38NQg5g< zrkU_6vzX~5dLVo()Clv02H{hoN>Iq$6?|Y`(4q7#vbT2xC zYC)T+In-mSfI2|MQfJ69=H|0a6R@GO%RGqFqqSk9-v=y598jt3U=9G4hZoKA{<|j>OjX`}u(@|Zf zx~9Iax~$%+Zl#%~ajF++lC@GT&|cO4h&tF^bU}Vi{C?1$)4ow}k_StU3WVSaXY(|3 zjSDQr|Ywoq2celmQtd>sF=eeRi@*E!$i-pe(8 z?C>eS;PaQ7l8F@`t2Y?hTiV$NIoG+nvN!o<#5-_~jG{JBi|L00&gYJHj(zrd_F?wb_LcU7 z_5%BH$9AW`YpnY_kJmHI`#rakZw_1Yt)ZQ3!1hJG&orWpcn0qi9Y87&(L~>BtT6RtTNV!(6);`gW^gHRl zNS~vB6hH(82Hgu95MmBtLjpoShi(gRADI~4F?K|pDq(CQnUs*+D|un^lcceU58^k* zy@?qRwLD~t-#3aVCWiOA=i3g|E+}7I@MF%atp1q|Gi%6=R`=5>#FR5B>Uh3Mw%^?32BuUETRjQL3O4n9* z1L^vW?t*T+AM1C=|7ZPqeX*VlSgJqnU*)IK?Nz^$=ZQZui@+o_{b7?W(Ztm#s!Zk6 z%6=$yl(*%6fTm9ri)5Me~E^R=ZF$TGT|wv z8Kb1d)C~|tBtSL4if;s4Bc4(KmSmV5!AS9QDNr0xNwkCgzSldpPmS0g z**a=Sbo1EjamfiI6Xz%C8*Faaqw&v8mNhxh#M^jZqpXJE4YQKAC-jM7!v#Tu)yqUt zFw^$3YDBR-e?Zof*ZWdiKL7d2?@#Pc&pgk2e*8sdDwkUKa&KB{+QqcRY5md;rHy!% z{aTQ@IeYD=^x~q*a>G@}Lq3Ob$^Ot}_)iVI5VS6MPVki=Pheo+Exp`-zV5JQnficw zjYgnVY2}(-s^JQM*+Fr8K`_~ZD|9xnsOr{Mt}2ZwG8A0+-0Sn)&m9V`6do;-mqu4) zS5?$pt;;gx7+t1nGij}{rr8o4om^KvPq`_eBQsV!P%c-`*X__d15LqMA=^VX1s@1B z`oGgE)W;N4Wc?*Tl!bit4N^jm1Q*bFPy`&#?eUhnBVD169=1ShBg-6ft!c7(fMvhc zZWp`rys!8kAexR7o)(Xh9aK~+zfq6XjMU!JrTPyH{2{na*t3ZDQQKn6;>RQz8Z2(q zs!2tYOHD*g%#AlUZr12|!@CV;CEre3n0P;7L;S(mQ8BZkt0H?xG!FY5_@g#fG6_6# zgw(z&KKjw}HtU7t(XBhZZYAFAetY1((1(kk#64e<`sr2SoA`IvGToW&Gqc{Y?<(GN z+3oT#e`!(ix~|ri#x|sPONVJr>Z3y5hph?sgq;W-8lnhp9TXqtlBBIB-hQV99DYqOV;PK{1*B1^MCqu<}+2;{L42*n~JMTLdtfO z=T#6@r>oD^%8g$0pZ0_9M_erVt)Pn}S6;6AO?$)-=y&O#>3`Rc)W7gQ;4kq{_xsh) ztou$kU)xcWr|PH-myeMsgoCJaa0J`K{g)%aw#Qs-%ry8Lwi_ah(@gu!66*?EnLWb! zo$F6`WA71m1izR#O(rw1g&C4kd9^BB_lN$^pwl7a!a79!5^*u2Q=}m3a#XvR{jpEu z660O*hZ064PD`HH;AO+njSe&%*`O|IZQS)JCejg_8xj|KDMS+*AIt{K)G5S=*bSz3 z<%bF<C|;;f2J;e;YjJ8n)pilDlx6$%gC2Y(=Wd5l%1d7 zx468zrL7tNp2?DoQaDwkbl>ZT2YwFR5->+USKlJ=kKjk4n((FJ`@>s?4+#SyihxU+ zT$x3n26sIF+QN<3s)H*(l=msWSjLp~EZtX9TMUcdeHl}Dzp`HSPS_ggraq?jNfs;{I@+D?8?u}9_7EcZL2-x>H*a9W5lq$0R7aEShAU6y*h zvP3praz=QP2}03qKXMzGjYfkeqR4TAGt55AT4#dC4;yB~l<>|?; zkHRNJq()4L{3EJkbZzv> zn15pK#I%fE6x%%ZR?Lhs$7b;3$ zmFuc@*9MqsZQ<@;*v(K+Dg+_22D-i>HzT>|579qFWk*a2r^BQnKL&pBzo2`h>8k!m zc}9Lt`mZ=%_>@Y9quk4_I}Mks*H%`QN0sd?xnA_(%e^mgMatp>#XE}4Mg5B+i(VJ) zFEN*$s5)1-*u2BO)h*;Ah-p-kKqVR@j+1PcBuJ0SW+{KwxOFD~J^>E`rUxw1ulK*A z+pT%1`c*Mk)?IQR?Pz1qu>EeEYsI<*TuSH@5g1u?@4%)P@eE@;+({cgxt6bF)0y-!1mhPl758R-k>_Q zq<86%iet6M3==Ew6zJcVr;UG6l5#5L*JlkLS?;CWH$L8&I_OPa=BN)Ja*ll5k$WX4 zHYYvTThO;M$@2V*uR%&E7L$9YG40^OILz**+l=S+7U za-VRsu3;|9b=B3{vy|fh@p1ylvL35g897I`N+ zBGwW+Ag*uxq=dS}x5?`obZKa8Ft-8Ka8JXbjhx97 zd28b&`*>@I^5q}ezqtL7e>na5te06YJuf~yi+t8MW%$dU=_PMYyj}Wk$-9iVv)&EO zs>y3tcFFX@{VR&69&lUHSU?){jm)cV;eQ}7E<_cU5xz6BBI?&@S#;~jePIoQOVCFd z21%h+fL0%)T`un{`~*x~1FzDZ>u7IVXg+K(*Q~5MUeTspSoWaAT_pN4v*5<(B?Z}E z!b;m!Osh(+?pD2|dT7n!y1u6C)^D8iJ*&ByL>TpmNf5P^e3Ck4HS$tLE7cM;rPcdo z`gaMK7SK_@#BZCfMLvLfD|OC9=5@T|>?#cAVSM!rx!FL^rTnJ6XXW#*gD+55h1taQ{& zt!Yu&qawIwj&%$7gejCflslD~ngYMa0TIDDA%0y$_3dt`q}E#ffYS*jdXdEYq;t@lj>483cYR9~+YR~#!-l_i$NmF+0)Qc_Vg zvWPCWm)t5pQq{e7x*^*1vw4r@o;BRw%bDTk(daZs^$=KvMiD8QF5M#wRdiAMtBk6C z>T~J{&2O5^n$wzKO_DlVm9Cf}50?c9ZNUdMmo zLQsFU7aV|kF=?n*ypJBsWC%`+UQ4Rv`Ktcfx4PT9o7$Gz_qxLY%R&s{@1sIv3ZvV^ zER7Y%A56$fEKKT|Y)I;ma5<(bVr)ogP*43(^)bm!@QcUgc?0J&DfBka_NuEnjbFEV z?f7v1b9G_UPh;PIO6&hT{;BQB%crvEQ(kO%IVbIG+LN?5uY0|>d~8sd|0TaLs$g4T zzp`_N<*tUrExM7w%6w#63WXAtLZEFEFeqeWSRnF^Dd7tv>LNBqP~i_l4h8)dcp|V@ z(3GGpfyw&z+6jt<;>pZ1G;Xl~M)57!)9x#dk5-pSVQ5tIw6eDRP+9-7U1faPg7Sgo zdyp3`EG{VCQ#!XIuli|SL!;4XGaayG+NvEkm%q0c_XKt&f2WHCLE=0~f7v3rzv4HA zztW)WtzM6z)rbHtTS6)3!ble{;_MOC)-i@v9wJ| zpHER)#*Fwd6(r7l|(xzdW3NEOXDt!3FmUe$RJgKgsHnTm5BuO`R>u z`wO=SeXAP-&w*3)YEhbOgL)kHQ^TqE2rj1#6aRTLyvaSVk$!hF1FKcAgn=9s& z6_)a4$(67wy{5L7t0RpwO-A!Q>pi=_^PH>N{hN0K*Nga_+9Eh0S|=VS)`-) z_3}N+Ftt@3uK7cKTJ^WmqBx_tsd%n9tr)GSlJAhumnX;<%GO9%ppVMs;=z(R(i1XD z?k~SC)5>`109ldjlf0j@LS;dH?#7Y`)P~KKJ$=S8kkv-(Y+5F{YiB*ZEl6>yn<=$@3|hhiri}M zGWbcbK)PMoT>IEBOK%I@7iMA3Q#&I7k;dJN!ySIzsoU06*Pu)gC!1>nQzO z@c#8_$GCUy^^UvNYvxc>w&88vmb!^`S+y@~GOIRJJT7Zr)~!6CvPpGx?cBOf zhC;(E<7Z>JsgK2I?d@3Yl6kIrAEK{S521z}KsQGyOcP`X{DeP?@+DcaX^JAnWW_DH zM7}~cOO_(bmBq_P%f<3MSzFme=`D##+*_O}>M06Ay~#|`Ch<2CqhydYUz#NQQI;wD zB>P=1Q?6I7)l_H~>7xDa`&Ia->h}a34V)2F8hkxe645oPYxJsUM|8iKq0zY!>d^9_ zO+mkg910y02o!hWbH^6zCU%5mfHFez*)^c#n-9V7e#$QV^0Z7|_PAhMwmT!})$Y`} zsK@vz?Rxrw*YjVmeO;3=AS){ORG#T$iyTGvi`+q9wpO>Z7P#hln7{8?;%skUZ4I<^G50ei8>{R3*Jf3ls#;b(ue?yXr!uYbP1Wd{@9TyeH<+54 zADHi3p4oakpSUl3yK|$^Nc=pa4{4;9Fm+50lfn24)(FMoYVl>sJ;^M|JF!SST=YR$ zAsi~o5|QF9qEum_V2WUjprfD;jfpg4^h{f3Fq6uR7Bm%J6Fx^%H;#&4i2sq^mETfY zRg=`W)Uz~F9rPO>&@Cu8I5~7g7#ZOo86EXqv^jc3?BTeX@#@5diKU6-lL8Y>amCRq zBYp}Vue&avCJGWv69Jh^c1YO9>u;D_;w@-aWG-D+W-NM{|NV!{@78BHUmtmOBDH_Y zxRjYMxYXoVr_w9l=eB7#SUObCrbeW+}GtZtw>Mfr;|UujWhDxziMM2YkW z;v5H9wlby0W8canqRCZcpSD!ErMQ8-V;igHB* zM4Vs)GZDqyQ>g3IU(`YB8HK(xq4@ySl#x=>J!v)5P_R+BP`p{%T^_2i$j``D$VMtI zsx5wh2R08DhpY;j7y3SIPsEd`y)h@^x+PR53`rOtKRn);P?ltG@Jlioe?IzQL}b|Z zK%FW=c$we9RWVcLZ`w=J{ypB!Dztj{k?#+O|yx|i20tNe{$`plPpFJ`B#PLZW1 zq_useef{{&`nS_Ff6kne*&%b;`}Vn+g{F!XhFO*?*1Og0L1X_Y-g{%tA4xJR*EI2OUmhN};8D+7eT9K`YR(Pc2MXl&IL^(Uz zGsP9{9Ojs1Ut#NJU1eTm466&O*S(0bY4 z7>y{8W&h@S@gLEQj^RWg*@Iq=Bt29TCLJ!lEdi2wVx_p9_?ozxWQk;^><0+@qz)OGI64Gk2FNuN187EOa5Nf zTX$FAAn0E3h>&L?WuZ~w+Q`dM0Wo9a=EQGL&?YTOdXU_^K~-{H(&vO7agi}IA}WHu z)c|o0eUAziw^Gej{Vm$;no<$|$uDnifwt^+MQKTs&$?{gJLl_lub!s)!(VEDBX(N@^UFHj$jG-_R;5u4-I!p*F(@wYF zKPJE)7#OlAY+A(INEnq9eKaOD_G{Q9R&j+%aWvodLd{vn`{`ttKQ=f`bj=wBT z@14>6-SN!y_YJdJyx;Xc`$K%bwV113WsbBzaVVV~U2gX__CAr%9F>-;zSU*)kIWJsTx$3S#_e?Qd z|6Ku!;OU`-;l{|+=#*GCj!DQ$n3&isX+d&}2H!S3&~RnLyoTEver#xHuqWxSSV!1j z{#ZMv<$PJX4 z-X(|wY3ko_po=8^7J}SIw zo32715X6Km32hb5L|u*95chNZ_4r@ndnL?DEKRzboSSS;UXeU3>21R1ct`BYSYynF z=tfZ!!=HtG3Am_o(9@l3suq_}71N9p+{--A%^yqr-%n3vQvObv{_@MKyXo<7=!~5i z{uxhRKT5xv-ttZ0+pC$0**o)2eR)>CqDEruY<^%p;=G8y$;N{x*lOQy>tmg3Zel!I ztE~RLqIKEPlG5Vn5?!gM)La%_@pt7<)op99)Hw|argU>xTLcgt zeLHGZBoQ$_Y(&U|puT}NePjJSf4kpq-CN~%%myd=B#@V$6Y*(Xd4VC$G_a<9akt!u z?;gHh`RaDsuCx#7bKW({UYs}Q^W1`=h0DMA7Y{3iX?f|;a$)7#>JPQFQDMGjS!SE;_|7%mGo78v_XckIvuL-h zt#X-)SItrsYLP>rb{1*E)^sCkF*V(n5w0g~M)f2^T*+@yONF=DG9)hj#Pfo=a zdEUEMxwbl5*nTyyGqy0is2gF(HpCgBA;OSV*T~S{xZ7;9hC1q;A@04N`RrzXFmO}H z1*^m<(&zGJ$~0AX)Ze+G6Z<#T{}x~gj1D%T$Ypx)s-UdExWMSZfWT7$fdRYp&Geo0 zTlHV`*Yy|lJ@k}br#JZL=`#a<2|O6|H0VQMNMO2dyW$EH;U?O4g%L)rN=YRf~n$tSFPj+R_vixm@{}eASZC>Um%P&u@NUt=a__(t6xZ#Fr2O2#J z;8<#;M5H{fdZc^@{%70}s;)YBPQN%uUUw5u|47UGd z%`t@=y4Lt z&S65uk7P%c1JuzP148-~zk~h?{e6F{pTD18r`1Mk!qk-Nf}&P-OY*HqEXbpN1vcL0 zHMp$yRaTuvVCIca4Ka0FYOYr=sJ>IZxhA0&*2Wm-8N&?ux`cSbi{7orpBc&$mBsa>xP(0 z#!nrn8mcrZ?22v5iK^A=C7Qpr6LsVLPWXR7qq#o^z6rb%xGJbk@W_zZ;5ffOCGELj z)4s~mikmh5mL2vG`w~lWEv&d%(!XHG$HWh1@20;i$Q<+GZf;0^ctOFJ!s5nd=8CR0 ziw$aXLraFa#^f@OvLEwqr^M2CsxG<+|04fz|8I3;H9b^s6$??%x}UO4sZs4x7RntG zo$x7nfN$z;?b6uyn?KjBsfHDw%Dv_LDppn&Ro<^uR|+bOWx}$jrGv`emN%-JUpvWk z#TM;u%ylE?lX+AC^P@m7YAhKe+pPEv^$REKbpGS@odPxlga!217x~e;O7&i4WBE(T zB2gE?AbJy-1cXE;zmj|G9p~=h*ln3@I96R=ajD#0e!Ox=^@iGS3^R;ROc~~v7J)6& ze%`Umb=T8{YeaOT&IroID`amJKd7?QF3n~1{d}kPg66O~TlG=3MSWTGTDw-aLsyLM z$<+gtcjO0TRno`OTInd%bCt=3@_%HZvh&iJ(zntI*8EUT2SQU0jfqZ+JopqUCz z;= zeK;c+C4M92EdJvC6}Wa(P=cf~=MelO{@rinM}3)Dkpfs+G6Y zRq6Q7KGsItDy=!z&DJ_g56cttbn|+1y1BhYZ*6SbY1cXR?g8FZZYfbpikaPlm%_86 zsc25e1IY*}CA%QIBEPP9rp#3Rs+MXRX^PbS)Q41c%9hHViW+&me4gy1^jGOz=_2U? z=}qZ1bX+M-l3tPoOXiF7MeRivVW?=os6sqRO3BYCGL^Zi-_*J4H|jNNLj8+sjB3A1 zhUUM#Rv$#y{;K_oe`OZ2jGUCz*ygj{JJ=@)_T~{2D_Q%$P zmMdnV`K_t3Sz?)Bt+mZ^+;Qf*Ubz4DocBIui#ZP;Of&_p$fi^qdJ1z&P$3KwYb807 zRZ=fvj5V^UGOu*8^rfVos%WWrFP|Vc%C5^!%AUzgvV7TX**ICHbgQ%t>M6S! z(7%Ov@44>X!Oli=A{lrc_95;QabOEtL2!`lO^NApIt8J9xG+Z;E9xc+5WN!47dixM z1!YV(W)ppiswUlN=4}Yvh-Mepc)s-v_B`@@<0aV)mSdy1ZfHKEiM_)Xux@rJXW|NZ z7D_-LQcu07w$TQ9DwED63w{ygqY=}2!gOJb=n4AL`(E5Z@~7mnL?Dfqj**^|)=7KF z4#=L%oHDT-$g|M-M6_V*wsf7exinJRSn4O`Bv&QFB-P>_;*Mgs=z-`@Q4f(r_)xf5 zI9b?P7%S`|Y%c7N&RYl>;SE7|!Coed7SRi-GSvG&2A&XUa4&z6yMku7Ht|$Dzq2p1 zG&TNS8(V#}QdwD3v9_{PRcv)Y&BL0ewPCfDHA8DoRL56;sM1&eh2|37t@Sr7LXqlw z%Q@R=$7WX(&ra`N_FJxon~v7%@MuhD3tHba6fFXL1a^>}sV9^T&EMNd$*7;nGB6Z8 zAljhSDC3|Ce&R3joA|Cg&t2xGbA7q)+z4(1cNop2e$9R0jGPFq1X{{x@U74s*B=NK zNCPv;8gd5p5ap<)!|4FpL#0s{sDII#96ddk&Zfhd9!w&$kEZECR7=tipjC>nGn!F4 zfX_rTLY;64afG;pR)fq%tFbs#%XC-?I}neE(Lg~~kVmMINdF5MFVkPJT(Dm7tDv7i zA*g0vGX^F~a7HjeNQ)kdW{Hc$I>}JUB4h!VBzGlmB)25@B~K+EB&?)|bfL7BR3>$x z@!92)E|NgWQ?U+>DO?fe2-*osm^9`DbA~z2{KyPqBA5)iD}9Lyr~W`|3Lb!iU_BaT zSqFv#1=xXR{U3r&(b@|Zp;QcS@rnFmZXBEBedvyM^>HX|pUg*$wRN?%hifZpf2_0D z4K(yL3^gPhuGNjJds#cawpndx?YY_+bt??}jqgln&EH%4S*=#PEz9n56ggwvRc^cI zFq#Q3=VowY&>Z+2v@)tKuz(q84tE6^iL_-TpOb%)yT~=<9`X-zJvkALxfOt)(Rfff zv6E;`l)^t?S4hDZ{2_h?nlZkXKf;^&5%3-CNn9hOpeL9K7K77hZPY2S6pR4<(A62B zBrlQE(VWh2>6f$xebahF&!H=+QB*CtnDn60rbtjg>_cOEGl&gDCXooXgI9niJCnW0 z0cci9e{vqVlPo1iQ6H&MD2D`Q4qB)6nz@Q3I+ppK`IX6I#tIGy?g}Vjo#4FSh9FsJ z63!AG5-mb=*lr1b6V4O{2$vvB=`ETqS}fWs5{p&}MZ%eamrO_IA9_07o*smbeNe3y zpyN2YJKdV@O%J8V($RD^b(V^t-jnOl4E-pw7L=p9{Q*{jUcgLjL971`K{Y(ef5Ug@ zC-OV_r)WLfDE?<|ChCX9xo0_3?dxpotdA`%EXT~D=KZF2CTRRG@DHKO;=47rqO1-CDJ<7cFA7i2y=CH_wY3EI=wg9XD~qNJB+rI5h^%JzYmFL&vFTbyQobF_lDxQc@({$K(NWJQ+d0Lo=3#f+oNpZSkNH zXb&2qO^xPT7ZPWPm1v!!8m)xXp*g}!kX=9`8l~xgbU7SM0h`b&w})u%J|J~uAgLln zWCb`2wt_`yt-%FQ4E)GAq@!=h+2k}Nqr>Dy@-s9Y=4V zpVKXwhYZK8N8d8PL+eGJ3vLR|3jBq7VYG0Nuv}mej72>80_ibAcouzQS}6z?xR|p{ zKL*m*=uJp3F6uOOiuz2c(7fA@G)rxvMx$1rp&n32sGU@6Y9HB!6Tmd(ak3cIoR}xX+7U+uXA%I##l~C>I?er(Q6*G@H z!rW%AFdLZRjD)$1kSC)bQ}Yl{JVmSA8X(-=13QtWtN?4lKJYiV1WqE>7=zj=2X^8O z@eeT`tt>r>=FKNT1@wba$VxY&HKzU1yl@#xw-#JM+PVQAfDgb8geb=bXeE&o)FJDa zlYPiTqy?=%*@7%gi@sxwr)SZN=^6Aqbk?43PB%cu7W8-YetHL8L{DI7q@|aF*JxiW zh!Ze^n~Z~LBxr-QmCkHpf|)e>7`>OCN`H%1*DR#}qW`4#p}cw{449~M)J$p+)tqXI zb}jV@wJw0PfXmgUK^#JyI0kV?0@9)y1OW*Y8cpaMXGs$pQ}GCCM&OiPn&wLwcSLMuCA~G#HEa zfuI{&BN`5*AQ$pH~9}@ zrlp7xCXh48nFw7C5oekXa-2|ia12f zM|>nCzQ8ni56K}9t-EfF?%gK2Y0V74RAID+ZJv}d|7Z5WnzAZ=32b$T7LLk6u=I7Tf+tC)LIU8p$Z z>%XA&7*EOTGNIoO$HY}>YNCk@)zwvEPW8rxQ5+i191b5`S-PxC+h z&z#Na3A#ITzx&?zK6>$bgp(vl6{HK}y+y(hA4EU!hI)Ya_?UW)zjGAtuo-2ea>%DR z4-WnR1nfoDCJW#cBuPJ!hR^XezP=N8h%In{7lfdo4Hc-bY zD}pBjkNlawVz`eU^yImRy5G85x$>MloxeLvz*-uY_bTs8o-Z%jSsQMR3C@kqXHJ`I zj4RgF+5Of1o5$_huu1!uQ>StHqh&COH9LM>#eLj+9Oe#hjyi(-eINJy28Z z$(wj?8>FBb$WB=SmkWUL{0ah{|!5W3IUNhO-teNY~&En>8%eiCRDV&23 zxc%H@sD4^;Ww>&vt_kd9R!0>cz_ep*%tv}09iT2z6RByaErY3sR5+E6vtcXxwWX-| zv(TlCCP$JhP+6~%x5-E3dolqhxdSHvL0NF7q>Eb`j&rAi(HSjV_M@-F3cjWr=J}7rOh?|A) zdEyv%e8}inN1y{*3xC50x*EE`a`h9J2`Z@gnmC zmDIcU%PhZD(1yXmj=E&3q3!XfCuD*V5%Po>_X8*Gd_he7-bEin9A zA9&j*2VVG|dIq`9=91YPGuNkoOl<(%t7T$F{Hr)2?!vE4zmk8gjB6QRF`-)Gl%#~@ zKB-^QI%V9-?2}bIN6r20JnC-YeeLTC9o7YPvi=9~m4>v1z0VC5?9#vTPIE2mzOWRV z7_NhvD;GIDa$uwsxgjDx+-;Autq&`0{nPvjIMr<78`qOfp~u48z9%%qXoFkN36)ic zC@+Gwf_DP51HA+719bzX0tEtv0u2M>p|4c~gMwd!BNU7JRz0s>&@UJl;mXY<%h98l zJ1omr5E_ehrF_sC%`m;gvlC^0Z<=U&D@Vx{!N1z^9goAkwV7T){Y^eW_d6n_BXQy) zT!pGp54W5EZl6wK6|x&{Qnlfcb<=H`t;`Q52AIGYtoL~~i7mkmMJJoXRptNYSz);l zE*=sKNo%BRsh#|n{I48sYH8|dstU|_g&ZNDl^RQTp>fzJnBkSB_&r=tt~mFLJ;u&p zo3X`MmUZE5-o^}NqM7&f4!S=SDJ=aSy~7z)VKY6DK16?}U(*ZG_)B68=5?XJTAZ z;>6UJnUOiio!>m4{qq!BpBHkFt(mc0Nnx(IS&Eluo7+MizR-R+d|kxs$kkE%q7TIM z&-Zt}QTZ;#T#B9(#YJ`uFJ_x)X&`^&r!z&#ANoYa<6GzMn|C04kYiIuOnO+_pj0BY zSn8uxOZxYWEJvxFPI-%5zdUpO4V6@FaA+;Lgl@q8d#&BV zw6K-799vKOGkeqUv*GbzKbC}3;ccOqY#jE%LYnVM?S#Q>W4Kq7)VF~v-j%N5x!tq; z8NJfm0u}r#^-Jpfw9ItcaWngA-at?30HMW)ZqQr#(()Zk$aW(lGwNDQOnz&D0|ky2 zXkK7R{&V@>#XOAO9@QfQrW!Y?gV~Q|UkgG~H#YVyu;3?r;W40f&mOcg7 zVut4F%ELfczs>i_ zQ`_y%>y`7DBY%cDZAHq|BfaCzmQ*>U@d*#l{wHU!Z!7HS&P%z4@J(!1kfWhYIVB)Lp>}0o_;4m+0ku z9epc&JAJ!+i+!}OoR{>RaIJ9O%*)PwpR*@>TUG<$7X@p&qv&%im_&X8~kpW(mpxHG|<%5^jYRn1-gqDfDlXGC^p9n=E9+s$G={ zf#SY2cYjwA*DUv5ZwLQB{!_j&o>XT-?%kZv*<-VsW>!eMm6RGkFs^T0Zv5{_CsTW5 zuFdhdJ1Tw1i^3CY)2NXJql=xV|9I0$j ze`zg^*w97t4*iV1&-W6iOI>BBJj`^}^whN2B${Rd2`wQv0^2rT9w-lx*T{)-7t;mP zd(%dfQ?|&W6e(5~D)R<=lxaoFR9iBe$Rj$E@Q71hdNNyvj}^8{gH5`5iuF?1ZK$zt z+Sl8CV3-z%F;EB>vtF}^me%Gmru}k7Ilo*}o+6)<`^%g>UMeLGl7iAPIbI$uDcl>f zfO6N_Hls(v({EEh_@6Ji=ec_1?0}QSPYgLV=UmIn`ET^R-~C02&$koeb3Uj;`5v}C z`NE3!E#)X%wLDkOQaZcXxI%hNsfgK@e|h9RsBHoj{CoWK0-FL?{RMq1Jn`-Vo+F+C zo<**-oP3#`Q(7mi`^Cj}|JmzjzSzuPlM`2_nR8})i|8%b%jSkr{R_7*)w8^*(z;6X zD*jP^ewlnF*A-cm&t+RI_9GW4^Sy;#-*Tm#_gMw9dS*S(uAFCc|KlweNDOvU=V-n4 zgL=9)O+6nR6sQ>ZJ=jAnjdYAkL@DG0j1yN`YKLEn8XGe+#vVN-a&!1V+g8glX&t*h z)KqbMb6s|)l(#0g9aO9tu0p=zN)Mv|Rg$#}52dznU*v+n8*e=YUx8nmFV&M4h;4+% z{2(rd3vp|Na48ljDj_8bc40Dqnj65Lrr(jVp_RrreYL(*|AsznL+A{-lDWyxz^d&q z_p)?=B4U$Gv9+RL-wnBGlrKyUgq4m18Fc`|)V3i`Q zJe?$cwRe#V6|qCA@ML_8UukpDp8ibXaSO3%M6 zx=zGem`Q(=1_(3xar`IrAU0tuKb0TEkK~=)1Ew=EDwv-4CT&+-jc?~at$%NRTjVwQ z>cOjP?|yyRn{YKN-QSU#BOeKWlmBedqNUtrw6gWfCY7pR{9vK}G1u%d=K4Y=(-Qaj z6ToTe)8EKt$Q-Lf97U$h6{DB>mv4>Joc%6?N#BrmBdtyPX#`M~zn+(G173;7f^dQq@m&=qW;w$XC6y2vrH>yNc|@Ho9! zzp3lgRHd-u3YJ#y>+{G-Y;)0RY80l}1@s2%qf5o4M>mS99$w#Sk<&R3)j!l$Yp%=- z9uIa_@~fHZc>Qo_3^kJd&R-PIO9!MIVm*Q4`*QWTPFzKJ|G%)E;n^80X3JYGy=+^; z+eJ2wnjTdss%GTT@VmD2)&=JI@)B_x--#Up_Vfe!jXKAyf?F<0Xbmo8wsb;%Z2Dpz zWGQPYZ60abDKD22#c^Uu@u83+WQuXpd2q_LX&-MB!iHO#nHQLPm=2oE=7;8c7Q;Hp z_T2s{JR)Lt_-gxPThp+EmPMw^;s9KahlZE&$|Yty1%>LS9w+Sd6_3O@Bg^5`^vb>p=*op*M3cW z9T~qU?QnLSyNNoTOlObrvw0Uc7&mP%XXVZ?*>nbN;YN!H)UXb+ER)UrXKG+*i6#cC zcot_TrI_Lxe82E@&9|>V!sA{h+SBr7opGA|LA4|Cf_?|ryDa~bPs%%_&0<5byOeG! z8rD3#TV&^`+EI5R+ehAv$PUl4jkYWmZ_~H*b^(w3-@J(2zB#*d&gD*bZi18LhyP}9 zo7zfGF`k7i#L>`6BM&@c&CoRR1QRJ#k-wUmu=lpH;Rhpp5tSm!+T$$?q%iIa@@0-G zbpy+MQ@|Au_FeLa1)nIJwJt^}VkEfD@3_IAMn2y}qAXH7@-x-A_xxtDl^kyVY^f7= zB&ZQvEYj}R#ggKBtZCSD>mBP8Ypt;JVQFEtZMAKEZ9VYojj*fM z+LqU*vho9Qu(%G10{`N+w2fcMEn?S$!JEnEu@3eFdx+h~Uf|C2-GwOODVNH$pnm8- zeebir{%ZPu+mpNZmfn4E@1F-X9^`*8>d~y{T|Y3fgHvZ@=jN?)<~naUN4dIr-aub9 zDVU;`583D*Va`wI zI!^)+!^+PKy^zI; zCh~Gm({Yo#F(KMZr_m;$)`i(j_AB>+KO)Q!3rka_A5tCps9eHy()5Sfi{35W z(#3k%deQp8dfD0yT92RReCBSZ17M|pN=K!Q&=FLVj){^uR(Qbk{5!5J*M%*>6r?|r zIYe{l$Lo+2faG@~rvjCFM;bt;1|jomlwr}D`YSklIf5xk3De_m#x4Gp_H)ILkKg$p zn}0U^rN(WHFOkqEVIq)+jKuoM<5Oy+sp;Dtm2v`kcie`zaA03>k(#L~dN)JUBlKe0 zShbgWP5q!c)Fo=BvPPMsY*P}UDTq=RE3<-A1K0fn{X_l7{1XG4f`)QJn`x9s%9fR$ z&%9!b^Yw%)f>TI22;M_eJTk*k56lK8kz&FYrM(fb(d;lbzt*IwDzTD)|N|@LcL3H6Q5Bd&)}vl8f>=gMp4 zW%4?7(XHePvMft-9uNx~6b5ymMA!f=Te=*=*HifjG(4B&Z*o~vB~v3)7gH5e5mN&6 zZ>Qyb@-2MTk#|cM#H+$GzA;i>CeWkE@}ZsDy@OQsZVlTa>taXDRWY5 zr8P?*ld(5*Cv@PqkhpOrcTwI#sAVNj18+lLWxvn=5$c<=>M1R#mkKo}ej|GWtEtcA zM~dewIB{wTCxu$#7SSV)22gDOyZb?ocJp72jU|B+r_cHVyW0$Kd=3K@blNt=-B45 zn__>)&iXYXu7CW5ge!@)k~gO$rgj1@wAN8O`&mx6Jil|J`?*K*4f4kaN3B)NNS59l_|}i9nw~rhlEko4>F>%XiDS-?!Vh-8a`a&3Dq5 z;cMtW;ExU*2viO}4R%1yS*(_WCU7k@7UeOu=?t-kTtZE!doV4~>GtD$3vHnNse@gW zZ8~HgZpm+bZtWSC6gJ8B%~s7m&;G^UK72n=FBiI_$`QpP>=DV~x5C$kw+q+o=j_w$ zHv4W{L3mm#hpn~NwZ6BEwv@rD_AtLSjYOq-B#)I_$X5BSv`(re9TjtdGi7k+*)vd0 zxp1P4HwI{xl*@rg{{}d?8n{0>gSlePSBEEKSNeFIh=)@qCVx+ykuV~@Slr-W-(pY2 z9*mtFTR+zGGw)~O&#a$AVxPvA{59a$jbHuZs>D}GAQIao-G+OhcG|e~sLV%>vDuc~ zcX{Vs%{;fgJ^fGN`?6`r^y;C@L?x;fJq+yeFm5%!PFO3hf#=q4+HPuQehXJps%4s$ z3|kt;*}B=bKo{t?)v}MZuYp7TuKl!qyuGKLv;SqQVS5>POqX4z$NwxX|t`2Mfzf$2B1)4bS{W$9&oYHb~MD=gYJ&UVknKr7kE-pc-) zeHLC5>;vr$?4tdot+UM+b`*-*RO@*lD)t(2mro8ok+ ziJl3=1)aaaPvDF2$G|gOW4%llcKM6juIj-AzXL6oowR3dN z?3B?veQH{ZR66B&(&)q`3E>G(U{JHoRwaxUgcQ0ykdrSRJSdoV&x&^8)rpInUiQIU1} zr*KwWD^-16r=vx05TG5l?Qj!;m1C{C0j>1;U& zEpc!3L0=H8UJ{*dd%QXWUlj-N#s|_o;+EU%}77p{0=AWk7sIc$k zhVm(##!m69I7%!lJ`g$y+0gA3;O}sMa&0*YN~GZ|#r9+lBQ3ZNWg?e^3L2NR{%Qp! zJFwI5@UHQ=TxRFt+yXhDvR*h2XYR^qm0lw4c*>~czmr}j_D_7Buq>fm!oTtB;tR%C zh;JBwIKE`U^n~<;Hi?%LU5VwAt|#?Ou9_l35g(miFr$CwB}a|yV>$okHgaBbHTV4V z4)g~Ca}-VOgZyNQs7tP)RT<`mSWj`C!5xp_jgP?B%W z&B3}}rN0A-8AWa*ZX=VrjxkyPqE*orsV-%lq6TLLqk=C3v%vaDfh7Mm)ZQ8X-Tn`L z62G%F@Fh?zxHxFSnHr`ZR!3=7pdI`#jZ6Rs{ghlob)qYQA-}?og$LTr?-M$RUU9Ef z3|(;qdb*N01LMqPEF&yiEN?6}YcuP7>lN!8YqHg2&9uHir+d?S)Vk2x!0NW_u++9Z zH4id7@b7AwV&zHbn6^t5pqw2E4et|SvLFkuaG&%-tyG(HvX9wyY)NEU^krn`Ha!&G z+&1Vsl8CpVPsT32u4Yps6e_sOKiOB>yUfkGZsa}99hFlcJ1Q$P^L)nq^kr#>Qy-;7 zr%XwflcyyaiKi1Q;bl*(mslz>5*b2CiCvQpC$&nJQhKFiq?}IOnl>Okf5xcHHI7GF zY1vF}SKNjqcR$Y$?_mFtKqFy@(5F5Jl{<% zPc0o$v+9Rk3=?g2Y$I$-P=oiNcAc?pvh}fXwzFZ?!(O0|@LPIW?wYHb7n&}~lsr~? zj?9XN|J}vmj6Tccg4=#awV*bU&!I-@8#-f%#wxv}{*Puu8t`4El5!?kDVP!X7&rqy z&*hKvr(!)z21W*61PTU+Aty(~Pu8r1nkk)H~Mr04spR_@7v5&3-{oew- z2aZ3-_Y+uP?FFShQX|rr7%{yZOWb$Hnnl;_|&hd_0vwK6-z&t zzByxYW@$%)<5Sk7?1wq8aw%sM*9!Lu&vS3CuS{TKaEszoiy`^;Rp=<;B4wzyM7Agw z!;`{W_#xX!Zs~|T9;)v-xWRR@{AEeR9d3d3wDqf1w+dknJnNUN7x2`#vr6y`6to;S zTg{72@U_U#fXTK;l0i0KhVRE+fi|c*GlM=${UEL6eDI`WLa&V4#(llCep>6TWvi>z zYVfLlQT8dLlx|92rMEIxnV~FK4k=%uf9t63hfaFB_7Vz>7pS@)j3%hN8;Ee|4OH?r z)gKz^aZCt^LQf=0^yTCE#R3mUhY7dYD7mk^S9Z%COv}LeCzR3 z_n4QO7h+#lHhaJiY%=vSg_$luE!{{?l$J_mrBC8`kr59Gm4r87kXm}RApO{dhRz4VhVxXc&K;NA8I|dGjQY%Q4R*Lp=)U6U*tRC z&GZnSTvsty5$EE(>$xv-EIISC&t#o&BxP30Jd)8V<7xWr^u6f=((}^xrR`4pn3k4S zF1=g&m-I#%MKcCx+{-APxjM6q4fJQ`7yE!a!p{)eLpMH9;^hl+8@y-LG|;@te8K#|T+%WSKI46s z3rIM5Y}syEV)@c0v23Md`okS9L3N zug@`8U?(Pv4kWUWDlbs$ai-p&TR`vG5!k|F?AE2cj~^{OM@Hv3@ikC}@zN3LU&#tD z!XT)px63c(INUQo;Ldp+4u$1-&4Z7m4?6aO@@F6n?WGv$t+)&o_pvY*37^w=joX3w z4R?@q;eZ|^8(J7MQjD8ohxQ^F@+34!PoW5GiVpBEC~_^vM}55BQZKGw(avbU!zb{U zS^){SdxMd|OM$|HQ-0m|n{T%_&J*Ej?B3@p>{{piJI|K4JU1P_$;H_{v$L~iXO+sz zajbTXaCC6gbJTD&cQkQyax8Leb6j^kbXc>dWPQ)-lYKOs&Y6`{BKLmooV@l<&G`@3 zwx6fDw}6lKyZrfsO^~eHP-~>uF=9f6p>>83fPO`9WV%4Bw2y1R8~h5PIBuWCrQMQ8 zS|U5-{&@Onb2D=>a~tz)^CK_wm7xV_7Dc97YS}kNge?XFTAtI6ZlWb0XpeE3D zfORfm!?+{(q;SRv%LEah#bwbhjYDd#Luw$emXBdCaKKy2o9g1#%2dOY&lHlM$(yl% zMfrg=QYr|}V3=4;yd(4%C}BHahd;-4fn#AB+yxJzVYe~Yp!+ER&H84lH^m^?`zoq! zD>97CLRR!XVlHO5^d-8Y>NUe0m!44FkHid@-Qcs6p(U+_iZ~5g<6EQ~$kQIEhP+f; z%q-ao?NcSJ$!F#~(}(SgeRrR|0o5VPu4k)o`QepGXFd46BXBz$U>5)-8OZj7GO;rI zf!T|H)rmPlkAP>x1O@3;DD3Rer=OF zvE1ls3^z_-vdKs2>o*wFj77$GD73B^lZ^bvC%8v`2j*4>=TWS-QPb3V>J_DovN0$_ zW!Nb2&OhF7_%{0T`FP)J?+5QDZwc>VPd$&|Iqe?huIsMj7TjN<1K!|T>YC{qh$o_s ztBT9)qVel;SI{-WO?gIp6i+wres4+NUEgrrC!Pj|2ZO=J%1$Ly=?TZuY^cY6*AKzD zqUn{4p~if;SBiwrgk*fqAE3UTKqiw{s6zA)xWcY7&DnWuJMIteCzpp#Y&-v+&nMIo z1_?cdxk5joqEJHkh|Hds{BpP!1n5I9a+lz2mgS4JbH`fv6W+mdU-ePZ)rPn}}}_?^j6o?XS?R+t&=9=0sI znym=!BMoI?J#?@6xH`~9PRI9xy&nw8YW@Jwryx{p7x}?_H@-et&6fNl_+z%PHuebA zZ}H<|#8!Ll?&cLZaLLfe%2U3Fzm4nJs#iZ;Co(;YY z_Et8jiO43es(nyPjzpicQ{bQUH%3BMt+aaiT|GBpWv_S|K!W?zYB_5IlYbkRQs-u z(Z1>NMl0moS2LOzqm2BaE`&gKhFbdq^qdFay;uYn0*B8a5(??!i~$XrpZV`|9Rz;q z6i(TF%w47^D*Phc5;kK^lQ<_=9^KkuffnP1q41oY=cAA^Gy!MaB#{=Y3HSL!{CMP8 z&&Q|#kw4CFs;5lNP>Ns&?)=*sE|ON4uZ2mZ3g!Wld} zEH4T(h2ug#@tsgs_`@~Z=So;a~I?~kk|XnwZz4_eXb`?-Fe+5K)YYv^N(kb z=aXlRNB6Aqw)Gtj3<=H-b`EaBt>QWG;Ylj11=JzhMXiy>X`j@mS_3%F80ZZ8>x1;B zs4+{SzpfX$f|SFy!0kK3)l``11YPV>s6T%q8)^--#67TEtZ+6=W6W6N7`6{D#6FfKy{QFqczr2)io-K zTaqjIPq0StbKpvFv{FPR;GO)er7O+-Gd%z1-OjD}*F8_z&* zRbLba)4y?tTn$}y+{HY%J=J|De82f~0{4UANp*KQjv5Y!EJ%g+1zZ9iY=#pO%8{zz#g?YPb=vruKXl7_QCZ{pzj(!Ih z)Edm|C+a+%$XsRr;2hjJE}ARJxmbz23x{cMK7(6_v$`t#l1XFgV1j^|U4#1kpNiCp zO8=N!z^6h>`U9N%Jgna#+~+=mlPWE?73Yctp`0iwJmzJ1rT*m4@STOO;xyooHYo=f zO=mEDJTR6UVv2ZQJSrA~>zWk{h;M}M!czVToI1nNRW*is_yxLi7o9~j%q8@1Ly#Fa zkJ&^|r-ou4*(s==F9Fxn;ZX8Z3vfQqfN$d}5gWPzR=PN*RyEc7YX@eTE_kM-H{iJ`kzm-46+t_`@HPrRD>!s^oS6inu_fu}Kysvq)oMW7JXH@P?Xxl1e zZ^_w{JIWPsSM-|v^8@L@Y&8$M<8b1=(cCzxPti_m6Sea25cky=>5ZW6?yQf*G$Izb z(l+IF&=I@=Rmxgrmof%tO+)yM?-=JpX5tWe5}p~3Y6I6;Ju;D)1pko;_KlRG}i zxR)cuFX(j-L$Q*BtjYENzuVRT-?CYHDjGsApPygIQCt>WR1QuQ4vSXgneC82fyZ4V zcLX=(KqBQC;LCC5bn|=jA#(w9DN_;o8!E$DoXZ3F7W^-6FI)mEPzU{+e`Sa-h=FKiaN3BUM?d<2(=XCVSTNjIbn@;GH2IBkw{?brvHV&R8o zz8=vd6dt+;=iz?CY}5vlGYY==epub=+8f;ZBh+UqhnXQi^x{Sv%oj zja0IN%YvT*odZ>T_r1lvsOjD+-tAt&Ul>??Ik>sn_=DbAzT3W3pW!RxUl6DttfpiF zpTA}lBu`Nu`VYo|^;pDQ!A-CO*6m-)0vFTu{~Y94k7?kg@6bo6#bkLx#*C^H`cmlq zJ^0x(jgmO;ey6@rc6tw7F0bK}dk+WCGMsfP1taA7Y;|wdjp- zM1CYM;YCm;{L8h>S#~gb`+|Ht+^Db6Lv?|6X1{PlTp%5lhr)-y&E&&vcb3#&yeCY7 zuHpw@89O{jC@DS@cS|pE189bHfXYzH6%cy>huVdXV5qnWcfq@OJp?BGL7FE~(pjj; z3&9UR5I3v8#X3?|X#m*W#qvB;8eIFkkVZ}k|8T|FY2YYx$#!HGxsBRQS74`bONB(~ zka>)?hV_A&maSqe-vtVW`IMQssZUUU55DxT^%TfBv`Y>{u2ZrjI_F;Q-Ml5v z6eQkk@fhC20Y>ePyp_K2JsyTyVlpOc)lqW%6TPY{J#TzoLav^>+j+^I;2jyLsmw+H zPzaW|(fT_*TOVyq#U#TKWEkC;$zgi|yZlr5n>X_pkfza)rl~*3Gw45-VU}Nj*hI!q zKPUpu)8h1E>J|2I1}b_fuV_V^_mh;{qNxl(Ev=TJ7=IOxanwX}^)zRw>mU1K$^sbYomf~cA<(F{R zxjT4Ajo}e0g?rd8@E9%l5qt{gU>h=>sGgXucvAf%m=2wAexKR*!&}P72O@**lmW_i z)WYt{a3ll=*L;XlUnMBoL+Oh&)8YkI%>9fq4+e5{6O?Hc^d{eeHCMEKEH?^G7 zCfF+YEqFxTt~bJT)p^iR*ooQ1Idq>j;YQn!bi-QgOb*k61RFk^338@1L+rv=W$)87 zsXtNCw~(Evc&Ze<=cn1r=*JDZ2sNJgh&+N-m=^gCTvh_HgX)YYWG`P&Y$g2(y>CmP zh`+E}k-)h9!VWPgZjufn3+1$AK<8CK;Q6uaE&3vL6iSUdV3e=JPAkU7BBG4NO~Lw2CA(`D&Ploy^c3jFx*q(~$};nW{#R~>u{+-h#8 ztY7JSQo1FzPYfi!Nj{bK+L4r3%~wJ_7J5phGY7eKap4H$e&dK%rE zAtIyyTu<^@$JKT}26V(5}0z`D&4dy28Z zOOEo1e1BmtPUfaO$CYI7!>b&@w53O49TPB1wM(czJRMS~LCY{7AoCNH%cDTtsK)+s|d&~A`zcCG&Df9=RJiXw&8V20+1@}>~$bHNg!K_ra z##tI$YM5nHEqR{wQv4lV|6{QcGyug+4^54MYS#ky>4vVRusllYD6T~wX2}Fb4yZn2wW|=u+%dE+2m!d9_tp2i+de_F27| zGS8>xjdsjU{`8~U$G@JX-z|E>d-c-w_*)$w#=PwNDK9oRt%S2+@O!8$qjOXFgP8Z& zoakq~(G~r%@i0`CtOE4tJ<-sptFHFfcAw2oOdFCobk?B-TW-M#v6yPcK|I=B6v(S(TFr0~JZm}b|OuV<}{B=0+0^B0#jp5#6 z!ttFv^mitLTgKbPY0?h4xoMV3GJTWY2z$7O%)ewu+;EaGUF|w4(GB3Yy$yfgD0njS zu<8!rUpIlcv_i&mXs@Ymmlb9F4&0afNd7I86I z2>J9y;gY@=8bRixQ<&rYIq`LnbM&~vng<9-&V^4c-CcsBVjmBHp0(`3pb zSeu7U3VUUBn;%Qn_(OCJGAwjjcYt-Lk?C@Y_&}DSxPn?riPQt%I&~X2&V7gD5B&O zk_+0(1L7+&SL}!BXNRQyKxA4$y-`38Lq^gCsTVTXE#hgRg4hfBW+hDvp!y7lj;<{F zfe%2$n?i9l1ZxpXzs5Afjz$Olf&SE}5b6?IhKYw~fr9oWic*#6D0K1{z^~rNguNNY zd^J39+q=s-COdyd@x-_vV?GXf+4OPZo#dMtH&@;%`snA2&L1XxdlC0%TJ79&zQSrD z<175i^)U~-J(%cCp<|?gKBXb_Yza(vOdegTZwnl9Kg}uP_=k2%s+HKnx_iE_iz_ey{BRx_Bzs_UNE<~#?bk-0HaVJ zvnx9CncNe&zGJ!Vd{gYF{E`SJah%*lE+FNhcU;NM2Tp#GIm1xwc6K1}mZ~_jqroh# z#`(~NUxnF%hk(?$kt&nR9YoggY}~OsOC!(|6vN)$0rY*6cwCIZ?_7{N$j{|kNZ2Z8 zZfn*|iRkh>o8IG`Xd+cW@;(9o$1FY^&sO>Xt8ljN_-Gr)3+KdxQwEwd6Y{r?m`JYF;I{jqc zqxuhfJv{g@=E=4f9p04r82#n+_j+;TlYXQgO&^!B*U>n)kEe?=HuRD1%zu`qn)g|H zTMn3xN*#o?>_>8?{yjJicdAXuROp4CzpiVnvoy3rMD{XAt4u9}&peS?GizZ^U00N^ zgz{KdiBEJNuAh)09+Sq%rA@a?^UY_>Gc0MA2G+OMk=Df)o4Kt#MJ&MIV`fkvLzRsu zP|>-Nm~~#sR^|h1%bu3hCXn6N`52ZiO64a@5%$mteT`O3y{U9iW+_*d zzUmEas(xM1XOPAQOxeAL6tQk#Ey>Vy!)6rG|5X^rj zKOc|0pYwj{haaC-e5r^5)~miJ{Wuh>{VEbSHNHV|g^Z+}#qO29r@<{+?T|rws4dV5 z3;_c%j*VvBnBH=b3rBxN2x;6Nwmp+Z5u^{(*=MQ)m3qM(e+~abUv2*r|5N`Vzvw4` zp-=W-^sn`|41_D=w3SF(*hH43YcSW?Ol}4A)3q_702Ld&?sECH>593mrIKYEPQ7{P zWUr#beFfyI9k+tnK)<01Q)b+q+mJJfWjM*V7+&D8Ht;?TfIclF|E8AEZ3w*VVU_WtQ^fqPl$%&uuwQ_H1nODdIEC1Fe4;nlhPTJ^DK^e*@JRL=K$9?_gU{=f30A{|37IxjTuBVwU#~$CJ$;t zBxLR4%R}GXnQw(#V@K{KP{}b+F>OHV&scP1O{fu2uIC}mqZyo@BQOi7zERw`YWy(f z!SnDpQgL!{PGuW1{GjK-8qS~=(uhrCucC%7Mh_DM1x5_N1T2O{7zs3Twa{J|3}kFP zln6Bigh{9X$oD#(#I&0GrFkv-f~oA4WYshgzM=^4xv&xs`#NG!x>$ zZ1fRs0VUahEWBv32r#w-U{oInnZkJ}4Soo9g)nsMG%DQ{`V7#x)ktHTjl8h8>|ESG zve_~4|95Ar(q{4{WFE>qmHBUG568l+t=TVg zta+oHhg@z~xLbD%Ud@}}TkdZfs21F)l-J(sK_fNfC34}lil%8~3KRn`JCk0FThCKe?4`YK5(FU|F3pn-wW)(CB7wN9Z4x+Kc z&Lh#F8FE$TBh9KdD*)B(%uhl>RC{Db9YZHRkdF{52rKxusJzutT?gZoY$U9KX5bZ& z@6Uo0di@|D;+hC2rPh+l?*%Tt06f_YJf#AENJtRlz+trj&iMy#VcG$!tjQJ^cCf9% zCP%QF(aV0O=5XbN2)a1Z*h+$rE*>gQ6r!6m2RIw$BeoJFLW$H*dLsP_2`IOSq0~?! zhOQ(eP_xykIw8yvo{|lrWx5Upeuf@UWAzWLlU}aa)OBPMbDUkGpHvEC8uwhnr@agv z2cs#4rWt>e6O4N5zZzpqq9z)Z{DXtZ=(-$Ar@(79$7pE$H%a@ta#OX37U>OxIl=cq zSskaRsauuhfkG-1dSmQRr=z-d*Pp1L{oj21m7T_MRQ`QII~3_{0-t=T@Jgo#LV*T; zpEu4|Fdzg}-$j4PVE*8Be`Ro;e!tb<&13WK_09%QGTQgu-^O3Td&&DcuvIw}*y1Y} z*r=Y=`Y3n7sg6{0wfz6>Wqqi=*4P(XPSn8s^SZ|MP#AfQj7Rd#GfcH!O0=TavjgeT z#2ls)f0cPdL=zQ(q70$($ojz35|}pZSo#3Y%SX&k)ashd9^x(ep6(BnjYh7G2e+iw z!b0$nlR0FbV4~tgsTY2CFQvdoYL{DbL#V>+d@e`o$W9|X)M&o3c{p=av9f>3i-eGI zk(y&V&y_OPkk`e-;x8gjbI>D%Ny1q2NJu2R0CWEeebEAf`^ji~3u zF5@%NnIy=**pq!ix#%M?3thWR?4XYj!BEJEB@b{h#Gqg*eOjnZ5lRJZBzK1?$-4A{ z!3H5wXeph-B-lNAB0ZGKR+}i{p~-l9o6{A8P5fKA>pVlv4VnW}LVc;`p?R1TKSnK~ zU80|}HI?!H1ob{ulQ3z;HBsBEz0jldN9sN#74Zbk^wwOS&xD!2rzZQ9083P3-y7%s zyMy!ebjA_l^a)BKeF5v#^L%2E4s8yd)+z?82L~Coh)4P<|9IbGB;{OE=4!i)=E1do zIe1$$w5fqcdcRQDzPC=!$vjyB$_&h_=k?u0{(u+YQh00 zRt2?z_L%&Qy<&7%HffE~QJn;bQd!SW6%4f|_Zu^m4@4Zj*Qgcft$!uPQwxoE!L!sL zfxuL_ccDz&4Sn_`;&(a0|xmA-LT)Q|92FXx^^ zcjSTVHi^@SIO?h3B^GPfiBVF2%TH#L>rJSkZMslN$x+*w`pUD(g2A%H9`PJqEOZ@8 zCz7p2P0$|G?`zmVtjj@zL{6KDZls*Runf>V`rK?epziDh&*MMT5%)ZfRrBtXD z)hKjC*{fVLoS~J3nVm(Y`=;pNbD49*QsuK&A=H%KP7GCAs_T(77DpB0n}?d~ZE$~@ zW~AyZq3<%YsmAo+9Hb=G#mS!;7;MzXr%;P(t8CX75+B9N?4QB0z;|cyUCFlYN5*gnd%yv5Gs*{)T@-4rww1|9aX@X2t8te zP0%gmAHpUh4l~%#LUmUq)Kh3i*9e{pF?2KX8@tdL6CBNyrE7A3hn{=$X_e?k3~O9h ztLZP1wDwBv71*S2N8ZjAtz^)zD#ivOJG9PKJ;-Ak?_#DQYU@A5d7dLzU|wv;P!{zm zv`1@;JgIl&)zD+oma4jS%g;SWUFFRYM-$ncQM>B>F3!=`5@YBkYAeAi z|3Q>tjOr@Sb1@Rwi>qRi*pytv{bWpJWuc~IWW$-BM3?+0QWU8^`Q9?|hNsdf$;rN@*UHJhT(*p9zLW%Y^E@`+P+M;3 zeIY%;s%-@KU27nmmFttUj1M)<^Hc4@y(T9@{qe9og#N%e_(;*8Mz@e zvNOm8U`=;uhr#!FQJcwnl*2-%RK}RiUh&=Xlviu>0#Q!=AP*&OY84a<_D-UJIl9JN zm5+N~KvVWLcUf8EIYZnt-=+$rv2r*ul{=*jCN>%RGd1M_!Um}txYQ~VjpUJJEq;*7 z3pMFdTr;&jG=#450rXAp9IdY9UoKkYG=;lCmgY(*1B6-H2h8zn$Q`|9G?#fVRYsd3 zPEdb9Eo_ZgU295RRI?PDMj1NFoq%SGRuAzl>2Bgkk~X^3ZGuUeN!MgMfOo8p_D!9` zE+K|0I*U*j#E$Ny1{(LPgFH{g5_C87YIU`HxHz7&8a}FTJf)Oc>>A@+-)ix(RzV}l zU0QARuF{1(ukPn}Xtz8SwacVJpI4iTR``B_1oK4_#HO^LDTZn$+>ndYletb>LtlSw5%wR( z6XD`>`8B=85Ki4F_@-WEhLNu{MhcZX(Pb!A9jJ7b7jPwrCt`uj6N8KvP4p`2VeI^L z)8JKOKS3l= z%e2SJSfVXek6fr;(egE5ETQmz0sDC}8Af@?Hu|Y1_8Nnbmd?<(k5EYqR)tn-H!%#6 zFi}K(B7pb`-oDFPEyYCCVn$If)iR2UOrQ^vxoW)XCMdEjHDCQl-G_6{JRnbQ5p{{R z#%HONI^s%{4l8bbJy zWy$Hfz{;r+F~kErF_0LA9f3UU1hiSI5$j;4~&hQaf-MHjIy`20OaGKwh;H805Y}%Fgga?$zT>92Ta^aZ4%;{${?2np53ceBle;H+K;DO0|z+~>0bl4 zoC@ap-oU3f!CT5}gK>QeFle#bT73FjYf0?Z8X_mz@Suhmq2shOxc&|7&$sZSzwZp# zZ}%eA%i2qAlC~Z!#^+HA5AGa>J2Y)M-f|ajJcl<5S_GKaZ-e*z1)f@>1rb-lw>l5^ z4+WmDgLVMcDTkW-2f3dPR?7^$VK44)0e0(0z-%7ZrV=({2i~M;S=s}zCWmW3wa0ia zQ8NM~@*NzX3$%(vFXVa!R>Ey?u6hob@nDqgInd*F@MUI!&HbjvfM@y>7<+?I_axH( z0e<4Lge*n`{dUZKT7YNLg-E|xtt|ZdH%j3oY7ixfSS?*E3Y@Y(u@yYZeyDK) zsd-RGWnk&ENU0e39lwH!Ge;`|B+?z^&5Zv)1v_U$cwL4@Ar~Cc3@68Lz}eZAs7)kk zQQ+Gs1JB|>zstk>2V!M#820OpzjMLIS`l>?19Xvwe3_8@XIcT;vh7e%hK5QA(+9T<=we|%SjNXNTdfNPdTo=TzJR3`%Qi3O*y1Kf~F zc)kd7_XVDl1$O0%$p2f^l@Zo-;NKT51f`1t`mGe|EEhf(i%5ncu;Nec1FX>!dHt>V z@Rssum429YiXc{T!5>QCN)oIPr}f2NmY{G(Cs)>Hc50)&46aG@j zy#d$D!A@4>rx$9&j1p8Ldc&G#*sBigSQ;@a6=1zG$VqvWzp(j;9WEz7A0v=CyMZKn?m6gW5B~kz1;b8-iR-|S^PRb)MqDJEBs<=N9<*A8U zV_e~$wmNc}h_}^- ze;M%}9&f9Re0h6@KGqeVHQiGLQq~k+Q zGw``A@}GxZBp!_QcGxN$eT)b1DUT9AM{bKFKM=jeyGVGJhL}(eHem3VfVyVkDNJD< z$0J{QxfJ9l2W^=`TPwixK3KsG`;hSQ9IYgBDEF! z`327iz_ncX2LZ3EfNLpuXIZ>81*rt1&RN)qLcQsppM?Bb@uR`Uddnl>Ei%$F!EO}N zGNTVA&=Pa;$&UP6@Jt-is(@OMQA7FgN8O*Ykp_+daNUX&O2U#dyw8YKc_Iz=*K1pZ zHP}Kwl<_`aVXj<+K2|y4Gj`;QM){0LRrhAy`u{66jkH|Ip@8p8qBl^GLpOZOA5W0* zv=CUziki)X?^#d-nMj4l_bjYT;VpW~Bz~Kan{2cx0-kTceHrNQgYn)R^j-h;(+R=m}SH|lTVkWamr6!2z{7~_5t7FOUZ8cIYK=F)?F>bA>=&tcmZ zzYA~$J2-ff#2XETEw;&7d%EmV=zLDT3 zMByhlp3sncJr^qOVhht{kW0N>ZhU7(xjpCs6!bn6tfY@l4%`oDG@fJdR{eQ>%+vqV z`+D75^_-Ys6Q%Gu2XdsrQ(S1RdWm%J-!&7AVMk3NFf&McStt=RC z)!(C+S+51%S~AKd6?&82tK`FS23*%Y--vP2h@3;Lwo9Wik zaG&01=ryC)uRnZ9_YoO3vZKzNc+!aLy04oH>%)s{(0IX9dI<9P4-a;a$2d^!B3XPtT#A58bkQiSc& zRTJ*i|F+|M{p$bH)}Pn&^uN65*7O1YrQn}FiY3E)^u9U+|Ib68ngtL44{hc&Ov1&PnHHbcgNYPe-dvPX4 z=4-?lM6Qh{j$-Dv6Dx*UIJZ9l-06H+*p6Pc8!-=0j7LwsjcAIsi4*IiS(sr4z!vk= zyJ{_EH#B*UNZXWyG9jPyQPN2DCuVYe)RjuC`cb=%b`gLWyGvoS z8aU0dv%)hafpEHPd}#1v=TW0|1#_+<-3P0>3z`!Q?>W>G!~_1V{VDI2>T5%YU~Q{9 zP`!imj_KM~U#t*9%wqD1ao|YF*4mM))nW1>tSLu=+4iPp*Yv#p!ijw#F`g_7#oll7 zVeJr*n?2RTa!0K`_POqmS2RxE=G!8brY_Sj)$Q_6bpm4li)wYXGKh`$iYz>AEz;Z~ zmsQNNQ_Tj3DN9-iymtjLOg>EP)%M95a%FNPQoseI&r4B0VuR$ z=#w6iU&-e{kHl#|$i~`jxsUdVasegE5-Su!I|qJ)HdM4+LhVMsp-&Kllz&tP>KuWT zo%pHxLBIODb`3o5(1oF+$-3A-a3M;s2qGA6p-=h*9L6Sc7%>%5*Bi*Eh<}(&g%b0% zYnW$uChAaCm_(Xou7i_(H&u)%qirEboR)d0{bYIS8a;s;Pn;sA(BWKnMkID&jrJb# zatqa&o(7ea2xz3FF!k7X)I%y7*tHr| z19Auy`1aD5RY5!|c2{<44HRDJ>@Mxz>U}SK^gPM;<{0y)<|W`fFfqfIelNXhX8G*- z+10ayvo2*c&YYG#J(mPO>w}!s+^X&dp0VDB!f0PTDNH#ly6Y$_YfhZ*2|K0&43 zXRYG6BV|sq<@yf{epYmBNbQhmMcWj4A5=N8alma?WmmlaNdI@v2KG}H1v~{+O??fK z%m$*l94DMd4EZAH&FpadxqCqkc1q5ZtTAAK2+5oSw#SA!?Q_cHHUiE)Rxn9J<*~|O zwTrf%C{N90{^Hx2>RLbBpF8jS-SzA5zs|KYU|ithzz%^i0fxYafrkR81|APw7I-Yc z?3(Dzw=J|VrjvXScY_&A|4ly8`l}&Io>Ws*y?s3o^4@1x&+?^LO`n|}kdcTxbb6e!sF1X@7 z16*D;DO-FdeNi3~8|kZDIpYcQKh`PsM~+p__WqJzHP<-TRae~r$rTn*JFrO5$Dj_u zt%J%2r1`ycMB2_<{{-f4iD`|ok6{dA2}a;7-$3`HN|R@_i)ylx4;Hg!K=3`GN&*FY zm3ajniVsXL-fJjsnqwYpnQrZ64{+83Q&%^Cf7dDhTK-+YZ}qRA+0`O2E@)=(*q|Z- zan9}5#in7#aKoSc0GvDA@Leu=n`h1rPI(#|@$@zlEj$*W`1*Z%u!Wi~cXJQ{s-~y=m^O&H018O~vNQ4`LiE7(ZFB zIG*^$xyl6Q1$GFcf))mG!Rvxs7D)?k7n~aS+V$S=yyKK@q~(}IN_C`NN&A+*EHf~BX->V|UwOmbvS*dAidbDrkhf_I zsbH>xakII*wY>dr=R3cS=)tb|?{K{epn^^Z%?%0-+<`VbDljQvmur__r2VE;Vub%I$@ZF1GVX#%rg1YYr@qlznzJs_lMV*74CWflZ zjNl&fXQ9h^(nMM6gD)=4HrPJRKH5IhKFhuyOiYwxljD%1w_}C9xh=}_H`pBSn+BL( z81oVRc?#&Zeo%yT03lV48^%@uXV?(x6jh3;1$1O-!x{cEw~-A%#8_3JbV?Y8Blh8> zX{Kog^mNadA6bS$ab=@rqj|PzKjM>~Lx;tTSe7y7&ZeElHHHEp=}Q@R^2_O}>O^5; z!9F*S7@_-l3v)Z>tjlnvPD<<@dq3*Kua-aS{22W`>|3#Kw-DX0%0N|z=EGIa9BHlF(@7w-_k(!{cRAylGB*m&!#e`nGmKv#_lk>0ey+;4^_NjR1Q=j8UYux z2WnssX+I#)qL{I)2=viuC=zix?$EH+xXttokzH?0_YlR^2&3)a=5xSShMW7DZz3wF zys0VJ(?5cjvbE`{@u}efIN-wgDhAGQg3saFa0A)CP-nZtoMr>KP3%u-z#PJPM-==5AtWg8hIb> z=qq~(nB>K%hs}mnMi#oXKltT*UBnedu}%1Sh*&9M_zf)GOmN-|1w+_Ft}UX!Um`*& zkZZ@DXRK^A=j7{g!{Pz9;Vu7;+r$?$yoXxHU%)I*N3_~Q#sU7N zQ1F^oV2%R;9StS8wS+?SMjt&DXAgrkgEkQuJVAR0?C5c|3wAb(XntT--hSXa!DN2v2KVvhw@%_|O6)@x_vN#M|^;ByI2 zy^B0m3)*?Q3iU-=jspJsr?A2+d1eW-#9*+rz4Xl!6yM)cLusmPQ|2qv3q?8QA?y=fc`IWQkeO&4?K< zrp!>!$RW}y3FnFOBKfl9k%}q9z|FK)O7;zvzR3TmE49+<51CTa6o)bkj6NFlF(bhV z5(hrj>R7`Lmb0WISQI{2>&xws7pJ^Qok0vyO_;5kF*{!;{U?5qYhaJ@n$koajre6% zZADzisn}dO+y~2n!|6rur)wgXt_M+<`bA9#x5av>Rjr4P zUMRDR$N-w4D$|!7Pwr!!P(T`QTEz*ZiHfBcvCEh!>Xz1$JWQ`4WqiK)Q{Dvy z9kef;n`q-JkjKE!SIU2jPt~SObE2hhxzJy(L7Z1lOY!nG<|EZre(Rem&L!GVB^5t` z6fZyt?TOk{KBZQrqT!Q)SSd^dOY>)GrYvi9$Wv+!>5BMJS*OaXAJLP_({77pwHMqm za=cVoE5ei_6T!meRf{s?=toKqIgoL1^|Wa~L3~qJNI~jG+D!I^7V~*>1MY1BTxA1g zE8!-VDP5(h;9gk(=9oaN+#7?dt&==Ky+$@9r>L=FchY98Lob!1ediQJs!+5PEPPP% z$v~W9cg1?3CMUA9rJtUGVi#@>ldjH__A7IFmg_+@mAk0-w5M_}>7bHNbYY^j73z4h z4IM-6z=|zee25)_B{<^?V}CKj<#B|8f68`Lc1bmq-U?5xG{2H|8~cPmU0#OVEx5PegASJ`3&A zOf{G|udRfh)89}Dnkdi0{sF5hSP@jjjJ`2(llxA$mxc<%w4R)m8n1j2KT(ItJ5puz zT&u}>+)(}+9YUO!&ylMLmvT}j>C=YY%x7_;5X&Xh*e&H06EYad zSb_=?Hp`k}xU~$oCF?I?zOgyilKSYL>Sp;Bepjj8LJJ{*E9Fe1FS!S&zx8dhFXN|s z))Z{eYVnmVxA|7yuI|m+NT!itCf7+g?Hf(x8FJXp$_lL~e}_+zKe!|0CngVl91%xN znWyGWrWur<+Jp2FsZzA>3fq)UlU(XqZ9bR9_JRV?FvShk-2qx#^%9xGCU`9FU+PWU zHS=SkTR|t{kmZnZg77W*KtV&xFk3UNi;y8p#tD{hf*rs`Cb zuv%JZ>fxWsJk4(<1oL~@H1&j(DL-M#k^Qx!L>1}+x0_(4Ao`hs(o)m|!d3CSG+0{1 zcjdmx30isjmajDtL*4Q1@otu9QWX1K1^c^FlNt~8n0&FPJ5g!C)iz9&rx$#aUa*{{ zCMEgWX}kC(WLfV!F$Y?nU2x7jmg`8?DaayDamyH>Ry+f|hqTwG-3%$t6P^^<4c$$D zs7pOnq)e^^%SyMskJSmxbZV(`gKnp_RGu(9!FV-M>0VHg{b@QTU(H{lxU9KcB6^G8 z;M}35HF7Y{>Gf0LD#~Db1^E|~qfHmH#3{-{o@DdMRAIFcp-IeKX1PjAL#Q6sZgTIu z%38YN9KFfAKW_zH#JPkk;VbUmCm(13HZ7yS3ud36><6aOC}E;xqfJI5QN}Zm%;&ai zGrY+;gme{A=tHS2Z>Cz02_hRRcjcGbC^cJDMTJN)EHUm=mltqC3n~{eFsfG8cRH_# z7;euE=tbR4-tC@bpB*qx{ghTCzY;UuI+J~*J@sv;cQf~t-I$4GaOK%>VUK$t*Tb(Q zTPLqmUKz&cOgGEIx!g(I0t=`1DX1@;Gn`R7D<7CLWHBlq2!tH@Ah?$5Xvu7x;f&m+ zV2W78JSDI=8It)j$48Qu`pnrpF(<@u*5;&V%0bdfVjy3W8YY(Vwji%yZTUeumzP2O zWysC`<+1H63!WUCFc-P9Y{CsN=zfY+qyinel_i>ec;RQ|Aer!dmzntc4 zMfNkClkUAI&Sa zrAM*%_+U1{H(#A>*l7Gy3eWzhKw{TgCNtBa8s3ZPZr^8_E56J<;Ui6lxY0sQZ(n(u zF_Am2WQkeoUCjTF&{gC-sT?s7*s5Y+YKb5=(*uZZ^1tA8=7GZEXmls;4MGb(!%#^n zR*)+@5sNX4>!=hH{-ff|Zwzz1_w#MC(YS@ZC}(5b-or1V!obl{PF+KnWTq?gfS!#9 zu4kokQrQ5k6T>aVo09V;sBaB!%Q$s@PL_8x-_kjTyDYaac;MYf=NW&palUEN6tKxI zlp1>c)xq%XCDL#2cQudgLXRK}$`QF5Sl{|^jJbt+An(4=p810xtWNOGR5*IRu{;&! zvny6E)l^K0kcOxs>Kz6z2fLDVgg>r9-u# ztd_tIHe}K3g%|RCC|Qq|ihFNMBdL@0aAGlapDd?TCGvq|+J-ZQ42)Qbh!Vf0Y!Xk3 zX0np?C{@ODU-qzOV=Z!nFGV_l*y(nMdZ=Wc2mP0W& z`Jfb#qp5-9axxK0xCu&W?<8p`e}io;73B34Lb!USlWeHkMm4eZO(m(xo+=&=God`D zmvYh9gL-AyPgNDG`5rO13=PO0q9p8;MyQjC1n69Erd;F?Vn6n=|09P=CZWAD1M$yR z;vH7uyP3v(wEE5yF1BS!gP@%D&XCGOcbpOv%Yn;awM3s01F%qGJrVz95BRG#>g_2*9$?=g>PMD?UktDC{> z>6RBz9C=Lstz4%=*fZ)z-+1W~*&Ds*INv6T)}|xMe6M1Mj*34O%N(XlXjPQGS{zx2 zY7c}_5#oV7QmaOP#Lj4QDgYcuZgLAbO|7S-C?s`-eh&nilRAkwk|sdj^;O>z&*}fD zd0KyIn)pcz#V%PLb+LRyJr4$&v#U=L z|5jBUO!TLwQv;|xdNkM@7m^pW+v;OFb&DFtq-c(@ew&A?)i?$gEx?jlc93bY7Yma~-+z-@UFc?oCVGY+$ zs{$lO6P)l>!pb=n=W3Zy9$yU{%QCF~Isgl}A7_5+fP~u)q~jrA^{xQZlmax?F2sr0i1X&b|`doS$|k?CTz4xdj$*sQu}I6wdc@C zBoWnJ9u_#Df>#MPst6v_W5CLt(!x|0wh0INjMDlb2g`u%yMt04Md~k6uCK^tQ{edK zpq!V12^@g39l?&sTdYw#V2wWy__|ae0m~qVU$ou0`w&hvH=zcK0tX1$HAeu!au=w=`>jpI76Riyq0aR@-`1V2K8?c2n@ohG6ha)hj zy9?aiF?e2Ecv%^sONSBHf!|qzPYaRuFW?@-fPHO&+9{66zELRobKo9V1Mk}t*X!XN zcPe(FDqxqaEAba_6FRCO4ecfZEVT~c8jV1<{)1ML0Xx?wmg97|1J0mT+`S&$pf!ni z!0(kpOK1kP4vVwlRw!99lw&M>IstxG5q52cvtujL=mP9d0IXaeX;(+;je)ZyfVk6< zJ7aLyN7R0Iu)8)xo$W*awGgc)5A~`e&c>o9Z9tZ^C;B2^KY{5e2Xu`7Uvre%0W?T6 z*z6L%=kQDt@IZb*73r7?E56SJf}%LkRlneOkAUtgixiU3qO#D=95~-LLNg^2*u&Yl zauhAa4%~&4sK3qdbZ;R$p#qFaC#(c3 z;EC<<=z6fG553BB?k>nZ+PO2 z_7J(XBX`lb8i+R!20G^*a@j~fl?MX!2L9>-|FELYRc#E=&Uvt!2Q?UivwJ&`RM9$5~*>Fc7 zusRh{ci&OtI-V#MX;p$x=-4b5dRQIljZBQfs>=)VKrb=5x&wA z-z5RDC<1ZT963G%oXk*Q7emnh)2Nkhz*>Ap4ujyoItr}~zNv`*IUYT7HPmq?`db|v zTMBn1;SL>_VTb05Tk8dsDvf;Qp(aH14;1R6DDqYu9$XQ%VMhw-$h{e@(hqsfho$Pk zFMgw!(}4c2QrMC-^ec2B&eRX33nYFZ>upq31~qg#eR>vZ5Mk8d&Z!InC%NXLUo@Soa9SI5f8c!Q1!`~)_W2CNges9BSR7TS%^cT3ejK& zypP3Obo=Ug)%$Rv&}uqrOwXx~0MpS-dfD|Ky$7QT@78gII<5%?!W}vyPR8A~!h8OQ z=`z706z0Yg4&U7S{gx~tpD(sYp+ADy)vtheDd~(A}^!oaRF)kAAECHWW z&|iJWSQ3st>LtcYy&sH549s_o;GgmT-|*o_=v7Z*G{1(vaxG>UEAV?E*hI!7GT<+5 zBrrL_;LI^1iXj2Bkg4i*PqPePTJNkrp8krBZg22d203T=Rk0T}KBIeL6iR_D(t(am zB;PP|5DQ+68v?G&JZ2(YlT3$7z;5LT{>@cKVm`Ws+zd9h5ON6d59Tvt)PriC+6wUr z(~%bjJN>&cwg#a;9jTSnDr+vxeKuhBk^~#n!2Ik05LBD7V%&l;$qzG>(U=9jfHgXy zMQ(t~Z47qj_o8pj#7txfW-T*Nrlt5j1*Nf#9TgtRB#& z!JJ7pfOh%gWgQ9#WxsbH=)no0!IC#`1TU!5>qiMjznziRJ3g$u7@C3F2tD3 zhj&iE?9ir_fc+<7M)nLXzbicBJLWnA5kD~kwKf@Zod>vf6pkp}A!0+$S&Z6$OU=|pRow3W9 zefHL>Y0VKo76k_N_v&es_6bVA6nqZ(I6-Nu?pLp3Wm^$8-HzFEw8SPKh z*Fo)_GF6!_NBFMFvlR+!Tbmk$IVumIAAwV-HEMOlptdCQFhWLa<8VR}N>-rWQ5WdG zOaRk|K7f6Pv-Bz;2#PV~!R8deM?;hOKc*y8k!j1s(+j}GIGk!mC6njLzren{5^+{d z$j2C2OQ4J_kn~qD>fa(>0C_iDOHkdIGgm+h=|(&TU-M*g52BjCkU_v`Ri#VQx2Ve0 zH1Y}NJUa;!b)4=1-rJ#cQTi1a#%hx*&<`h~4(h^U`!IXR)@I?((rEqjv>NoXYj3cknY6htb)Qf7E`VjmVe(-EP0%bXBgGAre2>J4&?VW+=wnW@e zRru!*jB{V$seaH+nF5Z7UCJNIEUY4Hs9k}GE25gQpOK_|RW2wumFzeMTH+ zzOxV|Qw-4}Bd`_=R}X=qV-VU?H_Qh`ts5BjL)92~!D@9Oa+0FX#eIXoUOfwa$1SXx zjw0UaGTP@7l%^6AN+A z2%yZ`ff2GOaD1bwKd2~t(-!=?F7S~qr<&nB{4S$1|1j^t=vN=-uQU1LV84&#)4+Z$ zVc)qHzZE=AZTaJTU2wlFH&ixkfFEc zuDE}Bs{7uFlw1-jIxn=cxmRkz7hz(!_S%Wd;BzvDZM)fCRl!p=}F7#&Rz06EY zDiIU?^G0ObNczW@$WxI&z8#8~9{x2f<=vwo??8qBGNR?s$H!|q|O(p{bo7;l~(1i^KZeIuJT= zS+;cB8`x!w^`>Q#xhil#P5C|?_y*VxjFWClWg&98zv@u_kQ+#`&?~7R&W3ihJ-m2Qc>q&?Ag&$h%?+_ug7!SVt8!P!RASluv{cXRVOH@lMU2K}5~OawSz zD$#GiGB}!QP0a?^c~u}iD=^VaKd|pyWpknMQinr}Kdu6&#Gi6UsggJWXn|wig&rT&>}KYOnVZsY zrPD_q;g6%wI5~+)yPEhCv}D%hn^*Xz03x28@R8) z+k68r(|IsFUBb^=ZYvmlZgRJ|o#1~06E@VRy=-~#H*LVRW88M|4Ne4Fqa1v-6IdhP zAex@%6+BT7BUW`*Wg39PZ7ACn|5|}7=`Z}>${u1;=}Gh#sy+Ci?_j=>hF&usJ!y#c z3!_Fo^@Orisi64dpARUABxNGd870uWn=qrj0c7|RQX``%4s2EJk(<%nC(e(5!M8F* z8mbr@>Uc}z4&!;_J1~%aHF}JS@gp?Ld_XjgggRtfr~(u>WbhgMd8mr41NNjPAJ1I{ z>-e*p)XLW*g>$rKubg zBi{4(_!VGp>dDsy!}vtbk9!Bbmww>%DaO8Lx-gIE8uSHfG1ZL{!Gqm{495yO8>(o$ zq5_lHSRCh@B2@5hDxlrN^1L|_*%z~(WbVjlk^VJxaEg$$C2@Yj>Gpdsb5pPN@l^^PGa7#7?3-@C-p0gYL!QAx`D$Wxu!PeW>PPP}ediGsV_p1ZN$sUfs z9HSgl9pfECp^!^BZUIkM*8bKu(Pp+?u(q^5vox?=HkUUaF*!{ej3VqC3ZAcn@c+?3 zSdC`B(_QI*sQ{`E5Zx@X0JEtM>P>LtFO#FCzo2O`Ld^E<@U`^iLFaD0Fh&?Ij23nZ zcZGDJmT!wM$JbgsCRPTTY6LI~r$@+6gxDu%SF<`T5 z4ecZry2Qs!ai*G3aNcCT36*BAIRpwpy)Dy#P`hfm4t~4ymcvj5TVa`C>47VDa7>;s zkAuc@E_jQ(f^{_1xY5|#7zCcI?a&Gd2itoyFxAI`ww~rAHdukMX$e)|n zE;k{&P1d~(XZqq)Z}PpQw}}Z@z68WKjjJ77A!cH9O4O>T&QW8c4oBUH@<#m`9UeV4 z#ui&WE+}4(cPGe+4U_w)>`g6|zB|K^^>=n@XlQkYI@(rmd*4@ajGUzm(4GL1e~%7e zdq5Q}(cpr5wb5d*rdnUw_S+XasyJ^sTLMMx=l`ew2LDt3hx`xvuk|1AU)4X1!pxExk!d?q zhou;j*C+N&AmhKsM#t2MiHn{dT{$`i^&J4Fx}d1#QEc>`=v6UIVjsuOkLwvK8n$v+dYSi`QozAJ!f=p}K-%a5!p{VfKJJwsxOM9a{k)Cvqzqg@xjQ66K6I$YoUJ(}gJU~DB#641NsN~I2 z%0kI%BX%YO$p6SqRDYa~erMK014`yj@=d`0f6Um)6l)rW7X1g>vBlcm`j6FYn{K;c z`xok@c{Z;ty0F%d+t%6!+bY|#tPi38)&tCnv6hpTUKR?vhf|?XA7NT;stzCC04CHl z!*Rnjj0gAl9#G0V$F=5CzOXOFnre` zGZC+pi&aN??Xdb&$&(%OdnhNr_IB{(xcBC_&C_yDXE)8-mf=b3pBj~XG--C?;)Gf8 zi{n1VxLxt@5(*MSl53}QN!^m> zNpG9^HEUE3nRhzBNkNQfjZg#g>AgxXaIybIeW$yzU%)jQW-M#&10BoFwn_Hxjs{MD zzgK=E{PX?0x|X;OxL UCA!V<#s)Ft#Flbz4GtlpXj&FuejeyX8>lV-|VIAlWmu* z*=XTQp`Mm!EN|>#n8zRDUV!DZAvn7)P~S+3Y(T8SxmIy?j`AAX7Q3Y)(lPMv9rxAt zy+Ys3LtA*7x2d-z*wuJ%rsszz(Ua}5dH?Wk^oDwap+5XZXz1JIqs3if3n>E(Yg3?$ z_(C0p{cp_hpr+f4t^^IVf1v!630?YfhF^xY#tLAMEd}NIbaOwnbImdYN{&8jSz9~I zq&L|P*-qOYV$`|=HODcwTDDZEeoU~Ig`)5QOD9W`d9%5$`G;w}Da3Ri?B*^gN{lr4 z8*cCe3w89CbL}{V{mNcrC$SaTZ00$$1q|hRbR^KoW5G4_o!U>$L?l@jR4yKnXULvp zGETtC;Y6gT=EhDzdBmRm1S<24*c?otcRbSyYPlWxcXNB^Bxg;?l+stHg`}n>|4O=) zcsn6HJ`MV`RbrRK*kbNSpNYO5{Sr0a7-M-vOs&|%vD4!^#M={s6RRZ!Co9Re)YfV9 z(_dvY%X*VNEmz1}?iLHydmH+4#EWth^@BEY>YD$G4$v6fUn&Fmh!n+8)lQ`$$`XN?K);GBa}C&`Rh_$>9*KN$2a?2&>}f4 zY!oJA1fL*G2Znqyl!p&O|Bdtw1M;=3xLC{=r%8{c*78?*gu=pZ6R>~$n3zhk;M492 zhVcvN+ntz$P3Lp@=?2m`&zNr<1V;D9&~prxJ4}wX*fq6Z&8=4wd8S?o4P)tvN z4&fr~|B!TF%*+GGncyL5p`B6*b-41MJYG(g_DVgV78N0$7PpF1F>_@_!S~e{0llhh zpGg#b)$r|8k%zw78}Q~Gl%wU5N}4iXO~t-RG3;G7C!?Sj!-D<4Cy@1ju~s0+D*@qO z4LV%aG4Fb9oCH;gqL`1#=AxDj_>nCn)I0}Uk75KjSy$Ntp*h_hQ5|j2V|9Rn>q}db z?U-$qEgrhYgzd6*qP45#DrSFk%>&J65E(Gbm}uy0c*2(l8~PcxEZZ34*DGozc3OU8 zXQm%kA2)HXx`enxxX60YSiFn9_o3i#oeNfluh_kLh#kVA$^&tsFs$GJV&};8GD)uZ zl$evTN_>}u8SxdOi61Y&-v4~>)A~14HNI`Y?pKzl%7RR&Pk=C}!9;L_3?IO~p3jX2s{Sdr5}JbD`3>B0 zb{qSMUCJ%zuRHrA(chc?FYFo_I^iTNBJ`L(w7qz$v$97J`NV?PMn)t!bk8S;F`?C9!OVX z8Dj)+`M02=L>o&O|1;D!4C6mwMeKyeVsGflti}4MA7&Eg*@5g-%%DqfF;M(^#uq^0 zv7I5*u*ldRn%m{fr_3qlF&5r>#QKk|h~4a%<2dUW=U8uVf!WDKTds|<``gFZlB}7Q zQ24RcT+|$fb;wG?B)%rsn>_$!@pD*xc3`J5r>Si??e2`d^RHlH@(~@#H$;CZkXf-8 z`i$f#54D_KE-_*{iAGD_1KfKM`QA1obi*A&u0$F-|D^PJBz5i4vMJSNs7J# zC9%JlOy&=^J>opaagF$H{AlhmodG7iOtCB0IPKMv*f%BBqH+m|6I=V<`(BCt)AB!xpne0}<0twJG-h6~S?nOr zi`|oUhAmj_elfH%zA`=nH@F=>G}jnxP@$edaY5K6Sd2AuWo`z$k|{-}>2bVN81|I2 zpazvo&4DILB$U%CGM%8dc@yeiK4^VxfyR7o<1Z*RRRv3Q71M8MxrSo?J_)_M8T{8x z&74^@?L-eS3c4^7)JU=oXQ1Y{4xZJ|SQ(lRuMsCQ(a;pSZLLiOc)EnSoylcdVmtvg z>$9ez=HAAU1}E0}p9}+`FL2Pfhi}ggqbEb3?I3l6Y0K_{uBeX=qk0nepq3g7CDO5y z+tW2yNX<@Ylu$W=NE(qC@w?I2xUh2XdW2^EwdV1zKYk8~ z{hHJ}O-Zkq`7+CychuwYZIG+Wy!ci~6`IQLh$?Iq!y`i@j;0>Tsz?I`q z`MtM)w??9NTUhT{o7e(vj5W!eXxwke0gARhZ6hma|0&0n3hE3nDv4l0id3WIEz$?E zo|Ge(1*)(VI$eYsNr;j9T8P~%`>2pRL=O8-vWm36t*igSDWyE z^BjMO?arJ)jCB{BR{y}s&N)PVRKXf&BH5oT1`WKeL^#ozT#G2VgKP{JidlMTLo9SS zuc8kcV;E}eigkE5w9U(=7|bWv8*=%LV6YajhP%K$hfYs0*N>eJ#IHad!TvN$&!Bzu zS;m3YRyGrdJ*hchDR0MjLT~b?u@+|SthqK6Bf6OXHGMX%GCwhAnHyWqU@maZa@!mZ zP3IuY>XX+?PDnpr6`E$OL-$fKpLitz3}eeV2reK3e)MFTsj{lS&CG?k;&Pb8qKf%>P#K zulK01R=DJi@dS9A3$iZ_I!#lwRN@Ym#Wdu18RwbnS$>-pQybGp(>C)->worzPLH#` zbE@5K*<(tC%Ennf7W@8#`C8mM#!Iy(L$#f1Zzyqfk=M#)lvYrUuZp>fiRg*l#4^}R z3nW@mcbHRLRi5RmLCLfN+ZOt^d$~NWA=tqs?gyf`o@3_Q9o(L$$kRAcyiDvM7osk# z^f0O;NfR4zrkYChp?=d%S%uAGPh+=Z6Pv?s<-gipwyB9^_3OBC7#j(G62^)s@ZC?vZrna7!ARKI>kVzt zkA~vLxh4~K-VZ?qdMAA45~8%$LwQA(N(oEqUdSvVFXQN)qikKxmO-4Nco*|dS@-lnwPUI zzo4MA_q*5UT_gMy5`6BD*uOj4O)gcIT(1SIN9B1^9ce67tU9U>Gz)eY-xG(lr|JY%Q2P=` zfdwtkKY_N>c|_mEfuXz-SUG$11E6_14|`nMd|fVvzDb=W=aHYFWnG4Z8L;tMZ?1s{sUxY@*DM_dHYY#}#l7nIK824R_}bip9^f*il} zM+w2dPkt%?$@{7E_gT?ge8;%AKNo!7`N8nv=ck+>TjH)Kze($qu?3NtRMzsW>p9Kb zEr96#p)f!}y(52vXSf$rl6)>(e4o5ug;vrU<&|1hy(r!AHqGCXy)<)W=C|y5`ExzZ zgs#GAuRoL`RPP#JE6Jt|(!$A$%q{+kX_I9fW-~TRSMyWTCvzWbioKQJFn`+rfup50 z-Pn@<$UbNLa6x=k>@n{K>qS}ef%-x|EVY&fNjISKTwm#`TEIkjO&zJYR)CHW4ROLk`0fJLJ?)E9Zf7-N9xrSZC9ARh^)`j>PYT7|C9KIml!F;D0!bW!RE z@l>1%Pu{?i zbIwUXa!x9OieN$vARq#ws2~WaBoj(7pn{?zQ4mp42_pW8N|Gc&@&XGB%d+e)n|DIb z^Z8EST;BixyXSfB_BFFJJ>93zsj5?_&N)@z3bY8!AwR*pzD}&Dm-o;17x*9G+#mk0 zeB-<|J*C}~m}Sjy{RMYVx;}EPv^HRKHwGzY8~$30*#mvls)1}wbM*!%u58{jB$FY)|n{b@@y%FCg@HBCxO#=7CH;4P3;!=Ev zJY`wKx#rFBjSE~2+(~w$dVbUQn`al+&3?~g-WlHNU@<%&v5PVa+UEIk%jK-dtafeO zh3`(}9Nly*V-Bqb1-u7_|Z9MmZrRzHZ-GUW_;!k8Lcu3Gycr_A-7`D zrBEc&7bMgatDAeNySD2-+5dTI8XkjNE&(H)amXns_ri?_}X2 zB6m9#_b%F7*u1E7@vFf~;fZ!r^CR~S-$QZZ;v2;ej+-4Q1?{Z3!|}~aJX&%|sfML0 zBzY2c`UJY`bU)82SE{)cDXtiPBs3v(K2$l&W4DfF0o5iD8e&R&NrR=|AE$ zo4>QpN?OQ@5$)ej1}$YTs!bY|Ag#qdtI4~D%rmC{s#kf1B3jZv1a-gSwepC z{p^1uu$LKku5Y@xf~OgonC8&8Bd$v165H--;JV9dV|Fmc;EVe!$Uv`|Jy}29X3el_ zSxd1ij+ra0OxLrXwXFH2QCc^$7##F=^0oGN2q@A%F`*gOeloG%?~u`VQy?0+6!$SX zU^~SxjJrQj%YT$H;%V0LzVKPdcRhZY8R+9{;T~amSfiaw#<`bWt*vgx>PYiY+rp{2 zU2nc{^NHNTyzg>)U2mAu=G4Ap|NPVK?4p#nuZ&GCzSt)D?CGtizdzgl!l=}8>33xI zCzJMlHnwC!&k3Dqb{$v>W7sW7VuZ2nNFcx0iG z_fz)y%!QeQv+L$w$uCQ;_Ugq?6o-rRgRR03M>gBNjgi)P&rJWexQAHF=$x=Q{zBYr za%k3%e>1^Pp0MN+4HHMit@SGw#~AISXCu!OkDMJW489TiB)lVX z8(x7Q;ssI;-;Bjk%WUO3;MwV0=dZ;a_y*(jd*t(bnmN{JwD#h_gMmr@-o9Giq3$pd z?X6h5{s|wAxA1Lznek&uqev1qs zZ{qi`-E3;687IN7ziEC?{?)hG)gcOoV-;3JkZhHseee7B`x41c_CIXFi{vyp#%^0z zGIl4D`F%XOE`TVBpPqnO(BZ=cMKRnm;P{VCD~LTT@<1o_E$f_wt30Qk$g@%_w($_0^r1 zXJ6`#bXP8 z&x_{$Sa7ZAjo<-17VLsY^Xli+x;Yb^jEi}`!u3VL;;i5!pa2~XwG11PyX^#H5Sbuv zBZps2vghQXJHzb7TI5qLimQ>3AAdaVy#EvLME5bWOr9`Xu^OF5*69z-Bx8rYklmJ2 z;d031@<<0((1ZADCx909As%V7@JJi#YT#M!U4wmI2}-QP#{bxJ*t5|4x9@-GZyS{P z{@%szUam>3iM(fZbWL)#bA7>z*h&1jr`nV3-=ag!hv~r!@e10`6$Nl9$6djD%sb0> z)z`q^7KDo>z7@V3tO7J-t!1dcC7F{)`IfNTz0-XeyS~4xuj^sPm`zs1%)>`|ZL|&R zN>lL;D`oy@UV?6o&9$tr4KrGsFOwB~p1VC6;0@1Yx9QGuU3Y!ue$CT~z36AXS3P9G za0gu{Tj-KFsrSj8x|%vIJC@-+1xV6JoARo&&`Rp@%by@=}@ zyPLbpf|E6e2)>PYEe*9h;9b`$I?di5-da3`2+x^0U2;z4Sb1^zr}FEPQD|k>YuB@{ zo=GinHIzOf`_sHjtnn_-E^))W{=xOGnWc07$p5wIzTj`cxZs7NrbTUw@{1lKvhr*8 zuohsEpRpT*%3T!R5&W*`NMVnn_lwIiQV$Ie4gEmQqV)X4{H6IL3L6EV3s)iY$u#2h ze+Z9@q_Ru9#_aDJL7u)f-qF}FFZxc9JLy?ZzB>ut?eo4y?!7bKMxMjg?_e!Ij2CIp z_}yHBWt9@WW*33*;Eptmd>ZL#mt@y;voY4Zz{=ZUbC7u(>)0P#b=^_VKwreSnSIRz zo%Fr!`xwum@z`xWUHe!8pJgq!E?U)HDOM}1wpr2WiB+&6`h~H@ zJYh|7t#H+J-A`t~Y;y#$`g7dN$Q3uy+sYee{uXqfbBElIG43|;c4pl2l2tO@9p|2c zG_-N`z$)0mI>BA84fsASWl!Ziu?KFv5L3-gR=l-~^_gPhID3Gj%+6M-)fW5YlEo{_KHgq0p}2`Qm}agNqLrCkA&ES1PVp)S~cW*?*d+YeKDOT=Pt-!pR_vObtyAy%stYx;wl&Tn<0EiIKgLmi8*J#h%3% zz9k-(51T&gv^Cnb-gVNI>^eryx0deh?q|p-Th5#1`NR|O496$oX=wGKE5#LJUN+HH z#?_CUfj9A=dlNslrx=-6TaR07@I+0YkzJaK&Kk*H{j3=dO z*RhN3{AfAzl)1qA8w`n%wZmFx{ftfU3_PC(iqc%NS`GA6bbn1b$D8nJoDe0b{o7?r{Ftyifl4l!i^(~Bdv+KEROzY^kna*9ND?bgH2tA zXo5e%ve^Zd{>ImC81Yim@H=_Q{>AQx2VqNmjrvDAhyM&MAmjSh(2-F0@Nj0>k3s!$ zp{v2;!JOc`q2b}Ck)4qT?04}Dd;mY#iIFj6cu%zpqt{towDHF718!k2yavzMlVZr~ z9is2s+avzSvhb4d@o+kLD}TblAH&~ zeQ`hgr(>;v^)+L?pBy7En!hvK{0_S_of2LKuY3g&M49L?7e0v{h=hBP-<~o@;MqFQ zTxI@1yT9c9J2c#A^B(hdvk%z+U$T1ptvS|AV2%DGTC^3<%K}#ME2B03N4;9$#a@p8 zAF=Lxh9}H7p2ze3C9+u;*u#lvr~}UZ9{Xmbe`E$dy$hbEO+oVdl5ZWcd^UlQP#m5V zImwPykXMMk$~JZnGC#d&ud%BWTW~KmzlS~GmBgm)!LwK>{a>FKyn8o+)$t@8nG5$@!4LAAvM<#dZ`PK0)wbbvF#1NcL)1iSj)3!0U{?dv zW-7Ym4?LWQ;!9owM9DAd-HWld`o;WWZ?L9!jcBmP;7B4qZ7r?R)@AtiA@uFaTHj6M z2AqxZHyetKiN)G|MD*i+ z{D*V#yHym>bYdIFB6ClnlLsS(EATWwjsz~`dkrWV23zz|e!rV2flYYWHiTCtu@#0> z+6*K+iQHeSZ1&s1r0j!+>=>HiW%}cF zo<=(|@E{va%!^QfYjNEWWa42g=2W8U2hpatsPQ^Rw*^r0by_0d-nB7L-wo`194F$S zG?ea+tzyy_gm&71-taZ;*uwhg0^=q8%pc;ZpW%Id!bm};3-Ccc#_wMeRrd~8ZlxY2 z&4zHW3i;Ty=GGQTnTR)jb+d&ThZWwBIH4W*LsudS=^e@>6AqCd7w|NHgL)mK|MkLq zxh3BJsYE;cgRk->q62(H_dE>p>d)+FeM@v;eM;HJuO;!)je=F|2e;x9`_?_kyHQzAmw5-ac-@uCCa@=~HFS|IDIjLZ1d|3Gi; zP5Ucg$34O4&sYb3oM+!4Hf#eCV#*|N2Fo)UO_9!>d!Xkxc%=V8JcfaPx*{i=(4O-2 z&RR&tv#bTZ0c|GoX*k?}lvdn@1oU7f^JUsTf!Kgvv{lINQ4mO5LE%TZrYYaQ#V36> zD-@?FxjkI13{QTi-izSkVJOm!XhFq9DL&~eHTi>Bq`#n62L9-ZbP*nJAvD@e?Am51 z9v~8-B5rMUl)iadw50NUhkc<~; zMJu9U#F>56;s|oHf%^PR&3>k4GtkTZ8L3~U_k74KO;IQ-_%s_|lC9LN67A?r%@v=c zc%n*3?;s*1-+&tZ(IvHF5jL%$$!K&!f39temb*dOE1>gs>UW9$7NAxadHN>4Z>Jq0 zVi`L?(~k7Bs`zOsz9$L|YC=u*#OKg4)mW1`ObbJ3h)VECe)tzsd0mzdy;|`aMvo zGWQ#BA&JO{@_ehpA#`>{R951<>`aMC z%*OJ0-a&dqK6?E!qktRvP>r^5?1;VoV2>r6^NNX7w9+=tr&C8iJgP>S*|A=AgHkKO z!zR$n#ks=R*;ABog+7-BxA(*(U_Y@5OVRa9k&1Pcv>Pe>p6n`L6Ya7HS({HLl-)e> zJP{B_soQR@Imjrrg+6i=USB1$N?ApAp}!?RX|cGe%iQrN{bDbgFoix>4(=uJUI8vB zqOKL1;W700SbFm_$khW#*9i3E5ao}-;&_G6{h(}bUj5J>!+7r=ld^`f9@-~Qb%3!1DxGG3Z6=X>WD`w85-tVUNl4fOZsKoy=yqD!&*!#+_QHKADuTy-S@?Flp_aR;i8M|gac#L|vnY#1Di6RJj^k*t?eI#^H;LR`igsDdxr1=; zIDO$%OeYs`#R;UPfLI-6dr+)xE$ChbYFFh|h0o29u#Rw|K6DW3xUvG2;|fuv6ldf3 ztVqF1JiQL@jftJ^$a_2Pt%7V;|M973wEK}*H3UV}fmloLcd`k;<@RfZ=jPB95C zDdtkh^U5G{m8i7+ly{o{%8!!9*&EbA`Esst{tD$O%Y>g=DzZ|Mo{Gk-MoU{D$I4rx zn9z#w*&ma+$}vh+;u*qcF9pp@pbeENK)ex#y>y&pR6S02R)uagd9Td>+LYOxqaOOH zCGTzMCp|bC^0apJmN?2%ju26|G;ONP{R#9DA=mqnQwKp`k(SCC;K*Z;cII%#L;V6= zt(aFyX&&?`13jF`$IO@}RSpS7lNK^gD$-fnE{vQhLRc}ciif=lWv<1_i&7Jz{41(6 z8@j2V2vc8J`pU_nUzA-Wk-Akve@2j2WfU>ErU+jm#lF_yRh!>6GS%ZMVK%6TD&D&! z6syPGAvCiha5Fg6JC&nDnG<~2o7d5Q*Lm`3-mk(zY3ZZryuE0*Gt{5G&)8_1$FGV( zReZZ5a`QQ_Tome^*C?+i&`end;%P-L_Y~54QCayK8pDGI^aN=WjjiqIWtuy6 zMVs}6TOH^_o%k&6)}3*uZ|w7J+#xL}4O>2TuRd3eam@{l6meXUR>f1kvH>Y;fqGdZ zt`MK4v&um&PwXWPDE@?~c>p^3c{$l~6onju4vI(54rs zB>p-tSv@ECFS|H|w!2BG8cCIB=PKtEGpwv4DoJCqqalmvDXEm7P5+SOD3^$GjO6l7 zwUAy`8|u-Xs?e$(woYR-KohLO&d7I5-rMr66Th{Ljmov4j7AVWPyJT(cE$kpn6j}J z)_|_nxl0*!>LW!F#?dm+vmD&4Ksmx7I2jw+j#Gb!uX(ifCdYN8;Uw~qOTEt`Er0R( zI{)|6hKpS5#}bz33AakrdL}bPj&d#iniU)yyGFp$cOkvBcv=B z%{`k!wbtAxeJ%;Q8|q}!;-+B5o}j&FiK5MfGs^xW{gaM;@ErE)n^^vRuv5S18fEn< z!_%{|CVoPjo&^783|Ec9!uXt-(}T*qKg!)2vvB@FelvMphF90% z!VS*vghMs4T@@wYlYV@I5kcq!;#>|rK>FoxWK?>y98^%2kOKJShEwA3O=?^b?NbVy zZXb6i#d>EveNox6t|QSUVmwvUysQ~zP*GI9G*lwGP8nNnSr88I8^Q;T$K_)ZtvpC2 z`J{Xw!V3@zf#h5F3*(|DG9W&8;E+aX1phS#w4yb4aokN$=@Xk(b%5e+`Q94~dH@!G zTl7#Tj?UcG9-B! zBAWUV*NE=IB5=X065K6(32{{1Jd2h(f(Abw(=}H)ukrmaY}-GPjX%-ryJDXXFo)Lp zqx9;tF=^9`E(NJerJNho;u?Kkx?M;EVGe0a@k!_fLU~ZOuOcMEL3q$P<=D}y6l0C@ z16h2#f;PzFUd=CrG!deuvj3E8M`MO^#whQRlO0D04azxFidQAtCrd&0qs4g-Emlq% z!dGLuzC09^Ubm10X**d2)u3o~Bt@CwWRaKPUDlGa3<W$NKjcZO`q%u5FHdFck zQ@09~eAmWtU_HDb~#Ygn4L5?5B{*;Qh9h~j}* z3lk}=4CSjwDnpQ)+DIx@cTrj`7jhpa16 zPWFlBD9Xbm{^*<}Kv}qCA36WyxK8&wnZYC{vKK6_bm*_|PHB<=%}q4=N;Rt|VTxj{iS3)r>|N`qbl;lTT9W%(Wsh`$2MC z7?WB@wp35`7G-#nEiJpy$u zbvUW~Orn5;`l24H`JqD-mF)BjWn_}wEg96A1SCp$Eb2+h;iN0|UlxpXKvig=8Hbyz zMNK_L6xCD2JK4mNB7GNaH8!X}OL}bRq52llGUdk-f{G-_krK5*^AY91y44QJ=Pe0! zEHq`-l73P)Dan$PX-jhg*>{>zOWxEf^LH#w?bol;+?uPX zHz=2z<}SKJS@o2uu82cAIn4i?=>8(kDwmzGha_1-pows|{zMIFBT-L%UwTQsUA;uK zP~BzOX{3<$)arwmHtESar@o=gY5J4&%l;M>l;KN#R46~vv66i8Sv*(HHqAJ+PNtfd z+q~REp78YbHrp0OiqLnk$!x*@+z(h3{pwm1WzT(fxJC{AYP@#He11)wz1C z(!{YAcM6YzRnh)tHR|+{Mk1+ksuS zk#?QneGDtbW3bldV+W38m3j`A*hJQ9u(K5l@)^eM zb?lpsw7(6%8oF8BI5g6}X~u(bvX-68$%w-k;_WJ1K68Dvhq1?0%22oXu~;wKJo*84Ox@_($SC_{21{zjm zYOs0excQLppiwK75-M*EbEg=0hK`5+XS&?0jiHf^kqq;g6%2O?ks00-cCCw!i|h>@ zv~6RynPSwA%rS~w`9?j;Y(sq)S&P^QENebN*6*{CH`%pVz@Foek)=kibvSwjfAijW za2&(($}&PmccUZd_+NnR{9ClKt0#!iAKQ)Xc18`nSFeXFN5-)$GB!Go$nJQ!x8C^H zJ{tLo+UzjW!_P)iqO;hKY8|~E930GwzT;BX?9c=N&28gjtY?L*1JZz zYME!F?-@(XO4eA{NMoFx8tsb*OLr{tN3As1K66B5aqt^^BfF3-Setaa*12=7>Ex1& zGn%;uy1Zm>TN@o_6@%52WOp%USToJXt^2|J514ma*BD{nHR@Vh@N=kOrGb1{!J3R` z(_(}D*>L^vrsz7?OlvBLvwz{;Iy3Y`&=VoAt`%=ojP!~&aixQyv-$$z^&C^U*}?jv0Zu0zqq;VI$N=y@`+rQ2T{ z6|FwjWb-v6k!&eD@oxGu^asX!r`~tIXbT7N7chFZ~F~*xqT-RKSj4^nt#<5fWlkqv;80(1!3|Muoj%J)ujoD{k zbGNw-ALM5C*2rD#WR5hdffURRIC)lHir#KEGTio^WaXOes$w-V%7XXvRu?lFS9V`Fp0U&D}DYQ$~)hSc3@?TPxBoAyS-cLd*JA~||4m>GC&cLOi!c(f_Gc&3=m zzz6W+8_Ejh(~EAcXzI z-1b+a*gTHcb`PUu^djC`bEI{rjZBU#Bu=0rxzs+6CYe*o zy3@*B36B2&BCqd5pZ5n7>UEHU?g67>Cu0zKvyI>JB%j7?3fx3;L0|_*hZ)1c-W_ao zu*c)0@PP4v8DiAyL@RG&KeoUQ+Cv!=8iV>(f;swpw8N!nJZlJ#8ZFFgAkYrQSE+^Sg!iy2kd;6t*-cwBjN@Gr?Ght5FLV}8LH zd?|X!s7l78Pt7B=;8A=RQW(2eu)dbW_|uKORUZ+?W0-4CH_joOzq2>{IyL_(`Yf2* ziRL2a=S}d+sAL`oN$esKW4(~aEsQDo(Dx;9c{k&6(iTsK?qG4PV|QQ}D3;YgTH9hj z&xrd3WAh@gaoaLZr=WjYvlCa1v3(V|vqKoOU%_*59@_0?Y>V;W*d7Es?LAfwuCfRJ zk^K~&I*pLfG1xr6MMp&Q?MLxpxSwdjnf7w<;6Ap$wwu`vq4fv&#N^;jwL4M_zovkj zwShjIV($V2IyW*4^sY;hjy&ye))y{flYImq2H}Geu-aO+@j%Hk`&b{6YpI;8t^26^ z5V3qSiAZUHcUQ8jhkL902eLIyarY#@%689D;zUMy>w614bBQMH?49A;>0gcC_vyg8 zz~_Ov;J_>i6b8=44UG@QznsuIVPX8R_-gTmaX-Y}2uunz4ZQFF*l+sZA!?}!xDTnG z3GORad2>9Prw!hCVeRKVd%)Z&pa}MPElT#sgNbae8Pw|;h4YCT&BKCElYqsl* zYZ5-RxA`)`)!G&#E7DgLbZcj8Ij3>u-ILaE{R>@h@GuP{vWEz^Zg zI_B!>S&C0}KYwMSeIE_11skVK++A@G#=RalIqvg&TLFwrY z_Q49*Yk28ZaD5Hd+&5szz8Srb-RlWpC2qk+{(|rAuo1oZ?Ugq#n5(S5uApl?kvr48 zPx-FnMB8ab=MH`ht;xPH&3w+RX_4c z(VEyD=6$*K;c8%)L41=KD8i+^n4QQ%QX9B~hI?A*B%H`M>YF4`*TK!|ABd%idW@E zxYpg;Wz8fSySJyGH`lwx_o#oPzsTP@up#hR+z}#i8xc|ScKqk@L*o0zkB@&o{_*%K z@eATw#BB@Q9XO0nb|Uc?pZXNHyvNhjv(Mei{R=+-D_l$QB5vo3;>Q;>%ULt6rmoYj zS+2t_7ZJyK?who2jqekGX<|G_1Wx-Wk;&@?cU{*Q^BJQc@@`ShY3uOXMcBN?cjupOSZ%IZ!sU z?1Zw7$_y{HAt|ZEhJ=^nPsZg3KJ;()e(gSD?Ev#4!I*0g4rdhKUsxr7bMA`VQ0_f> z+wv~wEzZl$%_6hx!#5}1d?jaC-h(`^VsU&h7_1q7I?~2|DEb_c6Wv@B-07ZSzH|QD z;%ddOBxBvOgze;xeJ){4!o`HwL95u9*f#M3Ow?m_6!m zNj&|oK)1Nh<7&iz2ogr;_}}7M#jOf7CKhZce)4tvwf)z8?-2)hk9U#B?|Iejavufx zVm#LLFxMxpv&_QQ5*t3o8URMZv&@Fl@kkE3D|kA1CVE z;@OsG>!0hDoSVETx%9cZXYM%N^~~;b?JqobvFyb^E<`V0y}bO|{>Aj@;OY}^9F|kzAou#IfSyT48vSrF{FEhAIVwt;3k0{lo zq*&Y14yy*Gxz~V^-|B#UVa&BT?#k{(CD{|-MEV?;AyKVO3 z>^V1gf9X^B?i;DnX&|HO@=kNgGJ$dBOoeebSG^pgjl>N2iT)@bu?<0)*HckG?^ zz39+Gc!`|_1D$y*cEJd;EIxoH9qm5tev~oo7ox?t``YIu7?0bQi=t=DYY5u$YGl-1vd&hZ_L8HR&9kjSqo%NRw%nz&&ydQX;@^=uC zJLX(hN`u$CHC?HZxyi-r{3lfNSG%e<9&bMijQOUzr8yFB-k+?3pLdGF^zclv+uyZn8~KUz#&8Veu)OPDGbs`*{5|(jR=cc@*}j|2a;9ZZzOgkua^>u$+9{q3hmv1U{v!FS z^C!*^IG>w*G5O8&wJ*+1`6i`y%8-k9Uu<=$*OiIsA7#FD^KkCG{GA1B3MUtRTD&^+ zh27Xn^Zd_0E$*)PpW{DBSf9AN#FV7fNduGCf#Y>giRoZGj8E#Fw6;X=#9HyQ{GWTC zcim$hC)3mwvyqt`y&Bmbx=`G*s6=6Ha3~{rp8R|Br{~Yi|1|%4{=)?u3U(KKS@3Yd ztb#8Kn-qIlnOJDACKKUSJQiCTi`C14BK5@ z$nSDD5fiOkTZvKmn9Yfmo@L%&ec$-&1?qrju-5;M|5a?xK;RgW>Yv4138&&~#y5@Y zfzJHXzmMN1(}yb(Ex&>Y>NmZ`o)J`jt7fum3UQWGvFOr3!+6?! z*KCZJe>SMSx3SVtDY&k%Y<|0(16iNk_#@+s8RDqXmKpx?@>PiZ2;oDK6}veQVwB zdfj!GtDQB$I1u?clo%XR{A%%t;_by>7Qc=4n^E+5(apkRg$oP!7N!>VC8m04u{W3) zvRDJToqQq}>}-%OtB}v-J?n-m(c|^L>&@`?1V?4H?-IFTe*xR#H!vboIF4Y0Ph@1= z>hI=XOhj2@kPL~9^POdGagO++Bkm6FbHtl$an%F)brtdH-Q8|*EYG_v5dY?qo4z7^ zZU=&7J>SE`qkTa{)FR&}zFkCJ?e-5qholD1flJvb5WvFE^k_M!Q-f5qUY>M0w35K5yzY=;o^iJs8 zP*V70a6s|i!rc5ldGm8u=Tyw;ezX3~O62b@&blvienyw;4buOYUg!F_^f}k6rk%O^ zaoY52`_p@0-=97?y?gqQ^o!{uufLFS?Zzirr*7`fy`I-Czkhy%g5`x@7LN}d4*wBZ zZvQXZ$IK(^<{O?~-izL6eapf6d7kLKZvKUV&2jzWLtu>^_GfXfqHm|So%cK%>zaE! zQ6sA?a4OB;SqCq$4@QoVk#bSkjJ(BqMRNGQ@XSz0@aFP@wL&{0SX$jP+;hz1197MboSeptr%UN=vl-29_^SrS1cnpA z*e&15$m*f2#&HBA}J-T!$ zpN@H3_{M;{{F3hjI6uL68xe5Rz2}g)7ku@7<$cB8pS|PI!C!%Iv6?8T)kHEa0ZFid z>mqnWVWO3uV%FV|m5{-B^7bGmWr6)RF#-v87EuUqM@Ey!@eiWP-U93P+sL&@2APYl zM4lsxZ7gWm+xb?K74Mgb73xC-LqcR{_+#Q$o(#7Ow+P#zoY3CTnUI@|uV04Tp~1mF zip?V_bc?TWS))-U|E;H83*1rrK}6|^Y0m_I9jQvNIXx=Fr{;40aa4ka1kgaFH<*gc-PK?y! ztUuJipZ+wMO0%(EO`=yGFkc2U@r;>d-37+lm&5^|vJNp9S!PW`w)J8IYHhmt zx4Dxj(LJoAY$ZxTF(50+O1zWx?L1_@7Ex(!t=6m?l+pU3H40kJ15xC2Yo+xK=mPsG zHv>eAhS+{XT(2+(Sx(ehD)vY-&15J@){ySN8<4nGJK0I9>WF_1a#2yF1PE3b)Ja%gVyiFw0&*8Z%wkEM0Yq2?Y25WA|m}4v>v+oq*?}oAp@G$GBUD<_+BT6(g zk{me|IS|>$v6~g?wV()ng7i!!?)#P4F#&BdHu8LAMC7T+(?qzv!aDL>k&hz_S&99c z__{TbpNLjF7&#F+8#%{u0kpR~G65uzjW>}a$u7fDjR>?7Xs38G#CbrID~g1;sxVT- zdrss=od&7j z!%kZhb{Ge+?>H6veFa`$d!Uf~JLRqPI6doK{LVHJgLB!qNi0qxx~DxTDZ_{^eVtYQ zN#=BOmN}n&rLT!5Tls&q%THj#tur@q{6gH>4@5+*V{HA4HS$yDc~<{Vvb(a|Jjf?~ zPsJw90zKurc>~)tjpGXE&Z6DUaNSXG4fdIPiFMyhNz2)Hm`9epX~f69!dmWVqTB|O zfulEZZw*0Jb+NXeOWaVpafQgNvy5RoScl(4+|nw%=N5odHjnkv&ybA8#7)hkb+6-F z_aag;KK0dD+0{;T4r|6~_|qk`zI~Kq51w;B z(zCv2?`0WL0!w+#XCHSu$HeF)@`sE^@4UwQXx8wDk|kvz@lua5Qa#51r}5yMKt#(# zGQzz~1nDc})0oU!^9*9EKgNe|Au&0hvKK6G!6mV1pdT5be`6I<`RUf-)3=KAtNGCd2+Fd5UIwq93iz-!K^HrDbsDqZ z&=xv&WCgxGI=TnC`XQ)123ij%2H^=L?Qv*63SNxk^)fr_L-8qmjMek|;lW*Sp*8!L zE#N`zm}hHccu|$7$>T(xIEny}Uxo9zfELL+G=o=W%#TdjmE@Bl->h7Y8@%KdUCdeK z>XA1?ke56eGVq;KrW|E4l1H07S+k&)JnGKl(VNWw3%st!o|MXWWyv`QZ7(7p zdbaL$e8J@nBL5h9<%otAVqR0VXhkjBAwOE>4RU^y4~u;Na z$uA{`r;CRf_{%AtMO>2)oqVa~o@gXB<&UZDQrLjrl=#f@59abVq*GA^zRY z|4v-jl+R5$9A9G9M=>Ju6e|~#A4P!3mrj3bjUo%=VSX9ytw@vEapCW zpvV_TUL^7$a(wyab0?nYn><@eQhWKJ$Qw=B=;Wg;uNTY;Bu_pxdcJ&SREr382=WB^ z$*7i&9Lt|f9%Axwk!OqJd8K#*`3%Y@OTIyp6V*e{m7j~_x$pSy$m=G8Ea<;{b=-K< z_!;@+_g|K$mcr{(eouOmBG}~jXu!+VXiwH$`WUYg9dMjD%@jO45{$dq#Y&7mVvI)P zEP&nxoK3_ZSaA?PJph* z@CB*`j=|ShtS_3IXv7^@ji9Cc_mhy{G}<_f9ouEdsYZqrYVj5p`+aELll&4#O&=iccO?3M51M-; zd+AMCF&m8!{11#!^I4y6%Wgv+2!V=leSuw!eayT!QoA`|t4=ZQFh4e0ne~x@y6D8( z<{|uPUNR<|vyE-kdIY<-Q}7ob#a_}bw5dfet!7L&OPEpm)hp~}buqpmo7-f3nL5+Y zO#Tn1g>BHn*ND2S%nt5p;#Ykj*1pXi^Q&-Dex4ifH|mB5u)*l3osjXwL%mNsdO@WT zjG-5!bBIr@!#;FA8CJXFF*6>E@({13L?%a~E7<>RZOmunQqILp#;I+zxB%bn4IqD? zx1S*M=hN)$4`Ynl0NwCHK*JcuX1IEo(R3kwK0=L5JV*+R-k?Ht#onJv>A&F}Gb46w z=a`KbWW2a!%#0k1)Hg5S7ef||(7eb4MoW8-=5W!!%zupM>_hCBQg{u*drq^6w&}*HLqtaX*~-oH*Kf(bINwTJeZc0~CRDvUU!p zp7R)Kzrk|r6}>@h^oq289H_|e=}x9f5gf?jo;QE@Vy89cOA3B*9|Y6X>R(hhs@?!MfaKwt$WOIM5GP_ zXQ;CIcC^?o$2a+6eUE+hq7<~L%f&c z8R)y4p3@wj_K()Z8ZTx333_xH-cRDYamJpHN7IkSU)XaC@PZ1`(;g&3AO(qgF?tMC zt!0e5b1A(o9w9H9+l?o{`bf4vpjV#2S7a(a3@xIW_BgE7A=nw2AS=8|hM0cTWMgyy z(X<~JGtGDKpTL98zMD+jKd=j0CHjV)84Xycq3c+CCtgqATi+Tb$hz?z8gw37?kL_y zE6f3`^PRQt!CL9Zb(if>w3_*;ag06uuH=hYWjsnxpMkE}jF;X3W1-m(54B|(x! z-v0#)@F!+G-9XDNM-=-g^ifN+PBm+Yxj4ET6ao_j4^Q+0^Pg$Z`3>fcyQ$rAy#D<7 zf8h5Too~nE>2t)02VdfElUbtaHrg^m+VuI^(L#F(I_-9IgwcyxRCzoG|0YKL4E^K~ zJ$e`T#|HQmzcTvlLz_GcN{1D-?Y4|F8A#wUJIfx)-uPj9R^8}2W-RZrinGxE)!qYg zNk!9V)<)m0LFQIOT}bmVqG3{*xgDl2-H(25P2Oai8C%$%%E)tr%yX;-p}I@y zRWJ)_-iy`!5Pmpck(X})WsgHAmN0_&ZY;;+CDFVCAF;JywTJBfj7=@bAlC`WZ_7+; zDK^XPXvoTpDr4c^CG!7Oqqnsn_Gd2Z$R*L18yR(q@WW}$OyFMh?XKwO==V)v)08zI zGEMaCqo80+viopXYf#niWwhS{KYqbpkZ0&TS{SqwXzyq|VbZ~?xXP%|ml38VD{E)uHcy2n9Z8+)QCs(}5=kgnz||kwUK8yYNMO9!qO2xDFNZ2(5;MmnRRv zmqb!+f%?~&V?M{z2f~BW*d#6Sycvt9Z9jNw;Ac9Ov9v25Gk<|zG0vXGipHeq2(;LE zkeDyq6Pc5bw728rJRQnzWKLI>C+35b^9!<4n!fr0YaB1p^EVq{Z-dQZn3J)#e`MyS z=mtNQE*_?gpU=|H=g8aInLOInv1?Yw)(3uJv_H(Oas-}l=kWI(kF|6RZSx8;bAYk+ zBSxV1oLPuwssstu>10?ZY3a1~fT>WujQ|X!IUhIgN4gd2C?=AEm|2(BirF zE9{P6x&D-4ncZS&PQ%a^US#@nV-mi|(riC6b9xufKWD#(XIFimcowa8FVZ!XH4U4% z|10$I`)U0NRyTe`->rlLPtlSa{Q4VcBabl3R)GWah)!#VR(qBEy5T+5mb%oy>+fFL zMkP7B5^n#^J)@y~Cq~4ZoO^&Q1|QfL?PnPa(U~Z?x6wtJL?oqA)^W7t zZTO*efu@RUEXQ2%Mq+e>XMTHA#fv!V2~XSlY1^f;?L?ZNsvZx80FPjTmy%vh4q zoo(qe&odT0i7oI1valYnoyS=%8v+)|LFP6^)T24SzK1+4qX+Gwr9sx)9)bR2p!EIx z|DBvXUr^Idp!n>e48?mV(Z`OE!{aS%I0Jm21hb@>!`O8NYb^(>_DQV9ndrtRkayDz zqtzE-0cKLx7w~mAmiS4Y@*G;N9DEmsM|G^!lZ@m`=r>=oj{gKYLfL+wK)xH|honsH zn`4oP)#zulko(^_#=yrzod1#aihE+RF%Iq22fv9_Xw?Nj<8F2%`wn{A>ts5t3@tuE zM&71Xw}EH#9rLpSH_*+c|0Dgn|tBNL-d9Y$W}#UYdX*R)>w_E`u6D^U7hHE=C?Q(Q}#T%1EFS#7a;uo)Z(uW&0jft%npUy8IZF3ZR4UpvNkY`(sc-v9^i^OJg4O zV~j?R^TgTo{JvaSjFxyCNxT46Z|8dlW=rRI!i&gz8M2Z7%Gz@YK0gnqC(_3zFlT%e zWUZ!HCS4gRmSW*6*Rrz7c4M`m67qWtiPM}_agTlJQ4iBkYBReIBMpkBR+jL=JYUkZ z3!7sveQE%+uz2WcqP_PcOXsQ41$6G=m{>r&EvH03IpzDY9nwpfX$h_LfL<=Z0F@`Br51VKikcI18=f?kdxS%CiIs-NNLgcg-&JNlJCUsoNZ>wNaEcx?j5~)Sy zMoT*@zVy|3SRgZ~TQmCd@6h2J zq;4-W?b1B+UY>X#Pi}$iC~8eHQdPL}LE8TX67nH>ZwTH?7XOb8v7?>=|pJ)J6DGimO}F>s|uu zYY=_!N#5_GZ&sjfPg3gJ&|xlIX-PXXkvAdF2#H5149eZDSlG(&`vNxp8g#`1O5eg2 zyP)Szp0N#H?4Wl@PJ`HfRjE%;==&5hISwt?0qvSc-&5?i5Ltw(A?^!5Apwa!&wNx7 z?*-Ty^^m#j{b(U&U!o-rs*ALvR>%sdO)le#uyK0Rm-<1UM_8Hf!J4DupB4G#q0L&O z3&E9Cq*$$A#VXAoeEJcNtw0}r$@@C2nXR-T8I7n_KNsy%+-g1gejRFG0`63$MB$fc zeK3bB52B3@z^QN1nSWB=4vs@mLI@Y9prq*fJ2gKHT{5s-u2Wkf`;@@e5E_Iqe-2WU zt@QVkaONV{30vg|+!HE>kP^;u_9AV+6k9b`Ha9P@6t(SUJ792*GF zUVv+pnUT#z&d2j<8YB6eyie!H6+dL_S=gVqSgkK2B zEy;P|@!W*s*-%Ggli~=gB5&Pe)NjcZ1}Fx{==00bed~~=zc~)ko_+LyubC|lLvuaC zPRDZ22(h9La?%m`)ty&)s&*T^w4@Qep))$`PWniV*uLBuO4?0Xm$<7wnyd$XNs;v> zsgp1ta_Aue?ySo>AvSd4e^aDWk*q#Okc#N(hR~-66lzBaHL(0Gp6O8b0#r_er^1=J z3}4Ul{|uZFAI`?)K^QBF=`0D&h4i9$SmA0Yno@C{c`@!>p`0VM?N4f}K6eTFX^q{9 z;}pFV3tE=CG^H+WXv1Al{a!|m&PXiS(p;-iO7W{rpi2j?Y6^{&dE5Z|BN=wkGV7CHg5}{i_2M5Y~WnqB}-+p_OSQ z*Sf#rE`>RC8?_V$Oda$<7woAq*fnp&5+O}&gUZ@b^wLH}=a=VDztxI-gr2RK&C;=cSe{Mv1l78Fq|x7O%yBAI|gbJ%cQE4l&7twcL2K!NIfQe0_8zSo1Ut)Z@VID~NK zteh+6Jdqld<@yRxxC}H?T@R<{9gQp{WYX;qg_oSHmGH^)v zM75BBmNA}6_8W6ZW7VT3b!eOLZ+apNUASM!Q*~*%_ABehDA0-Cdna<(mH(2+wp`Pk zp3*edkJ@urdnBs{oCz?V-+=DB(VeU5-Rt4q0s6{6^!PLMn19fn2jH&o;Dlu(6d#s2 z=`Gqz@X+QUTyfKS?R6=#T02$JCt4BL-q=w}IZLm(!67UI?T9I!S!e-OXsHl)%JE)< zqcY!xHKUn>v(Kl6~0O7eIGskvf^B~?OqQcV=6EN!gP$|GA9VzQ;^Va2TryG*-=is{xKlJ=>D zRwg7KAs?Ni)zUT>_@7FPH5y#wQ+kXpiY!+YvYu9wCp+i{(jSsUwLv>Oar|C^mv&|q z%P!f{{;c+VBz4+l((b22cSY+bKrhKmRk&J(ckQYwhieM>?Sz{~Mw$w1?Xk$?ArUbT{wPEG>|-+xWc>&uAEXY2Q#9Mc5^hUF~nGw+ow0 zSY$#alN}+-s=qpzOX@wsni49RdaZW26x;6XYN_?AvF@xCI~2XGh;Qk9Ar%Pmq7)@+ zA5}Z4k`z5f6q7cP7Lb+|%34j%ipoL_iNZ4nQ%m&JOMO!aB+~i%O($76$9aIEIHbrgmLuJ~rkzTvY5lT^9y*RAVLSs%`to@>q@VJDP zCwv+wwq5kA#u;JQl;yKf7$g_kWt4RwyGpx%;;1v43vE-+6Gn;dryBE%Y zkn>bSAzwK!2aiNM%tB6*&FWBI_ejqQ#X@JbC#x1ppK9bw;8#W3myBss2eU@woc3}Z z1g(VFv$VUdwhJ#olyy7|)L(=Yq+MHScV~xIlC6F$92e0_bk|<0klREh9n#&UW0Y5W zg!mye3ej7r1==wdN}#i=tM@DDfed<|kj&I8FUB;|DaM#%XtrcVuoHX|&g3ENxxdhJ z2l;jkeI;u_cMGLX_0?Xqw4ab}vUrvq_>X)TRfDYc=_;OpF$4q2yPRq(dl)(iyUNrH9qm)hhX$IDQk-e>#MW zA?m7Lk|(uUNEABc{UF~C$&&hklUJf`mTc*;>fCV zh4?9t3}Nhvv*Nr%U2$2|7xId@r(JxN=TJ`+)W{^s%trn+7Gxtk^4L&4W!YpSqc>yc z(qnx=o+q+I91jqUWI~Bko75-71Myc{OQi~bRlQ5?(JWZ}P=6PVHIj*@;z@OQQJ4Q3 z@r8LP1lU@<%eHL9C+C-HXqu{UO1({(mO>s8s*JE-L_J5U^)y*Y;*f(XSGkh4?3J)@5r`j zpb|wNNrpJ=ygT?vx>x*A3xp6NX;Zz0E-NVzUnTpR_ld&#Ea{dkWl?elb#&_P;82O; zLfg~qRIQP%p;1_rkv-{1r22^XA&(BHX9`h9UOFmU+D+Qlku%jxSWvP-G{(s$Q134b z-=s^WJ4*0heMTdOu&x~4Em{4y1y1?$YtmTe$cM%t^={cjda8rnBPo(5ko^7*wQ!}Q>9xRK1d%pau=n(YQH>qM72=1u*M6m7zn9KGiKrTI67AHFVrUK2GK#f$w6duP=hOQM#!M@os#s+XH8mI zeuT1l#7kKhw>vj@7(zmk z(m7e)&b87k4sx8M?`1zZ`oU?hqh}pm$3tkT^Q-tS%^`n6=Njj~&S|W2e$_W!`R^I$ zlXJJUmg=tglioGDh}JqMgeRSqJm@O@cMj+Czvb$?g8-%9o%{5w?$W&~QUCRKt3LXC zt7XnPUGH3@-){Xmt<#k%+bQwZZ_YXAZr!W9|81vp)vagTdYZ};{nRUNy*p?0E_>N| zzxCg-pmoQ;=Wku-l%NWIIrlge(r4Z6T>tM~4$VYU=cVtu?$+VlrE|A_(HZCSt$TIttzZAW z^41ge%v*oAK0EbrzTNu#ZyC-LoO_&KZ{7d@|KBO$-?OTT{{DUc_mgwhxk6`eebRIF z`PTDe1@P_v{hw3n|9#*8U5fJz=c%`@aelw`%dI-y`t{%c|G#(rd;Y&q|54yS3j9Zb z|0wVu1^%PJe-!wS0{>CqKMMRuf&VD*9|iuSz<(6@j{^Tu;6DodM}hw@6!?Dt$?=Mq literal 0 HcmV?d00001 diff --git a/data/netplay_p2_disconnected.wav b/data/netplay_p2_disconnected.wav new file mode 100644 index 0000000000000000000000000000000000000000..0a9690e23abf8310076a4a19b17fa0e8bce5a55c GIT binary patch literal 103244 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 Ie@cP>051SLh5!Hn literal 0 HcmV?d00001 diff --git a/data/netplay_p3_disconnected.wav b/data/netplay_p3_disconnected.wav new file mode 100644 index 0000000000000000000000000000000000000000..6ef2b3bc7dcfd76dc05c76fb618a0c48dc4d108c GIT binary patch literal 101804 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 z zr}6!S$AW;Httu9Qm82h77Y6h1F!fW8D`kt>0%)X;Q`mT9C&$_OYzMY0`zPMH9@_vp zg)fVl3}D9lF_oCg*k;;;XE$=V8}b++MW!of<<-)2kHMYjOm) zB)g)T5{J3Gd58=`sUBd}7=pOq8FQOC%q&A3xsQ1Ywwjx4FHYni^CN^O=)a{4p{QGy z6JEfsn!qLUgnP#oaTTCXdmsa+`2+kMz6qbt-G*N6$DCC>ZdhSPVcM!6cb_BqbVNRD z5H}Bnr9^E6^%);9GYsKs^Sk+(;M?fQXK@d3x98ZAh^-GWzL@;7F^j<9&>naCkr{}s z#rtR@y_pK6LV+pS2)y8WvL)_sC+6p-1J&{d6P$^dHT-W-NUyl1zrdIf54}i4Wh(^} z$c->_*%SVwixlly1rE;5;T;1GhqImx_iLBdwa{7U zxCl;_){dHvy5M}bJ1RT-IXgRB;NJ_K7oEw@QLZ(vaF?I^H+K_vbN5X55p1m zrC4h2q5CqQmpr+1+M;jNirbGFhu>g1CquuQ!S6kVw2Z{Y zMvnOgYu$lairU){W)5cVE~7uO0l!zk)Maw;qrIK&?_@Jf-exP8!BsF2bEGDv z3XqsjFrzyKlZ^n8k%C$M%a{yK$L#n8YzRzKR{#y(QOftumrlrCfXMQpi|IJJfC7I$P^8V}ny6aL zQm(5#NGG)#cjp3HdKs)ngnh3d+TV=HnEz*4l138SCU_vzd8Nif<}p<=Q7wHiH| zF>ro-dA=3bkvR!AxZg0J`iS%cYY_u$yche27Xz;~ouGg)xDR|`7SJWVfEgR1%#lA! zlVl6fDGjKhV6OO`j8oeJm39`q8rA4Ws8#tu=K3=C=@rx|B12gXrj!BFAJRL?41~oq zY+Aev4_<>@sVH3SZP zCT5AFF@0VGIMP<&v$!n3QWgRUToaScQHXBxv8(ku{SbRPt1B}-Va^MVip~x0`_dcr z8~KLHrnJ;(Vt`UblHD_1GhH$61n*_VmnvpF+!IvLsxwcCeDDO6_e8rZVK41$X|voC zNJgLmAxXC|(OX|BlJ0wtdp@~8x>tD|-Zjb&vL^F_&4+EBNc~dVVRw9O&qU8r?*w4c zlZhDYjjcg9p<}5Zzyl9dn}Vfapj1P;hfia~$uFaqAR7t9cVmE{+DNV?g4BiB;2b2` z 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 d, - pub gui_ctx: egui::Context, } pub struct PlayerData { @@ -45,11 +42,13 @@ struct InputEvent { plugin: u8, } -fn send_error(netplay: &mut Netplay, error: String) { - netplay.error_notifier.try_send(error).unwrap(); - - netplay.gui_ctx.request_repaint(); // this is so the window pops up right away -} +pub const NETPLAY_ERROR_DESYNC: u32 = 0; +pub const NETPLAY_ERROR_LOST_CONNECTION: u32 = 1; +pub const NETPLAY_ERROR_PLAYER_DISCONNECTED: u32 = 2; +pub const NETPLAY_ERROR_PLAYER_1_DISCONNECTED: u32 = 3; +pub const NETPLAY_ERROR_PLAYER_2_DISCONNECTED: u32 = 4; +pub const NETPLAY_ERROR_PLAYER_3_DISCONNECTED: u32 = 5; +pub const NETPLAY_ERROR_PLAYER_4_DISCONNECTED: u32 = 6; pub fn send_save(netplay: &mut Netplay, save_type: &str, save_data: &[u8], size: usize) { let mut request: Vec = [TCP_SEND_SAVE].to_vec(); @@ -109,7 +108,7 @@ pub fn get_input(device: &mut device::Device, channel: usize) -> (u32, bool) { let timeout = std::time::Instant::now() + std::time::Duration::from_secs(10); let mut request_timer = std::time::Instant::now() - std::time::Duration::from_millis(5); while input.is_none() { - process_incoming(netplay); // we execute process_incoming before request_input so that we send an accurate buffer count + process_incoming(netplay, &mut device.ui); // we execute process_incoming before request_input so that we send an accurate buffer count if std::time::Instant::now() > request_timer { // sends a request packet every 5ms request_input(netplay, channel); @@ -120,10 +119,7 @@ pub fn get_input(device: &mut device::Device, channel: usize) -> (u32, bool) { .remove(&netplay.player_data[channel].count); if std::time::Instant::now() > timeout { - send_error( - netplay, - "Timed out waiting for input. Lost connection to server".to_string(), - ); + ui::audio::play_netplay_audio(&mut device.ui, NETPLAY_ERROR_LOST_CONNECTION); input = Some(InputEvent { input: 0, plugin: 0, @@ -154,7 +150,7 @@ fn request_input(netplay: &Netplay, channel: usize) { netplay.udp_socket.send(&request).unwrap(); } -fn process_incoming(netplay: &mut Netplay) { +fn process_incoming(netplay: &mut Netplay, ui: &mut ui::Ui) { let mut buf: [u8; 1024] = [0; 1024]; while let Ok(_incoming) = netplay.udp_socket.recv(&mut buf) { match buf[0] { @@ -168,15 +164,15 @@ fn process_incoming(netplay: &mut Netplay) { } if current_status != netplay.status { if ((current_status & 0x1) ^ (netplay.status & 0x1)) != 0 { - send_error( - netplay, - format!("Players have desynced at VI {}", netplay.vi_counter), - ); + ui::audio::play_netplay_audio(ui, NETPLAY_ERROR_DESYNC); } for dis in 1..5 { if ((current_status & (0x1 << dis)) ^ (netplay.status & (0x1 << dis))) != 0 { - send_error(netplay, format!("Player {} has disconnected", dis)); + ui::audio::play_netplay_audio( + ui, + NETPLAY_ERROR_PLAYER_DISCONNECTED + dis, + ); } } netplay.status = current_status; @@ -218,8 +214,6 @@ pub fn init( mut peer_addr: std::net::SocketAddr, session: ui::gui::gui_netplay::NetplayRoom, player_number: u8, - error_notifier: tokio::sync::mpsc::Sender, - gui_ctx: egui::Context, ) -> Netplay { peer_addr.set_port(session.port.unwrap() as u16); let udp_socket; @@ -283,8 +277,6 @@ pub fn init( status: 0, buffer_target, fast_forward: false, - error_notifier, - gui_ctx, player_data: [ PlayerData { lag: 0, diff --git a/src/ui.rs b/src/ui.rs index 95d0d0d..74c52f5 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -22,10 +22,10 @@ pub struct Ui { pub game_hash: String, pub paths: storage::Paths, pub saves: storage::Saves, - pub pak_audio: audio::PakAudio, + pub event_audio: audio::EventAudio, pub window: *mut sdl3_sys::video::SDL_Window, pub audio_stream: *mut sdl3_sys::audio::SDL_AudioStream, - pub pak_audio_stream: *mut sdl3_sys::audio::SDL_AudioStream, + pub event_audio_stream: *mut sdl3_sys::audio::SDL_AudioStream, pub audio_device: u32, pub num_joysticks: i32, pub fullscreen: bool, @@ -129,14 +129,23 @@ impl Ui { sdcard: (Vec::new(), false), romsave: (std::collections::HashMap::new(), false), }, - pak_audio: audio::PakAudio { + event_audio: audio::EventAudio { mempak: include_bytes!("../data/mempak.wav").to_vec(), rumblepak: include_bytes!("../data/rumblepak.wav").to_vec(), transferpak: include_bytes!("../data/transferpak.wav").to_vec(), + netplay_desync: include_bytes!("../data/netplay_desync.wav").to_vec(), + netplay_lost_connection: include_bytes!("../data/netplay_lost_connection.wav") + .to_vec(), + netplay_disconnected: [ + include_bytes!("../data/netplay_p1_disconnected.wav").to_vec(), + include_bytes!("../data/netplay_p2_disconnected.wav").to_vec(), + include_bytes!("../data/netplay_p3_disconnected.wav").to_vec(), + include_bytes!("../data/netplay_p4_disconnected.wav").to_vec(), + ], }, window: std::ptr::null_mut(), audio_stream: std::ptr::null_mut(), - pak_audio_stream: std::ptr::null_mut(), + event_audio_stream: std::ptr::null_mut(), audio_device: 0, fullscreen: false, num_joysticks, diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 41d966f..2b8ecd9 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -1,10 +1,14 @@ use crate::device; +use crate::netplay; use crate::ui; -pub struct PakAudio { +pub struct EventAudio { pub mempak: Vec, pub rumblepak: Vec, pub transferpak: Vec, + pub netplay_desync: Vec, + pub netplay_lost_connection: Vec, + pub netplay_disconnected: [Vec; 4], } pub fn init(ui: &mut ui::Ui, frequency: u64) { @@ -46,8 +50,9 @@ pub fn init(ui: &mut ui::Ui, frequency: u64) { channels: 1, }; - ui.pak_audio_stream = unsafe { sdl3_sys::audio::SDL_CreateAudioStream(&wav_audio_spec, &dst) }; - if !unsafe { sdl3_sys::audio::SDL_BindAudioStream(ui.audio_device, ui.pak_audio_stream) } { + ui.event_audio_stream = + unsafe { sdl3_sys::audio::SDL_CreateAudioStream(&wav_audio_spec, &dst) }; + if !unsafe { sdl3_sys::audio::SDL_BindAudioStream(ui.audio_device, ui.event_audio_stream) } { panic!("Could not bind audio stream"); } } @@ -58,33 +63,53 @@ pub fn close(ui: &mut ui::Ui) { sdl3_sys::audio::SDL_DestroyAudioStream(ui.audio_stream); ui.audio_stream = std::ptr::null_mut(); } - if !ui.pak_audio_stream.is_null() { - sdl3_sys::audio::SDL_DestroyAudioStream(ui.pak_audio_stream); - ui.pak_audio_stream = std::ptr::null_mut(); + if !ui.event_audio_stream.is_null() { + sdl3_sys::audio::SDL_DestroyAudioStream(ui.event_audio_stream); + ui.event_audio_stream = std::ptr::null_mut(); } sdl3_sys::audio::SDL_CloseAudioDevice(ui.audio_device); ui.audio_device = 0; } } +pub fn play_netplay_audio(ui: &mut ui::Ui, error: u32) { + if ui.event_audio_stream.is_null() { + return; + } + let sound = match error { + netplay::NETPLAY_ERROR_DESYNC => &ui.event_audio.netplay_desync, + netplay::NETPLAY_ERROR_LOST_CONNECTION => &ui.event_audio.netplay_lost_connection, + netplay::NETPLAY_ERROR_PLAYER_1_DISCONNECTED => &ui.event_audio.netplay_disconnected[0], + netplay::NETPLAY_ERROR_PLAYER_2_DISCONNECTED => &ui.event_audio.netplay_disconnected[1], + netplay::NETPLAY_ERROR_PLAYER_3_DISCONNECTED => &ui.event_audio.netplay_disconnected[2], + netplay::NETPLAY_ERROR_PLAYER_4_DISCONNECTED => &ui.event_audio.netplay_disconnected[3], + _ => panic!("Invalid netplay error"), + }; + if !unsafe { + sdl3_sys::audio::SDL_PutAudioStreamData( + ui.event_audio_stream, + sound.as_ptr() as *const std::ffi::c_void, + sound.len() as i32, + ) + } { + panic!("Could not play audio"); + } +} + pub fn play_pak_switch(ui: &mut ui::Ui, pak: device::controller::PakType) { - if ui.pak_audio_stream.is_null() { + if ui.event_audio_stream.is_null() { return; } - let sound; - if pak == device::controller::PakType::RumblePak { - sound = &ui.pak_audio.rumblepak; - } else if pak == device::controller::PakType::MemPak { - sound = &ui.pak_audio.mempak; - } else if pak == device::controller::PakType::TransferPak { - sound = &ui.pak_audio.transferpak; - } else { - return; - } + let sound = match pak { + device::controller::PakType::RumblePak => &ui.event_audio.rumblepak, + device::controller::PakType::MemPak => &ui.event_audio.mempak, + device::controller::PakType::TransferPak => &ui.event_audio.transferpak, + _ => panic!("Invalid pak type"), + }; if !unsafe { sdl3_sys::audio::SDL_PutAudioStreamData( - ui.pak_audio_stream, + ui.event_audio_stream, sound.as_ptr() as *const std::ffi::c_void, sound.len() as i32, ) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index daf6571..4f0af7e 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -20,7 +20,6 @@ pub struct GopherEguiApp { dinput: bool, show_vru_dialog: bool, vru_window_receiver: Option>>, - netplay_error_receiver: Option>, vru_word_notifier: Option>, vru_word_list: Vec, pub netplay: gui_netplay::GuiNetplay, @@ -111,7 +110,6 @@ impl GopherEguiApp { show_vru_dialog: false, dinput: false, controller_paths, - netplay_error_receiver: None, vru_window_receiver: None, vru_word_notifier: None, vru_word_list: Vec::new(), @@ -267,11 +265,6 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { player_number = Some(app.netplay.player_number); } - let (netplay_error_notifier, netplay_error_receiver): ( - tokio::sync::mpsc::Sender, - tokio::sync::mpsc::Receiver, - ) = tokio::sync::mpsc::channel(1); - let (vru_window_notifier, vru_window_receiver): ( tokio::sync::mpsc::Sender>, tokio::sync::mpsc::Receiver>, @@ -282,9 +275,6 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { tokio::sync::mpsc::Receiver, ) = tokio::sync::mpsc::channel(1); - if netplay { - app.netplay_error_receiver = Some(netplay_error_receiver); - } if emulate_vru && !netplay { app.vru_window_receiver = Some(vru_window_receiver); app.vru_word_notifier = Some(vru_word_notifier); @@ -336,8 +326,6 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { peer_addr.unwrap(), session.unwrap(), player_number.unwrap(), - netplay_error_notifier, - gui_ctx, )); device.ui.fullscreen = fullscreen; device::run_game(rom_contents, &mut device); @@ -381,13 +369,6 @@ impl eframe::App for GopherEguiApp { gui_netplay::netplay_wait(self, ctx); } - if self.netplay_error_receiver.is_some() { - let result = self.netplay_error_receiver.as_mut().unwrap().try_recv(); - if result.is_ok() { - self.netplay.error = result.unwrap(); - } - } - if !self.netplay.error.is_empty() { gui_netplay::netplay_error(self, ctx, self.netplay.error.clone()); } From aac68a4a1b5c3e038e7b2f0076a863b93a2ac8c4 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 16 Feb 2025 11:35:28 +0100 Subject: [PATCH 0327/1117] rename artifacts (#257) --- .github/workflows/build.yml | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6e08476..8a4e540 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,8 +18,10 @@ jobs: include: - os: ubuntu-24.04 target: x86_64-unknown-linux-gnu + arch: linux-x86_64 - os: ubuntu-24.04-arm target: aarch64-unknown-linux-gnu + arch: linux-aarch64 steps: - uses: actions/checkout@v4 with: @@ -43,18 +45,22 @@ jobs: - name: Build run: | cargo build --release -v --target=${{ matrix.target }} + mkdir output + cp target/${{ matrix.target }}/release/gopher64 output/gopher64-${{ matrix.arch }} - name: Upload file uses: actions/upload-artifact@v4 with: - name: gopher64-${{ matrix.target }} - path: target/${{ matrix.target }}/release/gopher64 + name: gopher64-${{ matrix.arch }} + path: output/gopher64-${{ matrix.arch }} build-windows: runs-on: windows-2025 strategy: fail-fast: false matrix: - target: [x86_64-pc-windows-msvc] + include: + - target: x86_64-pc-windows-msvc + arch: windows-x86_64 steps: - uses: actions/checkout@v4 with: @@ -66,18 +72,24 @@ jobs: - name: Build run: | cargo build --release -v --target=${{ matrix.target }} + mkdir output + cp target/${{ matrix.target }}/release/gopher64.exe output/gopher64-${{ matrix.arch }}.exe - name: Upload file uses: actions/upload-artifact@v4 with: - name: gopher64-${{ matrix.target }} - path: target/${{ matrix.target }}/release/gopher64.exe + name: gopher64-${{ matrix.arch }} + path: output/gopher64-${{ matrix.arch }}.exe build-macos: runs-on: macos-14 strategy: fail-fast: false matrix: - target: [x86_64-apple-darwin, aarch64-apple-darwin] + include: + - target: x86_64-apple-darwin + arch: mac-x86_64 + - target: aarch64-apple-darwin + arch: mac-aarch64 steps: - uses: actions/checkout@v4 with: @@ -89,8 +101,10 @@ jobs: - name: Build run: | cargo build --release -v --target=${{ matrix.target }} + mkdir output + cp target/${{ matrix.target }}/release/gopher64 output/gopher64-${{ matrix.arch }} - name: Upload file uses: actions/upload-artifact@v4 with: - name: gopher64-${{ matrix.target }} - path: target/${{ matrix.target }}/release/gopher64 + name: gopher64-${{ matrix.arch }} + path: output/gopher64-${{ matrix.arch }} From 671a9617896674ec32166c007b88bffe78aa50c9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 17 Feb 2025 09:19:25 +0100 Subject: [PATCH 0328/1117] Use struct instead of tuple (#258) * Use struct instead of tuple * more --- src/device/cart.rs | 10 +- src/device/cart/rom.rs | 16 +- src/device/cart/sc64.rs | 16 +- src/device/cart/sram.rs | 37 +-- src/device/controller.rs | 4 +- src/device/controller/mempak.rs | 26 +- src/netplay.rs | 16 +- src/ui.rs | 30 +- src/ui/config.rs | 32 ++- src/ui/input.rs | 492 ++++++++++++++++++++------------ src/ui/storage.rs | 100 ++++--- 11 files changed, 484 insertions(+), 295 deletions(-) diff --git a/src/device/cart.rs b/src/device/cart.rs index 55d1e32..2734638 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -126,8 +126,8 @@ pub fn process(device: &mut device::Device, channel: usize) { } fn format_eeprom(device: &mut device::Device) { - if device.ui.saves.eeprom.0.len() < EEPROM_MAX_SIZE { - device.ui.saves.eeprom.0.resize(EEPROM_MAX_SIZE, 0xFF) + if device.ui.saves.eeprom.data.len() < EEPROM_MAX_SIZE { + device.ui.saves.eeprom.data.resize(EEPROM_MAX_SIZE, 0xFF) } } @@ -137,7 +137,7 @@ fn eeprom_read_block(device: &mut device::Device, block: usize, offset: usize) { format_eeprom(device); device.pif.ram[offset..offset + EEPROM_BLOCK_SIZE] - .copy_from_slice(&device.ui.saves.eeprom.0[address..address + EEPROM_BLOCK_SIZE]); + .copy_from_slice(&device.ui.saves.eeprom.data[address..address + EEPROM_BLOCK_SIZE]); } fn eeprom_write_block(device: &mut device::Device, block: usize, offset: usize, status: usize) { @@ -145,12 +145,12 @@ fn eeprom_write_block(device: &mut device::Device, block: usize, offset: usize, format_eeprom(device); - device.ui.saves.eeprom.0[address..address + EEPROM_BLOCK_SIZE] + device.ui.saves.eeprom.data[address..address + EEPROM_BLOCK_SIZE] .copy_from_slice(&device.pif.ram[offset..offset + EEPROM_BLOCK_SIZE]); device.pif.ram[status] = 0x00; - device.ui.saves.eeprom.1 = true + device.ui.saves.eeprom.written = true } fn time2data(device: &mut device::Device, offset: usize) { diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 888427b..f33fb1d 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -10,10 +10,10 @@ fn read_cart_word(device: &mut device::Device, address: usize) -> u32 { .ui .saves .romsave - .0 + .data .contains_key(&(address as u32 + i)) { - data[i as usize] = device.ui.saves.romsave.0[&(address as u32 + i)]; + data[i as usize] = device.ui.saves.romsave.data[&(address as u32 + i)]; } } u32::from_be_bytes(data) @@ -55,10 +55,10 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 .ui .saves .romsave - .0 + .data .insert((masked_address + i) as u32, *item); } - device.ui.saves.romsave.1 = true; + device.ui.saves.romsave.written = true; } device.cart.latch = value & mask; @@ -85,12 +85,12 @@ pub fn dma_read( for i in 0..length { if cart_addr + i < device.cart.rom.len() as u32 { - device.ui.saves.romsave.0.insert( + device.ui.saves.romsave.data.insert( cart_addr + i, device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap], ); - device.ui.saves.romsave.1 = true; + device.ui.saves.romsave.written = true; } } } @@ -110,8 +110,8 @@ pub fn dma_write( let mut i = dram_addr; let mut j = cart_addr; while i < dram_addr + length && j < device.cart.rom.len() as u32 { - if device.ui.saves.romsave.0.contains_key(&j) { - device.rdram.mem[i as usize ^ device.byte_swap] = device.ui.saves.romsave.0[&j]; + if device.ui.saves.romsave.data.contains_key(&j) { + device.rdram.mem[i as usize ^ device.byte_swap] = device.ui.saves.romsave.data[&j]; } else { device.rdram.mem[i as usize ^ device.byte_swap] = device.cart.rom[j as usize]; } diff --git a/src/device/cart/sc64.rs b/src/device/cart/sc64.rs index b035750..b4e5728 100644 --- a/src/device/cart/sc64.rs +++ b/src/device/cart/sc64.rs @@ -27,9 +27,9 @@ pub struct Sc64 { } fn format_sdcard(device: &mut device::Device) { - if device.ui.saves.sdcard.0.is_empty() { - device.ui.saves.sdcard.0.resize(SDCARD_SIZE, 0); - let buf = std::io::Cursor::new(&mut device.ui.saves.sdcard.0); + if device.ui.saves.sdcard.data.is_empty() { + device.ui.saves.sdcard.data.resize(SDCARD_SIZE, 0); + let buf = std::io::Cursor::new(&mut device.ui.saves.sdcard.data); fatfs::format_volume(buf, fatfs::FormatVolumeOptions::new()).unwrap(); } } @@ -117,9 +117,9 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u let mut i = 0; while i < length { - if offset + i < device.ui.saves.sdcard.0.len() { + if offset + i < device.ui.saves.sdcard.data.len() { let data = u32::from_be_bytes( - device.ui.saves.sdcard.0[(offset + i)..(offset + i + 4)] + device.ui.saves.sdcard.data[(offset + i)..(offset + i + 4)] .try_into() .unwrap(), ); @@ -148,7 +148,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u let mut i = 0; while i < length { - if offset + i < device.ui.saves.sdcard.0.len() { + if offset + i < device.ui.saves.sdcard.data.len() { let data = device::memory::data_read( device, address + i as u64, @@ -156,14 +156,14 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u false, ) .to_be_bytes(); - device.ui.saves.sdcard.0[(offset + i)..(offset + i + 4)] + device.ui.saves.sdcard.data[(offset + i)..(offset + i + 4)] .copy_from_slice(&data); } else { panic!("sd card write out of bounds") } i += 4; } - device.ui.saves.sdcard.1 = true; + device.ui.saves.sdcard.written = true; } 'U' => {} // USB_WRITE_STATUS, ignored 'M' => {} // USB_WRITE, ignored diff --git a/src/device/cart/sram.rs b/src/device/cart/sram.rs index 67d7146..8fae390 100644 --- a/src/device/cart/sram.rs +++ b/src/device/cart/sram.rs @@ -29,14 +29,14 @@ pub struct Flashram { } fn format_sram(device: &mut device::Device) { - if device.ui.saves.sram.0.len() < SRAM_SIZE { - device.ui.saves.sram.0.resize(SRAM_SIZE, 0xFF) + if device.ui.saves.sram.data.len() < SRAM_SIZE { + device.ui.saves.sram.data.resize(SRAM_SIZE, 0xFF) } } fn format_flash(device: &mut device::Device) { - if device.ui.saves.flash.0.len() < FLASHRAM_SIZE { - device.ui.saves.flash.0.resize(FLASHRAM_SIZE, 0xFF) + if device.ui.saves.flash.data.len() < FLASHRAM_SIZE { + device.ui.saves.flash.data.resize(FLASHRAM_SIZE, 0xFF) } } @@ -46,7 +46,7 @@ fn read_mem_sram(device: &mut device::Device, address: u64) -> u32 { format_sram(device); u32::from_be_bytes( - device.ui.saves.sram.0[masked_address..masked_address + 4] + device.ui.saves.sram.data[masked_address..masked_address + 4] .try_into() .unwrap(), ) @@ -88,14 +88,15 @@ fn write_mem_sram(device: &mut device::Device, address: u64, value: u32, mask: u format_sram(device); let mut data = u32::from_be_bytes( - device.ui.saves.sram.0[masked_address..masked_address + 4] + device.ui.saves.sram.data[masked_address..masked_address + 4] .try_into() .unwrap(), ); device::memory::masked_write_32(&mut data, value, mask); - device.ui.saves.sram.0[masked_address..masked_address + 4].copy_from_slice(&data.to_be_bytes()); + device.ui.saves.sram.data[masked_address..masked_address + 4] + .copy_from_slice(&data.to_be_bytes()); - device.ui.saves.sram.1 = true + device.ui.saves.sram.written = true } fn write_mem_flash(device: &mut device::Device, address: u64, value: u32, mask: u32) { @@ -138,12 +139,12 @@ fn dma_read_sram(device: &mut device::Device, mut cart_addr: u32, mut dram_addr: format_sram(device); while i < dram_addr + length && i < device.rdram.size { - device.ui.saves.sram.0[j as usize] = device.rdram.mem[i as usize ^ device.byte_swap]; + device.ui.saves.sram.data[j as usize] = device.rdram.mem[i as usize ^ device.byte_swap]; i += 1; j += 1; } - device.ui.saves.sram.1 = true + device.ui.saves.sram.written = true } fn dma_read_flash(device: &mut device::Device, cart_addr: u32, dram_addr: u32, length: u32) { @@ -188,7 +189,7 @@ fn dma_write_sram( format_sram(device); while i < dram_addr + length && i < device.rdram.size { - device.rdram.mem[i as usize ^ device.byte_swap] = device.ui.saves.sram.0[j as usize]; + device.rdram.mem[i as usize ^ device.byte_swap] = device.ui.saves.sram.data[j as usize]; i += 1; j += 1; } @@ -231,7 +232,7 @@ fn dma_write_flash( /* do actual DMA */ for i in 0..length { device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap] = - device.ui.saves.flash.0[(cart_addr + i) as usize]; + device.ui.saves.flash.data[(cart_addr + i) as usize]; } } else { /* other accesses are not implemented */ @@ -270,14 +271,14 @@ fn flashram_command(device: &mut device::Device, command: u32) { if device.cart.flashram.mode == FlashramMode::SectorErase { let offset: usize = (device.cart.flashram.erase_page & 0xff80) as usize * 128; for i in 0..128 * 128 { - device.ui.saves.flash.0[offset + i] = 0xFF; + device.ui.saves.flash.data[offset + i] = 0xFF; } - device.ui.saves.flash.1 = true + device.ui.saves.flash.written = true } else if device.cart.flashram.mode == FlashramMode::ChipErase { for i in 0..FLASHRAM_SIZE { - device.ui.saves.flash.0[i] = 0xFF; + device.ui.saves.flash.data[i] = 0xFF; } - device.ui.saves.flash.1 = true + device.ui.saves.flash.written = true } else { panic!("Unexpected flash erase command") } @@ -295,9 +296,9 @@ fn flashram_command(device: &mut device::Device, command: u32) { /* program selected page */ let offset: usize = (command & 0xffff) as usize * 128; for i in 0..128 { - device.ui.saves.flash.0[offset + i] = device.cart.flashram.page_buf[i]; + device.ui.saves.flash.data[offset + i] = device.cart.flashram.page_buf[i]; } - device.ui.saves.flash.1 = true; + device.ui.saves.flash.written = true; /* clear program busy flag, set program success flag, transition to status mode */ device.cart.flashram.status &= !0x01; diff --git a/src/device/controller.rs b/src/device/controller.rs index 59c15d8..e7f3b41 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -66,8 +66,8 @@ pub fn process(device: &mut device::Device, channel: usize) { netplay::get_input(device, channel) }; - device.pif.ram[offset..offset + 4].copy_from_slice(&input.0.to_ne_bytes()); - if input.1 { + device.pif.ram[offset..offset + 4].copy_from_slice(&input.data.to_ne_bytes()); + if input.pak_change_pressed { // pak change button pressed if device::events::get_event(device, device::events::EVENT_TYPE_PAK).is_none() { device.pif.channels[channel].change_pak = diff --git a/src/device/controller/mempak.rs b/src/device/controller/mempak.rs index 0361678..aca986e 100644 --- a/src/device/controller/mempak.rs +++ b/src/device/controller/mempak.rs @@ -4,8 +4,8 @@ pub const MEMPAK_SIZE: usize = 0x8000; const MPK_PAGE_SIZE: usize = 256; fn format_mempak(device: &mut device::Device) { - if device.ui.saves.mempak.0.len() < MEMPAK_SIZE * 4 { - device.ui.saves.mempak.0.resize(MEMPAK_SIZE * 4, 0); + if device.ui.saves.mempak.data.len() < MEMPAK_SIZE * 4 { + device.ui.saves.mempak.data.resize(MEMPAK_SIZE * 4, 0); let page_0: [u8; MPK_PAGE_SIZE] = [ /* Label area */ @@ -38,28 +38,28 @@ fn format_mempak(device: &mut device::Device) { let offset = i * MEMPAK_SIZE; /* Fill Page 0 with pre-initialized content */ - device.ui.saves.mempak.0[offset..offset + MPK_PAGE_SIZE].copy_from_slice(&page_0); + device.ui.saves.mempak.data[offset..offset + MPK_PAGE_SIZE].copy_from_slice(&page_0); /* Fill INODE page 1 and update it's checkum */ let start_page = 5; for i in MPK_PAGE_SIZE..2 * start_page { - device.ui.saves.mempak.0[offset + i] = 0; + device.ui.saves.mempak.data[offset + i] = 0; } for i in (MPK_PAGE_SIZE + 2 * start_page..2 * MPK_PAGE_SIZE).step_by(2) { - device.ui.saves.mempak.0[offset + i] = 0x00; - device.ui.saves.mempak.0[offset + i + 1] = 0x03; + device.ui.saves.mempak.data[offset + i] = 0x00; + device.ui.saves.mempak.data[offset + i + 1] = 0x03; } - device.ui.saves.mempak.0[offset + (MPK_PAGE_SIZE + 1)] = 0x71; + device.ui.saves.mempak.data[offset + (MPK_PAGE_SIZE + 1)] = 0x71; /* Page 2 is identical to page 1 */ let page1 = offset + MPK_PAGE_SIZE; let page2 = offset + 2 * MPK_PAGE_SIZE; - let page1data = device.ui.saves.mempak.0[page1..page1 + MPK_PAGE_SIZE].to_vec(); - device.ui.saves.mempak.0[page2..page2 + MPK_PAGE_SIZE].copy_from_slice(&page1data); + let page1data = device.ui.saves.mempak.data[page1..page1 + MPK_PAGE_SIZE].to_vec(); + device.ui.saves.mempak.data[page2..page2 + MPK_PAGE_SIZE].copy_from_slice(&page1data); /* Remaining pages DIR+DATA (3...) are initialized with 0x00 */ for i in 3 * MPK_PAGE_SIZE..MEMPAK_SIZE - 3 * MPK_PAGE_SIZE { - device.ui.saves.mempak.0[offset + i] = 0; + device.ui.saves.mempak.data[offset + i] = 0; } } } @@ -71,7 +71,7 @@ pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usi let offset = (channel * MEMPAK_SIZE) + address as usize; device.pif.ram[data..data + size] - .copy_from_slice(&device.ui.saves.mempak.0[offset..offset + size]) + .copy_from_slice(&device.ui.saves.mempak.data[offset..offset + size]) } else { for i in 0..size { device.pif.ram[data + i] = 0; @@ -84,9 +84,9 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us format_mempak(device); let offset = (channel * MEMPAK_SIZE) + address as usize; - device.ui.saves.mempak.0[offset..offset + size] + device.ui.saves.mempak.data[offset..offset + size] .copy_from_slice(&device.pif.ram[data..data + size]); - device.ui.saves.mempak.1 = true + device.ui.saves.mempak.written = true } } diff --git a/src/netplay.rs b/src/netplay.rs index c40514a..0102271 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -90,18 +90,18 @@ pub fn send_sync_check(device: &mut device::Device) { netplay.vi_counter = netplay.vi_counter.wrapping_add(1); } -pub fn send_input(netplay: &Netplay, input: (u32, bool)) { +pub fn send_input(netplay: &Netplay, input: ui::input::InputData) { let mut request: Vec = [UDP_SEND_KEY_INFO].to_vec(); request.push(netplay.player_number); request.extend_from_slice( &(netplay.player_data[netplay.player_number as usize].count).to_be_bytes(), ); - request.extend_from_slice(&(input.0).to_be_bytes()); - request.push(input.1 as u8); + request.extend_from_slice(&(input.data).to_be_bytes()); + request.push(input.pak_change_pressed as u8); netplay.udp_socket.send(&request).unwrap(); } -pub fn get_input(device: &mut device::Device, channel: usize) -> (u32, bool) { +pub fn get_input(device: &mut device::Device, channel: usize) -> ui::input::InputData { let netplay = device.netplay.as_mut().unwrap(); let mut input = None; @@ -132,10 +132,10 @@ pub fn get_input(device: &mut device::Device, channel: usize) -> (u32, bool) { && netplay.player_data[channel].input_events.len() as u8 > netplay.buffer_target; netplay.player_data[channel].count = netplay.player_data[channel].count.wrapping_add(1); - ( - input.as_ref().unwrap().input, - input.as_ref().unwrap().plugin != 0, - ) + ui::input::InputData { + data: input.as_ref().unwrap().input, + pak_change_pressed: input.as_ref().unwrap().plugin != 0, + } } fn request_input(netplay: &Netplay, channel: usize) { diff --git a/src/ui.rs b/src/ui.rs index 74c52f5..29ffad8 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -122,12 +122,30 @@ impl Ui { savestate_file_path: std::path::PathBuf::new(), }, saves: storage::Saves { - eeprom: (Vec::new(), false), - sram: (Vec::new(), false), - flash: (Vec::new(), false), - mempak: (Vec::new(), false), - sdcard: (Vec::new(), false), - romsave: (std::collections::HashMap::new(), false), + eeprom: storage::Save { + data: Vec::new(), + written: false, + }, + sram: storage::Save { + data: Vec::new(), + written: false, + }, + flash: storage::Save { + data: Vec::new(), + written: false, + }, + mempak: storage::Save { + data: Vec::new(), + written: false, + }, + sdcard: storage::Save { + data: Vec::new(), + written: false, + }, + romsave: storage::RomSave { + data: std::collections::HashMap::new(), + written: false, + }, }, event_audio: audio::EventAudio { mempak: include_bytes!("../data/mempak.wav").to_vec(), diff --git a/src/ui/config.rs b/src/ui/config.rs index ad8b4cc..0c1844d 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -1,13 +1,33 @@ use crate::ui; +#[derive(Copy, Clone, serde::Serialize, serde::Deserialize)] +pub struct InputKeyButton { + pub enabled: bool, + pub id: i32, +} + +#[derive(PartialEq, Copy, Clone, serde::Serialize, serde::Deserialize)] +pub struct InputControllerAxis { + pub enabled: bool, + pub id: i32, + pub axis: i16, +} + +#[derive(Copy, Clone, serde::Serialize, serde::Deserialize)] +pub struct InputJoystickHat { + pub enabled: bool, + pub id: i32, + pub direction: u8, +} + #[derive(serde::Serialize, serde::Deserialize)] pub struct InputProfile { - pub keys: [(bool, i32); ui::input::PROFILE_SIZE], - pub controller_buttons: [(bool, i32); ui::input::PROFILE_SIZE], - pub controller_axis: [(bool, i32, i16); ui::input::PROFILE_SIZE], - pub joystick_buttons: [(bool, i32); ui::input::PROFILE_SIZE], - pub joystick_hat: [(bool, i32, u8); ui::input::PROFILE_SIZE], - pub joystick_axis: [(bool, i32, i16); ui::input::PROFILE_SIZE], + pub keys: [InputKeyButton; ui::input::PROFILE_SIZE], + pub controller_buttons: [InputKeyButton; ui::input::PROFILE_SIZE], + pub controller_axis: [InputControllerAxis; ui::input::PROFILE_SIZE], + pub joystick_buttons: [InputKeyButton; ui::input::PROFILE_SIZE], + pub joystick_hat: [InputJoystickHat; ui::input::PROFILE_SIZE], + pub joystick_axis: [InputControllerAxis; ui::input::PROFILE_SIZE], pub dinput: bool, } diff --git a/src/ui/input.rs b/src/ui/input.rs index 0663864..b4a1fc5 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -34,6 +34,11 @@ pub struct Controllers { pub joystick: *mut sdl3_sys::joystick::SDL_Joystick, } +pub struct InputData { + pub data: u32, + pub pak_change_pressed: bool, +} + fn bound_axis(x: &mut f64, y: &mut f64) { let radius = 95.0; // this is roughly the maxium diagonal distance of the controller @@ -54,35 +59,35 @@ fn set_axis_from_joystick( ) -> (f64, f64) { let mut x = 0.0; let mut y = 0.0; - if profile.joystick_axis[AXIS_LEFT].0 { + if profile.joystick_axis[AXIS_LEFT].enabled { let axis_position = unsafe { - sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_LEFT].1) + sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_LEFT].id) }; - if axis_position as isize * profile.joystick_axis[AXIS_LEFT].2 as isize > 0 { + if axis_position as isize * profile.joystick_axis[AXIS_LEFT].axis as isize > 0 { x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; } } - if profile.joystick_axis[AXIS_RIGHT].0 { + if profile.joystick_axis[AXIS_RIGHT].enabled { let axis_position = unsafe { - sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_RIGHT].1) + sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_RIGHT].id) }; - if axis_position as isize * profile.joystick_axis[AXIS_RIGHT].2 as isize > 0 { + if axis_position as isize * profile.joystick_axis[AXIS_RIGHT].axis as isize > 0 { x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; } } - if profile.joystick_axis[AXIS_DOWN].0 { + if profile.joystick_axis[AXIS_DOWN].enabled { let axis_position = unsafe { - sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_DOWN].1) + sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_DOWN].id) }; - if axis_position as isize * profile.joystick_axis[AXIS_DOWN].2 as isize > 0 { + if axis_position as isize * profile.joystick_axis[AXIS_DOWN].axis as isize > 0 { y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); } } - if profile.joystick_axis[AXIS_UP].0 { + if profile.joystick_axis[AXIS_UP].enabled { let axis_position = unsafe { - sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_UP].1) + sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_UP].id) }; - if axis_position as isize * profile.joystick_axis[AXIS_UP].2 as isize > 0 { + if axis_position as isize * profile.joystick_axis[AXIS_UP].axis as isize > 0 { y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); } } @@ -128,47 +133,47 @@ fn set_axis_from_controller( ) -> (f64, f64) { let mut x = 0.0; let mut y = 0.0; - if profile.controller_axis[AXIS_LEFT].0 { + if profile.controller_axis[AXIS_LEFT].enabled { let axis_position = unsafe { sdl3_sys::gamepad::SDL_GetGamepadAxis( controller, - get_axis_from_i32(profile.controller_axis[AXIS_LEFT].1), + get_axis_from_i32(profile.controller_axis[AXIS_LEFT].id), ) }; - if axis_position as isize * profile.controller_axis[AXIS_LEFT].2 as isize > 0 { + if axis_position as isize * profile.controller_axis[AXIS_LEFT].axis as isize > 0 { x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; } } - if profile.controller_axis[AXIS_RIGHT].0 { + if profile.controller_axis[AXIS_RIGHT].enabled { let axis_position = unsafe { sdl3_sys::gamepad::SDL_GetGamepadAxis( controller, - get_axis_from_i32(profile.controller_axis[AXIS_RIGHT].1), + get_axis_from_i32(profile.controller_axis[AXIS_RIGHT].id), ) }; - if axis_position as isize * profile.controller_axis[AXIS_RIGHT].2 as isize > 0 { + if axis_position as isize * profile.controller_axis[AXIS_RIGHT].axis as isize > 0 { x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; } } - if profile.controller_axis[AXIS_DOWN].0 { + if profile.controller_axis[AXIS_DOWN].enabled { let axis_position = unsafe { sdl3_sys::gamepad::SDL_GetGamepadAxis( controller, - get_axis_from_i32(profile.controller_axis[AXIS_DOWN].1), + get_axis_from_i32(profile.controller_axis[AXIS_DOWN].id), ) }; - if axis_position as isize * profile.controller_axis[AXIS_DOWN].2 as isize > 0 { + if axis_position as isize * profile.controller_axis[AXIS_DOWN].axis as isize > 0 { y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); } } - if profile.controller_axis[AXIS_UP].0 { + if profile.controller_axis[AXIS_UP].enabled { let axis_position = unsafe { sdl3_sys::gamepad::SDL_GetGamepadAxis( controller, - get_axis_from_i32(profile.controller_axis[AXIS_UP].1), + get_axis_from_i32(profile.controller_axis[AXIS_UP].id), ) }; - if axis_position as isize * profile.controller_axis[AXIS_UP].2 as isize > 0 { + if axis_position as isize * profile.controller_axis[AXIS_UP].axis as isize > 0 { y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); } } @@ -181,23 +186,23 @@ fn set_axis_from_keys( ) -> (f64, f64) { let mut x = 0.0; let mut y = 0.0; - if profile.keys[AXIS_LEFT].0 - && unsafe { *keyboard_state.offset(profile.keys[AXIS_LEFT].1 as isize) } + if profile.keys[AXIS_LEFT].enabled + && unsafe { *keyboard_state.offset(profile.keys[AXIS_LEFT].id as isize) } { x = -MAX_AXIS_VALUE } - if profile.keys[AXIS_RIGHT].0 - && unsafe { *keyboard_state.offset(profile.keys[AXIS_RIGHT].1 as isize) } + if profile.keys[AXIS_RIGHT].enabled + && unsafe { *keyboard_state.offset(profile.keys[AXIS_RIGHT].id as isize) } { x = MAX_AXIS_VALUE } - if profile.keys[AXIS_DOWN].0 - && unsafe { *keyboard_state.offset(profile.keys[AXIS_DOWN].1 as isize) } + if profile.keys[AXIS_DOWN].enabled + && unsafe { *keyboard_state.offset(profile.keys[AXIS_DOWN].id as isize) } { y = -MAX_AXIS_VALUE } - if profile.keys[AXIS_UP].0 - && unsafe { *keyboard_state.offset(profile.keys[AXIS_UP].1 as isize) } + if profile.keys[AXIS_UP].enabled + && unsafe { *keyboard_state.offset(profile.keys[AXIS_UP].id as isize) } { y = MAX_AXIS_VALUE } @@ -211,26 +216,26 @@ fn set_buttons_from_joystick( keys: &mut u32, ) { let profile_joystick_button = profile.joystick_buttons[i]; - if profile_joystick_button.0 { + if profile_joystick_button.enabled { *keys |= (unsafe { - sdl3_sys::joystick::SDL_GetJoystickButton(joystick, profile_joystick_button.1) + sdl3_sys::joystick::SDL_GetJoystickButton(joystick, profile_joystick_button.id) } as u32) << i; } let profile_joystick_hat = profile.joystick_hat[i]; - if profile_joystick_hat.0 - && unsafe { sdl3_sys::joystick::SDL_GetJoystickHat(joystick, profile_joystick_hat.1) } - == profile_joystick_hat.2 + if profile_joystick_hat.enabled + && unsafe { sdl3_sys::joystick::SDL_GetJoystickHat(joystick, profile_joystick_hat.id) } + == profile_joystick_hat.direction { *keys |= 1 << i; } let profile_joystick_axis = profile.joystick_axis[i]; - if profile_joystick_axis.0 { + if profile_joystick_axis.enabled { let axis_position = - unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile_joystick_axis.1) }; - if axis_position as isize * profile_joystick_axis.2 as isize > 0 + unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile_joystick_axis.id) }; + if axis_position as isize * profile_joystick_axis.axis as isize > 0 && axis_position.saturating_abs() > i16::MAX / 2 { *keys |= 1 << i; @@ -245,25 +250,25 @@ fn set_buttons_from_controller( keys: &mut u32, ) { let profile_controller_button = profile.controller_buttons[i]; - if profile_controller_button.0 { + if profile_controller_button.enabled { *keys |= (unsafe { sdl3_sys::gamepad::SDL_GetGamepadButton( controller, - get_button_from_i32(profile_controller_button.1), + get_button_from_i32(profile_controller_button.id), ) } as u32) << i; } let profile_controller_axis = profile.controller_axis[i]; - if profile_controller_axis.0 { + if profile_controller_axis.enabled { let axis_position = unsafe { sdl3_sys::gamepad::SDL_GetGamepadAxis( controller, - get_axis_from_i32(profile_controller_axis.1), + get_axis_from_i32(profile_controller_axis.id), ) }; - if axis_position as isize * profile_controller_axis.2 as isize > 0 + if axis_position as isize * profile_controller_axis.axis as isize > 0 && axis_position.saturating_abs() > i16::MAX / 2 { *keys |= 1 << i; @@ -310,25 +315,26 @@ fn change_paks( let key = profile.keys[CHANGE_PAK]; let mut pressed = false; - if controller_button.0 && !controller.is_null() { + if controller_button.enabled && !controller.is_null() { pressed = unsafe { sdl3_sys::gamepad::SDL_GetGamepadButton( controller, - get_button_from_i32(controller_button.1), + get_button_from_i32(controller_button.id), ) }; - } else if joystick_button.0 && !joystick.is_null() { - pressed = unsafe { sdl3_sys::joystick::SDL_GetJoystickButton(joystick, joystick_button.1) }; - } else if joystick_hat.0 && !joystick.is_null() { - pressed = unsafe { sdl3_sys::joystick::SDL_GetJoystickHat(joystick, joystick_hat.1) } - == joystick_hat.2; - } else if key.0 { - pressed = unsafe { *keyboard_state.offset(key.1 as isize) }; + } else if joystick_button.enabled && !joystick.is_null() { + pressed = + unsafe { sdl3_sys::joystick::SDL_GetJoystickButton(joystick, joystick_button.id) }; + } else if joystick_hat.enabled && !joystick.is_null() { + pressed = unsafe { sdl3_sys::joystick::SDL_GetJoystickHat(joystick, joystick_hat.id) } + == joystick_hat.direction; + } else if key.enabled { + pressed = unsafe { *keyboard_state.offset(key.id as isize) }; } pressed } -pub fn get(ui: &mut ui::Ui, channel: usize) -> (u32, bool) { +pub fn get(ui: &mut ui::Ui, channel: usize) -> InputData { let profile_name = ui.config.input.input_profile_binding[channel].clone(); let profile = ui.config.input.input_profiles.get(&profile_name).unwrap(); let mut keys = 0; @@ -347,8 +353,8 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> (u32, bool) { for i in 0..14 { if profile_name != "default" || channel == 0 { let profile_key = profile.keys[i]; - if profile_key.0 && !alt_pressed { - keys |= (unsafe { *ui.keyboard_state.offset(profile_key.1 as isize) } as u32) << i; + if profile_key.enabled && !alt_pressed { + keys |= (unsafe { *ui.keyboard_state.offset(profile_key.id as isize) } as u32) << i; } } @@ -376,10 +382,10 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> (u32, bool) { keys |= (x.round() as i8 as u8 as u32) << X_AXIS_SHIFT; keys |= (y.round() as i8 as u8 as u32) << Y_AXIS_SHIFT; - ( - keys, - change_paks(profile, joystick, controller, ui.keyboard_state), - ) + InputData { + data: keys, + pak_change_pressed: change_paks(profile, joystick, controller, ui.keyboard_state), + } } pub fn assign_controller(ui: &mut ui::Ui, controller: i32, port: usize) { @@ -497,14 +503,39 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { ("Change Pak", CHANGE_PAK), ]; - let mut new_keys = [(false, 0); PROFILE_SIZE]; - let mut new_joystick_buttons = [(false, 0i32); PROFILE_SIZE]; - let mut new_joystick_hat = [(false, 0i32, 0); PROFILE_SIZE]; - let mut new_joystick_axis = [(false, 0i32, 0); PROFILE_SIZE]; - let mut new_controller_buttons = [(false, 0i32); PROFILE_SIZE]; - let mut new_controller_axis = [(false, 0i32, 0); PROFILE_SIZE]; + let mut new_keys = [ui::config::InputKeyButton { + enabled: false, + id: 0, + }; PROFILE_SIZE]; + let mut new_joystick_buttons = [ui::config::InputKeyButton { + enabled: false, + id: 0, + }; PROFILE_SIZE]; + let mut new_joystick_hat = [ui::config::InputJoystickHat { + enabled: false, + id: 0, + direction: 0, + }; PROFILE_SIZE]; + let mut new_joystick_axis = [ui::config::InputControllerAxis { + enabled: false, + id: 0, + axis: 0, + }; PROFILE_SIZE]; + let mut new_controller_buttons = [ui::config::InputKeyButton { + enabled: false, + id: 0, + }; PROFILE_SIZE]; + let mut new_controller_axis = [ui::config::InputControllerAxis { + enabled: false, + id: 0, + axis: 0, + }; PROFILE_SIZE]; - let mut last_joystick_axis_result = (false, 0, 0); + let mut last_joystick_axis_result = ui::config::InputControllerAxis { + enabled: false, + id: 0, + axis: 0, + }; for (key, value) in key_labels.iter() { let mut event: sdl3_sys::events::SDL_Event = Default::default(); while unsafe { sdl3_sys::events::SDL_PollEvent(&mut event) } {} // clear events @@ -528,20 +559,29 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { event.key.scancode != sdl3_sys::scancode::SDL_SCANCODE_LALT && event.key.scancode != sdl3_sys::scancode::SDL_SCANCODE_RALT } { - new_keys[*value] = (true, i32::from(unsafe { event.key.scancode })); + new_keys[*value] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(unsafe { event.key.scancode }), + }; key_set = true } } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_GAMEPAD_BUTTON_DOWN) { if !open_controllers.is_empty() { - new_controller_buttons[*value] = - (true, i32::from(unsafe { event.gbutton.button })); + new_controller_buttons[*value] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(unsafe { event.gbutton.button }), + }; key_set = true } } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_GAMEPAD_AXIS_MOTION) { let axis_value = unsafe { event.gaxis.value }; let axis = unsafe { event.gaxis.axis }; if !open_controllers.is_empty() && axis_value.saturating_abs() > i16::MAX / 2 { - let result = (true, axis as i32, axis_value / axis_value.saturating_abs()); + let result = ui::config::InputControllerAxis { + enabled: true, + id: axis as i32, + axis: axis_value / axis_value.saturating_abs(), + }; if result != last_joystick_axis_result { new_controller_axis[*value] = result; last_joystick_axis_result = result; @@ -551,15 +591,21 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_JOYSTICK_BUTTON_DOWN) { if !open_joysticks.is_empty() { - new_joystick_buttons[*value] = - (true, i32::from(unsafe { event.jbutton.button })); + new_joystick_buttons[*value] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(unsafe { event.jbutton.button }), + }; key_set = true } } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_JOYSTICK_HAT_MOTION) { let state = unsafe { event.jhat.value }; let hat = unsafe { event.jhat.hat }; if !open_joysticks.is_empty() && state != sdl3_sys::joystick::SDL_HAT_CENTERED { - new_joystick_hat[*value] = (true, hat as i32, state); + new_joystick_hat[*value] = ui::config::InputJoystickHat { + enabled: true, + id: hat as i32, + direction: state, + }; key_set = true } } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_JOYSTICK_AXIS_MOTION) @@ -567,7 +613,11 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { let axis_value = unsafe { event.jaxis.value }; let axis = unsafe { event.jaxis.axis }; if !open_joysticks.is_empty() && axis_value.saturating_abs() > i16::MAX / 2 { - let result = (true, axis as i32, axis_value / axis_value.saturating_abs()); + let result = ui::config::InputControllerAxis { + enabled: true, + id: axis as i32, + axis: axis_value / axis_value.saturating_abs(), + }; if result != last_joystick_axis_result { new_joystick_axis[*value] = result; last_joystick_axis_result = result; @@ -599,114 +649,200 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { } pub fn get_default_profile() -> ui::config::InputProfile { - let mut default_controller_buttons = [(false, 0); PROFILE_SIZE]; - let mut default_controller_axis = [(false, 0, 0); PROFILE_SIZE]; - let mut default_keys = [(false, 0); PROFILE_SIZE]; - default_keys[R_DPAD] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_D)); - default_keys[L_DPAD] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_A)); - default_keys[D_DPAD] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_S)); - default_keys[U_DPAD] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_W)); - default_keys[START_BUTTON] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_RETURN)); - default_keys[Z_TRIG] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_Z)); - default_keys[B_BUTTON] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_LCTRL)); - default_keys[A_BUTTON] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_LSHIFT)); - default_keys[R_CBUTTON] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_L)); - default_keys[L_CBUTTON] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_J)); - default_keys[D_CBUTTON] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_K)); - default_keys[U_CBUTTON] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_I)); - default_keys[R_TRIG] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_C)); - default_keys[L_TRIG] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_X)); - default_keys[AXIS_LEFT] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_LEFT)); - default_keys[AXIS_RIGHT] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_RIGHT)); - default_keys[AXIS_UP] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_UP)); - default_keys[AXIS_DOWN] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_DOWN)); - default_keys[CHANGE_PAK] = (true, i32::from(sdl3_sys::scancode::SDL_SCANCODE_COMMA)); + let mut default_controller_buttons = [ui::config::InputKeyButton { + enabled: false, + id: 0, + }; PROFILE_SIZE]; + let mut default_controller_axis = [ui::config::InputControllerAxis { + enabled: false, + id: 0, + axis: 0, + }; PROFILE_SIZE]; + let mut default_keys = [ui::config::InputKeyButton { + enabled: false, + id: 0, + }; PROFILE_SIZE]; + default_keys[R_DPAD] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_D), + }; + default_keys[L_DPAD] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_A), + }; + default_keys[D_DPAD] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_S), + }; + default_keys[U_DPAD] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_W), + }; + default_keys[START_BUTTON] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_RETURN), + }; + default_keys[Z_TRIG] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_Z), + }; + default_keys[B_BUTTON] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_LCTRL), + }; + default_keys[A_BUTTON] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_LSHIFT), + }; + default_keys[R_CBUTTON] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_L), + }; + default_keys[L_CBUTTON] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_J), + }; + default_keys[D_CBUTTON] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_K), + }; + default_keys[U_CBUTTON] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_I), + }; + default_keys[R_TRIG] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_C), + }; + default_keys[L_TRIG] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_X), + }; + default_keys[AXIS_LEFT] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_LEFT), + }; + default_keys[AXIS_RIGHT] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_RIGHT), + }; + default_keys[AXIS_UP] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_UP), + }; + default_keys[AXIS_DOWN] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_DOWN), + }; + default_keys[CHANGE_PAK] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_COMMA), + }; - default_controller_buttons[R_DPAD] = ( - true, - i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_RIGHT), - ); - default_controller_buttons[L_DPAD] = ( - true, - i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_LEFT), - ); - default_controller_buttons[D_DPAD] = ( - true, - i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_DOWN), - ); - default_controller_buttons[U_DPAD] = ( - true, - i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_UP), - ); - default_controller_buttons[START_BUTTON] = - (true, i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_START)); - default_controller_axis[Z_TRIG] = ( - true, - i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFT_TRIGGER), - 1, - ); - default_controller_buttons[B_BUTTON] = - (true, i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_WEST)); - default_controller_buttons[A_BUTTON] = - (true, i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_SOUTH)); - default_controller_axis[R_CBUTTON] = ( - true, - i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTX), - 1, - ); - default_controller_axis[L_CBUTTON] = ( - true, - i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTX), - -1, - ); - default_controller_axis[D_CBUTTON] = ( - true, - i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTY), - 1, - ); - default_controller_axis[U_CBUTTON] = ( - true, - i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTY), - -1, - ); - default_controller_buttons[R_TRIG] = ( - true, - i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER), - ); - default_controller_buttons[L_TRIG] = ( - true, - i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_LEFT_SHOULDER), - ); - default_controller_axis[AXIS_LEFT] = ( - true, - i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTX), - -1, - ); - default_controller_axis[AXIS_RIGHT] = ( - true, - i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTX), - 1, - ); - default_controller_axis[AXIS_UP] = ( - true, - i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTY), - -1, - ); - default_controller_axis[AXIS_DOWN] = ( - true, - i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTY), - 1, - ); - default_controller_buttons[CHANGE_PAK] = - (true, i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_BACK)); + default_controller_buttons[R_DPAD] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_RIGHT), + }; + default_controller_buttons[L_DPAD] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_LEFT), + }; + default_controller_buttons[D_DPAD] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_DOWN), + }; + default_controller_buttons[U_DPAD] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_UP), + }; + default_controller_buttons[START_BUTTON] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_START), + }; + default_controller_axis[Z_TRIG] = ui::config::InputControllerAxis { + enabled: true, + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFT_TRIGGER), + axis: 1, + }; + default_controller_buttons[B_BUTTON] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_WEST), + }; + default_controller_buttons[A_BUTTON] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_SOUTH), + }; + default_controller_axis[R_CBUTTON] = ui::config::InputControllerAxis { + enabled: true, + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTX), + axis: 1, + }; + default_controller_axis[L_CBUTTON] = ui::config::InputControllerAxis { + enabled: true, + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTX), + axis: -1, + }; + default_controller_axis[D_CBUTTON] = ui::config::InputControllerAxis { + enabled: true, + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTY), + axis: 1, + }; + default_controller_axis[U_CBUTTON] = ui::config::InputControllerAxis { + enabled: true, + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTY), + axis: -1, + }; + default_controller_buttons[R_TRIG] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER), + }; + default_controller_buttons[L_TRIG] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_LEFT_SHOULDER), + }; + default_controller_axis[AXIS_LEFT] = ui::config::InputControllerAxis { + enabled: true, + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTX), + axis: -1, + }; + default_controller_axis[AXIS_RIGHT] = ui::config::InputControllerAxis { + enabled: true, + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTX), + axis: 1, + }; + default_controller_axis[AXIS_UP] = ui::config::InputControllerAxis { + enabled: true, + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTY), + axis: -1, + }; + default_controller_axis[AXIS_DOWN] = ui::config::InputControllerAxis { + enabled: true, + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTY), + axis: 1, + }; + default_controller_buttons[CHANGE_PAK] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_BACK), + }; ui::config::InputProfile { keys: default_keys, controller_buttons: default_controller_buttons, controller_axis: default_controller_axis, - joystick_buttons: Default::default(), - joystick_hat: Default::default(), - joystick_axis: Default::default(), + joystick_buttons: [ui::config::InputKeyButton { + enabled: false, + id: 0, + }; PROFILE_SIZE], + joystick_hat: [ui::config::InputJoystickHat { + enabled: false, + id: 0, + direction: 0, + }; PROFILE_SIZE], + joystick_axis: [ui::config::InputControllerAxis { + enabled: false, + id: 0, + axis: 0, + }; PROFILE_SIZE], dinput: false, } } diff --git a/src/ui/storage.rs b/src/ui/storage.rs index f9f9d69..b5bc764 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -25,14 +25,26 @@ pub struct Paths { // the bool indicates whether the save has been written to // if that is the case, it will be flushed to the disk when the program closes +#[derive(serde::Serialize, serde::Deserialize)] +pub struct Save { + pub data: Vec, + pub written: bool, +} + +#[derive(serde::Serialize, serde::Deserialize)] +pub struct RomSave { + pub data: std::collections::HashMap, + pub written: bool, +} + #[derive(serde::Serialize, serde::Deserialize)] pub struct Saves { - pub eeprom: (Vec, bool), - pub sram: (Vec, bool), - pub flash: (Vec, bool), - pub mempak: (Vec, bool), - pub sdcard: (Vec, bool), - pub romsave: (std::collections::HashMap, bool), + pub eeprom: Save, + pub sram: Save, + pub flash: Save, + pub mempak: Save, + pub sdcard: Save, + pub romsave: RomSave, } fn get_save_type(rom: &[u8], game_id: &str) -> Vec { @@ -175,27 +187,27 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { if netplay.is_none() || netplay.as_ref().unwrap().player_number == 0 { let eep = std::fs::read(&mut ui.paths.eep_file_path); if eep.is_ok() { - ui.saves.eeprom.0 = eep.unwrap(); + ui.saves.eeprom.data = eep.unwrap(); } let sra = std::fs::read(&mut ui.paths.sra_file_path); if sra.is_ok() { - ui.saves.sram.0 = sra.unwrap(); + ui.saves.sram.data = sra.unwrap(); } let fla = std::fs::read(&mut ui.paths.fla_file_path); if fla.is_ok() { - ui.saves.flash.0 = fla.unwrap(); + ui.saves.flash.data = fla.unwrap(); } let mempak = std::fs::read(&mut ui.paths.pak_file_path); if mempak.is_ok() { - ui.saves.mempak.0 = mempak.unwrap(); + ui.saves.mempak.data = mempak.unwrap(); } let sdcard = std::fs::read(&mut ui.paths.sdcard_file_path); if sdcard.is_ok() { - ui.saves.sdcard.0 = sdcard.unwrap(); + ui.saves.sdcard.data = sdcard.unwrap(); } let romsave = std::fs::read(&mut ui.paths.romsave_file_path); if romsave.is_ok() { - ui.saves.romsave.0 = postcard::from_bytes(romsave.unwrap().as_ref()).unwrap(); + ui.saves.romsave.data = postcard::from_bytes(romsave.unwrap().as_ref()).unwrap(); } } @@ -204,31 +216,31 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { netplay::send_save( netplay.as_mut().unwrap(), "eep", - &ui.saves.eeprom.0, - ui.saves.eeprom.0.len(), + &ui.saves.eeprom.data, + ui.saves.eeprom.data.len(), ); netplay::send_save( netplay.as_mut().unwrap(), "sra", - &ui.saves.sram.0, - ui.saves.sram.0.len(), + &ui.saves.sram.data, + ui.saves.sram.data.len(), ); netplay::send_save( netplay.as_mut().unwrap(), "fla", - &ui.saves.flash.0, - ui.saves.flash.0.len(), + &ui.saves.flash.data, + ui.saves.flash.data.len(), ); netplay::send_save( netplay.as_mut().unwrap(), "mpk", - &ui.saves.mempak.0, - ui.saves.mempak.0.len(), + &ui.saves.mempak.data, + ui.saves.mempak.data.len(), ); let mut compressed_sd = Vec::new(); - if !ui.saves.sdcard.0.is_empty() { - compressed_sd = compress_file(&[(&ui.saves.sdcard.0, "save")]); + if !ui.saves.sdcard.data.is_empty() { + compressed_sd = compress_file(&[(&ui.saves.sdcard.data, "save")]); } netplay::send_save( netplay.as_mut().unwrap(), @@ -238,9 +250,11 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { ); let mut compressed_romsave = Vec::new(); - if !ui.saves.romsave.0.is_empty() { - compressed_romsave = - compress_file(&[(&postcard::to_stdvec(&ui.saves.romsave.0).unwrap(), "save")]); + if !ui.saves.romsave.data.is_empty() { + compressed_romsave = compress_file(&[( + &postcard::to_stdvec(&ui.saves.romsave.data).unwrap(), + "save", + )]); } netplay::send_save( netplay.as_mut().unwrap(), @@ -249,22 +263,22 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { compressed_romsave.len(), ); } else { - netplay::receive_save(netplay.as_mut().unwrap(), "eep", &mut ui.saves.eeprom.0); - netplay::receive_save(netplay.as_mut().unwrap(), "sra", &mut ui.saves.sram.0); - netplay::receive_save(netplay.as_mut().unwrap(), "fla", &mut ui.saves.flash.0); - netplay::receive_save(netplay.as_mut().unwrap(), "mpk", &mut ui.saves.mempak.0); + netplay::receive_save(netplay.as_mut().unwrap(), "eep", &mut ui.saves.eeprom.data); + netplay::receive_save(netplay.as_mut().unwrap(), "sra", &mut ui.saves.sram.data); + netplay::receive_save(netplay.as_mut().unwrap(), "fla", &mut ui.saves.flash.data); + netplay::receive_save(netplay.as_mut().unwrap(), "mpk", &mut ui.saves.mempak.data); let mut compressed_sd = Vec::new(); netplay::receive_save(netplay.as_mut().unwrap(), "img", &mut compressed_sd); if !compressed_sd.is_empty() { - ui.saves.sdcard.0 = decompress_file(&compressed_sd, "save"); + ui.saves.sdcard.data = decompress_file(&compressed_sd, "save"); } let mut compressed_romsave = Vec::new(); netplay::receive_save(netplay.as_mut().unwrap(), "rom", &mut compressed_romsave); if !compressed_romsave.is_empty() { let romsave_bytes = decompress_file(&compressed_romsave, "save"); - ui.saves.romsave.0 = postcard::from_bytes(&romsave_bytes).unwrap(); + ui.saves.romsave.data = postcard::from_bytes(&romsave_bytes).unwrap(); } } } @@ -299,28 +313,28 @@ pub fn compress_file(data: &[(&[u8], &str)]) -> Vec { } fn write_rom_save(ui: &ui::Ui) { - let data = postcard::to_stdvec(&ui.saves.romsave.0).unwrap(); + let data = postcard::to_stdvec(&ui.saves.romsave.data).unwrap(); std::fs::write(ui.paths.romsave_file_path.clone(), data).unwrap(); } pub fn write_saves(ui: &ui::Ui, netplay: &Option) { if netplay.is_none() || netplay.as_ref().unwrap().player_number == 0 { - if ui.saves.eeprom.1 { + if ui.saves.eeprom.written { write_save(ui, SaveTypes::Eeprom16k) } - if ui.saves.sram.1 { + if ui.saves.sram.written { write_save(ui, SaveTypes::Sram) } - if ui.saves.flash.1 { + if ui.saves.flash.written { write_save(ui, SaveTypes::Flash) } - if ui.saves.mempak.1 { + if ui.saves.mempak.written { write_save(ui, SaveTypes::Mempak) } - if ui.saves.sdcard.1 { + if ui.saves.sdcard.written { write_save(ui, SaveTypes::Sdcard) } - if ui.saves.romsave.1 { + if ui.saves.romsave.written { write_save(ui, SaveTypes::Romsave) } } @@ -332,23 +346,23 @@ fn write_save(ui: &ui::Ui, save_type: SaveTypes) { match save_type { SaveTypes::Eeprom4k | SaveTypes::Eeprom16k => { path = ui.paths.eep_file_path.as_ref(); - data = ui.saves.eeprom.0.as_ref(); + data = ui.saves.eeprom.data.as_ref(); } SaveTypes::Sram => { path = ui.paths.sra_file_path.as_ref(); - data = ui.saves.sram.0.as_ref(); + data = ui.saves.sram.data.as_ref(); } SaveTypes::Flash => { path = ui.paths.fla_file_path.as_ref(); - data = ui.saves.flash.0.as_ref(); + data = ui.saves.flash.data.as_ref(); } SaveTypes::Mempak => { path = ui.paths.pak_file_path.as_ref(); - data = ui.saves.mempak.0.as_ref(); + data = ui.saves.mempak.data.as_ref(); } SaveTypes::Sdcard => { path = ui.paths.sdcard_file_path.as_ref(); - data = ui.saves.sdcard.0.as_ref(); + data = ui.saves.sdcard.data.as_ref(); } SaveTypes::Romsave => { write_rom_save(ui); From 17990dfebc1f63a994084c9767826c364ff16e01 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 17 Feb 2025 13:40:25 +0100 Subject: [PATCH 0329/1117] toggle speed limiter (#260) --- parallel-rdp/interface.cpp | 7 +++++++ parallel-rdp/interface.hpp | 1 + src/device.rs | 1 + src/device/vi.rs | 6 +++--- src/ui/video.rs | 1 + 5 files changed, 13 insertions(+), 3 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 39eb6ff..ab00243 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -152,6 +152,12 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) SDL_SetWindowFullscreen(window, fullscreen); } break; + case SDL_SCANCODE_F: + if (event->key.mod & SDL_KMOD_ALT) + { + callback.enable_speedlimiter = !callback.enable_speedlimiter; + } + break; case SDL_SCANCODE_ESCAPE: if (fullscreen) callback.emu_running = false; @@ -227,6 +233,7 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_sc wsi->begin_frame(); callback.emu_running = true; + callback.enable_speedlimiter = true; } void rdp_close() diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 00fcd9c..5ed2419 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -24,6 +24,7 @@ extern "C" bool emu_running; bool save_state; bool load_state; + bool enable_speedlimiter; } CALL_BACK; void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_scaling, bool _fullscreen); diff --git a/src/device.rs b/src/device.rs index 02e3d6e..7bea184 100644 --- a/src/device.rs +++ b/src/device.rs @@ -435,6 +435,7 @@ impl Device { field: 0, delay: 0, count_per_scanline: 0, + enable_speed_limiter: true, limiter: None, vi_counter: 0, last_origin: 0, diff --git a/src/device/vi.rs b/src/device/vi.rs index d50c45e..28b50e9 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -26,6 +26,7 @@ pub struct Vi { #[serde(skip)] pub limiter: Option, pub count_per_scanline: u64, + pub enable_speed_limiter: bool, pub vi_counter: u64, pub last_origin: u32, pub internal_frame_counter: u64, @@ -139,14 +140,13 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u pub fn vertical_interrupt_event(device: &mut device::Device) { ui::video::check_callback(device); - let mut enable_speed_limiter = true; if device.netplay.is_some() { netplay::send_sync_check(device); - enable_speed_limiter = !device.netplay.as_ref().unwrap().fast_forward; + device.vi.enable_speed_limiter = !device.netplay.as_ref().unwrap().fast_forward; } device.vi.vi_counter += 1; - if device.vi.vi_counter % device.vi.limit_freq == 0 && enable_speed_limiter { + if device.vi.vi_counter % device.vi.limit_freq == 0 && device.vi.enable_speed_limiter { speed_limiter(device); } ui::video::update_screen(); diff --git a/src/ui/video.rs b/src/ui/video.rs index 3bab3a6..af0d0d5 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -92,6 +92,7 @@ pub fn check_callback(device: &mut device::Device) { } else if callback.load_state { device.load_state = true; } + device.vi.enable_speed_limiter = callback.enable_speedlimiter; } } From 656e390171bd64a352a6282a3c9c3b3f5d3dea05 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 17 Feb 2025 22:13:45 +0100 Subject: [PATCH 0330/1117] track RDP RDRAM writes (#259) * track RDP RDRAM writes * more * more * more * more * more --- build.rs | 2 + parallel-rdp/interface.cpp | 93 +++++++++++++++++++++++++++++++++++-- parallel-rdp/interface.hpp | 2 + src/device/rdram.rs | 3 ++ src/device/rsp_interface.rs | 2 + src/savestates.rs | 2 + src/ui/video.rs | 8 ++++ 7 files changed, 108 insertions(+), 4 deletions(-) diff --git a/build.rs b/build.rs index 43eb5b7..0b20db2 100644 --- a/build.rs +++ b/build.rs @@ -101,6 +101,8 @@ fn main() { .allowlist_function("rdp_process_commands") .allowlist_function("rdp_check_callback") .allowlist_function("rdp_new_processor") + .allowlist_function("rdp_check_framebuffers") + .allowlist_function("rdp_full_sync") .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) .generate() .expect("Unable to generate bindings"); diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index ab00243..45a549d 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -64,6 +64,15 @@ static CALL_BACK callback; static GFX_INFO gfx_info; static uint32_t region; +static uint32_t depthbuffer_address; +static uint32_t framebuffer_address; +static uint32_t framebuffer_pixel_size; +static uint32_t framebuffer_width; +static uint32_t framebuffer_height; +static uint8_t depthbuffer_enabled; +static uint8_t *rdram_dirty; +static uint64_t sync_signal; + static const unsigned cmd_len_lut[64] = { 1, 1, @@ -234,10 +243,20 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_sc callback.emu_running = true; callback.enable_speedlimiter = true; + + sync_signal = 0; + rdram_dirty = (uint8_t *)malloc(gfx_info.RDRAM_SIZE / 8); + memset(rdram_dirty, 0, gfx_info.RDRAM_SIZE / 8); } void rdp_close() { + if (rdram_dirty) + { + free(rdram_dirty); + rdram_dirty = nullptr; + } + wsi->end_frame(); if (processor) @@ -369,6 +388,21 @@ CALL_BACK rdp_check_callback() return return_value; } +void rdp_check_framebuffers(uint32_t address) +{ + if (sync_signal && rdram_dirty[address >> 3]) + { + processor->wait_for_timeline(sync_signal); + memset(rdram_dirty, 0, gfx_info.RDRAM_SIZE / 8); + sync_signal = 0; + } +} + +void rdp_full_sync() +{ + processor->wait_for_timeline(processor->signal_timeline()); +} + uint64_t rdp_process_commands() { uint64_t interrupt_timer = 0; @@ -430,18 +464,69 @@ uint64_t rdp_process_commands() if (command >= 8) processor->enqueue_command(cmd_length * 2, &cmd_data[2 * cmd_cur]); - if (RDP::Op(command) == RDP::Op::SetScissor) + if ((RDP::Op(command) >= RDP::Op::FillTriangle && RDP::Op(command) <= RDP::Op::ShadeTextureZBufferTriangle) || + RDP::Op(command) == RDP::Op::TextureRectangle || + RDP::Op(command) == RDP::Op::TextureRectangleFlip || + RDP::Op(command) == RDP::Op::FillRectangle) + { + uint32_t size = 0; + switch (framebuffer_pixel_size) + { + case 0: + size = (framebuffer_width * framebuffer_height / 2) >> 3; + break; + case 1: + size = (framebuffer_width * framebuffer_height) >> 3; + break; + case 2: + size = (framebuffer_width * framebuffer_height * 2) >> 3; + break; + case 3: + size = (framebuffer_width * framebuffer_height * 4) >> 3; + break; + } + + for (uint32_t i = framebuffer_address; i < framebuffer_address + size; ++i) + { + rdram_dirty[i] = 1; + } + + if (depthbuffer_enabled) + { + size = (framebuffer_width * framebuffer_height * 2) >> 3; + + for (uint32_t i = depthbuffer_address; i < depthbuffer_address + size; ++i) + { + rdram_dirty[i] = 1; + } + } + } + else if (RDP::Op(command) == RDP::Op::SetOtherModes) + { + depthbuffer_enabled = (w2 >> 5) & 1; + } + else if (RDP::Op(command) == RDP::Op::SetColorImage) + { + framebuffer_address = (w2 & 0x00FFFFFF) >> 3; + framebuffer_pixel_size = (w1 >> 19) & 0x3; + framebuffer_width = (w1 & 0x3FF) + 1; + } + else if (RDP::Op(command) == RDP::Op::SetMaskImage) + { + depthbuffer_address = (w2 & 0x00FFFFFF) >> 3; + } + else if (RDP::Op(command) == RDP::Op::SetScissor) { uint32_t upper_left_x = ((w1 >> 12) & 0xFFF) >> 2; uint32_t upper_left_y = (w1 & 0xFFF) >> 2; uint32_t lower_right_x = ((w2 >> 12) & 0xFFF) >> 2; uint32_t lower_right_y = (w2 & 0xFFF) >> 2; region = (lower_right_x - upper_left_x) * (lower_right_y - upper_left_y); + framebuffer_height = lower_right_y; } - if (RDP::Op(command) == RDP::Op::SyncFull) + else if (RDP::Op(command) == RDP::Op::SyncFull) { - processor->wait_for_timeline(processor->signal_timeline()); - + sync_signal = processor->signal_timeline(); interrupt_timer = region; if (interrupt_timer == 0) interrupt_timer = 5000; diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 5ed2419..c4786b7 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -34,6 +34,8 @@ extern "C" CALL_BACK rdp_check_callback(); uint64_t rdp_process_commands(); void rdp_new_processor(GFX_INFO _gfx_info, bool _upscale); + void rdp_check_framebuffers(uint32_t address); + void rdp_full_sync(); #ifdef __cplusplus } diff --git a/src/device/rdram.rs b/src/device/rdram.rs index a94a468..a8946bd 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -1,4 +1,5 @@ use crate::device; +use crate::ui; use std::alloc::{alloc_zeroed, Layout}; //const RDRAM_CONFIG_REG: u32 = 0; @@ -46,6 +47,7 @@ pub fn read_mem( ); let masked_address = address as usize & RDRAM_MASK; if address < device.rdram.size as u64 { + ui::video::check_framebuffers(masked_address as u32); u32::from_ne_bytes( device.rdram.mem[masked_address..masked_address + 4] .try_into() @@ -58,6 +60,7 @@ pub fn read_mem( pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { if address < device.rdram.size as u64 { + ui::video::check_framebuffers(address as u32); let mut data = u32::from_ne_bytes( device.rdram.mem[address as usize..(address + 4) as usize] .try_into() diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index 2916cc3..56bc045 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -1,4 +1,5 @@ use crate::device; +use crate::ui; const SP_MEM_ADDR_REG: u32 = 0; const SP_DRAM_ADDR_REG: u32 = 1; @@ -146,6 +147,7 @@ fn do_dma(device: &mut device::Device, dma: RspDma) { let mut dram_addr = dma.dramaddr & 0xfffff8; let offset = dma.memaddr & 0x1000; + ui::video::check_framebuffers(dram_addr); if dma.dir == DmaDir::Read { let mut j = 0; while j < count { diff --git a/src/savestates.rs b/src/savestates.rs index bb80b84..3213f43 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -70,6 +70,8 @@ where } pub fn create_savestate(device: &device::Device) { + ui::video::full_sync(); + let data: &[(&[u8], &str)] = &[ (&postcard::to_stdvec(device).unwrap(), "device"), (&postcard::to_stdvec(&device.ui.saves).unwrap(), "saves"), diff --git a/src/ui/video.rs b/src/ui/video.rs index af0d0d5..0553fed 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -67,6 +67,14 @@ pub fn update_screen() { unsafe { rdp_update_screen() } } +pub fn check_framebuffers(address: u32) { + unsafe { rdp_check_framebuffers(address) } +} + +pub fn full_sync() { + unsafe { rdp_full_sync() } +} + pub fn load_state(device: &mut device::Device) { let gfx_info = GFX_INFO { RDRAM: device.rdram.mem.as_mut_ptr(), From f7bfcfccba42436145d54b9bb22abf16a8035174 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Feb 2025 05:42:01 +0100 Subject: [PATCH 0331/1117] Bump clap from 4.5.29 to 4.5.30 (#261) Bumps [clap](https://github.com/clap-rs/clap) from 4.5.29 to 4.5.30. - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.29...clap_complete-v4.5.30) --- updated-dependencies: - dependency-name: clap dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8ec3edf..10ef470 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -567,9 +567,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.29" +version = "4.5.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acebd8ad879283633b343856142139f2da2317c96b05b4dd6181c61e2480184" +checksum = "92b7b18d71fad5313a1e320fa9897994228ce274b60faa4d694fe0ea89cd9e6d" dependencies = [ "clap_builder", "clap_derive", @@ -577,9 +577,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.29" +version = "4.5.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ba32cbda51c7e1dfd49acc1457ba1a7dec5b64fe360e828acb13ca8dc9c2f9" +checksum = "a35db2071778a7344791a4fb4f95308b5673d219dee3ae348b86642574ecc90c" dependencies = [ "anstream", "anstyle", From 938a99caa9550b8c07f52c3281ed5fc7f86dfd94 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 18 Feb 2025 10:05:48 +0100 Subject: [PATCH 0332/1117] clean up data struct (#262) * clean up data struct * add check * more * more * more --- parallel-rdp/interface.cpp | 93 ++++++++++++++++++++++---------------- src/device/pi.rs | 3 +- 2 files changed, 56 insertions(+), 40 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 45a549d..e7c768e 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -64,14 +64,21 @@ static CALL_BACK callback; static GFX_INFO gfx_info; static uint32_t region; -static uint32_t depthbuffer_address; -static uint32_t framebuffer_address; -static uint32_t framebuffer_pixel_size; -static uint32_t framebuffer_width; -static uint32_t framebuffer_height; -static uint8_t depthbuffer_enabled; +typedef struct +{ + uint32_t depthbuffer_address; + uint32_t framebuffer_address; + uint32_t framebuffer_pixel_size; + uint32_t framebuffer_width; + uint32_t framebuffer_height; + uint32_t framebuffer_size; + uint32_t depthbuffer_size; + uint8_t depthbuffer_enabled; +} FrameBufferInfo; + static uint8_t *rdram_dirty; static uint64_t sync_signal; +static FrameBufferInfo frame_buffer_info; static const unsigned cmd_len_lut[64] = { 1, @@ -187,6 +194,10 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) void rdp_new_processor(GFX_INFO _gfx_info, bool _upscale) { + memset(&frame_buffer_info, 0, sizeof(FrameBufferInfo)); + sync_signal = 0; + memset(rdram_dirty, 0, gfx_info.RDRAM_SIZE / 8); + gfx_info = _gfx_info; if (processor) { @@ -230,6 +241,8 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_sc { rdp_close(); } + + rdram_dirty = (uint8_t *)malloc(gfx_info.RDRAM_SIZE / 8); rdp_new_processor(gfx_info, _upscale); if (!processor->device_is_supported()) @@ -243,10 +256,6 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_sc callback.emu_running = true; callback.enable_speedlimiter = true; - - sync_signal = 0; - rdram_dirty = (uint8_t *)malloc(gfx_info.RDRAM_SIZE / 8); - memset(rdram_dirty, 0, gfx_info.RDRAM_SIZE / 8); } void rdp_close() @@ -403,6 +412,26 @@ void rdp_full_sync() processor->wait_for_timeline(processor->signal_timeline()); } +void calculate_buffer_size() +{ + switch (frame_buffer_info.framebuffer_pixel_size) + { + case 0: + frame_buffer_info.framebuffer_size = (frame_buffer_info.framebuffer_width * frame_buffer_info.framebuffer_height / 2) >> 3; + break; + case 1: + frame_buffer_info.framebuffer_size = (frame_buffer_info.framebuffer_width * frame_buffer_info.framebuffer_height) >> 3; + break; + case 2: + frame_buffer_info.framebuffer_size = (frame_buffer_info.framebuffer_width * frame_buffer_info.framebuffer_height * 2) >> 3; + break; + case 3: + frame_buffer_info.framebuffer_size = (frame_buffer_info.framebuffer_width * frame_buffer_info.framebuffer_height * 4) >> 3; + break; + } + frame_buffer_info.depthbuffer_size = (frame_buffer_info.framebuffer_width * frame_buffer_info.framebuffer_height * 2) >> 3; +} + uint64_t rdp_process_commands() { uint64_t interrupt_timer = 0; @@ -469,33 +498,17 @@ uint64_t rdp_process_commands() RDP::Op(command) == RDP::Op::TextureRectangleFlip || RDP::Op(command) == RDP::Op::FillRectangle) { - uint32_t size = 0; - switch (framebuffer_pixel_size) + if (!rdram_dirty[frame_buffer_info.framebuffer_address]) { - case 0: - size = (framebuffer_width * framebuffer_height / 2) >> 3; - break; - case 1: - size = (framebuffer_width * framebuffer_height) >> 3; - break; - case 2: - size = (framebuffer_width * framebuffer_height * 2) >> 3; - break; - case 3: - size = (framebuffer_width * framebuffer_height * 4) >> 3; - break; + for (uint32_t i = frame_buffer_info.framebuffer_address; i < frame_buffer_info.framebuffer_address + frame_buffer_info.framebuffer_size; ++i) + { + rdram_dirty[i] = 1; + } } - for (uint32_t i = framebuffer_address; i < framebuffer_address + size; ++i) + if (frame_buffer_info.depthbuffer_enabled && !rdram_dirty[frame_buffer_info.depthbuffer_address]) { - rdram_dirty[i] = 1; - } - - if (depthbuffer_enabled) - { - size = (framebuffer_width * framebuffer_height * 2) >> 3; - - for (uint32_t i = depthbuffer_address; i < depthbuffer_address + size; ++i) + for (uint32_t i = frame_buffer_info.depthbuffer_address; i < frame_buffer_info.depthbuffer_address + frame_buffer_info.depthbuffer_size; ++i) { rdram_dirty[i] = 1; } @@ -503,17 +516,18 @@ uint64_t rdp_process_commands() } else if (RDP::Op(command) == RDP::Op::SetOtherModes) { - depthbuffer_enabled = (w2 >> 5) & 1; + frame_buffer_info.depthbuffer_enabled = (w2 >> 5) & 1; } else if (RDP::Op(command) == RDP::Op::SetColorImage) { - framebuffer_address = (w2 & 0x00FFFFFF) >> 3; - framebuffer_pixel_size = (w1 >> 19) & 0x3; - framebuffer_width = (w1 & 0x3FF) + 1; + frame_buffer_info.framebuffer_address = (w2 & 0x00FFFFFF) >> 3; + frame_buffer_info.framebuffer_pixel_size = (w1 >> 19) & 0x3; + frame_buffer_info.framebuffer_width = (w1 & 0x3FF) + 1; + calculate_buffer_size(); } else if (RDP::Op(command) == RDP::Op::SetMaskImage) { - depthbuffer_address = (w2 & 0x00FFFFFF) >> 3; + frame_buffer_info.depthbuffer_address = (w2 & 0x00FFFFFF) >> 3; } else if (RDP::Op(command) == RDP::Op::SetScissor) { @@ -522,7 +536,8 @@ uint64_t rdp_process_commands() uint32_t lower_right_x = ((w2 >> 12) & 0xFFF) >> 2; uint32_t lower_right_y = (w2 & 0xFFF) >> 2; region = (lower_right_x - upper_left_x) * (lower_right_y - upper_left_y); - framebuffer_height = lower_right_y; + frame_buffer_info.framebuffer_height = lower_right_y; + calculate_buffer_size(); } else if (RDP::Op(command) == RDP::Op::SyncFull) { diff --git a/src/device/pi.rs b/src/device/pi.rs index 039b93d..bf617d9 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -1,4 +1,4 @@ -use crate::device; +use crate::{device, ui}; const PI_DRAM_ADDR_REG: u32 = 0; const PI_CART_ADDR_REG: u32 = 1; @@ -86,6 +86,7 @@ fn dma_write(device: &mut device::Device) { let cart_addr = device.pi.regs[PI_CART_ADDR_REG as usize] & !1; let dram_addr = device.pi.regs[PI_DRAM_ADDR_REG as usize] & 0xFFFFFE; let mut length = (device.pi.regs[PI_WR_LEN_REG as usize] & 0xFFFFFF) + 1; + ui::video::check_framebuffers(dram_addr); /* PI seems to treat the first 128 bytes differently, see https://n64brew.dev/wiki/Peripheral_Interface#Unaligned_DMA_transfer */ if length >= 0x7f && (length & 1) != 0 { From bb2da243b33def4cd978cc0937345d7ebe72e280 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 18 Feb 2025 13:38:38 +0100 Subject: [PATCH 0333/1117] fix hotkeys --- parallel-rdp/interface.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index e7c768e..ee1a122 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -157,8 +157,10 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { wsi_platform->do_resize(); } - else if (event->type == SDL_EVENT_KEY_UP) + else if (event->type == SDL_EVENT_KEY_DOWN) { + if (event->key.repeat) + return 0; switch (event->key.scancode) { case SDL_SCANCODE_RETURN: From b01c2d1885abf2126a71df427ef78e75d7d4c014 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 18 Feb 2025 14:25:24 +0100 Subject: [PATCH 0334/1117] use key down for input --- parallel-rdp/interface.cpp | 4 +--- src/ui/input.rs | 5 +++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index ee1a122..17f39e5 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -157,10 +157,8 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { wsi_platform->do_resize(); } - else if (event->type == SDL_EVENT_KEY_DOWN) + else if (event->type == SDL_EVENT_KEY_DOWN && !event->key.repeat) { - if (event->key.repeat) - return 0; switch (event->key.scancode) { case SDL_SCANCODE_RETURN: diff --git a/src/ui/input.rs b/src/ui/input.rs index b4a1fc5..d69ab7a 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -554,9 +554,10 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { if event_type == u32::from(sdl3_sys::events::SDL_EVENT_WINDOW_CLOSE_REQUESTED) { close_controllers(open_joysticks, open_controllers); return; - } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_KEY_UP) { + } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_KEY_DOWN) { if unsafe { - event.key.scancode != sdl3_sys::scancode::SDL_SCANCODE_LALT + !event.key.repeat + && event.key.scancode != sdl3_sys::scancode::SDL_SCANCODE_LALT && event.key.scancode != sdl3_sys::scancode::SDL_SCANCODE_RALT } { new_keys[*value] = ui::config::InputKeyButton { From 5bdb54a911c6b4877f310e845101ee963dfbe6f2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 19 Feb 2025 10:52:26 +0100 Subject: [PATCH 0335/1117] Update README.md --- README.md | 32 ++++---------------------------- 1 file changed, 4 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index f643a9c..7104393 100644 --- a/README.md +++ b/README.md @@ -1,41 +1,17 @@ # gopher64 -(gopher64 also has a GUI that can be launched by just running the executable) +Gopher64 can be used via its GUI or the command line. -``` -Usage: gopher64 [OPTIONS] [GAME] +## wiki -Arguments: - [GAME] +https://github.com/gopher64/gopher64/wiki -Options: - -f, --fullscreen - - -c, --configure-input-profile - Create a new input profile (keyboard/gamepad mappings). - -u, --use-dinput - Use DirectInput when configuring a new input profile. - -b, --bind-input-profile - Must also specify --port. Used to bind a previously created profile to a port - -l, --list-controllers - Lists connected controllers which can be used in --assign-controller - -a, --assign-controller - Must also specify --port. Used to assign a controller listed in --list-controllers to a port - -p, --port - Valid values: 1-4. To be used alongside --bind-input-profile and --assign-controller - -z, --clear-input-bindings - Clear all input profile bindings and controller assignments - -h, --help - Print help - -V, --version - Print version -``` ## discord https://discord.gg/9RGXq8W8JQ ## controls -Keys are mapped according to mupen64plus defaults: https://mupen64plus.org/wiki/index.php/KeyboardSetup#2._Default_Key_Mappings_for_SDL-Input_Plugin. Xbox-style controllers also have a default mapping applied. +Keys are mapped according to [these defaults](https://github.com/gopher64/gopher64/wiki/Default-Keyboard-Setup). Xbox-style controllers also have a [default mapping applied](https://github.com/gopher64/gopher64/wiki/Default-Gamepad-Setup). You can create you own mappings by running `./gopher64 --configure-input-profile my_profile`. You then bind that profile to a port: `./gopher64 --bind-input-profile my_profile --port 1` From 792a3a6476d96abec002c37b73a6973fa4db0786 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 19 Feb 2025 11:26:55 +0100 Subject: [PATCH 0336/1117] reduce binary size (#263) --- Cargo.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index f35a121..2de8fc4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,3 +39,5 @@ cc = { version = "1.2", features = ["parallel"] } [profile.release] codegen-units = 1 +strip = true +panic = "abort" From c363e78fbb3c37b8535091590ee0b6c8738a5dea Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 19 Feb 2025 14:48:36 +0100 Subject: [PATCH 0337/1117] add slider for resolution (#264) * add slider for resolution * more --- parallel-rdp/interface.cpp | 15 +++++++++++---- parallel-rdp/interface.hpp | 4 ++-- src/ui/config.rs | 4 ++-- src/ui/gui.rs | 23 ++++++++++++++++++++--- 4 files changed, 35 insertions(+), 11 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 17f39e5..6cb0831 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -192,7 +192,7 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) return 0; } -void rdp_new_processor(GFX_INFO _gfx_info, bool _upscale) +void rdp_new_processor(GFX_INFO _gfx_info, uint32_t upscale) { memset(&frame_buffer_info, 0, sizeof(FrameBufferInfo)); sync_signal = 0; @@ -204,15 +204,22 @@ void rdp_new_processor(GFX_INFO _gfx_info, bool _upscale) delete processor; } RDP::CommandProcessorFlags flags = 0; - if (_upscale) + + if (upscale == 2) { - flags |= RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_2X_BIT; flags |= RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT; + flags |= RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_2X_BIT; } + else if (upscale == 4) + { + flags |= RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT; + flags |= RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_4X_BIT; + } + processor = new RDP::CommandProcessor(wsi->get_device(), gfx_info.RDRAM, 0, gfx_info.RDRAM_SIZE, gfx_info.RDRAM_SIZE / 2, flags); } -void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_scaling, bool _fullscreen) +void rdp_init(void *_window, GFX_INFO _gfx_info, uint32_t _upscale, bool _integer_scaling, bool _fullscreen) { window = (SDL_Window *)_window; bool result = SDL_AddEventWatch(sdl_event_filter, nullptr); diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index c4786b7..fceaa82 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -27,13 +27,13 @@ extern "C" bool enable_speedlimiter; } CALL_BACK; - void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_scaling, bool _fullscreen); + void rdp_init(void *_window, GFX_INFO _gfx_info, uint32_t _upscale, bool _integer_scaling, bool _fullscreen); void rdp_close(); void rdp_set_vi_register(uint32_t reg, uint32_t value); void rdp_update_screen(); CALL_BACK rdp_check_callback(); uint64_t rdp_process_commands(); - void rdp_new_processor(GFX_INFO _gfx_info, bool _upscale); + void rdp_new_processor(GFX_INFO _gfx_info, uint32_t _upscale); void rdp_check_framebuffers(uint32_t address); void rdp_full_sync(); diff --git a/src/ui/config.rs b/src/ui/config.rs index 0c1844d..09f72d1 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -41,7 +41,7 @@ pub struct Input { } #[derive(serde::Serialize, serde::Deserialize)] pub struct Video { - pub upscale: bool, + pub upscale: u32, pub integer_scaling: bool, pub fullscreen: bool, } @@ -91,7 +91,7 @@ impl Config { emulate_vru: false, }, video: Video { - upscale: false, + upscale: 1, integer_scaling: false, fullscreen: false, }, diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 4f0af7e..ea848f0 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -13,7 +13,7 @@ pub struct GopherEguiApp { input_profiles: Vec, controller_enabled: [bool; 4], controller_paths: Vec, - upscale: bool, + upscale: u32, integer_scaling: bool, fullscreen: bool, emulate_vru: bool, @@ -29,7 +29,7 @@ struct SaveConfig { selected_controller: [i32; 4], selected_profile: [String; 4], controller_enabled: [bool; 4], - upscale: bool, + upscale: u32, integer_scaling: bool, fullscreen: bool, emulate_vru: bool, @@ -457,7 +457,24 @@ impl eframe::App for GopherEguiApp { } }); ui.add_space(32.0); - ui.checkbox(&mut self.upscale, "High-Res Graphics"); + let upscale_values = [1, 2, 4]; + let mut slider_value = match self.upscale { + 1 => 0, + 2 => 1, + 4 => 2, + _ => 0, + }; + let display_text = format!("{}x Resolution", upscale_values[slider_value]); + if ui + .add( + egui::Slider::new(&mut slider_value, 0..=2) + .show_value(false) + .text(display_text), + ) + .changed() + { + self.upscale = upscale_values[slider_value]; + }; ui.checkbox(&mut self.integer_scaling, "Integer Scaling"); ui.checkbox(&mut self.fullscreen, "Fullscreen (Esc closes game)"); ui.add_space(32.0); From d262567084b19031430b2bc7732c5040f12314ff Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 19 Feb 2025 20:57:03 +0100 Subject: [PATCH 0338/1117] use struct in netplay code (#265) * use struct in netplay code * more --- src/device/cart/rom.rs | 7 ++- src/ui/gui/gui_netplay.rs | 124 ++++++++++++++++++++++++-------------- 2 files changed, 82 insertions(+), 49 deletions(-) diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index f33fb1d..ad5fd58 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -128,7 +128,7 @@ pub fn dma_write( pub fn init(device: &mut device::Device, rom_file: Vec) { device.cart.rom = rom_file; - set_system_region(device, device.cart.rom[0x3E]); + device.cart.pal = is_system_pal(device.cart.rom[0x3E]); set_cic(device); device.ui.game_hash = calculate_hash(&device.cart.rom); @@ -139,13 +139,14 @@ pub fn init(device: &mut device::Device, rom_file: Vec) { } } -fn set_system_region(device: &mut device::Device, country: u8) { +fn is_system_pal(country: u8) -> bool { let pal_codes: [u8; 8] = [b'D', b'F', b'I', b'P', b'S', b'U', b'X', b'Y']; for i in pal_codes { if country == i { - device.cart.pal = true + return true; } } + false } fn set_cic(device: &mut device::Device) { diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index 13ce59e..d09412c 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -7,7 +7,19 @@ use sha2::{Digest, Sha256}; const NETPLAY_VERSION: i32 = 17; const EMU_NAME: &str = "gopher64"; -type GameInfo = (String, String, String, Vec); +#[derive(Default)] +pub struct GameInfo { + pub md5: String, + pub game_name: String, + pub rom_label: String, + pub rom_contents: Vec, +} + +#[derive(PartialEq, Default)] +pub struct NetplayServer { + pub name: String, + pub ip: String, +} #[derive(Default)] pub struct GuiNetplay { @@ -21,7 +33,7 @@ pub struct GuiNetplay { pub create_rom_label: String, pub join_rom_label: String, pub send_chat: bool, - pub have_sessions: Option<(String, String)>, + pub have_sessions: Option, pub begin_game: bool, pub chat_log: String, pub chat_message: String, @@ -33,7 +45,7 @@ pub struct GuiNetplay { pub rom_contents: Vec, pub player_number: u8, pub player_names: [String; 4], - pub server: (String, String), + pub server: NetplayServer, pub socket_waiting: bool, pub game_info: GameInfo, pub servers: std::collections::HashMap, @@ -134,7 +146,10 @@ fn get_servers(app: &mut GopherEguiApp, ctx: &egui::Context) { app.netplay .servers .insert(server_name.to_string(), server_ip.to_string()); - app.netplay.server = (server.0.clone(), server.1.clone()); + app.netplay.server = NetplayServer { + name: server.0.clone(), + ip: server.1.clone(), + }; } app.netplay.broadcast_socket = None; } @@ -145,9 +160,12 @@ fn get_servers(app: &mut GopherEguiApp, ctx: &egui::Context) { if result.is_ok() { app.netplay.servers.extend(result.unwrap()); app.netplay.server_receiver = None; - if app.netplay.server.0.is_empty() { + if app.netplay.server.name.is_empty() { let first_server = app.netplay.servers.iter().next().unwrap(); - app.netplay.server = (first_server.0.clone(), first_server.1.clone()); + app.netplay.server = NetplayServer { + name: first_server.0.clone(), + ip: first_server.1.clone(), + }; } } ctx.request_repaint(); @@ -190,12 +208,12 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { if let Some(file) = file { parse_rom_file(file, tx).await; } else { - tx.send(( - "".to_string(), - "".to_string(), - "Open ROM".to_string(), - vec![], - )) + tx.send(GameInfo { + md5: "".to_string(), + game_name: "".to_string(), + rom_label: "Open ROM".to_string(), + rom_contents: vec![], + }) .await .unwrap(); } @@ -221,24 +239,27 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { if result.is_ok() { app.netplay.game_info_receiver = None; let data = result.unwrap(); - if !data.0.is_empty() { + if !data.md5.is_empty() { app.netplay.game_info = data; - app.netplay.rom_contents = app.netplay.game_info.3.clone(); - app.netplay.create_rom_label = app.netplay.game_info.2.clone(); + app.netplay.rom_contents = app.netplay.game_info.rom_contents.clone(); + app.netplay.create_rom_label = app.netplay.game_info.rom_label.clone(); } else { - app.netplay.create_rom_label = data.2; + app.netplay.create_rom_label = data.rom_label; } } ctx.request_repaint(); } egui::ComboBox::from_id_salt("server-combobox") - .selected_text(app.netplay.server.0.to_string()) + .selected_text(app.netplay.server.name.to_string()) .show_ui(ui, |ui| { for server in app.netplay.servers.iter() { ui.selectable_value( &mut app.netplay.server, - (server.0.clone(), server.1.clone()), + NetplayServer { + name: server.0.clone(), + ip: server.1.clone(), + }, server.0, ); } @@ -271,12 +292,12 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { app.netplay.error = "Player Name cannot be empty".to_string(); } else if app.netplay.session_name.is_empty() { app.netplay.error = "Session Name cannot be empty".to_string(); - } else if app.netplay.game_info.0.is_empty() { + } else if app.netplay.game_info.md5.is_empty() { app.netplay.error = "ROM not loaded".to_string(); } else { let now_utc = chrono::Utc::now().timestamp_millis().to_string(); let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); - let mut game_name = app.netplay.game_info.1.to_string(); + let mut game_name = app.netplay.game_info.game_name.to_string(); if game_name.is_empty() { // If the ROM doesn't report a name, use the filename game_name = app.netplay.create_rom_label.clone(); @@ -297,13 +318,13 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { room_name: Some(app.netplay.session_name.clone()), password: Some(app.netplay.password.clone()), game_name: Some(game_name), - md5: Some(app.netplay.game_info.0.clone()), + md5: Some(app.netplay.game_info.md5.clone()), protected: None, port: None, }), }; let (mut socket, _response) = - tungstenite::connect(&app.netplay.server.1).expect("Can't connect"); + tungstenite::connect(&app.netplay.server.ip).expect("Can't connect"); socket .send(tungstenite::Message::Binary(tungstenite::Bytes::from( serde_json::to_vec(&netplay_message).unwrap(), @@ -350,7 +371,7 @@ fn get_sessions(app: &mut GopherEguiApp, ctx: &egui::Context) { } if app.netplay.socket.is_none() { let (mut sock, _response) = - tungstenite::connect(&app.netplay.server.1).expect("Can't connect"); + tungstenite::connect(&app.netplay.server.ip).expect("Can't connect"); match sock.get_mut() { tungstenite::stream::MaybeTlsStream::Plain(stream) => { app.netplay.peer_addr = Some(stream.peer_addr().unwrap()); @@ -385,7 +406,10 @@ fn get_sessions(app: &mut GopherEguiApp, ctx: &egui::Context) { serde_json::to_vec(&request_rooms).unwrap(), ))) .unwrap(); - app.netplay.have_sessions = Some(app.netplay.server.clone()); + app.netplay.have_sessions = Some(NetplayServer { + name: app.netplay.server.name.clone(), + ip: app.netplay.server.ip.clone(), + }); app.netplay.socket_waiting = true; ctx.request_repaint(); } @@ -397,16 +421,21 @@ async fn parse_rom_file(file: rfd::FileHandle, tx: tokio::sync::mpsc::Sender Date: Thu, 20 Feb 2025 12:46:44 +0100 Subject: [PATCH 0339/1117] use better data struct for netplay servers (#269) * use better data struct for netplay servers * more --- src/ui/gui/gui_netplay.rs | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index d09412c..6f5e4ad 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -48,7 +48,7 @@ pub struct GuiNetplay { pub server: NetplayServer, pub socket_waiting: bool, pub game_info: GameInfo, - pub servers: std::collections::HashMap, + pub servers: Vec, pub waiting_session: Option, pub socket: Option>>, @@ -143,9 +143,10 @@ fn get_servers(app: &mut GopherEguiApp, ctx: &egui::Context) { serde_json::from_slice(&buffer[..amt]).unwrap(); for server in data.iter() { let (server_name, server_ip) = server; - app.netplay - .servers - .insert(server_name.to_string(), server_ip.to_string()); + app.netplay.servers.push(NetplayServer { + name: server_name.to_string(), + ip: server_ip.to_string(), + }); app.netplay.server = NetplayServer { name: server.0.clone(), ip: server.1.clone(), @@ -158,13 +159,18 @@ fn get_servers(app: &mut GopherEguiApp, ctx: &egui::Context) { if app.netplay.server_receiver.is_some() { let result = app.netplay.server_receiver.as_mut().unwrap().try_recv(); if result.is_ok() { - app.netplay.servers.extend(result.unwrap()); + for server in result.unwrap().iter() { + app.netplay.servers.push(NetplayServer { + name: server.0.clone(), + ip: server.1.clone(), + }); + } app.netplay.server_receiver = None; if app.netplay.server.name.is_empty() { - let first_server = app.netplay.servers.iter().next().unwrap(); + let first_server = app.netplay.servers.first().unwrap(); app.netplay.server = NetplayServer { - name: first_server.0.clone(), - ip: first_server.1.clone(), + name: first_server.name.clone(), + ip: first_server.ip.clone(), }; } } @@ -257,10 +263,10 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { ui.selectable_value( &mut app.netplay.server, NetplayServer { - name: server.0.clone(), - ip: server.1.clone(), + name: server.name.clone(), + ip: server.ip.clone(), }, - server.0, + server.name.clone(), ); } }); @@ -536,10 +542,10 @@ pub fn netplay_join(app: &mut GopherEguiApp, ctx: &egui::Context) { ui.selectable_value( &mut app.netplay.server, NetplayServer { - name: server.0.clone(), - ip: server.1.clone(), + name: server.name.clone(), + ip: server.ip.clone(), }, - server.0, + server.name.clone(), ); } }); From 6ecedde329146cae1a154f2403e5605a8f1d7b5c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 20 Feb 2025 16:12:31 +0100 Subject: [PATCH 0340/1117] add note about building on linux --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7104393..bb03aed 100644 --- a/README.md +++ b/README.md @@ -33,11 +33,12 @@ If you would like to keep all the game data in the same folder as executable, yo ## building and usage -1. Install rust: https://www.rust-lang.org/tools/install -2. `git clone --recursive https://github.com/gopher64/gopher64.git` -3. `cd gopher64` -4. `cargo build --release` -5. `./target/release/gopher64 /path/to/rom.z64` +1. Linux only: install the SDL3 dependencies: https://wiki.libsdl.org/SDL3/README/linux +2. Install rust: https://www.rust-lang.org/tools/install +3. `git clone --recursive https://github.com/gopher64/gopher64.git` +4. `cd gopher64` +5. `cargo build --release` +6. `./target/release/gopher64 /path/to/rom.z64` ## contributing From b7509a2425e2b75be543dc77b2ca002397b13086 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 20 Feb 2025 18:20:55 +0100 Subject: [PATCH 0341/1117] use rust 2024 edition (#268) --- Cargo.toml | 4 ++-- src/device/rdram.rs | 2 +- src/savestates.rs | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 2de8fc4..9713718 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "gopher64" version = "1.0.8" -edition = "2021" -rust-version = "1.82" +edition = "2024" +rust-version = "1.85" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src/device/rdram.rs b/src/device/rdram.rs index a8946bd..71cf496 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -1,6 +1,6 @@ use crate::device; use crate::ui; -use std::alloc::{alloc_zeroed, Layout}; +use std::alloc::{Layout, alloc_zeroed}; //const RDRAM_CONFIG_REG: u32 = 0; //const RDRAM_DEVICE_ID_REG: u32 = 1; diff --git a/src/savestates.rs b/src/savestates.rs index 3213f43..375325e 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -191,8 +191,8 @@ where [device::cop0::reserved; N] } -pub fn default_memory_read( -) -> [fn(&mut device::Device, u64, device::memory::AccessSize) -> u32; 0x2000] { +pub fn default_memory_read() +-> [fn(&mut device::Device, u64, device::memory::AccessSize) -> u32; 0x2000] { [device::rdram::read_mem; 0x2000] } From b6c805a27dc102a692d773f8c256abdd23bc57f6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 20 Feb 2025 18:21:15 +0100 Subject: [PATCH 0342/1117] update cargo packages --- Cargo.lock | 122 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 86 insertions(+), 36 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 10ef470..29048e9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "ab_glyph" @@ -54,7 +54,7 @@ dependencies = [ "getrandom 0.2.15", "once_cell", "version_check", - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -215,7 +215,7 @@ dependencies = [ "enumflags2", "futures-channel", "futures-util", - "rand", + "rand 0.8.5", "raw-window-handle", "serde", "serde_repr", @@ -887,9 +887,9 @@ dependencies = [ [[package]] name = "document-features" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0" +checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" dependencies = [ "litrs", ] @@ -1529,7 +1529,7 @@ dependencies = [ "parking_lot", "portable-atomic", "quanta", - "rand", + "rand 0.8.5", "smallvec", "spinning_top", ] @@ -1575,9 +1575,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" dependencies = [ "atomic-waker", "bytes", @@ -2821,7 +2821,7 @@ version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -2908,7 +2908,7 @@ checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ "bytes", "getrandom 0.2.15", - "rand", + "rand 0.8.5", "ring", "rustc-hash 2.1.1", "rustls", @@ -2950,8 +2950,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.1", + "zerocopy 0.8.20", ] [[package]] @@ -2961,7 +2972,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.1", ] [[package]] @@ -2974,10 +2995,20 @@ dependencies = [ ] [[package]] -name = "raw-cpuid" -version = "11.3.0" +name = "rand_core" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6928fa44c097620b706542d428957635951bade7143269085389d42c8a4927e" +checksum = "a88e0da7a2c97baa202165137c158d0a2e824ac465d13d81046727b34cb247d3" +dependencies = [ + "getrandom 0.3.1", + "zerocopy 0.8.20", +] + +[[package]] +name = "raw-cpuid" +version = "11.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "529468c1335c1c03919960dfefdb1b3648858c20d7ec2d0663e728e4a717efbc" dependencies = [ "bitflags 2.8.0", ] @@ -3292,9 +3323,9 @@ checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" [[package]] name = "serde" -version = "1.0.217" +version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" dependencies = [ "serde_derive", ] @@ -3310,9 +3341,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.217" +version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" dependencies = [ "proc-macro2", "quote", @@ -3321,9 +3352,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.138" +version = "1.0.139" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" +checksum = "44f86c3acccc9c65b153fe1b85a3be07fe5515274ec9f0653b4a0875731c72a6" dependencies = [ "itoa", "memchr", @@ -3608,9 +3639,9 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.16.0" +version = "3.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91" +checksum = "22e5a0acb1f3f55f65cc4a866c361b2fb2a0ff6366785ae6fbb5f85df07ba230" dependencies = [ "cfg-if", "fastrand", @@ -3891,17 +3922,16 @@ checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" [[package]] name = "tungstenite" -version = "0.26.1" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413083a99c579593656008130e29255e54dcaae495be556cc26888f211648c24" +checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" dependencies = [ - "byteorder", "bytes", "data-encoding", "http", "httparse", "log", - "rand", + "rand 0.9.0", "sha1", "thiserror 2.0.11", "utf-8", @@ -3918,9 +3948,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "uds_windows" @@ -3935,9 +3965,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" +checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe" [[package]] name = "unicode-segmentation" @@ -4765,9 +4795,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59690dea168f2198d1a3b0cac23b8063efcd11012f10ae4698f284808c8ef603" +checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1" dependencies = [ "memchr", ] @@ -4963,7 +4993,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", - "zerocopy-derive", + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde3bb8c68a8f3f1ed4ac9221aad6b10cece3e60a8e2ea54a6a2dec806d0084c" +dependencies = [ + "zerocopy-derive 0.8.20", ] [[package]] @@ -4977,6 +5016,17 @@ dependencies = [ "syn", ] +[[package]] +name = "zerocopy-derive" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eea57037071898bf96a6da35fd626f4f27e9cee3ead2a6c703cf09d472b2e700" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "zerofrom" version = "0.1.5" @@ -5060,7 +5110,7 @@ dependencies = [ "lzma-rs", "memchr", "pbkdf2", - "rand", + "rand 0.8.5", "sha1", "thiserror 2.0.11", "time", From 97839fae40fdb343c101f070cbd62ee2fcc76711 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 20 Feb 2025 18:44:15 +0100 Subject: [PATCH 0343/1117] Bump to 1.0.9 (#272) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 29048e9..f6f3215 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1482,7 +1482,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.0.8" +version = "1.0.9" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index 9713718..204f9b2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.8" +version = "1.0.9" edition = "2024" rust-version = "1.85" From a06836378764768404f2158bc077348b42add2c1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 20 Feb 2025 20:12:25 +0100 Subject: [PATCH 0344/1117] Add note about command line flatpak usage --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index bb03aed..b24209f 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,14 @@ Gopher64 supports netplay (online play with others). It has a few public netplay If you would like to keep all the game data in the same folder as executable, you just need to create a file called "portable.txt" in the same directory as the executable. +## flatpak + +If you want to run the flatpak from the command line, you need to add the `--filesystem=host:ro` option, for example: + +``` +flatpak run --filesystem=host:ro io.github.gopher64.gopher64 /path/to/rom.z64 +``` + ## goals 1. Performance. I want to be able to use this emulator on my laptop. From bc415821d67d64c1b664fe314c174a9b6db1ad09 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 21 Feb 2025 23:02:16 +0100 Subject: [PATCH 0345/1117] check for new version (#273) * check for new version * more --- Cargo.lock | 37 ++++++++++++++++---------------- Cargo.toml | 1 + src/ui/gui.rs | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 18 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f6f3215..e2b3317 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -485,9 +485,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.14" +version = "1.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c3d1b2e905a3a7b00a6141adb0e4c0bb941d11caf55349d863942a1cc44e3c9" +checksum = "c736e259eea577f443d5c86c304f9f4ae0295c43f3ba05c21f1d66b5f06001af" dependencies = [ "jobserver", "libc", @@ -1500,6 +1500,7 @@ dependencies = [ "rfd", "rusttype", "sdl3-sys", + "semver", "serde", "serde-big-array", "serde_json", @@ -1956,9 +1957,9 @@ dependencies = [ [[package]] name = "inout" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ "generic-array", ] @@ -2088,7 +2089,7 @@ checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.8.0", "libc", - "redox_syscall 0.5.8", + "redox_syscall 0.5.9", ] [[package]] @@ -2127,9 +2128,9 @@ checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" [[package]] name = "log" -version = "0.4.25" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" +checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" [[package]] name = "lzma-rs" @@ -2691,7 +2692,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.8", + "redox_syscall 0.5.9", "smallvec", "windows-targets 0.52.6", ] @@ -3030,9 +3031,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +checksum = "82b568323e98e49e2a0899dcee453dd679fae22d69adf9b11dd508d1549b7e2f" dependencies = [ "bitflags 2.8.0", ] @@ -3154,9 +3155,9 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.9" +version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e75ec5e92c4d8aede845126adc388046234541629e76029599ed35a003c7ed24" +checksum = "d34b5020fcdea098ef7d95e9f89ec15952123a4a039badd09fabebe9e963e839" dependencies = [ "cc", "cfg-if", @@ -5135,27 +5136,27 @@ dependencies = [ [[package]] name = "zstd" -version = "0.13.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "7.2.1" +version = "7.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" +checksum = "f3051792fbdc2e1e143244dc28c60f73d8470e93f3f9cbd0ead44da5ed802722" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.13+zstd.1.5.6" +version = "2.0.14+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +checksum = "8fb060d4926e4ac3a3ad15d864e99ceb5f343c6b34f5bd6d81ae6ed417311be5" dependencies = [ "cc", "pkg-config", diff --git a/Cargo.toml b/Cargo.toml index 204f9b2..5892a8d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,6 +28,7 @@ regex = "1.11" tungstenite = "0.26" socket2 = "0.5" fatfs = "0.3" +semver = "1.0" postcard = { version = "1.1", features = ["use-std"] } clap = { version = "4.5", features = ["derive"] } reqwest = { version = "0.12", default-features = false, features = ["http2","rustls-tls","charset","json"] } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index ea848f0..0c9b538 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -22,9 +22,16 @@ pub struct GopherEguiApp { vru_window_receiver: Option>>, vru_word_notifier: Option>, vru_word_list: Vec, + latest_version: Option, + update_receiver: Option>, pub netplay: gui_netplay::GuiNetplay, } +#[derive(serde::Deserialize)] +struct GithubData { + tag_name: String, +} + struct SaveConfig { selected_controller: [i32; 4], selected_profile: [String; 4], @@ -112,6 +119,8 @@ impl GopherEguiApp { controller_paths, vru_window_receiver: None, vru_word_notifier: None, + latest_version: None, + update_receiver: None, vru_word_list: Vec::new(), netplay: Default::default(), dirs: ui::get_dirs(), @@ -237,6 +246,45 @@ fn show_vru_dialog(app: &mut GopherEguiApp, ctx: &egui::Context) { ); } +fn get_latest_version(app: &mut GopherEguiApp, ctx: &egui::Context) { + if app.update_receiver.is_none() { + let (tx, rx) = tokio::sync::mpsc::channel(1); + app.update_receiver = Some(rx); + let gui_ctx = ctx.clone(); + let client = reqwest::Client::builder() + .user_agent(env!("CARGO_PKG_NAME")) + .build() + .unwrap(); + let task = client + .get("https://api.github.com/repos/gopher64/gopher64/releases/latest") + .send(); + tokio::spawn(async move { + let response = task.await; + if let Ok(response) = response { + let data: Result = response.json().await; + if data.is_ok() { + tx.send(data.unwrap()).await.unwrap(); + } else { + tx.send(GithubData { + tag_name: format!("v{}", env!("CARGO_PKG_VERSION")), + }) + .await + .unwrap(); + } + gui_ctx.request_repaint(); + } + }); + } else if app.latest_version.is_none() { + let result = app.update_receiver.as_mut().unwrap().try_recv(); + if result.is_ok() { + let tag = &result.unwrap().tag_name[1..]; + app.latest_version = Some(semver::Version::parse(tag).unwrap()); + } else { + ctx.request_repaint(); + } + } +} + pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { let netplay; @@ -486,6 +534,15 @@ impl eframe::App for GopherEguiApp { ui.add_space(32.0); ui.label(format!("Version: {}", env!("CARGO_PKG_VERSION"))); + if self.latest_version.is_some() { + let current_version = semver::Version::parse(env!("CARGO_PKG_VERSION")).unwrap(); + if current_version < *self.latest_version.as_ref().unwrap() { + ui.hyperlink_to( + "New version available!", + "https://github.com/gopher64/gopher64/releases/latest", + ); + } + } }); if self.emulate_vru && self.vru_window_receiver.is_some() { @@ -499,6 +556,8 @@ impl eframe::App for GopherEguiApp { if self.show_vru_dialog { show_vru_dialog(self, ctx); } + + get_latest_version(self, ctx); } } From 04390301c96794e8292b97ec8841ad7e0b8bdc22 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 22 Feb 2025 21:41:21 +0100 Subject: [PATCH 0346/1117] more tpak code (#274) --- src/device.rs | 7 ++ src/device/controller/transferpak.rs | 122 ++++++++++++++++++++++++--- src/savestates.rs | 9 ++ 3 files changed, 124 insertions(+), 14 deletions(-) diff --git a/src/device.rs b/src/device.rs index 7bea184..a62cf51 100644 --- a/src/device.rs +++ b/src/device.rs @@ -176,6 +176,7 @@ pub struct Device { pub ri: ri::Ri, pub vru: controller::vru::Vru, pub vru_window: controller::vru::VruWindow, + pub transferpaks: [controller::transferpak::TransferPak; 4], } pub fn zero_m128i() -> __m128i { @@ -460,6 +461,12 @@ impl Device { talking: false, word_mappings: HashMap::new(), }, + transferpaks: [ + controller::transferpak::TransferPak::default(), + controller::transferpak::TransferPak::default(), + controller::transferpak::TransferPak::default(), + controller::transferpak::TransferPak::default(), + ], } } } diff --git a/src/device/controller/transferpak.rs b/src/device/controller/transferpak.rs index d9c261a..5142867 100644 --- a/src/device/controller/transferpak.rs +++ b/src/device/controller/transferpak.rs @@ -1,19 +1,113 @@ use crate::device; -pub fn read( - _device: &mut device::Device, - _channel: usize, - _address: u16, - _data: usize, - _size: usize, -) { +#[derive(Default, serde::Serialize, serde::Deserialize)] +pub struct TransferPak { + pub enabled: bool, + pub cart_enabled: bool, + pub reset_state: u8, + pub bank: u8, + #[serde(skip)] + pub rom: Vec, + pub ram: Vec, } -pub fn write( - _device: &mut device::Device, - _channel: usize, - _address: u16, - _data: usize, - _size: usize, -) { +pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usize, size: usize) { + let pak = &mut device.transferpaks[channel]; + + match address >> 12 { + 0x8 => { + let value = if pak.enabled { 0x84 } else { 0x00 }; + for i in 0..size { + device.pif.ram[data + i] = value; + } + return; + } + _ => { + if !pak.enabled { + for i in 0..size { + device.pif.ram[data + i] = 0x00; + } + return; + } + } + } + + match address >> 12 { + 0xB => { + let mut value = 0; + if pak.cart_enabled { + value |= 1 << 0; + } + value |= (pak.reset_state & 3) << 2; + if pak.enabled { + value |= 1 << 7; + } + + if pak.cart_enabled && pak.reset_state == 3 { + pak.reset_state = 2 + } else if !pak.cart_enabled && pak.reset_state == 2 { + pak.reset_state = 1 + } else if !pak.cart_enabled && pak.reset_state == 1 { + pak.reset_state = 0 + } + for i in 0..size { + device.pif.ram[data + i] = value; + } + } + _ => { + panic!("unknown transfer pak read {:x}", address >> 12); + } + } +} + +pub fn write(device: &mut device::Device, channel: usize, address: u16, data: usize, size: usize) { + let pak = &mut device.transferpaks[channel]; + + let value = device.pif.ram[data + size - 1]; + match address >> 12 { + 0x8 => { + match value { + 0xFE => { + pak.enabled = false; + } + 0x84 => { + if !pak.enabled { + pak.bank = 0; + pak.cart_enabled = false; + pak.reset_state = 0; + } + pak.enabled = true; + } + _ => panic!("unknown transfer pak value"), + } + return; + } + _ => { + if !pak.enabled { + return; + } + } + } + + match address >> 12 { + 0xA => { + pak.bank = value; + if pak.bank > 3 { + pak.bank = 0; + } + } + 0xB => { + if value & 1 != 0 { + if !pak.cart_enabled { + pak.reset_state = 3; + } + pak.cart_enabled = true; + } else { + pak.cart_enabled = false; + } + } + _ => { + panic!("unknown transfer pak write {:x}", address >> 12); + } + } } diff --git a/src/savestates.rs b/src/savestates.rs index 375325e..16943cf 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -108,6 +108,15 @@ pub fn load_savestate(device: &mut device::Device) { device.ri = state.ri; device.vru = state.vru; + let mut tpak_rom = [vec![], vec![], vec![], vec![]]; + for (i, item) in tpak_rom.iter_mut().enumerate() { + *item = device.transferpaks[i].rom.clone(); + } + device.transferpaks = state.transferpaks; + for (i, item) in tpak_rom.iter().enumerate() { + device.transferpaks[i].rom = item.clone(); + } + device::memory::init(device); device::vi::set_expected_refresh_rate(device); device::cpu::map_instructions(device); From 4692e2bcb9a9f8920f1607973aa646749880c36c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 23 Feb 2025 11:59:15 +0100 Subject: [PATCH 0347/1117] more tpak code (#275) * more tpak code * more --- src/device/controller.rs | 1 + src/device/controller/gbcart.rs | 184 +++++++++++++++++++++++++++ src/device/controller/transferpak.rs | 26 +++- src/device/pif.rs | 6 +- 4 files changed, 212 insertions(+), 5 deletions(-) create mode 100644 src/device/controller/gbcart.rs diff --git a/src/device/controller.rs b/src/device/controller.rs index e7f3b41..5298f79 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -1,5 +1,6 @@ use crate::{device, netplay, savestates, ui}; +pub mod gbcart; pub mod mempak; pub mod rumble; pub mod transferpak; diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs new file mode 100644 index 0000000..aedc483 --- /dev/null +++ b/src/device/controller/gbcart.rs @@ -0,0 +1,184 @@ +use crate::device; + +#[derive(Default, Copy, Clone, serde::Serialize, serde::Deserialize)] +pub enum CartType { + #[default] + None, + MBC3RamBatt, + MBC3RamBattRtc, + MBC5RamBatt, +} + +fn write_mbc3( + pif_ram: &mut [u8], + pak: &mut device::controller::transferpak::TransferPak, + address: u16, + data: usize, + size: usize, +) { + let value = pif_ram[data + size - 1]; + if address < 0x2000 { + pak.ram_enabled = value & 0xf == 0xa; + } else if address < 0x4000 { + let bank = value & 0x7f; + if bank == 0 { + pak.bank = 1; + } else { + pak.bank = bank as u16; + } + } else if address < 0x6000 { + pak.ram_bank = value as u16; + } else if address < 0x8000 { + println!("MBC3 RTC latch") + } else if (0xa000..0xc000).contains(&address) { + if !pak.ram_enabled { + return; + } + if pak.ram_bank < 0x8 { + let banked_address = (pak.ram_bank << 13) | (address & 0x1FFF); + for i in 0..size { + pak.ram[banked_address as usize + i] = pif_ram[data + i]; + } + } else { + panic!("Unsupported ram bank {:x}", pak.ram_bank); + } + } else { + panic!("Unsupported write address {:x}", address); + } +} + +fn read_mbc3( + pif_ram: &mut [u8], + pak: &mut device::controller::transferpak::TransferPak, + address: u16, + data: usize, + size: usize, +) { + if address < 0x4000 { + for i in 0..size { + pif_ram[data + i] = pak.rom[address as usize + i]; + } + } else if address < 0x8000 { + let banked_address = (pak.bank << 14) | (address & 0x3FFF); + for i in 0..size { + pif_ram[data + i] = pak.rom[banked_address as usize + i]; + } + } else if address < 0xc000 { + if !pak.ram_enabled { + for i in 0..size { + pif_ram[data + i] = 0xff; + } + return; + } + if pak.ram_bank < 0x8 { + let banked_address = (pak.ram_bank << 13) | (address & 0x1FFF); + for i in 0..size { + pif_ram[data + i] = pak.ram[banked_address as usize + i]; + } + } else { + panic!("Unsupported ram bank {:x}", pak.ram_bank); + } + } else { + panic!("Unsupported read address {:x}", address); + } +} + +fn write_mbc5( + pif_ram: &mut [u8], + pak: &mut device::controller::transferpak::TransferPak, + address: u16, + data: usize, + size: usize, +) { + let value = pif_ram[data + size - 1]; + if address < 0x2000 { + pak.ram_enabled = value & 0xf == 0xa; + } else if address < 0x6000 { + pak.ram_bank = (value & 0xf) as u16; + } else if address < 0xa000 { + println!("Unknown MBC5 write address {:x}", address); + } else if (0xa000..0xc000).contains(&address) { + if !pak.ram_enabled { + return; + } + + let banked_address = (pak.ram_bank << 13) | (address & 0x1FFF); + for i in 0..size { + pak.ram[banked_address as usize + i] = pif_ram[data + i]; + } + } else { + panic!("Unsupported write address {:x}", address); + } +} + +fn read_mbc5( + pif_ram: &mut [u8], + pak: &mut device::controller::transferpak::TransferPak, + address: u16, + data: usize, + size: usize, +) { + if address < 0x4000 { + for i in 0..size { + pif_ram[data + i] = pak.rom[address as usize + i]; + } + } else if address < 0x8000 { + let banked_address = (pak.bank << 14) | (address & 0x3FFF); + for i in 0..size { + pif_ram[data + i] = pak.rom[banked_address as usize + i]; + } + } else if address < 0xc000 { + if !pak.ram_enabled { + for i in 0..size { + pif_ram[data + i] = 0xff; + } + return; + } + + let banked_address = (pak.ram_bank << 13) | (address & 0x1FFF); + for i in 0..size { + pif_ram[data + i] = pak.ram[banked_address as usize + i]; + } + } else { + panic!("Unsupported read address {:x}", address); + } +} + +pub fn read( + pif_ram: &mut [u8], + pak: &mut device::controller::transferpak::TransferPak, + address: u16, + data: usize, + size: usize, +) { + match pak.cart_type { + CartType::MBC3RamBatt => read_mbc3(pif_ram, pak, address, data, size), + CartType::MBC3RamBattRtc => read_mbc3(pif_ram, pak, address, data, size), + CartType::MBC5RamBatt => read_mbc5(pif_ram, pak, address, data, size), + _ => panic!("Unsupported cart type"), + } +} + +pub fn write( + pif_ram: &mut [u8], + pak: &mut device::controller::transferpak::TransferPak, + address: u16, + data: usize, + size: usize, +) { + match pak.cart_type { + CartType::MBC3RamBatt => write_mbc3(pif_ram, pak, address, data, size), + CartType::MBC3RamBattRtc => write_mbc3(pif_ram, pak, address, data, size), + CartType::MBC5RamBatt => write_mbc5(pif_ram, pak, address, data, size), + _ => panic!("Unsupported cart type"), + } +} + +pub fn get_cart_type(data: u8) -> CartType { + match data { + 0x10 => CartType::MBC3RamBattRtc, + 0x13 => CartType::MBC3RamBatt, + 0x1b => CartType::MBC5RamBatt, + _ => panic!("Unsupported cart type {:x}", data), + } +} diff --git a/src/device/controller/transferpak.rs b/src/device/controller/transferpak.rs index 5142867..08fcb70 100644 --- a/src/device/controller/transferpak.rs +++ b/src/device/controller/transferpak.rs @@ -5,10 +5,13 @@ pub struct TransferPak { pub enabled: bool, pub cart_enabled: bool, pub reset_state: u8, - pub bank: u8, + pub bank: u16, #[serde(skip)] pub rom: Vec, pub ram: Vec, + pub cart_type: device::controller::gbcart::CartType, + pub ram_enabled: bool, + pub ram_bank: u16, } pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usize, size: usize) { @@ -54,6 +57,15 @@ pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usi device.pif.ram[data + i] = value; } } + 0xC..=0xF => { + device::controller::gbcart::read( + &mut device.pif.ram, + pak, + (address & 0x3fff) | ((pak.bank & 0x3) * 0x4000), + data, + size, + ); + } _ => { panic!("unknown transfer pak read {:x}", address >> 12); } @@ -91,7 +103,7 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us match address >> 12 { 0xA => { - pak.bank = value; + pak.bank = value as u16; if pak.bank > 3 { pak.bank = 0; } @@ -100,12 +112,22 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us if value & 1 != 0 { if !pak.cart_enabled { pak.reset_state = 3; + pak.cart_type = device::controller::gbcart::get_cart_type(pak.rom[0x147]); } pak.cart_enabled = true; } else { pak.cart_enabled = false; } } + 0xC..=0xF => { + device::controller::gbcart::write( + &mut device.pif.ram, + pak, + (address & 0x3fff) | ((pak.bank & 0x3) * 0x4000), + data, + size, + ); + } _ => { panic!("unknown transfer pak write {:x}", address >> 12); } diff --git a/src/device/pif.rs b/src/device/pif.rs index 8a494e3..b403e5d 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -245,7 +245,7 @@ pub fn init(device: &mut device::Device) { device.pif.ram[0x26] = device.cart.cic_seed; device.pif.ram[0x27] = device.cart.cic_seed; - let mempak_handler = device::controller::PakHandler { + let default_handler = device::controller::PakHandler { read: device::controller::mempak::read, write: device::controller::mempak::write, pak_type: device::controller::PakType::MemPak, @@ -256,10 +256,10 @@ pub fn init(device: &mut device::Device) { for i in 0..4 { if device.netplay.is_none() { if device.ui.config.input.controller_enabled[i] { - device.pif.channels[i].pak_handler = Some(mempak_handler); + device.pif.channels[i].pak_handler = Some(default_handler); } } else if device.netplay.as_ref().unwrap().player_data[i].reg_id != 0 { - device.pif.channels[i].pak_handler = Some(mempak_handler); + device.pif.channels[i].pak_handler = Some(default_handler); } } if device.ui.config.input.emulate_vru { From 9980302d3747413edbfaee0dd9a7716dbfb2301c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 23 Feb 2025 13:10:50 +0100 Subject: [PATCH 0348/1117] more tpak code (#276) * more tpak code * more --- src/device/controller/gbcart.rs | 109 ++++++++++++++++----------- src/device/controller/transferpak.rs | 36 +++++---- src/savestates.rs | 4 +- 3 files changed, 85 insertions(+), 64 deletions(-) diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index aedc483..29297e7 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -1,5 +1,17 @@ use crate::device; +#[derive(Default, serde::Serialize, serde::Deserialize)] +pub struct GbCart { + pub enabled: bool, + #[serde(skip)] + pub rom: Vec, + pub ram: Vec, + pub cart_type: device::controller::gbcart::CartType, + pub ram_enabled: bool, + pub ram_bank: u16, + pub rom_bank: u16, +} + #[derive(Default, Copy, Clone, serde::Serialize, serde::Deserialize)] pub enum CartType { #[default] @@ -11,36 +23,36 @@ pub enum CartType { fn write_mbc3( pif_ram: &mut [u8], - pak: &mut device::controller::transferpak::TransferPak, + cart: &mut device::controller::gbcart::GbCart, address: u16, data: usize, size: usize, ) { let value = pif_ram[data + size - 1]; if address < 0x2000 { - pak.ram_enabled = value & 0xf == 0xa; + cart.ram_enabled = value & 0xf == 0xa; } else if address < 0x4000 { let bank = value & 0x7f; if bank == 0 { - pak.bank = 1; + cart.rom_bank = 1; } else { - pak.bank = bank as u16; + cart.rom_bank = bank as u16; } } else if address < 0x6000 { - pak.ram_bank = value as u16; + cart.ram_bank = value as u16; } else if address < 0x8000 { println!("MBC3 RTC latch") } else if (0xa000..0xc000).contains(&address) { - if !pak.ram_enabled { + if !cart.ram_enabled { return; } - if pak.ram_bank < 0x8 { - let banked_address = (pak.ram_bank << 13) | (address & 0x1FFF); + if cart.ram_bank < 0x8 { + let banked_address = (cart.ram_bank << 13) | (address & 0x1FFF); for i in 0..size { - pak.ram[banked_address as usize + i] = pif_ram[data + i]; + cart.ram[banked_address as usize + i] = pif_ram[data + i]; } } else { - panic!("Unsupported ram bank {:x}", pak.ram_bank); + panic!("Unsupported ram bank {:x}", cart.ram_bank); } } else { panic!("Unsupported write address {:x}", address); @@ -49,34 +61,34 @@ fn write_mbc3( fn read_mbc3( pif_ram: &mut [u8], - pak: &mut device::controller::transferpak::TransferPak, + cart: &mut device::controller::gbcart::GbCart, address: u16, data: usize, size: usize, ) { if address < 0x4000 { for i in 0..size { - pif_ram[data + i] = pak.rom[address as usize + i]; + pif_ram[data + i] = cart.rom[address as usize + i]; } } else if address < 0x8000 { - let banked_address = (pak.bank << 14) | (address & 0x3FFF); + let banked_address = (cart.rom_bank << 14) | (address & 0x3FFF); for i in 0..size { - pif_ram[data + i] = pak.rom[banked_address as usize + i]; + pif_ram[data + i] = cart.rom[banked_address as usize + i]; } } else if address < 0xc000 { - if !pak.ram_enabled { + if !cart.ram_enabled { for i in 0..size { pif_ram[data + i] = 0xff; } return; } - if pak.ram_bank < 0x8 { - let banked_address = (pak.ram_bank << 13) | (address & 0x1FFF); + if cart.ram_bank < 0x8 { + let banked_address = (cart.ram_bank << 13) | (address & 0x1FFF); for i in 0..size { - pif_ram[data + i] = pak.ram[banked_address as usize + i]; + pif_ram[data + i] = cart.ram[banked_address as usize + i]; } } else { - panic!("Unsupported ram bank {:x}", pak.ram_bank); + panic!("Unsupported ram bank {:x}", cart.ram_bank); } } else { panic!("Unsupported read address {:x}", address); @@ -85,26 +97,28 @@ fn read_mbc3( fn write_mbc5( pif_ram: &mut [u8], - pak: &mut device::controller::transferpak::TransferPak, + cart: &mut device::controller::gbcart::GbCart, address: u16, data: usize, size: usize, ) { let value = pif_ram[data + size - 1]; if address < 0x2000 { - pak.ram_enabled = value & 0xf == 0xa; + cart.ram_enabled = value & 0xf == 0xa; + } else if address < 0x4000 { + println!("Unknown MBC5 write address {:x}", address); } else if address < 0x6000 { - pak.ram_bank = (value & 0xf) as u16; + cart.ram_bank = (value & 0xf) as u16; } else if address < 0xa000 { println!("Unknown MBC5 write address {:x}", address); } else if (0xa000..0xc000).contains(&address) { - if !pak.ram_enabled { + if !cart.ram_enabled { return; } - let banked_address = (pak.ram_bank << 13) | (address & 0x1FFF); + let banked_address = (cart.ram_bank << 13) | (address & 0x1FFF); for i in 0..size { - pak.ram[banked_address as usize + i] = pif_ram[data + i]; + cart.ram[banked_address as usize + i] = pif_ram[data + i]; } } else { panic!("Unsupported write address {:x}", address); @@ -113,31 +127,31 @@ fn write_mbc5( fn read_mbc5( pif_ram: &mut [u8], - pak: &mut device::controller::transferpak::TransferPak, + cart: &mut device::controller::gbcart::GbCart, address: u16, data: usize, size: usize, ) { if address < 0x4000 { for i in 0..size { - pif_ram[data + i] = pak.rom[address as usize + i]; + pif_ram[data + i] = cart.rom[address as usize + i]; } } else if address < 0x8000 { - let banked_address = (pak.bank << 14) | (address & 0x3FFF); + let banked_address = (cart.rom_bank << 14) | (address & 0x3FFF); for i in 0..size { - pif_ram[data + i] = pak.rom[banked_address as usize + i]; + pif_ram[data + i] = cart.rom[banked_address as usize + i]; } - } else if address < 0xc000 { - if !pak.ram_enabled { + } else if (0xa000..0xc000).contains(&address) { + if !cart.ram_enabled { for i in 0..size { pif_ram[data + i] = 0xff; } return; } - let banked_address = (pak.ram_bank << 13) | (address & 0x1FFF); + let banked_address = (cart.ram_bank << 13) | (address & 0x1FFF); for i in 0..size { - pif_ram[data + i] = pak.ram[banked_address as usize + i]; + pif_ram[data + i] = cart.ram[banked_address as usize + i]; } } else { panic!("Unsupported read address {:x}", address); @@ -146,30 +160,39 @@ fn read_mbc5( pub fn read( pif_ram: &mut [u8], - pak: &mut device::controller::transferpak::TransferPak, + cart: &mut device::controller::gbcart::GbCart, address: u16, data: usize, size: usize, ) { - match pak.cart_type { - CartType::MBC3RamBatt => read_mbc3(pif_ram, pak, address, data, size), - CartType::MBC3RamBattRtc => read_mbc3(pif_ram, pak, address, data, size), - CartType::MBC5RamBatt => read_mbc5(pif_ram, pak, address, data, size), + if !cart.enabled { + for i in 0..size { + pif_ram[data + i] = 0x00; + } + return; + } + match cart.cart_type { + CartType::MBC3RamBatt => read_mbc3(pif_ram, cart, address, data, size), + CartType::MBC3RamBattRtc => read_mbc3(pif_ram, cart, address, data, size), + CartType::MBC5RamBatt => read_mbc5(pif_ram, cart, address, data, size), _ => panic!("Unsupported cart type"), } } pub fn write( pif_ram: &mut [u8], - pak: &mut device::controller::transferpak::TransferPak, + cart: &mut device::controller::gbcart::GbCart, address: u16, data: usize, size: usize, ) { - match pak.cart_type { - CartType::MBC3RamBatt => write_mbc3(pif_ram, pak, address, data, size), - CartType::MBC3RamBattRtc => write_mbc3(pif_ram, pak, address, data, size), - CartType::MBC5RamBatt => write_mbc5(pif_ram, pak, address, data, size), + if !cart.enabled { + return; + } + match cart.cart_type { + CartType::MBC3RamBatt => write_mbc3(pif_ram, cart, address, data, size), + CartType::MBC3RamBattRtc => write_mbc3(pif_ram, cart, address, data, size), + CartType::MBC5RamBatt => write_mbc5(pif_ram, cart, address, data, size), _ => panic!("Unsupported cart type"), } } diff --git a/src/device/controller/transferpak.rs b/src/device/controller/transferpak.rs index 08fcb70..7b1512f 100644 --- a/src/device/controller/transferpak.rs +++ b/src/device/controller/transferpak.rs @@ -3,15 +3,9 @@ use crate::device; #[derive(Default, serde::Serialize, serde::Deserialize)] pub struct TransferPak { pub enabled: bool, - pub cart_enabled: bool, pub reset_state: u8, pub bank: u16, - #[serde(skip)] - pub rom: Vec, - pub ram: Vec, - pub cart_type: device::controller::gbcart::CartType, - pub ram_enabled: bool, - pub ram_bank: u16, + pub cart: device::controller::gbcart::GbCart, } pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usize, size: usize) { @@ -38,7 +32,7 @@ pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usi match address >> 12 { 0xB => { let mut value = 0; - if pak.cart_enabled { + if pak.cart.enabled { value |= 1 << 0; } value |= (pak.reset_state & 3) << 2; @@ -46,11 +40,11 @@ pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usi value |= 1 << 7; } - if pak.cart_enabled && pak.reset_state == 3 { + if pak.cart.enabled && pak.reset_state == 3 { pak.reset_state = 2 - } else if !pak.cart_enabled && pak.reset_state == 2 { + } else if !pak.cart.enabled && pak.reset_state == 2 { pak.reset_state = 1 - } else if !pak.cart_enabled && pak.reset_state == 1 { + } else if !pak.cart.enabled && pak.reset_state == 1 { pak.reset_state = 0 } for i in 0..size { @@ -60,7 +54,7 @@ pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usi 0xC..=0xF => { device::controller::gbcart::read( &mut device.pif.ram, - pak, + &mut pak.cart, (address & 0x3fff) | ((pak.bank & 0x3) * 0x4000), data, size, @@ -84,8 +78,8 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us } 0x84 => { if !pak.enabled { - pak.bank = 0; - pak.cart_enabled = false; + pak.bank = 3; + pak.cart.enabled = false; pak.reset_state = 0; } pak.enabled = true; @@ -110,19 +104,23 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us } 0xB => { if value & 1 != 0 { - if !pak.cart_enabled { + if !pak.cart.enabled { pak.reset_state = 3; - pak.cart_type = device::controller::gbcart::get_cart_type(pak.rom[0x147]); + pak.cart.rom_bank = 1; + pak.cart.ram_bank = 0; + pak.cart.ram_enabled = false; + pak.cart.cart_type = + device::controller::gbcart::get_cart_type(pak.cart.rom[0x147]); } - pak.cart_enabled = true; + pak.cart.enabled = true; } else { - pak.cart_enabled = false; + pak.cart.enabled = false; } } 0xC..=0xF => { device::controller::gbcart::write( &mut device.pif.ram, - pak, + &mut pak.cart, (address & 0x3fff) | ((pak.bank & 0x3) * 0x4000), data, size, diff --git a/src/savestates.rs b/src/savestates.rs index 16943cf..3f9215c 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -110,11 +110,11 @@ pub fn load_savestate(device: &mut device::Device) { let mut tpak_rom = [vec![], vec![], vec![], vec![]]; for (i, item) in tpak_rom.iter_mut().enumerate() { - *item = device.transferpaks[i].rom.clone(); + *item = device.transferpaks[i].cart.rom.clone(); } device.transferpaks = state.transferpaks; for (i, item) in tpak_rom.iter().enumerate() { - device.transferpaks[i].rom = item.clone(); + device.transferpaks[i].cart.rom = item.clone(); } device::memory::init(device); From fb2cf7fcb956dade66adb3ab0c140d1b27e81608 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 23 Feb 2025 13:25:23 +0100 Subject: [PATCH 0349/1117] move UI elements around (#277) --- src/main.rs | 2 +- src/ui/gui.rs | 27 +++++++++++++++++++-------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/main.rs b/src/main.rs index f877979..fdf7fb1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -170,7 +170,7 @@ async fn main() { } else { let options = eframe::NativeOptions { viewport: eframe::egui::ViewportBuilder::default() - .with_inner_size([640.0, 480.0]) + .with_inner_size([854.0, 480.0]) .with_icon( eframe::icon_data::from_png_bytes(include_bytes!("../data/gopher64.png")) .unwrap(), diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 0c9b538..f5eaec5 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -461,13 +461,30 @@ impl eframe::App for GopherEguiApp { egui::Grid::new("controller_config").show(ui, |ui| { ui.label("Port"); ui.label("Enabled"); + ui.label("Emulate VRU"); + //ui.label("Transfer Pak"); ui.label("Profile"); ui.label("Controller"); ui.end_row(); for i in 0..4 { ui.label(format!("{}", i + 1)); - ui.checkbox(&mut self.controller_enabled[i], ""); - + ui.centered_and_justified(|ui| { + ui.checkbox(&mut self.controller_enabled[i], ""); + }); + let mut vru = false; + ui.centered_and_justified(|ui| { + if i < 3 { + ui.add_enabled(false, egui::Checkbox::new(&mut vru, "")); + } else { + ui.add_enabled(true, egui::Checkbox::new(&mut self.emulate_vru, "")); + } + }); + /* + let mut tpak: bool = false; + ui.centered_and_justified(|ui| { + ui.checkbox(&mut tpak, ""); + }); + */ egui::ComboBox::from_id_salt(format!("profile-combo-{}", i)) .selected_text(self.selected_profile[i].clone()) .show_ui(ui, |ui| { @@ -525,12 +542,6 @@ impl eframe::App for GopherEguiApp { }; ui.checkbox(&mut self.integer_scaling, "Integer Scaling"); ui.checkbox(&mut self.fullscreen, "Fullscreen (Esc closes game)"); - ui.add_space(32.0); - - ui.checkbox( - &mut self.emulate_vru, - "Emulate VRU (connects VRU to controller port 4)", - ); ui.add_space(32.0); ui.label(format!("Version: {}", env!("CARGO_PKG_VERSION"))); From f6349f13da40dd2626790c7eda6cd130c06034ac Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 23 Feb 2025 16:10:53 +0100 Subject: [PATCH 0350/1117] tpak cleanup (#278) * tpak cleanup * more * more --- src/device/controller/gbcart.rs | 52 +++++++++++++++------------------ 1 file changed, 23 insertions(+), 29 deletions(-) diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index 29297e7..e4bfc99 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -33,13 +33,12 @@ fn write_mbc3( cart.ram_enabled = value & 0xf == 0xa; } else if address < 0x4000 { let bank = value & 0x7f; - if bank == 0 { + cart.rom_bank = bank as u16; + if cart.rom_bank == 0 { cart.rom_bank = 1; - } else { - cart.rom_bank = bank as u16; } } else if address < 0x6000 { - cart.ram_bank = value as u16; + cart.ram_bank = (value & 0xf) as u16; } else if address < 0x8000 { println!("MBC3 RTC latch") } else if (0xa000..0xc000).contains(&address) { @@ -48,9 +47,8 @@ fn write_mbc3( } if cart.ram_bank < 0x8 { let banked_address = (cart.ram_bank << 13) | (address & 0x1FFF); - for i in 0..size { - cart.ram[banked_address as usize + i] = pif_ram[data + i]; - } + cart.ram[banked_address as usize..banked_address as usize + size] + .copy_from_slice(&pif_ram[data..data + size]); } else { panic!("Unsupported ram bank {:x}", cart.ram_bank); } @@ -67,15 +65,14 @@ fn read_mbc3( size: usize, ) { if address < 0x4000 { - for i in 0..size { - pif_ram[data + i] = cart.rom[address as usize + i]; - } + let banked_address = address & 0x3FFF; + pif_ram[data..data + size] + .copy_from_slice(&cart.rom[banked_address as usize..banked_address as usize + size]); } else if address < 0x8000 { let banked_address = (cart.rom_bank << 14) | (address & 0x3FFF); - for i in 0..size { - pif_ram[data + i] = cart.rom[banked_address as usize + i]; - } - } else if address < 0xc000 { + pif_ram[data..data + size] + .copy_from_slice(&cart.rom[banked_address as usize..banked_address as usize + size]); + } else if (0xa000..0xc000).contains(&address) { if !cart.ram_enabled { for i in 0..size { pif_ram[data + i] = 0xff; @@ -84,9 +81,9 @@ fn read_mbc3( } if cart.ram_bank < 0x8 { let banked_address = (cart.ram_bank << 13) | (address & 0x1FFF); - for i in 0..size { - pif_ram[data + i] = cart.ram[banked_address as usize + i]; - } + pif_ram[data..data + size].copy_from_slice( + &cart.ram[banked_address as usize..banked_address as usize + size], + ); } else { panic!("Unsupported ram bank {:x}", cart.ram_bank); } @@ -117,9 +114,8 @@ fn write_mbc5( } let banked_address = (cart.ram_bank << 13) | (address & 0x1FFF); - for i in 0..size { - cart.ram[banked_address as usize + i] = pif_ram[data + i]; - } + cart.ram[banked_address as usize..banked_address as usize + size] + .copy_from_slice(&pif_ram[data..data + size]); } else { panic!("Unsupported write address {:x}", address); } @@ -133,14 +129,13 @@ fn read_mbc5( size: usize, ) { if address < 0x4000 { - for i in 0..size { - pif_ram[data + i] = cart.rom[address as usize + i]; - } + let banked_address = address & 0x3FFF; + pif_ram[data..data + size] + .copy_from_slice(&cart.rom[banked_address as usize..banked_address as usize + size]); } else if address < 0x8000 { let banked_address = (cart.rom_bank << 14) | (address & 0x3FFF); - for i in 0..size { - pif_ram[data + i] = cart.rom[banked_address as usize + i]; - } + pif_ram[data..data + size] + .copy_from_slice(&cart.rom[banked_address as usize..banked_address as usize + size]); } else if (0xa000..0xc000).contains(&address) { if !cart.ram_enabled { for i in 0..size { @@ -150,9 +145,8 @@ fn read_mbc5( } let banked_address = (cart.ram_bank << 13) | (address & 0x1FFF); - for i in 0..size { - pif_ram[data + i] = cart.ram[banked_address as usize + i]; - } + pif_ram[data..data + size] + .copy_from_slice(&cart.ram[banked_address as usize..banked_address as usize + size]); } else { panic!("Unsupported read address {:x}", address); } From 95a3d3d5ec5bf36bf4a007282e272e923bef5117 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 23 Feb 2025 22:28:07 +0100 Subject: [PATCH 0351/1117] fix type --- src/device/pif.rs | 2 +- src/netplay.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/device/pif.rs b/src/device/pif.rs index b403e5d..4fe7bf1 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -55,7 +55,7 @@ pub fn read_mem( pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { let mut masked_address = address as usize & PIF_MASK; if masked_address < PIF_RAM_OFFSET { - panic! {"write to pif rom"} + panic!("write to pif rom") } masked_address -= PIF_RAM_OFFSET; let mut data = u32::from_be_bytes( diff --git a/src/netplay.rs b/src/netplay.rs index 0102271..b0a4a78 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -204,7 +204,7 @@ fn process_incoming(netplay: &mut Netplay, ui: &mut ui::Ui) { } } _ => { - panic! {"unknown UDP packet"} + panic!("unknown UDP packet") } } } From 168347b46e67f30ac40e95afd337888656000f43 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 24 Feb 2025 12:49:33 +0100 Subject: [PATCH 0352/1117] Transfer Pak UI (#279) * Transfer Pak UI * more * more * more * more --- src/device/controller.rs | 9 ++++- src/device/controller/gbcart.rs | 6 ++- src/device/pif.rs | 15 ++++++-- src/savestates.rs | 9 +++++ src/ui/config.rs | 2 + src/ui/gui.rs | 67 +++++++++++++++++++++++++++++---- src/ui/gui/gui_netplay.rs | 8 +++- 7 files changed, 101 insertions(+), 15 deletions(-) diff --git a/src/device/controller.rs b/src/device/controller.rs index 5298f79..1d500cd 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -171,7 +171,14 @@ pub fn pak_switch_event(device: &mut device::Device) { let new_pak_type = match channel.change_pak { PakType::MemPak => PakType::RumblePak, - PakType::RumblePak => PakType::MemPak, + PakType::RumblePak => { + if device.transferpaks[i].cart.rom.is_empty() { + PakType::MemPak + } else { + PakType::TransferPak + } + } + PakType::TransferPak => PakType::MemPak, _ => { panic!("Invalid pak type"); } diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index e4bfc99..c342c62 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -102,8 +102,12 @@ fn write_mbc5( let value = pif_ram[data + size - 1]; if address < 0x2000 { cart.ram_enabled = value & 0xf == 0xa; + } else if address < 0x3000 { + cart.rom_bank &= 0xff00; + cart.rom_bank |= value as u16; } else if address < 0x4000 { - println!("Unknown MBC5 write address {:x}", address); + cart.rom_bank &= 0x00ff; + cart.rom_bank |= ((value & 0x1) as u16) << 8; } else if address < 0x6000 { cart.ram_bank = (value & 0xf) as u16; } else if address < 0xa000 { diff --git a/src/device/pif.rs b/src/device/pif.rs index 4fe7bf1..e109d76 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -245,21 +245,30 @@ pub fn init(device: &mut device::Device) { device.pif.ram[0x26] = device.cart.cic_seed; device.pif.ram[0x27] = device.cart.cic_seed; - let default_handler = device::controller::PakHandler { + let mempak_handler = device::controller::PakHandler { read: device::controller::mempak::read, write: device::controller::mempak::write, pak_type: device::controller::PakType::MemPak, }; + let tpak_handler = device::controller::PakHandler { + read: device::controller::transferpak::read, + write: device::controller::transferpak::write, + pak_type: device::controller::PakType::TransferPak, + }; connect_pif_channels(device); for i in 0..4 { if device.netplay.is_none() { if device.ui.config.input.controller_enabled[i] { - device.pif.channels[i].pak_handler = Some(default_handler); + if device.transferpaks[i].cart.rom.is_empty() { + device.pif.channels[i].pak_handler = Some(mempak_handler); + } else { + device.pif.channels[i].pak_handler = Some(tpak_handler); + } } } else if device.netplay.as_ref().unwrap().player_data[i].reg_id != 0 { - device.pif.channels[i].pak_handler = Some(default_handler); + device.pif.channels[i].pak_handler = Some(mempak_handler); } } if device.ui.config.input.emulate_vru { diff --git a/src/savestates.rs b/src/savestates.rs index 3f9215c..a33385d 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -175,6 +175,15 @@ pub fn load_savestate(device: &mut device::Device) { pak_type: device::controller::PakType::MemPak, }; device.pif.channels[i].pak_handler = Some(mempak_handler); + } else if device.pif.channels[i].pak_handler.unwrap().pak_type + == device::controller::PakType::TransferPak + { + let tpak_handler = device::controller::PakHandler { + read: device::controller::transferpak::read, + write: device::controller::transferpak::write, + pak_type: device::controller::PakType::TransferPak, + }; + device.pif.channels[i].pak_handler = Some(tpak_handler); } } } diff --git a/src/ui/config.rs b/src/ui/config.rs index 09f72d1..9c43789 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -37,6 +37,7 @@ pub struct Input { pub input_profile_binding: [String; 4], pub controller_assignment: [Option; 4], pub controller_enabled: [bool; 4], + pub transfer_pak: [bool; 4], pub emulate_vru: bool, } #[derive(serde::Serialize, serde::Deserialize)] @@ -88,6 +89,7 @@ impl Config { controller_assignment: [None, None, None, None], input_profiles, controller_enabled: [true, false, false, false], + transfer_pak: [false, false, false, false], emulate_vru: false, }, video: Video { diff --git a/src/ui/gui.rs b/src/ui/gui.rs index f5eaec5..7d1fbbe 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -12,6 +12,7 @@ pub struct GopherEguiApp { selected_profile: [String; 4], input_profiles: Vec, controller_enabled: [bool; 4], + transfer_pak: [bool; 4], controller_paths: Vec, upscale: u32, integer_scaling: bool, @@ -36,6 +37,7 @@ struct SaveConfig { selected_controller: [i32; 4], selected_profile: [String; 4], controller_enabled: [bool; 4], + transfer_pak: [bool; 4], upscale: u32, integer_scaling: bool, fullscreen: bool, @@ -110,6 +112,7 @@ impl GopherEguiApp { controller_names, input_profiles: get_input_profiles(&config), controller_enabled: config.input.controller_enabled, + transfer_pak: config.input.transfer_pak, upscale: config.video.upscale, integer_scaling: config.video.integer_scaling, fullscreen: config.video.fullscreen, @@ -144,6 +147,7 @@ fn save_config( config.input.input_profile_binding = save_config_items.selected_profile; config.input.controller_enabled = save_config_items.controller_enabled; + config.input.transfer_pak = save_config_items.transfer_pak; config.video.upscale = save_config_items.upscale; config.video.integer_scaling = save_config_items.integer_scaling; @@ -157,6 +161,7 @@ impl Drop for GopherEguiApp { selected_controller: self.selected_controller, selected_profile: self.selected_profile.clone(), controller_enabled: self.controller_enabled, + transfer_pak: self.transfer_pak, upscale: self.upscale, integer_scaling: self.integer_scaling, fullscreen: self.fullscreen, @@ -291,6 +296,7 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { let selected_controller = app.selected_controller; let selected_profile = app.selected_profile.clone(); let controller_enabled = app.controller_enabled; + let transfer_pak = app.transfer_pak; let upscale = app.upscale; let integer_scaling = app.integer_scaling; let fullscreen = app.fullscreen; @@ -334,12 +340,47 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { let rom_contents = app.netplay.rom_contents.clone(); let gui_ctx = ctx.clone(); - let mut task = None; + let mut select_rom = None; + let mut select_gb_rom = [None, None, None, None]; + let mut select_gb_ram = [None, None, None, None]; + if !netplay { - task = Some(rfd::AsyncFileDialog::new().pick_file()); + select_rom = Some( + rfd::AsyncFileDialog::new() + .set_title("Select ROM") + .pick_file(), + ); + for i in 0..4 { + if transfer_pak[i] { + select_gb_rom[i] = Some( + rfd::AsyncFileDialog::new() + .set_title(format!("GB ROM P{}", i + 1)) + .pick_file(), + ); + select_gb_ram[i] = Some( + rfd::AsyncFileDialog::new() + .set_title(format!("GB RAM P{}", i + 1)) + .pick_file(), + ); + } + } } tokio::spawn(async move { - let file = if !netplay { task.unwrap().await } else { None }; + let file = if !netplay { + select_rom.unwrap().await + } else { + None + }; + let mut gb_rom_path = [None, None, None, None]; + let mut gb_ram_path = [None, None, None, None]; + if !netplay { + for i in 0..4 { + if transfer_pak[i] { + gb_rom_path[i] = select_gb_rom[i].as_mut().unwrap().await; + gb_ram_path[i] = select_gb_ram[i].as_mut().unwrap().await; + } + } + } std::thread::Builder::new() .name("n64".to_string()) @@ -349,6 +390,7 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { selected_controller, selected_profile, controller_enabled, + transfer_pak, upscale, integer_scaling, fullscreen, @@ -379,6 +421,16 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { device::run_game(rom_contents, &mut device); netplay::close(&mut device); } else { + for i in 0..4 { + if gb_rom_path[i].is_some() && gb_ram_path[i].is_some() { + device.transferpaks[i].cart.rom = + std::fs::read(gb_rom_path[i].as_ref().unwrap().path()).unwrap(); + + device.transferpaks[i].cart.ram = + std::fs::read(gb_ram_path[i].as_ref().unwrap().path()).unwrap(); + } + } + if emulate_vru { device.vru_window.window_notifier = Some(vru_window_notifier); device.vru_window.word_receiver = Some(vru_word_receiver); @@ -462,7 +514,7 @@ impl eframe::App for GopherEguiApp { ui.label("Port"); ui.label("Enabled"); ui.label("Emulate VRU"); - //ui.label("Transfer Pak"); + ui.label("Transfer Pak"); ui.label("Profile"); ui.label("Controller"); ui.end_row(); @@ -479,12 +531,11 @@ impl eframe::App for GopherEguiApp { ui.add_enabled(true, egui::Checkbox::new(&mut self.emulate_vru, "")); } }); - /* - let mut tpak: bool = false; + ui.centered_and_justified(|ui| { - ui.checkbox(&mut tpak, ""); + ui.checkbox(&mut self.transfer_pak[i], ""); }); - */ + egui::ComboBox::from_id_salt(format!("profile-combo-{}", i)) .selected_text(self.selected_profile[i].clone()) .show_ui(ui, |ui| { diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index 6f5e4ad..0c20a80 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -207,7 +207,9 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { app.netplay.game_info_receiver = Some(rx); let gui_ctx = ctx.clone(); app.netplay.create_rom_label = "Inspecting ROM".to_string(); - let task = rfd::AsyncFileDialog::new().pick_file(); + let task = rfd::AsyncFileDialog::new() + .set_title("Select ROM") + .pick_file(); tokio::spawn(async move { let file = task.await; @@ -621,7 +623,9 @@ pub fn netplay_join(app: &mut GopherEguiApp, ctx: &egui::Context) { app.netplay.game_info_receiver = Some(rx); let gui_ctx = ctx.clone(); app.netplay.join_rom_label = "Inspecting ROM".to_string(); - let task = rfd::AsyncFileDialog::new().pick_file(); + let task = rfd::AsyncFileDialog::new() + .set_title("Select ROM") + .pick_file(); tokio::spawn(async move { let file = task.await; From 34a09925b4976967ae82a66586e34722387bddda Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 24 Feb 2025 14:43:06 +0100 Subject: [PATCH 0353/1117] fix GB tower (#280) --- src/device/controller/gbcart.rs | 20 ++++++++++---------- src/device/controller/transferpak.rs | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index c342c62..61c3beb 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -9,7 +9,7 @@ pub struct GbCart { pub cart_type: device::controller::gbcart::CartType, pub ram_enabled: bool, pub ram_bank: u16, - pub rom_bank: u16, + pub rom_bank: u32, } #[derive(Default, Copy, Clone, serde::Serialize, serde::Deserialize)] @@ -33,7 +33,7 @@ fn write_mbc3( cart.ram_enabled = value & 0xf == 0xa; } else if address < 0x4000 { let bank = value & 0x7f; - cart.rom_bank = bank as u16; + cart.rom_bank = bank as u32; if cart.rom_bank == 0 { cart.rom_bank = 1; } @@ -46,7 +46,7 @@ fn write_mbc3( return; } if cart.ram_bank < 0x8 { - let banked_address = (cart.ram_bank << 13) | (address & 0x1FFF); + let banked_address = address - 0xA000 + (cart.ram_bank * 0x2000); cart.ram[banked_address as usize..banked_address as usize + size] .copy_from_slice(&pif_ram[data..data + size]); } else { @@ -69,7 +69,7 @@ fn read_mbc3( pif_ram[data..data + size] .copy_from_slice(&cart.rom[banked_address as usize..banked_address as usize + size]); } else if address < 0x8000 { - let banked_address = (cart.rom_bank << 14) | (address & 0x3FFF); + let banked_address = address as u32 - 0x4000 + (cart.rom_bank * 0x4000); pif_ram[data..data + size] .copy_from_slice(&cart.rom[banked_address as usize..banked_address as usize + size]); } else if (0xa000..0xc000).contains(&address) { @@ -80,7 +80,7 @@ fn read_mbc3( return; } if cart.ram_bank < 0x8 { - let banked_address = (cart.ram_bank << 13) | (address & 0x1FFF); + let banked_address = address - 0xA000 + (cart.ram_bank * 0x2000); pif_ram[data..data + size].copy_from_slice( &cart.ram[banked_address as usize..banked_address as usize + size], ); @@ -104,10 +104,10 @@ fn write_mbc5( cart.ram_enabled = value & 0xf == 0xa; } else if address < 0x3000 { cart.rom_bank &= 0xff00; - cart.rom_bank |= value as u16; + cart.rom_bank |= value as u32; } else if address < 0x4000 { cart.rom_bank &= 0x00ff; - cart.rom_bank |= ((value & 0x1) as u16) << 8; + cart.rom_bank |= ((value & 0x1) as u32) << 8; } else if address < 0x6000 { cart.ram_bank = (value & 0xf) as u16; } else if address < 0xa000 { @@ -117,7 +117,7 @@ fn write_mbc5( return; } - let banked_address = (cart.ram_bank << 13) | (address & 0x1FFF); + let banked_address = address - 0xA000 + (cart.ram_bank << 13); cart.ram[banked_address as usize..banked_address as usize + size] .copy_from_slice(&pif_ram[data..data + size]); } else { @@ -137,7 +137,7 @@ fn read_mbc5( pif_ram[data..data + size] .copy_from_slice(&cart.rom[banked_address as usize..banked_address as usize + size]); } else if address < 0x8000 { - let banked_address = (cart.rom_bank << 14) | (address & 0x3FFF); + let banked_address = address as u32 - 0x4000 + (cart.rom_bank << 14); pif_ram[data..data + size] .copy_from_slice(&cart.rom[banked_address as usize..banked_address as usize + size]); } else if (0xa000..0xc000).contains(&address) { @@ -148,7 +148,7 @@ fn read_mbc5( return; } - let banked_address = (cart.ram_bank << 13) | (address & 0x1FFF); + let banked_address = address - 0xA000 + (cart.ram_bank << 13); pif_ram[data..data + size] .copy_from_slice(&cart.ram[banked_address as usize..banked_address as usize + size]); } else { diff --git a/src/device/controller/transferpak.rs b/src/device/controller/transferpak.rs index 7b1512f..858f8a8 100644 --- a/src/device/controller/transferpak.rs +++ b/src/device/controller/transferpak.rs @@ -55,7 +55,7 @@ pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usi device::controller::gbcart::read( &mut device.pif.ram, &mut pak.cart, - (address & 0x3fff) | ((pak.bank & 0x3) * 0x4000), + 0x4000 * pak.bank + (address & 0x7fff) - 0x4000, data, size, ); @@ -121,7 +121,7 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us device::controller::gbcart::write( &mut device.pif.ram, &mut pak.cart, - (address & 0x3fff) | ((pak.bank & 0x3) * 0x4000), + 0x4000 * pak.bank + (address & 0x7fff) - 0x4000, data, size, ); From 48ee50dea3afcfd8a07229cc0e7f182e89db25e9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 24 Feb 2025 15:31:19 +0100 Subject: [PATCH 0354/1117] fix Stadium 2 GB games (#281) --- src/device/controller/gbcart.rs | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index 61c3beb..d43a87b 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -40,7 +40,7 @@ fn write_mbc3( } else if address < 0x6000 { cart.ram_bank = (value & 0xf) as u16; } else if address < 0x8000 { - println!("MBC3 RTC latch") + // RTC not implemented } else if (0xa000..0xc000).contains(&address) { if !cart.ram_enabled { return; @@ -50,7 +50,7 @@ fn write_mbc3( cart.ram[banked_address as usize..banked_address as usize + size] .copy_from_slice(&pif_ram[data..data + size]); } else { - panic!("Unsupported ram bank {:x}", cart.ram_bank); + // RTC not implemented } } else { panic!("Unsupported write address {:x}", address); @@ -80,12 +80,21 @@ fn read_mbc3( return; } if cart.ram_bank < 0x8 { - let banked_address = address - 0xA000 + (cart.ram_bank * 0x2000); - pif_ram[data..data + size].copy_from_slice( - &cart.ram[banked_address as usize..banked_address as usize + size], - ); + if cart.ram_bank > 3 { + for i in 0..size { + pif_ram[data + i] = 0; + } + } else { + let banked_address = address - 0xA000 + (cart.ram_bank * 0x2000); + pif_ram[data..data + size].copy_from_slice( + &cart.ram[banked_address as usize..banked_address as usize + size], + ); + } } else { - panic!("Unsupported ram bank {:x}", cart.ram_bank); + // RTC not implemented + for i in 0..size { + pif_ram[data + i] = 0; + } } } else { panic!("Unsupported read address {:x}", address); From 8fbc63a677a8c43cddf7e79e1d48e28f6a45251a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 24 Feb 2025 18:50:29 +0100 Subject: [PATCH 0355/1117] add links to wiki and discord (#282) --- src/ui/gui.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 7d1fbbe..3665f4a 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -594,7 +594,11 @@ impl eframe::App for GopherEguiApp { ui.checkbox(&mut self.integer_scaling, "Integer Scaling"); ui.checkbox(&mut self.fullscreen, "Fullscreen (Esc closes game)"); - ui.add_space(32.0); + ui.add_space(16.0); + ui.hyperlink_to("Wiki", "https://github.com/gopher64/gopher64/wiki"); + ui.hyperlink_to("Discord Server", "https://discord.gg/9RGXq8W8JQ"); + ui.add_space(16.0); + ui.label(format!("Version: {}", env!("CARGO_PKG_VERSION"))); if self.latest_version.is_some() { let current_version = semver::Version::parse(env!("CARGO_PKG_VERSION")).unwrap(); From 82b4adb4add1e0e98650131a9b37de2b0736d1c0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 26 Feb 2025 10:04:44 +0100 Subject: [PATCH 0356/1117] flash cart menu support (#283) * flash cart menu support * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more --- src/device.rs | 9 ++- src/device/cart.rs | 7 +- src/device/cart/rom.rs | 77 +++++++++------------- src/device/cart/sc64.rs | 137 +++++++++++++++++++++++++++++++++------- src/device/memory.rs | 8 +-- src/device/rdram.rs | 7 +- src/device/ri.rs | 25 +++++--- src/ui.rs | 1 + src/ui/audio.rs | 11 +++- src/ui/storage.rs | 71 ++++++++++++++++----- 10 files changed, 237 insertions(+), 116 deletions(-) diff --git a/src/device.rs b/src/device.rs index a62cf51..42b54b0 100644 --- a/src/device.rs +++ b/src/device.rs @@ -72,7 +72,7 @@ pub fn run_game(rom_contents: Vec, device: &mut Device) { ui::input::close(&mut device.ui); ui::video::close(&device.ui); ui::audio::close(&mut device.ui); - ui::storage::write_saves(&device.ui, &device.netplay); + ui::storage::write_saves(device); } fn swap_rom(contents: Vec) -> Vec { @@ -298,19 +298,18 @@ impl Device { }, cart: cart::Cart { rom: Vec::new(), - is_viewer_buffer: [0; 0xFFFF], + is_viewer_buffer: vec![0; 0xFFFF], pal: false, latch: 0, cic_seed: 0, - cic_type: cart::CicType::CicNus6102, - rdram_size_offset: 0, rtc: cart::AfRtc { control: 0x0200 }, sc64: cart::sc64::Sc64 { regs: [0; cart::sc64::SC64_REGS_COUNT as usize], regs_locked: true, cfg: [0; cart::sc64::SC64_CFG_COUNT as usize], sector: 0, - buffer: [0; 8192], + buffer: vec![0; 8192], + writeback_sector: vec![0; 256], }, flashram: cart::sram::Flashram { status: 0, diff --git a/src/device/cart.rs b/src/device/cart.rs index 2734638..157ee36 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -45,13 +45,10 @@ fn byte2bcd(mut n: u32) -> u8 { pub struct Cart { #[serde(skip)] pub rom: Vec, - #[serde(with = "serde_big_array::BigArray")] - pub is_viewer_buffer: [u8; 0xFFFF], + pub is_viewer_buffer: Vec, pub pal: bool, pub latch: u32, - pub cic_type: CicType, pub cic_seed: u8, - pub rdram_size_offset: usize, pub rtc: AfRtc, pub sc64: sc64::Sc64, pub flashram: sram::Flashram, @@ -125,7 +122,7 @@ pub fn process(device: &mut device::Device, channel: usize) { } } -fn format_eeprom(device: &mut device::Device) { +pub fn format_eeprom(device: &mut device::Device) { if device.ui.saves.eeprom.data.len() < EEPROM_MAX_SIZE { device.ui.saves.eeprom.data.resize(EEPROM_MAX_SIZE, 0xFF) } diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index ad5fd58..b74f31b 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -4,16 +4,12 @@ use sha2::{Digest, Sha256}; const CART_MASK: usize = 0xFFFFFFF; fn read_cart_word(device: &mut device::Device, address: usize) -> u32 { - let mut data: [u8; 4] = device.cart.rom[address..address + 4].try_into().unwrap(); + let mut data: [u8; 4] = [0; 4]; for i in 0..4 { - if device - .ui - .saves - .romsave - .data - .contains_key(&(address as u32 + i)) - { - data[i as usize] = device.ui.saves.romsave.data[&(address as u32 + i)]; + if let Some(value) = device.ui.saves.romsave.data.get(&(address as u32 + i)) { + data[i as usize] = *value; + } else { + data[i as usize] = *device.cart.rom.get(address + i as usize).unwrap_or(&0); } } u32::from_be_bytes(data) @@ -46,7 +42,9 @@ pub fn read_mem( } pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { - if device.cart.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] != 0 { + if device.cart.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] != 0 + && device.cart.sc64.cfg[device::cart::sc64::SC64_BOOTLOADER_SWITCH as usize] == 0 + { let masked_address = address as usize & CART_MASK; let mut data = read_cart_word(device, masked_address); device::memory::masked_write_32(&mut data, value, mask); @@ -79,20 +77,19 @@ pub fn dma_read( mut dram_addr: u32, length: u32, ) -> u64 { - if device.cart.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] != 0 { + if device.cart.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] != 0 + && device.cart.sc64.cfg[device::cart::sc64::SC64_BOOTLOADER_SWITCH as usize] == 0 + { dram_addr &= device::rdram::RDRAM_MASK as u32; cart_addr &= CART_MASK as u32; for i in 0..length { - if cart_addr + i < device.cart.rom.len() as u32 { - device.ui.saves.romsave.data.insert( - cart_addr + i, - device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap], - ); - - device.ui.saves.romsave.written = true; - } + device.ui.saves.romsave.data.insert( + cart_addr + i, + device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap], + ); } + device.ui.saves.romsave.written = true; } device::pi::calculate_cycles(device, 1, length) @@ -109,24 +106,23 @@ pub fn dma_write( cart_addr &= CART_MASK as u32; let mut i = dram_addr; let mut j = cart_addr; - while i < dram_addr + length && j < device.cart.rom.len() as u32 { + while i < dram_addr + length { if device.ui.saves.romsave.data.contains_key(&j) { device.rdram.mem[i as usize ^ device.byte_swap] = device.ui.saves.romsave.data[&j]; } else { - device.rdram.mem[i as usize ^ device.byte_swap] = device.cart.rom[j as usize]; + device.rdram.mem[i as usize ^ device.byte_swap] = + *device.cart.rom.get(j as usize).unwrap_or(&0); } i += 1; j += 1; } - while i < dram_addr + length { - // DMAs that extend past the end of the ROM return 0's for the portion that extends past the ROM length - device.rdram.mem[i as usize ^ device.byte_swap] = 0; - i += 1; - } + device::pi::calculate_cycles(device, 1, length) } pub fn init(device: &mut device::Device, rom_file: Vec) { + device.cart.sc64.cfg[device::cart::sc64::SC64_BOOTLOADER_SWITCH as usize] = 1; + device.cart.rom = rom_file; device.cart.pal = is_system_pal(device.cart.rom[0x3E]); set_cic(device); @@ -153,40 +149,27 @@ fn set_cic(device: &mut device::Device) { let hash = calculate_hash(&device.cart.rom[0x40..0x1000]); match hash.as_str() { "B99F06C4802C2377E31E388435955EF3E99C618A6D55D24699D828EB1075F1EB" => { - device.cart.cic_type = device::cart::CicType::CicNus6101; - device.cart.cic_seed = 0x3F; - device.cart.rdram_size_offset = 0x318; + device.cart.cic_seed = 0x3F; // CicNus6101 } "61E88238552C356C23D19409FE5570EE6910419586BC6FC740F638F761ADC46E" => { - device.cart.cic_type = device::cart::CicType::CicNus6102; - device.cart.cic_seed = 0x3F; - device.cart.rdram_size_offset = 0x318; + device.cart.cic_seed = 0x3F; // CicNus6102 } "BF3620D30817007091EBE9BDDD1B88C23B8A0052170B3309CDE5B6B4238E45E7" => { - device.cart.cic_type = device::cart::CicType::CicNus6103; - device.cart.cic_seed = 0x78; - device.cart.rdram_size_offset = 0x318; + device.cart.cic_seed = 0x78; // CicNus6103 } "04B7BC6717A9F0EB724CF927E74AD3876C381CBB280D841736FC5E55580B756B" => { - device.cart.cic_type = device::cart::CicType::CicNus6105; - device.cart.cic_seed = 0x91; - device.cart.rdram_size_offset = 0x3F0; + device.cart.cic_seed = 0x91; // CicNus6105 } "36ADC40148AF56F0D78CD505EB6A90117D1FD6F11C6309E52ED36BC4C6BA340E" => { - device.cart.cic_type = device::cart::CicType::CicNus6106; - device.cart.cic_seed = 0x85; - device.cart.rdram_size_offset = 0x318; + device.cart.cic_seed = 0x85; // CicNus6106 } "53C0088FB777870D0AF32F0251E964030E2E8B72E830C26042FD191169508C05" => { - device.cart.cic_type = device::cart::CicType::CicNus5167; - device.cart.cic_seed = 0xdd; - device.cart.rdram_size_offset = 0x318; + device.cart.cic_seed = 0xdd; // CicNus5167 device.cart.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] = 1; + device.cart.sc64.cfg[device::cart::sc64::SC64_BOOTLOADER_SWITCH as usize] = 0; } _ => { - device.cart.cic_type = device::cart::CicType::CicNus6102; - device.cart.cic_seed = 0x3F; - device.cart.rdram_size_offset = 0x318; + device.cart.cic_seed = 0x3F; // CicNus6102 println!("unknown IPL3 {}", hash) } } diff --git a/src/device/cart/sc64.rs b/src/device/cart/sc64.rs index b4e5728..f1f8440 100644 --- a/src/device/cart/sc64.rs +++ b/src/device/cart/sc64.rs @@ -1,4 +1,5 @@ use crate::device; +use crate::ui; pub const SDCARD_SIZE: usize = 0x4000000; @@ -11,19 +12,22 @@ const SC64_KEY_REG: u32 = 4; //const SC64_AUX_REG: u32 = 6; pub const SC64_REGS_COUNT: u32 = 7; +pub const SC64_BOOTLOADER_SWITCH: u32 = 0; pub const SC64_ROM_WRITE_ENABLE: u32 = 1; +pub const SC64_SAVE_TYPE: u32 = 6; pub const SC64_CFG_COUNT: u32 = 15; const SC64_BUFFER_MASK: usize = 0x1FFF; +const SC64_EEPROM_MASK: usize = 0xFFF; #[derive(serde::Serialize, serde::Deserialize)] pub struct Sc64 { - #[serde(with = "serde_big_array::BigArray")] - pub buffer: [u8; 8192], + pub buffer: Vec, pub regs: [u32; SC64_REGS_COUNT as usize], pub regs_locked: bool, pub cfg: [u32; SC64_CFG_COUNT as usize], pub sector: u32, + pub writeback_sector: Vec, } fn format_sdcard(device: &mut device::Device) { @@ -74,6 +78,11 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u SC64_SCR_REG => { if !device.cart.sc64.regs_locked { match char::from_u32(value & mask).unwrap() { + 'V' => { + // get version + device.cart.sc64.regs[SC64_DATA0_REG as usize] = (2 << 16) | 20; + device.cart.sc64.regs[SC64_DATA1_REG as usize] = 2; + } 'c' => { // get config device.cart.sc64.regs[SC64_DATA1_REG as usize] = device.cart.sc64.cfg @@ -81,6 +90,35 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } 'C' => { // set config + if device.cart.sc64.regs[SC64_DATA0_REG as usize] == SC64_SAVE_TYPE { + // if save type is being written, we are probably booting a game using the flash cart menu + // we shouldn't write saves to disk in this case (they are written to the SD card) + device.ui.saves.write_to_disk = false; + device.ui.save_type = + match device.cart.sc64.regs[SC64_DATA1_REG as usize] { + 0 => { + vec![] + } + 1 => { + vec![ui::storage::SaveTypes::Eeprom4k] + } + 2 => { + vec![ui::storage::SaveTypes::Eeprom16k] + } + 3 => { + vec![ui::storage::SaveTypes::Sram] + } + 4 => { + vec![ui::storage::SaveTypes::Flash] + } + _ => { + panic!( + "unknown sc64 save type: {}", + device.cart.sc64.regs[SC64_DATA1_REG as usize] + ) + } + } + } std::mem::swap( &mut device.cart.sc64.cfg [device.cart.sc64.regs[SC64_DATA0_REG as usize] as usize], @@ -165,8 +203,24 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } device.ui.saves.sdcard.written = true; } - 'U' => {} // USB_WRITE_STATUS, ignored - 'M' => {} // USB_WRITE, ignored + 'U' | 'u' => {} // USB status, ignored + 'M' | 'm' => {} // USB read/write, ignored + 'w' => { + // SD card writeback pending + device.cart.sc64.regs[SC64_DATA0_REG as usize] = 0; + } + 'W' => { + let writeback_sectors_address = + device.cart.sc64.regs[SC64_DATA0_REG as usize] as u64; + for i in 0..256 { + device.cart.sc64.writeback_sector[i] = device::memory::data_read( + device, + writeback_sectors_address + (i * 4) as u64, + device::memory::AccessSize::Word, + false, + ); + } + } _ => { panic!( "unknown sc64 command: {}", @@ -190,24 +244,48 @@ pub fn read_mem( address: u64, _access_size: device::memory::AccessSize, ) -> u32 { - let masked_address = address as usize & SC64_BUFFER_MASK; - u32::from_be_bytes( - device.cart.sc64.buffer[masked_address..masked_address + 4] - .try_into() - .unwrap(), - ) + if address & 0x2000 != 0 { + device::cart::format_eeprom(device); + let masked_address = address as usize & SC64_EEPROM_MASK; + u32::from_be_bytes( + device.ui.saves.eeprom.data[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ) + } else { + let masked_address = address as usize & SC64_BUFFER_MASK; + u32::from_be_bytes( + device.cart.sc64.buffer[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ) + } } pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { - let masked_address = address as usize & SC64_BUFFER_MASK; - let mut data = u32::from_be_bytes( + if address & 0x2000 != 0 { + device::cart::format_eeprom(device); + let masked_address = address as usize & SC64_EEPROM_MASK; + let mut data = u32::from_be_bytes( + device.ui.saves.eeprom.data[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ); + device::memory::masked_write_32(&mut data, value, mask); + device.ui.saves.eeprom.data[masked_address..masked_address + 4] + .copy_from_slice(&data.to_be_bytes()); + device.ui.saves.eeprom.written = true + } else { + let masked_address = address as usize & SC64_BUFFER_MASK; + let mut data = u32::from_be_bytes( + device.cart.sc64.buffer[masked_address..masked_address + 4] + .try_into() + .unwrap(), + ); + device::memory::masked_write_32(&mut data, value, mask); device.cart.sc64.buffer[masked_address..masked_address + 4] - .try_into() - .unwrap(), - ); - device::memory::masked_write_32(&mut data, value, mask); - device.cart.sc64.buffer[masked_address..masked_address + 4] - .copy_from_slice(&data.to_be_bytes()); + .copy_from_slice(&data.to_be_bytes()); + } } pub fn dma_read( @@ -217,12 +295,20 @@ pub fn dma_read( length: u32, ) -> u64 { dram_addr &= device::rdram::RDRAM_MASK as u32; - cart_addr &= SC64_BUFFER_MASK as u32; + let buffer = if cart_addr & 0x2000 != 0 { + device::cart::format_eeprom(device); + cart_addr &= SC64_EEPROM_MASK as u32; + device.ui.saves.eeprom.written = true; + &mut device.ui.saves.eeprom.data + } else { + cart_addr &= SC64_BUFFER_MASK as u32; + &mut device.cart.sc64.buffer + }; let mut i = dram_addr; let mut j = cart_addr; while i < dram_addr + length && i < device.rdram.size { - device.cart.sc64.buffer[j as usize] = device.rdram.mem[i as usize ^ device.byte_swap]; + buffer[j as usize] = device.rdram.mem[i as usize ^ device.byte_swap]; i += 1; j += 1; } @@ -237,12 +323,19 @@ pub fn dma_write( length: u32, ) -> u64 { dram_addr &= device::rdram::RDRAM_MASK as u32; - cart_addr &= SC64_BUFFER_MASK as u32; + let buffer = if cart_addr & 0x2000 != 0 { + device::cart::format_eeprom(device); + cart_addr &= SC64_EEPROM_MASK as u32; + &device.ui.saves.eeprom.data + } else { + cart_addr &= SC64_BUFFER_MASK as u32; + &device.cart.sc64.buffer + }; let mut i = dram_addr; let mut j = cart_addr; while i < dram_addr + length && i < device.rdram.size { - device.rdram.mem[i as usize ^ device.byte_swap] = device.cart.sc64.buffer[j as usize]; + device.rdram.mem[i as usize ^ device.byte_swap] = buffer[j as usize]; i += 1; j += 1; } diff --git a/src/device/memory.rs b/src/device/memory.rs index 3b87d7c..9cdf3e7 100644 --- a/src/device/memory.rs +++ b/src/device/memory.rs @@ -153,13 +153,13 @@ pub fn init(device: &mut device::Device) { } else if (MM_DOM2_ADDR2 >> 16..=(MM_DOM2_ADDR2 + 0x1FFFF) >> 16).contains(&i) { device.memory.memory_map_read[i] = device::cart::sram::read_mem; device.memory.memory_map_write[i] = device::cart::sram::write_mem; - } else if i >= MM_CART_ROM >> 16 && i <= (MM_CART_ROM + device.cart.rom.len() - 1) >> 16 { - device.memory.fast_read[i] = device::cart::rom::read_mem_fast; - device.memory.memory_map_read[i] = device::cart::rom::read_mem; - device.memory.memory_map_write[i] = device::cart::rom::write_mem; } else if i >= MM_IS_VIEWER >> 16 && i <= (MM_IS_VIEWER + 0xFFFF) >> 16 { device.memory.memory_map_read[i] = device::is_viewer::read_mem; device.memory.memory_map_write[i] = device::is_viewer::write_mem; + } else if (MM_CART_ROM >> 16..=(MM_CART_ROM + 0x0FBFFFFF) >> 16).contains(&i) { + device.memory.fast_read[i] = device::cart::rom::read_mem_fast; + device.memory.memory_map_read[i] = device::cart::rom::read_mem; + device.memory.memory_map_write[i] = device::cart::rom::write_mem; } else if i >= MM_PIF_MEM >> 16 && i <= (MM_PIF_MEM + 0xFFFF) >> 16 { device.memory.memory_map_read[i] = device::pif::read_mem; device.memory.memory_map_write[i] = device::pif::write_mem; diff --git a/src/device/rdram.rs b/src/device/rdram.rs index 71cf496..04ef5a4 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -106,13 +106,12 @@ pub fn init(device: &mut device::Device) { unsafe { Vec::from_raw_parts(ptr, device.rdram.size as usize, device.rdram.size as usize) }; // hack, skip RDRAM initialization - device.rdram.mem[device.cart.rdram_size_offset..device.cart.rdram_size_offset + 4] - .copy_from_slice(&device.rdram.size.to_ne_bytes()); + device.rdram.mem[0x318..0x318 + 4].copy_from_slice(&device.rdram.size.to_ne_bytes()); + // hack, skip RDRAM initialization + device.rdram.mem[0x3f0..0x3f0 + 4].copy_from_slice(&device.rdram.size.to_ne_bytes()); device.ri.regs[device::ri::RI_MODE_REG as usize] = 0x0e; device.ri.regs[device::ri::RI_CONFIG_REG as usize] = 0x40; - device.ri.regs[device::ri::RI_SELECT_REG as usize] = 0x14; - device.ri.regs[device::ri::RI_REFRESH_REG as usize] = 0x00063634; } pub fn rdram_calculate_cycles(length: u64) -> u64 { diff --git a/src/device/ri.rs b/src/device/ri.rs index b6b5cec..f501a91 100644 --- a/src/device/ri.rs +++ b/src/device/ri.rs @@ -22,17 +22,24 @@ pub fn read_regs( _access_size: device::memory::AccessSize, ) -> u32 { device::cop0::add_cycles(device, 20); - if ((address & 0xFFFF) >> 2) as u32 == RI_SELECT_REG && !device.ri.ram_init { - device::cop0::add_cycles(device, device.cpu.clock_rate / 2); // hack, simulate RDRAM initialization - device.ri.ram_init = true; + let reg = (address & 0xFFFF) >> 2; + match reg as u32 { + RI_SELECT_REG => { + if !device.ri.ram_init { + device::cop0::add_cycles(device, device.cpu.clock_rate / 2); // hack, simulate RDRAM initialization + device.ri.ram_init = true; + } + 0x14 // hack, skip RDRAM initialization + } + RI_REFRESH_REG => 0x00063634, // hack, skip RDRAM initialization + _ => device.ri.regs[reg as usize], } - device.ri.regs[((address & 0xFFFF) >> 2) as usize] } pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { - device::memory::masked_write_32( - &mut device.ri.regs[((address & 0xFFFF) >> 2) as usize], - value, - mask, - ); + let reg = (address & 0xFFFF) >> 2; + if reg as u32 == RI_SELECT_REG { + device.ri.ram_init = false; + } + device::memory::masked_write_32(&mut device.ri.regs[reg as usize], value, mask); } diff --git a/src/ui.rs b/src/ui.rs index 29ffad8..7a9ccea 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -122,6 +122,7 @@ impl Ui { savestate_file_path: std::path::PathBuf::new(), }, saves: storage::Saves { + write_to_disk: true, eeprom: storage::Save { data: Vec::new(), written: false, diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 2b8ecd9..d47d899 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -14,15 +14,20 @@ pub struct EventAudio { pub fn init(ui: &mut ui::Ui, frequency: u64) { ui::sdl_init(sdl3_sys::init::SDL_INIT_AUDIO); - let audio_spec = sdl3_sys::audio::SDL_AudioSpec { + let game_audio_spec = sdl3_sys::audio::SDL_AudioSpec { format: sdl3_sys::audio::SDL_AUDIO_S16LE, freq: frequency as i32, channels: 2, }; + let device_audio_spec = sdl3_sys::audio::SDL_AudioSpec { + format: sdl3_sys::audio::SDL_AUDIO_S16LE, + freq: 48000, + channels: 2, + }; ui.audio_device = unsafe { sdl3_sys::audio::SDL_OpenAudioDevice( sdl3_sys::audio::SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, - &audio_spec, + &device_audio_spec, ) }; if ui.audio_device == 0 { @@ -36,7 +41,7 @@ pub fn init(ui: &mut ui::Ui, frequency: u64) { panic!("Could not get audio device format"); } - ui.audio_stream = unsafe { sdl3_sys::audio::SDL_CreateAudioStream(&audio_spec, &dst) }; + ui.audio_stream = unsafe { sdl3_sys::audio::SDL_CreateAudioStream(&game_audio_spec, &dst) }; if ui.audio_stream.is_null() { return; } diff --git a/src/ui/storage.rs b/src/ui/storage.rs index b5bc764..77598d9 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -1,4 +1,4 @@ -use crate::{netplay, ui}; +use crate::{device, netplay, ui}; use std::io::Read; use std::io::Write; @@ -45,6 +45,7 @@ pub struct Saves { pub mempak: Save, pub sdcard: Save, pub romsave: RomSave, + pub write_to_disk: bool, } fn get_save_type(rom: &[u8], game_id: &str) -> Vec { @@ -317,25 +318,61 @@ fn write_rom_save(ui: &ui::Ui) { std::fs::write(ui.paths.romsave_file_path.clone(), data).unwrap(); } -pub fn write_saves(ui: &ui::Ui, netplay: &Option) { - if netplay.is_none() || netplay.as_ref().unwrap().player_number == 0 { - if ui.saves.eeprom.written { - write_save(ui, SaveTypes::Eeprom16k) +fn writeback_sdcard(device: &mut device::Device) { + let length; + let save_data: &[u8]; + if device.ui.saves.eeprom.written { + if device + .ui + .save_type + .contains(&ui::storage::SaveTypes::Eeprom4k) + { + length = 1; + } else { + length = 4; } - if ui.saves.sram.written { - write_save(ui, SaveTypes::Sram) + save_data = device.ui.saves.eeprom.data.as_ref(); + } else if device.ui.saves.sram.written { + length = device.ui.saves.sram.data.len() / 512; + save_data = device.ui.saves.sram.data.as_ref(); + } else if device.ui.saves.flash.written { + length = device.ui.saves.flash.data.len() / 512; + save_data = device.ui.saves.flash.data.as_ref(); + } else { + return; + } + + for i in 0..length { + let offset = device.cart.sc64.writeback_sector[i] as usize * 512; + device.ui.saves.sdcard.data[offset..offset + 512] + .copy_from_slice(&save_data[i * 512..(i + 1) * 512]); + } + device.ui.saves.sdcard.written = true; +} + +pub fn write_saves(device: &mut device::Device) { + if device.netplay.is_none() || device.netplay.as_ref().unwrap().player_number == 0 { + if device.ui.saves.write_to_disk { + if device.ui.saves.eeprom.written { + write_save(&device.ui, SaveTypes::Eeprom16k) + } + if device.ui.saves.sram.written { + write_save(&device.ui, SaveTypes::Sram) + } + if device.ui.saves.flash.written { + write_save(&device.ui, SaveTypes::Flash) + } + if device.ui.saves.romsave.written { + write_save(&device.ui, SaveTypes::Romsave) + } + } else { + writeback_sdcard(device) } - if ui.saves.flash.written { - write_save(ui, SaveTypes::Flash) + if device.ui.saves.mempak.written { + write_save(&device.ui, SaveTypes::Mempak) } - if ui.saves.mempak.written { - write_save(ui, SaveTypes::Mempak) - } - if ui.saves.sdcard.written { - write_save(ui, SaveTypes::Sdcard) - } - if ui.saves.romsave.written { - write_save(ui, SaveTypes::Romsave) + if device.ui.saves.sdcard.written { + write_save(&device.ui, SaveTypes::Sdcard) } } } From 319d7c85531fcc832af49292f13929af5b38340e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 26 Feb 2025 21:00:15 +0100 Subject: [PATCH 0357/1117] some mbc3 rtc code (#284) --- src/device/controller/gbcart.rs | 46 ++++++++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index d43a87b..e8ea6b8 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -10,6 +10,11 @@ pub struct GbCart { pub ram_enabled: bool, pub ram_bank: u16, pub rom_bank: u32, + pub set_latch: bool, + pub latch_second: u8, + pub latch_minute: u8, + pub latch_hour: u8, + pub latch_day: u16, } #[derive(Default, Copy, Clone, serde::Serialize, serde::Deserialize)] @@ -40,7 +45,10 @@ fn write_mbc3( } else if address < 0x6000 { cart.ram_bank = (value & 0xf) as u16; } else if address < 0x8000 { - // RTC not implemented + if !cart.set_latch && value != 0 { + // not implemented + } + cart.set_latch = value != 0; } else if (0xa000..0xc000).contains(&address) { if !cart.ram_enabled { return; @@ -50,7 +58,28 @@ fn write_mbc3( cart.ram[banked_address as usize..banked_address as usize + size] .copy_from_slice(&pif_ram[data..data + size]); } else { - // RTC not implemented + match cart.ram_bank { + 0x8 => { + cart.latch_second = value; + } + 0x9 => { + cart.latch_minute = value; + } + 0xA => { + cart.latch_hour = value; + } + 0xB => { + cart.latch_day &= 0xFF00; + cart.latch_day |= value as u16; + } + 0xC => { + cart.latch_day &= 0x00FF; + cart.latch_day |= (value as u16) << 8; + } + _ => { + panic!("Unsupported ram bank {:x}", cart.ram_bank); + } + } } } else { panic!("Unsupported write address {:x}", address); @@ -91,9 +120,18 @@ fn read_mbc3( ); } } else { - // RTC not implemented + let latch = match cart.ram_bank { + 0x8 => cart.latch_second, + 0x9 => cart.latch_minute, + 0xA => cart.latch_hour, + 0xB => cart.latch_day as u8, + 0xC => (cart.latch_day >> 8) as u8, + _ => { + panic!("Unsupported ram bank {:x}", cart.ram_bank); + } + }; for i in 0..size { - pif_ram[data + i] = 0; + pif_ram[data + i] = latch; } } } else { From 00964f06f061c3a0bd270981ab7ed5bee6600da1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 27 Feb 2025 10:04:53 +0100 Subject: [PATCH 0358/1117] use GL backend for GUI to avoid conflicts with game window (#287) --- src/main.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main.rs b/src/main.rs index fdf7fb1..1315364 100644 --- a/src/main.rs +++ b/src/main.rs @@ -169,6 +169,18 @@ async fn main() { handle.join().unwrap(); } else { let options = eframe::NativeOptions { + wgpu_options: eframe::egui_wgpu::WgpuConfiguration { + wgpu_setup: eframe::egui_wgpu::WgpuSetup::CreateNew( + eframe::egui_wgpu::WgpuSetupCreateNew { + instance_descriptor: eframe::egui_wgpu::wgpu::InstanceDescriptor { + backends: eframe::wgpu::Backends::GL, + ..Default::default() + }, + ..Default::default() + }, + ), + ..Default::default() + }, viewport: eframe::egui::ViewportBuilder::default() .with_inner_size([854.0, 480.0]) .with_icon( From 37b902eb31991003be284cdc2d41ee30d33cde71 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 27 Feb 2025 10:59:44 +0100 Subject: [PATCH 0359/1117] use deterministic rtc time (#288) * use deterministic rtc time * netplay --- src/device.rs | 1 + src/device/cart.rs | 5 ++++- src/device/cart/rom.rs | 12 ++++++++++++ src/netplay.rs | 18 ++++++++++++++++++ 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/device.rs b/src/device.rs index 42b54b0..a7160f6 100644 --- a/src/device.rs +++ b/src/device.rs @@ -302,6 +302,7 @@ impl Device { pal: false, latch: 0, cic_seed: 0, + rtc_timestamp: 0, rtc: cart::AfRtc { control: 0x0200 }, sc64: cart::sc64::Sc64 { regs: [0; cart::sc64::SC64_REGS_COUNT as usize], diff --git a/src/device/cart.rs b/src/device/cart.rs index 157ee36..448fc02 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -52,6 +52,7 @@ pub struct Cart { pub rtc: AfRtc, pub sc64: sc64::Sc64, pub flashram: sram::Flashram, + pub rtc_timestamp: i64, } pub fn process(device: &mut device::Device, channel: usize) { @@ -151,7 +152,9 @@ fn eeprom_write_block(device: &mut device::Device, block: usize, offset: usize, } fn time2data(device: &mut device::Device, offset: usize) { - let now: chrono::DateTime = chrono::Local::now(); + let timestamp = + device.cart.rtc_timestamp + (device.vi.frame_time * device.vi.vi_counter as f64) as i64; + let now = chrono::DateTime::from_timestamp(timestamp, 0).unwrap(); device.pif.ram[offset] = byte2bcd(now.second()); device.pif.ram[offset + 1] = byte2bcd(now.minute()); diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index b74f31b..87a9b38 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -1,4 +1,5 @@ use crate::device; +use crate::netplay; use sha2::{Digest, Sha256}; const CART_MASK: usize = 0xFFFFFFF; @@ -121,6 +122,17 @@ pub fn dma_write( } pub fn init(device: &mut device::Device, rom_file: Vec) { + let now: chrono::DateTime = chrono::Local::now(); + device.cart.rtc_timestamp = now.naive_local().and_utc().timestamp(); + if device.netplay.is_some() { + let netplay = device.netplay.as_mut().unwrap(); + if netplay.player_number == 0 { + netplay::send_rtc(netplay, device.cart.rtc_timestamp); + } else { + device.cart.rtc_timestamp = netplay::receive_rtc(netplay); + } + } + device.cart.sc64.cfg[device::cart::sc64::SC64_BOOTLOADER_SWITCH as usize] = 1; device.cart.rom = rom_file; diff --git a/src/netplay.rs b/src/netplay.rs index b0a4a78..f9cd27d 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -16,6 +16,8 @@ const TCP_REGISTER_PLAYER: u8 = 5; const TCP_GET_REGISTRATION: u8 = 6; const TCP_DISCONNECT_NOTICE: u8 = 7; const TCP_RECEIVE_SAVE_WITH_SIZE: u8 = 8; +const TCP_SEND_RTC: u8 = 64; +const TCP_RECEIVE_RTC: u8 = 128; const CS4: u32 = 32; @@ -50,6 +52,22 @@ pub const NETPLAY_ERROR_PLAYER_2_DISCONNECTED: u32 = 4; pub const NETPLAY_ERROR_PLAYER_3_DISCONNECTED: u32 = 5; pub const NETPLAY_ERROR_PLAYER_4_DISCONNECTED: u32 = 6; +pub fn send_rtc(netplay: &mut Netplay, rtc: i64) { + let mut request: Vec = [TCP_SEND_RTC].to_vec(); + let size: u32 = 8; + request.extend_from_slice(&size.to_be_bytes()); + request.extend_from_slice(&rtc.to_be_bytes()); + netplay.tcp_stream.write_all(&request).unwrap(); +} + +pub fn receive_rtc(netplay: &mut Netplay) -> i64 { + let request: Vec = [TCP_RECEIVE_RTC].to_vec(); + netplay.tcp_stream.write_all(&request).unwrap(); + let mut rtc: [u8; 8] = [0; 8]; + netplay.tcp_stream.read_exact(&mut rtc).unwrap(); + i64::from_be_bytes(rtc) +} + pub fn send_save(netplay: &mut Netplay, save_type: &str, save_data: &[u8], size: usize) { let mut request: Vec = [TCP_SEND_SAVE].to_vec(); request.extend_from_slice(save_type.as_bytes()); From eb9f37f1f50256c5f5dad7073f4c2d0378a2dee2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 27 Feb 2025 11:29:30 +0100 Subject: [PATCH 0360/1117] add button to open save folder (#289) --- src/ui/gui.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 3665f4a..69989a4 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -493,6 +493,19 @@ impl eframe::App for GopherEguiApp { self.netplay.create = true; } + if ui.button("Open Saves Folder").clicked() { + let command = if cfg!(target_os = "windows") { + "explorer" + } else if cfg!(target_os = "linux") { + "xdg-open" + } else { + panic!("Unsupported platform"); + }; + let _ = std::process::Command::new(command) + .arg(self.dirs.data_dir.join("saves")) + .spawn(); + } + ui.end_row(); if ui.button("Configure Input Profile").clicked() From f7cb0db3481d6168d7454a692b365f6ce3b84244 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 27 Feb 2025 11:31:18 +0100 Subject: [PATCH 0361/1117] update cargo packages --- Cargo.lock | 91 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 50 insertions(+), 41 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e2b3317..d1a8550 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -438,12 +438,11 @@ checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" [[package]] name = "bzip2" -version = "0.4.4" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +checksum = "75b89e7c29231c673a61a46e722602bcd138298f6b9e81e71119693534585f5c" dependencies = [ "bzip2-sys", - "libc", ] [[package]] @@ -532,16 +531,16 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.39" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -567,9 +566,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.30" +version = "4.5.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92b7b18d71fad5313a1e320fa9897994228ce274b60faa4d694fe0ea89cd9e6d" +checksum = "027bb0d98429ae334a8698531da7077bdf906419543a35a55c2cb1b66437d767" dependencies = [ "clap_builder", "clap_derive", @@ -577,9 +576,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.30" +version = "4.5.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a35db2071778a7344791a4fb4f95308b5673d219dee3ae348b86642574ecc90c" +checksum = "5589e0cba072e0f3d23791efac0fd8627b49c829c196a492e88168e6a669d863" dependencies = [ "anstream", "anstyle", @@ -1027,9 +1026,9 @@ dependencies = [ [[package]] name = "either" -version = "1.13.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "b7914353092ddf589ad78f25c5c1c21b7f80b0ff8621e7c814c3485b5306da9d" [[package]] name = "emath" @@ -1200,9 +1199,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.35" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc" dependencies = [ "crc32fast", "miniz_oxide", @@ -1374,8 +1373,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi 0.13.3+wasi-0.2.2", + "wasm-bindgen", "windows-targets 0.52.6", ] @@ -1516,23 +1517,25 @@ dependencies = [ [[package]] name = "governor" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "842dc78579ce01e6a1576ad896edc92fca002dd60c9c3746b7fc2bec6fb429d0" +checksum = "be93b4ec2e4710b04d9264c0c7350cdd62a8c20e5e4ac732552ebb8f0debe8eb" dependencies = [ "cfg-if", "dashmap", "futures-sink", "futures-timer", "futures-util", + "getrandom 0.3.1", "no-std-compat", "nonzero_ext", "parking_lot", "portable-atomic", "quanta", - "rand 0.8.5", + "rand 0.9.0", "smallvec", "spinning_top", + "web-time", ] [[package]] @@ -2057,9 +2060,9 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] name = "libc" -version = "0.2.169" +version = "0.2.170" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" [[package]] name = "libloading" @@ -2100,9 +2103,9 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "litemap" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" [[package]] name = "litrs" @@ -2222,9 +2225,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3b1c9bd4fe1f0f8b387f6eb9eb3b4a1aa26185e5750efb9140301703f62cd1b" +checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" dependencies = [ "adler2", "simd-adler32", @@ -2793,9 +2796,9 @@ checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" [[package]] name = "portable-atomic" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" [[package]] name = "postcard" @@ -2962,7 +2965,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" dependencies = [ "rand_chacha 0.9.0", - "rand_core 0.9.1", + "rand_core 0.9.2", "zerocopy 0.8.20", ] @@ -2983,7 +2986,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.1", + "rand_core 0.9.2", ] [[package]] @@ -2997,9 +3000,9 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a88e0da7a2c97baa202165137c158d0a2e824ac465d13d81046727b34cb247d3" +checksum = "7a509b1a2ffbe92afab0e55c8fd99dea1c280e8171bd2d88682bb20bc41cbc2c" dependencies = [ "getrandom 0.3.1", "zerocopy 0.8.20", @@ -3155,9 +3158,9 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.10" +version = "0.17.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34b5020fcdea098ef7d95e9f89ec15952123a4a039badd09fabebe9e963e839" +checksum = "da5349ae27d3887ca812fb375b45a4fbb36d8d12d2df394968cd86e35683fe73" dependencies = [ "cc", "cfg-if", @@ -4337,9 +4340,9 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "24.0.0" +version = "24.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82a39b8842dc9ffcbe34346e3ab6d496b32a47f6497e119d762c97fcaae3cb37" +checksum = "671c25545d479b47d3f0a8e373aceb2060b67c6eb841b24ac8c32348151c7a0c" dependencies = [ "arrayvec", "bit-vec 0.8.0", @@ -4362,9 +4365,9 @@ dependencies = [ [[package]] name = "wgpu-hal" -version = "24.0.0" +version = "24.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a782e5056b060b0b4010881d1decddd059e44f2ecd01e2db2971b48ad3627e5" +checksum = "4317a17171dc20e6577bf606796794580accae0716a69edbc7388c86a3ec9f23" dependencies = [ "android_system_properties", "arrayvec", @@ -4499,6 +4502,12 @@ dependencies = [ "syn", ] +[[package]] +name = "windows-link" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dccfd733ce2b1753b03b6d3c65edf020262ea35e20ccdf3e288043e6dd620e3" + [[package]] name = "windows-registry" version = "0.2.0" @@ -5030,18 +5039,18 @@ dependencies = [ [[package]] name = "zerofrom" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", @@ -5093,9 +5102,9 @@ dependencies = [ [[package]] name = "zip" -version = "2.2.2" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae9c1ea7b3a5e1f4b922ff856a129881167511563dc219869afe3787fc0c1a45" +checksum = "b280484c454e74e5fff658bbf7df8fdbe7a07c6b2de4a53def232c15ef138f3a" dependencies = [ "aes", "arbitrary", From ff093a9f7fda6455c6b3d22cc258fa4184a3aeab Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 27 Feb 2025 15:55:07 +0100 Subject: [PATCH 0362/1117] Update README.md --- README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b24209f..a5573cc 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # gopher64 -Gopher64 can be used via its GUI or the command line. +## download + +https://github.com/gopher64/gopher64/releases ## wiki @@ -55,7 +57,3 @@ I am very open to contributions! Please reach out to me via a GitHub issue, or v ## license Gopher64 is licensed under the GPLv3 license. Many portions of gopher64 have been adapted from mupen64plus and/or ares. The license for mupen64plus can be found here: https://github.com/mupen64plus/mupen64plus-core/blob/master/LICENSES. The license for ares can be found here: https://github.com/ares-emulator/ares/blob/master/LICENSE. - -## where to download - -https://github.com/gopher64/gopher64/releases From ee77e75855cf5422d0a6302352fefeedafaa74e5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 27 Feb 2025 17:22:19 +0100 Subject: [PATCH 0363/1117] bump to 1.0.10 (#290) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d1a8550..c8c1435 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1483,7 +1483,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.0.9" +version = "1.0.10" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index 5892a8d..2cf45bf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.9" +version = "1.0.10" edition = "2024" rust-version = "1.85" From 7b51ca82eb3206e28284d0080a623967cf6856d9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 27 Feb 2025 22:05:19 +0100 Subject: [PATCH 0364/1117] add widescreen stretch option (#291) --- parallel-rdp/interface.cpp | 2 +- parallel-rdp/interface.hpp | 1 + src/ui/config.rs | 2 ++ src/ui/gui.rs | 8 ++++++++ src/ui/video.rs | 19 ++++++++++++++++--- 5 files changed, 28 insertions(+), 4 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 6cb0831..5f18c73 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -294,7 +294,7 @@ void rdp_close() static void calculate_viewport(float *x, float *y, float *width, float *height) { - const int32_t display_width = gfx_info.PAL ? 384 : 320; + const int32_t display_width = gfx_info.widescreen ? (gfx_info.PAL ? 512 : 426) : (gfx_info.PAL ? 384 : 320); const int32_t display_height = gfx_info.PAL ? 288 : 240; int w, h; diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index fceaa82..583625e 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -17,6 +17,7 @@ extern "C" uint32_t *DPC_END_REG; uint32_t *DPC_STATUS_REG; bool PAL; + bool widescreen; } GFX_INFO; typedef struct diff --git a/src/ui/config.rs b/src/ui/config.rs index 9c43789..a5fdb12 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -45,6 +45,7 @@ pub struct Video { pub upscale: u32, pub integer_scaling: bool, pub fullscreen: bool, + pub widescreen: bool, } #[derive(serde::Serialize, serde::Deserialize)] pub struct Config { @@ -96,6 +97,7 @@ impl Config { upscale: 1, integer_scaling: false, fullscreen: false, + widescreen: false, }, } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 69989a4..36121da 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -17,6 +17,7 @@ pub struct GopherEguiApp { upscale: u32, integer_scaling: bool, fullscreen: bool, + widescreen: bool, emulate_vru: bool, dinput: bool, show_vru_dialog: bool, @@ -41,6 +42,7 @@ struct SaveConfig { upscale: u32, integer_scaling: bool, fullscreen: bool, + widescreen: bool, emulate_vru: bool, } @@ -116,6 +118,7 @@ impl GopherEguiApp { upscale: config.video.upscale, integer_scaling: config.video.integer_scaling, fullscreen: config.video.fullscreen, + widescreen: config.video.widescreen, emulate_vru: config.input.emulate_vru, show_vru_dialog: false, dinput: false, @@ -152,6 +155,7 @@ fn save_config( config.video.upscale = save_config_items.upscale; config.video.integer_scaling = save_config_items.integer_scaling; config.video.fullscreen = save_config_items.fullscreen; + config.video.widescreen = save_config_items.widescreen; config.input.emulate_vru = save_config_items.emulate_vru; } @@ -165,6 +169,7 @@ impl Drop for GopherEguiApp { upscale: self.upscale, integer_scaling: self.integer_scaling, fullscreen: self.fullscreen, + widescreen: self.widescreen, emulate_vru: self.emulate_vru, }; let mut config = ui::config::Config::new(); @@ -300,6 +305,7 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { let upscale = app.upscale; let integer_scaling = app.integer_scaling; let fullscreen = app.fullscreen; + let widescreen = app.widescreen; let emulate_vru = app.emulate_vru; let peer_addr; let session; @@ -394,6 +400,7 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { upscale, integer_scaling, fullscreen, + widescreen, emulate_vru, }; @@ -606,6 +613,7 @@ impl eframe::App for GopherEguiApp { }; ui.checkbox(&mut self.integer_scaling, "Integer Scaling"); ui.checkbox(&mut self.fullscreen, "Fullscreen (Esc closes game)"); + ui.checkbox(&mut self.widescreen, "Widescreen (stretch)"); ui.add_space(16.0); ui.hyperlink_to("Wiki", "https://github.com/gopher64/gopher64/wiki"); diff --git a/src/ui/video.rs b/src/ui/video.rs index 0553fed..87a5205 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -16,11 +16,22 @@ pub fn init(device: &mut device::Device) { } flags |= sdl3_sys::video::SDL_WINDOW_INPUT_FOCUS; - let mut window_width = 640; - let mut window_height = 480; + let window_width; + let window_height; if device.cart.pal { - window_width = 768; + window_width = if device.ui.config.video.widescreen { + 1024 + } else { + 768 + }; window_height = 576; + } else { + window_width = if device.ui.config.video.widescreen { + 852 + } else { + 640 + }; + window_height = 480; } device.ui.window = unsafe { sdl3_sys::video::SDL_CreateWindow(title.as_ptr(), window_width, window_height, flags) @@ -42,6 +53,7 @@ pub fn init(device: &mut device::Device) { DPC_END_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_END_REG as usize], DPC_STATUS_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_STATUS_REG as usize], PAL: device.cart.pal, + widescreen: device.ui.config.video.widescreen, }; unsafe { @@ -85,6 +97,7 @@ pub fn load_state(device: &mut device::Device) { DPC_END_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_END_REG as usize], DPC_STATUS_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_STATUS_REG as usize], PAL: device.cart.pal, + widescreen: device.ui.config.video.widescreen, }; unsafe { rdp_new_processor(gfx_info, device.ui.config.video.upscale); From 5a3609d5017fdba96c341c73de1ee0ef4b8fa978 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 28 Feb 2025 09:47:34 +0100 Subject: [PATCH 0365/1117] add option to crop out letterbox (#292) --- parallel-rdp/interface.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 5f18c73..5a950df 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -63,6 +63,7 @@ static int cmd_ptr; static CALL_BACK callback; static GFX_INFO gfx_info; static uint32_t region; +static bool crop_letterbox; typedef struct { @@ -178,6 +179,9 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) if (fullscreen) callback.emu_running = false; break; + case SDL_SCANCODE_F4: + crop_letterbox = !crop_letterbox; + break; case SDL_SCANCODE_F5: callback.save_state = true; break; @@ -263,6 +267,7 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, uint32_t _upscale, bool _intege callback.emu_running = true; callback.enable_speedlimiter = true; + crop_letterbox = false; } void rdp_close() @@ -338,6 +343,22 @@ static void render_frame(Vulkan::Device &device) options.persist_frame_on_invalid_input = true; options.blend_previous_frame = true; options.upscale_deinterlacing = false; + + if (crop_letterbox && gfx_info.widescreen) + { + options.crop_rect.enable = true; + if (gfx_info.PAL) + { + options.crop_rect.top = 36; + options.crop_rect.bottom = 36; + } + else + { + options.crop_rect.top = 30; + options.crop_rect.bottom = 30; + } + } + Vulkan::ImageHandle image = processor->scanout(options); // Normally reflection is automated. From da1e686c1ab75dba2d9c729448d6395e1f84aee6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 28 Feb 2025 21:34:33 +0100 Subject: [PATCH 0366/1117] Add option for overclocking (#293) * add option to overclock CPU * netplay * more * more * more * more * more --- src/device.rs | 6 +++++- src/device/cpu.rs | 7 ++++++- src/main.rs | 4 ++-- src/ui/config.rs | 9 +++++++++ src/ui/gui.rs | 26 ++++++++++++++++++++------ src/ui/gui/gui_netplay.rs | 21 ++++++++++++++++++++- 6 files changed, 62 insertions(+), 11 deletions(-) diff --git a/src/device.rs b/src/device.rs index a7160f6..8bbf9a2 100644 --- a/src/device.rs +++ b/src/device.rs @@ -42,7 +42,10 @@ pub mod tlb; pub mod unmapped; pub mod vi; -pub fn run_game(rom_contents: Vec, device: &mut Device) { +pub fn run_game(device: &mut Device, rom_contents: Vec, fullscreen: bool, overclock: bool) { + device.ui.fullscreen = fullscreen; + device.cpu.overclock = overclock; + cart::rom::init(device, rom_contents); // cart needs to come before rdram // rdram pointer is shared with parallel-rdp @@ -270,6 +273,7 @@ impl Device { pc: 0xBFC00000, pc_phys: 0, llbit: false, + overclock: false, lo: 0, hi: 0, running: false, diff --git a/src/device/cpu.rs b/src/device/cpu.rs index a72ddd9..085bda8 100644 --- a/src/device/cpu.rs +++ b/src/device/cpu.rs @@ -30,6 +30,7 @@ pub struct Cpu { pub hi: u64, pub running: bool, pub llbit: bool, + pub overclock: bool, pub clock_rate: u64, #[serde(skip, default = "savestates::default_instructions")] pub instrs: [fn(&mut device::Device, u32); 64], @@ -223,7 +224,11 @@ pub fn map_instructions(device: &mut device::Device) { } pub fn init(device: &mut device::Device) { - device.cpu.clock_rate = 93750000; + device.cpu.clock_rate = if !device.cpu.overclock { + 93750000 + } else { + 125000000 + }; map_instructions(device); diff --git a/src/main.rs b/src/main.rs index 1315364..27fab5c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -161,8 +161,8 @@ async fn main() { .stack_size(env!("N64_STACK_SIZE").parse().unwrap()) .spawn(move || { let mut device = device::Device::new(); - device.ui.fullscreen = args.fullscreen; - device::run_game(rom_contents, &mut device); + let overclock = device.ui.config.emulation.overclock; + device::run_game(&mut device, rom_contents, args.fullscreen, overclock); }) .unwrap(); diff --git a/src/ui/config.rs b/src/ui/config.rs index a5fdb12..cd831ac 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -40,6 +40,7 @@ pub struct Input { pub transfer_pak: [bool; 4], pub emulate_vru: bool, } + #[derive(serde::Serialize, serde::Deserialize)] pub struct Video { pub upscale: u32, @@ -47,10 +48,17 @@ pub struct Video { pub fullscreen: bool, pub widescreen: bool, } + +#[derive(serde::Serialize, serde::Deserialize)] +pub struct Emulation { + pub overclock: bool, +} + #[derive(serde::Serialize, serde::Deserialize)] pub struct Config { pub input: Input, pub video: Video, + pub emulation: Emulation, } impl Drop for Config { @@ -99,6 +107,7 @@ impl Config { fullscreen: false, widescreen: false, }, + emulation: Emulation { overclock: false }, } } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 36121da..db7dae9 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -18,6 +18,7 @@ pub struct GopherEguiApp { integer_scaling: bool, fullscreen: bool, widescreen: bool, + overclock: bool, emulate_vru: bool, dinput: bool, show_vru_dialog: bool, @@ -44,6 +45,7 @@ struct SaveConfig { fullscreen: bool, widescreen: bool, emulate_vru: bool, + overclock: bool, } fn get_input_profiles(config: &ui::config::Config) -> Vec { @@ -120,6 +122,7 @@ impl GopherEguiApp { fullscreen: config.video.fullscreen, widescreen: config.video.widescreen, emulate_vru: config.input.emulate_vru, + overclock: config.emulation.overclock, show_vru_dialog: false, dinput: false, controller_paths, @@ -157,6 +160,8 @@ fn save_config( config.video.fullscreen = save_config_items.fullscreen; config.video.widescreen = save_config_items.widescreen; config.input.emulate_vru = save_config_items.emulate_vru; + + config.emulation.overclock = save_config_items.overclock; } impl Drop for GopherEguiApp { @@ -171,6 +176,7 @@ impl Drop for GopherEguiApp { fullscreen: self.fullscreen, widescreen: self.widescreen, emulate_vru: self.emulate_vru, + overclock: self.overclock, }; let mut config = ui::config::Config::new(); save_config( @@ -295,7 +301,7 @@ fn get_latest_version(app: &mut GopherEguiApp, ctx: &egui::Context) { } } -pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { +pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context, enable_overclock: bool) { let netplay; let selected_controller = app.selected_controller; @@ -307,6 +313,7 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { let fullscreen = app.fullscreen; let widescreen = app.widescreen; let emulate_vru = app.emulate_vru; + let overclock = app.overclock; let peer_addr; let session; let player_number; @@ -402,6 +409,7 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { fullscreen, widescreen, emulate_vru, + overclock, }; if file.is_some() || netplay { @@ -424,8 +432,7 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { session.unwrap(), player_number.unwrap(), )); - device.ui.fullscreen = fullscreen; - device::run_game(rom_contents, &mut device); + device::run_game(&mut device, rom_contents, fullscreen, enable_overclock); netplay::close(&mut device); } else { for i in 0..4 { @@ -448,8 +455,12 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context) { if rom_contents.is_empty() { println!("Could not read rom file"); } else { - device.ui.fullscreen = fullscreen; - device::run_game(rom_contents, &mut device); + device::run_game( + &mut device, + rom_contents, + fullscreen, + enable_overclock, + ); } } let result = std::fs::remove_file(running_file); @@ -492,7 +503,7 @@ impl eframe::App for GopherEguiApp { .min_col_width(200.0) .show(ui, |ui| { if ui.button("Open ROM").clicked() { - open_rom(self, ctx); + open_rom(self, ctx, self.overclock); } if ui.button("Netplay: Create Session").clicked() && !self.dirs.cache_dir.join("game_running").exists() @@ -616,6 +627,9 @@ impl eframe::App for GopherEguiApp { ui.checkbox(&mut self.widescreen, "Widescreen (stretch)"); ui.add_space(16.0); + ui.checkbox(&mut self.overclock, "Overclock N64 CPU (may cause bugs)"); + ui.add_space(16.0); + ui.hyperlink_to("Wiki", "https://github.com/gopher64/gopher64/wiki"); ui.hyperlink_to("Discord Server", "https://discord.gg/9RGXq8W8JQ"); ui.add_space(16.0); diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index 0c20a80..486668e 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -68,6 +68,7 @@ pub struct NetplayRoom { md5: Option, game_name: Option, pub port: Option, + features: Option>, } #[derive(serde::Serialize, serde::Deserialize)] @@ -310,6 +311,8 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { // If the ROM doesn't report a name, use the filename game_name = app.netplay.create_rom_label.clone(); } + let mut features = std::collections::HashMap::new(); + features.insert("overclock".to_string(), app.overclock.to_string()); let netplay_message = NetplayMessage { message_type: "request_create_room".to_string(), player_name: Some(app.netplay.player_name.clone()), @@ -329,6 +332,7 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { md5: Some(app.netplay.game_info.md5.clone()), protected: None, port: None, + features: Some(features), }), }; let (mut socket, _response) = @@ -502,6 +506,7 @@ pub fn netplay_join(app: &mut GopherEguiApp, ctx: &egui::Context) { md5: Some(app.netplay.game_info.md5.clone()), protected: None, port: app.netplay.selected_session.as_ref().unwrap().port, + features: None, }), }; let socket = app.netplay.socket.as_mut().unwrap(); @@ -651,6 +656,17 @@ pub fn netplay_join(app: &mut GopherEguiApp, ctx: &egui::Context) { } pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { + let overclock = app + .netplay + .waiting_session + .as_ref() + .unwrap() + .features + .as_ref() + .unwrap() + .get("overclock") + .unwrap(); + let motd_message = NetplayMessage { message_type: "request_motd".to_string(), player_name: None, @@ -684,6 +700,7 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { md5: None, protected: None, port: app.netplay.waiting_session.as_ref().unwrap().port, + features: None, }), }; @@ -722,6 +739,7 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { md5: None, protected: None, port: app.netplay.waiting_session.as_ref().unwrap().port, + features: None, }), }; let socket = app.netplay.socket.as_mut().unwrap(); @@ -753,6 +771,7 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { md5: None, protected: None, port: app.netplay.waiting_session.as_ref().unwrap().port, + features: None, }), }; app.netplay.chat_message.clear(); @@ -801,7 +820,7 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { }; } - gui::open_rom(app, ctx); + gui::open_rom(app, ctx, *overclock == "true"); app.netplay = Default::default(); return; } else { From ee8e34e17cfb11f86ad5d54e8e8dd5a04cb5c9a2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 1 Mar 2025 21:59:35 +0100 Subject: [PATCH 0367/1117] Add audio file --- data/cheats_enabled.wav | Bin 0 -> 102284 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/cheats_enabled.wav diff --git a/data/cheats_enabled.wav b/data/cheats_enabled.wav new file mode 100644 index 0000000000000000000000000000000000000000..365ecc393c49e8b5288f16f90183be521b8b0ebc GIT binary patch literal 102284 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 Date: Mon, 3 Mar 2025 10:03:44 +0100 Subject: [PATCH 0368/1117] update cargo packages --- Cargo.lock | 178 ++++++++++++++++++++++++++--------------------------- 1 file changed, 88 insertions(+), 90 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c8c1435..d776b53 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -73,7 +73,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", - "bitflags 2.8.0", + "bitflags 2.9.0", "cc", "cesu8", "jni", @@ -252,9 +252,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.86" +version = "0.1.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" +checksum = "d556ec1359574147ec0c4fc5eb525f3f23263a592b1a9c07e0a75b427de55c97" dependencies = [ "proc-macro2", "quote", @@ -309,7 +309,7 @@ version = "0.71.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "cexpr", "clang-sys", "itertools", @@ -361,9 +361,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" dependencies = [ "serde", ] @@ -400,9 +400,9 @@ checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "bytemuck" -version = "1.21.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" +checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540" dependencies = [ "bytemuck_derive", ] @@ -438,21 +438,20 @@ checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" [[package]] name = "bzip2" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b89e7c29231c673a61a46e722602bcd138298f6b9e81e71119693534585f5c" +checksum = "49ecfb22d906f800d4fe833b6282cf4dc1c298f5057ca0b5445e5c209735ca47" dependencies = [ "bzip2-sys", ] [[package]] name = "bzip2-sys" -version = "0.1.12+1.0.8" +version = "0.1.13+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ebc2f1a417f01e1da30ef264ee86ae31d2dcd2d603ea283d3c244a883ca2a9" +checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" dependencies = [ "cc", - "libc", "pkg-config", ] @@ -462,7 +461,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "log", "polling", "rustix", @@ -484,9 +483,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.15" +version = "1.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c736e259eea577f443d5c86c304f9f4ae0295c43f3ba05c21f1d66b5f06001af" +checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" dependencies = [ "jobserver", "libc", @@ -959,7 +958,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d2768eaa6d5c80a6e2a008da1f0e062dff3c83eb2b28605ea2d0732d46e74d6" dependencies = [ "ahash", - "bitflags 2.8.0", + "bitflags 2.9.0", "emath", "epaint", "log", @@ -1421,7 +1420,7 @@ version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03642b8b0cce622392deb0ee3e88511f75df2daac806102597905c3ea1974848" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "cfg_aliases", "cgl", "core-foundation 0.9.4", @@ -1544,7 +1543,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "gpu-alloc-types", ] @@ -1554,7 +1553,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", ] [[package]] @@ -1563,7 +1562,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcf29e94d6d243368b7a56caa16bc213e4f9f8ed38c4d9557069527b5d5281ca" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "gpu-descriptor-types", "hashbrown 0.15.2", ] @@ -1574,7 +1573,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", ] [[package]] @@ -2090,7 +2089,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "libc", "redox_syscall 0.5.9", ] @@ -2193,7 +2192,7 @@ version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "block", "core-graphics-types", "foreign-types", @@ -2252,7 +2251,7 @@ checksum = "e380993072e52eef724eddfcde0ed013b0c023c3f0417336ed041aa9f076994e" dependencies = [ "arrayvec", "bit-set 0.8.0", - "bitflags 2.8.0", + "bitflags 2.9.0", "cfg_aliases", "codespan-reporting", "hexf-parse", @@ -2262,7 +2261,7 @@ dependencies = [ "spirv", "strum", "termcolor", - "thiserror 2.0.11", + "thiserror 2.0.12", "unicode-xid", ] @@ -2272,7 +2271,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "jni-sys", "log", "ndk-sys 0.6.0+11769913", @@ -2311,7 +2310,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "cfg-if", "cfg_aliases", "libc", @@ -2423,7 +2422,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "block2", "libc", "objc2", @@ -2439,7 +2438,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "block2", "objc2", "objc2-core-location", @@ -2463,7 +2462,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "block2", "objc2", "objc2-foundation", @@ -2505,7 +2504,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "block2", "dispatch", "libc", @@ -2530,7 +2529,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "block2", "objc2", "objc2-foundation", @@ -2542,7 +2541,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "block2", "objc2", "objc2-foundation", @@ -2565,7 +2564,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "block2", "objc2", "objc2-cloud-kit", @@ -2597,7 +2596,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "block2", "objc2", "objc2-core-location", @@ -2849,9 +2848,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" dependencies = [ "unicode-ident", ] @@ -2899,7 +2898,7 @@ dependencies = [ "rustc-hash 2.1.1", "rustls", "socket2", - "thiserror 2.0.11", + "thiserror 2.0.12", "tokio", "tracing", ] @@ -2918,7 +2917,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.11", + "thiserror 2.0.12", "tinyvec", "tracing", "web-time", @@ -2940,9 +2939,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.38" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +checksum = "c1f1914ce909e1658d9907913b4b91947430c7d9be598b15a1912935b8c04801" dependencies = [ "proc-macro2", ] @@ -2965,8 +2964,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" dependencies = [ "rand_chacha 0.9.0", - "rand_core 0.9.2", - "zerocopy 0.8.20", + "rand_core 0.9.3", + "zerocopy 0.8.21", ] [[package]] @@ -2986,7 +2985,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.2", + "rand_core 0.9.3", ] [[package]] @@ -3000,12 +2999,11 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a509b1a2ffbe92afab0e55c8fd99dea1c280e8171bd2d88682bb20bc41cbc2c" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ "getrandom 0.3.1", - "zerocopy 0.8.20", ] [[package]] @@ -3014,7 +3012,7 @@ version = "11.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "529468c1335c1c03919960dfefdb1b3648858c20d7ec2d0663e728e4a717efbc" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", ] [[package]] @@ -3038,7 +3036,7 @@ version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82b568323e98e49e2a0899dcee453dd679fae22d69adf9b11dd508d1549b7e2f" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", ] [[package]] @@ -3049,7 +3047,7 @@ checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" dependencies = [ "getrandom 0.2.15", "libredox", - "thiserror 2.0.11", + "thiserror 2.0.12", ] [[package]] @@ -3209,7 +3207,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "errno", "libc", "linux-raw-sys", @@ -3304,15 +3302,15 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sdl3-src" -version = "3.2.4" +version = "3.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "652742893bbef3623ddbd049fa2eaeb7cf62f3f59ab1596727cfea3eb25fe5bb" +checksum = "0286c39792a22656365bd9c9a463fd0f98dc48b34df2d3f78657a33091f51af5" [[package]] name = "sdl3-sys" -version = "0.4.4+SDL3-3.2.4" +version = "0.4.5+SDL3-3.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14062c68e4683b8ef222bbd1abb178310dd214c66db83f8080244546601473b1" +checksum = "24adde5ab5bfca73055fd16f9e9b59cb81de31a1fcd8fef15d83405c247ab4ae" dependencies = [ "cmake", "rpkg-config", @@ -3479,7 +3477,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "calloop", "calloop-wayland-source", "cursor-icon", @@ -3561,7 +3559,7 @@ version = "0.3.0+sdk-1.3.268.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", ] [[package]] @@ -3612,9 +3610,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.98" +version = "2.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" +checksum = "e02e925281e18ffd9d640e234264753c43edc62d64b2d4cf898f1bc5e75f3fc2" dependencies = [ "proc-macro2", "quote", @@ -3675,11 +3673,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.11" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" dependencies = [ - "thiserror-impl 2.0.11", + "thiserror-impl 2.0.12", ] [[package]] @@ -3695,9 +3693,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.11" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", @@ -3757,9 +3755,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" dependencies = [ "tinyvec_macros", ] @@ -3801,9 +3799,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.1" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" +checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" dependencies = [ "rustls", "tokio", @@ -3937,7 +3935,7 @@ dependencies = [ "log", "rand 0.9.0", "sha1", - "thiserror 2.0.11", + "thiserror 2.0.12", "utf-8", ] @@ -4170,7 +4168,7 @@ version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2120de3d33638aaef5b9f4472bff75f07c56379cf76ea320bd3a3d65ecaf73f" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "rustix", "wayland-backend", "wayland-scanner", @@ -4182,7 +4180,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "cursor-icon", "wayland-backend", ] @@ -4204,7 +4202,7 @@ version = "0.32.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0781cf46869b37e36928f7b432273c0995aa8aed9552c556fb18754420541efc" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "wayland-backend", "wayland-client", "wayland-scanner", @@ -4216,7 +4214,7 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ccaacc76703fefd6763022ac565b590fcade92202492381c95b2edfdf7d46b3" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -4229,7 +4227,7 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "248a02e6f595aad796561fa82d25601bd2c8c3b145b1c7453fc8f94c1a58f8b2" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -4319,7 +4317,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47f55718f85c2fa756edffa0e7f0e0a60aba463d1362b57e23123c58f035e4b6" dependencies = [ "arrayvec", - "bitflags 2.8.0", + "bitflags 2.9.0", "cfg_aliases", "document-features", "js-sys", @@ -4346,7 +4344,7 @@ checksum = "671c25545d479b47d3f0a8e373aceb2060b67c6eb841b24ac8c32348151c7a0c" dependencies = [ "arrayvec", "bit-vec 0.8.0", - "bitflags 2.8.0", + "bitflags 2.9.0", "cfg_aliases", "document-features", "indexmap", @@ -4358,7 +4356,7 @@ dependencies = [ "raw-window-handle", "rustc-hash 1.1.0", "smallvec", - "thiserror 2.0.11", + "thiserror 2.0.12", "wgpu-hal", "wgpu-types", ] @@ -4372,7 +4370,7 @@ dependencies = [ "android_system_properties", "arrayvec", "ash", - "bitflags 2.8.0", + "bitflags 2.9.0", "block", "bytemuck", "cfg_aliases", @@ -4398,7 +4396,7 @@ dependencies = [ "renderdoc-sys", "rustc-hash 1.1.0", "smallvec", - "thiserror 2.0.11", + "thiserror 2.0.12", "wasm-bindgen", "web-sys", "wgpu-types", @@ -4411,7 +4409,7 @@ version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50ac044c0e76c03a0378e7786ac505d010a873665e2d51383dcff8dd227dc69c" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "js-sys", "log", "web-sys", @@ -4761,7 +4759,7 @@ dependencies = [ "ahash", "android-activity", "atomic-waker", - "bitflags 2.8.0", + "bitflags 2.9.0", "block2", "bytemuck", "calloop", @@ -4827,7 +4825,7 @@ version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", ] [[package]] @@ -4896,7 +4894,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "dlib", "log", "once_cell", @@ -5008,11 +5006,11 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde3bb8c68a8f3f1ed4ac9221aad6b10cece3e60a8e2ea54a6a2dec806d0084c" +checksum = "dcf01143b2dd5d134f11f545cf9f1431b13b749695cb33bcce051e7568f99478" dependencies = [ - "zerocopy-derive 0.8.20", + "zerocopy-derive 0.8.21", ] [[package]] @@ -5028,9 +5026,9 @@ dependencies = [ [[package]] name = "zerocopy-derive" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eea57037071898bf96a6da35fd626f4f27e9cee3ead2a6c703cf09d472b2e700" +checksum = "712c8386f4f4299382c9abee219bee7084f78fb939d88b6840fcc1320d5f6da2" dependencies = [ "proc-macro2", "quote", @@ -5122,7 +5120,7 @@ dependencies = [ "pbkdf2", "rand 0.8.5", "sha1", - "thiserror 2.0.11", + "thiserror 2.0.12", "time", "zeroize", "zopfli", From 30cb3f8339d5742574e5444715db64b578cc7ed0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 4 Mar 2025 09:45:25 +0100 Subject: [PATCH 0369/1117] add some randomness (#297) --- Cargo.lock | 57 ++++++++++++++++++++++++------------------------ Cargo.toml | 1 + src/device.rs | 24 ++++++++++++++++++++ src/device/pi.rs | 8 ++++++- src/device/si.rs | 26 +++++++++++++--------- src/netplay.rs | 18 +++++++++++++++ 6 files changed, 95 insertions(+), 39 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d776b53..4c5fb71 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1495,6 +1495,7 @@ dependencies = [ "governor", "mimalloc", "postcard", + "rand_chacha 0.9.0", "regex", "reqwest", "rfd", @@ -1711,9 +1712,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "hyper" @@ -1989,9 +1990,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jni" @@ -2091,7 +2092,7 @@ checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.9.0", "libc", - "redox_syscall 0.5.9", + "redox_syscall 0.5.10", ] [[package]] @@ -2694,7 +2695,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.9", + "redox_syscall 0.5.10", "smallvec", "windows-targets 0.52.6", ] @@ -2723,18 +2724,18 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", @@ -2755,9 +2756,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "png" @@ -2829,9 +2830,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.29" +version = "0.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6924ced06e1f7dfe3fa48d57b9f74f55d8915f5036121bef647ef4b204895fac" +checksum = "f1ccf34da56fc294e7d4ccf69a85992b7dfb826b7cf57bac6a70bba3494cc08a" dependencies = [ "proc-macro2", "syn", @@ -3032,9 +3033,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.9" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b568323e98e49e2a0899dcee453dd679fae22d69adf9b11dd508d1549b7e2f" +checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" dependencies = [ "bitflags 2.9.0", ] @@ -3269,15 +3270,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" +checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" [[package]] name = "ryu" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "same-file" @@ -3319,9 +3320,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" [[package]] name = "serde" @@ -3354,9 +3355,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.139" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44f86c3acccc9c65b153fe1b85a3be07fe5515274ec9f0653b4a0875731c72a6" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", "memchr", @@ -3366,9 +3367,9 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", @@ -3967,9 +3968,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-segmentation" diff --git a/Cargo.toml b/Cargo.toml index 2cf45bf..6b41744 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,6 +27,7 @@ mimalloc = "0.1" regex = "1.11" tungstenite = "0.26" socket2 = "0.5" +rand_chacha = "0.9" fatfs = "0.3" semver = "1.0" postcard = { version = "1.1", features = ["use-std"] } diff --git a/src/device.rs b/src/device.rs index 8bbf9a2..1b24201 100644 --- a/src/device.rs +++ b/src/device.rs @@ -10,6 +10,8 @@ include!(concat!(env!("OUT_DIR"), "/simd_bindings.rs")); #[cfg(target_arch = "x86_64")] use std::arch::x86_64::*; +use rand_chacha::rand_core::{RngCore, SeedableRng}; + use crate::{netplay, ui}; use std::{collections::HashMap, fs, io::Read}; @@ -46,6 +48,8 @@ pub fn run_game(device: &mut Device, rom_contents: Vec, fullscreen: bool, ov device.ui.fullscreen = fullscreen; device.cpu.overclock = overclock; + init_rng(device); + cart::rom::init(device, rom_contents); // cart needs to come before rdram // rdram pointer is shared with parallel-rdp @@ -78,6 +82,23 @@ pub fn run_game(device: &mut Device, rom_contents: Vec, fullscreen: bool, ov ui::storage::write_saves(device); } +fn set_rng() -> rand_chacha::ChaCha8Rng { + rand_chacha::ChaCha8Rng::from_os_rng() +} + +fn init_rng(device: &mut Device) { + let mut rng_seed = set_rng().next_u64(); + if device.netplay.is_some() { + let netplay = device.netplay.as_mut().unwrap(); + if netplay.player_number == 0 { + netplay::send_rng(netplay, rng_seed); + } else { + rng_seed = netplay::receive_rng(netplay); + } + } + device.rng = rand_chacha::ChaCha8Rng::seed_from_u64(rng_seed); +} + fn swap_rom(contents: Vec) -> Vec { let test = u32::from_be_bytes(contents[0..4].try_into().unwrap()); if test == 0x80371240 { @@ -177,6 +198,8 @@ pub struct Device { pub ai: ai::Ai, pub si: si::Si, pub ri: ri::Ri, + #[serde(skip, default = "set_rng")] + pub rng: rand_chacha::ChaCha8Rng, pub vru: controller::vru::Vru, pub vru_window: controller::vru::VruWindow, pub transferpaks: [controller::transferpak::TransferPak; 4], @@ -465,6 +488,7 @@ impl Device { talking: false, word_mappings: HashMap::new(), }, + rng: set_rng(), transferpaks: [ controller::transferpak::TransferPak::default(), controller::transferpak::TransferPak::default(), diff --git a/src/device/pi.rs b/src/device/pi.rs index bf617d9..d05e6d6 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -1,4 +1,5 @@ use crate::{device, ui}; +use rand_chacha::rand_core::RngCore; const PI_DRAM_ADDR_REG: u32 = 0; const PI_CART_ADDR_REG: u32 = 1; @@ -173,7 +174,11 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } } -pub fn calculate_cycles(device: &device::Device, domain: i32, length: u32) -> u64 { +fn randomize_interrupt_time(rng: &mut rand_chacha::ChaCha8Rng) -> u64 { + rng.next_u64() % 0x10 +} + +pub fn calculate_cycles(device: &mut device::Device, domain: i32, length: u32) -> u64 { let mut cycles: f64 = 0.0; let (page_size, latency, pulse_width, release, pages); let page_size_base: f64 = 2.0; @@ -196,6 +201,7 @@ pub fn calculate_cycles(device: &device::Device, domain: i32, length: u32) -> u6 cycles += (14.0 + latency) * pages; cycles += (pulse_width + release) * (length as f64 / 2.0); cycles += 5.0 * pages; + cycles += randomize_interrupt_time(&mut device.rng) as f64; (cycles * 1.5) as u64 // Converting RCP clock speed to CPU clock speed } diff --git a/src/device/si.rs b/src/device/si.rs index 50b2adb..aee1cab 100644 --- a/src/device/si.rs +++ b/src/device/si.rs @@ -1,3 +1,5 @@ +use rand_chacha::rand_core::RngCore; + use crate::device; const SI_DRAM_ADDR_REG: u32 = 0; @@ -36,6 +38,10 @@ pub fn read_regs( device.si.regs[((address & 0xFFFF) >> 2) as usize] } +fn randomize_interrupt_time(rng: &mut rand_chacha::ChaCha8Rng) -> u64 { + rng.next_u64() % 0x100 +} + fn dma_read(device: &mut device::Device) { device.si.dma_dir = DmaDir::Read; @@ -43,11 +49,11 @@ fn dma_read(device: &mut device::Device) { device.si.regs[SI_STATUS_REG as usize] |= SI_STATUS_DMA_BUSY; - device::events::create_event( - device, - device::events::EVENT_TYPE_SI, - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + duration, - ) + let length = device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + + duration + + randomize_interrupt_time(&mut device.rng); + + device::events::create_event(device, device::events::EVENT_TYPE_SI, length) } fn dma_write(device: &mut device::Device) { @@ -57,11 +63,11 @@ fn dma_write(device: &mut device::Device) { device.si.regs[SI_STATUS_REG as usize] |= SI_STATUS_DMA_BUSY; - device::events::create_event( - device, - device::events::EVENT_TYPE_SI, - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + 6000, //based on https://github.com/rasky/n64-systembench - ) + let length = device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + + 6000 + + randomize_interrupt_time(&mut device.rng); //based on https://github.com/rasky/n64-systembench + + device::events::create_event(device, device::events::EVENT_TYPE_SI, length) } pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { diff --git a/src/netplay.rs b/src/netplay.rs index f9cd27d..f251a4a 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -18,6 +18,8 @@ const TCP_DISCONNECT_NOTICE: u8 = 7; const TCP_RECEIVE_SAVE_WITH_SIZE: u8 = 8; const TCP_SEND_RTC: u8 = 64; const TCP_RECEIVE_RTC: u8 = 128; +const TCP_SEND_RNG: u8 = 65; +const TCP_RECEIVE_RNG: u8 = 129; const CS4: u32 = 32; @@ -68,6 +70,22 @@ pub fn receive_rtc(netplay: &mut Netplay) -> i64 { i64::from_be_bytes(rtc) } +pub fn send_rng(netplay: &mut Netplay, seed: u64) { + let mut request: Vec = [TCP_SEND_RNG].to_vec(); + let size: u32 = 8; + request.extend_from_slice(&size.to_be_bytes()); + request.extend_from_slice(&seed.to_be_bytes()); + netplay.tcp_stream.write_all(&request).unwrap(); +} + +pub fn receive_rng(netplay: &mut Netplay) -> u64 { + let request: Vec = [TCP_RECEIVE_RNG].to_vec(); + netplay.tcp_stream.write_all(&request).unwrap(); + let mut seed: [u8; 8] = [0; 8]; + netplay.tcp_stream.read_exact(&mut seed).unwrap(); + u64::from_be_bytes(seed) +} + pub fn send_save(netplay: &mut Netplay, save_type: &str, save_data: &[u8], size: usize) { let mut request: Vec = [TCP_SEND_SAVE].to_vec(); request.extend_from_slice(save_type.as_bytes()); From a4c505c72d807e52d62829bd9e0e1a9647a48d01 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 4 Mar 2025 10:12:56 +0100 Subject: [PATCH 0370/1117] remove some code duplication (#298) --- src/device/ai.rs | 2 +- src/device/cart/rom.rs | 6 +----- src/device/cart/sram.rs | 6 +----- src/device/controller.rs | 3 +-- src/device/controller/vru.rs | 3 +-- src/device/cop0.rs | 4 ++-- src/device/events.rs | 8 ++++++++ src/device/exceptions.rs | 6 +----- src/device/pi.rs | 12 ++---------- src/device/pif.rs | 6 +----- src/device/rdp.rs | 6 +----- src/device/rsp_interface.rs | 10 ++-------- src/device/si.rs | 8 ++------ src/device/vi.rs | 8 ++------ 14 files changed, 26 insertions(+), 62 deletions(-) diff --git a/src/device/ai.rs b/src/device/ai.rs index 58c44f3..919fa4e 100644 --- a/src/device/ai.rs +++ b/src/device/ai.rs @@ -66,7 +66,7 @@ fn do_dma(device: &mut device::Device) { device::events::create_event( device, device::events::EVENT_TYPE_AI, - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + device.ai.fifo[0].duration, + device.ai.fifo[0].duration, ); device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_AI); } diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 87a9b38..34c8359 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -65,11 +65,7 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 device.pi.regs[device::pi::PI_STATUS_REG as usize] |= device::pi::PI_STATUS_IO_BUSY; let cycles = device::pi::calculate_cycles(device, 1, 4); - device::events::create_event( - device, - device::events::EVENT_TYPE_PI, - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + cycles, - ); + device::events::create_event(device, device::events::EVENT_TYPE_PI, cycles); } pub fn dma_read( diff --git a/src/device/cart/sram.rs b/src/device/cart/sram.rs index 8fae390..8b9dae5 100644 --- a/src/device/cart/sram.rs +++ b/src/device/cart/sram.rs @@ -123,11 +123,7 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 device.pi.regs[device::pi::PI_STATUS_REG as usize] |= device::pi::PI_STATUS_IO_BUSY; let cycles = device::pi::calculate_cycles(device, 2, 4); - device::events::create_event( - device, - device::events::EVENT_TYPE_PI, - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + cycles, - ); + device::events::create_event(device, device::events::EVENT_TYPE_PI, cycles); } fn dma_read_sram(device: &mut device::Device, mut cart_addr: u32, mut dram_addr: u32, length: u32) { diff --git a/src/device/controller.rs b/src/device/controller.rs index 1d500cd..a8f4b5e 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -77,8 +77,7 @@ pub fn process(device: &mut device::Device, channel: usize) { device::events::create_event( device, device::events::EVENT_TYPE_PAK, - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] - + (device.cpu.clock_rate), // 1 second + device.cpu.clock_rate, // 1 second ) } } diff --git a/src/device/controller/vru.rs b/src/device/controller/vru.rs index b82d434..ed5be09 100644 --- a/src/device/controller/vru.rs +++ b/src/device/controller/vru.rs @@ -170,8 +170,7 @@ pub fn process(device: &mut device::Device, channel: usize) { device::events::create_event( device, device::events::EVENT_TYPE_VRU, - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] - + (device.cpu.clock_rate * 2), // 2 seconds + device.cpu.clock_rate * 2, // 2 seconds ) } else if device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] == 0xEF { device.vru.talking = false; diff --git a/src/device/cop0.rs b/src/device/cop0.rs index 280b590..dcc2caa 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -215,7 +215,7 @@ fn set_control_registers(device: &mut device::Device, index: u32, mut data: u64) device::events::create_event( device, device::events::EVENT_TYPE_COMPARE, - device.cpu.cop0.regs[COP0_COUNT_REG as usize] + ((compare_event_diff as u64) << 1), + (compare_event_diff as u64) << 1, ); device.cpu.cop0.regs[COP0_CAUSE_REG as usize] &= !COP0_CAUSE_IP7; device.cpu.cop0.pending_compare_interrupt = false; @@ -237,7 +237,7 @@ fn set_control_registers(device: &mut device::Device, index: u32, mut data: u64) pub fn compare_event(device: &mut device::Device) { device.cpu.cop0.pending_compare_interrupt = true; - device::events::create_event( + device::events::create_event_at( device, device::events::EVENT_TYPE_COMPARE, device.cpu.next_event_count + (u32::MAX as u64), diff --git a/src/device/events.rs b/src/device/events.rs index 10a3e83..49f1874 100644 --- a/src/device/events.rs +++ b/src/device/events.rs @@ -21,6 +21,14 @@ pub struct Event { } pub fn create_event(device: &mut device::Device, name: usize, when: u64) { + device.cpu.events[name] = Event { + enabled: true, + count: device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + when, + }; + set_next_event(device); +} + +pub fn create_event_at(device: &mut device::Device, name: usize, when: u64) { device.cpu.events[name] = Event { enabled: true, count: when, diff --git a/src/device/exceptions.rs b/src/device/exceptions.rs index 40353b0..19662e6 100644 --- a/src/device/exceptions.rs +++ b/src/device/exceptions.rs @@ -33,11 +33,7 @@ pub fn check_pending_interrupts(device: &mut device::Device) { if device.cpu.cop0.is_event { interrupt_exception(device); } else { - device::events::create_event( - device, - device::events::EVENT_TYPE_INT, - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize], - ); + device::events::create_event(device, device::events::EVENT_TYPE_INT, 0); } } diff --git a/src/device/pi.rs b/src/device/pi.rs index d05e6d6..ee9647a 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -66,11 +66,7 @@ fn dma_read(device: &mut device::Device) { let cycles = (handler.read)(device, cart_addr, dram_addr, length); - device::events::create_event( - device, - device::events::EVENT_TYPE_PI, - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + cycles, - ); + device::events::create_event(device, device::events::EVENT_TYPE_PI, cycles); /* Update PI_DRAM_ADDR_REG and PI_CART_ADDR_REG */ device.pi.regs[PI_DRAM_ADDR_REG as usize] = @@ -99,11 +95,7 @@ fn dma_write(device: &mut device::Device) { let cycles = (handler.write)(device, cart_addr, dram_addr, length); - device::events::create_event( - device, - device::events::EVENT_TYPE_PI, - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + cycles, - ); + device::events::create_event(device, device::events::EVENT_TYPE_PI, cycles); /* Update PI_DRAM_ADDR_REG and PI_CART_ADDR_REG */ device.pi.regs[PI_DRAM_ADDR_REG as usize] = diff --git a/src/device/pif.rs b/src/device/pif.rs index e109d76..f595b6f 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -67,11 +67,7 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 device.pif.ram[masked_address..masked_address + 4].copy_from_slice(&data.to_be_bytes()); device.si.dma_dir = device::si::DmaDir::Write; - device::events::create_event( - device, - device::events::EVENT_TYPE_SI, - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + 3200, - ); //based on https://github.com/rasky/n64-systembench + device::events::create_event(device, device::events::EVENT_TYPE_SI, 3200); //based on https://github.com/rasky/n64-systembench device.si.regs[device::si::SI_STATUS_REG as usize] |= device::si::SI_STATUS_DMA_BUSY | device::si::SI_STATUS_IO_BUSY } diff --git a/src/device/rdp.rs b/src/device/rdp.rs index 20172ff..7b8164e 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -130,11 +130,7 @@ fn run_rdp(device: &mut device::Device) { device.load_state = false; savestates::load_savestate(device); } - device::events::create_event( - device, - device::events::EVENT_TYPE_DP, - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + timer, - ) + device::events::create_event(device, device::events::EVENT_TYPE_DP, timer) } } diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index 56bc045..bcf8376 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -206,9 +206,7 @@ fn do_dma(device: &mut device::Device, dma: RspDma) { device::events::create_event( device, device::events::EVENT_TYPE_SPDMA, - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] - + device::rdram::rdram_calculate_cycles((count * length) as u64) - + 9, + device::rdram::rdram_calculate_cycles((count * length) as u64) + 9, ); } @@ -467,11 +465,7 @@ fn do_task(device: &mut device::Device) { } else { let timer = device::rsp_cpu::run(device); - device::events::create_event( - device, - device::events::EVENT_TYPE_SP, - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + timer, - ) + device::events::create_event(device, device::events::EVENT_TYPE_SP, timer) } } diff --git a/src/device/si.rs b/src/device/si.rs index aee1cab..41ae353 100644 --- a/src/device/si.rs +++ b/src/device/si.rs @@ -49,9 +49,7 @@ fn dma_read(device: &mut device::Device) { device.si.regs[SI_STATUS_REG as usize] |= SI_STATUS_DMA_BUSY; - let length = device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] - + duration - + randomize_interrupt_time(&mut device.rng); + let length = duration + randomize_interrupt_time(&mut device.rng); device::events::create_event(device, device::events::EVENT_TYPE_SI, length) } @@ -63,9 +61,7 @@ fn dma_write(device: &mut device::Device) { device.si.regs[SI_STATUS_REG as usize] |= SI_STATUS_DMA_BUSY; - let length = device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] - + 6000 - + randomize_interrupt_time(&mut device.rng); //based on https://github.com/rasky/n64-systembench + let length = 6000 + randomize_interrupt_time(&mut device.rng); //based on https://github.com/rasky/n64-systembench device::events::create_event(device, device::events::EVENT_TYPE_SI, length) } diff --git a/src/device/vi.rs b/src/device/vi.rs index 28b50e9..7b1c6c1 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -65,11 +65,7 @@ fn create_limiter(device: &mut device::Device) { fn set_vertical_interrupt(device: &mut device::Device) { if device::events::get_event(device, device::events::EVENT_TYPE_VI).is_none() { - device::events::create_event( - device, - device::events::EVENT_TYPE_VI, - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + device.vi.delay, - ) + device::events::create_event(device, device::events::EVENT_TYPE_VI, device.vi.delay) } } @@ -164,7 +160,7 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_VI); - device::events::create_event( + device::events::create_event_at( device, device::events::EVENT_TYPE_VI, device.cpu.next_event_count + device.vi.delay, From 4802f3b71a07fa94a9b3cd467f2229dca4293e49 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 4 Mar 2025 12:03:30 +0100 Subject: [PATCH 0371/1117] remove pub --- src/ui/gui.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index db7dae9..44265c8 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -27,7 +27,7 @@ pub struct GopherEguiApp { vru_word_list: Vec, latest_version: Option, update_receiver: Option>, - pub netplay: gui_netplay::GuiNetplay, + netplay: gui_netplay::GuiNetplay, } #[derive(serde::Deserialize)] From fdc17f4ae5640d1ed8508f377e6845bad4aaa696 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 4 Mar 2025 18:52:47 +0100 Subject: [PATCH 0372/1117] make is viewer optional (#299) * make is viewer optional * more --- src/device/memory.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/device/memory.rs b/src/device/memory.rs index 9cdf3e7..825dbb9 100644 --- a/src/device/memory.rs +++ b/src/device/memory.rs @@ -153,7 +153,10 @@ pub fn init(device: &mut device::Device) { } else if (MM_DOM2_ADDR2 >> 16..=(MM_DOM2_ADDR2 + 0x1FFFF) >> 16).contains(&i) { device.memory.memory_map_read[i] = device::cart::sram::read_mem; device.memory.memory_map_write[i] = device::cart::sram::write_mem; - } else if i >= MM_IS_VIEWER >> 16 && i <= (MM_IS_VIEWER + 0xFFFF) >> 16 { + } else if device.cart.rom.len() <= MM_IS_VIEWER - MM_CART_ROM + && i >= MM_IS_VIEWER >> 16 + && i <= (MM_IS_VIEWER + 0xFFFF) >> 16 + { device.memory.memory_map_read[i] = device::is_viewer::read_mem; device.memory.memory_map_write[i] = device::is_viewer::write_mem; } else if (MM_CART_ROM >> 16..=(MM_CART_ROM + 0x0FBFFFFF) >> 16).contains(&i) { From a07237aa64271eec79fd3cbb52c9720956e52713 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 4 Mar 2025 21:23:33 +0100 Subject: [PATCH 0373/1117] set netplay buffer target (#300) --- src/ui/gui/gui_netplay.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index 486668e..34c1ee5 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -69,6 +69,7 @@ pub struct NetplayRoom { game_name: Option, pub port: Option, features: Option>, + buffer_target: Option, } #[derive(serde::Serialize, serde::Deserialize)] @@ -333,6 +334,7 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { protected: None, port: None, features: Some(features), + buffer_target: Some(2), }), }; let (mut socket, _response) = @@ -507,6 +509,7 @@ pub fn netplay_join(app: &mut GopherEguiApp, ctx: &egui::Context) { protected: None, port: app.netplay.selected_session.as_ref().unwrap().port, features: None, + buffer_target: None, }), }; let socket = app.netplay.socket.as_mut().unwrap(); @@ -701,6 +704,7 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { protected: None, port: app.netplay.waiting_session.as_ref().unwrap().port, features: None, + buffer_target: None, }), }; @@ -740,6 +744,7 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { protected: None, port: app.netplay.waiting_session.as_ref().unwrap().port, features: None, + buffer_target: None, }), }; let socket = app.netplay.socket.as_mut().unwrap(); @@ -772,6 +777,7 @@ pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { protected: None, port: app.netplay.waiting_session.as_ref().unwrap().port, features: None, + buffer_target: None, }), }; app.netplay.chat_message.clear(); From a2cda03c8d28c46d3835caa312ee563f75f2a71f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 5 Mar 2025 15:12:05 +0100 Subject: [PATCH 0374/1117] update cargo packages --- Cargo.lock | 60 +++++++++++++++++++++++++++--------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4c5fb71..e9652a3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -432,9 +432,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "bzip2" @@ -906,9 +906,9 @@ checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" [[package]] name = "ecolor" -version = "0.31.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "878e9005799dd739e5d5d89ff7480491c12d0af571d44399bcaefa1ee172dd76" +checksum = "bc4feb366740ded31a004a0e4452fbf84e80ef432ecf8314c485210229672fd1" dependencies = [ "bytemuck", "emath", @@ -916,9 +916,9 @@ dependencies = [ [[package]] name = "eframe" -version = "0.31.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eba4c50d905804fe9ec4e159fde06b9d38f9440228617ab64a03d7a2091ece63" +checksum = "d0dfe0859f3fb1bc6424c57d41e10e9093fe938f426b691e42272c2f336d915c" dependencies = [ "ahash", "bytemuck", @@ -953,9 +953,9 @@ dependencies = [ [[package]] name = "egui" -version = "0.31.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d2768eaa6d5c80a6e2a008da1f0e062dff3c83eb2b28605ea2d0732d46e74d6" +checksum = "25dd34cec49ab55d85ebf70139cb1ccd29c977ef6b6ba4fe85489d6877ee9ef3" dependencies = [ "ahash", "bitflags 2.9.0", @@ -968,9 +968,9 @@ dependencies = [ [[package]] name = "egui-wgpu" -version = "0.31.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d8151704bcef6271bec1806c51544d70e79ef20e8616e5eac01facfd9c8c54a" +checksum = "d319dfef570f699b6e9114e235e862a2ddcf75f0d1a061de9e1328d92146d820" dependencies = [ "ahash", "bytemuck", @@ -988,9 +988,9 @@ dependencies = [ [[package]] name = "egui-winit" -version = "0.31.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace791b367c1f63e6044aef2f3834904509d1d1a6912fd23ebf3f6a9af92cd84" +checksum = "7d9dfbb78fe4eb9c3a39ad528b90ee5915c252e77bbab9d4ebc576541ab67e13" dependencies = [ "ahash", "arboard", @@ -1007,9 +1007,9 @@ dependencies = [ [[package]] name = "egui_glow" -version = "0.31.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a53e2374a964c3c793cb0b8ead81bca631f24974bc0b747d1a5622f4e39fdd0" +checksum = "910906e3f042ea6d2378ec12a6fd07698e14ddae68aed2d819ffe944a73aab9e" dependencies = [ "ahash", "bytemuck", @@ -1031,9 +1031,9 @@ checksum = "b7914353092ddf589ad78f25c5c1c21b7f80b0ff8621e7c814c3485b5306da9d" [[package]] name = "emath" -version = "0.31.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55b7b6be5ad1d247f11738b0e4699d9c20005ed366f2c29f5ec1f8e1de180bc2" +checksum = "9e4cadcff7a5353ba72b7fea76bf2122b5ebdbc68e8155aa56dfdea90083fe1b" dependencies = [ "bytemuck", ] @@ -1088,9 +1088,9 @@ dependencies = [ [[package]] name = "epaint" -version = "0.31.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "275b665a7b9611d8317485187e5458750850f9e64604d3c58434bb3fc1d22915" +checksum = "41fcc0f5a7c613afd2dee5e4b30c3e6acafb8ad6f0edb06068811f708a67c562" dependencies = [ "ab_glyph", "ahash", @@ -3009,9 +3009,9 @@ dependencies = [ [[package]] name = "raw-cpuid" -version = "11.4.0" +version = "11.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "529468c1335c1c03919960dfefdb1b3648858c20d7ec2d0663e728e4a717efbc" +checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" dependencies = [ "bitflags 2.9.0", ] @@ -3303,15 +3303,15 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sdl3-src" -version = "3.2.6" +version = "3.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0286c39792a22656365bd9c9a463fd0f98dc48b34df2d3f78657a33091f51af5" +checksum = "f0f784160e154c2750a9ea52906aa0d2c88afcd1b71c8960ed049f20fbc8cf0f" [[package]] name = "sdl3-sys" -version = "0.4.5+SDL3-3.2.6" +version = "0.4.6+SDL3-3.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24adde5ab5bfca73055fd16f9e9b59cb81de31a1fcd8fef15d83405c247ab4ae" +checksum = "13aa26235cbf336f5b273dc18a873142285529e4fef503882e05a6f986466939" dependencies = [ "cmake", "rpkg-config", @@ -3716,9 +3716,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.37" +version = "0.3.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" +checksum = "bb041120f25f8fbe8fd2dbe4671c7c2ed74d83be2e7a77529bf7e0790ae3f472" dependencies = [ "deranged", "num-conv", @@ -3730,15 +3730,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "765c97a5b985b7c11d7bc27fa927dc4fe6af3a6dfb021d28deb60d3bf51e76ef" [[package]] name = "time-macros" -version = "0.2.19" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" +checksum = "e8093bc3e81c3bc5f7879de09619d06c9a5a5e45ca44dfeeb7225bae38005c5c" dependencies = [ "num-conv", "time-core", From 7ab57d592b557c5dc46285b9c54703dafdfc46c9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 5 Mar 2025 15:20:42 +0100 Subject: [PATCH 0375/1117] bump to 1.0.11 (#301) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e9652a3..d21b3f6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1482,7 +1482,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.0.10" +version = "1.0.11" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index 6b41744..3126e9c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.10" +version = "1.0.11" edition = "2024" rust-version = "1.85" From f6b2342e0e99094c0da52a1abffe7940ce4a5537 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 7 Mar 2025 10:43:35 +0100 Subject: [PATCH 0376/1117] always make the window resizeable (#305) --- src/ui/video.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/ui/video.rs b/src/ui/video.rs index 87a5205..36caa73 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -7,14 +7,13 @@ pub fn init(device: &mut device::Device) { let title = std::ffi::CString::new("gopher64").unwrap(); - let mut flags = sdl3_sys::video::SDL_WINDOW_VULKAN; + let mut flags = sdl3_sys::video::SDL_WINDOW_VULKAN + | sdl3_sys::video::SDL_WINDOW_RESIZABLE + | sdl3_sys::video::SDL_WINDOW_INPUT_FOCUS; if device.ui.fullscreen { flags |= sdl3_sys::video::SDL_WINDOW_FULLSCREEN; - } else { - flags |= sdl3_sys::video::SDL_WINDOW_RESIZABLE; } - flags |= sdl3_sys::video::SDL_WINDOW_INPUT_FOCUS; let window_width; let window_height; From e73816541ecb531b2d4cd7a4f93395c3bb0ac5d8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 7 Mar 2025 18:35:48 +0100 Subject: [PATCH 0377/1117] condense code (#308) --- src/device/cart/rom.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 34c8359..7a86b38 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -104,8 +104,8 @@ pub fn dma_write( let mut i = dram_addr; let mut j = cart_addr; while i < dram_addr + length { - if device.ui.saves.romsave.data.contains_key(&j) { - device.rdram.mem[i as usize ^ device.byte_swap] = device.ui.saves.romsave.data[&j]; + if let Some(value) = device.ui.saves.romsave.data.get(&j) { + device.rdram.mem[i as usize ^ device.byte_swap] = *value; } else { device.rdram.mem[i as usize ^ device.byte_swap] = *device.cart.rom.get(j as usize).unwrap_or(&0); From 0989be1e0fe407584e9b555cfce9fcfc5dcc1bcb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 7 Mar 2025 18:36:08 +0100 Subject: [PATCH 0378/1117] update cargo packages --- Cargo.lock | 73 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 46 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d21b3f6..f86fb49 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -464,7 +464,7 @@ dependencies = [ "bitflags 2.9.0", "log", "polling", - "rustix", + "rustix 0.38.44", "slab", "thiserror 1.0.69", ] @@ -476,7 +476,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" dependencies = [ "calloop", - "rustix", + "rustix 0.38.44", "wayland-backend", "wayland-client", ] @@ -1025,9 +1025,9 @@ dependencies = [ [[package]] name = "either" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7914353092ddf589ad78f25c5c1c21b7f80b0ff8621e7c814c3485b5306da9d" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "emath" @@ -2101,6 +2101,12 @@ version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" +[[package]] +name = "linux-raw-sys" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9c683daf087dc577b7506e9695b3d556a9f3849903fa28186283afd6809e9" + [[package]] name = "litemap" version = "0.7.5" @@ -2783,7 +2789,7 @@ dependencies = [ "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix", + "rustix 0.38.44", "tracing", "windows-sys 0.59.0", ] @@ -2840,9 +2846,9 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ "toml_edit", ] @@ -2966,7 +2972,7 @@ checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", - "zerocopy 0.8.21", + "zerocopy 0.8.23", ] [[package]] @@ -3157,9 +3163,9 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.11" +version = "0.17.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da5349ae27d3887ca812fb375b45a4fbb36d8d12d2df394968cd86e35683fe73" +checksum = "70ac5d832aa16abd7d1def883a8545280c20a60f523a370aa3a9617c2b8550ee" dependencies = [ "cc", "cfg-if", @@ -3211,7 +3217,20 @@ dependencies = [ "bitflags 2.9.0", "errno", "libc", - "linux-raw-sys", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustix" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dade4812df5c384711475be5fcd8c162555352945401aed22a35bffeab61f657" +dependencies = [ + "bitflags 2.9.0", + "errno", + "libc", + "linux-raw-sys 0.9.2", "windows-sys 0.59.0", ] @@ -3485,7 +3504,7 @@ dependencies = [ "libc", "log", "memmap2", - "rustix", + "rustix 0.38.44", "thiserror 1.0.69", "wayland-backend", "wayland-client", @@ -3642,15 +3661,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.17.1" +version = "3.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e5a0acb1f3f55f65cc4a866c361b2fb2a0ff6366785ae6fbb5f85df07ba230" +checksum = "2c317e0a526ee6120d8dabad239c8dadca62b24b6f168914bbbc8e2fb1f0e567" dependencies = [ "cfg-if", "fastrand", "getrandom 0.3.1", "once_cell", - "rustix", + "rustix 1.0.1", "windows-sys 0.59.0", ] @@ -3716,9 +3735,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.38" +version = "0.3.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb041120f25f8fbe8fd2dbe4671c7c2ed74d83be2e7a77529bf7e0790ae3f472" +checksum = "dad298b01a40a23aac4580b67e3dbedb7cc8402f3592d7f49469de2ea4aecdd8" dependencies = [ "deranged", "num-conv", @@ -4157,7 +4176,7 @@ checksum = "b7208998eaa3870dad37ec8836979581506e0c5c64c20c9e79e9d2a10d6f47bf" dependencies = [ "cc", "downcast-rs", - "rustix", + "rustix 0.38.44", "scoped-tls", "smallvec", "wayland-sys", @@ -4170,7 +4189,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2120de3d33638aaef5b9f4472bff75f07c56379cf76ea320bd3a3d65ecaf73f" dependencies = [ "bitflags 2.9.0", - "rustix", + "rustix 0.38.44", "wayland-backend", "wayland-scanner", ] @@ -4192,7 +4211,7 @@ version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a93029cbb6650748881a00e4922b076092a6a08c11e7fbdb923f064b23968c5d" dependencies = [ - "rustix", + "rustix 0.38.44", "wayland-client", "xcursor", ] @@ -4783,7 +4802,7 @@ dependencies = [ "pin-project", "raw-window-handle", "redox_syscall 0.4.1", - "rustix", + "rustix 0.38.44", "smithay-client-toolkit", "smol_str", "tracing", @@ -4863,7 +4882,7 @@ dependencies = [ "libc", "libloading", "once_cell", - "rustix", + "rustix 0.38.44", "x11rb-protocol", ] @@ -5007,11 +5026,11 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.21" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf01143b2dd5d134f11f545cf9f1431b13b749695cb33bcce051e7568f99478" +checksum = "fd97444d05a4328b90e75e503a34bad781f14e28a823ad3557f0750df1ebcbc6" dependencies = [ - "zerocopy-derive 0.8.21", + "zerocopy-derive 0.8.23", ] [[package]] @@ -5027,9 +5046,9 @@ dependencies = [ [[package]] name = "zerocopy-derive" -version = "0.8.21" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712c8386f4f4299382c9abee219bee7084f78fb939d88b6840fcc1320d5f6da2" +checksum = "6352c01d0edd5db859a63e2605f4ea3183ddbd15e2c4a9e7d32184df75e4f154" dependencies = [ "proc-macro2", "quote", From fbe95767f5e4cf3e8be70242b527e813be952bdb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 7 Mar 2025 18:40:11 +0100 Subject: [PATCH 0379/1117] update zip --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 3126e9c..89da9a4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ rust-version = "1.85" [dependencies] dirs = "6.0" -zip = "2.1" +zip = "2.2" governor = "0.8" sevenz-rust = "0.6" chrono = "0.4" From 16a9754bda6673ec4c7504561e5dc51c2477547a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 8 Mar 2025 21:48:51 +0100 Subject: [PATCH 0380/1117] GB MBC1 support (#309) --- src/device/controller/gbcart.rs | 76 +++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index e8ea6b8..b31275d 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -8,6 +8,7 @@ pub struct GbCart { pub ram: Vec, pub cart_type: device::controller::gbcart::CartType, pub ram_enabled: bool, + pub mbc1_mode: bool, pub ram_bank: u16, pub rom_bank: u32, pub set_latch: bool, @@ -21,11 +22,83 @@ pub struct GbCart { pub enum CartType { #[default] None, + MBC1RamBatt, MBC3RamBatt, MBC3RamBattRtc, MBC5RamBatt, } +fn write_mbc1( + pif_ram: &mut [u8], + cart: &mut device::controller::gbcart::GbCart, + address: u16, + data: usize, + size: usize, +) { + let value = pif_ram[data + size - 1]; + if address < 0x2000 { + cart.ram_enabled = value & 0xf == 0xa; + } else if address < 0x4000 { + let bank = value & 0x1f; + cart.rom_bank = bank as u32; + if cart.rom_bank == 0 { + cart.rom_bank = 1; + } + } else if address < 0x6000 { + cart.ram_bank = (value & 0x3) as u16; + } else if address < 0x8000 { + cart.mbc1_mode = (value & 0x1) != 0; + } else if (0xa000..0xc000).contains(&address) { + if !cart.ram_enabled { + return; + } + if cart.mbc1_mode { + let banked_address = address - 0xA000 + (cart.ram_bank * 0x2000); + cart.ram[banked_address as usize..banked_address as usize + size] + .copy_from_slice(&pif_ram[data..data + size]); + } else { + let banked_address = address - 0xA000; + cart.ram[banked_address as usize..banked_address as usize + size] + .copy_from_slice(&pif_ram[data..data + size]); + } + } +} + +fn read_mbc1( + pif_ram: &mut [u8], + cart: &mut device::controller::gbcart::GbCart, + address: u16, + data: usize, + size: usize, +) { + if address < 0x4000 { + let banked_address = address & 0x3FFF; + pif_ram[data..data + size] + .copy_from_slice(&cart.rom[banked_address as usize..banked_address as usize + size]); + } else if address < 0x8000 { + let banked_address = address as u32 - 0x4000 + (cart.rom_bank * 0x4000); + pif_ram[data..data + size] + .copy_from_slice(&cart.rom[banked_address as usize..banked_address as usize + size]); + } else if (0xa000..0xc000).contains(&address) { + if !cart.ram_enabled { + for i in 0..size { + pif_ram[data + i] = 0xff; + } + return; + } + if cart.ram_bank > 3 { + for i in 0..size { + pif_ram[data + i] = 0; + } + } else { + let banked_address = address - 0xA000 + (cart.ram_bank * 0x2000); + pif_ram[data..data + size].copy_from_slice( + &cart.ram[banked_address as usize..banked_address as usize + size], + ); + } + } +} + fn write_mbc3( pif_ram: &mut [u8], cart: &mut device::controller::gbcart::GbCart, @@ -217,6 +290,7 @@ pub fn read( return; } match cart.cart_type { + CartType::MBC1RamBatt => read_mbc1(pif_ram, cart, address, data, size), CartType::MBC3RamBatt => read_mbc3(pif_ram, cart, address, data, size), CartType::MBC3RamBattRtc => read_mbc3(pif_ram, cart, address, data, size), CartType::MBC5RamBatt => read_mbc5(pif_ram, cart, address, data, size), @@ -235,6 +309,7 @@ pub fn write( return; } match cart.cart_type { + CartType::MBC1RamBatt => write_mbc1(pif_ram, cart, address, data, size), CartType::MBC3RamBatt => write_mbc3(pif_ram, cart, address, data, size), CartType::MBC3RamBattRtc => write_mbc3(pif_ram, cart, address, data, size), CartType::MBC5RamBatt => write_mbc5(pif_ram, cart, address, data, size), @@ -244,6 +319,7 @@ pub fn write( pub fn get_cart_type(data: u8) -> CartType { match data { + 0x03 => CartType::MBC1RamBatt, 0x10 => CartType::MBC3RamBattRtc, 0x13 => CartType::MBC3RamBatt, 0x1b => CartType::MBC5RamBatt, From 2828accee1675a9e7633b20b7081b53f43a36a63 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 9 Mar 2025 10:30:43 +0100 Subject: [PATCH 0381/1117] re-arrange UI struct (#310) * re-arrange UI struct * format --- src/device.rs | 2 +- src/device/cart.rs | 21 +++- src/device/cart/rom.rs | 18 ++- src/device/cart/sc64.rs | 35 +++--- src/device/cart/sram.rs | 72 +++++++---- src/device/controller/mempak.rs | 35 ++++-- src/savestates.rs | 15 ++- src/ui.rs | 206 ++++++++++++++++++-------------- src/ui/audio.rs | 83 ++++++++----- src/ui/gui.rs | 8 +- src/ui/input.rs | 53 ++++---- src/ui/storage.rs | 176 +++++++++++++++------------ src/ui/video.rs | 14 +-- 13 files changed, 437 insertions(+), 301 deletions(-) diff --git a/src/device.rs b/src/device.rs index 1b24201..5f751aa 100644 --- a/src/device.rs +++ b/src/device.rs @@ -45,7 +45,7 @@ pub mod unmapped; pub mod vi; pub fn run_game(device: &mut Device, rom_contents: Vec, fullscreen: bool, overclock: bool) { - device.ui.fullscreen = fullscreen; + device.ui.video.fullscreen = fullscreen; device.cpu.overclock = overclock; init_rng(device); diff --git a/src/device/cart.rs b/src/device/cart.rs index 448fc02..97bf09f 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -63,12 +63,14 @@ pub fn process(device: &mut device::Device, channel: usize) { let eeprom_type; if device .ui + .storage .save_type .contains(&ui::storage::SaveTypes::Eeprom16k) { eeprom_type = JDT_EEPROM_16K; } else if device .ui + .storage .save_type .contains(&ui::storage::SaveTypes::Eeprom4k) { @@ -124,8 +126,14 @@ pub fn process(device: &mut device::Device, channel: usize) { } pub fn format_eeprom(device: &mut device::Device) { - if device.ui.saves.eeprom.data.len() < EEPROM_MAX_SIZE { - device.ui.saves.eeprom.data.resize(EEPROM_MAX_SIZE, 0xFF) + if device.ui.storage.saves.eeprom.data.len() < EEPROM_MAX_SIZE { + device + .ui + .storage + .saves + .eeprom + .data + .resize(EEPROM_MAX_SIZE, 0xFF) } } @@ -134,8 +142,9 @@ fn eeprom_read_block(device: &mut device::Device, block: usize, offset: usize) { format_eeprom(device); - device.pif.ram[offset..offset + EEPROM_BLOCK_SIZE] - .copy_from_slice(&device.ui.saves.eeprom.data[address..address + EEPROM_BLOCK_SIZE]); + device.pif.ram[offset..offset + EEPROM_BLOCK_SIZE].copy_from_slice( + &device.ui.storage.saves.eeprom.data[address..address + EEPROM_BLOCK_SIZE], + ); } fn eeprom_write_block(device: &mut device::Device, block: usize, offset: usize, status: usize) { @@ -143,12 +152,12 @@ fn eeprom_write_block(device: &mut device::Device, block: usize, offset: usize, format_eeprom(device); - device.ui.saves.eeprom.data[address..address + EEPROM_BLOCK_SIZE] + device.ui.storage.saves.eeprom.data[address..address + EEPROM_BLOCK_SIZE] .copy_from_slice(&device.pif.ram[offset..offset + EEPROM_BLOCK_SIZE]); device.pif.ram[status] = 0x00; - device.ui.saves.eeprom.written = true + device.ui.storage.saves.eeprom.written = true } fn time2data(device: &mut device::Device, offset: usize) { diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 7a86b38..1bd953d 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -7,7 +7,14 @@ const CART_MASK: usize = 0xFFFFFFF; fn read_cart_word(device: &mut device::Device, address: usize) -> u32 { let mut data: [u8; 4] = [0; 4]; for i in 0..4 { - if let Some(value) = device.ui.saves.romsave.data.get(&(address as u32 + i)) { + if let Some(value) = device + .ui + .storage + .saves + .romsave + .data + .get(&(address as u32 + i)) + { data[i as usize] = *value; } else { data[i as usize] = *device.cart.rom.get(address + i as usize).unwrap_or(&0); @@ -52,12 +59,13 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 for (i, item) in data.to_be_bytes().iter().enumerate() { device .ui + .storage .saves .romsave .data .insert((masked_address + i) as u32, *item); } - device.ui.saves.romsave.written = true; + device.ui.storage.saves.romsave.written = true; } device.cart.latch = value & mask; @@ -81,12 +89,12 @@ pub fn dma_read( cart_addr &= CART_MASK as u32; for i in 0..length { - device.ui.saves.romsave.data.insert( + device.ui.storage.saves.romsave.data.insert( cart_addr + i, device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap], ); } - device.ui.saves.romsave.written = true; + device.ui.storage.saves.romsave.written = true; } device::pi::calculate_cycles(device, 1, length) @@ -104,7 +112,7 @@ pub fn dma_write( let mut i = dram_addr; let mut j = cart_addr; while i < dram_addr + length { - if let Some(value) = device.ui.saves.romsave.data.get(&j) { + if let Some(value) = device.ui.storage.saves.romsave.data.get(&j) { device.rdram.mem[i as usize ^ device.byte_swap] = *value; } else { device.rdram.mem[i as usize ^ device.byte_swap] = diff --git a/src/device/cart/sc64.rs b/src/device/cart/sc64.rs index f1f8440..ba4e8cd 100644 --- a/src/device/cart/sc64.rs +++ b/src/device/cart/sc64.rs @@ -31,9 +31,9 @@ pub struct Sc64 { } fn format_sdcard(device: &mut device::Device) { - if device.ui.saves.sdcard.data.is_empty() { - device.ui.saves.sdcard.data.resize(SDCARD_SIZE, 0); - let buf = std::io::Cursor::new(&mut device.ui.saves.sdcard.data); + if device.ui.storage.saves.sdcard.data.is_empty() { + device.ui.storage.saves.sdcard.data.resize(SDCARD_SIZE, 0); + let buf = std::io::Cursor::new(&mut device.ui.storage.saves.sdcard.data); fatfs::format_volume(buf, fatfs::FormatVolumeOptions::new()).unwrap(); } } @@ -93,8 +93,8 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u if device.cart.sc64.regs[SC64_DATA0_REG as usize] == SC64_SAVE_TYPE { // if save type is being written, we are probably booting a game using the flash cart menu // we shouldn't write saves to disk in this case (they are written to the SD card) - device.ui.saves.write_to_disk = false; - device.ui.save_type = + device.ui.storage.saves.write_to_disk = false; + device.ui.storage.save_type = match device.cart.sc64.regs[SC64_DATA1_REG as usize] { 0 => { vec![] @@ -155,9 +155,10 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u let mut i = 0; while i < length { - if offset + i < device.ui.saves.sdcard.data.len() { + if offset + i < device.ui.storage.saves.sdcard.data.len() { let data = u32::from_be_bytes( - device.ui.saves.sdcard.data[(offset + i)..(offset + i + 4)] + device.ui.storage.saves.sdcard.data + [(offset + i)..(offset + i + 4)] .try_into() .unwrap(), ); @@ -186,7 +187,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u let mut i = 0; while i < length { - if offset + i < device.ui.saves.sdcard.data.len() { + if offset + i < device.ui.storage.saves.sdcard.data.len() { let data = device::memory::data_read( device, address + i as u64, @@ -194,14 +195,14 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u false, ) .to_be_bytes(); - device.ui.saves.sdcard.data[(offset + i)..(offset + i + 4)] + device.ui.storage.saves.sdcard.data[(offset + i)..(offset + i + 4)] .copy_from_slice(&data); } else { panic!("sd card write out of bounds") } i += 4; } - device.ui.saves.sdcard.written = true; + device.ui.storage.saves.sdcard.written = true; } 'U' | 'u' => {} // USB status, ignored 'M' | 'm' => {} // USB read/write, ignored @@ -248,7 +249,7 @@ pub fn read_mem( device::cart::format_eeprom(device); let masked_address = address as usize & SC64_EEPROM_MASK; u32::from_be_bytes( - device.ui.saves.eeprom.data[masked_address..masked_address + 4] + device.ui.storage.saves.eeprom.data[masked_address..masked_address + 4] .try_into() .unwrap(), ) @@ -267,14 +268,14 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 device::cart::format_eeprom(device); let masked_address = address as usize & SC64_EEPROM_MASK; let mut data = u32::from_be_bytes( - device.ui.saves.eeprom.data[masked_address..masked_address + 4] + device.ui.storage.saves.eeprom.data[masked_address..masked_address + 4] .try_into() .unwrap(), ); device::memory::masked_write_32(&mut data, value, mask); - device.ui.saves.eeprom.data[masked_address..masked_address + 4] + device.ui.storage.saves.eeprom.data[masked_address..masked_address + 4] .copy_from_slice(&data.to_be_bytes()); - device.ui.saves.eeprom.written = true + device.ui.storage.saves.eeprom.written = true } else { let masked_address = address as usize & SC64_BUFFER_MASK; let mut data = u32::from_be_bytes( @@ -298,8 +299,8 @@ pub fn dma_read( let buffer = if cart_addr & 0x2000 != 0 { device::cart::format_eeprom(device); cart_addr &= SC64_EEPROM_MASK as u32; - device.ui.saves.eeprom.written = true; - &mut device.ui.saves.eeprom.data + device.ui.storage.saves.eeprom.written = true; + &mut device.ui.storage.saves.eeprom.data } else { cart_addr &= SC64_BUFFER_MASK as u32; &mut device.cart.sc64.buffer @@ -326,7 +327,7 @@ pub fn dma_write( let buffer = if cart_addr & 0x2000 != 0 { device::cart::format_eeprom(device); cart_addr &= SC64_EEPROM_MASK as u32; - &device.ui.saves.eeprom.data + &device.ui.storage.saves.eeprom.data } else { cart_addr &= SC64_BUFFER_MASK as u32; &device.cart.sc64.buffer diff --git a/src/device/cart/sram.rs b/src/device/cart/sram.rs index 8b9dae5..57cc73a 100644 --- a/src/device/cart/sram.rs +++ b/src/device/cart/sram.rs @@ -29,14 +29,20 @@ pub struct Flashram { } fn format_sram(device: &mut device::Device) { - if device.ui.saves.sram.data.len() < SRAM_SIZE { - device.ui.saves.sram.data.resize(SRAM_SIZE, 0xFF) + if device.ui.storage.saves.sram.data.len() < SRAM_SIZE { + device.ui.storage.saves.sram.data.resize(SRAM_SIZE, 0xFF) } } fn format_flash(device: &mut device::Device) { - if device.ui.saves.flash.data.len() < FLASHRAM_SIZE { - device.ui.saves.flash.data.resize(FLASHRAM_SIZE, 0xFF) + if device.ui.storage.saves.flash.data.len() < FLASHRAM_SIZE { + device + .ui + .storage + .saves + .flash + .data + .resize(FLASHRAM_SIZE, 0xFF) } } @@ -46,7 +52,7 @@ fn read_mem_sram(device: &mut device::Device, address: u64) -> u32 { format_sram(device); u32::from_be_bytes( - device.ui.saves.sram.data[masked_address..masked_address + 4] + device.ui.storage.saves.sram.data[masked_address..masked_address + 4] .try_into() .unwrap(), ) @@ -75,7 +81,12 @@ pub fn read_mem( let cycles = device::pi::calculate_cycles(device, 2, 4); device::cop0::add_cycles(device, cycles); - if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { + if device + .ui + .storage + .save_type + .contains(&ui::storage::SaveTypes::Sram) + { read_mem_sram(device, address) } else { read_mem_flash(device, address) @@ -88,15 +99,15 @@ fn write_mem_sram(device: &mut device::Device, address: u64, value: u32, mask: u format_sram(device); let mut data = u32::from_be_bytes( - device.ui.saves.sram.data[masked_address..masked_address + 4] + device.ui.storage.saves.sram.data[masked_address..masked_address + 4] .try_into() .unwrap(), ); device::memory::masked_write_32(&mut data, value, mask); - device.ui.saves.sram.data[masked_address..masked_address + 4] + device.ui.storage.saves.sram.data[masked_address..masked_address + 4] .copy_from_slice(&data.to_be_bytes()); - device.ui.saves.sram.written = true + device.ui.storage.saves.sram.written = true } fn write_mem_flash(device: &mut device::Device, address: u64, value: u32, mask: u32) { @@ -114,7 +125,12 @@ fn write_mem_flash(device: &mut device::Device, address: u64, value: u32, mask: } pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { - if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { + if device + .ui + .storage + .save_type + .contains(&ui::storage::SaveTypes::Sram) + { write_mem_sram(device, address, value, mask) } else { write_mem_flash(device, address, value, mask) @@ -135,12 +151,13 @@ fn dma_read_sram(device: &mut device::Device, mut cart_addr: u32, mut dram_addr: format_sram(device); while i < dram_addr + length && i < device.rdram.size { - device.ui.saves.sram.data[j as usize] = device.rdram.mem[i as usize ^ device.byte_swap]; + device.ui.storage.saves.sram.data[j as usize] = + device.rdram.mem[i as usize ^ device.byte_swap]; i += 1; j += 1; } - device.ui.saves.sram.written = true + device.ui.storage.saves.sram.written = true } fn dma_read_flash(device: &mut device::Device, cart_addr: u32, dram_addr: u32, length: u32) { @@ -163,7 +180,12 @@ fn dma_read_flash(device: &mut device::Device, cart_addr: u32, dram_addr: u32, l // cart is big endian, rdram is native endian pub fn dma_read(device: &mut device::Device, cart_addr: u32, dram_addr: u32, length: u32) -> u64 { - if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { + if device + .ui + .storage + .save_type + .contains(&ui::storage::SaveTypes::Sram) + { dma_read_sram(device, cart_addr, dram_addr, length) } else { dma_read_flash(device, cart_addr, dram_addr, length) @@ -185,7 +207,8 @@ fn dma_write_sram( format_sram(device); while i < dram_addr + length && i < device.rdram.size { - device.rdram.mem[i as usize ^ device.byte_swap] = device.ui.saves.sram.data[j as usize]; + device.rdram.mem[i as usize ^ device.byte_swap] = + device.ui.storage.saves.sram.data[j as usize]; i += 1; j += 1; } @@ -228,7 +251,7 @@ fn dma_write_flash( /* do actual DMA */ for i in 0..length { device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap] = - device.ui.saves.flash.data[(cart_addr + i) as usize]; + device.ui.storage.saves.flash.data[(cart_addr + i) as usize]; } } else { /* other accesses are not implemented */ @@ -238,7 +261,12 @@ fn dma_write_flash( // cart is big endian, rdram is native endian pub fn dma_write(device: &mut device::Device, cart_addr: u32, dram_addr: u32, length: u32) -> u64 { - if device.ui.save_type.contains(&ui::storage::SaveTypes::Sram) { + if device + .ui + .storage + .save_type + .contains(&ui::storage::SaveTypes::Sram) + { dma_write_sram(device, cart_addr, dram_addr, length) } else { dma_write_flash(device, cart_addr, dram_addr, length) @@ -267,14 +295,14 @@ fn flashram_command(device: &mut device::Device, command: u32) { if device.cart.flashram.mode == FlashramMode::SectorErase { let offset: usize = (device.cart.flashram.erase_page & 0xff80) as usize * 128; for i in 0..128 * 128 { - device.ui.saves.flash.data[offset + i] = 0xFF; + device.ui.storage.saves.flash.data[offset + i] = 0xFF; } - device.ui.saves.flash.written = true + device.ui.storage.saves.flash.written = true } else if device.cart.flashram.mode == FlashramMode::ChipErase { for i in 0..FLASHRAM_SIZE { - device.ui.saves.flash.data[i] = 0xFF; + device.ui.storage.saves.flash.data[i] = 0xFF; } - device.ui.saves.flash.written = true + device.ui.storage.saves.flash.written = true } else { panic!("Unexpected flash erase command") } @@ -292,9 +320,9 @@ fn flashram_command(device: &mut device::Device, command: u32) { /* program selected page */ let offset: usize = (command & 0xffff) as usize * 128; for i in 0..128 { - device.ui.saves.flash.data[offset + i] = device.cart.flashram.page_buf[i]; + device.ui.storage.saves.flash.data[offset + i] = device.cart.flashram.page_buf[i]; } - device.ui.saves.flash.written = true; + device.ui.storage.saves.flash.written = true; /* clear program busy flag, set program success flag, transition to status mode */ device.cart.flashram.status &= !0x01; diff --git a/src/device/controller/mempak.rs b/src/device/controller/mempak.rs index aca986e..54ffa7d 100644 --- a/src/device/controller/mempak.rs +++ b/src/device/controller/mempak.rs @@ -4,8 +4,14 @@ pub const MEMPAK_SIZE: usize = 0x8000; const MPK_PAGE_SIZE: usize = 256; fn format_mempak(device: &mut device::Device) { - if device.ui.saves.mempak.data.len() < MEMPAK_SIZE * 4 { - device.ui.saves.mempak.data.resize(MEMPAK_SIZE * 4, 0); + if device.ui.storage.saves.mempak.data.len() < MEMPAK_SIZE * 4 { + device + .ui + .storage + .saves + .mempak + .data + .resize(MEMPAK_SIZE * 4, 0); let page_0: [u8; MPK_PAGE_SIZE] = [ /* Label area */ @@ -38,28 +44,31 @@ fn format_mempak(device: &mut device::Device) { let offset = i * MEMPAK_SIZE; /* Fill Page 0 with pre-initialized content */ - device.ui.saves.mempak.data[offset..offset + MPK_PAGE_SIZE].copy_from_slice(&page_0); + device.ui.storage.saves.mempak.data[offset..offset + MPK_PAGE_SIZE] + .copy_from_slice(&page_0); /* Fill INODE page 1 and update it's checkum */ let start_page = 5; for i in MPK_PAGE_SIZE..2 * start_page { - device.ui.saves.mempak.data[offset + i] = 0; + device.ui.storage.saves.mempak.data[offset + i] = 0; } for i in (MPK_PAGE_SIZE + 2 * start_page..2 * MPK_PAGE_SIZE).step_by(2) { - device.ui.saves.mempak.data[offset + i] = 0x00; - device.ui.saves.mempak.data[offset + i + 1] = 0x03; + device.ui.storage.saves.mempak.data[offset + i] = 0x00; + device.ui.storage.saves.mempak.data[offset + i + 1] = 0x03; } - device.ui.saves.mempak.data[offset + (MPK_PAGE_SIZE + 1)] = 0x71; + device.ui.storage.saves.mempak.data[offset + (MPK_PAGE_SIZE + 1)] = 0x71; /* Page 2 is identical to page 1 */ let page1 = offset + MPK_PAGE_SIZE; let page2 = offset + 2 * MPK_PAGE_SIZE; - let page1data = device.ui.saves.mempak.data[page1..page1 + MPK_PAGE_SIZE].to_vec(); - device.ui.saves.mempak.data[page2..page2 + MPK_PAGE_SIZE].copy_from_slice(&page1data); + let page1data = + device.ui.storage.saves.mempak.data[page1..page1 + MPK_PAGE_SIZE].to_vec(); + device.ui.storage.saves.mempak.data[page2..page2 + MPK_PAGE_SIZE] + .copy_from_slice(&page1data); /* Remaining pages DIR+DATA (3...) are initialized with 0x00 */ for i in 3 * MPK_PAGE_SIZE..MEMPAK_SIZE - 3 * MPK_PAGE_SIZE { - device.ui.saves.mempak.data[offset + i] = 0; + device.ui.storage.saves.mempak.data[offset + i] = 0; } } } @@ -71,7 +80,7 @@ pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usi let offset = (channel * MEMPAK_SIZE) + address as usize; device.pif.ram[data..data + size] - .copy_from_slice(&device.ui.saves.mempak.data[offset..offset + size]) + .copy_from_slice(&device.ui.storage.saves.mempak.data[offset..offset + size]) } else { for i in 0..size { device.pif.ram[data + i] = 0; @@ -84,9 +93,9 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us format_mempak(device); let offset = (channel * MEMPAK_SIZE) + address as usize; - device.ui.saves.mempak.data[offset..offset + size] + device.ui.storage.saves.mempak.data[offset..offset + size] .copy_from_slice(&device.pif.ram[data..data + size]); - device.ui.saves.mempak.written = true + device.ui.storage.saves.mempak.written = true } } diff --git a/src/savestates.rs b/src/savestates.rs index a33385d..d75520c 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -74,20 +74,27 @@ pub fn create_savestate(device: &device::Device) { let data: &[(&[u8], &str)] = &[ (&postcard::to_stdvec(device).unwrap(), "device"), - (&postcard::to_stdvec(&device.ui.saves).unwrap(), "saves"), + ( + &postcard::to_stdvec(&device.ui.storage.saves).unwrap(), + "saves", + ), ]; let compressed_file = ui::storage::compress_file(data); - std::fs::write(device.ui.paths.savestate_file_path.clone(), compressed_file).unwrap(); + std::fs::write( + device.ui.storage.paths.savestate_file_path.clone(), + compressed_file, + ) + .unwrap(); } pub fn load_savestate(device: &mut device::Device) { - let savestate = std::fs::read(&mut device.ui.paths.savestate_file_path); + let savestate = std::fs::read(&mut device.ui.storage.paths.savestate_file_path); if savestate.is_ok() { let device_bytes = ui::storage::decompress_file(savestate.as_ref().unwrap(), "device"); let save_bytes = ui::storage::decompress_file(savestate.as_ref().unwrap(), "saves"); let state: device::Device = postcard::from_bytes(&device_bytes).unwrap(); - device.ui.saves = postcard::from_bytes(&save_bytes).unwrap(); + device.ui.storage.saves = postcard::from_bytes(&save_bytes).unwrap(); device.cpu = state.cpu; device.pif = state.pif; diff --git a/src/ui.rs b/src/ui.rs index 7a9ccea..a7ff5e7 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -12,32 +12,48 @@ pub struct Dirs { pub data_dir: std::path::PathBuf, } -pub struct Ui { - pub dirs: Dirs, - pub keyboard_state: *const bool, - pub controllers: [input::Controllers; 4], - pub config: config::Config, - pub save_type: Vec, - pub game_id: String, - pub game_hash: String, - pub paths: storage::Paths, - pub saves: storage::Saves, - pub event_audio: audio::EventAudio, - pub window: *mut sdl3_sys::video::SDL_Window, +pub struct Audio { pub audio_stream: *mut sdl3_sys::audio::SDL_AudioStream, pub event_audio_stream: *mut sdl3_sys::audio::SDL_AudioStream, pub audio_device: u32, + pub event_audio: audio::EventAudio, +} + +pub struct Input { pub num_joysticks: i32, - pub fullscreen: bool, pub joysticks: *mut sdl3_sys::joystick::SDL_JoystickID, + pub keyboard_state: *const bool, + pub controllers: [input::Controllers; 4], +} + +pub struct Storage { + pub save_type: Vec, + pub paths: storage::Paths, + pub saves: storage::Saves, +} + +pub struct Video { + pub window: *mut sdl3_sys::video::SDL_Window, + pub fullscreen: bool, +} + +pub struct Ui { + pub dirs: Dirs, + pub config: config::Config, + pub game_id: String, + pub game_hash: String, pub with_sdl: bool, + pub audio: Audio, + pub input: Input, + pub storage: Storage, + pub video: Video, } impl Drop for Ui { fn drop(&mut self) { if self.with_sdl { unsafe { - sdl3_sys::stdinc::SDL_free(self.joysticks as *mut std::ffi::c_void); + sdl3_sys::stdinc::SDL_free(self.input.joysticks as *mut std::ffi::c_void); sdl3_sys::init::SDL_Quit(); } } @@ -85,90 +101,98 @@ impl Ui { let dirs = get_dirs(); Ui { - controllers: [ - input::Controllers { - game_controller: std::ptr::null_mut(), - joystick: std::ptr::null_mut(), - rumble: false, + input: Input { + controllers: [ + input::Controllers { + game_controller: std::ptr::null_mut(), + joystick: std::ptr::null_mut(), + rumble: false, + }, + input::Controllers { + game_controller: std::ptr::null_mut(), + joystick: std::ptr::null_mut(), + rumble: false, + }, + input::Controllers { + game_controller: std::ptr::null_mut(), + joystick: std::ptr::null_mut(), + rumble: false, + }, + input::Controllers { + game_controller: std::ptr::null_mut(), + joystick: std::ptr::null_mut(), + rumble: false, + }, + ], + keyboard_state: std::ptr::null_mut(), + num_joysticks, + joysticks, + }, + storage: Storage { + save_type: vec![], + paths: storage::Paths { + eep_file_path: std::path::PathBuf::new(), + fla_file_path: std::path::PathBuf::new(), + sra_file_path: std::path::PathBuf::new(), + pak_file_path: std::path::PathBuf::new(), + sdcard_file_path: std::path::PathBuf::new(), + romsave_file_path: std::path::PathBuf::new(), + savestate_file_path: std::path::PathBuf::new(), }, - input::Controllers { - game_controller: std::ptr::null_mut(), - joystick: std::ptr::null_mut(), - rumble: false, + saves: storage::Saves { + write_to_disk: true, + eeprom: storage::Save { + data: Vec::new(), + written: false, + }, + sram: storage::Save { + data: Vec::new(), + written: false, + }, + flash: storage::Save { + data: Vec::new(), + written: false, + }, + mempak: storage::Save { + data: Vec::new(), + written: false, + }, + sdcard: storage::Save { + data: Vec::new(), + written: false, + }, + romsave: storage::RomSave { + data: std::collections::HashMap::new(), + written: false, + }, }, - input::Controllers { - game_controller: std::ptr::null_mut(), - joystick: std::ptr::null_mut(), - rumble: false, - }, - input::Controllers { - game_controller: std::ptr::null_mut(), - joystick: std::ptr::null_mut(), - rumble: false, - }, - ], - keyboard_state: std::ptr::null_mut(), + }, config: config::Config::new(), - save_type: vec![], game_id: String::new(), game_hash: String::new(), - paths: storage::Paths { - eep_file_path: std::path::PathBuf::new(), - fla_file_path: std::path::PathBuf::new(), - sra_file_path: std::path::PathBuf::new(), - pak_file_path: std::path::PathBuf::new(), - sdcard_file_path: std::path::PathBuf::new(), - romsave_file_path: std::path::PathBuf::new(), - savestate_file_path: std::path::PathBuf::new(), + audio: Audio { + event_audio: audio::EventAudio { + mempak: include_bytes!("../data/mempak.wav").to_vec(), + rumblepak: include_bytes!("../data/rumblepak.wav").to_vec(), + transferpak: include_bytes!("../data/transferpak.wav").to_vec(), + netplay_desync: include_bytes!("../data/netplay_desync.wav").to_vec(), + netplay_lost_connection: include_bytes!("../data/netplay_lost_connection.wav") + .to_vec(), + netplay_disconnected: [ + include_bytes!("../data/netplay_p1_disconnected.wav").to_vec(), + include_bytes!("../data/netplay_p2_disconnected.wav").to_vec(), + include_bytes!("../data/netplay_p3_disconnected.wav").to_vec(), + include_bytes!("../data/netplay_p4_disconnected.wav").to_vec(), + ], + }, + audio_stream: std::ptr::null_mut(), + event_audio_stream: std::ptr::null_mut(), + audio_device: 0, }, - saves: storage::Saves { - write_to_disk: true, - eeprom: storage::Save { - data: Vec::new(), - written: false, - }, - sram: storage::Save { - data: Vec::new(), - written: false, - }, - flash: storage::Save { - data: Vec::new(), - written: false, - }, - mempak: storage::Save { - data: Vec::new(), - written: false, - }, - sdcard: storage::Save { - data: Vec::new(), - written: false, - }, - romsave: storage::RomSave { - data: std::collections::HashMap::new(), - written: false, - }, + video: Video { + window: std::ptr::null_mut(), + fullscreen: false, }, - event_audio: audio::EventAudio { - mempak: include_bytes!("../data/mempak.wav").to_vec(), - rumblepak: include_bytes!("../data/rumblepak.wav").to_vec(), - transferpak: include_bytes!("../data/transferpak.wav").to_vec(), - netplay_desync: include_bytes!("../data/netplay_desync.wav").to_vec(), - netplay_lost_connection: include_bytes!("../data/netplay_lost_connection.wav") - .to_vec(), - netplay_disconnected: [ - include_bytes!("../data/netplay_p1_disconnected.wav").to_vec(), - include_bytes!("../data/netplay_p2_disconnected.wav").to_vec(), - include_bytes!("../data/netplay_p3_disconnected.wav").to_vec(), - include_bytes!("../data/netplay_p4_disconnected.wav").to_vec(), - ], - }, - window: std::ptr::null_mut(), - audio_stream: std::ptr::null_mut(), - event_audio_stream: std::ptr::null_mut(), - audio_device: 0, - fullscreen: false, - num_joysticks, - joysticks, dirs, with_sdl, } diff --git a/src/ui/audio.rs b/src/ui/audio.rs index d47d899..3fc1d8f 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -24,28 +24,35 @@ pub fn init(ui: &mut ui::Ui, frequency: u64) { freq: 48000, channels: 2, }; - ui.audio_device = unsafe { + ui.audio.audio_device = unsafe { sdl3_sys::audio::SDL_OpenAudioDevice( sdl3_sys::audio::SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, &device_audio_spec, ) }; - if ui.audio_device == 0 { + if ui.audio.audio_device == 0 { panic!("Could not open audio device"); } let mut dst = Default::default(); if !unsafe { - sdl3_sys::audio::SDL_GetAudioDeviceFormat(ui.audio_device, &mut dst, std::ptr::null_mut()) + sdl3_sys::audio::SDL_GetAudioDeviceFormat( + ui.audio.audio_device, + &mut dst, + std::ptr::null_mut(), + ) } { panic!("Could not get audio device format"); } - ui.audio_stream = unsafe { sdl3_sys::audio::SDL_CreateAudioStream(&game_audio_spec, &dst) }; - if ui.audio_stream.is_null() { + ui.audio.audio_stream = + unsafe { sdl3_sys::audio::SDL_CreateAudioStream(&game_audio_spec, &dst) }; + if ui.audio.audio_stream.is_null() { return; } - if !unsafe { sdl3_sys::audio::SDL_BindAudioStream(ui.audio_device, ui.audio_stream) } { + if !unsafe { + sdl3_sys::audio::SDL_BindAudioStream(ui.audio.audio_device, ui.audio.audio_stream) + } { panic!("Could not bind audio stream"); } @@ -55,44 +62,54 @@ pub fn init(ui: &mut ui::Ui, frequency: u64) { channels: 1, }; - ui.event_audio_stream = + ui.audio.event_audio_stream = unsafe { sdl3_sys::audio::SDL_CreateAudioStream(&wav_audio_spec, &dst) }; - if !unsafe { sdl3_sys::audio::SDL_BindAudioStream(ui.audio_device, ui.event_audio_stream) } { + if !unsafe { + sdl3_sys::audio::SDL_BindAudioStream(ui.audio.audio_device, ui.audio.event_audio_stream) + } { panic!("Could not bind audio stream"); } } pub fn close(ui: &mut ui::Ui) { unsafe { - if !ui.audio_stream.is_null() { - sdl3_sys::audio::SDL_DestroyAudioStream(ui.audio_stream); - ui.audio_stream = std::ptr::null_mut(); + if !ui.audio.audio_stream.is_null() { + sdl3_sys::audio::SDL_DestroyAudioStream(ui.audio.audio_stream); + ui.audio.audio_stream = std::ptr::null_mut(); } - if !ui.event_audio_stream.is_null() { - sdl3_sys::audio::SDL_DestroyAudioStream(ui.event_audio_stream); - ui.event_audio_stream = std::ptr::null_mut(); + if !ui.audio.event_audio_stream.is_null() { + sdl3_sys::audio::SDL_DestroyAudioStream(ui.audio.event_audio_stream); + ui.audio.event_audio_stream = std::ptr::null_mut(); } - sdl3_sys::audio::SDL_CloseAudioDevice(ui.audio_device); - ui.audio_device = 0; + sdl3_sys::audio::SDL_CloseAudioDevice(ui.audio.audio_device); + ui.audio.audio_device = 0; } } pub fn play_netplay_audio(ui: &mut ui::Ui, error: u32) { - if ui.event_audio_stream.is_null() { + if ui.audio.event_audio_stream.is_null() { return; } let sound = match error { - netplay::NETPLAY_ERROR_DESYNC => &ui.event_audio.netplay_desync, - netplay::NETPLAY_ERROR_LOST_CONNECTION => &ui.event_audio.netplay_lost_connection, - netplay::NETPLAY_ERROR_PLAYER_1_DISCONNECTED => &ui.event_audio.netplay_disconnected[0], - netplay::NETPLAY_ERROR_PLAYER_2_DISCONNECTED => &ui.event_audio.netplay_disconnected[1], - netplay::NETPLAY_ERROR_PLAYER_3_DISCONNECTED => &ui.event_audio.netplay_disconnected[2], - netplay::NETPLAY_ERROR_PLAYER_4_DISCONNECTED => &ui.event_audio.netplay_disconnected[3], + netplay::NETPLAY_ERROR_DESYNC => &ui.audio.event_audio.netplay_desync, + netplay::NETPLAY_ERROR_LOST_CONNECTION => &ui.audio.event_audio.netplay_lost_connection, + netplay::NETPLAY_ERROR_PLAYER_1_DISCONNECTED => { + &ui.audio.event_audio.netplay_disconnected[0] + } + netplay::NETPLAY_ERROR_PLAYER_2_DISCONNECTED => { + &ui.audio.event_audio.netplay_disconnected[1] + } + netplay::NETPLAY_ERROR_PLAYER_3_DISCONNECTED => { + &ui.audio.event_audio.netplay_disconnected[2] + } + netplay::NETPLAY_ERROR_PLAYER_4_DISCONNECTED => { + &ui.audio.event_audio.netplay_disconnected[3] + } _ => panic!("Invalid netplay error"), }; if !unsafe { sdl3_sys::audio::SDL_PutAudioStreamData( - ui.event_audio_stream, + ui.audio.event_audio_stream, sound.as_ptr() as *const std::ffi::c_void, sound.len() as i32, ) @@ -102,19 +119,19 @@ pub fn play_netplay_audio(ui: &mut ui::Ui, error: u32) { } pub fn play_pak_switch(ui: &mut ui::Ui, pak: device::controller::PakType) { - if ui.event_audio_stream.is_null() { + if ui.audio.event_audio_stream.is_null() { return; } let sound = match pak { - device::controller::PakType::RumblePak => &ui.event_audio.rumblepak, - device::controller::PakType::MemPak => &ui.event_audio.mempak, - device::controller::PakType::TransferPak => &ui.event_audio.transferpak, + device::controller::PakType::RumblePak => &ui.audio.event_audio.rumblepak, + device::controller::PakType::MemPak => &ui.audio.event_audio.mempak, + device::controller::PakType::TransferPak => &ui.audio.event_audio.transferpak, _ => panic!("Invalid pak type"), }; if !unsafe { sdl3_sys::audio::SDL_PutAudioStreamData( - ui.event_audio_stream, + ui.audio.event_audio_stream, sound.as_ptr() as *const std::ffi::c_void, sound.len() as i32, ) @@ -124,7 +141,7 @@ pub fn play_pak_switch(ui: &mut ui::Ui, pak: device::controller::PakType) { } pub fn play_audio(device: &mut device::Device, dram_addr: usize, length: u64) { - if device.ui.audio_stream.is_null() { + if device.ui.audio.audio_stream.is_null() { return; } @@ -142,7 +159,7 @@ pub fn play_audio(device: &mut device::Device, dram_addr: usize, length: u64) { } let audio_queued = - unsafe { sdl3_sys::audio::SDL_GetAudioStreamQueued(device.ui.audio_stream) } as f64; + unsafe { sdl3_sys::audio::SDL_GetAudioStreamQueued(device.ui.audio.audio_stream) } as f64; let acceptable_latency = (device.ai.freq as f64 * 0.2) * 4.0; let min_latency = (device.ai.freq as f64 * 0.02) * 4.0; @@ -150,7 +167,7 @@ pub fn play_audio(device: &mut device::Device, dram_addr: usize, length: u64) { let silence_buffer: Vec = vec![0; min_latency as usize & !3]; if !unsafe { sdl3_sys::audio::SDL_PutAudioStreamData( - device.ui.audio_stream, + device.ui.audio.audio_stream, silence_buffer.as_ptr() as *const std::ffi::c_void, silence_buffer.len() as i32, ) @@ -162,7 +179,7 @@ pub fn play_audio(device: &mut device::Device, dram_addr: usize, length: u64) { if audio_queued < acceptable_latency && !unsafe { sdl3_sys::audio::SDL_PutAudioStreamData( - device.ui.audio_stream, + device.ui.audio.audio_stream, primary_buffer.as_ptr() as *const std::ffi::c_void, primary_buffer.len() as i32 * 2, ) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 44265c8..43d8bf7 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -59,10 +59,10 @@ fn get_input_profiles(config: &ui::config::Config) -> Vec { pub fn get_controller_names(game_ui: &ui::Ui) -> Vec { let mut controllers: Vec = vec![]; - for offset in 0..game_ui.num_joysticks as isize { + for offset in 0..game_ui.input.num_joysticks as isize { let name = unsafe { std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickNameForID( - *(game_ui.joysticks.offset(offset)), + *(game_ui.input.joysticks.offset(offset)), )) }; controllers.push(name.to_string_lossy().to_string()); @@ -74,10 +74,10 @@ pub fn get_controller_names(game_ui: &ui::Ui) -> Vec { pub fn get_controller_paths(game_ui: &ui::Ui) -> Vec { let mut controller_paths: Vec = vec![]; - for offset in 0..game_ui.num_joysticks as isize { + for offset in 0..game_ui.input.num_joysticks as isize { let path = unsafe { std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickPathForID( - *(game_ui.joysticks.offset(offset)), + *(game_ui.input.joysticks.offset(offset)), )) .to_string_lossy() .to_string() diff --git a/src/ui/input.rs b/src/ui/input.rs index d69ab7a..92f6a00 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -277,11 +277,11 @@ fn set_buttons_from_controller( } pub fn set_rumble(ui: &mut ui::Ui, channel: usize, rumble: u8) { - if !ui.controllers[channel].rumble { + if !ui.input.controllers[channel].rumble { return; } - let controller = ui.controllers[channel].game_controller; - let joystick = ui.controllers[channel].joystick; + let controller = ui.input.controllers[channel].game_controller; + let joystick = ui.input.controllers[channel].joystick; if !controller.is_null() { unsafe { sdl3_sys::gamepad::SDL_RumbleGamepad( @@ -338,14 +338,16 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> InputData { let profile_name = ui.config.input.input_profile_binding[channel].clone(); let profile = ui.config.input.input_profiles.get(&profile_name).unwrap(); let mut keys = 0; - let controller = ui.controllers[channel].game_controller; - let joystick = ui.controllers[channel].joystick; + let controller = ui.input.controllers[channel].game_controller; + let joystick = ui.input.controllers[channel].joystick; let alt_pressed = unsafe { // ignore key presses if ALT is pressed - *ui.keyboard_state + *ui.input + .keyboard_state .offset(i32::from(sdl3_sys::scancode::SDL_SCANCODE_LALT) as isize) || *ui + .input .keyboard_state .offset(i32::from(sdl3_sys::scancode::SDL_SCANCODE_RALT) as isize) }; @@ -354,7 +356,9 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> InputData { if profile_name != "default" || channel == 0 { let profile_key = profile.keys[i]; if profile_key.enabled && !alt_pressed { - keys |= (unsafe { *ui.keyboard_state.offset(profile_key.id as isize) } as u32) << i; + keys |= (unsafe { *ui.input.keyboard_state.offset(profile_key.id as isize) } + as u32) + << i; } } @@ -369,7 +373,7 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> InputData { let mut y: f64 = 0.0; if profile_name != "default" || channel == 0 { - (x, y) = set_axis_from_keys(profile, ui.keyboard_state); + (x, y) = set_axis_from_keys(profile, ui.input.keyboard_state); } if !controller.is_null() { @@ -384,15 +388,15 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> InputData { InputData { data: keys, - pak_change_pressed: change_paks(profile, joystick, controller, ui.keyboard_state), + pak_change_pressed: change_paks(profile, joystick, controller, ui.input.keyboard_state), } } pub fn assign_controller(ui: &mut ui::Ui, controller: i32, port: usize) { - if controller < ui.num_joysticks { + if controller < ui.input.num_joysticks { let path = unsafe { std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickPathForID( - *(ui.joysticks.offset(controller as isize)), + *(ui.input.joysticks.offset(controller as isize)), )) .to_string_lossy() .to_string() @@ -444,16 +448,16 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { let mut open_joysticks: Vec<*mut sdl3_sys::joystick::SDL_Joystick> = Vec::new(); let mut open_controllers: Vec<*mut sdl3_sys::gamepad::SDL_Gamepad> = Vec::new(); - for offset in 0..ui.num_joysticks as isize { + for offset in 0..ui.input.num_joysticks as isize { if !dinput { let controller = - unsafe { sdl3_sys::gamepad::SDL_OpenGamepad(*ui.joysticks.offset(offset)) }; + unsafe { sdl3_sys::gamepad::SDL_OpenGamepad(*ui.input.joysticks.offset(offset)) }; if !controller.is_null() { open_controllers.push(controller); } } else { let joystick = - unsafe { sdl3_sys::joystick::SDL_OpenJoystick(*ui.joysticks.offset(offset)) }; + unsafe { sdl3_sys::joystick::SDL_OpenJoystick(*ui.input.joysticks.offset(offset)) }; if !joystick.is_null() { open_joysticks.push(joystick); } @@ -849,8 +853,9 @@ pub fn get_default_profile() -> ui::config::InputProfile { } pub fn init(ui: &mut ui::Ui) { - ui.keyboard_state = unsafe { sdl3_sys::keyboard::SDL_GetKeyboardState(std::ptr::null_mut()) }; - if ui.keyboard_state.is_null() { + ui.input.keyboard_state = + unsafe { sdl3_sys::keyboard::SDL_GetKeyboardState(std::ptr::null_mut()) }; + if ui.input.keyboard_state.is_null() { panic!("Could not get keyboard state"); } @@ -861,16 +866,16 @@ pub fn init(ui: &mut ui::Ui) { let mut joystick_id = 0; let assigned_path = controller_assignment.as_ref().unwrap(); - for offset in 0..ui.num_joysticks as isize { + for offset in 0..ui.input.num_joysticks as isize { let path = unsafe { std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickPathForID( - *(ui.joysticks.offset(offset)), + *(ui.input.joysticks.offset(offset)), )) .to_string_lossy() .to_string() }; if path == *assigned_path && !taken[offset as usize] { - joystick_id = unsafe { *(ui.joysticks.offset(offset)) }; + joystick_id = unsafe { *(ui.input.joysticks.offset(offset)) }; taken[offset as usize] = true; break; } @@ -885,13 +890,13 @@ pub fn init(ui: &mut ui::Ui) { if gamepad.is_null() { println!("could not connect gamepad: {}", joystick_id) } else { - ui.controllers[i].game_controller = gamepad; + ui.input.controllers[i].game_controller = gamepad; let properties = unsafe { sdl3_sys::gamepad::SDL_GetGamepadProperties(gamepad) }; if properties == 0 { println!("could not get gamepad properties"); } - ui.controllers[i].rumble = unsafe { + ui.input.controllers[i].rumble = unsafe { sdl3_sys::properties::SDL_GetBooleanProperty( properties, sdl3_sys::gamepad::SDL_PROP_GAMEPAD_CAP_RUMBLE_BOOLEAN, @@ -904,13 +909,13 @@ pub fn init(ui: &mut ui::Ui) { if joystick.is_null() { println!("could not connect joystick: {}", joystick_id) } else { - ui.controllers[i].joystick = joystick; + ui.input.controllers[i].joystick = joystick; let properties = unsafe { sdl3_sys::joystick::SDL_GetJoystickProperties(joystick) }; if properties == 0 { println!("could not get joystick properties"); } - ui.controllers[i].rumble = unsafe { + ui.input.controllers[i].rumble = unsafe { sdl3_sys::properties::SDL_GetBooleanProperty( properties, sdl3_sys::joystick::SDL_PROP_JOYSTICK_CAP_RUMBLE_BOOLEAN, @@ -927,7 +932,7 @@ pub fn init(ui: &mut ui::Ui) { } pub fn close(ui: &mut ui::Ui) { - for controller in ui.controllers.iter_mut() { + for controller in ui.input.controllers.iter_mut() { if !controller.joystick.is_null() { unsafe { sdl3_sys::joystick::SDL_CloseJoystick(controller.joystick) } controller.joystick = std::ptr::null_mut(); diff --git a/src/ui/storage.rs b/src/ui/storage.rs index 77598d9..4cae812 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -134,7 +134,7 @@ pub fn get_game_name(rom: &[u8]) -> String { } pub fn init(ui: &mut ui::Ui, rom: &[u8]) { - ui.save_type = get_save_type(rom, &ui.game_id); + ui.storage.save_type = get_save_type(rom, &ui.game_id); let saves_path = ui.dirs.data_dir.join("saves"); @@ -148,67 +148,78 @@ pub fn init(ui: &mut ui::Ui, rom: &[u8]) { &game_name }; - ui.paths.eep_file_path.clone_from(&saves_path); - ui.paths + ui.storage.paths.eep_file_path.clone_from(&saves_path); + ui.storage + .paths .eep_file_path .push(prefix.to_owned() + "-" + &ui.game_hash + ".eep"); - ui.paths.sra_file_path.clone_from(&saves_path); - ui.paths + ui.storage.paths.sra_file_path.clone_from(&saves_path); + ui.storage + .paths .sra_file_path .push(prefix.to_owned() + "-" + &ui.game_hash + ".sra"); - ui.paths.fla_file_path.clone_from(&saves_path); - ui.paths + ui.storage.paths.fla_file_path.clone_from(&saves_path); + ui.storage + .paths .fla_file_path .push(prefix.to_owned() + "-" + &ui.game_hash + ".fla"); - ui.paths.pak_file_path.clone_from(&saves_path); - ui.paths + ui.storage.paths.pak_file_path.clone_from(&saves_path); + ui.storage + .paths .pak_file_path .push(prefix.to_owned() + "-" + &ui.game_hash + ".mpk"); - ui.paths.sdcard_file_path.clone_from(&saves_path); - ui.paths + ui.storage.paths.sdcard_file_path.clone_from(&saves_path); + ui.storage + .paths .sdcard_file_path .push(prefix.to_owned() + "-" + &ui.game_hash + ".img"); - ui.paths.romsave_file_path.clone_from(&saves_path); - ui.paths + ui.storage.paths.romsave_file_path.clone_from(&saves_path); + ui.storage + .paths .romsave_file_path .push(prefix.to_owned() + "-" + &ui.game_hash + ".romsave"); - ui.paths.savestate_file_path.clone_from(&states_path); - ui.paths + ui.storage + .paths + .savestate_file_path + .clone_from(&states_path); + ui.storage + .paths .savestate_file_path .push(prefix.to_owned() + "-" + &ui.game_hash + ".state"); } pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { if netplay.is_none() || netplay.as_ref().unwrap().player_number == 0 { - let eep = std::fs::read(&mut ui.paths.eep_file_path); + let eep = std::fs::read(&mut ui.storage.paths.eep_file_path); if eep.is_ok() { - ui.saves.eeprom.data = eep.unwrap(); + ui.storage.saves.eeprom.data = eep.unwrap(); } - let sra = std::fs::read(&mut ui.paths.sra_file_path); + let sra = std::fs::read(&mut ui.storage.paths.sra_file_path); if sra.is_ok() { - ui.saves.sram.data = sra.unwrap(); + ui.storage.saves.sram.data = sra.unwrap(); } - let fla = std::fs::read(&mut ui.paths.fla_file_path); + let fla = std::fs::read(&mut ui.storage.paths.fla_file_path); if fla.is_ok() { - ui.saves.flash.data = fla.unwrap(); + ui.storage.saves.flash.data = fla.unwrap(); } - let mempak = std::fs::read(&mut ui.paths.pak_file_path); + let mempak = std::fs::read(&mut ui.storage.paths.pak_file_path); if mempak.is_ok() { - ui.saves.mempak.data = mempak.unwrap(); + ui.storage.saves.mempak.data = mempak.unwrap(); } - let sdcard = std::fs::read(&mut ui.paths.sdcard_file_path); + let sdcard = std::fs::read(&mut ui.storage.paths.sdcard_file_path); if sdcard.is_ok() { - ui.saves.sdcard.data = sdcard.unwrap(); + ui.storage.saves.sdcard.data = sdcard.unwrap(); } - let romsave = std::fs::read(&mut ui.paths.romsave_file_path); + let romsave = std::fs::read(&mut ui.storage.paths.romsave_file_path); if romsave.is_ok() { - ui.saves.romsave.data = postcard::from_bytes(romsave.unwrap().as_ref()).unwrap(); + ui.storage.saves.romsave.data = + postcard::from_bytes(romsave.unwrap().as_ref()).unwrap(); } } @@ -217,31 +228,31 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { netplay::send_save( netplay.as_mut().unwrap(), "eep", - &ui.saves.eeprom.data, - ui.saves.eeprom.data.len(), + &ui.storage.saves.eeprom.data, + ui.storage.saves.eeprom.data.len(), ); netplay::send_save( netplay.as_mut().unwrap(), "sra", - &ui.saves.sram.data, - ui.saves.sram.data.len(), + &ui.storage.saves.sram.data, + ui.storage.saves.sram.data.len(), ); netplay::send_save( netplay.as_mut().unwrap(), "fla", - &ui.saves.flash.data, - ui.saves.flash.data.len(), + &ui.storage.saves.flash.data, + ui.storage.saves.flash.data.len(), ); netplay::send_save( netplay.as_mut().unwrap(), "mpk", - &ui.saves.mempak.data, - ui.saves.mempak.data.len(), + &ui.storage.saves.mempak.data, + ui.storage.saves.mempak.data.len(), ); let mut compressed_sd = Vec::new(); - if !ui.saves.sdcard.data.is_empty() { - compressed_sd = compress_file(&[(&ui.saves.sdcard.data, "save")]); + if !ui.storage.saves.sdcard.data.is_empty() { + compressed_sd = compress_file(&[(&ui.storage.saves.sdcard.data, "save")]); } netplay::send_save( netplay.as_mut().unwrap(), @@ -251,9 +262,9 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { ); let mut compressed_romsave = Vec::new(); - if !ui.saves.romsave.data.is_empty() { + if !ui.storage.saves.romsave.data.is_empty() { compressed_romsave = compress_file(&[( - &postcard::to_stdvec(&ui.saves.romsave.data).unwrap(), + &postcard::to_stdvec(&ui.storage.saves.romsave.data).unwrap(), "save", )]); } @@ -264,22 +275,38 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { compressed_romsave.len(), ); } else { - netplay::receive_save(netplay.as_mut().unwrap(), "eep", &mut ui.saves.eeprom.data); - netplay::receive_save(netplay.as_mut().unwrap(), "sra", &mut ui.saves.sram.data); - netplay::receive_save(netplay.as_mut().unwrap(), "fla", &mut ui.saves.flash.data); - netplay::receive_save(netplay.as_mut().unwrap(), "mpk", &mut ui.saves.mempak.data); + netplay::receive_save( + netplay.as_mut().unwrap(), + "eep", + &mut ui.storage.saves.eeprom.data, + ); + netplay::receive_save( + netplay.as_mut().unwrap(), + "sra", + &mut ui.storage.saves.sram.data, + ); + netplay::receive_save( + netplay.as_mut().unwrap(), + "fla", + &mut ui.storage.saves.flash.data, + ); + netplay::receive_save( + netplay.as_mut().unwrap(), + "mpk", + &mut ui.storage.saves.mempak.data, + ); let mut compressed_sd = Vec::new(); netplay::receive_save(netplay.as_mut().unwrap(), "img", &mut compressed_sd); if !compressed_sd.is_empty() { - ui.saves.sdcard.data = decompress_file(&compressed_sd, "save"); + ui.storage.saves.sdcard.data = decompress_file(&compressed_sd, "save"); } let mut compressed_romsave = Vec::new(); netplay::receive_save(netplay.as_mut().unwrap(), "rom", &mut compressed_romsave); if !compressed_romsave.is_empty() { let romsave_bytes = decompress_file(&compressed_romsave, "save"); - ui.saves.romsave.data = postcard::from_bytes(&romsave_bytes).unwrap(); + ui.storage.saves.romsave.data = postcard::from_bytes(&romsave_bytes).unwrap(); } } } @@ -314,16 +341,17 @@ pub fn compress_file(data: &[(&[u8], &str)]) -> Vec { } fn write_rom_save(ui: &ui::Ui) { - let data = postcard::to_stdvec(&ui.saves.romsave.data).unwrap(); - std::fs::write(ui.paths.romsave_file_path.clone(), data).unwrap(); + let data = postcard::to_stdvec(&ui.storage.saves.romsave.data).unwrap(); + std::fs::write(ui.storage.paths.romsave_file_path.clone(), data).unwrap(); } fn writeback_sdcard(device: &mut device::Device) { let length; let save_data: &[u8]; - if device.ui.saves.eeprom.written { + if device.ui.storage.saves.eeprom.written { if device .ui + .storage .save_type .contains(&ui::storage::SaveTypes::Eeprom4k) { @@ -331,47 +359,47 @@ fn writeback_sdcard(device: &mut device::Device) { } else { length = 4; } - save_data = device.ui.saves.eeprom.data.as_ref(); - } else if device.ui.saves.sram.written { - length = device.ui.saves.sram.data.len() / 512; - save_data = device.ui.saves.sram.data.as_ref(); - } else if device.ui.saves.flash.written { - length = device.ui.saves.flash.data.len() / 512; - save_data = device.ui.saves.flash.data.as_ref(); + save_data = device.ui.storage.saves.eeprom.data.as_ref(); + } else if device.ui.storage.saves.sram.written { + length = device.ui.storage.saves.sram.data.len() / 512; + save_data = device.ui.storage.saves.sram.data.as_ref(); + } else if device.ui.storage.saves.flash.written { + length = device.ui.storage.saves.flash.data.len() / 512; + save_data = device.ui.storage.saves.flash.data.as_ref(); } else { return; } for i in 0..length { let offset = device.cart.sc64.writeback_sector[i] as usize * 512; - device.ui.saves.sdcard.data[offset..offset + 512] + device.ui.storage.saves.sdcard.data[offset..offset + 512] .copy_from_slice(&save_data[i * 512..(i + 1) * 512]); } - device.ui.saves.sdcard.written = true; + device.ui.storage.saves.sdcard.written = true; } pub fn write_saves(device: &mut device::Device) { if device.netplay.is_none() || device.netplay.as_ref().unwrap().player_number == 0 { - if device.ui.saves.write_to_disk { - if device.ui.saves.eeprom.written { + if device.ui.storage.saves.write_to_disk { + if device.ui.storage.saves.eeprom.written { write_save(&device.ui, SaveTypes::Eeprom16k) } - if device.ui.saves.sram.written { + if device.ui.storage.saves.sram.written { write_save(&device.ui, SaveTypes::Sram) } - if device.ui.saves.flash.written { + if device.ui.storage.saves.flash.written { write_save(&device.ui, SaveTypes::Flash) } - if device.ui.saves.romsave.written { + if device.ui.storage.saves.romsave.written { write_save(&device.ui, SaveTypes::Romsave) } } else { writeback_sdcard(device) } - if device.ui.saves.mempak.written { + if device.ui.storage.saves.mempak.written { write_save(&device.ui, SaveTypes::Mempak) } - if device.ui.saves.sdcard.written { + if device.ui.storage.saves.sdcard.written { write_save(&device.ui, SaveTypes::Sdcard) } } @@ -382,24 +410,24 @@ fn write_save(ui: &ui::Ui, save_type: SaveTypes) { let data: &Vec; match save_type { SaveTypes::Eeprom4k | SaveTypes::Eeprom16k => { - path = ui.paths.eep_file_path.as_ref(); - data = ui.saves.eeprom.data.as_ref(); + path = ui.storage.paths.eep_file_path.as_ref(); + data = ui.storage.saves.eeprom.data.as_ref(); } SaveTypes::Sram => { - path = ui.paths.sra_file_path.as_ref(); - data = ui.saves.sram.data.as_ref(); + path = ui.storage.paths.sra_file_path.as_ref(); + data = ui.storage.saves.sram.data.as_ref(); } SaveTypes::Flash => { - path = ui.paths.fla_file_path.as_ref(); - data = ui.saves.flash.data.as_ref(); + path = ui.storage.paths.fla_file_path.as_ref(); + data = ui.storage.saves.flash.data.as_ref(); } SaveTypes::Mempak => { - path = ui.paths.pak_file_path.as_ref(); - data = ui.saves.mempak.data.as_ref(); + path = ui.storage.paths.pak_file_path.as_ref(); + data = ui.storage.saves.mempak.data.as_ref(); } SaveTypes::Sdcard => { - path = ui.paths.sdcard_file_path.as_ref(); - data = ui.saves.sdcard.data.as_ref(); + path = ui.storage.paths.sdcard_file_path.as_ref(); + data = ui.storage.saves.sdcard.data.as_ref(); } SaveTypes::Romsave => { write_rom_save(ui); diff --git a/src/ui/video.rs b/src/ui/video.rs index 36caa73..187aefc 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -11,7 +11,7 @@ pub fn init(device: &mut device::Device) { | sdl3_sys::video::SDL_WINDOW_RESIZABLE | sdl3_sys::video::SDL_WINDOW_INPUT_FOCUS; - if device.ui.fullscreen { + if device.ui.video.fullscreen { flags |= sdl3_sys::video::SDL_WINDOW_FULLSCREEN; } @@ -32,13 +32,13 @@ pub fn init(device: &mut device::Device) { }; window_height = 480; } - device.ui.window = unsafe { + device.ui.video.window = unsafe { sdl3_sys::video::SDL_CreateWindow(title.as_ptr(), window_width, window_height, flags) }; - if device.ui.window.is_null() { + if device.ui.video.window.is_null() { panic!("Could not create window"); } - if !unsafe { sdl3_sys::video::SDL_ShowWindow(device.ui.window) } { + if !unsafe { sdl3_sys::video::SDL_ShowWindow(device.ui.video.window) } { panic!("Could not show window"); } unsafe { sdl3_sys::everything::SDL_HideCursor() }; @@ -57,11 +57,11 @@ pub fn init(device: &mut device::Device) { unsafe { rdp_init( - device.ui.window as *mut std::ffi::c_void, + device.ui.video.window as *mut std::ffi::c_void, gfx_info, device.ui.config.video.upscale, device.ui.config.video.integer_scaling, - device.ui.fullscreen, + device.ui.video.fullscreen, ) } } @@ -69,7 +69,7 @@ pub fn init(device: &mut device::Device) { pub fn close(ui: &ui::Ui) { unsafe { rdp_close(); - sdl3_sys::video::SDL_DestroyWindow(ui.window); + sdl3_sys::video::SDL_DestroyWindow(ui.video.window); } } From 67a8bb5e4c3d8d09761147c95434007b4ebf95f7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 9 Mar 2025 22:20:16 +0100 Subject: [PATCH 0382/1117] show VRU dialog in main window (#311) --- src/ui/gui.rs | 74 +++++++++++++++++++++++---------------------------- 1 file changed, 33 insertions(+), 41 deletions(-) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 43d8bf7..5a05e39 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -222,44 +222,35 @@ fn configure_profile(app: &mut GopherEguiApp, ctx: &egui::Context) { } fn show_vru_dialog(app: &mut GopherEguiApp, ctx: &egui::Context) { - ctx.show_viewport_immediate( - egui::ViewportId::from_hash_of("vru_dialog"), - egui::ViewportBuilder::default() - .with_title("What would you like to say?") - .with_always_on_top(), - |ctx, class| { - assert!( - class == egui::ViewportClass::Immediate, - "This egui backend doesn't support multiple viewports" - ); - egui::CentralPanel::default().show(ctx, |ui| { - egui::Grid::new("vru_words").show(ui, |ui| { - for (i, v) in app.vru_word_list.iter().enumerate() { - if i % 5 == 0 { - ui.end_row(); - } - if ui.button((*v).to_string()).clicked() { - app.vru_word_notifier - .as_ref() - .unwrap() - .try_send(v.clone()) - .unwrap(); - app.show_vru_dialog = false; - } - } - }); - }); - - if ctx.input(|i| i.viewport().close_requested()) { - app.vru_word_notifier - .as_ref() - .unwrap() - .try_send(String::from("")) - .unwrap(); - app.show_vru_dialog = false; + egui::CentralPanel::default().show(ctx, |ui| { + ui.label("What would you like to say?"); + egui::Grid::new("vru_words").show(ui, |ui| { + for (i, v) in app.vru_word_list.iter().enumerate() { + if i % 5 == 0 { + ui.end_row(); + } + if ui.button((*v).to_string()).clicked() { + app.vru_word_notifier + .as_ref() + .unwrap() + .try_send(v.clone()) + .unwrap(); + app.show_vru_dialog = false; + } } - }, - ); + }); + + ui.add_space(32.0); + + if ui.button("Close without saying anything").clicked() { + app.vru_word_notifier + .as_ref() + .unwrap() + .try_send(String::from("")) + .unwrap(); + app.show_vru_dialog = false; + }; + }); } fn get_latest_version(app: &mut GopherEguiApp, ctx: &egui::Context) { @@ -475,6 +466,11 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context, enable_overclock: impl eframe::App for GopherEguiApp { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { + if self.show_vru_dialog { + show_vru_dialog(self, ctx); + return; + } + if self.netplay.create { gui_netplay::netplay_create(self, ctx); } @@ -654,10 +650,6 @@ impl eframe::App for GopherEguiApp { } } - if self.show_vru_dialog { - show_vru_dialog(self, ctx); - } - get_latest_version(self, ctx); } } From e93c27579585393b183fbc7e9f9d3911b60cc285 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 10 Mar 2025 16:52:25 +0100 Subject: [PATCH 0383/1117] Add option for CRT shader (#314) * add CRT shader * more * more * update type * more * more * more * more --- data/shader/crt-aperture.frag | 135 ++++++++++ data/shader/frag.spv | 453 +++++++++++++++++++++++++++++++++ data/shader/output.sh | 3 + parallel-rdp/interface.cpp | 84 +++++-- parallel-rdp/interface.hpp | 8 +- parallel-rdp/spirv.hpp | 2 +- parallel-rdp/spirv_crt.hpp | 456 ++++++++++++++++++++++++++++++++++ src/ui/config.rs | 2 + src/ui/gui.rs | 14 +- src/ui/video.rs | 20 +- 10 files changed, 1136 insertions(+), 41 deletions(-) create mode 100644 data/shader/crt-aperture.frag create mode 100644 data/shader/frag.spv create mode 100755 data/shader/output.sh create mode 100644 parallel-rdp/spirv_crt.hpp diff --git a/data/shader/crt-aperture.frag b/data/shader/crt-aperture.frag new file mode 100644 index 0000000..5e1571b --- /dev/null +++ b/data/shader/crt-aperture.frag @@ -0,0 +1,135 @@ +#version 450 + +/* + CRT Shader by EasyMode + License: GPL +*/ + +layout(push_constant) uniform Push +{ + vec4 SourceSize; + vec4 OutputSize; +} params; + +#define SHARPNESS_IMAGE 1.0 +#define SHARPNESS_EDGES 3.0 +#define GLOW_WIDTH 0.5 +#define GLOW_HEIGHT 0.5 +#define GLOW_HALATION 0.1 +#define GLOW_DIFFUSION 0.05 +#define MASK_COLORS 2.0 +#define MASK_STRENGTH 0.3 +#define MASK_SIZE 1.0 +#define SCANLINE_SIZE_MIN 0.5 +#define SCANLINE_SIZE_MAX 1.5 +#define SCANLINE_SHAPE 2.5 +#define SCANLINE_OFFSET 1.0 +#define GAMMA_INPUT 2.4 +#define GAMMA_OUTPUT 2.4 +#define BRIGHTNESS 1.5 + +layout(std140, set = 0, binding = 0) uniform UBO +{ + mat4 MVP; +} global; + +#define FIX(c) max(abs(c), 1e-5) +#define PI 3.141592653589 +#define TEX2D(c) pow(texture(tex, c).rgb, vec3(GAMMA_INPUT)) +#define saturate(c) clamp(c, 0.0, 1.0) + +mat3x3 get_color_matrix(sampler2D tex, vec2 co, vec2 dx) +{ + return mat3x3(TEX2D(co - dx), TEX2D(co), TEX2D(co + dx)); +} + +vec3 blur(mat3 m, float dist, float rad) +{ + vec3 x = vec3(dist - 1.0, dist, dist + 1.0) / rad; + vec3 w = exp2(x * x * -1.0); + + return (m[0] * w.x + m[1] * w.y + m[2] * w.z) / (w.x + w.y + w.z); +} + +vec3 filter_gaussian(sampler2D tex, vec2 co, vec2 tex_size) +{ + vec2 dx = vec2(1.0 / tex_size.x, 0.0); + vec2 dy = vec2(0.0, 1.0 / tex_size.y); + vec2 pix_co = co * tex_size; + vec2 tex_co = (floor(pix_co) + 0.5) / tex_size; + vec2 dist = (fract(pix_co) - 0.5) * -1.0; + + mat3x3 line0 = get_color_matrix(tex, tex_co - dy, dx); + mat3x3 line1 = get_color_matrix(tex, tex_co, dx); + mat3x3 line2 = get_color_matrix(tex, tex_co + dy, dx); + mat3x3 column = mat3x3(blur(line0, dist.x, GLOW_WIDTH), + blur(line1, dist.x, GLOW_WIDTH), + blur(line2, dist.x, GLOW_WIDTH)); + + return blur(column, dist.y, GLOW_HEIGHT); +} + +vec3 filter_lanczos(sampler2D tex, vec2 co, vec2 tex_size, float sharp) +{ + tex_size.x *= sharp; + + vec2 dx = vec2(1.0 / tex_size.x, 0.0); + vec2 pix_co = co * tex_size - vec2(0.5, 0.0); + vec2 tex_co = (floor(pix_co) + vec2(0.5, 0.001)) / tex_size; + vec2 dist = fract(pix_co); + vec4 coef = PI * vec4(dist.x + 1.0, dist.x, dist.x - 1.0, dist.x - 2.0); + + coef = FIX(coef); + coef = 2.0 * sin(coef) * sin(coef / 2.0) / (coef * coef); + coef /= dot(coef, vec4(1.0)); + + vec4 col1 = vec4(TEX2D(tex_co), 1.0); + vec4 col2 = vec4(TEX2D(tex_co + dx), 1.0); + + return (mat4x4(col1, col1, col2, col2) * coef).rgb; +} + +vec3 get_scanline_weight(float x, vec3 col) +{ + vec3 beam = mix(vec3(SCANLINE_SIZE_MIN), vec3(SCANLINE_SIZE_MAX), pow(col, vec3(1.0 / SCANLINE_SHAPE))); + vec3 x_mul = 2.0 / beam; + vec3 x_offset = x_mul * 0.5; + + return smoothstep(0.0, 1.0, 1.0 - abs(x * x_mul - x_offset)) * x_offset; +} + +vec3 get_mask_weight(float x) +{ + float i = mod(floor(x * params.OutputSize.x * params.SourceSize.x / (params.SourceSize.x * MASK_SIZE)), MASK_COLORS); + + if (i == 0.0) return mix(vec3(1.0, 0.0, 1.0), vec3(1.0, 0.0, 0.0), MASK_COLORS - 2.0); + else if (i == 1.0) return vec3(0.0, 1.0, 0.0); + else return vec3(0.0, 0.0, 1.0); +} + +#pragma stage fragment +layout(location = 0) in vec2 vTexCoord; +layout(location = 0) out vec4 FragColor; +layout(set = 0, binding = 0) uniform sampler2D Source; + +void main() +{ + float scale = floor(params.OutputSize.y * params.SourceSize.w); + float offset = 1.0 / scale * 0.5; + + if (bool(mod(scale, 2.0))) offset = 0.0; + + vec2 co = (vTexCoord * params.SourceSize.xy - vec2(0.0, offset * SCANLINE_OFFSET)) * params.SourceSize.zw; + vec3 col_glow = filter_gaussian(Source, co, params.SourceSize.xy); + vec3 col_soft = filter_lanczos(Source, co, params.SourceSize.xy, SHARPNESS_IMAGE); + vec3 col_sharp = filter_lanczos(Source, co, params.SourceSize.xy, SHARPNESS_EDGES); + vec3 col = sqrt(col_sharp * col_soft); + + col *= get_scanline_weight(fract(co.y * params.SourceSize.y), col_soft); + col_glow = saturate(col_glow - col); + col += col_glow * col_glow * GLOW_HALATION; + col = mix(col, col * get_mask_weight(vTexCoord.x) * MASK_COLORS, MASK_STRENGTH); + col += col_glow * GLOW_DIFFUSION; + col = pow(col * BRIGHTNESS, vec3(1.0 / GAMMA_OUTPUT)); + FragColor = vec4(col, 1.0); +} diff --git a/data/shader/frag.spv b/data/shader/frag.spv new file mode 100644 index 0000000..681734c --- /dev/null +++ b/data/shader/frag.spv @@ -0,0 +1,453 @@ +{0x07230203,0x00010300,0x000d000b,0x000004fd, +0x00000000,0x00020011,0x00000001,0x0006000b, +0x00000001,0x4c534c47,0x6474732e,0x3035342e, +0x00000000,0x0003000e,0x00000000,0x00000001, +0x0007000f,0x00000004,0x00000004,0x6e69616d, +0x00000000,0x000001ba,0x0000021a,0x00030010, +0x00000004,0x00000007,0x00030047,0x00000185, +0x00000002,0x00050048,0x00000185,0x00000000, +0x00000023,0x00000000,0x00050048,0x00000185, +0x00000001,0x00000023,0x00000010,0x00040047, +0x000001ba,0x0000001e,0x00000000,0x00040047, +0x000001ca,0x00000021,0x00000000,0x00040047, +0x000001ca,0x00000022,0x00000000,0x00040047, +0x0000021a,0x0000001e,0x00000000,0x00020013, +0x00000002,0x00030021,0x00000003,0x00000002, +0x00030016,0x00000006,0x00000020,0x00090019, +0x00000007,0x00000006,0x00000001,0x00000000, +0x00000000,0x00000000,0x00000001,0x00000000, +0x0003001b,0x00000008,0x00000007,0x00040020, +0x00000009,0x00000000,0x00000008,0x00040017, +0x0000000a,0x00000006,0x00000002,0x00040017, +0x0000000c,0x00000006,0x00000003,0x00040017, +0x00000037,0x00000006,0x00000004,0x0004002b, +0x00000006,0x0000003a,0x4019999a,0x0006002c, +0x0000000c,0x0000003b,0x0000003a,0x0000003a, +0x0000003a,0x0004002b,0x00000006,0x00000049, +0x3f800000,0x0004002b,0x00000006,0x0000004a, +0x00000000,0x0004002b,0x00000006,0x00000068, +0xbf800000,0x00040015,0x0000006b,0x00000020, +0x00000001,0x0004002b,0x0000006b,0x0000006c, +0x00000000,0x00040015,0x0000006f,0x00000020, +0x00000000,0x0004002b,0x0000006f,0x00000070, +0x00000000,0x0004002b,0x0000006b,0x00000074, +0x00000001,0x0004002b,0x0000006f,0x00000077, +0x00000001,0x0004002b,0x00000006,0x000000a1, +0x3f000000,0x0005002c,0x0000000a,0x000000fc, +0x000000a1,0x0000004a,0x0004002b,0x00000006, +0x00000101,0x3a83126f,0x0005002c,0x0000000a, +0x00000102,0x000000a1,0x00000101,0x0004002b, +0x00000006,0x0000010b,0x40490fdb,0x0004002b, +0x00000006,0x00000116,0x40000000,0x0004002b, +0x00000006,0x0000011c,0x3727c5ac,0x0007002c, +0x00000037,0x0000012c,0x00000049,0x00000049, +0x00000049,0x00000049,0x00040018,0x00000149, +0x00000037,0x00000004,0x0006002c,0x0000000c, +0x00000165,0x000000a1,0x000000a1,0x000000a1, +0x0004002b,0x00000006,0x00000166,0x3fc00000, +0x0006002c,0x0000000c,0x00000167,0x00000166, +0x00000166,0x00000166,0x0004002b,0x00000006, +0x00000169,0x3ecccccd,0x0006002c,0x0000000c, +0x0000016a,0x00000169,0x00000169,0x00000169, +0x0004001e,0x00000185,0x00000037,0x00000037, +0x00040020,0x00000186,0x00000009,0x00000185, +0x0004003b,0x00000186,0x00000187,0x00000009, +0x00040020,0x00000188,0x00000009,0x00000006, +0x00020014,0x00000196,0x0006002c,0x0000000c, +0x0000019a,0x00000049,0x0000004a,0x00000049, +0x0006002c,0x0000000c,0x000001a1,0x0000004a, +0x00000049,0x0000004a,0x0006002c,0x0000000c, +0x000001a4,0x0000004a,0x0000004a,0x00000049, +0x0004002b,0x0000006f,0x000001aa,0x00000003, +0x00040020,0x000001b9,0x00000001,0x0000000a, +0x0004003b,0x000001b9,0x000001ba,0x00000001, +0x00040020,0x000001bc,0x00000009,0x00000037, +0x0004003b,0x00000009,0x000001ca,0x00000000, +0x0004002b,0x00000006,0x000001dc,0x40400000, +0x0004002b,0x00000006,0x000001ff,0x3dcccccd, +0x00040020,0x00000206,0x00000001,0x00000006, +0x0004002b,0x00000006,0x0000020c,0x3e99999a, +0x0004002b,0x00000006,0x00000210,0x3d4ccccd, +0x0004002b,0x00000006,0x00000216,0x3ed55555, +0x0006002c,0x0000000c,0x00000217,0x00000216, +0x00000216,0x00000216,0x00040020,0x00000219, +0x00000003,0x00000037,0x0004003b,0x00000219, +0x0000021a,0x00000003,0x0005002c,0x0000000a, +0x000004f3,0x000000a1,0x000000a1,0x0007002c, +0x00000037,0x000004f4,0x0000011c,0x0000011c, +0x0000011c,0x0000011c,0x0006002c,0x0000000c, +0x000004f6,0x00000116,0x00000116,0x00000116, +0x0006002c,0x0000000c,0x000004f7,0x00000049, +0x00000049,0x00000049,0x0006002c,0x0000000c, +0x000004f8,0x0000004a,0x0000004a,0x0000004a, +0x0006002c,0x0000000c,0x000004f9,0x0000020c, +0x0000020c,0x0000020c,0x0007002c,0x00000037, +0x000004fa,0x000000a1,0x000000a1,0x000000a1, +0x000000a1,0x0004002b,0x00000006,0x000004fb, +0x3eaaaaab,0x00050036,0x00000002,0x00000004, +0x00000000,0x00000003,0x000200f8,0x00000005, +0x00060041,0x00000188,0x000001a8,0x00000187, +0x00000074,0x00000077,0x0004003d,0x00000006, +0x000001a9,0x000001a8,0x00060041,0x00000188, +0x000001ab,0x00000187,0x0000006c,0x000001aa, +0x0004003d,0x00000006,0x000001ac,0x000001ab, +0x00050085,0x00000006,0x000001ad,0x000001a9, +0x000001ac,0x0006000c,0x00000006,0x000001ae, +0x00000001,0x00000008,0x000001ad,0x00050088, +0x00000006,0x000001b2,0x000000a1,0x000001ae, +0x0005008d,0x00000006,0x000001b4,0x000001ae, +0x00000116,0x000500b7,0x00000196,0x000001b5, +0x000001b4,0x0000004a,0x000600a9,0x00000006, +0x000004fc,0x000001b5,0x0000004a,0x000001b2, +0x0004003d,0x0000000a,0x000001bb,0x000001ba, +0x00050041,0x000001bc,0x000001bd,0x00000187, +0x0000006c,0x0004003d,0x00000037,0x000001be, +0x000001bd,0x0007004f,0x0000000a,0x000001bf, +0x000001be,0x000001be,0x00000000,0x00000001, +0x00050085,0x0000000a,0x000001c0,0x000001bb, +0x000001bf,0x00050050,0x0000000a,0x000001c3, +0x0000004a,0x000004fc,0x00050083,0x0000000a, +0x000001c4,0x000001c0,0x000001c3,0x0007004f, +0x0000000a,0x000001c7,0x000001be,0x000001be, +0x00000002,0x00000003,0x00050085,0x0000000a, +0x000001c8,0x000001c4,0x000001c7,0x00050051, +0x00000006,0x00000249,0x000001be,0x00000000, +0x00050088,0x00000006,0x0000024a,0x00000049, +0x00000249,0x00050050,0x0000000a,0x0000024b, +0x0000024a,0x0000004a,0x00050051,0x00000006, +0x0000024d,0x000001be,0x00000001,0x00050088, +0x00000006,0x0000024e,0x00000049,0x0000024d, +0x00050050,0x0000000a,0x0000024f,0x0000004a, +0x0000024e,0x00050085,0x0000000a,0x00000252, +0x000001c8,0x000001bf,0x0006000c,0x0000000a, +0x00000254,0x00000001,0x00000008,0x00000252, +0x00050081,0x0000000a,0x00000256,0x00000254, +0x000004f3,0x00050088,0x0000000a,0x00000258, +0x00000256,0x000001bf,0x0006000c,0x0000000a, +0x0000025a,0x00000001,0x0000000a,0x00000252, +0x00050083,0x0000000a,0x0000025c,0x0000025a, +0x000004f3,0x0005008e,0x0000000a,0x0000025d, +0x0000025c,0x00000068,0x00050083,0x0000000a, +0x00000260,0x00000258,0x0000024f,0x0004003d, +0x00000008,0x0000028a,0x000001ca,0x00050083, +0x0000000a,0x0000028d,0x00000260,0x0000024b, +0x00050057,0x00000037,0x0000028e,0x0000028a, +0x0000028d,0x0008004f,0x0000000c,0x0000028f, +0x0000028e,0x0000028e,0x00000000,0x00000001, +0x00000002,0x0007000c,0x0000000c,0x00000290, +0x00000001,0x0000001a,0x0000028f,0x0000003b, +0x00050057,0x00000037,0x00000293,0x0000028a, +0x00000260,0x0008004f,0x0000000c,0x00000294, +0x00000293,0x00000293,0x00000000,0x00000001, +0x00000002,0x0007000c,0x0000000c,0x00000295, +0x00000001,0x0000001a,0x00000294,0x0000003b, +0x00050081,0x0000000a,0x00000299,0x00000260, +0x0000024b,0x00050057,0x00000037,0x0000029a, +0x0000028a,0x00000299,0x0008004f,0x0000000c, +0x0000029b,0x0000029a,0x0000029a,0x00000000, +0x00000001,0x00000002,0x0007000c,0x0000000c, +0x0000029c,0x00000001,0x0000001a,0x0000029b, +0x0000003b,0x00050083,0x0000000a,0x000002af, +0x00000258,0x0000024b,0x00050057,0x00000037, +0x000002b0,0x0000028a,0x000002af,0x0008004f, +0x0000000c,0x000002b1,0x000002b0,0x000002b0, +0x00000000,0x00000001,0x00000002,0x0007000c, +0x0000000c,0x000002b2,0x00000001,0x0000001a, +0x000002b1,0x0000003b,0x00050057,0x00000037, +0x000002b5,0x0000028a,0x00000258,0x0008004f, +0x0000000c,0x000002b6,0x000002b5,0x000002b5, +0x00000000,0x00000001,0x00000002,0x0007000c, +0x0000000c,0x000002b7,0x00000001,0x0000001a, +0x000002b6,0x0000003b,0x00050081,0x0000000a, +0x000002bb,0x00000258,0x0000024b,0x00050057, +0x00000037,0x000002bc,0x0000028a,0x000002bb, +0x0008004f,0x0000000c,0x000002bd,0x000002bc, +0x000002bc,0x00000000,0x00000001,0x00000002, +0x0007000c,0x0000000c,0x000002be,0x00000001, +0x0000001a,0x000002bd,0x0000003b,0x00050081, +0x0000000a,0x00000268,0x00000258,0x0000024f, +0x00050083,0x0000000a,0x000002d1,0x00000268, +0x0000024b,0x00050057,0x00000037,0x000002d2, +0x0000028a,0x000002d1,0x0008004f,0x0000000c, +0x000002d3,0x000002d2,0x000002d2,0x00000000, +0x00000001,0x00000002,0x0007000c,0x0000000c, +0x000002d4,0x00000001,0x0000001a,0x000002d3, +0x0000003b,0x00050057,0x00000037,0x000002d7, +0x0000028a,0x00000268,0x0008004f,0x0000000c, +0x000002d8,0x000002d7,0x000002d7,0x00000000, +0x00000001,0x00000002,0x0007000c,0x0000000c, +0x000002d9,0x00000001,0x0000001a,0x000002d8, +0x0000003b,0x00050081,0x0000000a,0x000002dd, +0x00000268,0x0000024b,0x00050057,0x00000037, +0x000002de,0x0000028a,0x000002dd,0x0008004f, +0x0000000c,0x000002df,0x000002de,0x000002de, +0x00000000,0x00000001,0x00000002,0x0007000c, +0x0000000c,0x000002e0,0x00000001,0x0000001a, +0x000002df,0x0000003b,0x00050051,0x00000006, +0x0000026d,0x0000025d,0x00000000,0x00050083, +0x00000006,0x000002f3,0x0000026d,0x00000049, +0x00050081,0x00000006,0x000002f6,0x0000026d, +0x00000049,0x00060050,0x0000000c,0x000002f7, +0x000002f3,0x0000026d,0x000002f6,0x00050085, +0x0000000c,0x000002fa,0x000002f7,0x000004f6, +0x00050085,0x0000000c,0x000002fd,0x000002fa, +0x000002fa,0x0005008e,0x0000000c,0x000002fe, +0x000002fd,0x00000068,0x0006000c,0x0000000c, +0x000002ff,0x00000001,0x0000001d,0x000002fe, +0x00050051,0x00000006,0x00000303,0x000002ff, +0x00000000,0x0005008e,0x0000000c,0x00000304, +0x00000290,0x00000303,0x00050051,0x00000006, +0x00000308,0x000002ff,0x00000001,0x0005008e, +0x0000000c,0x00000309,0x00000295,0x00000308, +0x00050081,0x0000000c,0x0000030a,0x00000304, +0x00000309,0x00050051,0x00000006,0x0000030e, +0x000002ff,0x00000002,0x0005008e,0x0000000c, +0x0000030f,0x0000029c,0x0000030e,0x00050081, +0x0000000c,0x00000310,0x0000030a,0x0000030f, +0x00050081,0x00000006,0x00000315,0x00000303, +0x00000308,0x00050081,0x00000006,0x00000318, +0x00000315,0x0000030e,0x00060050,0x0000000c, +0x00000319,0x00000318,0x00000318,0x00000318, +0x00050088,0x0000000c,0x0000031a,0x00000310, +0x00000319,0x0005008e,0x0000000c,0x00000331, +0x000002b2,0x00000303,0x0005008e,0x0000000c, +0x00000336,0x000002b7,0x00000308,0x00050081, +0x0000000c,0x00000337,0x00000331,0x00000336, +0x0005008e,0x0000000c,0x0000033c,0x000002be, +0x0000030e,0x00050081,0x0000000c,0x0000033d, +0x00000337,0x0000033c,0x00050088,0x0000000c, +0x00000347,0x0000033d,0x00000319,0x0005008e, +0x0000000c,0x0000035e,0x000002d4,0x00000303, +0x0005008e,0x0000000c,0x00000363,0x000002d9, +0x00000308,0x00050081,0x0000000c,0x00000364, +0x0000035e,0x00000363,0x0005008e,0x0000000c, +0x00000369,0x000002e0,0x0000030e,0x00050081, +0x0000000c,0x0000036a,0x00000364,0x00000369, +0x00050088,0x0000000c,0x00000374,0x0000036a, +0x00000319,0x00050051,0x00000006,0x00000286, +0x0000025d,0x00000001,0x00050083,0x00000006, +0x0000037a,0x00000286,0x00000049,0x00050081, +0x00000006,0x0000037d,0x00000286,0x00000049, +0x00060050,0x0000000c,0x0000037e,0x0000037a, +0x00000286,0x0000037d,0x00050085,0x0000000c, +0x00000381,0x0000037e,0x000004f6,0x00050085, +0x0000000c,0x00000384,0x00000381,0x00000381, +0x0005008e,0x0000000c,0x00000385,0x00000384, +0x00000068,0x0006000c,0x0000000c,0x00000386, +0x00000001,0x0000001d,0x00000385,0x00050051, +0x00000006,0x0000038a,0x00000386,0x00000000, +0x0005008e,0x0000000c,0x0000038b,0x0000031a, +0x0000038a,0x00050051,0x00000006,0x0000038f, +0x00000386,0x00000001,0x0005008e,0x0000000c, +0x00000390,0x00000347,0x0000038f,0x00050081, +0x0000000c,0x00000391,0x0000038b,0x00000390, +0x00050051,0x00000006,0x00000395,0x00000386, +0x00000002,0x0005008e,0x0000000c,0x00000396, +0x00000374,0x00000395,0x00050081,0x0000000c, +0x00000397,0x00000391,0x00000396,0x00050081, +0x00000006,0x0000039c,0x0000038a,0x0000038f, +0x00050081,0x00000006,0x0000039f,0x0000039c, +0x00000395,0x00060050,0x0000000c,0x000003a0, +0x0000039f,0x0000039f,0x0000039f,0x00050088, +0x0000000c,0x000003a1,0x00000397,0x000003a0, +0x00060052,0x0000000a,0x000004e1,0x00000249, +0x000001bf,0x00000000,0x00050085,0x0000000a, +0x000003b6,0x000001c8,0x000004e1,0x00050083, +0x0000000a,0x000003b7,0x000003b6,0x000000fc, +0x0006000c,0x0000000a,0x000003b9,0x00000001, +0x00000008,0x000003b7,0x00050081,0x0000000a, +0x000003ba,0x000003b9,0x00000102,0x00050088, +0x0000000a,0x000003bc,0x000003ba,0x000004e1, +0x0006000c,0x0000000a,0x000003be,0x00000001, +0x0000000a,0x000003b7,0x00050051,0x00000006, +0x000003c0,0x000003be,0x00000000,0x00050081, +0x00000006,0x000003c1,0x000003c0,0x00000049, +0x00050083,0x00000006,0x000003c6,0x000003c0, +0x00000049,0x00050083,0x00000006,0x000003c9, +0x000003c0,0x00000116,0x00070050,0x00000037, +0x000003ca,0x000003c1,0x000003c0,0x000003c6, +0x000003c9,0x0005008e,0x00000037,0x000003cb, +0x000003ca,0x0000010b,0x0006000c,0x00000037, +0x000003cd,0x00000001,0x00000004,0x000003cb, +0x0007000c,0x00000037,0x000003cf,0x00000001, +0x00000028,0x000003cd,0x000004f4,0x0006000c, +0x00000037,0x000003d1,0x00000001,0x0000000d, +0x000003cf,0x0005008e,0x00000037,0x000003d2, +0x000003d1,0x00000116,0x00050085,0x00000037, +0x000003d5,0x000003cf,0x000004fa,0x0006000c, +0x00000037,0x000003d6,0x00000001,0x0000000d, +0x000003d5,0x00050085,0x00000037,0x000003d7, +0x000003d2,0x000003d6,0x00050085,0x00000037, +0x000003da,0x000003cf,0x000003cf,0x00050088, +0x00000037,0x000003db,0x000003d7,0x000003da, +0x00050094,0x00000006,0x000003dd,0x000003db, +0x0000012c,0x00070050,0x00000037,0x000003df, +0x000003dd,0x000003dd,0x000003dd,0x000003dd, +0x00050088,0x00000037,0x000003e0,0x000003db, +0x000003df,0x00050057,0x00000037,0x000003e3, +0x0000028a,0x000003bc,0x0008004f,0x0000000c, +0x000003e4,0x000003e3,0x000003e3,0x00000000, +0x00000001,0x00000002,0x0007000c,0x0000000c, +0x000003e5,0x00000001,0x0000001a,0x000003e4, +0x0000003b,0x00050051,0x00000006,0x000003e6, +0x000003e5,0x00000000,0x00050051,0x00000006, +0x000003e7,0x000003e5,0x00000001,0x00050051, +0x00000006,0x000003e8,0x000003e5,0x00000002, +0x00050081,0x0000000a,0x000003ed,0x000003bc, +0x0000024b,0x00050057,0x00000037,0x000003ee, +0x0000028a,0x000003ed,0x0008004f,0x0000000c, +0x000003ef,0x000003ee,0x000003ee,0x00000000, +0x00000001,0x00000002,0x0007000c,0x0000000c, +0x000003f0,0x00000001,0x0000001a,0x000003ef, +0x0000003b,0x00050051,0x00000006,0x000003f1, +0x000003f0,0x00000000,0x00050051,0x00000006, +0x000003f2,0x000003f0,0x00000001,0x00050051, +0x00000006,0x000003f3,0x000003f0,0x00000002, +0x00070050,0x00000037,0x00000407,0x000003e6, +0x000003e7,0x000003e8,0x00000049,0x00070050, +0x00000037,0x00000409,0x000003f1,0x000003f2, +0x000003f3,0x00000049,0x00070050,0x00000149, +0x0000040b,0x00000407,0x00000407,0x00000409, +0x00000409,0x00050091,0x00000037,0x0000040d, +0x0000040b,0x000003e0,0x0008004f,0x0000000c, +0x0000040e,0x0000040d,0x0000040d,0x00000000, +0x00000001,0x00000002,0x00050085,0x00000006, +0x0000041b,0x00000249,0x000001dc,0x00060052, +0x0000000a,0x000004e9,0x0000041b,0x000001bf, +0x00000000,0x00050088,0x00000006,0x0000041f, +0x000004fb,0x00000249,0x00050050,0x0000000a, +0x00000420,0x0000041f,0x0000004a,0x00050085, +0x0000000a,0x00000423,0x000001c8,0x000004e9, +0x00050083,0x0000000a,0x00000424,0x00000423, +0x000000fc,0x0006000c,0x0000000a,0x00000426, +0x00000001,0x00000008,0x00000424,0x00050081, +0x0000000a,0x00000427,0x00000426,0x00000102, +0x00050088,0x0000000a,0x00000429,0x00000427, +0x000004e9,0x0006000c,0x0000000a,0x0000042b, +0x00000001,0x0000000a,0x00000424,0x00050051, +0x00000006,0x0000042d,0x0000042b,0x00000000, +0x00050081,0x00000006,0x0000042e,0x0000042d, +0x00000049,0x00050083,0x00000006,0x00000433, +0x0000042d,0x00000049,0x00050083,0x00000006, +0x00000436,0x0000042d,0x00000116,0x00070050, +0x00000037,0x00000437,0x0000042e,0x0000042d, +0x00000433,0x00000436,0x0005008e,0x00000037, +0x00000438,0x00000437,0x0000010b,0x0006000c, +0x00000037,0x0000043a,0x00000001,0x00000004, +0x00000438,0x0007000c,0x00000037,0x0000043c, +0x00000001,0x00000028,0x0000043a,0x000004f4, +0x0006000c,0x00000037,0x0000043e,0x00000001, +0x0000000d,0x0000043c,0x0005008e,0x00000037, +0x0000043f,0x0000043e,0x00000116,0x00050085, +0x00000037,0x00000442,0x0000043c,0x000004fa, +0x0006000c,0x00000037,0x00000443,0x00000001, +0x0000000d,0x00000442,0x00050085,0x00000037, +0x00000444,0x0000043f,0x00000443,0x00050085, +0x00000037,0x00000447,0x0000043c,0x0000043c, +0x00050088,0x00000037,0x00000448,0x00000444, +0x00000447,0x00050094,0x00000006,0x0000044a, +0x00000448,0x0000012c,0x00070050,0x00000037, +0x0000044c,0x0000044a,0x0000044a,0x0000044a, +0x0000044a,0x00050088,0x00000037,0x0000044d, +0x00000448,0x0000044c,0x00050057,0x00000037, +0x00000450,0x0000028a,0x00000429,0x0008004f, +0x0000000c,0x00000451,0x00000450,0x00000450, +0x00000000,0x00000001,0x00000002,0x0007000c, +0x0000000c,0x00000452,0x00000001,0x0000001a, +0x00000451,0x0000003b,0x00050051,0x00000006, +0x00000453,0x00000452,0x00000000,0x00050051, +0x00000006,0x00000454,0x00000452,0x00000001, +0x00050051,0x00000006,0x00000455,0x00000452, +0x00000002,0x00050081,0x0000000a,0x0000045a, +0x00000429,0x00000420,0x00050057,0x00000037, +0x0000045b,0x0000028a,0x0000045a,0x0008004f, +0x0000000c,0x0000045c,0x0000045b,0x0000045b, +0x00000000,0x00000001,0x00000002,0x0007000c, +0x0000000c,0x0000045d,0x00000001,0x0000001a, +0x0000045c,0x0000003b,0x00050051,0x00000006, +0x0000045e,0x0000045d,0x00000000,0x00050051, +0x00000006,0x0000045f,0x0000045d,0x00000001, +0x00050051,0x00000006,0x00000460,0x0000045d, +0x00000002,0x00070050,0x00000037,0x00000474, +0x00000453,0x00000454,0x00000455,0x00000049, +0x00070050,0x00000037,0x00000476,0x0000045e, +0x0000045f,0x00000460,0x00000049,0x00070050, +0x00000149,0x00000478,0x00000474,0x00000474, +0x00000476,0x00000476,0x00050091,0x00000037, +0x0000047a,0x00000478,0x0000044d,0x0008004f, +0x0000000c,0x0000047b,0x0000047a,0x0000047a, +0x00000000,0x00000001,0x00000002,0x00050085, +0x0000000c,0x000001e8,0x0000047b,0x0000040e, +0x0006000c,0x0000000c,0x000001e9,0x00000001, +0x0000001f,0x000001e8,0x00050051,0x00000006, +0x000001eb,0x000001c8,0x00000001,0x00060041, +0x00000188,0x000001ec,0x00000187,0x0000006c, +0x00000077,0x0004003d,0x00000006,0x000001ed, +0x000001ec,0x00050085,0x00000006,0x000001ee, +0x000001eb,0x000001ed,0x0006000c,0x00000006, +0x000001ef,0x00000001,0x0000000a,0x000001ee, +0x0007000c,0x0000000c,0x00000482,0x00000001, +0x0000001a,0x0000040e,0x0000016a,0x0008000c, +0x0000000c,0x00000483,0x00000001,0x0000002e, +0x00000165,0x00000167,0x00000482,0x00050088, +0x0000000c,0x00000486,0x000004f6,0x00000483, +0x0005008e,0x0000000c,0x00000488,0x00000486, +0x000000a1,0x0005008e,0x0000000c,0x0000048b, +0x00000486,0x000001ef,0x00050083,0x0000000c, +0x0000048d,0x0000048b,0x00000488,0x0006000c, +0x0000000c,0x0000048e,0x00000001,0x00000004, +0x0000048d,0x00050083,0x0000000c,0x00000490, +0x000004f7,0x0000048e,0x0008000c,0x0000000c, +0x00000493,0x00000001,0x00000031,0x000004f8, +0x000004f7,0x00000490,0x00050085,0x0000000c, +0x00000495,0x00000493,0x00000488,0x00050085, +0x0000000c,0x000001f5,0x000001e9,0x00000495, +0x00050083,0x0000000c,0x000001f8,0x000003a1, +0x000001f5,0x0008000c,0x0000000c,0x000001fb, +0x00000001,0x0000002b,0x000001f8,0x000004f8, +0x000004f7,0x00050085,0x0000000c,0x000001fe, +0x000001fb,0x000001fb,0x0005008e,0x0000000c, +0x00000200,0x000001fe,0x000001ff,0x00050081, +0x0000000c,0x00000202,0x000001f5,0x00000200, +0x00050041,0x00000206,0x00000207,0x000001ba, +0x00000070,0x0004003d,0x00000006,0x00000208, +0x00000207,0x000300f7,0x000004b3,0x00000000, +0x000300fb,0x00000070,0x0000049b,0x000200f8, +0x0000049b,0x00060041,0x00000188,0x0000049d, +0x00000187,0x00000074,0x00000070,0x0004003d, +0x00000006,0x0000049e,0x0000049d,0x00050085, +0x00000006,0x0000049f,0x00000208,0x0000049e, +0x0006000c,0x00000006,0x000004a7,0x00000001, +0x00000008,0x0000049f,0x0005008d,0x00000006, +0x000004a8,0x000004a7,0x00000116,0x000500b4, +0x00000196,0x000004aa,0x000004a8,0x0000004a, +0x000300f7,0x000004b2,0x00000000,0x000400fa, +0x000004aa,0x000004ab,0x000004ac,0x000200f8, +0x000004ac,0x000500b4,0x00000196,0x000004ae, +0x000004a8,0x00000049,0x000300f7,0x000004b1, +0x00000000,0x000400fa,0x000004ae,0x000004af, +0x000004b0,0x000200f8,0x000004b0,0x000200f9, +0x000004b3,0x000200f8,0x000004af,0x000200f9, +0x000004b3,0x000200f8,0x000004b1,0x000100ff, +0x000200f8,0x000004ab,0x000200f9,0x000004b3, +0x000200f8,0x000004b2,0x000100ff,0x000200f8, +0x000004b3,0x000900f5,0x0000000c,0x000004f1, +0x0000019a,0x000004ab,0x000001a1,0x000004af, +0x000001a4,0x000004b0,0x00050085,0x0000000c, +0x0000020a,0x00000202,0x000004f1,0x0005008e, +0x0000000c,0x0000020b,0x0000020a,0x00000116, +0x0008000c,0x0000000c,0x0000020e,0x00000001, +0x0000002e,0x00000202,0x0000020b,0x000004f9, +0x0005008e,0x0000000c,0x00000211,0x000001fb, +0x00000210,0x00050081,0x0000000c,0x00000213, +0x0000020e,0x00000211,0x0005008e,0x0000000c, +0x00000215,0x00000213,0x00000166,0x0007000c, +0x0000000c,0x00000218,0x00000001,0x0000001a, +0x00000215,0x00000217,0x00050051,0x00000006, +0x0000021c,0x00000218,0x00000000,0x00050051, +0x00000006,0x0000021d,0x00000218,0x00000001, +0x00050051,0x00000006,0x0000021e,0x00000218, +0x00000002,0x00070050,0x00000037,0x0000021f, +0x0000021c,0x0000021d,0x0000021e,0x00000049, +0x0003003e,0x0000021a,0x0000021f,0x000100fd, +0x00010038} diff --git a/data/shader/output.sh b/data/shader/output.sh new file mode 100755 index 0000000..749c9c2 --- /dev/null +++ b/data/shader/output.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +glslc -O crt-aperture.frag -o frag.spv --target-env=vulkan1.1 -mfmt=c diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 5a950df..977cdbf 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -3,6 +3,7 @@ #include "rdp_device.hpp" #include "interface.hpp" #include "spirv.hpp" +#include "spirv_crt.hpp" #include using namespace Vulkan; @@ -51,8 +52,6 @@ enum vi_registers VI_REGS_COUNT }; -static bool fullscreen; -static bool integer_scaling; static SDL_Window *window; static RDP::CommandProcessor *processor; static SDL_WSIPlatform *wsi_platform; @@ -64,6 +63,8 @@ static CALL_BACK callback; static GFX_INFO gfx_info; static uint32_t region; static bool crop_letterbox; +static const uint32_t *fragment_spirv; +static size_t fragment_size; typedef struct { @@ -77,6 +78,12 @@ typedef struct uint8_t depthbuffer_enabled; } FrameBufferInfo; +typedef struct +{ + float SourceSize[4]; + float OutputSize[4]; +} Push; + static uint8_t *rdram_dirty; static uint64_t sync_signal; static FrameBufferInfo frame_buffer_info; @@ -165,8 +172,8 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) case SDL_SCANCODE_RETURN: if (event->key.mod & SDL_KMOD_ALT) { - fullscreen = !fullscreen; - SDL_SetWindowFullscreen(window, fullscreen); + gfx_info.fullscreen = !gfx_info.fullscreen; + SDL_SetWindowFullscreen(window, gfx_info.fullscreen); } break; case SDL_SCANCODE_F: @@ -176,7 +183,7 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) } break; case SDL_SCANCODE_ESCAPE: - if (fullscreen) + if (gfx_info.fullscreen) callback.emu_running = false; break; case SDL_SCANCODE_F4: @@ -196,7 +203,7 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) return 0; } -void rdp_new_processor(GFX_INFO _gfx_info, uint32_t upscale) +void rdp_new_processor(GFX_INFO _gfx_info) { memset(&frame_buffer_info, 0, sizeof(FrameBufferInfo)); sync_signal = 0; @@ -209,12 +216,12 @@ void rdp_new_processor(GFX_INFO _gfx_info, uint32_t upscale) } RDP::CommandProcessorFlags flags = 0; - if (upscale == 2) + if (gfx_info.upscale == 2) { flags |= RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT; flags |= RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_2X_BIT; } - else if (upscale == 4) + else if (gfx_info.upscale == 4) { flags |= RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT; flags |= RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_4X_BIT; @@ -223,7 +230,7 @@ void rdp_new_processor(GFX_INFO _gfx_info, uint32_t upscale) processor = new RDP::CommandProcessor(wsi->get_device(), gfx_info.RDRAM, 0, gfx_info.RDRAM_SIZE, gfx_info.RDRAM_SIZE / 2, flags); } -void rdp_init(void *_window, GFX_INFO _gfx_info, uint32_t _upscale, bool _integer_scaling, bool _fullscreen) +void rdp_init(void *_window, GFX_INFO _gfx_info) { window = (SDL_Window *)_window; bool result = SDL_AddEventWatch(sdl_event_filter, nullptr); @@ -234,8 +241,18 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, uint32_t _upscale, bool _intege } gfx_info = _gfx_info; - fullscreen = _fullscreen; - integer_scaling = _integer_scaling; + + if (gfx_info.crt) + { + fragment_spirv = crt_fragment_spirv; + fragment_size = sizeof(crt_fragment_spirv); + } + else + { + fragment_spirv = plain_fragment_spirv; + fragment_size = sizeof(plain_fragment_spirv); + } + bool window_vsync = 0; wsi = new WSI; wsi_platform = new SDL_WSIPlatform; @@ -254,7 +271,7 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, uint32_t _upscale, bool _intege } rdram_dirty = (uint8_t *)malloc(gfx_info.RDRAM_SIZE / 8); - rdp_new_processor(gfx_info, _upscale); + rdp_new_processor(gfx_info); if (!processor->device_is_supported()) { @@ -297,15 +314,14 @@ void rdp_close() } } -static void calculate_viewport(float *x, float *y, float *width, float *height) +static void calculate_viewport(float *x, float *y, float *width, float *height, uint32_t display_height) { - const int32_t display_width = gfx_info.widescreen ? (gfx_info.PAL ? 512 : 426) : (gfx_info.PAL ? 384 : 320); - const int32_t display_height = gfx_info.PAL ? 288 : 240; + uint32_t display_width = gfx_info.widescreen ? display_height * 16 / 9 : display_height * 4 / 3; int w, h; SDL_GetWindowSize(window, &w, &h); - if (integer_scaling) + if (gfx_info.integer_scaling) { // Integer scaling path int scale_x = w / display_width; @@ -320,6 +336,13 @@ static void calculate_viewport(float *x, float *y, float *width, float *height) *width = scaled_width; *height = scaled_height; + + // Center the viewport + int integer_x = (w - *width) / 2.0f; + int integer_y = (h - *height) / 2.0f; + + *x = integer_x; + *y = integer_y; } else { @@ -330,11 +353,11 @@ static void calculate_viewport(float *x, float *y, float *width, float *height) *width = display_width * scale; *height = display_height * scale; - } - // Center the viewport - *x = (w - *width) / 2.0f; - *y = (h - *height) / 2.0f; + // Center the viewport + *x = (w - *width) / 2.0f; + *y = (h - *height) / 2.0f; + } } static void render_frame(Vulkan::Device &device) @@ -361,15 +384,16 @@ static void render_frame(Vulkan::Device &device) Vulkan::ImageHandle image = processor->scanout(options); - // Normally reflection is automated. Vulkan::ResourceLayout vertex_layout = {}; Vulkan::ResourceLayout fragment_layout = {}; fragment_layout.output_mask = 1 << 0; fragment_layout.sets[0].sampled_image_mask = 1 << 0; + if (gfx_info.crt) + fragment_layout.push_constant_size = sizeof(Push); // This request is cached. auto *program = device.request_program(vertex_spirv, sizeof(vertex_spirv), - fragment_spirv, sizeof(fragment_spirv), + fragment_spirv, fragment_size, &vertex_layout, &fragment_layout); @@ -379,9 +403,6 @@ static void render_frame(Vulkan::Device &device) auto rp = device.get_swapchain_render_pass(Vulkan::SwapchainRenderPass::ColorOnly); cmd->begin_render_pass(rp); - VkViewport vp = cmd->get_viewport(); - calculate_viewport(&vp.x, &vp.y, &vp.width, &vp.height); - cmd->set_program(program); // Basic default render state. @@ -392,6 +413,19 @@ static void render_frame(Vulkan::Device &device) // If we don't have an image, we just get a cleared screen in the render pass. if (image) { + VkViewport vp = cmd->get_viewport(); + calculate_viewport(&vp.x, &vp.y, &vp.width, &vp.height, image->get_height()); + + if (gfx_info.crt) + { + // Set shader parameters + Push push = { + {float(image->get_width()), float(image->get_height()), 1.0f / float(image->get_width()), 1.0f / float(image->get_height())}, + {vp.width, vp.height, 1.0f / vp.width, 1.0f / vp.height}, + }; + cmd->push_constants(&push, 0, sizeof(push)); + } + cmd->set_texture(0, 0, image->get_view(), Vulkan::StockSampler::LinearClamp); cmd->set_viewport(vp); // The vertices are constants in the shader. diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 583625e..5a0323e 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -18,6 +18,10 @@ extern "C" uint32_t *DPC_STATUS_REG; bool PAL; bool widescreen; + bool fullscreen; + bool integer_scaling; + uint32_t upscale; + bool crt; } GFX_INFO; typedef struct @@ -28,13 +32,13 @@ extern "C" bool enable_speedlimiter; } CALL_BACK; - void rdp_init(void *_window, GFX_INFO _gfx_info, uint32_t _upscale, bool _integer_scaling, bool _fullscreen); + void rdp_init(void *_window, GFX_INFO _gfx_info); void rdp_close(); void rdp_set_vi_register(uint32_t reg, uint32_t value); void rdp_update_screen(); CALL_BACK rdp_check_callback(); uint64_t rdp_process_commands(); - void rdp_new_processor(GFX_INFO _gfx_info, uint32_t _upscale); + void rdp_new_processor(GFX_INFO _gfx_info); void rdp_check_framebuffers(uint32_t address); void rdp_full_sync(); diff --git a/parallel-rdp/spirv.hpp b/parallel-rdp/spirv.hpp index 50619fc..f227353 100644 --- a/parallel-rdp/spirv.hpp +++ b/parallel-rdp/spirv.hpp @@ -74,7 +74,7 @@ static const uint32_t vertex_spirv[] = 0x00000030, 0x00000033, 0x0003003e, 0x0000002b, 0x00000032, 0x000100fd, 0x00010038}; -static const uint32_t fragment_spirv[] = +static const uint32_t plain_fragment_spirv[] = {0x07230203, 0x00010000, 0x000d000a, 0x00000015, 0x00000000, 0x00020011, 0x00000001, 0x0006000b, 0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e, diff --git a/parallel-rdp/spirv_crt.hpp b/parallel-rdp/spirv_crt.hpp new file mode 100644 index 0000000..fdcf4ce --- /dev/null +++ b/parallel-rdp/spirv_crt.hpp @@ -0,0 +1,456 @@ +#pragma once + +static const uint32_t crt_fragment_spirv[] = + {0x07230203, 0x00010300, 0x000d000b, 0x000004fd, + 0x00000000, 0x00020011, 0x00000001, 0x0006000b, + 0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e, + 0x00000000, 0x0003000e, 0x00000000, 0x00000001, + 0x0007000f, 0x00000004, 0x00000004, 0x6e69616d, + 0x00000000, 0x000001ba, 0x0000021a, 0x00030010, + 0x00000004, 0x00000007, 0x00030047, 0x00000185, + 0x00000002, 0x00050048, 0x00000185, 0x00000000, + 0x00000023, 0x00000000, 0x00050048, 0x00000185, + 0x00000001, 0x00000023, 0x00000010, 0x00040047, + 0x000001ba, 0x0000001e, 0x00000000, 0x00040047, + 0x000001ca, 0x00000021, 0x00000000, 0x00040047, + 0x000001ca, 0x00000022, 0x00000000, 0x00040047, + 0x0000021a, 0x0000001e, 0x00000000, 0x00020013, + 0x00000002, 0x00030021, 0x00000003, 0x00000002, + 0x00030016, 0x00000006, 0x00000020, 0x00090019, + 0x00000007, 0x00000006, 0x00000001, 0x00000000, + 0x00000000, 0x00000000, 0x00000001, 0x00000000, + 0x0003001b, 0x00000008, 0x00000007, 0x00040020, + 0x00000009, 0x00000000, 0x00000008, 0x00040017, + 0x0000000a, 0x00000006, 0x00000002, 0x00040017, + 0x0000000c, 0x00000006, 0x00000003, 0x00040017, + 0x00000037, 0x00000006, 0x00000004, 0x0004002b, + 0x00000006, 0x0000003a, 0x4019999a, 0x0006002c, + 0x0000000c, 0x0000003b, 0x0000003a, 0x0000003a, + 0x0000003a, 0x0004002b, 0x00000006, 0x00000049, + 0x3f800000, 0x0004002b, 0x00000006, 0x0000004a, + 0x00000000, 0x0004002b, 0x00000006, 0x00000068, + 0xbf800000, 0x00040015, 0x0000006b, 0x00000020, + 0x00000001, 0x0004002b, 0x0000006b, 0x0000006c, + 0x00000000, 0x00040015, 0x0000006f, 0x00000020, + 0x00000000, 0x0004002b, 0x0000006f, 0x00000070, + 0x00000000, 0x0004002b, 0x0000006b, 0x00000074, + 0x00000001, 0x0004002b, 0x0000006f, 0x00000077, + 0x00000001, 0x0004002b, 0x00000006, 0x000000a1, + 0x3f000000, 0x0005002c, 0x0000000a, 0x000000fc, + 0x000000a1, 0x0000004a, 0x0004002b, 0x00000006, + 0x00000101, 0x3a83126f, 0x0005002c, 0x0000000a, + 0x00000102, 0x000000a1, 0x00000101, 0x0004002b, + 0x00000006, 0x0000010b, 0x40490fdb, 0x0004002b, + 0x00000006, 0x00000116, 0x40000000, 0x0004002b, + 0x00000006, 0x0000011c, 0x3727c5ac, 0x0007002c, + 0x00000037, 0x0000012c, 0x00000049, 0x00000049, + 0x00000049, 0x00000049, 0x00040018, 0x00000149, + 0x00000037, 0x00000004, 0x0006002c, 0x0000000c, + 0x00000165, 0x000000a1, 0x000000a1, 0x000000a1, + 0x0004002b, 0x00000006, 0x00000166, 0x3fc00000, + 0x0006002c, 0x0000000c, 0x00000167, 0x00000166, + 0x00000166, 0x00000166, 0x0004002b, 0x00000006, + 0x00000169, 0x3ecccccd, 0x0006002c, 0x0000000c, + 0x0000016a, 0x00000169, 0x00000169, 0x00000169, + 0x0004001e, 0x00000185, 0x00000037, 0x00000037, + 0x00040020, 0x00000186, 0x00000009, 0x00000185, + 0x0004003b, 0x00000186, 0x00000187, 0x00000009, + 0x00040020, 0x00000188, 0x00000009, 0x00000006, + 0x00020014, 0x00000196, 0x0006002c, 0x0000000c, + 0x0000019a, 0x00000049, 0x0000004a, 0x00000049, + 0x0006002c, 0x0000000c, 0x000001a1, 0x0000004a, + 0x00000049, 0x0000004a, 0x0006002c, 0x0000000c, + 0x000001a4, 0x0000004a, 0x0000004a, 0x00000049, + 0x0004002b, 0x0000006f, 0x000001aa, 0x00000003, + 0x00040020, 0x000001b9, 0x00000001, 0x0000000a, + 0x0004003b, 0x000001b9, 0x000001ba, 0x00000001, + 0x00040020, 0x000001bc, 0x00000009, 0x00000037, + 0x0004003b, 0x00000009, 0x000001ca, 0x00000000, + 0x0004002b, 0x00000006, 0x000001dc, 0x40400000, + 0x0004002b, 0x00000006, 0x000001ff, 0x3dcccccd, + 0x00040020, 0x00000206, 0x00000001, 0x00000006, + 0x0004002b, 0x00000006, 0x0000020c, 0x3e99999a, + 0x0004002b, 0x00000006, 0x00000210, 0x3d4ccccd, + 0x0004002b, 0x00000006, 0x00000216, 0x3ed55555, + 0x0006002c, 0x0000000c, 0x00000217, 0x00000216, + 0x00000216, 0x00000216, 0x00040020, 0x00000219, + 0x00000003, 0x00000037, 0x0004003b, 0x00000219, + 0x0000021a, 0x00000003, 0x0005002c, 0x0000000a, + 0x000004f3, 0x000000a1, 0x000000a1, 0x0007002c, + 0x00000037, 0x000004f4, 0x0000011c, 0x0000011c, + 0x0000011c, 0x0000011c, 0x0006002c, 0x0000000c, + 0x000004f6, 0x00000116, 0x00000116, 0x00000116, + 0x0006002c, 0x0000000c, 0x000004f7, 0x00000049, + 0x00000049, 0x00000049, 0x0006002c, 0x0000000c, + 0x000004f8, 0x0000004a, 0x0000004a, 0x0000004a, + 0x0006002c, 0x0000000c, 0x000004f9, 0x0000020c, + 0x0000020c, 0x0000020c, 0x0007002c, 0x00000037, + 0x000004fa, 0x000000a1, 0x000000a1, 0x000000a1, + 0x000000a1, 0x0004002b, 0x00000006, 0x000004fb, + 0x3eaaaaab, 0x00050036, 0x00000002, 0x00000004, + 0x00000000, 0x00000003, 0x000200f8, 0x00000005, + 0x00060041, 0x00000188, 0x000001a8, 0x00000187, + 0x00000074, 0x00000077, 0x0004003d, 0x00000006, + 0x000001a9, 0x000001a8, 0x00060041, 0x00000188, + 0x000001ab, 0x00000187, 0x0000006c, 0x000001aa, + 0x0004003d, 0x00000006, 0x000001ac, 0x000001ab, + 0x00050085, 0x00000006, 0x000001ad, 0x000001a9, + 0x000001ac, 0x0006000c, 0x00000006, 0x000001ae, + 0x00000001, 0x00000008, 0x000001ad, 0x00050088, + 0x00000006, 0x000001b2, 0x000000a1, 0x000001ae, + 0x0005008d, 0x00000006, 0x000001b4, 0x000001ae, + 0x00000116, 0x000500b7, 0x00000196, 0x000001b5, + 0x000001b4, 0x0000004a, 0x000600a9, 0x00000006, + 0x000004fc, 0x000001b5, 0x0000004a, 0x000001b2, + 0x0004003d, 0x0000000a, 0x000001bb, 0x000001ba, + 0x00050041, 0x000001bc, 0x000001bd, 0x00000187, + 0x0000006c, 0x0004003d, 0x00000037, 0x000001be, + 0x000001bd, 0x0007004f, 0x0000000a, 0x000001bf, + 0x000001be, 0x000001be, 0x00000000, 0x00000001, + 0x00050085, 0x0000000a, 0x000001c0, 0x000001bb, + 0x000001bf, 0x00050050, 0x0000000a, 0x000001c3, + 0x0000004a, 0x000004fc, 0x00050083, 0x0000000a, + 0x000001c4, 0x000001c0, 0x000001c3, 0x0007004f, + 0x0000000a, 0x000001c7, 0x000001be, 0x000001be, + 0x00000002, 0x00000003, 0x00050085, 0x0000000a, + 0x000001c8, 0x000001c4, 0x000001c7, 0x00050051, + 0x00000006, 0x00000249, 0x000001be, 0x00000000, + 0x00050088, 0x00000006, 0x0000024a, 0x00000049, + 0x00000249, 0x00050050, 0x0000000a, 0x0000024b, + 0x0000024a, 0x0000004a, 0x00050051, 0x00000006, + 0x0000024d, 0x000001be, 0x00000001, 0x00050088, + 0x00000006, 0x0000024e, 0x00000049, 0x0000024d, + 0x00050050, 0x0000000a, 0x0000024f, 0x0000004a, + 0x0000024e, 0x00050085, 0x0000000a, 0x00000252, + 0x000001c8, 0x000001bf, 0x0006000c, 0x0000000a, + 0x00000254, 0x00000001, 0x00000008, 0x00000252, + 0x00050081, 0x0000000a, 0x00000256, 0x00000254, + 0x000004f3, 0x00050088, 0x0000000a, 0x00000258, + 0x00000256, 0x000001bf, 0x0006000c, 0x0000000a, + 0x0000025a, 0x00000001, 0x0000000a, 0x00000252, + 0x00050083, 0x0000000a, 0x0000025c, 0x0000025a, + 0x000004f3, 0x0005008e, 0x0000000a, 0x0000025d, + 0x0000025c, 0x00000068, 0x00050083, 0x0000000a, + 0x00000260, 0x00000258, 0x0000024f, 0x0004003d, + 0x00000008, 0x0000028a, 0x000001ca, 0x00050083, + 0x0000000a, 0x0000028d, 0x00000260, 0x0000024b, + 0x00050057, 0x00000037, 0x0000028e, 0x0000028a, + 0x0000028d, 0x0008004f, 0x0000000c, 0x0000028f, + 0x0000028e, 0x0000028e, 0x00000000, 0x00000001, + 0x00000002, 0x0007000c, 0x0000000c, 0x00000290, + 0x00000001, 0x0000001a, 0x0000028f, 0x0000003b, + 0x00050057, 0x00000037, 0x00000293, 0x0000028a, + 0x00000260, 0x0008004f, 0x0000000c, 0x00000294, + 0x00000293, 0x00000293, 0x00000000, 0x00000001, + 0x00000002, 0x0007000c, 0x0000000c, 0x00000295, + 0x00000001, 0x0000001a, 0x00000294, 0x0000003b, + 0x00050081, 0x0000000a, 0x00000299, 0x00000260, + 0x0000024b, 0x00050057, 0x00000037, 0x0000029a, + 0x0000028a, 0x00000299, 0x0008004f, 0x0000000c, + 0x0000029b, 0x0000029a, 0x0000029a, 0x00000000, + 0x00000001, 0x00000002, 0x0007000c, 0x0000000c, + 0x0000029c, 0x00000001, 0x0000001a, 0x0000029b, + 0x0000003b, 0x00050083, 0x0000000a, 0x000002af, + 0x00000258, 0x0000024b, 0x00050057, 0x00000037, + 0x000002b0, 0x0000028a, 0x000002af, 0x0008004f, + 0x0000000c, 0x000002b1, 0x000002b0, 0x000002b0, + 0x00000000, 0x00000001, 0x00000002, 0x0007000c, + 0x0000000c, 0x000002b2, 0x00000001, 0x0000001a, + 0x000002b1, 0x0000003b, 0x00050057, 0x00000037, + 0x000002b5, 0x0000028a, 0x00000258, 0x0008004f, + 0x0000000c, 0x000002b6, 0x000002b5, 0x000002b5, + 0x00000000, 0x00000001, 0x00000002, 0x0007000c, + 0x0000000c, 0x000002b7, 0x00000001, 0x0000001a, + 0x000002b6, 0x0000003b, 0x00050081, 0x0000000a, + 0x000002bb, 0x00000258, 0x0000024b, 0x00050057, + 0x00000037, 0x000002bc, 0x0000028a, 0x000002bb, + 0x0008004f, 0x0000000c, 0x000002bd, 0x000002bc, + 0x000002bc, 0x00000000, 0x00000001, 0x00000002, + 0x0007000c, 0x0000000c, 0x000002be, 0x00000001, + 0x0000001a, 0x000002bd, 0x0000003b, 0x00050081, + 0x0000000a, 0x00000268, 0x00000258, 0x0000024f, + 0x00050083, 0x0000000a, 0x000002d1, 0x00000268, + 0x0000024b, 0x00050057, 0x00000037, 0x000002d2, + 0x0000028a, 0x000002d1, 0x0008004f, 0x0000000c, + 0x000002d3, 0x000002d2, 0x000002d2, 0x00000000, + 0x00000001, 0x00000002, 0x0007000c, 0x0000000c, + 0x000002d4, 0x00000001, 0x0000001a, 0x000002d3, + 0x0000003b, 0x00050057, 0x00000037, 0x000002d7, + 0x0000028a, 0x00000268, 0x0008004f, 0x0000000c, + 0x000002d8, 0x000002d7, 0x000002d7, 0x00000000, + 0x00000001, 0x00000002, 0x0007000c, 0x0000000c, + 0x000002d9, 0x00000001, 0x0000001a, 0x000002d8, + 0x0000003b, 0x00050081, 0x0000000a, 0x000002dd, + 0x00000268, 0x0000024b, 0x00050057, 0x00000037, + 0x000002de, 0x0000028a, 0x000002dd, 0x0008004f, + 0x0000000c, 0x000002df, 0x000002de, 0x000002de, + 0x00000000, 0x00000001, 0x00000002, 0x0007000c, + 0x0000000c, 0x000002e0, 0x00000001, 0x0000001a, + 0x000002df, 0x0000003b, 0x00050051, 0x00000006, + 0x0000026d, 0x0000025d, 0x00000000, 0x00050083, + 0x00000006, 0x000002f3, 0x0000026d, 0x00000049, + 0x00050081, 0x00000006, 0x000002f6, 0x0000026d, + 0x00000049, 0x00060050, 0x0000000c, 0x000002f7, + 0x000002f3, 0x0000026d, 0x000002f6, 0x00050085, + 0x0000000c, 0x000002fa, 0x000002f7, 0x000004f6, + 0x00050085, 0x0000000c, 0x000002fd, 0x000002fa, + 0x000002fa, 0x0005008e, 0x0000000c, 0x000002fe, + 0x000002fd, 0x00000068, 0x0006000c, 0x0000000c, + 0x000002ff, 0x00000001, 0x0000001d, 0x000002fe, + 0x00050051, 0x00000006, 0x00000303, 0x000002ff, + 0x00000000, 0x0005008e, 0x0000000c, 0x00000304, + 0x00000290, 0x00000303, 0x00050051, 0x00000006, + 0x00000308, 0x000002ff, 0x00000001, 0x0005008e, + 0x0000000c, 0x00000309, 0x00000295, 0x00000308, + 0x00050081, 0x0000000c, 0x0000030a, 0x00000304, + 0x00000309, 0x00050051, 0x00000006, 0x0000030e, + 0x000002ff, 0x00000002, 0x0005008e, 0x0000000c, + 0x0000030f, 0x0000029c, 0x0000030e, 0x00050081, + 0x0000000c, 0x00000310, 0x0000030a, 0x0000030f, + 0x00050081, 0x00000006, 0x00000315, 0x00000303, + 0x00000308, 0x00050081, 0x00000006, 0x00000318, + 0x00000315, 0x0000030e, 0x00060050, 0x0000000c, + 0x00000319, 0x00000318, 0x00000318, 0x00000318, + 0x00050088, 0x0000000c, 0x0000031a, 0x00000310, + 0x00000319, 0x0005008e, 0x0000000c, 0x00000331, + 0x000002b2, 0x00000303, 0x0005008e, 0x0000000c, + 0x00000336, 0x000002b7, 0x00000308, 0x00050081, + 0x0000000c, 0x00000337, 0x00000331, 0x00000336, + 0x0005008e, 0x0000000c, 0x0000033c, 0x000002be, + 0x0000030e, 0x00050081, 0x0000000c, 0x0000033d, + 0x00000337, 0x0000033c, 0x00050088, 0x0000000c, + 0x00000347, 0x0000033d, 0x00000319, 0x0005008e, + 0x0000000c, 0x0000035e, 0x000002d4, 0x00000303, + 0x0005008e, 0x0000000c, 0x00000363, 0x000002d9, + 0x00000308, 0x00050081, 0x0000000c, 0x00000364, + 0x0000035e, 0x00000363, 0x0005008e, 0x0000000c, + 0x00000369, 0x000002e0, 0x0000030e, 0x00050081, + 0x0000000c, 0x0000036a, 0x00000364, 0x00000369, + 0x00050088, 0x0000000c, 0x00000374, 0x0000036a, + 0x00000319, 0x00050051, 0x00000006, 0x00000286, + 0x0000025d, 0x00000001, 0x00050083, 0x00000006, + 0x0000037a, 0x00000286, 0x00000049, 0x00050081, + 0x00000006, 0x0000037d, 0x00000286, 0x00000049, + 0x00060050, 0x0000000c, 0x0000037e, 0x0000037a, + 0x00000286, 0x0000037d, 0x00050085, 0x0000000c, + 0x00000381, 0x0000037e, 0x000004f6, 0x00050085, + 0x0000000c, 0x00000384, 0x00000381, 0x00000381, + 0x0005008e, 0x0000000c, 0x00000385, 0x00000384, + 0x00000068, 0x0006000c, 0x0000000c, 0x00000386, + 0x00000001, 0x0000001d, 0x00000385, 0x00050051, + 0x00000006, 0x0000038a, 0x00000386, 0x00000000, + 0x0005008e, 0x0000000c, 0x0000038b, 0x0000031a, + 0x0000038a, 0x00050051, 0x00000006, 0x0000038f, + 0x00000386, 0x00000001, 0x0005008e, 0x0000000c, + 0x00000390, 0x00000347, 0x0000038f, 0x00050081, + 0x0000000c, 0x00000391, 0x0000038b, 0x00000390, + 0x00050051, 0x00000006, 0x00000395, 0x00000386, + 0x00000002, 0x0005008e, 0x0000000c, 0x00000396, + 0x00000374, 0x00000395, 0x00050081, 0x0000000c, + 0x00000397, 0x00000391, 0x00000396, 0x00050081, + 0x00000006, 0x0000039c, 0x0000038a, 0x0000038f, + 0x00050081, 0x00000006, 0x0000039f, 0x0000039c, + 0x00000395, 0x00060050, 0x0000000c, 0x000003a0, + 0x0000039f, 0x0000039f, 0x0000039f, 0x00050088, + 0x0000000c, 0x000003a1, 0x00000397, 0x000003a0, + 0x00060052, 0x0000000a, 0x000004e1, 0x00000249, + 0x000001bf, 0x00000000, 0x00050085, 0x0000000a, + 0x000003b6, 0x000001c8, 0x000004e1, 0x00050083, + 0x0000000a, 0x000003b7, 0x000003b6, 0x000000fc, + 0x0006000c, 0x0000000a, 0x000003b9, 0x00000001, + 0x00000008, 0x000003b7, 0x00050081, 0x0000000a, + 0x000003ba, 0x000003b9, 0x00000102, 0x00050088, + 0x0000000a, 0x000003bc, 0x000003ba, 0x000004e1, + 0x0006000c, 0x0000000a, 0x000003be, 0x00000001, + 0x0000000a, 0x000003b7, 0x00050051, 0x00000006, + 0x000003c0, 0x000003be, 0x00000000, 0x00050081, + 0x00000006, 0x000003c1, 0x000003c0, 0x00000049, + 0x00050083, 0x00000006, 0x000003c6, 0x000003c0, + 0x00000049, 0x00050083, 0x00000006, 0x000003c9, + 0x000003c0, 0x00000116, 0x00070050, 0x00000037, + 0x000003ca, 0x000003c1, 0x000003c0, 0x000003c6, + 0x000003c9, 0x0005008e, 0x00000037, 0x000003cb, + 0x000003ca, 0x0000010b, 0x0006000c, 0x00000037, + 0x000003cd, 0x00000001, 0x00000004, 0x000003cb, + 0x0007000c, 0x00000037, 0x000003cf, 0x00000001, + 0x00000028, 0x000003cd, 0x000004f4, 0x0006000c, + 0x00000037, 0x000003d1, 0x00000001, 0x0000000d, + 0x000003cf, 0x0005008e, 0x00000037, 0x000003d2, + 0x000003d1, 0x00000116, 0x00050085, 0x00000037, + 0x000003d5, 0x000003cf, 0x000004fa, 0x0006000c, + 0x00000037, 0x000003d6, 0x00000001, 0x0000000d, + 0x000003d5, 0x00050085, 0x00000037, 0x000003d7, + 0x000003d2, 0x000003d6, 0x00050085, 0x00000037, + 0x000003da, 0x000003cf, 0x000003cf, 0x00050088, + 0x00000037, 0x000003db, 0x000003d7, 0x000003da, + 0x00050094, 0x00000006, 0x000003dd, 0x000003db, + 0x0000012c, 0x00070050, 0x00000037, 0x000003df, + 0x000003dd, 0x000003dd, 0x000003dd, 0x000003dd, + 0x00050088, 0x00000037, 0x000003e0, 0x000003db, + 0x000003df, 0x00050057, 0x00000037, 0x000003e3, + 0x0000028a, 0x000003bc, 0x0008004f, 0x0000000c, + 0x000003e4, 0x000003e3, 0x000003e3, 0x00000000, + 0x00000001, 0x00000002, 0x0007000c, 0x0000000c, + 0x000003e5, 0x00000001, 0x0000001a, 0x000003e4, + 0x0000003b, 0x00050051, 0x00000006, 0x000003e6, + 0x000003e5, 0x00000000, 0x00050051, 0x00000006, + 0x000003e7, 0x000003e5, 0x00000001, 0x00050051, + 0x00000006, 0x000003e8, 0x000003e5, 0x00000002, + 0x00050081, 0x0000000a, 0x000003ed, 0x000003bc, + 0x0000024b, 0x00050057, 0x00000037, 0x000003ee, + 0x0000028a, 0x000003ed, 0x0008004f, 0x0000000c, + 0x000003ef, 0x000003ee, 0x000003ee, 0x00000000, + 0x00000001, 0x00000002, 0x0007000c, 0x0000000c, + 0x000003f0, 0x00000001, 0x0000001a, 0x000003ef, + 0x0000003b, 0x00050051, 0x00000006, 0x000003f1, + 0x000003f0, 0x00000000, 0x00050051, 0x00000006, + 0x000003f2, 0x000003f0, 0x00000001, 0x00050051, + 0x00000006, 0x000003f3, 0x000003f0, 0x00000002, + 0x00070050, 0x00000037, 0x00000407, 0x000003e6, + 0x000003e7, 0x000003e8, 0x00000049, 0x00070050, + 0x00000037, 0x00000409, 0x000003f1, 0x000003f2, + 0x000003f3, 0x00000049, 0x00070050, 0x00000149, + 0x0000040b, 0x00000407, 0x00000407, 0x00000409, + 0x00000409, 0x00050091, 0x00000037, 0x0000040d, + 0x0000040b, 0x000003e0, 0x0008004f, 0x0000000c, + 0x0000040e, 0x0000040d, 0x0000040d, 0x00000000, + 0x00000001, 0x00000002, 0x00050085, 0x00000006, + 0x0000041b, 0x00000249, 0x000001dc, 0x00060052, + 0x0000000a, 0x000004e9, 0x0000041b, 0x000001bf, + 0x00000000, 0x00050088, 0x00000006, 0x0000041f, + 0x000004fb, 0x00000249, 0x00050050, 0x0000000a, + 0x00000420, 0x0000041f, 0x0000004a, 0x00050085, + 0x0000000a, 0x00000423, 0x000001c8, 0x000004e9, + 0x00050083, 0x0000000a, 0x00000424, 0x00000423, + 0x000000fc, 0x0006000c, 0x0000000a, 0x00000426, + 0x00000001, 0x00000008, 0x00000424, 0x00050081, + 0x0000000a, 0x00000427, 0x00000426, 0x00000102, + 0x00050088, 0x0000000a, 0x00000429, 0x00000427, + 0x000004e9, 0x0006000c, 0x0000000a, 0x0000042b, + 0x00000001, 0x0000000a, 0x00000424, 0x00050051, + 0x00000006, 0x0000042d, 0x0000042b, 0x00000000, + 0x00050081, 0x00000006, 0x0000042e, 0x0000042d, + 0x00000049, 0x00050083, 0x00000006, 0x00000433, + 0x0000042d, 0x00000049, 0x00050083, 0x00000006, + 0x00000436, 0x0000042d, 0x00000116, 0x00070050, + 0x00000037, 0x00000437, 0x0000042e, 0x0000042d, + 0x00000433, 0x00000436, 0x0005008e, 0x00000037, + 0x00000438, 0x00000437, 0x0000010b, 0x0006000c, + 0x00000037, 0x0000043a, 0x00000001, 0x00000004, + 0x00000438, 0x0007000c, 0x00000037, 0x0000043c, + 0x00000001, 0x00000028, 0x0000043a, 0x000004f4, + 0x0006000c, 0x00000037, 0x0000043e, 0x00000001, + 0x0000000d, 0x0000043c, 0x0005008e, 0x00000037, + 0x0000043f, 0x0000043e, 0x00000116, 0x00050085, + 0x00000037, 0x00000442, 0x0000043c, 0x000004fa, + 0x0006000c, 0x00000037, 0x00000443, 0x00000001, + 0x0000000d, 0x00000442, 0x00050085, 0x00000037, + 0x00000444, 0x0000043f, 0x00000443, 0x00050085, + 0x00000037, 0x00000447, 0x0000043c, 0x0000043c, + 0x00050088, 0x00000037, 0x00000448, 0x00000444, + 0x00000447, 0x00050094, 0x00000006, 0x0000044a, + 0x00000448, 0x0000012c, 0x00070050, 0x00000037, + 0x0000044c, 0x0000044a, 0x0000044a, 0x0000044a, + 0x0000044a, 0x00050088, 0x00000037, 0x0000044d, + 0x00000448, 0x0000044c, 0x00050057, 0x00000037, + 0x00000450, 0x0000028a, 0x00000429, 0x0008004f, + 0x0000000c, 0x00000451, 0x00000450, 0x00000450, + 0x00000000, 0x00000001, 0x00000002, 0x0007000c, + 0x0000000c, 0x00000452, 0x00000001, 0x0000001a, + 0x00000451, 0x0000003b, 0x00050051, 0x00000006, + 0x00000453, 0x00000452, 0x00000000, 0x00050051, + 0x00000006, 0x00000454, 0x00000452, 0x00000001, + 0x00050051, 0x00000006, 0x00000455, 0x00000452, + 0x00000002, 0x00050081, 0x0000000a, 0x0000045a, + 0x00000429, 0x00000420, 0x00050057, 0x00000037, + 0x0000045b, 0x0000028a, 0x0000045a, 0x0008004f, + 0x0000000c, 0x0000045c, 0x0000045b, 0x0000045b, + 0x00000000, 0x00000001, 0x00000002, 0x0007000c, + 0x0000000c, 0x0000045d, 0x00000001, 0x0000001a, + 0x0000045c, 0x0000003b, 0x00050051, 0x00000006, + 0x0000045e, 0x0000045d, 0x00000000, 0x00050051, + 0x00000006, 0x0000045f, 0x0000045d, 0x00000001, + 0x00050051, 0x00000006, 0x00000460, 0x0000045d, + 0x00000002, 0x00070050, 0x00000037, 0x00000474, + 0x00000453, 0x00000454, 0x00000455, 0x00000049, + 0x00070050, 0x00000037, 0x00000476, 0x0000045e, + 0x0000045f, 0x00000460, 0x00000049, 0x00070050, + 0x00000149, 0x00000478, 0x00000474, 0x00000474, + 0x00000476, 0x00000476, 0x00050091, 0x00000037, + 0x0000047a, 0x00000478, 0x0000044d, 0x0008004f, + 0x0000000c, 0x0000047b, 0x0000047a, 0x0000047a, + 0x00000000, 0x00000001, 0x00000002, 0x00050085, + 0x0000000c, 0x000001e8, 0x0000047b, 0x0000040e, + 0x0006000c, 0x0000000c, 0x000001e9, 0x00000001, + 0x0000001f, 0x000001e8, 0x00050051, 0x00000006, + 0x000001eb, 0x000001c8, 0x00000001, 0x00060041, + 0x00000188, 0x000001ec, 0x00000187, 0x0000006c, + 0x00000077, 0x0004003d, 0x00000006, 0x000001ed, + 0x000001ec, 0x00050085, 0x00000006, 0x000001ee, + 0x000001eb, 0x000001ed, 0x0006000c, 0x00000006, + 0x000001ef, 0x00000001, 0x0000000a, 0x000001ee, + 0x0007000c, 0x0000000c, 0x00000482, 0x00000001, + 0x0000001a, 0x0000040e, 0x0000016a, 0x0008000c, + 0x0000000c, 0x00000483, 0x00000001, 0x0000002e, + 0x00000165, 0x00000167, 0x00000482, 0x00050088, + 0x0000000c, 0x00000486, 0x000004f6, 0x00000483, + 0x0005008e, 0x0000000c, 0x00000488, 0x00000486, + 0x000000a1, 0x0005008e, 0x0000000c, 0x0000048b, + 0x00000486, 0x000001ef, 0x00050083, 0x0000000c, + 0x0000048d, 0x0000048b, 0x00000488, 0x0006000c, + 0x0000000c, 0x0000048e, 0x00000001, 0x00000004, + 0x0000048d, 0x00050083, 0x0000000c, 0x00000490, + 0x000004f7, 0x0000048e, 0x0008000c, 0x0000000c, + 0x00000493, 0x00000001, 0x00000031, 0x000004f8, + 0x000004f7, 0x00000490, 0x00050085, 0x0000000c, + 0x00000495, 0x00000493, 0x00000488, 0x00050085, + 0x0000000c, 0x000001f5, 0x000001e9, 0x00000495, + 0x00050083, 0x0000000c, 0x000001f8, 0x000003a1, + 0x000001f5, 0x0008000c, 0x0000000c, 0x000001fb, + 0x00000001, 0x0000002b, 0x000001f8, 0x000004f8, + 0x000004f7, 0x00050085, 0x0000000c, 0x000001fe, + 0x000001fb, 0x000001fb, 0x0005008e, 0x0000000c, + 0x00000200, 0x000001fe, 0x000001ff, 0x00050081, + 0x0000000c, 0x00000202, 0x000001f5, 0x00000200, + 0x00050041, 0x00000206, 0x00000207, 0x000001ba, + 0x00000070, 0x0004003d, 0x00000006, 0x00000208, + 0x00000207, 0x000300f7, 0x000004b3, 0x00000000, + 0x000300fb, 0x00000070, 0x0000049b, 0x000200f8, + 0x0000049b, 0x00060041, 0x00000188, 0x0000049d, + 0x00000187, 0x00000074, 0x00000070, 0x0004003d, + 0x00000006, 0x0000049e, 0x0000049d, 0x00050085, + 0x00000006, 0x0000049f, 0x00000208, 0x0000049e, + 0x0006000c, 0x00000006, 0x000004a7, 0x00000001, + 0x00000008, 0x0000049f, 0x0005008d, 0x00000006, + 0x000004a8, 0x000004a7, 0x00000116, 0x000500b4, + 0x00000196, 0x000004aa, 0x000004a8, 0x0000004a, + 0x000300f7, 0x000004b2, 0x00000000, 0x000400fa, + 0x000004aa, 0x000004ab, 0x000004ac, 0x000200f8, + 0x000004ac, 0x000500b4, 0x00000196, 0x000004ae, + 0x000004a8, 0x00000049, 0x000300f7, 0x000004b1, + 0x00000000, 0x000400fa, 0x000004ae, 0x000004af, + 0x000004b0, 0x000200f8, 0x000004b0, 0x000200f9, + 0x000004b3, 0x000200f8, 0x000004af, 0x000200f9, + 0x000004b3, 0x000200f8, 0x000004b1, 0x000100ff, + 0x000200f8, 0x000004ab, 0x000200f9, 0x000004b3, + 0x000200f8, 0x000004b2, 0x000100ff, 0x000200f8, + 0x000004b3, 0x000900f5, 0x0000000c, 0x000004f1, + 0x0000019a, 0x000004ab, 0x000001a1, 0x000004af, + 0x000001a4, 0x000004b0, 0x00050085, 0x0000000c, + 0x0000020a, 0x00000202, 0x000004f1, 0x0005008e, + 0x0000000c, 0x0000020b, 0x0000020a, 0x00000116, + 0x0008000c, 0x0000000c, 0x0000020e, 0x00000001, + 0x0000002e, 0x00000202, 0x0000020b, 0x000004f9, + 0x0005008e, 0x0000000c, 0x00000211, 0x000001fb, + 0x00000210, 0x00050081, 0x0000000c, 0x00000213, + 0x0000020e, 0x00000211, 0x0005008e, 0x0000000c, + 0x00000215, 0x00000213, 0x00000166, 0x0007000c, + 0x0000000c, 0x00000218, 0x00000001, 0x0000001a, + 0x00000215, 0x00000217, 0x00050051, 0x00000006, + 0x0000021c, 0x00000218, 0x00000000, 0x00050051, + 0x00000006, 0x0000021d, 0x00000218, 0x00000001, + 0x00050051, 0x00000006, 0x0000021e, 0x00000218, + 0x00000002, 0x00070050, 0x00000037, 0x0000021f, + 0x0000021c, 0x0000021d, 0x0000021e, 0x00000049, + 0x0003003e, 0x0000021a, 0x0000021f, 0x000100fd, + 0x00010038}; diff --git a/src/ui/config.rs b/src/ui/config.rs index cd831ac..a789587 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -47,6 +47,7 @@ pub struct Video { pub integer_scaling: bool, pub fullscreen: bool, pub widescreen: bool, + pub crt: bool, } #[derive(serde::Serialize, serde::Deserialize)] @@ -106,6 +107,7 @@ impl Config { integer_scaling: false, fullscreen: false, widescreen: false, + crt: false, }, emulation: Emulation { overclock: false }, } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 5a05e39..313c035 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -18,6 +18,7 @@ pub struct GopherEguiApp { integer_scaling: bool, fullscreen: bool, widescreen: bool, + crt: bool, overclock: bool, emulate_vru: bool, dinput: bool, @@ -44,6 +45,7 @@ struct SaveConfig { integer_scaling: bool, fullscreen: bool, widescreen: bool, + crt: bool, emulate_vru: bool, overclock: bool, } @@ -121,6 +123,7 @@ impl GopherEguiApp { integer_scaling: config.video.integer_scaling, fullscreen: config.video.fullscreen, widescreen: config.video.widescreen, + crt: config.video.crt, emulate_vru: config.input.emulate_vru, overclock: config.emulation.overclock, show_vru_dialog: false, @@ -159,6 +162,7 @@ fn save_config( config.video.integer_scaling = save_config_items.integer_scaling; config.video.fullscreen = save_config_items.fullscreen; config.video.widescreen = save_config_items.widescreen; + config.video.crt = save_config_items.crt; config.input.emulate_vru = save_config_items.emulate_vru; config.emulation.overclock = save_config_items.overclock; @@ -175,6 +179,7 @@ impl Drop for GopherEguiApp { integer_scaling: self.integer_scaling, fullscreen: self.fullscreen, widescreen: self.widescreen, + crt: self.crt, emulate_vru: self.emulate_vru, overclock: self.overclock, }; @@ -240,7 +245,7 @@ fn show_vru_dialog(app: &mut GopherEguiApp, ctx: &egui::Context) { } }); - ui.add_space(32.0); + ui.add_space(16.0); if ui.button("Close without saying anything").clicked() { app.vru_word_notifier @@ -303,6 +308,7 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context, enable_overclock: let integer_scaling = app.integer_scaling; let fullscreen = app.fullscreen; let widescreen = app.widescreen; + let crt = app.crt; let emulate_vru = app.emulate_vru; let overclock = app.overclock; let peer_addr; @@ -399,6 +405,7 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context, enable_overclock: integer_scaling, fullscreen, widescreen, + crt, emulate_vru, overclock, }; @@ -535,7 +542,7 @@ impl eframe::App for GopherEguiApp { } }); - ui.add_space(32.0); + ui.add_space(16.0); ui.label("Controller Config:"); egui::Grid::new("controller_config").show(ui, |ui| { ui.label("Port"); @@ -599,7 +606,7 @@ impl eframe::App for GopherEguiApp { ui.end_row(); } }); - ui.add_space(32.0); + ui.add_space(16.0); let upscale_values = [1, 2, 4]; let mut slider_value = match self.upscale { 1 => 0, @@ -621,6 +628,7 @@ impl eframe::App for GopherEguiApp { ui.checkbox(&mut self.integer_scaling, "Integer Scaling"); ui.checkbox(&mut self.fullscreen, "Fullscreen (Esc closes game)"); ui.checkbox(&mut self.widescreen, "Widescreen (stretch)"); + ui.checkbox(&mut self.crt, "Apply CRT shader"); ui.add_space(16.0); ui.checkbox(&mut self.overclock, "Overclock N64 CPU (may cause bugs)"); diff --git a/src/ui/video.rs b/src/ui/video.rs index 187aefc..84b19bc 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -53,17 +53,13 @@ pub fn init(device: &mut device::Device) { DPC_STATUS_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_STATUS_REG as usize], PAL: device.cart.pal, widescreen: device.ui.config.video.widescreen, + fullscreen: device.ui.video.fullscreen, + integer_scaling: device.ui.config.video.integer_scaling, + upscale: device.ui.config.video.upscale, + crt: device.ui.config.video.crt, }; - unsafe { - rdp_init( - device.ui.video.window as *mut std::ffi::c_void, - gfx_info, - device.ui.config.video.upscale, - device.ui.config.video.integer_scaling, - device.ui.video.fullscreen, - ) - } + unsafe { rdp_init(device.ui.video.window as *mut std::ffi::c_void, gfx_info) } } pub fn close(ui: &ui::Ui) { @@ -97,9 +93,13 @@ pub fn load_state(device: &mut device::Device) { DPC_STATUS_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_STATUS_REG as usize], PAL: device.cart.pal, widescreen: device.ui.config.video.widescreen, + fullscreen: device.ui.video.fullscreen, + integer_scaling: device.ui.config.video.integer_scaling, + upscale: device.ui.config.video.upscale, + crt: device.ui.config.video.crt, }; unsafe { - rdp_new_processor(gfx_info, device.ui.config.video.upscale); + rdp_new_processor(gfx_info); } } From 5bac846bdaca36ad47f242627aa55d43af179226 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 10 Mar 2025 17:13:45 +0100 Subject: [PATCH 0384/1117] update shaders (#315) --- data/shader/{frag.spv => crt_frag.spv} | 0 data/shader/main.frag | 10 ++++ data/shader/main.vert | 21 ++++++++ data/shader/main_frag.spv | 32 ++++++++++++ data/shader/main_vert.spv | 72 ++++++++++++++++++++++++++ data/shader/output.sh | 4 +- parallel-rdp/spirv.hpp | 20 +++---- 7 files changed, 148 insertions(+), 11 deletions(-) rename data/shader/{frag.spv => crt_frag.spv} (100%) create mode 100644 data/shader/main.frag create mode 100644 data/shader/main.vert create mode 100644 data/shader/main_frag.spv create mode 100644 data/shader/main_vert.spv diff --git a/data/shader/frag.spv b/data/shader/crt_frag.spv similarity index 100% rename from data/shader/frag.spv rename to data/shader/crt_frag.spv diff --git a/data/shader/main.frag b/data/shader/main.frag new file mode 100644 index 0000000..4a8328c --- /dev/null +++ b/data/shader/main.frag @@ -0,0 +1,10 @@ +#version 450 + +layout(location = 0) out vec4 FragColor; +layout(set = 0, binding = 0) uniform sampler2D uTexture; +layout(location = 0) in vec2 vUV; + +void main() +{ + FragColor = textureLod(uTexture, vUV, 0.0); +} diff --git a/data/shader/main.vert b/data/shader/main.vert new file mode 100644 index 0000000..6f54344 --- /dev/null +++ b/data/shader/main.vert @@ -0,0 +1,21 @@ +#version 450 + +layout(location = 0) out vec2 vUV; + +void main() +{ + if (gl_VertexIndex == 0) + { + gl_Position = vec4(-1.0, -1.0, 0.0, 1.0); + } + else if (gl_VertexIndex == 1) + { + gl_Position = vec4(-1.0, +3.0, 0.0, 1.0); + } + else + { + gl_Position = vec4(+3.0, -1.0, 0.0, 1.0); + } + + vUV = gl_Position.xy * 0.5 + 0.5; +} diff --git a/data/shader/main_frag.spv b/data/shader/main_frag.spv new file mode 100644 index 0000000..c532993 --- /dev/null +++ b/data/shader/main_frag.spv @@ -0,0 +1,32 @@ +{0x07230203,0x00010300,0x000d000b,0x00000015, +0x00000000,0x00020011,0x00000001,0x0006000b, +0x00000001,0x4c534c47,0x6474732e,0x3035342e, +0x00000000,0x0003000e,0x00000000,0x00000001, +0x0007000f,0x00000004,0x00000004,0x6e69616d, +0x00000000,0x00000009,0x00000011,0x00030010, +0x00000004,0x00000007,0x00040047,0x00000009, +0x0000001e,0x00000000,0x00040047,0x0000000d, +0x00000021,0x00000000,0x00040047,0x0000000d, +0x00000022,0x00000000,0x00040047,0x00000011, +0x0000001e,0x00000000,0x00020013,0x00000002, +0x00030021,0x00000003,0x00000002,0x00030016, +0x00000006,0x00000020,0x00040017,0x00000007, +0x00000006,0x00000004,0x00040020,0x00000008, +0x00000003,0x00000007,0x0004003b,0x00000008, +0x00000009,0x00000003,0x00090019,0x0000000a, +0x00000006,0x00000001,0x00000000,0x00000000, +0x00000000,0x00000001,0x00000000,0x0003001b, +0x0000000b,0x0000000a,0x00040020,0x0000000c, +0x00000000,0x0000000b,0x0004003b,0x0000000c, +0x0000000d,0x00000000,0x00040017,0x0000000f, +0x00000006,0x00000002,0x00040020,0x00000010, +0x00000001,0x0000000f,0x0004003b,0x00000010, +0x00000011,0x00000001,0x0004002b,0x00000006, +0x00000013,0x00000000,0x00050036,0x00000002, +0x00000004,0x00000000,0x00000003,0x000200f8, +0x00000005,0x0004003d,0x0000000b,0x0000000e, +0x0000000d,0x0004003d,0x0000000f,0x00000012, +0x00000011,0x00070058,0x00000007,0x00000014, +0x0000000e,0x00000012,0x00000002,0x00000013, +0x0003003e,0x00000009,0x00000014,0x000100fd, +0x00010038} diff --git a/data/shader/main_vert.spv b/data/shader/main_vert.spv new file mode 100644 index 0000000..279557a --- /dev/null +++ b/data/shader/main_vert.spv @@ -0,0 +1,72 @@ +{0x07230203,0x00010300,0x000d000b,0x00000034, +0x00000000,0x00020011,0x00000001,0x0006000b, +0x00000001,0x4c534c47,0x6474732e,0x3035342e, +0x00000000,0x0003000e,0x00000000,0x00000001, +0x0008000f,0x00000000,0x00000004,0x6e69616d, +0x00000000,0x00000008,0x00000016,0x0000002b, +0x00040047,0x00000008,0x0000000b,0x0000002a, +0x00030047,0x00000014,0x00000002,0x00050048, +0x00000014,0x00000000,0x0000000b,0x00000000, +0x00050048,0x00000014,0x00000001,0x0000000b, +0x00000001,0x00050048,0x00000014,0x00000002, +0x0000000b,0x00000003,0x00050048,0x00000014, +0x00000003,0x0000000b,0x00000004,0x00040047, +0x0000002b,0x0000001e,0x00000000,0x00020013, +0x00000002,0x00030021,0x00000003,0x00000002, +0x00040015,0x00000006,0x00000020,0x00000001, +0x00040020,0x00000007,0x00000001,0x00000006, +0x0004003b,0x00000007,0x00000008,0x00000001, +0x0004002b,0x00000006,0x0000000a,0x00000000, +0x00020014,0x0000000b,0x00030016,0x0000000f, +0x00000020,0x00040017,0x00000010,0x0000000f, +0x00000004,0x00040015,0x00000011,0x00000020, +0x00000000,0x0004002b,0x00000011,0x00000012, +0x00000001,0x0004001c,0x00000013,0x0000000f, +0x00000012,0x0006001e,0x00000014,0x00000010, +0x0000000f,0x00000013,0x00000013,0x00040020, +0x00000015,0x00000003,0x00000014,0x0004003b, +0x00000015,0x00000016,0x00000003,0x0004002b, +0x0000000f,0x00000017,0xbf800000,0x0004002b, +0x0000000f,0x00000018,0x00000000,0x0004002b, +0x0000000f,0x00000019,0x3f800000,0x0007002c, +0x00000010,0x0000001a,0x00000017,0x00000017, +0x00000018,0x00000019,0x00040020,0x0000001b, +0x00000003,0x00000010,0x0004002b,0x00000006, +0x0000001f,0x00000001,0x0004002b,0x0000000f, +0x00000023,0x40400000,0x0007002c,0x00000010, +0x00000024,0x00000017,0x00000023,0x00000018, +0x00000019,0x0007002c,0x00000010,0x00000027, +0x00000023,0x00000017,0x00000018,0x00000019, +0x00040017,0x00000029,0x0000000f,0x00000002, +0x00040020,0x0000002a,0x00000003,0x00000029, +0x0004003b,0x0000002a,0x0000002b,0x00000003, +0x0004002b,0x0000000f,0x0000002f,0x3f000000, +0x0005002c,0x00000029,0x00000033,0x0000002f, +0x0000002f,0x00050036,0x00000002,0x00000004, +0x00000000,0x00000003,0x000200f8,0x00000005, +0x0004003d,0x00000006,0x00000009,0x00000008, +0x000500aa,0x0000000b,0x0000000c,0x00000009, +0x0000000a,0x000300f7,0x0000000e,0x00000000, +0x000400fa,0x0000000c,0x0000000d,0x0000001d, +0x000200f8,0x0000000d,0x00050041,0x0000001b, +0x0000001c,0x00000016,0x0000000a,0x0003003e, +0x0000001c,0x0000001a,0x000200f9,0x0000000e, +0x000200f8,0x0000001d,0x000500aa,0x0000000b, +0x00000020,0x00000009,0x0000001f,0x000300f7, +0x00000022,0x00000000,0x000400fa,0x00000020, +0x00000021,0x00000026,0x000200f8,0x00000021, +0x00050041,0x0000001b,0x00000025,0x00000016, +0x0000000a,0x0003003e,0x00000025,0x00000024, +0x000200f9,0x00000022,0x000200f8,0x00000026, +0x00050041,0x0000001b,0x00000028,0x00000016, +0x0000000a,0x0003003e,0x00000028,0x00000027, +0x000200f9,0x00000022,0x000200f8,0x00000022, +0x000200f9,0x0000000e,0x000200f8,0x0000000e, +0x00050041,0x0000001b,0x0000002c,0x00000016, +0x0000000a,0x0004003d,0x00000010,0x0000002d, +0x0000002c,0x0007004f,0x00000029,0x0000002e, +0x0000002d,0x0000002d,0x00000000,0x00000001, +0x0005008e,0x00000029,0x00000030,0x0000002e, +0x0000002f,0x00050081,0x00000029,0x00000032, +0x00000030,0x00000033,0x0003003e,0x0000002b, +0x00000032,0x000100fd,0x00010038} diff --git a/data/shader/output.sh b/data/shader/output.sh index 749c9c2..8a700bc 100755 --- a/data/shader/output.sh +++ b/data/shader/output.sh @@ -1,3 +1,5 @@ #!/bin/bash -glslc -O crt-aperture.frag -o frag.spv --target-env=vulkan1.1 -mfmt=c +glslc -O crt-aperture.frag -o crt_frag.spv --target-env=vulkan1.1 -mfmt=c +glslc -O main.frag -o main_frag.spv --target-env=vulkan1.1 -mfmt=c +glslc -O main.vert -o main_vert.spv --target-env=vulkan1.1 -mfmt=c diff --git a/parallel-rdp/spirv.hpp b/parallel-rdp/spirv.hpp index f227353..5c334e4 100644 --- a/parallel-rdp/spirv.hpp +++ b/parallel-rdp/spirv.hpp @@ -1,19 +1,19 @@ #pragma once static const uint32_t vertex_spirv[] = - {0x07230203, 0x00010000, 0x000d000a, 0x00000034, + {0x07230203, 0x00010300, 0x000d000b, 0x00000034, 0x00000000, 0x00020011, 0x00000001, 0x0006000b, 0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e, 0x00000000, 0x0003000e, 0x00000000, 0x00000001, 0x0008000f, 0x00000000, 0x00000004, 0x6e69616d, 0x00000000, 0x00000008, 0x00000016, 0x0000002b, 0x00040047, 0x00000008, 0x0000000b, 0x0000002a, - 0x00050048, 0x00000014, 0x00000000, 0x0000000b, - 0x00000000, 0x00050048, 0x00000014, 0x00000001, - 0x0000000b, 0x00000001, 0x00050048, 0x00000014, - 0x00000002, 0x0000000b, 0x00000003, 0x00050048, - 0x00000014, 0x00000003, 0x0000000b, 0x00000004, - 0x00030047, 0x00000014, 0x00000002, 0x00040047, + 0x00030047, 0x00000014, 0x00000002, 0x00050048, + 0x00000014, 0x00000000, 0x0000000b, 0x00000000, + 0x00050048, 0x00000014, 0x00000001, 0x0000000b, + 0x00000001, 0x00050048, 0x00000014, 0x00000002, + 0x0000000b, 0x00000003, 0x00050048, 0x00000014, + 0x00000003, 0x0000000b, 0x00000004, 0x00040047, 0x0000002b, 0x0000001e, 0x00000000, 0x00020013, 0x00000002, 0x00030021, 0x00000003, 0x00000002, 0x00040015, 0x00000006, 0x00000020, 0x00000001, @@ -75,7 +75,7 @@ static const uint32_t vertex_spirv[] = 0x00000032, 0x000100fd, 0x00010038}; static const uint32_t plain_fragment_spirv[] = - {0x07230203, 0x00010000, 0x000d000a, 0x00000015, + {0x07230203, 0x00010300, 0x000d000b, 0x00000015, 0x00000000, 0x00020011, 0x00000001, 0x0006000b, 0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e, 0x00000000, 0x0003000e, 0x00000000, 0x00000001, @@ -83,8 +83,8 @@ static const uint32_t plain_fragment_spirv[] = 0x00000000, 0x00000009, 0x00000011, 0x00030010, 0x00000004, 0x00000007, 0x00040047, 0x00000009, 0x0000001e, 0x00000000, 0x00040047, 0x0000000d, - 0x00000022, 0x00000000, 0x00040047, 0x0000000d, - 0x00000021, 0x00000000, 0x00040047, 0x00000011, + 0x00000021, 0x00000000, 0x00040047, 0x0000000d, + 0x00000022, 0x00000000, 0x00040047, 0x00000011, 0x0000001e, 0x00000000, 0x00020013, 0x00000002, 0x00030021, 0x00000003, 0x00000002, 0x00030016, 0x00000006, 0x00000020, 0x00040017, 0x00000007, From f2b75a2dcc988a8a1ec4ee75eaa786d1d56c07fb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 10 Mar 2025 17:14:04 +0100 Subject: [PATCH 0385/1117] update cargo packages --- Cargo.lock | 133 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 75 insertions(+), 58 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f86fb49..080fe7c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -177,9 +177,9 @@ dependencies = [ "core-graphics", "image", "log", - "objc2", + "objc2 0.5.2", "objc2-app-kit", - "objc2-foundation", + "objc2-foundation 0.2.2", "parking_lot", "windows-sys 0.48.0", "x11rb", @@ -389,7 +389,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" dependencies = [ - "objc2", + "objc2 0.5.2", ] [[package]] @@ -932,9 +932,9 @@ dependencies = [ "image", "js-sys", "log", - "objc2", + "objc2 0.5.2", "objc2-app-kit", - "objc2-foundation", + "objc2-foundation 0.2.2", "parking_lot", "percent-encoding", "pollster", @@ -1429,9 +1429,9 @@ dependencies = [ "glutin_glx_sys", "glutin_wgl_sys", "libloading", - "objc2", + "objc2 0.5.2", "objc2-app-kit", - "objc2-foundation", + "objc2-foundation 0.2.2", "once_cell", "raw-window-handle", "wayland-sys", @@ -2423,6 +2423,15 @@ dependencies = [ "objc2-encode", ] +[[package]] +name = "objc2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3531f65190d9cff863b77a99857e74c314dd16bf56c538c4b57c7cbc3f3a6e59" +dependencies = [ + "objc2-encode", +] + [[package]] name = "objc2-app-kit" version = "0.2.2" @@ -2432,10 +2441,10 @@ dependencies = [ "bitflags 2.9.0", "block2", "libc", - "objc2", + "objc2 0.5.2", "objc2-core-data", "objc2-core-image", - "objc2-foundation", + "objc2-foundation 0.2.2", "objc2-quartz-core", ] @@ -2447,9 +2456,9 @@ checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ "bitflags 2.9.0", "block2", - "objc2", + "objc2 0.5.2", "objc2-core-location", - "objc2-foundation", + "objc2-foundation 0.2.2", ] [[package]] @@ -2459,8 +2468,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" dependencies = [ "block2", - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -2471,8 +2480,8 @@ checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ "bitflags 2.9.0", "block2", - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -2482,8 +2491,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" dependencies = [ "block2", - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", "objc2-metal", ] @@ -2494,9 +2503,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" dependencies = [ "block2", - "objc2", + "objc2 0.5.2", "objc2-contacts", - "objc2-foundation", + "objc2-foundation 0.2.2", ] [[package]] @@ -2515,7 +2524,17 @@ dependencies = [ "block2", "dispatch", "libc", - "objc2", + "objc2 0.5.2", +] + +[[package]] +name = "objc2-foundation" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a21c6c9014b82c39515db5b396f91645182611c97d24637cf56ac01e5f8d998" +dependencies = [ + "bitflags 2.9.0", + "objc2 0.6.0", ] [[package]] @@ -2525,9 +2544,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" dependencies = [ "block2", - "objc2", + "objc2 0.5.2", "objc2-app-kit", - "objc2-foundation", + "objc2-foundation 0.2.2", ] [[package]] @@ -2538,8 +2557,8 @@ checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ "bitflags 2.9.0", "block2", - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -2550,8 +2569,8 @@ checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ "bitflags 2.9.0", "block2", - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", "objc2-metal", ] @@ -2561,8 +2580,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" dependencies = [ - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -2573,12 +2592,12 @@ checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ "bitflags 2.9.0", "block2", - "objc2", + "objc2 0.5.2", "objc2-cloud-kit", "objc2-core-data", "objc2-core-image", "objc2-core-location", - "objc2-foundation", + "objc2-foundation 0.2.2", "objc2-link-presentation", "objc2-quartz-core", "objc2-symbols", @@ -2593,8 +2612,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" dependencies = [ "block2", - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -2605,9 +2624,9 @@ checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ "bitflags 2.9.0", "block2", - "objc2", + "objc2 0.5.2", "objc2-core-location", - "objc2-foundation", + "objc2-foundation 0.2.2", ] [[package]] @@ -2827,11 +2846,11 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.7.35", + "zerocopy 0.8.23", ] [[package]] @@ -3149,9 +3168,9 @@ dependencies = [ "core-foundation-sys", "js-sys", "log", - "objc2", + "objc2 0.5.2", "objc2-app-kit", - "objc2-foundation", + "objc2-foundation 0.2.2", "pollster", "raw-window-handle", "urlencoding", @@ -3223,9 +3242,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dade4812df5c384711475be5fcd8c162555352945401aed22a35bffeab61f657" +checksum = "f7178faa4b75a30e269c71e61c353ce2748cf3d76f0c44c393f4e60abf49b825" dependencies = [ "bitflags 2.9.0", "errno", @@ -3345,9 +3364,9 @@ checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" [[package]] name = "serde" -version = "1.0.218" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] @@ -3363,9 +3382,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.218" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", @@ -3630,9 +3649,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.99" +version = "2.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e02e925281e18ffd9d640e234264753c43edc62d64b2d4cf898f1bc5e75f3fc2" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" dependencies = [ "proc-macro2", "quote", @@ -3669,7 +3688,7 @@ dependencies = [ "fastrand", "getrandom 0.3.1", "once_cell", - "rustix 1.0.1", + "rustix 1.0.2", "windows-sys 0.59.0", ] @@ -3790,9 +3809,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.43.0" +version = "1.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" +checksum = "9975ea0f48b5aa3972bf2d888c238182458437cc2a19374b81b25cdf1023fb3a" dependencies = [ "backtrace", "bytes", @@ -4299,18 +4318,17 @@ dependencies = [ [[package]] name = "webbrowser" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea9fe1ebb156110ff855242c1101df158b822487e4957b0556d9ffce9db0f535" +checksum = "d5df295f8451142f1856b1bd86a606dfe9587d439bc036e319c827700dbd555e" dependencies = [ - "block2", "core-foundation 0.10.0", "home", "jni", "log", "ndk-context", - "objc2", - "objc2-foundation", + "objc2 0.6.0", + "objc2-foundation 0.3.0", "url", "web-sys", ] @@ -4793,9 +4811,9 @@ dependencies = [ "libc", "memmap2", "ndk", - "objc2", + "objc2 0.5.2", "objc2-app-kit", - "objc2-foundation", + "objc2-foundation 0.2.2", "objc2-ui-kit", "orbclient", "percent-encoding", @@ -5020,7 +5038,6 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ - "byteorder", "zerocopy-derive 0.7.35", ] From 8aa23e1665a67c55b3d814b152a161627f5af4db Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 10 Mar 2025 17:22:51 +0100 Subject: [PATCH 0386/1117] bump to 1.0.12 (#316) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 080fe7c..89f4281 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1482,7 +1482,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.0.11" +version = "1.0.12" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index 89da9a4..6674d3d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.11" +version = "1.0.12" edition = "2024" rust-version = "1.85" From 84dcc6c154b11df66b4ca6b297b128eb5e96b0df Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 10 Mar 2025 22:53:16 +0100 Subject: [PATCH 0387/1117] fix image scale when using upscaling (#317) --- parallel-rdp/interface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 977cdbf..81d12d3 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -414,7 +414,7 @@ static void render_frame(Vulkan::Device &device) if (image) { VkViewport vp = cmd->get_viewport(); - calculate_viewport(&vp.x, &vp.y, &vp.width, &vp.height, image->get_height()); + calculate_viewport(&vp.x, &vp.y, &vp.width, &vp.height, image->get_height() / gfx_info.upscale); if (gfx_info.crt) { From dff9fc5381e8e5d6372f95a9a4cbfa48d291deb5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 10 Mar 2025 23:01:21 +0100 Subject: [PATCH 0388/1117] bump to 1.0.13 (#318) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 89f4281..8eed09b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1482,7 +1482,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.0.12" +version = "1.0.13" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index 6674d3d..6be305f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.12" +version = "1.0.13" edition = "2024" rust-version = "1.85" From 6e10bee216dd7e0a6e9e1846ee7c1833a0d1ba60 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 11 Mar 2025 09:43:09 +0100 Subject: [PATCH 0389/1117] use glow for egui (#321) * Revert "use GL backend for GUI to avoid conflicts with game window (#287)" This reverts commit 00964f06f061c3a0bd270981ab7ed5bee6600da1. * use glow --- Cargo.lock | 25 +++++++++++-------------- Cargo.toml | 2 +- src/main.rs | 12 ------------ 3 files changed, 12 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8eed09b..61c7522 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -565,9 +565,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.31" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "027bb0d98429ae334a8698531da7077bdf906419543a35a55c2cb1b66437d767" +checksum = "6088f3ae8c3608d19260cd7445411865a485688711b78b5be70d78cd96136f83" dependencies = [ "clap_builder", "clap_derive", @@ -575,9 +575,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.31" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5589e0cba072e0f3d23791efac0fd8627b49c829c196a492e88168e6a669d863" +checksum = "22a7ef7f676155edfb82daa97f99441f3ebf4a58d5e32f295a56259f1b6facc8" dependencies = [ "anstream", "anstyle", @@ -587,9 +587,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.28" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" +checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" dependencies = [ "heck", "proc-macro2", @@ -927,6 +927,7 @@ dependencies = [ "egui-wgpu", "egui-winit", "egui_glow", + "glow", "glutin", "glutin-winit", "image", @@ -937,7 +938,6 @@ dependencies = [ "objc2-foundation 0.2.2", "parking_lot", "percent-encoding", - "pollster", "profiling", "raw-window-handle", "static_assertions", @@ -945,7 +945,6 @@ dependencies = [ "wasm-bindgen-futures", "web-sys", "web-time", - "wgpu", "winapi", "windows-sys 0.59.0", "winit", @@ -1950,9 +1949,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" dependencies = [ "equivalent", "hashbrown 0.15.2", @@ -2640,9 +2639,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.3" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" +checksum = "cde51589ab56b20a6f686b2c68f7a0bd6add753d697abf720d63f8db3ab7b1ad" [[package]] name = "option-ext" @@ -4360,7 +4359,6 @@ dependencies = [ "document-features", "js-sys", "log", - "naga", "parking_lot", "profiling", "raw-window-handle", @@ -4409,7 +4407,6 @@ dependencies = [ "arrayvec", "ash", "bitflags 2.9.0", - "block", "bytemuck", "cfg_aliases", "core-graphics-types", diff --git a/Cargo.toml b/Cargo.toml index 6be305f..1670ba1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,7 @@ chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde-big-array = "0.5" -eframe = { version = "0.31", default-features = false, features = ["wayland", "x11", "wgpu"] } +eframe = { version = "0.31", default-features = false, features = ["wayland", "x11", "glow"] } sha2 = "0.10" rusttype = "0.9" sdl3-sys = { version = "0.4", features = ["build-from-source-static"] } diff --git a/src/main.rs b/src/main.rs index 27fab5c..0446cb8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -169,18 +169,6 @@ async fn main() { handle.join().unwrap(); } else { let options = eframe::NativeOptions { - wgpu_options: eframe::egui_wgpu::WgpuConfiguration { - wgpu_setup: eframe::egui_wgpu::WgpuSetup::CreateNew( - eframe::egui_wgpu::WgpuSetupCreateNew { - instance_descriptor: eframe::egui_wgpu::wgpu::InstanceDescriptor { - backends: eframe::wgpu::Backends::GL, - ..Default::default() - }, - ..Default::default() - }, - ), - ..Default::default() - }, viewport: eframe::egui::ViewportBuilder::default() .with_inner_size([854.0, 480.0]) .with_icon( From 139d66eb82dd6759d5b9fc80a3d7089ad01c0636 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 11 Mar 2025 14:52:57 +0100 Subject: [PATCH 0390/1117] use vector for rdram_dirty (#322) --- parallel-rdp/interface.cpp | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 81d12d3..e083376 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -84,7 +84,7 @@ typedef struct float OutputSize[4]; } Push; -static uint8_t *rdram_dirty; +static std::vector rdram_dirty; static uint64_t sync_signal; static FrameBufferInfo frame_buffer_info; @@ -207,7 +207,7 @@ void rdp_new_processor(GFX_INFO _gfx_info) { memset(&frame_buffer_info, 0, sizeof(FrameBufferInfo)); sync_signal = 0; - memset(rdram_dirty, 0, gfx_info.RDRAM_SIZE / 8); + rdram_dirty.assign(rdram_dirty.size(), false); gfx_info = _gfx_info; if (processor) @@ -270,7 +270,8 @@ void rdp_init(void *_window, GFX_INFO _gfx_info) rdp_close(); } - rdram_dirty = (uint8_t *)malloc(gfx_info.RDRAM_SIZE / 8); + rdram_dirty.resize(gfx_info.RDRAM_SIZE / 8); + rdp_new_processor(gfx_info); if (!processor->device_is_supported()) @@ -289,12 +290,6 @@ void rdp_init(void *_window, GFX_INFO _gfx_info) void rdp_close() { - if (rdram_dirty) - { - free(rdram_dirty); - rdram_dirty = nullptr; - } - wsi->end_frame(); if (processor) @@ -464,7 +459,7 @@ void rdp_check_framebuffers(uint32_t address) if (sync_signal && rdram_dirty[address >> 3]) { processor->wait_for_timeline(sync_signal); - memset(rdram_dirty, 0, gfx_info.RDRAM_SIZE / 8); + rdram_dirty.assign(rdram_dirty.size(), false); sync_signal = 0; } } @@ -564,7 +559,7 @@ uint64_t rdp_process_commands() { for (uint32_t i = frame_buffer_info.framebuffer_address; i < frame_buffer_info.framebuffer_address + frame_buffer_info.framebuffer_size; ++i) { - rdram_dirty[i] = 1; + rdram_dirty[i] = true; } } @@ -572,7 +567,7 @@ uint64_t rdp_process_commands() { for (uint32_t i = frame_buffer_info.depthbuffer_address; i < frame_buffer_info.depthbuffer_address + frame_buffer_info.depthbuffer_size; ++i) { - rdram_dirty[i] = 1; + rdram_dirty[i] = true; } } } From ec2f47e5d3878d697d268860a7583100292da9fe Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 11 Mar 2025 15:08:35 +0100 Subject: [PATCH 0391/1117] cleanup vector code --- parallel-rdp/interface.cpp | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index e083376..5a48613 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -207,7 +207,7 @@ void rdp_new_processor(GFX_INFO _gfx_info) { memset(&frame_buffer_info, 0, sizeof(FrameBufferInfo)); sync_signal = 0; - rdram_dirty.assign(rdram_dirty.size(), false); + rdram_dirty.assign(gfx_info.RDRAM_SIZE / 8, false); gfx_info = _gfx_info; if (processor) @@ -270,8 +270,6 @@ void rdp_init(void *_window, GFX_INFO _gfx_info) rdp_close(); } - rdram_dirty.resize(gfx_info.RDRAM_SIZE / 8); - rdp_new_processor(gfx_info); if (!processor->device_is_supported()) @@ -459,7 +457,7 @@ void rdp_check_framebuffers(uint32_t address) if (sync_signal && rdram_dirty[address >> 3]) { processor->wait_for_timeline(sync_signal); - rdram_dirty.assign(rdram_dirty.size(), false); + rdram_dirty.assign(gfx_info.RDRAM_SIZE / 8, false); sync_signal = 0; } } @@ -557,18 +555,12 @@ uint64_t rdp_process_commands() { if (!rdram_dirty[frame_buffer_info.framebuffer_address]) { - for (uint32_t i = frame_buffer_info.framebuffer_address; i < frame_buffer_info.framebuffer_address + frame_buffer_info.framebuffer_size; ++i) - { - rdram_dirty[i] = true; - } + std::fill_n(rdram_dirty.begin() + frame_buffer_info.framebuffer_address, frame_buffer_info.framebuffer_size, true); } if (frame_buffer_info.depthbuffer_enabled && !rdram_dirty[frame_buffer_info.depthbuffer_address]) { - for (uint32_t i = frame_buffer_info.depthbuffer_address; i < frame_buffer_info.depthbuffer_address + frame_buffer_info.depthbuffer_size; ++i) - { - rdram_dirty[i] = true; - } + std::fill_n(rdram_dirty.begin() + frame_buffer_info.depthbuffer_address, frame_buffer_info.depthbuffer_size, true); } } else if (RDP::Op(command) == RDP::Op::SetOtherModes) From 2a3fa03b35fca62b92c79b5c5a7746647cf3501f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 13 Mar 2025 07:09:52 +0100 Subject: [PATCH 0392/1117] update cargo packages --- Cargo.lock | 237 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 180 insertions(+), 57 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 61c7522..f697f99 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -178,7 +178,7 @@ dependencies = [ "image", "log", "objc2 0.5.2", - "objc2-app-kit", + "objc2-app-kit 0.2.2", "objc2-foundation 0.2.2", "parking_lot", "windows-sys 0.48.0", @@ -208,22 +208,19 @@ dependencies = [ [[package]] name = "ashpd" -version = "0.10.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9c39d707614dbcc6bed00015539f488d8e3fe3e66ed60961efc0c90f4b380b3" +checksum = "6cbdf310d77fd3aaee6ea2093db7011dc2d35d2eb3481e5607f1f8d942ed99df" dependencies = [ "enumflags2", "futures-channel", "futures-util", - "rand 0.8.5", + "rand 0.9.0", "raw-window-handle", "serde", "serde_repr", "tokio", "url", - "wayland-backend", - "wayland-client", - "wayland-protocols", "zbus", ] @@ -392,6 +389,15 @@ dependencies = [ "objc2 0.5.2", ] +[[package]] +name = "block2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d59b4c170e16f0405a2e95aff44432a0d41aa97675f3d52623effe95792a037" +dependencies = [ + "objc2 0.6.0", +] + [[package]] name = "bumpalo" version = "3.17.0" @@ -863,6 +869,18 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" +[[package]] +name = "dispatch2" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a0d569e003ff27784e0e14e4a594048698e0c0f0b66cabcb51511be55a7caa0" +dependencies = [ + "bitflags 2.9.0", + "block2 0.6.0", + "libc", + "objc2 0.6.0", +] + [[package]] name = "displaydoc" version = "0.2.5" @@ -934,7 +952,7 @@ dependencies = [ "js-sys", "log", "objc2 0.5.2", - "objc2-app-kit", + "objc2-app-kit 0.2.2", "objc2-foundation 0.2.2", "parking_lot", "percent-encoding", @@ -1429,7 +1447,7 @@ dependencies = [ "glutin_wgl_sys", "libloading", "objc2 0.5.2", - "objc2-app-kit", + "objc2-app-kit 0.2.2", "objc2-foundation 0.2.2", "once_cell", "raw-window-handle", @@ -1677,9 +1695,9 @@ dependencies = [ [[package]] name = "http" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" dependencies = [ "bytes", "fnv", @@ -1698,12 +1716,12 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", - "futures-util", + "futures-core", "http", "http-body", "pin-project-lite", @@ -2059,9 +2077,9 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] name = "libc" -version = "0.2.170" +version = "0.2.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" +checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" [[package]] name = "libloading" @@ -2438,7 +2456,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ "bitflags 2.9.0", - "block2", + "block2 0.5.1", "libc", "objc2 0.5.2", "objc2-core-data", @@ -2447,6 +2465,18 @@ dependencies = [ "objc2-quartz-core", ] +[[package]] +name = "objc2-app-kit" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5906f93257178e2f7ae069efb89fbd6ee94f0592740b5f8a1512ca498814d0fb" +dependencies = [ + "bitflags 2.9.0", + "block2 0.6.0", + "objc2 0.6.0", + "objc2-foundation 0.3.0", +] + [[package]] name = "objc2-cloud-kit" version = "0.2.2" @@ -2454,7 +2484,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ "bitflags 2.9.0", - "block2", + "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", "objc2-foundation 0.2.2", @@ -2466,7 +2496,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" dependencies = [ - "block2", + "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", ] @@ -2478,18 +2508,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ "bitflags 2.9.0", - "block2", + "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", ] +[[package]] +name = "objc2-core-foundation" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daeaf60f25471d26948a1c2f840e3f7d86f4109e3af4e8e4b5cd70c39690d925" +dependencies = [ + "bitflags 2.9.0", + "objc2 0.6.0", +] + [[package]] name = "objc2-core-image" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" dependencies = [ - "block2", + "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", "objc2-metal", @@ -2501,7 +2541,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" dependencies = [ - "block2", + "block2 0.5.1", "objc2 0.5.2", "objc2-contacts", "objc2-foundation 0.2.2", @@ -2520,7 +2560,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ "bitflags 2.9.0", - "block2", + "block2 0.5.1", "dispatch", "libc", "objc2 0.5.2", @@ -2534,6 +2574,7 @@ checksum = "3a21c6c9014b82c39515db5b396f91645182611c97d24637cf56ac01e5f8d998" dependencies = [ "bitflags 2.9.0", "objc2 0.6.0", + "objc2-core-foundation", ] [[package]] @@ -2542,9 +2583,9 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" dependencies = [ - "block2", + "block2 0.5.1", "objc2 0.5.2", - "objc2-app-kit", + "objc2-app-kit 0.2.2", "objc2-foundation 0.2.2", ] @@ -2555,7 +2596,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ "bitflags 2.9.0", - "block2", + "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", ] @@ -2567,7 +2608,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ "bitflags 2.9.0", - "block2", + "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", "objc2-metal", @@ -2590,7 +2631,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ "bitflags 2.9.0", - "block2", + "block2 0.5.1", "objc2 0.5.2", "objc2-cloud-kit", "objc2-core-data", @@ -2610,7 +2651,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" dependencies = [ - "block2", + "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", ] @@ -2622,7 +2663,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ "bitflags 2.9.0", - "block2", + "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", "objc2-foundation 0.2.2", @@ -2964,9 +3005,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1f1914ce909e1658d9907913b4b91947430c7d9be598b15a1912935b8c04801" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] @@ -3112,9 +3153,9 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] name = "reqwest" -version = "0.12.12" +version = "0.12.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" +checksum = "989e327e510263980e231de548a33e63d34962d29ae61b467389a1a09627a254" dependencies = [ "base64", "bytes", @@ -3157,19 +3198,19 @@ dependencies = [ [[package]] name = "rfd" -version = "0.15.2" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a24763657bff09769a8ccf12c8b8a50416fb035fe199263b4c5071e4e3f006f" +checksum = "80c844748fdc82aae252ee4594a89b6e7ebef1063de7951545564cbc4e57075d" dependencies = [ "ashpd", - "block2", - "core-foundation 0.10.0", - "core-foundation-sys", + "block2 0.6.0", + "dispatch2", "js-sys", "log", - "objc2 0.5.2", - "objc2-app-kit", - "objc2-foundation 0.2.2", + "objc2 0.6.0", + "objc2-app-kit 0.3.0", + "objc2-core-foundation", + "objc2-foundation 0.3.0", "pollster", "raw-window-handle", "urlencoding", @@ -3181,9 +3222,9 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.13" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ac5d832aa16abd7d1def883a8545280c20a60f523a370aa3a9617c2b8550ee" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", @@ -4508,8 +4549,8 @@ checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" dependencies = [ "windows-implement", "windows-interface", - "windows-result", - "windows-strings", + "windows-result 0.2.0", + "windows-strings 0.1.0", "windows-targets 0.52.6", ] @@ -4543,13 +4584,13 @@ checksum = "6dccfd733ce2b1753b03b6d3c65edf020262ea35e20ccdf3e288043e6dd620e3" [[package]] name = "windows-registry" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" dependencies = [ - "windows-result", - "windows-strings", - "windows-targets 0.52.6", + "windows-result 0.3.1", + "windows-strings 0.3.1", + "windows-targets 0.53.0", ] [[package]] @@ -4561,16 +4602,34 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-result" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06374efe858fab7e4f881500e6e86ec8bc28f9462c47e5a9941a0142ad86b189" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-strings" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" dependencies = [ - "windows-result", + "windows-result 0.2.0", "windows-targets 0.52.6", ] +[[package]] +name = "windows-strings" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.45.0" @@ -4646,13 +4705,29 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", + "windows_i686_gnullvm 0.52.6", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows-targets" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" +dependencies = [ + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -4671,6 +4746,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -4689,6 +4770,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -4707,12 +4794,24 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -4731,6 +4830,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -4749,6 +4854,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -4767,6 +4878,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" @@ -4785,6 +4902,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + [[package]] name = "winit" version = "0.30.9" @@ -4795,7 +4918,7 @@ dependencies = [ "android-activity", "atomic-waker", "bitflags 2.9.0", - "block2", + "block2 0.5.1", "bytemuck", "calloop", "cfg_aliases", @@ -4809,7 +4932,7 @@ dependencies = [ "memmap2", "ndk", "objc2 0.5.2", - "objc2-app-kit", + "objc2-app-kit 0.2.2", "objc2-foundation 0.2.2", "objc2-ui-kit", "orbclient", @@ -4838,9 +4961,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1" +checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36" dependencies = [ "memchr", ] From 9d18673257b995510c758982f6e9631a39b4c4dc Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 13 Mar 2025 07:20:29 +0100 Subject: [PATCH 0393/1117] bump to 1.0.14 (#328) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f697f99..86778a2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1499,7 +1499,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.0.13" +version = "1.0.14" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index 1670ba1..6f9894f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.13" +version = "1.0.14" edition = "2024" rust-version = "1.85" From 5528f233c01d58584896bf0bdb545514cf6b661a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 13 Mar 2025 16:51:41 +0100 Subject: [PATCH 0394/1117] fix compile warning --- parallel-rdp/wsi_platform.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parallel-rdp/wsi_platform.cpp b/parallel-rdp/wsi_platform.cpp index 5259c7c..e991187 100644 --- a/parallel-rdp/wsi_platform.cpp +++ b/parallel-rdp/wsi_platform.cpp @@ -28,7 +28,7 @@ std::vector SDL_WSIPlatform::get_instance_extensions() } std::vector extensionNames; - for (int i = 0; i < extensionCount; ++i) + for (unsigned int i = 0; i < extensionCount; ++i) { extensionNames.push_back(extensions[i]); } From 11b1137412979a0dd22ac95713c498e84e530a05 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 13 Mar 2025 21:03:50 +0100 Subject: [PATCH 0395/1117] update netplay server name --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a5573cc..78a42de 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ In order to use a controller (for example, an Xbox controller), run `./gopher64 ## netplay -Gopher64 supports netplay (online play with others). It has a few public netplay servers. If you are interested in running a public netplay server, please let me know (open an issue or discussion, or contact me on Discord). You can also run the server (https://github.com/simple64/simple64-netplay-server) yourself on a LAN. +Gopher64 supports netplay (online play with others). It has a few public netplay servers. If you are interested in running a public netplay server, please let me know (open an issue or discussion, or contact me on Discord). You can also run the server (https://github.com/gopher64/gopher64-netplay-server) yourself on a LAN. ## portable mode From e48ad9bdffffb2c722f11adf847c1d8dd6f85dcb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 15 Mar 2025 11:11:18 +0100 Subject: [PATCH 0396/1117] add way to change audio volume (#330) * add way to change audio volume * more --- parallel-rdp/interface.cpp | 8 ++++++++ parallel-rdp/interface.hpp | 2 ++ src/ui/audio.rs | 22 ++++++++++++++++++++++ src/ui/video.rs | 6 ++++++ 4 files changed, 38 insertions(+) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 5a48613..84bbe29 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -195,6 +195,12 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) case SDL_SCANCODE_F7: callback.load_state = true; break; + case SDL_SCANCODE_LEFTBRACKET: + callback.lower_volume = true; + break; + case SDL_SCANCODE_RIGHTBRACKET: + callback.raise_volume = true; + break; default: break; } @@ -449,6 +455,8 @@ CALL_BACK rdp_check_callback() CALL_BACK return_value = callback; callback.save_state = false; callback.load_state = false; + callback.lower_volume = false; + callback.raise_volume = false; return return_value; } diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 5a0323e..8856e47 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -30,6 +30,8 @@ extern "C" bool save_state; bool load_state; bool enable_speedlimiter; + bool lower_volume; + bool raise_volume; } CALL_BACK; void rdp_init(void *_window, GFX_INFO _gfx_info); diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 3fc1d8f..37cb482 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -86,6 +86,28 @@ pub fn close(ui: &mut ui::Ui) { } } +pub fn lower_audio_volume(ui: &ui::Ui) { + unsafe { + let mut gain = sdl3_sys::audio::SDL_GetAudioStreamGain(ui.audio.audio_stream) - 0.05; + if gain < 0.0 { + gain = 0.0; + } + sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.audio_stream, gain); + sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.event_audio_stream, gain); + } +} + +pub fn raise_audio_volume(ui: &ui::Ui) { + unsafe { + let mut gain = sdl3_sys::audio::SDL_GetAudioStreamGain(ui.audio.audio_stream) + 0.05; + if gain > 1.0 { + gain = 1.0; + } + sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.audio_stream, gain); + sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.event_audio_stream, gain); + } +} + pub fn play_netplay_audio(ui: &mut ui::Ui, error: u32) { if ui.audio.event_audio_stream.is_null() { return; diff --git a/src/ui/video.rs b/src/ui/video.rs index 84b19bc..7d336e7 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -114,6 +114,12 @@ pub fn check_callback(device: &mut device::Device) { } device.vi.enable_speed_limiter = callback.enable_speedlimiter; } + + if callback.lower_volume { + ui::audio::lower_audio_volume(&device.ui); + } else if callback.raise_volume { + ui::audio::raise_audio_volume(&device.ui); + } } pub fn set_register(reg: u32, value: u32) { From ea6f203e3327abe38ff7348709c445026439d882 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 15 Mar 2025 20:21:46 +0100 Subject: [PATCH 0397/1117] allow up to 200% audio volume (#331) --- src/ui/audio.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 37cb482..cce7288 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -100,8 +100,8 @@ pub fn lower_audio_volume(ui: &ui::Ui) { pub fn raise_audio_volume(ui: &ui::Ui) { unsafe { let mut gain = sdl3_sys::audio::SDL_GetAudioStreamGain(ui.audio.audio_stream) + 0.05; - if gain > 1.0 { - gain = 1.0; + if gain > 2.0 { + gain = 2.0; } sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.audio_stream, gain); sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.event_audio_stream, gain); From cba7bc7477e8e4c7800f648623003eb640012111 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 16 Mar 2025 07:18:05 +0100 Subject: [PATCH 0398/1117] ensure gain setting persists --- src/ui.rs | 2 ++ src/ui/audio.rs | 33 +++++++++++++++++++-------------- src/ui/video.rs | 4 ++-- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index a7ff5e7..9f4b2b2 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -17,6 +17,7 @@ pub struct Audio { pub event_audio_stream: *mut sdl3_sys::audio::SDL_AudioStream, pub audio_device: u32, pub event_audio: audio::EventAudio, + pub gain: f32, } pub struct Input { @@ -188,6 +189,7 @@ impl Ui { audio_stream: std::ptr::null_mut(), event_audio_stream: std::ptr::null_mut(), audio_device: 0, + gain: 1.0, }, video: Video { window: std::ptr::null_mut(), diff --git a/src/ui/audio.rs b/src/ui/audio.rs index cce7288..eb3887d 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -51,7 +51,8 @@ pub fn init(ui: &mut ui::Ui, frequency: u64) { return; } if !unsafe { - sdl3_sys::audio::SDL_BindAudioStream(ui.audio.audio_device, ui.audio.audio_stream) + sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.audio_stream, ui.audio.gain) + && sdl3_sys::audio::SDL_BindAudioStream(ui.audio.audio_device, ui.audio.audio_stream) } { panic!("Could not bind audio stream"); } @@ -65,7 +66,11 @@ pub fn init(ui: &mut ui::Ui, frequency: u64) { ui.audio.event_audio_stream = unsafe { sdl3_sys::audio::SDL_CreateAudioStream(&wav_audio_spec, &dst) }; if !unsafe { - sdl3_sys::audio::SDL_BindAudioStream(ui.audio.audio_device, ui.audio.event_audio_stream) + sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.event_audio_stream, ui.audio.gain) + && sdl3_sys::audio::SDL_BindAudioStream( + ui.audio.audio_device, + ui.audio.event_audio_stream, + ) } { panic!("Could not bind audio stream"); } @@ -86,25 +91,25 @@ pub fn close(ui: &mut ui::Ui) { } } -pub fn lower_audio_volume(ui: &ui::Ui) { +pub fn lower_audio_volume(ui: &mut ui::Ui) { unsafe { - let mut gain = sdl3_sys::audio::SDL_GetAudioStreamGain(ui.audio.audio_stream) - 0.05; - if gain < 0.0 { - gain = 0.0; + ui.audio.gain = sdl3_sys::audio::SDL_GetAudioStreamGain(ui.audio.audio_stream) - 0.05; + if ui.audio.gain < 0.0 { + ui.audio.gain = 0.0; } - sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.audio_stream, gain); - sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.event_audio_stream, gain); + sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.audio_stream, ui.audio.gain); + sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.event_audio_stream, ui.audio.gain); } } -pub fn raise_audio_volume(ui: &ui::Ui) { +pub fn raise_audio_volume(ui: &mut ui::Ui) { unsafe { - let mut gain = sdl3_sys::audio::SDL_GetAudioStreamGain(ui.audio.audio_stream) + 0.05; - if gain > 2.0 { - gain = 2.0; + ui.audio.gain = sdl3_sys::audio::SDL_GetAudioStreamGain(ui.audio.audio_stream) + 0.05; + if ui.audio.gain > 2.0 { + ui.audio.gain = 2.0; } - sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.audio_stream, gain); - sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.event_audio_stream, gain); + sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.audio_stream, ui.audio.gain); + sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.event_audio_stream, ui.audio.gain); } } diff --git a/src/ui/video.rs b/src/ui/video.rs index 7d336e7..755b13a 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -116,9 +116,9 @@ pub fn check_callback(device: &mut device::Device) { } if callback.lower_volume { - ui::audio::lower_audio_volume(&device.ui); + ui::audio::lower_audio_volume(&mut device.ui); } else if callback.raise_volume { - ui::audio::raise_audio_volume(&device.ui); + ui::audio::raise_audio_volume(&mut device.ui); } } From b07dde87685fe5c568cb7229e8911f990d474108 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 16 Mar 2025 07:35:37 +0100 Subject: [PATCH 0399/1117] disable mempak for Chameleon Twist (#332) --- src/device/pif.rs | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/device/pif.rs b/src/device/pif.rs index f595b6f..d9dea17 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -232,6 +232,23 @@ pub fn connect_pif_channels(device: &mut device::Device) { device.pif.channels[4].process = Some(device::cart::process) } +pub fn get_default_handler(device: &device::Device) -> device::controller::PakHandler { + if device.ui.game_id == "NCT" { + // Chameleon Twist does not support the mempak + device::controller::PakHandler { + read: device::controller::rumble::read, + write: device::controller::rumble::write, + pak_type: device::controller::PakType::RumblePak, + } + } else { + device::controller::PakHandler { + read: device::controller::mempak::read, + write: device::controller::mempak::write, + pak_type: device::controller::PakType::MemPak, + } + } +} + pub fn init(device: &mut device::Device) { if device.cart.pal { device.pif.rom = rom::PAL_PIF_ROM; @@ -241,11 +258,7 @@ pub fn init(device: &mut device::Device) { device.pif.ram[0x26] = device.cart.cic_seed; device.pif.ram[0x27] = device.cart.cic_seed; - let mempak_handler = device::controller::PakHandler { - read: device::controller::mempak::read, - write: device::controller::mempak::write, - pak_type: device::controller::PakType::MemPak, - }; + let default_handler = get_default_handler(device); let tpak_handler = device::controller::PakHandler { read: device::controller::transferpak::read, write: device::controller::transferpak::write, @@ -258,13 +271,13 @@ pub fn init(device: &mut device::Device) { if device.netplay.is_none() { if device.ui.config.input.controller_enabled[i] { if device.transferpaks[i].cart.rom.is_empty() { - device.pif.channels[i].pak_handler = Some(mempak_handler); + device.pif.channels[i].pak_handler = Some(default_handler); } else { device.pif.channels[i].pak_handler = Some(tpak_handler); } } } else if device.netplay.as_ref().unwrap().player_data[i].reg_id != 0 { - device.pif.channels[i].pak_handler = Some(mempak_handler); + device.pif.channels[i].pak_handler = Some(default_handler); } } if device.ui.config.input.emulate_vru { From 433f08c7e011886fe060823cebfabc341cdc46c9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 16 Mar 2025 07:55:10 +0100 Subject: [PATCH 0400/1117] Update README.md --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 78a42de..5cf3173 100644 --- a/README.md +++ b/README.md @@ -15,17 +15,17 @@ https://discord.gg/9RGXq8W8JQ Keys are mapped according to [these defaults](https://github.com/gopher64/gopher64/wiki/Default-Keyboard-Setup). Xbox-style controllers also have a [default mapping applied](https://github.com/gopher64/gopher64/wiki/Default-Gamepad-Setup). -You can create you own mappings by running `./gopher64 --configure-input-profile my_profile`. You then bind that profile to a port: `./gopher64 --bind-input-profile my_profile --port 1` +You can create your mappings by running `./gopher64 --configure-input-profile my_profile`. You then bind that profile to a port: `./gopher64 --bind-input-profile my_profile --port 1` -In order to use a controller (for example, an Xbox controller), run `./gopher64 --list-controllers` to get a list of attached controllers, and then assign it by doing `./gopher64 --assign-controller --port 1` +To use a controller (for example, an Xbox controller), run `./gopher64 --list-controllers` to get a list of attached controllers, and then assign it by doing `./gopher64 --assign-controller --port 1` ## netplay -Gopher64 supports netplay (online play with others). It has a few public netplay servers. If you are interested in running a public netplay server, please let me know (open an issue or discussion, or contact me on Discord). You can also run the server (https://github.com/gopher64/gopher64-netplay-server) yourself on a LAN. +Gopher64 supports netplay (online play with others). It has a few public netplay servers. If you are interested in running a public netplay server, please let me know (open an issue or discussion or contact me on Discord). You can also run the server (https://github.com/gopher64/gopher64-netplay-server) yourself on a LAN. ## portable mode -If you would like to keep all the game data in the same folder as executable, you just need to create a file called "portable.txt" in the same directory as the executable. +If you would like to keep all the game data in the same folder as the executable, you just need to create a file called "portable.txt" in the same directory as the executable. ## flatpak @@ -39,7 +39,7 @@ flatpak run --filesystem=host:ro io.github.gopher64.gopher64 /path/to/rom.z64 1. Performance. I want to be able to use this emulator on my laptop. 2. Easy to use. -3. Easy to work on. Dynamic recompilers perform well, but they are very hard to read and understand. This emulator will only have interpreters for the CPU and RSP. Additionally, it is completely written in Rust (besides Parallel-RDP), a modern programming language with a growing user base. I've tried to avoid the use of macros, which can reduce some repetitiveness in the code, but also reduce readability. +3. Easy to work on. Dynamic recompilers perform well, but they are very hard to read and understand. This emulator will only have interpreters for the CPU and RSP. Additionally, it is completely written in Rust (besides Parallel-RDP), a modern programming language with a growing user base. I've tried to avoid the use of macros, which can reduce some repetitiveness in the code but also reduce readability. ## building and usage @@ -52,7 +52,7 @@ flatpak run --filesystem=host:ro io.github.gopher64.gopher64 /path/to/rom.z64 ## contributing -I am very open to contributions! Please reach out to me via a GitHub issue, or via discord (loganmc10) before doing substantial work on a PR. +I am very open to contributions! Please contact me via a GitHub issue or Discord (loganmc10) before doing substantial work on a PR. ## license From 1bcadb3a8b4d11ecf8b905fe16e1dd2e74e5d873 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 16 Mar 2025 09:48:32 +0100 Subject: [PATCH 0401/1117] remove un-needed mut (#333) * remove un-needed mut * more * more --- src/device/ai.rs | 2 +- src/device/cart/rom.rs | 2 +- src/device/controller.rs | 10 +++++----- src/device/controller/gbcart.rs | 16 ++++++++-------- src/device/controller/rumble.rs | 4 ++-- src/device/controller/transferpak.rs | 4 ++-- src/device/events.rs | 4 ++-- src/device/pif.rs | 2 +- src/device/rsp_su_instructions.rs | 14 +++++++------- src/device/tlb.rs | 4 ++-- src/netplay.rs | 6 +++--- src/savestates.rs | 2 +- src/ui/audio.rs | 6 +++--- src/ui/gui.rs | 2 +- src/ui/input.rs | 4 ++-- src/ui/storage.rs | 12 ++++++------ 16 files changed, 47 insertions(+), 47 deletions(-) diff --git a/src/device/ai.rs b/src/device/ai.rs index 919fa4e..fbc989f 100644 --- a/src/device/ai.rs +++ b/src/device/ai.rs @@ -27,7 +27,7 @@ pub struct AiDma { pub duration: u64, } -fn get_remaining_dma_length(device: &mut device::Device) -> u64 { +fn get_remaining_dma_length(device: &device::Device) -> u64 { if device.ai.fifo[0].duration == 0 { return 0; } diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 1bd953d..985d73c 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -4,7 +4,7 @@ use sha2::{Digest, Sha256}; const CART_MASK: usize = 0xFFFFFFF; -fn read_cart_word(device: &mut device::Device, address: usize) -> u32 { +fn read_cart_word(device: &device::Device, address: usize) -> u32 { let mut data: [u8; 4] = [0; 4]; for i in 0..4 { if let Some(value) = device diff --git a/src/device/controller.rs b/src/device/controller.rs index a8f4b5e..c4ceb64 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -57,10 +57,10 @@ pub fn process(device: &mut device::Device, channel: usize) { JCMD_CONTROLLER_READ => { let offset = device.pif.channels[channel].rx_buf.unwrap(); let input = if device.netplay.is_none() { - ui::input::get(&mut device.ui, channel) + ui::input::get(&device.ui, channel) } else { if device.netplay.as_ref().unwrap().player_number as usize == channel { - let local_input = ui::input::get(&mut device.ui, 0); + let local_input = ui::input::get(&device.ui, 0); netplay::send_input(device.netplay.as_ref().unwrap(), local_input); } @@ -163,9 +163,9 @@ pub fn pak_switch_event(device: &mut device::Device) { if channel.change_pak != PakType::None { //stop rumble if it is on if device.netplay.is_none() { - device::ui::input::set_rumble(&mut device.ui, i, 0); + device::ui::input::set_rumble(&device.ui, i, 0); } else if device.netplay.as_ref().unwrap().player_number as usize == i { - device::ui::input::set_rumble(&mut device.ui, 0, 0); + device::ui::input::set_rumble(&device.ui, 0, 0); } let new_pak_type = match channel.change_pak { @@ -202,7 +202,7 @@ pub fn pak_switch_event(device: &mut device::Device) { pak_type: new_pak_type, }); } - ui::audio::play_pak_switch(&mut device.ui, new_pak_type); + ui::audio::play_pak_switch(&device.ui, new_pak_type); channel.change_pak = PakType::None; } } diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index b31275d..2b67dc0 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -29,7 +29,7 @@ pub enum CartType { } fn write_mbc1( - pif_ram: &mut [u8], + pif_ram: &[u8], cart: &mut device::controller::gbcart::GbCart, address: u16, data: usize, @@ -66,7 +66,7 @@ fn write_mbc1( fn read_mbc1( pif_ram: &mut [u8], - cart: &mut device::controller::gbcart::GbCart, + cart: &device::controller::gbcart::GbCart, address: u16, data: usize, size: usize, @@ -100,7 +100,7 @@ fn read_mbc1( } fn write_mbc3( - pif_ram: &mut [u8], + pif_ram: &[u8], cart: &mut device::controller::gbcart::GbCart, address: u16, data: usize, @@ -161,7 +161,7 @@ fn write_mbc3( fn read_mbc3( pif_ram: &mut [u8], - cart: &mut device::controller::gbcart::GbCart, + cart: &device::controller::gbcart::GbCart, address: u16, data: usize, size: usize, @@ -213,7 +213,7 @@ fn read_mbc3( } fn write_mbc5( - pif_ram: &mut [u8], + pif_ram: &[u8], cart: &mut device::controller::gbcart::GbCart, address: u16, data: usize, @@ -247,7 +247,7 @@ fn write_mbc5( fn read_mbc5( pif_ram: &mut [u8], - cart: &mut device::controller::gbcart::GbCart, + cart: &device::controller::gbcart::GbCart, address: u16, data: usize, size: usize, @@ -278,7 +278,7 @@ fn read_mbc5( pub fn read( pif_ram: &mut [u8], - cart: &mut device::controller::gbcart::GbCart, + cart: &device::controller::gbcart::GbCart, address: u16, data: usize, size: usize, @@ -299,7 +299,7 @@ pub fn read( } pub fn write( - pif_ram: &mut [u8], + pif_ram: &[u8], cart: &mut device::controller::gbcart::GbCart, address: u16, data: usize, diff --git a/src/device/controller/rumble.rs b/src/device/controller/rumble.rs index 36d5aa5..2109cbb 100644 --- a/src/device/controller/rumble.rs +++ b/src/device/controller/rumble.rs @@ -16,9 +16,9 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us if address == 0xc000 { let rumble = device.pif.ram[data + size - 1]; if device.netplay.is_none() { - device::ui::input::set_rumble(&mut device.ui, channel, rumble); + device::ui::input::set_rumble(&device.ui, channel, rumble); } else if device.netplay.as_ref().unwrap().player_number as usize == channel { - device::ui::input::set_rumble(&mut device.ui, 0, rumble); + device::ui::input::set_rumble(&device.ui, 0, rumble); } } } diff --git a/src/device/controller/transferpak.rs b/src/device/controller/transferpak.rs index 858f8a8..9704afc 100644 --- a/src/device/controller/transferpak.rs +++ b/src/device/controller/transferpak.rs @@ -54,7 +54,7 @@ pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usi 0xC..=0xF => { device::controller::gbcart::read( &mut device.pif.ram, - &mut pak.cart, + &pak.cart, 0x4000 * pak.bank + (address & 0x7fff) - 0x4000, data, size, @@ -119,7 +119,7 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us } 0xC..=0xF => { device::controller::gbcart::write( - &mut device.pif.ram, + &device.pif.ram, &mut pak.cart, 0x4000 * pak.bank + (address & 0x7fff) - 0x4000, data, diff --git a/src/device/events.rs b/src/device/events.rs index 49f1874..8d85e15 100644 --- a/src/device/events.rs +++ b/src/device/events.rs @@ -36,9 +36,9 @@ pub fn create_event_at(device: &mut device::Device, name: usize, when: u64) { set_next_event(device); } -pub fn get_event(device: &mut device::Device, name: usize) -> Option<&mut Event> { +pub fn get_event(device: &device::Device, name: usize) -> Option<&Event> { if device.cpu.events[name].enabled { - return Some(&mut device.cpu.events[name]); + return Some(&device.cpu.events[name]); } None } diff --git a/src/device/pif.rs b/src/device/pif.rs index d9dea17..eaf6e2b 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -232,7 +232,7 @@ pub fn connect_pif_channels(device: &mut device::Device) { device.pif.channels[4].process = Some(device::cart::process) } -pub fn get_default_handler(device: &device::Device) -> device::controller::PakHandler { +fn get_default_handler(device: &device::Device) -> device::controller::PakHandler { if device.ui.game_id == "NCT" { // Chameleon Twist does not support the mempak device::controller::PakHandler { diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index eb8a6f5..498b82c 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -606,19 +606,19 @@ pub fn mfc2(device: &mut device::Device, opcode: u32) { pub fn cfc2(device: &mut device::Device, opcode: u32) { let hi; let lo; - let mut zero = unsafe { _mm_setzero_si128() }; + let zero = unsafe { _mm_setzero_si128() }; match rd(opcode) & 3 { 0x00 => { - hi = &mut device.rsp.cpu.vcoh; - lo = &mut device.rsp.cpu.vcol; + hi = &device.rsp.cpu.vcoh; + lo = &device.rsp.cpu.vcol; } 0x01 => { - hi = &mut device.rsp.cpu.vcch; - lo = &mut device.rsp.cpu.vccl; + hi = &device.rsp.cpu.vcch; + lo = &device.rsp.cpu.vccl; } 0x02 | 0x03 => { - hi = &mut zero; - lo = &mut device.rsp.cpu.vce; + hi = &zero; + lo = &device.rsp.cpu.vce; } _ => { panic!("unknown cfc2") diff --git a/src/device/tlb.rs b/src/device/tlb.rs index 5c0cd89..b6e58db 100644 --- a/src/device/tlb.rs +++ b/src/device/tlb.rs @@ -146,7 +146,7 @@ pub fn probe(device: &mut device::Device) { } fn tlb_unmap(device: &mut device::Device, index: u64) { - let e = &mut device.cpu.cop0.tlb_entries[index as usize]; + let e = &device.cpu.cop0.tlb_entries[index as usize]; if e.v_even != 0 { let mut i = e.start_even; @@ -184,7 +184,7 @@ fn tlb_unmap(device: &mut device::Device, index: u64) { } fn tlb_map(device: &mut device::Device, index: u64) { - let e = &mut device.cpu.cop0.tlb_entries[index as usize]; + let e = &device.cpu.cop0.tlb_entries[index as usize]; if e.v_even != 0 && e.start_even < e.end_even diff --git a/src/netplay.rs b/src/netplay.rs index f251a4a..6b7c68c 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -144,7 +144,7 @@ pub fn get_input(device: &mut device::Device, channel: usize) -> ui::input::Inpu let timeout = std::time::Instant::now() + std::time::Duration::from_secs(10); let mut request_timer = std::time::Instant::now() - std::time::Duration::from_millis(5); while input.is_none() { - process_incoming(netplay, &mut device.ui); // we execute process_incoming before request_input so that we send an accurate buffer count + process_incoming(netplay, &device.ui); // we execute process_incoming before request_input so that we send an accurate buffer count if std::time::Instant::now() > request_timer { // sends a request packet every 5ms request_input(netplay, channel); @@ -155,7 +155,7 @@ pub fn get_input(device: &mut device::Device, channel: usize) -> ui::input::Inpu .remove(&netplay.player_data[channel].count); if std::time::Instant::now() > timeout { - ui::audio::play_netplay_audio(&mut device.ui, NETPLAY_ERROR_LOST_CONNECTION); + ui::audio::play_netplay_audio(&device.ui, NETPLAY_ERROR_LOST_CONNECTION); input = Some(InputEvent { input: 0, plugin: 0, @@ -186,7 +186,7 @@ fn request_input(netplay: &Netplay, channel: usize) { netplay.udp_socket.send(&request).unwrap(); } -fn process_incoming(netplay: &mut Netplay, ui: &mut ui::Ui) { +fn process_incoming(netplay: &mut Netplay, ui: &ui::Ui) { let mut buf: [u8; 1024] = [0; 1024]; while let Ok(_incoming) = netplay.udp_socket.recv(&mut buf) { match buf[0] { diff --git a/src/savestates.rs b/src/savestates.rs index d75520c..2fd0d72 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -88,7 +88,7 @@ pub fn create_savestate(device: &device::Device) { } pub fn load_savestate(device: &mut device::Device) { - let savestate = std::fs::read(&mut device.ui.storage.paths.savestate_file_path); + let savestate = std::fs::read(&device.ui.storage.paths.savestate_file_path); if savestate.is_ok() { let device_bytes = ui::storage::decompress_file(savestate.as_ref().unwrap(), "device"); let save_bytes = ui::storage::decompress_file(savestate.as_ref().unwrap(), "saves"); diff --git a/src/ui/audio.rs b/src/ui/audio.rs index eb3887d..dbfccf3 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -113,7 +113,7 @@ pub fn raise_audio_volume(ui: &mut ui::Ui) { } } -pub fn play_netplay_audio(ui: &mut ui::Ui, error: u32) { +pub fn play_netplay_audio(ui: &ui::Ui, error: u32) { if ui.audio.event_audio_stream.is_null() { return; } @@ -145,7 +145,7 @@ pub fn play_netplay_audio(ui: &mut ui::Ui, error: u32) { } } -pub fn play_pak_switch(ui: &mut ui::Ui, pak: device::controller::PakType) { +pub fn play_pak_switch(ui: &ui::Ui, pak: device::controller::PakType) { if ui.audio.event_audio_stream.is_null() { return; } @@ -167,7 +167,7 @@ pub fn play_pak_switch(ui: &mut ui::Ui, pak: device::controller::PakType) { } } -pub fn play_audio(device: &mut device::Device, dram_addr: usize, length: u64) { +pub fn play_audio(device: &device::Device, dram_addr: usize, length: u64) { if device.ui.audio.audio_stream.is_null() { return; } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 313c035..454572c 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -194,7 +194,7 @@ impl Drop for GopherEguiApp { fn configure_profile(app: &mut GopherEguiApp, ctx: &egui::Context) { egui::Window::new("Configure Input Profile") - // .open(&mut self.configure_profile) + // .open(& self.configure_profile) .show(ctx, |ui| { ui.horizontal(|ui| { let name_label = ui.label("Profile Name:"); diff --git a/src/ui/input.rs b/src/ui/input.rs index 92f6a00..54f5359 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -276,7 +276,7 @@ fn set_buttons_from_controller( } } -pub fn set_rumble(ui: &mut ui::Ui, channel: usize, rumble: u8) { +pub fn set_rumble(ui: &ui::Ui, channel: usize, rumble: u8) { if !ui.input.controllers[channel].rumble { return; } @@ -334,7 +334,7 @@ fn change_paks( pressed } -pub fn get(ui: &mut ui::Ui, channel: usize) -> InputData { +pub fn get(ui: &ui::Ui, channel: usize) -> InputData { let profile_name = ui.config.input.input_profile_binding[channel].clone(); let profile = ui.config.input.input_profiles.get(&profile_name).unwrap(); let mut keys = 0; diff --git a/src/ui/storage.rs b/src/ui/storage.rs index 4cae812..b600c5b 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -196,27 +196,27 @@ pub fn init(ui: &mut ui::Ui, rom: &[u8]) { pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { if netplay.is_none() || netplay.as_ref().unwrap().player_number == 0 { - let eep = std::fs::read(&mut ui.storage.paths.eep_file_path); + let eep = std::fs::read(&ui.storage.paths.eep_file_path); if eep.is_ok() { ui.storage.saves.eeprom.data = eep.unwrap(); } - let sra = std::fs::read(&mut ui.storage.paths.sra_file_path); + let sra = std::fs::read(&ui.storage.paths.sra_file_path); if sra.is_ok() { ui.storage.saves.sram.data = sra.unwrap(); } - let fla = std::fs::read(&mut ui.storage.paths.fla_file_path); + let fla = std::fs::read(&ui.storage.paths.fla_file_path); if fla.is_ok() { ui.storage.saves.flash.data = fla.unwrap(); } - let mempak = std::fs::read(&mut ui.storage.paths.pak_file_path); + let mempak = std::fs::read(&ui.storage.paths.pak_file_path); if mempak.is_ok() { ui.storage.saves.mempak.data = mempak.unwrap(); } - let sdcard = std::fs::read(&mut ui.storage.paths.sdcard_file_path); + let sdcard = std::fs::read(&ui.storage.paths.sdcard_file_path); if sdcard.is_ok() { ui.storage.saves.sdcard.data = sdcard.unwrap(); } - let romsave = std::fs::read(&mut ui.storage.paths.romsave_file_path); + let romsave = std::fs::read(&ui.storage.paths.romsave_file_path); if romsave.is_ok() { ui.storage.saves.romsave.data = postcard::from_bytes(romsave.unwrap().as_ref()).unwrap(); From da9b2247f858ed13cd68cf6166246772719b7b56 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 16 Mar 2025 10:10:16 +0100 Subject: [PATCH 0402/1117] remove more mut (#334) --- src/device.rs | 2 +- src/device/cart/rom.rs | 2 +- src/device/memory.rs | 4 ++-- src/device/rdram.rs | 2 +- src/device/rsp_interface.rs | 2 +- src/device/unmapped.rs | 12 ++++++++++-- src/savestates.rs | 5 +++++ 7 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/device.rs b/src/device.rs index 5f751aa..0f06a91 100644 --- a/src/device.rs +++ b/src/device.rs @@ -348,7 +348,7 @@ impl Device { }, }, memory: memory::Memory { - fast_read: [unmapped::read_mem; 0x2000], + fast_read: [unmapped::read_mem_fast; 0x2000], memory_map_read: [unmapped::read_mem; 0x2000], memory_map_write: [unmapped::write_mem; 0x2000], icache: [cache::ICache { diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 985d73c..9d8300d 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -24,7 +24,7 @@ fn read_cart_word(device: &device::Device, address: usize) -> u32 { } pub fn read_mem_fast( - device: &mut device::Device, + device: &device::Device, address: u64, _access_size: device::memory::AccessSize, ) -> u32 { diff --git a/src/device/memory.rs b/src/device/memory.rs index 825dbb9..167c342 100644 --- a/src/device/memory.rs +++ b/src/device/memory.rs @@ -40,8 +40,8 @@ pub enum AccessSize { #[derive(serde::Serialize, serde::Deserialize)] pub struct Memory { - #[serde(skip, default = "savestates::default_memory_read")] - pub fast_read: [fn(&mut device::Device, u64, AccessSize) -> u32; 0x2000], // fast_read is used for lookups that try to detect idle loops + #[serde(skip, default = "savestates::default_memory_read_fast")] + pub fast_read: [fn(&device::Device, u64, AccessSize) -> u32; 0x2000], // fast_read is used for lookups that try to detect idle loops #[serde(skip, default = "savestates::default_memory_read")] pub memory_map_read: [fn(&mut device::Device, u64, AccessSize) -> u32; 0x2000], #[serde(skip, default = "savestates::default_memory_write")] diff --git a/src/device/rdram.rs b/src/device/rdram.rs index 04ef5a4..5d9b0f7 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -24,7 +24,7 @@ pub struct Rdram { } pub fn read_mem_fast( - device: &mut device::Device, + device: &device::Device, address: u64, _access_size: device::memory::AccessSize, ) -> u32 { diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index bcf8376..47780f5 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -89,7 +89,7 @@ pub struct Rsp { } pub fn read_mem_fast( - device: &mut device::Device, + device: &device::Device, address: u64, _access_size: device::memory::AccessSize, ) -> u32 { diff --git a/src/device/unmapped.rs b/src/device/unmapped.rs index 520648b..3188eab 100644 --- a/src/device/unmapped.rs +++ b/src/device/unmapped.rs @@ -1,7 +1,7 @@ use crate::device; -pub fn read_mem( - _device: &mut device::Device, +pub fn read_mem_fast( + _device: &device::Device, address: u64, _access_size: device::memory::AccessSize, ) -> u32 { @@ -9,4 +9,12 @@ pub fn read_mem( value | (value << 16) } +pub fn read_mem( + device: &mut device::Device, + address: u64, + access_size: device::memory::AccessSize, +) -> u32 { + read_mem_fast(device, address, access_size) +} + pub fn write_mem(_device: &mut device::Device, _address: u64, _value: u32, _mask: u32) {} diff --git a/src/savestates.rs b/src/savestates.rs index 2fd0d72..7fbcf7e 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -216,6 +216,11 @@ where [device::cop0::reserved; N] } +pub fn default_memory_read_fast() +-> [fn(&device::Device, u64, device::memory::AccessSize) -> u32; 0x2000] { + [device::rdram::read_mem_fast; 0x2000] +} + pub fn default_memory_read() -> [fn(&mut device::Device, u64, device::memory::AccessSize) -> u32; 0x2000] { [device::rdram::read_mem; 0x2000] From a182fbb1f934ff33608853408e79e4303c2b2acb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 16 Mar 2025 10:11:50 +0100 Subject: [PATCH 0403/1117] cleanup function --- src/ui/gui.rs | 56 ++++++++++++++++++++++++--------------------------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 454572c..faaad4a 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -193,37 +193,33 @@ impl Drop for GopherEguiApp { } fn configure_profile(app: &mut GopherEguiApp, ctx: &egui::Context) { - egui::Window::new("Configure Input Profile") - // .open(& self.configure_profile) - .show(ctx, |ui| { - ui.horizontal(|ui| { - let name_label = ui.label("Profile Name:"); - ui.text_edit_singleline(&mut app.profile_name) - .labelled_by(name_label.id); - }); - ui.checkbox(&mut app.dinput, "Use DirectInput"); - ui.horizontal(|ui| { - if ui.button("Configure Profile").clicked() { - let profile_name = app.profile_name.clone(); - let dinput = app.dinput; - std::thread::spawn(move || { - let mut game_ui = ui::Ui::new(); - ui::input::configure_input_profile(&mut game_ui, profile_name, dinput); - }); - app.configure_profile = false; - if !app.profile_name.is_empty() - && !app.input_profiles.contains(&app.profile_name) - { - app.input_profiles.push(app.profile_name.clone()) - } - }; - ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { - if ui.button("Close").clicked() { - app.configure_profile = false - }; - }) - }); + egui::Window::new("Configure Input Profile").show(ctx, |ui| { + ui.horizontal(|ui| { + let name_label = ui.label("Profile Name:"); + ui.text_edit_singleline(&mut app.profile_name) + .labelled_by(name_label.id); }); + ui.checkbox(&mut app.dinput, "Use DirectInput"); + ui.horizontal(|ui| { + if ui.button("Configure Profile").clicked() { + let profile_name = app.profile_name.clone(); + let dinput = app.dinput; + std::thread::spawn(move || { + let mut game_ui = ui::Ui::new(); + ui::input::configure_input_profile(&mut game_ui, profile_name, dinput); + }); + app.configure_profile = false; + if !app.profile_name.is_empty() && !app.input_profiles.contains(&app.profile_name) { + app.input_profiles.push(app.profile_name.clone()) + } + }; + ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { + if ui.button("Close").clicked() { + app.configure_profile = false + }; + }) + }); + }); } fn show_vru_dialog(app: &mut GopherEguiApp, ctx: &egui::Context) { From ca61695dd1245f12ba6be9c60d956f471f6ac8b1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 16 Mar 2025 10:13:23 +0100 Subject: [PATCH 0404/1117] update cargo packages --- Cargo.lock | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 86778a2..b0833e7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -249,9 +249,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.87" +version = "0.1.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d556ec1359574147ec0c4fc5eb525f3f23263a592b1a9c07e0a75b427de55c97" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", @@ -1231,9 +1231,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "foreign-types" @@ -2120,9 +2120,9 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9c683daf087dc577b7506e9695b3d556a9f3849903fa28186283afd6809e9" +checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413" [[package]] name = "litemap" @@ -2680,9 +2680,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.0" +version = "1.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde51589ab56b20a6f686b2c68f7a0bd6add753d697abf720d63f8db3ab7b1ad" +checksum = "d75b0bedcc4fe52caa0e03d9f1151a323e4aa5e2d78ba3580400cd3c9e2bc4bc" [[package]] name = "option-ext" @@ -2895,9 +2895,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.30" +version = "0.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1ccf34da56fc294e7d4ccf69a85992b7dfb826b7cf57bac6a70bba3494cc08a" +checksum = "5316f57387668042f561aae71480de936257848f9c43ce528e311d89a07cadeb" dependencies = [ "proc-macro2", "syn", @@ -3289,7 +3289,7 @@ dependencies = [ "bitflags 2.9.0", "errno", "libc", - "linux-raw-sys 0.9.2", + "linux-raw-sys 0.9.3", "windows-sys 0.59.0", ] @@ -3616,9 +3616,9 @@ dependencies = [ [[package]] name = "spin_sleep" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4196b31c8c1dc443543be4f4d0e827657fbf2b87387e5c8f229b14f1c046718a" +checksum = "17db5ecef7e0bebeb8bf8bc4c4b554e05e0205d7008f10bb37787892e7a6507b" dependencies = [ "windows-sys 0.59.0", ] @@ -3720,11 +3720,10 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.18.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c317e0a526ee6120d8dabad239c8dadca62b24b6f168914bbbc8e2fb1f0e567" +checksum = "488960f40a3fd53d72c2a29a58722561dee8afdd175bd88e3db4677d7b2ba600" dependencies = [ - "cfg-if", "fastrand", "getrandom 0.3.1", "once_cell", @@ -3849,9 +3848,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.44.0" +version = "1.44.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9975ea0f48b5aa3972bf2d888c238182458437cc2a19374b81b25cdf1023fb3a" +checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a" dependencies = [ "backtrace", "bytes", @@ -3888,9 +3887,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.13" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034" dependencies = [ "bytes", "futures-core", From f6b0b59bbc366570cdff3a8e9fd4a5ef8822144d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 16 Mar 2025 10:32:32 +0100 Subject: [PATCH 0405/1117] fix savestate default memory --- src/savestates.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/savestates.rs b/src/savestates.rs index 7fbcf7e..798e384 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -218,14 +218,14 @@ where pub fn default_memory_read_fast() -> [fn(&device::Device, u64, device::memory::AccessSize) -> u32; 0x2000] { - [device::rdram::read_mem_fast; 0x2000] + [device::unmapped::read_mem_fast; 0x2000] } pub fn default_memory_read() -> [fn(&mut device::Device, u64, device::memory::AccessSize) -> u32; 0x2000] { - [device::rdram::read_mem; 0x2000] + [device::unmapped::read_mem; 0x2000] } pub fn default_memory_write() -> [fn(&mut device::Device, u64, u32, u32); 0x2000] { - [device::rdram::write_mem; 0x2000] + [device::unmapped::write_mem; 0x2000] } From dbab58f4a7a05474461736f1e4afa245381b207c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 16 Mar 2025 17:10:16 +0100 Subject: [PATCH 0406/1117] catch possible error in loading save state (#335) --- src/savestates.rs | 192 +++++++++++++++++++++++----------------------- 1 file changed, 97 insertions(+), 95 deletions(-) diff --git a/src/savestates.rs b/src/savestates.rs index 798e384..b392ee7 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -92,112 +92,114 @@ pub fn load_savestate(device: &mut device::Device) { if savestate.is_ok() { let device_bytes = ui::storage::decompress_file(savestate.as_ref().unwrap(), "device"); let save_bytes = ui::storage::decompress_file(savestate.as_ref().unwrap(), "saves"); - let state: device::Device = postcard::from_bytes(&device_bytes).unwrap(); + if let Ok(state) = postcard::from_bytes::(&device_bytes) { + device.ui.storage.saves = postcard::from_bytes(&save_bytes).unwrap(); - device.ui.storage.saves = postcard::from_bytes(&save_bytes).unwrap(); + device.cpu = state.cpu; + device.pif = state.pif; - device.cpu = state.cpu; - device.pif = state.pif; + let rom = device.cart.rom.clone(); + device.cart = state.cart; + device.cart.rom = rom; - let rom = device.cart.rom.clone(); - device.cart = state.cart; - device.cart.rom = rom; + device.memory = state.memory; + device.rsp = state.rsp; + device.rdp = state.rdp; + device.rdram = state.rdram; + device.mi = state.mi; + device.pi = state.pi; + device.vi = state.vi; + device.ai = state.ai; + device.si = state.si; + device.ri = state.ri; + device.vru = state.vru; - device.memory = state.memory; - device.rsp = state.rsp; - device.rdp = state.rdp; - device.rdram = state.rdram; - device.mi = state.mi; - device.pi = state.pi; - device.vi = state.vi; - device.ai = state.ai; - device.si = state.si; - device.ri = state.ri; - device.vru = state.vru; + let mut tpak_rom = [vec![], vec![], vec![], vec![]]; + for (i, item) in tpak_rom.iter_mut().enumerate() { + *item = device.transferpaks[i].cart.rom.clone(); + } + device.transferpaks = state.transferpaks; + for (i, item) in tpak_rom.iter().enumerate() { + device.transferpaks[i].cart.rom = item.clone(); + } - let mut tpak_rom = [vec![], vec![], vec![], vec![]]; - for (i, item) in tpak_rom.iter_mut().enumerate() { - *item = device.transferpaks[i].cart.rom.clone(); - } - device.transferpaks = state.transferpaks; - for (i, item) in tpak_rom.iter().enumerate() { - device.transferpaks[i].cart.rom = item.clone(); - } + device::memory::init(device); + device::vi::set_expected_refresh_rate(device); + device::cpu::map_instructions(device); + device::cop0::map_instructions(device); + device::cop1::map_instructions(device); + device::cop2::map_instructions(device); + device::rsp_cpu::map_instructions(device); - device::memory::init(device); - device::vi::set_expected_refresh_rate(device); - device::cpu::map_instructions(device); - device::cop0::map_instructions(device); - device::cop1::map_instructions(device); - device::cop2::map_instructions(device); - device::rsp_cpu::map_instructions(device); + let mut mem_addr = 0x1000; + while mem_addr < 0x2000 { + let data = + u32::from_be_bytes(device.rsp.mem[mem_addr..mem_addr + 4].try_into().unwrap()); + device.rsp.cpu.instructions[(mem_addr & 0xFFF) / 4].func = + device::rsp_cpu::decode_opcode(device, data); + device.rsp.cpu.instructions[(mem_addr & 0xFFF) / 4].opcode = data; + mem_addr += 4; + } - let mut mem_addr = 0x1000; - while mem_addr < 0x2000 { - let data = - u32::from_be_bytes(device.rsp.mem[mem_addr..mem_addr + 4].try_into().unwrap()); - device.rsp.cpu.instructions[(mem_addr & 0xFFF) / 4].func = - device::rsp_cpu::decode_opcode(device, data); - device.rsp.cpu.instructions[(mem_addr & 0xFFF) / 4].opcode = data; - mem_addr += 4; - } + for line_index in 0..512 { + device.memory.icache[line_index].instruction[0] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[0]); + device.memory.icache[line_index].instruction[1] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[1]); + device.memory.icache[line_index].instruction[2] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[2]); + device.memory.icache[line_index].instruction[3] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[3]); + device.memory.icache[line_index].instruction[4] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[4]); + device.memory.icache[line_index].instruction[5] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[5]); + device.memory.icache[line_index].instruction[6] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[6]); + device.memory.icache[line_index].instruction[7] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[7]); + } - for line_index in 0..512 { - device.memory.icache[line_index].instruction[0] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[0]); - device.memory.icache[line_index].instruction[1] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[1]); - device.memory.icache[line_index].instruction[2] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[2]); - device.memory.icache[line_index].instruction[3] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[3]); - device.memory.icache[line_index].instruction[4] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[4]); - device.memory.icache[line_index].instruction[5] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[5]); - device.memory.icache[line_index].instruction[6] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[6]); - device.memory.icache[line_index].instruction[7] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[7]); - } - - device::pif::connect_pif_channels(device); - for i in 0..4 { - if device.pif.channels[i].pak_handler.is_some() { - if device.pif.channels[i].pak_handler.unwrap().pak_type - == device::controller::PakType::RumblePak - { - let rumblepak_handler = device::controller::PakHandler { - read: device::controller::rumble::read, - write: device::controller::rumble::write, - pak_type: device::controller::PakType::RumblePak, - }; - device.pif.channels[i].pak_handler = Some(rumblepak_handler); - } else if device.pif.channels[i].pak_handler.unwrap().pak_type - == device::controller::PakType::MemPak - { - let mempak_handler = device::controller::PakHandler { - read: device::controller::mempak::read, - write: device::controller::mempak::write, - pak_type: device::controller::PakType::MemPak, - }; - device.pif.channels[i].pak_handler = Some(mempak_handler); - } else if device.pif.channels[i].pak_handler.unwrap().pak_type - == device::controller::PakType::TransferPak - { - let tpak_handler = device::controller::PakHandler { - read: device::controller::transferpak::read, - write: device::controller::transferpak::write, - pak_type: device::controller::PakType::TransferPak, - }; - device.pif.channels[i].pak_handler = Some(tpak_handler); + device::pif::connect_pif_channels(device); + for i in 0..4 { + if device.pif.channels[i].pak_handler.is_some() { + if device.pif.channels[i].pak_handler.unwrap().pak_type + == device::controller::PakType::RumblePak + { + let rumblepak_handler = device::controller::PakHandler { + read: device::controller::rumble::read, + write: device::controller::rumble::write, + pak_type: device::controller::PakType::RumblePak, + }; + device.pif.channels[i].pak_handler = Some(rumblepak_handler); + } else if device.pif.channels[i].pak_handler.unwrap().pak_type + == device::controller::PakType::MemPak + { + let mempak_handler = device::controller::PakHandler { + read: device::controller::mempak::read, + write: device::controller::mempak::write, + pak_type: device::controller::PakType::MemPak, + }; + device.pif.channels[i].pak_handler = Some(mempak_handler); + } else if device.pif.channels[i].pak_handler.unwrap().pak_type + == device::controller::PakType::TransferPak + { + let tpak_handler = device::controller::PakHandler { + read: device::controller::transferpak::read, + write: device::controller::transferpak::write, + pak_type: device::controller::PakType::TransferPak, + }; + device.pif.channels[i].pak_handler = Some(tpak_handler); + } } } - } - ui::audio::close(&mut device.ui); - ui::audio::init(&mut device.ui, device.ai.freq); - ui::video::load_state(device); + ui::audio::close(&mut device.ui); + ui::audio::init(&mut device.ui, device.ai.freq); + ui::video::load_state(device); + } else { + println!("Failed to load savestate"); + } } } From 48575f9c521cd09518578528661bc31def5c436c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 16 Mar 2025 20:31:57 +0100 Subject: [PATCH 0407/1117] fix windows cross compile (#336) --- Cargo.lock | 30 ++++++++++++++++++++++++------ Cargo.toml | 2 +- build.rs | 11 +++++++++-- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b0833e7..e83fed4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1528,7 +1528,7 @@ dependencies = [ "spin_sleep", "tokio", "tungstenite", - "winres", + "winresource", "zip", ] @@ -3454,6 +3454,15 @@ dependencies = [ "syn", ] +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -3900,11 +3909,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.11" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" dependencies = [ "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", ] [[package]] @@ -3912,6 +3924,9 @@ name = "toml_datetime" version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] [[package]] name = "toml_edit" @@ -3920,6 +3935,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ "indexmap", + "serde", + "serde_spanned", "toml_datetime", "winnow", ] @@ -4968,12 +4985,13 @@ dependencies = [ ] [[package]] -name = "winres" -version = "0.1.12" +name = "winresource" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c" +checksum = "ba4a67c78ee5782c0c1cb41bebc7e12c6e79644daa1650ebbc1de5d5b08593f7" dependencies = [ "toml", + "version_check", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 6f9894f..4e44696 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,7 +35,7 @@ clap = { version = "4.5", features = ["derive"] } reqwest = { version = "0.12", default-features = false, features = ["http2","rustls-tls","charset","json"] } [build-dependencies] -winres = "0.1" +winresource = "0.1" bindgen = "0.71" cc = { version = "1.2", features = ["parallel"] } diff --git a/build.rs b/build.rs index 0b20db2..509dfbf 100644 --- a/build.rs +++ b/build.rs @@ -59,9 +59,16 @@ fn main() { let os = std::env::var("CARGO_CFG_TARGET_OS").unwrap(); let arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap(); + let env = std::env::var("CARGO_CFG_TARGET_ENV").unwrap(); if os == "windows" { if arch == "x86_64" { - build.flag("/arch:AVX2"); + if env == "msvc" { + build.flag("/arch:AVX2"); + } else if env == "gnu" { + build.flag("-march=x86-64-v3"); + } else { + panic!("unknown env") + } } else if arch == "aarch64" { panic!("unsupported platform") } else { @@ -69,7 +76,7 @@ fn main() { } build.flag("-DVK_USE_PLATFORM_WIN32_KHR"); - winres::WindowsResource::new() + winresource::WindowsResource::new() .set_icon("data/icon.ico") .compile() .unwrap(); From f2966230f949a6cf95bc880e891ed6d420d3893c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 17 Mar 2025 09:46:09 +0100 Subject: [PATCH 0408/1117] Fix freeze in Bass Hunter 64 (#339) --- parallel-rdp/interface.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 84bbe29..10cfbb5 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -61,7 +61,7 @@ static int cmd_cur; static int cmd_ptr; static CALL_BACK callback; static GFX_INFO gfx_info; -static uint32_t region; +static int32_t region; static bool crop_letterbox; static const uint32_t *fragment_spirv; static size_t fragment_size; @@ -593,6 +593,9 @@ uint64_t rdp_process_commands() uint32_t lower_right_x = ((w2 >> 12) & 0xFFF) >> 2; uint32_t lower_right_y = (w2 & 0xFFF) >> 2; region = (lower_right_x - upper_left_x) * (lower_right_y - upper_left_y); + if (region < 0) + region = 0; + frame_buffer_info.framebuffer_height = lower_right_y; calculate_buffer_size(); } From 5d692318fef7edb88e12a4a197cd6149c1783be4 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 17 Mar 2025 10:06:26 +0100 Subject: [PATCH 0409/1117] better region check --- parallel-rdp/interface.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 10cfbb5..697d898 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -61,7 +61,7 @@ static int cmd_cur; static int cmd_ptr; static CALL_BACK callback; static GFX_INFO gfx_info; -static int32_t region; +static uint32_t region; static bool crop_letterbox; static const uint32_t *fragment_spirv; static size_t fragment_size; @@ -592,9 +592,14 @@ uint64_t rdp_process_commands() uint32_t upper_left_y = (w1 & 0xFFF) >> 2; uint32_t lower_right_x = ((w2 >> 12) & 0xFFF) >> 2; uint32_t lower_right_y = (w2 & 0xFFF) >> 2; - region = (lower_right_x - upper_left_x) * (lower_right_y - upper_left_y); - if (region < 0) + if (lower_right_x > upper_left_x && lower_right_y > upper_left_y) + { + region = (lower_right_x - upper_left_x) * (lower_right_y - upper_left_y); + } + else + { region = 0; + } frame_buffer_info.framebuffer_height = lower_right_y; calculate_buffer_size(); From 7ee26961f1b5ea0b88eab9a4a4de0fe2df29bc3f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Mar 2025 09:21:31 +0100 Subject: [PATCH 0410/1117] Bump zip from 2.2.3 to 2.4.1 (#341) Bumps [zip](https://github.com/zip-rs/zip2) from 2.2.3 to 2.4.1. - [Release notes](https://github.com/zip-rs/zip2/releases) - [Changelog](https://github.com/zip-rs/zip2/blob/master/CHANGELOG.md) - [Commits](https://github.com/zip-rs/zip2/compare/v2.2.3...v2.4.1) --- updated-dependencies: - dependency-name: zip dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 27 ++++++++++++++++++++++++--- Cargo.toml | 2 +- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e83fed4..ff2fd97 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2177,6 +2177,17 @@ dependencies = [ "byteorder", ] +[[package]] +name = "lzma-sys" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + [[package]] name = "malloc_buf" version = "0.0.6" @@ -5088,6 +5099,15 @@ version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5b940ebc25896e71dd073bad2dbaa2abfe97b0a391415e22ad1326d9c54e3c4" +[[package]] +name = "xz2" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2" +dependencies = [ + "lzma-sys", +] + [[package]] name = "yoke" version = "0.7.5" @@ -5274,9 +5294,9 @@ dependencies = [ [[package]] name = "zip" -version = "2.2.3" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b280484c454e74e5fff658bbf7df8fdbe7a07c6b2de4a53def232c15ef138f3a" +checksum = "938cc23ac49778ac8340e366ddc422b2227ea176edb447e23fc0627608dddadd" dependencies = [ "aes", "arbitrary", @@ -5287,15 +5307,16 @@ dependencies = [ "deflate64", "displaydoc", "flate2", + "getrandom 0.3.1", "hmac", "indexmap", "lzma-rs", "memchr", "pbkdf2", - "rand 0.8.5", "sha1", "thiserror 2.0.12", "time", + "xz2", "zeroize", "zopfli", "zstd", diff --git a/Cargo.toml b/Cargo.toml index 4e44696..59529a3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ rust-version = "1.85" [dependencies] dirs = "6.0" -zip = "2.2" +zip = "2.4" governor = "0.8" sevenz-rust = "0.6" chrono = "0.4" From bf2734e59c412da6de63fe3c77fdc83ed8de9ba1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 19 Mar 2025 09:56:00 +0100 Subject: [PATCH 0411/1117] update cargo packages --- Cargo.lock | 142 ++++++++++++++++++++++------------------------------- 1 file changed, 60 insertions(+), 82 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ff2fd97..2e87e10 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -215,7 +215,7 @@ dependencies = [ "enumflags2", "futures-channel", "futures-util", - "rand 0.9.0", + "rand", "raw-window-handle", "serde", "serde_repr", @@ -415,9 +415,9 @@ dependencies = [ [[package]] name = "bytemuck_derive" -version = "1.8.1" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" +checksum = "9d35fadd3de6c82a550b136427123552b401efdab9859130f1cf485fbdea40af" dependencies = [ "proc-macro2", "quote", @@ -813,9 +813,9 @@ checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b" [[package]] name = "deranged" -version = "0.3.11" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" dependencies = [ "powerfmt", ] @@ -1384,16 +1384,16 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.13.3+wasi-0.2.2", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", "wasm-bindgen", - "windows-targets 0.52.6", ] [[package]] @@ -1512,7 +1512,7 @@ dependencies = [ "governor", "mimalloc", "postcard", - "rand_chacha 0.9.0", + "rand_chacha", "regex", "reqwest", "rfd", @@ -1543,13 +1543,13 @@ dependencies = [ "futures-sink", "futures-timer", "futures-util", - "getrandom 0.3.1", + "getrandom 0.3.2", "no-std-compat", "nonzero_ext", "parking_lot", "portable-atomic", "quanta", - "rand 0.9.0", + "rand", "smallvec", "spinning_top", "web-time", @@ -2093,9 +2093,9 @@ dependencies = [ [[package]] name = "libmimalloc-sys" -version = "0.1.39" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23aa6811d3bd4deb8a84dde645f943476d13b248d818edcf8ce0b2f37f036b44" +checksum = "07d0e07885d6a754b9c7993f2625187ad694ee985d60f23355ff0e7077261502" dependencies = [ "cc", "libc", @@ -2238,9 +2238,9 @@ dependencies = [ [[package]] name = "mimalloc" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68914350ae34959d83f732418d51e2427a794055d0b9529f48259ac07af65633" +checksum = "99585191385958383e13f6b822e6b6d8d9cf928e7d286ceb092da92b43c87bc1" dependencies = [ "libmimalloc-sys", ] @@ -2964,11 +2964,12 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.6" +version = "0.11.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +checksum = "c3bd15a6f2967aef83887dcb9fec0014580467e33720d073560cf015a5683012" dependencies = [ "bytes", + "cfg_aliases", "pin-project-lite", "quinn-proto", "quinn-udp", @@ -2978,17 +2979,18 @@ dependencies = [ "thiserror 2.0.12", "tokio", "tracing", + "web-time", ] [[package]] name = "quinn-proto" -version = "0.11.9" +version = "0.11.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +checksum = "b820744eb4dc9b57a3398183639c511b5a26d2ed702cedd3febaa1393caa22cc" dependencies = [ "bytes", - "getrandom 0.2.15", - "rand 0.8.5", + "getrandom 0.3.2", + "rand", "ring", "rustc-hash 2.1.1", "rustls", @@ -3024,15 +3026,10 @@ dependencies = [ ] [[package]] -name = "rand" -version = "0.8.5" +name = "r-efi" +version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" [[package]] name = "rand" @@ -3040,21 +3037,11 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.3", + "rand_chacha", + "rand_core", "zerocopy 0.8.23", ] -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - [[package]] name = "rand_chacha" version = "0.9.0" @@ -3062,16 +3049,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.3", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.15", + "rand_core", ] [[package]] @@ -3080,7 +3058,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.1", + "getrandom 0.3.2", ] [[package]] @@ -3164,9 +3142,9 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] name = "reqwest" -version = "0.12.14" +version = "0.12.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e327e510263980e231de548a33e63d34962d29ae61b467389a1a09627a254" +checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb" dependencies = [ "base64", "bytes", @@ -3293,9 +3271,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7178faa4b75a30e269c71e61c353ce2748cf3d76f0c44c393f4e60abf49b825" +checksum = "e56a18552996ac8d29ecc3b190b4fdbb2d91ca4ec396de7bbffaf43f3d637e96" dependencies = [ "bitflags 2.9.0", "errno", @@ -3306,9 +3284,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.23" +version = "0.23.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" +checksum = "822ee9188ac4ec04a2f0531e55d035fb2de73f18b41a63c70c2712503b6fb13c" dependencies = [ "once_cell", "ring", @@ -3338,9 +3316,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.8" +version = "0.103.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +checksum = "0aa4eeac2588ffff23e9d7a7e9b3f971c5fb5b7ebc9452745e0c232c64f83b2f" dependencies = [ "ring", "rustls-pki-types", @@ -3745,9 +3723,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "488960f40a3fd53d72c2a29a58722561dee8afdd175bd88e3db4677d7b2ba600" dependencies = [ "fastrand", - "getrandom 0.3.1", + "getrandom 0.3.2", "once_cell", - "rustix 1.0.2", + "rustix 1.0.3", "windows-sys 0.59.0", ] @@ -3813,9 +3791,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.39" +version = "0.3.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad298b01a40a23aac4580b67e3dbedb7cc8402f3592d7f49469de2ea4aecdd8" +checksum = "9d9c75b47bdff86fa3334a3db91356b8d7d86a9b839dab7d0bdc5c3d3a077618" dependencies = [ "deranged", "num-conv", @@ -3827,15 +3805,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "765c97a5b985b7c11d7bc27fa927dc4fe6af3a6dfb021d28deb60d3bf51e76ef" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" [[package]] name = "time-macros" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8093bc3e81c3bc5f7879de09619d06c9a5a5e45ca44dfeeb7225bae38005c5c" +checksum = "29aa485584182073ed57fd5004aa09c371f021325014694e432313345865fd04" dependencies = [ "num-conv", "time-core", @@ -4039,7 +4017,7 @@ dependencies = [ "http", "httparse", "log", - "rand 0.9.0", + "rand", "sha1", "thiserror 2.0.12", "utf-8", @@ -4176,9 +4154,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasi" -version = "0.13.3+wasi-0.2.2" +version = "0.14.2+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" dependencies = [ "wit-bindgen-rt", ] @@ -4605,9 +4583,9 @@ dependencies = [ [[package]] name = "windows-link" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dccfd733ce2b1753b03b6d3c65edf020262ea35e20ccdf3e288043e6dd620e3" +checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" [[package]] name = "windows-registry" @@ -4615,7 +4593,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" dependencies = [ - "windows-result 0.3.1", + "windows-result 0.3.2", "windows-strings 0.3.1", "windows-targets 0.53.0", ] @@ -4631,9 +4609,9 @@ dependencies = [ [[package]] name = "windows-result" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06374efe858fab7e4f881500e6e86ec8bc28f9462c47e5a9941a0142ad86b189" +checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" dependencies = [ "windows-link", ] @@ -5007,9 +4985,9 @@ dependencies = [ [[package]] name = "wit-bindgen-rt" -version = "0.33.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ "bitflags 2.9.0", ] @@ -5294,9 +5272,9 @@ dependencies = [ [[package]] name = "zip" -version = "2.4.1" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938cc23ac49778ac8340e366ddc422b2227ea176edb447e23fc0627608dddadd" +checksum = "fabe6324e908f85a1c52063ce7aa26b68dcb7eb6dbc83a2d148403c9bc3eba50" dependencies = [ "aes", "arbitrary", @@ -5307,7 +5285,7 @@ dependencies = [ "deflate64", "displaydoc", "flate2", - "getrandom 0.3.1", + "getrandom 0.3.2", "hmac", "indexmap", "lzma-rs", From f71ec9d54a7b7636e71292e27070f315d1eb8573 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 19 Mar 2025 14:15:00 +0100 Subject: [PATCH 0412/1117] add cic entry for libdragon ipl3 (#344) --- src/device/cart/rom.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 9d8300d..4c58988 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -184,6 +184,9 @@ fn set_cic(device: &mut device::Device) { device.cart.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] = 1; device.cart.sc64.cfg[device::cart::sc64::SC64_BOOTLOADER_SWITCH as usize] = 0; } + "093581BF974DE53755A97C65AD366A5BAB48E9F02B80320BA5BA99B785C3D8B7" => { + device.cart.cic_seed = 0x3F; // Libdragon + } _ => { device.cart.cic_seed = 0x3F; // CicNus6102 println!("unknown IPL3 {}", hash) From 1aa00de1b2a3353ce58352a534910fef008efedb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 19 Mar 2025 18:37:35 +0100 Subject: [PATCH 0413/1117] fix crash when attempting to read zip without rom (#345) * fix crash when attempting to read zip without rom * more --- src/device.rs | 19 +++++++++++-------- src/main.rs | 26 +++++++++++++------------- src/ui/gui.rs | 7 +++---- src/ui/gui/gui_netplay.rs | 3 +-- 4 files changed, 28 insertions(+), 27 deletions(-) diff --git a/src/device.rs b/src/device.rs index 0f06a91..2ae554b 100644 --- a/src/device.rs +++ b/src/device.rs @@ -99,11 +99,11 @@ fn init_rng(device: &mut Device) { device.rng = rand_chacha::ChaCha8Rng::seed_from_u64(rng_seed); } -fn swap_rom(contents: Vec) -> Vec { +fn swap_rom(contents: Vec) -> Option> { let test = u32::from_be_bytes(contents[0..4].try_into().unwrap()); if test == 0x80371240 { // z64 - contents + Some(contents) } else if test == 0x37804012 { // v64 let mut data: Vec = vec![0; contents.len()]; @@ -111,7 +111,7 @@ fn swap_rom(contents: Vec) -> Vec { let temp = u16::from_ne_bytes(contents[i..i + 2].try_into().unwrap()); data[i..i + 2].copy_from_slice(&temp.to_be_bytes()); } - return data; + Some(data) } else if test == 0x40123780 { // n64 let mut data: Vec = vec![0; contents.len()]; @@ -119,14 +119,13 @@ fn swap_rom(contents: Vec) -> Vec { let temp = u32::from_ne_bytes(contents[i..i + 4].try_into().unwrap()); data[i..i + 4].copy_from_slice(&temp.to_be_bytes()); } - return data; + Some(data) } else { - let data: Vec = vec![]; - data + None } } -pub fn get_rom_contents(file_path: &std::path::Path) -> Vec { +pub fn get_rom_contents(file_path: &std::path::Path) -> Option> { let mut contents = vec![]; if file_path.extension().unwrap().eq_ignore_ascii_case("zip") { let zip_file = fs::File::open(file_path).unwrap(); @@ -173,7 +172,11 @@ pub fn get_rom_contents(file_path: &std::path::Path) -> Vec { contents = fs::read(file_path).expect("Should have been able to read the file"); } - swap_rom(contents) + if contents.is_empty() { + None + } else { + swap_rom(contents) + } } #[derive(serde::Serialize, serde::Deserialize)] diff --git a/src/main.rs b/src/main.rs index 0446cb8..8544b58 100644 --- a/src/main.rs +++ b/src/main.rs @@ -151,22 +151,22 @@ async fn main() { } } else if args.game.is_some() { let file_path = std::path::Path::new(args.game.as_ref().unwrap()); - let rom_contents = device::get_rom_contents(file_path); - if rom_contents.is_empty() { + if let Some(rom_contents) = device::get_rom_contents(file_path) { + let handle = std::thread::Builder::new() + .name("n64".to_string()) + .stack_size(env!("N64_STACK_SIZE").parse().unwrap()) + .spawn(move || { + let mut device = device::Device::new(); + let overclock = device.ui.config.emulation.overclock; + device::run_game(&mut device, rom_contents, args.fullscreen, overclock); + }) + .unwrap(); + + handle.join().unwrap(); + } else { println!("Could not read rom file"); return; } - let handle = std::thread::Builder::new() - .name("n64".to_string()) - .stack_size(env!("N64_STACK_SIZE").parse().unwrap()) - .spawn(move || { - let mut device = device::Device::new(); - let overclock = device.ui.config.emulation.overclock; - device::run_game(&mut device, rom_contents, args.fullscreen, overclock); - }) - .unwrap(); - - handle.join().unwrap(); } else { let options = eframe::NativeOptions { viewport: eframe::egui::ViewportBuilder::default() diff --git a/src/ui/gui.rs b/src/ui/gui.rs index faaad4a..a031dec 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -445,16 +445,15 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context, enable_overclock: device.vru_window.gui_ctx = Some(gui_ctx); } - let rom_contents = device::get_rom_contents(file.unwrap().path()); - if rom_contents.is_empty() { - println!("Could not read rom file"); - } else { + if let Some(rom_contents) = device::get_rom_contents(file.unwrap().path()) { device::run_game( &mut device, rom_contents, fullscreen, enable_overclock, ); + } else { + println!("Could not read rom file"); } } let result = std::fs::remove_file(running_file); diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index 34c1ee5..b3bfde7 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -430,8 +430,7 @@ fn get_sessions(app: &mut GopherEguiApp, ctx: &egui::Context) { } async fn parse_rom_file(file: rfd::FileHandle, tx: tokio::sync::mpsc::Sender) { - let rom_contents = device::get_rom_contents(file.path()); - if !rom_contents.is_empty() { + if let Some(rom_contents) = device::get_rom_contents(file.path()) { let hash = device::cart::rom::calculate_hash(&rom_contents); let game_name = ui::storage::get_game_name(&rom_contents); From 7316e41c7e959b854294ae4769947d77bf9e59a7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 21 Mar 2025 15:37:11 +0100 Subject: [PATCH 0414/1117] pin rust version --- rust-toolchain.toml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 rust-toolchain.toml diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000..00822fd --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.85.1" From 09ba7e4d13d88c72d80c50d6025394ef7d5716ef Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 21 Mar 2025 22:37:04 +0100 Subject: [PATCH 0415/1117] use loop for cache (#346) --- src/device/cache.rs | 196 ++++++++------------------------------------ src/savestates.rs | 22 ++--- 2 files changed, 42 insertions(+), 176 deletions(-) diff --git a/src/device/cache.rs b/src/device/cache.rs index c89b17f..abeadc5 100644 --- a/src/device/cache.rs +++ b/src/device/cache.rs @@ -30,54 +30,14 @@ pub fn icache_writeback(device: &mut device::Device, line_index: usize) { let cache_address = ((device.memory.icache[line_index].tag | (device.memory.icache[line_index].index) as u32) & 0x1ffffffc) as u64; - device.memory.memory_map_write[(cache_address >> 16) as usize]( - device, - cache_address, - device.memory.icache[line_index].words[0], - 0xFFFFFFFF, - ); - device.memory.memory_map_write[(cache_address >> 16) as usize]( - device, - cache_address | 0x4, - device.memory.icache[line_index].words[1], - 0xFFFFFFFF, - ); - device.memory.memory_map_write[(cache_address >> 16) as usize]( - device, - cache_address | 0x8, - device.memory.icache[line_index].words[2], - 0xFFFFFFFF, - ); - device.memory.memory_map_write[(cache_address >> 16) as usize]( - device, - cache_address | 0xC, - device.memory.icache[line_index].words[3], - 0xFFFFFFFF, - ); - device.memory.memory_map_write[(cache_address >> 16) as usize]( - device, - cache_address | 0x10, - device.memory.icache[line_index].words[4], - 0xFFFFFFFF, - ); - device.memory.memory_map_write[(cache_address >> 16) as usize]( - device, - cache_address | 0x14, - device.memory.icache[line_index].words[5], - 0xFFFFFFFF, - ); - device.memory.memory_map_write[(cache_address >> 16) as usize]( - device, - cache_address | 0x18, - device.memory.icache[line_index].words[6], - 0xFFFFFFFF, - ); - device.memory.memory_map_write[(cache_address >> 16) as usize]( - device, - cache_address | 0x1C, - device.memory.icache[line_index].words[7], - 0xFFFFFFFF, - ); + for i in 0..8 { + device.memory.memory_map_write[(cache_address >> 16) as usize]( + device, + cache_address | (i * 4), + device.memory.icache[line_index].words[i as usize], + 0xFFFFFFFF, + ); + } } pub fn icache_fill(device: &mut device::Device, line_index: usize, phys_address: u64) { @@ -88,71 +48,17 @@ pub fn icache_fill(device: &mut device::Device, line_index: usize, phys_address: let cache_address = ((device.memory.icache[line_index].tag | (device.memory.icache[line_index].index) as u32) & 0x1ffffffc) as u64; - device.memory.icache[line_index].words[0] = device.memory.memory_map_read - [(cache_address >> 16) as usize]( - device, - cache_address, - device::memory::AccessSize::Icache, - ); - device.memory.icache[line_index].words[1] = device.memory.memory_map_read - [(cache_address >> 16) as usize]( - device, - cache_address | 0x4, - device::memory::AccessSize::Icache, - ); - device.memory.icache[line_index].words[2] = device.memory.memory_map_read - [(cache_address >> 16) as usize]( - device, - cache_address | 0x8, - device::memory::AccessSize::Icache, - ); - device.memory.icache[line_index].words[3] = device.memory.memory_map_read - [(cache_address >> 16) as usize]( - device, - cache_address | 0xC, - device::memory::AccessSize::Icache, - ); - device.memory.icache[line_index].words[4] = device.memory.memory_map_read - [(cache_address >> 16) as usize]( - device, - cache_address | 0x10, - device::memory::AccessSize::Icache, - ); - device.memory.icache[line_index].words[5] = device.memory.memory_map_read - [(cache_address >> 16) as usize]( - device, - cache_address | 0x14, - device::memory::AccessSize::Icache, - ); - device.memory.icache[line_index].words[6] = device.memory.memory_map_read - [(cache_address >> 16) as usize]( - device, - cache_address | 0x18, - device::memory::AccessSize::Icache, - ); - device.memory.icache[line_index].words[7] = device.memory.memory_map_read - [(cache_address >> 16) as usize]( - device, - cache_address | 0x1C, - device::memory::AccessSize::Icache, - ); + for i in 0..8 { + device.memory.icache[line_index].words[i as usize] = device.memory.memory_map_read + [(cache_address >> 16) as usize]( + device, + cache_address | (i * 4), + device::memory::AccessSize::Icache, + ); - device.memory.icache[line_index].instruction[0] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[0]); - device.memory.icache[line_index].instruction[1] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[1]); - device.memory.icache[line_index].instruction[2] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[2]); - device.memory.icache[line_index].instruction[3] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[3]); - device.memory.icache[line_index].instruction[4] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[4]); - device.memory.icache[line_index].instruction[5] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[5]); - device.memory.icache[line_index].instruction[6] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[6]); - device.memory.icache[line_index].instruction[7] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[7]); + device.memory.icache[line_index].instruction[i as usize] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[i as usize]); + } } pub fn icache_fetch(device: &mut device::Device, phys_address: u64) { @@ -180,30 +86,15 @@ pub fn dcache_writeback(device: &mut device::Device, line_index: usize) { let cache_address = ((device.memory.dcache[line_index].tag | (device.memory.dcache[line_index].index) as u32) & 0x1ffffffc) as u64; - device.memory.memory_map_write[(cache_address >> 16) as usize]( - device, - cache_address, - device.memory.dcache[line_index].words[0], - 0xFFFFFFFF, - ); - device.memory.memory_map_write[(cache_address >> 16) as usize]( - device, - cache_address | 0x4, - device.memory.dcache[line_index].words[1], - 0xFFFFFFFF, - ); - device.memory.memory_map_write[(cache_address >> 16) as usize]( - device, - cache_address | 0x8, - device.memory.dcache[line_index].words[2], - 0xFFFFFFFF, - ); - device.memory.memory_map_write[(cache_address >> 16) as usize]( - device, - cache_address | 0xC, - device.memory.dcache[line_index].words[3], - 0xFFFFFFFF, - ); + + for i in 0..4 { + device.memory.memory_map_write[(cache_address >> 16) as usize]( + device, + cache_address | (i * 4), + device.memory.dcache[line_index].words[i as usize], + 0xFFFFFFFF, + ); + } } fn dcache_fill(device: &mut device::Device, line_index: usize, phys_address: u64) { @@ -216,30 +107,15 @@ fn dcache_fill(device: &mut device::Device, line_index: usize, phys_address: u64 let cache_address = ((device.memory.dcache[line_index].tag | (device.memory.dcache[line_index].index) as u32) & 0x1ffffffc) as u64; - device.memory.dcache[line_index].words[0] = device.memory.memory_map_read - [(cache_address >> 16) as usize]( - device, - cache_address, - device::memory::AccessSize::Dcache, - ); - device.memory.dcache[line_index].words[1] = device.memory.memory_map_read - [(cache_address >> 16) as usize]( - device, - cache_address | 0x4, - device::memory::AccessSize::Dcache, - ); - device.memory.dcache[line_index].words[2] = device.memory.memory_map_read - [(cache_address >> 16) as usize]( - device, - cache_address | 0x8, - device::memory::AccessSize::Dcache, - ); - device.memory.dcache[line_index].words[3] = device.memory.memory_map_read - [(cache_address >> 16) as usize]( - device, - cache_address | 0xC, - device::memory::AccessSize::Dcache, - ); + + for i in 0..4 { + device.memory.dcache[line_index].words[i as usize] = device.memory.memory_map_read + [(cache_address >> 16) as usize]( + device, + cache_address | (i * 4), + device::memory::AccessSize::Dcache, + ); + } } pub fn dcache_read(device: &mut device::Device, phys_address: u64) -> u32 { diff --git a/src/savestates.rs b/src/savestates.rs index b392ee7..033b139 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -142,22 +142,12 @@ pub fn load_savestate(device: &mut device::Device) { } for line_index in 0..512 { - device.memory.icache[line_index].instruction[0] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[0]); - device.memory.icache[line_index].instruction[1] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[1]); - device.memory.icache[line_index].instruction[2] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[2]); - device.memory.icache[line_index].instruction[3] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[3]); - device.memory.icache[line_index].instruction[4] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[4]); - device.memory.icache[line_index].instruction[5] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[5]); - device.memory.icache[line_index].instruction[6] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[6]); - device.memory.icache[line_index].instruction[7] = - device::cpu::decode_opcode(device, device.memory.icache[line_index].words[7]); + for i in 0..8 { + device.memory.icache[line_index].instruction[i] = device::cpu::decode_opcode( + device, + device.memory.icache[line_index].words[i], + ); + } } device::pif::connect_pif_channels(device); From a58eed7dc9bdcbb4e6d8d10cd17169143707c219 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 22 Mar 2025 08:23:48 +0100 Subject: [PATCH 0416/1117] add a few more loops (#347) * add a few more loops * more --- src/device/rsp_su_instructions.rs | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index 498b82c..3302004 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -317,10 +317,9 @@ pub fn lw(device: &mut device::Device, opcode: u32) { device.rsp.cpu.gpr[rs(opcode) as usize].wrapping_add(imm(opcode) as i16 as i32 as u32); let mut w = [0; 4]; - w[0] = device.rsp.mem[address as usize & 0xFFF]; - w[1] = device.rsp.mem[(address as usize + 1) & 0xFFF]; - w[2] = device.rsp.mem[(address as usize + 2) & 0xFFF]; - w[3] = device.rsp.mem[(address as usize + 3) & 0xFFF]; + for (i, item) in w.iter_mut().enumerate() { + *item = device.rsp.mem[(address as usize + i) & 0xFFF]; + } device.rsp.cpu.gpr[rt(opcode) as usize] = ((w[0] as u32) << 24) | ((w[1] as u32) << 16) | ((w[2] as u32) << 8) | (w[3] as u32) @@ -349,10 +348,9 @@ pub fn lwu(device: &mut device::Device, opcode: u32) { device.rsp.cpu.gpr[rs(opcode) as usize].wrapping_add(imm(opcode) as i16 as i32 as u32); let mut w = [0; 4]; - w[0] = device.rsp.mem[address as usize & 0xFFF]; - w[1] = device.rsp.mem[(address as usize + 1) & 0xFFF]; - w[2] = device.rsp.mem[(address as usize + 2) & 0xFFF]; - w[3] = device.rsp.mem[(address as usize + 3) & 0xFFF]; + for (i, item) in w.iter_mut().enumerate() { + *item = device.rsp.mem[(address as usize + i) & 0xFFF]; + } device.rsp.cpu.gpr[rt(opcode) as usize] = ((w[0] as u32) << 24) | ((w[1] as u32) << 16) | ((w[2] as u32) << 8) | (w[3] as u32) @@ -378,14 +376,10 @@ pub fn sw(device: &mut device::Device, opcode: u32) { let address = device.rsp.cpu.gpr[rs(opcode) as usize].wrapping_add(imm(opcode) as i16 as i32 as u32); - device.rsp.mem[address as usize & 0xFFF] = - (device.rsp.cpu.gpr[rt(opcode) as usize] >> 24) as u8; - device.rsp.mem[(address as usize + 1) & 0xFFF] = - (device.rsp.cpu.gpr[rt(opcode) as usize] >> 16) as u8; - device.rsp.mem[(address as usize + 2) & 0xFFF] = - (device.rsp.cpu.gpr[rt(opcode) as usize] >> 8) as u8; - device.rsp.mem[(address as usize + 3) & 0xFFF] = - (device.rsp.cpu.gpr[rt(opcode) as usize]) as u8; + for i in 0..4 { + device.rsp.mem[(address as usize + i) & 0xFFF] = + (device.rsp.cpu.gpr[rt(opcode) as usize] >> ((3 - i) * 8)) as u8; + } } pub fn sll(device: &mut device::Device, opcode: u32) { From 8a09cb711f21ccde1a870d427b5a0f4a863d1664 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 22 Mar 2025 21:24:39 +0100 Subject: [PATCH 0417/1117] Add RDP to savestate (#348) * organize RDP device * more * more * more * more * more * more * more * more --- build.rs | 4 +- parallel-rdp/interface.cpp | 127 +++++++++++++++++++++---------------- parallel-rdp/interface.hpp | 5 +- src/savestates.rs | 7 +- src/ui/video.rs | 14 +++- 5 files changed, 95 insertions(+), 62 deletions(-) diff --git a/build.rs b/build.rs index 509dfbf..67a6e8d 100644 --- a/build.rs +++ b/build.rs @@ -109,7 +109,9 @@ fn main() { .allowlist_function("rdp_check_callback") .allowlist_function("rdp_new_processor") .allowlist_function("rdp_check_framebuffers") - .allowlist_function("rdp_full_sync") + .allowlist_function("rdp_state_size") + .allowlist_function("rdp_save_state") + .allowlist_function("rdp_load_state") .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) .generate() .expect("Unable to generate bindings"); diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 697d898..11bc25f 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -52,20 +52,6 @@ enum vi_registers VI_REGS_COUNT }; -static SDL_Window *window; -static RDP::CommandProcessor *processor; -static SDL_WSIPlatform *wsi_platform; -static WSI *wsi; -static uint32_t cmd_data[0x00040000 >> 2]; -static int cmd_cur; -static int cmd_ptr; -static CALL_BACK callback; -static GFX_INFO gfx_info; -static uint32_t region; -static bool crop_letterbox; -static const uint32_t *fragment_spirv; -static size_t fragment_size; - typedef struct { uint32_t depthbuffer_address; @@ -78,16 +64,36 @@ typedef struct uint8_t depthbuffer_enabled; } FrameBufferInfo; +typedef struct +{ + uint32_t cmd_data[0x00040000 >> 2]; + int cmd_cur; + int cmd_ptr; + uint32_t region; + FrameBufferInfo frame_buffer_info; +} RDP_DEVICE; + +static SDL_Window *window; +static RDP::CommandProcessor *processor; +static SDL_WSIPlatform *wsi_platform; +static WSI *wsi; + +static RDP_DEVICE rdp_device; +static bool crop_letterbox; +static CALL_BACK callback; +static GFX_INFO gfx_info; +static const uint32_t *fragment_spirv; +static size_t fragment_size; + +std::vector rdram_dirty; +uint64_t sync_signal; + typedef struct { float SourceSize[4]; float OutputSize[4]; } Push; -static std::vector rdram_dirty; -static uint64_t sync_signal; -static FrameBufferInfo frame_buffer_info; - static const unsigned cmd_len_lut[64] = { 1, 1, @@ -211,11 +217,11 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) void rdp_new_processor(GFX_INFO _gfx_info) { - memset(&frame_buffer_info, 0, sizeof(FrameBufferInfo)); + gfx_info = _gfx_info; + sync_signal = 0; rdram_dirty.assign(gfx_info.RDRAM_SIZE / 8, false); - gfx_info = _gfx_info; if (processor) { delete processor; @@ -470,29 +476,40 @@ void rdp_check_framebuffers(uint32_t address) } } -void rdp_full_sync() +size_t rdp_state_size() +{ + return sizeof(RDP_DEVICE); +} + +void rdp_save_state(uint8_t *state) { processor->wait_for_timeline(processor->signal_timeline()); + memcpy(state, &rdp_device, sizeof(RDP_DEVICE)); +} + +void rdp_load_state(const uint8_t *state) +{ + memcpy(&rdp_device, state, sizeof(RDP_DEVICE)); } void calculate_buffer_size() { - switch (frame_buffer_info.framebuffer_pixel_size) + switch (rdp_device.frame_buffer_info.framebuffer_pixel_size) { case 0: - frame_buffer_info.framebuffer_size = (frame_buffer_info.framebuffer_width * frame_buffer_info.framebuffer_height / 2) >> 3; + rdp_device.frame_buffer_info.framebuffer_size = (rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height / 2) >> 3; break; case 1: - frame_buffer_info.framebuffer_size = (frame_buffer_info.framebuffer_width * frame_buffer_info.framebuffer_height) >> 3; + rdp_device.frame_buffer_info.framebuffer_size = (rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height) >> 3; break; case 2: - frame_buffer_info.framebuffer_size = (frame_buffer_info.framebuffer_width * frame_buffer_info.framebuffer_height * 2) >> 3; + rdp_device.frame_buffer_info.framebuffer_size = (rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height * 2) >> 3; break; case 3: - frame_buffer_info.framebuffer_size = (frame_buffer_info.framebuffer_width * frame_buffer_info.framebuffer_height * 4) >> 3; + rdp_device.frame_buffer_info.framebuffer_size = (rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height * 4) >> 3; break; } - frame_buffer_info.depthbuffer_size = (frame_buffer_info.framebuffer_width * frame_buffer_info.framebuffer_height * 2) >> 3; + rdp_device.frame_buffer_info.depthbuffer_size = (rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height * 2) >> 3; } uint64_t rdp_process_commands() @@ -506,7 +523,7 @@ uint64_t rdp_process_commands() return interrupt_timer; length = unsigned(length) >> 3; - if ((cmd_ptr + length) & ~(0x0003FFFF >> 3)) + if ((rdp_device.cmd_ptr + length) & ~(0x0003FFFF >> 3)) return interrupt_timer; uint32_t offset = DP_CURRENT; @@ -515,10 +532,10 @@ uint64_t rdp_process_commands() do { offset &= 0xFF8; - cmd_data[2 * cmd_ptr + 0] = SDL_Swap32BE(*reinterpret_cast(gfx_info.DMEM + offset)); - cmd_data[2 * cmd_ptr + 1] = SDL_Swap32BE(*reinterpret_cast(gfx_info.DMEM + offset + 4)); + rdp_device.cmd_data[2 * rdp_device.cmd_ptr + 0] = SDL_Swap32BE(*reinterpret_cast(gfx_info.DMEM + offset)); + rdp_device.cmd_data[2 * rdp_device.cmd_ptr + 1] = SDL_Swap32BE(*reinterpret_cast(gfx_info.DMEM + offset + 4)); offset += sizeof(uint64_t); - cmd_ptr++; + rdp_device.cmd_ptr++; } while (--length > 0); } else @@ -532,59 +549,59 @@ uint64_t rdp_process_commands() do { offset &= 0xFFFFF8; - cmd_data[2 * cmd_ptr + 0] = *reinterpret_cast(gfx_info.RDRAM + offset); - cmd_data[2 * cmd_ptr + 1] = *reinterpret_cast(gfx_info.RDRAM + offset + 4); + rdp_device.cmd_data[2 * rdp_device.cmd_ptr + 0] = *reinterpret_cast(gfx_info.RDRAM + offset); + rdp_device.cmd_data[2 * rdp_device.cmd_ptr + 1] = *reinterpret_cast(gfx_info.RDRAM + offset + 4); offset += sizeof(uint64_t); - cmd_ptr++; + rdp_device.cmd_ptr++; } while (--length > 0); } } - while (cmd_cur - cmd_ptr < 0) + while (rdp_device.cmd_cur - rdp_device.cmd_ptr < 0) { - uint32_t w1 = cmd_data[2 * cmd_cur]; - uint32_t w2 = cmd_data[2 * cmd_cur + 1]; + uint32_t w1 = rdp_device.cmd_data[2 * rdp_device.cmd_cur]; + uint32_t w2 = rdp_device.cmd_data[2 * rdp_device.cmd_cur + 1]; uint32_t command = (w1 >> 24) & 63; int cmd_length = cmd_len_lut[command]; - if (cmd_ptr - cmd_cur - cmd_length < 0) + if (rdp_device.cmd_ptr - rdp_device.cmd_cur - cmd_length < 0) { *gfx_info.DPC_START_REG = *gfx_info.DPC_CURRENT_REG = *gfx_info.DPC_END_REG; return interrupt_timer; } if (command >= 8) - processor->enqueue_command(cmd_length * 2, &cmd_data[2 * cmd_cur]); + processor->enqueue_command(cmd_length * 2, &rdp_device.cmd_data[2 * rdp_device.cmd_cur]); if ((RDP::Op(command) >= RDP::Op::FillTriangle && RDP::Op(command) <= RDP::Op::ShadeTextureZBufferTriangle) || RDP::Op(command) == RDP::Op::TextureRectangle || RDP::Op(command) == RDP::Op::TextureRectangleFlip || RDP::Op(command) == RDP::Op::FillRectangle) { - if (!rdram_dirty[frame_buffer_info.framebuffer_address]) + if (!rdram_dirty[rdp_device.frame_buffer_info.framebuffer_address]) { - std::fill_n(rdram_dirty.begin() + frame_buffer_info.framebuffer_address, frame_buffer_info.framebuffer_size, true); + std::fill_n(rdram_dirty.begin() + rdp_device.frame_buffer_info.framebuffer_address, rdp_device.frame_buffer_info.framebuffer_size, true); } - if (frame_buffer_info.depthbuffer_enabled && !rdram_dirty[frame_buffer_info.depthbuffer_address]) + if (rdp_device.frame_buffer_info.depthbuffer_enabled && !rdram_dirty[rdp_device.frame_buffer_info.depthbuffer_address]) { - std::fill_n(rdram_dirty.begin() + frame_buffer_info.depthbuffer_address, frame_buffer_info.depthbuffer_size, true); + std::fill_n(rdram_dirty.begin() + rdp_device.frame_buffer_info.depthbuffer_address, rdp_device.frame_buffer_info.depthbuffer_size, true); } } else if (RDP::Op(command) == RDP::Op::SetOtherModes) { - frame_buffer_info.depthbuffer_enabled = (w2 >> 5) & 1; + rdp_device.frame_buffer_info.depthbuffer_enabled = (w2 >> 5) & 1; } else if (RDP::Op(command) == RDP::Op::SetColorImage) { - frame_buffer_info.framebuffer_address = (w2 & 0x00FFFFFF) >> 3; - frame_buffer_info.framebuffer_pixel_size = (w1 >> 19) & 0x3; - frame_buffer_info.framebuffer_width = (w1 & 0x3FF) + 1; + rdp_device.frame_buffer_info.framebuffer_address = (w2 & 0x00FFFFFF) >> 3; + rdp_device.frame_buffer_info.framebuffer_pixel_size = (w1 >> 19) & 0x3; + rdp_device.frame_buffer_info.framebuffer_width = (w1 & 0x3FF) + 1; calculate_buffer_size(); } else if (RDP::Op(command) == RDP::Op::SetMaskImage) { - frame_buffer_info.depthbuffer_address = (w2 & 0x00FFFFFF) >> 3; + rdp_device.frame_buffer_info.depthbuffer_address = (w2 & 0x00FFFFFF) >> 3; } else if (RDP::Op(command) == RDP::Op::SetScissor) { @@ -594,29 +611,29 @@ uint64_t rdp_process_commands() uint32_t lower_right_y = (w2 & 0xFFF) >> 2; if (lower_right_x > upper_left_x && lower_right_y > upper_left_y) { - region = (lower_right_x - upper_left_x) * (lower_right_y - upper_left_y); + rdp_device.region = (lower_right_x - upper_left_x) * (lower_right_y - upper_left_y); } else { - region = 0; + rdp_device.region = 0; } - frame_buffer_info.framebuffer_height = lower_right_y; + rdp_device.frame_buffer_info.framebuffer_height = lower_right_y; calculate_buffer_size(); } else if (RDP::Op(command) == RDP::Op::SyncFull) { sync_signal = processor->signal_timeline(); - interrupt_timer = region; + interrupt_timer = rdp_device.region; if (interrupt_timer == 0) interrupt_timer = 5000; } - cmd_cur += cmd_length; + rdp_device.cmd_cur += cmd_length; } - cmd_ptr = 0; - cmd_cur = 0; + rdp_device.cmd_ptr = 0; + rdp_device.cmd_cur = 0; *gfx_info.DPC_CURRENT_REG = *gfx_info.DPC_END_REG; return interrupt_timer; diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 8856e47..8c3ae2d 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -2,6 +2,7 @@ #ifdef __cplusplus #include +#include extern "C" { @@ -42,7 +43,9 @@ extern "C" uint64_t rdp_process_commands(); void rdp_new_processor(GFX_INFO _gfx_info); void rdp_check_framebuffers(uint32_t address); - void rdp_full_sync(); + size_t rdp_state_size(); + void rdp_save_state(uint8_t *state); + void rdp_load_state(const uint8_t *state); #ifdef __cplusplus } diff --git a/src/savestates.rs b/src/savestates.rs index 033b139..fda8b77 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -70,7 +70,8 @@ where } pub fn create_savestate(device: &device::Device) { - ui::video::full_sync(); + let mut rdp_state: Vec = vec![0; ui::video::state_size()]; + ui::video::save_state(rdp_state.as_mut_ptr()); let data: &[(&[u8], &str)] = &[ (&postcard::to_stdvec(device).unwrap(), "device"), @@ -78,6 +79,7 @@ pub fn create_savestate(device: &device::Device) { &postcard::to_stdvec(&device.ui.storage.saves).unwrap(), "saves", ), + (&rdp_state, "rdp_state"), ]; let compressed_file = ui::storage::compress_file(data); std::fs::write( @@ -92,6 +94,7 @@ pub fn load_savestate(device: &mut device::Device) { if savestate.is_ok() { let device_bytes = ui::storage::decompress_file(savestate.as_ref().unwrap(), "device"); let save_bytes = ui::storage::decompress_file(savestate.as_ref().unwrap(), "saves"); + let rdp_state = ui::storage::decompress_file(savestate.as_ref().unwrap(), "rdp_state"); if let Ok(state) = postcard::from_bytes::(&device_bytes) { device.ui.storage.saves = postcard::from_bytes(&save_bytes).unwrap(); @@ -186,7 +189,7 @@ pub fn load_savestate(device: &mut device::Device) { ui::audio::close(&mut device.ui); ui::audio::init(&mut device.ui, device.ai.freq); - ui::video::load_state(device); + ui::video::load_state(device, rdp_state.as_ptr()); } else { println!("Failed to load savestate"); } diff --git a/src/ui/video.rs b/src/ui/video.rs index 755b13a..3ab118f 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -78,11 +78,15 @@ pub fn check_framebuffers(address: u32) { unsafe { rdp_check_framebuffers(address) } } -pub fn full_sync() { - unsafe { rdp_full_sync() } +pub fn state_size() -> usize { + unsafe { rdp_state_size() } } -pub fn load_state(device: &mut device::Device) { +pub fn save_state(rdp_state: *mut u8) { + unsafe { rdp_save_state(rdp_state) } +} + +pub fn load_state(device: &mut device::Device, rdp_state: *const u8) { let gfx_info = GFX_INFO { RDRAM: device.rdram.mem.as_mut_ptr(), DMEM: device.rsp.mem.as_mut_ptr(), @@ -99,7 +103,11 @@ pub fn load_state(device: &mut device::Device) { crt: device.ui.config.video.crt, }; unsafe { + rdp_load_state(rdp_state); rdp_new_processor(gfx_info); + for reg in 0..device::vi::VI_REGS_COUNT { + rdp_set_vi_register(reg, device.vi.regs[reg as usize]) + } } } From e4f05af38d62dddc3e2a6f0c9ecf61043ef13b48 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 23 Mar 2025 19:24:17 +0100 Subject: [PATCH 0418/1117] add audit action (#349) --- .github/workflows/sec.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .github/workflows/sec.yml diff --git a/.github/workflows/sec.yml b/.github/workflows/sec.yml new file mode 100644 index 0000000..6eed4d3 --- /dev/null +++ b/.github/workflows/sec.yml @@ -0,0 +1,14 @@ +name: Security audit +on: + schedule: + - cron: "0 0 * * *" +jobs: + audit: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - uses: rustsec/audit-check@v2 + with: + token: ${{ secrets.GITHUB_TOKEN }} From a66e8184e4425cc8fb597d69893d22007a2add8f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 23 Mar 2025 19:25:15 +0100 Subject: [PATCH 0419/1117] add workflow dispatch option --- .github/workflows/sec.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/sec.yml b/.github/workflows/sec.yml index 6eed4d3..9690c86 100644 --- a/.github/workflows/sec.yml +++ b/.github/workflows/sec.yml @@ -1,5 +1,6 @@ name: Security audit on: + workflow_dispatch: schedule: - cron: "0 0 * * *" jobs: From 93630c4156c6b1f3d3dcad34e13bc3c360a4e0a5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 23 Mar 2025 21:31:24 +0100 Subject: [PATCH 0420/1117] fix audit workflow (#350) --- .github/workflows/sec.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/sec.yml b/.github/workflows/sec.yml index 9690c86..804ef76 100644 --- a/.github/workflows/sec.yml +++ b/.github/workflows/sec.yml @@ -5,6 +5,9 @@ on: - cron: "0 0 * * *" jobs: audit: + permissions: + issues: write + checks: write runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 From 2fcf202a5c717319988db14f6a43b24a82f5c3f5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 23 Mar 2025 22:07:32 +0100 Subject: [PATCH 0421/1117] move variable into function --- src/ui/input.rs | 8 +------- src/ui/video.rs | 5 ++++- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/ui/input.rs b/src/ui/input.rs index 54f5359..39b2d40 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -482,8 +482,6 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { if !unsafe { sdl3_sys::video::SDL_ShowWindow(window) } { panic!("Could not show window") } - let font = - rusttype::Font::try_from_bytes(include_bytes!("../../data/Roboto-Regular.ttf")).unwrap(); let key_labels: [(&str, usize); PROFILE_SIZE] = [ ("A", A_BUTTON), @@ -544,11 +542,7 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { let mut event: sdl3_sys::events::SDL_Event = Default::default(); while unsafe { sdl3_sys::events::SDL_PollEvent(&mut event) } {} // clear events - ui::video::draw_text( - format!("Select binding for: {key}").as_str(), - renderer, - &font, - ); + ui::video::draw_text(format!("Select binding for: {key}").as_str(), renderer); let mut key_set = false; while !key_set { diff --git a/src/ui/video.rs b/src/ui/video.rs index 3ab118f..a10d513 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -140,7 +140,10 @@ pub fn process_rdp_list() -> u64 { unsafe { rdp_process_commands() } } -pub fn draw_text(text: &str, renderer: *mut sdl3_sys::render::SDL_Renderer, font: &rusttype::Font) { +pub fn draw_text(text: &str, renderer: *mut sdl3_sys::render::SDL_Renderer) { + let font = + rusttype::Font::try_from_bytes(include_bytes!("../../data/Roboto-Regular.ttf")).unwrap(); + let text_size = 32; let scale = rusttype::Scale::uniform(text_size as f32); let v_metrics = font.v_metrics(scale); From fd6965ff3bb7b9a7f77212ab7e3eb3881c9226cd Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 24 Mar 2025 11:06:17 +0100 Subject: [PATCH 0422/1117] remove rusttype (#355) * remove rusttype * more --- Cargo.lock | 31 +++---------------------------- Cargo.toml | 2 +- src/ui/input.rs | 10 +++++++++- src/ui/video.rs | 43 +++++++++++++++++++++++++++---------------- 4 files changed, 40 insertions(+), 46 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2e87e10..71d5cba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9,7 +9,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec3672c180e71eeaaac3a541fbbc5f5ad4def8b747c595ad30d674e43049f7b0" dependencies = [ "ab_glyph_rasterizer", - "owned_ttf_parser 0.25.0", + "owned_ttf_parser", ] [[package]] @@ -1501,6 +1501,7 @@ dependencies = [ name = "gopher64" version = "1.0.14" dependencies = [ + "ab_glyph", "bindgen", "cc", "chrono", @@ -1516,7 +1517,6 @@ dependencies = [ "regex", "reqwest", "rfd", - "rusttype", "sdl3-sys", "semver", "serde", @@ -2729,22 +2729,13 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "owned_ttf_parser" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e6affeb1632d6ff6a23d2cd40ffed138e82f1532571a26f527c8a284bb2fbb" -dependencies = [ - "ttf-parser 0.15.2", -] - [[package]] name = "owned_ttf_parser" version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4" dependencies = [ - "ttf-parser 0.25.1", + "ttf-parser", ] [[package]] @@ -3325,16 +3316,6 @@ dependencies = [ "untrusted", ] -[[package]] -name = "rusttype" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff8374aa04134254b7995b63ad3dc41c7f7236f69528b28553da7d72efaa967" -dependencies = [ - "ab_glyph_rasterizer", - "owned_ttf_parser 0.15.2", -] - [[package]] name = "rustversion" version = "1.0.20" @@ -3994,12 +3975,6 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" -[[package]] -name = "ttf-parser" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd" - [[package]] name = "ttf-parser" version = "0.25.1" diff --git a/Cargo.toml b/Cargo.toml index 59529a3..99469ba 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,7 +17,7 @@ serde_json = "1.0" serde-big-array = "0.5" eframe = { version = "0.31", default-features = false, features = ["wayland", "x11", "glow"] } sha2 = "0.10" -rusttype = "0.9" +ab_glyph = "0.2" sdl3-sys = { version = "0.4", features = ["build-from-source-static"] } rfd = { version = "0.15", default-features = false, features = ["xdg-portal", "tokio"] } tokio = {version = "1.43", features = ["rt-multi-thread", "macros"] } diff --git a/src/ui/input.rs b/src/ui/input.rs index 39b2d40..b4a0f2a 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -538,11 +538,19 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { id: 0, axis: 0, }; + + let font = + ab_glyph::FontRef::try_from_slice(include_bytes!("../../data/Roboto-Regular.ttf")).unwrap(); + for (key, value) in key_labels.iter() { let mut event: sdl3_sys::events::SDL_Event = Default::default(); while unsafe { sdl3_sys::events::SDL_PollEvent(&mut event) } {} // clear events - ui::video::draw_text(format!("Select binding for: {key}").as_str(), renderer); + ui::video::draw_text( + format!("Select binding for: {key}").as_str(), + renderer, + &font, + ); let mut key_set = false; while !key_set { diff --git a/src/ui/video.rs b/src/ui/video.rs index a10d513..68a944a 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -1,6 +1,7 @@ #![allow(non_snake_case)] include!(concat!(env!("OUT_DIR"), "/parallel_bindings.rs")); use crate::{device, ui}; +use ab_glyph::{Font, ScaleFont}; pub fn init(device: &mut device::Device) { ui::sdl_init(sdl3_sys::init::SDL_INIT_VIDEO); @@ -140,15 +141,11 @@ pub fn process_rdp_list() -> u64 { unsafe { rdp_process_commands() } } -pub fn draw_text(text: &str, renderer: *mut sdl3_sys::render::SDL_Renderer) { - let font = - rusttype::Font::try_from_bytes(include_bytes!("../../data/Roboto-Regular.ttf")).unwrap(); - - let text_size = 32; - let scale = rusttype::Scale::uniform(text_size as f32); - let v_metrics = font.v_metrics(scale); - let offset = rusttype::point(10.0, 10.0 + v_metrics.ascent); - +pub fn draw_text( + text: &str, + renderer: *mut sdl3_sys::render::SDL_Renderer, + font: &ab_glyph::FontRef, +) { // Clear the canvas unsafe { sdl3_sys::render::SDL_SetRenderDrawColor( @@ -161,12 +158,20 @@ pub fn draw_text(text: &str, renderer: *mut sdl3_sys::render::SDL_Renderer) { sdl3_sys::render::SDL_RenderClear(renderer); }; - for glyph in font.layout(text, scale, offset) { - if let Some(bb) = glyph.pixel_bounding_box() { - glyph.draw(|x, y, v| { - let x = x as i32 + bb.min.x; - let y = y as i32 + bb.min.y + (240 - text_size); - if v > 0.5 { + let text_size = 40.0; + let (mut w, mut h) = (0, 0); + unsafe { sdl3_sys::render::SDL_GetRenderOutputSize(renderer, &mut w, &mut h) }; + let x_start = 20.0; + let y_start = (h / 2) as f32; + + let mut x_offset = 0.0; + for c in text.chars() { + let q_glyph_id = font.glyph_id(c); + let q_glyph = q_glyph_id.with_scale(text_size); + + if let Some(q) = font.outline_glyph(q_glyph) { + q.draw(|x, y, c| { + if c > 0.5 { unsafe { sdl3_sys::render::SDL_SetRenderDrawColor( renderer, @@ -175,11 +180,17 @@ pub fn draw_text(text: &str, renderer: *mut sdl3_sys::render::SDL_Renderer) { 255, sdl3_sys::pixels::SDL_ALPHA_OPAQUE, ); - sdl3_sys::render::SDL_RenderPoint(renderer, x as f32, y as f32); + sdl3_sys::render::SDL_RenderPoint( + renderer, + x_start + x_offset + x as f32 - q.px_bounds().width() + + q.px_bounds().max.x, + y_start + y as f32 - q.px_bounds().height() + q.px_bounds().max.y, + ); }; } }); } + x_offset += font.as_scaled(text_size).h_advance(q_glyph_id); } // Present the canvas From 5d180dfb6549aaeeb62fe990628ff274046266fb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Mar 2025 11:28:28 +0100 Subject: [PATCH 0423/1117] Bump zip from 2.4.2 to 2.5.0 (#354) Bumps [zip](https://github.com/zip-rs/zip2) from 2.4.2 to 2.5.0. - [Release notes](https://github.com/zip-rs/zip2/releases) - [Changelog](https://github.com/zip-rs/zip2/blob/master/CHANGELOG.md) - [Commits](https://github.com/zip-rs/zip2/compare/v2.4.2...v2.5.0) --- updated-dependencies: - dependency-name: zip dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 6 ++---- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 71d5cba..9a3687a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5247,9 +5247,9 @@ dependencies = [ [[package]] name = "zip" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabe6324e908f85a1c52063ce7aa26b68dcb7eb6dbc83a2d148403c9bc3eba50" +checksum = "27c03817464f64e23f6f37574b4fdc8cf65925b5bfd2b0f2aedf959791941f88" dependencies = [ "aes", "arbitrary", @@ -5258,7 +5258,6 @@ dependencies = [ "crc32fast", "crossbeam-utils", "deflate64", - "displaydoc", "flate2", "getrandom 0.3.2", "hmac", @@ -5267,7 +5266,6 @@ dependencies = [ "memchr", "pbkdf2", "sha1", - "thiserror 2.0.12", "time", "xz2", "zeroize", diff --git a/Cargo.toml b/Cargo.toml index 99469ba..14c0d68 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ rust-version = "1.85" [dependencies] dirs = "6.0" -zip = "2.4" +zip = "2.5" governor = "0.8" sevenz-rust = "0.6" chrono = "0.4" From 6355885a56229a10adf090cf4691477fe86f9b31 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 24 Mar 2025 15:03:50 +0100 Subject: [PATCH 0424/1117] let server determine netplay buffer target (#356) --- src/ui/gui/gui_netplay.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index b3bfde7..7af3e24 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -334,7 +334,7 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { protected: None, port: None, features: Some(features), - buffer_target: Some(2), + buffer_target: None, }), }; let (mut socket, _response) = From 87717c4c7ed62908c74dd851e57f8465a78fc716 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Mar 2025 06:00:08 +0100 Subject: [PATCH 0425/1117] Bump governor from 0.8.1 to 0.9.0 (#357) Bumps [governor](https://github.com/boinkor-net/governor) from 0.8.1 to 0.9.0. - [Release notes](https://github.com/boinkor-net/governor/releases) - [Changelog](https://github.com/boinkor-net/governor/blob/master/release.toml) - [Commits](https://github.com/boinkor-net/governor/compare/v0.8.1...v0.9.0) --- updated-dependencies: - dependency-name: governor dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 20 +++++++++++--------- Cargo.toml | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9a3687a..b356bfe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -66,6 +66,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + [[package]] name = "android-activity" version = "0.6.0" @@ -1534,9 +1540,9 @@ dependencies = [ [[package]] name = "governor" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be93b4ec2e4710b04d9264c0c7350cdd62a8c20e5e4ac732552ebb8f0debe8eb" +checksum = "ae4a26ace7b5399e349df31c90afec7555b5af2e64ee8fe9f2a9b5a3204dca06" dependencies = [ "cfg-if", "dashmap", @@ -1544,7 +1550,7 @@ dependencies = [ "futures-timer", "futures-util", "getrandom 0.3.2", - "no-std-compat", + "hashbrown 0.15.2", "nonzero_ext", "parking_lot", "portable-atomic", @@ -1634,6 +1640,8 @@ version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" dependencies = [ + "allocator-api2", + "equivalent", "foldhash", ] @@ -2352,12 +2360,6 @@ dependencies = [ "memoffset", ] -[[package]] -name = "no-std-compat" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" - [[package]] name = "nohash-hasher" version = "0.2.0" diff --git a/Cargo.toml b/Cargo.toml index 14c0d68..101141d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ rust-version = "1.85" [dependencies] dirs = "6.0" zip = "2.5" -governor = "0.8" +governor = "0.9" sevenz-rust = "0.6" chrono = "0.4" serde = { version = "1.0", features = ["derive"] } From 83103130e71d41f129a9c4dd0886bb4c367774d4 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 25 Mar 2025 12:59:32 +0100 Subject: [PATCH 0426/1117] cleanup --- src/device/cart/rom.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 4c58988..86178d8 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -184,12 +184,9 @@ fn set_cic(device: &mut device::Device) { device.cart.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] = 1; device.cart.sc64.cfg[device::cart::sc64::SC64_BOOTLOADER_SWITCH as usize] = 0; } - "093581BF974DE53755A97C65AD366A5BAB48E9F02B80320BA5BA99B785C3D8B7" => { - device.cart.cic_seed = 0x3F; // Libdragon - } _ => { device.cart.cic_seed = 0x3F; // CicNus6102 - println!("unknown IPL3 {}", hash) + //println!("unknown IPL3 {}", hash) } } } From 8026bf13d6895e00d704327231cdd63a168d167e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 26 Mar 2025 11:18:05 +0100 Subject: [PATCH 0427/1117] update cargo packages --- Cargo.lock | 75 +++++++++++++++++++++++++++--------------------------- 1 file changed, 38 insertions(+), 37 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b356bfe..1225302 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -421,9 +421,9 @@ dependencies = [ [[package]] name = "bytemuck_derive" -version = "1.9.1" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d35fadd3de6c82a550b136427123552b401efdab9859130f1cf485fbdea40af" +checksum = "2ff22c2722516255d1823ce3cc4bc0b154dbc9364be5c905d6baa6eccbbc8774" dependencies = [ "proc-macro2", "quote", @@ -495,9 +495,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.16" +version = "1.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" +checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a" dependencies = [ "jobserver", "libc", @@ -819,9 +819,9 @@ checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b" [[package]] name = "deranged" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "28cfac68e08048ae1883171632c2aef3ebc555621ae56fbccce1cbf22dd7f058" dependencies = [ "powerfmt", ] @@ -1800,14 +1800,15 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.61" +version = "0.1.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "b2fd658b06e56721792c5df4475705b6cda790e9298d19d2f8af083457bcd127" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", "windows-core 0.52.0", ] @@ -1962,9 +1963,9 @@ dependencies = [ [[package]] name = "image" -version = "0.25.5" +version = "0.25.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd6f44aed642f18953a158afeb30206f4d50da59fbc66ecb53c66488de73563b" +checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" dependencies = [ "bytemuck", "byteorder-lite", @@ -2162,9 +2163,9 @@ checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" [[package]] name = "log" -version = "0.4.26" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "lzma-rs" @@ -2894,7 +2895,7 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.8.23", + "zerocopy 0.8.24", ] [[package]] @@ -2948,9 +2949,9 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.37.2" +version = "0.37.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "165859e9e55f79d67b96c5d96f4e88b6f2695a1972849c15a6a3f5c59fc2c003" +checksum = "bf763ab1c7a3aa408be466efc86efe35ed1bd3dd74173ed39d6b0d0a6f0ba148" dependencies = [ "memchr", ] @@ -2997,9 +2998,9 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.10" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e46f3055866785f6b92bc6164b76be02ca8f2eb4b002c0354b28cf4c119e5944" +checksum = "541d0f57c6ec747a90738a52741d3221f7960e8ac2f0ff4b1a63680e033b4ab5" dependencies = [ "cfg_aliases", "libc", @@ -3032,7 +3033,7 @@ checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" dependencies = [ "rand_chacha", "rand_core", - "zerocopy 0.8.23", + "zerocopy 0.8.24", ] [[package]] @@ -3309,9 +3310,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.0" +version = "0.103.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aa4eeac2588ffff23e9d7a7e9b3f971c5fb5b7ebc9452745e0c232c64f83b2f" +checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03" dependencies = [ "ring", "rustls-pki-types", @@ -3701,9 +3702,9 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.19.0" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488960f40a3fd53d72c2a29a58722561dee8afdd175bd88e3db4677d7b2ba600" +checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" dependencies = [ "fastrand", "getrandom 0.3.2", @@ -3774,9 +3775,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.40" +version = "0.3.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d9c75b47bdff86fa3334a3db91356b8d7d86a9b839dab7d0bdc5c3d3a077618" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" dependencies = [ "deranged", "num-conv", @@ -3794,9 +3795,9 @@ checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" [[package]] name = "time-macros" -version = "0.2.21" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29aa485584182073ed57fd5004aa09c371f021325014694e432313345865fd04" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" dependencies = [ "num-conv", "time-core", @@ -4372,9 +4373,9 @@ checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" [[package]] name = "wgpu" -version = "24.0.1" +version = "24.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47f55718f85c2fa756edffa0e7f0e0a60aba463d1362b57e23123c58f035e4b6" +checksum = "35904fb00ba2d2e0a4d002fcbbb6e1b89b574d272a50e5fc95f6e81cf281c245" dependencies = [ "arrayvec", "bitflags 2.9.0", @@ -5155,11 +5156,11 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd97444d05a4328b90e75e503a34bad781f14e28a823ad3557f0750df1ebcbc6" +checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" dependencies = [ - "zerocopy-derive 0.8.23", + "zerocopy-derive 0.8.24", ] [[package]] @@ -5175,9 +5176,9 @@ dependencies = [ [[package]] name = "zerocopy-derive" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6352c01d0edd5db859a63e2605f4ea3183ddbd15e2c4a9e7d32184df75e4f154" +checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" dependencies = [ "proc-macro2", "quote", @@ -5300,18 +5301,18 @@ dependencies = [ [[package]] name = "zstd-safe" -version = "7.2.3" +version = "7.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3051792fbdc2e1e143244dc28c60f73d8470e93f3f9cbd0ead44da5ed802722" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.14+zstd.1.5.7" +version = "2.0.15+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb060d4926e4ac3a3ad15d864e99ceb5f343c6b34f5bd6d81ae6ed417311be5" +checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" dependencies = [ "cc", "pkg-config", From 64eda1a1e3b5e13c441d8f34f4f35a7281fbbabc Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 26 Mar 2025 11:27:02 +0100 Subject: [PATCH 0428/1117] bump to 1.0.15 (#358) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1225302..e41336f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1505,7 +1505,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.0.14" +version = "1.0.15" dependencies = [ "ab_glyph", "bindgen", diff --git a/Cargo.toml b/Cargo.toml index 101141d..df3ddcd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.14" +version = "1.0.15" edition = "2024" rust-version = "1.85" From f35869190bf79afc6352ae5275cdae8e92dff7de Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 27 Mar 2025 08:55:52 +0100 Subject: [PATCH 0429/1117] gather controller input even without focus (#360) --- src/ui/video.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/ui/video.rs b/src/ui/video.rs index 68a944a..df13354 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -42,7 +42,13 @@ pub fn init(device: &mut device::Device) { if !unsafe { sdl3_sys::video::SDL_ShowWindow(device.ui.video.window) } { panic!("Could not show window"); } - unsafe { sdl3_sys::everything::SDL_HideCursor() }; + unsafe { + sdl3_sys::everything::SDL_HideCursor(); + sdl3_sys::everything::SDL_SetHint( + sdl3_sys::everything::SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, + std::ffi::CString::new("1").unwrap().as_ptr(), + ); + } let gfx_info = GFX_INFO { RDRAM: device.rdram.mem.as_mut_ptr(), From 82b1888f829cf7ed64e7884c2614a13f87f4c49d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 28 Mar 2025 07:47:22 +0100 Subject: [PATCH 0430/1117] Bump governor from 0.9.0 to 0.10.0 (#362) Bumps [governor](https://github.com/boinkor-net/governor) from 0.9.0 to 0.10.0. - [Release notes](https://github.com/boinkor-net/governor/releases) - [Changelog](https://github.com/boinkor-net/governor/blob/master/release.toml) - [Commits](https://github.com/boinkor-net/governor/compare/v0.9.0...v0.10.0) --- updated-dependencies: - dependency-name: governor dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e41336f..2e35d6b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1540,9 +1540,9 @@ dependencies = [ [[package]] name = "governor" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae4a26ace7b5399e349df31c90afec7555b5af2e64ee8fe9f2a9b5a3204dca06" +checksum = "3cbe789d04bf14543f03c4b60cd494148aa79438c8440ae7d81a7778147745c3" dependencies = [ "cfg-if", "dashmap", diff --git a/Cargo.toml b/Cargo.toml index df3ddcd..1f41e04 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ rust-version = "1.85" [dependencies] dirs = "6.0" zip = "2.5" -governor = "0.9" +governor = "0.10" sevenz-rust = "0.6" chrono = "0.4" serde = { version = "1.0", features = ["derive"] } From b4832b941f779f278ad34a1ca12d7d942714bd89 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 2 Apr 2025 12:24:30 +0200 Subject: [PATCH 0431/1117] sync parallel rdp for texture images (#361) * sync parallel rdp for texture images * more * more * more * more * more --- parallel-rdp/interface.cpp | 116 ++++++++++++++++++++++++++----------- 1 file changed, 82 insertions(+), 34 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 11bc25f..17abcdf 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -56,12 +56,12 @@ typedef struct { uint32_t depthbuffer_address; uint32_t framebuffer_address; + uint32_t texture_address; uint32_t framebuffer_pixel_size; uint32_t framebuffer_width; + uint32_t texture_pixel_size; + uint32_t texture_width; uint32_t framebuffer_height; - uint32_t framebuffer_size; - uint32_t depthbuffer_size; - uint8_t depthbuffer_enabled; } FrameBufferInfo; typedef struct @@ -492,24 +492,45 @@ void rdp_load_state(const uint8_t *state) memcpy(&rdp_device, state, sizeof(RDP_DEVICE)); } -void calculate_buffer_size() +uint32_t texture_size(uint32_t area) +{ + switch (rdp_device.frame_buffer_info.texture_pixel_size) + { + case 0: + return (area / 2) >> 3; + case 1: + return (area) >> 3; + case 2: + return (area * 2) >> 3; + case 3: + return (area * 4) >> 3; + default: + printf("Invalid texture pixel size: %u\n", rdp_device.frame_buffer_info.texture_pixel_size); + return 0; + } +} + +uint32_t framebuffer_size() { switch (rdp_device.frame_buffer_info.framebuffer_pixel_size) { case 0: - rdp_device.frame_buffer_info.framebuffer_size = (rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height / 2) >> 3; - break; + return (rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height / 2) >> 3; case 1: - rdp_device.frame_buffer_info.framebuffer_size = (rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height) >> 3; - break; + return (rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height) >> 3; case 2: - rdp_device.frame_buffer_info.framebuffer_size = (rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height * 2) >> 3; - break; + return (rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height * 2) >> 3; case 3: - rdp_device.frame_buffer_info.framebuffer_size = (rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height * 4) >> 3; - break; + return (rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height * 4) >> 3; + default: + printf("Invalid framebuffer pixel size: %u\n", rdp_device.frame_buffer_info.framebuffer_pixel_size); + return 0; } - rdp_device.frame_buffer_info.depthbuffer_size = (rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height * 2) >> 3; +} + +uint32_t depthbuffer_size() +{ + return (rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height * 2) >> 3; } uint64_t rdp_process_commands() @@ -573,37 +594,64 @@ uint64_t rdp_process_commands() if (command >= 8) processor->enqueue_command(cmd_length * 2, &rdp_device.cmd_data[2 * rdp_device.cmd_cur]); - if ((RDP::Op(command) >= RDP::Op::FillTriangle && RDP::Op(command) <= RDP::Op::ShadeTextureZBufferTriangle) || - RDP::Op(command) == RDP::Op::TextureRectangle || - RDP::Op(command) == RDP::Op::TextureRectangleFlip || - RDP::Op(command) == RDP::Op::FillRectangle) + switch (RDP::Op(command)) { + case RDP::Op::FillTriangle: + case RDP::Op::FillZBufferTriangle: + case RDP::Op::TextureTriangle: + case RDP::Op::TextureZBufferTriangle: + case RDP::Op::ShadeTriangle: + case RDP::Op::ShadeZBufferTriangle: + case RDP::Op::ShadeTextureTriangle: + case RDP::Op::ShadeTextureZBufferTriangle: + case RDP::Op::TextureRectangle: + case RDP::Op::TextureRectangleFlip: + case RDP::Op::FillRectangle: if (!rdram_dirty[rdp_device.frame_buffer_info.framebuffer_address]) { - std::fill_n(rdram_dirty.begin() + rdp_device.frame_buffer_info.framebuffer_address, rdp_device.frame_buffer_info.framebuffer_size, true); + std::fill_n(rdram_dirty.begin() + rdp_device.frame_buffer_info.framebuffer_address, framebuffer_size(), true); } - if (rdp_device.frame_buffer_info.depthbuffer_enabled && !rdram_dirty[rdp_device.frame_buffer_info.depthbuffer_address]) + if (rdp_device.frame_buffer_info.depthbuffer_address < rdram_dirty.size() && !rdram_dirty[rdp_device.frame_buffer_info.depthbuffer_address]) { - std::fill_n(rdram_dirty.begin() + rdp_device.frame_buffer_info.depthbuffer_address, rdp_device.frame_buffer_info.depthbuffer_size, true); + std::fill_n(rdram_dirty.begin() + rdp_device.frame_buffer_info.depthbuffer_address, depthbuffer_size(), true); } - } - else if (RDP::Op(command) == RDP::Op::SetOtherModes) + break; + case RDP::Op::LoadTLut: + case RDP::Op::LoadTile: + if (!rdram_dirty[rdp_device.frame_buffer_info.texture_address]) + { + uint32_t lower_right_t = (w2 & 0xFFF) >> 2; + std::fill_n(rdram_dirty.begin() + + rdp_device.frame_buffer_info.texture_address, + texture_size(rdp_device.frame_buffer_info.texture_width * lower_right_t), true); + } + break; + case RDP::Op::LoadBlock: { - rdp_device.frame_buffer_info.depthbuffer_enabled = (w2 >> 5) & 1; + uint32_t upper_left_s = ((w1 >> 12) & 0xFFF) >> 2; + uint32_t offset_address = rdp_device.frame_buffer_info.texture_address + texture_size(upper_left_s); + if (!rdram_dirty[offset_address]) + { + uint32_t lower_right_s = ((w2 >> 12) & 0xFFF) >> 2; + std::fill_n(rdram_dirty.begin() + offset_address, texture_size(lower_right_s - upper_left_s), true); + } + break; } - else if (RDP::Op(command) == RDP::Op::SetColorImage) - { + case RDP::Op::SetColorImage: rdp_device.frame_buffer_info.framebuffer_address = (w2 & 0x00FFFFFF) >> 3; rdp_device.frame_buffer_info.framebuffer_pixel_size = (w1 >> 19) & 0x3; rdp_device.frame_buffer_info.framebuffer_width = (w1 & 0x3FF) + 1; - calculate_buffer_size(); - } - else if (RDP::Op(command) == RDP::Op::SetMaskImage) - { + break; + case RDP::Op::SetMaskImage: rdp_device.frame_buffer_info.depthbuffer_address = (w2 & 0x00FFFFFF) >> 3; - } - else if (RDP::Op(command) == RDP::Op::SetScissor) + break; + case RDP::Op::SetTextureImage: + rdp_device.frame_buffer_info.texture_address = (w2 & 0x00FFFFFF) >> 3; + rdp_device.frame_buffer_info.texture_pixel_size = (w1 >> 19) & 0x3; + rdp_device.frame_buffer_info.texture_width = (w1 & 0x3FF) + 1; + break; + case RDP::Op::SetScissor: { uint32_t upper_left_x = ((w1 >> 12) & 0xFFF) >> 2; uint32_t upper_left_y = (w1 & 0xFFF) >> 2; @@ -619,14 +667,14 @@ uint64_t rdp_process_commands() } rdp_device.frame_buffer_info.framebuffer_height = lower_right_y; - calculate_buffer_size(); + break; } - else if (RDP::Op(command) == RDP::Op::SyncFull) - { + case RDP::Op::SyncFull: sync_signal = processor->signal_timeline(); interrupt_timer = rdp_device.region; if (interrupt_timer == 0) interrupt_timer = 5000; + break; } rdp_device.cmd_cur += cmd_length; From 7111cc97616e456c412646b8493f2fae6c0c1132 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 2 Apr 2025 12:26:48 +0200 Subject: [PATCH 0432/1117] update cargo packages --- Cargo.lock | 127 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 82 insertions(+), 45 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2e35d6b..c748ea2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -421,9 +421,9 @@ dependencies = [ [[package]] name = "bytemuck_derive" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ff22c2722516255d1823ce3cc4bc0b154dbc9364be5c905d6baa6eccbbc8774" +checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1" dependencies = [ "proc-macro2", "quote", @@ -577,9 +577,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.32" +version = "4.5.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6088f3ae8c3608d19260cd7445411865a485688711b78b5be70d78cd96136f83" +checksum = "d8aa86934b44c19c50f87cc2790e19f54f7a67aedb64101c2e1a2e5ecfb73944" dependencies = [ "clap_builder", "clap_derive", @@ -587,9 +587,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.32" +version = "4.5.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22a7ef7f676155edfb82daa97f99441f3ebf4a58d5e32f295a56259f1b6facc8" +checksum = "2414dbb2dd0695280da6ea9261e327479e9d37b0630f6b53ba2a11c60c679fd9" dependencies = [ "anstream", "anstyle", @@ -1161,9 +1161,9 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ "event-listener", "pin-project-lite", @@ -1221,9 +1221,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc" +checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" dependencies = [ "crc32fast", "miniz_oxide", @@ -1781,9 +1781,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2" dependencies = [ "bytes", "futures-channel", @@ -1791,6 +1791,7 @@ dependencies = [ "http", "http-body", "hyper", + "libc", "pin-project-lite", "socket2", "tokio", @@ -1800,9 +1801,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.62" +version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2fd658b06e56721792c5df4475705b6cda790e9298d19d2f8af083457bcd127" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1810,7 +1811,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.52.0", + "windows-core 0.61.0", ] [[package]] @@ -1863,9 +1864,9 @@ dependencies = [ [[package]] name = "icu_locid_transform_data" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" +checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" [[package]] name = "icu_normalizer" @@ -1887,9 +1888,9 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" +checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" [[package]] name = "icu_properties" @@ -1908,9 +1909,9 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" +checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" [[package]] name = "icu_provider" @@ -2044,10 +2045,11 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ + "getrandom 0.3.2", "libc", ] @@ -2694,9 +2696,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.1" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75b0bedcc4fe52caa0e03d9f1151a323e4aa5e2d78ba3580400cd3c9e2bc4bc" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "option-ext" @@ -2949,9 +2951,9 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.37.3" +version = "0.37.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf763ab1c7a3aa408be466efc86efe35ed1bd3dd74173ed39d6b0d0a6f0ba148" +checksum = "a4ce8c88de324ff838700f36fb6ab86c96df0e3c4ab6ef3a9b2044465cce1369" dependencies = [ "memchr", ] @@ -3265,9 +3267,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.3" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e56a18552996ac8d29ecc3b190b4fdbb2d91ca4ec396de7bbffaf43f3d637e96" +checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" dependencies = [ "bitflags 2.9.0", "errno", @@ -3354,15 +3356,15 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sdl3-src" -version = "3.2.8" +version = "3.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f784160e154c2750a9ea52906aa0d2c88afcd1b71c8960ed049f20fbc8cf0f" +checksum = "e677fa126db179fb8f03c982163321496ddf57a6d8a1e41eeef4600f956038b1" [[package]] name = "sdl3-sys" -version = "0.4.6+SDL3-3.2.8" +version = "0.4.7+SDL3-3.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13aa26235cbf336f5b273dc18a873142285529e4fef503882e05a6f986466939" +checksum = "f0d16a8a3623a4cb39a3661c81d9d4c5fd77ada27fc056e320b3651bf7bde1b1" dependencies = [ "cmake", "rpkg-config", @@ -3579,9 +3581,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" dependencies = [ "libc", "windows-sys 0.52.0", @@ -3709,7 +3711,7 @@ dependencies = [ "fastrand", "getrandom 0.3.2", "once_cell", - "rustix 1.0.3", + "rustix 1.0.5", "windows-sys 0.59.0", ] @@ -4517,24 +4519,28 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.52.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" dependencies = [ + "windows-implement 0.58.0", + "windows-interface 0.58.0", + "windows-result 0.2.0", + "windows-strings 0.1.0", "windows-targets 0.52.6", ] [[package]] name = "windows-core" -version = "0.58.0" +version = "0.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" dependencies = [ - "windows-implement", - "windows-interface", - "windows-result 0.2.0", - "windows-strings 0.1.0", - "windows-targets 0.52.6", + "windows-implement 0.60.0", + "windows-interface 0.59.1", + "windows-link", + "windows-result 0.3.2", + "windows-strings 0.4.0", ] [[package]] @@ -4548,6 +4554,17 @@ dependencies = [ "syn", ] +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "windows-interface" version = "0.58.0" @@ -4559,6 +4576,17 @@ dependencies = [ "syn", ] +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "windows-link" version = "0.1.1" @@ -4613,6 +4641,15 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-strings" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.45.0" From 11a8e9656446f7b87628a395bf1d2d47ca75cc39 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 2 Apr 2025 14:06:43 +0200 Subject: [PATCH 0433/1117] better default for address tracking --- parallel-rdp/interface.cpp | 3 +++ src/ui/video.rs | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 17abcdf..ab40397 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -221,6 +221,9 @@ void rdp_new_processor(GFX_INFO _gfx_info) sync_signal = 0; rdram_dirty.assign(gfx_info.RDRAM_SIZE / 8, false); + rdp_device.frame_buffer_info.framebuffer_address = rdram_dirty.size(); + rdp_device.frame_buffer_info.depthbuffer_address = rdram_dirty.size(); + rdp_device.frame_buffer_info.texture_address = rdram_dirty.size(); if (processor) { diff --git a/src/ui/video.rs b/src/ui/video.rs index df13354..4f44672 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -110,8 +110,8 @@ pub fn load_state(device: &mut device::Device, rdp_state: *const u8) { crt: device.ui.config.video.crt, }; unsafe { - rdp_load_state(rdp_state); rdp_new_processor(gfx_info); + rdp_load_state(rdp_state); for reg in 0..device::vi::VI_REGS_COUNT { rdp_set_vi_register(reg, device.vi.regs[reg as usize]) } From 7ed68676914cf02511214aa1b84b179f26a19441 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 3 Apr 2025 12:01:15 +0200 Subject: [PATCH 0434/1117] Update rust to 1.86.0 (#367) --- Cargo.lock | 57 +++++++++++++++++++++++++++++---------------- rust-toolchain.toml | 2 +- 2 files changed, 38 insertions(+), 21 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c748ea2..89bc1d0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -175,19 +175,21 @@ dependencies = [ [[package]] name = "arboard" -version = "3.4.1" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df099ccb16cd014ff054ac1bf392c67feeef57164b05c42f037cd40f5d4357f4" +checksum = "c1df21f715862ede32a0c525ce2ca4d52626bb0007f8c18b87a384503ac33e70" dependencies = [ "clipboard-win", - "core-graphics", "image", "log", - "objc2 0.5.2", - "objc2-app-kit 0.2.2", - "objc2-foundation 0.2.2", + "objc2 0.6.0", + "objc2-app-kit 0.3.0", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation 0.3.0", "parking_lot", - "windows-sys 0.48.0", + "percent-encoding", + "windows-sys 0.59.0", "x11rb", ] @@ -2104,9 +2106,9 @@ dependencies = [ [[package]] name = "libmimalloc-sys" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07d0e07885d6a754b9c7993f2625187ad694ee985d60f23355ff0e7077261502" +checksum = "6b20daca3a4ac14dbdc753c5e90fc7b490a48a9131daed3c9a9ced7b2defd37b" dependencies = [ "cc", "libc", @@ -2249,9 +2251,9 @@ dependencies = [ [[package]] name = "mimalloc" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99585191385958383e13f6b822e6b6d8d9cf928e7d286ceb092da92b43c87bc1" +checksum = "03cb1f88093fe50061ca1195d336ffec131347c7b833db31f9ab62a2d1b7925f" dependencies = [ "libmimalloc-sys", ] @@ -2490,6 +2492,7 @@ dependencies = [ "bitflags 2.9.0", "block2 0.6.0", "objc2 0.6.0", + "objc2-core-graphics", "objc2-foundation 0.3.0", ] @@ -2539,6 +2542,18 @@ dependencies = [ "objc2 0.6.0", ] +[[package]] +name = "objc2-core-graphics" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dca602628b65356b6513290a21a6405b4d4027b8b250f0b98dddbb28b7de02" +dependencies = [ + "bitflags 2.9.0", + "objc2 0.6.0", + "objc2-core-foundation", + "objc2-io-surface", +] + [[package]] name = "objc2-core-image" version = "0.2.2" @@ -2593,6 +2608,17 @@ dependencies = [ "objc2-core-foundation", ] +[[package]] +name = "objc2-io-surface" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "161a8b87e32610086e1a7a9e9ec39f84459db7b3a0881c1f16ca5a2605581c19" +dependencies = [ + "bitflags 2.9.0", + "objc2 0.6.0", + "objc2-core-foundation", +] + [[package]] name = "objc2-link-presentation" version = "0.2.2" @@ -4659,15 +4685,6 @@ dependencies = [ "windows-targets 0.42.2", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 00822fd..cf6d0f5 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.85.1" +channel = "1.86.0" From e3a9849ad73f239bb84999b8d8ddc70e86c58cef Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 3 Apr 2025 12:13:20 +0200 Subject: [PATCH 0435/1117] bump to 1.0.16 (#368) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 89bc1d0..1fe8a24 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1507,7 +1507,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.0.15" +version = "1.0.16" dependencies = [ "ab_glyph", "bindgen", diff --git a/Cargo.toml b/Cargo.toml index 1f41e04..b3618b6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.15" +version = "1.0.16" edition = "2024" rust-version = "1.85" From cc5f636912391f9e18e400448abe17d3385bad7b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Apr 2025 06:51:11 +0200 Subject: [PATCH 0436/1117] Bump zip from 2.5.0 to 2.6.0 (#369) Bumps [zip](https://github.com/zip-rs/zip2) from 2.5.0 to 2.6.0. - [Release notes](https://github.com/zip-rs/zip2/releases) - [Changelog](https://github.com/zip-rs/zip2/blob/master/CHANGELOG.md) - [Commits](https://github.com/zip-rs/zip2/compare/v2.5.0...v2.6.0) --- updated-dependencies: - dependency-name: zip dependency-version: 2.6.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1fe8a24..00f1e7f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5304,9 +5304,9 @@ dependencies = [ [[package]] name = "zip" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27c03817464f64e23f6f37574b4fdc8cf65925b5bfd2b0f2aedf959791941f88" +checksum = "febbe83a485467affa75a75d28dc7494acd2f819e549536c47d46b3089b56164" dependencies = [ "aes", "arbitrary", diff --git a/Cargo.toml b/Cargo.toml index b3618b6..99407c9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ rust-version = "1.85" [dependencies] dirs = "6.0" -zip = "2.5" +zip = "2.6" governor = "0.10" sevenz-rust = "0.6" chrono = "0.4" From 68f90e1cd70b7d7fffdec0e5a5dfbc63786641f1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 5 Apr 2025 09:30:12 +0200 Subject: [PATCH 0437/1117] update 7z package (#370) --- Cargo.lock | 105 ++++++++++++++++++++++++-------------------------- Cargo.toml | 2 +- src/device.rs | 4 +- 3 files changed, 53 insertions(+), 58 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 00f1e7f..15e4392 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -328,30 +328,15 @@ dependencies = [ "syn", ] -[[package]] -name = "bit-set" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0481a0e032742109b1133a095184ee93d88f3dc9e0d28a5d033dc77a073f44f" -dependencies = [ - "bit-vec 0.7.0", -] - [[package]] name = "bit-set" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ - "bit-vec 0.8.0", + "bit-vec", ] -[[package]] -name = "bit-vec" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c54ff287cfc0a34f38a6b832ea1bd8e448a330b3e40a50859e6488bee07f22" - [[package]] name = "bit-vec" version = "0.8.0" @@ -1198,29 +1183,6 @@ dependencies = [ "simd-adler32", ] -[[package]] -name = "filetime" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" -dependencies = [ - "cfg-if", - "libc", - "libredox", - "windows-sys 0.59.0", -] - -[[package]] -name = "filetime_creation" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c25b5d475550e559de5b0c0084761c65325444e3b6c9e298af9cefe7a9ef3a5f" -dependencies = [ - "cfg-if", - "filetime", - "windows-sys 0.52.0", -] - [[package]] name = "flate2" version = "1.1.1" @@ -1530,7 +1492,7 @@ dependencies = [ "serde", "serde-big-array", "serde_json", - "sevenz-rust", + "sevenz-rust2", "sha2", "socket2", "spin_sleep", @@ -2023,6 +1985,30 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +[[package]] +name = "jiff" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c102670231191d07d37a35af3eb77f1f0dbf7a71be51a962dcd57ea607be7260" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "jiff-static" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cdde31a9d349f1b1f51a0b3714a5940ac022976f4b49485fc04be052b183b4c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "jni" version = "0.21.1" @@ -2182,10 +2168,10 @@ dependencies = [ ] [[package]] -name = "lzma-rust" -version = "0.1.7" +name = "lzma-rust2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baab2bbbd7d75a144d671e9ff79270e903957d92fb7386fd39034c709bd2661" +checksum = "561d131e2d9b07641ac55bc35de5ae4ac3e783fdeebd3c4c1dd3b6a7b920051a" dependencies = [ "byteorder", ] @@ -2298,7 +2284,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e380993072e52eef724eddfcde0ed013b0c023c3f0417336ed041aa9f076994e" dependencies = [ "arrayvec", - "bit-set 0.8.0", + "bit-set", "bitflags 2.9.0", "cfg_aliases", "codespan-reporting", @@ -2389,11 +2375,13 @@ checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" [[package]] name = "nt-time" -version = "0.8.1" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2de419e64947cd8830e66beb584acc3fb42ed411d103e3c794dda355d1b374b5" +checksum = "f5e71108c089b161344bacb1227dd2124fee63ed1792fdd8308e6689197c2754" dependencies = [ "chrono", + "jiff", + "rand", "time", ] @@ -2898,6 +2886,15 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + [[package]] name = "postcard" version = "1.1.1" @@ -3477,19 +3474,17 @@ dependencies = [ ] [[package]] -name = "sevenz-rust" -version = "0.6.1" +name = "sevenz-rust2" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26482cf1ecce4540dc782fc70019eba89ffc4d87b3717eb5ec524b5db6fdefef" +checksum = "6e6a4a454159c1a2735c27656a057d5502191e66bb3f71156b98ca595b460fd7" dependencies = [ - "bit-set 0.6.0", + "bit-set", "byteorder", - "crc", - "filetime_creation", + "crc32fast", "js-sys", - "lzma-rust", + "lzma-rust2", "nt-time", - "sha2", "wasm-bindgen", ] @@ -4431,7 +4426,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "671c25545d479b47d3f0a8e373aceb2060b67c6eb841b24ac8c32348151c7a0c" dependencies = [ "arrayvec", - "bit-vec 0.8.0", + "bit-vec", "bitflags 2.9.0", "cfg_aliases", "document-features", diff --git a/Cargo.toml b/Cargo.toml index 99407c9..1a359de 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ rust-version = "1.85" dirs = "6.0" zip = "2.6" governor = "0.10" -sevenz-rust = "0.6" +sevenz-rust2 = { version = "0.13.0", default-features = false } chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" diff --git a/src/device.rs b/src/device.rs index 2ae554b..06d67cb 100644 --- a/src/device.rs +++ b/src/device.rs @@ -146,12 +146,12 @@ pub fn get_rom_contents(file_path: &std::path::Path) -> Option> { } } else if file_path.extension().unwrap().eq_ignore_ascii_case("7z") { let mut archive = - sevenz_rust::SevenZReader::open(file_path, sevenz_rust::Password::empty()).unwrap(); + sevenz_rust2::SevenZReader::open(file_path, sevenz_rust2::Password::empty()).unwrap(); let mut found = false; archive .for_each_entries( - &mut |entry: &sevenz_rust::SevenZArchiveEntry, reader: &mut dyn std::io::Read| { + &mut |entry: &sevenz_rust2::SevenZArchiveEntry, reader: &mut dyn std::io::Read| { let name = entry.name().to_ascii_lowercase(); if !found && (name.ends_with("z64") || name.ends_with("n64") || name.ends_with("v64")) From 33f74e506249f1eb3e9693540c73744b58be2ea6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 8 Apr 2025 07:52:02 +0200 Subject: [PATCH 0438/1117] update cargo packages --- Cargo.lock | 72 +++++++++++++++++++++++++++--------------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 15e4392..04d4be4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -482,9 +482,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.17" +version = "1.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a" +checksum = "525046617d8376e3db1deffb079e91cef90a89fc3ca5c185bbf8c9ecdd15cd5c" dependencies = [ "jobserver", "libc", @@ -806,9 +806,9 @@ checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b" [[package]] name = "deranged" -version = "0.4.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cfac68e08048ae1883171632c2aef3ebc555621ae56fbccce1cbf22dd7f058" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" dependencies = [ "powerfmt", ] @@ -1121,9 +1121,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" dependencies = [ "libc", "windows-sys 0.59.0", @@ -1941,9 +1941,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", "hashbrown 0.15.2", @@ -1987,9 +1987,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jiff" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c102670231191d07d37a35af3eb77f1f0dbf7a71be51a962dcd57ea607be7260" +checksum = "1f33145a5cbea837164362c7bd596106eb7c5198f97d1ba6f6ebb3223952e488" dependencies = [ "jiff-static", "log", @@ -2000,9 +2000,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cdde31a9d349f1b1f51a0b3714a5940ac022976f4b49485fc04be052b183b4c" +checksum = "43ce13c40ec6956157a3635d97a1ee2df323b263f09ea14165131289cb0f5c19" dependencies = [ "proc-macro2", "quote", @@ -2092,9 +2092,9 @@ dependencies = [ [[package]] name = "libmimalloc-sys" -version = "0.1.41" +version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b20daca3a4ac14dbdc753c5e90fc7b490a48a9131daed3c9a9ced7b2defd37b" +checksum = "ec9d6fac27761dabcd4ee73571cdb06b7022dc99089acbe5435691edffaac0f4" dependencies = [ "cc", "libc", @@ -2108,7 +2108,7 @@ checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.9.0", "libc", - "redox_syscall 0.5.10", + "redox_syscall 0.5.11", ] [[package]] @@ -2237,9 +2237,9 @@ dependencies = [ [[package]] name = "mimalloc" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03cb1f88093fe50061ca1195d336ffec131347c7b833db31f9ab62a2d1b7925f" +checksum = "995942f432bbb4822a7e9c3faa87a695185b0d09273ba85f097b54f4e458f2af" dependencies = [ "libmimalloc-sys", ] @@ -2258,9 +2258,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.5" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" +checksum = "ff70ce3e48ae43fa075863cef62e8b43b71a4f2382229920e0df362592919430" dependencies = [ "adler2", "simd-adler32", @@ -2781,7 +2781,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.10", + "redox_syscall 0.5.11", "smallvec", "windows-targets 0.52.6", ] @@ -2925,9 +2925,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5316f57387668042f561aae71480de936257848f9c43ce528e311d89a07cadeb" +checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" dependencies = [ "proc-macro2", "syn", @@ -3106,9 +3106,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.10" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" +checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" dependencies = [ "bitflags 2.9.0", ] @@ -3475,9 +3475,9 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e6a4a454159c1a2735c27656a057d5502191e66bb3f71156b98ca595b460fd7" +checksum = "dd27d0f7d5e54cab609728bf243f870469dcc845b052285e7e47ef097c04ec6a" dependencies = [ "bit-set", "byteorder", @@ -3551,9 +3551,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "smithay-client-toolkit" @@ -3853,9 +3853,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.44.1" +version = "1.44.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a" +checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" dependencies = [ "backtrace", "bytes", @@ -4446,9 +4446,9 @@ dependencies = [ [[package]] name = "wgpu-hal" -version = "24.0.2" +version = "24.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4317a17171dc20e6577bf606796794580accae0716a69edbc7388c86a3ec9f23" +checksum = "f112f464674ca69f3533248508ee30cb84c67cf06c25ff6800685f5e0294e259" dependencies = [ "android_system_properties", "arrayvec", @@ -4993,9 +4993,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36" +checksum = "63d3fcd9bba44b03821e7d699eeee959f3126dcc4aa8e4ae18ec617c2a5cea10" dependencies = [ "memchr", ] @@ -5299,9 +5299,9 @@ dependencies = [ [[package]] name = "zip" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "febbe83a485467affa75a75d28dc7494acd2f819e549536c47d46b3089b56164" +checksum = "1dcb24d0152526ae49b9b96c1dcf71850ca1e0b882e4e28ed898a93c41334744" dependencies = [ "aes", "arbitrary", From 27bb66df4cd62a432d7a3703f85d543b19e22a01 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 13 Apr 2025 21:07:54 +0200 Subject: [PATCH 0439/1117] Cleanup some controller code (#378) * controller hotplugging * more * more --- src/ui.rs | 16 +++++++++------- src/ui/gui.rs | 16 ++++++---------- src/ui/input.rs | 25 ++++++++++++------------- 3 files changed, 27 insertions(+), 30 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index 9f4b2b2..32f876b 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -21,8 +21,7 @@ pub struct Audio { } pub struct Input { - pub num_joysticks: i32, - pub joysticks: *mut sdl3_sys::joystick::SDL_JoystickID, + pub joysticks: Vec, pub keyboard_state: *const bool, pub controllers: [input::Controllers; 4], } @@ -54,7 +53,6 @@ impl Drop for Ui { fn drop(&mut self) { if self.with_sdl { unsafe { - sdl3_sys::stdinc::SDL_free(self.input.joysticks as *mut std::ffi::c_void); sdl3_sys::init::SDL_Quit(); } } @@ -98,7 +96,7 @@ pub fn get_dirs() -> Dirs { } impl Ui { - fn construct_ui(num_joysticks: i32, joysticks: *mut u32, with_sdl: bool) -> Ui { + fn construct_ui(joysticks: Vec, with_sdl: bool) -> Ui { let dirs = get_dirs(); Ui { @@ -126,7 +124,6 @@ impl Ui { }, ], keyboard_state: std::ptr::null_mut(), - num_joysticks, joysticks, }, storage: Storage { @@ -201,7 +198,7 @@ impl Ui { } pub fn default() -> Ui { - Self::construct_ui(0, std::ptr::null_mut(), false) + Self::construct_ui(vec![], false) } pub fn new() -> Ui { @@ -211,6 +208,11 @@ impl Ui { if joysticks.is_null() { panic!("Could not get joystick list"); } - Self::construct_ui(num_joysticks, joysticks, true) + let mut joystick_vec = vec![]; + for i in 0..num_joysticks { + joystick_vec.push(unsafe { *joysticks.add(i as usize) }); + } + unsafe { sdl3_sys::stdinc::SDL_free(joysticks as *mut std::ffi::c_void) } + Self::construct_ui(joystick_vec, true) } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index a031dec..3382c03 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -61,11 +61,9 @@ fn get_input_profiles(config: &ui::config::Config) -> Vec { pub fn get_controller_names(game_ui: &ui::Ui) -> Vec { let mut controllers: Vec = vec![]; - for offset in 0..game_ui.input.num_joysticks as isize { + for joystick in game_ui.input.joysticks.iter() { let name = unsafe { - std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickNameForID( - *(game_ui.input.joysticks.offset(offset)), - )) + std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickNameForID(*joystick)) }; controllers.push(name.to_string_lossy().to_string()); } @@ -76,13 +74,11 @@ pub fn get_controller_names(game_ui: &ui::Ui) -> Vec { pub fn get_controller_paths(game_ui: &ui::Ui) -> Vec { let mut controller_paths: Vec = vec![]; - for offset in 0..game_ui.input.num_joysticks as isize { + for joystick in game_ui.input.joysticks.iter() { let path = unsafe { - std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickPathForID( - *(game_ui.input.joysticks.offset(offset)), - )) - .to_string_lossy() - .to_string() + std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickPathForID(*joystick)) + .to_string_lossy() + .to_string() }; controller_paths.push(path); } diff --git a/src/ui/input.rs b/src/ui/input.rs index b4a0f2a..c9fc879 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -393,10 +393,10 @@ pub fn get(ui: &ui::Ui, channel: usize) -> InputData { } pub fn assign_controller(ui: &mut ui::Ui, controller: i32, port: usize) { - if controller < ui.input.num_joysticks { + if controller < ui.input.joysticks.len() as i32 { let path = unsafe { std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickPathForID( - *(ui.input.joysticks.offset(controller as isize)), + ui.input.joysticks[controller as usize], )) .to_string_lossy() .to_string() @@ -448,16 +448,14 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { let mut open_joysticks: Vec<*mut sdl3_sys::joystick::SDL_Joystick> = Vec::new(); let mut open_controllers: Vec<*mut sdl3_sys::gamepad::SDL_Gamepad> = Vec::new(); - for offset in 0..ui.input.num_joysticks as isize { + for joystick in ui.input.joysticks.iter() { if !dinput { - let controller = - unsafe { sdl3_sys::gamepad::SDL_OpenGamepad(*ui.input.joysticks.offset(offset)) }; + let controller = unsafe { sdl3_sys::gamepad::SDL_OpenGamepad(*joystick) }; if !controller.is_null() { open_controllers.push(controller); } } else { - let joystick = - unsafe { sdl3_sys::joystick::SDL_OpenJoystick(*ui.input.joysticks.offset(offset)) }; + let joystick = unsafe { sdl3_sys::joystick::SDL_OpenJoystick(*joystick) }; if !joystick.is_null() { open_joysticks.push(joystick); } @@ -861,24 +859,25 @@ pub fn init(ui: &mut ui::Ui) { panic!("Could not get keyboard state"); } - let mut taken = [false; 4]; for i in 0..4 { let controller_assignment = &ui.config.input.controller_assignment[i]; if controller_assignment.is_some() && ui.config.input.controller_enabled[i] { let mut joystick_id = 0; let assigned_path = controller_assignment.as_ref().unwrap(); - for offset in 0..ui.input.num_joysticks as isize { + for joystick in ui.input.joysticks.iter() { let path = unsafe { std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickPathForID( - *(ui.input.joysticks.offset(offset)), + *joystick, )) .to_string_lossy() .to_string() }; - if path == *assigned_path && !taken[offset as usize] { - joystick_id = unsafe { *(ui.input.joysticks.offset(offset)) }; - taken[offset as usize] = true; + if path == *assigned_path + && unsafe { sdl3_sys::joystick::SDL_GetJoystickFromID(*joystick) }.is_null() + && unsafe { sdl3_sys::gamepad::SDL_GetGamepadFromID(*joystick) }.is_null() + { + joystick_id = *joystick; break; } } From 383b5680125fdd1b6a75fde2ed03ff66de2f2db8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 15 Apr 2025 11:08:40 +0200 Subject: [PATCH 0440/1117] remove framebuffer tracking (#381) * remove framebuffer tracking * more --- build.rs | 1 - parallel-rdp/interface.cpp | 133 +----------------------------------- parallel-rdp/interface.hpp | 1 - src/device/pi.rs | 3 +- src/device/rdram.rs | 3 - src/device/rsp_interface.rs | 2 - src/ui/video.rs | 4 -- 7 files changed, 2 insertions(+), 145 deletions(-) diff --git a/build.rs b/build.rs index 67a6e8d..f0c6d21 100644 --- a/build.rs +++ b/build.rs @@ -108,7 +108,6 @@ fn main() { .allowlist_function("rdp_process_commands") .allowlist_function("rdp_check_callback") .allowlist_function("rdp_new_processor") - .allowlist_function("rdp_check_framebuffers") .allowlist_function("rdp_state_size") .allowlist_function("rdp_save_state") .allowlist_function("rdp_load_state") diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index ab40397..23d2fba 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -52,25 +52,12 @@ enum vi_registers VI_REGS_COUNT }; -typedef struct -{ - uint32_t depthbuffer_address; - uint32_t framebuffer_address; - uint32_t texture_address; - uint32_t framebuffer_pixel_size; - uint32_t framebuffer_width; - uint32_t texture_pixel_size; - uint32_t texture_width; - uint32_t framebuffer_height; -} FrameBufferInfo; - typedef struct { uint32_t cmd_data[0x00040000 >> 2]; int cmd_cur; int cmd_ptr; uint32_t region; - FrameBufferInfo frame_buffer_info; } RDP_DEVICE; static SDL_Window *window; @@ -85,9 +72,6 @@ static GFX_INFO gfx_info; static const uint32_t *fragment_spirv; static size_t fragment_size; -std::vector rdram_dirty; -uint64_t sync_signal; - typedef struct { float SourceSize[4]; @@ -219,12 +203,6 @@ void rdp_new_processor(GFX_INFO _gfx_info) { gfx_info = _gfx_info; - sync_signal = 0; - rdram_dirty.assign(gfx_info.RDRAM_SIZE / 8, false); - rdp_device.frame_buffer_info.framebuffer_address = rdram_dirty.size(); - rdp_device.frame_buffer_info.depthbuffer_address = rdram_dirty.size(); - rdp_device.frame_buffer_info.texture_address = rdram_dirty.size(); - if (processor) { delete processor; @@ -469,16 +447,6 @@ CALL_BACK rdp_check_callback() return return_value; } -void rdp_check_framebuffers(uint32_t address) -{ - if (sync_signal && rdram_dirty[address >> 3]) - { - processor->wait_for_timeline(sync_signal); - rdram_dirty.assign(gfx_info.RDRAM_SIZE / 8, false); - sync_signal = 0; - } -} - size_t rdp_state_size() { return sizeof(RDP_DEVICE); @@ -486,7 +454,6 @@ size_t rdp_state_size() void rdp_save_state(uint8_t *state) { - processor->wait_for_timeline(processor->signal_timeline()); memcpy(state, &rdp_device, sizeof(RDP_DEVICE)); } @@ -495,47 +462,6 @@ void rdp_load_state(const uint8_t *state) memcpy(&rdp_device, state, sizeof(RDP_DEVICE)); } -uint32_t texture_size(uint32_t area) -{ - switch (rdp_device.frame_buffer_info.texture_pixel_size) - { - case 0: - return (area / 2) >> 3; - case 1: - return (area) >> 3; - case 2: - return (area * 2) >> 3; - case 3: - return (area * 4) >> 3; - default: - printf("Invalid texture pixel size: %u\n", rdp_device.frame_buffer_info.texture_pixel_size); - return 0; - } -} - -uint32_t framebuffer_size() -{ - switch (rdp_device.frame_buffer_info.framebuffer_pixel_size) - { - case 0: - return (rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height / 2) >> 3; - case 1: - return (rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height) >> 3; - case 2: - return (rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height * 2) >> 3; - case 3: - return (rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height * 4) >> 3; - default: - printf("Invalid framebuffer pixel size: %u\n", rdp_device.frame_buffer_info.framebuffer_pixel_size); - return 0; - } -} - -uint32_t depthbuffer_size() -{ - return (rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height * 2) >> 3; -} - uint64_t rdp_process_commands() { uint64_t interrupt_timer = 0; @@ -599,61 +525,6 @@ uint64_t rdp_process_commands() switch (RDP::Op(command)) { - case RDP::Op::FillTriangle: - case RDP::Op::FillZBufferTriangle: - case RDP::Op::TextureTriangle: - case RDP::Op::TextureZBufferTriangle: - case RDP::Op::ShadeTriangle: - case RDP::Op::ShadeZBufferTriangle: - case RDP::Op::ShadeTextureTriangle: - case RDP::Op::ShadeTextureZBufferTriangle: - case RDP::Op::TextureRectangle: - case RDP::Op::TextureRectangleFlip: - case RDP::Op::FillRectangle: - if (!rdram_dirty[rdp_device.frame_buffer_info.framebuffer_address]) - { - std::fill_n(rdram_dirty.begin() + rdp_device.frame_buffer_info.framebuffer_address, framebuffer_size(), true); - } - - if (rdp_device.frame_buffer_info.depthbuffer_address < rdram_dirty.size() && !rdram_dirty[rdp_device.frame_buffer_info.depthbuffer_address]) - { - std::fill_n(rdram_dirty.begin() + rdp_device.frame_buffer_info.depthbuffer_address, depthbuffer_size(), true); - } - break; - case RDP::Op::LoadTLut: - case RDP::Op::LoadTile: - if (!rdram_dirty[rdp_device.frame_buffer_info.texture_address]) - { - uint32_t lower_right_t = (w2 & 0xFFF) >> 2; - std::fill_n(rdram_dirty.begin() + - rdp_device.frame_buffer_info.texture_address, - texture_size(rdp_device.frame_buffer_info.texture_width * lower_right_t), true); - } - break; - case RDP::Op::LoadBlock: - { - uint32_t upper_left_s = ((w1 >> 12) & 0xFFF) >> 2; - uint32_t offset_address = rdp_device.frame_buffer_info.texture_address + texture_size(upper_left_s); - if (!rdram_dirty[offset_address]) - { - uint32_t lower_right_s = ((w2 >> 12) & 0xFFF) >> 2; - std::fill_n(rdram_dirty.begin() + offset_address, texture_size(lower_right_s - upper_left_s), true); - } - break; - } - case RDP::Op::SetColorImage: - rdp_device.frame_buffer_info.framebuffer_address = (w2 & 0x00FFFFFF) >> 3; - rdp_device.frame_buffer_info.framebuffer_pixel_size = (w1 >> 19) & 0x3; - rdp_device.frame_buffer_info.framebuffer_width = (w1 & 0x3FF) + 1; - break; - case RDP::Op::SetMaskImage: - rdp_device.frame_buffer_info.depthbuffer_address = (w2 & 0x00FFFFFF) >> 3; - break; - case RDP::Op::SetTextureImage: - rdp_device.frame_buffer_info.texture_address = (w2 & 0x00FFFFFF) >> 3; - rdp_device.frame_buffer_info.texture_pixel_size = (w1 >> 19) & 0x3; - rdp_device.frame_buffer_info.texture_width = (w1 & 0x3FF) + 1; - break; case RDP::Op::SetScissor: { uint32_t upper_left_x = ((w1 >> 12) & 0xFFF) >> 2; @@ -668,12 +539,10 @@ uint64_t rdp_process_commands() { rdp_device.region = 0; } - - rdp_device.frame_buffer_info.framebuffer_height = lower_right_y; break; } case RDP::Op::SyncFull: - sync_signal = processor->signal_timeline(); + processor->wait_for_timeline(processor->signal_timeline()); interrupt_timer = rdp_device.region; if (interrupt_timer == 0) interrupt_timer = 5000; diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 8c3ae2d..cba7e75 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -42,7 +42,6 @@ extern "C" CALL_BACK rdp_check_callback(); uint64_t rdp_process_commands(); void rdp_new_processor(GFX_INFO _gfx_info); - void rdp_check_framebuffers(uint32_t address); size_t rdp_state_size(); void rdp_save_state(uint8_t *state); void rdp_load_state(const uint8_t *state); diff --git a/src/device/pi.rs b/src/device/pi.rs index ee9647a..5319291 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -1,4 +1,4 @@ -use crate::{device, ui}; +use crate::device; use rand_chacha::rand_core::RngCore; const PI_DRAM_ADDR_REG: u32 = 0; @@ -83,7 +83,6 @@ fn dma_write(device: &mut device::Device) { let cart_addr = device.pi.regs[PI_CART_ADDR_REG as usize] & !1; let dram_addr = device.pi.regs[PI_DRAM_ADDR_REG as usize] & 0xFFFFFE; let mut length = (device.pi.regs[PI_WR_LEN_REG as usize] & 0xFFFFFF) + 1; - ui::video::check_framebuffers(dram_addr); /* PI seems to treat the first 128 bytes differently, see https://n64brew.dev/wiki/Peripheral_Interface#Unaligned_DMA_transfer */ if length >= 0x7f && (length & 1) != 0 { diff --git a/src/device/rdram.rs b/src/device/rdram.rs index 5d9b0f7..6e3b20f 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -1,5 +1,4 @@ use crate::device; -use crate::ui; use std::alloc::{Layout, alloc_zeroed}; //const RDRAM_CONFIG_REG: u32 = 0; @@ -47,7 +46,6 @@ pub fn read_mem( ); let masked_address = address as usize & RDRAM_MASK; if address < device.rdram.size as u64 { - ui::video::check_framebuffers(masked_address as u32); u32::from_ne_bytes( device.rdram.mem[masked_address..masked_address + 4] .try_into() @@ -60,7 +58,6 @@ pub fn read_mem( pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { if address < device.rdram.size as u64 { - ui::video::check_framebuffers(address as u32); let mut data = u32::from_ne_bytes( device.rdram.mem[address as usize..(address + 4) as usize] .try_into() diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index 47780f5..6c8ed69 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -1,5 +1,4 @@ use crate::device; -use crate::ui; const SP_MEM_ADDR_REG: u32 = 0; const SP_DRAM_ADDR_REG: u32 = 1; @@ -147,7 +146,6 @@ fn do_dma(device: &mut device::Device, dma: RspDma) { let mut dram_addr = dma.dramaddr & 0xfffff8; let offset = dma.memaddr & 0x1000; - ui::video::check_framebuffers(dram_addr); if dma.dir == DmaDir::Read { let mut j = 0; while j < count { diff --git a/src/ui/video.rs b/src/ui/video.rs index 4f44672..fb71c7c 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -81,10 +81,6 @@ pub fn update_screen() { unsafe { rdp_update_screen() } } -pub fn check_framebuffers(address: u32) { - unsafe { rdp_check_framebuffers(address) } -} - pub fn state_size() -> usize { unsafe { rdp_state_size() } } From 5a838464a45f401c5093e044252d7d85c98431fc Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 15 Apr 2025 22:44:24 +0200 Subject: [PATCH 0441/1117] update cargo packages --- Cargo.lock | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 04d4be4..11fbaa1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -482,9 +482,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.18" +version = "1.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525046617d8376e3db1deffb079e91cef90a89fc3ca5c185bbf8c9ecdd15cd5c" +checksum = "8e3a13707ac958681c13b39b458c073d0d9bc8a22cb1b2f4c8e55eb72c13f362" dependencies = [ "jobserver", "libc", @@ -564,9 +564,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.35" +version = "4.5.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8aa86934b44c19c50f87cc2790e19f54f7a67aedb64101c2e1a2e5ecfb73944" +checksum = "2df961d8c8a0d08aa9945718ccf584145eee3f3aa06cddbeac12933781102e04" dependencies = [ "clap_builder", "clap_derive", @@ -574,9 +574,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.35" +version = "4.5.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2414dbb2dd0695280da6ea9261e327479e9d37b0630f6b53ba2a11c60c679fd9" +checksum = "132dbda40fb6753878316a489d5a1242a8ef2f0d9e47ba01c951ea8aa7d013a5" dependencies = [ "anstream", "anstyle", @@ -794,9 +794,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" [[package]] name = "deflate64" @@ -1566,9 +1566,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" +checksum = "75249d144030531f8dee69fe9cea04d3edf809a017ae445e2abdff6629e86633" dependencies = [ "atomic-waker", "bytes", @@ -1987,9 +1987,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jiff" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f33145a5cbea837164362c7bd596106eb7c5198f97d1ba6f6ebb3223952e488" +checksum = "e5ad87c89110f55e4cd4dc2893a9790820206729eaf221555f742d540b0724a0" dependencies = [ "jiff-static", "log", @@ -2000,9 +2000,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43ce13c40ec6956157a3635d97a1ee2df323b263f09ea14165131289cb0f5c19" +checksum = "d076d5b64a7e2fe6f0743f02c43ca4a6725c0f904203bfe276a5b3e793103605" dependencies = [ "proc-macro2", "quote", @@ -2076,9 +2076,9 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] name = "libc" -version = "0.2.171" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "libloading" @@ -2119,9 +2119,9 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "litemap" @@ -2258,9 +2258,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff70ce3e48ae43fa075863cef62e8b43b71a4f2382229920e0df362592919430" +checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" dependencies = [ "adler2", "simd-adler32", @@ -3297,15 +3297,15 @@ dependencies = [ "bitflags 2.9.0", "errno", "libc", - "linux-raw-sys 0.9.3", + "linux-raw-sys 0.9.4", "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.23.25" +version = "0.23.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "822ee9188ac4ec04a2f0531e55d035fb2de73f18b41a63c70c2712503b6fb13c" +checksum = "df51b5869f3a441595eac5e8ff14d486ff285f7b8c0df8770e49c3b56351f0f0" dependencies = [ "once_cell", "ring", @@ -5100,9 +5100,9 @@ checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] name = "xml-rs" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5b940ebc25896e71dd073bad2dbaa2abfe97b0a391415e22ad1326d9c54e3c4" +checksum = "a62ce76d9b56901b19a74f19431b0d8b3bc7ca4ad685a746dfd78ca8f4fc6bda" [[package]] name = "xz2" From 5b6f9b76a6addb30b804e70a7f5f7850846e1f5f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 15 Apr 2025 22:57:52 +0200 Subject: [PATCH 0442/1117] fix interlaced image (#383) --- src/device/vi.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index 7b1c6c1..1693e03 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -86,7 +86,8 @@ fn set_current_line(device: &mut device::Device) { } /* update current field */ device.vi.regs[VI_CURRENT_REG as usize] = - (device.vi.regs[VI_CURRENT_REG as usize] & !1) | device.vi.field + (device.vi.regs[VI_CURRENT_REG as usize] & !1) | device.vi.field; + ui::video::set_register(VI_CURRENT_REG, device.vi.regs[VI_CURRENT_REG as usize]) } pub fn read_regs( From def89329229377deb694f66ca14d3eb3d8e7c4a2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 15 Apr 2025 23:31:22 +0200 Subject: [PATCH 0443/1117] bump to 1.0.17 (#384) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 11fbaa1..e3aeb2c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1469,7 +1469,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.0.16" +version = "1.0.17" dependencies = [ "ab_glyph", "bindgen", diff --git a/Cargo.toml b/Cargo.toml index 1a359de..1fe1765 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.16" +version = "1.0.17" edition = "2024" rust-version = "1.85" From 21f1a274b4f69c5f4d91d546838a21441eb11dcd Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 6 May 2025 13:02:59 +0200 Subject: [PATCH 0444/1117] update cargo packages --- Cargo.lock | 342 ++++++++++++++++++++++++++--------------------------- Cargo.toml | 2 +- 2 files changed, 171 insertions(+), 173 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e3aeb2c..4a203a4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -51,7 +51,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom 0.2.15", + "getrandom 0.2.16", "once_cell", "version_check", "zerocopy 0.7.35", @@ -182,11 +182,11 @@ dependencies = [ "clipboard-win", "image", "log", - "objc2 0.6.0", - "objc2-app-kit 0.3.0", + "objc2 0.6.1", + "objc2-app-kit 0.3.1", "objc2-core-foundation", "objc2-core-graphics", - "objc2-foundation 0.3.0", + "objc2-foundation 0.3.1", "parking_lot", "percent-encoding", "windows-sys 0.59.0", @@ -384,11 +384,11 @@ dependencies = [ [[package]] name = "block2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d59b4c170e16f0405a2e95aff44432a0d41aa97675f3d52623effe95792a037" +checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2" dependencies = [ - "objc2 0.6.0", + "objc2 0.6.1", ] [[package]] @@ -399,9 +399,9 @@ checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "bytemuck" -version = "1.22.0" +version = "1.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540" +checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c" dependencies = [ "bytemuck_derive", ] @@ -482,9 +482,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.19" +version = "1.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e3a13707ac958681c13b39b458c073d0d9bc8a22cb1b2f4c8e55eb72c13f362" +checksum = "8691782945451c1c383942c4874dbe63814f61cb57ef773cda2972682b7bb3c0" dependencies = [ "jobserver", "libc", @@ -529,9 +529,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.40" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ "android-tzdata", "iana-time-zone", @@ -564,9 +564,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.36" +version = "4.5.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2df961d8c8a0d08aa9945718ccf584145eee3f3aa06cddbeac12933781102e04" +checksum = "eccb054f56cbd38340b380d4a8e69ef1f02f1af43db2f0cc817a4774d80ae071" dependencies = [ "clap_builder", "clap_derive", @@ -574,9 +574,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.36" +version = "4.5.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "132dbda40fb6753878316a489d5a1242a8ef2f0d9e47ba01c951ea8aa7d013a5" +checksum = "efd9466fac8543255d3b1fcad4762c5e116ffe808c8a3043d4263cd4fd4862a2" dependencies = [ "anstream", "anstyle", @@ -869,9 +869,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a0d569e003ff27784e0e14e4a594048698e0c0f0b66cabcb51511be55a7caa0" dependencies = [ "bitflags 2.9.0", - "block2 0.6.0", + "block2 0.6.1", "libc", - "objc2 0.6.0", + "objc2 0.6.1", +] + +[[package]] +name = "dispatch2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +dependencies = [ + "bitflags 2.9.0", + "objc2 0.6.1", ] [[package]] @@ -911,9 +921,9 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dpi" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" [[package]] name = "ecolor" @@ -1341,9 +1351,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "js-sys", @@ -1403,22 +1413,22 @@ dependencies = [ [[package]] name = "glutin" -version = "0.32.2" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03642b8b0cce622392deb0ee3e88511f75df2daac806102597905c3ea1974848" +checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" dependencies = [ "bitflags 2.9.0", "cfg_aliases", "cgl", - "core-foundation 0.9.4", - "dispatch", + "dispatch2 0.3.0", "glutin_egl_sys", "glutin_glx_sys", "glutin_wgl_sys", "libloading", - "objc2 0.5.2", - "objc2-app-kit 0.2.2", - "objc2-foundation 0.2.2", + "objc2 0.6.1", + "objc2-app-kit 0.3.1", + "objc2-core-foundation", + "objc2-foundation 0.3.1", "once_cell", "raw-window-handle", "wayland-sys", @@ -1514,7 +1524,7 @@ dependencies = [ "futures-timer", "futures-util", "getrandom 0.3.2", - "hashbrown 0.15.2", + "hashbrown 0.15.3", "nonzero_ext", "parking_lot", "portable-atomic", @@ -1552,7 +1562,7 @@ checksum = "dcf29e94d6d243368b7a56caa16bc213e4f9f8ed38c4d9557069527b5d5281ca" dependencies = [ "bitflags 2.9.0", "gpu-descriptor-types", - "hashbrown 0.15.2", + "hashbrown 0.15.3", ] [[package]] @@ -1566,9 +1576,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75249d144030531f8dee69fe9cea04d3edf809a017ae445e2abdff6629e86633" +checksum = "a9421a676d1b147b16b82c9225157dc629087ef8ec4d5e2960f9437a90dac0a5" dependencies = [ "atomic-waker", "bytes", @@ -1600,9 +1610,9 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" dependencies = [ "allocator-api2", "equivalent", @@ -1946,7 +1956,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", - "hashbrown 0.15.2", + "hashbrown 0.15.3", ] [[package]] @@ -1987,9 +1997,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jiff" -version = "0.2.8" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ad87c89110f55e4cd4dc2893a9790820206729eaf221555f742d540b0724a0" +checksum = "f02000660d30638906021176af16b17498bd0d12813dbfe7b276d8bc7f3c0806" dependencies = [ "jiff-static", "log", @@ -2000,9 +2010,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.8" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d076d5b64a7e2fe6f0743f02c43ca4a6725c0f904203bfe276a5b3e793103605" +checksum = "f3c30758ddd7188629c6713fc45d1188af4f44c90582311d0c8d8c9907f60c48" dependencies = [ "proc-macro2", "quote", @@ -2108,7 +2118,7 @@ checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.9.0", "libc", - "redox_syscall 0.5.11", + "redox_syscall 0.5.12", ] [[package]] @@ -2145,12 +2155,6 @@ dependencies = [ "scopeguard", ] -[[package]] -name = "lockfree-object-pool" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" - [[package]] name = "log" version = "0.4.27" @@ -2169,9 +2173,9 @@ dependencies = [ [[package]] name = "lzma-rust2" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "561d131e2d9b07641ac55bc35de5ae4ac3e783fdeebd3c4c1dd3b6a7b920051a" +checksum = "0889a24ddb2304e1b3cdc0b0cd74119143d3403c19100f064809d38789bae155" dependencies = [ "byteorder", ] @@ -2448,9 +2452,9 @@ dependencies = [ [[package]] name = "objc2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3531f65190d9cff863b77a99857e74c314dd16bf56c538c4b57c7cbc3f3a6e59" +checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551" dependencies = [ "objc2-encode", ] @@ -2473,15 +2477,16 @@ dependencies = [ [[package]] name = "objc2-app-kit" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5906f93257178e2f7ae069efb89fbd6ee94f0592740b5f8a1512ca498814d0fb" +checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" dependencies = [ "bitflags 2.9.0", - "block2 0.6.0", - "objc2 0.6.0", + "block2 0.6.1", + "objc2 0.6.1", + "objc2-core-foundation", "objc2-core-graphics", - "objc2-foundation 0.3.0", + "objc2-foundation 0.3.1", ] [[package]] @@ -2522,22 +2527,24 @@ dependencies = [ [[package]] name = "objc2-core-foundation" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daeaf60f25471d26948a1c2f840e3f7d86f4109e3af4e8e4b5cd70c39690d925" +checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" dependencies = [ "bitflags 2.9.0", - "objc2 0.6.0", + "dispatch2 0.3.0", + "objc2 0.6.1", ] [[package]] name = "objc2-core-graphics" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dca602628b65356b6513290a21a6405b4d4027b8b250f0b98dddbb28b7de02" +checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" dependencies = [ "bitflags 2.9.0", - "objc2 0.6.0", + "dispatch2 0.3.0", + "objc2 0.6.1", "objc2-core-foundation", "objc2-io-surface", ] @@ -2587,23 +2594,23 @@ dependencies = [ [[package]] name = "objc2-foundation" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a21c6c9014b82c39515db5b396f91645182611c97d24637cf56ac01e5f8d998" +checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" dependencies = [ "bitflags 2.9.0", - "objc2 0.6.0", + "objc2 0.6.1", "objc2-core-foundation", ] [[package]] name = "objc2-io-surface" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "161a8b87e32610086e1a7a9e9ec39f84459db7b3a0881c1f16ca5a2605581c19" +checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" dependencies = [ "bitflags 2.9.0", - "objc2 0.6.0", + "objc2 0.6.1", "objc2-core-foundation", ] @@ -2781,7 +2788,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.11", + "redox_syscall 0.5.12", "smallvec", "windows-targets 0.52.6", ] @@ -2920,7 +2927,7 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.8.24", + "zerocopy 0.8.25", ] [[package]] @@ -2944,9 +2951,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] @@ -2974,9 +2981,9 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.37.4" +version = "0.37.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4ce8c88de324ff838700f36fb6ab86c96df0e3c4ab6ef3a9b2044465cce1369" +checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" dependencies = [ "memchr", ] @@ -3003,9 +3010,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.10" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b820744eb4dc9b57a3398183639c511b5a26d2ed702cedd3febaa1393caa22cc" +checksum = "bcbafbbdbb0f638fe3f35f3c56739f77a8a1d070cb25603226c83339b391472b" dependencies = [ "bytes", "getrandom 0.3.2", @@ -3023,9 +3030,9 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.11" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "541d0f57c6ec747a90738a52741d3221f7960e8ac2f0ff4b1a63680e033b4ab5" +checksum = "ee4e529991f949c5e25755532370b8af5d114acae52326361d68d47af64aa842" dependencies = [ "cfg_aliases", "libc", @@ -3052,13 +3059,12 @@ checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" [[package]] name = "rand" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" dependencies = [ "rand_chacha", "rand_core", - "zerocopy 0.8.24", ] [[package]] @@ -3106,9 +3112,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.11" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" +checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" dependencies = [ "bitflags 2.9.0", ] @@ -3119,7 +3125,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", "libredox", "thiserror 2.0.12", ] @@ -3211,14 +3217,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80c844748fdc82aae252ee4594a89b6e7ebef1063de7951545564cbc4e57075d" dependencies = [ "ashpd", - "block2 0.6.0", - "dispatch2", + "block2 0.6.1", + "dispatch2 0.2.0", "js-sys", "log", - "objc2 0.6.0", - "objc2-app-kit 0.3.0", + "objc2 0.6.1", + "objc2-app-kit 0.3.1", "objc2-core-foundation", - "objc2-foundation 0.3.0", + "objc2-foundation 0.3.1", "pollster", "raw-window-handle", "urlencoding", @@ -3236,7 +3242,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.15", + "getrandom 0.2.16", "libc", "untrusted", "windows-sys 0.52.0", @@ -3290,9 +3296,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.5" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" +checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" dependencies = [ "bitflags 2.9.0", "errno", @@ -3303,9 +3309,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.26" +version = "0.23.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df51b5869f3a441595eac5e8ff14d486ff285f7b8c0df8770e49c3b56351f0f0" +checksum = "730944ca083c1c233a75c09f199e973ca499344a2b7ba9e755c457e86fb4a321" dependencies = [ "once_cell", "ring", @@ -3335,9 +3341,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.1" +version = "0.103.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03" +checksum = "7149975849f1abb3832b246010ef62ccc80d3a76169517ada7188252b9cfb437" dependencies = [ "ring", "rustls-pki-types", @@ -3379,15 +3385,15 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sdl3-src" -version = "3.2.10" +version = "3.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e677fa126db179fb8f03c982163321496ddf57a6d8a1e41eeef4600f956038b1" +checksum = "4cd6f184bd2dd067bb29b01868104d393b8ee4b5349308d8a468fccf755b7a5f" [[package]] name = "sdl3-sys" -version = "0.4.7+SDL3-3.2.10" +version = "0.4.8+SDL3-3.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d16a8a3623a4cb39a3661c81d9d4c5fd77ada27fc056e320b3651bf7bde1b1" +checksum = "7856102f03e8d60f1724dae0016b60962b67c3bc0dba83ffd5b786cdd27719c7" dependencies = [ "cmake", "rpkg-config", @@ -3475,9 +3481,9 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd27d0f7d5e54cab609728bf243f870469dcc845b052285e7e47ef097c04ec6a" +checksum = "f3e35b0d7be5029b57e0abf50185b1c2084efd1729083d5093c2548f2c6bf999" dependencies = [ "bit-set", "byteorder", @@ -3501,9 +3507,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", @@ -3518,9 +3524,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.2" +version = "1.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" dependencies = [ "libc", ] @@ -3694,9 +3700,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.100" +version = "2.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" +checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" dependencies = [ "proc-macro2", "quote", @@ -3714,9 +3720,9 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", @@ -3732,7 +3738,7 @@ dependencies = [ "fastrand", "getrandom 0.3.2", "once_cell", - "rustix 1.0.5", + "rustix 1.0.7", "windows-sys 0.59.0", ] @@ -3853,9 +3859,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.44.2" +version = "1.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" +checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165" dependencies = [ "backtrace", "bytes", @@ -3892,9 +3898,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.14" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034" +checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" dependencies = [ "bytes", "futures-core", @@ -3905,9 +3911,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.20" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" +checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae" dependencies = [ "serde", "serde_spanned", @@ -3917,26 +3923,33 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.22.24" +version = "0.22.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" +checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" dependencies = [ "indexmap", "serde", "serde_spanned", "toml_datetime", + "toml_write", "winnow", ] +[[package]] +name = "toml_write" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076" + [[package]] name = "tower" version = "0.5.2" @@ -4235,9 +4248,9 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7208998eaa3870dad37ec8836979581506e0c5c64c20c9e79e9d2a10d6f47bf" +checksum = "fe770181423e5fc79d3e2a7f4410b7799d5aab1de4372853de3c6aa13ca24121" dependencies = [ "cc", "downcast-rs", @@ -4249,9 +4262,9 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.8" +version = "0.31.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2120de3d33638aaef5b9f4472bff75f07c56379cf76ea320bd3a3d65ecaf73f" +checksum = "978fa7c67b0847dbd6a9f350ca2569174974cd4082737054dbb7fbb79d7d9a61" dependencies = [ "bitflags 2.9.0", "rustix 0.38.44", @@ -4272,9 +4285,9 @@ dependencies = [ [[package]] name = "wayland-cursor" -version = "0.31.8" +version = "0.31.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a93029cbb6650748881a00e4922b076092a6a08c11e7fbdb923f064b23968c5d" +checksum = "a65317158dec28d00416cb16705934070aef4f8393353d41126c54264ae0f182" dependencies = [ "rustix 0.38.44", "wayland-client", @@ -4283,9 +4296,9 @@ dependencies = [ [[package]] name = "wayland-protocols" -version = "0.32.6" +version = "0.32.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0781cf46869b37e36928f7b432273c0995aa8aed9552c556fb18754420541efc" +checksum = "779075454e1e9a521794fed15886323ea0feda3f8b0fc1390f5398141310422a" dependencies = [ "bitflags 2.9.0", "wayland-backend", @@ -4295,9 +4308,9 @@ dependencies = [ [[package]] name = "wayland-protocols-plasma" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ccaacc76703fefd6763022ac565b590fcade92202492381c95b2edfdf7d46b3" +checksum = "4fd38cdad69b56ace413c6bcc1fbf5acc5e2ef4af9d5f8f1f9570c0c83eae175" dependencies = [ "bitflags 2.9.0", "wayland-backend", @@ -4308,9 +4321,9 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248a02e6f595aad796561fa82d25601bd2c8c3b145b1c7453fc8f94c1a58f8b2" +checksum = "1cb6cdc73399c0e06504c437fe3cf886f25568dd5454473d565085b36d6a8bbf" dependencies = [ "bitflags 2.9.0", "wayland-backend", @@ -4373,17 +4386,17 @@ dependencies = [ "jni", "log", "ndk-context", - "objc2 0.6.0", - "objc2-foundation 0.3.0", + "objc2 0.6.1", + "objc2-foundation 0.3.1", "url", "web-sys", ] [[package]] name = "webpki-roots" -version = "0.26.8" +version = "0.26.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" +checksum = "37493cadf42a2a939ed404698ded7fb378bf301b5011f973361779a3a74f8c93" dependencies = [ "rustls-pki-types", ] @@ -4942,9 +4955,9 @@ checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winit" -version = "0.30.9" +version = "0.30.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a809eacf18c8eca8b6635091543f02a5a06ddf3dad846398795460e6e0ae3cc0" +checksum = "b0d05bd8908e14618c9609471db04007e644fd9cce6529756046cfc577f9155e" dependencies = [ "ahash", "android-activity", @@ -4993,9 +5006,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.6" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63d3fcd9bba44b03821e7d699eeee959f3126dcc4aa8e4ae18ec617c2a5cea10" +checksum = "d9fb597c990f03753e08d3c29efbfcf2019a003b4bf4ba19225c158e1549f0f3" dependencies = [ "memchr", ] @@ -5069,16 +5082,6 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ef33da6b1660b4ddbfb3aef0ade110c8b8a781a3b6382fa5f2b5b040fd55f61" -[[package]] -name = "xdg-home" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - [[package]] name = "xkbcommon-dl" version = "0.4.2" @@ -5139,9 +5142,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.5.0" +version = "5.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c333f648ea1b647bc95dc1d34807c8e25ed7a6feff3394034dc4776054b236" +checksum = "2522b82023923eecb0b366da727ec883ace092e7887b61d3da5139f26b44da58" dependencies = [ "async-broadcast", "async-recursion", @@ -5155,13 +5158,11 @@ dependencies = [ "ordered-stream", "serde", "serde_repr", - "static_assertions", "tokio", "tracing", "uds_windows", "windows-sys 0.59.0", "winnow", - "xdg-home", "zbus_macros", "zbus_names", "zvariant", @@ -5169,9 +5170,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.5.0" +version = "5.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f325ad10eb0d0a3eb060203494c3b7ec3162a01a59db75d2deee100339709fc0" +checksum = "05d2e12843c75108c00c618c2e8ef9675b50b6ec095b36dc965f2e5aed463c15" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -5205,11 +5206,11 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.24" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" +checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" dependencies = [ - "zerocopy-derive 0.8.24", + "zerocopy-derive 0.8.25", ] [[package]] @@ -5225,9 +5226,9 @@ dependencies = [ [[package]] name = "zerocopy-derive" -version = "0.8.24" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" +checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" dependencies = [ "proc-macro2", "quote", @@ -5327,15 +5328,13 @@ dependencies = [ [[package]] name = "zopfli" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946" +checksum = "edfc5ee405f504cd4984ecc6f14d02d55cfda60fa4b689434ef4102aae150cd7" dependencies = [ "bumpalo", "crc32fast", - "lockfree-object-pool", "log", - "once_cell", "simd-adler32", ] @@ -5369,14 +5368,13 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.4.0" +version = "5.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2df9ee044893fcffbdc25de30546edef3e32341466811ca18421e3cd6c5a3ac" +checksum = "557e89d54880377a507c94cd5452f20e35d14325faf9d2958ebeadce0966c1b2" dependencies = [ "endi", "enumflags2", "serde", - "static_assertions", "url", "winnow", "zvariant_derive", @@ -5385,9 +5383,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.4.0" +version = "5.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74170caa85b8b84cc4935f2d56a57c7a15ea6185ccdd7eadb57e6edd90f94b2f" +checksum = "757779842a0d242061d24c28be589ce392e45350dfb9186dfd7a042a2e19870c" dependencies = [ "proc-macro-crate", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index 1fe1765..ec74fa4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ sha2 = "0.10" ab_glyph = "0.2" sdl3-sys = { version = "0.4", features = ["build-from-source-static"] } rfd = { version = "0.15", default-features = false, features = ["xdg-portal", "tokio"] } -tokio = {version = "1.43", features = ["rt-multi-thread", "macros"] } +tokio = {version = "1.45", features = ["rt-multi-thread", "macros"] } spin_sleep = "1.3" encoding_rs = "0.8" mimalloc = "0.1" From cf0f325ced3c292bb61e25334d139f008aff3682 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 15 May 2025 20:57:22 +0200 Subject: [PATCH 0445/1117] Update rust to 1.87 (#400) --- Cargo.lock | 418 +++++++++++++++++++++----------------------- Cargo.toml | 6 +- rust-toolchain.toml | 2 +- 3 files changed, 207 insertions(+), 219 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4a203a4..bf78aa9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -46,15 +46,15 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom 0.2.16", + "getrandom 0.3.3", "once_cell", "version_check", - "zerocopy 0.7.35", + "zerocopy", ] [[package]] @@ -79,7 +79,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", - "bitflags 2.9.0", + "bitflags 2.9.1", "cc", "cesu8", "jni", @@ -289,9 +289,9 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ "addr2line", "cfg-if", @@ -314,7 +314,7 @@ version = "0.71.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "cexpr", "clang-sys", "itertools", @@ -351,9 +351,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" dependencies = [ "serde", ] @@ -460,7 +460,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "log", "polling", "rustix 0.38.44", @@ -482,9 +482,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.21" +version = "1.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8691782945451c1c383942c4874dbe63814f61cb57ef773cda2972682b7bb3c0" +checksum = "32db95edf998450acc7881c932f94cd9b05c87b4b2599e8bab064753da4acfd1" dependencies = [ "jobserver", "libc", @@ -564,9 +564,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.37" +version = "4.5.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eccb054f56cbd38340b380d4a8e69ef1f02f1af43db2f0cc817a4774d80ae071" +checksum = "ed93b9805f8ba930df42c2590f05453d5ec36cbb85d018868a5b24d31f6ac000" dependencies = [ "clap_builder", "clap_derive", @@ -574,9 +574,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.37" +version = "4.5.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd9466fac8543255d3b1fcad4762c5e116ffe808c8a3043d4263cd4fd4862a2" +checksum = "379026ff283facf611b0ea629334361c4211d1b12ee01024eec1591133b04120" dependencies = [ "anstream", "anstyle", @@ -728,9 +728,9 @@ dependencies = [ [[package]] name = "crc" -version = "3.2.1" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" dependencies = [ "crc-catalog", ] @@ -868,7 +868,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a0d569e003ff27784e0e14e4a594048698e0c0f0b66cabcb51511be55a7caa0" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "block2 0.6.1", "libc", "objc2 0.6.1", @@ -880,7 +880,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "objc2 0.6.1", ] @@ -978,7 +978,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25dd34cec49ab55d85ebf70139cb1ccd29c977ef6b6ba4fe85489d6877ee9ef3" dependencies = [ "ahash", - "bitflags 2.9.0", + "bitflags 2.9.1", "emath", "epaint", "log", @@ -1131,9 +1131,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" +checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" dependencies = [ "libc", "windows-sys 0.59.0", @@ -1141,9 +1141,9 @@ dependencies = [ [[package]] name = "error-code" -version = "3.3.1" +version = "3.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" +checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" [[package]] name = "event-listener" @@ -1200,6 +1200,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" dependencies = [ "crc32fast", + "libz-rs-sys", "miniz_oxide", ] @@ -1364,9 +1365,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", "js-sys", @@ -1417,7 +1418,7 @@ version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "cfg_aliases", "cgl", "dispatch2 0.3.0", @@ -1523,7 +1524,7 @@ dependencies = [ "futures-sink", "futures-timer", "futures-util", - "getrandom 0.3.2", + "getrandom 0.3.3", "hashbrown 0.15.3", "nonzero_ext", "parking_lot", @@ -1541,7 +1542,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "gpu-alloc-types", ] @@ -1551,7 +1552,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", ] [[package]] @@ -1560,7 +1561,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcf29e94d6d243368b7a56caa16bc213e4f9f8ed38c4d9557069527b5d5281ca" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "gpu-descriptor-types", "hashbrown 0.15.3", ] @@ -1571,7 +1572,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", ] [[package]] @@ -1750,7 +1751,7 @@ dependencies = [ "tokio", "tokio-rustls", "tower-service", - "webpki-roots", + "webpki-roots 0.26.11", ] [[package]] @@ -1799,21 +1800,22 @@ dependencies = [ [[package]] name = "icu_collections" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" dependencies = [ "displaydoc", + "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "icu_locale_core" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" dependencies = [ "displaydoc", "litemap", @@ -1822,31 +1824,11 @@ dependencies = [ "zerovec", ] -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" - [[package]] name = "icu_normalizer" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" dependencies = [ "displaydoc", "icu_collections", @@ -1854,67 +1836,54 @@ dependencies = [ "icu_properties", "icu_provider", "smallvec", - "utf16_iter", - "utf8_iter", - "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "1.5.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "1.5.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "2549ca8c7241c82f59c80ba2a6f415d931c5b58d24fb8412caa1a1f02c49139a" dependencies = [ "displaydoc", "icu_collections", - "icu_locid_transform", + "icu_locale_core", "icu_properties_data", "icu_provider", - "tinystr", + "potential_utf", + "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "1.5.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" +checksum = "8197e866e47b68f8f7d95249e172903bec06004b18b2937f1095d40a0c57de04" [[package]] name = "icu_provider" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" dependencies = [ "displaydoc", - "icu_locid", - "icu_provider_macros", + "icu_locale_core", "stable_deref_trait", "tinystr", "writeable", "yoke", "zerofrom", + "zerotrie", "zerovec", ] -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "idna" version = "1.0.3" @@ -1928,9 +1897,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", @@ -2047,7 +2016,7 @@ version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ - "getrandom 0.3.2", + "getrandom 0.3.3", "libc", ] @@ -2092,12 +2061,12 @@ checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "libloading" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" +checksum = "6a793df0d7afeac54f95b471d3af7f0d4fb975699f972341a4b76988d49cdf0c" dependencies = [ "cfg-if", - "windows-targets 0.52.6", + "windows-targets 0.53.0", ] [[package]] @@ -2116,11 +2085,20 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "libc", "redox_syscall 0.5.12", ] +[[package]] +name = "libz-rs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6489ca9bd760fe9642d7644e827b0c9add07df89857b0416ee15c1cc1a3b8c5a" +dependencies = [ + "zlib-rs", +] + [[package]] name = "linux-raw-sys" version = "0.4.15" @@ -2135,9 +2113,9 @@ checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "litemap" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "litrs" @@ -2161,6 +2139,12 @@ version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + [[package]] name = "lzma-rs" version = "0.3.0" @@ -2230,7 +2214,7 @@ version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "block", "core-graphics-types", "foreign-types", @@ -2289,7 +2273,7 @@ checksum = "e380993072e52eef724eddfcde0ed013b0c023c3f0417336ed041aa9f076994e" dependencies = [ "arrayvec", "bit-set", - "bitflags 2.9.0", + "bitflags 2.9.1", "cfg_aliases", "codespan-reporting", "hexf-parse", @@ -2309,7 +2293,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "jni-sys", "log", "ndk-sys 0.6.0+11769913", @@ -2344,11 +2328,11 @@ dependencies = [ [[package]] name = "nix" -version = "0.29.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "cfg-if", "cfg_aliases", "libc", @@ -2465,7 +2449,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -2481,7 +2465,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "block2 0.6.1", "objc2 0.6.1", "objc2-core-foundation", @@ -2495,7 +2479,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -2519,7 +2503,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -2531,7 +2515,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "dispatch2 0.3.0", "objc2 0.6.1", ] @@ -2542,7 +2526,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "dispatch2 0.3.0", "objc2 0.6.1", "objc2-core-foundation", @@ -2585,7 +2569,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "block2 0.5.1", "dispatch", "libc", @@ -2598,7 +2582,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "objc2 0.6.1", "objc2-core-foundation", ] @@ -2609,7 +2593,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "objc2 0.6.1", "objc2-core-foundation", ] @@ -2632,7 +2616,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -2644,7 +2628,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -2667,7 +2651,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "block2 0.5.1", "objc2 0.5.2", "objc2-cloud-kit", @@ -2699,7 +2683,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -2915,6 +2899,15 @@ dependencies = [ "serde", ] +[[package]] +name = "potential_utf" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +dependencies = [ + "zerovec", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -2927,7 +2920,7 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.8.25", + "zerocopy", ] [[package]] @@ -2990,9 +2983,9 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.7" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3bd15a6f2967aef83887dcb9fec0014580467e33720d073560cf015a5683012" +checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" dependencies = [ "bytes", "cfg_aliases", @@ -3010,12 +3003,13 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.11" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcbafbbdbb0f638fe3f35f3c56739f77a8a1d070cb25603226c83339b391472b" +checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" dependencies = [ "bytes", - "getrandom 0.3.2", + "getrandom 0.3.3", + "lru-slab", "rand", "ring", "rustc-hash 2.1.1", @@ -3083,7 +3077,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.2", + "getrandom 0.3.3", ] [[package]] @@ -3092,7 +3086,7 @@ version = "11.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", ] [[package]] @@ -3116,7 +3110,7 @@ version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", ] [[package]] @@ -3206,7 +3200,7 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots", + "webpki-roots 0.26.11", "windows-registry", ] @@ -3287,7 +3281,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "errno", "libc", "linux-raw-sys 0.4.15", @@ -3300,7 +3294,7 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "errno", "libc", "linux-raw-sys 0.9.4", @@ -3332,18 +3326,19 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" dependencies = [ "web-time", + "zeroize", ] [[package]] name = "rustls-webpki" -version = "0.103.2" +version = "0.103.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7149975849f1abb3832b246010ef62ccc80d3a76169517ada7188252b9cfb437" +checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" dependencies = [ "ring", "rustls-pki-types", @@ -3385,15 +3380,15 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sdl3-src" -version = "3.2.12" +version = "3.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd6f184bd2dd067bb29b01868104d393b8ee4b5349308d8a468fccf755b7a5f" +checksum = "a5b9b63e1ae8b23fd763e37b9ce155c5718e520c65c78db07c9ec45e02e3fd06" [[package]] name = "sdl3-sys" -version = "0.4.8+SDL3-3.2.12" +version = "0.5.1+SDL3-3.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7856102f03e8d60f1724dae0016b60962b67c3bc0dba83ffd5b786cdd27719c7" +checksum = "9be4ae099823870a9c9de3f72ec181d602d8d0550c8f5b2dfdfa9bbaa8ddccd2" dependencies = [ "cmake", "rpkg-config", @@ -3567,7 +3562,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "calloop", "calloop-wayland-source", "cursor-icon", @@ -3649,7 +3644,7 @@ version = "0.3.0+sdk-1.3.268.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", ] [[package]] @@ -3731,12 +3726,12 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.19.1" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" dependencies = [ "fastrand", - "getrandom 0.3.2", + "getrandom 0.3.3", "once_cell", "rustix 1.0.7", "windows-sys 0.59.0", @@ -3834,9 +3829,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.7.6" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" dependencies = [ "displaydoc", "zerovec", @@ -4117,12 +4112,6 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -4266,7 +4255,7 @@ version = "0.31.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978fa7c67b0847dbd6a9f350ca2569174974cd4082737054dbb7fbb79d7d9a61" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "rustix 0.38.44", "wayland-backend", "wayland-scanner", @@ -4278,7 +4267,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "cursor-icon", "wayland-backend", ] @@ -4300,7 +4289,7 @@ version = "0.32.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "779075454e1e9a521794fed15886323ea0feda3f8b0fc1390f5398141310422a" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "wayland-backend", "wayland-client", "wayland-scanner", @@ -4312,7 +4301,7 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fd38cdad69b56ace413c6bcc1fbf5acc5e2ef4af9d5f8f1f9570c0c83eae175" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -4325,7 +4314,7 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cb6cdc73399c0e06504c437fe3cf886f25568dd5454473d565085b36d6a8bbf" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -4394,9 +4383,18 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.10" +version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37493cadf42a2a939ed404698ded7fb378bf301b5011f973361779a3a74f8c93" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.0", +] + +[[package]] +name = "webpki-roots" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2853738d1cc4f2da3a225c18ec6c3721abb31961096e9dbf5ab35fa88b19cfdb" dependencies = [ "rustls-pki-types", ] @@ -4414,7 +4412,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35904fb00ba2d2e0a4d002fcbbb6e1b89b574d272a50e5fc95f6e81cf281c245" dependencies = [ "arrayvec", - "bitflags 2.9.0", + "bitflags 2.9.1", "cfg_aliases", "document-features", "js-sys", @@ -4440,7 +4438,7 @@ checksum = "671c25545d479b47d3f0a8e373aceb2060b67c6eb841b24ac8c32348151c7a0c" dependencies = [ "arrayvec", "bit-vec", - "bitflags 2.9.0", + "bitflags 2.9.1", "cfg_aliases", "document-features", "indexmap", @@ -4466,7 +4464,7 @@ dependencies = [ "android_system_properties", "arrayvec", "ash", - "bitflags 2.9.0", + "bitflags 2.9.1", "bytemuck", "cfg_aliases", "core-graphics-types", @@ -4504,7 +4502,7 @@ version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50ac044c0e76c03a0378e7786ac505d010a873665e2d51383dcff8dd227dc69c" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "js-sys", "log", "web-sys", @@ -4962,7 +4960,7 @@ dependencies = [ "ahash", "android-activity", "atomic-waker", - "bitflags 2.9.0", + "bitflags 2.9.1", "block2 0.5.1", "bytemuck", "calloop", @@ -5006,9 +5004,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9fb597c990f03753e08d3c29efbfcf2019a003b4bf4ba19225c158e1549f0f3" +checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" dependencies = [ "memchr", ] @@ -5029,20 +5027,14 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", ] -[[package]] -name = "write16" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" - [[package]] name = "writeable" -version = "0.5.5" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "x11-dl" @@ -5088,7 +5080,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.1", "dlib", "log", "once_cell", @@ -5118,9 +5110,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" dependencies = [ "serde", "stable_deref_trait", @@ -5130,9 +5122,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", @@ -5142,9 +5134,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.6.0" +version = "5.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2522b82023923eecb0b366da727ec883ace092e7887b61d3da5139f26b44da58" +checksum = "88232b74ba057a0c85472ec1bae8a17569960be17da2d5e5ad30d5efe7ea6719" dependencies = [ "async-broadcast", "async-recursion", @@ -5170,9 +5162,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.6.0" +version = "5.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d2e12843c75108c00c618c2e8ef9675b50b6ec095b36dc965f2e5aed463c15" +checksum = "6969c06899233334676e60da1675740539cf034ee472a6c5b5c54e50a0a554c9" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -5195,33 +5187,13 @@ dependencies = [ "zvariant", ] -[[package]] -name = "zerocopy" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" -dependencies = [ - "zerocopy-derive 0.7.35", -] - [[package]] name = "zerocopy" version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" dependencies = [ - "zerocopy-derive 0.8.25", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2", - "quote", - "syn", + "zerocopy-derive", ] [[package]] @@ -5277,10 +5249,21 @@ dependencies = [ ] [[package]] -name = "zerovec" -version = "0.10.4" +name = "zerotrie" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" dependencies = [ "yoke", "zerofrom", @@ -5289,9 +5272,9 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.10.3" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", @@ -5300,19 +5283,18 @@ dependencies = [ [[package]] name = "zip" -version = "2.6.1" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dcb24d0152526ae49b9b96c1dcf71850ca1e0b882e4e28ed898a93c41334744" +checksum = "12598812502ed0105f607f941c386f43d441e00148fce9dec3ca5ffb0bde9308" dependencies = [ "aes", "arbitrary", "bzip2", "constant_time_eq", "crc32fast", - "crossbeam-utils", "deflate64", "flate2", - "getrandom 0.3.2", + "getrandom 0.3.3", "hmac", "indexmap", "lzma-rs", @@ -5326,6 +5308,12 @@ dependencies = [ "zstd", ] +[[package]] +name = "zlib-rs" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "868b928d7949e09af2f6086dfc1e01936064cc7a819253bce650d4e2a2d63ba8" + [[package]] name = "zopfli" version = "0.8.2" @@ -5368,9 +5356,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.5.1" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "557e89d54880377a507c94cd5452f20e35d14325faf9d2958ebeadce0966c1b2" +checksum = "9d30786f75e393ee63a21de4f9074d4c038d52c5b1bb4471f955db249f9dffb1" dependencies = [ "endi", "enumflags2", @@ -5383,9 +5371,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.5.1" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "757779842a0d242061d24c28be589ce392e45350dfb9186dfd7a042a2e19870c" +checksum = "75fda702cd42d735ccd48117b1630432219c0e9616bf6cb0f8350844ee4d9580" dependencies = [ "proc-macro-crate", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index ec74fa4..f6c446a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,13 +2,13 @@ name = "gopher64" version = "1.0.17" edition = "2024" -rust-version = "1.85" +rust-version = "1.87" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] dirs = "6.0" -zip = "2.6" +zip = "3.0" governor = "0.10" sevenz-rust2 = { version = "0.13.0", default-features = false } chrono = "0.4" @@ -18,7 +18,7 @@ serde-big-array = "0.5" eframe = { version = "0.31", default-features = false, features = ["wayland", "x11", "glow"] } sha2 = "0.10" ab_glyph = "0.2" -sdl3-sys = { version = "0.4", features = ["build-from-source-static"] } +sdl3-sys = { version = "0.5", features = ["build-from-source-static"] } rfd = { version = "0.15", default-features = false, features = ["xdg-portal", "tokio"] } tokio = {version = "1.45", features = ["rt-multi-thread", "macros"] } spin_sleep = "1.3" diff --git a/rust-toolchain.toml b/rust-toolchain.toml index cf6d0f5..b8889a3 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.86.0" +channel = "1.87.0" From 77a22f08b34fc32c4d8fbd222792417a1c2fde23 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 16 May 2025 13:32:54 +0200 Subject: [PATCH 0446/1117] ignore settings.json --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index a3040a7..385fb4b 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,7 @@ target/ # MSVC Windows builds of rustc generate these, which store debugging information *.pdb - +.vscode/settings.json # Added by cargo /target From cea55914d9488f3b90c9ddc55ee709615bf5ecc5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 16 May 2025 13:43:36 +0200 Subject: [PATCH 0447/1117] update linux deps (#401) --- .github/workflows/build.yml | 4 ++-- .github/workflows/lint.yml | 4 ++-- README.md | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8a4e540..bebc55f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,13 +31,13 @@ jobs: target: ${{ matrix.target }} rustflags: "" - name: Install SDL Dependencies - # https://wiki.libsdl.org/SDL3/README/linux#build-dependencies + # https://wiki.libsdl.org/SDL3/README-linux#build-dependencies uses: awalsh128/cache-apt-pkgs-action@v1 with: packages: build-essential git make \ pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \ libaudio-dev libjack-dev libsndio-dev libx11-dev libxext-dev \ - libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev \ + libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libxtst-dev \ libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \ libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 49e75fc..d42d6b6 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -20,13 +20,13 @@ jobs: with: components: clippy, rustfmt - name: Install SDL Dependencies - # https://wiki.libsdl.org/SDL3/README/linux#build-dependencies + # https://wiki.libsdl.org/SDL3/README-linux#build-dependencies uses: awalsh128/cache-apt-pkgs-action@v1 with: packages: build-essential git make \ pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \ libaudio-dev libjack-dev libsndio-dev libx11-dev libxext-dev \ - libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev \ + libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libxtst-dev \ libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \ libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev diff --git a/README.md b/README.md index 5cf3173..9e54b8a 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ flatpak run --filesystem=host:ro io.github.gopher64.gopher64 /path/to/rom.z64 ## building and usage -1. Linux only: install the SDL3 dependencies: https://wiki.libsdl.org/SDL3/README/linux +1. Linux only: install the SDL3 dependencies: https://wiki.libsdl.org/SDL3/README-linux#build-dependencies 2. Install rust: https://www.rust-lang.org/tools/install 3. `git clone --recursive https://github.com/gopher64/gopher64.git` 4. `cd gopher64` From e97f4e7f169b54bd1ce030c0d76889d0d4c22e8b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 May 2025 06:28:35 +0200 Subject: [PATCH 0448/1117] Bump zip from 3.0.0 to 4.0.0 (#404) Bumps [zip](https://github.com/zip-rs/zip2) from 3.0.0 to 4.0.0. - [Release notes](https://github.com/zip-rs/zip2/releases) - [Changelog](https://github.com/zip-rs/zip2/blob/master/CHANGELOG.md) - [Commits](https://github.com/zip-rs/zip2/compare/v3.0.0...v4.0.0) --- updated-dependencies: - dependency-name: zip dependency-version: 4.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 72 +++++++++++++++++------------------------------------- Cargo.toml | 2 +- 2 files changed, 24 insertions(+), 50 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bf78aa9..eeeaf5d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -726,21 +726,6 @@ dependencies = [ "libc", ] -[[package]] -name = "crc" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" - [[package]] name = "crc32fast" version = "1.4.2" @@ -2069,6 +2054,26 @@ dependencies = [ "windows-targets 0.53.0", ] +[[package]] +name = "liblzma" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66352d7a8ac12d4877b6e6ea5a9b7650ee094257dc40889955bea5bc5b08c1d0" +dependencies = [ + "liblzma-sys", +] + +[[package]] +name = "liblzma-sys" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5839bad90c3cc2e0b8c4ed8296b80e86040240f81d46b9c0e9bc8dd51ddd3af1" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + [[package]] name = "libmimalloc-sys" version = "0.1.42" @@ -2145,16 +2150,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" -[[package]] -name = "lzma-rs" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297e814c836ae64db86b36cf2a557ba54368d03f6afcd7d947c266692f71115e" -dependencies = [ - "byteorder", - "crc", -] - [[package]] name = "lzma-rust2" version = "0.2.1" @@ -2164,17 +2159,6 @@ dependencies = [ "byteorder", ] -[[package]] -name = "lzma-sys" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - [[package]] name = "malloc_buf" version = "0.0.6" @@ -5099,15 +5083,6 @@ version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a62ce76d9b56901b19a74f19431b0d8b3bc7ca4ad685a746dfd78ca8f4fc6bda" -[[package]] -name = "xz2" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2" -dependencies = [ - "lzma-sys", -] - [[package]] name = "yoke" version = "0.8.0" @@ -5283,9 +5258,9 @@ dependencies = [ [[package]] name = "zip" -version = "3.0.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12598812502ed0105f607f941c386f43d441e00148fce9dec3ca5ffb0bde9308" +checksum = "153a6fff49d264c4babdcfa6b4d534747f520e56e8f0f384f3b808c4b64cc1fd" dependencies = [ "aes", "arbitrary", @@ -5297,12 +5272,11 @@ dependencies = [ "getrandom 0.3.3", "hmac", "indexmap", - "lzma-rs", + "liblzma", "memchr", "pbkdf2", "sha1", "time", - "xz2", "zeroize", "zopfli", "zstd", diff --git a/Cargo.toml b/Cargo.toml index f6c446a..02ecbc6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ rust-version = "1.87" [dependencies] dirs = "6.0" -zip = "3.0" +zip = "4.0" governor = "0.10" sevenz-rust2 = { version = "0.13.0", default-features = false } chrono = "0.4" From 9348594eb0032f9fb52ee453415e3c9ab5cd5aab Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 3 Jun 2025 15:45:47 +0200 Subject: [PATCH 0449/1117] Potential fix for code scanning alert no. 4: Workflow does not contain permissions (#413) Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bebc55f..45be147 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,4 +1,6 @@ name: Rust +permissions: + contents: read on: push: From 1c91abbf2df411bcfcb25803fea6ae3b688d5020 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 3 Jun 2025 16:06:38 +0200 Subject: [PATCH 0450/1117] Potential fix for code scanning alert no. 2: Workflow does not contain permissions (#416) Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> --- .github/workflows/lint.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index d42d6b6..96182d3 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -6,6 +6,9 @@ on: pull_request: branches: ["main"] +permissions: + contents: read + env: CARGO_TERM_COLOR: always From 68197d235b5fa1c198371a1ca6623d336dfef545 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 3 Jun 2025 16:11:58 +0200 Subject: [PATCH 0451/1117] update cargo packages --- Cargo.lock | 257 ++++++++++++++++++++++++++--------------------------- Cargo.toml | 2 +- 2 files changed, 128 insertions(+), 131 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index eeeaf5d..81c7e20 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -155,12 +155,12 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "3.0.7" +version = "3.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +checksum = "6680de5231bd6ee4c6191b8a1325daa282b415391ec9d3a37bd34f2060dc73fa" dependencies = [ "anstyle", - "once_cell", + "once_cell_polyfill", "windows-sys 0.59.0", ] @@ -482,9 +482,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.22" +version = "1.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32db95edf998450acc7881c932f94cd9b05c87b4b2599e8bab064753da4acfd1" +checksum = "d0fc897dc1e865cc67c0e05a836d9d3f1df3cbe442aa4a9473b18e12624a4951" dependencies = [ "jobserver", "libc", @@ -564,9 +564,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.38" +version = "4.5.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed93b9805f8ba930df42c2590f05453d5ec36cbb85d018868a5b24d31f6ac000" +checksum = "fd60e63e9be68e5fb56422e397cf9baddded06dae1d2e523401542383bc72a9f" dependencies = [ "clap_builder", "clap_derive", @@ -574,9 +574,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.38" +version = "4.5.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "379026ff283facf611b0ea629334361c4211d1b12ee01024eec1591133b04120" +checksum = "89cc6392a1f72bbeb820d71f32108f61fdaf18bc526e1d23954168a67759ef51" dependencies = [ "anstream", "anstyle", @@ -679,9 +679,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" dependencies = [ "core-foundation-sys", "libc", @@ -759,9 +759,9 @@ dependencies = [ [[package]] name = "cursor-icon" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" +checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" [[package]] name = "dashmap" @@ -1542,9 +1542,9 @@ dependencies = [ [[package]] name = "gpu-descriptor" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf29e94d6d243368b7a56caa16bc213e4f9f8ed38c4d9557069527b5d5281ca" +checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" dependencies = [ "bitflags 2.9.1", "gpu-descriptor-types", @@ -1627,9 +1627,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" +checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" [[package]] name = "hex" @@ -1723,11 +1723,10 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.5" +version = "0.27.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +checksum = "03a01595e11bdcec50946522c32dde3fc6914743000a68b93000965f2f02406d" dependencies = [ - "futures-util", "http", "hyper", "hyper-util", @@ -1736,22 +1735,26 @@ dependencies = [ "tokio", "tokio-rustls", "tower-service", - "webpki-roots 0.26.11", + "webpki-roots", ] [[package]] name = "hyper-util" -version = "0.1.11" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2" +checksum = "b1c293b6b3d21eca78250dc7dbebd6b9210ec5530e038cbfe0661b5c47ab06e8" dependencies = [ + "base64", "bytes", "futures-channel", + "futures-core", "futures-util", "http", "http-body", "hyper", + "ipnet", "libc", + "percent-encoding", "pin-project-lite", "socket2", "tokio", @@ -1771,7 +1774,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.61.0", + "windows-core 0.61.2", ] [[package]] @@ -1832,9 +1835,9 @@ checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2549ca8c7241c82f59c80ba2a6f415d931c5b58d24fb8412caa1a1f02c49139a" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" dependencies = [ "displaydoc", "icu_collections", @@ -1848,9 +1851,9 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8197e866e47b68f8f7d95249e172903bec06004b18b2937f1095d40a0c57de04" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" @@ -1928,6 +1931,16 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] + [[package]] name = "is_terminal_polyfill" version = "1.70.1" @@ -1951,9 +1964,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jiff" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02000660d30638906021176af16b17498bd0d12813dbfe7b276d8bc7f3c0806" +checksum = "a194df1107f33c79f4f93d02c80798520551949d59dfad22b6157048a88cca93" dependencies = [ "jiff-static", "log", @@ -1964,9 +1977,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c30758ddd7188629c6713fc45d1188af4f44c90582311d0c8d8c9907f60c48" +checksum = "6c6e1db7ed32c6c71b759497fae34bf7933636f75a251b9e736555da426f6442" dependencies = [ "proc-macro2", "quote", @@ -2046,9 +2059,9 @@ checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "libloading" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a793df0d7afeac54f95b471d3af7f0d4fb975699f972341a4b76988d49cdf0c" +checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", "windows-targets 0.53.0", @@ -2130,9 +2143,9 @@ checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ "autocfg", "scopeguard", @@ -2240,13 +2253,13 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2689,6 +2702,12 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" + [[package]] name = "option-ext" version = "0.2.0" @@ -2740,9 +2759,9 @@ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" dependencies = [ "lock_api", "parking_lot_core", @@ -2750,9 +2769,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", @@ -2836,15 +2855,15 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.4" +version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" +checksum = "b53a684391ad002dd6a596ceb6c74fd004fdce75f4be2e3f615068abbea5fd50" dependencies = [ "cfg-if", "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 0.38.44", + "rustix 1.0.7", "tracing", "windows-sys 0.59.0", ] @@ -2909,9 +2928,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.32" +version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" +checksum = "9dee91521343f4c5c6a63edd65e54f31f5c92fe8978c40a4282f8372194c6a7d" dependencies = [ "proc-macro2", "syn", @@ -3145,15 +3164,14 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] name = "reqwest" -version = "0.12.15" +version = "0.12.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb" +checksum = "a2f8e5513d63f2e5b386eb5106dc67eaf3f84e95258e210489136b8b92ad6119" dependencies = [ "base64", "bytes", "encoding_rs", "futures-core", - "futures-util", "h2", "http", "http-body", @@ -3170,7 +3188,6 @@ dependencies = [ "pin-project-lite", "quinn", "rustls", - "rustls-pemfile", "rustls-pki-types", "serde", "serde_json", @@ -3179,13 +3196,13 @@ dependencies = [ "tokio", "tokio-rustls", "tower", + "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots 0.26.11", - "windows-registry", + "webpki-roots", ] [[package]] @@ -3299,15 +3316,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rustls-pemfile" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" -dependencies = [ - "rustls-pki-types", -] - [[package]] name = "rustls-pki-types" version = "1.12.0" @@ -3331,9 +3339,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" [[package]] name = "ryu" @@ -3364,15 +3372,15 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sdl3-src" -version = "3.2.14" +version = "3.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5b9b63e1ae8b23fd763e37b9ce155c5718e520c65c78db07c9ec45e02e3fd06" +checksum = "c5b5d192485408fa251477ea1dfb4778d864efaec72f730ce3a753deaffb27bb" [[package]] name = "sdl3-sys" -version = "0.5.1+SDL3-3.2.14" +version = "0.5.2+SDL3-3.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be4ae099823870a9c9de3f72ec181d602d8d0550c8f5b2dfdfa9bbaa8ddccd2" +checksum = "f0a31799d7cbd36f2b187c32a56975fbdd371c200a91b01d4ed0faf0012bcf9c" dependencies = [ "cmake", "rpkg-config", @@ -3460,9 +3468,9 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.13.2" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3e35b0d7be5029b57e0abf50185b1c2084efd1729083d5093c2548f2c6bf999" +checksum = "c7205dc0402e8abfbb9bea7474dfa5551bca8dc81196077c9045228d6656e576" dependencies = [ "bit-set", "byteorder", @@ -3587,9 +3595,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.9" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", "windows-sys 0.52.0", @@ -3838,9 +3846,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.45.0" +version = "1.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165" +checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" dependencies = [ "backtrace", "bytes", @@ -3944,6 +3952,24 @@ dependencies = [ "tower-service", ] +[[package]] +name = "tower-http" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +dependencies = [ + "bitflags 2.9.1", + "bytes", + "futures-util", + "http", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-layer" version = "0.3.3" @@ -4018,11 +4044,11 @@ dependencies = [ [[package]] name = "type-map" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f" +checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" dependencies = [ - "rustc-hash 1.1.0", + "rustc-hash 2.1.1", ] [[package]] @@ -4354,7 +4380,7 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5df295f8451142f1856b1bd86a606dfe9587d439bc036e319c827700dbd555e" dependencies = [ - "core-foundation 0.10.0", + "core-foundation 0.10.1", "home", "jni", "log", @@ -4365,15 +4391,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "webpki-roots" -version = "0.26.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" -dependencies = [ - "webpki-roots 1.0.0", -] - [[package]] name = "webpki-roots" version = "1.0.0" @@ -4385,15 +4402,15 @@ dependencies = [ [[package]] name = "weezl" -version = "0.1.8" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" +checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" [[package]] name = "wgpu" -version = "24.0.3" +version = "24.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35904fb00ba2d2e0a4d002fcbbb6e1b89b574d272a50e5fc95f6e81cf281c245" +checksum = "6b0b3436f0729f6cdf2e6e9201f3d39dc95813fad61d826c1ed07918b4539353" dependencies = [ "arrayvec", "bitflags 2.9.1", @@ -4416,9 +4433,9 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "24.0.2" +version = "24.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671c25545d479b47d3f0a8e373aceb2060b67c6eb841b24ac8c32348151c7a0c" +checksum = "7f0aa306497a238d169b9dc70659105b4a096859a34894544ca81719242e1499" dependencies = [ "arrayvec", "bit-vec", @@ -4548,15 +4565,15 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.61.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ "windows-implement 0.60.0", "windows-interface 0.59.1", "windows-link", - "windows-result 0.3.2", - "windows-strings 0.4.0", + "windows-result 0.3.4", + "windows-strings 0.4.2", ] [[package]] @@ -4609,17 +4626,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" -[[package]] -name = "windows-registry" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" -dependencies = [ - "windows-result 0.3.2", - "windows-strings 0.3.1", - "windows-targets 0.53.0", -] - [[package]] name = "windows-result" version = "0.2.0" @@ -4631,9 +4637,9 @@ dependencies = [ [[package]] name = "windows-result" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ "windows-link", ] @@ -4650,18 +4656,9 @@ dependencies = [ [[package]] name = "windows-strings" -version = "0.3.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-strings" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ "windows-link", ] @@ -4937,9 +4934,9 @@ checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winit" -version = "0.30.10" +version = "0.30.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0d05bd8908e14618c9609471db04007e644fd9cce6529756046cfc577f9155e" +checksum = "a4409c10174df8779dc29a4788cac85ed84024ccbc1743b776b21a520ee1aaf4" dependencies = [ "ahash", "android-activity", @@ -4997,9 +4994,9 @@ dependencies = [ [[package]] name = "winresource" -version = "0.1.20" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4a67c78ee5782c0c1cb41bebc7e12c6e79644daa1650ebbc1de5d5b08593f7" +checksum = "a179ac8923651ff1d15efbee760b4dd3679fd85fa5a8b2bb1109b7248f80e30f" dependencies = [ "toml", "version_check", @@ -5109,9 +5106,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.7.0" +version = "5.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88232b74ba057a0c85472ec1bae8a17569960be17da2d5e5ad30d5efe7ea6719" +checksum = "d3a7c7cee313d044fca3f48fa782cb750c79e4ca76ba7bc7718cd4024cdf6f68" dependencies = [ "async-broadcast", "async-recursion", @@ -5137,9 +5134,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.7.0" +version = "5.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6969c06899233334676e60da1675740539cf034ee472a6c5b5c54e50a0a554c9" +checksum = "a17e7e5eec1550f747e71a058df81a9a83813ba0f6a95f39c4e218bdc7ba366a" dependencies = [ "proc-macro-crate", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index 02ecbc6..b00ae63 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ rust-version = "1.87" dirs = "6.0" zip = "4.0" governor = "0.10" -sevenz-rust2 = { version = "0.13.0", default-features = false } +sevenz-rust2 = { version = "0.14.0", default-features = false } chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" From 9d9f965b41e1d5b42191dd9ada88da8fcd034c9a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 4 Jun 2025 09:21:59 +0200 Subject: [PATCH 0452/1117] fix sevenz-rust2 version --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index b00ae63..82d8e99 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ rust-version = "1.87" dirs = "6.0" zip = "4.0" governor = "0.10" -sevenz-rust2 = { version = "0.14.0", default-features = false } +sevenz-rust2 = { version = "0.14", default-features = false } chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" From c25a56df505b173c240f5284799dc1a0c8e35697 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 5 Jun 2025 12:16:11 +0200 Subject: [PATCH 0453/1117] Fix netplay crash when server is down (#417) * Fix netplay crash when server is down * more --- src/ui/gui/gui_netplay.rs | 112 ++++++++++++++++++++------------------ 1 file changed, 59 insertions(+), 53 deletions(-) diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs index 7af3e24..6821ead 100644 --- a/src/ui/gui/gui_netplay.rs +++ b/src/ui/gui/gui_netplay.rs @@ -337,23 +337,25 @@ pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { buffer_target: None, }), }; - let (mut socket, _response) = - tungstenite::connect(&app.netplay.server.ip).expect("Can't connect"); - socket - .send(tungstenite::Message::Binary(tungstenite::Bytes::from( - serde_json::to_vec(&netplay_message).unwrap(), - ))) - .unwrap(); - match socket.get_mut() { - tungstenite::stream::MaybeTlsStream::Plain(stream) => { - app.netplay.peer_addr = Some(stream.peer_addr().unwrap()); - stream.set_nonblocking(true) + if let Ok((mut socket, _response)) = + tungstenite::connect(&app.netplay.server.ip) + { + socket + .send(tungstenite::Message::Binary(tungstenite::Bytes::from( + serde_json::to_vec(&netplay_message).unwrap(), + ))) + .unwrap(); + match socket.get_mut() { + tungstenite::stream::MaybeTlsStream::Plain(stream) => { + app.netplay.peer_addr = Some(stream.peer_addr().unwrap()); + stream.set_nonblocking(true) + } + _ => unimplemented!(), } - _ => unimplemented!(), + .expect("could not set socket to non-blocking"); + app.netplay.socket_waiting = true; + app.netplay.socket = Some(socket); } - .expect("could not set socket to non-blocking"); - app.netplay.socket_waiting = true; - app.netplay.socket = Some(socket); } } @@ -384,48 +386,50 @@ fn get_sessions(app: &mut GopherEguiApp, ctx: &egui::Context) { app.netplay.socket = None; } if app.netplay.socket.is_none() { - let (mut sock, _response) = - tungstenite::connect(&app.netplay.server.ip).expect("Can't connect"); - match sock.get_mut() { - tungstenite::stream::MaybeTlsStream::Plain(stream) => { - app.netplay.peer_addr = Some(stream.peer_addr().unwrap()); - stream.set_nonblocking(true) + if let Ok((mut sock, _response)) = tungstenite::connect(&app.netplay.server.ip) { + match sock.get_mut() { + tungstenite::stream::MaybeTlsStream::Plain(stream) => { + app.netplay.peer_addr = Some(stream.peer_addr().unwrap()); + stream.set_nonblocking(true) + } + _ => unimplemented!(), } - _ => unimplemented!(), + .expect("could not set socket to non-blocking"); + app.netplay.socket = Some(sock); } - .expect("could not set socket to non-blocking"); - app.netplay.socket = Some(sock); } - let socket = app.netplay.socket.as_mut().unwrap(); - if app.netplay.have_sessions.is_none() { - let now_utc = chrono::Utc::now().timestamp_millis().to_string(); - let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); - let request_rooms = NetplayMessage { - message_type: "request_get_rooms".to_string(), - player_name: None, - client_sha: None, - netplay_version: Some(NETPLAY_VERSION), - player_names: None, - emulator: Some(EMU_NAME.to_string()), - accept: None, - rooms: None, - message: None, - auth_time: Some(now_utc), - auth: Some(format!("{:x}", hasher.finalize())), - room: None, - }; + if app.netplay.socket.is_some() { + let socket = app.netplay.socket.as_mut().unwrap(); + if app.netplay.have_sessions.is_none() { + let now_utc = chrono::Utc::now().timestamp_millis().to_string(); + let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); + let request_rooms = NetplayMessage { + message_type: "request_get_rooms".to_string(), + player_name: None, + client_sha: None, + netplay_version: Some(NETPLAY_VERSION), + player_names: None, + emulator: Some(EMU_NAME.to_string()), + accept: None, + rooms: None, + message: None, + auth_time: Some(now_utc), + auth: Some(format!("{:x}", hasher.finalize())), + room: None, + }; - socket - .send(tungstenite::Message::Binary(tungstenite::Bytes::from( - serde_json::to_vec(&request_rooms).unwrap(), - ))) - .unwrap(); - app.netplay.have_sessions = Some(NetplayServer { - name: app.netplay.server.name.clone(), - ip: app.netplay.server.ip.clone(), - }); - app.netplay.socket_waiting = true; - ctx.request_repaint(); + socket + .send(tungstenite::Message::Binary(tungstenite::Bytes::from( + serde_json::to_vec(&request_rooms).unwrap(), + ))) + .unwrap(); + app.netplay.have_sessions = Some(NetplayServer { + name: app.netplay.server.name.clone(), + ip: app.netplay.server.ip.clone(), + }); + app.netplay.socket_waiting = true; + ctx.request_repaint(); + } } } @@ -465,6 +469,8 @@ pub fn netplay_join(app: &mut GopherEguiApp, ctx: &egui::Context) { if message.message_type == "reply_get_rooms" { if message.rooms.is_some() { app.netplay.sessions = message.rooms.unwrap(); + } else { + app.netplay.sessions = vec![]; } } else if message.message_type == "reply_join_room" { app.netplay.join = false; From af5f2924590353bd7114608c4eae8079c75cc9fe Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 5 Jun 2025 12:34:20 +0200 Subject: [PATCH 0454/1117] Bump to 1.0.18 (#418) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 81c7e20..7372770 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1465,7 +1465,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.0.17" +version = "1.0.18" dependencies = [ "ab_glyph", "bindgen", diff --git a/Cargo.toml b/Cargo.toml index 82d8e99..cc5eb77 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.17" +version = "1.0.18" edition = "2024" rust-version = "1.87" From 776d127a84e7ce8e1d2029df7748ec0136eb3a32 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Jun 2025 06:56:56 +0200 Subject: [PATCH 0455/1117] Bump bindgen from 0.71.1 to 0.72.0 (#420) Bumps [bindgen](https://github.com/rust-lang/rust-bindgen) from 0.71.1 to 0.72.0. - [Release notes](https://github.com/rust-lang/rust-bindgen/releases) - [Changelog](https://github.com/rust-lang/rust-bindgen/blob/main/CHANGELOG.md) - [Commits](https://github.com/rust-lang/rust-bindgen/compare/v0.71.1...v0.72.0) --- updated-dependencies: - dependency-name: bindgen dependency-version: 0.72.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7372770..d571fa0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -310,9 +310,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bindgen" -version = "0.71.1" +version = "0.72.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" +checksum = "4f72209734318d0b619a5e0f5129918b848c416e122a3c4ce054e03cb87b726f" dependencies = [ "bitflags 2.9.1", "cexpr", diff --git a/Cargo.toml b/Cargo.toml index cc5eb77..3040032 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,7 +36,7 @@ reqwest = { version = "0.12", default-features = false, features = ["http2","rus [build-dependencies] winresource = "0.1" -bindgen = "0.71" +bindgen = "0.72" cc = { version = "1.2", features = ["parallel"] } [profile.release] From eb5d255fd7c98808c0df8314a8c06e3662291e8f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 12 Jun 2025 13:34:59 +0200 Subject: [PATCH 0456/1117] move get_controller_names --- src/main.rs | 4 ++-- src/ui/gui.rs | 13 ------------- src/ui/input.rs | 13 +++++++++++++ 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main.rs b/src/main.rs index 8544b58..9cafd97 100644 --- a/src/main.rs +++ b/src/main.rs @@ -111,7 +111,7 @@ async fn main() { } } if args.list_controllers { - let controllers = gui::get_controller_names(&ui); + let controllers = ui::input::get_controller_names(&ui); for (i, controller) in controllers.iter().enumerate() { println!("Controller {}: {}", i, controller); } @@ -183,7 +183,7 @@ async fn main() { { let game_ui = ui::Ui::new(); controllers_paths = gui::get_controller_paths(&game_ui); - controller_names = gui::get_controller_names(&game_ui); + controller_names = ui::input::get_controller_names(&game_ui); } eframe::run_native( "gopher64", diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 3382c03..159fb85 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -58,19 +58,6 @@ fn get_input_profiles(config: &ui::config::Config) -> Vec { profiles } -pub fn get_controller_names(game_ui: &ui::Ui) -> Vec { - let mut controllers: Vec = vec![]; - - for joystick in game_ui.input.joysticks.iter() { - let name = unsafe { - std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickNameForID(*joystick)) - }; - controllers.push(name.to_string_lossy().to_string()); - } - - controllers -} - pub fn get_controller_paths(game_ui: &ui::Ui) -> Vec { let mut controller_paths: Vec = vec![]; diff --git a/src/ui/input.rs b/src/ui/input.rs index c9fc879..6ae870c 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -334,6 +334,19 @@ fn change_paks( pressed } +pub fn get_controller_names(game_ui: &ui::Ui) -> Vec { + let mut controllers: Vec = vec![]; + + for joystick in game_ui.input.joysticks.iter() { + let name = unsafe { + std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickNameForID(*joystick)) + }; + controllers.push(name.to_string_lossy().to_string()); + } + + controllers +} + pub fn get(ui: &ui::Ui, channel: usize) -> InputData { let profile_name = ui.config.input.input_profile_binding[channel].clone(); let profile = ui.config.input.input_profiles.get(&profile_name).unwrap(); From e83bcbb4ce369cddbd04cc025b0c3a232cc663c1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 12 Jun 2025 18:39:31 +0200 Subject: [PATCH 0457/1117] remove session reference for netplay --- src/netplay.rs | 4 +--- src/ui/gui.rs | 7 ++----- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index 6b7c68c..6912b25 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -247,11 +247,9 @@ fn process_incoming(netplay: &mut Netplay, ui: &ui::Ui) { } pub fn init( - mut peer_addr: std::net::SocketAddr, - session: ui::gui::gui_netplay::NetplayRoom, + peer_addr: std::net::SocketAddr, player_number: u8, ) -> Netplay { - peer_addr.set_port(session.port.unwrap() as u16); let udp_socket; if peer_addr.is_ipv4() { udp_socket = std::net::UdpSocket::bind((std::net::Ipv4Addr::UNSPECIFIED, 0)) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 159fb85..4aea754 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -290,8 +290,7 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context, enable_overclock: let crt = app.crt; let emulate_vru = app.emulate_vru; let overclock = app.overclock; - let peer_addr; - let session; + let mut peer_addr; let player_number; let cache_dir = app.dirs.cache_dir.clone(); let controller_paths = app.controller_paths.clone(); @@ -299,12 +298,11 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context, enable_overclock: if app.netplay.player_name.is_empty() { netplay = false; peer_addr = None; - session = None; player_number = None; } else { netplay = true; peer_addr = app.netplay.peer_addr; - session = app.netplay.waiting_session.clone(); + peer_addr.as_mut().unwrap().set_port(app.netplay.waiting_session.as_ref().unwrap().port.unwrap() as u16); player_number = Some(app.netplay.player_number); } @@ -406,7 +404,6 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context, enable_overclock: if netplay { device.netplay = Some(netplay::init( peer_addr.unwrap(), - session.unwrap(), player_number.unwrap(), )); device::run_game(&mut device, rom_contents, fullscreen, enable_overclock); From f3e819158a59d035f476471c9149b9ce1a1ef397 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 12 Jun 2025 18:41:44 +0200 Subject: [PATCH 0458/1117] fix formatting --- src/netplay.rs | 5 +---- src/ui/gui.rs | 11 ++++++----- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index 6912b25..fd01b1c 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -246,10 +246,7 @@ fn process_incoming(netplay: &mut Netplay, ui: &ui::Ui) { } } -pub fn init( - peer_addr: std::net::SocketAddr, - player_number: u8, -) -> Netplay { +pub fn init(peer_addr: std::net::SocketAddr, player_number: u8) -> Netplay { let udp_socket; if peer_addr.is_ipv4() { udp_socket = std::net::UdpSocket::bind((std::net::Ipv4Addr::UNSPECIFIED, 0)) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 4aea754..7572de3 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -302,7 +302,10 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context, enable_overclock: } else { netplay = true; peer_addr = app.netplay.peer_addr; - peer_addr.as_mut().unwrap().set_port(app.netplay.waiting_session.as_ref().unwrap().port.unwrap() as u16); + peer_addr + .as_mut() + .unwrap() + .set_port(app.netplay.waiting_session.as_ref().unwrap().port.unwrap() as u16); player_number = Some(app.netplay.player_number); } @@ -402,10 +405,8 @@ pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context, enable_overclock: save_config(&mut device.ui.config, controller_paths, save_config_items); if netplay { - device.netplay = Some(netplay::init( - peer_addr.unwrap(), - player_number.unwrap(), - )); + device.netplay = + Some(netplay::init(peer_addr.unwrap(), player_number.unwrap())); device::run_game(&mut device, rom_contents, fullscreen, enable_overclock); netplay::close(&mut device); } else { From 79e4cb1807ae626198ca89fed0ed3a6677ca0009 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 13 Jun 2025 11:04:05 +0200 Subject: [PATCH 0459/1117] Update mac runner --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 45be147..610ad8b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -83,7 +83,7 @@ jobs: path: output/gopher64-${{ matrix.arch }}.exe build-macos: - runs-on: macos-14 + runs-on: macos-15 strategy: fail-fast: false matrix: From 662c0060a10b399f8d756dc8f8d60bd4b1a0b554 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 05:36:29 +0200 Subject: [PATCH 0460/1117] Bump cc from 1.2.25 to 1.2.27 (#425) Bumps [cc](https://github.com/rust-lang/cc-rs) from 1.2.25 to 1.2.27. - [Release notes](https://github.com/rust-lang/cc-rs/releases) - [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md) - [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.25...cc-v1.2.27) --- updated-dependencies: - dependency-name: cc dependency-version: 1.2.27 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d571fa0..e920229 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -482,9 +482,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.25" +version = "1.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0fc897dc1e865cc67c0e05a836d9d3f1df3cbe442aa4a9473b18e12624a4951" +checksum = "d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc" dependencies = [ "jobserver", "libc", From 6e6b1d463d71f1af26906a3f4f72e9f53e872f53 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 05:44:13 +0200 Subject: [PATCH 0461/1117] Bump zip from 4.0.0 to 4.1.0 (#424) Bumps [zip](https://github.com/zip-rs/zip2) from 4.0.0 to 4.1.0. - [Release notes](https://github.com/zip-rs/zip2/releases) - [Changelog](https://github.com/zip-rs/zip2/blob/master/CHANGELOG.md) - [Commits](https://github.com/zip-rs/zip2/compare/v4.0.0...v4.1.0) --- updated-dependencies: - dependency-name: zip dependency-version: 4.1.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e920229..d731c07 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5255,9 +5255,9 @@ dependencies = [ [[package]] name = "zip" -version = "4.0.0" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "153a6fff49d264c4babdcfa6b4d534747f520e56e8f0f384f3b808c4b64cc1fd" +checksum = "af7dcdb4229c0e79c2531a24de7726a0e980417a74fb4d030a35f535665439a0" dependencies = [ "aes", "arbitrary", diff --git a/Cargo.toml b/Cargo.toml index 3040032..5172c3b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ rust-version = "1.87" [dependencies] dirs = "6.0" -zip = "4.0" +zip = "4.1" governor = "0.10" sevenz-rust2 = { version = "0.14", default-features = false } chrono = "0.4" From a28ed6766bb7b3d44791935fd9b4a8838c3fc763 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 05:51:54 +0200 Subject: [PATCH 0462/1117] Bump tungstenite from 0.26.2 to 0.27.0 (#426) Bumps [tungstenite](https://github.com/snapview/tungstenite-rs) from 0.26.2 to 0.27.0. - [Changelog](https://github.com/snapview/tungstenite-rs/blob/master/CHANGELOG.md) - [Commits](https://github.com/snapview/tungstenite-rs/compare/v0.26.2...v0.27.0) --- updated-dependencies: - dependency-name: tungstenite dependency-version: 0.27.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d731c07..a5402d0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4027,9 +4027,9 @@ checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" [[package]] name = "tungstenite" -version = "0.26.2" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" +checksum = "eadc29d668c91fcc564941132e17b28a7ceb2f3ebf0b9dae3e03fd7a6748eb0d" dependencies = [ "bytes", "data-encoding", diff --git a/Cargo.toml b/Cargo.toml index 5172c3b..0985b15 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,7 +25,7 @@ spin_sleep = "1.3" encoding_rs = "0.8" mimalloc = "0.1" regex = "1.11" -tungstenite = "0.26" +tungstenite = "0.27" socket2 = "0.5" rand_chacha = "0.9" fatfs = "0.3" From c7680f10a0b7821daac98c3e7eb9b1ce37af2c08 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 16 Jun 2025 06:31:23 +0200 Subject: [PATCH 0463/1117] fix compiler warning --- parallel-rdp/interface.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 23d2fba..39c2351 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -547,6 +547,8 @@ uint64_t rdp_process_commands() if (interrupt_timer == 0) interrupt_timer = 5000; break; + default: + break; } rdp_device.cmd_cur += cmd_length; From 0c2b4b2aac47bb714fd3228bd3638f39365ff547 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Jun 2025 07:10:51 +0200 Subject: [PATCH 0464/1117] Bump sevenz-rust2 from 0.14.1 to 0.15.1 (#428) Bumps [sevenz-rust2](https://github.com/hasenbanck/sevenz-rust) from 0.14.1 to 0.15.1. - [Changelog](https://github.com/hasenbanck/sevenz-rust2/blob/main/CHANGELOG.md) - [Commits](https://github.com/hasenbanck/sevenz-rust/compare/v0.14.1...v0.15.1) --- updated-dependencies: - dependency-name: sevenz-rust2 dependency-version: 0.15.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a5402d0..4d0a67a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3468,9 +3468,9 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.14.1" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7205dc0402e8abfbb9bea7474dfa5551bca8dc81196077c9045228d6656e576" +checksum = "a05dfb2306780729ce5c5ba87991c57f28c6931ac501b2dbca57400aaa44d373" dependencies = [ "bit-set", "byteorder", diff --git a/Cargo.toml b/Cargo.toml index 0985b15..e9ca835 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ rust-version = "1.87" dirs = "6.0" zip = "4.1" governor = "0.10" -sevenz-rust2 = { version = "0.14", default-features = false } +sevenz-rust2 = { version = "0.15", default-features = false } chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" From 69029f3a02e500a2dfdb0456cab084bdf5e8b646 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 23 Jun 2025 16:41:37 +0200 Subject: [PATCH 0465/1117] Don't panic on invalid transferpak access (#430) --- src/device/controller/transferpak.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/device/controller/transferpak.rs b/src/device/controller/transferpak.rs index 9704afc..ea647a5 100644 --- a/src/device/controller/transferpak.rs +++ b/src/device/controller/transferpak.rs @@ -61,7 +61,7 @@ pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usi ); } _ => { - panic!("unknown transfer pak read {:x}", address >> 12); + println!("unknown transfer pak read {:x}", address >> 12); } } } @@ -84,7 +84,7 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us } pak.enabled = true; } - _ => panic!("unknown transfer pak value"), + _ => println!("unknown transfer pak value"), } return; } @@ -127,7 +127,7 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us ); } _ => { - panic!("unknown transfer pak write {:x}", address >> 12); + println!("unknown transfer pak write {:x}", address >> 12); } } } From f213b0b9a9e242074d76627c155677bdd92d727e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 25 Jun 2025 12:38:33 +0200 Subject: [PATCH 0466/1117] Use Slint for GUI (#432) * Use Slint for GUI * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more --- Cargo.lock | 3099 ++++++++++++++++++++++++++---- Cargo.toml | 9 +- build.rs | 3 + src/device.rs | 1 - src/device/controller/vru.rs | 6 +- src/main.rs | 41 +- src/ui.rs | 6 +- src/ui/gui.rs | 1026 ++++------ src/ui/gui/about_page.slint | 58 + src/ui/gui/appwindow.slint | 93 + src/ui/gui/controller_page.slint | 256 +++ src/ui/gui/gui_netplay.rs | 947 --------- src/ui/gui/input_profile.slint | 45 + src/ui/gui/localgame_page.slint | 39 + src/ui/gui/netplay_create.slint | 114 ++ src/ui/gui/netplay_join.slint | 129 ++ src/ui/gui/netplay_page.slint | 63 + src/ui/gui/netplay_wait.slint | 103 + src/ui/gui/page.slint | 23 + src/ui/gui/pages.slint | 5 + src/ui/gui/settings_page.slint | 94 + src/ui/gui/side_bar.slint | 145 ++ src/ui/gui/vru_dialog.slint | 24 + src/ui/input.rs | 15 + src/ui/netplay.rs | 911 +++++++++ src/ui/vru.rs | 8 +- 26 files changed, 5213 insertions(+), 2050 deletions(-) create mode 100644 src/ui/gui/about_page.slint create mode 100644 src/ui/gui/appwindow.slint create mode 100644 src/ui/gui/controller_page.slint delete mode 100644 src/ui/gui/gui_netplay.rs create mode 100644 src/ui/gui/input_profile.slint create mode 100644 src/ui/gui/localgame_page.slint create mode 100644 src/ui/gui/netplay_create.slint create mode 100644 src/ui/gui/netplay_join.slint create mode 100644 src/ui/gui/netplay_page.slint create mode 100644 src/ui/gui/netplay_wait.slint create mode 100644 src/ui/gui/page.slint create mode 100644 src/ui/gui/pages.slint create mode 100644 src/ui/gui/settings_page.slint create mode 100644 src/ui/gui/side_bar.slint create mode 100644 src/ui/gui/vru_dialog.slint create mode 100644 src/ui/netplay.rs diff --git a/Cargo.lock b/Cargo.lock index 4d0a67a..20e4da1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -29,9 +29,9 @@ dependencies = [ [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aes" @@ -66,6 +66,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "aligned-vec" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b" +dependencies = [ + "equator", +] + [[package]] name = "allocator-api2" version = "0.2.21" @@ -116,9 +125,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.18" +version = "0.6.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" dependencies = [ "anstyle", "anstyle-parse", @@ -131,39 +140,45 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" [[package]] name = "anstyle-parse" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" dependencies = [ "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.8" +version = "3.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6680de5231bd6ee4c6191b8a1325daa282b415391ec9d3a37bd34f2060dc73fa" +checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" dependencies = [ "anstyle", "once_cell_polyfill", "windows-sys 0.59.0", ] +[[package]] +name = "anyhow" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" + [[package]] name = "arbitrary" version = "1.4.1" @@ -174,25 +189,22 @@ dependencies = [ ] [[package]] -name = "arboard" -version = "3.5.0" +name = "arg_enum_proc_macro" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1df21f715862ede32a0c525ce2ca4d52626bb0007f8c18b87a384503ac33e70" +checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ - "clipboard-win", - "image", - "log", - "objc2 0.6.1", - "objc2-app-kit 0.3.1", - "objc2-core-foundation", - "objc2-core-graphics", - "objc2-foundation 0.3.1", - "parking_lot", - "percent-encoding", - "windows-sys 0.59.0", - "x11rb", + "proc-macro2", + "quote", + "syn 2.0.104", ] +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + [[package]] name = "arrayvec" version = "0.7.6" @@ -223,7 +235,7 @@ dependencies = [ "enumflags2", "futures-channel", "futures-util", - "rand", + "rand 0.9.1", "raw-window-handle", "serde", "serde_repr", @@ -244,6 +256,81 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "pin-project-lite", + "slab", +] + +[[package]] +name = "async-io" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1237c0ae75a0f3765f58910ff9cdd0a12eeb39ab2f4c7de23262f337f0aacbb3" +dependencies = [ + "async-lock", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix 1.0.7", + "slab", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-process" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cde3f4e40e6021d7acffc90095cbd6dc54cb593903d1de5832f435eb274b85dc" +dependencies = [ + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener", + "futures-lite", + "rustix 1.0.7", + "tracing", +] + [[package]] name = "async-recursion" version = "1.1.1" @@ -252,9 +339,33 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] +[[package]] +name = "async-signal" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7605a4e50d4b06df3898d5a70bf5fde51ed9059b0434b73105193bc27acce0d" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 1.0.7", + "signal-hook-registry", + "slab", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + [[package]] name = "async-trait" version = "0.1.88" @@ -263,7 +374,30 @@ checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", +] + +[[package]] +name = "atk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" +dependencies = [ + "atk-sys", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", ] [[package]] @@ -282,10 +416,45 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] -name = "autocfg" -version = "1.4.0" +name = "auto_enums" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "9c170965892137a3a9aeb000b4524aa3cc022a310e709d848b6e1cdce4ab4781" +dependencies = [ + "derive_utils", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "av1-grain" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f3efb2ca85bc610acfa917b5aaa36f3fcbebed5b3182d7f877b02531c4b80c8" +dependencies = [ + "anyhow", + "arrayvec", + "log", + "nom", + "num-rational", + "v_frame", +] + +[[package]] +name = "avif-serialize" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19135c0c7a60bfee564dbe44ab5ce0557c6bf3884e5291a50be76a15640c4fbd" +dependencies = [ + "arrayvec", +] [[package]] name = "backtrace" @@ -308,6 +477,36 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "bincode" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740" +dependencies = [ + "serde", + "unty", +] + +[[package]] +name = "bindgen" +version = "0.71.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" +dependencies = [ + "bitflags 2.9.1", + "cexpr", + "clang-sys", + "itertools 0.13.0", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash 2.1.1", + "shlex", + "syn 2.0.104", +] + [[package]] name = "bindgen" version = "0.72.0" @@ -317,7 +516,7 @@ dependencies = [ "bitflags 2.9.1", "cexpr", "clang-sys", - "itertools", + "itertools 0.13.0", "log", "prettyplease", "proc-macro2", @@ -325,7 +524,7 @@ dependencies = [ "regex", "rustc-hash 2.1.1", "shlex", - "syn", + "syn 2.0.104", ] [[package]] @@ -343,6 +542,12 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" +[[package]] +name = "bit_field" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" + [[package]] name = "bitflags" version = "1.3.2" @@ -358,6 +563,12 @@ dependencies = [ "serde", ] +[[package]] +name = "bitstream-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" + [[package]] name = "block" version = "0.1.6" @@ -392,16 +603,50 @@ dependencies = [ ] [[package]] -name = "bumpalo" -version = "3.17.0" +name = "blocking" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + +[[package]] +name = "borsh" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce" +dependencies = [ + "cfg_aliases", +] + +[[package]] +name = "built" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "by_address" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" [[package]] name = "bytemuck" -version = "1.23.0" +version = "1.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c" +checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" dependencies = [ "bytemuck_derive", ] @@ -414,7 +659,7 @@ checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] @@ -454,6 +699,31 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "cairo-rs" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +dependencies = [ + "bitflags 2.9.1", + "cairo-sys-rs", + "glib", + "libc", + "once_cell", + "thiserror 1.0.69", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + [[package]] name = "calloop" version = "0.13.0" @@ -507,10 +777,20 @@ dependencies = [ ] [[package]] -name = "cfg-if" -version = "1.0.0" +name = "cfg-expr" +version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" [[package]] name = "cfg_aliases" @@ -564,9 +844,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.39" +version = "4.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd60e63e9be68e5fb56422e397cf9baddded06dae1d2e523401542383bc72a9f" +checksum = "40b6887a1d8685cebccf115538db5c0efe625ccac9696ad45c409d96566e910f" dependencies = [ "clap_builder", "clap_derive", @@ -574,9 +854,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.39" +version = "4.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89cc6392a1f72bbeb820d71f32108f61fdaf18bc526e1d23954168a67759ef51" +checksum = "e0c66c08ce9f0c698cbce5c0279d0bb6ac936d8674174fe48f736533b964f59e" dependencies = [ "anstream", "anstyle", @@ -586,21 +866,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.32" +version = "4.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" +checksum = "d2c7947ae4cc3d851207c1adb5b5e260ff0cca11446b1d6d1423788e442257ce" dependencies = [ - "heck", + "heck 0.5.0", "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] name = "clap_lex" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" [[package]] name = "clipboard-win" @@ -611,6 +891,12 @@ dependencies = [ "error-code", ] +[[package]] +name = "clru" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbd0f76e066e64fdc5631e3bb46381254deab9ef1158292f27c8c57e3bf3fe59" + [[package]] name = "cmake" version = "0.1.54" @@ -626,6 +912,22 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" +[[package]] +name = "codemap" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e769b5c8c8283982a987c6e948e540254f1058d5a74b8794914d4ef5fc2a24" + +[[package]] +name = "codemap-diagnostic" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc20770be05b566a963bf91505e60412c4a2d016d1ef95c5512823bb085a8122" +dependencies = [ + "codemap", + "termcolor", +] + [[package]] name = "codespan-reporting" version = "0.11.1" @@ -637,10 +939,16 @@ dependencies = [ ] [[package]] -name = "colorchoice" -version = "1.0.3" +name = "color_quant" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "combine" @@ -661,12 +969,47 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "const-field-offset" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91fcde4ca1211b5a94b573083c472ee19e86b19a441913f66e1cc5c41daf0255" +dependencies = [ + "const-field-offset-macro", + "field-offset", +] + +[[package]] +name = "const-field-offset-macro" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5387f5bbc9e9e6c96436ea125afa12614cebf8ac67f49abc08c1e7a891466c90" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + [[package]] name = "constant_time_eq" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +[[package]] +name = "copypasta" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e6811e17f81fe246ef2bc553f76b6ee6ab41a694845df1d37e52a92b7bbd38a" +dependencies = [ + "clipboard-win", + "objc2 0.5.2", + "objc2-app-kit 0.2.2", + "objc2-foundation 0.2.2", + "smithay-clipboard", + "x11-clipboard", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -701,7 +1044,20 @@ checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ "bitflags 1.3.2", "core-foundation 0.9.4", - "core-graphics-types", + "core-graphics-types 0.1.3", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" +dependencies = [ + "bitflags 2.9.1", + "core-foundation 0.10.1", + "core-graphics-types 0.2.0", "foreign-types", "libc", ] @@ -717,6 +1073,44 @@ dependencies = [ "libc", ] +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.9.1", + "core-foundation 0.10.1", + "libc", +] + +[[package]] +name = "core-text" +version = "21.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a593227b66cbd4007b2a050dfdd9e1d1318311409c8d600dc82ba1b15ca9c130" +dependencies = [ + "core-foundation 0.10.1", + "core-graphics 0.24.0", + "foreign-types", + "libc", +] + +[[package]] +name = "core_maths" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77745e017f5edba1a9c1d854f6f3a52dac8a12dd5af5d2f54aecf61e43d80d30" +dependencies = [ + "libm", +] + +[[package]] +name = "countme" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636" + [[package]] name = "cpufeatures" version = "0.2.17" @@ -741,12 +1135,46 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +[[package]] +name = "crunchy" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" + [[package]] name = "crypto-common" version = "0.1.6" @@ -757,6 +1185,12 @@ dependencies = [ "typenum", ] +[[package]] +name = "ctor-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f791803201ab277ace03903de1594460708d2d54df6053f2d9e82f592b19e3b" + [[package]] name = "cursor-icon" version = "1.2.0" @@ -783,6 +1217,12 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" +[[package]] +name = "data-url" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" + [[package]] name = "deflate64" version = "0.1.9" @@ -806,7 +1246,39 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", +] + +[[package]] +name = "derive_more" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", + "unicode-xid", +] + +[[package]] +name = "derive_utils" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccfae181bab5ab6c5478b2ccb69e4c68a02f8c3ec72f6616bfec9dbc599d2ee0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", ] [[package]] @@ -838,7 +1310,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -877,7 +1349,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] @@ -911,121 +1383,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" [[package]] -name = "ecolor" -version = "0.31.1" +name = "dwrote" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc4feb366740ded31a004a0e4452fbf84e80ef432ecf8314c485210229672fd1" +checksum = "bfe1f192fcce01590bd8d839aca53ce0d11d803bf291b2a6c4ad925a8f0024be" dependencies = [ - "bytemuck", - "emath", -] - -[[package]] -name = "eframe" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0dfe0859f3fb1bc6424c57d41e10e9093fe938f426b691e42272c2f336d915c" -dependencies = [ - "ahash", - "bytemuck", - "document-features", - "egui", - "egui-wgpu", - "egui-winit", - "egui_glow", - "glow", - "glutin", - "glutin-winit", - "image", - "js-sys", - "log", - "objc2 0.5.2", - "objc2-app-kit 0.2.2", - "objc2-foundation 0.2.2", - "parking_lot", - "percent-encoding", - "profiling", - "raw-window-handle", - "static_assertions", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "web-time", + "lazy_static", + "libc", + "serde", + "serde_derive", "winapi", - "windows-sys 0.59.0", - "winit", -] - -[[package]] -name = "egui" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25dd34cec49ab55d85ebf70139cb1ccd29c977ef6b6ba4fe85489d6877ee9ef3" -dependencies = [ - "ahash", - "bitflags 2.9.1", - "emath", - "epaint", - "log", - "nohash-hasher", - "profiling", -] - -[[package]] -name = "egui-wgpu" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d319dfef570f699b6e9114e235e862a2ddcf75f0d1a061de9e1328d92146d820" -dependencies = [ - "ahash", - "bytemuck", - "document-features", - "egui", - "epaint", - "log", - "profiling", - "thiserror 1.0.69", - "type-map", - "web-time", - "wgpu", - "winit", -] - -[[package]] -name = "egui-winit" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d9dfbb78fe4eb9c3a39ad528b90ee5915c252e77bbab9d4ebc576541ab67e13" -dependencies = [ - "ahash", - "arboard", - "bytemuck", - "egui", - "log", - "profiling", - "raw-window-handle", - "smithay-clipboard", - "web-time", - "webbrowser", - "winit", -] - -[[package]] -name = "egui_glow" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "910906e3f042ea6d2378ec12a6fd07698e14ddae68aed2d819ffe944a73aab9e" -dependencies = [ - "ahash", - "bytemuck", - "egui", - "glow", - "log", - "memoffset", - "profiling", - "wasm-bindgen", - "web-sys", - "winit", + "wio", ] [[package]] @@ -1034,15 +1402,6 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" -[[package]] -name = "emath" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e4cadcff7a5353ba72b7fea76bf2122b5ebdbc68e8155aa56dfdea90083fe1b" -dependencies = [ - "bytemuck", -] - [[package]] name = "embedded-io" version = "0.4.0" @@ -1072,9 +1431,9 @@ checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" [[package]] name = "enumflags2" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba2f4b465f5318854c6f8dd686ede6c0a9dc67d4b1ac241cf0eb51521a309147" +checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" dependencies = [ "enumflags2_derive", "serde", @@ -1082,30 +1441,33 @@ dependencies = [ [[package]] name = "enumflags2_derive" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4caf64a58d7a6d65ab00639b046ff54399a39f5f2554728895ace4b297cd79" +checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] -name = "epaint" -version = "0.31.1" +name = "equator" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fcc0f5a7c613afd2dee5e4b30c3e6acafb8ad6f0edb06068811f708a67c562" +checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc" dependencies = [ - "ab_glyph", - "ahash", - "bytemuck", - "ecolor", - "emath", - "log", - "nohash-hasher", - "parking_lot", - "profiling", + "equator-macro", +] + +[[package]] +name = "equator-macro" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", ] [[package]] @@ -1116,12 +1478,12 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -1130,6 +1492,15 @@ version = "3.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" +[[package]] +name = "euclid" +version = "0.22.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48" +dependencies = [ + "num-traits", +] + [[package]] name = "event-listener" version = "5.4.0" @@ -1151,6 +1522,21 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "exr" +version = "1.73.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83197f59927b46c04a183a619b7c29df34e63e63c7869320862268c0ef687e0" +dependencies = [ + "bit_field", + "half", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", +] + [[package]] name = "fastrand" version = "2.3.0" @@ -1179,16 +1565,68 @@ dependencies = [ ] [[package]] -name = "flate2" -version = "1.1.1" +name = "femtovg" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" +checksum = "ffdf29af13b81d7562ccd57624242b2ed56edc2c83dad25f13bd74d87e7fa8d9" +dependencies = [ + "bitflags 2.9.1", + "bytemuck", + "fnv", + "glow", + "image", + "imgref", + "log", + "lru", + "rgb", + "rustybuzz", + "slotmap", + "unicode-bidi", + "unicode-segmentation", + "wasm-bindgen", + "web-sys", + "wgpu", +] + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "filetime" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +dependencies = [ + "cfg-if", + "libc", + "libredox", + "windows-sys 0.59.0", +] + +[[package]] +name = "flate2" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" dependencies = [ "crc32fast", "libz-rs-sys", "miniz_oxide", ] +[[package]] +name = "float-cmp" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" + [[package]] name = "fnv" version = "1.0.7" @@ -1201,6 +1639,40 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[package]] +name = "fontconfig-parser" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbc773e24e02d4ddd8395fd30dc147524273a83e54e0f312d986ea30de5f5646" +dependencies = [ + "roxmltree", +] + +[[package]] +name = "fontdb" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "457e789b3d1202543297a350643cf459f836cade38934e7a4cf6a39e7cde2905" +dependencies = [ + "fontconfig-parser", + "log", + "memmap2", + "slotmap", + "tinyvec", + "ttf-parser 0.25.1", +] + +[[package]] +name = "fontdue" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e57e16b3fe8ff4364c0661fdaac543fb38b29ea9bc9c2f45612d90adf931d2b" +dependencies = [ + "hashbrown 0.15.4", + "rayon", + "ttf-parser 0.21.1", +] + [[package]] name = "foreign-types" version = "0.5.0" @@ -1219,7 +1691,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] @@ -1237,6 +1709,21 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + [[package]] name = "futures-channel" version = "0.3.31" @@ -1244,6 +1731,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", + "futures-sink", ] [[package]] @@ -1252,6 +1740,17 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + [[package]] name = "futures-io" version = "0.3.31" @@ -1279,7 +1778,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] @@ -1306,15 +1805,76 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ + "futures-channel", "futures-core", + "futures-io", "futures-macro", "futures-sink", "futures-task", + "memchr", "pin-project-lite", "pin-utils", "slab", ] +[[package]] +name = "gdk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" +dependencies = [ + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" +dependencies = [ + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", + "once_cell", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -1344,7 +1904,7 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", "wasm-bindgen", ] @@ -1362,12 +1922,54 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "gif" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae047235e33e2829703574b54fdec96bfbad892062d97fed2f76022287de61b" +dependencies = [ + "color_quant", + "weezl", +] + [[package]] name = "gimli" version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +[[package]] +name = "gio" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "gio-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + [[package]] name = "gl_generator" version = "0.14.0" @@ -1379,6 +1981,53 @@ dependencies = [ "xml-rs", ] +[[package]] +name = "glib" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" +dependencies = [ + "bitflags 2.9.1", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "once_cell", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "glib-macros" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" +dependencies = [ + "heck 0.4.1", + "proc-macro-crate 2.0.0", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", +] + [[package]] name = "glob" version = "0.3.2" @@ -1463,23 +2112,35 @@ dependencies = [ "gl_generator", ] +[[package]] +name = "gobject-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + [[package]] name = "gopher64" version = "1.0.18" dependencies = [ "ab_glyph", - "bindgen", + "bindgen 0.72.0", "cc", "chrono", "clap", "dirs", - "eframe", "encoding_rs", "fatfs", + "futures", "governor", "mimalloc", + "open", "postcard", - "rand_chacha", + "rand_chacha 0.9.0", "regex", "reqwest", "rfd", @@ -1490,10 +2151,12 @@ dependencies = [ "serde_json", "sevenz-rust2", "sha2", + "slint", + "slint-build", "socket2", "spin_sleep", "tokio", - "tungstenite", + "tokio-tungstenite", "winresource", "zip", ] @@ -1510,12 +2173,12 @@ dependencies = [ "futures-timer", "futures-util", "getrandom 0.3.3", - "hashbrown 0.15.3", + "hashbrown 0.15.4", "nonzero_ext", "parking_lot", "portable-atomic", "quanta", - "rand", + "rand 0.9.1", "smallvec", "spinning_top", "web-time", @@ -1540,6 +2203,18 @@ dependencies = [ "bitflags 2.9.1", ] +[[package]] +name = "gpu-allocator" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" +dependencies = [ + "log", + "presser", + "thiserror 1.0.69", + "windows 0.58.0", +] + [[package]] name = "gpu-descriptor" version = "0.3.2" @@ -1548,7 +2223,7 @@ checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" dependencies = [ "bitflags 2.9.1", "gpu-descriptor-types", - "hashbrown 0.15.3", + "hashbrown 0.15.4", ] [[package]] @@ -1560,6 +2235,58 @@ dependencies = [ "bitflags 2.9.1", ] +[[package]] +name = "gtk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a" +dependencies = [ + "atk", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" +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.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.104", +] + [[package]] name = "h2" version = "0.4.10" @@ -1579,6 +2306,16 @@ dependencies = [ "tracing", ] +[[package]] +name = "half" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" +dependencies = [ + "cfg-if", + "crunchy", +] + [[package]] name = "hash32" version = "0.2.1" @@ -1596,13 +2333,14 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] name = "hashbrown" -version = "0.15.3" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" +checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" dependencies = [ "allocator-api2", "equivalent", "foldhash", + "rayon", ] [[package]] @@ -1619,6 +2357,12 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + [[package]] name = "heck" version = "0.5.0" @@ -1627,9 +2371,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "hex" @@ -1652,15 +2396,6 @@ dependencies = [ "digest", ] -[[package]] -name = "home" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" -dependencies = [ - "windows-sys 0.59.0", -] - [[package]] name = "http" version = "1.3.1" @@ -1723,9 +2458,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.6" +version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a01595e11bdcec50946522c32dde3fc6914743000a68b93000965f2f02406d" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ "http", "hyper", @@ -1740,9 +2475,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c293b6b3d21eca78250dc7dbebd6b9210ec5530e038cbfe0661b5c47ab06e8" +checksum = "dc2fdfdbff08affe55bb779f33b053aa1fe5dd5b54c257343c17edfa55711bdb" dependencies = [ "base64", "bytes", @@ -1762,6 +2497,215 @@ dependencies = [ "tracing", ] +[[package]] +name = "i-slint-backend-selector" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891b24f1323ea2f8791667b960620532d95a76fd9008ac67d2826e1153889978" +dependencies = [ + "cfg-if", + "i-slint-backend-winit", + "i-slint-common", + "i-slint-core", + "i-slint-core-macros", +] + +[[package]] +name = "i-slint-backend-winit" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b87c1fb7bcdd6cf0c93dfd2de2c33b0c21eca625ec8aafee714edac5bd9f2b" +dependencies = [ + "cfg-if", + "cfg_aliases", + "copypasta", + "derive_more", + "futures", + "glutin", + "glutin-winit", + "i-slint-common", + "i-slint-core", + "i-slint-core-macros", + "i-slint-renderer-femtovg", + "i-slint-renderer-skia", + "lyon_path", + "muda", + "objc2-app-kit 0.3.1", + "pin-weak", + "raw-window-handle", + "scoped-tls-hkt", + "scopeguard", + "softbuffer", + "vtable", + "wasm-bindgen", + "web-sys", + "winit", + "zbus", +] + +[[package]] +name = "i-slint-common" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "748b5c0e292b2263fbd5b2855df207f4f6e068382668c55526037ac0ff5ba038" +dependencies = [ + "cfg-if", + "derive_more", + "fontdb", + "libloading", + "ttf-parser 0.25.1", +] + +[[package]] +name = "i-slint-compiler" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dae46edba3b6875f66765d4074ecf4d65b8cbf1e7a0f2b4581e23e72bd8f1157" +dependencies = [ + "by_address", + "codemap", + "codemap-diagnostic", + "derive_more", + "fontdue", + "i-slint-common", + "image", + "itertools 0.14.0", + "linked_hash_set", + "lyon_extra", + "lyon_path", + "num_enum", + "polib", + "proc-macro2", + "quote", + "rayon", + "resvg", + "rowan", + "smol_str 0.3.2", + "strum 0.27.1", + "typed-index-collections", + "url", +] + +[[package]] +name = "i-slint-core" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13599d9d81dba95796c9bf7c9f9f179bf955cdf240f886a442eb460f57b17ba1" +dependencies = [ + "auto_enums", + "bitflags 2.9.1", + "cfg-if", + "chrono", + "clru", + "const-field-offset", + "derive_more", + "euclid", + "i-slint-common", + "i-slint-core-macros", + "image", + "integer-sqrt", + "lyon_algorithms", + "lyon_extra", + "lyon_geom", + "lyon_path", + "num-traits", + "once_cell", + "pin-project", + "pin-weak", + "portable-atomic", + "raw-window-handle", + "resvg", + "rgb", + "scoped-tls-hkt", + "scopeguard", + "slab", + "strum 0.27.1", + "sys-locale", + "unicode-linebreak", + "unicode-script", + "unicode-segmentation", + "vtable", + "wasm-bindgen", + "web-sys", + "web-time", +] + +[[package]] +name = "i-slint-core-macros" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2633fb6f59e2184db69c0b3323ad8c324b169aa8d24999a67f2b5cc2c2324b8e" +dependencies = [ + "quote", + "serde_json", + "syn 2.0.104", +] + +[[package]] +name = "i-slint-renderer-femtovg" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e63ad7c680b0d205a2bc19f3974fcb9bc567ab786dbc34553e30aa8b1dffb9f9" +dependencies = [ + "cfg-if", + "const-field-offset", + "core-foundation 0.10.1", + "core-text", + "derive_more", + "dwrote", + "femtovg", + "glow", + "i-slint-common", + "i-slint-core", + "i-slint-core-macros", + "imgref", + "lyon_path", + "pin-weak", + "rgb", + "scoped-tls-hkt", + "ttf-parser 0.25.1", + "unicode-script", + "unicode-segmentation", + "wasm-bindgen", + "web-sys", + "wgpu", + "winapi", +] + +[[package]] +name = "i-slint-renderer-skia" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e63a3aa935a803f1e59e1fb04bc49f93bc23a0612cd49afa7dc9533613e992aa" +dependencies = [ + "bytemuck", + "cfg-if", + "cfg_aliases", + "const-field-offset", + "derive_more", + "glow", + "glutin", + "i-slint-common", + "i-slint-core", + "i-slint-core-macros", + "lyon_path", + "objc2 0.6.1", + "objc2-app-kit 0.3.1", + "objc2-core-foundation", + "objc2-foundation 0.3.1", + "objc2-metal 0.3.1", + "objc2-quartz-core 0.3.1", + "pin-weak", + "raw-window-handle", + "raw-window-metal", + "scoped-tls-hkt", + "skia-safe", + "softbuffer", + "unicode-segmentation", + "vtable", + "windows 0.61.3", +] + [[package]] name = "iana-time-zone" version = "0.1.63" @@ -1901,11 +2845,43 @@ checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" dependencies = [ "bytemuck", "byteorder-lite", + "color_quant", + "exr", + "gif", + "image-webp", "num-traits", "png", + "qoi", + "ravif", + "rayon", + "rgb", "tiff", + "zune-core", + "zune-jpeg", ] +[[package]] +name = "image-webp" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6970fe7a5300b4b42e62c52efa0187540a5bef546c60edaf554ef595d2e6f0b" +dependencies = [ + "byteorder-lite", + "quick-error", +] + +[[package]] +name = "imagesize" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285" + +[[package]] +name = "imgref" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" + [[package]] name = "indexmap" version = "2.9.0" @@ -1913,7 +2889,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", - "hashbrown 0.15.3", + "hashbrown 0.15.4", ] [[package]] @@ -1925,6 +2901,26 @@ dependencies = [ "generic-array", ] +[[package]] +name = "integer-sqrt" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" +dependencies = [ + "num-traits", +] + +[[package]] +name = "interpolate_name" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + [[package]] name = "ipnet" version = "2.11.0" @@ -1941,12 +2937,40 @@ dependencies = [ "serde", ] +[[package]] +name = "is-docker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" +dependencies = [ + "once_cell", +] + +[[package]] +name = "is-wsl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] + [[package]] name = "is_terminal_polyfill" version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.13.0" @@ -1956,6 +2980,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.15" @@ -1964,9 +2997,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jiff" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a194df1107f33c79f4f93d02c80798520551949d59dfad22b6157048a88cca93" +checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" dependencies = [ "jiff-static", "log", @@ -1977,13 +3010,13 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c6e1db7ed32c6c71b759497fae34bf7933636f75a251b9e736555da426f6442" +checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] @@ -2020,9 +3053,9 @@ dependencies = [ [[package]] name = "jpeg-decoder" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" +checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" [[package]] name = "js-sys" @@ -2034,6 +3067,17 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.9.1", + "serde", + "unicode-segmentation", +] + [[package]] name = "khronos-egl" version = "6.0.0" @@ -2052,10 +3096,42 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] -name = "libc" -version = "0.2.172" +name = "kurbo" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" +checksum = "1077d333efea6170d9ccb96d3c3026f300ca0773da4938cc4c811daa6df68b0c" +dependencies = [ + "arrayvec", + "smallvec", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "lebe" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" + +[[package]] +name = "libc" +version = "0.2.174" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" + +[[package]] +name = "libfuzzer-sys" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf78f52d400cf2d84a3a973a78a592b4adc535739e0a5597a0da6f0c357adc75" +dependencies = [ + "arbitrary", + "cc", +] [[package]] name = "libloading" @@ -2064,23 +3140,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", - "windows-targets 0.53.0", + "windows-targets 0.53.2", ] [[package]] name = "liblzma" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66352d7a8ac12d4877b6e6ea5a9b7650ee094257dc40889955bea5bc5b08c1d0" +checksum = "0791ab7e08ccc8e0ce893f6906eb2703ed8739d8e89b57c0714e71bad09024c8" dependencies = [ "liblzma-sys", ] [[package]] name = "liblzma-sys" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5839bad90c3cc2e0b8c4ed8296b80e86040240f81d46b9c0e9bc8dd51ddd3af1" +checksum = "01b9596486f6d60c3bbe644c0e1be1aa6ccc472ad630fe8927b456973d7cb736" dependencies = [ "cc", "libc", @@ -2088,10 +3164,16 @@ dependencies = [ ] [[package]] -name = "libmimalloc-sys" -version = "0.1.42" +name = "libm" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec9d6fac27761dabcd4ee73571cdb06b7022dc99089acbe5435691edffaac0f4" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + +[[package]] +name = "libmimalloc-sys" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88cd67e9de251c1781dbe2f641a1a3ad66eaae831b8a2c38fbdc5ddae16d4d" dependencies = [ "cc", "libc", @@ -2105,18 +3187,61 @@ checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.9.1", "libc", - "redox_syscall 0.5.12", + "redox_syscall 0.5.13", +] + +[[package]] +name = "libxdo" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00333b8756a3d28e78def82067a377de7fa61b24909000aeaa2b446a948d14db" +dependencies = [ + "libxdo-sys", +] + +[[package]] +name = "libxdo-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db23b9e7e2b7831bbd8aac0bbeeeb7b68cbebc162b227e7052e8e55829a09212" +dependencies = [ + "libc", + "x11", ] [[package]] name = "libz-rs-sys" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6489ca9bd760fe9642d7644e827b0c9add07df89857b0416ee15c1cc1a3b8c5a" +checksum = "172a788537a2221661b480fee8dc5f96c580eb34fa88764d3205dc356c7e4221" dependencies = [ "zlib-rs", ] +[[package]] +name = "linereader" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d921fea6860357575519aca014c6e22470585accdd543b370c404a8a72d0dd1d" +dependencies = [ + "memchr", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linked_hash_set" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bae85b5be22d9843c80e5fc80e9b64c8a3b1f98f867c709956eca3efff4e92e2" +dependencies = [ + "linked-hash-map", +] + [[package]] name = "linux-raw-sys" version = "0.4.15" @@ -2157,12 +3282,68 @@ version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +[[package]] +name = "loop9" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" +dependencies = [ + "imgref", +] + +[[package]] +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" + [[package]] name = "lru-slab" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" +[[package]] +name = "lyon_algorithms" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f13c9be19d257c7d37e70608ed858e8eab4b2afcea2e3c9a622e892acbf43c08" +dependencies = [ + "lyon_path", + "num-traits", +] + +[[package]] +name = "lyon_extra" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ca94c7bf1e2557c2798989c43416822c12fc5dcc5e17cc3307ef0e71894a955" +dependencies = [ + "lyon_path", + "thiserror 1.0.69", +] + +[[package]] +name = "lyon_geom" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8af69edc087272df438b3ee436c4bb6d7c04aa8af665cfd398feae627dbd8570" +dependencies = [ + "arrayvec", + "euclid", + "num-traits", +] + +[[package]] +name = "lyon_path" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0047f508cd7a85ad6bad9518f68cce7b1bf6b943fb71f6da0ee3bc1e8cb75f25" +dependencies = [ + "lyon_geom", + "num-traits", +] + [[package]] name = "lzma-rust2" version = "0.2.1" @@ -2182,10 +3363,20 @@ dependencies = [ ] [[package]] -name = "memchr" -version = "2.7.4" +name = "maybe-rayon" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" +dependencies = [ + "cfg-if", + "rayon", +] + +[[package]] +name = "memchr" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "memmap2" @@ -2213,7 +3404,7 @@ checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" dependencies = [ "bitflags 2.9.1", "block", - "core-graphics-types", + "core-graphics-types 0.1.3", "foreign-types", "log", "objc", @@ -2222,9 +3413,9 @@ dependencies = [ [[package]] name = "mimalloc" -version = "0.1.46" +version = "0.1.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "995942f432bbb4822a7e9c3faa87a695185b0d09273ba85f097b54f4e458f2af" +checksum = "b1791cbe101e95af5764f06f20f6760521f7158f69dbf9d6baf941ee1bf6bc40" dependencies = [ "libmimalloc-sys", ] @@ -2243,9 +3434,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", "simd-adler32", @@ -2258,7 +3449,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", +] + +[[package]] +name = "muda" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4de14a9b5d569ca68d7c891d613b390cf5ab4f851c77aaa2f9e435555d3d9492" +dependencies = [ + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "libxdo", + "objc2 0.6.1", + "objc2-app-kit 0.3.1", + "objc2-core-foundation", + "objc2-foundation 0.3.1", + "once_cell", + "png", + "thiserror 2.0.12", "windows-sys 0.59.0", ] @@ -2278,7 +3490,7 @@ dependencies = [ "log", "rustc-hash 1.1.0", "spirv", - "strum", + "strum 0.26.3", "termcolor", "thiserror 2.0.12", "unicode-xid", @@ -2323,6 +3535,12 @@ dependencies = [ "jni-sys", ] +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + [[package]] name = "nix" version = "0.30.1" @@ -2336,12 +3554,6 @@ dependencies = [ "memoffset", ] -[[package]] -name = "nohash-hasher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" - [[package]] name = "nom" version = "7.1.3" @@ -2358,6 +3570,12 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" +[[package]] +name = "noop_proc_macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" + [[package]] name = "nt-time" version = "0.11.1" @@ -2366,16 +3584,57 @@ checksum = "f5e71108c089b161344bacb1227dd2124fee63ed1792fdd8308e6689197c2754" dependencies = [ "chrono", "jiff", - "rand", + "rand 0.9.1", "time", ] +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + [[package]] name = "num-conv" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -2383,27 +3642,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", ] [[package]] name = "num_enum" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" dependencies = [ "num_enum_derive", + "rustversion", ] [[package]] name = "num_enum_derive" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] @@ -2450,10 +3711,10 @@ dependencies = [ "block2 0.5.1", "libc", "objc2 0.5.2", - "objc2-core-data", - "objc2-core-image", + "objc2-core-data 0.2.2", + "objc2-core-image 0.2.2", "objc2-foundation 0.2.2", - "objc2-quartz-core", + "objc2-quartz-core 0.2.2", ] [[package]] @@ -2464,10 +3725,15 @@ checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" dependencies = [ "bitflags 2.9.1", "block2 0.6.1", + "libc", "objc2 0.6.1", + "objc2-cloud-kit 0.3.1", + "objc2-core-data 0.3.1", "objc2-core-foundation", "objc2-core-graphics", + "objc2-core-image 0.3.1", "objc2-foundation 0.3.1", + "objc2-quartz-core 0.3.1", ] [[package]] @@ -2483,6 +3749,17 @@ dependencies = [ "objc2-foundation 0.2.2", ] +[[package]] +name = "objc2-cloud-kit" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17614fdcd9b411e6ff1117dfb1d0150f908ba83a7df81b1f118005fe0a8ea15d" +dependencies = [ + "bitflags 2.9.1", + "objc2 0.6.1", + "objc2-foundation 0.3.1", +] + [[package]] name = "objc2-contacts" version = "0.2.2" @@ -2506,6 +3783,17 @@ dependencies = [ "objc2-foundation 0.2.2", ] +[[package]] +name = "objc2-core-data" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291fbbf7d29287518e8686417cf7239c74700fd4b607623140a7d4a3c834329d" +dependencies = [ + "bitflags 2.9.1", + "objc2 0.6.1", + "objc2-foundation 0.3.1", +] + [[package]] name = "objc2-core-foundation" version = "0.3.1" @@ -2539,7 +3827,17 @@ dependencies = [ "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", - "objc2-metal", + "objc2-metal 0.2.2", +] + +[[package]] +name = "objc2-core-image" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79b3dc0cc4386b6ccf21c157591b34a7f44c8e75b064f85502901ab2188c007e" +dependencies = [ + "objc2 0.6.1", + "objc2-foundation 0.3.1", ] [[package]] @@ -2619,6 +3917,17 @@ dependencies = [ "objc2-foundation 0.2.2", ] +[[package]] +name = "objc2-metal" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f246c183239540aab1782457b35ab2040d4259175bd1d0c58e46ada7b47a874" +dependencies = [ + "bitflags 2.9.1", + "objc2 0.6.1", + "objc2-foundation 0.3.1", +] + [[package]] name = "objc2-quartz-core" version = "0.2.2" @@ -2629,7 +3938,20 @@ dependencies = [ "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", - "objc2-metal", + "objc2-metal 0.2.2", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ffb6a0cd5f182dc964334388560b12a57f7b74b3e2dec5e2722aa2dfb2ccd5" +dependencies = [ + "bitflags 2.9.1", + "objc2 0.6.1", + "objc2-core-foundation", + "objc2-foundation 0.3.1", + "objc2-metal 0.3.1", ] [[package]] @@ -2651,13 +3973,13 @@ dependencies = [ "bitflags 2.9.1", "block2 0.5.1", "objc2 0.5.2", - "objc2-cloud-kit", - "objc2-core-data", - "objc2-core-image", + "objc2-cloud-kit 0.2.2", + "objc2-core-data 0.2.2", + "objc2-core-image 0.2.2", "objc2-core-location", "objc2-foundation 0.2.2", "objc2-link-presentation", - "objc2-quartz-core", + "objc2-quartz-core 0.2.2", "objc2-symbols", "objc2-uniform-type-identifiers", "objc2-user-notifications", @@ -2701,6 +4023,10 @@ name = "once_cell" version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +dependencies = [ + "critical-section", + "portable-atomic", +] [[package]] name = "once_cell_polyfill" @@ -2708,6 +4034,17 @@ version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +[[package]] +name = "open" +version = "5.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2483562e62ea94312f3576a7aca397306df7990b8d89033e18766744377ef95" +dependencies = [ + "is-wsl", + "libc", + "pathdiff", +] + [[package]] name = "option-ext" version = "0.2.0" @@ -2748,7 +4085,32 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4" dependencies = [ - "ttf-parser", + "ttf-parser 0.25.1", +] + +[[package]] +name = "pango" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" +dependencies = [ + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", ] [[package]] @@ -2775,7 +4137,7 @@ checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.12", + "redox_syscall 0.5.13", "smallvec", "windows-targets 0.52.6", ] @@ -2786,6 +4148,12 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "pathdiff" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" + [[package]] name = "pbkdf2" version = "0.12.2" @@ -2802,6 +4170,12 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "pico-args" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" + [[package]] name = "pin-project" version = "1.1.10" @@ -2819,7 +4193,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] @@ -2834,6 +4208,23 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pin-weak" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b330c9d1b92dfe68442ca20b009c717d5f0b1e3cf4965e62f704c3c6e95a1305" + +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + [[package]] name = "pkg-config" version = "0.3.32" @@ -2853,6 +4244,15 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "polib" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b393b155cf9be86249cba1b56cc81be0e6212c66d94ac0d76d37a1761f3bb1b" +dependencies = [ + "linereader", +] + [[package]] name = "polling" version = "3.8.0" @@ -2876,9 +4276,12 @@ checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" [[package]] name = "portable-atomic" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" +dependencies = [ + "critical-section", +] [[package]] name = "portable-atomic-util" @@ -2927,13 +4330,38 @@ dependencies = [ ] [[package]] -name = "prettyplease" -version = "0.2.33" +name = "presser" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dee91521343f4c5c6a63edd65e54f31f5c92fe8978c40a4282f8372194c6a7d" +checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" + +[[package]] +name = "prettyplease" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "061c1221631e079b26479d25bbf2275bfe5917ae8419cd7e34f13bfc2aa7539a" dependencies = [ "proc-macro2", - "syn", + "syn 2.0.104", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +dependencies = [ + "toml_edit 0.20.7", ] [[package]] @@ -2942,7 +4370,31 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ - "toml_edit", + "toml_edit 0.22.27", +] + +[[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 1.0.109", + "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]] @@ -2956,25 +4408,53 @@ dependencies = [ [[package]] name = "profiling" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d" +checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" +dependencies = [ + "profiling-procmacros", +] + +[[package]] +name = "profiling-procmacros" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" +dependencies = [ + "quote", + "syn 2.0.104", +] + +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] [[package]] name = "quanta" -version = "0.12.5" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bd1fe6824cea6538803de3ff1bc0cf3949024db3d43c9643024bfb33a807c0e" +checksum = "f3ab5a9d756f0d97bdc89019bd2e4ea098cf9cde50ee7564dde6b81ccc8f06c7" dependencies = [ "crossbeam-utils", "libc", "once_cell", "raw-cpuid", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", "web-sys", "winapi", ] +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + [[package]] name = "quick-xml" version = "0.37.5" @@ -3013,7 +4493,7 @@ dependencies = [ "bytes", "getrandom 0.3.3", "lru-slab", - "rand", + "rand 0.9.1", "ring", "rustc-hash 2.1.1", "rustls", @@ -3027,9 +4507,9 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.12" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee4e529991f949c5e25755532370b8af5d114acae52326361d68d47af64aa842" +checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970" dependencies = [ "cfg_aliases", "libc", @@ -3050,9 +4530,20 @@ dependencies = [ [[package]] name = "r-efi" -version = "5.2.0" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] [[package]] name = "rand" @@ -3060,8 +4551,18 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" dependencies = [ - "rand_chacha", - "rand_core", + "rand_chacha 0.9.0", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", ] [[package]] @@ -3071,7 +4572,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", ] [[package]] @@ -3083,6 +4593,62 @@ dependencies = [ "getrandom 0.3.3", ] +[[package]] +name = "range-alloc" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" + +[[package]] +name = "rav1e" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" +dependencies = [ + "arbitrary", + "arg_enum_proc_macro", + "arrayvec", + "av1-grain", + "bitstream-io", + "built", + "cfg-if", + "interpolate_name", + "itertools 0.12.1", + "libc", + "libfuzzer-sys", + "log", + "maybe-rayon", + "new_debug_unreachable", + "noop_proc_macro", + "num-derive", + "num-traits", + "once_cell", + "paste", + "profiling", + "rand 0.8.5", + "rand_chacha 0.3.1", + "simd_helpers", + "system-deps", + "thiserror 1.0.69", + "v_frame", + "wasm-bindgen", +] + +[[package]] +name = "ravif" +version = "0.11.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5825c26fddd16ab9f515930d49028a630efec172e903483c94796cfe31893e6b" +dependencies = [ + "avif-serialize", + "imgref", + "loop9", + "quick-error", + "rav1e", + "rayon", + "rgb", +] + [[package]] name = "raw-cpuid" version = "11.5.0" @@ -3098,6 +4664,38 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" +[[package]] +name = "raw-window-metal" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40d213455a5f1dc59214213c7330e074ddf8114c9a42411eb890c767357ce135" +dependencies = [ + "objc2 0.6.1", + "objc2-core-foundation", + "objc2-foundation 0.3.1", + "objc2-quartz-core 0.3.1", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + [[package]] name = "redox_syscall" version = "0.4.1" @@ -3109,9 +4707,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.12" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" +checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" dependencies = [ "bitflags 2.9.1", ] @@ -3164,9 +4762,9 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] name = "reqwest" -version = "0.12.19" +version = "0.12.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2f8e5513d63f2e5b386eb5106dc67eaf3f84e95258e210489136b8b92ad6119" +checksum = "eabf4c97d9130e2bf606614eb937e86edac8292eaa6f422f995d7e8de1eb1813" dependencies = [ "base64", "bytes", @@ -3179,11 +4777,9 @@ dependencies = [ "hyper", "hyper-rustls", "hyper-util", - "ipnet", "js-sys", "log", "mime", - "once_cell", "percent-encoding", "pin-project-lite", "quinn", @@ -3205,6 +4801,23 @@ dependencies = [ "webpki-roots", ] +[[package]] +name = "resvg" +version = "0.45.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8928798c0a55e03c9ca6c4c6846f76377427d2c1e1f7e6de3c06ae57942df43" +dependencies = [ + "gif", + "image-webp", + "log", + "pico-args", + "rgb", + "svgtypes", + "tiny-skia", + "usvg", + "zune-jpeg", +] + [[package]] name = "rfd" version = "0.15.3" @@ -3229,6 +4842,15 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "rgb" +version = "0.8.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" +dependencies = [ + "bytemuck", +] + [[package]] name = "ring" version = "0.17.14" @@ -3243,6 +4865,24 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rowan" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "417a3a9f582e349834051b8a10c8d71ca88da4211e4093528e36b9845f6b5f21" +dependencies = [ + "countme", + "hashbrown 0.14.5", + "rustc-hash 1.1.0", + "text-size", +] + +[[package]] +name = "roxmltree" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" + [[package]] name = "rpkg-config" version = "0.1.2" @@ -3251,9 +4891,9 @@ checksum = "5a2d2f3481209a6b42eec2fbb49063fb4e8d35b57023401495d4fe0f85c817f0" [[package]] name = "rustc-demangle" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" [[package]] name = "rustc-hash" @@ -3304,9 +4944,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.27" +version = "0.23.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "730944ca083c1c233a75c09f199e973ca499344a2b7ba9e755c457e86fb4a321" +checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" dependencies = [ "once_cell", "ring", @@ -3343,6 +4983,24 @@ version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" +[[package]] +name = "rustybuzz" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" +dependencies = [ + "bitflags 2.9.1", + "bytemuck", + "core_maths", + "log", + "smallvec", + "ttf-parser 0.25.1", + "unicode-bidi-mirroring", + "unicode-ccc", + "unicode-properties", + "unicode-script", +] + [[package]] name = "ryu" version = "1.0.20" @@ -3364,12 +5022,31 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" +[[package]] +name = "scoped-tls-hkt" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9603871ffe5df3ac39cb624790c296dbd47a400d202f56bf3e414045099524d" + [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "sctk-adwaita" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" +dependencies = [ + "ab_glyph", + "log", + "memmap2", + "smithay-client-toolkit", + "tiny-skia", +] + [[package]] name = "sdl3-src" version = "3.2.16" @@ -3419,7 +5096,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] @@ -3442,14 +5119,14 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] name = "serde_spanned" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" dependencies = [ "serde", ] @@ -3525,12 +5202,105 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" [[package]] -name = "slab" -version = "0.4.9" +name = "simd_helpers" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" dependencies = [ - "autocfg", + "quote", +] + +[[package]] +name = "simplecss" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a9c6883ca9c3c7c90e888de77b7a5c849c779d25d74a1269b0218b14e8b136c" +dependencies = [ + "log", +] + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + +[[package]] +name = "skia-bindings" +version = "0.86.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bf215f640b53293844d441e93448b437ca4937595f60e3317fbb03d7ac6783" +dependencies = [ + "bindgen 0.71.1", + "cc", + "flate2", + "heck 0.5.0", + "lazy_static", + "regex", + "serde_json", + "tar", + "toml", +] + +[[package]] +name = "skia-safe" +version = "0.86.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e372258f52414e04de007326fa497581617c9fa872a3225dca5e42212723c426" +dependencies = [ + "bitflags 2.9.1", + "lazy_static", + "skia-bindings", + "windows 0.61.3", +] + +[[package]] +name = "slab" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" + +[[package]] +name = "slint" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fad0f31b974d0d69db787cc4f8b2965806f4991b0b47bfcb40538ae714fd9448" +dependencies = [ + "const-field-offset", + "i-slint-backend-selector", + "i-slint-core", + "i-slint-core-macros", + "i-slint-renderer-femtovg", + "num-traits", + "once_cell", + "pin-weak", + "slint-macros", + "unicode-segmentation", + "vtable", +] + +[[package]] +name = "slint-build" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7076e05474941b35df7e2d03c393a3c3b4e4855dd93f0280451002df07e474" +dependencies = [ + "derive_more", + "i-slint-compiler", + "spin_on", + "toml_edit 0.22.27", +] + +[[package]] +name = "slint-macros" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66b5db8df61e3766111c8e42a957af8502b2fc1814f87eacc3a19252ae964a5c" +dependencies = [ + "i-slint-compiler", + "proc-macro2", + "quote", + "spin_on", ] [[package]] @@ -3544,9 +5314,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "smithay-client-toolkit" @@ -3593,6 +5363,16 @@ dependencies = [ "serde", ] +[[package]] +name = "smol_str" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9676b89cd56310a87b93dec47b11af744f34d5fc9f367b829474eec0a891350d" +dependencies = [ + "borsh", + "serde", +] + [[package]] name = "socket2" version = "0.5.10" @@ -3603,6 +5383,37 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "softbuffer" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08" +dependencies = [ + "as-raw-xcb-connection", + "bytemuck", + "cfg_aliases", + "core-graphics 0.24.0", + "fastrand", + "foreign-types", + "js-sys", + "log", + "memmap2", + "objc2 0.5.2", + "objc2-foundation 0.2.2", + "objc2-quartz-core 0.2.2", + "raw-window-handle", + "redox_syscall 0.5.13", + "rustix 0.38.44", + "tiny-xlib", + "wasm-bindgen", + "wayland-backend", + "wayland-client", + "wayland-sys", + "web-sys", + "windows-sys 0.59.0", + "x11rb", +] + [[package]] name = "spin" version = "0.9.8" @@ -3613,12 +5424,21 @@ dependencies = [ ] [[package]] -name = "spin_sleep" -version = "1.3.1" +name = "spin_on" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17db5ecef7e0bebeb8bf8bc4c4b554e05e0205d7008f10bb37787892e7a6507b" +checksum = "076e103ed41b9864aa838287efe5f4e3a7a0362dd00671ae62a212e5e4612da2" dependencies = [ - "windows-sys 0.59.0", + "pin-utils", +] + +[[package]] +name = "spin_sleep" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14ac0e4b54d028c2000a13895bcd84cd02a1d63c4f78e08e4ec5ec8f53efd4b9" +dependencies = [ + "windows-sys 0.60.2", ] [[package]] @@ -3651,6 +5471,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "strict-num" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" +dependencies = [ + "float-cmp", +] + [[package]] name = "strsim" version = "0.11.1" @@ -3663,7 +5492,16 @@ version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" dependencies = [ - "strum_macros", + "strum_macros 0.26.4", +] + +[[package]] +name = "strum" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32" +dependencies = [ + "strum_macros 0.27.1", ] [[package]] @@ -3672,11 +5510,24 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "heck", + "heck 0.5.0", "proc-macro2", "quote", "rustversion", - "syn", + "syn 2.0.104", +] + +[[package]] +name = "strum_macros" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c77a8c5abcaf0f9ce05d62342b7d298c346515365c36b673df4ebe3ced01fde8" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.104", ] [[package]] @@ -3686,10 +5537,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] -name = "syn" -version = "2.0.101" +name = "svgtypes" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" +checksum = "68c7541fff44b35860c1a7a47a7cadf3e4a304c457b58f9870d9706ece028afc" +dependencies = [ + "kurbo", + "siphasher", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" dependencies = [ "proc-macro2", "quote", @@ -3713,9 +5584,48 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] +[[package]] +name = "sys-locale" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" +dependencies = [ + "libc", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck 0.5.0", + "pkg-config", + "toml", + "version-compare", +] + +[[package]] +name = "tar" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + [[package]] name = "tempfile" version = "3.20.0" @@ -3738,6 +5648,12 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "text-size" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233" + [[package]] name = "thiserror" version = "1.0.69" @@ -3764,7 +5680,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] @@ -3775,7 +5691,7 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] @@ -3819,6 +5735,45 @@ dependencies = [ "time-core", ] +[[package]] +name = "tiny-skia" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" +dependencies = [ + "arrayref", + "arrayvec", + "bytemuck", + "cfg-if", + "log", + "png", + "tiny-skia-path", +] + +[[package]] +name = "tiny-skia-path" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] + +[[package]] +name = "tiny-xlib" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0324504befd01cab6e0c994f34b2ffa257849ee019d3fb3b64fb2c858887d89e" +dependencies = [ + "as-raw-xcb-connection", + "ctor-lite", + "libloading", + "pkg-config", + "tracing", +] + [[package]] name = "tinystr" version = "0.8.1" @@ -3870,7 +5825,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] @@ -3883,6 +5838,18 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-tungstenite" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "489a59b6730eda1b0171fcfda8b121f4bee2b35cba8645ca35c5f7ba3eb736c1" +dependencies = [ + "futures-util", + "log", + "tokio", + "tungstenite", +] + [[package]] name = "tokio-util" version = "0.7.15" @@ -3898,44 +5865,66 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.22" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.22.27", ] [[package]] name = "toml_datetime" -version = "0.6.9" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.22.26" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ "indexmap", "serde", "serde_spanned", "toml_datetime", "toml_write", - "winnow", + "winnow 0.7.11", ] [[package]] name = "toml_write" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "tower" @@ -3995,20 +5984,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", ] @@ -4019,11 +6008,20 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "ttf-parser" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8" + [[package]] name = "ttf-parser" version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" +dependencies = [ + "core_maths", +] [[package]] name = "tungstenite" @@ -4036,19 +6034,20 @@ dependencies = [ "http", "httparse", "log", - "rand", + "rand 0.9.1", "sha1", "thiserror 2.0.12", "utf-8", ] [[package]] -name = "type-map" -version = "0.5.1" +name = "typed-index-collections" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" +checksum = "3fd393dbd1e7b23e0cab7396570309b4068aa504e9dac2cd41d827583b4e9ab7" dependencies = [ - "rustc-hash 2.1.1", + "bincode", + "serde", ] [[package]] @@ -4068,18 +6067,60 @@ dependencies = [ "winapi", ] +[[package]] +name = "unicode-bidi" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + +[[package]] +name = "unicode-bidi-mirroring" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfa6e8c60bb66d49db113e0125ee8711b7647b5579dc7f5f19c42357ed039fe" + +[[package]] +name = "unicode-ccc" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce61d488bcdc9bc8b5d1772c404828b17fc481c0a582b5581e95fb233aef503e" + [[package]] name = "unicode-ident" version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +[[package]] +name = "unicode-linebreak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" + +[[package]] +name = "unicode-properties" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" + +[[package]] +name = "unicode-script" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f" + [[package]] name = "unicode-segmentation" version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +[[package]] +name = "unicode-vo" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" + [[package]] name = "unicode-width" version = "0.1.14" @@ -4098,6 +6139,12 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" +[[package]] +name = "unty" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" + [[package]] name = "url" version = "2.5.4" @@ -4116,6 +6163,33 @@ version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" +[[package]] +name = "usvg" +version = "0.45.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80be9b06fbae3b8b303400ab20778c80bbaf338f563afe567cf3c9eea17b47ef" +dependencies = [ + "base64", + "data-url", + "flate2", + "fontdb", + "imagesize", + "kurbo", + "log", + "pico-args", + "roxmltree", + "rustybuzz", + "simplecss", + "siphasher", + "strict-num", + "svgtypes", + "tiny-skia-path", + "unicode-bidi", + "unicode-script", + "unicode-vo", + "xmlwriter", +] + [[package]] name = "utf-8" version = "0.7.6" @@ -4134,12 +6208,52 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "v_frame" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "666b7727c8875d6ab5db9533418d7c764233ac9c0cff1d469aec8fa127597be2" +dependencies = [ + "aligned-vec", + "num-traits", + "wasm-bindgen", +] + +[[package]] +name = "version-compare" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" + [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "vtable" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "753be81c38dff787d177b5939af1fa16f72f0d0d21a6b7d74ae56e29cd26f2a6" +dependencies = [ + "const-field-offset", + "portable-atomic", + "stable_deref_trait", + "vtable-macro", +] + +[[package]] +name = "vtable-macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cfcf6171aa2b0f85718ca5888ca32f6edf61d1849f8e4b3786ad890e5b68f68" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + [[package]] name = "walkdir" version = "2.5.0" @@ -4161,9 +6275,9 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" @@ -4196,7 +6310,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn", + "syn 2.0.104", "wasm-bindgen-shared", ] @@ -4231,7 +6345,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4374,28 +6488,11 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webbrowser" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5df295f8451142f1856b1bd86a606dfe9587d439bc036e319c827700dbd555e" -dependencies = [ - "core-foundation 0.10.1", - "home", - "jni", - "log", - "ndk-context", - "objc2 0.6.1", - "objc2-foundation 0.3.1", - "url", - "web-sys", -] - [[package]] name = "webpki-roots" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2853738d1cc4f2da3a225c18ec6c3721abb31961096e9dbf5ab35fa88b19cfdb" +checksum = "8782dd5a41a24eed3a4f40b606249b3e236ca61adf1f25ea4d45c73de122b502" dependencies = [ "rustls-pki-types", ] @@ -4418,6 +6515,7 @@ dependencies = [ "document-features", "js-sys", "log", + "naga", "parking_lot", "profiling", "raw-window-handle", @@ -4465,13 +6563,16 @@ dependencies = [ "android_system_properties", "arrayvec", "ash", + "bit-set", "bitflags 2.9.1", + "block", "bytemuck", "cfg_aliases", - "core-graphics-types", + "core-graphics-types 0.1.3", "glow", "glutin_wgl_sys", "gpu-alloc", + "gpu-allocator", "gpu-descriptor", "js-sys", "khronos-egl", @@ -4486,6 +6587,7 @@ dependencies = [ "ordered-float", "parking_lot", "profiling", + "range-alloc", "raw-window-handle", "renderdoc-sys", "rustc-hash 1.1.0", @@ -4494,7 +6596,8 @@ dependencies = [ "wasm-bindgen", "web-sys", "wgpu-types", - "windows", + "windows 0.58.0", + "windows-core 0.58.0", ] [[package]] @@ -4550,6 +6653,28 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core 0.61.2", +] + [[package]] name = "windows-core" version = "0.58.0" @@ -4576,6 +6701,17 @@ dependencies = [ "windows-strings 0.4.2", ] +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core 0.61.2", + "windows-link", + "windows-threading", +] + [[package]] name = "windows-implement" version = "0.58.0" @@ -4584,7 +6720,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] @@ -4595,7 +6731,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] @@ -4606,7 +6742,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] @@ -4617,14 +6753,24 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] name = "windows-link" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link", +] [[package]] name = "windows-result" @@ -4690,6 +6836,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.2", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -4738,9 +6893,9 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.0" +version = "0.53.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" +checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" dependencies = [ "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", @@ -4752,6 +6907,15 @@ dependencies = [ "windows_x86_64_msvc 0.53.0", ] +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -4948,7 +7112,7 @@ dependencies = [ "cfg_aliases", "concurrent-queue", "core-foundation 0.9.4", - "core-graphics", + "core-graphics 0.23.2", "cursor-icon", "dpi", "js-sys", @@ -4965,8 +7129,9 @@ dependencies = [ "raw-window-handle", "redox_syscall 0.4.1", "rustix 0.38.44", + "sctk-adwaita", "smithay-client-toolkit", - "smol_str", + "smol_str 0.2.2", "tracing", "unicode-segmentation", "wasm-bindgen", @@ -4985,9 +7150,18 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.10" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" dependencies = [ "memchr", ] @@ -5002,6 +7176,15 @@ dependencies = [ "version_check", ] +[[package]] +name = "wio" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" +dependencies = [ + "winapi", +] + [[package]] name = "wit-bindgen-rt" version = "0.39.0" @@ -5017,6 +7200,26 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-clipboard" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "662d74b3d77e396b8e5beb00b9cad6a9eccf40b2ef68cc858784b14c41d535a3" +dependencies = [ + "libc", + "x11rb", +] + [[package]] name = "x11-dl" version = "2.21.0" @@ -5050,10 +7253,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" [[package]] -name = "xcursor" -version = "0.3.8" +name = "xattr" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ef33da6b1660b4ddbfb3aef0ade110c8b8a781a3b6382fa5f2b5b040fd55f61" +checksum = "0d65cbf2f12c15564212d48f4e3dfb87923d25d611f2aed18f4cb23f0413d89e" +dependencies = [ + "libc", + "rustix 1.0.7", +] + +[[package]] +name = "xcursor" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b" [[package]] name = "xkbcommon-dl" @@ -5080,6 +7293,12 @@ version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a62ce76d9b56901b19a74f19431b0d8b3bc7ca4ad685a746dfd78ca8f4fc6bda" +[[package]] +name = "xmlwriter" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" + [[package]] name = "yoke" version = "0.8.0" @@ -5100,7 +7319,7 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", "synstructure", ] @@ -5111,8 +7330,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3a7c7cee313d044fca3f48fa782cb750c79e4ca76ba7bc7718cd4024cdf6f68" dependencies = [ "async-broadcast", + "async-executor", + "async-io", + "async-lock", + "async-process", "async-recursion", + "async-task", "async-trait", + "blocking", "enumflags2", "event-listener", "futures-core", @@ -5126,7 +7351,7 @@ dependencies = [ "tracing", "uds_windows", "windows-sys 0.59.0", - "winnow", + "winnow 0.7.11", "zbus_macros", "zbus_names", "zvariant", @@ -5138,10 +7363,10 @@ version = "5.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a17e7e5eec1550f747e71a058df81a9a83813ba0f6a95f39c4e218bdc7ba366a" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn", + "syn 2.0.104", "zbus_names", "zvariant", "zvariant_utils", @@ -5155,28 +7380,28 @@ checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" dependencies = [ "serde", "static_assertions", - "winnow", + "winnow 0.7.11", "zvariant", ] [[package]] name = "zerocopy" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] @@ -5196,7 +7421,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", "synstructure", ] @@ -5217,7 +7442,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] @@ -5250,14 +7475,14 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] name = "zip" -version = "4.1.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af7dcdb4229c0e79c2531a24de7726a0e980417a74fb4d030a35f535665439a0" +checksum = "95ab361742de920c5535880f89bbd611ee62002bf11341d16a5f057bb8ba6899" dependencies = [ "aes", "arbitrary", @@ -5281,9 +7506,9 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "868b928d7949e09af2f6086dfc1e01936064cc7a819253bce650d4e2a2d63ba8" +checksum = "626bd9fa9734751fc50d6060752170984d7053f5a39061f524cda68023d4db8a" [[package]] name = "zopfli" @@ -5325,6 +7550,30 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + +[[package]] +name = "zune-inflate" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "zune-jpeg" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7384255a918371b5af158218d131530f694de9ad3815ebdd0453a940485cb0fa" +dependencies = [ + "zune-core", +] + [[package]] name = "zvariant" version = "5.5.3" @@ -5335,7 +7584,7 @@ dependencies = [ "enumflags2", "serde", "url", - "winnow", + "winnow 0.7.11", "zvariant_derive", "zvariant_utils", ] @@ -5346,10 +7595,10 @@ version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75fda702cd42d735ccd48117b1630432219c0e9616bf6cb0f8350844ee4d9580" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn", + "syn 2.0.104", "zvariant_utils", ] @@ -5363,6 +7612,6 @@ dependencies = [ "quote", "serde", "static_assertions", - "syn", - "winnow", + "syn 2.0.104", + "winnow 0.7.11", ] diff --git a/Cargo.toml b/Cargo.toml index e9ca835..19c4898 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,14 +8,15 @@ rust-version = "1.87" [dependencies] dirs = "6.0" -zip = "4.1" +zip = "4.2" governor = "0.10" sevenz-rust2 = { version = "0.15", default-features = false } chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde-big-array = "0.5" -eframe = { version = "0.31", default-features = false, features = ["wayland", "x11", "glow"] } +slint = { version = "1.12", default-features = false, features = ["compat-1-2", "std", "backend-winit", "renderer-femtovg-wgpu"] } +open = "5.3" sha2 = "0.10" ab_glyph = "0.2" sdl3-sys = { version = "0.5", features = ["build-from-source-static"] } @@ -25,7 +26,8 @@ spin_sleep = "1.3" encoding_rs = "0.8" mimalloc = "0.1" regex = "1.11" -tungstenite = "0.27" +tokio-tungstenite = "0.27" +futures = "0.3" socket2 = "0.5" rand_chacha = "0.9" fatfs = "0.3" @@ -37,6 +39,7 @@ reqwest = { version = "0.12", default-features = false, features = ["http2","rus [build-dependencies] winresource = "0.1" bindgen = "0.72" +slint-build = "1.12" cc = { version = "1.2", features = ["parallel"] } [profile.release] diff --git a/build.rs b/build.rs index f0c6d21..20aff24 100644 --- a/build.rs +++ b/build.rs @@ -2,6 +2,9 @@ fn main() { println!("cargo::rerun-if-changed=parallel-rdp"); println!("cargo::rerun-if-changed=src/compat"); + let slint_config = slint_build::CompilerConfiguration::new().with_style("cosmic".into()); + slint_build::compile_with_config("src/ui/gui/appwindow.slint", slint_config).unwrap(); + let mut simd_build = cc::Build::new(); let mut build = cc::Build::new(); build diff --git a/src/device.rs b/src/device.rs index 06d67cb..cb839fb 100644 --- a/src/device.rs +++ b/src/device.rs @@ -479,7 +479,6 @@ impl Device { vru_window: controller::vru::VruWindow { window_notifier: None, word_receiver: None, - gui_ctx: None, }, vru: controller::vru::Vru { status: 0, diff --git a/src/device/controller/vru.rs b/src/device/controller/vru.rs index ed5be09..2f7f0f5 100644 --- a/src/device/controller/vru.rs +++ b/src/device/controller/vru.rs @@ -1,5 +1,4 @@ use crate::{device, ui}; -use eframe::egui; use std::collections::HashMap; const JCMD_VRU_READ: u8 = 0x09; @@ -33,11 +32,9 @@ pub struct Vru { #[derive(serde::Serialize, serde::Deserialize)] pub struct VruWindow { #[serde(skip)] - pub window_notifier: Option>>, + pub window_notifier: Option>>>, #[serde(skip)] pub word_receiver: Option>, - #[serde(skip)] - pub gui_ctx: Option, } pub fn init(device: &mut device::Device) { @@ -195,7 +192,6 @@ pub fn process(device: &mut device::Device, channel: usize) { &device.vru.words, device.vru_window.window_notifier.as_ref().unwrap(), device.vru_window.word_receiver.as_mut().unwrap(), - device.vru_window.gui_ctx.as_ref().unwrap(), ) } else { 0x7FFF diff --git a/src/main.rs b/src/main.rs index 9cafd97..a8e2025 100644 --- a/src/main.rs +++ b/src/main.rs @@ -73,10 +73,6 @@ async fn main() { if result.is_err() { panic!("could not create config dir: {}", result.err().unwrap()) } - result = std::fs::create_dir_all(dirs.cache_dir.clone()); - if result.is_err() { - panic!("could not create cache dir: {}", result.err().unwrap()) - } result = std::fs::create_dir_all(dirs.data_dir.join("saves")); if result.is_err() { panic!("could not create save dir: {}", result.err().unwrap()) @@ -85,13 +81,6 @@ async fn main() { if result.is_err() { panic!("could not create state dir: {}", result.err().unwrap()) } - let running_file = dirs.cache_dir.join("game_running"); - if running_file.exists() { - result = std::fs::remove_file(running_file); - if result.is_err() { - panic!("could not remove running file: {}", result.err().unwrap()) - } - } let args = Args::parse(); let args_as_strings: Vec = std::env::args().collect(); @@ -168,34 +157,6 @@ async fn main() { return; } } else { - let options = eframe::NativeOptions { - viewport: eframe::egui::ViewportBuilder::default() - .with_inner_size([854.0, 480.0]) - .with_icon( - eframe::icon_data::from_png_bytes(include_bytes!("../data/gopher64.png")) - .unwrap(), - ), - ..Default::default() - }; - - let controllers_paths; - let controller_names; - { - let game_ui = ui::Ui::new(); - controllers_paths = gui::get_controller_paths(&game_ui); - controller_names = ui::input::get_controller_names(&game_ui); - } - eframe::run_native( - "gopher64", - options, - Box::new(|cc| { - Ok(Box::new(ui::gui::GopherEguiApp::new( - cc, - controllers_paths, - controller_names, - ))) - }), - ) - .unwrap(); + gui::app_window(); } } diff --git a/src/ui.rs b/src/ui.rs index 32f876b..18d9870 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -2,13 +2,13 @@ pub mod audio; pub mod config; pub mod gui; pub mod input; +pub mod netplay; pub mod storage; pub mod video; pub mod vru; pub struct Dirs { pub config_dir: std::path::PathBuf, - pub cache_dir: std::path::PathBuf, pub data_dir: std::path::PathBuf, } @@ -76,21 +76,17 @@ pub fn get_dirs() -> Dirs { let portable_dir = exe_path.parent(); let portable = portable_dir.unwrap().join("portable.txt").exists(); let config_dir; - let cache_dir; let data_dir; if portable { config_dir = portable_dir.unwrap().join("portable_data").join("config"); - cache_dir = portable_dir.unwrap().join("portable_data").join("cache"); data_dir = portable_dir.unwrap().join("portable_data").join("data"); } else { config_dir = dirs::config_dir().unwrap().join("gopher64"); - cache_dir = dirs::cache_dir().unwrap().join("gopher64"); data_dir = dirs::data_dir().unwrap().join("gopher64"); }; Dirs { config_dir, - cache_dir, data_dir, } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 7572de3..26fe347 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -1,53 +1,111 @@ -use crate::{device, netplay, ui}; -use eframe::egui; +use crate::device; +use crate::netplay; +use crate::ui; +use slint::Model; -pub mod gui_netplay; - -pub struct GopherEguiApp { - dirs: ui::Dirs, - configure_profile: bool, - profile_name: String, - controller_names: Vec, - selected_controller: [i32; 4], - selected_profile: [String; 4], - input_profiles: Vec, - controller_enabled: [bool; 4], - transfer_pak: [bool; 4], - controller_paths: Vec, - upscale: u32, - integer_scaling: bool, - fullscreen: bool, - widescreen: bool, - crt: bool, - overclock: bool, - emulate_vru: bool, - dinput: bool, - show_vru_dialog: bool, - vru_window_receiver: Option>>, - vru_word_notifier: Option>, - vru_word_list: Vec, - latest_version: Option, - update_receiver: Option>, - netplay: gui_netplay::GuiNetplay, -} +slint::include_modules!(); #[derive(serde::Deserialize)] struct GithubData { tag_name: String, } -struct SaveConfig { - selected_controller: [i32; 4], - selected_profile: [String; 4], - controller_enabled: [bool; 4], - transfer_pak: [bool; 4], - upscale: u32, - integer_scaling: bool, - fullscreen: bool, - widescreen: bool, - crt: bool, - emulate_vru: bool, - overclock: bool, +pub struct NetplayDevice { + pub peer_addr: std::net::SocketAddr, + pub player_number: u8, +} + +pub struct GbPaths { + pub rom: [Option; 4], + pub ram: [Option; 4], +} + +pub struct VruChannel { + pub vru_window_notifier: Option>>>, + pub vru_word_receiver: Option>, +} + +fn check_latest_version(weak: slint::Weak) { + let client = reqwest::Client::builder() + .user_agent(env!("CARGO_PKG_NAME")) + .build() + .unwrap(); + let task = client + .get("https://api.github.com/repos/gopher64/gopher64/releases/latest") + .send(); + tokio::spawn(async move { + let response = task.await; + if let Ok(response) = response { + let data: Result = response.json().await; + + let latest_version = if let Ok(data) = data { + semver::Version::parse(&data.tag_name[1..]).unwrap() + } else { + semver::Version::parse(env!("CARGO_PKG_VERSION")).unwrap() + }; + let current_version = semver::Version::parse(env!("CARGO_PKG_VERSION")).unwrap(); + if current_version < latest_version { + weak.upgrade_in_event_loop(move |handle| handle.set_has_update(true)) + .unwrap(); + } + } + }); +} + +fn netplay_window(app: &AppWindow, controller_paths: &[Option]) { + let weak_create = app.as_weak(); + let weak_app = app.as_weak(); + let controller_paths_create = controller_paths.to_owned(); + app.on_create_session_button_clicked(move || { + let controller_paths = controller_paths_create.clone(); + let weak_app = weak_app.clone(); + weak_create + .upgrade_in_event_loop(move |handle| { + let create_window = NetplayCreate::new().unwrap(); + save_settings(&handle, &controller_paths); + ui::netplay::setup_create_window( + &create_window, + handle.get_overclock_n64_cpu(), + handle.get_fullscreen(), + weak_app, + ); + }) + .unwrap(); + }); + + let weak_join = app.as_weak(); + let weak_app = app.as_weak(); + let controller_paths_join = controller_paths.to_owned(); + app.on_join_session_button_clicked(move || { + let controller_paths = controller_paths_join.clone(); + let weak_app = weak_app.clone(); + weak_join + .upgrade_in_event_loop(move |handle| { + let join_window = NetplayJoin::new().unwrap(); + save_settings(&handle, &controller_paths); + ui::netplay::setup_join_window(&join_window, handle.get_fullscreen(), weak_app); + }) + .unwrap(); + }); +} + +fn local_game_window(app: &AppWindow, controller_paths: &[Option]) { + let dirs = ui::get_dirs(); + let weak = app.as_weak(); + let controller_paths = controller_paths.to_owned(); + app.on_open_rom_button_clicked(move || { + let controller_paths = controller_paths.clone(); + weak.upgrade_in_event_loop(move |handle| { + save_settings(&handle, &controller_paths); + open_rom(&handle) + }) + .unwrap(); + }); + + let saves_path = dirs.data_dir.join("saves"); + app.on_saves_folder_button_clicked(move || { + open::that_detached(saves_path.clone()).unwrap(); + }); } fn get_input_profiles(config: &ui::config::Config) -> Vec { @@ -58,613 +116,345 @@ fn get_input_profiles(config: &ui::config::Config) -> Vec { profiles } -pub fn get_controller_paths(game_ui: &ui::Ui) -> Vec { - let mut controller_paths: Vec = vec![]; - - for joystick in game_ui.input.joysticks.iter() { - let path = unsafe { - std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickPathForID(*joystick)) - .to_string_lossy() - .to_string() - }; - controller_paths.push(path); - } - - controller_paths +fn settings_window(app: &AppWindow, config: &ui::config::Config) { + app.set_integer_scaling(config.video.integer_scaling); + app.set_fullscreen(config.video.fullscreen); + app.set_widescreen(config.video.widescreen); + app.set_apply_crt_shader(config.video.crt); + app.set_overclock_n64_cpu(config.emulation.overclock); + app.set_resolution(format!("{}x", config.video.upscale).into()); } -impl GopherEguiApp { - pub fn new( - cc: &eframe::CreationContext<'_>, - controller_paths: Vec, - controller_names: Vec, - ) -> GopherEguiApp { - add_fonts(&cc.egui_ctx); - let config = ui::config::Config::new(); - - let mut selected_controller = [-1, -1, -1, -1]; - for (pos, item) in config.input.controller_assignment.iter().enumerate() { - if item.is_some() { - for (path_pos, path) in controller_paths.iter().enumerate() { - if item.as_deref().unwrap() == *path { - selected_controller[pos] = path_pos as i32; - break; - } - } - } +fn update_input_profiles(weak: &slint::Weak, config: &ui::config::Config) { + let profiles = get_input_profiles(config); + weak.upgrade_in_event_loop(move |handle| { + let input_profiles = slint::VecModel::default(); + for profile in profiles { + input_profiles.push(profile.into()); } - GopherEguiApp { - configure_profile: false, - profile_name: "".to_string(), - selected_profile: config.input.input_profile_binding.clone(), - selected_controller, - controller_names, - input_profiles: get_input_profiles(&config), - controller_enabled: config.input.controller_enabled, - transfer_pak: config.input.transfer_pak, - upscale: config.video.upscale, - integer_scaling: config.video.integer_scaling, - fullscreen: config.video.fullscreen, - widescreen: config.video.widescreen, - crt: config.video.crt, - emulate_vru: config.input.emulate_vru, - overclock: config.emulation.overclock, - show_vru_dialog: false, - dinput: false, - controller_paths, - vru_window_receiver: None, - vru_word_notifier: None, - latest_version: None, - update_receiver: None, - vru_word_list: Vec::new(), - netplay: Default::default(), - dirs: ui::get_dirs(), - } - } + let input_profiles_model: std::rc::Rc> = + std::rc::Rc::new(input_profiles); + handle.set_input_profiles(slint::ModelRc::from(input_profiles_model)); + }) + .unwrap(); } -fn save_config( - config: &mut ui::config::Config, - controller_paths: Vec, - save_config_items: SaveConfig, +fn controller_window( + app: &AppWindow, + config: &ui::config::Config, + controller_names: &Vec, + controller_paths: &[Option], ) { - for (pos, item) in save_config_items.selected_controller.iter().enumerate() { - if *item != -1 { - config.input.controller_assignment[pos] = - Some(controller_paths[*item as usize].clone()); - } else { - config.input.controller_assignment[pos] = None + let controller_enabled_model: std::rc::Rc> = std::rc::Rc::new( + slint::VecModel::from(config.input.controller_enabled.to_vec()), + ); + app.set_emulate_vru(config.input.emulate_vru); + + app.set_controller_enabled(slint::ModelRc::from(controller_enabled_model)); + + let transferpak_enabled_model: std::rc::Rc> = + std::rc::Rc::new(slint::VecModel::from(config.input.transfer_pak.to_vec())); + app.set_transferpak(slint::ModelRc::from(transferpak_enabled_model)); + + let profile_bindings = slint::VecModel::default(); + for binding in config.input.input_profile_binding.iter() { + profile_bindings.push(binding.into()); + } + let input_profile_binding_model: std::rc::Rc> = + std::rc::Rc::new(profile_bindings); + app.set_input_profile_binding(slint::ModelRc::from(input_profile_binding_model)); + + update_input_profiles(&app.as_weak(), config); + + let controllers = slint::VecModel::default(); + for controller in controller_names { + controllers.push(controller.into()); + } + let controller_names_model: std::rc::Rc> = + std::rc::Rc::new(controllers); + app.set_controller_names(slint::ModelRc::from(controller_names_model)); + + let selected_controllers = slint::VecModel::default(); + for selected in config.input.controller_assignment.iter() { + let mut found = false; + for (i, path) in controller_paths.iter().enumerate() { + if selected == path { + selected_controllers.push(i as i32); + found = true; + continue; + } + } + if !found { + selected_controllers.push(0); } } + let selected_controllers_model: std::rc::Rc> = + std::rc::Rc::new(selected_controllers); + app.set_selected_controller(slint::ModelRc::from(selected_controllers_model)); - config.input.input_profile_binding = save_config_items.selected_profile; - config.input.controller_enabled = save_config_items.controller_enabled; - config.input.transfer_pak = save_config_items.transfer_pak; + let weak_app = app.as_weak(); + app.on_input_profile_button_clicked(move || { + let dialog = InputProfileDialog::new().unwrap(); + let weak_dialog = dialog.as_weak(); + let weak_app = weak_app.clone(); + dialog.on_profile_creation_button_clicked(move || { + let weak_app = weak_app.clone(); + weak_dialog + .upgrade_in_event_loop(move |handle| { + handle.hide().unwrap(); + let profile_name = handle.get_profile_name().into(); + let dinput = handle.get_dinput(); - config.video.upscale = save_config_items.upscale; - config.video.integer_scaling = save_config_items.integer_scaling; - config.video.fullscreen = save_config_items.fullscreen; - config.video.widescreen = save_config_items.widescreen; - config.video.crt = save_config_items.crt; - config.input.emulate_vru = save_config_items.emulate_vru; - - config.emulation.overclock = save_config_items.overclock; -} - -impl Drop for GopherEguiApp { - fn drop(&mut self) { - let save_config_items = SaveConfig { - selected_controller: self.selected_controller, - selected_profile: self.selected_profile.clone(), - controller_enabled: self.controller_enabled, - transfer_pak: self.transfer_pak, - upscale: self.upscale, - integer_scaling: self.integer_scaling, - fullscreen: self.fullscreen, - widescreen: self.widescreen, - crt: self.crt, - emulate_vru: self.emulate_vru, - overclock: self.overclock, - }; - let mut config = ui::config::Config::new(); - save_config( - &mut config, - self.controller_paths.clone(), - save_config_items, - ); - } -} - -fn configure_profile(app: &mut GopherEguiApp, ctx: &egui::Context) { - egui::Window::new("Configure Input Profile").show(ctx, |ui| { - ui.horizontal(|ui| { - let name_label = ui.label("Profile Name:"); - ui.text_edit_singleline(&mut app.profile_name) - .labelled_by(name_label.id); - }); - ui.checkbox(&mut app.dinput, "Use DirectInput"); - ui.horizontal(|ui| { - if ui.button("Configure Profile").clicked() { - let profile_name = app.profile_name.clone(); - let dinput = app.dinput; - std::thread::spawn(move || { - let mut game_ui = ui::Ui::new(); - ui::input::configure_input_profile(&mut game_ui, profile_name, dinput); - }); - app.configure_profile = false; - if !app.profile_name.is_empty() && !app.input_profiles.contains(&app.profile_name) { - app.input_profiles.push(app.profile_name.clone()) - } - }; - ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { - if ui.button("Close").clicked() { - app.configure_profile = false - }; - }) - }); - }); -} - -fn show_vru_dialog(app: &mut GopherEguiApp, ctx: &egui::Context) { - egui::CentralPanel::default().show(ctx, |ui| { - ui.label("What would you like to say?"); - egui::Grid::new("vru_words").show(ui, |ui| { - for (i, v) in app.vru_word_list.iter().enumerate() { - if i % 5 == 0 { - ui.end_row(); - } - if ui.button((*v).to_string()).clicked() { - app.vru_word_notifier - .as_ref() - .unwrap() - .try_send(v.clone()) - .unwrap(); - app.show_vru_dialog = false; - } - } - }); - - ui.add_space(16.0); - - if ui.button("Close without saying anything").clicked() { - app.vru_word_notifier - .as_ref() - .unwrap() - .try_send(String::from("")) + tokio::spawn(async move { + let mut game_ui = ui::Ui::new(); + ui::input::configure_input_profile(&mut game_ui, profile_name, dinput); + update_input_profiles(&weak_app, &game_ui.config); + }); + }) .unwrap(); - app.show_vru_dialog = false; - }; + }); + dialog.show().unwrap(); }); } -fn get_latest_version(app: &mut GopherEguiApp, ctx: &egui::Context) { - if app.update_receiver.is_none() { - let (tx, rx) = tokio::sync::mpsc::channel(1); - app.update_receiver = Some(rx); - let gui_ctx = ctx.clone(); - let client = reqwest::Client::builder() - .user_agent(env!("CARGO_PKG_NAME")) - .build() - .unwrap(); - let task = client - .get("https://api.github.com/repos/gopher64/gopher64/releases/latest") - .send(); - tokio::spawn(async move { - let response = task.await; - if let Ok(response) = response { - let data: Result = response.json().await; - if data.is_ok() { - tx.send(data.unwrap()).await.unwrap(); - } else { - tx.send(GithubData { - tag_name: format!("v{}", env!("CARGO_PKG_VERSION")), - }) - .await - .unwrap(); - } - gui_ctx.request_repaint(); - } - }); - } else if app.latest_version.is_none() { - let result = app.update_receiver.as_mut().unwrap().try_recv(); - if result.is_ok() { - let tag = &result.unwrap().tag_name[1..]; - app.latest_version = Some(semver::Version::parse(tag).unwrap()); - } else { - ctx.request_repaint(); - } +fn save_settings(app: &AppWindow, controller_paths: &[Option]) { + let mut config = ui::config::Config::new(); + config.video.integer_scaling = app.get_integer_scaling(); + config.video.fullscreen = app.get_fullscreen(); + config.video.widescreen = app.get_widescreen(); + config.video.crt = app.get_apply_crt_shader(); + config.emulation.overclock = app.get_overclock_n64_cpu(); + config.video.upscale = app.get_resolution().trim_end_matches('x').parse().unwrap(); + + config.input.emulate_vru = app.get_emulate_vru(); + for (i, controller_enabled) in app.get_controller_enabled().iter().enumerate() { + config.input.controller_enabled[i] = controller_enabled; + } + for (i, transferpak_enabled) in app.get_transferpak().iter().enumerate() { + config.input.transfer_pak[i] = transferpak_enabled; + } + for (i, input_profile_binding) in app.get_input_profile_binding().iter().enumerate() { + config.input.input_profile_binding[i] = input_profile_binding.into(); + } + + for (i, selected_controller) in app.get_selected_controller().iter().enumerate() { + config.input.controller_assignment[i] = + controller_paths[selected_controller as usize].clone(); } } -pub fn open_rom(app: &mut GopherEguiApp, ctx: &egui::Context, enable_overclock: bool) { - let netplay; +fn about_window(app: &AppWindow) { + app.on_wiki_button_clicked(move || { + open::that_detached("https://github.com/gopher64/gopher64/wiki").unwrap(); + }); + app.on_discord_button_clicked(move || { + open::that_detached("https://discord.gg/9RGXq8W8JQ").unwrap(); + }); + app.on_newversion_button_clicked(move || { + open::that_detached("https://github.com/gopher64/gopher64/releases/latest").unwrap(); + }); + app.set_version(format!("Version: {}", env!("CARGO_PKG_VERSION")).into()); + check_latest_version(app.as_weak()); +} - let selected_controller = app.selected_controller; - let selected_profile = app.selected_profile.clone(); - let controller_enabled = app.controller_enabled; - let transfer_pak = app.transfer_pak; - let upscale = app.upscale; - let integer_scaling = app.integer_scaling; - let fullscreen = app.fullscreen; - let widescreen = app.widescreen; - let crt = app.crt; - let emulate_vru = app.emulate_vru; - let overclock = app.overclock; - let mut peer_addr; - let player_number; - let cache_dir = app.dirs.cache_dir.clone(); - let controller_paths = app.controller_paths.clone(); +pub fn app_window() { + let app = AppWindow::new().unwrap(); + about_window(&app); + let mut controller_paths; + { + let game_ui = ui::Ui::new(); + let mut controller_names = ui::input::get_controller_names(&game_ui); + controller_names.insert(0, "None".into()); + controller_paths = ui::input::get_controller_paths(&game_ui); + controller_paths.insert(0, None); + settings_window(&app, &game_ui.config); + controller_window(&app, &game_ui.config, &controller_names, &controller_paths); + } + local_game_window(&app, &controller_paths); + netplay_window(&app, &controller_paths); + app.run().unwrap(); + save_settings(&app, &controller_paths); +} - if app.netplay.player_name.is_empty() { - netplay = false; - peer_addr = None; - player_number = None; - } else { - netplay = true; - peer_addr = app.netplay.peer_addr; - peer_addr - .as_mut() - .unwrap() - .set_port(app.netplay.waiting_session.as_ref().unwrap().port.unwrap() as u16); - player_number = Some(app.netplay.player_number); +fn setup_vru_word_watcher( + weak_vru: slint::Weak, + vru_word_notifier: tokio::sync::mpsc::Sender, + mut vru_window_receiver: tokio::sync::mpsc::Receiver>>, +) { + tokio::spawn(async move { + loop { + let notifier = vru_word_notifier.clone(); + let notifier_closed = vru_word_notifier.clone(); + let result = vru_window_receiver.recv().await; + if let Some(Some(words)) = result { + weak_vru + .upgrade_in_event_loop(move |_handle| { + let vru_dialog = VruDialog::new().unwrap(); + let vru_dialog_weak = vru_dialog.as_weak(); + + vru_dialog.on_vru_button_clicked(move |chosen_word| { + notifier.try_send(chosen_word.to_string()).unwrap(); + vru_dialog_weak.unwrap().window().hide().unwrap(); + }); + + vru_dialog.window().on_close_requested(move || { + notifier_closed.try_send("".to_string()).unwrap(); + slint::CloseRequestResponse::HideWindow + }); + + let words_vec = slint::VecModel::default(); + for word in words { + words_vec.push(word.into()); + } + let words_model: std::rc::Rc> = + std::rc::Rc::new(words_vec); + vru_dialog.set_words(slint::ModelRc::from(words_model)); + + vru_dialog.show().unwrap(); + }) + .unwrap(); + } else { + return; + } + } + }); +} + +pub fn run_rom( + gb_paths: GbPaths, + file_path: std::path::PathBuf, + fullscreen: bool, + overclock: bool, + vru_channel: VruChannel, + netplay: Option, + weak: slint::Weak, +) { + std::thread::Builder::new() + .name("n64".to_string()) + .stack_size(env!("N64_STACK_SIZE").parse().unwrap()) + .spawn(move || { + weak.upgrade_in_event_loop(move |handle| handle.set_game_running(true)) + .unwrap(); + + let mut device = device::Device::new(); + + for i in 0..4 { + if gb_paths.rom[i].is_some() && gb_paths.ram[i].is_some() { + device.transferpaks[i].cart.rom = + std::fs::read(gb_paths.rom[i].as_ref().unwrap()).unwrap(); + + device.transferpaks[i].cart.ram = + std::fs::read(gb_paths.ram[i].as_ref().unwrap()).unwrap(); + } + } + + device.vru_window.window_notifier = vru_channel.vru_window_notifier; + device.vru_window.word_receiver = vru_channel.vru_word_receiver; + + if let Some(rom_contents) = device::get_rom_contents(file_path.as_path()) { + if let Some(netplay_device) = netplay { + device.netplay = Some(netplay::init( + netplay_device.peer_addr, + netplay_device.player_number, + )); + } + device::run_game(&mut device, rom_contents, fullscreen, overclock); + if device.netplay.is_some() { + netplay::close(&mut device); + } + } else { + println!("Could not read rom file"); + } + + if let Some(vru_window_notifier) = device.vru_window.window_notifier { + vru_window_notifier.try_send(None).unwrap(); + } + + weak.upgrade_in_event_loop(move |handle| handle.set_game_running(false)) + .unwrap(); + }) + .unwrap(); +} + +fn open_rom(app: &AppWindow) { + let select_rom = rfd::AsyncFileDialog::new() + .set_title("Select ROM") + .pick_file(); + let mut select_gb_rom = [None, None, None, None]; + let mut select_gb_ram = [None, None, None, None]; + + for (i, transfer_pak_enabled) in app.get_transferpak().iter().enumerate() { + if transfer_pak_enabled { + select_gb_rom[i] = Some( + rfd::AsyncFileDialog::new() + .set_title(format!("GB ROM P{}", i + 1)) + .pick_file(), + ); + select_gb_ram[i] = Some( + rfd::AsyncFileDialog::new() + .set_title(format!("GB RAM P{}", i + 1)) + .pick_file(), + ); + } } + #[allow(clippy::type_complexity)] let (vru_window_notifier, vru_window_receiver): ( - tokio::sync::mpsc::Sender>, - tokio::sync::mpsc::Receiver>, - ) = tokio::sync::mpsc::channel(1); + tokio::sync::mpsc::Sender>>, + tokio::sync::mpsc::Receiver>>, + ) = tokio::sync::mpsc::channel(5); let (vru_word_notifier, vru_word_receiver): ( tokio::sync::mpsc::Sender, tokio::sync::mpsc::Receiver, - ) = tokio::sync::mpsc::channel(1); + ) = tokio::sync::mpsc::channel(5); - if emulate_vru && !netplay { - app.vru_window_receiver = Some(vru_window_receiver); - app.vru_word_notifier = Some(vru_word_notifier); - } else { - app.vru_window_receiver = None; - app.vru_word_notifier = None; - } - - let rom_contents = app.netplay.rom_contents.clone(); - let gui_ctx = ctx.clone(); - - let mut select_rom = None; - let mut select_gb_rom = [None, None, None, None]; - let mut select_gb_ram = [None, None, None, None]; - - if !netplay { - select_rom = Some( - rfd::AsyncFileDialog::new() - .set_title("Select ROM") - .pick_file(), - ); - for i in 0..4 { - if transfer_pak[i] { - select_gb_rom[i] = Some( - rfd::AsyncFileDialog::new() - .set_title(format!("GB ROM P{}", i + 1)) - .pick_file(), - ); - select_gb_ram[i] = Some( - rfd::AsyncFileDialog::new() - .set_title(format!("GB RAM P{}", i + 1)) - .pick_file(), - ); - } - } + let fullscreen = app.get_fullscreen(); + let overclock = app.get_overclock_n64_cpu(); + let emulate_vru = app.get_emulate_vru(); + + if emulate_vru { + setup_vru_word_watcher(app.as_weak(), vru_word_notifier, vru_window_receiver); } + let weak = app.as_weak(); tokio::spawn(async move { - let file = if !netplay { - select_rom.unwrap().await - } else { - None - }; - let mut gb_rom_path = [None, None, None, None]; - let mut gb_ram_path = [None, None, None, None]; - if !netplay { + if let Some(file) = select_rom.await { + let mut gb_rom_path = [None, None, None, None]; + let mut gb_ram_path = [None, None, None, None]; + for i in 0..4 { - if transfer_pak[i] { - gb_rom_path[i] = select_gb_rom[i].as_mut().unwrap().await; - gb_ram_path[i] = select_gb_ram[i].as_mut().unwrap().await; + if let (Some(gb_rom), Some(gb_ram)) = + (select_gb_rom[i].as_mut(), select_gb_ram[i].as_mut()) + { + if let (Some(gb_rom), Some(gb_ram)) = (gb_rom.await, gb_ram.await) { + gb_rom_path[i] = Some(gb_rom.path().to_path_buf()); + gb_ram_path[i] = Some(gb_ram.path().to_path_buf()); + } } } + + run_rom( + GbPaths { + rom: gb_rom_path, + ram: gb_ram_path, + }, + file.path().to_path_buf(), + fullscreen, + overclock, + if emulate_vru { + VruChannel { + vru_window_notifier: Some(vru_window_notifier), + vru_word_receiver: Some(vru_word_receiver), + } + } else { + VruChannel { + vru_window_notifier: None, + vru_word_receiver: None, + } + }, + None, + weak, + ); } - - std::thread::Builder::new() - .name("n64".to_string()) - .stack_size(env!("N64_STACK_SIZE").parse().unwrap()) - .spawn(move || { - let save_config_items = SaveConfig { - selected_controller, - selected_profile, - controller_enabled, - transfer_pak, - upscale, - integer_scaling, - fullscreen, - widescreen, - crt, - emulate_vru, - overclock, - }; - - if file.is_some() || netplay { - let running_file = cache_dir.join("game_running"); - if running_file.exists() { - println!("Game already running"); - return; - } - let result = std::fs::File::create(running_file.clone()); - if result.is_err() { - panic!("could not create running file: {}", result.err().unwrap()) - } - - let mut device = device::Device::new(); - save_config(&mut device.ui.config, controller_paths, save_config_items); - - if netplay { - device.netplay = - Some(netplay::init(peer_addr.unwrap(), player_number.unwrap())); - device::run_game(&mut device, rom_contents, fullscreen, enable_overclock); - netplay::close(&mut device); - } else { - for i in 0..4 { - if gb_rom_path[i].is_some() && gb_ram_path[i].is_some() { - device.transferpaks[i].cart.rom = - std::fs::read(gb_rom_path[i].as_ref().unwrap().path()).unwrap(); - - device.transferpaks[i].cart.ram = - std::fs::read(gb_ram_path[i].as_ref().unwrap().path()).unwrap(); - } - } - - if emulate_vru { - device.vru_window.window_notifier = Some(vru_window_notifier); - device.vru_window.word_receiver = Some(vru_word_receiver); - device.vru_window.gui_ctx = Some(gui_ctx); - } - - if let Some(rom_contents) = device::get_rom_contents(file.unwrap().path()) { - device::run_game( - &mut device, - rom_contents, - fullscreen, - enable_overclock, - ); - } else { - println!("Could not read rom file"); - } - } - let result = std::fs::remove_file(running_file); - if result.is_err() { - panic!("could not remove running file: {}", result.err().unwrap()) - } - } - }) - .unwrap(); }); } - -impl eframe::App for GopherEguiApp { - fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { - if self.show_vru_dialog { - show_vru_dialog(self, ctx); - return; - } - - if self.netplay.create { - gui_netplay::netplay_create(self, ctx); - } - - if self.netplay.join { - gui_netplay::netplay_join(self, ctx); - } - - if self.netplay.wait { - gui_netplay::netplay_wait(self, ctx); - } - - if !self.netplay.error.is_empty() { - gui_netplay::netplay_error(self, ctx, self.netplay.error.clone()); - } - - if self.configure_profile { - configure_profile(self, ctx); - } - - egui::CentralPanel::default().show(ctx, |ui| { - if self.configure_profile { - ui.disable() - } - egui::Grid::new("button_grid") - .min_col_width(200.0) - .show(ui, |ui| { - if ui.button("Open ROM").clicked() { - open_rom(self, ctx, self.overclock); - } - if ui.button("Netplay: Create Session").clicked() - && !self.dirs.cache_dir.join("game_running").exists() - { - self.netplay.create = true; - } - - if ui.button("Open Saves Folder").clicked() { - let command = if cfg!(target_os = "windows") { - "explorer" - } else if cfg!(target_os = "linux") { - "xdg-open" - } else { - panic!("Unsupported platform"); - }; - let _ = std::process::Command::new(command) - .arg(self.dirs.data_dir.join("saves")) - .spawn(); - } - - ui.end_row(); - - if ui.button("Configure Input Profile").clicked() - && !self.dirs.cache_dir.join("game_running").exists() - { - self.configure_profile = true; - } - - if ui.button("Netplay: Join Session").clicked() - && !self.dirs.cache_dir.join("game_running").exists() - { - self.netplay.join = true; - } - }); - - ui.add_space(16.0); - ui.label("Controller Config:"); - egui::Grid::new("controller_config").show(ui, |ui| { - ui.label("Port"); - ui.label("Enabled"); - ui.label("Emulate VRU"); - ui.label("Transfer Pak"); - ui.label("Profile"); - ui.label("Controller"); - ui.end_row(); - for i in 0..4 { - ui.label(format!("{}", i + 1)); - ui.centered_and_justified(|ui| { - ui.checkbox(&mut self.controller_enabled[i], ""); - }); - let mut vru = false; - ui.centered_and_justified(|ui| { - if i < 3 { - ui.add_enabled(false, egui::Checkbox::new(&mut vru, "")); - } else { - ui.add_enabled(true, egui::Checkbox::new(&mut self.emulate_vru, "")); - } - }); - - ui.centered_and_justified(|ui| { - ui.checkbox(&mut self.transfer_pak[i], ""); - }); - - egui::ComboBox::from_id_salt(format!("profile-combo-{}", i)) - .selected_text(self.selected_profile[i].clone()) - .show_ui(ui, |ui| { - for j in 0..self.input_profiles.len() { - ui.selectable_value( - &mut self.selected_profile[i], - self.input_profiles[j].clone(), - self.input_profiles[j].clone(), - ); - } - }); - - let controller_text = if self.selected_controller[i] == -1 { - "None".to_string() - } else { - self.controller_names[self.selected_controller[i] as usize].clone() - }; - egui::ComboBox::from_id_salt(format!("controller-combo-{}", i)) - .selected_text(controller_text) - .show_ui(ui, |ui| { - ui.selectable_value( - &mut self.selected_controller[i], - -1, - "None".to_string(), - ); - for j in 0..self.controller_names.len() { - ui.selectable_value( - &mut self.selected_controller[i], - j as i32, - self.controller_names[j].clone(), - ); - } - }); - ui.end_row(); - } - }); - ui.add_space(16.0); - let upscale_values = [1, 2, 4]; - let mut slider_value = match self.upscale { - 1 => 0, - 2 => 1, - 4 => 2, - _ => 0, - }; - let display_text = format!("{}x Resolution", upscale_values[slider_value]); - if ui - .add( - egui::Slider::new(&mut slider_value, 0..=2) - .show_value(false) - .text(display_text), - ) - .changed() - { - self.upscale = upscale_values[slider_value]; - }; - ui.checkbox(&mut self.integer_scaling, "Integer Scaling"); - ui.checkbox(&mut self.fullscreen, "Fullscreen (Esc closes game)"); - ui.checkbox(&mut self.widescreen, "Widescreen (stretch)"); - ui.checkbox(&mut self.crt, "Apply CRT shader"); - - ui.add_space(16.0); - ui.checkbox(&mut self.overclock, "Overclock N64 CPU (may cause bugs)"); - ui.add_space(16.0); - - ui.hyperlink_to("Wiki", "https://github.com/gopher64/gopher64/wiki"); - ui.hyperlink_to("Discord Server", "https://discord.gg/9RGXq8W8JQ"); - ui.add_space(16.0); - - ui.label(format!("Version: {}", env!("CARGO_PKG_VERSION"))); - if self.latest_version.is_some() { - let current_version = semver::Version::parse(env!("CARGO_PKG_VERSION")).unwrap(); - if current_version < *self.latest_version.as_ref().unwrap() { - ui.hyperlink_to( - "New version available!", - "https://github.com/gopher64/gopher64/releases/latest", - ); - } - } - }); - - if self.emulate_vru && self.vru_window_receiver.is_some() { - let result = self.vru_window_receiver.as_mut().unwrap().try_recv(); - if result.is_ok() { - self.show_vru_dialog = true; - self.vru_word_list = result.unwrap(); - } - } - - get_latest_version(self, ctx); - } -} - -fn add_fonts(ctx: &egui::Context) { - ctx.add_font(eframe::epaint::text::FontInsert::new( - "regular_font", - egui::FontData::from_static(include_bytes!("../../data/Roboto-Regular.ttf")), - vec![ - eframe::epaint::text::InsertFontFamily { - family: egui::FontFamily::Proportional, - priority: egui::epaint::text::FontPriority::Highest, - }, - eframe::epaint::text::InsertFontFamily { - family: egui::FontFamily::Monospace, - priority: egui::epaint::text::FontPriority::Highest, - }, - ], - )); - ctx.add_font(eframe::epaint::text::FontInsert::new( - "japanese_font", - egui::FontData::from_static(include_bytes!("../../data/NotoSansJP-Regular.ttf")), - vec![ - eframe::epaint::text::InsertFontFamily { - family: egui::FontFamily::Proportional, - priority: egui::epaint::text::FontPriority::Lowest, - }, - eframe::epaint::text::InsertFontFamily { - family: egui::FontFamily::Monospace, - priority: egui::epaint::text::FontPriority::Lowest, - }, - ], - )); -} diff --git a/src/ui/gui/about_page.slint b/src/ui/gui/about_page.slint new file mode 100644 index 0000000..990e348 --- /dev/null +++ b/src/ui/gui/about_page.slint @@ -0,0 +1,58 @@ +// Copyright © SixtyFPS GmbH +// SPDX-License-Identifier: MIT + +import { Button, HorizontalBox, VerticalBox } from "std-widgets.slint"; +import { Page } from "page.slint"; + +export global AboutData { + in property version; + in property has_update; +} + +export component About inherits Page { + callback wiki_button_clicked; + callback discord_button_clicked; + callback newversion_button_clicked; + title: @tr("About"); + + VerticalBox { + alignment: start; + HorizontalBox { + alignment: center; + Button { + text: @tr("Wiki"); + clicked => { + wiki_button_clicked(); + } + } + } + + HorizontalBox { + alignment: center; + Button { + text: @tr("Discord Server"); + clicked => { + discord_button_clicked(); + } + } + } + + HorizontalBox { + alignment: center; + Text { + text: AboutData.version; + } + } + + if AboutData.has_update:HorizontalBox { + alignment: center; + Button { + text: @tr("New version available! Click to download"); + primary: true; + clicked => { + newversion_button_clicked(); + } + } + } + } +} diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint new file mode 100644 index 0000000..dfaa753 --- /dev/null +++ b/src/ui/gui/appwindow.slint @@ -0,0 +1,93 @@ +// Copyright © SixtyFPS GmbH +// SPDX-License-Identifier: MIT + +import { LocalGame, ControllerConfig,Netplay,Settings,About } from "pages.slint"; +import { SideBar } from "side_bar.slint"; +import { SettingsData } from "settings_page.slint"; +import { AboutData } from "about_page.slint"; +import { ControllerData } from "controller_page.slint"; +import { State } from "localgame_page.slint"; +export { InputProfileDialog } from "input_profile.slint"; +export { VruDialog } from "vru_dialog.slint"; +export { NetplayCreate } from "netplay_create.slint"; +export { NetplayJoin } from "netplay_join.slint"; +export { NetplayWait } from "netplay_wait.slint"; +export { NetplayDialog } from "netplay_page.slint"; + +export component AppWindow inherits Window { + callback wiki_button_clicked; + callback discord_button_clicked; + callback newversion_button_clicked; + callback open_rom_button_clicked; + callback saves_folder_button_clicked; + callback input_profile_button_clicked; + callback create_session_button_clicked; + callback join_session_button_clicked; + in property version <=> AboutData.version; + in property has_update <=> AboutData.has_update; + in-out property integer_scaling <=> SettingsData.integer_scaling; + in-out property fullscreen <=> SettingsData.fullscreen; + in-out property widescreen <=> SettingsData.widescreen; + in-out property apply_crt_shader <=> SettingsData.apply_crt_shader; + in-out property overclock_n64_cpu <=> SettingsData.overclock_n64_cpu; + in-out property resolution <=> SettingsData.resolution; + in-out property emulate_vru <=> ControllerData.emulate_vru; + in-out property controller_enabled <=> ControllerData.controller_enabled; + in-out property transferpak <=> ControllerData.transferpak; + in-out property input_profile_binding <=> ControllerData.input_profile_binding; + in-out property input_profiles <=> ControllerData.input_profiles; + in-out property controller_names <=> ControllerData.controller_names; + in-out property selected_controller <=> ControllerData.selected_controller; + in-out property game_running <=> State.game_running; + preferred-width: 700px; + preferred-height: 500px; + title: @tr("Gopher64"); + icon: @image-url("../../../data/gopher64.png"); + + HorizontalLayout { + side-bar := SideBar { + title: @tr("Gopher64"); + model: [ + @tr("Menu" => "Local Game"), + @tr("Menu" => "Controller Config"), + @tr("Menu" => "Netplay"), + @tr("Menu" => "Settings"), + @tr("Menu" => "About") + ]; + } + + if(side-bar.current-item == 0): LocalGame { + open_rom_button_clicked => { + open_rom_button_clicked(); + } + saves_folder_button_clicked => { + saves_folder_button_clicked(); + } + } + if(side-bar.current-item == 1): ControllerConfig { + input_profile_button_clicked => { + input_profile_button_clicked(); + } + } + if(side-bar.current-item == 2): Netplay { + create_session_button_clicked => { + create_session_button_clicked(); + } + join_session_button_clicked => { + join_session_button_clicked(); + } + } + if(side-bar.current-item == 3): Settings { } + if(side-bar.current-item == 4): About { + wiki_button_clicked => { + wiki_button_clicked(); + } + discord_button_clicked => { + discord_button_clicked(); + } + newversion_button_clicked => { + newversion_button_clicked(); + } + } + } +} diff --git a/src/ui/gui/controller_page.slint b/src/ui/gui/controller_page.slint new file mode 100644 index 0000000..0ec6303 --- /dev/null +++ b/src/ui/gui/controller_page.slint @@ -0,0 +1,256 @@ +// Copyright © SixtyFPS GmbH +// SPDX-License-Identifier: MIT + +import { CheckBox, ComboBox, Button, HorizontalBox, VerticalBox, GridBox } from "std-widgets.slint"; +import { Page } from "page.slint"; +import { State } from "localgame_page.slint"; + +export global ControllerData { + in-out property emulate_vru; + in-out property <[bool]> controller_enabled; + in-out property <[bool]> transferpak; + in-out property <[string]> input_profile_binding; + in-out property <[string]> input_profiles; + in-out property <[string]> controller_names; + in-out property <[int]> selected_controller; +} + +export component ControllerConfig inherits Page { + property <[{name: string, vru-enabled: bool}]> rows: [ + { name: "1", vru-enabled: false }, + { name: "2", vru-enabled: false }, + { name: "3", vru-enabled: false }, + { name: "4", vru-enabled: true } + ]; + + callback input_profile_button_clicked; + title: @tr("Controller Configuration"); + + VerticalBox { + alignment: start; + HorizontalBox { + alignment: start; + Button { + text: @tr("Configure Input Profile"); + enabled: !State.game_running; + clicked => { + input_profile_button_clicked(); + } + } + } + + Rectangle { } + + Text { + text: @tr("Controller Settings:"); + font-weight: 600; + } + + GridBox { + Row { + Text { + text: @tr("Port"); + } + + Text { + text: @tr("Enabled"); + } + + Text { + text: @tr("Emulate VRU"); + } + + Text { + text: @tr("Transfer Pak"); + } + + Text { + text: @tr("Profile"); + } + + Text { + text: @tr("Controller"); + } + } + + Row { // 0 + property number: 0; + Text { // Port + text: rows[number].name; + vertical-alignment: center; + } + + CheckBox { // Enabled + checked: ControllerData.controller_enabled[number]; + toggled => { + ControllerData.controller_enabled[number] = self.checked; + } + } + + CheckBox { // Emulate VRU + enabled: rows[number].vru-enabled; + checked: false; + } + + CheckBox { // Transfer Pak + checked: ControllerData.transferpak[number]; + toggled => { + ControllerData.transferpak[number] = self.checked; + } + } + + ComboBox { // Profile + model: ControllerData.input_profiles; + current-value: ControllerData.input_profile_binding[number]; + selected => { + ControllerData.input_profile_binding[number] = self.current-value; + } + } + + ComboBox { // Controller + model: ControllerData.controller_names; + width: self.preferred-width; + current-value: ControllerData.controller_names[ControllerData.selected_controller[number]]; + selected => { + ControllerData.selected_controller[number] = self.current-index; + } + } + } + + Row { // 1 + property number: 1; + Text { // Port + text: rows[number].name; + vertical-alignment: center; + } + + CheckBox { // Enabled + checked: ControllerData.controller_enabled[number]; + toggled => { + ControllerData.controller_enabled[number] = self.checked; + } + } + + CheckBox { // Emulate VRU + enabled: rows[number].vru-enabled; + checked: false; + } + + CheckBox { // Transfer Pak + checked: ControllerData.transferpak[number]; + toggled => { + ControllerData.transferpak[number] = self.checked; + } + } + + ComboBox { // Profile + model: ControllerData.input_profiles; + current-value: ControllerData.input_profile_binding[number]; + selected => { + ControllerData.input_profile_binding[number] = self.current-value; + } + } + + ComboBox { // Controller + model: ControllerData.controller_names; + width: self.preferred-width; + current-value: ControllerData.controller_names[ControllerData.selected_controller[number]]; + selected => { + ControllerData.selected_controller[number] = self.current-index; + } + } + } + + Row { // 2 + property number: 2; + Text { // Port + text: rows[number].name; + vertical-alignment: center; + } + + CheckBox { // Enabled + checked: ControllerData.controller_enabled[number]; + toggled => { + ControllerData.controller_enabled[number] = self.checked; + } + } + + CheckBox { // Emulate VRU + enabled: rows[number].vru-enabled; + checked: false; + } + + CheckBox { // Transfer Pak + checked: ControllerData.transferpak[number]; + toggled => { + ControllerData.transferpak[number] = self.checked; + } + } + + ComboBox { // Profile + model: ControllerData.input_profiles; + current-value: ControllerData.input_profile_binding[number]; + selected => { + ControllerData.input_profile_binding[number] = self.current-value; + } + } + + ComboBox { // Controller + model: ControllerData.controller_names; + width: self.preferred-width; + current-value: ControllerData.controller_names[ControllerData.selected_controller[number]]; + selected => { + ControllerData.selected_controller[number] = self.current-index; + } + } + } + + Row { // 3 + property number: 3; + Text { // Port + text: rows[number].name; + vertical-alignment: center; + } + + CheckBox { // Enabled + checked: ControllerData.controller_enabled[number]; + toggled => { + ControllerData.controller_enabled[number] = self.checked; + } + } + + CheckBox { // Emulate VRU + enabled: rows[number].vru-enabled; + checked: ControllerData.emulate_vru; + toggled => { + ControllerData.emulate_vru = self.checked; + } + } + + CheckBox { // Transfer Pak + checked: ControllerData.transferpak[number]; + toggled => { + ControllerData.transferpak[number] = self.checked; + } + } + + ComboBox { // Profile + model: ControllerData.input_profiles; + current-value: ControllerData.input_profile_binding[number]; + selected => { + ControllerData.input_profile_binding[number] = self.current-value; + } + } + + ComboBox { // Controller + model: ControllerData.controller_names; + width: self.preferred-width; + current-value: ControllerData.controller_names[ControllerData.selected_controller[number]]; + selected => { + ControllerData.selected_controller[number] = self.current-index; + } + } + } + } + } +} diff --git a/src/ui/gui/gui_netplay.rs b/src/ui/gui/gui_netplay.rs deleted file mode 100644 index 6821ead..0000000 --- a/src/ui/gui/gui_netplay.rs +++ /dev/null @@ -1,947 +0,0 @@ -use crate::device; -use crate::ui::gui::GopherEguiApp; -use crate::ui::{self, gui}; -use eframe::egui; -use sha2::{Digest, Sha256}; - -const NETPLAY_VERSION: i32 = 17; -const EMU_NAME: &str = "gopher64"; - -#[derive(Default)] -pub struct GameInfo { - pub md5: String, - pub game_name: String, - pub rom_label: String, - pub rom_contents: Vec, -} - -#[derive(PartialEq, Default)] -pub struct NetplayServer { - pub name: String, - pub ip: String, -} - -#[derive(Default)] -pub struct GuiNetplay { - pub create: bool, - pub join: bool, - pub wait: bool, - pub session_name: String, - pub password: String, - pub player_name: String, - pub error: String, - pub create_rom_label: String, - pub join_rom_label: String, - pub send_chat: bool, - pub have_sessions: Option, - pub begin_game: bool, - pub chat_log: String, - pub chat_message: String, - pub selected_session: Option, - pub pending_begin: bool, - pub peer_addr: Option, - pub motd: String, - pub sessions: Vec, - pub rom_contents: Vec, - pub player_number: u8, - pub player_names: [String; 4], - pub server: NetplayServer, - pub socket_waiting: bool, - pub game_info: GameInfo, - pub servers: Vec, - pub waiting_session: Option, - pub socket: - Option>>, - pub server_receiver: - Option>>, - pub game_info_receiver: Option>, - pub broadcast_socket: Option, - pub broadcast_timer: Option, -} - -#[derive(serde::Serialize, serde::Deserialize, PartialEq, Default, Clone)] -pub struct NetplayRoom { - room_name: Option, - password: Option, - protected: Option, - #[serde(rename = "MD5")] - md5: Option, - game_name: Option, - pub port: Option, - features: Option>, - buffer_target: Option, -} - -#[derive(serde::Serialize, serde::Deserialize)] -pub struct NetplayMessage { - #[serde(rename = "type")] - message_type: String, - player_name: Option, - client_sha: Option, - netplay_version: Option, - emulator: Option, - room: Option, - accept: Option, - message: Option, - auth: Option, - player_names: Option<[String; 4]>, - #[serde(rename = "authTime")] - auth_time: Option, - rooms: Option>, -} - -fn get_servers(app: &mut GopherEguiApp, ctx: &egui::Context) { - if app.netplay.servers.is_empty() { - if app.netplay.broadcast_socket.is_none() { - app.netplay.broadcast_socket = Some( - std::net::UdpSocket::bind((std::net::Ipv4Addr::UNSPECIFIED, 0)) - .expect("couldn't bind to address"), - ); - let socket = app.netplay.broadcast_socket.as_ref().unwrap(); - socket - .set_broadcast(true) - .expect("set_broadcast call failed"); - socket - .set_nonblocking(true) - .expect("could not set up socket"); - let data: [u8; 1] = [1]; - socket - .send_to(&data, (std::net::Ipv4Addr::BROADCAST, 45000)) - .expect("couldn't send data"); - app.netplay.broadcast_timer = - Some(std::time::Instant::now() + std::time::Duration::from_secs(5)); - ctx.request_repaint(); - } - if app.netplay.server_receiver.is_none() { - let (tx, rx) = tokio::sync::mpsc::channel(1); - app.netplay.server_receiver = Some(rx); - let gui_ctx = ctx.clone(); - let task = reqwest::get("https://m64p.s3.amazonaws.com/servers.json"); - tokio::spawn(async move { - let response = task.await; - if let Ok(response) = response { - tx.send(response.json().await.unwrap()).await.unwrap(); - gui_ctx.request_repaint(); - } - }); - } - } - if app.netplay.broadcast_timer.is_some() - && std::time::Instant::now() > app.netplay.broadcast_timer.unwrap() - { - app.netplay.broadcast_timer = None; - } - if app.netplay.broadcast_socket.is_some() && app.netplay.broadcast_timer.is_some() { - let mut buffer = [0; 1024]; - let result = app - .netplay - .broadcast_socket - .as_ref() - .unwrap() - .recv_from(&mut buffer); - if result.is_ok() { - let (amt, _src) = result.unwrap(); - let data: std::collections::HashMap = - serde_json::from_slice(&buffer[..amt]).unwrap(); - for server in data.iter() { - let (server_name, server_ip) = server; - app.netplay.servers.push(NetplayServer { - name: server_name.to_string(), - ip: server_ip.to_string(), - }); - app.netplay.server = NetplayServer { - name: server.0.clone(), - ip: server.1.clone(), - }; - } - app.netplay.broadcast_socket = None; - } - ctx.request_repaint(); - } - if app.netplay.server_receiver.is_some() { - let result = app.netplay.server_receiver.as_mut().unwrap().try_recv(); - if result.is_ok() { - for server in result.unwrap().iter() { - app.netplay.servers.push(NetplayServer { - name: server.0.clone(), - ip: server.1.clone(), - }); - } - app.netplay.server_receiver = None; - if app.netplay.server.name.is_empty() { - let first_server = app.netplay.servers.first().unwrap(); - app.netplay.server = NetplayServer { - name: first_server.name.clone(), - ip: first_server.ip.clone(), - }; - } - } - ctx.request_repaint(); - } -} - -pub fn netplay_create(app: &mut GopherEguiApp, ctx: &egui::Context) { - egui::Window::new("Create Netplay Session").show(ctx, |ui| { - egui::Grid::new("netplay_create_grid").show(ui, |ui| { - let profile_name_label = ui.label("Session Name:"); - let mut size = ui.spacing().interact_size; - size.x = 200.0; - ui.add_sized(size, |ui: &mut egui::Ui| { - ui.text_edit_singleline(&mut app.netplay.session_name) - .labelled_by(profile_name_label.id) - }); - - ui.end_row(); - - let password_label = ui.label("Password (Optional):"); - - ui.text_edit_singleline(&mut app.netplay.password) - .labelled_by(password_label.id); - - ui.end_row(); - - ui.label("ROM"); - if app.netplay.create_rom_label.is_empty() { - app.netplay.create_rom_label = "Open ROM".to_string(); - } - if ui.button(&app.netplay.create_rom_label).clicked() { - let (tx, rx) = tokio::sync::mpsc::channel(1); - app.netplay.game_info_receiver = Some(rx); - let gui_ctx = ctx.clone(); - app.netplay.create_rom_label = "Inspecting ROM".to_string(); - let task = rfd::AsyncFileDialog::new() - .set_title("Select ROM") - .pick_file(); - tokio::spawn(async move { - let file = task.await; - - if let Some(file) = file { - parse_rom_file(file, tx).await; - } else { - tx.send(GameInfo { - md5: "".to_string(), - game_name: "".to_string(), - rom_label: "Open ROM".to_string(), - rom_contents: vec![], - }) - .await - .unwrap(); - } - gui_ctx.request_repaint(); - }); - } - - ui.end_row(); - - let player_name_label = ui.label("Player Name:"); - - ui.text_edit_singleline(&mut app.netplay.player_name) - .labelled_by(player_name_label.id); - - ui.end_row(); - - ui.label("Server:"); - - get_servers(app, ctx); - - if app.netplay.game_info_receiver.is_some() { - let result = app.netplay.game_info_receiver.as_mut().unwrap().try_recv(); - if result.is_ok() { - app.netplay.game_info_receiver = None; - let data = result.unwrap(); - if !data.md5.is_empty() { - app.netplay.game_info = data; - app.netplay.rom_contents = app.netplay.game_info.rom_contents.clone(); - app.netplay.create_rom_label = app.netplay.game_info.rom_label.clone(); - } else { - app.netplay.create_rom_label = data.rom_label; - } - } - ctx.request_repaint(); - } - - egui::ComboBox::from_id_salt("server-combobox") - .selected_text(app.netplay.server.name.to_string()) - .show_ui(ui, |ui| { - for server in app.netplay.servers.iter() { - ui.selectable_value( - &mut app.netplay.server, - NetplayServer { - name: server.name.clone(), - ip: server.ip.clone(), - }, - server.name.clone(), - ); - } - }); - - ui.end_row(); - - if app.netplay.socket_waiting { - let data = app.netplay.socket.as_mut().unwrap().read(); - if data.is_ok() { - let message: NetplayMessage = - serde_json::from_slice(&data.unwrap().into_data()).unwrap(); - if message.accept.unwrap() == 0 { - if message.message_type == "reply_create_room" { - app.netplay.create = false; - app.netplay.wait = true; - app.netplay.waiting_session = Some(message.room.unwrap()); - } - } else { - app.netplay.error = message.message.unwrap(); - } - app.netplay.socket_waiting = false; - } - ctx.request_repaint(); - } - }); - ui.horizontal(|ui| { - if ui.button("Create Session").clicked() { - if app.netplay.player_name.is_empty() { - app.netplay.error = "Player Name cannot be empty".to_string(); - } else if app.netplay.session_name.is_empty() { - app.netplay.error = "Session Name cannot be empty".to_string(); - } else if app.netplay.game_info.md5.is_empty() { - app.netplay.error = "ROM not loaded".to_string(); - } else { - let now_utc = chrono::Utc::now().timestamp_millis().to_string(); - let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); - let mut game_name = app.netplay.game_info.game_name.to_string(); - if game_name.is_empty() { - // If the ROM doesn't report a name, use the filename - game_name = app.netplay.create_rom_label.clone(); - } - let mut features = std::collections::HashMap::new(); - features.insert("overclock".to_string(), app.overclock.to_string()); - let netplay_message = NetplayMessage { - message_type: "request_create_room".to_string(), - player_name: Some(app.netplay.player_name.clone()), - client_sha: Some(env!("GIT_HASH").to_string()), - netplay_version: Some(NETPLAY_VERSION), - emulator: Some(EMU_NAME.to_string()), - accept: None, - message: None, - rooms: None, - auth_time: Some(now_utc), - player_names: None, - auth: Some(format!("{:x}", hasher.finalize())), - room: Some(NetplayRoom { - room_name: Some(app.netplay.session_name.clone()), - password: Some(app.netplay.password.clone()), - game_name: Some(game_name), - md5: Some(app.netplay.game_info.md5.clone()), - protected: None, - port: None, - features: Some(features), - buffer_target: None, - }), - }; - if let Ok((mut socket, _response)) = - tungstenite::connect(&app.netplay.server.ip) - { - socket - .send(tungstenite::Message::Binary(tungstenite::Bytes::from( - serde_json::to_vec(&netplay_message).unwrap(), - ))) - .unwrap(); - match socket.get_mut() { - tungstenite::stream::MaybeTlsStream::Plain(stream) => { - app.netplay.peer_addr = Some(stream.peer_addr().unwrap()); - stream.set_nonblocking(true) - } - _ => unimplemented!(), - } - .expect("could not set socket to non-blocking"); - app.netplay.socket_waiting = true; - app.netplay.socket = Some(socket); - } - } - } - - ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { - if ui.button("Close").clicked() { - if let Some(socket) = app.netplay.socket.as_mut() { - socket.close(None).unwrap(); - loop { - match socket.read() { - Err(tungstenite::Error::ConnectionClosed) => break, - _ => continue, - }; - } - } - app.netplay = Default::default(); - }; - }) - }); - }); -} - -fn get_sessions(app: &mut GopherEguiApp, ctx: &egui::Context) { - if app.netplay.have_sessions.is_some() - && app.netplay.server != *app.netplay.have_sessions.as_ref().unwrap() - { - // User has changed the server - app.netplay.have_sessions = None; - app.netplay.socket = None; - } - if app.netplay.socket.is_none() { - if let Ok((mut sock, _response)) = tungstenite::connect(&app.netplay.server.ip) { - match sock.get_mut() { - tungstenite::stream::MaybeTlsStream::Plain(stream) => { - app.netplay.peer_addr = Some(stream.peer_addr().unwrap()); - stream.set_nonblocking(true) - } - _ => unimplemented!(), - } - .expect("could not set socket to non-blocking"); - app.netplay.socket = Some(sock); - } - } - if app.netplay.socket.is_some() { - let socket = app.netplay.socket.as_mut().unwrap(); - if app.netplay.have_sessions.is_none() { - let now_utc = chrono::Utc::now().timestamp_millis().to_string(); - let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); - let request_rooms = NetplayMessage { - message_type: "request_get_rooms".to_string(), - player_name: None, - client_sha: None, - netplay_version: Some(NETPLAY_VERSION), - player_names: None, - emulator: Some(EMU_NAME.to_string()), - accept: None, - rooms: None, - message: None, - auth_time: Some(now_utc), - auth: Some(format!("{:x}", hasher.finalize())), - room: None, - }; - - socket - .send(tungstenite::Message::Binary(tungstenite::Bytes::from( - serde_json::to_vec(&request_rooms).unwrap(), - ))) - .unwrap(); - app.netplay.have_sessions = Some(NetplayServer { - name: app.netplay.server.name.clone(), - ip: app.netplay.server.ip.clone(), - }); - app.netplay.socket_waiting = true; - ctx.request_repaint(); - } - } -} - -async fn parse_rom_file(file: rfd::FileHandle, tx: tokio::sync::mpsc::Sender) { - if let Some(rom_contents) = device::get_rom_contents(file.path()) { - let hash = device::cart::rom::calculate_hash(&rom_contents); - let game_name = ui::storage::get_game_name(&rom_contents); - - tx.send(GameInfo { - md5: hash, - game_name, - rom_label: file.file_name(), - rom_contents, - }) - .await - .unwrap(); - } else { - tx.send(GameInfo { - md5: "".to_string(), - game_name: "".to_string(), - rom_label: "Invalid ROM".to_string(), - rom_contents: vec![], - }) - .await - .unwrap(); - } -} - -pub fn netplay_join(app: &mut GopherEguiApp, ctx: &egui::Context) { - if app.netplay.socket_waiting { - let socket = app.netplay.socket.as_mut().unwrap(); - let data = socket.read(); - if data.is_ok() { - let message: NetplayMessage = - serde_json::from_slice(&data.unwrap().into_data()).unwrap(); - if message.accept.unwrap() == 0 { - if message.message_type == "reply_get_rooms" { - if message.rooms.is_some() { - app.netplay.sessions = message.rooms.unwrap(); - } else { - app.netplay.sessions = vec![]; - } - } else if message.message_type == "reply_join_room" { - app.netplay.join = false; - app.netplay.wait = true; - app.netplay.waiting_session = Some(message.room.unwrap()); - } - app.netplay.socket_waiting = false; - } else { - app.netplay.error = message.message.unwrap(); - app.netplay.join_rom_label = "Join Session (Open ROM)".to_string(); - } - } - ctx.request_repaint(); - } - if app.netplay.game_info_receiver.is_some() { - let result = app.netplay.game_info_receiver.as_mut().unwrap().try_recv(); - if result.is_ok() { - app.netplay.game_info_receiver = None; - let data = result.unwrap(); - if !data.md5.is_empty() { - app.netplay.game_info = data; - app.netplay.rom_contents = app.netplay.game_info.rom_contents.clone(); - - let netplay_message = NetplayMessage { - message_type: "request_join_room".to_string(), - player_name: Some(app.netplay.player_name.clone()), - client_sha: Some(env!("GIT_HASH").to_string()), - netplay_version: None, - emulator: None, - accept: None, - message: None, - rooms: None, - auth_time: None, - player_names: None, - auth: None, - room: Some(NetplayRoom { - room_name: None, - password: Some(app.netplay.password.clone()), - game_name: None, - md5: Some(app.netplay.game_info.md5.clone()), - protected: None, - port: app.netplay.selected_session.as_ref().unwrap().port, - features: None, - buffer_target: None, - }), - }; - let socket = app.netplay.socket.as_mut().unwrap(); - socket - .send(tungstenite::Message::Binary(tungstenite::Bytes::from( - serde_json::to_vec(&netplay_message).unwrap(), - ))) - .unwrap(); - - app.netplay.socket_waiting = true; - } else { - app.netplay.error = data.rom_label; - app.netplay.join_rom_label = "Join Session (Open ROM)".to_string(); - } - } - ctx.request_repaint(); - } - egui::Window::new("Join Netplay Session").show(ctx, |ui| { - ui.horizontal(|ui| { - let mut size = ui.spacing().interact_size; - size.x = 100.0; - ui.add_sized( - size, - egui::TextEdit::singleline(&mut app.netplay.player_name).hint_text("Player name"), - ); - - get_servers(app, ctx); - - ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { - if ui.button("Refresh").clicked() { - app.netplay.socket = None; - app.netplay.have_sessions = None; - app.netplay.selected_session = None; - ctx.request_repaint(); - } - egui::ComboBox::from_id_salt("server-combobox") - .selected_text(app.netplay.server.name.to_string()) - .show_ui(ui, |ui| { - for server in app.netplay.servers.iter() { - ui.selectable_value( - &mut app.netplay.server, - NetplayServer { - name: server.name.clone(), - ip: server.ip.clone(), - }, - server.name.clone(), - ); - } - }); - }); - }); - if !app.netplay.server.name.is_empty() { - get_sessions(app, ctx); - } - ui.add_space(16.0); - if app.netplay.sessions.is_empty() { - ui.label("No sessions available"); - } else { - egui::Grid::new("netplay_join_grid").show(ui, |ui| { - ui.label(egui::RichText::new("Session Name (click to select)").underline()); - ui.label(egui::RichText::new("Game Name").underline()); - ui.label(egui::RichText::new("Password Protected").underline()); - ui.end_row(); - - for room in app.netplay.sessions.iter() { - ui.selectable_value( - &mut app.netplay.selected_session, - Some(room.clone()), - room.room_name.as_ref().unwrap(), - ); - ui.label(room.game_name.as_ref().unwrap()); - ui.label(room.protected.unwrap_or(false).to_string()); - ui.end_row(); - } - }); - } - ui.add_space(16.0); - ui.horizontal(|ui| { - let mut size = ui.spacing().interact_size; - size.x = 130.0; - ui.add_sized( - size, - egui::TextEdit::singleline(&mut app.netplay.password) - .hint_text("Password (if required)"), - ); - ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { - if ui.button("Close").clicked() { - if let Some(socket) = app.netplay.socket.as_mut() { - socket.close(None).unwrap(); - loop { - match socket.read() { - Err(tungstenite::Error::ConnectionClosed) => break, - _ => continue, - }; - } - } - app.netplay = Default::default(); - }; - if app.netplay.join_rom_label.is_empty() { - app.netplay.join_rom_label = "Join Session (Open ROM)".to_string(); - } - if ui.button(&app.netplay.join_rom_label).clicked() { - if app.netplay.player_name.is_empty() { - app.netplay.error = "Player Name cannot be empty".to_string(); - } else if app.netplay.selected_session.is_none() { - app.netplay.error = "No session selected".to_string(); - } else if app - .netplay - .selected_session - .as_ref() - .unwrap() - .protected - .unwrap() - && app.netplay.password.is_empty() - { - app.netplay.error = "Session requires a password".to_string(); - } else { - let (tx, rx) = tokio::sync::mpsc::channel(1); - app.netplay.game_info_receiver = Some(rx); - let gui_ctx = ctx.clone(); - app.netplay.join_rom_label = "Inspecting ROM".to_string(); - let task = rfd::AsyncFileDialog::new() - .set_title("Select ROM") - .pick_file(); - tokio::spawn(async move { - let file = task.await; - - if let Some(file) = file { - parse_rom_file(file, tx).await; - } else { - tx.send(GameInfo { - md5: "".to_string(), - game_name: "".to_string(), - rom_label: "No ROM selected".to_string(), - rom_contents: vec![], - }) - .await - .unwrap(); - } - gui_ctx.request_repaint(); - }); - } - }; - }); - }); - }); -} - -pub fn netplay_wait(app: &mut GopherEguiApp, ctx: &egui::Context) { - let overclock = app - .netplay - .waiting_session - .as_ref() - .unwrap() - .features - .as_ref() - .unwrap() - .get("overclock") - .unwrap(); - - let motd_message = NetplayMessage { - message_type: "request_motd".to_string(), - player_name: None, - client_sha: None, - netplay_version: None, - emulator: None, - accept: None, - rooms: None, - player_names: None, - message: None, - auth_time: None, - auth: None, - room: None, - }; - let request_players = NetplayMessage { - message_type: "request_players".to_string(), - player_name: None, - client_sha: None, - netplay_version: None, - player_names: None, - emulator: None, - rooms: None, - accept: None, - message: None, - auth_time: None, - auth: None, - room: Some(NetplayRoom { - room_name: None, - password: None, - game_name: None, - md5: None, - protected: None, - port: app.netplay.waiting_session.as_ref().unwrap().port, - features: None, - buffer_target: None, - }), - }; - - if !app.netplay.socket_waiting { - let socket = app.netplay.socket.as_mut().unwrap(); - socket - .send(tungstenite::Message::Binary(tungstenite::Bytes::from( - serde_json::to_vec(&motd_message).unwrap(), - ))) - .unwrap(); - socket - .send(tungstenite::Message::Binary(tungstenite::Bytes::from( - serde_json::to_vec(&request_players).unwrap(), - ))) - .unwrap(); - app.netplay.socket_waiting = true; - } - - if app.netplay.begin_game { - let begin_game = NetplayMessage { - message_type: "request_begin_game".to_string(), - player_name: None, - client_sha: None, - netplay_version: None, - player_names: None, - rooms: None, - emulator: None, - accept: None, - message: None, - auth_time: None, - auth: None, - room: Some(NetplayRoom { - room_name: None, - password: None, - game_name: None, - md5: None, - protected: None, - port: app.netplay.waiting_session.as_ref().unwrap().port, - features: None, - buffer_target: None, - }), - }; - let socket = app.netplay.socket.as_mut().unwrap(); - socket - .send(tungstenite::Message::Binary(tungstenite::Bytes::from( - serde_json::to_vec(&begin_game).unwrap(), - ))) - .unwrap(); - app.netplay.begin_game = false; - } - - if app.netplay.send_chat { - let send_chat = NetplayMessage { - message_type: "request_chat_message".to_string(), - player_name: Some(app.netplay.player_name.clone()), - client_sha: None, - netplay_version: None, - player_names: None, - rooms: None, - emulator: None, - accept: None, - message: Some(app.netplay.chat_message.clone()), - auth_time: None, - auth: None, - room: Some(NetplayRoom { - room_name: None, - password: None, - game_name: None, - md5: None, - protected: None, - port: app.netplay.waiting_session.as_ref().unwrap().port, - features: None, - buffer_target: None, - }), - }; - app.netplay.chat_message.clear(); - let socket = app.netplay.socket.as_mut().unwrap(); - socket - .send(tungstenite::Message::Binary(tungstenite::Bytes::from( - serde_json::to_vec(&send_chat).unwrap(), - ))) - .unwrap(); - app.netplay.send_chat = false; - } - - if app.netplay.socket_waiting { - let socket = app.netplay.socket.as_mut().unwrap(); - let data = socket.read(); - if data.is_ok() { - let message: NetplayMessage = - serde_json::from_slice(&data.unwrap().into_data()).unwrap(); - if message.accept.unwrap() == 0 { - if message.message_type == "reply_motd" { - let re = regex::Regex::new(r"<[^>]*>").unwrap(); - app.netplay.motd = re - .replace_all(message.message.unwrap().as_str(), "") - .into_owned(); - } else if message.message_type == "reply_players" { - app.netplay.player_names = message.player_names.unwrap(); - } else if message.message_type == "reply_chat_message" { - app.netplay.chat_log.push_str(&message.message.unwrap()); - app.netplay.chat_log.push('\n'); - } else if message.message_type == "reply_begin_game" { - let mut player = 0; - for (i, name) in app.netplay.player_names.iter().enumerate() { - if *name == app.netplay.player_name { - player = i; - break; - } - } - app.netplay.player_number = player as u8; - - if message.accept.unwrap() == 0 { - socket.close(None).unwrap(); - loop { - match socket.read() { - Err(tungstenite::Error::ConnectionClosed) => break, - _ => continue, - }; - } - - gui::open_rom(app, ctx, *overclock == "true"); - app.netplay = Default::default(); - return; - } else { - app.netplay.error = message.message.unwrap(); - } - } - } else { - app.netplay.error = message.message.unwrap(); - } - } - ctx.request_repaint(); - } - - egui::Window::new("Pending Netplay Session").show(ctx, |ui| { - egui::Grid::new("netplay_wait_grid_1").show(ui, |ui| { - ui.label("Session Name:"); - let room_name = app - .netplay - .waiting_session - .as_ref() - .unwrap() - .room_name - .as_ref() - .unwrap(); - let game_name = app - .netplay - .waiting_session - .as_ref() - .unwrap() - .game_name - .as_ref() - .unwrap(); - ui.label(room_name); - ui.end_row(); - ui.label("Game Name:"); - ui.label(game_name); - ui.end_row(); - for i in 0..4 { - ui.label(format!("Player {}:", i + 1)); - ui.label(app.netplay.player_names[i].clone()); - ui.end_row(); - } - }); - egui::ScrollArea::vertical() - .max_height(100.0) - .stick_to_bottom(true) - .show(ui, |ui| { - ui.add( - egui::TextEdit::multiline(&mut app.netplay.chat_log) - .interactive(false) - .desired_width(ui.available_width()), - ); - }); - - ui.horizontal(|ui| { - let mut size = ui.spacing().interact_size; - size.x = 200.0; - - ui.add_sized( - size, - egui::TextEdit::singleline(&mut app.netplay.chat_message) - .hint_text("Enter chat message here"), - ); - - if ui - .add_enabled(!app.netplay.send_chat, egui::Button::new("Send Message")) - .clicked() - && !app.netplay.chat_message.is_empty() - { - app.netplay.send_chat = true; - } - }); - - ui.add_space(16.0); - ui.label(app.netplay.motd.clone()); - ui.add_space(16.0); - - ui.horizontal(|ui| { - let button_enabled = app.netplay.player_name == app.netplay.player_names[0] - && !app.netplay.pending_begin; - if ui - .add_enabled(button_enabled, egui::Button::new("Start Session")) - .clicked() - { - app.netplay.begin_game = true; - app.netplay.pending_begin = true; - } - ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { - if ui.button("Close").clicked() { - if let Some(socket) = app.netplay.socket.as_mut() { - socket.close(None).unwrap(); - loop { - match socket.read() { - Err(tungstenite::Error::ConnectionClosed) => break, - _ => continue, - }; - } - } - app.netplay = Default::default(); - }; - }); - }); - }); -} - -pub fn netplay_error(app: &mut GopherEguiApp, ctx: &egui::Context, error: String) { - egui::Window::new("Netplay Error").show(ctx, |ui| { - ui.label(error); - if ui.button("Close").clicked() { - app.netplay.error = "".to_string(); - }; - }); -} diff --git a/src/ui/gui/input_profile.slint b/src/ui/gui/input_profile.slint new file mode 100644 index 0000000..17d6b1e --- /dev/null +++ b/src/ui/gui/input_profile.slint @@ -0,0 +1,45 @@ +import { StandardButton, HorizontalBox, VerticalBox, Button, LineEdit, CheckBox } from "std-widgets.slint"; + +export global InputProfileData { + in-out property dinput; + in-out property profile_name; +} + +export component InputProfileDialog inherits Window { + title: @tr("Create Input Profile"); + callback profile_creation_button_clicked; + in-out property dinput <=> InputProfileData.dinput; + in-out property profile_name <=> InputProfileData.profile_name; + VerticalBox { + HorizontalBox { + LineEdit { + placeholder-text: @tr("Enter profile name"); + preferred-width: 300px; + edited(text) => { + InputProfileData.profile_name = text; + } + } + } + + HorizontalBox { + alignment: center; + CheckBox { + text: @tr("Use DirectInput"); + checked: InputProfileData.dinput; + toggled => { + InputProfileData.dinput = self.checked; + } + } + } + + HorizontalBox { + Button { + text: @tr("Start Profile Creation Wizard"); + enabled: InputProfileData.profile_name != "" && InputProfileData.profile_name != "default"; + clicked => { + profile_creation_button_clicked(); + } + } + } + } +} diff --git a/src/ui/gui/localgame_page.slint b/src/ui/gui/localgame_page.slint new file mode 100644 index 0000000..3d253eb --- /dev/null +++ b/src/ui/gui/localgame_page.slint @@ -0,0 +1,39 @@ +// Copyright © SixtyFPS GmbH +// SPDX-License-Identifier: MIT + +import { Button, HorizontalBox, VerticalBox } from "std-widgets.slint"; +import { Page } from "page.slint"; + +export global State { + in-out property game_running; +} + +export component LocalGame inherits Page { + callback open_rom_button_clicked; + callback saves_folder_button_clicked; + title: @tr("Local Game"); + + VerticalBox { + alignment: start; + HorizontalBox { + alignment: center; + Button { + text: @tr("Open ROM"); + enabled: !State.game_running; + clicked => { + open_rom_button_clicked(); + } + } + } + + HorizontalBox { + alignment: center; + Button { + text: @tr("Open Saves Folder"); + clicked => { + saves_folder_button_clicked(); + } + } + } + } +} diff --git a/src/ui/gui/netplay_create.slint b/src/ui/gui/netplay_create.slint new file mode 100644 index 0000000..1533cd3 --- /dev/null +++ b/src/ui/gui/netplay_create.slint @@ -0,0 +1,114 @@ +import { LineEdit, HorizontalBox, VerticalBox, Button, ComboBox } from "std-widgets.slint"; +import { NetplayData } from "netplay_page.slint"; + +export component NetplayCreate inherits Window { + title: @tr("Netplay: Create Session"); + in-out property server_names <=> NetplayData.server_names; + in-out property server_urls <=> NetplayData.server_urls; + in-out property ping <=> NetplayData.ping; + in-out property game_name <=> NetplayData.game_name; + in-out property game_hash <=> NetplayData.game_hash; + in-out property pending_session <=> NetplayData.pending_session; + in-out property rom_path <=> NetplayData.rom_path; + in-out property peer_addr <=> NetplayData.peer_addr; + callback get_ping(string); + callback select_rom; + callback create_session(string, string, string, string, string, string); + + VerticalBox { + HorizontalBox { + VerticalBox { + Text { + text: @tr("Session Name:"); + } + + LineEdit { + placeholder_text: @tr("Enter session name"); + edited(text) => { + NetplayData.session_name = text; + } + } + } + + VerticalBox { + Text { + text: @tr("Password (Optional):"); + } + + LineEdit { + placeholder_text: @tr("Enter session password"); + edited(text) => { + NetplayData.password = text; + } + } + } + } + + VerticalBox { + Text { + text: @tr("Player Name:"); + } + + LineEdit { + placeholder_text: @tr("Enter player name"); + edited(text) => { + NetplayData.player_name = text; + } + } + } + + VerticalBox { + Text { + text: @tr("Server:"); + } + + HorizontalBox { + server := ComboBox { + model: NetplayData.server_names; + selected(current-value) => { + if (self.current-index >= 0) { + get_ping(NetplayData.server_urls[self.current-index]); + } + } + } + + Text { + vertical-alignment: center; + text: NetplayData.ping; + } + } + } + + if NetplayData.game_name == "": Button { + text: @tr("Select ROM"); + clicked => { + select_rom(); + } + } + if NetplayData.game_name != "": Button { + text: NetplayData.game_name; + clicked => { + select_rom(); + } + } + + Rectangle { } + + Rectangle { } + + Button { + text: @tr("Create Session"); + enabled: NetplayData.session_name != "" && NetplayData.player_name != "" && NetplayData.game_name != "" && !NetplayData.pending_session; + clicked => { + NetplayData.pending_session = true; + create_session( + NetplayData.server_urls[server.current-index], + NetplayData.session_name, + NetplayData.player_name, + NetplayData.game_name, + NetplayData.game_hash, + NetplayData.password); + } + } + } +} diff --git a/src/ui/gui/netplay_join.slint b/src/ui/gui/netplay_join.slint new file mode 100644 index 0000000..7b5a7b1 --- /dev/null +++ b/src/ui/gui/netplay_join.slint @@ -0,0 +1,129 @@ +import { VerticalBox, LineEdit, StandardTableView, HorizontalBox, ComboBox, Button } from "std-widgets.slint"; +import { NetplayData } from "netplay_page.slint"; + +export component NetplayJoin inherits Window { + title: @tr("Netplay: Join Session"); + in-out property server_names <=> NetplayData.server_names; + in-out property server_urls <=> NetplayData.server_urls; + in-out property ping <=> NetplayData.ping; + in-out property sessions <=> NetplayData.sessions; + in-out property current_session <=> NetplayData.current_session; + in-out property ports <=> NetplayData.ports; + in-out property game_name <=> NetplayData.game_name; + in-out property game_hash <=> NetplayData.game_hash; + in-out property peer_addr <=> NetplayData.peer_addr; + in-out property pending_session <=> NetplayData.pending_session; + in-out property rom_path <=> NetplayData.rom_path; + callback get_ping(string); + callback refresh_session(string); + callback select_rom; + callback join_session(string, string, string, int); + + VerticalBox { + HorizontalBox { + VerticalBox { + Text { + text: @tr("Player Name:"); + } + + LineEdit { + placeholder_text: @tr("Enter player name"); + edited(text) => { + NetplayData.player_name = text; + } + } + } + + VerticalBox { + Text { + text: @tr("Server:"); + } + + HorizontalBox { + server := ComboBox { + model: NetplayData.server_names; + selected(current-value) => { + if (self.current-index >= 0) { + get_ping(NetplayData.server_urls[self.current-index]); + } + } + } + + Text { + vertical-alignment: center; + text: NetplayData.ping; + } + } + } + } + + if NetplayData.sessions.length > 0: Text { + text: @tr("Click on a session below to select it"); + horizontal-alignment: center; + vertical-alignment: center; + } + if NetplayData.sessions.length == 0: Text { + text: @tr("No sessions available. Please refresh or try a different server."); + horizontal-alignment: center; + vertical-alignment: center; + } + StandardTableView { + columns: [ + { title: "Session Name" }, + { title: "Game Name" }, + { title: "Password Protected" }, + ]; + rows: NetplayData.sessions; + current-row: NetplayData.current_session; + current-row-changed(current-row) => { + NetplayData.current_session = current-row; + } + } + + HorizontalBox { + Rectangle { } + + Button { + text: @tr("Refresh Session List"); + clicked => { + refresh_session(NetplayData.server_urls[server.current-index]); + } + } + } + + HorizontalBox { + LineEdit { + placeholder-text: @tr("Password (if required)"); + edited(text) => { + NetplayData.password = text; + } + } + + if NetplayData.game_name == "": Button { + text: @tr("Select ROM"); + clicked => { + select_rom(); + } + } + if NetplayData.game_name != "": Button { + text: NetplayData.game_name; + clicked => { + select_rom(); + } + } + + Button { + text: @tr("Join Session"); + enabled: NetplayData.player_name != "" && NetplayData.current_session >= 0 && NetplayData.game_name != "" && !NetplayData.pending_session; + clicked => { + NetplayData.pending_session = true; + join_session( + NetplayData.player_name, + NetplayData.game_hash, + NetplayData.password, + NetplayData.ports[NetplayData.current_session]); + } + } + } + } +} diff --git a/src/ui/gui/netplay_page.slint b/src/ui/gui/netplay_page.slint new file mode 100644 index 0000000..c8fa5c4 --- /dev/null +++ b/src/ui/gui/netplay_page.slint @@ -0,0 +1,63 @@ +// Copyright © SixtyFPS GmbH +// SPDX-License-Identifier: MIT + +import { VerticalBox, HorizontalBox, Button, StandardButton } from "std-widgets.slint"; +import { Page } from "page.slint"; + +export global NetplayData { + in-out property <[string]> server_names; + in-out property <[string]> server_urls; + in-out property ping: "Ping: Unknown"; + in-out property player_name; + in-out property game_name; + in-out property game_hash; + in-out property rom_path; + in-out property password; + in-out property peer_addr; + in-out property pending_session; + in-out property session_name; + in-out property <[[StandardListViewItem]]> sessions; + in-out property <[int]> ports; + in-out property current_session: -1; +} + +export component NetplayDialog inherits Dialog { + in-out property text; + title: @tr("Netplay Error"); + Text { + text: text; + } + + StandardButton { + kind: close; + } +} + +export component Netplay inherits Page { + callback create_session_button_clicked; + callback join_session_button_clicked; + title: @tr("Netplay"); + + VerticalBox { + alignment: start; + HorizontalBox { + alignment: center; + Button { + text: @tr("Create Session"); + clicked => { + create_session_button_clicked(); + } + } + } + + HorizontalBox { + alignment: center; + Button { + text: @tr("Join Session"); + clicked => { + join_session_button_clicked(); + } + } + } + } +} diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint new file mode 100644 index 0000000..c0d6912 --- /dev/null +++ b/src/ui/gui/netplay_wait.slint @@ -0,0 +1,103 @@ +import { VerticalBox, HorizontalBox, TextEdit, ScrollView, LineEdit, Button, GridBox } from "std-widgets.slint"; +import { NetplayData } from "netplay_page.slint"; + +export global NetplayWaitData { + in-out property motd; + in-out property <[string]> players; + in-out property port; + in-out property can_start; + in-out property chat_text; +} + +export component NetplayWait inherits Window { + title: @tr("Netplay: Waiting Room"); + preferred-width: 400px; + preferred-height: 400px; + in-out property players <=> NetplayWaitData.players; + in-out property session_name <=> NetplayData.session_name; + in-out property game_name <=> NetplayData.game_name; + in-out property rom_path <=> NetplayData.rom_path; + in-out property motd <=> NetplayWaitData.motd; + in-out property port <=> NetplayWaitData.port; + in-out property can_start <=> NetplayWaitData.can_start; + in-out property chat_text <=> NetplayWaitData.chat_text; + callback send_chat_message(string); + callback begin_game; + + VerticalBox { + Text { + text: @tr("Session Name: ") + NetplayData.session_name; + font-size: 15px; + horizontal-alignment: center; + } + + Text { + text: @tr("Game Name: ") + NetplayData.game_name; + font-size: 15px; + horizontal-alignment: center; + } + + GridBox { + Row { + Text { + text: "Player 1: " + players[0]; + } + + Text { + text: "Player 2: " + players[1]; + } + } + + Row { + Text { + text: "Player 3: " + players[2]; + } + + Text { + text: "Player 4: " + players[3]; + } + } + } + + TextEdit { + read-only: true; + text: NetplayWaitData.chat_text; + } + + HorizontalBox { + chat_message := LineEdit { + placeholder_text: @tr("Enter chat message"); + key-released(event) => { + if (event.text == Key.Return && chat_message.text != "") { + send_chat_message(chat_message.text); + chat_message.text = ""; + } + accept + } + } + + Button { + text: @tr("Send Message"); + enabled: chat_message.text != ""; + clicked => { + send_chat_message(chat_message.text); + chat_message.text = ""; + } + } + } + + Text { + text: NetplayWaitData.motd; + wrap: word-wrap; + } + + Button { + text: @tr("Start Game"); + enabled: NetplayWaitData.can_start; + clicked => { + NetplayWaitData.can_start = false; + begin_game(); + } + } + } +} diff --git a/src/ui/gui/page.slint b/src/ui/gui/page.slint new file mode 100644 index 0000000..cb52e7d --- /dev/null +++ b/src/ui/gui/page.slint @@ -0,0 +1,23 @@ +// Copyright © SixtyFPS GmbH +// SPDX-License-Identifier: MIT + +import { Switch, GridBox, ListView, ScrollView, HorizontalBox, VerticalBox, Palette } from "std-widgets.slint"; + +export component Page inherits VerticalBox { + in property title: "title"; + + accessible-role: tab-panel; + accessible-label: root.title; + + HorizontalBox { + Text { + font-size: 20px; + text <=> root.title; + } + + // Spacer + Rectangle { } + } + + @children +} diff --git a/src/ui/gui/pages.slint b/src/ui/gui/pages.slint new file mode 100644 index 0000000..93039ba --- /dev/null +++ b/src/ui/gui/pages.slint @@ -0,0 +1,5 @@ +export { LocalGame } from "localgame_page.slint"; +export { ControllerConfig } from "controller_page.slint"; +export { Netplay } from "netplay_page.slint"; +export { Settings } from "settings_page.slint"; +export { About } from "about_page.slint"; diff --git a/src/ui/gui/settings_page.slint b/src/ui/gui/settings_page.slint new file mode 100644 index 0000000..edbe04d --- /dev/null +++ b/src/ui/gui/settings_page.slint @@ -0,0 +1,94 @@ +// Copyright © SixtyFPS GmbH +// SPDX-License-Identifier: MIT + +import { ComboBox, HorizontalBox, VerticalBox, CheckBox } from "std-widgets.slint"; +import { Page } from "page.slint"; + +export global SettingsData { + in-out property integer_scaling; + in-out property fullscreen; + in-out property widescreen; + in-out property apply_crt_shader; + in-out property overclock_n64_cpu; + in-out property resolution; +} + +export component Settings inherits Page { + title: @tr("Settings"); + + VerticalBox { + alignment: start; + HorizontalBox { + alignment: start; + Text { + text: @tr("Resolution:"); + vertical-alignment: center; + } + + ComboBox { + model: ["1x", "2x", "4x"]; + current-value: SettingsData.resolution; + selected => { + SettingsData.resolution = self.current-value; + } + } + } + + HorizontalBox { + alignment: start; + CheckBox { + text: @tr("Integer Scaling"); + checked: SettingsData.integer_scaling; + toggled => { + SettingsData.integer_scaling = self.checked; + } + } + } + + HorizontalBox { + alignment: start; + CheckBox { + text: @tr("Fullscreen (Esc closes game)"); + checked: SettingsData.fullscreen; + toggled => { + SettingsData.fullscreen = self.checked; + } + } + } + + HorizontalBox { + alignment: start; + CheckBox { + text: @tr("Widescreen (strech)"); + checked: SettingsData.widescreen; + toggled => { + SettingsData.widescreen = self.checked; + } + } + } + + HorizontalBox { + alignment: start; + CheckBox { + text: @tr("Apply CRT shader"); + checked: SettingsData.apply_crt_shader; + toggled => { + SettingsData.apply_crt_shader = self.checked; + } + } + } + + Rectangle { } + + HorizontalBox { + alignment: start; + CheckBox { + text: @tr("Overclock N64 CPU (may cause bugs)"); + checked: SettingsData.overclock_n64_cpu; + toggled => { + SettingsData.overclock_n64_cpu = self.checked; + } + } + } + } +} diff --git a/src/ui/gui/side_bar.slint b/src/ui/gui/side_bar.slint new file mode 100644 index 0000000..074ac96 --- /dev/null +++ b/src/ui/gui/side_bar.slint @@ -0,0 +1,145 @@ +// Copyright © SixtyFPS GmbH +// SPDX-License-Identifier: MIT + +import { HorizontalBox, VerticalBox, Palette } from "std-widgets.slint"; + +component SideBarItem inherits Rectangle { + in property tab-index; + in property selected; + in property has-focus; + in-out property text <=> label.text; + + callback clicked <=> touch.clicked; + + min-height: l.preferred-height; + accessible-role: tab; + accessible-label: root.text; + accessible-item-index: root.tab-index; + accessible-item-selectable: true; + accessible-item-selected: root.selected; + accessible-action-default => { + self.clicked(); + } + + states [ + pressed when touch.pressed: { + state.opacity: 0.8; + } + hover when touch.has-hover: { + state.opacity: 0.6; + } + selected when root.selected: { + state.opacity: 1; + } + focused when root.has-focus: { + state.opacity: 0.8; + } + ] + + state := Rectangle { + opacity: 0; + background: Palette.background; + + animate opacity { duration: 150ms; } + } + + l := HorizontalBox { + y: (parent.height - self.height) / 2; + spacing: 0px; + + label := Text { + vertical-alignment: center; + accessible-role: none; + } + } + + touch := TouchArea { + width: 100%; + height: 100%; + } +} + +export component SideBar inherits Rectangle { + in property <[string]> model: []; + in property title <=> label.text; + out property current-item: 0; + out property current-focused: fs.has-focus ? fs.focused-tab : -1; // The currently focused tab + + width: 180px; + forward-focus: fs; + + Rectangle { + background: Palette.background.darker(0.2); + } + + VerticalBox { + padding-left: 0px; + padding-right: 0px; + alignment: start; + + label := Text { + font-size: 16px; + horizontal-alignment: center; + } + + navigation := VerticalLayout { + alignment: start; + vertical-stretch: 0; + accessible-role: tab-list; + accessible-delegate-focus: root.current-focused >= 0 ? root.current-focused : root.current-item; + accessible-label: root.title; + accessible-item-count: root.model.length; + + fs := FocusScope { + key-pressed(event) => { + if (event.text == "\n") { + root.current-item = root.current-focused; + return accept; + } + if (event.text == Key.UpArrow) { + self.focused-tab = Math.max(self.focused-tab - 1, 0); + return accept; + } + if (event.text == Key.DownArrow) { + self.focused-tab = Math.min(self.focused-tab + 1, root.model.length - 1); + return accept; + } + return reject; + } + + key-released(event) => { + if (event.text == " ") { + root.current-item = root.current-focused; + return accept; + } + return reject; + } + + property focused-tab: 0; + + x: 0; + width: 0; // Do not react on clicks + } + + for item[index] in root.model: SideBarItem { + clicked => { + root.current-item = index; + } + + tab-index: index; + has-focus: index == root.current-focused; + text: item; + selected: index == root.current-item; + } + } + + VerticalLayout { + bottom := VerticalBox { + padding-top: 0px; + padding-bottom: 0px; + + @children + } + } + } +} diff --git a/src/ui/gui/vru_dialog.slint b/src/ui/gui/vru_dialog.slint new file mode 100644 index 0000000..c6ce4c9 --- /dev/null +++ b/src/ui/gui/vru_dialog.slint @@ -0,0 +1,24 @@ +import { Button, VerticalBox, ScrollView } from "std-widgets.slint"; +export global VruData { + in-out property <[string]> words; +} + +export component VruDialog inherits Window { + title: @tr("What Would You Like To Say?"); + preferred-width: 400px; + preferred-height: 400px; + callback vru_button_clicked(string); + in-out property words <=> VruData.words; + + ScrollView { + VerticalBox { + padding-bottom: 40px; + for word[i] in words: Button { + text: word; + clicked => { + vru_button_clicked(self.text); + } + } + } + } +} diff --git a/src/ui/input.rs b/src/ui/input.rs index 6ae870c..ba0f56a 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -347,6 +347,21 @@ pub fn get_controller_names(game_ui: &ui::Ui) -> Vec { controllers } +pub fn get_controller_paths(game_ui: &ui::Ui) -> Vec> { + let mut controller_paths: Vec> = vec![]; + + for joystick in game_ui.input.joysticks.iter() { + let path = unsafe { + std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickPathForID(*joystick)) + .to_string_lossy() + .to_string() + }; + controller_paths.push(Some(path)); + } + + controller_paths +} + pub fn get(ui: &ui::Ui, channel: usize) -> InputData { let profile_name = ui.config.input.input_profile_binding[channel].clone(); let profile = ui.config.input.input_profiles.get(&profile_name).unwrap(); diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs new file mode 100644 index 0000000..2698250 --- /dev/null +++ b/src/ui/netplay.rs @@ -0,0 +1,911 @@ +#![allow(clippy::too_many_arguments)] + +use crate::device; +use crate::ui; +use crate::ui::gui::AppWindow; +use crate::ui::gui::{ + GbPaths, NetplayCreate, NetplayDevice, NetplayDialog, NetplayJoin, NetplayWait, VruChannel, + run_rom, +}; +use futures::{SinkExt, StreamExt}; +use sha2::{Digest, Sha256}; +use slint::{ComponentHandle, Model}; +use tokio_tungstenite::tungstenite::Bytes; +use tokio_tungstenite::tungstenite::protocol::Message; + +const NETPLAY_VERSION: i32 = 17; +const EMU_NAME: &str = "gopher64"; + +#[derive(serde::Serialize, serde::Deserialize, Clone, Debug)] +pub struct NetplayRoom { + room_name: Option, + password: Option, + protected: Option, + #[serde(rename = "MD5")] + md5: Option, + game_name: Option, + pub port: Option, + features: Option>, + buffer_target: Option, +} + +#[derive(serde::Serialize, serde::Deserialize, Clone, Debug)] +pub struct NetplayMessage { + #[serde(rename = "type")] + message_type: String, + player_name: Option, + client_sha: Option, + netplay_version: Option, + emulator: Option, + room: Option, + accept: Option, + message: Option, + auth: Option, + player_names: Option<[String; 4]>, + #[serde(rename = "authTime")] + auth_time: Option, + rooms: Option>, +} + +trait NetplayPages { + fn set_server_names(&self, names: slint::ModelRc); + fn set_server_urls(&self, urls: slint::ModelRc); + fn set_ping(&self, ping: slint::SharedString); + fn set_game_name(&self, game_name: slint::SharedString); + fn set_game_hash(&self, game_hash: slint::SharedString); + fn set_rom_path(&self, rom_path: slint::SharedString); + fn set_peer_addr(&self, peer_addr: slint::SharedString); + fn refresh_sessions(&self, _server: slint::SharedString) { + // Default implementation does nothing + } +} + +impl NetplayPages for NetplayCreate { + fn set_server_names(&self, names: slint::ModelRc) { + self.set_server_names(names); + } + fn set_server_urls(&self, urls: slint::ModelRc) { + self.set_server_urls(urls); + } + fn set_ping(&self, ping: slint::SharedString) { + self.set_ping(ping); + } + fn set_game_name(&self, game_name: slint::SharedString) { + self.set_game_name(game_name); + } + fn set_game_hash(&self, game_hash: slint::SharedString) { + self.set_game_hash(game_hash); + } + fn set_rom_path(&self, rom_path: slint::SharedString) { + self.set_rom_path(rom_path); + } + fn set_peer_addr(&self, peer_addr: slint::SharedString) { + self.set_peer_addr(peer_addr); + } +} + +impl NetplayPages for NetplayJoin { + fn set_server_names(&self, names: slint::ModelRc) { + self.set_server_names(names); + } + fn set_server_urls(&self, urls: slint::ModelRc) { + self.set_server_urls(urls); + } + fn set_ping(&self, ping: slint::SharedString) { + self.set_ping(ping); + } + fn refresh_sessions(&self, server: slint::SharedString) { + self.invoke_refresh_session(server); + } + fn set_game_name(&self, game_name: slint::SharedString) { + self.set_game_name(game_name); + } + fn set_game_hash(&self, game_hash: slint::SharedString) { + self.set_game_hash(game_hash); + } + fn set_rom_path(&self, rom_path: slint::SharedString) { + self.set_rom_path(rom_path); + } + fn set_peer_addr(&self, peer_addr: slint::SharedString) { + self.set_peer_addr(peer_addr); + } +} + +fn populate_server_names(weak: slint::Weak) { + let task = reqwest::get("https://m64p.s3.amazonaws.com/servers.json"); + tokio::spawn(async move { + let mut local_servers: Vec<(String, String)> = vec![]; + + let broadcast_sock = tokio::net::UdpSocket::bind((std::net::Ipv4Addr::UNSPECIFIED, 0)) + .await + .unwrap(); + broadcast_sock.set_broadcast(true).unwrap(); + let data: [u8; 1] = [1]; + broadcast_sock + .send_to(&data, (std::net::Ipv4Addr::BROADCAST, 45000)) + .await + .unwrap(); + let mut buffer = [0; 1024]; + if let Ok(Ok(result)) = tokio::time::timeout( + std::time::Duration::from_millis(200), + broadcast_sock.recv(&mut buffer), + ) + .await + { + let data: std::collections::HashMap = + serde_json::from_slice(&buffer[..result]).unwrap(); + for server in data.iter() { + local_servers.push((server.0.into(), server.1.into())); + } + } + + let response = task.await; + if let Ok(response) = response { + let servers: std::collections::HashMap = response.json().await.unwrap(); + + let weak2 = weak.clone(); + weak.upgrade_in_event_loop(move |handle| { + let server_names: slint::VecModel = slint::VecModel::default(); + let server_urls: slint::VecModel = slint::VecModel::default(); + for local_server in local_servers { + server_names.push(local_server.0.into()); + server_urls.push(local_server.1.into()); + } + for server in servers { + server_names.push(server.0.into()); + server_urls.push(server.1.into()); + } + update_ping(weak2, server_urls.row_data(0).unwrap().into()); + handle.refresh_sessions(server_urls.row_data(0).unwrap()); + let server_names_model: std::rc::Rc> = + std::rc::Rc::new(server_names); + let server_urls_model: std::rc::Rc> = + std::rc::Rc::new(server_urls); + handle.set_server_names(slint::ModelRc::from(server_names_model)); + handle.set_server_urls(slint::ModelRc::from(server_urls_model)); + }) + .unwrap(); + } + }); +} + +fn select_rom(weak: slint::Weak) { + let select_rom = rfd::AsyncFileDialog::new() + .set_title("Select ROM") + .pick_file(); + tokio::spawn(async move { + if let Some(file) = select_rom.await { + if let Some(rom_contents) = device::get_rom_contents(file.path()) { + let hash = device::cart::rom::calculate_hash(&rom_contents); + let game_name = ui::storage::get_game_name(&rom_contents); + weak.upgrade_in_event_loop(move |handle| { + handle.set_game_name(game_name.into()); + handle.set_game_hash(hash.into()); + handle.set_rom_path(file.path().to_str().unwrap().into()); + }) + .unwrap(); + } else { + weak.upgrade_in_event_loop(move |handle| { + let message_dialog = NetplayDialog::new().unwrap(); + let weak_dialog = message_dialog.as_weak(); + message_dialog.on_close_clicked(move || { + weak_dialog.unwrap().window().hide().unwrap(); + }); + message_dialog.set_text("Could not read ROM".into()); + message_dialog.show().unwrap(); + + handle.set_game_name("".into()); + handle.set_game_hash("".into()); + handle.set_rom_path("".into()); + }) + .unwrap(); + } + } + }); +} + +fn update_ping( + weak: slint::Weak, + server_url: String, +) { + weak.upgrade_in_event_loop(move |handle| { + handle.set_ping("Ping: Unknown".into()); + }) + .unwrap(); + tokio::spawn(async move { + if let Ok(Ok((mut sock, _response))) = tokio::time::timeout( + std::time::Duration::from_secs(1), + tokio_tungstenite::connect_async(server_url), + ) + .await + { + sock.send(Message::Ping(Vec::new().into())).await.unwrap(); + let start = std::time::Instant::now(); + + if let Some(Ok(_response)) = sock.next().await { + let elapsed = start.elapsed(); + weak.upgrade_in_event_loop(move |handle| { + handle.set_ping(format!("Ping: {:.0} ms", elapsed.as_millis()).into()); + }) + .unwrap(); + } + sock.close(None).await.unwrap(); + } + }); +} + +pub fn setup_create_window( + create_window: &NetplayCreate, + overclock_setting: bool, + fullscreen: bool, + weak_app: slint::Weak, +) { + let (netplay_read_sender, netplay_read_receiver): ( + tokio::sync::broadcast::Sender, + tokio::sync::broadcast::Receiver, + ) = tokio::sync::broadcast::channel(5); + + let (netplay_write_sender, netplay_write_receiver): ( + tokio::sync::broadcast::Sender>, + tokio::sync::broadcast::Receiver>, + ) = tokio::sync::broadcast::channel(5); + + populate_server_names(create_window.as_weak()); + let weak = create_window.as_weak(); + create_window.on_get_ping(move |server_url| { + update_ping(weak.clone(), server_url.to_string()); + }); + let weak = create_window.as_weak(); + create_window.on_select_rom(move || { + select_rom(weak.clone()); + }); + + let weak = create_window.as_weak(); + create_window.on_create_session( + move |server_url, session_name, player_name, game_name, game_hash, password| { + let _ = netplay_write_sender.send(None); // close current websocket if any + manage_websocket( + server_url.to_string(), + netplay_read_sender.clone(), + netplay_write_receiver.resubscribe(), + weak.clone(), + ); + + create_session( + netplay_write_sender.clone(), + netplay_read_receiver.resubscribe(), + session_name.to_string(), + player_name.to_string(), + game_name.to_string(), + game_hash.to_string(), + password.to_string(), + overclock_setting, + fullscreen, + weak_app.clone(), + weak.clone(), + ); + }, + ); + + create_window.show().unwrap(); +} + +fn manage_websocket( + server_url: String, + netplay_read_sender: tokio::sync::broadcast::Sender, + mut netplay_write_receiver: tokio::sync::broadcast::Receiver>, + weak: slint::Weak, +) { + tokio::spawn(async move { + if let Ok(Ok((socket, _response))) = tokio::time::timeout( + std::time::Duration::from_secs(2), + tokio_tungstenite::connect_async(server_url.clone()), + ) + .await + { + match socket.get_ref() { + tokio_tungstenite::MaybeTlsStream::Plain(stream) => { + let addr = stream.peer_addr().unwrap().to_string(); + weak.upgrade_in_event_loop(move |handle| { + handle.set_peer_addr(addr.into()); + }) + .unwrap(); + } + _ => unimplemented!(), + } + + let (mut write, mut read) = socket.split(); + tokio::spawn(async move { + while let Some(Ok(response)) = read.next().await { + if let Ok(message) = serde_json::from_slice(&response.into_data()) { + let _ = netplay_read_sender.send(message); + } + } + }); + tokio::spawn(async move { + while let Ok(Some(response)) = netplay_write_receiver.recv().await { + write + .send(Message::Binary(Bytes::from( + serde_json::to_vec(&response).unwrap(), + ))) + .await + .unwrap(); + } + write.close().await.unwrap(); + }); + } + }); +} + +fn show_netplay_error(message: String) { + let message_dialog = NetplayDialog::new().unwrap(); + let weak_dialog = message_dialog.as_weak(); + message_dialog.on_close_clicked(move || { + weak_dialog.unwrap().window().hide().unwrap(); + }); + message_dialog.set_text(message.into()); + message_dialog.show().unwrap(); +} + +fn clear_sessions(handle: &NetplayJoin, message: Option) { + handle.set_sessions(slint::ModelRc::default()); + handle.set_ports(slint::ModelRc::default()); + handle.set_current_session(-1); + if let Some(message) = message { + show_netplay_error(message); + } +} + +fn update_sessions( + netplay_write_sender: tokio::sync::broadcast::Sender>, + mut netplay_read_receiver: tokio::sync::broadcast::Receiver, + weak: slint::Weak, +) { + tokio::spawn(async move { + let now_utc = chrono::Utc::now().timestamp_millis().to_string(); + let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); + let request_rooms = NetplayMessage { + message_type: "request_get_rooms".to_string(), + player_name: None, + client_sha: None, + netplay_version: Some(NETPLAY_VERSION), + player_names: None, + emulator: Some(EMU_NAME.to_string()), + accept: None, + rooms: None, + message: None, + auth_time: Some(now_utc), + auth: Some(format!("{:x}", hasher.finalize())), + room: None, + }; + + netplay_write_sender.send(Some(request_rooms)).unwrap(); + + if let Ok(Ok(message)) = tokio::time::timeout( + std::time::Duration::from_secs(2), + netplay_read_receiver.recv(), + ) + .await + { + if message.accept.unwrap() == 0 { + if let Some(rooms) = message.rooms { + weak.upgrade_in_event_loop(move |handle| { + let sessions_vec = slint::VecModel::default(); + let ports_vec = slint::VecModel::default(); + for room in rooms { + let session_vec = slint::VecModel::default(); + session_vec.push(slint::StandardListViewItem::from( + slint::SharedString::from(room.room_name.unwrap()), + )); + session_vec.push(slint::StandardListViewItem::from( + slint::SharedString::from(room.game_name.unwrap()), + )); + session_vec.push(slint::StandardListViewItem::from( + slint::SharedString::from(if room.protected.unwrap() { + "True" + } else { + "False" + }), + )); + let session_model: std::rc::Rc< + slint::VecModel, + > = std::rc::Rc::new(session_vec); + sessions_vec.push(slint::ModelRc::from(session_model)); + ports_vec.push(room.port.unwrap()); + } + let rooms_model: std::rc::Rc< + slint::VecModel>, + > = std::rc::Rc::new(sessions_vec); + let ports_model: std::rc::Rc> = + std::rc::Rc::new(ports_vec); + handle.set_sessions(slint::ModelRc::from(rooms_model)); + handle.set_ports(slint::ModelRc::from(ports_model)); + handle.set_current_session(-1); + }) + .unwrap(); + } else { + weak.upgrade_in_event_loop(move |handle| { + clear_sessions(&handle, None); + }) + .unwrap(); + } + } else { + weak.upgrade_in_event_loop(move |handle| { + clear_sessions(&handle, message.message); + }) + .unwrap(); + } + } else { + weak.upgrade_in_event_loop(move |handle| { + clear_sessions(&handle, Some("Server did not respond".to_string())); + }) + .unwrap(); + } + }); +} + +fn create_session( + netplay_write_sender: tokio::sync::broadcast::Sender>, + mut netplay_read_receiver: tokio::sync::broadcast::Receiver, + session_name: String, + player_name: String, + game_name: String, + game_hash: String, + password: String, + overclock: bool, + fullscreen: bool, + weak_app: slint::Weak, + weak: slint::Weak, +) { + tokio::spawn(async move { + let now_utc = chrono::Utc::now().timestamp_millis().to_string(); + let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); + let mut features = std::collections::HashMap::new(); + features.insert("overclock".to_string(), overclock.to_string()); + + let create_room = NetplayMessage { + message_type: "request_create_room".to_string(), + player_name: Some(player_name), + client_sha: Some(env!("GIT_HASH").to_string()), + netplay_version: Some(NETPLAY_VERSION), + emulator: Some(EMU_NAME.to_string()), + accept: None, + message: None, + rooms: None, + auth_time: Some(now_utc), + player_names: None, + auth: Some(format!("{:x}", hasher.finalize())), + room: Some(NetplayRoom { + room_name: Some(session_name), + password: Some(password), + game_name: Some(game_name), + md5: Some(game_hash), + protected: None, + port: None, + features: Some(features), + buffer_target: None, + }), + }; + + netplay_write_sender.send(Some(create_room)).unwrap(); + + if let Ok(Ok(message)) = tokio::time::timeout( + std::time::Duration::from_secs(2), + netplay_read_receiver.recv(), + ) + .await + { + if message.accept.unwrap() == 0 { + weak.upgrade_in_event_loop(move |handle| { + let session = message.room.as_ref().unwrap(); + let overclock = session.features.as_ref().unwrap().get("overclock").unwrap(); + setup_wait_window( + netplay_write_sender, + netplay_read_receiver, + session.room_name.as_ref().unwrap().into(), + session.game_name.as_ref().unwrap().into(), + handle.get_rom_path(), + message.player_name.as_ref().unwrap().into(), + session.port.unwrap(), + true, + fullscreen, + overclock == "true", + handle.get_peer_addr(), + weak_app, + ); + handle.window().hide().unwrap(); + }) + .unwrap(); + } else { + weak.upgrade_in_event_loop(move |handle| { + handle.set_pending_session(false); + if let Some(message) = message.message { + show_netplay_error(message); + } + }) + .unwrap(); + } + } else { + weak.upgrade_in_event_loop(move |handle| { + handle.set_pending_session(false); + show_netplay_error("Server did not respond".to_string()); + }) + .unwrap(); + } + }); +} + +fn join_session( + netplay_write_sender: tokio::sync::broadcast::Sender>, + mut netplay_read_receiver: tokio::sync::broadcast::Receiver, + player_name: String, + game_hash: String, + password: String, + port: i32, + fullscreen: bool, + weak_app: slint::Weak, + weak: slint::Weak, +) { + tokio::spawn(async move { + let join_room = NetplayMessage { + message_type: "request_join_room".to_string(), + player_name: Some(player_name), + client_sha: Some(env!("GIT_HASH").to_string()), + netplay_version: None, + emulator: None, + accept: None, + message: None, + rooms: None, + auth_time: None, + player_names: None, + auth: None, + room: Some(NetplayRoom { + room_name: None, + password: Some(password), + game_name: None, + md5: Some(game_hash), + protected: None, + port: Some(port), + features: None, + buffer_target: None, + }), + }; + + netplay_write_sender.send(Some(join_room)).unwrap(); + + if let Ok(Ok(message)) = tokio::time::timeout( + std::time::Duration::from_secs(2), + netplay_read_receiver.recv(), + ) + .await + { + if message.accept.unwrap() == 0 { + weak.upgrade_in_event_loop(move |handle| { + let session = message.room.as_ref().unwrap(); + let overclock = session.features.as_ref().unwrap().get("overclock").unwrap(); + setup_wait_window( + netplay_write_sender, + netplay_read_receiver, + session.room_name.as_ref().unwrap().into(), + session.game_name.as_ref().unwrap().into(), + handle.get_rom_path(), + message.player_name.as_ref().unwrap().into(), + session.port.unwrap(), + false, + fullscreen, + overclock == "true", + handle.get_peer_addr(), + weak_app, + ); + handle.window().hide().unwrap(); + }) + .unwrap(); + } else { + weak.upgrade_in_event_loop(move |handle| { + handle.set_pending_session(false); + if let Some(message) = message.message { + show_netplay_error(message); + } + }) + .unwrap(); + } + } else { + weak.upgrade_in_event_loop(move |handle| { + handle.set_pending_session(false); + show_netplay_error("Server did not respond".to_string()); + }) + .unwrap(); + } + }); +} + +fn setup_wait_window( + netplay_write_sender: tokio::sync::broadcast::Sender>, + mut netplay_read_receiver: tokio::sync::broadcast::Receiver, + session_name: slint::SharedString, + game_name: slint::SharedString, + rom_path: slint::SharedString, + player_name: slint::SharedString, + port: i32, + can_start: bool, + fullscreen: bool, + overclock: bool, + peer_addr: slint::SharedString, + weak_app: slint::Weak, +) { + let local_player = player_name.clone(); + + let mut socket_addr: std::net::SocketAddr = peer_addr.to_string().parse().unwrap(); + socket_addr.set_port(port as u16); + let wait = NetplayWait::new().unwrap(); + wait.set_session_name(session_name); + wait.set_game_name(game_name); + wait.set_rom_path(rom_path); + wait.set_port(port); + wait.set_can_start(can_start); + + let sender = netplay_write_sender.clone(); + wait.on_send_chat_message(move |message| { + let send_chat = NetplayMessage { + message_type: "request_chat_message".to_string(), + player_name: Some(player_name.to_string()), + client_sha: None, + netplay_version: None, + player_names: None, + rooms: None, + emulator: None, + accept: None, + message: Some(message.into()), + auth_time: None, + auth: None, + room: Some(NetplayRoom { + room_name: None, + password: None, + game_name: None, + md5: None, + protected: None, + port: Some(port), + features: None, + buffer_target: None, + }), + }; + sender.send(Some(send_chat)).unwrap(); + }); + + let sender = netplay_write_sender.clone(); + wait.on_begin_game(move || { + let begin_game = NetplayMessage { + message_type: "request_begin_game".to_string(), + player_name: None, + client_sha: None, + netplay_version: None, + player_names: None, + rooms: None, + emulator: None, + accept: None, + message: None, + auth_time: None, + auth: None, + room: Some(NetplayRoom { + room_name: None, + password: None, + game_name: None, + md5: None, + protected: None, + port: Some(port), + features: None, + buffer_target: None, + }), + }; + sender.send(Some(begin_game)).unwrap(); + }); + + let sender = netplay_write_sender.clone(); + wait.window().on_close_requested(move || { + let _ = sender.send(None); // close current websocket if any + slint::CloseRequestResponse::HideWindow + }); + + let motd_message = NetplayMessage { + message_type: "request_motd".to_string(), + player_name: None, + client_sha: None, + netplay_version: None, + emulator: None, + accept: None, + rooms: None, + player_names: None, + message: None, + auth_time: None, + auth: None, + room: None, + }; + + netplay_write_sender.send(Some(motd_message)).unwrap(); + + let weak = wait.as_weak(); + tokio::spawn(async move { + while let Ok(response) = netplay_read_receiver.recv().await { + match response.message_type.as_str() { + "reply_motd" => { + let request_players = NetplayMessage { + message_type: "request_players".to_string(), + player_name: None, + client_sha: None, + netplay_version: None, + player_names: None, + emulator: None, + rooms: None, + accept: None, + message: None, + auth_time: None, + auth: None, + room: Some(NetplayRoom { + room_name: None, + password: None, + game_name: None, + md5: None, + protected: None, + port: Some(port), + features: None, + buffer_target: None, + }), + }; + netplay_write_sender.send(Some(request_players)).unwrap(); + + weak.upgrade_in_event_loop(move |handle| { + #[allow(clippy::regex_creation_in_loops)] + let re = regex::Regex::new(r"<[^>]*>").unwrap(); + let motd = re + .replace_all(response.message.unwrap().as_str(), "") + .into_owned(); + handle.set_motd(motd.into()); + }) + .unwrap(); + } + "reply_players" => { + weak.upgrade_in_event_loop(move |handle| { + if let Some(player_names) = response.player_names { + let players_vec: slint::VecModel = + slint::VecModel::default(); + for player in player_names { + players_vec.push(player.into()); + } + let players_model: std::rc::Rc> = + std::rc::Rc::new(players_vec); + handle.set_players(slint::ModelRc::from(players_model)); + } + }) + .unwrap(); + } + "reply_chat_message" => { + weak.upgrade_in_event_loop(move |handle| { + let mut chat_text = handle.get_chat_text(); + chat_text.push_str(&format!("{}\n", response.message.unwrap())); + handle.set_chat_text(chat_text); + }) + .unwrap(); + } + "reply_begin_game" => { + if response.accept.unwrap() == 0 { + weak.upgrade_in_event_loop(move |handle| { + handle.window().hide().unwrap(); + let _ = netplay_write_sender.send(None); + + let mut player_number = 4; + let players = handle.get_players(); + for (i, player) in players.iter().enumerate() { + if player == local_player { + player_number = i; + } + } + if player_number > 3 { + panic!("Could not determine player number"); + } + + run_rom( + GbPaths { + rom: [None, None, None, None], + ram: [None, None, None, None], + }, + handle.get_rom_path().as_str().into(), + fullscreen, + overclock, + VruChannel { + vru_window_notifier: None, + vru_word_receiver: None, + }, + Some(NetplayDevice { + peer_addr: socket_addr, + player_number: player_number as u8, + }), + weak_app, + ); + }) + .unwrap(); + return; + } else { + weak.upgrade_in_event_loop(move |handle| { + handle.set_can_start(can_start); + if let Some(message) = response.message { + show_netplay_error(message); + } + }) + .unwrap(); + } + } + _ => { + println!("Unknown netplay message type: {}", response.message_type); + } + } + } + }); + + wait.show().unwrap(); +} + +pub fn setup_join_window( + join_window: &NetplayJoin, + fullscreen: bool, + weak_app: slint::Weak, +) { + let (netplay_read_sender, netplay_read_receiver): ( + tokio::sync::broadcast::Sender, + tokio::sync::broadcast::Receiver, + ) = tokio::sync::broadcast::channel(5); + + let (netplay_write_sender, netplay_write_receiver): ( + tokio::sync::broadcast::Sender>, + tokio::sync::broadcast::Receiver>, + ) = tokio::sync::broadcast::channel(5); + + populate_server_names(join_window.as_weak()); + let weak = join_window.as_weak(); + join_window.on_get_ping(move |server_url| { + update_ping(weak.clone(), server_url.to_string()); + weak.upgrade_in_event_loop(move |handle| { + handle.invoke_refresh_session(server_url); + }) + .unwrap(); + }); + let weak = join_window.as_weak(); + join_window.on_select_rom(move || { + select_rom(weak.clone()); + }); + + let sender = netplay_write_sender.clone(); + join_window.window().on_close_requested(move || { + let _ = sender.send(None); // close current websocket if any + slint::CloseRequestResponse::HideWindow + }); + + let weak = join_window.as_weak(); + let sender = netplay_write_sender.clone(); + let receiver = netplay_read_receiver.resubscribe(); + join_window.on_refresh_session(move |server_url| { + let _ = sender.send(None); // close current websocket if any + manage_websocket( + server_url.to_string(), + netplay_read_sender.clone(), + netplay_write_receiver.resubscribe(), + weak.clone(), + ); + update_sessions(sender.clone(), receiver.resubscribe(), weak.clone()); + }); + let weak = join_window.as_weak(); + join_window.on_join_session(move |player_name, game_hash, password, port| { + join_session( + netplay_write_sender.clone(), + netplay_read_receiver.resubscribe(), + player_name.to_string(), + game_hash.to_string(), + password.to_string(), + port, + fullscreen, + weak_app.clone(), + weak.clone(), + ); + }); + + join_window.show().unwrap(); +} diff --git a/src/ui/vru.rs b/src/ui/vru.rs index c04c48d..5cfc8cc 100644 --- a/src/ui/vru.rs +++ b/src/ui/vru.rs @@ -1,18 +1,14 @@ -use eframe::egui; - use crate::ui; pub fn prompt_for_match( words: &[String], - window_notifier: &tokio::sync::mpsc::Sender>, + window_notifier: &tokio::sync::mpsc::Sender>>, word_index_receiver: &mut tokio::sync::mpsc::Receiver, - gui_ctx: &egui::Context, ) -> u16 { let mut dedup_words = words.to_owned(); dedup_words.sort(); dedup_words.dedup(); - window_notifier.try_send(dedup_words).unwrap(); - gui_ctx.request_repaint(); // this is so the window pops up right away + window_notifier.try_send(Some(dedup_words)).unwrap(); let mut result = word_index_receiver.try_recv(); while result.is_err() { result = word_index_receiver.try_recv(); From 0bb3d2cd5da7ea4ccebea27db9bbec2b20e95e5b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 26 Jun 2025 09:00:23 +0200 Subject: [PATCH 0467/1117] Slint fixes (#433) * Slint fixes * more * more * more * more * more * more * more * more * more --- Cargo.lock | 595 ++++++------------------------- src/device/cpu.rs | 1 + src/ui/gui.rs | 60 +++- src/ui/gui/appwindow.slint | 5 +- src/ui/gui/controller_page.slint | 260 ++++---------- src/ui/gui/netplay_create.slint | 2 +- src/ui/gui/netplay_join.slint | 2 +- src/ui/gui/settings_page.slint | 6 +- src/ui/netplay.rs | 2 +- 9 files changed, 220 insertions(+), 713 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 20e4da1..9ef61f7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -196,7 +196,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -339,7 +339,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -374,30 +374,7 @@ checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", -] - -[[package]] -name = "atk" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" -dependencies = [ - "atk-sys", - "glib", - "libc", -] - -[[package]] -name = "atk-sys" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", + "syn", ] [[package]] @@ -424,7 +401,7 @@ dependencies = [ "derive_utils", "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -504,7 +481,7 @@ dependencies = [ "regex", "rustc-hash 2.1.1", "shlex", - "syn 2.0.104", + "syn", ] [[package]] @@ -524,7 +501,7 @@ dependencies = [ "regex", "rustc-hash 2.1.1", "shlex", - "syn 2.0.104", + "syn", ] [[package]] @@ -659,7 +636,7 @@ checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -699,31 +676,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "cairo-rs" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" -dependencies = [ - "bitflags 2.9.1", - "cairo-sys-rs", - "glib", - "libc", - "once_cell", - "thiserror 1.0.69", -] - -[[package]] -name = "cairo-sys-rs" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - [[package]] name = "calloop" version = "0.13.0" @@ -870,10 +822,10 @@ version = "4.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2c7947ae4cc3d851207c1adb5b5e260ff0cca11446b1d6d1423788e442257ce" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -908,9 +860,12 @@ dependencies = [ [[package]] name = "cobs" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" +checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" +dependencies = [ + "thiserror 2.0.12", +] [[package]] name = "codemap" @@ -987,7 +942,7 @@ checksum = "5387f5bbc9e9e6c96436ea125afa12614cebf8ac67f49abc08c1e7a891466c90" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -1171,9 +1126,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-common" @@ -1246,7 +1201,7 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -1266,7 +1221,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", "unicode-xid", ] @@ -1278,7 +1233,7 @@ checksum = "ccfae181bab5ab6c5478b2ccb69e4c68a02f8c3ec72f6616bfec9dbc599d2ee0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -1349,7 +1304,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -1447,7 +1402,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -1467,7 +1422,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -1691,7 +1646,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -1778,7 +1733,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -1817,64 +1772,6 @@ dependencies = [ "slab", ] -[[package]] -name = "gdk" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" -dependencies = [ - "cairo-rs", - "gdk-pixbuf", - "gdk-sys", - "gio", - "glib", - "libc", - "pango", -] - -[[package]] -name = "gdk-pixbuf" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" -dependencies = [ - "gdk-pixbuf-sys", - "gio", - "glib", - "libc", - "once_cell", -] - -[[package]] -name = "gdk-pixbuf-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gdk-sys" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" -dependencies = [ - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "pkg-config", - "system-deps", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -1938,38 +1835,6 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" -[[package]] -name = "gio" -version = "0.18.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "gio-sys", - "glib", - "libc", - "once_cell", - "pin-project-lite", - "smallvec", - "thiserror 1.0.69", -] - -[[package]] -name = "gio-sys" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", - "winapi", -] - [[package]] name = "gl_generator" version = "0.14.0" @@ -1981,53 +1846,6 @@ dependencies = [ "xml-rs", ] -[[package]] -name = "glib" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" -dependencies = [ - "bitflags 2.9.1", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "futures-util", - "gio-sys", - "glib-macros", - "glib-sys", - "gobject-sys", - "libc", - "memchr", - "once_cell", - "smallvec", - "thiserror 1.0.69", -] - -[[package]] -name = "glib-macros" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" -dependencies = [ - "heck 0.4.1", - "proc-macro-crate 2.0.0", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.104", -] - -[[package]] -name = "glib-sys" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" -dependencies = [ - "libc", - "system-deps", -] - [[package]] name = "glob" version = "0.3.2" @@ -2112,17 +1930,6 @@ dependencies = [ "gl_generator", ] -[[package]] -name = "gobject-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - [[package]] name = "gopher64" version = "1.0.18" @@ -2235,58 +2042,6 @@ dependencies = [ "bitflags 2.9.1", ] -[[package]] -name = "gtk" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a" -dependencies = [ - "atk", - "cairo-rs", - "field-offset", - "futures-channel", - "gdk", - "gdk-pixbuf", - "gio", - "glib", - "gtk-sys", - "gtk3-macros", - "libc", - "pango", - "pkg-config", -] - -[[package]] -name = "gtk-sys" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" -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.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d" -dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.104", -] - [[package]] name = "h2" version = "0.4.10" @@ -2357,12 +2112,6 @@ dependencies = [ "stable_deref_trait", ] -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - [[package]] name = "heck" version = "0.5.0" @@ -2499,9 +2248,9 @@ dependencies = [ [[package]] name = "i-slint-backend-selector" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891b24f1323ea2f8791667b960620532d95a76fd9008ac67d2826e1153889978" +checksum = "50166eb0f0f63ffa514069cdad5465d1d4c711c57dbd495f16f0a4ee14b82e46" dependencies = [ "cfg-if", "i-slint-backend-winit", @@ -2512,9 +2261,9 @@ dependencies = [ [[package]] name = "i-slint-backend-winit" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b87c1fb7bcdd6cf0c93dfd2de2c33b0c21eca625ec8aafee714edac5bd9f2b" +checksum = "2c3b5697d3fbbc7ae0fcba4592c76f39d13a25fad055064a31855f2234fd82ba" dependencies = [ "cfg-if", "cfg_aliases", @@ -2545,9 +2294,9 @@ dependencies = [ [[package]] name = "i-slint-common" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "748b5c0e292b2263fbd5b2855df207f4f6e068382668c55526037ac0ff5ba038" +checksum = "0c400c33bd6bc68397adefa1be2abaf77cdd90c216ad88b1be2ebdb0003ea996" dependencies = [ "cfg-if", "derive_more", @@ -2558,9 +2307,9 @@ dependencies = [ [[package]] name = "i-slint-compiler" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dae46edba3b6875f66765d4074ecf4d65b8cbf1e7a0f2b4581e23e72bd8f1157" +checksum = "1eafbcc08babe8bb24967193a7796c0e26170d0a6cdf09236cc2fdb63dded502" dependencies = [ "by_address", "codemap", @@ -2588,9 +2337,9 @@ dependencies = [ [[package]] name = "i-slint-core" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13599d9d81dba95796c9bf7c9f9f179bf955cdf240f886a442eb460f57b17ba1" +checksum = "dc384a0a106e7bc1aaf6fbf06d5a4d0d8e51a4bc5ff5ce36dbe559620aef4533" dependencies = [ "auto_enums", "bitflags 2.9.1", @@ -2632,20 +2381,20 @@ dependencies = [ [[package]] name = "i-slint-core-macros" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2633fb6f59e2184db69c0b3323ad8c324b169aa8d24999a67f2b5cc2c2324b8e" +checksum = "81504739c60f11af98f80f287624379514923888ecdf37e0bc43c5dc1cadafa5" dependencies = [ "quote", "serde_json", - "syn 2.0.104", + "syn", ] [[package]] name = "i-slint-renderer-femtovg" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e63ad7c680b0d205a2bc19f3974fcb9bc567ab786dbc34553e30aa8b1dffb9f9" +checksum = "754f4a057294c77897b0a4a9795131e2442f494e02feccbcd09bd041270f789a" dependencies = [ "cfg-if", "const-field-offset", @@ -2674,9 +2423,9 @@ dependencies = [ [[package]] name = "i-slint-renderer-skia" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e63a3aa935a803f1e59e1fb04bc49f93bc23a0612cd49afa7dc9533613e992aa" +checksum = "687126d7e82d447e15bc2666053f7653fa562e11dc6a9799e6dd0186a7927142" dependencies = [ "bytemuck", "cfg-if", @@ -2918,7 +2667,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -3016,7 +2765,7 @@ checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -3181,34 +2930,15 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "1580801010e535496706ba011c15f8532df6b42297d2e471fec38ceadd8c0638" dependencies = [ "bitflags 2.9.1", "libc", "redox_syscall 0.5.13", ] -[[package]] -name = "libxdo" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00333b8756a3d28e78def82067a377de7fa61b24909000aeaa2b446a948d14db" -dependencies = [ - "libxdo-sys", -] - -[[package]] -name = "libxdo-sys" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db23b9e7e2b7831bbd8aac0bbeeeb7b68cbebc162b227e7052e8e55829a09212" -dependencies = [ - "libc", - "x11", -] - [[package]] name = "libz-rs-sys" version = "0.5.1" @@ -3455,15 +3185,13 @@ dependencies = [ [[package]] name = "muda" -version = "0.16.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4de14a9b5d569ca68d7c891d613b390cf5ab4f851c77aaa2f9e435555d3d9492" +checksum = "58b89bf91c19bf036347f1ab85a81c560f08c0667c8601bece664d860a600988" dependencies = [ "crossbeam-channel", "dpi", - "gtk", "keyboard-types", - "libxdo", "objc2 0.6.1", "objc2-app-kit 0.3.1", "objc2-core-foundation", @@ -3612,7 +3340,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -3661,10 +3389,10 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -4088,31 +3816,6 @@ dependencies = [ "ttf-parser 0.25.1", ] -[[package]] -name = "pango" -version = "0.18.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" -dependencies = [ - "gio", - "glib", - "libc", - "once_cell", - "pango-sys", -] - -[[package]] -name = "pango-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - [[package]] name = "parking" version = "2.2.1" @@ -4193,7 +3896,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -4294,9 +3997,9 @@ dependencies = [ [[package]] name = "postcard" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "170a2601f67cc9dba8edd8c4870b15f71a6a2dc196daec8c83f72b59dff628a8" +checksum = "6c1de96e20f51df24ca73cafcc4690e044854d803259db27a00a461cb3b9d17a" dependencies = [ "cobs", "embedded-io 0.4.0", @@ -4342,26 +4045,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "061c1221631e079b26479d25bbf2275bfe5917ae8419cd7e34f13bfc2aa7539a" dependencies = [ "proc-macro2", - "syn 2.0.104", -] - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit 0.19.15", -] - -[[package]] -name = "proc-macro-crate" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" -dependencies = [ - "toml_edit 0.20.7", + "syn", ] [[package]] @@ -4370,31 +4054,7 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ - "toml_edit 0.22.27", -] - -[[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 1.0.109", - "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", + "toml_edit", ] [[package]] @@ -4422,7 +4082,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" dependencies = [ "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -5096,7 +4756,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -5119,7 +4779,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -5234,7 +4894,7 @@ dependencies = [ "bindgen 0.71.1", "cc", "flate2", - "heck 0.5.0", + "heck", "lazy_static", "regex", "serde_json", @@ -5262,9 +4922,9 @@ checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" [[package]] name = "slint" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad0f31b974d0d69db787cc4f8b2965806f4991b0b47bfcb40538ae714fd9448" +checksum = "8c99512aff435eb85fc719bf73aff5c4a13f3d202843c326a2f50eb0377956f8" dependencies = [ "const-field-offset", "i-slint-backend-selector", @@ -5281,21 +4941,21 @@ dependencies = [ [[package]] name = "slint-build" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7076e05474941b35df7e2d03c393a3c3b4e4855dd93f0280451002df07e474" +checksum = "e0f58adfef3f956cc3c124cb19154cf29b510badf2a06b3a3521c6fdb97a47a4" dependencies = [ "derive_more", "i-slint-compiler", "spin_on", - "toml_edit 0.22.27", + "toml_edit", ] [[package]] name = "slint-macros" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66b5db8df61e3766111c8e42a957af8502b2fc1814f87eacc3a19252ae964a5c" +checksum = "33e4f639260309e13e8f8dc40ec905d57a15dc512d8d50c52ad650088cc7e1e2" dependencies = [ "i-slint-compiler", "proc-macro2", @@ -5510,11 +5170,11 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", "rustversion", - "syn 2.0.104", + "syn", ] [[package]] @@ -5523,11 +5183,11 @@ version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c77a8c5abcaf0f9ce05d62342b7d298c346515365c36b673df4ebe3ced01fde8" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", "rustversion", - "syn 2.0.104", + "syn", ] [[package]] @@ -5546,16 +5206,6 @@ dependencies = [ "siphasher", ] -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "unicode-ident", -] - [[package]] name = "syn" version = "2.0.104" @@ -5584,7 +5234,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -5603,7 +5253,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" dependencies = [ "cfg-expr", - "heck 0.5.0", + "heck", "pkg-config", "toml", "version-compare", @@ -5680,7 +5330,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -5691,7 +5341,7 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -5825,7 +5475,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -5872,7 +5522,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.27", + "toml_edit", ] [[package]] @@ -5884,28 +5534,6 @@ dependencies = [ "serde", ] -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.20.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow 0.5.40", -] - [[package]] name = "toml_edit" version = "0.22.27" @@ -5917,7 +5545,7 @@ dependencies = [ "serde_spanned", "toml_datetime", "toml_write", - "winnow 0.7.11", + "winnow", ] [[package]] @@ -5990,7 +5618,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -6251,7 +5879,7 @@ checksum = "8cfcf6171aa2b0f85718ca5888ca32f6edf61d1849f8e4b3786ad890e5b68f68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -6310,7 +5938,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.104", + "syn", "wasm-bindgen-shared", ] @@ -6345,7 +5973,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -6720,7 +6348,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -6731,7 +6359,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -6742,7 +6370,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -6753,7 +6381,7 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -7148,15 +6776,6 @@ dependencies = [ "xkbcommon-dl", ] -[[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - [[package]] name = "winnow" version = "0.7.11" @@ -7200,16 +6819,6 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" -[[package]] -name = "x11" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" -dependencies = [ - "libc", - "pkg-config", -] - [[package]] name = "x11-clipboard" version = "0.9.3" @@ -7254,9 +6863,9 @@ checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" [[package]] name = "xattr" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d65cbf2f12c15564212d48f4e3dfb87923d25d611f2aed18f4cb23f0413d89e" +checksum = "af3a19837351dc82ba89f8a125e22a3c475f05aba604acc023d62b2739ae2909" dependencies = [ "libc", "rustix 1.0.7", @@ -7319,7 +6928,7 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", "synstructure", ] @@ -7351,7 +6960,7 @@ dependencies = [ "tracing", "uds_windows", "windows-sys 0.59.0", - "winnow 0.7.11", + "winnow", "zbus_macros", "zbus_names", "zvariant", @@ -7363,10 +6972,10 @@ version = "5.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a17e7e5eec1550f747e71a058df81a9a83813ba0f6a95f39c4e218bdc7ba366a" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.104", + "syn", "zbus_names", "zvariant", "zvariant_utils", @@ -7380,7 +6989,7 @@ checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" dependencies = [ "serde", "static_assertions", - "winnow 0.7.11", + "winnow", "zvariant", ] @@ -7401,7 +7010,7 @@ checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -7421,7 +7030,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", "synstructure", ] @@ -7442,7 +7051,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -7475,7 +7084,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn", ] [[package]] @@ -7584,7 +7193,7 @@ dependencies = [ "enumflags2", "serde", "url", - "winnow 0.7.11", + "winnow", "zvariant_derive", "zvariant_utils", ] @@ -7595,10 +7204,10 @@ version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75fda702cd42d735ccd48117b1630432219c0e9616bf6cb0f8350844ee4d9580" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.104", + "syn", "zvariant_utils", ] @@ -7612,6 +7221,6 @@ dependencies = [ "quote", "serde", "static_assertions", - "syn 2.0.104", - "winnow 0.7.11", + "syn", + "winnow", ] diff --git a/src/device/cpu.rs b/src/device/cpu.rs index 085bda8..57faaee 100644 --- a/src/device/cpu.rs +++ b/src/device/cpu.rs @@ -227,6 +227,7 @@ pub fn init(device: &mut device::Device) { device.cpu.clock_rate = if !device.cpu.overclock { 93750000 } else { + println!("Overclocking enabled, setting clock rate to 125 MHz"); 125000000 }; diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 26fe347..599e689 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -108,7 +108,7 @@ fn local_game_window(app: &AppWindow, controller_paths: &[Option]) { }); } -fn get_input_profiles(config: &ui::config::Config) -> Vec { +fn input_profiles(config: &ui::config::Config) -> Vec { let mut profiles = vec![]; for key in config.input.input_profiles.keys() { profiles.push(key.clone()) @@ -122,12 +122,33 @@ fn settings_window(app: &AppWindow, config: &ui::config::Config) { app.set_widescreen(config.video.widescreen); app.set_apply_crt_shader(config.video.crt); app.set_overclock_n64_cpu(config.emulation.overclock); - app.set_resolution(format!("{}x", config.video.upscale).into()); + let combobox_value = match config.video.upscale { + 1 => 0, + 2 => 1, + 4 => 2, + _ => 0, + }; + app.set_resolution(combobox_value); } fn update_input_profiles(weak: &slint::Weak, config: &ui::config::Config) { - let profiles = get_input_profiles(config); + let profiles = input_profiles(config); + let config_bindings = config.input.input_profile_binding.clone(); + let weak2 = weak.clone(); weak.upgrade_in_event_loop(move |handle| { + let profile_bindings = slint::VecModel::default(); + for (i, input_profile_binding) in handle.get_selected_profile_binding().iter().enumerate() { + let currently_selected = handle + .get_input_profiles() + .row_data(input_profile_binding as usize) + .unwrap_or(config_bindings[i].clone().into()) + .to_string(); + let position = profiles + .iter() + .position(|profile| *profile == currently_selected); + profile_bindings.push(position.unwrap() as i32); + } + let input_profiles = slint::VecModel::default(); for profile in profiles { input_profiles.push(profile.into()); @@ -135,6 +156,20 @@ fn update_input_profiles(weak: &slint::Weak, config: &ui::config::Con let input_profiles_model: std::rc::Rc> = std::rc::Rc::new(input_profiles); handle.set_input_profiles(slint::ModelRc::from(input_profiles_model)); + + let input_profile_binding_model: std::rc::Rc> = + std::rc::Rc::new(profile_bindings); + handle.set_selected_profile_binding(slint::ModelRc::from(input_profile_binding_model)); + + // this is a workaround to make the input profile combobox update + handle.set_blank_profiles(true); + slint::Timer::single_shot(std::time::Duration::from_millis(200), move || { + weak2 + .upgrade_in_event_loop(move |handle| { + handle.set_blank_profiles(false); + }) + .unwrap(); + }); }) .unwrap(); } @@ -156,14 +191,6 @@ fn controller_window( std::rc::Rc::new(slint::VecModel::from(config.input.transfer_pak.to_vec())); app.set_transferpak(slint::ModelRc::from(transferpak_enabled_model)); - let profile_bindings = slint::VecModel::default(); - for binding in config.input.input_profile_binding.iter() { - profile_bindings.push(binding.into()); - } - let input_profile_binding_model: std::rc::Rc> = - std::rc::Rc::new(profile_bindings); - app.set_input_profile_binding(slint::ModelRc::from(input_profile_binding_model)); - update_input_profiles(&app.as_weak(), config); let controllers = slint::VecModel::default(); @@ -224,7 +251,8 @@ fn save_settings(app: &AppWindow, controller_paths: &[Option]) { config.video.widescreen = app.get_widescreen(); config.video.crt = app.get_apply_crt_shader(); config.emulation.overclock = app.get_overclock_n64_cpu(); - config.video.upscale = app.get_resolution().trim_end_matches('x').parse().unwrap(); + let upscale_values = [1, 2, 4]; + config.video.upscale = upscale_values[app.get_resolution() as usize]; config.input.emulate_vru = app.get_emulate_vru(); for (i, controller_enabled) in app.get_controller_enabled().iter().enumerate() { @@ -233,8 +261,12 @@ fn save_settings(app: &AppWindow, controller_paths: &[Option]) { for (i, transferpak_enabled) in app.get_transferpak().iter().enumerate() { config.input.transfer_pak[i] = transferpak_enabled; } - for (i, input_profile_binding) in app.get_input_profile_binding().iter().enumerate() { - config.input.input_profile_binding[i] = input_profile_binding.into(); + for (i, input_profile_binding) in app.get_selected_profile_binding().iter().enumerate() { + config.input.input_profile_binding[i] = app + .get_input_profiles() + .row_data(input_profile_binding as usize) + .unwrap() + .to_string(); } for (i, selected_controller) in app.get_selected_controller().iter().enumerate() { diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index dfaa753..7719cd3 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -1,7 +1,7 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { LocalGame, ControllerConfig,Netplay,Settings,About } from "pages.slint"; +import { LocalGame, ControllerConfig, Netplay, Settings, About } from "pages.slint"; import { SideBar } from "side_bar.slint"; import { SettingsData } from "settings_page.slint"; import { AboutData } from "about_page.slint"; @@ -34,11 +34,12 @@ export component AppWindow inherits Window { in-out property emulate_vru <=> ControllerData.emulate_vru; in-out property controller_enabled <=> ControllerData.controller_enabled; in-out property transferpak <=> ControllerData.transferpak; - in-out property input_profile_binding <=> ControllerData.input_profile_binding; + in-out property selected_profile_binding <=> ControllerData.selected_profile_binding; in-out property input_profiles <=> ControllerData.input_profiles; in-out property controller_names <=> ControllerData.controller_names; in-out property selected_controller <=> ControllerData.selected_controller; in-out property game_running <=> State.game_running; + in-out property blank_profiles <=> ControllerData.blank_profiles; preferred-width: 700px; preferred-height: 500px; title: @tr("Gopher64"); diff --git a/src/ui/gui/controller_page.slint b/src/ui/gui/controller_page.slint index 0ec6303..89cbbde 100644 --- a/src/ui/gui/controller_page.slint +++ b/src/ui/gui/controller_page.slint @@ -1,7 +1,7 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { CheckBox, ComboBox, Button, HorizontalBox, VerticalBox, GridBox } from "std-widgets.slint"; +import { CheckBox, ComboBox, Button, HorizontalBox, VerticalBox, GroupBox } from "std-widgets.slint"; import { Page } from "page.slint"; import { State } from "localgame_page.slint"; @@ -9,20 +9,14 @@ export global ControllerData { in-out property emulate_vru; in-out property <[bool]> controller_enabled; in-out property <[bool]> transferpak; - in-out property <[string]> input_profile_binding; + in-out property <[int]> selected_profile_binding: [-1, -1, -1, -1]; in-out property <[string]> input_profiles; in-out property <[string]> controller_names; in-out property <[int]> selected_controller; + in-out property blank_profiles; } export component ControllerConfig inherits Page { - property <[{name: string, vru-enabled: bool}]> rows: [ - { name: "1", vru-enabled: false }, - { name: "2", vru-enabled: false }, - { name: "3", vru-enabled: false }, - { name: "4", vru-enabled: true } - ]; - callback input_profile_button_clicked; title: @tr("Controller Configuration"); @@ -41,213 +35,83 @@ export component ControllerConfig inherits Page { Rectangle { } - Text { - text: @tr("Controller Settings:"); - font-weight: 600; - } - - GridBox { - Row { - Text { - text: @tr("Port"); - } - - Text { - text: @tr("Enabled"); - } - - Text { - text: @tr("Emulate VRU"); - } - - Text { - text: @tr("Transfer Pak"); - } - - Text { - text: @tr("Profile"); - } - - Text { - text: @tr("Controller"); - } - } - - Row { // 0 - property number: 0; - Text { // Port - text: rows[number].name; - vertical-alignment: center; - } - - CheckBox { // Enabled - checked: ControllerData.controller_enabled[number]; - toggled => { - ControllerData.controller_enabled[number] = self.checked; - } - } - - CheckBox { // Emulate VRU - enabled: rows[number].vru-enabled; - checked: false; - } - - CheckBox { // Transfer Pak - checked: ControllerData.transferpak[number]; - toggled => { - ControllerData.transferpak[number] = self.checked; - } - } - - ComboBox { // Profile - model: ControllerData.input_profiles; - current-value: ControllerData.input_profile_binding[number]; - selected => { - ControllerData.input_profile_binding[number] = self.current-value; - } - } - - ComboBox { // Controller - model: ControllerData.controller_names; - width: self.preferred-width; - current-value: ControllerData.controller_names[ControllerData.selected_controller[number]]; - selected => { - ControllerData.selected_controller[number] = self.current-index; + HorizontalBox { + GroupBox { + title: @tr("Port"); + VerticalLayout { + alignment: space-between; + for player in [0, 1, 2, 3]: Text { + text: player + 1; + vertical-alignment: center; } } } - Row { // 1 - property number: 1; - Text { // Port - text: rows[number].name; - vertical-alignment: center; - } - - CheckBox { // Enabled - checked: ControllerData.controller_enabled[number]; - toggled => { - ControllerData.controller_enabled[number] = self.checked; - } - } - - CheckBox { // Emulate VRU - enabled: rows[number].vru-enabled; - checked: false; - } - - CheckBox { // Transfer Pak - checked: ControllerData.transferpak[number]; - toggled => { - ControllerData.transferpak[number] = self.checked; - } - } - - ComboBox { // Profile - model: ControllerData.input_profiles; - current-value: ControllerData.input_profile_binding[number]; - selected => { - ControllerData.input_profile_binding[number] = self.current-value; - } - } - - ComboBox { // Controller - model: ControllerData.controller_names; - width: self.preferred-width; - current-value: ControllerData.controller_names[ControllerData.selected_controller[number]]; - selected => { - ControllerData.selected_controller[number] = self.current-index; + GroupBox { + title: @tr("Enabled"); + VerticalLayout { + alignment: space-between; + for player in [0, 1, 2, 3]: CheckBox { + checked: ControllerData.controller_enabled[player]; + toggled => { + ControllerData.controller_enabled[player] = self.checked; + } } } } - Row { // 2 - property number: 2; - Text { // Port - text: rows[number].name; - vertical-alignment: center; - } - - CheckBox { // Enabled - checked: ControllerData.controller_enabled[number]; - toggled => { - ControllerData.controller_enabled[number] = self.checked; - } - } - - CheckBox { // Emulate VRU - enabled: rows[number].vru-enabled; - checked: false; - } - - CheckBox { // Transfer Pak - checked: ControllerData.transferpak[number]; - toggled => { - ControllerData.transferpak[number] = self.checked; - } - } - - ComboBox { // Profile - model: ControllerData.input_profiles; - current-value: ControllerData.input_profile_binding[number]; - selected => { - ControllerData.input_profile_binding[number] = self.current-value; - } - } - - ComboBox { // Controller - model: ControllerData.controller_names; - width: self.preferred-width; - current-value: ControllerData.controller_names[ControllerData.selected_controller[number]]; - selected => { - ControllerData.selected_controller[number] = self.current-index; + GroupBox { + title: @tr("Emulate VRU"); + VerticalLayout { + alignment: space-between; + for valid in [false, false, false, true]: CheckBox { + enabled: valid; + checked: valid && ControllerData.emulate_vru; + toggled => { + ControllerData.emulate_vru = self.checked; + } } } } - Row { // 3 - property number: 3; - Text { // Port - text: rows[number].name; - vertical-alignment: center; - } - - CheckBox { // Enabled - checked: ControllerData.controller_enabled[number]; - toggled => { - ControllerData.controller_enabled[number] = self.checked; + GroupBox { + title: @tr("Transfer Pak"); + VerticalLayout { + alignment: space-between; + for player in [0, 1, 2, 3]: CheckBox { + checked: ControllerData.transferpak[player]; + toggled => { + ControllerData.transferpak[player] = self.checked; + } } } + } - CheckBox { // Emulate VRU - enabled: rows[number].vru-enabled; - checked: ControllerData.emulate_vru; - toggled => { - ControllerData.emulate_vru = self.checked; + if !ControllerData.blank_profiles: GroupBox { + title: @tr("Profile"); + VerticalLayout { + alignment: space-between; + for player in [0, 1, 2, 3]: ComboBox { + model: ControllerData.input_profiles; + current-index: ControllerData.selected_profile_binding[player]; + selected => { + ControllerData.selected_profile_binding[player] = self.current-index; + } } } + } - CheckBox { // Transfer Pak - checked: ControllerData.transferpak[number]; - toggled => { - ControllerData.transferpak[number] = self.checked; - } - } - - ComboBox { // Profile - model: ControllerData.input_profiles; - current-value: ControllerData.input_profile_binding[number]; - selected => { - ControllerData.input_profile_binding[number] = self.current-value; - } - } - - ComboBox { // Controller - model: ControllerData.controller_names; - width: self.preferred-width; - current-value: ControllerData.controller_names[ControllerData.selected_controller[number]]; - selected => { - ControllerData.selected_controller[number] = self.current-index; + GroupBox { + title: @tr("Controller"); + VerticalLayout { + alignment: space-between; + for player in [0, 1, 2, 3]: ComboBox { + model: ControllerData.controller_names; + width: self.preferred-width; + current-index: ControllerData.selected_controller[player]; + selected => { + ControllerData.selected_controller[player] = self.current-index; + } } } } diff --git a/src/ui/gui/netplay_create.slint b/src/ui/gui/netplay_create.slint index 1533cd3..5ebd859 100644 --- a/src/ui/gui/netplay_create.slint +++ b/src/ui/gui/netplay_create.slint @@ -65,7 +65,7 @@ export component NetplayCreate inherits Window { HorizontalBox { server := ComboBox { model: NetplayData.server_names; - selected(current-value) => { + selected => { if (self.current-index >= 0) { get_ping(NetplayData.server_urls[self.current-index]); } diff --git a/src/ui/gui/netplay_join.slint b/src/ui/gui/netplay_join.slint index 7b5a7b1..cadfc77 100644 --- a/src/ui/gui/netplay_join.slint +++ b/src/ui/gui/netplay_join.slint @@ -42,7 +42,7 @@ export component NetplayJoin inherits Window { HorizontalBox { server := ComboBox { model: NetplayData.server_names; - selected(current-value) => { + selected => { if (self.current-index >= 0) { get_ping(NetplayData.server_urls[self.current-index]); } diff --git a/src/ui/gui/settings_page.slint b/src/ui/gui/settings_page.slint index edbe04d..1807e82 100644 --- a/src/ui/gui/settings_page.slint +++ b/src/ui/gui/settings_page.slint @@ -10,7 +10,7 @@ export global SettingsData { in-out property widescreen; in-out property apply_crt_shader; in-out property overclock_n64_cpu; - in-out property resolution; + in-out property resolution; } export component Settings inherits Page { @@ -27,9 +27,9 @@ export component Settings inherits Page { ComboBox { model: ["1x", "2x", "4x"]; - current-value: SettingsData.resolution; + current-index: SettingsData.resolution; selected => { - SettingsData.resolution = self.current-value; + SettingsData.resolution = self.current-index; } } } diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 2698250..01acb8f 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -112,7 +112,7 @@ impl NetplayPages for NetplayJoin { } fn populate_server_names(weak: slint::Weak) { - let task = reqwest::get("https://m64p.s3.amazonaws.com/servers.json"); + let task = reqwest::get("https://m64p.s3.amazonaws.com/serverstest.json"); tokio::spawn(async move { let mut local_servers: Vec<(String, String)> = vec![]; From ada6936b9a1b7d0114b44f00c9163e027bb7ac86 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 26 Jun 2025 09:50:22 +0200 Subject: [PATCH 0468/1117] print message when creating/loading savestate --- src/savestates.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/savestates.rs b/src/savestates.rs index fda8b77..c679eb8 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -87,6 +87,10 @@ pub fn create_savestate(device: &device::Device) { compressed_file, ) .unwrap(); + println!( + "Savestate created at {}", + device.ui.storage.paths.savestate_file_path.display() + ); } pub fn load_savestate(device: &mut device::Device) { @@ -190,6 +194,10 @@ pub fn load_savestate(device: &mut device::Device) { ui::audio::close(&mut device.ui); ui::audio::init(&mut device.ui, device.ai.freq); ui::video::load_state(device, rdp_state.as_ptr()); + println!( + "Savestate loaded from {}", + device.ui.storage.paths.savestate_file_path.display() + ); } else { println!("Failed to load savestate"); } From 6e9b8ae126792ac1416f9918d6e69e289d7e1523 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 26 Jun 2025 11:44:56 +0200 Subject: [PATCH 0469/1117] Don't enable VRU during netplay (#445) --- src/device.rs | 2 +- src/device/pif.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/device.rs b/src/device.rs index cb839fb..e2466ae 100644 --- a/src/device.rs +++ b/src/device.rs @@ -61,7 +61,7 @@ pub fn run_game(device: &mut Device, rom_contents: Vec, fullscreen: bool, ov mi::init(device); pif::init(device); - if device.ui.config.input.emulate_vru { + if device.ui.config.input.emulate_vru && device.netplay.is_none() { controller::vru::init(device); } memory::init(device); diff --git a/src/device/pif.rs b/src/device/pif.rs index eaf6e2b..2881b57 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -226,7 +226,7 @@ pub fn connect_pif_channels(device: &mut device::Device) { device.pif.channels[i].process = Some(device::controller::process); } } - if device.ui.config.input.emulate_vru { + if device.ui.config.input.emulate_vru && device.netplay.is_none() { device.pif.channels[3].process = Some(device::controller::vru::process); } device.pif.channels[4].process = Some(device::cart::process) @@ -280,7 +280,7 @@ pub fn init(device: &mut device::Device) { device.pif.channels[i].pak_handler = Some(default_handler); } } - if device.ui.config.input.emulate_vru { + if device.ui.config.input.emulate_vru && device.netplay.is_none() { device.pif.channels[3].pak_handler = None; } } From 3da98c58c5bbae31a4632b2b67233c8523fb0b0d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 26 Jun 2025 20:36:10 +0200 Subject: [PATCH 0470/1117] use rust 1.88 (#447) * Use Rust 1.88 * add win aarch64 (commented out) * Clippy fixes --- .github/workflows/build.yml | 8 +++++-- Cargo.toml | 2 +- build.rs | 2 +- rust-toolchain.toml | 2 +- src/device/cart/sc64.rs | 2 +- src/device/cart/sram.rs | 2 +- src/device/controller.rs | 10 ++++----- src/device/controller/gbcart.rs | 12 +++++------ src/device/controller/vru.rs | 6 +++--- src/device/vi.rs | 8 +++---- src/main.rs | 2 +- src/savestates.rs | 10 ++++----- src/ui.rs | 2 +- src/ui/config.rs | 4 ++-- src/ui/gui.rs | 7 +++--- src/ui/input.rs | 4 ++-- src/ui/storage.rs | 38 +++++++++++++++------------------ 17 files changed, 59 insertions(+), 62 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 610ad8b..257e76d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -56,13 +56,17 @@ jobs: path: output/gopher64-${{ matrix.arch }} build-windows: - runs-on: windows-2025 + runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: - - target: x86_64-pc-windows-msvc + - os: windows-2025 + target: x86_64-pc-windows-msvc arch: windows-x86_64 + #- os: windows-11-arm + # target: aarch64-pc-windows-msvc + # arch: windows-aarch64 steps: - uses: actions/checkout@v4 with: diff --git a/Cargo.toml b/Cargo.toml index 19c4898..f05a233 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "gopher64" version = "1.0.18" edition = "2024" -rust-version = "1.87" +rust-version = "1.88" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/build.rs b/build.rs index 20aff24..1d68a70 100644 --- a/build.rs +++ b/build.rs @@ -180,7 +180,7 @@ fn main() { .unwrap(); let git_hash = String::from_utf8(git_output.stdout).unwrap(); - println!("cargo:rustc-env=GIT_HASH={}", git_hash); + println!("cargo:rustc-env=GIT_HASH={git_hash}"); println!("cargo:rustc-env=N64_STACK_SIZE={}", 8 * 1024 * 1024); } diff --git a/rust-toolchain.toml b/rust-toolchain.toml index b8889a3..e88baf1 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.87.0" +channel = "1.88.0" diff --git a/src/device/cart/sc64.rs b/src/device/cart/sc64.rs index ba4e8cd..c6fde8f 100644 --- a/src/device/cart/sc64.rs +++ b/src/device/cart/sc64.rs @@ -51,7 +51,7 @@ pub fn read_regs( match reg as u32 { SC64_SCR_REG | SC64_DATA0_REG | SC64_DATA1_REG => device.cart.sc64.regs[reg as usize], SC64_IDENTIFIER_REG => 0x53437632, - _ => panic!("unknown read reg {} address {:#x}", reg, address), + _ => panic!("unknown read reg {reg} address {address:#x}"), } } diff --git a/src/device/cart/sram.rs b/src/device/cart/sram.rs index 57cc73a..4806f9e 100644 --- a/src/device/cart/sram.rs +++ b/src/device/cart/sram.rs @@ -66,7 +66,7 @@ fn read_mem_flash(device: &device::Device, address: u64) -> u32 { { /* flashram MMIO read are not supported except for the "dummy" read @0x0000 done before DMA. * returns a "dummy" value. */ - return 0; + 0 } else { /* other accesses are not implemented */ panic!("unknown flashram read") diff --git a/src/device/controller.rs b/src/device/controller.rs index c4ceb64..143fcd5 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -96,7 +96,7 @@ pub fn process(device: &mut device::Device, channel: usize) { device.pif.channels[channel].rx_buf.unwrap(), channel, ), - _ => println!("unknown controller command {}", cmd), + _ => println!("unknown controller command {cmd}"), } } @@ -111,8 +111,8 @@ fn pak_read_block( ((device.pif.ram[addr_acrc] as u16) << 8) | (device.pif.ram[addr_acrc + 1] & 0xe0) as u16; let handler = device.pif.channels[channel].pak_handler; - if handler.is_some() { - (handler.unwrap().read)(device, channel, address, data, PAK_CHUNK_SIZE); + if let Some(handler) = handler { + (handler.read)(device, channel, address, data, PAK_CHUNK_SIZE); device.pif.ram[dcrc] = data_crc(device, data, PAK_CHUNK_SIZE) } else { device.pif.ram[dcrc] = !data_crc(device, data, PAK_CHUNK_SIZE) @@ -130,8 +130,8 @@ fn pak_write_block( ((device.pif.ram[addr_acrc] as u16) << 8) | (device.pif.ram[addr_acrc + 1] & 0xe0) as u16; let handler = device.pif.channels[channel].pak_handler; - if handler.is_some() { - (handler.unwrap().write)(device, channel, address, data, PAK_CHUNK_SIZE); + if let Some(handler) = handler { + (handler.write)(device, channel, address, data, PAK_CHUNK_SIZE); device.pif.ram[dcrc] = data_crc(device, data, PAK_CHUNK_SIZE) } else { device.pif.ram[dcrc] = !data_crc(device, data, PAK_CHUNK_SIZE) diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index 2b67dc0..107ec1b 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -155,7 +155,7 @@ fn write_mbc3( } } } else { - panic!("Unsupported write address {:x}", address); + panic!("Unsupported write address {address:x}"); } } @@ -208,7 +208,7 @@ fn read_mbc3( } } } else { - panic!("Unsupported read address {:x}", address); + panic!("Unsupported read address {address:x}"); } } @@ -231,7 +231,7 @@ fn write_mbc5( } else if address < 0x6000 { cart.ram_bank = (value & 0xf) as u16; } else if address < 0xa000 { - println!("Unknown MBC5 write address {:x}", address); + println!("Unknown MBC5 write address {address:x}"); } else if (0xa000..0xc000).contains(&address) { if !cart.ram_enabled { return; @@ -241,7 +241,7 @@ fn write_mbc5( cart.ram[banked_address as usize..banked_address as usize + size] .copy_from_slice(&pif_ram[data..data + size]); } else { - panic!("Unsupported write address {:x}", address); + panic!("Unsupported write address {address:x}"); } } @@ -272,7 +272,7 @@ fn read_mbc5( pif_ram[data..data + size] .copy_from_slice(&cart.ram[banked_address as usize..banked_address as usize + size]); } else { - panic!("Unsupported read address {:x}", address); + panic!("Unsupported read address {address:x}"); } } @@ -323,6 +323,6 @@ pub fn get_cart_type(data: u8) -> CartType { 0x10 => CartType::MBC3RamBattRtc, 0x13 => CartType::MBC3RamBatt, 0x1b => CartType::MBC5RamBatt, - _ => panic!("Unsupported cart type {:x}", data), + _ => panic!("Unsupported cart type {data:x}"), } } diff --git a/src/device/controller/vru.rs b/src/device/controller/vru.rs index 2f7f0f5..338ce49 100644 --- a/src/device/controller/vru.rs +++ b/src/device/controller/vru.rs @@ -126,7 +126,7 @@ pub fn process(device: &mut device::Device, channel: usize) { let (res, _enc, errors) = encoding_rs::SHIFT_JIS.decode(&data); if errors { - panic!("Failed to decode Japanese word {:X?}", data); + panic!("Failed to decode Japanese word {data:X?}"); } else { device.vru.words.push(res.to_string()); } @@ -144,7 +144,7 @@ pub fn process(device: &mut device::Device, channel: usize) { if let Some(result) = word { device.vru.words.push(result.clone()); } else { - panic!("Unknown VRU word {}", data); + panic!("Unknown VRU word {data}"); } } } else { @@ -249,7 +249,7 @@ pub fn process(device: &mut device::Device, channel: usize) { } device.vru.status = 0; /* status is always set to 0 after a write */ } - _ => panic!("unknown VRU command {}", cmd), + _ => panic!("unknown VRU command {cmd}"), } } diff --git a/src/device/vi.rs b/src/device/vi.rs index 1693e03..232613f 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -72,10 +72,9 @@ fn set_vertical_interrupt(device: &mut device::Device) { fn set_current_line(device: &mut device::Device) { let delay = device.vi.delay; let next_vi = device::events::get_event(device, device::events::EVENT_TYPE_VI); - if next_vi.is_some() { + if let Some(next_vi) = next_vi { device.vi.regs[VI_CURRENT_REG as usize] = ((delay - - (next_vi.unwrap().count - - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize])) + - (next_vi.count - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize])) / device.vi.count_per_scanline) as u32; @@ -178,8 +177,7 @@ pub fn init(device: &mut device::Device) { fn speed_limiter(device: &mut device::Device) { let result = device.vi.limiter.as_ref().unwrap().check(); - if result.is_err() { - let outcome = result.unwrap_err(); + if let Err(outcome) = result { let dur = outcome.wait_time_from(governor::clock::DefaultClock::default().now()); spin_sleep::sleep(dur); if dur < device.vi.min_wait_time { diff --git a/src/main.rs b/src/main.rs index a8e2025..d7f5afc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -102,7 +102,7 @@ async fn main() { if args.list_controllers { let controllers = ui::input::get_controller_names(&ui); for (i, controller) in controllers.iter().enumerate() { - println!("Controller {}: {}", i, controller); + println!("Controller {i}: {controller}"); } return; } diff --git a/src/savestates.rs b/src/savestates.rs index c679eb8..a0b6398 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -12,7 +12,7 @@ impl<'de, const N: usize> Visitor<'de> for M128iArrayVisitor { type Value = [__m128i; N]; fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { - formatter.write_str(&format!("an array of {} 128-bit integers", N)) + formatter.write_str(&format!("an array of {N} 128-bit integers")) } fn visit_seq(self, mut seq: A) -> Result @@ -95,10 +95,10 @@ pub fn create_savestate(device: &device::Device) { pub fn load_savestate(device: &mut device::Device) { let savestate = std::fs::read(&device.ui.storage.paths.savestate_file_path); - if savestate.is_ok() { - let device_bytes = ui::storage::decompress_file(savestate.as_ref().unwrap(), "device"); - let save_bytes = ui::storage::decompress_file(savestate.as_ref().unwrap(), "saves"); - let rdp_state = ui::storage::decompress_file(savestate.as_ref().unwrap(), "rdp_state"); + if let Ok(savestate) = &savestate { + let device_bytes = ui::storage::decompress_file(savestate, "device"); + let save_bytes = ui::storage::decompress_file(savestate, "saves"); + let rdp_state = ui::storage::decompress_file(savestate, "rdp_state"); if let Ok(state) = postcard::from_bytes::(&device_bytes) { device.ui.storage.saves = postcard::from_bytes(&save_bytes).unwrap(); diff --git a/src/ui.rs b/src/ui.rs index 18d9870..9d799cb 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -66,7 +66,7 @@ pub fn sdl_init(flag: sdl3_sys::init::SDL_InitFlags) { let err = std::ffi::CStr::from_ptr(sdl3_sys::error::SDL_GetError()) .to_str() .unwrap(); - panic!("Could not initialize SDL subsystem: {}, {}", flag, err); + panic!("Could not initialize SDL subsystem: {flag}, {err}"); } } } diff --git a/src/ui/config.rs b/src/ui/config.rs index a789587..13b4f15 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -80,8 +80,8 @@ impl Config { let dirs = ui::get_dirs(); let file_path = dirs.config_dir.join("config.json"); let config_file = std::fs::read(file_path); - if config_file.is_ok() { - let result = serde_json::from_slice(config_file.unwrap().as_ref()); + if let Ok(config_file) = config_file { + let result = serde_json::from_slice(config_file.as_ref()); if let Ok(result) = result { return result; } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 599e689..b5e5be3 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -457,11 +457,10 @@ fn open_rom(app: &AppWindow) { for i in 0..4 { if let (Some(gb_rom), Some(gb_ram)) = (select_gb_rom[i].as_mut(), select_gb_ram[i].as_mut()) + && let (Some(gb_rom), Some(gb_ram)) = (gb_rom.await, gb_ram.await) { - if let (Some(gb_rom), Some(gb_ram)) = (gb_rom.await, gb_ram.await) { - gb_rom_path[i] = Some(gb_rom.path().to_path_buf()); - gb_ram_path[i] = Some(gb_ram.path().to_path_buf()); - } + gb_rom_path[i] = Some(gb_rom.path().to_path_buf()); + gb_ram_path[i] = Some(gb_ram.path().to_path_buf()); } } diff --git a/src/ui/input.rs b/src/ui/input.rs index ba0f56a..a42d78a 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -917,7 +917,7 @@ pub fn init(ui: &mut ui::Ui) { if !profile.dinput { let gamepad = unsafe { sdl3_sys::gamepad::SDL_OpenGamepad(joystick_id) }; if gamepad.is_null() { - println!("could not connect gamepad: {}", joystick_id) + println!("could not connect gamepad: {joystick_id}") } else { ui.input.controllers[i].game_controller = gamepad; let properties = @@ -936,7 +936,7 @@ pub fn init(ui: &mut ui::Ui) { } else { let joystick = unsafe { sdl3_sys::joystick::SDL_OpenJoystick(joystick_id) }; if joystick.is_null() { - println!("could not connect joystick: {}", joystick_id) + println!("could not connect joystick: {joystick_id}") } else { ui.input.controllers[i].joystick = joystick; let properties = diff --git a/src/ui/storage.rs b/src/ui/storage.rs index b600c5b..8e004b1 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -57,10 +57,10 @@ fn get_save_type(rom: &[u8], game_id: &str) -> Vec { 1 => return vec![SaveTypes::Eeprom4k], 2 => return vec![SaveTypes::Eeprom16k], 3 => return vec![SaveTypes::Sram], - 4 => panic!("Unsupported save type: {}", save_type), + 4 => panic!("Unsupported save type: {save_type}"), 5 => return vec![SaveTypes::Flash], - 6 => panic!("Unsupported save type: {}", save_type), - _ => panic!("Unknown save type: {}", save_type), + 6 => panic!("Unsupported save type: {save_type}"), + _ => panic!("Unknown save type: {save_type}"), } } match game_id { @@ -123,12 +123,9 @@ fn get_save_type(rom: &[u8], game_id: &str) -> Vec { pub fn get_game_name(rom: &[u8]) -> String { let mut game_name = "".to_owned(); let header_value = std::str::from_utf8(&rom[0x20..0x34]); - if header_value.is_ok() { + if let Ok(header_value) = header_value { let re = regex::Regex::new(r"[^a-zA-Z0-9_ -]").unwrap(); - game_name = re - .replace_all(header_value.unwrap(), "") - .trim() - .replace('\0', ""); + game_name = re.replace_all(header_value, "").trim().replace('\0', ""); } game_name } @@ -197,29 +194,28 @@ pub fn init(ui: &mut ui::Ui, rom: &[u8]) { pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { if netplay.is_none() || netplay.as_ref().unwrap().player_number == 0 { let eep = std::fs::read(&ui.storage.paths.eep_file_path); - if eep.is_ok() { - ui.storage.saves.eeprom.data = eep.unwrap(); + if let Ok(eep) = eep { + ui.storage.saves.eeprom.data = eep; } let sra = std::fs::read(&ui.storage.paths.sra_file_path); - if sra.is_ok() { - ui.storage.saves.sram.data = sra.unwrap(); + if let Ok(sra) = sra { + ui.storage.saves.sram.data = sra; } let fla = std::fs::read(&ui.storage.paths.fla_file_path); - if fla.is_ok() { - ui.storage.saves.flash.data = fla.unwrap(); + if let Ok(fla) = fla { + ui.storage.saves.flash.data = fla; } let mempak = std::fs::read(&ui.storage.paths.pak_file_path); - if mempak.is_ok() { - ui.storage.saves.mempak.data = mempak.unwrap(); + if let Ok(mempak) = mempak { + ui.storage.saves.mempak.data = mempak; } let sdcard = std::fs::read(&ui.storage.paths.sdcard_file_path); - if sdcard.is_ok() { - ui.storage.saves.sdcard.data = sdcard.unwrap(); + if let Ok(sdcard) = sdcard { + ui.storage.saves.sdcard.data = sdcard; } let romsave = std::fs::read(&ui.storage.paths.romsave_file_path); - if romsave.is_ok() { - ui.storage.saves.romsave.data = - postcard::from_bytes(romsave.unwrap().as_ref()).unwrap(); + if let Ok(romsave) = romsave { + ui.storage.saves.romsave.data = postcard::from_bytes(romsave.as_ref()).unwrap(); } } From 30eee885e4a32d2b8b3c6a1108484319999258f4 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 26 Jun 2025 20:58:41 +0200 Subject: [PATCH 0471/1117] Update to 1.0.19 (#448) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9ef61f7..a29c402 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1932,7 +1932,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.0.18" +version = "1.0.19" dependencies = [ "ab_glyph", "bindgen 0.72.0", diff --git a/Cargo.toml b/Cargo.toml index f05a233..8d6fc5b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.18" +version = "1.0.19" edition = "2024" rust-version = "1.88" From f389be07737bb5df9fa329cf3cddf7b0c8fe40c8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 26 Jun 2025 21:04:54 +0200 Subject: [PATCH 0472/1117] Fix netplay server url (#449) --- src/ui/netplay.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 01acb8f..2698250 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -112,7 +112,7 @@ impl NetplayPages for NetplayJoin { } fn populate_server_names(weak: slint::Weak) { - let task = reqwest::get("https://m64p.s3.amazonaws.com/serverstest.json"); + let task = reqwest::get("https://m64p.s3.amazonaws.com/servers.json"); tokio::spawn(async move { let mut local_servers: Vec<(String, String)> = vec![]; From baa6a6c63563a8e0b429a55d3cd652c769b35926 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 27 Jun 2025 10:15:25 +0200 Subject: [PATCH 0473/1117] Update download links --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9e54b8a..b4c777c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ # gopher64 ## download -https://github.com/gopher64/gopher64/releases +Windows: https://github.com/gopher64/gopher64/releases/latest/download/gopher64-windows-x86_64.exe + +Linux: https://github.com/gopher64/gopher64/releases/latest/download/gopher64-linux-x86_64 ## wiki From 5d8ac37a0f62586b03699d59be7a119a311fc84e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 27 Jun 2025 13:09:22 +0200 Subject: [PATCH 0474/1117] Add new version button to main screen (#450) --- src/ui/gui/about_page.slint | 25 +++++++++++++++++-------- src/ui/gui/appwindow.slint | 3 +++ src/ui/gui/localgame_page.slint | 8 ++++++++ 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/ui/gui/about_page.slint b/src/ui/gui/about_page.slint index 990e348..85aff1e 100644 --- a/src/ui/gui/about_page.slint +++ b/src/ui/gui/about_page.slint @@ -9,6 +9,20 @@ export global AboutData { in property has_update; } +export component NewVersionButton { + callback newversion_button_clicked; + HorizontalBox { + alignment: center; + Button { + text: @tr("New version available! Click here to download"); + primary: true; + clicked => { + newversion_button_clicked(); + } + } + } +} + export component About inherits Page { callback wiki_button_clicked; callback discord_button_clicked; @@ -44,14 +58,9 @@ export component About inherits Page { } } - if AboutData.has_update:HorizontalBox { - alignment: center; - Button { - text: @tr("New version available! Click to download"); - primary: true; - clicked => { - newversion_button_clicked(); - } + if AboutData.has_update:NewVersionButton { + newversion_button_clicked => { + newversion_button_clicked(); } } } diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 7719cd3..3d4a574 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -64,6 +64,9 @@ export component AppWindow inherits Window { saves_folder_button_clicked => { saves_folder_button_clicked(); } + newversion_button_clicked => { + newversion_button_clicked(); + } } if(side-bar.current-item == 1): ControllerConfig { input_profile_button_clicked => { diff --git a/src/ui/gui/localgame_page.slint b/src/ui/gui/localgame_page.slint index 3d253eb..bf8a9c5 100644 --- a/src/ui/gui/localgame_page.slint +++ b/src/ui/gui/localgame_page.slint @@ -3,6 +3,7 @@ import { Button, HorizontalBox, VerticalBox } from "std-widgets.slint"; import { Page } from "page.slint"; +import { AboutData, NewVersionButton } from "about_page.slint"; export global State { in-out property game_running; @@ -11,6 +12,7 @@ export global State { export component LocalGame inherits Page { callback open_rom_button_clicked; callback saves_folder_button_clicked; + callback newversion_button_clicked; title: @tr("Local Game"); VerticalBox { @@ -35,5 +37,11 @@ export component LocalGame inherits Page { } } } + + if AboutData.has_update:NewVersionButton { + newversion_button_clicked => { + newversion_button_clicked(); + } + } } } From 3183a5eb0b71e7c2b5290f160a19da958a62af46 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 28 Jun 2025 10:43:09 +0200 Subject: [PATCH 0475/1117] add some more about buttons (#451) --- src/ui/gui.rs | 9 +++++++++ src/ui/gui/about_page.slint | 30 ++++++++++++++++++++++++++++++ src/ui/gui/appwindow.slint | 12 ++++++++++++ 3 files changed, 51 insertions(+) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index b5e5be3..dc5f300 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -282,6 +282,15 @@ fn about_window(app: &AppWindow) { app.on_discord_button_clicked(move || { open::that_detached("https://discord.gg/9RGXq8W8JQ").unwrap(); }); + app.on_patreon_button_clicked(move || { + open::that_detached("https://patreon.com/loganmc10").unwrap(); + }); + app.on_github_sponsors_button_clicked(move || { + open::that_detached("https://github.com/sponsors/loganmc10").unwrap(); + }); + app.on_source_code_button_clicked(move || { + open::that_detached("https://github.com/gopher64/gopher64").unwrap(); + }); app.on_newversion_button_clicked(move || { open::that_detached("https://github.com/gopher64/gopher64/releases/latest").unwrap(); }); diff --git a/src/ui/gui/about_page.slint b/src/ui/gui/about_page.slint index 85aff1e..ebdb628 100644 --- a/src/ui/gui/about_page.slint +++ b/src/ui/gui/about_page.slint @@ -27,6 +27,9 @@ export component About inherits Page { callback wiki_button_clicked; callback discord_button_clicked; callback newversion_button_clicked; + callback patreon_button_clicked; + callback github_sponsors_button_clicked; + callback source_code_button_clicked; title: @tr("About"); VerticalBox { @@ -51,6 +54,33 @@ export component About inherits Page { } } + HorizontalBox { + alignment: center; + Button { + text: @tr("Source Code"); + clicked => { + source_code_button_clicked(); + } + } + } + + HorizontalBox { + alignment: center; + Button { + text: @tr("Donate (via Patreon)"); + clicked => { + patreon_button_clicked(); + } + } + + Button { + text: @tr("Donate (via GitHub)"); + clicked => { + github_sponsors_button_clicked(); + } + } + } + HorizontalBox { alignment: center; Text { diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 3d4a574..de64355 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -18,6 +18,9 @@ export component AppWindow inherits Window { callback wiki_button_clicked; callback discord_button_clicked; callback newversion_button_clicked; + callback patreon_button_clicked; + callback github_sponsors_button_clicked; + callback source_code_button_clicked; callback open_rom_button_clicked; callback saves_folder_button_clicked; callback input_profile_button_clicked; @@ -92,6 +95,15 @@ export component AppWindow inherits Window { newversion_button_clicked => { newversion_button_clicked(); } + patreon_button_clicked => { + patreon_button_clicked(); + } + github_sponsors_button_clicked => { + github_sponsors_button_clicked(); + } + source_code_button_clicked => { + source_code_button_clicked(); + } } } } From 11830b0222e34e851ef89efad5f8b1fcee476ec7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 28 Jun 2025 14:19:50 +0200 Subject: [PATCH 0476/1117] add button for netplay discord (#452) --- src/ui/gui.rs | 4 ++++ src/ui/gui/appwindow.slint | 4 ++++ src/ui/gui/netplay_page.slint | 11 +++++++++++ 3 files changed, 19 insertions(+) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index dc5f300..a4cad4d 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -87,6 +87,10 @@ fn netplay_window(app: &AppWindow, controller_paths: &[Option]) { }) .unwrap(); }); + + app.on_netplay_discord_button_clicked(move || { + open::that_detached("https://discord.gg/JyW6ZgBUyS").unwrap(); + }); } fn local_game_window(app: &AppWindow, controller_paths: &[Option]) { diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index de64355..e926d4b 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -26,6 +26,7 @@ export component AppWindow inherits Window { callback input_profile_button_clicked; callback create_session_button_clicked; callback join_session_button_clicked; + callback netplay_discord_button_clicked; in property version <=> AboutData.version; in property has_update <=> AboutData.has_update; in-out property integer_scaling <=> SettingsData.integer_scaling; @@ -83,6 +84,9 @@ export component AppWindow inherits Window { join_session_button_clicked => { join_session_button_clicked(); } + netplay_discord_button_clicked => { + netplay_discord_button_clicked(); + } } if(side-bar.current-item == 3): Settings { } if(side-bar.current-item == 4): About { diff --git a/src/ui/gui/netplay_page.slint b/src/ui/gui/netplay_page.slint index c8fa5c4..54ff8ae 100644 --- a/src/ui/gui/netplay_page.slint +++ b/src/ui/gui/netplay_page.slint @@ -36,6 +36,7 @@ export component NetplayDialog inherits Dialog { export component Netplay inherits Page { callback create_session_button_clicked; callback join_session_button_clicked; + callback netplay_discord_button_clicked; title: @tr("Netplay"); VerticalBox { @@ -59,5 +60,15 @@ export component Netplay inherits Page { } } } + + HorizontalBox { + alignment: center; + Button { + text: @tr("Netplay Discord Channel"); + clicked => { + netplay_discord_button_clicked(); + } + } + } } } From 25aaa985f143fa6dcfc3c8a5ea4114b104ea4564 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 28 Jun 2025 16:50:59 +0200 Subject: [PATCH 0477/1117] netplay feedback button (#454) --- src/ui/gui.rs | 3 +++ src/ui/gui/about_page.slint | 1 + src/ui/gui/appwindow.slint | 4 ++++ src/ui/gui/localgame_page.slint | 1 + src/ui/gui/netplay_page.slint | 12 ++++++++++++ 5 files changed, 21 insertions(+) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index a4cad4d..0be8910 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -91,6 +91,9 @@ fn netplay_window(app: &AppWindow, controller_paths: &[Option]) { app.on_netplay_discord_button_clicked(move || { open::that_detached("https://discord.gg/JyW6ZgBUyS").unwrap(); }); + app.on_netplay_feedback_button_clicked(move || { + open::that_detached("https://github.com/gopher64/gopher64/discussions/453").unwrap(); + }); } fn local_game_window(app: &AppWindow, controller_paths: &[Option]) { diff --git a/src/ui/gui/about_page.slint b/src/ui/gui/about_page.slint index ebdb628..79db3bc 100644 --- a/src/ui/gui/about_page.slint +++ b/src/ui/gui/about_page.slint @@ -93,5 +93,6 @@ export component About inherits Page { newversion_button_clicked(); } } + Rectangle { } } } diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index e926d4b..feaa4dc 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -27,6 +27,7 @@ export component AppWindow inherits Window { callback create_session_button_clicked; callback join_session_button_clicked; callback netplay_discord_button_clicked; + callback netplay_feedback_button_clicked; in property version <=> AboutData.version; in property has_update <=> AboutData.has_update; in-out property integer_scaling <=> SettingsData.integer_scaling; @@ -87,6 +88,9 @@ export component AppWindow inherits Window { netplay_discord_button_clicked => { netplay_discord_button_clicked(); } + netplay_feedback_button_clicked => { + netplay_feedback_button_clicked(); + } } if(side-bar.current-item == 3): Settings { } if(side-bar.current-item == 4): About { diff --git a/src/ui/gui/localgame_page.slint b/src/ui/gui/localgame_page.slint index bf8a9c5..556fb1f 100644 --- a/src/ui/gui/localgame_page.slint +++ b/src/ui/gui/localgame_page.slint @@ -43,5 +43,6 @@ export component LocalGame inherits Page { newversion_button_clicked(); } } + Rectangle { } } } diff --git a/src/ui/gui/netplay_page.slint b/src/ui/gui/netplay_page.slint index 54ff8ae..6a06efb 100644 --- a/src/ui/gui/netplay_page.slint +++ b/src/ui/gui/netplay_page.slint @@ -37,6 +37,7 @@ export component Netplay inherits Page { callback create_session_button_clicked; callback join_session_button_clicked; callback netplay_discord_button_clicked; + callback netplay_feedback_button_clicked; title: @tr("Netplay"); VerticalBox { @@ -61,6 +62,10 @@ export component Netplay inherits Page { } } + Rectangle { + height: 20px; + } + HorizontalBox { alignment: center; Button { @@ -69,6 +74,13 @@ export component Netplay inherits Page { netplay_discord_button_clicked(); } } + + Button { + text: @tr("Provide Feedback"); + clicked => { + netplay_feedback_button_clicked(); + } + } } } } From 1d331e73fb3b88a1e0adf2527886c78e5dc7774c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 28 Jun 2025 18:51:12 +0200 Subject: [PATCH 0478/1117] cleanup aarch64 flags (#455) --- build.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/build.rs b/build.rs index 1d68a70..80dca07 100644 --- a/build.rs +++ b/build.rs @@ -73,7 +73,15 @@ fn main() { panic!("unknown env") } } else if arch == "aarch64" { - panic!("unsupported platform") + if env == "msvc" { + build.flag("/arch:armv8.2"); + simd_build.flag("/arch:armv8.2"); + } else if env == "gnu" { + build.flag("-march=armv8.2-a"); + simd_build.flag("-march=armv8.2-a"); + } else { + panic!("unknown env") + } } else { panic!("unknown arch") } @@ -89,8 +97,6 @@ fn main() { } else if arch == "aarch64" { build.flag("-march=armv8.2-a"); simd_build.flag("-march=armv8.2-a"); - simd_build.flag("-DSSE2NEON_SUPPRESS_WARNINGS"); - simd_build.file("src/compat/aarch64.c"); } else { panic!("unknown arch") } @@ -169,6 +175,8 @@ fn main() { .write_to_file(out_path.join("simd_bindings.rs")) .expect("Couldn't write bindings!"); + simd_build.flag("-DSSE2NEON_SUPPRESS_WARNINGS"); + simd_build.file("src/compat/aarch64.c"); simd_build.file(std::env::temp_dir().join("bindgen").join("extern.c")); simd_build.include("."); simd_build.compile("simd"); From ead561933b72bd575757825d75fe4a2c2a3b5117 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 30 Jun 2025 10:55:34 +0200 Subject: [PATCH 0479/1117] Don't adjust variable limit after toggle (#458) * Don't adjust variable limit after toggle * more --- src/device/vi.rs | 30 ++++++++++++++++++------------ src/ui/video.rs | 9 +++++++-- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index 232613f..881b8fa 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -134,16 +134,19 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } pub fn vertical_interrupt_event(device: &mut device::Device) { - ui::video::check_callback(device); + let mut speed_limiter_toggled = ui::video::check_callback(device); if device.netplay.is_some() { netplay::send_sync_check(device); - device.vi.enable_speed_limiter = !device.netplay.as_ref().unwrap().fast_forward; + if device.vi.enable_speed_limiter == device.netplay.as_ref().unwrap().fast_forward { + speed_limiter_toggled = true; + device.vi.enable_speed_limiter = !device.netplay.as_ref().unwrap().fast_forward; + } } device.vi.vi_counter += 1; if device.vi.vi_counter % device.vi.limit_freq == 0 && device.vi.enable_speed_limiter { - speed_limiter(device); + speed_limiter(device, speed_limiter_toggled); } ui::video::update_screen(); @@ -175,7 +178,7 @@ pub fn init(device: &mut device::Device) { } } -fn speed_limiter(device: &mut device::Device) { +fn speed_limiter(device: &mut device::Device, speed_limiter_toggled: bool) { let result = device.vi.limiter.as_ref().unwrap().check(); if let Err(outcome) = result { let dur = outcome.wait_time_from(governor::clock::DefaultClock::default().now()); @@ -194,14 +197,17 @@ fn speed_limiter(device: &mut device::Device) { .as_secs_f64() > 1.0 { - if device.vi.min_wait_time.as_secs_f64() == 0.0 && device.vi.limit_freq < MAX_LIMIT_FREQ { - device.vi.limit_freq += 1; - create_limiter(device); - } else if device.vi.min_wait_time.as_secs_f64() > device.vi.frame_time - && device.vi.limit_freq > 1 - { - device.vi.limit_freq -= 1; - create_limiter(device); + if !speed_limiter_toggled { + if device.vi.min_wait_time.as_secs_f64() == 0.0 && device.vi.limit_freq < MAX_LIMIT_FREQ + { + device.vi.limit_freq += 1; + create_limiter(device); + } else if device.vi.min_wait_time.as_secs_f64() > device.vi.frame_time + && device.vi.limit_freq > 1 + { + device.vi.limit_freq -= 1; + create_limiter(device); + } } //println!("limit freq: {}", device.vi.limit_freq); diff --git a/src/ui/video.rs b/src/ui/video.rs index fb71c7c..33cec88 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -114,7 +114,8 @@ pub fn load_state(device: &mut device::Device, rdp_state: *const u8) { } } -pub fn check_callback(device: &mut device::Device) { +pub fn check_callback(device: &mut device::Device) -> bool { + let mut speed_limiter_toggled = false; let callback = unsafe { rdp_check_callback() }; device.cpu.running = callback.emu_running; if device.netplay.is_none() { @@ -123,7 +124,10 @@ pub fn check_callback(device: &mut device::Device) { } else if callback.load_state { device.load_state = true; } - device.vi.enable_speed_limiter = callback.enable_speedlimiter; + if device.vi.enable_speed_limiter != callback.enable_speedlimiter { + speed_limiter_toggled = true; + device.vi.enable_speed_limiter = callback.enable_speedlimiter; + } } if callback.lower_volume { @@ -131,6 +135,7 @@ pub fn check_callback(device: &mut device::Device) { } else if callback.raise_volume { ui::audio::raise_audio_volume(&mut device.ui); } + speed_limiter_toggled } pub fn set_register(reg: u32, value: u32) { From 7a5971441751939f3de840c94537885ebb555dcc Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 2 Jul 2025 09:59:01 +0200 Subject: [PATCH 0480/1117] Make expansion pak optional (#463) * Make expansion pak optional * more --- src/device.rs | 9 +++-- src/device/cart/rom.rs | 2 +- src/main.rs | 11 +++++- src/ui/config.rs | 6 ++- src/ui/gui.rs | 29 +++++++++++---- src/ui/gui/appwindow.slint | 1 + src/ui/gui/settings_page.slint | 12 ++++++ src/ui/netplay.rs | 68 ++++++++++++++++++++++++---------- 8 files changed, 105 insertions(+), 33 deletions(-) diff --git a/src/device.rs b/src/device.rs index e2466ae..c838b50 100644 --- a/src/device.rs +++ b/src/device.rs @@ -44,9 +44,12 @@ pub mod tlb; pub mod unmapped; pub mod vi; -pub fn run_game(device: &mut Device, rom_contents: Vec, fullscreen: bool, overclock: bool) { - device.ui.video.fullscreen = fullscreen; - device.cpu.overclock = overclock; +pub fn run_game(device: &mut Device, rom_contents: Vec, game_settings: ui::gui::GameSettings) { + device.ui.video.fullscreen = game_settings.fullscreen; + device.cpu.overclock = game_settings.overclock; + if game_settings.disable_expansion_pak { + device.rdram.size = 0x400000; + } init_rng(device); diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 86178d8..a158f23 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -111,7 +111,7 @@ pub fn dma_write( cart_addr &= CART_MASK as u32; let mut i = dram_addr; let mut j = cart_addr; - while i < dram_addr + length { + while i < dram_addr + length && i < device.rdram.size { if let Some(value) = device.ui.storage.saves.romsave.data.get(&j) { device.rdram.mem[i as usize ^ device.byte_swap] = *value; } else { diff --git a/src/main.rs b/src/main.rs index d7f5afc..2aa26b7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -147,7 +147,16 @@ async fn main() { .spawn(move || { let mut device = device::Device::new(); let overclock = device.ui.config.emulation.overclock; - device::run_game(&mut device, rom_contents, args.fullscreen, overclock); + let disable_expansion_pak = device.ui.config.emulation.disable_expansion_pak; + device::run_game( + &mut device, + rom_contents, + ui::gui::GameSettings { + fullscreen: args.fullscreen, + overclock, + disable_expansion_pak, + }, + ); }) .unwrap(); diff --git a/src/ui/config.rs b/src/ui/config.rs index 13b4f15..576c1bd 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -53,6 +53,7 @@ pub struct Video { #[derive(serde::Serialize, serde::Deserialize)] pub struct Emulation { pub overclock: bool, + pub disable_expansion_pak: bool, } #[derive(serde::Serialize, serde::Deserialize)] @@ -109,7 +110,10 @@ impl Config { widescreen: false, crt: false, }, - emulation: Emulation { overclock: false }, + emulation: Emulation { + overclock: false, + disable_expansion_pak: false, + }, } } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 0be8910..9b35dd0 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -25,6 +25,13 @@ pub struct VruChannel { pub vru_word_receiver: Option>, } +#[derive(Copy, Clone)] +pub struct GameSettings { + pub fullscreen: bool, + pub overclock: bool, + pub disable_expansion_pak: bool, +} + fn check_latest_version(weak: slint::Weak) { let client = reqwest::Client::builder() .user_agent(env!("CARGO_PKG_NAME")) @@ -65,8 +72,11 @@ fn netplay_window(app: &AppWindow, controller_paths: &[Option]) { save_settings(&handle, &controller_paths); ui::netplay::setup_create_window( &create_window, - handle.get_overclock_n64_cpu(), - handle.get_fullscreen(), + GameSettings { + fullscreen: handle.get_fullscreen(), + overclock: handle.get_overclock_n64_cpu(), + disable_expansion_pak: handle.get_disable_expansion_pak(), + }, weak_app, ); }) @@ -129,6 +139,7 @@ fn settings_window(app: &AppWindow, config: &ui::config::Config) { app.set_widescreen(config.video.widescreen); app.set_apply_crt_shader(config.video.crt); app.set_overclock_n64_cpu(config.emulation.overclock); + app.set_disable_expansion_pak(config.emulation.disable_expansion_pak); let combobox_value = match config.video.upscale { 1 => 0, 2 => 1, @@ -258,6 +269,7 @@ fn save_settings(app: &AppWindow, controller_paths: &[Option]) { config.video.widescreen = app.get_widescreen(); config.video.crt = app.get_apply_crt_shader(); config.emulation.overclock = app.get_overclock_n64_cpu(); + config.emulation.disable_expansion_pak = app.get_disable_expansion_pak(); let upscale_values = [1, 2, 4]; config.video.upscale = upscale_values[app.get_resolution() as usize]; @@ -371,8 +383,7 @@ fn setup_vru_word_watcher( pub fn run_rom( gb_paths: GbPaths, file_path: std::path::PathBuf, - fullscreen: bool, - overclock: bool, + game_settings: GameSettings, vru_channel: VruChannel, netplay: Option, weak: slint::Weak, @@ -406,7 +417,7 @@ pub fn run_rom( netplay_device.player_number, )); } - device::run_game(&mut device, rom_contents, fullscreen, overclock); + device::run_game(&mut device, rom_contents, game_settings); if device.netplay.is_some() { netplay::close(&mut device); } @@ -460,6 +471,7 @@ fn open_rom(app: &AppWindow) { let fullscreen = app.get_fullscreen(); let overclock = app.get_overclock_n64_cpu(); let emulate_vru = app.get_emulate_vru(); + let disable_expansion_pak = app.get_disable_expansion_pak(); if emulate_vru { setup_vru_word_watcher(app.as_weak(), vru_word_notifier, vru_window_receiver); @@ -486,8 +498,11 @@ fn open_rom(app: &AppWindow) { ram: gb_ram_path, }, file.path().to_path_buf(), - fullscreen, - overclock, + GameSettings { + fullscreen, + overclock, + disable_expansion_pak, + }, if emulate_vru { VruChannel { vru_window_notifier: Some(vru_window_notifier), diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index feaa4dc..cf26141 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -35,6 +35,7 @@ export component AppWindow inherits Window { in-out property widescreen <=> SettingsData.widescreen; in-out property apply_crt_shader <=> SettingsData.apply_crt_shader; in-out property overclock_n64_cpu <=> SettingsData.overclock_n64_cpu; + in-out property disable_expansion_pak <=> SettingsData.disable_expansion_pak; in-out property resolution <=> SettingsData.resolution; in-out property emulate_vru <=> ControllerData.emulate_vru; in-out property controller_enabled <=> ControllerData.controller_enabled; diff --git a/src/ui/gui/settings_page.slint b/src/ui/gui/settings_page.slint index 1807e82..49b091b 100644 --- a/src/ui/gui/settings_page.slint +++ b/src/ui/gui/settings_page.slint @@ -10,6 +10,7 @@ export global SettingsData { in-out property widescreen; in-out property apply_crt_shader; in-out property overclock_n64_cpu; + in-out property disable_expansion_pak; in-out property resolution; } @@ -90,5 +91,16 @@ export component Settings inherits Page { } } } + + HorizontalBox { + alignment: start; + CheckBox { + text: @tr("Disable Expansion Pak"); + checked: SettingsData.disable_expansion_pak; + toggled => { + SettingsData.disable_expansion_pak = self.checked; + } + } + } } } diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 2698250..db04f6e 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -2,10 +2,9 @@ use crate::device; use crate::ui; -use crate::ui::gui::AppWindow; use crate::ui::gui::{ - GbPaths, NetplayCreate, NetplayDevice, NetplayDialog, NetplayJoin, NetplayWait, VruChannel, - run_rom, + AppWindow, GameSettings, GbPaths, NetplayCreate, NetplayDevice, NetplayDialog, NetplayJoin, + NetplayWait, VruChannel, run_rom, }; use futures::{SinkExt, StreamExt}; use sha2::{Digest, Sha256}; @@ -236,8 +235,7 @@ fn update_ping( pub fn setup_create_window( create_window: &NetplayCreate, - overclock_setting: bool, - fullscreen: bool, + game_settings: GameSettings, weak_app: slint::Weak, ) { let (netplay_read_sender, netplay_read_receiver): ( @@ -279,8 +277,7 @@ pub fn setup_create_window( game_name.to_string(), game_hash.to_string(), password.to_string(), - overclock_setting, - fullscreen, + game_settings, weak_app.clone(), weak.clone(), ); @@ -452,8 +449,7 @@ fn create_session( game_name: String, game_hash: String, password: String, - overclock: bool, - fullscreen: bool, + game_settings: GameSettings, weak_app: slint::Weak, weak: slint::Weak, ) { @@ -461,7 +457,7 @@ fn create_session( let now_utc = chrono::Utc::now().timestamp_millis().to_string(); let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); let mut features = std::collections::HashMap::new(); - features.insert("overclock".to_string(), overclock.to_string()); + features.insert("overclock".to_string(), game_settings.overclock.to_string()); let create_room = NetplayMessage { message_type: "request_create_room".to_string(), @@ -498,7 +494,19 @@ fn create_session( if message.accept.unwrap() == 0 { weak.upgrade_in_event_loop(move |handle| { let session = message.room.as_ref().unwrap(); - let overclock = session.features.as_ref().unwrap().get("overclock").unwrap(); + let features_default = "false".to_string(); + let overclock = session + .features + .as_ref() + .unwrap() + .get("overclock") + .unwrap_or(&features_default); + let disable_expansion_pak = session + .features + .as_ref() + .unwrap() + .get("disable_expansion_pak") + .unwrap_or(&features_default); setup_wait_window( netplay_write_sender, netplay_read_receiver, @@ -508,8 +516,11 @@ fn create_session( message.player_name.as_ref().unwrap().into(), session.port.unwrap(), true, - fullscreen, - overclock == "true", + GameSettings { + fullscreen: game_settings.fullscreen, + overclock: overclock == "true", + disable_expansion_pak: disable_expansion_pak == "true", + }, handle.get_peer_addr(), weak_app, ); @@ -582,7 +593,19 @@ fn join_session( if message.accept.unwrap() == 0 { weak.upgrade_in_event_loop(move |handle| { let session = message.room.as_ref().unwrap(); - let overclock = session.features.as_ref().unwrap().get("overclock").unwrap(); + let features_default = "false".to_string(); + let overclock = session + .features + .as_ref() + .unwrap() + .get("overclock") + .unwrap_or(&features_default); + let disable_expansion_pak = session + .features + .as_ref() + .unwrap() + .get("disable_expansion_pak") + .unwrap_or(&features_default); setup_wait_window( netplay_write_sender, netplay_read_receiver, @@ -592,8 +615,11 @@ fn join_session( message.player_name.as_ref().unwrap().into(), session.port.unwrap(), false, - fullscreen, - overclock == "true", + GameSettings { + fullscreen, + overclock: overclock == "true", + disable_expansion_pak: disable_expansion_pak == "true", + }, handle.get_peer_addr(), weak_app, ); @@ -628,8 +654,7 @@ fn setup_wait_window( player_name: slint::SharedString, port: i32, can_start: bool, - fullscreen: bool, - overclock: bool, + game_settings: GameSettings, peer_addr: slint::SharedString, weak_app: slint::Weak, ) { @@ -809,8 +834,11 @@ fn setup_wait_window( ram: [None, None, None, None], }, handle.get_rom_path().as_str().into(), - fullscreen, - overclock, + GameSettings { + fullscreen: game_settings.fullscreen, + overclock: game_settings.overclock, + disable_expansion_pak: game_settings.disable_expansion_pak, + }, VruChannel { vru_window_notifier: None, vru_word_receiver: None, From dc1535ea04be1e38480a747579336605638e3ea1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 2 Jul 2025 14:25:03 +0200 Subject: [PATCH 0481/1117] better RAM access checks (#464) * better RAM access checks * more --- src/device/cart/rom.rs | 21 +++++++++--- src/device/cart/sc64.rs | 16 ++++++--- src/device/cart/sram.rs | 44 +++++++++++++++++------- src/device/pi.rs | 6 +++- src/device/rdram.rs | 67 ++++++++++++++++++++++++------------- src/device/rsp_interface.rs | 24 ++++++++----- src/device/si.rs | 15 +++++++-- src/ui/audio.rs | 8 ++--- 8 files changed, 140 insertions(+), 61 deletions(-) diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index a158f23..7841e6b 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -91,7 +91,11 @@ pub fn dma_read( for i in 0..length { device.ui.storage.saves.romsave.data.insert( cart_addr + i, - device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap], + *device + .rdram + .mem + .get((dram_addr + i) as usize ^ device.byte_swap) + .unwrap_or(&0), ); } device.ui.storage.saves.romsave.written = true; @@ -111,12 +115,19 @@ pub fn dma_write( cart_addr &= CART_MASK as u32; let mut i = dram_addr; let mut j = cart_addr; - while i < dram_addr + length && i < device.rdram.size { + while i < dram_addr + length { if let Some(value) = device.ui.storage.saves.romsave.data.get(&j) { - device.rdram.mem[i as usize ^ device.byte_swap] = *value; + *device + .rdram + .mem + .get_mut(i as usize ^ device.byte_swap) + .unwrap_or(&mut 0) = *value; } else { - device.rdram.mem[i as usize ^ device.byte_swap] = - *device.cart.rom.get(j as usize).unwrap_or(&0); + *device + .rdram + .mem + .get_mut(i as usize ^ device.byte_swap) + .unwrap_or(&mut 0) = *device.cart.rom.get(j as usize).unwrap_or(&0); } i += 1; j += 1; diff --git a/src/device/cart/sc64.rs b/src/device/cart/sc64.rs index c6fde8f..b50a033 100644 --- a/src/device/cart/sc64.rs +++ b/src/device/cart/sc64.rs @@ -308,8 +308,12 @@ pub fn dma_read( let mut i = dram_addr; let mut j = cart_addr; - while i < dram_addr + length && i < device.rdram.size { - buffer[j as usize] = device.rdram.mem[i as usize ^ device.byte_swap]; + while i < dram_addr + length { + buffer[j as usize] = *device + .rdram + .mem + .get(i as usize ^ device.byte_swap) + .unwrap_or(&0); i += 1; j += 1; } @@ -335,8 +339,12 @@ pub fn dma_write( let mut i = dram_addr; let mut j = cart_addr; - while i < dram_addr + length && i < device.rdram.size { - device.rdram.mem[i as usize ^ device.byte_swap] = buffer[j as usize]; + while i < dram_addr + length { + *device + .rdram + .mem + .get_mut(i as usize ^ device.byte_swap) + .unwrap_or(&mut 0) = buffer[j as usize]; i += 1; j += 1; } diff --git a/src/device/cart/sram.rs b/src/device/cart/sram.rs index 4806f9e..b839210 100644 --- a/src/device/cart/sram.rs +++ b/src/device/cart/sram.rs @@ -150,9 +150,12 @@ fn dma_read_sram(device: &mut device::Device, mut cart_addr: u32, mut dram_addr: format_sram(device); - while i < dram_addr + length && i < device.rdram.size { - device.ui.storage.saves.sram.data[j as usize] = - device.rdram.mem[i as usize ^ device.byte_swap]; + while i < dram_addr + length { + device.ui.storage.saves.sram.data[j as usize] = *device + .rdram + .mem + .get(i as usize ^ device.byte_swap) + .unwrap_or(&0); i += 1; j += 1; } @@ -169,8 +172,11 @@ fn dma_read_flash(device: &mut device::Device, cart_addr: u32, dram_addr: u32, l { /* load page buf using DMA */ for i in 0..length { - device.cart.flashram.page_buf[i as usize] = - device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap]; + device.cart.flashram.page_buf[i as usize] = *device + .rdram + .mem + .get((dram_addr + i) as usize ^ device.byte_swap) + .unwrap_or(&0); } } else { /* other accesses are not implemented */ @@ -206,9 +212,12 @@ fn dma_write_sram( format_sram(device); - while i < dram_addr + length && i < device.rdram.size { - device.rdram.mem[i as usize ^ device.byte_swap] = - device.ui.storage.saves.sram.data[j as usize]; + while i < dram_addr + length { + *device + .rdram + .mem + .get_mut(i as usize ^ device.byte_swap) + .unwrap_or(&mut 0) = device.ui.storage.saves.sram.data[j as usize]; i += 1; j += 1; } @@ -227,10 +236,18 @@ fn dma_write_flash( && device.cart.flashram.mode == FlashramMode::ReadSiliconId { /* read Silicon ID using DMA */ - device.rdram.mem[dram_addr as usize..dram_addr as usize + 4] + device + .rdram + .mem + .get_mut(dram_addr as usize..dram_addr as usize + 4) + .unwrap_or_default() .copy_from_slice(&device.cart.flashram.silicon_id[0].to_ne_bytes()); dram_addr += 4; - device.rdram.mem[dram_addr as usize..dram_addr as usize + 4] + device + .rdram + .mem + .get_mut(dram_addr as usize..dram_addr as usize + 4) + .unwrap_or_default() .copy_from_slice(&device.cart.flashram.silicon_id[1].to_ne_bytes()); } else if (cart_addr & 0x1ffff) < 0x10000 && device.cart.flashram.mode == FlashramMode::ReadArray @@ -250,8 +267,11 @@ fn dma_write_flash( /* do actual DMA */ for i in 0..length { - device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap] = - device.ui.storage.saves.flash.data[(cart_addr + i) as usize]; + *device + .rdram + .mem + .get_mut((dram_addr + i) as usize ^ device.byte_swap) + .unwrap_or(&mut 0) = device.ui.storage.saves.flash.data[(cart_addr + i) as usize]; } } else { /* other accesses are not implemented */ diff --git a/src/device/pi.rs b/src/device/pi.rs index 5319291..f18629c 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -221,7 +221,11 @@ fn unknown_dma_write( dram_addr &= device::rdram::RDRAM_MASK as u32; for i in 0..length { - device.rdram.mem[(dram_addr + i) as usize ^ device.byte_swap] = 0; + *device + .rdram + .mem + .get_mut((dram_addr + i) as usize ^ device.byte_swap) + .unwrap_or(&mut 0) = 0; } device::pi::calculate_cycles(device, 1, length) } diff --git a/src/device/rdram.rs b/src/device/rdram.rs index 6e3b20f..15eefcd 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -29,9 +29,13 @@ pub fn read_mem_fast( ) -> u32 { let masked_address = address as usize & RDRAM_MASK; u32::from_ne_bytes( - device.rdram.mem[masked_address..masked_address + 4] + device + .rdram + .mem + .get(masked_address..masked_address + 4) + .unwrap_or_default() .try_into() - .unwrap(), + .unwrap_or_default(), ) } @@ -45,28 +49,35 @@ pub fn read_mem( rdram_calculate_cycles(access_size as u64) / (access_size as u64 / 4), ); let masked_address = address as usize & RDRAM_MASK; - if address < device.rdram.size as u64 { - u32::from_ne_bytes( - device.rdram.mem[masked_address..masked_address + 4] - .try_into() - .unwrap(), - ) - } else { - 0 - } + + u32::from_ne_bytes( + device + .rdram + .mem + .get(masked_address..masked_address + 4) + .unwrap_or_default() + .try_into() + .unwrap_or_default(), + ) } pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { - if address < device.rdram.size as u64 { - let mut data = u32::from_ne_bytes( - device.rdram.mem[address as usize..(address + 4) as usize] - .try_into() - .unwrap(), - ); - device::memory::masked_write_32(&mut data, value, mask); - device.rdram.mem[address as usize..(address + 4) as usize] - .copy_from_slice(&data.to_ne_bytes()); - } + let mut data = u32::from_ne_bytes( + device + .rdram + .mem + .get(address as usize..(address + 4) as usize) + .unwrap_or_default() + .try_into() + .unwrap_or_default(), + ); + device::memory::masked_write_32(&mut data, value, mask); + device + .rdram + .mem + .get_mut(address as usize..(address + 4) as usize) + .unwrap_or_default() + .copy_from_slice(&data.to_ne_bytes()); } pub fn read_regs( @@ -103,9 +114,19 @@ pub fn init(device: &mut device::Device) { unsafe { Vec::from_raw_parts(ptr, device.rdram.size as usize, device.rdram.size as usize) }; // hack, skip RDRAM initialization - device.rdram.mem[0x318..0x318 + 4].copy_from_slice(&device.rdram.size.to_ne_bytes()); + device + .rdram + .mem + .get_mut(0x318..0x318 + 4) + .unwrap_or_default() + .copy_from_slice(&device.rdram.size.to_ne_bytes()); // hack, skip RDRAM initialization - device.rdram.mem[0x3f0..0x3f0 + 4].copy_from_slice(&device.rdram.size.to_ne_bytes()); + device + .rdram + .mem + .get_mut(0x3f0..0x3f0 + 4) + .unwrap_or_default() + .copy_from_slice(&device.rdram.size.to_ne_bytes()); device.ri.regs[device::ri::RI_MODE_REG as usize] = 0x0e; device.ri.regs[device::ri::RI_CONFIG_REG as usize] = 0x40; diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index 6c8ed69..5140c3a 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -157,7 +157,11 @@ fn do_dma(device: &mut device::Device, dma: RspDma) { .try_into() .unwrap(), ); - device.rdram.mem[dram_addr as usize..dram_addr as usize + 4] + device + .rdram + .mem + .get_mut(dram_addr as usize..dram_addr as usize + 4) + .unwrap_or_default() .copy_from_slice(&data.to_ne_bytes()); mem_addr += 4; dram_addr += 4; @@ -171,14 +175,16 @@ fn do_dma(device: &mut device::Device, dma: RspDma) { while j < count { let mut i = 0; while i < length { - let mut data = 0; - if dram_addr < device.rdram.size { - data = u32::from_ne_bytes( - device.rdram.mem[dram_addr as usize..dram_addr as usize + 4] - .try_into() - .unwrap(), - ); - } + let data = u32::from_ne_bytes( + device + .rdram + .mem + .get(dram_addr as usize..dram_addr as usize + 4) + .unwrap_or_default() + .try_into() + .unwrap_or_default(), + ); + if offset != 0 { // imem being updated device.rsp.cpu.instructions[((mem_addr & 0xFFF) / 4) as usize].func = diff --git a/src/device/si.rs b/src/device/si.rs index 41ae353..c05d065 100644 --- a/src/device/si.rs +++ b/src/device/si.rs @@ -86,9 +86,13 @@ fn copy_pif_rdram(device: &mut device::Device) { let mut i = 0; while i < device::pif::PIF_RAM_SIZE { let data = u32::from_ne_bytes( - device.rdram.mem[dram_addr + i..dram_addr + i + 4] + device + .rdram + .mem + .get(dram_addr + i..dram_addr + i + 4) + .unwrap_or_default() .try_into() - .unwrap(), + .unwrap_or_default(), ); device.pif.ram[i..i + 4].copy_from_slice(&data.to_be_bytes()); i += 4; @@ -97,7 +101,12 @@ fn copy_pif_rdram(device: &mut device::Device) { let mut i = 0; while i < device::pif::PIF_RAM_SIZE { let data = u32::from_be_bytes(device.pif.ram[i..i + 4].try_into().unwrap()); - device.rdram.mem[dram_addr + i..dram_addr + i + 4].copy_from_slice(&data.to_ne_bytes()); + device + .rdram + .mem + .get_mut(dram_addr + i..dram_addr + i + 4) + .unwrap_or_default() + .copy_from_slice(&data.to_ne_bytes()); i += 4; } } else { diff --git a/src/ui/audio.rs b/src/ui/audio.rs index dbfccf3..9c547ac 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -176,12 +176,12 @@ pub fn play_audio(device: &device::Device, dram_addr: usize, length: u64) { let mut i = 0; while i < length as usize / 2 { // Left channel - primary_buffer[i] = device.rdram.mem[dram_addr + (i * 2) + 2] as i16 - | ((device.rdram.mem[dram_addr + (i * 2) + 3] as i16) << 8); + primary_buffer[i] = *device.rdram.mem.get(dram_addr + (i * 2) + 2).unwrap_or(&0) as i16 + | ((*device.rdram.mem.get(dram_addr + (i * 2) + 3).unwrap_or(&0) as i16) << 8); // Right channel - primary_buffer[i + 1] = device.rdram.mem[dram_addr + (i * 2)] as i16 - | ((device.rdram.mem[dram_addr + (i * 2) + 1] as i16) << 8); + primary_buffer[i + 1] = *device.rdram.mem.get(dram_addr + (i * 2)).unwrap_or(&0) as i16 + | ((*device.rdram.mem.get(dram_addr + (i * 2) + 1).unwrap_or(&0) as i16) << 8); i += 2; } From 31b4e7944b24423939dcde409afc51c6c85b90cb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 2 Jul 2025 14:33:19 +0200 Subject: [PATCH 0482/1117] non-empty default value for ram (#465) --- src/device/cart/sram.rs | 4 ++-- src/device/rdram.rs | 6 +++--- src/device/rsp_interface.rs | 2 +- src/device/si.rs | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/device/cart/sram.rs b/src/device/cart/sram.rs index b839210..a58986b 100644 --- a/src/device/cart/sram.rs +++ b/src/device/cart/sram.rs @@ -240,14 +240,14 @@ fn dma_write_flash( .rdram .mem .get_mut(dram_addr as usize..dram_addr as usize + 4) - .unwrap_or_default() + .unwrap_or(&mut [0; 4]) .copy_from_slice(&device.cart.flashram.silicon_id[0].to_ne_bytes()); dram_addr += 4; device .rdram .mem .get_mut(dram_addr as usize..dram_addr as usize + 4) - .unwrap_or_default() + .unwrap_or(&mut [0; 4]) .copy_from_slice(&device.cart.flashram.silicon_id[1].to_ne_bytes()); } else if (cart_addr & 0x1ffff) < 0x10000 && device.cart.flashram.mode == FlashramMode::ReadArray diff --git a/src/device/rdram.rs b/src/device/rdram.rs index 15eefcd..b40c31a 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -76,7 +76,7 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 .rdram .mem .get_mut(address as usize..(address + 4) as usize) - .unwrap_or_default() + .unwrap_or(&mut [0; 4]) .copy_from_slice(&data.to_ne_bytes()); } @@ -118,14 +118,14 @@ pub fn init(device: &mut device::Device) { .rdram .mem .get_mut(0x318..0x318 + 4) - .unwrap_or_default() + .unwrap_or(&mut [0; 4]) .copy_from_slice(&device.rdram.size.to_ne_bytes()); // hack, skip RDRAM initialization device .rdram .mem .get_mut(0x3f0..0x3f0 + 4) - .unwrap_or_default() + .unwrap_or(&mut [0; 4]) .copy_from_slice(&device.rdram.size.to_ne_bytes()); device.ri.regs[device::ri::RI_MODE_REG as usize] = 0x0e; diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index 5140c3a..468db54 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -161,7 +161,7 @@ fn do_dma(device: &mut device::Device, dma: RspDma) { .rdram .mem .get_mut(dram_addr as usize..dram_addr as usize + 4) - .unwrap_or_default() + .unwrap_or(&mut [0; 4]) .copy_from_slice(&data.to_ne_bytes()); mem_addr += 4; dram_addr += 4; diff --git a/src/device/si.rs b/src/device/si.rs index c05d065..5cef137 100644 --- a/src/device/si.rs +++ b/src/device/si.rs @@ -105,7 +105,7 @@ fn copy_pif_rdram(device: &mut device::Device) { .rdram .mem .get_mut(dram_addr + i..dram_addr + i + 4) - .unwrap_or_default() + .unwrap_or(&mut [0; 4]) .copy_from_slice(&data.to_ne_bytes()); i += 4; } From 6ecb81fda134fc1ecc5ac5f8e5804cf22c6961ec Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 2 Jul 2025 22:08:46 +0200 Subject: [PATCH 0483/1117] move netplay_window to netplay.rs --- src/ui/gui.rs | 51 ++--------------------------------------------- src/ui/netplay.rs | 49 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 9b35dd0..b7c4213 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -59,53 +59,6 @@ fn check_latest_version(weak: slint::Weak) { }); } -fn netplay_window(app: &AppWindow, controller_paths: &[Option]) { - let weak_create = app.as_weak(); - let weak_app = app.as_weak(); - let controller_paths_create = controller_paths.to_owned(); - app.on_create_session_button_clicked(move || { - let controller_paths = controller_paths_create.clone(); - let weak_app = weak_app.clone(); - weak_create - .upgrade_in_event_loop(move |handle| { - let create_window = NetplayCreate::new().unwrap(); - save_settings(&handle, &controller_paths); - ui::netplay::setup_create_window( - &create_window, - GameSettings { - fullscreen: handle.get_fullscreen(), - overclock: handle.get_overclock_n64_cpu(), - disable_expansion_pak: handle.get_disable_expansion_pak(), - }, - weak_app, - ); - }) - .unwrap(); - }); - - let weak_join = app.as_weak(); - let weak_app = app.as_weak(); - let controller_paths_join = controller_paths.to_owned(); - app.on_join_session_button_clicked(move || { - let controller_paths = controller_paths_join.clone(); - let weak_app = weak_app.clone(); - weak_join - .upgrade_in_event_loop(move |handle| { - let join_window = NetplayJoin::new().unwrap(); - save_settings(&handle, &controller_paths); - ui::netplay::setup_join_window(&join_window, handle.get_fullscreen(), weak_app); - }) - .unwrap(); - }); - - app.on_netplay_discord_button_clicked(move || { - open::that_detached("https://discord.gg/JyW6ZgBUyS").unwrap(); - }); - app.on_netplay_feedback_button_clicked(move || { - open::that_detached("https://github.com/gopher64/gopher64/discussions/453").unwrap(); - }); -} - fn local_game_window(app: &AppWindow, controller_paths: &[Option]) { let dirs = ui::get_dirs(); let weak = app.as_weak(); @@ -262,7 +215,7 @@ fn controller_window( }); } -fn save_settings(app: &AppWindow, controller_paths: &[Option]) { +pub fn save_settings(app: &AppWindow, controller_paths: &[Option]) { let mut config = ui::config::Config::new(); config.video.integer_scaling = app.get_integer_scaling(); config.video.fullscreen = app.get_fullscreen(); @@ -331,7 +284,7 @@ pub fn app_window() { controller_window(&app, &game_ui.config, &controller_names, &controller_paths); } local_game_window(&app, &controller_paths); - netplay_window(&app, &controller_paths); + ui::netplay::netplay_window(&app, &controller_paths); app.run().unwrap(); save_settings(&app, &controller_paths); } diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index db04f6e..22ee108 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -4,7 +4,7 @@ use crate::device; use crate::ui; use crate::ui::gui::{ AppWindow, GameSettings, GbPaths, NetplayCreate, NetplayDevice, NetplayDialog, NetplayJoin, - NetplayWait, VruChannel, run_rom, + NetplayWait, VruChannel, run_rom, save_settings, }; use futures::{SinkExt, StreamExt}; use sha2::{Digest, Sha256}; @@ -937,3 +937,50 @@ pub fn setup_join_window( join_window.show().unwrap(); } + +pub fn netplay_window(app: &AppWindow, controller_paths: &[Option]) { + let weak_create = app.as_weak(); + let weak_app = app.as_weak(); + let controller_paths_create = controller_paths.to_owned(); + app.on_create_session_button_clicked(move || { + let controller_paths = controller_paths_create.clone(); + let weak_app = weak_app.clone(); + weak_create + .upgrade_in_event_loop(move |handle| { + let create_window = NetplayCreate::new().unwrap(); + save_settings(&handle, &controller_paths); + ui::netplay::setup_create_window( + &create_window, + GameSettings { + fullscreen: handle.get_fullscreen(), + overclock: handle.get_overclock_n64_cpu(), + disable_expansion_pak: handle.get_disable_expansion_pak(), + }, + weak_app, + ); + }) + .unwrap(); + }); + + let weak_join = app.as_weak(); + let weak_app = app.as_weak(); + let controller_paths_join = controller_paths.to_owned(); + app.on_join_session_button_clicked(move || { + let controller_paths = controller_paths_join.clone(); + let weak_app = weak_app.clone(); + weak_join + .upgrade_in_event_loop(move |handle| { + let join_window = NetplayJoin::new().unwrap(); + save_settings(&handle, &controller_paths); + ui::netplay::setup_join_window(&join_window, handle.get_fullscreen(), weak_app); + }) + .unwrap(); + }); + + app.on_netplay_discord_button_clicked(move || { + open::that_detached("https://discord.gg/JyW6ZgBUyS").unwrap(); + }); + app.on_netplay_feedback_button_clicked(move || { + open::that_detached("https://github.com/gopher64/gopher64/discussions/453").unwrap(); + }); +} From 72456b48e5dfcc362ac3bba3fd6f224127da07fe Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 2 Jul 2025 22:15:15 +0200 Subject: [PATCH 0484/1117] some code cleanup --- Cargo.lock | 45 +++++++++++++++++++++++++++++---------------- src/ui/config.rs | 4 ++-- src/ui/gui.rs | 2 +- src/ui/netplay.rs | 11 ++++++----- 4 files changed, 38 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a29c402..6e4308f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "ab_glyph" -version = "0.2.29" +version = "0.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3672c180e71eeaaac3a541fbbc5f5ad4def8b747c595ad30d674e43049f7b0" +checksum = "1e0f4f6fbdc5ee39f2ede9f5f3ec79477271a6d6a2baff22310d51736bda6cea" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -14,9 +14,9 @@ dependencies = [ [[package]] name = "ab_glyph_rasterizer" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" +checksum = "b2187590a23ab1e3df8681afdf0987c48504d80291f002fcdb651f0ef5e25169" [[package]] name = "addr2line" @@ -2044,9 +2044,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9421a676d1b147b16b82c9225157dc629087ef8ec4d5e2960f9437a90dac0a5" +checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" dependencies = [ "atomic-waker", "bytes", @@ -2633,9 +2633,9 @@ checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" [[package]] name = "indexmap" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", "hashbrown 0.15.4", @@ -2670,6 +2670,17 @@ dependencies = [ "syn", ] +[[package]] +name = "io-uring" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" +dependencies = [ + "bitflags 2.9.1", + "cfg-if", + "libc", +] + [[package]] name = "ipnet" version = "2.11.0" @@ -3076,9 +3087,9 @@ dependencies = [ [[package]] name = "lzma-rust2" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0889a24ddb2304e1b3cdc0b0cd74119143d3403c19100f064809d38789bae155" +checksum = "e004a649120b31c06728257815826e075f638502ba49a9677c3c112e324e044d" dependencies = [ "byteorder", ] @@ -4422,9 +4433,9 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] name = "reqwest" -version = "0.12.20" +version = "0.12.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabf4c97d9130e2bf606614eb937e86edac8292eaa6f422f995d7e8de1eb1813" +checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" dependencies = [ "base64", "bytes", @@ -4805,9 +4816,9 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.15.1" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a05dfb2306780729ce5c5ba87991c57f28c6931ac501b2dbca57400aaa44d373" +checksum = "0613c8bcc0d74f26e4c90c94125703dc87bcb3a95abce3fa606c585cd9cbaa5f" dependencies = [ "bit-set", "byteorder", @@ -5451,16 +5462,18 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.45.1" +version = "1.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" +checksum = "1140bb80481756a8cbe10541f37433b459c5aa1e727b4c020fbfebdc25bf3ec4" dependencies = [ "backtrace", "bytes", + "io-uring", "libc", "mio", "pin-project-lite", "signal-hook-registry", + "slab", "socket2", "tokio-macros", "tracing", diff --git a/src/ui/config.rs b/src/ui/config.rs index 576c1bd..ae34dcc 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -33,7 +33,7 @@ pub struct InputProfile { #[derive(serde::Serialize, serde::Deserialize)] pub struct Input { - pub input_profiles: std::collections::HashMap, + pub input_profiles: std::collections::BTreeMap, pub input_profile_binding: [String; 4], pub controller_assignment: [Option; 4], pub controller_enabled: [bool; 4], @@ -87,7 +87,7 @@ impl Config { return result; } } - let mut input_profiles = std::collections::HashMap::new(); + let mut input_profiles = std::collections::BTreeMap::new(); input_profiles.insert("default".to_string(), ui::input::get_default_profile()); Config { input: Input { diff --git a/src/ui/gui.rs b/src/ui/gui.rs index b7c4213..7a65139 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -25,7 +25,7 @@ pub struct VruChannel { pub vru_word_receiver: Option>, } -#[derive(Copy, Clone)] +#[derive(Clone)] pub struct GameSettings { pub fullscreen: bool, pub overclock: bool, diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 22ee108..ba0d4c5 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -1,5 +1,3 @@ -#![allow(clippy::too_many_arguments)] - use crate::device; use crate::ui; use crate::ui::gui::{ @@ -277,7 +275,7 @@ pub fn setup_create_window( game_name.to_string(), game_hash.to_string(), password.to_string(), - game_settings, + game_settings.clone(), weak_app.clone(), weak.clone(), ); @@ -441,6 +439,7 @@ fn update_sessions( }); } +#[allow(clippy::too_many_arguments)] fn create_session( netplay_write_sender: tokio::sync::broadcast::Sender>, mut netplay_read_receiver: tokio::sync::broadcast::Receiver, @@ -546,6 +545,7 @@ fn create_session( }); } +#[allow(clippy::too_many_arguments)] fn join_session( netplay_write_sender: tokio::sync::broadcast::Sender>, mut netplay_read_receiver: tokio::sync::broadcast::Receiver, @@ -645,6 +645,7 @@ fn join_session( }); } +#[allow(clippy::too_many_arguments)] fn setup_wait_window( netplay_write_sender: tokio::sync::broadcast::Sender>, mut netplay_read_receiver: tokio::sync::broadcast::Receiver, @@ -949,7 +950,7 @@ pub fn netplay_window(app: &AppWindow, controller_paths: &[Option]) { .upgrade_in_event_loop(move |handle| { let create_window = NetplayCreate::new().unwrap(); save_settings(&handle, &controller_paths); - ui::netplay::setup_create_window( + setup_create_window( &create_window, GameSettings { fullscreen: handle.get_fullscreen(), @@ -972,7 +973,7 @@ pub fn netplay_window(app: &AppWindow, controller_paths: &[Option]) { .upgrade_in_event_loop(move |handle| { let join_window = NetplayJoin::new().unwrap(); save_settings(&handle, &controller_paths); - ui::netplay::setup_join_window(&join_window, handle.get_fullscreen(), weak_app); + setup_join_window(&join_window, handle.get_fullscreen(), weak_app); }) .unwrap(); }); From c12dc460a7d8604857b280cb0f96ba5e8608ed12 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 2 Jul 2025 22:17:34 +0200 Subject: [PATCH 0485/1117] update tokio --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 8d6fc5b..fb57e5d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,7 @@ sha2 = "0.10" ab_glyph = "0.2" sdl3-sys = { version = "0.5", features = ["build-from-source-static"] } rfd = { version = "0.15", default-features = false, features = ["xdg-portal", "tokio"] } -tokio = {version = "1.45", features = ["rt-multi-thread", "macros"] } +tokio = {version = "1.46", features = ["rt-multi-thread", "macros"] } spin_sleep = "1.3" encoding_rs = "0.8" mimalloc = "0.1" From 10a1e3a556510961abe8e6d1f9ea1003fb4b0394 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 2 Jul 2025 22:22:42 +0200 Subject: [PATCH 0486/1117] rename netplaydialog --- src/ui/gui/appwindow.slint | 14 +++++++++++++- src/ui/gui/netplay_page.slint | 14 +------------- src/ui/netplay.rs | 6 +++--- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index cf26141..858fe41 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -1,6 +1,7 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT +import { StandardButton } from "std-widgets.slint"; import { LocalGame, ControllerConfig, Netplay, Settings, About } from "pages.slint"; import { SideBar } from "side_bar.slint"; import { SettingsData } from "settings_page.slint"; @@ -12,7 +13,6 @@ export { VruDialog } from "vru_dialog.slint"; export { NetplayCreate } from "netplay_create.slint"; export { NetplayJoin } from "netplay_join.slint"; export { NetplayWait } from "netplay_wait.slint"; -export { NetplayDialog } from "netplay_page.slint"; export component AppWindow inherits Window { callback wiki_button_clicked; @@ -116,3 +116,15 @@ export component AppWindow inherits Window { } } } + +export component ErrorDialog inherits Dialog { + in-out property text; + title: @tr("Error"); + Text { + text: text; + } + + StandardButton { + kind: close; + } +} diff --git a/src/ui/gui/netplay_page.slint b/src/ui/gui/netplay_page.slint index 6a06efb..5f52d88 100644 --- a/src/ui/gui/netplay_page.slint +++ b/src/ui/gui/netplay_page.slint @@ -1,7 +1,7 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { VerticalBox, HorizontalBox, Button, StandardButton } from "std-widgets.slint"; +import { VerticalBox, HorizontalBox, Button } from "std-widgets.slint"; import { Page } from "page.slint"; export global NetplayData { @@ -21,18 +21,6 @@ export global NetplayData { in-out property current_session: -1; } -export component NetplayDialog inherits Dialog { - in-out property text; - title: @tr("Netplay Error"); - Text { - text: text; - } - - StandardButton { - kind: close; - } -} - export component Netplay inherits Page { callback create_session_button_clicked; callback join_session_button_clicked; diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index ba0d4c5..6aeb769 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -1,7 +1,7 @@ use crate::device; use crate::ui; use crate::ui::gui::{ - AppWindow, GameSettings, GbPaths, NetplayCreate, NetplayDevice, NetplayDialog, NetplayJoin, + AppWindow, ErrorDialog, GameSettings, GbPaths, NetplayCreate, NetplayDevice, NetplayJoin, NetplayWait, VruChannel, run_rom, save_settings, }; use futures::{SinkExt, StreamExt}; @@ -183,7 +183,7 @@ fn select_rom(weak: slint::Weak) .unwrap(); } else { weak.upgrade_in_event_loop(move |handle| { - let message_dialog = NetplayDialog::new().unwrap(); + let message_dialog = ErrorDialog::new().unwrap(); let weak_dialog = message_dialog.as_weak(); message_dialog.on_close_clicked(move || { weak_dialog.unwrap().window().hide().unwrap(); @@ -333,7 +333,7 @@ fn manage_websocket( } fn show_netplay_error(message: String) { - let message_dialog = NetplayDialog::new().unwrap(); + let message_dialog = ErrorDialog::new().unwrap(); let weak_dialog = message_dialog.as_weak(); message_dialog.on_close_clicked(move || { weak_dialog.unwrap().window().hide().unwrap(); From 572807def0f4de4b755f10633ff01d93f2e5d63d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 2 Jul 2025 22:26:01 +0200 Subject: [PATCH 0487/1117] add missing disable_expansion_pak in netplay features --- src/ui/netplay.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 6aeb769..bf4cc2b 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -457,6 +457,10 @@ fn create_session( let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); let mut features = std::collections::HashMap::new(); features.insert("overclock".to_string(), game_settings.overclock.to_string()); + features.insert( + "disable_expansion_pak".to_string(), + game_settings.disable_expansion_pak.to_string(), + ); let create_room = NetplayMessage { message_type: "request_create_room".to_string(), @@ -517,8 +521,8 @@ fn create_session( true, GameSettings { fullscreen: game_settings.fullscreen, - overclock: overclock == "true", - disable_expansion_pak: disable_expansion_pak == "true", + overclock: overclock.parse().unwrap(), + disable_expansion_pak: disable_expansion_pak.parse().unwrap(), }, handle.get_peer_addr(), weak_app, @@ -617,8 +621,8 @@ fn join_session( false, GameSettings { fullscreen, - overclock: overclock == "true", - disable_expansion_pak: disable_expansion_pak == "true", + overclock: overclock.parse().unwrap(), + disable_expansion_pak: disable_expansion_pak.parse().unwrap(), }, handle.get_peer_addr(), weak_app, From 7fd43886decd341065f59a6a038ca828679cc921 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 3 Jul 2025 13:27:33 +0200 Subject: [PATCH 0488/1117] add a few vru phrases --- src/device/controller/vru.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/device/controller/vru.rs b/src/device/controller/vru.rs index 338ce49..aad48db 100644 --- a/src/device/controller/vru.rs +++ b/src/device/controller/vru.rs @@ -2726,5 +2726,17 @@ fn create_word_mappings(device: &mut device::Device) { String::from("82B582E382C182CF82C282AF82A282A982A2"), String::from("restricted-depart"), ), + ( + String::from("009903720366006903C903FF0045033C"), + String::from("objection"), + ), + ( + String::from("041100CF02EE0381004503B7"), + String::from("hold-it"), + ), + ( + String::from("03BA019203C9036C0087000303C6"), + String::from("take-that"), + ), ]); } From 8f6c6f1b9409e647a63ef1766c2402761186ce58 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 4 Jul 2025 16:46:03 +0200 Subject: [PATCH 0489/1117] Cheat support (#459) * Cheat support * more * more * more * more * more * more * more * more * more * more * more * more * more --- data/cheats.json | 1 + src/cheats.rs | 187 ++++++++++++++++++++++++++++++++ src/device.rs | 11 +- src/device/ai.rs | 4 +- src/device/vi.rs | 3 +- src/main.rs | 8 ++ src/savestates.rs | 1 + src/ui.rs | 4 + src/ui/audio.rs | 78 ++++++++----- src/ui/cheats.rs | 148 +++++++++++++++++++++++++ src/ui/config.rs | 36 ++++++ src/ui/gui.rs | 11 +- src/ui/gui/appwindow.slint | 25 ++++- src/ui/gui/cheat_page.slint | 89 +++++++++++++++ src/ui/gui/netplay_create.slint | 7 +- src/ui/gui/netplay_join.slint | 4 +- src/ui/gui/netplay_page.slint | 1 + src/ui/gui/pages.slint | 1 + src/ui/netplay.rs | 60 +++++++++- src/ui/storage.rs | 14 +++ 20 files changed, 656 insertions(+), 37 deletions(-) create mode 100644 data/cheats.json create mode 100644 src/cheats.rs create mode 100644 src/ui/cheats.rs create mode 100644 src/ui/gui/cheat_page.slint diff --git a/data/cheats.json b/data/cheats.json new file mode 100644 index 0000000..a67f78d --- /dev/null +++ b/data/cheats.json @@ -0,0 +1 @@ +{"001A3BD0-AFB3DE1A-C:46":{"Access Level Select":{"note":"On the main menu Scroll down to make CHEATS visible to go into Level Select.For in-Game Cheats,Pause gameplay.","data":["810DD50C 8001"],"options":null},"Have\\All TARZAN Letters":{"note":"","data":["800DD515 00FF"],"options":null},"Have\\Coins Collected 100%":{"note":"","data":["800DD547 0064"],"options":null},"Have\\Full Portrait":{"note":"","data":["800DD514 00FF"],"options":null},"Have\\Level \u0026 Tokens Completed 100%":{"note":"","data":["800DD51F 0000","800DD520 0001","800DD521 0000"],"options":null},"Infinite\\Bonus Timer":{"note":"This is For All Timers on Bonus Levels","data":["801736DE 0025"],"options":null},"Infinite\\Green Weapon":{"note":"","data":["811921F6 0063"],"options":null},"Infinite\\Health":{"note":"","data":["81192320 0120"],"options":null},"Infinite\\Lives":{"note":"","data":["800DD542 00??"],"options":{"3 Lives":"03","99 Lives":"63"}},"Infinite\\Purple Weapon":{"note":"","data":["811921FA 0063"],"options":null},"Infinite\\Red Weapon":{"note":"","data":["811921F8 0063"],"options":null},"Press GS For\\Sabor Attacks\\Sabor 1 Hit Kill":{"note":"","data":["8924A23E 0001"],"options":null}},"0198A651-FC219D84-C:50":{"Team on the left of score board has 0 goals":{"note":"","data":["800375C7 0000"],"options":null},"Team on the left of score board has 15 goals":{"note":"","data":["800375C7 000F"],"options":null},"Team on the right of score board has 0 goals":{"note":"","data":["800375C3 0000"],"options":null},"Team on the right of score board has 15 goals":{"note":"","data":["800375C3 000F"],"options":null}},"02B1538F-C94B88D0-C:45":{"Found All Numbers":{"note":"","data":["810ACFB2 000C"],"options":null},"Have No Numbers":{"note":"Keep you kid busy for hours!!!","data":["810ACFB2 0000"],"options":null},"Infinite Strikes":{"note":"","data":["810A7A76 0000"],"options":null}},"02D8366A-6CABEF9C-C:50":{"Access All Bikes \u0026 Tracks":{"note":"","data":["810A7D16 0063"],"options":null},"Access All Weapons For All Modes":{"note":"","data":["50000E02 0000","811B9EFA 0505"],"options":null},"Always 1st":{"note":"","data":["810D7D96 0000"],"options":null},"Infinite Damage":{"note":"","data":["801C1257 0002"],"options":null},"Infinite Health\\To Bike":{"note":"","data":["811B9BB8 4270"],"options":null},"Infinite Health\\To Character":{"note":"","data":["811C0F90 4489"],"options":null},"Max Cash":{"note":"","data":["810D6FBA FFFF"],"options":null},"No Music Elsewhere":{"note":"","data":["810D61AA 0000"],"options":null},"No Music In Game":{"note":"","data":["810D61AE 0000"],"options":null}},"0304C48E-AC4001B8-C:45":{"Max Score":{"note":"","data":["81158440 05F5","81158442 E0FF"],"options":null},"Play As/Player 1":{"note":"","data":["801514F3 00??"],"options":{"Atomicat":"06","Bob Cat":"04","Hai Jinx":"00","Manx":"02","Muffy Dupont":"03","Pearl":"07","Smokey":"05","Sparky":"01"}},"Play As/Player 2":{"note":"","data":["80151503 00??"],"options":{"Atomicat":"06","Bob Cat":"04","Hai Jinx":"00","Manx":"02","Muffy Dupont":"03","Pearl":"07","Smokey":"05","Sparky":"01"}},"Play As/Player 3":{"note":"","data":["80151513 00??"],"options":{"Atomicat":"06","Bob Cat":"04","Hai Jinx":"00","Manx":"02","Muffy Dupont":"03","Pearl":"07","Smokey":"05","Sparky":"01"}},"Play As/Player 4":{"note":"","data":["80151523 00??"],"options":{"Atomicat":"06","Bob Cat":"04","Hai Jinx":"00","Manx":"02","Muffy Dupont":"03","Pearl":"07","Smokey":"05","Sparky":"01"}}},"033F4C13-319EE7A7-C:45":{"Fail Objectives To Complete Them":{"note":"","data":["810315B8 2402","810315BA 0011"],"options":null},"Go Solo In Multiplayer":{"note":"","data":["D00E0778 0042","801002B7 0001"],"options":null},"Have\\All\\Gadgets":{"note":"","data":["80112F6D 0001"],"options":null},"Have\\All\\Guns On All Levels":{"note":"Once you pick up a Gun You will have all weapons","data":["8105F224 0810","8105F226 0000","8105F228 2442","8105F22A 0001","81400000 3C02","81400002 0100","81400004 2442","81400006 0063","81400008 AE82","8140000A 0288","8140000C AE82","8140000E 0298","81400010 AE82","81400012 02A0","81400014 AE82","81400016 02A8","81400018 AE82","8140001A 02B0","8140001C AE82","8140001E 02C0","81400020 AE82","81400022 02C8","81400024 AE82","81400026 02D0","81400028 AE82","8140002A 02D8","8140002C AE82","8140002E 02E8","81400030 AE82","81400032 02F0","81400034 AE82","81400036 02F8","81400038 AE82","8140003A 0300","8140003C AE82","8140003E 0308","81400040 AE82","81400042 0310","81400044 AE82","81400046 0320","81400048 AE82","8140004A 0330","8140004C AE82","8140004E 0338","81400050 AE82","81400052 0350","81400054 AE82","81400056 0358","81400058 AE82","8140005A 0360","8140005C AE82","8140005E 0370","81400060 AE82","81400062 0378","81400064 AE82","81400066 0380","81400068 AE82","8140006A 0388","8140006C AE82","8140006E 0340","81400070 AE82","81400072 0348","81400074 AE82","81400076 0350","81400078 0801","8140007A 7C8C","8140007C A077","8140007E 01FC"],"options":null},"Have\\All\\Levels Unlocked":{"note":"For Single Player Mode Only","data":["81102EE6 0021"],"options":null},"Have\\All\\Skins + Everyone is Evil":{"note":"","data":["50005C0C 0000","800BF687 0081"],"options":null},"Have\\Tons Of Nightvision":{"note":"For Battery Only","data":["81064C82 1500"],"options":null},"Infinite\\Ammo On All Levels":{"note":"","data":["810648DC 2400"],"options":null},"Infinite\\Ammo On Clip":{"note":"","data":["810649AC 2400"],"options":null},"Infinite\\Time":{"note":"Underground Uprising","data":["8138EE3A 19B8"],"options":null},"Invincibility On All levels":{"note":"","data":["81112F68 0101"],"options":null},"Level select":{"note":"","data":["803B0E5F 0009"],"options":null},"Play Crate Yard Level":{"note":"","data":["80102EDF 0008"],"options":null},"Skip Intro":{"note":"","data":["D03B0E5F 0004","803B0E5F 0009"],"options":null},"Stop Bond From Going Downhill on Cold Reception":{"note":"Press L to Stop, \u0026 R to Go","data":["D10E0778 0020","803A8466 0001","D10E0778 0010","803A8466 0000"],"options":null},"Time Taken Clock At 0:00":{"note":"","data":["80102F02 0000"],"options":null}},"03571182-892FD06D-C:45":{"Infinite\\Continues":{"note":"","data":["8114738C 0009"],"options":null},"Infinite\\Dirt Rollout Rampage\\Player 1":{"note":"","data":["8017DFEB 0002"],"options":null},"Instant\\Win\\Barrier Ball\\Player 1":{"note":"","data":["8016EA97 0005"],"options":null},"Instant\\Win\\Pichu's Power Plant\\Player 1":{"note":"","data":["8016D64F 0050"],"options":null},"Instant\\Win\\Topsy Turvy\\Player 1":{"note":"","data":["80176887 0005"],"options":null},"Max Score":{"note":"","data":["D117F812 03E7","8117F812 03E7"],"options":null},"One Hit KO":{"note":"To Win you must get at least one hit or just return your pokemon.","data":["8014576F 0000","801457C7 0000","8014581F 0000"],"options":null},"Press R To Reset Time":{"note":"Press R To Reset Time","data":["801CE066 0010","81183ACC 0063"],"options":null},"Press R+L to KO Opponents":{"note":"Press R+L Activate","data":["D10CE066 0030","80145767 0000","D10CE066 0030","801457C7 0000","D10CE066 0030","8014576F 0000","D10CE066 0030","8014581F 0000"],"options":null},"Press Z\\for Max HP\\1st Pokemon":{"note":"This will give them Max HP when they are not in use. Just call a Pokemon out and he will then have Max HP. When your Pokemon faints, just press Z again and it will revive itIn Battle Only,Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","8114528E 00FF","D112B554 2000","81145290 00FF"],"options":null},"Press Z\\for Max HP\\2nd Pokemon\\Player 1":{"note":"This will give them Max HP when they are not in use. Just call a Pokemon out and he will then have Max HP. When your Pokemon faints, just press Z again and it will revive itIn Battle Only,Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","811452E6 00FF","D112B554 2000","811452E8 00FF"],"options":null},"Press Z\\for Max HP\\3rd Pokemon\\Player 1":{"note":"This will give them Max HP when they are not in use. Just call a Pokemon out and he will then have Max HP. When your Pokemon faints, just press Z again and it will revive itIn Battle Only,Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","8114533E 00FF","D112B554 2000","81145340 00FF"],"options":null},"Press Z\\for Max L.\\1st Pokemon\\Player 1":{"note":"Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","81145284 0063"],"options":null},"Press Z\\for Max L.\\2nd Pokemon\\Player 1":{"note":"Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","811452DC 0063"],"options":null},"Press Z\\for Max L.\\3rd Pokemon\\Player 1":{"note":"Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","81145334 0063"],"options":null}},"036897CE-E0D4FA54-C:45":{"All Items":{"note":"","data":["50002402 0202","810EC350 0001","50004601 0000","800EC3D1 0003"],"options":null},"Item Modifier Codes\\Position 01":{"note":"","data":["800EC350 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 02":{"note":"","data":["800EC351 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 03":{"note":"","data":["800EC352 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 04":{"note":"","data":["800EC353 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 05":{"note":"","data":["800EC354 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 06":{"note":"","data":["800EC355 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 07":{"note":"","data":["800EC356 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 08":{"note":"","data":["800EC357 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 09":{"note":"","data":["800EC358 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 10":{"note":"","data":["800EC359 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 11":{"note":"","data":["800EC35A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 12":{"note":"","data":["800EC35B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 13":{"note":"","data":["800EC35C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 14":{"note":"","data":["800EC35D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 15":{"note":"","data":["800EC35E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 16":{"note":"","data":["800EC35F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 17":{"note":"","data":["800EC360 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 18":{"note":"","data":["800EC361 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 19":{"note":"","data":["800EC362 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 20":{"note":"","data":["800EC363 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 21":{"note":"","data":["800EC364 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 22":{"note":"","data":["800EC365 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 23":{"note":"","data":["800EC366 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 24":{"note":"","data":["800EC367 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 25":{"note":"","data":["800EC368 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 26":{"note":"","data":["800EC369 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 27":{"note":"","data":["800EC36A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 28":{"note":"","data":["800EC36B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 29":{"note":"","data":["800EC36C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 30":{"note":"","data":["800EC36D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 31":{"note":"","data":["800EC36E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 32":{"note":"","data":["800EC36F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 33":{"note":"","data":["800EC370 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 34":{"note":"","data":["800EC371 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 35":{"note":"","data":["800EC372 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 36":{"note":"","data":["800EC373 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 37":{"note":"","data":["800EC374 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 38":{"note":"","data":["800EC375 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 39":{"note":"","data":["800EC376 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 40":{"note":"","data":["800EC377 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 41":{"note":"","data":["800EC378 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 42":{"note":"","data":["800EC379 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 43":{"note":"","data":["800EC37A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 44":{"note":"","data":["800EC37B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 45":{"note":"","data":["800EC37C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 46":{"note":"","data":["800EC37D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 47":{"note":"","data":["800EC37E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 48":{"note":"","data":["800EC37F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}}},"0375CF67-56A93FAA-C:4A":{"Always Have Retreat \u0026 Elem Pedra Opened":{"note":"Do not put this on until in-game or the game will freeze.","data":["D01A1312 0000","811A1312 0003"],"options":null},"Day Always 00":{"note":"","data":["811F008C 0000"],"options":null},"Finish All Levels":{"note":"","data":["81196126 5454","81196128 5140","8119612A 4555","8119612C 9514","8119612E 5515"],"options":null},"Hour Always":{"note":"","data":["801960CD 00??"],"options":{"(0 Hour - 24:00 PM - Midnight)":"00","(01:00 AM)":"01","(02:00 AM)":"02","(03:00 AM)":"03","(04:00 AM)":"04","(05:00 AM)":"05","(06:00 AM)":"06","(07:00 AM)":"07","(08:00 AM)":"08","(09:00 AM)":"09","(10:00 AM)":"0A","(11:00 AM)":"0B","(12:00 PM - Noon)":"0C","(13:00 - 1 PM)":"0D","(14:00 - 2 PM)":"0E","(15:00 - 3 PM)":"0F","(16:00 - 4 PM)":"10","(17:00 - 5 PM)":"11","(18:00 - 6 PM)":"12","(19:00 - 7 PM)":"13","(20:00 - 8 PM)":"14","(21:00 - 9 PM)":"15","(22:00 - 10 PM)":"16","(23:00 - 11 PM)":"17"}},"Infinite Goth":{"note":"","data":["8119610E FFFF"],"options":null},"Magnus\\Infinite HP":{"note":"","data":["811932B0 03E7"],"options":null},"Magnus\\Level 99":{"note":"","data":["801932AB 0063"],"options":null},"Magnus\\Max Agi":{"note":"","data":["811932BC 03E7"],"options":null},"Magnus\\Max Dex":{"note":"","data":["811932BE 3E77"],"options":null},"Magnus\\Max HP":{"note":"","data":["811932AE 03E7"],"options":null},"Magnus\\Max Int":{"note":"","data":["811932B8 03E7"],"options":null},"Magnus\\Max Mem":{"note":"","data":["811932BA 03E7"],"options":null},"Magnus\\Max Str":{"note":"","data":["811932B4 03E7"],"options":null},"Magnus\\Max Vit":{"note":"","data":["811932B6 03E7"],"options":null},"Max Goth":{"note":"","data":["8119610C 0098","8119610E 967F"],"options":null},"Open All Paths":{"note":"","data":["81196120 01FF","81196122 677F","81196124 FCFF"],"options":null}},"0414CA61-2E57B8AA-C:50":{"Everything Unlocked\\Save File 1":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8105892E FFFF"],"options":null},"Everything Unlocked\\Save File 2":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8105886E FFFF"],"options":null},"Everything Unlocked\\Save File 3":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8105898E FFFF"],"options":null},"Everything Unlocked\\Save File 4":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","810588CE FFFF"],"options":null},"In-Built Cheat Menu":{"note":"This code gives you all Cheats in Menu","data":["50002001 0000","800585A0 0001"],"options":null},"Infinite\\Ammo (All Levels)":{"note":"","data":["8006894B 0001"],"options":null},"Mod Section\\Cradle in multiplayer":{"note":"Puts the cradle graphic in the levels screen where the facility normally is in the multiplayer levels screen.Warning it doesn't allow you to enter the multiplayer levels screen,it should automatically Have\\selected cradle, which cannot be changed from the multiplayer menus","data":["8002666D 0092","8002666F 0093","80026677 0029","80026673 0008","803230C5 0052","803230C6 0041","803230C7 0044","803230C8 004C","803230C9 0045"],"options":null},"Mod Section\\Enemies Do Nothing":{"note":"","data":["80027E54 00FF"],"options":null},"Mod Section\\Enemy Options":{"note":"\"These Codes Are very very cool but in most places pointless ! But great fun, try then. But remember to deactivate them before coming to the end of the level, otherwise, there will be nothing/no one, to meet or do (:\"","data":["80032142 00??"],"options":{"Enemies Check Around Themselves":"FF","Enemies Come After You":"01","Enemies Move Around \u0026 Check":"97"}},"Mod Section\\Facility Back Zone In Multiplayer\\Part 1\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811E6554 45E4","811E6558 43D5","811E655C C5A7","811E657C 801C","811E657E 6774","811E5164 45E4","811E5168 C383","811E516C 4492","811E518C 801C","811E518E D574","811E78C0 45AD","811E78C4 C383","811E78C8 4440","811E78E8 801C","811E78EA E464","811E4D18 45D0","811E4D1C 4307","811E4D20 C4FB","811E4D40 801C","811E4D42 75EC","811E6738 45CD","811E673C C383","811E6740 43F4","811E6760 801C","811E6762 A0DC","811E5450 45C2","811E5454 4356","811E5458 C598","811E5478 801C","811E547A 6A74","811E5240 4608","811E5244 4307","811E5248 43DC","811E5268 801C","811E526A 962C","811E691C 4606","811E6920 4321","811E6924 449D","811E6944 801C","811E6946 CBEC","801ED447 008A","801ED4DB 008B","801ED56F 008C","801ED603 008D","801ED697 008E","801ED72B 008F","801ED7BF 007D","801ED853 007E","801ED443 002A","801ED4D7 002A","801ED56B 002A","801ED5FF 002A","801ED693 002A","801ED727 002A","801ED7BB 002A","801ED84F 002A","801ED449 0000","801ED4DD 0000","801ED571 0000","801ED605 0000","801ED699 0000","801ED72D 0000","801ED7C1 0000","801ED855 0000","801ED44D 0000","801ED4E1 0000","801ED575 0000","801ED609 0000","801ED69D 0000","801ED731 0000","801ED7C5 0000","801ED859 0000","801EB743 002A","801EB745 0068","811EB746 277F","811EB748 1000","811EB74A 0262","811EB7C2 0190","801EB7C5 0000","811EB7C6 0258"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 2\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811EB7C8 0000","811EB7CC FFFF","811EB7CE FFFF","811EB7D2 0000","801EB7D5 0000","801EB7DB 0000","811EB7E2 0000","801EB7E7 0000","801EB843 002A","801EB845 0068","811EB846 2780","811EB848 1000","811EB84A 0262","811EB8C2 0190","801EB8C5 0000","811EB8C6 0258","811EB8C8 0000","811EB8CC FFFF","811EB8CE FFFF","811EB8D2 0000","801EB8D5 0000","801EB8DB 0000","811EB8E2 0000","801EB8E7 0000","801EB943 002A","801EB945 0068","811EB946 2791","811EB948 1000","811EB94A 0262","811EB9C2 0190","801EB9C5 0000","811EB9C6 0258","811EB9C8 0000","811EB9CC FFFF","811EB9CE FFFF","811EB9D2 0000","801EB9D5 0000","801EB9DB 0000","811EB9E2 0000","801EB9E7 0000","801EBA43 002A","801EBA45 0068","811EBA46 2792","811EBA48 1000","811EBA4A 0262","811EBAC2 0190","801EBAC5 0000","811EBAC6 0258","811EBAC8 0000","811EBACC FFFF","811EBACE FFFF","811EBAD2 0000","801EBAD5 0000","801EBADB 0000","811EBAE2 0000","801EBAE7 0000","801EBB45 00A0","801EBC45 00A0","801EBD45 00A0","801EBE45 00A0","801EBB47 0075","801EBC47 0076","801EBD47 0077","801EBE47 0078","801EBBE7 0001","801EBCE7 0001","801EBDE7 0001","801EBEE7 0001","801EC247 0071","801ECD47 0072","801ECE47 0074","801ECF47 006C","801ED047 0079","801ED147 0083","D01EBFC5 005A","801EBFC5 0000","D11EBFC6 0000","811EBFC6 F333","D11EBFC8 03E8","811EBFC8 0000"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 3\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["D11EBFCA 0000","811EBFCA F0C4","D11EBFCE 4CCC","811EBFCE 000A","D11EBFD2 4CCC","811EBFD2 000A","D11EBFD4 0003","811EBFD4 0000","D11EBFD6 0000","811EBFD6 02C4","801EBFD9 0004","801EBFDB 0000","811EBFE2 0384","801EBFE7 0004","801EBF45 009E","801EBF47 0084","801EBF48 0010","801EC2D9 0000","801EC447 0085","801EC547 0086","811EA6B6 2743","811EA73E 0114","811EA7F2 0115","811EA8A6 00A3","811EA92E 009D","811EA9E2 00A4","811EAA96 00DA","811EAB1E 00DB","811EABD2 00DF","811EAC86 0130","811EAD0E 008D","811EADC2 012E","811EAE76 0111","811EAEFE 2740","811EAFB2 2741","811EB066 00A0","811EB0EE 009E","811EB1A2 009F","811EB256 274F","811EB2DE 2750","811EB392 0117","811EB446 0131","811EB4CE 008E","811EB582 0132","811EB636 00A1","811EB6BE 0119","811EA62E 00FA","801ED3DF 0000","801ED2DF 0001","D0024337 0007","80024337 001F"],"options":null},"Mod Section\\Freeze Unfreeze enemies":{"note":"Press C-Up To Freeze \u0026 C-Down To Unfreeze.","data":["D00572D1 0008","80027E5C 000F","D00572D1 0004","80027E5C 0000"],"options":null},"Mod Section\\Replace Cradle with Citadell hidden level":{"note":"","data":["80025E47 0029","8103DB6A D9B4","8103DB70 3F44","8103DB72 BDEA","8103DB74 3F80","8103DB76 0000","8103DB78 4219","8103DB7A D89D","81058EC0 C470"],"options":null},"Mod Section\\Secret Island on Dam Level":{"note":"For the above code to work,Get to the 2nd guard tower \u0026 go down the ladder on the left hand side \u0026 to the end of the Dock, Press L \u0026 GS and you will be transfered in the water. Just keep walking straight \u0026 you will get to it. Obviously you can't actually climb ladders or anything, you will simply walkthrough anything on that Part, if you want to walk back to the Dock, when you come near it click the cheat back on \u0026 keep pressing L \u0026 GS untill you are back on it.","data":["D004C2D1 0020","800BA78D 0050","880BA78D 0000"],"options":null}},"04DAF07F-0D18E688-C:45":{"Cheat Menu\\All Weapons Enabled":{"note":"","data":["801CC8B9 0001","801CC925 0001","801CD985 0001","801CDA81 0001","801CDB15 0001","801CDB17 0001","801CDB49 0001","801CE479 0001","801CE481 0001","801CE4ED 0001","801CF635 0001"],"options":null},"Cheat Menu\\Cheat Menu Enabled":{"note":"","data":["801CE4E8 0001"],"options":null},"Cheat Menu\\Have All Game Type \u0026 Other":{"note":"","data":["810E16BE FFFF"],"options":null},"Cheat Menu\\Have All Weapons":{"note":"","data":["811CE470 FFFF"],"options":null},"Enable Debug Menu":{"note":"","data":["800DF990 0001"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810A1E74 A65B"],"options":null},"Invincibility":{"note":"","data":["800DEEC3 0001"],"options":null},"Time Always 00:00":{"note":"","data":["801A19C6 0000"],"options":null}},"0549765A-93B9D042-C:4A":{"Have 6 Carrots":{"note":"","data":["80160659 007E"],"options":null},"Have All\\Collectibles\\Stage 1":{"note":"","data":["80160650 0014"],"options":null},"Have All\\Collectibles\\Stage 2":{"note":"","data":["80160651 0014"],"options":null},"Have All\\Collectibles\\Stage 3":{"note":"","data":["80160652 0014"],"options":null},"Have All\\Collectibles\\Stage 4":{"note":"","data":["80160653 0014"],"options":null},"Have All\\Collectibles\\Stage 5":{"note":"","data":["80160654 0014"],"options":null},"Have All\\Collectibles\\Stage 6":{"note":"","data":["80160655 0014"],"options":null},"Have All\\Costumes":{"note":"","data":["8016065A 00FE"],"options":null},"Have All\\Levels":{"note":"","data":["80160648 003F"],"options":null},"Infinite Health":{"note":"","data":["80187BBD 000F"],"options":null},"Max Collectable Items":{"note":"","data":["80160641 0014"],"options":null},"Press L To levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0187BF5 0020","81187B20 4200"],"options":null}},"0553AE9D-EAD8E0C1-C:45":{"1 Hit to Kill Opponent\\Player 1":{"note":"","data":["D10B6354 42C8","810B6354 4080"],"options":null},"1 Hit to Kill Opponent\\Player 2":{"note":"","data":["D10B6170 42C8","810B6170 4080"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["810B6170 42C8"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["810B6354 42C8"],"options":null},"Opponent Has No Energy\\Player 1":{"note":"","data":["810B6354 C080"],"options":null},"Opponent Has No Energy\\Player 2":{"note":"","data":["810B6170 C080"],"options":null},"Player 1 Never Wins":{"note":"","data":["800C0C03 0000"],"options":null},"Player 2 Never Wins":{"note":"","data":["800C0C05 0000"],"options":null},"Unlock Titan Difficulty Level":{"note":"","data":["810BF752 0001"],"options":null}},"056EAB63-C215FCD5-C:4A":{"Infinite\\Energy\\Player 1":{"note":"","data":["81224DC4 00FF"],"options":null},"Infinite\\Energy\\Player 2":{"note":"","data":["81224DC6 00FF"],"options":null},"Infinite\\Time":{"note":"","data":["81224DCC 00FF"],"options":null},"Never Wins\\Player 1":{"note":"","data":["80224DB5 0000"],"options":null},"Never Wins\\Player 2":{"note":"","data":["80224DB7 0000"],"options":null}},"0578F24F-9175BF17-C:4A":{"Car Select":{"note":"","data":["D00F5180 0000","800F5180 00??"],"options":{"Chevrolet Camaro":"03","Chrysler Jeep Jeepster (Prototype)":"08","Default":"00","Dodge Viper":"04","Donkey In Glass Box":"0E","Ferrari F40":"07","Hotdog":"0A","Hummer H1":"05","Jeep Wrangler":"02","McLaren F1":"09","Mitsubishi Eclipse":"01","Nintendo 64 Logo":"0C","Nintendo Power Car":"0B","Porsche 911 Turbo":"06","Taco":"0D"}},"Infinite\\Max Acceleration\\Player 1":{"note":"","data":["800F518D 0005"],"options":null},"Infinite\\Max Acceleration\\Player 2":{"note":"","data":["800F5379 0005"],"options":null},"Infinite\\Max Acceleration\\Player 3":{"note":"","data":["800F5565 0005"],"options":null},"Infinite\\Max Acceleration\\Player 4":{"note":"","data":["800F5751 0005"],"options":null},"Infinite\\Max Handling\\Player 1":{"note":"","data":["800F518C 0005"],"options":null},"Infinite\\Max Handling\\Player 2":{"note":"","data":["800F5378 0005"],"options":null},"Infinite\\Max Handling\\Player 3":{"note":"","data":["800F5564 0005"],"options":null},"Infinite\\Max Handling\\Player 4":{"note":"","data":["800F5750 0005"],"options":null},"Infinite\\Max Money\\Player 1":{"note":"","data":["800F5185 000F"],"options":null},"Infinite\\Max Money\\Player 2":{"note":"","data":["800F5371 000F"],"options":null},"Infinite\\Max Money\\Player 3":{"note":"","data":["800F555D 000F"],"options":null},"Infinite\\Max Money\\Player 4":{"note":"","data":["800F5749 000F"],"options":null},"Infinite\\Max Top Speed\\Player 1":{"note":"","data":["800F518E 0005"],"options":null},"Infinite\\Max Top Speed\\Player 2":{"note":"","data":["800F537A 0005"],"options":null},"Infinite\\Max Top Speed\\Player 3":{"note":"","data":["800F5566 0005"],"options":null},"Infinite\\Max Top Speed\\Player 4":{"note":"","data":["800F5752 0005"],"options":null},"Infinite\\Nitro\\Player 1":{"note":"","data":["800F518F 0009"],"options":null},"Infinite\\Nitro\\Player 2":{"note":"","data":["800F537B 0009"],"options":null},"Infinite\\Nitro\\Player 3":{"note":"","data":["800F5567 0009"],"options":null},"Infinite\\Nitro\\Player 4":{"note":"","data":["800F5753 0009"],"options":null},"Laps 2 Race":{"note":"","data":["80118760 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"[Press F9]\\All Cars (All Modes)":{"note":"","data":["880E99CB 000E","881023B1 000E"],"options":null},"[Press F9]\\Jump To Season 6":{"note":"","data":["881023A8 0005"],"options":null}},"0684FBFB-5D3EA8A5-C:45":{"All levels complete":{"note":"","data":["800D13C4 000C","800D13C5 000A","800D13C6 000A","800D13C7 000A","800D13C8 000A","800D13C9 000A"],"options":null},"Infinite\\\u0026 Max Minerals":{"note":"","data":["50000C04 0000","810B1D46 FFFF","50000C04 0000","810B1D44 3B9A","50000C04 0000","810B1D46 C9FF"],"options":null},"Infinite\\\u0026 Max Vespene Gas":{"note":"","data":["50000C04 0000","810B1D76 FFFF","50000D04 0000","810B1D74 3B9A","50000D04 0000","810B1D76 C9FF"],"options":null}},"07861842-A12EBC9F-C:45":{"Always Low Temp":{"note":"","data":["810E4F98 0000","810E4F9A 0000"],"options":null},"Auto-Pilot Always On Turbo (Original Excitebike Mode)":{"note":"","data":["810E3142 19AA"],"options":null},"Earthquake Mode":{"note":"","data":["810D7010 3AD0"],"options":null},"Fast\\Movement (Drones)":{"note":"","data":["800D9D55 00A0"],"options":null},"Fast\\Movement (Player)":{"note":"","data":["800D9D65 00AF"],"options":null},"Max Stunt Points":{"note":"","data":["810E4D18 0098","810E4D1A 967F"],"options":null},"No\\Collision Drivers":{"note":"","data":["800D9D34 0040"],"options":null},"No\\Overheating":{"note":"","data":["800CA984 00C3"],"options":null},"Power Turbo":{"note":"","data":["800CA99C 0040","800CA99D 00E0"],"options":null},"Slow\\Movement (Drones)":{"note":"","data":["800D9D55 0060"],"options":null},"Slow\\Movement (Player)":{"note":"","data":["800D9D65 0060"],"options":null},"Steering Control":{"note":"","data":["800C9E50 0040"],"options":null},"Super Speed For All":{"note":"","data":["800CA9A0 0040","800CA9A1 0070"],"options":null},"Unlock\\Difficulties \u0026 All Special Tracks":{"note":"","data":["810F2D50 FFFF"],"options":null},"Unlock\\Silver \u0026 Gold Cup":{"note":"","data":["810F2D4E 0003"],"options":null}},"079501B9-AB0232AB-C:4A":{"All Equipment Registered":{"note":"","data":["50001402 0000","810F40D8 FFFF"],"options":null},"All Equipment Unhighlighted":{"note":"","data":["50001402 0000","810F4100 FFFF"],"options":null},"All Equipment Unlocked":{"note":"","data":["50001402 0000","810F40B0 FFFF"],"options":null},"All Help Notes Available For Player 1":{"note":"","data":["50000602 0000","810F409C FFFF"],"options":null},"All Stuff Available For Player 1":{"note":"This modifies your save file. That will make all the multiplayer stages available, as well as unlocking every part. The actual breakdown is:","data":["50003802 0000","810F4230 FFFF"],"options":null},"Side Invincible\\Player 1":{"note":"","data":["811FC00C 447A"],"options":null},"Side Invincible\\Player 2":{"note":"","data":["811FC034 447A"],"options":null}},"07A69D01-9A7D41A1-C:50":{"Have 6 Carrots":{"note":"","data":["80164519 007E"],"options":null},"Have All\\Collectibles\\Stage 1":{"note":"","data":["80164510 0014"],"options":null},"Have All\\Collectibles\\Stage 2":{"note":"","data":["80164511 0014"],"options":null},"Have All\\Collectibles\\Stage 3":{"note":"","data":["80164512 0014"],"options":null},"Have All\\Collectibles\\Stage 4":{"note":"","data":["80164513 0014"],"options":null},"Have All\\Collectibles\\Stage 5":{"note":"","data":["80164514 0014"],"options":null},"Have All\\Collectibles\\Stage 6":{"note":"","data":["80164515 0014"],"options":null},"Have All\\Costumes":{"note":"","data":["8016451A 00FE"],"options":null},"Have All\\Levels":{"note":"","data":["80164508 003F"],"options":null},"Infinite Health":{"note":"","data":["8018BA7D 000F"],"options":null},"Max Collectable Items":{"note":"","data":["80164501 0014"],"options":null},"Press L To levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D018BAB5 0020","8118B9E0 4200"],"options":null}},"07C1866E-5775CCDE-C:50":{"Max Constructor Points":{"note":"","data":["8103A8F8 03E7"],"options":null},"Max Driver Points":{"note":"","data":["8103A8F6 03E7"],"options":null}},"07F3B276-EC8F3D39-C:45":{"Have All\\Races":{"note":"","data":["81088756 FFFF"],"options":null},"Have All\\Tracks":{"note":"","data":["8108875A FFFF"],"options":null},"Infinite Credits":{"note":"","data":["8008D659 0063"],"options":null},"Unlock All Characters \u0026 Extra Cheats":{"note":"","data":["81088750 FFFF","81088752 FFFF"],"options":null}},"08123595-0510F1DE-C:45":{"1-Hit Death\\Player 1":{"note":"","data":["D01502AA 0064","811502AA 0100"],"options":null},"1-Hit Death\\Player 2":{"note":"","data":["D0152926 0064","81152926 0100"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["811502AA 6400"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["811502AA 6400"],"options":null},"Infinite Jetpack\\Player 1":{"note":"","data":["811502B2 3200"],"options":null},"Infinite Jetpack\\Player 2":{"note":"","data":["8115292E 3200"],"options":null},"Infinite Shield\\Player 1":{"note":"","data":["811502AE 6400"],"options":null},"Infinite Shield\\Player 2":{"note":"","data":["8115292A 6400"],"options":null},"Needs 1 Match to Win\\Player 1":{"note":"","data":["D015029B 0000","8015029B 0001"],"options":null},"Needs 1 Match to Win\\Player 2":{"note":"","data":["D0152917 0000","80152917 0001"],"options":null},"Never Wins\\Player 1":{"note":"","data":["8015029B 0000"],"options":null},"Never Wins\\Player 2":{"note":"","data":["80152917 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["801ABB2B 00??"],"options":{"ChainSaw":"0D","Mutilator":"0C","PainMaster":"0B","She-Freak":"0A"}}},"0894909C-DAD4D82D-C:45":{"Big\\Glove Mode":{"note":"","data":["800F401D 0001"],"options":null},"Big\\Head Mode":{"note":"","data":["800F401C 0001"],"options":null},"Infinite\\Creation Points":{"note":"","data":["81063742 0064"],"options":null},"Player 1\\Character Modifier":{"note":"","data":["800EC6F3 00??"],"options":{"Alameda":"23","Ali":"00","Ang":"2B","Argnello":"13","Barclay":"32","Bazzel":"44","Botti":"2D","Bristov":"2C","Bunch":"3F","Butterbean":"07","Carr":"0E","Coallier":"49","Created Boxer":"1A","Creater Boxer":"1B","De La Hoya":"08","Dempsey":"1C","Dexter":"42","Di Ricco":"36","Duran":"0B","Eckhardt":"27","Eklund":"46","F. Sandoval":"2A","Frazier":"01","Garrett":"31","Giolito":"30","Greenberg":"3B","Hagler":"0A","Hasson":"22","Holmes":"02","Holyfield":"03","Hopra":"26","Hsu":"43","IUppa":"1E","K. Orr":"1D","Kelley":"17","Lajoie":"3A","Leonard":"09","Lewis":"04","Lupidi":"34","M. Broadhurst":"38","Manfredy":"16","Mayweather":"15","Moskey":"11","O'Grady":"14","Parker":"28","Perone":"3D","Philippine":"37","Pole":"21","Pryor":"12","Quartey":"0D","Quinn":"3C","Random":"19","Reid":"10","Romero":"18","Ruiz":"29","S. Broadhurst":"20","S. Orr":"2E","S. Sandoval":"1F","Scott":"25","Spinks":"06","St. Aubyn":"40","Tallarico":"47","Thompson":"45","Tool":"3E","Tua":"05","Vargas":"0F","W. Aguitar":"35","Wahlberg":"24","Weaver":"39","Wells":"41","Whitaker":"0C","Wynne":"33","Zarifes":"2F","de Leon":"48"}},"Player 1\\Infinite\\Health":{"note":"","data":["8106B974 42C8","8106B976 0000"],"options":null},"Player 1\\Max\\Power":{"note":"","data":["8106B980 0000","8106B982 0BB2"],"options":null},"Player 1\\No Health":{"note":"","data":["8106B974 0000","8106B976 0000"],"options":null},"Player 1\\No Power":{"note":"","data":["8106B980 0000","8106B982 0000"],"options":null},"Player 1\\Power Punch After 1st Punch":{"note":"","data":["8006B983 0064"],"options":null},"Player 2\\Character Modifier":{"note":"","data":["800EC6F7 00??"],"options":{"Alameda":"23","Ali":"00","Ang":"2B","Argnello":"13","Barclay":"32","Bazzel":"44","Botti":"2D","Bristov":"2C","Bunch":"3F","Butterbean":"07","Carr":"0E","Coallier":"49","Created Boxer":"1A","Creater Boxer":"1B","De La Hoya":"08","Dempsey":"1C","Dexter":"42","Di Ricco":"36","Duran":"0B","Eckhardt":"27","Eklund":"46","F. Sandoval":"2A","Frazier":"01","Garrett":"31","Giolito":"30","Greenberg":"3B","Hagler":"0A","Hasson":"22","Holmes":"02","Holyfield":"03","Hopra":"26","Hsu":"43","IUppa":"1E","K. Orr":"1D","Kelley":"17","Lajoie":"3A","Leonard":"09","Lewis":"04","Lupidi":"34","M. Broadhurst":"38","Manfredy":"16","Mayweather":"15","Moskey":"11","O'Grady":"14","Parker":"28","Perone":"3D","Philippine":"37","Pole":"21","Pryor":"12","Quartey":"0D","Quinn":"3C","Random":"19","Reid":"10","Romero":"18","Ruiz":"29","S. Broadhurst":"20","S. Orr":"2E","S. Sandoval":"1F","Scott":"25","Spinks":"06","St. Aubyn":"40","Tallarico":"47","Thompson":"45","Tool":"3E","Tua":"05","Vargas":"0F","W. Aguitar":"35","Wahlberg":"24","Weaver":"39","Wells":"41","Whitaker":"0C","Wynne":"33","Zarifes":"2F","de Leon":"48"}},"Player 2\\Infinite\\Health":{"note":"","data":["8106BA7C 42C8","8106BA7E 0000"],"options":null},"Player 2\\Max\\Power":{"note":"","data":["8106BA88 0000","8106BA8A 0BB2"],"options":null},"Player 2\\No Health":{"note":"","data":["8106BA7C 0000","8106BA7E 0000"],"options":null},"Player 2\\No Power":{"note":"","data":["8106BA88 0000","8106BA8A 0000"],"options":null},"Player 2\\Power Punch After 1st Punch":{"note":"","data":["8006BA8B 0064"],"options":null},"Ring Modifier":{"note":"","data":["800EC703 00??"],"options":{"Caesars Palace":"01","Ecko Sports Arena":"02","Great Western Forum":"00","International Arena":"03","Knockout Kings Arena":"08","Local 440":"04","Roppongi Palace":"06","The Colosseum":"05","Wembley Arena":"07"}},"Stop Timer":{"note":"","data":["81067546 001C"],"options":null}},"08D49262-03763D39-C:00":{"God Mode":{"note":"","data":["80774EB7 00??"],"options":{"Off":"00","On":"01"}}},"08FFA4B7-01F453B6-C:45":{"All Boards Complete":{"note":"","data":["50001802 0000","810B3578 0001"],"options":null},"Always 1st/Low Time":{"note":"","data":["81350C02 0000","80350C17 0063"],"options":null},"Free Ride Complete\\Stage 1-Boarder":{"note":"","data":["800B357A 0001"],"options":null},"Free Ride Complete\\Stage 1-Skier":{"note":"","data":["800B3578 0001"],"options":null},"Free Ride Complete\\Stage 2-Boarder":{"note":"","data":["800B3586 0001"],"options":null},"Free Ride Complete\\Stage 2-Skier":{"note":"","data":["800B3584 0001"],"options":null},"Free Ride Complete\\Stage 3-Boarder":{"note":"","data":["800B3592 0001"],"options":null},"Free Ride Complete\\Stage 3-Skier":{"note":"","data":["800B3590 0001"],"options":null},"Free Ride Complete\\Stage 4-Boarder":{"note":"","data":["800B359E 0001"],"options":null},"Free Ride Complete\\Stage 4-Skier":{"note":"","data":["800B359C 0001"],"options":null},"Giant Slalom Complete\\Stage 1-Boarder":{"note":"","data":["800B3582 0001"],"options":null},"Giant Slalom Complete\\Stage 1-Skier":{"note":"","data":["800B3580 0001"],"options":null},"Giant Slalom Complete\\Stage 2-Boarder":{"note":"","data":["800B358E 0001"],"options":null},"Giant Slalom Complete\\Stage 2-Skier":{"note":"","data":["800B358C 0001"],"options":null},"Giant Slalom Complete\\Stage 3-Boarder":{"note":"","data":["800B359A 0001"],"options":null},"Giant Slalom Complete\\Stage 3-Skier":{"note":"","data":["800B3598 0001"],"options":null},"Giant Slalom Complete\\Stage 4-Boarder":{"note":"","data":["800B35A6 0001"],"options":null},"Giant Slalom Complete\\Stage 4-Skier":{"note":"","data":["800B35A4 0001"],"options":null},"Infinite Stamina":{"note":"","data":["8034F798 0012"],"options":null},"Slalom Complete\\Stage 1-Boarder":{"note":"","data":["800B357E 0001"],"options":null},"Slalom Complete\\Stage 1-Skier":{"note":"","data":["800B357C 0001"],"options":null},"Slalom Complete\\Stage 2-Boarder":{"note":"","data":["800B358A 0001"],"options":null},"Slalom Complete\\Stage 2-Skier":{"note":"","data":["800B3588 0001"],"options":null},"Slalom Complete\\Stage 3-Boarder":{"note":"","data":["800B3596 0001"],"options":null},"Slalom Complete\\Stage 3-Skier":{"note":"","data":["800B3594 0001"],"options":null},"Slalom Complete\\Stage 4-Boarder":{"note":"","data":["800B35A2 0001"],"options":null},"Slalom Complete\\Stage 4-Skier":{"note":"","data":["800B35A0 0001"],"options":null}},"09465AC3-F8CB501B-C:50":{"Always Have Wallet Size":{"note":"","data":["801189FA 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C6A7D 0010","81119CBE 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["80119841 00FF","80119CB7 00??"],"options":{"Off":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C6A7D 0000","80119D6B 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["8002399C 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801189DE 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801189DF 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801189E0 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801189E1 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1850 0005","801EE290 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801189FA 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801189FB 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801189F9 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189F4 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189FC 30FF","811189FE FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801189D0 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801189D6 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801189DC 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["801189D4 0009"],"options":null},"Have\\Bombs":{"note":"","data":["801189CE 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["801189D8 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["801189CD 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["801189CC 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["801189CF 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["801189D2 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["801189D5 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["801189D9 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["801189DA 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["801189D1 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["801189D7 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["801189DD 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["801189DB 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["801189D3 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["801189E7 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["50000B01 0000","80118A00 0007","50000501 0000","80118A17 0009","80118A1F 0009","80118A21 0009","80118A24 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801189EC 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["801189E6 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801189E5 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801189EA 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801189E4 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118988 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118991 0008","80118992 0001","80118994 0001","8011898B 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801189F2 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["81119D24 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["80119D29 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["80119D2D 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D011BB37 0020","811D9410 40CB","D011BB37 0000","811D9C32 000D","801189C8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119D61 00??"],"options":{"English":"00","French":"02","German":"01"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["80118A27 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["80118A29 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["81118986 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["81119D20 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D011BB37 0020","811D9C32 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D011BB37 0020","811D9410 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C6A7D 0010","8011895F 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["81118964 ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["801189E2 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["801189E3 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["801189C8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["80118996 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119B7A 0000","81119B7C 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"096A40EA-8ABE0A10-C:45":{"Cheat Select":{"note":"","data":["8109ACBE ????"],"options":{"All Of The Above":"0FFF","All Pick-Ups Are Grapple":"0040","All Pick-Ups Are Green":"0010","All Pick-Ups Are Red":"0004","All Pick-Ups Are Yellow":"0008","Maintain Speed Off Track":"0001","No Chassis":"0400","No Driver":"0800","No Wheels":"0200","Pick-Ups Are Maximum":"0080","Reversed Rocket Racer Run Track":"0020","Rocket Cars":"0002","Turbo Mode":"0100"}},"Have All Tracks and Building Pieces":{"note":"","data":["812576D4 FFFF","812576D6 FFFF"],"options":null}},"09CC4801-E42EE491-C:4A":{"Infinite Fuel\\Gyrocopter":{"note":"","data":["80355211 0081"],"options":null},"Infinite Fuel\\Rocket Belt":{"note":"","data":["80355231 0081"],"options":null},"Infinite Photos":{"note":"","data":["81342F5E 0000"],"options":null},"Music Volume Select":{"note":"","data":["8025C454 00??"],"options":{"Max Volume":"04","Medium Volume":"02","No Music":"00"}},"Time Always 00'00'10":{"note":"This Cheat code is for All Events","data":["80355140 0001"],"options":null}},"09D53E16-3AB268B9-C:45":{"Almost Always Hit A Home Run":{"note":"","data":["80195714 0001"],"options":null},"Away Team\\Score 0":{"note":"Do not use with Away Team Scors 30","data":["801606B5 0000"],"options":null},"Away Team\\Score 30":{"note":"Do not use with Away Team Scors 30","data":["801606B5 001E"],"options":null},"Fast Game":{"note":"","data":["80195729 0001"],"options":null},"Home Team\\Score 0":{"note":"Do not use with Home Team Scors 30","data":["801606B7 0000"],"options":null},"Home Team\\Score 30":{"note":"Do not use with Home Team Scors 0","data":["801606B7 001E"],"options":null},"Increased Gravity":{"note":"","data":["80195727 0001"],"options":null},"Infinite\\Balls":{"note":"","data":["801606D0 0000"],"options":null},"Infinite\\Strikes":{"note":"","data":["801606D1 0000"],"options":null},"Low Gravity":{"note":"","data":["80195726 0001"],"options":null},"Slow Game":{"note":"","data":["8019572A 0001"],"options":null},"Stadium Modifier":{"note":"","data":["800DE7E5 00??"],"options":{"3 Rivers Stadium":"16","3com Park at Candle Stick Park":"06","Baltimore":"05","Bank One Ballpark":"03","Bush Stadium":"15","Cinergy Field":"12","Comiskey Park":"07","Coors Field":"08","Devil's Thumb Stadium":"1E","Dodger Stadium":"0F","Edison Into Field":"00","Fenway Park":"0A","Hubert Humphrey Metrodome":"1A","Jacobs Field":"0B","Kauffman Stadium":"0D","Milwaukee County Stadium":"04","Oakland Alameda Country Stadium":"10","Olympics Stadium":"09","Proplayer Stadium":"0C","Qualcomm Stadium at Jack Murphy Field":"11","Shea Stadium":"13","Skydome":"14","The Astrodome":"02","The Ball Park At Arlington":"01","The Kingdom":"0E","Tiger Stadium":"17","Tropicane Field":"18","Turner Field":"19","Veterans Stadium":"1B","Wrigley Field":"1C","Yankee Stadium":"1D"}}},"0A1667C7-293346A6-C:50":{"1 Win To Win\\Player 1":{"note":"","data":["D00C0983 0000","800C0983 0001"],"options":null},"1-Hit Death to Player 1\\Player 2":{"note":"","data":["D10B5EF0 42C8","810B5EF0 4080"],"options":null},"1-Hit Death to Player 2\\Player 1":{"note":"","data":["D10B60D4 42C8","810B60D4 4080"],"options":null},"Fight Forest Team":{"note":"Select Hardest Difficulty + Quest Mode","data":["810BF482 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["810B5EF0 42C8"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["810B60D4 42C8"],"options":null},"Invisibility\\Player 1":{"note":"","data":["810BF3A2 0001"],"options":null},"Join River Team":{"note":"Select Quest Mode","data":["810BF482 0001"],"options":null},"Needs 1 Win To Win\\Player 2":{"note":"","data":["D00C0985 0000","800C0985 0001"],"options":null},"P1 Never Wins\\Player 2":{"note":"","data":["800C0983 0000"],"options":null},"P2 Never Wins\\Player 1":{"note":"","data":["800C0985 0000"],"options":null},"Player 1 Has No Energy\\Player 2":{"note":"","data":["810B5EF0 C080"],"options":null},"Player 2 Has No Energy\\Player 1":{"note":"","data":["810B60D4 C080"],"options":null},"Unlock Titan Difficulty Level":{"note":"","data":["810BF4D2 0001"],"options":null}},"0A5D8F83-98C5371A-C:50":{"All Equipment Upgrades":{"note":"","data":["801E6F5D 0023","811E6FAA 201B","801E6F3C 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03DE37B 0000","801E6EF2 00??"],"options":{"Beneaf the Graveyard":"02","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Green Blobs":"71","Inside The Royal Palace of the Deku Kingdom 1":"4E","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House":"00","Outside Magic Hag's Potion Shop":"08","Outside The Royal Palace of the Deku Kingdom":"4A","Outside Tourist Information Southern Swamp":"06","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Waterfall Sothern Swamp":"7F"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801E6F72 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801E6F73 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801E6F74 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801E6F75 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801E6F76 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801E6F77 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801E6F65 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801E6F6B 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801E6F71 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Have Item Modifier":{"note":"","data":["801E6F70 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\All Masks":{"note":"","data":["811E6F78 3E39","811E6F7A 4745","811E6F7C 4032","811E6F7E 3A46","811E6F80 3842","811E6F82 4833","811E6F84 3C3D","811E6F86 373F","811E6F88 3634","811E6F8A 4341","811E6F8C 3B44","811E6F8E 4935"],"options":null},"Have\\Bombchu":{"note":"","data":["801E6F67 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801E6F66 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801E6F69 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801E6F68 0008"],"options":null},"Have\\Fire Arrow":{"note":"","data":["801E6F62 0002"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801E6F70 0010"],"options":null},"Have\\Have\\Ocarina of Time":{"note":"","data":["801E6F60 0000"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801E6F61 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801E6F6F 000F"],"options":null},"Have\\Ice Arrow":{"note":"","data":["801E6F63 0003"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801E6F6E 000E"],"options":null},"Have\\Light Arrow":{"note":"","data":["801E6F64 0004"],"options":null},"Have\\Magic Beans":{"note":"","data":["801E6F6A 000A"],"options":null},"Have\\Pictograph":{"note":"","data":["801E6F6D 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801E6F6C 000C"],"options":null},"Have\\QuestStatus Items":{"note":"","data":["801E6FAD 0005","811E6FAE F7CF"],"options":null},"Infinite\\Health":{"note":"","data":["811E6F26 03E7"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811E6F24 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"This is Infinite use of Bombs,Bombchus,Deku Sticks,Deku Nuts,Magic Beans,\u0026 Powder Kegs. But you must also put it's Have on to work.","data":["801E6F91 0063","50000801 0000","801E6F96 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801E6F29 0060","811E6F30 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811E6F2A 03E7"],"options":null},"Play As":{"note":"","data":["801E6F10 00??"],"options":{"- Fierce Deity Link":"00","Deku Link":"03","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03DE37B 0020","813F7658 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You have been warned.","data":["801E6F3C 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F30F6 0008","811E6F06 FFFD","D01F30F6 0004","811E6F06 0000","D01F30F6 0002","811E6F06 FFFE"],"options":null},"Use all C Buttons":{"note":"","data":["811EAE08 0000","811EAE0A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["803DE37A 0000","803F6BD5 0001","813F6BDA ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"0AA0055B-7637DF65-C:50":{"Infinite Time\\Basketball Gym":{"note":"","data":["8029F901 0042"],"options":null},"Infinite Time\\Cecil's Flying Toys":{"note":"","data":["802A5575 0042"],"options":null},"Infinite Time\\Flight Test Range":{"note":"","data":["802BA3A9 0042"],"options":null},"Infinite Time\\Slippery Slide":{"note":"","data":["802A7E8D 0042"],"options":null},"Infinite\\Atoms":{"note":"","data":["80159667 00C8"],"options":null},"Infinite\\Health":{"note":"","data":["80026DE3 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["80026DE7 0063"],"options":null},"Infinite\\Quarks":{"note":"","data":["80159663 00C8"],"options":null},"Tennis CPU Can't Score":{"note":"","data":["801D7B4B 0000"],"options":null}},"0AC61D39-ABFA03A6-C:50":{"Access all items In Inventory":{"note":"","data":["8111F8BE 1FFF"],"options":null},"Tickets\\Gold":{"note":"","data":["8111F8C8 FFFF"],"options":null},"Tickets\\Red":{"note":"","data":["8111F8C6 FFFF"],"options":null}},"0ADAECA7-B17F9795-C:45":{"Always Have Retreat \u0026 Elem Pedra Opened":{"note":"Do not put this on until in-game or the game will freeze.","data":["D01A1C92 0000","811A1C92 0003"],"options":null},"Day Always 00":{"note":"","data":["811F108C 0000"],"options":null},"Finish All Levels":{"note":"","data":["81196AA6 5454","81196AA8 5140","81196AAA 4555","81196AAC 9514","81196AAE 5515"],"options":null},"Hour Always":{"note":"","data":["80196A4D 00??"],"options":{"(0 Hour - 24:00 PM - Midnight)":"00","(01:00 AM)":"01","(02:00 AM)":"02","(03:00 AM)":"03","(04:00 AM)":"04","(05:00 AM)":"05","(06:00 AM)":"06","(07:00 AM)":"07","(08:00 AM)":"08","(09:00 AM)":"09","(10:00 AM)":"0A","(11:00 AM)":"0B","(12:00 PM - Noon)":"0C","(13:00 - 1 PM)":"0D","(14:00 - 2 PM)":"0E","(15:00 - 3 PM)":"0F","(16:00 - 4 PM)":"10","(17:00 - 5 PM)":"11","(18:00 - 6 PM)":"12","(19:00 - 7 PM)":"13","(20:00 - 8 PM)":"14","(21:00 - 9 PM)":"15","(22:00 - 10 PM)":"16","(23:00 - 11 PM)":"17"}},"Infinite Goth":{"note":"","data":["81196A8E FFFF"],"options":null},"Magnus\\Infinite HP":{"note":"","data":["81193C30 03E7"],"options":null},"Magnus\\Level 99":{"note":"","data":["80193C2B 0063"],"options":null},"Magnus\\Max Agi":{"note":"","data":["81193C3C 03E7"],"options":null},"Magnus\\Max Dex":{"note":"","data":["81193C3E 03E7"],"options":null},"Magnus\\Max HP":{"note":"","data":["81193C2E 03E7"],"options":null},"Magnus\\Max Int":{"note":"","data":["81193C38 03E7"],"options":null},"Magnus\\Max Mem":{"note":"","data":["81193C3A 03E7"],"options":null},"Magnus\\Max Str":{"note":"","data":["81193C34 03E7"],"options":null},"Magnus\\Max Vit":{"note":"","data":["81193C36 03E7"],"options":null},"Max Goth":{"note":"","data":["81196A8C 0098","81196A8E 967F"],"options":null},"Open All Paths":{"note":"","data":["81196AA0 01FF","81196AA2 677F","81196AA4 FCFF"],"options":null}},"0B58B8CD-B7B291D2-C:50":{"Have Alien Artifact":{"note":"","data":["8004DC8F 0001"],"options":null},"Infinite Ammo All Weapons":{"note":"","data":["50001102 0000","81048176 8000"],"options":null},"Infinite\\Fuel":{"note":"","data":["8004E46C 0050"],"options":null},"Infinite\\Greece":{"note":"","data":["81052B48 0098","81052B4A 967F"],"options":null},"Infinite\\Health":{"note":"","data":["8004DD1C 0002"],"options":null},"Item Modifier":{"note":"","data":["8004DC7F ????"],"options":{"All Items":"FFFF","Crank":"0040","Hangar Key":"0400","Heirglyph Map Piece":"0100","Howitzer Shells":"0002","Nothing":"0000","Windmill Cog":"0080"}},"Level Select":{"note":"","data":["80047FC3 00??"],"options":{"America":"03","Comet":"05","Greece":"01","Java":"02","Siberia":"04"}},"No Humans Killed":{"note":"","data":["8104819A 0000"],"options":null},"Press L To Wall Over Water, Climb Hills":{"note":"","data":["D0047609 0020","8104DD02 0808"],"options":null},"Weapon Select\\1st Position":{"note":"","data":["80048168 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\2nd Position":{"note":"","data":["80048169 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\3rd Position":{"note":"","data":["8004816A 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\4th Position":{"note":"","data":["8004816B 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\5th Position":{"note":"","data":["8004816C 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\6th Position":{"note":"","data":["8004816D 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\7th Position":{"note":"","data":["8004816E 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\8th Position":{"note":"","data":["8004816F 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}}},"0B6B4DDB-9671E682-C:45":{"Cheats Enabled Modifier":{"note":"","data":["8008F840 ????"],"options":{"Anyway (Race Circuits Backwards)":"0400","Big Wheels (Big Foot Cars)":"0040","Car Radio (Remote Control Cars)":"0100","Chopper (Top Down View)":"0200","Easy Money (You Get 1":"0008","Extra Resolution (Able To Change Resolution In Options Screen)":"0800","Fast Bucks (You Get 250":"0004","Skywalker (Hover Cars)":"0080","Smurfing (High Pitched Voices)":"0020","Trophies (Second And Third Championships Wins)":"0010"}},"Have\\Access All Trophies":{"note":"Also gives you all extra features in quick race \u0026 Trophy mode","data":["800BA9EB 0007","800BABFF 0007"],"options":null},"Have\\Always 1st":{"note":"","data":["800C1ED1 0001","800C1ED3 0001"],"options":null},"Have\\Easy Win":{"note":"Right After Start,Go, Quit Race, And you Have Won","data":["800BABFD 000A"],"options":null},"Have\\Infinite Max Cash":{"note":"","data":["810BABF4 3AFF","810BABF6 F454"],"options":null},"Have\\Infinite Supply Of Super Tires":{"note":"For All Cars","data":["5000220C 0000","810BACA8 0F0F","5000220C 0000","810BACAA 0F0F"],"options":null},"Have\\Lots Of Seasons":{"note":"","data":["810BABFA 03E7"],"options":null},"Have\\Max Race Points":{"note":"","data":["800BAC0E 00FF"],"options":null},"Have\\Max Upgrade":{"note":"For All Cars","data":["5000220C 0200","810BACA6 0270"],"options":null},"Race Options\\Laps To Race Select":{"note":"","data":["800A4599 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Race Options\\Race Direction Select":{"note":"","data":["800A4551 00??"],"options":{"Mirrored Normal":"02","Mirrored Reverse":"03","Normal":"00","Reverse":"01"}},"Race Options\\Track Select":{"note":"","data":["8008F9AD 00??"],"options":{"Area 51":"04","Chateau":"07","Docklands":"08","Lumber Mill":"03","Oilfields":"05","Rocket Base":"00","Ski Resort":"02","Temple":"01","Titus Park":"09","Tudor Village":"06"}},"Race Options\\View Select":{"note":"Select your View and then at start of Race press C-Up Button","data":["D00C20B1 0000","800C20C1 00??"],"options":{"Behind View":"01","Distant Behind View":"0B","Further Behind View":"02","Helicopter View":"FF","Inside Car":"00"}},"Special Category\\A Car [Mind Star 600]":{"note":"","data":["810BADDE 3D70","810BADE0 0F0F","810BADE2 0F0F"],"options":null},"Special Category\\B Car [Vertige Stallion]":{"note":"","data":["800BAD66 2378","810BAD68 0F0F","810BAD6A 0F0F"],"options":null},"Special Category\\C Car [Mind Star 200R]":{"note":"","data":["810BACD6 0A78","810BACD8 0F0F","810BACDA 0F0F"],"options":null}},"0B93051B-603D81F9-C:45":{"All 52 Gold Gems Collected":{"note":"","data":["8016F540 0003","8016F541 007E","8016F542 00FF","8016F543 00EF","8016F544 00FF","8016F545 007F","8016F546 00FF","8016F547 00FC"],"options":null},"All Stages \u0026 Chapters Unlocked":{"note":"","data":["8016F548 003B"],"options":null},"Infinite Health\\Marina":{"note":"","data":["810ED0E0 03E8"],"options":null},"Infinite Health\\Teran":{"note":"","data":["810F1D60 03E8"],"options":null},"Infinite\\Max Red Gems":{"note":"","data":["81175B66 270F"],"options":null},"Level Select":{"note":"To access this anytime during game, press L+R+Z to enable the menu. Press D-Pad Up / Down to move through the menu, D-Pad Left / Right to change level digits and then press Start to enter level. Don not do this whhile in pause mode (Start Button Pause) or the game will freeze.","data":["D10BC4E8 2030","800BC4E1 0004"],"options":null}},"0C41F9C2-01717A0D-C:46":{"Have 1 Star\\Abdul":{"note":"","data":["80307433 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["8030742F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80307432 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80307431 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80307434 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80307430 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["8030742E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80307435 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80307436 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["80209981 0000","802048A3 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802048A7 0000","8020B849 0000"],"options":null},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EF67B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0209837 0000","80209837 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020B6FF 0000","8020B6FF 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810ADBDC 3F80"],"options":null}},"0C581C7A-3D6E20E4-C:4A":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D51D0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112CD0E 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800EAFC8 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D51B0 0001","50001701 0000","800D51B8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D5440 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D547B 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D51A9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D51AA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D51AB 0003"],"options":null}},"0C5EE085-A167DD3E-C:45":{"Activate Cheat":{"note":"","data":["810A63C6 F5FF"],"options":null},"Arabian Flights\\Infinite Time":{"note":"","data":["810A593E FFFF"],"options":null},"Arabian Flights\\Max Tickets":{"note":"","data":["810A5930 FFFF","810A5932 FFFF","810A5934 FFFF","810A5936 FFFF","810A5938 FFFF","810A593A FFFF","810A593C FFFF"],"options":null},"Clowney Island\\Infinite Time":{"note":"","data":["810A590E FFFF"],"options":null},"Clowney Island\\Max Tickets":{"note":"","data":["810A5900 FFFF","810A5902 FFFF","810A5904 FFFF","810A5906 FFFF","810A5908 FFFF","810A590A FFFF","810A590C FFFF"],"options":null},"Food Fright\\Infinite Time":{"note":"","data":["810A595E FFFF"],"options":null},"Food Fright\\Max Tickets":{"note":"","data":["810A5950 FFFF","810A5952 FFFF","810A5954 FFFF","810A5956 FFFF","810A5958 FFFF","810A595A FFFF","810A595C FFFF"],"options":null},"Have All\\Machine Parts":{"note":"","data":["810A5960 FFFF"],"options":null},"Have All\\Vechicles":{"note":"","data":["810A5968 FFFF"],"options":null},"Infinite\\Max Health":{"note":"","data":["8109F702 000C","8109F706 000C"],"options":null},"Max\\Ticket Switches":{"note":"","data":["810A59A2 00C8"],"options":null},"Max\\Tinker Toys":{"note":"","data":["810A599E 270F"],"options":null},"Mine Blowing\\Infinite Time":{"note":"","data":["810A592E FFFF"],"options":null},"Mine Blowing\\Max Tickets":{"note":"","data":["810A5920 FFFF","810A5922 FFFF","810A5924 FFFF","810A5926 FFFF","810A5928 FFFF","810A592A FFFF","810A592C FFFF"],"options":null},"Paint Misbehaving\\Infinite Time":{"note":"","data":["810A591E FFFF"],"options":null},"Paint Misbehaving\\Max Tickets":{"note":"","data":["810A5910 FFFF","810A5912 FFFF","810A5914 FFFF","810A5916 FFFF","810A5918 FFFF","810A591A FFFF","810A591C FFFF"],"options":null},"Pyramid Scheme\\Infinite Time":{"note":"","data":["810A594E FFFF"],"options":null},"Pyramid Scheme\\Max Tickets":{"note":"","data":["810A5940 FFFF","810A5942 FFFF","810A5944 FFFF","810A5946 FFFF","810A5948 FFFF","810A594A FFFF","810A594C FFFF"],"options":null},"Whoopie World\\Infinite Time":{"note":"","data":["810A58FE FFFF"],"options":null},"Whoopie World\\Max Tickets":{"note":"","data":["810A58F0 FFFF","810A58F2 FFFF","810A58F4 FFFF","810A58F6 FFFF","810A58F8 FFFF","810A58FA FFFF","810A58FC FFFF"],"options":null}},"0C814EC4-58FE5CA8-C:45":{"Infinite Health":{"note":"","data":["81086BCA 0038","800BAF97 0007"],"options":null}},"0CAD17E6-71A5B797-C:50":{"All Tanx \u0026 All Campaigns":{"note":"","data":["50001370 0000","81120546 FFFF","50001370 0000","8112054A FFFF"],"options":null},"All Weapons \u0026 Invulnerable":{"note":"","data":["81121420 0101"],"options":null},"Infinite Edge Power":{"note":"","data":["811A8D20 000A","8111AD08 000A","811AC1E4 000A","811ACB7E 000A","811AAEB4 000A","811AE378 000A","811AD514 000A","811AA51C 000A"],"options":null},"Infinite Tank Credits":{"note":"","data":["8124AB3E 03E7"],"options":null},"Inincibility":{"note":"","data":["81121420 0100"],"options":null},"Level Select":{"note":"","data":["811150B8 0001"],"options":null},"Score Aid":{"note":"","data":["8124A152 FC9A"],"options":null}},"0CB81686-5FD85A81-C:45":{"Away Team\\Always Has The Ball":{"note":"","data":["810590A8 0001","810590AA 0000"],"options":null},"Enable\\Stadium\\4th And Incas":{"note":"","data":["800591A0 00FF"],"options":null},"Enable\\Stadium\\Alpha Blitz":{"note":"","data":["8005919E 00FF"],"options":null},"Enable\\Stadium\\Cosmodome":{"note":"","data":["800591A2 00FF"],"options":null},"Enable\\Stadium\\Dodge City":{"note":"","data":["80059198 00FF"],"options":null},"Enable\\Stadium\\EA Sports":{"note":"","data":["800591A3 00FF"],"options":null},"Enable\\Stadium\\Gridiron":{"note":"","data":["8005919D 00FF"],"options":null},"Enable\\Stadium\\Maddenstein":{"note":"","data":["800591A1 00FF"],"options":null},"Enable\\Stadium\\New Orleans":{"note":"","data":["800591A6 00FF"],"options":null},"Enable\\Stadium\\Nile High":{"note":"","data":["8005919F 00FF"],"options":null},"Enable\\Stadium\\Salvage Field":{"note":"","data":["8005919C 00FF"],"options":null},"Enable\\Stadium\\San Diego":{"note":"","data":["800591A7 00FF"],"options":null},"Enable\\Stadium\\Tampa Bay":{"note":"","data":["800591A5 00FF"],"options":null},"Enable\\Stadium\\Tib Bros":{"note":"","data":["8005919A 00FF"],"options":null},"Enable\\Stadium\\Tiberium":{"note":"","data":["8005919B 00FF"],"options":null},"Enable\\Stadium\\Tiburon":{"note":"","data":["800591A4 00FF"],"options":null},"Enable\\Stadium\\Xmas Rush":{"note":"","data":["80059199 00FF"],"options":null},"Enable\\Team\\All 60's":{"note":"","data":["800598CC 00FF"],"options":null},"Enable\\Team\\All 70's":{"note":"","data":["800598CD 00FF"],"options":null},"Enable\\Team\\All 80's":{"note":"","data":["800598CE 00FF"],"options":null},"Enable\\Team\\All 90's":{"note":"","data":["800598CF 00FF"],"options":null},"Enable\\Team\\Clows":{"note":"","data":["800598D7 00FF"],"options":null},"Enable\\Team\\Comets":{"note":"","data":["800598DF 00FF"],"options":null},"Enable\\Team\\EA Sports":{"note":"","data":["800598D3 00FF"],"options":null},"Enable\\Team\\Industrials":{"note":"","data":["800598DA 00FF"],"options":null},"Enable\\Team\\Junkyard Dogs":{"note":"","data":["800598D9 00FF"],"options":null},"Enable\\Team\\Madden 1999":{"note":"","data":["800598D0 00FF"],"options":null},"Enable\\Team\\Madden Millenium":{"note":"","data":["800598D1 00FF"],"options":null},"Enable\\Team\\Marshalls":{"note":"","data":["800598D5 00FF"],"options":null},"Enable\\Team\\Monsters":{"note":"","data":["800598DE 00FF"],"options":null},"Enable\\Team\\Mummies":{"note":"","data":["800598DC 00FF"],"options":null},"Enable\\Team\\NFL Millenium":{"note":"","data":["800598D2 00FF"],"options":null},"Enable\\Team\\Praetorians":{"note":"","data":["800598D8 00FF"],"options":null},"Enable\\Team\\Sugarbuzz":{"note":"","data":["800598DB 00FF"],"options":null},"Enable\\Team\\Tiburon":{"note":"","data":["800598D4 00FF"],"options":null},"Enable\\Team\\Toymakers":{"note":"","data":["800598D6 00FF"],"options":null},"Enable\\Team\\Vipers":{"note":"","data":["800598DD 00FF"],"options":null},"Have All Secret Codes In Menu":{"note":"","data":["81070788 FFFF","8107078A FFFF","8107078C FFFF","8107078E FFFF"],"options":null},"Home Team\\Always Has The Ball":{"note":"","data":["810590A8 0000","810590AA 0001"],"options":null},"Infinite\\Time-Outs Away Team":{"note":"","data":["8006FE6F 0003"],"options":null},"Infinite\\Time-Outs Home Team":{"note":"","data":["8006CE7F 0003"],"options":null},"Level 1\\200 Yards Of Total Offense Or More":{"note":"","data":["800707C1 0040"],"options":null},"Level 1\\3 Tackles Or More By One Player":{"note":"","data":["800707B7 0040"],"options":null},"Level 1\\Complete A 20 Yard Run Or Longer":{"note":"","data":["800707B1 0040"],"options":null},"Level 1\\Complete A 30 Yard Pass Or Longer":{"note":"","data":["800707B0 0040"],"options":null},"Level 1\\Create A Player And use Him In A Game":{"note":"","data":["800707BA 0040"],"options":null},"Level 1\\Defeat Green Bay In Snow At Lambeau Field":{"note":"","data":["800707B8 0040"],"options":null},"Level 1\\Defeat San Francisco In Rain At 3COM Park":{"note":"","data":["800707B9 0040"],"options":null},"Level 1\\Have A Minimium Of Three Players ON Team Catch One Pass":{"note":"","data":["800707C3 0040"],"options":null},"Level 1\\Hold Your Oppnent to 7 Points Or Less In a Game":{"note":"","data":["800707B3 0040"],"options":null},"Level 1\\Intercept At Least One Pass":{"note":"","data":["800707BF 0040"],"options":null},"Level 1\\Kick A 40 Yard Field Goal Or Longer":{"note":"","data":["800707B5 0040"],"options":null},"Level 1\\Kick A 40 Yard Punt Or Longer":{"note":"","data":["800707B6 0040"],"options":null},"Level 1\\Play A Exhibition Game In A QTR Length Other Than 5 Minutes":{"note":"","data":["800707BB 0040"],"options":null},"Level 1\\Play And Win One Game of The Tournment":{"note":"","data":["800707C2 0040"],"options":null},"Level 1\\Play a Exhibition Game In A Stadium Other Than The Default One":{"note":"","data":["800707BE 0040"],"options":null},"Level 1\\QB Passes For Two TDS Or More":{"note":"","data":["800707BC 0040"],"options":null},"Level 1\\Recover At Least One Fumble":{"note":"","data":["800707C0 0040"],"options":null},"Level 1\\Sack The Opposing QB":{"note":"","data":["800707BD 0040"],"options":null},"Level 1\\Score 21 Points Or More With A QTR Length Of 6 Minutes Or Less":{"note":"","data":["800707B2 0040"],"options":null},"Level 1\\Throw 0 Interceptions In A Game":{"note":"","data":["800707B4 0040"],"options":null},"Level 2\\100 Recption Yards Or Greater By One Player":{"note":"","data":["800707C6 0040"],"options":null},"Level 2\\100 Yards Of Rushing Or Greater By One Player":{"note":"","data":["800707C5 0040"],"options":null},"Level 2\\2 TDS Or More By One Receiver":{"note":"","data":["800707D7 0040"],"options":null},"Level 2\\3 Field Goals Or More By One Player":{"note":"","data":["800707C8 0040"],"options":null},"Level 2\\6 Receptions Or Greater By One Player":{"note":"","data":["800707CE 0040"],"options":null},"Level 2\\Commit No Fumbles In A Game":{"note":"","data":["800707D2 0040"],"options":null},"Level 2\\Complete a 60 Yard Pass Or Longer":{"note":"","data":["800707D4 0040"],"options":null},"Level 2\\Do Not Allow Your QB To Be Sacked In A Game":{"note":"","data":["800707D3 0040"],"options":null},"Level 2\\Have A RB Who Rushes For 3 TDS Or More":{"note":"","data":["800707CF 0040"],"options":null},"Level 2\\Hold Opposing Team To 150 Yards Total Offense Or Less":{"note":"","data":["800707D0 0040"],"options":null},"Level 2\\Play And Win A Pro Bowl Game As The AFC Team":{"note":"","data":["800707D6 0040"],"options":null},"Level 2\\Play And Win A Pro Bowl Game As The NFC Team":{"note":"","data":["800707D5 0040"],"options":null},"Level 2\\Play And Win One Franchise Mode Game":{"note":"","data":["800707CA 0040"],"options":null},"Level 2\\Play And Win One Season Mode Game With Modified Divisions":{"note":"","data":["800707CC 0040"],"options":null},"Level 2\\Play And Win One Season Mode Game Without Modified Divisions":{"note":"","data":["800707CB 0040"],"options":null},"Level 2\\Play And Win Two Games In A Tournment With The Same Team":{"note":"","data":["800707CD 0040"],"options":null},"Level 2\\QB Passes 300 Yards Or More":{"note":"","data":["800707C7 0040"],"options":null},"Level 2\\QB Passes For 4 TDS Or More":{"note":"","data":["800707C9 0040"],"options":null},"Level 2\\QB Rushes For One Rushing TD Or More":{"note":"","data":["800707D1 0040"],"options":null},"Level 2\\Score 40 Points Or More Within A Quarter Length Of 6 Minutes Or Less":{"note":"","data":["800707C4 0040"],"options":null},"Level 3\\150 Reception Yards Or Greater By One Player":{"note":"","data":["800707D9 0040"],"options":null},"Level 3\\150 Yards Rushing Or Greater By One Player":{"note":"","data":["800707D8 0040"],"options":null},"Level 3\\2 Interceptions Or More By One Player":{"note":"","data":["800707DC 0040"],"options":null},"Level 3\\3 Knockdowns Or More By One PLayer":{"note":"","data":["800707DF 0040"],"options":null},"Level 3\\3 Sacks Or More By One Player":{"note":"","data":["800707DB 0040"],"options":null},"Level 3\\3 Tips Or More By One Player":{"note":"","data":["800707E0 0040"],"options":null},"Level 3\\400 Yards Of Total Defense Or More":{"note":"","data":["800707EA 0040"],"options":null},"Level 3\\5 Successful Field Goals Or More By One Player":{"note":"","data":["800707DE 0040"],"options":null},"Level 3\\8 Tackles Or More By One Player":{"note":"","data":["800707E9 0040"],"options":null},"Level 3\\Break 2 Different All-Time Records Or More In A Game":{"note":"","data":["800707E7 0040"],"options":null},"Level 3\\Commit No Penalties In A Game":{"note":"","data":["800707E6 0040"],"options":null},"Level 3\\Complete A 50 Yard Run Or Longer":{"note":"","data":["800707E5 0040"],"options":null},"Level 3\\Have A RB Rush For Over 100 Yards And 50 Yards Receiving":{"note":"","data":["800707EB 0040"],"options":null},"Level 3\\Play And Win A Superbowl In Franchise Mode":{"note":"","data":["800707E1 0040"],"options":null},"Level 3\\Play And Win A Superbowl In Season Mode":{"note":"","data":["800707E2 0040"],"options":null},"Level 3\\Play And Win An 8 Team Tournament":{"note":"","data":["800707E4 0040"],"options":null},"Level 3\\QB Who Passes For 400 Yards Or More":{"note":"","data":["800707DA 0040"],"options":null},"Level 3\\Recover 2 Fumbles Or More":{"note":"","data":["800707DD 0040"],"options":null},"Level 3\\Score 55 Points Or Greater":{"note":"","data":["800707E8 0040"],"options":null},"Level 3\\Successfully Kick 8 Extra Points Or More":{"note":"","data":["800707E3 0040"],"options":null},"Level 4\\200 Receptions Yards Or Greater By One Player":{"note":"","data":["800707ED 0040"],"options":null},"Level 4\\200 Yards Rushing Or Greater By One Player":{"note":"","data":["800707EC 0040"],"options":null},"Level 4\\25 Completions Or More By One QB":{"note":"","data":["800707F2 0040"],"options":null},"Level 4\\40 First Downs Or More":{"note":"","data":["800707FE 0040"],"options":null},"Level 4\\6 Successful Two Point Conversions Or More":{"note":"","data":["800707F1 0040"],"options":null},"Level 4\\650 Yards Of Total Offense Or More By One Team":{"note":"","data":["800707F9 0040"],"options":null},"Level 4\\7 Sacks Or More By One Player":{"note":"","data":["800707F8 0040"],"options":null},"Level 4\\Go Undefeated And Win A Superbowl In One Franchise Mode Season By Playing Every Game":{"note":"","data":["800707F3 0040"],"options":null},"Level 4\\Go Undefeated And Win A Superbowl In One Season Mode Season By Playing Every Game":{"note":"","data":["800707F4 0040"],"options":null},"Level 4\\Have A Minimum Of 7 Members Of Your Team Catch At Least 1 Pass":{"note":"","data":["800707F6 0040"],"options":null},"Level 4\\Have One Reciever With 150 RAC Yards Or Greater":{"note":"","data":["800707FA 0040"],"options":null},"Level 4\\Kick A Punt Of 55 Yards Or More":{"note":"","data":["800707FF 0040"],"options":null},"Level 4\\QB Who Passes For 500 Yards Or More":{"note":"","data":["800707EE 0040"],"options":null},"Level 4\\QB Who Rushes For 75 Yards Or More":{"note":"","data":["800707F5 0040"],"options":null},"Level 4\\Return A Punt For A Touchdown":{"note":"","data":["800707EF 0040"],"options":null},"Level 4\\Return An Interception For A Touchdown":{"note":"","data":["800707F0 0040"],"options":null},"Level 4\\Rush For 100 Yards Or More With 2 Different Running Backs":{"note":"","data":["800707FC 0040"],"options":null},"Level 4\\Rush The Ball 40 Time Or More With A QTR Length Of 6 Minutes Or Less":{"note":"","data":["800707FB 0040"],"options":null},"Level 4\\Win A 16 Team Tournament":{"note":"","data":["800707F7 0040"],"options":null},"Level 4\\Win By A Margin Of 50 Points Or More":{"note":"","data":["800707FD 0040"],"options":null},"Level 5\\200 Kick Return Yards Or Greater By One Player":{"note":"","data":["80070809 0040"],"options":null},"Level 5\\200 Punt Return Yards Or Greater By One Player":{"note":"","data":["80070806 0040"],"options":null},"Level 5\\250 Yards Rushing Or Greater By One Player":{"note":"","data":["80070813 0040"],"options":null},"Level 5\\3 Receivers With 100 Yards Or More Recieving":{"note":"","data":["80070805 0040"],"options":null},"Level 5\\Break 4 Different All-Time Records Or More In A Game":{"note":"","data":["8007080D 0040"],"options":null},"Level 5\\Complete A Run Play Of 80 Yards Or More":{"note":"","data":["8007080A 0040"],"options":null},"Level 5\\Convert 10 4th Down Conversions Or More":{"note":"","data":["8007080B 0040"],"options":null},"Level 5\\Convert To 3RD Down Conversions Or More":{"note":"","data":["80070812 0040"],"options":null},"Level 5\\Have A QB With A 100 Passing PCT While Throwing A Minimum Of 5 Passes":{"note":"","data":["8007080F 0040"],"options":null},"Level 5\\Have A QB With A Pass AVG Of 30 Yards Or Greater While Throwing At Least 5 Passes":{"note":"","data":["80070801 0040"],"options":null},"Level 5\\Have A RB With A Rushing AVG Of 20 Yards Or Greater While Rushing At least 3 Times":{"note":"","data":["80070804 0040"],"options":null},"Level 5\\Pass For 200 Yards Or More With 2 QBS":{"note":"","data":["80070803 0040"],"options":null},"Level 5\\Play And Win A Minimum Of Four Superbowls With The Same Team In Franchise Mode":{"note":"","data":["80070810 0040"],"options":null},"Level 5\\QB Rushes For 3 Touchdowns Or More":{"note":"","data":["80070807 0040"],"options":null},"Level 5\\QB With A Minimum Of 150 Yards Passing And 100 Yards Rushing":{"note":"","data":["8007080C 0040"],"options":null},"Level 5\\RB With A Minimum Of 100 Yards Receiving And 100 Yards Rushing":{"note":"","data":["80070811 0040"],"options":null},"Level 5\\Return A Kickoff For A Touchdown":{"note":"","data":["80070800 0040"],"options":null},"Level 5\\Score 80 Points Or Greater":{"note":"","data":["80070808 0040"],"options":null},"Level 5\\Shut Out Opposing Team With A QTR Length Of 5 Minutes":{"note":"","data":["80070802 0040"],"options":null},"Level 5\\Successfully Kick A FG Of 55 Yards Or More":{"note":"","data":["8007080E 0040"],"options":null},"No Time-Outs\\Away Team":{"note":"","data":["8006EF6F 0000"],"options":null},"No Time-Outs\\Home Team":{"note":"","data":["8006EC7F 0000"],"options":null},"Particle Illusions\\A":{"note":"","data":["8005F19B 00FE"],"options":null},"Particle Illusions\\B":{"note":"","data":["8005F199 0002"],"options":null},"Players\\Evil Crystal":{"note":"","data":["8005F183 000F"],"options":null},"Players\\Generic Black \u0026 White":{"note":"","data":["8005F233 0058"],"options":null},"Players\\Hallow":{"note":"","data":["8005F233 0047"],"options":null},"Players\\Jagged":{"note":"","data":["8005F180 0080"],"options":null},"Players\\Pixel":{"note":"","data":["8005F18D 0001"],"options":null},"Players\\Polygon":{"note":"","data":["8005F183 0001"],"options":null},"Players\\Super Red":{"note":"","data":["8005F43E 0002"],"options":null},"Press GS For More Time To Choose Play":{"note":"","data":["890723E6 0024"],"options":null},"Press L For First Down\\Player 1":{"note":"","data":["D00753DD 0020","81071B18 0001"],"options":null},"Press L For First Down\\Player 2":{"note":"","data":["D00753E5 0020","81071B18 0001"],"options":null},"Press L For First Down\\Player 3":{"note":"","data":["D00753ED 0020","81071B18 0001"],"options":null},"Press L For First Down\\Player 4":{"note":"","data":["D00753F5 0020","81071B18 0001"],"options":null},"Press R For Fourth Down\\Player 1":{"note":"","data":["D00753DD 0010","81071B18 0004"],"options":null},"Press R For Fourth Down\\Player 2":{"note":"","data":["D00753E5 0010","81071B18 0004"],"options":null},"Press R For Fourth Down\\Player 3":{"note":"","data":["D00753ED 0010","81071B18 0004"],"options":null},"Press R For Fourth Down\\Player 4":{"note":"","data":["D00753F5 0010","81071B18 0004"],"options":null},"Uniforms\\Bare":{"note":"","data":["8005F188 008F"],"options":null},"Uniforms\\Future":{"note":"","data":["8005F207 0033"],"options":null},"Uniforms\\Ghetto":{"note":"","data":["8005F188 001F"],"options":null}},"0CEBC4C7-0C9CE932-C:4A":{"Gun 4-Way Shot":{"note":"","data":["801279B3 0004"],"options":null},"Infinite Fuel":{"note":"","data":["811279B6 FFFF"],"options":null},"Infinite Shield":{"note":"","data":["81127958 0264"],"options":null},"Infinite Weapon\\1st Position":{"note":"","data":["811276CA 03E7"],"options":null},"Infinite Weapon\\2nd Position":{"note":"","data":["811276CE 03E7"],"options":null},"Infinite Weapon\\3rd Position":{"note":"","data":["811276D2 03E7"],"options":null},"Infinite Weapon\\4th Position":{"note":"","data":["811276D6 03E7"],"options":null},"Infinite Weapon\\5th Position":{"note":"","data":["811276DA 03E7"],"options":null},"Max Score":{"note":"","data":["811276B6 FFFF"],"options":null},"Stage Select On":{"note":"","data":["81127706 0001"],"options":null},"Weapon Modifier\\Gun Weapon":{"note":"","data":["801279B3 00??"],"options":{"2-Way Shot":"02","3-Way Shot":"03","4-Way Shot":"04","No Weapon":"00","Normal Shot":"01"}},"Weapon Modifier\\Rockets\\Slot 1":{"note":"","data":["801276C9 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\Rockets\\Slot 2":{"note":"","data":["801276CD 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\Rockets\\Slot 3":{"note":"","data":["801276D1 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}}},"0D93BA11-683868A6-C:50":{"Access all crystals":{"note":"","data":["50000701 0000","800D6EC0 0001","50001701 0000","800D6EC8 0007"],"options":null},"Access all difficulty levels":{"note":"100 yard hop, bumper crop bump \u0026 checkerboard chase","data":["50000301 0000","800D6E69 0003"],"options":null},"Access all enemy info":{"note":"","data":["50005101 0000","800D6F10 0002"],"options":null},"All Levels completed":{"note":"You must still beat boss's to continue onto next level","data":["50002B01 0000","800D6EE0 0002"],"options":null},"All Save Slots 100% Completed\\Save slot 1":{"note":"","data":["800ECD18 0064"],"options":null},"All Save Slots 100% Completed\\Save slot 2":{"note":"","data":["800ECD70 0064"],"options":null},"All Save Slots 100% Completed\\Save slot 3":{"note":"","data":["800ECDC8 0064"],"options":null},"Infinite Max Health":{"note":"","data":["800D718F 0006","800D7151 00C0"],"options":null},"Infinite Max Lives":{"note":"","data":["800D714F 0064"],"options":null},"Kirkby can fly unlimited":{"note":"","data":["8012EADF 00F0"],"options":null}},"0DD4ABAB-B5A2A91E-C:45":{"Infinite Max DK Tokens":{"note":"","data":["803A8FD5 0063"],"options":null},"Infinite Max Health":{"note":"","data":["807B6760 0008","807B675F 0003"],"options":null}},"0DE2CE36-D41D29E6-C:4A":{"Infinite\\Max Body Stats":{"note":"","data":["81181788 270F","811817C8 0063","50000C02 0000","81181790 270F","50000502 0000","811817C0 270F","50000602 0000","811817E8 270F","50000602 0000","811817F6 270F"],"options":null},"Infinite\\Max Health":{"note":"","data":["81181780 270F","81181782 270F"],"options":null},"Infinite\\Weapons \u0026 Items":{"note":"Do not put this on until in game. This gives you all Weapons, Items and Keys and infinite use of.","data":["50002508 0000","80181B48 0063","50000808 0000","80181C70 0063"],"options":null},"Level 999":{"note":"","data":["811817C8 270F"],"options":null},"Level and Battle Select":{"note":"The level and battle select screen can be accessed by pressing A at the main menu","data":["801CFB94 0005"],"options":null},"Press L To Levitate":{"note":"","data":["D005D8D1 0020","8124C710 3FCB"],"options":null}},"0E31EDF0-C37249D5-C:50":{"Away Team scores 0 Goals":{"note":"","data":["801AF437 0000"],"options":null},"Away Team scores 25 Goals":{"note":"","data":["801AF437 0019"],"options":null},"Home Team scores 0 Goals":{"note":"","data":["801AF433 0000"],"options":null},"Home Team scores 25 Goals":{"note":"","data":["801AF433 0019"],"options":null}},"0E652C21-F19AD3DE-C:4A":{"Unlock All Jurassic World Dinosaurs":{"note":"","data":["8114237C 0101","8114237E 0101","80142380 0001"],"options":null},"Unlock All Planet Mars Characters":{"note":"","data":["81142384 0101","81142386 0101","80142388 0001"],"options":null},"Unlock All Sea World Animals":{"note":"","data":["81142374 0101","81142376 0101","80142378 0001"],"options":null}},"0EC158F5-FB3E6896-C:45":{"Buster Parts Slot Select\\Slot 01":{"note":"","data":["80204E03 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 02":{"note":"","data":["80204E04 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 03":{"note":"","data":["80204E05 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 04":{"note":"","data":["80204E06 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 05":{"note":"","data":["80204E07 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 06":{"note":"","data":["80204E08 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 07":{"note":"","data":["80204E09 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 08":{"note":"","data":["80204E0A 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 09":{"note":"","data":["80204E0B 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 10":{"note":"","data":["80204E0C 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 11":{"note":"","data":["80204E0D 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 12":{"note":"","data":["80204E0E 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 13":{"note":"","data":["80204E0F 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 14":{"note":"","data":["80204E10 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 15":{"note":"","data":["80204E11 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 16":{"note":"","data":["80204E12 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 17":{"note":"","data":["80204E13 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 18":{"note":"","data":["80204E14 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 19":{"note":"","data":["80204E15 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 20":{"note":"","data":["80204E16 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 21":{"note":"","data":["80204E17 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 22":{"note":"","data":["80204E18 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 23":{"note":"","data":["80204E19 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 24":{"note":"","data":["80204E1A 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 25":{"note":"","data":["80204E1B 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 26":{"note":"","data":["80204E1C 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 27":{"note":"","data":["80204E1D 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 28":{"note":"","data":["80204E1E 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 29":{"note":"","data":["80204E1F 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 30":{"note":"","data":["80204E20 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 31":{"note":"","data":["80204E21 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 32":{"note":"","data":["80204E22 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 33":{"note":"","data":["80204E23 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 01":{"note":"","data":["80204E00 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 02":{"note":"","data":["80204E01 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 03":{"note":"","data":["80204E02 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Freeze Timer at 00:00":{"note":"","data":["811BC3F4 0000","811BC3F6 0000"],"options":null},"Have\\All Special Weapons":{"note":"With this code, Roll is the one that has to equip the weapons before you can use them.","data":["81205640 FFFF"],"options":null},"Have\\Normal Items":{"note":"","data":["81205650 FFFF","81205652 FFFF","81205654 FFFF","81205656 FFFF"],"options":null},"Have\\Special Items":{"note":"","data":["8120564C FFFF","8120564E FFFF"],"options":null},"Infinite\\Ammo":{"note":"","data":["81204EBA 0080","81204EC2 0010","81204ECA 0708","81204ED2 0018","81204EDA 0010","81204EE2 0708","81204EEA 0020","81204EF2 0020","81204EFA 0020","81204F02 0018","81204F0A 012C","81204F12 0258"],"options":null},"Infinite\\Health":{"note":"","data":["81204A1E 0050"],"options":null},"Infinite\\Zenny":{"note":"","data":["811BC404 0098","811BC406 967F"],"options":null},"Rapid Fire":{"note":"","data":["80204EB3 0002"],"options":null}},"0F1FA987-BFC1AFA6-C:45":{"99 Points Player 1":{"note":"","data":["8010C1EF 0063"],"options":null},"Access All\\Cars \u0026 Tracks":{"note":"","data":["8104ACA6 0001"],"options":null},"Access All\\Cups":{"note":"","data":["800542F3 0003","800542D5 0000","800542D6 0000","800542D7 0000","8005431F 0003","80054301 0000","80054302 0000","80054303 0000","8005434B 0003","8005432D 0000","8005432E 0000","8005432F 0000"],"options":null},"Always 1st":{"note":"","data":["8111565E 0001","81115666 0000","8110C1EE 03E7"],"options":null},"Drones Have No Weapons":{"note":"","data":["8111CD7E 0000"],"options":null},"Infinite Continues":{"note":"","data":["8110C1E2 0006"],"options":null},"Infinite Weapons\\Player 1":{"note":"","data":["81115648 0000","8111564A 00??","8111564E 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 2":{"note":"","data":["81117B10 0000","81117B12 00??","81117B16 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 3":{"note":"","data":["81119FD8 0000","81119FDA 00??","81119FDE 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 4":{"note":"","data":["8111C4A0 0000","8111C4A2 00??","8111C4A6 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Laps To Race":{"note":"","data":["8107DBCE 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Number Of Drones In The Race":{"note":"","data":["8110FEA6 00??"],"options":{"1 Drone":"01","2 Drones":"02","3 Drones":"03","4 Drones":"04","5 Drones":"05","6 Drones":"06","7 Drones":"07","8 Drones":"08","9 Drones":"09"}}},"0F743195-D8A6DB95-C:50":{"Access\\All Guns \u0026 Infinite Ammo":{"note":"","data":["81207AB4 007F","81207AB6 FFFF","81207B84 03E7","50000A02 0000","81207B70 03E7"],"options":null},"Access\\All Items":{"note":"Press L Button Where Items Are available","data":["D0209D85 0020","81207B8C 007F"],"options":null},"Infinite\\Armour":{"note":"","data":["81207B44 0001","81207B46 03E7"],"options":null},"Infinite\\Health":{"note":"","data":["81207B24 03E7"],"options":null},"Level Select":{"note":"","data":["811C6B4E 0001"],"options":null},"Max\\Attributes":{"note":"","data":["50000502 0000","81207B28 0007"],"options":null},"Max\\Experience":{"note":"","data":["81207B26 03E7"],"options":null}},"102888BF-434888CA-C:45":{"Have All\\Keys":{"note":"","data":["50000410 0000","8017E130 0063","50000410 0000","8017E138 0063"],"options":null},"Have All\\Moves":{"note":"","data":["50005306 0000","81183CE0 0100","50005306 0000","81183CE2 00FF"],"options":null},"Have All\\Moves At Skill Level 250":{"note":"","data":["50000E06 0000","80188F63 00FA","50001306 0000","80188FBD 00FA","50003006 0000","80189047 00FA"],"options":null},"Infinite\\Max Body Stats":{"note":"","data":["8117DC48 270F","8117DC88 0063","50000C02 0000","8117DC50 270F","50000502 0000","8117DC80 270F","50000602 0000","8117DCA8 270F","50000602 0000","8117DCB6 270F"],"options":null},"Infinite\\Max Health":{"note":"","data":["8117DC40 270F","8117DC42 270F"],"options":null},"Infinite\\Refresh Items":{"note":"","data":["50000D10 0000","8017E008 0063","50000C10 0000","8017E010 0063"],"options":null},"Infinite\\Weapons \u0026 Items":{"note":"","data":["50000610 0000","8017E0D0 0063","50000610 0000","8017E0D8 0063"],"options":null},"Level 999":{"note":"","data":["8117DC88 270F"],"options":null},"Level and Battle Select":{"note":"The level and battle select screen can be accessed by pressing A at the main menu","data":["801CC8C4 0005"],"options":null},"Press L To Levitate":{"note":"","data":["D005CE51 0020","8124A0B0 3FCB"],"options":null}},"112051D2-68BEF8AC-C:45":{"Have\\Max Gold":{"note":"","data":["50000401 0000","80277335 00FF"],"options":null},"Have\\Max Total XP":{"note":"","data":["50000401 0000","80278BAD 00FF"],"options":null},"Have\\Max Total XP Remaning to Start":{"note":"This will give you 16777215 Total XP Remaning to start with and after your 1st batle will allow you to buy your Max Stats","data":["50000401 0000","80278BB1 00FF"],"options":null},"Infinite\\99 Health Potions":{"note":"Do Not put this cheat on until you have collected your 1st Health Potion from the 1st Cheat or you will not be able to get into the Sub menu and Continue the game.","data":["802785CB 0063"],"options":null},"Infinite\\Max Health":{"note":"","data":["80278B98 001E"],"options":null}},"1145443D-11610EDB-C:50":{"Extra Characters":{"note":"","data":["8007FA98 0001"],"options":null},"Fight With Bunny Slippers On":{"note":"","data":["81138914 0100"],"options":null},"Infinite Health Player 1":{"note":"","data":["8008B287 0064"],"options":null},"Infinite Health Player 2":{"note":"","data":["8008AEFF 0064"],"options":null},"Infinite\\Continues":{"note":"","data":["8015183B 0006"],"options":null},"Infinite\\Time":{"note":"","data":["8113C5BA 0B9E"],"options":null},"Infinite\\Time To Choose Character":{"note":"","data":["D0137ABE 0001","81137ABE 02A2"],"options":null},"Ned The Janitor":{"note":"","data":["8013C281 0001"],"options":null},"One Hit Death\\Player 1":{"note":"","data":["D008B287 0064","8008B287 0001"],"options":null},"One Hit Death\\Player 2":{"note":"","data":["D008AEFF 0064","8008AEFF 0001"],"options":null},"Play As Options\\Player 1":{"note":"","data":["8113C6E2 ????"],"options":{"AL-Rashid":"33FC","Big Guy with spikes and a skull staff":"34C4","Dregan":"358C","Executioner":"3334","Hellnight":"353C","Koyasha":"33AC","Lord Deimos":"335C","Monk dude with sword":"3514","Mordoskull":"344C","Namira":"449C","Pojo The Chicken":"3564","Ragnar":"33C4","Takeshi":"3424","Taria":"33D4","War Mech":"35B4","Xiao Lang":"3474"}},"Play As Options\\Player 2":{"note":"","data":["8113C6DE ????"],"options":{"AL-Rashid":"33FC","Big Guy with spikes and a skull staff":"34C4","Dregan":"358C","Executioner":"3334","Hellnight":"353C","Koyasha":"33AC","Lord Deimos":"335C","Monk dude with sword":"3514","Mordoskull":"344C","Namira":"449C","Pojo The Chicken":"3564","Ragnar":"33C4","Takeshi":"3424","Taria":"33D4","War Mech":"35B4","Xiao Lang":"3474"}}},"1185EC85-4B5A7731-C:50":{"Access\\All Levels \u0026 Superbikes":{"note":"","data":["50000304 0000","80183A0F 0001"],"options":null},"Access\\All Secret Characters":{"note":"This code is Fantastic, You have 12 characters to choose from to you race without any bike, just on foot","data":["50000C04 0000","80183A27 0001"],"options":null},"Access\\All Tracks":{"note":"","data":["50000BD8 0000","80182FC7 0001","50000CD8 0000","80182EF3 0001","50000CD8 0000","80182EF7 0001","50000CD8 0000","80182EFB 0001","50000CD8 0000","80182EFF 0001","50000CD8 0000","80182F03 0001","50000CD8 0000","80182F07 0001"],"options":null},"Infinite Lasers\\Player 1":{"note":"","data":["80170BD9 00C8"],"options":null},"Infinite Lasers\\Player 2":{"note":"","data":["80171241 00C8"],"options":null},"Infinite Lasers\\Player 3":{"note":"","data":["801718A9 00C8"],"options":null},"Infinite Lasers\\Player 4":{"note":"","data":["80171F11 00C8"],"options":null},"Infinite Nitros\\Player 1":{"note":"","data":["80170BA3 0004","80170BA7 0004"],"options":null},"Infinite Nitros\\Player 2":{"note":"","data":["8017120B 0004","8017120F 0004"],"options":null},"Infinite Nitros\\Player 3":{"note":"","data":["80171873 0004","80171877 0004"],"options":null},"Infinite Nitros\\Player 4":{"note":"","data":["80171EDB 0004","80171EDF 0004"],"options":null},"Infinite Shield\\Player 1":{"note":"","data":["80170BCD 00C8"],"options":null},"Infinite Shield\\Player 2":{"note":"","data":["80171235 00C8"],"options":null},"Infinite Shield\\Player 3":{"note":"","data":["8017189D 00C8"],"options":null},"Infinite Shield\\Player 4":{"note":"","data":["80171F05 00C8"],"options":null},"[Screen Hud Clear]":{"note":"If you are using a Plugin other then Jabos 1.5 and can not see through the Thick Hud on the Screen. then Let the game load 1st before Putting this code on,Or it will give an error and Freeze","data":["80092C6B 0004"],"options":null}},"11936D8C-6F2C4B43-C:50":{"Chunky\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FCA4C 0064"],"options":null},"Chunky\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FCA56 0064"],"options":null},"Chunky\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FCA54 0064"],"options":null},"Chunky\\All Golden Bananas\\DK Isle":{"note":"","data":["817FCA58 0064"],"options":null},"Chunky\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FCA4E 0064"],"options":null},"Chunky\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FCA52 0064"],"options":null},"Chunky\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FCA50 0064"],"options":null},"Chunky\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FCA4A 0064"],"options":null},"Chunky\\Infinite Coins":{"note":"","data":["817FCA0E 03E7"],"options":null},"Chunky\\Infinite Musical Instrument":{"note":"","data":["817FCA10 000A"],"options":null},"Diddy\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC932 0064"],"options":null},"Diddy\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC93C 0064"],"options":null},"Diddy\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC93A 0064"],"options":null},"Diddy\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC93E 0064"],"options":null},"Diddy\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC934 0064"],"options":null},"Diddy\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FC938 0064"],"options":null},"Diddy\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC936 0064"],"options":null},"Diddy\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC930 0064"],"options":null},"Diddy\\Infinite Coins":{"note":"","data":["817FC8F4 03E7"],"options":null},"Diddy\\Infinite Musical Instrument":{"note":"","data":["817FC8F6 000A"],"options":null},"Donkey Kong\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC8D4 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC8DE 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC8DC 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC8E0 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC8D6 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC8D8 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC8D2 03E7"],"options":null},"Donkey Kong\\Has Moves":{"note":"","data":["817FC890 0103"],"options":null},"Donkey Kong\\Have Weapon":{"note":"","data":["817FC892 0103"],"options":null},"Donkey Kong\\Infinite Ammo":{"note":"","data":["807FCB85 0096"],"options":null},"Donkey Kong\\Infinite Bananas\\Angry Aztec":{"note":"","data":["817FC89C 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Creepy Castle":{"note":"","data":["817FC8A6 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Crystal Caves":{"note":"","data":["817FC8A4 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\FactoryLevel":{"note":"","data":["817FC89E 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Fungi Forest":{"note":"","data":["817FC8A2 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Galleon Level":{"note":"","data":["817FC8FE 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Jungle Japes":{"note":"","data":["817FC89A 03E7"],"options":null},"Donkey Kong\\Infinite Coins":{"note":"","data":["817FC896 03E7"],"options":null},"Donkey Kong\\Infinite Musical Instrument":{"note":"","data":["817FC894 0103","817FC898 00FF"],"options":null},"Free Pass (Access All Areas)":{"note":"This is exactly what it says, You can walk through Any Locked Door,Gate, Or Area. Have Fun.","data":["8066D167 0001","8066D262 0001"],"options":null},"Infinite\\Camera Film":{"note":"","data":["807FCB89 0005"],"options":null},"Infinite\\Crystal Coconuts":{"note":"","data":["817FCB86 03E7"],"options":null},"Infinite\\Health":{"note":"","data":["817FCB8C 041F"],"options":null},"Infinite\\Orange Bombs":{"note":"","data":["807FCB81 0096"],"options":null},"Lanky\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC990 0064"],"options":null},"Lanky\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC99A 0064"],"options":null},"Lanky\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC998 0064"],"options":null},"Lanky\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC99C 0064"],"options":null},"Lanky\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC992 0064"],"options":null},"Lanky\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FC996 0064"],"options":null},"Lanky\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC994 0064"],"options":null},"Lanky\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC98E 0064"],"options":null},"Lanky\\Infinite Coins":{"note":"","data":["817FC952 03E7"],"options":null},"Lanky\\Infinite Musical Instrument":{"note":"","data":["817FC954 000A"],"options":null},"Tiny\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC9EE 0064"],"options":null},"Tiny\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC9E8 0064"],"options":null},"Tiny\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC9F6 0064"],"options":null},"Tiny\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC9FA 0064"],"options":null},"Tiny\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC9F0 0064"],"options":null},"Tiny\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FC9F4 0064"],"options":null},"Tiny\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC9F2 0064"],"options":null},"Tiny\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC9EC 0064"],"options":null},"Tiny\\Infinite Coins":{"note":"","data":["817FC9B0 03E7"],"options":null},"Tiny\\Infinite Musical Instrument":{"note":"","data":["817FC9B2 000A"],"options":null}},"12737DA5-23969159-C:4A":{"Always Normal Spirit\\Player 1":{"note":"","data":["8015D075 0032"],"options":null},"Always Normal Spirit\\Player 2":{"note":"","data":["8015D509 0032"],"options":null},"Always Normal Spirit\\Player 3":{"note":"","data":["8015D99D 0032"],"options":null},"Always Normal Spirit\\Player 4":{"note":"","data":["8015DE31 0032"],"options":null},"Always Special\\Player 1":{"note":"","data":["8015D0B5 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["8015D549 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["8015D9DD 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["8015DE71 0004"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 1":{"note":"","data":["8015D074 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 2":{"note":"","data":["8015D508 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 3":{"note":"","data":["8015D99C 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 4":{"note":"","data":["8015DE30 0064"],"options":null},"Have All Characters":{"note":"","data":["81094BDA FFFF"],"options":null},"Infinite Create-A-Wrestler Attribute Points":{"note":"","data":["8011069B 001E"],"options":null},"Max Attributes":{"note":"","data":["80110691 0032","80110693 0032","80110695 0032","80110697 0032","80110699 0032"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["8015D075 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["8015D509 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["8015D99D 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["8015DE31 00FF"],"options":null},"No Spirit\\Player 1":{"note":"","data":["8015D075 0000"],"options":null},"No Spirit\\Player 2":{"note":"","data":["8015D509 0000"],"options":null},"No Spirit\\Player 3":{"note":"","data":["8015D99D 0000"],"options":null},"No Spirit\\Player 4":{"note":"","data":["8015DE31 0000"],"options":null},"Specials Don't Run Out":{"note":"","data":["81120C14 2400"],"options":null},"Timer Is Always 00:00":{"note":"","data":["80164F2F 0000"],"options":null},"Ultimate Codes\\Player 1":{"note":"","data":["8015D074 0064"],"options":null},"Ultimate Codes\\Player 2":{"note":"","data":["8015D508 0064"],"options":null},"Ultimate Codes\\Player 3":{"note":"","data":["8015D99C 0064"],"options":null},"Ultimate Codes\\Player 4":{"note":"","data":["8015DE30 0064"],"options":null},"Weapon Select\\Player 1":{"note":"","data":["8115D0B6 0300","8115CC10 ????","8115CC12 0000","8015CCD0 0000"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 2":{"note":"","data":["8115D54A 0300","8115CC40 ????","8015CC42 0001","8015CCD1 0001"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 3":{"note":"","data":["8115D9DE 0300","8115CC70 ????","8015CC72 0002","8015CCD2 0002"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 4":{"note":"","data":["8115DE72 0300","8115CC98 ????","8115CC9A 0003","8015CCD3 0003"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}}},"132D2732-C70E9118-C:45":{"Always 1st\\Player 1":{"note":"This code doesn't record the win on the Time Trial Gold Challenge or the Weapons Gold Challenge.","data":["8109BC68 0001"],"options":null},"Freeze Checkpoint Timer":{"note":"","data":["810CDE92 0BCC"],"options":null},"Infinite Auto Pilot\\AG Systems\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BCE47 005B"],"options":null},"Infinite Auto Pilot\\Auricom\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC1E7 005B"],"options":null},"Infinite Auto Pilot\\Direx\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC817 005C"],"options":null},"Infinite Auto Pilot\\Feisar 1\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["811BC4FE 005B"],"options":null},"Infinite Auto Pilot\\Piranah\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC817 0060"],"options":null},"Weapon Select\\AG Systems":{"note":"","data":["811BCE3E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Auricom":{"note":"","data":["811BC1DE ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Direx":{"note":"","data":["811BC80E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Feisar 1":{"note":"","data":["811BC4F6 ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Piranah":{"note":"","data":["811BCB2E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"[In-Game Cheat Unlock]\\Cyclone Weapon":{"note":"","data":["80094F7E 00??"],"options":{"Off":"00","On":"01"}},"[In-Game Cheat Unlock]\\Infinite Ammo\\Player 1":{"note":"","data":["80091C24 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Ammo\\Player 2":{"note":"","data":["80093340 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Shield Energy\\Player 1":{"note":"","data":["80091C26 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Shield Energy\\Player 2":{"note":"","data":["80093342 0001"],"options":null},"[In-Game Cheat Unlock]\\[Ultimate Unlock All]":{"note":"This Unlocks All Levels, Tracks, Velocitar and Super Combo, Piranha 2 Ship, Cyclone Weapons Power Up and all 28 Gold Awards unlocked","data":["80091C25 0001","80091C2C 0020"],"options":null},"[Infinite Sheild]":{"note":"This cheat enabled fixes Av's popping up and spoiling you racing,it also gives you Infinite Sheild on all Cars,Tracks and Modes","data":["5000030C 0000","8109BCE2 0000","8109BD12 0000"],"options":null}},"13836389-265B3C76-C:45":{"Background\\Coloured Madden":{"note":"","data":["810596E0 0003"],"options":null},"Background\\Gray Madden":{"note":"","data":["810596E0 0000"],"options":null},"Background\\Green \u0026 Black Madden":{"note":"","data":["810596E0 0002"],"options":null},"Background\\Pink \u0026 Purple Madden":{"note":"","data":["810596E0 0004"],"options":null},"Background\\Pink Madden":{"note":"","data":["810596E0 0001"],"options":null},"Background\\Pinker Madden":{"note":"","data":["810596E0 0006"],"options":null},"Enable\\All Stadiums":{"note":"","data":["50000901 0000","80073510 00FF"],"options":null},"Enable\\All Teams":{"note":"","data":["50000901 0000","80073CF8 00FF"],"options":null},"Infinite\\Time Outs Away Team":{"note":"","data":["80084EE3 0003"],"options":null},"Infinite\\Time Outs Home Team":{"note":"","data":["80082D97 0003"],"options":null},"Invisible Players":{"note":"","data":["800545A0 0000","800545A0 0001","800545A0 0002","800545A0 0003"],"options":null},"No Time-Outs\\Away Team":{"note":"","data":["80084EE3 0000"],"options":null},"No Time-Outs\\Home Team":{"note":"","data":["80082D97 0000"],"options":null}},"142A17AA-13028D96-C:50":{"Freeze Enemies":{"note":"","data":["8008EE3B 0012"],"options":null},"Gore Mode":{"note":"","data":["8008EE37 0012"],"options":null},"Infinite\\Lives":{"note":"","data":["8008EE33 0012"],"options":null},"Infinite\\Primery Weapons":{"note":"","data":["8008EE30 0012"],"options":null},"Infinite\\Secondary Weapons":{"note":"","data":["8008EE31 0012"],"options":null},"Infinite\\Solaris":{"note":"Solaris are included in code","data":["8008EE3D 0012"],"options":null},"Infinite\\Titans":{"note":"Titans are included in code","data":["8008EE3C 0012"],"options":null},"Infinite\\Weapon Energy":{"note":"","data":["8008EE32 0012"],"options":null},"Invulnerability":{"note":"","data":["8008EE35 0012"],"options":null},"Level Select":{"note":"Accesses all Missions \u0026 Battle mode","data":["8008EE3E 0012"],"options":null},"One Shot Enemies":{"note":"","data":["8008EE3A 0012"],"options":null},"Psychedelic Mode":{"note":"","data":["8008EE39 0012"],"options":null},"Stealth Mode":{"note":"","data":["8008EE34 0012"],"options":null},"Turbo Mode":{"note":"","data":["8008EE38 0012"],"options":null},"Wireframe Mode":{"note":"","data":["8008EE36 0012"],"options":null}},"147E0EDB-36C5B12C-C:4A":{"(Press GS)\\To Kill Enemy":{"note":"Don't Press GS after the Enemy is killed, only during the fight! and only use on Press GS Cheat at a time","data":["891F2454 0000","891F2456 0000","891F2458 0000","891F245A 0000"],"options":null},"(Press GS)\\To Refill Health":{"note":"Don't Press GS after the Enemy is killed, only during the fight!","data":["891F0F18 42C8","891F0F1A 0000"],"options":null},"(Press L)\\ For One Hit Kill":{"note":"Don't Press L after the Enemy is killed, only during the fight!","data":["D0149DD5 0020","811F2458 0000","D0149DD5 0020","811F245A 0000"],"options":null},"(Press R)\\For Level Warp":{"note":"Press Reset and enjoy!","data":["D00D5115 0015","800D5115 00??"],"options":{"Credits 1":"18","Credits 2":"19","Credits 3":"1A","Level 01":"2B","Level 02":"2F","Level 03":"33","Level 04":"37","Level 05":"3B","Level 06":"3D","Level 07":"40","Level 08":"43","Level 09":"46","Level 10":"49","Level 11":"4C","Level 12":"4F","Level 12.5":"51","Level 13":"53"}},"Secret Beta 2 Player Test Mode":{"note":"Press Reset and enjoy! Secret 2 Player Test Mode? The Second Player doesn't move ;(","data":["D00D5115 0015","800D5115 0055"],"options":null}},"151F79F4-8EEDC8E5-C:50":{"Access All Characters":{"note":"","data":["81193CA4 3F00","50000602 0000","81193C98 1F1F"],"options":null},"All Quests Completed":{"note":"","data":["80193CA4 003F","50000C01 0000","80193C98 001F"],"options":null},"Max Stats All Characters":{"note":"","data":["50000B24 0000","811896EC 1414","50000B24 0000","811896EE 1400"],"options":null}},"155B7CDF-F0DA7325-C:55":{"Beta Bottles Revenge Mode":{"note":"Bottles Revenge is a Beta mode from Banjo Tooie that the RWP team recently uncovered after an extraordinary amount of effort. Bottles the Spirit transforms into Bottles the Devil and posses enemies nearby and allows a second player hooked up to Pad 2 to play as that Posses character to try to foil Banjos Plans. As player one goes about its business, player two uses every enemy nearby to try to nab Banjo and take away some life. This mode is incredible, and you can control almost every enemy in the game: slot machines, flying creatures, uggers, zubbas...and this is just the beginning. (Congrats Rare Witch Project)","data":["80130172 0001","8008B4D1 0002"],"options":null},"Infinite\\Air":{"note":"","data":["8112FDC2 42C8"],"options":null},"Infinite\\Energy\\Banjo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","8012059F 000A","801205A0 000A"],"options":null},"Infinite\\Energy\\Banjo and Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","81120584 0A0A"],"options":null},"Infinite\\Energy\\Bee":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","80120593 000A","80120594 000A"],"options":null},"Infinite\\Energy\\Detonator":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","811205AE 0A0A"],"options":null},"Infinite\\Energy\\Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","811205A2 0A0A"],"options":null},"Infinite\\Energy\\Mumbo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","811205A8 0A0A"],"options":null},"Infinite\\Energy\\Snowball":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","80120587 0005"],"options":null},"Infinite\\Energy\\Stony":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","80120599 000A","8011B44A 000A"],"options":null},"Infinite\\Energy\\Submarine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","801205A5 000A","801205A6 000A"],"options":null},"Infinite\\Energy\\T-Rex Baby":{"note":"","data":["8011FFA9 0063","801205BF 000A","801205C0 000A"],"options":null},"Infinite\\Energy\\Washing Machine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","81120596 0A0A"],"options":null},"Instant Warp\\Options\\Cauldron Keep":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Cauldron Keep":"015D","Colosseum kickball arena":"0180","Crazy Castle Stockade Jump the hoops multi":"017C","Crazy Castle Stockade balloon burst multi":"017B","Dodgems":"0186","Grunty Industries packing game":"017D","Gun chamber":"0160","Gun room still":"016A","The gatehouse":"015E","Tower of Tragedy Quiz":"015F"}},"Instant Warp\\Options\\Cloud Cuckoo Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Central cavern":"013A","Cloud Cuckoo Land 1":"0136","Cloud Cuckoo Land 2":"0161","Humba wumba's wigwam":"0140","Inside the cheesewedge":"0138","Inside the pot o gold":"013D","Inside the trashcan":"0137","Mingy jongo's skull":"013F","Mumbo's skull":"013E","Trash can mini":"0185","Zubba's nest":"0139","Zubba's nest multi":"0188"}},"Instant Warp\\Options\\Glitter Gulch Mine":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Canary cave":"00DB","Chuffy's cab":"00D0","Crushing shed":"00CB","Flooded caves":"00CC","Fuel depot":"00CA","Generator caverns":"00D3","Gloomy caverns":"00D2","Humba":"00E9","Inside chuffy's boiler boss":"00D1","Mine":"00C7","Mumbo's hut":"00D9","Mumbo's skull":"0171","Ordnance Storage entrance":"0163","Ordnance Storage game":"0164","Ordnance Storage game Multi":"0165","Ordnance storage":"00DC","Power hut":"00D4","Power hut basement":"00CF","Prospectors hut":"00D8","Testing":"0170","Toxic gas cave":"00DA","Train station":"00D7","Water storage":"00CD","Water supply pipe":"0126","Waterfall cavern":"00CE","Wumba's wigwam":"00D5"}},"Instant Warp\\Options\\Grunty Industries":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Basement":"010F","Basement \"repair depot":"0110","Basement \"waste disposal\"":"0111","Elevator shaft":"0105","Floor 2":"0106","Floor 2 \"electromagnet chamber\"":"0107","Floor 3":"0108","Floor 3 \"boiler plant\"":"0109","Floor 3 \"packing room\"":"010A","Floor 4":"010B","Floor 4 \"cable room\"":"010C","Floor 4 \"clinkers cavern\"":"0162","Floor 4 \"quality control\"":"010D","Floor 5":"010E","Inside":"0101","Mumbo's skull":"0172","Outside":"0100","Sewer entrance":"0187","Train station":"0102","Trash compactor":"0104","Water supply pipe":"0125","Workers quarters":"0103"}},"Instant Warp\\Options\\Hailfire Peaks":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Boggy's igloo":"0131","Chilli billi":"012B","Chilly willy":"012C","Colosseum kickball stadium lobby":"012D","Ice train station":"012A","Icicle grotto":"0132","Icy side":"0128","Icy side still":"0168","Inside the volcano":"0133","Lava side":"0127","Lava train station":"0129"}},"Instant Warp\\Options\\Isle O Hags":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Cliff top":"0155","Cliff top Mumbo's skull":"0156","Heggy's egg shed":"0150","Jiggywiggy's temple":"0151","Pine Grove":"0154","Plateau":"0152","Plateau \"Honey B's Hive\"":"0153","Quagmire":"015C","Wooded Hollow":"014F","inside another digger tunnel":"015B","wasteland":"015A"}},"Instant Warp\\Options\\Jinjo Village":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Black Jinjo's House":"0146","Blue Jinjo's House":"0148","Bottles house":"0143","Brown Jinjo's House":"014A","Green Jinjo's House":"0145","Jinjo Village":"0142","King Jingalings throne room":"0144","Orange Jinjo's House":"014B","Purple Jinjo's House":"014C","Red Jinjo's House":"014D","White Jinjo's House":"014E","Yellow Jinjo's House":"0147"}},"Instant Warp\\Options\\Jolly Roger's Lagoon":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Ancient Swimming Baths":"00F4","Atlantis":"01A8","Blubber's wave race hire":"00FF","Electric Eels lair":"00F6","Inside the big fish":"00F8","Jolly Roger's Lagoon":"01A7","Jolly's":"00ED","Pawno's emporium":"00EE","Seabottom":"01A9","Seaweed Sanctum":"00F7","mumbo's skull":"00EF","sea bottom cavern":"0181","submarine multi":"0182","temple of the fishes":"00FA"}},"Instant Warp\\Options\\Mayahem Temple":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Code chamber":"00BC","Humba's Wigwam":"00B6","Inside Targitzans Temple":"0178","Jade Snake Grove":"00C4","Kickball Arena":"00C9","Mayan Kickball Arena":"017F","Multi":"0166","Mumbo's skull":"00B7","Prison Compound":"00B9","Still":"0167","Targitzan Temple Lobby":"0179","Targitzan's Slighty Sacred Temple":"0177","Targitzan's Temple Boss":"017A","The Temple":"00B8","Treasure Chamber":"00C5"}},"Instant Warp\\Options\\Not sure":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8012C390 ????","8012C393 0001"],"options":{"Bottles house":"0143","Bottles house still":"0169","HAG Inside":"018A","HAG1 Final Boss":"019A","Humba Wumba's wigwam 1":"0135","Humba Wumba's wigwam 2":"0157","Inside Chuffy's wagon":"0121","Inside the digger tunnel":"0141","Jingalings Zombified Palace":"019B","Lord woo fak fak":"00FC","Mr Patch":"00F9","Mumbo's Skull":"0134","Smuggler cavern":"01A6"}},"Instant Warp\\Options\\Spiral Mountain":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Banjo's house":"0173","Behind The Waterfall":"00AE","Grunty's Old Lair":"00AD","Top Of Castle":"00AF"}},"Instant Warp\\Options\\Terrydacty Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Bonfire caverns":"011B","Chompa's belly multi":"0183","Humba's Wigwam":"011E","Inside chompa's belly":"0123","Inside the mountain":"0116","Oogle boogles cave":"0115","River passage":"0117","Stomping plains":"011A","Styracosaurus family cave":"0118","Terry's nest":"0113","Terrydacty Land":"0112","Train station":"0114","Unga bunga's cave":"0119"}},"Instant Warp\\Options\\Witchy World":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Balloon burst game":"00E4","Cave of horrors":"00EA","Crazy castle lobby":"00E2","Crazy castle pump room":"00E3","Crazy castle stockade":"00E1","Crazy castle stockade \"sop\"":"013B","Dodgem challenge \"1 vs 1\"":"00DE","Dodgem challenge \"2 vs 1\"":"00DF","Dodgem challenge \"3 vs 1\"":"00E0","Dodgem dome lobby":"00DD","Haunted cavern":"00EB","Hoop hurry game":"00E5","Mumbo's skull":"0176","Saucer of Peril":"0124","Star spinner":"00E6","Star spinner \"sop\"":"013C","The inferno":"00E7","Train station":"00EC","Witcy World":"00D6"}},"Multi-Player\\Everyone Infinite All Eggs Multiplayer":{"note":"All blaster modes specifically.[ Thanks retroben, awesome work on this!]","data":["810F0BA8 0C04","810F0BAA 8580","81121600 3C08","81121602 8009","81121604 8108","81121606 E5C0","81121608 1100","8112160A 0010","8112160C 0000","8112160E 0000","81121610 3C08","81121612 8009","81121614 8D08","81121616 E5C0","81121618 0008","8112161A 4200","8112161C 0008","8112161E 4202","81121620 0008","81121622 4080","81121624 3C04","81121626 8000","81121628 0104","8112162A 4020","8112162C 3C04","8112162E 2406","81121630 2484","81121632 0064","81121634 AD04","81121636 31C4","81121638 3C04","8112163A 2408","8112163C 2484","8112163E FFFE","81121640 AD04","81121642 31CC","81121644 3C04","81121646 8013","81121648 8C84","8112164A 7B44","8112164C 0802","8112164E 4912","81121650 0000","81121652 0000"],"options":null},"Multi-Player\\Infinite Health\\Player 1":{"note":"","data":["8013A2B1 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 2":{"note":"","data":["8013A2B5 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 3":{"note":"","data":["8013A2B9 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 4":{"note":"","data":["8013A2BD 0064"],"options":null},"Play As":{"note":"To use this cheat, put the cheat on, then press L as you walk through a door to become that chosen character","data":["D108B284 0000","8012BD9C 00??"],"options":{"Banjo":"0A","Banjo and Kazooie":"01","Bee":"06","Detonator":"0F","Golden Goliath":"0E","Kazooie":"0B","Mumbo":"0D","Snowball":"02","Stony":"08","Submarine":"0C","T-rex baby":"12","T-rex daddy":"13","Truck":"10","Washing machine":"07"}}},"16931D74-65DC6D34-C:50":{"Debug Mode":{"note":"","data":["8006C4E3 0001"],"options":null},"Have\\All Keys":{"note":"","data":["80164229 000F"],"options":null},"Have\\All Weapons":{"note":"","data":["8016422B 007F"],"options":null},"Have\\Quad Damage":{"note":"","data":["811641BC 42C8"],"options":null},"Have\\Ring of Shadows":{"note":"","data":["81164228 ????"],"options":{"Off":"0000","On":"42C8"}},"Infinite\\Ammo":{"note":"","data":["50000402 0000","8016426D 0064","50000402 0000","8116426C 03E7"],"options":null},"Infinite\\Armor":{"note":"","data":["81164184 42C8"],"options":null},"Infinite\\Bio Suit":{"note":"","data":["811641C0 42C8"],"options":null},"Infinite\\Health":{"note":"","data":["81164170 42C8"],"options":null},"Multi\\Have All Weapons\\Player 1":{"note":"","data":["80166B8B 007F"],"options":null},"Multi\\Have All Weapons\\Player 2":{"note":"","data":["80166E5B 007F"],"options":null},"Multi\\Infinite Ammo\\Player 1":{"note":"","data":["50000402 0000","81166BCC 03E7"],"options":null},"Multi\\Infinite Ammo\\Player 2":{"note":"","data":["50000402 0000","81166E9C 03E7"],"options":null},"Multi\\Infinite Armor\\Player 1":{"note":"","data":["81166AE4 42C8"],"options":null},"Multi\\Infinite Armor\\Player 2":{"note":"","data":["81166DB4 42C8"],"options":null},"Multi\\Infinite Bio Suit\\Player 1":{"note":"","data":["81166B20 42C8"],"options":null},"Multi\\Infinite Bio Suit\\Player 2":{"note":"","data":["81166DF0 42C8"],"options":null},"Multi\\Infinite Health\\Player 1":{"note":"","data":["81166AD0 42C8"],"options":null},"Multi\\Infinite Health\\Player 2":{"note":"","data":["81166DA0 42C8"],"options":null},"Rapid Fire":{"note":"","data":["D00CB220 0020","801641AD 0001"],"options":null}},"1938525C-586E9656-C:45":{"Have All Dots":{"note":"","data":["8111D55E 03E7"],"options":null},"Infinite\\Health":{"note":"","data":["8111D55C 003C"],"options":null},"Infinite\\Lives":{"note":"","data":["8010A3D7 0009"],"options":null},"Max Score":{"note":"","data":["8111EF14 E0FF","8111EF16 05F5"],"options":null}},"19AB29AF-C71BCD28-C:50":{"Access\\All Star Spirits":{"note":"Disable this code as soon as you have reached level 8, or everything will be removed again","data":["8110E01E 0007"],"options":null},"Access\\Infinite Coins":{"note":"","data":["8110DD9C 03E7"],"options":null},"Access\\Infinite Star Spirits":{"note":"","data":["8010E020 0007"],"options":null},"Access\\Level 99":{"note":"","data":["8010DD99 0063"],"options":null},"Access\\Max Badge Points":{"note":"","data":["8010DD98 00??"],"options":{"127 Badge Points":"7F","60 Badge Points":"3C"}},"Access\\Max Star Energy":{"note":"","data":["8010E01E 0007"],"options":null},"Access\\Max Star Pieces":{"note":"","data":["8010DD9F 0063"],"options":null},"Access\\Max Star Points":{"note":"You will level up, everytime you get a Star point","data":["8010DDA0 0063"],"options":null},"Access\\Ultra Rank":{"note":"This will give you Goombario,Kooper,Bombette,Parakarry,Bow Watt, Sushie \u0026 Lakilester","data":["50000C08 0000","8010DDAD 0002","50000C08 0000","8010DDED 0002"],"options":null},"Access\\all members in your party":{"note":"","data":["50000C08 0000","8010DDAC 0001"],"options":null},"Infinite \u0026 Max HP + FP":{"note":"Do not enable this code before you have made a save, when a new game is started up.","data":["50000601 0000","8010DD91 0063"],"options":null},"Press L Button For Moon Jump":{"note":"","data":["D0071337 0020","8010DAF4 0043"],"options":null}},"19F55D46-73A27B34-C:45":{"Infinite Time":{"note":"","data":["8114C298 000A"],"options":null},"Pick Your Kombat Zone":{"note":"","data":["81257544 00??"],"options":{"Armory":"14","Bell Tower":"07","Bridge":"05","Courtyard":"02","Dead Pool":"11","Graveyard":"09","Hidden Portal":"10","Jade's Desert":"0E","Kahn's Kave":"0D","Kahn's Tower":"04","Kombat Temple":"08","Lair":"18","Living Forest":"15","Lost Bridge":"0F","Pit":"03","Pit 2":"1A","Pit 3":"0A","Pit Bottom":"1C","Portal":"17","River Kombat":"0B","Rooftop":"13","Scorpion's Lair":"0C","Soul Chamber":"06","Star Bridge":"1B","Street":"01","Subway":"00","Tomb":"19","Tower":"16","Wasteland":"12"}},"Player 1\\Aggressor Energy Bar":{"note":"","data":["801698E1 0030"],"options":null},"Player 1\\Energy is":{"note":"","data":["8016984D 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 1\\Infinite Run":{"note":"","data":["81169854 0030"],"options":null},"Player 1\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B5225 0020","81169874 5100","D02B5225 0020","8116987C 5100"],"options":null},"Player 1\\Play As":{"note":"","data":["8016983D 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Player 2\\Aggressor Energy Bar":{"note":"","data":["801698E3 0030"],"options":null},"Player 2\\Energy is":{"note":"","data":["80169B21 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 2\\Infinite Run":{"note":"","data":["81169B28 0030"],"options":null},"Player 2\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B522D 0020","81169876 5100","D02B522D 0020","8116987E 5100"],"options":null},"Player 2\\Play As":{"note":"","data":["80169AE1 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Unlock Secret":{"note":"","data":["80169EE1 0004"],"options":null}},"1A122D43-C17DAF0F-C:45":{"Have All Pikachus Magnemites":{"note":"","data":["801183BC 0000","801183BD 0000","801183BE 0000"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 1":{"note":"","data":["81285A18 03E7"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 2":{"note":"","data":["81286438 03E7"],"options":null},"Pokemon\\Inf Spells\\Player 1":{"note":"","data":["810AE580 FFFF","810AE582 FFFF","810AE5D4 FFFF","810AE5D6 FFFF","810AE628 FFFF","810AE62A FFFF"],"options":null},"Pokemon\\Inf Spells\\Player 2":{"note":"","data":["810AE79C FFFF","810AE79E FFFF","810AE7F0 FFFF","810AE7F2 FFFF","810AE844 FFFF","810AE846 FFFF"],"options":null},"Pokemon\\Max HP\\Player 1":{"note":"","data":["810AE586 03E7","810AE5DA 03E7","810AE62E 03E7"],"options":null},"Pokemon\\Max HP\\Player 2":{"note":"","data":["810AE7A2 03E7","810AE7F6 03E7","810AE84A 03E7"],"options":null},"Ultimate Code":{"note":"what's so ultimate about this code is it raises your Pokemon to its full potential. Even at Level 100, most Pokemon still have a way to go to raise their stats to the max. But with this code, you can instantly boost any Pokemon to its greatest potential!!!","data":["81171F3C FF01","81171F3E FF01","81171F40 FF01","81171F42 FF01","81171F44 FF01"],"options":null}},"1A7F70B5-00B7B9FD-C:45":{"Andrew Rynolds\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDFD8 00FF","50001001 0000","800EDFE8 00FF"],"options":null},"Andrew Rynolds\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE014 00FF"],"options":null},"Bam Margera\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE348 00FF","50001001 0000","800EE358 00FF"],"options":null},"Bam Margera\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE384 00FF"],"options":null},"Bucky Lasek\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDD44 00FF","50001001 0000","800EDD54 00FF"],"options":null},"Bucky Lasek\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDD80 00FF"],"options":null},"Chad Muska\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDEFC 00FF","50001001 0000","800EDF0C 00FF"],"options":null},"Chad Muska\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDF38 00FF"],"options":null},"Elissa Steamer\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE190 00FF","50001001 0000","800EE1A0 00FF"],"options":null},"Elissa Steamer\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE1CC 00FF"],"options":null},"Eric Koston\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDC68 00FF","50001001 0000","800EDC78 00FF"],"options":null},"Eric Koston\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDCA4 00FF"],"options":null},"Geoff Rowley\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE0B4 00FF","50001001 0000","800EE0C4 00FF"],"options":null},"Geoff Rowley\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE0F0 00FF"],"options":null},"Infinite Stat Upgrades \u0026 Deck Boards to Buy":{"note":"This allows you to ugrade you stats in Upgrades to the Max \u0026 Also to open the Boards in Decks For All Characters.","data":["800ED8F9 00FF","800ED905 00FF","800EDD45 00FF","800EDD51 00FF","800EDFE5 00FF","800EDFD9 00FF","800ED9D5 00FF","800ED9E1 00FF","800EDAB1 00FF","800EDABD 00FF","800EDB8D 00FF","800EDB99 00FF","800EDC69 00FF","800EDC75 00FF","800EDE21 00FF","800EDE2D 00FF","800EDEFD 00FF","800EDF09 00FF","800EE0B5 00FF","800EE0C1 00FF","800EE191 00FF","800EE19D 00FF","800EE26D 00FF","800EE279 00FF","800EE349 00FF","800EE355 00FF","800EE425 00FF","800EE431 00FF","800EE501 00FF","800EE50D 00FF","800EE5DD 00FF","800EE5E9 00FF","800EE6B9 00FF","800EE6C5 00FF","800EE795 00FF","800EE7A1 00FF"],"options":null},"Jamie Thomas\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE26C 00FF","50001001 0000","800EE27C 00FF"],"options":null},"Jamie Thomas\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE2A8 00FF"],"options":null},"Kareem Campbell\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDAB0 00FF","50001001 0000","800EDAC0 00FF"],"options":null},"Kareem Campbell\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDAEC 00FF"],"options":null},"Officer Dick\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE6B8 00FF","50001001 0000","800EE6C8 00FF"],"options":null},"Officer Dick\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE6F4 00FF"],"options":null},"Play As":{"note":"","data":["800E9D69 00??"],"options":{"Andrew Rynolds":"08","Bam Margera":"0C","Bucky Lasek":"05","Chad Muska":"07","Elissa Steamer":"0A","Eric Koston":"04","Geoff Rowley":"09","Jamie Thomas":"0B","Kareem Campbell":"02","Officer Dick":"10","Rodney Mullen":"06","Rune Glifberg":"03","Skater A":"0D","Skater B":"0E","Skater C":"0F","Steve Caballero":"01","Tony Hawk":"00","Wolverine":"11"}},"Play On Level":{"note":"This allows you to play on a level even if it isnt already open just choose \u0026 tick choose foundary or what ever level \u0026 play the one you selected","data":["800ED58F 00??"],"options":{"Airport":"04","Canada":"06","Custom":"09","Downhill":"08","Foundary":"00","Los Angeles":"01","Rio De Janeiro":"02","Skater Island":"05","Suburbia":"03","Tokyo":"07"}},"Rodney Mullen\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDE20 00FF","50001001 0000","800EDE30 00FF"],"options":null},"Rodney Mullen\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDE5C 00FF"],"options":null},"Rune Glifberg\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDB8C 00FF","50001001 0000","800EDB9C 00FF"],"options":null},"Rune Glifberg\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDBC8 00FF"],"options":null},"Skater A\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE424 00FF","50001001 0000","800EE434 00FF"],"options":null},"Skater A\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE460 00FF"],"options":null},"Skater B\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE500 00FF","50001001 0000","800EE510 00FF"],"options":null},"Skater B\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE53C 00FF"],"options":null},"Skater C\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE5DC 00FF","50001001 0000","800EE5EC 00FF"],"options":null},"Skater C\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE618 00FF"],"options":null},"Steve Caballero\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800ED9D4 00FF","50001001 0000","800ED9E4 00FF"],"options":null},"Steve Caballero\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDA10 00FF"],"options":null},"Timer Starts Off At 20 Mins":{"note":"","data":["800E9D64 FFFF"],"options":null},"Tony Hawk\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800ED8F8 00FF","50001001 0000","800ED908 00FF"],"options":null},"Tony Hawk\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800ED934 00FF"],"options":null},"Wolverine\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE794 00FF","50001001 0000","800EE7A4 00FF"],"options":null},"Wolverine\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE7D0 00FF"],"options":null}},"1AA05AD5-46F52D80-C:50":{"Choose Vehicle":{"note":"Make your Choice \u0026 then Press GS To Activate,But do not use with any other Press GS Cheat Codes.","data":["88366807 00??"],"options":{"Birdman":"06","Cannonball":"03","Gyrocopter":"02","Hang Glider":"00","Jumble Hopper":"05","Rocket Belt":"01","Skydiving":"04"}},"Infinite Fuel\\Gyrocopter":{"note":"","data":["80366989 0081"],"options":null},"Infinite Fuel\\Rocket Belt":{"note":"","data":["803669A9 0081"],"options":null},"Infinite Photos":{"note":"","data":["813545EE 0000"],"options":null},"Music Volume Select":{"note":"","data":["80250FA4 00??"],"options":{"Default Volume":"3F","Max Volume":"80","No Music":"00"}},"Time Always 00'00'10":{"note":"This Cheat code is for All Events","data":["803668B8 0001"],"options":null},"[Perfect Score] (All Class \u0026 Level's)":{"note":"To make these codes save to Game-Pak; just pick a level and lose, choose Next then Quit. Enable Disable Perfect Score then save and disable before using the Extra Games Perfect Score Cheat.","data":["50000330 0000","803683ED 0064","50000330 0000","80368A81 0064","50000330 0000","80368BD1 0064","50000330 0000","80369115 0064","50000330 0000","80369265 0064","50000330 0000","803693B5 0064","50000330 0000","803697A9 0064","50000330 0000","803698F9 0064","50000330 0000","80369A49 0064"],"options":null},"[Perfect Score] Extra Games (All Class \u0026 Level's)":{"note":"To make these codes save to Game-Pak; just pick a level and lose, choose Next then Quit. Enable Disable Perfect Score then save and disable before using the Extra Games Perfect Score Cheat.","data":["8036847D 0019","803685CD 0019","8036871D 0019","8036886D 0019","803684AD 0064","803684DD 0064","80368B11 0019","80368C61 0019","80368DB1 0019","80368F01 0019","80368B41 0064","80368B71 0064","803691A5 0019","803692F5 0019","80369445 0019","80369595 0019","803691D5 0064","80369205 0064"],"options":null}},"1B598BF1-ECA29B45-C:45":{"99 Accuracy":{"note":"","data":["80130B80 0063"],"options":null},"99 Bonus":{"note":"","data":["80130B87 0063"],"options":null},"Always Have\\F-15J Eagle":{"note":"","data":["8027CCEC 0010"],"options":null},"Always Have\\X-29A A.T.D.":{"note":"","data":["8027CCED 0020"],"options":null},"Extra Planes":{"note":"","data":["8127CCEC FFFF"],"options":null},"Extra Points":{"note":"","data":["D027A20C 0000","8027A20C 00FF"],"options":null},"Gun Select":{"note":"","data":["8027E023 00??"],"options":{"22mm":"0B","22mm BB Shot":"0A","Air Mines":"02","Chaff":"00","Fire":"14","Fire Arrow":"21","Fire Wave":"17","Fireball":"0D","Hunai Shot":"0C","Jammings":"01","Mahibishi":"03","Ninja Glitch":"16","Ninjabeam":"28","Phoenix":"1F","Rocket":"1E","Sabre":"0E","Star":"20","Tomahawk":"15"}},"Infinite\\99 Lives":{"note":"","data":["80348B98 0063"],"options":null},"Infinite\\Armor":{"note":"","data":["8127CFF4 44A0","8127CFF8 44A0"],"options":null},"Infinite\\Chaffs":{"note":"","data":["8027E017 000A"],"options":null},"Infinite\\Gun":{"note":"","data":["8027E110 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8027CFF5 00C8","8027CFF9 00C8"],"options":null},"Infinite\\Special Weapons":{"note":"","data":["8027E4D2 0002"],"options":null},"Rocket Squad":{"note":"","data":["8027E107 0001"],"options":null},"Tomahawk Squad":{"note":"","data":["8027E109 0001"],"options":null},"Ultra Fast Missile Recharge":{"note":"","data":["8027E300 0001"],"options":null}},"1CC06338-87388926-C:45":{"Enable All Characters":{"note":"","data":["8031B242 0000","8031B243 0004"],"options":null},"Have Max\\Powerups":{"note":"","data":["801CAE23 0002"],"options":null},"Have Max\\Weapon Power-Up":{"note":"","data":["801CAE27 0002"],"options":null},"Infinite\\Bullets":{"note":"For Henry","data":["801D3DA3 0006"],"options":null},"Infinite\\Gold":{"note":"","data":["811CAB42 2710"],"options":null},"Infinite\\Health":{"note":"","data":["811CAB3A 2710"],"options":null},"Infinite\\Health Young Henry":{"note":"","data":["D11C87F6 0010","813A5360 2800"],"options":null},"Infinite\\Items\\Crest Half A":{"note":"","data":["801CAB5B 000A"],"options":null},"Infinite\\Items\\Crest Half B":{"note":"","data":["801CAB5C 000A"],"options":null},"Infinite\\Items\\Cure Ampoule":{"note":"","data":["801CAB4E 000A"],"options":null},"Infinite\\Items\\Healing Kit":{"note":"","data":["801CAB4C 000A"],"options":null},"Infinite\\Items\\Magical Nitro":{"note":"","data":["801CAB55 000A"],"options":null},"Infinite\\Items\\Mandragora":{"note":"","data":["801CAB56 000A"],"options":null},"Infinite\\Items\\Moon Card":{"note":"","data":["801CAB58 000A"],"options":null},"Infinite\\Items\\Oldrey's Diary":{"note":"","data":["801CAB5A 000A"],"options":null},"Infinite\\Items\\Powerup":{"note":"","data":["801CAB4F 000A"],"options":null},"Infinite\\Items\\Purifying":{"note":"","data":["801CAB4D 000A"],"options":null},"Infinite\\Items\\Red Jewels":{"note":"","data":["801CAB44 0068"],"options":null},"Infinite\\Items\\Roast Beef":{"note":"","data":["801CAB4B 000A"],"options":null},"Infinite\\Items\\Roast Chicken":{"note":"","data":["801CAB4A 000A"],"options":null},"Infinite\\Items\\Rose Brooch":{"note":"","data":["801CAB5D 000A"],"options":null},"Infinite\\Items\\Sun Card":{"note":"","data":["801CAB57 000A"],"options":null},"Infinite\\Items\\The Contract":{"note":"","data":["801CAB54 000A"],"options":null},"Infinite\\Items\\Throwing Weapons":{"note":"","data":["801CAB45 0064"],"options":null},"Infinite\\Items\\Winch Lever":{"note":"","data":["801CAB59 000A"],"options":null},"Infinite\\Keys\\Archives":{"note":"","data":["801CAB5E 000A"],"options":null},"Infinite\\Keys\\Art Tower 1":{"note":"","data":["801CAB6A 000A"],"options":null},"Infinite\\Keys\\Art Tower 2":{"note":"","data":["801CAB6B 000A"],"options":null},"Infinite\\Keys\\Chamber":{"note":"","data":["801CAB63 000A"],"options":null},"Infinite\\Keys\\Clocktower A":{"note":"","data":["801CAB6F 000A"],"options":null},"Infinite\\Keys\\Clocktower B":{"note":"","data":["801CAB70 000A"],"options":null},"Infinite\\Keys\\Clocktower C":{"note":"","data":["801CAB68 000A"],"options":null},"Infinite\\Keys\\Clocktower D":{"note":"","data":["801CAB69 000A"],"options":null},"Infinite\\Keys\\Clocktower E":{"note":"","data":["801CAB6E 000A"],"options":null},"Infinite\\Keys\\Control Room":{"note":"","data":["801CAB6C 000A"],"options":null},"Infinite\\Keys\\Copper":{"note":"","data":["801CAB62 000A"],"options":null},"Infinite\\Keys\\Deck":{"note":"","data":["801CAB65 000A"],"options":null},"Infinite\\Keys\\Execution":{"note":"","data":["801CAB64 000A"],"options":null},"Infinite\\Keys\\Garden":{"note":"","data":["801CAB61 000A"],"options":null},"Infinite\\Keys\\Left Tower":{"note":"","data":["801CAB5F 000A"],"options":null},"Infinite\\Keys\\Rose Garden":{"note":"","data":["801CAB66 000A"],"options":null},"Infinite\\Keys\\Storeroom":{"note":"","data":["801CAB60 000A"],"options":null},"Infinite\\Keys\\Thorn":{"note":"","data":["801CAB67 000A"],"options":null},"Infinite\\Keys\\Wall":{"note":"","data":["801CAB6D 000A"],"options":null},"Infinite\\Specials\\Special 1":{"note":"","data":["801CAB47 000A"],"options":null},"Infinite\\Specials\\Special 2":{"note":"","data":["801CAB48 000A"],"options":null},"Infinite\\Specials\\Special 3":{"note":"","data":["801CAB49 000A"],"options":null},"Rapid Fire Gun (Henry-Hold B)":{"note":"For Henry, Hold B","data":["811C87F6 0040","801D3DA3 0006"],"options":null},"Selection Options\\Cut Scene Select":{"note":"With this code, you must use the appropiate level mod before you attemp to run these cut scenes. Not doing so will ruin the cut scene as the graphics will be glitched.","data":["801CAE93 0009","801CAE8B 00??"],"options":{"\"I Smell Poison\" From Underground Waterway":"08","(?)":"22","Actrise Appears Again Before Fight With Carrie":"56","Actrise Appears Again With Cousin Fernandes Before Fight With Carrie":"54","Actrise Appears In Castle Center":"52","Actrise Defeated By Carrie":"57","Ada":"30","Bleeding Statue":"12","Bull Awakens":"17","Castel Destruction":"27","Castle Destruction":"29","Castle Drawbridge Closes And Ortega Appears":"46","Castle Drawbridge Lowers":"03","Castle Gate Closes In Villa Upon Entering Villa":"09","Castle Keep Destructs":"1E","Character Enters Castle":"04","Character In Boat On Foggy Lake":"10","Cornell And Henry Part In Garden":"49","Cornell Meets Henry In Garden":"48","Cosmic Lights":"13","Cousin Fernandes Is Destroyed":"55","Death Is Destroyed":"45","Death(Grim Reaper)":"44","Explosion At Wall In Arena":"14","Explosion At Wall In Castle That Leads To Hidden Room":"15","Finds Hidden Path In Villa Basement":"35","Gate Opens In Forest Of Silence":"1A","Harpie":"38","Harpie Destroyed":"39","Lever \u0026 Gear In Castle":"37","Malus And Reinhardt On Horse":"2B","Malus Appears Again In Upstairs Room Of Castle":"16","Malus Appears For The First Time":"0E","Malus Is Saved By Reinhardt":"2A","Malus Leaves Garden":"0F","Malus On Flying Horse Outside Castle Keep":"1F","Meet Renon For The Last Time In Castle Keep.":"1B","Monster Dracula Appears":"51","One Of The Working Gears Cut Scenes":"19","Renon Appears For First Time":"0B","Rosa In Garden":"25","Rosa Returns":"2E","Scrolling Text About Castle And Henry":"31","Seal Removed From Wall In Arena":"11","Space Warp":"28","Spider People In Tunnel":"24","Thirsty Man":"47","This Cut Scene Runs Cut Scene 27 And 2E":"1C","Vampire In Basement":"33","Vampire In Main Entrance Hall Of Villa":"06","Vampire In Villa Basement Destroyed":"34","Village Vampire In Upstairs Villa":"0D","Vincent The Vampire":"18"}},"Selection Options\\Day Select For Adult Henry":{"note":"","data":["801CAB1F 00??"],"options":{"0 Days":"07","1 Day":"06","2 Days":"05","3 Days":"04","4 Days":"03","5 Days":"02","6 Days":"01","7 Days":"00"}},"Selection Options\\Level Select\\Inter":{"note":"","data":["801CAE7B 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Level Select\\Main":{"note":"","data":["801CAE79 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Status Select":{"note":"","data":["801CAB84 00??"],"options":{"Instant Death":"FF","Never Get Poisoned or Vamped":"00","Normal":"01","Poison":"08","Vamp":"04","Vamped \u0026 Poisoned":"0C"}},"Selection Options\\Weapon Select":{"note":"","data":["801CAB3F 00??"],"options":{"Axe":"04","Cross":"03","Knife":"01","Nothing":"00","Potion":"02"}},"Selection Options\\[Press F9 For Wolfman Can Use Weapons]":{"note":"For Cornell","data":["881CAB37 00??"],"options":{"No (Default)":"04","Yes":"02"}},"Stop Timer Input":{"note":"","data":["811CAB22 0001"],"options":null}},"1D4136F3-AF63EEA9-C:45":{"Always Have Wallet Size":{"note":"","data":["801189DA 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C681D 0010","81119C9E 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["80119821 00FF","80119C97 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,\u0026 then press reset (F1) you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D011BB71 0000","80119D4B 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["8002397C 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801189BE 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801189BF 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801189C0 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801189C1 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1A68 0005","801EE508 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801189DA 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801189DB 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801189D9 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189D4 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189DC 30FF","811189DE FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801189B0 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801189B6 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801189BC 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["801189B4 0009"],"options":null},"Have\\Bombs":{"note":"","data":["801189AE 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["801189B8 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["801189AD 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["801189AC 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["801189AF 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["801189B2 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["801189B5 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["801189B9 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["801189BA 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["801189B1 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["801189B7 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["801189BD 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["801189BB 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["801189B3 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["801189C7 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["801189E0 0007","801189E1 0007","801189E2 0007","801189E3 0007","801189E4 0007","801189E5 0007","801189E6 0007","801189E7 0007","801189E8 0007","801189E9 0007","801189EA 0007","801189F7 0009","801189F8 0009","801189F9 0009","801189FA 0009","801189FB 0009","80118A01 0009","80118A04 0009","801189FF 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801189CC 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["801189C6 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801189C5 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801189CA 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801189C4 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118968 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118971 0008","80118972 0001","80118974 0001","8011896B 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801189D2 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["81119D04 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["80119D0D 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D011BB11 0020","811D93D0 40CB","D011BB11 0000","811D9BF2 000D","801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119D41 00??"],"options":{"English":"00","French":"02","German":"01"}},"Level Select":{"note":"","data":["D01C6E35 0000","8111893A ????"],"options":{"?":"006C","Below The Phantom Gannon Boss":"000C","Dodongo's Cavern":"0004","Gerudo Training Ground":"0008","Inside Jabu-Jabu's Belly":"0027","Inside the Deku Tree":"0000","Lakeside Laboratory":"0042","Royal Family's Tomb":"002C","Shoadow Temple":"0036","Temple Of Time":"0052","Water Temple":"0010"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["80118A07 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["80118A09 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["81118966 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["81119D00 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L\\For Infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D011BB11 0020","811D9BF2 000D"],"options":null},"Press L\\To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D011BB11 0020","811D93D0 40CB"],"options":null},"Time of Day Modifier":{"note":"","data":["81118944 ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["801189C2 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["801189C3 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["80118976 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119B5A 0000","81119B5C 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"1D4136F3-AF63EEA9-C:50":{"Always Have Wallet Size":{"note":"","data":["801189DA 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C681D 0010","81119C9E 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["80119821 00FF","80119C97 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,\u0026 then press reset (F1) you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D011BB71 0000","80119D4B 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["8002397C 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801189BE 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801189BF 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801189C0 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801189C1 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1A68 0005","801EE508 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801189DA 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801189DB 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801189D9 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189D4 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["801189DD 00??","801189DE 00??","801189DF 00??"],"options":{"Off":"00","On":"FF"}},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801189B0 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801189B6 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801189BC 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["801189B4 0009"],"options":null},"Have\\Bombs":{"note":"","data":["801189AE 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["801189B8 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["801189AD 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["801189AC 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["801189AF 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["801189B2 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["801189B5 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["801189B9 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["801189BA 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["801189B1 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["801189B7 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["801189BD 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["801189BB 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["801189B3 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Have\\Status Heart Containers":{"note":"","data":["801189DC 00??"],"options":{"Off":"00","On":"30"}},"Infinite\\Arrows":{"note":"","data":["801189C7 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["801189E0 0007","801189E1 0007","801189E2 0007","801189E3 0007","801189E4 0007","801189E5 0007","801189E6 0007","801189E7 0007","801189E8 0007","801189E9 0007","801189EA 0007","801189F7 0009","801189F8 0009","801189F9 0009","801189FA 0009","801189FB 0009","80118A01 0009","80118A04 0009","801189FF 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801189CC 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["801189C6 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801189C5 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801189CA 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801189C4 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118968 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118971 0008","80118972 0001","80118974 0001","8011896B 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801189D2 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["81119D04 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["80119D0D 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D011BB11 0020","811D93D0 40CB","D011BB11 0000","811D9BF2 000D","801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119D41 00??"],"options":{"English":"00","French":"02","German":"01"}},"Level Select":{"note":"","data":["D01C6E35 0000","8111893A ????"],"options":{"?":"006C","Below The Phantom Gannon Boss":"000C","Dodongo's Cavern":"0004","Gerudo Training Ground":"0008","Inside Jabu-Jabu's Belly":"0027","Inside the Deku Tree":"0000","Lakeside Laboratory":"0042","Royal Family's Tomb":"002C","Shoadow Temple":"0036","Temple Of Time":"0052","Water Temple":"0010"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["80118A07 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["80118A09 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["81118966 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["81119D00 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L\\For Infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D011BB11 0020","811D9BF2 000D"],"options":null},"Press L\\To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D011BB11 0020","811D93D0 40CB"],"options":null},"Time of Day Modifier":{"note":"","data":["81118944 ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["801189C2 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["801189C3 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["80118976 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119B5A 0000","81119B5C 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"1E0E96E8-4E28826B-C:45":{"Level Select":{"note":"","data":["80046353 00??"],"options":{"Level 1":"01","Level 10":"0A","Level 11":"0B","Level 12":"0C","Level 13":"0D","Level 14":"0E","Level 15":"0F","Level 16":"10","Level 17":"11","Level 18":"12","Level 19":"13","Level 2":"02","Level 20":"14","Level 21":"15","Level 22":"16","Level 23":"17","Level 24":"18","Level 25":"19","Level 3":"03","Level 4":"04","Level 5":"05","Level 6":"06","Level 7":"07","Level 8":"08","Level 9":"09"}},"Stop Timer From Counting Down (All Levels)":{"note":"","data":["8101D4FC 2400"],"options":null}},"1E12883D-D3B92718-C:46":{"In-Game Cheats\\Access Cheat menu":{"note":"","data":["50000504 0000","80100D98 0001"],"options":null},"In-Game Cheats\\Enable\\All Items":{"note":"To access simply pause in game play \u0026 then unpause.","data":["80100D7C 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Invincibility":{"note":"","data":["802AAFE8 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Monsters":{"note":"","data":["802AB15B 00??"],"options":{"Are Active":"00","Are Gone":"01"}},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A6356 0064","812A639E 0064","812A63AE 00C8","812A6398 1900","812A6368 04B0","812A639A 0640","812A6338 0960","812A639C 0190"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Keys":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A6353 000F"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A63C7 0001","50000E02 0000","812A630C 03E7"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Infinite Health (All Levels)":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on Single-Player, Co-Operative and DUKEMATCH, All Levels.","data":["8024D25F 0064","802A6309 0064"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A66E2 0064","812A672A 0064","812A673A 00C8","812A6724 1900","812A66F4 04B0","812A6726 0640","812A66C4 0960","812A6728 0190"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A6753 0001","50000E02 0000","812A6698 03E7"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on DUKEMATCH, All Levels.","data":["8024C18F 0064","802A6695 0064"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A6A6E 0064","812A6AB6 0064","812A6AC6 00C8","812A6AB0 1900","812A6A80 04B0","812A6AB2 0640","812A6A50 0960","812A6AB4 0190"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A6ADF 0001","50000E02 0000","812A6A24 03E7"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 4 on DUKEMATCH, All Levels.","data":["8024BCEB 0064","802A6A21 0064"],"options":null},"Single-Player (All Levels)\\Have All\\Items \u0026 Infinite Use on all levels":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5FCA 0064","812A6012 0064","812A6022 00C8","812A600C 1900","812A600E 0640","812A5FDC 04B0","812A5FAC 0960","812A6010 0190"],"options":null},"Single-Player (All Levels)\\Have All\\Keys":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5FC7 000F"],"options":null},"Single-Player (All Levels)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000C01 0000","802A603B 0001","50000C02 0000","812A5F7E 03E7"],"options":null},"Single-Player (All Levels)\\Have Infinite Health (All Levels)":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels and does what it says on the tin. Infinite health for player 1, All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802479DB 0064","8026F1DB 0064","802A5F7D 0064"],"options":null}},"1EA26214-E790900F-C:50":{"All Characters":{"note":"","data":["50000301 0000","8010EB51 00FF"],"options":null},"All Levels Completed":{"note":"Unlocks Frag Fest \u0026 Time Trial","data":["50000601 0000","8010EB7D 00FF"],"options":null},"Deaths Modifier":{"note":"","data":["8110EB76 ????"],"options":{"10":"000A","100":"0064","1600":"0640","20":"0014","200":"00C8","30":"001E","40":"0028","400":"0190","50":"0032","800":"0320","Infinite":"03E7"}},"Have All\\Medals":{"note":"Unlocks the In-Game Cheat Menu.Only works with a Controller-Pak","data":["8010EB50 0003","50000601 0000","8010EB4A 00FF"],"options":null},"Have All\\Mini Game Icons":{"note":"Only works with a Controller-Pak","data":["8010EB17 0024"],"options":null},"Infinite Ammo All Guns\\Player 1":{"note":"","data":["50000302 0000","80336535 0063","50000702 0000","80692B95 0063"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["80336527 0064","80692B86 0064"],"options":null},"Infinite Lives\\Player 1":{"note":"","data":["8033637E 0064"],"options":null},"Total Kills Modifier":{"note":"","data":["8110EB6E ????"],"options":{"10":"000A","100":"0064","1600":"0640","20":"0014","200":"00C8","30":"001E","40":"0028","400":"0190","50":"0032","800":"0320","Infinite":"03E7"}},"Wins Modifier":{"note":"","data":["8110EB72 ????"],"options":{"10":"000A","100":"0064","1600":"0640","20":"0014","200":"00C8","30":"001E","40":"0028","400":"0190","50":"0032","800":"0320","Infinite":"03E7"}}},"1FA056E0-A4B9946A-C:4A":{"All Bosses 1 Hit Deaths":{"note":"","data":["811BE182 0000"],"options":null},"Enable\\Max Power Mode":{"note":"","data":["8015D117 0001"],"options":null},"Flashlight Mod":{"note":"","data":["80179148 00??"],"options":{"Off":"00","On":"01"}},"Have All Characters In Multi":{"note":"","data":["8115D112 FFFF","8115D110 0003","8015D111 0003"],"options":null},"Have\\All\\Weapons,Items \u0026 Infinite Ammo\\Player 1":{"note":"","data":["8017A79F 001E","8017A7B3 0008","8017A7B7 0009","801584C4 0009","8015D117 0001","801584C0 000C","801584C1 0060","801584C3 0001","50000601 0000","801584C5 0001","801584CB 0009","801584CD 000C"],"options":null},"Infinite Health":{"note":"","data":["8017A7BB 0064"],"options":null},"Start with Weapon\\Player 1":{"note":"","data":["8017A7A8 00??"],"options":{"Cool Rocket Launcher With Infinite Ammo":"09","HandGun":"00","Invisible Gun 1 With Infinite Ammo":"06","Invisible Gun 2 With Infinite Ammo":"07","M16 With Infinite Ammo":"04","Machinegun":"01","New Cooler Handgun":"05","Odd Inviso ShotGun With Infinite Ammo":"08","Rocket Launcher":"03","Shotgun":"02","Silenced Handgun":"14"}},"Time is Always 00:00:00":{"note":"","data":["8110DA62 0000"],"options":null}},"1FB5D932-3BA9481B-C:45":{"Don't Take Any Damage":{"note":"","data":["8104A260 2400"],"options":null},"Enable Cheat Select":{"note":"","data":["80115933 00??"],"options":{"All Weapons With Fast Run":"42","All Weapons With Infinite Ammo":"06","Fast run":"40","Have All Weapons":"02","Infinite Ammo":"04","Infinite Ammo With Fast Run":"44","Invincible":"01","Invincible With All Weapons And Fast Run":"43","Invincible With All Weapons and Ammo and Fast Run":"47","Invincible With Fast Run":"41","Invincible With Infinite Ammo and All Weapons":"07"}},"Enable In-Game Cheat Menu \u0026 Level Select":{"note":"","data":["81115936 014F"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810496D0 2400"],"options":null},"Sound Select\\Music Volume":{"note":"","data":["80115944 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"Sound Select\\SFX Volume":{"note":"","data":["80115945 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"[Press L For Levitate]":{"note":"","data":["D10F7550 0020","816FE35C 43D5"],"options":null}},"1FBAF161-2C1C54F1-C:41":{"Enable All Levels \u0026 Boarders":{"note":"","data":["80255089 00FF","8025508B 0005","81255096 FCFF","80255098 0007"],"options":null},"Have All\\Contest First Place Done":{"note":"","data":["80244098 0007"],"options":null},"Have All\\Match Levels Completed":{"note":"","data":["8025508A 0005"],"options":null},"Have All\\Trick Attacks Done":{"note":"","data":["81255096 FCFF"],"options":null},"Infinite Damage All Players \u0026 Levels":{"note":"","data":["803F4C3D 0000"],"options":null},"Infinite Lives \u0026 Continues":{"note":"","data":["8026B1CB 0003"],"options":null},"Open Level Character Select":{"note":"With these codes, you have to press the buttons listed below when you are viewing a certain boarders stats. Highlight Akari Hayami's stats, and then hold down the C-Left button and then press the A button to be the Crystal Boarder. Highlight Kensuke Kimachi's stats, and then hold down the C-Up button and then press the A button to be the Metal Boarder. Hightlight Rob Haywood's stats, and then hold down the C-Right button and then press the A button to be the Panda Boarder","data":["8125508A 00??"],"options":{"Easy \u0026 Normal Level":"02","Easy Level":"01","Easy Normal \u0026 Hard Levels":"03","Easy Normal Hard Levels \u0026 Crystal \u0026 Metal Boarders":"05","Easy Normal Hard Levels \u0026 Crystal Boarder":"04"}},"Play As":{"note":"","data":["800200E7 00??"],"options":{"Akari Hayami":"02","Dion Blaster":"00","Gold Boarder":"06","Kensuke Kimachi":"01","Panda Boarder":"07","Ricky Winterborn":"03","Rob Haywood":"04","Silver Boarder":"05"}},"Stop Timer\\Contest\\Air Make":{"note":"","data":["80319CCA 00C5"],"options":null},"Stop Timer\\Contest\\Crystal Lake":{"note":"","data":["8029C1EA 00C5"],"options":null},"Stop Timer\\Contest\\Crystal Peak":{"note":"","data":["802A89AA 00C5"],"options":null},"Stop Timer\\Contest\\Golden Forest":{"note":"","data":["802A6E4A 00C5"],"options":null},"Stop Timer\\Contest\\Half Pipe":{"note":"","data":["802F530A 00C5"],"options":null},"Stop Timer\\Time Attack\\Air Make":{"note":"","data":["8031AB5A 0000"],"options":null},"Stop Timer\\Time Attack\\Crystal Lake":{"note":"","data":["802A593A 0000"],"options":null},"Stop Timer\\Time Attack\\Crystal Peak":{"note":"","data":["802B2CDA 0000"],"options":null},"Stop Timer\\Time Attack\\Deadly Fall":{"note":"","data":["802CF67A 0000"],"options":null},"Stop Timer\\Time Attack\\Dragon Cave":{"note":"","data":["802C148A 0000"],"options":null},"Stop Timer\\Time Attack\\Golden Forrest":{"note":"","data":["802B146A 0000"],"options":null},"Stop Timer\\Time Attack\\Half Pipe":{"note":"","data":["802F649A 0000"],"options":null},"Stop Timer\\Time Attack\\Mountain Village":{"note":"","data":["802CBA6A 0000"],"options":null},"Stop Timer\\Trick Attack\\Air Make":{"note":"","data":["8031ABCA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Crystal Lake":{"note":"","data":["8029F77A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Crystal Peak":{"note":"","data":["802AC9FA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Deadly Fall":{"note":"","data":["802C8F1A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Dragon Cave":{"note":"","data":["802BAE4A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Golden Forrest":{"note":"","data":["802AB06A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Half Pipe":{"note":"","data":["802F650A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Mountain Village":{"note":"","data":["802C51EA 00C5"],"options":null}},"1FC21532-0B6466D4-C:45":{"Gold Tickets\\Player 1":{"note":"","data":["D00BE8C1 0000","8111F7F8 03E7"],"options":null},"Gold Tickets\\Player 2":{"note":"","data":["D00BE8C1 0001","8111F7F8 03E7"],"options":null},"Gold Tickets\\Player 3":{"note":"","data":["D00BE8C1 0002","8111F7F8 03E7"],"options":null},"Gold Tickets\\Player 4":{"note":"","data":["D00BE8C1 0003","8111F7F8 03E7"],"options":null},"Red Tickets\\Player 1":{"note":"","data":["D00BE8C1 0000","8111F7F6 03E7"],"options":null},"Red Tickets\\Player 2":{"note":"","data":["D00BE8C1 0001","8111F7F6 03E7"],"options":null},"Red Tickets\\Player 3":{"note":"","data":["D00BE8C1 0002","8111F7F6 03E7"],"options":null},"Red Tickets\\Player 4":{"note":"","data":["D00BE8C1 0003","8111F7F6 03E7"],"options":null}},"202A8EE4-83F88B89-C:50":{"Always Low Temp\\Player One":{"note":"","data":["810E4668 0000","810E466A 0000"],"options":null},"Always Low Temp\\Player Two":{"note":"","data":["810E4E48 0000","810E4E4A 0000"],"options":null},"In Game Cheat Select\\1":{"note":"","data":["800CDA4A 00??"],"options":{"All stunts":"02","Beat this":"10","Developers team photo":"08","Invincible mode":"04","Small head mode":"20","Transparent riders":"01"}},"In Game Cheat Select\\2":{"note":"","data":["800CDA4B 00??"],"options":{"Big head mode":"01","Debug mode":"04","Down hill mode":"08","Invisible riders":"20","Mirror mode":"02","Night mode":"40","Odd colour mode":"80","Stunt bonus":"10"}},"In-Game cheat modifer":{"note":"","data":["810CDA4A ????"],"options":{"All stunts":"0200","Beat this":"1000","Big head mode":"0001","Debug mode":"0004","Developers team photo":"0800","Down hill mode":"0008","Invincible mode":"0400","Invisible riders":"0020","Mirror mode":"0002","Night mode":"0040","Odd colour mode":"0080","Small head mode":"2000","Stunt bonus":"0010","Transparent riders":"0100"}},"Infinite Time":{"note":"","data":["810F0E36 1770"],"options":null},"Max Score Stunt Mode\\Player One":{"note":"","data":["810E43E8 0098","810E43EA 967F"],"options":null},"Max Score Stunt Mode\\Player Two":{"note":"","data":["810E4BC8 0098","810E4BCA 967F"],"options":null},"Start On Lap":{"note":"","data":["D00E4681 0000","800E4681 00??"],"options":{"Lap 1":"01","Lap 2":"02","Lap 3":"03","Lap 4":"04"}},"Unlock Original Excitebike":{"note":"Press L+R at track selection to Access Soccer,Hill Climb \u0026 Excite 3D","data":["D00F6605 0030","810F2420 FF07"],"options":null}},"204489C1-1286CF2B-C:45":{"Infinite\\99 Dark Knight Discus":{"note":"","data":["802086FE 0063"],"options":null},"Infinite\\99 Lives":{"note":"","data":["802086F1 0063"],"options":null},"Infinite\\Health":{"note":"","data":["802086F2 0064"],"options":null},"Infinite\\Max Charge \u0026 Magnetic Nun Chaku":{"note":"","data":["802086B9 0064"],"options":null},"Press F9 to Have\\Key":{"note":"","data":["88208524 0020"],"options":null},"Suit Select":{"note":"","data":["802086F4 00??"],"options":{"Defensive":"02","Nimble":"03","Offensive":"01","Standard":"00"}},"Weapon Select":{"note":"","data":["802086F7 00??"],"options":{"Dark Knight Discus":"01","Dark Knight Staff":"02","Magnetic Nun Chaku":"03","Standard":"00"}}},"204EC022-B119D185-C:45":{"Andrew Reynolds\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDBE 00FF"],"options":null},"Andrew Reynolds\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDC0 00FF"],"options":null},"Andrew Reynolds\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDBB 00FF"],"options":null},"Andrew Reynolds\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDB8 00FF"],"options":null},"Bob Burnquist\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD5A 00FF"],"options":null},"Bob Burnquist\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD5C 00FF"],"options":null},"Bob Burnquist\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD57 00FF"],"options":null},"Bob Burnquist\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD54 00FF"],"options":null},"Bucky Lasek\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD82 00FF"],"options":null},"Bucky Lasek\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD84 00FF"],"options":null},"Bucky Lasek\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD7F 00FF"],"options":null},"Bucky Lasek\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD7C 00FF"],"options":null},"Chad Muska\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD96 00FF"],"options":null},"Chad Muska\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD98 00FF"],"options":null},"Chad Muska\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD93 00FF"],"options":null},"Chad Muska\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD90 00FF"],"options":null},"Elissa Steamer\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDFA 00FF"],"options":null},"Elissa Steamer\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDFC 00FF"],"options":null},"Elissa Steamer\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDF7 00FF"],"options":null},"Elissa Steamer\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDF4 00FF"],"options":null},"Geoff Rowley\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD6E 00FF"],"options":null},"Geoff Rowley\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD70 00FF"],"options":null},"Geoff Rowley\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD6B 00FF"],"options":null},"Geoff Rowley\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD68 00FF"],"options":null},"Have All Tracks":{"note":"","data":["813D6E42 FFFF","813D4FFA FFFF","813D5D62 FFFF","813D84E2 FFFF","813D4FCA FFFF","813D5F2A FFFF","813D8C52 FFFF","813D5602 FFFF","813D6D3A FFFF"],"options":null},"Jamie Thomas\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDE6 00FF"],"options":null},"Jamie Thomas\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDE8 00FF"],"options":null},"Jamie Thomas\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDE3 00FF"],"options":null},"Jamie Thomas\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDE0 00FF"],"options":null},"Kareem Campbell\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDAA 00FF"],"options":null},"Kareem Campbell\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDAC 00FF"],"options":null},"Kareem Campbell\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDA7 00FF"],"options":null},"Kareem Campbell\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDA4 00FF"],"options":null},"Officer Dick\\Have All\\Gold Medal\\Burnside":{"note":"","data":["800DDE0E 00FF"],"options":null},"Officer Dick\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDE10 00FF"],"options":null},"Officer Dick\\Have All\\Gold Medal\\Skate Park":{"note":"","data":["800DDE0B 00FF"],"options":null},"Officer Dick\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDE08 00FF"],"options":null},"Player 1\\Have\\ Perfect Balance":{"note":"","data":["800DDB83 0001"],"options":null},"Player 1\\Max Points\\Burnside":{"note":"","data":["813D8C52 FFFF"],"options":null},"Player 1\\Max Points\\Downhill Jam":{"note":"","data":["813D5F2A FFFF"],"options":null},"Player 1\\Max Points\\Downtown Chicago":{"note":"","data":["813D4FCA FFFF"],"options":null},"Player 1\\Max Points\\Roswell New Mexico":{"note":"","data":["813D6D3A FFFF"],"options":null},"Player 1\\Max Points\\Street":{"note":"","data":["813D5602 FFFF"],"options":null},"Player 1\\Max Points\\The Mall":{"note":"","data":["813D5D62 FFFF"],"options":null},"Player 1\\Max Points\\The School":{"note":"","data":["813D4FFA FFFF"],"options":null},"Player 1\\Max Points\\The Skate Park":{"note":"","data":["813D84E2 FFFF"],"options":null},"Player 1\\Max Points\\The Warehouse":{"note":"","data":["813D6E42 FFFF"],"options":null},"Player 1\\Max Trick Score\\Burnside":{"note":"","data":["813D8C52 FFFF"],"options":null},"Player 1\\Max Trick Score\\Downhill Jam":{"note":"","data":["813D5F2A FFFF"],"options":null},"Player 1\\Max Trick Score\\Downtown":{"note":"","data":["813D4FCA FFFF"],"options":null},"Player 1\\Max Trick Score\\Roswell":{"note":"","data":["813D6D3A FFFF"],"options":null},"Player 1\\Max Trick Score\\The Mall":{"note":"","data":["813D5D62 FFFF"],"options":null},"Player 1\\Max Trick Score\\The School":{"note":"","data":["813D4FFA FFFF"],"options":null},"Player 1\\Max Trick Score\\The Skate Park Course":{"note":"","data":["813D84E2 FFFF"],"options":null},"Player 1\\Max Trick Score\\The Streets":{"note":"","data":["813D5602 FFFF"],"options":null},"Player 1\\Play As":{"note":"","data":["800D03D4 00??"],"options":{"Andrew Reynolds":"06","Bob Burnquist":"01","Bucky Lasek":"03","Chad Muska":"04","Elissa Steamer":"09","Geoff Rowley":"02","Jamie Thomas":"08","Kareem Campbell":"05","Officer Dick":"0A","Rune Glifberg":"07","Tony Hawk":"00"}},"Player 1\\Super Max\\Air":{"note":"","data":["800D561E FFFF"],"options":null},"Player 1\\Super Max\\Balance":{"note":"","data":["800D561F FFFF"],"options":null},"Player 1\\Super Max\\Ollie":{"note":"","data":["800D561C FFFF"],"options":null},"Player 1\\Super Max\\Speed":{"note":"","data":["800D561D FFFF"],"options":null},"Player 1\\Super Max\\Turning":{"note":"","data":["800D5620 FFFF"],"options":null},"Player 1\\Tony Hawk\\Full Special All Levels":{"note":"","data":["D00C0223 0000","813D6576 02EE","D00C0223 0001","813D4728 02EE","D00C0223 0002","813D5496 02EE","D00C0223 0003","813D7C16 02EE","D00C0223 0004","813D467E 02EE","D00C0223 0005","813D565E 02EE","D00C0223 0006","813D8386 02EE","D00C0223 0007","813D4D36 02EE","D00C0223 0008","813D646E 02EE"],"options":null},"Player 2\\Play As":{"note":"","data":["800D03D5 00??"],"options":{"Andrew Reynolds":"06","Bob Burnquist":"01","Bucky Lasek":"03","Chad Muska":"04","Elissa Steamer":"09","Geoff Rowley":"02","Jamie Thomas":"08","Kareem Campbell":"05","Officer Dick":"0A","Rune Glifberg":"07","Tony Hawk":"00"}},"Player 2\\Super Max\\Air":{"note":"","data":["800D5623 FFFF"],"options":null},"Player 2\\Super Max\\Balance":{"note":"","data":["800D5624 FFFF"],"options":null},"Player 2\\Super Max\\Ollie":{"note":"","data":["800D5621 FFFF"],"options":null},"Player 2\\Super Max\\Speed":{"note":"","data":["800D5622 FFFF"],"options":null},"Player 2\\Super Max\\Turning":{"note":"","data":["800D5625 FFFF"],"options":null},"Rune Glifberg\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDD2 00FF"],"options":null},"Rune Glifberg\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDD4 00FF"],"options":null},"Rune Glifberg\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDCF 00FF"],"options":null},"Rune Glifberg\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDCC 00FF"],"options":null},"Tony Hawk\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD46 00FF"],"options":null},"Tony Hawk\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD48 00FF"],"options":null},"Tony Hawk\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD43 00FF"],"options":null},"Tony Hawk\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD40 00FF"],"options":null}},"20B53662-7B61899F-C:50":{"Have Cheats Menu":{"note":"","data":["800D77D6 01FF"],"options":null},"Infinite Balls":{"note":"","data":["802FD21F 0064"],"options":null},"Infinite Credits":{"note":"","data":["802FD215 0064"],"options":null},"Infinite Energy":{"note":"","data":["802FD209 0064"],"options":null},"Infinite Sponge Darts":{"note":"","data":["802FD223 0064"],"options":null},"Infinite Suckers":{"note":"","data":["802FD222 0064"],"options":null},"Start with 9999 Monster Score":{"note":"","data":["812FD20E 270F"],"options":null}},"214CAD94-BE1A3B24-C:45":{"Gun 4-Way Shot":{"note":"","data":["80129723 0004"],"options":null},"Infinite Fuel":{"note":"","data":["81129726 FFFF"],"options":null},"Infinite Shield":{"note":"","data":["811296C8 03E8"],"options":null},"Infinite Weapon\\1st Position":{"note":"","data":["8012943B 0063"],"options":null},"Infinite Weapon\\2nd Position":{"note":"","data":["8012943F 0063"],"options":null},"Infinite Weapon\\3rd Position":{"note":"","data":["80129443 0063"],"options":null},"Infinite Weapon\\4th Position":{"note":"","data":["80129447 0063"],"options":null},"Infinite Weapon\\5th Position":{"note":"","data":["8012944B 0063"],"options":null},"Max Score":{"note":"","data":["81129426 FFFF"],"options":null},"Score Attack Mode":{"note":"","data":["81129472 0001"],"options":null},"Stage Select On":{"note":"","data":["81129476 0001"],"options":null},"Weapon Modifier\\1st Position":{"note":"Must to be used with the Infinite Weapon Codes","data":["80129439 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\2nd Position":{"note":"Must to be used with the Infinite Weapon Codes","data":["8012943D 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\3rd Position":{"note":"Must to be used with the Infinite Weapon Codes","data":["801294F1 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\Gun Weapon":{"note":"","data":["80129723 00??"],"options":{"2-Way Shot":"02","3-Way Shot":"03","4-Way Shot":"04","No Weapon":"00","Normal Shot":"01"}}},"2153143F-992D6351-C:45":{"Press L + C-Down For Cheat Screen":{"note":"","data":["D01101B3 0024","8103BFE0 0000","D01101B3 0024","8103BFE2 0000"],"options":null}},"21548CA9-9059F32C-C:00":{"Everything Unlocked":{"note":"Have All Grand Prix Levels Open And Completed","data":["8008270F 00FF","8108277A 0FFF"],"options":null},"Regional Class\\Max Grip":{"note":"Do not enable until you are at the Region Class Selection menu. Disbale before restarting.","data":["800B2529 003D","800BC529 003D","800C6529 003D"],"options":null},"Regional Class\\Max Motor":{"note":"Do not enable until you are at the Region Class Selection menu. Disbale before restarting.","data":["800C6481 003D","800BC481 003D","800B2481 003D"],"options":null},"Regional Class\\Max Turbo":{"note":"Do not enable until you are at the Region Class Selection menu. Disbale before restarting.","data":["800B25D1 003D","800BC5D1 003D","800C65D1 003D"],"options":null},"World Challenge\\Max Grip":{"note":"Do not enable until you are at the World Challenge Selection menu. Disbale before restarting.","data":["800B28B1 003D","800BC8B1 003D","800C68B1 003D"],"options":null},"World Challenge\\Max Motor":{"note":"Do not enable until you are at the World Challenge Selection menu. Disbale before restarting.","data":["800B2809 003D","800BC809 003D","800C6809 003D"],"options":null},"World Challenge\\Max Turbo":{"note":"Do not enable until you are at the World Challenge Selection menu. Disbale before restarting.","data":["800B2959 003D","800BC959 003D","800C6959 003D"],"options":null},"World Class\\Max Grip":{"note":"Do not enable until you are at the World Class Selection menu. Disbale before restarting.","data":["800B2861 003D","800BC861 003D","800C6861 003D"],"options":null},"World Class\\Max Motor":{"note":"Do not enable until you are at the World Class Selection menu. Disbale before restarting.","data":["800B27B9 003D","800BC7B9 003D","800C67B9 003D"],"options":null},"World Class\\Max Turbo":{"note":"Do not enable until you are at the World Class Selection menu. Disbale before restarting.","data":["800B2909 003D","800BC909 003D","800C6909 003D"],"options":null},"[Player 1]\\Infinite\\Lives":{"note":"","data":["800827BB 0006"],"options":null},"[Player 1]\\Infinite\\Turbo":{"note":"","data":["80195CF3 00FF"],"options":null},"[Player 1]\\Press R to Come In 1st":{"note":"Do not press this until you have finished the race and came in at whatever position. Then Press R Button to then Come In 1st","data":["D0093671 0010","801460A3 0000"],"options":null}},"219191C1-33183C61-C:50":{"1-Hit Death":{"note":"","data":["81137E7C 4136"],"options":null},"Extra Shields":{"note":"","data":["81137E7C 4316"],"options":null},"Have\\99\\Bonus Collected":{"note":"","data":["80130B87 0063"],"options":null},"Have\\99\\Kills":{"note":"","data":["80130B85 0063"],"options":null},"Have\\99\\Saves":{"note":"","data":["80130B86 0063"],"options":null},"Have\\Medals For\\Ambush at Mos Eisley":{"note":"","data":["88130B1C 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Assault on Kile II":{"note":"","data":["88130B23 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Battle Above Taloraan":{"note":"","data":["88130B26 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Battle of Hoth":{"note":"","data":["88130B2E 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Beggar's Canyon":{"note":"","data":["88130B2C 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Blockade on Chandrila":{"note":"","data":["88130B28 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Defection At Corellia":{"note":"","data":["88130B1F 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Escape From Fest":{"note":"","data":["88130B27 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Imperial Construction Yard":{"note":"","data":["88130B22 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Liberation V":{"note":"","data":["88130B20 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Moff Seerdon's Revenge":{"note":"","data":["88130B2A 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Prisons on Kessel":{"note":"","data":["88130B25 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Raid on Sullust":{"note":"","data":["88130B29 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Rendezvou on Bankhesh":{"note":"","data":["88130B1D 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Rescue on Kessel":{"note":"","data":["88130B24 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\The Battle of Calamari":{"note":"","data":["88130B2B 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\The Death Star Trench Run":{"note":"","data":["88130B2D 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\The Jade Moon":{"note":"","data":["88130B21 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\The Search For The Noonnah":{"note":"","data":["88130B1E 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Infinite\\Infinite Health":{"note":"","data":["81137E7C 4316"],"options":null},"Infinite\\Infinite Lives":{"note":"","data":["80130B10 0008"],"options":null},"Infinite\\Infinite Secondary Weapons":{"note":"","data":["8010CA32 0008"],"options":null}},"2256ECDA-71AB1B9C-C:50":{"Access All Levels":{"note":"","data":["8008AA56 0001","8008AD3A 0001","8008A862 0001","8008A876 0001","8008A88A 0001","8008A89E 0001","8008A8B2 0001","8008A8C6 0011","8008A8DA 0021","8008AD4E 0001","8008A916 0011","8008A92A 0041","8008A93E 0021","8008A966 0001","8008A98E 0001","8008AD62 0001","8008A9DE 0001","8008A9F2 0011","8008AA06 0021","8008AD76 0001","8008A7D6 0001","8008A7EA 0001","8008A812 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81093F50 0063","81093F52 0063","81093F54 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A9097 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810864C2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810864C4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80094105 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A90B5 00??","800A90C5 00??","800A90D5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"22E9623F-B60E52AD-C:50":{"1 Win to Win\\Player 1":{"note":"","data":["D020A84F 0000","8020A84F 0001"],"options":null},"1 Win to Win\\Player 2":{"note":"","data":["D020A84F 0000","8020A84F 0010"],"options":null},"Infinite\\Health\\Player 1":{"note":"","data":["80209D81 00C8"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["81209780 0190"],"options":null},"Infinite\\Money":{"note":"","data":["8121106C 2704"],"options":null},"Infinite\\Special\\Player 1":{"note":"","data":["81209484 0190"],"options":null},"Infinite\\Special\\Player 2":{"note":"","data":["8120B1B0 0190"],"options":null}},"2337D8E8-6B8E7CEC-C:45":{"Infinite\\Eggs Once You Get One":{"note":"This is for All Yoshis All levels","data":["8103E89C 2400"],"options":null},"Infinite\\Health":{"note":"This is for All Yoshis All levels","data":["8102B780 2400"],"options":null},"Infinite\\Lives":{"note":"This is for All Yoshis All levels","data":["800F8DF7 00FF"],"options":null}},"23749578-80DC58FD-C:45":{"1 Lap to Race":{"note":"","data":["800438B3 0009","D021FBAB 0000","8021FBAB 0008","D022359B 0000","8022359B 0008"],"options":null},"Max Gear Ratios":{"note":"","data":["810C9E90 7F1E","810C9E82 707F"],"options":null},"Total Laps to Race Modifier":{"note":"","data":["800438B3 00??"],"options":{"1 lap":"01","2 lap":"02","3 lap":"03","4 lap":"04","5 lap":"05","6 lap":"06","7 lap":"07","8 lap":"08","9 lap":"09"}}},"237E73B4-D63B6B37-C:45":{"Flashing Invincible":{"note":"This cheat Makes you Flash But you cant be harmed,Once out of danger Turn the cheat off to stop the flashing.also do not put this on if you have already been hurt or you will stay on the floor.","data":["800AD767 000A"],"options":null},"Have\\Fire Bombs":{"note":"","data":["800AD73B 0003"],"options":null},"Have\\Kick Bombs Anytime":{"note":"","data":["800AC743 0003"],"options":null},"Have\\Max Fire Level":{"note":"","data":["800AD733 0003"],"options":null},"Infinite\\Bombs":{"note":"","data":["800AD758 0003"],"options":null},"Infinite\\Continue Time":{"note":"","data":["810B5CD6 0090"],"options":null},"Infinite\\Health":{"note":"","data":["800AD75F 0005"],"options":null},"Infinite\\Money":{"note":"","data":["810ABD52 FFFF"],"options":null}},"2388984C-DA7B3CC5-C:45":{"Level Select\\Proving Ground-Tightrope":{"note":"Do Not use this with Level Select The Pit-Starlight. Only use One Level Select Option At A Time","data":["8014BD9F 00??"],"options":{"Basic Training":"01","Bomb Shelter":"0B","Bottleneck":"10","Boxed Set":"06","Cathedral":"04","Crossroads":"02","Dire Straight":"07","Earth Temple":"0D","Fall Out":"05","Fire Temple":"0E","Grim Retreat":"03","Mystic":"0F","Prey":"08","Proving Grounds":"00","Tempered":"0C","Tightrope":"11","Warehouse":"09","Water Temple":"0A"}},"Level Select\\The Pit-Starlight":{"note":"Do Not use this with Level Select Proving Ground-Tightrope. Only use One Level Select Option At A Time","data":["8014BD9F 00??"],"options":{"Ampatheater":"16","Breakdown":"19","Bunker":"15","Courtyard":"22","Crypts":"18","Defcon 5":"1F","Fathom":"1D","Fire Walker":"17","Hopeless":"1B","Leap Of Faith":"13","Matrix":"1C","Retaliation":"1A","Spirit Temple":"20","Starlight":"23","Stronghold":"21","The Pedestal":"1E","The Pit":"12","Wicked Dance":"14"}},"Player 1\\Have All\\Medals":{"note":"","data":["810FCB4A FFFF","810FCB4C FFFF","810FCB4E FFFF","800FCB50 0003"],"options":null},"Player 1\\Have All\\Mini Game Icons":{"note":"","data":["800FCB17 0024"],"options":null},"Player 1\\Infinite Ammo":{"note":"","data":["80336535 0063","80336537 0063","80336539 0063","80692B95 0063","80692B97 0063","80692B99 0063","80692B9B 0063","80692B9D 0063","80692B9F 0063","80692BA1 0063"],"options":null},"Player 1\\Infinite\\Cerebral Bores":{"note":"","data":["8033653B 00FF"],"options":null},"Player 1\\Infinite\\Health":{"note":"","data":["81336526 6400","80692B86 0064"],"options":null},"Player 1\\Infinite\\Metal Claws":{"note":"","data":["80336541 00FF"],"options":null},"Player 1\\Infinite\\Proximity Mines":{"note":"","data":["8033653D 00FF"],"options":null},"Player 1\\Infinite\\Sentry Guns":{"note":"","data":["8033653F 00FF"],"options":null},"Player 1\\Infinite\\Time":{"note":"","data":["811407F4 47AF","811407F6 C4B1"],"options":null},"Player 1\\Play As":{"note":"","data":["80140358 00??"],"options":{"Adon":"05","Bastile":"0B","Blind One":"08","Death Guard":"0A","Drone":"02","Elite Guard":"07","Fireborn":"03","Juggernaut":"09","Lord Of The Dead":"06","Mantid":"01","Mites":"12","Monkey":"13","Pur-Lin":"0F","Raptor":"11","Soldier":"04","Symbiont":"10","Syra":"0C","Tail Set":"0E","Turok":"00"}},"Player 1\\Start With Weapon":{"note":"","data":["803366B0 00??"],"options":{"Assault Rifle":"05","Boomerang":"01","Cerebral Bore":"12","Chest Burster":"0F","Emaciator":"0D","Flaregun":"09","Freeze Gun":"08","Grenade Launcher":"0A","Inflator":"0E","Iron Claw":"14","Mag 60":"03","Mini Gun":"06","Mite Bite":"11","Napalm Gel":"0C","PFM Mine":"13","Plasma Rifle":"07","Raptor Claw":"10","Scorpion Launcher":"0B","Sentry Turret":"15","Shotgun":"04","Tek Crossbow":"02","Warhammer":"00"}}},"2483F22B-136E025E-C:55":{"999 Kills":{"note":"","data":["80163B03 00FF"],"options":null},"Have All Medals":{"note":"For Expert \u0026 Normal Modes","data":["50000802 0000","8017A9D9 7777"],"options":null},"Infinite\\Armor\\Falco":{"note":"","data":["80174187 00FF"],"options":null},"Infinite\\Armor\\Peppy":{"note":"","data":["8017418F 00FF"],"options":null},"Infinite\\Armor\\Slippy":{"note":"","data":["8017418B 00FF"],"options":null},"Infinite\\Dual Blue Lasers":{"note":"","data":["80163C13 0002"],"options":null},"Infinite\\Energy":{"note":"","data":["80141587 00FF","8013E6A7 00FF"],"options":null},"Infinite\\Hyper Laser":{"note":"","data":["80163B13 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["80163B09 0063"],"options":null},"Level Select":{"note":"","data":["8017A29F 00??"],"options":{"Aquas":"0D","Area 6":"03","Bolse":"11","Corneria":"00","Corneria (Multi)":"14","Fortuna":"0E","Glitch":"04","Katina":"10","Macbeth":"0B","Meteo":"01","Sector X":"02","Sector Y":"05","Sector Z":"12","Solar":"07","Titania":"0C","Training Mode Level":"0A","Venom 1":"06","Venom 2":"09","Venom With Starwolf":"13","Zoness":"08"}},"Loads O' Hits":{"note":"","data":["80163B03 00FF"],"options":null},"Unlimited\\Boost":{"note":"","data":["8113E6FC 0000","8113E6FE 0000","811415DC 0000","811415DE 0000","8013E7FD 0000","801416DD 0000"],"options":null},"Unlimited\\Smart Bombs":{"note":"","data":["80179E0B 0063"],"options":null}},"2500267E-2A7EC3CE-C:45":{"All Modes\\Always Have 1st Place":{"note":"","data":["81056444 0001"],"options":null},"All Modes\\Infinite Time":{"note":"","data":["811269CA 0700"],"options":null},"All Modes\\Press R Button For Turbo":{"note":"","data":["D103E1EA 0010","8105641A 0800"],"options":null},"Grand Prix Mode\\2 Tier Cars":{"note":"","data":["80119BB0 0039"],"options":null},"Grand Prix Mode\\All Cars Have Perfect Stats":{"note":"","data":["50008002 0000","8102F314 05DC"],"options":null},"Grand Prix Mode\\Car Modifier":{"note":"","data":["8113CF5A 00??"],"options":{"00-Agent":"19","13th Racing Kid":"0E","Age Solo Supernova":"12","Assoluto Infinito":"11","Atomic Purple":"13","Blinky":"1B","Caddy Car":"1E","Crazy Canuck":"1D","Dig Racing Team":"0C","Digipen Racing":"10","Extreme Green":"14","F/A Racing":"00","Galaga RT Carrot":"07","Galaga RT Prid's":"06","Galaga' 88":"1A","Lizard Nightmare":"16","Micro Mouse Mappy":"0D","PAC Racing":"02","Pooka":"1F","RT Blue Mappy":"05","RT Bosconian":"08","RT Nebulasray":"09","RT Pink Mappy":"04","RT Ryukyu":"01","RT Solvalou":"03","RT Xevious Green":"0B","RT Xevious Red":"0A","Red Shirt Rage":"1C","Screamin' Eagle":"17","Terrazi Terrific":"15","Ultra 64 (Full Stats)":"18","White Angel":"0F"}},"Grand Prix Mode\\Enlarge Cars":{"note":"","data":["81119758 3FC0","811197AC 3FC0","81119800 3FC0"],"options":null},"Grand Prix Mode\\Laps to Race":{"note":"","data":["8111B32E ????"],"options":{"lap":"0101","laps":"0909"}},"Grand Prix Mode\\Microscopic Cars":{"note":"","data":["80119758 003D","801197AC 003D","80119800 003D"],"options":null},"Grand Prix Mode\\Press GS For Overhead View":{"note":"","data":["8811AB0F 0002"],"options":null},"Grand Prix Mode\\Shrink Cars":{"note":"","data":["80119758 003E","801197AC 003E","80119800 003E"],"options":null},"Grand Prix Mode\\Track Modifier":{"note":"","data":["8113CF6A 00??"],"options":{"Renegade Expert":"08","Renegade Intermediate":"05","Renegade Novice":"02","Revolution Expert":"07","Revolution Intermediate":"04","Revolution Novice":"01","Ridge Racer Expert":"06","Ridge Racer Extreme":"09","Ridge Racer Intermediate":"03","Ridge Racer Novice":"00"}},"Grand Prix Mode\\Unlock\\All Cars":{"note":"","data":["8102F19C FFFF","8102F19E FFFF"],"options":null},"Grand Prix Mode\\Unlock\\All Engine Classes All Levels":{"note":"","data":["50001E08 0000","8102FAB0 0004","50001E08 0000","8102FAB2 0403"],"options":null},"Grand Prix Mode\\Unlock\\All Tracks \u0026 Trophies":{"note":"","data":["81043530 FFFF","81043532 FFFF"],"options":null}},"255018DF-57D6AE3A-C:45":{"Access All In-Game Cheats":{"note":"Pause Gameplay To Access","data":["81152946 000F","81152956 FFFF"],"options":null},"Access All Navigation Cards":{"note":"","data":["8015298B 0005"],"options":null},"Access Secret Worlds":{"note":"","data":["81152946 0064"],"options":null},"Infinite Lives":{"note":"","data":["8015299F 0063"],"options":null},"Max \u0026 Total Gold":{"note":"","data":["8015293B 0063","80152AFF 0063"],"options":null}},"2577C7D4-D18FAAAE-C:50":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118D920 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118D922 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118D924 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118D926 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["50000402 0000","8018ED70 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["80165FBD 00??","80165FEA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["8016609D 00??","801660CA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["8016617D 00??","801661AA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["8016625D 00??","8016628A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["8016633D 00??","8016636A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["8016641D 00??","8016644A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818EE4F 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F6975 0020","810F6A28 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F6985 0020","810F7800 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F6995 0020","810F85D8 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F69A5 0020","810F93B0 4000"],"options":null}},"259F7F84-7C9EED26-C:50":{"Infinite\\99 Dark Knight Discus":{"note":"","data":["801D7F4A 0063"],"options":null},"Infinite\\99 Lives":{"note":"","data":["801D7F3E 0064"],"options":null},"Infinite\\Health":{"note":"","data":["801D7F3D 0064"],"options":null},"Infinite\\Max Charge \u0026 Magnetic Nun Chaku":{"note":"","data":["801D7F06 0064"],"options":null},"Press F9 to Have\\Key":{"note":"","data":["881D7D70 0020"],"options":null},"Suit Select":{"note":"","data":["801D7F40 00??"],"options":{"Defensive":"02","Nimble":"03","Offensive":"01","Standard":"00"}},"Weapon Select":{"note":"","data":["801D7F43 00??"],"options":{"Dark Knight Discus":"01","Dark Knight Staff":"02","Magnetic Nun Chuku":"03","Standard":"00"}}},"26035CF8-802B9135-C:45":{"Access All Levels":{"note":"","data":["8008A5C6 0001","8008A5DA 0001","8008A602 0001","8008A652 0001","8008A666 0001","8008A67A 0001","8008A68E 0001","8008A6A2 0001","8008A6B6 0011","8008A6CA 0021","8008A6DE 0001","8008A706 0011","8008A71A 0041","8008A72E 0021","8008A742 0081","8008A756 0001","8008A76A 0081","8008A77E 0001","8008A7A6 0001","8008A7CE 0001","8008A7E2 0011","8008A7F6 0021","8008A846 0001","8008AB2A 0001","8008AB3E 0001","8008AB52 0001","8008AB66 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81093D40 0063","81093D42 0063","81093D44 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A8EA7 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810862B2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810862B4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80093EF5 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A8EA5 00??","800A8EB5 00??","800A8EC5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"264D7E5C-18874622-C:45":{"All Levels\\Dash Becomes Shorter \u0026 Wider":{"note":"","data":["800BA025 FFFF"],"options":null},"All Levels\\Infinite\\Lives":{"note":"","data":["800E05CB 0064"],"options":null},"All Levels\\Infinite\\Missiles":{"note":"","data":["800E1265 00FF"],"options":null},"All Levels\\Large Mutant Enemies":{"note":"","data":["800BB62B FFFF"],"options":null},"All Levels\\No Clipping\\Off":{"note":"","data":["81111E67 0001"],"options":null},"All Levels\\No Clipping\\On":{"note":"","data":["81111E67 0000"],"options":null},"All Levels\\See Through\\Everything Except Specific Things":{"note":"","data":["800BC665 FFFF"],"options":null},"All Levels\\See Through\\Some Walls":{"note":"","data":["800BC625 FFFF"],"options":null},"All Levels\\Time Always 0:00:02":{"note":"","data":["810E04E8 4000"],"options":null},"All Levels\\Visibililty\\Maximum":{"note":"","data":["800BA62B FFFF"],"options":null},"All Levels\\Visibililty\\Minimum":{"note":"","data":["800BA66B FFFF"],"options":null},"All Stages\\Infinite Health":{"note":"","data":["81072D0C 2400"],"options":null},"All Stages\\Infinite\\Disruptor Ammo":{"note":"","data":["81073F04 2400"],"options":null},"All Stages\\Infinite\\Flame Ammo":{"note":"","data":["81073720 2400"],"options":null},"All Stages\\Infinite\\Jet Pack":{"note":"","data":["81076AAC 2400","81076C58 2400","81076B48 2400"],"options":null},"All Stages\\Infinite\\Pulse Ammo":{"note":"","data":["81074204 2400"],"options":null},"All Stages\\Infinite\\Seeker Ammo":{"note":"","data":["81073A94 2400"],"options":null},"All Stages\\Infinite\\Stunner Ammo":{"note":"","data":["81073BD4 2400"],"options":null},"All Stages\\Invincible":{"note":"","data":["8107A770 2400"],"options":null},"All Stages\\Lasers Never Overheat":{"note":"","data":["81073948 2400"],"options":null},"All Stages\\Upper Lasers":{"note":"Don't Use With Never Overheat Code","data":["81073944 3C06","81073946 4EFF"],"options":null},"Press GS For Pink Cheat Debug Screen":{"note":"","data":["890D017F 0001"],"options":null}},"2655BB70-667D9925-C:45":{"Have\\All Magic":{"note":"","data":["800CE9C8 0010","800CE9CD 0000","800CE9D7 0001","800CE9E1 0002","800CE9EB 0003","800CE9F5 0005","800CE9FF 0006","800CEA09 0008","800CEA13 0009","800CEA1D 000B","800CEA27 000E","800CEA31 000F","800CEA3B 0010","800CEA45 0011","800CEA4F 000A","800CEA59 000C","800CEA63 000D"],"options":null},"Have\\Magic On Level 4":{"note":"","data":["810C8B5D FFFF","810C8B5E FFFF","810C8B5F FFFF","810C8B60 FFFF","810C8B61 FFFF","810C8B62 FFFF"],"options":null},"Have\\Max Armour Level":{"note":"","data":["800C8B80 0064"],"options":null},"Have\\Max Experience Level":{"note":"","data":["800C8B7C 00FF"],"options":null},"Have\\Max Spirit Level":{"note":"","data":["800C8B84 0064"],"options":null},"Have\\Max Weapon Level":{"note":"","data":["800C8B82 0064"],"options":null},"Have\\Weapons On Max Upgrade":{"note":"","data":["50000408 0000","800C8B2C 0009"],"options":null},"Infinite Air Under Water":{"note":"","data":["800C8A64 0069"],"options":null},"Infinite Max\\999 Lives":{"note":"","data":["810C8B78 03E8"],"options":null},"Infinite Max\\Fire Ammo":{"note":"","data":["800C8B33 0066"],"options":null},"Infinite Max\\Fusion Ammo":{"note":"","data":["800C8B43 0066"],"options":null},"Infinite Max\\Health":{"note":"","data":["800C8959 0066"],"options":null},"Infinite Max\\Ionic Ammo":{"note":"","data":["800C8B3B 0066"],"options":null},"Infinite Max\\Light Ammo":{"note":"","data":["800C8B2B 0066"],"options":null},"Infinite Max\\Mana":{"note":"","data":["800C8B7F 0066"],"options":null},"Matts":{"note":"","data":["D00C8A4A 0080","810C8963 0100"],"options":null},"Play As Select":{"note":"","data":["800FCD45 00??"],"options":{"Ike Hawkings (Corporal)":"00","Julia Chase (Cartographer)":"02","Karma (The Ex-Deviant)":"03","Max Havok (Chief Enginer)":"04","Mr Bodybolt (7th Passenger)":"06","Solaar (Archbishop)":"05","Sophia Hawkings (Stowaway)":"01"}},"Press A For Bionic Jump":{"note":"This will make you jump to a great height","data":["D00C8A4A 0080","810C8968 ????"],"options":{"Max Jump":"0800","Medium Jump":"0250"}}},"26809B20-39A516A4-C:4A":{"Access All Boards \u0026 Characters":{"note":"","data":["800500C1 000C"],"options":null},"All Street Work Levels Unlocked":{"note":"","data":["50007801 0000","80050170 00??"],"options":{"Courses unlocked":"01","Courses unlocked with A rank":"05","Courses unlocked with B rank":"04","Courses unlocked with C rank":"03","Courses unlocked with S rank":"06"}},"Class Score Select":{"note":"","data":["8016609E 00??"],"options":{"Class A":"64","Class B":"40","Class C":"20","Class S":"FF"}},"Coin Perfect Select":{"note":"this is for Coin Mode to get Perfect Coin Collection Score straight away when you enter the level","data":["801660B3 00??"],"options":{"Giant House Level 1":"6E","Giant House Level 2":"77","Giant House Level 3":"72","Green Park Level 1":"14","Green park Level 2":"1A","Green park Level 3":"2B","Lost Forest Level 1":"4A","Lost Forest Level 2":"59","Lost Forest Level 3":"80","Snow Festival 64 Levels 1 2 \u0026 3":"7D","Sunset Island Level 1":"6F","Sunset Island Level 2":"74","Sunset Island Level 3":"81"}},"Infinite Time\\Attack Time Time 000000":{"note":"","data":["811137EA 0000"],"options":null},"Infinite Time\\Street Work \u0026 Coin":{"note":"","data":["801137E9 0028"],"options":null},"Infinite Time\\Time Attack":{"note":"","data":["801137EB 0000"],"options":null},"Infinite Turbo\\Player 1":{"note":"","data":["80166019 0009"],"options":null},"Infinite Turbo\\Player2":{"note":"","data":["80167991 0009"],"options":null},"Maxed Out Turbo Bar":{"note":"","data":["811656E8 429F","80166017 0051"],"options":null},"Options\\Camera Type Modifier":{"note":"","data":["810500A6 00??"],"options":{"Roll Off Far":"05","Roll Off Mid":"04","Roll Off Near":"03","Roll On Far":"02","Roll On Mid":"01","Roll On Near":"00"}},"Options\\DJ Function Modifier":{"note":"","data":["810500AC 00??"],"options":{"DJ Function Off":"00","DJ Function On":"01"}},"Options\\Music Modifier":{"note":"","data":["800500A9 00??"],"options":{"BGM Off":"00","BGM On":"FF"}},"Options\\Sound Effects Modifier":{"note":"","data":["810500AA 00??"],"options":{"SE Off":"00","SE On":"FF"}}},"26CD0F54-53EBEFE0-C:4A":{"Have\\Max Car Strength":{"note":"This has Graphical Issues when used.....","data":["A0165C21 00FF"],"options":null},"Have\\Max Car Upgrade":{"note":"","data":["80165BF8 00FF","80165BF9 00FF","80165BFA 00FF","80165BFB 005F"],"options":null},"Have\\Max Gear Box Upgrades":{"note":"","data":["80165C00 00FF","80165C01 00FF","80165C02 007F"],"options":null},"Have\\Max Roof Upgrades":{"note":"","data":["81165C2A FFFF"],"options":null},"Have\\Max Steering Upgrades":{"note":"","data":["80165C1A 006F","80165C1B 000F"],"options":null},"Have\\Max Tyre Tred Upgrades":{"note":"","data":["80165C10 00FF"],"options":null},"Have\\Max Weapons Upgrades":{"note":"","data":["81165C32 FFFF","80165C33 00FF"],"options":null},"Have\\Max Wheel Parts Upgrades":{"note":"","data":["80165C0A 00FF","80165C0B 007F"],"options":null},"Infinite\\Blue Pointa":{"note":"","data":["801F92A7 0009"],"options":null},"Infinite\\Red Weapons Use":{"note":"","data":["801F92A5 0009"],"options":null},"Sound Select\\Music Mod":{"note":"","data":["8014A558 00??"],"options":{"High":"10","Medium":"0A","Off":"00"}},"Sound Select\\SFX Mod":{"note":"","data":["8014A559 00??"],"options":{"High":"10","Medium":"0A","Off":"00"}},"Sound Select\\Sound Mod":{"note":"","data":["8014A55A 00??"],"options":{"Mono":"01","Stereo":"00"}},"{Always First With 1 Lap to Race}":{"note":"","data":["800F7A31 0003"],"options":null},"{Unlocked All Stages}":{"note":"","data":["801672EB 000F"],"options":null},"{Weapon Select}":{"note":"","data":["801F92A1 00??"],"options":{"100 Ton Weight":"0E","Blue Lazer Cloud":"10","Bolt Launcher":"0F","Cannon":"08","Crafy Mine":"0B","Freeze Bombs":"09","Hypno Spinning Birds":"0D","Invincible":"02","Iron Beam Drop":"07","Lightening Cloud Attack":"0A","Nothing":"00","Red Spinning Fish?":"03","Rocket Launcher (Hangs?)":"0C","Smoke Bomb":"05","Turbo Boost":"01","Tyre Buster Tacks":"06","Wind Attack":"04"}}},"277B129D-DD3879FF-C:50":{"Earn Spirits Faster":{"note":"","data":["8007C25D 0000"],"options":null},"Have All Elements":{"note":"","data":["8107C24C 3232","8107C24E 3232"],"options":null},"Makes your HP 999-999":{"note":"","data":["8107C22C 03E7","8107C22E 03E7"],"options":null},"Makes your MP 999-999":{"note":"","data":["8107C230 03E7","8107C232 03E7"],"options":null},"No Random Battles":{"note":"","data":["8108CD1C 0000","8108CD1E 0000"],"options":null},"Set Agility to 999-999":{"note":"","data":["8107C234 03E7"],"options":null},"Set Defence to 999-999":{"note":"","data":["8107C236 03E7"],"options":null}},"27A3831D-B505A533-C:45":{"Always Have Wallet Size":{"note":"","data":["801189DA 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C681D 0010","81119C9E 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["80119821 00FF","80119C97 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,\u0026 then press reset (F1) you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D011BB71 0000","80119D4B 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["8002397C 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801189BE 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801189BF 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801189C0 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801189C1 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1A68 0005","801EE508 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801189DA 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801189DB 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801189D9 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189D4 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189DC 30FF","811189DE FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801189B0 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801189B6 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801189BC 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["801189B4 0009"],"options":null},"Have\\Bombs":{"note":"","data":["801189AE 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["801189B8 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["801189AD 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["801189AC 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["801189AF 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["801189B2 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["801189B5 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["801189B9 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["801189BA 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["801189B1 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["801189B7 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["801189BD 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["801189BB 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["801189B3 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["801189C7 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["801189E0 0007","801189E1 0007","801189E2 0007","801189E3 0007","801189E4 0007","801189E5 0007","801189E6 0007","801189E7 0007","801189E8 0007","801189E9 0007","801189EA 0007","801189F7 0009","801189F8 0009","801189F9 0009","801189FA 0009","801189FB 0009","80118A01 0009","80118A04 0009","801189FF 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801189CC 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["801189C6 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801189C5 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801189CA 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801189C4 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118968 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118971 0008","80118972 0001","80118974 0001","8011896B 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801189D2 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["81119D04 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["80119D0D 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D011BB11 0020","811D93D0 40CB","D011BB11 0000","811D9BF2 000D","801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119D41 00??"],"options":{"English":"00","French":"02","German":"01"}},"Level Select":{"note":"","data":["D01C6E35 0000","8111893A ????"],"options":{"?":"006C","Below The Phantom Gannon Boss":"000C","Dodongo's Cavern":"0004","Gerudo Training Ground":"0008","Inside Jabu-Jabu's Belly":"0027","Inside the Deku Tree":"0000","Lakeside Laboratory":"0042","Royal Family's Tomb":"002C","Shoadow Temple":"0036","Temple Of Time":"0052","Water Temple":"0010"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["80118A07 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["80118A09 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["81118966 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["81119D00 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L\\For Infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D011BB11 0020","811D9BF2 000D"],"options":null},"Press L\\To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D011BB11 0020","811D93D0 40CB"],"options":null},"Time of Day Modifier":{"note":"","data":["81118944 ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["801189C2 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["801189C3 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["80118976 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119B5A 0000","81119B5C 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"27C425D0-8C2D99C1-C:50":{"Access All Boards \u0026 Characters":{"note":"","data":["80050071 000C"],"options":null},"All Street Work Levels Unlocked":{"note":"","data":["50007801 0000","80050120 00??"],"options":{"Courses unlocked":"01","Courses unlocked with A rank":"05","Courses unlocked with B rank":"04","Courses unlocked with C rank":"03","Courses unlocked with S rank":"06"}},"Class Score Select":{"note":"","data":["8016609E 00??"],"options":{"Class A":"64","Class B":"40","Class C":"20","Class S":"FF"}},"Coin Perfect Select":{"note":"this is for Coin Mode to get Perfect Coin Collection Score straight away when you enter the level","data":["801660B3 00??"],"options":{"Giant House Level 1":"6E","Giant House Level 2":"77","Giant House Level 3":"72","Green Park Level 1":"14","Green park Level 2":"1A","Green park Level 3":"2B","Lost Forest Level 1":"4A","Lost Forest Level 2":"59","Lost Forest Level 3":"80","Snow Festival 64 Levels 1 2 \u0026 3":"7D","Sunset Island Level 1":"6F","Sunset Island Level 2":"74","Sunset Island Level 3":"81"}},"Infinite Time\\Attack Time Time 000000":{"note":"","data":["8110FA0A 0000"],"options":null},"Infinite Time\\Street Work \u0026 Coin":{"note":"","data":["8010FA09 0028"],"options":null},"Infinite Time\\Time Attack":{"note":"","data":["8010FA0B 0000"],"options":null},"Infinite Turbo\\Player 1":{"note":"","data":["80166019 0009"],"options":null},"Infinite Turbo\\Player2":{"note":"","data":["80167991 0009"],"options":null},"Maxed Out Turbo Bar":{"note":"","data":["811656E8 429F","80166017 0051"],"options":null},"Options\\Camera Type Modifier":{"note":"","data":["81050056 00??"],"options":{"Roll Off Far":"05","Roll Off Mid":"04","Roll Off Near":"03","Roll On Far":"02","Roll On Mid":"01","Roll On Near":"00"}},"Options\\DJ Function Modifier":{"note":"","data":["8105005C 00??"],"options":{"DJ Function Off":"00","DJ Function On":"01"}},"Options\\Music Modifier":{"note":"","data":["80050059 00??"],"options":{"BGM Off":"00","BGM On":"FF"}},"Options\\Sound Effects Modifier":{"note":"","data":["8105005A 00??"],"options":{"SE Off":"00","SE On":"FF"}}},"27C985A8-ED7CE5C6-C:00":{"Buster Parts Slot Select\\Slot 01":{"note":"","data":["8020B293 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 02":{"note":"","data":["8020B294 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 03":{"note":"","data":["8020B295 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 04":{"note":"","data":["8020B296 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 05":{"note":"","data":["8020B297 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 06":{"note":"","data":["8020B298 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 07":{"note":"","data":["8020B299 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 08":{"note":"","data":["8020B29A 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 09":{"note":"","data":["8020B29B 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 10":{"note":"","data":["8020B29C 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 11":{"note":"","data":["8020B29D 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 12":{"note":"","data":["8020B29E 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 13":{"note":"","data":["8020B29F 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 14":{"note":"","data":["8020B2A0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 15":{"note":"","data":["8020B2A1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 16":{"note":"","data":["8020B2A2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 17":{"note":"","data":["8020B2A3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 18":{"note":"","data":["8020B2A4 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 19":{"note":"","data":["8020B2A5 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 20":{"note":"","data":["8020B2A6 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 21":{"note":"","data":["8020B2A7 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 22":{"note":"","data":["8020B2A8 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 23":{"note":"","data":["8020B2A9 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 24":{"note":"","data":["8020B2AA 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 25":{"note":"","data":["8020B2AB 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 26":{"note":"","data":["8020B2AC 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 27":{"note":"","data":["8020B2AD 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 28":{"note":"","data":["8020B2AE 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 29":{"note":"","data":["8020B2AF 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 30":{"note":"","data":["8020B2B0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 31":{"note":"","data":["8020B2B1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 32":{"note":"","data":["8020B2B2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 33":{"note":"","data":["8020B2B3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 01":{"note":"","data":["8020B290 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 02":{"note":"","data":["8020B291 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 03":{"note":"","data":["8020B292 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Freeze Timer at 00:00":{"note":"","data":["811C0E3C 0000","811C0E3E 0000"],"options":null},"Have All\\Normal Items":{"note":"","data":["8120BAE0 FFFF","8120BAE2 FFFF","8120BAE4 FFFF","8120BAE6 FFFF"],"options":null},"Have All\\Special Items":{"note":"","data":["8120BADC FFFF","8120BADE FFFF"],"options":null},"Have All\\Special Weapons":{"note":"These are Equiped With Roll","data":["8120BAD0 FFFF"],"options":null},"Infinite\\Ammo":{"note":"","data":["8120B34A 0080","8120B352 0010","8120B35A 0708","8120B362 0018","8120B36A 0010","8120B372 0708","8120B37A 0020","8120B382 0020","8120B38A 0020","8120B392 0018","8120B39A 012C","8120B3A2 0258"],"options":null},"Infinite\\Health":{"note":"","data":["8120AEAE 0050"],"options":null},"Infinite\\Max Zenny":{"note":"","data":["811C0E4C 0098","811C0E4E 967F"],"options":null},"Rapid Fire":{"note":"","data":["8020B343 0002"],"options":null}},"2829657E-A0621877-C:45":{"Board Select":{"note":"","data":["800ED5C3 00??"],"options":{"Bowser's Magma Mountain":"06","DK's Jungle Adventure":"00","Eternal Star":"07","Explaination Map":"08","Luigi's Engine Room":"04","Mario's Rainbow Castle":"05","Mini Game Stadium":"09","Peach's Birthday Cake":"01","Wario's Battle Canyon":"03","Yoshi's Tropical Island":"02"}},"Lower Left Character\\Coin Options":{"note":"","data":["800F3318 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D635B 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800F331C 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["800F3348 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D639F 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800F334C 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Mini Game Island\\99 Coins":{"note":"","data":["800F37C4 0063"],"options":null},"Mini Game Island\\Always Clear Level":{"note":"","data":["800F32BB 0063"],"options":null},"Mini Game Island\\Press GS For 99 Lives":{"note":"","data":["880F37BB 0063"],"options":null},"Mini Game Island\\World Level Select":{"note":"Select where you want to go then Enable the cheat. as soon as you enter turn the cheat back off so you can move on to the next level and not the same place.","data":["810F32C4 ????"],"options":{"1-1 Coin Block Blitz":"0001","1-2 Coin Block Bash":"0002","1-3 Coin Shower Flower":"0003","1-4 Paddle Battle":"0004","2-1 Memory Match":"0006","2-2 Ground Pound":"0007","2-3 Limbo Dance":"0008","2-4 Magical Mushroom":"0009","2-5 Piranha's Pursuit":"000A","3-1 Crazy Cutter":"0018","3-2 Buried Treasure":"0019","3-3 Desrt Dash":"001A","3-4 Tug O' War":"001B","3-5 Teetering Towers":"001C","9-1 Hammer Drop":"004A","9-2 Slot Car Derby":"004B","9-3 Shell Game":"004C","9-4 Knock Block Tower":"004D","9-5 Platform Peril":"004E","Goal Space - Final Goal":"004F","Save and Return Space 1":"0005","Save and Return Space 2":"001D","Save and Return Space 3":"0029","Save and Return Space 4":"0049","Start Save and Return Space":"0000","World 4-1 to 4-3 - Entrance":"001E","World 4-4 Entrance":"0028","World 6-1 to 6-6 Castle Entrance":"002A","World 8-6 to 8-1 Castle Entrance 2":"0048"}},"Mini Game\\Max 99 Coins":{"note":"","data":["800F3770 0063"],"options":null},"Mini Game\\Unlimited 99 lives":{"note":"","data":["800F3767 0063"],"options":null},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["800F32B8 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D62D3 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800F32BC 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["800F32E8 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D6317 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800F32EC 00??"],"options":{"0 Stars":"00","99 Stars":"64"}}},"2857674D-CC4337DA-C:45":{"Brightness Modifier":{"note":"","data":["810B96EC ????"],"options":{"Very Dark":"8000","Very Well Lit Up":"7FFF"}},"Ignatius\\Infinite Health\\[Level 01]Chelsea":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802EC6E6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 02]Spitafields":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["803215FE 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 03]Thames Tunnel":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031AB6E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 04]Sewer Snake":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80255E46 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 05]India Docks":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80321546 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 06]Highgate Cemetery":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031B2E6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 07]Hampstead Heath":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["803218B6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 08]Queenhite Docks":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80320C1E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 09]City":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80328256 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 10]Smithfield":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8030B05E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 11]Snowman":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80251496 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 12]Regent's":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80315326 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 13]London Zoo":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031E00E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 14]St. Marilebone":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031CD4E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 15]Bloomsbury":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8032C4F6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 16]Pimlico":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031F9CE 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 17]Jose Manuel":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8025F196 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 18]Westminister":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802F4ECE 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 19]Westminister II":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802F5DE6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 20]The Roofs":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802848FE 0010"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000D02 0000","800A4BAF 0009"],"options":null},"Infinite\\Berzerkers":{"note":"","data":["810A4BBE 0009"],"options":null},"Infinite\\Chaos":{"note":"","data":["810A4BC4 0009"],"options":null},"Infinite\\Dynamite":{"note":"","data":["810A4BB6 0009"],"options":null},"Infinite\\Fire Bombs":{"note":"","data":["810A4BBA 0009"],"options":null},"Infinite\\Flash":{"note":"","data":["810A4BB8 0009"],"options":null},"Infinite\\Freeze Spell":{"note":"","data":["810A4BB4 0009"],"options":null},"Infinite\\Gun":{"note":"","data":["810A4BC6 0009"],"options":null},"Infinite\\Healing":{"note":"","data":["810A4BC2 0009"],"options":null},"Infinite\\Lives":{"note":"","data":["800A4B53 0009"],"options":null},"Infinite\\Multi-Gun":{"note":"","data":["810A4BBC 0009"],"options":null},"Infinite\\Proximity Mines":{"note":"","data":["810A4BB0 0009"],"options":null},"Infinite\\Repulsive Smoke":{"note":"","data":["810A4BB2 0009"],"options":null},"Infinite\\Spider Cards":{"note":"","data":["810A4BAE 0009"],"options":null},"Infinite\\Super Healing":{"note":"","data":["810A4BC0 0009"],"options":null},"Level Select":{"note":"","data":["D00978B1 0000","810978B0 00??"],"options":{"Bloomsbury":"0E","Chelsea":"00","City":"08","Hampstead Heath":"06","Highgate Cemetery":"05","India Docks":"04","Jose Manuel":"10","London Zoo":"0C","Map":"14","Pimlico":"0F","Queenhite Docks":"07","Regent's":"0B","Sewer Snake":"03","Smithfield":"09","Snowman":"0A","Spitafields":"01","St. Marilebone":"0D","Thames Tunnel":"02","The Roofs":"13","Westminister":"11","Westminister II":"12"}},"Nadia\\Infinite Health\\[Level 01]Chelsea":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802EB6D6 000C"],"options":null},"Nadia\\Infinite Health\\[Level 02]Spitafield":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80320116 000C"],"options":null},"Nadia\\Infinite Health\\[Level 03]Thames Tunnel":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80319AC6 000C"],"options":null},"Nadia\\Infinite Health\\[Level 04]Sewer Snake":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80254926 000C"],"options":null},"Nadia\\Infinite Health\\[Level 05]India Docks":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["803202CE 000C"],"options":null},"Nadia\\Infinite Health\\[Level 06]Highgate Cemetary":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031A58E 000C"],"options":null},"Nadia\\Infinite Health\\[Level 07]Hampstead Heath":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["803203D6 000C"],"options":null},"Nadia\\Infinite Health\\[Level 08]Queenhite Dock's":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031FB7E 000C"],"options":null},"Nadia\\Infinite Health\\[Level 09]City":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80326A36 000C"],"options":null},"Nadia\\Infinite Health\\[Level 10]Smithfield":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8030A0CE 000C"],"options":null},"Nadia\\Infinite Health\\[Level 11]Snowman":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80250036 000C"],"options":null},"Nadia\\Infinite Health\\[Level 12]Regent's Canal":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80313E36 000C"],"options":null},"Nadia\\Infinite Health\\[Level 13]London Zoo":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031CB66 000C"],"options":null},"Nadia\\Infinite Health\\[Level 14]St. Marilebone":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031B686 000C"],"options":null},"Nadia\\Infinite Health\\[Level 15]Bloomsbury":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8032B256 000C"],"options":null},"Nadia\\Infinite Health\\[Level 16]Pimlico":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031E4B6 000C"],"options":null},"Nadia\\Infinite Health\\[Level 17]Jose Manuel":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8025DA0E 000C"],"options":null},"Nadia\\Infinite Health\\[Level 18]Westminister":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802F360E 000C"],"options":null},"Nadia\\Infinite Health\\[Level 19]Westminister II":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802F4C76 000C"],"options":null},"Nadia\\Infinite Health\\[Level 20]The Roofs":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80282DB6 000C"],"options":null}},"28784622-FFB22985-C:45":{"1 Down Per Possession":{"note":"","data":["800785D2 0004"],"options":null},"Always 1st Down":{"note":"","data":["800785D2 0001"],"options":null},"Infinite Player Creation Pts":{"note":"","data":["8107A0F2 00C8"],"options":null}},"28D5562D-E4D5AE50-C:4A":{"Presss F9 to Refresh Timer to 80":{"note":"When time is running low, just press F9 to refresh the timer back to 80.","data":["890760CA 0400"],"options":null},"Silence Shouting Commentator":{"note":"This shuts off the Shouting Commentary, giving you the much much needed silence.","data":["80076171 0001"],"options":null}},"2952369C-B6E4C3A8-C:50":{"Infinite Health Stadium \u0026 Gym Leader Castle":{"note":"","data":["801DD22D 0030"],"options":null},"Mini Games\\Player 1\\Clear Cut Challenge gets perfect score":{"note":"","data":["801744C3 0063"],"options":null},"Mini Games\\Player 1\\Delibird Delivery Perfect Score":{"note":"","data":["801AC2CC 0063"],"options":null},"Mini Games\\Player 1\\Egg Emergency perfect score":{"note":"","data":["80191C3F 0064"],"options":null},"Mini Games\\Player 1\\Furret Frolic Perfect Score":{"note":"","data":["801E9623 0063"],"options":null},"Mini Games\\Player 1\\Gutsy Golbat has 99 Hearts":{"note":"","data":["D017711F 0001","8017711F 0063"],"options":null},"Mini Games\\Player 1\\Roll Out Rampage Always in 1st Place":{"note":"","data":["80103179 0001"],"options":null},"Mini Games\\Player 1\\Streaming Stampede Perfect Score":{"note":"","data":["8018138B 0063"],"options":null},"Mini Games\\Player 1\\Topsy Turvy":{"note":"Immediatly wins","data":["D01769E7 0001","801769E7 0005"],"options":null},"Mini Games\\Player 2\\Gutsy Golbat has 99 hearts":{"note":"","data":["D017714B 0001","8017714B 0063"],"options":null},"Mini Games\\Player 3\\Gutsy Golbat has 99 hearts":{"note":"","data":["D0177177 0001","80177177 0063"],"options":null},"Mini Games\\Player 4\\Gutsy Golbat has 99 hearts":{"note":"","data":["D01771A3 0001","801771A3 0063"],"options":null}},"29A045CE-ABA9060E-C:46":{"Always 1st":{"note":"","data":["812C56A6 0001"],"options":null},"Have All\\Races":{"note":"","data":["50000702 0000","812B66A4 0101"],"options":null},"Have All\\Ships":{"note":"","data":["50000702 0000","812B66B2 0101"],"options":null},"Infinite\\Boosts\\Player 1":{"note":"","data":["812C56AC 4190"],"options":null},"Infinite\\Boosts\\Player 2":{"note":"","data":["812C59DC 4190"],"options":null},"Infinite\\Time":{"note":"","data":["812B52A0 42C8"],"options":null}},"29CE7692-71C58579-C:50":{"Activate Cheat Menu":{"note":"","data":["80053F78 0001"],"options":null},"Away Team Score":{"note":"","data":["8012BC2D 00??"],"options":{"Max Score":"FF","No Score":"00"}},"Home Team Scores":{"note":"","data":["8012BC2C 00??"],"options":{"Max Score":"FF","No Score":"00"}}},"2A49018D-D0034A02-C:50":{"Access All Tracks":{"note":"","data":["810B88DA 0001"],"options":null},"Always 1st":{"note":"","data":["800BB1F7 0001"],"options":null},"Always Turbo Level 1":{"note":"In Easy Mode","data":["810B4070 3100","810BBD30 0000"],"options":null},"Always Win Head 2 Head":{"note":"","data":["810BD590 0008"],"options":null},"Infinite 99 Lives":{"note":"","data":["800BB1C2 0064"],"options":null},"One Lap To Race":{"note":"","data":["810B88DE 0101"],"options":null}},"2A6B1820-6ABCF466-C:45":{"Activate\\Auto Abort Disable":{"note":"","data":["800F4078 0001"],"options":null},"Activate\\Cones to Mines":{"note":"","data":["800F3F88 0001"],"options":null},"Activate\\Disable Car 2 Car Control":{"note":"","data":["800F4050 0001"],"options":null},"Activate\\Resurrect in Place":{"note":"","data":["800F4080 0001"],"options":null},"Activate\\Stop Timer":{"note":"","data":["800F4090 0001"],"options":null},"Activate\\Upside Down Mode":{"note":"","data":["800F4061 0001"],"options":null},"Always Place 1st":{"note":"","data":["80101339 0000"],"options":null},"Car":{"note":"","data":["D00F40A5 0020","800D9EC1 00??","800D9F64 00??","800DA078 00??","800DA321 00??"],"options":{"F1 Car":"0A","Hot Rod":"09","Taxi":"08"}},"Car Type":{"note":"It gets you from 0-150 in the the time it takes the F1 racer to. Don't use the F1 racer and only hold until you reach 150 or the game will freeze.","data":["800F40B1 00??"],"options":{"Fat Car":"02","Flat Car":"01","Giant Car":"03","Invisible Car":"0A","Invisible Car (Can See Wheels)":"CD","Normal Car":"00","Paper-Thin Cars":"66","Screen-Talled Cars":"6E","Super-Sky Car":"BB","Super-Sky Car #2":"DD","Super-Tiny Car":"FF","Super-Tiny Car #2":"44"}},"Edge Boost":{"note":"by pressing R you will get a small speed boost that pushes you ahead.","data":["D00F40A5 0010","81101331 FFFF"],"options":null},"Gravity":{"note":"","data":["800F3D91 00??"],"options":{"1 Weight":"02","2 Weights":"03","A Balloon \u0026 2 Weights":"00","Normal":"01"}},"Have Two Special Cars":{"note":"You receive the Hotrod and Taxi with this code, but you may have to go through the cars from the \"Beginning\" past the \"Extreme\" for them to appear.","data":["810CAC82 FFFF","810CAC98 FFFF","810CACAE FFFF","810CACC4 FFFF","810CACDA FFFF","810CACF0 FFFF"],"options":null},"Press GS For Track Select":{"note":"With this code, press GS when on the track selction screen and press A to select that track!","data":["88100050 00??"],"options":{"Track 1":"00","Track 2":"01","Track 3":"02","Track 4":"03","Track 5":"04","Track 6":"05","Track 7":"06"}}},"2AF9B65C-85E2A2D7-C:45":{"Always Place 1st":{"note":"","data":["800A960F 0000"],"options":null},"Infinite Time":{"note":"","data":["80094E97 0064"],"options":null},"Low Course Time":{"note":"","data":["8009483B 0000"],"options":null}},"2B38AEC0-6350B810-C:46":{"Always Have\\50 pieces of corn":{"note":"","data":["801E27C1 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E27B0 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["811E27AE 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E27C2 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E27B5 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E27C0 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D0090001 0010","811E2726 1000","D0090001 0010","811E2736 1000"],"options":null},"No Music":{"note":"","data":["801DD966 0000"],"options":null},"Start with Berry Weapon":{"note":"","data":["801E27B7 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Subtitles On":{"note":"","data":["801DDBDB 00??"],"options":{"Off":"00","On":"01"}},"Unlock All Levels":{"note":"","data":["81099E90 000F"],"options":null}},"2B4F4EFB-43C511FE-C:50":{"Always Have Weapon Options\\Player 1":{"note":"","data":["810E2DD4 00??"],"options":{"Anvil":"79","Bee hive":"6D","Bird bath":"04","Blue Swordfish":"63","Bouy":"29","Broom":"08","Chair":"0B","Champagne":"0C","Chicken":"0E","Club":"03","Crate":"0F","Deck chair":"14","Egg":"16","Fish":"1A","Frying Pan":"1E","Gardeners Fork":"1D","Mallet":"2A","Milk Bottle":"2D","Mooses head":"78","NCube knife":"09","NCube missiles":"0A","Plank":"39","Rolling Pin":"41","Saucepan":"64","Spade":"46","Spanner":"4E","Stick":"55","Stool":"6B","Tennis Racket":"48","Watermelon":"2B","Wooden Chair":"1F","Wooden Spoon":"65"}},"Always Have Weapon Options\\Player 2":{"note":"","data":["810E30AC 00??"],"options":{"Anvil":"79","Bee hive":"6D","Bird bath":"04","Blue Swordfish":"63","Bouy":"29","Broom":"08","Chair":"0B","Champagne":"0C","Chicken":"0E","Club":"03","Crate":"0F","Deck chair":"14","Egg":"16","Fish":"1A","Frying Pan":"1E","Gardeners Fork":"1D","Mallet":"2A","Milk Bottle":"2D","Mooses head":"78","NCube knife":"09","NCube missiles":"0A","Plank":"39","Rolling Pin":"41","Saucepan":"64","Spade":"46","Spanner":"4E","Stick":"55","Stool":"6B","Tennis Racket":"48","Watermelon":"2B","Wooden Chair":"1F","Wooden Spoon":"65"}},"Infinite Health":{"note":"","data":["800E2BDD 00C8"],"options":null},"Infinite time":{"note":"","data":["800FF18E 00F0"],"options":null},"No music":{"note":"","data":["800B7718 0000"],"options":null},"One Hit To Kill\\Player 1":{"note":"This Will Give Player 1 A One Hit Kill Over Player 2","data":["800E2EB4 0080"],"options":null},"One Hit To Kill\\Player 2":{"note":"This Will Give Player 2 A One Hit Kill Over Player 1","data":["800E2BDC 0080"],"options":null},"Open All Versus Arenas":{"note":"","data":["800E4934 00FF","800E4935 00FF"],"options":null},"[Unlock All Characters]":{"note":"This Gives you all Characters to choose from plus fixes A freeze on the Charecter Select Menu by having it on","data":["800E4933 00FF"],"options":null}},"2B6FA7C0-09A71225-C:45":{"Aquadome Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE013 0000"],"options":null},"Aquadome Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F14A3 0000"],"options":null},"Aquadome Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE012 0200"],"options":null},"Aquadome Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F14B2 0200"],"options":null},"Aquadome Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE00B 00AA"],"options":null},"Aquadome Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F14AB 00AA"],"options":null},"Aquadome Stage\\No Energy\\Player 1":{"note":"","data":["801EE00B 0000"],"options":null},"Aquadome Stage\\No Energy\\Player 2":{"note":"","data":["801F14AB 0000"],"options":null},"Backwash Bay Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE763 0000"],"options":null},"Backwash Bay Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1C03 0000"],"options":null},"Backwash Bay Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE772 0200"],"options":null},"Backwash Bay Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1C12 0200"],"options":null},"Backwash Bay Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE76B 00AA"],"options":null},"Backwash Bay Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1C0B 00AA"],"options":null},"Backwash Bay Stage\\No Energy\\Player 1":{"note":"","data":["801EE76B 0000"],"options":null},"Backwash Bay Stage\\No Energy\\Player 2":{"note":"","data":["801F1C0B 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EF1B3 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F2653 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EF1C2 0200"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F2662 0200"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EF1BB 00AA"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F265B 00AA"],"options":null},"Boogerhenge, Tureen Toilet Stage\\No Energy\\Player 1":{"note":"","data":["801EF1BB 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\No Energy\\Player 2":{"note":"","data":["801F265B 0000"],"options":null},"Candy Factory Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE8E3 0000"],"options":null},"Candy Factory Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1D83 0000"],"options":null},"Candy Factory Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE8F2 0200"],"options":null},"Candy Factory Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1D92 0200"],"options":null},"Candy Factory Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE8EB 00AA"],"options":null},"Candy Factory Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1D8B 00AA"],"options":null},"Candy Factory Stage\\No Energy\\Player 1":{"note":"","data":["801EE8EB 0000"],"options":null},"Candy Factory Stage\\No Energy\\Player 2":{"note":"","data":["801F1D8B 0000"],"options":null},"Clayribbean Cruise Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE6D3 0000"],"options":null},"Clayribbean Cruise Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1B73 0000"],"options":null},"Clayribbean Cruise Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE6E2 0200"],"options":null},"Clayribbean Cruise Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1B82 0200"],"options":null},"Clayribbean Cruise Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE6DB 00AA"],"options":null},"Clayribbean Cruise Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1B7B 00AA"],"options":null},"Clayribbean Cruise Stage\\No Energy\\Player 1":{"note":"","data":["801EE6DB 0000"],"options":null},"Clayribbean Cruise Stage\\No Energy\\Player 2":{"note":"","data":["801F1B7B 0000"],"options":null},"Extra Characters and Secret Options":{"note":"","data":["8019ED41 000F"],"options":null},"Freezing Fortress Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE573 0000"],"options":null},"Freezing Fortress Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1A13 0000"],"options":null},"Freezing Fortress Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE582 0200"],"options":null},"Freezing Fortress Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1A22 0200"],"options":null},"Freezing Fortress Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE57B 00AA"],"options":null},"Freezing Fortress Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1A1B 00AA"],"options":null},"Freezing Fortress Stage\\No Energy\\Player 1":{"note":"","data":["801EE57B 0000"],"options":null},"Freezing Fortress Stage\\No Energy\\Player 2":{"note":"","data":["801F1A1B 0000"],"options":null},"Ghastly Graveyard Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE803 0000"],"options":null},"Ghastly Graveyard Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1CA3 0000"],"options":null},"Ghastly Graveyard Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE812 0200"],"options":null},"Ghastly Graveyard Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1CB2 0200"],"options":null},"Ghastly Graveyard Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE80B 00AA"],"options":null},"Ghastly Graveyard Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1CAB 00AA"],"options":null},"Ghastly Graveyard Stage\\No Energy\\Player 1":{"note":"","data":["801EE80B 0000"],"options":null},"Ghastly Graveyard Stage\\No Energy\\Player 2":{"note":"","data":["801F1CAB 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE623 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1AC3 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE632 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1AD2 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE62B 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1ACB 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\No Energy\\Player 1":{"note":"","data":["801EE62B 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\No Energy\\Player 2":{"note":"","data":["801F1ACB 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EFD93 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F3233 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EFDA2 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F3242 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EFD9B 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F323B 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\No Energy\\Player 1":{"note":"","data":["801EFD9B 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\No Energy\\Player 2":{"note":"","data":["801F323B 0000"],"options":null},"Kooky Courtyard Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE9E3 0000"],"options":null},"Kooky Courtyard Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1E83 0000"],"options":null},"Kooky Courtyard Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE9F2 0200"],"options":null},"Kooky Courtyard Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1E92 0200"],"options":null},"Kooky Courtyard Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE9EB 00AA"],"options":null},"Kooky Courtyard Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1E8B 00AA"],"options":null},"Kooky Courtyard Stage\\No Energy\\Player 1":{"note":"","data":["801EE9EB 0000"],"options":null},"Kooky Courtyard Stage\\No Energy\\Player 2":{"note":"","data":["801F1E8B 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Can't be Stunned\\Player 1":{"note":"","data":["801EE513 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Can't be Stunned\\Player 2":{"note":"","data":["801F19B3 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Full Super Bar\\Player 1":{"note":"","data":["811EE522 0200"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Full Super Bar\\Player 2":{"note":"","data":["811F19C2 0200"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Infinite Energy\\Player 1":{"note":"","data":["801EE51B 00AA"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Infinite Energy\\Player 2":{"note":"","data":["801F19BB 00AA"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\No Energy\\Player 1":{"note":"","data":["801EE51B 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\No Energy\\Player 2":{"note":"","data":["801F19BB 0000"],"options":null},"Play As\\Player1":{"note":"","data":["8019ED2F 00??"],"options":{"Bad Mr. Frosty":"00","Blob":"01","Bonker":"02","Boogerman":"03","Dr. Kiln":"04","Earthworm Jim":"05","Houngan":"08","Icky Bod Clay":"09","Kung Pow":"0A","Sumo Santa":"0D","T-Hoppy":"0F","Taffy":"0E"}},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Can't be Stunned\\Player 1":{"note":"","data":["801EDCE3 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Can't be Stunned\\Player 2":{"note":"","data":["801F1183 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Full Super Bar\\Player 1":{"note":"","data":["811EDCF2 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Full Super Bar\\Player 2":{"note":"","data":["811F1192 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Infinite Energy\\Player 1":{"note":"","data":["801EDCEB 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Infinite Energy\\Player 2":{"note":"","data":["801F118B 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\No Energy\\Player 1":{"note":"","data":["801EDCEB 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\No Energy\\Player 2":{"note":"","data":["801F118B 0000"],"options":null},"Rubbage Reef Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE5F3 0000"],"options":null},"Rubbage Reef Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1A93 0000"],"options":null},"Rubbage Reef Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE602 0200"],"options":null},"Rubbage Reef Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1AA2 0200"],"options":null},"Rubbage Reef Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE5FB 00AA"],"options":null},"Rubbage Reef Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1A9B 00AA"],"options":null},"Rubbage Reef Stage\\No Energy\\Player 1":{"note":"","data":["801EE5FB 0000"],"options":null},"Rubbage Reef Stage\\No Energy\\Player 2":{"note":"","data":["801F1A9B 0000"],"options":null},"Rubbage Room Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F0823 0000"],"options":null},"Rubbage Room Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F3CC3 0000"],"options":null},"Rubbage Room Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F0832 0200"],"options":null},"Rubbage Room Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F3CD2 0200"],"options":null},"Rubbage Room Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F082B 00AA"],"options":null},"Rubbage Room Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F3CCB 00AA"],"options":null},"Rubbage Room Stage\\No Energy\\Player 1":{"note":"","data":["801F082B 0000"],"options":null},"Rubbage Room Stage\\No Energy\\Player 2":{"note":"","data":["801F3CCB 0000"],"options":null},"Santa's Toy Factory Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EEE13 0000"],"options":null},"Santa's Toy Factory Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F22B3 0000"],"options":null},"Santa's Toy Factory Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EEE22 0200"],"options":null},"Santa's Toy Factory Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F22C2 0200"],"options":null},"Santa's Toy Factory Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EEE1B 00AA"],"options":null},"Santa's Toy Factory Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F22BB 00AA"],"options":null},"Santa's Toy Factory Stage\\No Energy\\Player 1":{"note":"","data":["801EEE1B 0000"],"options":null},"Santa's Toy Factory Stage\\No Energy\\Player 2":{"note":"","data":["801F22BB 0000"],"options":null},"Stage Select":{"note":"","data":["8019ED2B 00??"],"options":{"Aquadome":"19","Backwash Bay":"16","Boogerhenge":"15","Camp Claynaveral":"02","Candy Factory":"00","Claynaveral Hangar":"01","Clayribbean Cruise":"11","Fiery Furnace":"0F","Freezing Fortress":"08","Ghastly Graveyard":"05","Grotto Gulch":"0A","Happy Harry's Hut":"07","Kiln's Hideout":"0E","Kiln's Laboratory":"0D","Kooky Courtyard":"13","Mudville Mansion":"04","Outhouse":"03","Refuse Room":"09","Research Room":"10","Rubbage Reef":"0C","Rubbage Room":"0B","Santa's Toy Factory":"14","Santa's Workship":"12","Spooky Spire":"06","Tribal Tower":"18","Tureen Toilet":"17"}},"Tribal Tower Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EDD83 0000"],"options":null},"Tribal Tower Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1223 0000"],"options":null},"Tribal Tower Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EDD92 0200"],"options":null},"Tribal Tower Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1232 0200"],"options":null},"Tribal Tower Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EDD8B 00AA"],"options":null},"Tribal Tower Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F122B 00AA"],"options":null},"Tribal Tower Stage\\No Energy\\Player 1":{"note":"","data":["801EDD8B 0000"],"options":null},"Tribal Tower Stage\\No Energy\\Player 2":{"note":"","data":["801F122B 0000"],"options":null}},"2BC1FCF2-7B9A0DF4-C:58":{"All Items":{"note":"","data":["50002402 0202","810ED130 0001","50004601 0000","800ED1B1 0003"],"options":null},"Item Modifier Codes\\Position 01":{"note":"","data":["800ED130 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 02":{"note":"","data":["800ED131 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 03":{"note":"","data":["800ED132 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 04":{"note":"","data":["800ED133 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 05":{"note":"","data":["800ED134 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 06":{"note":"","data":["800ED135 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 07":{"note":"","data":["800ED136 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 08":{"note":"","data":["800ED137 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 09":{"note":"","data":["800ED138 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 10":{"note":"","data":["800ED139 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 11":{"note":"","data":["800ED13A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 12":{"note":"","data":["800ED13B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 13":{"note":"","data":["800ED13C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 14":{"note":"","data":["800ED13D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 15":{"note":"","data":["800ED13E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 16":{"note":"","data":["800ED13F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 17":{"note":"","data":["800ED140 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 18":{"note":"","data":["800ED141 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 19":{"note":"","data":["800ED142 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 20":{"note":"","data":["800ED143 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 21":{"note":"","data":["800ED144 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 22":{"note":"","data":["800ED145 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 23":{"note":"","data":["800ED146 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 24":{"note":"","data":["800ED147 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 25":{"note":"","data":["800ED148 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 26":{"note":"","data":["800ED149 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 27":{"note":"","data":["800ED14A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 28":{"note":"","data":["800ED14B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 29":{"note":"","data":["800ED14C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 30":{"note":"","data":["800ED14D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 31":{"note":"","data":["800ED14E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 32":{"note":"","data":["800ED14F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 33":{"note":"","data":["800ED150 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 34":{"note":"","data":["800ED151 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 35":{"note":"","data":["800ED152 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 36":{"note":"","data":["800ED153 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 37":{"note":"","data":["800ED154 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 38":{"note":"","data":["800ED155 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 39":{"note":"","data":["800ED156 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 40":{"note":"","data":["800ED157 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 41":{"note":"","data":["800ED158 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 42":{"note":"","data":["800ED159 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 43":{"note":"","data":["800ED15A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 44":{"note":"","data":["800ED15B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 45":{"note":"","data":["800ED15C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 46":{"note":"","data":["800ED15D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 47":{"note":"","data":["800ED15E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 48":{"note":"","data":["800ED15F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}}},"2BCCF9C4-403D9F6F-C:4A":{"Always 1st":{"note":"","data":["802133B6 0001"],"options":null},"Always Win Race Heats":{"note":"","data":["802133B6 0001","80377B60 0001","8021455F 0001","80381424 0001"],"options":null},"Class Select":{"note":"This code is useful because you can play Class AA without having to beat a level!","data":["80206857 00??"],"options":{"1 Play":"04","2 Play":"05","3 Play":"06","4 Play":"07","Class AA":"03","Class B":"01","Class C":"00"}},"Super Speed":{"note":"This is Turbo fast,So to slow it down a little more keep the B button pressed down","data":["81213568 4800"],"options":null}},"2C739EAC-9EF77726-C:50":{"Always Have\\BFG":{"note":"","data":["8006338B 0001"],"options":null},"Always Have\\Bio Suite":{"note":"","data":["80063333 00??"],"options":{"Off":"00","On":"FF"}},"Always Have\\Chain Gun":{"note":"","data":["8006337F 0001"],"options":null},"Always Have\\Chainsaw":{"note":"","data":["8006336B 0001"],"options":null},"Always Have\\Double Shotgun":{"note":"","data":["8006337B 0001"],"options":null},"Always Have\\Gun":{"note":"","data":["80063373 0001"],"options":null},"Always Have\\Have Laser Weapon":{"note":"","data":["8006338D 0001"],"options":null},"Always Have\\Have Rocket Launcher":{"note":"","data":["80063381 0001"],"options":null},"Always Have\\Missile Ammo":{"note":"","data":["8006339F 0064"],"options":null},"Always Have\\Missile Launcher":{"note":"","data":["80063383 0001"],"options":null},"Always Have\\Plasma Rifle":{"note":"","data":["80063387 0001"],"options":null},"Always Have\\Shotgun":{"note":"","data":["80063377 0001"],"options":null},"Enable Cheat Menu":{"note":"","data":["8005AA23 0001"],"options":null},"Have All\\Keys":{"note":"","data":["50000504 0000","810634DE FFFF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000A04 0000","8106350A 0001"],"options":null},"Infinite\\Ammo All Weapons":{"note":"","data":["50000404 0000","81063532 013C"],"options":null},"Infinite\\Armor":{"note":"","data":["800634BF 00FF"],"options":null},"Invincible":{"note":"","data":["8006355B 0002"],"options":null},"Invincible And Map Markers":{"note":"","data":["800633BB 0006"],"options":null},"Rapid Fire":{"note":"","data":["810633EA 0B94"],"options":null},"Turn Map Markers On":{"note":"","data":["800633BB 0004"],"options":null},"[Max Brightness]":{"note":"Enable this cheat on rom load to have Max Brightness (internal) and then put Jabo d3d8 on 160% Max for a extra brightness Boost.","data":["8005AA18 0064"],"options":null}},"2DC4FFCC-C8FF5A21-C:50":{"Have\\Max Gold":{"note":"","data":["50000401 0000","80277AA5 00FF"],"options":null},"Have\\Max Total XP":{"note":"","data":["50000401 0000","8027931D 00FF"],"options":null},"Have\\Max Total XP Remaning to Start":{"note":"This will give you 16777215 Total XP Remaning to start with and after your 1st batle will allow you to buy your Max Stats","data":["50000401 0000","80279321 00FF"],"options":null},"Infinite\\99 Health Potions":{"note":"Do Not put this cheat on until you have collected your 1st Health Potion from the 1st Cheat or you will not be able to get into the Sub menu and Continue the game.","data":["8027876B 0063"],"options":null},"Infinite\\Max Health":{"note":"","data":["80279308 001E"],"options":null}},"2E0E7749-B8B49D59-C:58":{"Access In-Game Cheat Menu":{"note":"","data":["8113568C FFFF","8113568E FFFF"],"options":null}},"2E359339-3FA5EDA6-C:50":{"Clear Mission Selector":{"note":"","data":["8112976C 00??"],"options":{"1":"01","2":"02","3":"03","4":"04","5":"05","6":"06","7":"07","8":"08"}},"Gun 4-Way Shot":{"note":"","data":["80129A13 0004"],"options":null},"Infinite Fuel":{"note":"","data":["81129A16 FFFF"],"options":null},"Infinite Shield":{"note":"","data":["811299B8 03E8"],"options":null},"Infinite Weapon\\1st Position":{"note":"","data":["8012972B 0063"],"options":null},"Infinite Weapon\\2nd Position":{"note":"","data":["8012972F 0063"],"options":null},"Infinite Weapon\\3rd Position":{"note":"","data":["80129733 0063"],"options":null},"Infinite Weapon\\4th Position":{"note":"","data":["80129737 0063"],"options":null},"Infinite Weapon\\5th Position":{"note":"","data":["8012973B 0063"],"options":null},"Max Score":{"note":"","data":["81129716 FFFF"],"options":null},"Opens All 5 Item Slots":{"note":"","data":["8012974B 0005"],"options":null},"Option On":{"note":"","data":["8112976A 0001"],"options":null},"Score Attack Mode":{"note":"","data":["81129762 0001"],"options":null},"Stage Select On":{"note":"","data":["81129766 0001"],"options":null},"Texture Mode":{"note":"","data":["81129774 0001"],"options":null},"Weapon Modifier\\1st Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["80129729 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\2nd Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["8012972D 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\3rd Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["801297E1 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\4th Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["801297E5 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\5th Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["801297E9 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\Gun Weapon":{"note":"","data":["80129A13 00??"],"options":{"2-Way Shot":"02","3-Way Shot":"03","4-Way Shot":"04","No Weapon":"00","Normal Shot":"01"}}},"2E955ECD-F3000884-C:45":{"Bowl A Perfect Game":{"note":"","data":["5000090C 0000","800AC9F0 000A","800ACA5E 000A"],"options":null}},"2F493DD0-2E64DFD9-C:45":{"Have\\All Guns In Chest":{"note":"","data":["50000E04 0100","810E8EF4 05FF"],"options":null},"Have\\All Main Items In Chest":{"note":"If you want items that are not listed in the Chest, then just use the Have Item On Slot Select code to have what you desire.","data":["810E8F2C 17FF","810E8F30 1EFF","810E8F34 1FFF","810E8F38 23FF","50000404 0100","810E8F3C 25FF","810E8F4C 2AFF","810E8F50 2BFF","50000304 0100","810E8F54 2EFF","50000F04 0100","810E8F60 32FF","810E8F9C 43FF","50000504 0100","810E8FA0 47FF","50000404 0100","810E8FB4 53FF","50000C04 0100","810E8FC4 58FF"],"options":null},"Have\\Fine Condition Always":{"note":"","data":["810E13E4 0000"],"options":null},"Have\\Item On Slot Select\\Slot 01":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EC8 00??","800E8EC9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 02":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ECC 00??","800E8ECD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 03":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED0 00??","800E8ED1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 04":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED4 00??","800E8ED5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 05":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED8 00??","800E8ED9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 06":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EDC 00??","800E8EDD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 07":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE0 00??","800E8EE1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 08":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE4 00??","800E8EE5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 09":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE8 00??","800E8EE9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 10":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EEC 00??","800E8EED 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Infinite\\Health":{"note":"","data":["810E1322 00C8"],"options":null},"Infinite\\Time":{"note":"","data":["800E8CBF 0010"],"options":null},"Play As":{"note":"This allows you to select what character you wish to play as. Just slect on load and select as normal at the menu and when in game you will be the character of your choice","data":["810E1138 ????"],"options":{"Ada (can crash the game)":"0E80","Cheryl":"0F80","Claire Original":"0380","Claire as Biker":"0980","Claire without jacket":"0780","Claires body Leons outfit":"0B80","Hunk (can crash the game)":"0C80","Leon Original":"0280","Leon Wounded":"0680","Leon as Biker":"0A80","Leon as Stars":"0880","To Fu":"0D80"}},"Play Extra Mission":{"note":"This allows you to select what extra mission you wish to play. Just slect on load and carry on as normal at the menu and when in game you will be the character of your choice Do not use at the same time as [Resident Evil 2 Mode]","data":["810E10EE 00??"],"options":{"The 4th Survior":"48","To-Fu":"49"}},"Quick Chest Access":{"note":"With this code, all you have to do to access the chest, is hold L and Press Start.","data":["D1014FA4 1020","8012BFA8 0001"],"options":null},"Quick Save Access":{"note":"(1 Anytime, anywhere, press Z and B at the same time. You'll get the standard typewriter text: \"It's an old typewriter. You can save your progress with this.\" Note that you must, of course, have an ink ribbon to save. 2) Choose \"Yes\" and you'll be able to save normally. Instead of the location name, your save file will say \"Scenario 1st\" or \"Scenario 2nd.\" 3) When you load your save file, you'll have to skip through the intro, but when the game loads up you'll be exactly where you saved!","data":["D1014FA4 6000","810E8928 8007","D1014FA4 6000","810E892A 4110"],"options":null},"[Biohazard 2 Mode]":{"note":"Note: With this enabled the game will become Bio Hazard 2, the Japanese version of Resident Evil 2! This means all text (except the text in files) is in Japanese, and all cinemas have Japanese subtitles. Note that the title screen will still say Resident Evil 2 Do not use at the same time as Play Extra Mission","data":["D10E10EE 00??","810E10EE 0000"],"options":{"Off":"00","On":"40"}},"[Saves Always 0]":{"note":"No matter how many saves you do ithis makes the game think you Have\\not saved.","data":["810E8B50 0000"],"options":null}},"2F57C9F7-F1E29CA6-C:4A":{"Have All Keys":{"note":"","data":["800C3177 0003"],"options":null},"Infinite 99 Credits":{"note":"","data":["800C30CB 0063"],"options":null},"Infinite Max Lives":{"note":"","data":["800B04D7 0004"],"options":null}},"2F7009DD-FC3BAC53-C:50":{"Diffuculty Modifier":{"note":"","data":["801195DF 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Gems":{"note":"","data":["80128F07 00FF"],"options":null},"Have All\\Level Keys":{"note":"","data":["50000604 0000","80128DE3 0007","80128DFB 001F","80128E1B 00FF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000B04 0000","80128DB7 0001","80128D33 0001"],"options":null},"Have Cheat Menu":{"note":"","data":["811195F0 FFFF","811195F2 FFFF"],"options":null},"Have\\Backpack":{"note":"","data":["80128CEB 0001","80128D2B 0001"],"options":null},"Infinite\\Air":{"note":"","data":["801290E0 0063","801E869A 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128D63 00FF","80128D73 00FF","80128D7F 00FF","50000504 0000","80128D83 00FF","80128F0B 00FF","80128F07 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128D96 5B23","80128DD7 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C1634 1E61","812A25A4 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["80128D7F 00FF"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114F8CA F803","81128D4E 0003","81128D52 0003","81128D56 0003","81128D5A 0003","81128D5E 0003","81128D62 0003","81128D66 0005"],"options":null}},"2F700DCD-176CC5C9-C:45":{"Diffuculty Modifier":{"note":"","data":["8011972F 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Level Keys":{"note":"","data":["50000604 0000","80128E83 0007","80128E9B 001F","80128EBB 00FF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000B04 0000","80128E47 0001","80128E73 0001"],"options":null},"Have\\Backpack":{"note":"","data":["80128E3B 0001","80128E7B 0001"],"options":null},"Have\\Cheat Menu":{"note":"","data":["81119690 FFFF","81119692 FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["81129180 AAE1","811E873A F1FF"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128E03 00FF","80128E13 00FF","80128E1F 00FF","50000504 0000","80128E23 00FF","80128FAB 00FF","80128FA7 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128E36 5B23","80128E77 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C16D4 1E61","812A2644 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["8005E7D9 0098","8105E7F0 2400","8005E7FD 0083"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114FA1A F803","81128E9E 0003","81128EA2 0003","81128EA6 0003","81128EAA 0003","81128EAE 0003","81128EB2 0003","81128EB6 0005"],"options":null}},"2F700DCD-176CC5C9-C:50":{"Diffuculty Modifier":{"note":"","data":["8011967F 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Gems":{"note":"","data":["80128FA7 00FF"],"options":null},"Have All\\Level Keys":{"note":"","data":["50000604 0000","80128E83 0007","80128E9B 001F","80128EBB 00FF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000B04 0000","80128E57 0001","80128DD3 0001"],"options":null},"Have Cheat Menu":{"note":"","data":["81119690 FFFF","81119692 FFFF"],"options":null},"Have\\Backpack":{"note":"","data":["80128D8B 0001","80128DCB 0001"],"options":null},"Infinite\\Air":{"note":"","data":["80129180 0063","801E873A 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128E03 00FF","80128E13 00FF","80128E1F 00FF","50000504 0000","80128E23 00FF","80128FAB 00FF","80128FA7 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128E36 5B23","80128E77 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C16D4 1E61","812A2644 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["80128E1F 00FF"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114F96A F803","81128DEE 0003","81128DF2 0003","81128DF6 0003","81128DFA 0003","81128DFE 0003","81128E02 0003","81128E06 0005"],"options":null}},"2F70F10D-5C4187FF-C:45":{"Diffuculty Modifier":{"note":"","data":["801195DF 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Level Keys":{"note":"","data":["50000604 0000","80128D33 0007","80128D4B 001F","80128D6B 00FF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000B04 0000","80128CF7 0001","80128D23 0001"],"options":null},"Have\\Backpack":{"note":"","data":["80128CEB 0001","80128D2B 0001"],"options":null},"Have\\Cheat Menu":{"note":"","data":["81119540 FFFF","81119542 FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["81129030 AAE1","811E85EA F1FF"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128CB3 00FF","80128CC3 00FF","80128CCF 00FF","50000504 0000","80128CD3 00FF","80128E5B 00FF","80128E57 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128CE6 5B23","80128D27 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C1584 1E61","812A24F4 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["8005E689 0098","8105E6A0 2400","8005E6AD 0083"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114F8CA F803","50000604 0000","81128D4E 0003","81128D66 0005"],"options":null}},"30C7AC50-7704072D-C:45":{"Access All\\Chapters, Scenes,\u0026 Multi-Player Characters":{"note":"","data":["50000401 0000","800E9D01 00FF"],"options":null},"Access All\\Characters \u0026 Weapons In Multi Race":{"note":"","data":["810E9D02 ??FF"],"options":{"All Characters \u0026 Baseball bat":"FF","All Characters \u0026 Bones":"F3","All Characters \u0026 Frying Pan":"FB"}},"Conkers Speed Select":{"note":"","data":["810CC318 ????"],"options":{"Fast Conker":"3FF0","Normal Conker":"3F80","Slow Conker":"3F00","Super Fast Conker":"4030"}},"Infinite\\Accuracy Count Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game","data":["800E0B67 0001"],"options":null},"Infinite\\Bags In Heist":{"note":"","data":["800E0BE4 00FF"],"options":null},"Infinite\\Bombs":{"note":"","data":["802055CA 0030"],"options":null},"Infinite\\Head Shot Count Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game,Once you pick up a Gun a shoot once, you will 100%.","data":["800E0B6B 03E7"],"options":null},"Infinite\\Health\\Player 1":{"note":"","data":["800CC49A 0006"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["800CC7C6 270F"],"options":null},"Infinite\\Health\\Player 3":{"note":"","data":["800CCAF2 270F"],"options":null},"Infinite\\Health\\Player 4":{"note":"","data":["800CCE1E 270F"],"options":null},"Infinite\\Lives Player 1":{"note":"","data":["800D2144 0064"],"options":null},"Infinite\\Max Kills Player 1":{"note":"","data":["800E0B47 03E7"],"options":null},"Infinite\\Oxygen":{"note":"","data":["800CC382 0001"],"options":null},"Infinite\\Pots of cash":{"note":"","data":["810D214A FFFF"],"options":null},"Infinite\\Time In Multi":{"note":"","data":["8108FD7A 7500"],"options":null},"Matrix Mode (Anywhere)":{"note":"Press R to activate and then Right-C to exit.","data":["D1042A14 0010","800BEA0C 0001","D1042A14 0010","810BE574 D202","D1042A14 0001","800BEA0C 0000","D1042A14 0001","810BE574 0000"],"options":null},"Play as Option 1":{"note":"Here you can choose who you want to play as, but only one option at a time. Shadow will not be visible, except when playing as Conker.","data":["800D213F 00??"],"options":{"Army Captain":"25","Bald Caveman":"0C","Caveman":"0D","Combat Squirrel":"04","Conker":"05","Conker the Bat":"24","Dinosaur (Cannot move)":"09","Enemy Bat":"23","Female Villager":"1D","Female Villager (with hood and glasses)":"1F","Female Zombie":"22","Gregg":"27","Male Villager":"11","Male Villager (with cap and glasses and moustache)":"1C","Male Villager (with cap and glasses)":"1A","Male Villager (with cap and moustache)":"1B","Male Villager (with cap)":"19","Male Villager (with glasses and moustache)":"14","Male Villager (with glasses)":"12","Male Villager (with hat and glasses and moustache)":"18","Male Villager (with hat and glasses)":"16","Male Villager (with hat and moustache)":"17","Male Villager (with hat)":"15","Male Villager (with moustache)":"13","Male Zombie":"21","Mohican Caveman":"0E","Neo Conker":"10","Skeleton Gregg":"28","Spikey Caveman":"0F","Tank Vehicle (Cannot move)":"08","Tedi":"03","Tedi Boss":"26","Uga":"0B","Wessle":"01","Wessle (Black outfit)":"02"}},"Press L To Levitate\\Player 1":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042A15 0020","810CC2F0 41CB"],"options":null},"Press L To Levitate\\Player 2":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042A1D 0020","810CC61C 41CB"],"options":null},"Press L To Levitate\\Player 3":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042A25 0020","810CC948 41CB"],"options":null},"Press L To Levitate\\Player 4":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042A2D 0020","810CCC74 41CB"],"options":null},"Wait Animation Trigger":{"note":"","data":["800CC5C8 00??"],"options":{"Default at most":"00","Wait animations disabled":"02"}},"Weapon Select In Multi (On Pick Up)":{"note":"Select what Weapon you would like in Multi Player and then on a Weapon Pickup you will have the weapon of your choice.to change for another just Enable the one of your choice to have that instead.(you must have a weapon already to change for the next.","data":["80180873 00??"],"options":{"Buck Shot":"08","Gas Mask":"13","High Powred Riffle With Scope":"0A","Long Pistol with Sight":"06","Nothing":"02","Riffle":"05","Rocket Launcher":"07","Sword":"01","Throwing Knives":"04","Two Automatic Machine Guns":"0C","Yellow Chain-Ssaw":"03"}}},"315C7466-3A453265-C:4A":{"Infinite\\99 Credits":{"note":"","data":["80085B03 0063"],"options":null},"Infinite\\Lives":{"note":"","data":["800A0CE8 0009"],"options":null},"Infinite\\Specials":{"note":"","data":["800A0CE9 0003"],"options":null},"Max\\Combo":{"note":"","data":["810A0CE4 7FFF"],"options":null},"Max\\Lower Level":{"note":"","data":["800A0CF8 0003"],"options":null},"Max\\Score":{"note":"","data":["800A0CD8 03E7","800A0CD9 03E7"],"options":null},"Max\\Upper Level":{"note":"","data":["800A0CF9 0063"],"options":null},"Play As":{"note":"","data":["800A0CEC 00??"],"options":{"Character 1":"00","Character 2":"01","Character 3":"02"}},"Status Modifier":{"note":"","data":["800A0CEA 00??"],"options":{"High":"01","Low":"03","Mid":"02"}}},"319093EC-0FC209EF-C:45":{"1 Player\\Always Place 1st":{"note":"","data":["80103C57 0000"],"options":null},"1 Player\\Max\\Acceleration":{"note":"","data":["8012C49F 000A"],"options":null},"1 Player\\Max\\Shocks":{"note":"","data":["8012C4A7 000A"],"options":null},"1 Player\\Max\\Speed":{"note":"","data":["8012C4A3 000A"],"options":null},"1 Player\\Max\\Tires":{"note":"","data":["8012C4AB 000A"],"options":null},"Multi and 1 Player\\Infinite Turbos\\Player 1":{"note":"Can be used in 1 Player and Multiplayer Modes for Player 1","data":["81103EBA 03E7"],"options":null},"Multi and 1 Player\\Infinite Turbos\\Player 2":{"note":"Multiplayer Mode Only for Player 2","data":["811041AE 03E7"],"options":null},"Multi and 1 Player\\Max Crash Helmets\\Player 1":{"note":"Can be used in 1 Player and Multiplayer Modes for Player 1","data":["80103EB3 0064"],"options":null},"Multi and 1 Player\\Max Crash Helmets\\Player 2":{"note":"Multiplayer Mode Only for Player 2","data":["801041A7 0064"],"options":null}},"3261D479-ED0DBC25-C:45":{"Away Team Scores 0":{"note":"","data":["8012A4EA 0000"],"options":null},"Away Team Scores 150":{"note":"","data":["8012A4EA 0096"],"options":null},"Big Head Mode":{"note":"","data":["81098E88 0100"],"options":null},"Final Four Stadium":{"note":"","data":["80098E98 0089"],"options":null},"GS Button For 1-Second Shot Clock":{"note":"","data":["8912A4BC 3FC0"],"options":null},"Home Team Scores 0":{"note":"","data":["8012A4D2 0000"],"options":null},"Home Team Scores 150":{"note":"","data":["8012A4D2 0096"],"options":null},"Infinite Shot Clock":{"note":"","data":["8112A4BC 4210"],"options":null},"Infinite Time Outs Away":{"note":"","data":["8012A4EC 0006"],"options":null},"Infinite Time Outs Home":{"note":"","data":["8012A4D4 0006"],"options":null},"No Fans In Crowd":{"note":"","data":["810CA520 0454"],"options":null},"No Time Outs Away":{"note":"","data":["8012A4EC 0000"],"options":null},"No Time Outs Home":{"note":"","data":["8012A4D4 0000"],"options":null},"Partially Invisible Players":{"note":"","data":["81098E84 0100"],"options":null},"Programmers Team":{"note":"","data":["81097088 0100"],"options":null},"Shot Clock Disabled":{"note":"","data":["8109707C 0000"],"options":null},"Trail Follows The Ball":{"note":"","data":["810B4600 4100"],"options":null},"Z-Axis Stadium":{"note":"","data":["80098E98 0088"],"options":null}},"32CA974B-B2C29C50-C:46":{"Cheat Menu\\All Weapons Enabled":{"note":"","data":["801D8B19 0001","801D8B85 0001","801D9BE5 0001","801D9CE1 0001","801D9D75 0001","801D9D77 0001","801D9DA9 0001","801DA6D9 0001","801DA6E1 0001","801DA74D 0001","801DB895 0001"],"options":null},"Cheat Menu\\Cheat Menu Enabled":{"note":"","data":["801DA748 0001"],"options":null},"Cheat Menu\\Have All Game Type \u0026 Other":{"note":"","data":["810E1B5E 0FFF"],"options":null},"Cheat Menu\\Have All Weapons":{"note":"","data":["811DA6D0 FFFF"],"options":null},"Enable Debug Menu":{"note":"","data":["800DFCF0 0001"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810A21D4 A65B"],"options":null},"Invincibility":{"note":"","data":["800DF223 0001"],"options":null}},"32EFC7CB-C3EA3F20-C:45":{"Infinite Lives P1":{"note":"","data":["800CE0F3 0003"],"options":null},"Infinite Lives P2":{"note":"","data":["800CE0F7 0003"],"options":null},"Infinite Pistol Ammo":{"note":"","data":["8106006C 2400"],"options":null},"Infinite Rocket Launcher Ammo":{"note":"","data":["81060130 2400"],"options":null},"Infinite Shotgun Ammo":{"note":"","data":["810601D8 2400"],"options":null}},"33BE8CD6-EC186912-C:45":{"Character Creation\\Max\\Aerial":{"note":"","data":["80319675 0009"],"options":null},"Character Creation\\Max\\Brawling":{"note":"","data":["8031F5B5 0009"],"options":null},"Character Creation\\Max\\Dirtiness":{"note":"","data":["80321575 0009"],"options":null},"Character Creation\\Max\\Impact":{"note":"","data":["803121B5 0009"],"options":null},"Character Creation\\Max\\Mat Ability":{"note":"","data":["8031B635 0009"],"options":null},"Character Creation\\Max\\Quickness":{"note":"","data":["803176B5 0009"],"options":null},"Character Creation\\Max\\Speed":{"note":"","data":["803156F5 0009"],"options":null},"Character Creation\\Max\\Strength":{"note":"","data":["802F16F5 0009"],"options":null},"Character Creation\\Max\\Submission":{"note":"","data":["8031D5F5 0009"],"options":null},"Enable Cheat":{"note":"","data":["800B115B 00??"],"options":{"All Wrestlers":"80","Momentum Meter":"08","Play As Same Wrestler":"20","Stamina Meter":"04","Super Created Wrestlers":"02"}},"Freeze Timer":{"note":"","data":["810B3242 D300"],"options":null},"Infinite Stamina\\Player 1":{"note":"","data":["810E3998 0478"],"options":null},"Infinite Stamina\\Player 2":{"note":"","data":["810E3B34 03ED"],"options":null},"Meter Select\\Player 1":{"note":"","data":["800E399D 00??"],"options":{"Empty Meter Bar":"00","Full Meter Bar":"60"}},"Meter Select\\Player 2":{"note":"","data":["800AD80D 00??"],"options":{"Empty Meter Bar":"00","Full Meter Bar":"60"}}},"36281F23-009756CF-C:45":{"Infinite\\Balls":{"note":"","data":["8021AC47 0000"],"options":null},"Infinite\\Creation Points":{"note":"","data":["81059408 420C"],"options":null},"Infinite\\Strikes":{"note":"","data":["8021AC48 0000"],"options":null},"Inning Selection":{"note":"","data":["8021AC42 00??"],"options":{"2nd Inning":"02","3rd Inning":"03","4th Inning":"04","5th Inning":"05","6th Inning":"06","7th Inning":"07","8th Inning":"08","9th Inning":"09"}},"Max\\Arm Strength":{"note":"","data":["8105C5F8 4120"],"options":null},"Max\\Batting":{"note":"","data":["8105D6D8 4120"],"options":null},"Max\\Clutch":{"note":"","data":["8105BB98 4120"],"options":null},"Max\\Control":{"note":"","data":["8105B760 4120"],"options":null},"Max\\Defense":{"note":"","data":["8105CA60 4120"],"options":null},"Max\\Durability":{"note":"","data":["8105C098 4120"],"options":null},"Max\\Pitch Speed":{"note":"","data":["8105AE90 4120"],"options":null},"Max\\Power":{"note":"","data":["8105D270 4120"],"options":null},"Max\\Speed":{"note":"","data":["8105CE68 4120"],"options":null},"Max\\Stamina":{"note":"","data":["8105B2F8 4120"],"options":null}},"36F1C74B-F2029939-C:50":{"Always Win Judge's Decision\\Player 1":{"note":"","data":["8020B777 FFFF","802098AF 0000"],"options":null},"Always Win Judge's Decision\\Player 2":{"note":"","data":["802098AF FFFF","8020B777 0000"],"options":null},"Enable Boro":{"note":"","data":["80307349 0001"],"options":null},"Have 1 Star\\Abdul":{"note":"","data":["80307353 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["8030734F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80307352 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80307351 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80307354 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80307350 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["8030734E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80307355 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80307356 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["802098A1 0000","802047C3 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802047C7 0000","8020B769 0000"],"options":null},"Level Select":{"note":"","data":["8022A84C 00??"],"options":{"Blue Hell Mountain":"0C","Coliseum":"04","Desert":"01","Fire Mountain":"00","Highlands":"02","Hong Kong":"03","Joker's Room":"0B","Jungle":"05","Ninja Room":"06","Observation":"09","Palace":"0D","Pasture":"0A","Suspension Bridge":"07"}},"Play As\\Player 1":{"note":"","data":["802EF622 00??"],"options":{"Abdul":"05","Bob":"01","Boro":"08","Joker":"0B","Leon":"04","Meiling":"03","Ninja":"06","No Clue":"0D","Pierre":"02","Ryuji":"00","The Master":"0C","Tomahawk":"07","Ushi":"0A","Valerie":"09"}},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EF67B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0209757 0000","80209757 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020B61F 0000","8020B61F 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810ADBDC 3F80"],"options":null}},"36FA35EB-E85E2E36-C:45":{"Always On Fire Team 2\\Player 2":{"note":"","data":["800EC0CF 00??"],"options":{"Always On":"01","Never On":"00"}},"Fire Team 1\\Player 1":{"note":"","data":["800EC0CB 00??"],"options":{"Always On":"01","Never On":"00"}},"Infinite Turbo\\Player 1":{"note":"","data":["810EC12C 42C8","810EC12E 0000"],"options":null},"Infinite Turbo\\Player 2":{"note":"","data":["81DEC164 42C8","81DEC166 0000"],"options":null}},"373F5889-9A6CA80A-C:50":{"Access All\\Chapters, Scenes,\u0026 Multi-Player Characters":{"note":"","data":["50002401 0000","800EA120 00FF"],"options":null},"Access All\\Characters \u0026 Weapons In Multi Race":{"note":"","data":["810EA122 ??FF"],"options":{"All Characters \u0026 Baseball bat":"FF","All Characters \u0026 Bones":"F3","All Characters \u0026 Frying Pan":"FB"}},"Infinite\\Accuracy Count Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game,Once you pick up a Gun a shoot once, you will 100%.","data":["800E0F87 0001"],"options":null},"Infinite\\Bags In Heist":{"note":"","data":["800E1004 00FF"],"options":null},"Infinite\\Bombs":{"note":"","data":["802059EA 0030"],"options":null},"Infinite\\Head Shot Count Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game","data":["800E0F8B 0064"],"options":null},"Infinite\\Health\\Player 1":{"note":"","data":["800CC8BA 0006"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["800CCBE6 270F"],"options":null},"Infinite\\Health\\Player 3":{"note":"","data":["800CCF12 270F"],"options":null},"Infinite\\Health\\Player 4":{"note":"","data":["800CD23E 270F"],"options":null},"Infinite\\Lives Player 1":{"note":"","data":["800D2564 0063"],"options":null},"Infinite\\Max Kills Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game","data":["800E0F67 03E7"],"options":null},"Infinite\\Oxygen":{"note":"","data":["800CC7A2 0001"],"options":null},"Infinite\\Pots of cash":{"note":"","data":["810D256A FFFF"],"options":null},"Infinite\\Time In Multi":{"note":"","data":["8109019A 7500"],"options":null},"Play as":{"note":"Here you can choose who you want to play as, but only one option at a time. Shadow will not be visible, except when playing as Conker.","data":["800D255F 00??"],"options":{"Army Captain":"25","Bald Caveman":"0C","Caveman":"0D","Combat Squirrel":"04","Conker":"05","Conker the Bat":"24","Dinosaur (Cannot move)":"09","Enemy Bat":"23","Female Villager":"1D","Female Villager (with hood and glasses)":"1F","Female Zombie":"22","Gregg":"27","Male Villager":"11","Male Villager (with cap and glasses and moustache)":"1C","Male Villager (with cap and glasses)":"1A","Male Villager (with cap and moustache)":"1B","Male Villager (with cap)":"19","Male Villager (with glasses and moustache)":"14","Male Villager (with glasses)":"12","Male Villager (with hat and glasses and moustache)":"18","Male Villager (with hat and glasses)":"16","Male Villager (with hat and moustache)":"17","Male Villager (with hat)":"15","Male Villager (with moustache)":"13","Male Zombie":"21","Mohican Caveman":"0E","Neo Conker":"10","Skeleton Gregg":"28","Spikey Caveman":"0F","Tank Vehicle (Cannot move)":"08","Tedi":"03","Tedi Boss":"26","Uga":"0B","Wessle":"01","Wessle (Black outfit)":"02"}},"Press L To Levitate\\Player 1":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042DA5 0020","810CC710 41CB"],"options":null},"Press L To Levitate\\Player 2":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042DAE 0020","810CCA3C 41CB"],"options":null},"Press L To Levitate\\Player 3":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042DB5 0020","810CCD68 41CB"],"options":null},"Press L To Levitate\\Player 4":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042DBE 0020","810CD094 41CB"],"options":null},"Wait Animation Trigger":{"note":"","data":["800CC9E8 00??"],"options":{"Default at most":"00","Wait animations disabled":"02"}},"Weapon Select In Multi (On Pick Up)":{"note":"Select what Weapon you would like in Multi Player and then on a Weapon Pickup you will have the weapon of your choice.to change for another just Enable the one of your choice to have that instead.(you must have a weapon already to change for the next.","data":["80180C4B 00??"],"options":{"Buck Shot":"08","Gas Mask":"13","High Powred Riffle With Scope":"0A","Long Pistol with Sight":"06","Nothing":"02","Riffle":"05","Rocket Launcher":"07","Sword":"01","Throwing Knives":"04","Two Automatic Machine Guns":"0C","Yellow Chain-Ssaw":"03"}}},"37FA8F16-5F824D37-C:44":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["811784E0 FFFF","811784E2 FFFF","811784E6 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FCBC 270F"],"options":null}},"39119872-07722E9F-C:45":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2212 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE51F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80382CB7 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","802020F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801DDC55 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801FC5C5 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801EF96D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","80202225 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801D9ABD 0001"],"options":null}},"3918834A-15B50C29-C:45":{"Freeze Timer":{"note":"","data":["800CE4EE 0077"],"options":null},"Have All Charcters \u0026 Levels Unlocked":{"note":"","data":["50000740 0000","800CB951 0001","50000304 0000","800CB945 0001","50000304 0000","800CB985 0001","50000304 0000","800CB9C5 0001","50000304 0000","800CBA05 0001","50000304 0000","800CBA45 0001","50000304 0000","800CBA85 0001"],"options":null},"Max\\Combos Landed":{"note":"","data":["810CE4AA 03E7","810CE4AE 03E7"],"options":null},"Max\\Tricks Landed":{"note":"","data":["810CE4A6 03E7","810CE4A2 03E7"],"options":null},"Max\\Wheels Collected":{"note":"","data":["800CE513 00??"],"options":{"0 Wheels":"00","30 Wheels":"1E","40 Wheels":"28"}},"Zero Crash Counts":{"note":"","data":["800CE49F 0000"],"options":null}},"392A0C42-B790E77D-C:45":{"All Missions Unlocked":{"note":"","data":["810C1F10 000B"],"options":null},"Infinite Ammo":{"note":"","data":["8103A180 2400"],"options":null},"Infinite Health":{"note":"","data":["8105518A 2400"],"options":null}},"399B9B81-D533AD11-C:4A":{"Access\\All Secret Characters":{"note":"","data":["50000C04 0000","80183D6F 0001"],"options":null},"Access\\All Superbikes":{"note":"","data":["50000304 0000","80183D6F 0001"],"options":null},"Access\\All Tracks":{"note":"","data":["50000BD8 0000","80183327 0001"],"options":null},"Always 1st":{"note":"","data":["80171063 0001"],"options":null},"Infinite\\Nitros":{"note":"","data":["81170F02 0003","81170F06 0003"],"options":null},"Infinite\\Shield":{"note":"","data":["81170F2C 42C8"],"options":null},"Max Points":{"note":"","data":["80183DD3 0064"],"options":null},"[Screen Hud Clear]":{"note":"This Fixes the Problem on all Plugins that have Hud covering the Screen.Let the game load 1st before Putting this code on,Or it will give an error and Freeze","data":["80092D1B 0004"],"options":null}},"3A089BBC-54AB2C06-C:0":{"Infinite Health":{"note":"","data":["800794CB 0009"],"options":null}},"3A089BBC-54AB2C06-C:00":{"Infinite Health":{"note":"","data":["800794CB 0009"],"options":null}},"3A4760B5-2D74D410-C:45":{"Character Select":{"note":"","data":["80075F52 00??"],"options":{"Big Head.":"04","Flame Grilled":"08","Normal":"00","Play as Deadwing.":"01"}},"Have All\\Cheats: Book of Shadows":{"note":"","data":["81075F4E 0FFF"],"options":null},"Have All\\Dark Souls Collected":{"note":"","data":["80075F49 0078"],"options":null},"Have All\\Gads \u0026 The Poign":{"note":"","data":["80030E57 000F"],"options":null},"Have All\\Items":{"note":"Youll not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50001B20 0000","80030613 000B"],"options":null},"Have All\\L-Eclipser":{"note":"You will not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50000320 0000","80030973 000B"],"options":null},"Have All\\Levels Unlocked":{"note":"","data":["5000101C 0000","80030A0E 0001"],"options":null},"Infinite\\0.9mm Ammo":{"note":"","data":["81075B3A 0190"],"options":null},"Infinite\\Accumulators":{"note":"","data":["800306D7 0005"],"options":null},"Infinite\\Cadeaux'":{"note":"","data":["81075B36 03E7"],"options":null},"Infinite\\Max Health/Air/Shadow Charge \u0026 Voodoo Power":{"note":"","data":["50000604 0000","81075B16 2710"],"options":null},"Infinite\\Prisms":{"note":"","data":["80030957 0003"],"options":null},"Infinite\\Retractors":{"note":"","data":["800308B7 0003"],"options":null},"Infinite\\Shotgun Shells":{"note":"","data":["80075B2F 0063"],"options":null},"Infinite\\Violator Ammo":{"note":"","data":["81075B32 03E7"],"options":null},"Press L To Levitate":{"note":"Press the L-Button to rise and let go and press again in stages to come back down.","data":["D0059097 0020","80075578 0041"],"options":null},"[Ammo Always Displayed On Screen]":{"note":"","data":["50000408 0000","80075ACD 0007"],"options":null},"[Health Meter Displayed On Screen]":{"note":"","data":["81075B10 0000","81075B12 00FF"],"options":null}},"3A6C42B5-1ACADA1B-C:4A":{"Have All\\Characters Available":{"note":"","data":["8105DEB8 FFFF"],"options":null},"Have All\\Courts Available":{"note":"","data":["8105DEBC FFFF"],"options":null},"Score\\Player 1":{"note":"","data":["8014B1DA 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}},"Score\\Player 2":{"note":"","data":["8014B1DB 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}}},"3B941695-F90A5EEB-C:50":{"Access\\All Gadgets and Items":{"note":"","data":["801147DD 0001"],"options":null},"Access\\All Guns and Weapons":{"note":"This also comes with Ammo","data":["801147DC 0001"],"options":null},"Access\\All Levels \u0026 Difficulties":{"note":"","data":["81103B66 0021","50000D01 0000","80118F38 0001"],"options":null},"Infinite\\Oxygen":{"note":"","data":["800E25E4 0004"],"options":null},"Infinite\\Time":{"note":"","data":["81103B82 0000"],"options":null},"Invincible":{"note":"","data":["811147D8 0101"],"options":null},"Multi Player\\Access All Arenas":{"note":"","data":["801147EB 0001","811147EC 0101","801147EE 0001"],"options":null},"Multi Player\\Access All Evil Skins":{"note":"","data":["50005C0C 0000","800C0167 0081"],"options":null},"Multi Player\\Access All Scenarios":{"note":"","data":["801147EF 0001","811147F0 0101"],"options":null},"Multi Player\\Access All Weapon Modes":{"note":"","data":["811147F2 0101","801147F4 0001"],"options":null},"Multi Player\\Access Evil Q":{"note":"","data":["800C06EF 0081"],"options":null},"Multi Player\\Access Good Q":{"note":"","data":["800C06EF 0001"],"options":null},"Multi Player\\Invincible":{"note":"","data":["811147D8 0101"],"options":null}},"3C059038-C8BF2182-C:45":{"Enable All\\Cars":{"note":"","data":["80140D1F 003F"],"options":null},"Enable All\\Expert Times":{"note":"","data":["80140D1C 0031"],"options":null},"Enable All\\Tracks":{"note":"","data":["80140D1A 0070"],"options":null},"Unlock Champ":{"note":"","data":["80140D28 0001"],"options":null},"Unlock Cheat Menu":{"note":"","data":["D11B1F14 0000","811B1F14 00FF","811D530A 04FF","D11B1F14 00FF","811B0270 FF03"],"options":null}},"3C1FDABE-02A4E0BA-C:45":{"Single \u0026 VS Mode\\Infinite Misses\\Player 1":{"note":"","data":["80112F9F 0003"],"options":null},"Single \u0026 VS Mode\\Infinite Misses\\Player 2":{"note":"","data":["80116207 0003"],"options":null},"Single \u0026 VS Modes\\Secret Cheat Menu":{"note":"","data":["8011265F 00AD"],"options":null},"Single Player Stage Select":{"note":"","data":["810E12DC 0001"],"options":null}},"3CC77150-21CDB987-C:50":{"Don't Take Any Damage":{"note":"","data":["8104A260 2400"],"options":null},"Enable Cheat Select":{"note":"","data":["80115933 00??"],"options":{"All Weapons With Fast Run":"42","All Weapons With Infinite Ammo":"06","Fast run":"40","Have All Weapons":"02","Infinite Ammo":"04","Infinite Ammo With Fast Run":"44","Invincible":"01","Invincible With All Weapons And Fast Run":"43","Invincible With All Weapons and Ammo and Fast Run":"47","Invincible With Fast Run":"41","Invincible With Infinite Ammo and All Weapons":"07"}},"Enable In-Game Cheat Menu \u0026 Level Select":{"note":"","data":["81115936 014F"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810496D0 2400"],"options":null},"Sound Select\\Music Volume":{"note":"","data":["80115944 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"Sound Select\\SFX Volume":{"note":"","data":["80115945 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"[Press L For Levitate]":{"note":"","data":["D10F7550 0020","816FE35C 43D5"],"options":null}},"3CECBCB8-6126BF07-C:50":{"Big Score":{"note":"","data":["81164E58 8181","81164E5A 8181"],"options":null},"Instant 450kmh Boost":{"note":"Press Trigger Button","data":["D10A1F50 2000","8119D334 005A"],"options":null},"No Checkpoint time":{"note":"","data":["81164E1C 0001"],"options":null}},"3DF17480-193DED5A-C:50":{"Have All\\Levels and Bonus Stages Unlocked":{"note":"Press start in Gyro's Lab and then resume game to see all open","data":["801D6F4C 00FF","801D6F4D 00FF","801D6F4E 00FF","801D6F4F 00FF","801D6F53 00FF"],"options":null},"Have All\\Time Attack \u0026 Toy Hunting Comnpleated (All Levels)":{"note":"Press start in Gyro's Lab and then resume game to see all open","data":["801D6F58 00FF","801D6F59 00FF","801D6F5A 00FF","801D6F5B 00FF","801D6F5C 00FF","801D6F5D 00FF","801D6F5E 00FF","801D6F5F 00FF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["801D6F2E 0063"],"options":null},"Infinite\\99 Stars":{"note":"","data":["801D6F2F 0063"],"options":null},"Infinite\\Time\\Gladstones Time Attack":{"note":"","data":["801D6F27 00FF"],"options":null},"Infinite\\Time\\Nephews Toy Hunting":{"note":"","data":["801D6F23 0063"],"options":null},"Instant\\Carrier Box [Moon Walk] (Press L)":{"note":"Press and hold the L Button and you will run floating of any ledge slowing drifting down. If you keep pressing the A Button while Holding L it will act as a Moon Jump.","data":["D00CAFD1 0020","801C901F 0001"],"options":null},"Instant\\Hyperactive State [Invincible] (Press C-Right)":{"note":"","data":["D00CAFD1 0001","801CE296 0001"],"options":null},"Instant\\Rage Attack (Press C-Left)":{"note":"","data":["D00CAFD1 0002","801CE23D 0001"],"options":null}},"3E198D9E-F2E1267E-C:45":{"99 Total Houses":{"note":"","data":["8106A56A 0063"],"options":null},"Big Newspapers":{"note":"","data":["81268B5A 0001"],"options":null},"Enable Level Select":{"note":"Also accesses All Bonus Levels","data":["8006A5F7 0001"],"options":null},"Infinite Health":{"note":"","data":["8006A5D2 0064"],"options":null},"Infinite Newspapers":{"note":"","data":["81268B12 0001"],"options":null},"Invincibility":{"note":"","data":["812688FE 0001"],"options":null},"Rocket Boosters":{"note":"","data":["81268B3E 0001"],"options":null},"Super Jump Springs":{"note":"","data":["81268B3A 0001"],"options":null},"Turbo Mode":{"note":"","data":["81268B36 0001"],"options":null}},"3E5055B6-2E92DA52-C:45":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118D8C0 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118D8C2 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118D8C4 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118D8C6 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["50000401 0000","8018ED10 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["80165F5D 00??","80165F8A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["8016603D 00??","8016606A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["8016611D 00??","8016614A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["801661FD 00??","8016622A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["801662DD 00??","8016630A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["801663BD 00??","801663EA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818EDEF 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F6915 0020","810F69C8 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F6925 0020","810F77A0 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F6935 0020","810F8578 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F6945 0020","810F9350 4000"],"options":null}},"3EDC7E12-E26C1CC9-C:45":{"Extra Flies":{"note":"","data":["D00A54DF 0000","800A54DF 0032"],"options":null},"Infinite Health":{"note":"","data":["800A54D9 0004"],"options":null},"Start With 50 Remotes":{"note":"","data":["D00A54EB 0000","800A54EB 0032"],"options":null}},"40DFEDA0-3AA09CB2-C:50":{"Infinite Max\\Armour":{"note":"","data":["80145E79 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Max\\Health":{"note":"","data":["81145E6C 4316"],"options":null},"Infinite Max\\Lives (Credits)":{"note":"","data":["8012920B 0009"],"options":null},"Infinite Max\\Sword Use (Press Z)":{"note":"Press The Z Button on your controller to use the infinite Sword Flame effect","data":["80145E81 00??"],"options":{"Off":"00","On":"D0"}},"Level Select":{"note":"","data":["801249B3 00??"],"options":{"01 (Incarceration)":"00","02 (The Dead Shall Rise)":"01","03 (Crush Your Enemies)":"02","04 (Infestation)":"03","05 (The Law of Disorder)":"04","06 (The Abyss)":"05","07 (Darrc Pilgrimage)":"06","08 (Ultimate Sacrifice)":"07","09 (The Dragon Sword)":"08"}},"Setting Options\\Sound\\Format":{"note":"","data":["800FD428 00??"],"options":{"Mono":"00","Stereo":"FF"}},"Setting Options\\Sound\\Game FX":{"note":"","data":["800FD41F 00??"],"options":{"Low":"19","Max":"64","Middle":"32","Off":"00"}},"Setting Options\\Sound\\Music Volume":{"note":"","data":["800FD423 00??"],"options":{"Low":"19","Max":"64","Middle":"32","Off":"00"}},"Setting Options\\Vibration Option":{"note":"","data":["80129202 00??"],"options":{"Off":"00","On":"FF"}},"[Character Select]":{"note":"","data":["800F84F3 00??"],"options":{"Aisha":"02","Cutter":"00","Gouranga":"03","Kailan":"01"}},"[Have 999999 Score]":{"note":"","data":["811458C4 000F","811458C6 423F"],"options":null},"[Press Z for Levitate]":{"note":"","data":["D00DDF88 0020","8014665D 00EF"],"options":null}},"41380792-A167E045-C:45":{"Have All\\Divisions Complete":{"note":"","data":["8008323F 00FF"],"options":null},"Have All\\Sleds Unlocked":{"note":"","data":["8108324E FFFF"],"options":null},"Have All\\Tracks Unlocked":{"note":"","data":["81083252 03FF"],"options":null},"Have\\Max Race Points":{"note":"","data":["8108321E FFFF"],"options":null},"Have\\Max Wrenches (All Sleds)":{"note":"This will give you 100 Wrench Points for all Sledges to boost your stats","data":["50000C01 0000","80083168 0064","50000201 0000","80083177 0064","50000206 0000","8008317C 0064","50000206 0000","80083186 0064","50000301 0000","80083190 0064"],"options":null},"[Continue Tournament]":{"note":"This will allow you to Continue Tournament with All Tracks \u0026 Divisions Unlocked","data":["80083247 00FF"],"options":null}},"4147B091-63251060-C:45":{"All Levels\\Dash Becomes Shorter \u0026 Wider":{"note":"","data":["800BA025 FFFF"],"options":null},"All Levels\\Infinite\\Lives":{"note":"","data":["800E05CB 0064"],"options":null},"All Levels\\Infinite\\Missiles":{"note":"","data":["800E1265 00FF"],"options":null},"All Levels\\Large Mutant Enemies":{"note":"","data":["800BB62B FFFF"],"options":null},"All Levels\\No Clipping\\Off":{"note":"","data":["81111E67 0001"],"options":null},"All Levels\\No Clipping\\On":{"note":"","data":["81111E67 0000"],"options":null},"All Levels\\See Through\\Everything Except Specific Things":{"note":"","data":["800BC665 FFFF"],"options":null},"All Levels\\See Through\\Some Walls":{"note":"","data":["800BC625 FFFF"],"options":null},"All Levels\\Time Always 0:00:02":{"note":"","data":["810E04E8 4000"],"options":null},"All Levels\\Visibililty\\Maximum":{"note":"","data":["800BA62B FFFF"],"options":null},"All Levels\\Visibililty\\Minimum":{"note":"","data":["800BA66B FFFF"],"options":null},"All Stages\\Infinite Health":{"note":"","data":["81072D0C 2400"],"options":null},"All Stages\\Infinite\\Disruptor Ammo":{"note":"","data":["81073F04 2400"],"options":null},"All Stages\\Infinite\\Flame Ammo":{"note":"","data":["81073720 2400"],"options":null},"All Stages\\Infinite\\Jet Pack":{"note":"","data":["81076AAC 2400","81076C58 2400","81076B48 2400"],"options":null},"All Stages\\Infinite\\Pulse Ammo":{"note":"","data":["81074204 2400"],"options":null},"All Stages\\Infinite\\Seeker Ammo":{"note":"","data":["81073A94 2400"],"options":null},"All Stages\\Infinite\\Stunner Ammo":{"note":"","data":["81073BD4 2400"],"options":null},"All Stages\\Invincible":{"note":"","data":["8107A770 2400"],"options":null},"All Stages\\Lasers Never Overheat":{"note":"","data":["81073948 2400"],"options":null},"All Stages\\Upper Lasers":{"note":"Don't Use With Never Overheat Code","data":["81073944 3C06","81073946 4EFF"],"options":null},"Press GS For Pink Cheat Debug Screen":{"note":"","data":["890D01BF 0001"],"options":null}},"417DD4F4-1B482FE2-C:45":{"1 Round To Win Player 1":{"note":"","data":["D01050F3 0000","801050F3 0001"],"options":null},"99 Wins Player 1":{"note":"","data":["800FE27F 0063"],"options":null},"Big Head Mode":{"note":"","data":["80048CB5 0001"],"options":null},"Infinite\\Credits":{"note":"","data":["800493BF 00FF"],"options":null},"Infinite\\Health Player 1":{"note":"","data":["810FE0D8 0001","810FE0DA 0000"],"options":null},"Infinite\\Health Player 2":{"note":"","data":["81126F54 0001","81126F56 0000"],"options":null},"Infinite\\Time":{"note":"","data":["8010511B 0063"],"options":null},"Play\\As Goro Player 1":{"note":"","data":["800FE293 000F"],"options":null},"Play\\As Noob Saibot Player 1":{"note":"","data":["800FE293 0011"],"options":null}},"418BDA98-248A0F58-C:50":{"All 52 Gold Gems Collected":{"note":"","data":["80163640 0003","80163641 007E","80163642 00FF","80163643 00EF","80163644 00FF","80163645 007F","80163646 00FF","80163647 00FC"],"options":null},"All Stages \u0026 Chapters Unlocked":{"note":"","data":["80163648 003B"],"options":null},"Infinite\\Health\\Marina":{"note":"","data":["810E1120 03E8"],"options":null},"Infinite\\Health\\Teran":{"note":"","data":["810E5DA0 03E8"],"options":null},"Infinite\\Max Red Gems":{"note":"","data":["81169C66 270F"],"options":null},"Level Select":{"note":"To access this anytime during game, press L+R+Z to enable the menu. Press D-Pad Up / Down to move through the menu, D-Pad Left / Right to change level digits and then press Start to enter level. Don not do this whhile in pause mode (Start Button Pause) or the game will freeze.","data":["D10B0878 2030","800B0871 0004"],"options":null}},"41B25DC4-1B726786-C:45":{"Access All Bonus Cars":{"note":"","data":["50000302 0000","800985C3 0001","50000302 0000","800985CB 0001"],"options":null},"Always 1st Place":{"note":"","data":["810A5F70 0001"],"options":null},"Infinite Time":{"note":"","data":["810CE76E 03E7"],"options":null},"Max Points":{"note":"","data":["800CE743 FFFF"],"options":null},"Speedometer Select":{"note":"","data":["800CE803 00??"],"options":{"KM/H":"00","MPH":"01"}},"Start On Lap Modifier":{"note":"","data":["D00A5F75 0000","810A5F74 00??"],"options":{"Lap 1":"01","Lap 2":"02","Lap 3":"03","Lap 4":"04","Lap 5":"06","Lap 6":"06","Last Lap from Start":"07","Normal":"00"}},"Track Direction Unlocked (All Levels)":{"note":"","data":["800A4171 0003"],"options":null}},"41F2B98F-B458B466-C:45":{"All levels Complete":{"note":"","data":["50004002 0000","810A2218 0001"],"options":null},"Carrington Institute\\Have 255 targets destroyed":{"note":"","data":["810B1E34 00FF"],"options":null},"Carrington Institute\\Have 999 points in Firing Range":{"note":"","data":["810B1E32 03E7"],"options":null},"Carrington Institute\\Have Infinite time in Firing Range":{"note":"","data":["810B1E2E 004D"],"options":null},"Have All\\Weapons\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80207F10 0007","801EEF10 0007","801D5F10 0007"],"options":null},"Have All\\Weapons\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80209B80 0007","801F0B80 0007","801D7B80 0007"],"options":null},"Infinite Ammo\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8020769F 00FF","801EE69F 00FF","801D569F 00FF","80206EFB 00FF","801EDEFB 00FF","801D4EFB 00FF"],"options":null},"Infinite Ammo\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8020930F 00FF","801F030F 00FF","801D730F 00FF","80208B6B 00FF","801EFB6B 00FF","801D6B6B 00FF"],"options":null},"Infinite Health\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8120677C 3F80","811ED77C 3F80","811D477C 3F80"],"options":null},"Infinite Health\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["812083EC 3F80","811EF3EC 3F80","811D63EC 3F80"],"options":null},"Infinite Shield\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81206790 3F80","811E4950 3F80","811CB950 3F80"],"options":null},"Infinite Shield\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["811FF5C0 3F80","811E65C0 3F80","811CD5C0 3F80"],"options":null},"Multi\\Press B To Levitate\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7E4 0040","811BB720 40F2","D009C7E4 0040","801BB6D3 0000"],"options":null},"Multi\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7EC 0040","811BD390 40F2","D009C7EC 0040","801BD343 0000"],"options":null},"Multi\\Press B To Levitate\\Player 3":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7F4 0040","811BF000 40F2","D009C7F4 0040","801BEFB3 0000"],"options":null},"Multi\\Press B To Levitate\\Player 4":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7FC 0040","811C0C70 40F2","D009C7FC 0040","801C0C23 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7E4 0040","81206720 40F2","D009C7E4 0040","802066D3 0000","D009C7E4 0040","811ED720 40F2","D009C7E4 0040","801ED6D3 0000","D009C7E4 0040","811D4720 40F2","D009C7E4 0040","801D46D3 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7EC 0040","81208390 40F2","D009C7EC 0040","80208343 0000","D009C7EC 0040","811EF390 40F2","D009C7EC 0040","801EF343 0000","D009C7EC 0040","811D6390 40F2","D009C7EC 0040","801D6343 0000"],"options":null},"The Ultimate All In One":{"note":"The Ultimate All In One activate's solo missions, give all medals on solo missions, activate cheats, activate cinemas, and who knows what else. I just don't have the time to identify these codes. I know that some of this is creditted to Zap2. I don't have the time to cut those codes out.","data":["800884F3 0001","8008850E 0001","80088575 0001","50000302 0000","80088572 0001","8008858C 0001","8008858D 0001","800885A6 0001","800885A9 0001","800885C0 0001","800885DA 0001","800885DC 0001","800885F4 0001","800885F5 0001","8008860E 0001","80088610 0001","80088612 0001","80088628 0001","50000501 0000","80088642 0001","50000501 0000","8008865C 0001","50000501 0000","80088676 0001","50000501 0000","80088690 0001","50000501 0000","800886AA 0001","50000501 0000","800886C4 0001","50000501 0000","800886DE 0001","50000501 0000","800886F8 0001","50000501 0000","80088712 0001","50000501 0000","8008872C 0001","50000501 0000","80088746 0001","50000501 0000","80088760 0001","50000501 0000","8008877A 0001","50000501 0000","80088794 0001","50000501 0000","800887AE 0001","800A2219 0001","50003E02 0000","800A221D 0001","50000B01 0000","800ACCC9 0001","50000901 0000","800ACCD5 0001","50000401 0000","800ACCDF 0001","50000301 0000","800ACCE4 0001","800ACCE8 0001","800ACCE9 0001","800ACCEB 0001","800ACCEC 0001","50000901 0000","800ACCEE 0001","800ACCF8 0001","50002101 0000","800ACCFA 0001","800ACD12 0001","800ACD15 0001","800ACD16 0001","800ACDEA 0001","800ACD3A 0001"],"options":null}},"4222D89F-AFE0B637-C:45":{"Always Gets Bubbles\\Player 1":{"note":"","data":["800ECE59 0007"],"options":null},"Always Gets Bubbles\\Player 2":{"note":"","data":["800ECF49 0007"],"options":null},"Always Gets Bubbles\\Player 3":{"note":"","data":["801588B1 0007"],"options":null},"Always Gets Bubbles\\Player 4":{"note":"","data":["801589A1 0007"],"options":null},"Ceiling Never Drops\\Player 1":{"note":"","data":["810ECDEE 0000"],"options":null},"Ceiling Never Drops\\Player 2":{"note":"","data":["810ECEDE 0000"],"options":null},"Ceiling Never Drops\\Player 3":{"note":"","data":["81158846 0000"],"options":null},"Ceiling Never Drops\\Player 4":{"note":"","data":["81158974 0000"],"options":null},"Infinite Time To Set Pieces\\Player 1":{"note":"","data":["810ECE2C 0000"],"options":null},"Infinite Time To Set Pieces\\Player 2":{"note":"","data":["810ECF1C 0000"],"options":null},"Infinite Time To Set Pieces\\Player 3":{"note":"","data":["81158884 0000"],"options":null},"Infinite Time To Set Pieces\\Player 4":{"note":"","data":["81158936 0000"],"options":null},"Never Gets Bubbles\\Player 1":{"note":"","data":["800ECE59 0000"],"options":null},"Never Gets Bubbles\\Player 2":{"note":"","data":["800ECF49 0000"],"options":null},"Never Gets Bubbles\\Player 3":{"note":"","data":["801588B1 0000"],"options":null},"Never Gets Bubbles\\Player 4":{"note":"","data":["801589A1 0000"],"options":null}},"423E96F4-CE88F05B-C:45":{"Always Have\\BFG 9000":{"note":"","data":["8006338B 0001"],"options":null},"Always Have\\Bio Suite":{"note":"","data":["80063333 00??"],"options":{"Off":"00","On":"FF"}},"Always Have\\Chain Gun":{"note":"","data":["8006337F 0001"],"options":null},"Always Have\\Chainsaw":{"note":"","data":["8006336B 0001"],"options":null},"Always Have\\Double Shotgun":{"note":"","data":["8006337B 0001"],"options":null},"Always Have\\Gun":{"note":"","data":["80063373 0001"],"options":null},"Always Have\\Have Rocket Launcher":{"note":"","data":["80063381 0001"],"options":null},"Always Have\\Laser Weapon":{"note":"","data":["8006338F FFFF"],"options":null},"Always Have\\Missile Launcher":{"note":"","data":["80063383 0001"],"options":null},"Always Have\\Plasma Rifle":{"note":"","data":["80063387 0001"],"options":null},"Always Have\\Shotgun":{"note":"","data":["80063377 0001"],"options":null},"Berserk Mode":{"note":"","data":["8006332B 00FF"],"options":null},"Enable Cheat Menu":{"note":"","data":["8005A883 0001"],"options":null},"Have All Keys":{"note":"","data":["8006333F 0001","80063343 0001","80063344 0001","80063353 0001","8006334F 0001","80063348 0001"],"options":null},"Infinite\\Ammo All Weapons":{"note":"","data":["80063393 00FF","80063397 00FF","8006339B 00FF","8006339F 00FF"],"options":null},"Infinite\\Armor":{"note":"","data":["8006331F 00FF"],"options":null},"Invincible":{"note":"","data":["800633BB 0002"],"options":null},"Invincible And Map Markers":{"note":"","data":["800633BB 0006"],"options":null},"Rapid Fire":{"note":"","data":["810633EA 0B94"],"options":null},"Turn Map Markers On":{"note":"","data":["800633BB 0004"],"options":null},"[Max Brightness]":{"note":"Enable this cheat on rom load to have Max Brightness (internal) and then put Jabo d3d8 on 160% Max for a extra brightness Boost.","data":["8005A878 0064"],"options":null}},"4248BA87-99BE605D-C:00":{"Always Have 0 kcal (Player 1)":{"note":"","data":["812FFBF2 0000"],"options":null},"Infinite 9 Credits":{"note":"","data":["802D9DDF 0009"],"options":null},"Player 2 has High kcal":{"note":"","data":["812FFC4E FFFF","812FFC4F FFFF"],"options":null}},"4252A5AD-AE6FBF4E-C:45":{"Infinite Coins P1":{"note":"","data":["8119ADEE 03E7"],"options":null},"Infinite Gold P1":{"note":"","data":["81088286 03E7"],"options":null},"Infinite Gold P2":{"note":"","data":["8119ADEE 03E7"],"options":null},"Infinite Health P1":{"note":"","data":["80088284 0003"],"options":null},"Infinite Health P2":{"note":"","data":["81088290 03E7"],"options":null},"Infinite Lives P1":{"note":"","data":["80088283 0003"],"options":null},"Infinite Lives P2":{"note":"","data":["8008828D 0003"],"options":null},"Open All Levels":{"note":"","data":["50002D02 0000","810882AA 0303"],"options":null}},"42CF5EA3-9A1334DF-C:50":{"All levels complete":{"note":"","data":["800D1364 000C","50000501 0000","800D1365 000A"],"options":null},"Infinite Vespene gas,minerals \u0026 Most missions":{"note":"","data":["50003202 0000","800B1D96 00FF"],"options":null}},"4446FDD6-E3788208-C:45":{"Extra Gems":{"note":"","data":["D0165241 0000","80165241 004B"],"options":null},"Full\\Bomb Power":{"note":"","data":["8016523F 0003"],"options":null},"Full\\Fire Power":{"note":"","data":["80165240 0003"],"options":null},"Infinite\\Health":{"note":"","data":["80165244 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["80165243 0009"],"options":null},"Max\\Bombs":{"note":"","data":["8016523F 0008"],"options":null},"Max\\Explosion":{"note":"","data":["80165240 0008"],"options":null},"Max\\Score":{"note":"","data":["80177608 FFFF"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D005A455 0020","81154178 41CB","D005A455 0020","D0154154 0000","80154154 0040"],"options":null}},"44995484-20A5FC5E-C:4A":{"99 Points":{"note":"","data":["801D8E13 0063"],"options":null},"Always First Place":{"note":"","data":["801D040F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801D06F3 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801D06CE 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801D0537 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801D0B5A 0005","801D0DFA 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801D053F 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800E84C3 0007"],"options":null},"Super Speed":{"note":"","data":["801D0537 0005","D0161DC1 0010","801D0537 0020"],"options":null}},"46039FB4-0337822C-C:45":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D6BE0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112E7DE 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800ECA18 0064"],"options":null},"Game 100% Complete\\Save Slot 2":{"note":"","data":["800ECA70 0064"],"options":null},"Game 100% Complete\\Save Slot 3":{"note":"","data":["800ECAC8 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D6BC0 0001","50001701 0000","800D6BC8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D6E50 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D714F 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D6BB9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D6BBA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D6BBB 0003"],"options":null}},"46A3F7AF-0F7591D0-C:45":{"Always Place 1st\\Player 1":{"note":"","data":["81065174 0000"],"options":null},"Infinite\\Continues":{"note":"","data":["8107F850 00FF"],"options":null},"Infinite\\Nitros\\Player 1":{"note":"","data":["800BE7FD 00FF"],"options":null},"Infinite\\Time":{"note":"","data":["810802D4 4296"],"options":null},"Unlock All Cars":{"note":"","data":["8104F10E FFFF"],"options":null}},"49088A11-6494957E-C:45":{"Access In-Game Cheat Menu":{"note":"","data":["8111AADC FFFF","8111AADE FFFF"],"options":null},"Player 1\\99 Gems":{"note":"","data":["812FC4C8 0063","806FE2F8 0063"],"options":null},"Player 1\\Have All\\Keys,Nuke,Evrything":{"note":"Only enable once in game or it will freeze before you get into the start menu","data":["802FC602 0030","802FC60C 0030","802FC616 0030","802FC620 0030","50000601 0000","802FC634 0030","50000501 0000","802FC648 0030","50000401 0000","802FC65C 0030","50000601 0000","802FC99C 0030","802FC4E0 0033","802FC4E5 0033","802FC4EA 0033","802FC594 0033","802FC530 0033","802FC53A 0033","802FC53B 0033","802FC5B0 0033","802FC5B1 0033","802FC5B2 0033","802FC5B3 0033","806FE432 0030","806FE43C 0030","806FE446 0030","806FE450 0030","50000601 0000","806FE464 0030","50000501 0000","806FE478 0030","50000501 0000","806FE48C 0030","50000601 0000","806FE4CC 0030","806FE310 0033","806FE315 0033","806FE31A 0033","806FE360 0033","806FE36A 0033","806FE36B 0033","806FE3C4 0033","50000401 0000","806FE3E0 0033","50000601 0000","8059D61A 0001","50000D01 0000","8059D620 0001","50000401 0000","8059D62E 0001"],"options":null},"Player 1\\Have All\\Weapons":{"note":"","data":["D12FC912 0000","812FC912 0101","D12FC914 0000","812FC914 0101","D12FC916 0000","812FC916 0101","D12FC918 0000","812FC918 0101","D12FC91A 0000","812FC91A 0101","D12FC91C 0000","812FC91C 0101","D12FC91E 0000","812FC91E 0101","D12FC920 0000","812FC920 0101","D12FC922 0000","812FC922 0101","D12FC924 0000","812FC924 0101","D12FC926 0000","812FC926 0101","D12FC928 0000","812FC928 0101","D12FC92A 0000","812FC92A 0101","D12FC92C 0000","812FC92C 0101","D12FC92E 0000","812FC92E 0101","D12FC930 0000","812FC930 0101","D12FC932 0000","812FC932 0101","806FE742 0001","806FE743 0001","806FE744 0001","806FE745 0001","806FE746 0001","806FE747 0001","806FE748 0001","806FE749 0001","806FE74A 0001","806FE74B 0001","806FE74C 0001","806FE74D 0001","806FE74E 0001","806FE74F 0001","806FE750 0001","806FE751 0001","806FE752 0001","806FE753 0001","806FE754 0001","806FE756 0001","806FE757 0001","806FE758 0001","806FE759 0001","806FE75A 0001","806FE75B 0001","806FE75C 0001","806FE75E 0001","806FE75F 0001","806FE760 0001","806FE761 0001","806FE762 0001","806FE763 0001","806FE764 0001"],"options":null},"Player 1\\Infinite\\Ammo":{"note":"","data":["802FC499 0000","50000302 0000","812FC8D4 0063","812FC8DE 0063","812FC8E2 0063","50000A02 0000","812FC8E6 0063","50000302 0000","816FE704 0063","816FE70E 0063","816FE712 0063","50000802 0000","816FE716 0063","816FE72C 0063","816FE730 0063"],"options":null},"Player 1\\Infinite\\Health":{"note":"","data":["812FC4C6 0064","816FE2F6 6400"],"options":null},"Player 2\\99 Gems":{"note":"","data":["812F7240 0063"],"options":null},"Player 2\\Infinite\\Ammo":{"note":"","data":["50000602 0000","812F767C 0063","812F764C 013C","812F764E 013C","50000302 0000","812F7654 013C","812F7660 013C","812F7664 013C","812F766A 013C","812F766C 013C","812F7674 013C","812F7678 013C","8159D5DC 013C","8159D5DE 013C","8159D5E4 013C","8159D5E8 013C","8159D5EA 013C","8159D5F0 013C","8159D5F4 013C","8159D5FA 013C","8159D5FC 013C","8159D604 013C","8159D608 013C","50000602 0000","8159D60C 013C"],"options":null},"Player 2\\Infinite\\Health":{"note":"","data":["812F723E 0064","8059D1CE 0064"],"options":null}},"492B9DE8-C6CCC81C-C:50":{"Have 231 Marbles":{"note":"","data":["D00EBE53 0000","800EBE53 03E7"],"options":null},"Have All Gold Udders":{"note":"","data":["50002802 0000","810C80BA 0101"],"options":null},"Infinite\\Ammo\\Banana Peel Bomb":{"note":"","data":["810C6976 0064"],"options":null},"Infinite\\Ammo\\Blaster":{"note":"","data":["810C6916 0064"],"options":null},"Infinite\\Ammo\\Boomerang Knives":{"note":"","data":["810C691E 0064"],"options":null},"Infinite\\Ammo\\Butcher Knife Gun":{"note":"","data":["800C887F 0064"],"options":null},"Infinite\\Ammo\\Chickens":{"note":"","data":["810C69BE 0064"],"options":null},"Infinite\\Ammo\\Green Slimer":{"note":"","data":["810C69A6 0064"],"options":null},"Infinite\\Ammo\\Laser":{"note":"","data":["810C698E 0064"],"options":null},"Infinite\\Ammo\\Lepricon Gun":{"note":"","data":["800C8897 0064"],"options":null},"Infinite\\Ammo\\Mushrooms":{"note":"","data":["810C6936 0064"],"options":null},"Infinite\\Ammo\\Music Gun":{"note":"","data":["810C6906 0064"],"options":null},"Infinite\\Ammo\\Pistol":{"note":"","data":["800C8777 0064"],"options":null},"Infinite\\Ammo\\Rocket Launcher":{"note":"","data":["810C6946 0064"],"options":null},"Infinite\\Ammo\\Shotgun":{"note":"","data":["810C69EE 0064"],"options":null},"Infinite\\Ammo\\Sniper Chicken":{"note":"","data":["800C881F 0064"],"options":null},"Infinite\\Health":{"note":"","data":["800C876F 0064"],"options":null},"Infinite\\Lives":{"note":"","data":["800C8773 0064"],"options":null}},"492F4B61-04E5146A-C:45":{"99 Points":{"note":"","data":["801CB343 0063"],"options":null},"Always First Place":{"note":"","data":["801C293F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801C2C03 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801C2BFE 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801C2A67 0005","8013FC91 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801C308A 0005","801C392D 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801C2A6F 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800DA9D3 0007"],"options":null},"Open\\Course Option":{"note":"This works in all modes except for Championship Mode.","data":["800DA9D3 00??"],"options":{"Dolphin Park":"00","Drake Lake":"03","Glacier Coast":"07","Marian Fortress":"04","Port Blue":"05","Southern Island":"08","Sunny Beach":"01","Sunset Bay":"02","Twilight City":"06"}},"Open\\Difficulty Option":{"note":"","data":["801CB260 00??"],"options":{"Dolphin":"10","Dolphin \u0026 Expert":"12","Dolphin \u0026 Hard":"11","Dolphin Hard \u0026 Expert":"13","Expert":"02","Hard":"01","Hard \u0026 Expert":"03"}},"Open\\Level Option":{"note":"","data":["801CB26B 00??"],"options":{"Above \u0026 Drake Lake":"03","All Above \u0026 Glacier Coast":"16","All Above \u0026 Marine Fortress":"04","All Above \u0026 Port Blue":"05","All Above \u0026 Southern Island":"06","All Above \u0026 Twilight City":"0D","Sunset Bay":"02"}},"Super Speed":{"note":"","data":["801C2A67 0005","D01CE659 0010","801C2A67 0020"],"options":null}},"4998DDBB-F7B7AEBC-C:45":{"Agility":{"note":"","data":["800A973D 0001"],"options":null},"Auto Win Scenario":{"note":"","data":["800A9741 0001"],"options":null},"Debug Menu":{"note":"","data":["800A9740 0001"],"options":null},"Double MPG":{"note":"","data":["800A9735 0001"],"options":null},"Infinite\\Ammo":{"note":"","data":["800A9731 0001"],"options":null},"Infinite\\Attempts":{"note":"","data":["800A9732 0001"],"options":null},"Infinite\\Chaingun":{"note":"","data":["800A9737 0001"],"options":null},"Infinite\\Fuel":{"note":"","data":["800A9733 0001"],"options":null},"Infinite\\Lives":{"note":"","data":["800A5DF0 0009"],"options":null},"Infinite\\Missiles":{"note":"","data":["800A9739 0001"],"options":null},"Infinite\\Rockets":{"note":"","data":["800A9738 0001"],"options":null},"Infinite\\Wingtips":{"note":"","data":["800A973A 0001"],"options":null},"Invulnerability":{"note":"","data":["800A9730 0001"],"options":null},"Level Skip":{"note":"","data":["800A973F 0001"],"options":null},"Max Armor Increased 50%":{"note":"","data":["800A973C 0001"],"options":null},"Overhead View":{"note":"","data":["800A973E 0001"],"options":null},"Play Mission\\1":{"note":"","data":["800A5DF1 0000"],"options":null},"Play Mission\\2":{"note":"","data":["800A5DF1 0001"],"options":null},"Play Mission\\3":{"note":"","data":["800A5DF1 0002"],"options":null},"Play Mission\\4":{"note":"","data":["800A5DF1 0003"],"options":null},"Play Mission\\5":{"note":"","data":["800A5DF1 0004"],"options":null},"Play Mission\\6":{"note":"","data":["800A5DF1 0005"],"options":null},"Quad Damage":{"note":"","data":["800A9736 0001"],"options":null},"Stealth Mode":{"note":"","data":["800A9734 0001"],"options":null},"Wingtips Do Double Damage":{"note":"","data":["800A973B 0001"],"options":null}},"49E46C2D-7B1A110C-C:4A":{"Have 1 Star\\Abdul":{"note":"","data":["80306A13 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["80306A0F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80306A12 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80306A11 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80306A14 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80306A10 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["80306A0E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80306A15 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80306A16 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["80208F61 0000","80203E83 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["80203E87 0000","8020AE29 0000"],"options":null},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EED3B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0208E17 0000","80208E17 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020ACDF 0000","8020ACDF 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810AD29C 3F80"],"options":null}},"4A997C74-E2087F99-C:50":{"Extreme Mode":{"note":"","data":["8111D332 0003"],"options":null},"Infinite Armour\\Player One":{"note":"","data":["8011D65F 0064"],"options":null},"Infinite Armour\\Player Two":{"note":"","data":["8011D663 0064"],"options":null},"Infinite Bombs\\Player One":{"note":"","data":["8011D667 0003"],"options":null},"Infinite Bombs\\Player Two":{"note":"","data":["8011D66B 0003"],"options":null},"Level 11 Vulcan Cannon\\Player One":{"note":"","data":["80123BAB 000A"],"options":null},"Level 11 Vulcan Cannon\\Player Two":{"note":"","data":["80123BCB 000A"],"options":null},"Level Select":{"note":"","data":["81123E16 000C"],"options":null},"Max Score":{"note":"","data":["81123B82 FC9A"],"options":null}},"4BCDFF47-AAA3AF8F-C:45":{"Have All Items":{"note":"","data":["50000501 0000","80389C4A 0001","50000301 0000","80389C51 0001","80389C5A 0001","80389C5B 0001","80389C5D 0001","50000E01 0000","80389C60 0001"],"options":null},"Have Exp Points":{"note":"","data":["80389C49 0063"],"options":null},"Have Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C3F 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C45 0001","81389C46 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C3E 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C49 0063"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C48 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the GS button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C90 ????","89389C92 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CED 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C88 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C88 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C3D 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C42 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"4C261323-4F295E1A-C:44":{"Access Level Select":{"note":"On the main menu Scroll down to make CHEATS visible to go into Level Select.For in-Game Cheats,Pause gameplay.","data":["810DD50C 8001"],"options":null},"Have\\All TARZAN Letters":{"note":"","data":["800DD515 00FF"],"options":null},"Have\\Coins Collected 100%":{"note":"","data":["800DD547 0064"],"options":null},"Have\\Full Portrait":{"note":"","data":["800DD514 00FF"],"options":null},"Have\\Level \u0026 Tokens Completed 100%":{"note":"","data":["800DD51F 0000","800DD520 0001","800DD521 0000"],"options":null},"Infinite\\Bonus Timer":{"note":"This is For All Timers on Bonus Levels","data":["801736DE 0025"],"options":null},"Infinite\\Green Weapon":{"note":"","data":["811921F6 0063"],"options":null},"Infinite\\Health":{"note":"","data":["81192320 0120"],"options":null},"Infinite\\Lives":{"note":"","data":["800DD542 00??"],"options":{"3 Lives":"03","99 Lives":"63"}},"Infinite\\Purple Weapon":{"note":"","data":["811921FA 0063"],"options":null},"Infinite\\Red Weapon":{"note":"","data":["811921F8 0063"],"options":null},"Press GS For\\Sabor Attacks\\Sabor 1 Hit Kill":{"note":"","data":["8924A23E 0001"],"options":null}},"4C52BBB2-CEAB0F6B-C:45":{"Always Play Level Modifier":{"note":"","data":["800B254C 00??"],"options":{"Mission 1-Plastic Pandemonium":"00","Mission 10-The Melting Pot":"09","Mission 11-River Rapids Riot":"0A","Mission 12-Nighttime Teddy":"0B","Mission 13-Demolition Time":"0C","Mission 14-Pick Up The Pieces":"0D","Mission 15-Have An Ice Day":"0E","Mission 16-Plastro's Revenge":"0F","Mission 17-Bug Hunt: Chew Chew Bug-B-Q":"10","Mission 18-Bug Hunt: Crispy Critters":"11","Mission 19-Flag-Nab-It: Fort Frenzy":"12","Mission 2-Going Car-razy":"01","Mission 20-Flag-Nab-it: Freezer Burn":"13","Mission 21-Food Fight: Picnic Panic":"14","Mission 22-Food Fight: Cherry Surprise":"15","Mission 23-Rescue: Don't Feed The Crabs":"16","Mission 24-Rescue: Tide Pool Terror":"17","Mission 3-The Train That Could":"02","Mission 4-Tan Terror-Tory":"03","Mission 5-Bug Bath":"04","Mission 6-Uninvited Guests":"05","Mission 7-Ants In The Pants":"06","Mission 8-Saucer Attack":"07","Mission 9-The Heat is On":"08"}},"Co-Pilot Modifier":{"note":"","data":["800B245C 00??"],"options":{"Lt. Dave Parker \"Rawhide\"":"02","Lt. Felicity Wannamaker \"Bombshell\"":"03","Lt. James Marshall \"Woodstock\"":"00","Lt. John Lawless \"Hardcore\"":"01","Sergeant Hawk \"Sarge\" (Hidden Character)":"04"}},"Helicopter Modifier":{"note":"","data":["800B2534 00??"],"options":{"Apache (Hidden)":"04","Chinook (Hidden)":"02","Huey":"01","Super Stallion (Hidden)":"03"}},"Start On Play Level Modifier":{"note":"","data":["D00B254C 0000","800B254C 00??"],"options":{"Mission 1-Plastic Pandemonium":"00","Mission 10-The Melting Pot":"09","Mission 11-River Rapids Riot":"0A","Mission 12-Nighttime Teddy":"0B","Mission 13-Demolition Time":"0C","Mission 14-Pick Up The Pieces":"0D","Mission 15-Have An Ice Day":"0E","Mission 16-Plastro's Revenge":"0F","Mission 17-Bug Hunt: Chew Chew Bug-B-Q":"10","Mission 18-Bug Hunt: Crispy Critters":"11","Mission 19-Flag-Nab-It: Fort Frenzy":"12","Mission 2-Going Car-razy":"01","Mission 20-Flag-Nab-it: Freezer Burn":"13","Mission 21-Food Fight: Picnic Panic":"14","Mission 22-Food Fight: Cherry Surprise":"15","Mission 23-Rescue: Don't Feed The Crabs":"16","Mission 24-Rescue: Tide Pool Terror":"17","Mission 3-The Train That Could":"02","Mission 4-Tan Terror-Tory":"03","Mission 5-Bug Bath":"04","Mission 6-Uninvited Guests":"05","Mission 7-Ants In The Pants":"06","Mission 8-Saucer Attack":"07","Mission 9-The Heat is On":"08"}},"Unlock All Planes":{"note":"","data":["810B252A 0105"],"options":null}},"4D3ADFDA-7598FCAE-C:50":{"Infinite Energy\\Player 1":{"note":"","data":["80254A76 001E","8025CCF6 001E"],"options":null},"Infinite Energy\\Player 2":{"note":"","data":["80257B86 001E","80260846 001E"],"options":null},"Infinite Energy\\Player 3":{"note":"","data":["8025ACA6 001E","802637A6 001E"],"options":null},"Infinite Energy\\Player 4":{"note":"","data":["8025E0E6 001E","80266B76 001E"],"options":null}},"4D3E622E-9B828B4E-C:4A":{"Always 1st Place":{"note":"","data":["802C4BC2 0001"],"options":null},"Have Boost From Start":{"note":"","data":["D02C4DAC 003F","802C4925 0050"],"options":null},"Infinite Lives":{"note":"","data":["800E5AA9 0005"],"options":null},"Player 1\\Infinite Shield":{"note":"","data":["812C4B48 4336","812C4B4C 4336"],"options":null},"Time Always 00.00.00 1st Place":{"note":"","data":["802C4BC0 0000","802C4BC2 0001"],"options":null},"Unlock Everything":{"note":"","data":["800CD428 0001"],"options":null}},"4D486681-AB7D9245-C:50":{"Access All Levels":{"note":"Must be used with Access Wampa Stompa","data":["810DE2EA 0004"],"options":null},"Access In-Game Cheat Menu":{"note":"Pause gameplay and pink text will appear in top screen. scroll with multiple buttons and select with 'A'","data":["D10DDE2E 0001","810D3F32 0001","D10DDE14 0002","810D3F32 0001","D10E28D4 0011","810D3F32 0001","D10E28D4 0011","810D3F32 0001"],"options":null},"Access Wampa Stompa":{"note":"Important To Get All Codes To Work! Select empty file \"Wampa Stompa\" will now be your playername.","data":["8118D4E8 2057","8118D4EA 616D","8118D4EC 7061","8118D4EE 2020","8118D4F0 5374","8118D4F2 6F6D","8118D4F4 7061"],"options":null},"Extra Jump Power":{"note":"","data":["810E2220 3F92"],"options":null},"Freeze Timer":{"note":"","data":["810E2230 4018"],"options":null},"Max Challenge Points":{"note":"","data":["8118F370 000F"],"options":null}},"4D79D316-E8501B33-C:45":{"Bonus Menu Games\\Infinite Time\\Escape Race 100 \u0026 200\\Player 1":{"note":"","data":["811BD3B6 000A"],"options":null},"Bonus Menu Games\\Infinite Time\\Escape Race 100 \u0026 200\\Player 2":{"note":"","data":["811BD3BA 000A"],"options":null},"Bonus Menu Games\\Max\\Points\\Disc Hunter\\Player 1":{"note":"","data":["801BD3E9 00FF"],"options":null},"Bonus Menu Games\\Max\\Points\\Disc Hunter\\Player 2":{"note":"","data":["801BD3EB 00FF"],"options":null},"Bonus Menu Games\\Max\\Wins\\Sunset \u0026 Sunrise Showdown\\Player 1":{"note":"","data":["801BC25F 00FF"],"options":null},"Choose Stage\\VS. Mode":{"note":"","data":["800ED6CF 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06","Stage 8 (Hidden Stage)":"07","Stage 9 (Hidden Stage)":"08","Stage A (Hidden Stage)":"09"}},"Infinite\\Health\\Player 1":{"note":"","data":["8112CD46 270F"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["8114D2C6 270F"],"options":null},"Infinite\\Stun Meter\\Player 1":{"note":"","data":["8012CD49 00FF"],"options":null},"Infinite\\Stun Meter\\Player 2":{"note":"","data":["8014D2C9 00FF"],"options":null},"Infinite\\Time":{"note":"","data":["80102A94 000A"],"options":null},"Play As\\Player 1":{"note":"","data":["801BE2A4 00??"],"options":{"Airazor":"03","Cheetor":"02","Megatron":"04","Optimus Primal":"00","Rattrap":"01","Tarantulas":"05","Terrorsaur":"07","Waspinator":"06"}},"Play As\\Player 2":{"note":"","data":["801BE2A5 00??"],"options":{"Airazor":"03","Cheetor":"02","Megatron":"04","Optimus Primal":"00","Rattrap":"01","Tarantulas":"05","Terrorsaur":"07","Waspinator":"06"}}},"4DD7ED54-74F9287D-C:45":{"All Levels\\Dash Becomes Shorter \u0026 Wider":{"note":"","data":["800BA025 FFFF"],"options":null},"All Levels\\Infinite\\Lives":{"note":"","data":["800E05CB 0064"],"options":null},"All Levels\\Infinite\\Missiles":{"note":"","data":["800E1265 00FF"],"options":null},"All Levels\\Large Mutant Enemies":{"note":"","data":["800BB62B FFFF"],"options":null},"All Levels\\No Clipping\\Off":{"note":"","data":["81111E67 0001"],"options":null},"All Levels\\No Clipping\\On":{"note":"","data":["81111E67 0000"],"options":null},"All Levels\\See Through\\Everything Except Specific Things":{"note":"","data":["800BC665 FFFF"],"options":null},"All Levels\\See Through\\Some Walls":{"note":"","data":["800BC625 FFFF"],"options":null},"All Levels\\Time Always 0:00:02":{"note":"","data":["810E04E8 4000"],"options":null},"All Levels\\Visibililty\\Maximum":{"note":"","data":["800BA62B FFFF"],"options":null},"All Levels\\Visibililty\\Minimum":{"note":"","data":["800BA66B FFFF"],"options":null},"All Stages\\Infinite Health":{"note":"","data":["81072D0C 2400"],"options":null},"All Stages\\Infinite\\Disruptor Ammo":{"note":"","data":["81073F04 2400"],"options":null},"All Stages\\Infinite\\Flame Ammo":{"note":"","data":["81073720 2400"],"options":null},"All Stages\\Infinite\\Jet Pack":{"note":"","data":["81076AAC 2400","81076C58 2400","81076B48 2400"],"options":null},"All Stages\\Infinite\\Pulse Ammo":{"note":"","data":["81074204 2400"],"options":null},"All Stages\\Infinite\\Seeker Ammo":{"note":"","data":["81073A94 2400"],"options":null},"All Stages\\Infinite\\Stunner Ammo":{"note":"","data":["81073BD4 2400"],"options":null},"All Stages\\Invincible":{"note":"","data":["8107A770 2400"],"options":null},"All Stages\\Lasers Never Overheat":{"note":"","data":["81073948 2400"],"options":null},"All Stages\\Upper Lasers":{"note":"Don't Use With Never Overheat Code","data":["81073944 3C06","81073946 4EFF"],"options":null},"Press F9 For Pink Cheat Debug Screen":{"note":"","data":["890D098B 0001"],"options":null}},"4E4A7643-A37439D7-C:45":{"Aiming Sites Always Available":{"note":"","data":["812F0922 0004"],"options":null},"Always Your Turn\\Player 1":{"note":"","data":["802EF798 0000"],"options":null},"Always Your Turn\\Player 2":{"note":"","data":["802EF798 0001"],"options":null},"Ball\\Always In Hand":{"note":"","data":["802EF79C 0002"],"options":null},"Foul Score Options\\Player 1":{"note":"","data":["812EF784 ????"],"options":{"Max Fouls":"FFFF","Zero Fouls":"0000"}},"Foul Score Options\\Player 2":{"note":"","data":["812EF786 ????"],"options":{"Max Fouls":"FFFF","Zero Fouls":"0000"}},"Max Ratings\\Player 1":{"note":"","data":["81062C6A FFFF"],"options":null},"Max Ratings\\Player 2":{"note":"","data":["81062CEE FFFF"],"options":null},"Wins Options\\Player 1":{"note":"","data":["812EF780 ????"],"options":{"Max Points":"FFFF","Zero Points":"0000"}},"Wins Options\\Player 2":{"note":"","data":["812EF782 ????"],"options":{"Max Points":"FFFF","Zero Points":"0000"}}},"4E4B0640-1B49BCFB-C:45":{"2 Player Championship Mode":{"note":"This lets player 2 play with you in championship mode so if you have a friend that you want to tag team up with in tag team championship now you can.","data":["810A755E 0002"],"options":null},"Always Special\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF9E 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2F6 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["D015A5D1 0015","8015B64E 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["D015A5D1 0015","8015B9A6 0004"],"options":null},"Auto-Pin\\Player 1":{"note":"Do not use with Cant Pin","data":["8016CE23 0003"],"options":null},"Auto-Pin\\Player 2":{"note":"Do not use with Cant Pin","data":["8016CE17 0003"],"options":null},"Auto-Pin\\Player 3":{"note":"Do not use with Cant Pin","data":["8016CE2F 0003"],"options":null},"Auto-Pin\\Player 4":{"note":"Do not use with Cant Pin","data":["8016CE3B 0003"],"options":null},"CPU To Human Control\\Player 1":{"note":"","data":["8015AF99 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 2":{"note":"","data":["8015B2F1 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 3":{"note":"","data":["8015B649 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 4":{"note":"","data":["8015B9A1 00??"],"options":{"CPU":"18","Human":"17"}},"Can't Pin\\Player 1":{"note":"Do not use with Auto Pin","data":["8016CE23 0004"],"options":null},"Can't Pin\\Player 2":{"note":"Do not use with Auto Pin","data":["8016CE17 0004"],"options":null},"Can't Pin\\Player 3":{"note":"Do not use with Auto Pin","data":["8016CE2F 0004"],"options":null},"Can't Pin\\Player 4":{"note":"Do not use with Auto Pin","data":["8016CE3B 0004"],"options":null},"Cannot Be Grabbed\\Player 1":{"note":"","data":["D115AEC6 0052","8115AEC6 0001","D115AEC6 00A1","8115AEC6 00C1"],"options":null},"Cannot Be Knocked Down\\Player 1":{"note":"","data":["D115AEC6 0031","8115AEC6 0001"],"options":null},"Cannot Be Punched\\Player 1":{"note":"","data":["D115AEC6 002D","8115AEC6 0001","D115AEC6 0035","8115AEC6 00C1"],"options":null},"Clock At 00:00":{"note":"","data":["8115AB1E 0000","810A99F2 0000"],"options":null},"Hacked Moves\\Capture Tazzplex":{"note":"Replaces: Capture Suplex P1 grabs P2's feet like a capture suplex, then lets go \u0026 does a Tazzplex.","data":["D106B454 3689","D106B456 0021","8106B460 00BC","D106B454 3689","D106B456 0021","8106B462 A5E2","D106B514 368A","D106B516 0021","8106B520 00BC","D106B514 368A","D106B516 0021","8106B522 B6BE"],"options":null},"Hacked Moves\\Dominator into HHH Facebuster":{"note":"Replaces: Dominator","data":["D106B454 3810","D106B456 005C","8106B560 011A","D106B454 3810","D106B456 005C","8106B562 A256","D106B514 3811","D106B516 005C","8106B520 011A","D106B514 3811","D106B516 005C","8106B522 ACB0","D106B454 3810","D106B456 0075","8115AF52 0000"],"options":null},"Hacked Moves\\Dragon Screw Stunner":{"note":"Dragon Screw 02 P1 does a Dragon Screw then picks up P2 (still holding his leg) and spins him around and gives him a Stone Cold Stunner","data":["D106B454 3749","D106B456 0094","8106B460 00E9","D106B454 3749","D106B456 0094","8106B462 B9BE","D106B514 374A","D106B516 0094","8106B520 00E9","D106B514 374A","D106B516 0094"],"options":null},"Hacked Moves\\Dragon Screw Suplex":{"note":"Replaces: Double Dragon Screw 02 P1 does a Dragon screw then picks then up (still holding their feet) and does a capture suplex.","data":["D106B454 3749","D106B456 007C","8106B460 00AD","D106B454 3749","D106B456 007C","8106B462 DB2A","D106B514 374A","D106B516 007C","8106B520 00AD","D106B514 374A","D106B516 007C","8106B522 EAE0","D106B454 3749","D106B456 00A5","8115AF52 0000","D106B514 374A","D106B516 00A5","8115B2AA 0000"],"options":null},"Hacked Moves\\Morality Check to Back of head":{"note":"Replaces: Back Clothesline P1 is immediately backed up and does the Morality Check to P2 in the back of the head (misses by a little)","data":["D106B454 3892","D106B456 0000","8106B460 00B3","D106B454 3892","D106B456 0000","8106B462 194C"],"options":null},"Hacked Moves\\Running Rock Bottom":{"note":"Replaces: Farooq Spinebuster P2 runs into P1 and P1 delivers a RockBottom to P2.","data":["D106B454 3A80","D106B456 0000","8106B460 00C1","D106B454 3A80","D106B456 0000","8106B462 F7A2","D106B514 3A81","D106B516 0000","8106B520 00C2","D106B514 3A81","D106B516 0000","8106B522 1210"],"options":null},"Hacked Moves\\Running Tazplex":{"note":"Replaces: Underhook Belly to Belly P2 runs into P1 and P1 does a Tazplex to P2.","data":["D106B454 3A7A","D106B456 0000","8106B460 00BC","D106B454 3A7A","D106B456 0000","8106B462 A51E","D106B514 3A7B","D106B516 0000","8106B520 00BC","D106B514 3A7B","D106B516 0000","8106B522 B5FA"],"options":null},"Have All\\Characters,Costumes \u0026 Moves":{"note":"","data":["50000B02 0000","810BEE40 FFFF"],"options":null},"Infinite\\Money\\Championship Mode":{"note":"For Championship Mode","data":["8109940A FFFF"],"options":null},"Infinite\\Money\\Smackdown Mall Shop":{"note":"For Smackdown Mall Shop","data":["8114FAD6 FFFF"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF5F 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2B7 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["D015A5D1 0015","8015B60F 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["D015A5D1 0015","8015B967 00FF"],"options":null},"Novalty\\Truck In The Crowd":{"note":"","data":["81050110 0747","81050112 0748","81050114 0749","81050116 074A","81050118 074B","81050124 0A4B","81050126 0A43","81050128 0A4B","8105012A 0A43","8105012C 0A43","8105012E 0A43","8105011A 074C","8105011C 074D","81050130 0A43","8105011E 074E","81050132 0A43","81050120 0746","81050134 0A4B","81050122 0743","81050136 0A4B","D1064880 2000","8115AFB0 42EE","D1064880 2000","8115B308 42EE"],"options":null},"Play As\\Player 1\\Option 1":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 1\\Option 2":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 1\\Option 3":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 2\\Option 1":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 2\\Option 2":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 2\\Option 3":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 3\\Option 1":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 3\\Option 2":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 3\\Option 3":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 4\\Option 1":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 4\\Option 2":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 4\\Option 3":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Replace Raw War with\\BACKYARD ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105010E 0F76","8105010C 0F76","810482E8 002F","81050150 2CFD","810528F4 33FF","810528F6 33FF","81050152 2DC7","81050114 04F4","81050116 04F5","8105011E 04F3","81050128 07FF","8105012A 07FF","81050132 07FF","81079F48 400C","81079F5C 3F00","81079F70 3FFF","8107A024 4010","8107A038 3F00","8107A04C 4020","8107A060 3F84","8107A394 4012","8107A3A8 3F00","8107A3BC 4030","8107A3D0 3F84","8105042C 0949","81050436 07FF","81050438 07FF","8105043A 07FF","8105043C 0000","8105043E 07FF","81050440 0949","81050442 0949","81050430 0F76","81050128 07FF","8105012A 07FF","8105012C 0000","8105012E 07FF","81050130 07FF","81050132 07FF","81050134 0000","81050136 08F9","81050196 2CFD","81050194 09EF","81050192 0000","81050190 09EF","8116C49E 0019","8116C4B8 0004","8116C4DC C2E1","8116C4E0 42B4","810500FE 2D2D","81050100 2D2D","81050102 2D2D","81050400 2DC7","81050402 2DC7","81050404 2DC7","81050406 2DC7","81050408 2DC7","8105040A 2DC7","8105040C 2DC7","8105040E 2DC7","50001002 0000","810501B8 0000","50000402 0000","810501E0 0000","50000902 0000","81050262 0000","50001402 0000","81050290 0000","50002C02 0000","810502EC 0000","8107941C 3FE0","81079428 3FFF","810500EC 06FE","810500EE 06FD","810500F8 07FF","810500FA 0997","81050110 06FC","81050112 06FB","8105011A 06FF","8105011C 06FA","81052CF0 2CC9","81052CF4 2D1B","81052CD0 2CD1","81052CD4 0963","81052C84 2CBF","81052C8A 0961","81052CB8 2CC4","81052CBC 2DD7","81052CC8 2CD1","81052CCC 2CFB","81052C78 2CBC","81052C80 2D31","81052CF8 2CC1","81052D00 2DD7"],"options":null},"Replace Raw War with\\BACKYARD WEAK":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0E88","8105042E 2D0D","81050430 2D0D","81050432 2D0D","81050434 2D0D","81050436 07FD","8105043A 2CFB","8105043C 2D0D","8105043E 2D0D","81050440 2D0D","81050442 2D0D","810500E8 2D0D","8105010E 2D0D","8105010C 2D0D","81050150 2D0D","81050196 2CFB","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81050136 2CFB","81050400 2D0D","81050402 2D0D","81050404 2D0D","81050406 2D0D","81050408 2D0D","8105040A 2D0D","8105040C 2D0D","8105040E 2D0D","810528F4 2D0D","810528F6 2D0D","81052CE8 2CC9","81052CEC 2D2D"],"options":null},"Replace Raw War with\\BARBEDWIRE ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 2CFB","8105042E 2CFB","81050430 2CFB","81050432 2CFB","81050434 2CFB","81050436 2CFB","81050438 2CFB","8105043A 2CFB","8105043C 2CFB","8105043E 2CFB","81050440 2CFB","81050442 2CFB","810500E8 2CFB","8105010E 2CFB","8105010C 2CFB","81050150 2CFB","81050196 2CFB","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81050136 2CFB","810528F4 DDDD","810528F6 DDDD","81052CE8 2CCA","81052CEC 2CFB","81050400 2CFB","81050402 2CFB","81050404 2CFB","81050406 2CFB","81050408 2CFB","8105040A 2CFB","8105040C 2CFB","8105040E 2CFB"],"options":null},"Replace Raw War with\\BARBEDWIRE ROPES":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050110 04F3","81050112 04F4","81050114 04F5","81050116 04F3","81050118 04F4","8105011A 04F5","8105011C 04F3","8105011E 04F4","81050120 04F5","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81079D90 3F6C","81079D94 3F48","81079DA4 3D10","81079DB8 3F71","81079E6C 3F6C","81079E80 3D10","81079E90 3F47","81079F48 3F6C","81079F4C BF4C","81079F5C 3D10","81079F70 3F71","8107A024 3F6C","8107A028 3F28","8107A038 3D10","8107A04C 3F71","8107A100 3F6C","8107A114 3D10","8107A124 3F23","8107A1DC 3F6C","8107A1E0 BF2A","8107A1F0 3D10","8107A204 3F71","8107A2B8 3F6C","8107A2BC 3F02","8107A2CC 3D10","8107A2E0 3F71","8107A394 3F6C","8107A3A8 3D10","8107A3B8 3F00","8107A470 3F6C","8107A474 BF02","8107A484 3D10","8107A498 3F71","81050144 0569","81050154 07F7","810528F4 0C01","810528F6 0555","81050140 04F4","81050150 2CFB","8107A628 3F60","8107A63C 3D10","8107A64C 3F52","8107A650 BF80","8107A8BC 3F56","8107A8C4 BA00","8107A8D0 3D10","8107A8DC 3C5A","8107A8E0 3F30","8107A8E4 BF80","8107ADE4 3F56","8107ADEC BA00","8107ADF8 3D10","8107AE04 3C5A","8107AE08 3F0E","8107AE0C BF80","8107AB7C 3F00","D115AF56 2EB2","8115AEC6 0017","D115B2AE 2EB2","8115B21E 0017","D115B606 2EB2","8115B570 0017","D115B95E 2EB2","8115B8CE 0017","81052922 FFFF","81052924 FFFF","81052926 FFFF"],"options":null},"Replace Raw War with\\BARBEDWIRE SQUARE\\Part 1":{"note":"Both Parts must be on for this Press the C Left Button to make your opponent bleed,These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050110 04F3","81050112 04F4","81050114 04F5","81050116 04F3","81050118 04F4","8105011A 04F5","8105011C 04F3","8105011E 04F4","81050120 04F5","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81079D90 3F6C","81079D94 3F48","81079DA4 3D10","81079DB8 3F71","81079E6C 3F6C","81079E80 3D10","81079E90 3F47","81079F48 3F6C","81079F4C BF4C","81079F5C 3D10","81079F70 3F71","8107A024 3F6C","8107A028 3F28","8107A038 3D10","8107A04C 3F71","8107A100 3F6C","8107A114 3D10","8107A124 3F23","8107A1DC 3F6C","8107A1E0 BF2A","8107A1F0 3D10","8107A204 3F71","8107A2B8 3F6C","8107A2BC 3F02","8107A2CC 3D10","8107A2E0 3F71","8107A394 3F6C","8107A3A8 3D10","8107A3B8 3F00","8107A470 3F6C","8107A474 BF02","8107A484 3D10","8107A498 3F71","81050144 0569","81050154 07F7","810528F4 0C01","810528F6 0555","81050140 04F4","81050150 2CFB","8107A628 3F60","8107A63C 3D10","8107A64C 3F52","8107A650 BF80","8107A8BC 3F56","8107A8C4 BA00","8107A8D0 3D10","8107A8DC 3C5A","8107A8E0 3F30","8107A8E4 BF80","8107ADE4 3F56","8107ADEC BA00","8107ADF8 3D10","8107AE04 3C5A","8107AE08 3F0E","8107AE0C BF80","8107AB7C 3F00","D115AF56 2EB2","8115AEC6 0017","D115B2AE 2EB2","8115B21E 0017","D115B606 2EB2","8115B570 0017","D115B95E 2EB2","8115B8CE 0017","81052922 FFFF","81052924 FFFF","81052926 FFFF","8116C330 0000","8116C332 000A","8116C334 0000","8116C336 000A","8116C378 42B4"],"options":null},"Replace Raw War with\\BARBEDWIRE SQUARE\\Part 2":{"note":"Both Parts must be on for this Press the C Left Button to make your opponent bleed,These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8116C382 0000","8116C38C FFFF","81052C9C 0672","81052CA4 2CFB","D1064880 0002","8115B21E 002F","D1064886 0002","8115AEC6 002F","8116C3E4 0000","8116C3E6 000C","8116C3E8 0000","8116C3EA 000C","8116C428 C3D4","8116C440 FFFF","81052CB2 2CC2","81052CB4 0805","81052CB6 2CFB","D1064880 2000","8116C3E6 001F","D1064880 2000","8116C3EA 001F","D1064880 2000","81005592 3F81","D1005592 3F81","8116C3E6 001F","D1064880 2000","81005592 3F81","D1005592 3F81","8116C3EA 001F","D1064886 2000","8116C3E6 001F","D1064886 2000","8116C3E6 001F","D1064886 2000","81005592 3F81","D1005592 3F81","8116C3EA 001F","81052CF8 04F4","81052D00 2CFB","8116C3E4 0000","8116C3E6 0015","8116C3E8 0000","8116C3EA 0015","8116C428 0000","8116C42A 0000","8116C42C 43EB","8116C42E 0000","8116C430 C3A6","8116C432 0000","8116C436 0400","8116C43A 0000","8116C43E 0000","8116C440 FFFF","8116C442 0000","810855A8 3F00","81085684 3F00","81085750 3F00","8108583C 3F00","81050100 2CFB","8105010E 2CFB"],"options":null},"Replace Raw War with\\DUDLEY ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 21A7","8105042E 2D0D","81050432 2D0D","81050436 21A7","8105043E 2D0D","81050440 0000","81050442 0000","810500E8 2D0D","8105010C 2CFD","8105010E 2CFD","81050150 2D29","81050152 2CFB","81050400 09EF","81050402 09EF","81050404 0000","81050406 0000","81050408 0000","8105040A 0000","8105040C 09EF","8105040E 09EF","81050188 04F6","8105018A 04F7","8105018C 04F8","8105018E 04F9","81050190 09EF","81050192 0000","81050194 09EF","81050196 2D0D","810528F4 6666","810528F6 6666","81052CE8 2CC2","81052CEC 2D0D","81052D1C 2CD3","81052D1E 2CD4","81052D20 2CD5","81052D22 2CD6","81052D24 2CFD","81052D26 2CFD","81052D28 2CFB","81052D2A 2CFB","81050124 2CFD","81050126 2CFD","81050128 2CFD","8105012A 2CFD","8105012C 2CFD","8105012E 2CFD","81050130 2CFD","81050132 2CFD","81050134 2CFD","81050136 2CFD","81050154 2CFB","811533F8 002E"],"options":null},"Replace Raw War with\\FLAME ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105010E 0EFE","8105010C 0EFE","810528F4 2508","810528F6 2508","81050430 2401","81050430 2401","81050404 2401","81050406 2401","81050408 2401","81050409 2401","8105040A 2401","8105040C 2401","810500E8 2401"],"options":null},"Replace Raw War with\\FLAMING TURNBUCKLES":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8116C334 FFFF","8116C336 001F","8116C374 C350","8116C376 FFF3","8116C378 4377","8116C37A 2689","8116C37C C380","8116C37E 0406","8116C382 0D14","8116C386 0FCC","8116C38A 07DC","8116C38C FFFF","8116C38E FDE3","8116C3E8 FFFF","8116C3EA 001F","8116C428 C360","8116C42C 4370","8116C430 4376","8116C436 0D14","8116C43A 0FCC","8116C43E 07DC","8116C442 F9C4","8116C49C FFFF","8116C49E 001F","8116C4DC 4360","8116C4E0 4370","8116C4E4 4380","8116C4EA 0CD0","8116C4EE 0136","8116C4F2 04EE","8116C4F6 F601","8116C550 FFFF","8116C552 001F","8116C590 434F","8116C594 4370","8116C598 C36C","8116C59E 0E70","8116C5A2 0F58","8116C5A6 0814","8116C5AA F1E6"],"options":null},"Replace Raw War with\\GREENWICH STREET ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050430 2DC5","81050436 0000","81050438 0000","8105043A 0000","8105043E 0000","810504E8 0EFE","8105010E 2DC5","8105010C 2DC5","81050196 2CFD","81050136 0FB6","81050134 0FC6","81050132 0FB6","81050130 0FC6","8105012E 0FB6","8105012C 0FC6","8105012A 0FB6","81050128 0FC6","81050126 0FB6","81050124 0FC6","81050440 0000","81050442 0000","50002C02 0000","81050378 0000","50002C02 0000","810502EC 0000","50001402 0000","81050290 0000","50000902 0000","81050262 0000","50000402 0000","810501CE 0000","50001002 0000","810501B8 0000","50000402 0000","810501E0 0000","8105042C 2D0D","81050430 0000","81050150 24F0"],"options":null},"Replace Raw War with\\HHH ARNEA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105040E 24EF","8105040C 24EF","8105040A 24EF","81050408 24EF","81050406 24EF","81050404 24EF","81050402 24EF","81050400 24EF","81050436 24E9","81050440 24E9","81050442 24E9","8105043E 24EF","8105042E 24EF","8105043C 24EF","8105042C 24E9","8105010E 24E9","8105010C 24E9","81050196 24E9","8105042E 24EF","81050432 24EF","810500F8 24EF","810500FA 24EF","810500FC 24EF","810500FC 24EF","81050100 24EF","81050100 24EF","81052CE8 2CCA","81052CEC 24EF","81050150 24E9","81050152 24E9","81050154 24E9","810528F4 24E9","810528F6 24E9"],"options":null},"Replace Raw War with\\HOSPITAL ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0949","8105042E 283F","81050428 0949","81050430 0949","81050430 0949","81050436 096B","81050438 0993","8105043A 096B","8105043E 283F","81050440 283F","81050442 283F","810504E8 0949","81050150 283F","81050196 283F","81050400 283F","81050402 283F","81050404 283F","81050406 283F","81050408 283F","8105040A 283F","8105040C 283F","8105040E 283F","810500F8 283F","810500FA 283F","810500FC 283F","810500FE 283F","81050100 283F","81050100 283F","81052CE8 2CCA","81052CEC 283F","8105010E 283F","8105010C 283F","81050124 0949","81050126 0949","81050128 0949","8105012A 0949","8105012C 0949","8105012E 0949","81050130 0949","81050132 0949","81050134 0949","81050136 0949","810500E8 0949","810528F4 0000","81052CE0 2CC9"],"options":null},"Replace Raw War with\\KANE ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0A61","8105042E 0A61","81050428 2B6C","81050430 2B6C","81050430 2B6C","81050436 2B57","81050438 2B57","8105043A 2B57","8105043E 0A61","81050440 2B57","81050442 2B57","810500E8 1B1E","8105010E 2D37","8105010C 209F","81050194 0955","81050196 2B57","81050400 2699","81050402 2699","81050404 2699","81050406 2699","81050408 2699","8105040A 2699","8105040C 2699","8105040E 2699"],"options":null},"Replace Raw War with\\REMOVE RING":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050150 0000","81050152 0000","81050154 0000","810500E8 0000","810855A8 3F00","81085684 3F00","81085750 3F00","8108583C 3F00","81079C08 3F00","81079C14 3F00","81079B10 3F00"],"options":null},"Replace Raw War with\\SHIMMER ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 1932","8105042E 1932","81050430 1932","81050434 1932","81050432 1932","81050436 1932","81050438 1932","8105043A 1932","8105043E 1932","81050440 1932","81050442 1932","81050150 1932","81050152 1932","81050154 1932","81050190 1932","81050192 1932","81050194 1932","81050196 1932","81050124 1932","81050126 1932","81050128 1932","8105012A 1932","8105012C 1932","8105012E 1932","81050130 1932","81050132 1932","81050134 1932","81050136 1932","810500E8 1932","8105010E 1932","8105010C 1932"],"options":null},"Replace Raw War with\\SPACE SHIP ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 094D","8105042E 0953","81050430 0953","81050432 0F0E","81050434 0953","81050436 0F0E","81050438 0899","8105043C 0953","8105043E 0899","81050440 0963","81050442 0963","81050400 0953","81050402 0953","81050404 0953","81050406 0953","81050408 0953","8105040A 0953","8105040C 0953","8105040E 0953","810500E8 0A75","810528F4 7223","810528F6 0119","81050150 0963","81050152 0963","81050190 0953","81050192 0953","81050194 0953","81050196 0963","8105010E 0F0E","8105010C 0F0E","81050124 0F10","81050126 0F10","81050128 0F10","8105012A 0F10","8105012C 0F10","8105012E 0F10","81050130 0F10","81050132 0F10","81050134 0F10","81050136 0F10","810500F8 0963","810500FA 0963","810500FC 0963","810500FE 0963","81050100 0963","81050102 0963","81052CE8 2CCA","81052CEC 0963"],"options":null},"Replace Raw War with\\TOKYO DOME":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["810528F4 7223","810528F6 0119","81050124 0100","81050126 0100","81050128 0100","8105012A 0100","8105012C 0100","8105012E 0100","81050130 0100","81050132 0100","81050134 0100","81050136 0100","8105010E 0999","81050400 03A5","81050402 0385","81050404 0385","81050406 0385","81050408 0385","8105040A 03A5","8105040C 03A5","8105040E 043F","81050430 043F","8105042C 03A5","81050430 21A5","81050432 0100","81050434 0000","81050436 2CFB","81050438 0899","8105043C 03AF","81050440 03AF","81050442 03A5","810500E8 24C3","81050444 0100","81050190 09EF","81050192 0000","81050194 09EF","81050196 2CFD"],"options":null},"Tables\\IN RING TABLE\\Part 1":{"note":"To Make the Table look broken Keep the Z Button press down, To make player stand on the Table, Stand next to it \u0026 Keep C-Right Pressed Down.Put all Parts on Together for this Cheat to work","data":["81052CF0 06E1","81052CF4 09F1","81052CF8 06E2","81052D00 09F1","81052D0C 06E3","81052D0E 06E4","81052D10 09EF","81052D12 09EF","81052D14 06E5","81052D16 06E6","81052D18 09EF","81052D1A 09EF","D1064880 0001","8115AFB0 432C","D1064880 0001","8115B308 432C","D1064880 2000","8115AFB0 42B4","D1064880 2000","8115B308 42B4","8116C330 0000","8116C332 0014","8116C334 0000","8116C336 0014","8116C374 4210","8116C376 C0B1","8116C378 432F","8116C37A 51DC","8116C37C 4210","8116C37E 92F1","8116C382 0800","8116C386 05A0","8116C38A 0800","8116C38C FFFF","8116C38E F3BC","8116C3E4 0000","8116C3E6 0015","8116C3E8 0000","8116C3EA 0015","8116C428 4210","8116C42A C0B1","8116C42C 432F","8116C42E 51DC","8116C430 4210","8116C432 92F1","8116C436 0800","8116C43A 05A0","8116C43E 0800","8116C440 FFFF","8116C442 F3BC","D1064880 2000","8116C378 42E0"],"options":null},"Tables\\IN RING TABLE\\Part 2":{"note":"To Make the Table look broken Keep the Z Button press down, To make player stand on the Table, Stand next to it \u0026 Keep C-Right Pressed Down.Put all Parts on Together for this Cheat to work","data":["D1064880 2000","8116C382 07E0","D1064880 2000","8116C38A 0680","D1064880 2000","8116C42C 42E0","D1064880 2000","8116C436 0820","D1064880 2000","8116C43E 0980","8116C498 0000","8116C49A 0017","8116C49C 0000","8116C49E 0017","8116C4DC 4210","8116C4DE C0B1","8116C4E0 432A","8116C4E2 51DC","8116C4E4 4210","8116C4E6 92F1","8116C4EA 0800","8116C4EE 05A0","8116C4F2 0800","8116C4F4 FFFF","8116C4F6 F3BC","8116C54C 0000","8116C54E 0018","8116C550 0000","8116C552 0018","8116C590 4210","8116C592 C0B1","8116C594 432A","8116C596 51DC","8116C598 4210","8116C59A 92F1","8116C59E 0800","8116C5A2 05A0","8116C5A6 0800","8116C5A8 FFFF","8116C5AA F3BC","D1064880 2000","8116C4E0 42E0","D1064880 2000","8116C4EA 07E0","D1064880 2000","8116C4F2 0680","D1064880 2000","8116C594 42E0","D1064880 2000","8116C59E 0820","D1064880 2000","8116C5A6 0980"],"options":null},"Tables\\MOVABLE TABLES\\Part 1":{"note":"You must use both parts for this cheat to work","data":["81052C24 06E1","81052C26 06E3","81052C2C 09F1","81052C2E 09EF","81052C30 06E2","81052C32 06E5","81052C38 09F1","81052C3A 09EF","81052C48 06E4","81052C4A 06E6","81052C50 09EF","81052C52 09EF","8116C3E4 0000","8116C3E6 0001","8116C3E8 0000","8116C3EA 0001","8116C498 0000","8116C49A 0003","8116C49C 0000","8116C49E 0003","8116C330 0000","8116C332 0000","8116C334 0000","8116C336 0000","D116C556 0000","8116C33A 0000","D116C33A 0000","8116C3EE 0000","D116C3EE 0000","8116C4A2 0000","D116C556 0001","8116C33A 0001","D116C33A 0001","8116C3EE 0001","D116C3EE 0001","8116C4A2 0001","D116C556 0002","8116C33A 0002","D116C33A 0002","8116C3EE 0002","D116C3EE 0002","8116C4A2 0002","D116C556 0003","8116C33A 0003","D116C33A 0003","8116C3EE 0003","D116C3EE 0003","8116C4A2 0003","D116C556 FFFF","8116C33A FFFF","D116C33A FFFF","8116C3EE FFFF","D116C3EE FFFF","8116C4A2 FFFF","D216C556 FFFF","81079B10 3F80","D1064886 2000","81079B10 3F81","D106488C 2000","81079B10 3F81","D1064892 2000","81079B10 3F81"],"options":null},"Tables\\MOVABLE TABLES\\Part 2":{"note":"You must use both parts for this cheat to work","data":["D116C33A FFFF","8116C382 0000","D116C382 0000","8116C386 0000","D116C386 0000","8116C38A 0000","D116C38A 0000","8116C38E 0000","D116C38E 0000","8116C436 0000","D116C436 0000","8116C43A 0000","D116C43A 0000","8116C43E 0000","D116C43E 0000","8116C442 0000","D116C442 0000","8116C4EA 0000","D116C4EA 0000","8116C4EE 0000","D116C4EE 0000","8116C4F2 0000","D116C4F2 0000","8116C4F6 0000","D116C594 42B4","D116C556 FFFF","8116C378 4335","D116C378 4335","8116C42C 4335","D116C42C 4335","8116C4E0 4335","D116C594 3DC7","D116C556 FFFF","8116C378 42B0","D116C378 42B0","8116C42C 42B0","D116C42C 42B0","8116C4E0 42B0","D1064880 2000","81079B10 3F81","D1079B10 3F81","D116C594 42B4","D116C556 FFFF","8116C378 42F0","D116C378 42F0","8116C42C 42F0","D116C42C 42F0","8116C4E0 42F0","D1079B10 3F81","8116C38A 0F00","D116C38A 0F00","8116C43E 0100","D116C594 3C93","8116C378 42B0","81052D18 0000","81052D1A 0000","D116C54C 0000","8116C54E 0018","D116C550 0000","8116C552 0018"],"options":null},"Tables\\Sabu Table":{"note":"Breakable/Fixable/Rebreakable/Refixable press Z to break, C-right + Cdown to fix","data":["8116C49A 000C","8116C49E 000C","8116C4DC 43CC","8116C4E0 42E6","8116C4E4 C2C5","8116C4EE 0800","8116C602 000C","8116C606 000C","8116C648 42E6","8116C644 43CC","8116C64C C314","81052C54 06E3","81052C5C 09EF","8116C6F8 43CC","8116C6FC 42F0","8116C700 C2F1","8116C70A 0400","8116C428 43CC","8116C430 C2D0","8116C42C 42F0","8116C43A 0C00","8116C6B6 0004","8116C6BA 0004","8116C3E6 0004","8116C3EA 0004","D1064880 2000","81005592 3F81","D1005592 3F81","8116C4EA 0F00","D1005592 3F81","8116C652 0100","D1005592 3F81","8116C4E0 4240","D1005592 3F81","8116C648 4240","D1064880 0005","81005CD4 3F83","D1005CD4 3F83","8116C4EA 0000","D1005CD4 3F83","8116C652 0000","D1005CD4 3F83","8116C4E0 42E6","D1005CD4 3F83","8116C648 42E6","D1005CD4 3F83","D1064880 2000","81005CD4 0000"],"options":null},"Ultimate Code\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF5E 0064"],"options":null},"Ultimate Code\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2B6 0064"],"options":null},"Ultimate Code\\Player 3":{"note":"","data":["D015A5D1 0015","8015B60E 0064"],"options":null},"Ultimate Code\\Player 4":{"note":"","data":["D015A5D1 0015","8015B964 0064"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B490 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B490 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B4A4 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B47C 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8106B4A4 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B47C 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B468 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B468 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B510 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B510 3DFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B564 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B53C 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B564 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B53C 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B528 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B528 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B610 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B610 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B624 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5FC 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B624 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5FC 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5E8 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5E8 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6D0 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6D0 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6E4 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6BC 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8006B6E4 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6BC 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6A8 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6A8 3FFF"],"options":null},"Z LADDER":{"note":"Press Z for the ladder to appear, sometimes there is an invisable ladder","data":["D1064880 2000","8116C768 0000","D1064880 2000","8116C76A 0019","D1064880 2000","8116C76C 0000","D1064880 2000","8116C76E 0019","D1064880 2000","8116C788 8104"],"options":null}},"4E69B487-FE18E290-C:45":{"Team 1 Scores 150 pts":{"note":"","data":["800A6689 0096"],"options":null},"Team 2 Scores 150 pts":{"note":"","data":["800A668B 0096"],"options":null}},"4EAA3D0E-74757C24-C:4A":{"Don't Hurt Mario\\Monsters":{"note":"","data":["A0339E27 0001"],"options":null},"Funny Mario Options\\Mario's Cap\\Off \u0026 in His Hand":{"note":"Here you can Choose Options with Mario with His Cap off \u0026 in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["80339E07 00??"],"options":{"Cap In Hand":"20","Flying Mario Cap In Hand":"28","Invisible Mario Cap In Hand":"22","Invisible Metal Mario Cap In Hand":"26","Metal Mario Cap In Hand":"24"}},"Funny Mario Options\\Mario's Cap\\On \u0026 An Extra in His Hand":{"note":"Here you can Choose Options with Mario with His Cap on \u0026 An Extra in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["80339E07 00??"],"options":{"Cap In Hand":"30","Flying Mario Cap In Hand":"38","Invisible Mario Cap In Hand":"32","Invisible Metal Mario Cap In Hand":"36","Metal Mario Cap In Hand":"34"}},"Have All\\175 Stars":{"note":"I have managed to put a have 175 Stars Option in for you,once the Code is activated, you will see it as a new option in Save Slot A.","data":["80207B0B 00FF","50000D02 0000","81207B0C FFFF"],"options":null},"Have All\\Maxed Out Coin Records For All Levels":{"note":"","data":["80207B25 00FF","81207B26 FFFF","81207B28 FFFF","81207B2A FFFF","81207B2C FFFF","81207B2E FFFF","81207B30 FFFF","81207B32 FFFF"],"options":null},"Have\\Debug Mode":{"note":"","data":["8032C658 00??"],"options":{"Off":"00","On":"01"}},"Have\\Level Select":{"note":"","data":["8032C64C 0001"],"options":null},"Infinite\\Energy \u0026 Breath":{"note":"","data":["80339EAE 0008"],"options":null},"Infinite\\Lives":{"note":"","data":["80339EAD 0064"],"options":null},"Mario's Cap\\Off Options":{"note":"Here you can Choose Options with Mario without His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["80339E07 00??"],"options":{"Flying Mario":"08","Invisible Flying Mario":"0A","Invisible Mario":"02","Invisible Metal Flying Mario":"0F","Mario No Cap":"01","Metal Flying Mario":"0D","Metal Mario":"04"}},"Mario's Cap\\On Options":{"note":"Here you can Choose Options with Mario with His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["80339E07 00??"],"options":{"Flying Mario":"19","Invisible Mario":"12","Invisible Metal Mario":"16","Metal Mario":"15"}},"Press GS for 255 Coins":{"note":"","data":["89339EA8 00FF"],"options":null},"Press L To Levitate":{"note":"Press L to levitate \u0026 Let go to land","data":["D0339C31 0020","81339E4C 4220","D0339E4D 0020","81339E0C 0300","D0339E4D 0020","81339E0E 0880"],"options":null}},"4F1E88F7-4A5A3F96-C:4A":{"Max HP":{"note":"","data":["812D71F8 03E7"],"options":null},"Max MP":{"note":"","data":["812D71FA 03E7"],"options":null},"Max Money":{"note":"","data":["811A70E9 0001","811A70EA 869F"],"options":null}},"4F48B0FD-8E7173F4-C:45":{"All Levels\\Infinite\\Energy":{"note":"","data":["800D5A9B 00FF"],"options":null},"All Levels\\Infinite\\Max Credits":{"note":"","data":["80075DDC 00FF"],"options":null},"All Levels\\Infinite\\Time":{"note":"","data":["800D5A97 0063"],"options":null},"All Levels\\Unlock All\\Levels - Options Menu":{"note":"","data":["80075DD6 FFFF","80075DD7 FFFF"],"options":null},"All Levels\\Unlock All\\Option Menu Items":{"note":"","data":["80075DD8 FFFF","80075DD9 FFFF"],"options":null},"Level\\0-0\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time and only use for that specific level Cheat","data":["8010BB0C 0000"],"options":null},"Level\\0-0\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8010BB2B 0001"],"options":null},"Level\\1-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801657DC 0000"],"options":null},"Level\\1-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801657FB 0001"],"options":null},"Level\\1-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCF9C 0000"],"options":null},"Level\\1-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCFBB 0001"],"options":null},"Level\\1-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801126EC 0000"],"options":null},"Level\\1-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8011270B 0001"],"options":null},"Level\\2-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BD29C 0000"],"options":null},"Level\\2-1\\Invincible":{"note":"","data":["801BD2BB 0001"],"options":null},"Level\\2-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B911C 0000"],"options":null},"Level\\2-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B913B 0001"],"options":null},"Level\\2-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7CEC 0000"],"options":null},"Level\\2-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7D0B 0001"],"options":null},"Level\\3-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801588EC 0000"],"options":null},"Level\\3-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8015890B 0001"],"options":null},"Level\\3-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B936C 0000"],"options":null},"Level\\3-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B938B 0001"],"options":null},"Level\\3-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801013CC 0000"],"options":null},"Level\\3-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["81100E08 C350"],"options":null}},"4F8AFC3A-F7912DF2-C:50":{"Have All Races":{"note":"","data":["81088756 FFFF"],"options":null},"Have All Tracks":{"note":"","data":["8108875A FFFF"],"options":null},"Infinite Credits":{"note":"","data":["8008D659 0005"],"options":null},"Unlock All Characters \u0026 Extra Cheats":{"note":"","data":["81088750 FFFF","81088752 FFFF"],"options":null}},"4FF5976F-ACF559D8-C:50":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2712 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE02F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802026F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE255 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FCB85 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFF6D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802027A5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DA0BD 0001"],"options":null}},"5001CF4F-F30CB3BD-C:45":{"Have All\\Characters Available":{"note":"","data":["810653C8 FFFF"],"options":null},"Have All\\Courts Available":{"note":"","data":["810653CC FFFF"],"options":null},"Press C-Down Easy Win Ring Shot - Time,Balls,Points":{"note":"Do Not use with Game Option","data":["D0066985 0004","80153527 0082","D0066985 0004","80153523 0082"],"options":null},"Press C-Down For Easy Win Ring Shot - Game":{"note":"Do Not use with Time,Balls,Points Option","data":["D0066985 0004","8015350B 0082"],"options":null},"Score\\Player 1":{"note":"","data":["8015344A 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}},"Score\\Player 2":{"note":"","data":["8015344B 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}}},"503EA760-E1300E96-C:50":{"Access Options\\All Car Upgrades":{"note":"","data":["50000704 0000","801505DF 0003"],"options":null},"Access Options\\All Tracks":{"note":"","data":["80150602 001F","80150603 00FF"],"options":null},"Always Place 1st":{"note":"","data":["801502CB 0001"],"options":null},"Unlimited Time":{"note":"","data":["801509ED 0045"],"options":null}},"5129B6DA-9DEF3C8C-C:45":{"Dig-Dug\\Infinite\\Credits":{"note":"","data":["800FE67E 0063"],"options":null},"Dig-Dug\\Infinite\\Lives\\Player 1":{"note":"","data":["800FE709 0002"],"options":null},"Dig-Dug\\Infinite\\Lives\\Player 2":{"note":"","data":["800FE76B 0004"],"options":null},"Dig-Dug\\Score\\Player 1":{"note":"","data":["810FE704 9999"],"options":null},"Dig-Dug\\Score\\Player 2":{"note":"","data":["810FE768 9999"],"options":null},"Galaga\\Infinite\\Credits":{"note":"","data":["800D76A4 0063"],"options":null},"Galaga\\Infinite\\Lives\\Both Players":{"note":"","data":["800D7510 0002"],"options":null},"Galaxian\\Infinite\\Credits":{"note":"","data":["800CD3D0 0063"],"options":null},"Galaxian\\Infinite\\Lives":{"note":"","data":["800CD3AD 0003"],"options":null},"Galaxian\\Score\\Player 1":{"note":"","data":["810BCE7C 9999"],"options":null},"Galaxian\\Score\\Player 2":{"note":"","data":["810BC780 9999"],"options":null},"Ms Pac-Man\\Eat All Ghosts All The Time":{"note":"","data":["810BC100 0000","810BC102 0000","810BC12C 0000","810BC12E 0000","810BC158 0000","810BC15A 0000","810BC184 0000","810BC186 0000"],"options":null},"Ms Pac-Man\\High Score Modifier":{"note":"","data":["810BC1F8 9999"],"options":null},"Ms Pac-Man\\Infinite\\Credits":{"note":"","data":["800BBE4B 0063"],"options":null},"Ms Pac-Man\\Infinite\\Lives\\Player 2":{"note":"","data":["800BBE27 0004"],"options":null},"Ms Pac-Man\\Infinite\\Lives\\Player P1":{"note":"","data":["800BBE23 0004"],"options":null},"Ms Pac-Man\\Score Modifier\\Player 1":{"note":"","data":["810BC7E8 9999"],"options":null},"Ms Pac-Man\\Score\\Player 2":{"note":"","data":["810BC7EC 9999"],"options":null},"Pac-Man\\Eat All Ghosts All The Time":{"note":"","data":["810A8760 0000","810A8762 0000","810A878C 0000","810A878E 0000","810A87B8 0000","810A87BA 0000","810A87E4 0000","810A87E6 0000"],"options":null},"Pac-Man\\High Score":{"note":"","data":["810A86F8 9999"],"options":null},"Pac-Man\\Infinite\\Credits":{"note":"","data":["800A8817 0063"],"options":null},"Pac-Man\\Infinite\\Lives\\Player 1":{"note":"","data":["800BBE23 0004"],"options":null},"Pac-Man\\Infinite\\Lives\\Player 2":{"note":"","data":["800BBE27 0004"],"options":null},"Pac-Man\\Score\\Player 1":{"note":"","data":["810A86F0 9999"],"options":null},"Pac-Man\\Score\\Player 2":{"note":"","data":["810A86F4 9999"],"options":null},"Pole Position\\Infinite Time":{"note":"","data":["8010A243 0063"],"options":null},"Pole Position\\Score":{"note":"","data":["81107BF8 9999"],"options":null}},"514B6900-B4B19881-C:4A":{"Beta Bottles Revenge Mode":{"note":"Bottles Revenge is a Beta mode from Banjo Tooie that the RWP team recently uncovered after an extraordinary amount of effort. Bottles the Spirit transforms into Bottles the Devil and posses enemies nearby and allows a second player hooked up to Pad 2 to play as that Posses character to try to foil Banjos Plans. As player one goes about its business, player two uses every enemy nearby to try to nab Banjo and take away some life. This mode is incredible, and you can control almost every enemy in the game: slot machines, flying creatures, uggers, zubbas...and this is just the beginning. (Congrats Rare Witch Project)","data":["801255C2 0001","80080881 0002"],"options":null},"Infinite\\Air":{"note":"","data":["80125222 42C8"],"options":null},"Infinite\\Energy\\Banjo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","8011591F 000A","80115920 000A"],"options":null},"Infinite\\Energy\\Banjo and Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","81115A04 0A0A"],"options":null},"Infinite\\Energy\\Bee":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","80115913 000A","80115914 000A"],"options":null},"Infinite\\Energy\\Detonator":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","8111592E 0A0A"],"options":null},"Infinite\\Energy\\Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","81115922 0A0A"],"options":null},"Infinite\\Energy\\Mumbo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","81115928 0A0A"],"options":null},"Infinite\\Energy\\Snowball":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","80115907 0005"],"options":null},"Infinite\\Energy\\Stony":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","80115919 000A","8011591A 000A"],"options":null},"Infinite\\Energy\\Submarine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","80115925 000A","80115926 000A"],"options":null},"Infinite\\Energy\\T-Rex Baby":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","8011593F 000A","80115940 000A"],"options":null},"Infinite\\Energy\\Washing Machine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","81115916 0A0A"],"options":null},"Instant Warp\\Options\\Cauldron Keep":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"5D Cauldron Keep":"01","5E The gatehouse":"01","5F Tower of Tragedy Quiz":"01","60 Gun chamber":"01","6A Gun room still":"01","7B Crazy Castle Stockade balloon burst multi":"01","7C Crazy Castle Stockade Jump the hoops multi":"01","7D Grunty Industries packing game":"01","80 Colosseum kickball arena":"01","86 Dodgems":"01"}},"Instant Warp\\Options\\Cloud Cuckoo Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"36 Cloud Cuckoo Land 1":"01","37 Inside the trashcan":"01","38 Inside the cheesewedge":"01","39 Zubba's nest":"01","3A Central cavern":"01","3D Inside the pot o gold":"01","3E Mumbo's skull":"01","3F Mingy jongo's skull":"01","40 Humba wumba's wigwam":"01","61 Cloud Cuckoo Land 2":"01","85 Trash can mini":"01","88 Zubba's nest multi":"01"}},"Instant Warp\\Options\\Glitter Gulch Mine":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"26 Water supply pipe":"01","63 Ordnance Storage entrance":"01","64 Ordnance Storage game":"01","65 Ordnance Storage game Multi":"01","6F Testing":"01","70 Testing":"01","71 Mumbo's skull":"01","C7 Mine":"00","CA Fuel depot":"00","CB Crushing shed":"00","CC Flooded caves":"00","CD Water storage":"00","CE Waterfall cavern":"00","CF Power hut basement":"00","D0 Chuffy's cab":"00","D1 Inside chuffy's boiler boss":"00","D2 Gloomy caverns":"00","D3 Generator caverns":"00","D4 Power hut":"00","D5 Wumba's wigwam":"00","D7 Train station":"00","D8 Prospectors hut":"00","D9 Mumbo's hut":"00","DA Toxic gas cave":"00","DB Canary cave":"00","DC Ordnance storage":"00","E9 Humba":"00"}},"Instant Warp\\Options\\Grunty Industries":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"00 Outside":"01","01 Inside":"01","02 Train station":"01","03 Workers quarters":"01","04 Trash compactor":"01","05 Elevator shaft":"01","06 Floor 2":"01","07 Floor 2 \"electromagnet chamber\"":"01","08 Floor 3":"01","09 Floor 3 \"boiler plant\"":"01","0A Floor 3 \"packing room\"":"01","0B Floor 4":"01","0C Floor 4 \"cable room\"":"01","0D Floor 4 \"quality control\"":"01","0E Floor 5":"01","0F Basement":"01","10 Basement \"repair depot":"01","11 Basement \"waste disposal\"":"01","25 Water supply pipe":"01","62 Floor 4 \"clinkers cavern\"":"01","72 Mumbo's skull":"01","87 Sewer entrance":"01"}},"Instant Warp\\Options\\Hailfire Peaks":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"27 Lava side":"01","28 Icy side":"01","29 Lava train station":"01","2A Ice train station":"01","2B Chilli billi":"01","2C Chilly willy":"01","2D Colosseum kickball stadium lobby":"01","31 Boggy's igloo":"01","32 Icicle grotto":"01","33 Inside the volcano":"01","68 Icy side still":"01"}},"Instant Warp\\Options\\Isle O Hags":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"4F Wooded Hollow":"01","50 Heggy's egg shed":"01","51 Jiggywiggy's temple":"01","52 Plateau":"01","53 Plateau \"Honey B's Hive\"":"01","54 Pine Grove":"01","55 Cliff top":"01","56 Cliff top Mumbo's skull":"01","5A wasteland":"01","5B inside another digger tunnel":"01","5C Quagmire":"01"}},"Instant Warp\\Options\\Jinjo Village":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"42 Jinjo Village":"01","43 Bottles house":"01","44 King Jingalings throne room":"01","45 Green Jinjo's House":"01","46 Black Jinjo's House":"01","47 Yellow Jinjo's House":"01","48 Blue Jinjo's House":"01","4A Brown Jinjo's House":"01","4B Orange Jinjo's House":"01","4C Purple Jinjo's House":"01","4D Red Jinjo's House":"01","4E White Jinjo's House":"01"}},"Instant Warp\\Options\\Jolly Roger's Lagoon":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"81 sea bottom cavern":"01","82 submarine multi":"01","A7 Jolly Roger's Lagoon":"01","A8 Atlantis":"01","A9 Seabottom":"01","ED Jolly's":"00","EE Pawno's emporium":"00","EF mumbo's skull":"00","F4 Ancient Swimming Baths":"00","F6 Electric Eels lair":"00","F7 Seaweed Sanctum":"00","F8 Inside the big fish":"00","FA temple of the fishes":"00","FF Blubber's wave race hire":"00"}},"Instant Warp\\Options\\Mayahem Temple":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"66 Multi":"01","67 Still":"01","77 Targitzan's Slighty Sacred Temple":"01","78 Inside Targitzans Temple":"01","79 Targitzan Temple Lobby":"01","7A Targitzan's Temple Boss":"01","7F Mayan Kickball Arena":"01","B6 Humba's Wigwam":"00","B7 Mumbo's skull":"00","B8 The Temple":"00","B9 Prison Compound":"00","BC Code chamber":"00","C4 Jade Snake Grove":"00","C5 Treasure Chamber":"00","C6 Kickball Arena":"00","C8 Kickball Arena":"00","C9 Kickball Arena":"00"}},"Instant Warp\\Options\\Not sure":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"21 Inside Chuffy's wagon":"01","34 Mumbo's Skull":"01","35 Humba Wumba's wigwam 1":"01","41 Inside the digger tunnel":"01","43 Bottles house":"01","57 Humba Wumba's wigwam 2":"01","69 Bottles house still":"01","8A HAG Inside":"01","9A HAG1 Final Boss":"01","9B Jingalings Zombified Palace":"01","A6 Smuggler cavern":"01","F9 Mr Patch":"00","FC Lord woo fak fak":"00"}},"Instant Warp\\Options\\Spiral Mountain":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"73 Banjo's house":"01","AD Grunty's Old Lair":"00","AE Behind The Waterfall":"00","AF Top Of Castle":"00"}},"Instant Warp\\Options\\Terrydacty Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"12 Terrydacty Land":"01","13 Terry's nest":"01","14 Train station":"01","15 Oogle boogles cave":"01","16 Inside the mountain":"01","17 River passage":"01","18 Styracosaurus family cave":"01","19 Unga bunga's cave":"01","1A Stomping plains":"01","1B Bonfire caverns":"01","1E Humba's Wigwam":"01","23 Inside chompa's belly":"01","83 Chompa's belly multi":"01"}},"Instant Warp\\Options\\Witchy World":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"24 Saucer of Peril":"01","3B Crazy castle stockade \"sop\"":"01","3C Star spinner \"sop\"":"01","76 Mumbo's skull":"01","D6 Witcy World":"00","DD Dodgem dome lobby":"00","DE Dodgem challenge \"1 vs 1\"":"00","DF Dodgem challenge \"2 vs 1\"":"00","E0 Dodgem challenge \"3 vs 1\"":"00","E1 Crazy castle stockade":"00","E2 Crazy castle lobby":"00","E3 Crazy castle pump room":"00","E4 Balloon burst game":"00","E5 Hoop hurry game":"00","E6 Star spinner":"00","E7 The inferno":"00","EA Cave of horrors":"00","EB Haunted cavern":"00","EC Train station":"00"}},"Multi-Player\\Everyone Infinite All Eggs Multiplayer":{"note":"All blaster modes specifically.[ Thanks retroben, awesome work on this!]","data":["810E5F38 0C04","810E5F3A 5A80","81116A00 3C08","81116A02 8008","81116A04 8108","81116A06 3970","81116A08 1100","81116A0A 0010","81116A0C 0000","81116A0E 0000","81116A10 3C08","81116A12 8008","81116A14 8D08","81116A16 3970","81116A18 0008","81116A1A 4200","81116A1C 0008","81116A1E 4202","81116A20 0008","81116A22 4080","81116A24 3C04","81116A26 8000","81116A28 0104","81116A2A 4020","81116A2C 3C04","81116A2E 2406","81116A30 2484","81116A32 0064","81116A34 AD04","81116A36 31C4","81116A38 3C04","81116A3A 2408","81116A3C 2484","81116A3E FFFE","81116A40 AD04","81116A42 31CC","81116A44 3C04","81116A46 8013","81116A48 8C84","81116A4A CF94","81116A4C 0802","81116A4E 1DFE","81116A50 0000","81116A52 0000"],"options":null},"Multi-Player\\Infinite Health\\Player 1":{"note":"","data":["8012F701 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 2":{"note":"","data":["8012F705 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 3":{"note":"","data":["8012F709 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 4":{"note":"","data":["8012F70D 0064"],"options":null},"Play As":{"note":"To use this cheat, put the cheat on, then press L as you walk through a door to become that chosen character","data":["D0080845 0020","801211FC 00??"],"options":{"Banjo":"0A","Banjo and Kazooie":"01","Bee":"06","Detonator":"0F","Golden Goliath":"0E","Kazooie":"0B","Mumbo":"0D","Snowball":"02","Stony":"08","Submarine":"0C","T-rex baby":"12","T-rex daddy":"13","Truck":"10","Washing machine":"07"}}},"5168D520-CA5FCD0D-C:4A":{"Have Zero Time all Levels":{"note":"","data":["50000B04 0000","81386B44 3000"],"options":null},"Infinite\\Air":{"note":"","data":["81386ACE 0E10"],"options":null},"Infinite\\Always Have All Jinjos":{"note":"","data":["80386ABB 00FF"],"options":null},"Infinite\\Eggs":{"note":"","data":["80386AA7 00FF"],"options":null},"Infinite\\Gold Feathers":{"note":"","data":["80386AB3 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["80386AC3 0008","80386AC7 0008"],"options":null},"Infinite\\Jiggies":{"note":"","data":["80386B0B 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["80386ACB 00FF"],"options":null},"Infinite\\Mumbo Tokens":{"note":"","data":["80386B07 00FF"],"options":null},"Infinite\\Notes":{"note":"Just collect one Note to Have 255 Notes in all Worlds.","data":["80386B32 00FF","80386AA2 0001"],"options":null},"Infinite\\Red Feathers":{"note":"","data":["80386AAF 00FF"],"options":null}},"519EA4E1-EB7584E8-C:4A":{"Have All\\Boards":{"note":"","data":["8108C9C4 0003","8108C9C6 FFFF"],"options":null},"Have All\\Characters":{"note":"","data":["8108C9B8 07FF"],"options":null},"Have All\\Difficulties":{"note":"","data":["8108C9B0 0700"],"options":null},"Have All\\Tracks":{"note":"","data":["8108C9BC BFFE"],"options":null},"Low Timer":{"note":"","data":["8008C8A4 0000","8008C8A6 0000"],"options":null},"Max\\50000 Stunt Points":{"note":"","data":["8108C978 C350"],"options":null},"exhalatio audio hack":{"note":"","data":["81052760 AD99"],"options":null}},"51D29418-D5B46AE3-C:50":{"Access All In-Game Cheats":{"note":"","data":["81118E9A 0001"],"options":null},"Activate All In-Game Cheats":{"note":"","data":["50000D02 0000","81118E82 0101"],"options":null},"All Silver \u0026 Gold Coins (Circuit - Using C/P)":{"note":"Circuit Mode - Using Controller Pack","data":["50000660 0000","811C542C FFFF"],"options":null},"All Silver \u0026 Gold Coins (Single Race + Practice Mode)":{"note":"Single, Practice \u0026 Circuit Mode","data":["50000660 0000","8116375C FFFF"],"options":null},"All Silver \u0026 Gold Coins (Stunt Mode)":{"note":"Stunt Mode","data":["50000440 0000","81163BBC FFFF"],"options":null},"Always 1st":{"note":"","data":["80177D4E 0000"],"options":null},"Easy Difficulty level":{"note":"","data":["80177A3C 0000"],"options":null},"Extended Time In Battle \u0026 Stunt Mode To 2.05 Hours":{"note":"","data":["811633BA 457C","811636EE 4514"],"options":null},"Laps To Race":{"note":"","data":["81177A18 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Max Points Stunt Mode":{"note":"","data":["81177A55 3AFF","81177A57 F3FA"],"options":null},"Max Race Points":{"note":"","data":["8117CE22 03E7"],"options":null},"Number Of Drones In Race":{"note":"","data":["81163240 00??"],"options":{"1 Drone":"01","2 Drones":"02","3 Drones":"03","4 Drones":"04","5 Drones":"05","6 Drones":"06","7 Drones":"07","8 Drones":"08","9 Drones":"09"}},"Stunt Wings All Modes":{"note":"Where Wings Are Available Press D-Pad Up On Wing Select","data":["D017055A 0004","50000C02 0000","811139D0 0202"],"options":null},"Stunt Wings Circuit Mode":{"note":"Press D-Pad Up On Wing Select","data":["D017055A 0004","50000C02 0000","801756A1 0202"],"options":null}},"52F78805-8B8FCAB7-C:45":{"Always Win Judge's Decision\\Player 1":{"note":"","data":["8020B777 FFFF","802098AF 0000"],"options":null},"Always Win Judge's Decision\\Player 2":{"note":"","data":["802098AF FFFF","8020B777 0000"],"options":null},"Enable Boro":{"note":"","data":["80307349 0001"],"options":null},"Have 1 Star\\Abdul":{"note":"","data":["80307353 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["8030734F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80307352 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80307351 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80307354 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80307350 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["8030734E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80307355 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80307356 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["802098A1 0000","802047C3 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802047C7 0000","8020B769 0000"],"options":null},"Level Select":{"note":"","data":["8022A84C 00??"],"options":{"Blue Hell Mountain":"0C","Coliseum":"04","Desert":"01","Fire Mountain":"00","Highlands":"02","Hong Kong":"03","Joker's Room":"0B","Jungle":"05","Ninja Room":"06","Observation":"09","Palace":"0D","Pasture":"0A","Suspension Bridge":"07"}},"Play As\\Player 1":{"note":"","data":["802EF622 00??"],"options":{"Abdul":"05","Bob":"01","Boro":"08","Joker":"0B","Leon":"04","Meiling":"03","Ninja":"06","No Clue":"0D","Pierre":"02","Ryuji":"00","The Master":"0C","Tomahawk":"07","Ushi":"0A","Valerie":"09"}},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EF67B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0209757 0000","80209757 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020B61F 0000","8020B61F 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810ADBDC 3F80"],"options":null}},"5306CF45-CBC49250-C:45":{"Car Upgrades\\'63 Muscle Car":{"note":"","data":["8015053F 0005"],"options":null},"Car Upgrades\\All-Terrain Vehicle":{"note":"","data":["8015054F 0004"],"options":null},"Car Upgrades\\Devastator":{"note":"","data":["80150547 0005"],"options":null},"Car Upgrades\\Italia P69":{"note":"","data":["8015054B 0005"],"options":null},"Car Upgrades\\La Bomba":{"note":"","data":["80150543 0005"],"options":null},"Car Upgrades\\Police Car":{"note":"","data":["80150557 0004"],"options":null},"Car Upgrades\\School Bus":{"note":"","data":["80150553 0004"],"options":null},"Infinite Time":{"note":"","data":["8015094D 0095"],"options":null},"Play Level Modifier":{"note":"","data":["80150963 00??"],"options":{"Appalachia":"0C","Arizona":"07","Beverly Hills":"04","Chicago":"0A","Cruise The USA":"0E","Death Valley":"06","Golden Gate Park":"00","Grand Canyon":"08","Indiana":"0B","Iowa":"09","LA Freeway":"05","Redwood Forest":"03","San Francisco":"01","US 101":"02","Washington DC":"0D"}},"Player 1\\Always First Place":{"note":"","data":["8015022B 0001"],"options":null},"Player 1\\Always Have Fastest Car":{"note":"","data":["8015021A 0001"],"options":null},"Player 1\\Gearbox Type Modifier":{"note":"","data":["80150213 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 1\\Lights \u0026 Sirens For Police Car \u0026 School Bus P1":{"note":"","data":["8115053A 0001","8114E38A 0001"],"options":null},"Player 2\\Always First Place":{"note":"","data":["801505C7 0001"],"options":null},"Player 2\\Always Have Fastest Car":{"note":"","data":["801505B6 0001"],"options":null},"Player 2\\Gearbox Type Modifier":{"note":"","data":["801505AF 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 2\\Lights \u0026 Sirens For Police Car \u0026 School Bus P2":{"note":"","data":["811508D6 0001","8114E3A2 0001"],"options":null},"Stop Elapsed Time And No Traffic":{"note":"","data":["80150949 0000"],"options":null}},"5326696F-FE9A99C3-C:45":{"Have Alien Artifact":{"note":"","data":["8004DC5F 0001"],"options":null},"Infinite Ammo All Weapons":{"note":"","data":["50001102 0000","81048146 8000"],"options":null},"Infinite\\Greece":{"note":"","data":["81052B18 0098","81052B1A 967F"],"options":null},"Infinite\\Health":{"note":"","data":["810DDCEC 0258"],"options":null},"Item Modifier":{"note":"","data":["8004DC4F ????"],"options":{"All Items":"FFFF","Crank":"0040","Hangar Key":"0400","Heirglyph Map Piece":"0100","Howitzer Shells":"0002","Nothing":"0000","Windmill Cog":"0080"}},"Level Select":{"note":"","data":["80047F93 00??"],"options":{"America":"03","Comet":"05","Greece":"01","Java":"02","Siberia":"04"}},"No Humans Killed":{"note":"","data":["8104816A 0000"],"options":null},"Press L To Walk Over Water, Climb Hills":{"note":"","data":["D00475D9 0020","8104DCD2 0808"],"options":null},"Weapon Select\\1st Position":{"note":"","data":["80048138 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\2nd Position":{"note":"","data":["80048139 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\3rd Position":{"note":"","data":["8004813A 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\4th Position":{"note":"","data":["8004813B 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\5th Position":{"note":"","data":["8004813C 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\6th Position":{"note":"","data":["8004813D 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\7th Position":{"note":"","data":["8004813E 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\8th Position":{"note":"","data":["8004813F 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}}},"5354631C-03A2DEF0-C:45":{"All Equipment Upgrades":{"note":"","data":["801EF6DD 0023","811EF72A 201B","801EF6BC 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03E6B3B 0000","801EF672 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801EF6F2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801EF6F3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801EF6F4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801EF6F5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801EF6F6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801EF6F7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801EF6E5 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801EF6EB 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801EF6F1 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Fight Demo Majora's Mask":{"note":"With this code,load the game \u0026 put the cheat on. then press start to apear in the Demo mode.","data":["8016A718 0020"],"options":null},"Fog\\Blue":{"note":"","data":["80166108 0020"],"options":null},"Fog\\Pink":{"note":"","data":["8016610C 0020"],"options":null},"Fog\\Yellow":{"note":"","data":["80166110 0020"],"options":null},"Have\\All Masks":{"note":"","data":["801EF6F8 003E","801EF6F9 0038","801EF6FA 0047","801EF6FB 0045","801EF6FC 0040","801EF6FD 0032","801EF6FE 003A","801EF6FF 0046","801EF700 0039","801EF701 0042","801EF702 0048","801EF703 0033","801EF704 003C","801EF705 003D","801EF706 0037","801EF707 003F","801EF708 0036","801EF709 0034","801EF70A 0043","801EF70B 0041","801EF70C 003B","801EF70D 0044","801EF70E 0049","801EF70F 0035"],"options":null},"Have\\All Quest Status Items":{"note":"","data":["801EF72D 0005","811EF72E F7CF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801EF6E2 0002"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801EF6E3 0003"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801EF6E4 0004"],"options":null},"Have\\Bombchu":{"note":"","data":["801EF6E7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801EF6E6 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801EF6E9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801EF6E8 0008"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801EF6F0 0010"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801EF6E1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801EF6EF 000F"],"options":null},"Have\\Item Modifier":{"note":"","data":["801EF6F0 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\Lens of Truth":{"note":"","data":["801EF6EE 000E"],"options":null},"Have\\Magic Beans":{"note":"","data":["801EF6EA 000A"],"options":null},"Have\\Ocarina of Time":{"note":"","data":["801EF6E0 0000"],"options":null},"Have\\Pictograph":{"note":"","data":["801EF6ED 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801EF6EC 000C"],"options":null},"Infinite\\Health":{"note":"","data":["811EF6A6 0140"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811EF6A4 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"","data":["801EF711 0063","801EF716 0063","801EF717 0063","801EF718 0063","801EF719 0063","801EF71A 0063","801EF71C 0063","801EF71D 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801EF6A9 0060","811EF6B0 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811EF6AA 03E7"],"options":null},"Maximum Visibility":{"note":"","data":["80166118 0020"],"options":null},"Play As":{"note":"","data":["801EF690 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03E6B3B 0020","813FFE18 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You have been warned.","data":["801EF6BC 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01FB876 0008","811EF686 FFFD","D01FB876 0004","811EF686 0000","D01FB876 0002","811EF686 FFFE"],"options":null},"Use C-Buttons Anywhere":{"note":"This code allows you to use C-Button Items where you normally can't use them.","data":["811F3588 0000","811F358A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["D03E6B3A 0000","803FF395 0001","813FF39A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"535DF3E2-609789F1-C:4A":{"99 Points":{"note":"","data":["801CC273 0063"],"options":null},"Always First Place":{"note":"","data":["801C386F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801C3B53 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801C3B2E 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801C3997 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801C3FBA 0005","801C425A 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801C399F 0000"],"options":null},"Super Speed":{"note":"","data":["801C3997 0005","D0155221 0010","801C3997 0020"],"options":null}},"53D440E7-7519B011-C:45":{"Boss Cannot Move\\Dino":{"note":"","data":["811DFCF4 44A0"],"options":null},"Boss Cannot Move\\Octo":{"note":"","data":["811E045C 44A0"],"options":null},"Enable All Cheats":{"note":"Go into Options \u0026 then Magic Codes. Then Code list to turn off \u0026 on what you want.","data":["50000401 0000","810DFD9C FFFF"],"options":null},"Have All\\50 Bananas\\Ancient Lake":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E32CD 0032"],"options":null},"Have All\\50 Bananas\\Boulder Canyon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E61ED 0032"],"options":null},"Have All\\50 Bananas\\Crescent Island":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3A2D 0032"],"options":null},"Have All\\50 Bananas\\Darkmoon Caverns":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E5D0D 0032"],"options":null},"Have All\\50 Bananas\\Everfrost Peak":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4F5D 0032"],"options":null},"Have All\\50 Bananas\\Fossil Canyon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E676D 0032"],"options":null},"Have All\\50 Bananas\\Frosty Village":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E5F4D 0032"],"options":null},"Have All\\50 Bananas\\Greenwood Village":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4AAD 0032"],"options":null},"Have All\\50 Bananas\\Haunted Woods":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4A1D 0032"],"options":null},"Have All\\50 Bananas\\Hot Top Volcano":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E462D 0032"],"options":null},"Have All\\50 Bananas\\Jungle Falls":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E44CD 0032"],"options":null},"Have All\\50 Bananas\\Pirate Lagoon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E295D 0032"],"options":null},"Have All\\50 Bananas\\Snowball Valley":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E49FD 0032"],"options":null},"Have All\\50 Bananas\\Spacedust Alley":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E654D 0032"],"options":null},"Have All\\50 Bananas\\Spaceport Alpha":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3C6D 0032"],"options":null},"Have All\\50 Bananas\\Star City":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E578D 0032"],"options":null},"Have All\\50 Bananas\\Treasure Caves":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E371D 0032"],"options":null},"Have All\\50 Bananas\\Walrus Cove":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4A7D 0032"],"options":null},"Have All\\50 Bananas\\Whale Bay":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3AFD 0032"],"options":null},"Have All\\50 Bananas\\Windwill Plains":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E9BBD 0032"],"options":null},"Have All\\99 Balloons":{"note":"","data":["810DFD9A FFFF","801FCBED 0063"],"options":null},"Have All\\Amulets":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FC9E6 FFFF"],"options":null},"Have All\\Keys":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FC9D8 FFFF"],"options":null},"Have All\\Levels Completely Finished":{"note":"","data":["50000904 0000","801FCAF7 00FF","801FCB1F 00FF","801FCB27 00FF","50000404 0000","801FCB2F 00FF","801FCB4F 00FF","50000804 0000","801FCB53 00FF"],"options":null},"Have All\\Silver Coins\\Ancient Lake":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E34AA 0008"],"options":null},"Have All\\Silver Coins\\Boulder Canyon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E63CA 0008"],"options":null},"Have All\\Silver Coins\\Crescent Island":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E3C0A 0008"],"options":null},"Have All\\Silver Coins\\Everfrost Peak":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E513A 0008"],"options":null},"Have All\\Silver Coins\\Fossil Canyon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E694A 0008"],"options":null},"Have All\\Silver Coins\\Frosty Village":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E612A 0008"],"options":null},"Have All\\Silver Coins\\Greenwood Village":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4C8A 0008"],"options":null},"Have All\\Silver Coins\\Haunted Woods":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4BFA 0008"],"options":null},"Have All\\Silver Coins\\Hot Top Volcano":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E480A 0008"],"options":null},"Have All\\Silver Coins\\Jungle Falls":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E513A 0008"],"options":null},"Have All\\Silver Coins\\Pirate Lagoon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E2B3A 0008"],"options":null},"Have All\\Silver Coins\\Snowball Valley":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4BDA 0008"],"options":null},"Have All\\Silver Coins\\Treasure Caves":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E38FA 0008"],"options":null},"Have All\\Silver Coins\\Walrus Cove":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4C5A 0008"],"options":null},"Have All\\Silver Coins\\Whale Bay":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E3CDA 0008"],"options":null},"Have All\\Silver Coins\\Windmill Plains":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E9D9A 0008"],"options":null},"Have All\\The pieces of the TT thing":{"note":"","data":["801FC9E6 0004"],"options":null},"Have All\\Trophies":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FC9DE FFFF"],"options":null},"Infinite\\Power Ups\\Ancient Lake":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E6A2B 0010"],"options":null},"Infinite\\Power Ups\\Boulder Canyon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E8D4B 0010"],"options":null},"Infinite\\Power Ups\\Crescent Island":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E718B 0010"],"options":null},"Infinite\\Power Ups\\Darkmoon Caverns":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E96AB 0010"],"options":null},"Infinite\\Power Ups\\Everfrost Peak":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E871B 0010"],"options":null},"Infinite\\Power Ups\\Fossil Canyon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E9ECB 0010"],"options":null},"Infinite\\Power Ups\\Frosty Village":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E96A6 0010"],"options":null},"Infinite\\Power Ups\\Greenwood Village":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E820B 0010"],"options":null},"Infinite\\Power Ups\\Haunted Woods":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E817B 0010"],"options":null},"Infinite\\Power Ups\\Hot Top Volcano":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E477B 0010"],"options":null},"Infinite\\Power Ups\\Jungle Falls":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E45BB 0010"],"options":null},"Infinite\\Power Ups\\Pirate Lagoon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E54B6 0010"],"options":null},"Infinite\\Power Ups\\Snowball Valley":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E815B 0010"],"options":null},"Infinite\\Power Ups\\Space Dust Alley":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E904B 0010"],"options":null},"Infinite\\Power Ups\\Spaceport Alpha":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E676B 0010"],"options":null},"Infinite\\Power Ups\\Starcity":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E8EEB 0010"],"options":null},"Infinite\\Power Ups\\Treasure Cove":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E6E7B 0010"],"options":null},"Infinite\\Power Ups\\Walrus Cove":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E81DB 0010"],"options":null},"Infinite\\Power Ups\\Whale Bay":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E665B 0010"],"options":null},"Infinite\\Power Ups\\Windmill Plains":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801EC6BB 0010"],"options":null}},"53ED2DC4-06258002-C:50":{"Always 1st":{"note":"","data":["80121C8C 0001","80125489 0001"],"options":null},"Enable In-Game cheat Menu \u0026 Cheats":{"note":"Here you can Activate the IN-Built Cheats Menu. At the Front Screen Just Press C-Button Right.This will open up All Tracks \u0026 Characters In Free Play \u0026 Time Attack. Also In A Race, Press The Start/Pause button to Access the In-Cheat-Menu Option.You can also choose how many Pod's Racers are in the Race \u0026 also how many Laps are in the Race in Free Play \u0026 Time Attack","data":["810A0D27 000A","810A0D2A FFFF"],"options":null},"Have All Tracks Completed":{"note":"","data":["8111CB0A FFFF","8111CB0C 3FFF","8111CB0E 3FFF","8111CB10 3FFF","8111CB12 00FF"],"options":null},"Infinite Truguts":{"note":"","data":["8111CB1A FFFF","8111CB18 7FFF"],"options":null},"No Damage":{"note":"If when Racing Your Pod Over heats \u0026 bursts into flames Press \"R\" \u0026 you will Repair the Damage.","data":["800AA5D7 0001"],"options":null},"Unlock All Tracks \u0026 Characters":{"note":"When using Unlock All Tracks \u0026 Characters For can to pick \u0026 choose what ever you want to play As \u0026 where ;)","data":["8011CB08 00FF","8011CB09 00FF","8011CB0B 00FF","8111CB08 FFFF","8111C80A FFFF","8011CB14 007D","8111CB16 FFFF"],"options":null}},"54310E7D-6B5430D8-C:50":{"Always 1st\\Player 1":{"note":"","data":["810A9248 0001"],"options":null},"Freeze Checkpoint Timer":{"note":"","data":["810CE1D2 BCCC"],"options":null},"Infinite Auto Pilot\\AG Systems\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BCE47 005B"],"options":null},"Infinite Auto Pilot\\Auricom\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC1E7 005B"],"options":null},"Infinite Auto Pilot\\Direx\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC817 005B"],"options":null},"Infinite Auto Pilot\\Feisar 1\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["811BC4FE 005B"],"options":null},"Infinite Auto Pilot\\Piranah\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC817 005B"],"options":null},"Weapon Select\\AG Systems":{"note":"","data":["811BC1DE ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Auricom":{"note":"","data":["811BCE3E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Direx":{"note":"","data":["811BC80E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Feisar 1":{"note":"","data":["811BC4F6 ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Piranah":{"note":"","data":["811BC80E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"[In-Game Cheat Unlock]\\Cyclone Weapon":{"note":"","data":["800924C4 00??"],"options":{"Off":"00","On":"01"}},"[In-Game Cheat Unlock]\\Infinite Ammo\\Player 1":{"note":"","data":["80091254 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Ammo\\Player 2":{"note":"","data":["80092970 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Shield Energy\\Player 1":{"note":"","data":["80091256 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Shield Energy\\Player 2":{"note":"","data":["80092972 0001"],"options":null},"[In-Game Cheat Unlock]\\[Ultimate Unlock All]":{"note":"This Unlocks All Levels, Tracks, Velocitar and Super Combo, Piranha 2 Ship, Cyclone Weapons Power Up and all 28 Gold Awards unlocked","data":["80091255 0001","8009125C 0020"],"options":null}},"55D4C4CE-7753C78A-C:45":{"Add\\Building":{"note":"","data":["8006A1C0 0001"],"options":null},"Add\\Satellite":{"note":"","data":["8006A1C3 0001"],"options":null},"Have\\All\\Levels Unlocked \u0026 Completed For Americans":{"note":"","data":["8006A1F0 0011"],"options":null},"Have\\All\\Levels Unlocked \u0026 Completed For Black Dogs":{"note":"","data":["8006A1F3 000A"],"options":null},"Have\\All\\Levels Unlocked \u0026 Completed For Soviets":{"note":"","data":["8006A1F1 0008"],"options":null},"Have\\All\\Missions Open And Complete For Americans":{"note":"","data":["8006A1EC 0011"],"options":null},"Have\\All\\Missions Open And Complete For Black Dogs":{"note":"","data":["8006A1EF 000A"],"options":null},"Have\\All\\Missions Open And Complete For Soviets":{"note":"","data":["8006A1ED 0008"],"options":null},"Infinite\\Ammo":{"note":"","data":["8006A1C1 0001"],"options":null},"Infinite\\Armor":{"note":"","data":["8006A1C2 0001"],"options":null},"Infinite\\Pilots":{"note":"","data":["811FBCCE FFFF"],"options":null},"Infinite\\Scrap Collected":{"note":"","data":["811FBCC6 FFFF"],"options":null},"Infinite\\Ship Health":{"note":"","data":["811DF6DE 0BA9"],"options":null},"Infinite\\Shots For Sniper Rifle":{"note":"","data":["811DA682 0003"],"options":null},"Infinite\\Weapons":{"note":"","data":["811DF6EA 04B0"],"options":null},"Level Select":{"note":"","data":["8006A1F5 0001"],"options":null},"Max\\Pilot Limits":{"note":"","data":["811FBCD2 FFFF"],"options":null},"Max\\Scrap Limit":{"note":"","data":["811FBCCA FFFF"],"options":null}},"569433AD-F7E13561-C:45":{"Infinite Health":{"note":"","data":["81086BCA 0038","800BAF97 0007"],"options":null}},"5753720D-2A8A884D-C:44":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C24D2 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE02F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802024B5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE015 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FC945 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFD2D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","80202565 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801D9E7D 0001"],"options":null}},"57BFF74D-DE747743-C:50":{"In-Game Cheats\\Access Cheat menu":{"note":"","data":["50000504 0000","80101308 0001"],"options":null},"In-Game Cheats\\Enable\\All Items":{"note":"To access simply pause in game play \u0026 then unpause.","data":["801012EC 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Invincibility":{"note":"","data":["802AA818 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Monsters":{"note":"","data":["802AA98B 00??"],"options":{"Are Active":"00","Are Gone":"01"}},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5E06 0064","812A5E4E 0064","812A5E5E 00C8","812A5E48 1900","812A5E18 04B0","812A5E4A 0640","812A5DE8 0960","812A5E4C 0190"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Keys":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5E03 000F"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A5E77 0001","50000F02 0000","812A5DBA 03E7"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Infinite Health (All Levels)":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on Single-Player, Co-Operative and DUKEMATCH, All Levels.","data":["8024D557 0064","802A5DB9 0064"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A6192 0064","812A61DA 0064","812A61EA 00C8","812A61D4 1900","812A61A4 04B0","812A61D6 0640","812A6174 0960","812A61D8 0190"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A6203 0001","50000E02 0000","812A6148 03E7"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on DUKEMATCH, All Levels.","data":["8024BC3F 0064","802A6145 0064"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A651E 0064","812A6566 0064","812A6576 00C8","812A6560 1900","812A6530 04B0","812A6562 0640","812A6500 0960","812A6564 0190"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A658F 0001","50000E02 0000","812A64D4 03E7"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 4 on DUKEMATCH, All Levels.","data":["8024B79B 0064","802A64D1 0064"],"options":null},"Single-Player (All Levels)\\Have All\\Items \u0026 Infinite Use on all levels":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5A7A 0064","812A5AC2 0064","812A5AD2 00C8","812A5ABC 1900","812A5ABE 0640","812A5A8C 04B0","812A5A5C 0960","812A5AC0 0190"],"options":null},"Single-Player (All Levels)\\Have All\\Keys":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5A77 000F"],"options":null},"Single-Player (All Levels)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A5AEB 0001","50000A02 0000","812A5A30 03E7"],"options":null},"Single-Player (All Levels)\\Have Infinite Health (All Levels)":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels and does what it says on the tin. Infinite health for player 1, All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["80247493 0064","8026EC8B 0064","802A5A2D 0064"],"options":null}},"580162EC-E3108BF1-C:58":{"Freeze Timer at 04:59":{"note":"Do not enable until count down to race is finished","data":["811BDB9E 3A70"],"options":null},"Have All Groups Completed":{"note":"This gives you all Cups for all Groups.","data":["50002801 0000","801BDCDC 0002"],"options":null},"Have Everything Unlocked":{"note":"Pause Game: Use Control Stick, to scroll the Cheat Menu. Press A, to activate Cheats. This will unlock everything and also be replacing all the Zombies with Pre-Historic Dinosaurs.","data":["801BDDBD 000F"],"options":null},"Have Infinite\\Free Repairs":{"note":"","data":["81097844 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Frozen Opponents":{"note":"","data":["810978A4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Grip-O-Matic Tires":{"note":"","data":["810979DC ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Hot Rod":{"note":"","data":["810977E4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Invunerability":{"note":"","data":["8109782C ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Mega Turbo":{"note":"","data":["810977CC ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Mine Dropping Ability":{"note":"","data":["81097A98 ????"],"options":{"Off":"0000","On":"0064"}},"Have Infinite\\Turbo":{"note":"","data":["810977B4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Turbo Nitrous":{"note":"","data":["810977FC ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Underwater Ability":{"note":"","data":["81097874 ????"],"options":{"Off":"0000","On":"0BBB"}},"Max Credits":{"note":"This is also Infinite until disabled","data":["811BDC1B FFFF"],"options":null},"Max Kills":{"note":"This will automatically Clear the stage if enabled and go back to the stage menu","data":["81094596 01F4"],"options":null}},"58FD3F25-D92EAA8D-C:50":{"Enable All Levels \u0026 Boarders":{"note":"","data":["80250AB9 00FF","80250ABB 0005","81250AC6 FCFF","80250AC8 0007"],"options":null},"Infinite Damage All Players and Levels":{"note":"","data":["803F4C01 0000"],"options":null},"Play As":{"note":"","data":["8001A0E7 00??"],"options":{"Akari Hayami":"02","Dion Blaster":"00","Gold Boarder":"06","Kensuke Kimachi":"01","Panda Boarder":"07","Ricky Winterborn":"03","Rob Haywood":"04","Silver Boarder":"05"}},"Prees L For Infinite Lives \u0026 Continues":{"note":"Whenever you've lost a life, Press L.Do not press L when on the main menu or during the intro Only use this feature in Match Race","data":["D00556A9 0020","8026B14B 0003"],"options":null},"Stop Timer\\Contest\\Air Make":{"note":"","data":["80319BBA 00C5"],"options":null},"Stop Timer\\Contest\\Crystal Lake":{"note":"","data":["8029C0DA 00C5"],"options":null},"Stop Timer\\Contest\\Crystal Peak":{"note":"","data":["802A889A 00C5"],"options":null},"Stop Timer\\Contest\\Golden Forest":{"note":"","data":["802A6D3A 00C5"],"options":null},"Stop Timer\\Contest\\Half Pipe":{"note":"","data":["802F51FA 00C5"],"options":null},"Stop Timer\\Time Attack\\Air Make":{"note":"","data":["8031AA4A 0000"],"options":null},"Stop Timer\\Time Attack\\Crystal Lake":{"note":"","data":["802A582A 0000"],"options":null},"Stop Timer\\Time Attack\\Crystal Peak":{"note":"","data":["802B2BCA 0000"],"options":null},"Stop Timer\\Time Attack\\Deadly Fall":{"note":"","data":["802CF56A 0000"],"options":null},"Stop Timer\\Time Attack\\Dragon Cave":{"note":"","data":["802C137A 0000"],"options":null},"Stop Timer\\Time Attack\\Golden Forrest":{"note":"","data":["802B135A 0000"],"options":null},"Stop Timer\\Time Attack\\Half Pipe":{"note":"","data":["802F638A 0000"],"options":null},"Stop Timer\\Time Attack\\Mountain Village":{"note":"","data":["802CB95A 0000"],"options":null},"Stop Timer\\Trick Attack\\Air Make":{"note":"","data":["8031AABA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Crystal Lake":{"note":"","data":["8029F66A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Crystal Peak":{"note":"","data":["802AC8EA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Deadly Fall":{"note":"","data":["802C8E0A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Dragon Cave":{"note":"","data":["802BAD3A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Golden Forrest":{"note":"","data":["802AAF5A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Half Pipe":{"note":"","data":["802F63FA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Mountain Village":{"note":"","data":["802C50DA 00C5"],"options":null}},"596E145B-F7D9879F-C:50":{"Enable All Cheats":{"note":"Go into Options \u0026 then Magic Codes. Then Code list to turn off \u0026 on what you want.","data":["800E03AC 001F","50000301 0000","800E03AD 00FF"],"options":null},"Have All\\50 Balloons":{"note":"","data":["8020807D 0032"],"options":null},"Have All\\Control Drumstick \u0026 Adventure Two mode unlocked":{"note":"","data":["80126CCC 0003","80126CCF 0003","80126CE2 0003","80126CE3 0008"],"options":null},"Have All\\Keys":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80208659 001F"],"options":null},"Have All\\None-Adventure tracks completed":{"note":"","data":["50001204 0000","80208777 0007","50000904 0000","802087CF 0007","80208658 0007","8020865A 0007","8020865B 0007","8020865C 000F","8020865D 00FF"],"options":null},"Have All\\T.T. Amulets":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80208667 0004"],"options":null},"Have All\\T.T. time trial races beaten":{"note":"","data":["80208666 0004"],"options":null},"Have All\\Trophies":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["8020865E 0007","8020865F 00FF"],"options":null},"Have All\\Trophy Adventure races unlocked":{"note":"","data":["50000502 0000","8020886E 0007"],"options":null}},"5A160336-BC7B37B0-C:50":{"All Levels \u0026 Stages Unlocked":{"note":"","data":["50001804 0000","8008E5CF 0001"],"options":null},"Have All Gold Cards":{"note":"","data":["8008E575 00FF","8108E576 FFFF","8108E578 FFFF","8108E57A FFFF","8108E57C FFFF"],"options":null},"Infinite Red Pumped-Up Bombs":{"note":"","data":["802AC643 0004"],"options":null},"Infinite\\Credits":{"note":"","data":["802AC61B 0063"],"options":null},"Infinite\\Gems":{"note":"","data":["802AC61F 0063"],"options":null},"Infinite\\Lives":{"note":"","data":["802AC617 0063"],"options":null},"Infinite\\Time":{"note":"","data":["802AC633 0000"],"options":null}},"5A9D3859-97AAE710-C:45":{"Anger metre always full":{"note":"","data":["800D5978 00FF","800D5666 00FF"],"options":null},"Crunched Players":{"note":"","data":["810DBA6C 3F00"],"options":null},"Difficulty Mod":{"note":"","data":["80120639 00??"],"options":{"Easy":"01","Hard":"03","Medium":"02","Very Easy":"00"}},"Extra Teams":{"note":"","data":["80115A0C 0001"],"options":null},"Get In Fights Constantly":{"note":"","data":["800CF766 0020"],"options":null},"Players\\Head Size":{"note":"","data":["81118A2C ????"],"options":{"Normal Size":"3F80","Very Large":"4080","Very Small":"3F00"}},"Players\\Height Size":{"note":"","data":["81120688 ????"],"options":{"Giants":"4080","Large":"3FC0","Midgets":"3F00","Normal Size":"3F80"}},"Team 1\\Score pts":{"note":"","data":["8011C061 00??"],"options":{"30 Points":"1E","50 Points":"23","75 Points":"4B","99 Points":"63","Zero Points":"00"}},"Team 2\\Score pts":{"note":"","data":["8011F571 ????"],"options":{"0 Points":"2305","5 Points":"4B07","9 Points":"6309","ero Points":"0000"}}},"5AC383E1-D712E387-C:45":{"Infinite\\Money\\Player 1":{"note":"","data":["81324B46 270F"],"options":null},"Infinite\\Money\\Player 2":{"note":"","data":["81324B5A 270F"],"options":null},"Infinite\\Money\\Player 3":{"note":"","data":["81324B6E 270F"],"options":null},"Infinite\\Money\\Player 4":{"note":"","data":["81324B82 270F"],"options":null},"[Language Select]":{"note":"To use this load the game then enable this cheat and Reset (F1) you will now be on your chosen Language and Relative Local Language Board and Money.","data":["D009675F 0001","80096758 00??"],"options":{"American":"00","British":"01","France":"02","German":"03"}}},"5C1B5FBD-7E961634-C:46":{"Access In-Game Cheat Menu":{"note":"To Access Pause Game Play. This gives you access to In-game Cheats like God Mode,Level Select,All Items Etc","data":["81137DB6 07FF","80137E93 0005"],"options":null},"Boots Of Speed Select\\Player 1":{"note":"","data":["8113F538 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113F6D4 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113F870 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113FA0C ????"],"options":{"Off":"0000","On":"03FF"}},"Have All\\Armour":{"note":"","data":["8013F651 0019","8013F655 0014","8013F659 0014","8013F65D 0014"],"options":null},"Have All\\Items And Artifacts\\Player 1":{"note":"","data":["8013F651 0019","8013F655 0014","8013F659 0014","8013F65D 0014","8013F661 0001","8013F663 00FF","8013F665 0002","8013F667 00FF","8013F669 0003","8013F66B 00FF","8013F66D 0004","8013F66F 00FF","8013F671 0006","8013F673 00FF","8013F675 0007","8013F677 00FF","8013F679 0008","8013F67B 00FF","8013F67D 0009","8013F67F 00FF","8013F681 000A","8013F683 00FF","8013F685 000B","8013F687 00FF","8013F689 000C","8013F68B 00FF","8013F68D 000D","8013F68F 00FF","8013F691 000E","8013F693 00FF","8013F695 000F","8013F697 00FF","8013F699 0010","8013F69B 00FF","8013F69D 0011","8013F69F 00FF","8013F6A1 0012","8013F6A3 00FF","8013F6A5 0013","8013F6A7 00FF","8013F6A9 0014","8013F6AB 00FF","8013F6AD 0015","8013F6AF 00FF","8013F6B1 0016","8013F6B3 00FF","8013F6B5 0017","8013F6B7 00FF","8013F6B9 0018","8013F6BB 00FF","8013F6BD 0019","8013F6BF 00FF","8013F6C1 001A","8013F6C3 00FF","8013F6C5 001B","8013F6C7 00FF","8013F6C9 001C","8013F6CB 00FF","8013F6CD 001D","8013F6CF 00FF","8013F6D1 001E","8013F6D3 00FF","8013F6D5 001F","8013F6D7 00FF","8013F6D9 0020","8013F6DB 00FF","8013F6E9 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113F6FC 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113F6D8 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113F874 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113FA10 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013F715 00FF","8013F717 00FF","8013F719 00FF","8013F71B 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013F6F1 00FF","8013F6F3 00FF","8013F6F5 00FF","8013F6F7 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013F88D 00FF","8013F88F 00FF","8013F891 00FF","8013F893 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013FA29 00FF","8013FA2B 00FF","8013FA2D 00FF","8013FA2F 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013F71D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013F2E9 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013F485 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013F621 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013F71F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013F2EB 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013F487 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013F623 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113F52C ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113F6C8 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113F864 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113FA00 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113F6EC FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113F2B8 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113F454 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113F5F0 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8113F533 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113F6CE ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113F86A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113FA06 ????"],"options":{"Off":"0000","On":"03FF"}}},"5C9191D6-B30AC306-C:4A":{"99 Points":{"note":"","data":["801D8E13 0063"],"options":null},"Always First Place":{"note":"","data":["801D040F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801D06F3 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801D06CE 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801D0537 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801D0B5A 0005","801D0DFA 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801D053F 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800E84C3 0007"],"options":null},"Super Speed":{"note":"","data":["801D0537 0005","D0161DC1 0010","801D0537 0020"],"options":null}},"5CD4150B-470CC2F1-C:45":{"Access\\All Secret Characters":{"note":"This code is Fantastic, You have 12 characters to choose from to you race without any bike, just on foot","data":["50000C04 0000","801839CF 0001"],"options":null},"Access\\All Superbikes":{"note":"","data":["50000304 0000","801839CF 0001"],"options":null},"Access\\All Tracks":{"note":"","data":["50000BD8 0000","80182F87 0001"],"options":null},"Infinite Lasers\\Player 1":{"note":"","data":["80170B99 00C8"],"options":null},"Infinite Lasers\\Player 2":{"note":"","data":["80171241 00C8"],"options":null},"Infinite Lasers\\Player 3":{"note":"","data":["80171869 00C8"],"options":null},"Infinite Lasers\\Player 4":{"note":"","data":["80171ED1 00C8"],"options":null},"Infinite Nitros\\Player 2":{"note":"","data":["801711CB 0004","801711CF 0004"],"options":null},"Infinite Nitros\\Player 3":{"note":"","data":["80171833 0004","80171837 0004"],"options":null},"Infinite Nitros\\Player 4":{"note":"","data":["80171E9B 0004","80171E9F 0004"],"options":null},"Infinite Shield\\Player 2":{"note":"","data":["801711F5 00C8"],"options":null},"Infinite Shield\\Player 3":{"note":"","data":["8017185D 00C8"],"options":null},"Infinite Shield\\Player 4":{"note":"","data":["80171EC5 00C8"],"options":null},"Infinite\\Nitros\\Player 1":{"note":"","data":["80170B63 0004","80170B67 0004"],"options":null},"Infinite\\Shield\\Player 1":{"note":"","data":["80170B8D 00C8"],"options":null},"[Screen Hud Clear]":{"note":"If you are using a Plugin other then Jabos and can not see through the Thick Hud then Let the game load 1st before Putting this code on,Or it will give an error and Freeze","data":["80092B8B 0004"],"options":null}},"5D40ED2C-10D6ABCF-C:00":{"Infinite Max Health":{"note":"","data":["8011249D 00A0"],"options":null},"Infinite Max Lives":{"note":"","data":["801124B4 0009"],"options":null},"Infinite Max Shield":{"note":"","data":["801124A3 00A0"],"options":null}},"5E547A4D-90E60795-C:45":{"Character Creation\\Max\\Accuracy":{"note":"","data":["81115A20 4170"],"options":null},"Character Creation\\Max\\Arm Str.":{"note":"","data":["81115A4C 4170"],"options":null},"Character Creation\\Max\\Bunting":{"note":"","data":["81115A38 4170"],"options":null},"Character Creation\\Max\\Clutch":{"note":"","data":["81115A54 4170"],"options":null},"Character Creation\\Max\\Contact":{"note":"","data":["81115A28 4170"],"options":null},"Character Creation\\Max\\Defense":{"note":"","data":["81115A48 4170"],"options":null},"Character Creation\\Max\\Power":{"note":"","data":["81115A2C 4170"],"options":null},"Character Creation\\Max\\Speed":{"note":"","data":["81115A44 4170"],"options":null},"Character Creation\\Max\\Stamina":{"note":"","data":["81115A24 4170"],"options":null},"Character Creation\\Max\\Streak":{"note":"","data":["81115A50 4170"],"options":null},"Character Creation\\Max\\VS LHB":{"note":"","data":["81115A3C 4170"],"options":null},"Character Creation\\Max\\VS LHP":{"note":"","data":["81115A30 4170"],"options":null},"Character Creation\\Max\\VS RHB":{"note":"","data":["81115A40 4170"],"options":null},"Character Creation\\Max\\VS RHP":{"note":"","data":["81115A34 4170"],"options":null},"Infinite\\Balls":{"note":"","data":["8006E4DF 0000"],"options":null},"Infinite\\Character Creation Points":{"note":"","data":["81103350 4170"],"options":null},"Infinite\\Outs":{"note":"","data":["8006E4E3 0000"],"options":null},"Infinite\\Pitch Type Creation Points":{"note":"","data":["811039BC 4170","811039C0 4170"],"options":null},"Infinite\\Strikes":{"note":"","data":["8006E4E1 0000"],"options":null}},"5F25B0EE-6227C1DB-C:45":{"Away Team\\Infinite Time Outs":{"note":"","data":["81135098 0700"],"options":null},"Away Team\\No Time Outs":{"note":"","data":["81135098 0000"],"options":null},"Home Team\\Infinite Time Outs":{"note":"","data":["811344D0 0700"],"options":null},"Home Team\\No Time Outs":{"note":"","data":["811344D0 0000"],"options":null},"Infinite Shot Clock":{"note":"","data":["811318F2 05A0"],"options":null},"Jump Shooting":{"note":"","data":["8017B7AD 0064"],"options":null},"Max Inside Scoring":{"note":"","data":["8017B7AC 0064"],"options":null},"Max\\3 Pointers":{"note":"","data":["8017B7AE 0064"],"options":null},"Max\\Blocking":{"note":"","data":["8017B7B2 0064"],"options":null},"Max\\Def. Awareness":{"note":"","data":["8017B7B3 0064"],"options":null},"Max\\Def. Rebounds":{"note":"","data":["8017B7B6 0064"],"options":null},"Max\\Dribbling":{"note":"","data":["8017B7BC 0064"],"options":null},"Max\\Dunking":{"note":"","data":["8017B7B0 0064"],"options":null},"Max\\Endurance":{"note":"","data":["8017B7BD 0064"],"options":null},"Max\\Free Throws":{"note":"","data":["8017B7AF 0064"],"options":null},"Max\\Jumping":{"note":"","data":["8017B7B7 0064"],"options":null},"Max\\Off. Awareness":{"note":"","data":["8017B7BA 0064"],"options":null},"Max\\Off. Rebounds":{"note":"","data":["8017B7B5 0064"],"options":null},"Max\\Passing":{"note":"","data":["8017B7B9 0064"],"options":null},"Max\\Quickness":{"note":"","data":["8017B7B4 0064"],"options":null},"Max\\Shooting Range":{"note":"","data":["8017B7BE 0064"],"options":null},"Max\\Speed":{"note":"","data":["8017B7BB 0064"],"options":null},"Max\\Stealing":{"note":"","data":["8017B7B1 0064"],"options":null},"Max\\Strength":{"note":"","data":["8017B7B8 0064"],"options":null}},"5F3F49C6-0DC714B0-C:50":{"Access All\\Bikes":{"note":"","data":["8107F6EE FFFF"],"options":null},"Access All\\Tracks":{"note":"","data":["8107F6F0 00FF","8107F6F2 FFFF"],"options":null},"Infinite\\Nitro":{"note":"","data":["810BA540 4296"],"options":null},"Infinite\\Nitro Always On":{"note":"","data":["810BA52C 0010"],"options":null},"Laps 2 Race":{"note":"","data":["800F36B8 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}}},"5F6A04E2-D4FA070D-C:53":{"Access All Levels":{"note":"","data":["8008A9D6 0001","8008A9EA 0001","8008AA12 0001","8008AA62 0001","8008AA76 0001","8008AA8A 0001","8008AA9E 0001","8008AAB2 0001","8008AAC6 0011","8008AADA 0021","8008AAEE 0001","8008AB16 0011","8008AB2A 0041","8008AB3E 0021","8008AB52 0081","8008AB66 0001","8008AB7A 0081","8008AB8E 0001","8008ABB6 0001","8008ABDE 0001","8008ABF2 0011","8008AC06 0021","8008AC56 0001","8008AF3A 0001","8008AF4E 0001","8008AF62 0001","8008AF76 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81094150 0063","81094152 0063","81094154 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A9297 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810866C2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810864C4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80094305 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A92B5 00??","800A92C5 00??","800A92D5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"5FD7CDA0-D9BB51AD-C:50":{"1 Lap To Race":{"note":"","data":["D01226C8 0000","801226C8 0009"],"options":null},"Access Everything":{"note":"\"Have All Characters,Cups,Courses,\u0026Boards\"","data":["810B3160 0100","810B3164 0F00"],"options":null},"Infinite Cash":{"note":"","data":["8112272A 03E7"],"options":null},"Infinite Tools Options":{"note":"","data":["801226D5 00??"],"options":{"Board":"06","Fan":"01","Ghost":"02","Mouse":"05","Pan":"03","Rock":"04"}},"Infinite Weapons\\Lucky Dip":{"note":"\"Lucky Dip is Infinite Usage Of What Ever You Get From Each Red Box\"","data":["801226D4 0003"],"options":null}},"60460680-305F0E72-C:50":{"Access All In-Game Cheats":{"note":"Pause Gameplay To Access","data":["81157E46 000F","81157E56 FFFF"],"options":null},"Access All Navigation Cards":{"note":"","data":["80157E9B 0005"],"options":null},"Access Secret Worlds":{"note":"","data":["81152946 0064"],"options":null},"Infinite Lives":{"note":"","data":["81157EAE 0063"],"options":null},"Max \u0026 Total Gold":{"note":"","data":["80157E4B 0063","80157E4F 0063"],"options":null}},"60C437E5-A2251EE3-C:50":{"Character Select":{"note":"","data":["80075F52 00??"],"options":{"Big Head.":"04","Flame Grilled":"08","Normal":"00","Play as Deadwing.":"01"}},"Have All\\Cheats: Book of Shadows":{"note":"","data":["81075F4E 0FFF"],"options":null},"Have All\\Dark Souls Collected":{"note":"","data":["80075F49 0078"],"options":null},"Have All\\Gads \u0026 The Poign":{"note":"","data":["80030E57 000F"],"options":null},"Have All\\Items":{"note":"Youll not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50001B20 0000","80030613 000B"],"options":null},"Have All\\L-Eclipser":{"note":"You will not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50000320 0000","80030973 000B"],"options":null},"Have All\\Levels Unlocked":{"note":"","data":["5000101C 0000","80030A0E 0001"],"options":null},"Infinite\\0.9mm Ammo":{"note":"","data":["81075B3A 0190"],"options":null},"Infinite\\Accumulators":{"note":"","data":["800306D7 0005"],"options":null},"Infinite\\Cadeaux'":{"note":"","data":["81075B36 03E7"],"options":null},"Infinite\\Max Health/Air/Shadow Charge \u0026 Voodoo Power":{"note":"","data":["50000604 0000","81075B16 2710"],"options":null},"Infinite\\Prisms":{"note":"","data":["80030957 0003"],"options":null},"Infinite\\Retractors":{"note":"","data":["800308B7 0003"],"options":null},"Infinite\\Shotgun Shells":{"note":"","data":["80075B2F 0063"],"options":null},"Infinite\\Violator Ammo":{"note":"","data":["81075B32 03E7"],"options":null},"Press L To Levitate":{"note":"Press the L-Button to rise and let go and press again in stages to come back down.","data":["D0059097 0020","80075578 0041"],"options":null},"[Ammo Always Displayed On Screen]":{"note":"","data":["50000408 0000","80075ACD 0007"],"options":null},"[Health Meter Displayed On Screen]":{"note":"","data":["81075B10 0000","81075B12 00FF"],"options":null}},"60D5E10B-8BEDED46-C:50":{"All Masks":{"note":"Press GS To Activate All Masks","data":["891F1110 8780"],"options":null},"Have All\\Crates":{"note":"","data":["810C6FE8 7FFF","50000602 0000","810C6FEA FFFF","800C6FF2 00FF"],"options":null},"Have All\\Yellow Lums":{"note":"","data":["50006401 0000","800C6FF8 00FF","50001901 0000","800C6FAD 00FF","811F1072 0005","50005702 0000","811F1078 FFFF"],"options":null},"Infinite\\Max Health":{"note":"","data":["811BC54C 001E"],"options":null},"Infinite\\Oxygen":{"note":"","data":["810F4A80 4396"],"options":null},"Open Options\\Open all cages":{"note":"","data":["801F1032 0050","50000602 0000","811F10E0 FFFF"],"options":null},"Open Options\\levels \u0026 Map":{"note":"","data":["50000801 0000","801F1101 00FF"],"options":null}},"61D116B0-FA24D60C-C:50":{"Access The Rock Alcatraz bonus level":{"note":"Press C-right, on any level, at the track selection screen","data":["D00F4174 0002","80100120 0006"],"options":null},"All\\Keys \u0026 Cars":{"note":"","data":["50000E16 0000","810CAD52 FFFF"],"options":null},"All\\Keys \u0026 Cars Circuits":{"note":"","data":["8105696E FFFF","8105699A FFFF","50000404 0000","81056910 FFFF"],"options":null},"Always 1st":{"note":"","data":["80101409 0000"],"options":null},"Automatic Transmission":{"note":"","data":["800C8100 0001"],"options":null},"Big Back Wheels":{"note":"","data":["800DA03C 0002"],"options":null},"Big Front Wheels":{"note":"","data":["800DA02C 0002"],"options":null},"Difficulty Very Easy":{"note":"","data":["810D9F7A 0002"],"options":null},"Gravity Modifier":{"note":"","data":["800F3E61 00??"],"options":{"Ballon \u0026 Two Weights":"00","One Weight":"01","Two Weights":"02"}},"Laps To Race":{"note":"","data":["800E7411 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Max Race Points":{"note":"","data":["810DACCA 03E7"],"options":null},"No\\Auto Abort":{"note":"","data":["800F4140 0001"],"options":null},"No\\Car Collisions":{"note":"","data":["800F4120 0001"],"options":null},"Resurrect In Place":{"note":"","data":["800F4150 0001"],"options":null},"Stop Timer":{"note":"","data":["800F4160 0001"],"options":null}},"61F5B152-046122AB-C:4A":{"Always 1st":{"note":"","data":["8011C25D 0001"],"options":null},"Have All Characters":{"note":"","data":["801170E2 007D","811170E4 FFFF"],"options":null},"Have All Tracks Completed":{"note":"","data":["811170DA FFFF","811170DC 3FFF","811170DE 3FFF","811170E0 3FFF","811170E2 00FF"],"options":null},"No Damage":{"note":"","data":["800A8047 0001"],"options":null},"Unlock All Tracks":{"note":"","data":["801170D8 00FF","801170D9 00FF","801170DA 00FF","801170DB 00FF","811170D8 FFFF"],"options":null}},"62269B3D-FE11B1E8-C:45":{"Always Place 1st":{"note":"","data":["8131C70E 0000"],"options":null},"Extra Cars \u0026 Tracks":{"note":"","data":["50000201 0000","8032690C 00FF","8032690F 00FF","813243CC FFFF"],"options":null},"Have 1-6 Level Points":{"note":"","data":["50000602 0000","8032685F 0064"],"options":null},"Only Race 1 Lap Championship Mode":{"note":"","data":["8031EBDB 0002"],"options":null}},"62E957D0-7FC15A5D-C:50":{"All Golf Courses Unlocked":{"note":"","data":["80130FED 0001"],"options":null},"Always On 1st Stroke":{"note":"","data":["801B74F3 0000"],"options":null},"Infinite Power Shots":{"note":"","data":["801B74F8 0042"],"options":null},"Unlock all Characters and Birdy Badges":{"note":"Unlocks Metal Mario, Maple, Luigi, Sonny, Wario, Harry, Bowser, Yoshi, Mario and DK","data":["50006C01 0000","801304A4 0001","50000901 0000","80130518 0001","50000901 0000","80130521 0001"],"options":null},"Weather Select":{"note":"","data":["800BACAB 00??"],"options":{"Always Rains":"01","Never Rains":"00"}},"Wind Speed Select":{"note":"","data":["800BACA1 00??"],"options":{"0 MPH":"00","20 MPH":"14"}}},"62F6BE95-F102D6D6-C:50":{"99 Accuracy":{"note":"","data":["80131530 0063"],"options":null},"99 Bonus":{"note":"","data":["80131537 0063"],"options":null},"All Boss Attack levels unlocked":{"note":"Unlocks all planes in death match","data":["80355701 003F"],"options":null},"Always Have\\F-15J Eagle":{"note":"","data":["8027D69C 0010"],"options":null},"Always Have\\X-29A A.T.D.":{"note":"","data":["8027D69D 0020"],"options":null},"Extra Planes":{"note":"","data":["8127D69C FFFF"],"options":null},"F-15J Eagle \u0026 X-29A A.T.D. planes unlocked":{"note":"","data":["8035575C 00??"],"options":{"Both of the above planes":"3F","F-15J Eagle":"10","X-29A A.T.D.":"20"}},"Gun Select":{"note":"","data":["8027E9D3 00??"],"options":{"22mm":"0B","22mm BB Shot":"0A","Air Mines":"02","Chaff":"00","Fire":"14","Fire Arrow":"21","Fire Wave":"17","Fireball":"0D","Hunai Shot":"0C","Jammings":"01","Mahibishi":"03","Ninja Glitch":"16","Ninjabeam":"28","Phoenix":"1F","Rocket":"1E","Sabre":"0E","Star":"20","Tomahawk":"15"}},"Infinite\\99 Lives":{"note":"","data":["80355748 0063"],"options":null},"Infinite\\Armor":{"note":"","data":["8127D9A4 44A0","8127D9A8 44A0"],"options":null},"Infinite\\Chaffs":{"note":"","data":["8027E9C7 000A"],"options":null},"Infinite\\Gun":{"note":"","data":["8027EAC0 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8027D9A5 00C8","8027D9A9 00C8"],"options":null},"Infinite\\Special Weapons":{"note":"","data":["8027EE82 0002"],"options":null},"Stage Select screen unlocked":{"note":"Hold L + R at the Game Mode screen and it will unlock every single level in the game; from Tokyo to Space. Do not hold L + R on any other screen, as this may cause game to freeze","data":["D0281691 0030","8027D5C0 000A","D0281691 0030","8027D5DA 000A"],"options":null}},"630AA37D-896BD7DB-C:50":{"Have All\\Cars":{"note":"","data":["50000C01 0000","8009B7D8 0001"],"options":null},"Have All\\Difficulty Levels":{"note":"","data":["8009B7D7 0003"],"options":null},"Have All\\Tracks":{"note":"","data":["50000C01 0000","80099498 0001"],"options":null},"Max\\Checkpoint Bonus":{"note":"","data":["812E013E 03E7"],"options":null},"Max\\Collisions Points":{"note":"","data":["812E013A 03E7"],"options":null},"Max\\Points Aid":{"note":"","data":["8112A3CE 03E7"],"options":null},"Solo Mode\\Infinite Health\\Alpine Ridge":{"note":"","data":["D02C5224 0080","802C5233 00E1"],"options":null},"Solo Mode\\Infinite Health\\Bayou Run":{"note":"","data":["D029137C 0080","8029138B 00E1"],"options":null},"Solo Mode\\Infinite Health\\Destruction Junction":{"note":"","data":["D02A5EB0 0080","802A5EBF 00E1"],"options":null},"Solo Mode\\Infinite Health\\Metro Challenge":{"note":"","data":["D02F9018 0080","802F9027 00E1"],"options":null},"Solo Mode\\Infinite Health\\Midnyte Rumble":{"note":"","data":["D0317C0B 0080","80317C1A 00E1"],"options":null},"Solo Mode\\Infinite Health\\Seascape Sprint":{"note":"","data":["D02E0124 0080","802E0133 00E1"],"options":null},"Solo Mode\\Infinite Health\\Sunset Canyon":{"note":"","data":["D030EF68 0080","8030EF77 00E1"],"options":null},"Solo Mode\\Infinite Health\\Terminal Impact":{"note":"","data":["D02C0FA3 0080","802C0FB2 00E1"],"options":null}},"635A2BFF-8B022326-C:45":{"Don't Hurt Mario\\Falling":{"note":"","data":["8033B22C 00E8","8133B178 FFFF"],"options":null},"Don't Hurt Mario\\Monsters":{"note":"","data":["A033B197 0001"],"options":null},"Funny Mario Options\\Mario Walks On Lava":{"note":"","data":["81250900 1000"],"options":null},"Funny Mario Options\\Mario Walks On Sand":{"note":"","data":["81255490 1000","8125572C 1000","8125572E 0031"],"options":null},"Funny Mario Options\\Mario Walks On Water":{"note":"","data":["81381764 0800","81381766 0024","81000090 3C04","81000092 8034","81000094 8484","81000096 B1E6","81000098 4484","8100009A 3000","810000A0 4680","810000A2 3120","810000A4 4604","810000A6 903C","810000AC 4500","810000AE 0002","810000B4 4600","810000B6 2486","810000B8 080E","810000BA 05DB","810000BC E712"],"options":null},"Funny Mario Options\\Mario's Cap\\Off \u0026 in His Hand":{"note":"Here you can Choose Options with Mario with His Cap off \u0026 in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["8033B177 00??"],"options":{"Cap In Hand":"20","Flying Mario Cap In Hand":"28","Invisible Mario Cap In Hand":"22","Invisible Metal Mario Cap In Hand":"26","Metal Mario Cap In Hand":"24"}},"Funny Mario Options\\Mario's Cap\\On \u0026 An Extra in His Hand":{"note":"Here you can Choose Options with Mario with His Cap on \u0026 An Extra in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["8033B177 00??"],"options":{"Cap In Hand":"30","Flying Mario Cap In Hand":"38","Invisible Mario Cap In Hand":"32","Invisible Metal Mario Cap In Hand":"36","Metal Mario Cap In Hand":"34"}},"Have\\Debug Mode":{"note":"","data":["A032D598 0001:0000"],"options":null},"Have\\Level Select":{"note":"","data":["A032D58C 0001"],"options":null},"Have\\Turbo Running Speed":{"note":"","data":["8033B1C3 00FF"],"options":null},"Infinite\\Energy \u0026 Breath":{"note":"","data":["8033B21E 0008"],"options":null},"Infinite\\Lives":{"note":"","data":["8033B21D 0064"],"options":null},"Level Select":{"note":"Select a Level. Jump Into a Painting. Press A at the Stars Collected Screen. As Stats are fading hold L, and you'll jump to the level you've selected.","data":["D033AFA1 0020","A032DDF9 00??"],"options":{"Big Boo's Haunt":"04","Bob omb Battlefield":"09","Bowser In The Dark World":"11","Bowser In The Dark World Boss":"1E","Bowser In The Fire Sea":"13","Bowser In The Fire Sea Boss":"21","Bowser In The Sky":"15","Bowser In The Sky Boss":"22","Castle Courtyard":"1A","Cavern Of The Metal Cap":"1C","Cool Cool Mountain":"05","Dire Dire Docks":"17","Hazy Maze Cave":"07","Intro":"01","Jolly Roger Bay":"0C","Lethal Lava Land":"16","Mushroom Castle":"06","Mushroom Castle Field":"10","Rainbow Ride":"0F","Shifting Sand Land":"08","Snowman's Land":"0A","Tall Tall Mountain":"24","The End":"19","The Princess's Secret Slide":"1B","The Secret Aquarium":"14","Tick tock Clock":"0E","Tiny Huge World":"0D","Tower Of The Wing Cap":"1D","Vanish Cap Under The Moat":"12","Wet Dry World":"0B","Whomp's Fortress":"18","Wing Mario Over The Rainbow":"1F"}},"Mario's Cap\\Off Options":{"note":"Here you can Choose Options with Mario without His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["8033B177 00??"],"options":{"Flying Mario":"08","Invisible Flying Mario":"0A","Invisible Mario":"02","Invisible Metal Flying Mario":"0F","Mario No Cap":"01","Metal Flying Mario":"0D","Metal Mario":"04"}},"Mario's Cap\\On Options":{"note":"Here you can Choose Options with Mario with His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["8033B177 00??"],"options":{"Flying Mario":"19","Invisible Mario":"12","Invisible Metal Mario":"16","Metal Mario":"15"}},"Press GS For 255 Coins":{"note":"","data":["8933B218 00FF"],"options":null},"Press L To Levitate":{"note":"Press L to levitate \u0026 Let go to land","data":["D033AFA1 0020","8133B1BC 4220","D033AFA1 0020","8133B17C 0300","D033AFA1 0020","8133B17E 0880"],"options":null},"[Slot A Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80207723 0001","8020770B 00C7","50001101 0000","8020770C 00FF"],"options":null},"[Slot A Codes]\\Have All\\Key doors unlocked (and mote empty)":{"note":"","data":["8020770A 007E"],"options":null},"[Slot A Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80207725 0064"],"options":null},"[Slot B Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80207793 0001","8020777B 00C7","50001101 0000","8020777C 00FF"],"options":null},"[Slot B Codes]\\Have All\\Key doors unlocked (and mote empty)":{"note":"","data":["8020777A 007E"],"options":null},"[Slot B Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80207795 0064"],"options":null},"[Slot C Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80207803 0001","802077EB 00C7","50001101 0000","802077EC 00FF"],"options":null},"[Slot C Codes]\\Have All\\Key doors unlocked (and mote empty)":{"note":"","data":["802077EA 007E"],"options":null},"[Slot C Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80207805 0064"],"options":null},"[Slot D Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80207873 0001","8020785B 00C7","50001101 0000","8020785C 00FF"],"options":null},"[Slot D Codes]\\Have All\\Key doors unlocked (and mote empty)":{"note":"","data":["8020785A 007E"],"options":null},"[Slot D Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80207875 0064"],"options":null}},"636E6B19-E57DDC5F-C:50":{"Access\\All Cars":{"note":"","data":["8015EC13 003F"],"options":null},"Access\\All Tracks":{"note":"","data":["8015EC0E 0070"],"options":null},"Access\\Championship,World,Expert":{"note":"","data":["8015EC1C 0001"],"options":null},"Access\\Expert Times":{"note":"","data":["8015EC10 0031"],"options":null},"Access\\In-Game Cheat Menu":{"note":"On The Title Screen, Hold Z Button \u0026 Push L Button","data":["811CFE09 00FF","811F31FF 04FF","811CE165 FF03"],"options":null}},"63E7391C-E6CCEA33-C:45":{"Always Have Weapon Options\\Player 1":{"note":"","data":["810E2994 00??"],"options":{"Anvil":"79","Bee hive":"6D","Bird bath":"04","Blue Swordfish":"63","Bouy":"29","Broom":"08","Chair":"0B","Champagne":"0C","Chicken":"0E","Club":"03","Crate":"0F","Deck chair":"14","Egg":"16","Fish":"1A","Frying Pan":"1E","Gardeners Fork":"1D","Mallet":"2A","Milk Bottle":"2D","Mooses head":"78","NCube knife":"09","NCube missiles":"0A","Plank":"39","Rolling Pin":"41","Saucepan":"64","Spade":"46","Spanner":"4E","Stick":"55","Stool":"6B","Tennis Racket":"48","Watermelon":"2B","Wooden Chair":"1F","Wooden Spoon":"65"}},"Always Have Weapon Options\\Player 2":{"note":"","data":["810E2C6C 00??"],"options":{"Anvil":"79","Bee hive":"6D","Bird bath":"04","Blue Swordfish":"63","Bouy":"29","Broom":"08","Chair":"0B","Champagne":"0C","Chicken":"0E","Club":"03","Crate":"0F","Deck chair":"14","Egg":"16","Fish":"1A","Frying Pan":"1E","Gardeners Fork":"1D","Mallet":"2A","Milk Bottle":"2D","Mooses head":"78","NCube knife":"09","NCube missiles":"0A","Plank":"39","Rolling Pin":"41","Saucepan":"64","Spade":"46","Spanner":"4E","Stick":"55","Stool":"6B","Tennis Racket":"48","Watermelon":"2B","Wooden Chair":"1F","Wooden Spoon":"65"}},"Infinite Health\\Player 1":{"note":"","data":["810E279C 42C8"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["810E2A74 42C8"],"options":null},"Infinite Time":{"note":"","data":["810FED4C 42F0"],"options":null},"One Hit To Kill\\Player 1":{"note":"","data":["810E2A74 3F80"],"options":null},"One Hit To Kill\\Player 2":{"note":"","data":["810E2D4C 3F80"],"options":null},"Open All Versus Arenas":{"note":"","data":["810E44F4 03FF"],"options":null},"Unlock All Characters":{"note":"This Gives you all Characters to choose from plus fixes A freeze on the Charecter Select Menu by having it on","data":["810E44F2 00FF"],"options":null}},"641D3A7F-86820466-C:50":{"Difficulty Select Options":{"note":"","data":["811C5C1C ????"],"options":{"Hard":"0101","Normal":"0100","Ultimate":"0102"}},"Have All\\Keys":{"note":"","data":["50000410 0000","80181B20 0063","50000410 0000","80181B28 0063"],"options":null},"Have All\\Moves":{"note":"","data":["50005306 0000","811876D0 0100","50005306 0000","811876D2 00FF"],"options":null},"Have All\\Moves At Skill Level 250":{"note":"","data":["50000E06 0000","8018C953 00FA","50001306 0000","8018C9AD 00FA","50003006 0000","8018CA37 00FA"],"options":null},"Infinite\\Max Body Stats":{"note":"","data":["81181638 270F","81181678 0063","50000C02 0000","81181640 270F","50000502 0000","81181670 270F","50000602 0000","81181698 270F","50000602 0000","811816A6 270F"],"options":null},"Infinite\\Max Health":{"note":"","data":["81181630 270F","81181632 270F"],"options":null},"Infinite\\Refresh Items":{"note":"","data":["50000E10 0000","801819F8 0063","50000D10 0000","80181A00 0063"],"options":null},"Infinite\\Weapons \u0026 Items":{"note":"","data":["50000610 0000","80181AD0 0063","50000610 0000","80181AD8 0063"],"options":null},"Level 999":{"note":"","data":["81181678 270F"],"options":null},"Level and Battle Select":{"note":"The level and battle select screen can be accessed by pressing A at the main menu","data":["801D74A4 0005"],"options":null},"Play As":{"note":"","data":["811C5CF6 00??"],"options":{"Alien":"03","President Weller":"02","The real Mr Diaz Baddie":"01"}},"Press L To Levitate":{"note":"","data":["D00CCE25 0020","812558F0 3FCB"],"options":null},"[Have Full Power and Max Combos]":{"note":"Gives you full power and Max Combos in fights","data":["811C6052 03FC"],"options":null},"[Unlock all Code Key Doors]":{"note":"Code Key always Re-newed and Matching all Doors","data":["801C5C16 00FF"],"options":null}},"6420535A-50028062-C:45":{"Access All Levels":{"note":"","data":["8020850E 00FF","80208510 00FF"],"options":null},"Extended Tongue":{"note":"","data":["8133176E FFFF"],"options":null},"Have 99 Crowns":{"note":"","data":["80251767 0063"],"options":null},"Have All Levels Completed":{"note":"","data":["80208512 0019","80208513 0019","80208514 0015","80208515 0018","80208516 0017","80208517 0017"],"options":null},"Infinite Health":{"note":"","data":["80174CF3 000A"],"options":null},"Level Select":{"note":"","data":["8029087B 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06"}}},"64F1B7CA-71A23755-C:50":{"Have\\All Items":{"note":"","data":["50000501 0000","80389C4E 0001","50000301 0000","80389C55 0001","80389C5E 0001","80389C5F 0001","80389C61 0001","50000E01 0000","80389C64 0001"],"options":null},"Have\\Exp Points":{"note":"","data":["80389C4D 0063"],"options":null},"Have\\Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C33 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C49 0001","81389C4A 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C42 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C4D 0064"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C4C 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the GS button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C94 ????","89389C91 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CF1 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C8C 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C8C 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C41 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C46 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"650EFA96-30DDF9A7-C:50":{"Always Place 1st\\Player 1":{"note":"","data":["801BFF4F 0000"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801C020E 00FF"],"options":null},"Lap Timer Below 0'00'10\\Player 1":{"note":"","data":["811C00E6 0000"],"options":null},"Lap Timer Below 0'00'10\\Player 2":{"note":"","data":["811C045E 0000"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801C0077 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801C069A 0005","801C093A 0005"],"options":null},"Misses Don't Count\\Player 1":{"note":"","data":["801C007F 0000"],"options":null},"Misses Don't Count\\Player 2":{"note":"","data":["811C03F6 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800D8003 0007"],"options":null},"Set\\Speed Size":{"note":"","data":["801C0077 00??"],"options":{"Fast":"0F","Medium":"0A","Slow":"01"}},"Set\\Wave Size":{"note":"","data":["800E6B90 00??"],"options":{"Medium":"19","Oh My God":"FF","Rough":"64","Smooth":"00"}}},"65234451-EBD3346F-C:4A":{"Drive Through Anything\\Ballista":{"note":"","data":["803F8BF8 0001"],"options":null},"Drive Through Anything\\Dump Truck":{"note":"","data":["813EEBE8 0101"],"options":null},"Drive Through Anything\\Police Car":{"note":"","data":["813F8FD8 0101"],"options":null},"Drive Through Anything\\Red Car":{"note":"","data":["813FC658 0101"],"options":null},"Drive Through Anything\\Red, White, \u0026 Blue Car":{"note":"","data":["813EEFC8 0101"],"options":null},"Drive Through Anything\\Skyfall":{"note":"","data":["813EE438 0101"],"options":null},"Drive Through Anything\\Van":{"note":"","data":["813F93A8 0101"],"options":null},"Infinite\\Boosts Buggy Vehicle":{"note":"","data":["803EE491 0064"],"options":null},"Infinite\\Hydraulics Sidesweeper":{"note":"","data":["803EDCE1 0063"],"options":null},"Infinite\\Missiles Motor Bike":{"note":"","data":["803F8C53 0063"],"options":null},"J-Bomb Floats Through Anything":{"note":"","data":["803F7C5A 0001"],"options":null},"Rapid Fire\\Ballista":{"note":"","data":["803F8C5D 0000"],"options":null},"Rapid Fire\\Sideswipe":{"note":"","data":["803EDCE6 0000"],"options":null},"Sidesweep\\Can Go Through Anything":{"note":"","data":["803EDCE2 FFFF"],"options":null},"Sideswipe\\Can Go In Water":{"note":"","data":["803EDCE2 0063"],"options":null}},"65EEE53A-ED7D733C-C:45":{"Have All Spirits":{"note":"","data":["8010F51E 0007"],"options":null},"Have hammer\\Level 1":{"note":"Do not use with other level hammer cheats","data":["8010F291 0000"],"options":null},"Have hammer\\Level 2":{"note":"Do not use with other level hammer cheats","data":["8010F291 0001"],"options":null},"Have hammer\\Level 3":{"note":"Do not use with other level hammer cheats","data":["8010F291 0002"],"options":null},"Have jump boots\\Level 1":{"note":"Do not use with other level jump boots cheats","data":["8010F290 0000"],"options":null},"Have jump boots\\Level 2":{"note":"Do not use with other level jump boots cheats","data":["8010F290 0001"],"options":null},"Have jump boots\\Level 3":{"note":"Do not use with other level jump boots cheats","data":["8010F290 0002"],"options":null},"Have member\\Bombette":{"note":"","data":["8010F2BC 0001"],"options":null},"Have member\\Bow":{"note":"","data":["8010F2EC 0001"],"options":null},"Have member\\Goomario":{"note":"","data":["8010F2AC 0001"],"options":null},"Have member\\Kooper":{"note":"","data":["8010F2B4 0001"],"options":null},"Have member\\Lakitu":{"note":"","data":["8010F2E4 0001"],"options":null},"Have member\\Parrakary":{"note":"","data":["8010F2C4 0001"],"options":null},"Have member\\Sushie":{"note":"","data":["8010F2DC 0001"],"options":null},"Have member\\Watt":{"note":"","data":["8010F2D4 0001"],"options":null},"Have\\Attack item":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Dusty Hammer":"0086","Fire Flower":"0800","Pebble":"0085","Shooting Star":"0083","Snowman Doll":"0081","Thunder Bolt":"0084","Thunder Rage":"0082"}},"Have\\Defense item":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Mushroom":"008A","Repel Gel":"0097","Stone Cap":"0088","Volt Shroom":"008B"}},"Have\\Enemy Stats item":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Dizzy Dial":"009A","Fright Jar":"0098","POW Block":"0090","Sleep Sheep":"008F","Stop Watch":"0092"}},"Have\\Recovery Items Option 1":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Apple":"0094","Apple Pie":"00B1","Big Cookie":"00C0","Bland Meal":"00BD","Blue Berry":"009E","Boiled Egg":"00D8","Bubble Berry":"00A1","Cake Mix":"00AA","Coco Pop":"00CF","Deluxe Feast":"00BE","Dried Fruit":"00A8","Dried Pasta":"00A7","Dried Shroom":"008D","Egg":"005F","Electro Pop":"00CC","Fire Pop":"00CD","Fried Egg":"00C9","Fried Shroom":"00B6","Frozen Fries":"00D4","Goomnut":"00A5","Healthy Juice":"00BC","Honey Candy":"00CB","Honey Shroom":"00CA","Honey Super":"00C4"}},"Have\\Recovery Items Option 2":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Honey Syrup":"00A4","Honey Ultra":"00B2","Hot Shroom":"00B9","Iced Potato":"00AF","Jammin' Jelly":"00A2","Jelly Pop":"00D1","Jelly Shroom":"00DA","Jelly Super":"00C6","Jelly Ultra":"00B4","KooPasta":"00B5","Kooky Cookie":"00D3","Koopa Leaf":"00A6","Koopa Tea":"00C3","Lemon":"009C","Lemon Candy":"00D0","Life Shroom":"0095","Lime":"009D","Lime Candy":"0C0E","Maple Shroom":"00D7","Maple Super":"00C5","Maple Syrup":"00A3","Maple Ultra":"00B3","Melon":"00AD","Mistake":"00C2","Mushroom":"008A"}},"Have\\Recovery Items Option 3":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Nutty Cake":"00D6","Potato Salad":"00D5","Red Berry":"009F","Shroom Cake":"00B7","Shroom Steak":"00B8","Spaghetti":"00C7","Special Shake":"00BF","Spicy Soup":"00B0","Stinky Herb":"00AE","Strange Leaf":"00A9","Super Shroom":"008C","Super Soda":"009B","Sweet Shroom":"00BA","Tasty Tonic":"0089","Ultra Shroom":"008E","Whacka's Bump":"0093","Yellow Berry":"00A0","Yoshi Cookie":"00D9","Yummy Meal":"00BB"}},"Have\\Special Items Option 1":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Bucket":"0031","Calculator":"0030","Cook Book":"0029","Crystal Berry":"001E","Diamond Stone":"0017","Dictonary":"0024","Diploma":"000E","First Degree Card":"000A","Fourth Degree Card":"000D","Frying Pan":"0023","Hammer":"0004","Jade Raven":"002A","Kooper's Shell":"0019","Magical Bean":"0058","Magical Seed Brown-Orange":"002E","Magical Seed Green":"002D","Magical Seed Red":"002B","Mailbag":"0069","Melody":"0068","Scarf":"0032","Second Degree Card":"000B","Star Stone":"006C","Third Degree Card":"000C","Toy Train":"0021","Volcano Vase":"005B"}},"Have\\Special Items Options 1":{"note":"Only use One Have item Option at one time","data":["8110F444 ????"],"options":{"Artifact":"0053","Boo's Portrait":"001D","Bucket":"0131","Diploma":"010E","Dolly":"0156","Fertile Soil":"0159","Fortress Key":"0110","Golden Jar":"0118","Jade Raven":"012A","Jump":"0101","Kooper's Shell":"0119","Letter":"0150","Lunar Stone":"0115","Lyrics":"0067","Magical Bean":"0158","Magical Seed Blue":"012D","Magical Seed Purple":"012C","Miracle Water":"015A","Mystery Note":"0125","Record":"0122","Ultra Stone":"010F","Volcano Vase":"015B","Water Stone":"0157"}},"Infinite\\FP":{"note":"","data":["8010F295 0063","8010F296 0063"],"options":null},"Infinite\\HP":{"note":"","data":["8010F292 0063","8010F293 0063"],"options":null},"Infinite\\Star Power":{"note":"","data":["8010F520 0007","8010F521 0007"],"options":null},"Lots Of Coins":{"note":"","data":["8110F29C 03E7"],"options":null},"Max\\Badge Points":{"note":"","data":["8010F298 00??"],"options":{"127 Badge Points":"7F","60 Badge Points":"3C"}},"Max\\Level":{"note":"","data":["8010F299 0063"],"options":null},"Max\\Star Pieces":{"note":"","data":["8010F29F 0063"],"options":null},"Max\\Star Points":{"note":"","data":["8010F2A0 0063"],"options":null},"No Star Points (0)":{"note":"If emulator hangs at level up, enable this cheat and don't disable it whatsoever!","data":["8010F2A0 0000"],"options":null},"Upgrade member\\Level 1\\Bombette":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2BD 0001"],"options":null},"Upgrade member\\Level 1\\Bow":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2ED 0001"],"options":null},"Upgrade member\\Level 1\\Goomario":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2AD 0001"],"options":null},"Upgrade member\\Level 1\\Kooper":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2B5 0001"],"options":null},"Upgrade member\\Level 1\\Lakitu":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2E5 0001"],"options":null},"Upgrade member\\Level 1\\Parrakary":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2C5 0001"],"options":null},"Upgrade member\\Level 1\\Sushie":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2DD 0001"],"options":null},"Upgrade member\\Level 1\\Watt":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2D5 0001"],"options":null},"Upgrade member\\Level 2\\Bombette":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2BD 0002"],"options":null},"Upgrade member\\Level 2\\Bow":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2ED 0002"],"options":null},"Upgrade member\\Level 2\\Goomario":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2AD 0002"],"options":null},"Upgrade member\\Level 2\\Kooper":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2B5 0002"],"options":null},"Upgrade member\\Level 2\\Lakitu":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2E5 0002"],"options":null},"Upgrade member\\Level 2\\Parrakary":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2C5 0002"],"options":null},"Upgrade member\\Level 2\\Sushie":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2DD 0002"],"options":null},"Upgrade member\\Level 2\\Watt":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2D5 0002"],"options":null}},"661B45F3-9ED6266D-C:50":{"Anger metre always full":{"note":"","data":["800D9B38 00FF","800D9826 00FF"],"options":null},"Crunched Players":{"note":"","data":["800DFC2D 003F"],"options":null},"Difficulty Mod":{"note":"","data":["801247F9 00??"],"options":{"Easy":"01","Hard":"03","Medium":"02","Very Easy":"00"}},"Extra Teams":{"note":"","data":["80115A0C 0001"],"options":null},"Get In Fights Constantly":{"note":"","data":["800D3926 0020"],"options":null},"Max Score\\Team 1":{"note":"","data":["80120221 00??"],"options":{"30 Points":"1E","50 Points":"23","75 Points":"4B","99 Points":"63","Zero Points":"00"}},"Max Score\\Team 2":{"note":"","data":["80123731 00??"],"options":{"30 Points":"1E","50 Points":"23","75 Points":"4B","99 Points":"63","Zero Points":"00"}},"Players\\Head Size":{"note":"","data":["8111CBEC ????"],"options":{"Normal Size":"3F80","Very Large":"4080","Very Small":"3F00"}},"Players\\Height Size":{"note":"","data":["81124848 ????"],"options":{"Giants":"4080","Large":"3FC0","Midgets":"3F00","Normal Size":"3F80"}}},"664BA3D4-678A80B7-C:45":{"Enable All Courses":{"note":"","data":["81130CEE FFFF"],"options":null},"Have All Characters":{"note":"","data":["50000E02 0001","810C28E4 0000"],"options":null},"Max Gold Mario Badges Player 1":{"note":"","data":["800C545B 0063"],"options":null},"No Wind":{"note":"","data":["810BA9F1 0000","800BA9F3 0000"],"options":null},"Unlimited\\Power Hits\\Player 1":{"note":"","data":["801B71F8 0004"],"options":null},"Unlimited\\Power Hits\\Player 2":{"note":"","data":["801B72B0 0004"],"options":null},"Unlimited\\Power Hits\\Player 3":{"note":"","data":["801B7368 0004"],"options":null},"Unlimited\\Power Hits\\Player 4":{"note":"","data":["801B7420 0004"],"options":null},"Zero Strokes Taken":{"note":"","data":["801B71F3 0000"],"options":null}},"66572080-28E348E1-C:4A":{"Infinite Hp":{"note":"","data":["802016A7 0000"],"options":null},"Infinite Sp":{"note":"","data":["802016AB 005A"],"options":null},"Infinite Time":{"note":"","data":["80260BDE 0000"],"options":null},"Play As":{"note":"","data":["801B9D5C 00??"],"options":{"1st BOSS":"08","DAITARN 3":"02","DANCOUGAR":"03","DUNBINE":"05","FINAL BOSS":"00","R1":"01","SHINING GUNDAM":"04","VOLTES V":"07","WALKER GALLIER":"06"}},"Player 2 Health Mod":{"note":"","data":["80206AF7 00??"],"options":{"Infinite Health":"00","Instant Death":"C8"}}},"665FD963-B5CC6612-C:44":{"Diffuculty Modifier":{"note":"","data":["8011956F 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Gems":{"note":"","data":["80128E97 00FF"],"options":null},"Have\\All Level Keys":{"note":"","data":["50000604 0000","80128D73 0007","80128D8B 001F","80128DAB 00FF"],"options":null},"Have\\All Weapons":{"note":"","data":["50000B04 0000","80128D47 0001","80128D33 0001"],"options":null},"Have\\Backpack":{"note":"","data":["80128C7B 0001","80128CBB 0001"],"options":null},"Infinite\\Air":{"note":"","data":["80129070 0063","801E862A 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128CF3 00FF","80128D03 00FF","80128D0F 00FF","50000504 0000","80128D13 00FF","80128E9B 00FF","80128E97 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128D26 5B23","80128D67 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C15C4 1E61","812A2534 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["80128E9B 00FF"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114F85A F803","81128CDE 0003","81128CE2 0003","81128CE6 0003","81128CEA 0003","81128CEE 0003","81128CF2 0003","81128CF6 0005"],"options":null}},"66751A57-54A29D6E-C:4A":{"Boots Of Speed Select\\Player 1":{"note":"","data":["8113D5E8 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113D784 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113D920 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113DABC ????"],"options":{"Off":"0000","On":"03FF"}},"Enable Cheat Menu":{"note":"","data":["801370C7 0005","81136FEA FFFF"],"options":null},"Have All\\Armour":{"note":"","data":["8013D541 0019","8013D545 0014","8013D549 0014","8013D54D 0014"],"options":null},"Have All\\Items And Artifacts":{"note":"","data":["8013D551 0001","8013D553 00FF","8013D555 0002","8013D557 00FF","8013D559 0003","8013D55B 00FF","8013D55D 0004","8013D55F 00FF","8013D561 0005","8013D563 00FF","8013D565 0006","8013D567 00FF","8013D569 0007","8013D56B 00FF","8013D56D 0008","8013D56F 00FF","8013D571 0009","8013D573 00FF","8013D575 000A","8013D577 00FF","8013D579 000B","8013D57B 00FF","8013D57D 000C","8013D57F 00FF","8013D581 000D","8013D583 00FF","8013D585 000E","8013D587 00FF","8013D589 000F","8013D58B 00FF","8013D58D 0010","8013D58F 00FF","8013D591 0011","8013D593 00FF","8013D595 0012","8013D597 00FF","8013D599 0013","8013D59B 00FF","8013D59D 0014","8013D59F 00FF","8013D5A1 0015","8013D5A3 00FF","8013D5A5 0016","8013D5A7 00FF","8013D5A9 0017","8013D5AB 00FF","8013D5AD 0018","8013D5AF 00FF","8013D5B1 0019","8013D5B3 00FF","8013D5B5 001B","8013D5B7 00FF","8013D5B9 001C","8013D5BB 00FF","8013D5BD 001D","8013D5BF 00FF","8013D5C1 001E","8013D5C3 00FF","8013D5C5 001F","8013D5C7 00FF","8013D5C9 0020","8013D5CB 00FF","8013D5D9 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113D5EC 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113D788 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113D924 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113DAC0 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013D605 00FF","8013D607 00FF","8013D609 00FF","8013D60B 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013D7A1 00FF","8013D7A3 00FF","8013D7A5 00FF","8013D7A7 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013D93D 00FF","8013D93F 00FF","8013D941 00FF","8013D943 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013DAD9 00FF","8013DADB 00FF","8013DADD 00FF","8013DADF 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013D60D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013D7A9 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013D945 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013DAE1 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013D60F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013D7AB 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013D947 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013DAE3 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113D5DC ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113D778 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113D914 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113DAB0 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113D5DC FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113D778 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113D914 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113DAB0 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8013D5E3 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113D77E ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113D91A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113DAB6 ????"],"options":{"Off":"0000","On":"03FF"}}},"66CF0FFE-AD697F9C-C:50":{"Infinite Lives":{"note":"","data":["810CE462 03E7"],"options":null},"Infinite health":{"note":"","data":["810C8B0E 03E7"],"options":null},"Level Select":{"note":"Scroll With C-Left \u0026 C-Right Level Select Available, At The Player Select Top Screen","data":["810A590E 0001"],"options":null},"Score Aid":{"note":"","data":["810CD912 29AA"],"options":null}},"673D099B-A4C808DE-C:45":{"Always Full Special\\Boris":{"note":"","data":["811543DC 0044"],"options":null},"Always Full Special\\Curtis":{"note":"","data":["811541C0 0044"],"options":null},"Always Full Special\\George":{"note":"","data":["81154814 0044"],"options":null},"Always Full Special\\Lizzie":{"note":"","data":["81154A30 0044"],"options":null},"Always Full Special\\Myukus":{"note":"","data":["81554E68 0044"],"options":null},"Always Full Special\\Ralph":{"note":"","data":["81154C4C 0044"],"options":null},"Always Full Special\\Ruby":{"note":"","data":["811545F8 0044"],"options":null},"Enable George":{"note":"","data":["8118CF92 0000"],"options":null},"Enable\\Lizzie":{"note":"","data":["8118CF94 0000"],"options":null},"Enable\\Myukus":{"note":"","data":["8118CF98 0000"],"options":null},"Enable\\Ralph":{"note":"","data":["8118CF96 0000"],"options":null},"Infinite Health\\George":{"note":"","data":["8115480C 0044"],"options":null},"Infinite Health\\Lizzie":{"note":"","data":["81154A28 0044"],"options":null},"Infinite Health\\Ralph":{"note":"","data":["81154C44 0044"],"options":null},"Infinite Lives\\George":{"note":"","data":["81154808 0063"],"options":null},"Infinite Lives\\Lizzie":{"note":"","data":["81154A24 0063"],"options":null},"Infinite Lives\\Ralph":{"note":"","data":["81154C40 0063"],"options":null},"Infinite\\Health\\Boris":{"note":"","data":["811543D4 0044"],"options":null},"Infinite\\Health\\Curtis":{"note":"","data":["811541B8 0044"],"options":null},"Infinite\\Health\\Myukus":{"note":"","data":["81154E60 0044"],"options":null},"Infinite\\Health\\Ruby":{"note":"","data":["811545F0 0044"],"options":null},"Infinite\\Lives\\Boris":{"note":"","data":["811543D0 0063"],"options":null},"Infinite\\Lives\\Curtis":{"note":"","data":["811541B4 0063"],"options":null},"Infinite\\Lives\\Myukus":{"note":"","data":["81154EFC 0063"],"options":null},"Infinite\\Lives\\Ruby":{"note":"","data":["811545EC 0063"],"options":null}},"67D20729-F696774C-C:4A":{"Bonus Stage Character Modifier (Training Mode)":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["8018D193 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Give Kirby A Wierd Blow-Up":{"note":"","data":["8025C118 000A"],"options":null},"Have All Characters":{"note":"","data":["810A28F8 0FF0"],"options":null},"P1 Press Down On D-Pad To Make Items Appear In Random Spots":{"note":"","data":["D109CF64 0400","8118B062 0001"],"options":null},"Story Mode\\Always Get Pacifist (60,000 Points)":{"note":"","data":["810A2B2E 0000"],"options":null},"Story Mode\\Infinite Time":{"note":"","data":["810A2AEE 43CB"],"options":null},"Story Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code could also result freezing at the end of the Level.","data":["800A2AFB 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 1\\Infinite Lives":{"note":"","data":["800A2B03 0004"],"options":null},"Story Mode\\Player 1\\Kirby B Button Move\\Congo Jungle":{"note":"","data":["8026EA8F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Fighting Polygon Team":{"note":"","data":["802606DF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["80266ACF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Kirby's Dreamland":{"note":"","data":["8026BAFF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Master Hand Stage":{"note":"","data":["8026FC0F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Metal Mario Stage":{"note":"","data":["80261557 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Peach's Castle":{"note":"","data":["80261D5F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Planet Zebes":{"note":"","data":["8026DF67 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Saffron City":{"note":"","data":["80271A57 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["8026F0B7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["80266E0F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Low % Health":{"note":"","data":["810A2B46 0000"],"options":null},"Story Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2B6F 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 2\\Infinite Lives":{"note":"","data":["800A2B77 0004"],"options":null},"Story Mode\\Player 2\\Low % Health":{"note":"","data":["810A2BBA 0000"],"options":null},"Story Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2BE3 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 3\\Infinite Lives":{"note":"","data":["800A2BEB 0004"],"options":null},"Story Mode\\Player 3\\Low % Health":{"note":"","data":["810A2C2E 0000"],"options":null},"Story Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2C57 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 4\\Infinite Lives":{"note":"","data":["800A2C5F 0004"],"options":null},"Story Mode\\Player 4\\Low % Health":{"note":"","data":["810A2CA2 0000"],"options":null},"Story Mode\\Skip Straight To Master Hand":{"note":"","data":["800A2AA7 000D"],"options":null},"VS. Mode\\Have Mushroom Kindom":{"note":"","data":["800A28F7 00FF"],"options":null},"VS. Mode\\Infinite Time":{"note":"","data":["810A2CDE 43CB"],"options":null},"VS. Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2CEB 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["802619AF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["80269F47 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["8026C277 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Low % Health":{"note":"","data":["810A2D36 0000"],"options":null},"VS. Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2D5F 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 2\\Low % Health":{"note":"","data":["810A2DAA 0000"],"options":null},"VS. Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2DD3 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 3\\Low % Health":{"note":"","data":["810A2E1E 0000"],"options":null},"VS. Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2E47 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 4\\Low % Health":{"note":"","data":["810A2E92 0000"],"options":null}},"67D21868-C5424061-C:50":{"Infinite Energy\\Player 1":{"note":"","data":["800ACB89 00??"],"options":{"Max":"40","None":"00"}},"Infinite Energy\\Player 2":{"note":"","data":["800ACC79 00??"],"options":{"Max":"3F","None":"00"}},"Infinite Match Time":{"note":"","data":["800ABC33 0000"],"options":null},"Super Attacks\\Player 1":{"note":"","data":["800ACB8D 00??"],"options":{"3":"03","None":"00"}},"Super Attacks\\Player 2":{"note":"","data":["800ACC7D 00??"],"options":{"3":"03","None":"00"}},"Unlock Extras":{"note":"","data":["800ACD55 00FF","800ACD57 00FF"],"options":null}},"67FF12CC-76BF0212-C:4A":{"Extra Gems":{"note":"","data":["D016523B 0000","8016523B 004B"],"options":null},"Full\\Bomb Power":{"note":"","data":["80165239 0003"],"options":null},"Full\\Fire Power":{"note":"","data":["8016523A 0003"],"options":null},"Infinite\\Health":{"note":"","data":["8016523E 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["8016523D 0009"],"options":null},"Max\\Bombs":{"note":"","data":["80165239 0008"],"options":null},"Max\\Explosion":{"note":"","data":["8016523A 0008"],"options":null},"Max\\Score":{"note":"","data":["80177601 00FF","80177602 00FF"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D005A2F5 0020","81154178 41CB","D005A2F5 0020","D0154154 0000","80154154 0040"],"options":null}},"68D7A1DE-0079834A-C:50":{"Access\\All Characters":{"note":"","data":["80208910 FFFF"],"options":null},"Access\\All Floyd Awards":{"note":"only enable One character at a time when using this code","data":["50000501 0000","80208908 0005"],"options":null},"All Single Player Levels Unlocked":{"note":"All Charcters","data":["80208AA0 00FF","80208AA1 00FF","80208B16 00FF","80208B17 00FF","80208B8C 00FF","80208B8D 00FF"],"options":null},"Infinite Continues":{"note":"","data":["800A34F1 0063"],"options":null},"Juno\\Access\\All Keys":{"note":"","data":["81208B18 FFF7"],"options":null},"Juno\\Access\\All Objects":{"note":"","data":["81208B1A FFFF"],"options":null},"Juno\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["80208ABC 00FF","80208ABD 00FF"],"options":null},"Juno\\All Single Player Levels Unlocked":{"note":"","data":["80208B16 00FF","80208B17 00FF"],"options":null},"Juno\\Full \u0026 Max Health":{"note":"","data":["80208AB5 000C","80208AB2 0040"],"options":null},"Juno\\Infinite\\Max Ammo All Guns":{"note":"","data":["50000302 0000","81208AC6 03E7","50000802 0000","81208ACC 03E7","50000402 0000","81208ADC 03E7"],"options":null},"Juno\\Infinite\\Mizar Tokens":{"note":"","data":["81208AC4 03E7"],"options":null},"Juno\\Max Blue \u0026 White Heads":{"note":"","data":["81208ABA 03E7","81208AB8 03E7"],"options":null},"Lupus\\Access\\All Keys":{"note":"","data":["81208B8E FF70"],"options":null},"Lupus\\Access\\All Objects":{"note":"","data":["81208B90 FFFF"],"options":null},"Lupus\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["80208B32 00FF","80208B33 00FF"],"options":null},"Lupus\\All Single Player Levels Unlocked":{"note":"","data":["80208B8C 00FF","80208B8D 00FF"],"options":null},"Lupus\\Full \u0026 Max Health":{"note":"","data":["80208B2B 000C","80208B28 0040"],"options":null},"Lupus\\Infinite\\Max Ammo All Guns":{"note":"","data":["50000302 0000","81208B3C 03E7","50000802 0000","81208B42 03E7","50000402 0000","81208B52 03E7"],"options":null},"Lupus\\Infinite\\Mizar Tokens":{"note":"","data":["81208B3A 03E7"],"options":null},"Lupus\\Max\\Blue \u0026 White Heads":{"note":"","data":["81208B30 03E7","81208B2E 03E7"],"options":null},"Tribals\\Gold Wood\\Have All Tribals":{"note":"","data":["802088E4 000F"],"options":null},"Tribals\\Gold Wood\\Have No Tribals Remaining":{"note":"","data":["802088E6 0000"],"options":null},"Tribals\\Gold Wood\\No Tribals Killed":{"note":"","data":["802088E5 0000"],"options":null},"Vela\\Access\\All Keys":{"note":"","data":["81208AA2 FF70"],"options":null},"Vela\\Access\\All Objects":{"note":"","data":["81208AA4 FFFF"],"options":null},"Vela\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["80208A46 00FF","80208A47 00FF"],"options":null},"Vela\\All Single Player Levels Unlocked":{"note":"","data":["80208AA0 00FF","80208AA1 00FF"],"options":null},"Vela\\Full \u0026 Max Health":{"note":"","data":["80208A3F 000C","80208A3C 0040"],"options":null},"Vela\\Infinite\\Max Ammo All Guns":{"note":"","data":["50000302 0000","81208A50 03E7","50000802 0000","81208A56 03E7","50000402 0000","81208A66 03E7"],"options":null},"Vela\\Infinite\\Mizar Tokens":{"note":"","data":["81208A4E 03E7"],"options":null},"Vela\\Max\\Blue \u0026 White Heads":{"note":"","data":["81208A44 03E7","81208A42 03E7"],"options":null},"[Resolution Fix]":{"note":"","data":["800FE6F2 0003","800FE6DE 0003","800FEDEA 00D0"],"options":null}},"68E8A875-0CE7A486-C:50":{"Always Special\\Player 1":{"note":"","data":["800F9D35 0008"],"options":null},"Always Special\\Player 2":{"note":"","data":["800FA0E5 0008"],"options":null},"Always Special\\Player 3":{"note":"","data":["800FA495 0008"],"options":null},"Always Special\\Player 4":{"note":"","data":["800FA845 0008"],"options":null},"Character Select\\Player 1":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890F9D36 0240","890F9D60 42B4","8107E8B2 ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 2":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA0E6 0240","890FA110 42B4","8107E8B6 ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 3":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA496 0240","890FA4C0 42B4","8107E8BA ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 4":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA846 0240","890FA870 42B4","8107E8BE ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Extra Characters \u0026 Modes":{"note":"","data":["8107F07C FFFF"],"options":null},"Get Title Belt In 1-Match":{"note":"","data":["80038AAB 0008"],"options":null},"Infinite Time":{"note":"","data":["800FAF87 0000"],"options":null},"Infinite Time Out Of Ring":{"note":"","data":["800FACE8 0014"],"options":null},"Spirit Select\\Player 1":{"note":"","data":["800F9D25 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 2":{"note":"","data":["800FA0D5 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 3":{"note":"","data":["800FA485 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 4":{"note":"","data":["800FA835 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Ultimate Code\\Player 1":{"note":"","data":["800F9D24 0064"],"options":null},"Ultimate Code\\Player 2":{"note":"","data":["800FA0D4 0064"],"options":null},"Ultimate Code\\Player 3":{"note":"","data":["800FA484 0064"],"options":null},"Ultimate Code\\Player 4":{"note":"","data":["800FA834 0064"],"options":null},"Weapon Select\\Player 1":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800F9D31 0003","800F98E1 00??","800F98E2 0000","800F99A0 0000"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 2":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA0E1 0003","800F9911 00??","800F9912 0001","800F99A1 0001"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 3":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA491 0003","800F9941 00??","800F9942 0002","800F99A2 0002"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 4":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA841 0003","800F9971 00??","800F9972 0003","800F99A3 0003"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}}},"68FCF726-49658CBC-C:50":{"Have All Extras Open":{"note":"This Code opens all extra stages in VS Battles,Team Battle 1P, Team Battles VS,Tag Battle and Practice Modes. Extra Male and Female Body in Create A Fighter Character and Have Extra Characters (Gouriki \u0026 Reiji)","data":["8009E31F 00FF"],"options":null},"Music Modifier":{"note":"","data":["8009E21E 00??"],"options":{"Monaural":"01","Music Off":"02","Stereo":"00"}},"Player 1\\Character Modifier":{"note":"This Allows you to play as any Character you choose in any Mode","data":["80105001 00??"],"options":{"Azami":"00","Gouriki":"08","Hikari":"0B","Invisible Fighter":"0C","Kai":"03","Kaoru":"07","Kengon":"05","Kyeya":"06","Miki":"02","Reiji":"09","Sakai":"04","Serina":"01","Yami":"0A"}},"Player 1\\Infinite Energy":{"note":"","data":["81105026 03E8"],"options":null},"Player 1\\Need 1 Round to Win":{"note":"","data":["D009E334 0000","8009E334 0001"],"options":null},"Player 1\\Player 2 Has No Energy":{"note":"Press C-Button Up and Player 2 will lose All Health resulting in a Instant K.O.","data":["D0044461 0008","8111B3BE 0000"],"options":null},"Player 1\\Player 2 Never Wins":{"note":"","data":["8009E3F5 0000"],"options":null},"Player 2\\Character Modifier":{"note":"This Allows you to play as any Character you choose in any Mode","data":["8011B399 00??"],"options":{"Azami":"00","Gouriki":"08","Hikari":"0B","Invisible Fighter":"0C","Kai":"03","Kaoru":"07","Kengon":"05","Kyeya":"06","Miki":"02","Reiji":"09","Sakai":"04","Serina":"01","Yami":"0A"}},"Player 2\\Infinite Energy":{"note":"","data":["8111B3BE 03E8"],"options":null},"Player 2\\Need 1 Round to Win":{"note":"","data":["D009E335 0000","8009E335 0001"],"options":null},"Player 2\\Player 1 Has No Energy":{"note":"Press C-Button Up and Player 1 will lose All Health resulting in a Instant K.O.","data":["D0044467 0008","81105026 0000"],"options":null},"Player 2\\Player 1 Never Wins":{"note":"","data":["8009E3F4 0000"],"options":null}},"69256460-B9A3F586-C:45":{"Max Money\\Player 1":{"note":"","data":["81058122 FFFF"],"options":null},"Max Money\\Player 2":{"note":"","data":["81058124 FFFF"],"options":null},"Max Money\\Player 3":{"note":"","data":["81058126 FFFF"],"options":null}},"693BA2AE-B7F14E9F-C:45":{"Always Have Wallet Size":{"note":"","data":["8011AD22 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C8B65 0010","8111BFE6 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset,","data":["8011BB69 00FF","8011BFDF 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C8D75 0000","8011C093 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["80025CC4 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011AD06 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011AD07 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011AD08 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011AD09 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023EFBF 0020","8023EFC5 0033"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F3D38 0005","801F3EF8 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["8011AD22 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011AD23 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011AD21 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111AD1C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111AD24 30FF","8111AD26 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011ACF8 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011ACFE 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011AD04 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011ACFC 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011ACF6 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011AD00 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011ACF5 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011ACF4 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011ACF7 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011ACFA 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011ACFD 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011AD01 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011AD02 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011ACF9 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011ACFF 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011AD05 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011AD03 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011ACFB 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011AD0F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011AD28 0007","8011AD29 0007","8011AD2A 0007","8011AD2B 0007","8011AD2C 0007","8011AD2D 0007","8011AD2E 0007","8011AD2F 0007","8011AD30 0007","8011AD31 0007","8011AD32 0007","8011AD3F 0009","8011AD40 0009","8011AD41 0009","8011AD42 0009","8011AD43 0009","8011AD49 0009","8011AD4C 0009","8011AD47 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011AD14 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011AD0E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011AD0D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011AD12 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011AD0C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111ACB0 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011ACB9 0008","8011ACBA 0001","8011ACBC 0001","8011ACB3 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011AD1A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111C04C 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011C211 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011C215 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C8D75 0020","811DB350 40CB","D01C8D75 0000","811DBB72 000D","8011ACF0 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011AD4F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011AD51 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111ACAE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111C048 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C8D75 0020","811DBB72 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C8D75 0020","811DB350 40CB"],"options":null},"Press L+R For FMV Select":{"note":"Hold down `L+R' after the Nintendo logo is spinning to see your favourite FMV","data":["D01C8D75 0030","8011AC83 00A0","D01C8D75 0030","8011AC8B ????"],"options":{"anondorf FMV":"F600","ire FMV":"F50F","lanet Making FMV":"F400","nding":"F80E","ore Triforce FMV":"F700","riforce FMV":"F200"}},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C8D75 0010","8011AC87 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111AC8C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011AD0A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011AD0B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011ACF0 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011ACBE 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111BEA2 0000","8111BEA4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"693BA2AE-B7F14E9F-C:4A":{"Always Have Wallet Size":{"note":"","data":["8011AD22 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C8B65 0010","8111BFE6 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011BB69 00FF","8011BFDF 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C8D75 0000","8011C093 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest 01).","data":["80025CC4 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011AD06 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011AD07 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011AD08 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011AD09 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801D927A 0006","801F28B8 0001","801EF338 0001"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.If you Use Black Gauntlets,They are as strong as the Golden Gauntlets. This code also gives you the Silver Scale and the Golden Scale and unlimited rupees.","data":["8011AD22 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011AD23 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011AD21 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111AD1C 7777"],"options":null},"Have\\All Quest/Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111AD24 30FF","8111AD26 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011ACF8 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011ACFE 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011AD04 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011ACFC 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011ACF6 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011AD00 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011ACF5 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011ACF4 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011ACF7 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011ACFA 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011ACFD 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011AD01 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011AD02 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011ACF9 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011ACFF 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011AD05 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011AD03 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011ACFB 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011AD0F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011AD28 0007","8011AD29 0007","8011AD2A 0007","8011AD2B 0007","8011AD2C 0007","8011AD2D 0007","8011AD2E 0007","8011AD2F 0007","8011AD30 0007","8011AD31 0007","8011AD32 0007","8011AD3F 0009","8011AD40 0009","8011AD41 0009","8011AD42 0009","8011AD43 0009","8011AD49 0009","8011AD4C 0009","8011AD47 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011AD14 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011AD0E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011AD0D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011AD12 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011AD0C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111ACB0 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011ACB9 0008","8011ACBA 0001","8011ACBC 0001","8011ACB3 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011AD1A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111C04C 0001"],"options":null},"Infinite\\Timers\\All other Timers":{"note":"This cheat works on all Race Timers.Under Water with iron Boots etc.","data":["8011C051 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011C055 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C8D75 0020","811DB350 40CB","D01C8D75 0000","811DBB72 000D","8011ACF0 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011AD4F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011AD51 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111ACAE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111C048 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C8D75 0020","811DBB72 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C8D75 0020","811DB350 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C8D75 0010","8011AC87 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111AC8C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011AD0A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011AD0B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011ACF0 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011ACBE 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111BEA2 0000","8111BEA4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"69458B9E-FC95F936-C:4A":{"Have All\\Cups Select":{"note":"","data":["50002C02 0000","800CD611 00??"],"options":{"Bronze Cup":"02","Gold Cup":"00","None (Default)":"04","Silver Cup":"01"}},"Have All\\Points":{"note":"","data":["810D96E0 03E7"],"options":null},"Have All\\RB Medals":{"note":"","data":["810D96F0 03E7"],"options":null},"Infinite\\Credits":{"note":"","data":["800BE145 0005"],"options":null},"Infinite\\Timer":{"note":"","data":["810D9788 44E9"],"options":null},"Infinite\\Turbos":{"note":"Only turn this on ingame or it will freeze the game","data":["D00F3456 0020","800CD791 00??"],"options":{"Off":"00","On":"08"}},"Laps To Race":{"note":"Here you can select what Turbo feature you prefer.","data":["800C9009 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","7 Laps":"07","8 Laps":"08","9 Laps":"09","Laps":"06"}},"[Cheat Menu]":{"note":"Press Pause to access cheats.","data":["800CD789 00FF","800CD78A 00FF","800CD78B 00FF"],"options":null},"[Press F9]\\Enable All Courses":{"note":"","data":["890CD5F2 0B00","890CD5F4 0B00","890CD5F6 0B00"],"options":null},"[Press F9]\\Extra Characters":{"note":"","data":["890C6ADF 01FF"],"options":null},"[Press F9]\\Progress 100%":{"note":"","data":["50000801 0000","880CD600 0003","50000801 0000","880CD601 00FF"],"options":null}},"69AE0438-2C63F3F3-C:4A":{"All Equipment Upgrades":{"note":"","data":["801EF77D 0023","811EF7CA 201B"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D01FBC91 0000","801EF712 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Have All\\Masks":{"note":"","data":["801EF798 005A","801EF799 0055","801EF79A 0063","801EF79B 0061","801EF79C 005C","801EF79D 004E","801EF79E 0056","801EF79F 0062","801EF7A0 0054","801EF7A1 005E","801EF7A2 0064","801EF7A3 004F","801EF7A4 0058","801EF7A5 0059","801EF7A6 0053","801EF7A7 005B","801EF7A8 0052","801EF7A9 0050","801EF7AA 005F","801EF7AB 005D","801EF7AC 0057","801EF7AD 0060","801EF7AE 0065","801EF7AF 0051"],"options":null},"Have All\\Quest Status Items":{"note":"","data":["801EF7CD 0005","811EF7CE F7CF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801EF782 0002"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801EF783 0003"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801EF784 0004"],"options":null},"Have\\Bombchu":{"note":"","data":["801EF787 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801EF786 0006"],"options":null},"Have\\Bottle Modifier\\1":{"note":"","data":["801EF792 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\2":{"note":"","data":["801EF793 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\3":{"note":"","data":["801EF794 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\4":{"note":"","data":["801EF795 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\5":{"note":"","data":["801EF796 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\6":{"note":"","data":["801EF797 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Deku Nuts":{"note":"","data":["801EF789 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801EF788 0008"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801EF790 0010"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801EF781 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801EF78F 000F"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801EF78E 000E"],"options":null},"Have\\Magic Beans":{"note":"","data":["801EF78A 000A"],"options":null},"Have\\Ocarina of Time":{"note":"","data":["801EF780 0000"],"options":null},"Have\\Pictograph":{"note":"","data":["801EF78D 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801EF78C 000C"],"options":null},"Infinite\\Arrows":{"note":"","data":["801EF7B1 0063"],"options":null},"Infinite\\Bombchus":{"note":"","data":["801EF7B7 0063"],"options":null},"Infinite\\Bombs":{"note":"","data":["801EF7B6 0063"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801EF7B9 0063"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801EF7B8 0063"],"options":null},"Infinite\\Health":{"note":"","data":["811EF746 0140"],"options":null},"Infinite\\Hearts Options":{"note":"","data":["811EF744 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Magic Beans":{"note":"","data":["801EF7BA 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801EF749 0060","811EF750 0101"],"options":null},"Infinite\\Powder Kegs":{"note":"","data":["801EF7BC 0063"],"options":null},"Infinite\\Rupees":{"note":"","data":["811EF74A 03E7"],"options":null},"Play As":{"note":"","data":["801EF730 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03E6FCB 0020","814002C8 40CB"],"options":null},"Replace Sword With":{"note":"","data":["801EF75C 00??"],"options":{"Deity Link's Sword":"10","Fire Arrow w/ Bow":"02","Hero's Bow":"00","Ice Arrow w/ Bow":"03","Light Arrow w/ Bow":"04"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01FBC96 0008","811EF726 FFFD","D01FBC96 0004","811EF726 0000","D01FBC96 0002","811EF726 FFFE"],"options":null},"Warp Modifier":{"note":"Put this code on and press the start button and it will now take where you wanted to go, turn it back off after you have got there.","data":["D03E6FCA 0000","803FF805 0001","813FF80A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"6A121930-665CC274-C:45":{"Away Team\\Infinite Time-Outs":{"note":"Do not use this with the No Time Out's Cheat","data":["8013C2D7 0009","80140863 0009"],"options":null},"Away Team\\No Time-Outs":{"note":"Do not use this with the Infinite Time Out's Cheat","data":["8013C2D7 0000","80140863 0000"],"options":null},"Away Team\\Scores":{"note":"","data":["8013C2B3 00??"],"options":{"10 Points":"0A","100 Points":"64","20 Points":"14","200 Points":"C8","250 Points":"FA","40 Points":"28","60 Points":"3C","80 Points":"50","No Points":"00"}},"Create A Player\\Max 3 Point":{"note":"","data":["8013FF99 0063"],"options":null},"Create A Player\\Max Ball Control":{"note":"","data":["8013FFA1 0063"],"options":null},"Create A Player\\Max Block":{"note":"","data":["8013FF9D 0063"],"options":null},"Create A Player\\Max Field Goal":{"note":"","data":["8013FF98 0063"],"options":null},"Create A Player\\Max Free Throw":{"note":"","data":["8013FF9A 0063"],"options":null},"Create A Player\\Max Power":{"note":"","data":["8013FFA2 0063"],"options":null},"Create A Player\\Max Rebound":{"note":"","data":["8013FF9C 0063"],"options":null},"Create A Player\\Max Speed":{"note":"","data":["8013FF9F 0063"],"options":null},"Create A Player\\Max Steal":{"note":"","data":["8013FF9E 0063"],"options":null},"Home Team\\Infinite Time-Outs":{"note":"Do not use this with the No Time Out's Cheat","data":["8013C2D6 0009","80140862 0009"],"options":null},"Home Team\\No Time-Outs":{"note":"Do not use this with the Infinite Time Out's Cheat","data":["8013C2D6 0000","80140862 0000"],"options":null},"Home Team\\Scores":{"note":"","data":["8013C2B1 00??"],"options":{"10 Points":"0A","100 Points":"64","20 Points":"14","200 Points":"C8","250 Points":"FA","40 Points":"28","60 Points":"3C","80 Points":"50","No Points":"00"}},"No Shot Clock":{"note":"","data":["81140E1E FFFF"],"options":null},"Options\\27 Time Out Limit":{"note":"","data":["8013D867 00??"],"options":{"No":"01","Yes":"00"}},"Options\\3 Second Violation":{"note":"","data":["80144994 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\5 Second Violation":{"note":"","data":["80144993 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\Back Court":{"note":"","data":["80144996 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}},"Options\\Camera View":{"note":"","data":["8013D86A 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\FT. Penalty Situations":{"note":"","data":["80144999 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}},"Options\\Foul Out":{"note":"","data":["80144995 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}},"Options\\Goal Tending":{"note":"","data":["80144998 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}},"Options\\Level":{"note":"","data":["8013D864 00??"],"options":{"Enjoy":"00","Exciting":"01","Super Challenge":"02"}},"Options\\Out Of Bounds":{"note":"","data":["80144990 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\Player Display":{"note":"","data":["8013D869 00??"],"options":{"Name":"00","None":"02","Number":"01"}},"Options\\Quarter Length":{"note":"","data":["8013D865 00??"],"options":{"12:00":"03","3:00":"00","5:00":"01","8:00":"02"}},"Options\\Replay":{"note":"","data":["8013D868 00??"],"options":{"No":"01","Yes":"00"}},"Options\\Second Violation":{"note":"","data":["80144992 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\Shot Clock Violation":{"note":"","data":["80144991 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\Stamina":{"note":"","data":["8013D866 00??"],"options":{"Off":"01","On":"00"}},"Options\\Traveling":{"note":"","data":["80144997 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}}},"6A162FF2-2093704C-C:50":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["811659D4 FFFF","811659D6 FFFF","811659DA 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FB5C 270F"],"options":null}},"6AA4DDE7-E3E2F4E7-C:45":{"All Batteries Have Bad Aim":{"note":"","data":["800A1F7C 0001"],"options":null},"All Batteries Have Hellfire":{"note":"","data":["800A34A2 0001"],"options":null},"All Battletanx Are Invincible":{"note":"","data":["8009843D 0001"],"options":null},"Area 51\\Mines Are Invisible":{"note":"","data":["802D5ACB 00CC"],"options":null},"Area 51\\Mines Are Toxic Waste":{"note":"","data":["802D5ACB 007C"],"options":null},"Area 51\\Shock Wave Weapons":{"note":"","data":["802D5A7D 00AF"],"options":null},"Area 51\\Turn Ammo Pickup Picture To Flamer Picture":{"note":"","data":["802D5AAF 00AC"],"options":null},"Area 51\\Turn Nuke Into Toxic Waste Nuke":{"note":"","data":["802D5A7B 007C"],"options":null},"Auto Lose All Queen Lord Levels":{"note":"","data":["800A6746 0001"],"options":null},"Auto Win All Queen Lord Levels":{"note":"","data":["800A6745 0001"],"options":null},"Buildings Fall Fast":{"note":"","data":["80091BBC 0001"],"options":null},"Buildings Implode Instead Of Explode, And Remain Afire":{"note":"","data":["8009298E 0001"],"options":null},"Can't Pick Up Queen Lords":{"note":"","data":["8008A2F0 0001"],"options":null},"Frogs":{"note":"","data":["80135775 0001"],"options":null},"Full Control Of Tank In Bonus,Extra Side Player In Battlelord Multi!":{"note":"","data":["800971EE 0001"],"options":null},"Have All Levels":{"note":"","data":["80135767 0001"],"options":null},"Have Storm Ravens Gang":{"note":"","data":["80135773 0001"],"options":null},"Hurl Mode":{"note":"","data":["8013576B 0001"],"options":null},"In Campaign 3 Enemy Tanks May Join You":{"note":"","data":["802D9AAC 0000","802DB3D4 0000","802DCCFC 0000"],"options":null},"Invincible":{"note":"","data":["80135763 0001"],"options":null},"Invisible":{"note":"","data":["8013576A 0001"],"options":null},"Laser Fire Invisible":{"note":"","data":["800846ED 0001"],"options":null},"MultiPlayer\\Player 2\\One Hit And You Bite It":{"note":"","data":["802D9AC7 0001"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 1\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AD7EE FFFF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 1\\Infinite Secondary Weapons In Battlelord":{"note":"","data":["802D8609 00FF","802D860B 00FF","802D860D 00FF","802D860F 00FF","802D8611 00FF","802D8615 00FF","802D8617 00FF","802D8619 00FF","802D861B 00FF","802D861D 00FF","802D861F 00FF","802D8621 00FF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 2\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AE186 FFFF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 2\\Infinite Secondary Weapons In Battlelord":{"note":"","data":["802D9F31 00FF","802D9F33 00FF","802D9F35 00FF","802D9F37 00FF","802D9F39 00FF","802D9F3D 00FF","802D9F3F 00FF","802D9F41 00FF","802D9F43 00FF","802D9F45 00FF","802D9F47 00FF","802D9F49 00FF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 3\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AEB1E FFFF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 4\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AF4B6 FFFF"],"options":null},"Multiplayer\\Deathmatch, Frenzy \u0026 Convoy Modes\\Player 1\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AD322 FFFF"],"options":null},"Multiplayer\\Deathmatch, Frenzy \u0026 Convoy Modes\\Player 2\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811ADCBA FFFF"],"options":null},"Multiplayer\\Deathmatch, Frenzy \u0026 Convoy Modes\\Player 3\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AE652 FFFF"],"options":null},"Multiplayer\\Deathmatch, Frenzy \u0026 Convoy Modes\\Player 4\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AEFEA FFFF"],"options":null},"Multiplayer\\Hold 'Em Mode\\Player 1\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AD7EE FFFF"],"options":null},"Multiplayer\\Hold 'Em Mode\\Player 2\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AE186 FFFF"],"options":null},"Multiplayer\\Hold 'Em Mode\\Player 3\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AEB1E FFFF"],"options":null},"Multiplayer\\Hold 'Em Mode\\Player 4\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AF4B6 FFFF"],"options":null},"Multiplayer\\Plater 1\\One Hit And You Bite It":{"note":"","data":["802D819F 0001"],"options":null},"Multiplayer\\Player 1\\Always Has Cloaked On":{"note":"","data":["802D818D 0001"],"options":null},"Multiplayer\\Player 1\\Always Have Radar":{"note":"","data":["802D8195 0080"],"options":null},"Multiplayer\\Player 1\\Goalith Tank On Tracks Body Modifier":{"note":"","data":["802D86A3 00??"],"options":{"Big Tank":"02","Motor Tank":"01","Normal Tank":"00"}},"Multiplayer\\Player 1\\Infinite Ammo":{"note":"","data":["802D8603 00FF"],"options":null},"Multiplayer\\Player 1\\Main Weapon":{"note":"","data":["802D85EB 00??"],"options":{"?":"09","Big Tank Shells":"03","Cloaking":"0F","Gernades":"07","Gun Buddies":"0D","Health":"10","Laser":"05","Mines":"0C","Motor Tank Shells":"02","Normal Tank Shells":"01","Nothing":"00","Nuclear Lasers":"0A","Nuke":"06","Remote Rockets":"0B","Rockets":"04","Smoke Screen":"0E"}},"Multiplayer\\Player 1\\Secondary Weapon":{"note":"","data":["802D85F7 00??"],"options":{"?":"09","Big Tank Shells":"03","Cloaking":"0F","Gernades":"07","Gun Buddies":"0D","Health":"10","Laser":"05","Mines":"0C","Motor Tank Shells":"02","Normal Tank Shells":"01","Nothing":"00","Nuclear Lasers":"0A","Nuke":"06","Remote Rockets":"0B","Rockets":"04","Smoke Screen":"0E"}},"Multiplayer\\Player 1\\Tank Body Modifier":{"note":"","data":["802D819B 00??"],"options":{"Big Tank":"02","Motor Tank":"01","Normal Tank":"00"}},"Multiplayer\\Player 1\\Tank Turret Always On (Use Right/Left C Button)":{"note":"","data":["802DE7FB 0011","802DE7FF 0002"],"options":null},"Multiplayer\\Player 1\\Your Goalith Tank On Tracks Always Has Cloaked On":{"note":"","data":["802D8695 0001"],"options":null},"Multiplayer\\Player 1\\Your Goalith Tank On Tracks Always Has Radar":{"note":"","data":["802D869D 0080"],"options":null},"Multiplayer\\Player 2\\Always Has Cloaked On":{"note":"","data":["802D9AB5 0001"],"options":null},"Multiplayer\\Player 2\\Always Have Radar":{"note":"","data":["802D9ABD 0080"],"options":null},"Multiplayer\\Player 2\\Goalith Tank On Tracks Body Modifier":{"note":"","data":["802D9FCB 00??"],"options":{"Big Tank":"02","Motor Tank":"01","Normal Tank":"00"}},"Multiplayer\\Player 2\\Infinite Ammo":{"note":"","data":["802D9F2B 00FF"],"options":null},"Multiplayer\\Player 2\\Main Weapon":{"note":"","data":["802D9F13 00??"],"options":{"?":"09","Big Tank Shells":"03","Cloaking":"0F","Gernades":"07","Gun Buddies":"0D","Health":"10","Laser":"05","Mines":"0C","Motor Tank Shells":"02","Normal Tank Shells":"01","Nothing":"00","Nuclear Lasers":"0A","Nuke":"06","Remote Rockets":"0B","Rockets":"04","Smoke Screen":"0E"}},"Multiplayer\\Player 2\\Secondary Weapon":{"note":"","data":["802D9F1F 00??"],"options":{"?":"09","Big Tank Shells":"03","Cloaking":"0F","Gernades":"07","Gun Buddies":"0D","Health":"10","Laser":"05","Mines":"0C","Motor Tank Shells":"02","Normal Tank Shells":"01","Nothing":"00","Nuclear Lasers":"0A","Nuke":"06","Remote Rockets":"0B","Rockets":"04","Smoke Screen":"0E"}},"Multiplayer\\Player 2\\Tank Body Modifier":{"note":"","data":["802D9AC3 00??"],"options":{"Big Tank":"02","Motor Tank":"01","Normal Tank":"00"}},"Multiplayer\\Player 2\\Tank Turret Always On":{"note":"","data":["802DEB43 0011","802DEB47 0002"],"options":null},"Multiplayer\\Player 2\\Your Goalith Tank On Tracks Always Has Cloaked On":{"note":"","data":["802D9FBD 0001"],"options":null},"Multiplayer\\Player 2\\Your Goalith Tank On Tracks Always Has Radar":{"note":"","data":["802D9FC5 0080"],"options":null},"Multiplayer\\Player 3\\Tank Turret Always On":{"note":"","data":["802DEE8B 0011","802DEE8F 0002"],"options":null},"Multiplayer\\Player 4\\Tank Turret Always On":{"note":"","data":["802DF1D3 0011","802DF1D7 0002"],"options":null},"Nuke Blast Leaves Air Yellow":{"note":"","data":["800F3333 0001"],"options":null},"Nuke Blast Pink":{"note":"","data":["8008055F 0001"],"options":null},"Regenerated Allied Tanks Are Indestrucible In Campaign":{"note":"","data":["8009FB2A 0001"],"options":null},"Run Story":{"note":"","data":["80135770 0001"],"options":null},"Shoot Through Walls":{"note":"","data":["8008E529 0001"],"options":null},"Slow Battle Tanks":{"note":"","data":["8009A56A 0001"],"options":null},"Start With All Weapons":{"note":"","data":["80135765 0001"],"options":null},"Toads":{"note":"","data":["80135776 0001"],"options":null},"Trippy":{"note":"","data":["80135771 0001"],"options":null},"Unlimited Ammo":{"note":"","data":["80135760 0001"],"options":null},"Unlimited Lives":{"note":"","data":["80135772 0001"],"options":null}},"6AECEC4F-F0924814-C:50":{"All Equipment Upgrades":{"note":"","data":["801E54ED 0023","811E553A 201B","801E54CC 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03DC90B 0000","801E5482 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801E5502 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801E5503 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801E5504 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801E5505 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801E5506 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801E5507 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801E54F5 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801E54FB 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801E5501 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Have Item Modifier":{"note":"","data":["801E5500 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\All Masks":{"note":"","data":["811E5508 3E39","811E550A 4745","811E550C 4032","811E550E 3A46","811E5510 3842","811E5512 4833","811E5514 3C3D","811E5516 373F","811E5518 3634","811E551A 4341","811E551C 3B44","811E551E 4935"],"options":null},"Have\\Bombchu":{"note":"","data":["801E54F7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801E54F6 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801E54F9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801E54F8 0008"],"options":null},"Have\\Fire Arrow":{"note":"","data":["801E54F2 0002"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801E5500 0010"],"options":null},"Have\\Have\\Ocarina of Time":{"note":"","data":["801E54F0 0000"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801E54F1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801E54FF 000F"],"options":null},"Have\\Ice Arrow":{"note":"","data":["801E54F3 0003"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801E54FE 000E"],"options":null},"Have\\Light Arrow":{"note":"","data":["801E54F4 0004"],"options":null},"Have\\Magic Beans":{"note":"","data":["801E54FA 000A"],"options":null},"Have\\Pictograph":{"note":"","data":["801E54FD 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801E54FC 000C"],"options":null},"Have\\QuestStatus Items":{"note":"","data":["801E553D 0005","811E553E F7CF"],"options":null},"Infinite\\Health":{"note":"","data":["811E54B6 03E7"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811E54B4 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"This is Infinite use of Bombs,Bombchus,Deku Sticks,Deku Nuts,Magic Beans,\u0026 Powder Kegs. But you must also put it's Have on to work.","data":["801E5521 0063","50000801 0000","801E5526 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801E54B9 0060","811E54C0 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811E54BA 03E7"],"options":null},"Play As":{"note":"","data":["801E54A0 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0378ECB 0020","813921A8 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You Have\\been warned.","data":["801E54CC 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F0496 0008","811E5496 FFFD","D01F0496 0004","811E5496 0000","D01F0496 0002","811E5496 FFFE"],"options":null},"Use all C Buttons":{"note":"","data":["811E9398 0000","811E939A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["803DC90A 0000","803F5165 0001","813F516A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"6B45223F-F00E5C56-C:45":{"Crunched Players":{"note":"","data":["810EA078 3F00"],"options":null},"Extra Teams":{"note":"","data":["800C7205 0001"],"options":null},"Get In Fights Constantly":{"note":"","data":["800A442E 0020"],"options":null},"Players\\Head Size":{"note":"","data":["810EA070 ????"],"options":{"Normal Size":"3F80","Very Large":"4080","Very Small":"3F00"}},"Players\\Height Size":{"note":"","data":["810EA074 ????"],"options":{"Giants":"4080","Large":"3FC0","Midgets":"3F00","Normal Size":"3F80"}},"Team 1\\Score pts":{"note":"","data":["800E6AB1 00??"],"options":{"30 Points":"1E","50 Points":"23","75 Points":"4B","99 Points":"63","Zero Points":"00"}},"Team 2\\Score pts":{"note":"","data":["800E9F8D ????"],"options":{"0 Points":"2305","5 Points":"4B07","9 Points":"6309","ero Points":"0000"}}},"6B700750-29D621FE-C:45":{"1 Win to Win\\Player 1":{"note":"","data":["D0138B47 0000","80138B47 0001"],"options":null},"1 Win to Win\\Player 2":{"note":"","data":["D0138B43 0000","80138B43 0001"],"options":null},"Extra Characters":{"note":"","data":["8007F9F8 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["8008B1E7 0064"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["8008AE5F 0064"],"options":null},"Infinite Time":{"note":"","data":["81138B2A 0708"],"options":null},"Infinite Time To Choose Character":{"note":"","data":["D01340F6 0001","811340F6 0260"],"options":null},"No Health\\Player 1":{"note":"","data":["8008B1E7 0000"],"options":null},"No Health\\Player 2":{"note":"","data":["8008AE5F 0000"],"options":null},"P2/CPU Never Wins":{"note":"","data":["80138B43 0000"],"options":null},"R Button Health Restore\\Player 1":{"note":"","data":["D007CD2B 0010","8008B1E7 0064"],"options":null},"Sudden Death Mode\\Player 1":{"note":"","data":["D1138B2A 0120","8008B1E7 0001"],"options":null},"Sudden Death Mode\\Player 2":{"note":"","data":["D1138B2A 0120","8008AE5F 0001"],"options":null},"Z Trigger Deathblow\\Player 1":{"note":"","data":["D007CD2A 0020","8008AE5F 0000"],"options":null}},"6BFF4758-E5FF5D5E-C:4A":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118B2D0 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118B2D2 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118B2D4 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118B2D6 0003"],"options":null},"Have Bonus Mode and All Gold Cups":{"note":"","data":["8018C728 00??","8018C729 00??","8018C72A 00??","8018C72B 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["80163655 00??","80163682 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["80163735 00??","80163762 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["80163815 00??","80163842 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["801638F5 00??","80163922 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["801639D5 00??","80163A02 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["80163AB5 00??","80163AE2 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818C80F 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F73C5 0020","810F7478 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F73D5 0020","810F8250 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F73E5 0020","810F9028 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F73F5 0020","810F9E00 4000"],"options":null}},"6C2C6C49-9BE5CA66-C:45":{"Extra Bonuses":{"note":"","data":["810EBA6A 270F"],"options":null},"Fake Max Spin Bar?":{"note":"","data":["800EBA43 0009"],"options":null},"Infinite\\Crate Attempts":{"note":"","data":["800A9D1B 0007"],"options":null},"Infinite\\Gold Pickups":{"note":"","data":["802EB9E8 0064"],"options":null},"Infinite\\Health":{"note":"","data":["800EBA47 0009"],"options":null}},"6C45B60C-DCE50E30-C:4A":{"Access All Boards \u0026 Characters":{"note":"","data":["800500C1 000C"],"options":null},"All Street Work Levels Unlocked":{"note":"","data":["50007801 0000","80050170 00??"],"options":{"Courses unlocked":"01","Courses unlocked with A rank":"05","Courses unlocked with B rank":"04","Courses unlocked with C rank":"03","Courses unlocked with S rank":"06"}},"Class Score Select":{"note":"","data":["8016609E 00??"],"options":{"Class A":"64","Class B":"40","Class C":"20","Class S":"FF"}},"Coin Perfect Select":{"note":"this is for Coin Mode to get Perfect Coin Collection Score straight away when you enter the level","data":["801660B3 00??"],"options":{"Giant House Level 1":"6E","Giant House Level 2":"77","Giant House Level 3":"72","Green Park Level 1":"14","Green park Level 2":"1A","Green park Level 3":"2B","Lost Forest Level 1":"4A","Lost Forest Level 2":"59","Lost Forest Level 3":"80","Snow Festival 64 Levels 1 2 \u0026 3":"7D","Sunset Island Level 1":"6F","Sunset Island Level 2":"74","Sunset Island Level 3":"81"}},"Infinite Time\\Attack Time Time 000000":{"note":"","data":["811137EA 0000"],"options":null},"Infinite Time\\Street Work \u0026 Coin":{"note":"","data":["801137E9 0028"],"options":null},"Infinite Time\\Time Attack":{"note":"","data":["801137EB 0000"],"options":null},"Infinite Turbo\\Player 1":{"note":"","data":["80166019 0009"],"options":null},"Infinite Turbo\\Player2":{"note":"","data":["80167991 0009"],"options":null},"Maxed Out Turbo Bar":{"note":"","data":["811656E8 429F","80166017 0051"],"options":null},"Options\\Camera Type Modifier":{"note":"","data":["810500A6 00??"],"options":{"Roll Off Far":"05","Roll Off Mid":"04","Roll Off Near":"03","Roll On Far":"02","Roll On Mid":"01","Roll On Near":"00"}},"Options\\DJ Function Modifier":{"note":"","data":["810500AC 00??"],"options":{"DJ Function Off":"00","DJ Function On":"01"}},"Options\\Music Modifier":{"note":"","data":["800500A9 00??"],"options":{"BGM Off":"00","BGM On":"FF"}},"Options\\Sound Effects Modifier":{"note":"","data":["810500AA 00??"],"options":{"SE Off":"00","SE On":"FF"}}},"6D8DF08E-D008C3CF-C:50":{"2 Player Championship Mode":{"note":"This lets player 2 play with you in championship mode so if you have a friend that you want to tag team up with in tag team championship now you can.","data":["810A755E 0002"],"options":null},"Always Special\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF9E 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2F6 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["D015A5D1 0015","8015B64E 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["D015A5D1 0015","8015B9A6 0004"],"options":null},"Auto-Pin\\Player 1":{"note":"Do not use with Cant Pin","data":["8016CE23 0003"],"options":null},"Auto-Pin\\Player 2":{"note":"Do not use with Cant Pin","data":["8016CE17 0003"],"options":null},"Auto-Pin\\Player 3":{"note":"Do not use with Cant Pin","data":["8016CE2F 0003"],"options":null},"Auto-Pin\\Player 4":{"note":"Do not use with Cant Pin","data":["8016CE3B 0003"],"options":null},"CPU To Human Control\\Player 1":{"note":"","data":["8015AF99 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 2":{"note":"","data":["8015B2F1 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 3":{"note":"","data":["8015B649 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 4":{"note":"","data":["8015B9A1 00??"],"options":{"CPU":"18","Human":"17"}},"Can't Pin\\Player 1":{"note":"Do not use with Auto Pin","data":["8016CE23 0004"],"options":null},"Can't Pin\\Player 2":{"note":"Do not use with Auto Pin","data":["8016CE17 0004"],"options":null},"Can't Pin\\Player 3":{"note":"Do not use with Auto Pin","data":["8016CE2F 0004"],"options":null},"Can't Pin\\Player 4":{"note":"Do not use with Auto Pin","data":["8016CE3B 0004"],"options":null},"Cannot Be Grabbed\\Player 1":{"note":"","data":["D115AEC6 0052","8115AEC6 0001","D115AEC6 00A1","8115AEC6 00C1"],"options":null},"Cannot Be Knocked Down\\Player 1":{"note":"","data":["D115AEC6 0031","8115AEC6 0001"],"options":null},"Cannot Be Punched\\Player 1":{"note":"","data":["D115AEC6 002D","8115AEC6 0001","D115AEC6 0035","8115AEC6 00C1"],"options":null},"Clock At 00:00":{"note":"","data":["8115AB1E 0000","810A99F2 0000"],"options":null},"Hacked Moves\\Capture Tazzplex":{"note":"Replaces: Capture Suplex P1 grabs P2's feet like a capture suplex, then lets go \u0026 does a Tazzplex.","data":["D106B454 3689","D106B456 0021","8106B460 00BC","D106B454 3689","D106B456 0021","8106B462 A5E2","D106B514 368A","D106B516 0021","8106B520 00BC","D106B514 368A","D106B516 0021","8106B522 B6BE"],"options":null},"Hacked Moves\\Dominator into HHH Facebuster":{"note":"Replaces: Dominator","data":["D106B454 3810","D106B456 005C","8106B560 011A","D106B454 3810","D106B456 005C","8106B562 A256","D106B514 3811","D106B516 005C","8106B520 011A","D106B514 3811","D106B516 005C","8106B522 ACB0","D106B454 3810","D106B456 0075","8115AF52 0000"],"options":null},"Hacked Moves\\Dragon Screw Stunner":{"note":"Dragon Screw 02 P1 does a Dragon Screw then picks up P2 (still holding his leg) and spins him around and gives him a Stone Cold Stunner","data":["D106B454 3749","D106B456 0094","8106B460 00E9","D106B454 3749","D106B456 0094","8106B462 B9BE","D106B514 374A","D106B516 0094","8106B520 00E9","D106B514 374A","D106B516 0094"],"options":null},"Hacked Moves\\Dragon Screw Suplex":{"note":"Replaces: Double Dragon Screw 02 P1 does a Dragon screw then picks then up (still holding their feet) and does a capture suplex.","data":["D106B454 3749","D106B456 007C","8106B460 00AD","D106B454 3749","D106B456 007C","8106B462 DB2A","D106B514 374A","D106B516 007C","8106B520 00AD","D106B514 374A","D106B516 007C","8106B522 EAE0","D106B454 3749","D106B456 00A5","8115AF52 0000","D106B514 374A","D106B516 00A5","8115B2AA 0000"],"options":null},"Hacked Moves\\Morality Check to Back of head":{"note":"Replaces: Back Clothesline P1 is immediately backed up and does the Morality Check to P2 in the back of the head (misses by a little)","data":["D106B454 3892","D106B456 0000","8106B460 00B3","D106B454 3892","D106B456 0000","8106B462 194C"],"options":null},"Hacked Moves\\Running Rock Bottom":{"note":"Replaces: Farooq Spinebuster P2 runs into P1 and P1 delivers a RockBottom to P2.","data":["D106B454 3A80","D106B456 0000","8106B460 00C1","D106B454 3A80","D106B456 0000","8106B462 F7A2","D106B514 3A81","D106B516 0000","8106B520 00C2","D106B514 3A81","D106B516 0000","8106B522 1210"],"options":null},"Hacked Moves\\Running Tazplex":{"note":"Replaces: Underhook Belly to Belly P2 runs into P1 and P1 does a Tazplex to P2.","data":["D106B454 3A7A","D106B456 0000","8106B460 00BC","D106B454 3A7A","D106B456 0000","8106B462 A51E","D106B514 3A7B","D106B516 0000","8106B520 00BC","D106B514 3A7B","D106B516 0000","8106B522 B5FA"],"options":null},"Have All\\Characters,Costumes, \u0026 Moves":{"note":"","data":["50000B02 0000","810BEE40 FFFF"],"options":null},"Infinite\\Money\\Championship Mode":{"note":"For Championship Mode","data":["8109940A FFFF"],"options":null},"Infinite\\Money\\Smackdown Mall Shop":{"note":"For Smackdown Mall Shop","data":["8114FAD6 FFFF"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF5F 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2B7 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["D015A5D1 0015","8015B60F 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["D015A5D1 0015","8015B967 00FF"],"options":null},"Novalty\\Truck In The Crowd":{"note":"","data":["81050110 0747","81050112 0748","81050114 0749","81050116 074A","81050118 074B","81050124 0A4B","81050126 0A43","81050128 0A4B","8105012A 0A43","8105012C 0A43","8105012E 0A43","8105011A 074C","8105011C 074D","81050130 0A43","8105011E 074E","81050132 0A43","81050120 0746","81050134 0A4B","81050122 0743","81050136 0A4B","D1064880 2000","8115AFB0 42EE","D1064880 2000","8115B308 42EE"],"options":null},"Play As\\Player 1\\Option 1":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 1\\Option 2":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 1\\Option 3":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 2\\Option 1":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 2\\Option 2":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 2\\Option 3":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 3\\Option 1":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 3\\Option 2":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 3\\Option 3":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 4\\Option 1":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 4\\Option 2":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 4\\Option 3":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Replace Raw War with\\BACKYARD ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105010E 0F76","8105010C 0F76","810482E8 002F","81050150 2CFD","810528F4 33FF","810528F6 33FF","81050152 2DC7","81050114 04F4","81050116 04F5","8105011E 04F3","81050128 07FF","8105012A 07FF","81050132 07FF","81079F48 400C","81079F5C 3F00","81079F70 3FFF","8107A024 4010","8107A038 3F00","8107A04C 4020","8107A060 3F84","8107A394 4012","8107A3A8 3F00","8107A3BC 4030","8107A3D0 3F84","8105042C 0949","81050436 07FF","81050438 07FF","8105043A 07FF","8105043C 0000","8105043E 07FF","81050440 0949","81050442 0949","81050430 0F76","81050128 07FF","8105012A 07FF","8105012C 0000","8105012E 07FF","81050130 07FF","81050132 07FF","81050134 0000","81050136 08F9","81050196 2CFD","81050194 09EF","81050192 0000","81050190 09EF","8116C49E 0019","8116C4B8 0004","8116C4DC C2E1","8116C4E0 42B4","810500FE 2D2D","81050100 2D2D","81050102 2D2D","81050400 2DC7","81050402 2DC7","81050404 2DC7","81050406 2DC7","81050408 2DC7","8105040A 2DC7","8105040C 2DC7","8105040E 2DC7","50001002 0000","810501B8 0000","50000402 0000","810501E0 0000","50000902 0000","81050262 0000","50001402 0000","81050290 0000","50002C02 0000","810502EC 0000","8107941C 3FE0","81079428 3FFF","810500EC 06FE","810500EE 06FD","810500F8 07FF","810500FA 0997","81050110 06FC","81050112 06FB","8105011A 06FF","8105011C 06FA","81052CF0 2CC9","81052CF4 2D1B","81052CD0 2CD1","81052CD4 0963","81052C84 2CBF","81052C8A 0961","81052CB8 2CC4","81052CBC 2DD7","81052CC8 2CD1","81052CCC 2CFB","81052C78 2CBC","81052C80 2D31","81052CF8 2CC1","81052D00 2DD7"],"options":null},"Replace Raw War with\\BACKYARD WEAK":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0E88","8105042E 2D0D","81050430 2D0D","81050432 2D0D","81050434 2D0D","81050436 07FD","8105043A 2CFB","8105043C 2D0D","8105043E 2D0D","81050440 2D0D","81050442 2D0D","810500E8 2D0D","8105010E 2D0D","8105010C 2D0D","81050150 2D0D","81050196 2CFB","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81050136 2CFB","81050400 2D0D","81050402 2D0D","81050404 2D0D","81050406 2D0D","81050408 2D0D","8105040A 2D0D","8105040C 2D0D","8105040E 2D0D","810528F4 2D0D","810528F6 2D0D","81052CE8 2CC9","81052CEC 2D2D"],"options":null},"Replace Raw War with\\BARBEDWIRE ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 2CFB","8105042E 2CFB","81050430 2CFB","81050432 2CFB","81050434 2CFB","81050436 2CFB","81050438 2CFB","8105043A 2CFB","8105043C 2CFB","8105043E 2CFB","81050440 2CFB","81050442 2CFB","810500E8 2CFB","8105010E 2CFB","8105010C 2CFB","81050150 2CFB","81050196 2CFB","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81050136 2CFB","810528F4 DDDD","810528F6 DDDD","81052CE8 2CCA","81052CEC 2CFB","81050400 2CFB","81050402 2CFB","81050404 2CFB","81050406 2CFB","81050408 2CFB","8105040A 2CFB","8105040C 2CFB","8105040E 2CFB"],"options":null},"Replace Raw War with\\BARBEDWIRE ROPES":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050110 04F3","81050112 04F4","81050114 04F5","81050116 04F3","81050118 04F4","8105011A 04F5","8105011C 04F3","8105011E 04F4","81050120 04F5","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81079D90 3F6C","81079D94 3F48","81079DA4 3D10","81079DB8 3F71","81079E6C 3F6C","81079E80 3D10","81079E90 3F47","81079F48 3F6C","81079F4C BF4C","81079F5C 3D10","81079F70 3F71","8107A024 3F6C","8107A028 3F28","8107A038 3D10","8107A04C 3F71","8107A100 3F6C","8107A114 3D10","8107A124 3F23","8107A1DC 3F6C","8107A1E0 BF2A","8107A1F0 3D10","8107A204 3F71","8107A2B8 3F6C","8107A2BC 3F02","8107A2CC 3D10","8107A2E0 3F71","8107A394 3F6C","8107A3A8 3D10","8107A3B8 3F00","8107A470 3F6C","8107A474 BF02","8107A484 3D10","8107A498 3F71","81050144 0569","81050154 07F7","810528F4 0C01","810528F6 0555","81050140 04F4","81050150 2CFB","8107A628 3F60","8107A63C 3D10","8107A64C 3F52","8107A650 BF80","8107A8BC 3F56","8107A8C4 BA00","8107A8D0 3D10","8107A8DC 3C5A","8107A8E0 3F30","8107A8E4 BF80","8107ADE4 3F56","8107ADEC BA00","8107ADF8 3D10","8107AE04 3C5A","8107AE08 3F0E","8107AE0C BF80","8107AB7C 3F00","D115AF56 2EB2","8115AEC6 0017","D115B2AE 2EB2","8115B21E 0017","D115B606 2EB2","8115B570 0017","D115B95E 2EB2","8115B8CE 0017","81052922 FFFF","81052924 FFFF","81052926 FFFF"],"options":null},"Replace Raw War with\\BARBEDWIRE SQUARE\\Part 1":{"note":"Both Parts must be on for this Press the C Left Button to make your opponent bleed,These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050110 04F3","81050112 04F4","81050114 04F5","81050116 04F3","81050118 04F4","8105011A 04F5","8105011C 04F3","8105011E 04F4","81050120 04F5","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81079D90 3F6C","81079D94 3F48","81079DA4 3D10","81079DB8 3F71","81079E6C 3F6C","81079E80 3D10","81079E90 3F47","81079F48 3F6C","81079F4C BF4C","81079F5C 3D10","81079F70 3F71","8107A024 3F6C","8107A028 3F28","8107A038 3D10","8107A04C 3F71","8107A100 3F6C","8107A114 3D10","8107A124 3F23","8107A1DC 3F6C","8107A1E0 BF2A","8107A1F0 3D10","8107A204 3F71","8107A2B8 3F6C","8107A2BC 3F02","8107A2CC 3D10","8107A2E0 3F71","8107A394 3F6C","8107A3A8 3D10","8107A3B8 3F00","8107A470 3F6C","8107A474 BF02","8107A484 3D10","8107A498 3F71","81050144 0569","81050154 07F7","810528F4 0C01","810528F6 0555","81050140 04F4","81050150 2CFB","8107A628 3F60","8107A63C 3D10","8107A64C 3F52","8107A650 BF80","8107A8BC 3F56","8107A8C4 BA00","8107A8D0 3D10","8107A8DC 3C5A","8107A8E0 3F30","8107A8E4 BF80","8107ADE4 3F56","8107ADEC BA00","8107ADF8 3D10","8107AE04 3C5A","8107AE08 3F0E","8107AE0C BF80","8107AB7C 3F00","D115AF56 2EB2","8115AEC6 0017","D115B2AE 2EB2","8115B21E 0017","D115B606 2EB2","8115B570 0017","D115B95E 2EB2","8115B8CE 0017","81052922 FFFF","81052924 FFFF","81052926 FFFF","8116C330 0000","8116C332 000A","8116C334 0000","8116C336 000A","8116C378 42B4"],"options":null},"Replace Raw War with\\BARBEDWIRE SQUARE\\Part 2":{"note":"Both Parts must be on for this Press the C Left Button to make your opponent bleed,These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8116C382 0000","8116C38C FFFF","81052C9C 0672","81052CA4 2CFB","D1064880 0002","8115B21E 002F","D1064886 0002","8115AEC6 002F","8116C3E4 0000","8116C3E6 000C","8116C3E8 0000","8116C3EA 000C","8116C428 C3D4","8116C440 FFFF","81052CB2 2CC2","81052CB4 0805","81052CB6 2CFB","D1064880 2000","8116C3E6 001F","D1064880 2000","8116C3EA 001F","D1064880 2000","81005592 3F81","D1005592 3F81","8116C3E6 001F","D1064880 2000","81005592 3F81","D1005592 3F81","8116C3EA 001F","D1064886 2000","8116C3E6 001F","D1064886 2000","8116C3E6 001F","D1064886 2000","81005592 3F81","D1005592 3F81","8116C3EA 001F","81052CF8 04F4","81052D00 2CFB","8116C3E4 0000","8116C3E6 0015","8116C3E8 0000","8116C3EA 0015","8116C428 0000","8116C42A 0000","8116C42C 43EB","8116C42E 0000","8116C430 C3A6","8116C432 0000","8116C436 0400","8116C43A 0000","8116C43E 0000","8116C440 FFFF","8116C442 0000","810855A8 3F00","81085684 3F00","81085750 3F00","8108583C 3F00","81050100 2CFB","8105010E 2CFB"],"options":null},"Replace Raw War with\\DUDLEY ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 21A7","8105042E 2D0D","81050432 2D0D","81050436 21A7","8105043E 2D0D","81050440 0000","81050442 0000","810500E8 2D0D","8105010C 2CFD","8105010E 2CFD","81050150 2D29","81050152 2CFB","81050400 09EF","81050402 09EF","81050404 0000","81050406 0000","81050408 0000","8105040A 0000","8105040C 09EF","8105040E 09EF","81050188 04F6","8105018A 04F7","8105018C 04F8","8105018E 04F9","81050190 09EF","81050192 0000","81050194 09EF","81050196 2D0D","810528F4 6666","810528F6 6666","81052CE8 2CC2","81052CEC 2D0D","81052D1C 2CD3","81052D1E 2CD4","81052D20 2CD5","81052D22 2CD6","81052D24 2CFD","81052D26 2CFD","81052D28 2CFB","81052D2A 2CFB","81050124 2CFD","81050126 2CFD","81050128 2CFD","8105012A 2CFD","8105012C 2CFD","8105012E 2CFD","81050130 2CFD","81050132 2CFD","81050134 2CFD","81050136 2CFD","81050154 2CFB","811533F8 002E"],"options":null},"Replace Raw War with\\FLAME ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105010E 0EFE","8105010C 0EFE","810528F4 2508","810528F6 2508","81050430 2401","81050430 2401","81050404 2401","81050406 2401","81050408 2401","81050409 2401","8105040A 2401","8105040C 2401","810500E8 2401"],"options":null},"Replace Raw War with\\FLAMING TURNBUCKLES":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8116C334 FFFF","8116C336 001F","8116C374 C350","8116C376 FFF3","8116C378 4377","8116C37A 2689","8116C37C C380","8116C37E 0406","8116C382 0D14","8116C386 0FCC","8116C38A 07DC","8116C38C FFFF","8116C38E FDE3","8116C3E8 FFFF","8116C3EA 001F","8116C428 C360","8116C42C 4370","8116C430 4376","8116C436 0D14","8116C43A 0FCC","8116C43E 07DC","8116C442 F9C4","8116C49C FFFF","8116C49E 001F","8116C4DC 4360","8116C4E0 4370","8116C4E4 4380","8116C4EA 0CD0","8116C4EE 0136","8116C4F2 04EE","8116C4F6 F601","8116C550 FFFF","8116C552 001F","8116C590 434F","8116C594 4370","8116C598 C36C","8116C59E 0E70","8116C5A2 0F58","8116C5A6 0814","8116C5AA F1E6"],"options":null},"Replace Raw War with\\GREENWICH STREET ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050430 2DC5","81050436 0000","81050438 0000","8105043A 0000","8105043E 0000","810504E8 0EFE","8105010E 2DC5","8105010C 2DC5","81050196 2CFD","81050136 0FB6","81050134 0FC6","81050132 0FB6","81050130 0FC6","8105012E 0FB6","8105012C 0FC6","8105012A 0FB6","81050128 0FC6","81050126 0FB6","81050124 0FC6","81050440 0000","81050442 0000","50002C02 0000","81050378 0000","50002C02 0000","810502EC 0000","50001402 0000","81050290 0000","50000902 0000","81050262 0000","50000402 0000","810501CE 0000","50001002 0000","810501B8 0000","50000402 0000","810501E0 0000","8105042C 2D0D","81050430 0000","81050150 24F0"],"options":null},"Replace Raw War with\\HHH ARNEA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105040E 24EF","8105040C 24EF","8105040A 24EF","81050408 24EF","81050406 24EF","81050404 24EF","81050402 24EF","81050400 24EF","81050436 24E9","81050440 24E9","81050442 24E9","8105043E 24EF","8105042E 24EF","8105043C 24EF","8105042C 24E9","8105010E 24E9","8105010C 24E9","81050196 24E9","8105042E 24EF","81050432 24EF","810500F8 24EF","810500FA 24EF","810500FC 24EF","810500FC 24EF","81050100 24EF","81050100 24EF","81052CE8 2CCA","81052CEC 24EF","81050150 24E9","81050152 24E9","81050154 24E9","810528F4 24E9","810528F6 24E9"],"options":null},"Replace Raw War with\\HOSPITAL ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0949","8105042E 283F","81050428 0949","81050430 0949","81050430 0949","81050436 096B","81050438 0993","8105043A 096B","8105043E 283F","81050440 283F","81050442 283F","810504E8 0949","81050150 283F","81050196 283F","81050400 283F","81050402 283F","81050404 283F","81050406 283F","81050408 283F","8105040A 283F","8105040C 283F","8105040E 283F","810500F8 283F","810500FA 283F","810500FC 283F","810500FE 283F","81050100 283F","81050100 283F","81052CE8 2CCA","81052CEC 283F","8105010E 283F","8105010C 283F","81050124 0949","81050126 0949","81050128 0949","8105012A 0949","8105012C 0949","8105012E 0949","81050130 0949","81050132 0949","81050134 0949","81050136 0949","810500E8 0949","810528F4 0000","81052CE0 2CC9"],"options":null},"Replace Raw War with\\KANE ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0A61","8105042E 0A61","81050428 2B6C","81050430 2B6C","81050430 2B6C","81050436 2B57","81050438 2B57","8105043A 2B57","8105043E 0A61","81050440 2B57","81050442 2B57","810500E8 1B1E","8105010E 2D37","8105010C 209F","81050194 0955","81050196 2B57","81050400 2699","81050402 2699","81050404 2699","81050406 2699","81050408 2699","8105040A 2699","8105040C 2699","8105040E 2699"],"options":null},"Replace Raw War with\\REMOVE RING":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050150 0000","81050152 0000","81050154 0000","810500E8 0000","810855A8 3F00","81085684 3F00","81085750 3F00","8108583C 3F00","81079C08 3F00","81079C14 3F00","81079B10 3F00"],"options":null},"Replace Raw War with\\SHIMMER ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 1932","8105042E 1932","81050430 1932","81050434 1932","81050432 1932","81050436 1932","81050438 1932","8105043A 1932","8105043E 1932","81050440 1932","81050442 1932","81050150 1932","81050152 1932","81050154 1932","81050190 1932","81050192 1932","81050194 1932","81050196 1932","81050124 1932","81050126 1932","81050128 1932","8105012A 1932","8105012C 1932","8105012E 1932","81050130 1932","81050132 1932","81050134 1932","81050136 1932","810500E8 1932","8105010E 1932","8105010C 1932"],"options":null},"Replace Raw War with\\SPACE SHIP ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 094D","8105042E 0953","81050430 0953","81050432 0F0E","81050434 0953","81050436 0F0E","81050438 0899","8105043C 0953","8105043E 0899","81050440 0963","81050442 0963","81050400 0953","81050402 0953","81050404 0953","81050406 0953","81050408 0953","8105040A 0953","8105040C 0953","8105040E 0953","810500E8 0A75","810528F4 7223","810528F6 0119","81050150 0963","81050152 0963","81050190 0953","81050192 0953","81050194 0953","81050196 0963","8105010E 0F0E","8105010C 0F0E","81050124 0F10","81050126 0F10","81050128 0F10","8105012A 0F10","8105012C 0F10","8105012E 0F10","81050130 0F10","81050132 0F10","81050134 0F10","81050136 0F10","810500F8 0963","810500FA 0963","810500FC 0963","810500FE 0963","81050100 0963","81050102 0963","81052CE8 2CCA","81052CEC 0963"],"options":null},"Replace Raw War with\\TOKYO DOME":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["810528F4 7223","810528F6 0119","81050124 0100","81050126 0100","81050128 0100","8105012A 0100","8105012C 0100","8105012E 0100","81050130 0100","81050132 0100","81050134 0100","81050136 0100","8105010E 0999","81050400 03A5","81050402 0385","81050404 0385","81050406 0385","81050408 0385","8105040A 03A5","8105040C 03A5","8105040E 043F","81050430 043F","8105042C 03A5","81050430 21A5","81050432 0100","81050434 0000","81050436 2CFB","81050438 0899","8105043C 03AF","81050440 03AF","81050442 03A5","810500E8 24C3","81050444 0100","81050190 09EF","81050192 0000","81050194 09EF","81050196 2CFD"],"options":null},"Tables\\IN RING TABLE\\Part 1":{"note":"To Make the Table look broken Keep the Z Button press down, To make player stand on the Table, Stand next to it \u0026 Keep C-Right Pressed Down.Put all Parts on Together for this Cheat to work","data":["81052CF0 06E1","81052CF4 09F1","81052CF8 06E2","81052D00 09F1","81052D0C 06E3","81052D0E 06E4","81052D10 09EF","81052D12 09EF","81052D14 06E5","81052D16 06E6","81052D18 09EF","81052D1A 09EF","D1064880 0001","8115AFB0 432C","D1064880 0001","8115B308 432C","D1064880 2000","8115AFB0 42B4","D1064880 2000","8115B308 42B4","8116C330 0000","8116C332 0014","8116C334 0000","8116C336 0014","8116C374 4210","8116C376 C0B1","8116C378 432F","8116C37A 51DC","8116C37C 4210","8116C37E 92F1","8116C382 0800","8116C386 05A0","8116C38A 0800","8116C38C FFFF","8116C38E F3BC","8116C3E4 0000","8116C3E6 0015","8116C3E8 0000","8116C3EA 0015","8116C428 4210","8116C42A C0B1","8116C42C 432F","8116C42E 51DC","8116C430 4210","8116C432 92F1","8116C436 0800","8116C43A 05A0","8116C43E 0800","8116C440 FFFF","8116C442 F3BC","D1064880 2000","8116C378 42E0"],"options":null},"Tables\\IN RING TABLE\\Part 2":{"note":"To Make the Table look broken Keep the Z Button press down, To make player stand on the Table, Stand next to it \u0026 Keep C-Right Pressed Down.Put all Parts on Together for this Cheat to work","data":["D1064880 2000","8116C382 07E0","D1064880 2000","8116C38A 0680","D1064880 2000","8116C42C 42E0","D1064880 2000","8116C436 0820","D1064880 2000","8116C43E 0980","8116C498 0000","8116C49A 0017","8116C49C 0000","8116C49E 0017","8116C4DC 4210","8116C4DE C0B1","8116C4E0 432A","8116C4E2 51DC","8116C4E4 4210","8116C4E6 92F1","8116C4EA 0800","8116C4EE 05A0","8116C4F2 0800","8116C4F4 FFFF","8116C4F6 F3BC","8116C54C 0000","8116C54E 0018","8116C550 0000","8116C552 0018","8116C590 4210","8116C592 C0B1","8116C594 432A","8116C596 51DC","8116C598 4210","8116C59A 92F1","8116C59E 0800","8116C5A2 05A0","8116C5A6 0800","8116C5A8 FFFF","8116C5AA F3BC","D1064880 2000","8116C4E0 42E0","D1064880 2000","8116C4EA 07E0","D1064880 2000","8116C4F2 0680","D1064880 2000","8116C594 42E0","D1064880 2000","8116C59E 0820","D1064880 2000","8116C5A6 0980"],"options":null},"Tables\\MOVABLE TABLES\\Part 1":{"note":"You must use both parts for this cheat to work","data":["81052C24 06E1","81052C26 06E3","81052C2C 09F1","81052C2E 09EF","81052C30 06E2","81052C32 06E5","81052C38 09F1","81052C3A 09EF","81052C48 06E4","81052C4A 06E6","81052C50 09EF","81052C52 09EF","8116C3E4 0000","8116C3E6 0001","8116C3E8 0000","8116C3EA 0001","8116C498 0000","8116C49A 0003","8116C49C 0000","8116C49E 0003","8116C330 0000","8116C332 0000","8116C334 0000","8116C336 0000","D116C556 0000","8116C33A 0000","D116C33A 0000","8116C3EE 0000","D116C3EE 0000","8116C4A2 0000","D116C556 0001","8116C33A 0001","D116C33A 0001","8116C3EE 0001","D116C3EE 0001","8116C4A2 0001","D116C556 0002","8116C33A 0002","D116C33A 0002","8116C3EE 0002","D116C3EE 0002","8116C4A2 0002","D116C556 0003","8116C33A 0003","D116C33A 0003","8116C3EE 0003","D116C3EE 0003","8116C4A2 0003","D116C556 FFFF","8116C33A FFFF","D116C33A FFFF","8116C3EE FFFF","D116C3EE FFFF","8116C4A2 FFFF","D216C556 FFFF","81079B10 3F80","D1064886 2000","81079B10 3F81","D106488C 2000","81079B10 3F81","D1064892 2000","81079B10 3F81"],"options":null},"Tables\\MOVABLE TABLES\\Part 2":{"note":"You must use both parts for this cheat to work","data":["D116C33A FFFF","8116C382 0000","D116C382 0000","8116C386 0000","D116C386 0000","8116C38A 0000","D116C38A 0000","8116C38E 0000","D116C38E 0000","8116C436 0000","D116C436 0000","8116C43A 0000","D116C43A 0000","8116C43E 0000","D116C43E 0000","8116C442 0000","D116C442 0000","8116C4EA 0000","D116C4EA 0000","8116C4EE 0000","D116C4EE 0000","8116C4F2 0000","D116C4F2 0000","8116C4F6 0000","D116C594 42B4","D116C556 FFFF","8116C378 4335","D116C378 4335","8116C42C 4335","D116C42C 4335","8116C4E0 4335","D116C594 3DC7","D116C556 FFFF","8116C378 42B0","D116C378 42B0","8116C42C 42B0","D116C42C 42B0","8116C4E0 42B0","D1064880 2000","81079B10 3F81","D1079B10 3F81","D116C594 42B4","D116C556 FFFF","8116C378 42F0","D116C378 42F0","8116C42C 42F0","D116C42C 42F0","8116C4E0 42F0","D1079B10 3F81","8116C38A 0F00","D116C38A 0F00","8116C43E 0100","D116C594 3C93","8116C378 42B0","81052D18 0000","81052D1A 0000","D116C54C 0000","8116C54E 0018","D116C550 0000","8116C552 0018"],"options":null},"Tables\\Sabu Table":{"note":"Breakable/Fixable/Rebreakable/Refixable press Z to break, C-right + Cdown to fix","data":["8116C49A 000C","8116C49E 000C","8116C4DC 43CC","8116C4E0 42E6","8116C4E4 C2C5","8116C4EE 0800","8116C602 000C","8116C606 000C","8116C648 42E6","8116C644 43CC","8116C64C C314","81052C54 06E3","81052C5C 09EF","8116C6F8 43CC","8116C6FC 42F0","8116C700 C2F1","8116C70A 0400","8116C428 43CC","8116C430 C2D0","8116C42C 42F0","8116C43A 0C00","8116C6B6 0004","8116C6BA 0004","8116C3E6 0004","8116C3EA 0004","D1064880 2000","81005592 3F81","D1005592 3F81","8116C4EA 0F00","D1005592 3F81","8116C652 0100","D1005592 3F81","8116C4E0 4240","D1005592 3F81","8116C648 4240","D1064880 0005","81005CD4 3F83","D1005CD4 3F83","8116C4EA 0000","D1005CD4 3F83","8116C652 0000","D1005CD4 3F83","8116C4E0 42E6","D1005CD4 3F83","8116C648 42E6","D1005CD4 3F83","D1064880 2000","81005CD4 0000"],"options":null},"Ultimate Code\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF5E 0064"],"options":null},"Ultimate Code\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2B6 0064"],"options":null},"Ultimate Code\\Player 3":{"note":"","data":["D015A5D1 0015","8015B60E 0064"],"options":null},"Ultimate Code\\Player 4":{"note":"","data":["D015A5D1 0015","8015B964 0064"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B490 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B490 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B4A4 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B47C 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8106B4A4 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B47C 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B468 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B468 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B510 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B510 3DFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B564 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B53C 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B564 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B53C 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B528 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B528 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B610 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B610 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B624 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5FC 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B624 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5FC 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5E8 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5E8 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6D0 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6D0 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6E4 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6BC 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8006B6E4 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6BC 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6A8 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6A8 3FFF"],"options":null},"Z LADDER":{"note":"Press Z for the ladder to appear, sometimes there is an invisable ladder","data":["D1064880 2000","8116C768 0000","D1064880 2000","8116C76A 0019","D1064880 2000","8116C76C 0000","D1064880 2000","8116C76E 0019","D1064880 2000","8116C788 8104"],"options":null}},"6D9D1FE4-84D10BEA-C:4A":{"Freeze Timer":{"note":"","data":["810BCBD6 0BB8"],"options":null},"Goal Select Player 1":{"note":"","data":["810B637C 00??"],"options":{"10 Goals":"0A","20 Goals":"14","25 Goals":"19","50 Goals":"32","99 Goals":"63","No Goals":"00"}},"Infinite 99 Credits":{"note":"","data":["800B3961 0063"],"options":null},"Other Team Scores no Goals":{"note":"Disable to allow Other team to score","data":["810B6694 0000"],"options":null}},"6DFDCDC3-4DE701C8-C:45":{"Activate Cheat Menu":{"note":"","data":["80053F38 0001"],"options":null},"Away Team Goals":{"note":"","data":["8012BBBD 00??"],"options":{"Max Score":"FF","No Score":"00"}},"Home Team Goals":{"note":"","data":["8012BBBC 00??"],"options":{"Max Score":"FF","No Score":"00"}}},"70B0260E-6716D04C-C:4A":{"Always Shoot 3-Way":{"note":"","data":["800FD19A 0002"],"options":null},"Always Shoot 5-Way":{"note":"","data":["800FD198 0200"],"options":null},"Always Shoot Rapid Fire":{"note":"","data":["800FD19A 1000"],"options":null},"Have Rune Stones":{"note":"","data":["8104EFC6 1FFF"],"options":null},"Have Window Schards":{"note":"","data":["8104EFCA 000F"],"options":null},"Infinite\\Item On Pickup":{"note":"","data":["50010100 0000","810C5BF6 FFFF"],"options":null},"Infinite\\Keys On Pickup":{"note":"","data":["800C5C97 0006"],"options":null},"Infinite\\Max Health":{"note":"","data":["810C5C54 0000","810C5C56 270F","810C5C64 0000","810C5C66 270F"],"options":null},"Infinite\\Money":{"note":"","data":["810C5CF6 FFFF"],"options":null},"Infinite\\Special Weapons":{"note":"","data":["800C5FF7 0009","800C5D37 0009","800C5D67 0009","800C5DE7 0009","800C5EB7 0009"],"options":null},"Infinite\\Turbo":{"note":"","data":["800FD30F 0064"],"options":null},"Level 99":{"note":"","data":["810C5C44 0000","810C5C46 0063"],"options":null},"Max Armour":{"note":"","data":["810C5C34 0000","810C5C36 FFFF"],"options":null},"Max Magic":{"note":"","data":["810C5C24 0000","810C5C26 FFFF"],"options":null},"Max Speed":{"note":"","data":["810C5C14 0000","810C5C16 FFFF"],"options":null},"Max Strength":{"note":"","data":["810C5C04 0000","810C5C06 FFFF"],"options":null}},"7188F445-84410A68-C:4A":{"Can Skip End Credits":{"note":"","data":["8015627F 0001"],"options":null},"Endless Mode":{"note":"","data":["800854CD 0000"],"options":null},"Maximum Dance Gauge\\Player 1":{"note":"","data":["810854DC 03E8"],"options":null},"Maximum Dance Gauge\\Player 2":{"note":"","data":["81085514 03E8"],"options":null},"Maximum Song Score\\Player 1":{"note":"","data":["8108A260 3B9A","8108A262 C9FF"],"options":null},"Maximum Song Score\\Player 2":{"note":"","data":["8108A264 3B9A","8108A266 C9FF"],"options":null},"Maximum Total Score\\Player 1":{"note":"","data":["810854E0 3B9A","810854E2 C9FF"],"options":null},"Maximum Total Score\\Player 2":{"note":"","data":["81085518 3B9A","8101551A C9FF"],"options":null},"Results\\0 Boo Steps\\Player 1":{"note":"","data":["8108A22A 0000"],"options":null},"Results\\0 Boo Steps\\Player 2":{"note":"","data":["8108A242 0000"],"options":null},"Results\\0 Good Steps\\Player 1":{"note":"","data":["8108A226 0000"],"options":null},"Results\\0 Good Steps\\Player 2":{"note":"","data":["8108A23E 0000"],"options":null},"Results\\0 Miss Steps\\Player 1":{"note":"","data":["8108A22E 0000"],"options":null},"Results\\0 Miss Steps\\Player 2":{"note":"","data":["8108A246 0000"],"options":null},"Results\\999 Great Steps\\Player 1":{"note":"","data":["8108A222 03E7"],"options":null},"Results\\999 Great Steps\\Player 2":{"note":"","data":["8108A23A 03E7"],"options":null},"Results\\999 Perfect Steps\\Player 1":{"note":"","data":["8108A21E 03E7"],"options":null},"Results\\999 Perfect Steps\\Player 2":{"note":"","data":["8108A236 03E7"],"options":null},"Unlock All Puzzles":{"note":"","data":["50001902 0000","81156228 FFFF"],"options":null},"Unlock All Songs":{"note":"","data":["8015621D 00FF","8115621E FFFF"],"options":null}},"72611D7D-9919BDD2-C:58":{"Access All\\Cars":{"note":"","data":["8002CC07 000B"],"options":null},"Access All\\Difficulties":{"note":"","data":["8002CC0B 0004"],"options":null},"Access All\\Multiplayer Levels":{"note":"","data":["50000901 0000","8002CC10 0001"],"options":null},"Access All\\Tracks":{"note":"","data":["8002CC03 0006"],"options":null},"Access In-Game Cheats":{"note":"","data":["50001301 0000","8002CC18 0001"],"options":null},"Damage Select":{"note":"","data":["8002C9A3 00??"],"options":{"Double":"02","Half":"01","Normal":"00","Triple":"03"}},"Health Select":{"note":"","data":["8002C98F 00??"],"options":{"Bad Only":"02","Good Only":"01","Normal":"00","Off":"03"}},"Infinite Continues":{"note":"","data":["8002C867 0064"],"options":null},"Low Timer":{"note":"","data":["810259E4 3001"],"options":null},"Power-Up Select":{"note":"","data":["8002C98B 00??"],"options":{"?":"05","Health":"06","Invincible":"07","Mines":"01","Nitros":"04","Normal":"00","Off":"08","Rockets":"02","Stealer":"03"}},"Radar":{"note":"","data":["8002C99F 00??"],"options":{"Off":"01","On":"00"}},"Speed units\\Kph or Mph":{"note":"","data":["81025A78 ????"],"options":{"Kph":"0100","Mph":"0001"}},"View Mode Select?":{"note":"","data":["8002C99B 00??"],"options":{"Fisheye":"03","Flip":"02","Fog":"01","Normal":"00"}},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\01 Coventry Cove":{"note":"","data":["803653CB 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\02 Mount Mayhem":{"note":"","data":["80355DB3 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\03 Inferno Isle":{"note":"","data":["80366323 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\04 Sunset Sands":{"note":"","data":["80345A93 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\05 Metro Madness":{"note":"","data":["8035FF5B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\06 Wicked Woods":{"note":"","data":["80359043 0064"],"options":null}},"729B5E32-B728D980-C:45":{"Always Shoot 3-Way":{"note":"","data":["800FD19A 0002"],"options":null},"Always Shoot 5-Way":{"note":"","data":["800FD198 0200"],"options":null},"Always Shoot Rapid Fire":{"note":"","data":["800FD19A 1000"],"options":null},"Have Rune Stones":{"note":"","data":["8104EFC6 1FFF"],"options":null},"Have Window Schards":{"note":"","data":["8104EFCA 000F"],"options":null},"Infinite\\Item On Pickup":{"note":"","data":["50010100 0000","810C5BF6 FFFF"],"options":null},"Infinite\\Keys On Pickup":{"note":"","data":["800C5C97 0006"],"options":null},"Infinite\\Max Health":{"note":"","data":["810C5C54 0000","810C5C56 270F","810C5C64 0000","810C5C66 270F"],"options":null},"Infinite\\Money":{"note":"","data":["810C5CF6 FFFF"],"options":null},"Infinite\\Special Weapons":{"note":"","data":["800C5FF7 0009","800C5D37 0009","800C5D67 0009","800C5DE7 0009","800C5EB7 0009"],"options":null},"Infinite\\Turbo":{"note":"","data":["800FD30F 0064"],"options":null},"Level 99":{"note":"","data":["810C5C44 0000","810C5C46 0063"],"options":null},"Max Armour":{"note":"","data":["810C5C34 0000","810C5C36 FFFF"],"options":null},"Max Magic":{"note":"","data":["810C5C24 0000","810C5C26 FFFF"],"options":null},"Max Speed":{"note":"","data":["810C5C14 0000","810C5C16 FFFF"],"options":null},"Max Strength":{"note":"","data":["810C5C04 0000","810C5C06 FFFF"],"options":null}},"72F70398-6556A98B-C:45":{"Always 1st":{"note":"","data":["81118FEC 0001"],"options":null},"Enable In-Game cheat Menu \u0026 Cheats":{"note":"Here you can Activate the IN-Built Cheats Menu. At the Front Screen Just Press C-Button Right.This will open up All Tracks \u0026 Characters In Free Play \u0026 Time Attack. Also In A Race, Press The Start/Pause button to Access the In-Cheat-Menu Option.You can also choose how many Pod's Racers are in the Race \u0026 also how many Laps are in the Race in Free Play \u0026 Time Attack","data":["8009B7D7 0001","8109B7DA FFFF"],"options":null},"Have All Tracks Completed":{"note":"","data":["81113E6A FFFF","81113E6C 3FFF","81113E6E 3FFF","81113E70 3FFF","81113E72 00FF"],"options":null},"Infinite Truguts":{"note":"","data":["81113E7A FFFF","81113E78 7FFF"],"options":null},"No Damage":{"note":"If when Racing Your Pod Over heats \u0026 bursts into flames Press \"R\" \u0026 you will Repair the Damage.","data":["800A52D7 0001"],"options":null},"Unlock All Tracks \u0026 Characters":{"note":"When using Unlock All Tracks \u0026 Characters For can to pick \u0026 choose what ever you want to play As \u0026 where ;)","data":["80113E68 00FF","80113E69 00FF","80113E6A 00FF","80113E6B 00FF","81113E68 FFFF","81113E6A FFFF","80113E74 007D","81113E76 FFFF"],"options":null}},"73036F3B-CE0D69E9-C:50":{"Choose A Costume\\Player 1":{"note":"","data":["8104A612 00??"],"options":{"First":"01","Normal":"00","Second":"02","Third":"03"}},"Choose A Costume\\Player 2":{"note":"","data":["8104A616 00??"],"options":{"First":"01","Normal":"00","Second":"02","Third":"03"}},"Enable Restart Match option":{"note":"","data":["800494BB 0002"],"options":null},"Infinite Run\\Player 1":{"note":"","data":["811050FC 0001","811050FE 0000"],"options":null},"Infinite Run\\Player 2":{"note":"","data":["811051B0 0001","811051B2 0000"],"options":null},"Infinite Time":{"note":"","data":["8110524A 0063"],"options":null},"Play As\\Player 1":{"note":"","data":["800FE3C3 00??"],"options":{"Fujin":"05","Goro":"0F","Jarek":"0C","Jax":"0D","Johnny Cage":"0E","Kai":"0B","Liu Kang":"03","Noob Saibot":"11","Quan Chi":"08","Raiden":"01","Reiko":"07","Reptile":"0A","Scorpion":"00","Shinnok":"06","Sonya":"02","Sub-Zero":"04","Tanya":"09"}},"Play As\\Player 2":{"note":"","data":["80126FBF 00??"],"options":{"Fujin":"05","Goro":"0F","Jarek":"0C","Jax":"0D","Johnny Cage":"0E","Kai":"0B","Liu Kang":"03","Noob Saibot":"11","Quan Chi":"08","Raiden":"01","Reiko":"07","Reptile":"0A","Scorpion":"00","Shinnok":"06","Sonya":"02","Sub-Zero":"04","Tanya":"09"}},"Unlimited Energy\\Player 1":{"note":"","data":["810FE208 0001","810FE20A 0000"],"options":null},"Unlimited Energy\\Player 2":{"note":"","data":["81127084 0001","81127086 0000"],"options":null}},"733FCCB1-444892F9-C:50":{"Access All Moves":{"note":"","data":["8037CD70 0001","8037CD71 007F","8037CD72 00FF","8037CD73 00FF"],"options":null},"Do Anywhere Option\\Take off anywhere":{"note":"Press A","data":["D0285734 0080","8037CBA1 0001"],"options":null},"Have\\All Jinjos":{"note":"","data":["8038695B 00FF"],"options":null},"Have\\Blubbers Gold":{"note":"","data":["80386973 00FF"],"options":null},"Have\\Chimpys Oranges":{"note":"","data":["80386977 00FF"],"options":null},"Have\\Eyries Caterpillars":{"note":"","data":["8038699B 00FF"],"options":null},"Have\\Nabnuts Acorns":{"note":"","data":["8038699F 00FF"],"options":null},"Have\\Present Option\\Blue":{"note":"","data":["80386993 00FF"],"options":null},"Have\\Present Option\\Green":{"note":"","data":["8038698F 00FF"],"options":null},"Have\\Present Option\\Red":{"note":"","data":["80386997 00FF"],"options":null},"Have\\Running Shoes":{"note":"","data":["8137CA88 5019"],"options":null},"Have\\Zero Time all Levels":{"note":"","data":["50000B04 0000","813869E4 3000"],"options":null},"Infinite\\255 Eggs":{"note":"","data":["80386947 00FF"],"options":null},"Infinite\\255 Gold Feathers":{"note":"","data":["80386953 00FF"],"options":null},"Infinite\\255 Jigsaws":{"note":"","data":["803869AB 00FF"],"options":null},"Infinite\\255 Notes":{"note":"","data":["80386943 00FF"],"options":null},"Infinite\\255 Red Feathers":{"note":"","data":["8038694F 00FF"],"options":null},"Infinite\\8 Skulls":{"note":"","data":["803869A7 0008"],"options":null},"Infinite\\Air":{"note":"","data":["8038696E 000B"],"options":null},"Infinite\\Health":{"note":"","data":["80386963 0008","80386965 0001"],"options":null},"Infinite\\Lives":{"note":"","data":["8038696B 0009"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0285735 0020","8137CE8C 43E0"],"options":null},"Yumblies Counter\\Banjo":{"note":"","data":["8038697B 00FF"],"options":null},"Yumblies Counter\\Mr Vile":{"note":"","data":["8038697C 00FF"],"options":null}},"7365D8F8-9ED9326F-C:4A":{"Decrease Fodder":{"note":"","data":["81180E44 03E7"],"options":null},"Decrease Material":{"note":"","data":["8118A580 03E7"],"options":null},"Max Money":{"note":"","data":["811FDD2C 000F","811FDD2E 423F"],"options":null}},"736657F6-3C88A702-C:4A":{"Decrease Fodder":{"note":"","data":["81180E44 03E7"],"options":null},"Decrease Material":{"note":"","data":["8118A580 03E7"],"options":null},"Max Money":{"note":"","data":["811FDD2E 423F","811FDD2E 423F"],"options":null}},"736AE6AF-4117E9C7-C:4A":{"Always 1st \u0026 final time 00:00.00":{"note":"All Levels","data":["50000301 0000","801CE6E9 0000"],"options":null},"Difficulty Select":{"note":"","data":["8007C000 00??"],"options":{"Amateur":"00","Intermediate":"01","Mirror Mode":"03","Professional":"02"}},"Frantic Finale\\Colorado\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191992 0063"],"options":null},"Frantic Finale\\Hawaii\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80192072 0063"],"options":null},"Frantic Finale\\Oregon\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018EA42 0063"],"options":null},"Frantic Finale\\Texas\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018F1E2 0063"],"options":null},"Freewayphobia\\Chicago\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80192042 0063"],"options":null},"Freewayphobia\\Dakota\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018D212 0063"],"options":null},"Freewayphobia\\New York\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018F512 0063"],"options":null},"Freewayphobia\\Seattle\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FDF2 0063"],"options":null},"Level Select":{"note":"","data":["801876B9 00??"],"options":{"Contest":"07","Frantic Finale":"04","Freewayphobia":"02","Motor Way Mania":"01","Options":"08","Practice":"06","Time Trial":"05","Traffic Troubles":"00","Vitory Vehicles":"03"}},"Motor Way Mania\\Alaska\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E482 0063"],"options":null},"Motor Way Mania\\Las Vegas\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80192B12 0063"],"options":null},"Motor Way Mania\\Los Angeles\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018DCF2 0063"],"options":null},"Motor Way Mania\\Philadelphia\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80193992 0063"],"options":null},"Play As":{"note":"","data":["800D3161 00??"],"options":{"Daisy Duck":"01","Dewey":"07","Donald Duck":"05","Goofy":"02","Huey":"06","Louie":"08","Lugwig Von Drake":"09","Mickey Mouse":"00","Minnie Mouse":"04","Pete":"03"}},"Traffic Troubles\\Grand Canyon\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80193252 0063"],"options":null},"Traffic Troubles\\Indianapolis\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E892 0063"],"options":null},"Traffic Troubles\\New Mexico\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FD52 0063"],"options":null},"Traffic Troubles\\San Fransisco\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191B62 0063"],"options":null},"Unlock Everything":{"note":"This will unlock all characters, tracks, mirror mode, all in-game cheats, postcards, pluto's collar and give you all Trophies for every track and difficulties. To have this cheat save to mempak, enable it and then go into the Options Menu and disable the cheat. Go to the Wide-Screen Settings and Change it to Wide-Screen [16.9] and then the B button to get back to Wide-Screen Settings, now go back into Wide-Screen [16.9] and change it back to Normal [4.3].and press the B button until you come back to the main Options Menu.Close the game and load it again to see everything saved to the Mempak and unlocked.","data":["800D3208 008F","800D3209 0094","800D320A 0003","800D320C 0001","800D320F 0080","50000502 0000","800D3210 0009","50000502 0000","800D3211 0024","800D321A 0015","800D321B 007F","800D321C 0001","800D321D 00FF","800D321E 0004","800D321F 0022"],"options":null},"Victory Vehicles\\Everglades\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FC22 0063"],"options":null},"Victory Vehicles\\Malibu\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801916B2 0063"],"options":null},"Victory Vehicles\\Washington DC\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80197662 0063"],"options":null},"Victory Vehicles\\Yellowstone\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018D4C2 0063"],"options":null}},"73A88E3D-3AC5C571-C:45":{"Arcade Mode\\Car Modifier":{"note":"","data":["802818B3 00??"],"options":{"Hyundai Coupe EVO 2":"08","Mitsubishi Lancer Evolution V":"00","Nissan Almera Kit Car":"03","Proton WIRA":"07","Seat Cordoba WRC":"04","Skoda Octavia":"05","Subaru Impreza WRC":"01","Toyota Corolla WRC":"02","VW Golf GTI MK IV":"06"}},"Championship Mode\\Australia\\Infinite Damage\\Front End":{"note":"","data":["80178FA0 003E"],"options":null},"Championship Mode\\Australia\\Infinite Damage\\Left Side":{"note":"","data":["80178FA4 0040"],"options":null},"Championship Mode\\Australia\\Infinite Damage\\Right Side":{"note":"","data":["80178FA8 0040"],"options":null},"Championship Mode\\Australia\\Infinite Damage\\Tires":{"note":"","data":["80178FAC 0040"],"options":null},"Championship Mode\\Australia\\Start On 3rd Lap":{"note":"","data":["D0178F6F 0001","80178F6F 0003"],"options":null},"Championship Mode\\Brazil\\Infinite Damage\\Front End":{"note":"","data":["801748E0 0040"],"options":null},"Championship Mode\\Brazil\\Infinite Damage\\Left Side":{"note":"","data":["801748E4 0040"],"options":null},"Championship Mode\\Brazil\\Infinite Damage\\Right Side":{"note":"","data":["801748E8 0040"],"options":null},"Championship Mode\\Brazil\\Infinite Damage\\Tires":{"note":"","data":["801748EC 0040"],"options":null},"Championship Mode\\Brazil\\Start On 3rd Lap":{"note":"","data":["D01748AF 0001","801748AF 0003"],"options":null},"Championship Mode\\Canada\\Infinite Damage\\Front End":{"note":"","data":["8017CFA0 0040"],"options":null},"Championship Mode\\Canada\\Infinite Damage\\Left Side":{"note":"","data":["8017CFA4 0040"],"options":null},"Championship Mode\\Canada\\Infinite Damage\\Right Side":{"note":"","data":["8017CFA8 0040"],"options":null},"Championship Mode\\Canada\\Infinite Damage\\Tires":{"note":"","data":["8017CFAC 0040"],"options":null},"Championship Mode\\Canada\\Start On 3rd Lap":{"note":"","data":["D017CF6F 0001","8017CF6F 0003"],"options":null},"Championship Mode\\France\\Infinite Damage\\Front End":{"note":"","data":["80172490 0040"],"options":null},"Championship Mode\\France\\Infinite Damage\\Left Side":{"note":"","data":["80172494 0040"],"options":null},"Championship Mode\\France\\Infinite Damage\\Right Side":{"note":"","data":["80172498 0040"],"options":null},"Championship Mode\\France\\Infinite Damage\\Tires":{"note":"","data":["8017249C 0040"],"options":null},"Championship Mode\\France\\Start On 3rd Lap":{"note":"","data":["D017245F 0001","8017245F 0003"],"options":null},"Championship Mode\\Germany\\Infinite Damage\\Front End":{"note":"","data":["8017DFA0 0040"],"options":null},"Championship Mode\\Germany\\Infinite Damage\\Left Side":{"note":"","data":["8017DFA4 0040"],"options":null},"Championship Mode\\Germany\\Infinite Damage\\Right Side":{"note":"","data":["8017DFA8 0040"],"options":null},"Championship Mode\\Germany\\Infinite Damage\\Tires":{"note":"","data":["8017DFAC 0040"],"options":null},"Championship Mode\\Germany\\Start On 3rd Lap":{"note":"","data":["D017DF6F 0001","8017DF6F 0003"],"options":null},"Championship Mode\\Great Britain\\Infinite Damage\\Front End":{"note":"","data":["801766C0 0040"],"options":null},"Championship Mode\\Great Britain\\Infinite Damage\\Left Side":{"note":"","data":["801766C4 0040"],"options":null},"Championship Mode\\Great Britain\\Infinite Damage\\Right Side":{"note":"","data":["801766C8 0040"],"options":null},"Championship Mode\\Great Britain\\Infinite Damage\\Tires":{"note":"","data":["801766CC 0040"],"options":null},"Championship Mode\\Great Britain\\Start On 3rd Lap":{"note":"","data":["D017668F 0001","8017668F 0003"],"options":null},"Championship Mode\\Have 255 Race Points":{"note":"","data":["80101D1A 00FF"],"options":null},"Championship Mode\\Italy\\Infinite Damage\\Front End":{"note":"","data":["8017E500 0040"],"options":null},"Championship Mode\\Italy\\Infinite Damage\\Left Side":{"note":"","data":["8017E504 0040"],"options":null},"Championship Mode\\Italy\\Infinite Damage\\Right Side":{"note":"","data":["8017E508 0040"],"options":null},"Championship Mode\\Italy\\Infinite Damage\\Tires":{"note":"","data":["8017E50C 0040"],"options":null},"Championship Mode\\Italy\\Start On 3rd Lap":{"note":"","data":["D017E4CF 0001","8017E4CF 0003"],"options":null},"Championship Mode\\Spain\\Infinite Damage\\Front End":{"note":"","data":["801870F0 0040"],"options":null},"Championship Mode\\Spain\\Infinite Damage\\Left Side":{"note":"","data":["801870F4 0040"],"options":null},"Championship Mode\\Spain\\Infinite Damage\\Right Side":{"note":"","data":["801870F8 0040"],"options":null},"Championship Mode\\Spain\\Infinite Damage\\Tires":{"note":"","data":["801870FC 0040"],"options":null},"Championship Mode\\Spain\\Start On 3rd Lap":{"note":"","data":["D01870BF 0001","801870BF 0003"],"options":null},"Championship Mode\\USA\\Infinite Damage\\Front End":{"note":"","data":["8017EFA0 0040"],"options":null},"Championship Mode\\USA\\Infinite Damage\\Left Side":{"note":"","data":["8017EFA4 0040"],"options":null},"Championship Mode\\USA\\Infinite Damage\\Right Side":{"note":"","data":["8017EFA8 0040"],"options":null},"Championship Mode\\USA\\Infinite Damage\\Tires":{"note":"","data":["8017EFAC 0040"],"options":null},"Championship Mode\\USA\\Start On 3rd Lap":{"note":"","data":["D017EF6F 0001","8017EF6F 0003"],"options":null},"Easy Courses\\Australia\\Always Low Lap Timer":{"note":"","data":["81178F90 0000","81178F92 0000"],"options":null},"Easy Courses\\Australia\\Have 1st":{"note":"","data":["80178F87 0000"],"options":null},"Easy Courses\\Great Britian\\Always Low Lap Timer":{"note":"","data":["811766B0 0000","811766B2 0000"],"options":null},"Easy Courses\\Great Britian\\Have 1st":{"note":"","data":["801766A7 0000"],"options":null},"Easy Courses\\Spain\\Always Low Lap Timer":{"note":"","data":["811870E0 0000","811870E2 0000"],"options":null},"Easy Courses\\Spain\\Have 1st":{"note":"","data":["801870D7 0000"],"options":null},"Expert Courses\\Canada\\Always Low Lap Timer":{"note":"","data":["8117CF90 0000","8117CF92 0000"],"options":null},"Expert Courses\\Canada\\Have 1st":{"note":"","data":["8017CF87 0000"],"options":null},"Expert Courses\\Germany\\Always Low Lap Timer":{"note":"","data":["8117DF90 0000","8117DF92 0000"],"options":null},"Expert Courses\\Germany\\Have 1st":{"note":"","data":["8017DF87 0000"],"options":null},"Expert Courses\\USA\\Always Low Lap Timer":{"note":"","data":["8117EF90 0000","8117EF92 0000"],"options":null},"Expert Courses\\USA\\Have 1st":{"note":"","data":["8017EF87 0000"],"options":null},"Infinite Time":{"note":"","data":["81104998 49F2"],"options":null},"Medium Courses\\Brazil\\Always Low Lap Timer":{"note":"","data":["811748D0 0000","811748D2 0000"],"options":null},"Medium Courses\\Brazil\\Have 1st":{"note":"","data":["801748C7 0000"],"options":null},"Medium Courses\\France\\Always Low Lap Timer":{"note":"","data":["81172480 0000","81172482 0000"],"options":null},"Medium Courses\\France\\Have 1st":{"note":"","data":["80172477 0000"],"options":null},"Medium Courses\\Italy\\Always Low Lap Timer":{"note":"","data":["8117E4D0 0000","8117E4D2 0000"],"options":null},"Medium Courses\\Italy\\Have 1st":{"note":"","data":["8017E4E7 0000"],"options":null}},"73ABB1FB-9CCA6093-C:45":{"Always 1st":{"note":"","data":["8022AD06 0001"],"options":null},"Class Select":{"note":"This code is useful because you can play Class AA without having to beat a level!","data":["8021E1A7 00??"],"options":{"1 Play":"04","2 Play":"05","3 Play":"06","4 Play":"07","Class AA":"03","Class B":"01","Class C":"00"}},"Super Speed":{"note":"This is Turbo fast,So to slow it down a little more keep the B button pressed down","data":["8122AEB8 4800"],"options":null}},"7433D9D7-2C4322D0-C:50":{"Have All\\Weapons and Infinite Max Ammo\\Level 01":{"note":"","data":["50000904 0000","802A46AB 0001","50000604 0000","812A46CE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 02":{"note":"","data":["50000904 0000","8028A47B 0001","50000604 0000","8128A49E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 03":{"note":"","data":["50000904 0000","8027223B 0001","50000604 0000","8127225E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 04":{"note":"","data":["50000904 0000","8026A70B 0001","50000604 0000","8126A72E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 05":{"note":"","data":["50000904 0000","8028812B 0001","50000604 0000","8128814E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 06":{"note":"","data":["50000904 0000","8027DA0B 0001","50000604 0000","8127DA2E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 07":{"note":"","data":["50000904 0000","802811CB 0001","50000604 0000","812811EE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 08":{"note":"","data":["50000904 0000","8027C45B 0001","50000604 0000","8127C47E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 09":{"note":"","data":["50000904 0000","80247C7B 0001","50000604 0000","81247C9E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 10":{"note":"","data":["50000904 0000","80276C4B 0001","50000604 0000","81276C6E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 11":{"note":"","data":["50000904 0000","80278AFB 0001","50000604 0000","81278B1E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 12":{"note":"","data":["50000904 0000","8028F69B 0001","50000604 0000","8128F6BE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 13":{"note":"","data":["50000904 0000","80278A4B 0001","50000604 0000","81278A6E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 14":{"note":"","data":["50000904 0000","802807DB 0001","50000604 0000","812807FE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 15":{"note":"","data":["50000904 0000","8027636B 0001","50000604 0000","8127638E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 16":{"note":"","data":["50000904 0000","8028B7FB 0001","50000604 0000","8128B81E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 17":{"note":"","data":["50000904 0000","8027278B 0001","50000604 0000","812727AE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 18":{"note":"","data":["50000904 0000","8026594B 0001","50000604 0000","8126596E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 19":{"note":"","data":["50000904 0000","8024A28B 0001","50000604 0000","8124A2AE 03E7"],"options":null},"Invincible":{"note":"","data":["8002E618 0000"],"options":null},"Status Bar Always On":{"note":"","data":["8008E4CF 0001"],"options":null}},"74E87A70-6293AED4-C:50":{"Cheats Enabled Modifier":{"note":"","data":["8108F8F0 ????"],"options":{"Anyway (Race Circuits Backwards)":"0400","Big Wheels (Big Foot Cars)":"0040","Car Radio (Remote Control Cars)":"0100","Chopper (Top Down View)":"0200","Easy Money (You Get 1":"0008","Extra Resolution (Able To Change Resolution In Options Screen)":"0800","Fast Bucks (You Get 250":"0004","Skywalker (Hover Cars)":"0080","Smurfing (High Pitched Voices)":"0020","Trophies (Second And Third Championships Wins)":"0010"}},"Have\\Access All Trophies":{"note":"Also gives you all extra features in quick race \u0026 Trophy mode","data":["800BAA9B 0007","800BACAF 0007"],"options":null},"Have\\Always 1st":{"note":"","data":["800C1F81 0001","800C1F83 0001"],"options":null},"Have\\Easy Win":{"note":"Right After Start,Go, Quit Race, And you Have Won","data":["800BACAD 000A"],"options":null},"Have\\Infinite Supply Of Super Tires":{"note":"For All Cars","data":["5000220C 0000","810BAD58 0F0F","5000220C 0000","810BAD5A 0F0F"],"options":null},"Have\\Lots Of Seasons":{"note":"","data":["810BACAA 03E7"],"options":null},"Have\\Max Cash":{"note":"","data":["810BACA4 3AFF","810BACA6 F454"],"options":null},"Have\\Max Race Points":{"note":"","data":["800BACBE 00FF"],"options":null},"Have\\Max Upgrade":{"note":"For All Cars","data":["5000220C 0200","810BAD56 0270"],"options":null},"Race Options\\Laps To Race Select":{"note":"","data":["800A4649 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Race Options\\Race Direction Select":{"note":"","data":["800A4601 00??"],"options":{"Mirrored Normal":"02","Mirrored Reverse":"03","Normal":"00","Reverse":"01"}},"Race Options\\Track Select":{"note":"","data":["8008FA5D 00??"],"options":{"Area 51":"04","Chateau":"07","Docklands":"08","Lumber Mill":"03","Oilfields":"05","Rocket Base":"00","Ski Resort":"02","Temple":"01","Titus Park":"09","Tudor Village":"06"}},"Race Options\\View Select":{"note":"Select your View and then at start of Race press C-Up Button","data":["D00C2171 0000","800C2171 00??"],"options":{"Behind View":"01","Distant Behind View":"0B","Further Behind View":"02","Helicopter View":"FF","Inside Car":"00"}},"Special Category\\A Car [Mind Star 600]":{"note":"","data":["810BAE8E 3D70","810BAE90 0F0F","810BAE92 0F0F"],"options":null},"Special Category\\B Car [Vertige Stallion]":{"note":"","data":["810BAE16 2378","810BAE18 0F0F","810BAE1A 0F0F"],"options":null},"Special Category\\C Car [Mind Star 200R]":{"note":"","data":["810BAD86 0A78","810BAD88 0F0F","810BAD8A 0F0F"],"options":null}},"75A4E247-6008963D-C:45":{"Brandon Gang":{"note":"","data":["80125AB6 0001"],"options":null},"Cassandra Gang":{"note":"","data":["80125AB5 0001"],"options":null},"Edge Hits Everything":{"note":"","data":["80071AF0 0043"],"options":null},"Enable Models":{"note":"","data":["80125AB3 0001"],"options":null},"Infinite Tank Bucks":{"note":"","data":["80236A9F 0064"],"options":null},"Invulnerability":{"note":"","data":["80125AB0 0001"],"options":null},"Level Select":{"note":"","data":["80117F49 0001"],"options":null},"Mini-Tanks 1":{"note":"","data":["80125AB8 0001"],"options":null},"Mini-Tanks 2":{"note":"","data":["80125AB9 0001"],"options":null},"Mini-Tanks 3":{"note":"","data":["80125AB9 0001"],"options":null},"Mini-Tanks 4":{"note":"","data":["80125ABB 0001"],"options":null},"Mini-Tanks 5":{"note":"","data":["80125ABC 0001"],"options":null},"Rapid Fire":{"note":"","data":["8008E7F0 0001"],"options":null},"Secret Level":{"note":"","data":["80125AB2 0001"],"options":null},"Start With All Weapons":{"note":"","data":["80125AB1 0001"],"options":null}},"75B61647-7ADABF78-C:45":{"Max Score":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null},"Press L Button for Max Gauge\\Player 1":{"note":"","data":["D00B49D1 0020","811D2602 0098"],"options":null},"Press L Button for Max Gauge\\Player 2":{"note":"","data":["D00B49D7 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}}},"75FA0E14-C9B3D105-C:44":{"Earn Spirits Faster":{"note":"","data":["8007D66D 0000"],"options":null},"Have All Elements":{"note":"","data":["8107D65C 3232","8107D65E 3232"],"options":null},"Makes your HP 999-999":{"note":"","data":["8107D63C 03E7","8107D63E 03E7"],"options":null},"Makes your MP 999-999":{"note":"","data":["8107D640 03E7","8107D642 03E7"],"options":null},"No Random Battles":{"note":"","data":["8008E12C 0000","8008E12E 0000"],"options":null},"Set Agility to 999-999":{"note":"","data":["8107D644 03E7"],"options":null},"Set Defence to 999-999":{"note":"","data":["8107D646 03E7"],"options":null}},"769147F3-2033C10E-C:45":{"Always Have Equipped\\Player 1":{"note":"","data":["8039B144 00??","8039B147 00??","8039B149 0009"],"options":{"Boomerang":"04","Bullets":"07","Magnet":"01","Seeker":"05","Shield":"08","Stinger":"03","Stopper":"06","Turbo":"00"}},"Always Have Equipped\\Player 2":{"note":"","data":["8039B3E4 00??","8039B3E7 00??","8039B3E9 0009"],"options":{"Boomerang":"04","Bullets":"07","Magnet":"01","Seeker":"05","Shield":"08","Stinger":"03","Stopper":"06","Turbo":"00"}},"Always Have Equipped\\Player 3":{"note":"","data":["8039B684 00??","8039B687 00??","8039B689 0009"],"options":{"Boomerang":"04","Bullets":"07","Magnet":"01","Seeker":"05","Shield":"08","Stinger":"03","Stopper":"06","Turbo":"00"}},"Always Have Equipped\\Player 4":{"note":"","data":["8039B924 00??","8039B927 00??","8039B929 0009"],"options":{"Boomerang":"04","Bullets":"07","Magnet":"01","Seeker":"05","Shield":"08","Stinger":"03","Stopper":"06","Turbo":"00"}},"Game Speed":{"note":"","data":["802C9339 00??"],"options":{"Advanced":"02","Default":"01","Master":"03","Novice":"00"}},"Have All\\Cars":{"note":"","data":["50000402 0000","803DF94B 0001"],"options":null},"Have All\\Cups,Tracks \u0026 Challenges":{"note":"","data":["50000302 0000","802CB4A9 0001","50000402 0000","803DD109 0001"],"options":null},"Infinite Credits":{"note":"","data":["80388C1D 0009"],"options":null},"Max Score Points":{"note":"","data":["8139AFB6 03E7"],"options":null}},"776646F6-06B9AC2B-C:50":{"Boost From Start":{"note":"","data":["D02C4DA0 003F","802C4925 0050"],"options":null},"Infinite Lives":{"note":"","data":["800D8729 0005"],"options":null},"Infinite Shield":{"note":"","data":["812C4B48 4326","812C4B4C 4326"],"options":null},"Time Always 00.00.00/1st Place":{"note":"","data":["812C4BC0 0000","812C4BC2 0001"],"options":null},"Unlock Everything":{"note":"","data":["810C01E8 0100"],"options":null}},"782A9075-E552631D-C:44":{"Have 99 coins":{"note":"","data":["810BBBDE 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C8542 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BBBCC 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BBBD6 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BBBDA 0009"],"options":null}},"7928FE93-135A30CB-C:45":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118D8C0 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118D8C2 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118D8C4 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118D8C6 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["50000401 0000","8018ED10 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\1-2 player Mode\\Player 1":{"note":"","data":["80165F5D 00??","80165F8A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\1-2 player Mode\\Player 2":{"note":"","data":["8016603D 00??","8016606A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["8016611D 00??","8016614A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["801661FD 00??","8016622A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["801662DD 00??","8016630A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["801663BD 00??","801663EA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818EDEF 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F6915 0020","810F69C8 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F6925 0020","810F77A0 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F6935 0020","810F8578 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F6945 0020","810F9350 4000"],"options":null}},"7A65FDEC-50296300-C:45":{"All 64 Characters In Multi Player":{"note":"","data":["8002B197 0040"],"options":null},"All Objectives Complete":{"note":"","data":["80036FD3 0001"],"options":null},"Always Have\\00:00 Time (All Levels)":{"note":"","data":["8004837E 0000","8004838E 0000","80048396 0000","80079A22 0000","80079F26 0000"],"options":null},"Bulletproof Bond":{"note":"","data":["8002CE44 0030"],"options":null},"Cradle in multiplayer":{"note":"Puts the cradle graphic in the levels screen where the facility normally is in the multiplayer levels screen.Warning it doesn't allow you to enter the multiplayer levels screen,it should automatically Have\\selected cradle, which cannot be changed from the multiplayer menus","data":["8002B11D 0092","8002B11F 0093","8002B127 0029","8002B123 0008","802ADC8D 0052","802ADC8E 0041","802ADC8F 0044","802ADC90 004C","802ADC91 0045"],"options":null},"Custom Weapon Grouping":{"note":"golden gun fun should replace slappers only! appears in the multi weapons.","data":["80048673 0013","81048678 3FC0","80048677 00D0","8004867F 000D","80048683 000A","8004868B 0013","81048690 3FC0","8004868F 00D0","80048697 000D","8004869B 000A","800486A3 0019","810486A8 3FC0","800486A7 00D3","800486AF 0006","800486B3 0003","800486BB 0019","810486C0 3FC0","800486BF 00D3","800486C7 0006","800486CB 0003","800486D3 0013","810486D8 3FC0","800486D7 00D0","800486DF 000D","800486E3 000A","800486EB 0013","810486F0 3FC0","800486EF 00D0","800486F7 000D","800486FB 000A","80048703 0019","81048708 3FC0","80048707 00D3","8004870F 0006","80048713 0003","8004871B 0019","81048720 3FC0","8004871F 00D3","80048727 0006","8004872B 0003","812AEA50 476F","812AEA52 6C64","812AEA54 656E","812AEA56 2047","812AEA58 756E","812AEA5A 2046","812AEA5C 756E","802AEA5E 0000"],"options":null},"Enable All Levels":{"note":"","data":["80036FB7 0001"],"options":null},"Enable All Levels \u0026 In-Built Cheat Menu":{"note":"","data":["8006992E FFFF","80069930 FFFF","80069967 FFFF","8006996C FFFF","80069971 FFFF","80069976 FFFF","8006997B FFFF","8006992F FFFF","80069965 FFFF","8006996A FFFF","8006996F FFFF","80069974 FFFF","80069979 FFFF"],"options":null},"Facility Back Zone In Multiplayer\\Part 1\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811E6554 45E4","811E6558 43D5","811E655C C5A7","811E657C 801C","811E657E 6774","811E5164 45E4","811E5168 C383","811E516C 4492","811E518C 801C","811E518E D574","811E78C0 45AD","811E78C4 C383","811E78C8 4440","811E78E8 801C","811E78EA E464","811E4D18 45D0","811E4D1C 4307","811E4D20 C4FB","811E4D40 801C","811E4D42 75EC","811E6738 45CD","811E673C C383","811E6740 43F4","811E6760 801C","811E6762 A0DC","811E5450 45C2","811E5454 4356","811E5458 C598","811E5478 801C","811E547A 6A74","811E5240 4608","811E5244 4307","811E5248 43DC","811E5268 801C","811E526A 962C","811E691C 4606","811E6920 4321","811E6924 449D","811E6944 801C","811E6946 CBEC","801ED447 008A","801ED4DB 008B","801ED56F 008C","801ED603 008D","801ED697 008E","801ED72B 008F","801ED7BF 007D","801ED853 007E","801ED443 002A","801ED4D7 002A","801ED56B 002A","801ED5FF 002A","801ED693 002A","801ED727 002A","801ED7BB 002A","801ED84F 002A","801ED449 0000","801ED4DD 0000","801ED571 0000","801ED605 0000","801ED699 0000","801ED72D 0000","801ED7C1 0000","801ED855 0000","801ED44D 0000","801ED4E1 0000","801ED575 0000","801ED609 0000","801ED69D 0000","801ED731 0000","801ED7C5 0000","801ED859 0000","801EB743 002A","801EB745 0068","811EB746 277F","811EB748 1000","811EB74A 0262","811EB7C2 0190","801EB7C5 0000","811EB7C6 0258"],"options":null},"Facility Back Zone In Multiplayer\\Part 2\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811EB7C8 0000","811EB7CC FFFF","811EB7CE FFFF","811EB7D2 0000","801EB7D5 0000","801EB7DB 0000","811EB7E2 0000","801EB7E7 0000","801EB843 002A","801EB845 0068","811EB846 2780","811EB848 1000","811EB84A 0262","811EB8C2 0190","801EB8C5 0000","811EB8C6 0258","811EB8C8 0000","811EB8CC FFFF","811EB8CE FFFF","811EB8D2 0000","801EB8D5 0000","801EB8DB 0000","811EB8E2 0000","801EB8E7 0000","801EB943 002A","801EB945 0068","811EB946 2791","811EB948 1000","811EB94A 0262","811EB9C2 0190","801EB9C5 0000","811EB9C6 0258","811EB9C8 0000","811EB9CC FFFF","811EB9CE FFFF","811EB9D2 0000","801EB9D5 0000","801EB9DB 0000","811EB9E2 0000","801EB9E7 0000","801EBA43 002A","801EBA45 0068","811EBA46 2792","811EBA48 1000","811EBA4A 0262","811EBAC2 0190","801EBAC5 0000","811EBAC6 0258","811EBAC8 0000","811EBACC FFFF","811EBACE FFFF","811EBAD2 0000","801EBAD5 0000","801EBADB 0000","811EBAE2 0000","801EBAE7 0000","801EBB45 00A0","801EBC45 00A0","801EBD45 00A0","801EBE45 00A0","801EBB47 0075","801EBC47 0076","801EBD47 0077","801EBE47 0078","801EBBE7 0001","801EBCE7 0001","801EBDE7 0001","801EBEE7 0001","801EC247 0071","801ECD47 0072","801ECE47 0074","801ECF47 006C","801ED047 0079","801ED147 0083","D01EBFC5 005A","801EBFC5 0000","D11EBFC6 0000","811EBFC6 F333","D11EBFC8 03E8","811EBFC8 0000"],"options":null},"Facility Back Zone In Multiplayer\\Part 3\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["D11EBFCA 0000","811EBFCA F0C4","D11EBFCE 4CCC","811EBFCE 000A","D11EBFD2 4CCC","811EBFD2 000A","D11EBFD4 0003","811EBFD4 0000","D11EBFD6 0000","811EBFD6 02C4","801EBFD9 0004","801EBFDB 0000","811EBFE2 0384","801EBFE7 0004","801EBF45 009E","801EBF47 0084","801EBF48 0010","801EC2D9 0000","801EC447 0085","801EC547 0086","811EA6B6 2743","811EA73E 0114","811EA7F2 0115","811EA8A6 00A3","811EA92E 009D","811EA9E2 00A4","811EAA96 00DA","811EAB1E 00DB","811EABD2 00DF","811EAC86 0130","811EAD0E 008D","811EADC2 012E","811EAE76 0111","811EAEFE 2740","811EAFB2 2741","811EB066 00A0","811EB0EE 009E","811EB1A2 009F","811EB256 274F","811EB2DE 2750","811EB392 0117","811EB446 0131","811EB4CE 008E","811EB582 0132","811EB636 00A1","811EB6BE 0119","811EA62E 00FA","801ED3DF 0000","801ED2DF 0001","D0024337 0007","80024337 001F"],"options":null},"Gain Access\\To Aztec Level Without Beating Secret Agent Or 00 Agent":{"note":"","data":["8002A8FB 001A"],"options":null},"Gain Access\\To Egyptian Level Without Beating Secret Agent Or 00 Agent":{"note":"","data":["8002A8FB 001C"],"options":null},"Infinite Ammo (All Levels)":{"note":"","data":["80079E3B 0001"],"options":null},"Infinite Health Player 1 (all levels)":{"note":"","data":["8100C0F4 0801","8100C0F6 8090","8100C0F8 AFA4","8100C0FA 0000","81060240 0004","81060242 7600","81060244 3C02","81060246 8008","81060248 8C42","8106024A 9EE0","8106024C 3401","8106024E 3F80","81060250 A441","81060252 00DC","81060254 0800","81060256 303F"],"options":null},"Replace Cradle with Citadell hidden level":{"note":"","data":["8002A8F7 0029","8104468A 8970","81044690 3F44","81044692 BDEA","81044694 3F80","81044696 0000","81044698 4219","8104469A D89D","80069F80 00C4"],"options":null},"Secret Island on Dam Level":{"note":"For the above code to work,Get to the 2nd guard tower \u0026 go down the ladder on the left hand side \u0026 to the end of the Dock, Press L \u0026 GS and you will be transfered in the water. Just keep walking straight \u0026 you will get to it. Obviously you can't actually climb ladders or anything, you will simply walkthrough anything on that Part, if you want to walk back to the Dock, when you come near it click the cheat back on \u0026 keep pressing L \u0026 GS untill you are back on it.","data":["D0064F31 0020","800D33ED 0050","880D33ED 0000"],"options":null},"Walk through doors, objects":{"note":"","data":["800364CB 00??"],"options":{"Off":"01","On":"00"}},"Weak Enemies":{"note":"","data":["8002CE48 0048"],"options":null}},"7AA65B36-FDCEE5AD-C:4A":{"Always Have\\BFG 9000":{"note":"","data":["80063B4B 0001"],"options":null},"Always Have\\Bio Suite":{"note":"","data":["80063AF3 00??"],"options":{"Off":"00","On":"FF"}},"Always Have\\Chain Gun":{"note":"","data":["80063B3F 0001"],"options":null},"Always Have\\Chainsaw":{"note":"","data":["80063B2B 0001"],"options":null},"Always Have\\Double Shotgun":{"note":"","data":["80063B3B 0001"],"options":null},"Always Have\\Gun":{"note":"","data":["80063B33 0001"],"options":null},"Always Have\\Have Rocket Launcher":{"note":"","data":["80063B41 0001"],"options":null},"Always Have\\Laser Weapon":{"note":"","data":["80063B4D 0001"],"options":null},"Always Have\\Missile Launcher":{"note":"","data":["80063B43 0001"],"options":null},"Always Have\\Plasma Rifle":{"note":"","data":["80063B47 0001"],"options":null},"Always Have\\Rapid Fire":{"note":"","data":["81063BAA 0B94"],"options":null},"Always Have\\Shotgun":{"note":"","data":["80063B37 0001"],"options":null},"Berserk Mode":{"note":"","data":["80063AEB 00FF"],"options":null},"Enable Cheat Menu":{"note":"","data":["8005B043 0001"],"options":null},"Have All\\Keys":{"note":"","data":["50000504 0000","81063AFE FFFF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000A04 0000","81063B2A 0001"],"options":null},"Infinite\\Ammo All Weapons":{"note":"","data":["50000404 0000","81063B52 013C"],"options":null},"Infinite\\Armor":{"note":"","data":["80063ADF 00FF"],"options":null},"Invincible":{"note":"","data":["80063B7B 0002"],"options":null},"Invincible And Map Markers":{"note":"","data":["80063B7B 0006"],"options":null},"Turn Map Markers On":{"note":"","data":["80063B7B 0004"],"options":null},"[Max Brightness]":{"note":"Enable this cheat on rom load to have Max Brightness (internal) and then put Jabo d3d8 on 160% Max for a extra brightness Boost.","data":["8005B598 0064"],"options":null}},"7BB18D40-83138559-C:55":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2CD2 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE51F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80382CB7 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","80202BB5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","801DE715 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","801FD085 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","801F042D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","80202CE5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","801DA57D 0001"],"options":null}},"7C3829D9-6E8247CE-C:45":{"Lower Left Character\\Coin Options":{"note":"","data":["810D1182 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDC6D 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800D1186 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["810D11BA 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDCB9 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800D11BE 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["810D1112 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDBD5 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800D1116 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["810D114A 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDC21 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800D114E 00??"],"options":{"0 Stars":"00","99 Stars":"64"}}},"7C647C25-D9D901E6-C:45":{"Ballista Can Drive Through Anything":{"note":"","data":["803F8A68 0001"],"options":null},"Found All\\RDUS":{"note":"","data":["8036E9CC C350"],"options":null},"Found All\\Scientists":{"note":"","data":["80364AD0 003F"],"options":null},"Found All\\Survivors":{"note":"","data":["8036E9C9 00FF"],"options":null},"Infinite Time":{"note":"","data":["D0315610 0000","81315610 0000","D0315612 0001","81315612 0000"],"options":null},"Infinite\\Boosts Buggy Vehicle":{"note":"","data":["803EE301 0064"],"options":null},"Infinite\\Hydraulics Sidesweeper":{"note":"","data":["803EDB51 0063"],"options":null},"Infinite\\Missiles Motor Bike":{"note":"","data":["803F8AC3 0063"],"options":null}},"7C647E65-1948D305-C:45":{"Ballista Can Drive Through Anything":{"note":"","data":["803F8B17 0001"],"options":null},"Found All\\RDUS":{"note":"","data":["8036EA7C C350"],"options":null},"Found All\\Scientists":{"note":"","data":["80364B80 003F"],"options":null},"Found All\\Survivors":{"note":"","data":["8036EA70 00FF"],"options":null},"Infinite Time":{"note":"","data":["D03156C0 0000","813156C0 0000","D03156C2 0001","813156C2 0000"],"options":null},"Infinite\\Boosts Buggy Vehicle":{"note":"","data":["803EE3B0 0064"],"options":null},"Infinite\\Hydraulics Sidesweeper":{"note":"","data":["803EDC00 0063"],"options":null},"Infinite\\Missiles Motor Bike":{"note":"","data":["803F8B72 0063"],"options":null}},"7C64E6DB-55B924DB-C:50":{"Ballista Can Drive Through Anything":{"note":"","data":["803F8A68 0001"],"options":null},"Found All RDUS":{"note":"","data":["8036E9CC C350"],"options":null},"Found All Scientists":{"note":"","data":["80364AD0 003F"],"options":null},"Found All Survivors":{"note":"","data":["8036E9C9 00FF"],"options":null},"Infinite Boosts Buggy Vehicle":{"note":"","data":["803EE301 0064"],"options":null},"Infinite Hydraulics Sidesweeper":{"note":"","data":["803EDB51 0063"],"options":null},"Infinite Missiles Motor Bike":{"note":"","data":["803F8AC3 0063"],"options":null}},"7CD08B12-1153FF89-C:45":{"Can Walk When The Game Is Paused":{"note":"","data":["810AB9B6 0001"],"options":null},"Have All\\Keys":{"note":"This will give you the Grey \u0026 Red,Green \u0026 Gold Keys","data":["800BD0B8 00FF","800BD0BE 00FF","800BD0BD 00FF"],"options":null},"Have All\\Music Notes":{"note":"This will give you all 10 Music Notes","data":["50000A01 0000","800BD1F0 0001"],"options":null},"Infinite\\Health":{"note":"","data":["800BD0F7 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["800BD0E3 0009"],"options":null},"Max Money":{"note":"","data":["810BD0E6 03E7"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D017DBC5 0020","810DAFD8 44CB"],"options":null}},"7DE11F53-74872F9D-C:45":{"99 Points":{"note":"","data":["801CB0A3 0063"],"options":null},"Always First Place":{"note":"","data":["801C269F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801C2983 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801C295E 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801C27C7 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801C2DEA 0005","801C308A 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801C27CF 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800DA753 0007"],"options":null},"Open\\Course Option":{"note":"This works in all modes except for Championship Mode.","data":["801CAFEB 00??"],"options":{"Dolphin Park":"00","Drake Lake":"03","Glacier Coast":"07","Marian Fortress":"04","Port Blue":"05","Southern Island":"08","Sunny Beach":"01","Sunset Bay":"02","Twilight City":"06"}},"Open\\Difficulty Option":{"note":"","data":["801CAFE0 00??"],"options":{"Dolphin":"10","Dolphin \u0026 Expert":"12","Dolphin \u0026 Hard":"11","Dolphin Hard \u0026 Expert":"13","Expert":"02","Hard":"01","Hard \u0026 Expert":"03"}},"Open\\Level Option":{"note":"","data":["800DA753 00??"],"options":{"Above \u0026 Drake Lake":"03","All Above \u0026 Glacier Coast":"16","All Above \u0026 Marine Fortress":"04","All Above \u0026 Port Blue":"05","All Above \u0026 Southern Island":"06","All Above \u0026 Twilight City":"0D","Sunset Bay":"02"}},"Super Speed":{"note":"","data":["801C27C7 0005","D0154051 0010","801C27C7 0020"],"options":null}},"7EAE2488-9D40A35A-C:4A":{"Have All Guns In Chest":{"note":"","data":["50000E04 0100","810E5474 05FF"],"options":null},"Have All Main Items In Chest":{"note":"If you want items that are not listed in the Chest, then just use the Have Item On Slot Select code to have what you desire.","data":["810E54AC 17FF","810E54B0 1EFF","810E54B4 1FFF","810E54B8 23FF","50000404 0100","810E54BC 25FF","810E54CC 2AFF","810E54D0 2BFF","50000304 0100","810E54D4 2EFF","50000F04 0100","810E54E0 32FF","810E551C 43FF","50000504 0100","810E5520 47FF","50000404 0100","810E5534 53FF","50000C04 0100","810E5544 58FF"],"options":null},"Have\\Fine Condition Always":{"note":"","data":["810DD964 0000"],"options":null},"Have\\Item On Slot Select\\Slot 01":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5448 00??","800E5449 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 02":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E544C 00??","800E544D 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 03":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5450 00??","800E5451 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 04":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5454 00??","800E5455 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 05":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5458 00??","800E5459 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 06":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E545C 5D??","800E545D 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 07":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5460 00??","800E5461 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 08":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5464 00??","800E5465 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 09":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5468 00??","800E5469 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 10":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E546C 00??","800E546D 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Infinite\\Health":{"note":"","data":["810DD8A2 00C8"],"options":null},"Infinite\\Time":{"note":"","data":["800E8CBF 0010"],"options":null},"Play As":{"note":"This allows you to select what character you wish to play as. Just slect on load and select as normal at the menu and when in game you will be the character of your choice","data":["810DD6B8 ????"],"options":{"Ada (can crash the game)":"0E80","Cheryl":"0F80","Claire Original":"0380","Claire as Biker":"0980","Claire without jacket":"0780","Claires body Leons outfit":"0B80","Hunk (can crash the game)":"0C80","Leon Original":"0280","Leon Wounded":"0680","Leon as Biker":"0A80","Leon as Stars":"0880","To Fu":"0D80"}},"Play Extra Mission":{"note":"This allows you to select what extra mission you wish to play. Just slect on load and carry on as normal at the menu and when in game you will be the character of your choice Do not use at the same time as [Resident Evil 2 Mode]","data":["810DD66E 00??"],"options":{"The 4th Survior":"48","To-Fu":"49"}},"Quick Chest Access":{"note":"With this code, all you Have\\to do to access the chest, is hold L and C-Down","data":["D10DBE8C 0005","810E4EA8 8007","D10DBE8C 0005","810E4EAA 0814"],"options":null},"Quick Save Access":{"note":"(1 Anytime, anywhere, press Z and C-Down at the same time. You'll get the standard typewriter text: \"It's an old typewriter. You can save your progress with this.\" Note that you must, of course, Have\\an ink ribbon to save. 2) Choose \"Yes\" and you'll be able to save normally. Instead of the location name, your save file will say \"Scenario 1st\" or \"Scenario 2nd.\" 3) When you load your save file, you'll Have\\to skip through the intro, but when the game loads up you'll be exactly where you saved!","data":["D10DBE8C 0044","810E4EA8 8007","D10DBE8C 0044","810E4EAA 06B0"],"options":null},"[Resident Evil 2 Mode]":{"note":"Note: With this enabled the game will become Resident Evil 2, the English version of Biohazard 2! This means all text (except the text in files) is in Japanese, and all cinemas Have\\English subtitles. Note that the title screen will still say Biohazard 2 Do not use at the same time as Play Extra Mission","data":["810DD66E 00??"],"options":{"Off":"00","On":"40"}},"[Saves Always 0]":{"note":"No matter how many saves you do ithis makes the game think you Have\\not saved.","data":["800E50D1 0000"],"options":null}},"7ECBE939-3C331795-C:45":{"Have all Cheats":{"note":"Go into the Cheats From the main Menu \u0026 put on the Ones you want","data":["810CD226 01FF"],"options":null}},"7ED67CD4-B4415E6D-C:50":{"Access Demitron Character":{"note":"","data":["80049AA4 0001"],"options":null},"Access Sonork Character":{"note":"","data":["80049AA0 0001"],"options":null},"Infinite Health\\All Levels\\Player 1":{"note":"","data":["812716E0 0190","8127BDB8 0190","8127E478 0190","81292EE8 0190","81293768 0190","81297538 0190","812ACCC8 0190","812B1CE8 0190","812B7BE8 0190","8138AEE0 0190"],"options":null},"Infinite Health\\All Levels\\Player 2":{"note":"","data":["81271FB8 0190","8127B158 0190","8127E820 0190","81293B48 0190","81294390 0190","812980B8 0190","812AD608 0190","812B2D08 0190","812B67D8 0190","8138A898 0190"],"options":null},"Music Modifier":{"note":"","data":["80081812 00??"],"options":{"Music Off":"00","Volume Low":"2A","Volume Max":"7F","Volume Medium":"55"}},"Press GS For 2 Rounds Won\\Player 1":{"note":"","data":["880B6491 0002"],"options":null},"Press GS For 2 Rounds Won\\Player 2":{"note":"","data":["880B64A3 0002"],"options":null}},"7EE0E8BB-49E411AA-C:50":{"Access AT-ST Level":{"note":"","data":["81130B38 1250"],"options":null},"Access\\69 Buick Electra":{"note":"Replaces The V-Wing","data":["81130B3A 000E"],"options":null},"Accesses\\All Levels,Ships \u0026 Advanced Weapons":{"note":"","data":["80130B3B 00FF"],"options":null},"Accuracy 100%":{"note":"","data":["80130B5F 0063"],"options":null},"Always Pass Mission":{"note":"","data":["80130AF4 0001"],"options":null},"Bonus Collected 756":{"note":"","data":["80130B67 03E7"],"options":null},"Completion Time 0:00":{"note":"","data":["80130B85 3FCB"],"options":null},"Enemies Destroyed 756":{"note":"","data":["81130B64 03E7"],"options":null},"Friendly Saves 756":{"note":"","data":["80130B66 03E7"],"options":null},"Infinite Lives":{"note":"This Also accesses advanced Shields \u0026 Radar","data":["81130B38 01C0"],"options":null},"Infinite Secondary Weapon":{"note":"","data":["8010CA02 0063","80130B23 00??"],"options":{"Bombs":"04","Cluster Missiles":"07","Ion Cannon":"01","Missiles":"02","Proton Bombs":"05","Seeker Cluster Missiles":"09","Seeker Missiles":"03","Seeker Torpedos":"08"}},"Invincibility":{"note":"This Also Accesses All Levels And Makes All Crafts Available","data":["80130B2D 00FF"],"options":null}},"7F3CEB77-8981030A-C:45":{"Infinite Dinars":{"note":"","data":["800B6043 00E8","800B6042 00E8"],"options":null},"Infinite Health":{"note":"","data":["810CF93E 03E7","810CF942 03E7"],"options":null},"Infinite Magic":{"note":"","data":["810B65CA 0063","810B65B2 0063","810B65E2 0063","810B65FA 0063"],"options":null},"Press L for 1 Hit Kill Punch":{"note":"Press The L Button \u0026 Hold B \u0026 Then Let Go to Kill Enimies,Rocks,Tents etc with One Punch.","data":["D0103383 0020","800D9BCE 0000"],"options":null},"Press L to Levitate":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D017D2D5 0020","810CF994 44CB"],"options":null}},"7F43E701-536328D1-C:50":{"Always Place 1st":{"note":"","data":["8031EC0F 0000"],"options":null},"Extra Cars \u0026 Tracks":{"note":"","data":["8032690F 00FF","8032690C 00FF","8032690D 00FF"],"options":null},"Have 1-6 Level Points":{"note":"","data":["8032685F 0064","80326861 0064","80326863 0064","80326865 0064","80326867 0064","80326869 0064"],"options":null},"Only Race 1 Lap Championship Mode":{"note":"","data":["8031EBDB 0002"],"options":null}},"7F9345D3-841ECADE-C:50":{"Always Have\\Most Powerful Weapon":{"note":"","data":["80088ED9 0003"],"options":null},"Play As\\Player 1":{"note":"","data":["80088E02 00??"],"options":{"Ebisumaru":"01","Goemon":"00","Sasuke":"02","Yae":"03"}},"Unlimited Gate Opener Things":{"note":"","data":["80088EC6 0099"],"options":null},"Unlimited Health\\Player 1":{"note":"","data":["80088ED4 0004"],"options":null},"Unlimited Shield\\Player 1":{"note":"","data":["80088ED5 0004","8015D3C4 0001"],"options":null}},"8066D58A-C3DECAC1-C:45":{"Always On First Shot":{"note":"","data":["811DA47A 0001"],"options":null},"Club Type\\Irons Mods":{"note":"","data":["8012A473 00??"],"options":{"Cavity":"00","Conventional":"01"}},"Club Type\\Sand Wedge Mods":{"note":"","data":["8012A474 00??"],"options":{"58 Degrees":"00","60 Degrees":"01","62 Degrees":"02"}},"Club Type\\Woods Mods":{"note":"","data":["8012A472 00??"],"options":{"Metal Wood":"01","Persimmon":"02","Titan":"00"}},"Max Power":{"note":"","data":["8012A431 FFFF"],"options":null},"Max Putt":{"note":"","data":["8012A435 FFFF"],"options":null},"Max Recover":{"note":"","data":["8012A437 FFFF"],"options":null},"Max Technique":{"note":"","data":["8012A433 FFFF"],"options":null},"Select Club":{"note":"","data":["801DA496 00??"],"options":{"1I":"05","1W":"00","2I":"06","2W":"01","3I":"07","3W":"02","4I":"08","4W":"03","5I":"09","5W":"04","6I":"0A","7I":"0B","8I":"0C","9I":"0D","AW":"0F","PW":"0E","Putter":"11","SW":"10"}}},"80C8564A-929C65AB-C:4A":{"Max Score":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null},"Press L Button for Max Gauge\\Player 1":{"note":"","data":["D00B2791 0020","811D2602 0098"],"options":null},"Press L Button for Max Gauge\\Player 2":{"note":"","data":["D00B2797 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}}},"80F41131-384645F6-C:4A":{"Always 1st":{"note":"","data":["8013CD60 0001"],"options":null},"Freeze All Lap Timers":{"note":"","data":["8013CD21 0001","8013CD25 0001","8013CD29 0001"],"options":null},"Freeze Overall Timer":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8013CD15 0001"],"options":null},"Laps Of Race":{"note":"","data":["8013CD0E 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","Never Ending Laps":"06"}},"Level Select":{"note":"For this cheat to work,as soon as you put the cheat on you must turn it back off,if not you wont beable to quit a Race or even finish one.","data":["8013D01B 00??"],"options":{"Bikini Island":"01","Canyon Rush":"00","China Town":"02","China Town Jam":"04","Neo Arena":"03","Neo Speed Way":"05"}},"Music Modifier":{"note":"","data":["80106CCC 00??"],"options":{"Music Off":"00","Music On":"FF"}},"No Damage\\Player 1":{"note":"","data":["50000402 0000","8113D058 0000"],"options":null},"No Damage\\Player 2":{"note":"","data":["50000402 0000","8113F0E8 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["8013D015 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Play As\\Player 2":{"note":"","data":["8013D016 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Unlock All Tracks and Vehicles":{"note":"","data":["8008D1FC 0001"],"options":null}},"810729F6-E03FCFC1-C:45":{"Away Team\\Full Court Dunks":{"note":"","data":["81182E4E 0004","8118305A 0004","81183266 0004","81183472 0004","8118367E 0004"],"options":null},"Away Team\\Giant Players":{"note":"","data":["81182DF6 0032","81182DFE 003C","81183002 0032","8118300A 003C","8118320E 0032","81183216 003C","8118341A 0032","81183422 003C","81183626 0032","8118362E 003C"],"options":null},"Away Team\\Scores 0":{"note":"","data":["81160FFE 0000"],"options":null},"Away Team\\Scores 150":{"note":"","data":["81160FFE 0096"],"options":null},"Away Team\\Tiny Players":{"note":"","data":["81182DF6 0011","81182DFE 0014","81183002 0011","8118300A 0014","8118320E 0011","81183216 0014","8118341A 0011","81183422 0014","81183626 0011","8118362E 0014"],"options":null},"Creation Points (L / R)":{"note":"","data":["D0061269 0020","8117E008 0200","D0061269 0010","8117E008 0000"],"options":null},"Home Team\\Full Court Dunks":{"note":"","data":["81182412 0004","8118261E 0004","8118282A 0004","81182A36 0004","81182C42 0004"],"options":null},"Home Team\\Giant Players":{"note":"","data":["811823BA 0032","811823C2 003C","811825C6 0032","811825CE 003C","811827D2 0032","811827DA 003C","811829DE 0032","811829E6 003C","81182BEA 0032","81182BF2 003C"],"options":null},"Home Team\\Scores 0":{"note":"","data":["81160FFA 0000"],"options":null},"Home Team\\Scores 150":{"note":"","data":["81160FFA 0096"],"options":null},"Home Team\\Tiny Players":{"note":"","data":["811823BA 0011","811823C2 0014","811825C6 0011","811825CE 0014","811827D2 0011","811827DA 0014","811829DE 0011","811829E6 0014","81182BEA 0011","81182BF2 0014"],"options":null},"Infinite\\Time Outs\\Away":{"note":"","data":["800D5C9B 0007"],"options":null},"Infinite\\Time Outs\\Home":{"note":"","data":["800D5C75 0007"],"options":null},"No Time Outs\\Away":{"note":"","data":["800D5C9B 0000"],"options":null},"No Time Outs\\Home":{"note":"","data":["800D5C7F 0000"],"options":null}},"812289D0-C2E53296-C:50":{"1 Player\\Always Place 1st":{"note":"","data":["80103CD7 0000"],"options":null},"1 Player\\Max\\Acceleration":{"note":"","data":["8012C51F 000A"],"options":null},"1 Player\\Max\\Shocks":{"note":"","data":["8012C527 000A"],"options":null},"1 Player\\Max\\Speed":{"note":"","data":["8012C523 000A"],"options":null},"1 Player\\Max\\Tires":{"note":"","data":["8012C52B 000A"],"options":null},"Multi and 1 Player\\Infinite Turbos\\Player 1":{"note":"Can be used in 1 Player and Multiplayer Modes for Player 1","data":["81103F3A 03E7"],"options":null},"Multi and 1 Player\\Infinite Turbos\\Player 2":{"note":"Multiplayer Mode Only for Player 2","data":["8110422E 03E7"],"options":null},"Multi and 1 Player\\Max Crash Helmets\\Player 1":{"note":"Can be used in 1 Player and Multiplayer Modes for Player 1","data":["80103F33 0064"],"options":null},"Multi and 1 Player\\Max Crash Helmets\\Player 2":{"note":"Multiplayer Mode Only for Player 2","data":["80104227 0064"],"options":null}},"817D286A-EF417416-C:53":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2712 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE03F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802026F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE255 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FCB85 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFF6D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802027A5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DA0BD 0001"],"options":null}},"82B3248B-E73E244D-C:45":{"Always Play On\\2D Board":{"note":"","data":["800E7257 0001"],"options":null},"Always Play On\\3D Board":{"note":"","data":["800E7257 0000"],"options":null},"Debug Mode":{"note":"","data":["810E6290 0001"],"options":null},"Player 1 Controls\\Both Sides In 2-Player":{"note":"This is only for Human VS. Human Game","data":["8012C508 0000"],"options":null},"Time Always Counts Down\\On Black Players Side":{"note":"","data":["8012C67D 0001"],"options":null},"Time Always Counts Down\\On White Players Side":{"note":"","data":["8012C67D 0000"],"options":null}},"82DC04FD-CF2D82F4-C:45":{"Always Have\\50 pieces of corn":{"note":"","data":["801E1A39 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E1A28 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["801E1A26 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E1A3A 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E1A2D 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E1A38 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D008F2C1 0010","801E199E 0001","D008F2C1 0010","801E19AE 0001"],"options":null},"Start with Berry Weapon":{"note":"","data":["811E1A2E 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Unlock All Levels":{"note":"","data":["81099150 000F"],"options":null}},"82EFDC30-806A2461-C:45":{"Away Team Scores 50":{"note":"","data":["801F6407 0032","802004C0 0032"],"options":null},"Home Team Scores 50":{"note":"","data":["801F6406 0032","802004BF 0032"],"options":null}},"839F3AD5-406D15FA-C:50":{"Have All\\Characters Available":{"note":"","data":["810657A0 FFFF"],"options":null},"Have All\\Courts Available":{"note":"","data":["810657A4 FFFF"],"options":null},"Score\\Player 1":{"note":"","data":["80152DFA 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}},"Score\\Player 2":{"note":"","data":["80152DFB 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}}},"83F33AA9-A901D40D-C:45":{"Infinite Time":{"note":"","data":["8114C3D8 000A"],"options":null},"Pick Your Kombat Zone":{"note":"","data":["81257684 00??"],"options":{"Armory":"14","Bell Tower":"07","Bridge":"05","Courtyard":"02","Dead Pool":"11","Graveyard":"09","Hidden Portal":"10","Jade's Desert":"0E","Kahn's Kave":"0D","Kahn's Tower":"04","Kombat Temple":"08","Lair":"18","Living Forest":"15","Lost Bridge":"0F","Pit":"03","Pit 2":"1A","Pit 3":"0A","Pit Bottom":"1C","Portal":"17","River Kombat":"0B","Rooftop":"13","Scorpion's Lair":"0C","Soul Chamber":"06","Star Bridge":"1B","Street":"01","Subway":"00","Tomb":"19","Tower":"16","Wasteland":"12"}},"Player 1\\Aggressor Energy Bar":{"note":"","data":["80169A21 0030"],"options":null},"Player 1\\Energy is":{"note":"","data":["8016998D 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 1\\Infinite Run":{"note":"","data":["81169854 0030"],"options":null},"Player 1\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B5365 0020","811699B4 5100","D02B5365 0020","811699BC 5100"],"options":null},"Player 1\\Play As":{"note":"","data":["8016997D 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Player 2\\Aggressor Energy Bar":{"note":"","data":["80169A23 0030"],"options":null},"Player 2\\Energy is":{"note":"","data":["80169C61 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 2\\Infinite Run":{"note":"","data":["81169C68 0030"],"options":null},"Player 2\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B536D 0020","811699B6 5100","D02B536D 0020","811699BE 5100"],"options":null},"Player 2\\Play As":{"note":"","data":["80169C21 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Unlock Secret":{"note":"","data":["8016A021 0004"],"options":null}},"83F3931E-CB72223D-C:50":{"Access\\All Cars \u0026 Upgrades":{"note":"","data":["813BED58 1FFF","803BED22 0005"],"options":null},"Access\\Florida \u0026 Moon Tracks":{"note":"This is for Championship Mode Only","data":["813BF2A4 0101"],"options":null},"Always 1st\\Player 1":{"note":"","data":["803CDF03 0001"],"options":null},"Always 1st\\Player 2":{"note":"","data":["803CE3DB 0001"],"options":null},"Always 1st\\Player 3":{"note":"","data":["803CDA2B 0001"],"options":null},"Always 1st\\Player 4":{"note":"","data":["803CD553 0001"],"options":null},"Cannot Spin Out":{"note":"","data":["803CDC73 0000"],"options":null},"Dancing Girl Always On":{"note":"","data":["803BED53 0001","803C20AF 0054"],"options":null},"Disable\\Left Lane Traffic":{"note":"This is for Championship Mode Only","data":["8033C83B 0001"],"options":null},"Disable\\Right Lane Traffic":{"note":"This is for Championship Mode Only","data":["8033C83F 0001"],"options":null},"Infinite Time":{"note":"","data":["813D0C1C 4296"],"options":null},"Max Power Level,\u0026 Paint Job / Two Tone":{"note":"","data":["813BEDA2 0512"],"options":null},"Max\\Championship Points":{"note":"","data":["813BFB4E 270F"],"options":null},"Max\\Trick points":{"note":"","data":["803BF21F 0063"],"options":null},"Stop Elapsed Time\\Player 1":{"note":"","data":["813C7558 3C80"],"options":null},"Stop Elapsed Time\\Player 2":{"note":"","data":["813C7794 3C80"],"options":null},"Unlimited Nitro Player 4":{"note":"Press C-Button Down For Boost, This Code is for Championship Mode Only","data":["803C728B 0003"],"options":null},"Unlimited Nitro\\Player 1":{"note":"Press C-Button Down For Boost, This Code is for Championship Mode Only","data":["803C74C7 0003"],"options":null},"Unlimited Nitro\\Player 2":{"note":"Press C-Button Down For Boost, This Code is for Championship Mode Only","data":["803C7703 0003"],"options":null},"Unlimited Nitro\\Player 3":{"note":"Press C-Button Down For Boost, This Code is for Championship Mode Only","data":["803C704F 0064"],"options":null},"Unlocked Pro \u0026 Master difficulty level":{"note":"","data":["803BEDD5 0003"],"options":null}},"84077275-57315B9C-C:50":{"All Pokemon Level 100\\Player 1":{"note":"","data":["50000654 0000","800AE654 0064"],"options":null},"All Pokmon Have Max Hp":{"note":"","data":["81285AE8 0096"],"options":null},"Catch\\Mew on GB Tower":{"note":"","data":["80171E17 0015"],"options":null},"Catch\\Mewtwo on GB Tower":{"note":"","data":["80171E17 0083"],"options":null},"Clefairy Says\\Extended Life Bar\\Player 1":{"note":"","data":["8118F43A 0049"],"options":null},"Clefairy Says\\Extended Life Bar\\Player 2":{"note":"","data":["8118F5FA 0049"],"options":null},"Clefairy Says\\Extended Life Bar\\Player 3":{"note":"","data":["8118F7BA 0049"],"options":null},"Clefairy Says\\Extended Life Bar\\Player 4":{"note":"","data":["8118F97A 0049"],"options":null},"Clefairy Says\\Infinite Health\\Player 1":{"note":"","data":["8118F438 0064"],"options":null},"Clefairy Says\\Infinite Health\\Player 2":{"note":"","data":["8118F5F8 0064"],"options":null},"Clefairy Says\\Infinite Health\\Player 3":{"note":"","data":["8118F7B8 0064"],"options":null},"Clefairy Says\\Infinite Health\\Player 4":{"note":"","data":["8118F978 0064"],"options":null},"Game Difficulty":{"note":"","data":["D312FC40 FD70","D312FC40 A528","8112FC40 00??"],"options":{"Easy":"02","Extra Hard":"0F","Hard":"00","Normal":"01"}},"Gym Leader Castle\\Blaine":{"note":"","data":["80286B69 00A1"],"options":null},"Gym Leader Castle\\Brock":{"note":"","data":["80287539 00A1"],"options":null},"Gym Leader Castle\\Elite Four \u0026 Rival":{"note":"","data":["80286859 00A1"],"options":null},"Gym Leader Castle\\Erika":{"note":"","data":["80286BA9 00A1"],"options":null},"Gym Leader Castle\\Giovani":{"note":"","data":["80287169 00A1"],"options":null},"Gym Leader Castle\\Koga":{"note":"","data":["80287519 00A1"],"options":null},"Gym Leader Castle\\Misty":{"note":"","data":["80287E79 00A1"],"options":null},"Gym Leader Castle\\Sabrina":{"note":"","data":["802870A9 00A1"],"options":null},"Gym Leader Castle\\Surge":{"note":"","data":["80286BD9 00A1"],"options":null},"Infinite Attacks All Pokemon\\Player 1":{"note":"","data":["50000654 0000","810AE650 6363","50000654 0000","810AE652 6363"],"options":null},"Infinite Attacks All Pokemon\\Player 2":{"note":"","data":["50000654 0000","810AE86C FFFF","50000654 0000","810AE86E FFFF"],"options":null},"Infinite Attacks All Pokemon\\Player 3":{"note":"","data":["50000654 0000","810AE86C FFFF","50000654 0000","810AE86E FFFF"],"options":null},"Infinite Attacks All Pokemon\\Player 4":{"note":"","data":["50000654 0000","810AEA88 FFFF","50000654 0000","810AEA8A FFFF"],"options":null},"Infinite Health against Mew Two":{"note":"","data":["810AE632 FFFF","812823E8 FFFF"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["810AE686 03E7","810AE6AA 03E7","810AE6DA 03E7","810AE6FE 03E7"],"options":null},"Infinite Health\\Stadium\\Free Battle":{"note":"","data":["80287D79 0064"],"options":null},"Infinite Health\\Stadium\\Mewto":{"note":"","data":["802825B9 0064"],"options":null},"Infinite Health\\Stadium\\Petit Cup":{"note":"","data":["80286C29 0064"],"options":null},"Infinite Health\\Stadium\\Pica Cup":{"note":"","data":["80284659 0064"],"options":null},"Infinite Health\\Stadium\\Poke Cup":{"note":"","data":["80285399 0064"],"options":null},"Infinite Health\\Stadium\\Prime Cup":{"note":"","data":["80285FE9 0064"],"options":null},"Infinite cash":{"note":"","data":["81172186 9999"],"options":null},"Infinite coins for coin case":{"note":"","data":["801723E3 0099"],"options":null},"Pokemon beach stop code":{"note":"","data":["D00488A1 0020","80202BB5 0001"],"options":null},"Rock Harden\\Infinite Armour\\Player 1":{"note":"","data":["81193B78 0190"],"options":null},"Rock Harden\\Infinite Armour\\Player 2":{"note":"","data":["81193E2C 0190"],"options":null},"Rock Harden\\Infinite Armour\\Player 3":{"note":"","data":["811940E0 0190"],"options":null},"Rock Harden\\Infinite Armour\\Player 4":{"note":"","data":["81194394 0190"],"options":null}},"8473D0C1-23120666-C:4A":{"All Equipment Upgrades":{"note":"","data":["801ED88D 0023","811ED8DA 201B","801ED86C 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03E4CAB 0000","801ED822 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Event Item\\Modifier 1":{"note":"","data":["801ED895 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801ED89B 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801ED8A1 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Have Bottle\\Modifier 1":{"note":"","data":["801ED8A2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 2":{"note":"","data":["801ED8A3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 3":{"note":"","data":["801ED8A4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 4":{"note":"","data":["801ED8A5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 5":{"note":"","data":["801ED8A6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 6":{"note":"","data":["801ED8A7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Item Modifier":{"note":"","data":["801ED8A0 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\All Masks":{"note":"","data":["811ED8A8 3E39","811ED8AA 4745","811ED8AC 4032","811ED8AE 3A46","811ED8B0 3842","811ED8B2 4833","811ED8B4 3C3D","811ED8B6 373F","811ED8B8 3634","811ED8BA 4341","811ED8BC 3B44","811ED8BE 4935"],"options":null},"Have\\Bombchu":{"note":"","data":["801ED897 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801ED896 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801ED899 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801ED898 0008"],"options":null},"Have\\Fire Arrow":{"note":"","data":["801ED892 0002"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801ED8A0 0010"],"options":null},"Have\\Have\\Ocarina of Time":{"note":"","data":["801ED890 0000"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801ED891 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801ED89F 000F"],"options":null},"Have\\Ice Arrow":{"note":"","data":["801ED893 0003"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801ED89E 000E"],"options":null},"Have\\Light Arrow":{"note":"","data":["801ED894 0004"],"options":null},"Have\\Magic Beans":{"note":"","data":["801ED89A 000A"],"options":null},"Have\\Pictograph":{"note":"","data":["801ED89D 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801ED89C 000C"],"options":null},"Have\\QuestStatus Items":{"note":"","data":["801ED8DD 0005","811ED8DE F7CF"],"options":null},"Infinite\\Health":{"note":"","data":["811ED856 03E7"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811ED854 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"This is Infinite use of Bombs,Bombchus,Deku Sticks,Deku Nuts,Magic Beans,\u0026 Powder Kegs. But you must also put it's Have on to work.","data":["801ED8C1 0063","50000801 0000","801ED8C6 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801ED859 0060","811ED860 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811ED85A 03E7"],"options":null},"Play As":{"note":"","data":["801ED840 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You have been warned.","data":["801ED86C 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F8836 0008","811ED836 FFFD","D01F8836 0004","811ED836 0000","D01F8836 0002","811ED836 FFFE"],"options":null},"Use all C Buttons":{"note":"","data":["811F1738 0000","811F173A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["803E4CAA 0000","803FD505 0001","813FD50A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"84D5FD75-BBFD3CDF-C:44":{"Character Select":{"note":"","data":["80075F02 00??"],"options":{"Big Head.":"04","Flame Grilled":"08","Normal":"00","Play as Deadwing.":"01"}},"Have All\\Cheats: Book of Shadows":{"note":"","data":["81075EFE 0FFF"],"options":null},"Have All\\Dark Souls Collected":{"note":"","data":["80075EF9 0078"],"options":null},"Have All\\Gads \u0026 The Poign":{"note":"","data":["80030E57 000F"],"options":null},"Have All\\Items":{"note":"Youll not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50001B20 0000","80030613 000B"],"options":null},"Have All\\L-Eclipser":{"note":"You will not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50000320 0000","80030973 000B"],"options":null},"Have All\\Levels Unlocked":{"note":"","data":["5000101C 0000","80030A0E 0001"],"options":null},"Infinite\\0.9mm Ammo":{"note":"","data":["81075AEA 0190"],"options":null},"Infinite\\Accumulators":{"note":"","data":["800306D7 0005"],"options":null},"Infinite\\Cadeaux'":{"note":"","data":["81075AE6 03E7"],"options":null},"Infinite\\Max Health,Air,Shadow Charge \u0026 Voodoo Power":{"note":"","data":["50000604 0000","81075AC6 2710"],"options":null},"Infinite\\Prisms":{"note":"","data":["80030957 0003"],"options":null},"Infinite\\Retractors":{"note":"","data":["800308B7 0003"],"options":null},"Infinite\\Shotgun Shells":{"note":"","data":["80075ADF 0063"],"options":null},"Infinite\\Violator Ammo":{"note":"","data":["81075AE2 03E7"],"options":null},"Press L To Levitate":{"note":"Press the L-Button to rise and let go and press again in stages to come back down.","data":["D0058EE5 0020","80075528 0041"],"options":null},"[Ammo Always Displayed On Screen]":{"note":"","data":["50000408 0000","80075A7D 0007"],"options":null},"[Health Meter Displayed On Screen]":{"note":"","data":["81075B10 0000","81075B12 00FF"],"options":null}},"84EAB557-C88A190F-C:50":{"10x Points Multiplier":{"note":"","data":["800EAD8F 0001"],"options":null},"Access In-Game Cheat Menu":{"note":"","data":["50001104 0000","800E9E98 0001"],"options":null},"Access\\Officer Dick":{"note":"","data":["800E9E9C 0001","800F093B 0001"],"options":null},"Access\\Spider-Man":{"note":"","data":["800E9E98 0001","800F0C5B 0001"],"options":null},"All Gaps":{"note":"","data":["50000A0C 0000","810E9D84 FFFF","50000A0C 0000","810E9D86 FFFF","50000A0C 0000","810E9D8A FFFF","50000402 0000","810E9DF4 FFFF"],"options":null},"Always Special":{"note":"","data":["800E9EAC 0001","800E9EAE 0001"],"options":null},"Hoffmann Factory \u0026 Skate heaven Unlocked":{"note":"","data":["800EA18B 003F"],"options":null},"Infinite Time":{"note":"","data":["800E886A 0001"],"options":null},"Level Goals 100%":{"note":"All standard players,Officer Dick \u0026 Spider-Man, Use together with","data":["50000EE4 0000","810E8900 FFFF","50000EE4 0000","810E8902 FFFF","50000EE4 0000","810E8904 FFFF","50000EE4 0000","810E8906 FFFF","50000EE4 0000","810E8908 FFFF","50000EE4 0000","810E890A FFFF","50000EE4 0000","810E890C FFFF","50000EE4 0000","810E890E FFFF","50000EE4 0000","810E8920 FFFF"],"options":null},"Levels Goals 100% All Custom Players":{"note":"","data":["50000802 0000","810E9494 FFFF","50000802 0000","810E9578 FFFF","50000802 0000","810E965C FFFF","50000802 0000","810E9740 FFFF"],"options":null},"Max Cash":{"note":"All standard players,Officer Dick \u0026 Spider-Man","data":["50000EE4 0000","810E88F8 000A","50000EE4 0000","810E88FA 2B1F","50000EE4 0000","810E88FC 000A","50000EE4 0000","810E88FE 2B1F"],"options":null},"Max Cash For All Custom Players":{"note":"","data":["500004E4 0000","810E948C 000A","500004E4 0000","810E948E 2B1F","500004E4 0000","810E9490 000A","500004E4 0000","810E9492 2B1F"],"options":null},"Moon Psysics":{"note":"","data":["800E9ECE 0001"],"options":null},"Perfect Balance":{"note":"","data":["800E9EAA 0010"],"options":null}},"84FC04FF-B1253CE9-C:4A":{"1 Lap Race":{"note":"","data":["D01215A8 0000","801215A8 0009"],"options":null},"999 Trick Game Pts":{"note":"Press the A Button to stop Count,or it will continue to grow without stoping.","data":["81121360 03E7"],"options":null},"Access Gold Medals":{"note":"","data":["50006002 0000","810EBD42 0101"],"options":null},"Enable Sinobin":{"note":"","data":["8110A17E 0100"],"options":null},"Infinite\\Cash":{"note":"","data":["8012160A C350"],"options":null},"Infinite\\Lucky Dip":{"note":"\"Lucky Dip is Infinite Usage Of What Ever You Get From Each Red Box\"","data":["801215B4 0003"],"options":null},"Infinite\\Tools Options":{"note":"","data":["801215B5 00??"],"options":{"Board":"06","Fan":"01","Ghost":"02","Mouse":"05","Pan":"03","Rock":"04"}}},"85AE781A-C756F05D-C:45":{"Have\\Max Bonus":{"note":"","data":["810E964A 270F"],"options":null},"Have\\[All Guns \u0026 Infinite Ammo]":{"note":"Press C Left to receive all Guns","data":["810FFF8A 0001","50000B04 0000","810E92E6 03E8"],"options":null},"Have\\[All Keys]":{"note":"","data":["810E92E0 0101","800E92E2 0001"],"options":null},"Have\\[High Score]":{"note":"","data":["810E92CE FFFF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["810E9650 0005"],"options":null},"Infinite\\Health":{"note":"If you fall into Water just turn off the Infinite Health \u0026 put back on after.","data":["810E92D8 42D8"],"options":null},"Level Select":{"note":"","data":["810FFF92 00??"],"options":{"Boss Mission Destroy Carrier Level":"10","Mission 1 Shock Strike":"01","Mission 10 Scramble Pylon":"0A","Mission 11 Herding Research":"0B","Mission 12 The Extractor":"0C","Mission 13 Nuke Tower":"0D","Mission 14 Mucus Storage":"0E","Mission 15 Depot Attack":"0F","Mission 16 Sterilization":"11","Mission 17 Scorpion Killer":"12","Mission 18 Core Nuke":"13","Mission 19 Gate Keeper":"14","Mission 2 Radar Run":"02","Mission 3 Return Fire":"03","Mission 4 The Sonar Tower":"04","Mission 5 Big Blips":"05","Mission 6 Short Fuse":"06","Mission 7 Outpost":"07","Mission 8 Sewer":"08","Mission 9 Clean Up":"09","Queen Mission":"15"}},"Level Select Menu":{"note":"","data":["810FE5AA D320"],"options":null}},"85C18B16-DF9622AF-C:4A":{"Infinite Health Player1":{"note":"","data":["801A57B5 00CF"],"options":null},"Infinite Max Stats Creation Points":{"note":"Player 1","data":["801C200F 0064"],"options":null},"Max Stats":{"note":"Player 1","data":["801CA5D0 0064","801CA5D1 0064","801CA5D2 0064","801CA5D3 0064","801CA5D4 0064","801CA5D5 0064","801CA5D6 0064","801CA5D7 0064","801CA5D8 0064"],"options":null}},"862C0657-8DFD896D-C:45":{"(Multi-player)\\Have All\\Weapons and items\\Player 1":{"note":"","data":["8133BA4E FFFE"],"options":null},"(Multi-player)\\Have All\\Weapons and items\\Player 2":{"note":"","data":["8133BC0A FFFE"],"options":null},"(Multi-player)\\Have All\\Weapons and items\\Player 3":{"note":"","data":["8133BDC6 FFFE"],"options":null},"(Multi-player)\\Have All\\Weapons and items\\Player 4":{"note":"","data":["8133BF82 FFFE"],"options":null},"(Multi-player)\\Max Kills\\Player 1":{"note":"","data":["8033B9BC FFFF"],"options":null},"(Multi-player)\\Max Kills\\Player 2":{"note":"","data":["8033BB78 FFFF"],"options":null},"Access\\All Guns":{"note":"","data":["8015969F 0001"],"options":null},"Access\\Max Ammo":{"note":"","data":["8015FCBF 0001"],"options":null},"Can't Fail Missions":{"note":"","data":["810A04FA ED40"],"options":null},"Enable\\Cheat Menu":{"note":"Enable before you enter in game and you will find the cheat menu when you press the Start Button","data":["8003E22F 0003","8004609F 0003"],"options":null},"Enable\\Debug Mode":{"note":"When this code is activated, a display of numbers will show on the screen as the players move around","data":["801599E7 0001"],"options":null},"Enable\\Level Select Menu":{"note":"This must be used with Enable Cheat Menu and enabled before you enter in game and you will find the level select menu replaces the cheat menu when you press the Start Button","data":["810AA696 9214"],"options":null},"Enemies Don't Recongnize You Easily":{"note":"","data":["8005742D 0001"],"options":null},"Have\\Invisible Soldier":{"note":"you are Invisible to most enimies who just can not dectect or see you.","data":["80159683 0001"],"options":null},"Have\\Large Mode":{"note":"Do not use with Mini Mode only use one at a time","data":["8015FCDF 0001"],"options":null},"Have\\Less Enemies In Levels":{"note":"Do not use with No Enemies In Levels, only use one at a time","data":["80056688 0020"],"options":null},"Have\\Mini Mode":{"note":"Do not use with Large Mode only use one at a time","data":["80159699 0001"],"options":null},"Have\\No Enemies In Levels":{"note":"Do not use with Less Enemies In Levels, only use one at a time","data":["80056D4C 0020"],"options":null},"Improved Gun Handling":{"note":"","data":["8009C014 003E"],"options":null},"Infinite\\Continues":{"note":"","data":["80159693 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8015FCEF 0001"],"options":null},"Play As":{"note":"Here you can choose who you would like to play as. But Do not use this with any other play as option..","data":["801609A3 00??"],"options":{"Plastro":"09","The Big Green One":"07","Vikki":"08"}}},"870611BA-D8B1226C-C:00":{"God Mode":{"note":"","data":["80774EB7 00??"],"options":{"Off":"00","On":"01"}}},"8979169C-F189F6A0-C:4A":{"Infinite\\99 Lives":{"note":"","data":["8023648D 0063"],"options":null},"Infinite\\99 R Button Bombs":{"note":"","data":["8024BD89 0063"],"options":null},"Infinite\\Shield":{"note":"","data":["80250971 00??"],"options":{"Off":"00","On":"01"}},"Infinite\\Speed":{"note":"","data":["8024B6BC 00??"],"options":{"Fast":"03","Medium":"02","Normal":"00","Slow":"01","Warp Drive":"07"}},"Infinite\\Stream Laser":{"note":"","data":["80236CD0 00??"],"options":{"2 Stream Laser":"00","4 Stream Laser":"01","6 Stream Laser":"02"}},"Max Score":{"note":"","data":["80249F91 00FF"],"options":null},"Unlock Ramsie Mini-Game":{"note":"","data":["801FF43E 0001"],"options":null}},"89A579F1-667E97EF-C:45":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["811659C4 FFFF","811659C6 FFFF","811659CA 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FB5C 270F"],"options":null}},"89FED774-CAAFE21B-C:45":{"Have All Artifacts":{"note":"","data":["800C56BF 0063","800C56C3 0063","800C56C7 0063"],"options":null},"Infinite Health":{"note":"","data":["800C56BB 0005"],"options":null},"Infinite Lives":{"note":"","data":["800C56B7 0005"],"options":null}},"8A6009B6-94ACE150-C:45":{"Access\\All Characters":{"note":"","data":["801E6040 FFFF"],"options":null},"Access\\All Floyd Awards":{"note":"only enable One character at a time when using this code","data":["50000501 0000","801E6038 0005"],"options":null},"Juno\\Access\\All Keys":{"note":"","data":["811E6248 FFF7"],"options":null},"Juno\\Access\\All Objects":{"note":"","data":["811E624A FFFF"],"options":null},"Juno\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["801E61EC 00FF","801E61ED 00FF"],"options":null},"Juno\\Full \u0026 Max Health":{"note":"","data":["801BF976 0040","801E61E5 000C","801E61E2 0040"],"options":null},"Juno\\Infinite Continues":{"note":"","data":["800A3281 0002"],"options":null},"Juno\\Infinite\\Max Ammo All Weapons":{"note":"","data":["50000302 0000","811E61F6 03E7","50000802 0000","811E61FC 03E7","50000402 0000","811E620C 03E7"],"options":null},"Juno\\Infinite\\Mizar Tokens":{"note":"","data":["811E61F4 03E7"],"options":null},"Juno\\Max Blue \u0026 White Heads":{"note":"","data":["811E61EA 03E7","811E61E8 03E7"],"options":null},"Lupus\\Access\\All Keys":{"note":"","data":["811E62BE FF70"],"options":null},"Lupus\\Access\\All Objects":{"note":"","data":["811E62C0 FFFF"],"options":null},"Lupus\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["801E6262 00FF","801E6263 00FF"],"options":null},"Lupus\\Full \u0026 Max Health":{"note":"","data":["801BF9EC 0040","801E625B 000C","801E6258 0040"],"options":null},"Lupus\\Infinite\\Max Ammo All Weapons":{"note":"","data":["50000302 0000","811E626C 03E7","50000802 0000","811E6272 03E7","50000402 0000","811E6282 03E7"],"options":null},"Lupus\\Infinite\\Mizar Tokens":{"note":"","data":["811E626A 03E7"],"options":null},"Lupus\\Max\\Blue \u0026 White Heads":{"note":"","data":["811E6260 03E7","811E625E 03E7"],"options":null},"Tribals\\Gold Wood\\Have All Tribals":{"note":"","data":["801E6014 000F"],"options":null},"Tribals\\Gold Wood\\Have No Tribals Remaining":{"note":"","data":["801E6016 0000"],"options":null},"Tribals\\Gold Wood\\No Tribals Killed":{"note":"","data":["801E6015 0000"],"options":null},"Vela\\Access\\All Keys":{"note":"","data":["811E61D2 FF70"],"options":null},"Vela\\Access\\All Objects":{"note":"","data":["811E61D4 FFFF"],"options":null},"Vela\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["801E6176 00FF","801E6177 00FF"],"options":null},"Vela\\Full \u0026 Max Health":{"note":"","data":["801E616F 000C","801E616C 0040"],"options":null},"Vela\\Infinite\\Max Ammo All Weapons":{"note":"","data":["50000302 0000","811E6180 03E7","50000802 0000","811E6186 03E7","50000402 0000","811E6196 03E7"],"options":null},"Vela\\Infinite\\Mizar Tokens":{"note":"","data":["811E617E 03E7"],"options":null},"Vela\\Max\\Blue \u0026 White Heads":{"note":"","data":["811E6174 03E7","811E6172 03E7"],"options":null},"Wide Screen Always Off":{"note":"","data":["800FECA8 0000"],"options":null}},"8A86F073-CD45E54B-C:45":{"Computer\\Always Gets Bubbles":{"note":"","data":["80173601 0006"],"options":null},"Computer\\Never Gets Bubbles":{"note":"","data":["80173601 0000"],"options":null},"Infinite Credits":{"note":"","data":["80120171 0005"],"options":null},"Player 1\\Always Gets Bubbles":{"note":"","data":["80171131 0006"],"options":null},"Player 1\\Infinite Time To Set Pieces":{"note":"","data":["8117AAFC 0000"],"options":null},"Player 1\\Never Gets Bubbles":{"note":"","data":["80171131 0000"],"options":null},"Player 1\\Screen Never Fills Over Time":{"note":"","data":["80171125 000A"],"options":null}},"8A97A197-272DF6C1-C:50":{"Double MPG":{"note":"","data":["800ADB69 0001"],"options":null},"Infinite Attempts":{"note":"","data":["800ADB66 0001"],"options":null},"Invincibility":{"note":"Makes you also fly without any fuel","data":["800ADB64 0001"],"options":null},"Level \u0026 Scenario Select":{"note":"","data":["800ACE5C 000B"],"options":null},"No Quad Damage":{"note":"","data":["800ADB6B 0001"],"options":null},"infinite Ammo For All Guns":{"note":"","data":["800ADB65 0001"],"options":null}},"8BD4A334-1E138B05-C:50":{"Have Max Rumble":{"note":"","data":["810D8E96 00??","810E61B8 00??"],"options":{"Max":"30","Never Rumble":"00"}},"Infinite\\Cash":{"note":"","data":["810EB852 FC9A"],"options":null},"Infinite\\Health":{"note":"","data":["810D8E8A 00??","810E6522 00??"],"options":{"Infinite":"64","No Health":"00"}},"Infinite\\Stamina":{"note":"","data":["810D8E8E 00??","810E6526 00??"],"options":{"Infinite":"64","No Stamina":"00"}},"Infinite\\Time":{"note":"","data":["810E6486 0E10"],"options":null}},"8C138BE0-95700E46-C:45":{"All Lakes Unlocked":{"note":"","data":["80111F00 0001"],"options":null},"Catch Bigger Fish":{"note":"","data":["80111F06 0001"],"options":null},"Easier to Catch Fish":{"note":"","data":["80111F0E 0001"],"options":null},"Extra Cash":{"note":"","data":["80111F0B 0001"],"options":null},"Line Never Breaks":{"note":"","data":["80111F05 0001"],"options":null},"No Penalties in Tounament":{"note":"","data":["80111F08 0001"],"options":null}},"8C3D1192-BEF172E1-C:50":{"Infinite Time":{"note":"","data":["8114C2FC 000A"],"options":null},"Pick Your Kombat Zone":{"note":"","data":["812575A4 00??"],"options":{"Armory":"14","Bell Tower":"07","Bridge":"05","Courtyard":"02","Dead Pool":"11","Graveyard":"09","Hidden Portal":"10","Jade's Desert":"0E","Kahn's Kave":"0D","Kahn's Tower":"04","Kombat Temple":"08","Lair":"18","Living Forest":"15","Lost Bridge":"0F","Pit":"03","Pit 2":"1A","Pit 3":"0A","Pit Bottom":"1C","Portal":"17","River Kombat":"0B","Rooftop":"13","Scorpion's Lair":"0C","Soul Chamber":"06","Star Bridge":"1B","Street":"01","Subway":"00","Tomb":"19","Tower":"16","Wasteland":"12"}},"Player 1\\Aggressor Energy Bar":{"note":"","data":["80169941 0030"],"options":null},"Player 1\\Energy is":{"note":"","data":["801698AD 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 1\\Infinite Run":{"note":"","data":["811698B4 0030"],"options":null},"Player 1\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B5285 0020","811698D4 5100","D02B5285 0020","811698DC 5100"],"options":null},"Player 1\\Play As":{"note":"","data":["8016989D 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Player 2\\Aggressor Energy Bar":{"note":"","data":["80169943 0030"],"options":null},"Player 2\\Energy is":{"note":"","data":["80169B81 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 2\\Infinite Run":{"note":"","data":["81169B88 0030"],"options":null},"Player 2\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B528D 0020","811698D6 5100","D02B528D 0020","811698DE 5100"],"options":null},"Player 2\\Play As":{"note":"","data":["80169B41 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Unlock Secret":{"note":"","data":["80169F41 0004"],"options":null}},"8D2BAE98-D73725BF-C:45":{"Infinite Stamina":{"note":"","data":["81138400 447A","81138404 447A"],"options":null},"Press [START] To Reset Timer":{"note":"","data":["81137886 0000"],"options":null}},"8E6E01FF-CCB4F948-C:45":{"GS Button For 40 Gems":{"note":"","data":["8829018F 0028"],"options":null},"Infinite\\Action Modifier":{"note":"","data":["802901E3 00??"],"options":{"Beach Ball Spell":"0A","Big Glover Spell":"04","Call Ball Spell":"0E","Death Spell":"01","Enemy Ball Spell":"07","Freeze Enemy Spell":"00","Frog Spell":"02","Green Ball Spell":"0C","Helicopter Spell":"06","Hovering Ball Spell":"0B","Purple Bouncy Ball Spell":"08","Super Call Ball Spell":"0D","Tiny Black/Grey Ball Spell":"09","Tree Spell":"05","Walk On Walls Spell":"03"}},"Infinite\\Activate Cheat\\Modifier 1":{"note":"","data":["81297BEC ????"],"options":{"All Of The Above":"0380","Level Select":"0080","Open Levels":"0200","Open Portals":"0100"}},"Infinite\\Activate Cheat\\Modifier 2":{"note":"","data":["81297BEE ????"],"options":{"All Of The Above":"024A","Big Ball":"0200","Call Ball (Press L)":"0002","Infinite Energy":"0040","Infinite Lives":"0008"}},"Infinite\\Double Jumps":{"note":"","data":["8028FC07 0000"],"options":null},"Infinite\\Health":{"note":"","data":["8029018F 0028"],"options":null},"Infinite\\Lives":{"note":"","data":["80290193 000A"],"options":null},"Press L To Levitate":{"note":"","data":["D02AE905 0020","81290334 43E0"],"options":null}},"8E9692B3-4264BB2A-C:50":{"Aquadome Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F799B 0000"],"options":null},"Aquadome Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FAE2B 0000"],"options":null},"Aquadome Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F799A 0200"],"options":null},"Aquadome Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FAE3A 0200"],"options":null},"Aquadome Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7993 00AA"],"options":null},"Aquadome Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FAE33 00AA"],"options":null},"Aquadome Stage\\No Energy\\Player 1":{"note":"","data":["801F7993 0000"],"options":null},"Aquadome Stage\\No Energy\\Player 2":{"note":"","data":["801FAE33 0000"],"options":null},"Backwash Bay Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F80EB 0000"],"options":null},"Backwash Bay Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB58B 0000"],"options":null},"Backwash Bay Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F80FA 0200"],"options":null},"Backwash Bay Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB59A 0200"],"options":null},"Backwash Bay Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F80F3 00AA"],"options":null},"Backwash Bay Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB593 00AA"],"options":null},"Backwash Bay Stage\\No Energy\\Player 1":{"note":"","data":["801F80F3 0000"],"options":null},"Backwash Bay Stage\\No Energy\\Player 2":{"note":"","data":["801FB593 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F8B3B 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FBFDB 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F8B4A 0200"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FBFEA 0200"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8B43 00AA"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FBFE3 00AA"],"options":null},"Boogerhenge, Tureen Toilet Stage\\No Energy\\Player 1":{"note":"","data":["801F8B43 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\No Energy\\Player 2":{"note":"","data":["801FBFE3 0000"],"options":null},"Candy Factory Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F826B 0000"],"options":null},"Candy Factory Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB70B 0000"],"options":null},"Candy Factory Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F827A 0200"],"options":null},"Candy Factory Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB71A 0200"],"options":null},"Candy Factory Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8273 00AA"],"options":null},"Candy Factory Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB713 00AA"],"options":null},"Candy Factory Stage\\No Energy\\Player 1":{"note":"","data":["801F8273 0000"],"options":null},"Candy Factory Stage\\No Energy\\Player 2":{"note":"","data":["801FB713 0000"],"options":null},"Clayribbean Cruise Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F805B 0000"],"options":null},"Clayribbean Cruise Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB4FB 0000"],"options":null},"Clayribbean Cruise Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F806A 0200"],"options":null},"Clayribbean Cruise Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB50A 0200"],"options":null},"Clayribbean Cruise Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8063 00AA"],"options":null},"Clayribbean Cruise Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB503 00AA"],"options":null},"Clayribbean Cruise Stage\\No Energy\\Player 1":{"note":"","data":["801F8063 0000"],"options":null},"Clayribbean Cruise Stage\\No Energy\\Player 2":{"note":"","data":["801FB503 0000"],"options":null},"Extra Characters and Secret Options":{"note":"","data":["801A86A1 000F"],"options":null},"Freezing Fortress Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F7EFB 0000"],"options":null},"Freezing Fortress Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB39B 0000"],"options":null},"Freezing Fortress Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F7F0A 0200"],"options":null},"Freezing Fortress Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB3AA 0200"],"options":null},"Freezing Fortress Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7F03 00AA"],"options":null},"Freezing Fortress Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB3A3 00AA"],"options":null},"Freezing Fortress Stage\\No Energy\\Player 1":{"note":"","data":["801F7F03 0000"],"options":null},"Freezing Fortress Stage\\No Energy\\Player 2":{"note":"","data":["801FB3A3 0000"],"options":null},"Ghastly Graveyard Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F818B 0000"],"options":null},"Ghastly Graveyard Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB62B 0000"],"options":null},"Ghastly Graveyard Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F819A 0200"],"options":null},"Ghastly Graveyard Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB63A 0200"],"options":null},"Ghastly Graveyard Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8193 00AA"],"options":null},"Ghastly Graveyard Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB633 00AA"],"options":null},"Ghastly Graveyard Stage\\No Energy\\Player 1":{"note":"","data":["801F8193 0000"],"options":null},"Ghastly Graveyard Stage\\No Energy\\Player 2":{"note":"","data":["801FB633 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F7FAB 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB44B 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F7FBA 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB45A 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7FB3 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB453 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\No Energy\\Player 1":{"note":"","data":["801F7FB3 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\No Energy\\Player 2":{"note":"","data":["801FB453 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F971B 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FCBBB 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F972A 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FCBCA 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F9723 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FCBC3 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\No Energy\\Player 1":{"note":"","data":["801F9723 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\No Energy\\Player 2":{"note":"","data":["801FCBC3 0000"],"options":null},"Kooky Courtyard Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F836B 0000"],"options":null},"Kooky Courtyard Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB80B 0000"],"options":null},"Kooky Courtyard Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F837A 0200"],"options":null},"Kooky Courtyard Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB81A 0200"],"options":null},"Kooky Courtyard Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8373 00AA"],"options":null},"Kooky Courtyard Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB813 00AA"],"options":null},"Kooky Courtyard Stage\\No Energy\\Player 1":{"note":"","data":["801F8373 0000"],"options":null},"Kooky Courtyard Stage\\No Energy\\Player 2":{"note":"","data":["801FB813 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Can't be Stunned\\Player 1":{"note":"","data":["801F7E9B 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Can't be Stunned\\Player 2":{"note":"","data":["801FB33B 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Full Super Bar\\Player 1":{"note":"","data":["811F7EAA 0200"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Full Super Bar\\Player 2":{"note":"","data":["811FB34A 0200"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Infinite Energy\\Player 1":{"note":"","data":["801F7EA3 00AA"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Infinite Energy\\Player 2":{"note":"","data":["801FB343 00AA"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\No Energy\\Player 1":{"note":"","data":["801F7EA3 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\No Energy\\Player 2":{"note":"","data":["801FB343 0000"],"options":null},"Play As\\Player1":{"note":"","data":["801A868F 00??"],"options":{"Bad Mr. Frosty":"00","Blob":"01","Bonker":"02","Boogerman":"03","Dr. Kiln":"04","Earthworm Jim":"05","Houngan":"08","Icky Bod Clay":"09","Kung Pow":"0A","Sumo Santa":"0D","T-Hoppy":"0F","Taffy":"0E"}},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Can't be Stunned\\Player 1":{"note":"","data":["801F766B 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Can't be Stunned\\Player 2":{"note":"","data":["801FAB0B 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Full Super Bar\\Player 1":{"note":"","data":["811F767A 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Full Super Bar\\Player 2":{"note":"","data":["811FAB1A 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Infinite Energy\\Player 1":{"note":"","data":["801F7673 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Infinite Energy\\Player 2":{"note":"","data":["801FAB13 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\No Energy\\Player 1":{"note":"","data":["801F7673 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\No Energy\\Player 2":{"note":"","data":["801FAB13 0000"],"options":null},"Rubbage Reef Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F7F7B 0000"],"options":null},"Rubbage Reef Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB41B 0000"],"options":null},"Rubbage Reef Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F7F8A 0200"],"options":null},"Rubbage Reef Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB42A 0200"],"options":null},"Rubbage Reef Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7F83 00AA"],"options":null},"Rubbage Reef Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB423 00AA"],"options":null},"Rubbage Reef Stage\\No Energy\\Player 1":{"note":"","data":["801F7F83 0000"],"options":null},"Rubbage Reef Stage\\No Energy\\Player 2":{"note":"","data":["801FB423 0000"],"options":null},"Rubbage Room Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801FA1AB 0000"],"options":null},"Rubbage Room Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FD64B 0000"],"options":null},"Rubbage Room Stage\\Full Super Bar\\Player 1":{"note":"","data":["811FA1BA 0200"],"options":null},"Rubbage Room Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FD65A 0200"],"options":null},"Rubbage Room Stage\\Infinite Energy\\Player 1":{"note":"","data":["801FA1B3 00AA"],"options":null},"Rubbage Room Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FD653 00AA"],"options":null},"Rubbage Room Stage\\No Energy\\Player 1":{"note":"","data":["801FA1B3 0000"],"options":null},"Rubbage Room Stage\\No Energy\\Player 2":{"note":"","data":["801FD653 0000"],"options":null},"Santa's Toy Factory Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F879B 0000"],"options":null},"Santa's Toy Factory Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FBC3B 0000"],"options":null},"Santa's Toy Factory Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F87AA 0200"],"options":null},"Santa's Toy Factory Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FBC4A 0200"],"options":null},"Santa's Toy Factory Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F87A3 00AA"],"options":null},"Santa's Toy Factory Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FBC43 00AA"],"options":null},"Santa's Toy Factory Stage\\No Energy\\Player 1":{"note":"","data":["801F87A3 0000"],"options":null},"Santa's Toy Factory Stage\\No Energy\\Player 2":{"note":"","data":["801FBC43 0000"],"options":null},"Stage Select":{"note":"","data":["801A868B 00??"],"options":{"Aquadome":"19","Backwash Bay":"16","Boogerhenge":"15","Camp Claynaveral":"02","Candy Factory":"00","Claynaveral Hangar":"01","Clayribbean Cruise":"11","Fiery Furnace":"0F","Freezing Fortress":"08","Ghastly Graveyard":"05","Grotto Gulch":"0A","Happy Harry's Hut":"07","Kiln's Hideout":"0E","Kiln's Laboratory":"0D","Kooky Courtyard":"13","Mudville Mansion":"04","Outhouse":"03","Refuse Room":"09","Research Room":"10","Rubbage Reef":"0C","Rubbage Room":"0B","Santa's Toy Factory":"14","Santa's Workship":"12","Spooky Spire":"06","Tribal Tower":"18","Tureen Toilet":"17"}},"Tribal Tower Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F770B 0000"],"options":null},"Tribal Tower Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FABAB 0000"],"options":null},"Tribal Tower Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F771A 0200"],"options":null},"Tribal Tower Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FABBA 0200"],"options":null},"Tribal Tower Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7713 00AA"],"options":null},"Tribal Tower Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FABB3 00AA"],"options":null},"Tribal Tower Stage\\No Energy\\Player 1":{"note":"","data":["801F7713 0000"],"options":null},"Tribal Tower Stage\\No Energy\\Player 2":{"note":"","data":["801FABB3 0000"],"options":null}},"8E9D834E-1E8B29A9-C:50":{"All Tracks Unlocked":{"note":"","data":["80095F6E 0008","50000264 0000","80169347 0001","50000264 0000","80169473 0001","50000564 0000","8016959F 0001"],"options":null},"Bike Modifier\\Player 1":{"note":"","data":["8016983F 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 2":{"note":"","data":["8016988B 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 3":{"note":"","data":["801698D7 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 4":{"note":"","data":["80169923 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Extra Bikes Unlocked":{"note":"","data":["80167C13 0001","80167C17 0003"],"options":null},"Extra Levels Unlocked":{"note":"","data":["8016980B 0001","8016980F 0001"],"options":null},"Infinite Primary Weapon\\Player 1":{"note":"","data":["801651FD 00C8"],"options":null},"Infinite Primary Weapon\\Player 2":{"note":"","data":["8016596D 00C8"],"options":null},"Infinite Primary Weapon\\Player 3":{"note":"","data":["801660DD 00C8"],"options":null},"Infinite Primary Weapon\\Player 4":{"note":"","data":["8016684D 00C8"],"options":null},"Infinite Shields\\Player 1":{"note":"","data":["801651F5 00C8"],"options":null},"Infinite Shields\\Player 2":{"note":"","data":["80165965 00C8"],"options":null},"Infinite Shields\\Player 3":{"note":"","data":["801660D5 00C8"],"options":null},"Infinite Shields\\Player 4":{"note":"","data":["80166845 00C8"],"options":null},"Infinite Turbos\\Player 1":{"note":"","data":["801651CB 0003","801651CF 0003"],"options":null},"Infinite Turbos\\Player 2":{"note":"","data":["8016593B 0003","8016593F 0003"],"options":null},"Infinite Turbos\\Player 3":{"note":"","data":["801660AB 0003","801660AF 0003"],"options":null},"Infinite Turbos\\Player 4":{"note":"","data":["8016681B 0003","8016681F 0003"],"options":null},"Mode Select":{"note":"","data":["80097687 00??"],"options":{"Anti-Gravity":"08","Anti-Gravity \u0026 Fish Eye Lens":"0A","Boulder":"01","Boulder \u0026 Fish Eye Lens":"03","Boulder \u0026 Wireframe":"11","Fish Eye Lens":"02","Ghost Mode":"40","Magnify":"04","Stealth Mode":"20","Ugly Mode":"80","Wireframe":"10"}}},"8ECC02F0-7F8BDE81-C:45":{"Access All\\Bikes":{"note":"","data":["810FBCBE FFFF"],"options":null},"Access All\\Tracks":{"note":"","data":["810FBCC2 FFFF"],"options":null},"Infinite\\Nitro":{"note":"","data":["810B8E4C 42C8"],"options":null},"Infinite\\Nitro Always On":{"note":"","data":["810BB5A4 8004"],"options":null},"Laps 2 Race":{"note":"","data":["8016FC88 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}}},"8F0CC36D-C738259E-C:45":{"Day":{"note":"","data":["80136FBF 00??"],"options":{"Friday 12th":"0C","Friday 19th":"13","Friday 26th":"1A","Friday 5th":"05","Monday 15th":"0F","Monday 1st":"01","Monday 22nd":"16","Monday 29th":"1D","Monday 8th":"08","Saturday 13th":"0D","Saturday 27th":"1B","Saturday 30th":"14","Saturday 6th":"06","Sunday 14th":"0E","Sunday 21st":"15","Sunday 28th":"1C","Sunday 7th":"07","Thursday 11th":"0B","Thursday 18th":"12","Thursday 25th":"19","Thursday 4th":"04","Tuesday 16th":"10","Tuesday 23rd":"17","Tuesday 2nd":"02","Tuesday 30th":"1E","Tuesday 9th":"09","Wednesday 10th":"0A","Wednesday 17th":"11","Wednesday 24th":"18","Wednesday 31st":"1F","Wednesday 3rd":"03"}},"Hours":{"note":"","data":["80136FBE 00??"],"options":{"00 AM":"00","00 PM":"0C","01 AM":"01","01 PM":"0D","02 AM":"02","02 PM":"0E","03 AM":"03","03 PM":"0F","04 AM":"04","04 PM":"10","05 AM":"05","05 PM":"11","06 AM":"06","06 PM":"12","07 AM":"07","07 PM":"13","08 AM":"08","08 PM":"14","09 AM":"09","09 PM":"15","10 AM":"0A","10 PM":"16","11 AM":"0B","11 PM":"17"}},"Item Select":{"note":"","data":["81126EE8 ????"],"options":{"100 Bag":"2103","1000 Bag":"2100","10000 Bag":"2101","30000 Bag":"2102","Alarm Clock":"1DB3","Blue NES Game":"1D42","CD Player":"1DAC","Fish Tank (Fish Included!)":"1CA6","Flat Shell":"2514","Grandfather Clock":"1DA0","Grey NES Game":"1D2F","JukeBox":"1D50","Lamp":"1EA1","Light Blue NES Game":"1D37","Nook's Shirt":"2410","Orange":"2804","Orange NES Game":"1D2B","Pet Cage":"1C00","Pointy Shell":"2515","Purple NES Game":"1D3E","Record Player":"1D4C","Red NES Game":"1D33","Round Snowman Table":"1EAB","Snowman Bed":"1EAF","Snowman Fridge":"1EA5","Snowman Seat":"1EB0","Stereo":"1DA9","Stereo Kinda Thing":"1DA6","Stereo NES Colour":"1D47","Tall Red Cupboard":"1011","Yellow NES Game":"1D3A"}},"Max Cash":{"note":"","data":["813BC34C FFFF"],"options":null},"Minutes":{"note":"","data":["80136FBD 00??"],"options":{"00":"00","05":"05","10":"0A","15":"0F","20":"14","25":"19","30":"1E","35":"23","40":"28","45":"2D","50":"32","55":"37","59":"3B"}},"Month":{"note":"","data":["80136FC1 00??"],"options":{"April":"04","Aug":"08","Dec":"0C","Feb":"02","Jan":"01","July":"07","June":"06","March":"03","May":"05","Nov":"0B","Oct":"0A","Sept":"09"}},"Time Passes":{"note":"","data":["80136FD2 00??"],"options":{"Hours \u0026 Mins Fast":"10","Hours \u0026 Mins Medium":"05","Mins Like Seconds":"01","Time Normal":"00","Time Zooms By":"FF"}}},"8F12C096-45DC17E1-C:50":{"All enemies killed":{"note":"","data":["801E244E 0000","801E244F 0000"],"options":null},"Always Have\\50 pieces of corn":{"note":"","data":["801E2461 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E2450 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["D01E244E 0000","801E244E 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E2462 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E2455 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E2460 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D008FCE1 0010","801E23C6 0001","D008FCE1 0010","801E23D6 0001"],"options":null},"Start with Berry Weapon":{"note":"","data":["801E2457 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Unlock All Levels":{"note":"","data":["81099B70 000F"],"options":null}},"8F50B845-D729D22F-C:44":{"Infinite Attempts":{"note":"","data":["800ADA96 0001"],"options":null},"Invincibility":{"note":"Makes you also fly without any fuel","data":["800ADA92 0001"],"options":null},"Level \u0026 Scenario Select":{"note":"","data":["800ACD8C 000E"],"options":null},"infinite Ammo For All Guns":{"note":"","data":["800ADA91 0001"],"options":null}},"906C3F77-CE495EA1-C:45":{"255 Scarabs":{"note":"","data":["805C396D 00FF"],"options":null},"All Items":{"note":"","data":["805C4DBC FFFF"],"options":null},"All Spells":{"note":"","data":["805C4DBE 00BF","805C4DBF 00FF"],"options":null},"Food Bags":{"note":"","data":["805C4DBF 00??"],"options":{"Large Food Bag":"80","Medium Food Bag":"40","Small Food Bag":"20"}},"Get the Cape Claw Cage Key":{"note":"","data":["805C4C51 0001"],"options":null},"Infinite Health":{"note":"","data":["805C3971 007C","805C3965 007C"],"options":null},"Infinite Magic":{"note":"","data":["815C3968 0019","815C3974 0019"],"options":null},"Item Pickup Bug Fix":{"note":"","data":["814F92E2 05B1"],"options":null},"Lanterns":{"note":"","data":["805C4DCF 00??"],"options":{"Firefly Lantern":"01"}},"Levitate (Press L)":{"note":"","data":["814EA390 0802","814EA392 6C2D","814EA394 8FBC","814EA396 0030","8109B0B4 8FBF","8109B0B6 0034","8109B0B8 3C04","8109B0BA 800A","8109B0BC 8484","8109B0BE 7DC0","8109B0C0 2405","8109B0C2 0020","8109B0C4 14A4","8109B0C6 0003","8109B0C8 8606","8109B0CA 0010","8109B0CC 00C5","8109B0CE 3022","8109B0D0 A606","8109B0D2 0010","8109B0D4 0813","8109B0D6 A8E6","8109B0D8 0000","8109B0DA 0000"],"options":null},"Mushroom Bags":{"note":"","data":["805C4DC0 00??"],"options":{"Large Mushroom Bag":"38","Medium Mushroom Bag":"18"}},"Play as Fox":{"note":"You'll need to restart the level or save/load","data":["805C3C5B 0000","805C3C67 0000"],"options":null},"Play as Krystal":{"note":"You'll need to restart the level or save/load","data":["805C3C5B 0001","805C3C67 0001"],"options":null},"Primary Spells":{"note":"","data":["805C4DBE 00??"],"options":{"Dinosaur Eye":"20","Disguise Spell":"05","Illusion Spell":"04","Portal Spell":"80","Projectile Spell":"08","Shield":"10"}},"Replace Fox's Model with Sabre's":{"note":"","data":["81035B9C 081F","81035B9E C000","817F0000 2409","817F0002 0002","817F0004 0800","817F0006 D6E9","817F0008 A1C9","817F000A 00AD"],"options":null},"Secondary Spells":{"note":"","data":["805C4DBF 00??"],"options":{"Ice Blast Spell":"03","Mindread":"06","Mindread Spell":"02","Wizard Randorn (behaves like Projectile)":"04","Wizard Randorn (unique behavior)":"05"}},"Show Hidden Options Menu":{"note":"","data":["8008C857 0041"],"options":null},"Spawn Past the GuardClaw in the Mammoth Area near Swapstone Hollow (File 3)":{"note":"","data":["816DFBA4 C5D4","816DFBA6 0000","816DFBA8 C496","816DFBAA 0000","816DFBAC 44E5","816DFBAE 0000"],"options":null},"Teleport Tricky to Player (Press D-Pad Down)":{"note":"","data":["814FD888 0802","814FD88A 6C37","8109B0DC 3C02","8109B0DE 800A","8109B0E0 8442","8109B0E2 7DC0","8109B0E4 2403","8109B0E6 0400","8109B0E8 1443","8109B0EA 0007","8109B0EC 8E5C","8109B0EE 00E4","8109B0F0 8F82","8109B0F2 000C","8109B0F4 8F83","8109B0F6 0010","8109B0F8 8F9C","8109B0FA 0014","8109B0FC AE42","8109B0FE 0000","8109B100 AE43","8109B102 0004","8109B104 AE5C","8109B106 0008","8109B108 8E45","8109B10A 0000","8109B10C 0813","8109B10E F624","8109B110 8E46","8109B112 0008"],"options":null},"Walk Through Walls / Levitate":{"note":"L plus Dpad Up to disable clipping, L plus Dpad Down to re-enable clipping, L to levitate","data":["81012144 081F","81012146 C400","81012148 0000","8101214A 0000","817F1000 3C18","817F1002 805C","817F1004 8F18","817F1006 1568","817F1008 1300","817F100A 001E","817F100C 0000","817F100E 0000","817F1010 3C02","817F1012 800D","817F1014 8042","817F1016 D3F5","817F1018 2408","817F101A 0020","817F101C 1448","817F101E 0019","817F1020 0000","817F1022 0000","817F1024 3C08","817F1026 807F","817F1028 8102","817F102A 10F0","817F102C 1040","817F102E 0003","817F1030 0000","817F1032 0000","817F1034 2402","817F1036 00A4","817F1038 A302","817F103A 00FB","817F103C 3C08","817F103E 807F","817F1040 8102","817F1042 10F1","817F1044 5440","817F1046 0003","817F1048 A100","817F104A 10F1","817F104C 1000","817F104E 0005","817F1050 0000","817F1052 0000","817F1054 2402","817F1056 00AF","817F1058 A302","817F105A 00FB","817F105C 1000","817F105E 0009","817F1060 0000","817F1062 0000","817F1064 3C08","817F1066 807F","817F1068 8102","817F106A 10F0","817F106C 1040","817F106E 0005","817F1070 0000","817F1072 0000","817F1074 3C18","817F1076 805C","817F1078 8F18","817F107A 1568","817F107C 3C02","817F107E 4000","817F1080 AF02","817F1082 0028","817F1084 8E78","817F1086 0000","817F1088 0800","817F108A 4853","817F108C 8E02","817F108E 0000","D00CD3F4 0008","817F10F0 0100","D00CD3F4 0004","817F10F0 0001"],"options":null}},"90A59003-31089864-C:45":{"Always Normal Spirit\\Player 1":{"note":"","data":["801671F5 0032"],"options":null},"Always Normal Spirit\\Player 2":{"note":"","data":["80167689 0032"],"options":null},"Always Normal Spirit\\Player 3":{"note":"","data":["80167B1D 0032"],"options":null},"Always Normal Spirit\\Player 4":{"note":"","data":["80167FB1 0032"],"options":null},"Always Special\\Player 1":{"note":"","data":["80167235 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["801676C9 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["80167B5D 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["80167FF1 0004"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 1":{"note":"","data":["801671F4 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 2":{"note":"","data":["80167688 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 3":{"note":"","data":["80167B1C 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 4":{"note":"","data":["80167FB0 0064"],"options":null},"Have All Characters":{"note":"","data":["8109ED5A FFFF"],"options":null},"Infinite Create-A-Wrestler Attribute Points":{"note":"","data":["8011A81B 001E"],"options":null},"Max Attributes":{"note":"","data":["50000502 0000","8011A811 0032"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["801671F5 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["80167689 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["80167B1D 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["80167FB1 00FF"],"options":null},"No Spirit\\Player 1":{"note":"","data":["801671F5 0000"],"options":null},"No Spirit\\Player 2":{"note":"","data":["80167689 0000"],"options":null},"No Spirit\\Player 3":{"note":"","data":["80167B1D 0000"],"options":null},"No Spirit\\Player 4":{"note":"","data":["80167FB1 0000"],"options":null},"Specials Don't Run Out":{"note":"","data":["8112AD94 2400"],"options":null},"Timer Is Always 00:00":{"note":"","data":["8016F0AF 0000"],"options":null},"Ultimate Codes\\Player 1":{"note":"","data":["801671F4 0064"],"options":null},"Ultimate Codes\\Player 2":{"note":"","data":["80167688 0064"],"options":null},"Ultimate Codes\\Player 3":{"note":"","data":["80167B1C 0064"],"options":null},"Ultimate Codes\\Player 4":{"note":"","data":["80167FB0 0064"],"options":null},"Weapon Select\\Player 1":{"note":"","data":["81167236 0300","81166D90 ????","81166D92 0000","80166E50 0000"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 2":{"note":"","data":["811676CA 0300","81166DC0 ????","80166DC2 0001","80166E51 0001"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 3":{"note":"","data":["81167B5E 0300","81166DF0 ????","80166DF2 0002","80166E52 0002"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 4":{"note":"","data":["81167FF2 0300","81166E18 ????","81166E1A 0003","80166E53 0003"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}}},"90AF8D2C-E1AC1B37-C:00":{"Freeze Timer":{"note":"","data":["80161E95 0000"],"options":null},"Infinite 9 Credits":{"note":"","data":["8009F0DB 0009"],"options":null},"Infinite Lives":{"note":"","data":["800A1059 0001"],"options":null},"Infinite Max Energy":{"note":"This give you the most engery to jump really high","data":["800A1067 000F","800A106B 000F"],"options":null}},"90F5D9B3-9D0EDCF0-C:45":{"Have All Pikachus Magnemites":{"note":"","data":["801183BC 0000","801183BD 0000","801183BE 0000"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 1":{"note":"","data":["81285A18 03E7"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 2":{"note":"","data":["81286438 03E7"],"options":null},"Pokemon\\Inf Spells\\Player 1":{"note":"","data":["810AE580 FFFF","810AE582 FFFF","810AE5D4 FFFF","810AE5D6 FFFF","810AE628 FFFF","810AE62A FFFF"],"options":null},"Pokemon\\Inf Spells\\Player 2":{"note":"","data":["810AE79C FFFF","810AE79E FFFF","810AE7F0 FFFF","810AE7F2 FFFF","810AE844 FFFF","810AE846 FFFF"],"options":null},"Pokemon\\Max HP\\Player 1":{"note":"","data":["810AE586 03E7","810AE5DA 03E7","810AE62E 03E7"],"options":null},"Pokemon\\Max HP\\Player 2":{"note":"","data":["810AE7A2 03E7","810AE7F6 03E7","810AE84A 03E7"],"options":null},"Ultimate Code":{"note":"what's so ultimate about this code is it raises your Pokemon to its full potential. Even at Level 100, most Pokemon still have a way to go to raise their stats to the max. But with this code, you can instantly boost any Pokemon to its greatest potential!!!","data":["81171F3C FF01","81171F3E FF01","81171F40 FF01","81171F42 FF01","81171F44 FF01"],"options":null}},"91691C3D-F4AC5B4D-C:4A":{"Infinite\\Health\\Player 1":{"note":"","data":["8112A576 270F"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["8114AAF6 270F"],"options":null},"Infinite\\Stun Meter\\Player 1":{"note":"","data":["8012A579 00FF"],"options":null},"Infinite\\Stun Meter\\Player 2":{"note":"","data":["8014AAF9 00FF"],"options":null},"Play As\\Player 1":{"note":"","data":["801BBA54 00??"],"options":{"Airazor":"03","Cheetor":"02","Megatron":"04","Optimus Primal":"00","Rattrap":"01","Tarantulas":"05","Terrorsaur":"07","Waspinator":"06"}},"Play As\\Player 2":{"note":"","data":["801BBA55 00??"],"options":{"Airazor":"03","Cheetor":"02","Megatron":"04","Optimus Primal":"00","Rattrap":"01","Tarantulas":"05","Terrorsaur":"07","Waspinator":"06"}}},"916AE6B8-8817AB22-C:4A":{"Diffuculty Modifier":{"note":"","data":["8011252F 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Gems":{"note":"","data":["8012FF07 00FF"],"options":null},"Have All\\Level Keys":{"note":"","data":["8012FDE3 0007","8012FDE7 0007","8012FDEB 0007","8012FDEF 0007","8012FDF3 0007","8012FDF7 0007","8012FDFB 0007"],"options":null},"Have All\\Weapons":{"note":"","data":["8012FDA7 0001","8012FDAB 0001","8012FDAF 0001","8012FDB3 0001","8012FDB7 0001","8012FDBB 0001","8012FDBF 0001","8012FDC3 0001","8012FDC7 0001","8012FDCB 0001","8012FDCF 0001","8012FDD3 0001"],"options":null},"Have\\Backpack":{"note":"","data":["8012FD9B 0001","8012FDDB 0001"],"options":null},"Have\\Cheat Menu":{"note":"","data":["811205F0 FFFF","811205F2 FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["81129030 AAE1","811E85EA F1FF"],"options":null},"Infinite\\Ammo":{"note":"","data":["8012FD7F 00FF","8012FD93 00FF","8012FD83 00FF","8012FD63 00FF","8012FD8B 00FF","8012FD67 00FF","8012FD8F 00FF","8012FD6B 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["8112FD96 5B23","8012FDD7 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C15F4 013C"],"options":null},"Infinite\\Lives":{"note":"","data":["8012FF0B 00FF"],"options":null}},"916B8B5B-780B85A4-C:45":{"Bonus Stage Character Modifier (Training Mode)":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["8018F1D3 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Enable Item Switch Menu (All Modes)":{"note":"Go into Vs Mode \u0026 then Vs Options \u0026 then Press Up On the D-Pad Or Analogue Stick \u0026 then click the A Button to enter the Item Switch Menu. This Cheat Works For All Modes","data":["811348E2 0004"],"options":null},"Give Kirby A Wierd Blow-Up":{"note":"","data":["8025E158 000A"],"options":null},"Have All Characters":{"note":"","data":["810A4938 0FF0"],"options":null},"P1 Press Down On D-Pad To Make Items Appear In Random Spots":{"note":"","data":["D109EFA4 0400","8118D0A2 0001"],"options":null},"Story Mode\\Always Get Pacifist (60,000 Points)":{"note":"","data":["810A4B6E 0000"],"options":null},"Story Mode\\Infinite Time":{"note":"","data":["810A4B2E 43CB"],"options":null},"Story Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code could also result freezing at the end of the Level.","data":["800A4B3B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 1\\Infinite Lives":{"note":"","data":["800A4B43 0004"],"options":null},"Story Mode\\Player 1\\Kirby B Button Move\\Congo Jungle":{"note":"","data":["80270ACF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Fighting Polygon Team":{"note":"","data":["8026271F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["80268B0F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Kirby's Dreamland":{"note":"","data":["8026DB3F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Master Hand Stage":{"note":"","data":["80271C4F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Metal Mario Stage":{"note":"","data":["80263597 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Peach's Castle":{"note":"","data":["80263D9F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Planet Zebes":{"note":"","data":["8026FFA7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Saffron City":{"note":"","data":["80273A97 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["802710F7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["80268E4F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Low % Health":{"note":"","data":["810A4B86 0000"],"options":null},"Story Mode\\Player 1\\Stage Select":{"note":"","data":["D1045188 0010","800A4AE7 00??"],"options":{"Bonus Stage 1":"03","Bonus Stage 2":"07","Bonus Stage 3 (Race To The Finish)":"0B","Final Stage (Vs Master Hand)":"0D","Stage 1 (Vs Link)":"00","Stage 10 (Fighting Polygon Team vs30)":"0C","Stage 2 (Vs Yoshi Team vs 18)":"01","Stage 3 (Vs Fox McCloud)":"02","Stage 4 (Freezes?)":"04","Stage 5 (Vs Pikachu)":"05","Stage 6 (Freezes?)":"06","Stage 7 (Vs Kirby Team vs8)":"08","Stage 8 (Vs Samus Aran)":"09","Stage 9 (Vs Metal Mario)":"0A"}},"Story Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4BAF 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 2\\Infinite Lives":{"note":"","data":["800A4BB7 0004"],"options":null},"Story Mode\\Player 2\\Low % Health":{"note":"","data":["810A4BFA 0000"],"options":null},"Story Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4C23 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 3\\Infinite Lives":{"note":"","data":["800A4C2B 0004"],"options":null},"Story Mode\\Player 3\\Low % Health":{"note":"","data":["810A4C6E 0000"],"options":null},"Story Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4C97 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 4\\Infinite Lives":{"note":"","data":["800A4C9F 0004"],"options":null},"Story Mode\\Player 4\\Low % Health":{"note":"","data":["810A4CE2 0000"],"options":null},"Story Mode\\Skip Straight To Master Hand":{"note":"","data":["800A4AE7 000D"],"options":null},"VS. Mode\\Have Mushroom Kindom":{"note":"","data":["800A4937 00FF"],"options":null},"VS. Mode\\Infinite Time":{"note":"","data":["810A4D1E 43CB"],"options":null},"VS. Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4D2B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["802639EF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["8026BF87 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["8026E2B7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Low % Health":{"note":"","data":["810A4D76 0000"],"options":null},"VS. Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4D9F 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 2\\Low % Health":{"note":"","data":["810A4DEA 0000"],"options":null},"VS. Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4E13 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 3\\Low % Health":{"note":"","data":["810A4E5E 0000"],"options":null},"VS. Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4E87 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 4\\Low % Health":{"note":"","data":["810A4ED2 0000"],"options":null}},"918E2D60-F865683E-C:50":{"Access\\All Cars":{"note":"","data":["50000402 0000","813DFC6A 0001"],"options":null},"Access\\All Challenges":{"note":"","data":["50000502 0000","813DD428 0001"],"options":null},"Access\\All Cups":{"note":"","data":["50000302 0000","812CB7C8 0001"],"options":null},"Always 1st":{"note":"","data":["813E00E8 0001"],"options":null},"Infinite\\Boomerang's":{"note":"","data":["8039B464 0004","8039B467 0004","8039B469 0009"],"options":null},"Infinite\\Bullet's":{"note":"","data":["8039B464 0007","8039B467 0007","8039B469 0009"],"options":null},"Infinite\\CREDITS":{"note":"","data":["80388F3D 0003"],"options":null},"Infinite\\Magnet's":{"note":"","data":["8039B464 0001","8039B467 0001","8039B469 0009"],"options":null},"Infinite\\Seeker's":{"note":"","data":["8039B464 0005","8039B467 0005","8039B469 0009"],"options":null},"Infinite\\Shield's":{"note":"","data":["8039B464 0008","8039B467 0008","8039B469 0009"],"options":null},"Infinite\\Stinger's":{"note":"","data":["8039B464 0003","8039B467 0003","8039B469 0009"],"options":null},"Infinite\\Stopper's":{"note":"","data":["8039B464 0006","8039B467 0006","8039B469 0009"],"options":null},"Infinite\\Turbo's":{"note":"","data":["8039B464 0000","8039B467 0000","8039B469 0009"],"options":null},"Laps To Race":{"note":"","data":["813BBD5C 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Psycho Weapons":{"note":"","data":["8039B469 0003","802B85A3 0003"],"options":null}},"91B66D42-16AC4E46-C:44":{"Have Cheats Menu":{"note":"Go into the Cheats From the main Menu \u0026 put on the Ones you want","data":["810CF716 01FF"],"options":null},"Infinite Balls":{"note":"","data":["802FD21F 0064"],"options":null},"Infinite Credits":{"note":"","data":["802FD215 0064"],"options":null},"Infinite Energy":{"note":"","data":["802FD209 0064"],"options":null},"Infinite Sponge Darts":{"note":"","data":["802FD223 0064"],"options":null},"Infinite Suckers":{"note":"","data":["802FD222 0064"],"options":null},"Start with 9999 Monster Score":{"note":"","data":["812FD20E 270F"],"options":null}},"93053075-261E0F43-C:50":{"All Players On 1st Shot":{"note":"","data":["813013DA 0000"],"options":null}},"930C29EA-939245BF-C:45":{"All Gold Medals":{"note":"","data":["50000502 0000","81259130 0101"],"options":null},"Infinite\\Tools Options":{"note":"","data":["8025A624 00??"],"options":{"Fan":"04","Frying Pan":"01","Ghost":"02","Invisible":"06","Rat Face":"08","Rock":"07","Rocket":"05","Super Ghost":"03","Super Rat Face":"09","Wings":"0A"}},"Infinite\\Trick Game 300 Points":{"note":"","data":["8125A7F2 012C"],"options":null},"Infinite\\Weapons Options":{"note":"","data":["8025A622 00??","8025A623 0009"],"options":{"Bomb":"05","Freeze Shot":"03","Parachute":"02","Slap Stick":"01","Snowman":"04","Whirlwind":"06"}},"Max Coins":{"note":"","data":["8125A5BE 270F","8025A5BF 00C8"],"options":null},"Open Extra Characters \u0026 Snowboards":{"note":"Battle Mode Only","data":["8125916E 0101","80259170 0001","8025915C 0001","8125915E 0101","81259160 0101"],"options":null}},"931AEF3F-EF196B90-C:4A":{"Infinite\\Armor\\Player 1":{"note":"","data":["8011D4DF 0064"],"options":null},"Infinite\\Armor\\Player 2":{"note":"","data":["8011D4E3 0064"],"options":null},"Infinite\\Bombs\\Player 1":{"note":"","data":["8011D4E7 0003"],"options":null},"Infinite\\Bombs\\Player 2":{"note":"","data":["8011D4EB 0003"],"options":null},"Level 11 Vulcan Cannon\\Player 1":{"note":"","data":["80123A2B 000A"],"options":null},"Level 11 Vulcan Cannon\\Player 2":{"note":"","data":["80123BCB 000A"],"options":null},"Press L For Rapid Fire Select\\Player 1":{"note":"","data":["D011BDF1 0020","8011D50F 00??"],"options":{"On Flak":"14","On Nuke \u0026 Laser":"28"}},"Press L For Rapid Fire Select\\Player 2":{"note":"","data":["D011BDF9 0020","8011D513 00??"],"options":{"On Flak":"14","On Nuke \u0026 Laser":"28"}}},"93945F48-5C0F2E30-C:50":{"Bonus Stage Character Modifier (Training Mode)":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["80197A33 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Give Kirby A Wierd Blow-Up":{"note":"","data":["802669B8 000A"],"options":null},"Have All Characters":{"note":"","data":["810AD198 0FF0"],"options":null},"Jump off to win":{"note":"","data":["810AD3A2 0000"],"options":null},"P1 Press Down On D-Pad To Make Items Appear In Random Spots":{"note":"","data":["D10A7804 0400","81195902 0001"],"options":null},"Story Mode\\Always Get Pacifist (60,000 Points)":{"note":"","data":["810AD3CE 0000"],"options":null},"Story Mode\\Infinite Time":{"note":"","data":["810AD38E 43CB"],"options":null},"Story Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code could also result freezing at the end of the Level.","data":["800AD39B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 1\\Infinite Lives":{"note":"","data":["800AD3A3 0004"],"options":null},"Story Mode\\Player 1\\Kirby B Button Move\\Congo Jungle":{"note":"","data":["8027932F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Fighting Polygon Team":{"note":"","data":["8026AF7F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["8027136F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Kirby's Dreamland":{"note":"","data":["8027639F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Master Hand Stage":{"note":"","data":["8027A4AF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Metal Mario Stage":{"note":"","data":["8026BDF7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Peach's Castle":{"note":"","data":["8026C5FF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Planet Zebes":{"note":"","data":["80278807 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Saffron City":{"note":"","data":["8027C2F7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["80279957 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["802716AF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Low % Health":{"note":"","data":["810AD3E6 0000"],"options":null},"Story Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD40F 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 2\\Infinite Lives":{"note":"","data":["800AD417 0004"],"options":null},"Story Mode\\Player 2\\Low % Health":{"note":"","data":["810AD45A 0000"],"options":null},"Story Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD483 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 3\\Infinite Lives":{"note":"","data":["800AD48B 0004"],"options":null},"Story Mode\\Player 3\\Low % Health":{"note":"","data":["810AD4CE 0000"],"options":null},"Story Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD4F7 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 4\\Infinite Lives":{"note":"","data":["800AD4FF 0004"],"options":null},"Story Mode\\Player 4\\Low % Health":{"note":"","data":["810AD542 0000"],"options":null},"Story Mode\\Skip Straight To Master Hand":{"note":"","data":["800AD347 000D"],"options":null},"VS. Mode\\Have Mushroom Kindom":{"note":"","data":["800AD197 00FF"],"options":null},"VS. Mode\\Infinite Time":{"note":"","data":["810AD57E 43CB"],"options":null},"VS. Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD58B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["8026C24F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["802747E7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["80276B17 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Low % Health":{"note":"","data":["810AD5D6 0000"],"options":null},"VS. Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD5FF 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 2\\Low % Health":{"note":"","data":["810AD64A 0000"],"options":null},"VS. Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD673 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 3\\Low % Health":{"note":"","data":["810AD6BE 0000"],"options":null},"VS. Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD6E7 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 4\\Low % Health":{"note":"","data":["810AD732 0000"],"options":null}},"93EB3F7E-81675E44-C:44":{"Access All Levels":{"note":"","data":["8008A9D6 0001","8008A9EA 0001","8008AA12 0001","8008AA62 0001","8008AA76 0001","8008AA8A 0001","8008AA9E 0001","8008AAB2 0001","8008AAC6 0011","8008AADA 0021","8008AAEE 0001","8008AB16 0011","8008AB2A 0041","8008AB3E 0021","8008AB52 0081","8008AB66 0001","8008AB7A 0081","8008AB8E 0001","8008ABB6 0001","8008ABDE 0001","8008ABF2 0011","8008AC06 0021","8008AC56 0001","8008AF3A 0001","8008AF4E 0001","8008AF62 0001","8008AF76 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81094150 0063","81094152 0063","81094154 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A9297 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810866C2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810864C4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80094305 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A92B5 00??","800A92C5 00??","800A92D5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"944FAFC4-B288266A-C:00":{"Infinite Health":{"note":"","data":["812128D0 42C8","812128D2 0000"],"options":null},"Infinite Heat Vision":{"note":"","data":["812128E0 42C8","812128E2 0000"],"options":null},"Infinite Ice Breath":{"note":"","data":["812128E4 42C8","812128E6 0000"],"options":null},"Infinite Speed Boost":{"note":"","data":["812128D8 42C8","812128DA 0000"],"options":null},"Infinite Timer\\Level 2":{"note":"","data":["8119B927 003B","8119B92B 0009"],"options":null},"Infinite X-Ray":{"note":"","data":["812128F0 42C8","812128F2 0000"],"options":null}},"94807E6B-60CC62E4-C:4A":{"1P Mode\\Stage Select":{"note":"","data":["D0162FEB 0001","80162FEB 00??"],"options":{"Car-kun Arle game":"0E","Car-kun Schezo game":"09","Satan Arle game":"0D","Satan Schezo game":"08"}},"Endless Mode\\Player Level 99 Player 1":{"note":"","data":["801632E7 0063"],"options":null},"Endless Mode\\Player Level 99 Player 2":{"note":"","data":["801632EB 0063"],"options":null},"Instant 7th Step of Chain\\Player 1":{"note":"","data":["D0163A2B 0001","80163A2B 0007"],"options":null},"Instant 7th Step of Chain\\Player 2":{"note":"","data":["D0163E5B 0001","80163E5B 0007"],"options":null},"Maximum Score\\Player 1":{"note":"","data":["811632CC 05F5","811632CE E0FF"],"options":null},"Maximum Score\\Player 2":{"note":"","data":["811632D0 05F5","811632D2 E0FF"],"options":null},"Mode Total Continues 0":{"note":"","data":["801632AF 0000","801632C7 0000"],"options":null},"Nazo Puyo Mode\\All Practice Stages Cleared 4":{"note":"","data":["50000402 0000","811631E8 FFFF"],"options":null},"No Warning Icons\\Player 1":{"note":"","data":["80164EA3 0000"],"options":null},"No Warning Icons\\Player 2":{"note":"","data":["80164EA7 0000"],"options":null},"Options Complete Demo Viewer":{"note":"","data":["8016320B 0007","8116320C FFFF","8116320E FFFF"],"options":null}},"95286EB4-B76AD58F-C:45":{"100% Efficiency":{"note":"","data":["80092E4B 0064"],"options":null},"100% Leadership":{"note":"","data":["80092E47 0064"],"options":null},"GDI\\Instant\\Air Strike":{"note":"","data":["800962A4 0032","800C4E50 00FF"],"options":null},"GDI\\Instant\\Build Aircraft":{"note":"","data":["810C4F12 FFFF"],"options":null},"GDI\\Instant\\Build Buildings":{"note":"","data":["810C4F1E FFFF"],"options":null},"GDI\\Instant\\Build Units":{"note":"","data":["810C4F16 FFFF"],"options":null},"GDI\\Instant\\Build Vehicles":{"note":"","data":["810C4F1A FFFF"],"options":null},"GDI\\Instant\\Ion Cannon":{"note":"","data":["800962A5 0033","800C4E30 00FF"],"options":null},"GDI\\Instant\\Nuclear Strike":{"note":"","data":["800962A6 0034","800C4E70 00FF"],"options":null},"GDI\\Max Cash":{"note":"","data":["810C4F06 FFFF","810C4F08 0001"],"options":null},"GDI\\Max Power":{"note":"","data":["810C4F26 FFFF","810C4F28 0001"],"options":null},"GDI\\Maximum Buildings Lost":{"note":"","data":["80092E5F 00C8"],"options":null},"GDI\\Maximum Killed":{"note":"","data":["80092E53 00C8"],"options":null},"GDI\\Mission 4\\Infinite Health APC #1":{"note":"","data":["800ABFB1 00C8"],"options":null},"GDI\\Mission 4\\Infinite Health APC #2":{"note":"","data":["800AC03D 00C8"],"options":null},"GDI\\Mission 4\\Infinite Health Hum-Vee":{"note":"","data":["800ABE99 0096"],"options":null},"GDI\\Mission 6\\Infinite Health Commando":{"note":"","data":["800B56CD 0050"],"options":null},"GDI\\Mission 6\\Infinite Health Transportational Helicopter":{"note":"","data":["800BFC95 005A"],"options":null},"GDI\\No Buildings Lost":{"note":"","data":["80092E5F 0000"],"options":null},"GDI\\None Killed":{"note":"","data":["80092E53 0000"],"options":null},"Max Total Score":{"note":"","data":["81092E42 FFFF"],"options":null},"NOD\\Instant\\Air Strike":{"note":"","data":["800962A4 0032","800C4FF8 00FF"],"options":null},"NOD\\Instant\\Build Aircraft":{"note":"","data":["810C50BA FFFF"],"options":null},"NOD\\Instant\\Build Buildings":{"note":"","data":["810C50C6 FFFF"],"options":null},"NOD\\Instant\\Build Units":{"note":"","data":["810C50BE FFFF"],"options":null},"NOD\\Instant\\Build Vehicles":{"note":"","data":["810C50C2 FFFF"],"options":null},"NOD\\Instant\\Ion Cannon":{"note":"","data":["800962A5 0033","800C4FD8 00FF"],"options":null},"NOD\\Instant\\Nuclear Strike":{"note":"","data":["800962A6 0034","800C5018 00FF"],"options":null},"NOD\\Max Cash":{"note":"","data":["810C50AE FFFF","810C50B0 0001"],"options":null},"NOD\\Max Power":{"note":"","data":["810C50CE FFFF","810C50D0 0001"],"options":null},"NOD\\Maximum Buildings Lost":{"note":"","data":["80092E5B 00C8"],"options":null},"NOD\\Maximum Killed":{"note":"","data":["80092E4F 00C8"],"options":null},"NOD\\No Buildings Lost":{"note":"","data":["80092E5B 0000"],"options":null},"NOD\\None Killed":{"note":"","data":["80092E4F 0000"],"options":null},"Time Spent On Mission":{"note":"","data":["80092E3B 00??"],"options":{"Max Time":"FF","No Time":"00"}},"Tons Of Ending Credits":{"note":"","data":["81092E3C 0FFF","81092E3E FFFF"],"options":null}},"95B2B30B-2B6415C1-C:50":{"Boots Of Speed Select\\Player 1":{"note":"","data":["8113F128 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113F2C4 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113F460 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113F5FC ????"],"options":{"Off":"0000","On":"03FF"}},"Enable Cheat Menu":{"note":"","data":["80137D33 0005","81137C56 07FF"],"options":null},"Have All\\Armour":{"note":"","data":["8013F081 0019","8013F085 0014","8013F089 0014","8013F08D 0014"],"options":null},"Have All\\Items And Artifacts\\Player 1":{"note":"","data":["8013F091 0001","8013F093 00FF","8013F095 0002","8013F097 00FF","8013F099 0003","8013F09B 00FF","8013F09D 0004","8013F09F 00FF","8013F0A1 0005","8013F0A3 00FF","8013F0A5 0006","8013F0A7 00FF","8013F0A9 0007","8013F0AB 00FF","8013F0AD 0008","8013F0AF 00FF","8013F0B1 0009","8013F0B3 00FF","8013F0B5 000A","8013F0B7 00FF","8013F0B9 000B","8013F0BB 00FF","8013F0BD 000C","8013F0BF 00FF","8013F0C1 000D","8013F0C3 00FF","8013F0C5 000E","8013F0C7 00FF","8013F0C9 000F","8013F0CB 00FF","8013F0CD 0010","8013F0CF 00FF","8013F0D1 0011","8013F0D3 00FF","8013F0D5 0012","8013F0D7 00FF","8013F0D9 0013","8013F0DB 00FF","8013F0DD 0014","8013F0DF 00FF","8013F0E1 0015","8013F0E3 00FF","8013F0E5 0016","8013F0E7 00FF","8013F0E9 0017","8013F0EB 00FF","8013F0ED 0018","8013F0EF 00FF","8013F0F1 0019","8013F0F3 00FF","8013F0F5 001B","8013F0F7 00FF","8013F0F9 001C","8013F0FB 00FF","8013F0FD 001D","8013F0FF 00FF","8013F101 001E","8013F103 00FF","8013F105 001F","8013F107 00FF","8013F109 0020","8013F10B 00FF","8013F119 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113F12C 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113F2C8 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113F464 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113F600 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013F145 00FF","8013F147 00FF","8013F149 00FF","8013F14B 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013F2E1 00FF","8013F2E3 00FF","8013F2E5 00FF","8013F2E7 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013F47D 00FF","8013F47F 00FF","8013F481 00FF","8013F483 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013F619 00FF","8013F61B 00FF","8013F61D 00FF","8013F61F 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013F14D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013F2E9 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013F485 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013F621 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013F14F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013F2EB 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013F487 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013F623 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113F11C ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113F2B8 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113F454 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113F5F0 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113F11C FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113F2B8 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113F454 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113F5F0 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8013F123 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113F2BE ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113F45A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113F5F6 ????"],"options":{"Off":"0000","On":"03FF"}}},"964ADD0B-B29213DB-C:4A":{"Access All In-Game Cheats":{"note":"Pause Gameplay To Access","data":["81157E46 000F","81157E56 FFFF"],"options":null},"Access All Navigation Cards":{"note":"","data":["80157E9B 0005"],"options":null},"Access Secret Worlds":{"note":"","data":["81152946 0064"],"options":null},"Infinite Lives":{"note":"","data":["81157EAE 0063"],"options":null},"Max \u0026 Total Gold":{"note":"","data":["80157E4B 0063","80157E4F 0063"],"options":null}},"96747EB4-104BB243-C:4A":{"All levels Complete":{"note":"This activate's solo missions, give all medals on solo missions, activate cheats, activate cinemas, and who knows what else. I just don't Have\\the time to identify these codes. I know that some of this is creditted to Zap2. I don't Have\\the time to cut those codes out.","data":["50003201 0000","800A2940 0001","50003201 0000","800A2972 0001","50003201 0000","800A29A4 0001"],"options":null},"Have All Weapons\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80206B60 0007","801EDB60 0007","801D4B60 0007"],"options":null},"Have All Weapons\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["802087D0 0007","801EF7D0 0007","801D67D0 0007"],"options":null},"Infinite Ammo\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["802062EF 00FF","801ED2EF 00FF","801D42EF 00FF","80205B4B 00FF","801ECB4B 00FF","801D3B4B 00FF"],"options":null},"Infinite Ammo\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80207F5F 00FF","801EEF5F 00FF","801D5F5F 00FF","802077BB 00FF","801EE7BB 00FF","801D57BB 00FF"],"options":null},"Infinite Health\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["812053CC 3F80","811EC3CC 3F80","811D33CC 3F80"],"options":null},"Infinite Health\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8120703C 3F80","811EE03C 3F80","811D503C 3F80"],"options":null},"Infinite Shield\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["812053E0 3F80","811E35A0 3F80","811CA5A0 3F80"],"options":null},"Infinite Shield\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["811FE210 3F80","811E5210 3F80","811CC210 3F80"],"options":null}},"979B263E-F8470004-C:50":{"Access Gargos Character":{"note":"","data":["80127DC8 0001"],"options":null},"Access In-Game Cheats":{"note":"","data":["801283DC 0006"],"options":null},"Fast Kick \u0026 Punch":{"note":"","data":["801D357E 0010"],"options":null},"Infinite Health":{"note":"","data":["801D3584 0078"],"options":null},"Invincible":{"note":"","data":["801D35D4 000A"],"options":null},"Max Blood":{"note":"","data":["80127D5D 0003"],"options":null},"No Time Limit":{"note":"","data":["80127D5B 0001"],"options":null}},"98DF9DFC-6606C189-C:45":{"Belongings\\Slot 01":{"note":"","data":["80189084 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 02":{"note":"","data":["80189085 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 03":{"note":"","data":["80189086 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 04":{"note":"","data":["80189087 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 05":{"note":"","data":["80189088 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 06":{"note":"","data":["80189089 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 07":{"note":"","data":["8018908A 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 08":{"note":"","data":["8018908B 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Have\\All Pics":{"note":"","data":["8118905A FFFF"],"options":null},"Have\\Max Shipped In Bin!":{"note":"","data":["8023738A FFFF"],"options":null},"Have\\Win Dog Races":{"note":"","data":["801886B0 00FF"],"options":null},"Infinite\\Cake Card Points":{"note":"","data":["80181B10 0063"],"options":null},"Infinite\\Chicken Feed":{"note":"","data":["80237411 005C"],"options":null},"Infinite\\Flower Card Points":{"note":"","data":["802373F0 0063"],"options":null},"Infinite\\Fodder Spout (Sheep And Cows)":{"note":"","data":["81180714 0063"],"options":null},"Infinite\\Horse Stamina":{"note":"","data":["802F5015 0002"],"options":null},"Infinite\\Lumber":{"note":"","data":["81189E50 03E7"],"options":null},"Infinite\\Medals For Horse \u0026 Dog Races":{"note":"","data":["81189B06 270F","81205206 270F"],"options":null},"Infinite\\Money":{"note":"","data":["811FD60E FFFF"],"options":null},"Infinite\\Stamina":{"note":"","data":["80189060 00FF"],"options":null},"Infinite\\Watering Can Uses":{"note":"","data":["8016FBCD 0004"],"options":null},"Item\\Slot 01":{"note":"","data":["8018908E 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 02":{"note":"","data":["8018908F 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 03":{"note":"","data":["80189090 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 04":{"note":"","data":["80189091 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 05":{"note":"","data":["80189092 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 06":{"note":"","data":["80189093 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 07":{"note":"","data":["80189094 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 08":{"note":"","data":["80189095 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 09":{"note":"","data":["80189096 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 10":{"note":"","data":["80189097 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 11":{"note":"","data":["80189098 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 12":{"note":"","data":["80189099 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 13":{"note":"","data":["8018909A 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 14":{"note":"","data":["8018909B 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 15":{"note":"","data":["8018909C 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 16":{"note":"","data":["8018909D 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 17":{"note":"","data":["8018909E 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 18":{"note":"","data":["8018909F 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 19":{"note":"","data":["801890A0 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 20":{"note":"","data":["801890A1 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 21":{"note":"","data":["801890A2 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 22":{"note":"","data":["801890A3 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 23":{"note":"","data":["801890A4 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 24":{"note":"","data":["801890A5 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Make\\Ann Love You":{"note":"","data":["801C3F93 00FF"],"options":null},"Make\\Elli Love You":{"note":"","data":["801C3F92 00FF"],"options":null},"Make\\Karen Love You":{"note":"","data":["801C3F94 00FF"],"options":null},"Make\\Maria Love You":{"note":"","data":["801C3F90 00FF"],"options":null},"Make\\Popuri Love You":{"note":"","data":["801C3F91 00FF"],"options":null},"Tool\\Slot 01":{"note":"","data":["80189075 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 02":{"note":"","data":["80189076 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 03":{"note":"","data":["80189077 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 04":{"note":"","data":["80189078 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 05":{"note":"","data":["80189079 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 06":{"note":"","data":["8018907A 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 07":{"note":"","data":["8018907B 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 08":{"note":"","data":["8018907C 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}}},"98F9F2D0-03D9F09C-C:50":{"Foul score will stay at 0":{"note":"","data":["802EF725 0000"],"options":null},"Have 5 games won":{"note":"","data":["802EF721 0005"],"options":null},"Pot 1 to win Set points to 25 in straight pool":{"note":"","data":["802EF71D 0019"],"options":null},"Score 0 points in shark skins":{"note":"","data":["802EF723 0000"],"options":null}},"99150E18-1266E6A5-C:45":{"1 Million Points":{"note":"","data":["8119054C 000F","8119054E 4240"],"options":null},"Access In-Game Cheat Menu":{"note":"","data":["50001104 0000","800E9DD8 0001"],"options":null},"All Complete\\Bob Burnquist":{"note":"","data":["810E8924 FFFF","810E8926 FFFF","810E8928 FFFF","810E892A FFFF","810E892C FFFF","810E892E FFFF","810E8930 FFFF","810E8932 FFFF"],"options":null},"All Complete\\Tony Hawk":{"note":"","data":["810E8840 FFFF","810E8842 FFFF","810E8844 FFFF","810E8846 FFFF","810E8848 FFFF","810E884A FFFF","810E884C FFFF","810E884E FFFF"],"options":null},"All Gaps\\Hanger":{"note":"","data":["800E9CC5 00FF","810E9CC6 FFFF"],"options":null},"All Gaps\\Marseille":{"note":"","data":["810E9CDC FFFF","810E9CDE FFFF","800E9CE3 000F"],"options":null},"All Gaps\\Philadelphia":{"note":"","data":["810E9D0C FFFF","810E9D0E FFFF","810E9D12 0FFF"],"options":null},"All Gaps\\School II":{"note":"","data":["810E9CD0 FFFF","810E9CD2 FFFF","810E9CD6 0FFF"],"options":null},"All Gaps\\Skatestreet":{"note":"","data":["810E9D00 FFFF","810E9D02 FFFF","800E9D07 000F"],"options":null},"All Gaps\\Venice Beach":{"note":"","data":["810E9CF4 FFFF","810E9CF6 FFFF","810E9CFA 0FFF"],"options":null},"All Tricks Available\\Custom Player 1":{"note":"","data":["810E9454 FFFF","810E9456 FFFF","810E9458 FFFF","810E945A FFFF","810E945C FFFF","810E945E FFFF"],"options":null},"All Tricks Available\\Custom Player 2":{"note":"","data":["810E9538 FFFF","810E953A FFFF","810E953C FFFF","810E953E FFFF","810E9540 FFFF","810E9542 FFFF"],"options":null},"All Tricks Available\\Custom Player 3":{"note":"","data":["810E961C FFFF","810E961E FFFF","810E9620 FFFF","810E9622 FFFF","810E9624 FFFF","810E9626 FFFF"],"options":null},"All Tricks Available\\Custom Player 4":{"note":"","data":["810E9700 FFFF","810E9702 FFFF","810E9704 FFFF","810E9706 FFFF","810E9708 FFFF","810E970A FFFF"],"options":null},"Always Special On Cheat":{"note":"","data":["800E9DEC 0001"],"options":null},"Infinte Time":{"note":"","data":["810E87AA 0000"],"options":null},"Max Cash\\Andrew Reynolds":{"note":"","data":["810E903C 000F","810E903E 423F","810E9040 000F","810E9042 423F"],"options":null},"Max Cash\\Bob Burnquist":{"note":"","data":["810E891C 000F","810E891E 423F","810E8920 000F","810E8922 423F"],"options":null},"Max Cash\\Bucky Lasek":{"note":"","data":["810E8D90 000F","810E8D92 423F","810E8D94 000F","810E8D96 423F"],"options":null},"Max Cash\\Chad Muska":{"note":"","data":["810E8F58 000F","810E8F5A 423F","810E8F5C 000F","810E8F5E 423F"],"options":null},"Max Cash\\Custom Player 1":{"note":"","data":["810E93CC 000F","810E93CE 423F","810E93D0 000F","810E93D2 423F"],"options":null},"Max Cash\\Custom Player 2":{"note":"","data":["810E94B0 000F","810E94B2 423F","810E94B4 000F","810E94B6 423F"],"options":null},"Max Cash\\Custom Player 3":{"note":"","data":["810E9594 000F","810E9596 423F","810E9598 000F","810E959A 423F"],"options":null},"Max Cash\\Custom Player 4":{"note":"","data":["810E9678 000F","810E967A 423F","810E967C 000F","810E967E 423F"],"options":null},"Max Cash\\Elissa Steamer":{"note":"","data":["810E9204 000F","810E9206 423F","810E9208 000F","810E920A 423F"],"options":null},"Max Cash\\Eric Koston":{"note":"","data":["810E8CAC 000F","810E8CAE 423F","810E8CB0 000F","810E8CB2 423F"],"options":null},"Max Cash\\Geoff Rowley":{"note":"","data":["810E9120 000F","810E9122 423F","810E9124 000F","810E9126 423F"],"options":null},"Max Cash\\Jamie Thomas":{"note":"","data":["810E92E8 000F","810E92EA 423F","810E92EC 000F","810E92EE 423F"],"options":null},"Max Cash\\Kareem Campbell":{"note":"","data":["810E8AE4 000F","810E8AE6 423F","810E8AE8 000F","810E8AEA 423F"],"options":null},"Max Cash\\Officer Dick":{"note":"","data":["810E975C 000F","810E975E 423F","810E9760 000F","810E9762 423F"],"options":null},"Max Cash\\Rodney Mullen":{"note":"","data":["810E8E74 000F","810E8E76 423F","810E8E78 000F","810E8E7A 423F"],"options":null},"Max Cash\\Rune Glifberg":{"note":"","data":["810E8BC8 000F","810E8BCA 423F","810E8BCC 000F","810E8BCE 423F"],"options":null},"Max Cash\\Steve Caballero":{"note":"","data":["810E8A00 000F","810E8A02 423F","810E8A04 000F","810E8A06 423F"],"options":null},"Perfect Balance Cheat":{"note":"","data":["800E9DE8 0001"],"options":null},"Tricks Available\\Andrew Reynolds":{"note":"","data":["810E90C4 FFFF","810E90C6 FFFF","810E90C8 FFFF","810E90CA FFFF","810E90CC FFFF","810E90CE FFFF"],"options":null},"Tricks Available\\Bob Burnquist":{"note":"","data":["810E89A4 FFFF","810E89A6 FFFF","810E89A8 FFFF","810E89AA FFFF","810E89AC FFFF","810E89AE FFFF"],"options":null},"Tricks Available\\Chad Muska":{"note":"","data":["810E8FE0 FFFF","810E8FE2 FFFF","810E8FE4 FFFF","810E8FE6 FFFF","810E8FE8 FFFF","810E8FEA FFFF"],"options":null},"Tricks Available\\Elissa Steamer":{"note":"","data":["810E928C FFFF","810E928E FFFF","810E9290 FFFF","810E9292 FFFF","810E9294 FFFF","810E9296 FFFF"],"options":null},"Tricks Available\\Eric Koston":{"note":"","data":["810E8D34 FFFF","810E8D36 FFFF","810E8D38 FFFF","810E8D3A FFFF","810E8D3C FFFF","810E8D3E FFFF"],"options":null},"Tricks Available\\Geoff Rowley":{"note":"","data":["810E91A8 FFFF","810E91AA FFFF","810E91AC FFFF","810E91AE FFFF","810E91B0 FFFF","810E91B2 FFFF"],"options":null},"Tricks Available\\Jamie Thomas":{"note":"","data":["810E9370 FFFF","810E9372 FFFF","810E9374 FFFF","810E9376 FFFF","810E9378 FFFF","810E937A FFFF"],"options":null},"Tricks Available\\Kareem Campbell":{"note":"","data":["810E8B6C FFFF","810E8B6E FFFF","810E8B70 FFFF","810E8B72 FFFF","810E8B74 FFFF","810E8B76 FFFF"],"options":null},"Tricks Available\\Officer Dick":{"note":"","data":["810E97E4 FFFF","810E97E6 FFFF","810E97E8 FFFF","810E97EA FFFF","810E97EC FFFF","810E97EE FFFF"],"options":null},"Tricks Available\\Rodney Mullen":{"note":"","data":["810E8EFC FFFF","810E8EFE FFFF","810E8F00 FFFF","810E8F02 FFFF","810E8F04 FFFF","810E8F06 FFFF"],"options":null},"Tricks Available\\Rune Glifberg":{"note":"","data":["810E8C50 FFFF","810E8C52 FFFF","810E8C54 FFFF","810E8C56 FFFF","810E8C58 FFFF","810E8C5A FFFF"],"options":null},"Tricks Available\\Spider Man":{"note":"","data":["810E99AC FFFF","810E99AE FFFF","810E99B0 FFFF","810E99B2 FFFF","810E99B4 FFFF","810E99B6 FFFF"],"options":null},"Tricks Available\\Steve Caballero":{"note":"","data":["810E8A88 FFFF","810E8A8A FFFF","810E8A8C FFFF","810E8A8E FFFF","810E8A90 FFFF","810E8A92 FFFF"],"options":null},"Tricks Available\\Tony Hawk":{"note":"","data":["810E88C0 FFFF","810E88C2 FFFF","810E88C4 FFFF","810E88C6 FFFF","810E88C8 FFFF","810E88CA FFFF"],"options":null},"Unlock Hoffman Factory \u0026 Skate Heaven":{"note":"","data":["800EA0CB 003F"],"options":null},"Unlock\\Officer Dick":{"note":"","data":["800E9DDC 0001","800F087B 0001"],"options":null},"Unlock\\Spider Man":{"note":"","data":["800E9DD8 0001","800F0B9B 0001"],"options":null}},"99179359-2FE7EBC3-C:50":{"Access All\\Bonus Coins":{"note":"","data":["50000F02 0000","810A6124 0007"],"options":null},"Access All\\Paw Coins":{"note":"","data":["50000F02 0000","810A60E8 03FF"],"options":null},"Access All\\Special Remote Controls":{"note":"","data":["810A60E4 FFFF","810A60E6 FFFF"],"options":null},"Access All\\ordinary Remote Controls":{"note":"","data":["50000F01 0000","800A60A8 000F"],"options":null},"Crazy Tail":{"note":"","data":["8110955E 0001"],"options":null},"Infinite\\Health":{"note":"","data":["810A60C8 0005"],"options":null},"Infinite\\Lives":{"note":"","data":["810A60C6 0064"],"options":null}},"9AB3B50A-BC666105-C:44":{"Access In-Game Cheat Menu":{"note":"To Access Pause Game Play. This gives you access to In-game Cheats like God Mode,Level Select,All Items Etc","data":["81137CD6 07FF","80137DB3 0005"],"options":null},"Boots Of Speed Select\\Player 1":{"note":"","data":["8113F538 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113F6D4 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113F870 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113FA0C ????"],"options":{"Off":"0000","On":"03FF"}},"Have All\\Armour":{"note":"","data":["8013F491 0019","8013F495 0014","8013F499 0014","8013F49D 0014"],"options":null},"Have All\\Items And Artifacts\\Player 1":{"note":"","data":["8013F4A1 0001","8013F4A3 00FF","8013F4A5 0002","8013F4A7 00FF","8013F4A9 0003","8013F4AB 00FF","8013F4AD 0004","8013F4AF 00FF","8013F4B1 0005","8013F4B3 00FF","8013F4B5 0006","8013F4B7 00FF","8013F4B9 0007","8013F4BB 00FF","8013F4BD 0008","8013F4BF 00FF","8013F4C1 0009","8013F4C3 00FF","8013F4C5 000A","8013F4C7 00FF","8013F4C9 000B","8013F4CB 00FF","8013F4CD 000C","8013F4CF 00FF","8013F4D1 000D","8013F4D3 00FF","8013F4D5 000E","8013F4D7 00FF","8013F4D9 0010","8013F4DB 00FF","8013F4DD 0011","8013F4DF 00FF","8013F4E1 0012","8013F4E3 00FF","8013F4E5 0013","8013F4E7 00FF","8013F4E9 0014","8013F4EB 00FF","8013F4ED 0015","8013F4EF 00FF","8013F4F1 0016","8013F4F3 00FF","8013F4F5 0017","8013F4F7 00FF","8013F4F9 0018","8013F4FB 00FF","8013F4FD 0019","8013F4FF 00FF","8013F501 001A","8013F503 00FF","8013F505 001B","8013F507 00FF","8013F509 001C","8013F50B 00FF","8013F50D 001D","8013F50F 00FF","8013F511 001E","8013F513 00FF","8013F515 001F","8013F517 00FF","8013F519 0020","8013F51B 00FF","8013F529 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113F53C 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113F6D8 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113F874 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113FA10 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013F555 00FF","8013F557 00FF","8013F559 00FF","8013F55B 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013F6F1 00FF","8013F6F3 00FF","8013F6F5 00FF","8013F6F7 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013F88D 00FF","8013F88F 00FF","8013F891 00FF","8013F893 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013FA29 00FF","8013FA2B 00FF","8013FA2D 00FF","8013FA2F 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013F55D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013F2E9 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013F485 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013F621 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013F55F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013F2EB 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013F487 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013F623 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113F52C ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113F6C8 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113F864 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113FA00 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113F52C FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113F2B8 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113F454 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113F5F0 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8113F533 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113F6CE ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113F86A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113FA06 ????"],"options":{"Off":"0000","On":"03FF"}}},"9B500E8E-E90550B3-C:50":{"Have All Guns In Chest":{"note":"","data":["50000E04 0100","810E59F4 05FF"],"options":null},"Have All Main Items In Chest":{"note":"If you want items that are not listed in the Chest, then just use the Have Item On Slot Select code to have what you desire.","data":["810E5A2C 17FF","810E5A30 1EFF","810E5A34 1FFF","810E5A38 23FF","50000404 0100","810E5A3C 25FF","810E5A4C 2AFF","810E5A50 2BFF","50000304 0100","810E5A54 2EFF","50000F04 0100","810E5A60 32FF","810E5A9C 43FF","50000504 0100","810E5AA0 47FF","50000404 0100","810E5AB4 53FF","50000C04 0100","810E5AC4 58FF"],"options":null},"Have\\Fine Condition Always":{"note":"","data":["810DDEE4 0000"],"options":null},"Have\\Item On Slot Select\\Slot 01":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59C8 00??","800E59C9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 02":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59CC 00??","800E59CD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 03":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59D0 00??","800E59D1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 04":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59D4 00??","800E59D5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 05":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59D8 00??","800E59D9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 06":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59DC 00??","800E59DD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 07":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59E0 00??","800E59E1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 08":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59E4 00??","800E59E5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 09":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59E8 00??","800E59E9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 10":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59EC 00??","800E59ED 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Infinite\\Health":{"note":"","data":["810DDE22 00C8"],"options":null},"Infinite\\Time":{"note":"","data":["800E57BF 0010"],"options":null},"Play As":{"note":"This allows you to select what character you wish to play as. Just slect on load and select as normal at the menu and when in game you will be the character of your choice","data":["810DDC38 ????"],"options":{"Ada (can crash the game)":"0E80","Cheryl":"0F80","Claire Original":"0380","Claire as Biker":"0980","Claire without jacket":"0780","Claires body Leons outfit":"0B80","Hunk (can crash the game)":"0C80","Leon Original":"0280","Leon Wounded":"0680","Leon as Biker":"0A80","Leon as Stars":"0880","To Fu":"0D80"}},"Play Extra Mission":{"note":"This allows you to select what extra mission you wish to play. Just slect on load and carry on as normal at the menu and when in game you will be the character of your choice Do not use at the same time as [Resident Evil 2 Mode]","data":["810DDBEE 00??"],"options":{"The 4th Survior":"48","To-Fu":"49"}},"Quick Chest Access":{"note":"With this code, all you have to do to access the chest, is hold L and Press Start.","data":["D1014FA4 0020","81122598 0100"],"options":null},"Quick Save Access":{"note":"(1 Anytime, anywhere, press Z and B at the same time. You'll get the standard typewriter text: \"It's an old typewriter. You can save your progress with this.\" Note that you must, of course, have an ink ribbon to save. 2) Choose \"Yes\" and you'll be able to save normally. Instead of the location name, your save file will say \"Scenario 1st\" or \"Scenario 2nd.\" 3) When you load your save file, you'll have to skip through the intro, but when the game loads up you'll be exactly where you saved!","data":["D1014FA4 6000","810E5428 8007","D1014FA4 6000","810E542A 0E30"],"options":null},"[Saves Always 0]":{"note":"No matter how many saves you do ithis makes the game think you Have\\not saved.","data":["810E8B50 0000"],"options":null}},"9C40016E-63BFFE91-C:4A":{"All Bonus Buildings":{"note":"","data":["8123D22A 0007","8123D21C 000F","81155BF8 03FF","81157A6C 0004"],"options":null},"Infinite Money":{"note":"","data":["8123D190 05F5","8123D192 E0FF"],"options":null},"Unlock All Scenarios":{"note":"","data":["810DD938 FFFF"],"options":null}},"9C663069-80F24A80-C:50":{"Lower Left Character\\Coin Options":{"note":"","data":["800FFB09 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800DDD1A 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800FFB0C 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["800FFB39 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800DDD5E 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800FFB3C 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Mini Game\\Max 99 Coins":{"note":"","data":["800FFF61 0063"],"options":null},"Mini Game\\Unlimited 99 lives":{"note":"","data":["800FFF58 0063"],"options":null},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["800FFAA9 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800DDC92 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800FFAAC 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["800FFAD9 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800DDCD6 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800FFADC 00??"],"options":{"0 Stars":"00","99 Stars":"64"}}},"9C7318D2-24AE0DC1-C:4A":{"Access All\\Cars":{"note":"","data":["8002CA97 000B"],"options":null},"Access All\\Difficulties":{"note":"","data":["8002CA9B 0004"],"options":null},"Access All\\Multiplayer Levels":{"note":"","data":["50000901 0000","8002CAA0 0001"],"options":null},"Access All\\Tracks":{"note":"","data":["8002CA93 0006"],"options":null},"Access In-Game Cheats":{"note":"","data":["50001301 0000","8002CAA8 0001"],"options":null},"Damage Select":{"note":"","data":["8002C833 00??"],"options":{"Double":"02","Half":"01","Normal":"00","Triple":"03"}},"Health Select":{"note":"","data":["8002C81F 00??"],"options":{"Bad Only":"02","Good Only":"01","Normal":"00","Off":"03"}},"Infinite Continues":{"note":"","data":["8002C6F7 0064"],"options":null},"Low Timer":{"note":"","data":["81025874 3001"],"options":null},"Power-Up Select":{"note":"","data":["8002C81B 00??"],"options":{"?":"05","Health":"06","Invincible":"07","Mines":"01","Nitros":"04","Normal":"00","Off":"08","Rockets":"02","Stealer":"03"}},"Radar":{"note":"","data":["8002C82F 00??"],"options":{"Off":"01","On":"00"}},"Speed units\\Kph or Mph":{"note":"","data":["81025908 ????"],"options":{"Kph":"0100","Mph":"0001"}},"View Mode Select?":{"note":"","data":["8002C82B 00??"],"options":{"Fisheye":"03","Flip":"02","Fog":"01","Normal":"00"}},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\01 Coventry Cove":{"note":"","data":["8036B243 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\02 Mount Mayhem":{"note":"","data":["80351283 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\03 Inferno Isle":{"note":"","data":["80364153 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\04 Sunset Sands":{"note":"","data":["8034242B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\05 Metro Madness":{"note":"","data":["8035CAFB 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\06 Wicked Woods":{"note":"","data":["80354A33 0064"],"options":null}},"9C8FB2FA-9B84A09B-C:45":{"Have All Pikachus Magnemites":{"note":"","data":["801183BC 0000","801183BD 0000","801183BE 0000"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 1":{"note":"","data":["81285A18 03E7"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 2":{"note":"","data":["81286438 03E7"],"options":null},"Pokemon\\Inf Spells\\Player 1":{"note":"","data":["810AE580 FFFF","810AE582 FFFF","810AE5D4 FFFF","810AE5D6 FFFF","810AE628 FFFF","810AE62A FFFF"],"options":null},"Pokemon\\Inf Spells\\Player 2":{"note":"","data":["810AE79C FFFF","810AE79E FFFF","810AE7F0 FFFF","810AE7F2 FFFF","810AE844 FFFF","810AE846 FFFF"],"options":null},"Pokemon\\Max HP\\Player 1":{"note":"","data":["810AE586 03E7","810AE5DA 03E7","810AE62E 03E7"],"options":null},"Pokemon\\Max HP\\Player 2":{"note":"","data":["810AE7A2 03E7","810AE7F6 03E7","810AE84A 03E7"],"options":null},"Ultimate Code":{"note":"what's so ultimate about this code is it raises your Pokemon to its full potential. Even at Level 100, most Pokemon still have a way to go to raise their stats to the max. But with this code, you can instantly boost any Pokemon to its greatest potential!!!","data":["81171F3C FF01","81171F3E FF01","81171F40 FF01","81171F42 FF01","81171F44 FF01"],"options":null}},"9C961069-F5EA488D-C:4A":{"Player 1 Health":{"note":"If you select the Low option, It will give your opponent an easy win over over you","data":["8110CF68 ????"],"options":{"Low":"4220","Max":"0000"}},"Player 2 Health":{"note":"If you select the Low option, It will give your opponent an easy win over over you","data":["8110CF6C ????"],"options":{"Low":"4220","Max":"0000"}}},"9CAB6AEA-87C61C00-C:45":{"Boots Of Speed Select\\Player 1":{"note":"","data":["8113DB58 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113DCF4 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113DE90 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113E02C ????"],"options":{"Off":"0000","On":"03FF"}},"Enable Cheat Menu":{"note":"","data":["80136773 0005","81136696 FFFF"],"options":null},"Have All\\Armour":{"note":"","data":["8013DAB1 0019","8013DAB5 0014","8013DAB9 0014","8013DABD 0014"],"options":null},"Have All\\Items And Artifacts":{"note":"","data":["8013DAC1 0001","8013DAC3 00FF","8013DAC5 0002","8013DAC7 00FF","8013DAC9 0003","8013DACB 00FF","8013DACD 0004","8013DACF 00FF","8013DAD1 0005","8013DAD3 00FF","8013DAD5 0006","8013DAD7 00FF","8013DAD9 0007","8013DADB 00FF","8013DADD 0008","8013DADF 00FF","8013DAE1 0009","8013DAE3 00FF","8013DAE5 000A","8013DAE7 00FF","8013DAE9 000B","8013DAEB 00FF","8013DAED 000C","8013DAEF 00FF","8013DAF1 000D","8013DAF3 00FF","8013DAF5 000E","8013DAF7 00FF","8013DAF9 000F","8013DAFB 00FF","8013DAFD 0010","8013DAFF 00FF","8013DB01 0011","8013DB03 00FF","8013DB05 0012","8013DB07 00FF","8013DB09 0013","8013DB0B 00FF","8013DB0D 0014","8013DB0F 00FF","8013DB11 0015","8013DB13 00FF","8013DB15 0016","8013DB17 00FF","8013DB19 0017","8013DB1B 00FF","8013DB1D 0018","8013DB1F 00FF","8013DB21 0019","8013DB23 00FF","8013DB25 001B","8013DB27 00FF","8013DB29 001C","8013DB2B 00FF","8013DB2D 001D","8013DB2F 00FF","8013DB31 001E","8013DB33 00FF","8013DB35 001F","8013DB37 00FF","8013DB39 0020","8013DB3B 00FF","8013DB49 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113DB5C 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113DCF8 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113DE94 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113E030 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013DB75 00FF","8013DB79 00FF","8013DB7B 00FF","8013DB77 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013DD11 00FF","8013DD13 00FF","8013DD15 00FF","8013DD17 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013DEAD 00FF","8013DEAF 00FF","8013DEB1 00FF","8013DEB3 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013E049 00FF","8013E04B 00FF","8013E04D 00FF","8013E04F 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013DB7D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013DD19 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013DEB5 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013E051 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013DB7F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013DD1B 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013DEB7 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013E053 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113DB4C ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113DCE8 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113DE84 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113E020 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113DB4C FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113DCE8 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113DE84 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113E020 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8113DB53 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113DCEE ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113DE8A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113E026 ????"],"options":{"Off":"0000","On":"03FF"}}},"9CCE5B1D-6351E283-C:00":{"Invaders\\Have Infinite 99 Credits":{"note":"","data":["802C40AB 0099"],"options":null},"Invaders\\Have Infinite Max Lives":{"note":"","data":["802C41BF 0008"],"options":null}},"9CE02E22-206EF1B0-C:4A":{"1 Lap To Race":{"note":"In Single and Chapionship Modes use the Laps In Race Cheat or use the in game setting to choose how many laps you want per race and them use this cheat and amount of Laps to have only have 1 left if needed.","data":["80098A5D 00??"],"options":{"12 of 12 Laps":"0C","15 of 15 Laps":"0F","18 of 18 Laps":"12","21 of 21 Laps":"15","24 of 24 Laps":"18","27 of 27 Laps":"1B","3 of 3 Laps":"03","30 of 30 Laps":"1E","6 of 6 Laps":"06","9 of 9 Laps":"09"}},"Always 1st Place":{"note":"","data":["81098A58 0001"],"options":null},"Car Select":{"note":"","data":["800C50B1 00??"],"options":{"Car 1":"00","Car 10":"09","Car 11":"0A","Car 12":"0B","Car 13":"0C","Car 14":"0D","Car 15":"0E","Car 16":"0F","Car 17":"10","Car 18":"11","Car 2":"01","Car 3":"02","Car 4":"03","Car 5":"04","Car 6":"05","Car 7":"06","Car 8":"07","Car 9":"08"}},"Freeze\\Lap Timer":{"note":"Single and Chapionship Race Modes","data":["800967E5 0000","800967E7 0000"],"options":null},"Freeze\\Pit Timer":{"note":"Single and Chapionship Race Modes","data":["800968A5 0000","800968A7 0000"],"options":null},"Freeze\\Timer Challenge Timer":{"note":"Timer Challenge","data":["800C4F87 0050"],"options":null},"Laps\\In Race\\Chapionship Race Mode":{"note":"","data":["800C4ED3 00??"],"options":{"12 Laps In Race":"0C","15 Laps In Race":"0F","18 Laps In Race":"12","21 Laps In Race":"15","24 Laps In Race":"18","27 Laps In Race":"1B","3 Laps In Race":"03","30 Laps In Race":"1E","6 Laps In Race":"06","9 Laps In Race":"09"}},"Laps\\In Race\\Single Race Mode":{"note":"","data":["800C4ED1 00??"],"options":{"12 Laps In Race":"0C","15 Laps In Race":"0F","18 Laps In Race":"12","21 Laps In Race":"15","24 Laps In Race":"18","27 Laps In Race":"1B","3 Laps In Race":"03","30 Laps In Race":"1E","6 Laps In Race":"06","9 Laps In Race":"09"}},"Pit Stops\\Championship":{"note":"","data":["800C4F13 00??"],"options":{"Off":"00","On":"01"}},"Pit Stops\\Single Race Mode":{"note":"","data":["800C4F11 00??"],"options":{"Off":"00","On":"01"}},"Track Direction\\Championship":{"note":"","data":["800C4EF3 00??"],"options":{"Normal":"00","Reverse":"01"}},"Weather\\Championship":{"note":"","data":["800C4F33 00??"],"options":{"Dry":"00","Night":"03","Wet":"01"}},"Weather\\Single Race Mode":{"note":"","data":["800C4F31 00??"],"options":{"Dry":"00","Night":"03","Wet":"01"}}},"9D7E3C4B-E60F4A6C-C:4A":{"Have All Weapons":{"note":"","data":["811ED1E2 FFFF"],"options":null},"Infinite\\Ammo (All Weapons)":{"note":"","data":["8125E330 A05B"],"options":null},"Infinite\\Armor":{"note":"","data":["801ED273 0064"],"options":null},"Infinite\\Experience":{"note":"","data":["801ED253 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["801ED251 0064"],"options":null},"Max\\Acro":{"note":"","data":["801ED25B 0007"],"options":null},"Max\\Attack":{"note":"","data":["801ED257 0007"],"options":null},"Max\\Power":{"note":"","data":["801ED25D 0007"],"options":null},"Max\\Speed":{"note":"","data":["801ED259 0007"],"options":null},"Max\\Vitality":{"note":"","data":["801ED255 0007"],"options":null}},"9E330C01-8C0314BA-C:45":{"Enable Battle Mode And Levels":{"note":"","data":["8008ED6E 0012"],"options":null},"GS Button For 255 Spare0 Missiles":{"note":"","data":["8814E648 00FF"],"options":null},"Gore Mode":{"note":"","data":["8008ED67 0012"],"options":null},"Infinite Lives":{"note":"","data":["8004013C 0005"],"options":null},"Infinite Shields":{"note":"","data":["D014E5E2 0011","8114E5E0 1000"],"options":null}},"9E8FCDFA-49F5652B-C:45":{"Player 1\\1-Hit Death":{"note":"","data":["D01D3484 0078","801D3484 0001"],"options":null},"Player 1\\Fast\\Jump Walk":{"note":"","data":["801D347C 0001"],"options":null},"Player 1\\Fast\\Punch Kick":{"note":"","data":["801D347E 0010"],"options":null},"Player 1\\Fight Gargos Immediately":{"note":"","data":["8012834B 000A"],"options":null},"Player 1\\Fulgore\\Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3478 0020","801D3479 0090","801D34C5 0092","801D3527 005E"],"options":null},"Player 1\\Fulgore\\Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3478 0023","801D3479 00F0","801D34C5 0080","801D3527 00AF"],"options":null},"Player 1\\Infinite Energy":{"note":"","data":["801D3484 0069"],"options":null},"Player 1\\Play As":{"note":"","data":["802C8CB8 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 1\\Slow Jump Walk":{"note":"","data":["801D347D 0050"],"options":null},"Player 1\\Spinal Always Has All Skulls":{"note":"","data":["801D3523 0006"],"options":null},"Player 1\\Undefeated Players Scroll By Quickly":{"note":"","data":["802C8CE8 0007"],"options":null},"Player 1\\Untouchable":{"note":"","data":["801D34D4 000A"],"options":null},"Player 1\\Wins Score":{"note":"","data":["8012830A 00FF"],"options":null},"Player 2\\Fast\\Jump Walk":{"note":"","data":["801D357C 0001"],"options":null},"Player 2\\Fast\\Punch Kick":{"note":"","data":["801D357E 0010"],"options":null},"Player 2\\Fulgore Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3578 0020","801D3579 0090","801D35C5 0092","801D3527 005E"],"options":null},"Player 2\\Fulgore Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3578 0023","801D3579 00F0","801D35C5 0080","801D3527 00AF"],"options":null},"Player 2\\Infinite Energy":{"note":"","data":["801D3584 0078"],"options":null},"Player 2\\Play As":{"note":"","data":["8004EA9D 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 2\\Slow\\Jump Walk":{"note":"","data":["801D357D 0050"],"options":null},"Player 2\\Slow\\Punch Kick":{"note":"","data":["801D357F 0050"],"options":null},"Player 2\\Spinal Always Has All Skulls":{"note":"","data":["801D3623 0006"],"options":null},"Player 2\\Untouchable":{"note":"","data":["801D34D5 000A"],"options":null},"Unlock All Options":{"note":"","data":["8012834C 0006"],"options":null}},"9E8FE2BA-8B270770-C:45":{"Player 1\\1-Hit Death":{"note":"","data":["D01D3484 0078","801D3484 0001"],"options":null},"Player 1\\Fast\\Jump Walk":{"note":"","data":["801D347C 0001"],"options":null},"Player 1\\Fast\\Punch Kick":{"note":"","data":["801D347E 0010"],"options":null},"Player 1\\Fight Gargos Immediately":{"note":"","data":["8012834B 000A"],"options":null},"Player 1\\Fulgore\\Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3478 0020","801D3479 0090","801D34C5 0092","801D3527 005E"],"options":null},"Player 1\\Fulgore\\Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3478 0023","801D3479 00F0","801D34C5 0080","801D3527 00AF"],"options":null},"Player 1\\Infinite Energy":{"note":"","data":["801D3484 0069"],"options":null},"Player 1\\Play As":{"note":"","data":["802C8CB8 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 1\\Slow Jump Walk":{"note":"","data":["801D347D 0050"],"options":null},"Player 1\\Spinal Always Has All Skulls":{"note":"","data":["801D3523 0006"],"options":null},"Player 1\\Undefeated Players Scroll By Quickly":{"note":"","data":["802C8CE8 0007"],"options":null},"Player 1\\Untouchable":{"note":"","data":["801D34D4 000A"],"options":null},"Player 1\\Wins Score":{"note":"","data":["8012830A 00FF"],"options":null},"Player 2\\Fast\\Jump Walk":{"note":"","data":["801D357C 0001"],"options":null},"Player 2\\Fast\\Punch Kick":{"note":"","data":["801D357E 0010"],"options":null},"Player 2\\Fulgore Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3578 0020","801D3579 0090","801D35C5 0092","801D3527 005E"],"options":null},"Player 2\\Fulgore Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3578 0023","801D3579 00F0","801D35C5 0080","801D3527 00AF"],"options":null},"Player 2\\Infinite Energy":{"note":"","data":["801D3584 0078"],"options":null},"Player 2\\Play As":{"note":"","data":["8004EA9D 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 2\\Slow\\Jump Walk":{"note":"","data":["801D357D 0050"],"options":null},"Player 2\\Slow\\Punch Kick":{"note":"","data":["801D357F 0050"],"options":null},"Player 2\\Spinal Always Has All Skulls":{"note":"","data":["801D3623 0006"],"options":null},"Player 2\\Untouchable":{"note":"","data":["801D34D5 000A"],"options":null},"Unlock All Options":{"note":"","data":["8012834C 0006"],"options":null}},"9EA95858-AF72B618-C:45":{"Infinite Coins Main Menu":{"note":"","data":["810F8CD2 FFFF"],"options":null},"Lower Left Char\\Item On Pick-Up":{"note":"","data":["800FD341 00??"],"options":{"Boo Bell":"07","Bowser Bomb":"03","Bowser Suit":"08","Dueling Glove":"04","Golden Mushroom":"06","Magic Lamp":"09","Mushroom":"00","Plunder Chest":"02","Skeleton Key":"01","Warp Block":"05"}},"Lower Left Char\\Rolls 10":{"note":"","data":["800DF55D 000A"],"options":null},"Lower Right Char\\Item On Pick-Up":{"note":"","data":["800FD375 00??"],"options":{"Boo Bell":"07","Bowser Bomb":"03","Bowser Suit":"08","Dueling Glove":"04","Golden Mushroom":"06","Magic Lamp":"09","Mushroom":"00","Plunder Chest":"02","Skeleton Key":"01","Warp Block":"05"}},"Lower Right Char\\Rolls 10":{"note":"","data":["800DF5A9 000A"],"options":null},"Upper Left Char\\Item On Pick-Up":{"note":"","data":["800FD2D9 00??"],"options":{"Boo Bell":"07","Bowser Bomb":"03","Bowser Suit":"08","Dueling Glove":"04","Golden Mushroom":"06","Magic Lamp":"09","Mushroom":"00","Plunder Chest":"02","Skeleton Key":"01","Warp Block":"05"}},"Upper Left Char\\Rolls 10":{"note":"","data":["800DF4C5 000A"],"options":null},"Upper Right Char\\Item On Pick-Up":{"note":"","data":["800DF30D 00??"],"options":{"Boo Bell":"07","Bowser Bomb":"03","Bowser Suit":"08","Dueling Glove":"04","Golden Mushroom":"06","Magic Lamp":"09","Mushroom":"00","Plunder Chest":"02","Skeleton Key":"01","Warp Block":"05"}},"Upper Right Char\\Rolls 10":{"note":"","data":["800DF511 000A"],"options":null}},"9F1ECAF0-EEC48A0E-C:4A":{"Infinite Energy\\Player 1":{"note":"","data":["800AC339 00??"],"options":{"Max":"40","None":"00"}},"Infinite Energy\\Player 2":{"note":"","data":["800AC429 00??"],"options":{"Max":"3F","None":"00"}},"Infinite Match Time":{"note":"","data":["800AB433 0000"],"options":null},"Super Attacks\\Player 1":{"note":"","data":["800AC33D 00??"],"options":{"3":"03","None":"00"}},"Super Attacks\\Player 2":{"note":"","data":["800AC42D 00??"],"options":{"3":"03","None":"00"}},"Unlock Extras":{"note":"","data":["800ACA05 00FF","800ACA07 00FF"],"options":null}},"9F5BF79C-D2FE08A0-C:45":{"Debug Mode":{"note":"","data":["8006C4C2 0001"],"options":null},"Have\\All Keys":{"note":"","data":["801639E9 000F"],"options":null},"Have\\All Weapons":{"note":"","data":["801639EB 007F"],"options":null},"Have\\Quad Damage":{"note":"","data":["8116397C 42C8"],"options":null},"Have\\Ring of Shadows":{"note":"","data":["811639E8 ????"],"options":{"Off":"0000","On":"42C8"}},"Infinite\\Ammo":{"note":"","data":["50000402 0000","80163A2D 0064","50000402 0000","81163A2C 03E7"],"options":null},"Infinite\\Armor":{"note":"","data":["81163944 42C8"],"options":null},"Infinite\\Bio Suit":{"note":"","data":["81163980 42C8"],"options":null},"Infinite\\Health":{"note":"","data":["81163930 42C8"],"options":null},"Multi\\Have All Weapons\\Player 1":{"note":"","data":["8016634B 007F"],"options":null},"Multi\\Have All Weapons\\Player 2":{"note":"","data":["8016661B 007F"],"options":null},"Multi\\Infinite Ammo\\Player 1":{"note":"","data":["50000402 0000","8116638C 03E7"],"options":null},"Multi\\Infinite Ammo\\Player 2":{"note":"","data":["50000402 0000","8116665C 03E7"],"options":null},"Multi\\Infinite Armor\\Player 1":{"note":"","data":["811662A4 42C8"],"options":null},"Multi\\Infinite Armor\\Player 2":{"note":"","data":["81166574 42C8"],"options":null},"Multi\\Infinite Bio Suit\\Player 1":{"note":"","data":["811662E0 42C8"],"options":null},"Multi\\Infinite Bio Suit\\Player 2":{"note":"","data":["811665B0 42C8"],"options":null},"Multi\\Infinite Health\\Player 1":{"note":"","data":["81166290 42C8"],"options":null},"Multi\\Infinite Health\\Player 2":{"note":"","data":["81166560 42C8"],"options":null},"Rapid Fire":{"note":"","data":["D00CA9E0 0020","8016396D 0001"],"options":null}},"9F8926A5-0587B409-C:50":{"10x Trick Multiplier":{"note":"","data":["800D60FE 0001"],"options":null},"Access All gold medals":{"note":"Also opens San Francisco \u0026 Downtown Minneapolis","data":["50000C14 0000","800DEA03 00FF","50000C14 0000","800DEA06 00FF","50000C14 0000","800DEA08 00FF"],"options":null},"Access all Levels,tapes,boards \u0026 Officer Dick":{"note":"","data":["50000C14 0000","800DE9FC 001E"],"options":null},"Max\\Air":{"note":"","data":["800D62DC 00FF"],"options":null},"Max\\Balance":{"note":"","data":["800D62DF 00FF"],"options":null},"Max\\Speed":{"note":"","data":["800DE83A 0001"],"options":null},"Max\\Turning":{"note":"","data":["800D6220 00FF"],"options":null}},"9FD375F8-45F32DC8-C:50":{"Access All Ticket Switches \u0026 Vehicles":{"note":"","data":["800A5E1F 0001","50002004 0000","810A5D70 FFFF"],"options":null},"Activate All In-Game Cheats":{"note":"With this code on, all rocket's abilities are now max","data":["810A6846 F5FF"],"options":null},"Infinite \u0026 Max Health":{"note":"","data":["8109FB82 000C","8109FB84 000A"],"options":null}},"9FE6162D-E97E4037-C:4A":{"All 52 Gold Gems Collected":{"note":"","data":["8016EA30 0003","8016EA31 007E","8016EA32 00FF","8016EA33 00EF","8016EA34 00FF","8016EA35 007F","8016EA36 00FF","8016EA37 00FC"],"options":null},"All Stages \u0026 Chapters Unlocked":{"note":"","data":["8016EA38 003B"],"options":null},"Infinite\\Health\\Marina":{"note":"","data":["810ECAD0 03E8"],"options":null},"Infinite\\Health\\Teran":{"note":"","data":["810F1750 03E8"],"options":null},"Infinite\\Max Red Gems":{"note":"","data":["81175056 270F"],"options":null},"Level Select":{"note":"To access this anytime during game, press L+R+Z to enable the menu. Press D-Pad Up / Down to move through the menu, D-Pad Left / Right to change level digits and then press Start to enter level. Don not do this whhile in pause mode (Start Button Pause) or the game will freeze.","data":["D10BC208 2030","800BC201 0004"],"options":null}},"9FF69D4F-195F0059-C:50":{"Easy Difficulty level":{"note":"","data":["800AD243 0000"],"options":null},"Fast Run":{"note":"","data":["8009B14F 0003"],"options":null},"Infinite Lives":{"note":"","data":["8109B0EE 03E7","810AD24E 03E7"],"options":null},"Level select":{"note":"Set Up In Menu","data":["81076FB6 6F74"],"options":null},"Rapid fire":{"note":"","data":["8009B15F 0003"],"options":null},"Speed level 1 Slow":{"note":"","data":["800AD247 0000"],"options":null}},"A03CF036-BCC1C5D2-C:50":{"Don't Hurt Mario\\Falling":{"note":"Press L to levitate \u0026 Let go to land","data":["8036CF6C 00E8","8136CEB8 FFFF"],"options":null},"Don't Hurt Mario\\Monsters":{"note":"","data":["80309457 0001"],"options":null},"Funny Mario Options\\Mario Walks On Water":{"note":"","data":["802A6204 0800","802A6206 0024","81000090 3C04","81000092 8034","81000094 8484","81000096 B1E6","81000098 4484","8100009A 3000","810000A0 4680","810000A2 3120","810000A4 4604","810000A6 903C","810000AC 4500","810000AE 0002","810000B4 4600","810000B6 2486","810000B8 080E","810000BA 05DB","810000BC E712"],"options":null},"Funny Mario Options\\Mario's Cap\\Off \u0026 in His Hand":{"note":"Here you can Choose Options with Mario with His Cap off \u0026 in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["80309437 00??"],"options":{"Cap In Hand":"20","Flying Mario Cap In Hand":"28","Invisible Mario Cap In Hand":"22","Invisible Metal Mario Cap In Hand":"26","Metal Mario Cap In Hand":"24"}},"Funny Mario Options\\Mario's Cap\\On \u0026 An Extra in His Hand":{"note":"Here you can Choose Options with Mario with His Cap on \u0026 An Extra in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["80309437 00??"],"options":{"Cap In Hand":"30","Flying Mario Cap In Hand":"38","Invisible Mario Cap In Hand":"32","Invisible Metal Mario Cap In Hand":"36","Metal Mario Cap In Hand":"34"}},"Have\\Debug Mode":{"note":"","data":["A02F9748 00??"],"options":{"Off":"00","On":"01"}},"Have\\Level Select":{"note":"","data":["A02F973C 0001"],"options":null},"Infinite\\Energy \u0026 Breath":{"note":"","data":["803094DE 0008"],"options":null},"Infinite\\Lives":{"note":"","data":["803094DD 0064"],"options":null},"Mario's Cap\\Off Options":{"note":"Here you can Choose Options with Mario without His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["80309437 00??"],"options":{"Flying Mario":"08","Invisible Flying Mario":"0A","Invisible Mario":"02","Invisible Metal Flying Mario":"0F","Mario No Cap":"01","Metal Flying Mario":"0D","Metal Mario":"04"}},"Mario's Cap\\On Options":{"note":"Here you can Choose Options with Mario with His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["80309437 00??"],"options":{"Flying Mario":"19","Invisible Mario":"12","Invisible Metal Mario":"16","Metal Mario":"15"}},"Press GS For 255 Coins":{"note":"","data":["893094D8 00FF"],"options":null},"[Slot A Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80202F23 0001","80202F0B 00C7","50001101 0000","80202F0C 00FF"],"options":null},"[Slot A Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80202F25 0064"],"options":null},"[Slot A Codes]\\Have All\\key doors unlocked (and mote empty)":{"note":"","data":["80202F0A 007E"],"options":null},"[Slot B Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80202F93 0001","80202F7B 00C7","50001101 0000","80202F7C 00FF"],"options":null},"[Slot B Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80202F95 0064"],"options":null},"[Slot B Codes]\\Have All\\key doors unlocked (and mote empty)":{"note":"","data":["80202F7A 007E"],"options":null},"[Slot C Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80203003 0001","80202FEB 00C7","50001101 0000","80202FEC 00FF"],"options":null},"[Slot C Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80203005 0064"],"options":null},"[Slot C Codes]\\Have All\\key doors unlocked (and mote empty)":{"note":"","data":["80202FEA 007E"],"options":null},"[Slot D Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80203073 0001","8020305B 00C7","50001101 0000","8020305C 00FF"],"options":null},"[Slot D Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80203075 0064"],"options":null},"[Slot D Codes]\\Have All\\key doors unlocked (and mote empty)":{"note":"","data":["8020305A 007E"],"options":null}},"A08D0F77-6F82E38C-C:45":{"(Tap L Twice) To Skip Intro":{"note":"On game start up, as soon as you see the N64 Logo, Tap the L Button twice letting go eachtime.","data":["D00A6289 0020","800A679F 0024"],"options":null},"Access Multiplayer mode setup menu":{"note":"Enables bypassing the lock by pressing Left on the D-Pad to access character select on the only locked map in Deathmatch: Temple.","data":["D00D1054 0001","800D0B60 0002"],"options":null},"Bypass locked menu":{"note":"","data":["800D0BD3 00??"],"options":{"Chapters":"02","Options":"01"}},"Enable Unused Cheats\\BAPHOMETSVAN":{"note":"Unlock cavemen in multiplayer.","data":["800DE623 0080"],"options":null},"Enable Unused Cheats\\BEEFCURTAINS":{"note":"Unlock zombies in multiplayer.","data":["800DE622 0001"],"options":null},"Enable Unused Cheats\\BEELZEBUBSBUM":{"note":"\"Hitler\" Easter egg.","data":["800DE623 0004"],"options":null},"Enable Unused Cheats\\BILLYMILLROUNDABOUT":{"note":"Unlock Gregg in multiplayer.","data":["800DE621 0002"],"options":null},"Enable Unused Cheats\\BOVRILBULLETHOLE":{"note":"Conker with caveman afro.","data":["800DE622 0002"],"options":null},"Enable Unused Cheats\\DRACULASTEABAGS":{"note":"Conker with caveman mohawk.","data":["800DE622 0004"],"options":null},"Enable Unused Cheats\\DUTCHOVENS":{"note":"Conker with caveman spiky hair.","data":["800DE622 0008"],"options":null},"Enable Unused Cheats\\EASTEREGGSRUS":{"note":"Unlock Neo Conker in multiplayer.","data":["800DE623 0010"],"options":null},"Enable Unused Cheats\\KOJACKSROLLNECK":{"note":"1 Player Multiplayer Resolution Option.","data":["800DE622 0010"],"options":null},"Enable Unused Cheats\\NUTBINGCOEDS":{"note":"Unlock weasel guard in multiplayer.","data":["800DE623 0040"],"options":null},"Enable Unused Cheats\\RUSTYSHERIFFSBADGE":{"note":"Unlock Squirrel Sergeant and Tediz Leader in multiplayer.","data":["800DE621 0001"],"options":null},"Enable Unused Cheats\\SPUNKJOCKEY":{"note":"Slow motion kills with katana/chainsaw.","data":["800DE623 0008"],"options":null},"Enable Unused Cheats\\WELDERSBENCH":{"note":"Unlock all chapters.","data":["800DE622 0080"],"options":null},"Enable Unused Cheats\\WELLYTOP":{"note":"Unlock Conker in multiplayer.","data":["800DE623 0020"],"options":null},"Infinite 99 Lives":{"note":"","data":["800B9B84 0063"],"options":null},"Infinite 99999 Cash":{"note":"","data":["810B9B88 270F"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["800BCFD7 0006"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["800B42CE 0006"],"options":null},"Infinite Health\\Player 3":{"note":"","data":["800B45F2 0006"],"options":null},"Infinite Health\\Player 4":{"note":"","data":["800B4916 0006"],"options":null},"Infinite Oxygen":{"note":"","data":["810B3E9A 0000"],"options":null},"Infinite Time in Multi":{"note":"","data":["810770DA 8C9E"],"options":null},"Map Warp":{"note":"","data":["800A679F 00??"],"options":{"Barn Boys interior - devoid of entities":"01","Barn boys outside, had a funny bug where Conker would hold money forever. Missing a lot of assets.":"0C","Bats tower. Lighting is different(?) Cannot do much since you spawn without the ability to swim underwater. Had a weird bug where all the cutscenes played.":"0B","Battery water helmet room? Can't tell as you can't swim, and you raise up into a warp that crashes the game.":"17","Beach multiplayer, You can fall off and die by exiting the turrets":"2B","Big, big guy boss fight. Map seems to be the same as final.":"0A","Black void":"05","Bluff cutscene area, devoid of anything":"37","Bugga the Knuts arena. Doesn't have much in it. Is the hole normally there?":"14","Bull boss fight - room has all the targets placed all in the middle, and lacks any other objects":"00","Bunker multiplayer, Teddiz symbols changed again":"34","CRASH":"3E","CRASHES GAME":"12","Capture the flag multiplayer. Teddiz symbol was changed.":"30","Causality Dept. Devoid of anything.":"2F","Cheese test room. Lacks textures":"0D","D-Day beach - lacks assets":"04","Don weasel cutscene map":"38","Dupe of above":"20","Experiment boss map, devoid of anything":"23","Fangy Test room.":"0F","First room inside the Tediz base. Devoid of Teddiz":"1B","First room where you encounter Rodent. Devoid of anything, really.":"1C","Fish test room":"03","Great Mighty Poo fight, devoid of anything":"35","Haybot/water raising room. Dying will play all the cutscenes but will crash. Enabling the expansion pack shows weird broken red eye textures":"10","Heist multiplayer map":"1A","Inside Wasps' hive. Devoid of anything.":"27","Inside the Poo Mountain cabin. Can't do much since there's no triggers/ability to escape.":"2C","Inside the Windmill?":"15","Lava race/mugged":"32","Matrix scene, devoid of anything":"36","Mrs catfish, lacks assets":"07","Multiplayer race":"33","N64 Chainsaw cutscene":"21","Outside the bank":"39","Panther King's throne":"18","Rock Solid. Devoid of anything":"31","Room after the bluff. No dinosaurs are present":"19","Second room of Matrix bank":"3A","Spooky Mansion inside":"3C","Spooky mansion outside, devoid of anything":"41","Tank test room":"16","Tanks multiplayer map. Seems to be an asset dump for weird villager sprites.":"24","Teddiz base toxic waste room. Is filled with water for unknown reasons":"28","Teddiz base turret room. Teddiz logo is different, as the turret sprite when using is is displaced (needs console proof this is a graphical error)":"26","Test room. Purpose unknown.":"1F","Uga Buga - cutscene where the caveman gets squashed":"02","Uga Bugga test room":"2A","Uga buga baby dinosaur room. Devoid of anything, and has some missing textures.":"43","Uga buga slime room, has some assets":"42","Upper floor of Teddiz Base UV and scripting issues. Devoid of almost anything":"1E","War plane crash area. Devoid of almost anything":"13","Windy at night":"3B","Windy, Ms bee is not present":"06","another test map":"25","dinosaur multiplayer":"3F","dying first time/meeting Gregg":"22","final boss arena. Exiting will lead you into the vault where you can moonjump and find the Alien in the Matrix vault.":"40","strange maze room. Has a switch, and a random grate.":"11","training":"29","training key room. Can't do much in here.":"2E"}},"Press L To Levitate\\Player 1":{"note":"","data":["D00D1055 0020","810B3E08 4200"],"options":null},"Restore Unused Title Screen":{"note":"Pressing Up on the D-Pad enables a semi-working version of a title screen","data":["D00D1054 0008","800D0D18 0002"],"options":null},"Start with Infinite 9 Granades or Bombs":{"note":"This works for all Players, including player 1 in story mode.","data":["800B9B70 0009"],"options":null}},"A150743E-CF2522CD-C:45":{"Have 99 Coins":{"note":"","data":["810BB10E 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C7A72 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BB0FC 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BB106 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BB10A 0009"],"options":null}},"A1B64A61-D014940B-C:50":{"Access All\\Cars":{"note":"","data":["8002CFF7 000B"],"options":null},"Access All\\Difficulties":{"note":"","data":["8002CFFB 0004"],"options":null},"Access All\\Multiplayer Levels":{"note":"","data":["50000901 0000","8002D000 0001"],"options":null},"Access All\\Tracks":{"note":"","data":["8002CFF3 0006"],"options":null},"Access In-Game Cheats":{"note":"","data":["50001301 0000","8002D008 0001"],"options":null},"Damage Select":{"note":"","data":["8002CD93 00??"],"options":{"Double":"02","Half":"01","Normal":"00","Triple":"03"}},"Health Select":{"note":"","data":["8002CD7F 00??"],"options":{"Bad Only":"02","Good Only":"01","Normal":"00","Off":"03"}},"Infinite Continues":{"note":"","data":["8002CC57 0064"],"options":null},"Low Timer":{"note":"","data":["81025DD4 3001"],"options":null},"Power-Up Select":{"note":"","data":["8002CD7B 00??"],"options":{"?":"05","Health":"06","Invincible":"07","Mines":"01","Nitros":"04","Normal":"00","Off":"08","Rockets":"02","Stealer":"03"}},"Radar":{"note":"","data":["8002CD8F 00??"],"options":{"Off":"01","On":"00"}},"Speed units\\Kph or Mph":{"note":"","data":["81025E68 ????"],"options":{"Kph":"0100","Mph":"0001"}},"View Mode Select?":{"note":"","data":["8002CD8B 00??"],"options":{"Fisheye":"03","Flip":"02","Fog":"01","Normal":"00"}},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\01 Coventry Cove":{"note":"","data":["8036A97B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\02 Mount Mayhem":{"note":"","data":["8034C65B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\03 Inferno Isle":{"note":"","data":["80364A53 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\04 Sunset Sands":{"note":"","data":["8033B4AB 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\05 Metro Madness":{"note":"","data":["8035E9E3 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\06 Wicked Woods":{"note":"","data":["80358E5B 0064"],"options":null}},"A1F51C25-16D61291-C:00":{"God Mode":{"note":"","data":["80774EB7 00??"],"options":{"Off":"00","On":"01"}}},"A24F4CF1-A82327BA-C:4A":{"Debug Mode":{"note":"","data":["80036FFB 0001"],"options":null},"Everything Unlocked\\Save File 1":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","81069A2E FFFF"],"options":null},"Everything Unlocked\\Save File 2":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8106996E FFFF"],"options":null},"Everything Unlocked\\Save File 3":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","81069A8E FFFF"],"options":null},"Everything Unlocked\\Save File 4":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","810699CE FFFF"],"options":null},"Have All Objectives Complete":{"note":"","data":["80037003 0001"],"options":null},"Infinite Ammo (All Levels)":{"note":"","data":["80079EAB 0001"],"options":null}},"A273AB56-DA33DB9A-C:45":{"In-Game Cheats\\Access Cheat menu":{"note":"","data":["50000504 0000","801012D8 0001"],"options":null},"In-Game Cheats\\Enable\\All Items":{"note":"To access simply pause in game play \u0026 then unpause.","data":["801012BC 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Invincibility":{"note":"","data":["802AAA68 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Monsters":{"note":"","data":["802AABDB 00??"],"options":{"Are Active":"00","Are Gone":"01"}},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5DD6 0064","812A5E1E 0064","812A5E2E 00C8","812A5E18 1900","812A5E1A 0640","812A5DE8 04B0","812A5DE8 0960","812A5DB8 0960"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Keys":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5DD3 000F"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000E01 0000","802A5E46 0001","50000E02 0000","812A5D8C 03E7"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Infinite Health (All Levels)":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on Single-Player, Co-Operative and DUKEMATCH, All Levels.","data":["8024CCE7 0064","802A5D89 0064"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A6162 0064","812A61AA 0064","812A61BA 00C8","812A61A4 1900","812A61A6 0640","812A6174 04B0","812A6174 0960","812A6144 0960"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000E01 0000","802A61D2 0001","50000E02 0000","812A6118 03E7"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on DUKEMATCH, All Levels.","data":["8024D073 0064","802A6115 0064"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A64EE 0064","812A6536 0064","812A6546 00C8","812A6530 1900","812A6532 0640","812A6500 04B0","812A6500 0960","812A64D0 0960"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000E01 0000","802A655E 0001","50000E02 0000","812A64A4 03E7"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 4 on DUKEMATCH, All Levels.","data":["8024D3FF 0064","802A64A1 0064"],"options":null},"Single-Player (All Levels)\\Have All\\Items \u0026 Infinite Use on all levels":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5A4A 0064","812A5A92 0064","812A5AA2 00C8","812A5A8C 1900","812A5A8E 0640","812A5A5C 04B0","812A5A5C 0960","812A5A2C 0960"],"options":null},"Single-Player (All Levels)\\Have All\\Keys":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5A47 000F"],"options":null},"Single-Player (All Levels)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000E01 0000","802A5ABA 0001","50000E02 0000","812A5A00 03E7"],"options":null},"Single-Player (All Levels)\\Have Infinite Health (All Levels)":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels and does what it says on the tin. Infinite health for player 1, All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["80247463 0064","8026EC5B 0064","802A59FD 0064"],"options":null}},"A292524F-3D6C2A49-C:45":{"Away Team\\Score":{"note":"","data":["8129195C ????"],"options":{"0 Points":"5008","00 Points":"C802","50 Points":"FA02","o Points":"0000"}},"Away Team\\Time Outs":{"note":"","data":["80291958 00??"],"options":{"Infinite":"07","None":"00"}},"Create A Player Codes\\Max 3 Point":{"note":"","data":["802C5EFC 0063"],"options":null},"Create A Player Codes\\Max Capaility":{"note":"","data":["802C5F02 0063"],"options":null},"Create A Player Codes\\Max Defensive":{"note":"","data":["802C5EFF 0063"],"options":null},"Create A Player Codes\\Max Free Throw":{"note":"","data":["802C5EFD 0063"],"options":null},"Create A Player Codes\\Max Offensive":{"note":"","data":["802C5EFE 0063"],"options":null},"Create A Player Codes\\Max Rebound":{"note":"","data":["802C5F00 0063"],"options":null},"Create A Player Codes\\Max Shooting":{"note":"","data":["802C5EFB 0063"],"options":null},"Create A Player Codes\\Max Techinque":{"note":"","data":["802C5F01 0063"],"options":null},"Home Team\\Score":{"note":"","data":["81290378 ????"],"options":{"0 Points":"5008","00 Points":"C802","50 Points":"FA02","o Points":"0000"}},"Home Team\\Time Outs Home":{"note":"","data":["80290374 00??"],"options":{"Infinite":"07","None":"00"}},"No Shot Clock":{"note":"","data":["812010C4 43FF"],"options":null}},"A2C54BE7-6719CBB2-C:50":{"Enable All Characters":{"note":"","data":["D02E4062 0000","802E4063 0004"],"options":null},"Have Max\\Powerups":{"note":"","data":["801CC2F3 0002"],"options":null},"Have Max\\Weapon Power-Up":{"note":"","data":["801CC2F7 0002"],"options":null},"Infinite\\Bullets":{"note":"For Henry","data":["801D5273 0006"],"options":null},"Infinite\\Gold":{"note":"","data":["811CC012 2710"],"options":null},"Infinite\\Health":{"note":"","data":["811CC00A 2710"],"options":null},"Infinite\\Health Young Henry":{"note":"","data":["D1191616 0010","8136E180 2800"],"options":null},"Infinite\\Items\\Crest Half A":{"note":"","data":["801CC02B 000A"],"options":null},"Infinite\\Items\\Crest Half B":{"note":"","data":["801CC02C 000A"],"options":null},"Infinite\\Items\\Cure Ampoule":{"note":"","data":["801CC01E 000A"],"options":null},"Infinite\\Items\\Healing Kit":{"note":"","data":["801CC01C 000A"],"options":null},"Infinite\\Items\\Magical Nitro":{"note":"","data":["801CC025 000A"],"options":null},"Infinite\\Items\\Mandragora":{"note":"","data":["801CC026 000A"],"options":null},"Infinite\\Items\\Moon Card":{"note":"","data":["801CC028 000A"],"options":null},"Infinite\\Items\\Oldrey's Diary":{"note":"","data":["801CC02A 000A"],"options":null},"Infinite\\Items\\Powerup":{"note":"","data":["801CC01F 000A"],"options":null},"Infinite\\Items\\Purifying":{"note":"","data":["801CC01D 000A"],"options":null},"Infinite\\Items\\Red Jewels":{"note":"","data":["801CC014 0068"],"options":null},"Infinite\\Items\\Roast Beef":{"note":"","data":["801CC01B 000A"],"options":null},"Infinite\\Items\\Roast Chicken":{"note":"","data":["801CC01A 000A"],"options":null},"Infinite\\Items\\Rose Brooch":{"note":"","data":["801CC02D 000A"],"options":null},"Infinite\\Items\\Sun Card":{"note":"","data":["801CC027 000A"],"options":null},"Infinite\\Items\\The Contract":{"note":"","data":["801CC024 000A"],"options":null},"Infinite\\Items\\Throwing Weapons":{"note":"","data":["801CC015 0064"],"options":null},"Infinite\\Items\\Winch Lever":{"note":"","data":["801CC029 000A"],"options":null},"Infinite\\Keys\\Archives":{"note":"","data":["801CC02E 000A"],"options":null},"Infinite\\Keys\\Art Tower 1":{"note":"","data":["801CC03A 000A"],"options":null},"Infinite\\Keys\\Art Tower 2":{"note":"","data":["801CC03B 000A"],"options":null},"Infinite\\Keys\\Chamber":{"note":"","data":["801CC033 000A"],"options":null},"Infinite\\Keys\\Clocktower A":{"note":"","data":["801CC03F 000A"],"options":null},"Infinite\\Keys\\Clocktower B":{"note":"","data":["801CC040 000A"],"options":null},"Infinite\\Keys\\Clocktower C":{"note":"","data":["801CC038 000A"],"options":null},"Infinite\\Keys\\Clocktower D":{"note":"","data":["801CC039 000A"],"options":null},"Infinite\\Keys\\Clocktower E":{"note":"","data":["801CC03E 000A"],"options":null},"Infinite\\Keys\\Control Room":{"note":"","data":["801CC03C 000A"],"options":null},"Infinite\\Keys\\Copper":{"note":"","data":["801CC032 000A"],"options":null},"Infinite\\Keys\\Deck":{"note":"","data":["801CC035 000A"],"options":null},"Infinite\\Keys\\Execution":{"note":"","data":["801CC034 000A"],"options":null},"Infinite\\Keys\\Garden":{"note":"","data":["801CC031 000A"],"options":null},"Infinite\\Keys\\Left Tower":{"note":"","data":["801CC02F 000A"],"options":null},"Infinite\\Keys\\Rose Garden":{"note":"","data":["801CC01A 000A"],"options":null},"Infinite\\Keys\\Storeroom":{"note":"","data":["801CC030 000A"],"options":null},"Infinite\\Keys\\Thorn":{"note":"","data":["801CC037 000A"],"options":null},"Infinite\\Keys\\Wall":{"note":"","data":["801CC03D 000A"],"options":null},"Infinite\\Specials\\Special 1":{"note":"","data":["801CC017 000A"],"options":null},"Infinite\\Specials\\Special 2":{"note":"","data":["801CC018 000A"],"options":null},"Infinite\\Specials\\Special 3":{"note":"","data":["801CC019 000A"],"options":null},"Rapid Fire Gun (Henry-Hold B)":{"note":"For Henry, Hold B","data":["811C9CC6 0040","801D5273 0006"],"options":null},"Selection Options\\Cut Scene Select":{"note":"With this code, you must use the appropiate level mod before you attemp to run these cut scenes. Not doing so will ruin the cut scene as the graphics will be glitched.","data":["801CC363 0009","801CC35B 00??"],"options":{"\"I Smell Poison\" From Underground Waterway":"08","(?)":"22","Actrise Appears Again Before Fight With Carrie":"56","Actrise Appears Again With Cousin Fernandes Before Fight With Carrie":"54","Actrise Appears In Castle Center":"52","Actrise Defeated By Carrie":"57","Ada":"30","Bleeding Statue":"12","Bull Awakens":"17","Castel Destruction":"27","Castle Destruction":"29","Castle Drawbridge Closes And Ortega Appears":"46","Castle Drawbridge Lowers":"03","Castle Gate Closes In Villa Upon Entering Villa":"09","Castle Keep Destructs":"1E","Character Enters Castle":"04","Character In Boat On Foggy Lake":"10","Cornell And Henry Part In Garden":"49","Cornell Meets Henry In Garden":"48","Cosmic Lights":"13","Cousin Fernandes Is Destroyed":"55","Death Is Destroyed":"45","Death(Grim Reaper)":"44","Explosion At Wall In Arena":"14","Explosion At Wall In Castle That Leads To Hidden Room":"15","Finds Hidden Path In Villa Basement":"35","Gate Opens In Forest Of Silence":"1A","Harpie":"38","Harpie Destroyed":"39","Lever \u0026 Gear In Castle":"37","Malus And Reinhardt On Horse":"2B","Malus Appears Again In Upstairs Room Of Castle":"16","Malus Appears For The First Time":"0E","Malus Is Saved By Reinhardt":"2A","Malus Leaves Garden":"0F","Malus On Flying Horse Outside Castle Keep":"1F","Meet Renon For The Last Time In Castle Keep.":"1B","Monster Dracula Appears":"51","One Of The Working Gears Cut Scenes":"19","Renon Appears For First Time":"0B","Rosa In Garden":"25","Rosa Returns":"2E","Scrolling Text About Castle And Henry":"31","Seal Removed From Wall In Arena":"11","Space Warp":"28","Spider People In Tunnel":"24","Thirsty Man":"47","This Cut Scene Runs Cut Scene 27 And 2E":"1C","Vampire In Basement":"33","Vampire In Main Entrance Hall Of Villa":"06","Vampire In Villa Basement Destroyed":"34","Village Vampire In Upstairs Villa":"0D","Vincent The Vampire":"18"}},"Selection Options\\Day Select For Adult Henry":{"note":"","data":["801CBFEF 00??"],"options":{"0 Days":"07","1 Day":"06","2 Days":"05","3 Days":"04","4 Days":"03","5 Days":"02","6 Days":"01","7 Days":"00"}},"Selection Options\\Level Select\\Inter":{"note":"","data":["801CC34B 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Level Select\\Main":{"note":"","data":["801CC349 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Status Select":{"note":"","data":["801CC054 00??"],"options":{"Instant Death":"FF","Never Get Poisoned or Vamped":"00","Normal":"01","Poison":"08","Vamp":"04","Vamped \u0026 Poisoned":"0C"}},"Selection Options\\Weapon Select":{"note":"","data":["801CC00F 00??"],"options":{"Axe":"04","Cross":"03","Knife":"01","Nothing":"00","Potion":"02"}},"Selection Options\\[Press F9 For Wolfman Can Use Weapons]":{"note":"For Cornell","data":["881CC007 00??"],"options":{"No (Default)":"04","Yes":"02"}},"Stop Timer Input":{"note":"","data":["811CBFF2 0001"],"options":null}},"A2E8F35B-C9DC87D9-C:45":{"Fly Through 1st \u0026 Last Ring Only To Complete Challenge":{"note":"","data":["801442E9 0063"],"options":null},"Infinite Freezing Breath":{"note":"","data":["8122CDE8 42C8"],"options":null},"Infinite Health":{"note":"","data":["8122CDD4 42C8"],"options":null},"Infinite Laser Eye":{"note":"","data":["8122CDE4 42C8"],"options":null},"Infinite Running Boosts":{"note":"","data":["8122CDDC 42C8"],"options":null},"Infinite X-Ray Vision":{"note":"","data":["8122CDE0 42C8"],"options":null}},"A3A044B5-6DB1BF5E-C:0":{"Collect One Item For Portal":{"note":"","data":["802E4E47 00??"],"options":{"Level 1":"03","Level 2":"0E","Level 3":"0C","Level 4":"0D"}},"Freeze Timer":{"note":"","data":["802E4D5F 0000"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["802E4E4A 0027"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802E4EA2 0027"],"options":null},"Infinite Health\\Player 3":{"note":"","data":["802E4EFA 0027"],"options":null},"Infinite Health\\Player 4":{"note":"","data":["802E4F52 0027"],"options":null},"Paly As":{"note":"","data":["802E4E4C 00??"],"options":{"Blue Back Bee":"22","Blue Helic":"02","Blue Rocket":"12","Blue Stealth":"32","Green Back Bee":"21","Green Helic":"01","Green Rocket":"11","Green Stealth":"31","Red Back Bee":"20","Red Helic":"00","Red Rocket":"10","Red Stealth":"30","Yellow Back Bee":"23","Yellow Helic":"03","Yellow Rocket":"13","Yellow Stealth":"33"}}},"A3A044B5-6DB1BF5E-C:00":{"Collect One Item For Portal":{"note":"","data":["802E4E47 00??"],"options":{"Level 1":"03","Level 2":"0E","Level 3":"0C","Level 4":"0D"}},"Freeze Timer":{"note":"","data":["802E4D5F 0000"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["802E4E4A 0027"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802E4EA2 0027"],"options":null},"Infinite Health\\Player 3":{"note":"","data":["802E4EFA 0027"],"options":null},"Infinite Health\\Player 4":{"note":"","data":["802E4F52 0027"],"options":null},"Paly As":{"note":"","data":["802E4E4C 00??"],"options":{"Blue Back Bee":"22","Blue Helic":"02","Blue Rocket":"12","Blue Stealth":"32","Green Back Bee":"21","Green Helic":"01","Green Rocket":"11","Green Stealth":"31","Red Back Bee":"20","Red Helic":"00","Red Rocket":"10","Red Stealth":"30","Yellow Back Bee":"23","Yellow Helic":"03","Yellow Rocket":"13","Yellow Stealth":"33"}}},"A3F6876A-DB943BD5-C:4A":{"Infinite 9 Credits\\Player 1":{"note":"","data":["801D7B38 0009"],"options":null},"Infinite 9 Credits\\Player 2":{"note":"","data":["801D7B3C 0009"],"options":null},"Press Z Button for Max Gauge\\Player 1":{"note":"","data":["D00B1CE0 0020","811D2602 0098"],"options":null},"Press Z Button for Max Gauge\\Player 2":{"note":"","data":["D00B1CE6 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Max Score]":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null}},"A47D4AD4-8BFA81F9-C:45":{"Infinite Air":{"note":"","data":["8128FB74 FF00"],"options":null},"Infinite Max Lives":{"note":"","data":["80290E5F 000A"],"options":null}},"A47D4AD4-F5B0C6CB-C:45":{"Infinite Air":{"note":"","data":["8128FB74 FF00"],"options":null},"Infinite Max Lives":{"note":"","data":["80290E5F 000A"],"options":null}},"A4A52B58-23759841-C:45":{"Access Demitron Character":{"note":"","data":["80049DF4 0001"],"options":null},"Access Sonork Character":{"note":"","data":["80049DF0 0001"],"options":null},"Infinite Health\\All Levels\\Player 1":{"note":"","data":["81028988 0800","8102898A 0018","81000060 3C1B","81000062 8008","81000064 8F7B","81000066 0228","8100006C 03E0","8100006E 0008","81000070 A761","81000072 0070"],"options":null},"Music Modifier":{"note":"","data":["800816B2 00??"],"options":{"Music Off":"00","Volume Low":"2A","Volume Max":"7F","Volume Medium":"55"}},"Press GS For 2 Rounds Won\\Player 1":{"note":"","data":["890B6330 0002"],"options":null},"Press GS For 2 Rounds Won\\Player 2":{"note":"","data":["890B6342 0002"],"options":null}},"A4BF9306-BF0CDFD1-C:45":{"Access All Moves":{"note":"","data":["8037C3A0 0001","8037C3A1 007F","8037C3A2 00FF","8037C3A3 00FF"],"options":null},"Character Select":{"note":"When Mumbo transforms you hold:C-Up for the Termite,C-Right for the Pumpkin,C-Down for the Walrus,C-Left for the Crocc,R for the Bumble Bee,L for the Washing Machine,Press nothing to turn into Banjo","data":["D0281251 0008","8037C2D3 0002","D0281251 0001","8037C2D3 0003","D0281251 0004","8037C2D3 0004","D0281251 0002","8037C2D3 0005","D0281251 0010","8037C2D3 0006","D0281251 0020","8037C2D3 0007"],"options":null},"Do Shock Spring Jump From Anywhere":{"note":"Press A Button. Do not use with Take Off And Fly From Anywhere","data":["8037C1D2 0002"],"options":null},"Game 100% Complete":{"note":"","data":["8137C3A0 001F","50000302 0000","8137C3A2 FFFF","50000602 0000","813832C0 FFFF","81383FCA 0064","81383FDC 0064","50000802 0000","813832F0 FFFF","81385FA0 0063","81385FC4 0063","81385FF0 0064","50000602 0000","81385FF2 6464","50001002 0000","813831A8 FFFF","813831B0 FF7F","813831B2 FFB0","813831B4 3DA6","813831B6 F264","813831C6 FF7F"],"options":null},"Have Zero Time all Levels":{"note":"","data":["50000B04 0000","81386004 3000"],"options":null},"Infinite\\Air":{"note":"","data":["81385F8E 0E10"],"options":null},"Infinite\\Always Have All Jinjos":{"note":"","data":["80385F7B 00FF"],"options":null},"Infinite\\Eggs":{"note":"","data":["80385F67 00FF"],"options":null},"Infinite\\Gold Feathers":{"note":"","data":["80385F73 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["80385F83 0008","80385F87 0008"],"options":null},"Infinite\\Jiggies":{"note":"","data":["80385FCB 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["80385F8B 00FF"],"options":null},"Infinite\\Mumbo Tokens":{"note":"","data":["80385FC6 00FF","80385FA2 00FF"],"options":null},"Infinite\\Notes":{"note":"Just collect one Note to Have 255 Notes in all Worlds.","data":["80385FF2 00FF","80385F62 0001"],"options":null},"Infinite\\Red Feathers":{"note":"","data":["80385F6F 00FF"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0281251 0020","8137C4BC 43E0"],"options":null},"Secret Items":{"note":"","data":["81283400 ????"],"options":{"Have All Collected":"FFFF","Have None":"0000"}},"Take Off And Fly From Anywhere":{"note":"Press A Button. Do not use with Do Shock Spring Jump From Anywhere","data":["8037C1D1 0002"],"options":null}},"A4F2F521-F0EB168E-C:4A":{"Access All Levels":{"note":"","data":["80200B66 00FF"],"options":null},"Extended Tongue":{"note":"","data":["8132790E FFFF"],"options":null},"Have 99 Carrots":{"note":"With all Carrots collected. You will be allowed into mini-games and secret areas","data":["80200B2F 0063"],"options":null},"Have 99 Crowns":{"note":"","data":["8024790B 0063"],"options":null},"Have All Levels Completed":{"note":"","data":["80200B6A 0019","80200B6B 0019","80200B6C 0015","80200B6D 0018","80200B6E 0017","80200B6F 0017"],"options":null},"Infinite Health":{"note":"","data":["80168E73 000A"],"options":null},"Level Select":{"note":"When you press Pause in-game and Stage Quit yo will go to the Stage Screen this cheat lets you choose what Stage you would like to go to but make sure you turn the cheat off and press A to continue to that stage.","data":["8029BF7B 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06"}}},"A5533106-B9F25E5B-C:4A":{"Enable All Characters":{"note":"","data":["D02E4082 0000","802E4083 0004"],"options":null},"Hard Mode Selected In A New Game":{"note":"With this code, you will not see the hard level status until you save and restart the game file. No special items are required to access this feature with this code turned on.","data":["8032630F 0002"],"options":null},"Have Max\\Powerups":{"note":"","data":["801CC7D3 0002"],"options":null},"Have Max\\Weapon Power-Up":{"note":"","data":["801CC7D7 0002"],"options":null},"Infinite\\Bullets":{"note":"For Henry","data":["801D5753 0006"],"options":null},"Infinite\\Gold":{"note":"","data":["811CC4F2 2710"],"options":null},"Infinite\\Health":{"note":"","data":["811CC4EA 2710"],"options":null},"Infinite\\Health Young Henry":{"note":"","data":["D11CA1A6 0010","813A6D10 2800"],"options":null},"Infinite\\Items\\Crest Half A":{"note":"","data":["801CC50B 000A"],"options":null},"Infinite\\Items\\Crest Half B":{"note":"","data":["801CC50C 000A"],"options":null},"Infinite\\Items\\Cure Ampoule":{"note":"","data":["801CC4FE 000A"],"options":null},"Infinite\\Items\\Healing Kit":{"note":"","data":["801CC4FC 000A"],"options":null},"Infinite\\Items\\Magical Nitro":{"note":"","data":["801CC505 000A"],"options":null},"Infinite\\Items\\Mandragora":{"note":"","data":["801CC506 000A"],"options":null},"Infinite\\Items\\Moon Card":{"note":"","data":["801CC508 000A"],"options":null},"Infinite\\Items\\Oldrey's Diary":{"note":"","data":["801CC50A 000A"],"options":null},"Infinite\\Items\\Powerup":{"note":"","data":["801CC4FF 000A"],"options":null},"Infinite\\Items\\Purifying":{"note":"","data":["801CC4FD 000A"],"options":null},"Infinite\\Items\\Red Jewels on Pick-Up":{"note":"","data":["801CC4F5 0068"],"options":null},"Infinite\\Items\\Roast Beef":{"note":"","data":["801CC4FB 000A"],"options":null},"Infinite\\Items\\Roast Chicken":{"note":"","data":["801CC4FA 000A"],"options":null},"Infinite\\Items\\Rose Brooch":{"note":"","data":["801CC50D 000A"],"options":null},"Infinite\\Items\\Sun Card":{"note":"","data":["801CC507 000A"],"options":null},"Infinite\\Items\\The Contract":{"note":"","data":["801CC504 000A"],"options":null},"Infinite\\Items\\Throwing Weapons":{"note":"","data":["801CC4F5 0064"],"options":null},"Infinite\\Items\\Winch Lever":{"note":"","data":["801CC509 000A"],"options":null},"Infinite\\Keys\\Archives":{"note":"","data":["801CC50E 000A"],"options":null},"Infinite\\Keys\\Art Tower 1":{"note":"","data":["801CC51A 000A"],"options":null},"Infinite\\Keys\\Art Tower 2":{"note":"","data":["801CC51B 000A"],"options":null},"Infinite\\Keys\\Chamber":{"note":"","data":["801CC513 000A"],"options":null},"Infinite\\Keys\\Clocktower A":{"note":"","data":["801CC51F 000A"],"options":null},"Infinite\\Keys\\Clocktower B":{"note":"","data":["801CC520 000A"],"options":null},"Infinite\\Keys\\Clocktower C":{"note":"","data":["801CC518 000A"],"options":null},"Infinite\\Keys\\Clocktower D":{"note":"","data":["801CC519 000A"],"options":null},"Infinite\\Keys\\Clocktower E":{"note":"","data":["801CC51E 000A"],"options":null},"Infinite\\Keys\\Control Room":{"note":"","data":["801CC51C 000A"],"options":null},"Infinite\\Keys\\Copper":{"note":"","data":["801CC512 000A"],"options":null},"Infinite\\Keys\\Deck":{"note":"","data":["801CC515 000A"],"options":null},"Infinite\\Keys\\Execution":{"note":"","data":["801CC514 000A"],"options":null},"Infinite\\Keys\\Garden":{"note":"","data":["801CC511 000A"],"options":null},"Infinite\\Keys\\Left Tower":{"note":"","data":["801CC50F 000A"],"options":null},"Infinite\\Keys\\Rose Garden":{"note":"","data":["801CC516 000A"],"options":null},"Infinite\\Keys\\Storeroom":{"note":"","data":["801CC510 000A"],"options":null},"Infinite\\Keys\\Thorn":{"note":"","data":["801CC517 000A"],"options":null},"Infinite\\Keys\\Wall":{"note":"","data":["801CC51D 000A"],"options":null},"Infinite\\Specials\\Special 1":{"note":"","data":["801CC4F7 000A"],"options":null},"Infinite\\Specials\\Special 2":{"note":"","data":["801CC4F8 000A"],"options":null},"Infinite\\Specials\\Special 3":{"note":"","data":["801CC4F9 000A"],"options":null},"Rapid Fire Gun (Henry-Hold B)":{"note":"For Henry, Hold B","data":["811CA1A6 0040","801D5753 0006"],"options":null},"Selection Options\\Cut Scene Select":{"note":"With this code, you must use the appropiate level mod before you attemp to run these cut scenes. Not doing so will ruin the cut scene as the graphics will be glitched.","data":["801CC843 0009","801CC83B 00??"],"options":{"\"I Smell Poison\" From Underground Waterway":"08","(?)":"22","Actrise Appears Again Before Fight With Carrie":"56","Actrise Appears Again With Cousin Fernandes Before Fight With Carrie":"54","Actrise Appears In Castle Center":"52","Actrise Defeated By Carrie":"57","Ada":"30","Bleeding Statue":"12","Bull Awakens":"17","Castel Destruction":"27","Castle Destruction":"29","Castle Drawbridge Closes And Ortega Appears":"46","Castle Drawbridge Lowers":"03","Castle Gate Closes In Villa Upon Entering Villa":"09","Castle Keep Destructs":"1E","Character Enters Castle":"04","Character In Boat On Foggy Lake":"10","Cornell And Henry Part In Garden":"49","Cornell Meets Henry In Garden":"48","Cosmic Lights":"13","Cousin Fernandes Is Destroyed":"55","Death Is Destroyed":"45","Death(Grim Reaper)":"44","Explosion At Wall In Arena":"14","Explosion At Wall In Castle That Leads To Hidden Room":"15","Finds Hidden Path In Villa Basement":"35","Gate Opens In Forest Of Silence":"1A","Harpie":"38","Harpie Destroyed":"39","Lever \u0026 Gear In Castle":"37","Malus And Reinhardt On Horse":"2B","Malus Appears Again In Upstairs Room Of Castle":"16","Malus Appears For The First Time":"0E","Malus Is Saved By Reinhardt":"2A","Malus Leaves Garden":"0F","Malus On Flying Horse Outside Castle Keep":"1F","Meet Renon For The Last Time In Castle Keep.":"1B","Monster Dracula Appears":"51","One Of The Working Gears Cut Scenes":"19","Renon Appears For First Time":"0B","Rosa In Garden":"25","Rosa Returns":"2E","Scrolling Text About Castle And Henry":"31","Seal Removed From Wall In Arena":"11","Space Warp":"28","Spider People In Tunnel":"24","Thirsty Man":"47","This Cut Scene Runs Cut Scene 27 And 2E":"1C","Vampire In Basement":"33","Vampire In Main Entrance Hall Of Villa":"06","Vampire In Villa Basement Destroyed":"34","Village Vampire In Upstairs Villa":"0D","Vincent The Vampire":"18"}},"Selection Options\\Day Select For Adult Henry":{"note":"","data":["801CC4CF 00??"],"options":{"0 Days":"07","1 Day":"06","2 Days":"05","3 Days":"04","4 Days":"03","5 Days":"02","6 Days":"01","7 Days":"00"}},"Selection Options\\Level Select\\Inter":{"note":"","data":["801CC82B 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Level Select\\Main":{"note":"","data":["801CC829 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Status Select":{"note":"","data":["801CC534 00??"],"options":{"Instant Death":"FF","Never Get Poisoned or Vamped":"00","Normal":"01","Poison":"08","Vamp":"04","Vamped \u0026 Poisoned":"0C"}},"Selection Options\\Weapon Select":{"note":"","data":["801CC4EF 00??"],"options":{"Axe":"04","Cross":"03","Knife":"01","Nothing":"00","Potion":"02"}},"Selection Options\\[Press F9 For Wolfman Can Use Weapons]":{"note":"For Cornell","data":["881CC4E7 00??"],"options":{"No (Default)":"04","Yes":"02"}},"Stop Timer Input":{"note":"","data":["811CC4D2 0001"],"options":null}},"A60ED171-3D85D06E-C:45":{"Have All Characters In Viewer":{"note":"","data":["810ECD80 FFFF","810ECD82 FFFF"],"options":null},"Infinite\\Health":{"note":"","data":["800F5F26 0001"],"options":null},"Infinite\\Webbing":{"note":"","data":["800F5F53 0001"],"options":null},"Unlocked\\All Costumes":{"note":"","data":["810ECD7E FFFF"],"options":null},"Unlocked\\All Levels":{"note":"","data":["810ECD74 0105","810ECDB0 FFFF"],"options":null}},"A62230C3-F0834488-C:45":{"Infinite Time":{"note":"","data":["D0226724 0000","81226724 003C"],"options":null},"Only Play One Round":{"note":"","data":["D0226791 0000","81226718 0001"],"options":null},"Player 1\\1 Win To Win":{"note":"","data":["D0226715 0000","80226715 0001"],"options":null},"Player 1\\Infinite Energy":{"note":"","data":["D022671C 0000","8122671C 00FA"],"options":null},"Player 1\\Infinite Time To Continue":{"note":"","data":["802267CB 0009","803CF2A1 0009"],"options":null},"Player 1\\Never Wins":{"note":"","data":["D0226715 0001","80226715 0000"],"options":null},"Player 1\\No Energy":{"note":"","data":["D022671C 0000","8122671C 0000"],"options":null},"Player 2\\1 Win To Win":{"note":"","data":["D0226717 0000","80226717 0001"],"options":null},"Player 2\\Infinite Energy":{"note":"","data":["D022671E 0000","8122671E 00FA"],"options":null},"Player 2\\Lifebar Flashes Red":{"note":"","data":["D022672E 0000","8122672E 00CF"],"options":null},"Player 2\\Never Wins":{"note":"","data":["D0226717 0001","80226717 0000"],"options":null},"Player 2\\No Energy":{"note":"","data":["D022671E 0000","8122671E 0000"],"options":null}},"A7941528-61F1199D-C:4A":{"All Gold Medals":{"note":"","data":["50000502 0000","81259130 0101"],"options":null},"Infinite\\Tools Options":{"note":"","data":["8025A624 00??"],"options":{"Fan":"04","Frying Pan":"01","Ghost":"02","Invisible":"06","Rat Face":"08","Rock":"07","Rocket":"05","Super Ghost":"03","Super Rat Face":"09","Wings":"0A"}},"Infinite\\Trick Game 300 Points":{"note":"","data":["8125A7F2 012C"],"options":null},"Infinite\\Weapons Options":{"note":"","data":["8025A622 00??","8025A623 0009"],"options":{"Bomb":"05","Freeze Shot":"03","Parachute":"02","Slap Stick":"01","Snowman":"04","Whirlwind":"06"}},"Max Coins":{"note":"","data":["8125A5BE 270F","8025A5BF 00C8"],"options":null},"Open Extra Characters \u0026 Snowboards":{"note":"Battle Mode Only","data":["8125916E 0101","80259170 0001","8025915C 0001","8125915E 0101","81259160 0101"],"options":null}},"A7D015F8-2289AA43-C:45":{"Have All Medals":{"note":"For Expert \u0026 Normal Modes","data":["50000802 0000","8116E6E0 7777"],"options":null},"Infinite\\Armor\\Falco":{"note":"","data":["8016D727 00FF"],"options":null},"Infinite\\Armor\\Peppy":{"note":"","data":["8016D72F 00FF"],"options":null},"Infinite\\Armor\\Slippy":{"note":"","data":["8016D72B 00FF"],"options":null},"Infinite\\Dual Blue Lasers":{"note":"","data":["8015791B 0002"],"options":null},"Infinite\\Energy":{"note":"","data":["8013AB27 00FF","80137C47 00FF"],"options":null},"Infinite\\Hyper Laser":{"note":"","data":["8015791B 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["80157911 0009"],"options":null},"Level Select":{"note":"","data":["D016E0A7 0000","8016E0A7 00??"],"options":{"Aquas":"0D","Area 6":"03","Bolse":"11","Corneria":"00","Corneria (Multi)":"14","Fortuna":"0E","Glitch":"04","Katina":"10","Macbeth":"0B","Meteo":"01","Sector X":"02","Sector Y":"05","Sector Z":"12","Solar":"07","Titania":"0C","Training Mode Level":"0A","Venom 1":"06","Venom 2":"09","Venom With Starwolf":"13","Zoness":"08"}},"Loads O' Hits":{"note":"","data":["8015790B 00FF"],"options":null},"Unlimited\\Boost":{"note":"","data":["81137C9C 0000","81137C9E 0000","8113AB7C 0000","8113AB7E 0000"],"options":null},"Unlimited\\Smart Bombs":{"note":"","data":["8016DC13 0004"],"options":null}},"A8275140-B9B056E8-C:4A":{"Have All\\Characters":{"note":"","data":["50000702 0000","801B361B 0001"],"options":null},"Have All\\Key Items":{"note":"","data":["50001602 0000","811B3714 0101"],"options":null},"Have All\\Normal Items":{"note":"","data":["50000902 0000","811B3700 6363"],"options":null},"Have All\\Weapons":{"note":"","data":["50000702 0000","811B3678 0101"],"options":null},"Infinite\\Air":{"note":"","data":["8121D4FA 04B0"],"options":null},"Infinite\\HP (All Characters)":{"note":"","data":["50000602 0000","801B361C 000A"],"options":null},"[Can Leave Town]":{"note":"Start a new game, and immediately leave town without talking to anyone.","data":["811B362A FFFF"],"options":null},"[Press L To Levitate":{"note":"Jump first, then hold L-Button while in mid-air.","data":["D0082915 0020","812456F4 418E","D0082915 0020","812456F6 38E2"],"options":null}},"A83E101A-E937B69D-C:45":{"Always Have\\BFG 9000":{"note":"","data":["800632DB 0001"],"options":null},"Always Have\\Bio Suite":{"note":"","data":["80063283 00??"],"options":{"Off":"00","On":"FF"}},"Always Have\\Chain Gun":{"note":"","data":["800632CF 0001"],"options":null},"Always Have\\Chainsaw":{"note":"","data":["800632BB 0001"],"options":null},"Always Have\\Double Shotgun":{"note":"","data":["800632CB 0001"],"options":null},"Always Have\\Gun":{"note":"","data":["800632C3 0001"],"options":null},"Always Have\\Have Rocket Launcher":{"note":"","data":["800632D1 0001"],"options":null},"Always Have\\Laser Weapon":{"note":"","data":["800632DD 0001"],"options":null},"Always Have\\Missile Launcher":{"note":"","data":["800632D3 0001"],"options":null},"Always Have\\Plasma Rifle":{"note":"","data":["800632D7 0001"],"options":null},"Always Have\\Shotgun":{"note":"","data":["800632C7 0001"],"options":null},"Berserk Mode":{"note":"","data":["8006327B 00FF"],"options":null},"Enable Cheat Menu":{"note":"","data":["8005A7D3 0001"],"options":null},"Have All\\Keys":{"note":"","data":["50000504 0000","8106328E FFFF"],"options":null},"Have All\\Secret Pentagram Items":{"note":"","data":["800632A7 0007"],"options":null},"Have All\\Weapons":{"note":"","data":["50000A04 0000","810632BA 0001"],"options":null},"Infinite\\Ammo All Weapons":{"note":"","data":["50000404 0000","810632E2 013C"],"options":null},"Infinite\\Armor":{"note":"","data":["8006326F 00FF"],"options":null},"Invincible":{"note":"","data":["8006330B 0002"],"options":null},"Invincible And Map Markers":{"note":"","data":["8006330B 0006"],"options":null},"Rapid Fire":{"note":"","data":["8106333A 0B94"],"options":null},"Turn Map Markers On":{"note":"","data":["8006330B 0004"],"options":null},"[Max Brightness]":{"note":"Enable this cheat on rom load to have Max Brightness (internal) and then put Jabo d3d8 on 160% Max for a extra brightness Boost.","data":["8005A7C8 0064"],"options":null}},"A92D52E5-1D26B655-C:45":{"1 Win to Win\\Player 1":{"note":"","data":["D020C27F 0000","8020C27F 0001"],"options":null},"1 Win to Win\\Player 2":{"note":"","data":["D020C27F 0000","8020C27F 0010"],"options":null},"Infinite\\Health\\Player 1":{"note":"","data":["8020B7B1 00C8"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["8020BC0D 00C8"],"options":null},"Infinite\\Money":{"note":"","data":["8121106C 2704"],"options":null},"Infinite\\Special\\Player 1":{"note":"","data":["8120AEB4 0190"],"options":null},"Infinite\\Special\\Player 2":{"note":"","data":["8120B1B0 0190"],"options":null}},"AA18B1A5-07DB6AEB-C:45":{"Have\\All Guns In Chest":{"note":"","data":["50000E04 0100","810E8EF4 05FF"],"options":null},"Have\\All Main Items In Chest":{"note":"If you want items that are not listed in the Chest, then just use the Have Item On Slot Select code to have what you desire.","data":["810E8F2C 17FF","810E8F30 1EFF","810E8F34 1FFF","810E8F38 23FF","50000404 0100","810E8F3C 25FF","810E8F4C 2AFF","810E8F50 2BFF","50000304 0100","810E8F54 2EFF","50000F04 0100","810E8F60 32FF","810E8F9C 43FF","50000504 0100","810E8FA0 47FF","50000404 0100","810E8FB4 53FF","50000C04 0100","810E8FC4 58FF"],"options":null},"Have\\Fine Condition Always":{"note":"","data":["810E13E4 0000"],"options":null},"Have\\Item On Slot Select\\Slot 01":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EC8 00??","800E8EC9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 02":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ECC 00??","800E8ECD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 03":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED0 00??","800E8ED1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 04":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED4 00??","800E8ED5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 05":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED8 00??","800E8ED9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 06":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EDC 00??","800E8EDD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 07":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE0 00??","800E8EE1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 08":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE4 00??","800E8EE5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 09":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE8 00??","800E8EE9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 10":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EEC 00??","800E8EED 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Infinite\\Health":{"note":"","data":["810E1322 00C8"],"options":null},"Infinite\\Time":{"note":"","data":["800E8CBF 0010"],"options":null},"Play As":{"note":"This allows you to select what character you wish to play as. Just slect on load and select as normal at the menu and when in game you will be the character of your choice","data":["810E1138 ????"],"options":{"Ada (can crash the game)":"0E80","Cheryl":"0F80","Claire Original":"0380","Claire as Biker":"0980","Claire without jacket":"0780","Claires body Leons outfit":"0B80","Hunk (can crash the game)":"0C80","Leon Original":"0280","Leon Wounded":"0680","Leon as Biker":"0A80","Leon as Stars":"0880","To Fu":"0D80"}},"Play Extra Mission":{"note":"This allows you to select what extra mission you wish to play. Just slect on load and carry on as normal at the menu and when in game you will be the character of your choice Do not use at the same time as [Resident Evil 2 Mode]","data":["810E10EE 00??"],"options":{"The 4th Survior":"48","To-Fu":"49"}},"Quick Chest Access":{"note":"With this code, all you have to do to access the chest, is hold L and Press Start.","data":["D1014FA4 1020","8012BFA8 0001"],"options":null},"Quick Save Access":{"note":"(1 Anytime, anywhere, press Z and B at the same time. You'll get the standard typewriter text: \"It's an old typewriter. You can save your progress with this.\" Note that you must, of course, have an ink ribbon to save. 2) Choose \"Yes\" and you'll be able to save normally. Instead of the location name, your save file will say \"Scenario 1st\" or \"Scenario 2nd.\" 3) When you load your save file, you'll have to skip through the intro, but when the game loads up you'll be exactly where you saved!","data":["D1014FA4 6000","810E8928 8007","D1014FA4 6000","810E892A 4110"],"options":null},"[Biohazard 2 Mode]":{"note":"Note: With this enabled the game will become Bio Hazard 2, the Japanese version of Resident Evil 2! This means all text (except the text in files) is in Japanese, and all cinemas have Japanese subtitles. Note that the title screen will still say Resident Evil 2 Do not use at the same time as Play Extra Mission","data":["D10E10EE 00??","810E10EE 0000"],"options":{"Off":"00","On":"40"}},"[Saves Always 0]":{"note":"No matter how many saves you do ithis makes the game think you Have\\not saved.","data":["810E8B50 0000"],"options":null}},"AA7B0658-9C96937B-C:50":{"Character Creation\\Max\\Aerial":{"note":"","data":["80326C35 0009"],"options":null},"Character Creation\\Max\\Brawling":{"note":"","data":["8032CB75 0009"],"options":null},"Character Creation\\Max\\Dirtiness":{"note":"","data":["8032EB35 0009"],"options":null},"Character Creation\\Max\\Impact":{"note":"","data":["80320375 0009"],"options":null},"Character Creation\\Max\\Mat Ability":{"note":"","data":["80328BF5 0009"],"options":null},"Character Creation\\Max\\Quickness":{"note":"","data":["80324C75 0009"],"options":null},"Character Creation\\Max\\Speed":{"note":"","data":["80322CB5 0009"],"options":null},"Character Creation\\Max\\Strength":{"note":"","data":["80308D35 0009"],"options":null},"Character Creation\\Max\\Submission":{"note":"","data":["8032ABB5 0009"],"options":null},"Enable Cheat":{"note":"","data":["800B6F5B 00??"],"options":{"All Wrestlers":"80","Momentum Meter":"08","Play As Same Wrestler":"20","Stamina Meter":"04","Super Created Wrestlers":"02"}},"Freeze Timer":{"note":"","data":["800B7E02 D300"],"options":null},"Infinite Stamina\\Player 1":{"note":"","data":["810E9798 0478"],"options":null},"Infinite Stamina\\Player 2":{"note":"","data":["810E9934 03ED"],"options":null},"Meter Select\\Player 1":{"note":"","data":["800E979D 00??"],"options":{"Empty Meter Bar":"00","Full Meter Bar":"60"}},"Meter Select\\Player 2":{"note":"","data":["800E993D 00??"],"options":{"Empty Meter Bar":"00","Full Meter Bar":"60"}}},"AB7C101D-EC58C8B0-C:50":{"Infinite Health\\Player One":{"note":"","data":["811507FA 6400"],"options":null},"Infinite Health\\Player Two":{"note":"","data":["81152E76 6400"],"options":null},"Infinite Jet Pack\\Player One":{"note":"","data":["81150802 3200"],"options":null},"Infinite Jet Pack\\Player Two":{"note":"","data":["81152E7E 3200"],"options":null},"Infinite Shields\\Player One":{"note":"","data":["811507FE 6400"],"options":null},"Infinite Shields\\Player Two":{"note":"","data":["81152E7A 6400"],"options":null},"Player 1 Easily Defeated\\Player Two":{"note":"","data":["811507FA 0100","811507FE 0100"],"options":null},"Player 2 Easily Defeated\\Player One":{"note":"","data":["81152E76 0100","81152E7A 0100"],"options":null},"Shields Always Active\\Player One":{"note":"","data":["8015080A 0022"],"options":null},"Shields Always Active\\Player Two":{"note":"","data":["80152E86 0022"],"options":null},"Smoke Trail\\Player One":{"note":"","data":["80150804 0001"],"options":null},"Smoke Trail\\Player Two":{"note":"","data":["80152E80 0001"],"options":null}},"ABA51D09-C668BAD9-C:58":{"Character Select":{"note":"","data":["801D535F 00??"],"options":{"Ruff (Boy) (Default)":"00","Tumble (Girl)":"01"}},"Enable Cheat Menu":{"note":"","data":["801D5355 0001"],"options":null},"Have All Levels Completed":{"note":"","data":["50000202 0000","81207D6C FFFF"],"options":null},"Have\\All 40 Winks Collected":{"note":"Combined with Have All Levels Completed cheat will open the door for Have All 40 Winks","data":["50000602 0000","81207D60 FFFF"],"options":null},"Have\\All Dreamkeys Collected":{"note":"","data":["50000802 0000","81207D70 FFFF"],"options":null},"Infinite\\40 Cogs":{"note":"Disable when on Boss Modes as it can cause hanging!","data":["811D2A82 0028"],"options":null},"Infinite\\50 Health ZZZ's":{"note":"","data":["811D2A84 0032"],"options":null},"Infinite\\99 Lives":{"note":"Disable when on Boss Modes as it can cause hanging!","data":["801D2A87 0063"],"options":null},"Infinite\\99 Moons":{"note":"","data":["801D2A81 0063"],"options":null},"Infinite\\99 Tokens":{"note":"Disable when on Boss Modes as it can cause hanging!","data":["801D2A8D 0063"],"options":null},"Infinite\\Max Air":{"note":"","data":["811D2AA0 07C6","811DA2F6 07C1"],"options":null},"Setting Options\\Controller Select":{"note":"","data":["801D5362 00??"],"options":{"Preset 1 (Normal)":"00","Preset 2":"01","Preset 3":"02"}},"Setting Options\\Difficulty Select":{"note":"","data":["801D534F 00??"],"options":{"Easy":"00","Hard":"02","Medium":"01"}},"Setting Options\\GFX Quality Select":{"note":"","data":["801D5354 00??"],"options":{"HighCol":"02","Medium":"01","Normal":"00"}},"Setting Options\\Langauge Select":{"note":"","data":["801D21AC 00??"],"options":{"English":"00","Italian":"02","Spanish":"01"}},"Setting Options\\Music Volume Select":{"note":"","data":["801D5351 00??"],"options":{"Max":"07","Normal":"05","Off":"00"}},"Setting Options\\Rumble Pak Strength Select":{"note":"","data":["801D5353 00??"],"options":{"Max":"07","Middle":"05","Off (Normal)":"00"}},"Setting Options\\SFX Volume Select":{"note":"","data":["801D5350 00??"],"options":{"Max":"07","Normal":"05","Off":"00"}},"test health":{"note":"","data":["801D2A85 0032"],"options":null}},"AC16400E-CF5D071A-C:45":{"Always Place 1st":{"note":"","data":["80151C01 0000"],"options":null},"Have All Cars":{"note":"","data":["50001504 0000","800AAE5B 0001"],"options":null},"Have All Tracks":{"note":"","data":["81168F8C FFFF"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D013435F 0010","8112BD0C 43CB"],"options":null}},"AC8E4B32-E7B47326-C:45":{"Infinite Lives":{"note":"","data":["8009B1AF 0009"],"options":null},"Level Select In Setup Menu":{"note":"","data":["81076FF6 6F8C"],"options":null},"Max Score":{"note":"","data":["8009B1AA 00FF"],"options":null}},"AC976B38-C3A9C97A-C:50":{"99 Total Houses":{"note":"","data":["8106A61A 0063"],"options":null},"Big Newspapers":{"note":"","data":["81268D5A 0001"],"options":null},"Infinite Newspapers":{"note":"","data":["81268D12 0001"],"options":null},"Invincibility":{"note":"","data":["81268D1A 0001"],"options":null},"Level Select":{"note":"Also accesses All Bonus Levels","data":["8006A6A7 0001"],"options":null},"Rocket Boosters":{"note":"","data":["81268D3E 0001"],"options":null},"Super Jump Springs":{"note":"","data":["81268D3A 0001"],"options":null},"Throw Newspapers Backwards":{"note":"","data":["81268D4A 0001"],"options":null},"Throw Newspapers Forwards":{"note":"","data":["81268D46 0001"],"options":null},"Turbo Mode":{"note":"","data":["81268D36 0001"],"options":null}},"AC9F7DA7-A8C029D8-C:45":{"Activate\\Auto Abort Disable":{"note":"","data":["800F4078 0001"],"options":null},"Activate\\Cones to Mines":{"note":"","data":["800F3F88 0001"],"options":null},"Activate\\Disable Car 2 Car Control":{"note":"","data":["800F4050 0001"],"options":null},"Activate\\Resurrect in Place":{"note":"","data":["800F4080 0001"],"options":null},"Activate\\Stop Timer":{"note":"","data":["800F4090 0001"],"options":null},"Activate\\Upside Down Mode":{"note":"","data":["800F4061 0001"],"options":null},"Always Place 1st":{"note":"","data":["80101339 0000"],"options":null},"Car":{"note":"","data":["D00F40A5 0020","800D9EC1 00??","800D9F64 00??","800DA078 00??","800DA321 00??"],"options":{"F1 Car":"0A","Hot Rod":"09","Taxi":"08"}},"Car Type":{"note":"It gets you from 0-150 in the the time it takes the F1 racer to. Don't use the F1 racer and only hold until you reach 150 or the game will freeze.","data":["800F40B1 00??"],"options":{"Fat Car":"02","Flat Car":"01","Giant Car":"03","Invisible Car":"0A","Invisible Car (Can See Wheels)":"CD","Normal Car":"00","Paper-Thin Cars":"66","Screen-Talled Cars":"6E","Super-Sky Car":"BB","Super-Sky Car #2":"DD","Super-Tiny Car":"FF","Super-Tiny Car #2":"44"}},"Edge Boost":{"note":"by pressing R you will get a small speed boost that pushes you ahead.","data":["D00F40A5 0010","81101331 FFFF"],"options":null},"Gravity":{"note":"","data":["800F3D91 00??"],"options":{"1 Weight":"02","2 Weights":"03","A Balloon \u0026 2 Weights":"00","Normal":"01"}},"Have Two Special Cars":{"note":"You receive the Hotrod and Taxi with this code, but you may have to go through the cars from the \"Beginning\" past the \"Extreme\" for them to appear.","data":["810CAC82 FFFF","810CAC98 FFFF","810CACAE FFFF","810CACC4 FFFF","810CACDA FFFF","810CACF0 FFFF"],"options":null},"Press F9 For Track Select":{"note":"With this code, press F9 when on the track selction screen and press A to select that track!","data":["88100050 00??"],"options":{"Track 1":"00","Track 2":"01","Track 3":"02","Track 4":"03","Track 5":"04","Track 6":"05","Track 7":"06"}}},"ADA815BE-6028622F-C:4A":{"Lower Left Character\\Coin Options":{"note":"","data":["800F2769 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D580A 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800F276D 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["800F2799 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D584E 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800F279D 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Mini Game\\Max 99 Coins":{"note":"","data":["800F2C0C 0063"],"options":null},"Mini Game\\Unlimited 99 lives":{"note":"","data":["800F2C03 0063"],"options":null},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["800F2709 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D5782 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800F270D 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["800F2739 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D57C6 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800F273D 00??"],"options":{"0 Stars":"00","99 Stars":"64"}}},"ADB9498B-DAF28F55-C:45":{"Level Select\\Proving Ground-Tightrope":{"note":"Do Not use this with Level Select The Pit-Starlight. Only use One Level Select Option At A Time","data":["8014BD9F 00??"],"options":{"Basic Training":"01","Bomb Shelter":"0B","Bottleneck":"10","Boxed Set":"06","Cathedral":"04","Crossroads":"02","Dire Straight":"07","Earth Temple":"0D","Fall Out":"05","Fire Temple":"0E","Grim Retreat":"03","Mystic":"0F","Prey":"08","Proving Grounds":"00","Tempered":"0C","Tightrope":"11","Warehouse":"09","Water Temple":"0A"}},"Level Select\\The Pit-Starlight":{"note":"Do Not use this with Level Select Proving Ground-Tightrope. Only use One Level Select Option At A Time","data":["8014BD9F 00??"],"options":{"Ampatheater":"16","Breakdown":"19","Bunker":"15","Courtyard":"22","Crypts":"18","Defcon 5":"1F","Fathom":"1D","Fire Walker":"17","Hopeless":"1B","Leap Of Faith":"13","Matrix":"1C","Retaliation":"1A","Spirit Temple":"20","Starlight":"23","Stronghold":"21","The Pedestal":"1E","The Pit":"12","Wicked Dance":"14"}},"Player 1\\Have All\\Medals":{"note":"","data":["810FCB4A FFFF","810FCB4C FFFF","810FCB4E FFFF","800FCB50 0003"],"options":null},"Player 1\\Have All\\Mini Game Icons":{"note":"","data":["800FCB17 0024"],"options":null},"Player 1\\Infinite Ammo":{"note":"","data":["80336535 0063","80336537 0063","80336539 0063","80692B95 0063","80692B97 0063","80692B99 0063","80692B9B 0063","80692B9D 0063","80692B9F 0063","80692BA1 0063"],"options":null},"Player 1\\Infinite\\Cerebral Bores":{"note":"","data":["8033653B 00FF"],"options":null},"Player 1\\Infinite\\Health":{"note":"","data":["81336526 6400","80692B86 0064"],"options":null},"Player 1\\Infinite\\Metal Claws":{"note":"","data":["80336541 00FF"],"options":null},"Player 1\\Infinite\\Proximity Mines":{"note":"","data":["8033653D 00FF"],"options":null},"Player 1\\Infinite\\Sentry Guns":{"note":"","data":["8033653F 00FF"],"options":null},"Player 1\\Infinite\\Time":{"note":"","data":["811407F4 47AF","811407F6 C4B1"],"options":null},"Player 1\\Play As":{"note":"","data":["80140358 00??"],"options":{"Adon":"05","Bastile":"0B","Blind One":"08","Death Guard":"0A","Drone":"02","Elite Guard":"07","Fireborn":"03","Juggernaut":"09","Lord Of The Dead":"06","Mantid":"01","Mites":"12","Monkey":"13","Pur-Lin":"0F","Raptor":"11","Soldier":"04","Symbiont":"10","Syra":"0C","Tail Set":"0E","Turok":"00"}},"Player 1\\Start With Weapon":{"note":"","data":["803366B0 00??"],"options":{"Assault Rifle":"05","Boomerang":"01","Cerebral Bore":"12","Chest Burster":"0F","Emaciator":"0D","Flaregun":"09","Freeze Gun":"08","Grenade Launcher":"0A","Inflator":"0E","Iron Claw":"14","Mag 60":"03","Mini Gun":"06","Mite Bite":"11","Napalm Gel":"0C","PFM Mine":"13","Plasma Rifle":"07","Raptor Claw":"10","Scorpion Launcher":"0B","Sentry Turret":"15","Shotgun":"04","Tek Crossbow":"02","Warhammer":"00"}}},"AE4992C9-9253B253-C:50":{"Access All Secret NASCAR Legends":{"note":"This will give you access to,Alan Kulwicki,Cale Yarborough,Bobby Allison,Davey Allison,Richard Petty,Benny Parsons","data":["50000602 0000","810DF400 0101"],"options":null},"Laps To Race":{"note":"","data":["81044B7E 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7Laps":"07","8 Laps":"08","9 Laps":"09"}}},"AE5B9465-C54D6576-C:50":{"Infinite Options\\Health Commando":{"note":"","data":["810B5364 0080"],"options":null},"Infinite Options\\Money GDI":{"note":"","data":["810C55B6 FFFF"],"options":null},"Infinite Options\\Money NOD":{"note":"","data":["810C575E FFFF"],"options":null},"Infinite Options\\Power GDI":{"note":"","data":["810C55D6 FFFF"],"options":null},"Infinite Options\\Power NOD":{"note":"","data":["810C577E FFFF"],"options":null},"Level Select":{"note":"Select Replay Mission, Press L To Display All Missions,And Press R To Select Your Team You can now press R+L+Up To Win A Battle","data":["810901AA 0001"],"options":null}},"AE82687A-9A3F388D-C:45":{"Always First Place":{"note":"","data":["810BA6DA 0000"],"options":null}},"AE90DBEB-79B89123-C:50":{"Infinite Dinars":{"note":"","data":["800B6663 00E8","800B6662 00E8"],"options":null},"Infinite Health \u0026 Max Health":{"note":"","data":["810CFF5E 03E7","810CFF62 03E7"],"options":null},"Infinite Magic":{"note":"","data":["810B6BEA 0063","810B6BD2 0063","810B6C02 0063","810B6C1A 0063"],"options":null},"Press L to Levitate":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D017D8F5 0020","810CFFB4 44CB"],"options":null}},"AEBCDD54-15FF834A-C:50":{"Extra Bonuses":{"note":"","data":["810EB9EA 270F"],"options":null},"Fake Max Spin Bar?":{"note":"","data":["800EB9C3 0009"],"options":null},"Infinite\\Crate Attempts":{"note":"","data":["800A9C9B 0007"],"options":null},"Infinite\\Gold Pickups":{"note":"","data":["802EB9E8 0064"],"options":null},"Infinite\\Health":{"note":"","data":["800EB9C7 0009"],"options":null}},"AEBE463E-CC71464B-C:45":{"Always 1st":{"note":"","data":["8013FCE0 0001"],"options":null},"Freeze All Lap Timers":{"note":"","data":["8013FCA1 0001","8013FCA5 0001","8013FCA9 0001"],"options":null},"Freeze Overall Timer":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8013FC95 0001"],"options":null},"Laps Of Race":{"note":"","data":["8013FC8E 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","Never Ending Laps":"06"}},"Level Select":{"note":"","data":["8013FF9B 00??"],"options":{"Bikini Island":"01","Canyon Rush":"00","China Town":"02","China Town Jam":"04","Neo Arena":"03","Neo Speed Way":"05"}},"Music Modifier":{"note":"","data":["80109BDC 00??"],"options":{"Music Off":"00","Music On":"FF"}},"No Damage\\Player 1":{"note":"","data":["50000402 0000","8113FFD8 0000"],"options":null},"No Damage\\Player 2":{"note":"","data":["50000402 0000","81142078 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["8013FF95 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Play As\\Player 2":{"note":"","data":["8013FF96 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Unlock Hidden Tracks \u0026 Cars":{"note":"","data":["8008F29C 0001"],"options":null}},"AEEF2F45-F97E30F1-C:45":{"Low Time":{"note":"","data":["800BA390 0001"],"options":null},"Max Attack Power-Fighters Arena":{"note":"","data":["801FBF6E 00C7"],"options":null},"Max Health Power-Fighters Arena":{"note":"","data":["801FBF6F 00C7"],"options":null},"Max Recovery-Fighters Arena":{"note":"","data":["801FBF70 00C7"],"options":null},"P1 Always Lose Judging":{"note":"","data":["801F727A 0000"],"options":null},"P1 Always Win Judging":{"note":"","data":["801F727A 00FF"],"options":null},"P2 Always Lose Judging":{"note":"","data":["801F53AE 0000"],"options":null},"P2 Always Win Judging":{"note":"","data":["801F53AE 00FF"],"options":null}},"AF7C97CF-24755D18-C:00":{"Infinite 9 Credits":{"note":"","data":["80091A0B 0009"],"options":null}},"AF8679B6-5E1011BF-C:4A":{"Freeze Round Timer":{"note":"","data":["8009D4B4 0000"],"options":null},"Player 1\\Infinite Health":{"note":"","data":["81105026 03E8"],"options":null},"Player 1\\Max Tech Points":{"note":"","data":["811071A0 000F","811071A2 423F","811071A4 000F","811071A6 423F","811071A8 0000","811071AA 0000","811071AC 000F","811071AE 423F"],"options":null},"Player 2\\Infinite Health":{"note":"","data":["8111B3BE 03E8"],"options":null},"Player 2\\Max Tech Points":{"note":"","data":["8111D538 000F","8111D53A 423F","8111D53C 000F","8111D53E 423F","8111D540 0000","8111D542 0000","8111D544 000F","8111D546 423F"],"options":null},"{Unlock All Extras }":{"note":"","data":["8009D48F 00FF"],"options":null}},"B00903C9-3916C146-C:4A":{"Always 1st":{"note":"","data":["8013CC10 0001"],"options":null},"Freeze All Lap Timers":{"note":"","data":["8013CBD1 0001","8013CBD5 0001","8013CBD9 0001"],"options":null},"Freeze Overall Timer":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8013CBC5 0001"],"options":null},"Laps Of Race":{"note":"","data":["8013CBBE 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","Never Ending Laps":"06"}},"Level Select":{"note":"For this cheat to work,as soon as you put the cheat on you must turn it back off,if not you wont beable to quit a Race or even finish one.","data":["8013CECB 00??"],"options":{"Bikini Island":"01","Canyon Rush":"00","China Town":"02","China Town Jam":"04","Neo Arena":"03","Neo Speed Way":"05"}},"Music Modifier":{"note":"","data":["80106B7C 00??"],"options":{"Music Off":"00","Music On":"FF"}},"No Damage\\Player 1":{"note":"","data":["50000402 0000","8113CF08 0000"],"options":null},"No Damage\\Player 2":{"note":"","data":["50000402 0000","8113EF98 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["8013CEC5 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Play As\\Player 2":{"note":"","data":["8013CEC6 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Unlock All Tracks and Vehicles":{"note":"","data":["8008D0AC 0001"],"options":null}},"B044B569-373C1985-C:50":{"Always Have Wallet Size":{"note":"","data":["80118472 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C64F5 0010","81119736 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["801192B9 00FF","8011972F 00??"],"options":{"Off":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C64F5 0000","801197E3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["80023414 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["80118456 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["80118457 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["80118458 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["80118459 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023D6DF 0020","8023D6E5 0033"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F12C8 0005","801EDD08 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["80118472 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["80118473 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["80118471 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111846C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["81118474 30FF","81118476 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["80118448 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011844E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["80118454 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011844C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["80118446 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["80118450 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["80118445 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["80118444 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["80118447 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011844A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011844D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["80118451 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["80118452 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["80118449 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011844F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["80118455 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["80118453 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011844B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011845F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["50000B01 0000","80118478 0007","50000501 0000","8011848F 0009","80118497 0009","80118499 0009","8011849C 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["80118464 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011845E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011845D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["80118462 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011845C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118400 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118409 0008","8011840A 0001","8011840C 0001","80118403 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011846A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111979C 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["801197A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["801197A5 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C64F5 0020","811D8AE0 40CB","D01C64F5 0000","811D92F2 000D","80118440 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["801197D9 00??"],"options":{"English":"00","French":"02","German":"01"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011849F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["801184A1 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["811183FE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["801D851B ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C64F5 0020","811D92F2 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C64F5 0020","811D8AE0 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C64F5 0010","801183D7 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["811183DC ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011845A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011845B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["80118440 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011840E 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["811195F2 0000","811195F4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119765 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119765 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119765 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119765 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"B088FBB4-441E4B1D-C:50":{"Access\\All Lures":{"note":"Codes To Be Used With Save Slot 1","data":["8019A1A9 0003","8119A1AA FFFF"],"options":null},"Access\\All Poles 2":{"note":"Codes To Be Used With Slot 1","data":["8019A1AC 0007"],"options":null},"Access\\Extra Boat 2":{"note":"Codes To Be Used With Slot 1","data":["8019A1AD 0001"],"options":null},"All Lakes Available":{"note":"","data":["80119800 0001"],"options":null},"Easy Win Current Tournament":{"note":"","data":["8011980F 0001"],"options":null},"Extra $300":{"note":"","data":["8011980B 0001"],"options":null},"Fish Are More Active":{"note":"","data":["80119807 0001"],"options":null},"Large Fish":{"note":"","data":["80119806 0001"],"options":null},"More fish in Lakes":{"note":"","data":["8011980D 0001"],"options":null},"No Penalties During Tournamet":{"note":"","data":["80119808 0001"],"options":null},"No Snags While Fishing":{"note":"","data":["80119809 0001"],"options":null},"Super Lure":{"note":"","data":["8011980E 0001"],"options":null},"Unbreakable Line":{"note":"","data":["80119805 0001"],"options":null}},"B19AD999-7E585118-C:45":{"Have\\Alpine Challenge Track":{"note":"","data":["801256DF 0001"],"options":null},"Have\\Aztec Valley Track":{"note":"","data":["801256BF 0001"],"options":null},"Have\\Death Trap Track":{"note":"","data":["801256FF 0001"],"options":null},"Infinite Missiles (Upon Pickup)":{"note":"","data":["D0164BBF 0001","801A6054 0009"],"options":null}},"B2055FBD-0BAB4E0C-C:50":{"Always Have Wallet Size":{"note":"","data":["801184B2 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C6535 0010","81119776 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["801192F9 00FF","8011976F 00??"],"options":{"Off":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C6535 0000","80119823 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["80023454 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["80118496 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["80118497 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["80118498 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["80118499 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023D71F 0020","8023D725 0033"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1308 0005","801EDD48 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801184B2 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801184B3 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801184B1 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811184AC 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811184B4 30FF","811184B6 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["80118488 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011848E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["80118494 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011848C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["80118486 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["80118490 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["80118485 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["80118484 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["80118487 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011848A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011848D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["80118491 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["80118492 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["80118489 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011848F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["80118495 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["80118493 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011848B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011849F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["50000B01 0000","801184B8 0007","50000501 0000","801184CF 0009","801184D7 0009","801184D9 0009","801184DC 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801184A4 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011849E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011849D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801184A2 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011849C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118440 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118449 0008","8011844A 0001","8011844C 0001","80118443 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801184AA 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["811197DC 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["801197E1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["801197E5 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C6535 0020","811D8B20 40CB","D01C6535 0000","811D9332 000D","80118480 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119819 00??"],"options":{"English":"00","French":"02","German":"01"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["801184DF 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["801184E1 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111843E 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["811197D8 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C6535 0020","811D9332 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C6535 0020","811D8B20 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C6535 0010","80118417 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111841C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011849A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011849B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["80118480 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011844E 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119632 0000","81119634 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"B20F73B6-2975FC34-C:45":{"Enemies Fight Themselves":{"note":"","data":["8005EE9C 0020"],"options":null},"Have\\All Weapons \u0026 Ammo":{"note":"","data":["8115D06E 0001","8116368E 0001"],"options":null},"Have\\Invisible Soldier":{"note":"you are Invisible to most enimies who just can not dectect or see you.","data":["8115D052 0001"],"options":null},"Have\\Large Mode":{"note":"Do not use with Mini Mode only use one at a time","data":["811636AE 0001"],"options":null},"Have\\Mini Mode":{"note":"Do not use with Big Mode only use one at a time","data":["8115D06A 0001"],"options":null},"Infinite\\Continues":{"note":"","data":["8115D062 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8135C516 0600"],"options":null},"Move Faster":{"note":"","data":["800B9705 00FF","800B9749 00FF"],"options":null},"Play Level":{"note":"","data":["81172C0A 0001","810B51AE 00??"],"options":{"Bed":"0B","Bridge":"02","Cashier":"0D","Castle":"07","Desk":"0A","Dinner":"01","Freezer":"04","Fridge":"03","Graveyard":"06","Insidewall":"05","Pinball":"11","Pool":"10","Revenge":"09","Rockets":"0F","Tanbase":"08","Town":"0C","Train":"0E"}},"Play as":{"note":"","data":["81164372 00??"],"options":{"Big Green One":"07","Hail Mendheimicus":"0C","Mini Soldier":"0D","Mystery Women":"0B","Plastro":"09","Vikki":"08"}}},"B210DF19-98B58D1A-C:50":{"Access\\All Guns":{"note":"","data":["8015E0CF 0001"],"options":null},"Access\\Max Ammo":{"note":"","data":["801646EF 0001"],"options":null},"Enable Cheat Menu":{"note":"Enable before you enter in game and you will find the cheat menu when you press the Start Button","data":["8003F36F 0003","8004719F 0003"],"options":null},"Enable Level Select Menu":{"note":"This must be used with Enable Cheat Menu and enabled before you enter in game and you will find the level select menu replaces the cheat menu when you press the Start Button","data":["810AF0BA DC38"],"options":null},"Have\\Debug Mode":{"note":"When this code is activated, a display of numbers will show on the screen as the players move around","data":["8015E417 0001"],"options":null},"Have\\Large Mode":{"note":"Do not use with Mini Mode only use one at a time","data":["8016470F 0001"],"options":null},"Have\\Mini Mode":{"note":"Do not use with Large Mode only use one at a time","data":["8015E0C9 0001"],"options":null},"Infinite\\Continues":{"note":"","data":["8015E0C3 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8016471F 0001"],"options":null},"Invisible Soldier":{"note":"you are Invisible to most enimies who just can not dectect or see you.","data":["8015E0B3 0001"],"options":null},"Play As":{"note":"Here you can choose who you would like to play as. But Do not use this with any other play as option..","data":["811653D2 00??"],"options":{"Plastro":"09","The Big Green One":"07","Vikki":"08"}}},"B2242748-FFBD61DA-C:45":{"(Everything Unlocked)\\Save File 1":{"note":"This Unlocks All Levels and Cheat Menu Items","data":["50002902 0000","810699EE ????"],"options":{"Clear Save Slot":"0000","Unlocked":"FFFF"}},"(Everything Unlocked)\\Save File 2":{"note":"This Unlocks All Levels and Cheat Menu Items","data":["50002902 0000","8106992E ????"],"options":{"Clear Save Slot":"0000","Unlocked":"FFFF"}},"(Everything Unlocked)\\Save File 3":{"note":"This Unlocks All Levels and Cheat Menu Items","data":["50002902 0000","81069A4E ????"],"options":{"Clear Save Slot":"0000","Unlocked":"FFFF"}},"(Everything Unlocked)\\Save File 4":{"note":"This Unlocks All Levels and Cheat Menu Items","data":["50002902 0000","8106998E ????"],"options":{"Clear Save Slot":"0000","Unlocked":"FFFF"}},"Have All\\64 Characters In Multi Player":{"note":"Enables all Characters selectable to play as in Multi-Player","data":["8002B197 0040"],"options":null},"Have All\\Objectives Complete":{"note":"","data":["80036FD3 0001"],"options":null},"Infinite\\Ammo (All Levels)":{"note":"","data":["80079E3B 0001"],"options":null},"Infinite\\Health (All levels)":{"note":"","data":["8100C0F4 0801","8100C0F6 8090","8100C0F8 AFA4","8100C0FA 0000","81060240 0004","81060242 7600","81060244 3C02","81060246 8008","81060248 8C42","8106024A 9EE0","8106024C 3401","8106024E 3F80","81060250 A441","81060252 00DC","81060254 0800","81060256 303F"],"options":null}},"B30ED978-3003C9F9-C:45":{"Cool Camera":{"note":"","data":["800E523E 0000"],"options":null},"Expert Mode":{"note":"","data":["800E5ED9 0000","812C4B48 0000","812C4B4C 0000"],"options":null},"Have Boost From Start":{"note":"","data":["D02C4DAC 003F","802C4925 0050"],"options":null},"Hunk O' Junk":{"note":"","data":["802C4B3F 0040"],"options":null},"Infinite Lives":{"note":"","data":["800E5ED9 0005"],"options":null},"Max Grand Prix Points":{"note":"","data":["812C492A FFFF"],"options":null},"Max Shield":{"note":"","data":["812C4B4C 4326"],"options":null},"One Lap To Race":{"note":"","data":["D02C4BC9 0000","812C4BC8 0002","D02C4BCB 0001","812C4BCA 0002"],"options":null},"Player 1\\Car Color Modifier":{"note":"","data":["802C4BED 00??"],"options":{"1st Color":"00","2nd Color":"01","3rd Color":"02","4th Color":"03","Hidden Color":"05"}},"Player 1\\Character Modifier":{"note":"","data":["800E5EE1 00??"],"options":{"Antonio Guster":"0E","Baba":"07","Beastman":"15","Billy":"1B","Bio Rex":"19","Black Shadow":"0F","Blood Falcon":"1D","Captain Falcon":"00","Dr. Clash":"17","Dr. Stewart":"01","Draq":"1A","Gomar + Shioh":"09","Jack Levin":"11","James McCloud":"0C","Jody Summer":"04","John Tanaka":"14","Kate Alen":"0A","Leon":"0D","Michael Chain":"10","Mighty Gazelle":"05","Mr. EAD":"06","Mrs. Arrow":"13","Octoman":"08","Perfect Captain Falcon":"1E","Pico":"02","Roger Buster":"0B","Samurai Goroh":"03","Silver Neelsen":"18","Super Arrow":"12","The Skull":"1C","Zoda":"16"}},"Player 1\\Infinite Shield":{"note":"","data":["812C4B48 4326"],"options":null},"Player 1\\Invisible Car":{"note":"Vs. Mode Only","data":["802C4CCB 0000"],"options":null},"Player 2\\Car Color Modifier":{"note":"","data":["802C4F95 00??"],"options":{"1st Color":"00","2nd Color":"01","3rd Color":"02","4th Color":"03","Hidden Color":"05"}},"Player 2\\Character Modifier":{"note":"","data":["802C4F90 00??"],"options":{"Antonio Guster":"0E","Baba":"07","Beastman":"15","Billy":"1B","Bio Rex":"19","Black Shadow":"0F","Blood Falcon":"1D","Captain Falcon":"00","Dr. Clash":"17","Dr. Stewart":"01","Draq":"1A","Gomar + Shioh":"09","Jack Levin":"11","James McCloud":"0C","Jody Summer":"04","John Tanaka":"14","Kate Alen":"0A","Leon":"0D","Michael Chain":"10","Mighty Gazelle":"05","Mr. EAD":"06","Mrs. Arrow":"13","Octoman":"08","Perfect Captain Falcon":"1E","Pico":"02","Roger Buster":"0B","Samurai Goroh":"03","Silver Neelsen":"18","Super Arrow":"12","The Skull":"1C","Zoda":"16"}},"Player 2\\Infinite Shield":{"note":"","data":["812C4EF0 4326"],"options":null},"Player 3\\Car Color Modifier":{"note":"","data":["802C533D 00??"],"options":{"1st Color":"00","2nd Color":"01","3rd Color":"02","4th Color":"03","Hidden Color":"05"}},"Player 3\\Character Modifier":{"note":"","data":["802C5338 00??"],"options":{"Antonio Guster":"0E","Baba":"07","Beastman":"15","Billy":"1B","Bio Rex":"19","Black Shadow":"0F","Blood Falcon":"1D","Captain Falcon":"00","Dr. Clash":"17","Dr. Stewart":"01","Draq":"1A","Gomar + Shioh":"09","Jack Levin":"11","James McCloud":"0C","Jody Summer":"04","John Tanaka":"14","Kate Alen":"0A","Leon":"0D","Michael Chain":"10","Mighty Gazelle":"05","Mr. EAD":"06","Mrs. Arrow":"13","Octoman":"08","Perfect Captain Falcon":"1E","Pico":"02","Roger Buster":"0B","Samurai Goroh":"03","Silver Neelsen":"18","Super Arrow":"12","The Skull":"1C","Zoda":"16"}},"Player 3\\Infinite Shield":{"note":"","data":["812C5298 4326"],"options":null},"Player 4\\Car Color Modifier":{"note":"","data":["802C56E5 00??"],"options":{"1st Color":"00","2nd Color":"01","3rd Color":"02","4th Color":"03","Hidden Color":"05"}},"Player 4\\Character Modifier":{"note":"","data":["802C56E0 00??"],"options":{"Antonio Guster":"0E","Baba":"07","Beastman":"15","Billy":"1B","Bio Rex":"19","Black Shadow":"0F","Blood Falcon":"1D","Captain Falcon":"00","Dr. Clash":"17","Dr. Stewart":"01","Draq":"1A","Gomar + Shioh":"09","Jack Levin":"11","James McCloud":"0C","Jody Summer":"04","John Tanaka":"14","Kate Alen":"0A","Leon":"0D","Michael Chain":"10","Mighty Gazelle":"05","Mr. EAD":"06","Mrs. Arrow":"13","Octoman":"08","Perfect Captain Falcon":"1E","Pico":"02","Roger Buster":"0B","Samurai Goroh":"03","Silver Neelsen":"18","Super Arrow":"12","The Skull":"1C","Zoda":"16"}},"Player 4\\Infinite Shield":{"note":"","data":["812C5640 4326"],"options":null},"Show 30 Cars Out Of 1 Position":{"note":"","data":["800E5FC7 001D"],"options":null},"Super Ultimate Mega Fast Mode":{"note":"","data":["812C4984 2222"],"options":null},"Time Always 00.00.00/1st Place":{"note":"","data":["802C4BC0 0000","802C4BC2 0001"],"options":null},"Track Modifier":{"note":"","data":["800F8517 00??"],"options":{"Big Blue":"04","Big Blue 2":"0A","Big Hand":"17","Devils Forest":"03","Devils Forest 2":"08","Devils Forest 3":"13","Fire Field":"0C","Mute City":"00","Mute City 2":"11","Port Town":"05","Port Town 2":"16","Rainbow Road":"12","Red Canyon":"0F","Sand Ocean":"02","Sand Ocean 2":"15","Sector Alpha":"06","Sector Beta":"0E","Silence":"01","Silence 2":"0D","Space Plant":"14","White Land":"0B","White Land 2":"10"}},"Unlock Everything":{"note":"","data":["800CD3C8 0001"],"options":null}},"B323E37C-BBC35EC4-C:00":{"Have Infinite Max Credits":{"note":"","data":["802C9FE1 0099"],"options":null}},"B3402554-7340C004-C:45":{"Car Upgrades\\'63 Muscle Car":{"note":"","data":["8015056F 0005"],"options":null},"Car Upgrades\\All-Terrain Vehicle":{"note":"","data":["8015057F 0004"],"options":null},"Car Upgrades\\Devastator":{"note":"","data":["80150577 0005"],"options":null},"Car Upgrades\\Italia P69":{"note":"","data":["8015057B 0005"],"options":null},"Car Upgrades\\La Bomba":{"note":"","data":["80150573 0005"],"options":null},"Car Upgrades\\Police Car":{"note":"","data":["80150587 0004"],"options":null},"Car Upgrades\\School Bus":{"note":"","data":["80150583 0004"],"options":null},"Infinite Time":{"note":"","data":["8015097D 0095"],"options":null},"Play Level Modifier":{"note":"","data":["80150993 00??"],"options":{"Appalachia":"0C","Arizona":"07","Beverly Hills":"04","Chicago":"0A","Cruise The USA":"0E","Death Valley":"06","Golden Gate Park":"00","Grand Canyon":"08","Indiana":"0B","Iowa":"09","LA Freeway":"05","Redwood Forest":"03","San Francisco":"01","US 101":"02","Washington DC":"0D"}},"Player 1\\Always First Place":{"note":"","data":["8015025B 0001"],"options":null},"Player 1\\Always Have Fastest Car":{"note":"","data":["8015024A 0001"],"options":null},"Player 1\\Gearbox Type Modifier":{"note":"","data":["80150243 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 1\\Lights \u0026 Sirens For Police Car \u0026 School Bus":{"note":"","data":["8115056A 0001","8114E3BA 0001"],"options":null},"Player 2\\Always First Place":{"note":"","data":["801505F7 0001"],"options":null},"Player 2\\Always Have Fastest Car":{"note":"","data":["801505E6 0001"],"options":null},"Player 2\\Gearbox Type Modifier":{"note":"","data":["801505DF 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 2\\Lights \u0026 Sirens For Police Car \u0026 School Bus":{"note":"","data":["81150906 0001","8114E3D2 0001"],"options":null},"Stop Elapsed Time And No Traffic":{"note":"","data":["80150979 0000"],"options":null}},"B35FEBB0-7427B204-C:46":{"Earn Spirits Faster":{"note":"","data":["8007D3AD 0000"],"options":null},"Have All Elements":{"note":"","data":["8107D39C 3232","8107D39E 3232"],"options":null},"Makes your HP 999-999":{"note":"","data":["8107D37C 03E7","8107D37E 03E7"],"options":null},"Makes your MP 999-999":{"note":"","data":["8107D380 03E7","8107D382 03E7"],"options":null},"No Random Battles":{"note":"","data":["8008DE6C 0000","8008DE6E 0000"],"options":null},"Set Agility to 999-999":{"note":"","data":["8107D384 03E7"],"options":null},"Set Defence to 999-999":{"note":"","data":["8107D386 03E7"],"options":null}},"B3D451C6-E1CB58E2-C:4A":{"Decrease Fodder":{"note":"","data":["81180BB4 03E7"],"options":null},"Decrease Material":{"note":"","data":["8118A2F0 03E7"],"options":null},"Max Money":{"note":"","data":["811FDA9C 000F","811FDA9E 423F"],"options":null}},"B443EB08-4DB31193-C:45":{"All Equipment Upgrades":{"note":"","data":["801ED89D 0023","811ED8EA 201B","801ED87C 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D038127B 0000","801ED832 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801ED8B2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801ED8B3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801ED8B4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801ED8B5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801ED8B6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801ED8B7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801ED8A5 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801ED8AB 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801ED8B1 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Fight Demo Majora's Mask":{"note":"With this code,load the game \u0026 put the cheat on. then press start to apear in the Demo mode.","data":["801688D8 0020"],"options":null},"Fog\\Blue":{"note":"","data":["801642C8 0020"],"options":null},"Fog\\Pink":{"note":"","data":["801642CC 0020"],"options":null},"Fog\\Yellow":{"note":"","data":["801642D0 0020"],"options":null},"Have\\All Masks":{"note":"","data":["801ED8B8 003E","801ED8B9 0038","801ED8BA 0047","801ED8BB 0045","801ED8BC 0040","801ED8BD 0032","801ED8BE 003A","801ED8BF 0046","801ED8C0 0039","801ED8C1 0042","801ED8C2 0048","801ED8C3 0033","801ED8C4 003C","801ED8C5 003D","801ED8C6 0037","801ED8C7 003F","801ED8C8 0036","801ED8C9 0034","801ED8CA 0043","801ED8CB 0041","801ED8CC 003B","801ED8CD 0044","801ED8CE 0049","801ED8CF 0035"],"options":null},"Have\\All Quest Status Items":{"note":"","data":["801ED8ED 0005","811ED8EE F7CF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801ED8A2 0002"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801ED8A3 0003"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801ED8A4 0004"],"options":null},"Have\\Bombchu":{"note":"","data":["801ED8A7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801ED8A6 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801ED8A9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801ED8A8 0008"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801ED8B0 0010"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801ED8A1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801ED8AF 000F"],"options":null},"Have\\Item Modifier":{"note":"","data":["801ED8B0 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\Lens of Truth":{"note":"","data":["801ED8AE 000E"],"options":null},"Have\\Magic Beans":{"note":"","data":["801ED8AA 000A"],"options":null},"Have\\Ocarina of Time":{"note":"","data":["801ED8A0 0000"],"options":null},"Have\\Pictograph":{"note":"","data":["801ED8AD 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801ED8AC 000C"],"options":null},"Infinite\\Health":{"note":"","data":["811ED866 0140"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811ED864 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"","data":["801ED8D1 0063","50000501 0000","801ED8D6 0063","50000201 0000","801ED8DC 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801ED869 0060","811ED870 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811ED86A 03E7"],"options":null},"Maximum Visibility":{"note":"","data":["801642D8 0020"],"options":null},"Play As":{"note":"","data":["801ED850 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D038127B 0020","8139A558 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You have been warned.","data":["801ED87C 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F88A0 0008","811ED846 FFFD","D01F88A0 0004","811ED846 0000","D01F88A0 0002","811ED846 FFFE"],"options":null},"Use C-Buttons Anywhere":{"note":"This code allows you to use C-Button Items where you normally can't use them.","data":["811F1748 0000","811F174A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["D03E4CFA 0000","803FD555 0001","813FD55A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"B44CAB74-07029A29-C:50":{"For More Time Press D-pad up":{"note":"","data":["D00EA380 0008","8115F0D2 1724","D00EA380 0008","8115F0DA 003C"],"options":null},"Infinite Options\\Freezing Breath":{"note":"","data":["8122CDE8 42C8"],"options":null},"Infinite Options\\Health":{"note":"","data":["8122CDD4 42C8"],"options":null},"Infinite Options\\Laser Eye":{"note":"","data":["8122CDE4 42C8"],"options":null},"Infinite Options\\Running Boosts":{"note":"","data":["8122CDDC 42C8"],"options":null},"Infinite Options\\X-Ray Vision":{"note":"","data":["8122CDE0 42C8"],"options":null},"Level Select":{"note":"","data":["D00EA380 0020","8117A378 0013","D00EA380 0020","8117A388 000F","81144727 0063"],"options":null}},"B54CE881-BCCB6126-C:45":{"Hole In One\\Hole 01":{"note":"","data":["800FF713 0000"],"options":null},"Hole In One\\Hole 02":{"note":"","data":["800FF715 0000"],"options":null},"Hole In One\\Hole 03":{"note":"","data":["800FF717 0000"],"options":null},"Hole In One\\Hole 04":{"note":"","data":["800FF719 0000"],"options":null},"Hole In One\\Hole 05":{"note":"","data":["800FF71B 0000"],"options":null},"Hole In One\\Hole 06":{"note":"","data":["800FF71D 0000"],"options":null},"Hole In One\\Hole 07":{"note":"","data":["800FF71F 0000"],"options":null},"Hole In One\\Hole 08":{"note":"","data":["800FF721 0000"],"options":null},"Hole In One\\Hole 09":{"note":"","data":["800FF723 0000"],"options":null},"Hole In One\\Hole 10":{"note":"","data":["800FF725 0000"],"options":null},"Hole In One\\Hole 11":{"note":"","data":["800FF727 0000"],"options":null},"Hole In One\\Hole 12":{"note":"","data":["800FF729 0000"],"options":null},"Hole In One\\Hole 13":{"note":"","data":["800FF72B 0000"],"options":null},"Hole In One\\Hole 14":{"note":"","data":["800FF72D 0000"],"options":null},"Hole In One\\Hole 15":{"note":"","data":["800FF72F 0000"],"options":null},"Hole In One\\Hole 16":{"note":"","data":["800FF731 0000"],"options":null},"Hole In One\\Hole 17":{"note":"","data":["800FF733 0000"],"options":null},"Hole In One\\Hole 18":{"note":"","data":["800FF735 0000"],"options":null}},"B58988E9-B1FC4BE8-C:50":{"Always 1st":{"note":"","data":["812C4DC6 0001"],"options":null},"Have All\\Races":{"note":"","data":["812B5DC4 0101","812B5DC6 0101","812B5DC8 0101","812B5DCA 0101","812B5DCC 0101","812B5DCE 0101","812B5DD0 0101"],"options":null},"Have All\\Ships":{"note":"","data":["812B5DD2 0101","812B5DD4 0101","812B5DD6 0101","812B5DD8 0101","812B5DDA 0101","812B5DDC 0101","812B5DDE 0101"],"options":null},"Infinite\\Boosts\\Player 1":{"note":"","data":["812C4DCC 4190"],"options":null},"Infinite\\Boosts\\Player 2":{"note":"","data":["812C50FC 4190"],"options":null},"Infinite\\Time":{"note":"","data":["812B49C0 42C8"],"options":null}},"B6524461-ED6D04B1-C:50":{"Infinite Health\\Player 1":{"note":"","data":["80225E9D 00FA"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["80225E9F 00FA"],"options":null},"Infinite Time":{"note":"","data":["80225EA5 003C"],"options":null},"Win Once To Win\\Player 1":{"note":"","data":["80225E95 0001"],"options":null},"Win Once To Win\\Player 2":{"note":"","data":["80225E97 0001"],"options":null}},"B6951A94-63C849AF-C:4A":{"Have All Items":{"note":"","data":["50000501 0000","80389C4A 0001","50000301 0000","80389C51 0001","80389C5A 0001","80389C5B 0001","80389C5D 0001","50000E01 0000","80389C60 0001"],"options":null},"Have\\Exp Points":{"note":"","data":["80389C49 0063"],"options":null},"Have\\Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C3F 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C45 0001","81389C46 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C3E 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C49 0063"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C48 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the GS button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C90 ????","89389C92 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CED 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C88 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C88 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C3D 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C42 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"B6BC0FB0-E3812198-C:4A":{"All Levels\\Infinite\\Energy":{"note":"","data":["800D5A9B 00FF"],"options":null},"All Levels\\Infinite\\Max Credits":{"note":"","data":["80075DDC 00FF"],"options":null},"All Levels\\Infinite\\Time":{"note":"","data":["800D5A97 0063"],"options":null},"All Levels\\Unlock All\\Levels - Options Menu":{"note":"","data":["80075DD6 FFFF","80075DD7 FFFF"],"options":null},"All Levels\\Unlock All\\Option Menu Items":{"note":"","data":["80075DD8 FFFF","80075DD9 FFFF"],"options":null},"Level\\0-0\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["8010BB0C 0000"],"options":null},"Level\\0-0\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8010BB2B 0001"],"options":null},"Level\\1-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801657DC 0000"],"options":null},"Level\\1-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801657FB 0001"],"options":null},"Level\\1-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCF9C 0000"],"options":null},"Level\\1-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCFBB 0001"],"options":null},"Level\\1-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801126EC 0000"],"options":null},"Level\\1-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8011270B 0001"],"options":null},"Level\\2-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BD29C 0000"],"options":null},"Level\\2-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801BD2BB 0001"],"options":null},"Level\\2-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B911C 0000"],"options":null},"Level\\2-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B913B 0001"],"options":null},"Level\\2-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7CEC 0000"],"options":null},"Level\\2-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7D0B 0001"],"options":null},"Level\\3-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801588EC 0000"],"options":null},"Level\\3-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8015890B 0001"],"options":null},"Level\\3-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B936C 0000"],"options":null},"Level\\3-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B938B 0001"],"options":null},"Level\\3-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801013CC 0000"],"options":null},"Level\\3-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["81100E08 C350"],"options":null}},"B703EB23-28AAE53A-C:4A":{"Infinite\\Lives":{"note":"","data":["800A37C8 0009"],"options":null},"Infinite\\Specials":{"note":"","data":["800A37C9 0003"],"options":null},"Max\\Combo":{"note":"","data":["810A37C4 7FFF"],"options":null},"Max\\Lower Level":{"note":"","data":["800A37D8 0003"],"options":null},"Max\\Score":{"note":"","data":["800A37A8 03E7","800A37A9 03E7"],"options":null},"Max\\Upper Level":{"note":"","data":["800A37D9 0063"],"options":null},"Play As":{"note":"","data":["800A37CC 00??"],"options":{"Character 1":"00","Character 2":"01","Character 3":"02"}},"Status Modifier":{"note":"","data":["800A37CA 00??"],"options":{"High":"01","Low":"03","Mid":"02"}}},"B73AB6F6-296267DD-C:45":{"All Levels\\Infinite\\Energy":{"note":"","data":["800D5A9B 00FF"],"options":null},"All Levels\\Infinite\\Max Credits":{"note":"","data":["80075DDC 00FF"],"options":null},"All Levels\\Infinite\\Time":{"note":"","data":["800D5A97 0063"],"options":null},"All Levels\\Unlock All\\Levels - Options Menu":{"note":"","data":["80075DD6 FFFF","80075DD7 FFFF"],"options":null},"All Levels\\Unlock All\\Option Menu Items":{"note":"","data":["80075DD8 FFFF","80075DD9 FFFF"],"options":null},"Level\\0-0\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time and only use for that specific level Cheat","data":["8010BB0C 0000"],"options":null},"Level\\0-0\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8010BB2B 0001"],"options":null},"Level\\1-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801657DC 0000"],"options":null},"Level\\1-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801657FB 0001"],"options":null},"Level\\1-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCF9C 0000"],"options":null},"Level\\1-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCFBB 0001"],"options":null},"Level\\1-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801126EC 0000"],"options":null},"Level\\1-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8011270B 0001"],"options":null},"Level\\2-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BD29C 0000"],"options":null},"Level\\2-1\\Invincible":{"note":"","data":["801BD2BB 0001"],"options":null},"Level\\2-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B911C 0000"],"options":null},"Level\\2-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B913B 0001"],"options":null},"Level\\2-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7CEC 0000"],"options":null},"Level\\2-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7D0B 0001"],"options":null},"Level\\3-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801588EC 0000"],"options":null},"Level\\3-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8015890B 0001"],"options":null},"Level\\3-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B936C 0000"],"options":null},"Level\\3-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B938B 0001"],"options":null},"Level\\3-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801013CC 0000"],"options":null},"Level\\3-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["81100E08 C350"],"options":null}},"B7CF2136-FA0AA715-C:50":{"Access All In-Game Cheats":{"note":"In Set-Up Menu","data":["810C48F8 0100"],"options":null},"Access Midway Track":{"note":"","data":["810C4890 03E7"],"options":null},"Activate All In-Game Cheats":{"note":"","data":["50000E02 0000","810C48A4 FFFF"],"options":null},"All Keys,Cars \u0026 Cans":{"note":"","data":["50000E02 0000","810C4574 FFFF"],"options":null},"Always 1st":{"note":"","data":["80115499 0000"],"options":null},"Best Stunt Points":{"note":"On Track","data":["8110B438 03E7"],"options":null},"Easy Difficulty":{"note":"","data":["8010FFAA 0000"],"options":null},"Laps To Race":{"note":"","data":["811088D0 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Max \u0026 Best Score":{"note":"On Stunt Track","data":["50000502 0000","810C4702 FFFF"],"options":null},"Max Points In Total":{"note":"","data":["810E235A 03E7"],"options":null},"No\\Checkpoints Extended Time":{"note":"","data":["8010FF47 0000"],"options":null},"No\\Wind":{"note":"","data":["80116E98 0000"],"options":null},"Number Of Drones In Race":{"note":"","data":["810E1B88 00??"],"options":{"1 Drone":"01","2 Drones":"02","3 Drones":"03","4 Drones":"04","5 Drones":"05","6 Drones":"06","7 Drones":"07","8 Drones":"08","9 Drones":"09"}}},"B7F40BCF-553556A5-C:45":{"Have Spells\\Ball Bearing":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA67C 0006"],"options":null},"Have Spells\\Balloon":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA7BC 0006"],"options":null},"Have Spells\\Bowling Ball":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA5FC 0006"],"options":null},"Have Spells\\Boxing Glove":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA8BC 000E"],"options":null},"Have Spells\\Bungee":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA77C 000E"],"options":null},"Have Spells\\Fat Glover":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA97C 001E"],"options":null},"Have Spells\\First Aid":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA93C 001E"],"options":null},"Have Spells\\Gauntlet":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA87C 001E"],"options":null},"Have Spells\\Glass Cutter":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA8FC 000E"],"options":null},"Have Spells\\Possess":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA83C 0006"],"options":null},"Have Spells\\Rubber Ball":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["801DA5BC 0006"],"options":null},"Have Spells\\Speed-Up":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA6FC 000E"],"options":null},"Have Spells\\Sucker Ball":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA63C 000E"],"options":null},"Have Spells\\Super-Slam":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA7FC 0016"],"options":null},"Have Spells\\Teleport":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA73C 000E"],"options":null},"Have Spells\\Yo-Yo":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA6BC 0016"],"options":null},"Infinite\\Max Health":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["8027069B 0006","8027069D 0006","802881CB 0006"],"options":null},"Infinite\\Max Lives":{"note":"","data":["80288127 00FF","80270697 00FF"],"options":null},"Infinite\\Max Magical\\Ball Energy":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["802706A3 00FF","80288313 00FF"],"options":null},"Infinite\\Max Magical\\Spell Energy":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["802706A1 00FF","8028826F 00FF"],"options":null},"Infinite\\Max Rank Bonus":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["802706FD 00FF","802883B7 00FF"],"options":null}},"B8F0BD03-4479189E-C:50":{"Access All Tracks In Match Mode":{"note":"","data":["50000602 0000","810A9080 0001"],"options":null},"Access all Gold Trophies":{"note":"Championshp \u0026 Match Mode","data":["50000602 0000","810A9078 0000"],"options":null},"Always 1st":{"note":"","data":["800A9107 0000"],"options":null},"Infinite Time":{"note":"","data":["8009498F 003C"],"options":null}},"B9A9ECA2-17AAE48E-C:45":{"Always Place 1st":{"note":"","data":["80152906 0000"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 1":{"note":"","data":["8113A110 FFFF"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 2":{"note":"","data":["8113A170 FFFF"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 4":{"note":"","data":["8113A230 FFFF"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 5":{"note":"","data":["8113A290 FFFF"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 6":{"note":"","data":["8113A2F0 FFFF"],"options":null},"Infinate Ammo\\All Players In Battle":{"note":"","data":["80152B9D 0050","80152F55 0050","8015330D 0050","801536C5 0050"],"options":null},"Max Score\\Stunt Mode":{"note":"","data":["8115204E 7FFF"],"options":null},"Speed Activator":{"note":"","data":["D0037AA4 0020","8114A298 ????"],"options":{"146 mph":"4333","170 mph":"4350","210 mph":"4380","270 mph":"4393"}},"Start On Lap Modifier":{"note":"","data":["D014AA38 0000","8014AA38 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Track Modifier":{"note":"","data":["8014978C 00??"],"options":{"Track 1":"00","Track 2":"01","Track 3":"02","Track 4":"03"}},"Unlock All Cheats":{"note":"","data":["50000B02 0000","8111648C 0101"],"options":null}},"B9AF8CC6-DEC9F19F-C:50":{"Access All Levels":{"note":"","data":["8020860E 00FF","80208610 00FF"],"options":null},"Extended Tongue":{"note":"","data":["8133185E FFFF"],"options":null},"Have 99 Crowns":{"note":"","data":["80251857 0063"],"options":null},"Have All Levels Completed":{"note":"","data":["80208612 0019","80208613 0019","80208614 0015","80208615 0018","80208616 0017","80208617 0017"],"options":null},"Infinite Health":{"note":"","data":["80174DF3 000A"],"options":null},"Level Select":{"note":"","data":["8029097B 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06"}}},"BA6C293A-9FAFA338-C:46":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2552 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE03F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","80202535 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE095 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FC9C5 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFDAD 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802025E5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801D9EFD 0001"],"options":null}},"BA780BA0-0F21DB34-C:45":{"Have All Medals":{"note":"For Expert \u0026 Normal Modes","data":["50000802 0000","81178870 7777"],"options":null},"Infinite Boost\\Player 2":{"note":"","data":["8113CB6C 0000","8113CB6E 0000","8113FA4C 0000","8113FA4E 0000"],"options":null},"Infinite Boost\\Player 3":{"note":"","data":["8113D04C 0000","8113D04E 0000","8113FF2C 0000","8113FF2E 0000"],"options":null},"Infinite Boost\\Player 4":{"note":"","data":["8113D52C 0000","8113D52E 0000","8114040C 0000","8114040E 0000"],"options":null},"Infinite Dual Blue Lasers\\Player 2":{"note":"","data":["80161AAF 0002"],"options":null},"Infinite Dual Blue Lasers\\Player 3":{"note":"","data":["80161AB3 0002"],"options":null},"Infinite Dual Blue Lasers\\Player 4":{"note":"","data":["80161AB7 0002"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["8013CB17 00FF","8013F9F7 00FF"],"options":null},"Infinite Health\\Player 3":{"note":"","data":["8013CFF7 00FF","8013FED7 00FF"],"options":null},"Infinite Health\\Player 4":{"note":"","data":["8013D4D7 00FF","801403B7 00FF"],"options":null},"Infinite Smart Bombs\\Player 2":{"note":"","data":["80177DA7 0004"],"options":null},"Infinite Smart Bombs\\Player 3":{"note":"","data":["80177DAB 0004"],"options":null},"Infinite Smart Bombs\\Player 4":{"note":"","data":["80177DAF 0004"],"options":null},"Infinite\\Armor\\Falco":{"note":"","data":["801778B7 00FF"],"options":null},"Infinite\\Armor\\Peppy":{"note":"","data":["801778BF 00FF"],"options":null},"Infinite\\Armor\\Slippy":{"note":"","data":["801778BB 00FF"],"options":null},"Infinite\\Dual Blue Lasers":{"note":"","data":["80161AAB 0002"],"options":null},"Infinite\\Energy\\Player 1":{"note":"For Solo \u0026 Multi Player","data":["8013C637 00FF","8013F517 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["80161AA1 0009"],"options":null},"Level Select":{"note":"","data":["80178237 00??"],"options":{"Aquas":"0D","Area 6":"03","Bolse":"11","Corneria":"00","Corneria (Multi)":"14","Fortuna":"0E","Glitch":"04","Katina":"10","Macbeth":"0B","Meteo":"01","Sector X":"02","Sector Y":"05","Sector Z":"12","Solar":"07","Titania":"0C","Training Mode Level":"0A","Venom 1":"06","Venom 2":"09","Venom With Starwolf":"13","Zoness":"08"}},"Loads O' Hits":{"note":"","data":["80161A9B 00FF"],"options":null},"Unlimited\\Boost":{"note":"","data":["8113C68C 0000","8113C68E 0000","8113F56C 0000","8113F56E 0000"],"options":null},"Unlimited\\Smart Bombs":{"note":"","data":["80177DA3 0004"],"options":null}},"BADDF714-A1FF1B80-C:45":{"Bomb Select":{"note":"","data":["8024A3A1 00??"],"options":{"Blue Remote Bomb":"05","Clear All Special Bombs.":"00","Crazy Bomb":"1D","Invisible Mine Bomb":"07","Jelly Bomb":"03","Power Bomb":"02","Red Beem Bomb":"06","Shock Wave Bomb":"04"}},"Bomberman Speed":{"note":"","data":["8024A3A0 00??"],"options":{"Fast":"0E","Normal":"08","Slow":"04","Turbo":"10"}},"Have\\Infinite\\Kick":{"note":"","data":["8024A3A6 0002"],"options":null},"Have\\Max Bombs":{"note":"","data":["8024A39F 00FF"],"options":null},"Have\\Max Fire":{"note":"","data":["8024A39E 00FF"],"options":null},"Infinite\\Health Hearts":{"note":"","data":["8024A3AE 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["802E1CE7 00FF"],"options":null},"Infinite\\Timer":{"note":"","data":["800FDD72 002A"],"options":null},"Invincible":{"note":"Enemies \u0026 Bomb Blasts cant harm you.But if you walk \u0026 keep laying Bombs it will most likly freeze.so try to avoid constant bombing while walking.Turn cheat to off to go back to normal.","data":["8024A3A8 00??"],"options":{"Off":"00","On":"01"}},"Walk through\\Blocks":{"note":"Walk through Blocks like they are not there.Turn cheat to off to go back to normal.","data":["8024A3A5 00??"],"options":{"Off":"00","On":"01"}},"Walk through\\Bombs":{"note":"Walk through Bombs like they are not there.Turn cheat to off to go back to normal.","data":["8024A3A6 00??"],"options":{"Off":"00","On":"01"}}},"BB30B1A5-FCF712CE-C:45":{"Enable Chasm Freestyle":{"note":"","data":["81071834 0001"],"options":null},"Enable Jim Jam Freestyle":{"note":"","data":["81071838 0001"],"options":null},"Enable Moon Freestyle":{"note":"","data":["8107183C 0001"],"options":null},"Enable Tabletop Freestyle":{"note":"","data":["81071832 0001"],"options":null},"Extra Points":{"note":"","data":["800711E7 00FF"],"options":null}},"BBC99D32-117DAA80-C:45":{"Have All\\Boards":{"note":"","data":["81082A04 0003","81082A06 FFFF"],"options":null},"Have All\\Characters":{"note":"","data":["810829F8 07FF"],"options":null},"Have All\\Difficulties":{"note":"","data":["810829F0 0700"],"options":null},"Have All\\Tracks":{"note":"","data":["810829FC BFFE"],"options":null},"Low Timer":{"note":"","data":["801495FF 0000","80149601 0000"],"options":null},"Max\\50000 Stunt Points":{"note":"","data":["810829B8 C350"],"options":null},"[Audio Fix]":{"note":"","data":["81051840 AD99"],"options":null}},"BCB1F89F-060752A2-C:4A":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D51F0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112CD2E 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800EAFE8 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D51D0 0001","50001701 0000","800D51D8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D5460 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D545F 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D51C9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D51CA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D51CB 0003"],"options":null}},"BCFACCAA-B814D8EF-C:45":{"Player 1 Max Score (Casting Game)":{"note":"","data":["8107A412 FFFF"],"options":null},"Player 2 Max Score (Casting Game)":{"note":"","data":["8107A416 FFFF"],"options":null}},"BD636D6A-5D1F54BA-C:45":{"Away Team scores":{"note":"","data":["800478BB 00??"],"options":{"0 Goals":"00","25 Goals":"19","50 Goals":"32","99 Goals":"63"}},"Home Team scores":{"note":"","data":["800478BF 00??"],"options":{"0 Goals":"00","25 Goals":"19","50 Goals":"32","99 Goals":"63"}},"Open Cup Classic Mode":{"note":"","data":["8003CC6F 0001"],"options":null}},"BD8E206D-98C35E1C-C:4A":{"Day":{"note":"","data":["80136FBF 00??"],"options":{"Friday 12th":"0C","Friday 19th":"13","Friday 26th":"1A","Friday 5th":"05","Monday 15th":"0F","Monday 1st":"01","Monday 22nd":"16","Monday 29th":"1D","Monday 8th":"08","Saturday 13th":"0D","Saturday 27th":"1B","Saturday 30th":"14","Saturday 6th":"06","Sunday 14th":"0E","Sunday 21st":"15","Sunday 28th":"1C","Sunday 7th":"07","Thursday 11th":"0B","Thursday 18th":"12","Thursday 25th":"19","Thursday 4th":"04","Tuesday 16th":"10","Tuesday 23rd":"17","Tuesday 2nd":"02","Tuesday 30th":"1E","Tuesday 9th":"09","Wednesday 10th":"0A","Wednesday 17th":"11","Wednesday 24th":"18","Wednesday 31st":"1F","Wednesday 3rd":"03"}},"Hours":{"note":"","data":["80136FBE 00??"],"options":{"00 AM":"00","00 PM":"0C","01 AM":"01","01 PM":"0D","02 AM":"02","02 PM":"0E","03 AM":"03","03 PM":"0F","04 AM":"04","04 PM":"10","05 AM":"05","05 PM":"11","06 AM":"06","06 PM":"12","07 AM":"07","07 PM":"13","08 AM":"08","08 PM":"14","09 AM":"09","09 PM":"15","10 AM":"0A","10 PM":"16","11 AM":"0B","11 PM":"17"}},"Item Select":{"note":"","data":["81126EE8 ????"],"options":{"100 Bag":"2103","1000 Bag":"2100","10000 Bag":"2101","30000 Bag":"2102","Alarm Clock":"1DB3","Blue NES Game":"1D42","CD Player":"1DAC","Fish Tank (Fish Included!)":"1CA6","Flat Shell":"2514","Grandfather Clock":"1DA0","Grey NES Game":"1D2F","JukeBox":"1D50","Lamp":"1EA1","Light Blue NES Game":"1D37","Nook's Shirt":"2410","Orange":"2804","Orange NES Game":"1D2B","Pet Cage":"1C00","Pointy Shell":"2515","Purple NES Game":"1D3E","Record Player":"1D4C","Red NES Game":"1D33","Round Snowman Table":"1EAB","Snowman Bed":"1EAF","Snowman Fridge":"1EA5","Snowman Seat":"1EB0","Stereo":"1DA9","Stereo Kinda Thing":"1DA6","Stereo NES Colour":"1D47","Tall Red Cupboard":"1011","Yellow NES Game":"1D3A"}},"Max Cash":{"note":"","data":["813BC34C FFFF"],"options":null},"Minutes":{"note":"","data":["80136FBD 00??"],"options":{"00":"00","05":"05","10":"0A","15":"0F","20":"14","25":"19","30":"1E","35":"23","40":"28","45":"2D","50":"32","55":"37","59":"3B"}},"Month":{"note":"","data":["80136FC1 00??"],"options":{"April":"04","Aug":"08","Dec":"0C","Feb":"02","Jan":"01","July":"07","June":"06","March":"03","May":"05","Nov":"0B","Oct":"0A","Sept":"09"}},"Time Passes":{"note":"","data":["80136FD2 00??"],"options":{"Hours \u0026 Mins Fast":"10","Hours \u0026 Mins Medium":"05","Mins Like Seconds":"01","Time Normal":"00","Time Zooms By":"FF"}}},"BDA8F143-B1AF2D62-C:45":{"Multi\\Agony\\Have All\\Weapons\\Player 1":{"note":"","data":["801832B7 0001","801832BB 0001","801832BF 0001","801832C3 0001","801832C7 0001","801832CB 0001","801832CF 0001","801832D3 0001","801832D7 0001","801832DB 0001"],"options":null},"Multi\\Agony\\Have All\\Weapons\\Player 2":{"note":"","data":["8018361B 0001","8018361F 0001","80183623 0001","80183627 0001","8018362B 0001","8018362F 0001","80183633 0001","80183637 0001","8018363B 0001","8018363F 0001"],"options":null},"Multi\\Agony\\Infinite\\Ammo\\Player 1":{"note":"","data":["801832DF 0063","801832E3 0063","801832E7 0063","801832EB 0063","801832EF 0063","801832F3 0063"],"options":null},"Multi\\Agony\\Infinite\\Ammo\\Player 2":{"note":"","data":["80183643 0063","80183647 0063","8018364B 0063","8018364F 0063","80183653 0063","80183657 0063"],"options":null},"Multi\\Cold Steel\\Have All\\Weapons\\Player 1":{"note":"","data":["8017B577 0001","8017B57B 0001","8017B57F 0001","8017B583 0001","8017B587 0001","8017B58B 0001","8017B58F 0001","8017B593 0001","8017B597 0001","8017B59B 0001"],"options":null},"Multi\\Cold Steel\\Have All\\Weapons\\Player 2":{"note":"","data":["8017B8DB 0001","8017B8DF 0001","8017B8E3 0001","8017B8E7 0001","8017B8EB 0001","8017B8EF 0001","8017B8F3 0001","8017B8F7 0001","8017B8FB 0001","8017B8FF 0001"],"options":null},"Multi\\Cold Steel\\Infinite\\Ammo\\Player 1":{"note":"","data":["8017B59F 0063","8017B5A3 0063","8017B5A7 0063","8017B5AB 0063","8017B5AF 0063","8017B5B3 0063"],"options":null},"Multi\\Cold Steel\\Infinite\\Ammo\\Player 2":{"note":"","data":["8017B903 0063","8017B907 0063","8017B90B 0063","8017B90F 0063","8017B913 0063","8017B917 0063"],"options":null},"Multi\\Corridors\\Have All\\Weapons\\Player 1":{"note":"","data":["8017D1C7 0001","8017D1CB 0001","8017D1CF 0001","8017D1D3 0001","8017D1D7 0001","8017D1DB 0001","8017D1DF 0001","8017D1E3 0001","8017D1E7 0001","8017D1EB 0001"],"options":null},"Multi\\Corridors\\Have All\\Weapons\\Player 2":{"note":"","data":["8017D52B 0001","8017D52F 0001","8017D533 0001","8017D537 0001","8017D53B 0001","8017D53F 0001","8017D543 0001","8017D547 0001","8017D54B 0001","8017D54F 0001"],"options":null},"Multi\\Corridors\\Infinite\\Ammo\\Player 1":{"note":"","data":["8017D1E7 0063","8017D1F3 0063","8017D1F7 0063","8017D1FB 0063","8017D1FF 0063","8017D203 0063"],"options":null},"Multi\\Corridors\\Infinite\\Ammo\\Player 2":{"note":"","data":["8017D553 0063","8017D557 0063","8017D55B 0063","8017D55F 0063","8017D567 0063"],"options":null},"Multi\\Dying Halls\\Have All\\Weapons\\Player 1":{"note":"","data":["801BF937 0001","801BF93B 0001","801BF93F 0001","801BF943 0001","801BF947 0001","801BF94B 0001","801BF94F 0001","801BF953 0001","801BF957 0001","801BF95B 0001"],"options":null},"Multi\\Dying Halls\\Have All\\Weapons\\Player 2":{"note":"","data":["801BFC9B 0001","801BFC9F 0001","801BFCA3 0001","801BFCA7 0001","801BFCAB 0001","801BFCAF 0001","801BFCB3 0001","801BFCB7 0001","801BFCBB 0001","801BFCBF 0001"],"options":null},"Multi\\Dying Halls\\Infinite\\Ammo\\Player 1":{"note":"","data":["801BF95F 0063","801BF963 0063","801BF967 0063","801BF96B 0063","801BF96F 0063","801BF973 0063"],"options":null},"Multi\\Dying Halls\\Infinite\\Ammo\\Player 2":{"note":"","data":["801BFCC3 0063","801BFCC7 0063","801BFCCB 0063","801BFCCF 0063","801BFCD3 0063","801BFCD7 0063"],"options":null},"Multi\\Empty Space\\Have All\\Weapons\\Player 1":{"note":"","data":["80179B27 0001","80179B2B 0001","80179B2F 0001","80179B33 0001","80179B37 0001","80179B3B 0001","80179B3F 0001","80179B43 0001","80179B47 0001","80179B4B 0001"],"options":null},"Multi\\Empty Space\\Have All\\Weapons\\Player 2":{"note":"","data":["80179E8B 0001","80179E8F 0001","80179E93 0001","80179E97 0001","80179E9B 0001","80179E9F 0001","80179EA3 0001","80179EA7 0001","80179EAB 0001","80179EAF 0001"],"options":null},"Multi\\Empty Space\\Infinite\\Ammo\\Player 1":{"note":"","data":["80179B4F 0063","80179B53 0063","80179B57 0063","80179B5B 0063","80179B5F 0063","80179B63 0063"],"options":null},"Multi\\Empty Space\\Infinite\\Ammo\\Player 2":{"note":"","data":["80179EB3 0063","80179EB7 0063","80179EBB 0063","80179EBF 0063","80179EC3 0063","80179EC7 0063"],"options":null},"Multi\\Fortress\\Have All\\Weapons\\Player 1":{"note":"","data":["8017D617 0001","8017D61B 0001","8017D61F 0001","8017D623 0001","8017D627 0001","8017D62B 0001","8017D62F 0001","8017D633 0001","8017D637 0001","8017D63B 0001"],"options":null},"Multi\\Fortress\\Have All\\Weapons\\Player 2":{"note":"","data":["8017D97B 0001","8017D97F 0001","8017D983 0001","8017D987 0001","8017D98B 0001","8017D98F 0001","8017D993 0001","8017D997 0001","8017D99B 0001","8017D99F 0001"],"options":null},"Multi\\Fortress\\Infinite\\Ammo\\Player 1":{"note":"","data":["8017D63F 0063","8017D643 0063","8017D647 0063","8017D64B 0063","8017D64F 0063","8017D653 0063"],"options":null},"Multi\\Fortress\\Infinite\\Ammo\\Player 2":{"note":"","data":["8017D9A3 0063","8017D9A7 0063","8017D9AB 0063","8017D9AF 0063","8017D9B3 0063","8017D9B7 0063"],"options":null},"Multi\\Mad Dash\\Have All\\Weapons\\Player 1":{"note":"","data":["801AE9A7 0001","801AE9AB 0001","801AE9AF 0001","801AE9B3 0001","801AE9B7 0001","801AE9BB 0001","801AE9BF 0001","801AE9C3 0001","801AE9C7 0001","801AE9CB 0001"],"options":null},"Multi\\Mad Dash\\Have All\\Weapons\\Player 2":{"note":"","data":["801AED0B 0001","801AED0F 0001","801AED13 0001","801AED17 0001","801AED1B 0001","801AED1F 0001","801AED23 0001","801AED27 0001","801AED2B 0001","801AED2F 0001"],"options":null},"Multi\\Mad Dash\\Infinite\\Ammo\\Player 1":{"note":"","data":["801AE9CF 0063","801AE9D3 0063","801AE9D7 0063","801AE9DB 0063","801AE9DF 0063","801AE9E3 0063"],"options":null},"Multi\\Mad Dash\\Infinite\\Ammo\\Player 2":{"note":"","data":["801AED33 0063","801AED37 0063","801AED3B 0063","801AED3F 0063","801AED43 0063","801AED47 0063"],"options":null},"Multi\\Overflow\\Have All\\Weapons\\Player 1":{"note":"","data":["80197907 0001","8019790B 0001","8019790F 0001","80197913 0001","80197917 0001","8019791B 0001","8019791F 0001","80197923 0001","80197927 0001","8019792B 0001"],"options":null},"Multi\\Overflow\\Have All\\Weapons\\Player 2":{"note":"","data":["80197C6B 0001","80197C6F 0001","80197C73 0001","80197C77 0001","80197C7B 0001","80197C7F 0001","80197C83 0001","80197C87 0001","80197C8B 0001","80197C8F 0001"],"options":null},"Multi\\Overflow\\Infinite\\Ammo\\Player 1":{"note":"","data":["8019792F 0063","80197933 0063","80197937 0063","8019793B 0063","8019793F 0063","80197943 0063"],"options":null},"Multi\\Overflow\\Infinite\\Ammo\\Player 2":{"note":"","data":["80197C93 0063","80197C97 0063","80197C9B 0063","80197C9F 0063","80197CA3 0063","80197CA7 0063"],"options":null},"Multi\\Twists\\Have All\\Weapons\\Player 1":{"note":"","data":["801ABE47 0001","801ABE4B 0001","801ABE4F 0001","801ABE53 0001","801ABE57 0001","801ABE5B 0001","801ABE5F 0001","801ABE63 0001","801ABE67 0001","801ABE6B 0001"],"options":null},"Multi\\Twists\\Have All\\Weapons\\Player 2":{"note":"","data":["801AC1AB 0001","801AC1AF 0001","801AC1B3 0001","801AC1B7 0001","801AC1BB 0001","801AC1BF 0001","801AC1C3 0001","801AC1C7 0001","801AC1CB 0001","801AC1CF 0001"],"options":null},"Multi\\Twists\\Infinite\\Ammo\\Player 1":{"note":"","data":["801ABE6F 0063","801ABE73 0063","801ABE77 0063","801ABE7B 0063","801ABE7F 0063","801ABE83 0063"],"options":null},"Multi\\Twists\\Infinite\\Ammo\\Player 2":{"note":"","data":["801AC1D3 0063","801AC1D7 0063","801AC1DB 0063","801AC1DF 0063","801AC1E3 0063","801AC1E7 0063"],"options":null},"Multi\\War Room\\Have All\\Weapons\\Player 1":{"note":"","data":["801A2E57 0001","801A2E5B 0001","801A2E5F 0001","801A2E63 0001","801A2E67 0001","801A2E6B 0001","801A2E6F 0001","801A2E73 0001","801A2E77 0001","801A2E7B 0001"],"options":null},"Multi\\War Room\\Have All\\Weapons\\Player 2":{"note":"","data":["801A31BB 0001","801A31BF 0001","801A31C3 0001","801A31C7 0001","801A31CB 0001","801A31CF 0001","801A31D3 0001","801A31D7 0001","801A31DB 0001","801A31DF 0001"],"options":null},"Multi\\War Room\\Infinite\\Ammo\\Player 1":{"note":"","data":["801A2E7F 0063","801A2E83 0063","801A2E87 0063","801A2E8B 0063","801A2E8F 0063","801A2E93 0063"],"options":null},"Multi\\War Room\\Infinite\\Ammo\\Player 2":{"note":"","data":["801A31E3 0063","801A31E7 0063","801A31EB 0063","801A31EF 0063","801A31F3 0063","801A31F7 0063"],"options":null},"The Ultimate":{"note":"The Ultimate Gives you on Solo Play Infinite Health, Infinite Armor, All Guns, and Infinite Ammo On all Levels","data":["8104AD2C 0800","8104AD2E 0018","81000060 8E30","81000062 0068","81000064 241B","81000066 03E7","81000068 AE1B","8100006A 0030","8100006C AC9B","8100006E 0204","81000070 A219","81000072 004B","81000074 A219","81000076 004C","81000078 1000","8100007A 0005","8100007C A219","8100007E 0050","50000604 0000","81000090 A219","50000604 0004","81000092 0054","50000504 0000","810000A8 AE1B","50000504 0004","810000AA 006C","810000BC 0801","810000BE 2B4D","810000C0 AE1B","810000C2 0080"],"options":null}},"BDF9766D-BD068D70-C:45":{"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Can't Be Counted Out":{"note":"","data":["D0296E4D 0029","81296ECE 0384"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Can't Be Pinned":{"note":"","data":["D0296E4D 0029","81296F5A FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Infinite Health":{"note":"","data":["D0296E4D 0029","81296FD0 0000","D0296E4D 0029","81296FD2 0000"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Instant Recovery":{"note":"","data":["D0296E4D 0029","8129703A FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Invincible":{"note":"","data":["D0296E4D 0029","8129702E FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Super Speed":{"note":"","data":["D0296E4D 0029","81297032 FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Super Stamina":{"note":"","data":["D0296E4D 0029","81297036 FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Super Strength":{"note":"","data":["D0296E4D 0029","8129702A FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Can't Be Counted Out":{"note":"","data":["D0296E4D 0029","8129816E 0384"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Can't Be Pinned":{"note":"","data":["D0296E4D 0029","812981FA FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Infinite Health":{"note":"","data":["D0296E4D 0029","81298270 0000","D0296E4D 0029","81298272 0000"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Instant Recovery":{"note":"","data":["D0296E4D 0029","812982DA FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Invincible":{"note":"","data":["D0296E4D 0029","812982CE FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Super Speed":{"note":"","data":["D0296E4D 0029","812982D2 FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Super Stamina":{"note":"","data":["D0296E4D 0029","812982D6 FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Super Strength":{"note":"","data":["D0296E4D 0029","812982CA FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Can't Be Counted Out":{"note":"","data":["D0296C3D 0029","81296CBE 0384"],"options":null},"3 Way Dance Mode\\Player 1\\Can't Be Pinned":{"note":"","data":["D0296C3D 0029","81296D4A FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Infinite Health":{"note":"","data":["D0296C3D 0029","81296DC0 0000","D0296C3D 0029","81296DC2 0000"],"options":null},"3 Way Dance Mode\\Player 1\\Instant Recovery":{"note":"","data":["D0296C3D 0029","81296E2A FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Invincible":{"note":"","data":["D0296C3D 0029","81296E1E FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Super Speed":{"note":"","data":["D0296C3D 0029","81296E22 FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Super Stamina":{"note":"","data":["D0296C3D 0029","81296E26 FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Super Strength":{"note":"","data":["D0296C3D 0029","81296E1A FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Can't Be Counted Out":{"note":"","data":["D0296C3D 0029","81297F5E 0384"],"options":null},"3 Way Dance Mode\\Player 2\\Can't Be Pinned":{"note":"","data":["D0296C3D 0029","81297FEA FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Infinite Health":{"note":"","data":["D0296C3D 0029","81298060 0000","D0296C3D 0029","81298062 0000"],"options":null},"3 Way Dance Mode\\Player 2\\Instant Recovery":{"note":"","data":["D0296C3D 0029","812980CA FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Invincible":{"note":"","data":["D0296C3D 0029","812980BE FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Super Speed":{"note":"","data":["D0296C3D 0029","812980C2 FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Super Stamina":{"note":"","data":["D0296C3D 0029","812980C6 FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Super Strength":{"note":"","data":["D0296C3D 0029","812980BA FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Can't Be Counted Out":{"note":"","data":["D0296C3D 0029","812991FE 0384"],"options":null},"3 Way Dance Mode\\Player 3\\Can't Be Pinned":{"note":"","data":["D0296C3D 0029","8129928A FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Infinite Health":{"note":"","data":["D0296C3D 0029","81299300 0000","D0296C3D 0029","81299302 0000"],"options":null},"3 Way Dance Mode\\Player 3\\Instant Recovery":{"note":"","data":["D0296C3D 0029","8129936A FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Invincible":{"note":"","data":["D0296C3D 0029","8129935E FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Super Speed":{"note":"","data":["D0296C3D 0029","81299362 FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Super Stamina":{"note":"","data":["D0296C3D 0029","81299366 FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Super Strength":{"note":"","data":["D0296C3D 0029","8129935A FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Can't Be Counted Out":{"note":"","data":["D029A98D 0029","8129AA0E 0384"],"options":null},"All Tag Team Modes\\Player 1\\Can't Be Pinned":{"note":"","data":["D029A98D 0029","8129AA9A FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Infinite Health":{"note":"","data":["D029A98D 0029","8129AB10 0000","D029A98D 0029","8129AB12 0000"],"options":null},"All Tag Team Modes\\Player 1\\Instant Recovery":{"note":"","data":["D029A98D 0029","8129AB7A FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Invincible":{"note":"","data":["D029A98D 0029","8129AB6E FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Super Speed":{"note":"","data":["D029A98D 0029","8129AB72 FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Super Stamina":{"note":"","data":["D029A98D 0029","8129AB76 FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Super Strength":{"note":"","data":["D029A98D 0029","8129AB6A FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Can't Be Counted Out":{"note":"","data":["D029A98D 0029","8129BCAE 0384"],"options":null},"All Tag Team Modes\\Player 2\\Can't Be Pinned":{"note":"","data":["D029A98D 0029","8129BD3A FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Infinite Health":{"note":"","data":["D029A98D 0029","8129BDB0 0000","D029A98D 0029","8129BDB2 0000"],"options":null},"All Tag Team Modes\\Player 2\\Instant Recovery":{"note":"","data":["D029A98D 0029","8129BE1A FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Invincible":{"note":"","data":["D029A98D 0029","8129BE0E FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Super Speed":{"note":"","data":["D029A98D 0029","8129BE12 FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Super Stamina":{"note":"","data":["D029A98D 0029","8129BE16 FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Super Strength":{"note":"","data":["D029A98D 0029","8129BE0A FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Can't Be Counted Out":{"note":"","data":["D029A98D 0029","8129CF4E 0384"],"options":null},"All Tag Team Modes\\Player 3\\Can't Be Pinned":{"note":"","data":["D029A98D 0029","8129CFDA FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Infinite Health":{"note":"","data":["D029A98D 0029","8129D050 0000","D029A98D 0029","8129D052 0000"],"options":null},"All Tag Team Modes\\Player 3\\Instant Recovery":{"note":"","data":["D029A98D 0029","8129D0BA FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Invincible":{"note":"","data":["D029A98D 0029","8129D0AE FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Super Speed":{"note":"","data":["D029A98D 0029","8129D0B2 FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Super Stamina":{"note":"","data":["D029A98D 0029","8129D0B6 FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Super Strength":{"note":"","data":["D029A98D 0029","8129D0AA FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Can't Be Counted Out":{"note":"","data":["D029A98D 0029","8129E1EE 0384"],"options":null},"All Tag Team Modes\\Player 4\\Can't Be Pinned":{"note":"","data":["D029A98D 0029","8129E27A FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Infinite Health":{"note":"","data":["D029A98D 0029","8129E2F0 0000","D029A98D 0029","8129E2F2 0000"],"options":null},"All Tag Team Modes\\Player 4\\Instant Recovery":{"note":"","data":["D029A98D 0029","8129E35A FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Invincible":{"note":"","data":["D029A98D 0029","8129E34E FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Super Speed":{"note":"","data":["D029A98D 0029","8129E352 FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Super Stamina":{"note":"","data":["D029A98D 0029","8129E356 FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Super Strength":{"note":"","data":["D029A98D 0029","8129E34A FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Can't Be Counted Out":{"note":"","data":["D029A66D 0029","8129A6EE 0384"],"options":null},"Battle Royal Mode\\Player 1\\Can't Be Pinned":{"note":"","data":["D029A66D 0029","8129A77A FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Infinite Health":{"note":"","data":["D029A66D 0029","8129A7F0 0000","D029A66D 0029","8129A7F2 0000"],"options":null},"Battle Royal Mode\\Player 1\\Instant Recovery":{"note":"","data":["D029A66D 0029","8129A85A FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Invincible":{"note":"","data":["D029A66D 0029","8129A84E FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Super Speed":{"note":"","data":["D029A66D 0029","8129A852 FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Super Stamina":{"note":"","data":["D029A66D 0029","8129A856 FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Super Strength":{"note":"","data":["D029A66D 0029","8129A84A FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Can't Be Counted Out":{"note":"","data":["D029A66D 0029","8129B98E 0384"],"options":null},"Battle Royal Mode\\Player 2\\Can't Be Pinned":{"note":"","data":["D029A66D 0029","8129BA1A FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Infinite Health":{"note":"","data":["D029A66D 0029","8129BA90 0000","D029A66D 0029","8129BA92 0000"],"options":null},"Battle Royal Mode\\Player 2\\Instant Recovery":{"note":"","data":["D029A66D 0029","8129BAFA FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Invincible":{"note":"","data":["D029A66D 0029","8129BAEE FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Super Speed":{"note":"","data":["D029A66D 0029","8129BAF2 FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Super Stamina":{"note":"","data":["D029A66D 0029","8129BAF6 FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Super Strength":{"note":"","data":["D029A66D 0029","8129BAEA FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Can't Be Counted Out":{"note":"","data":["D029A66D 0029","8129CC2E 0384"],"options":null},"Battle Royal Mode\\Player 3\\Can't Be Pinned":{"note":"","data":["D029A66D 0029","8129CCBA FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Infinite Health":{"note":"","data":["D029A66D 0029","8129CD30 0000","D029A66D 0029","8129CD32 0000"],"options":null},"Battle Royal Mode\\Player 3\\Instant Recovery":{"note":"","data":["D029A66D 0029","8129CD9A FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Invincible":{"note":"","data":["D029A66D 0029","8129CD8E FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Super Speed":{"note":"","data":["D029A66D 0029","8129CD92 FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Super Stamina":{"note":"","data":["D029A66D 0029","8129CD96 FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Super Strength":{"note":"","data":["D029A66D 0029","8129CD8A FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Can't Be Counted Out":{"note":"","data":["D029A66D 0029","8129DECE 0384"],"options":null},"Battle Royal Mode\\Player 4\\Can't Be Pinned":{"note":"","data":["D029A66D 0029","8129DF5A FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Infinite Health":{"note":"","data":["D029A66D 0029","8129DFD0 0000","D029A66D 0029","8129DFD2 0000"],"options":null},"Battle Royal Mode\\Player 4\\Instant Recovery":{"note":"","data":["D029A66D 0029","8129E03A FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Invincible":{"note":"","data":["D029A66D 0029","8129E02E FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Super Speed":{"note":"","data":["D029A66D 0029","8129E032 FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Super Stamina":{"note":"","data":["D029A66D 0029","8129E036 FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Super Strength":{"note":"","data":["D029A66D 0029","8129E02A FFFF"],"options":null},"Character Modifier\\Player 1":{"note":"","data":["80122773 00??"],"options":{"Beulah":"1C","Cyrus the Virus":"0D","Excel":"36","Gertner":"15","H Slash":"2A","J Styles":"30","Jeff Jones":"19","Louie":"2E","Mack Daddy":"0F","Mad Goat":"1D","Nurse":"1F","Santoro":"25","Skull":"29","Sound Guy":"27","Taz":"32","The Sheik":"28","Tommy Rich":"22","Trainer":"33"}},"Character Modifier\\Player 2":{"note":"","data":["80122783 00??"],"options":{"Beulah":"1C","Cyrus the Virus":"0D","Excel":"36","Gertner":"15","H Slash":"2A","J Styles":"30","Jeff Jones":"19","Louie":"2E","Mack Daddy":"0F","Mad Goat":"1D","Nurse":"1F","Santoro":"25","Skull":"29","Sound Guy":"27","Taz":"32","The Sheik":"28","Tommy Rich":"22","Trainer":"33"}},"Create A Wrestler\\Infinite Attribute Points":{"note":"","data":["8115DD52 0000"],"options":null},"Create A Wrestler\\Infinite Move %":{"note":"","data":["80131600 0024"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Can't Be Counted Out":{"note":"","data":["D029A87D 0029","8129A8FE 0384"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Can't Be Pinned":{"note":"","data":["D029A87D 0029","8129A98A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Infinite Health":{"note":"","data":["D029A87D 0029","8129AA00 0000","D029A87D 0029","8129AA02 0000"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Instant Recovery":{"note":"","data":["D029A87D 0029","8129AA6A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Invincible":{"note":"","data":["D029A87D 0029","8129AA5E FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Super Speed":{"note":"","data":["D029A87D 0029","8129AA62 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Super Stamina":{"note":"","data":["D029A87D 0029","8129AA66 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Super Strength":{"note":"","data":["D029A87D 0029","8129AA5A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Can't Be Counted Out":{"note":"","data":["D029A87D 0029","8129BB9E 0384"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Can't Be Pinned":{"note":"","data":["D029A87D 0029","8129BC2A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Infinite Health":{"note":"","data":["D029A87D 0029","8129BCA0 0000","D029A87D 0029","8129BCA2 0000"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Instant Recovery":{"note":"","data":["D029A87D 0029","8129BD0A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Invincible":{"note":"","data":["D029A87D 0029","8129BCFE FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Super Speed":{"note":"","data":["D029A87D 0029","8129BD02 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Super Stamina":{"note":"","data":["D029A87D 0029","8129BD06 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Super Strength":{"note":"","data":["D029A87D 0029","8129BCFA FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Can't Be Counted Out":{"note":"","data":["D029A87D 0029","8129CE3E 0384"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Can't Be Pinned":{"note":"","data":["D029A87D 0029","8129CECA FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Infinite Health":{"note":"","data":["D029A87D 0029","8129CF40 0000","D029A87D 0029","8129CF42 0000"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Instant Recovery":{"note":"","data":["D029A87D 0029","8129CFAA FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Invincible":{"note":"","data":["D029A87D 0029","8129CF9E FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Super Speed":{"note":"","data":["D029A87D 0029","8129CFA2 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Super Stamina":{"note":"","data":["D029A87D 0029","8129CFA6 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Super Strength":{"note":"","data":["D029A87D 0029","8129CF9A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Can't Be Counted Out":{"note":"","data":["D029A87D 0029","8129E0DE 0384"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Can't Be Pinned":{"note":"","data":["D029A87D 0029","8129E16A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Infinite Health":{"note":"","data":["D029A87D 0029","8129E1E0 0000","D029A87D 0029","8129E1E2 0000"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Instant Recovery":{"note":"","data":["D029A87D 0029","8129E24A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Invincible":{"note":"","data":["D029A87D 0029","8129E23E FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Super Speed":{"note":"","data":["D029A87D 0029","8129E242 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Super Stamina":{"note":"","data":["D029A87D 0029","8129E246 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Super Strength":{"note":"","data":["D029A87D 0029","8129E23A FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Can't Be Counted Out":{"note":"","data":["D02931FD 0029","8129327E 0384"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Can't Be Pinned":{"note":"","data":["D02931FD 0029","8129330A FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Infinite Health":{"note":"","data":["D02931FD 0029","81293380 0000","D02931FD 0029","81293382 0000"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Instant Recovery":{"note":"","data":["D02931FD 0029","812933EA FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Invincible":{"note":"","data":["D02931FD 0029","812933DE FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Super Speed":{"note":"","data":["D02931FD 0029","812933E2 FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Super Stamina":{"note":"","data":["D02931FD 0029","812933E6 FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Super Strength":{"note":"","data":["D02931FD 0029","812933DA FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Can't Be Counted Out":{"note":"","data":["D02931FD 0029","8129451E 0384"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Can't Be Pinned":{"note":"","data":["D02931FD 0029","812945AA FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Infinite Health":{"note":"","data":["D02931FD 0029","81294620 0000","D02931FD 0029","81294622 0000"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Instant Recovery":{"note":"","data":["D02931FD 0029","8129468A FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Invincible":{"note":"","data":["D02931FD 0029","8129467E FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Super Speed":{"note":"","data":["D02931FD 0029","81294682 FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Super Stamina":{"note":"","data":["D02931FD 0029","81294686 FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Super Strength":{"note":"","data":["D02931FD 0029","8129467A FFFF"],"options":null}},"BE5973E0-89B0EDB8-C:45":{"100.000 Sponsor Credits \u0026 950 Championship Points In Support Van":{"note":"You Also Have Access To All Cars, Tracks \u0026 Extra Features","data":["80030D82 00F3"],"options":null},"Always 1st":{"note":"","data":["810318E2 0001"],"options":null},"Infinite Time \u0026 Always Place 1st":{"note":"Championship Mode Only.","data":["810318EE 0001"],"options":null},"Max Sponsor Credits":{"note":"","data":["81033816 270F"],"options":null},"Max Sponsor Points \u0026 Extra Cars \u0026 Tracks":{"note":"This code gives you all tracks and cars. once you activate this code, You must make an internal save (Native) in options \u0026 then load that internal save, \u0026 go to Drivers Board to pick your car, Then to Race to pick your track","data":["81033816 270F"],"options":null},"No Cones Hit":{"note":"In ARSG Rally School","data":["81031CEA 0000"],"options":null},"No Damage Or Failures":{"note":"","data":["81030D76 0001"],"options":null},"No Navigator":{"note":"","data":["80032677 0000"],"options":null}},"BE76EDFF-20452D09-C:45":{"Away Team\\Infinite Time Outs":{"note":"","data":["8004C62E 0003"],"options":null},"Away Team\\No Time Outs":{"note":"","data":["8004C62E 0000"],"options":null},"Home Team\\Infinite Time Outs":{"note":"","data":["8004C0B6 0003"],"options":null},"Home Team\\No Time Outs":{"note":"","data":["8004C0B6 0000"],"options":null},"Infinite\\Character Creation Points":{"note":"","data":["81072F30 015E"],"options":null},"Infinite\\Time to Choose Play":{"note":"","data":["81080152 0028"],"options":null},"Max\\Accuracy":{"note":"","data":["8106FDB8 0064"],"options":null},"Max\\Catch":{"note":"","data":["8106FDC2 0064"],"options":null},"Max\\Endurance":{"note":"","data":["8106FDC4 0064"],"options":null},"Max\\Hands":{"note":"","data":["8106FDBE 0064"],"options":null},"Max\\Range":{"note":"","data":["8106FDBA 0064"],"options":null},"Max\\Scramble":{"note":"","data":["8106FDBC 0064"],"options":null},"Max\\Speed":{"note":"","data":["8106FDC0 0064"],"options":null}},"BEBAB677-51B0B5E4-C:50":{"100.000 Sponsor Credits \u0026 950 Championship Points In Support Van":{"note":"You Also Have Access To All Cars, Tracks \u0026 Extra Features","data":["80031BB3 00F3"],"options":null},"Always 1st":{"note":"","data":["80032713 0001"],"options":null},"Freeze Timer":{"note":"","data":["8003271F 0000"],"options":null},"Infinite Cash":{"note":"","data":["803D004E 4000"],"options":null},"Max Sponsor Credits":{"note":"","data":["803D27E2 0010","803D27E4 0001"],"options":null},"No Cones Hit":{"note":"In ARSG Rally School","data":["80032743 0000","80032B1B 0000"],"options":null},"No Damage Or Failures":{"note":"","data":["80031BA7 0001"],"options":null},"No Navigator":{"note":"","data":["80032677 0000"],"options":null}},"BFA526B4-0691E430-C:45":{"All 52 Gold Gems Collected":{"note":"","data":["80171B10 0003","80171B11 007E","80171B12 00FF","80171B13 00EF","80171B14 00FF","80171B15 007F","80171B16 00FF","80171B17 00FC"],"options":null},"All Stages \u0026 Chapters Unlocked":{"note":"","data":["80171B18 003B"],"options":null},"Infinite Health\\Marina":{"note":"","data":["81057458 03E8"],"options":null},"Infinite Health\\Teran":{"note":"","data":["810F4270 03E8"],"options":null},"Infinite\\Max Red Gems":{"note":"","data":["81178136 270F"],"options":null},"Level Select":{"note":"To access this anytime during game, press L+R+Z to enable the menu. Press D-Pad Up / Down to move through the menu, D-Pad Left / Right to change level digits and then press Start to enter level. Don not do this whhile in pause mode (Start Button Pause) or the game will freeze.","data":["D10BE538 2030","800BE4F1 0004"],"options":null}},"BFE23884-EF48EAAF-C:45":{"All Levels Open":{"note":"","data":["50002001 0000","803F7DE0 0001"],"options":null},"Always\\Raining":{"note":"","data":["803F2D6F 0005"],"options":null},"Always\\Snowing":{"note":"","data":["803F2D6D 0005"],"options":null},"Debug Mode":{"note":"","data":["803F642F 0001"],"options":null},"Have All\\Power Cells":{"note":"","data":["803F2D3D 000F"],"options":null},"Have All\\Secret Mini Game":{"note":"","data":["803F643D 0001"],"options":null},"High Score":{"note":"","data":["813F2D30 007F","813F2D32 FFFF"],"options":null},"Infinite Health\\Ship\\in Asteroids Level":{"note":"","data":["803E4CDB 0003"],"options":null},"Infinite\\Ability\\Fox":{"note":"","data":["811DF8F4 0400"],"options":null},"Infinite\\Ability\\Heli-Rabbit":{"note":"","data":["811DF14C 0400"],"options":null},"Infinite\\Ability\\Husky":{"note":"","data":["811DED78 0400"],"options":null},"Infinite\\Ability\\Mouse":{"note":"","data":["811DFCC8 0400"],"options":null},"Infinite\\Ability\\Penguin":{"note":"","data":["811E009C 0400"],"options":null},"Infinite\\Ability\\Rabbit":{"note":"","data":["811DE5D0 0400"],"options":null},"Infinite\\Ability\\Racing Dog":{"note":"","data":["811DF14C 0400"],"options":null},"Infinite\\Ability\\Racing Fox":{"note":"","data":["811DF8F4 0082"],"options":null},"Infinite\\Ability\\Ram":{"note":"","data":["811DE5D0 0400"],"options":null},"Infinite\\Ability\\Sheep":{"note":"","data":["811DE9A0 0400"],"options":null},"Infinite\\Ability\\Springy Thing":{"note":"","data":["811DF14C 0400"],"options":null},"Infinite\\Ability\\Walrus":{"note":"","data":["811DE5D0 0400"],"options":null},"Infinite\\Boost\\Fox":{"note":"","data":["811DF8F0 0400"],"options":null},"Infinite\\Boost\\Mouse":{"note":"","data":["811DFCC4 0400"],"options":null},"Infinite\\Boost\\Racing Dog":{"note":"","data":["811DF148 0400"],"options":null},"Infinite\\Boost\\Racing Fox":{"note":"","data":["811DF8F0 0400"],"options":null},"Infinite\\Boost\\Walrus":{"note":"","data":["811DED74 0400"],"options":null},"Infinite\\Energy\\Dog":{"note":"","data":["811DFF04 0082"],"options":null},"Infinite\\Energy\\EVO (Chip)":{"note":"","data":["801DE065 0082"],"options":null},"Infinite\\Energy\\Evo\\In Bonus Level 4":{"note":"","data":["801DEFB5 0082"],"options":null},"Infinite\\Energy\\Evo\\in Bonus Level 1 \u0026 Final Level":{"note":"","data":["801DE439 0082"],"options":null},"Infinite\\Energy\\Fox":{"note":"","data":["811DF75C 0082"],"options":null},"Infinite\\Energy\\Heli-Rabbit":{"note":"","data":["811DEFB4 0082"],"options":null},"Infinite\\Energy\\Mouse,Hyena":{"note":"","data":["801DFB31 0082"],"options":null},"Infinite\\Energy\\Normal Penguin":{"note":"","data":["811DFF04 0082"],"options":null},"Infinite\\Energy\\Normal Rabbit":{"note":"","data":["811DE438 0082"],"options":null},"Infinite\\Energy\\Racing Dog":{"note":"","data":["811DEFB4 0082"],"options":null},"Infinite\\Energy\\Racing Fox":{"note":"","data":["811DF7FC 0082"],"options":null},"Infinite\\Energy\\Ram":{"note":"","data":["811DE438 0082"],"options":null},"Infinite\\Energy\\Sheep":{"note":"","data":["811DEBE0 0082"],"options":null},"Infinite\\Energy\\Snow Husky":{"note":"","data":["811DFF04 0082"],"options":null},"Infinite\\Energy\\Springy Thing":{"note":"","data":["811DEFB4 0082"],"options":null}},"BFF7B1C2-AEBF148E-C:4A":{"Infinite\\Bells":{"note":"","data":["800F38C3 00??"],"options":{"99 Bells":"63","No Bells":"00"}},"Infinite\\Energy":{"note":"","data":["800FB897 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["800F38C5 000A"],"options":null}},"C00CA948-8E60D34B-C:45":{"Max Or No Score\\Player 1":{"note":"","data":["81104772 ????"],"options":{"Max Score":"FFFF","No Score":"0000"}},"Max Or No Score\\Player 2":{"note":"","data":["81104776 ????"],"options":{"Max Score":"FFFF","No Score":"0000"}},"Max Or No Score\\Player 3":{"note":"","data":["8110477A ????"],"options":{"Max Score":"FFFF","No Score":"0000"}},"Max Or No Score\\Player 4":{"note":"","data":["8110477E ????"],"options":{"Max Score":"FFFF","No Score":"0000"}}},"C0C85046-61051B05-C:49":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2712 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE03F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802026F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE255 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FCB85 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFF6D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802027A5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DA0BD 0001"],"options":null}},"C0F6DB17-80E0D532-C:44":{"Enable Cheat Select":{"note":"","data":["80115933 00??"],"options":{"All Weapons With Fast Run":"42","All Weapons With Infinite Ammo":"06","Fast run":"40","Have All Weapons":"02","Infinite Ammo":"04","Infinite Ammo With Fast Run":"44","Invincible":"01","Invincible With All Weapons And Fast Run":"43","Invincible With All Weapons and Ammo and Fast Run":"47","Invincible With Fast Run":"41","Invincible With Infinite Ammo and All Weapons":"07"}},"Enable In-Game Cheat Menu \u0026 Level Select":{"note":"","data":["81115936 014F"],"options":null},"Sound Select\\Music Volume":{"note":"","data":["80115944 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"Sound Select\\SFX Volume":{"note":"","data":["80115945 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"[Press L For Levitate]":{"note":"","data":["D10F7550 0020","816FE35C 43D5"],"options":null}},"C151AD61-280FFF22-C:45":{"Have 99 Coins":{"note":"","data":["810BB55E 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C7EC2 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BB54C 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BB556 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BB55A 0009"],"options":null}},"C16C421B-A21580F7-C:45":{"Have All\\Levels and Bonus Stages Unlocked":{"note":"Press start in Gyro's Lab and then resume game to see all open","data":["801D72CC 00FF","801D72CD 00FF","801D72CE 00FF","801D72CF 00FF","801D72D3 00FF"],"options":null},"Have All\\Time Attack \u0026 Toy Hunting Comnpleated (All Levels)":{"note":"Press start in Gyro's Lab and then resume game to see all open","data":["801D72D8 00FF","801D72D9 00FF","801D72DA 00FF","801D72DB 00FF","801D72DC 00FF","801D72DD 00FF","801D72DE 00FF","801D72DF 00FF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["801D72AE 0063"],"options":null},"Infinite\\99 Stars":{"note":"","data":["801D72AF 0063"],"options":null},"Infinite\\Time\\Gladstones Time Attack":{"note":"","data":["801D72A7 00FF"],"options":null},"Infinite\\Time\\Nephews Toy Hunting":{"note":"","data":["801D72A3 0063"],"options":null},"Instant\\Carrier Box [Moon Walk] (Press L)":{"note":"Press and hold the L Button and you will run floating of any ledge slowing drifting down. If you keep pressing the A Button while Holding L it will act as a Moon Jump.","data":["D00CB2A1 0020","801C939F 0001"],"options":null},"Instant\\Hyperactive State [Invincible] (Press C-Right)":{"note":"","data":["D00CB2A1 0001","801CE616 0001"],"options":null},"Instant\\Rage Attack (Press C-Left)":{"note":"","data":["D00CB2A1 0002","801CE5BD 0001"],"options":null}},"C1D702BD-6D416547-C:4A":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D55E0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112CF0E 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800EB470 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D55C0 0001","50001701 0000","800D55C8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D5850 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D5889 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D55B9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D55BA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D55BB 0003"],"options":null}},"C2751D1A-F8C19BFF-C:50":{"Access Everything\\Start New Game":{"note":"","data":["50000502 0002","80204F3B 0013","50000502 0002","80204F42 0009","50000402 0002","80204F43 000A","80204F4B 000D","81204F4C 0E0F","81204F4E 0101","81204F5A 0100"],"options":null},"Have All Snowboards":{"note":"","data":["80204F3C 0001","81204F3E 0101","81204F40 0101"],"options":null},"Infinite Tools Options":{"note":"","data":["80206404 00??"],"options":{"Fan":"04","Frying Pan":"01","Ghost":"02","Invisible":"06","Rat Face":"08","Rock":"07","Rocket":"05","Super Ghost":"03","Super Rat Face":"09","Wings":"0A"}},"Infinite Weapons Options":{"note":"","data":["80206402 00??","80206403 0009"],"options":{"Bomb":"05","Freeze Shot":"03","Parachute":"02","Slap Stick":"01","Snowman":"04","Whirlwind":"06"}},"Max Coins":{"note":"","data":["8120639E 270F"],"options":null},"Max Money(Story Mode)":{"note":"","data":["81204EB0 0098","81204EB2 967F"],"options":null},"Open Extra Characters":{"note":"","data":["81204F4E 0101","80204F50 0001"],"options":null},"Trick Game 300 Points":{"note":"","data":["812065D2 012C"],"options":null}},"C29FF9E4-264BFE7D-C:45":{"Boris\\1-Hit Death":{"note":"","data":["D01543D5 0044","811543D4 0001"],"options":null},"Boris\\Infinite\\Health":{"note":"","data":["811543D4 0044"],"options":null},"Boris\\Infinite\\Lives":{"note":"","data":["811543D0 0063"],"options":null},"Boris\\Infinite\\Special":{"note":"","data":["811543DC 0044"],"options":null},"Boris\\Max Score":{"note":"","data":["81154404 000F","81154406 423F"],"options":null},"Curtis\\1-Hit Death":{"note":"","data":["D01541B9 0044","811541B8 0001"],"options":null},"Curtis\\Infinite\\Health":{"note":"","data":["811541B8 0044"],"options":null},"Curtis\\Infinite\\Lives":{"note":"","data":["811541B4 0063"],"options":null},"Curtis\\Infinite\\Special":{"note":"","data":["811541C0 0044"],"options":null},"Curtis\\Max Score":{"note":"","data":["811541E8 000F","811541EA 423F"],"options":null},"George\\1-Hit Death":{"note":"","data":["D015480D 0044","8115480C 0001"],"options":null},"George\\Infinite\\Health":{"note":"","data":["8115480C 0044"],"options":null},"George\\Infinite\\Lives":{"note":"","data":["81154808 0063"],"options":null},"George\\Infinite\\Special":{"note":"","data":["81154814 0044"],"options":null},"George\\Max Score":{"note":"","data":["8115483C 000F","8115483E 423F"],"options":null},"Infinite Time to Choose A Character":{"note":"","data":["8118CF9A 06CB"],"options":null},"Lizzie\\1-Hit Death":{"note":"","data":["D0154A29 0044","81154A28 0001"],"options":null},"Lizzie\\Infinite\\Health":{"note":"","data":["81154A28 0044"],"options":null},"Lizzie\\Infinite\\Lives":{"note":"","data":["81154A24 0063"],"options":null},"Lizzie\\Infinite\\Special":{"note":"","data":["81154A30 0044"],"options":null},"Lizzie\\Max Score":{"note":"","data":["81154A58 000F","81154A5A 423F"],"options":null},"Myukus Codes\\1-Hit Death":{"note":"","data":["D0154E61 0044","81154E60 0001"],"options":null},"Myukus Codes\\Infinite\\Health":{"note":"","data":["81154E60 0044"],"options":null},"Myukus Codes\\Infinite\\Lives":{"note":"","data":["81154E5C 0063"],"options":null},"Myukus Codes\\Infinite\\Special":{"note":"","data":["81154E68 0044"],"options":null},"Myukus Codes\\Max Score":{"note":"","data":["81154E90 000F","81154E92 423F"],"options":null},"Ralph\\1-Hit Death":{"note":"","data":["D0154C45 0044","81154C44 0001"],"options":null},"Ralph\\Infinite\\Health":{"note":"","data":["81154C44 0044"],"options":null},"Ralph\\Infinite\\Lives":{"note":"","data":["81154C40 0063"],"options":null},"Ralph\\Infinite\\Special":{"note":"","data":["81154C4C 0044"],"options":null},"Ralph\\Max Score":{"note":"","data":["81154C74 000F","81154C76 423F"],"options":null},"Ruby\\1-Hit Death":{"note":"","data":["D01545F1 0044","811545F0 0001"],"options":null},"Ruby\\Infinite\\Health":{"note":"","data":["811545F0 0044"],"options":null},"Ruby\\Infinite\\Lives":{"note":"","data":["811545EC 0063"],"options":null},"Ruby\\Infinite\\Special":{"note":"","data":["811545F8 0044"],"options":null},"Ruby\\Max Score":{"note":"","data":["81154620 000F","81154622 423F"],"options":null},"Unlock Cheat Menu":{"note":"","data":["810D5710 0001"],"options":null}},"C2E9AA9A-475D70AA-C:45":{"Beta Bottles Revenge Mode":{"note":"Bottles Revenge is a Beta mode from Banjo Tooie that the RWP team recently uncovered after an extraordinary amount of effort. Bottles the Spirit transforms into Bottles the Devil and posses enemies nearby and allows a second player hooked up to Pad 2 to play as that Posses character to try to foil Banjos Plans. As player one goes about its business, player two uses every enemy nearby to try to nab Banjo and take away some life. This mode is incredible, and you can control almost every enemy in the game: slot machines, flying creatures, uggers, zubbas...and this is just the beginning. (Congrats Rare Witch Project)","data":["8012B3F2 0001","800810C1 0002"],"options":null},"Fly At Anytime":{"note":"","data":["81120010 240E","81120012 0001","81120014 2400","D1081084 0400","81120014 A08E","81120016 0605"],"options":null},"Have Most of the Game Finished":{"note":"Start a new game,when you appear in Spiral Mountain press Top D-Pad. Go to the menu and you will notice all eggs, all moves are available. All the jiggies have been collected. Simply Save and Restart.","data":["5000AC01 0000","80290000 00FF","8029002B 007F","80290063 00FB","80290073 005F","D1081084 0800","8112C770 8029","D1081084 0800","8112C772 0000"],"options":null},"Have\\All Moves":{"note":"Press Top D-pad,Do not use with Have\\All Moves \u0026 Dragon Kazooie Or Have\\Dragon Kazooie","data":["D1081084 0800","8112C770 8029","D1081084 0800","8112C772 0000","81290018 FFFF","8129001A FFFF","8129001C FFFF","8129001E FFFF"],"options":null},"Have\\All Moves \u0026 Dragon Kazooie":{"note":"Press Top D-pad,Do not use with either Have all Moves,Or Have Dragon Kazooie","data":["D1081084 0800","8112C770 8029","D1081084 0800","8112C772 0000","81290018 FFFF","8129001A FFFF","8129001C FFFF","8129001E FFFF","81290078 FFFF","8129007A FFFF"],"options":null},"Have\\Dragon Kazooie":{"note":"Press Top D-pad,Do not use with Have All Modes Or Have All Moves \u0026 Dragon Kazooie","data":["D1081084 0800","8112C770 8029","D1081084 0800","8112C772 0000","81290078 FFFF","8129007A FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["8112B052 42C8"],"options":null},"Infinite\\Eggs, Feathers, All Items":{"note":"","data":["810D1A60 3442","810D1A62 03E7"],"options":null},"Infinite\\Energy\\Banjo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B65F 000A","8011B660 000A"],"options":null},"Infinite\\Energy\\Banjo and Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B644 0A0A"],"options":null},"Infinite\\Energy\\Bee":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B653 000A","8011B654 000A"],"options":null},"Infinite\\Energy\\Detonator":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B66E 0A0A"],"options":null},"Infinite\\Energy\\Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B662 0A0A"],"options":null},"Infinite\\Energy\\Mumbo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B668 0A0A"],"options":null},"Infinite\\Energy\\Snowball":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B647 0005"],"options":null},"Infinite\\Energy\\Stony":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B659 000A","8011B65A 000A"],"options":null},"Infinite\\Energy\\Submarine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B665 000A","8011B666 000A"],"options":null},"Infinite\\Energy\\T-Rex Baby":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B67F 000A","8011B680 000A"],"options":null},"Infinite\\Energy\\Washing Machine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B656 0A0A"],"options":null},"Instant Warp\\Options\\Cauldron Keep":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Cauldron Keep":"015D","Colosseum kickball arena":"0180","Crazy Castle Stockade Jump the hoops multi":"017C","Crazy Castle Stockade balloon burst multi":"017B","Dodgems":"0186","Grunty Industries packing game":"017D","Gun chamber":"0160","Gun room still":"016A","The gatehouse":"015E","Tower of Tragedy Quiz":"015F"}},"Instant Warp\\Options\\Cloud Cuckoo Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Central cavern":"013A","Cloud Cuckoo Land 1":"0136","Cloud Cuckoo Land 2":"0161","Humba wumba's wigwam":"0140","Inside the cheesewedge":"0138","Inside the pot o gold":"013D","Inside the trashcan":"0137","Mingy jongo's skull":"013F","Mumbo's skull":"013E","Trash can mini":"0185","Zubba's nest":"0139","Zubba's nest multi":"0188"}},"Instant Warp\\Options\\Glitter Gulch Mine":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Canary cave":"00DB","Chuffy's cab":"00D0","Crushing shed":"00CB","Flooded caves":"00CC","Fuel depot":"00CA","Generator caverns":"00D3","Gloomy caverns":"00D2","Humba":"00E9","Inside chuffy's boiler boss":"00D1","Mine":"00C7","Mumbo's hut":"00D9","Mumbo's skull":"0171","Ordnance Storage entrance":"0163","Ordnance Storage game":"0164","Ordnance Storage game Multi":"0165","Ordnance storage":"00DC","Power hut":"00D4","Power hut basement":"00CF","Prospectors hut":"00D8","Testing":"0170","Toxic gas cave":"00DA","Train station":"00D7","Water storage":"00CD","Water supply pipe":"0126","Waterfall cavern":"00CE","Wumba's wigwam":"00D5"}},"Instant Warp\\Options\\Grunty Industries":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Basement":"010F","Basement \"repair depot":"0110","Basement \"waste disposal\"":"0111","Elevator shaft":"0105","Floor 2":"0106","Floor 2 \"electromagnet chamber\"":"0107","Floor 3":"0108","Floor 3 \"boiler plant\"":"0109","Floor 3 \"packing room\"":"010A","Floor 4":"010B","Floor 4 \"cable room\"":"010C","Floor 4 \"clinkers cavern\"":"0162","Floor 4 \"quality control\"":"010D","Floor 5":"010E","Inside":"0101","Mumbo's skull":"0172","Outside":"0100","Sewer entrance":"0187","Train station":"0102","Trash compactor":"0104","Water supply pipe":"0125","Workers quarters":"0103"}},"Instant Warp\\Options\\Hailfire Peaks":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Boggy's igloo":"0131","Chilli billi":"012B","Chilly willy":"012C","Colosseum kickball stadium lobby":"012D","Ice train station":"012A","Icicle grotto":"0132","Icy side":"0128","Icy side still":"0168","Inside the volcano":"0133","Lava side":"0127","Lava train station":"0129"}},"Instant Warp\\Options\\Isle O Hags":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Cliff top":"0155","Cliff top Mumbo's skull":"0156","Heggy's egg shed":"0150","Jiggywiggy's temple":"0151","Pine Grove":"0154","Plateau":"0152","Plateau \"Honey B's Hive\"":"0153","Quagmire":"015C","Wooded Hollow":"014F","inside another digger tunnel":"015B","wasteland":"015A"}},"Instant Warp\\Options\\Jinjo Village":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Black Jinjo's House":"0146","Blue Jinjo's House":"0148","Bottles house":"0143","Brown Jinjo's House":"014A","Green Jinjo's House":"0145","Jinjo Village":"0142","King Jingalings throne room":"0144","Orange Jinjo's House":"014B","Purple Jinjo's House":"014C","Red Jinjo's House":"014D","White Jinjo's House":"014E","Yellow Jinjo's House":"0147"}},"Instant Warp\\Options\\Jolly Roger's Lagoon":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Ancient Swimming Baths":"00F4","Atlantis":"01A8","Blubber's wave race hire":"00FF","Electric Eels lair":"00F6","Inside the big fish":"00F8","Jolly Roger's Lagoon":"01A7","Jolly's":"00ED","Pawno's emporium":"00EE","Seabottom":"01A9","Seaweed Sanctum":"00F7","mumbo's skull":"00EF","sea bottom cavern":"0181","submarine multi":"0182","temple of the fishes":"00FA"}},"Instant Warp\\Options\\Mayahem Temple":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Code chamber":"00BC","Humba's Wigwam":"00B6","Inside Targitzans Temple":"0178","Jade Snake Grove":"00C4","Kickball Arena":"00C9","Mayan Kickball Arena":"017F","Multi":"0166","Mumbo's skull":"00B7","Prison Compound":"00B9","Still":"0167","Targitzan Temple Lobby":"0179","Targitzan's Slighty Sacred Temple":"0177","Targitzan's Temple Boss":"017A","The Temple":"00B8","Treasure Chamber":"00C5"}},"Instant Warp\\Options\\Not sure":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Bottles house":"0143","Bottles house still":"0169","HAG Inside":"018A","HAG1 Final Boss":"019A","Humba Wumba's wigwam 1":"0135","Humba Wumba's wigwam 2":"0157","Inside Chuffy's wagon":"0121","Inside the digger tunnel":"0141","Jingalings Zombified Palace":"019B","Lord woo fak fak":"00FC","Mr Patch":"00F9","Mumbo's Skull":"0134","Smuggler cavern":"01A6"}},"Instant Warp\\Options\\Spiral Mountain":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Banjo's house":"0173","Behind The Waterfall":"00AE","Grunty's Old Lair":"00AD","Top Of Castle":"00AF"}},"Instant Warp\\Options\\Terrydacty Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Bonfire caverns":"011B","Chompa's belly multi":"0183","Humba's Wigwam":"011E","Inside chompa's belly":"0123","Inside the mountain":"0116","Oogle boogles cave":"0115","River passage":"0117","Stomping plains":"011A","Styracosaurus family cave":"0118","Terry's nest":"0113","Terrydacty Land":"0112","Train station":"0114","Unga bunga's cave":"0119"}},"Instant Warp\\Options\\Witchy World":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Balloon burst game":"00E4","Cave of horrors":"00EA","Crazy castle lobby":"00E2","Crazy castle pump room":"00E3","Crazy castle stockade":"00E1","Crazy castle stockade \"sop\"":"013B","Dodgem challenge \"1 vs 1\"":"00DE","Dodgem challenge \"2 vs 1\"":"00DF","Dodgem challenge \"3 vs 1\"":"00E0","Dodgem dome lobby":"00DD","Haunted cavern":"00EB","Hoop hurry game":"00E5","Mumbo's skull":"0176","Saucer of Peril":"0124","Star spinner":"00E6","Star spinner \"sop\"":"013C","The inferno":"00E7","Train station":"00EC","Witcy World":"00D6"}},"Monsters dont Hurt Banjo":{"note":"","data":["50002430 0000","80132EF5 0000","50002430 0000","80132EF6 0000","50002430 0000","80132EF7 0000","50002430 0000","80132EF8 0000","50002430 0000","80132EF9 0000"],"options":null},"Multi-Player\\Everyone Infinite All Eggs Multiplayer":{"note":"All blaster modes specifically.[ Thanks retroben, awesome work on this!]","data":["810EA078 0C04","810EA07A 8040","81120100 3C08","81120102 8008","81120104 8108","81120106 4288","81120108 1100","8112010A 0010","8112010C 0000","8112010E 0000","81120110 3C08","81120112 8008","81120114 8D08","81120116 4288","81120118 0008","8112011A 4200","8112011C 0008","8112011E 4202","81120120 0008","81120122 4080","81120124 3C04","81120126 8000","81120128 0104","8112012A 4020","8112012C 3C04","8112012E 2406","81120130 2484","81120132 0064","81120134 AD04","81120136 31C4","81120138 3C04","8112013A 2408","8112013C 2484","8112013E FFFE","81120140 AD04","81120142 31CC","81120144 3C04","81120146 8013","81120148 8C84","8112014A 2DC4","8112014C 0802","8112014E 2098","81120150 0000","81120152 0000"],"options":null},"Multi-Player\\Infinite Health\\Player 1":{"note":"","data":["80135531 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 2":{"note":"","data":["80135535 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 3":{"note":"","data":["80135539 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 4":{"note":"","data":["8013553D 0064"],"options":null},"Play As":{"note":"To use this cheat, put the cheat on, then press L as you walk through a door to become that chosen character. Do not try to use the following character in Banjos house or anywhere as small or you will get stuck and wont be able to continue. Snowball Washing machine Submarine Golden Goliath Truck T-rex baby and T-rex daddy","data":["D0081085 0020","8012704C 00??"],"options":{"Banjo":"0A","Banjo and Kazooie":"01","Bee":"06","Detonator":"0F","Golden Goliath":"0E","Kazooie":"0B","Mumbo":"0D","Snowball":"02","Stony":"08","Submarine":"0C","T-rex baby":"12","T-rex daddy":"13","Truck":"10","Washing machine":"07"}},"Realistic tunnel entrance portals":{"note":"","data":["810F70D4 0C10","810F70D6 4000","81410000 3C0E","81410002 8008","81410004 81CE","81410006 7AD0","81410008 11C0","8141000A 0015","8141000C 0000","8141000E 0000","81410010 3C0E","81410012 8008","81410014 8DCE","81410016 7AD0","81410018 000E","8141001A 7200","8141001C 000E","8141001E 7202","81410020 000E","81410022 7080","81410024 3C05","81410026 8000","81410028 01C5","8141002A 7020","8141002C 2405","8141002E 1000","81410030 A5C5","81410032 0EE4","81410034 A5C5","81410036 0F7C","81410038 A5C5","8141003A 0FA4","8141003C 0005","8141003E 2C00","81410040 34A5","81410042 003E","81410044 ADC5","81410046 0F18","81410048 2402","8141004A 000E","8141004C 00A2","8141004E 2823","81410050 ADC5","81410052 0F50","81410054 2402","81410056 0029","81410058 00A2","8141005A 2823","8141005C ADC5","8141005E 0FF4","81410060 2405","81410062 000E","81410064 0802","81410066 79C7","81410068 0000","8141006A 0000"],"options":null},"Shock Spring At Anytime":{"note":"Press Top D-pad,Do not use with Have\\All Moves Or Have\\Dragon Kazooie","data":["81120018 240E","8112001A 0001","8112001C 2400","D1081084 0800","8112001C A08E","8112001E 0606"],"options":null}},"C34304AC-2D79C021-C:45":{"Infinite Lives":{"note":"","data":["8010BCFF 0009"],"options":null},"Invincible":{"note":"","data":["8009F742 0001"],"options":null},"Level Select":{"note":"","data":["D009A913 0000","8009A913 00??"],"options":{"Level 1 - Shaolin Temple - China":"00","Level 2 - Wind Realm":"01","Level 3 - Earth Realm":"02","Level 4 - Water Realm":"03","Level 5 - Fire Ream":"04","Level 6 - Prison":"05","Level 7 - Bridge":"06","Level 8 - Fortress":"07"}},"Max Experience":{"note":"","data":["8111200E FC9A"],"options":null}},"C3B6DE9D-65D2DE76-C:50":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118DA00 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118DA02 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118DA04 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118DA06 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["50000402 0000","8018EE50 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["8016609D 00??","801660CA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["8016617D 00??","801661AA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["8016625D 00??","8016628A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["8016633D 00??","8016636A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["8016641D 00??","8016644A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["801664FD 00??","8016652A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818EF2F 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F6A55 0020","810F6B08 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F6A65 0020","810F78E0 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F6A75 0020","810F86B8 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F6A85 0020","810F9490 4000"],"options":null}},"C3CD76FF-9B9DCBDE-C:44":{"Freeze Enemies":{"note":"","data":["8008EE3B 0012"],"options":null},"Gore Mode":{"note":"","data":["8008EE37 0012"],"options":null},"Infinite\\Lives":{"note":"","data":["8008EE33 0012"],"options":null},"Infinite\\Primery Weapons":{"note":"","data":["8008EE30 0012"],"options":null},"Infinite\\Secondary Weapons":{"note":"","data":["8008EE31 0012"],"options":null},"Infinite\\Solaris":{"note":"Solaris are included in code","data":["8008EE3D 0012"],"options":null},"Infinite\\Titans":{"note":"Titans are included in code","data":["8008EE3C 0012"],"options":null},"Infinite\\Weapon Energy":{"note":"","data":["8008EE32 0012"],"options":null},"Invulnerability":{"note":"","data":["8008EE35 0012"],"options":null},"Level Select":{"note":"Accesses all Missions \u0026 Battle mode","data":["8008EE3E 0012"],"options":null},"One Shot Enemies":{"note":"","data":["8008EE3A 0012"],"options":null},"Psychedelic Mode":{"note":"","data":["8008EE39 0012"],"options":null},"Stealth Mode":{"note":"","data":["8008EE34 0012"],"options":null},"Turbo Mode":{"note":"","data":["8008EE38 0012"],"options":null},"Wireframe Mode":{"note":"","data":["8008EE36 0012"],"options":null}},"C3E7E29E-5D7251CC-C:50":{"99 Points Player 1":{"note":"","data":["8010C33F 0063"],"options":null},"Access All\\Cars \u0026 Tracks":{"note":"","data":["8104ADF6 0001"],"options":null},"Access All\\Cups":{"note":"","data":["8005444B 0003","8005442D 0000","8005442E 0000","8005442F 0000","80054477 0003","80054459 0000","8005445A 0000","8005445B 0000","800544A3 0003","80054485 0000","80054486 0000","80054487 0000"],"options":null},"Always 1st":{"note":"","data":["811157AE 0001","811157B6 0000","8110C33E 03E7"],"options":null},"Drones Have No Weapons":{"note":"","data":["8111CECE 0000"],"options":null},"Infinite Continues":{"note":"","data":["8110C332 0006"],"options":null},"Infinite Weapons\\Player 1":{"note":"","data":["81115798 0000","8111579A 00??","8111579E 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 2":{"note":"","data":["81117C60 0000","81117C62 00??","81117C66 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 3":{"note":"","data":["8111A128 0000","8111A12A 00??","8111A12E 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 4":{"note":"","data":["8111C5F0 0000","8111C5F2 00??","8111C5F6 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Laps To Race":{"note":"","data":["8107DD1E 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Number Of Drones In The Race":{"note":"","data":["8110FFF6 00??"],"options":{"1 Drone":"01","2 Drones":"02","3 Drones":"03","4 Drones":"04","5 Drones":"05","6 Drones":"06","7 Drones":"07","8 Drones":"08","9 Drones":"09"}}},"C3F19159-65D2BC5A-C:50":{"Number Of Goals Player 1":{"note":"","data":["80119043 00??"],"options":{"1 Goal":"01","10 Goals":"0A","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08","9 Goals":"09"}},"Number Of Goals Player 2":{"note":"","data":["80119047 00??"],"options":{"1 Goal":"01","10 Goals":"0A","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08","9 Goals":"09"}}},"C43E23A7-40B1681A-C:45":{"Infinite\\Balls":{"note":"","data":["800ABFB7 0000"],"options":null},"Infinite\\Character Creation Points":{"note":"","data":["800E2C31 00B0"],"options":null},"Infinite\\Outs":{"note":"","data":["800ABFBB 0000"],"options":null},"Infinite\\Strikes":{"note":"","data":["800ABFB9 0000"],"options":null},"Max\\Character Creation Accuracy":{"note":"","data":["810E2BF0 4170"],"options":null},"Max\\Character Creation Arm Strength":{"note":"","data":["810E2C20 4170"],"options":null},"Max\\Character Creation Bunting":{"note":"","data":["810E2C0C 4170"],"options":null},"Max\\Character Creation Clutch":{"note":"","data":["810E2BF4 4170"],"options":null},"Max\\Character Creation Clutch 2":{"note":"","data":["810E2C28 4170"],"options":null},"Max\\Character Creation Contact":{"note":"","data":["810E2BFC 4170"],"options":null},"Max\\Character Creation Defense":{"note":"","data":["810E2C1C 4170"],"options":null},"Max\\Character Creation Power":{"note":"","data":["810E2C00 4170"],"options":null},"Max\\Character Creation Speed":{"note":"","data":["810E2C18 4170"],"options":null},"Max\\Character Creation Streak":{"note":"","data":["810E2C24 4170"],"options":null},"Max\\Character Creation VS LHB":{"note":"","data":["810E2C10 4170"],"options":null},"Max\\Character Creation VS RHB":{"note":"","data":["810E2C14 4170"],"options":null},"Max\\Character Creation VS. LHP":{"note":"","data":["810E2C04 4170"],"options":null},"Max\\Character Creation VS. RHP":{"note":"","data":["810E2C08 4170"],"options":null}},"C49ADCA2-F1501B62-C:45":{"Always Have\\99 points":{"note":"","data":["8015FD09 0063"],"options":null},"Always first position":{"note":"","data":["80162A80 0001"],"options":null},"Only race one lap":{"note":"","data":["8015FC35 0001"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D01A10B5 0010","81162F28 4077","D01A10B5 0010","81162F30 4077"],"options":null}},"C5674160-0F5F453C-C:50":{"Lower Left Character\\Coin Options":{"note":"","data":["810D1002 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDAED 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800D1006 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["810D103A 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDB39 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800D103E 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["810D0F92 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDA55 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800D0F96 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["810D0FCA 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDAA1 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800D0FCE 00??"],"options":{"0 Stars":"00","99 Stars":"64"}}},"C71353BE-AA09A6EE-C:50":{"Always Normal Spirit\\Player 1":{"note":"","data":["801671F5 0032"],"options":null},"Always Normal Spirit\\Player 2":{"note":"","data":["80167689 0032"],"options":null},"Always Normal Spirit\\Player 3":{"note":"","data":["80167B1D 0032"],"options":null},"Always Normal Spirit\\Player 4":{"note":"","data":["80167FB1 0032"],"options":null},"Always Special\\Player 1":{"note":"","data":["80167235 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["801676C9 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["80167B5D 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["80167FF1 0004"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 1":{"note":"","data":["801671F4 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 2":{"note":"","data":["80167688 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 3":{"note":"","data":["80167B1C 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 4":{"note":"","data":["80167FB0 0064"],"options":null},"Have All Characters":{"note":"","data":["8109ED5A FFFF"],"options":null},"Infinite Create-A-Wrestler Attribute Points":{"note":"","data":["8011A81B 001E"],"options":null},"Max Attributes":{"note":"","data":["8011A811 0032","8011A813 0032","8011A815 0032","8011A817 0032","8011A819 0032"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["801671F5 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["80167689 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["80167B1D 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["80167FB1 00FF"],"options":null},"No Spirit\\Player 1":{"note":"","data":["801671F5 0000"],"options":null},"No Spirit\\Player 2":{"note":"","data":["80167689 0000"],"options":null},"No Spirit\\Player 3":{"note":"","data":["80167B1D 0000"],"options":null},"No Spirit\\Player 4":{"note":"","data":["80167FB1 0000"],"options":null},"Specials Don't Run Out":{"note":"","data":["8112AD94 2400"],"options":null},"Timer Is Always 00:00":{"note":"","data":["8016F0AF 0000"],"options":null},"Ultimate Codes\\Player 1":{"note":"","data":["801671F4 0064"],"options":null},"Ultimate Codes\\Player 2":{"note":"","data":["80167688 0064"],"options":null},"Ultimate Codes\\Player 3":{"note":"","data":["80167B1C 0064"],"options":null},"Ultimate Codes\\Player 4":{"note":"","data":["80167FB0 0064"],"options":null},"Weapon Select\\Player 1":{"note":"","data":["81167236 0300","81166D90 ????","81166D92 0000","80166E50 0000"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 2":{"note":"","data":["811676CA 0300","81166DC0 ????","80166DC2 0001","80166E51 0001"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 3":{"note":"","data":["81167B5E 0300","81166DF0 ????","80166DF2 0002","80166E52 0002"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 4":{"note":"","data":["81167FF2 0300","81166E18 ????","81166E1A 0003","80166E53 0003"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}}},"C7C98F8E-42145DDE-C:45":{"Allways 1st":{"note":"","data":["8111D7EA 0000"],"options":null},"Have All\\Cars \u0026 Cups\\Player 1":{"note":"","data":["81124A0A FFFF"],"options":null},"Have All\\Cars \u0026 Cups\\Player 2":{"note":"","data":["81124B4A FFFF"],"options":null},"Have All\\Special Cars\\Player 1":{"note":"","data":["81124A04 FFFF","81124A06 FFFF","81124A0A FFFF"],"options":null},"Have All\\Special Cars\\Player 2":{"note":"","data":["81124B44 FFFF","81124B46 FFFF","81124B4A FFFF"],"options":null},"Have All\\Tracks":{"note":"","data":["81124A0E FFFF"],"options":null},"Infinite Turbos\\Player 1":{"note":"","data":["80118CFC 000A"],"options":null},"Infinite Turbos\\Player 2":{"note":"","data":["80119478 000A"],"options":null},"Max Tournament Points":{"note":"","data":["81124A16 00FF"],"options":null},"Press L For Time Is Always 0:00:00\\Player 1":{"note":"","data":["D0137FE5 0020","810F3900 0000","D0137FE5 0020","810F3902 0000"],"options":null},"Press L For Time Is Always 0:00:00\\Player 2":{"note":"","data":["D0137FED 0020","810F3900 0000","D0137FED 0020","810F3902 0000"],"options":null},"Start On Lap Modifier\\Player 1":{"note":"","data":["D0118AA8 0000","80118AA8 00??"],"options":{"1st":"00","2nd":"01","3rd":"02","4th":"03"}},"Start On Lap Modifier\\Player 2":{"note":"","data":["D0119224 0000","80119224 00??"],"options":{"1st":"00","2nd":"01","3rd":"02","4th":"03"}}},"C83CEB83-FDC56219-C:50":{"Always 1st":{"note":"","data":["8022CC16 0001"],"options":null},"Class Select":{"note":"This code is useful because you can play Class AA without having to beat a level!\u0026 then once any edit is done while the game is running","data":["8021C297 00??"],"options":{"1 Play":"04","2 Play":"05","3 Play":"06","4 Play":"07","Class AA":"03","Class B":"01","Class C":"00"}},"Super Speed":{"note":"This is Turbo fast,So to slow it down a little more keep the B button pressed down","data":["81228FA8 4800"],"options":null}},"C851961C-78FCAAFA-C:45":{"Choose Vehicle":{"note":"Make your Choice \u0026 then Press GS To Activate,But do not use with any other Press GS Cheat Codes.","data":["883626A7 00??"],"options":{"Birdman":"06","Cannonball":"03","Gyrocopter":"02","Hang Glider":"00","Jumble Hopper":"05","Rocket Belt":"01","Skydiving":"04"}},"Fly As Gray Plane In USA Level":{"note":"Press GS To Activate,But do not use with any other Press GS Cheat Codes.","data":["89362748 0008","813627B0 3F30","8024CDF5 006E"],"options":null},"Fly As Yellow Plane In USA Level":{"note":"Press GS To Activate,But do not use with any other Press GS Cheat Codes.","data":["89362748 0009","813627B0 3EE0","8024CDF5 006E"],"options":null},"Have Perfect Score in all Class \u0026 Level's":{"note":"With these codes, if you want them to save, you have to play a level, and lose and just choose quit after it tallies up your score. Also dont keep the code active once you save the level at 100%, turn the code off and continue with the other levels!","data":["8036427D 0064","803642AD 0064","803642DD 0064","80364911 0064","80364A61 0064","80364941 0064","80364A91 0064","80364971 0064","80364AC1 0064","80364FA5 0064","803650F5 0064","80365245 0064","80364FD5 0064","80365125 0064","80365275 0064","80365005 0064","80365155 0064","803652A5 0064","80365639 0064","80365789 0064","803658D9 0064","80365669 0064","803657B9 0064","80365909 0064","80365699 0064","803657E9 0064","80365939 0064","8036430D 0019","8036445D 0019","803645AD 0019","803646FD 0019","8036433D 0064","8036436D 0064","803649A1 0019","80364AF1 0019","80364C41 0019","80364D91 0019","803649D1 0064","80364A01 0064","80365035 0019","80365185 0019","803652D5 0019","80365425 0019","80365065 0064","80365095 0064"],"options":null},"Infinite Fuel\\Gyrocopter":{"note":"","data":["80362821 0081"],"options":null},"Infinite Fuel\\Rocket Belt":{"note":"","data":["80362841 0081"],"options":null},"Time Always 00'00'10":{"note":"This Cheat code is for All Events","data":["80362750 0001"],"options":null}},"C8BB4DD9-CC5F430B-C:45":{"Have All Elements":{"note":"","data":["8107BAA4 3232","8107BAA6 3232"],"options":null},"Infinite Health":{"note":"","data":["8107BA84 01F4","8107BA86 01F4"],"options":null},"Infinite Magic Points":{"note":"","data":["8107BA88 01F4","8107BA8A 01F4"],"options":null},"Super Agility":{"note":"","data":["8107BA8E 01F4"],"options":null},"Super Defense":{"note":"","data":["8107BA8C 01F4"],"options":null}},"C8DC65EB-3D8C8904-C:45":{"Always 1st":{"note":"","data":["812C4C96 0001"],"options":null},"Have All\\Boats":{"note":"","data":["812B5CA2 0101","812B5CA4 0101","812B5CA6 0101","812B5CA8 0101","812B5CAA 0101","812B5CAC 0101","812B5CAE 0101"],"options":null},"Have All\\Races":{"note":"","data":["812B5C94 0101","812B5C96 0101","812B5C98 0101","812B5C9A 0101","812B5C9C 0101","812B5C9E 0101","812B5CA0 0101"],"options":null},"Hydro Speedway":{"note":"","data":["802B5C94 00??"],"options":{"Unlocked \u0026 Completed":"03","Unlocked \u0026 Not Completed":"01"}},"Infinite\\Boosts\\Player 1":{"note":"","data":["812C4C9C 4190"],"options":null},"Infinite\\Boosts\\Player 2":{"note":"","data":["812C4FCC 4190"],"options":null},"Infinite\\Time":{"note":"","data":["812B4890 42C8"],"options":null}},"C9176D39-EA4779D1-C:50":{"Beta Bottles Revenge Mode":{"note":"Bottles Revenge is a Beta mode from Banjo Tooie that the RWP team recently uncovered after an extraordinary amount of effort. Bottles the Spirit transforms into Bottles the Devil and posses enemies nearby and allows a second player hooked up to Pad 2 to play as that Posses character to try to foil Banjos Plans. As player one goes about its business, player two uses every enemy nearby to try to nab Banjo and take away some life. This mode is incredible, and you can control almost every enemy in the game: slot machines, flying creatures, uggers, zubbas...and this is just the beginning. (Congrats Rare Witch Project)","data":["80130402 0001","8008B4D1 0002"],"options":null},"Have\\All Moves":{"note":"Press Top D-pad,Do not use with Have\\All Moves \u0026 Dragon Kazooie Or Have\\Dragon Kazooie","data":["D1083F08 0800","811314F0 8029","D1083F08 0800","811314F2 0000","81290018 FFFF","8129001A FFFF","8129001C FFFF","8129001E FFFF"],"options":null},"Have\\All Moves \u0026 Dragon Kazooie":{"note":"Press Top D-pad,Do not use with Have\\All Moves Or Have\\Dragon Kazooie","data":["D1083F08 0800","811314F0 8029","D1083F08 0800","811314F2 0000","81290018 FFFF","8129001A FFFF","8129001C FFFF","8129001E FFFF","81290078 FFFF","8129007A FFFF"],"options":null},"Have\\Dragon Kazooie":{"note":"","data":["D1083F08 0800","811314F0 8029","D1083F08 0800","811314F2 0000","81290078 FFFF","8129007A FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["8112FFD2 42C8"],"options":null},"Infinite\\Energy\\Banjo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207AF 000A","801207B0 000A"],"options":null},"Infinite\\Energy\\Banjo and Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0A0A","81120794 0A0A"],"options":null},"Infinite\\Energy\\Bee":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207A3 000A","801207A4 000A"],"options":null},"Infinite\\Energy\\Detonator":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","811207BE 0A0A"],"options":null},"Infinite\\Energy\\Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","811207B2 0A0A"],"options":null},"Infinite\\Energy\\Mumbo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","811207B8 0A0A"],"options":null},"Infinite\\Energy\\Snowball":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","80120797 0005"],"options":null},"Infinite\\Energy\\Stony":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207A9 000A","8011B65A 000A"],"options":null},"Infinite\\Energy\\Submarine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207B5 000A","801207B6 000A"],"options":null},"Infinite\\Energy\\T-Rex Baby":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207CF 000A","801207D0 000A"],"options":null},"Infinite\\Energy\\Washing Machine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","811207A6 0A0A"],"options":null},"Instant Warp\\Options\\Cauldron Keep":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Cauldron Keep":"015D","Colosseum kickball arena":"0180","Crazy Castle Stockade Jump the hoops multi":"017C","Crazy Castle Stockade balloon burst multi":"017B","Dodgems":"0186","Grunty Industries packing game":"017D","Gun chamber":"0160","Gun room still":"016A","The gatehouse":"015E","Tower of Tragedy Quiz":"015F"}},"Instant Warp\\Options\\Cloud Cuckoo Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Central cavern":"013A","Cloud Cuckoo Land 1":"0136","Cloud Cuckoo Land 2":"0161","Humba wumba's wigwam":"0140","Inside the cheesewedge":"0138","Inside the pot o gold":"013D","Inside the trashcan":"0137","Mingy jongo's skull":"013F","Mumbo's skull":"013E","Trash can mini":"0185","Zubba's nest":"0139","Zubba's nest multi":"0188"}},"Instant Warp\\Options\\Glitter Gulch Mine":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Canary cave":"00DB","Chuffy's cab":"00D0","Crushing shed":"00CB","Flooded caves":"00CC","Fuel depot":"00CA","Generator caverns":"00D3","Gloomy caverns":"00D2","Humba":"00E9","Inside chuffy's boiler boss":"00D1","Mine":"00C7","Mumbo's hut":"00D9","Mumbo's skull":"0171","Ordnance Storage entrance":"0163","Ordnance Storage game":"0164","Ordnance Storage game Multi":"0165","Ordnance storage":"00DC","Power hut":"00D4","Power hut basement":"00CF","Prospectors hut":"00D8","Testing":"0170","Toxic gas cave":"00DA","Train station":"00D7","Water storage":"00CD","Water supply pipe":"0126","Waterfall cavern":"00CE","Wumba's wigwam":"00D5"}},"Instant Warp\\Options\\Grunty Industries":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Basement":"010F","Basement \"repair depot":"0110","Basement \"waste disposal\"":"0111","Elevator shaft":"0105","Floor 2":"0106","Floor 2 \"electromagnet chamber\"":"0107","Floor 3":"0108","Floor 3 \"boiler plant\"":"0109","Floor 3 \"packing room\"":"010A","Floor 4":"010B","Floor 4 \"cable room\"":"010C","Floor 4 \"clinkers cavern\"":"0162","Floor 4 \"quality control\"":"010D","Floor 5":"010E","Inside":"0101","Mumbo's skull":"0172","Outside":"0100","Sewer entrance":"0187","Train station":"0102","Trash compactor":"0104","Water supply pipe":"0125","Workers quarters":"0103"}},"Instant Warp\\Options\\Hailfire Peaks":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Boggy's igloo":"0131","Chilli billi":"012B","Chilly willy":"012C","Colosseum kickball stadium lobby":"012D","Ice train station":"012A","Icicle grotto":"0132","Icy side":"0128","Icy side still":"0168","Inside the volcano":"0133","Lava side":"0127","Lava train station":"0129"}},"Instant Warp\\Options\\Isle O Hags":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Cliff top":"0155","Cliff top Mumbo's skull":"0156","Heggy's egg shed":"0150","Jiggywiggy's temple":"0151","Pine Grove":"0154","Plateau":"0152","Plateau \"Honey B's Hive\"":"0153","Quagmire":"015C","Wooded Hollow":"014F","inside another digger tunnel":"015B","wasteland":"015A"}},"Instant Warp\\Options\\Jinjo Village":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Black Jinjo's House":"0146","Blue Jinjo's House":"0148","Bottles house":"0143","Brown Jinjo's House":"014A","Green Jinjo's House":"0145","Jinjo Village":"0142","King Jingalings throne room":"0144","Orange Jinjo's House":"014B","Purple Jinjo's House":"014C","Red Jinjo's House":"014D","White Jinjo's House":"014E","Yellow Jinjo's House":"0147"}},"Instant Warp\\Options\\Jolly Roger's Lagoon":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Ancient Swimming Baths":"00F4","Atlantis":"01A8","Blubber's wave race hire":"00FF","Electric Eels lair":"00F6","Inside the big fish":"00F8","Jolly Roger's Lagoon":"01A7","Jolly's":"00ED","Pawno's emporium":"00EE","Seabottom":"01A9","Seaweed Sanctum":"00F7","mumbo's skull":"00EF","sea bottom cavern":"0181","submarine multi":"0182","temple of the fishes":"00FA"}},"Instant Warp\\Options\\Mayahem Temple":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Code chamber":"00BC","Humba's Wigwam":"00B6","Inside Targitzans Temple":"0178","Jade Snake Grove":"00C4","Kickball Arena":"00C9","Mayan Kickball Arena":"017F","Multi":"0166","Mumbo's skull":"00B7","Prison Compound":"00B9","Still":"0167","Targitzan Temple Lobby":"0179","Targitzan's Slighty Sacred Temple":"0177","Targitzan's Temple Boss":"017A","The Temple":"00B8","Treasure Chamber":"00C5"}},"Instant Warp\\Options\\Not sure":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Bottles house":"0143","Bottles house still":"0169","HAG Inside":"018A","HAG1 Final Boss":"019A","Humba Wumba's wigwam 1":"0135","Humba Wumba's wigwam 2":"0157","Inside Chuffy's wagon":"0121","Inside the digger tunnel":"0141","Jingalings Zombified Palace":"019B","Lord woo fak fak":"00FC","Mr Patch":"00F9","Mumbo's Skull":"0134","Smuggler cavern":"01A6"}},"Instant Warp\\Options\\Spiral Mountain":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Banjo's house":"0173","Behind The Waterfall":"00AE","Grunty's Old Lair":"00AD","Top Of Castle":"00AF"}},"Instant Warp\\Options\\Terrydacty Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Bonfire caverns":"011B","Chompa's belly multi":"0183","Humba's Wigwam":"011E","Inside chompa's belly":"0123","Inside the mountain":"0116","Oogle boogles cave":"0115","River passage":"0117","Stomping plains":"011A","Styracosaurus family cave":"0118","Terry's nest":"0113","Terrydacty Land":"0112","Train station":"0114","Unga bunga's cave":"0119"}},"Instant Warp\\Options\\Witchy World":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Balloon burst game":"00E4","Cave of horrors":"00EA","Crazy castle lobby":"00E2","Crazy castle pump room":"00E3","Crazy castle stockade":"00E1","Crazy castle stockade \"sop\"":"013B","Dodgem challenge \"1 vs 1\"":"00DE","Dodgem challenge \"2 vs 1\"":"00DF","Dodgem challenge \"3 vs 1\"":"00E0","Dodgem dome lobby":"00DD","Haunted cavern":"00EB","Hoop hurry game":"00E5","Mumbo's skull":"0176","Saucer of Peril":"0124","Star spinner":"00E6","Star spinner \"sop\"":"013C","The inferno":"00E7","Train station":"00EC","Witcy World":"00D6"}},"Multi-Player\\Infinite Health\\Player 1":{"note":"","data":["8013A541 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 2":{"note":"","data":["8013A545 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 3":{"note":"","data":["8013A549 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 4":{"note":"","data":["8013A54D 0064"],"options":null},"Play As":{"note":"To use this cheat, put the cheat on, then press L as you walk through a door to become that chosen character","data":["D008B494 0020","8012BFAC 00??"],"options":{"Banjo":"0A","Banjo and Kazooie":"01","Bee":"06","Detonator":"0F","Golden Goliath":"0E","Kazooie":"0B","Mumbo":"0D","Snowball":"02","Stony":"08","Submarine":"0C","T-rex baby":"12","T-rex daddy":"13","Truck":"10","Washing machine":"07"}}},"C9C3A987-5810344C-C:4A":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118A080 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118A082 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118A084 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118A086 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["8018B4D8 00??","8018B4D9 00??","8018B4DA 00??","8018B4DB 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["8016271D 00??","8016274A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["801627FD 00??","8016282A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["801628DD 00??","8016290A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["801629BD 00??","801629EA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["80162A9D 00??","80162ACA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["80162B7D 00??","80162BAA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818B5BF 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F61B5 0020","810F6268 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F61C5 0020","810F7040 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F61D5 0020","810F7E18 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F61E5 0020","810F8BF0 4000"],"options":null}},"CA12B547-71FA4EE4-C:45":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2212 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE51F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80382CB7 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","802020F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801DDC55 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801FC5C5 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801EF96D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","80202225 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801D9ABD 0001"],"options":null}},"CA1BB86F-41CCA5C5-C:4A":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D55E0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112CF2E 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800EB470 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D55C0 0001","50001701 0000","800D55C8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D5850 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D5889 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D55B9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D55BA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D55BB 0003"],"options":null}},"CA2A7444-71DAB71C-C:50":{"Always Place 1st":{"note":"","data":["80152D61 0000"],"options":null},"Have All\\Cars":{"note":"","data":["50001504 0000","800AAD4B 0001"],"options":null},"Have All\\Tracks":{"note":"","data":["8116A0EC FFFF"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D01354BF 0010","8112CE6C 43CB"],"options":null}},"CB93DB97-7F5C63D5-C:46":{"Have 99 coins":{"note":"","data":["810BBBDE 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C8542 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BBBCC 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BBBD6 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BBBDA 0009"],"options":null}},"CBFE69C7-F2C0AB2A-C:45":{"Access Level Select":{"note":"On the main menu Scroll down to make CHEATS visible to go into Level Select.For in-Game Cheats,Pause gameplay.","data":["810DD21C 8001"],"options":null},"Have\\All TARZAN Letters":{"note":"","data":["800DD225 00FF"],"options":null},"Have\\Coins Collected 100%":{"note":"","data":["800DD257 0064"],"options":null},"Have\\Full Portrait":{"note":"","data":["800DD224 00FF"],"options":null},"Have\\Level \u0026 Tokens Completed 100%":{"note":"","data":["800DD22F 0000","800DD230 0001","800DD231 0000"],"options":null},"Infinite\\Bonus Timer":{"note":"This is For All Timers on Bonus Levels","data":["801735FE 0025"],"options":null},"Infinite\\Green Weapon":{"note":"","data":["81192096 0063"],"options":null},"Infinite\\Health":{"note":"","data":["811921C0 0120"],"options":null},"Infinite\\Lives":{"note":"","data":["800DD252 00??"],"options":{"3 Lives":"03","99 Lives":"63"}},"Infinite\\Purple Weapon":{"note":"","data":["8119209A 0063"],"options":null},"Infinite\\Red Weapon":{"note":"","data":["81192098 0063"],"options":null},"Press GS For\\Sabor Attacks\\Sabor 1 Hit Kill":{"note":"","data":["8924A23E 0001"],"options":null}},"CCEB3858-26952D97-C:50":{"Have 99 Coins":{"note":"","data":["810BB4FE 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C7E62 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BB4EC 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BB4F6 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BB4FA 0009"],"options":null}},"CCEDB696-D3883DB4-C:4A":{"All Items":{"note":"","data":["50002402 0202","810EC7E0 0001","50004601 0000","800EC861 0003"],"options":null},"Item Modifier Codes\\Position 01":{"note":"","data":["800EC7E0 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 02":{"note":"","data":["800EC7E1 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 03":{"note":"","data":["800EC7E2 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 04":{"note":"","data":["800EC7E3 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 05":{"note":"","data":["800EC7E4 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 06":{"note":"","data":["800EC7E5 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 07":{"note":"","data":["800EC7E6 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 08":{"note":"","data":["800EC7E7 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 09":{"note":"","data":["800EC7E8 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 10":{"note":"","data":["800EC7E9 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 11":{"note":"","data":["800EC7EA 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 12":{"note":"","data":["800EC7EB 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 13":{"note":"","data":["800EC7EC 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 14":{"note":"","data":["800EC7ED 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 15":{"note":"","data":["800EC7EE 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 16":{"note":"","data":["800EC7EF 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 17":{"note":"","data":["800EC7F0 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 18":{"note":"","data":["800EC7F1 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 19":{"note":"","data":["800EC7F2 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 20":{"note":"","data":["800EC7F3 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 21":{"note":"","data":["800EC7F4 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 22":{"note":"","data":["800EC7F5 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 23":{"note":"","data":["800EC7F6 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 24":{"note":"","data":["800EC7F7 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 25":{"note":"","data":["800EC7F8 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 26":{"note":"","data":["800EC7F9 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 27":{"note":"","data":["800EC7FA 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 28":{"note":"","data":["800EC7FB 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 29":{"note":"","data":["800EC7FC 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 30":{"note":"","data":["800EC7FD 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 31":{"note":"","data":["800EC7FE 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 32":{"note":"","data":["800EC7FF 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 33":{"note":"","data":["800EC800 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 34":{"note":"","data":["800EC801 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 35":{"note":"","data":["800EC802 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 36":{"note":"","data":["800EC803 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 37":{"note":"","data":["800EC804 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 38":{"note":"","data":["800EC805 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 39":{"note":"","data":["800EC806 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 40":{"note":"","data":["800EC807 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 41":{"note":"","data":["800EC808 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 42":{"note":"","data":["800EC809 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 43":{"note":"","data":["800EC80A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 44":{"note":"","data":["800EC80B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 45":{"note":"","data":["800EC80C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 46":{"note":"","data":["800EC80D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 47":{"note":"","data":["800EC80E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 48":{"note":"","data":["800EC80F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}}},"CD538CE4-618AFCF9-C:45":{"Have 6 Carrots":{"note":"","data":["80164519 007E"],"options":null},"Have All\\Collectibles\\Stage 1":{"note":"","data":["80164510 0014"],"options":null},"Have All\\Collectibles\\Stage 2":{"note":"","data":["80164511 0014"],"options":null},"Have All\\Collectibles\\Stage 3":{"note":"","data":["80164512 0014"],"options":null},"Have All\\Collectibles\\Stage 4":{"note":"","data":["80164513 0014"],"options":null},"Have All\\Collectibles\\Stage 5":{"note":"","data":["80164514 0014"],"options":null},"Have All\\Collectibles\\Stage 6":{"note":"","data":["80164515 0014"],"options":null},"Have All\\Costumes":{"note":"","data":["8016451A 00FE"],"options":null},"Have All\\Levels":{"note":"","data":["80164508 003F"],"options":null},"Infinite Health":{"note":"","data":["8018BA7D 000F"],"options":null},"Max Collectable Items":{"note":"","data":["80164501 0014"],"options":null},"Press L To levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D018BAB5 0020","8118B9E0 4200"],"options":null}},"CD5BEC0F-86FD1008-C:45":{"Extra Characters":{"note":"","data":["8113A488 1000","8113A48A 07FF","8113A48C 2000","8113A48E 3FFF"],"options":null},"Infinite Creation Points":{"note":"","data":["80136245 0000"],"options":null}},"CD7559AC-B26CF5AE-C:45":{"Access All Moves":{"note":"","data":["8037C3A0 0001","8037C3A1 007F","8037C3A2 00FF","8037C3A3 00FF"],"options":null},"Character Select":{"note":"When Mumbo transforms you hold:C-Up for the Termite,C-Right for the Pumpkin,C-Down for the Walrus,C-Left for the Crocc,R for the Bumble Bee,L for the Washing Machine,Press nothing to turn into Banjo","data":["D0281251 0008","8037C2D3 0002","D0281251 0001","8037C2D3 0003","D0281251 0004","8037C2D3 0004","D0281251 0002","8037C2D3 0005","D0281251 0010","8037C2D3 0006","D0281251 0020","8037C2D3 0007"],"options":null},"Do Shock Spring Jump From Anywhere":{"note":"Press A Button. Do not use with Take Off And Fly From Anywhere","data":["8037C1D2 0002"],"options":null},"Game 100% Complete":{"note":"","data":["8137C3A0 001F","50000302 0000","8137C3A2 FFFF","50000602 0000","813832C0 FFFF","81383FCA 0064","81383FDC 0064","50000802 0000","813832F0 FFFF","81385FA0 0063","81385FC4 0063","81385FF0 0064","50000602 0000","81385FF2 6464","50001002 0000","813831A8 FFFF","813831B0 FF7F","813831B2 FFB0","813831B4 3DA6","813831B6 F264","813831C6 FF7F"],"options":null},"Have Zero Time all Levels":{"note":"","data":["50000B04 0000","81386004 3000"],"options":null},"Infinite\\Air":{"note":"","data":["813851AE 0E10"],"options":null},"Infinite\\Always Have All Jinjos":{"note":"","data":["80385F7B 00FF"],"options":null},"Infinite\\Eggs":{"note":"","data":["80385F67 00FF"],"options":null},"Infinite\\Gold Feathers":{"note":"","data":["80385F73 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["803851A3 0008"],"options":null},"Infinite\\Jiggies":{"note":"","data":["80385FCB 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["80385F8B 00FF"],"options":null},"Infinite\\Mumbo Tokens":{"note":"","data":["80385FC6 00FF","80385FA2 00FF"],"options":null},"Infinite\\Notes":{"note":"Just collect one Note to Have 255 Notes in all Worlds.","data":["80385FF2 00FF","80385F62 0001"],"options":null},"Infinite\\Red Feathers":{"note":"","data":["80385F6F 00FF"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0281251 0020","8137C4BC 43E0"],"options":null},"Secret Items":{"note":"","data":["81283400 ????"],"options":{"Have All Collected":"FFFF","Have None":"0000"}},"Take Off And Fly From Anywhere":{"note":"Press A Button. Do not use with Do Shock Spring Jump From Anywhere","data":["8037C1D1 0002"],"options":null}},"CEA8B54F-7F21D503-C:45":{"Always Berserk Mode":{"note":"","data":["801BF9AF 00FF"],"options":null},"Always Drop\\Player 1":{"note":"","data":["801BF9BB 00??"],"options":{"Bar":"00","Big Water":"06","Bomb":"0A","Corner":"02","Down Bar":"05","Down Square":"04","Fireball":"0B","Medium Water":"07","Small Water":"08","Smallest Water":"09","Square":"03","T":"01"}},"Always Drop\\Player 2":{"note":"","data":["801F013B 00??"],"options":{"Bar":"00","Big Water":"06","Bomb":"0A","Corner":"02","Down Bar":"05","Down Square":"04","Fireball":"0B","Medium Water":"07","Small Water":"08","Smallest Water":"09","Square":"03","T":"01"}},"Always Empty Drain":{"note":"","data":["801BF991 0000","811BF992 0000","811BF994 0000"],"options":null},"Infinite Ducks":{"note":"","data":["801BF94B 0009"],"options":null},"Infinite Lakes":{"note":"","data":["811BF93E 0009"],"options":null},"Mega Score":{"note":"","data":["801BF958 00FF","801EED04 00FF"],"options":null},"Practice Lessons Open":{"note":"","data":["810B0BAA 0008"],"options":null},"Stop Level Timer":{"note":"","data":["801BF9B2 00FF"],"options":null}},"CEA8B54F-7F21D503-C:50":{"Always Empty Drain":{"note":"","data":["801BF991 0000","811BF992 0000","811BF994 0000"],"options":null},"Bezerk Mode":{"note":"","data":["801BF9AF 00FF"],"options":null},"Stop Level Timer":{"note":"","data":["801BF9B2 00FF"],"options":null}},"CEDCDE1E-513A0502-C:50":{"Access Another World":{"note":"This is for Puzzle Mode","data":["8116D100 0001"],"options":null},"Bubble Pointer 1P V CPU":{"note":"","data":["8017E1FD 0001"],"options":null},"Bubble Pointer Puzzle":{"note":"","data":["801807CD 0001"],"options":null},"Infinite Credit":{"note":"","data":["80120171 00FF"],"options":null},"Max Points Aid":{"note":"","data":["81170E4A 25C2"],"options":null}},"CF8957AD-96D57EA9-C:45":{"Infinite\\Health":{"note":"For Overhead \u0026 Driving Levels","data":["81064DF0 42C8"],"options":null},"Unlock All\\Characters":{"note":"","data":["50000C01 0000","8006252D 0001"],"options":null},"Unlock All\\Levels":{"note":"","data":["50000301 0000","80062508 0001","50000801 0000","8006250C 0001","50000801 0000","80062516 0001","50000A01 0000","8006251F 0001"],"options":null}},"D0151AB0-FE5CA14B-C:45":{"Have All Weapons":{"note":"","data":["8120A8F6 FFFF"],"options":null},"Infinite\\Ammo (All Weapons)":{"note":"","data":["81261A40 A05B"],"options":null},"Infinite\\Armor":{"note":"","data":["8020A987 0064"],"options":null},"Infinite\\Experience":{"note":"","data":["8020A967 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["8020A965 0064"],"options":null},"Max\\Acro":{"note":"","data":["8020A96F 0007"],"options":null},"Max\\Attack":{"note":"","data":["8020A96B 0007"],"options":null},"Max\\Power":{"note":"","data":["8020A971 0007"],"options":null},"Max\\Speed":{"note":"","data":["8020A96D 0007"],"options":null},"Max\\Vitality":{"note":"","data":["8020A969 0007"],"options":null}},"D09BA538-1C1A5489-C:50":{"Car Select":{"note":"","data":["D00F5900 0000","800F5900 00??"],"options":{"Chevrolet Camaro":"03","Chrysler Jeep Jeepster (Prototype)":"08","Default":"00","Dodge Viper":"04","Donkey In Glass Box":"0E","Ferrari F40":"07","Hotdog":"0A","Hummer H1":"05","Jeep Wrangler":"02","McLaren F1":"09","Mitsubishi Eclipse":"01","Nintendo 64 Logo":"0C","Nintendo Power Car":"0B","Porsche 911 Turbo":"06","Taco":"0D"}},"Infinite\\Max Acceleration\\Player 1":{"note":"","data":["800F590D 0005"],"options":null},"Infinite\\Max Acceleration\\Player 2":{"note":"","data":["800F5AF9 0005"],"options":null},"Infinite\\Max Acceleration\\Player 3":{"note":"","data":["800F5CE5 0005"],"options":null},"Infinite\\Max Acceleration\\Player 4":{"note":"","data":["800F5ED1 0005"],"options":null},"Infinite\\Max Handling\\Player 1":{"note":"","data":["800F590C 0005"],"options":null},"Infinite\\Max Handling\\Player 2":{"note":"","data":["800F5AF8 0005"],"options":null},"Infinite\\Max Handling\\Player 3":{"note":"","data":["800F5CE4 0005"],"options":null},"Infinite\\Max Handling\\Player 4":{"note":"","data":["800F5ED0 0005"],"options":null},"Infinite\\Max Money\\Player 1":{"note":"","data":["800F5905 000F"],"options":null},"Infinite\\Max Money\\Player 2":{"note":"","data":["800F5AF1 000F"],"options":null},"Infinite\\Max Money\\Player 3":{"note":"","data":["800F5CDD 000F"],"options":null},"Infinite\\Max Money\\Player 4":{"note":"","data":["800F5EC9 000F"],"options":null},"Infinite\\Max Top Speed\\Player 1":{"note":"","data":["800F590E 0005"],"options":null},"Infinite\\Max Top Speed\\Player 2":{"note":"","data":["800F5AFA 0005"],"options":null},"Infinite\\Max Top Speed\\Player 3":{"note":"","data":["800F5CE6 0005"],"options":null},"Infinite\\Max Top Speed\\Player 4":{"note":"","data":["800F5ED2 0005"],"options":null},"Infinite\\Nitro\\Player 1":{"note":"","data":["800F590F 0009"],"options":null},"Infinite\\Nitro\\Player 2":{"note":"","data":["800F5AFB 0009"],"options":null},"Laps 2 Race":{"note":"","data":["80118E20 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"[Press F9]\\All Cars (All Modes)":{"note":"","data":["880EA08B 000E","88102A71 000E"],"options":null},"[Press F9]\\Jump To Season 6":{"note":"","data":["881023A8 0005"],"options":null}},"D124DBB7-7C9FF5E5-C:00":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["811744B8 FFFF","811744BA FFFF","811744BE 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FEC8 270F"],"options":null}},"D1A78A07-52A3DD3E-C:50":{"Access Secret Characters\\Bengal The Tiger":{"note":"","data":["800B4DB2 0011"],"options":null},"Access Secret Characters\\Festus":{"note":"","data":["800B0DC3 0001"],"options":null},"Access Secret Characters\\Kimmi \u0026 Cindy":{"note":"","data":["800B0DAA 0011"],"options":null},"Access Secret Characters\\Mark":{"note":"","data":["800B0DB7 0012"],"options":null},"Access Secret Characters\\Marvin The Alien":{"note":"","data":["800B0DC7 0001"],"options":null},"Access Secret Characters\\Robert \u0026 Delvis":{"note":"","data":["800B0DBA 0011"],"options":null},"Access Secret Characters\\Starr \u0026 Traci":{"note":"","data":["800B0DBE 0011"],"options":null},"Access Secret Characters\\Twfan \u0026 Eagamer":{"note":"","data":["800B0DAE 0011"],"options":null},"Infinite \u0026 Max Power-Ups":{"note":"","data":["800B4612 00F0","50000801 0000","800B4600 00FF"],"options":null}},"D1F7D8AB-293B0446-C:45":{"Extra Lives":{"note":"Not to be used with CLassic Mode, or it will freeze","data":["8007F90E 0063"],"options":null},"Extra Points":{"note":"Not to be used with CLassic Mode, or it will freeze","data":["8107F8FE FFFF"],"options":null},"Infinite Armageddon":{"note":"Not to be used with CLassic Mode, or it will freeze","data":["8107F892 0001"],"options":null},"Infinite Items On Pickup":{"note":"Not to be used with CLassic Mode, or it will freeze","data":["8107F8A2 270F"],"options":null},"Infinite Lives (Classic Asteroids)":{"note":"","data":["8007F90F 0009"],"options":null},"Unlock Classic Asteroids":{"note":"","data":["8106DF5A 0001"],"options":null}},"D25C1211-13EEBF67-C:44":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["8116FA44 FFFF","8116FA46 FFFF","8116FA4A 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FC1C 270F"],"options":null}},"D2BE2F14-38453788-C:45":{"0% in Move List":{"note":"","data":["81135620 0000"],"options":null},"Enable Everything":{"note":"","data":["8112E21C F000","8112E21E 09FF","8112E220 FFFF","8112E222 FFFF"],"options":null},"Infinite Creation Points":{"note":"","data":["80161313 0000"],"options":null},"Max\\Charisma":{"note":"","data":["8014E3EC 000A"],"options":null},"Max\\Mat Skills":{"note":"","data":["8014E3ED 000A"],"options":null},"Max\\Recovery":{"note":"","data":["8014E3EB 000A"],"options":null},"Max\\Speed":{"note":"","data":["8014E3EA 000A"],"options":null},"Max\\Strength":{"note":"","data":["8014E3E8 000A"],"options":null},"Max\\Toughness":{"note":"","data":["8014E3E9 000A"],"options":null}},"D3F97D49-6924135B-C:50":{"Infinite Eggs":{"note":"This is for All Yoshis All levels","data":["80285078 0006"],"options":null},"Infinite\\Health":{"note":"This is for All Yoshis All levels","data":["50000804 0000","800F954F 0008"],"options":null},"Infinite\\Lives":{"note":"This is for All Yoshis All levels","data":["800F958F 00FF"],"options":null}},"D43DA81F-021E1E19-C:45":{"Always Have Wallet Size":{"note":"","data":["8011A832 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C8675 0010","8111BAF6 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011B679 00FF","8011BAEF 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C8675 0000","8011BBA3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["800257D4 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011A816 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011A817 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011A818 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011A819 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023E9AF 0020","8023E9B5 0033"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F3688 0005","801F3848 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["8011A832 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011A833 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011A831 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A82C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A834 30FF","8111A836 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011A808 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011A80E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011A814 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011A80C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011A806 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011A810 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011A805 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011A804 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011A807 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011A80A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011A80D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011A811 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011A812 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011A809 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011A80F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011A815 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011A813 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011A80B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011A81F 0009"],"options":null},"Infinite\\Big Keys,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011A838 0007","8011A839 0007","8011A83A 0007","8011A83B 0007","8011A83C 0007","8011A83D 0007","8011A83E 0007","8011A83F 0007","8011A840 0007","8011A841 0007","8011A842 0007","8011A84F 0009","8011A850 0009","8011A851 0009","8011A852 0009","8011A853 0009","8011A859 0009","8011A85C 0009","8011A857 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011A824 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011A81E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011A81D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011A822 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011A81C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111A7C0 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011A7C9 0008","8011A7CA 0001","8011A7CC 0001","8011A7C3 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011A82A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111BB5C 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011BB61 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011BB65 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C8675 0020","811DAC50 40CB","D01C8675 0000","811DB472 000D","8011A800 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011A85F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011A861 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111A7BE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111BB58 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C8675 0020","811DB472 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C8675 0020","811DAC50 40CB"],"options":null},"Press L+R For FMV Select":{"note":"Hold down `L+R' after the Nintendo logo is spinning to see your favourite FMV","data":["D01C8675 0030","8011A793 00A0","D01C8675 0030","8011A79B ????"],"options":{"anondorf FMV":"F600","ire FMV":"F50F","lanet Making FMV":"F400","nding":"F80E","ore Triforce FMV":"F700","riforce FMV":"F200"}},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C8675 0010","8011A797 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111A79C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011A81A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011A81B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011A800 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011A7CE 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111B9B2 0000","8111B9B4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"D43DA81F-021E1E19-C:4A":{"Always Have Wallet Size":{"note":"","data":["8011A832 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C8675 0010","8111BAF6 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011B679 00FF","8011BAEF 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C8675 0000","8011BBA3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest 01).","data":["800257D4 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011A816 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011A817 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011A818 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011A819 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801D8D8A 0006","801F23C8 0001","801EEE48 0001"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.If you Use Black Gauntlets,They are as strong as the Golden Gauntlets. This code also gives you the Silver Scale and the Golden Scale and unlimited rupees.","data":["8011A832 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011A833 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011A831 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A82C 7777"],"options":null},"Have\\All Quest/Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A834 30FF","8111A836 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011A808 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011A80E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011A814 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011A80C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011A806 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011A810 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011A805 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011A804 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011A807 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011A80A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011A80D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011A811 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011A812 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011A809 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011A80F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011A815 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011A813 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011A80B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011A81F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011A838 0007","8011A839 0007","8011A83A 0007","8011A83B 0007","8011A83C 0007","8011A83D 0007","8011A83E 0007","8011A83F 0007","8011A840 0007","8011A841 0007","8011A842 0007","8011A84F 0009","8011A850 0009","8011A851 0009","8011A852 0009","8011A853 0009","8011A859 0009","8011A85C 0009","8011A857 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011A824 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011A81E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011A81D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011A822 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011A81C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111A7C0 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011A7C9 0008","8011A7CA 0001","8011A7CC 0001","8011A7C3 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011A82A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111BB5C 0001"],"options":null},"Infinite\\Timers\\All other Timers":{"note":"This cheat works on all Race Timers.Under Water with iron Boots etc.","data":["8011BB61 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011BB65 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C8675 0020","811DAC50 40CB","D01C8675 0000","811DB472 000D","8011A800 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011A85F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011A861 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111A7BE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111BB58 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C8675 0020","811DB472 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C8675 0020","811DAC50 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C8675 0010","8011A797 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111A79C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011A81A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011A81B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011A800 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011A7CE 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111B9B2 0000","8111B9B4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"D48944D1-B0D93A0E-C:4A":{"Enable All Courses":{"note":"","data":["8112A61E FFFF"],"options":null},"Have All Characters":{"note":"","data":["50000D02 0001","810BC834 0000"],"options":null},"Max Gold Mario Badges Player 1":{"note":"","data":["800BF87B 0063"],"options":null},"No Wind":{"note":"","data":["800B45F1 0000","800B45F3 0000"],"options":null},"Unlimited\\Power Hits\\Player 1":{"note":"","data":["801B0DF8 0004"],"options":null},"Unlimited\\Power Hits\\Player 2":{"note":"","data":["801B0EB0 0004"],"options":null},"Unlimited\\Power Hits\\Player 3":{"note":"","data":["801B0F68 0004"],"options":null},"Unlimited\\Power Hits\\Player 4":{"note":"","data":["801B1020 0004"],"options":null},"Zero Strokes Taken":{"note":"","data":["801B0313 0000"],"options":null}},"D52FE29D-8EA6A759-C:00":{"Infinite 9 Credits":{"note":"","data":["80279C8F 0009"],"options":null}},"D543BCD6-2BA5E256-C:50":{"Access All Rune Stones":{"note":"","data":["50000302 0000","810AE6D6 07FF"],"options":null},"Access All Window Shards":{"note":"","data":["50000302 0000","810AE6C6 07FF"],"options":null},"Access Skill Level 99":{"note":"And Get A Familiar","data":["800FD38A FFFF"],"options":null},"Always Max Turbo Attack":{"note":"","data":["810FD4AE FF64"],"options":null},"Get All Stuff":{"note":"Opens Up New Levels Etc,","data":["50001410 0000","810C5DA6 FFFF"],"options":null},"Infinite Use Of Items":{"note":"On Pick-Ups Only","data":["50001310 0000","800C5EC6 FFFF"],"options":null},"New Player Name":{"note":"","data":["810FD36C 4249","810FD36E 5443","810FD370 4820","810FD372 3639"],"options":null},"Start With Big Familiar":{"note":"Do not use this with Small Familiar Code","data":["810FD512 0202"],"options":null},"Start With Small Familiar":{"note":"Do not use this with Big Familiar Code","data":["810FD512 0102"],"options":null}},"D571C883-822D3FCF-C:50":{"Have All\\Keys":{"note":"This will give you the Grey \u0026 Red,Green \u0026 Gold Keys","data":["800BE268 00FF","800BE26D 00FF","800BE26E 00FF"],"options":null},"Have All\\Music Notes":{"note":"This will give you all 10 Music Notes","data":["50000A01 0000","800BE3A0 0001"],"options":null},"Infinite\\Health":{"note":"","data":["800BE2A7 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["800BE293 0009"],"options":null},"Max Money":{"note":"","data":["810BE296 03E7"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D017E975 0020","810DBD88 44CB"],"options":null}},"D5898CAF-6007B65B-C:50":{"All Multiplayer Characters":{"note":"","data":["8015C8E1 000F","8015C8E2 00FF","8015C8E3 00FF"],"options":null},"C4 Detector":{"note":"Slot 3","data":["80157C98 0001"],"options":null},"C4 Explosives":{"note":"Slot 1","data":["80157C93 0001"],"options":null},"Card Key":{"note":"Slot 3","data":["80157C9A 0001"],"options":null},"Flash Light":{"note":"Slot 2","data":["80157C95 0001"],"options":null},"Infinite\\Ammo and No Reloads":{"note":"","data":["80157C9B 0078","80157C94 0078","80157C90 0063","80179F6F 001E","80157C91 0063","80179F83 0008"],"options":null},"Infinite\\Health":{"note":"","data":["80179F8B 0064"],"options":null},"Key":{"note":"Slot 2","data":["80157C99 0001"],"options":null},"Max Power Mode":{"note":"","data":["8015C8E7 0001"],"options":null},"Sudden death \u0026 trial modes unlocked":{"note":"","data":["8015C8E0 00A0"],"options":null},"Time is always 00:20:38":{"note":"","data":["8010D342 0078"],"options":null},"Walk Through Walls/Objects":{"note":"Press Z Button And Joystick Forward Dont Stand Too Close To Wall/Object","data":["D0139BC4 0020","8117964C 43C7"],"options":null},"Weapon modifier":{"note":"","data":["80179F78 00??"],"options":{"Handgun":"00","Handgun w/ silencer":"14","Rocket launcher":"03","Shotgun":"02","Submachine gun":"01"}}},"D5B2339C-CABCCAED-C:50":{"Have\\Max Bonus":{"note":"","data":["810EC2CA 270F"],"options":null},"Have\\[All Guns \u0026 Infinite Ammo]":{"note":"Press C Left to receive all Guns","data":["81102C0A 0001","50000B04 0000","810EBF66 03E8"],"options":null},"Have\\[All Keys]":{"note":"","data":["810EBF60 0001","800EBF61 0001","810EBF62 0001"],"options":null},"Have\\[High Score]":{"note":"","data":["810EBF4E FFFF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["810EC2D2 03E7"],"options":null},"Infinite\\Health":{"note":"If you fall into Water just turn off the Infinite Health \u0026 put back on when you restrat.","data":["810EBF58 42D8"],"options":null},"Level Select":{"note":"","data":["81103D82 00??"],"options":{"Boss Mission Destroy Carrier Level":"10","Mission 1 Shock Strike":"01","Mission 10 Scramble Pylon":"0A","Mission 11 Herding Research":"0B","Mission 12 The Extractor":"0C","Mission 13 Nuke Tower":"0D","Mission 14 Mucus Storage":"0E","Mission 15 Depot Attack":"0F","Mission 16 Sterilization":"11","Mission 17 Scorpion Killer":"12","Mission 18 Core Nuke":"13","Mission 19 Gate Keeper":"14","Mission 2 Radar Run":"02","Mission 3 Return Fire":"03","Mission 4 The Sonar Tower":"04","Mission 5 Big Blips":"05","Mission 6 Short Fuse":"06","Mission 7 Outpost":"07","Mission 8 Sewer":"08","Mission 9 Clean Up":"09","Queen Mission":"15"}},"Level Select Menu":{"note":"","data":["811022CA 0EF0"],"options":null}},"D614E5BF-A76DBCC1-C:50":{"Access Level Select":{"note":"On the main menu Scroll down to make CHEATS visible to go into Level Select.For in-Game Cheats,Pause gameplay.","data":["810DD47C 8001"],"options":null},"Have\\All TARZAN Letters":{"note":"","data":["800DD485 00FF"],"options":null},"Have\\Coins Collected 100%":{"note":"","data":["800DD4B7 0064"],"options":null},"Have\\Full Portrait":{"note":"","data":["800DD484 00FF"],"options":null},"Have\\Level \u0026 Tokens Completed 100%":{"note":"","data":["800DD48F 0000","800DD490 0001","800DD491 0000"],"options":null},"Infinite\\Bonus Timer":{"note":"This is For All Timers on Bonus Levels","data":["8017373E 0025"],"options":null},"Infinite\\Green Weapon":{"note":"","data":["811921D6 0063"],"options":null},"Infinite\\Health":{"note":"","data":["81192300 0120"],"options":null},"Infinite\\Lives":{"note":"","data":["800DD4B2 00??"],"options":{"3 Lives":"03","99 Lives":"63"}},"Infinite\\Purple Weapon":{"note":"","data":["811921DA 0063"],"options":null},"Infinite\\Red Weapon":{"note":"","data":["811921D8 0063"],"options":null},"Press GS For\\Sabor Attacks\\Sabor 1 Hit Kill":{"note":"","data":["8924A49E 0001"],"options":null}},"D666593B-D7A25C07-C:4A":{"Buster Parts Slot Select\\Slot 01":{"note":"","data":["8020CED3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 02":{"note":"","data":["8020CED4 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 03":{"note":"","data":["8020CED5 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 04":{"note":"","data":["8020CED6 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 05":{"note":"","data":["8020CED7 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 06":{"note":"","data":["8020CED8 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 07":{"note":"","data":["8020CED9 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 08":{"note":"","data":["8020CEDA 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 09":{"note":"","data":["8020CEDB 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 10":{"note":"","data":["8020CEDC 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 11":{"note":"","data":["8020CEDD 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 12":{"note":"","data":["8020CEDE 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 13":{"note":"","data":["8020CEDF 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 14":{"note":"","data":["8020CEE0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 15":{"note":"","data":["8020CEE1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 16":{"note":"","data":["8020CEE2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 17":{"note":"","data":["8020CEE3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 18":{"note":"","data":["8020CEE4 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 19":{"note":"","data":["8020CEE5 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 20":{"note":"","data":["8020CEE6 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 21":{"note":"","data":["8020CEE7 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 22":{"note":"","data":["8020CEE8 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 23":{"note":"","data":["8020CEE9 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 24":{"note":"","data":["8020CEEA 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 25":{"note":"","data":["8020CEEB 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 26":{"note":"","data":["8020CEEC 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 27":{"note":"","data":["8020CEED 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 28":{"note":"","data":["8020CEEE 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 29":{"note":"","data":["8020CEEF 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 30":{"note":"","data":["8020CEF0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 31":{"note":"","data":["8020CEF1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 32":{"note":"","data":["8020CEF2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 33":{"note":"","data":["8020CEF3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 01":{"note":"","data":["8020CED0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 02":{"note":"","data":["8020CED1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 03":{"note":"","data":["8020CED2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Freeze Timer at 00:00":{"note":"","data":["811C44C4 0000","811C44C6 0000"],"options":null},"Have All\\Normal Items":{"note":"","data":["8120D720 FFFF","8120D722 FFFF","8120D724 FFFF","8120D726 FFFF"],"options":null},"Have All\\Special Items":{"note":"","data":["8120D71C FFFF","8120D71E FFFF"],"options":null},"Have All\\Special Weapons":{"note":"These are Equiped With Roll","data":["8120D710 FFFF"],"options":null},"Infinite\\Ammo":{"note":"","data":["8120CF8A 0080","8120CF92 0010","8120CF9A 0708","8120CFA2 0018","8120CFAA 0010","8120CFB2 0708","8120CFBA 0020","8120CFC2 0020","8120CFCA 0020","8120CFD2 0018","8120CFDA 012C","8120CFE2 0258"],"options":null},"Infinite\\Health":{"note":"","data":["8120CAEE 0050"],"options":null},"Infinite\\Max Zenny":{"note":"","data":["811C44D4 0098","811C44D6 967F"],"options":null},"Rapid Fire":{"note":"","data":["8020CF83 0002"],"options":null}},"D692CC5E-EC58D072-C:50":{"Have All\\Cups Select":{"note":"","data":["50002C02 0000","800CCF11 00??"],"options":{"Bronze Cup":"02","Gold Cup":"00","None (Default)":"04","Silver Cup":"01"}},"Have All\\Points":{"note":"","data":["810D8FE0 03E7"],"options":null},"Have All\\RB Medals":{"note":"","data":["810D8FF0 03E7"],"options":null},"Infinite\\Credits":{"note":"","data":["800BDFA5 0005"],"options":null},"Infinite\\Timer":{"note":"","data":["810D9088 44E9"],"options":null},"Infinite\\Turbos":{"note":"To enable this just select On or Off and when you press Z you will use your Turbos accordantly. Warning you can only have Infinite if you have some turbo level to begin with","data":["D00F2D16 0020","800CD091 00??"],"options":{"Off":"00","On":"08"}},"Laps To Race":{"note":"Here you can select how many laps you prefer.to race","data":["800C8909 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","7 Laps":"07","8 Laps":"08","9 Laps":"09","Laps":"06"}},"[Cheat Menu]":{"note":"Press Pause to access cheats.","data":["800CD089 00FF","800CD08A 00FF","800CD08B 00FF"],"options":null},"[Press F9]\\Enable All Courses":{"note":"","data":["890CCEF2 0B00","890CCEF4 0B00","890CCEF6 0B00"],"options":null},"[Press F9]\\Extra Characters":{"note":"","data":["890C642F 01FF"],"options":null},"[Press F9]\\Progress 100%":{"note":"","data":["50000801 0000","880CCF00 0003","50000801 0000","880CCF01 00FF"],"options":null}},"D6FBA4A8-6326AA2C-C:4A":{"Don't Hurt Mario\\Monsters":{"note":"","data":["A031D9E7 0001"],"options":null},"Funny Mario Options\\Limbo Mario":{"note":"Only Use This Code On Its Own,Do not use with any other Funny Mario Options.","data":["8031DC0C 00C0"],"options":null},"Funny Mario Options\\Mario's Cap\\Off \u0026 in His Hand":{"note":"Here you can Choose Options with Mario with His Cap off \u0026 in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["8031D9C7 00??"],"options":{"Cap In Hand":"20","Flying Mario Cap In Hand":"28","Invisible Mario Cap In Hand":"22","Invisible Metal Mario Cap In Hand":"26","Metal Mario Cap In Hand":"24"}},"Funny Mario Options\\Mario's Cap\\On \u0026 An Extra in His Hand":{"note":"Here you can Choose Options with Mario with His Cap on \u0026 An Extra in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["8031D9C7 00??"],"options":{"Cap In Hand":"30","Flying Mario Cap In Hand":"38","Invisible Mario Cap In Hand":"32","Invisible Metal Mario Cap In Hand":"36","Metal Mario Cap In Hand":"34"}},"Funny Mario Options\\Ostrich Mario":{"note":"Only Use This Code On Its Own,Do not use with any other Funny Mario Options.","data":["8031DC0C 0070"],"options":null},"Funny Mario Options\\Runs Backwards":{"note":"Only Use This Code On Its Own,Do not use with any other Funny Mario Options.","data":["8031DC0E 0080"],"options":null},"Have All\\175 Stars":{"note":"I have Managed to put a Have 175 Stars Option in for you,once the Code is activated, you will see it as a new option in Save Slot A.","data":["80203F0B 00FF","50000D02 0000","81203F0C FFFF"],"options":null},"Have All\\Maxed Out Coin Records For All Levels":{"note":"","data":["80203F25 00FF","50000702 0000","81203F26 FFFF"],"options":null},"Have\\Level Select":{"note":"","data":["8030CCBC 0001"],"options":null},"Infinite\\Energy \u0026 Breath":{"note":"","data":["8031DA6E 0008"],"options":null},"Infinite\\Lives":{"note":"","data":["8031DA6D 0064"],"options":null},"Mario's Cap\\Off Options":{"note":"Here you can Choose Options with Mario without His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["8031D9C7 00??"],"options":{"Flying Mario":"08","Invisible Flying Mario":"0A","Invisible Mario":"02","Invisible Metal Flying Mario":"0F","Mario No Cap":"01","Metal Flying Mario":"0D","Metal Mario":"04"}},"Mario's Cap\\On Options":{"note":"Here you can Choose Options with Mario with His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["8031D9C7 00??"],"options":{"Flying Mario":"19","Invisible Mario":"12","Invisible Metal Mario":"16","Metal Mario":"15"}},"Press GS For 255 Coins":{"note":"Press GS Once on a Level To Get that amount of Coins","data":["8931DA68 00FF"],"options":null}},"D715CC70-271CF5D6-C:50":{"Difficulty Select":{"note":"","data":["80336953 00??"],"options":{"Easy":"01","Hard":"03","Medium":"02","Very Easy":"00","Very hard":"04"}},"Easy Fatality Select":{"note":"","data":["8033584F 00??"],"options":{"Always Off":"00","Always On":"01"}},"Enable Cheat Menu":{"note":"","data":["80336973 0001"],"options":null},"Fatalities Select":{"note":"","data":["8033695C 00??"],"options":{"Off":"00","On":"01"}},"Infinite Max Continues":{"note":"","data":["80336963 0005"],"options":null},"Infinite Time":{"note":"","data":["8033F6FB 0064"],"options":null},"Level Select":{"note":"","data":["80335C27 00??"],"options":{"Ahau Kin":"04","Anubis":"02","Kabuki":"06","Off":"00","Pagan":"01","Voodoo":"05","Warhead":"03"}},"Music Select":{"note":"","data":["80336954 00??"],"options":{"Off":"00","On":"01"}},"Play As":{"note":"","data":["800EAF87 00??"],"options":{"Ahau Kin":"06","Anubis":"07","CY-5":"08","Exor":"0B","Grox":"0A","Kabuki Jo":"04","Maximus":"09","Pagan":"03","Tak":"01","Vallah":"05","Voodoo":"02","Warhead":"00"}},"Press D-Pad\\Left to Play As Grox":{"note":"Press D-Pad Left at the character Select screen to Replace Maximus with Grox. Do not use with the Play As Cheat","data":["D033C263 0004","800EAF87 000A"],"options":null},"Press D-Pad\\Right to Play As Exor":{"note":"Press D-Pad Right at the character Select screen to Replace Maximus with Exor. Do not use with the Play As Cheat","data":["D033C263 0008","800EAF87 000B"],"options":null},"Skill Select\\Player 1":{"note":"Max Skill makes the player more Skillful while easier to hurt where as Weak Skill is Non Skillful yet harder to harm.","data":["80335C1D 00??"],"options":{"Max Skill":"80","Weak Skill":"00"}},"Skill Select\\Player 2":{"note":"Max Skill makes the player more Skillful while easier to hurt where as Weak Skill is Non Skillful yet harder to harm.","data":["80335C20 00??"],"options":{"Max Skill":"80","Weak Skill":"00"}}},"D741CD80-ACA9B912-C:45":{"Car Select":{"note":"","data":["D00F50C0 0000","800F50C0 00??"],"options":{"Chevrolet Camaro":"03","Chrysler Jeep Jeepster (Prototype)":"08","Default":"00","Dodge Viper":"04","Donkey In Glass Box":"0E","Ferrari F40":"07","Hotdog":"0A","Hummer H1":"05","Jeep Wrangler":"02","McLaren F1":"09","Mitsubishi Eclipse":"01","Nintendo 64 Logo":"0C","Nintendo Power Car":"0B","Porsche 911 Turbo":"06","Taco":"0D"}},"Infinite\\Max Acceleration\\Player 1":{"note":"","data":["800F50CD 0005"],"options":null},"Infinite\\Max Acceleration\\Player 2":{"note":"","data":["800F52B9 0005"],"options":null},"Infinite\\Max Acceleration\\Player 3":{"note":"","data":["800F54A5 0005"],"options":null},"Infinite\\Max Acceleration\\Player 4":{"note":"","data":["800F5691 0005"],"options":null},"Infinite\\Max Handling\\Player 1":{"note":"","data":["800F50CC 0005"],"options":null},"Infinite\\Max Handling\\Player 2":{"note":"","data":["800F52B8 0005"],"options":null},"Infinite\\Max Handling\\Player 3":{"note":"","data":["800F54A4 0005"],"options":null},"Infinite\\Max Handling\\Player 4":{"note":"","data":["800F5690 0005"],"options":null},"Infinite\\Max Money\\Player 1":{"note":"","data":["800F50C5 000F"],"options":null},"Infinite\\Max Money\\Player 2":{"note":"","data":["800F52B1 000F"],"options":null},"Infinite\\Max Money\\Player 3":{"note":"","data":["800F549D 000F"],"options":null},"Infinite\\Max Money\\Player 4":{"note":"","data":["800F5689 000F"],"options":null},"Infinite\\Max Top Speed\\Player 1":{"note":"","data":["800F50CE 0005"],"options":null},"Infinite\\Max Top Speed\\Player 2":{"note":"","data":["800F52BA 0005"],"options":null},"Infinite\\Max Top Speed\\Player 3":{"note":"","data":["800F54A6 0005"],"options":null},"Infinite\\Max Top Speed\\Player 4":{"note":"","data":["800F5692 0005"],"options":null},"Infinite\\Nitro\\Player 1":{"note":"","data":["800F50CF 0009"],"options":null},"Infinite\\Nitro\\Player 2":{"note":"","data":["800F52BB 0009"],"options":null},"Laps 2 Race":{"note":"","data":["801186A0 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"[Press F9]\\All Cars (All Modes)":{"note":"","data":["880E990B 000E","881022F1 000E"],"options":null},"[Press F9]\\Jump To Season 6":{"note":"","data":["881022E8 0005"],"options":null}},"D7C762B6-F83D9642-C:4A":{"Have\\Max Bonus":{"note":"","data":["810EB4BA 270F"],"options":null},"Have\\[All Guns \u0026 Infinite Ammo]":{"note":"Press C Left to receive all Guns","data":["81101DFA 0001","50000B04 0000","810EB156 03E7"],"options":null},"Have\\[All Keys]":{"note":"","data":["810EB150 0101","800EB152 0001"],"options":null},"Have\\[High Score]":{"note":"","data":["810EB13E FFFF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["810EB4C0 0005"],"options":null},"Infinite\\Health":{"note":"If you fall into Water just turn off the Infinite Health \u0026 put back on after.","data":["810EB148 42D8"],"options":null},"Level Select":{"note":"","data":["8110FE32 00??"],"options":{"Boss Mission Destroy Carrier Level":"10","Mission 1 Shock Strike":"01","Mission 10 Scramble Pylon":"0A","Mission 11 Herding Research":"0B","Mission 12 The Extractor":"0C","Mission 13 Nuke Tower":"0D","Mission 14 Mucus Storage":"0E","Mission 15 Depot Attack":"0F","Mission 16 Sterilization":"11","Mission 17 Scorpion Killer":"12","Mission 18 Core Nuke":"13","Mission 19 Gate Keeper":"14","Mission 2 Radar Run":"02","Mission 3 Return Fire":"03","Mission 4 The Sonar Tower":"04","Mission 5 Big Blips":"05","Mission 6 Short Fuse":"06","Mission 7 Outpost":"07","Mission 8 Sewer":"08","Mission 9 Clean Up":"09","Queen Mission":"15"}},"Level Select Menu":{"note":"","data":["8110D1EA BF60"],"options":null}},"D81963C7-4271A3AA-C:45":{"Access All Levels":{"note":"","data":["801FC5E6 00FF","801FC5E8 00FF"],"options":null},"Extended Tongue":{"note":"","data":["81323382 FFFF"],"options":null},"Have 99 Crowns":{"note":"","data":["8024337B 0063"],"options":null},"Have All Levels Completed":{"note":"","data":["801FC5EA 0019","801FC5EB 0019","801FC5EC 0015","801FC5ED 0018","801FC5EE 0017","801FC5EF 0017"],"options":null},"Infinite Health":{"note":"","data":["80164923 000A"],"options":null},"Level Select":{"note":"","data":["80297A7B 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06"}}},"D83045C8-F29D3A36-C:50":{"Always 1st":{"note":"","data":["8013F040 0001"],"options":null},"Freeze All Timers":{"note":"","data":["8013F001 0000","8013F005 0000","8013F00A 0000"],"options":null},"Freeze Overall Timer":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8013EFF5 0001"],"options":null},"Language Select":{"note":"","data":["8008CF93 00??"],"options":{"English":"00","French":"01","German":"02"}},"Laps Of Race":{"note":"","data":["8013EFEF 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","Never Ending Laps":"06"}},"Level Select":{"note":"For this cheat to work,as soon as you put the cheat on you must turn it back off,if not you wont beable to quit a Race or even finish one.","data":["8013F2FB 00??"],"options":{"Bikini Island":"01","Canyon Rush":"00","China Town":"02","China Town Jam":"04","Neo Arena":"03","Neo Speed Way":"05"}},"Music Modifier":{"note":"","data":["800F715F 00??"],"options":{"Music Off":"00","Music On":"FF"}},"No Damage\\Player 1":{"note":"","data":["50000402 0000","8113F338 0000"],"options":null},"No Damage\\Player 2":{"note":"","data":["50000402 0000","811413D8 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["8013F2F5 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Play As\\Player 2":{"note":"","data":["8013F2F6 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Unlock Hidden Tracks \u0026 Cars":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8009127C 0001"],"options":null}},"D84EEA84-45B2F1B4-C:50":{"All Items":{"note":"","data":["50002402 0202","810ED130 0001","50004601 0000","800ED1B1 0003"],"options":null},"Item Modifier Codes\\Position 01":{"note":"","data":["800ED130 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 02":{"note":"","data":["800ED131 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 03":{"note":"","data":["800ED132 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 04":{"note":"","data":["800ED133 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 05":{"note":"","data":["800ED134 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 06":{"note":"","data":["800ED135 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 07":{"note":"","data":["800ED136 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 08":{"note":"","data":["800ED137 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 09":{"note":"","data":["800ED138 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 10":{"note":"","data":["800ED139 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 11":{"note":"","data":["800ED13A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 12":{"note":"","data":["800ED13B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 13":{"note":"","data":["800ED13C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 14":{"note":"","data":["800ED13D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 15":{"note":"","data":["800ED13E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 16":{"note":"","data":["800ED13F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 17":{"note":"","data":["800ED140 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 18":{"note":"","data":["800ED141 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 19":{"note":"","data":["800ED142 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 20":{"note":"","data":["800ED143 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 21":{"note":"","data":["800ED144 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 22":{"note":"","data":["800ED145 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 23":{"note":"","data":["800ED146 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 24":{"note":"","data":["800ED147 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 25":{"note":"","data":["800ED148 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 26":{"note":"","data":["800ED149 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 27":{"note":"","data":["800ED14A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 28":{"note":"","data":["800ED14B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 29":{"note":"","data":["800ED14C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 30":{"note":"","data":["800ED14D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 31":{"note":"","data":["800ED14E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 32":{"note":"","data":["800ED14F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 33":{"note":"","data":["800ED150 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 34":{"note":"","data":["800ED151 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 35":{"note":"","data":["800ED152 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 36":{"note":"","data":["800ED153 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 37":{"note":"","data":["800ED154 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 38":{"note":"","data":["800ED155 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 39":{"note":"","data":["800ED156 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 40":{"note":"","data":["800ED157 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 41":{"note":"","data":["800ED158 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 42":{"note":"","data":["800ED159 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 43":{"note":"","data":["800ED15A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 44":{"note":"","data":["800ED15B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 45":{"note":"","data":["800ED15C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 46":{"note":"","data":["800ED15D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 47":{"note":"","data":["800ED15E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 48":{"note":"","data":["800ED15F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}}},"D85C4E29-88E276AF-C:50":{"Extra Gems":{"note":"","data":["D0165241 0000","80165241 004B"],"options":null},"Full\\Bomb Power":{"note":"","data":["8016523F 0003"],"options":null},"Full\\Fire Power":{"note":"","data":["80165240 0008"],"options":null},"Infinite\\Health":{"note":"","data":["80165244 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["80165243 0009"],"options":null},"Max\\Bombs":{"note":"","data":["8016523F 0008"],"options":null},"Max\\Explosion":{"note":"","data":["80165240 0008"],"options":null},"Max\\Score":{"note":"","data":["80177608 FFFF"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D005A465 0020","81154178 41CB","D005A465 0020","D0154154 0000","80154154 0040"],"options":null}},"D889EB0F-277614F0-C:45":{"Unlock All ? Blocks":{"note":"","data":["50001C04 0000","8014FECB 0001"],"options":null},"Unlock All Power Blocks":{"note":"","data":["50000604 0000","8014FE0B 0001","50000704 0000","8014FE43 0001","50000804 0000","8014FE6F 0001","50000404 0000","8014FE93 0001","50000704 0000","8014FEAF 0001","8014FE2B 0001","8014FE2F 0001","8014FE63 0001"],"options":null},"Unlock All Warps":{"note":"","data":["8014FF3B 000F"],"options":null}},"D889EB0F-277614F0-C:4A":{"Unlock All ? Blocks":{"note":"","data":["50001C04 0000","8014FECB 0001"],"options":null},"Unlock All Power Blocks":{"note":"","data":["50000604 0000","8014FE0B 0001","50000704 0000","8014FE43 0001","50000804 0000","8014FE6F 0001","50000404 0000","8014FE93 0001","50000704 0000","8014FEAF 0001","8014FE2B 0001","8014FE2F 0001","8014FE63 0001"],"options":null},"Unlock All Warps":{"note":"","data":["8014FF3B 000F"],"options":null}},"D89E0E55-B17AA99A-C:50":{"Infinite Flight Time":{"note":"","data":["801A3F1F 0064"],"options":null},"Infinite Lives":{"note":"","data":["801A3E83 0063"],"options":null},"Infinite Mega Fuel":{"note":"","data":["801A3EEB 0064"],"options":null},"Infinite Shots":{"note":"","data":["801A3EB7 0064"],"options":null}},"D9EDD54D-6BB8E274-C:50":{"The Away Team Has Max Score":{"note":"","data":["81080082 FFFF"],"options":null},"The Home Team Has Max Score":{"note":"","data":["8107972A FFFF"],"options":null}},"D9F75C12-A8859B59-C:45":{"Infinite Time":{"note":"","data":["8114C298 000A"],"options":null},"Pick Your Kombat Zone":{"note":"","data":["81257544 00??"],"options":{"Armory":"14","Bell Tower":"07","Bridge":"05","Courtyard":"02","Dead Pool":"11","Graveyard":"09","Hidden Portal":"10","Jade's Desert":"0E","Kahn's Kave":"0D","Kahn's Tower":"04","Kombat Temple":"08","Lair":"18","Living Forest":"15","Lost Bridge":"0F","Pit":"03","Pit 2":"1A","Pit 3":"0A","Pit Bottom":"1C","Portal":"17","River Kombat":"0B","Rooftop":"13","Scorpion's Lair":"0C","Soul Chamber":"06","Star Bridge":"1B","Street":"01","Subway":"00","Tomb":"19","Tower":"16","Wasteland":"12"}},"Player 1\\Aggressor Energy Bar":{"note":"","data":["801698E1 0030"],"options":null},"Player 1\\Energy is":{"note":"","data":["8016984D 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 1\\Infinite Run":{"note":"","data":["81169854 0030"],"options":null},"Player 1\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B5225 0020","81169874 5100","D02B5225 0020","8116987C 5100"],"options":null},"Player 1\\Play As":{"note":"","data":["8016983D 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Player 2\\Aggressor Energy Bar":{"note":"","data":["801698E3 0030"],"options":null},"Player 2\\Energy is":{"note":"","data":["80169B21 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 2\\Infinite Run":{"note":"","data":["81169B28 0030"],"options":null},"Player 2\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B522D 0020","81169876 5100","D02B522D 0020","8116987E 5100"],"options":null},"Player 2\\Play As":{"note":"","data":["80169AE1 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Unlock Secret":{"note":"","data":["80169EE1 0004"],"options":null}},"DBF4EA9D-333E82C0-C:45":{"1 Lap Race":{"note":"","data":["D0122288 0000","80122288 0009"],"options":null},"999 Trick Game Pts":{"note":"","data":["81122040 03E7"],"options":null},"Access Gold Medals":{"note":"","data":["50000602 0000","810ECA22 0101"],"options":null},"Enable Sinobin":{"note":"","data":["8110AE5E 0100"],"options":null},"Infinite\\Cash":{"note":"","data":["801222EA C350"],"options":null},"Infinite\\Lucky Dip":{"note":"\"Lucky Dip is Infinite Usage Of What Ever You Get From Each Red Box\"","data":["80122294 0003"],"options":null},"Infinite\\Tools Options":{"note":"","data":["80122295 00??"],"options":{"Board":"06","Fan":"01","Ghost":"02","Mouse":"05","Pan":"03","Rock":"04"}}},"DC36626A-3F3770CB-C:50":{"Cheat Menu\\All Weapons Enabled":{"note":"","data":["801CCC59 0001","801CCCC5 0001","801CDD25 0001","801CDE21 0001","801CDEB5 0001","801CDEB7 0001","801CDEE9 0001","801CE819 0001","801CE821 0001","801CE88D 0001","801CF9D5 0001"],"options":null},"Cheat Menu\\Cheat Menu Enabled":{"note":"","data":["800CF7D8 0001"],"options":null},"Cheat Menu\\Have All Game Type \u0026 Other":{"note":"","data":["810E1A3E 0FFF"],"options":null},"Cheat Menu\\Have All Weapons":{"note":"","data":["811CE810 FFFF"],"options":null},"Enable Debug Menu":{"note":"","data":["800DFCD0 0001"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810A21B4 A65B"],"options":null},"Invincibility":{"note":"","data":["800DF203 0001"],"options":null},"Time Always 00:00":{"note":"","data":["801A1D06 0000"],"options":null}},"DCB6EAFA-C6BBCFA3-C:4A":{"Always Berserk Mode":{"note":"","data":["801ACA6F 00FF"],"options":null},"Always Drop\\Player 1":{"note":"","data":["801ACA7B 00??"],"options":{"Bar":"00","Big Water":"06","Bomb":"0A","Corner":"02","Down Bar":"05","Down Square":"04","Fireball":"0B","Medium Water":"07","Small Water":"08","Smallest Water":"09","Square":"03","T":"01"}},"Always Drop\\Player 2":{"note":"","data":["801DD1FB 00??"],"options":{"Bar":"00","Big Water":"06","Bomb":"0A","Corner":"02","Down Bar":"05","Down Square":"04","Fireball":"0B","Medium Water":"07","Small Water":"08","Smallest Water":"09","Square":"03","T":"01"}},"Always Empty Drain":{"note":"","data":["801ACA51 0000","811ACA52 0000","811ACA54 0000"],"options":null},"Infinite Ducks":{"note":"","data":["801ACA0B 0009"],"options":null},"Infinite Lakes":{"note":"","data":["811AC9FE 0009"],"options":null},"Mega Score":{"note":"","data":["801ACA18 00FF","801DBDC4 00FF"],"options":null},"Practice Lessons Open":{"note":"","data":["810C3AEA 0008"],"options":null},"Stop Level Timer":{"note":"","data":["801ACA72 00FF"],"options":null}},"DCBC50D1-09FD1AA3-C:45":{"Debug Mode":{"note":"Press A or Start to enable the currently selected option. Pressing Start when in control of the player will also open the watch menu and close the debug menu.","data":["80036FCB 0001"],"options":null},"Everything Unlocked\\Save File 1":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","810699EE FFFF"],"options":null},"Everything Unlocked\\Save File 2":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8106992E FFFF"],"options":null},"Everything Unlocked\\Save File 3":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","81069A4E FFFF"],"options":null},"Everything Unlocked\\Save File 4":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8106998E FFFF"],"options":null},"Have All\\64 Characters In Multi Player":{"note":"Enables all Characters selectable to play as in Multi-Player","data":["8002B197 0040"],"options":null},"Have All\\Objectives Complete":{"note":"","data":["80036FD3 0001"],"options":null},"Have\\Infinite 00:00 Time (All Levels)":{"note":"","data":["8004837E 0000","8004838E 0000","80048396 0000","80079A22 0000","80079F26 0000"],"options":null},"Infinite\\Ammo (All Levels)":{"note":"","data":["80079E3B 0001"],"options":null},"Infinite\\Health (All levels)":{"note":"","data":["8100C0F4 0801","8100C0F6 8090","8100C0F8 AFA4","8100C0FA 0000","81060240 0004","81060242 7600","81060244 3C02","81060246 8008","81060248 8C42","8106024A 9EE0","8106024C 3401","8106024E 3F80","81060250 A441","81060252 00DC","81060254 0800","81060256 303F"],"options":null},"Mod Section\\Custom Weapon Grouping":{"note":"golden gun fun should replace slappers only! appears in the multi weapons. No weapons or ammunition crates appear inside the level. All players must rely on is their unarmed \"slapping\" skills.","data":["80048673 0013","81048678 3FC0","80048677 00D0","8004867F 000D","80048683 000A","8004868B 0013","81048690 3FC0","8004868F 00D0","80048697 000D","8004869B 000A","800486A3 0019","810486A8 3FC0","800486A7 00D3","800486AF 0006","800486B3 0003","800486BB 0019","810486C0 3FC0","800486BF 00D3","800486C7 0006","800486CB 0003","800486D3 0013","810486D8 3FC0","800486D7 00D0","800486DF 000D","800486E3 000A","800486EB 0013","810486F0 3FC0","800486EF 00D0","800486F7 000D","800486FB 000A","80048703 0019","81048708 3FC0","80048707 00D3","8004870F 0006","80048713 0003","8004871B 0019","81048720 3FC0","8004871F 00D3","80048727 0006","8004872B 0003","812AEA50 476F","812AEA52 6C64","812AEA54 656E","812AEA56 2047","812AEA58 756E","812AEA5A 2046","812AEA5C 756E","802AEA5E 0000"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 1\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811E6554 45E4","811E6558 43D5","811E655C C5A7","811E657C 801C","811E657E 6774","811E5164 45E4","811E5168 C383","811E516C 4492","811E518C 801C","811E518E D574","811E78C0 45AD","811E78C4 C383","811E78C8 4440","811E78E8 801C","811E78EA E464","811E4D18 45D0","811E4D1C 4307","811E4D20 C4FB","811E4D40 801C","811E4D42 75EC","811E6738 45CD","811E673C C383","811E6740 43F4","811E6760 801C","811E6762 A0DC","811E5450 45C2","811E5454 4356","811E5458 C598","811E5478 801C","811E547A 6A74","811E5240 4608","811E5244 4307","811E5248 43DC","811E5268 801C","811E526A 962C","811E691C 4606","811E6920 4321","811E6924 449D","811E6944 801C","811E6946 CBEC","801ED447 008A","801ED4DB 008B","801ED56F 008C","801ED603 008D","801ED697 008E","801ED72B 008F","801ED7BF 007D","801ED853 007E","801ED443 002A","801ED4D7 002A","801ED56B 002A","801ED5FF 002A","801ED693 002A","801ED727 002A","801ED7BB 002A","801ED84F 002A","801ED449 0000","801ED4DD 0000","801ED571 0000","801ED605 0000","801ED699 0000","801ED72D 0000","801ED7C1 0000","801ED855 0000","801ED44D 0000","801ED4E1 0000","801ED575 0000","801ED609 0000","801ED69D 0000","801ED731 0000","801ED7C5 0000","801ED859 0000","801EB743 002A","801EB745 0068","811EB746 277F","811EB748 1000","811EB74A 0262","811EB7C2 0190","801EB7C5 0000","811EB7C6 0258"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 2\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811EB7C8 0000","811EB7CC FFFF","811EB7CE FFFF","811EB7D2 0000","801EB7D5 0000","801EB7DB 0000","811EB7E2 0000","801EB7E7 0000","801EB843 002A","801EB845 0068","811EB846 2780","811EB848 1000","811EB84A 0262","811EB8C2 0190","801EB8C5 0000","811EB8C6 0258","811EB8C8 0000","811EB8CC FFFF","811EB8CE FFFF","811EB8D2 0000","801EB8D5 0000","801EB8DB 0000","811EB8E2 0000","801EB8E7 0000","801EB943 002A","801EB945 0068","811EB946 2791","811EB948 1000","811EB94A 0262","811EB9C2 0190","801EB9C5 0000","811EB9C6 0258","811EB9C8 0000","811EB9CC FFFF","811EB9CE FFFF","811EB9D2 0000","801EB9D5 0000","801EB9DB 0000","811EB9E2 0000","801EB9E7 0000","801EBA43 002A","801EBA45 0068","811EBA46 2792","811EBA48 1000","811EBA4A 0262","811EBAC2 0190","801EBAC5 0000","811EBAC6 0258","811EBAC8 0000","811EBACC FFFF","811EBACE FFFF","811EBAD2 0000","801EBAD5 0000","801EBADB 0000","811EBAE2 0000","801EBAE7 0000","801EBB45 00A0","801EBC45 00A0","801EBD45 00A0","801EBE45 00A0","801EBB47 0075","801EBC47 0076","801EBD47 0077","801EBE47 0078","801EBBE7 0001","801EBCE7 0001","801EBDE7 0001","801EBEE7 0001","801EC247 0071","801ECD47 0072","801ECE47 0074","801ECF47 006C","801ED047 0079","801ED147 0083","D01EBFC5 005A","801EBFC5 0000","D11EBFC6 0000","811EBFC6 F333","D11EBFC8 03E8","811EBFC8 0000"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 3\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["D11EBFCA 0000","811EBFCA F0C4","D11EBFCE 4CCC","811EBFCE 000A","D11EBFD2 4CCC","811EBFD2 000A","D11EBFD4 0003","811EBFD4 0000","D11EBFD6 0000","811EBFD6 02C4","801EBFD9 0004","801EBFDB 0000","811EBFE2 0384","801EBFE7 0004","801EBF45 009E","801EBF47 0084","801EBF48 0010","801EC2D9 0000","801EC447 0085","801EC547 0086","811EA6B6 2743","811EA73E 0114","811EA7F2 0115","811EA8A6 00A3","811EA92E 009D","811EA9E2 00A4","811EAA96 00DA","811EAB1E 00DB","811EABD2 00DF","811EAC86 0130","811EAD0E 008D","811EADC2 012E","811EAE76 0111","811EAEFE 2740","811EAFB2 2741","811EB066 00A0","811EB0EE 009E","811EB1A2 009F","811EB256 274F","811EB2DE 2750","811EB392 0117","811EB446 0131","811EB4CE 008E","811EB582 0132","811EB636 00A1","811EB6BE 0119","811EA62E 00FA","801ED3DF 0000","801ED2DF 0001","D0024337 0007","80024337 001F"],"options":null},"Mod Section\\Gain Access To\\Aztec Level Without Beating Secret Agent Or 00 Agent":{"note":"","data":["8002A8FB 001A"],"options":null},"Mod Section\\Gain Access To\\Egyptian Level Without Beating Secret Agent Or 00 Agent":{"note":"","data":["8002A8FB 001C"],"options":null},"Mod Section\\Have Cradle in multiplayer":{"note":"Puts the cradle graphic in the levels screen where the facility normally is in the multiplayer levels screen.Warning it doesn't allow you to enter the multiplayer levels screen,it should automatically Have\\selected cradle, which cannot be changed from the multiplayer menus","data":["8002B11D 0092","8002B11F 0093","8002B127 0029","8002B123 0008","802ADC8D 0052","802ADC8E 0041","802ADC8F 0044","802ADC90 004C","802ADC91 0045"],"options":null},"Mod Section\\Replace Cradle with Citadell hidden level":{"note":"","data":["8002A8F7 0029","8104468A 8970","81044690 3F44","81044692 BDEA","81044694 3F80","81044696 0000","81044698 4219","8104469A D89D","80069F80 00C4"],"options":null},"Mod Section\\Secret Island on Dam Level":{"note":"For the above code to work,Get to the 2nd guard tower \u0026 go down the ladder on the left hand side \u0026 to the end of the Dock, Press L \u0026 GS and you will be transfered in the water. Just keep walking straight \u0026 you will get to it. Obviously you can't actually climb ladders or anything, you will simply walkthrough anything on that Part, if you want to walk back to the Dock, when you come near it click the cheat back on \u0026 keep pressing L \u0026 GS untill you are back on it.","data":["D0064F31 0020","800D33ED 0050","880D33ED 0000"],"options":null},"Mod Section\\Walk through doors, objects":{"note":"","data":["800364CB 00??"],"options":{"Off":"01","On":"00"}},"Mod Section\\Weak Enemies":{"note":"","data":["8002CE48 0048"],"options":null}},"DCCF2134-9DD63578-C:50":{"Infinite Character Creation Points":{"note":"","data":["8017BB17 000A"],"options":null},"Left vs Right Side":{"note":"","data":["8017BB16 0005"],"options":null},"Max Score In Mini Games":{"note":"","data":["81116230 05F5","81116232 E0FF"],"options":null},"Maximum\\Back,Front,Left \u0026 Right Move":{"note":"","data":["8117BB14 000A"],"options":null},"Maximum\\Serve Smash":{"note":"","data":["8117BB0E 0A0A"],"options":null},"Maximum\\Stroke Spin":{"note":"","data":["8117BB12 0A0A"],"options":null},"Maximum\\Volley Lob":{"note":"","data":["8117BB10 0A0A"],"options":null},"Practice\\Balls Always Zero":{"note":"","data":["8011684F 0000"],"options":null},"Practice\\Time Always Zero":{"note":"","data":["8111684A 0000"],"options":null},"Scoreboard\\Max games bottom":{"note":"","data":["8011698F 0009"],"options":null},"Scoreboard\\Max games top":{"note":"","data":["8011698B 0009"],"options":null},"Scoreboard\\Max sets bottom":{"note":"","data":["80116987 0009"],"options":null},"Scoreboard\\Max sets top":{"note":"","data":["80116983 0009"],"options":null}},"DD26FDA1-CB4A6BE3-C:55":{"Bonus Stage Character Modifier (Training Mode)":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["8018F913 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Give Kirby A Wierd Blow-Up":{"note":"","data":["8025E898 000A"],"options":null},"Have All Characters":{"note":"","data":["810A5078 0FF0"],"options":null},"Jump off to win":{"note":"","data":["810A5282 0000"],"options":null},"P1 Press Down On D-Pad To Make Items Appear In Random Spots":{"note":"","data":["D109F6E4 0400","8118D7E2 0001"],"options":null},"Story Mode\\Always Get Pacifist (60,000 Points)":{"note":"","data":["810A52AE 0000"],"options":null},"Story Mode\\Infinite Time":{"note":"","data":["810A526E 43CB"],"options":null},"Story Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code could also result freezing at the end of the Level.","data":["800A527B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 1\\Infinite Lives":{"note":"","data":["800A5283 0004"],"options":null},"Story Mode\\Player 1\\Kirby B Button Move\\Congo Jungle":{"note":"","data":["8027120F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Fighting Polygon Team":{"note":"","data":["80262E5F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["8026924F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Kirby's Dreamland":{"note":"","data":["8026E27F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Master Hand Stage":{"note":"","data":["8027238F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Metal Mario Stage":{"note":"","data":["80263CD7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Peach's Castle":{"note":"","data":["802644DF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Planet Zebes":{"note":"","data":["802706E7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Saffron City":{"note":"","data":["802741D7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["80271837 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["8026958F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Low % Health":{"note":"","data":["810A52C6 0000"],"options":null},"Story Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A52EF 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 2\\Infinite Lives":{"note":"","data":["800A52F7 0004"],"options":null},"Story Mode\\Player 2\\Low % Health":{"note":"","data":["810A533A 0000"],"options":null},"Story Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A5363 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 3\\Infinite Lives":{"note":"","data":["800A536B 0004"],"options":null},"Story Mode\\Player 3\\Low % Health":{"note":"","data":["810A53AE 0000"],"options":null},"Story Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A53D7 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 4\\Infinite Lives":{"note":"","data":["800A53DF 0004"],"options":null},"Story Mode\\Player 4\\Low % Health":{"note":"","data":["810A5422 0000"],"options":null},"Story Mode\\Skip Straight To Master Hand":{"note":"","data":["800A5227 000D"],"options":null},"VS. Mode\\Have Mushroom Kindom":{"note":"","data":["800A5077 00FF"],"options":null},"VS. Mode\\Infinite Time":{"note":"","data":["810A545E 43CB"],"options":null},"VS. Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A546B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["8026412F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["8026C6C7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["8026E9F7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Low % Health":{"note":"","data":["810A54B6 0000"],"options":null},"VS. Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A54DF 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 2\\Low % Health":{"note":"","data":["810A552A 0000"],"options":null},"VS. Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A5553 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 3\\Low % Health":{"note":"","data":["810A559E 0000"],"options":null},"VS. Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A55C7 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 4\\Low % Health":{"note":"","data":["810A5612 0000"],"options":null}},"DD318CE2-B73798BA-C:45":{"Always On First Shot":{"note":"","data":["811DA47A 0001"],"options":null},"Club Type\\Irons Mods":{"note":"","data":["8012A473 00??"],"options":{"Cavity":"00","Conventional":"01"}},"Club Type\\Sand Wedge Mods":{"note":"","data":["8012A474 00??"],"options":{"58 Degrees":"00","60 Degrees":"01","62 Degrees":"02"}},"Club Type\\Woods Mods":{"note":"","data":["8012A472 00??"],"options":{"Metal Wood":"01","Persimmon":"02","Titan":"00"}},"Max Power":{"note":"","data":["8012A431 FFFF"],"options":null},"Max Putt":{"note":"","data":["8012A435 FFFF"],"options":null},"Max Recover":{"note":"","data":["8012A437 FFFF"],"options":null},"Max Technique":{"note":"","data":["8012A433 FFFF"],"options":null},"Select Club":{"note":"","data":["801DA496 00??"],"options":{"1I":"05","1W":"00","2I":"06","2W":"01","3I":"07","3W":"02","4I":"08","4W":"03","5I":"09","5W":"04","6I":"0A","7I":"0B","8I":"0C","9I":"0D","AW":"0F","PW":"0E","Putter":"11","SW":"10"}}},"DDD93C85-DAE381E8-C:45":{"Infinite\\Lives":{"note":"","data":["800A3648 0009"],"options":null},"Infinite\\Specials":{"note":"","data":["800A3649 0003"],"options":null},"Max\\Combo":{"note":"","data":["810A3644 7FFF"],"options":null},"Max\\Lower Level":{"note":"","data":["800A3658 0003"],"options":null},"Max\\Score":{"note":"","data":["800A3628 0063","800A3629 0063"],"options":null},"Max\\Upper Level":{"note":"","data":["800A3659 0063"],"options":null},"Play As":{"note":"","data":["800A364C 00??"],"options":{"Character 1":"00","Character 2":"01","Character 3":"02"}},"Status Modifier":{"note":"","data":["800A364A 00??"],"options":{"High":"01","Low":"03","Mid":"02"}}},"DDF460CC-3CA634C0-C:45":{"All levels Complete":{"note":"","data":["50004002 0000","810A2218 0001"],"options":null},"Carrington Institute\\Have 255 targets destroyed":{"note":"","data":["810B1E34 00FF"],"options":null},"Carrington Institute\\Have 999 points in Firing Range":{"note":"","data":["810B1E32 03E7"],"options":null},"Carrington Institute\\Have Infinite time in Firing Range":{"note":"","data":["810B1E2E 004D"],"options":null},"Have All\\Weapons\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80207F10 0007","801EEF10 0007","801D5F10 0007"],"options":null},"Have All\\Weapons\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80209B80 0007","801F0B80 0007","801D7B80 0007"],"options":null},"Infinite Ammo\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8020769F 00FF","801EE69F 00FF","801D569F 00FF","80206EFB 00FF","801EDEFB 00FF","801D4EFB 00FF"],"options":null},"Infinite Ammo\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8020930F 00FF","801F030F 00FF","801D730F 00FF","80208B6B 00FF","801EFB6B 00FF","801D6B6B 00FF"],"options":null},"Infinite Health\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8120677C 3F80","811ED77C 3F80","811D477C 3F80"],"options":null},"Infinite Health\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["812083EC 3F80","811EF3EC 3F80","811D63EC 3F80"],"options":null},"Infinite Shield\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81206790 3F80","811E4950 3F80","811CB950 3F80"],"options":null},"Infinite Shield\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["811FF5C0 3F80","811E65C0 3F80","811CD5C0 3F80"],"options":null},"Multi\\Press B To Levitate\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7E4 0040","811BB720 40F2","D009C7E4 0040","801BB6D3 0000"],"options":null},"Multi\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7EC 0040","811BD390 40F2","D009C7EC 0040","801BD343 0000"],"options":null},"Multi\\Press B To Levitate\\Player 3":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7F4 0040","811BF000 40F2","D009C7F4 0040","801BEFB3 0000"],"options":null},"Multi\\Press B To Levitate\\Player 4":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7FC 0040","811C0C70 40F2","D009C7FC 0040","801C0C23 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7E4 0040","81206720 40F2","D009C7E4 0040","802066D3 0000","D009C7E4 0040","811ED720 40F2","D009C7E4 0040","801ED6D3 0000","D009C7E4 0040","811D4720 40F2","D009C7E4 0040","801D46D3 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7EC 0040","81208390 40F2","D009C7EC 0040","80208343 0000","D009C7EC 0040","811EF390 40F2","D009C7EC 0040","801EF343 0000","D009C7EC 0040","811D6390 40F2","D009C7EC 0040","801D6343 0000"],"options":null},"The Ultimate All In One":{"note":"The Ultimate All In One activate's solo missions, give all medals on solo missions, activate cheats, activate cinemas, and who knows what else. I just don't have the time to identify these codes. I know that some of this is creditted to Zap2. I don't have the time to cut those codes out.","data":["800884F3 0001","8008850E 0001","80088575 0001","50000302 0000","80088572 0001","8008858C 0001","8008858D 0001","800885A6 0001","800885A9 0001","800885C0 0001","800885DA 0001","800885DC 0001","800885F4 0001","800885F5 0001","8008860E 0001","80088610 0001","80088612 0001","80088628 0001","50000501 0000","80088642 0001","50000501 0000","8008865C 0001","50000501 0000","80088676 0001","50000501 0000","80088690 0001","50000501 0000","800886AA 0001","50000501 0000","800886C4 0001","50000501 0000","800886DE 0001","50000501 0000","800886F8 0001","50000501 0000","80088712 0001","50000501 0000","8008872C 0001","50000501 0000","80088746 0001","50000501 0000","80088760 0001","50000501 0000","8008877A 0001","50000501 0000","80088794 0001","50000501 0000","800887AE 0001","800A2219 0001","50003E02 0000","800A221D 0001","50000B01 0000","800ACCC9 0001","50000901 0000","800ACCD5 0001","50000401 0000","800ACCDF 0001","50000301 0000","800ACCE4 0001","800ACCE8 0001","800ACCE9 0001","800ACCEB 0001","800ACCEC 0001","50000901 0000","800ACCEE 0001","800ACCF8 0001","50002101 0000","800ACCFA 0001","800ACD12 0001","800ACD15 0001","800ACD16 0001","800ACDEA 0001","800ACD3A 0001"],"options":null}},"DEB78BBA-52F6BD9D-C:45":{"Away Team\\Scores 0":{"note":"","data":["8005FA47 0000"],"options":null},"Away Team\\Scores 50":{"note":"","data":["8005FA47 0032"],"options":null},"Enable\\All Stadiums":{"note":"","data":["50000801 0000","8004A7F0 00FF"],"options":null},"Enable\\All Teams":{"note":"","data":["50000E01 0000","8004ADD0 00FF"],"options":null},"Home Team\\Scores 0":{"note":"","data":["8005CF87 0000"],"options":null},"Home Team\\Scores 50":{"note":"","data":["8005CF87 0032"],"options":null},"Infinite\\Time Outs Away Team":{"note":"","data":["8005FA49 0003"],"options":null},"Infinite\\Time Outs Home Team":{"note":"","data":["8005CF89 0003"],"options":null},"No Time-Outs\\Away Team":{"note":"","data":["8005FA49 0000"],"options":null},"No Time-Outs\\Home Team":{"note":"","data":["8005CF89 0000"],"options":null},"Press L For First Down\\Player 1":{"note":"","data":["D0066F2D 0020","810612E0 0001"],"options":null},"Press L For First Down\\Player 2":{"note":"","data":["D0066F35 0020","810612E0 0001"],"options":null},"Press L For First Down\\Player 3":{"note":"","data":["D0066F3D 0020","810612E0 0001"],"options":null},"Press L For First Down\\Player 4":{"note":"","data":["D0066F45 0020","810612E0 0001"],"options":null},"Press L For More Time To Choose Play\\Player 1":{"note":"","data":["D0066F2D 0020","80061245 0028"],"options":null},"Press L For More Time To Choose Play\\Player 2":{"note":"","data":["D0066F35 0020","80061245 0028"],"options":null},"Press L For More Time To Choose Play\\Player 3":{"note":"","data":["D0066F3D 0020","80061245 0028"],"options":null},"Press L For More Time To Choose Play\\Player 4":{"note":"","data":["D0066F45 0020","80061245 0028"],"options":null},"Press R For Fourth Down\\Player 1":{"note":"","data":["D0066F2D 0010","810612E0 0004"],"options":null},"Press R For Fourth Down\\Player 2":{"note":"","data":["D0066F35 0010","810612E0 0004"],"options":null},"Press R For Fourth Down\\Player 3":{"note":"","data":["D0066F3D 0010","810612E0 0004"],"options":null},"Press R For Fourth Down\\Player 4":{"note":"","data":["D0066F45 0010","810612E0 0004"],"options":null}},"DED0DD9A-E78225A7-C:50":{"Always 1st \u0026 final time 00:00.00":{"note":"All Levels","data":["50000301 0000","801CE959 0000"],"options":null},"Difficulty Select":{"note":"","data":["8007C1C0 00??"],"options":{"Amateur":"00","Intermediate":"01","Mirror Mode":"03","Professional":"02"}},"Frantic Finale\\Colorado\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801BDB3B 00FF"],"options":null},"Frantic Finale\\Colorado\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7432 0063"],"options":null},"Frantic Finale\\Hawaii\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B75BB 00FF"],"options":null},"Frantic Finale\\Hawaii\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7B12 0063"],"options":null},"Frantic Finale\\Oregon\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801BABEB 00FF"],"options":null},"Frantic Finale\\Oregon\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B44E2 0063"],"options":null},"Frantic Finale\\Texas\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801BB38B 00FF"],"options":null},"Frantic Finale\\Texas\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B4C82 0063"],"options":null},"Freewayphobia\\Chicago\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B758B 00FF"],"options":null},"Freewayphobia\\Chicago\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7AE2 0063"],"options":null},"Freewayphobia\\Dakota\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B159B 00FF"],"options":null},"Freewayphobia\\Dakota\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B2CB2 0063"],"options":null},"Freewayphobia\\New York\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B4A5B 00FF"],"options":null},"Freewayphobia\\New York\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B4FB2 0063"],"options":null},"Freewayphobia\\Seattle\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B417B 00FF"],"options":null},"Freewayphobia\\Seattle\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B5892 0063"],"options":null},"Level Select":{"note":"","data":["801AD159 00??"],"options":{"Contest":"07","Frantic Finale":"04","Freewayphobia":"02","Motor Way Mania":"01","Options":"08","Practice":"06","Time Trial":"05","Traffic Troubles":"00","Vitory Vehicles":"03"}},"Motor Way Mania\\Alaska\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B280B 00FF"],"options":null},"Motor Way Mania\\Alaska\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B3F22 0063"],"options":null},"Motor Way Mania\\Las Vegas\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B6E9B 00FF"],"options":null},"Motor Way Mania\\Las Vegas\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B85B2 0063"],"options":null},"Motor Way Mania\\Los Angeles\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B207B 00FF"],"options":null},"Motor Way Mania\\Los Angeles\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B3792 0063"],"options":null},"Motor Way Mania\\Philadelphia\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B7DEB 00FF"],"options":null},"Motor Way Mania\\Philadelphia\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B9502 0063"],"options":null},"Play As":{"note":"","data":["800D33D1 00??"],"options":{"Daisy Duck":"01","Dewey":"07","Donald Duck":"05","Goofy":"02","Huey":"06","Louie":"08","Lugwig Von Drake":"09","Mickey Mouse":"00","Minnie Mouse":"04","Pete":"03"}},"Re-name Characters\\Daisy\\Letter 1":{"note":"","data":["801E39CE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 2":{"note":"","data":["801E39CF 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 3":{"note":"","data":["801E39D0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 4":{"note":"","data":["801E39D1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 5":{"note":"","data":["801E39D2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 1":{"note":"","data":["801E39E4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 2":{"note":"","data":["801E39E5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 3":{"note":"","data":["801E39E6 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 4":{"note":"","data":["801E39E7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 5":{"note":"","data":["801E39E8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 1":{"note":"","data":["801E39C7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 2":{"note":"","data":["801E39C8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 3":{"note":"","data":["801E39C9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 4":{"note":"","data":["801E39CA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 5":{"note":"","data":["801E39CB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 6":{"note":"","data":["801E39CC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 1":{"note":"","data":["801E39D4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 2":{"note":"","data":["801E39D5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 3":{"note":"","data":["801E39D6 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 4":{"note":"","data":["801E39D7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 5":{"note":"","data":["801E39D8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 1":{"note":"","data":["801E39DF 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 2":{"note":"","data":["801E39E0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 3":{"note":"","data":["801E39E1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 4":{"note":"","data":["801E39E2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 1":{"note":"","data":["801E39EA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 2":{"note":"","data":["801E39EB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 3":{"note":"","data":["801E39EC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 4":{"note":"","data":["801E39ED 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 5":{"note":"","data":["801E39EE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 1":{"note":"","data":["801E39F0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 2":{"note":"","data":["801E39F1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 3":{"note":"","data":["801E39F2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 4":{"note":"","data":["801E39F3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 5":{"note":"","data":["801E39F4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 6":{"note":"","data":["801E39F5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 1":{"note":"","data":["801E39B9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 2":{"note":"","data":["801E39BA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 3":{"note":"","data":["801E39BB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 4":{"note":"","data":["801E39BC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 5":{"note":"","data":["801E39BD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 6":{"note":"","data":["801E39BE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 1":{"note":"","data":["801E39C0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 2":{"note":"","data":["801E39C1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 3":{"note":"","data":["801E39C2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 4":{"note":"","data":["801E39C3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 5":{"note":"","data":["801E39C4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 6":{"note":"","data":["801E39C5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 1":{"note":"","data":["801E39DA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 2":{"note":"","data":["801E39DB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 3":{"note":"","data":["801E39DC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 4":{"note":"","data":["801E39DD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Traffic Troubles\\Grand Canyon\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B8CCB 00FF"],"options":null},"Traffic Troubles\\Grand Canyon\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B8CF2 0063"],"options":null},"Traffic Troubles\\Indianapolis\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B430B 00FF"],"options":null},"Traffic Troubles\\Indianapolis\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B4332 0063"],"options":null},"Traffic Troubles\\New Mexico\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B58DB 00FF"],"options":null},"Traffic Troubles\\New Mexico\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B5902 0063"],"options":null},"Traffic Troubles\\San Fransisco\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B75DB 00FF"],"options":null},"Traffic Troubles\\San Fransisco\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7602 0063"],"options":null},"Unlock Everything":{"note":"This will unlock all characters, tracks, mirror mode, all in-game cheats, postcards, pluto's collar and give you all Trophies for every track and difficulties. To have this cheat save to mempak, enable it and then go into the Options Menu and disable the cheat. Go to the Wide-Screen Settings and Change it to Wide-Screen [16.9] and then the B button to get back to Wide-Screen Settings, now go back into Wide-Screen [16.9] and change it back to Normal [4.3].and press the B button until you come back to the main Options Menu.Close the game and load it again to see everything saved to the Mempak and unlocked.","data":["800D3478 008F","800D3479 0094","800D347A 0003","800D347C 0001","800D347F 0080","50000502 0000","800D3480 0009","50000502 0000","800D3481 0024","800D348A 0015","800D348B 007F","800D348C 0001","800D348D 00FF","800D348E 0004","800D348F 0022"],"options":null},"Victory Vehicles\\Everglades\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B516B 00FF"],"options":null},"Victory Vehicles\\Everglades\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B56C2 0063"],"options":null},"Victory Vehicles\\Malibu\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B6BFB 00FF"],"options":null},"Victory Vehicles\\Malibu\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7152 0063"],"options":null},"Victory Vehicles\\Washington DC\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801BCBAB 00FF"],"options":null},"Victory Vehicles\\Washington DC\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801BD102 0063"],"options":null},"Victory Vehicles\\Yellowstone\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B2A0B 00FF"],"options":null},"Victory Vehicles\\Yellowstone\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B2F62 0063"],"options":null}},"DEE584A2-0F161187-C:45":{"Have All\\Cars":{"note":"","data":["50000C01 0000","80097A18 0001"],"options":null},"Have All\\Difficulty Levels":{"note":"","data":["80097A17 0003"],"options":null},"Have All\\Tracks":{"note":"","data":["50000C01 0000","80095CC8 0001"],"options":null},"Infinite Health\\Player 1\\Alpine Ridge":{"note":"","data":["D02BA164 0080","802BA173 00EB"],"options":null},"Infinite Health\\Player 1\\Aztec Ruins":{"note":"","data":["D01FC428 0080","801FC437 00BE"],"options":null},"Infinite Health\\Player 1\\Bayou Run":{"note":"","data":["D02862BC 0080","802862CB 00EB"],"options":null},"Infinite Health\\Player 1\\Destruction Junction":{"note":"","data":["D029A9B0 0080","8029A9BF 00E1"],"options":null},"Infinite Health\\Player 1\\Ground Zero":{"note":"","data":["D01F64C8 0080","801F64D7 00BE"],"options":null},"Infinite Health\\Player 1\\Junkyard":{"note":"","data":["D0205B7C 0080","80205B8B 00BE"],"options":null},"Infinite Health\\Player 1\\Metro Challenge":{"note":"","data":["D02EDB18 0080","802EDB27 00E1"],"options":null},"Infinite Health\\Player 1\\Midnyte Rumble":{"note":"","data":["D030CC0C 0080","8030CC1B 00EB"],"options":null},"Infinite Health\\Player 1\\Seascape Sprint":{"note":"","data":["D02D4C24 0080","802D4C33 00E1"],"options":null},"Infinite Health\\Player 1\\Sunset Canyon":{"note":"","data":["D0303EA8 0080","80303EB7 00EB"],"options":null},"Infinite Health\\Player 1\\Terminal Impact":{"note":"","data":["D02B5F2D 0080","802B56B3 00E1"],"options":null},"Infinite Health\\Player 1\\Urban Mayhem":{"note":"","data":["D0203F10 0080","80203F1F 00C8"],"options":null},"Infinite Health\\Player 2\\Alpine Ridge":{"note":"","data":["D02C8BD0 0080","802C8BDF 00B4"],"options":null},"Infinite Health\\Player 2\\Aztec Ruins":{"note":"","data":["D0217C50 0080","80217C5F 00A0"],"options":null},"Infinite Health\\Player 2\\Bayou Run":{"note":"","data":["D0295190 0080","8029519F 00B4"],"options":null},"Infinite Health\\Player 2\\Destruction Junction":{"note":"","data":["D02B61D0 0080","802B61DF 00B4"],"options":null},"Infinite Health\\Player 2\\Ground Zero":{"note":"","data":["D0211D10 0080","80211D1F 00A0"],"options":null},"Infinite Health\\Player 2\\Junkyard":{"note":"","data":["D0215050 0080","8021505F 00A0"],"options":null},"Infinite Health\\Player 2\\Metro Challenge":{"note":"","data":["D02FCC10 0080","802FCC1F 00B4"],"options":null},"Infinite Health\\Player 2\\Midnyte Rumble":{"note":"","data":["D032ADD0 0080","8032ADDF 00B4"],"options":null},"Infinite Health\\Player 2\\Seascape Sprint":{"note":"","data":["D02E2D50 0080","802E2D5F 00E1"],"options":null},"Infinite Health\\Player 2\\Sunset Canyon":{"note":"","data":["D0312810 0080","8031281F 00B4"],"options":null},"Infinite Health\\Player 2\\Terminal Impact":{"note":"","data":["D02C4550 0080","802C455F 00E1"],"options":null},"Infinite Health\\Player 2\\Urban Mayhem":{"note":"","data":["D0235E50 0080","80235E5F 00A0"],"options":null},"Max Bonus Points\\01: Seascape Sprint":{"note":"","data":["812D4C3E 03E7"],"options":null},"Max Bonus Points\\02: Metro Challenge":{"note":"","data":["812EDB32 03E7"],"options":null},"Max Bonus Points\\03: Junkyard":{"note":"","data":["81205B9A 03E7"],"options":null},"Max Bonus Points\\04: Terminal Impact":{"note":"","data":["812B56BE 03E7"],"options":null},"Max Bonus Points\\05: Destruction Junction":{"note":"","data":["8129A9CA 03E7"],"options":null},"Max Bonus Points\\06: Aztec Ruins":{"note":"","data":["81095D36 03E7"],"options":null},"Max Collisions Points\\01: Seascape Sprint":{"note":"","data":["812D4C3A 03E7"],"options":null},"Max Collisions Points\\02: Metro Challenge":{"note":"","data":["812EDB2E 03E7"],"options":null},"Max Collisions Points\\03: Junkyard":{"note":"","data":["81205B92 03E7"],"options":null},"Max Collisions Points\\04: Terminal Impact":{"note":"","data":["812B56BA 03E7"],"options":null},"Max Collisions Points\\05: Destruction Junction":{"note":"","data":["8129A9C6 03E7"],"options":null},"Max Collisions Points\\06: Aztec Ruins":{"note":"","data":["81095D06 03E7"],"options":null},"Max Points Aid":{"note":"","data":["8111EF4E 03E7"],"options":null}},"DEE596AB-AF3B7AE7-C:45":{"Always Special\\Player 1":{"note":"","data":["800F9D35 0008"],"options":null},"Always Special\\Player 2":{"note":"","data":["800FA0E5 0008"],"options":null},"Always Special\\Player 3":{"note":"","data":["800FA495 0008"],"options":null},"Always Special\\Player 4":{"note":"","data":["800FA845 0008"],"options":null},"Character Select\\Player 1":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890F9D36 0240","890F9D60 42B4","8107E8B2 ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 2":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA0E6 0240","890FA110 42B4","8107E8B6 ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 3":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA496 0240","890FA4C0 42B4","8107E8BA ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 4":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA846 0240","890FA870 42B4","8107E8BE ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Extra Characters \u0026 Modes":{"note":"","data":["8107F07C FFFF"],"options":null},"Get Title Belt In 1-Match":{"note":"","data":["80038AAB 0008"],"options":null},"Infinite Time":{"note":"","data":["800FAF87 0000"],"options":null},"Infinite Time Out Of Ring":{"note":"","data":["800FACE8 0014"],"options":null},"Spirit Select\\Player 1":{"note":"","data":["800F9D25 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 2":{"note":"","data":["800FA0D5 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 3":{"note":"","data":["800FA485 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 4":{"note":"","data":["800FA835 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Ultimate Code\\Player 1":{"note":"","data":["800F9D24 0064"],"options":null},"Ultimate Code\\Player 2":{"note":"","data":["800FA0D4 0064"],"options":null},"Ultimate Code\\Player 3":{"note":"","data":["800FA484 0064"],"options":null},"Ultimate Code\\Player 4":{"note":"","data":["800FA834 0064"],"options":null},"Weapon Select\\Player 1":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800F9D31 0003","800F98E1 00??","800F98E2 0000","800F99A0 0000"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 2":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA0E1 0003","800F9911 00??","800F9912 0001","800F99A1 0001"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 3":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA491 0003","800F9941 00??","800F9942 0002","800F99A2 0002"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 4":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA841 0003","800F9971 00??","800F9972 0003","800F99A3 0003"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}}},"DF331A18-5FD4E044-C:45":{"1 Lap Race":{"note":"Do not put this on with Total Number of Laps Code","data":["810495AE 0001"],"options":null},"Beat Championship Mode Easily":{"note":"","data":["80223E3B 0255"],"options":null},"Both Players Can Be Dale E":{"note":"","data":["80046538 0003"],"options":null},"Have CPU Control Car Player 1":{"note":"","data":["D0092985 0020","8015CC5C 0001","D0092985 0010","8015CC5C 0000"],"options":null},"Infinite Fuel\\Player 1":{"note":"","data":["81220502 3E80"],"options":null},"Infinite Fuel\\Player 2":{"note":"","data":["81230472 3E80"],"options":null},"Maximum\\Acceleration":{"note":"","data":["800C7113 0000"],"options":null},"Maximum\\Pit Distance":{"note":"","data":["800C7110 0000"],"options":null},"Maximum\\Top Speed":{"note":"","data":["800C7111 0000"],"options":null},"Race Forever":{"note":"","data":["810465AE FDE8"],"options":null},"Total Number Of Laps":{"note":"","data":["80046553 00??"],"options":{"1 lap":"01","2 lap":"02","3 lap":"03","4 lap":"04","5 lap":"05","6 lap":"06","7 lap":"07","8 lap":"08","9 lap":"09"}}},"DF574191-9EB5123D-C:45":{"Have 231 Marbles":{"note":"","data":["D00E9FF3 0000","800E9FF3 03E7"],"options":null},"Have All Gold Udders":{"note":"","data":["50002802 0000","810C625A 0101"],"options":null},"Infinite Banana Peel Ammo":{"note":"","data":["810C6976 03E7"],"options":null},"Infinite Blaster Ammo":{"note":"","data":["810C6916 03E7"],"options":null},"Infinite Boomerang Knives Ammo":{"note":"","data":["810C6A1E 03E7"],"options":null},"Infinite Cleaver Ammo":{"note":"","data":["800C6A1F 00FA"],"options":null},"Infinite Egg Chucker Ammo":{"note":"","data":["800C69BF 00FA"],"options":null},"Infinite Green Slimer Ammo":{"note":"","data":["810C69A6 03E7"],"options":null},"Infinite Health":{"note":"","data":["800C690F 0064"],"options":null},"Infinite Laser Ammo":{"note":"","data":["800C6917 00FA"],"options":null},"Infinite Lives":{"note":"","data":["800C6913 0063"],"options":null},"Infinite Mushroom Ammo":{"note":"","data":["810C6E36 03E7"],"options":null},"Infinite Music Gun Ammo":{"note":"","data":["810C6A06 03E7"],"options":null},"Infinite Rocket Launcher Ammo":{"note":"","data":["810C6946 03E7"],"options":null},"Infinite Shotgun Ammo":{"note":"","data":["810C69EE 03E7"],"options":null}},"DF6FF0F4-29D14238-C:4A":{"Bomb Select":{"note":"","data":["8024A3A1 00??"],"options":{"Blue Remote Bomb":"05","Clear All Special Bombs.":"00","Crazy Bomb":"1D","Invisible Mine Bomb":"07","Jelly Bomb":"03","Power Bomb":"02","Red Beem Bomb":"06","Shock Wave Bomb":"04"}},"Bomberman Speed":{"note":"","data":["8024A3A0 00??"],"options":{"Fast":"0E","Normal":"08","Slow":"04","Turbo":"10"}},"Have\\Infinite\\Kick":{"note":"","data":["8024A3A6 0002"],"options":null},"Have\\Max Bombs":{"note":"","data":["8024A39F 00FF"],"options":null},"Have\\Max Fire":{"note":"","data":["8024A39E 00FF"],"options":null},"Infinite\\Health Hearts":{"note":"","data":["8024A3AE 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["802E1CE7 00FF"],"options":null},"Infinite\\Timer":{"note":"","data":["800FDD72 002A"],"options":null},"Invincible":{"note":"Enemies \u0026 Bomb Blasts cant harm you.But if you walk \u0026 keep laying Bombs it will most likly freeze.so try to avoid constant bombing while walking.Turn cheat to off to go back to normal.","data":["8024A3A8 00??"],"options":{"Off":"00","On":"01"}},"Walk through\\Blocks":{"note":"Walk through Blocks like they are not there.Turn cheat to off to go back to normal.","data":["8024A3A5 00??"],"options":{"Off":"00","On":"01"}},"Walk through\\Bombs":{"note":"Walk through Bombs like they are not there.Turn cheat to off to go back to normal.","data":["8024A3A6 00??"],"options":{"Off":"00","On":"01"}}},"DF98B95D-58840978-C:4A":{"Freeze Timer":{"note":"","data":["811C84C4 012C"],"options":null},"Level 01\\Invincible":{"note":"","data":["D112D33A 0001","811E4B38 000A","D1147DEA 0001","811E4B38 000A"],"options":null},"Level 01\\Press R For Supa Attack":{"note":"","data":["D112D33A 0001","811E4B3C 01F4","D1147DEA 0001","811E4B3C 01F4"],"options":null},"Level 02\\Invincible":{"note":"","data":["D112D33A 0002","811E1DB8 000A","D1147DEA 0002","811E1DB8 000A"],"options":null},"Level 02\\Press R For Supa Attack":{"note":"","data":["D112D33A 0002","811E1DBC 01F4","D1147DEA 0002","811E1DBC 01F4"],"options":null},"Level 03\\Invincible":{"note":"","data":["D112D33A 0003","811E4D38 000A","D1147DEA 0003","811E4D38 000A"],"options":null},"Level 03\\Press R For Supa Attack":{"note":"","data":["D112D33A 0003","811E4D3C 01F4","D1147DEA 0003","811E4D3C 01F4"],"options":null},"Level 04\\Invincible":{"note":"","data":["D112D33A 0004","811E11B8 000A","D1147DEA 0004","811E11B8 000A"],"options":null},"Level 04\\Press R For Supa Attack":{"note":"","data":["D112D33A 0004","811E11BC 01F4","D1147DEA 0004","811E11BC 01F4"],"options":null},"Level 05\\Invincible":{"note":"","data":["D112D33A 0005","811E3638 000A","D1147DEA 0005","811E3638 000A"],"options":null},"Level 05\\Press R For Supa Attack":{"note":"","data":["D112D33A 0005","811E363C 01F4","D1147DEA 0005","811E363C 01F4"],"options":null},"Level 06\\Invincible":{"note":"","data":["D112D33A 0006","811E4EB8 000A","D1147DEA 0006","811E4EB8 000A"],"options":null},"Level 06\\Press R For Supa Attack":{"note":"","data":["D112D33A 0006","811E4EBC 01F4","D1147DEA 0006","811E4EBC 01F4"],"options":null},"Level 07\\Invincible":{"note":"","data":["D112D33A 0007","811E5D38 000A","D1147DEA 0007","811E5D38 000A"],"options":null},"Level 07\\Press R For Supa Attack":{"note":"","data":["D112D33A 0007","811E5D3C 01F4","D1147DEA 0007","811E5D3C 01F4"],"options":null},"Level 08\\Invincible":{"note":"","data":["D112D33A 0008","811E2838 000A","D1147DEA 0008","811E2838 000A"],"options":null},"Level 08\\Press R For Supa Attack":{"note":"","data":["D112D33A 0008","811E283C 01F4","D1147DEA 0008","811E283C 01F4"],"options":null},"Level 09\\Invincible":{"note":"","data":["D112D33A 0009","811EB3B8 000A","D1147DEA 0009","811EB3B8 000A"],"options":null},"Level 09\\Press R For Supa Attack":{"note":"","data":["D112D33A 0009","811EB3BC 01F4","D1147DEA 0009","811EB3BC 01F4"],"options":null},"Level 10\\Invincible":{"note":"","data":["D112D33A 000A","811E5438 000A","D1147DEA 000A","811E5438 000A"],"options":null},"Level 10\\Press R For Supa Attack":{"note":"","data":["D112D33A 000A","811E543C 01F4","D1147DEA 000A","811E543C 01F4"],"options":null},"Level 11\\Invincible":{"note":"","data":["D112D33A 000B","811E1EB8 000A","D1147DEA 000B","811E1EB8 000A"],"options":null},"Level 11\\Press R For Supa Attack":{"note":"","data":["D112D33A 000B","811E1EBC 01F4","D1147DEA 000B","811E1EBC 01F4"],"options":null},"Level 12\\Invincible":{"note":"","data":["D112D33A 000C","811FA6B8 000A","D1147DEA 000C","811FA6B8 000A"],"options":null},"Level 12\\Press R For Supa Attack":{"note":"","data":["D112D33A 000C","811FA6BC 01F4","D1147DEA 000C","811FA6BC 01F4"],"options":null},"Level 13\\Invincible":{"note":"","data":["D112D33A 000D","811EAE38 000A","D1147DEA 000D","811EAE38 000A"],"options":null},"Level 13\\Press R For Supa Attack":{"note":"","data":["D112D33A 000D","811EAE3C 01F4","D1147DEA 000D","811EAE3C 01F4"],"options":null},"Level 14\\Invincible":{"note":"","data":["D112D33A 000E","811E2EB8 000A","D1147DEA 000E","811E2EB8 000A"],"options":null},"Level 14\\Press R For Supa Attack":{"note":"","data":["D112D33A 000E","811E2EBC 01F4","D1147DEA 000E","811E2EBC 01F4"],"options":null},"Level 15\\Invincible":{"note":"","data":["D112D33A 000F","811E2738 000A","D1147DEA 000F","811E2738 000A"],"options":null},"Level 15\\Press R For Supa Attack":{"note":"","data":["D112D33A 000F","811E273C 01F4","D1147DEA 000F","811E273C 01F4"],"options":null},"Level 16\\Invincible":{"note":"","data":["D112D33A 0010","811E53B8 000A","D1147DEA 0010","811E53B8 000A"],"options":null},"Level 16\\Press R For Supa Attack":{"note":"","data":["D112D33A 0010","811E538C 01F4","D1147DEA 0010","811E538C 01F4"],"options":null},"Level 17\\Invincible":{"note":"","data":["D112D33A 0011","811E2738 000A","D1147DEA 0011","811E2738 000A"],"options":null},"Level 17\\Press R For Supa Attack":{"note":"","data":["D112D33A 0011","811E273C 01F4","D1147DEA 0011","811E273C 01F4"],"options":null},"Level 18\\Invincible":{"note":"","data":["D112D33A 0012","811E1CB8 000A","D1147DEA 0012","811E1CB8 000A"],"options":null},"Level 18\\Press R For Supa Attack":{"note":"","data":["D112D33A 0012","811E1CBC 01F4","D1147DEA 0012","811E1CBC 01F4"],"options":null},"Level 19\\Invincible":{"note":"","data":["D112D33A 0013","811E4438 000A","D1147DEA 0013","811E4438 000A"],"options":null},"Level 19\\Press R For Supa Attack":{"note":"","data":["D112D33A 0013","811E443C 01F4","D1147DEA 0013","811E443C 01F4"],"options":null},"Level 20\\Invincible":{"note":"","data":["D112D33A 0014","811F7238 000A","D1147DEA 0014","811F7238 000A"],"options":null},"Level 20\\Press R For Supa Attack":{"note":"","data":["D112D33A 0014","811F723C 01F4","D1147DEA 0014","811F723C 01F4"],"options":null},"Level 21\\Invincible":{"note":"","data":["D112D33A 0015","811E49B8 000A","D1147DEA 0015","811E49B8 000A"],"options":null},"Level 21\\Press R For Supa Attack":{"note":"","data":["D112D33A 0015","811E49BC 01F4","D1147DEA 0015","811E49BC 01F4"],"options":null},"Level 22\\Invincible":{"note":"","data":["D112D33A 0016","811E40B8 000A","D1147DEA 0016","811E40B8 000A"],"options":null},"Level 22\\Press R For Supa Attack":{"note":"","data":["D112D33A 0016","811E40BC 01F4","D1147DEA 0016","811E40BC 01F4"],"options":null},"Level 23\\Invincible":{"note":"","data":["D112D33A 0017","811E9C38 000A","D1147DEA 0017","811E9C38 000A"],"options":null},"Level 23\\Press R For Supa Attack":{"note":"","data":["D112D33A 0017","811E9C3C 01F4","D1147DEA 0017","811E9C3C 01F4"],"options":null},"Level 24\\Invincible":{"note":"","data":["D112D33A 0018","811E2938 000A","D1147DEA 0018","811E2938 000A"],"options":null},"Level 24\\Press R For Supa Attack":{"note":"","data":["D112D33A 0018","811E293C 01F4","D1147DEA 0018","811E293C 01F4"],"options":null},"Level 25\\Invincible":{"note":"","data":["D112D33A 0019","811E4D38 000A","D1147DEA 0019","811E4D38 000A"],"options":null},"Level 25\\Press R For Supa Attack":{"note":"","data":["D112D33A 0019","811E4D3C 01F4","D1147DEA 0019","811E4D3C 01F4"],"options":null},"Level 26\\Invincible":{"note":"","data":["D112D33A 001A","811EFFB8 000A","D1147DEA 001A","811EFFB8 000A"],"options":null},"Level 26\\Press R For Supa Attack":{"note":"","data":["D112D33A 001A","811EFFBC 01F4","D1147DEA 001A","811EFFBC 01F4"],"options":null},"Level 27\\Invincible":{"note":"","data":["D112D33A 001B","811E2B38 000A","D1147DEA 001B","811E2B38 000A"],"options":null},"Level 27\\Press R For Supa Attack":{"note":"","data":["D112D33A 001B","811E2B3C 01F4","D1147DEA 001B","811E2B3C 01F4"],"options":null},"Level 28\\Invincible":{"note":"","data":["D112D33A 001C","811E25B8 000A","D1147DEA 001C","811E25B8 000A"],"options":null},"Level 28\\Press R For Supa Attack":{"note":"","data":["D112D33A 001C","811E25BC 01F4","D1147DEA 001C","811E25BC 01F4"],"options":null},"Level 29\\Invincible":{"note":"","data":["D112D33A 001D","811E1EB8 000A","D1147DEA 001D","811E1EB8 000A"],"options":null},"Level 29\\Press R For Supa Attack":{"note":"","data":["D112D33A 001D","811E1EBC 01F4","D1147DEA 001D","811E1EBC 01F4"],"options":null},"Level 30\\Invincible":{"note":"","data":["D112D33A 001E","811E38B8 000A","D1147DEA 001E","811E38B8 000A"],"options":null},"Level 30\\Press R For Supa Attack":{"note":"","data":["D112D33A 001E","811E38BC 01F4","D1147DEA 001E","811E38BC 01F4"],"options":null},"Level 31\\Invincible":{"note":"","data":["D112D33A 001F","811F5638 000A","D1147DEA 001F","811F5638 000A"],"options":null},"Level 31\\Press R For Supa Attack":{"note":"","data":["D112D33A 001F","811F563C 01F4","D1147DEA 001F","811F563C 01F4"],"options":null},"Level 32\\Invincible":{"note":"","data":["D112D33A 0020","811E4238 000A","D1147DEA 0020","811E4238 000A"],"options":null},"Level 32\\Press R For Supa Attack":{"note":"","data":["D112D33A 0020","811E423C 01F4","D1147DEA 0020","811E423C 01F4"],"options":null},"Level 33\\Invincible":{"note":"","data":["D112D33A 0021","811E4EB8 000A","D1147DEA 0021","811E4EB8 000A"],"options":null},"Level 33\\Press R For Supa Attack":{"note":"","data":["D112D33A 0021","811E4EBC 01F4","D1147DEA 0021","811E4EBC 01F4"],"options":null},"Level 34\\Invincible":{"note":"","data":["D112D33A 0022","811E16B8 000A","D1147DEA 0022","811E16B8 000A"],"options":null},"Level 34\\Press R For Supa Attack":{"note":"","data":["D112D33A 0022","811E16BC 01F4","D1147DEA 0022","811E16BC 01F4"],"options":null},"Level 35\\Invincible":{"note":"","data":["D112D33A 0023","811FABB8 000A","D1147DEA 0023","811FABB8 000A"],"options":null},"Level 35\\Press R For Supa Attack":{"note":"","data":["D112D33A 0023","811FABBC 01F4","D1147DEA 0023","811FABBC 01F4"],"options":null},"Level 36\\Invincible":{"note":"","data":["D112D33A 0024","811EA738 000A","D1147DEA 0024","811EA738 000A"],"options":null},"Level 36\\Press R For Supa Attack":{"note":"","data":["D112D33A 0024","811EA73C 01F4","D1147DEA 0024","811EA73C 01F4"],"options":null},"Level 37\\Invincible":{"note":"","data":["D112D33A 0025","811FC638 000A","D1147DEA 0025","811FC638 000A"],"options":null},"Level 37\\Press R For Supa Attack":{"note":"","data":["D112D33A 0025","811FC63C 01F4","D1147DEA 0025","811FC63C 01F4"],"options":null},"Level 38\\Invincible":{"note":"","data":["D112D33A 0026","811EEBC8 000A","D1147DEA 0026","811EEBC8 000A"],"options":null},"Level 38\\Press R For Supa Attack":{"note":"","data":["D112D33A 0026","811EEBCC 01F4","D1147DEA 0026","811EEBCC 01F4"],"options":null},"Level 39\\Invincible":{"note":"","data":["D112D33A 0027","811F50B8 000A","D1147DEA 0027","811F50B8 000A"],"options":null},"Level 39\\Press R For Supa Attack":{"note":"","data":["D112D33A 0027","811F50BC 01F4","D1147DEA 0027","811F50BC 01F4"],"options":null},"Level 40\\Invincible":{"note":"","data":["D112D33A 0028","811E2038 000A","D1147DEA 0028","811E2038 000A"],"options":null},"Level 40\\Press R For Supa Attack":{"note":"","data":["D112D33A 0028","811E203C 01F4","D1147DEA 0028","811E203C 01F4"],"options":null},"Level 41\\Invincible":{"note":"","data":["D112D33A 0029","811F02B8 000A","D1147DEA 0029","811F02B8 000A"],"options":null},"Level 41\\Press R For Supa Attack":{"note":"","data":["D112D33A 0029","811F02BC 01F4","D1147DEA 0029","811F02BC 01F4"],"options":null},"Level 42\\Invincible":{"note":"","data":["D112D33A 002A","811FD7B8 000A","D1147DEA 002A","811FD7B8 000A"],"options":null},"Level 42\\Press R For Supa Attack":{"note":"","data":["D112D33A 002A","811FD7BC 01F4","D1147DEA 002A","811FD7BC 01F4"],"options":null},"Level 43\\Invincible":{"note":"","data":["D112D33A 002B","811E97B8 000A","D1147DEA 002B","811E97B8 000A"],"options":null},"Level 43\\Press R For Supa Attack":{"note":"","data":["D112D33A 002B","811E97BC 01F4","D1147DEA 002B","811E97BC 01F4"],"options":null},"Level 44\\Invincible":{"note":"","data":["D112D33A 002C","811E4538 000A","D1147DEA 002C","811E4538 000A"],"options":null},"Level 44\\Press R For Supa Attack":{"note":"","data":["D112D33A 002C","811E453C 01F4","D1147DEA 002C","811E453C 01F4"],"options":null}},"DFD784AD-AE426603-C:50":{"Game Win Select\\Player 1":{"note":"","data":["801BAEB1 00??"],"options":{"0 Games Won":"00","1 Game Won":"01","2 Games Won":"02","3 Games Won":"03","4 Games Won":"04","5 Games Won":"05","For Game Set \u0026 Match":"06"}},"Game Win Select\\Player 2":{"note":"","data":["801BAEB2 00??"],"options":{"0 Games Won":"00","1 Game Won":"01","2 Games Won":"02","3 Games Won":"03","4 Games Won":"04","5 Games Won":"05","For Game Set \u0026 Match":"06"}},"Play As\\Player 1":{"note":"","data":["800BE351 00??"],"options":{"Amanda Coetzer":"02","Conchita Martinez":"04","Gustavo Kuerten":"07","Jana Novotna":"03","Jonas Bjorkman":"08","Leon Rodez":"05","Mark Philippoussis":"09","Michael Chang":"06","Randy Powell":"0A","Richard Krajicek":"0B","Vanessa Child":"01","Zoe Taylor":"00"}},"Play As\\Player 2":{"note":"","data":["800BE352 00??"],"options":{"Amanda Coetzer":"02","Conchita Martinez":"04","Gustavo Kuerten":"07","Jana Novotna":"03","Jonas Bjorkman":"08","Leon Rodez":"05","Mark Philippoussis":"09","Michael Chang":"06","Randy Powell":"0A","Richard Krajicek":"0B","Vanessa Child":"01","Zoe Taylor":"00"}},"Points Select\\Player 1":{"note":"","data":["801C6160 00??"],"options":{"0 Points":"00","15 Points":"15","30 Points":"30","40 Points":"40"}},"Points Select\\Player 2":{"note":"","data":["801C6161 00??"],"options":{"0 Points":"00","15 Points":"15","30 Points":"30","40 Points":"40"}}},"DFE61153-D76118E6-C:45":{"Championship Mode\\Cannot Spin Out":{"note":"","data":["803CDD93 0000"],"options":null},"Championship Mode\\Disable Left Lane Traffic":{"note":"","data":["8033C95B 0001"],"options":null},"Championship Mode\\Disable Right Lane Traffic":{"note":"","data":["8033C95F 0001"],"options":null},"Championship Mode\\Max Points Per Race":{"note":"","data":["813BFBFE FFFF"],"options":null},"Championship Mode\\Max Points To Next Level":{"note":"","data":["813BFBFC FFFF"],"options":null},"Championship Mode\\Max Total Points":{"note":"","data":["813BFBFA FFFF"],"options":null},"Championship Mode\\Unlimited Nitro\\Player 1":{"note":"","data":["803C75E7 0003"],"options":null},"Championship Mode\\Unlimited Nitro\\Player 2":{"note":"","data":["803C7823 0003"],"options":null},"Championship Mode\\Unlimited Nitro\\Player 3":{"note":"","data":["803C716F 0003"],"options":null},"Dancing Girl Always On":{"note":"","data":["803BEE73 0001","803C21CF 0054"],"options":null},"Have All\\Car Upgrades":{"note":"","data":["803BEE42 0005"],"options":null},"Have All\\Cars":{"note":"","data":["813BEE78 1FFF"],"options":null},"Player 1\\Always Place 1st":{"note":"","data":["803CE023 0001"],"options":null},"Player 1\\Car/Transmission Modifier":{"note":"","data":["803BEE40 00??"],"options":{"ATV (Auto":"04","ATV (Manual)":"05","Banzai GTV (Auto)":"0A","Banzai GTV (Manual)":"0B","Bulldog (Auto)":"1A","Bulldog (Manual)":"1B","Conductor (Auto)":"24","Conductor (Manual)":"25","El Nino (Auto)":"10","El Nino (Manual)":"11","Enforcer (Auto)":"1C","Enforcer (Manual)":"1D","Exec (Auto)":"22","Exec (Manual)":"23","Grass Hopper (Auto)":"18","Grass Hopper (Manual)":"19","Howler (Auto)":"30","Howler (Manual)":"31","Kamikaze (Auto)":"02","Kamikaze (Manual)":"03","Monsta (Auto)":"2E","Monsta (Manual)":"2F","NY Taxi (Auto)":"1E","NY Taxi (Manual)":"1F","Orca (Auto)":"0E","Orca (manual)":"0F","Rhino 4x4 (Auto)":"12","Rhino 4x4 (Manual)":"13","Road King (Auto)":"16","Road King (Manual)":"17","Rocket (Auto)":"2A","Rocket (Manual)":"2B","Sardine Extreme (Auto)":"14","Sardine Extreme (Manual)":"15","Scarab (Auto)":"06","Scarab (Manual)":"07","School Bus (Auto)":"20","School Bus (Manual)":"21","Serpent (Auto)":"00","Serpent (Manual)":"01","Speed Demon (Auto)":"26","Speed Demon (Manual)":"27","Stallion P6 (Auto)":"08","Stallion P6 (Manual)":"09","The Surgeon (Auto)":"2C","The Surgeon (Manual)":"2D","Tommy (Auto)":"28","Tommy (Manual)":"29","Zombie (Auto)":"0C","Zombie (Manual)":"0D"}},"Player 1\\Stop Elapsed Time":{"note":"","data":["813C7678 3C80"],"options":null},"Player 2\\Always Place 1st":{"note":"","data":["803CE4FB 0001"],"options":null},"Player 2\\Car/Transmission Modifier":{"note":"","data":["803BEE48 00??"],"options":{"ATV (Auto":"04","ATV (Manual)":"05","Banzai GTV (Auto)":"0A","Banzai GTV (Manual)":"0B","Bulldog (Auto)":"1A","Bulldog (Manual)":"1B","Conductor (Auto)":"24","Conductor (Manual)":"25","El Nino (Auto)":"10","El Nino (Manual)":"11","Enforcer (Auto)":"1C","Enforcer (Manual)":"1D","Exec (Auto)":"22","Exec (Manual)":"23","Grass Hopper (Auto)":"18","Grass Hopper (Manual)":"19","Howler (Auto)":"30","Howler (Manual)":"31","Kamikaze (Auto)":"02","Kamikaze (Manual)":"03","Monsta (Auto)":"2E","Monsta (Manual)":"2F","NY Taxi (Auto)":"1E","NY Taxi (Manual)":"1F","Orca (Auto)":"0E","Orca (manual)":"0F","Rhino 4x4 (Auto)":"12","Rhino 4x4 (Manual)":"13","Road King (Auto)":"16","Road King (Manual)":"17","Rocket (Auto)":"2A","Rocket (Manual)":"2B","Sardine Extreme (Auto)":"14","Sardine Extreme (Manual)":"15","Scarab (Auto)":"06","Scarab (Manual)":"07","School Bus (Auto)":"20","School Bus (Manual)":"21","Serpent (Auto)":"00","Serpent (Manual)":"01","Speed Demon (Auto)":"26","Speed Demon (Manual)":"27","Stallion P6 (Auto)":"08","Stallion P6 (Manual)":"09","The Surgeon (Auto)":"2C","The Surgeon (Manual)":"2D","Tommy (Auto)":"28","Tommy (Manual)":"29","Zombie (Auto)":"0C","Zombie (Manual)":"0D"}},"Player 2\\Stop Elapsed Time":{"note":"","data":["813C78B4 3C80"],"options":null},"Player 3\\Always Place 1st":{"note":"","data":["803CDB4B 0001"],"options":null},"Player 3\\Car/Transmission Modifier":{"note":"","data":["803BEE50 00??"],"options":{"ATV (Auto":"04","ATV (Manual)":"05","Banzai GTV (Auto)":"0A","Banzai GTV (Manual)":"0B","Bulldog (Auto)":"1A","Bulldog (Manual)":"1B","Conductor (Auto)":"24","Conductor (Manual)":"25","El Nino (Auto)":"10","El Nino (Manual)":"11","Enforcer (Auto)":"1C","Enforcer (Manual)":"1D","Exec (Auto)":"22","Exec (Manual)":"23","Grass Hopper (Auto)":"18","Grass Hopper (Manual)":"19","Howler (Auto)":"30","Howler (Manual)":"31","Kamikaze (Auto)":"02","Kamikaze (Manual)":"03","Monsta (Auto)":"2E","Monsta (Manual)":"2F","NY Taxi (Auto)":"1E","NY Taxi (Manual)":"1F","Orca (Auto)":"0E","Orca (manual)":"0F","Rhino 4x4 (Auto)":"12","Rhino 4x4 (Manual)":"13","Road King (Auto)":"16","Road King (Manual)":"17","Rocket (Auto)":"2A","Rocket (Manual)":"2B","Sardine Extreme (Auto)":"14","Sardine Extreme (Manual)":"15","Scarab (Auto)":"06","Scarab (Manual)":"07","School Bus (Auto)":"20","School Bus (Manual)":"21","Serpent (Auto)":"00","Serpent (Manual)":"01","Speed Demon (Auto)":"26","Speed Demon (Manual)":"27","Stallion P6 (Auto)":"08","Stallion P6 (Manual)":"09","The Surgeon (Auto)":"2C","The Surgeon (Manual)":"2D","Tommy (Auto)":"28","Tommy (Manual)":"29","Zombie (Auto)":"0C","Zombie (Manual)":"0D"}},"Player 4\\Always Place 1st":{"note":"","data":["803CD673 0001"],"options":null},"Player 4\\Car/Transmission Modifier":{"note":"","data":["803BEE58 00??"],"options":{"ATV (Auto":"04","ATV (Manual)":"05","Banzai GTV (Auto)":"0A","Banzai GTV (Manual)":"0B","Bulldog (Auto)":"1A","Bulldog (Manual)":"1B","Conductor (Auto)":"24","Conductor (Manual)":"25","El Nino (Auto)":"10","El Nino (Manual)":"11","Enforcer (Auto)":"1C","Enforcer (Manual)":"1D","Exec (Auto)":"22","Exec (Manual)":"23","Grass Hopper (Auto)":"18","Grass Hopper (Manual)":"19","Howler (Auto)":"30","Howler (Manual)":"31","Kamikaze (Auto)":"02","Kamikaze (Manual)":"03","Monsta (Auto)":"2E","Monsta (Manual)":"2F","NY Taxi (Auto)":"1E","NY Taxi (Manual)":"1F","Orca (Auto)":"0E","Orca (manual)":"0F","Rhino 4x4 (Auto)":"12","Rhino 4x4 (Manual)":"13","Road King (Auto)":"16","Road King (Manual)":"17","Rocket (Auto)":"2A","Rocket (Manual)":"2B","Sardine Extreme (Auto)":"14","Sardine Extreme (Manual)":"15","Scarab (Auto)":"06","Scarab (Manual)":"07","School Bus (Auto)":"20","School Bus (Manual)":"21","Serpent (Auto)":"00","Serpent (Manual)":"01","Speed Demon (Auto)":"26","Speed Demon (Manual)":"27","Stallion P6 (Auto)":"08","Stallion P6 (Manual)":"09","The Surgeon (Auto)":"2C","The Surgeon (Manual)":"2D","Tommy (Auto)":"28","Tommy (Manual)":"29","Zombie (Auto)":"0C","Zombie (Manual)":"0D"}},"Time Counts Down Faster":{"note":"","data":["813D0D3E 0000"],"options":null}},"DFF227D9-0D4D8169-C:44":{"Always Have\\50 pieces of corn":{"note":"","data":["801E2761 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E2750 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["811E274E 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E2762 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E2755 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E2760 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D008FFA1 0010","811E26C6 1000","D008FFA1 0010","811E26D6 1000"],"options":null},"No Music":{"note":"","data":["801DD906 0000"],"options":null},"Start with Berry Weapon":{"note":"","data":["801E2757 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Subtitles On":{"note":"","data":["801DDB7B 00??"],"options":{"Off":"00","On":"01"}},"Unlock All Levels":{"note":"","data":["81099E30 000F"],"options":null}},"E0144180-650B78C9-C:45":{"Andrew Reynolds\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA7E 00FF"],"options":null},"Andrew Reynolds\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA80 00FF"],"options":null},"Andrew Reynolds\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA7B 00FF"],"options":null},"Andrew Reynolds\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA78 00FF"],"options":null},"Bob Burnquist\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA1A 00FF"],"options":null},"Bob Burnquist\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA1C 00FF"],"options":null},"Bob Burnquist\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA17 00FF"],"options":null},"Bob Burnquist\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA14 00FF"],"options":null},"Bucky Lasek\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA42 00FF"],"options":null},"Bucky Lasek\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA44 00FF"],"options":null},"Bucky Lasek\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA3F 00FF"],"options":null},"Bucky Lasek\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA3C 00FF"],"options":null},"Chad Muska\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA56 00FF"],"options":null},"Chad Muska\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA58 00FF"],"options":null},"Chad Muska\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA53 00FF"],"options":null},"Chad Muska\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA50 00FF"],"options":null},"Elissa Steamer\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEABA 00FF"],"options":null},"Elissa Steamer\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEABC 00FF"],"options":null},"Elissa Steamer\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEAB7 00FF"],"options":null},"Elissa Steamer\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEAB4 00FF"],"options":null},"Geoff Rowley\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA2E 00FF"],"options":null},"Geoff Rowley\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA30 00FF"],"options":null},"Geoff Rowley\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA2B 00FF"],"options":null},"Geoff Rowley\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA28 00FF"],"options":null},"Jamie Thomas\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEAA6 00FF"],"options":null},"Jamie Thomas\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEAA8 00FF"],"options":null},"Jamie Thomas\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEAA3 00FF"],"options":null},"Jamie Thomas\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEAA0 00FF"],"options":null},"Kareem Campbell\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA6A 00FF"],"options":null},"Kareem Campbell\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA6C 00FF"],"options":null},"Kareem Campbell\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA67 00FF"],"options":null},"Kareem Campbell\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA64 00FF"],"options":null},"Officer Dick\\Have\\All\\Gold Medal\\Burnside":{"note":"","data":["800DEACE 00FF"],"options":null},"Officer Dick\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEAD0 00FF"],"options":null},"Officer Dick\\Have\\All\\Gold Medal\\Skate Park":{"note":"","data":["800DEACB 00FF"],"options":null},"Officer Dick\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEAC8 00FF"],"options":null},"Player 1\\Have\\Perfect Balance":{"note":"","data":["800DE843 0001"],"options":null},"Player 1\\Play As":{"note":"","data":["800D0FD4 00??"],"options":{"Andrew Reynolds":"06","Bob Burnquist":"01","Bucky Lasek":"03","Chad Muska":"04","Elissa Steamer":"09","Geoff Rowley":"02","Jamie Thomas":"08","Kareem Campbell":"05","Officer Dick":"0A","Rune Glifberg":"07","Tony Hawk":"00"}},"Player 1\\Super Max\\Air":{"note":"","data":["800D62DE FFFF"],"options":null},"Player 1\\Super Max\\Balance":{"note":"","data":["800D62DF FFFF"],"options":null},"Player 1\\Super Max\\Ollie":{"note":"","data":["800D62DC FFFF"],"options":null},"Player 1\\Super Max\\Speed":{"note":"","data":["800D62DD FFFF"],"options":null},"Player 1\\Super Max\\Turning":{"note":"","data":["800D62E0 FFFF"],"options":null},"Player 2\\Play As":{"note":"","data":["800D0FD5 00??"],"options":{"Andrew Reynolds":"06","Bob Burnquist":"01","Bucky Lasek":"03","Chad Muska":"04","Elissa Steamer":"09","Geoff Rowley":"02","Jamie Thomas":"08","Kareem Campbell":"05","Officer Dick":"0A","Rune Glifberg":"07","Tony Hawk":"00"}},"Player 2\\Super Max\\Air":{"note":"","data":["800D62E3 FFFF"],"options":null},"Player 2\\Super Max\\Balance":{"note":"","data":["800D62E4 FFFF"],"options":null},"Player 2\\Super Max\\Ollie":{"note":"","data":["800D62E1 FFFF"],"options":null},"Player 2\\Super Max\\Speed":{"note":"","data":["800D62E2 FFFF"],"options":null},"Player 2\\Super Max\\Turning":{"note":"","data":["800D62E5 FFFF"],"options":null},"Rune Glifberg\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA92 00FF"],"options":null},"Rune Glifberg\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA94 00FF"],"options":null},"Rune Glifberg\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA8F 00FF"],"options":null},"Rune Glifberg\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA8C 00FF"],"options":null},"Tony Hawk\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA06 00FF"],"options":null},"Tony Hawk\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA08 00FF"],"options":null},"Tony Hawk\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA03 00FF"],"options":null},"Tony Hawk\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA00 00FF"],"options":null}},"E0B92B94-80E87CBD-C:50":{"Access All Nuke Pieces 1-6":{"note":"Enter the In-game inventory option, and press L Button","data":["D00FC701 0020","50000601 0000","802FC99C 0030"],"options":null},"Access In-Game Cheat Menu":{"note":"","data":["8112167C FFFF","8112167E FFFF"],"options":null}},"E0B92B94-B9A7E025-C:45":{"Access In-Game Cheat Menu":{"note":"","data":["8112167C FFFF","8112167E FFFF"],"options":null}},"E0C4F72F-769E1506-C:50":{"Have Mouse Card\\Night Tail":{"note":"","data":["800A2865 0001"],"options":null},"Have Mouse Card\\The Adventure Begins":{"note":"","data":["800A2864 0001"],"options":null},"Infinite Lives":{"note":"","data":["810A2886 0009"],"options":null},"Max Honey Pots":{"note":"","data":["810A288A 03E7"],"options":null}},"E13AE2DC-4FB65CE8-C:4A":{"Have All Elements":{"note":"","data":["8107A9F4 3232","8107A9F6 3232"],"options":null},"Infinite Health":{"note":"","data":["8107A9D4 01F4","8107A9D6 01F4"],"options":null},"Infinite Magic Points":{"note":"","data":["8107A9D8 01F4","8107A9DA 01F4"],"options":null},"Super Agility":{"note":"","data":["8107A9DE 01F4"],"options":null},"Super Defense":{"note":"","data":["8107A9DC 01F4"],"options":null}},"E185E291-4E50766D-C:45":{"Game Win Select\\Player 1":{"note":"","data":["801BBFA1 00??"],"options":{"0 Games Won":"00","1 Game Won":"01","2 Games Won":"02","3 Games Won":"03","4 Games Won":"04","5 Games Won":"05","For Game Set \u0026 Match":"06"}},"Game Win Select\\Player 2":{"note":"","data":["801BBFA2 00??"],"options":{"0 Games Won":"00","1 Game Won":"01","2 Games Won":"02","3 Games Won":"03","4 Games Won":"04","5 Games Won":"05","For Game Set \u0026 Match":"06"}},"Play As\\Player 1":{"note":"","data":["800BFFA5 00??"],"options":{"Amanda Coetzer":"02","Conchita Martinez":"04","Gustavo Kuerten":"07","Jana Novotna":"03","Jonas Bjorkman":"08","Leon Rodez":"05","Mark Philippoussis":"09","Michael Chang":"06","Randy Powell":"0A","Richard Krajicek":"0B","Vanessa Child":"01","Zoe Taylor":"00"}},"Play As\\Player 2":{"note":"","data":["800BFFA6 00??"],"options":{"Amanda Coetzer":"02","Conchita Martinez":"04","Gustavo Kuerten":"07","Jana Novotna":"03","Jonas Bjorkman":"08","Leon Rodez":"05","Mark Philippoussis":"09","Michael Chang":"06","Randy Powell":"0A","Richard Krajicek":"0B","Vanessa Child":"01","Zoe Taylor":"00"}},"Points Select\\Player 1":{"note":"","data":["801C7260 00??"],"options":{"0 Points":"00","15 Points":"15","30 Points":"30","40 Points":"40"}},"Points Select\\Player 2":{"note":"","data":["801C7261 00??"],"options":{"0 Points":"00","15 Points":"15","30 Points":"30","40 Points":"40"}}},"E1EF93F7-14908B0B-C:44":{"Max Score":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null},"Press L Button for Max Gauge\\Player 1":{"note":"","data":["D00B5661 0020","811D2602 0098"],"options":null},"Press L Button for Max Gauge\\Player 2":{"note":"","data":["D00B5667 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}}},"E2D37CF0-F57E4EAE-C:50":{"Away Team Scores":{"note":"","data":["8011A9BF 00??"],"options":{"0 Goal":"00","1 Goal":"01","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08"}},"Home Team Scores":{"note":"","data":["80119F2B 00??"],"options":{"0 Goal":"00","1 Goal":"01","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08"}},"Infinite player creation points":{"note":"","data":["801AC581 003C"],"options":null}},"E328B4FA-004A28E1-C:50":{"Always Have\\guide line on":{"note":"","data":["80056CCC 0082"],"options":null},"Next Bubble Select\\Player 1":{"note":"","data":["800ECE19 00??"],"options":{"Black":"08","Blue":"03","Green":"02","No Bubble":"00","Orange":"05","Purple":"06","Red":"01","White":"07","Yellow":"04"}},"Next Bubble Select\\Player 2":{"note":"","data":["800ECF09 00??"],"options":{"Black":"08","Blue":"03","Green":"02","No Bubble":"00","Orange":"05","Purple":"06","Red":"01","White":"07","Yellow":"04"}},"Play As Select\\Player 1":{"note":"","data":["800E3250 00??"],"options":{"1 of the two Ballons":"13","Blue Gnome":"12","Bubbloon":"00","Dragoon":"08","Gnome":"09","Jack":"06","Luna":"05","Marina":"03","Monkey":"10","Musashi":"04","Prettio":"02","SSB":"07","Twinkie":"01","Water under ballons":"14","furby? (looks like 2 balloons)":"11"}},"Play As Select\\Player 2":{"note":"","data":["800E3258 00??"],"options":{"1 of the two Ballons":"13","Blue Gnome":"12","Bubbloon":"00","Dragoon":"08","Gnome":"09","Jack":"06","Luna":"05","Marina":"03","Monkey":"10","Musashi":"04","Prettio":"02","SSB":"07","Twinkie":"01","Water under ballons":"14","furby? (looks like 2 balloons)":"11"}},"Pointer always active":{"note":"","data":["D0056FA0 0002","80056FA0 0082"],"options":null},"Press GS to Reset Player 2 score to 0":{"note":"","data":["8809D9C0 0000","8809D9C2 0000"],"options":null}},"E340A49C-74318D41-C:4A":{"Carry 20 Bombs At A Time":{"note":"","data":["800AEE0F 0014"],"options":null},"Have\\Pumped up Red Remote Bombs":{"note":"","data":["802AC653 0004"],"options":null},"Infinite\\Credits":{"note":"","data":["802AB85B 0009"],"options":null},"Infinite\\Energy\\Player 1":{"note":"","data":["800AEE07 0002"],"options":null},"Infinite\\Energy\\Player 2":{"note":"","data":["800AEECF 0002"],"options":null},"Infinite\\Energy\\Player 3":{"note":"","data":["800AEF97 0002"],"options":null},"Infinite\\Energy\\Player 4":{"note":"","data":["800AF05F 0002"],"options":null},"Infinite\\Gems":{"note":"","data":["802AB85F 0063"],"options":null},"Infinite\\Lives":{"note":"","data":["802AB857 0063"],"options":null},"Infinite\\Time":{"note":"","data":["802AB873 0001"],"options":null},"Invincible\\Player 1":{"note":"","data":["800AEE01 0001"],"options":null}},"E3AB4ED0-83040DD2-C:45":{"Away Team\\Infinite Time Outs":{"note":"","data":["80054ED6 0003"],"options":null},"Away Team\\No Time Outs Away":{"note":"","data":["80054ED6 0000"],"options":null},"Home Team\\Infinite Time Outs":{"note":"","data":["80054956 0003"],"options":null},"Home Team\\No Time Outs":{"note":"","data":["80054956 0000"],"options":null},"Infinite Creation Points":{"note":"","data":["8107B36E 03E7"],"options":null},"Infinite Time To Choose Play":{"note":"","data":["81081448 2800"],"options":null},"Max Acc":{"note":"","data":["8007526D 0064"],"options":null},"Max Cat":{"note":"","data":["8007527B 0063"],"options":null},"Max Clu":{"note":"","data":["80075275 0063"],"options":null},"Max End":{"note":"","data":["8007527D 0063"],"options":null},"Max Hnd":{"note":"","data":["80075279 0063"],"options":null},"Max Rcg":{"note":"","data":["80075273 0063"],"options":null},"Max Rng":{"note":"","data":["8007526F 0063"],"options":null},"Max Scr":{"note":"","data":["80075271 0063"],"options":null},"Max Spd":{"note":"","data":["80075277 0063"],"options":null}},"E3BD221D-3C0834D3-C:50":{"Have All Items\\What a night for a knight":{"note":"","data":["811BA010 0101","811BA012 0101","811BA014 0101","811BA016 0101","811BA018 0101"],"options":null},"Infinite Courage":{"note":"","data":["810BB096 0007"],"options":null}},"E3D6A795-2A1C5D3C-C:50":{"Big Options\\Big Gloves Mode":{"note":"","data":["800F407D 0001"],"options":null},"Big Options\\Big Head Mode":{"note":"","data":["800F407C 0001"],"options":null},"Empty Punch Meter\\Player 1":{"note":"","data":["8106B9E8 0000","8106B9EA 0000"],"options":null},"Empty Punch Meter\\Player 2":{"note":"","data":["8016BAF0 0000","8016BAF2 0000"],"options":null},"Full Punch Meter\\Player 1":{"note":"","data":["8106B9E8 0000","8106B9EA 0BB2"],"options":null},"Full Punch Meter\\Player 2":{"note":"","data":["8106B9E8 0000","8106B9EA 0BB2"],"options":null},"Have Full\\Power Bar":{"note":"","data":["810637AE 0064"],"options":null},"Have Full\\Speed Bar":{"note":"","data":["810637B2 0064"],"options":null},"Have Full\\Stamina Bar":{"note":"","data":["810637B6 0064"],"options":null},"Infinite Boxer Creation Points":{"note":"","data":["810637AA 0064"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["8106B974 42C8","8106B9DE 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["8106BAE4 42C8","8106BAE6 0000"],"options":null},"No Health\\Player 1":{"note":"","data":["8106B9DC 0000","8106B9DE 0000"],"options":null},"No Health\\Player 2":{"note":"","data":["8106BAE4 0000","8106BAE6 0000"],"options":null}},"E402430D-D2FCFC9D-C:45":{"Boss Cannot Move\\Dino":{"note":"","data":["811E0444 44A0"],"options":null},"Boss Cannot Move\\Octo":{"note":"","data":["811E0BAC 44A0"],"options":null},"Enable All Cheats":{"note":"Go into Options \u0026 then Magic Codes. Then Code list to turn off \u0026 on what you want.","data":["810E031C FFFF","810E031E FFFF"],"options":null},"Have All\\50 Bananas\\Ancient Lake":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3A1D 0032"],"options":null},"Have All\\50 Bananas\\Boulder Canyon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E693D 0032"],"options":null},"Have All\\50 Bananas\\Crescent Island":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E417D 0032"],"options":null},"Have All\\50 Bananas\\Darkmoon Caverns":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E645D 0032"],"options":null},"Have All\\50 Bananas\\Everfrost Peak":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E56AD 0032"],"options":null},"Have All\\50 Bananas\\Fossil Canyon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E6EBD 0032"],"options":null},"Have All\\50 Bananas\\Frosty Village":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E669D 0032"],"options":null},"Have All\\50 Bananas\\Greenwood Village":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E51FD 0032"],"options":null},"Have All\\50 Bananas\\Haunted Woods":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E516D 0032"],"options":null},"Have All\\50 Bananas\\Hot Top Volcano":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4D7D 0032"],"options":null},"Have All\\50 Bananas\\Jungle Falls":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4C1D 0032"],"options":null},"Have All\\50 Bananas\\Pirate Lagoon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E30AD 0032"],"options":null},"Have All\\50 Bananas\\Snowball Valley":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E514D 0032"],"options":null},"Have All\\50 Bananas\\Spacedust Alley":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E6C9D 0032"],"options":null},"Have All\\50 Bananas\\Spaceport Alpha":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E43BD 0032"],"options":null},"Have All\\50 Bananas\\Star City":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E5EDD 0032"],"options":null},"Have All\\50 Bananas\\Treasure Caves":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3E6D 0032"],"options":null},"Have All\\50 Bananas\\Walrus Cove":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E51CD 0032"],"options":null},"Have All\\50 Bananas\\Whale Bay":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E424D 0032"],"options":null},"Have All\\50 Bananas\\Windwill Plains":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801EA30D 0032"],"options":null},"Have All\\99 Balloons":{"note":"","data":["810E058A FFFF","801FD3DD 0063"],"options":null},"Have All\\Amulets":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FD1D6 FFFF"],"options":null},"Have All\\Keys":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FD1C8 FFFF"],"options":null},"Have All\\Levels Completely Finished":{"note":"","data":["50000904 0000","801FD2E7 00FF","801FD30F 00FF","801FD317 00FF","50000404 0000","801FD31F 00FF","801FD33F 00FF","50000804 0000","801FD343 00FF"],"options":null},"Have All\\Silver Coins\\Ancient Lake":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E3BFA 0008"],"options":null},"Have All\\Silver Coins\\Boulder Canyon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E6B1A 0008"],"options":null},"Have All\\Silver Coins\\Crescent Island":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E435A 0008"],"options":null},"Have All\\Silver Coins\\Everfrost Peak":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E588A 0008"],"options":null},"Have All\\Silver Coins\\Fossil Canyon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E709A 0008"],"options":null},"Have All\\Silver Coins\\Frosty Village":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E687A 0008"],"options":null},"Have All\\Silver Coins\\Greenwood Village":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E53DA 0008"],"options":null},"Have All\\Silver Coins\\Haunted Woods":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E534A 0008"],"options":null},"Have All\\Silver Coins\\Hot Top Volcano":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4F5A 0008"],"options":null},"Have All\\Silver Coins\\Jungle Falls":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E588A 0008"],"options":null},"Have All\\Silver Coins\\Pirate Lagoon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E328A 0008"],"options":null},"Have All\\Silver Coins\\Snowball Valley":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E532A 0008"],"options":null},"Have All\\Silver Coins\\Treasure Caves":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E404A 0008"],"options":null},"Have All\\Silver Coins\\Walrus Cove":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E53AA 0008"],"options":null},"Have All\\Silver Coins\\Whale Bay":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E442A 0008"],"options":null},"Have All\\Silver Coins\\Windmill Plains":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801EA4EA 0008"],"options":null},"Have All\\The pieces of the TT thing":{"note":"","data":["801FD1D6 0004"],"options":null},"Have All\\Trophies":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FC9DE FFFF"],"options":null},"Infinite\\Power Ups\\Ancient Lake":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E717B 0010"],"options":null},"Infinite\\Power Ups\\Boulder Canyon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E949B 0010"],"options":null},"Infinite\\Power Ups\\Crescent Island":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E78DB 0010"],"options":null},"Infinite\\Power Ups\\Darkmoon Caverns":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E9DFB 0010"],"options":null},"Infinite\\Power Ups\\Everfrost Peak":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E8E6B 0010"],"options":null},"Infinite\\Power Ups\\Fossil Canyon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801EA61B 0010"],"options":null},"Infinite\\Power Ups\\Frosty Village":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E9DF6 0010"],"options":null},"Infinite\\Power Ups\\Greenwood Village":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E895B 0010"],"options":null},"Infinite\\Power Ups\\Haunted Woods":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E88CB 0010"],"options":null},"Infinite\\Power Ups\\Hot Top Volcano":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E4ECB 0010"],"options":null},"Infinite\\Power Ups\\Jungle Falls":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E4D0B 0010"],"options":null},"Infinite\\Power Ups\\Pirate Lagoon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E5C06 0010"],"options":null},"Infinite\\Power Ups\\Snowball Valley":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E88AB 0010"],"options":null},"Infinite\\Power Ups\\Space Dust Alley":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E979B 0010"],"options":null},"Infinite\\Power Ups\\Spaceport Alpha":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E6EBB 0010"],"options":null},"Infinite\\Power Ups\\Starcity":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E963B 0010"],"options":null},"Infinite\\Power Ups\\Treasure Cove":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E75CB 0010"],"options":null},"Infinite\\Power Ups\\Walrus Cove":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E892B 0010"],"options":null},"Infinite\\Power Ups\\Whale Bay":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E6DAB 0010"],"options":null},"Infinite\\Power Ups\\Windmill Plains":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801ECE0B 0010"],"options":null}},"E436467A-82DE8F9B-C:45":{"Always Place 1st":{"note":"","data":["8012955F 0001"],"options":null},"Driver Modifier (Champsionship Mode)":{"note":"","data":["812CBEC6 00??"],"options":{"Billy Boat #11":"02","Buddy Lazier #91":"04","Buzz Calkins #12":"08","Davey Hamilton #9":"05","Eddie Cheever Jr.#51":"03","Greg Ray #2":"01","Jeff Ward #21":"10","John Hollansworth Jr. #42":"13","Johnny Unser #92":"0E","Kenny Brack #14":"09","Mark Dismore #28":"0C","Robbie Buyl #22":"0A","Robby McGehee #55":"12","Robby Unser #81":"0F","Roberto Guerrero #50":"0D","Sam Schmidt #99":"06","Scott Goodyear #4":"00","Scott Sharp #8":"07","Stephan Gregoire #7":"11","Tyce Carison #20":"0B"}},"Max Exp (Gold Cup - All Classes Unlocked)":{"note":"With the 'Max Exp' codes for the Gold Cup, start a new file and leave it and go back to it again.","data":["81033918 7FFF","8103391A FFFF"],"options":null},"Unlock\\Formula Cars Part 1":{"note":"","data":["810230F0 0000","810230F2 0000","810230F4 0000","810230F6 0000"],"options":null},"Unlock\\Gold Cup 1st Upgrade":{"note":"","data":["81023100 0000","81023102 0000"],"options":null},"Unlock\\Gold Cup 2nd Upgrade":{"note":"","data":["81023104 0000","81023106 0000"],"options":null},"Unlock\\Sprint Car Class":{"note":"","data":["810230EE 0000","810230EC 0000"],"options":null}},"E43C9765-05B1C1BE-C:4A":{"Max HP":{"note":"","data":["812D71F8 03E7"],"options":null},"Max MP":{"note":"","data":["812D71FA 03E7"],"options":null},"Max Money":{"note":"","data":["811A70E9 0001","811A70EA 869F"],"options":null}},"E4906679-9F243F05-C:50":{"Max Score":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null},"Press L Button for Max Gauge\\Player 1":{"note":"","data":["D00B4171 0020","811D2602 0098"],"options":null},"Press L Button for Max Gauge\\Player 2":{"note":"","data":["D00B4177 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}}},"E4B08007-A602FF33-C:50":{"Carrington Institute\\Have 255 targets destroyed":{"note":"","data":["810AD714 00FF"],"options":null},"Carrington Institute\\Have 999 points in Firing Range":{"note":"","data":["810AD712 03E7"],"options":null},"Carrington Institute\\Have Infinite time in Firing Range":{"note":"","data":["810AD70E 004D"],"options":null},"Have All\\Levels Complete \u0026 All Challenges":{"note":"Have All levels Complete on Solo Missions, \u0026 Acces all Challenges \u0026 CO-OP Levels","data":["50003C02 0000","800A27C1 0001","50001E1A 0000","80088A0D 0001","50001E1A 0000","80088A0E 0001","50001E1A 0000","80088A0F 0001","50001E1A 0000","80088A10 0001"],"options":null},"Have All\\Weapons\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["802037F0 0007","801EA7F0 0007","801D17F0 0007"],"options":null},"Have All\\Weapons\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80205460 0007","801EC460 0007","801D3460 0007"],"options":null},"Infinite\\Ammo\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80202F7F 00FF","801E9F7F 00FF","801D0F7F 00FF","802027DB 00FF","801E97DB 00FF","801D07DB 00FF"],"options":null},"Infinite\\Ammo\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80204BEF 00FF","801EBBEF 00FF","801D2BEF 00FF","8020444B 00FF","801EB44B 00FF","801D244B 00FF"],"options":null},"Infinite\\Health\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8120205C 3F80","811E905C 3F80","811D005C 3F80"],"options":null},"Infinite\\Health\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81203CCC 3F80","811EACCC 3F80","811D1CCC 3F80"],"options":null},"Infinite\\Shield\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81202070 3F80","811E9070 3F80","811D0070 3F80"],"options":null},"Infinite\\Shield\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81203CE0 3F80","811EACE0 3F80","811D1CE0 3F80"],"options":null},"Press B To Levitate\\Single \u0026 Co-Op\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D00980C4 0040","81202000 40F2","D00980C4 0040","80201FB3 0000","D00980C4 0040","811E9000 40F2","D00980C4 0040","801E8FB3 0000","D00980C4 0040","811D0000 40F2","D00980C4 0040","801CFFB3 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D1099FB6 4000","81203C70 40F2","D1099FB6 4000","81203C23 0000","D1099FB6 4000","811EAC70 40F2","D1099FB6 4000","811EAC23 0000","D1099FB6 4000","811D1C70 40F2","D1099FB6 4000","811D1C23 0000"],"options":null}},"E616B5BC-C9658B88-C:45":{"Have All\\Cups Select":{"note":"","data":["50002C02 0000","800CCE11 00??"],"options":{"Bronze Cup":"02","Gold Cup":"00","None (Default)":"04","Silver Cup":"01"}},"Have All\\Points":{"note":"","data":["810D8EE0 03E7"],"options":null},"Have All\\RB Medals":{"note":"","data":["810D8EF0 03E7"],"options":null},"Infinite\\Credits":{"note":"","data":["800BDEA5 0005"],"options":null},"Infinite\\Timer":{"note":"","data":["810D8F88 44E9"],"options":null},"Infinite\\Turbos":{"note":"To enable this just select On or Off and when you press Z you will use your Turbos accordantly. Warning you can only have Infinite if you have some turbo level to begin with","data":["D00F2C16 0020","800CCF91 00??"],"options":{"Off":"00","On":"08"}},"Laps To Race":{"note":"Here you can select how many laps you prefer.to race","data":["800C8809 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","7 Laps":"07","8 Laps":"08","9 Laps":"09","Laps":"06"}},"[Cheat Menu]":{"note":"Press Pause to access cheats.","data":["800CCF89 00FF","800CCF8A 00FF","800CCF8B 00FF"],"options":null},"[Press F9]\\Enable All Courses":{"note":"","data":["890CCDF2 0B00","890CCDF4 0B00","890CCDF6 0B00"],"options":null},"[Press F9]\\Extra Characters":{"note":"","data":["890C632F 01FF"],"options":null},"[Press F9]\\Progress 100%":{"note":"","data":["50000801 0000","880CCE00 0003","50000801 0000","880CCE01 00FF"],"options":null}},"E6419BC5-69011DE3-C:45":{"Always Have Retreat \u0026 Elem Pedra Opened":{"note":"Do not put this on until in-game or the game will freeze.","data":["D01A1C72 0000","811A1C72 0003"],"options":null},"Day Always 00":{"note":"","data":["811F106C 0000"],"options":null},"Finish All Levels":{"note":"","data":["81196A86 5454","81196A88 5140","81196A8A 4555","81196A8C 9514","81196A8E 5515"],"options":null},"Hour Always":{"note":"","data":["80196A2D 00??"],"options":{"(0 Hour - 24:00 PM - Midnight)":"00","(01:00 AM)":"01","(02:00 AM)":"02","(03:00 AM)":"03","(04:00 AM)":"04","(05:00 AM)":"05","(06:00 AM)":"06","(07:00 AM)":"07","(08:00 AM)":"08","(09:00 AM)":"09","(10:00 AM)":"0A","(11:00 AM)":"0B","(12:00 PM - Noon)":"0C","(13:00 - 1 PM)":"0D","(14:00 - 2 PM)":"0E","(15:00 - 3 PM)":"0F","(16:00 - 4 PM)":"10","(17:00 - 5 PM)":"11","(18:00 - 6 PM)":"12","(19:00 - 7 PM)":"13","(20:00 - 8 PM)":"14","(21:00 - 9 PM)":"15","(22:00 - 10 PM)":"16","(23:00 - 11 PM)":"17"}},"Infinite Goth":{"note":"","data":["81196A6E FFFF"],"options":null},"Magnus\\Infinite HP":{"note":"","data":["81193C10 03E7"],"options":null},"Magnus\\Level 99":{"note":"","data":["80193C0B 0063"],"options":null},"Magnus\\Max Agi":{"note":"","data":["81193C1C 03E7"],"options":null},"Magnus\\Max Dex":{"note":"","data":["81193C1E 03E7"],"options":null},"Magnus\\Max HP":{"note":"","data":["81193C0E 03E7"],"options":null},"Magnus\\Max Int":{"note":"","data":["81193C18 03E7"],"options":null},"Magnus\\Max Mem":{"note":"","data":["81193C1A 03E7"],"options":null},"Magnus\\Max Str":{"note":"","data":["81193C14 03E7"],"options":null},"Magnus\\Max Vit":{"note":"","data":["81193C16 03E7"],"options":null},"Max Goth":{"note":"","data":["81196A6C 0098","81196A6E 967F"],"options":null},"Open All Paths":{"note":"","data":["81196A80 01FF","81196A82 677F","81196A84 FCFF"],"options":null}},"E688A5B8-B14B3F18-C:50":{"Have All\\Boards":{"note":"","data":["81082B24 0003","81082B26 FFFF"],"options":null},"Have All\\Characters":{"note":"","data":["81082B18 07FF"],"options":null},"Have All\\Difficulties":{"note":"","data":["81082B10 0700"],"options":null},"Have All\\Tracks":{"note":"","data":["81082B1C BFFE"],"options":null},"Low Timer":{"note":"","data":["80082A04 0000","80182A06 0000"],"options":null},"Max\\50000 Stunt Points":{"note":"","data":["81082AD8 C350"],"options":null},"[Audio Fix]":{"note":"","data":["81051840 AD99"],"options":null}},"E68A000E-639166DD-C:50":{"Access All Remote Controls\\Red Remotes":{"note":"Opens Gate 4 And The Lions Mouth","data":["50000E01 0000","800C513E 0007"],"options":null},"All Silver \u0026 Gold Gold Remotes":{"note":"Opens Gate 3,2,1","data":["810C5164 0FFF","810C5166 FFFF","810C5168 01E0","810C516A 007F"],"options":null},"Fully Charged Gex":{"note":"Press L Button Once When On One Of The Specific Levels, For Circuit Central Levels Only","data":["D00AAAB9 0020","81163CDE 32FF"],"options":null},"Hover \u0026 Fly Mode":{"note":"Press And Hold L Button + A Button","data":["D10BED04 0020","8114ECA2 0010","D10BED04 0010"],"options":null},"Infinite Air Codes\\Pain In The Asteroids":{"note":"","data":["D00BED05 0004","8133CBEE 012B"],"options":null},"Infinite Air Codes\\Umpire Strikes Out":{"note":"","data":["D00BED05 0004","8136608E 012B"],"options":null},"Infinite Health":{"note":"","data":["800C50CB 0063"],"options":null},"Infinite Lives":{"note":"","data":["810C50C6 0063"],"options":null}},"E6A95A4F-BAD2EA23-C:45":{"Have\\Max Gold":{"note":"","data":["50000401 0000","80277335 00FF"],"options":null},"Have\\Max Total XP":{"note":"","data":["50000401 0000","80278BAD 00FF"],"options":null},"Have\\Max Total XP Remaning to Start":{"note":"This will give you 16777215 Total XP Remaning to start with and after your 1st batle will allow you to buy your Max Stats","data":["50000401 0000","80278BB1 00FF"],"options":null},"Infinite\\99 Health Potions":{"note":"Do Not put this cheat on until you have collected your 1st Health Potion from the 1st Cheat or you will not be able to get into the Sub menu and Continue the game.","data":["802785CB 0063"],"options":null},"Infinite\\Max Health":{"note":"","data":["80278B98 001E"],"options":null}},"E73C7C4F-AF93B838-C:4A":{"Flashing Invincible":{"note":"This cheat Makes you Flash But you cant be harmed,Once out of danger Turn the cheat off to stop the flashing.also do not put this on if you have already been hurt or you will stay on the floor.","data":["800AB5C7 000A"],"options":null},"Have\\Fire Bombs":{"note":"","data":["800AB59B 0003"],"options":null},"Have\\Kick Bombs Anytime":{"note":"","data":["800AB5A3 0003"],"options":null},"Have\\Max Fire Level":{"note":"","data":["800AB593 0003"],"options":null},"Infinite\\Bombs":{"note":"","data":["800AB5B8 0003"],"options":null},"Infinite\\Continue Time":{"note":"","data":["810B3B36 0090"],"options":null},"Infinite\\Health":{"note":"","data":["800AB5BF 0005"],"options":null},"Infinite\\Money":{"note":"","data":["810A9BB2 FFFF"],"options":null}},"E7D20193-C1158E93-C:50":{"A Few Extra Cars":{"note":"","data":["811270AA FFFF"],"options":null},"Access All Cars":{"note":"","data":["811270A4 FFFF","811270A6 FFFF"],"options":null},"Allways 1st":{"note":"","data":["8111B14A 0000"],"options":null},"Bonus Tracks":{"note":"","data":["811270AE FFFF"],"options":null},"Infinite Turbos":{"note":"","data":["8111B39C 0800"],"options":null},"Max Tournament Points":{"note":"","data":["811270B6 03E7"],"options":null},"Mirror Mode":{"note":"","data":["801270CE 0001"],"options":null},"Race At Night":{"note":"","data":["801270CF 0080"],"options":null}},"E86415A6-98395B53-C:50":{"Have Infinite\\99 Blue Ammo":{"note":"","data":["800CEA16 0063"],"options":null},"Have Infinite\\99 Blue Power (1UP)":{"note":"","data":["800CEA2A 0063"],"options":null},"Have Infinite\\99 Engery Pickups":{"note":"","data":["800CEA0C 0063"],"options":null},"Have Infinite\\99 Gas":{"note":"","data":["800CEA3E 0063"],"options":null},"Have Infinite\\99 Grenades":{"note":"","data":["800CEA34 003F"],"options":null},"Have Infinite\\99 Yellow Ammo":{"note":"","data":["800CEA20 0063"],"options":null},"Have\\All Magic":{"note":"","data":["800CEB48 0010","800CEB4D 0000","800CEB57 0001","800CEB61 0002","800CEB6B 0003","800CEB75 0005","800CEB7F 0006","800CEB89 0008","800CEB93 0009","800CEB9D 000B","800CEBA7 000E","800CEBB1 000F","800CEBBB 0010","800CEBC5 0011","800CEBCF 000A","800CEBD9 000C","800CEBE3 000D"],"options":null},"Have\\Magic On Level 4":{"note":"","data":["810C8CDD FFFF","810C8CDE FFFF","810C8CDF FFFF","810C8CE0 FFFF","810C8CE1 FFFF","810C8CE2 FFFF"],"options":null},"Have\\Max Armour Level":{"note":"","data":["800C8D00 0064"],"options":null},"Have\\Max Experience Level":{"note":"","data":["800C8CFC 00FF"],"options":null},"Have\\Max Spirit Level":{"note":"","data":["800C8D04 0064"],"options":null},"Have\\Max Weapon Level":{"note":"","data":["800C8D02 0064"],"options":null},"Have\\Weapons On Max Upgrade":{"note":"","data":["800C8CAC 0009","800C8CB4 0009","800C8CBC 0009","800C8CC4 0009"],"options":null},"Infinite Air Under Water":{"note":"","data":["800C8BE4 0069"],"options":null},"Infinite Max\\999 Lives":{"note":"","data":["810C8CF8 03E8"],"options":null},"Infinite Max\\Fire Ammo":{"note":"","data":["800C8CB3 0066"],"options":null},"Infinite Max\\Fusion Ammo":{"note":"","data":["800C8CC3 0066"],"options":null},"Infinite Max\\Health":{"note":"","data":["800C8AD9 0066"],"options":null},"Infinite Max\\Ionic Ammo":{"note":"","data":["800C8CBB 0066"],"options":null},"Infinite Max\\Light Ammo":{"note":"","data":["800C8CAB 0066"],"options":null},"Infinite Max\\Mana":{"note":"","data":["800C8CFF 0066"],"options":null},"Infinite Throwing Weapon Ammo":{"note":"","data":["800CF57D 0063"],"options":null},"Play As Select":{"note":"","data":["800FCEC5 00??"],"options":{"Ike Hawkings (Corporal)":"00","Julia Chase (Cartographer)":"02","Karma (The Ex-Deviant)":"03","Max Havok (Chief Enginer)":"04","Mr Bodybolt (7th Passenger)":"06","Solaar (Archbishop)":"05","Sophia Hawkings (Stowaway)":"01"}},"Press A For Bionic Jump":{"note":"This will make you jump to a great height","data":["D00C8BCA 0080","810C8AE8 ????"],"options":{"Max Jump":"0800","Medium Jump":"0250"}}},"E896092B-DC244D4E-C:45":{"Player 1\\Infinite Free Spins":{"note":"","data":["800B999B 0001"],"options":null},"Player 1\\Max Cash":{"note":"","data":["810B9990 FFFF"],"options":null},"Player 1\\No Cash":{"note":"","data":["810B9992 0000"],"options":null},"Player 2\\Infinite Free Spins":{"note":"","data":["800B9AAF 0001"],"options":null},"Player 2\\Max Cash":{"note":"","data":["810B9AA4 FFFF"],"options":null},"Player 2\\No Cash":{"note":"","data":["810B9AA6 0000"],"options":null},"Player 3\\Infinite Free Spins":{"note":"","data":["800B9BC3 0001"],"options":null},"Player 3\\Max Cash":{"note":"","data":["810B9BB8 FFFF"],"options":null},"Player 3\\No Cash":{"note":"","data":["810B9BB8 0000"],"options":null}},"E8C95AFC-35D121DA-C:45":{"99 Gems":{"note":"","data":["80305449 0063","80648FA9 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000302 0000","81305868 0063","50000304 0000","81305872 0063","5000020E 0000","81305882 0063","50000302 0000","816493C8 0063","50000304 0000","816493D2 0063","5000020E 0000","816493E2 0063","80648F65 0000","806493D1 0063"],"options":null},"Infinite\\Health":{"note":"","data":["80305446 0064","80648FA6 0064"],"options":null},"Infinite\\Lives":{"note":"","data":["80648FAB 0009"],"options":null},"Infinite\\Oxygen":{"note":"","data":["806495BD 0000"],"options":null}},"E8C95AFC-35D121DA-C:50":{"99 Gems":{"note":"","data":["80305449 0063","80648FA9 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000302 0000","81305868 0063","50000304 0000","81305872 0063","5000020E 0000","81305882 0063","50000302 0000","816493C8 0063","50000304 0000","816493D2 0063","5000020E 0000","816493E2 0063","80648F65 0000","806493D1 0063"],"options":null},"Infinite\\Health":{"note":"","data":["80305446 0064","80648FA6 0064"],"options":null},"Infinite\\Lives":{"note":"","data":["80648FAB 0009"],"options":null},"Infinite\\Oxygen":{"note":"","data":["806495BD 0000"],"options":null}},"E8E5B179-44AA30E8-C:45":{"Freeze Timer":{"note":"","data":["80163ABF 000A"],"options":null},"Infinite 99 Lives":{"note":"","data":["80163AC7 0063"],"options":null},"Infinite Lives (Retro Frogger)":{"note":"","data":["8025AC2F 0005"],"options":null}},"E8FC8EA1-9F738391-C:45":{"Always Hole In One":{"note":"","data":["8115E1D6 0000"],"options":null},"Big Head":{"note":"","data":["810AE840 401F"],"options":null},"Change Looks Of Liltiger":{"note":"","data":["800B0BC4 0011"],"options":null},"Character Unlock\\Bengal The Tiger":{"note":"","data":["800B0BC2 0010"],"options":null},"Character Unlock\\Bobby":{"note":"","data":["800B0BC6 0001"],"options":null},"Character Unlock\\Cindy":{"note":"","data":["800B0BBA 0001"],"options":null},"Character Unlock\\Festus":{"note":"","data":["800B0BD3 0001"],"options":null},"Character Unlock\\Kimmi":{"note":"","data":["800B0BBA 0010"],"options":null},"Character Unlock\\Mark":{"note":"","data":["800B0BC7 0012"],"options":null},"Character Unlock\\Marvin The Alien":{"note":"","data":["800B0BD7 0001"],"options":null},"Character Unlock\\Robert \u0026 Delvis":{"note":"","data":["800B0BCA 0011"],"options":null},"Character Unlock\\Starr":{"note":"","data":["800B0BCE 0010"],"options":null},"Character Unlock\\Traci (Leopard Costume)":{"note":"","data":["800B0BCE 0011"],"options":null},"Character Unlock\\Twfan \u0026 Eagamer":{"note":"","data":["800B0BBE 0011"],"options":null},"Inventory\\Max Accuracy \u0026 Skipper":{"note":"","data":["800B4410 00FF"],"options":null},"Inventory\\Max Distance \u0026 Wind Cutter":{"note":"","data":["800B4412 00FF"],"options":null},"Inventory\\Max Mystery":{"note":"","data":["800B4420 00F0"],"options":null},"Inventory\\Max No Bounce \u0026 Tee Up":{"note":"","data":["800B4411 00FF"],"options":null},"Inventory\\Max Spinner \u0026 Burrow":{"note":"","data":["800B4413 00FF"],"options":null}},"E9219533-13FBAFBD-C:45":{"Championship Mode\\Infinite Money":{"note":"","data":["810F81CA FFFF"],"options":null},"Championship Mode\\Max Dexterity":{"note":"","data":["810F81D8 447A","810F81DA 0000"],"options":null},"Championship Mode\\Max Endurance":{"note":"","data":["810F81D4 447A","810F81D6 0000"],"options":null},"Championship Mode\\Max Experience":{"note":"","data":["810F81DC 447A","810F81DE 0000"],"options":null},"Championship Mode\\Max Money":{"note":"","data":["810F81C8 7FFF","810F81CA FFFF"],"options":null},"Championship Mode\\Max Stamina":{"note":"","data":["810F81D0 447A","810F81D2 0000"],"options":null},"Championship Mode\\Max Strength":{"note":"","data":["810F81CC 447A","810F81CE 0000"],"options":null},"Championship Mode\\Top Rank":{"note":"","data":["810F81BA 000A"],"options":null},"Enable Extra Characters":{"note":"","data":["80101E6F 0003","80101E73 0003","80101E77 0003","80101E7B 0003","80101E7F 0003","80101E83 0003","80101E87 0003"],"options":null},"Infinite\\Health\\Player 1":{"note":"Do not use this with No Health","data":["810FF6B6 0064"],"options":null},"Infinite\\Health\\Player 2":{"note":"Do not use this with No Health","data":["81100316 0064"],"options":null},"Infinite\\Stamina\\Player 1":{"note":"Do not use this with No Stamina","data":["810FF6BA 0064"],"options":null},"Infinite\\Stamina\\Player 2":{"note":"Do not use this with No Stamina","data":["8110031A 0064"],"options":null},"Infinite\\Time":{"note":"","data":["810FE352 0E10"],"options":null},"Max RUMBLE\\Player 1":{"note":"Do not use this with Never RUMBLE","data":["810FF6C2 0090"],"options":null},"Max RUMBLE\\Player 2":{"note":"Do not use this with Never RUMBLE","data":["81100322 0090"],"options":null},"Never RUMBLE\\Player 1":{"note":"Do not use this with Max RUMBLE","data":["810FF6C2 0000"],"options":null},"Never RUMBLE\\Player 2":{"note":"Do not use this with Max RUMBLE","data":["81100322 0000"],"options":null},"No Health\\Player 1":{"note":"Do not use this with Infinite Health","data":["810FF6B6 0000"],"options":null},"No Health\\Player 2":{"note":"Do not use this with Infinite Health","data":["81100316 0000"],"options":null},"No Stamina\\Player 1":{"note":"Do not use this with Infinite Stamina","data":["810FF6BA 0000"],"options":null},"No Stamina\\Player 2":{"note":"Do not use this with Infinite Stamina","data":["8110031A 0000"],"options":null},"Win 1 Fight to Complete Arcade Mode":{"note":"","data":["80101F0B 000B"],"options":null}},"E97955C6-BC338D38-C:50":{"All Equipment Upgrades":{"note":"","data":["801E6BBD 0023","811E6C0A 201B","801E6B9C 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03DDFDB 0000","801E6B52 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801E6BD2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801E6BD3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801E6BD4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801E6BD5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801E6BD6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801E6BD7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801E6BC5 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801E6BCB 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801E6BD1 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Have Item Modifier":{"note":"","data":["801E6BD0 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\All Masks":{"note":"","data":["811E6BD8 3E39","811E6BDA 4745","811E6BDC 4032","811E6BDE 3A46","811E6BE0 3842","811E6BE2 4833","811E6BE4 3C3D","811E6BE6 373F","811E6BE8 3634","811E6BEA 4341","811E6BEC 3B44","811E6BEE 4935"],"options":null},"Have\\Bombchu":{"note":"","data":["801E6BC7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801E6BC6 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801E6BC9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801E6BC8 0008"],"options":null},"Have\\Fire Arrow":{"note":"","data":["801E6BC2 0002"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801E6BD0 0010"],"options":null},"Have\\Have\\Ocarina of Time":{"note":"","data":["801E6BC0 0000"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801E6BC1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801E6BCF 000F"],"options":null},"Have\\Ice Arrow":{"note":"","data":["801E6BC3 0003"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801E6BCE 000E"],"options":null},"Have\\Light Arrow":{"note":"","data":["801E6BC4 0004"],"options":null},"Have\\Magic Beans":{"note":"","data":["801E6BCA 000A"],"options":null},"Have\\Pictograph":{"note":"","data":["801E6BCD 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801E6BCC 000C"],"options":null},"Have\\QuestStatus Items":{"note":"","data":["801E6C0D 0005","811E6C0E F7CF"],"options":null},"Infinite\\Health":{"note":"","data":["811E6B86 03E7"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811E6B84 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"This is Infinite use of Bombs,Bombchus,Deku Sticks,Deku Nuts,Magic Beans,\u0026 Powder Kegs. But you must also put it's Have on to work.","data":["801E6BF1 0063","801E6BF6 0063","801E6BF7 0063","801E6BF8 0063","801E6BF9 0063","801E6BFA 0063","801E6BFC 0063","801E6BFB 0063","801E6BFD 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801E6B89 0060","811E6B90 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811E6B8A 03E7"],"options":null},"Play As":{"note":"","data":["801E6B70 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03DDFDB 0020","813F72B8 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You Have\\been warned.","data":["801E6B9C 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F2D56 0008","811E6B66 FFFD","D01F2D56 0004","811E6B66 0000","D01F2D56 0002","811E6B66 FFFE"],"options":null},"Use all C Buttons":{"note":"","data":["811EAA68 0000","811EAA6A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["803DDFDA 0000","803F6835 0001","813F683A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"EA06F8C3-07C2DEED-C:46":{"Character Select":{"note":"","data":["80075F52 00??"],"options":{"Big Head.":"04","Flame Grilled":"08","Normal":"00","Play as Deadwing.":"01"}},"Have All\\Cheats: Book of Shadows":{"note":"","data":["81075F4E 0FFF"],"options":null},"Have All\\Dark Souls Collected":{"note":"","data":["80075F49 0078"],"options":null},"Have All\\Gads \u0026 The Poign":{"note":"","data":["80030E57 000F"],"options":null},"Have All\\Items":{"note":"","data":["50001B20 0000","80030613 000B"],"options":null},"Have All\\L-Eclipser":{"note":"You will not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50000320 0000","80030973 000B"],"options":null},"Have All\\Levels Unlocked":{"note":"","data":["5000101C 0000","80030A0E 0001"],"options":null},"Infinite\\0.9mm Ammo":{"note":"","data":["81075B3A 0190"],"options":null},"Infinite\\Accumulators":{"note":"","data":["800306D7 0005"],"options":null},"Infinite\\Cadeaux'":{"note":"","data":["81075B36 03E7"],"options":null},"Infinite\\Max Health/Air/Shadow Charge \u0026 Voodoo Power":{"note":"","data":["50000604 0000","81075B16 2710"],"options":null},"Infinite\\Prisms":{"note":"","data":["80030957 0003"],"options":null},"Infinite\\Retractors":{"note":"","data":["800308B7 0003"],"options":null},"Infinite\\Shotgun Shells":{"note":"","data":["80075B2F 0063"],"options":null},"Infinite\\Violator Ammo":{"note":"","data":["81075B32 03E7"],"options":null},"Press L To Levitate":{"note":"Press the L-Button to rise and let go and press again in stages to come back down.","data":["D0059097 0020","80075578 0041"],"options":null},"[Ammo Always Displayed On Screen]":{"note":"","data":["50000408 0000","80075ACD 0007"],"options":null},"[Health Meter Displayed On Screen]":{"note":"","data":["81075B10 0000","81075B12 00FF"],"options":null}},"EA71056A-E4214847-C:45":{"Have All Cars":{"note":"","data":["50000D01 0000","80191298 001F"],"options":null},"Have All Characters \u0026 Levels":{"note":"","data":["81181572 01C0"],"options":null},"Level Select":{"note":"","data":["80190150 00??"],"options":{"Aircraft Graveyard":"04","Canyonlands":"09","Casino City":"08","Ghost Town":"05","Hoover Dam":"06","Oil Fields":"03","Sand Factory":"02","Secret Base":"01","Ski Resorts":"0A","Super Dreamland 64":"00","Valley Farms":"07"}},"Play As\\Player 1":{"note":"","data":["80186AE0 00??"],"options":{"\"Y\" The Alien":"0C","Beezwax":"09","Boogie":"08","Chassey Blue":"00","Convoy":"05","Dave":"04","Houston 3":"07","John Torque":"03","Loki":"06","Molo":"0A","Sheila":"02","Sid Burn":"0B","Slick Clyde":"01"}},"Play As\\Player 2":{"note":"","data":["80186AE1 00??"],"options":{"\"Y\" The Alien":"0C","Beezwax":"09","Boogie":"08","Chassey Blue":"00","Convoy":"05","Dave":"04","Houston 3":"07","John Torque":"03","Loki":"06","Molo":"0A","Sheila":"02","Sid Burn":"0B","Slick Clyde":"01"}}},"EAB7B429-BAC92C57-C:45":{"Have All Characters":{"note":"","data":["5000125C 0000","810EC938 0000","5000125C 0000","810EC93A 0003"],"options":null},"Infinite\\Money":{"note":"","data":["810EC932 FFFF"],"options":null},"Infinite\\Time":{"note":"","data":["810E7596 0E10"],"options":null},"Player 1\\Health":{"note":"","data":["810D9F78 0000","810D9F7A 00??"],"options":{"Infinite":"64","No Health":"00"}},"Player 1\\RUMBLE":{"note":"","data":["810D9F84 0000","810D9F86 00??"],"options":{"Max":"30","Never Rumble":"00"}},"Player 1\\Stamina":{"note":"","data":["810D9F7C 0000","810D9F7E 00??"],"options":{"Infinite":"64","No Stamina":"00"}},"Player 2\\Health":{"note":"","data":["810DA790 0000","810DA792 00??"],"options":{"Infinite":"64","No Health":"00"}},"Player 2\\RUMBLE":{"note":"","data":["810DA7A0 0000","810DA7A2 00??"],"options":{"Max":"30","Never Rumble":"00"}},"Player 2\\Stamina":{"note":"","data":["810DA794 0000","810DA796 00??"],"options":{"Infinite":"64","No Stamina":"00"}},"Sudden Death Mode\\Player 1":{"note":"","data":["D00E7596 03D7","810DAF78 0000","810D9F7A 0001"],"options":null},"Sudden Death Mode\\Player 2":{"note":"","data":["D00E7596 03D7","810DA790 0000","810DA792 0001"],"options":null}},"EAE6ACE2-020B4384-C:50":{"2X Secondary Weapons":{"note":"","data":["8104C62A 0080"],"options":null},"Access All Platinium Medals":{"note":"","data":["50001301 0000","8004C63D 0004"],"options":null},"Accuracy 100%":{"note":"","data":["8105C896 0064","8105C89A 0064"],"options":null},"Advanced Weapons,Shields \u0026 Extra Ships":{"note":"","data":["8104C636 00FF"],"options":null},"Always Pass Mission":{"note":"","data":["8105C88E 0001"],"options":null},"Bonus Collected":{"note":"Where Bonus Are Available","data":["8005C89F 0002"],"options":null},"Completion Time 0:00":{"note":"","data":["8105C892 0000"],"options":null},"Enemies Destroyed 756":{"note":"","data":["8005C89D 03E7"],"options":null},"Friendly Saves 756":{"note":"","data":["8005C89E 03E7"],"options":null},"Infinite Lives":{"note":"","data":["80067553 03E7"],"options":null},"Level Select":{"note":"","data":["8004C650 0013"],"options":null},"Lives Remaining 756":{"note":"","data":["8005C8A0 03E7"],"options":null}},"EB38F792-190EA246-C:45":{"Away Team\\Infinite Time-Outs":{"note":"","data":["800738E7 0003"],"options":null},"Away Team\\No Time-Outs":{"note":"","data":["800738E7 0000"],"options":null},"Have 99 Tokens":{"note":"","data":["8115F9F0 0063"],"options":null},"Have All\\Cards":{"note":"","data":["50007802 0000","8115F9F2 FFFF"],"options":null},"Have All\\Cheats":{"note":"","data":["50000402 0000","81070788 FFFF"],"options":null},"Have All\\Levels Completed":{"note":"","data":["50001902 0000","8115FB2C FFFF"],"options":null},"Have All\\Stadiums":{"note":"","data":["50000802 0000","81061850 FFFF"],"options":null},"Have All\\Teams":{"note":"","data":["50001102 0000","810C1628 FFFF"],"options":null},"Home Team\\Infinite Time-Outs":{"note":"","data":["80071617 0003"],"options":null},"Home Team\\No Time-Outs":{"note":"","data":["80071617 0000"],"options":null}},"EBA949DC-39BAECBD-C:49":{"Access All Levels":{"note":"","data":["8008A9D6 0001","8008A9EA 0001","8008AA12 0001","8008AA62 0001","8008AA76 0001","8008AA8A 0001","8008AA9E 0001","8008AAB2 0001","8008AAC6 0011","8008AADA 0021","8008AAEE 0001","8008AB16 0011","8008AB2A 0041","8008AB3E 0021","8008AB52 0081","8008AB66 0001","8008AB7A 0081","8008AB8E 0001","8008ABB6 0001","8008ABDE 0001","8008ABF2 0011","8008AC06 0021","8008AC56 0001","8008AF3A 0001","8008AF4E 0001","8008AF62 0001","8008AF76 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81094150 0063","81094152 0063","81094154 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A9297 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810866C2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810864C4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80094305 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A92B5 00??","800A92C5 00??","800A92D5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"EBEEA8DB-F2ECB23C-C:45":{"Infinite Shot Clock":{"note":"","data":["801378DF 0016"],"options":null},"Infinite Turbo\\Team 1\\Player 1":{"note":"","data":["8115B512 FF00"],"options":null},"Infinite Turbo\\Team 1\\Player 2":{"note":"","data":["8115B516 FF00"],"options":null},"Infinite Turbo\\Team 2\\Player 1":{"note":"","data":["8115B50A FF00"],"options":null},"Infinite Turbo\\Team 2\\Player 2":{"note":"","data":["8115B50E FF00"],"options":null},"Infinite Violation Clock":{"note":"","data":["8013783B 005D"],"options":null},"Team 1 Score Select":{"note":"","data":["80137117 00??"],"options":{"00":"00","150":"96"}},"Team 2 Score Select":{"note":"","data":["80137113 00??"],"options":{"00":"00","150":"96"}}},"EBFE2397-FF74DA34-C:45":{"Always Have Rapid Shot":{"note":"This is a constant fire without a break as long as you keep pressing A","data":["800B51AB 0009"],"options":null},"Infinite\\Lives":{"note":"","data":["800B51DD 0063"],"options":null},"Infinite\\Points":{"note":"","data":["810B51E2 FFFF"],"options":null},"Infinite\\Shields":{"note":"","data":["810B51B6 0001"],"options":null},"Secondary Weapon Select":{"note":"B Button Weapon infinite ammo","data":["800B519F 00??"],"options":{"Diagonal Burst":"20","Horizontal Left":"0C","Horizontal Right":"0D","Swarm Missiles":"1A","Vertical Burst":"06"}},"[Unlock All Modes}":{"note":"Enable this as so as you load the game.This Unlocks Classic and Maniacle Mode. To get to Classic Mode you pr ess Right on Player 1. To get to Maniacle Mode, go to Options and press Left on Normal Mode. This can be disabled once saved to mempak.","data":["80070217 0003"],"options":null}},"EC0F690D-32A7438C-C:4A":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C18E2 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803A7DAF 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["8036D1C7 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","80201035 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","801DCB95 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","801FB505 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","801EE8ED 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","80201165 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","801D89FD 0001"],"options":null}},"EC417312-EB31DE5F-C:4A":{"All Equipment Upgrades":{"note":"","data":["801EF4CD 0023","811EF51A 201B"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D01FB9E1 0000","801EF462 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Have All\\Masks":{"note":"","data":["801EF4E8 005A","801EF4E9 0055","801EF4EA 0063","801EF4EB 0061","801EF4EC 005C","801EF4ED 004E","801EF4EE 0056","801EF4EF 0062","801EF4F0 0054","801EF4F1 005E","801EF4F2 0064","801EF4F3 004F","801EF4F4 0058","801EF4F5 0059","801EF4F6 0053","801EF4F7 005B","801EF4F8 0052","801EF4F9 0050","801EF4FA 005F","801EF4FB 005D","801EF4FC 0057","801EF4FD 0060","801EF4FE 0065","801EF4FF 0051"],"options":null},"Have All\\Quest Status Items":{"note":"","data":["801EF51D 0005","811EF51E F7CF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801EF4D2 0002"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801EF4D3 0003"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801EF4D4 0004"],"options":null},"Have\\Bombchu":{"note":"","data":["801EF4D7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801EF4D6 0006"],"options":null},"Have\\Bottle Modifier\\1":{"note":"","data":["801EF4E2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\2":{"note":"","data":["801EF4E3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\3":{"note":"","data":["801EF4E4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\4":{"note":"","data":["801EF4E5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\5":{"note":"","data":["801EF4E6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\6":{"note":"","data":["801EF4E7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Deku Nuts":{"note":"","data":["801EF4D9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801EF4D8 0008"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801EF4E0 0010"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801EF4D1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801EF4DF 000F"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801EF4DE 000E"],"options":null},"Have\\Magic Beans":{"note":"","data":["801EF4DA 000A"],"options":null},"Have\\Ocarina of Time":{"note":"","data":["801EF4D0 0000"],"options":null},"Have\\Pictograph":{"note":"","data":["801EF4DD 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801EF4DC 000C"],"options":null},"Infinite\\Arrows":{"note":"","data":["801EF501 0063"],"options":null},"Infinite\\Bombchus":{"note":"","data":["801EF507 0063"],"options":null},"Infinite\\Bombs":{"note":"","data":["801EF506 0063"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801EF509 0063"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801EF508 0063"],"options":null},"Infinite\\Health":{"note":"","data":["811EF496 0140"],"options":null},"Infinite\\Hearts Options":{"note":"","data":["811EF494 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Magic Beans":{"note":"","data":["801EF50A 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801EF499 0060","811EF4A0 0101"],"options":null},"Infinite\\Powder Kegs":{"note":"","data":["801EF50C 0063"],"options":null},"Infinite\\Rupees":{"note":"","data":["811EF49A 03E7"],"options":null},"Play As":{"note":"","data":["801EF480 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03E6D0B 0020","81400008 40CB"],"options":null},"Replace Sword With":{"note":"","data":["801EF4AC 00??"],"options":{"Deity Link's Sword":"10","Fire Arrow w/ Bow":"02","Hero's Bow":"00","Ice Arrow w/ Bow":"03","Light Arrow w/ Bow":"04"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01FBA40 0008","811EF476 FFFD","D01FBA40 0004","811EF476 0000","D01FBA40 0002","811EF476 FFFE"],"options":null},"Warp Modifier":{"note":"Put this code on and press the start button and it will now take where you wanted to go, turn it back off after you have got there.","data":["D05EC55A 0000","803FF545 0001","813FF54A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"EC58EABF-AD7C7169-C:45":{"Chunky\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FCB0C 0064"],"options":null},"Chunky\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FCB16 0064"],"options":null},"Chunky\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FCB14 0064"],"options":null},"Chunky\\All Golden Bananas\\DK Isle":{"note":"","data":["817FCB18 0064"],"options":null},"Chunky\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FCB0E 0064"],"options":null},"Chunky\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FCB12 0064"],"options":null},"Chunky\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FCB10 0064"],"options":null},"Chunky\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FCB0A 0064"],"options":null},"Chunky\\Infinite Coins":{"note":"","data":["817FCACE 03E7"],"options":null},"Chunky\\Infinite Musical Instrument":{"note":"","data":["817FCAD0 000A"],"options":null},"Diddy\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC9F2 0064"],"options":null},"Diddy\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC9FC 0064"],"options":null},"Diddy\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC9FA 0064"],"options":null},"Diddy\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC9FE 0064"],"options":null},"Diddy\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC9F4 0064"],"options":null},"Diddy\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FC9F8 0064"],"options":null},"Diddy\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC9F6 0064"],"options":null},"Diddy\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC9F0 0064"],"options":null},"Diddy\\Infinite Coins":{"note":"","data":["817FC9B4 03E7"],"options":null},"Diddy\\Infinite Musical Instrument":{"note":"","data":["817FC9B6 000A"],"options":null},"Donkey Kong\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC994 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC99E 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC99C 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC9A0 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC996 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC998 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC992 03E7"],"options":null},"Donkey Kong\\Has Moves":{"note":"","data":["817FC950 0103"],"options":null},"Donkey Kong\\Have Weapon":{"note":"","data":["817FC952 0103"],"options":null},"Donkey Kong\\Infinite Ammo":{"note":"","data":["807FCC45 0096"],"options":null},"Donkey Kong\\Infinite Bananas\\Angry Aztec":{"note":"","data":["817FC95C 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Creepy Castle":{"note":"","data":["817FC966 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Crystal Caves":{"note":"","data":["817FC964 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\FactoryLevel":{"note":"","data":["817FC95E 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Fungi Forest":{"note":"","data":["817FC962 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Galleon Level":{"note":"","data":["817FC9BE 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Jungle Japes":{"note":"","data":["817FC95A 03E7"],"options":null},"Donkey Kong\\Infinite Coins":{"note":"","data":["817FC956 03E7"],"options":null},"Donkey Kong\\Infinite Musical Instrument":{"note":"","data":["817FC954 0103","817FC958 00FF"],"options":null},"Free Pass (Access All Areas)":{"note":"This is exactly what it says, You can walk through Any Locked Door,Gate, Or Area. Have Fun.","data":["8066D226 0001","8066D321 0001"],"options":null},"Infinite\\Camera Film":{"note":"","data":["807FCC49 0005"],"options":null},"Infinite\\Crystal Coconuts":{"note":"","data":["807FCB87 0096"],"options":null},"Infinite\\Health":{"note":"","data":["817FCC4C 041F"],"options":null},"Infinite\\Orange Bombs":{"note":"","data":["807FCC41 0096"],"options":null},"Lanky\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FCA50 0064"],"options":null},"Lanky\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FCA5A 0064"],"options":null},"Lanky\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FCA58 0064"],"options":null},"Lanky\\All Golden Bananas\\DK Isle":{"note":"","data":["817FCA5C 0064"],"options":null},"Lanky\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FCA52 0064"],"options":null},"Lanky\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FCA56 0064"],"options":null},"Lanky\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FCA54 0064"],"options":null},"Lanky\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FCA4E 0064"],"options":null},"Lanky\\Infinite Coins":{"note":"","data":["817FCA12 03E7"],"options":null},"Lanky\\Infinite Musical Instrument":{"note":"","data":["817FCA14 000A"],"options":null},"Tiny\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FCAAE 0064"],"options":null},"Tiny\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FCAA8 0064"],"options":null},"Tiny\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FCAB6 0064"],"options":null},"Tiny\\All Golden Bananas\\DK Isle":{"note":"","data":["817FCABA 0064"],"options":null},"Tiny\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FCAB0 0064"],"options":null},"Tiny\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FCAB4 0064"],"options":null},"Tiny\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FCAB2 0064"],"options":null},"Tiny\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FCAAC 0064"],"options":null},"Tiny\\Infinite Coins":{"note":"","data":["817FCA70 03E7"],"options":null},"Tiny\\Infinite Musical Instrument":{"note":"","data":["817FCA72 000A"],"options":null}},"EC7011B7-7616D72B-C:45":{"Always Have Wallet Size":{"note":"","data":["8011A672 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C84B5 0010","8111B936 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011B4B9 00FF","8011B92F 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C84B5 0000","8011B9E3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest 01).","data":["80025614 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011A656 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011A657 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011A658 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011A659 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023E80F 0020","8023E815 0033"],"options":null},"Dark Link\\Play As Dark Link":{"note":"","data":["D01C84B5 0020","811DAB60 801E","D01C84B5 0020","811F2C24 801D","D01C84B5 0020","811F2C26 AA30","D01C84B5 0020","811CA0E4 801E","D01C84B5 0020","811CA0E6 4B60","D01C84B5 0020","811E4B60 0000","D01C84B5 0020","811E4B62 02FF","D01C84B5 0020","811DAA30 0033","D01C84B5 0020","811DAA32 0901","D01C84B5 0020","811DAB62 27E0","D01C84B5 0020","811E4C90 8009","D01C84B5 0020","811E4C92 7740","D01C84B5 0020","811C8710 801E","D01C84B5 0020","811C8712 4B60"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F2208 0005","801EEC88 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["8011A672 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011A673 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011A671 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A66C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A674 30FF","8111A676 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011A648 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011A64E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011A654 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011A64C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011A646 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011A650 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011A645 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011A644 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011A647 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011A64A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011A64D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011A651 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011A652 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011A649 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011A64F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011A655 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011A653 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011A64B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011A65F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011A678 0007","8011A679 0007","8011A67A 0007","8011A67B 0007","8011A67C 0007","8011A67D 0007","8011A67E 0007","8011A67F 0007","8011A680 0007","8011A681 0007","8011A682 0007","8011A68F 0009","8011A690 0009","8011A691 0009","8011A692 0009","8011A693 0009","8011A699 0009","8011A69C 0009","8011A697 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011A664 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011A65E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011A65D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011A662 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011A65C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111A600 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011A609 0008","8011A60A 0001","8011A60C 0001","8011A603 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011A66A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111B99C 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011B9A5 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C84B5 0020","811DAA90 40CB","D01C84B5 0000","811DB2B2 000D","8011A640 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011A69F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011A6A1 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111A5FE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111B998 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L+R For FMV Select":{"note":"Hold down `L+R' after the Nintendo logo is spinning to see your favourite FMV","data":["D01C84B5 0030","8111A5D2 00A0","D01C84B5 0030","8111A5DA ????"],"options":{"Ending":"FFF8","Fire FMV":"FFF5","Ganondorf FMV":"FFF6","More Triforce FMV":"FFF7","Planet Making FMV":"FFF4","Triforce FMV":"FFF2","fire FMV":"FFF1"}},"Press L\\For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C84B5 0020","811DB2B2 000D"],"options":null},"Press L\\To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C84B5 0020","811DAA90 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C84B5 0010","8011A5D7 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111A5DC ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011A65A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011A65B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011A640 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011A60E 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111B7F2 0000","8111B7F4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"EC7011B7-7616D72B-C:4A":{"Always Have Wallet Size":{"note":"","data":["8011A672 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C84B5 0010","8111B936 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011B4B9 00FF","8011B92F 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C84B5 0000","8011B9E3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest 01).","data":["80025614 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011A656 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011A657 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011A658 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011A659 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801D8BCA 0006","801F2208 0001","801EEC88 0001"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.If you Use Black Gauntlets,They are as strong as the Golden Gauntlets. This code also gives you the Silver Scale and the Golden Scale and unlimited rupees.","data":["8011A672 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011A673 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011A671 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A66C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A674 30FF","8111A676 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011A648 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011A64E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011A654 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011A64C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011A646 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011A650 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011A645 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011A644 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011A647 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011A64A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011A64D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011A651 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011A652 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011A649 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011A64F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011A655 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011A653 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011A64B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011A65F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011A678 0007","8011A679 0007","8011A67A 0007","8011A67B 0007","8011A67C 0007","8011A67D 0007","8011A67E 0007","8011A67F 0007","8011A680 0007","8011A681 0007","8011A682 0007","8011A68F 0009","8011A690 0009","8011A691 0009","8011A692 0009","8011A693 0009","8011A699 0009","8011A69C 0009","8011A697 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011A664 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011A65E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011A65D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011A662 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011A65C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111A600 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011A609 0008","8011A60A 0001","8011A60C 0001","8011A603 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011A66A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111B99C 0001"],"options":null},"Infinite\\Timers\\All other Timers":{"note":"This cheat works on all Race Timers.Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011B9A5 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C84B5 0020","811DAA90 40CB","D01C84B5 0000","811DB2B2 000D","8011A640 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011A69F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011A6A1 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111A5FE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111B998 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C84B5 0020","811DB2B2 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C84B5 0020","811DAA90 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C84B5 0010","8011A5D7 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111A5DC ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011A65A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011A65B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011A640 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011A60E 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111B7F2 0000","8111B7F4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"ED98957E-8242DCAC-C:45":{"All Bosses 1 Hit Deaths":{"note":"","data":["811BE482 0000"],"options":null},"Enable\\Max Power Mode":{"note":"","data":["8015D417 0001"],"options":null},"Flashlight Mod":{"note":"","data":["80179448 00??"],"options":{"Off":"00","On":"01"}},"Have All\\Weapons,Items \u0026 Infinite Ammo\\Player 1":{"note":"","data":["8017AA9F 001E","8017AAB3 0008","8017AAB7 0009","801587C4 0009","8015D417 0001","801587C0 000C","801587C1 0060","801587C3 0001","50000601 0000","801587C5 0001","801587CB 0004","801587CD 000C"],"options":null},"Have Trial Mode Unlocked":{"note":"","data":["8110DCEE 0004"],"options":null},"Have\\All Characters In Multi":{"note":"","data":["8115D412 FFFF","8115D410 0003","8015D411 0003"],"options":null},"Infinite Health":{"note":"","data":["8017AABB 0064"],"options":null},"Start with Weapon\\Player 1":{"note":"","data":["8017AAA8 00??"],"options":{"Cool Rocket Launcher With Infinite Ammo":"09","HandGun":"00","Invisible Gun 1 With Infinite Ammo":"06","Invisible Gun 2 With Infinite Ammo":"07","M16 With Infinite Ammo":"04","Machinegun":"01","New Cooler Handgun":"05","Odd Inviso ShotGun With Infinite Ammo":"08","Rocket Launcher":"03","Shotgun":"02","Silenced Handgun":"14"}},"Time is Always 00:00:00":{"note":"","data":["8110DD62 0000"],"options":null}},"EDD6E031-68136013-C:45":{"Always Place 1st":{"note":"","data":["80112589 0000"],"options":null},"Best Points\\In Stunt Mode\\Player 1":{"note":"","data":["8010C068 00FF"],"options":null},"Best Points\\In Stunt Mode\\Player 2":{"note":"","data":["8010C069 00FF"],"options":null},"Car Select\\Player 1":{"note":"","data":["803CB362 00??"],"options":{"4x4":"0F","Bandit":"05","Compact":"01","Concept":"0B","Coupe":"06","Cruiser":"0D","Exotic":"07","Formula":"12","Hot Rod":"11","Mobster":"03","Mtn Dew":"15","Muscle Car":"02","Pickup":"00","Prototype":"13","Rocket":"14","Sedan":"04","Sportster":"09","Stallion":"0E","Subcompact":"0A","Taxi":"10","Van":"08"}},"Car Select\\Player 2":{"note":"","data":["803CB363 00??"],"options":{"4x4":"0F","Bandit":"05","Compact":"01","Concept":"0B","Coupe":"06","Cruiser":"0D","Exotic":"07","Formula":"12","Hot Rod":"11","Mobster":"03","Mtn Dew":"15","Muscle Car":"02","Pickup":"00","Prototype":"13","Rocket":"14","Sedan":"04","Sportster":"09","Stallion":"0E","Subcompact":"0A","Taxi":"10","Van":"08"}},"Cruiser Front Tire Size\\Player 1":{"note":"","data":["800C0AF9 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Cruiser Rear Tire Size\\Player 1":{"note":"","data":["800C0C01 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Formula Front Tire Size\\Player 1":{"note":"","data":["800C0B0D 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Formula Rear Tire Size\\Player 1":{"note":"","data":["800C0C15 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Front Pickup Tire Size\\Player 1":{"note":"","data":["800C0AC5 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Have All Keys Found\\Alcatraz\\Normal":{"note":"","data":["810C1DC4 FFFF"],"options":null},"Have All Keys Found\\Hawaii\\Normal":{"note":"","data":["810C1DC0 FFFF"],"options":null},"Have All Keys Found\\Las Vegas Normal":{"note":"","data":["810C1DBC FFFF"],"options":null},"Have All Keys Found\\Los Angeles\\Normal":{"note":"","data":["810C1DC6 FFFF"],"options":null},"Have All Keys Found\\New York-Downtown\\Normal":{"note":"","data":["810C1DBE FFFF"],"options":null},"Have All Keys Found\\New York-Uptown\\Normal":{"note":"","data":["810C1DC2 FFFF"],"options":null},"Have All Keys Found\\Seattle\\Normal":{"note":"","data":["810C1DC8 FFFF"],"options":null},"Have\\All Keys \u0026 Cans\\Midway Track":{"note":"","data":["810C1DD0 FFFF"],"options":null},"Have\\All Keys \u0026 Cans\\Stunt Track":{"note":"","data":["810C1DD2 FFFF"],"options":null},"Have\\Extra Cars":{"note":"","data":["50000902 0000","810C1DBC FFFF"],"options":null},"Have\\Game Timer Off":{"note":"","data":["800D9E88 0001"],"options":null},"Have\\Midway Track":{"note":"","data":["800E7D19 0001"],"options":null},"Have\\Stunts All Tracks":{"note":"","data":["8010C200 0001"],"options":null},"Hot Rod Front Tire Size\\Player 1":{"note":"","data":["800C0B09 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Hot Rod Rear Tire Size\\Player 1":{"note":"","data":["800C0C11 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Misc\\Auto Abort Disable":{"note":"","data":["8010C168 0001"],"options":null},"Misc\\Brakes Off":{"note":"","data":["80125C64 0001"],"options":null},"Misc\\Car Collisions Off":{"note":"","data":["8011249A 0001"],"options":null},"Misc\\Car Mines On":{"note":"","data":["8010C167 0001"],"options":null},"Misc\\Cone Mines On":{"note":"","data":["8010C166 0001"],"options":null},"Misc\\Damage Off":{"note":"","data":["8011CDB0 0001"],"options":null},"Misc\\Difficulty Mod":{"note":"","data":["8010C211 00??"],"options":{"Easy":"01","Extremely Hard":"05","Hard":"03","Medium":"02","Very Easy":"00","Very Hard":"04"}},"Misc\\Drones In Race":{"note":"","data":["800D5761 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07"}},"Misc\\Have All Cars In Pipe":{"note":"","data":["810C1DCE FFFF"],"options":null},"Misc\\Heavy Gravity":{"note":"","data":["800E7D22 0002"],"options":null},"Misc\\Heavy Mass":{"note":"","data":["8010C179 0001"],"options":null},"Misc\\Inside-Out Car On":{"note":"","data":["801174E0 0001"],"options":null},"Misc\\Invincible":{"note":"","data":["80119634 0001"],"options":null},"Misc\\Invisible Cars":{"note":"","data":["8010C170 0001"],"options":null},"Misc\\Invisible Tracks":{"note":"","data":["8010C178 0001"],"options":null},"Misc\\Jovian Gravity":{"note":"","data":["800E7D22 0003"],"options":null},"Misc\\Killer Rats On":{"note":"","data":["8010C17C 0001"],"options":null},"Misc\\Laps to Race":{"note":"","data":["8010C0E3 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Misc\\Large Frame":{"note":"","data":["8010C43C 0003"],"options":null},"Misc\\Levitation":{"note":"","data":["8010C254 0001"],"options":null},"Misc\\Light Gravity":{"note":"","data":["800E7D22 0000"],"options":null},"Misc\\Massive Mass":{"note":"","data":["8010C179 0002"],"options":null},"Misc\\New York Cabs":{"note":"","data":["800D9E89 0001"],"options":null},"Misc\\Resurrect In Place":{"note":"","data":["8010C210 0001"],"options":null},"Misc\\Suicide Mode Humans On":{"note":"","data":["80119628 0002"],"options":null},"Misc\\Suicide Mode On":{"note":"","data":["80119628 0001"],"options":null},"Misc\\Super Speed":{"note":"","data":["80111950 0001"],"options":null},"Misc\\Super Tires":{"note":"","data":["8010D3A6 0002"],"options":null},"Misc\\Upside Down Mode":{"note":"","data":["800D0171 0001"],"options":null},"Misc\\Your Car Is Invisible":{"note":"","data":["801127A1 0001"],"options":null},"Mt. Dew Front Tire Size\\Player 1":{"note":"","data":["800C0B19 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Mt. Dew Rear Tire Size\\Player 1":{"note":"","data":["800C0C21 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Pickup Front Tire Size\\Player 2":{"note":"","data":["800C0B1D 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Press GS Activate Cheat Menu":{"note":"","data":["880C2132 0001"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D00D0193 0010","810F58DC 44CB","D00D0193 0010","810F5938 44CB"],"options":null},"Press R to Shrink Car":{"note":"","data":["D00D0193 0010","8010C43C 0001"],"options":null},"Prototype Front Tire Size\\Player 1":{"note":"","data":["800C0B11 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Prototype Rear Tire Size\\Player 1":{"note":"","data":["800C0C19 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Rear Pickup Tire Size\\Player 1":{"note":"","data":["800C0BCD 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Rear Tire Size\\Player 2":{"note":"","data":["800C0C25 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Rocket Front Tire Size\\Player 1":{"note":"","data":["800C0B15 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Rocket Rear Tire Size\\Player 1":{"note":"","data":["800C0C1D 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Total Points\\In Stunt Mode\\Player 1":{"note":"","data":["8010C075 00FF"],"options":null},"Total Points\\In Stunt Mode\\Player 2":{"note":"","data":["8010C077 00FF"],"options":null},"Track Modifier":{"note":"","data":["8010C3F0 00??"],"options":{"Alcatraz":"04","Crash":"08","Half Pipe":"07","Hawaii":"02","Las Vegas":"00","Los Angeles":"05","Midway":"0A","New York Downtown":"01","New York Uptown":"03","Pipe":"09","Seattle":"06","Stunt":"0B"}},"Unlock All Cheats":{"note":"","data":["50000E02 0000","810C20E8 0101"],"options":null},"Van Front Tire Size\\Player 1":{"note":"","data":["800C0AE5 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Van Rear Tire Size\\Player 1":{"note":"","data":["800C0BED 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}}},"EDF419A8-BF1904CC-C:45":{"Access All\\Cars":{"note":"","data":["8002CFF7 000B"],"options":null},"Access All\\Difficulties":{"note":"","data":["8002CFFB 0004"],"options":null},"Access All\\Multiplayer Levels":{"note":"","data":["50000901 0000","8002D000 0001"],"options":null},"Access All\\Tracks":{"note":"","data":["8002CFF3 0006"],"options":null},"Access In-Game Cheats":{"note":"","data":["50001301 0000","8002D008 0001"],"options":null},"Damage Select":{"note":"","data":["8002CD93 00??"],"options":{"Double":"02","Half":"01","Normal":"00","Triple":"03"}},"Health Select":{"note":"","data":["8002CD7F 00??"],"options":{"Bad Only":"02","Good Only":"01","Normal":"00","Off":"03"}},"Infinite Continues":{"note":"","data":["8002CC57 0064"],"options":null},"Low Timer":{"note":"","data":["81025DD4 1040"],"options":null},"Power-Up Select":{"note":"","data":["8002CD7B 00??"],"options":{"?":"05","Health":"06","Invincible":"07","Mines":"01","Nitros":"04","Normal":"00","Off":"08","Rockets":"02","Stealer":"03"}},"Radar":{"note":"","data":["8002CD8F 00??"],"options":{"Off":"01","On":"00"}},"Speed units\\Kph or Mph":{"note":"","data":["81025E68 ????"],"options":{"Kph":"0100","Mph":"0001"}},"View Mode Select?":{"note":"","data":["8002CD8B 00??"],"options":{"Fisheye":"03","Flip":"02","Fog":"01","Normal":"00"}},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\01 Coventry Cove":{"note":"","data":["80363DD3 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\02 Mount Mayhem":{"note":"","data":["80351E9B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\03 Inferno Isle":{"note":"","data":["80364633 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\04 Sunset Sands":{"note":"","data":["8033C91B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\05 Metro Madness":{"note":"","data":["8035E61B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\06 Wicked Woods":{"note":"","data":["80357F33 0064"],"options":null}},"EE4A0E33-8FD588C9-C:50":{"Always Have\\99 points":{"note":"","data":["80161EC1 0063"],"options":null},"Always first position":{"note":"","data":["801608D8 0001"],"options":null},"Only race one lap":{"note":"","data":["80161DF5 0001"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D01A3095 0010","811650E8 4077","D01A3095 0010","811650F0 4077"],"options":null}},"EE802DC4-690BD57D-C:4A":{"Bike Modifier\\Player 1":{"note":"","data":["8016BDF7 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 2":{"note":"","data":["8016BE43 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 3":{"note":"","data":["8016BE8F 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 4":{"note":"","data":["8016BEDB 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Infinite Primary Weapon\\Player 1":{"note":"","data":["801677B5 00C8"],"options":null},"Infinite Primary Weapon\\Player 2":{"note":"","data":["80167F25 00C8"],"options":null},"Infinite Primary Weapon\\Player 3":{"note":"","data":["80168695 00C8"],"options":null},"Infinite Primary Weapon\\Player 4":{"note":"","data":["80168E05 00C8"],"options":null},"Infinite Shields\\Player 1":{"note":"","data":["801677AD 00C8"],"options":null},"Infinite Shields\\Player 2":{"note":"","data":["80167F1D 00C8"],"options":null},"Infinite Shields\\Player 3":{"note":"","data":["8016868D 00C8"],"options":null},"Infinite Shields\\Player 4":{"note":"","data":["80168DFD 00C8"],"options":null},"Infinite Turbos\\Player 1":{"note":"","data":["80167783 0003","80167787 0003"],"options":null},"Infinite Turbos\\Player 2":{"note":"","data":["80167EF3 0003","80167EF7 0003"],"options":null},"Infinite Turbos\\Player 3":{"note":"","data":["80168663 0003","80168667 0003"],"options":null},"Infinite Turbos\\Player 4":{"note":"","data":["80168DD3 0003","80168DD7 0003"],"options":null},"Mode Select":{"note":"","data":["8009A11F 00??"],"options":{"Anti-Gravity":"08","Anti-Gravity \u0026 Fish Eye Lens":"0A","Boulder":"01","Boulder \u0026 Fish Eye Lens":"03","Boulder \u0026 Wireframe":"11","Fish Eye Lens":"02","Ghost Mode":"40","Magnify":"04","Stealth Mode":"20","Ugly Mode":"80","Wireframe":"10"}},"{All Tracks and Bonus Cars Unlocked}":{"note":"","data":["80198520 0008","50000264 0000","8016B903 0001","50000264 0000","8016BA2F 0001","50000564 0000","8016BB5B 0001","8016BDBB 0001","50000404 0000","8016BDC3 0001","80162B8B 0003","8016BDD3 0003"],"options":null}},"F00F2D4E-340FAAF4-C:45":{"Freeze Time at 02:00":{"note":"","data":["811C479E 1C40"],"options":null},"Have All Groups Completed":{"note":"This gives you all Cups for all Groups.","data":["50002801 0000","801C48DC 0002"],"options":null},"Have Everything Unlocked":{"note":"This will unlock Cars, Races, Missions and the in-built Cheat Menu. This will also replace all the Zombies with Dinosaurs. To access Cheat menu options: Pause Game: Use Control Stick, to scroll the Cheat Menu. Press A, to activate Cheats","data":["801C49BD 000F"],"options":null},"Have Infinite\\Free Repairs":{"note":"","data":["8109DEC4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Frozen Opponents":{"note":"","data":["8109DF24 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Grip-O-Matic Tires":{"note":"","data":["8109E05C ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Hot Rod":{"note":"","data":["8109DE64 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Invunerability":{"note":"","data":["8109DEAC ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Mega Turbo":{"note":"","data":["8109DE4C ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Mine Dropping Ability":{"note":"","data":["8009E119 ????"],"options":{"Off":"0000","On":"0064"}},"Have Infinite\\Turbo":{"note":"","data":["8109DE34 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Turbo Nitrous":{"note":"","data":["8109DE7C ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Underwater Ability":{"note":"","data":["8109DEF4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Max Credits":{"note":"This is also Infinite until disabled","data":["811C481B FFFF"],"options":null},"Max Kills":{"note":"This will automatically Clear the stage if enabled and go back to the stage menu","data":["8109AC46 012C"],"options":null}},"F03C24CA-C5237BCC-C:45":{"Aquadome\\Player 1\\Cant be Stunned":{"note":"","data":["801F1E3B 0000"],"options":null},"Aquadome\\Player 1\\Full Super Bar":{"note":"","data":["811F1E3A 0200"],"options":null},"Aquadome\\Player 1\\Infinite Energy":{"note":"","data":["801F1E33 00AA"],"options":null},"Aquadome\\Player 1\\No Energy":{"note":"","data":["801F1E33 0000"],"options":null},"Aquadome\\Player 2\\Cant be Stunned":{"note":"","data":["801F52CB 0000"],"options":null},"Aquadome\\Player 2\\Full Super Bar":{"note":"","data":["811F52DA 0200"],"options":null},"Aquadome\\Player 2\\Infinite Energy":{"note":"","data":["801F52D3 00AA"],"options":null},"Aquadome\\Player 2\\No Energy":{"note":"","data":["801F52D3 0000"],"options":null},"Backwash Bay\\Player 1\\Cant be Stunned":{"note":"","data":["801F258B 0000"],"options":null},"Backwash Bay\\Player 1\\Full Super Bar":{"note":"","data":["811F259A 0200"],"options":null},"Backwash Bay\\Player 1\\Infinite Energy":{"note":"","data":["801F2593 00AA"],"options":null},"Backwash Bay\\Player 1\\No Energy":{"note":"","data":["801F2593 0000"],"options":null},"Backwash Bay\\Player 2\\Cant be Stunned":{"note":"","data":["801F5A2B 0000"],"options":null},"Backwash Bay\\Player 2\\Full Super Bar":{"note":"","data":["811F5A3A 0200"],"options":null},"Backwash Bay\\Player 2\\Infinite Energy":{"note":"","data":["801F5A33 00AA"],"options":null},"Backwash Bay\\Player 2\\No Energy":{"note":"","data":["801F5A33 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Cant be Stunned":{"note":"","data":["801F2FDB 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Full Super Bar":{"note":"","data":["811F2FEA 0200"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Infinite Energy":{"note":"","data":["801F2FE3 00AA"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\No Energy":{"note":"","data":["801F2FE3 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Cant be Stunned":{"note":"","data":["801F647B 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Full Super Bar":{"note":"","data":["811F648A 0200"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Infinite Energy":{"note":"","data":["801F6483 00AA"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\No Energy":{"note":"","data":["801F6483 0000"],"options":null},"Candy Factory\\Player 1\\Cant be Stunned":{"note":"","data":["801F270B 0000"],"options":null},"Candy Factory\\Player 1\\Full Super Bar":{"note":"","data":["811F271A 0200"],"options":null},"Candy Factory\\Player 1\\Infinite Energy":{"note":"","data":["801F2713 00AA"],"options":null},"Candy Factory\\Player 1\\No Energy":{"note":"","data":["801F2713 0000"],"options":null},"Candy Factory\\Player 2\\Cant be Stunned":{"note":"","data":["801F5BAB 0000"],"options":null},"Candy Factory\\Player 2\\Full Super Bar":{"note":"","data":["811F5BBA 0200"],"options":null},"Candy Factory\\Player 2\\Infinite Energy":{"note":"","data":["801F5BB3 00AA"],"options":null},"Candy Factory\\Player 2\\No Energy":{"note":"","data":["801F5BB3 0000"],"options":null},"Clayribbean Cruise\\Player 1\\Cant be Stunned":{"note":"","data":["801F24FB 0000"],"options":null},"Clayribbean Cruise\\Player 1\\Full Super Bar":{"note":"","data":["811F250A 0200"],"options":null},"Clayribbean Cruise\\Player 1\\Infinite Energy":{"note":"","data":["801F2503 00AA"],"options":null},"Clayribbean Cruise\\Player 1\\No Energy":{"note":"","data":["801F2503 0000"],"options":null},"Clayribbean Cruise\\Player 2\\Cant be Stunned":{"note":"","data":["801F599B 0000"],"options":null},"Clayribbean Cruise\\Player 2\\Full Super Bar":{"note":"","data":["811F59AA 0200"],"options":null},"Clayribbean Cruise\\Player 2\\Infinite Energy":{"note":"","data":["801F59A3 00AA"],"options":null},"Clayribbean Cruise\\Player 2\\No Energy":{"note":"","data":["801F59A3 0000"],"options":null},"Extra Characters/Secret Options":{"note":"","data":["801A2B41 000F"],"options":null},"Freezing Fortress\\Player 1\\Cant be Stunned":{"note":"","data":["801F239B 0000"],"options":null},"Freezing Fortress\\Player 1\\Full Super Bar":{"note":"","data":["811F23AA 0200"],"options":null},"Freezing Fortress\\Player 1\\Infinite Energy":{"note":"","data":["801F23A3 00AA"],"options":null},"Freezing Fortress\\Player 1\\No Energy":{"note":"","data":["801F23A3 0000"],"options":null},"Freezing Fortress\\Player 2\\Cant be Stunned":{"note":"","data":["801F583B 0000"],"options":null},"Freezing Fortress\\Player 2\\Full Super Bar":{"note":"","data":["811F584A 0200"],"options":null},"Freezing Fortress\\Player 2\\Infinite Energy":{"note":"","data":["801F5843 00AA"],"options":null},"Freezing Fortress\\Player 2\\No Energy":{"note":"","data":["801F5843 0000"],"options":null},"Ghastly Graveyard\\Player 1\\Cant be Stunned":{"note":"","data":["801F262B 0000"],"options":null},"Ghastly Graveyard\\Player 1\\Full Super Bar":{"note":"","data":["811F263A 0200"],"options":null},"Ghastly Graveyard\\Player 1\\Infinite Energy":{"note":"","data":["801F2633 00AA"],"options":null},"Ghastly Graveyard\\Player 1\\No Energy":{"note":"","data":["801F2633 0000"],"options":null},"Ghastly Graveyard\\Player 2\\Cant be Stunned":{"note":"","data":["801F5ACB 0000"],"options":null},"Ghastly Graveyard\\Player 2\\Full Super Bar":{"note":"","data":["811F5ADA 0200"],"options":null},"Ghastly Graveyard\\Player 2\\Infinite Energy":{"note":"","data":["801F5AD3 00AA"],"options":null},"Ghastly Graveyard\\Player 2\\No Energy":{"note":"","data":["801F5AD3 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 1\\Cant be Stunned":{"note":"","data":["801F244B 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 1\\Full Super Bar":{"note":"","data":["811F245A 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 1\\Infinite Energy":{"note":"","data":["801F2453 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 1\\No Energy":{"note":"","data":["801F2453 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 2\\Cant be Stunned":{"note":"","data":["801F58EB 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 2\\Full Super Bar":{"note":"","data":["811F58FA 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 2\\Infinite Energy":{"note":"","data":["801F58F3 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 2\\No Energy":{"note":"","data":["801F58F3 0000"],"options":null},"Infinite Time To Choose Your Fighter":{"note":"","data":["81200BEC 03A7"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 1\\Cant be Stunned":{"note":"","data":["801F3BBB 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 1\\Full Super Bar":{"note":"","data":["811F3BCA 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 1\\Infinite Energy":{"note":"","data":["801F3BC3 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 1\\No Energy":{"note":"","data":["801F3BC3 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 2\\Cant be Stunned":{"note":"","data":["801F705B 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 2\\Full Super Bar":{"note":"","data":["811F706A 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 2\\Infinite Energy":{"note":"","data":["801F7063 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 2\\No Energy":{"note":"","data":["801F7063 0000"],"options":null},"Kooky Courtyard\\Player 1\\Cant be Stunned":{"note":"","data":["801F280B 0000"],"options":null},"Kooky Courtyard\\Player 1\\Full Super Bar":{"note":"","data":["811F281A 0200"],"options":null},"Kooky Courtyard\\Player 1\\Infinite Energy":{"note":"","data":["801F2813 00AA"],"options":null},"Kooky Courtyard\\Player 1\\No Energy":{"note":"","data":["801F2813 0000"],"options":null},"Kooky Courtyard\\Player 2\\Cant be Stunned":{"note":"","data":["801F5CAB 0000"],"options":null},"Kooky Courtyard\\Player 2\\Full Super Bar":{"note":"","data":["811F5CBA 0200"],"options":null},"Kooky Courtyard\\Player 2\\Infinite Energy":{"note":"","data":["801F5CB3 00AA"],"options":null},"Kooky Courtyard\\Player 2\\No Energy":{"note":"","data":["801F5CB3 0000"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 1\\Cant be Stunned":{"note":"","data":["801F233B 0000"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 1\\Full Super Bar":{"note":"","data":["811F234A 0200"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 1\\Infinite Energy":{"note":"","data":["801F2343 00AA"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 1\\No Energy":{"note":"","data":["801F2343 0000"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 2\\Cant be Stunned":{"note":"","data":["801F57DB 0000"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 2\\Full Super Bar":{"note":"","data":["811F57EA 0200"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 2\\Infinite Energy":{"note":"","data":["801F57E3 00AA"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 2\\No Energy":{"note":"","data":["801F57E3 0000"],"options":null},"Player 1 Character Modifier":{"note":"","data":["801A2B2F 00??"],"options":{"Blob":"01","Bonker":"02","Boogerman":"03","Dr. Kiln":"04","Earthworm Jim":"05","Houngan":"08","Icky Bod Clay":"09","Kung Pow":"0A","Sumo Santa":"0D","T-Hoppy":"0F","Taffy":"0E"}},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 1\\Cant be Stunned":{"note":"","data":["801F1B0B 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 1\\Full Super Bar":{"note":"","data":["811F1B1A 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 1\\Infinite Energy":{"note":"","data":["801F1B13 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 1\\No Energy":{"note":"","data":["801F1B13 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 2\\Cant be Stunned":{"note":"","data":["801F4FAB 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 2\\Full Super Bar":{"note":"","data":["811F4FBA 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 2\\Infinite Energy":{"note":"","data":["801F4FB3 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 2\\No Energy":{"note":"","data":["801F4FB3 0000"],"options":null},"Rubbage Reef\\Player 1\\Cant be Stunned":{"note":"","data":["801F241B 0000"],"options":null},"Rubbage Reef\\Player 1\\Full Super Bar":{"note":"","data":["811F242A 0200"],"options":null},"Rubbage Reef\\Player 1\\Infinite Energy":{"note":"","data":["801F2423 00AA"],"options":null},"Rubbage Reef\\Player 1\\No Energy":{"note":"","data":["801F2423 0000"],"options":null},"Rubbage Reef\\Player 2\\Cant be Stunned":{"note":"","data":["801F58BB 0000"],"options":null},"Rubbage Reef\\Player 2\\Full Super Bar":{"note":"","data":["811F58CA 0200"],"options":null},"Rubbage Reef\\Player 2\\Infinite Energy":{"note":"","data":["801F58C3 00AA"],"options":null},"Rubbage Reef\\Player 2\\No Energy":{"note":"","data":["801F58C3 0000"],"options":null},"Rubbage Room\\Player 1\\Cant be Stunned":{"note":"","data":["801F464B 0000"],"options":null},"Rubbage Room\\Player 1\\Full Super Bar":{"note":"","data":["811F465A 0200"],"options":null},"Rubbage Room\\Player 1\\Infinite Energy":{"note":"","data":["801F4653 00AA"],"options":null},"Rubbage Room\\Player 1\\No Energy":{"note":"","data":["801F4653 0000"],"options":null},"Rubbage Room\\Player 2\\Cant be Stunned":{"note":"","data":["801F7AEB 0000"],"options":null},"Rubbage Room\\Player 2\\Full Super Bar":{"note":"","data":["811F7AFA 0200"],"options":null},"Rubbage Room\\Player 2\\Infinite Energy":{"note":"","data":["801F7AF3 00AA"],"options":null},"Rubbage Room\\Player 2\\No Energy":{"note":"","data":["801F7AF3 0000"],"options":null},"Santa's Toy Factory\\Player 1\\Cant be Stunned":{"note":"","data":["801F2C3B 0000"],"options":null},"Santa's Toy Factory\\Player 1\\Full Super Bar":{"note":"","data":["811F2C4A 0200"],"options":null},"Santa's Toy Factory\\Player 1\\Infinite Energy":{"note":"","data":["801F2C43 00AA"],"options":null},"Santa's Toy Factory\\Player 1\\No Energy":{"note":"","data":["801F2C43 0000"],"options":null},"Santa's Toy Factory\\Player 2\\Cant be Stunned":{"note":"","data":["801F60DB 0000"],"options":null},"Santa's Toy Factory\\Player 2\\Full Super Bar":{"note":"","data":["811F60EA 0200"],"options":null},"Santa's Toy Factory\\Player 2\\Infinite Energy":{"note":"","data":["801F60E3 00AA"],"options":null},"Santa's Toy Factory\\Player 2\\No Energy":{"note":"","data":["801F60E3 0000"],"options":null},"Stage Modifier":{"note":"","data":["801A2B2B 00??"],"options":{"Aquadome":"19","Backwash Bay":"16","Boogerhenge":"15","Camp Claynaveral":"02","Candy Factory":"00","Claynaveral Hangar":"01","Clayribbean Cruise":"11","Fiery Furnace":"0F","Freezing Fortress":"08","Ghastly Graveyard":"05","Grotto Gulch":"0A","Happy Harry's Hut":"07","Kiln's Hideout":"0E","Kiln's Laboratory":"0D","Kooky Courtyard":"13","Mudville Mansion":"04","Outhouse":"03","Refuse Room":"09","Research Room":"10","Rubbage Reef":"0C","Rubbage Room":"0B","Santa's Toy Factory":"14","Santa's Workship":"12","Spooky Spire":"06","Tribal Tower":"18","Tureen Toilet":"17"}},"Tribal Tower\\Player 1\\Cant be Stunned":{"note":"","data":["801F1BAB 0000"],"options":null},"Tribal Tower\\Player 1\\Full Super Bar":{"note":"","data":["811F1BBA 0200"],"options":null},"Tribal Tower\\Player 1\\Infinite Energy":{"note":"","data":["801F1BB3 00AA"],"options":null},"Tribal Tower\\Player 1\\No Energy":{"note":"","data":["801F1BB3 0000"],"options":null},"Tribal Tower\\Player 2\\Cant be Stunned":{"note":"","data":["801F504B 0000"],"options":null},"Tribal Tower\\Player 2\\Full Super Bar":{"note":"","data":["811F505A 0200"],"options":null},"Tribal Tower\\Player 2\\Infinite Energy":{"note":"","data":["801F5053 00AA"],"options":null},"Tribal Tower\\Player 2\\No Energy":{"note":"","data":["801F5053 0000"],"options":null}},"F050746C-247B820B-C:45":{"Access\\All Bikes \u0026 Tracks":{"note":"","data":["800A77D5 0063"],"options":null},"Access\\Infinite \u0026 All Weapons":{"note":"","data":["50000E02 0000","811B8D7A 0505"],"options":null},"Always 1st":{"note":"","data":["810D7856 0000"],"options":null},"Always Have\\Max Cash":{"note":"","data":["810D6A7A FFFF"],"options":null},"Always Have\\Weapon":{"note":"","data":["801C00B3 00??"],"options":{"Bace":"0C","Banana":"09","Bat":"04","Billie Club":"05","Cattle Prod":"0A","Chain":"0E","Fists":"01","Monkey Wrench":"08","Nunchuk":"0D","Pool Cue":"07","Sledge Hammer":"06","Spiked Club":"02","Taser":"0B","Tiring Iron":"03"}},"Infinite\\Damage":{"note":"","data":["801C0D17 0002"],"options":null},"Infinite\\Health\\To Bike":{"note":"","data":["811B8A38 42F0","811B8A3C 42F0"],"options":null},"Infinite\\Health\\To Character":{"note":"","data":["811BFE10 4489","811BFE12 8000"],"options":null}},"F1850C35-ACE07912-C:45":{"Always Place 1st":{"note":"","data":["802083F1 0001"],"options":null},"Infinite\\Lives":{"note":"","data":["800BAFD2 0009"],"options":null},"Infinite\\Specials On Pickup":{"note":"","data":["80208401 0005"],"options":null}},"F255D6F1-B65D6728-C:4A":{"Access All Boards \u0026 Characters":{"note":"","data":["800500C1 000C"],"options":null},"All Street Work Levels Unlocked":{"note":"","data":["50007801 0000","80050170 00??"],"options":{"Courses unlocked":"01","Courses unlocked with A rank":"05","Courses unlocked with B rank":"04","Courses unlocked with C rank":"03","Courses unlocked with S rank":"06"}},"Class Score Select":{"note":"","data":["8016609E 00??"],"options":{"Class A":"64","Class B":"40","Class C":"20","Class S":"FF"}},"Coin Perfect Select":{"note":"this is for Coin Mode to get Perfect Coin Collection Score straight away when you enter the level","data":["801660B3 00??"],"options":{"Giant House Level 1":"6E","Giant House Level 2":"77","Giant House Level 3":"72","Green Park Level 1":"14","Green park Level 2":"1A","Green park Level 3":"2B","Lost Forest Level 1":"4A","Lost Forest Level 2":"59","Lost Forest Level 3":"80","Snow Festival 64 Levels 1 2 \u0026 3":"7D","Sunset Island Level 1":"6F","Sunset Island Level 2":"74","Sunset Island Level 3":"81"}},"Infinite Time\\Attack Time Time 000000":{"note":"","data":["811137EA 0000"],"options":null},"Infinite Time\\Street Work \u0026 Coin":{"note":"","data":["801137E9 0028"],"options":null},"Infinite Time\\Time Attack":{"note":"","data":["801137EB 0000"],"options":null},"Infinite Turbo\\Player 1":{"note":"","data":["80166019 0009"],"options":null},"Infinite Turbo\\Player2":{"note":"","data":["80167991 0009"],"options":null},"Maxed Out Turbo Bar":{"note":"","data":["811656E8 429F","80166017 0051"],"options":null},"Options\\Camera Type Modifier":{"note":"","data":["810500A6 00??"],"options":{"Roll Off Far":"05","Roll Off Mid":"04","Roll Off Near":"03","Roll On Far":"02","Roll On Mid":"01","Roll On Near":"00"}},"Options\\DJ Function Modifier":{"note":"","data":["810500AC 00??"],"options":{"DJ Function Off":"00","DJ Function On":"01"}},"Options\\Music Modifier":{"note":"","data":["800500A9 00??"],"options":{"BGM Off":"00","BGM On":"FF"}},"Options\\Sound Effects Modifier":{"note":"","data":["810500AA 00??"],"options":{"SE Off":"00","SE On":"FF"}}},"F2A653CB-60633B3B-C:45":{"Found All Letters":{"note":"","data":["810ACBA2 000C"],"options":null},"Have No Letters":{"note":"Keep you kid busy for hours!!!","data":["810ACBA2 0000"],"options":null},"Infinite Strikes":{"note":"","data":["810A760A 0000"],"options":null}},"F35D5335-B7667CB7-C:45":{"Have All Items":{"note":"","data":["50000501 0000","80389C4A 0001","50000301 0000","80389C51 0001","80389C5A 0001","80389C5B 0001","80389C5D 0001","50000E01 0000","80389C60 0001"],"options":null},"Have Exp Points":{"note":"","data":["80389C49 0063"],"options":null},"Have Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C3F 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C45 0001","81389C46 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C3E 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C49 0063"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C48 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the F9 button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C90 ????","89389C92 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CED 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C88 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C88 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C3D 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C42 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"F35D5F95-8AFE3D69-C:45":{"Have All Items":{"note":"","data":["50000501 0000","80389C4A 0001","50000301 0000","80389C51 0001","80389C5A 0001","80389C5B 0001","80389C5D 0001","50000E01 0000","80389C60 0001"],"options":null},"Have Exp Points":{"note":"","data":["80389C49 0063"],"options":null},"Have Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C3F 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C45 0001","81389C46 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C3E 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C49 0063"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C48 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the GS button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C90 ????","89389C92 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CED 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C88 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C88 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C3D 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C42 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"F3C5BF9B-160F33E2-C:45":{"All Masks":{"note":"Press GS To Activate All Masks","data":["891F1210 8780"],"options":null},"Have All\\Crates":{"note":"","data":["810C70F8 7FFF","810C70FA FFFF","810C70FC FFFF","810C70FE FFFF","810C7100 FFFF","800C7102 00FF"],"options":null},"Have All\\Levels":{"note":"","data":["811F1200 FFFF","811F1202 FFFF","811F1201 03E7","811F1203 03E7"],"options":null},"Have All\\Pirate Cages":{"note":"","data":["801F1142 0050","811F11F0 FFFF","811F11F2 FFFF","811F11F4 FFFF","811F11F6 FFFF","811F11F8 00FF","811F11FA FFFF"],"options":null},"Have All\\Yellow Lums":{"note":"","data":["50006401 0000","800C7108 00FF","50001901 0000","800C70BD 00FF","811F1182 0005","50005702 0000","811F1188 FFFF"],"options":null},"Infinite\\Oxygen":{"note":"","data":["810F4B90 4396"],"options":null},"Open Map":{"note":"","data":["810C70F0 FFFF","810C70F2 FFFF"],"options":null},"Start with Full Health":{"note":"","data":["811BC64C 001E"],"options":null}},"F41B6343-C10661E6-C:50":{"Away Team Scores":{"note":"","data":["801A9579 00??"],"options":{"0 Goal":"00","1 Goal":"01","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08"}},"Home Team Scores":{"note":"","data":["801A86FD 00??"],"options":{"0 Goal":"00","1 Goal":"01","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08"}},"Infinite player creation points":{"note":"","data":["D03E0CF2 0001","803E0CF2 0063"],"options":null}},"F478D8B3-9716DD6D-C:50":{"Cheat Select":{"note":"","data":["8109ACBE ????"],"options":{"All Of The Above":"0FFF","All Pick-Ups Are Grapple":"0040","All Pick-Ups Are Green":"0010","All Pick-Ups Are Red":"0004","All Pick-Ups Are Yellow":"0008","Maintain Speed Off Track":"0001","No Chassis":"0400","No Driver":"0800","No Wheels":"0200","Pick-Ups Are Maximum":"0080","Reversed Rocket Racer Run Track":"0020","Rocket Cars":"0002","Turbo Mode":"0100"}},"Have All Tracks and Building Pieces":{"note":"","data":["812576D4 FFFF","812576D6 FFFF"],"options":null}},"F4CBE92C-B392ED12-C:50":{"999 Kills":{"note":"","data":["80163BFF 0040","80163C01 0040"],"options":null},"Have All Medals":{"note":"","data":["50001801 0000","8017A9D8 0006"],"options":null},"Infinite\\Armor\\Falco":{"note":"","data":["80174187 00FF"],"options":null},"Infinite\\Armor\\Peppy":{"note":"","data":["8017418F 00FF"],"options":null},"Infinite\\Armor\\Slippy":{"note":"","data":["8017418B 00FF"],"options":null},"Infinite\\Dual Blue Lasers":{"note":"","data":["81163C13 0002"],"options":null},"Infinite\\Energy (Except Fox))":{"note":"","data":["80179A27 00FF","80179A23 00FF","80179A1F 00FF"],"options":null},"Infinite\\Hyper Laser":{"note":"","data":["81163C13 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["80163C09 0063"],"options":null},"Level Select":{"note":"","data":["8017A39F 00??"],"options":{"Aquas":"0D","Area 6":"03","Bolse":"11","Corneria":"00","Corneria (Multi)":"14","Fortuna":"0E","Glitch":"04","Katina":"10","Macbeth":"0B","Meteo":"01","Sector X":"02","Sector Y":"05","Sector Z":"12","Solar":"07","Titania":"0C","Training Mode Level":"0A","Venom 1":"06","Venom 2":"09","Venom With Starwolf":"13","Zoness":"08"}},"Loads O' Hits":{"note":"","data":["80163C03 00FF"],"options":null},"Unlimited\\Boost\\Player 1":{"note":"","data":["8113E6FC 0000","8113E6FE 0000","811415DC 0000","811415DE 0000"],"options":null},"Unlimited\\Smart Bombs":{"note":"","data":["80179F0B 0063"],"options":null}},"F5237301-99E3EE93-C:50":{"1000 Garibs":{"note":"","data":["80291297 0064"],"options":null},"All levels unlocked":{"note":"At the main menu, where it says: Start, practice, options, \u0026 time trial, hold D-pad up, then the glove, playing-with-the-ball icon, will jump down into the lower left corner of the screen, then press the A button, and a level select screen will be available with all ordinary and boss levels, etc. available","data":["80298CFD 00A0"],"options":null},"Cheat Modifier\\1":{"note":"","data":["80298CFE 00??"],"options":{"Big ball":"02","Both of the above":"03","Low gravity":"01"}},"Cheat Modifier\\2":{"note":"","data":["80298CFF 00??"],"options":{"All of the above":"7B","Call ball":"02","Control ball":"20","Infinite energy":"40","Locate caribs":"01","Power ball":"10","Unlimited lives":"08"}},"Have Spell\\Death Spell":{"note":"","data":["812912A8 03E8"],"options":null},"Have Spell\\Enlarge Spell":{"note":"","data":["812912B4 03E8"],"options":null},"Have Spell\\Speed Up Spell":{"note":"","data":["812912B8 03E8"],"options":null},"Have Spell\\Sticky Fingers Spell":{"note":"","data":["812912B2 03E8"],"options":null},"Infinite\\99 Lives":{"note":"","data":["8029129B 0063"],"options":null},"Infinite\\Energy":{"note":"","data":["8029129F 0003"],"options":null},"Super Jump":{"note":"","data":["D02AFA14 0080","801EE771 0013"],"options":null},"[100% Complete]\\Save Slot 1":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBA37 0007","50000801 0000","801EBA28 00FF"],"options":null},"[100% Complete]\\Save Slot 2":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBA53 0007","50000801 0000","801EBA44 00FF"],"options":null},"[100% Complete]\\Save Slot 3":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBA6F 0007","50000801 0000","801EBA60 00FF"],"options":null},"[100% Complete]\\Save Slot 4":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBA8B 0007","50000801 0000","801EBA7C 00FF"],"options":null},"[100% Complete]\\Save Slot 5":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBAA7 0007","50000801 0000","801EBA98 00FF"],"options":null},"[100% Complete]\\Save Slot 6":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBAC3 0007","50000801 0000","801EBAB4 00FF"],"options":null}},"F5360FBE-2BF1691D-C:50":{"Access\\Always have Big Laser":{"note":"Use only one of these codes at a time!","data":["802F706F FFFF"],"options":null},"Access\\Enemy Health Modifer attach Activator":{"note":"Use only one of these codes at a time!","data":["812F7062 03E8"],"options":null},"Access\\Full Energy for Lazer":{"note":"Use only one of these codes at a time!","data":["812F706E 0064"],"options":null},"Access\\Gold Helmet":{"note":"Use only one of these codes at a time!","data":["8015D2F7 0003"],"options":null},"Access\\Infinite Health":{"note":"Use only one of these codes at a time!","data":["802F706A 0999"],"options":null},"Access\\Infinite Impact Oil":{"note":"Use only one of these codes at a time!","data":["812F706A 0154"],"options":null},"Access\\Infinite Ryo Impact Fighting":{"note":"Use only one of these codes at a time!","data":["812F7066 0005"],"options":null},"Access\\Infinite Ryo Impact Running":{"note":"Use only one of these codes at a time!","data":["812F70EA 270F"],"options":null},"Access\\Infy Ryo":{"note":"Use only one of these codes at a time!","data":["802F7667 0999"],"options":null},"Access\\Japanese Sombrero":{"note":"Use only one of these codes at a time!","data":["8015D2F7 0001"],"options":null},"Access\\Metal Helmet":{"note":"Use only one of these codes at a time!","data":["8015D2F7 0002"],"options":null},"Access\\Move Lock":{"note":"","data":["8116AE6A 0000","8120D84A 0000"],"options":null},"Access\\Mystical Ninja Skating team":{"note":"","data":["8120D620 4E20","8120DEF4 4E20","8116AE78 4E20"],"options":null},"Access\\Skating Team V2":{"note":"","data":["8120D620 4E20","8120DEF4 4E20","8116AE78 4E20","8116AE6A 0001","8120D84A 0001"],"options":null},"Have\\Bazooka":{"note":"","data":["8015D3CB 0001"],"options":null},"Have\\Blue Item":{"note":"","data":["8015D422 0001"],"options":null},"Have\\Blue Sausage":{"note":"","data":["8015D417 0001"],"options":null},"Have\\Brown Item":{"note":"","data":["8015D402 0001"],"options":null},"Have\\Brown Round Item":{"note":"","data":["8015D40F 0001"],"options":null},"Have\\Chain Pipe":{"note":"","data":["8015D3BF 0002"],"options":null},"Have\\Ebisumaru":{"note":"","data":["8015D3A3 0001"],"options":null},"Have\\Fire Cracker Bomb":{"note":"","data":["8015D3C4 0001"],"options":null},"Have\\Flute":{"note":"","data":["8015D3DB 0001"],"options":null},"Have\\Gold Item":{"note":"","data":["8015D41C 0001"],"options":null},"Have\\Gold Key":{"note":"","data":["8015D412 0001"],"options":null},"Have\\Kunai of Severe Cold":{"note":"","data":["8015D3D4 0001"],"options":null},"Have\\Magic Flying":{"note":"","data":["8015D3F4 0001"],"options":null},"Have\\Magic Mermaid":{"note":"","data":["8015D3FB 0001"],"options":null},"Have\\Magic Mini Ebisu":{"note":"","data":["8015D3F2 0001"],"options":null},"Have\\Magic Sudden Impact":{"note":"","data":["8015D3EC 0001"],"options":null},"Have\\Meat Saw Hammer":{"note":"","data":["8015D3C0 0001"],"options":null},"Have\\Medal of Flames":{"note":"","data":["8015D3DF 0001"],"options":null},"Have\\Pink Item":{"note":"","data":["8015D41B 0001"],"options":null},"Have\\Sasuke Character":{"note":"","data":["8015D3A4 0001"],"options":null},"Have\\Shell":{"note":"","data":["8015D3FC 0001"],"options":null},"Have\\Yae Character":{"note":"","data":["8015D3AB 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8015D2E7 0028"],"options":null},"Infinite\\Lives":{"note":"","data":["8015D2EF 000A"],"options":null},"Infinite\\Ryo":{"note":"","data":["8015D2EA 0010"],"options":null},"Keep Blue Fish":{"note":"","data":["8015D303 0003","50000404 0000","8015D2F3 0003"],"options":null}},"F5363349-DBF9D21B-C:45":{"Have Extra Characters (Gouriki \u0026 Reiji)":{"note":"","data":["8009E3DF 00FF"],"options":null},"Player 1\\Character Modifier":{"note":"","data":["80105001 00??"],"options":{"Azami":"00","Gouriki":"08","Hikari":"0B","Invisible Fighter":"0C","Kai":"03","Kaoru":"07","Kengon":"05","Kyeya":"06","Miki":"02","Reiji":"09","Sakai":"04","Serina":"01","Yami":"0A"}},"Player 1\\Infinite Energy":{"note":"","data":["81105026 03E8"],"options":null},"Player 1\\Needs 1 Round to Win":{"note":"","data":["D009E3F4 0000","8009E3F4 0001"],"options":null},"Player 1\\Never Wins":{"note":"","data":["8009E3F4 0000"],"options":null},"Player 1\\No Energy":{"note":"","data":["81105026 0000"],"options":null},"Player 2\\Character Modifier":{"note":"","data":["8011B399 00??"],"options":{"Azami":"00","Gouriki":"08","Hikari":"0B","Invisible Fighter":"0C","Kai":"03","Kaoru":"07","Kengon":"05","Kyeya":"06","Miki":"02","Reiji":"09","Sakai":"04","Serina":"01","Yami":"0A"}},"Player 2\\Infinite Energy":{"note":"","data":["8111B3BE 03E8"],"options":null},"Player 2\\Needs 1 Round to Win":{"note":"","data":["D009E3F5 0000","8009E3F5 0001"],"options":null},"Player 2\\No Energy":{"note":"","data":["8111B3BE 0000"],"options":null},"Player 2\\P2 Never Wins":{"note":"","data":["8009E3F5 0000"],"options":null}},"F568D51E-7E49BA1E-C:45":{"Carry 20 Bombs At A Time":{"note":"","data":["800AEE0F 0014"],"options":null},"Have\\Pumped up Red Remote Bombs":{"note":"","data":["802AC653 0004"],"options":null},"Infinite\\Credits":{"note":"","data":["802AC62B 0009"],"options":null},"Infinite\\Energy\\Player 1":{"note":"","data":["800AEE07 0002"],"options":null},"Infinite\\Energy\\Player 2":{"note":"","data":["800AEECF 0002"],"options":null},"Infinite\\Energy\\Player 3":{"note":"","data":["800AEF97 0002"],"options":null},"Infinite\\Energy\\Player 4":{"note":"","data":["800AF05F 0002"],"options":null},"Infinite\\Gems":{"note":"","data":["802AC62F 0063"],"options":null},"Infinite\\Lives":{"note":"","data":["802AC627 0063"],"options":null},"Infinite\\Time":{"note":"","data":["802AC643 0001"],"options":null},"Invincible\\Player 1":{"note":"","data":["800AEE01 0001"],"options":null}},"F5C5866D-052713D9-C:45":{"All Characters\\Have Max\\Acceleration\\Player 1":{"note":"","data":["50000C0A 0000","80197FF6 0064"],"options":null},"All Characters\\Have Max\\Acceleration\\Player 2":{"note":"","data":["5000120A 0000","801980AA 0064"],"options":null},"All Characters\\Have Max\\Armor\\Player 1":{"note":"","data":["5000120A 0000","80197FF8 0064"],"options":null},"All Characters\\Have Max\\Armor\\Player 2":{"note":"","data":["5000120A 0000","801980AC 0064"],"options":null},"All Characters\\Have Max\\Attributes\\Player 1":{"note":"","data":["5000120A 0000","81197FF6 6464","5000120A 0000","81197FF8 6464"],"options":null},"All Characters\\Have Max\\Attributes\\Player 2":{"note":"","data":["5000120A 0000","811980AA 6464","5000120A 0000","811980AC 6464"],"options":null},"All Characters\\Have Max\\Speed\\Player 1":{"note":"","data":["5000120A 0000","80197FF7 0064"],"options":null},"All Characters\\Have Max\\Speed\\Player 2":{"note":"","data":["5000120A 0000","801980AB 0064"],"options":null},"All Characters\\Have Max\\Target Avoidance\\Player 1":{"note":"","data":["5000120A 0000","80197FF9 0064"],"options":null},"All Characters\\Have Max\\Target Avoidance\\Player 2":{"note":"","data":["5000120A 0000","801980AD 0064"],"options":null},"All Quests Complete\\Player 1":{"note":"","data":["5000120A 0000","81197FF0 01FF"],"options":null},"All Quests Complete\\Player 2":{"note":"","data":["5000120A 0000","811980A4 01FF"],"options":null}},"F63B89CE-4582D57D-C:49":{"Always Have\\50 pieces of corn":{"note":"","data":["801E2761 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E2750 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["811E274E 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E2762 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E2755 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E2760 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D008FFA1 0010","811E26C6 1000","D008FFA1 0010","811E26D6 1000"],"options":null},"No Music":{"note":"","data":["801DD906 0000"],"options":null},"Start with Berry Weapon":{"note":"","data":["801E2757 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Subtitles On":{"note":"","data":["801DDB7B 00??"],"options":{"Off":"00","On":"01"}},"Unlock All Levels":{"note":"","data":["81099E30 000F"],"options":null}},"F7FE28F6-C3F2ACC3-C:45":{"Cheat Menu":{"note":"","data":["80336593 0001"],"options":null},"Infinite Credits":{"note":"","data":["81336582 0005","8133658E 0004"],"options":null},"Unlimited Time":{"note":"","data":["8033F31B 0063"],"options":null}},"F82DD377-8C3FB347-C:58":{"100.000 Sponsor Credits \u0026 950 Championship Points In Support Van":{"note":"You Also Have Access To All Cars, Tracks \u0026 Extra Features","data":["80031433 00F3"],"options":null},"Always 1st":{"note":"","data":["80031F93 0001"],"options":null},"Freeze Timer":{"note":"","data":["80031F9F 0000"],"options":null},"Infinite Cash":{"note":"","data":["803A418E 4000"],"options":null},"Max Sponsor Credits":{"note":"","data":["803A6702 0010","803A6704 0001"],"options":null},"No Cones Hit":{"note":"In ARSG Rally School","data":["80031FC3 0000","8003239B 0000"],"options":null},"No Damage Or Failures":{"note":"","data":["80031427 0001"],"options":null},"No Navigator":{"note":"","data":["80031EF7 0000"],"options":null}},"F908CA4C-36464327-C:45":{"Player 1\\1-Hit Death":{"note":"","data":["D01D3484 0078","801D3484 0001"],"options":null},"Player 1\\Fast\\Jump Walk":{"note":"","data":["801D347C 0001"],"options":null},"Player 1\\Fast\\Punch Kick":{"note":"","data":["801D347E 0010"],"options":null},"Player 1\\Fight Gargos Immediately":{"note":"","data":["8012834B 000A"],"options":null},"Player 1\\Fulgore\\Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3478 0020","801D3479 0090","801D34C5 0092","801D3527 005E"],"options":null},"Player 1\\Fulgore\\Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3478 0023","801D3479 00F0","801D34C5 0080","801D3527 00AF"],"options":null},"Player 1\\Infinite Energy":{"note":"","data":["801D3484 0069"],"options":null},"Player 1\\Play As":{"note":"","data":["802C8CB8 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 1\\Slow Jump Walk":{"note":"","data":["801D347D 0050"],"options":null},"Player 1\\Spinal Always Has All Skulls":{"note":"","data":["801D3523 0006"],"options":null},"Player 1\\Undefeated Players Scroll By Quickly":{"note":"","data":["802C8CE8 0007"],"options":null},"Player 1\\Untouchable":{"note":"","data":["801D34D4 000A"],"options":null},"Player 1\\Wins Score":{"note":"","data":["8012830A 00FF"],"options":null},"Player 2\\Fast\\Jump Walk":{"note":"","data":["801D357C 0001"],"options":null},"Player 2\\Fast\\Punch Kick":{"note":"","data":["801D357E 0010"],"options":null},"Player 2\\Fulgore Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3578 0020","801D3579 0090","801D35C5 0092","801D3527 005E"],"options":null},"Player 2\\Fulgore Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3578 0023","801D3579 00F0","801D35C5 0080","801D3527 00AF"],"options":null},"Player 2\\Infinite Energy":{"note":"","data":["801D3584 0078"],"options":null},"Player 2\\Play As":{"note":"","data":["8004EA9D 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 2\\Slow\\Jump Walk":{"note":"","data":["801D357D 0050"],"options":null},"Player 2\\Slow\\Punch Kick":{"note":"","data":["801D357F 0050"],"options":null},"Player 2\\Spinal Always Has All Skulls":{"note":"","data":["801D3623 0006"],"options":null},"Player 2\\Untouchable":{"note":"","data":["801D34D5 000A"],"options":null},"Unlock All Options":{"note":"","data":["8012834C 0006"],"options":null}},"F9D411E3-7CB29BC0-C:45":{"Always Low Temp":{"note":"","data":["810E4F98 0000","810E4F9A 0000"],"options":null},"Auto-Pilot Always On Turbo (Original Excitebike Mode)":{"note":"","data":["810E3142 19AA"],"options":null},"Earthquake Mode":{"note":"","data":["810D7010 3AD0"],"options":null},"Fast\\Movement (Drones)":{"note":"","data":["800D9D55 00A0"],"options":null},"Fast\\Movement (Player)":{"note":"","data":["800D9D65 00AF"],"options":null},"Max Stunt Points":{"note":"","data":["810E4D18 0098","810E4D1A 967F"],"options":null},"No\\Collision Drivers":{"note":"","data":["800D9D34 0040"],"options":null},"No\\Overheating":{"note":"","data":["800CA984 00C3"],"options":null},"Power Turbo":{"note":"","data":["800CA99C 0040","800CA99D 00E0"],"options":null},"Slow\\Movement (Drones)":{"note":"","data":["800D9D55 0060"],"options":null},"Slow\\Movement (Player)":{"note":"","data":["800D9D65 0060"],"options":null},"Steering Control":{"note":"","data":["800C9E50 0040"],"options":null},"Super Speed For All":{"note":"","data":["800CA9A0 0040","800CA9A1 0070"],"options":null},"Unlock\\Difficulties \u0026 All Special Tracks":{"note":"","data":["810F2D50 FFFF"],"options":null},"Unlock\\Silver \u0026 Gold Cup":{"note":"","data":["810F2D4E 0003"],"options":null}},"FA5A3DFF-B4C9CDB9-C:45":{"Aquadome\\Player 1\\Cant be Stunned":{"note":"","data":["80193D1F 0000"],"options":null},"Aquadome\\Player 1\\Full Super Bar":{"note":"","data":["81193D2E 0200"],"options":null},"Aquadome\\Player 1\\Infinite Health":{"note":"","data":["80193D27 00AA"],"options":null},"Aquadome\\Player 1\\No Health":{"note":"","data":["80193D27 0000"],"options":null},"Aquadome\\Player 2\\Cant be Stunned":{"note":"","data":["8019720F 0000"],"options":null},"Aquadome\\Player 2\\Full Super Bar":{"note":"","data":["8119721E 0200"],"options":null},"Aquadome\\Player 2\\Infinite Health":{"note":"","data":["80197217 00AA"],"options":null},"Aquadome\\Player 2\\No Health":{"note":"","data":["80197217 0000"],"options":null},"Backwash Bay\\Player 1\\Cant be Stunned":{"note":"","data":["8019447F 0000"],"options":null},"Backwash Bay\\Player 1\\Full Super Bar":{"note":"","data":["8119448E 0200"],"options":null},"Backwash Bay\\Player 1\\Infinite Health":{"note":"","data":["80194487 00AA"],"options":null},"Backwash Bay\\Player 1\\No Health":{"note":"","data":["80194487 0000"],"options":null},"Backwash Bay\\Player 2\\Cant be Stunned":{"note":"","data":["8019796F 0000"],"options":null},"Backwash Bay\\Player 2\\Full Super Bar":{"note":"","data":["8119797E 0200"],"options":null},"Backwash Bay\\Player 2\\Infinite Health":{"note":"","data":["80197977 00AA"],"options":null},"Backwash Bay\\Player 2\\No Health":{"note":"","data":["80197977 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Cant be Stunned":{"note":"","data":["80194ECF 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Full Super Bar":{"note":"","data":["81194EDE 0200"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Infinite Health":{"note":"","data":["80194ED7 00AA"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\No Health":{"note":"","data":["80194ED7 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Cant be Stunned":{"note":"","data":["801983BF 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Full Super Bar":{"note":"","data":["811983CE 0200"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Infinite Health":{"note":"","data":["801983C7 00AA"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\No Health":{"note":"","data":["801983C7 0000"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 1\\Cant be Stunned":{"note":"","data":["8019422F 0000"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 1\\Full Super Bar":{"note":"","data":["8119423E 0200"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 1\\Infinite Health":{"note":"","data":["80194237 00AA"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 1\\No Health":{"note":"","data":["80194237 0000"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 2\\Cant be Stunned":{"note":"","data":["8019771F 0000"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 2\\Full Super Bar":{"note":"","data":["8119772E 0200"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 2\\Infinite Health":{"note":"","data":["80197727 00AA"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 2\\No Health":{"note":"","data":["80197727 0000"],"options":null},"Candy Factory\\Player 1\\Cant be Stunned":{"note":"","data":["801945FF 0000"],"options":null},"Candy Factory\\Player 1\\Full Super Bar":{"note":"","data":["8119460E 0200"],"options":null},"Candy Factory\\Player 1\\Infinite Health":{"note":"","data":["80194607 00AA"],"options":null},"Candy Factory\\Player 1\\No Health":{"note":"","data":["80194607 0000"],"options":null},"Candy Factory\\Player 2\\Cant be Stunned":{"note":"","data":["80197AEF 0000"],"options":null},"Candy Factory\\Player 2\\Full Super Bar":{"note":"","data":["81197AFE 0200"],"options":null},"Candy Factory\\Player 2\\Infinite Health":{"note":"","data":["80197AF7 00AA"],"options":null},"Candy Factory\\Player 2\\No Health":{"note":"","data":["80197AF7 0000"],"options":null},"Clayribbean Cruise\\Player 1\\Cant be Stunned":{"note":"","data":["80193F3F 0000"],"options":null},"Clayribbean Cruise\\Player 1\\Full Super Bar":{"note":"","data":["81193F4E 0200"],"options":null},"Clayribbean Cruise\\Player 1\\Infinite Health":{"note":"","data":["80193F47 00AA"],"options":null},"Clayribbean Cruise\\Player 1\\No Health":{"note":"","data":["80193F47 0000"],"options":null},"Clayribbean Cruise\\Player 2\\Cant be Stunned":{"note":"","data":["8019742F 0000"],"options":null},"Clayribbean Cruise\\Player 2\\Full Super Bar":{"note":"","data":["8119743E 0200"],"options":null},"Clayribbean Cruise\\Player 2\\Infinite Health":{"note":"","data":["80197437 00AA"],"options":null},"Clayribbean Cruise\\Player 2\\No Health":{"note":"","data":["80197437 0000"],"options":null},"Dog House\\Player 1\\Cant be Stunned":{"note":"","data":["8019653F 0000"],"options":null},"Dog House\\Player 1\\Full Super Bar":{"note":"","data":["8119654E 0200"],"options":null},"Dog House\\Player 1\\Infinite Health":{"note":"","data":["80196547 00AA"],"options":null},"Dog House\\Player 1\\No Health":{"note":"","data":["80196547 0000"],"options":null},"Dog House\\Player 2\\Cant be Stunned":{"note":"","data":["80199A2F 0000"],"options":null},"Dog House\\Player 2\\Full Super Bar":{"note":"","data":["81199A3E 0200"],"options":null},"Dog House\\Player 2\\Infinite Health":{"note":"","data":["80199A37 00AA"],"options":null},"Dog House\\Player 2\\No Health":{"note":"","data":["80199A37 0000"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 1\\Cant be Stunned":{"note":"","data":["80195AAF 0000"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 1\\Full Super Bar":{"note":"","data":["81195ABE 0200"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 1\\Infinite Health":{"note":"","data":["80195AB7 00AA"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 1\\No Health":{"note":"","data":["80195AB7 0000"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 2\\Cant be Stunned":{"note":"","data":["80198F9F 0000"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 2\\Full Super Bar":{"note":"","data":["81198FAE 0200"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 2\\Infinite Health":{"note":"","data":["80198FA7 00AA"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 2\\No Health":{"note":"","data":["80198FA7 0000"],"options":null},"Freezing Fortress\\Player 1\\Cant be Stunned":{"note":"","data":["8019428F 0000"],"options":null},"Freezing Fortress\\Player 1\\Full Super Bar":{"note":"","data":["8119429E 0200"],"options":null},"Freezing Fortress\\Player 1\\Infinite Health":{"note":"","data":["80194297 00AA"],"options":null},"Freezing Fortress\\Player 1\\No Health":{"note":"","data":["80194297 0000"],"options":null},"Freezing Fortress\\Player 2\\Cant be Stunned":{"note":"","data":["8019777F 0000"],"options":null},"Freezing Fortress\\Player 2\\Full Super Bar":{"note":"","data":["8119778E 0200"],"options":null},"Freezing Fortress\\Player 2\\Infinite Health":{"note":"","data":["80197787 00AA"],"options":null},"Freezing Fortress\\Player 2\\No Health":{"note":"","data":["80197787 0000"],"options":null},"Ghastly Graveyard\\Player 1\\Cant be Stunned":{"note":"","data":["8019451F 0000"],"options":null},"Ghastly Graveyard\\Player 1\\Full Super Bar":{"note":"","data":["8119452E 0200"],"options":null},"Ghastly Graveyard\\Player 1\\Infinite Health":{"note":"","data":["80194527 00AA"],"options":null},"Ghastly Graveyard\\Player 1\\No Health":{"note":"","data":["80194527 0000"],"options":null},"Ghastly Graveyard\\Player 2\\Cant be Stunned":{"note":"","data":["80197A0F 0000"],"options":null},"Ghastly Graveyard\\Player 2\\Full Super Bar":{"note":"","data":["81197A1E 0200"],"options":null},"Ghastly Graveyard\\Player 2\\Infinite Health":{"note":"","data":["80197A17 00AA"],"options":null},"Ghastly Graveyard\\Player 2\\No Health":{"note":"","data":["80197A17 0000"],"options":null},"Kooky Courtyard\\Player 1\\Cant be Stunned":{"note":"","data":["801946FF 0000"],"options":null},"Kooky Courtyard\\Player 1\\Full Super Bar":{"note":"","data":["8119470E 0200"],"options":null},"Kooky Courtyard\\Player 1\\Infinite Health":{"note":"","data":["80194707 00AA"],"options":null},"Kooky Courtyard\\Player 1\\No Health":{"note":"","data":["80194707 0000"],"options":null},"Kooky Courtyard\\Player 2\\Cant be Stunned":{"note":"","data":["80197BEF 0000"],"options":null},"Kooky Courtyard\\Player 2\\Full Super Bar":{"note":"","data":["81197BFE 0200"],"options":null},"Kooky Courtyard\\Player 2\\Infinite Health":{"note":"","data":["80197BF7 00AA"],"options":null},"Kooky Courtyard\\Player 2\\No Health":{"note":"","data":["80197BF7 0000"],"options":null},"Other Codes\\Debug Mode":{"note":"With this code, Press C-Up \u0026 C-Down to pick your stage.","data":["810AA1A6 0001"],"options":null},"Other Codes\\Difficulty Modifier":{"note":"","data":["810AE40A 00??"],"options":{"Cookie":"00","Dude":"03","Easy":"01","Normal":"02","Psycho":"04"}},"Other Codes\\Have Booger Man":{"note":"","data":["810AA12A 0001"],"options":null},"Other Codes\\Have Earth Worm Jim":{"note":"","data":["810AA0E2 0001"],"options":null},"Other Codes\\Have High Five":{"note":"","data":["810AA0BE 0001"],"options":null},"Other Codes\\Have Sumo Santa":{"note":"","data":["810AA106 0001"],"options":null},"Other Codes\\Health Meters Modifier":{"note":"","data":["800AE5EF 00??"],"options":{"Off":"00","On":"01"}},"Other Codes\\Portraits Modifier":{"note":"","data":["800AE613 00??"],"options":{"Off":"00","On":"01"}},"Other Codes\\Spillits Modifier":{"note":"","data":["800AE447 00??"],"options":{"Normal":"00","Psycho":"01"}},"Other Codes\\Stun Meters Modifier":{"note":"","data":["800AE5FB 00??"],"options":{"Off":"00","On":"01"}},"Other Codes\\Super Meters Modifier":{"note":"","data":["800AE607 00??"],"options":{"Off":"00","On":"01"}},"Other Codes\\Throws \u0026 Holds Modifier":{"note":"","data":["800AE42F 00??"],"options":{"Off":"01","On":"00"}},"Other Codes\\Time Limit Modifier":{"note":"","data":["800AE423 00??"],"options":{"Off":"01","On":"00"}},"Other Codes\\VS. Arena Select Modifier":{"note":"","data":["800AE43B 00??"],"options":{"Normal":"01","Random":"00"}},"Rubbage Reef Code\\Player 1\\Cant be Stunned":{"note":"","data":["8019430F 0000"],"options":null},"Rubbage Reef Code\\Player 1\\Full Super Bar":{"note":"","data":["8119431E 0200"],"options":null},"Rubbage Reef Code\\Player 1\\Infinite Health":{"note":"","data":["80194317 00AA"],"options":null},"Rubbage Reef Code\\Player 1\\No Health":{"note":"","data":["80194317 0000"],"options":null},"Rubbage Reef Code\\Player 2\\Cant be Stunned":{"note":"","data":["801977FF 0000"],"options":null},"Rubbage Reef Code\\Player 2\\Full Super Bar":{"note":"","data":["8119780E 0200"],"options":null},"Rubbage Reef Code\\Player 2\\Infinite Health":{"note":"","data":["80197807 00AA"],"options":null},"Rubbage Reef Code\\Player 2\\No Health":{"note":"","data":["80197807 0000"],"options":null},"Santa's Toy Factory\\Player 1\\Cant be Stunned":{"note":"","data":["80194B2F 0000"],"options":null},"Santa's Toy Factory\\Player 1\\Full Super Bar":{"note":"","data":["81194B3E 0200"],"options":null},"Santa's Toy Factory\\Player 1\\Infinite Health":{"note":"","data":["80194B37 00AA"],"options":null},"Santa's Toy Factory\\Player 1\\No Health":{"note":"","data":["80194B37 0000"],"options":null},"Santa's Toy Factory\\Player 2\\Cant be Stunned":{"note":"","data":["8019801F 0000"],"options":null},"Santa's Toy Factory\\Player 2\\Full Super Bar":{"note":"","data":["8119802E 0200"],"options":null},"Santa's Toy Factory\\Player 2\\Infinite Health":{"note":"","data":["80198027 00AA"],"options":null},"Santa's Toy Factory\\Player 2\\No Health":{"note":"","data":["80198027 0000"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 1\\Cant be Stunned":{"note":"","data":["801939FF 0000"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 1\\Full Super Bar":{"note":"","data":["81193A0E 0200"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 1\\Infinite Health":{"note":"","data":["80193A07 00AA"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 1\\No Health":{"note":"","data":["80193A07 0000"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 2\\Cant be Stunned":{"note":"","data":["80196EEF 0000"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 2\\Full Super Bar":{"note":"","data":["81196EFE 0200"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 2\\Infinite Health":{"note":"","data":["80196EF7 00AA"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 2\\No Health":{"note":"","data":["80196EF7 0000"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 1\\Cant be Stunned":{"note":"","data":["8019433F 0000"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 1\\Full Super Bar":{"note":"","data":["8119434E 0200"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 1\\Infinite Health":{"note":"","data":["80194347 00AA"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 1\\No Health":{"note":"","data":["80194347 0000"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 2\\Cant be Stunned":{"note":"","data":["8019782F 0000"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 2\\Full Super Bar":{"note":"","data":["8119783E 0200"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 2\\Infinite Health":{"note":"","data":["80197837 00AA"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 2\\No Health":{"note":"","data":["80197837 0000"],"options":null},"Tribal Tower\\Player 1\\Cant be Stunned":{"note":"","data":["80193A9F 0000"],"options":null},"Tribal Tower\\Player 1\\Full Super Bar":{"note":"","data":["81193AAE 0200"],"options":null},"Tribal Tower\\Player 1\\Infinite Health":{"note":"","data":["80193AA7 00AA"],"options":null},"Tribal Tower\\Player 1\\No Health":{"note":"","data":["80193AA7 0000"],"options":null},"Tribal Tower\\Player 2\\Cant be Stunned":{"note":"","data":["80196F8F 0000"],"options":null},"Tribal Tower\\Player 2\\Full Super Bar":{"note":"","data":["81196F9E 0200"],"options":null},"Tribal Tower\\Player 2\\Infinite Health":{"note":"","data":["80196F97 00AA"],"options":null},"Tribal Tower\\Player 2\\No Health":{"note":"","data":["80196F97 0000"],"options":null},"VS. Mode\\Player 1\\Cant be Stunned":{"note":"","data":["8019195F 0000"],"options":null},"VS. Mode\\Player 1\\Full Super Bar":{"note":"","data":["8119916E 0200"],"options":null},"VS. Mode\\Player 1\\Infinite Health":{"note":"","data":["80199167 00AA"],"options":null},"VS. Mode\\Player 1\\No Health":{"note":"","data":["80199167 0000"],"options":null},"VS. Mode\\Player 2\\Cant be Stunned":{"note":"","data":["80194E4F 0000"],"options":null},"VS. Mode\\Player 2\\Full Super Bar":{"note":"","data":["81194E5E 0200"],"options":null},"VS. Mode\\Player 2\\Infinite Health":{"note":"","data":["80194E57 00AA"],"options":null},"VS. Mode\\Player 2\\No Health":{"note":"","data":["80194E57 0000"],"options":null}},"FA8C4571-BBE7F9C0-C:45":{"Always 1st \u0026 final time 00:00.00":{"note":"All Levels","data":["50000301 0000","801CE609 0000"],"options":null},"Difficulty Select":{"note":"","data":["8007BF00 00??"],"options":{"Amateur":"00","Intermediate":"01","Mirror Mode":"03","Professional":"02"}},"Frantic Finale\\Colorado\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019185B 0063"],"options":null},"Frantic Finale\\Colorado\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191882 0063"],"options":null},"Frantic Finale\\Hawaii\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["80191F3B 0063"],"options":null},"Frantic Finale\\Hawaii\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191F62 0063"],"options":null},"Frantic Finale\\Oregon\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018E90B 0063"],"options":null},"Frantic Finale\\Oregon\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E932 0063"],"options":null},"Frantic Finale\\Texas\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018F0AB 0063"],"options":null},"Frantic Finale\\Texas\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018F0D2 0063"],"options":null},"Freewayphobia\\Chicago\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["80191F0B 0063"],"options":null},"Freewayphobia\\Chicago\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191F32 0063"],"options":null},"Freewayphobia\\Dakota\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018D0DB 0063"],"options":null},"Freewayphobia\\Dakota\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018D102 0063"],"options":null},"Freewayphobia\\New York\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018F3DB 0063"],"options":null},"Freewayphobia\\New York\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018F402 0063"],"options":null},"Freewayphobia\\Seattle\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018FCBB 0063"],"options":null},"Freewayphobia\\Seattle\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FCE2 0063"],"options":null},"Level Select":{"note":"","data":["801875A9 00??"],"options":{"Contest":"07","Frantic Finale":"04","Freewayphobia":"02","Motor Way Mania":"01","Options":"08","Practice":"06","Time Trial":"05","Traffic Troubles":"00","Vitory Vehicles":"03"}},"Motor Way Mania\\Alaska\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018E34B 0063"],"options":null},"Motor Way Mania\\Alaska\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E372 0063"],"options":null},"Motor Way Mania\\Las Vegas\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801929DB 0063"],"options":null},"Motor Way Mania\\Las Vegas\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80192A02 0063"],"options":null},"Motor Way Mania\\Los Angeles\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018DBBB 0063"],"options":null},"Motor Way Mania\\Los Angeles\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018DBE2 0063"],"options":null},"Motor Way Mania\\Philadelphia\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019385B 0063"],"options":null},"Motor Way Mania\\Philadelphia\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80193882 0063"],"options":null},"Play As":{"note":"","data":["800D3081 00??"],"options":{"Daisy Duck":"01","Dewey":"07","Donald Duck":"05","Goofy":"02","Huey":"06","Louie":"08","Lugwig Von Drake":"09","Mickey Mouse":"00","Minnie Mouse":"04","Pete":"03"}},"Re-name Characters\\Daisy\\Letter 1":{"note":"","data":["801BE5A6 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 2":{"note":"","data":["801BE5A7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 3":{"note":"","data":["801BE5A8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 4":{"note":"","data":["801BE5A9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 5":{"note":"","data":["801BE5AA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 1":{"note":"","data":["801BE5BC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 2":{"note":"","data":["801BE5BD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 3":{"note":"","data":["801BE5BE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 4":{"note":"","data":["801BE5BF 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 5":{"note":"","data":["801BE5C0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 1":{"note":"","data":["801BE59F 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 2":{"note":"","data":["801BE5A0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 3":{"note":"","data":["801BE5A1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 4":{"note":"","data":["801BE5A2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 5":{"note":"","data":["801BE5A3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 6":{"note":"","data":["801BE5A4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 1":{"note":"","data":["801BE5AC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 2":{"note":"","data":["801BE5AD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 3":{"note":"","data":["801BE5AE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 4":{"note":"","data":["801BE5AF 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 5":{"note":"","data":["801BE5B0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 1":{"note":"","data":["801BE5B7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 2":{"note":"","data":["801BE5B8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 3":{"note":"","data":["801BE5B9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 4":{"note":"","data":["801BE5BA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 1":{"note":"","data":["801BE5C2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 2":{"note":"","data":["801BE5C3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 3":{"note":"","data":["801BE5C4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 4":{"note":"","data":["801BE5C5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 5":{"note":"","data":["801BE5C6 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 1":{"note":"","data":["801BE5C8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 2":{"note":"","data":["801BE5C9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 3":{"note":"","data":["801BE5CA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 4":{"note":"","data":["801BE5CB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 5":{"note":"","data":["801BE5CC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 6":{"note":"","data":["801BE5CD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 1":{"note":"","data":["801BE591 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 2":{"note":"","data":["801BE592 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 3":{"note":"","data":["801BE593 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 4":{"note":"","data":["801BE594 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 5":{"note":"","data":["801BE595 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 6":{"note":"","data":["801BE596 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 1":{"note":"","data":["801BE598 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 2":{"note":"","data":["801BE599 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 3":{"note":"","data":["801BE59A 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 4":{"note":"","data":["801BE59B 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 5":{"note":"","data":["801BE59C 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 6":{"note":"","data":["801BE59D 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 1":{"note":"","data":["801BE5B2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 2":{"note":"","data":["801BE5B3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 3":{"note":"","data":["801BE5B4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 4":{"note":"","data":["801BE5B5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Traffic Troubles\\Grand Canyon\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019311B 0063"],"options":null},"Traffic Troubles\\Grand Canyon\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80193142 0063"],"options":null},"Traffic Troubles\\Indianapolis\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018E75B 0063"],"options":null},"Traffic Troubles\\Indianapolis\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E782 0063"],"options":null},"Traffic Troubles\\New Mexico\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018FD2B 0063"],"options":null},"Traffic Troubles\\New Mexico\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FD52 0063"],"options":null},"Traffic Troubles\\San Fransisco\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["80191A2B 0063"],"options":null},"Traffic Troubles\\San Fransisco\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191A52 0063"],"options":null},"Unlock Everything":{"note":"This will unlock all characters, tracks, mirror mode, all in-game cheats, postcards, pluto's collar and give you all Trophies for every track and difficulties. To have this cheat save to mempak, enable it and then go into the Options Menu and disable the cheat. Go to the Wide-Screen Settings and Change it to Wide-Screen [16.9] and then the B button to get back to Wide-Screen Settings, now go back into Wide-Screen [16.9] and change it back to Normal [4.3].and press the B button until you come back to the main Options Menu.Close the game and load it again to see everything saved to the Mempak and unlocked.","data":["800D3128 008F","800D3129 0094","800D312A 0003","800D312C 0001","800D312F 0080","50000502 0000","800D3130 0009","50000502 0000","800D3131 0024","800D313A 0015","800D313B 007F","800D313C 0001","800D313D 00FF","800D313E 0004","800D313F 0022"],"options":null},"Victory Vehicles\\Everglades\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018FAEB 0063"],"options":null},"Victory Vehicles\\Everglades\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FB12 0063"],"options":null},"Victory Vehicles\\Malibu\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019157B 0063"],"options":null},"Victory Vehicles\\Malibu\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801915A2 0063"],"options":null},"Victory Vehicles\\Washington DC\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019752B 0063"],"options":null},"Victory Vehicles\\Washington DC\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80197552 0063"],"options":null},"Victory Vehicles\\Yellowstone\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018D38B 0063"],"options":null},"Victory Vehicles\\Yellowstone\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018D3B2 0063"],"options":null}},"FB3C48D0-8D28F69F-C:50":{"Level Select":{"note":"","data":["80046333 00??"],"options":{"Level 1":"01","Level 10":"0A","Level 11":"0B","Level 12":"0C","Level 13":"0D","Level 14":"0E","Level 15":"0F","Level 16":"10","Level 17":"11","Level 18":"12","Level 19":"13","Level 2":"02","Level 20":"14","Level 21":"15","Level 22":"16","Level 23":"17","Level 24":"18","Level 25":"19","Level 3":"03","Level 4":"04","Level 5":"05","Level 6":"06","Level 7":"07","Level 8":"08","Level 9":"09"}},"Stop Timer From Counting Down (All Levels)":{"note":"","data":["8101D4E0 2400"],"options":null}},"FBB9F1FA-6BF88689-C:45":{"Infinite\\Atoms":{"note":"","data":["81159286 FFFF"],"options":null},"Infinite\\Lives":{"note":"","data":["80026A67 0063"],"options":null},"Infinite\\Quarks":{"note":"","data":["81159282 FFFF"],"options":null}},"FC70E272-08FFE7AA-C:50":{"0 Enemies To Kill In Big Celebration Parade":{"note":"","data":["803E4DBB 0000"],"options":null},"All levels open":{"note":"","data":["50002001 0000","803F7ED0 0001"],"options":null},"Always Raining":{"note":"","data":["803F2E5F 0005"],"options":null},"Always Snowing":{"note":"","data":["803F2E5D 0005"],"options":null},"Always in 2nd Camera Angle":{"note":"","data":["803F2B89 0001"],"options":null},"Debug Mode":{"note":"","data":["803F651F 0001"],"options":null},"Enable Secret Mini Game":{"note":"","data":["803F652D 0001"],"options":null},"Great Score":{"note":"","data":["813F2E22 03E7"],"options":null},"High Score In Evo's Escape":{"note":"","data":["813E4DDA 7FFF"],"options":null},"Infinite Health\\2 Mouse,Hyena":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DFB51 0080"],"options":null},"Infinite Health\\A. Desert Rat, Vulture, Box, Kang":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DEFD5 0080"],"options":null},"Infinite Health\\Bunny, Racing Turtle":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DF3A9 0080"],"options":null},"Infinite Health\\Cool Cod":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E4039 0080"],"options":null},"Infinite Health\\Desert Fox":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E161D 0080"],"options":null},"Infinite Health\\EVO":{"note":"","data":["801DE085 0080"],"options":null},"Infinite Health\\Elephant":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DE82D 0080"],"options":null},"Infinite Health\\Fox, Pen, Husky, Tortoise Tank":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DFF25 0080"],"options":null},"Infinite Health\\King Rat":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E19F1 0080"],"options":null},"Infinite Health\\Lion, Camel":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E02F9 0080"],"options":null},"Infinite Health\\Rocket Dog":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DEC01 0080"],"options":null},"Infinite Health\\Rocket Husky":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E1DC5 0080"],"options":null},"Infinite Health\\Spit Dog, Bear, King Pen, FB EVO":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DE459 0080"],"options":null},"Infinite Skill\\A\\King Penguin":{"note":"Only Use Infinite Skill A Codes For Animals You Need","data":["801DE5EC 0004"],"options":null},"Infinite Skill\\A\\King Rat":{"note":"Only Use Infinite Skill A Codes For Animals You Need","data":["801E1B84 0004"],"options":null},"Infinite Skill\\A\\Power Mouse":{"note":"Only Use Infinite Skill A Codes For Animals You Need","data":["801DFCE4 0004"],"options":null},"Infinite Skill\\A\\Rocket Dog":{"note":"Only Use Infinite Skill A Codes For Animals You Need","data":["801E3A24 0004"],"options":null},"Infinite Skill\\B\\Armed Desert Rat":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DF16C 0004"],"options":null},"Infinite Skill\\B\\Bear":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DE5F0 0004"],"options":null},"Infinite Skill\\B\\Boxing Kangeroo":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DF16C 0004"],"options":null},"Infinite Skill\\B\\Bunny, Racing Turtle":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DF540 0004"],"options":null},"Infinite Skill\\B\\Desert Fox":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E17B4 0004"],"options":null},"Infinite Skill\\B\\Hyena":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DF914 0004"],"options":null},"Infinite Skill\\B\\Lion":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E0490 0004"],"options":null},"Infinite Skill\\B\\Power Pen, Husky, Fox, Tort Tank":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E00BC 0004"],"options":null},"Infinite Skill\\B\\Rocket Dog":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E3A28 0004"],"options":null},"Infinite Skill\\B\\Rocket Husky":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E1F5C 0004"],"options":null},"Title Screen":{"note":"Press the Pause Button to takes you to Title Screen","data":["803F6799 0000"],"options":null}},"FC74D475-9A0278AB-C:45":{"1 Win Needed\\Player 1":{"note":"","data":["D00BAD0F 0000","800BAD0F 0001"],"options":null},"1 Win Needed\\Player 2":{"note":"","data":["D00BB04F 0000","800BB04F 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["810BACDC 42C8"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["810BB01C 42C8"],"options":null},"Infinite Time":{"note":"","data":["810E69AC 42F0"],"options":null},"Max Chemical X\\Player 1":{"note":"","data":["800BAD28 0003"],"options":null},"Max Chemical X\\Player 2":{"note":"","data":["800BB068 0003"],"options":null},"Never Win\\Player 1":{"note":"","data":["800BAD0F 0000"],"options":null},"Never Win\\Player 2":{"note":"","data":["800BB04F 0000"],"options":null},"No Chemical X\\Player 1":{"note":"","data":["800BAD28 0000"],"options":null},"No Chemical X\\Player 2":{"note":"","data":["800BB068 0000"],"options":null},"No Health\\Player 1":{"note":"","data":["810BACDC 0000"],"options":null},"No Health\\Player 2":{"note":"","data":["810BB01C 0000"],"options":null}},"FC7797BF-4A95E83C-C:50":{"Access All Bonus Cars":{"note":"","data":["50000302 0000","80098583 0001","50000302 0000","8009858B 0001"],"options":null},"Always 1st Place":{"note":"","data":["810A5F30 0001"],"options":null},"Infinite Time":{"note":"","data":["810CE72E 03E7"],"options":null},"Max Points":{"note":"","data":["810CE702 010A"],"options":null},"Speedometer Select":{"note":"","data":["810CE7C2 00??"],"options":{"KM/H":"00","MPH":"01"}},"Start On Lap Modifier":{"note":"","data":["D00A5F35 0000","810A5F34 00??"],"options":{"Lap 1":"01","Lap 2":"02","Lap 3":"03","Lap 4":"04","Lap 5":"06","Lap 6":"06","Last Lap from Start":"07","Normal":"00"}},"Track Direction Unlocked (All Levels)":{"note":"","data":["800A4131 0003"],"options":null}},"FCBCCB21-72903C6B-C:45":{"Ebisumaru\\Automatically Complete Ebisumaru's Training":{"note":"","data":["803B52F4 0008"],"options":null},"Ebisumaru\\Have\\Magic Mini Ebisu":{"note":"","data":["8015C6F3 0001"],"options":null},"Ebisumaru\\Have\\Meat Saw Hammer":{"note":"","data":["8015C6C3 0001"],"options":null},"Ebisumaru\\Have\\Windup Camera":{"note":"","data":["8015C6D3 0001"],"options":null},"Ebisumaru\\Saw Hammer Modifier":{"note":"","data":["8015C6B3 00??"],"options":{"Gold Saw Hammer":"02","Normal Saw Hammer":"00","Silver Saw Hammer":"01"}},"Goemon\\D-Pad Left To Charge Laser":{"note":"","data":["D00C7D3A 0002","802F706F 0064"],"options":null},"Goemon\\D-Pad Up To Refill Oil":{"note":"","data":["D0067D3A 0008","812F706A 03E7"],"options":null},"Goemon\\Have\\Chain Pipe":{"note":"","data":["8015C6BF 0002"],"options":null},"Goemon\\Have\\Magic Sudden Impact":{"note":"","data":["8015C6EF 0001"],"options":null},"Goemon\\Have\\Medal of Flames":{"note":"","data":["8015C6DF 0001"],"options":null},"Goemon\\Maximum Money":{"note":"","data":["812F70EA 03E7"],"options":null},"Goemon\\Pipe Modifier":{"note":"","data":["8015C6AF 00??"],"options":{"Gold Pipe":"02","Normal Pipe":"00","Silver Pipe":"01"}},"Goemon\\Robot Boss' Has No Health":{"note":"","data":["812F7062 0000"],"options":null},"Have\\Blue Fish":{"note":"","data":["8015C723 0001"],"options":null},"Have\\Blue Sausage":{"note":"","data":["8015C717 0001"],"options":null},"Have\\Brown Item":{"note":"","data":["8015C703 0001"],"options":null},"Have\\Brown Round Item":{"note":"","data":["8015C70F 0001"],"options":null},"Have\\Gold Fish":{"note":"","data":["8015C71F 0001"],"options":null},"Have\\Gold Key":{"note":"","data":["8015C713 0001"],"options":null},"Have\\Pink Fish":{"note":"","data":["8015C71B 0001"],"options":null},"Have\\Silver Fortune Doll":{"note":"","data":["8015C707 0001"],"options":null},"Have\\Triton Shell":{"note":"","data":["8015C6FF 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8015C5E7 0028"],"options":null},"Infinite\\Lives":{"note":"","data":["8015C5EF 0009"],"options":null},"Infinite\\Money":{"note":"","data":["8115C5EA 270F"],"options":null},"Max Heart Containers":{"note":"","data":["8015C5E3 0027"],"options":null},"Play As":{"note":"","data":["8015C5DF 00??"],"options":{"Ebisumaru":"01","Goemon":"00","Sasuke":"02","Yae":"03"}},"Press\\L To Levitate":{"note":"","data":["D00C7D3B 0020","8116A044 4000"],"options":null},"Press\\R To Use Chargeable Weapon":{"note":"","data":["D00C7D3B 0010","8120C896 005D"],"options":null},"Sasuke\\Have\\Fire Cracker Bomb":{"note":"","data":["8015C6C7 0001"],"options":null},"Sasuke\\Have\\Kunai of Severe Cold":{"note":"","data":["8015C6D7 0001"],"options":null},"Sasuke\\Have\\Magic Flying":{"note":"","data":["8015C6F7 0001"],"options":null},"Sasuke\\Kunai Modifier":{"note":"","data":["8015C6B7 00??"],"options":{"2 Kunai's":"01","Gold Kunai":"02","Normal Kunai":"00"}},"Yae\\Have\\Bazooka":{"note":"","data":["8015C6DB 0001"],"options":null},"Yae\\Have\\Flute":{"note":"","data":["8015C6CB 0001"],"options":null},"Yae\\Have\\Magic Mermaid":{"note":"","data":["8015C6FB 0001"],"options":null},"Yae\\Katana Modifier":{"note":"","data":["8015C6BB 00??"],"options":{"Gold Katana":"02","Normal Katana":"00","Silver Katana":"01"}}},"FCE0D799-65316C54-C:45":{"Infinite\\Armor\\Player 1":{"note":"","data":["8011D467 0064"],"options":null},"Infinite\\Armor\\Player 2":{"note":"","data":["8011D46B 0064"],"options":null},"Infinite\\Bombs\\Player 1":{"note":"","data":["8011D46F 0003"],"options":null},"Infinite\\Bombs\\Player 2":{"note":"","data":["8011D473 0003"],"options":null},"Level 11 Vulcan Cannon\\Player 1":{"note":"","data":["801239B3 000A"],"options":null},"Level 11 Vulcan Cannon\\Player 2":{"note":"","data":["801239D3 000A"],"options":null},"Press L For Rapid Fire Select\\Player 1":{"note":"","data":["D011BE01 0020","8011D497 00??"],"options":{"On Flak":"14","On Nuke \u0026 Laser":"28"}},"Press L For Rapid Fire Select\\Player 2":{"note":"","data":["D011BE09 0020","8011D49B 00??"],"options":{"On Flak":"14","On Nuke \u0026 Laser":"28"}}},"FD73F775-9724755A-C:50":{"Enable All Cheats":{"note":"Go into Options \u0026 then Magic Codes. Then Code list to turn off \u0026 on what you want.","data":["800DFE2C 001F","50000301 0000","800DFE2D 00FF"],"options":null},"Have All\\50 Balloons":{"note":"","data":["8020807D 0032"],"options":null},"Have All\\Control Drumstick \u0026 Adventure Two mode unlocked":{"note":"","data":["801264DC 0003","801264DF 0003","801264F2 0003","801264F3 0008"],"options":null},"Have All\\Keys":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80207E69 001F"],"options":null},"Have All\\None-Adventure tracks completed":{"note":"","data":["50001204 0000","80207F87 0007","50000904 0000","80207FDF 0007","80207E68 0007","80207E6A 0007","80207E6B 0007","80207E6C 000F","80207E6D 00FF"],"options":null},"Have All\\T.T. Amulets":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80207E77 0004"],"options":null},"Have All\\T.T. time trial races beaten":{"note":"","data":["80207E76 0004"],"options":null},"Have All\\Trophies":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80207E6E 0007","80207E6F 00FF"],"options":null},"Have All\\Trophy Adventure races unlocked":{"note":"","data":["50000502 0000","8020807E 0007"],"options":null}},"FDA245D2-A74A3D47-C:45":{"All Tracks Unlocked":{"note":"","data":["8019436E 0008","50000264 0000","80167747 0001","50000264 0000","80167873 0001","50000564 0000","8016799F 0001"],"options":null},"Bike Modifier\\Player 1":{"note":"","data":["80167C3F 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 2":{"note":"","data":["80167C8B 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 3":{"note":"","data":["80167CD7 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 4":{"note":"","data":["80167D23 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Extra Bikes Unlocked":{"note":"","data":["80167C13 0001","80167C17 0003"],"options":null},"Extra Levels Unlocked":{"note":"","data":["80167C0B 0001","80167C0F 0001"],"options":null},"Infinite Primary Weapon\\Player 1":{"note":"","data":["801635FD 00C8"],"options":null},"Infinite Primary Weapon\\Player 2":{"note":"","data":["80163D6D 00C8"],"options":null},"Infinite Primary Weapon\\Player 3":{"note":"","data":["801644DD 00C8"],"options":null},"Infinite Primary Weapon\\Player 4":{"note":"","data":["80164C4D 00C8"],"options":null},"Infinite Shields\\Player 1":{"note":"","data":["801635F5 00C8"],"options":null},"Infinite Shields\\Player 2":{"note":"","data":["80163D65 00C8"],"options":null},"Infinite Shields\\Player 3":{"note":"","data":["801644D5 00C8"],"options":null},"Infinite Shields\\Player 4":{"note":"","data":["80164C45 00C8"],"options":null},"Infinite Turbos\\Player 1":{"note":"","data":["801635CB 0003","801635CF 0003"],"options":null},"Infinite Turbos\\Player 2":{"note":"","data":["80163D3B 0003","80163D3F 0003"],"options":null},"Infinite Turbos\\Player 3":{"note":"","data":["801644AB 0003","801644AF 0003"],"options":null},"Infinite Turbos\\Player 4":{"note":"","data":["80164C1B 0003","80164C1F 0003"],"options":null},"Mode Select":{"note":"","data":["80095F6F 00??"],"options":{"Anti-Gravity":"08","Anti-Gravity \u0026 Fish Eye Lens":"0A","Boulder":"01","Boulder \u0026 Fish Eye Lens":"03","Boulder \u0026 Wireframe":"11","Fish Eye Lens":"02","Ghost Mode":"40","Magnify":"04","Stealth Mode":"20","Ugly Mode":"80","Wireframe":"10"}}},"FE94E570-E4873A9C-C:44":{"Have 1 Star\\Abdul":{"note":"","data":["80307333 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["8030732F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80307332 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80307331 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80307334 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80307330 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["8030732E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80307335 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80307336 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["80209881 0000","802047A3 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802047A7 0000","8020B749 0000"],"options":null},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EF57B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0209737 0000","80209737 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020B5FF 0000","8020B5FF 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810ADADC 3F80"],"options":null}},"FEE97010-4E94A9A0-C:50":{"Access All\\Cars,Tracks \u0026 Golg Trophies":{"note":"","data":["50000402 0000","81043AA0 FFFF"],"options":null},"Access All\\Platinum Trophies":{"note":"","data":["8102F70C FFFF","8102F70E FFFF"],"options":null},"Access\\Galage '88 UFO Car":{"note":"","data":["810E2C20 0028"],"options":null},"Always 1st":{"note":"","data":["810569B4 0001"],"options":null},"Always Engine Class S":{"note":"","data":["81043AB0 0000"],"options":null},"Easy Mode":{"note":"","data":["81057B10 0001"],"options":null},"Easy Win":{"note":"","data":["810569BA 0007"],"options":null},"Freeze Lap Timer":{"note":"Select Car Attack, And You'll Have All The Cars At Your Disposal For A Quick Spin !!","data":["810569DE 014D"],"options":null},"Infinite Time":{"note":"","data":["811280B2 0C00"],"options":null},"Laps to Race":{"note":"Here you can choose how many laps are in the race, 1-9. Do not use with Option 7-9.","data":["8111CA16 00??"],"options":{"1 Lap to Race":"01","2 Laps to Race":"02","3 Laps to Race":"03","4 Laps to Race":"04","5 Laps to Race":"05","6 Laps to Race":"06","7 Laps to Race":"07","8 Laps to Race":"08","9 Laps to Race":"09"}},"Ultra 64":{"note":"Pick any car, beat stage 8: RR Extreme Extra and the UFO car is yours to drive!","data":["8113DDBA 0018"],"options":null}},"FF14C1DA-167FDE92-C:45":{"In-Game Cheats\\Access Cheat menu":{"note":"","data":["50000504 0000","80100778 0001"],"options":null},"In-Game Cheats\\Enable\\All Items":{"note":"To access simply pause in game play \u0026 then unpause.","data":["8010075C 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Invincibility":{"note":"","data":["802A9C88 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Monsters":{"note":"","data":["802A9DFB 00??"],"options":{"Are Active":"00","Are Gone":"01"}},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A4FF6 0064","812A503E 0064","812A504E 00C8","812A5038 1900","812A5008 04B0","812A503A 0640","812A4FD8 0960","812A503C 0190"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Keys":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A4FF3 000F"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A5067 0001","50000E02 0000","812A4FAC 03E7"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Infinite Health (All Levels)":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on Single-Player, Co-Operative and DUKEMATCH, All Levels.","data":["8024C747 0064","802A4FA9 0064"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5382 0064","812A53CA 0064","812A53DA 00C8","812A53C4 1900","812A5394 04B0","812A53C6 0640","812A5364 0960","812A53C8 0190"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A53F3 0001","50000E02 0000","812A5338 03E7"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on DUKEMATCH, All Levels.","data":["8024AE2F 0064","802A5335 0064"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A570E 0064","812A5756 0064","812A5766 00C8","812A5750 1900","812A5720 04B0","812A5752 0640","812A56F0 0960","812A5754 0190"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A577F 0001","50000E02 0000","812A56C4 03E7"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 4 on DUKEMATCH, All Levels.","data":["8024A98B 0064","802A56C1 0064"],"options":null},"Single-Player (All Levels)\\Have All\\Items \u0026 Infinite Use on all levels":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of. Just press D-Pad Up or D-Pad Down to enable.","data":["812A4C4C 0960","812A4C6A 0064","812A4C7C 04B0","812A4CAC 1900","812A4CAE 0640","812A4CB0 0190","812A4CB2 0064","812A4CC2 00C8"],"options":null},"Single-Player (All Levels)\\Have All\\Keys":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A4C67 000F"],"options":null},"Single-Player (All Levels)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000B01 0000","802A4CD9 0001","50000C02 0000","812A4C20 03E7"],"options":null},"Single-Player (All Levels)\\Have Infinite Health (All Levels)":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels and does what it says on the tin. Infinite health for player 1, All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["80246683 0064","8026DE7B 0064","802A4C1D 0064"],"options":null}},"FF2F2FB4-D161149A-C:45":{"Always Place 1st":{"note":"","data":["8015025B 0001"],"options":null},"Car Upgrades\\'63 Muscle Car":{"note":"","data":["8015065F 0005"],"options":null},"Car Upgrades\\All-Terrain Vehicle":{"note":"","data":["8015066F 0004"],"options":null},"Car Upgrades\\Devastator":{"note":"","data":["80150667 0005"],"options":null},"Car Upgrades\\Italia P69":{"note":"","data":["8015066B 0005"],"options":null},"Car Upgrades\\La Bomba":{"note":"","data":["80150663 0005"],"options":null},"Car Upgrades\\Police Car":{"note":"","data":["80150677 0004"],"options":null},"Car Upgrades\\School Bus":{"note":"","data":["80150673 0004"],"options":null},"Infinite Time":{"note":"","data":["80150A6D 0045"],"options":null},"Play Level Modifier":{"note":"","data":["80150A83 00??"],"options":{"Appalachia":"0C","Arizona":"07","Beverly Hills":"04","Chicago":"0A","Cruise The USA":"0E","Death Valley":"06","Golden Gate Park":"00","Grand Canyon":"08","Indiana":"0B","Iowa":"09","LA Freeway":"05","Redwood Forest":"03","San Francisco":"01","US 101":"02","Washington DC":"0D"}},"Player 1\\Always First Place":{"note":"","data":["8015034B 0001"],"options":null},"Player 1\\Always Have Fastest Car":{"note":"","data":["8015033A 000C"],"options":null},"Player 1\\Gearbox Type Modifier":{"note":"","data":["80150333 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 1\\Lights \u0026 Sirens For Police Car \u0026 School Bus":{"note":"","data":["8115065A 0001","8114E4AA 0001"],"options":null},"Player 2\\Always First Place":{"note":"","data":["801506E7 0001"],"options":null},"Player 2\\Always Have Fastest Car":{"note":"","data":["801506D6 000C"],"options":null},"Player 2\\Gearbox Type Modifier":{"note":"","data":["801506CF 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 2\\Lights \u0026 Sirens For Police Car \u0026 School Bus":{"note":"","data":["811509F6 0001","8114E4C2 0001"],"options":null},"Stop Elapsed Time And No Traffic":{"note":"","data":["80150A69 0000"],"options":null},"Unlimited Time":{"note":"","data":["80150A68 0095","8015097D 0095"],"options":null}}} \ No newline at end of file diff --git a/src/cheats.rs b/src/cheats.rs new file mode 100644 index 0000000..0fe876d --- /dev/null +++ b/src/cheats.rs @@ -0,0 +1,187 @@ +use crate::device; +use crate::ui; + +#[derive(serde::Serialize, serde::Deserialize, Copy, Clone)] +pub struct DecodedCheat { + code_type: u8, + address: u32, + data: u16, +} + +#[derive(serde::Serialize, serde::Deserialize)] +pub struct Cheats { + pub cheats: Vec>, + pub boot: bool, +} + +pub fn init( + device: &mut device::Device, + cheat_settings: std::collections::HashMap>, +) { + let cheats = + serde_json::from_slice::(include_bytes!("../data/cheats.json")) + .unwrap() + .get(&ui::storage::get_game_crc(&device.cart.rom)) + .cloned() + .unwrap_or_default(); + + let re = regex::Regex::new(r"\?+").unwrap(); + for cheat_setting in cheat_settings.iter() { + if let Some(cheat_data) = cheats.get(cheat_setting.0) { + let mut option_value = None; + if let Some(option) = cheat_setting.1 { + if let Some(found_option_value) = cheat_data + .options + .as_ref() + .cloned() + .unwrap_or_default() + .get(option) + { + option_value = Some(found_option_value.to_string()); + } else { + panic!("Cheat option: {option} not found"); + } + } + + println!( + "Cheat: {} Option: {}", + cheat_setting.0, + cheat_setting.1.clone().unwrap_or("none".to_string()) + ); + let mut decoded_cheat: Vec = vec![]; + for code in cheat_data.data.iter() { + let mut result = code.clone(); + if let Some(option_value) = option_value.as_ref() { + result = re.replace_all(code, option_value).into_owned(); + } + let mut split = result.split_whitespace(); + let first_part = u32::from_str_radix(split.next().unwrap(), 16).unwrap(); + decoded_cheat.push(DecodedCheat { + code_type: (first_part >> 24) as u8, + address: first_part & 0x00FFFFFF, + data: u16::from_str_radix(split.next().unwrap(), 16).unwrap(), + }); + } + device.cheats.cheats.push(decoded_cheat); + } else { + println!("Could not find cheat: {}", cheat_setting.0); + } + } + + if !device.cheats.cheats.is_empty() { + ui::audio::play_cheat_event(&device.ui); + } +} + +fn write_byte(device: &mut device::Device, cheat_line: &DecodedCheat) { + *device + .rdram + .mem + .get_mut(cheat_line.address as usize ^ device.byte_swap) + .unwrap_or(&mut 0) = cheat_line.data as u8; +} + +fn write_half(device: &mut device::Device, cheat_line: &DecodedCheat) { + *device + .rdram + .mem + .get_mut(cheat_line.address as usize ^ device.byte_swap) + .unwrap_or(&mut 0) = (cheat_line.data >> 8) as u8; + *device + .rdram + .mem + .get_mut((cheat_line.address + 1) as usize ^ device.byte_swap) + .unwrap_or(&mut 0) = cheat_line.data as u8; +} + +fn equal_byte(device: &mut device::Device, cheat_line: &DecodedCheat) -> bool { + let current_value = *device + .rdram + .mem + .get(cheat_line.address as usize ^ device.byte_swap) + .unwrap_or(&0); + current_value == (cheat_line.data as u8) +} + +fn equal_half(device: &mut device::Device, cheat_line: &DecodedCheat) -> bool { + let current_value1 = *device + .rdram + .mem + .get(cheat_line.address as usize ^ device.byte_swap) + .unwrap_or(&0); + let current_value2 = *device + .rdram + .mem + .get((cheat_line.address + 1) as usize ^ device.byte_swap) + .unwrap_or(&0); + current_value1 == (cheat_line.data >> 8) as u8 && current_value2 == cheat_line.data as u8 +} + +pub fn execute_cheats(device: &mut device::Device, cheats: Vec>) { + for cheat in cheats.iter() { + let mut valid = true; + let mut cheat_iter = cheat.iter().peekable(); + while let Some(cheat_line) = cheat_iter.next() { + match cheat_line.code_type { + 0x50 => { + if valid { + let mut expanded_cheat: Vec = vec![]; + let compressed_cheat = *cheat_iter.peek().unwrap(); + let count = (cheat_line.address & 0xFF00) >> 8; + let offset = cheat_line.address & 0xFF; + for i in 0..count { + let line = DecodedCheat { + code_type: compressed_cheat.code_type, + address: compressed_cheat.address + (i * offset), + data: compressed_cheat.data + + (i as i16 * cheat_line.data as i16) as u16, + }; + expanded_cheat.push(line); + } + execute_cheats(device, [expanded_cheat].to_vec()); + } + valid = false; // skip the next line + } + 0x80 | 0xA0 => { + if valid { + write_byte(device, cheat_line); + } + valid = true; + } + 0x81 | 0xA1 => { + if valid { + write_half(device, cheat_line); + } + valid = true; + } + 0xF0 => { + if device.cheats.boot && valid { + write_byte(device, cheat_line); + valid = true; + } + } + 0xF1 => { + if device.cheats.boot && valid { + write_half(device, cheat_line); + valid = true; + } + } + 0xD0 => { + valid = equal_byte(device, cheat_line); + } + 0xD1 => { + valid = equal_half(device, cheat_line); + } + 0xD2 => { + valid = !equal_byte(device, cheat_line); + } + 0xD3 => { + valid = !equal_half(device, cheat_line); + } + 0x88 | 0x89 | 0xD8 | 0xD9 | 0xDA | 0xDB => { /* GS button not emulated */ } + _ => panic!("Unknown cheat code type: {:X}", cheat_line.code_type), + } + } + } + device.cheats.boot = false; +} diff --git a/src/device.rs b/src/device.rs index c838b50..f9feb0e 100644 --- a/src/device.rs +++ b/src/device.rs @@ -12,7 +12,7 @@ use std::arch::x86_64::*; use rand_chacha::rand_core::{RngCore, SeedableRng}; -use crate::{netplay, ui}; +use crate::{cheats, netplay, ui}; use std::{collections::HashMap, fs, io::Read}; pub mod ai; @@ -77,6 +77,8 @@ pub fn run_game(device: &mut Device, rom_contents: Vec, game_settings: ui::g ui::storage::init(&mut device.ui, &device.cart.rom); ui::storage::load_saves(&mut device.ui, &mut device.netplay); + cheats::init(device, game_settings.cheats); + cpu::run(device); ui::input::close(&mut device.ui); @@ -188,7 +190,7 @@ pub struct Device { pub netplay: Option, #[serde(skip, default = "ui::Ui::default")] pub ui: ui::Ui, - byte_swap: usize, + pub byte_swap: usize, pub save_state: bool, pub load_state: bool, pub cpu: cpu::Cpu, @@ -209,6 +211,7 @@ pub struct Device { pub vru: controller::vru::Vru, pub vru_window: controller::vru::VruWindow, pub transferpaks: [controller::transferpak::TransferPak; 4], + pub cheats: cheats::Cheats, } pub fn zero_m128i() -> __m128i { @@ -500,6 +503,10 @@ impl Device { controller::transferpak::TransferPak::default(), controller::transferpak::TransferPak::default(), ], + cheats: cheats::Cheats { + cheats: vec![], + boot: true, + }, } } } diff --git a/src/device/ai.rs b/src/device/ai.rs index fbc989f..548b289 100644 --- a/src/device/ai.rs +++ b/src/device/ai.rs @@ -146,8 +146,8 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u AI_DACRATE_REG => { if device.ai.regs[reg as usize] != value & mask { device.ai.freq = device.vi.clock / (1 + (value & mask)) as u64; - ui::audio::close(&mut device.ui); - ui::audio::init(&mut device.ui, device.ai.freq) + ui::audio::close_game_audio(&mut device.ui); + ui::audio::init_game_audio(&mut device.ui, device.ai.freq) } device::memory::masked_write_32(&mut device.ai.regs[reg as usize], value, mask) } diff --git a/src/device/vi.rs b/src/device/vi.rs index 881b8fa..a0fad2f 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -1,4 +1,4 @@ -use crate::{device, netplay, ui}; +use crate::{cheats, device, netplay, ui}; use governor::clock::Clock; const VI_STATUS_REG: u32 = 0; @@ -134,6 +134,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } pub fn vertical_interrupt_event(device: &mut device::Device) { + cheats::execute_cheats(device, device.cheats.cheats.clone()); let mut speed_limiter_toggled = ui::video::check_callback(device); if device.netplay.is_some() { diff --git a/src/main.rs b/src/main.rs index 2aa26b7..877a64c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,6 +3,7 @@ #[global_allocator] static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; +mod cheats; mod device; mod netplay; mod savestates; @@ -148,6 +149,12 @@ async fn main() { let mut device = device::Device::new(); let overclock = device.ui.config.emulation.overclock; let disable_expansion_pak = device.ui.config.emulation.disable_expansion_pak; + + let game_cheats = { + let game_crc = ui::storage::get_game_crc(&rom_contents); + let cheats = ui::config::Cheats::new(); + cheats.cheats.get(&game_crc).cloned().unwrap_or_default() + }; device::run_game( &mut device, rom_contents, @@ -155,6 +162,7 @@ async fn main() { fullscreen: args.fullscreen, overclock, disable_expansion_pak, + cheats: game_cheats, }, ); }) diff --git a/src/savestates.rs b/src/savestates.rs index a0b6398..1675ab7 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -120,6 +120,7 @@ pub fn load_savestate(device: &mut device::Device) { device.si = state.si; device.ri = state.ri; device.vru = state.vru; + device.cheats = state.cheats; let mut tpak_rom = [vec![], vec![], vec![], vec![]]; for (i, item) in tpak_rom.iter_mut().enumerate() { diff --git a/src/ui.rs b/src/ui.rs index 9d799cb..d529ae8 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -1,4 +1,5 @@ pub mod audio; +pub mod cheats; pub mod config; pub mod gui; pub mod input; @@ -13,6 +14,7 @@ pub struct Dirs { } pub struct Audio { + pub audio_device_spec: sdl3_sys::audio::SDL_AudioSpec, pub audio_stream: *mut sdl3_sys::audio::SDL_AudioStream, pub event_audio_stream: *mut sdl3_sys::audio::SDL_AudioStream, pub audio_device: u32, @@ -178,7 +180,9 @@ impl Ui { include_bytes!("../data/netplay_p3_disconnected.wav").to_vec(), include_bytes!("../data/netplay_p4_disconnected.wav").to_vec(), ], + cheats_enabled: include_bytes!("../data/cheats_enabled.wav").to_vec(), }, + audio_device_spec: Default::default(), audio_stream: std::ptr::null_mut(), event_audio_stream: std::ptr::null_mut(), audio_device: 0, diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 9c547ac..9e0caf8 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -9,16 +9,12 @@ pub struct EventAudio { pub netplay_desync: Vec, pub netplay_lost_connection: Vec, pub netplay_disconnected: [Vec; 4], + pub cheats_enabled: Vec, } pub fn init(ui: &mut ui::Ui, frequency: u64) { ui::sdl_init(sdl3_sys::init::SDL_INIT_AUDIO); - let game_audio_spec = sdl3_sys::audio::SDL_AudioSpec { - format: sdl3_sys::audio::SDL_AUDIO_S16LE, - freq: frequency as i32, - channels: 2, - }; let device_audio_spec = sdl3_sys::audio::SDL_AudioSpec { format: sdl3_sys::audio::SDL_AUDIO_S16LE, freq: 48000, @@ -34,37 +30,25 @@ pub fn init(ui: &mut ui::Ui, frequency: u64) { panic!("Could not open audio device"); } - let mut dst = Default::default(); if !unsafe { sdl3_sys::audio::SDL_GetAudioDeviceFormat( ui.audio.audio_device, - &mut dst, + &mut ui.audio.audio_device_spec, std::ptr::null_mut(), ) } { panic!("Could not get audio device format"); } - ui.audio.audio_stream = - unsafe { sdl3_sys::audio::SDL_CreateAudioStream(&game_audio_spec, &dst) }; - if ui.audio.audio_stream.is_null() { - return; - } - if !unsafe { - sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.audio_stream, ui.audio.gain) - && sdl3_sys::audio::SDL_BindAudioStream(ui.audio.audio_device, ui.audio.audio_stream) - } { - panic!("Could not bind audio stream"); - } - let wav_audio_spec = sdl3_sys::audio::SDL_AudioSpec { format: sdl3_sys::audio::SDL_AUDIO_S16LE, freq: 24000, channels: 1, }; - ui.audio.event_audio_stream = - unsafe { sdl3_sys::audio::SDL_CreateAudioStream(&wav_audio_spec, &dst) }; + ui.audio.event_audio_stream = unsafe { + sdl3_sys::audio::SDL_CreateAudioStream(&wav_audio_spec, &ui.audio.audio_device_spec) + }; if !unsafe { sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.event_audio_stream, ui.audio.gain) && sdl3_sys::audio::SDL_BindAudioStream( @@ -74,14 +58,33 @@ pub fn init(ui: &mut ui::Ui, frequency: u64) { } { panic!("Could not bind audio stream"); } + init_game_audio(ui, frequency); +} + +pub fn init_game_audio(ui: &mut ui::Ui, frequency: u64) { + let game_audio_spec = sdl3_sys::audio::SDL_AudioSpec { + format: sdl3_sys::audio::SDL_AUDIO_S16LE, + freq: frequency as i32, + channels: 2, + }; + + ui.audio.audio_stream = unsafe { + sdl3_sys::audio::SDL_CreateAudioStream(&game_audio_spec, &ui.audio.audio_device_spec) + }; + if ui.audio.audio_stream.is_null() { + return; + } + if !unsafe { + sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.audio_stream, ui.audio.gain) + && sdl3_sys::audio::SDL_BindAudioStream(ui.audio.audio_device, ui.audio.audio_stream) + } { + panic!("Could not bind audio stream"); + } } pub fn close(ui: &mut ui::Ui) { + close_game_audio(ui); unsafe { - if !ui.audio.audio_stream.is_null() { - sdl3_sys::audio::SDL_DestroyAudioStream(ui.audio.audio_stream); - ui.audio.audio_stream = std::ptr::null_mut(); - } if !ui.audio.event_audio_stream.is_null() { sdl3_sys::audio::SDL_DestroyAudioStream(ui.audio.event_audio_stream); ui.audio.event_audio_stream = std::ptr::null_mut(); @@ -91,6 +94,15 @@ pub fn close(ui: &mut ui::Ui) { } } +pub fn close_game_audio(ui: &mut ui::Ui) { + unsafe { + if !ui.audio.audio_stream.is_null() { + sdl3_sys::audio::SDL_DestroyAudioStream(ui.audio.audio_stream); + ui.audio.audio_stream = std::ptr::null_mut(); + } + } +} + pub fn lower_audio_volume(ui: &mut ui::Ui) { unsafe { ui.audio.gain = sdl3_sys::audio::SDL_GetAudioStreamGain(ui.audio.audio_stream) - 0.05; @@ -113,6 +125,22 @@ pub fn raise_audio_volume(ui: &mut ui::Ui) { } } +pub fn play_cheat_event(ui: &ui::Ui) { + if ui.audio.event_audio_stream.is_null() { + return; + } + let sound = &ui.audio.event_audio.cheats_enabled; + if !unsafe { + sdl3_sys::audio::SDL_PutAudioStreamData( + ui.audio.event_audio_stream, + sound.as_ptr() as *const std::ffi::c_void, + sound.len() as i32, + ) + } { + panic!("Could not play audio"); + } +} + pub fn play_netplay_audio(ui: &ui::Ui, error: u32) { if ui.audio.event_audio_stream.is_null() { return; diff --git a/src/ui/cheats.rs b/src/ui/cheats.rs new file mode 100644 index 0000000..26a970f --- /dev/null +++ b/src/ui/cheats.rs @@ -0,0 +1,148 @@ +use crate::device; +use crate::ui; +use crate::ui::gui::AppWindow; +use crate::ui::gui::ErrorDialog; +use slint::ComponentHandle; + +#[derive(serde::Serialize, serde::Deserialize, Clone)] +pub struct CheatData { + note: String, + pub data: Vec, + pub options: Option>, +} + +pub type Cheats = std::collections::BTreeMap>; + +pub fn cheats_window(app: &AppWindow) { + let weak = app.as_weak(); + app.on_cheats_select_rom_clicked(move || { + let select_rom = rfd::AsyncFileDialog::new() + .set_title("Select ROM") + .pick_file(); + let weak = weak.clone(); + tokio::spawn(async move { + if let Some(file) = select_rom.await + && let Some(rom_contents) = device::get_rom_contents(file.path()) + { + let game_crc = ui::storage::get_game_crc(&rom_contents); + let game_name = ui::storage::get_game_name(&rom_contents); + weak.upgrade_in_event_loop(move |handle| { + handle.set_cheat_game_name(game_name.into()); + }) + .unwrap(); + let cheats: Cheats = + serde_json::from_slice(include_bytes!("../../data/cheats.json")).unwrap(); + if let Some(cheat) = cheats.get(&game_crc) { + let cheat = cheat.clone(); + weak.upgrade_in_event_loop(move |handle| { + let cheat_settings = ui::config::Cheats::new(); + let game_cheats = cheat_settings.cheats.get(&game_crc).cloned(); + handle.set_cheat_game_crc(game_crc.into()); + let cheats_vec = slint::VecModel::default(); + for item in cheat.iter() { + let mut cheat_enabled = false; + if let Some(game_cheat) = game_cheats.as_ref() + && game_cheat.contains_key(item.0) + { + cheat_enabled = true; + } + let options_vec = slint::VecModel::default(); + if let Some(options) = item.1.options.as_ref() { + for option in options.iter() { + let mut option_enabled = false; + if let Some(game_cheat) = game_cheats.as_ref() + && game_cheat.contains_key(item.0) + && let Some(opt) = game_cheat.get(item.0) + && let Some(opt) = opt + && opt == option.0 + { + option_enabled = true; + } + options_vec.push((option_enabled, option.0.into())); + } + } + let options = slint::ModelRc::from(std::rc::Rc::new(options_vec)); + cheats_vec.push(( + item.0.clone().into(), + cheat_enabled, + item.1.clone().note.into(), + options, + )); + } + #[allow(clippy::type_complexity)] + let cheats_model: std::rc::Rc< + slint::VecModel<( + slint::SharedString, + bool, + slint::SharedString, + slint::ModelRc<(bool, slint::SharedString)>, + )>, + > = std::rc::Rc::new(cheats_vec); + handle.set_cheats(slint::ModelRc::from(cheats_model)); + }) + .unwrap(); + } else { + clear_cheats(&weak, false); + } + } else { + clear_cheats(&weak, true); + weak.upgrade_in_event_loop(move |_handle| { + let message_dialog = ErrorDialog::new().unwrap(); + let weak_dialog = message_dialog.as_weak(); + message_dialog.on_close_clicked(move || { + weak_dialog.unwrap().window().hide().unwrap(); + }); + message_dialog.set_text("Could not read ROM".into()); + message_dialog.show().unwrap(); + }) + .unwrap(); + } + }); + }); + + let weak = app.as_weak(); + app.on_cheats_clear_clicked(move || { + let mut cheats = ui::config::Cheats::new(); + cheats.cheats.clear(); + clear_cheats(&weak, true); + }); + + app.on_cheat_toggled(move |game_crc, cheat_name, option, enabled| { + let mut cheats = ui::config::Cheats::new(); + let mut game_cheats = cheats + .cheats + .remove(&game_crc.to_string()) + .unwrap_or_default(); + if enabled { + let cheat_option = if option.is_empty() { + None + } else { + Some(option.into()) + }; + game_cheats.insert(cheat_name.into(), cheat_option); + } else { + game_cheats.remove(&cheat_name.to_string()); + } + cheats.cheats.insert(game_crc.into(), game_cheats); + }); +} + +fn clear_cheats(weak: &slint::Weak, clear_name: bool) { + weak.upgrade_in_event_loop(move |handle| { + let cheats_vec = slint::VecModel::default(); + #[allow(clippy::type_complexity)] + let cheats_model: std::rc::Rc< + slint::VecModel<( + slint::SharedString, + bool, + slint::SharedString, + slint::ModelRc<(bool, slint::SharedString)>, + )>, + > = std::rc::Rc::new(cheats_vec); + handle.set_cheats(slint::ModelRc::from(cheats_model)); + if clear_name { + handle.set_cheat_game_name("".into()); + } + }) + .unwrap(); +} diff --git a/src/ui/config.rs b/src/ui/config.rs index ae34dcc..26f5f4a 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -56,6 +56,12 @@ pub struct Emulation { pub disable_expansion_pak: bool, } +#[derive(serde::Serialize, serde::Deserialize)] +pub struct Cheats { + pub cheats: + std::collections::HashMap>>, +} + #[derive(serde::Serialize, serde::Deserialize)] pub struct Config { pub input: Input, @@ -63,6 +69,36 @@ pub struct Config { pub emulation: Emulation, } +impl Drop for Cheats { + fn drop(&mut self) { + write_cheats(self); + } +} + +fn write_cheats(cheats: &Cheats) { + let dirs = ui::get_dirs(); + let file_path = dirs.config_dir.join("cheats.json"); + let f = std::fs::File::create(file_path).unwrap(); + serde_json::to_writer_pretty(f, &cheats).unwrap(); +} + +impl Cheats { + pub fn new() -> Cheats { + let dirs = ui::get_dirs(); + let file_path = dirs.config_dir.join("cheats.json"); + let cheats_file = std::fs::read(file_path); + if let Ok(cheats_file) = cheats_file { + let result = serde_json::from_slice(cheats_file.as_ref()); + if let Ok(result) = result { + return result; + } + } + Cheats { + cheats: std::collections::HashMap::new(), + } + } +} + impl Drop for Config { fn drop(&mut self) { write_config(self); diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 7a65139..2807d59 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -30,6 +30,7 @@ pub struct GameSettings { pub fullscreen: bool, pub overclock: bool, pub disable_expansion_pak: bool, + pub cheats: std::collections::HashMap>, } fn check_latest_version(weak: slint::Weak) { @@ -285,6 +286,7 @@ pub fn app_window() { } local_game_window(&app, &controller_paths); ui::netplay::netplay_window(&app, &controller_paths); + ui::cheats::cheats_window(&app); app.run().unwrap(); save_settings(&app, &controller_paths); } @@ -336,7 +338,7 @@ fn setup_vru_word_watcher( pub fn run_rom( gb_paths: GbPaths, file_path: std::path::PathBuf, - game_settings: GameSettings, + mut game_settings: GameSettings, vru_channel: VruChannel, netplay: Option, weak: slint::Weak, @@ -369,6 +371,12 @@ pub fn run_rom( netplay_device.peer_addr, netplay_device.player_number, )); + } else { + game_settings.cheats = { + let game_crc = ui::storage::get_game_crc(&rom_contents); + let cheats = ui::config::Cheats::new(); + cheats.cheats.get(&game_crc).cloned().unwrap_or_default() + }; } device::run_game(&mut device, rom_contents, game_settings); if device.netplay.is_some() { @@ -455,6 +463,7 @@ fn open_rom(app: &AppWindow) { fullscreen, overclock, disable_expansion_pak, + cheats: std::collections::HashMap::new(), // will be filled in later }, if emulate_vru { VruChannel { diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 858fe41..edd32fc 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -2,12 +2,13 @@ // SPDX-License-Identifier: MIT import { StandardButton } from "std-widgets.slint"; -import { LocalGame, ControllerConfig, Netplay, Settings, About } from "pages.slint"; +import { LocalGame, ControllerConfig, Netplay, Cheats, Settings, About } from "pages.slint"; import { SideBar } from "side_bar.slint"; import { SettingsData } from "settings_page.slint"; import { AboutData } from "about_page.slint"; import { ControllerData } from "controller_page.slint"; import { State } from "localgame_page.slint"; +import { CheatsData } from "cheat_page.slint"; export { InputProfileDialog } from "input_profile.slint"; export { VruDialog } from "vru_dialog.slint"; export { NetplayCreate } from "netplay_create.slint"; @@ -28,6 +29,9 @@ export component AppWindow inherits Window { callback join_session_button_clicked; callback netplay_discord_button_clicked; callback netplay_feedback_button_clicked; + callback cheats_select_rom_clicked; + callback cheats_clear_clicked; + callback cheat_toggled(string, string, string, bool); in property version <=> AboutData.version; in property has_update <=> AboutData.has_update; in-out property integer_scaling <=> SettingsData.integer_scaling; @@ -46,6 +50,9 @@ export component AppWindow inherits Window { in-out property selected_controller <=> ControllerData.selected_controller; in-out property game_running <=> State.game_running; in-out property blank_profiles <=> ControllerData.blank_profiles; + in-out property cheat_game_name <=> CheatsData.cheat_game_name; + in-out property cheat_game_crc <=> CheatsData.cheat_game_crc; + in-out property cheats <=> CheatsData.cheats; preferred-width: 700px; preferred-height: 500px; title: @tr("Gopher64"); @@ -58,6 +65,7 @@ export component AppWindow inherits Window { @tr("Menu" => "Local Game"), @tr("Menu" => "Controller Config"), @tr("Menu" => "Netplay"), + @tr("Menu" => "Cheats"), @tr("Menu" => "Settings"), @tr("Menu" => "About") ]; @@ -93,8 +101,19 @@ export component AppWindow inherits Window { netplay_feedback_button_clicked(); } } - if(side-bar.current-item == 3): Settings { } - if(side-bar.current-item == 4): About { + if(side-bar.current-item == 3): Cheats { + cheats_select_rom_clicked => { + cheats_select_rom_clicked(); + } + cheats_clear_clicked => { + cheats_clear_clicked(); + } + cheat_toggled(game_crc, cheat_name, option, enabled) => { + cheat_toggled(game_crc,cheat_name,option,enabled); + } + } + if(side-bar.current-item == 4): Settings { } + if(side-bar.current-item == 5): About { wiki_button_clicked => { wiki_button_clicked(); } diff --git a/src/ui/gui/cheat_page.slint b/src/ui/gui/cheat_page.slint new file mode 100644 index 0000000..f3cf02e --- /dev/null +++ b/src/ui/gui/cheat_page.slint @@ -0,0 +1,89 @@ +// Copyright © SixtyFPS GmbH +// SPDX-License-Identifier: MIT + +import { ListView, HorizontalBox, VerticalBox, Button, GroupBox, CheckBox } from "std-widgets.slint"; +import { Page } from "page.slint"; + +export global CheatsData { + in-out property cheat_game_name; + in-out property cheat_game_crc; + in-out property <[{cheat_name:string, notes:string, enabled:bool, options:[{option:string, enabled:bool}]}]> cheats; +} + +export component Cheats inherits Page { + title: @tr("Cheats"); + callback cheats_select_rom_clicked; + callback cheats_clear_clicked; + callback cheat_toggled(string, string, string, bool); + + VerticalBox { + alignment: start; + HorizontalBox { + alignment: start; + if CheatsData.cheat_game_name == "": Button { + text: @tr("Select ROM"); + clicked => { + cheats_select_rom_clicked(); + } + } + if CheatsData.cheat_game_name != "": Button { + text: CheatsData.cheat_game_name; + clicked => { + cheats_select_rom_clicked(); + } + } + Rectangle { + width: 20px; + } + + Button { + text: @tr("Clear Cheats For All ROMs"); + clicked => { + cheats_clear_clicked(); + } + } + } + + Rectangle { } + + if CheatsData.cheats.length > 0:ListView { + preferred-height: 500px; + preferred-width: 520px; + for data in CheatsData.cheats: VerticalBox { + Text { + text: data.cheat_name; + font-size: 16px; + wrap: word-wrap; + } + + if data.notes != "":Text { + text: data.notes; + wrap: word-wrap; + } + + if data.options.length == 0: CheckBox { + text: @tr("Enabled"); + checked: data.enabled; + toggled => { + data.enabled = self.checked; + cheat_toggled(CheatsData.cheat_game_crc,data.cheat_name,"",self.checked); + } + } + for item[index] in data.options: CheckBox { + text: item.option; + enabled: !data.enabled || (data.enabled && item.enabled); + checked: item.enabled; + toggled => { + item.enabled = self.checked; + data.enabled = self.checked; + cheat_toggled(CheatsData.cheat_game_crc,data.cheat_name,item.option,self.checked); + } + } + Rectangle { } + } + } + if CheatsData.cheats.length == 0 && CheatsData.cheat_game_name != "": Text { + text: @tr("No Cheats Available"); + } + } +} diff --git a/src/ui/gui/netplay_create.slint b/src/ui/gui/netplay_create.slint index 5ebd859..ebee874 100644 --- a/src/ui/gui/netplay_create.slint +++ b/src/ui/gui/netplay_create.slint @@ -8,12 +8,13 @@ export component NetplayCreate inherits Window { in-out property ping <=> NetplayData.ping; in-out property game_name <=> NetplayData.game_name; in-out property game_hash <=> NetplayData.game_hash; + in-out property game_cheats <=> NetplayData.game_cheats; in-out property pending_session <=> NetplayData.pending_session; in-out property rom_path <=> NetplayData.rom_path; in-out property peer_addr <=> NetplayData.peer_addr; callback get_ping(string); callback select_rom; - callback create_session(string, string, string, string, string, string); + callback create_session(string, string, string, string, string, string, string); VerticalBox { HorizontalBox { @@ -94,6 +95,9 @@ export component NetplayCreate inherits Window { Rectangle { } + if NetplayData.game_cheats != "":Text { + text: @tr("This game has cheats enabled. Cheats will be synchronized with other players."); + } Rectangle { } Button { @@ -107,6 +111,7 @@ export component NetplayCreate inherits Window { NetplayData.player_name, NetplayData.game_name, NetplayData.game_hash, + NetplayData.game_cheats, NetplayData.password); } } diff --git a/src/ui/gui/netplay_join.slint b/src/ui/gui/netplay_join.slint index cadfc77..507f1c1 100644 --- a/src/ui/gui/netplay_join.slint +++ b/src/ui/gui/netplay_join.slint @@ -11,6 +11,7 @@ export component NetplayJoin inherits Window { in-out property ports <=> NetplayData.ports; in-out property game_name <=> NetplayData.game_name; in-out property game_hash <=> NetplayData.game_hash; + in-out property game_cheats <=> NetplayData.game_cheats; in-out property peer_addr <=> NetplayData.peer_addr; in-out property pending_session <=> NetplayData.pending_session; in-out property rom_path <=> NetplayData.rom_path; @@ -71,7 +72,8 @@ export component NetplayJoin inherits Window { columns: [ { title: "Session Name" }, { title: "Game Name" }, - { title: "Password Protected" }, + { title: "Password" }, + { title: "Cheats" } ]; rows: NetplayData.sessions; current-row: NetplayData.current_session; diff --git a/src/ui/gui/netplay_page.slint b/src/ui/gui/netplay_page.slint index 5f52d88..6467977 100644 --- a/src/ui/gui/netplay_page.slint +++ b/src/ui/gui/netplay_page.slint @@ -11,6 +11,7 @@ export global NetplayData { in-out property player_name; in-out property game_name; in-out property game_hash; + in-out property game_cheats; in-out property rom_path; in-out property password; in-out property peer_addr; diff --git a/src/ui/gui/pages.slint b/src/ui/gui/pages.slint index 93039ba..c4fc418 100644 --- a/src/ui/gui/pages.slint +++ b/src/ui/gui/pages.slint @@ -1,5 +1,6 @@ export { LocalGame } from "localgame_page.slint"; export { ControllerConfig } from "controller_page.slint"; export { Netplay } from "netplay_page.slint"; +export { Cheats } from "cheat_page.slint"; export { Settings } from "settings_page.slint"; export { About } from "about_page.slint"; diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index bf4cc2b..39a472a 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -50,6 +50,7 @@ trait NetplayPages { fn set_ping(&self, ping: slint::SharedString); fn set_game_name(&self, game_name: slint::SharedString); fn set_game_hash(&self, game_hash: slint::SharedString); + fn set_game_cheats(&self, game_cheats: slint::SharedString); fn set_rom_path(&self, rom_path: slint::SharedString); fn set_peer_addr(&self, peer_addr: slint::SharedString); fn refresh_sessions(&self, _server: slint::SharedString) { @@ -73,6 +74,9 @@ impl NetplayPages for NetplayCreate { fn set_game_hash(&self, game_hash: slint::SharedString) { self.set_game_hash(game_hash); } + fn set_game_cheats(&self, game_cheats: slint::SharedString) { + self.set_game_cheats(game_cheats); + } fn set_rom_path(&self, rom_path: slint::SharedString) { self.set_rom_path(rom_path); } @@ -100,6 +104,9 @@ impl NetplayPages for NetplayJoin { fn set_game_hash(&self, game_hash: slint::SharedString) { self.set_game_hash(game_hash); } + fn set_game_cheats(&self, game_cheats: slint::SharedString) { + self.set_game_cheats(game_cheats); + } fn set_rom_path(&self, rom_path: slint::SharedString) { self.set_rom_path(rom_path); } @@ -175,9 +182,19 @@ fn select_rom(weak: slint::Weak) if let Some(rom_contents) = device::get_rom_contents(file.path()) { let hash = device::cart::rom::calculate_hash(&rom_contents); let game_name = ui::storage::get_game_name(&rom_contents); + let game_crc = ui::storage::get_game_crc(&rom_contents); + let cheats = ui::config::Cheats::new(); + let mut parsed_cheats = "".to_string(); + if let Some(game_cheats) = cheats.cheats.get(&game_crc) + && !game_cheats.is_empty() + { + parsed_cheats = serde_json::to_string(game_cheats).unwrap(); + } + weak.upgrade_in_event_loop(move |handle| { handle.set_game_name(game_name.into()); handle.set_game_hash(hash.into()); + handle.set_game_cheats(parsed_cheats.into()); handle.set_rom_path(file.path().to_str().unwrap().into()); }) .unwrap(); @@ -193,6 +210,7 @@ fn select_rom(weak: slint::Weak) handle.set_game_name("".into()); handle.set_game_hash("".into()); + handle.set_game_cheats("".into()); handle.set_rom_path("".into()); }) .unwrap(); @@ -258,7 +276,13 @@ pub fn setup_create_window( let weak = create_window.as_weak(); create_window.on_create_session( - move |server_url, session_name, player_name, game_name, game_hash, password| { + move |server_url, + session_name, + player_name, + game_name, + game_hash, + game_cheats, + password| { let _ = netplay_write_sender.send(None); // close current websocket if any manage_websocket( server_url.to_string(), @@ -274,6 +298,7 @@ pub fn setup_create_window( player_name.to_string(), game_name.to_string(), game_hash.to_string(), + game_cheats.to_string(), password.to_string(), game_settings.clone(), weak_app.clone(), @@ -402,6 +427,15 @@ fn update_sessions( "False" }), )); + session_vec.push(slint::StandardListViewItem::from( + slint::SharedString::from( + if room.features.unwrap_or_default().contains_key("cheats") { + "True" + } else { + "False" + }, + ), + )); let session_model: std::rc::Rc< slint::VecModel, > = std::rc::Rc::new(session_vec); @@ -447,6 +481,7 @@ fn create_session( player_name: String, game_name: String, game_hash: String, + game_cheats: String, password: String, game_settings: GameSettings, weak_app: slint::Weak, @@ -456,6 +491,11 @@ fn create_session( let now_utc = chrono::Utc::now().timestamp_millis().to_string(); let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); let mut features = std::collections::HashMap::new(); + + if !game_cheats.is_empty() { + features.insert("cheats".to_string(), game_cheats); + } + features.insert("overclock".to_string(), game_settings.overclock.to_string()); features.insert( "disable_expansion_pak".to_string(), @@ -498,6 +538,7 @@ fn create_session( weak.upgrade_in_event_loop(move |handle| { let session = message.room.as_ref().unwrap(); let features_default = "false".to_string(); + let cheats_default = "{}".to_string(); let overclock = session .features .as_ref() @@ -510,6 +551,12 @@ fn create_session( .unwrap() .get("disable_expansion_pak") .unwrap_or(&features_default); + let cheats = session + .features + .as_ref() + .unwrap() + .get("cheats") + .unwrap_or(&cheats_default); setup_wait_window( netplay_write_sender, netplay_read_receiver, @@ -523,6 +570,7 @@ fn create_session( fullscreen: game_settings.fullscreen, overclock: overclock.parse().unwrap(), disable_expansion_pak: disable_expansion_pak.parse().unwrap(), + cheats: serde_json::from_str(cheats).unwrap(), }, handle.get_peer_addr(), weak_app, @@ -598,6 +646,7 @@ fn join_session( weak.upgrade_in_event_loop(move |handle| { let session = message.room.as_ref().unwrap(); let features_default = "false".to_string(); + let cheats_default = "{}".to_string(); let overclock = session .features .as_ref() @@ -610,6 +659,12 @@ fn join_session( .unwrap() .get("disable_expansion_pak") .unwrap_or(&features_default); + let cheats = session + .features + .as_ref() + .unwrap() + .get("cheats") + .unwrap_or(&cheats_default); setup_wait_window( netplay_write_sender, netplay_read_receiver, @@ -623,6 +678,7 @@ fn join_session( fullscreen, overclock: overclock.parse().unwrap(), disable_expansion_pak: disable_expansion_pak.parse().unwrap(), + cheats: serde_json::from_str(cheats).unwrap(), }, handle.get_peer_addr(), weak_app, @@ -843,6 +899,7 @@ fn setup_wait_window( fullscreen: game_settings.fullscreen, overclock: game_settings.overclock, disable_expansion_pak: game_settings.disable_expansion_pak, + cheats: game_settings.cheats, }, VruChannel { vru_window_notifier: None, @@ -960,6 +1017,7 @@ pub fn netplay_window(app: &AppWindow, controller_paths: &[Option]) { fullscreen: handle.get_fullscreen(), overclock: handle.get_overclock_n64_cpu(), disable_expansion_pak: handle.get_disable_expansion_pak(), + cheats: std::collections::HashMap::new(), // not used here }, weak_app, ); diff --git a/src/ui/storage.rs b/src/ui/storage.rs index 8e004b1..961523c 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -120,6 +120,20 @@ fn get_save_type(rom: &[u8], game_id: &str) -> Vec { } } +pub fn get_game_crc(rom: &[u8]) -> String { + let crc1 = format!( + "{:08X}", + u32::from_be_bytes(rom[0x10..0x14].try_into().unwrap()) + ); + let crc2 = format!( + "{:08X}", + u32::from_be_bytes(rom[0x14..0x18].try_into().unwrap()) + ); + let country_code = format!("{:02X}", &rom[0x3E]); + + format!("{crc1}-{crc2}-C:{country_code}") +} + pub fn get_game_name(rom: &[u8]) -> String { let mut game_name = "".to_owned(); let header_value = std::str::from_utf8(&rom[0x20..0x34]); From 7b400a0edc6d2ac6d787801531a5bea0a8655758 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 4 Jul 2025 22:13:52 +0200 Subject: [PATCH 0490/1117] Update cheats (#467) --- Cargo.lock | 86 ++++++++---------------------------------------- Cargo.toml | 2 +- data/cheats.json | 2 +- src/device.rs | 4 +-- 4 files changed, 18 insertions(+), 76 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6e4308f..533b138 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -258,9 +258,9 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +checksum = "16c74e56284d2188cabb6ad99603d1ace887a5d7e7b695d01b728155ed9ed427" dependencies = [ "concurrent-queue", "event-listener-strategy", @@ -426,9 +426,9 @@ dependencies = [ [[package]] name = "avif-serialize" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19135c0c7a60bfee564dbe44ab5ce0557c6bf3884e5291a50be76a15640c4fbd" +checksum = "2ea8ef51aced2b9191c08197f55450d830876d9933f8f48a429b354f1d496b42" dependencies = [ "arrayvec", ] @@ -704,9 +704,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.27" +version = "1.2.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc" +checksum = "4ad45f4f74e4e20eaa392913b7b33a7091c87e59628f4dd27888205ad888843c" dependencies = [ "jobserver", "libc", @@ -2755,30 +2755,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" -[[package]] -name = "jiff" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" -dependencies = [ - "jiff-static", - "log", - "portable-atomic", - "portable-atomic-util", - "serde", -] - -[[package]] -name = "jiff-static" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "jni" version = "0.21.1" @@ -2885,9 +2861,9 @@ checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" [[package]] name = "libfuzzer-sys" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf78f52d400cf2d84a3a973a78a592b4adc535739e0a5597a0da6f0c357adc75" +checksum = "5037190e1f70cbeef565bd267599242926f724d3b8a9f510fd7e0b540cfa4404" dependencies = [ "arbitrary", "cc", @@ -3315,18 +3291,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" -[[package]] -name = "nt-time" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e71108c089b161344bacb1227dd2124fee63ed1792fdd8308e6689197c2754" -dependencies = [ - "chrono", - "jiff", - "rand 0.9.1", - "time", -] - [[package]] name = "num-bigint" version = "0.4.6" @@ -3997,15 +3961,6 @@ dependencies = [ "critical-section", ] -[[package]] -name = "portable-atomic-util" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" -dependencies = [ - "portable-atomic", -] - [[package]] name = "postcard" version = "1.1.2" @@ -4816,16 +4771,14 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0613c8bcc0d74f26e4c90c94125703dc87bcb3a95abce3fa606c585cd9cbaa5f" +checksum = "5375315e26d60d20f13d74c5bb0b6b627d334b68aa63f0d6d33d828af499d8d2" dependencies = [ - "bit-set", "byteorder", "crc32fast", "js-sys", "lzma-rust2", - "nt-time", "wasm-bindgen", ] @@ -5377,7 +5330,6 @@ dependencies = [ "powerfmt", "serde", "time-core", - "time-macros", ] [[package]] @@ -5386,16 +5338,6 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" -[[package]] -name = "time-macros" -version = "0.2.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" -dependencies = [ - "num-conv", - "time-core", -] - [[package]] name = "tiny-skia" version = "0.11.4" @@ -5462,9 +5404,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.46.0" +version = "1.46.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1140bb80481756a8cbe10541f37433b459c5aa1e727b4c020fbfebdc25bf3ec4" +checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" dependencies = [ "backtrace", "bytes", @@ -7189,9 +7131,9 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.4.18" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7384255a918371b5af158218d131530f694de9ad3815ebdd0453a940485cb0fa" +checksum = "2c9e525af0a6a658e031e95f14b7f889976b74a11ba0eca5a5fc9ac8a1c43a6a" dependencies = [ "zune-core", ] diff --git a/Cargo.toml b/Cargo.toml index fb57e5d..81e77cc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ rust-version = "1.88" dirs = "6.0" zip = "4.2" governor = "0.10" -sevenz-rust2 = { version = "0.15", default-features = false } +sevenz-rust2 = { version = "0.16", default-features = false } chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" diff --git a/data/cheats.json b/data/cheats.json index a67f78d..a38a096 100644 --- a/data/cheats.json +++ b/data/cheats.json @@ -1 +1 @@ -{"001A3BD0-AFB3DE1A-C:46":{"Access Level Select":{"note":"On the main menu Scroll down to make CHEATS visible to go into Level Select.For in-Game Cheats,Pause gameplay.","data":["810DD50C 8001"],"options":null},"Have\\All TARZAN Letters":{"note":"","data":["800DD515 00FF"],"options":null},"Have\\Coins Collected 100%":{"note":"","data":["800DD547 0064"],"options":null},"Have\\Full Portrait":{"note":"","data":["800DD514 00FF"],"options":null},"Have\\Level \u0026 Tokens Completed 100%":{"note":"","data":["800DD51F 0000","800DD520 0001","800DD521 0000"],"options":null},"Infinite\\Bonus Timer":{"note":"This is For All Timers on Bonus Levels","data":["801736DE 0025"],"options":null},"Infinite\\Green Weapon":{"note":"","data":["811921F6 0063"],"options":null},"Infinite\\Health":{"note":"","data":["81192320 0120"],"options":null},"Infinite\\Lives":{"note":"","data":["800DD542 00??"],"options":{"3 Lives":"03","99 Lives":"63"}},"Infinite\\Purple Weapon":{"note":"","data":["811921FA 0063"],"options":null},"Infinite\\Red Weapon":{"note":"","data":["811921F8 0063"],"options":null},"Press GS For\\Sabor Attacks\\Sabor 1 Hit Kill":{"note":"","data":["8924A23E 0001"],"options":null}},"0198A651-FC219D84-C:50":{"Team on the left of score board has 0 goals":{"note":"","data":["800375C7 0000"],"options":null},"Team on the left of score board has 15 goals":{"note":"","data":["800375C7 000F"],"options":null},"Team on the right of score board has 0 goals":{"note":"","data":["800375C3 0000"],"options":null},"Team on the right of score board has 15 goals":{"note":"","data":["800375C3 000F"],"options":null}},"02B1538F-C94B88D0-C:45":{"Found All Numbers":{"note":"","data":["810ACFB2 000C"],"options":null},"Have No Numbers":{"note":"Keep you kid busy for hours!!!","data":["810ACFB2 0000"],"options":null},"Infinite Strikes":{"note":"","data":["810A7A76 0000"],"options":null}},"02D8366A-6CABEF9C-C:50":{"Access All Bikes \u0026 Tracks":{"note":"","data":["810A7D16 0063"],"options":null},"Access All Weapons For All Modes":{"note":"","data":["50000E02 0000","811B9EFA 0505"],"options":null},"Always 1st":{"note":"","data":["810D7D96 0000"],"options":null},"Infinite Damage":{"note":"","data":["801C1257 0002"],"options":null},"Infinite Health\\To Bike":{"note":"","data":["811B9BB8 4270"],"options":null},"Infinite Health\\To Character":{"note":"","data":["811C0F90 4489"],"options":null},"Max Cash":{"note":"","data":["810D6FBA FFFF"],"options":null},"No Music Elsewhere":{"note":"","data":["810D61AA 0000"],"options":null},"No Music In Game":{"note":"","data":["810D61AE 0000"],"options":null}},"0304C48E-AC4001B8-C:45":{"Max Score":{"note":"","data":["81158440 05F5","81158442 E0FF"],"options":null},"Play As/Player 1":{"note":"","data":["801514F3 00??"],"options":{"Atomicat":"06","Bob Cat":"04","Hai Jinx":"00","Manx":"02","Muffy Dupont":"03","Pearl":"07","Smokey":"05","Sparky":"01"}},"Play As/Player 2":{"note":"","data":["80151503 00??"],"options":{"Atomicat":"06","Bob Cat":"04","Hai Jinx":"00","Manx":"02","Muffy Dupont":"03","Pearl":"07","Smokey":"05","Sparky":"01"}},"Play As/Player 3":{"note":"","data":["80151513 00??"],"options":{"Atomicat":"06","Bob Cat":"04","Hai Jinx":"00","Manx":"02","Muffy Dupont":"03","Pearl":"07","Smokey":"05","Sparky":"01"}},"Play As/Player 4":{"note":"","data":["80151523 00??"],"options":{"Atomicat":"06","Bob Cat":"04","Hai Jinx":"00","Manx":"02","Muffy Dupont":"03","Pearl":"07","Smokey":"05","Sparky":"01"}}},"033F4C13-319EE7A7-C:45":{"Fail Objectives To Complete Them":{"note":"","data":["810315B8 2402","810315BA 0011"],"options":null},"Go Solo In Multiplayer":{"note":"","data":["D00E0778 0042","801002B7 0001"],"options":null},"Have\\All\\Gadgets":{"note":"","data":["80112F6D 0001"],"options":null},"Have\\All\\Guns On All Levels":{"note":"Once you pick up a Gun You will have all weapons","data":["8105F224 0810","8105F226 0000","8105F228 2442","8105F22A 0001","81400000 3C02","81400002 0100","81400004 2442","81400006 0063","81400008 AE82","8140000A 0288","8140000C AE82","8140000E 0298","81400010 AE82","81400012 02A0","81400014 AE82","81400016 02A8","81400018 AE82","8140001A 02B0","8140001C AE82","8140001E 02C0","81400020 AE82","81400022 02C8","81400024 AE82","81400026 02D0","81400028 AE82","8140002A 02D8","8140002C AE82","8140002E 02E8","81400030 AE82","81400032 02F0","81400034 AE82","81400036 02F8","81400038 AE82","8140003A 0300","8140003C AE82","8140003E 0308","81400040 AE82","81400042 0310","81400044 AE82","81400046 0320","81400048 AE82","8140004A 0330","8140004C AE82","8140004E 0338","81400050 AE82","81400052 0350","81400054 AE82","81400056 0358","81400058 AE82","8140005A 0360","8140005C AE82","8140005E 0370","81400060 AE82","81400062 0378","81400064 AE82","81400066 0380","81400068 AE82","8140006A 0388","8140006C AE82","8140006E 0340","81400070 AE82","81400072 0348","81400074 AE82","81400076 0350","81400078 0801","8140007A 7C8C","8140007C A077","8140007E 01FC"],"options":null},"Have\\All\\Levels Unlocked":{"note":"For Single Player Mode Only","data":["81102EE6 0021"],"options":null},"Have\\All\\Skins + Everyone is Evil":{"note":"","data":["50005C0C 0000","800BF687 0081"],"options":null},"Have\\Tons Of Nightvision":{"note":"For Battery Only","data":["81064C82 1500"],"options":null},"Infinite\\Ammo On All Levels":{"note":"","data":["810648DC 2400"],"options":null},"Infinite\\Ammo On Clip":{"note":"","data":["810649AC 2400"],"options":null},"Infinite\\Time":{"note":"Underground Uprising","data":["8138EE3A 19B8"],"options":null},"Invincibility On All levels":{"note":"","data":["81112F68 0101"],"options":null},"Level select":{"note":"","data":["803B0E5F 0009"],"options":null},"Play Crate Yard Level":{"note":"","data":["80102EDF 0008"],"options":null},"Skip Intro":{"note":"","data":["D03B0E5F 0004","803B0E5F 0009"],"options":null},"Stop Bond From Going Downhill on Cold Reception":{"note":"Press L to Stop, \u0026 R to Go","data":["D10E0778 0020","803A8466 0001","D10E0778 0010","803A8466 0000"],"options":null},"Time Taken Clock At 0:00":{"note":"","data":["80102F02 0000"],"options":null}},"03571182-892FD06D-C:45":{"Infinite\\Continues":{"note":"","data":["8114738C 0009"],"options":null},"Infinite\\Dirt Rollout Rampage\\Player 1":{"note":"","data":["8017DFEB 0002"],"options":null},"Instant\\Win\\Barrier Ball\\Player 1":{"note":"","data":["8016EA97 0005"],"options":null},"Instant\\Win\\Pichu's Power Plant\\Player 1":{"note":"","data":["8016D64F 0050"],"options":null},"Instant\\Win\\Topsy Turvy\\Player 1":{"note":"","data":["80176887 0005"],"options":null},"Max Score":{"note":"","data":["D117F812 03E7","8117F812 03E7"],"options":null},"One Hit KO":{"note":"To Win you must get at least one hit or just return your pokemon.","data":["8014576F 0000","801457C7 0000","8014581F 0000"],"options":null},"Press R To Reset Time":{"note":"Press R To Reset Time","data":["801CE066 0010","81183ACC 0063"],"options":null},"Press R+L to KO Opponents":{"note":"Press R+L Activate","data":["D10CE066 0030","80145767 0000","D10CE066 0030","801457C7 0000","D10CE066 0030","8014576F 0000","D10CE066 0030","8014581F 0000"],"options":null},"Press Z\\for Max HP\\1st Pokemon":{"note":"This will give them Max HP when they are not in use. Just call a Pokemon out and he will then have Max HP. When your Pokemon faints, just press Z again and it will revive itIn Battle Only,Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","8114528E 00FF","D112B554 2000","81145290 00FF"],"options":null},"Press Z\\for Max HP\\2nd Pokemon\\Player 1":{"note":"This will give them Max HP when they are not in use. Just call a Pokemon out and he will then have Max HP. When your Pokemon faints, just press Z again and it will revive itIn Battle Only,Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","811452E6 00FF","D112B554 2000","811452E8 00FF"],"options":null},"Press Z\\for Max HP\\3rd Pokemon\\Player 1":{"note":"This will give them Max HP when they are not in use. Just call a Pokemon out and he will then have Max HP. When your Pokemon faints, just press Z again and it will revive itIn Battle Only,Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","8114533E 00FF","D112B554 2000","81145340 00FF"],"options":null},"Press Z\\for Max L.\\1st Pokemon\\Player 1":{"note":"Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","81145284 0063"],"options":null},"Press Z\\for Max L.\\2nd Pokemon\\Player 1":{"note":"Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","811452DC 0063"],"options":null},"Press Z\\for Max L.\\3rd Pokemon\\Player 1":{"note":"Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","81145334 0063"],"options":null}},"036897CE-E0D4FA54-C:45":{"All Items":{"note":"","data":["50002402 0202","810EC350 0001","50004601 0000","800EC3D1 0003"],"options":null},"Item Modifier Codes\\Position 01":{"note":"","data":["800EC350 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 02":{"note":"","data":["800EC351 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 03":{"note":"","data":["800EC352 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 04":{"note":"","data":["800EC353 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 05":{"note":"","data":["800EC354 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 06":{"note":"","data":["800EC355 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 07":{"note":"","data":["800EC356 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 08":{"note":"","data":["800EC357 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 09":{"note":"","data":["800EC358 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 10":{"note":"","data":["800EC359 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 11":{"note":"","data":["800EC35A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 12":{"note":"","data":["800EC35B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 13":{"note":"","data":["800EC35C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 14":{"note":"","data":["800EC35D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 15":{"note":"","data":["800EC35E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 16":{"note":"","data":["800EC35F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 17":{"note":"","data":["800EC360 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 18":{"note":"","data":["800EC361 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 19":{"note":"","data":["800EC362 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 20":{"note":"","data":["800EC363 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 21":{"note":"","data":["800EC364 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 22":{"note":"","data":["800EC365 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 23":{"note":"","data":["800EC366 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 24":{"note":"","data":["800EC367 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 25":{"note":"","data":["800EC368 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 26":{"note":"","data":["800EC369 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 27":{"note":"","data":["800EC36A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 28":{"note":"","data":["800EC36B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 29":{"note":"","data":["800EC36C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 30":{"note":"","data":["800EC36D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 31":{"note":"","data":["800EC36E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 32":{"note":"","data":["800EC36F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 33":{"note":"","data":["800EC370 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 34":{"note":"","data":["800EC371 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 35":{"note":"","data":["800EC372 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 36":{"note":"","data":["800EC373 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 37":{"note":"","data":["800EC374 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 38":{"note":"","data":["800EC375 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 39":{"note":"","data":["800EC376 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 40":{"note":"","data":["800EC377 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 41":{"note":"","data":["800EC378 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 42":{"note":"","data":["800EC379 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 43":{"note":"","data":["800EC37A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 44":{"note":"","data":["800EC37B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 45":{"note":"","data":["800EC37C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 46":{"note":"","data":["800EC37D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 47":{"note":"","data":["800EC37E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 48":{"note":"","data":["800EC37F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}}},"0375CF67-56A93FAA-C:4A":{"Always Have Retreat \u0026 Elem Pedra Opened":{"note":"Do not put this on until in-game or the game will freeze.","data":["D01A1312 0000","811A1312 0003"],"options":null},"Day Always 00":{"note":"","data":["811F008C 0000"],"options":null},"Finish All Levels":{"note":"","data":["81196126 5454","81196128 5140","8119612A 4555","8119612C 9514","8119612E 5515"],"options":null},"Hour Always":{"note":"","data":["801960CD 00??"],"options":{"(0 Hour - 24:00 PM - Midnight)":"00","(01:00 AM)":"01","(02:00 AM)":"02","(03:00 AM)":"03","(04:00 AM)":"04","(05:00 AM)":"05","(06:00 AM)":"06","(07:00 AM)":"07","(08:00 AM)":"08","(09:00 AM)":"09","(10:00 AM)":"0A","(11:00 AM)":"0B","(12:00 PM - Noon)":"0C","(13:00 - 1 PM)":"0D","(14:00 - 2 PM)":"0E","(15:00 - 3 PM)":"0F","(16:00 - 4 PM)":"10","(17:00 - 5 PM)":"11","(18:00 - 6 PM)":"12","(19:00 - 7 PM)":"13","(20:00 - 8 PM)":"14","(21:00 - 9 PM)":"15","(22:00 - 10 PM)":"16","(23:00 - 11 PM)":"17"}},"Infinite Goth":{"note":"","data":["8119610E FFFF"],"options":null},"Magnus\\Infinite HP":{"note":"","data":["811932B0 03E7"],"options":null},"Magnus\\Level 99":{"note":"","data":["801932AB 0063"],"options":null},"Magnus\\Max Agi":{"note":"","data":["811932BC 03E7"],"options":null},"Magnus\\Max Dex":{"note":"","data":["811932BE 3E77"],"options":null},"Magnus\\Max HP":{"note":"","data":["811932AE 03E7"],"options":null},"Magnus\\Max Int":{"note":"","data":["811932B8 03E7"],"options":null},"Magnus\\Max Mem":{"note":"","data":["811932BA 03E7"],"options":null},"Magnus\\Max Str":{"note":"","data":["811932B4 03E7"],"options":null},"Magnus\\Max Vit":{"note":"","data":["811932B6 03E7"],"options":null},"Max Goth":{"note":"","data":["8119610C 0098","8119610E 967F"],"options":null},"Open All Paths":{"note":"","data":["81196120 01FF","81196122 677F","81196124 FCFF"],"options":null}},"0414CA61-2E57B8AA-C:50":{"Everything Unlocked\\Save File 1":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8105892E FFFF"],"options":null},"Everything Unlocked\\Save File 2":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8105886E FFFF"],"options":null},"Everything Unlocked\\Save File 3":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8105898E FFFF"],"options":null},"Everything Unlocked\\Save File 4":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","810588CE FFFF"],"options":null},"In-Built Cheat Menu":{"note":"This code gives you all Cheats in Menu","data":["50002001 0000","800585A0 0001"],"options":null},"Infinite\\Ammo (All Levels)":{"note":"","data":["8006894B 0001"],"options":null},"Mod Section\\Cradle in multiplayer":{"note":"Puts the cradle graphic in the levels screen where the facility normally is in the multiplayer levels screen.Warning it doesn't allow you to enter the multiplayer levels screen,it should automatically Have\\selected cradle, which cannot be changed from the multiplayer menus","data":["8002666D 0092","8002666F 0093","80026677 0029","80026673 0008","803230C5 0052","803230C6 0041","803230C7 0044","803230C8 004C","803230C9 0045"],"options":null},"Mod Section\\Enemies Do Nothing":{"note":"","data":["80027E54 00FF"],"options":null},"Mod Section\\Enemy Options":{"note":"\"These Codes Are very very cool but in most places pointless ! But great fun, try then. But remember to deactivate them before coming to the end of the level, otherwise, there will be nothing/no one, to meet or do (:\"","data":["80032142 00??"],"options":{"Enemies Check Around Themselves":"FF","Enemies Come After You":"01","Enemies Move Around \u0026 Check":"97"}},"Mod Section\\Facility Back Zone In Multiplayer\\Part 1\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811E6554 45E4","811E6558 43D5","811E655C C5A7","811E657C 801C","811E657E 6774","811E5164 45E4","811E5168 C383","811E516C 4492","811E518C 801C","811E518E D574","811E78C0 45AD","811E78C4 C383","811E78C8 4440","811E78E8 801C","811E78EA E464","811E4D18 45D0","811E4D1C 4307","811E4D20 C4FB","811E4D40 801C","811E4D42 75EC","811E6738 45CD","811E673C C383","811E6740 43F4","811E6760 801C","811E6762 A0DC","811E5450 45C2","811E5454 4356","811E5458 C598","811E5478 801C","811E547A 6A74","811E5240 4608","811E5244 4307","811E5248 43DC","811E5268 801C","811E526A 962C","811E691C 4606","811E6920 4321","811E6924 449D","811E6944 801C","811E6946 CBEC","801ED447 008A","801ED4DB 008B","801ED56F 008C","801ED603 008D","801ED697 008E","801ED72B 008F","801ED7BF 007D","801ED853 007E","801ED443 002A","801ED4D7 002A","801ED56B 002A","801ED5FF 002A","801ED693 002A","801ED727 002A","801ED7BB 002A","801ED84F 002A","801ED449 0000","801ED4DD 0000","801ED571 0000","801ED605 0000","801ED699 0000","801ED72D 0000","801ED7C1 0000","801ED855 0000","801ED44D 0000","801ED4E1 0000","801ED575 0000","801ED609 0000","801ED69D 0000","801ED731 0000","801ED7C5 0000","801ED859 0000","801EB743 002A","801EB745 0068","811EB746 277F","811EB748 1000","811EB74A 0262","811EB7C2 0190","801EB7C5 0000","811EB7C6 0258"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 2\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811EB7C8 0000","811EB7CC FFFF","811EB7CE FFFF","811EB7D2 0000","801EB7D5 0000","801EB7DB 0000","811EB7E2 0000","801EB7E7 0000","801EB843 002A","801EB845 0068","811EB846 2780","811EB848 1000","811EB84A 0262","811EB8C2 0190","801EB8C5 0000","811EB8C6 0258","811EB8C8 0000","811EB8CC FFFF","811EB8CE FFFF","811EB8D2 0000","801EB8D5 0000","801EB8DB 0000","811EB8E2 0000","801EB8E7 0000","801EB943 002A","801EB945 0068","811EB946 2791","811EB948 1000","811EB94A 0262","811EB9C2 0190","801EB9C5 0000","811EB9C6 0258","811EB9C8 0000","811EB9CC FFFF","811EB9CE FFFF","811EB9D2 0000","801EB9D5 0000","801EB9DB 0000","811EB9E2 0000","801EB9E7 0000","801EBA43 002A","801EBA45 0068","811EBA46 2792","811EBA48 1000","811EBA4A 0262","811EBAC2 0190","801EBAC5 0000","811EBAC6 0258","811EBAC8 0000","811EBACC FFFF","811EBACE FFFF","811EBAD2 0000","801EBAD5 0000","801EBADB 0000","811EBAE2 0000","801EBAE7 0000","801EBB45 00A0","801EBC45 00A0","801EBD45 00A0","801EBE45 00A0","801EBB47 0075","801EBC47 0076","801EBD47 0077","801EBE47 0078","801EBBE7 0001","801EBCE7 0001","801EBDE7 0001","801EBEE7 0001","801EC247 0071","801ECD47 0072","801ECE47 0074","801ECF47 006C","801ED047 0079","801ED147 0083","D01EBFC5 005A","801EBFC5 0000","D11EBFC6 0000","811EBFC6 F333","D11EBFC8 03E8","811EBFC8 0000"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 3\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["D11EBFCA 0000","811EBFCA F0C4","D11EBFCE 4CCC","811EBFCE 000A","D11EBFD2 4CCC","811EBFD2 000A","D11EBFD4 0003","811EBFD4 0000","D11EBFD6 0000","811EBFD6 02C4","801EBFD9 0004","801EBFDB 0000","811EBFE2 0384","801EBFE7 0004","801EBF45 009E","801EBF47 0084","801EBF48 0010","801EC2D9 0000","801EC447 0085","801EC547 0086","811EA6B6 2743","811EA73E 0114","811EA7F2 0115","811EA8A6 00A3","811EA92E 009D","811EA9E2 00A4","811EAA96 00DA","811EAB1E 00DB","811EABD2 00DF","811EAC86 0130","811EAD0E 008D","811EADC2 012E","811EAE76 0111","811EAEFE 2740","811EAFB2 2741","811EB066 00A0","811EB0EE 009E","811EB1A2 009F","811EB256 274F","811EB2DE 2750","811EB392 0117","811EB446 0131","811EB4CE 008E","811EB582 0132","811EB636 00A1","811EB6BE 0119","811EA62E 00FA","801ED3DF 0000","801ED2DF 0001","D0024337 0007","80024337 001F"],"options":null},"Mod Section\\Freeze Unfreeze enemies":{"note":"Press C-Up To Freeze \u0026 C-Down To Unfreeze.","data":["D00572D1 0008","80027E5C 000F","D00572D1 0004","80027E5C 0000"],"options":null},"Mod Section\\Replace Cradle with Citadell hidden level":{"note":"","data":["80025E47 0029","8103DB6A D9B4","8103DB70 3F44","8103DB72 BDEA","8103DB74 3F80","8103DB76 0000","8103DB78 4219","8103DB7A D89D","81058EC0 C470"],"options":null},"Mod Section\\Secret Island on Dam Level":{"note":"For the above code to work,Get to the 2nd guard tower \u0026 go down the ladder on the left hand side \u0026 to the end of the Dock, Press L \u0026 GS and you will be transfered in the water. Just keep walking straight \u0026 you will get to it. Obviously you can't actually climb ladders or anything, you will simply walkthrough anything on that Part, if you want to walk back to the Dock, when you come near it click the cheat back on \u0026 keep pressing L \u0026 GS untill you are back on it.","data":["D004C2D1 0020","800BA78D 0050","880BA78D 0000"],"options":null}},"04DAF07F-0D18E688-C:45":{"Cheat Menu\\All Weapons Enabled":{"note":"","data":["801CC8B9 0001","801CC925 0001","801CD985 0001","801CDA81 0001","801CDB15 0001","801CDB17 0001","801CDB49 0001","801CE479 0001","801CE481 0001","801CE4ED 0001","801CF635 0001"],"options":null},"Cheat Menu\\Cheat Menu Enabled":{"note":"","data":["801CE4E8 0001"],"options":null},"Cheat Menu\\Have All Game Type \u0026 Other":{"note":"","data":["810E16BE FFFF"],"options":null},"Cheat Menu\\Have All Weapons":{"note":"","data":["811CE470 FFFF"],"options":null},"Enable Debug Menu":{"note":"","data":["800DF990 0001"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810A1E74 A65B"],"options":null},"Invincibility":{"note":"","data":["800DEEC3 0001"],"options":null},"Time Always 00:00":{"note":"","data":["801A19C6 0000"],"options":null}},"0549765A-93B9D042-C:4A":{"Have 6 Carrots":{"note":"","data":["80160659 007E"],"options":null},"Have All\\Collectibles\\Stage 1":{"note":"","data":["80160650 0014"],"options":null},"Have All\\Collectibles\\Stage 2":{"note":"","data":["80160651 0014"],"options":null},"Have All\\Collectibles\\Stage 3":{"note":"","data":["80160652 0014"],"options":null},"Have All\\Collectibles\\Stage 4":{"note":"","data":["80160653 0014"],"options":null},"Have All\\Collectibles\\Stage 5":{"note":"","data":["80160654 0014"],"options":null},"Have All\\Collectibles\\Stage 6":{"note":"","data":["80160655 0014"],"options":null},"Have All\\Costumes":{"note":"","data":["8016065A 00FE"],"options":null},"Have All\\Levels":{"note":"","data":["80160648 003F"],"options":null},"Infinite Health":{"note":"","data":["80187BBD 000F"],"options":null},"Max Collectable Items":{"note":"","data":["80160641 0014"],"options":null},"Press L To levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0187BF5 0020","81187B20 4200"],"options":null}},"0553AE9D-EAD8E0C1-C:45":{"1 Hit to Kill Opponent\\Player 1":{"note":"","data":["D10B6354 42C8","810B6354 4080"],"options":null},"1 Hit to Kill Opponent\\Player 2":{"note":"","data":["D10B6170 42C8","810B6170 4080"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["810B6170 42C8"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["810B6354 42C8"],"options":null},"Opponent Has No Energy\\Player 1":{"note":"","data":["810B6354 C080"],"options":null},"Opponent Has No Energy\\Player 2":{"note":"","data":["810B6170 C080"],"options":null},"Player 1 Never Wins":{"note":"","data":["800C0C03 0000"],"options":null},"Player 2 Never Wins":{"note":"","data":["800C0C05 0000"],"options":null},"Unlock Titan Difficulty Level":{"note":"","data":["810BF752 0001"],"options":null}},"056EAB63-C215FCD5-C:4A":{"Infinite\\Energy\\Player 1":{"note":"","data":["81224DC4 00FF"],"options":null},"Infinite\\Energy\\Player 2":{"note":"","data":["81224DC6 00FF"],"options":null},"Infinite\\Time":{"note":"","data":["81224DCC 00FF"],"options":null},"Never Wins\\Player 1":{"note":"","data":["80224DB5 0000"],"options":null},"Never Wins\\Player 2":{"note":"","data":["80224DB7 0000"],"options":null}},"0578F24F-9175BF17-C:4A":{"Car Select":{"note":"","data":["D00F5180 0000","800F5180 00??"],"options":{"Chevrolet Camaro":"03","Chrysler Jeep Jeepster (Prototype)":"08","Default":"00","Dodge Viper":"04","Donkey In Glass Box":"0E","Ferrari F40":"07","Hotdog":"0A","Hummer H1":"05","Jeep Wrangler":"02","McLaren F1":"09","Mitsubishi Eclipse":"01","Nintendo 64 Logo":"0C","Nintendo Power Car":"0B","Porsche 911 Turbo":"06","Taco":"0D"}},"Infinite\\Max Acceleration\\Player 1":{"note":"","data":["800F518D 0005"],"options":null},"Infinite\\Max Acceleration\\Player 2":{"note":"","data":["800F5379 0005"],"options":null},"Infinite\\Max Acceleration\\Player 3":{"note":"","data":["800F5565 0005"],"options":null},"Infinite\\Max Acceleration\\Player 4":{"note":"","data":["800F5751 0005"],"options":null},"Infinite\\Max Handling\\Player 1":{"note":"","data":["800F518C 0005"],"options":null},"Infinite\\Max Handling\\Player 2":{"note":"","data":["800F5378 0005"],"options":null},"Infinite\\Max Handling\\Player 3":{"note":"","data":["800F5564 0005"],"options":null},"Infinite\\Max Handling\\Player 4":{"note":"","data":["800F5750 0005"],"options":null},"Infinite\\Max Money\\Player 1":{"note":"","data":["800F5185 000F"],"options":null},"Infinite\\Max Money\\Player 2":{"note":"","data":["800F5371 000F"],"options":null},"Infinite\\Max Money\\Player 3":{"note":"","data":["800F555D 000F"],"options":null},"Infinite\\Max Money\\Player 4":{"note":"","data":["800F5749 000F"],"options":null},"Infinite\\Max Top Speed\\Player 1":{"note":"","data":["800F518E 0005"],"options":null},"Infinite\\Max Top Speed\\Player 2":{"note":"","data":["800F537A 0005"],"options":null},"Infinite\\Max Top Speed\\Player 3":{"note":"","data":["800F5566 0005"],"options":null},"Infinite\\Max Top Speed\\Player 4":{"note":"","data":["800F5752 0005"],"options":null},"Infinite\\Nitro\\Player 1":{"note":"","data":["800F518F 0009"],"options":null},"Infinite\\Nitro\\Player 2":{"note":"","data":["800F537B 0009"],"options":null},"Infinite\\Nitro\\Player 3":{"note":"","data":["800F5567 0009"],"options":null},"Infinite\\Nitro\\Player 4":{"note":"","data":["800F5753 0009"],"options":null},"Laps 2 Race":{"note":"","data":["80118760 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"[Press F9]\\All Cars (All Modes)":{"note":"","data":["880E99CB 000E","881023B1 000E"],"options":null},"[Press F9]\\Jump To Season 6":{"note":"","data":["881023A8 0005"],"options":null}},"0684FBFB-5D3EA8A5-C:45":{"All levels complete":{"note":"","data":["800D13C4 000C","800D13C5 000A","800D13C6 000A","800D13C7 000A","800D13C8 000A","800D13C9 000A"],"options":null},"Infinite\\\u0026 Max Minerals":{"note":"","data":["50000C04 0000","810B1D46 FFFF","50000C04 0000","810B1D44 3B9A","50000C04 0000","810B1D46 C9FF"],"options":null},"Infinite\\\u0026 Max Vespene Gas":{"note":"","data":["50000C04 0000","810B1D76 FFFF","50000D04 0000","810B1D74 3B9A","50000D04 0000","810B1D76 C9FF"],"options":null}},"07861842-A12EBC9F-C:45":{"Always Low Temp":{"note":"","data":["810E4F98 0000","810E4F9A 0000"],"options":null},"Auto-Pilot Always On Turbo (Original Excitebike Mode)":{"note":"","data":["810E3142 19AA"],"options":null},"Earthquake Mode":{"note":"","data":["810D7010 3AD0"],"options":null},"Fast\\Movement (Drones)":{"note":"","data":["800D9D55 00A0"],"options":null},"Fast\\Movement (Player)":{"note":"","data":["800D9D65 00AF"],"options":null},"Max Stunt Points":{"note":"","data":["810E4D18 0098","810E4D1A 967F"],"options":null},"No\\Collision Drivers":{"note":"","data":["800D9D34 0040"],"options":null},"No\\Overheating":{"note":"","data":["800CA984 00C3"],"options":null},"Power Turbo":{"note":"","data":["800CA99C 0040","800CA99D 00E0"],"options":null},"Slow\\Movement (Drones)":{"note":"","data":["800D9D55 0060"],"options":null},"Slow\\Movement (Player)":{"note":"","data":["800D9D65 0060"],"options":null},"Steering Control":{"note":"","data":["800C9E50 0040"],"options":null},"Super Speed For All":{"note":"","data":["800CA9A0 0040","800CA9A1 0070"],"options":null},"Unlock\\Difficulties \u0026 All Special Tracks":{"note":"","data":["810F2D50 FFFF"],"options":null},"Unlock\\Silver \u0026 Gold Cup":{"note":"","data":["810F2D4E 0003"],"options":null}},"079501B9-AB0232AB-C:4A":{"All Equipment Registered":{"note":"","data":["50001402 0000","810F40D8 FFFF"],"options":null},"All Equipment Unhighlighted":{"note":"","data":["50001402 0000","810F4100 FFFF"],"options":null},"All Equipment Unlocked":{"note":"","data":["50001402 0000","810F40B0 FFFF"],"options":null},"All Help Notes Available For Player 1":{"note":"","data":["50000602 0000","810F409C FFFF"],"options":null},"All Stuff Available For Player 1":{"note":"This modifies your save file. That will make all the multiplayer stages available, as well as unlocking every part. The actual breakdown is:","data":["50003802 0000","810F4230 FFFF"],"options":null},"Side Invincible\\Player 1":{"note":"","data":["811FC00C 447A"],"options":null},"Side Invincible\\Player 2":{"note":"","data":["811FC034 447A"],"options":null}},"07A69D01-9A7D41A1-C:50":{"Have 6 Carrots":{"note":"","data":["80164519 007E"],"options":null},"Have All\\Collectibles\\Stage 1":{"note":"","data":["80164510 0014"],"options":null},"Have All\\Collectibles\\Stage 2":{"note":"","data":["80164511 0014"],"options":null},"Have All\\Collectibles\\Stage 3":{"note":"","data":["80164512 0014"],"options":null},"Have All\\Collectibles\\Stage 4":{"note":"","data":["80164513 0014"],"options":null},"Have All\\Collectibles\\Stage 5":{"note":"","data":["80164514 0014"],"options":null},"Have All\\Collectibles\\Stage 6":{"note":"","data":["80164515 0014"],"options":null},"Have All\\Costumes":{"note":"","data":["8016451A 00FE"],"options":null},"Have All\\Levels":{"note":"","data":["80164508 003F"],"options":null},"Infinite Health":{"note":"","data":["8018BA7D 000F"],"options":null},"Max Collectable Items":{"note":"","data":["80164501 0014"],"options":null},"Press L To levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D018BAB5 0020","8118B9E0 4200"],"options":null}},"07C1866E-5775CCDE-C:50":{"Max Constructor Points":{"note":"","data":["8103A8F8 03E7"],"options":null},"Max Driver Points":{"note":"","data":["8103A8F6 03E7"],"options":null}},"07F3B276-EC8F3D39-C:45":{"Have All\\Races":{"note":"","data":["81088756 FFFF"],"options":null},"Have All\\Tracks":{"note":"","data":["8108875A FFFF"],"options":null},"Infinite Credits":{"note":"","data":["8008D659 0063"],"options":null},"Unlock All Characters \u0026 Extra Cheats":{"note":"","data":["81088750 FFFF","81088752 FFFF"],"options":null}},"08123595-0510F1DE-C:45":{"1-Hit Death\\Player 1":{"note":"","data":["D01502AA 0064","811502AA 0100"],"options":null},"1-Hit Death\\Player 2":{"note":"","data":["D0152926 0064","81152926 0100"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["811502AA 6400"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["811502AA 6400"],"options":null},"Infinite Jetpack\\Player 1":{"note":"","data":["811502B2 3200"],"options":null},"Infinite Jetpack\\Player 2":{"note":"","data":["8115292E 3200"],"options":null},"Infinite Shield\\Player 1":{"note":"","data":["811502AE 6400"],"options":null},"Infinite Shield\\Player 2":{"note":"","data":["8115292A 6400"],"options":null},"Needs 1 Match to Win\\Player 1":{"note":"","data":["D015029B 0000","8015029B 0001"],"options":null},"Needs 1 Match to Win\\Player 2":{"note":"","data":["D0152917 0000","80152917 0001"],"options":null},"Never Wins\\Player 1":{"note":"","data":["8015029B 0000"],"options":null},"Never Wins\\Player 2":{"note":"","data":["80152917 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["801ABB2B 00??"],"options":{"ChainSaw":"0D","Mutilator":"0C","PainMaster":"0B","She-Freak":"0A"}}},"0894909C-DAD4D82D-C:45":{"Big\\Glove Mode":{"note":"","data":["800F401D 0001"],"options":null},"Big\\Head Mode":{"note":"","data":["800F401C 0001"],"options":null},"Infinite\\Creation Points":{"note":"","data":["81063742 0064"],"options":null},"Player 1\\Character Modifier":{"note":"","data":["800EC6F3 00??"],"options":{"Alameda":"23","Ali":"00","Ang":"2B","Argnello":"13","Barclay":"32","Bazzel":"44","Botti":"2D","Bristov":"2C","Bunch":"3F","Butterbean":"07","Carr":"0E","Coallier":"49","Created Boxer":"1A","Creater Boxer":"1B","De La Hoya":"08","Dempsey":"1C","Dexter":"42","Di Ricco":"36","Duran":"0B","Eckhardt":"27","Eklund":"46","F. Sandoval":"2A","Frazier":"01","Garrett":"31","Giolito":"30","Greenberg":"3B","Hagler":"0A","Hasson":"22","Holmes":"02","Holyfield":"03","Hopra":"26","Hsu":"43","IUppa":"1E","K. Orr":"1D","Kelley":"17","Lajoie":"3A","Leonard":"09","Lewis":"04","Lupidi":"34","M. Broadhurst":"38","Manfredy":"16","Mayweather":"15","Moskey":"11","O'Grady":"14","Parker":"28","Perone":"3D","Philippine":"37","Pole":"21","Pryor":"12","Quartey":"0D","Quinn":"3C","Random":"19","Reid":"10","Romero":"18","Ruiz":"29","S. Broadhurst":"20","S. Orr":"2E","S. Sandoval":"1F","Scott":"25","Spinks":"06","St. Aubyn":"40","Tallarico":"47","Thompson":"45","Tool":"3E","Tua":"05","Vargas":"0F","W. Aguitar":"35","Wahlberg":"24","Weaver":"39","Wells":"41","Whitaker":"0C","Wynne":"33","Zarifes":"2F","de Leon":"48"}},"Player 1\\Infinite\\Health":{"note":"","data":["8106B974 42C8","8106B976 0000"],"options":null},"Player 1\\Max\\Power":{"note":"","data":["8106B980 0000","8106B982 0BB2"],"options":null},"Player 1\\No Health":{"note":"","data":["8106B974 0000","8106B976 0000"],"options":null},"Player 1\\No Power":{"note":"","data":["8106B980 0000","8106B982 0000"],"options":null},"Player 1\\Power Punch After 1st Punch":{"note":"","data":["8006B983 0064"],"options":null},"Player 2\\Character Modifier":{"note":"","data":["800EC6F7 00??"],"options":{"Alameda":"23","Ali":"00","Ang":"2B","Argnello":"13","Barclay":"32","Bazzel":"44","Botti":"2D","Bristov":"2C","Bunch":"3F","Butterbean":"07","Carr":"0E","Coallier":"49","Created Boxer":"1A","Creater Boxer":"1B","De La Hoya":"08","Dempsey":"1C","Dexter":"42","Di Ricco":"36","Duran":"0B","Eckhardt":"27","Eklund":"46","F. Sandoval":"2A","Frazier":"01","Garrett":"31","Giolito":"30","Greenberg":"3B","Hagler":"0A","Hasson":"22","Holmes":"02","Holyfield":"03","Hopra":"26","Hsu":"43","IUppa":"1E","K. Orr":"1D","Kelley":"17","Lajoie":"3A","Leonard":"09","Lewis":"04","Lupidi":"34","M. Broadhurst":"38","Manfredy":"16","Mayweather":"15","Moskey":"11","O'Grady":"14","Parker":"28","Perone":"3D","Philippine":"37","Pole":"21","Pryor":"12","Quartey":"0D","Quinn":"3C","Random":"19","Reid":"10","Romero":"18","Ruiz":"29","S. Broadhurst":"20","S. Orr":"2E","S. Sandoval":"1F","Scott":"25","Spinks":"06","St. Aubyn":"40","Tallarico":"47","Thompson":"45","Tool":"3E","Tua":"05","Vargas":"0F","W. Aguitar":"35","Wahlberg":"24","Weaver":"39","Wells":"41","Whitaker":"0C","Wynne":"33","Zarifes":"2F","de Leon":"48"}},"Player 2\\Infinite\\Health":{"note":"","data":["8106BA7C 42C8","8106BA7E 0000"],"options":null},"Player 2\\Max\\Power":{"note":"","data":["8106BA88 0000","8106BA8A 0BB2"],"options":null},"Player 2\\No Health":{"note":"","data":["8106BA7C 0000","8106BA7E 0000"],"options":null},"Player 2\\No Power":{"note":"","data":["8106BA88 0000","8106BA8A 0000"],"options":null},"Player 2\\Power Punch After 1st Punch":{"note":"","data":["8006BA8B 0064"],"options":null},"Ring Modifier":{"note":"","data":["800EC703 00??"],"options":{"Caesars Palace":"01","Ecko Sports Arena":"02","Great Western Forum":"00","International Arena":"03","Knockout Kings Arena":"08","Local 440":"04","Roppongi Palace":"06","The Colosseum":"05","Wembley Arena":"07"}},"Stop Timer":{"note":"","data":["81067546 001C"],"options":null}},"08D49262-03763D39-C:00":{"God Mode":{"note":"","data":["80774EB7 00??"],"options":{"Off":"00","On":"01"}}},"08FFA4B7-01F453B6-C:45":{"All Boards Complete":{"note":"","data":["50001802 0000","810B3578 0001"],"options":null},"Always 1st/Low Time":{"note":"","data":["81350C02 0000","80350C17 0063"],"options":null},"Free Ride Complete\\Stage 1-Boarder":{"note":"","data":["800B357A 0001"],"options":null},"Free Ride Complete\\Stage 1-Skier":{"note":"","data":["800B3578 0001"],"options":null},"Free Ride Complete\\Stage 2-Boarder":{"note":"","data":["800B3586 0001"],"options":null},"Free Ride Complete\\Stage 2-Skier":{"note":"","data":["800B3584 0001"],"options":null},"Free Ride Complete\\Stage 3-Boarder":{"note":"","data":["800B3592 0001"],"options":null},"Free Ride Complete\\Stage 3-Skier":{"note":"","data":["800B3590 0001"],"options":null},"Free Ride Complete\\Stage 4-Boarder":{"note":"","data":["800B359E 0001"],"options":null},"Free Ride Complete\\Stage 4-Skier":{"note":"","data":["800B359C 0001"],"options":null},"Giant Slalom Complete\\Stage 1-Boarder":{"note":"","data":["800B3582 0001"],"options":null},"Giant Slalom Complete\\Stage 1-Skier":{"note":"","data":["800B3580 0001"],"options":null},"Giant Slalom Complete\\Stage 2-Boarder":{"note":"","data":["800B358E 0001"],"options":null},"Giant Slalom Complete\\Stage 2-Skier":{"note":"","data":["800B358C 0001"],"options":null},"Giant Slalom Complete\\Stage 3-Boarder":{"note":"","data":["800B359A 0001"],"options":null},"Giant Slalom Complete\\Stage 3-Skier":{"note":"","data":["800B3598 0001"],"options":null},"Giant Slalom Complete\\Stage 4-Boarder":{"note":"","data":["800B35A6 0001"],"options":null},"Giant Slalom Complete\\Stage 4-Skier":{"note":"","data":["800B35A4 0001"],"options":null},"Infinite Stamina":{"note":"","data":["8034F798 0012"],"options":null},"Slalom Complete\\Stage 1-Boarder":{"note":"","data":["800B357E 0001"],"options":null},"Slalom Complete\\Stage 1-Skier":{"note":"","data":["800B357C 0001"],"options":null},"Slalom Complete\\Stage 2-Boarder":{"note":"","data":["800B358A 0001"],"options":null},"Slalom Complete\\Stage 2-Skier":{"note":"","data":["800B3588 0001"],"options":null},"Slalom Complete\\Stage 3-Boarder":{"note":"","data":["800B3596 0001"],"options":null},"Slalom Complete\\Stage 3-Skier":{"note":"","data":["800B3594 0001"],"options":null},"Slalom Complete\\Stage 4-Boarder":{"note":"","data":["800B35A2 0001"],"options":null},"Slalom Complete\\Stage 4-Skier":{"note":"","data":["800B35A0 0001"],"options":null}},"09465AC3-F8CB501B-C:50":{"Always Have Wallet Size":{"note":"","data":["801189FA 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C6A7D 0010","81119CBE 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["80119841 00FF","80119CB7 00??"],"options":{"Off":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C6A7D 0000","80119D6B 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["8002399C 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801189DE 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801189DF 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801189E0 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801189E1 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1850 0005","801EE290 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801189FA 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801189FB 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801189F9 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189F4 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189FC 30FF","811189FE FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801189D0 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801189D6 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801189DC 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["801189D4 0009"],"options":null},"Have\\Bombs":{"note":"","data":["801189CE 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["801189D8 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["801189CD 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["801189CC 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["801189CF 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["801189D2 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["801189D5 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["801189D9 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["801189DA 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["801189D1 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["801189D7 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["801189DD 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["801189DB 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["801189D3 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["801189E7 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["50000B01 0000","80118A00 0007","50000501 0000","80118A17 0009","80118A1F 0009","80118A21 0009","80118A24 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801189EC 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["801189E6 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801189E5 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801189EA 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801189E4 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118988 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118991 0008","80118992 0001","80118994 0001","8011898B 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801189F2 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["81119D24 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["80119D29 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["80119D2D 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D011BB37 0020","811D9410 40CB","D011BB37 0000","811D9C32 000D","801189C8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119D61 00??"],"options":{"English":"00","French":"02","German":"01"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["80118A27 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["80118A29 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["81118986 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["81119D20 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D011BB37 0020","811D9C32 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D011BB37 0020","811D9410 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C6A7D 0010","8011895F 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["81118964 ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["801189E2 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["801189E3 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["801189C8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["80118996 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119B7A 0000","81119B7C 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"096A40EA-8ABE0A10-C:45":{"Cheat Select":{"note":"","data":["8109ACBE ????"],"options":{"All Of The Above":"0FFF","All Pick-Ups Are Grapple":"0040","All Pick-Ups Are Green":"0010","All Pick-Ups Are Red":"0004","All Pick-Ups Are Yellow":"0008","Maintain Speed Off Track":"0001","No Chassis":"0400","No Driver":"0800","No Wheels":"0200","Pick-Ups Are Maximum":"0080","Reversed Rocket Racer Run Track":"0020","Rocket Cars":"0002","Turbo Mode":"0100"}},"Have All Tracks and Building Pieces":{"note":"","data":["812576D4 FFFF","812576D6 FFFF"],"options":null}},"09CC4801-E42EE491-C:4A":{"Infinite Fuel\\Gyrocopter":{"note":"","data":["80355211 0081"],"options":null},"Infinite Fuel\\Rocket Belt":{"note":"","data":["80355231 0081"],"options":null},"Infinite Photos":{"note":"","data":["81342F5E 0000"],"options":null},"Music Volume Select":{"note":"","data":["8025C454 00??"],"options":{"Max Volume":"04","Medium Volume":"02","No Music":"00"}},"Time Always 00'00'10":{"note":"This Cheat code is for All Events","data":["80355140 0001"],"options":null}},"09D53E16-3AB268B9-C:45":{"Almost Always Hit A Home Run":{"note":"","data":["80195714 0001"],"options":null},"Away Team\\Score 0":{"note":"Do not use with Away Team Scors 30","data":["801606B5 0000"],"options":null},"Away Team\\Score 30":{"note":"Do not use with Away Team Scors 30","data":["801606B5 001E"],"options":null},"Fast Game":{"note":"","data":["80195729 0001"],"options":null},"Home Team\\Score 0":{"note":"Do not use with Home Team Scors 30","data":["801606B7 0000"],"options":null},"Home Team\\Score 30":{"note":"Do not use with Home Team Scors 0","data":["801606B7 001E"],"options":null},"Increased Gravity":{"note":"","data":["80195727 0001"],"options":null},"Infinite\\Balls":{"note":"","data":["801606D0 0000"],"options":null},"Infinite\\Strikes":{"note":"","data":["801606D1 0000"],"options":null},"Low Gravity":{"note":"","data":["80195726 0001"],"options":null},"Slow Game":{"note":"","data":["8019572A 0001"],"options":null},"Stadium Modifier":{"note":"","data":["800DE7E5 00??"],"options":{"3 Rivers Stadium":"16","3com Park at Candle Stick Park":"06","Baltimore":"05","Bank One Ballpark":"03","Bush Stadium":"15","Cinergy Field":"12","Comiskey Park":"07","Coors Field":"08","Devil's Thumb Stadium":"1E","Dodger Stadium":"0F","Edison Into Field":"00","Fenway Park":"0A","Hubert Humphrey Metrodome":"1A","Jacobs Field":"0B","Kauffman Stadium":"0D","Milwaukee County Stadium":"04","Oakland Alameda Country Stadium":"10","Olympics Stadium":"09","Proplayer Stadium":"0C","Qualcomm Stadium at Jack Murphy Field":"11","Shea Stadium":"13","Skydome":"14","The Astrodome":"02","The Ball Park At Arlington":"01","The Kingdom":"0E","Tiger Stadium":"17","Tropicane Field":"18","Turner Field":"19","Veterans Stadium":"1B","Wrigley Field":"1C","Yankee Stadium":"1D"}}},"0A1667C7-293346A6-C:50":{"1 Win To Win\\Player 1":{"note":"","data":["D00C0983 0000","800C0983 0001"],"options":null},"1-Hit Death to Player 1\\Player 2":{"note":"","data":["D10B5EF0 42C8","810B5EF0 4080"],"options":null},"1-Hit Death to Player 2\\Player 1":{"note":"","data":["D10B60D4 42C8","810B60D4 4080"],"options":null},"Fight Forest Team":{"note":"Select Hardest Difficulty + Quest Mode","data":["810BF482 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["810B5EF0 42C8"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["810B60D4 42C8"],"options":null},"Invisibility\\Player 1":{"note":"","data":["810BF3A2 0001"],"options":null},"Join River Team":{"note":"Select Quest Mode","data":["810BF482 0001"],"options":null},"Needs 1 Win To Win\\Player 2":{"note":"","data":["D00C0985 0000","800C0985 0001"],"options":null},"P1 Never Wins\\Player 2":{"note":"","data":["800C0983 0000"],"options":null},"P2 Never Wins\\Player 1":{"note":"","data":["800C0985 0000"],"options":null},"Player 1 Has No Energy\\Player 2":{"note":"","data":["810B5EF0 C080"],"options":null},"Player 2 Has No Energy\\Player 1":{"note":"","data":["810B60D4 C080"],"options":null},"Unlock Titan Difficulty Level":{"note":"","data":["810BF4D2 0001"],"options":null}},"0A5D8F83-98C5371A-C:50":{"All Equipment Upgrades":{"note":"","data":["801E6F5D 0023","811E6FAA 201B","801E6F3C 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03DE37B 0000","801E6EF2 00??"],"options":{"Beneaf the Graveyard":"02","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Green Blobs":"71","Inside The Royal Palace of the Deku Kingdom 1":"4E","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House":"00","Outside Magic Hag's Potion Shop":"08","Outside The Royal Palace of the Deku Kingdom":"4A","Outside Tourist Information Southern Swamp":"06","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Waterfall Sothern Swamp":"7F"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801E6F72 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801E6F73 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801E6F74 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801E6F75 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801E6F76 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801E6F77 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801E6F65 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801E6F6B 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801E6F71 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Have Item Modifier":{"note":"","data":["801E6F70 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\All Masks":{"note":"","data":["811E6F78 3E39","811E6F7A 4745","811E6F7C 4032","811E6F7E 3A46","811E6F80 3842","811E6F82 4833","811E6F84 3C3D","811E6F86 373F","811E6F88 3634","811E6F8A 4341","811E6F8C 3B44","811E6F8E 4935"],"options":null},"Have\\Bombchu":{"note":"","data":["801E6F67 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801E6F66 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801E6F69 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801E6F68 0008"],"options":null},"Have\\Fire Arrow":{"note":"","data":["801E6F62 0002"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801E6F70 0010"],"options":null},"Have\\Have\\Ocarina of Time":{"note":"","data":["801E6F60 0000"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801E6F61 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801E6F6F 000F"],"options":null},"Have\\Ice Arrow":{"note":"","data":["801E6F63 0003"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801E6F6E 000E"],"options":null},"Have\\Light Arrow":{"note":"","data":["801E6F64 0004"],"options":null},"Have\\Magic Beans":{"note":"","data":["801E6F6A 000A"],"options":null},"Have\\Pictograph":{"note":"","data":["801E6F6D 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801E6F6C 000C"],"options":null},"Have\\QuestStatus Items":{"note":"","data":["801E6FAD 0005","811E6FAE F7CF"],"options":null},"Infinite\\Health":{"note":"","data":["811E6F26 03E7"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811E6F24 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"This is Infinite use of Bombs,Bombchus,Deku Sticks,Deku Nuts,Magic Beans,\u0026 Powder Kegs. But you must also put it's Have on to work.","data":["801E6F91 0063","50000801 0000","801E6F96 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801E6F29 0060","811E6F30 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811E6F2A 03E7"],"options":null},"Play As":{"note":"","data":["801E6F10 00??"],"options":{"- Fierce Deity Link":"00","Deku Link":"03","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03DE37B 0020","813F7658 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You have been warned.","data":["801E6F3C 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F30F6 0008","811E6F06 FFFD","D01F30F6 0004","811E6F06 0000","D01F30F6 0002","811E6F06 FFFE"],"options":null},"Use all C Buttons":{"note":"","data":["811EAE08 0000","811EAE0A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["803DE37A 0000","803F6BD5 0001","813F6BDA ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"0AA0055B-7637DF65-C:50":{"Infinite Time\\Basketball Gym":{"note":"","data":["8029F901 0042"],"options":null},"Infinite Time\\Cecil's Flying Toys":{"note":"","data":["802A5575 0042"],"options":null},"Infinite Time\\Flight Test Range":{"note":"","data":["802BA3A9 0042"],"options":null},"Infinite Time\\Slippery Slide":{"note":"","data":["802A7E8D 0042"],"options":null},"Infinite\\Atoms":{"note":"","data":["80159667 00C8"],"options":null},"Infinite\\Health":{"note":"","data":["80026DE3 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["80026DE7 0063"],"options":null},"Infinite\\Quarks":{"note":"","data":["80159663 00C8"],"options":null},"Tennis CPU Can't Score":{"note":"","data":["801D7B4B 0000"],"options":null}},"0AC61D39-ABFA03A6-C:50":{"Access all items In Inventory":{"note":"","data":["8111F8BE 1FFF"],"options":null},"Tickets\\Gold":{"note":"","data":["8111F8C8 FFFF"],"options":null},"Tickets\\Red":{"note":"","data":["8111F8C6 FFFF"],"options":null}},"0ADAECA7-B17F9795-C:45":{"Always Have Retreat \u0026 Elem Pedra Opened":{"note":"Do not put this on until in-game or the game will freeze.","data":["D01A1C92 0000","811A1C92 0003"],"options":null},"Day Always 00":{"note":"","data":["811F108C 0000"],"options":null},"Finish All Levels":{"note":"","data":["81196AA6 5454","81196AA8 5140","81196AAA 4555","81196AAC 9514","81196AAE 5515"],"options":null},"Hour Always":{"note":"","data":["80196A4D 00??"],"options":{"(0 Hour - 24:00 PM - Midnight)":"00","(01:00 AM)":"01","(02:00 AM)":"02","(03:00 AM)":"03","(04:00 AM)":"04","(05:00 AM)":"05","(06:00 AM)":"06","(07:00 AM)":"07","(08:00 AM)":"08","(09:00 AM)":"09","(10:00 AM)":"0A","(11:00 AM)":"0B","(12:00 PM - Noon)":"0C","(13:00 - 1 PM)":"0D","(14:00 - 2 PM)":"0E","(15:00 - 3 PM)":"0F","(16:00 - 4 PM)":"10","(17:00 - 5 PM)":"11","(18:00 - 6 PM)":"12","(19:00 - 7 PM)":"13","(20:00 - 8 PM)":"14","(21:00 - 9 PM)":"15","(22:00 - 10 PM)":"16","(23:00 - 11 PM)":"17"}},"Infinite Goth":{"note":"","data":["81196A8E FFFF"],"options":null},"Magnus\\Infinite HP":{"note":"","data":["81193C30 03E7"],"options":null},"Magnus\\Level 99":{"note":"","data":["80193C2B 0063"],"options":null},"Magnus\\Max Agi":{"note":"","data":["81193C3C 03E7"],"options":null},"Magnus\\Max Dex":{"note":"","data":["81193C3E 03E7"],"options":null},"Magnus\\Max HP":{"note":"","data":["81193C2E 03E7"],"options":null},"Magnus\\Max Int":{"note":"","data":["81193C38 03E7"],"options":null},"Magnus\\Max Mem":{"note":"","data":["81193C3A 03E7"],"options":null},"Magnus\\Max Str":{"note":"","data":["81193C34 03E7"],"options":null},"Magnus\\Max Vit":{"note":"","data":["81193C36 03E7"],"options":null},"Max Goth":{"note":"","data":["81196A8C 0098","81196A8E 967F"],"options":null},"Open All Paths":{"note":"","data":["81196AA0 01FF","81196AA2 677F","81196AA4 FCFF"],"options":null}},"0B58B8CD-B7B291D2-C:50":{"Have Alien Artifact":{"note":"","data":["8004DC8F 0001"],"options":null},"Infinite Ammo All Weapons":{"note":"","data":["50001102 0000","81048176 8000"],"options":null},"Infinite\\Fuel":{"note":"","data":["8004E46C 0050"],"options":null},"Infinite\\Greece":{"note":"","data":["81052B48 0098","81052B4A 967F"],"options":null},"Infinite\\Health":{"note":"","data":["8004DD1C 0002"],"options":null},"Item Modifier":{"note":"","data":["8004DC7F ????"],"options":{"All Items":"FFFF","Crank":"0040","Hangar Key":"0400","Heirglyph Map Piece":"0100","Howitzer Shells":"0002","Nothing":"0000","Windmill Cog":"0080"}},"Level Select":{"note":"","data":["80047FC3 00??"],"options":{"America":"03","Comet":"05","Greece":"01","Java":"02","Siberia":"04"}},"No Humans Killed":{"note":"","data":["8104819A 0000"],"options":null},"Press L To Wall Over Water, Climb Hills":{"note":"","data":["D0047609 0020","8104DD02 0808"],"options":null},"Weapon Select\\1st Position":{"note":"","data":["80048168 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\2nd Position":{"note":"","data":["80048169 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\3rd Position":{"note":"","data":["8004816A 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\4th Position":{"note":"","data":["8004816B 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\5th Position":{"note":"","data":["8004816C 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\6th Position":{"note":"","data":["8004816D 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\7th Position":{"note":"","data":["8004816E 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\8th Position":{"note":"","data":["8004816F 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}}},"0B6B4DDB-9671E682-C:45":{"Cheats Enabled Modifier":{"note":"","data":["8008F840 ????"],"options":{"Anyway (Race Circuits Backwards)":"0400","Big Wheels (Big Foot Cars)":"0040","Car Radio (Remote Control Cars)":"0100","Chopper (Top Down View)":"0200","Easy Money (You Get 1":"0008","Extra Resolution (Able To Change Resolution In Options Screen)":"0800","Fast Bucks (You Get 250":"0004","Skywalker (Hover Cars)":"0080","Smurfing (High Pitched Voices)":"0020","Trophies (Second And Third Championships Wins)":"0010"}},"Have\\Access All Trophies":{"note":"Also gives you all extra features in quick race \u0026 Trophy mode","data":["800BA9EB 0007","800BABFF 0007"],"options":null},"Have\\Always 1st":{"note":"","data":["800C1ED1 0001","800C1ED3 0001"],"options":null},"Have\\Easy Win":{"note":"Right After Start,Go, Quit Race, And you Have Won","data":["800BABFD 000A"],"options":null},"Have\\Infinite Max Cash":{"note":"","data":["810BABF4 3AFF","810BABF6 F454"],"options":null},"Have\\Infinite Supply Of Super Tires":{"note":"For All Cars","data":["5000220C 0000","810BACA8 0F0F","5000220C 0000","810BACAA 0F0F"],"options":null},"Have\\Lots Of Seasons":{"note":"","data":["810BABFA 03E7"],"options":null},"Have\\Max Race Points":{"note":"","data":["800BAC0E 00FF"],"options":null},"Have\\Max Upgrade":{"note":"For All Cars","data":["5000220C 0200","810BACA6 0270"],"options":null},"Race Options\\Laps To Race Select":{"note":"","data":["800A4599 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Race Options\\Race Direction Select":{"note":"","data":["800A4551 00??"],"options":{"Mirrored Normal":"02","Mirrored Reverse":"03","Normal":"00","Reverse":"01"}},"Race Options\\Track Select":{"note":"","data":["8008F9AD 00??"],"options":{"Area 51":"04","Chateau":"07","Docklands":"08","Lumber Mill":"03","Oilfields":"05","Rocket Base":"00","Ski Resort":"02","Temple":"01","Titus Park":"09","Tudor Village":"06"}},"Race Options\\View Select":{"note":"Select your View and then at start of Race press C-Up Button","data":["D00C20B1 0000","800C20C1 00??"],"options":{"Behind View":"01","Distant Behind View":"0B","Further Behind View":"02","Helicopter View":"FF","Inside Car":"00"}},"Special Category\\A Car [Mind Star 600]":{"note":"","data":["810BADDE 3D70","810BADE0 0F0F","810BADE2 0F0F"],"options":null},"Special Category\\B Car [Vertige Stallion]":{"note":"","data":["800BAD66 2378","810BAD68 0F0F","810BAD6A 0F0F"],"options":null},"Special Category\\C Car [Mind Star 200R]":{"note":"","data":["810BACD6 0A78","810BACD8 0F0F","810BACDA 0F0F"],"options":null}},"0B93051B-603D81F9-C:45":{"All 52 Gold Gems Collected":{"note":"","data":["8016F540 0003","8016F541 007E","8016F542 00FF","8016F543 00EF","8016F544 00FF","8016F545 007F","8016F546 00FF","8016F547 00FC"],"options":null},"All Stages \u0026 Chapters Unlocked":{"note":"","data":["8016F548 003B"],"options":null},"Infinite Health\\Marina":{"note":"","data":["810ED0E0 03E8"],"options":null},"Infinite Health\\Teran":{"note":"","data":["810F1D60 03E8"],"options":null},"Infinite\\Max Red Gems":{"note":"","data":["81175B66 270F"],"options":null},"Level Select":{"note":"To access this anytime during game, press L+R+Z to enable the menu. Press D-Pad Up / Down to move through the menu, D-Pad Left / Right to change level digits and then press Start to enter level. Don not do this whhile in pause mode (Start Button Pause) or the game will freeze.","data":["D10BC4E8 2030","800BC4E1 0004"],"options":null}},"0C41F9C2-01717A0D-C:46":{"Have 1 Star\\Abdul":{"note":"","data":["80307433 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["8030742F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80307432 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80307431 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80307434 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80307430 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["8030742E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80307435 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80307436 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["80209981 0000","802048A3 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802048A7 0000","8020B849 0000"],"options":null},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EF67B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0209837 0000","80209837 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020B6FF 0000","8020B6FF 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810ADBDC 3F80"],"options":null}},"0C581C7A-3D6E20E4-C:4A":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D51D0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112CD0E 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800EAFC8 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D51B0 0001","50001701 0000","800D51B8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D5440 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D547B 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D51A9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D51AA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D51AB 0003"],"options":null}},"0C5EE085-A167DD3E-C:45":{"Activate Cheat":{"note":"","data":["810A63C6 F5FF"],"options":null},"Arabian Flights\\Infinite Time":{"note":"","data":["810A593E FFFF"],"options":null},"Arabian Flights\\Max Tickets":{"note":"","data":["810A5930 FFFF","810A5932 FFFF","810A5934 FFFF","810A5936 FFFF","810A5938 FFFF","810A593A FFFF","810A593C FFFF"],"options":null},"Clowney Island\\Infinite Time":{"note":"","data":["810A590E FFFF"],"options":null},"Clowney Island\\Max Tickets":{"note":"","data":["810A5900 FFFF","810A5902 FFFF","810A5904 FFFF","810A5906 FFFF","810A5908 FFFF","810A590A FFFF","810A590C FFFF"],"options":null},"Food Fright\\Infinite Time":{"note":"","data":["810A595E FFFF"],"options":null},"Food Fright\\Max Tickets":{"note":"","data":["810A5950 FFFF","810A5952 FFFF","810A5954 FFFF","810A5956 FFFF","810A5958 FFFF","810A595A FFFF","810A595C FFFF"],"options":null},"Have All\\Machine Parts":{"note":"","data":["810A5960 FFFF"],"options":null},"Have All\\Vechicles":{"note":"","data":["810A5968 FFFF"],"options":null},"Infinite\\Max Health":{"note":"","data":["8109F702 000C","8109F706 000C"],"options":null},"Max\\Ticket Switches":{"note":"","data":["810A59A2 00C8"],"options":null},"Max\\Tinker Toys":{"note":"","data":["810A599E 270F"],"options":null},"Mine Blowing\\Infinite Time":{"note":"","data":["810A592E FFFF"],"options":null},"Mine Blowing\\Max Tickets":{"note":"","data":["810A5920 FFFF","810A5922 FFFF","810A5924 FFFF","810A5926 FFFF","810A5928 FFFF","810A592A FFFF","810A592C FFFF"],"options":null},"Paint Misbehaving\\Infinite Time":{"note":"","data":["810A591E FFFF"],"options":null},"Paint Misbehaving\\Max Tickets":{"note":"","data":["810A5910 FFFF","810A5912 FFFF","810A5914 FFFF","810A5916 FFFF","810A5918 FFFF","810A591A FFFF","810A591C FFFF"],"options":null},"Pyramid Scheme\\Infinite Time":{"note":"","data":["810A594E FFFF"],"options":null},"Pyramid Scheme\\Max Tickets":{"note":"","data":["810A5940 FFFF","810A5942 FFFF","810A5944 FFFF","810A5946 FFFF","810A5948 FFFF","810A594A FFFF","810A594C FFFF"],"options":null},"Whoopie World\\Infinite Time":{"note":"","data":["810A58FE FFFF"],"options":null},"Whoopie World\\Max Tickets":{"note":"","data":["810A58F0 FFFF","810A58F2 FFFF","810A58F4 FFFF","810A58F6 FFFF","810A58F8 FFFF","810A58FA FFFF","810A58FC FFFF"],"options":null}},"0C814EC4-58FE5CA8-C:45":{"Infinite Health":{"note":"","data":["81086BCA 0038","800BAF97 0007"],"options":null}},"0CAD17E6-71A5B797-C:50":{"All Tanx \u0026 All Campaigns":{"note":"","data":["50001370 0000","81120546 FFFF","50001370 0000","8112054A FFFF"],"options":null},"All Weapons \u0026 Invulnerable":{"note":"","data":["81121420 0101"],"options":null},"Infinite Edge Power":{"note":"","data":["811A8D20 000A","8111AD08 000A","811AC1E4 000A","811ACB7E 000A","811AAEB4 000A","811AE378 000A","811AD514 000A","811AA51C 000A"],"options":null},"Infinite Tank Credits":{"note":"","data":["8124AB3E 03E7"],"options":null},"Inincibility":{"note":"","data":["81121420 0100"],"options":null},"Level Select":{"note":"","data":["811150B8 0001"],"options":null},"Score Aid":{"note":"","data":["8124A152 FC9A"],"options":null}},"0CB81686-5FD85A81-C:45":{"Away Team\\Always Has The Ball":{"note":"","data":["810590A8 0001","810590AA 0000"],"options":null},"Enable\\Stadium\\4th And Incas":{"note":"","data":["800591A0 00FF"],"options":null},"Enable\\Stadium\\Alpha Blitz":{"note":"","data":["8005919E 00FF"],"options":null},"Enable\\Stadium\\Cosmodome":{"note":"","data":["800591A2 00FF"],"options":null},"Enable\\Stadium\\Dodge City":{"note":"","data":["80059198 00FF"],"options":null},"Enable\\Stadium\\EA Sports":{"note":"","data":["800591A3 00FF"],"options":null},"Enable\\Stadium\\Gridiron":{"note":"","data":["8005919D 00FF"],"options":null},"Enable\\Stadium\\Maddenstein":{"note":"","data":["800591A1 00FF"],"options":null},"Enable\\Stadium\\New Orleans":{"note":"","data":["800591A6 00FF"],"options":null},"Enable\\Stadium\\Nile High":{"note":"","data":["8005919F 00FF"],"options":null},"Enable\\Stadium\\Salvage Field":{"note":"","data":["8005919C 00FF"],"options":null},"Enable\\Stadium\\San Diego":{"note":"","data":["800591A7 00FF"],"options":null},"Enable\\Stadium\\Tampa Bay":{"note":"","data":["800591A5 00FF"],"options":null},"Enable\\Stadium\\Tib Bros":{"note":"","data":["8005919A 00FF"],"options":null},"Enable\\Stadium\\Tiberium":{"note":"","data":["8005919B 00FF"],"options":null},"Enable\\Stadium\\Tiburon":{"note":"","data":["800591A4 00FF"],"options":null},"Enable\\Stadium\\Xmas Rush":{"note":"","data":["80059199 00FF"],"options":null},"Enable\\Team\\All 60's":{"note":"","data":["800598CC 00FF"],"options":null},"Enable\\Team\\All 70's":{"note":"","data":["800598CD 00FF"],"options":null},"Enable\\Team\\All 80's":{"note":"","data":["800598CE 00FF"],"options":null},"Enable\\Team\\All 90's":{"note":"","data":["800598CF 00FF"],"options":null},"Enable\\Team\\Clows":{"note":"","data":["800598D7 00FF"],"options":null},"Enable\\Team\\Comets":{"note":"","data":["800598DF 00FF"],"options":null},"Enable\\Team\\EA Sports":{"note":"","data":["800598D3 00FF"],"options":null},"Enable\\Team\\Industrials":{"note":"","data":["800598DA 00FF"],"options":null},"Enable\\Team\\Junkyard Dogs":{"note":"","data":["800598D9 00FF"],"options":null},"Enable\\Team\\Madden 1999":{"note":"","data":["800598D0 00FF"],"options":null},"Enable\\Team\\Madden Millenium":{"note":"","data":["800598D1 00FF"],"options":null},"Enable\\Team\\Marshalls":{"note":"","data":["800598D5 00FF"],"options":null},"Enable\\Team\\Monsters":{"note":"","data":["800598DE 00FF"],"options":null},"Enable\\Team\\Mummies":{"note":"","data":["800598DC 00FF"],"options":null},"Enable\\Team\\NFL Millenium":{"note":"","data":["800598D2 00FF"],"options":null},"Enable\\Team\\Praetorians":{"note":"","data":["800598D8 00FF"],"options":null},"Enable\\Team\\Sugarbuzz":{"note":"","data":["800598DB 00FF"],"options":null},"Enable\\Team\\Tiburon":{"note":"","data":["800598D4 00FF"],"options":null},"Enable\\Team\\Toymakers":{"note":"","data":["800598D6 00FF"],"options":null},"Enable\\Team\\Vipers":{"note":"","data":["800598DD 00FF"],"options":null},"Have All Secret Codes In Menu":{"note":"","data":["81070788 FFFF","8107078A FFFF","8107078C FFFF","8107078E FFFF"],"options":null},"Home Team\\Always Has The Ball":{"note":"","data":["810590A8 0000","810590AA 0001"],"options":null},"Infinite\\Time-Outs Away Team":{"note":"","data":["8006FE6F 0003"],"options":null},"Infinite\\Time-Outs Home Team":{"note":"","data":["8006CE7F 0003"],"options":null},"Level 1\\200 Yards Of Total Offense Or More":{"note":"","data":["800707C1 0040"],"options":null},"Level 1\\3 Tackles Or More By One Player":{"note":"","data":["800707B7 0040"],"options":null},"Level 1\\Complete A 20 Yard Run Or Longer":{"note":"","data":["800707B1 0040"],"options":null},"Level 1\\Complete A 30 Yard Pass Or Longer":{"note":"","data":["800707B0 0040"],"options":null},"Level 1\\Create A Player And use Him In A Game":{"note":"","data":["800707BA 0040"],"options":null},"Level 1\\Defeat Green Bay In Snow At Lambeau Field":{"note":"","data":["800707B8 0040"],"options":null},"Level 1\\Defeat San Francisco In Rain At 3COM Park":{"note":"","data":["800707B9 0040"],"options":null},"Level 1\\Have A Minimium Of Three Players ON Team Catch One Pass":{"note":"","data":["800707C3 0040"],"options":null},"Level 1\\Hold Your Oppnent to 7 Points Or Less In a Game":{"note":"","data":["800707B3 0040"],"options":null},"Level 1\\Intercept At Least One Pass":{"note":"","data":["800707BF 0040"],"options":null},"Level 1\\Kick A 40 Yard Field Goal Or Longer":{"note":"","data":["800707B5 0040"],"options":null},"Level 1\\Kick A 40 Yard Punt Or Longer":{"note":"","data":["800707B6 0040"],"options":null},"Level 1\\Play A Exhibition Game In A QTR Length Other Than 5 Minutes":{"note":"","data":["800707BB 0040"],"options":null},"Level 1\\Play And Win One Game of The Tournment":{"note":"","data":["800707C2 0040"],"options":null},"Level 1\\Play a Exhibition Game In A Stadium Other Than The Default One":{"note":"","data":["800707BE 0040"],"options":null},"Level 1\\QB Passes For Two TDS Or More":{"note":"","data":["800707BC 0040"],"options":null},"Level 1\\Recover At Least One Fumble":{"note":"","data":["800707C0 0040"],"options":null},"Level 1\\Sack The Opposing QB":{"note":"","data":["800707BD 0040"],"options":null},"Level 1\\Score 21 Points Or More With A QTR Length Of 6 Minutes Or Less":{"note":"","data":["800707B2 0040"],"options":null},"Level 1\\Throw 0 Interceptions In A Game":{"note":"","data":["800707B4 0040"],"options":null},"Level 2\\100 Recption Yards Or Greater By One Player":{"note":"","data":["800707C6 0040"],"options":null},"Level 2\\100 Yards Of Rushing Or Greater By One Player":{"note":"","data":["800707C5 0040"],"options":null},"Level 2\\2 TDS Or More By One Receiver":{"note":"","data":["800707D7 0040"],"options":null},"Level 2\\3 Field Goals Or More By One Player":{"note":"","data":["800707C8 0040"],"options":null},"Level 2\\6 Receptions Or Greater By One Player":{"note":"","data":["800707CE 0040"],"options":null},"Level 2\\Commit No Fumbles In A Game":{"note":"","data":["800707D2 0040"],"options":null},"Level 2\\Complete a 60 Yard Pass Or Longer":{"note":"","data":["800707D4 0040"],"options":null},"Level 2\\Do Not Allow Your QB To Be Sacked In A Game":{"note":"","data":["800707D3 0040"],"options":null},"Level 2\\Have A RB Who Rushes For 3 TDS Or More":{"note":"","data":["800707CF 0040"],"options":null},"Level 2\\Hold Opposing Team To 150 Yards Total Offense Or Less":{"note":"","data":["800707D0 0040"],"options":null},"Level 2\\Play And Win A Pro Bowl Game As The AFC Team":{"note":"","data":["800707D6 0040"],"options":null},"Level 2\\Play And Win A Pro Bowl Game As The NFC Team":{"note":"","data":["800707D5 0040"],"options":null},"Level 2\\Play And Win One Franchise Mode Game":{"note":"","data":["800707CA 0040"],"options":null},"Level 2\\Play And Win One Season Mode Game With Modified Divisions":{"note":"","data":["800707CC 0040"],"options":null},"Level 2\\Play And Win One Season Mode Game Without Modified Divisions":{"note":"","data":["800707CB 0040"],"options":null},"Level 2\\Play And Win Two Games In A Tournment With The Same Team":{"note":"","data":["800707CD 0040"],"options":null},"Level 2\\QB Passes 300 Yards Or More":{"note":"","data":["800707C7 0040"],"options":null},"Level 2\\QB Passes For 4 TDS Or More":{"note":"","data":["800707C9 0040"],"options":null},"Level 2\\QB Rushes For One Rushing TD Or More":{"note":"","data":["800707D1 0040"],"options":null},"Level 2\\Score 40 Points Or More Within A Quarter Length Of 6 Minutes Or Less":{"note":"","data":["800707C4 0040"],"options":null},"Level 3\\150 Reception Yards Or Greater By One Player":{"note":"","data":["800707D9 0040"],"options":null},"Level 3\\150 Yards Rushing Or Greater By One Player":{"note":"","data":["800707D8 0040"],"options":null},"Level 3\\2 Interceptions Or More By One Player":{"note":"","data":["800707DC 0040"],"options":null},"Level 3\\3 Knockdowns Or More By One PLayer":{"note":"","data":["800707DF 0040"],"options":null},"Level 3\\3 Sacks Or More By One Player":{"note":"","data":["800707DB 0040"],"options":null},"Level 3\\3 Tips Or More By One Player":{"note":"","data":["800707E0 0040"],"options":null},"Level 3\\400 Yards Of Total Defense Or More":{"note":"","data":["800707EA 0040"],"options":null},"Level 3\\5 Successful Field Goals Or More By One Player":{"note":"","data":["800707DE 0040"],"options":null},"Level 3\\8 Tackles Or More By One Player":{"note":"","data":["800707E9 0040"],"options":null},"Level 3\\Break 2 Different All-Time Records Or More In A Game":{"note":"","data":["800707E7 0040"],"options":null},"Level 3\\Commit No Penalties In A Game":{"note":"","data":["800707E6 0040"],"options":null},"Level 3\\Complete A 50 Yard Run Or Longer":{"note":"","data":["800707E5 0040"],"options":null},"Level 3\\Have A RB Rush For Over 100 Yards And 50 Yards Receiving":{"note":"","data":["800707EB 0040"],"options":null},"Level 3\\Play And Win A Superbowl In Franchise Mode":{"note":"","data":["800707E1 0040"],"options":null},"Level 3\\Play And Win A Superbowl In Season Mode":{"note":"","data":["800707E2 0040"],"options":null},"Level 3\\Play And Win An 8 Team Tournament":{"note":"","data":["800707E4 0040"],"options":null},"Level 3\\QB Who Passes For 400 Yards Or More":{"note":"","data":["800707DA 0040"],"options":null},"Level 3\\Recover 2 Fumbles Or More":{"note":"","data":["800707DD 0040"],"options":null},"Level 3\\Score 55 Points Or Greater":{"note":"","data":["800707E8 0040"],"options":null},"Level 3\\Successfully Kick 8 Extra Points Or More":{"note":"","data":["800707E3 0040"],"options":null},"Level 4\\200 Receptions Yards Or Greater By One Player":{"note":"","data":["800707ED 0040"],"options":null},"Level 4\\200 Yards Rushing Or Greater By One Player":{"note":"","data":["800707EC 0040"],"options":null},"Level 4\\25 Completions Or More By One QB":{"note":"","data":["800707F2 0040"],"options":null},"Level 4\\40 First Downs Or More":{"note":"","data":["800707FE 0040"],"options":null},"Level 4\\6 Successful Two Point Conversions Or More":{"note":"","data":["800707F1 0040"],"options":null},"Level 4\\650 Yards Of Total Offense Or More By One Team":{"note":"","data":["800707F9 0040"],"options":null},"Level 4\\7 Sacks Or More By One Player":{"note":"","data":["800707F8 0040"],"options":null},"Level 4\\Go Undefeated And Win A Superbowl In One Franchise Mode Season By Playing Every Game":{"note":"","data":["800707F3 0040"],"options":null},"Level 4\\Go Undefeated And Win A Superbowl In One Season Mode Season By Playing Every Game":{"note":"","data":["800707F4 0040"],"options":null},"Level 4\\Have A Minimum Of 7 Members Of Your Team Catch At Least 1 Pass":{"note":"","data":["800707F6 0040"],"options":null},"Level 4\\Have One Reciever With 150 RAC Yards Or Greater":{"note":"","data":["800707FA 0040"],"options":null},"Level 4\\Kick A Punt Of 55 Yards Or More":{"note":"","data":["800707FF 0040"],"options":null},"Level 4\\QB Who Passes For 500 Yards Or More":{"note":"","data":["800707EE 0040"],"options":null},"Level 4\\QB Who Rushes For 75 Yards Or More":{"note":"","data":["800707F5 0040"],"options":null},"Level 4\\Return A Punt For A Touchdown":{"note":"","data":["800707EF 0040"],"options":null},"Level 4\\Return An Interception For A Touchdown":{"note":"","data":["800707F0 0040"],"options":null},"Level 4\\Rush For 100 Yards Or More With 2 Different Running Backs":{"note":"","data":["800707FC 0040"],"options":null},"Level 4\\Rush The Ball 40 Time Or More With A QTR Length Of 6 Minutes Or Less":{"note":"","data":["800707FB 0040"],"options":null},"Level 4\\Win A 16 Team Tournament":{"note":"","data":["800707F7 0040"],"options":null},"Level 4\\Win By A Margin Of 50 Points Or More":{"note":"","data":["800707FD 0040"],"options":null},"Level 5\\200 Kick Return Yards Or Greater By One Player":{"note":"","data":["80070809 0040"],"options":null},"Level 5\\200 Punt Return Yards Or Greater By One Player":{"note":"","data":["80070806 0040"],"options":null},"Level 5\\250 Yards Rushing Or Greater By One Player":{"note":"","data":["80070813 0040"],"options":null},"Level 5\\3 Receivers With 100 Yards Or More Recieving":{"note":"","data":["80070805 0040"],"options":null},"Level 5\\Break 4 Different All-Time Records Or More In A Game":{"note":"","data":["8007080D 0040"],"options":null},"Level 5\\Complete A Run Play Of 80 Yards Or More":{"note":"","data":["8007080A 0040"],"options":null},"Level 5\\Convert 10 4th Down Conversions Or More":{"note":"","data":["8007080B 0040"],"options":null},"Level 5\\Convert To 3RD Down Conversions Or More":{"note":"","data":["80070812 0040"],"options":null},"Level 5\\Have A QB With A 100 Passing PCT While Throwing A Minimum Of 5 Passes":{"note":"","data":["8007080F 0040"],"options":null},"Level 5\\Have A QB With A Pass AVG Of 30 Yards Or Greater While Throwing At Least 5 Passes":{"note":"","data":["80070801 0040"],"options":null},"Level 5\\Have A RB With A Rushing AVG Of 20 Yards Or Greater While Rushing At least 3 Times":{"note":"","data":["80070804 0040"],"options":null},"Level 5\\Pass For 200 Yards Or More With 2 QBS":{"note":"","data":["80070803 0040"],"options":null},"Level 5\\Play And Win A Minimum Of Four Superbowls With The Same Team In Franchise Mode":{"note":"","data":["80070810 0040"],"options":null},"Level 5\\QB Rushes For 3 Touchdowns Or More":{"note":"","data":["80070807 0040"],"options":null},"Level 5\\QB With A Minimum Of 150 Yards Passing And 100 Yards Rushing":{"note":"","data":["8007080C 0040"],"options":null},"Level 5\\RB With A Minimum Of 100 Yards Receiving And 100 Yards Rushing":{"note":"","data":["80070811 0040"],"options":null},"Level 5\\Return A Kickoff For A Touchdown":{"note":"","data":["80070800 0040"],"options":null},"Level 5\\Score 80 Points Or Greater":{"note":"","data":["80070808 0040"],"options":null},"Level 5\\Shut Out Opposing Team With A QTR Length Of 5 Minutes":{"note":"","data":["80070802 0040"],"options":null},"Level 5\\Successfully Kick A FG Of 55 Yards Or More":{"note":"","data":["8007080E 0040"],"options":null},"No Time-Outs\\Away Team":{"note":"","data":["8006EF6F 0000"],"options":null},"No Time-Outs\\Home Team":{"note":"","data":["8006EC7F 0000"],"options":null},"Particle Illusions\\A":{"note":"","data":["8005F19B 00FE"],"options":null},"Particle Illusions\\B":{"note":"","data":["8005F199 0002"],"options":null},"Players\\Evil Crystal":{"note":"","data":["8005F183 000F"],"options":null},"Players\\Generic Black \u0026 White":{"note":"","data":["8005F233 0058"],"options":null},"Players\\Hallow":{"note":"","data":["8005F233 0047"],"options":null},"Players\\Jagged":{"note":"","data":["8005F180 0080"],"options":null},"Players\\Pixel":{"note":"","data":["8005F18D 0001"],"options":null},"Players\\Polygon":{"note":"","data":["8005F183 0001"],"options":null},"Players\\Super Red":{"note":"","data":["8005F43E 0002"],"options":null},"Press GS For More Time To Choose Play":{"note":"","data":["890723E6 0024"],"options":null},"Press L For First Down\\Player 1":{"note":"","data":["D00753DD 0020","81071B18 0001"],"options":null},"Press L For First Down\\Player 2":{"note":"","data":["D00753E5 0020","81071B18 0001"],"options":null},"Press L For First Down\\Player 3":{"note":"","data":["D00753ED 0020","81071B18 0001"],"options":null},"Press L For First Down\\Player 4":{"note":"","data":["D00753F5 0020","81071B18 0001"],"options":null},"Press R For Fourth Down\\Player 1":{"note":"","data":["D00753DD 0010","81071B18 0004"],"options":null},"Press R For Fourth Down\\Player 2":{"note":"","data":["D00753E5 0010","81071B18 0004"],"options":null},"Press R For Fourth Down\\Player 3":{"note":"","data":["D00753ED 0010","81071B18 0004"],"options":null},"Press R For Fourth Down\\Player 4":{"note":"","data":["D00753F5 0010","81071B18 0004"],"options":null},"Uniforms\\Bare":{"note":"","data":["8005F188 008F"],"options":null},"Uniforms\\Future":{"note":"","data":["8005F207 0033"],"options":null},"Uniforms\\Ghetto":{"note":"","data":["8005F188 001F"],"options":null}},"0CEBC4C7-0C9CE932-C:4A":{"Gun 4-Way Shot":{"note":"","data":["801279B3 0004"],"options":null},"Infinite Fuel":{"note":"","data":["811279B6 FFFF"],"options":null},"Infinite Shield":{"note":"","data":["81127958 0264"],"options":null},"Infinite Weapon\\1st Position":{"note":"","data":["811276CA 03E7"],"options":null},"Infinite Weapon\\2nd Position":{"note":"","data":["811276CE 03E7"],"options":null},"Infinite Weapon\\3rd Position":{"note":"","data":["811276D2 03E7"],"options":null},"Infinite Weapon\\4th Position":{"note":"","data":["811276D6 03E7"],"options":null},"Infinite Weapon\\5th Position":{"note":"","data":["811276DA 03E7"],"options":null},"Max Score":{"note":"","data":["811276B6 FFFF"],"options":null},"Stage Select On":{"note":"","data":["81127706 0001"],"options":null},"Weapon Modifier\\Gun Weapon":{"note":"","data":["801279B3 00??"],"options":{"2-Way Shot":"02","3-Way Shot":"03","4-Way Shot":"04","No Weapon":"00","Normal Shot":"01"}},"Weapon Modifier\\Rockets\\Slot 1":{"note":"","data":["801276C9 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\Rockets\\Slot 2":{"note":"","data":["801276CD 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\Rockets\\Slot 3":{"note":"","data":["801276D1 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}}},"0D93BA11-683868A6-C:50":{"Access all crystals":{"note":"","data":["50000701 0000","800D6EC0 0001","50001701 0000","800D6EC8 0007"],"options":null},"Access all difficulty levels":{"note":"100 yard hop, bumper crop bump \u0026 checkerboard chase","data":["50000301 0000","800D6E69 0003"],"options":null},"Access all enemy info":{"note":"","data":["50005101 0000","800D6F10 0002"],"options":null},"All Levels completed":{"note":"You must still beat boss's to continue onto next level","data":["50002B01 0000","800D6EE0 0002"],"options":null},"All Save Slots 100% Completed\\Save slot 1":{"note":"","data":["800ECD18 0064"],"options":null},"All Save Slots 100% Completed\\Save slot 2":{"note":"","data":["800ECD70 0064"],"options":null},"All Save Slots 100% Completed\\Save slot 3":{"note":"","data":["800ECDC8 0064"],"options":null},"Infinite Max Health":{"note":"","data":["800D718F 0006","800D7151 00C0"],"options":null},"Infinite Max Lives":{"note":"","data":["800D714F 0064"],"options":null},"Kirkby can fly unlimited":{"note":"","data":["8012EADF 00F0"],"options":null}},"0DD4ABAB-B5A2A91E-C:45":{"Infinite Max DK Tokens":{"note":"","data":["803A8FD5 0063"],"options":null},"Infinite Max Health":{"note":"","data":["807B6760 0008","807B675F 0003"],"options":null}},"0DE2CE36-D41D29E6-C:4A":{"Infinite\\Max Body Stats":{"note":"","data":["81181788 270F","811817C8 0063","50000C02 0000","81181790 270F","50000502 0000","811817C0 270F","50000602 0000","811817E8 270F","50000602 0000","811817F6 270F"],"options":null},"Infinite\\Max Health":{"note":"","data":["81181780 270F","81181782 270F"],"options":null},"Infinite\\Weapons \u0026 Items":{"note":"Do not put this on until in game. This gives you all Weapons, Items and Keys and infinite use of.","data":["50002508 0000","80181B48 0063","50000808 0000","80181C70 0063"],"options":null},"Level 999":{"note":"","data":["811817C8 270F"],"options":null},"Level and Battle Select":{"note":"The level and battle select screen can be accessed by pressing A at the main menu","data":["801CFB94 0005"],"options":null},"Press L To Levitate":{"note":"","data":["D005D8D1 0020","8124C710 3FCB"],"options":null}},"0E31EDF0-C37249D5-C:50":{"Away Team scores 0 Goals":{"note":"","data":["801AF437 0000"],"options":null},"Away Team scores 25 Goals":{"note":"","data":["801AF437 0019"],"options":null},"Home Team scores 0 Goals":{"note":"","data":["801AF433 0000"],"options":null},"Home Team scores 25 Goals":{"note":"","data":["801AF433 0019"],"options":null}},"0E652C21-F19AD3DE-C:4A":{"Unlock All Jurassic World Dinosaurs":{"note":"","data":["8114237C 0101","8114237E 0101","80142380 0001"],"options":null},"Unlock All Planet Mars Characters":{"note":"","data":["81142384 0101","81142386 0101","80142388 0001"],"options":null},"Unlock All Sea World Animals":{"note":"","data":["81142374 0101","81142376 0101","80142378 0001"],"options":null}},"0EC158F5-FB3E6896-C:45":{"Buster Parts Slot Select\\Slot 01":{"note":"","data":["80204E03 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 02":{"note":"","data":["80204E04 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 03":{"note":"","data":["80204E05 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 04":{"note":"","data":["80204E06 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 05":{"note":"","data":["80204E07 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 06":{"note":"","data":["80204E08 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 07":{"note":"","data":["80204E09 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 08":{"note":"","data":["80204E0A 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 09":{"note":"","data":["80204E0B 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 10":{"note":"","data":["80204E0C 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 11":{"note":"","data":["80204E0D 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 12":{"note":"","data":["80204E0E 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 13":{"note":"","data":["80204E0F 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 14":{"note":"","data":["80204E10 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 15":{"note":"","data":["80204E11 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 16":{"note":"","data":["80204E12 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 17":{"note":"","data":["80204E13 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 18":{"note":"","data":["80204E14 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 19":{"note":"","data":["80204E15 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 20":{"note":"","data":["80204E16 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 21":{"note":"","data":["80204E17 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 22":{"note":"","data":["80204E18 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 23":{"note":"","data":["80204E19 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 24":{"note":"","data":["80204E1A 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 25":{"note":"","data":["80204E1B 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 26":{"note":"","data":["80204E1C 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 27":{"note":"","data":["80204E1D 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 28":{"note":"","data":["80204E1E 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 29":{"note":"","data":["80204E1F 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 30":{"note":"","data":["80204E20 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 31":{"note":"","data":["80204E21 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 32":{"note":"","data":["80204E22 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 33":{"note":"","data":["80204E23 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 01":{"note":"","data":["80204E00 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 02":{"note":"","data":["80204E01 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 03":{"note":"","data":["80204E02 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Freeze Timer at 00:00":{"note":"","data":["811BC3F4 0000","811BC3F6 0000"],"options":null},"Have\\All Special Weapons":{"note":"With this code, Roll is the one that has to equip the weapons before you can use them.","data":["81205640 FFFF"],"options":null},"Have\\Normal Items":{"note":"","data":["81205650 FFFF","81205652 FFFF","81205654 FFFF","81205656 FFFF"],"options":null},"Have\\Special Items":{"note":"","data":["8120564C FFFF","8120564E FFFF"],"options":null},"Infinite\\Ammo":{"note":"","data":["81204EBA 0080","81204EC2 0010","81204ECA 0708","81204ED2 0018","81204EDA 0010","81204EE2 0708","81204EEA 0020","81204EF2 0020","81204EFA 0020","81204F02 0018","81204F0A 012C","81204F12 0258"],"options":null},"Infinite\\Health":{"note":"","data":["81204A1E 0050"],"options":null},"Infinite\\Zenny":{"note":"","data":["811BC404 0098","811BC406 967F"],"options":null},"Rapid Fire":{"note":"","data":["80204EB3 0002"],"options":null}},"0F1FA987-BFC1AFA6-C:45":{"99 Points Player 1":{"note":"","data":["8010C1EF 0063"],"options":null},"Access All\\Cars \u0026 Tracks":{"note":"","data":["8104ACA6 0001"],"options":null},"Access All\\Cups":{"note":"","data":["800542F3 0003","800542D5 0000","800542D6 0000","800542D7 0000","8005431F 0003","80054301 0000","80054302 0000","80054303 0000","8005434B 0003","8005432D 0000","8005432E 0000","8005432F 0000"],"options":null},"Always 1st":{"note":"","data":["8111565E 0001","81115666 0000","8110C1EE 03E7"],"options":null},"Drones Have No Weapons":{"note":"","data":["8111CD7E 0000"],"options":null},"Infinite Continues":{"note":"","data":["8110C1E2 0006"],"options":null},"Infinite Weapons\\Player 1":{"note":"","data":["81115648 0000","8111564A 00??","8111564E 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 2":{"note":"","data":["81117B10 0000","81117B12 00??","81117B16 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 3":{"note":"","data":["81119FD8 0000","81119FDA 00??","81119FDE 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 4":{"note":"","data":["8111C4A0 0000","8111C4A2 00??","8111C4A6 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Laps To Race":{"note":"","data":["8107DBCE 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Number Of Drones In The Race":{"note":"","data":["8110FEA6 00??"],"options":{"1 Drone":"01","2 Drones":"02","3 Drones":"03","4 Drones":"04","5 Drones":"05","6 Drones":"06","7 Drones":"07","8 Drones":"08","9 Drones":"09"}}},"0F743195-D8A6DB95-C:50":{"Access\\All Guns \u0026 Infinite Ammo":{"note":"","data":["81207AB4 007F","81207AB6 FFFF","81207B84 03E7","50000A02 0000","81207B70 03E7"],"options":null},"Access\\All Items":{"note":"Press L Button Where Items Are available","data":["D0209D85 0020","81207B8C 007F"],"options":null},"Infinite\\Armour":{"note":"","data":["81207B44 0001","81207B46 03E7"],"options":null},"Infinite\\Health":{"note":"","data":["81207B24 03E7"],"options":null},"Level Select":{"note":"","data":["811C6B4E 0001"],"options":null},"Max\\Attributes":{"note":"","data":["50000502 0000","81207B28 0007"],"options":null},"Max\\Experience":{"note":"","data":["81207B26 03E7"],"options":null}},"102888BF-434888CA-C:45":{"Have All\\Keys":{"note":"","data":["50000410 0000","8017E130 0063","50000410 0000","8017E138 0063"],"options":null},"Have All\\Moves":{"note":"","data":["50005306 0000","81183CE0 0100","50005306 0000","81183CE2 00FF"],"options":null},"Have All\\Moves At Skill Level 250":{"note":"","data":["50000E06 0000","80188F63 00FA","50001306 0000","80188FBD 00FA","50003006 0000","80189047 00FA"],"options":null},"Infinite\\Max Body Stats":{"note":"","data":["8117DC48 270F","8117DC88 0063","50000C02 0000","8117DC50 270F","50000502 0000","8117DC80 270F","50000602 0000","8117DCA8 270F","50000602 0000","8117DCB6 270F"],"options":null},"Infinite\\Max Health":{"note":"","data":["8117DC40 270F","8117DC42 270F"],"options":null},"Infinite\\Refresh Items":{"note":"","data":["50000D10 0000","8017E008 0063","50000C10 0000","8017E010 0063"],"options":null},"Infinite\\Weapons \u0026 Items":{"note":"","data":["50000610 0000","8017E0D0 0063","50000610 0000","8017E0D8 0063"],"options":null},"Level 999":{"note":"","data":["8117DC88 270F"],"options":null},"Level and Battle Select":{"note":"The level and battle select screen can be accessed by pressing A at the main menu","data":["801CC8C4 0005"],"options":null},"Press L To Levitate":{"note":"","data":["D005CE51 0020","8124A0B0 3FCB"],"options":null}},"112051D2-68BEF8AC-C:45":{"Have\\Max Gold":{"note":"","data":["50000401 0000","80277335 00FF"],"options":null},"Have\\Max Total XP":{"note":"","data":["50000401 0000","80278BAD 00FF"],"options":null},"Have\\Max Total XP Remaning to Start":{"note":"This will give you 16777215 Total XP Remaning to start with and after your 1st batle will allow you to buy your Max Stats","data":["50000401 0000","80278BB1 00FF"],"options":null},"Infinite\\99 Health Potions":{"note":"Do Not put this cheat on until you have collected your 1st Health Potion from the 1st Cheat or you will not be able to get into the Sub menu and Continue the game.","data":["802785CB 0063"],"options":null},"Infinite\\Max Health":{"note":"","data":["80278B98 001E"],"options":null}},"1145443D-11610EDB-C:50":{"Extra Characters":{"note":"","data":["8007FA98 0001"],"options":null},"Fight With Bunny Slippers On":{"note":"","data":["81138914 0100"],"options":null},"Infinite Health Player 1":{"note":"","data":["8008B287 0064"],"options":null},"Infinite Health Player 2":{"note":"","data":["8008AEFF 0064"],"options":null},"Infinite\\Continues":{"note":"","data":["8015183B 0006"],"options":null},"Infinite\\Time":{"note":"","data":["8113C5BA 0B9E"],"options":null},"Infinite\\Time To Choose Character":{"note":"","data":["D0137ABE 0001","81137ABE 02A2"],"options":null},"Ned The Janitor":{"note":"","data":["8013C281 0001"],"options":null},"One Hit Death\\Player 1":{"note":"","data":["D008B287 0064","8008B287 0001"],"options":null},"One Hit Death\\Player 2":{"note":"","data":["D008AEFF 0064","8008AEFF 0001"],"options":null},"Play As Options\\Player 1":{"note":"","data":["8113C6E2 ????"],"options":{"AL-Rashid":"33FC","Big Guy with spikes and a skull staff":"34C4","Dregan":"358C","Executioner":"3334","Hellnight":"353C","Koyasha":"33AC","Lord Deimos":"335C","Monk dude with sword":"3514","Mordoskull":"344C","Namira":"449C","Pojo The Chicken":"3564","Ragnar":"33C4","Takeshi":"3424","Taria":"33D4","War Mech":"35B4","Xiao Lang":"3474"}},"Play As Options\\Player 2":{"note":"","data":["8113C6DE ????"],"options":{"AL-Rashid":"33FC","Big Guy with spikes and a skull staff":"34C4","Dregan":"358C","Executioner":"3334","Hellnight":"353C","Koyasha":"33AC","Lord Deimos":"335C","Monk dude with sword":"3514","Mordoskull":"344C","Namira":"449C","Pojo The Chicken":"3564","Ragnar":"33C4","Takeshi":"3424","Taria":"33D4","War Mech":"35B4","Xiao Lang":"3474"}}},"1185EC85-4B5A7731-C:50":{"Access\\All Levels \u0026 Superbikes":{"note":"","data":["50000304 0000","80183A0F 0001"],"options":null},"Access\\All Secret Characters":{"note":"This code is Fantastic, You have 12 characters to choose from to you race without any bike, just on foot","data":["50000C04 0000","80183A27 0001"],"options":null},"Access\\All Tracks":{"note":"","data":["50000BD8 0000","80182FC7 0001","50000CD8 0000","80182EF3 0001","50000CD8 0000","80182EF7 0001","50000CD8 0000","80182EFB 0001","50000CD8 0000","80182EFF 0001","50000CD8 0000","80182F03 0001","50000CD8 0000","80182F07 0001"],"options":null},"Infinite Lasers\\Player 1":{"note":"","data":["80170BD9 00C8"],"options":null},"Infinite Lasers\\Player 2":{"note":"","data":["80171241 00C8"],"options":null},"Infinite Lasers\\Player 3":{"note":"","data":["801718A9 00C8"],"options":null},"Infinite Lasers\\Player 4":{"note":"","data":["80171F11 00C8"],"options":null},"Infinite Nitros\\Player 1":{"note":"","data":["80170BA3 0004","80170BA7 0004"],"options":null},"Infinite Nitros\\Player 2":{"note":"","data":["8017120B 0004","8017120F 0004"],"options":null},"Infinite Nitros\\Player 3":{"note":"","data":["80171873 0004","80171877 0004"],"options":null},"Infinite Nitros\\Player 4":{"note":"","data":["80171EDB 0004","80171EDF 0004"],"options":null},"Infinite Shield\\Player 1":{"note":"","data":["80170BCD 00C8"],"options":null},"Infinite Shield\\Player 2":{"note":"","data":["80171235 00C8"],"options":null},"Infinite Shield\\Player 3":{"note":"","data":["8017189D 00C8"],"options":null},"Infinite Shield\\Player 4":{"note":"","data":["80171F05 00C8"],"options":null},"[Screen Hud Clear]":{"note":"If you are using a Plugin other then Jabos 1.5 and can not see through the Thick Hud on the Screen. then Let the game load 1st before Putting this code on,Or it will give an error and Freeze","data":["80092C6B 0004"],"options":null}},"11936D8C-6F2C4B43-C:50":{"Chunky\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FCA4C 0064"],"options":null},"Chunky\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FCA56 0064"],"options":null},"Chunky\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FCA54 0064"],"options":null},"Chunky\\All Golden Bananas\\DK Isle":{"note":"","data":["817FCA58 0064"],"options":null},"Chunky\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FCA4E 0064"],"options":null},"Chunky\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FCA52 0064"],"options":null},"Chunky\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FCA50 0064"],"options":null},"Chunky\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FCA4A 0064"],"options":null},"Chunky\\Infinite Coins":{"note":"","data":["817FCA0E 03E7"],"options":null},"Chunky\\Infinite Musical Instrument":{"note":"","data":["817FCA10 000A"],"options":null},"Diddy\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC932 0064"],"options":null},"Diddy\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC93C 0064"],"options":null},"Diddy\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC93A 0064"],"options":null},"Diddy\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC93E 0064"],"options":null},"Diddy\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC934 0064"],"options":null},"Diddy\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FC938 0064"],"options":null},"Diddy\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC936 0064"],"options":null},"Diddy\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC930 0064"],"options":null},"Diddy\\Infinite Coins":{"note":"","data":["817FC8F4 03E7"],"options":null},"Diddy\\Infinite Musical Instrument":{"note":"","data":["817FC8F6 000A"],"options":null},"Donkey Kong\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC8D4 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC8DE 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC8DC 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC8E0 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC8D6 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC8D8 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC8D2 03E7"],"options":null},"Donkey Kong\\Has Moves":{"note":"","data":["817FC890 0103"],"options":null},"Donkey Kong\\Have Weapon":{"note":"","data":["817FC892 0103"],"options":null},"Donkey Kong\\Infinite Ammo":{"note":"","data":["807FCB85 0096"],"options":null},"Donkey Kong\\Infinite Bananas\\Angry Aztec":{"note":"","data":["817FC89C 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Creepy Castle":{"note":"","data":["817FC8A6 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Crystal Caves":{"note":"","data":["817FC8A4 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\FactoryLevel":{"note":"","data":["817FC89E 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Fungi Forest":{"note":"","data":["817FC8A2 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Galleon Level":{"note":"","data":["817FC8FE 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Jungle Japes":{"note":"","data":["817FC89A 03E7"],"options":null},"Donkey Kong\\Infinite Coins":{"note":"","data":["817FC896 03E7"],"options":null},"Donkey Kong\\Infinite Musical Instrument":{"note":"","data":["817FC894 0103","817FC898 00FF"],"options":null},"Free Pass (Access All Areas)":{"note":"This is exactly what it says, You can walk through Any Locked Door,Gate, Or Area. Have Fun.","data":["8066D167 0001","8066D262 0001"],"options":null},"Infinite\\Camera Film":{"note":"","data":["807FCB89 0005"],"options":null},"Infinite\\Crystal Coconuts":{"note":"","data":["817FCB86 03E7"],"options":null},"Infinite\\Health":{"note":"","data":["817FCB8C 041F"],"options":null},"Infinite\\Orange Bombs":{"note":"","data":["807FCB81 0096"],"options":null},"Lanky\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC990 0064"],"options":null},"Lanky\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC99A 0064"],"options":null},"Lanky\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC998 0064"],"options":null},"Lanky\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC99C 0064"],"options":null},"Lanky\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC992 0064"],"options":null},"Lanky\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FC996 0064"],"options":null},"Lanky\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC994 0064"],"options":null},"Lanky\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC98E 0064"],"options":null},"Lanky\\Infinite Coins":{"note":"","data":["817FC952 03E7"],"options":null},"Lanky\\Infinite Musical Instrument":{"note":"","data":["817FC954 000A"],"options":null},"Tiny\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC9EE 0064"],"options":null},"Tiny\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC9E8 0064"],"options":null},"Tiny\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC9F6 0064"],"options":null},"Tiny\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC9FA 0064"],"options":null},"Tiny\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC9F0 0064"],"options":null},"Tiny\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FC9F4 0064"],"options":null},"Tiny\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC9F2 0064"],"options":null},"Tiny\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC9EC 0064"],"options":null},"Tiny\\Infinite Coins":{"note":"","data":["817FC9B0 03E7"],"options":null},"Tiny\\Infinite Musical Instrument":{"note":"","data":["817FC9B2 000A"],"options":null}},"12737DA5-23969159-C:4A":{"Always Normal Spirit\\Player 1":{"note":"","data":["8015D075 0032"],"options":null},"Always Normal Spirit\\Player 2":{"note":"","data":["8015D509 0032"],"options":null},"Always Normal Spirit\\Player 3":{"note":"","data":["8015D99D 0032"],"options":null},"Always Normal Spirit\\Player 4":{"note":"","data":["8015DE31 0032"],"options":null},"Always Special\\Player 1":{"note":"","data":["8015D0B5 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["8015D549 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["8015D9DD 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["8015DE71 0004"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 1":{"note":"","data":["8015D074 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 2":{"note":"","data":["8015D508 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 3":{"note":"","data":["8015D99C 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 4":{"note":"","data":["8015DE30 0064"],"options":null},"Have All Characters":{"note":"","data":["81094BDA FFFF"],"options":null},"Infinite Create-A-Wrestler Attribute Points":{"note":"","data":["8011069B 001E"],"options":null},"Max Attributes":{"note":"","data":["80110691 0032","80110693 0032","80110695 0032","80110697 0032","80110699 0032"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["8015D075 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["8015D509 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["8015D99D 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["8015DE31 00FF"],"options":null},"No Spirit\\Player 1":{"note":"","data":["8015D075 0000"],"options":null},"No Spirit\\Player 2":{"note":"","data":["8015D509 0000"],"options":null},"No Spirit\\Player 3":{"note":"","data":["8015D99D 0000"],"options":null},"No Spirit\\Player 4":{"note":"","data":["8015DE31 0000"],"options":null},"Specials Don't Run Out":{"note":"","data":["81120C14 2400"],"options":null},"Timer Is Always 00:00":{"note":"","data":["80164F2F 0000"],"options":null},"Ultimate Codes\\Player 1":{"note":"","data":["8015D074 0064"],"options":null},"Ultimate Codes\\Player 2":{"note":"","data":["8015D508 0064"],"options":null},"Ultimate Codes\\Player 3":{"note":"","data":["8015D99C 0064"],"options":null},"Ultimate Codes\\Player 4":{"note":"","data":["8015DE30 0064"],"options":null},"Weapon Select\\Player 1":{"note":"","data":["8115D0B6 0300","8115CC10 ????","8115CC12 0000","8015CCD0 0000"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 2":{"note":"","data":["8115D54A 0300","8115CC40 ????","8015CC42 0001","8015CCD1 0001"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 3":{"note":"","data":["8115D9DE 0300","8115CC70 ????","8015CC72 0002","8015CCD2 0002"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 4":{"note":"","data":["8115DE72 0300","8115CC98 ????","8115CC9A 0003","8015CCD3 0003"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}}},"132D2732-C70E9118-C:45":{"Always 1st\\Player 1":{"note":"This code doesn't record the win on the Time Trial Gold Challenge or the Weapons Gold Challenge.","data":["8109BC68 0001"],"options":null},"Freeze Checkpoint Timer":{"note":"","data":["810CDE92 0BCC"],"options":null},"Infinite Auto Pilot\\AG Systems\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BCE47 005B"],"options":null},"Infinite Auto Pilot\\Auricom\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC1E7 005B"],"options":null},"Infinite Auto Pilot\\Direx\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC817 005C"],"options":null},"Infinite Auto Pilot\\Feisar 1\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["811BC4FE 005B"],"options":null},"Infinite Auto Pilot\\Piranah\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC817 0060"],"options":null},"Weapon Select\\AG Systems":{"note":"","data":["811BCE3E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Auricom":{"note":"","data":["811BC1DE ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Direx":{"note":"","data":["811BC80E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Feisar 1":{"note":"","data":["811BC4F6 ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Piranah":{"note":"","data":["811BCB2E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"[In-Game Cheat Unlock]\\Cyclone Weapon":{"note":"","data":["80094F7E 00??"],"options":{"Off":"00","On":"01"}},"[In-Game Cheat Unlock]\\Infinite Ammo\\Player 1":{"note":"","data":["80091C24 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Ammo\\Player 2":{"note":"","data":["80093340 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Shield Energy\\Player 1":{"note":"","data":["80091C26 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Shield Energy\\Player 2":{"note":"","data":["80093342 0001"],"options":null},"[In-Game Cheat Unlock]\\[Ultimate Unlock All]":{"note":"This Unlocks All Levels, Tracks, Velocitar and Super Combo, Piranha 2 Ship, Cyclone Weapons Power Up and all 28 Gold Awards unlocked","data":["80091C25 0001","80091C2C 0020"],"options":null},"[Infinite Sheild]":{"note":"This cheat enabled fixes Av's popping up and spoiling you racing,it also gives you Infinite Sheild on all Cars,Tracks and Modes","data":["5000030C 0000","8109BCE2 0000","8109BD12 0000"],"options":null}},"13836389-265B3C76-C:45":{"Background\\Coloured Madden":{"note":"","data":["810596E0 0003"],"options":null},"Background\\Gray Madden":{"note":"","data":["810596E0 0000"],"options":null},"Background\\Green \u0026 Black Madden":{"note":"","data":["810596E0 0002"],"options":null},"Background\\Pink \u0026 Purple Madden":{"note":"","data":["810596E0 0004"],"options":null},"Background\\Pink Madden":{"note":"","data":["810596E0 0001"],"options":null},"Background\\Pinker Madden":{"note":"","data":["810596E0 0006"],"options":null},"Enable\\All Stadiums":{"note":"","data":["50000901 0000","80073510 00FF"],"options":null},"Enable\\All Teams":{"note":"","data":["50000901 0000","80073CF8 00FF"],"options":null},"Infinite\\Time Outs Away Team":{"note":"","data":["80084EE3 0003"],"options":null},"Infinite\\Time Outs Home Team":{"note":"","data":["80082D97 0003"],"options":null},"Invisible Players":{"note":"","data":["800545A0 0000","800545A0 0001","800545A0 0002","800545A0 0003"],"options":null},"No Time-Outs\\Away Team":{"note":"","data":["80084EE3 0000"],"options":null},"No Time-Outs\\Home Team":{"note":"","data":["80082D97 0000"],"options":null}},"142A17AA-13028D96-C:50":{"Freeze Enemies":{"note":"","data":["8008EE3B 0012"],"options":null},"Gore Mode":{"note":"","data":["8008EE37 0012"],"options":null},"Infinite\\Lives":{"note":"","data":["8008EE33 0012"],"options":null},"Infinite\\Primery Weapons":{"note":"","data":["8008EE30 0012"],"options":null},"Infinite\\Secondary Weapons":{"note":"","data":["8008EE31 0012"],"options":null},"Infinite\\Solaris":{"note":"Solaris are included in code","data":["8008EE3D 0012"],"options":null},"Infinite\\Titans":{"note":"Titans are included in code","data":["8008EE3C 0012"],"options":null},"Infinite\\Weapon Energy":{"note":"","data":["8008EE32 0012"],"options":null},"Invulnerability":{"note":"","data":["8008EE35 0012"],"options":null},"Level Select":{"note":"Accesses all Missions \u0026 Battle mode","data":["8008EE3E 0012"],"options":null},"One Shot Enemies":{"note":"","data":["8008EE3A 0012"],"options":null},"Psychedelic Mode":{"note":"","data":["8008EE39 0012"],"options":null},"Stealth Mode":{"note":"","data":["8008EE34 0012"],"options":null},"Turbo Mode":{"note":"","data":["8008EE38 0012"],"options":null},"Wireframe Mode":{"note":"","data":["8008EE36 0012"],"options":null}},"147E0EDB-36C5B12C-C:4A":{"(Press GS)\\To Kill Enemy":{"note":"Don't Press GS after the Enemy is killed, only during the fight! and only use on Press GS Cheat at a time","data":["891F2454 0000","891F2456 0000","891F2458 0000","891F245A 0000"],"options":null},"(Press GS)\\To Refill Health":{"note":"Don't Press GS after the Enemy is killed, only during the fight!","data":["891F0F18 42C8","891F0F1A 0000"],"options":null},"(Press L)\\ For One Hit Kill":{"note":"Don't Press L after the Enemy is killed, only during the fight!","data":["D0149DD5 0020","811F2458 0000","D0149DD5 0020","811F245A 0000"],"options":null},"(Press R)\\For Level Warp":{"note":"Press Reset and enjoy!","data":["D00D5115 0015","800D5115 00??"],"options":{"Credits 1":"18","Credits 2":"19","Credits 3":"1A","Level 01":"2B","Level 02":"2F","Level 03":"33","Level 04":"37","Level 05":"3B","Level 06":"3D","Level 07":"40","Level 08":"43","Level 09":"46","Level 10":"49","Level 11":"4C","Level 12":"4F","Level 12.5":"51","Level 13":"53"}},"Secret Beta 2 Player Test Mode":{"note":"Press Reset and enjoy! Secret 2 Player Test Mode? The Second Player doesn't move ;(","data":["D00D5115 0015","800D5115 0055"],"options":null}},"151F79F4-8EEDC8E5-C:50":{"Access All Characters":{"note":"","data":["81193CA4 3F00","50000602 0000","81193C98 1F1F"],"options":null},"All Quests Completed":{"note":"","data":["80193CA4 003F","50000C01 0000","80193C98 001F"],"options":null},"Max Stats All Characters":{"note":"","data":["50000B24 0000","811896EC 1414","50000B24 0000","811896EE 1400"],"options":null}},"155B7CDF-F0DA7325-C:55":{"Beta Bottles Revenge Mode":{"note":"Bottles Revenge is a Beta mode from Banjo Tooie that the RWP team recently uncovered after an extraordinary amount of effort. Bottles the Spirit transforms into Bottles the Devil and posses enemies nearby and allows a second player hooked up to Pad 2 to play as that Posses character to try to foil Banjos Plans. As player one goes about its business, player two uses every enemy nearby to try to nab Banjo and take away some life. This mode is incredible, and you can control almost every enemy in the game: slot machines, flying creatures, uggers, zubbas...and this is just the beginning. (Congrats Rare Witch Project)","data":["80130172 0001","8008B4D1 0002"],"options":null},"Infinite\\Air":{"note":"","data":["8112FDC2 42C8"],"options":null},"Infinite\\Energy\\Banjo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","8012059F 000A","801205A0 000A"],"options":null},"Infinite\\Energy\\Banjo and Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","81120584 0A0A"],"options":null},"Infinite\\Energy\\Bee":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","80120593 000A","80120594 000A"],"options":null},"Infinite\\Energy\\Detonator":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","811205AE 0A0A"],"options":null},"Infinite\\Energy\\Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","811205A2 0A0A"],"options":null},"Infinite\\Energy\\Mumbo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","811205A8 0A0A"],"options":null},"Infinite\\Energy\\Snowball":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","80120587 0005"],"options":null},"Infinite\\Energy\\Stony":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","80120599 000A","8011B44A 000A"],"options":null},"Infinite\\Energy\\Submarine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","801205A5 000A","801205A6 000A"],"options":null},"Infinite\\Energy\\T-Rex Baby":{"note":"","data":["8011FFA9 0063","801205BF 000A","801205C0 000A"],"options":null},"Infinite\\Energy\\Washing Machine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","81120596 0A0A"],"options":null},"Instant Warp\\Options\\Cauldron Keep":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Cauldron Keep":"015D","Colosseum kickball arena":"0180","Crazy Castle Stockade Jump the hoops multi":"017C","Crazy Castle Stockade balloon burst multi":"017B","Dodgems":"0186","Grunty Industries packing game":"017D","Gun chamber":"0160","Gun room still":"016A","The gatehouse":"015E","Tower of Tragedy Quiz":"015F"}},"Instant Warp\\Options\\Cloud Cuckoo Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Central cavern":"013A","Cloud Cuckoo Land 1":"0136","Cloud Cuckoo Land 2":"0161","Humba wumba's wigwam":"0140","Inside the cheesewedge":"0138","Inside the pot o gold":"013D","Inside the trashcan":"0137","Mingy jongo's skull":"013F","Mumbo's skull":"013E","Trash can mini":"0185","Zubba's nest":"0139","Zubba's nest multi":"0188"}},"Instant Warp\\Options\\Glitter Gulch Mine":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Canary cave":"00DB","Chuffy's cab":"00D0","Crushing shed":"00CB","Flooded caves":"00CC","Fuel depot":"00CA","Generator caverns":"00D3","Gloomy caverns":"00D2","Humba":"00E9","Inside chuffy's boiler boss":"00D1","Mine":"00C7","Mumbo's hut":"00D9","Mumbo's skull":"0171","Ordnance Storage entrance":"0163","Ordnance Storage game":"0164","Ordnance Storage game Multi":"0165","Ordnance storage":"00DC","Power hut":"00D4","Power hut basement":"00CF","Prospectors hut":"00D8","Testing":"0170","Toxic gas cave":"00DA","Train station":"00D7","Water storage":"00CD","Water supply pipe":"0126","Waterfall cavern":"00CE","Wumba's wigwam":"00D5"}},"Instant Warp\\Options\\Grunty Industries":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Basement":"010F","Basement \"repair depot":"0110","Basement \"waste disposal\"":"0111","Elevator shaft":"0105","Floor 2":"0106","Floor 2 \"electromagnet chamber\"":"0107","Floor 3":"0108","Floor 3 \"boiler plant\"":"0109","Floor 3 \"packing room\"":"010A","Floor 4":"010B","Floor 4 \"cable room\"":"010C","Floor 4 \"clinkers cavern\"":"0162","Floor 4 \"quality control\"":"010D","Floor 5":"010E","Inside":"0101","Mumbo's skull":"0172","Outside":"0100","Sewer entrance":"0187","Train station":"0102","Trash compactor":"0104","Water supply pipe":"0125","Workers quarters":"0103"}},"Instant Warp\\Options\\Hailfire Peaks":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Boggy's igloo":"0131","Chilli billi":"012B","Chilly willy":"012C","Colosseum kickball stadium lobby":"012D","Ice train station":"012A","Icicle grotto":"0132","Icy side":"0128","Icy side still":"0168","Inside the volcano":"0133","Lava side":"0127","Lava train station":"0129"}},"Instant Warp\\Options\\Isle O Hags":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Cliff top":"0155","Cliff top Mumbo's skull":"0156","Heggy's egg shed":"0150","Jiggywiggy's temple":"0151","Pine Grove":"0154","Plateau":"0152","Plateau \"Honey B's Hive\"":"0153","Quagmire":"015C","Wooded Hollow":"014F","inside another digger tunnel":"015B","wasteland":"015A"}},"Instant Warp\\Options\\Jinjo Village":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Black Jinjo's House":"0146","Blue Jinjo's House":"0148","Bottles house":"0143","Brown Jinjo's House":"014A","Green Jinjo's House":"0145","Jinjo Village":"0142","King Jingalings throne room":"0144","Orange Jinjo's House":"014B","Purple Jinjo's House":"014C","Red Jinjo's House":"014D","White Jinjo's House":"014E","Yellow Jinjo's House":"0147"}},"Instant Warp\\Options\\Jolly Roger's Lagoon":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Ancient Swimming Baths":"00F4","Atlantis":"01A8","Blubber's wave race hire":"00FF","Electric Eels lair":"00F6","Inside the big fish":"00F8","Jolly Roger's Lagoon":"01A7","Jolly's":"00ED","Pawno's emporium":"00EE","Seabottom":"01A9","Seaweed Sanctum":"00F7","mumbo's skull":"00EF","sea bottom cavern":"0181","submarine multi":"0182","temple of the fishes":"00FA"}},"Instant Warp\\Options\\Mayahem Temple":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Code chamber":"00BC","Humba's Wigwam":"00B6","Inside Targitzans Temple":"0178","Jade Snake Grove":"00C4","Kickball Arena":"00C9","Mayan Kickball Arena":"017F","Multi":"0166","Mumbo's skull":"00B7","Prison Compound":"00B9","Still":"0167","Targitzan Temple Lobby":"0179","Targitzan's Slighty Sacred Temple":"0177","Targitzan's Temple Boss":"017A","The Temple":"00B8","Treasure Chamber":"00C5"}},"Instant Warp\\Options\\Not sure":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8012C390 ????","8012C393 0001"],"options":{"Bottles house":"0143","Bottles house still":"0169","HAG Inside":"018A","HAG1 Final Boss":"019A","Humba Wumba's wigwam 1":"0135","Humba Wumba's wigwam 2":"0157","Inside Chuffy's wagon":"0121","Inside the digger tunnel":"0141","Jingalings Zombified Palace":"019B","Lord woo fak fak":"00FC","Mr Patch":"00F9","Mumbo's Skull":"0134","Smuggler cavern":"01A6"}},"Instant Warp\\Options\\Spiral Mountain":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Banjo's house":"0173","Behind The Waterfall":"00AE","Grunty's Old Lair":"00AD","Top Of Castle":"00AF"}},"Instant Warp\\Options\\Terrydacty Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Bonfire caverns":"011B","Chompa's belly multi":"0183","Humba's Wigwam":"011E","Inside chompa's belly":"0123","Inside the mountain":"0116","Oogle boogles cave":"0115","River passage":"0117","Stomping plains":"011A","Styracosaurus family cave":"0118","Terry's nest":"0113","Terrydacty Land":"0112","Train station":"0114","Unga bunga's cave":"0119"}},"Instant Warp\\Options\\Witchy World":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Balloon burst game":"00E4","Cave of horrors":"00EA","Crazy castle lobby":"00E2","Crazy castle pump room":"00E3","Crazy castle stockade":"00E1","Crazy castle stockade \"sop\"":"013B","Dodgem challenge \"1 vs 1\"":"00DE","Dodgem challenge \"2 vs 1\"":"00DF","Dodgem challenge \"3 vs 1\"":"00E0","Dodgem dome lobby":"00DD","Haunted cavern":"00EB","Hoop hurry game":"00E5","Mumbo's skull":"0176","Saucer of Peril":"0124","Star spinner":"00E6","Star spinner \"sop\"":"013C","The inferno":"00E7","Train station":"00EC","Witcy World":"00D6"}},"Multi-Player\\Everyone Infinite All Eggs Multiplayer":{"note":"All blaster modes specifically.[ Thanks retroben, awesome work on this!]","data":["810F0BA8 0C04","810F0BAA 8580","81121600 3C08","81121602 8009","81121604 8108","81121606 E5C0","81121608 1100","8112160A 0010","8112160C 0000","8112160E 0000","81121610 3C08","81121612 8009","81121614 8D08","81121616 E5C0","81121618 0008","8112161A 4200","8112161C 0008","8112161E 4202","81121620 0008","81121622 4080","81121624 3C04","81121626 8000","81121628 0104","8112162A 4020","8112162C 3C04","8112162E 2406","81121630 2484","81121632 0064","81121634 AD04","81121636 31C4","81121638 3C04","8112163A 2408","8112163C 2484","8112163E FFFE","81121640 AD04","81121642 31CC","81121644 3C04","81121646 8013","81121648 8C84","8112164A 7B44","8112164C 0802","8112164E 4912","81121650 0000","81121652 0000"],"options":null},"Multi-Player\\Infinite Health\\Player 1":{"note":"","data":["8013A2B1 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 2":{"note":"","data":["8013A2B5 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 3":{"note":"","data":["8013A2B9 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 4":{"note":"","data":["8013A2BD 0064"],"options":null},"Play As":{"note":"To use this cheat, put the cheat on, then press L as you walk through a door to become that chosen character","data":["D108B284 0000","8012BD9C 00??"],"options":{"Banjo":"0A","Banjo and Kazooie":"01","Bee":"06","Detonator":"0F","Golden Goliath":"0E","Kazooie":"0B","Mumbo":"0D","Snowball":"02","Stony":"08","Submarine":"0C","T-rex baby":"12","T-rex daddy":"13","Truck":"10","Washing machine":"07"}}},"16931D74-65DC6D34-C:50":{"Debug Mode":{"note":"","data":["8006C4E3 0001"],"options":null},"Have\\All Keys":{"note":"","data":["80164229 000F"],"options":null},"Have\\All Weapons":{"note":"","data":["8016422B 007F"],"options":null},"Have\\Quad Damage":{"note":"","data":["811641BC 42C8"],"options":null},"Have\\Ring of Shadows":{"note":"","data":["81164228 ????"],"options":{"Off":"0000","On":"42C8"}},"Infinite\\Ammo":{"note":"","data":["50000402 0000","8016426D 0064","50000402 0000","8116426C 03E7"],"options":null},"Infinite\\Armor":{"note":"","data":["81164184 42C8"],"options":null},"Infinite\\Bio Suit":{"note":"","data":["811641C0 42C8"],"options":null},"Infinite\\Health":{"note":"","data":["81164170 42C8"],"options":null},"Multi\\Have All Weapons\\Player 1":{"note":"","data":["80166B8B 007F"],"options":null},"Multi\\Have All Weapons\\Player 2":{"note":"","data":["80166E5B 007F"],"options":null},"Multi\\Infinite Ammo\\Player 1":{"note":"","data":["50000402 0000","81166BCC 03E7"],"options":null},"Multi\\Infinite Ammo\\Player 2":{"note":"","data":["50000402 0000","81166E9C 03E7"],"options":null},"Multi\\Infinite Armor\\Player 1":{"note":"","data":["81166AE4 42C8"],"options":null},"Multi\\Infinite Armor\\Player 2":{"note":"","data":["81166DB4 42C8"],"options":null},"Multi\\Infinite Bio Suit\\Player 1":{"note":"","data":["81166B20 42C8"],"options":null},"Multi\\Infinite Bio Suit\\Player 2":{"note":"","data":["81166DF0 42C8"],"options":null},"Multi\\Infinite Health\\Player 1":{"note":"","data":["81166AD0 42C8"],"options":null},"Multi\\Infinite Health\\Player 2":{"note":"","data":["81166DA0 42C8"],"options":null},"Rapid Fire":{"note":"","data":["D00CB220 0020","801641AD 0001"],"options":null}},"1938525C-586E9656-C:45":{"Have All Dots":{"note":"","data":["8111D55E 03E7"],"options":null},"Infinite\\Health":{"note":"","data":["8111D55C 003C"],"options":null},"Infinite\\Lives":{"note":"","data":["8010A3D7 0009"],"options":null},"Max Score":{"note":"","data":["8111EF14 E0FF","8111EF16 05F5"],"options":null}},"19AB29AF-C71BCD28-C:50":{"Access\\All Star Spirits":{"note":"Disable this code as soon as you have reached level 8, or everything will be removed again","data":["8110E01E 0007"],"options":null},"Access\\Infinite Coins":{"note":"","data":["8110DD9C 03E7"],"options":null},"Access\\Infinite Star Spirits":{"note":"","data":["8010E020 0007"],"options":null},"Access\\Level 99":{"note":"","data":["8010DD99 0063"],"options":null},"Access\\Max Badge Points":{"note":"","data":["8010DD98 00??"],"options":{"127 Badge Points":"7F","60 Badge Points":"3C"}},"Access\\Max Star Energy":{"note":"","data":["8010E01E 0007"],"options":null},"Access\\Max Star Pieces":{"note":"","data":["8010DD9F 0063"],"options":null},"Access\\Max Star Points":{"note":"You will level up, everytime you get a Star point","data":["8010DDA0 0063"],"options":null},"Access\\Ultra Rank":{"note":"This will give you Goombario,Kooper,Bombette,Parakarry,Bow Watt, Sushie \u0026 Lakilester","data":["50000C08 0000","8010DDAD 0002","50000C08 0000","8010DDED 0002"],"options":null},"Access\\all members in your party":{"note":"","data":["50000C08 0000","8010DDAC 0001"],"options":null},"Infinite \u0026 Max HP + FP":{"note":"Do not enable this code before you have made a save, when a new game is started up.","data":["50000601 0000","8010DD91 0063"],"options":null},"Press L Button For Moon Jump":{"note":"","data":["D0071337 0020","8010DAF4 0043"],"options":null}},"19F55D46-73A27B34-C:45":{"Infinite Time":{"note":"","data":["8114C298 000A"],"options":null},"Pick Your Kombat Zone":{"note":"","data":["81257544 00??"],"options":{"Armory":"14","Bell Tower":"07","Bridge":"05","Courtyard":"02","Dead Pool":"11","Graveyard":"09","Hidden Portal":"10","Jade's Desert":"0E","Kahn's Kave":"0D","Kahn's Tower":"04","Kombat Temple":"08","Lair":"18","Living Forest":"15","Lost Bridge":"0F","Pit":"03","Pit 2":"1A","Pit 3":"0A","Pit Bottom":"1C","Portal":"17","River Kombat":"0B","Rooftop":"13","Scorpion's Lair":"0C","Soul Chamber":"06","Star Bridge":"1B","Street":"01","Subway":"00","Tomb":"19","Tower":"16","Wasteland":"12"}},"Player 1\\Aggressor Energy Bar":{"note":"","data":["801698E1 0030"],"options":null},"Player 1\\Energy is":{"note":"","data":["8016984D 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 1\\Infinite Run":{"note":"","data":["81169854 0030"],"options":null},"Player 1\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B5225 0020","81169874 5100","D02B5225 0020","8116987C 5100"],"options":null},"Player 1\\Play As":{"note":"","data":["8016983D 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Player 2\\Aggressor Energy Bar":{"note":"","data":["801698E3 0030"],"options":null},"Player 2\\Energy is":{"note":"","data":["80169B21 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 2\\Infinite Run":{"note":"","data":["81169B28 0030"],"options":null},"Player 2\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B522D 0020","81169876 5100","D02B522D 0020","8116987E 5100"],"options":null},"Player 2\\Play As":{"note":"","data":["80169AE1 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Unlock Secret":{"note":"","data":["80169EE1 0004"],"options":null}},"1A122D43-C17DAF0F-C:45":{"Have All Pikachus Magnemites":{"note":"","data":["801183BC 0000","801183BD 0000","801183BE 0000"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 1":{"note":"","data":["81285A18 03E7"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 2":{"note":"","data":["81286438 03E7"],"options":null},"Pokemon\\Inf Spells\\Player 1":{"note":"","data":["810AE580 FFFF","810AE582 FFFF","810AE5D4 FFFF","810AE5D6 FFFF","810AE628 FFFF","810AE62A FFFF"],"options":null},"Pokemon\\Inf Spells\\Player 2":{"note":"","data":["810AE79C FFFF","810AE79E FFFF","810AE7F0 FFFF","810AE7F2 FFFF","810AE844 FFFF","810AE846 FFFF"],"options":null},"Pokemon\\Max HP\\Player 1":{"note":"","data":["810AE586 03E7","810AE5DA 03E7","810AE62E 03E7"],"options":null},"Pokemon\\Max HP\\Player 2":{"note":"","data":["810AE7A2 03E7","810AE7F6 03E7","810AE84A 03E7"],"options":null},"Ultimate Code":{"note":"what's so ultimate about this code is it raises your Pokemon to its full potential. Even at Level 100, most Pokemon still have a way to go to raise their stats to the max. But with this code, you can instantly boost any Pokemon to its greatest potential!!!","data":["81171F3C FF01","81171F3E FF01","81171F40 FF01","81171F42 FF01","81171F44 FF01"],"options":null}},"1A7F70B5-00B7B9FD-C:45":{"Andrew Rynolds\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDFD8 00FF","50001001 0000","800EDFE8 00FF"],"options":null},"Andrew Rynolds\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE014 00FF"],"options":null},"Bam Margera\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE348 00FF","50001001 0000","800EE358 00FF"],"options":null},"Bam Margera\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE384 00FF"],"options":null},"Bucky Lasek\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDD44 00FF","50001001 0000","800EDD54 00FF"],"options":null},"Bucky Lasek\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDD80 00FF"],"options":null},"Chad Muska\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDEFC 00FF","50001001 0000","800EDF0C 00FF"],"options":null},"Chad Muska\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDF38 00FF"],"options":null},"Elissa Steamer\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE190 00FF","50001001 0000","800EE1A0 00FF"],"options":null},"Elissa Steamer\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE1CC 00FF"],"options":null},"Eric Koston\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDC68 00FF","50001001 0000","800EDC78 00FF"],"options":null},"Eric Koston\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDCA4 00FF"],"options":null},"Geoff Rowley\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE0B4 00FF","50001001 0000","800EE0C4 00FF"],"options":null},"Geoff Rowley\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE0F0 00FF"],"options":null},"Infinite Stat Upgrades \u0026 Deck Boards to Buy":{"note":"This allows you to ugrade you stats in Upgrades to the Max \u0026 Also to open the Boards in Decks For All Characters.","data":["800ED8F9 00FF","800ED905 00FF","800EDD45 00FF","800EDD51 00FF","800EDFE5 00FF","800EDFD9 00FF","800ED9D5 00FF","800ED9E1 00FF","800EDAB1 00FF","800EDABD 00FF","800EDB8D 00FF","800EDB99 00FF","800EDC69 00FF","800EDC75 00FF","800EDE21 00FF","800EDE2D 00FF","800EDEFD 00FF","800EDF09 00FF","800EE0B5 00FF","800EE0C1 00FF","800EE191 00FF","800EE19D 00FF","800EE26D 00FF","800EE279 00FF","800EE349 00FF","800EE355 00FF","800EE425 00FF","800EE431 00FF","800EE501 00FF","800EE50D 00FF","800EE5DD 00FF","800EE5E9 00FF","800EE6B9 00FF","800EE6C5 00FF","800EE795 00FF","800EE7A1 00FF"],"options":null},"Jamie Thomas\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE26C 00FF","50001001 0000","800EE27C 00FF"],"options":null},"Jamie Thomas\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE2A8 00FF"],"options":null},"Kareem Campbell\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDAB0 00FF","50001001 0000","800EDAC0 00FF"],"options":null},"Kareem Campbell\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDAEC 00FF"],"options":null},"Officer Dick\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE6B8 00FF","50001001 0000","800EE6C8 00FF"],"options":null},"Officer Dick\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE6F4 00FF"],"options":null},"Play As":{"note":"","data":["800E9D69 00??"],"options":{"Andrew Rynolds":"08","Bam Margera":"0C","Bucky Lasek":"05","Chad Muska":"07","Elissa Steamer":"0A","Eric Koston":"04","Geoff Rowley":"09","Jamie Thomas":"0B","Kareem Campbell":"02","Officer Dick":"10","Rodney Mullen":"06","Rune Glifberg":"03","Skater A":"0D","Skater B":"0E","Skater C":"0F","Steve Caballero":"01","Tony Hawk":"00","Wolverine":"11"}},"Play On Level":{"note":"This allows you to play on a level even if it isnt already open just choose \u0026 tick choose foundary or what ever level \u0026 play the one you selected","data":["800ED58F 00??"],"options":{"Airport":"04","Canada":"06","Custom":"09","Downhill":"08","Foundary":"00","Los Angeles":"01","Rio De Janeiro":"02","Skater Island":"05","Suburbia":"03","Tokyo":"07"}},"Rodney Mullen\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDE20 00FF","50001001 0000","800EDE30 00FF"],"options":null},"Rodney Mullen\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDE5C 00FF"],"options":null},"Rune Glifberg\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDB8C 00FF","50001001 0000","800EDB9C 00FF"],"options":null},"Rune Glifberg\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDBC8 00FF"],"options":null},"Skater A\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE424 00FF","50001001 0000","800EE434 00FF"],"options":null},"Skater A\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE460 00FF"],"options":null},"Skater B\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE500 00FF","50001001 0000","800EE510 00FF"],"options":null},"Skater B\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE53C 00FF"],"options":null},"Skater C\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE5DC 00FF","50001001 0000","800EE5EC 00FF"],"options":null},"Skater C\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE618 00FF"],"options":null},"Steve Caballero\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800ED9D4 00FF","50001001 0000","800ED9E4 00FF"],"options":null},"Steve Caballero\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDA10 00FF"],"options":null},"Timer Starts Off At 20 Mins":{"note":"","data":["800E9D64 FFFF"],"options":null},"Tony Hawk\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800ED8F8 00FF","50001001 0000","800ED908 00FF"],"options":null},"Tony Hawk\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800ED934 00FF"],"options":null},"Wolverine\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE794 00FF","50001001 0000","800EE7A4 00FF"],"options":null},"Wolverine\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE7D0 00FF"],"options":null}},"1AA05AD5-46F52D80-C:50":{"Choose Vehicle":{"note":"Make your Choice \u0026 then Press GS To Activate,But do not use with any other Press GS Cheat Codes.","data":["88366807 00??"],"options":{"Birdman":"06","Cannonball":"03","Gyrocopter":"02","Hang Glider":"00","Jumble Hopper":"05","Rocket Belt":"01","Skydiving":"04"}},"Infinite Fuel\\Gyrocopter":{"note":"","data":["80366989 0081"],"options":null},"Infinite Fuel\\Rocket Belt":{"note":"","data":["803669A9 0081"],"options":null},"Infinite Photos":{"note":"","data":["813545EE 0000"],"options":null},"Music Volume Select":{"note":"","data":["80250FA4 00??"],"options":{"Default Volume":"3F","Max Volume":"80","No Music":"00"}},"Time Always 00'00'10":{"note":"This Cheat code is for All Events","data":["803668B8 0001"],"options":null},"[Perfect Score] (All Class \u0026 Level's)":{"note":"To make these codes save to Game-Pak; just pick a level and lose, choose Next then Quit. Enable Disable Perfect Score then save and disable before using the Extra Games Perfect Score Cheat.","data":["50000330 0000","803683ED 0064","50000330 0000","80368A81 0064","50000330 0000","80368BD1 0064","50000330 0000","80369115 0064","50000330 0000","80369265 0064","50000330 0000","803693B5 0064","50000330 0000","803697A9 0064","50000330 0000","803698F9 0064","50000330 0000","80369A49 0064"],"options":null},"[Perfect Score] Extra Games (All Class \u0026 Level's)":{"note":"To make these codes save to Game-Pak; just pick a level and lose, choose Next then Quit. Enable Disable Perfect Score then save and disable before using the Extra Games Perfect Score Cheat.","data":["8036847D 0019","803685CD 0019","8036871D 0019","8036886D 0019","803684AD 0064","803684DD 0064","80368B11 0019","80368C61 0019","80368DB1 0019","80368F01 0019","80368B41 0064","80368B71 0064","803691A5 0019","803692F5 0019","80369445 0019","80369595 0019","803691D5 0064","80369205 0064"],"options":null}},"1B598BF1-ECA29B45-C:45":{"99 Accuracy":{"note":"","data":["80130B80 0063"],"options":null},"99 Bonus":{"note":"","data":["80130B87 0063"],"options":null},"Always Have\\F-15J Eagle":{"note":"","data":["8027CCEC 0010"],"options":null},"Always Have\\X-29A A.T.D.":{"note":"","data":["8027CCED 0020"],"options":null},"Extra Planes":{"note":"","data":["8127CCEC FFFF"],"options":null},"Extra Points":{"note":"","data":["D027A20C 0000","8027A20C 00FF"],"options":null},"Gun Select":{"note":"","data":["8027E023 00??"],"options":{"22mm":"0B","22mm BB Shot":"0A","Air Mines":"02","Chaff":"00","Fire":"14","Fire Arrow":"21","Fire Wave":"17","Fireball":"0D","Hunai Shot":"0C","Jammings":"01","Mahibishi":"03","Ninja Glitch":"16","Ninjabeam":"28","Phoenix":"1F","Rocket":"1E","Sabre":"0E","Star":"20","Tomahawk":"15"}},"Infinite\\99 Lives":{"note":"","data":["80348B98 0063"],"options":null},"Infinite\\Armor":{"note":"","data":["8127CFF4 44A0","8127CFF8 44A0"],"options":null},"Infinite\\Chaffs":{"note":"","data":["8027E017 000A"],"options":null},"Infinite\\Gun":{"note":"","data":["8027E110 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8027CFF5 00C8","8027CFF9 00C8"],"options":null},"Infinite\\Special Weapons":{"note":"","data":["8027E4D2 0002"],"options":null},"Rocket Squad":{"note":"","data":["8027E107 0001"],"options":null},"Tomahawk Squad":{"note":"","data":["8027E109 0001"],"options":null},"Ultra Fast Missile Recharge":{"note":"","data":["8027E300 0001"],"options":null}},"1CC06338-87388926-C:45":{"Enable All Characters":{"note":"","data":["8031B242 0000","8031B243 0004"],"options":null},"Have Max\\Powerups":{"note":"","data":["801CAE23 0002"],"options":null},"Have Max\\Weapon Power-Up":{"note":"","data":["801CAE27 0002"],"options":null},"Infinite\\Bullets":{"note":"For Henry","data":["801D3DA3 0006"],"options":null},"Infinite\\Gold":{"note":"","data":["811CAB42 2710"],"options":null},"Infinite\\Health":{"note":"","data":["811CAB3A 2710"],"options":null},"Infinite\\Health Young Henry":{"note":"","data":["D11C87F6 0010","813A5360 2800"],"options":null},"Infinite\\Items\\Crest Half A":{"note":"","data":["801CAB5B 000A"],"options":null},"Infinite\\Items\\Crest Half B":{"note":"","data":["801CAB5C 000A"],"options":null},"Infinite\\Items\\Cure Ampoule":{"note":"","data":["801CAB4E 000A"],"options":null},"Infinite\\Items\\Healing Kit":{"note":"","data":["801CAB4C 000A"],"options":null},"Infinite\\Items\\Magical Nitro":{"note":"","data":["801CAB55 000A"],"options":null},"Infinite\\Items\\Mandragora":{"note":"","data":["801CAB56 000A"],"options":null},"Infinite\\Items\\Moon Card":{"note":"","data":["801CAB58 000A"],"options":null},"Infinite\\Items\\Oldrey's Diary":{"note":"","data":["801CAB5A 000A"],"options":null},"Infinite\\Items\\Powerup":{"note":"","data":["801CAB4F 000A"],"options":null},"Infinite\\Items\\Purifying":{"note":"","data":["801CAB4D 000A"],"options":null},"Infinite\\Items\\Red Jewels":{"note":"","data":["801CAB44 0068"],"options":null},"Infinite\\Items\\Roast Beef":{"note":"","data":["801CAB4B 000A"],"options":null},"Infinite\\Items\\Roast Chicken":{"note":"","data":["801CAB4A 000A"],"options":null},"Infinite\\Items\\Rose Brooch":{"note":"","data":["801CAB5D 000A"],"options":null},"Infinite\\Items\\Sun Card":{"note":"","data":["801CAB57 000A"],"options":null},"Infinite\\Items\\The Contract":{"note":"","data":["801CAB54 000A"],"options":null},"Infinite\\Items\\Throwing Weapons":{"note":"","data":["801CAB45 0064"],"options":null},"Infinite\\Items\\Winch Lever":{"note":"","data":["801CAB59 000A"],"options":null},"Infinite\\Keys\\Archives":{"note":"","data":["801CAB5E 000A"],"options":null},"Infinite\\Keys\\Art Tower 1":{"note":"","data":["801CAB6A 000A"],"options":null},"Infinite\\Keys\\Art Tower 2":{"note":"","data":["801CAB6B 000A"],"options":null},"Infinite\\Keys\\Chamber":{"note":"","data":["801CAB63 000A"],"options":null},"Infinite\\Keys\\Clocktower A":{"note":"","data":["801CAB6F 000A"],"options":null},"Infinite\\Keys\\Clocktower B":{"note":"","data":["801CAB70 000A"],"options":null},"Infinite\\Keys\\Clocktower C":{"note":"","data":["801CAB68 000A"],"options":null},"Infinite\\Keys\\Clocktower D":{"note":"","data":["801CAB69 000A"],"options":null},"Infinite\\Keys\\Clocktower E":{"note":"","data":["801CAB6E 000A"],"options":null},"Infinite\\Keys\\Control Room":{"note":"","data":["801CAB6C 000A"],"options":null},"Infinite\\Keys\\Copper":{"note":"","data":["801CAB62 000A"],"options":null},"Infinite\\Keys\\Deck":{"note":"","data":["801CAB65 000A"],"options":null},"Infinite\\Keys\\Execution":{"note":"","data":["801CAB64 000A"],"options":null},"Infinite\\Keys\\Garden":{"note":"","data":["801CAB61 000A"],"options":null},"Infinite\\Keys\\Left Tower":{"note":"","data":["801CAB5F 000A"],"options":null},"Infinite\\Keys\\Rose Garden":{"note":"","data":["801CAB66 000A"],"options":null},"Infinite\\Keys\\Storeroom":{"note":"","data":["801CAB60 000A"],"options":null},"Infinite\\Keys\\Thorn":{"note":"","data":["801CAB67 000A"],"options":null},"Infinite\\Keys\\Wall":{"note":"","data":["801CAB6D 000A"],"options":null},"Infinite\\Specials\\Special 1":{"note":"","data":["801CAB47 000A"],"options":null},"Infinite\\Specials\\Special 2":{"note":"","data":["801CAB48 000A"],"options":null},"Infinite\\Specials\\Special 3":{"note":"","data":["801CAB49 000A"],"options":null},"Rapid Fire Gun (Henry-Hold B)":{"note":"For Henry, Hold B","data":["811C87F6 0040","801D3DA3 0006"],"options":null},"Selection Options\\Cut Scene Select":{"note":"With this code, you must use the appropiate level mod before you attemp to run these cut scenes. Not doing so will ruin the cut scene as the graphics will be glitched.","data":["801CAE93 0009","801CAE8B 00??"],"options":{"\"I Smell Poison\" From Underground Waterway":"08","(?)":"22","Actrise Appears Again Before Fight With Carrie":"56","Actrise Appears Again With Cousin Fernandes Before Fight With Carrie":"54","Actrise Appears In Castle Center":"52","Actrise Defeated By Carrie":"57","Ada":"30","Bleeding Statue":"12","Bull Awakens":"17","Castel Destruction":"27","Castle Destruction":"29","Castle Drawbridge Closes And Ortega Appears":"46","Castle Drawbridge Lowers":"03","Castle Gate Closes In Villa Upon Entering Villa":"09","Castle Keep Destructs":"1E","Character Enters Castle":"04","Character In Boat On Foggy Lake":"10","Cornell And Henry Part In Garden":"49","Cornell Meets Henry In Garden":"48","Cosmic Lights":"13","Cousin Fernandes Is Destroyed":"55","Death Is Destroyed":"45","Death(Grim Reaper)":"44","Explosion At Wall In Arena":"14","Explosion At Wall In Castle That Leads To Hidden Room":"15","Finds Hidden Path In Villa Basement":"35","Gate Opens In Forest Of Silence":"1A","Harpie":"38","Harpie Destroyed":"39","Lever \u0026 Gear In Castle":"37","Malus And Reinhardt On Horse":"2B","Malus Appears Again In Upstairs Room Of Castle":"16","Malus Appears For The First Time":"0E","Malus Is Saved By Reinhardt":"2A","Malus Leaves Garden":"0F","Malus On Flying Horse Outside Castle Keep":"1F","Meet Renon For The Last Time In Castle Keep.":"1B","Monster Dracula Appears":"51","One Of The Working Gears Cut Scenes":"19","Renon Appears For First Time":"0B","Rosa In Garden":"25","Rosa Returns":"2E","Scrolling Text About Castle And Henry":"31","Seal Removed From Wall In Arena":"11","Space Warp":"28","Spider People In Tunnel":"24","Thirsty Man":"47","This Cut Scene Runs Cut Scene 27 And 2E":"1C","Vampire In Basement":"33","Vampire In Main Entrance Hall Of Villa":"06","Vampire In Villa Basement Destroyed":"34","Village Vampire In Upstairs Villa":"0D","Vincent The Vampire":"18"}},"Selection Options\\Day Select For Adult Henry":{"note":"","data":["801CAB1F 00??"],"options":{"0 Days":"07","1 Day":"06","2 Days":"05","3 Days":"04","4 Days":"03","5 Days":"02","6 Days":"01","7 Days":"00"}},"Selection Options\\Level Select\\Inter":{"note":"","data":["801CAE7B 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Level Select\\Main":{"note":"","data":["801CAE79 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Status Select":{"note":"","data":["801CAB84 00??"],"options":{"Instant Death":"FF","Never Get Poisoned or Vamped":"00","Normal":"01","Poison":"08","Vamp":"04","Vamped \u0026 Poisoned":"0C"}},"Selection Options\\Weapon Select":{"note":"","data":["801CAB3F 00??"],"options":{"Axe":"04","Cross":"03","Knife":"01","Nothing":"00","Potion":"02"}},"Selection Options\\[Press F9 For Wolfman Can Use Weapons]":{"note":"For Cornell","data":["881CAB37 00??"],"options":{"No (Default)":"04","Yes":"02"}},"Stop Timer Input":{"note":"","data":["811CAB22 0001"],"options":null}},"1D4136F3-AF63EEA9-C:45":{"Always Have Wallet Size":{"note":"","data":["801189DA 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C681D 0010","81119C9E 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["80119821 00FF","80119C97 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,\u0026 then press reset (F1) you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D011BB71 0000","80119D4B 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["8002397C 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801189BE 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801189BF 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801189C0 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801189C1 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1A68 0005","801EE508 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801189DA 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801189DB 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801189D9 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189D4 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189DC 30FF","811189DE FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801189B0 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801189B6 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801189BC 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["801189B4 0009"],"options":null},"Have\\Bombs":{"note":"","data":["801189AE 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["801189B8 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["801189AD 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["801189AC 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["801189AF 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["801189B2 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["801189B5 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["801189B9 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["801189BA 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["801189B1 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["801189B7 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["801189BD 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["801189BB 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["801189B3 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["801189C7 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["801189E0 0007","801189E1 0007","801189E2 0007","801189E3 0007","801189E4 0007","801189E5 0007","801189E6 0007","801189E7 0007","801189E8 0007","801189E9 0007","801189EA 0007","801189F7 0009","801189F8 0009","801189F9 0009","801189FA 0009","801189FB 0009","80118A01 0009","80118A04 0009","801189FF 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801189CC 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["801189C6 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801189C5 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801189CA 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801189C4 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118968 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118971 0008","80118972 0001","80118974 0001","8011896B 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801189D2 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["81119D04 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["80119D0D 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D011BB11 0020","811D93D0 40CB","D011BB11 0000","811D9BF2 000D","801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119D41 00??"],"options":{"English":"00","French":"02","German":"01"}},"Level Select":{"note":"","data":["D01C6E35 0000","8111893A ????"],"options":{"?":"006C","Below The Phantom Gannon Boss":"000C","Dodongo's Cavern":"0004","Gerudo Training Ground":"0008","Inside Jabu-Jabu's Belly":"0027","Inside the Deku Tree":"0000","Lakeside Laboratory":"0042","Royal Family's Tomb":"002C","Shoadow Temple":"0036","Temple Of Time":"0052","Water Temple":"0010"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["80118A07 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["80118A09 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["81118966 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["81119D00 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L\\For Infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D011BB11 0020","811D9BF2 000D"],"options":null},"Press L\\To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D011BB11 0020","811D93D0 40CB"],"options":null},"Time of Day Modifier":{"note":"","data":["81118944 ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["801189C2 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["801189C3 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["80118976 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119B5A 0000","81119B5C 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"1D4136F3-AF63EEA9-C:50":{"Always Have Wallet Size":{"note":"","data":["801189DA 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C681D 0010","81119C9E 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["80119821 00FF","80119C97 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,\u0026 then press reset (F1) you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D011BB71 0000","80119D4B 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["8002397C 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801189BE 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801189BF 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801189C0 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801189C1 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1A68 0005","801EE508 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801189DA 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801189DB 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801189D9 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189D4 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["801189DD 00??","801189DE 00??","801189DF 00??"],"options":{"Off":"00","On":"FF"}},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801189B0 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801189B6 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801189BC 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["801189B4 0009"],"options":null},"Have\\Bombs":{"note":"","data":["801189AE 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["801189B8 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["801189AD 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["801189AC 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["801189AF 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["801189B2 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["801189B5 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["801189B9 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["801189BA 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["801189B1 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["801189B7 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["801189BD 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["801189BB 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["801189B3 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Have\\Status Heart Containers":{"note":"","data":["801189DC 00??"],"options":{"Off":"00","On":"30"}},"Infinite\\Arrows":{"note":"","data":["801189C7 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["801189E0 0007","801189E1 0007","801189E2 0007","801189E3 0007","801189E4 0007","801189E5 0007","801189E6 0007","801189E7 0007","801189E8 0007","801189E9 0007","801189EA 0007","801189F7 0009","801189F8 0009","801189F9 0009","801189FA 0009","801189FB 0009","80118A01 0009","80118A04 0009","801189FF 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801189CC 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["801189C6 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801189C5 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801189CA 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801189C4 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118968 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118971 0008","80118972 0001","80118974 0001","8011896B 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801189D2 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["81119D04 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["80119D0D 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D011BB11 0020","811D93D0 40CB","D011BB11 0000","811D9BF2 000D","801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119D41 00??"],"options":{"English":"00","French":"02","German":"01"}},"Level Select":{"note":"","data":["D01C6E35 0000","8111893A ????"],"options":{"?":"006C","Below The Phantom Gannon Boss":"000C","Dodongo's Cavern":"0004","Gerudo Training Ground":"0008","Inside Jabu-Jabu's Belly":"0027","Inside the Deku Tree":"0000","Lakeside Laboratory":"0042","Royal Family's Tomb":"002C","Shoadow Temple":"0036","Temple Of Time":"0052","Water Temple":"0010"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["80118A07 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["80118A09 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["81118966 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["81119D00 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L\\For Infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D011BB11 0020","811D9BF2 000D"],"options":null},"Press L\\To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D011BB11 0020","811D93D0 40CB"],"options":null},"Time of Day Modifier":{"note":"","data":["81118944 ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["801189C2 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["801189C3 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["80118976 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119B5A 0000","81119B5C 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"1E0E96E8-4E28826B-C:45":{"Level Select":{"note":"","data":["80046353 00??"],"options":{"Level 1":"01","Level 10":"0A","Level 11":"0B","Level 12":"0C","Level 13":"0D","Level 14":"0E","Level 15":"0F","Level 16":"10","Level 17":"11","Level 18":"12","Level 19":"13","Level 2":"02","Level 20":"14","Level 21":"15","Level 22":"16","Level 23":"17","Level 24":"18","Level 25":"19","Level 3":"03","Level 4":"04","Level 5":"05","Level 6":"06","Level 7":"07","Level 8":"08","Level 9":"09"}},"Stop Timer From Counting Down (All Levels)":{"note":"","data":["8101D4FC 2400"],"options":null}},"1E12883D-D3B92718-C:46":{"In-Game Cheats\\Access Cheat menu":{"note":"","data":["50000504 0000","80100D98 0001"],"options":null},"In-Game Cheats\\Enable\\All Items":{"note":"To access simply pause in game play \u0026 then unpause.","data":["80100D7C 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Invincibility":{"note":"","data":["802AAFE8 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Monsters":{"note":"","data":["802AB15B 00??"],"options":{"Are Active":"00","Are Gone":"01"}},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A6356 0064","812A639E 0064","812A63AE 00C8","812A6398 1900","812A6368 04B0","812A639A 0640","812A6338 0960","812A639C 0190"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Keys":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A6353 000F"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A63C7 0001","50000E02 0000","812A630C 03E7"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Infinite Health (All Levels)":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on Single-Player, Co-Operative and DUKEMATCH, All Levels.","data":["8024D25F 0064","802A6309 0064"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A66E2 0064","812A672A 0064","812A673A 00C8","812A6724 1900","812A66F4 04B0","812A6726 0640","812A66C4 0960","812A6728 0190"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A6753 0001","50000E02 0000","812A6698 03E7"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on DUKEMATCH, All Levels.","data":["8024C18F 0064","802A6695 0064"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A6A6E 0064","812A6AB6 0064","812A6AC6 00C8","812A6AB0 1900","812A6A80 04B0","812A6AB2 0640","812A6A50 0960","812A6AB4 0190"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A6ADF 0001","50000E02 0000","812A6A24 03E7"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 4 on DUKEMATCH, All Levels.","data":["8024BCEB 0064","802A6A21 0064"],"options":null},"Single-Player (All Levels)\\Have All\\Items \u0026 Infinite Use on all levels":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5FCA 0064","812A6012 0064","812A6022 00C8","812A600C 1900","812A600E 0640","812A5FDC 04B0","812A5FAC 0960","812A6010 0190"],"options":null},"Single-Player (All Levels)\\Have All\\Keys":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5FC7 000F"],"options":null},"Single-Player (All Levels)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000C01 0000","802A603B 0001","50000C02 0000","812A5F7E 03E7"],"options":null},"Single-Player (All Levels)\\Have Infinite Health (All Levels)":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels and does what it says on the tin. Infinite health for player 1, All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802479DB 0064","8026F1DB 0064","802A5F7D 0064"],"options":null}},"1EA26214-E790900F-C:50":{"All Characters":{"note":"","data":["50000301 0000","8010EB51 00FF"],"options":null},"All Levels Completed":{"note":"Unlocks Frag Fest \u0026 Time Trial","data":["50000601 0000","8010EB7D 00FF"],"options":null},"Deaths Modifier":{"note":"","data":["8110EB76 ????"],"options":{"10":"000A","100":"0064","1600":"0640","20":"0014","200":"00C8","30":"001E","40":"0028","400":"0190","50":"0032","800":"0320","Infinite":"03E7"}},"Have All\\Medals":{"note":"Unlocks the In-Game Cheat Menu.Only works with a Controller-Pak","data":["8010EB50 0003","50000601 0000","8010EB4A 00FF"],"options":null},"Have All\\Mini Game Icons":{"note":"Only works with a Controller-Pak","data":["8010EB17 0024"],"options":null},"Infinite Ammo All Guns\\Player 1":{"note":"","data":["50000302 0000","80336535 0063","50000702 0000","80692B95 0063"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["80336527 0064","80692B86 0064"],"options":null},"Infinite Lives\\Player 1":{"note":"","data":["8033637E 0064"],"options":null},"Total Kills Modifier":{"note":"","data":["8110EB6E ????"],"options":{"10":"000A","100":"0064","1600":"0640","20":"0014","200":"00C8","30":"001E","40":"0028","400":"0190","50":"0032","800":"0320","Infinite":"03E7"}},"Wins Modifier":{"note":"","data":["8110EB72 ????"],"options":{"10":"000A","100":"0064","1600":"0640","20":"0014","200":"00C8","30":"001E","40":"0028","400":"0190","50":"0032","800":"0320","Infinite":"03E7"}}},"1FA056E0-A4B9946A-C:4A":{"All Bosses 1 Hit Deaths":{"note":"","data":["811BE182 0000"],"options":null},"Enable\\Max Power Mode":{"note":"","data":["8015D117 0001"],"options":null},"Flashlight Mod":{"note":"","data":["80179148 00??"],"options":{"Off":"00","On":"01"}},"Have All Characters In Multi":{"note":"","data":["8115D112 FFFF","8115D110 0003","8015D111 0003"],"options":null},"Have\\All\\Weapons,Items \u0026 Infinite Ammo\\Player 1":{"note":"","data":["8017A79F 001E","8017A7B3 0008","8017A7B7 0009","801584C4 0009","8015D117 0001","801584C0 000C","801584C1 0060","801584C3 0001","50000601 0000","801584C5 0001","801584CB 0009","801584CD 000C"],"options":null},"Infinite Health":{"note":"","data":["8017A7BB 0064"],"options":null},"Start with Weapon\\Player 1":{"note":"","data":["8017A7A8 00??"],"options":{"Cool Rocket Launcher With Infinite Ammo":"09","HandGun":"00","Invisible Gun 1 With Infinite Ammo":"06","Invisible Gun 2 With Infinite Ammo":"07","M16 With Infinite Ammo":"04","Machinegun":"01","New Cooler Handgun":"05","Odd Inviso ShotGun With Infinite Ammo":"08","Rocket Launcher":"03","Shotgun":"02","Silenced Handgun":"14"}},"Time is Always 00:00:00":{"note":"","data":["8110DA62 0000"],"options":null}},"1FB5D932-3BA9481B-C:45":{"Don't Take Any Damage":{"note":"","data":["8104A260 2400"],"options":null},"Enable Cheat Select":{"note":"","data":["80115933 00??"],"options":{"All Weapons With Fast Run":"42","All Weapons With Infinite Ammo":"06","Fast run":"40","Have All Weapons":"02","Infinite Ammo":"04","Infinite Ammo With Fast Run":"44","Invincible":"01","Invincible With All Weapons And Fast Run":"43","Invincible With All Weapons and Ammo and Fast Run":"47","Invincible With Fast Run":"41","Invincible With Infinite Ammo and All Weapons":"07"}},"Enable In-Game Cheat Menu \u0026 Level Select":{"note":"","data":["81115936 014F"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810496D0 2400"],"options":null},"Sound Select\\Music Volume":{"note":"","data":["80115944 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"Sound Select\\SFX Volume":{"note":"","data":["80115945 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"[Press L For Levitate]":{"note":"","data":["D10F7550 0020","816FE35C 43D5"],"options":null}},"1FBAF161-2C1C54F1-C:41":{"Enable All Levels \u0026 Boarders":{"note":"","data":["80255089 00FF","8025508B 0005","81255096 FCFF","80255098 0007"],"options":null},"Have All\\Contest First Place Done":{"note":"","data":["80244098 0007"],"options":null},"Have All\\Match Levels Completed":{"note":"","data":["8025508A 0005"],"options":null},"Have All\\Trick Attacks Done":{"note":"","data":["81255096 FCFF"],"options":null},"Infinite Damage All Players \u0026 Levels":{"note":"","data":["803F4C3D 0000"],"options":null},"Infinite Lives \u0026 Continues":{"note":"","data":["8026B1CB 0003"],"options":null},"Open Level Character Select":{"note":"With these codes, you have to press the buttons listed below when you are viewing a certain boarders stats. Highlight Akari Hayami's stats, and then hold down the C-Left button and then press the A button to be the Crystal Boarder. Highlight Kensuke Kimachi's stats, and then hold down the C-Up button and then press the A button to be the Metal Boarder. Hightlight Rob Haywood's stats, and then hold down the C-Right button and then press the A button to be the Panda Boarder","data":["8125508A 00??"],"options":{"Easy \u0026 Normal Level":"02","Easy Level":"01","Easy Normal \u0026 Hard Levels":"03","Easy Normal Hard Levels \u0026 Crystal \u0026 Metal Boarders":"05","Easy Normal Hard Levels \u0026 Crystal Boarder":"04"}},"Play As":{"note":"","data":["800200E7 00??"],"options":{"Akari Hayami":"02","Dion Blaster":"00","Gold Boarder":"06","Kensuke Kimachi":"01","Panda Boarder":"07","Ricky Winterborn":"03","Rob Haywood":"04","Silver Boarder":"05"}},"Stop Timer\\Contest\\Air Make":{"note":"","data":["80319CCA 00C5"],"options":null},"Stop Timer\\Contest\\Crystal Lake":{"note":"","data":["8029C1EA 00C5"],"options":null},"Stop Timer\\Contest\\Crystal Peak":{"note":"","data":["802A89AA 00C5"],"options":null},"Stop Timer\\Contest\\Golden Forest":{"note":"","data":["802A6E4A 00C5"],"options":null},"Stop Timer\\Contest\\Half Pipe":{"note":"","data":["802F530A 00C5"],"options":null},"Stop Timer\\Time Attack\\Air Make":{"note":"","data":["8031AB5A 0000"],"options":null},"Stop Timer\\Time Attack\\Crystal Lake":{"note":"","data":["802A593A 0000"],"options":null},"Stop Timer\\Time Attack\\Crystal Peak":{"note":"","data":["802B2CDA 0000"],"options":null},"Stop Timer\\Time Attack\\Deadly Fall":{"note":"","data":["802CF67A 0000"],"options":null},"Stop Timer\\Time Attack\\Dragon Cave":{"note":"","data":["802C148A 0000"],"options":null},"Stop Timer\\Time Attack\\Golden Forrest":{"note":"","data":["802B146A 0000"],"options":null},"Stop Timer\\Time Attack\\Half Pipe":{"note":"","data":["802F649A 0000"],"options":null},"Stop Timer\\Time Attack\\Mountain Village":{"note":"","data":["802CBA6A 0000"],"options":null},"Stop Timer\\Trick Attack\\Air Make":{"note":"","data":["8031ABCA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Crystal Lake":{"note":"","data":["8029F77A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Crystal Peak":{"note":"","data":["802AC9FA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Deadly Fall":{"note":"","data":["802C8F1A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Dragon Cave":{"note":"","data":["802BAE4A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Golden Forrest":{"note":"","data":["802AB06A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Half Pipe":{"note":"","data":["802F650A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Mountain Village":{"note":"","data":["802C51EA 00C5"],"options":null}},"1FC21532-0B6466D4-C:45":{"Gold Tickets\\Player 1":{"note":"","data":["D00BE8C1 0000","8111F7F8 03E7"],"options":null},"Gold Tickets\\Player 2":{"note":"","data":["D00BE8C1 0001","8111F7F8 03E7"],"options":null},"Gold Tickets\\Player 3":{"note":"","data":["D00BE8C1 0002","8111F7F8 03E7"],"options":null},"Gold Tickets\\Player 4":{"note":"","data":["D00BE8C1 0003","8111F7F8 03E7"],"options":null},"Red Tickets\\Player 1":{"note":"","data":["D00BE8C1 0000","8111F7F6 03E7"],"options":null},"Red Tickets\\Player 2":{"note":"","data":["D00BE8C1 0001","8111F7F6 03E7"],"options":null},"Red Tickets\\Player 3":{"note":"","data":["D00BE8C1 0002","8111F7F6 03E7"],"options":null},"Red Tickets\\Player 4":{"note":"","data":["D00BE8C1 0003","8111F7F6 03E7"],"options":null}},"202A8EE4-83F88B89-C:50":{"Always Low Temp\\Player One":{"note":"","data":["810E4668 0000","810E466A 0000"],"options":null},"Always Low Temp\\Player Two":{"note":"","data":["810E4E48 0000","810E4E4A 0000"],"options":null},"In Game Cheat Select\\1":{"note":"","data":["800CDA4A 00??"],"options":{"All stunts":"02","Beat this":"10","Developers team photo":"08","Invincible mode":"04","Small head mode":"20","Transparent riders":"01"}},"In Game Cheat Select\\2":{"note":"","data":["800CDA4B 00??"],"options":{"Big head mode":"01","Debug mode":"04","Down hill mode":"08","Invisible riders":"20","Mirror mode":"02","Night mode":"40","Odd colour mode":"80","Stunt bonus":"10"}},"In-Game cheat modifer":{"note":"","data":["810CDA4A ????"],"options":{"All stunts":"0200","Beat this":"1000","Big head mode":"0001","Debug mode":"0004","Developers team photo":"0800","Down hill mode":"0008","Invincible mode":"0400","Invisible riders":"0020","Mirror mode":"0002","Night mode":"0040","Odd colour mode":"0080","Small head mode":"2000","Stunt bonus":"0010","Transparent riders":"0100"}},"Infinite Time":{"note":"","data":["810F0E36 1770"],"options":null},"Max Score Stunt Mode\\Player One":{"note":"","data":["810E43E8 0098","810E43EA 967F"],"options":null},"Max Score Stunt Mode\\Player Two":{"note":"","data":["810E4BC8 0098","810E4BCA 967F"],"options":null},"Start On Lap":{"note":"","data":["D00E4681 0000","800E4681 00??"],"options":{"Lap 1":"01","Lap 2":"02","Lap 3":"03","Lap 4":"04"}},"Unlock Original Excitebike":{"note":"Press L+R at track selection to Access Soccer,Hill Climb \u0026 Excite 3D","data":["D00F6605 0030","810F2420 FF07"],"options":null}},"204489C1-1286CF2B-C:45":{"Infinite\\99 Dark Knight Discus":{"note":"","data":["802086FE 0063"],"options":null},"Infinite\\99 Lives":{"note":"","data":["802086F1 0063"],"options":null},"Infinite\\Health":{"note":"","data":["802086F2 0064"],"options":null},"Infinite\\Max Charge \u0026 Magnetic Nun Chaku":{"note":"","data":["802086B9 0064"],"options":null},"Press F9 to Have\\Key":{"note":"","data":["88208524 0020"],"options":null},"Suit Select":{"note":"","data":["802086F4 00??"],"options":{"Defensive":"02","Nimble":"03","Offensive":"01","Standard":"00"}},"Weapon Select":{"note":"","data":["802086F7 00??"],"options":{"Dark Knight Discus":"01","Dark Knight Staff":"02","Magnetic Nun Chaku":"03","Standard":"00"}}},"204EC022-B119D185-C:45":{"Andrew Reynolds\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDBE 00FF"],"options":null},"Andrew Reynolds\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDC0 00FF"],"options":null},"Andrew Reynolds\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDBB 00FF"],"options":null},"Andrew Reynolds\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDB8 00FF"],"options":null},"Bob Burnquist\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD5A 00FF"],"options":null},"Bob Burnquist\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD5C 00FF"],"options":null},"Bob Burnquist\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD57 00FF"],"options":null},"Bob Burnquist\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD54 00FF"],"options":null},"Bucky Lasek\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD82 00FF"],"options":null},"Bucky Lasek\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD84 00FF"],"options":null},"Bucky Lasek\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD7F 00FF"],"options":null},"Bucky Lasek\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD7C 00FF"],"options":null},"Chad Muska\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD96 00FF"],"options":null},"Chad Muska\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD98 00FF"],"options":null},"Chad Muska\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD93 00FF"],"options":null},"Chad Muska\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD90 00FF"],"options":null},"Elissa Steamer\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDFA 00FF"],"options":null},"Elissa Steamer\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDFC 00FF"],"options":null},"Elissa Steamer\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDF7 00FF"],"options":null},"Elissa Steamer\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDF4 00FF"],"options":null},"Geoff Rowley\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD6E 00FF"],"options":null},"Geoff Rowley\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD70 00FF"],"options":null},"Geoff Rowley\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD6B 00FF"],"options":null},"Geoff Rowley\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD68 00FF"],"options":null},"Have All Tracks":{"note":"","data":["813D6E42 FFFF","813D4FFA FFFF","813D5D62 FFFF","813D84E2 FFFF","813D4FCA FFFF","813D5F2A FFFF","813D8C52 FFFF","813D5602 FFFF","813D6D3A FFFF"],"options":null},"Jamie Thomas\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDE6 00FF"],"options":null},"Jamie Thomas\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDE8 00FF"],"options":null},"Jamie Thomas\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDE3 00FF"],"options":null},"Jamie Thomas\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDE0 00FF"],"options":null},"Kareem Campbell\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDAA 00FF"],"options":null},"Kareem Campbell\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDAC 00FF"],"options":null},"Kareem Campbell\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDA7 00FF"],"options":null},"Kareem Campbell\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDA4 00FF"],"options":null},"Officer Dick\\Have All\\Gold Medal\\Burnside":{"note":"","data":["800DDE0E 00FF"],"options":null},"Officer Dick\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDE10 00FF"],"options":null},"Officer Dick\\Have All\\Gold Medal\\Skate Park":{"note":"","data":["800DDE0B 00FF"],"options":null},"Officer Dick\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDE08 00FF"],"options":null},"Player 1\\Have\\ Perfect Balance":{"note":"","data":["800DDB83 0001"],"options":null},"Player 1\\Max Points\\Burnside":{"note":"","data":["813D8C52 FFFF"],"options":null},"Player 1\\Max Points\\Downhill Jam":{"note":"","data":["813D5F2A FFFF"],"options":null},"Player 1\\Max Points\\Downtown Chicago":{"note":"","data":["813D4FCA FFFF"],"options":null},"Player 1\\Max Points\\Roswell New Mexico":{"note":"","data":["813D6D3A FFFF"],"options":null},"Player 1\\Max Points\\Street":{"note":"","data":["813D5602 FFFF"],"options":null},"Player 1\\Max Points\\The Mall":{"note":"","data":["813D5D62 FFFF"],"options":null},"Player 1\\Max Points\\The School":{"note":"","data":["813D4FFA FFFF"],"options":null},"Player 1\\Max Points\\The Skate Park":{"note":"","data":["813D84E2 FFFF"],"options":null},"Player 1\\Max Points\\The Warehouse":{"note":"","data":["813D6E42 FFFF"],"options":null},"Player 1\\Max Trick Score\\Burnside":{"note":"","data":["813D8C52 FFFF"],"options":null},"Player 1\\Max Trick Score\\Downhill Jam":{"note":"","data":["813D5F2A FFFF"],"options":null},"Player 1\\Max Trick Score\\Downtown":{"note":"","data":["813D4FCA FFFF"],"options":null},"Player 1\\Max Trick Score\\Roswell":{"note":"","data":["813D6D3A FFFF"],"options":null},"Player 1\\Max Trick Score\\The Mall":{"note":"","data":["813D5D62 FFFF"],"options":null},"Player 1\\Max Trick Score\\The School":{"note":"","data":["813D4FFA FFFF"],"options":null},"Player 1\\Max Trick Score\\The Skate Park Course":{"note":"","data":["813D84E2 FFFF"],"options":null},"Player 1\\Max Trick Score\\The Streets":{"note":"","data":["813D5602 FFFF"],"options":null},"Player 1\\Play As":{"note":"","data":["800D03D4 00??"],"options":{"Andrew Reynolds":"06","Bob Burnquist":"01","Bucky Lasek":"03","Chad Muska":"04","Elissa Steamer":"09","Geoff Rowley":"02","Jamie Thomas":"08","Kareem Campbell":"05","Officer Dick":"0A","Rune Glifberg":"07","Tony Hawk":"00"}},"Player 1\\Super Max\\Air":{"note":"","data":["800D561E FFFF"],"options":null},"Player 1\\Super Max\\Balance":{"note":"","data":["800D561F FFFF"],"options":null},"Player 1\\Super Max\\Ollie":{"note":"","data":["800D561C FFFF"],"options":null},"Player 1\\Super Max\\Speed":{"note":"","data":["800D561D FFFF"],"options":null},"Player 1\\Super Max\\Turning":{"note":"","data":["800D5620 FFFF"],"options":null},"Player 1\\Tony Hawk\\Full Special All Levels":{"note":"","data":["D00C0223 0000","813D6576 02EE","D00C0223 0001","813D4728 02EE","D00C0223 0002","813D5496 02EE","D00C0223 0003","813D7C16 02EE","D00C0223 0004","813D467E 02EE","D00C0223 0005","813D565E 02EE","D00C0223 0006","813D8386 02EE","D00C0223 0007","813D4D36 02EE","D00C0223 0008","813D646E 02EE"],"options":null},"Player 2\\Play As":{"note":"","data":["800D03D5 00??"],"options":{"Andrew Reynolds":"06","Bob Burnquist":"01","Bucky Lasek":"03","Chad Muska":"04","Elissa Steamer":"09","Geoff Rowley":"02","Jamie Thomas":"08","Kareem Campbell":"05","Officer Dick":"0A","Rune Glifberg":"07","Tony Hawk":"00"}},"Player 2\\Super Max\\Air":{"note":"","data":["800D5623 FFFF"],"options":null},"Player 2\\Super Max\\Balance":{"note":"","data":["800D5624 FFFF"],"options":null},"Player 2\\Super Max\\Ollie":{"note":"","data":["800D5621 FFFF"],"options":null},"Player 2\\Super Max\\Speed":{"note":"","data":["800D5622 FFFF"],"options":null},"Player 2\\Super Max\\Turning":{"note":"","data":["800D5625 FFFF"],"options":null},"Rune Glifberg\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDD2 00FF"],"options":null},"Rune Glifberg\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDD4 00FF"],"options":null},"Rune Glifberg\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDCF 00FF"],"options":null},"Rune Glifberg\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDCC 00FF"],"options":null},"Tony Hawk\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD46 00FF"],"options":null},"Tony Hawk\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD48 00FF"],"options":null},"Tony Hawk\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD43 00FF"],"options":null},"Tony Hawk\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD40 00FF"],"options":null}},"20B53662-7B61899F-C:50":{"Have Cheats Menu":{"note":"","data":["800D77D6 01FF"],"options":null},"Infinite Balls":{"note":"","data":["802FD21F 0064"],"options":null},"Infinite Credits":{"note":"","data":["802FD215 0064"],"options":null},"Infinite Energy":{"note":"","data":["802FD209 0064"],"options":null},"Infinite Sponge Darts":{"note":"","data":["802FD223 0064"],"options":null},"Infinite Suckers":{"note":"","data":["802FD222 0064"],"options":null},"Start with 9999 Monster Score":{"note":"","data":["812FD20E 270F"],"options":null}},"214CAD94-BE1A3B24-C:45":{"Gun 4-Way Shot":{"note":"","data":["80129723 0004"],"options":null},"Infinite Fuel":{"note":"","data":["81129726 FFFF"],"options":null},"Infinite Shield":{"note":"","data":["811296C8 03E8"],"options":null},"Infinite Weapon\\1st Position":{"note":"","data":["8012943B 0063"],"options":null},"Infinite Weapon\\2nd Position":{"note":"","data":["8012943F 0063"],"options":null},"Infinite Weapon\\3rd Position":{"note":"","data":["80129443 0063"],"options":null},"Infinite Weapon\\4th Position":{"note":"","data":["80129447 0063"],"options":null},"Infinite Weapon\\5th Position":{"note":"","data":["8012944B 0063"],"options":null},"Max Score":{"note":"","data":["81129426 FFFF"],"options":null},"Score Attack Mode":{"note":"","data":["81129472 0001"],"options":null},"Stage Select On":{"note":"","data":["81129476 0001"],"options":null},"Weapon Modifier\\1st Position":{"note":"Must to be used with the Infinite Weapon Codes","data":["80129439 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\2nd Position":{"note":"Must to be used with the Infinite Weapon Codes","data":["8012943D 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\3rd Position":{"note":"Must to be used with the Infinite Weapon Codes","data":["801294F1 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\Gun Weapon":{"note":"","data":["80129723 00??"],"options":{"2-Way Shot":"02","3-Way Shot":"03","4-Way Shot":"04","No Weapon":"00","Normal Shot":"01"}}},"2153143F-992D6351-C:45":{"Press L + C-Down For Cheat Screen":{"note":"","data":["D01101B3 0024","8103BFE0 0000","D01101B3 0024","8103BFE2 0000"],"options":null}},"21548CA9-9059F32C-C:00":{"Everything Unlocked":{"note":"Have All Grand Prix Levels Open And Completed","data":["8008270F 00FF","8108277A 0FFF"],"options":null},"Regional Class\\Max Grip":{"note":"Do not enable until you are at the Region Class Selection menu. Disbale before restarting.","data":["800B2529 003D","800BC529 003D","800C6529 003D"],"options":null},"Regional Class\\Max Motor":{"note":"Do not enable until you are at the Region Class Selection menu. Disbale before restarting.","data":["800C6481 003D","800BC481 003D","800B2481 003D"],"options":null},"Regional Class\\Max Turbo":{"note":"Do not enable until you are at the Region Class Selection menu. Disbale before restarting.","data":["800B25D1 003D","800BC5D1 003D","800C65D1 003D"],"options":null},"World Challenge\\Max Grip":{"note":"Do not enable until you are at the World Challenge Selection menu. Disbale before restarting.","data":["800B28B1 003D","800BC8B1 003D","800C68B1 003D"],"options":null},"World Challenge\\Max Motor":{"note":"Do not enable until you are at the World Challenge Selection menu. Disbale before restarting.","data":["800B2809 003D","800BC809 003D","800C6809 003D"],"options":null},"World Challenge\\Max Turbo":{"note":"Do not enable until you are at the World Challenge Selection menu. Disbale before restarting.","data":["800B2959 003D","800BC959 003D","800C6959 003D"],"options":null},"World Class\\Max Grip":{"note":"Do not enable until you are at the World Class Selection menu. Disbale before restarting.","data":["800B2861 003D","800BC861 003D","800C6861 003D"],"options":null},"World Class\\Max Motor":{"note":"Do not enable until you are at the World Class Selection menu. Disbale before restarting.","data":["800B27B9 003D","800BC7B9 003D","800C67B9 003D"],"options":null},"World Class\\Max Turbo":{"note":"Do not enable until you are at the World Class Selection menu. Disbale before restarting.","data":["800B2909 003D","800BC909 003D","800C6909 003D"],"options":null},"[Player 1]\\Infinite\\Lives":{"note":"","data":["800827BB 0006"],"options":null},"[Player 1]\\Infinite\\Turbo":{"note":"","data":["80195CF3 00FF"],"options":null},"[Player 1]\\Press R to Come In 1st":{"note":"Do not press this until you have finished the race and came in at whatever position. Then Press R Button to then Come In 1st","data":["D0093671 0010","801460A3 0000"],"options":null}},"219191C1-33183C61-C:50":{"1-Hit Death":{"note":"","data":["81137E7C 4136"],"options":null},"Extra Shields":{"note":"","data":["81137E7C 4316"],"options":null},"Have\\99\\Bonus Collected":{"note":"","data":["80130B87 0063"],"options":null},"Have\\99\\Kills":{"note":"","data":["80130B85 0063"],"options":null},"Have\\99\\Saves":{"note":"","data":["80130B86 0063"],"options":null},"Have\\Medals For\\Ambush at Mos Eisley":{"note":"","data":["88130B1C 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Assault on Kile II":{"note":"","data":["88130B23 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Battle Above Taloraan":{"note":"","data":["88130B26 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Battle of Hoth":{"note":"","data":["88130B2E 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Beggar's Canyon":{"note":"","data":["88130B2C 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Blockade on Chandrila":{"note":"","data":["88130B28 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Defection At Corellia":{"note":"","data":["88130B1F 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Escape From Fest":{"note":"","data":["88130B27 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Imperial Construction Yard":{"note":"","data":["88130B22 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Liberation V":{"note":"","data":["88130B20 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Moff Seerdon's Revenge":{"note":"","data":["88130B2A 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Prisons on Kessel":{"note":"","data":["88130B25 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Raid on Sullust":{"note":"","data":["88130B29 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Rendezvou on Bankhesh":{"note":"","data":["88130B1D 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Rescue on Kessel":{"note":"","data":["88130B24 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\The Battle of Calamari":{"note":"","data":["88130B2B 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\The Death Star Trench Run":{"note":"","data":["88130B2D 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\The Jade Moon":{"note":"","data":["88130B21 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\The Search For The Noonnah":{"note":"","data":["88130B1E 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Infinite\\Infinite Health":{"note":"","data":["81137E7C 4316"],"options":null},"Infinite\\Infinite Lives":{"note":"","data":["80130B10 0008"],"options":null},"Infinite\\Infinite Secondary Weapons":{"note":"","data":["8010CA32 0008"],"options":null}},"2256ECDA-71AB1B9C-C:50":{"Access All Levels":{"note":"","data":["8008AA56 0001","8008AD3A 0001","8008A862 0001","8008A876 0001","8008A88A 0001","8008A89E 0001","8008A8B2 0001","8008A8C6 0011","8008A8DA 0021","8008AD4E 0001","8008A916 0011","8008A92A 0041","8008A93E 0021","8008A966 0001","8008A98E 0001","8008AD62 0001","8008A9DE 0001","8008A9F2 0011","8008AA06 0021","8008AD76 0001","8008A7D6 0001","8008A7EA 0001","8008A812 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81093F50 0063","81093F52 0063","81093F54 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A9097 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810864C2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810864C4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80094105 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A90B5 00??","800A90C5 00??","800A90D5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"22E9623F-B60E52AD-C:50":{"1 Win to Win\\Player 1":{"note":"","data":["D020A84F 0000","8020A84F 0001"],"options":null},"1 Win to Win\\Player 2":{"note":"","data":["D020A84F 0000","8020A84F 0010"],"options":null},"Infinite\\Health\\Player 1":{"note":"","data":["80209D81 00C8"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["81209780 0190"],"options":null},"Infinite\\Money":{"note":"","data":["8121106C 2704"],"options":null},"Infinite\\Special\\Player 1":{"note":"","data":["81209484 0190"],"options":null},"Infinite\\Special\\Player 2":{"note":"","data":["8120B1B0 0190"],"options":null}},"2337D8E8-6B8E7CEC-C:45":{"Infinite\\Eggs Once You Get One":{"note":"This is for All Yoshis All levels","data":["8103E89C 2400"],"options":null},"Infinite\\Health":{"note":"This is for All Yoshis All levels","data":["8102B780 2400"],"options":null},"Infinite\\Lives":{"note":"This is for All Yoshis All levels","data":["800F8DF7 00FF"],"options":null}},"23749578-80DC58FD-C:45":{"1 Lap to Race":{"note":"","data":["800438B3 0009","D021FBAB 0000","8021FBAB 0008","D022359B 0000","8022359B 0008"],"options":null},"Max Gear Ratios":{"note":"","data":["810C9E90 7F1E","810C9E82 707F"],"options":null},"Total Laps to Race Modifier":{"note":"","data":["800438B3 00??"],"options":{"1 lap":"01","2 lap":"02","3 lap":"03","4 lap":"04","5 lap":"05","6 lap":"06","7 lap":"07","8 lap":"08","9 lap":"09"}}},"237E73B4-D63B6B37-C:45":{"Flashing Invincible":{"note":"This cheat Makes you Flash But you cant be harmed,Once out of danger Turn the cheat off to stop the flashing.also do not put this on if you have already been hurt or you will stay on the floor.","data":["800AD767 000A"],"options":null},"Have\\Fire Bombs":{"note":"","data":["800AD73B 0003"],"options":null},"Have\\Kick Bombs Anytime":{"note":"","data":["800AC743 0003"],"options":null},"Have\\Max Fire Level":{"note":"","data":["800AD733 0003"],"options":null},"Infinite\\Bombs":{"note":"","data":["800AD758 0003"],"options":null},"Infinite\\Continue Time":{"note":"","data":["810B5CD6 0090"],"options":null},"Infinite\\Health":{"note":"","data":["800AD75F 0005"],"options":null},"Infinite\\Money":{"note":"","data":["810ABD52 FFFF"],"options":null}},"2388984C-DA7B3CC5-C:45":{"Level Select\\Proving Ground-Tightrope":{"note":"Do Not use this with Level Select The Pit-Starlight. Only use One Level Select Option At A Time","data":["8014BD9F 00??"],"options":{"Basic Training":"01","Bomb Shelter":"0B","Bottleneck":"10","Boxed Set":"06","Cathedral":"04","Crossroads":"02","Dire Straight":"07","Earth Temple":"0D","Fall Out":"05","Fire Temple":"0E","Grim Retreat":"03","Mystic":"0F","Prey":"08","Proving Grounds":"00","Tempered":"0C","Tightrope":"11","Warehouse":"09","Water Temple":"0A"}},"Level Select\\The Pit-Starlight":{"note":"Do Not use this with Level Select Proving Ground-Tightrope. Only use One Level Select Option At A Time","data":["8014BD9F 00??"],"options":{"Ampatheater":"16","Breakdown":"19","Bunker":"15","Courtyard":"22","Crypts":"18","Defcon 5":"1F","Fathom":"1D","Fire Walker":"17","Hopeless":"1B","Leap Of Faith":"13","Matrix":"1C","Retaliation":"1A","Spirit Temple":"20","Starlight":"23","Stronghold":"21","The Pedestal":"1E","The Pit":"12","Wicked Dance":"14"}},"Player 1\\Have All\\Medals":{"note":"","data":["810FCB4A FFFF","810FCB4C FFFF","810FCB4E FFFF","800FCB50 0003"],"options":null},"Player 1\\Have All\\Mini Game Icons":{"note":"","data":["800FCB17 0024"],"options":null},"Player 1\\Infinite Ammo":{"note":"","data":["80336535 0063","80336537 0063","80336539 0063","80692B95 0063","80692B97 0063","80692B99 0063","80692B9B 0063","80692B9D 0063","80692B9F 0063","80692BA1 0063"],"options":null},"Player 1\\Infinite\\Cerebral Bores":{"note":"","data":["8033653B 00FF"],"options":null},"Player 1\\Infinite\\Health":{"note":"","data":["81336526 6400","80692B86 0064"],"options":null},"Player 1\\Infinite\\Metal Claws":{"note":"","data":["80336541 00FF"],"options":null},"Player 1\\Infinite\\Proximity Mines":{"note":"","data":["8033653D 00FF"],"options":null},"Player 1\\Infinite\\Sentry Guns":{"note":"","data":["8033653F 00FF"],"options":null},"Player 1\\Infinite\\Time":{"note":"","data":["811407F4 47AF","811407F6 C4B1"],"options":null},"Player 1\\Play As":{"note":"","data":["80140358 00??"],"options":{"Adon":"05","Bastile":"0B","Blind One":"08","Death Guard":"0A","Drone":"02","Elite Guard":"07","Fireborn":"03","Juggernaut":"09","Lord Of The Dead":"06","Mantid":"01","Mites":"12","Monkey":"13","Pur-Lin":"0F","Raptor":"11","Soldier":"04","Symbiont":"10","Syra":"0C","Tail Set":"0E","Turok":"00"}},"Player 1\\Start With Weapon":{"note":"","data":["803366B0 00??"],"options":{"Assault Rifle":"05","Boomerang":"01","Cerebral Bore":"12","Chest Burster":"0F","Emaciator":"0D","Flaregun":"09","Freeze Gun":"08","Grenade Launcher":"0A","Inflator":"0E","Iron Claw":"14","Mag 60":"03","Mini Gun":"06","Mite Bite":"11","Napalm Gel":"0C","PFM Mine":"13","Plasma Rifle":"07","Raptor Claw":"10","Scorpion Launcher":"0B","Sentry Turret":"15","Shotgun":"04","Tek Crossbow":"02","Warhammer":"00"}}},"2483F22B-136E025E-C:55":{"999 Kills":{"note":"","data":["80163B03 00FF"],"options":null},"Have All Medals":{"note":"For Expert \u0026 Normal Modes","data":["50000802 0000","8017A9D9 7777"],"options":null},"Infinite\\Armor\\Falco":{"note":"","data":["80174187 00FF"],"options":null},"Infinite\\Armor\\Peppy":{"note":"","data":["8017418F 00FF"],"options":null},"Infinite\\Armor\\Slippy":{"note":"","data":["8017418B 00FF"],"options":null},"Infinite\\Dual Blue Lasers":{"note":"","data":["80163C13 0002"],"options":null},"Infinite\\Energy":{"note":"","data":["80141587 00FF","8013E6A7 00FF"],"options":null},"Infinite\\Hyper Laser":{"note":"","data":["80163B13 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["80163B09 0063"],"options":null},"Level Select":{"note":"","data":["8017A29F 00??"],"options":{"Aquas":"0D","Area 6":"03","Bolse":"11","Corneria":"00","Corneria (Multi)":"14","Fortuna":"0E","Glitch":"04","Katina":"10","Macbeth":"0B","Meteo":"01","Sector X":"02","Sector Y":"05","Sector Z":"12","Solar":"07","Titania":"0C","Training Mode Level":"0A","Venom 1":"06","Venom 2":"09","Venom With Starwolf":"13","Zoness":"08"}},"Loads O' Hits":{"note":"","data":["80163B03 00FF"],"options":null},"Unlimited\\Boost":{"note":"","data":["8113E6FC 0000","8113E6FE 0000","811415DC 0000","811415DE 0000","8013E7FD 0000","801416DD 0000"],"options":null},"Unlimited\\Smart Bombs":{"note":"","data":["80179E0B 0063"],"options":null}},"2500267E-2A7EC3CE-C:45":{"All Modes\\Always Have 1st Place":{"note":"","data":["81056444 0001"],"options":null},"All Modes\\Infinite Time":{"note":"","data":["811269CA 0700"],"options":null},"All Modes\\Press R Button For Turbo":{"note":"","data":["D103E1EA 0010","8105641A 0800"],"options":null},"Grand Prix Mode\\2 Tier Cars":{"note":"","data":["80119BB0 0039"],"options":null},"Grand Prix Mode\\All Cars Have Perfect Stats":{"note":"","data":["50008002 0000","8102F314 05DC"],"options":null},"Grand Prix Mode\\Car Modifier":{"note":"","data":["8113CF5A 00??"],"options":{"00-Agent":"19","13th Racing Kid":"0E","Age Solo Supernova":"12","Assoluto Infinito":"11","Atomic Purple":"13","Blinky":"1B","Caddy Car":"1E","Crazy Canuck":"1D","Dig Racing Team":"0C","Digipen Racing":"10","Extreme Green":"14","F/A Racing":"00","Galaga RT Carrot":"07","Galaga RT Prid's":"06","Galaga' 88":"1A","Lizard Nightmare":"16","Micro Mouse Mappy":"0D","PAC Racing":"02","Pooka":"1F","RT Blue Mappy":"05","RT Bosconian":"08","RT Nebulasray":"09","RT Pink Mappy":"04","RT Ryukyu":"01","RT Solvalou":"03","RT Xevious Green":"0B","RT Xevious Red":"0A","Red Shirt Rage":"1C","Screamin' Eagle":"17","Terrazi Terrific":"15","Ultra 64 (Full Stats)":"18","White Angel":"0F"}},"Grand Prix Mode\\Enlarge Cars":{"note":"","data":["81119758 3FC0","811197AC 3FC0","81119800 3FC0"],"options":null},"Grand Prix Mode\\Laps to Race":{"note":"","data":["8111B32E ????"],"options":{"lap":"0101","laps":"0909"}},"Grand Prix Mode\\Microscopic Cars":{"note":"","data":["80119758 003D","801197AC 003D","80119800 003D"],"options":null},"Grand Prix Mode\\Press GS For Overhead View":{"note":"","data":["8811AB0F 0002"],"options":null},"Grand Prix Mode\\Shrink Cars":{"note":"","data":["80119758 003E","801197AC 003E","80119800 003E"],"options":null},"Grand Prix Mode\\Track Modifier":{"note":"","data":["8113CF6A 00??"],"options":{"Renegade Expert":"08","Renegade Intermediate":"05","Renegade Novice":"02","Revolution Expert":"07","Revolution Intermediate":"04","Revolution Novice":"01","Ridge Racer Expert":"06","Ridge Racer Extreme":"09","Ridge Racer Intermediate":"03","Ridge Racer Novice":"00"}},"Grand Prix Mode\\Unlock\\All Cars":{"note":"","data":["8102F19C FFFF","8102F19E FFFF"],"options":null},"Grand Prix Mode\\Unlock\\All Engine Classes All Levels":{"note":"","data":["50001E08 0000","8102FAB0 0004","50001E08 0000","8102FAB2 0403"],"options":null},"Grand Prix Mode\\Unlock\\All Tracks \u0026 Trophies":{"note":"","data":["81043530 FFFF","81043532 FFFF"],"options":null}},"255018DF-57D6AE3A-C:45":{"Access All In-Game Cheats":{"note":"Pause Gameplay To Access","data":["81152946 000F","81152956 FFFF"],"options":null},"Access All Navigation Cards":{"note":"","data":["8015298B 0005"],"options":null},"Access Secret Worlds":{"note":"","data":["81152946 0064"],"options":null},"Infinite Lives":{"note":"","data":["8015299F 0063"],"options":null},"Max \u0026 Total Gold":{"note":"","data":["8015293B 0063","80152AFF 0063"],"options":null}},"2577C7D4-D18FAAAE-C:50":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118D920 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118D922 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118D924 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118D926 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["50000402 0000","8018ED70 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["80165FBD 00??","80165FEA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["8016609D 00??","801660CA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["8016617D 00??","801661AA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["8016625D 00??","8016628A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["8016633D 00??","8016636A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["8016641D 00??","8016644A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818EE4F 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F6975 0020","810F6A28 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F6985 0020","810F7800 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F6995 0020","810F85D8 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F69A5 0020","810F93B0 4000"],"options":null}},"259F7F84-7C9EED26-C:50":{"Infinite\\99 Dark Knight Discus":{"note":"","data":["801D7F4A 0063"],"options":null},"Infinite\\99 Lives":{"note":"","data":["801D7F3E 0064"],"options":null},"Infinite\\Health":{"note":"","data":["801D7F3D 0064"],"options":null},"Infinite\\Max Charge \u0026 Magnetic Nun Chaku":{"note":"","data":["801D7F06 0064"],"options":null},"Press F9 to Have\\Key":{"note":"","data":["881D7D70 0020"],"options":null},"Suit Select":{"note":"","data":["801D7F40 00??"],"options":{"Defensive":"02","Nimble":"03","Offensive":"01","Standard":"00"}},"Weapon Select":{"note":"","data":["801D7F43 00??"],"options":{"Dark Knight Discus":"01","Dark Knight Staff":"02","Magnetic Nun Chuku":"03","Standard":"00"}}},"26035CF8-802B9135-C:45":{"Access All Levels":{"note":"","data":["8008A5C6 0001","8008A5DA 0001","8008A602 0001","8008A652 0001","8008A666 0001","8008A67A 0001","8008A68E 0001","8008A6A2 0001","8008A6B6 0011","8008A6CA 0021","8008A6DE 0001","8008A706 0011","8008A71A 0041","8008A72E 0021","8008A742 0081","8008A756 0001","8008A76A 0081","8008A77E 0001","8008A7A6 0001","8008A7CE 0001","8008A7E2 0011","8008A7F6 0021","8008A846 0001","8008AB2A 0001","8008AB3E 0001","8008AB52 0001","8008AB66 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81093D40 0063","81093D42 0063","81093D44 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A8EA7 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810862B2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810862B4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80093EF5 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A8EA5 00??","800A8EB5 00??","800A8EC5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"264D7E5C-18874622-C:45":{"All Levels\\Dash Becomes Shorter \u0026 Wider":{"note":"","data":["800BA025 FFFF"],"options":null},"All Levels\\Infinite\\Lives":{"note":"","data":["800E05CB 0064"],"options":null},"All Levels\\Infinite\\Missiles":{"note":"","data":["800E1265 00FF"],"options":null},"All Levels\\Large Mutant Enemies":{"note":"","data":["800BB62B FFFF"],"options":null},"All Levels\\No Clipping\\Off":{"note":"","data":["81111E67 0001"],"options":null},"All Levels\\No Clipping\\On":{"note":"","data":["81111E67 0000"],"options":null},"All Levels\\See Through\\Everything Except Specific Things":{"note":"","data":["800BC665 FFFF"],"options":null},"All Levels\\See Through\\Some Walls":{"note":"","data":["800BC625 FFFF"],"options":null},"All Levels\\Time Always 0:00:02":{"note":"","data":["810E04E8 4000"],"options":null},"All Levels\\Visibililty\\Maximum":{"note":"","data":["800BA62B FFFF"],"options":null},"All Levels\\Visibililty\\Minimum":{"note":"","data":["800BA66B FFFF"],"options":null},"All Stages\\Infinite Health":{"note":"","data":["81072D0C 2400"],"options":null},"All Stages\\Infinite\\Disruptor Ammo":{"note":"","data":["81073F04 2400"],"options":null},"All Stages\\Infinite\\Flame Ammo":{"note":"","data":["81073720 2400"],"options":null},"All Stages\\Infinite\\Jet Pack":{"note":"","data":["81076AAC 2400","81076C58 2400","81076B48 2400"],"options":null},"All Stages\\Infinite\\Pulse Ammo":{"note":"","data":["81074204 2400"],"options":null},"All Stages\\Infinite\\Seeker Ammo":{"note":"","data":["81073A94 2400"],"options":null},"All Stages\\Infinite\\Stunner Ammo":{"note":"","data":["81073BD4 2400"],"options":null},"All Stages\\Invincible":{"note":"","data":["8107A770 2400"],"options":null},"All Stages\\Lasers Never Overheat":{"note":"","data":["81073948 2400"],"options":null},"All Stages\\Upper Lasers":{"note":"Don't Use With Never Overheat Code","data":["81073944 3C06","81073946 4EFF"],"options":null},"Press GS For Pink Cheat Debug Screen":{"note":"","data":["890D017F 0001"],"options":null}},"2655BB70-667D9925-C:45":{"Have\\All Magic":{"note":"","data":["800CE9C8 0010","800CE9CD 0000","800CE9D7 0001","800CE9E1 0002","800CE9EB 0003","800CE9F5 0005","800CE9FF 0006","800CEA09 0008","800CEA13 0009","800CEA1D 000B","800CEA27 000E","800CEA31 000F","800CEA3B 0010","800CEA45 0011","800CEA4F 000A","800CEA59 000C","800CEA63 000D"],"options":null},"Have\\Magic On Level 4":{"note":"","data":["810C8B5D FFFF","810C8B5E FFFF","810C8B5F FFFF","810C8B60 FFFF","810C8B61 FFFF","810C8B62 FFFF"],"options":null},"Have\\Max Armour Level":{"note":"","data":["800C8B80 0064"],"options":null},"Have\\Max Experience Level":{"note":"","data":["800C8B7C 00FF"],"options":null},"Have\\Max Spirit Level":{"note":"","data":["800C8B84 0064"],"options":null},"Have\\Max Weapon Level":{"note":"","data":["800C8B82 0064"],"options":null},"Have\\Weapons On Max Upgrade":{"note":"","data":["50000408 0000","800C8B2C 0009"],"options":null},"Infinite Air Under Water":{"note":"","data":["800C8A64 0069"],"options":null},"Infinite Max\\999 Lives":{"note":"","data":["810C8B78 03E8"],"options":null},"Infinite Max\\Fire Ammo":{"note":"","data":["800C8B33 0066"],"options":null},"Infinite Max\\Fusion Ammo":{"note":"","data":["800C8B43 0066"],"options":null},"Infinite Max\\Health":{"note":"","data":["800C8959 0066"],"options":null},"Infinite Max\\Ionic Ammo":{"note":"","data":["800C8B3B 0066"],"options":null},"Infinite Max\\Light Ammo":{"note":"","data":["800C8B2B 0066"],"options":null},"Infinite Max\\Mana":{"note":"","data":["800C8B7F 0066"],"options":null},"Matts":{"note":"","data":["D00C8A4A 0080","810C8963 0100"],"options":null},"Play As Select":{"note":"","data":["800FCD45 00??"],"options":{"Ike Hawkings (Corporal)":"00","Julia Chase (Cartographer)":"02","Karma (The Ex-Deviant)":"03","Max Havok (Chief Enginer)":"04","Mr Bodybolt (7th Passenger)":"06","Solaar (Archbishop)":"05","Sophia Hawkings (Stowaway)":"01"}},"Press A For Bionic Jump":{"note":"This will make you jump to a great height","data":["D00C8A4A 0080","810C8968 ????"],"options":{"Max Jump":"0800","Medium Jump":"0250"}}},"26809B20-39A516A4-C:4A":{"Access All Boards \u0026 Characters":{"note":"","data":["800500C1 000C"],"options":null},"All Street Work Levels Unlocked":{"note":"","data":["50007801 0000","80050170 00??"],"options":{"Courses unlocked":"01","Courses unlocked with A rank":"05","Courses unlocked with B rank":"04","Courses unlocked with C rank":"03","Courses unlocked with S rank":"06"}},"Class Score Select":{"note":"","data":["8016609E 00??"],"options":{"Class A":"64","Class B":"40","Class C":"20","Class S":"FF"}},"Coin Perfect Select":{"note":"this is for Coin Mode to get Perfect Coin Collection Score straight away when you enter the level","data":["801660B3 00??"],"options":{"Giant House Level 1":"6E","Giant House Level 2":"77","Giant House Level 3":"72","Green Park Level 1":"14","Green park Level 2":"1A","Green park Level 3":"2B","Lost Forest Level 1":"4A","Lost Forest Level 2":"59","Lost Forest Level 3":"80","Snow Festival 64 Levels 1 2 \u0026 3":"7D","Sunset Island Level 1":"6F","Sunset Island Level 2":"74","Sunset Island Level 3":"81"}},"Infinite Time\\Attack Time Time 000000":{"note":"","data":["811137EA 0000"],"options":null},"Infinite Time\\Street Work \u0026 Coin":{"note":"","data":["801137E9 0028"],"options":null},"Infinite Time\\Time Attack":{"note":"","data":["801137EB 0000"],"options":null},"Infinite Turbo\\Player 1":{"note":"","data":["80166019 0009"],"options":null},"Infinite Turbo\\Player2":{"note":"","data":["80167991 0009"],"options":null},"Maxed Out Turbo Bar":{"note":"","data":["811656E8 429F","80166017 0051"],"options":null},"Options\\Camera Type Modifier":{"note":"","data":["810500A6 00??"],"options":{"Roll Off Far":"05","Roll Off Mid":"04","Roll Off Near":"03","Roll On Far":"02","Roll On Mid":"01","Roll On Near":"00"}},"Options\\DJ Function Modifier":{"note":"","data":["810500AC 00??"],"options":{"DJ Function Off":"00","DJ Function On":"01"}},"Options\\Music Modifier":{"note":"","data":["800500A9 00??"],"options":{"BGM Off":"00","BGM On":"FF"}},"Options\\Sound Effects Modifier":{"note":"","data":["810500AA 00??"],"options":{"SE Off":"00","SE On":"FF"}}},"26CD0F54-53EBEFE0-C:4A":{"Have\\Max Car Strength":{"note":"This has Graphical Issues when used.....","data":["A0165C21 00FF"],"options":null},"Have\\Max Car Upgrade":{"note":"","data":["80165BF8 00FF","80165BF9 00FF","80165BFA 00FF","80165BFB 005F"],"options":null},"Have\\Max Gear Box Upgrades":{"note":"","data":["80165C00 00FF","80165C01 00FF","80165C02 007F"],"options":null},"Have\\Max Roof Upgrades":{"note":"","data":["81165C2A FFFF"],"options":null},"Have\\Max Steering Upgrades":{"note":"","data":["80165C1A 006F","80165C1B 000F"],"options":null},"Have\\Max Tyre Tred Upgrades":{"note":"","data":["80165C10 00FF"],"options":null},"Have\\Max Weapons Upgrades":{"note":"","data":["81165C32 FFFF","80165C33 00FF"],"options":null},"Have\\Max Wheel Parts Upgrades":{"note":"","data":["80165C0A 00FF","80165C0B 007F"],"options":null},"Infinite\\Blue Pointa":{"note":"","data":["801F92A7 0009"],"options":null},"Infinite\\Red Weapons Use":{"note":"","data":["801F92A5 0009"],"options":null},"Sound Select\\Music Mod":{"note":"","data":["8014A558 00??"],"options":{"High":"10","Medium":"0A","Off":"00"}},"Sound Select\\SFX Mod":{"note":"","data":["8014A559 00??"],"options":{"High":"10","Medium":"0A","Off":"00"}},"Sound Select\\Sound Mod":{"note":"","data":["8014A55A 00??"],"options":{"Mono":"01","Stereo":"00"}},"{Always First With 1 Lap to Race}":{"note":"","data":["800F7A31 0003"],"options":null},"{Unlocked All Stages}":{"note":"","data":["801672EB 000F"],"options":null},"{Weapon Select}":{"note":"","data":["801F92A1 00??"],"options":{"100 Ton Weight":"0E","Blue Lazer Cloud":"10","Bolt Launcher":"0F","Cannon":"08","Crafy Mine":"0B","Freeze Bombs":"09","Hypno Spinning Birds":"0D","Invincible":"02","Iron Beam Drop":"07","Lightening Cloud Attack":"0A","Nothing":"00","Red Spinning Fish?":"03","Rocket Launcher (Hangs?)":"0C","Smoke Bomb":"05","Turbo Boost":"01","Tyre Buster Tacks":"06","Wind Attack":"04"}}},"277B129D-DD3879FF-C:50":{"Earn Spirits Faster":{"note":"","data":["8007C25D 0000"],"options":null},"Have All Elements":{"note":"","data":["8107C24C 3232","8107C24E 3232"],"options":null},"Makes your HP 999-999":{"note":"","data":["8107C22C 03E7","8107C22E 03E7"],"options":null},"Makes your MP 999-999":{"note":"","data":["8107C230 03E7","8107C232 03E7"],"options":null},"No Random Battles":{"note":"","data":["8108CD1C 0000","8108CD1E 0000"],"options":null},"Set Agility to 999-999":{"note":"","data":["8107C234 03E7"],"options":null},"Set Defence to 999-999":{"note":"","data":["8107C236 03E7"],"options":null}},"27A3831D-B505A533-C:45":{"Always Have Wallet Size":{"note":"","data":["801189DA 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C681D 0010","81119C9E 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["80119821 00FF","80119C97 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,\u0026 then press reset (F1) you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D011BB71 0000","80119D4B 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["8002397C 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801189BE 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801189BF 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801189C0 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801189C1 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1A68 0005","801EE508 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801189DA 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801189DB 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801189D9 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189D4 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189DC 30FF","811189DE FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801189B0 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801189B6 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801189BC 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["801189B4 0009"],"options":null},"Have\\Bombs":{"note":"","data":["801189AE 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["801189B8 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["801189AD 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["801189AC 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["801189AF 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["801189B2 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["801189B5 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["801189B9 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["801189BA 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["801189B1 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["801189B7 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["801189BD 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["801189BB 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["801189B3 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["801189C7 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["801189E0 0007","801189E1 0007","801189E2 0007","801189E3 0007","801189E4 0007","801189E5 0007","801189E6 0007","801189E7 0007","801189E8 0007","801189E9 0007","801189EA 0007","801189F7 0009","801189F8 0009","801189F9 0009","801189FA 0009","801189FB 0009","80118A01 0009","80118A04 0009","801189FF 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801189CC 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["801189C6 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801189C5 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801189CA 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801189C4 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118968 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118971 0008","80118972 0001","80118974 0001","8011896B 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801189D2 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["81119D04 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["80119D0D 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D011BB11 0020","811D93D0 40CB","D011BB11 0000","811D9BF2 000D","801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119D41 00??"],"options":{"English":"00","French":"02","German":"01"}},"Level Select":{"note":"","data":["D01C6E35 0000","8111893A ????"],"options":{"?":"006C","Below The Phantom Gannon Boss":"000C","Dodongo's Cavern":"0004","Gerudo Training Ground":"0008","Inside Jabu-Jabu's Belly":"0027","Inside the Deku Tree":"0000","Lakeside Laboratory":"0042","Royal Family's Tomb":"002C","Shoadow Temple":"0036","Temple Of Time":"0052","Water Temple":"0010"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["80118A07 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["80118A09 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["81118966 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["81119D00 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L\\For Infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D011BB11 0020","811D9BF2 000D"],"options":null},"Press L\\To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D011BB11 0020","811D93D0 40CB"],"options":null},"Time of Day Modifier":{"note":"","data":["81118944 ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["801189C2 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["801189C3 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["80118976 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119B5A 0000","81119B5C 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"27C425D0-8C2D99C1-C:50":{"Access All Boards \u0026 Characters":{"note":"","data":["80050071 000C"],"options":null},"All Street Work Levels Unlocked":{"note":"","data":["50007801 0000","80050120 00??"],"options":{"Courses unlocked":"01","Courses unlocked with A rank":"05","Courses unlocked with B rank":"04","Courses unlocked with C rank":"03","Courses unlocked with S rank":"06"}},"Class Score Select":{"note":"","data":["8016609E 00??"],"options":{"Class A":"64","Class B":"40","Class C":"20","Class S":"FF"}},"Coin Perfect Select":{"note":"this is for Coin Mode to get Perfect Coin Collection Score straight away when you enter the level","data":["801660B3 00??"],"options":{"Giant House Level 1":"6E","Giant House Level 2":"77","Giant House Level 3":"72","Green Park Level 1":"14","Green park Level 2":"1A","Green park Level 3":"2B","Lost Forest Level 1":"4A","Lost Forest Level 2":"59","Lost Forest Level 3":"80","Snow Festival 64 Levels 1 2 \u0026 3":"7D","Sunset Island Level 1":"6F","Sunset Island Level 2":"74","Sunset Island Level 3":"81"}},"Infinite Time\\Attack Time Time 000000":{"note":"","data":["8110FA0A 0000"],"options":null},"Infinite Time\\Street Work \u0026 Coin":{"note":"","data":["8010FA09 0028"],"options":null},"Infinite Time\\Time Attack":{"note":"","data":["8010FA0B 0000"],"options":null},"Infinite Turbo\\Player 1":{"note":"","data":["80166019 0009"],"options":null},"Infinite Turbo\\Player2":{"note":"","data":["80167991 0009"],"options":null},"Maxed Out Turbo Bar":{"note":"","data":["811656E8 429F","80166017 0051"],"options":null},"Options\\Camera Type Modifier":{"note":"","data":["81050056 00??"],"options":{"Roll Off Far":"05","Roll Off Mid":"04","Roll Off Near":"03","Roll On Far":"02","Roll On Mid":"01","Roll On Near":"00"}},"Options\\DJ Function Modifier":{"note":"","data":["8105005C 00??"],"options":{"DJ Function Off":"00","DJ Function On":"01"}},"Options\\Music Modifier":{"note":"","data":["80050059 00??"],"options":{"BGM Off":"00","BGM On":"FF"}},"Options\\Sound Effects Modifier":{"note":"","data":["8105005A 00??"],"options":{"SE Off":"00","SE On":"FF"}}},"27C985A8-ED7CE5C6-C:00":{"Buster Parts Slot Select\\Slot 01":{"note":"","data":["8020B293 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 02":{"note":"","data":["8020B294 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 03":{"note":"","data":["8020B295 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 04":{"note":"","data":["8020B296 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 05":{"note":"","data":["8020B297 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 06":{"note":"","data":["8020B298 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 07":{"note":"","data":["8020B299 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 08":{"note":"","data":["8020B29A 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 09":{"note":"","data":["8020B29B 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 10":{"note":"","data":["8020B29C 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 11":{"note":"","data":["8020B29D 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 12":{"note":"","data":["8020B29E 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 13":{"note":"","data":["8020B29F 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 14":{"note":"","data":["8020B2A0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 15":{"note":"","data":["8020B2A1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 16":{"note":"","data":["8020B2A2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 17":{"note":"","data":["8020B2A3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 18":{"note":"","data":["8020B2A4 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 19":{"note":"","data":["8020B2A5 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 20":{"note":"","data":["8020B2A6 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 21":{"note":"","data":["8020B2A7 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 22":{"note":"","data":["8020B2A8 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 23":{"note":"","data":["8020B2A9 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 24":{"note":"","data":["8020B2AA 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 25":{"note":"","data":["8020B2AB 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 26":{"note":"","data":["8020B2AC 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 27":{"note":"","data":["8020B2AD 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 28":{"note":"","data":["8020B2AE 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 29":{"note":"","data":["8020B2AF 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 30":{"note":"","data":["8020B2B0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 31":{"note":"","data":["8020B2B1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 32":{"note":"","data":["8020B2B2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 33":{"note":"","data":["8020B2B3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 01":{"note":"","data":["8020B290 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 02":{"note":"","data":["8020B291 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 03":{"note":"","data":["8020B292 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Freeze Timer at 00:00":{"note":"","data":["811C0E3C 0000","811C0E3E 0000"],"options":null},"Have All\\Normal Items":{"note":"","data":["8120BAE0 FFFF","8120BAE2 FFFF","8120BAE4 FFFF","8120BAE6 FFFF"],"options":null},"Have All\\Special Items":{"note":"","data":["8120BADC FFFF","8120BADE FFFF"],"options":null},"Have All\\Special Weapons":{"note":"These are Equiped With Roll","data":["8120BAD0 FFFF"],"options":null},"Infinite\\Ammo":{"note":"","data":["8120B34A 0080","8120B352 0010","8120B35A 0708","8120B362 0018","8120B36A 0010","8120B372 0708","8120B37A 0020","8120B382 0020","8120B38A 0020","8120B392 0018","8120B39A 012C","8120B3A2 0258"],"options":null},"Infinite\\Health":{"note":"","data":["8120AEAE 0050"],"options":null},"Infinite\\Max Zenny":{"note":"","data":["811C0E4C 0098","811C0E4E 967F"],"options":null},"Rapid Fire":{"note":"","data":["8020B343 0002"],"options":null}},"2829657E-A0621877-C:45":{"Board Select":{"note":"","data":["800ED5C3 00??"],"options":{"Bowser's Magma Mountain":"06","DK's Jungle Adventure":"00","Eternal Star":"07","Explaination Map":"08","Luigi's Engine Room":"04","Mario's Rainbow Castle":"05","Mini Game Stadium":"09","Peach's Birthday Cake":"01","Wario's Battle Canyon":"03","Yoshi's Tropical Island":"02"}},"Lower Left Character\\Coin Options":{"note":"","data":["800F3318 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D635B 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800F331C 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["800F3348 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D639F 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800F334C 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Mini Game Island\\99 Coins":{"note":"","data":["800F37C4 0063"],"options":null},"Mini Game Island\\Always Clear Level":{"note":"","data":["800F32BB 0063"],"options":null},"Mini Game Island\\Press GS For 99 Lives":{"note":"","data":["880F37BB 0063"],"options":null},"Mini Game Island\\World Level Select":{"note":"Select where you want to go then Enable the cheat. as soon as you enter turn the cheat back off so you can move on to the next level and not the same place.","data":["810F32C4 ????"],"options":{"1-1 Coin Block Blitz":"0001","1-2 Coin Block Bash":"0002","1-3 Coin Shower Flower":"0003","1-4 Paddle Battle":"0004","2-1 Memory Match":"0006","2-2 Ground Pound":"0007","2-3 Limbo Dance":"0008","2-4 Magical Mushroom":"0009","2-5 Piranha's Pursuit":"000A","3-1 Crazy Cutter":"0018","3-2 Buried Treasure":"0019","3-3 Desrt Dash":"001A","3-4 Tug O' War":"001B","3-5 Teetering Towers":"001C","9-1 Hammer Drop":"004A","9-2 Slot Car Derby":"004B","9-3 Shell Game":"004C","9-4 Knock Block Tower":"004D","9-5 Platform Peril":"004E","Goal Space - Final Goal":"004F","Save and Return Space 1":"0005","Save and Return Space 2":"001D","Save and Return Space 3":"0029","Save and Return Space 4":"0049","Start Save and Return Space":"0000","World 4-1 to 4-3 - Entrance":"001E","World 4-4 Entrance":"0028","World 6-1 to 6-6 Castle Entrance":"002A","World 8-6 to 8-1 Castle Entrance 2":"0048"}},"Mini Game\\Max 99 Coins":{"note":"","data":["800F3770 0063"],"options":null},"Mini Game\\Unlimited 99 lives":{"note":"","data":["800F3767 0063"],"options":null},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["800F32B8 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D62D3 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800F32BC 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["800F32E8 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D6317 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800F32EC 00??"],"options":{"0 Stars":"00","99 Stars":"64"}}},"2857674D-CC4337DA-C:45":{"Brightness Modifier":{"note":"","data":["810B96EC ????"],"options":{"Very Dark":"8000","Very Well Lit Up":"7FFF"}},"Ignatius\\Infinite Health\\[Level 01]Chelsea":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802EC6E6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 02]Spitafields":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["803215FE 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 03]Thames Tunnel":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031AB6E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 04]Sewer Snake":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80255E46 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 05]India Docks":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80321546 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 06]Highgate Cemetery":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031B2E6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 07]Hampstead Heath":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["803218B6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 08]Queenhite Docks":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80320C1E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 09]City":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80328256 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 10]Smithfield":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8030B05E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 11]Snowman":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80251496 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 12]Regent's":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80315326 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 13]London Zoo":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031E00E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 14]St. Marilebone":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031CD4E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 15]Bloomsbury":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8032C4F6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 16]Pimlico":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031F9CE 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 17]Jose Manuel":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8025F196 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 18]Westminister":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802F4ECE 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 19]Westminister II":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802F5DE6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 20]The Roofs":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802848FE 0010"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000D02 0000","800A4BAF 0009"],"options":null},"Infinite\\Berzerkers":{"note":"","data":["810A4BBE 0009"],"options":null},"Infinite\\Chaos":{"note":"","data":["810A4BC4 0009"],"options":null},"Infinite\\Dynamite":{"note":"","data":["810A4BB6 0009"],"options":null},"Infinite\\Fire Bombs":{"note":"","data":["810A4BBA 0009"],"options":null},"Infinite\\Flash":{"note":"","data":["810A4BB8 0009"],"options":null},"Infinite\\Freeze Spell":{"note":"","data":["810A4BB4 0009"],"options":null},"Infinite\\Gun":{"note":"","data":["810A4BC6 0009"],"options":null},"Infinite\\Healing":{"note":"","data":["810A4BC2 0009"],"options":null},"Infinite\\Lives":{"note":"","data":["800A4B53 0009"],"options":null},"Infinite\\Multi-Gun":{"note":"","data":["810A4BBC 0009"],"options":null},"Infinite\\Proximity Mines":{"note":"","data":["810A4BB0 0009"],"options":null},"Infinite\\Repulsive Smoke":{"note":"","data":["810A4BB2 0009"],"options":null},"Infinite\\Spider Cards":{"note":"","data":["810A4BAE 0009"],"options":null},"Infinite\\Super Healing":{"note":"","data":["810A4BC0 0009"],"options":null},"Level Select":{"note":"","data":["D00978B1 0000","810978B0 00??"],"options":{"Bloomsbury":"0E","Chelsea":"00","City":"08","Hampstead Heath":"06","Highgate Cemetery":"05","India Docks":"04","Jose Manuel":"10","London Zoo":"0C","Map":"14","Pimlico":"0F","Queenhite Docks":"07","Regent's":"0B","Sewer Snake":"03","Smithfield":"09","Snowman":"0A","Spitafields":"01","St. Marilebone":"0D","Thames Tunnel":"02","The Roofs":"13","Westminister":"11","Westminister II":"12"}},"Nadia\\Infinite Health\\[Level 01]Chelsea":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802EB6D6 000C"],"options":null},"Nadia\\Infinite Health\\[Level 02]Spitafield":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80320116 000C"],"options":null},"Nadia\\Infinite Health\\[Level 03]Thames Tunnel":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80319AC6 000C"],"options":null},"Nadia\\Infinite Health\\[Level 04]Sewer Snake":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80254926 000C"],"options":null},"Nadia\\Infinite Health\\[Level 05]India Docks":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["803202CE 000C"],"options":null},"Nadia\\Infinite Health\\[Level 06]Highgate Cemetary":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031A58E 000C"],"options":null},"Nadia\\Infinite Health\\[Level 07]Hampstead Heath":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["803203D6 000C"],"options":null},"Nadia\\Infinite Health\\[Level 08]Queenhite Dock's":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031FB7E 000C"],"options":null},"Nadia\\Infinite Health\\[Level 09]City":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80326A36 000C"],"options":null},"Nadia\\Infinite Health\\[Level 10]Smithfield":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8030A0CE 000C"],"options":null},"Nadia\\Infinite Health\\[Level 11]Snowman":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80250036 000C"],"options":null},"Nadia\\Infinite Health\\[Level 12]Regent's Canal":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80313E36 000C"],"options":null},"Nadia\\Infinite Health\\[Level 13]London Zoo":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031CB66 000C"],"options":null},"Nadia\\Infinite Health\\[Level 14]St. Marilebone":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031B686 000C"],"options":null},"Nadia\\Infinite Health\\[Level 15]Bloomsbury":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8032B256 000C"],"options":null},"Nadia\\Infinite Health\\[Level 16]Pimlico":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031E4B6 000C"],"options":null},"Nadia\\Infinite Health\\[Level 17]Jose Manuel":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8025DA0E 000C"],"options":null},"Nadia\\Infinite Health\\[Level 18]Westminister":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802F360E 000C"],"options":null},"Nadia\\Infinite Health\\[Level 19]Westminister II":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802F4C76 000C"],"options":null},"Nadia\\Infinite Health\\[Level 20]The Roofs":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80282DB6 000C"],"options":null}},"28784622-FFB22985-C:45":{"1 Down Per Possession":{"note":"","data":["800785D2 0004"],"options":null},"Always 1st Down":{"note":"","data":["800785D2 0001"],"options":null},"Infinite Player Creation Pts":{"note":"","data":["8107A0F2 00C8"],"options":null}},"28D5562D-E4D5AE50-C:4A":{"Presss F9 to Refresh Timer to 80":{"note":"When time is running low, just press F9 to refresh the timer back to 80.","data":["890760CA 0400"],"options":null},"Silence Shouting Commentator":{"note":"This shuts off the Shouting Commentary, giving you the much much needed silence.","data":["80076171 0001"],"options":null}},"2952369C-B6E4C3A8-C:50":{"Infinite Health Stadium \u0026 Gym Leader Castle":{"note":"","data":["801DD22D 0030"],"options":null},"Mini Games\\Player 1\\Clear Cut Challenge gets perfect score":{"note":"","data":["801744C3 0063"],"options":null},"Mini Games\\Player 1\\Delibird Delivery Perfect Score":{"note":"","data":["801AC2CC 0063"],"options":null},"Mini Games\\Player 1\\Egg Emergency perfect score":{"note":"","data":["80191C3F 0064"],"options":null},"Mini Games\\Player 1\\Furret Frolic Perfect Score":{"note":"","data":["801E9623 0063"],"options":null},"Mini Games\\Player 1\\Gutsy Golbat has 99 Hearts":{"note":"","data":["D017711F 0001","8017711F 0063"],"options":null},"Mini Games\\Player 1\\Roll Out Rampage Always in 1st Place":{"note":"","data":["80103179 0001"],"options":null},"Mini Games\\Player 1\\Streaming Stampede Perfect Score":{"note":"","data":["8018138B 0063"],"options":null},"Mini Games\\Player 1\\Topsy Turvy":{"note":"Immediatly wins","data":["D01769E7 0001","801769E7 0005"],"options":null},"Mini Games\\Player 2\\Gutsy Golbat has 99 hearts":{"note":"","data":["D017714B 0001","8017714B 0063"],"options":null},"Mini Games\\Player 3\\Gutsy Golbat has 99 hearts":{"note":"","data":["D0177177 0001","80177177 0063"],"options":null},"Mini Games\\Player 4\\Gutsy Golbat has 99 hearts":{"note":"","data":["D01771A3 0001","801771A3 0063"],"options":null}},"29A045CE-ABA9060E-C:46":{"Always 1st":{"note":"","data":["812C56A6 0001"],"options":null},"Have All\\Races":{"note":"","data":["50000702 0000","812B66A4 0101"],"options":null},"Have All\\Ships":{"note":"","data":["50000702 0000","812B66B2 0101"],"options":null},"Infinite\\Boosts\\Player 1":{"note":"","data":["812C56AC 4190"],"options":null},"Infinite\\Boosts\\Player 2":{"note":"","data":["812C59DC 4190"],"options":null},"Infinite\\Time":{"note":"","data":["812B52A0 42C8"],"options":null}},"29CE7692-71C58579-C:50":{"Activate Cheat Menu":{"note":"","data":["80053F78 0001"],"options":null},"Away Team Score":{"note":"","data":["8012BC2D 00??"],"options":{"Max Score":"FF","No Score":"00"}},"Home Team Scores":{"note":"","data":["8012BC2C 00??"],"options":{"Max Score":"FF","No Score":"00"}}},"2A49018D-D0034A02-C:50":{"Access All Tracks":{"note":"","data":["810B88DA 0001"],"options":null},"Always 1st":{"note":"","data":["800BB1F7 0001"],"options":null},"Always Turbo Level 1":{"note":"In Easy Mode","data":["810B4070 3100","810BBD30 0000"],"options":null},"Always Win Head 2 Head":{"note":"","data":["810BD590 0008"],"options":null},"Infinite 99 Lives":{"note":"","data":["800BB1C2 0064"],"options":null},"One Lap To Race":{"note":"","data":["810B88DE 0101"],"options":null}},"2A6B1820-6ABCF466-C:45":{"Activate\\Auto Abort Disable":{"note":"","data":["800F4078 0001"],"options":null},"Activate\\Cones to Mines":{"note":"","data":["800F3F88 0001"],"options":null},"Activate\\Disable Car 2 Car Control":{"note":"","data":["800F4050 0001"],"options":null},"Activate\\Resurrect in Place":{"note":"","data":["800F4080 0001"],"options":null},"Activate\\Stop Timer":{"note":"","data":["800F4090 0001"],"options":null},"Activate\\Upside Down Mode":{"note":"","data":["800F4061 0001"],"options":null},"Always Place 1st":{"note":"","data":["80101339 0000"],"options":null},"Car":{"note":"","data":["D00F40A5 0020","800D9EC1 00??","800D9F64 00??","800DA078 00??","800DA321 00??"],"options":{"F1 Car":"0A","Hot Rod":"09","Taxi":"08"}},"Car Type":{"note":"It gets you from 0-150 in the the time it takes the F1 racer to. Don't use the F1 racer and only hold until you reach 150 or the game will freeze.","data":["800F40B1 00??"],"options":{"Fat Car":"02","Flat Car":"01","Giant Car":"03","Invisible Car":"0A","Invisible Car (Can See Wheels)":"CD","Normal Car":"00","Paper-Thin Cars":"66","Screen-Talled Cars":"6E","Super-Sky Car":"BB","Super-Sky Car #2":"DD","Super-Tiny Car":"FF","Super-Tiny Car #2":"44"}},"Edge Boost":{"note":"by pressing R you will get a small speed boost that pushes you ahead.","data":["D00F40A5 0010","81101331 FFFF"],"options":null},"Gravity":{"note":"","data":["800F3D91 00??"],"options":{"1 Weight":"02","2 Weights":"03","A Balloon \u0026 2 Weights":"00","Normal":"01"}},"Have Two Special Cars":{"note":"You receive the Hotrod and Taxi with this code, but you may have to go through the cars from the \"Beginning\" past the \"Extreme\" for them to appear.","data":["810CAC82 FFFF","810CAC98 FFFF","810CACAE FFFF","810CACC4 FFFF","810CACDA FFFF","810CACF0 FFFF"],"options":null},"Press GS For Track Select":{"note":"With this code, press GS when on the track selction screen and press A to select that track!","data":["88100050 00??"],"options":{"Track 1":"00","Track 2":"01","Track 3":"02","Track 4":"03","Track 5":"04","Track 6":"05","Track 7":"06"}}},"2AF9B65C-85E2A2D7-C:45":{"Always Place 1st":{"note":"","data":["800A960F 0000"],"options":null},"Infinite Time":{"note":"","data":["80094E97 0064"],"options":null},"Low Course Time":{"note":"","data":["8009483B 0000"],"options":null}},"2B38AEC0-6350B810-C:46":{"Always Have\\50 pieces of corn":{"note":"","data":["801E27C1 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E27B0 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["811E27AE 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E27C2 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E27B5 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E27C0 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D0090001 0010","811E2726 1000","D0090001 0010","811E2736 1000"],"options":null},"No Music":{"note":"","data":["801DD966 0000"],"options":null},"Start with Berry Weapon":{"note":"","data":["801E27B7 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Subtitles On":{"note":"","data":["801DDBDB 00??"],"options":{"Off":"00","On":"01"}},"Unlock All Levels":{"note":"","data":["81099E90 000F"],"options":null}},"2B4F4EFB-43C511FE-C:50":{"Always Have Weapon Options\\Player 1":{"note":"","data":["810E2DD4 00??"],"options":{"Anvil":"79","Bee hive":"6D","Bird bath":"04","Blue Swordfish":"63","Bouy":"29","Broom":"08","Chair":"0B","Champagne":"0C","Chicken":"0E","Club":"03","Crate":"0F","Deck chair":"14","Egg":"16","Fish":"1A","Frying Pan":"1E","Gardeners Fork":"1D","Mallet":"2A","Milk Bottle":"2D","Mooses head":"78","NCube knife":"09","NCube missiles":"0A","Plank":"39","Rolling Pin":"41","Saucepan":"64","Spade":"46","Spanner":"4E","Stick":"55","Stool":"6B","Tennis Racket":"48","Watermelon":"2B","Wooden Chair":"1F","Wooden Spoon":"65"}},"Always Have Weapon Options\\Player 2":{"note":"","data":["810E30AC 00??"],"options":{"Anvil":"79","Bee hive":"6D","Bird bath":"04","Blue Swordfish":"63","Bouy":"29","Broom":"08","Chair":"0B","Champagne":"0C","Chicken":"0E","Club":"03","Crate":"0F","Deck chair":"14","Egg":"16","Fish":"1A","Frying Pan":"1E","Gardeners Fork":"1D","Mallet":"2A","Milk Bottle":"2D","Mooses head":"78","NCube knife":"09","NCube missiles":"0A","Plank":"39","Rolling Pin":"41","Saucepan":"64","Spade":"46","Spanner":"4E","Stick":"55","Stool":"6B","Tennis Racket":"48","Watermelon":"2B","Wooden Chair":"1F","Wooden Spoon":"65"}},"Infinite Health":{"note":"","data":["800E2BDD 00C8"],"options":null},"Infinite time":{"note":"","data":["800FF18E 00F0"],"options":null},"No music":{"note":"","data":["800B7718 0000"],"options":null},"One Hit To Kill\\Player 1":{"note":"This Will Give Player 1 A One Hit Kill Over Player 2","data":["800E2EB4 0080"],"options":null},"One Hit To Kill\\Player 2":{"note":"This Will Give Player 2 A One Hit Kill Over Player 1","data":["800E2BDC 0080"],"options":null},"Open All Versus Arenas":{"note":"","data":["800E4934 00FF","800E4935 00FF"],"options":null},"[Unlock All Characters]":{"note":"This Gives you all Characters to choose from plus fixes A freeze on the Charecter Select Menu by having it on","data":["800E4933 00FF"],"options":null}},"2B6FA7C0-09A71225-C:45":{"Aquadome Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE013 0000"],"options":null},"Aquadome Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F14A3 0000"],"options":null},"Aquadome Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE012 0200"],"options":null},"Aquadome Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F14B2 0200"],"options":null},"Aquadome Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE00B 00AA"],"options":null},"Aquadome Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F14AB 00AA"],"options":null},"Aquadome Stage\\No Energy\\Player 1":{"note":"","data":["801EE00B 0000"],"options":null},"Aquadome Stage\\No Energy\\Player 2":{"note":"","data":["801F14AB 0000"],"options":null},"Backwash Bay Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE763 0000"],"options":null},"Backwash Bay Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1C03 0000"],"options":null},"Backwash Bay Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE772 0200"],"options":null},"Backwash Bay Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1C12 0200"],"options":null},"Backwash Bay Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE76B 00AA"],"options":null},"Backwash Bay Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1C0B 00AA"],"options":null},"Backwash Bay Stage\\No Energy\\Player 1":{"note":"","data":["801EE76B 0000"],"options":null},"Backwash Bay Stage\\No Energy\\Player 2":{"note":"","data":["801F1C0B 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EF1B3 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F2653 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EF1C2 0200"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F2662 0200"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EF1BB 00AA"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F265B 00AA"],"options":null},"Boogerhenge, Tureen Toilet Stage\\No Energy\\Player 1":{"note":"","data":["801EF1BB 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\No Energy\\Player 2":{"note":"","data":["801F265B 0000"],"options":null},"Candy Factory Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE8E3 0000"],"options":null},"Candy Factory Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1D83 0000"],"options":null},"Candy Factory Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE8F2 0200"],"options":null},"Candy Factory Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1D92 0200"],"options":null},"Candy Factory Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE8EB 00AA"],"options":null},"Candy Factory Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1D8B 00AA"],"options":null},"Candy Factory Stage\\No Energy\\Player 1":{"note":"","data":["801EE8EB 0000"],"options":null},"Candy Factory Stage\\No Energy\\Player 2":{"note":"","data":["801F1D8B 0000"],"options":null},"Clayribbean Cruise Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE6D3 0000"],"options":null},"Clayribbean Cruise Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1B73 0000"],"options":null},"Clayribbean Cruise Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE6E2 0200"],"options":null},"Clayribbean Cruise Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1B82 0200"],"options":null},"Clayribbean Cruise Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE6DB 00AA"],"options":null},"Clayribbean Cruise Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1B7B 00AA"],"options":null},"Clayribbean Cruise Stage\\No Energy\\Player 1":{"note":"","data":["801EE6DB 0000"],"options":null},"Clayribbean Cruise Stage\\No Energy\\Player 2":{"note":"","data":["801F1B7B 0000"],"options":null},"Extra Characters and Secret Options":{"note":"","data":["8019ED41 000F"],"options":null},"Freezing Fortress Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE573 0000"],"options":null},"Freezing Fortress Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1A13 0000"],"options":null},"Freezing Fortress Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE582 0200"],"options":null},"Freezing Fortress Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1A22 0200"],"options":null},"Freezing Fortress Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE57B 00AA"],"options":null},"Freezing Fortress Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1A1B 00AA"],"options":null},"Freezing Fortress Stage\\No Energy\\Player 1":{"note":"","data":["801EE57B 0000"],"options":null},"Freezing Fortress Stage\\No Energy\\Player 2":{"note":"","data":["801F1A1B 0000"],"options":null},"Ghastly Graveyard Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE803 0000"],"options":null},"Ghastly Graveyard Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1CA3 0000"],"options":null},"Ghastly Graveyard Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE812 0200"],"options":null},"Ghastly Graveyard Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1CB2 0200"],"options":null},"Ghastly Graveyard Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE80B 00AA"],"options":null},"Ghastly Graveyard Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1CAB 00AA"],"options":null},"Ghastly Graveyard Stage\\No Energy\\Player 1":{"note":"","data":["801EE80B 0000"],"options":null},"Ghastly Graveyard Stage\\No Energy\\Player 2":{"note":"","data":["801F1CAB 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE623 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1AC3 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE632 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1AD2 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE62B 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1ACB 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\No Energy\\Player 1":{"note":"","data":["801EE62B 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\No Energy\\Player 2":{"note":"","data":["801F1ACB 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EFD93 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F3233 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EFDA2 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F3242 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EFD9B 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F323B 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\No Energy\\Player 1":{"note":"","data":["801EFD9B 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\No Energy\\Player 2":{"note":"","data":["801F323B 0000"],"options":null},"Kooky Courtyard Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE9E3 0000"],"options":null},"Kooky Courtyard Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1E83 0000"],"options":null},"Kooky Courtyard Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE9F2 0200"],"options":null},"Kooky Courtyard Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1E92 0200"],"options":null},"Kooky Courtyard Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE9EB 00AA"],"options":null},"Kooky Courtyard Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1E8B 00AA"],"options":null},"Kooky Courtyard Stage\\No Energy\\Player 1":{"note":"","data":["801EE9EB 0000"],"options":null},"Kooky Courtyard Stage\\No Energy\\Player 2":{"note":"","data":["801F1E8B 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Can't be Stunned\\Player 1":{"note":"","data":["801EE513 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Can't be Stunned\\Player 2":{"note":"","data":["801F19B3 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Full Super Bar\\Player 1":{"note":"","data":["811EE522 0200"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Full Super Bar\\Player 2":{"note":"","data":["811F19C2 0200"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Infinite Energy\\Player 1":{"note":"","data":["801EE51B 00AA"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Infinite Energy\\Player 2":{"note":"","data":["801F19BB 00AA"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\No Energy\\Player 1":{"note":"","data":["801EE51B 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\No Energy\\Player 2":{"note":"","data":["801F19BB 0000"],"options":null},"Play As\\Player1":{"note":"","data":["8019ED2F 00??"],"options":{"Bad Mr. Frosty":"00","Blob":"01","Bonker":"02","Boogerman":"03","Dr. Kiln":"04","Earthworm Jim":"05","Houngan":"08","Icky Bod Clay":"09","Kung Pow":"0A","Sumo Santa":"0D","T-Hoppy":"0F","Taffy":"0E"}},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Can't be Stunned\\Player 1":{"note":"","data":["801EDCE3 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Can't be Stunned\\Player 2":{"note":"","data":["801F1183 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Full Super Bar\\Player 1":{"note":"","data":["811EDCF2 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Full Super Bar\\Player 2":{"note":"","data":["811F1192 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Infinite Energy\\Player 1":{"note":"","data":["801EDCEB 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Infinite Energy\\Player 2":{"note":"","data":["801F118B 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\No Energy\\Player 1":{"note":"","data":["801EDCEB 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\No Energy\\Player 2":{"note":"","data":["801F118B 0000"],"options":null},"Rubbage Reef Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE5F3 0000"],"options":null},"Rubbage Reef Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1A93 0000"],"options":null},"Rubbage Reef Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE602 0200"],"options":null},"Rubbage Reef Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1AA2 0200"],"options":null},"Rubbage Reef Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE5FB 00AA"],"options":null},"Rubbage Reef Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1A9B 00AA"],"options":null},"Rubbage Reef Stage\\No Energy\\Player 1":{"note":"","data":["801EE5FB 0000"],"options":null},"Rubbage Reef Stage\\No Energy\\Player 2":{"note":"","data":["801F1A9B 0000"],"options":null},"Rubbage Room Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F0823 0000"],"options":null},"Rubbage Room Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F3CC3 0000"],"options":null},"Rubbage Room Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F0832 0200"],"options":null},"Rubbage Room Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F3CD2 0200"],"options":null},"Rubbage Room Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F082B 00AA"],"options":null},"Rubbage Room Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F3CCB 00AA"],"options":null},"Rubbage Room Stage\\No Energy\\Player 1":{"note":"","data":["801F082B 0000"],"options":null},"Rubbage Room Stage\\No Energy\\Player 2":{"note":"","data":["801F3CCB 0000"],"options":null},"Santa's Toy Factory Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EEE13 0000"],"options":null},"Santa's Toy Factory Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F22B3 0000"],"options":null},"Santa's Toy Factory Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EEE22 0200"],"options":null},"Santa's Toy Factory Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F22C2 0200"],"options":null},"Santa's Toy Factory Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EEE1B 00AA"],"options":null},"Santa's Toy Factory Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F22BB 00AA"],"options":null},"Santa's Toy Factory Stage\\No Energy\\Player 1":{"note":"","data":["801EEE1B 0000"],"options":null},"Santa's Toy Factory Stage\\No Energy\\Player 2":{"note":"","data":["801F22BB 0000"],"options":null},"Stage Select":{"note":"","data":["8019ED2B 00??"],"options":{"Aquadome":"19","Backwash Bay":"16","Boogerhenge":"15","Camp Claynaveral":"02","Candy Factory":"00","Claynaveral Hangar":"01","Clayribbean Cruise":"11","Fiery Furnace":"0F","Freezing Fortress":"08","Ghastly Graveyard":"05","Grotto Gulch":"0A","Happy Harry's Hut":"07","Kiln's Hideout":"0E","Kiln's Laboratory":"0D","Kooky Courtyard":"13","Mudville Mansion":"04","Outhouse":"03","Refuse Room":"09","Research Room":"10","Rubbage Reef":"0C","Rubbage Room":"0B","Santa's Toy Factory":"14","Santa's Workship":"12","Spooky Spire":"06","Tribal Tower":"18","Tureen Toilet":"17"}},"Tribal Tower Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EDD83 0000"],"options":null},"Tribal Tower Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1223 0000"],"options":null},"Tribal Tower Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EDD92 0200"],"options":null},"Tribal Tower Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1232 0200"],"options":null},"Tribal Tower Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EDD8B 00AA"],"options":null},"Tribal Tower Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F122B 00AA"],"options":null},"Tribal Tower Stage\\No Energy\\Player 1":{"note":"","data":["801EDD8B 0000"],"options":null},"Tribal Tower Stage\\No Energy\\Player 2":{"note":"","data":["801F122B 0000"],"options":null}},"2BC1FCF2-7B9A0DF4-C:58":{"All Items":{"note":"","data":["50002402 0202","810ED130 0001","50004601 0000","800ED1B1 0003"],"options":null},"Item Modifier Codes\\Position 01":{"note":"","data":["800ED130 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 02":{"note":"","data":["800ED131 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 03":{"note":"","data":["800ED132 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 04":{"note":"","data":["800ED133 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 05":{"note":"","data":["800ED134 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 06":{"note":"","data":["800ED135 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 07":{"note":"","data":["800ED136 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 08":{"note":"","data":["800ED137 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 09":{"note":"","data":["800ED138 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 10":{"note":"","data":["800ED139 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 11":{"note":"","data":["800ED13A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 12":{"note":"","data":["800ED13B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 13":{"note":"","data":["800ED13C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 14":{"note":"","data":["800ED13D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 15":{"note":"","data":["800ED13E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 16":{"note":"","data":["800ED13F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 17":{"note":"","data":["800ED140 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 18":{"note":"","data":["800ED141 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 19":{"note":"","data":["800ED142 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 20":{"note":"","data":["800ED143 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 21":{"note":"","data":["800ED144 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 22":{"note":"","data":["800ED145 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 23":{"note":"","data":["800ED146 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 24":{"note":"","data":["800ED147 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 25":{"note":"","data":["800ED148 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 26":{"note":"","data":["800ED149 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 27":{"note":"","data":["800ED14A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 28":{"note":"","data":["800ED14B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 29":{"note":"","data":["800ED14C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 30":{"note":"","data":["800ED14D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 31":{"note":"","data":["800ED14E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 32":{"note":"","data":["800ED14F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 33":{"note":"","data":["800ED150 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 34":{"note":"","data":["800ED151 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 35":{"note":"","data":["800ED152 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 36":{"note":"","data":["800ED153 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 37":{"note":"","data":["800ED154 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 38":{"note":"","data":["800ED155 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 39":{"note":"","data":["800ED156 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 40":{"note":"","data":["800ED157 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 41":{"note":"","data":["800ED158 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 42":{"note":"","data":["800ED159 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 43":{"note":"","data":["800ED15A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 44":{"note":"","data":["800ED15B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 45":{"note":"","data":["800ED15C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 46":{"note":"","data":["800ED15D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 47":{"note":"","data":["800ED15E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 48":{"note":"","data":["800ED15F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}}},"2BCCF9C4-403D9F6F-C:4A":{"Always 1st":{"note":"","data":["802133B6 0001"],"options":null},"Always Win Race Heats":{"note":"","data":["802133B6 0001","80377B60 0001","8021455F 0001","80381424 0001"],"options":null},"Class Select":{"note":"This code is useful because you can play Class AA without having to beat a level!","data":["80206857 00??"],"options":{"1 Play":"04","2 Play":"05","3 Play":"06","4 Play":"07","Class AA":"03","Class B":"01","Class C":"00"}},"Super Speed":{"note":"This is Turbo fast,So to slow it down a little more keep the B button pressed down","data":["81213568 4800"],"options":null}},"2C739EAC-9EF77726-C:50":{"Always Have\\BFG":{"note":"","data":["8006338B 0001"],"options":null},"Always Have\\Bio Suite":{"note":"","data":["80063333 00??"],"options":{"Off":"00","On":"FF"}},"Always Have\\Chain Gun":{"note":"","data":["8006337F 0001"],"options":null},"Always Have\\Chainsaw":{"note":"","data":["8006336B 0001"],"options":null},"Always Have\\Double Shotgun":{"note":"","data":["8006337B 0001"],"options":null},"Always Have\\Gun":{"note":"","data":["80063373 0001"],"options":null},"Always Have\\Have Laser Weapon":{"note":"","data":["8006338D 0001"],"options":null},"Always Have\\Have Rocket Launcher":{"note":"","data":["80063381 0001"],"options":null},"Always Have\\Missile Ammo":{"note":"","data":["8006339F 0064"],"options":null},"Always Have\\Missile Launcher":{"note":"","data":["80063383 0001"],"options":null},"Always Have\\Plasma Rifle":{"note":"","data":["80063387 0001"],"options":null},"Always Have\\Shotgun":{"note":"","data":["80063377 0001"],"options":null},"Enable Cheat Menu":{"note":"","data":["8005AA23 0001"],"options":null},"Have All\\Keys":{"note":"","data":["50000504 0000","810634DE FFFF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000A04 0000","8106350A 0001"],"options":null},"Infinite\\Ammo All Weapons":{"note":"","data":["50000404 0000","81063532 013C"],"options":null},"Infinite\\Armor":{"note":"","data":["800634BF 00FF"],"options":null},"Invincible":{"note":"","data":["8006355B 0002"],"options":null},"Invincible And Map Markers":{"note":"","data":["800633BB 0006"],"options":null},"Rapid Fire":{"note":"","data":["810633EA 0B94"],"options":null},"Turn Map Markers On":{"note":"","data":["800633BB 0004"],"options":null},"[Max Brightness]":{"note":"Enable this cheat on rom load to have Max Brightness (internal) and then put Jabo d3d8 on 160% Max for a extra brightness Boost.","data":["8005AA18 0064"],"options":null}},"2DC4FFCC-C8FF5A21-C:50":{"Have\\Max Gold":{"note":"","data":["50000401 0000","80277AA5 00FF"],"options":null},"Have\\Max Total XP":{"note":"","data":["50000401 0000","8027931D 00FF"],"options":null},"Have\\Max Total XP Remaning to Start":{"note":"This will give you 16777215 Total XP Remaning to start with and after your 1st batle will allow you to buy your Max Stats","data":["50000401 0000","80279321 00FF"],"options":null},"Infinite\\99 Health Potions":{"note":"Do Not put this cheat on until you have collected your 1st Health Potion from the 1st Cheat or you will not be able to get into the Sub menu and Continue the game.","data":["8027876B 0063"],"options":null},"Infinite\\Max Health":{"note":"","data":["80279308 001E"],"options":null}},"2E0E7749-B8B49D59-C:58":{"Access In-Game Cheat Menu":{"note":"","data":["8113568C FFFF","8113568E FFFF"],"options":null}},"2E359339-3FA5EDA6-C:50":{"Clear Mission Selector":{"note":"","data":["8112976C 00??"],"options":{"1":"01","2":"02","3":"03","4":"04","5":"05","6":"06","7":"07","8":"08"}},"Gun 4-Way Shot":{"note":"","data":["80129A13 0004"],"options":null},"Infinite Fuel":{"note":"","data":["81129A16 FFFF"],"options":null},"Infinite Shield":{"note":"","data":["811299B8 03E8"],"options":null},"Infinite Weapon\\1st Position":{"note":"","data":["8012972B 0063"],"options":null},"Infinite Weapon\\2nd Position":{"note":"","data":["8012972F 0063"],"options":null},"Infinite Weapon\\3rd Position":{"note":"","data":["80129733 0063"],"options":null},"Infinite Weapon\\4th Position":{"note":"","data":["80129737 0063"],"options":null},"Infinite Weapon\\5th Position":{"note":"","data":["8012973B 0063"],"options":null},"Max Score":{"note":"","data":["81129716 FFFF"],"options":null},"Opens All 5 Item Slots":{"note":"","data":["8012974B 0005"],"options":null},"Option On":{"note":"","data":["8112976A 0001"],"options":null},"Score Attack Mode":{"note":"","data":["81129762 0001"],"options":null},"Stage Select On":{"note":"","data":["81129766 0001"],"options":null},"Texture Mode":{"note":"","data":["81129774 0001"],"options":null},"Weapon Modifier\\1st Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["80129729 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\2nd Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["8012972D 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\3rd Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["801297E1 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\4th Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["801297E5 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\5th Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["801297E9 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\Gun Weapon":{"note":"","data":["80129A13 00??"],"options":{"2-Way Shot":"02","3-Way Shot":"03","4-Way Shot":"04","No Weapon":"00","Normal Shot":"01"}}},"2E955ECD-F3000884-C:45":{"Bowl A Perfect Game":{"note":"","data":["5000090C 0000","800AC9F0 000A","800ACA5E 000A"],"options":null}},"2F493DD0-2E64DFD9-C:45":{"Have\\All Guns In Chest":{"note":"","data":["50000E04 0100","810E8EF4 05FF"],"options":null},"Have\\All Main Items In Chest":{"note":"If you want items that are not listed in the Chest, then just use the Have Item On Slot Select code to have what you desire.","data":["810E8F2C 17FF","810E8F30 1EFF","810E8F34 1FFF","810E8F38 23FF","50000404 0100","810E8F3C 25FF","810E8F4C 2AFF","810E8F50 2BFF","50000304 0100","810E8F54 2EFF","50000F04 0100","810E8F60 32FF","810E8F9C 43FF","50000504 0100","810E8FA0 47FF","50000404 0100","810E8FB4 53FF","50000C04 0100","810E8FC4 58FF"],"options":null},"Have\\Fine Condition Always":{"note":"","data":["810E13E4 0000"],"options":null},"Have\\Item On Slot Select\\Slot 01":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EC8 00??","800E8EC9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 02":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ECC 00??","800E8ECD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 03":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED0 00??","800E8ED1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 04":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED4 00??","800E8ED5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 05":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED8 00??","800E8ED9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 06":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EDC 00??","800E8EDD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 07":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE0 00??","800E8EE1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 08":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE4 00??","800E8EE5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 09":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE8 00??","800E8EE9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 10":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EEC 00??","800E8EED 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Infinite\\Health":{"note":"","data":["810E1322 00C8"],"options":null},"Infinite\\Time":{"note":"","data":["800E8CBF 0010"],"options":null},"Play As":{"note":"This allows you to select what character you wish to play as. Just slect on load and select as normal at the menu and when in game you will be the character of your choice","data":["810E1138 ????"],"options":{"Ada (can crash the game)":"0E80","Cheryl":"0F80","Claire Original":"0380","Claire as Biker":"0980","Claire without jacket":"0780","Claires body Leons outfit":"0B80","Hunk (can crash the game)":"0C80","Leon Original":"0280","Leon Wounded":"0680","Leon as Biker":"0A80","Leon as Stars":"0880","To Fu":"0D80"}},"Play Extra Mission":{"note":"This allows you to select what extra mission you wish to play. Just slect on load and carry on as normal at the menu and when in game you will be the character of your choice Do not use at the same time as [Resident Evil 2 Mode]","data":["810E10EE 00??"],"options":{"The 4th Survior":"48","To-Fu":"49"}},"Quick Chest Access":{"note":"With this code, all you have to do to access the chest, is hold L and Press Start.","data":["D1014FA4 1020","8012BFA8 0001"],"options":null},"Quick Save Access":{"note":"(1 Anytime, anywhere, press Z and B at the same time. You'll get the standard typewriter text: \"It's an old typewriter. You can save your progress with this.\" Note that you must, of course, have an ink ribbon to save. 2) Choose \"Yes\" and you'll be able to save normally. Instead of the location name, your save file will say \"Scenario 1st\" or \"Scenario 2nd.\" 3) When you load your save file, you'll have to skip through the intro, but when the game loads up you'll be exactly where you saved!","data":["D1014FA4 6000","810E8928 8007","D1014FA4 6000","810E892A 4110"],"options":null},"[Biohazard 2 Mode]":{"note":"Note: With this enabled the game will become Bio Hazard 2, the Japanese version of Resident Evil 2! This means all text (except the text in files) is in Japanese, and all cinemas have Japanese subtitles. Note that the title screen will still say Resident Evil 2 Do not use at the same time as Play Extra Mission","data":["D10E10EE 00??","810E10EE 0000"],"options":{"Off":"00","On":"40"}},"[Saves Always 0]":{"note":"No matter how many saves you do ithis makes the game think you Have\\not saved.","data":["810E8B50 0000"],"options":null}},"2F57C9F7-F1E29CA6-C:4A":{"Have All Keys":{"note":"","data":["800C3177 0003"],"options":null},"Infinite 99 Credits":{"note":"","data":["800C30CB 0063"],"options":null},"Infinite Max Lives":{"note":"","data":["800B04D7 0004"],"options":null}},"2F7009DD-FC3BAC53-C:50":{"Diffuculty Modifier":{"note":"","data":["801195DF 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Gems":{"note":"","data":["80128F07 00FF"],"options":null},"Have All\\Level Keys":{"note":"","data":["50000604 0000","80128DE3 0007","80128DFB 001F","80128E1B 00FF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000B04 0000","80128DB7 0001","80128D33 0001"],"options":null},"Have Cheat Menu":{"note":"","data":["811195F0 FFFF","811195F2 FFFF"],"options":null},"Have\\Backpack":{"note":"","data":["80128CEB 0001","80128D2B 0001"],"options":null},"Infinite\\Air":{"note":"","data":["801290E0 0063","801E869A 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128D63 00FF","80128D73 00FF","80128D7F 00FF","50000504 0000","80128D83 00FF","80128F0B 00FF","80128F07 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128D96 5B23","80128DD7 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C1634 1E61","812A25A4 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["80128D7F 00FF"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114F8CA F803","81128D4E 0003","81128D52 0003","81128D56 0003","81128D5A 0003","81128D5E 0003","81128D62 0003","81128D66 0005"],"options":null}},"2F700DCD-176CC5C9-C:45":{"Diffuculty Modifier":{"note":"","data":["8011972F 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Level Keys":{"note":"","data":["50000604 0000","80128E83 0007","80128E9B 001F","80128EBB 00FF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000B04 0000","80128E47 0001","80128E73 0001"],"options":null},"Have\\Backpack":{"note":"","data":["80128E3B 0001","80128E7B 0001"],"options":null},"Have\\Cheat Menu":{"note":"","data":["81119690 FFFF","81119692 FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["81129180 AAE1","811E873A F1FF"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128E03 00FF","80128E13 00FF","80128E1F 00FF","50000504 0000","80128E23 00FF","80128FAB 00FF","80128FA7 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128E36 5B23","80128E77 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C16D4 1E61","812A2644 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["8005E7D9 0098","8105E7F0 2400","8005E7FD 0083"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114FA1A F803","81128E9E 0003","81128EA2 0003","81128EA6 0003","81128EAA 0003","81128EAE 0003","81128EB2 0003","81128EB6 0005"],"options":null}},"2F700DCD-176CC5C9-C:50":{"Diffuculty Modifier":{"note":"","data":["8011967F 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Gems":{"note":"","data":["80128FA7 00FF"],"options":null},"Have All\\Level Keys":{"note":"","data":["50000604 0000","80128E83 0007","80128E9B 001F","80128EBB 00FF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000B04 0000","80128E57 0001","80128DD3 0001"],"options":null},"Have Cheat Menu":{"note":"","data":["81119690 FFFF","81119692 FFFF"],"options":null},"Have\\Backpack":{"note":"","data":["80128D8B 0001","80128DCB 0001"],"options":null},"Infinite\\Air":{"note":"","data":["80129180 0063","801E873A 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128E03 00FF","80128E13 00FF","80128E1F 00FF","50000504 0000","80128E23 00FF","80128FAB 00FF","80128FA7 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128E36 5B23","80128E77 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C16D4 1E61","812A2644 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["80128E1F 00FF"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114F96A F803","81128DEE 0003","81128DF2 0003","81128DF6 0003","81128DFA 0003","81128DFE 0003","81128E02 0003","81128E06 0005"],"options":null}},"2F70F10D-5C4187FF-C:45":{"Diffuculty Modifier":{"note":"","data":["801195DF 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Level Keys":{"note":"","data":["50000604 0000","80128D33 0007","80128D4B 001F","80128D6B 00FF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000B04 0000","80128CF7 0001","80128D23 0001"],"options":null},"Have\\Backpack":{"note":"","data":["80128CEB 0001","80128D2B 0001"],"options":null},"Have\\Cheat Menu":{"note":"","data":["81119540 FFFF","81119542 FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["81129030 AAE1","811E85EA F1FF"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128CB3 00FF","80128CC3 00FF","80128CCF 00FF","50000504 0000","80128CD3 00FF","80128E5B 00FF","80128E57 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128CE6 5B23","80128D27 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C1584 1E61","812A24F4 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["8005E689 0098","8105E6A0 2400","8005E6AD 0083"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114F8CA F803","50000604 0000","81128D4E 0003","81128D66 0005"],"options":null}},"30C7AC50-7704072D-C:45":{"Access All\\Chapters, Scenes,\u0026 Multi-Player Characters":{"note":"","data":["50000401 0000","800E9D01 00FF"],"options":null},"Access All\\Characters \u0026 Weapons In Multi Race":{"note":"","data":["810E9D02 ??FF"],"options":{"All Characters \u0026 Baseball bat":"FF","All Characters \u0026 Bones":"F3","All Characters \u0026 Frying Pan":"FB"}},"Conkers Speed Select":{"note":"","data":["810CC318 ????"],"options":{"Fast Conker":"3FF0","Normal Conker":"3F80","Slow Conker":"3F00","Super Fast Conker":"4030"}},"Infinite\\Accuracy Count Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game","data":["800E0B67 0001"],"options":null},"Infinite\\Bags In Heist":{"note":"","data":["800E0BE4 00FF"],"options":null},"Infinite\\Bombs":{"note":"","data":["802055CA 0030"],"options":null},"Infinite\\Head Shot Count Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game,Once you pick up a Gun a shoot once, you will 100%.","data":["800E0B6B 03E7"],"options":null},"Infinite\\Health\\Player 1":{"note":"","data":["800CC49A 0006"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["800CC7C6 270F"],"options":null},"Infinite\\Health\\Player 3":{"note":"","data":["800CCAF2 270F"],"options":null},"Infinite\\Health\\Player 4":{"note":"","data":["800CCE1E 270F"],"options":null},"Infinite\\Lives Player 1":{"note":"","data":["800D2144 0064"],"options":null},"Infinite\\Max Kills Player 1":{"note":"","data":["800E0B47 03E7"],"options":null},"Infinite\\Oxygen":{"note":"","data":["800CC382 0001"],"options":null},"Infinite\\Pots of cash":{"note":"","data":["810D214A FFFF"],"options":null},"Infinite\\Time In Multi":{"note":"","data":["8108FD7A 7500"],"options":null},"Matrix Mode (Anywhere)":{"note":"Press R to activate and then Right-C to exit.","data":["D1042A14 0010","800BEA0C 0001","D1042A14 0010","810BE574 D202","D1042A14 0001","800BEA0C 0000","D1042A14 0001","810BE574 0000"],"options":null},"Play as Option 1":{"note":"Here you can choose who you want to play as, but only one option at a time. Shadow will not be visible, except when playing as Conker.","data":["800D213F 00??"],"options":{"Army Captain":"25","Bald Caveman":"0C","Caveman":"0D","Combat Squirrel":"04","Conker":"05","Conker the Bat":"24","Dinosaur (Cannot move)":"09","Enemy Bat":"23","Female Villager":"1D","Female Villager (with hood and glasses)":"1F","Female Zombie":"22","Gregg":"27","Male Villager":"11","Male Villager (with cap and glasses and moustache)":"1C","Male Villager (with cap and glasses)":"1A","Male Villager (with cap and moustache)":"1B","Male Villager (with cap)":"19","Male Villager (with glasses and moustache)":"14","Male Villager (with glasses)":"12","Male Villager (with hat and glasses and moustache)":"18","Male Villager (with hat and glasses)":"16","Male Villager (with hat and moustache)":"17","Male Villager (with hat)":"15","Male Villager (with moustache)":"13","Male Zombie":"21","Mohican Caveman":"0E","Neo Conker":"10","Skeleton Gregg":"28","Spikey Caveman":"0F","Tank Vehicle (Cannot move)":"08","Tedi":"03","Tedi Boss":"26","Uga":"0B","Wessle":"01","Wessle (Black outfit)":"02"}},"Press L To Levitate\\Player 1":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042A15 0020","810CC2F0 41CB"],"options":null},"Press L To Levitate\\Player 2":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042A1D 0020","810CC61C 41CB"],"options":null},"Press L To Levitate\\Player 3":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042A25 0020","810CC948 41CB"],"options":null},"Press L To Levitate\\Player 4":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042A2D 0020","810CCC74 41CB"],"options":null},"Wait Animation Trigger":{"note":"","data":["800CC5C8 00??"],"options":{"Default at most":"00","Wait animations disabled":"02"}},"Weapon Select In Multi (On Pick Up)":{"note":"Select what Weapon you would like in Multi Player and then on a Weapon Pickup you will have the weapon of your choice.to change for another just Enable the one of your choice to have that instead.(you must have a weapon already to change for the next.","data":["80180873 00??"],"options":{"Buck Shot":"08","Gas Mask":"13","High Powred Riffle With Scope":"0A","Long Pistol with Sight":"06","Nothing":"02","Riffle":"05","Rocket Launcher":"07","Sword":"01","Throwing Knives":"04","Two Automatic Machine Guns":"0C","Yellow Chain-Ssaw":"03"}}},"315C7466-3A453265-C:4A":{"Infinite\\99 Credits":{"note":"","data":["80085B03 0063"],"options":null},"Infinite\\Lives":{"note":"","data":["800A0CE8 0009"],"options":null},"Infinite\\Specials":{"note":"","data":["800A0CE9 0003"],"options":null},"Max\\Combo":{"note":"","data":["810A0CE4 7FFF"],"options":null},"Max\\Lower Level":{"note":"","data":["800A0CF8 0003"],"options":null},"Max\\Score":{"note":"","data":["800A0CD8 03E7","800A0CD9 03E7"],"options":null},"Max\\Upper Level":{"note":"","data":["800A0CF9 0063"],"options":null},"Play As":{"note":"","data":["800A0CEC 00??"],"options":{"Character 1":"00","Character 2":"01","Character 3":"02"}},"Status Modifier":{"note":"","data":["800A0CEA 00??"],"options":{"High":"01","Low":"03","Mid":"02"}}},"319093EC-0FC209EF-C:45":{"1 Player\\Always Place 1st":{"note":"","data":["80103C57 0000"],"options":null},"1 Player\\Max\\Acceleration":{"note":"","data":["8012C49F 000A"],"options":null},"1 Player\\Max\\Shocks":{"note":"","data":["8012C4A7 000A"],"options":null},"1 Player\\Max\\Speed":{"note":"","data":["8012C4A3 000A"],"options":null},"1 Player\\Max\\Tires":{"note":"","data":["8012C4AB 000A"],"options":null},"Multi and 1 Player\\Infinite Turbos\\Player 1":{"note":"Can be used in 1 Player and Multiplayer Modes for Player 1","data":["81103EBA 03E7"],"options":null},"Multi and 1 Player\\Infinite Turbos\\Player 2":{"note":"Multiplayer Mode Only for Player 2","data":["811041AE 03E7"],"options":null},"Multi and 1 Player\\Max Crash Helmets\\Player 1":{"note":"Can be used in 1 Player and Multiplayer Modes for Player 1","data":["80103EB3 0064"],"options":null},"Multi and 1 Player\\Max Crash Helmets\\Player 2":{"note":"Multiplayer Mode Only for Player 2","data":["801041A7 0064"],"options":null}},"3261D479-ED0DBC25-C:45":{"Away Team Scores 0":{"note":"","data":["8012A4EA 0000"],"options":null},"Away Team Scores 150":{"note":"","data":["8012A4EA 0096"],"options":null},"Big Head Mode":{"note":"","data":["81098E88 0100"],"options":null},"Final Four Stadium":{"note":"","data":["80098E98 0089"],"options":null},"GS Button For 1-Second Shot Clock":{"note":"","data":["8912A4BC 3FC0"],"options":null},"Home Team Scores 0":{"note":"","data":["8012A4D2 0000"],"options":null},"Home Team Scores 150":{"note":"","data":["8012A4D2 0096"],"options":null},"Infinite Shot Clock":{"note":"","data":["8112A4BC 4210"],"options":null},"Infinite Time Outs Away":{"note":"","data":["8012A4EC 0006"],"options":null},"Infinite Time Outs Home":{"note":"","data":["8012A4D4 0006"],"options":null},"No Fans In Crowd":{"note":"","data":["810CA520 0454"],"options":null},"No Time Outs Away":{"note":"","data":["8012A4EC 0000"],"options":null},"No Time Outs Home":{"note":"","data":["8012A4D4 0000"],"options":null},"Partially Invisible Players":{"note":"","data":["81098E84 0100"],"options":null},"Programmers Team":{"note":"","data":["81097088 0100"],"options":null},"Shot Clock Disabled":{"note":"","data":["8109707C 0000"],"options":null},"Trail Follows The Ball":{"note":"","data":["810B4600 4100"],"options":null},"Z-Axis Stadium":{"note":"","data":["80098E98 0088"],"options":null}},"32CA974B-B2C29C50-C:46":{"Cheat Menu\\All Weapons Enabled":{"note":"","data":["801D8B19 0001","801D8B85 0001","801D9BE5 0001","801D9CE1 0001","801D9D75 0001","801D9D77 0001","801D9DA9 0001","801DA6D9 0001","801DA6E1 0001","801DA74D 0001","801DB895 0001"],"options":null},"Cheat Menu\\Cheat Menu Enabled":{"note":"","data":["801DA748 0001"],"options":null},"Cheat Menu\\Have All Game Type \u0026 Other":{"note":"","data":["810E1B5E 0FFF"],"options":null},"Cheat Menu\\Have All Weapons":{"note":"","data":["811DA6D0 FFFF"],"options":null},"Enable Debug Menu":{"note":"","data":["800DFCF0 0001"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810A21D4 A65B"],"options":null},"Invincibility":{"note":"","data":["800DF223 0001"],"options":null}},"32EFC7CB-C3EA3F20-C:45":{"Infinite Lives P1":{"note":"","data":["800CE0F3 0003"],"options":null},"Infinite Lives P2":{"note":"","data":["800CE0F7 0003"],"options":null},"Infinite Pistol Ammo":{"note":"","data":["8106006C 2400"],"options":null},"Infinite Rocket Launcher Ammo":{"note":"","data":["81060130 2400"],"options":null},"Infinite Shotgun Ammo":{"note":"","data":["810601D8 2400"],"options":null}},"33BE8CD6-EC186912-C:45":{"Character Creation\\Max\\Aerial":{"note":"","data":["80319675 0009"],"options":null},"Character Creation\\Max\\Brawling":{"note":"","data":["8031F5B5 0009"],"options":null},"Character Creation\\Max\\Dirtiness":{"note":"","data":["80321575 0009"],"options":null},"Character Creation\\Max\\Impact":{"note":"","data":["803121B5 0009"],"options":null},"Character Creation\\Max\\Mat Ability":{"note":"","data":["8031B635 0009"],"options":null},"Character Creation\\Max\\Quickness":{"note":"","data":["803176B5 0009"],"options":null},"Character Creation\\Max\\Speed":{"note":"","data":["803156F5 0009"],"options":null},"Character Creation\\Max\\Strength":{"note":"","data":["802F16F5 0009"],"options":null},"Character Creation\\Max\\Submission":{"note":"","data":["8031D5F5 0009"],"options":null},"Enable Cheat":{"note":"","data":["800B115B 00??"],"options":{"All Wrestlers":"80","Momentum Meter":"08","Play As Same Wrestler":"20","Stamina Meter":"04","Super Created Wrestlers":"02"}},"Freeze Timer":{"note":"","data":["810B3242 D300"],"options":null},"Infinite Stamina\\Player 1":{"note":"","data":["810E3998 0478"],"options":null},"Infinite Stamina\\Player 2":{"note":"","data":["810E3B34 03ED"],"options":null},"Meter Select\\Player 1":{"note":"","data":["800E399D 00??"],"options":{"Empty Meter Bar":"00","Full Meter Bar":"60"}},"Meter Select\\Player 2":{"note":"","data":["800AD80D 00??"],"options":{"Empty Meter Bar":"00","Full Meter Bar":"60"}}},"36281F23-009756CF-C:45":{"Infinite\\Balls":{"note":"","data":["8021AC47 0000"],"options":null},"Infinite\\Creation Points":{"note":"","data":["81059408 420C"],"options":null},"Infinite\\Strikes":{"note":"","data":["8021AC48 0000"],"options":null},"Inning Selection":{"note":"","data":["8021AC42 00??"],"options":{"2nd Inning":"02","3rd Inning":"03","4th Inning":"04","5th Inning":"05","6th Inning":"06","7th Inning":"07","8th Inning":"08","9th Inning":"09"}},"Max\\Arm Strength":{"note":"","data":["8105C5F8 4120"],"options":null},"Max\\Batting":{"note":"","data":["8105D6D8 4120"],"options":null},"Max\\Clutch":{"note":"","data":["8105BB98 4120"],"options":null},"Max\\Control":{"note":"","data":["8105B760 4120"],"options":null},"Max\\Defense":{"note":"","data":["8105CA60 4120"],"options":null},"Max\\Durability":{"note":"","data":["8105C098 4120"],"options":null},"Max\\Pitch Speed":{"note":"","data":["8105AE90 4120"],"options":null},"Max\\Power":{"note":"","data":["8105D270 4120"],"options":null},"Max\\Speed":{"note":"","data":["8105CE68 4120"],"options":null},"Max\\Stamina":{"note":"","data":["8105B2F8 4120"],"options":null}},"36F1C74B-F2029939-C:50":{"Always Win Judge's Decision\\Player 1":{"note":"","data":["8020B777 FFFF","802098AF 0000"],"options":null},"Always Win Judge's Decision\\Player 2":{"note":"","data":["802098AF FFFF","8020B777 0000"],"options":null},"Enable Boro":{"note":"","data":["80307349 0001"],"options":null},"Have 1 Star\\Abdul":{"note":"","data":["80307353 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["8030734F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80307352 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80307351 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80307354 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80307350 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["8030734E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80307355 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80307356 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["802098A1 0000","802047C3 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802047C7 0000","8020B769 0000"],"options":null},"Level Select":{"note":"","data":["8022A84C 00??"],"options":{"Blue Hell Mountain":"0C","Coliseum":"04","Desert":"01","Fire Mountain":"00","Highlands":"02","Hong Kong":"03","Joker's Room":"0B","Jungle":"05","Ninja Room":"06","Observation":"09","Palace":"0D","Pasture":"0A","Suspension Bridge":"07"}},"Play As\\Player 1":{"note":"","data":["802EF622 00??"],"options":{"Abdul":"05","Bob":"01","Boro":"08","Joker":"0B","Leon":"04","Meiling":"03","Ninja":"06","No Clue":"0D","Pierre":"02","Ryuji":"00","The Master":"0C","Tomahawk":"07","Ushi":"0A","Valerie":"09"}},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EF67B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0209757 0000","80209757 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020B61F 0000","8020B61F 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810ADBDC 3F80"],"options":null}},"36FA35EB-E85E2E36-C:45":{"Always On Fire Team 2\\Player 2":{"note":"","data":["800EC0CF 00??"],"options":{"Always On":"01","Never On":"00"}},"Fire Team 1\\Player 1":{"note":"","data":["800EC0CB 00??"],"options":{"Always On":"01","Never On":"00"}},"Infinite Turbo\\Player 1":{"note":"","data":["810EC12C 42C8","810EC12E 0000"],"options":null},"Infinite Turbo\\Player 2":{"note":"","data":["81DEC164 42C8","81DEC166 0000"],"options":null}},"373F5889-9A6CA80A-C:50":{"Access All\\Chapters, Scenes,\u0026 Multi-Player Characters":{"note":"","data":["50002401 0000","800EA120 00FF"],"options":null},"Access All\\Characters \u0026 Weapons In Multi Race":{"note":"","data":["810EA122 ??FF"],"options":{"All Characters \u0026 Baseball bat":"FF","All Characters \u0026 Bones":"F3","All Characters \u0026 Frying Pan":"FB"}},"Infinite\\Accuracy Count Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game,Once you pick up a Gun a shoot once, you will 100%.","data":["800E0F87 0001"],"options":null},"Infinite\\Bags In Heist":{"note":"","data":["800E1004 00FF"],"options":null},"Infinite\\Bombs":{"note":"","data":["802059EA 0030"],"options":null},"Infinite\\Head Shot Count Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game","data":["800E0F8B 0064"],"options":null},"Infinite\\Health\\Player 1":{"note":"","data":["800CC8BA 0006"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["800CCBE6 270F"],"options":null},"Infinite\\Health\\Player 3":{"note":"","data":["800CCF12 270F"],"options":null},"Infinite\\Health\\Player 4":{"note":"","data":["800CD23E 270F"],"options":null},"Infinite\\Lives Player 1":{"note":"","data":["800D2564 0063"],"options":null},"Infinite\\Max Kills Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game","data":["800E0F67 03E7"],"options":null},"Infinite\\Oxygen":{"note":"","data":["800CC7A2 0001"],"options":null},"Infinite\\Pots of cash":{"note":"","data":["810D256A FFFF"],"options":null},"Infinite\\Time In Multi":{"note":"","data":["8109019A 7500"],"options":null},"Play as":{"note":"Here you can choose who you want to play as, but only one option at a time. Shadow will not be visible, except when playing as Conker.","data":["800D255F 00??"],"options":{"Army Captain":"25","Bald Caveman":"0C","Caveman":"0D","Combat Squirrel":"04","Conker":"05","Conker the Bat":"24","Dinosaur (Cannot move)":"09","Enemy Bat":"23","Female Villager":"1D","Female Villager (with hood and glasses)":"1F","Female Zombie":"22","Gregg":"27","Male Villager":"11","Male Villager (with cap and glasses and moustache)":"1C","Male Villager (with cap and glasses)":"1A","Male Villager (with cap and moustache)":"1B","Male Villager (with cap)":"19","Male Villager (with glasses and moustache)":"14","Male Villager (with glasses)":"12","Male Villager (with hat and glasses and moustache)":"18","Male Villager (with hat and glasses)":"16","Male Villager (with hat and moustache)":"17","Male Villager (with hat)":"15","Male Villager (with moustache)":"13","Male Zombie":"21","Mohican Caveman":"0E","Neo Conker":"10","Skeleton Gregg":"28","Spikey Caveman":"0F","Tank Vehicle (Cannot move)":"08","Tedi":"03","Tedi Boss":"26","Uga":"0B","Wessle":"01","Wessle (Black outfit)":"02"}},"Press L To Levitate\\Player 1":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042DA5 0020","810CC710 41CB"],"options":null},"Press L To Levitate\\Player 2":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042DAE 0020","810CCA3C 41CB"],"options":null},"Press L To Levitate\\Player 3":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042DB5 0020","810CCD68 41CB"],"options":null},"Press L To Levitate\\Player 4":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042DBE 0020","810CD094 41CB"],"options":null},"Wait Animation Trigger":{"note":"","data":["800CC9E8 00??"],"options":{"Default at most":"00","Wait animations disabled":"02"}},"Weapon Select In Multi (On Pick Up)":{"note":"Select what Weapon you would like in Multi Player and then on a Weapon Pickup you will have the weapon of your choice.to change for another just Enable the one of your choice to have that instead.(you must have a weapon already to change for the next.","data":["80180C4B 00??"],"options":{"Buck Shot":"08","Gas Mask":"13","High Powred Riffle With Scope":"0A","Long Pistol with Sight":"06","Nothing":"02","Riffle":"05","Rocket Launcher":"07","Sword":"01","Throwing Knives":"04","Two Automatic Machine Guns":"0C","Yellow Chain-Ssaw":"03"}}},"37FA8F16-5F824D37-C:44":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["811784E0 FFFF","811784E2 FFFF","811784E6 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FCBC 270F"],"options":null}},"39119872-07722E9F-C:45":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2212 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE51F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80382CB7 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","802020F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801DDC55 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801FC5C5 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801EF96D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","80202225 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801D9ABD 0001"],"options":null}},"3918834A-15B50C29-C:45":{"Freeze Timer":{"note":"","data":["800CE4EE 0077"],"options":null},"Have All Charcters \u0026 Levels Unlocked":{"note":"","data":["50000740 0000","800CB951 0001","50000304 0000","800CB945 0001","50000304 0000","800CB985 0001","50000304 0000","800CB9C5 0001","50000304 0000","800CBA05 0001","50000304 0000","800CBA45 0001","50000304 0000","800CBA85 0001"],"options":null},"Max\\Combos Landed":{"note":"","data":["810CE4AA 03E7","810CE4AE 03E7"],"options":null},"Max\\Tricks Landed":{"note":"","data":["810CE4A6 03E7","810CE4A2 03E7"],"options":null},"Max\\Wheels Collected":{"note":"","data":["800CE513 00??"],"options":{"0 Wheels":"00","30 Wheels":"1E","40 Wheels":"28"}},"Zero Crash Counts":{"note":"","data":["800CE49F 0000"],"options":null}},"392A0C42-B790E77D-C:45":{"All Missions Unlocked":{"note":"","data":["810C1F10 000B"],"options":null},"Infinite Ammo":{"note":"","data":["8103A180 2400"],"options":null},"Infinite Health":{"note":"","data":["8105518A 2400"],"options":null}},"399B9B81-D533AD11-C:4A":{"Access\\All Secret Characters":{"note":"","data":["50000C04 0000","80183D6F 0001"],"options":null},"Access\\All Superbikes":{"note":"","data":["50000304 0000","80183D6F 0001"],"options":null},"Access\\All Tracks":{"note":"","data":["50000BD8 0000","80183327 0001"],"options":null},"Always 1st":{"note":"","data":["80171063 0001"],"options":null},"Infinite\\Nitros":{"note":"","data":["81170F02 0003","81170F06 0003"],"options":null},"Infinite\\Shield":{"note":"","data":["81170F2C 42C8"],"options":null},"Max Points":{"note":"","data":["80183DD3 0064"],"options":null},"[Screen Hud Clear]":{"note":"This Fixes the Problem on all Plugins that have Hud covering the Screen.Let the game load 1st before Putting this code on,Or it will give an error and Freeze","data":["80092D1B 0004"],"options":null}},"3A089BBC-54AB2C06-C:0":{"Infinite Health":{"note":"","data":["800794CB 0009"],"options":null}},"3A089BBC-54AB2C06-C:00":{"Infinite Health":{"note":"","data":["800794CB 0009"],"options":null}},"3A4760B5-2D74D410-C:45":{"Character Select":{"note":"","data":["80075F52 00??"],"options":{"Big Head.":"04","Flame Grilled":"08","Normal":"00","Play as Deadwing.":"01"}},"Have All\\Cheats: Book of Shadows":{"note":"","data":["81075F4E 0FFF"],"options":null},"Have All\\Dark Souls Collected":{"note":"","data":["80075F49 0078"],"options":null},"Have All\\Gads \u0026 The Poign":{"note":"","data":["80030E57 000F"],"options":null},"Have All\\Items":{"note":"Youll not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50001B20 0000","80030613 000B"],"options":null},"Have All\\L-Eclipser":{"note":"You will not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50000320 0000","80030973 000B"],"options":null},"Have All\\Levels Unlocked":{"note":"","data":["5000101C 0000","80030A0E 0001"],"options":null},"Infinite\\0.9mm Ammo":{"note":"","data":["81075B3A 0190"],"options":null},"Infinite\\Accumulators":{"note":"","data":["800306D7 0005"],"options":null},"Infinite\\Cadeaux'":{"note":"","data":["81075B36 03E7"],"options":null},"Infinite\\Max Health/Air/Shadow Charge \u0026 Voodoo Power":{"note":"","data":["50000604 0000","81075B16 2710"],"options":null},"Infinite\\Prisms":{"note":"","data":["80030957 0003"],"options":null},"Infinite\\Retractors":{"note":"","data":["800308B7 0003"],"options":null},"Infinite\\Shotgun Shells":{"note":"","data":["80075B2F 0063"],"options":null},"Infinite\\Violator Ammo":{"note":"","data":["81075B32 03E7"],"options":null},"Press L To Levitate":{"note":"Press the L-Button to rise and let go and press again in stages to come back down.","data":["D0059097 0020","80075578 0041"],"options":null},"[Ammo Always Displayed On Screen]":{"note":"","data":["50000408 0000","80075ACD 0007"],"options":null},"[Health Meter Displayed On Screen]":{"note":"","data":["81075B10 0000","81075B12 00FF"],"options":null}},"3A6C42B5-1ACADA1B-C:4A":{"Have All\\Characters Available":{"note":"","data":["8105DEB8 FFFF"],"options":null},"Have All\\Courts Available":{"note":"","data":["8105DEBC FFFF"],"options":null},"Score\\Player 1":{"note":"","data":["8014B1DA 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}},"Score\\Player 2":{"note":"","data":["8014B1DB 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}}},"3B941695-F90A5EEB-C:50":{"Access\\All Gadgets and Items":{"note":"","data":["801147DD 0001"],"options":null},"Access\\All Guns and Weapons":{"note":"This also comes with Ammo","data":["801147DC 0001"],"options":null},"Access\\All Levels \u0026 Difficulties":{"note":"","data":["81103B66 0021","50000D01 0000","80118F38 0001"],"options":null},"Infinite\\Oxygen":{"note":"","data":["800E25E4 0004"],"options":null},"Infinite\\Time":{"note":"","data":["81103B82 0000"],"options":null},"Invincible":{"note":"","data":["811147D8 0101"],"options":null},"Multi Player\\Access All Arenas":{"note":"","data":["801147EB 0001","811147EC 0101","801147EE 0001"],"options":null},"Multi Player\\Access All Evil Skins":{"note":"","data":["50005C0C 0000","800C0167 0081"],"options":null},"Multi Player\\Access All Scenarios":{"note":"","data":["801147EF 0001","811147F0 0101"],"options":null},"Multi Player\\Access All Weapon Modes":{"note":"","data":["811147F2 0101","801147F4 0001"],"options":null},"Multi Player\\Access Evil Q":{"note":"","data":["800C06EF 0081"],"options":null},"Multi Player\\Access Good Q":{"note":"","data":["800C06EF 0001"],"options":null},"Multi Player\\Invincible":{"note":"","data":["811147D8 0101"],"options":null}},"3C059038-C8BF2182-C:45":{"Enable All\\Cars":{"note":"","data":["80140D1F 003F"],"options":null},"Enable All\\Expert Times":{"note":"","data":["80140D1C 0031"],"options":null},"Enable All\\Tracks":{"note":"","data":["80140D1A 0070"],"options":null},"Unlock Champ":{"note":"","data":["80140D28 0001"],"options":null},"Unlock Cheat Menu":{"note":"","data":["D11B1F14 0000","811B1F14 00FF","811D530A 04FF","D11B1F14 00FF","811B0270 FF03"],"options":null}},"3C1FDABE-02A4E0BA-C:45":{"Single \u0026 VS Mode\\Infinite Misses\\Player 1":{"note":"","data":["80112F9F 0003"],"options":null},"Single \u0026 VS Mode\\Infinite Misses\\Player 2":{"note":"","data":["80116207 0003"],"options":null},"Single \u0026 VS Modes\\Secret Cheat Menu":{"note":"","data":["8011265F 00AD"],"options":null},"Single Player Stage Select":{"note":"","data":["810E12DC 0001"],"options":null}},"3CC77150-21CDB987-C:50":{"Don't Take Any Damage":{"note":"","data":["8104A260 2400"],"options":null},"Enable Cheat Select":{"note":"","data":["80115933 00??"],"options":{"All Weapons With Fast Run":"42","All Weapons With Infinite Ammo":"06","Fast run":"40","Have All Weapons":"02","Infinite Ammo":"04","Infinite Ammo With Fast Run":"44","Invincible":"01","Invincible With All Weapons And Fast Run":"43","Invincible With All Weapons and Ammo and Fast Run":"47","Invincible With Fast Run":"41","Invincible With Infinite Ammo and All Weapons":"07"}},"Enable In-Game Cheat Menu \u0026 Level Select":{"note":"","data":["81115936 014F"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810496D0 2400"],"options":null},"Sound Select\\Music Volume":{"note":"","data":["80115944 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"Sound Select\\SFX Volume":{"note":"","data":["80115945 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"[Press L For Levitate]":{"note":"","data":["D10F7550 0020","816FE35C 43D5"],"options":null}},"3CECBCB8-6126BF07-C:50":{"Big Score":{"note":"","data":["81164E58 8181","81164E5A 8181"],"options":null},"Instant 450kmh Boost":{"note":"Press Trigger Button","data":["D10A1F50 2000","8119D334 005A"],"options":null},"No Checkpoint time":{"note":"","data":["81164E1C 0001"],"options":null}},"3DF17480-193DED5A-C:50":{"Have All\\Levels and Bonus Stages Unlocked":{"note":"Press start in Gyro's Lab and then resume game to see all open","data":["801D6F4C 00FF","801D6F4D 00FF","801D6F4E 00FF","801D6F4F 00FF","801D6F53 00FF"],"options":null},"Have All\\Time Attack \u0026 Toy Hunting Comnpleated (All Levels)":{"note":"Press start in Gyro's Lab and then resume game to see all open","data":["801D6F58 00FF","801D6F59 00FF","801D6F5A 00FF","801D6F5B 00FF","801D6F5C 00FF","801D6F5D 00FF","801D6F5E 00FF","801D6F5F 00FF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["801D6F2E 0063"],"options":null},"Infinite\\99 Stars":{"note":"","data":["801D6F2F 0063"],"options":null},"Infinite\\Time\\Gladstones Time Attack":{"note":"","data":["801D6F27 00FF"],"options":null},"Infinite\\Time\\Nephews Toy Hunting":{"note":"","data":["801D6F23 0063"],"options":null},"Instant\\Carrier Box [Moon Walk] (Press L)":{"note":"Press and hold the L Button and you will run floating of any ledge slowing drifting down. If you keep pressing the A Button while Holding L it will act as a Moon Jump.","data":["D00CAFD1 0020","801C901F 0001"],"options":null},"Instant\\Hyperactive State [Invincible] (Press C-Right)":{"note":"","data":["D00CAFD1 0001","801CE296 0001"],"options":null},"Instant\\Rage Attack (Press C-Left)":{"note":"","data":["D00CAFD1 0002","801CE23D 0001"],"options":null}},"3E198D9E-F2E1267E-C:45":{"99 Total Houses":{"note":"","data":["8106A56A 0063"],"options":null},"Big Newspapers":{"note":"","data":["81268B5A 0001"],"options":null},"Enable Level Select":{"note":"Also accesses All Bonus Levels","data":["8006A5F7 0001"],"options":null},"Infinite Health":{"note":"","data":["8006A5D2 0064"],"options":null},"Infinite Newspapers":{"note":"","data":["81268B12 0001"],"options":null},"Invincibility":{"note":"","data":["812688FE 0001"],"options":null},"Rocket Boosters":{"note":"","data":["81268B3E 0001"],"options":null},"Super Jump Springs":{"note":"","data":["81268B3A 0001"],"options":null},"Turbo Mode":{"note":"","data":["81268B36 0001"],"options":null}},"3E5055B6-2E92DA52-C:45":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118D8C0 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118D8C2 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118D8C4 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118D8C6 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["50000401 0000","8018ED10 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["80165F5D 00??","80165F8A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["8016603D 00??","8016606A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["8016611D 00??","8016614A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["801661FD 00??","8016622A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["801662DD 00??","8016630A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["801663BD 00??","801663EA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818EDEF 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F6915 0020","810F69C8 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F6925 0020","810F77A0 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F6935 0020","810F8578 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F6945 0020","810F9350 4000"],"options":null}},"3EDC7E12-E26C1CC9-C:45":{"Extra Flies":{"note":"","data":["D00A54DF 0000","800A54DF 0032"],"options":null},"Infinite Health":{"note":"","data":["800A54D9 0004"],"options":null},"Start With 50 Remotes":{"note":"","data":["D00A54EB 0000","800A54EB 0032"],"options":null}},"40DFEDA0-3AA09CB2-C:50":{"Infinite Max\\Armour":{"note":"","data":["80145E79 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Max\\Health":{"note":"","data":["81145E6C 4316"],"options":null},"Infinite Max\\Lives (Credits)":{"note":"","data":["8012920B 0009"],"options":null},"Infinite Max\\Sword Use (Press Z)":{"note":"Press The Z Button on your controller to use the infinite Sword Flame effect","data":["80145E81 00??"],"options":{"Off":"00","On":"D0"}},"Level Select":{"note":"","data":["801249B3 00??"],"options":{"01 (Incarceration)":"00","02 (The Dead Shall Rise)":"01","03 (Crush Your Enemies)":"02","04 (Infestation)":"03","05 (The Law of Disorder)":"04","06 (The Abyss)":"05","07 (Darrc Pilgrimage)":"06","08 (Ultimate Sacrifice)":"07","09 (The Dragon Sword)":"08"}},"Setting Options\\Sound\\Format":{"note":"","data":["800FD428 00??"],"options":{"Mono":"00","Stereo":"FF"}},"Setting Options\\Sound\\Game FX":{"note":"","data":["800FD41F 00??"],"options":{"Low":"19","Max":"64","Middle":"32","Off":"00"}},"Setting Options\\Sound\\Music Volume":{"note":"","data":["800FD423 00??"],"options":{"Low":"19","Max":"64","Middle":"32","Off":"00"}},"Setting Options\\Vibration Option":{"note":"","data":["80129202 00??"],"options":{"Off":"00","On":"FF"}},"[Character Select]":{"note":"","data":["800F84F3 00??"],"options":{"Aisha":"02","Cutter":"00","Gouranga":"03","Kailan":"01"}},"[Have 999999 Score]":{"note":"","data":["811458C4 000F","811458C6 423F"],"options":null},"[Press Z for Levitate]":{"note":"","data":["D00DDF88 0020","8014665D 00EF"],"options":null}},"41380792-A167E045-C:45":{"Have All\\Divisions Complete":{"note":"","data":["8008323F 00FF"],"options":null},"Have All\\Sleds Unlocked":{"note":"","data":["8108324E FFFF"],"options":null},"Have All\\Tracks Unlocked":{"note":"","data":["81083252 03FF"],"options":null},"Have\\Max Race Points":{"note":"","data":["8108321E FFFF"],"options":null},"Have\\Max Wrenches (All Sleds)":{"note":"This will give you 100 Wrench Points for all Sledges to boost your stats","data":["50000C01 0000","80083168 0064","50000201 0000","80083177 0064","50000206 0000","8008317C 0064","50000206 0000","80083186 0064","50000301 0000","80083190 0064"],"options":null},"[Continue Tournament]":{"note":"This will allow you to Continue Tournament with All Tracks \u0026 Divisions Unlocked","data":["80083247 00FF"],"options":null}},"4147B091-63251060-C:45":{"All Levels\\Dash Becomes Shorter \u0026 Wider":{"note":"","data":["800BA025 FFFF"],"options":null},"All Levels\\Infinite\\Lives":{"note":"","data":["800E05CB 0064"],"options":null},"All Levels\\Infinite\\Missiles":{"note":"","data":["800E1265 00FF"],"options":null},"All Levels\\Large Mutant Enemies":{"note":"","data":["800BB62B FFFF"],"options":null},"All Levels\\No Clipping\\Off":{"note":"","data":["81111E67 0001"],"options":null},"All Levels\\No Clipping\\On":{"note":"","data":["81111E67 0000"],"options":null},"All Levels\\See Through\\Everything Except Specific Things":{"note":"","data":["800BC665 FFFF"],"options":null},"All Levels\\See Through\\Some Walls":{"note":"","data":["800BC625 FFFF"],"options":null},"All Levels\\Time Always 0:00:02":{"note":"","data":["810E04E8 4000"],"options":null},"All Levels\\Visibililty\\Maximum":{"note":"","data":["800BA62B FFFF"],"options":null},"All Levels\\Visibililty\\Minimum":{"note":"","data":["800BA66B FFFF"],"options":null},"All Stages\\Infinite Health":{"note":"","data":["81072D0C 2400"],"options":null},"All Stages\\Infinite\\Disruptor Ammo":{"note":"","data":["81073F04 2400"],"options":null},"All Stages\\Infinite\\Flame Ammo":{"note":"","data":["81073720 2400"],"options":null},"All Stages\\Infinite\\Jet Pack":{"note":"","data":["81076AAC 2400","81076C58 2400","81076B48 2400"],"options":null},"All Stages\\Infinite\\Pulse Ammo":{"note":"","data":["81074204 2400"],"options":null},"All Stages\\Infinite\\Seeker Ammo":{"note":"","data":["81073A94 2400"],"options":null},"All Stages\\Infinite\\Stunner Ammo":{"note":"","data":["81073BD4 2400"],"options":null},"All Stages\\Invincible":{"note":"","data":["8107A770 2400"],"options":null},"All Stages\\Lasers Never Overheat":{"note":"","data":["81073948 2400"],"options":null},"All Stages\\Upper Lasers":{"note":"Don't Use With Never Overheat Code","data":["81073944 3C06","81073946 4EFF"],"options":null},"Press GS For Pink Cheat Debug Screen":{"note":"","data":["890D01BF 0001"],"options":null}},"417DD4F4-1B482FE2-C:45":{"1 Round To Win Player 1":{"note":"","data":["D01050F3 0000","801050F3 0001"],"options":null},"99 Wins Player 1":{"note":"","data":["800FE27F 0063"],"options":null},"Big Head Mode":{"note":"","data":["80048CB5 0001"],"options":null},"Infinite\\Credits":{"note":"","data":["800493BF 00FF"],"options":null},"Infinite\\Health Player 1":{"note":"","data":["810FE0D8 0001","810FE0DA 0000"],"options":null},"Infinite\\Health Player 2":{"note":"","data":["81126F54 0001","81126F56 0000"],"options":null},"Infinite\\Time":{"note":"","data":["8010511B 0063"],"options":null},"Play\\As Goro Player 1":{"note":"","data":["800FE293 000F"],"options":null},"Play\\As Noob Saibot Player 1":{"note":"","data":["800FE293 0011"],"options":null}},"418BDA98-248A0F58-C:50":{"All 52 Gold Gems Collected":{"note":"","data":["80163640 0003","80163641 007E","80163642 00FF","80163643 00EF","80163644 00FF","80163645 007F","80163646 00FF","80163647 00FC"],"options":null},"All Stages \u0026 Chapters Unlocked":{"note":"","data":["80163648 003B"],"options":null},"Infinite\\Health\\Marina":{"note":"","data":["810E1120 03E8"],"options":null},"Infinite\\Health\\Teran":{"note":"","data":["810E5DA0 03E8"],"options":null},"Infinite\\Max Red Gems":{"note":"","data":["81169C66 270F"],"options":null},"Level Select":{"note":"To access this anytime during game, press L+R+Z to enable the menu. Press D-Pad Up / Down to move through the menu, D-Pad Left / Right to change level digits and then press Start to enter level. Don not do this whhile in pause mode (Start Button Pause) or the game will freeze.","data":["D10B0878 2030","800B0871 0004"],"options":null}},"41B25DC4-1B726786-C:45":{"Access All Bonus Cars":{"note":"","data":["50000302 0000","800985C3 0001","50000302 0000","800985CB 0001"],"options":null},"Always 1st Place":{"note":"","data":["810A5F70 0001"],"options":null},"Infinite Time":{"note":"","data":["810CE76E 03E7"],"options":null},"Max Points":{"note":"","data":["800CE743 FFFF"],"options":null},"Speedometer Select":{"note":"","data":["800CE803 00??"],"options":{"KM/H":"00","MPH":"01"}},"Start On Lap Modifier":{"note":"","data":["D00A5F75 0000","810A5F74 00??"],"options":{"Lap 1":"01","Lap 2":"02","Lap 3":"03","Lap 4":"04","Lap 5":"06","Lap 6":"06","Last Lap from Start":"07","Normal":"00"}},"Track Direction Unlocked (All Levels)":{"note":"","data":["800A4171 0003"],"options":null}},"41F2B98F-B458B466-C:45":{"All levels Complete":{"note":"","data":["50004002 0000","810A2218 0001"],"options":null},"Carrington Institute\\Have 255 targets destroyed":{"note":"","data":["810B1E34 00FF"],"options":null},"Carrington Institute\\Have 999 points in Firing Range":{"note":"","data":["810B1E32 03E7"],"options":null},"Carrington Institute\\Have Infinite time in Firing Range":{"note":"","data":["810B1E2E 004D"],"options":null},"Have All\\Weapons\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80207F10 0007","801EEF10 0007","801D5F10 0007"],"options":null},"Have All\\Weapons\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80209B80 0007","801F0B80 0007","801D7B80 0007"],"options":null},"Infinite Ammo\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8020769F 00FF","801EE69F 00FF","801D569F 00FF","80206EFB 00FF","801EDEFB 00FF","801D4EFB 00FF"],"options":null},"Infinite Ammo\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8020930F 00FF","801F030F 00FF","801D730F 00FF","80208B6B 00FF","801EFB6B 00FF","801D6B6B 00FF"],"options":null},"Infinite Health\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8120677C 3F80","811ED77C 3F80","811D477C 3F80"],"options":null},"Infinite Health\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["812083EC 3F80","811EF3EC 3F80","811D63EC 3F80"],"options":null},"Infinite Shield\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81206790 3F80","811E4950 3F80","811CB950 3F80"],"options":null},"Infinite Shield\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["811FF5C0 3F80","811E65C0 3F80","811CD5C0 3F80"],"options":null},"Multi\\Press B To Levitate\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7E4 0040","811BB720 40F2","D009C7E4 0040","801BB6D3 0000"],"options":null},"Multi\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7EC 0040","811BD390 40F2","D009C7EC 0040","801BD343 0000"],"options":null},"Multi\\Press B To Levitate\\Player 3":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7F4 0040","811BF000 40F2","D009C7F4 0040","801BEFB3 0000"],"options":null},"Multi\\Press B To Levitate\\Player 4":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7FC 0040","811C0C70 40F2","D009C7FC 0040","801C0C23 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7E4 0040","81206720 40F2","D009C7E4 0040","802066D3 0000","D009C7E4 0040","811ED720 40F2","D009C7E4 0040","801ED6D3 0000","D009C7E4 0040","811D4720 40F2","D009C7E4 0040","801D46D3 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7EC 0040","81208390 40F2","D009C7EC 0040","80208343 0000","D009C7EC 0040","811EF390 40F2","D009C7EC 0040","801EF343 0000","D009C7EC 0040","811D6390 40F2","D009C7EC 0040","801D6343 0000"],"options":null},"The Ultimate All In One":{"note":"The Ultimate All In One activate's solo missions, give all medals on solo missions, activate cheats, activate cinemas, and who knows what else. I just don't have the time to identify these codes. I know that some of this is creditted to Zap2. I don't have the time to cut those codes out.","data":["800884F3 0001","8008850E 0001","80088575 0001","50000302 0000","80088572 0001","8008858C 0001","8008858D 0001","800885A6 0001","800885A9 0001","800885C0 0001","800885DA 0001","800885DC 0001","800885F4 0001","800885F5 0001","8008860E 0001","80088610 0001","80088612 0001","80088628 0001","50000501 0000","80088642 0001","50000501 0000","8008865C 0001","50000501 0000","80088676 0001","50000501 0000","80088690 0001","50000501 0000","800886AA 0001","50000501 0000","800886C4 0001","50000501 0000","800886DE 0001","50000501 0000","800886F8 0001","50000501 0000","80088712 0001","50000501 0000","8008872C 0001","50000501 0000","80088746 0001","50000501 0000","80088760 0001","50000501 0000","8008877A 0001","50000501 0000","80088794 0001","50000501 0000","800887AE 0001","800A2219 0001","50003E02 0000","800A221D 0001","50000B01 0000","800ACCC9 0001","50000901 0000","800ACCD5 0001","50000401 0000","800ACCDF 0001","50000301 0000","800ACCE4 0001","800ACCE8 0001","800ACCE9 0001","800ACCEB 0001","800ACCEC 0001","50000901 0000","800ACCEE 0001","800ACCF8 0001","50002101 0000","800ACCFA 0001","800ACD12 0001","800ACD15 0001","800ACD16 0001","800ACDEA 0001","800ACD3A 0001"],"options":null}},"4222D89F-AFE0B637-C:45":{"Always Gets Bubbles\\Player 1":{"note":"","data":["800ECE59 0007"],"options":null},"Always Gets Bubbles\\Player 2":{"note":"","data":["800ECF49 0007"],"options":null},"Always Gets Bubbles\\Player 3":{"note":"","data":["801588B1 0007"],"options":null},"Always Gets Bubbles\\Player 4":{"note":"","data":["801589A1 0007"],"options":null},"Ceiling Never Drops\\Player 1":{"note":"","data":["810ECDEE 0000"],"options":null},"Ceiling Never Drops\\Player 2":{"note":"","data":["810ECEDE 0000"],"options":null},"Ceiling Never Drops\\Player 3":{"note":"","data":["81158846 0000"],"options":null},"Ceiling Never Drops\\Player 4":{"note":"","data":["81158974 0000"],"options":null},"Infinite Time To Set Pieces\\Player 1":{"note":"","data":["810ECE2C 0000"],"options":null},"Infinite Time To Set Pieces\\Player 2":{"note":"","data":["810ECF1C 0000"],"options":null},"Infinite Time To Set Pieces\\Player 3":{"note":"","data":["81158884 0000"],"options":null},"Infinite Time To Set Pieces\\Player 4":{"note":"","data":["81158936 0000"],"options":null},"Never Gets Bubbles\\Player 1":{"note":"","data":["800ECE59 0000"],"options":null},"Never Gets Bubbles\\Player 2":{"note":"","data":["800ECF49 0000"],"options":null},"Never Gets Bubbles\\Player 3":{"note":"","data":["801588B1 0000"],"options":null},"Never Gets Bubbles\\Player 4":{"note":"","data":["801589A1 0000"],"options":null}},"423E96F4-CE88F05B-C:45":{"Always Have\\BFG 9000":{"note":"","data":["8006338B 0001"],"options":null},"Always Have\\Bio Suite":{"note":"","data":["80063333 00??"],"options":{"Off":"00","On":"FF"}},"Always Have\\Chain Gun":{"note":"","data":["8006337F 0001"],"options":null},"Always Have\\Chainsaw":{"note":"","data":["8006336B 0001"],"options":null},"Always Have\\Double Shotgun":{"note":"","data":["8006337B 0001"],"options":null},"Always Have\\Gun":{"note":"","data":["80063373 0001"],"options":null},"Always Have\\Have Rocket Launcher":{"note":"","data":["80063381 0001"],"options":null},"Always Have\\Laser Weapon":{"note":"","data":["8006338F FFFF"],"options":null},"Always Have\\Missile Launcher":{"note":"","data":["80063383 0001"],"options":null},"Always Have\\Plasma Rifle":{"note":"","data":["80063387 0001"],"options":null},"Always Have\\Shotgun":{"note":"","data":["80063377 0001"],"options":null},"Berserk Mode":{"note":"","data":["8006332B 00FF"],"options":null},"Enable Cheat Menu":{"note":"","data":["8005A883 0001"],"options":null},"Have All Keys":{"note":"","data":["8006333F 0001","80063343 0001","80063344 0001","80063353 0001","8006334F 0001","80063348 0001"],"options":null},"Infinite\\Ammo All Weapons":{"note":"","data":["80063393 00FF","80063397 00FF","8006339B 00FF","8006339F 00FF"],"options":null},"Infinite\\Armor":{"note":"","data":["8006331F 00FF"],"options":null},"Invincible":{"note":"","data":["800633BB 0002"],"options":null},"Invincible And Map Markers":{"note":"","data":["800633BB 0006"],"options":null},"Rapid Fire":{"note":"","data":["810633EA 0B94"],"options":null},"Turn Map Markers On":{"note":"","data":["800633BB 0004"],"options":null},"[Max Brightness]":{"note":"Enable this cheat on rom load to have Max Brightness (internal) and then put Jabo d3d8 on 160% Max for a extra brightness Boost.","data":["8005A878 0064"],"options":null}},"4248BA87-99BE605D-C:00":{"Always Have 0 kcal (Player 1)":{"note":"","data":["812FFBF2 0000"],"options":null},"Infinite 9 Credits":{"note":"","data":["802D9DDF 0009"],"options":null},"Player 2 has High kcal":{"note":"","data":["812FFC4E FFFF","812FFC4F FFFF"],"options":null}},"4252A5AD-AE6FBF4E-C:45":{"Infinite Coins P1":{"note":"","data":["8119ADEE 03E7"],"options":null},"Infinite Gold P1":{"note":"","data":["81088286 03E7"],"options":null},"Infinite Gold P2":{"note":"","data":["8119ADEE 03E7"],"options":null},"Infinite Health P1":{"note":"","data":["80088284 0003"],"options":null},"Infinite Health P2":{"note":"","data":["81088290 03E7"],"options":null},"Infinite Lives P1":{"note":"","data":["80088283 0003"],"options":null},"Infinite Lives P2":{"note":"","data":["8008828D 0003"],"options":null},"Open All Levels":{"note":"","data":["50002D02 0000","810882AA 0303"],"options":null}},"42CF5EA3-9A1334DF-C:50":{"All levels complete":{"note":"","data":["800D1364 000C","50000501 0000","800D1365 000A"],"options":null},"Infinite Vespene gas,minerals \u0026 Most missions":{"note":"","data":["50003202 0000","800B1D96 00FF"],"options":null}},"4446FDD6-E3788208-C:45":{"Extra Gems":{"note":"","data":["D0165241 0000","80165241 004B"],"options":null},"Full\\Bomb Power":{"note":"","data":["8016523F 0003"],"options":null},"Full\\Fire Power":{"note":"","data":["80165240 0003"],"options":null},"Infinite\\Health":{"note":"","data":["80165244 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["80165243 0009"],"options":null},"Max\\Bombs":{"note":"","data":["8016523F 0008"],"options":null},"Max\\Explosion":{"note":"","data":["80165240 0008"],"options":null},"Max\\Score":{"note":"","data":["80177608 FFFF"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D005A455 0020","81154178 41CB","D005A455 0020","D0154154 0000","80154154 0040"],"options":null}},"44995484-20A5FC5E-C:4A":{"99 Points":{"note":"","data":["801D8E13 0063"],"options":null},"Always First Place":{"note":"","data":["801D040F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801D06F3 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801D06CE 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801D0537 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801D0B5A 0005","801D0DFA 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801D053F 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800E84C3 0007"],"options":null},"Super Speed":{"note":"","data":["801D0537 0005","D0161DC1 0010","801D0537 0020"],"options":null}},"46039FB4-0337822C-C:45":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D6BE0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112E7DE 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800ECA18 0064"],"options":null},"Game 100% Complete\\Save Slot 2":{"note":"","data":["800ECA70 0064"],"options":null},"Game 100% Complete\\Save Slot 3":{"note":"","data":["800ECAC8 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D6BC0 0001","50001701 0000","800D6BC8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D6E50 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D714F 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D6BB9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D6BBA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D6BBB 0003"],"options":null}},"46A3F7AF-0F7591D0-C:45":{"Always Place 1st\\Player 1":{"note":"","data":["81065174 0000"],"options":null},"Infinite\\Continues":{"note":"","data":["8107F850 00FF"],"options":null},"Infinite\\Nitros\\Player 1":{"note":"","data":["800BE7FD 00FF"],"options":null},"Infinite\\Time":{"note":"","data":["810802D4 4296"],"options":null},"Unlock All Cars":{"note":"","data":["8104F10E FFFF"],"options":null}},"49088A11-6494957E-C:45":{"Access In-Game Cheat Menu":{"note":"","data":["8111AADC FFFF","8111AADE FFFF"],"options":null},"Player 1\\99 Gems":{"note":"","data":["812FC4C8 0063","806FE2F8 0063"],"options":null},"Player 1\\Have All\\Keys,Nuke,Evrything":{"note":"Only enable once in game or it will freeze before you get into the start menu","data":["802FC602 0030","802FC60C 0030","802FC616 0030","802FC620 0030","50000601 0000","802FC634 0030","50000501 0000","802FC648 0030","50000401 0000","802FC65C 0030","50000601 0000","802FC99C 0030","802FC4E0 0033","802FC4E5 0033","802FC4EA 0033","802FC594 0033","802FC530 0033","802FC53A 0033","802FC53B 0033","802FC5B0 0033","802FC5B1 0033","802FC5B2 0033","802FC5B3 0033","806FE432 0030","806FE43C 0030","806FE446 0030","806FE450 0030","50000601 0000","806FE464 0030","50000501 0000","806FE478 0030","50000501 0000","806FE48C 0030","50000601 0000","806FE4CC 0030","806FE310 0033","806FE315 0033","806FE31A 0033","806FE360 0033","806FE36A 0033","806FE36B 0033","806FE3C4 0033","50000401 0000","806FE3E0 0033","50000601 0000","8059D61A 0001","50000D01 0000","8059D620 0001","50000401 0000","8059D62E 0001"],"options":null},"Player 1\\Have All\\Weapons":{"note":"","data":["D12FC912 0000","812FC912 0101","D12FC914 0000","812FC914 0101","D12FC916 0000","812FC916 0101","D12FC918 0000","812FC918 0101","D12FC91A 0000","812FC91A 0101","D12FC91C 0000","812FC91C 0101","D12FC91E 0000","812FC91E 0101","D12FC920 0000","812FC920 0101","D12FC922 0000","812FC922 0101","D12FC924 0000","812FC924 0101","D12FC926 0000","812FC926 0101","D12FC928 0000","812FC928 0101","D12FC92A 0000","812FC92A 0101","D12FC92C 0000","812FC92C 0101","D12FC92E 0000","812FC92E 0101","D12FC930 0000","812FC930 0101","D12FC932 0000","812FC932 0101","806FE742 0001","806FE743 0001","806FE744 0001","806FE745 0001","806FE746 0001","806FE747 0001","806FE748 0001","806FE749 0001","806FE74A 0001","806FE74B 0001","806FE74C 0001","806FE74D 0001","806FE74E 0001","806FE74F 0001","806FE750 0001","806FE751 0001","806FE752 0001","806FE753 0001","806FE754 0001","806FE756 0001","806FE757 0001","806FE758 0001","806FE759 0001","806FE75A 0001","806FE75B 0001","806FE75C 0001","806FE75E 0001","806FE75F 0001","806FE760 0001","806FE761 0001","806FE762 0001","806FE763 0001","806FE764 0001"],"options":null},"Player 1\\Infinite\\Ammo":{"note":"","data":["802FC499 0000","50000302 0000","812FC8D4 0063","812FC8DE 0063","812FC8E2 0063","50000A02 0000","812FC8E6 0063","50000302 0000","816FE704 0063","816FE70E 0063","816FE712 0063","50000802 0000","816FE716 0063","816FE72C 0063","816FE730 0063"],"options":null},"Player 1\\Infinite\\Health":{"note":"","data":["812FC4C6 0064","816FE2F6 6400"],"options":null},"Player 2\\99 Gems":{"note":"","data":["812F7240 0063"],"options":null},"Player 2\\Infinite\\Ammo":{"note":"","data":["50000602 0000","812F767C 0063","812F764C 013C","812F764E 013C","50000302 0000","812F7654 013C","812F7660 013C","812F7664 013C","812F766A 013C","812F766C 013C","812F7674 013C","812F7678 013C","8159D5DC 013C","8159D5DE 013C","8159D5E4 013C","8159D5E8 013C","8159D5EA 013C","8159D5F0 013C","8159D5F4 013C","8159D5FA 013C","8159D5FC 013C","8159D604 013C","8159D608 013C","50000602 0000","8159D60C 013C"],"options":null},"Player 2\\Infinite\\Health":{"note":"","data":["812F723E 0064","8059D1CE 0064"],"options":null}},"492B9DE8-C6CCC81C-C:50":{"Have 231 Marbles":{"note":"","data":["D00EBE53 0000","800EBE53 03E7"],"options":null},"Have All Gold Udders":{"note":"","data":["50002802 0000","810C80BA 0101"],"options":null},"Infinite\\Ammo\\Banana Peel Bomb":{"note":"","data":["810C6976 0064"],"options":null},"Infinite\\Ammo\\Blaster":{"note":"","data":["810C6916 0064"],"options":null},"Infinite\\Ammo\\Boomerang Knives":{"note":"","data":["810C691E 0064"],"options":null},"Infinite\\Ammo\\Butcher Knife Gun":{"note":"","data":["800C887F 0064"],"options":null},"Infinite\\Ammo\\Chickens":{"note":"","data":["810C69BE 0064"],"options":null},"Infinite\\Ammo\\Green Slimer":{"note":"","data":["810C69A6 0064"],"options":null},"Infinite\\Ammo\\Laser":{"note":"","data":["810C698E 0064"],"options":null},"Infinite\\Ammo\\Lepricon Gun":{"note":"","data":["800C8897 0064"],"options":null},"Infinite\\Ammo\\Mushrooms":{"note":"","data":["810C6936 0064"],"options":null},"Infinite\\Ammo\\Music Gun":{"note":"","data":["810C6906 0064"],"options":null},"Infinite\\Ammo\\Pistol":{"note":"","data":["800C8777 0064"],"options":null},"Infinite\\Ammo\\Rocket Launcher":{"note":"","data":["810C6946 0064"],"options":null},"Infinite\\Ammo\\Shotgun":{"note":"","data":["810C69EE 0064"],"options":null},"Infinite\\Ammo\\Sniper Chicken":{"note":"","data":["800C881F 0064"],"options":null},"Infinite\\Health":{"note":"","data":["800C876F 0064"],"options":null},"Infinite\\Lives":{"note":"","data":["800C8773 0064"],"options":null}},"492F4B61-04E5146A-C:45":{"99 Points":{"note":"","data":["801CB343 0063"],"options":null},"Always First Place":{"note":"","data":["801C293F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801C2C03 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801C2BFE 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801C2A67 0005","8013FC91 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801C308A 0005","801C392D 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801C2A6F 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800DA9D3 0007"],"options":null},"Open\\Course Option":{"note":"This works in all modes except for Championship Mode.","data":["800DA9D3 00??"],"options":{"Dolphin Park":"00","Drake Lake":"03","Glacier Coast":"07","Marian Fortress":"04","Port Blue":"05","Southern Island":"08","Sunny Beach":"01","Sunset Bay":"02","Twilight City":"06"}},"Open\\Difficulty Option":{"note":"","data":["801CB260 00??"],"options":{"Dolphin":"10","Dolphin \u0026 Expert":"12","Dolphin \u0026 Hard":"11","Dolphin Hard \u0026 Expert":"13","Expert":"02","Hard":"01","Hard \u0026 Expert":"03"}},"Open\\Level Option":{"note":"","data":["801CB26B 00??"],"options":{"Above \u0026 Drake Lake":"03","All Above \u0026 Glacier Coast":"16","All Above \u0026 Marine Fortress":"04","All Above \u0026 Port Blue":"05","All Above \u0026 Southern Island":"06","All Above \u0026 Twilight City":"0D","Sunset Bay":"02"}},"Super Speed":{"note":"","data":["801C2A67 0005","D01CE659 0010","801C2A67 0020"],"options":null}},"4998DDBB-F7B7AEBC-C:45":{"Agility":{"note":"","data":["800A973D 0001"],"options":null},"Auto Win Scenario":{"note":"","data":["800A9741 0001"],"options":null},"Debug Menu":{"note":"","data":["800A9740 0001"],"options":null},"Double MPG":{"note":"","data":["800A9735 0001"],"options":null},"Infinite\\Ammo":{"note":"","data":["800A9731 0001"],"options":null},"Infinite\\Attempts":{"note":"","data":["800A9732 0001"],"options":null},"Infinite\\Chaingun":{"note":"","data":["800A9737 0001"],"options":null},"Infinite\\Fuel":{"note":"","data":["800A9733 0001"],"options":null},"Infinite\\Lives":{"note":"","data":["800A5DF0 0009"],"options":null},"Infinite\\Missiles":{"note":"","data":["800A9739 0001"],"options":null},"Infinite\\Rockets":{"note":"","data":["800A9738 0001"],"options":null},"Infinite\\Wingtips":{"note":"","data":["800A973A 0001"],"options":null},"Invulnerability":{"note":"","data":["800A9730 0001"],"options":null},"Level Skip":{"note":"","data":["800A973F 0001"],"options":null},"Max Armor Increased 50%":{"note":"","data":["800A973C 0001"],"options":null},"Overhead View":{"note":"","data":["800A973E 0001"],"options":null},"Play Mission\\1":{"note":"","data":["800A5DF1 0000"],"options":null},"Play Mission\\2":{"note":"","data":["800A5DF1 0001"],"options":null},"Play Mission\\3":{"note":"","data":["800A5DF1 0002"],"options":null},"Play Mission\\4":{"note":"","data":["800A5DF1 0003"],"options":null},"Play Mission\\5":{"note":"","data":["800A5DF1 0004"],"options":null},"Play Mission\\6":{"note":"","data":["800A5DF1 0005"],"options":null},"Quad Damage":{"note":"","data":["800A9736 0001"],"options":null},"Stealth Mode":{"note":"","data":["800A9734 0001"],"options":null},"Wingtips Do Double Damage":{"note":"","data":["800A973B 0001"],"options":null}},"49E46C2D-7B1A110C-C:4A":{"Have 1 Star\\Abdul":{"note":"","data":["80306A13 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["80306A0F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80306A12 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80306A11 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80306A14 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80306A10 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["80306A0E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80306A15 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80306A16 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["80208F61 0000","80203E83 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["80203E87 0000","8020AE29 0000"],"options":null},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EED3B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0208E17 0000","80208E17 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020ACDF 0000","8020ACDF 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810AD29C 3F80"],"options":null}},"4A997C74-E2087F99-C:50":{"Extreme Mode":{"note":"","data":["8111D332 0003"],"options":null},"Infinite Armour\\Player One":{"note":"","data":["8011D65F 0064"],"options":null},"Infinite Armour\\Player Two":{"note":"","data":["8011D663 0064"],"options":null},"Infinite Bombs\\Player One":{"note":"","data":["8011D667 0003"],"options":null},"Infinite Bombs\\Player Two":{"note":"","data":["8011D66B 0003"],"options":null},"Level 11 Vulcan Cannon\\Player One":{"note":"","data":["80123BAB 000A"],"options":null},"Level 11 Vulcan Cannon\\Player Two":{"note":"","data":["80123BCB 000A"],"options":null},"Level Select":{"note":"","data":["81123E16 000C"],"options":null},"Max Score":{"note":"","data":["81123B82 FC9A"],"options":null}},"4BCDFF47-AAA3AF8F-C:45":{"Have All Items":{"note":"","data":["50000501 0000","80389C4A 0001","50000301 0000","80389C51 0001","80389C5A 0001","80389C5B 0001","80389C5D 0001","50000E01 0000","80389C60 0001"],"options":null},"Have Exp Points":{"note":"","data":["80389C49 0063"],"options":null},"Have Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C3F 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C45 0001","81389C46 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C3E 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C49 0063"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C48 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the GS button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C90 ????","89389C92 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CED 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C88 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C88 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C3D 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C42 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"4C261323-4F295E1A-C:44":{"Access Level Select":{"note":"On the main menu Scroll down to make CHEATS visible to go into Level Select.For in-Game Cheats,Pause gameplay.","data":["810DD50C 8001"],"options":null},"Have\\All TARZAN Letters":{"note":"","data":["800DD515 00FF"],"options":null},"Have\\Coins Collected 100%":{"note":"","data":["800DD547 0064"],"options":null},"Have\\Full Portrait":{"note":"","data":["800DD514 00FF"],"options":null},"Have\\Level \u0026 Tokens Completed 100%":{"note":"","data":["800DD51F 0000","800DD520 0001","800DD521 0000"],"options":null},"Infinite\\Bonus Timer":{"note":"This is For All Timers on Bonus Levels","data":["801736DE 0025"],"options":null},"Infinite\\Green Weapon":{"note":"","data":["811921F6 0063"],"options":null},"Infinite\\Health":{"note":"","data":["81192320 0120"],"options":null},"Infinite\\Lives":{"note":"","data":["800DD542 00??"],"options":{"3 Lives":"03","99 Lives":"63"}},"Infinite\\Purple Weapon":{"note":"","data":["811921FA 0063"],"options":null},"Infinite\\Red Weapon":{"note":"","data":["811921F8 0063"],"options":null},"Press GS For\\Sabor Attacks\\Sabor 1 Hit Kill":{"note":"","data":["8924A23E 0001"],"options":null}},"4C52BBB2-CEAB0F6B-C:45":{"Always Play Level Modifier":{"note":"","data":["800B254C 00??"],"options":{"Mission 1-Plastic Pandemonium":"00","Mission 10-The Melting Pot":"09","Mission 11-River Rapids Riot":"0A","Mission 12-Nighttime Teddy":"0B","Mission 13-Demolition Time":"0C","Mission 14-Pick Up The Pieces":"0D","Mission 15-Have An Ice Day":"0E","Mission 16-Plastro's Revenge":"0F","Mission 17-Bug Hunt: Chew Chew Bug-B-Q":"10","Mission 18-Bug Hunt: Crispy Critters":"11","Mission 19-Flag-Nab-It: Fort Frenzy":"12","Mission 2-Going Car-razy":"01","Mission 20-Flag-Nab-it: Freezer Burn":"13","Mission 21-Food Fight: Picnic Panic":"14","Mission 22-Food Fight: Cherry Surprise":"15","Mission 23-Rescue: Don't Feed The Crabs":"16","Mission 24-Rescue: Tide Pool Terror":"17","Mission 3-The Train That Could":"02","Mission 4-Tan Terror-Tory":"03","Mission 5-Bug Bath":"04","Mission 6-Uninvited Guests":"05","Mission 7-Ants In The Pants":"06","Mission 8-Saucer Attack":"07","Mission 9-The Heat is On":"08"}},"Co-Pilot Modifier":{"note":"","data":["800B245C 00??"],"options":{"Lt. Dave Parker \"Rawhide\"":"02","Lt. Felicity Wannamaker \"Bombshell\"":"03","Lt. James Marshall \"Woodstock\"":"00","Lt. John Lawless \"Hardcore\"":"01","Sergeant Hawk \"Sarge\" (Hidden Character)":"04"}},"Helicopter Modifier":{"note":"","data":["800B2534 00??"],"options":{"Apache (Hidden)":"04","Chinook (Hidden)":"02","Huey":"01","Super Stallion (Hidden)":"03"}},"Start On Play Level Modifier":{"note":"","data":["D00B254C 0000","800B254C 00??"],"options":{"Mission 1-Plastic Pandemonium":"00","Mission 10-The Melting Pot":"09","Mission 11-River Rapids Riot":"0A","Mission 12-Nighttime Teddy":"0B","Mission 13-Demolition Time":"0C","Mission 14-Pick Up The Pieces":"0D","Mission 15-Have An Ice Day":"0E","Mission 16-Plastro's Revenge":"0F","Mission 17-Bug Hunt: Chew Chew Bug-B-Q":"10","Mission 18-Bug Hunt: Crispy Critters":"11","Mission 19-Flag-Nab-It: Fort Frenzy":"12","Mission 2-Going Car-razy":"01","Mission 20-Flag-Nab-it: Freezer Burn":"13","Mission 21-Food Fight: Picnic Panic":"14","Mission 22-Food Fight: Cherry Surprise":"15","Mission 23-Rescue: Don't Feed The Crabs":"16","Mission 24-Rescue: Tide Pool Terror":"17","Mission 3-The Train That Could":"02","Mission 4-Tan Terror-Tory":"03","Mission 5-Bug Bath":"04","Mission 6-Uninvited Guests":"05","Mission 7-Ants In The Pants":"06","Mission 8-Saucer Attack":"07","Mission 9-The Heat is On":"08"}},"Unlock All Planes":{"note":"","data":["810B252A 0105"],"options":null}},"4D3ADFDA-7598FCAE-C:50":{"Infinite Energy\\Player 1":{"note":"","data":["80254A76 001E","8025CCF6 001E"],"options":null},"Infinite Energy\\Player 2":{"note":"","data":["80257B86 001E","80260846 001E"],"options":null},"Infinite Energy\\Player 3":{"note":"","data":["8025ACA6 001E","802637A6 001E"],"options":null},"Infinite Energy\\Player 4":{"note":"","data":["8025E0E6 001E","80266B76 001E"],"options":null}},"4D3E622E-9B828B4E-C:4A":{"Always 1st Place":{"note":"","data":["802C4BC2 0001"],"options":null},"Have Boost From Start":{"note":"","data":["D02C4DAC 003F","802C4925 0050"],"options":null},"Infinite Lives":{"note":"","data":["800E5AA9 0005"],"options":null},"Player 1\\Infinite Shield":{"note":"","data":["812C4B48 4336","812C4B4C 4336"],"options":null},"Time Always 00.00.00 1st Place":{"note":"","data":["802C4BC0 0000","802C4BC2 0001"],"options":null},"Unlock Everything":{"note":"","data":["800CD428 0001"],"options":null}},"4D486681-AB7D9245-C:50":{"Access All Levels":{"note":"Must be used with Access Wampa Stompa","data":["810DE2EA 0004"],"options":null},"Access In-Game Cheat Menu":{"note":"Pause gameplay and pink text will appear in top screen. scroll with multiple buttons and select with 'A'","data":["D10DDE2E 0001","810D3F32 0001","D10DDE14 0002","810D3F32 0001","D10E28D4 0011","810D3F32 0001","D10E28D4 0011","810D3F32 0001"],"options":null},"Access Wampa Stompa":{"note":"Important To Get All Codes To Work! Select empty file \"Wampa Stompa\" will now be your playername.","data":["8118D4E8 2057","8118D4EA 616D","8118D4EC 7061","8118D4EE 2020","8118D4F0 5374","8118D4F2 6F6D","8118D4F4 7061"],"options":null},"Extra Jump Power":{"note":"","data":["810E2220 3F92"],"options":null},"Freeze Timer":{"note":"","data":["810E2230 4018"],"options":null},"Max Challenge Points":{"note":"","data":["8118F370 000F"],"options":null}},"4D79D316-E8501B33-C:45":{"Bonus Menu Games\\Infinite Time\\Escape Race 100 \u0026 200\\Player 1":{"note":"","data":["811BD3B6 000A"],"options":null},"Bonus Menu Games\\Infinite Time\\Escape Race 100 \u0026 200\\Player 2":{"note":"","data":["811BD3BA 000A"],"options":null},"Bonus Menu Games\\Max\\Points\\Disc Hunter\\Player 1":{"note":"","data":["801BD3E9 00FF"],"options":null},"Bonus Menu Games\\Max\\Points\\Disc Hunter\\Player 2":{"note":"","data":["801BD3EB 00FF"],"options":null},"Bonus Menu Games\\Max\\Wins\\Sunset \u0026 Sunrise Showdown\\Player 1":{"note":"","data":["801BC25F 00FF"],"options":null},"Choose Stage\\VS. Mode":{"note":"","data":["800ED6CF 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06","Stage 8 (Hidden Stage)":"07","Stage 9 (Hidden Stage)":"08","Stage A (Hidden Stage)":"09"}},"Infinite\\Health\\Player 1":{"note":"","data":["8112CD46 270F"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["8114D2C6 270F"],"options":null},"Infinite\\Stun Meter\\Player 1":{"note":"","data":["8012CD49 00FF"],"options":null},"Infinite\\Stun Meter\\Player 2":{"note":"","data":["8014D2C9 00FF"],"options":null},"Infinite\\Time":{"note":"","data":["80102A94 000A"],"options":null},"Play As\\Player 1":{"note":"","data":["801BE2A4 00??"],"options":{"Airazor":"03","Cheetor":"02","Megatron":"04","Optimus Primal":"00","Rattrap":"01","Tarantulas":"05","Terrorsaur":"07","Waspinator":"06"}},"Play As\\Player 2":{"note":"","data":["801BE2A5 00??"],"options":{"Airazor":"03","Cheetor":"02","Megatron":"04","Optimus Primal":"00","Rattrap":"01","Tarantulas":"05","Terrorsaur":"07","Waspinator":"06"}}},"4DD7ED54-74F9287D-C:45":{"All Levels\\Dash Becomes Shorter \u0026 Wider":{"note":"","data":["800BA025 FFFF"],"options":null},"All Levels\\Infinite\\Lives":{"note":"","data":["800E05CB 0064"],"options":null},"All Levels\\Infinite\\Missiles":{"note":"","data":["800E1265 00FF"],"options":null},"All Levels\\Large Mutant Enemies":{"note":"","data":["800BB62B FFFF"],"options":null},"All Levels\\No Clipping\\Off":{"note":"","data":["81111E67 0001"],"options":null},"All Levels\\No Clipping\\On":{"note":"","data":["81111E67 0000"],"options":null},"All Levels\\See Through\\Everything Except Specific Things":{"note":"","data":["800BC665 FFFF"],"options":null},"All Levels\\See Through\\Some Walls":{"note":"","data":["800BC625 FFFF"],"options":null},"All Levels\\Time Always 0:00:02":{"note":"","data":["810E04E8 4000"],"options":null},"All Levels\\Visibililty\\Maximum":{"note":"","data":["800BA62B FFFF"],"options":null},"All Levels\\Visibililty\\Minimum":{"note":"","data":["800BA66B FFFF"],"options":null},"All Stages\\Infinite Health":{"note":"","data":["81072D0C 2400"],"options":null},"All Stages\\Infinite\\Disruptor Ammo":{"note":"","data":["81073F04 2400"],"options":null},"All Stages\\Infinite\\Flame Ammo":{"note":"","data":["81073720 2400"],"options":null},"All Stages\\Infinite\\Jet Pack":{"note":"","data":["81076AAC 2400","81076C58 2400","81076B48 2400"],"options":null},"All Stages\\Infinite\\Pulse Ammo":{"note":"","data":["81074204 2400"],"options":null},"All Stages\\Infinite\\Seeker Ammo":{"note":"","data":["81073A94 2400"],"options":null},"All Stages\\Infinite\\Stunner Ammo":{"note":"","data":["81073BD4 2400"],"options":null},"All Stages\\Invincible":{"note":"","data":["8107A770 2400"],"options":null},"All Stages\\Lasers Never Overheat":{"note":"","data":["81073948 2400"],"options":null},"All Stages\\Upper Lasers":{"note":"Don't Use With Never Overheat Code","data":["81073944 3C06","81073946 4EFF"],"options":null},"Press F9 For Pink Cheat Debug Screen":{"note":"","data":["890D098B 0001"],"options":null}},"4E4A7643-A37439D7-C:45":{"Aiming Sites Always Available":{"note":"","data":["812F0922 0004"],"options":null},"Always Your Turn\\Player 1":{"note":"","data":["802EF798 0000"],"options":null},"Always Your Turn\\Player 2":{"note":"","data":["802EF798 0001"],"options":null},"Ball\\Always In Hand":{"note":"","data":["802EF79C 0002"],"options":null},"Foul Score Options\\Player 1":{"note":"","data":["812EF784 ????"],"options":{"Max Fouls":"FFFF","Zero Fouls":"0000"}},"Foul Score Options\\Player 2":{"note":"","data":["812EF786 ????"],"options":{"Max Fouls":"FFFF","Zero Fouls":"0000"}},"Max Ratings\\Player 1":{"note":"","data":["81062C6A FFFF"],"options":null},"Max Ratings\\Player 2":{"note":"","data":["81062CEE FFFF"],"options":null},"Wins Options\\Player 1":{"note":"","data":["812EF780 ????"],"options":{"Max Points":"FFFF","Zero Points":"0000"}},"Wins Options\\Player 2":{"note":"","data":["812EF782 ????"],"options":{"Max Points":"FFFF","Zero Points":"0000"}}},"4E4B0640-1B49BCFB-C:45":{"2 Player Championship Mode":{"note":"This lets player 2 play with you in championship mode so if you have a friend that you want to tag team up with in tag team championship now you can.","data":["810A755E 0002"],"options":null},"Always Special\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF9E 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2F6 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["D015A5D1 0015","8015B64E 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["D015A5D1 0015","8015B9A6 0004"],"options":null},"Auto-Pin\\Player 1":{"note":"Do not use with Cant Pin","data":["8016CE23 0003"],"options":null},"Auto-Pin\\Player 2":{"note":"Do not use with Cant Pin","data":["8016CE17 0003"],"options":null},"Auto-Pin\\Player 3":{"note":"Do not use with Cant Pin","data":["8016CE2F 0003"],"options":null},"Auto-Pin\\Player 4":{"note":"Do not use with Cant Pin","data":["8016CE3B 0003"],"options":null},"CPU To Human Control\\Player 1":{"note":"","data":["8015AF99 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 2":{"note":"","data":["8015B2F1 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 3":{"note":"","data":["8015B649 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 4":{"note":"","data":["8015B9A1 00??"],"options":{"CPU":"18","Human":"17"}},"Can't Pin\\Player 1":{"note":"Do not use with Auto Pin","data":["8016CE23 0004"],"options":null},"Can't Pin\\Player 2":{"note":"Do not use with Auto Pin","data":["8016CE17 0004"],"options":null},"Can't Pin\\Player 3":{"note":"Do not use with Auto Pin","data":["8016CE2F 0004"],"options":null},"Can't Pin\\Player 4":{"note":"Do not use with Auto Pin","data":["8016CE3B 0004"],"options":null},"Cannot Be Grabbed\\Player 1":{"note":"","data":["D115AEC6 0052","8115AEC6 0001","D115AEC6 00A1","8115AEC6 00C1"],"options":null},"Cannot Be Knocked Down\\Player 1":{"note":"","data":["D115AEC6 0031","8115AEC6 0001"],"options":null},"Cannot Be Punched\\Player 1":{"note":"","data":["D115AEC6 002D","8115AEC6 0001","D115AEC6 0035","8115AEC6 00C1"],"options":null},"Clock At 00:00":{"note":"","data":["8115AB1E 0000","810A99F2 0000"],"options":null},"Hacked Moves\\Capture Tazzplex":{"note":"Replaces: Capture Suplex P1 grabs P2's feet like a capture suplex, then lets go \u0026 does a Tazzplex.","data":["D106B454 3689","D106B456 0021","8106B460 00BC","D106B454 3689","D106B456 0021","8106B462 A5E2","D106B514 368A","D106B516 0021","8106B520 00BC","D106B514 368A","D106B516 0021","8106B522 B6BE"],"options":null},"Hacked Moves\\Dominator into HHH Facebuster":{"note":"Replaces: Dominator","data":["D106B454 3810","D106B456 005C","8106B560 011A","D106B454 3810","D106B456 005C","8106B562 A256","D106B514 3811","D106B516 005C","8106B520 011A","D106B514 3811","D106B516 005C","8106B522 ACB0","D106B454 3810","D106B456 0075","8115AF52 0000"],"options":null},"Hacked Moves\\Dragon Screw Stunner":{"note":"Dragon Screw 02 P1 does a Dragon Screw then picks up P2 (still holding his leg) and spins him around and gives him a Stone Cold Stunner","data":["D106B454 3749","D106B456 0094","8106B460 00E9","D106B454 3749","D106B456 0094","8106B462 B9BE","D106B514 374A","D106B516 0094","8106B520 00E9","D106B514 374A","D106B516 0094"],"options":null},"Hacked Moves\\Dragon Screw Suplex":{"note":"Replaces: Double Dragon Screw 02 P1 does a Dragon screw then picks then up (still holding their feet) and does a capture suplex.","data":["D106B454 3749","D106B456 007C","8106B460 00AD","D106B454 3749","D106B456 007C","8106B462 DB2A","D106B514 374A","D106B516 007C","8106B520 00AD","D106B514 374A","D106B516 007C","8106B522 EAE0","D106B454 3749","D106B456 00A5","8115AF52 0000","D106B514 374A","D106B516 00A5","8115B2AA 0000"],"options":null},"Hacked Moves\\Morality Check to Back of head":{"note":"Replaces: Back Clothesline P1 is immediately backed up and does the Morality Check to P2 in the back of the head (misses by a little)","data":["D106B454 3892","D106B456 0000","8106B460 00B3","D106B454 3892","D106B456 0000","8106B462 194C"],"options":null},"Hacked Moves\\Running Rock Bottom":{"note":"Replaces: Farooq Spinebuster P2 runs into P1 and P1 delivers a RockBottom to P2.","data":["D106B454 3A80","D106B456 0000","8106B460 00C1","D106B454 3A80","D106B456 0000","8106B462 F7A2","D106B514 3A81","D106B516 0000","8106B520 00C2","D106B514 3A81","D106B516 0000","8106B522 1210"],"options":null},"Hacked Moves\\Running Tazplex":{"note":"Replaces: Underhook Belly to Belly P2 runs into P1 and P1 does a Tazplex to P2.","data":["D106B454 3A7A","D106B456 0000","8106B460 00BC","D106B454 3A7A","D106B456 0000","8106B462 A51E","D106B514 3A7B","D106B516 0000","8106B520 00BC","D106B514 3A7B","D106B516 0000","8106B522 B5FA"],"options":null},"Have All\\Characters,Costumes \u0026 Moves":{"note":"","data":["50000B02 0000","810BEE40 FFFF"],"options":null},"Infinite\\Money\\Championship Mode":{"note":"For Championship Mode","data":["8109940A FFFF"],"options":null},"Infinite\\Money\\Smackdown Mall Shop":{"note":"For Smackdown Mall Shop","data":["8114FAD6 FFFF"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF5F 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2B7 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["D015A5D1 0015","8015B60F 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["D015A5D1 0015","8015B967 00FF"],"options":null},"Novalty\\Truck In The Crowd":{"note":"","data":["81050110 0747","81050112 0748","81050114 0749","81050116 074A","81050118 074B","81050124 0A4B","81050126 0A43","81050128 0A4B","8105012A 0A43","8105012C 0A43","8105012E 0A43","8105011A 074C","8105011C 074D","81050130 0A43","8105011E 074E","81050132 0A43","81050120 0746","81050134 0A4B","81050122 0743","81050136 0A4B","D1064880 2000","8115AFB0 42EE","D1064880 2000","8115B308 42EE"],"options":null},"Play As\\Player 1\\Option 1":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 1\\Option 2":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 1\\Option 3":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 2\\Option 1":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 2\\Option 2":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 2\\Option 3":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 3\\Option 1":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 3\\Option 2":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 3\\Option 3":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 4\\Option 1":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 4\\Option 2":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 4\\Option 3":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Replace Raw War with\\BACKYARD ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105010E 0F76","8105010C 0F76","810482E8 002F","81050150 2CFD","810528F4 33FF","810528F6 33FF","81050152 2DC7","81050114 04F4","81050116 04F5","8105011E 04F3","81050128 07FF","8105012A 07FF","81050132 07FF","81079F48 400C","81079F5C 3F00","81079F70 3FFF","8107A024 4010","8107A038 3F00","8107A04C 4020","8107A060 3F84","8107A394 4012","8107A3A8 3F00","8107A3BC 4030","8107A3D0 3F84","8105042C 0949","81050436 07FF","81050438 07FF","8105043A 07FF","8105043C 0000","8105043E 07FF","81050440 0949","81050442 0949","81050430 0F76","81050128 07FF","8105012A 07FF","8105012C 0000","8105012E 07FF","81050130 07FF","81050132 07FF","81050134 0000","81050136 08F9","81050196 2CFD","81050194 09EF","81050192 0000","81050190 09EF","8116C49E 0019","8116C4B8 0004","8116C4DC C2E1","8116C4E0 42B4","810500FE 2D2D","81050100 2D2D","81050102 2D2D","81050400 2DC7","81050402 2DC7","81050404 2DC7","81050406 2DC7","81050408 2DC7","8105040A 2DC7","8105040C 2DC7","8105040E 2DC7","50001002 0000","810501B8 0000","50000402 0000","810501E0 0000","50000902 0000","81050262 0000","50001402 0000","81050290 0000","50002C02 0000","810502EC 0000","8107941C 3FE0","81079428 3FFF","810500EC 06FE","810500EE 06FD","810500F8 07FF","810500FA 0997","81050110 06FC","81050112 06FB","8105011A 06FF","8105011C 06FA","81052CF0 2CC9","81052CF4 2D1B","81052CD0 2CD1","81052CD4 0963","81052C84 2CBF","81052C8A 0961","81052CB8 2CC4","81052CBC 2DD7","81052CC8 2CD1","81052CCC 2CFB","81052C78 2CBC","81052C80 2D31","81052CF8 2CC1","81052D00 2DD7"],"options":null},"Replace Raw War with\\BACKYARD WEAK":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0E88","8105042E 2D0D","81050430 2D0D","81050432 2D0D","81050434 2D0D","81050436 07FD","8105043A 2CFB","8105043C 2D0D","8105043E 2D0D","81050440 2D0D","81050442 2D0D","810500E8 2D0D","8105010E 2D0D","8105010C 2D0D","81050150 2D0D","81050196 2CFB","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81050136 2CFB","81050400 2D0D","81050402 2D0D","81050404 2D0D","81050406 2D0D","81050408 2D0D","8105040A 2D0D","8105040C 2D0D","8105040E 2D0D","810528F4 2D0D","810528F6 2D0D","81052CE8 2CC9","81052CEC 2D2D"],"options":null},"Replace Raw War with\\BARBEDWIRE ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 2CFB","8105042E 2CFB","81050430 2CFB","81050432 2CFB","81050434 2CFB","81050436 2CFB","81050438 2CFB","8105043A 2CFB","8105043C 2CFB","8105043E 2CFB","81050440 2CFB","81050442 2CFB","810500E8 2CFB","8105010E 2CFB","8105010C 2CFB","81050150 2CFB","81050196 2CFB","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81050136 2CFB","810528F4 DDDD","810528F6 DDDD","81052CE8 2CCA","81052CEC 2CFB","81050400 2CFB","81050402 2CFB","81050404 2CFB","81050406 2CFB","81050408 2CFB","8105040A 2CFB","8105040C 2CFB","8105040E 2CFB"],"options":null},"Replace Raw War with\\BARBEDWIRE ROPES":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050110 04F3","81050112 04F4","81050114 04F5","81050116 04F3","81050118 04F4","8105011A 04F5","8105011C 04F3","8105011E 04F4","81050120 04F5","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81079D90 3F6C","81079D94 3F48","81079DA4 3D10","81079DB8 3F71","81079E6C 3F6C","81079E80 3D10","81079E90 3F47","81079F48 3F6C","81079F4C BF4C","81079F5C 3D10","81079F70 3F71","8107A024 3F6C","8107A028 3F28","8107A038 3D10","8107A04C 3F71","8107A100 3F6C","8107A114 3D10","8107A124 3F23","8107A1DC 3F6C","8107A1E0 BF2A","8107A1F0 3D10","8107A204 3F71","8107A2B8 3F6C","8107A2BC 3F02","8107A2CC 3D10","8107A2E0 3F71","8107A394 3F6C","8107A3A8 3D10","8107A3B8 3F00","8107A470 3F6C","8107A474 BF02","8107A484 3D10","8107A498 3F71","81050144 0569","81050154 07F7","810528F4 0C01","810528F6 0555","81050140 04F4","81050150 2CFB","8107A628 3F60","8107A63C 3D10","8107A64C 3F52","8107A650 BF80","8107A8BC 3F56","8107A8C4 BA00","8107A8D0 3D10","8107A8DC 3C5A","8107A8E0 3F30","8107A8E4 BF80","8107ADE4 3F56","8107ADEC BA00","8107ADF8 3D10","8107AE04 3C5A","8107AE08 3F0E","8107AE0C BF80","8107AB7C 3F00","D115AF56 2EB2","8115AEC6 0017","D115B2AE 2EB2","8115B21E 0017","D115B606 2EB2","8115B570 0017","D115B95E 2EB2","8115B8CE 0017","81052922 FFFF","81052924 FFFF","81052926 FFFF"],"options":null},"Replace Raw War with\\BARBEDWIRE SQUARE\\Part 1":{"note":"Both Parts must be on for this Press the C Left Button to make your opponent bleed,These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050110 04F3","81050112 04F4","81050114 04F5","81050116 04F3","81050118 04F4","8105011A 04F5","8105011C 04F3","8105011E 04F4","81050120 04F5","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81079D90 3F6C","81079D94 3F48","81079DA4 3D10","81079DB8 3F71","81079E6C 3F6C","81079E80 3D10","81079E90 3F47","81079F48 3F6C","81079F4C BF4C","81079F5C 3D10","81079F70 3F71","8107A024 3F6C","8107A028 3F28","8107A038 3D10","8107A04C 3F71","8107A100 3F6C","8107A114 3D10","8107A124 3F23","8107A1DC 3F6C","8107A1E0 BF2A","8107A1F0 3D10","8107A204 3F71","8107A2B8 3F6C","8107A2BC 3F02","8107A2CC 3D10","8107A2E0 3F71","8107A394 3F6C","8107A3A8 3D10","8107A3B8 3F00","8107A470 3F6C","8107A474 BF02","8107A484 3D10","8107A498 3F71","81050144 0569","81050154 07F7","810528F4 0C01","810528F6 0555","81050140 04F4","81050150 2CFB","8107A628 3F60","8107A63C 3D10","8107A64C 3F52","8107A650 BF80","8107A8BC 3F56","8107A8C4 BA00","8107A8D0 3D10","8107A8DC 3C5A","8107A8E0 3F30","8107A8E4 BF80","8107ADE4 3F56","8107ADEC BA00","8107ADF8 3D10","8107AE04 3C5A","8107AE08 3F0E","8107AE0C BF80","8107AB7C 3F00","D115AF56 2EB2","8115AEC6 0017","D115B2AE 2EB2","8115B21E 0017","D115B606 2EB2","8115B570 0017","D115B95E 2EB2","8115B8CE 0017","81052922 FFFF","81052924 FFFF","81052926 FFFF","8116C330 0000","8116C332 000A","8116C334 0000","8116C336 000A","8116C378 42B4"],"options":null},"Replace Raw War with\\BARBEDWIRE SQUARE\\Part 2":{"note":"Both Parts must be on for this Press the C Left Button to make your opponent bleed,These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8116C382 0000","8116C38C FFFF","81052C9C 0672","81052CA4 2CFB","D1064880 0002","8115B21E 002F","D1064886 0002","8115AEC6 002F","8116C3E4 0000","8116C3E6 000C","8116C3E8 0000","8116C3EA 000C","8116C428 C3D4","8116C440 FFFF","81052CB2 2CC2","81052CB4 0805","81052CB6 2CFB","D1064880 2000","8116C3E6 001F","D1064880 2000","8116C3EA 001F","D1064880 2000","81005592 3F81","D1005592 3F81","8116C3E6 001F","D1064880 2000","81005592 3F81","D1005592 3F81","8116C3EA 001F","D1064886 2000","8116C3E6 001F","D1064886 2000","8116C3E6 001F","D1064886 2000","81005592 3F81","D1005592 3F81","8116C3EA 001F","81052CF8 04F4","81052D00 2CFB","8116C3E4 0000","8116C3E6 0015","8116C3E8 0000","8116C3EA 0015","8116C428 0000","8116C42A 0000","8116C42C 43EB","8116C42E 0000","8116C430 C3A6","8116C432 0000","8116C436 0400","8116C43A 0000","8116C43E 0000","8116C440 FFFF","8116C442 0000","810855A8 3F00","81085684 3F00","81085750 3F00","8108583C 3F00","81050100 2CFB","8105010E 2CFB"],"options":null},"Replace Raw War with\\DUDLEY ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 21A7","8105042E 2D0D","81050432 2D0D","81050436 21A7","8105043E 2D0D","81050440 0000","81050442 0000","810500E8 2D0D","8105010C 2CFD","8105010E 2CFD","81050150 2D29","81050152 2CFB","81050400 09EF","81050402 09EF","81050404 0000","81050406 0000","81050408 0000","8105040A 0000","8105040C 09EF","8105040E 09EF","81050188 04F6","8105018A 04F7","8105018C 04F8","8105018E 04F9","81050190 09EF","81050192 0000","81050194 09EF","81050196 2D0D","810528F4 6666","810528F6 6666","81052CE8 2CC2","81052CEC 2D0D","81052D1C 2CD3","81052D1E 2CD4","81052D20 2CD5","81052D22 2CD6","81052D24 2CFD","81052D26 2CFD","81052D28 2CFB","81052D2A 2CFB","81050124 2CFD","81050126 2CFD","81050128 2CFD","8105012A 2CFD","8105012C 2CFD","8105012E 2CFD","81050130 2CFD","81050132 2CFD","81050134 2CFD","81050136 2CFD","81050154 2CFB","811533F8 002E"],"options":null},"Replace Raw War with\\FLAME ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105010E 0EFE","8105010C 0EFE","810528F4 2508","810528F6 2508","81050430 2401","81050430 2401","81050404 2401","81050406 2401","81050408 2401","81050409 2401","8105040A 2401","8105040C 2401","810500E8 2401"],"options":null},"Replace Raw War with\\FLAMING TURNBUCKLES":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8116C334 FFFF","8116C336 001F","8116C374 C350","8116C376 FFF3","8116C378 4377","8116C37A 2689","8116C37C C380","8116C37E 0406","8116C382 0D14","8116C386 0FCC","8116C38A 07DC","8116C38C FFFF","8116C38E FDE3","8116C3E8 FFFF","8116C3EA 001F","8116C428 C360","8116C42C 4370","8116C430 4376","8116C436 0D14","8116C43A 0FCC","8116C43E 07DC","8116C442 F9C4","8116C49C FFFF","8116C49E 001F","8116C4DC 4360","8116C4E0 4370","8116C4E4 4380","8116C4EA 0CD0","8116C4EE 0136","8116C4F2 04EE","8116C4F6 F601","8116C550 FFFF","8116C552 001F","8116C590 434F","8116C594 4370","8116C598 C36C","8116C59E 0E70","8116C5A2 0F58","8116C5A6 0814","8116C5AA F1E6"],"options":null},"Replace Raw War with\\GREENWICH STREET ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050430 2DC5","81050436 0000","81050438 0000","8105043A 0000","8105043E 0000","810504E8 0EFE","8105010E 2DC5","8105010C 2DC5","81050196 2CFD","81050136 0FB6","81050134 0FC6","81050132 0FB6","81050130 0FC6","8105012E 0FB6","8105012C 0FC6","8105012A 0FB6","81050128 0FC6","81050126 0FB6","81050124 0FC6","81050440 0000","81050442 0000","50002C02 0000","81050378 0000","50002C02 0000","810502EC 0000","50001402 0000","81050290 0000","50000902 0000","81050262 0000","50000402 0000","810501CE 0000","50001002 0000","810501B8 0000","50000402 0000","810501E0 0000","8105042C 2D0D","81050430 0000","81050150 24F0"],"options":null},"Replace Raw War with\\HHH ARNEA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105040E 24EF","8105040C 24EF","8105040A 24EF","81050408 24EF","81050406 24EF","81050404 24EF","81050402 24EF","81050400 24EF","81050436 24E9","81050440 24E9","81050442 24E9","8105043E 24EF","8105042E 24EF","8105043C 24EF","8105042C 24E9","8105010E 24E9","8105010C 24E9","81050196 24E9","8105042E 24EF","81050432 24EF","810500F8 24EF","810500FA 24EF","810500FC 24EF","810500FC 24EF","81050100 24EF","81050100 24EF","81052CE8 2CCA","81052CEC 24EF","81050150 24E9","81050152 24E9","81050154 24E9","810528F4 24E9","810528F6 24E9"],"options":null},"Replace Raw War with\\HOSPITAL ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0949","8105042E 283F","81050428 0949","81050430 0949","81050430 0949","81050436 096B","81050438 0993","8105043A 096B","8105043E 283F","81050440 283F","81050442 283F","810504E8 0949","81050150 283F","81050196 283F","81050400 283F","81050402 283F","81050404 283F","81050406 283F","81050408 283F","8105040A 283F","8105040C 283F","8105040E 283F","810500F8 283F","810500FA 283F","810500FC 283F","810500FE 283F","81050100 283F","81050100 283F","81052CE8 2CCA","81052CEC 283F","8105010E 283F","8105010C 283F","81050124 0949","81050126 0949","81050128 0949","8105012A 0949","8105012C 0949","8105012E 0949","81050130 0949","81050132 0949","81050134 0949","81050136 0949","810500E8 0949","810528F4 0000","81052CE0 2CC9"],"options":null},"Replace Raw War with\\KANE ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0A61","8105042E 0A61","81050428 2B6C","81050430 2B6C","81050430 2B6C","81050436 2B57","81050438 2B57","8105043A 2B57","8105043E 0A61","81050440 2B57","81050442 2B57","810500E8 1B1E","8105010E 2D37","8105010C 209F","81050194 0955","81050196 2B57","81050400 2699","81050402 2699","81050404 2699","81050406 2699","81050408 2699","8105040A 2699","8105040C 2699","8105040E 2699"],"options":null},"Replace Raw War with\\REMOVE RING":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050150 0000","81050152 0000","81050154 0000","810500E8 0000","810855A8 3F00","81085684 3F00","81085750 3F00","8108583C 3F00","81079C08 3F00","81079C14 3F00","81079B10 3F00"],"options":null},"Replace Raw War with\\SHIMMER ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 1932","8105042E 1932","81050430 1932","81050434 1932","81050432 1932","81050436 1932","81050438 1932","8105043A 1932","8105043E 1932","81050440 1932","81050442 1932","81050150 1932","81050152 1932","81050154 1932","81050190 1932","81050192 1932","81050194 1932","81050196 1932","81050124 1932","81050126 1932","81050128 1932","8105012A 1932","8105012C 1932","8105012E 1932","81050130 1932","81050132 1932","81050134 1932","81050136 1932","810500E8 1932","8105010E 1932","8105010C 1932"],"options":null},"Replace Raw War with\\SPACE SHIP ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 094D","8105042E 0953","81050430 0953","81050432 0F0E","81050434 0953","81050436 0F0E","81050438 0899","8105043C 0953","8105043E 0899","81050440 0963","81050442 0963","81050400 0953","81050402 0953","81050404 0953","81050406 0953","81050408 0953","8105040A 0953","8105040C 0953","8105040E 0953","810500E8 0A75","810528F4 7223","810528F6 0119","81050150 0963","81050152 0963","81050190 0953","81050192 0953","81050194 0953","81050196 0963","8105010E 0F0E","8105010C 0F0E","81050124 0F10","81050126 0F10","81050128 0F10","8105012A 0F10","8105012C 0F10","8105012E 0F10","81050130 0F10","81050132 0F10","81050134 0F10","81050136 0F10","810500F8 0963","810500FA 0963","810500FC 0963","810500FE 0963","81050100 0963","81050102 0963","81052CE8 2CCA","81052CEC 0963"],"options":null},"Replace Raw War with\\TOKYO DOME":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["810528F4 7223","810528F6 0119","81050124 0100","81050126 0100","81050128 0100","8105012A 0100","8105012C 0100","8105012E 0100","81050130 0100","81050132 0100","81050134 0100","81050136 0100","8105010E 0999","81050400 03A5","81050402 0385","81050404 0385","81050406 0385","81050408 0385","8105040A 03A5","8105040C 03A5","8105040E 043F","81050430 043F","8105042C 03A5","81050430 21A5","81050432 0100","81050434 0000","81050436 2CFB","81050438 0899","8105043C 03AF","81050440 03AF","81050442 03A5","810500E8 24C3","81050444 0100","81050190 09EF","81050192 0000","81050194 09EF","81050196 2CFD"],"options":null},"Tables\\IN RING TABLE\\Part 1":{"note":"To Make the Table look broken Keep the Z Button press down, To make player stand on the Table, Stand next to it \u0026 Keep C-Right Pressed Down.Put all Parts on Together for this Cheat to work","data":["81052CF0 06E1","81052CF4 09F1","81052CF8 06E2","81052D00 09F1","81052D0C 06E3","81052D0E 06E4","81052D10 09EF","81052D12 09EF","81052D14 06E5","81052D16 06E6","81052D18 09EF","81052D1A 09EF","D1064880 0001","8115AFB0 432C","D1064880 0001","8115B308 432C","D1064880 2000","8115AFB0 42B4","D1064880 2000","8115B308 42B4","8116C330 0000","8116C332 0014","8116C334 0000","8116C336 0014","8116C374 4210","8116C376 C0B1","8116C378 432F","8116C37A 51DC","8116C37C 4210","8116C37E 92F1","8116C382 0800","8116C386 05A0","8116C38A 0800","8116C38C FFFF","8116C38E F3BC","8116C3E4 0000","8116C3E6 0015","8116C3E8 0000","8116C3EA 0015","8116C428 4210","8116C42A C0B1","8116C42C 432F","8116C42E 51DC","8116C430 4210","8116C432 92F1","8116C436 0800","8116C43A 05A0","8116C43E 0800","8116C440 FFFF","8116C442 F3BC","D1064880 2000","8116C378 42E0"],"options":null},"Tables\\IN RING TABLE\\Part 2":{"note":"To Make the Table look broken Keep the Z Button press down, To make player stand on the Table, Stand next to it \u0026 Keep C-Right Pressed Down.Put all Parts on Together for this Cheat to work","data":["D1064880 2000","8116C382 07E0","D1064880 2000","8116C38A 0680","D1064880 2000","8116C42C 42E0","D1064880 2000","8116C436 0820","D1064880 2000","8116C43E 0980","8116C498 0000","8116C49A 0017","8116C49C 0000","8116C49E 0017","8116C4DC 4210","8116C4DE C0B1","8116C4E0 432A","8116C4E2 51DC","8116C4E4 4210","8116C4E6 92F1","8116C4EA 0800","8116C4EE 05A0","8116C4F2 0800","8116C4F4 FFFF","8116C4F6 F3BC","8116C54C 0000","8116C54E 0018","8116C550 0000","8116C552 0018","8116C590 4210","8116C592 C0B1","8116C594 432A","8116C596 51DC","8116C598 4210","8116C59A 92F1","8116C59E 0800","8116C5A2 05A0","8116C5A6 0800","8116C5A8 FFFF","8116C5AA F3BC","D1064880 2000","8116C4E0 42E0","D1064880 2000","8116C4EA 07E0","D1064880 2000","8116C4F2 0680","D1064880 2000","8116C594 42E0","D1064880 2000","8116C59E 0820","D1064880 2000","8116C5A6 0980"],"options":null},"Tables\\MOVABLE TABLES\\Part 1":{"note":"You must use both parts for this cheat to work","data":["81052C24 06E1","81052C26 06E3","81052C2C 09F1","81052C2E 09EF","81052C30 06E2","81052C32 06E5","81052C38 09F1","81052C3A 09EF","81052C48 06E4","81052C4A 06E6","81052C50 09EF","81052C52 09EF","8116C3E4 0000","8116C3E6 0001","8116C3E8 0000","8116C3EA 0001","8116C498 0000","8116C49A 0003","8116C49C 0000","8116C49E 0003","8116C330 0000","8116C332 0000","8116C334 0000","8116C336 0000","D116C556 0000","8116C33A 0000","D116C33A 0000","8116C3EE 0000","D116C3EE 0000","8116C4A2 0000","D116C556 0001","8116C33A 0001","D116C33A 0001","8116C3EE 0001","D116C3EE 0001","8116C4A2 0001","D116C556 0002","8116C33A 0002","D116C33A 0002","8116C3EE 0002","D116C3EE 0002","8116C4A2 0002","D116C556 0003","8116C33A 0003","D116C33A 0003","8116C3EE 0003","D116C3EE 0003","8116C4A2 0003","D116C556 FFFF","8116C33A FFFF","D116C33A FFFF","8116C3EE FFFF","D116C3EE FFFF","8116C4A2 FFFF","D216C556 FFFF","81079B10 3F80","D1064886 2000","81079B10 3F81","D106488C 2000","81079B10 3F81","D1064892 2000","81079B10 3F81"],"options":null},"Tables\\MOVABLE TABLES\\Part 2":{"note":"You must use both parts for this cheat to work","data":["D116C33A FFFF","8116C382 0000","D116C382 0000","8116C386 0000","D116C386 0000","8116C38A 0000","D116C38A 0000","8116C38E 0000","D116C38E 0000","8116C436 0000","D116C436 0000","8116C43A 0000","D116C43A 0000","8116C43E 0000","D116C43E 0000","8116C442 0000","D116C442 0000","8116C4EA 0000","D116C4EA 0000","8116C4EE 0000","D116C4EE 0000","8116C4F2 0000","D116C4F2 0000","8116C4F6 0000","D116C594 42B4","D116C556 FFFF","8116C378 4335","D116C378 4335","8116C42C 4335","D116C42C 4335","8116C4E0 4335","D116C594 3DC7","D116C556 FFFF","8116C378 42B0","D116C378 42B0","8116C42C 42B0","D116C42C 42B0","8116C4E0 42B0","D1064880 2000","81079B10 3F81","D1079B10 3F81","D116C594 42B4","D116C556 FFFF","8116C378 42F0","D116C378 42F0","8116C42C 42F0","D116C42C 42F0","8116C4E0 42F0","D1079B10 3F81","8116C38A 0F00","D116C38A 0F00","8116C43E 0100","D116C594 3C93","8116C378 42B0","81052D18 0000","81052D1A 0000","D116C54C 0000","8116C54E 0018","D116C550 0000","8116C552 0018"],"options":null},"Tables\\Sabu Table":{"note":"Breakable/Fixable/Rebreakable/Refixable press Z to break, C-right + Cdown to fix","data":["8116C49A 000C","8116C49E 000C","8116C4DC 43CC","8116C4E0 42E6","8116C4E4 C2C5","8116C4EE 0800","8116C602 000C","8116C606 000C","8116C648 42E6","8116C644 43CC","8116C64C C314","81052C54 06E3","81052C5C 09EF","8116C6F8 43CC","8116C6FC 42F0","8116C700 C2F1","8116C70A 0400","8116C428 43CC","8116C430 C2D0","8116C42C 42F0","8116C43A 0C00","8116C6B6 0004","8116C6BA 0004","8116C3E6 0004","8116C3EA 0004","D1064880 2000","81005592 3F81","D1005592 3F81","8116C4EA 0F00","D1005592 3F81","8116C652 0100","D1005592 3F81","8116C4E0 4240","D1005592 3F81","8116C648 4240","D1064880 0005","81005CD4 3F83","D1005CD4 3F83","8116C4EA 0000","D1005CD4 3F83","8116C652 0000","D1005CD4 3F83","8116C4E0 42E6","D1005CD4 3F83","8116C648 42E6","D1005CD4 3F83","D1064880 2000","81005CD4 0000"],"options":null},"Ultimate Code\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF5E 0064"],"options":null},"Ultimate Code\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2B6 0064"],"options":null},"Ultimate Code\\Player 3":{"note":"","data":["D015A5D1 0015","8015B60E 0064"],"options":null},"Ultimate Code\\Player 4":{"note":"","data":["D015A5D1 0015","8015B964 0064"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B490 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B490 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B4A4 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B47C 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8106B4A4 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B47C 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B468 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B468 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B510 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B510 3DFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B564 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B53C 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B564 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B53C 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B528 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B528 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B610 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B610 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B624 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5FC 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B624 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5FC 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5E8 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5E8 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6D0 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6D0 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6E4 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6BC 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8006B6E4 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6BC 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6A8 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6A8 3FFF"],"options":null},"Z LADDER":{"note":"Press Z for the ladder to appear, sometimes there is an invisable ladder","data":["D1064880 2000","8116C768 0000","D1064880 2000","8116C76A 0019","D1064880 2000","8116C76C 0000","D1064880 2000","8116C76E 0019","D1064880 2000","8116C788 8104"],"options":null}},"4E69B487-FE18E290-C:45":{"Team 1 Scores 150 pts":{"note":"","data":["800A6689 0096"],"options":null},"Team 2 Scores 150 pts":{"note":"","data":["800A668B 0096"],"options":null}},"4EAA3D0E-74757C24-C:4A":{"Don't Hurt Mario\\Monsters":{"note":"","data":["A0339E27 0001"],"options":null},"Funny Mario Options\\Mario's Cap\\Off \u0026 in His Hand":{"note":"Here you can Choose Options with Mario with His Cap off \u0026 in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["80339E07 00??"],"options":{"Cap In Hand":"20","Flying Mario Cap In Hand":"28","Invisible Mario Cap In Hand":"22","Invisible Metal Mario Cap In Hand":"26","Metal Mario Cap In Hand":"24"}},"Funny Mario Options\\Mario's Cap\\On \u0026 An Extra in His Hand":{"note":"Here you can Choose Options with Mario with His Cap on \u0026 An Extra in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["80339E07 00??"],"options":{"Cap In Hand":"30","Flying Mario Cap In Hand":"38","Invisible Mario Cap In Hand":"32","Invisible Metal Mario Cap In Hand":"36","Metal Mario Cap In Hand":"34"}},"Have All\\175 Stars":{"note":"I have managed to put a have 175 Stars Option in for you,once the Code is activated, you will see it as a new option in Save Slot A.","data":["80207B0B 00FF","50000D02 0000","81207B0C FFFF"],"options":null},"Have All\\Maxed Out Coin Records For All Levels":{"note":"","data":["80207B25 00FF","81207B26 FFFF","81207B28 FFFF","81207B2A FFFF","81207B2C FFFF","81207B2E FFFF","81207B30 FFFF","81207B32 FFFF"],"options":null},"Have\\Debug Mode":{"note":"","data":["8032C658 00??"],"options":{"Off":"00","On":"01"}},"Have\\Level Select":{"note":"","data":["8032C64C 0001"],"options":null},"Infinite\\Energy \u0026 Breath":{"note":"","data":["80339EAE 0008"],"options":null},"Infinite\\Lives":{"note":"","data":["80339EAD 0064"],"options":null},"Mario's Cap\\Off Options":{"note":"Here you can Choose Options with Mario without His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["80339E07 00??"],"options":{"Flying Mario":"08","Invisible Flying Mario":"0A","Invisible Mario":"02","Invisible Metal Flying Mario":"0F","Mario No Cap":"01","Metal Flying Mario":"0D","Metal Mario":"04"}},"Mario's Cap\\On Options":{"note":"Here you can Choose Options with Mario with His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["80339E07 00??"],"options":{"Flying Mario":"19","Invisible Mario":"12","Invisible Metal Mario":"16","Metal Mario":"15"}},"Press GS for 255 Coins":{"note":"","data":["89339EA8 00FF"],"options":null},"Press L To Levitate":{"note":"Press L to levitate \u0026 Let go to land","data":["D0339C31 0020","81339E4C 4220","D0339E4D 0020","81339E0C 0300","D0339E4D 0020","81339E0E 0880"],"options":null}},"4F1E88F7-4A5A3F96-C:4A":{"Max HP":{"note":"","data":["812D71F8 03E7"],"options":null},"Max MP":{"note":"","data":["812D71FA 03E7"],"options":null},"Max Money":{"note":"","data":["811A70E9 0001","811A70EA 869F"],"options":null}},"4F48B0FD-8E7173F4-C:45":{"All Levels\\Infinite\\Energy":{"note":"","data":["800D5A9B 00FF"],"options":null},"All Levels\\Infinite\\Max Credits":{"note":"","data":["80075DDC 00FF"],"options":null},"All Levels\\Infinite\\Time":{"note":"","data":["800D5A97 0063"],"options":null},"All Levels\\Unlock All\\Levels - Options Menu":{"note":"","data":["80075DD6 FFFF","80075DD7 FFFF"],"options":null},"All Levels\\Unlock All\\Option Menu Items":{"note":"","data":["80075DD8 FFFF","80075DD9 FFFF"],"options":null},"Level\\0-0\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time and only use for that specific level Cheat","data":["8010BB0C 0000"],"options":null},"Level\\0-0\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8010BB2B 0001"],"options":null},"Level\\1-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801657DC 0000"],"options":null},"Level\\1-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801657FB 0001"],"options":null},"Level\\1-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCF9C 0000"],"options":null},"Level\\1-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCFBB 0001"],"options":null},"Level\\1-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801126EC 0000"],"options":null},"Level\\1-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8011270B 0001"],"options":null},"Level\\2-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BD29C 0000"],"options":null},"Level\\2-1\\Invincible":{"note":"","data":["801BD2BB 0001"],"options":null},"Level\\2-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B911C 0000"],"options":null},"Level\\2-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B913B 0001"],"options":null},"Level\\2-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7CEC 0000"],"options":null},"Level\\2-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7D0B 0001"],"options":null},"Level\\3-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801588EC 0000"],"options":null},"Level\\3-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8015890B 0001"],"options":null},"Level\\3-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B936C 0000"],"options":null},"Level\\3-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B938B 0001"],"options":null},"Level\\3-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801013CC 0000"],"options":null},"Level\\3-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["81100E08 C350"],"options":null}},"4F8AFC3A-F7912DF2-C:50":{"Have All Races":{"note":"","data":["81088756 FFFF"],"options":null},"Have All Tracks":{"note":"","data":["8108875A FFFF"],"options":null},"Infinite Credits":{"note":"","data":["8008D659 0005"],"options":null},"Unlock All Characters \u0026 Extra Cheats":{"note":"","data":["81088750 FFFF","81088752 FFFF"],"options":null}},"4FF5976F-ACF559D8-C:50":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2712 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE02F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802026F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE255 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FCB85 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFF6D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802027A5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DA0BD 0001"],"options":null}},"5001CF4F-F30CB3BD-C:45":{"Have All\\Characters Available":{"note":"","data":["810653C8 FFFF"],"options":null},"Have All\\Courts Available":{"note":"","data":["810653CC FFFF"],"options":null},"Press C-Down Easy Win Ring Shot - Time,Balls,Points":{"note":"Do Not use with Game Option","data":["D0066985 0004","80153527 0082","D0066985 0004","80153523 0082"],"options":null},"Press C-Down For Easy Win Ring Shot - Game":{"note":"Do Not use with Time,Balls,Points Option","data":["D0066985 0004","8015350B 0082"],"options":null},"Score\\Player 1":{"note":"","data":["8015344A 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}},"Score\\Player 2":{"note":"","data":["8015344B 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}}},"503EA760-E1300E96-C:50":{"Access Options\\All Car Upgrades":{"note":"","data":["50000704 0000","801505DF 0003"],"options":null},"Access Options\\All Tracks":{"note":"","data":["80150602 001F","80150603 00FF"],"options":null},"Always Place 1st":{"note":"","data":["801502CB 0001"],"options":null},"Unlimited Time":{"note":"","data":["801509ED 0045"],"options":null}},"5129B6DA-9DEF3C8C-C:45":{"Dig-Dug\\Infinite\\Credits":{"note":"","data":["800FE67E 0063"],"options":null},"Dig-Dug\\Infinite\\Lives\\Player 1":{"note":"","data":["800FE709 0002"],"options":null},"Dig-Dug\\Infinite\\Lives\\Player 2":{"note":"","data":["800FE76B 0004"],"options":null},"Dig-Dug\\Score\\Player 1":{"note":"","data":["810FE704 9999"],"options":null},"Dig-Dug\\Score\\Player 2":{"note":"","data":["810FE768 9999"],"options":null},"Galaga\\Infinite\\Credits":{"note":"","data":["800D76A4 0063"],"options":null},"Galaga\\Infinite\\Lives\\Both Players":{"note":"","data":["800D7510 0002"],"options":null},"Galaxian\\Infinite\\Credits":{"note":"","data":["800CD3D0 0063"],"options":null},"Galaxian\\Infinite\\Lives":{"note":"","data":["800CD3AD 0003"],"options":null},"Galaxian\\Score\\Player 1":{"note":"","data":["810BCE7C 9999"],"options":null},"Galaxian\\Score\\Player 2":{"note":"","data":["810BC780 9999"],"options":null},"Ms Pac-Man\\Eat All Ghosts All The Time":{"note":"","data":["810BC100 0000","810BC102 0000","810BC12C 0000","810BC12E 0000","810BC158 0000","810BC15A 0000","810BC184 0000","810BC186 0000"],"options":null},"Ms Pac-Man\\High Score Modifier":{"note":"","data":["810BC1F8 9999"],"options":null},"Ms Pac-Man\\Infinite\\Credits":{"note":"","data":["800BBE4B 0063"],"options":null},"Ms Pac-Man\\Infinite\\Lives\\Player 2":{"note":"","data":["800BBE27 0004"],"options":null},"Ms Pac-Man\\Infinite\\Lives\\Player P1":{"note":"","data":["800BBE23 0004"],"options":null},"Ms Pac-Man\\Score Modifier\\Player 1":{"note":"","data":["810BC7E8 9999"],"options":null},"Ms Pac-Man\\Score\\Player 2":{"note":"","data":["810BC7EC 9999"],"options":null},"Pac-Man\\Eat All Ghosts All The Time":{"note":"","data":["810A8760 0000","810A8762 0000","810A878C 0000","810A878E 0000","810A87B8 0000","810A87BA 0000","810A87E4 0000","810A87E6 0000"],"options":null},"Pac-Man\\High Score":{"note":"","data":["810A86F8 9999"],"options":null},"Pac-Man\\Infinite\\Credits":{"note":"","data":["800A8817 0063"],"options":null},"Pac-Man\\Infinite\\Lives\\Player 1":{"note":"","data":["800BBE23 0004"],"options":null},"Pac-Man\\Infinite\\Lives\\Player 2":{"note":"","data":["800BBE27 0004"],"options":null},"Pac-Man\\Score\\Player 1":{"note":"","data":["810A86F0 9999"],"options":null},"Pac-Man\\Score\\Player 2":{"note":"","data":["810A86F4 9999"],"options":null},"Pole Position\\Infinite Time":{"note":"","data":["8010A243 0063"],"options":null},"Pole Position\\Score":{"note":"","data":["81107BF8 9999"],"options":null}},"514B6900-B4B19881-C:4A":{"Beta Bottles Revenge Mode":{"note":"Bottles Revenge is a Beta mode from Banjo Tooie that the RWP team recently uncovered after an extraordinary amount of effort. Bottles the Spirit transforms into Bottles the Devil and posses enemies nearby and allows a second player hooked up to Pad 2 to play as that Posses character to try to foil Banjos Plans. As player one goes about its business, player two uses every enemy nearby to try to nab Banjo and take away some life. This mode is incredible, and you can control almost every enemy in the game: slot machines, flying creatures, uggers, zubbas...and this is just the beginning. (Congrats Rare Witch Project)","data":["801255C2 0001","80080881 0002"],"options":null},"Infinite\\Air":{"note":"","data":["80125222 42C8"],"options":null},"Infinite\\Energy\\Banjo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","8011591F 000A","80115920 000A"],"options":null},"Infinite\\Energy\\Banjo and Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","81115A04 0A0A"],"options":null},"Infinite\\Energy\\Bee":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","80115913 000A","80115914 000A"],"options":null},"Infinite\\Energy\\Detonator":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","8111592E 0A0A"],"options":null},"Infinite\\Energy\\Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","81115922 0A0A"],"options":null},"Infinite\\Energy\\Mumbo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","81115928 0A0A"],"options":null},"Infinite\\Energy\\Snowball":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","80115907 0005"],"options":null},"Infinite\\Energy\\Stony":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","80115919 000A","8011591A 000A"],"options":null},"Infinite\\Energy\\Submarine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","80115925 000A","80115926 000A"],"options":null},"Infinite\\Energy\\T-Rex Baby":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","8011593F 000A","80115940 000A"],"options":null},"Infinite\\Energy\\Washing Machine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","81115916 0A0A"],"options":null},"Instant Warp\\Options\\Cauldron Keep":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"5D Cauldron Keep":"01","5E The gatehouse":"01","5F Tower of Tragedy Quiz":"01","60 Gun chamber":"01","6A Gun room still":"01","7B Crazy Castle Stockade balloon burst multi":"01","7C Crazy Castle Stockade Jump the hoops multi":"01","7D Grunty Industries packing game":"01","80 Colosseum kickball arena":"01","86 Dodgems":"01"}},"Instant Warp\\Options\\Cloud Cuckoo Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"36 Cloud Cuckoo Land 1":"01","37 Inside the trashcan":"01","38 Inside the cheesewedge":"01","39 Zubba's nest":"01","3A Central cavern":"01","3D Inside the pot o gold":"01","3E Mumbo's skull":"01","3F Mingy jongo's skull":"01","40 Humba wumba's wigwam":"01","61 Cloud Cuckoo Land 2":"01","85 Trash can mini":"01","88 Zubba's nest multi":"01"}},"Instant Warp\\Options\\Glitter Gulch Mine":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"26 Water supply pipe":"01","63 Ordnance Storage entrance":"01","64 Ordnance Storage game":"01","65 Ordnance Storage game Multi":"01","6F Testing":"01","70 Testing":"01","71 Mumbo's skull":"01","C7 Mine":"00","CA Fuel depot":"00","CB Crushing shed":"00","CC Flooded caves":"00","CD Water storage":"00","CE Waterfall cavern":"00","CF Power hut basement":"00","D0 Chuffy's cab":"00","D1 Inside chuffy's boiler boss":"00","D2 Gloomy caverns":"00","D3 Generator caverns":"00","D4 Power hut":"00","D5 Wumba's wigwam":"00","D7 Train station":"00","D8 Prospectors hut":"00","D9 Mumbo's hut":"00","DA Toxic gas cave":"00","DB Canary cave":"00","DC Ordnance storage":"00","E9 Humba":"00"}},"Instant Warp\\Options\\Grunty Industries":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"00 Outside":"01","01 Inside":"01","02 Train station":"01","03 Workers quarters":"01","04 Trash compactor":"01","05 Elevator shaft":"01","06 Floor 2":"01","07 Floor 2 \"electromagnet chamber\"":"01","08 Floor 3":"01","09 Floor 3 \"boiler plant\"":"01","0A Floor 3 \"packing room\"":"01","0B Floor 4":"01","0C Floor 4 \"cable room\"":"01","0D Floor 4 \"quality control\"":"01","0E Floor 5":"01","0F Basement":"01","10 Basement \"repair depot":"01","11 Basement \"waste disposal\"":"01","25 Water supply pipe":"01","62 Floor 4 \"clinkers cavern\"":"01","72 Mumbo's skull":"01","87 Sewer entrance":"01"}},"Instant Warp\\Options\\Hailfire Peaks":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"27 Lava side":"01","28 Icy side":"01","29 Lava train station":"01","2A Ice train station":"01","2B Chilli billi":"01","2C Chilly willy":"01","2D Colosseum kickball stadium lobby":"01","31 Boggy's igloo":"01","32 Icicle grotto":"01","33 Inside the volcano":"01","68 Icy side still":"01"}},"Instant Warp\\Options\\Isle O Hags":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"4F Wooded Hollow":"01","50 Heggy's egg shed":"01","51 Jiggywiggy's temple":"01","52 Plateau":"01","53 Plateau \"Honey B's Hive\"":"01","54 Pine Grove":"01","55 Cliff top":"01","56 Cliff top Mumbo's skull":"01","5A wasteland":"01","5B inside another digger tunnel":"01","5C Quagmire":"01"}},"Instant Warp\\Options\\Jinjo Village":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"42 Jinjo Village":"01","43 Bottles house":"01","44 King Jingalings throne room":"01","45 Green Jinjo's House":"01","46 Black Jinjo's House":"01","47 Yellow Jinjo's House":"01","48 Blue Jinjo's House":"01","4A Brown Jinjo's House":"01","4B Orange Jinjo's House":"01","4C Purple Jinjo's House":"01","4D Red Jinjo's House":"01","4E White Jinjo's House":"01"}},"Instant Warp\\Options\\Jolly Roger's Lagoon":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"81 sea bottom cavern":"01","82 submarine multi":"01","A7 Jolly Roger's Lagoon":"01","A8 Atlantis":"01","A9 Seabottom":"01","ED Jolly's":"00","EE Pawno's emporium":"00","EF mumbo's skull":"00","F4 Ancient Swimming Baths":"00","F6 Electric Eels lair":"00","F7 Seaweed Sanctum":"00","F8 Inside the big fish":"00","FA temple of the fishes":"00","FF Blubber's wave race hire":"00"}},"Instant Warp\\Options\\Mayahem Temple":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"66 Multi":"01","67 Still":"01","77 Targitzan's Slighty Sacred Temple":"01","78 Inside Targitzans Temple":"01","79 Targitzan Temple Lobby":"01","7A Targitzan's Temple Boss":"01","7F Mayan Kickball Arena":"01","B6 Humba's Wigwam":"00","B7 Mumbo's skull":"00","B8 The Temple":"00","B9 Prison Compound":"00","BC Code chamber":"00","C4 Jade Snake Grove":"00","C5 Treasure Chamber":"00","C6 Kickball Arena":"00","C8 Kickball Arena":"00","C9 Kickball Arena":"00"}},"Instant Warp\\Options\\Not sure":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"21 Inside Chuffy's wagon":"01","34 Mumbo's Skull":"01","35 Humba Wumba's wigwam 1":"01","41 Inside the digger tunnel":"01","43 Bottles house":"01","57 Humba Wumba's wigwam 2":"01","69 Bottles house still":"01","8A HAG Inside":"01","9A HAG1 Final Boss":"01","9B Jingalings Zombified Palace":"01","A6 Smuggler cavern":"01","F9 Mr Patch":"00","FC Lord woo fak fak":"00"}},"Instant Warp\\Options\\Spiral Mountain":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"73 Banjo's house":"01","AD Grunty's Old Lair":"00","AE Behind The Waterfall":"00","AF Top Of Castle":"00"}},"Instant Warp\\Options\\Terrydacty Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"12 Terrydacty Land":"01","13 Terry's nest":"01","14 Train station":"01","15 Oogle boogles cave":"01","16 Inside the mountain":"01","17 River passage":"01","18 Styracosaurus family cave":"01","19 Unga bunga's cave":"01","1A Stomping plains":"01","1B Bonfire caverns":"01","1E Humba's Wigwam":"01","23 Inside chompa's belly":"01","83 Chompa's belly multi":"01"}},"Instant Warp\\Options\\Witchy World":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"24 Saucer of Peril":"01","3B Crazy castle stockade \"sop\"":"01","3C Star spinner \"sop\"":"01","76 Mumbo's skull":"01","D6 Witcy World":"00","DD Dodgem dome lobby":"00","DE Dodgem challenge \"1 vs 1\"":"00","DF Dodgem challenge \"2 vs 1\"":"00","E0 Dodgem challenge \"3 vs 1\"":"00","E1 Crazy castle stockade":"00","E2 Crazy castle lobby":"00","E3 Crazy castle pump room":"00","E4 Balloon burst game":"00","E5 Hoop hurry game":"00","E6 Star spinner":"00","E7 The inferno":"00","EA Cave of horrors":"00","EB Haunted cavern":"00","EC Train station":"00"}},"Multi-Player\\Everyone Infinite All Eggs Multiplayer":{"note":"All blaster modes specifically.[ Thanks retroben, awesome work on this!]","data":["810E5F38 0C04","810E5F3A 5A80","81116A00 3C08","81116A02 8008","81116A04 8108","81116A06 3970","81116A08 1100","81116A0A 0010","81116A0C 0000","81116A0E 0000","81116A10 3C08","81116A12 8008","81116A14 8D08","81116A16 3970","81116A18 0008","81116A1A 4200","81116A1C 0008","81116A1E 4202","81116A20 0008","81116A22 4080","81116A24 3C04","81116A26 8000","81116A28 0104","81116A2A 4020","81116A2C 3C04","81116A2E 2406","81116A30 2484","81116A32 0064","81116A34 AD04","81116A36 31C4","81116A38 3C04","81116A3A 2408","81116A3C 2484","81116A3E FFFE","81116A40 AD04","81116A42 31CC","81116A44 3C04","81116A46 8013","81116A48 8C84","81116A4A CF94","81116A4C 0802","81116A4E 1DFE","81116A50 0000","81116A52 0000"],"options":null},"Multi-Player\\Infinite Health\\Player 1":{"note":"","data":["8012F701 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 2":{"note":"","data":["8012F705 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 3":{"note":"","data":["8012F709 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 4":{"note":"","data":["8012F70D 0064"],"options":null},"Play As":{"note":"To use this cheat, put the cheat on, then press L as you walk through a door to become that chosen character","data":["D0080845 0020","801211FC 00??"],"options":{"Banjo":"0A","Banjo and Kazooie":"01","Bee":"06","Detonator":"0F","Golden Goliath":"0E","Kazooie":"0B","Mumbo":"0D","Snowball":"02","Stony":"08","Submarine":"0C","T-rex baby":"12","T-rex daddy":"13","Truck":"10","Washing machine":"07"}}},"5168D520-CA5FCD0D-C:4A":{"Have Zero Time all Levels":{"note":"","data":["50000B04 0000","81386B44 3000"],"options":null},"Infinite\\Air":{"note":"","data":["81386ACE 0E10"],"options":null},"Infinite\\Always Have All Jinjos":{"note":"","data":["80386ABB 00FF"],"options":null},"Infinite\\Eggs":{"note":"","data":["80386AA7 00FF"],"options":null},"Infinite\\Gold Feathers":{"note":"","data":["80386AB3 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["80386AC3 0008","80386AC7 0008"],"options":null},"Infinite\\Jiggies":{"note":"","data":["80386B0B 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["80386ACB 00FF"],"options":null},"Infinite\\Mumbo Tokens":{"note":"","data":["80386B07 00FF"],"options":null},"Infinite\\Notes":{"note":"Just collect one Note to Have 255 Notes in all Worlds.","data":["80386B32 00FF","80386AA2 0001"],"options":null},"Infinite\\Red Feathers":{"note":"","data":["80386AAF 00FF"],"options":null}},"519EA4E1-EB7584E8-C:4A":{"Have All\\Boards":{"note":"","data":["8108C9C4 0003","8108C9C6 FFFF"],"options":null},"Have All\\Characters":{"note":"","data":["8108C9B8 07FF"],"options":null},"Have All\\Difficulties":{"note":"","data":["8108C9B0 0700"],"options":null},"Have All\\Tracks":{"note":"","data":["8108C9BC BFFE"],"options":null},"Low Timer":{"note":"","data":["8008C8A4 0000","8008C8A6 0000"],"options":null},"Max\\50000 Stunt Points":{"note":"","data":["8108C978 C350"],"options":null},"exhalatio audio hack":{"note":"","data":["81052760 AD99"],"options":null}},"51D29418-D5B46AE3-C:50":{"Access All In-Game Cheats":{"note":"","data":["81118E9A 0001"],"options":null},"Activate All In-Game Cheats":{"note":"","data":["50000D02 0000","81118E82 0101"],"options":null},"All Silver \u0026 Gold Coins (Circuit - Using C/P)":{"note":"Circuit Mode - Using Controller Pack","data":["50000660 0000","811C542C FFFF"],"options":null},"All Silver \u0026 Gold Coins (Single Race + Practice Mode)":{"note":"Single, Practice \u0026 Circuit Mode","data":["50000660 0000","8116375C FFFF"],"options":null},"All Silver \u0026 Gold Coins (Stunt Mode)":{"note":"Stunt Mode","data":["50000440 0000","81163BBC FFFF"],"options":null},"Always 1st":{"note":"","data":["80177D4E 0000"],"options":null},"Easy Difficulty level":{"note":"","data":["80177A3C 0000"],"options":null},"Extended Time In Battle \u0026 Stunt Mode To 2.05 Hours":{"note":"","data":["811633BA 457C","811636EE 4514"],"options":null},"Laps To Race":{"note":"","data":["81177A18 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Max Points Stunt Mode":{"note":"","data":["81177A55 3AFF","81177A57 F3FA"],"options":null},"Max Race Points":{"note":"","data":["8117CE22 03E7"],"options":null},"Number Of Drones In Race":{"note":"","data":["81163240 00??"],"options":{"1 Drone":"01","2 Drones":"02","3 Drones":"03","4 Drones":"04","5 Drones":"05","6 Drones":"06","7 Drones":"07","8 Drones":"08","9 Drones":"09"}},"Stunt Wings All Modes":{"note":"Where Wings Are Available Press D-Pad Up On Wing Select","data":["D017055A 0004","50000C02 0000","811139D0 0202"],"options":null},"Stunt Wings Circuit Mode":{"note":"Press D-Pad Up On Wing Select","data":["D017055A 0004","50000C02 0000","801756A1 0202"],"options":null}},"52F78805-8B8FCAB7-C:45":{"Always Win Judge's Decision\\Player 1":{"note":"","data":["8020B777 FFFF","802098AF 0000"],"options":null},"Always Win Judge's Decision\\Player 2":{"note":"","data":["802098AF FFFF","8020B777 0000"],"options":null},"Enable Boro":{"note":"","data":["80307349 0001"],"options":null},"Have 1 Star\\Abdul":{"note":"","data":["80307353 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["8030734F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80307352 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80307351 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80307354 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80307350 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["8030734E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80307355 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80307356 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["802098A1 0000","802047C3 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802047C7 0000","8020B769 0000"],"options":null},"Level Select":{"note":"","data":["8022A84C 00??"],"options":{"Blue Hell Mountain":"0C","Coliseum":"04","Desert":"01","Fire Mountain":"00","Highlands":"02","Hong Kong":"03","Joker's Room":"0B","Jungle":"05","Ninja Room":"06","Observation":"09","Palace":"0D","Pasture":"0A","Suspension Bridge":"07"}},"Play As\\Player 1":{"note":"","data":["802EF622 00??"],"options":{"Abdul":"05","Bob":"01","Boro":"08","Joker":"0B","Leon":"04","Meiling":"03","Ninja":"06","No Clue":"0D","Pierre":"02","Ryuji":"00","The Master":"0C","Tomahawk":"07","Ushi":"0A","Valerie":"09"}},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EF67B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0209757 0000","80209757 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020B61F 0000","8020B61F 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810ADBDC 3F80"],"options":null}},"5306CF45-CBC49250-C:45":{"Car Upgrades\\'63 Muscle Car":{"note":"","data":["8015053F 0005"],"options":null},"Car Upgrades\\All-Terrain Vehicle":{"note":"","data":["8015054F 0004"],"options":null},"Car Upgrades\\Devastator":{"note":"","data":["80150547 0005"],"options":null},"Car Upgrades\\Italia P69":{"note":"","data":["8015054B 0005"],"options":null},"Car Upgrades\\La Bomba":{"note":"","data":["80150543 0005"],"options":null},"Car Upgrades\\Police Car":{"note":"","data":["80150557 0004"],"options":null},"Car Upgrades\\School Bus":{"note":"","data":["80150553 0004"],"options":null},"Infinite Time":{"note":"","data":["8015094D 0095"],"options":null},"Play Level Modifier":{"note":"","data":["80150963 00??"],"options":{"Appalachia":"0C","Arizona":"07","Beverly Hills":"04","Chicago":"0A","Cruise The USA":"0E","Death Valley":"06","Golden Gate Park":"00","Grand Canyon":"08","Indiana":"0B","Iowa":"09","LA Freeway":"05","Redwood Forest":"03","San Francisco":"01","US 101":"02","Washington DC":"0D"}},"Player 1\\Always First Place":{"note":"","data":["8015022B 0001"],"options":null},"Player 1\\Always Have Fastest Car":{"note":"","data":["8015021A 0001"],"options":null},"Player 1\\Gearbox Type Modifier":{"note":"","data":["80150213 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 1\\Lights \u0026 Sirens For Police Car \u0026 School Bus P1":{"note":"","data":["8115053A 0001","8114E38A 0001"],"options":null},"Player 2\\Always First Place":{"note":"","data":["801505C7 0001"],"options":null},"Player 2\\Always Have Fastest Car":{"note":"","data":["801505B6 0001"],"options":null},"Player 2\\Gearbox Type Modifier":{"note":"","data":["801505AF 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 2\\Lights \u0026 Sirens For Police Car \u0026 School Bus P2":{"note":"","data":["811508D6 0001","8114E3A2 0001"],"options":null},"Stop Elapsed Time And No Traffic":{"note":"","data":["80150949 0000"],"options":null}},"5326696F-FE9A99C3-C:45":{"Have Alien Artifact":{"note":"","data":["8004DC5F 0001"],"options":null},"Infinite Ammo All Weapons":{"note":"","data":["50001102 0000","81048146 8000"],"options":null},"Infinite\\Greece":{"note":"","data":["81052B18 0098","81052B1A 967F"],"options":null},"Infinite\\Health":{"note":"","data":["810DDCEC 0258"],"options":null},"Item Modifier":{"note":"","data":["8004DC4F ????"],"options":{"All Items":"FFFF","Crank":"0040","Hangar Key":"0400","Heirglyph Map Piece":"0100","Howitzer Shells":"0002","Nothing":"0000","Windmill Cog":"0080"}},"Level Select":{"note":"","data":["80047F93 00??"],"options":{"America":"03","Comet":"05","Greece":"01","Java":"02","Siberia":"04"}},"No Humans Killed":{"note":"","data":["8104816A 0000"],"options":null},"Press L To Walk Over Water, Climb Hills":{"note":"","data":["D00475D9 0020","8104DCD2 0808"],"options":null},"Weapon Select\\1st Position":{"note":"","data":["80048138 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\2nd Position":{"note":"","data":["80048139 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\3rd Position":{"note":"","data":["8004813A 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\4th Position":{"note":"","data":["8004813B 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\5th Position":{"note":"","data":["8004813C 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\6th Position":{"note":"","data":["8004813D 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\7th Position":{"note":"","data":["8004813E 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\8th Position":{"note":"","data":["8004813F 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}}},"5354631C-03A2DEF0-C:45":{"All Equipment Upgrades":{"note":"","data":["801EF6DD 0023","811EF72A 201B","801EF6BC 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03E6B3B 0000","801EF672 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801EF6F2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801EF6F3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801EF6F4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801EF6F5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801EF6F6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801EF6F7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801EF6E5 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801EF6EB 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801EF6F1 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Fight Demo Majora's Mask":{"note":"With this code,load the game \u0026 put the cheat on. then press start to apear in the Demo mode.","data":["8016A718 0020"],"options":null},"Fog\\Blue":{"note":"","data":["80166108 0020"],"options":null},"Fog\\Pink":{"note":"","data":["8016610C 0020"],"options":null},"Fog\\Yellow":{"note":"","data":["80166110 0020"],"options":null},"Have\\All Masks":{"note":"","data":["801EF6F8 003E","801EF6F9 0038","801EF6FA 0047","801EF6FB 0045","801EF6FC 0040","801EF6FD 0032","801EF6FE 003A","801EF6FF 0046","801EF700 0039","801EF701 0042","801EF702 0048","801EF703 0033","801EF704 003C","801EF705 003D","801EF706 0037","801EF707 003F","801EF708 0036","801EF709 0034","801EF70A 0043","801EF70B 0041","801EF70C 003B","801EF70D 0044","801EF70E 0049","801EF70F 0035"],"options":null},"Have\\All Quest Status Items":{"note":"","data":["801EF72D 0005","811EF72E F7CF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801EF6E2 0002"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801EF6E3 0003"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801EF6E4 0004"],"options":null},"Have\\Bombchu":{"note":"","data":["801EF6E7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801EF6E6 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801EF6E9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801EF6E8 0008"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801EF6F0 0010"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801EF6E1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801EF6EF 000F"],"options":null},"Have\\Item Modifier":{"note":"","data":["801EF6F0 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\Lens of Truth":{"note":"","data":["801EF6EE 000E"],"options":null},"Have\\Magic Beans":{"note":"","data":["801EF6EA 000A"],"options":null},"Have\\Ocarina of Time":{"note":"","data":["801EF6E0 0000"],"options":null},"Have\\Pictograph":{"note":"","data":["801EF6ED 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801EF6EC 000C"],"options":null},"Infinite\\Health":{"note":"","data":["811EF6A6 0140"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811EF6A4 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"","data":["801EF711 0063","801EF716 0063","801EF717 0063","801EF718 0063","801EF719 0063","801EF71A 0063","801EF71C 0063","801EF71D 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801EF6A9 0060","811EF6B0 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811EF6AA 03E7"],"options":null},"Maximum Visibility":{"note":"","data":["80166118 0020"],"options":null},"Play As":{"note":"","data":["801EF690 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03E6B3B 0020","813FFE18 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You have been warned.","data":["801EF6BC 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01FB876 0008","811EF686 FFFD","D01FB876 0004","811EF686 0000","D01FB876 0002","811EF686 FFFE"],"options":null},"Use C-Buttons Anywhere":{"note":"This code allows you to use C-Button Items where you normally can't use them.","data":["811F3588 0000","811F358A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["D03E6B3A 0000","803FF395 0001","813FF39A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"535DF3E2-609789F1-C:4A":{"99 Points":{"note":"","data":["801CC273 0063"],"options":null},"Always First Place":{"note":"","data":["801C386F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801C3B53 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801C3B2E 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801C3997 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801C3FBA 0005","801C425A 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801C399F 0000"],"options":null},"Super Speed":{"note":"","data":["801C3997 0005","D0155221 0010","801C3997 0020"],"options":null}},"53D440E7-7519B011-C:45":{"Boss Cannot Move\\Dino":{"note":"","data":["811DFCF4 44A0"],"options":null},"Boss Cannot Move\\Octo":{"note":"","data":["811E045C 44A0"],"options":null},"Enable All Cheats":{"note":"Go into Options \u0026 then Magic Codes. Then Code list to turn off \u0026 on what you want.","data":["50000401 0000","810DFD9C FFFF"],"options":null},"Have All\\50 Bananas\\Ancient Lake":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E32CD 0032"],"options":null},"Have All\\50 Bananas\\Boulder Canyon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E61ED 0032"],"options":null},"Have All\\50 Bananas\\Crescent Island":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3A2D 0032"],"options":null},"Have All\\50 Bananas\\Darkmoon Caverns":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E5D0D 0032"],"options":null},"Have All\\50 Bananas\\Everfrost Peak":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4F5D 0032"],"options":null},"Have All\\50 Bananas\\Fossil Canyon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E676D 0032"],"options":null},"Have All\\50 Bananas\\Frosty Village":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E5F4D 0032"],"options":null},"Have All\\50 Bananas\\Greenwood Village":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4AAD 0032"],"options":null},"Have All\\50 Bananas\\Haunted Woods":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4A1D 0032"],"options":null},"Have All\\50 Bananas\\Hot Top Volcano":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E462D 0032"],"options":null},"Have All\\50 Bananas\\Jungle Falls":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E44CD 0032"],"options":null},"Have All\\50 Bananas\\Pirate Lagoon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E295D 0032"],"options":null},"Have All\\50 Bananas\\Snowball Valley":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E49FD 0032"],"options":null},"Have All\\50 Bananas\\Spacedust Alley":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E654D 0032"],"options":null},"Have All\\50 Bananas\\Spaceport Alpha":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3C6D 0032"],"options":null},"Have All\\50 Bananas\\Star City":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E578D 0032"],"options":null},"Have All\\50 Bananas\\Treasure Caves":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E371D 0032"],"options":null},"Have All\\50 Bananas\\Walrus Cove":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4A7D 0032"],"options":null},"Have All\\50 Bananas\\Whale Bay":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3AFD 0032"],"options":null},"Have All\\50 Bananas\\Windwill Plains":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E9BBD 0032"],"options":null},"Have All\\99 Balloons":{"note":"","data":["810DFD9A FFFF","801FCBED 0063"],"options":null},"Have All\\Amulets":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FC9E6 FFFF"],"options":null},"Have All\\Keys":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FC9D8 FFFF"],"options":null},"Have All\\Levels Completely Finished":{"note":"","data":["50000904 0000","801FCAF7 00FF","801FCB1F 00FF","801FCB27 00FF","50000404 0000","801FCB2F 00FF","801FCB4F 00FF","50000804 0000","801FCB53 00FF"],"options":null},"Have All\\Silver Coins\\Ancient Lake":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E34AA 0008"],"options":null},"Have All\\Silver Coins\\Boulder Canyon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E63CA 0008"],"options":null},"Have All\\Silver Coins\\Crescent Island":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E3C0A 0008"],"options":null},"Have All\\Silver Coins\\Everfrost Peak":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E513A 0008"],"options":null},"Have All\\Silver Coins\\Fossil Canyon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E694A 0008"],"options":null},"Have All\\Silver Coins\\Frosty Village":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E612A 0008"],"options":null},"Have All\\Silver Coins\\Greenwood Village":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4C8A 0008"],"options":null},"Have All\\Silver Coins\\Haunted Woods":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4BFA 0008"],"options":null},"Have All\\Silver Coins\\Hot Top Volcano":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E480A 0008"],"options":null},"Have All\\Silver Coins\\Jungle Falls":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E513A 0008"],"options":null},"Have All\\Silver Coins\\Pirate Lagoon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E2B3A 0008"],"options":null},"Have All\\Silver Coins\\Snowball Valley":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4BDA 0008"],"options":null},"Have All\\Silver Coins\\Treasure Caves":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E38FA 0008"],"options":null},"Have All\\Silver Coins\\Walrus Cove":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4C5A 0008"],"options":null},"Have All\\Silver Coins\\Whale Bay":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E3CDA 0008"],"options":null},"Have All\\Silver Coins\\Windmill Plains":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E9D9A 0008"],"options":null},"Have All\\The pieces of the TT thing":{"note":"","data":["801FC9E6 0004"],"options":null},"Have All\\Trophies":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FC9DE FFFF"],"options":null},"Infinite\\Power Ups\\Ancient Lake":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E6A2B 0010"],"options":null},"Infinite\\Power Ups\\Boulder Canyon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E8D4B 0010"],"options":null},"Infinite\\Power Ups\\Crescent Island":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E718B 0010"],"options":null},"Infinite\\Power Ups\\Darkmoon Caverns":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E96AB 0010"],"options":null},"Infinite\\Power Ups\\Everfrost Peak":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E871B 0010"],"options":null},"Infinite\\Power Ups\\Fossil Canyon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E9ECB 0010"],"options":null},"Infinite\\Power Ups\\Frosty Village":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E96A6 0010"],"options":null},"Infinite\\Power Ups\\Greenwood Village":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E820B 0010"],"options":null},"Infinite\\Power Ups\\Haunted Woods":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E817B 0010"],"options":null},"Infinite\\Power Ups\\Hot Top Volcano":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E477B 0010"],"options":null},"Infinite\\Power Ups\\Jungle Falls":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E45BB 0010"],"options":null},"Infinite\\Power Ups\\Pirate Lagoon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E54B6 0010"],"options":null},"Infinite\\Power Ups\\Snowball Valley":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E815B 0010"],"options":null},"Infinite\\Power Ups\\Space Dust Alley":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E904B 0010"],"options":null},"Infinite\\Power Ups\\Spaceport Alpha":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E676B 0010"],"options":null},"Infinite\\Power Ups\\Starcity":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E8EEB 0010"],"options":null},"Infinite\\Power Ups\\Treasure Cove":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E6E7B 0010"],"options":null},"Infinite\\Power Ups\\Walrus Cove":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E81DB 0010"],"options":null},"Infinite\\Power Ups\\Whale Bay":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E665B 0010"],"options":null},"Infinite\\Power Ups\\Windmill Plains":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801EC6BB 0010"],"options":null}},"53ED2DC4-06258002-C:50":{"Always 1st":{"note":"","data":["80121C8C 0001","80125489 0001"],"options":null},"Enable In-Game cheat Menu \u0026 Cheats":{"note":"Here you can Activate the IN-Built Cheats Menu. At the Front Screen Just Press C-Button Right.This will open up All Tracks \u0026 Characters In Free Play \u0026 Time Attack. Also In A Race, Press The Start/Pause button to Access the In-Cheat-Menu Option.You can also choose how many Pod's Racers are in the Race \u0026 also how many Laps are in the Race in Free Play \u0026 Time Attack","data":["810A0D27 000A","810A0D2A FFFF"],"options":null},"Have All Tracks Completed":{"note":"","data":["8111CB0A FFFF","8111CB0C 3FFF","8111CB0E 3FFF","8111CB10 3FFF","8111CB12 00FF"],"options":null},"Infinite Truguts":{"note":"","data":["8111CB1A FFFF","8111CB18 7FFF"],"options":null},"No Damage":{"note":"If when Racing Your Pod Over heats \u0026 bursts into flames Press \"R\" \u0026 you will Repair the Damage.","data":["800AA5D7 0001"],"options":null},"Unlock All Tracks \u0026 Characters":{"note":"When using Unlock All Tracks \u0026 Characters For can to pick \u0026 choose what ever you want to play As \u0026 where ;)","data":["8011CB08 00FF","8011CB09 00FF","8011CB0B 00FF","8111CB08 FFFF","8111C80A FFFF","8011CB14 007D","8111CB16 FFFF"],"options":null}},"54310E7D-6B5430D8-C:50":{"Always 1st\\Player 1":{"note":"","data":["810A9248 0001"],"options":null},"Freeze Checkpoint Timer":{"note":"","data":["810CE1D2 BCCC"],"options":null},"Infinite Auto Pilot\\AG Systems\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BCE47 005B"],"options":null},"Infinite Auto Pilot\\Auricom\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC1E7 005B"],"options":null},"Infinite Auto Pilot\\Direx\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC817 005B"],"options":null},"Infinite Auto Pilot\\Feisar 1\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["811BC4FE 005B"],"options":null},"Infinite Auto Pilot\\Piranah\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC817 005B"],"options":null},"Weapon Select\\AG Systems":{"note":"","data":["811BC1DE ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Auricom":{"note":"","data":["811BCE3E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Direx":{"note":"","data":["811BC80E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Feisar 1":{"note":"","data":["811BC4F6 ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Piranah":{"note":"","data":["811BC80E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"[In-Game Cheat Unlock]\\Cyclone Weapon":{"note":"","data":["800924C4 00??"],"options":{"Off":"00","On":"01"}},"[In-Game Cheat Unlock]\\Infinite Ammo\\Player 1":{"note":"","data":["80091254 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Ammo\\Player 2":{"note":"","data":["80092970 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Shield Energy\\Player 1":{"note":"","data":["80091256 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Shield Energy\\Player 2":{"note":"","data":["80092972 0001"],"options":null},"[In-Game Cheat Unlock]\\[Ultimate Unlock All]":{"note":"This Unlocks All Levels, Tracks, Velocitar and Super Combo, Piranha 2 Ship, Cyclone Weapons Power Up and all 28 Gold Awards unlocked","data":["80091255 0001","8009125C 0020"],"options":null}},"55D4C4CE-7753C78A-C:45":{"Add\\Building":{"note":"","data":["8006A1C0 0001"],"options":null},"Add\\Satellite":{"note":"","data":["8006A1C3 0001"],"options":null},"Have\\All\\Levels Unlocked \u0026 Completed For Americans":{"note":"","data":["8006A1F0 0011"],"options":null},"Have\\All\\Levels Unlocked \u0026 Completed For Black Dogs":{"note":"","data":["8006A1F3 000A"],"options":null},"Have\\All\\Levels Unlocked \u0026 Completed For Soviets":{"note":"","data":["8006A1F1 0008"],"options":null},"Have\\All\\Missions Open And Complete For Americans":{"note":"","data":["8006A1EC 0011"],"options":null},"Have\\All\\Missions Open And Complete For Black Dogs":{"note":"","data":["8006A1EF 000A"],"options":null},"Have\\All\\Missions Open And Complete For Soviets":{"note":"","data":["8006A1ED 0008"],"options":null},"Infinite\\Ammo":{"note":"","data":["8006A1C1 0001"],"options":null},"Infinite\\Armor":{"note":"","data":["8006A1C2 0001"],"options":null},"Infinite\\Pilots":{"note":"","data":["811FBCCE FFFF"],"options":null},"Infinite\\Scrap Collected":{"note":"","data":["811FBCC6 FFFF"],"options":null},"Infinite\\Ship Health":{"note":"","data":["811DF6DE 0BA9"],"options":null},"Infinite\\Shots For Sniper Rifle":{"note":"","data":["811DA682 0003"],"options":null},"Infinite\\Weapons":{"note":"","data":["811DF6EA 04B0"],"options":null},"Level Select":{"note":"","data":["8006A1F5 0001"],"options":null},"Max\\Pilot Limits":{"note":"","data":["811FBCD2 FFFF"],"options":null},"Max\\Scrap Limit":{"note":"","data":["811FBCCA FFFF"],"options":null}},"569433AD-F7E13561-C:45":{"Infinite Health":{"note":"","data":["81086BCA 0038","800BAF97 0007"],"options":null}},"5753720D-2A8A884D-C:44":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C24D2 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE02F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802024B5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE015 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FC945 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFD2D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","80202565 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801D9E7D 0001"],"options":null}},"57BFF74D-DE747743-C:50":{"In-Game Cheats\\Access Cheat menu":{"note":"","data":["50000504 0000","80101308 0001"],"options":null},"In-Game Cheats\\Enable\\All Items":{"note":"To access simply pause in game play \u0026 then unpause.","data":["801012EC 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Invincibility":{"note":"","data":["802AA818 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Monsters":{"note":"","data":["802AA98B 00??"],"options":{"Are Active":"00","Are Gone":"01"}},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5E06 0064","812A5E4E 0064","812A5E5E 00C8","812A5E48 1900","812A5E18 04B0","812A5E4A 0640","812A5DE8 0960","812A5E4C 0190"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Keys":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5E03 000F"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A5E77 0001","50000F02 0000","812A5DBA 03E7"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Infinite Health (All Levels)":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on Single-Player, Co-Operative and DUKEMATCH, All Levels.","data":["8024D557 0064","802A5DB9 0064"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A6192 0064","812A61DA 0064","812A61EA 00C8","812A61D4 1900","812A61A4 04B0","812A61D6 0640","812A6174 0960","812A61D8 0190"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A6203 0001","50000E02 0000","812A6148 03E7"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on DUKEMATCH, All Levels.","data":["8024BC3F 0064","802A6145 0064"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A651E 0064","812A6566 0064","812A6576 00C8","812A6560 1900","812A6530 04B0","812A6562 0640","812A6500 0960","812A6564 0190"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A658F 0001","50000E02 0000","812A64D4 03E7"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 4 on DUKEMATCH, All Levels.","data":["8024B79B 0064","802A64D1 0064"],"options":null},"Single-Player (All Levels)\\Have All\\Items \u0026 Infinite Use on all levels":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5A7A 0064","812A5AC2 0064","812A5AD2 00C8","812A5ABC 1900","812A5ABE 0640","812A5A8C 04B0","812A5A5C 0960","812A5AC0 0190"],"options":null},"Single-Player (All Levels)\\Have All\\Keys":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5A77 000F"],"options":null},"Single-Player (All Levels)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A5AEB 0001","50000A02 0000","812A5A30 03E7"],"options":null},"Single-Player (All Levels)\\Have Infinite Health (All Levels)":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels and does what it says on the tin. Infinite health for player 1, All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["80247493 0064","8026EC8B 0064","802A5A2D 0064"],"options":null}},"580162EC-E3108BF1-C:58":{"Freeze Timer at 04:59":{"note":"Do not enable until count down to race is finished","data":["811BDB9E 3A70"],"options":null},"Have All Groups Completed":{"note":"This gives you all Cups for all Groups.","data":["50002801 0000","801BDCDC 0002"],"options":null},"Have Everything Unlocked":{"note":"Pause Game: Use Control Stick, to scroll the Cheat Menu. Press A, to activate Cheats. This will unlock everything and also be replacing all the Zombies with Pre-Historic Dinosaurs.","data":["801BDDBD 000F"],"options":null},"Have Infinite\\Free Repairs":{"note":"","data":["81097844 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Frozen Opponents":{"note":"","data":["810978A4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Grip-O-Matic Tires":{"note":"","data":["810979DC ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Hot Rod":{"note":"","data":["810977E4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Invunerability":{"note":"","data":["8109782C ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Mega Turbo":{"note":"","data":["810977CC ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Mine Dropping Ability":{"note":"","data":["81097A98 ????"],"options":{"Off":"0000","On":"0064"}},"Have Infinite\\Turbo":{"note":"","data":["810977B4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Turbo Nitrous":{"note":"","data":["810977FC ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Underwater Ability":{"note":"","data":["81097874 ????"],"options":{"Off":"0000","On":"0BBB"}},"Max Credits":{"note":"This is also Infinite until disabled","data":["811BDC1B FFFF"],"options":null},"Max Kills":{"note":"This will automatically Clear the stage if enabled and go back to the stage menu","data":["81094596 01F4"],"options":null}},"58FD3F25-D92EAA8D-C:50":{"Enable All Levels \u0026 Boarders":{"note":"","data":["80250AB9 00FF","80250ABB 0005","81250AC6 FCFF","80250AC8 0007"],"options":null},"Infinite Damage All Players and Levels":{"note":"","data":["803F4C01 0000"],"options":null},"Play As":{"note":"","data":["8001A0E7 00??"],"options":{"Akari Hayami":"02","Dion Blaster":"00","Gold Boarder":"06","Kensuke Kimachi":"01","Panda Boarder":"07","Ricky Winterborn":"03","Rob Haywood":"04","Silver Boarder":"05"}},"Prees L For Infinite Lives \u0026 Continues":{"note":"Whenever you've lost a life, Press L.Do not press L when on the main menu or during the intro Only use this feature in Match Race","data":["D00556A9 0020","8026B14B 0003"],"options":null},"Stop Timer\\Contest\\Air Make":{"note":"","data":["80319BBA 00C5"],"options":null},"Stop Timer\\Contest\\Crystal Lake":{"note":"","data":["8029C0DA 00C5"],"options":null},"Stop Timer\\Contest\\Crystal Peak":{"note":"","data":["802A889A 00C5"],"options":null},"Stop Timer\\Contest\\Golden Forest":{"note":"","data":["802A6D3A 00C5"],"options":null},"Stop Timer\\Contest\\Half Pipe":{"note":"","data":["802F51FA 00C5"],"options":null},"Stop Timer\\Time Attack\\Air Make":{"note":"","data":["8031AA4A 0000"],"options":null},"Stop Timer\\Time Attack\\Crystal Lake":{"note":"","data":["802A582A 0000"],"options":null},"Stop Timer\\Time Attack\\Crystal Peak":{"note":"","data":["802B2BCA 0000"],"options":null},"Stop Timer\\Time Attack\\Deadly Fall":{"note":"","data":["802CF56A 0000"],"options":null},"Stop Timer\\Time Attack\\Dragon Cave":{"note":"","data":["802C137A 0000"],"options":null},"Stop Timer\\Time Attack\\Golden Forrest":{"note":"","data":["802B135A 0000"],"options":null},"Stop Timer\\Time Attack\\Half Pipe":{"note":"","data":["802F638A 0000"],"options":null},"Stop Timer\\Time Attack\\Mountain Village":{"note":"","data":["802CB95A 0000"],"options":null},"Stop Timer\\Trick Attack\\Air Make":{"note":"","data":["8031AABA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Crystal Lake":{"note":"","data":["8029F66A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Crystal Peak":{"note":"","data":["802AC8EA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Deadly Fall":{"note":"","data":["802C8E0A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Dragon Cave":{"note":"","data":["802BAD3A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Golden Forrest":{"note":"","data":["802AAF5A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Half Pipe":{"note":"","data":["802F63FA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Mountain Village":{"note":"","data":["802C50DA 00C5"],"options":null}},"596E145B-F7D9879F-C:50":{"Enable All Cheats":{"note":"Go into Options \u0026 then Magic Codes. Then Code list to turn off \u0026 on what you want.","data":["800E03AC 001F","50000301 0000","800E03AD 00FF"],"options":null},"Have All\\50 Balloons":{"note":"","data":["8020807D 0032"],"options":null},"Have All\\Control Drumstick \u0026 Adventure Two mode unlocked":{"note":"","data":["80126CCC 0003","80126CCF 0003","80126CE2 0003","80126CE3 0008"],"options":null},"Have All\\Keys":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80208659 001F"],"options":null},"Have All\\None-Adventure tracks completed":{"note":"","data":["50001204 0000","80208777 0007","50000904 0000","802087CF 0007","80208658 0007","8020865A 0007","8020865B 0007","8020865C 000F","8020865D 00FF"],"options":null},"Have All\\T.T. Amulets":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80208667 0004"],"options":null},"Have All\\T.T. time trial races beaten":{"note":"","data":["80208666 0004"],"options":null},"Have All\\Trophies":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["8020865E 0007","8020865F 00FF"],"options":null},"Have All\\Trophy Adventure races unlocked":{"note":"","data":["50000502 0000","8020886E 0007"],"options":null}},"5A160336-BC7B37B0-C:50":{"All Levels \u0026 Stages Unlocked":{"note":"","data":["50001804 0000","8008E5CF 0001"],"options":null},"Have All Gold Cards":{"note":"","data":["8008E575 00FF","8108E576 FFFF","8108E578 FFFF","8108E57A FFFF","8108E57C FFFF"],"options":null},"Infinite Red Pumped-Up Bombs":{"note":"","data":["802AC643 0004"],"options":null},"Infinite\\Credits":{"note":"","data":["802AC61B 0063"],"options":null},"Infinite\\Gems":{"note":"","data":["802AC61F 0063"],"options":null},"Infinite\\Lives":{"note":"","data":["802AC617 0063"],"options":null},"Infinite\\Time":{"note":"","data":["802AC633 0000"],"options":null}},"5A9D3859-97AAE710-C:45":{"Anger metre always full":{"note":"","data":["800D5978 00FF","800D5666 00FF"],"options":null},"Crunched Players":{"note":"","data":["810DBA6C 3F00"],"options":null},"Difficulty Mod":{"note":"","data":["80120639 00??"],"options":{"Easy":"01","Hard":"03","Medium":"02","Very Easy":"00"}},"Extra Teams":{"note":"","data":["80115A0C 0001"],"options":null},"Get In Fights Constantly":{"note":"","data":["800CF766 0020"],"options":null},"Players\\Head Size":{"note":"","data":["81118A2C ????"],"options":{"Normal Size":"3F80","Very Large":"4080","Very Small":"3F00"}},"Players\\Height Size":{"note":"","data":["81120688 ????"],"options":{"Giants":"4080","Large":"3FC0","Midgets":"3F00","Normal Size":"3F80"}},"Team 1\\Score pts":{"note":"","data":["8011C061 00??"],"options":{"30 Points":"1E","50 Points":"23","75 Points":"4B","99 Points":"63","Zero Points":"00"}},"Team 2\\Score pts":{"note":"","data":["8011F571 ????"],"options":{"0 Points":"2305","5 Points":"4B07","9 Points":"6309","ero Points":"0000"}}},"5AC383E1-D712E387-C:45":{"Infinite\\Money\\Player 1":{"note":"","data":["81324B46 270F"],"options":null},"Infinite\\Money\\Player 2":{"note":"","data":["81324B5A 270F"],"options":null},"Infinite\\Money\\Player 3":{"note":"","data":["81324B6E 270F"],"options":null},"Infinite\\Money\\Player 4":{"note":"","data":["81324B82 270F"],"options":null},"[Language Select]":{"note":"To use this load the game then enable this cheat and Reset (F1) you will now be on your chosen Language and Relative Local Language Board and Money.","data":["D009675F 0001","80096758 00??"],"options":{"American":"00","British":"01","France":"02","German":"03"}}},"5C1B5FBD-7E961634-C:46":{"Access In-Game Cheat Menu":{"note":"To Access Pause Game Play. This gives you access to In-game Cheats like God Mode,Level Select,All Items Etc","data":["81137DB6 07FF","80137E93 0005"],"options":null},"Boots Of Speed Select\\Player 1":{"note":"","data":["8113F538 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113F6D4 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113F870 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113FA0C ????"],"options":{"Off":"0000","On":"03FF"}},"Have All\\Armour":{"note":"","data":["8013F651 0019","8013F655 0014","8013F659 0014","8013F65D 0014"],"options":null},"Have All\\Items And Artifacts\\Player 1":{"note":"","data":["8013F651 0019","8013F655 0014","8013F659 0014","8013F65D 0014","8013F661 0001","8013F663 00FF","8013F665 0002","8013F667 00FF","8013F669 0003","8013F66B 00FF","8013F66D 0004","8013F66F 00FF","8013F671 0006","8013F673 00FF","8013F675 0007","8013F677 00FF","8013F679 0008","8013F67B 00FF","8013F67D 0009","8013F67F 00FF","8013F681 000A","8013F683 00FF","8013F685 000B","8013F687 00FF","8013F689 000C","8013F68B 00FF","8013F68D 000D","8013F68F 00FF","8013F691 000E","8013F693 00FF","8013F695 000F","8013F697 00FF","8013F699 0010","8013F69B 00FF","8013F69D 0011","8013F69F 00FF","8013F6A1 0012","8013F6A3 00FF","8013F6A5 0013","8013F6A7 00FF","8013F6A9 0014","8013F6AB 00FF","8013F6AD 0015","8013F6AF 00FF","8013F6B1 0016","8013F6B3 00FF","8013F6B5 0017","8013F6B7 00FF","8013F6B9 0018","8013F6BB 00FF","8013F6BD 0019","8013F6BF 00FF","8013F6C1 001A","8013F6C3 00FF","8013F6C5 001B","8013F6C7 00FF","8013F6C9 001C","8013F6CB 00FF","8013F6CD 001D","8013F6CF 00FF","8013F6D1 001E","8013F6D3 00FF","8013F6D5 001F","8013F6D7 00FF","8013F6D9 0020","8013F6DB 00FF","8013F6E9 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113F6FC 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113F6D8 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113F874 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113FA10 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013F715 00FF","8013F717 00FF","8013F719 00FF","8013F71B 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013F6F1 00FF","8013F6F3 00FF","8013F6F5 00FF","8013F6F7 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013F88D 00FF","8013F88F 00FF","8013F891 00FF","8013F893 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013FA29 00FF","8013FA2B 00FF","8013FA2D 00FF","8013FA2F 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013F71D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013F2E9 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013F485 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013F621 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013F71F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013F2EB 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013F487 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013F623 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113F52C ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113F6C8 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113F864 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113FA00 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113F6EC FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113F2B8 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113F454 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113F5F0 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8113F533 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113F6CE ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113F86A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113FA06 ????"],"options":{"Off":"0000","On":"03FF"}}},"5C9191D6-B30AC306-C:4A":{"99 Points":{"note":"","data":["801D8E13 0063"],"options":null},"Always First Place":{"note":"","data":["801D040F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801D06F3 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801D06CE 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801D0537 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801D0B5A 0005","801D0DFA 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801D053F 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800E84C3 0007"],"options":null},"Super Speed":{"note":"","data":["801D0537 0005","D0161DC1 0010","801D0537 0020"],"options":null}},"5CD4150B-470CC2F1-C:45":{"Access\\All Secret Characters":{"note":"This code is Fantastic, You have 12 characters to choose from to you race without any bike, just on foot","data":["50000C04 0000","801839CF 0001"],"options":null},"Access\\All Superbikes":{"note":"","data":["50000304 0000","801839CF 0001"],"options":null},"Access\\All Tracks":{"note":"","data":["50000BD8 0000","80182F87 0001"],"options":null},"Infinite Lasers\\Player 1":{"note":"","data":["80170B99 00C8"],"options":null},"Infinite Lasers\\Player 2":{"note":"","data":["80171241 00C8"],"options":null},"Infinite Lasers\\Player 3":{"note":"","data":["80171869 00C8"],"options":null},"Infinite Lasers\\Player 4":{"note":"","data":["80171ED1 00C8"],"options":null},"Infinite Nitros\\Player 2":{"note":"","data":["801711CB 0004","801711CF 0004"],"options":null},"Infinite Nitros\\Player 3":{"note":"","data":["80171833 0004","80171837 0004"],"options":null},"Infinite Nitros\\Player 4":{"note":"","data":["80171E9B 0004","80171E9F 0004"],"options":null},"Infinite Shield\\Player 2":{"note":"","data":["801711F5 00C8"],"options":null},"Infinite Shield\\Player 3":{"note":"","data":["8017185D 00C8"],"options":null},"Infinite Shield\\Player 4":{"note":"","data":["80171EC5 00C8"],"options":null},"Infinite\\Nitros\\Player 1":{"note":"","data":["80170B63 0004","80170B67 0004"],"options":null},"Infinite\\Shield\\Player 1":{"note":"","data":["80170B8D 00C8"],"options":null},"[Screen Hud Clear]":{"note":"If you are using a Plugin other then Jabos and can not see through the Thick Hud then Let the game load 1st before Putting this code on,Or it will give an error and Freeze","data":["80092B8B 0004"],"options":null}},"5D40ED2C-10D6ABCF-C:00":{"Infinite Max Health":{"note":"","data":["8011249D 00A0"],"options":null},"Infinite Max Lives":{"note":"","data":["801124B4 0009"],"options":null},"Infinite Max Shield":{"note":"","data":["801124A3 00A0"],"options":null}},"5E547A4D-90E60795-C:45":{"Character Creation\\Max\\Accuracy":{"note":"","data":["81115A20 4170"],"options":null},"Character Creation\\Max\\Arm Str.":{"note":"","data":["81115A4C 4170"],"options":null},"Character Creation\\Max\\Bunting":{"note":"","data":["81115A38 4170"],"options":null},"Character Creation\\Max\\Clutch":{"note":"","data":["81115A54 4170"],"options":null},"Character Creation\\Max\\Contact":{"note":"","data":["81115A28 4170"],"options":null},"Character Creation\\Max\\Defense":{"note":"","data":["81115A48 4170"],"options":null},"Character Creation\\Max\\Power":{"note":"","data":["81115A2C 4170"],"options":null},"Character Creation\\Max\\Speed":{"note":"","data":["81115A44 4170"],"options":null},"Character Creation\\Max\\Stamina":{"note":"","data":["81115A24 4170"],"options":null},"Character Creation\\Max\\Streak":{"note":"","data":["81115A50 4170"],"options":null},"Character Creation\\Max\\VS LHB":{"note":"","data":["81115A3C 4170"],"options":null},"Character Creation\\Max\\VS LHP":{"note":"","data":["81115A30 4170"],"options":null},"Character Creation\\Max\\VS RHB":{"note":"","data":["81115A40 4170"],"options":null},"Character Creation\\Max\\VS RHP":{"note":"","data":["81115A34 4170"],"options":null},"Infinite\\Balls":{"note":"","data":["8006E4DF 0000"],"options":null},"Infinite\\Character Creation Points":{"note":"","data":["81103350 4170"],"options":null},"Infinite\\Outs":{"note":"","data":["8006E4E3 0000"],"options":null},"Infinite\\Pitch Type Creation Points":{"note":"","data":["811039BC 4170","811039C0 4170"],"options":null},"Infinite\\Strikes":{"note":"","data":["8006E4E1 0000"],"options":null}},"5F25B0EE-6227C1DB-C:45":{"Away Team\\Infinite Time Outs":{"note":"","data":["81135098 0700"],"options":null},"Away Team\\No Time Outs":{"note":"","data":["81135098 0000"],"options":null},"Home Team\\Infinite Time Outs":{"note":"","data":["811344D0 0700"],"options":null},"Home Team\\No Time Outs":{"note":"","data":["811344D0 0000"],"options":null},"Infinite Shot Clock":{"note":"","data":["811318F2 05A0"],"options":null},"Jump Shooting":{"note":"","data":["8017B7AD 0064"],"options":null},"Max Inside Scoring":{"note":"","data":["8017B7AC 0064"],"options":null},"Max\\3 Pointers":{"note":"","data":["8017B7AE 0064"],"options":null},"Max\\Blocking":{"note":"","data":["8017B7B2 0064"],"options":null},"Max\\Def. Awareness":{"note":"","data":["8017B7B3 0064"],"options":null},"Max\\Def. Rebounds":{"note":"","data":["8017B7B6 0064"],"options":null},"Max\\Dribbling":{"note":"","data":["8017B7BC 0064"],"options":null},"Max\\Dunking":{"note":"","data":["8017B7B0 0064"],"options":null},"Max\\Endurance":{"note":"","data":["8017B7BD 0064"],"options":null},"Max\\Free Throws":{"note":"","data":["8017B7AF 0064"],"options":null},"Max\\Jumping":{"note":"","data":["8017B7B7 0064"],"options":null},"Max\\Off. Awareness":{"note":"","data":["8017B7BA 0064"],"options":null},"Max\\Off. Rebounds":{"note":"","data":["8017B7B5 0064"],"options":null},"Max\\Passing":{"note":"","data":["8017B7B9 0064"],"options":null},"Max\\Quickness":{"note":"","data":["8017B7B4 0064"],"options":null},"Max\\Shooting Range":{"note":"","data":["8017B7BE 0064"],"options":null},"Max\\Speed":{"note":"","data":["8017B7BB 0064"],"options":null},"Max\\Stealing":{"note":"","data":["8017B7B1 0064"],"options":null},"Max\\Strength":{"note":"","data":["8017B7B8 0064"],"options":null}},"5F3F49C6-0DC714B0-C:50":{"Access All\\Bikes":{"note":"","data":["8107F6EE FFFF"],"options":null},"Access All\\Tracks":{"note":"","data":["8107F6F0 00FF","8107F6F2 FFFF"],"options":null},"Infinite\\Nitro":{"note":"","data":["810BA540 4296"],"options":null},"Infinite\\Nitro Always On":{"note":"","data":["810BA52C 0010"],"options":null},"Laps 2 Race":{"note":"","data":["800F36B8 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}}},"5F6A04E2-D4FA070D-C:53":{"Access All Levels":{"note":"","data":["8008A9D6 0001","8008A9EA 0001","8008AA12 0001","8008AA62 0001","8008AA76 0001","8008AA8A 0001","8008AA9E 0001","8008AAB2 0001","8008AAC6 0011","8008AADA 0021","8008AAEE 0001","8008AB16 0011","8008AB2A 0041","8008AB3E 0021","8008AB52 0081","8008AB66 0001","8008AB7A 0081","8008AB8E 0001","8008ABB6 0001","8008ABDE 0001","8008ABF2 0011","8008AC06 0021","8008AC56 0001","8008AF3A 0001","8008AF4E 0001","8008AF62 0001","8008AF76 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81094150 0063","81094152 0063","81094154 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A9297 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810866C2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810864C4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80094305 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A92B5 00??","800A92C5 00??","800A92D5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"5FD7CDA0-D9BB51AD-C:50":{"1 Lap To Race":{"note":"","data":["D01226C8 0000","801226C8 0009"],"options":null},"Access Everything":{"note":"\"Have All Characters,Cups,Courses,\u0026Boards\"","data":["810B3160 0100","810B3164 0F00"],"options":null},"Infinite Cash":{"note":"","data":["8112272A 03E7"],"options":null},"Infinite Tools Options":{"note":"","data":["801226D5 00??"],"options":{"Board":"06","Fan":"01","Ghost":"02","Mouse":"05","Pan":"03","Rock":"04"}},"Infinite Weapons\\Lucky Dip":{"note":"\"Lucky Dip is Infinite Usage Of What Ever You Get From Each Red Box\"","data":["801226D4 0003"],"options":null}},"60460680-305F0E72-C:50":{"Access All In-Game Cheats":{"note":"Pause Gameplay To Access","data":["81157E46 000F","81157E56 FFFF"],"options":null},"Access All Navigation Cards":{"note":"","data":["80157E9B 0005"],"options":null},"Access Secret Worlds":{"note":"","data":["81152946 0064"],"options":null},"Infinite Lives":{"note":"","data":["81157EAE 0063"],"options":null},"Max \u0026 Total Gold":{"note":"","data":["80157E4B 0063","80157E4F 0063"],"options":null}},"60C437E5-A2251EE3-C:50":{"Character Select":{"note":"","data":["80075F52 00??"],"options":{"Big Head.":"04","Flame Grilled":"08","Normal":"00","Play as Deadwing.":"01"}},"Have All\\Cheats: Book of Shadows":{"note":"","data":["81075F4E 0FFF"],"options":null},"Have All\\Dark Souls Collected":{"note":"","data":["80075F49 0078"],"options":null},"Have All\\Gads \u0026 The Poign":{"note":"","data":["80030E57 000F"],"options":null},"Have All\\Items":{"note":"Youll not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50001B20 0000","80030613 000B"],"options":null},"Have All\\L-Eclipser":{"note":"You will not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50000320 0000","80030973 000B"],"options":null},"Have All\\Levels Unlocked":{"note":"","data":["5000101C 0000","80030A0E 0001"],"options":null},"Infinite\\0.9mm Ammo":{"note":"","data":["81075B3A 0190"],"options":null},"Infinite\\Accumulators":{"note":"","data":["800306D7 0005"],"options":null},"Infinite\\Cadeaux'":{"note":"","data":["81075B36 03E7"],"options":null},"Infinite\\Max Health/Air/Shadow Charge \u0026 Voodoo Power":{"note":"","data":["50000604 0000","81075B16 2710"],"options":null},"Infinite\\Prisms":{"note":"","data":["80030957 0003"],"options":null},"Infinite\\Retractors":{"note":"","data":["800308B7 0003"],"options":null},"Infinite\\Shotgun Shells":{"note":"","data":["80075B2F 0063"],"options":null},"Infinite\\Violator Ammo":{"note":"","data":["81075B32 03E7"],"options":null},"Press L To Levitate":{"note":"Press the L-Button to rise and let go and press again in stages to come back down.","data":["D0059097 0020","80075578 0041"],"options":null},"[Ammo Always Displayed On Screen]":{"note":"","data":["50000408 0000","80075ACD 0007"],"options":null},"[Health Meter Displayed On Screen]":{"note":"","data":["81075B10 0000","81075B12 00FF"],"options":null}},"60D5E10B-8BEDED46-C:50":{"All Masks":{"note":"Press GS To Activate All Masks","data":["891F1110 8780"],"options":null},"Have All\\Crates":{"note":"","data":["810C6FE8 7FFF","50000602 0000","810C6FEA FFFF","800C6FF2 00FF"],"options":null},"Have All\\Yellow Lums":{"note":"","data":["50006401 0000","800C6FF8 00FF","50001901 0000","800C6FAD 00FF","811F1072 0005","50005702 0000","811F1078 FFFF"],"options":null},"Infinite\\Max Health":{"note":"","data":["811BC54C 001E"],"options":null},"Infinite\\Oxygen":{"note":"","data":["810F4A80 4396"],"options":null},"Open Options\\Open all cages":{"note":"","data":["801F1032 0050","50000602 0000","811F10E0 FFFF"],"options":null},"Open Options\\levels \u0026 Map":{"note":"","data":["50000801 0000","801F1101 00FF"],"options":null}},"61D116B0-FA24D60C-C:50":{"Access The Rock Alcatraz bonus level":{"note":"Press C-right, on any level, at the track selection screen","data":["D00F4174 0002","80100120 0006"],"options":null},"All\\Keys \u0026 Cars":{"note":"","data":["50000E16 0000","810CAD52 FFFF"],"options":null},"All\\Keys \u0026 Cars Circuits":{"note":"","data":["8105696E FFFF","8105699A FFFF","50000404 0000","81056910 FFFF"],"options":null},"Always 1st":{"note":"","data":["80101409 0000"],"options":null},"Automatic Transmission":{"note":"","data":["800C8100 0001"],"options":null},"Big Back Wheels":{"note":"","data":["800DA03C 0002"],"options":null},"Big Front Wheels":{"note":"","data":["800DA02C 0002"],"options":null},"Difficulty Very Easy":{"note":"","data":["810D9F7A 0002"],"options":null},"Gravity Modifier":{"note":"","data":["800F3E61 00??"],"options":{"Ballon \u0026 Two Weights":"00","One Weight":"01","Two Weights":"02"}},"Laps To Race":{"note":"","data":["800E7411 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Max Race Points":{"note":"","data":["810DACCA 03E7"],"options":null},"No\\Auto Abort":{"note":"","data":["800F4140 0001"],"options":null},"No\\Car Collisions":{"note":"","data":["800F4120 0001"],"options":null},"Resurrect In Place":{"note":"","data":["800F4150 0001"],"options":null},"Stop Timer":{"note":"","data":["800F4160 0001"],"options":null}},"61F5B152-046122AB-C:4A":{"Always 1st":{"note":"","data":["8011C25D 0001"],"options":null},"Have All Characters":{"note":"","data":["801170E2 007D","811170E4 FFFF"],"options":null},"Have All Tracks Completed":{"note":"","data":["811170DA FFFF","811170DC 3FFF","811170DE 3FFF","811170E0 3FFF","811170E2 00FF"],"options":null},"No Damage":{"note":"","data":["800A8047 0001"],"options":null},"Unlock All Tracks":{"note":"","data":["801170D8 00FF","801170D9 00FF","801170DA 00FF","801170DB 00FF","811170D8 FFFF"],"options":null}},"62269B3D-FE11B1E8-C:45":{"Always Place 1st":{"note":"","data":["8131C70E 0000"],"options":null},"Extra Cars \u0026 Tracks":{"note":"","data":["50000201 0000","8032690C 00FF","8032690F 00FF","813243CC FFFF"],"options":null},"Have 1-6 Level Points":{"note":"","data":["50000602 0000","8032685F 0064"],"options":null},"Only Race 1 Lap Championship Mode":{"note":"","data":["8031EBDB 0002"],"options":null}},"62E957D0-7FC15A5D-C:50":{"All Golf Courses Unlocked":{"note":"","data":["80130FED 0001"],"options":null},"Always On 1st Stroke":{"note":"","data":["801B74F3 0000"],"options":null},"Infinite Power Shots":{"note":"","data":["801B74F8 0042"],"options":null},"Unlock all Characters and Birdy Badges":{"note":"Unlocks Metal Mario, Maple, Luigi, Sonny, Wario, Harry, Bowser, Yoshi, Mario and DK","data":["50006C01 0000","801304A4 0001","50000901 0000","80130518 0001","50000901 0000","80130521 0001"],"options":null},"Weather Select":{"note":"","data":["800BACAB 00??"],"options":{"Always Rains":"01","Never Rains":"00"}},"Wind Speed Select":{"note":"","data":["800BACA1 00??"],"options":{"0 MPH":"00","20 MPH":"14"}}},"62F6BE95-F102D6D6-C:50":{"99 Accuracy":{"note":"","data":["80131530 0063"],"options":null},"99 Bonus":{"note":"","data":["80131537 0063"],"options":null},"All Boss Attack levels unlocked":{"note":"Unlocks all planes in death match","data":["80355701 003F"],"options":null},"Always Have\\F-15J Eagle":{"note":"","data":["8027D69C 0010"],"options":null},"Always Have\\X-29A A.T.D.":{"note":"","data":["8027D69D 0020"],"options":null},"Extra Planes":{"note":"","data":["8127D69C FFFF"],"options":null},"F-15J Eagle \u0026 X-29A A.T.D. planes unlocked":{"note":"","data":["8035575C 00??"],"options":{"Both of the above planes":"3F","F-15J Eagle":"10","X-29A A.T.D.":"20"}},"Gun Select":{"note":"","data":["8027E9D3 00??"],"options":{"22mm":"0B","22mm BB Shot":"0A","Air Mines":"02","Chaff":"00","Fire":"14","Fire Arrow":"21","Fire Wave":"17","Fireball":"0D","Hunai Shot":"0C","Jammings":"01","Mahibishi":"03","Ninja Glitch":"16","Ninjabeam":"28","Phoenix":"1F","Rocket":"1E","Sabre":"0E","Star":"20","Tomahawk":"15"}},"Infinite\\99 Lives":{"note":"","data":["80355748 0063"],"options":null},"Infinite\\Armor":{"note":"","data":["8127D9A4 44A0","8127D9A8 44A0"],"options":null},"Infinite\\Chaffs":{"note":"","data":["8027E9C7 000A"],"options":null},"Infinite\\Gun":{"note":"","data":["8027EAC0 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8027D9A5 00C8","8027D9A9 00C8"],"options":null},"Infinite\\Special Weapons":{"note":"","data":["8027EE82 0002"],"options":null},"Stage Select screen unlocked":{"note":"Hold L + R at the Game Mode screen and it will unlock every single level in the game; from Tokyo to Space. Do not hold L + R on any other screen, as this may cause game to freeze","data":["D0281691 0030","8027D5C0 000A","D0281691 0030","8027D5DA 000A"],"options":null}},"630AA37D-896BD7DB-C:50":{"Have All\\Cars":{"note":"","data":["50000C01 0000","8009B7D8 0001"],"options":null},"Have All\\Difficulty Levels":{"note":"","data":["8009B7D7 0003"],"options":null},"Have All\\Tracks":{"note":"","data":["50000C01 0000","80099498 0001"],"options":null},"Max\\Checkpoint Bonus":{"note":"","data":["812E013E 03E7"],"options":null},"Max\\Collisions Points":{"note":"","data":["812E013A 03E7"],"options":null},"Max\\Points Aid":{"note":"","data":["8112A3CE 03E7"],"options":null},"Solo Mode\\Infinite Health\\Alpine Ridge":{"note":"","data":["D02C5224 0080","802C5233 00E1"],"options":null},"Solo Mode\\Infinite Health\\Bayou Run":{"note":"","data":["D029137C 0080","8029138B 00E1"],"options":null},"Solo Mode\\Infinite Health\\Destruction Junction":{"note":"","data":["D02A5EB0 0080","802A5EBF 00E1"],"options":null},"Solo Mode\\Infinite Health\\Metro Challenge":{"note":"","data":["D02F9018 0080","802F9027 00E1"],"options":null},"Solo Mode\\Infinite Health\\Midnyte Rumble":{"note":"","data":["D0317C0B 0080","80317C1A 00E1"],"options":null},"Solo Mode\\Infinite Health\\Seascape Sprint":{"note":"","data":["D02E0124 0080","802E0133 00E1"],"options":null},"Solo Mode\\Infinite Health\\Sunset Canyon":{"note":"","data":["D030EF68 0080","8030EF77 00E1"],"options":null},"Solo Mode\\Infinite Health\\Terminal Impact":{"note":"","data":["D02C0FA3 0080","802C0FB2 00E1"],"options":null}},"635A2BFF-8B022326-C:45":{"Don't Hurt Mario\\Falling":{"note":"","data":["8033B22C 00E8","8133B178 FFFF"],"options":null},"Don't Hurt Mario\\Monsters":{"note":"","data":["A033B197 0001"],"options":null},"Funny Mario Options\\Mario Walks On Lava":{"note":"","data":["81250900 1000"],"options":null},"Funny Mario Options\\Mario Walks On Sand":{"note":"","data":["81255490 1000","8125572C 1000","8125572E 0031"],"options":null},"Funny Mario Options\\Mario Walks On Water":{"note":"","data":["81381764 0800","81381766 0024","81000090 3C04","81000092 8034","81000094 8484","81000096 B1E6","81000098 4484","8100009A 3000","810000A0 4680","810000A2 3120","810000A4 4604","810000A6 903C","810000AC 4500","810000AE 0002","810000B4 4600","810000B6 2486","810000B8 080E","810000BA 05DB","810000BC E712"],"options":null},"Funny Mario Options\\Mario's Cap\\Off \u0026 in His Hand":{"note":"Here you can Choose Options with Mario with His Cap off \u0026 in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["8033B177 00??"],"options":{"Cap In Hand":"20","Flying Mario Cap In Hand":"28","Invisible Mario Cap In Hand":"22","Invisible Metal Mario Cap In Hand":"26","Metal Mario Cap In Hand":"24"}},"Funny Mario Options\\Mario's Cap\\On \u0026 An Extra in His Hand":{"note":"Here you can Choose Options with Mario with His Cap on \u0026 An Extra in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["8033B177 00??"],"options":{"Cap In Hand":"30","Flying Mario Cap In Hand":"38","Invisible Mario Cap In Hand":"32","Invisible Metal Mario Cap In Hand":"36","Metal Mario Cap In Hand":"34"}},"Have\\Debug Mode":{"note":"","data":["A032D598 0001:0000"],"options":null},"Have\\Level Select":{"note":"","data":["A032D58C 0001"],"options":null},"Have\\Turbo Running Speed":{"note":"","data":["8033B1C3 00FF"],"options":null},"Infinite\\Energy \u0026 Breath":{"note":"","data":["8033B21E 0008"],"options":null},"Infinite\\Lives":{"note":"","data":["8033B21D 0064"],"options":null},"Level Select":{"note":"Select a Level. Jump Into a Painting. Press A at the Stars Collected Screen. As Stats are fading hold L, and you'll jump to the level you've selected.","data":["D033AFA1 0020","A032DDF9 00??"],"options":{"Big Boo's Haunt":"04","Bob omb Battlefield":"09","Bowser In The Dark World":"11","Bowser In The Dark World Boss":"1E","Bowser In The Fire Sea":"13","Bowser In The Fire Sea Boss":"21","Bowser In The Sky":"15","Bowser In The Sky Boss":"22","Castle Courtyard":"1A","Cavern Of The Metal Cap":"1C","Cool Cool Mountain":"05","Dire Dire Docks":"17","Hazy Maze Cave":"07","Intro":"01","Jolly Roger Bay":"0C","Lethal Lava Land":"16","Mushroom Castle":"06","Mushroom Castle Field":"10","Rainbow Ride":"0F","Shifting Sand Land":"08","Snowman's Land":"0A","Tall Tall Mountain":"24","The End":"19","The Princess's Secret Slide":"1B","The Secret Aquarium":"14","Tick tock Clock":"0E","Tiny Huge World":"0D","Tower Of The Wing Cap":"1D","Vanish Cap Under The Moat":"12","Wet Dry World":"0B","Whomp's Fortress":"18","Wing Mario Over The Rainbow":"1F"}},"Mario's Cap\\Off Options":{"note":"Here you can Choose Options with Mario without His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["8033B177 00??"],"options":{"Flying Mario":"08","Invisible Flying Mario":"0A","Invisible Mario":"02","Invisible Metal Flying Mario":"0F","Mario No Cap":"01","Metal Flying Mario":"0D","Metal Mario":"04"}},"Mario's Cap\\On Options":{"note":"Here you can Choose Options with Mario with His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["8033B177 00??"],"options":{"Flying Mario":"19","Invisible Mario":"12","Invisible Metal Mario":"16","Metal Mario":"15"}},"Press GS For 255 Coins":{"note":"","data":["8933B218 00FF"],"options":null},"Press L To Levitate":{"note":"Press L to levitate \u0026 Let go to land","data":["D033AFA1 0020","8133B1BC 4220","D033AFA1 0020","8133B17C 0300","D033AFA1 0020","8133B17E 0880"],"options":null},"[Slot A Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80207723 0001","8020770B 00C7","50001101 0000","8020770C 00FF"],"options":null},"[Slot A Codes]\\Have All\\Key doors unlocked (and mote empty)":{"note":"","data":["8020770A 007E"],"options":null},"[Slot A Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80207725 0064"],"options":null},"[Slot B Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80207793 0001","8020777B 00C7","50001101 0000","8020777C 00FF"],"options":null},"[Slot B Codes]\\Have All\\Key doors unlocked (and mote empty)":{"note":"","data":["8020777A 007E"],"options":null},"[Slot B Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80207795 0064"],"options":null},"[Slot C Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80207803 0001","802077EB 00C7","50001101 0000","802077EC 00FF"],"options":null},"[Slot C Codes]\\Have All\\Key doors unlocked (and mote empty)":{"note":"","data":["802077EA 007E"],"options":null},"[Slot C Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80207805 0064"],"options":null},"[Slot D Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80207873 0001","8020785B 00C7","50001101 0000","8020785C 00FF"],"options":null},"[Slot D Codes]\\Have All\\Key doors unlocked (and mote empty)":{"note":"","data":["8020785A 007E"],"options":null},"[Slot D Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80207875 0064"],"options":null}},"636E6B19-E57DDC5F-C:50":{"Access\\All Cars":{"note":"","data":["8015EC13 003F"],"options":null},"Access\\All Tracks":{"note":"","data":["8015EC0E 0070"],"options":null},"Access\\Championship,World,Expert":{"note":"","data":["8015EC1C 0001"],"options":null},"Access\\Expert Times":{"note":"","data":["8015EC10 0031"],"options":null},"Access\\In-Game Cheat Menu":{"note":"On The Title Screen, Hold Z Button \u0026 Push L Button","data":["811CFE09 00FF","811F31FF 04FF","811CE165 FF03"],"options":null}},"63E7391C-E6CCEA33-C:45":{"Always Have Weapon Options\\Player 1":{"note":"","data":["810E2994 00??"],"options":{"Anvil":"79","Bee hive":"6D","Bird bath":"04","Blue Swordfish":"63","Bouy":"29","Broom":"08","Chair":"0B","Champagne":"0C","Chicken":"0E","Club":"03","Crate":"0F","Deck chair":"14","Egg":"16","Fish":"1A","Frying Pan":"1E","Gardeners Fork":"1D","Mallet":"2A","Milk Bottle":"2D","Mooses head":"78","NCube knife":"09","NCube missiles":"0A","Plank":"39","Rolling Pin":"41","Saucepan":"64","Spade":"46","Spanner":"4E","Stick":"55","Stool":"6B","Tennis Racket":"48","Watermelon":"2B","Wooden Chair":"1F","Wooden Spoon":"65"}},"Always Have Weapon Options\\Player 2":{"note":"","data":["810E2C6C 00??"],"options":{"Anvil":"79","Bee hive":"6D","Bird bath":"04","Blue Swordfish":"63","Bouy":"29","Broom":"08","Chair":"0B","Champagne":"0C","Chicken":"0E","Club":"03","Crate":"0F","Deck chair":"14","Egg":"16","Fish":"1A","Frying Pan":"1E","Gardeners Fork":"1D","Mallet":"2A","Milk Bottle":"2D","Mooses head":"78","NCube knife":"09","NCube missiles":"0A","Plank":"39","Rolling Pin":"41","Saucepan":"64","Spade":"46","Spanner":"4E","Stick":"55","Stool":"6B","Tennis Racket":"48","Watermelon":"2B","Wooden Chair":"1F","Wooden Spoon":"65"}},"Infinite Health\\Player 1":{"note":"","data":["810E279C 42C8"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["810E2A74 42C8"],"options":null},"Infinite Time":{"note":"","data":["810FED4C 42F0"],"options":null},"One Hit To Kill\\Player 1":{"note":"","data":["810E2A74 3F80"],"options":null},"One Hit To Kill\\Player 2":{"note":"","data":["810E2D4C 3F80"],"options":null},"Open All Versus Arenas":{"note":"","data":["810E44F4 03FF"],"options":null},"Unlock All Characters":{"note":"This Gives you all Characters to choose from plus fixes A freeze on the Charecter Select Menu by having it on","data":["810E44F2 00FF"],"options":null}},"641D3A7F-86820466-C:50":{"Difficulty Select Options":{"note":"","data":["811C5C1C ????"],"options":{"Hard":"0101","Normal":"0100","Ultimate":"0102"}},"Have All\\Keys":{"note":"","data":["50000410 0000","80181B20 0063","50000410 0000","80181B28 0063"],"options":null},"Have All\\Moves":{"note":"","data":["50005306 0000","811876D0 0100","50005306 0000","811876D2 00FF"],"options":null},"Have All\\Moves At Skill Level 250":{"note":"","data":["50000E06 0000","8018C953 00FA","50001306 0000","8018C9AD 00FA","50003006 0000","8018CA37 00FA"],"options":null},"Infinite\\Max Body Stats":{"note":"","data":["81181638 270F","81181678 0063","50000C02 0000","81181640 270F","50000502 0000","81181670 270F","50000602 0000","81181698 270F","50000602 0000","811816A6 270F"],"options":null},"Infinite\\Max Health":{"note":"","data":["81181630 270F","81181632 270F"],"options":null},"Infinite\\Refresh Items":{"note":"","data":["50000E10 0000","801819F8 0063","50000D10 0000","80181A00 0063"],"options":null},"Infinite\\Weapons \u0026 Items":{"note":"","data":["50000610 0000","80181AD0 0063","50000610 0000","80181AD8 0063"],"options":null},"Level 999":{"note":"","data":["81181678 270F"],"options":null},"Level and Battle Select":{"note":"The level and battle select screen can be accessed by pressing A at the main menu","data":["801D74A4 0005"],"options":null},"Play As":{"note":"","data":["811C5CF6 00??"],"options":{"Alien":"03","President Weller":"02","The real Mr Diaz Baddie":"01"}},"Press L To Levitate":{"note":"","data":["D00CCE25 0020","812558F0 3FCB"],"options":null},"[Have Full Power and Max Combos]":{"note":"Gives you full power and Max Combos in fights","data":["811C6052 03FC"],"options":null},"[Unlock all Code Key Doors]":{"note":"Code Key always Re-newed and Matching all Doors","data":["801C5C16 00FF"],"options":null}},"6420535A-50028062-C:45":{"Access All Levels":{"note":"","data":["8020850E 00FF","80208510 00FF"],"options":null},"Extended Tongue":{"note":"","data":["8133176E FFFF"],"options":null},"Have 99 Crowns":{"note":"","data":["80251767 0063"],"options":null},"Have All Levels Completed":{"note":"","data":["80208512 0019","80208513 0019","80208514 0015","80208515 0018","80208516 0017","80208517 0017"],"options":null},"Infinite Health":{"note":"","data":["80174CF3 000A"],"options":null},"Level Select":{"note":"","data":["8029087B 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06"}}},"64F1B7CA-71A23755-C:50":{"Have\\All Items":{"note":"","data":["50000501 0000","80389C4E 0001","50000301 0000","80389C55 0001","80389C5E 0001","80389C5F 0001","80389C61 0001","50000E01 0000","80389C64 0001"],"options":null},"Have\\Exp Points":{"note":"","data":["80389C4D 0063"],"options":null},"Have\\Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C33 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C49 0001","81389C4A 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C42 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C4D 0064"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C4C 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the GS button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C94 ????","89389C91 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CF1 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C8C 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C8C 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C41 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C46 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"650EFA96-30DDF9A7-C:50":{"Always Place 1st\\Player 1":{"note":"","data":["801BFF4F 0000"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801C020E 00FF"],"options":null},"Lap Timer Below 0'00'10\\Player 1":{"note":"","data":["811C00E6 0000"],"options":null},"Lap Timer Below 0'00'10\\Player 2":{"note":"","data":["811C045E 0000"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801C0077 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801C069A 0005","801C093A 0005"],"options":null},"Misses Don't Count\\Player 1":{"note":"","data":["801C007F 0000"],"options":null},"Misses Don't Count\\Player 2":{"note":"","data":["811C03F6 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800D8003 0007"],"options":null},"Set\\Speed Size":{"note":"","data":["801C0077 00??"],"options":{"Fast":"0F","Medium":"0A","Slow":"01"}},"Set\\Wave Size":{"note":"","data":["800E6B90 00??"],"options":{"Medium":"19","Oh My God":"FF","Rough":"64","Smooth":"00"}}},"65234451-EBD3346F-C:4A":{"Drive Through Anything\\Ballista":{"note":"","data":["803F8BF8 0001"],"options":null},"Drive Through Anything\\Dump Truck":{"note":"","data":["813EEBE8 0101"],"options":null},"Drive Through Anything\\Police Car":{"note":"","data":["813F8FD8 0101"],"options":null},"Drive Through Anything\\Red Car":{"note":"","data":["813FC658 0101"],"options":null},"Drive Through Anything\\Red, White, \u0026 Blue Car":{"note":"","data":["813EEFC8 0101"],"options":null},"Drive Through Anything\\Skyfall":{"note":"","data":["813EE438 0101"],"options":null},"Drive Through Anything\\Van":{"note":"","data":["813F93A8 0101"],"options":null},"Infinite\\Boosts Buggy Vehicle":{"note":"","data":["803EE491 0064"],"options":null},"Infinite\\Hydraulics Sidesweeper":{"note":"","data":["803EDCE1 0063"],"options":null},"Infinite\\Missiles Motor Bike":{"note":"","data":["803F8C53 0063"],"options":null},"J-Bomb Floats Through Anything":{"note":"","data":["803F7C5A 0001"],"options":null},"Rapid Fire\\Ballista":{"note":"","data":["803F8C5D 0000"],"options":null},"Rapid Fire\\Sideswipe":{"note":"","data":["803EDCE6 0000"],"options":null},"Sidesweep\\Can Go Through Anything":{"note":"","data":["803EDCE2 FFFF"],"options":null},"Sideswipe\\Can Go In Water":{"note":"","data":["803EDCE2 0063"],"options":null}},"65EEE53A-ED7D733C-C:45":{"Have All Spirits":{"note":"","data":["8010F51E 0007"],"options":null},"Have hammer\\Level 1":{"note":"Do not use with other level hammer cheats","data":["8010F291 0000"],"options":null},"Have hammer\\Level 2":{"note":"Do not use with other level hammer cheats","data":["8010F291 0001"],"options":null},"Have hammer\\Level 3":{"note":"Do not use with other level hammer cheats","data":["8010F291 0002"],"options":null},"Have jump boots\\Level 1":{"note":"Do not use with other level jump boots cheats","data":["8010F290 0000"],"options":null},"Have jump boots\\Level 2":{"note":"Do not use with other level jump boots cheats","data":["8010F290 0001"],"options":null},"Have jump boots\\Level 3":{"note":"Do not use with other level jump boots cheats","data":["8010F290 0002"],"options":null},"Have member\\Bombette":{"note":"","data":["8010F2BC 0001"],"options":null},"Have member\\Bow":{"note":"","data":["8010F2EC 0001"],"options":null},"Have member\\Goomario":{"note":"","data":["8010F2AC 0001"],"options":null},"Have member\\Kooper":{"note":"","data":["8010F2B4 0001"],"options":null},"Have member\\Lakitu":{"note":"","data":["8010F2E4 0001"],"options":null},"Have member\\Parrakary":{"note":"","data":["8010F2C4 0001"],"options":null},"Have member\\Sushie":{"note":"","data":["8010F2DC 0001"],"options":null},"Have member\\Watt":{"note":"","data":["8010F2D4 0001"],"options":null},"Have\\Attack item":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Dusty Hammer":"0086","Fire Flower":"0800","Pebble":"0085","Shooting Star":"0083","Snowman Doll":"0081","Thunder Bolt":"0084","Thunder Rage":"0082"}},"Have\\Defense item":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Mushroom":"008A","Repel Gel":"0097","Stone Cap":"0088","Volt Shroom":"008B"}},"Have\\Enemy Stats item":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Dizzy Dial":"009A","Fright Jar":"0098","POW Block":"0090","Sleep Sheep":"008F","Stop Watch":"0092"}},"Have\\Recovery Items Option 1":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Apple":"0094","Apple Pie":"00B1","Big Cookie":"00C0","Bland Meal":"00BD","Blue Berry":"009E","Boiled Egg":"00D8","Bubble Berry":"00A1","Cake Mix":"00AA","Coco Pop":"00CF","Deluxe Feast":"00BE","Dried Fruit":"00A8","Dried Pasta":"00A7","Dried Shroom":"008D","Egg":"005F","Electro Pop":"00CC","Fire Pop":"00CD","Fried Egg":"00C9","Fried Shroom":"00B6","Frozen Fries":"00D4","Goomnut":"00A5","Healthy Juice":"00BC","Honey Candy":"00CB","Honey Shroom":"00CA","Honey Super":"00C4"}},"Have\\Recovery Items Option 2":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Honey Syrup":"00A4","Honey Ultra":"00B2","Hot Shroom":"00B9","Iced Potato":"00AF","Jammin' Jelly":"00A2","Jelly Pop":"00D1","Jelly Shroom":"00DA","Jelly Super":"00C6","Jelly Ultra":"00B4","KooPasta":"00B5","Kooky Cookie":"00D3","Koopa Leaf":"00A6","Koopa Tea":"00C3","Lemon":"009C","Lemon Candy":"00D0","Life Shroom":"0095","Lime":"009D","Lime Candy":"0C0E","Maple Shroom":"00D7","Maple Super":"00C5","Maple Syrup":"00A3","Maple Ultra":"00B3","Melon":"00AD","Mistake":"00C2","Mushroom":"008A"}},"Have\\Recovery Items Option 3":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Nutty Cake":"00D6","Potato Salad":"00D5","Red Berry":"009F","Shroom Cake":"00B7","Shroom Steak":"00B8","Spaghetti":"00C7","Special Shake":"00BF","Spicy Soup":"00B0","Stinky Herb":"00AE","Strange Leaf":"00A9","Super Shroom":"008C","Super Soda":"009B","Sweet Shroom":"00BA","Tasty Tonic":"0089","Ultra Shroom":"008E","Whacka's Bump":"0093","Yellow Berry":"00A0","Yoshi Cookie":"00D9","Yummy Meal":"00BB"}},"Have\\Special Items Option 1":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Bucket":"0031","Calculator":"0030","Cook Book":"0029","Crystal Berry":"001E","Diamond Stone":"0017","Dictonary":"0024","Diploma":"000E","First Degree Card":"000A","Fourth Degree Card":"000D","Frying Pan":"0023","Hammer":"0004","Jade Raven":"002A","Kooper's Shell":"0019","Magical Bean":"0058","Magical Seed Brown-Orange":"002E","Magical Seed Green":"002D","Magical Seed Red":"002B","Mailbag":"0069","Melody":"0068","Scarf":"0032","Second Degree Card":"000B","Star Stone":"006C","Third Degree Card":"000C","Toy Train":"0021","Volcano Vase":"005B"}},"Have\\Special Items Options 1":{"note":"Only use One Have item Option at one time","data":["8110F444 ????"],"options":{"Artifact":"0053","Boo's Portrait":"001D","Bucket":"0131","Diploma":"010E","Dolly":"0156","Fertile Soil":"0159","Fortress Key":"0110","Golden Jar":"0118","Jade Raven":"012A","Jump":"0101","Kooper's Shell":"0119","Letter":"0150","Lunar Stone":"0115","Lyrics":"0067","Magical Bean":"0158","Magical Seed Blue":"012D","Magical Seed Purple":"012C","Miracle Water":"015A","Mystery Note":"0125","Record":"0122","Ultra Stone":"010F","Volcano Vase":"015B","Water Stone":"0157"}},"Infinite\\FP":{"note":"","data":["8010F295 0063","8010F296 0063"],"options":null},"Infinite\\HP":{"note":"","data":["8010F292 0063","8010F293 0063"],"options":null},"Infinite\\Star Power":{"note":"","data":["8010F520 0007","8010F521 0007"],"options":null},"Lots Of Coins":{"note":"","data":["8110F29C 03E7"],"options":null},"Max\\Badge Points":{"note":"","data":["8010F298 00??"],"options":{"127 Badge Points":"7F","60 Badge Points":"3C"}},"Max\\Level":{"note":"","data":["8010F299 0063"],"options":null},"Max\\Star Pieces":{"note":"","data":["8010F29F 0063"],"options":null},"Max\\Star Points":{"note":"","data":["8010F2A0 0063"],"options":null},"No Star Points (0)":{"note":"If emulator hangs at level up, enable this cheat and don't disable it whatsoever!","data":["8010F2A0 0000"],"options":null},"Upgrade member\\Level 1\\Bombette":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2BD 0001"],"options":null},"Upgrade member\\Level 1\\Bow":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2ED 0001"],"options":null},"Upgrade member\\Level 1\\Goomario":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2AD 0001"],"options":null},"Upgrade member\\Level 1\\Kooper":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2B5 0001"],"options":null},"Upgrade member\\Level 1\\Lakitu":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2E5 0001"],"options":null},"Upgrade member\\Level 1\\Parrakary":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2C5 0001"],"options":null},"Upgrade member\\Level 1\\Sushie":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2DD 0001"],"options":null},"Upgrade member\\Level 1\\Watt":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2D5 0001"],"options":null},"Upgrade member\\Level 2\\Bombette":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2BD 0002"],"options":null},"Upgrade member\\Level 2\\Bow":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2ED 0002"],"options":null},"Upgrade member\\Level 2\\Goomario":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2AD 0002"],"options":null},"Upgrade member\\Level 2\\Kooper":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2B5 0002"],"options":null},"Upgrade member\\Level 2\\Lakitu":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2E5 0002"],"options":null},"Upgrade member\\Level 2\\Parrakary":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2C5 0002"],"options":null},"Upgrade member\\Level 2\\Sushie":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2DD 0002"],"options":null},"Upgrade member\\Level 2\\Watt":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2D5 0002"],"options":null}},"661B45F3-9ED6266D-C:50":{"Anger metre always full":{"note":"","data":["800D9B38 00FF","800D9826 00FF"],"options":null},"Crunched Players":{"note":"","data":["800DFC2D 003F"],"options":null},"Difficulty Mod":{"note":"","data":["801247F9 00??"],"options":{"Easy":"01","Hard":"03","Medium":"02","Very Easy":"00"}},"Extra Teams":{"note":"","data":["80115A0C 0001"],"options":null},"Get In Fights Constantly":{"note":"","data":["800D3926 0020"],"options":null},"Max Score\\Team 1":{"note":"","data":["80120221 00??"],"options":{"30 Points":"1E","50 Points":"23","75 Points":"4B","99 Points":"63","Zero Points":"00"}},"Max Score\\Team 2":{"note":"","data":["80123731 00??"],"options":{"30 Points":"1E","50 Points":"23","75 Points":"4B","99 Points":"63","Zero Points":"00"}},"Players\\Head Size":{"note":"","data":["8111CBEC ????"],"options":{"Normal Size":"3F80","Very Large":"4080","Very Small":"3F00"}},"Players\\Height Size":{"note":"","data":["81124848 ????"],"options":{"Giants":"4080","Large":"3FC0","Midgets":"3F00","Normal Size":"3F80"}}},"664BA3D4-678A80B7-C:45":{"Enable All Courses":{"note":"","data":["81130CEE FFFF"],"options":null},"Have All Characters":{"note":"","data":["50000E02 0001","810C28E4 0000"],"options":null},"Max Gold Mario Badges Player 1":{"note":"","data":["800C545B 0063"],"options":null},"No Wind":{"note":"","data":["810BA9F1 0000","800BA9F3 0000"],"options":null},"Unlimited\\Power Hits\\Player 1":{"note":"","data":["801B71F8 0004"],"options":null},"Unlimited\\Power Hits\\Player 2":{"note":"","data":["801B72B0 0004"],"options":null},"Unlimited\\Power Hits\\Player 3":{"note":"","data":["801B7368 0004"],"options":null},"Unlimited\\Power Hits\\Player 4":{"note":"","data":["801B7420 0004"],"options":null},"Zero Strokes Taken":{"note":"","data":["801B71F3 0000"],"options":null}},"66572080-28E348E1-C:4A":{"Infinite Hp":{"note":"","data":["802016A7 0000"],"options":null},"Infinite Sp":{"note":"","data":["802016AB 005A"],"options":null},"Infinite Time":{"note":"","data":["80260BDE 0000"],"options":null},"Play As":{"note":"","data":["801B9D5C 00??"],"options":{"1st BOSS":"08","DAITARN 3":"02","DANCOUGAR":"03","DUNBINE":"05","FINAL BOSS":"00","R1":"01","SHINING GUNDAM":"04","VOLTES V":"07","WALKER GALLIER":"06"}},"Player 2 Health Mod":{"note":"","data":["80206AF7 00??"],"options":{"Infinite Health":"00","Instant Death":"C8"}}},"665FD963-B5CC6612-C:44":{"Diffuculty Modifier":{"note":"","data":["8011956F 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Gems":{"note":"","data":["80128E97 00FF"],"options":null},"Have\\All Level Keys":{"note":"","data":["50000604 0000","80128D73 0007","80128D8B 001F","80128DAB 00FF"],"options":null},"Have\\All Weapons":{"note":"","data":["50000B04 0000","80128D47 0001","80128D33 0001"],"options":null},"Have\\Backpack":{"note":"","data":["80128C7B 0001","80128CBB 0001"],"options":null},"Infinite\\Air":{"note":"","data":["80129070 0063","801E862A 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128CF3 00FF","80128D03 00FF","80128D0F 00FF","50000504 0000","80128D13 00FF","80128E9B 00FF","80128E97 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128D26 5B23","80128D67 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C15C4 1E61","812A2534 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["80128E9B 00FF"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114F85A F803","81128CDE 0003","81128CE2 0003","81128CE6 0003","81128CEA 0003","81128CEE 0003","81128CF2 0003","81128CF6 0005"],"options":null}},"66751A57-54A29D6E-C:4A":{"Boots Of Speed Select\\Player 1":{"note":"","data":["8113D5E8 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113D784 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113D920 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113DABC ????"],"options":{"Off":"0000","On":"03FF"}},"Enable Cheat Menu":{"note":"","data":["801370C7 0005","81136FEA FFFF"],"options":null},"Have All\\Armour":{"note":"","data":["8013D541 0019","8013D545 0014","8013D549 0014","8013D54D 0014"],"options":null},"Have All\\Items And Artifacts":{"note":"","data":["8013D551 0001","8013D553 00FF","8013D555 0002","8013D557 00FF","8013D559 0003","8013D55B 00FF","8013D55D 0004","8013D55F 00FF","8013D561 0005","8013D563 00FF","8013D565 0006","8013D567 00FF","8013D569 0007","8013D56B 00FF","8013D56D 0008","8013D56F 00FF","8013D571 0009","8013D573 00FF","8013D575 000A","8013D577 00FF","8013D579 000B","8013D57B 00FF","8013D57D 000C","8013D57F 00FF","8013D581 000D","8013D583 00FF","8013D585 000E","8013D587 00FF","8013D589 000F","8013D58B 00FF","8013D58D 0010","8013D58F 00FF","8013D591 0011","8013D593 00FF","8013D595 0012","8013D597 00FF","8013D599 0013","8013D59B 00FF","8013D59D 0014","8013D59F 00FF","8013D5A1 0015","8013D5A3 00FF","8013D5A5 0016","8013D5A7 00FF","8013D5A9 0017","8013D5AB 00FF","8013D5AD 0018","8013D5AF 00FF","8013D5B1 0019","8013D5B3 00FF","8013D5B5 001B","8013D5B7 00FF","8013D5B9 001C","8013D5BB 00FF","8013D5BD 001D","8013D5BF 00FF","8013D5C1 001E","8013D5C3 00FF","8013D5C5 001F","8013D5C7 00FF","8013D5C9 0020","8013D5CB 00FF","8013D5D9 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113D5EC 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113D788 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113D924 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113DAC0 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013D605 00FF","8013D607 00FF","8013D609 00FF","8013D60B 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013D7A1 00FF","8013D7A3 00FF","8013D7A5 00FF","8013D7A7 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013D93D 00FF","8013D93F 00FF","8013D941 00FF","8013D943 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013DAD9 00FF","8013DADB 00FF","8013DADD 00FF","8013DADF 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013D60D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013D7A9 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013D945 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013DAE1 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013D60F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013D7AB 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013D947 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013DAE3 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113D5DC ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113D778 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113D914 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113DAB0 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113D5DC FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113D778 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113D914 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113DAB0 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8013D5E3 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113D77E ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113D91A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113DAB6 ????"],"options":{"Off":"0000","On":"03FF"}}},"66CF0FFE-AD697F9C-C:50":{"Infinite Lives":{"note":"","data":["810CE462 03E7"],"options":null},"Infinite health":{"note":"","data":["810C8B0E 03E7"],"options":null},"Level Select":{"note":"Scroll With C-Left \u0026 C-Right Level Select Available, At The Player Select Top Screen","data":["810A590E 0001"],"options":null},"Score Aid":{"note":"","data":["810CD912 29AA"],"options":null}},"673D099B-A4C808DE-C:45":{"Always Full Special\\Boris":{"note":"","data":["811543DC 0044"],"options":null},"Always Full Special\\Curtis":{"note":"","data":["811541C0 0044"],"options":null},"Always Full Special\\George":{"note":"","data":["81154814 0044"],"options":null},"Always Full Special\\Lizzie":{"note":"","data":["81154A30 0044"],"options":null},"Always Full Special\\Myukus":{"note":"","data":["81554E68 0044"],"options":null},"Always Full Special\\Ralph":{"note":"","data":["81154C4C 0044"],"options":null},"Always Full Special\\Ruby":{"note":"","data":["811545F8 0044"],"options":null},"Enable George":{"note":"","data":["8118CF92 0000"],"options":null},"Enable\\Lizzie":{"note":"","data":["8118CF94 0000"],"options":null},"Enable\\Myukus":{"note":"","data":["8118CF98 0000"],"options":null},"Enable\\Ralph":{"note":"","data":["8118CF96 0000"],"options":null},"Infinite Health\\George":{"note":"","data":["8115480C 0044"],"options":null},"Infinite Health\\Lizzie":{"note":"","data":["81154A28 0044"],"options":null},"Infinite Health\\Ralph":{"note":"","data":["81154C44 0044"],"options":null},"Infinite Lives\\George":{"note":"","data":["81154808 0063"],"options":null},"Infinite Lives\\Lizzie":{"note":"","data":["81154A24 0063"],"options":null},"Infinite Lives\\Ralph":{"note":"","data":["81154C40 0063"],"options":null},"Infinite\\Health\\Boris":{"note":"","data":["811543D4 0044"],"options":null},"Infinite\\Health\\Curtis":{"note":"","data":["811541B8 0044"],"options":null},"Infinite\\Health\\Myukus":{"note":"","data":["81154E60 0044"],"options":null},"Infinite\\Health\\Ruby":{"note":"","data":["811545F0 0044"],"options":null},"Infinite\\Lives\\Boris":{"note":"","data":["811543D0 0063"],"options":null},"Infinite\\Lives\\Curtis":{"note":"","data":["811541B4 0063"],"options":null},"Infinite\\Lives\\Myukus":{"note":"","data":["81154EFC 0063"],"options":null},"Infinite\\Lives\\Ruby":{"note":"","data":["811545EC 0063"],"options":null}},"67D20729-F696774C-C:4A":{"Bonus Stage Character Modifier (Training Mode)":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["8018D193 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Give Kirby A Wierd Blow-Up":{"note":"","data":["8025C118 000A"],"options":null},"Have All Characters":{"note":"","data":["810A28F8 0FF0"],"options":null},"P1 Press Down On D-Pad To Make Items Appear In Random Spots":{"note":"","data":["D109CF64 0400","8118B062 0001"],"options":null},"Story Mode\\Always Get Pacifist (60,000 Points)":{"note":"","data":["810A2B2E 0000"],"options":null},"Story Mode\\Infinite Time":{"note":"","data":["810A2AEE 43CB"],"options":null},"Story Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code could also result freezing at the end of the Level.","data":["800A2AFB 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 1\\Infinite Lives":{"note":"","data":["800A2B03 0004"],"options":null},"Story Mode\\Player 1\\Kirby B Button Move\\Congo Jungle":{"note":"","data":["8026EA8F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Fighting Polygon Team":{"note":"","data":["802606DF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["80266ACF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Kirby's Dreamland":{"note":"","data":["8026BAFF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Master Hand Stage":{"note":"","data":["8026FC0F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Metal Mario Stage":{"note":"","data":["80261557 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Peach's Castle":{"note":"","data":["80261D5F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Planet Zebes":{"note":"","data":["8026DF67 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Saffron City":{"note":"","data":["80271A57 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["8026F0B7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["80266E0F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Low % Health":{"note":"","data":["810A2B46 0000"],"options":null},"Story Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2B6F 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 2\\Infinite Lives":{"note":"","data":["800A2B77 0004"],"options":null},"Story Mode\\Player 2\\Low % Health":{"note":"","data":["810A2BBA 0000"],"options":null},"Story Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2BE3 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 3\\Infinite Lives":{"note":"","data":["800A2BEB 0004"],"options":null},"Story Mode\\Player 3\\Low % Health":{"note":"","data":["810A2C2E 0000"],"options":null},"Story Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2C57 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 4\\Infinite Lives":{"note":"","data":["800A2C5F 0004"],"options":null},"Story Mode\\Player 4\\Low % Health":{"note":"","data":["810A2CA2 0000"],"options":null},"Story Mode\\Skip Straight To Master Hand":{"note":"","data":["800A2AA7 000D"],"options":null},"VS. Mode\\Have Mushroom Kindom":{"note":"","data":["800A28F7 00FF"],"options":null},"VS. Mode\\Infinite Time":{"note":"","data":["810A2CDE 43CB"],"options":null},"VS. Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2CEB 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["802619AF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["80269F47 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["8026C277 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Low % Health":{"note":"","data":["810A2D36 0000"],"options":null},"VS. Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2D5F 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 2\\Low % Health":{"note":"","data":["810A2DAA 0000"],"options":null},"VS. Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2DD3 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 3\\Low % Health":{"note":"","data":["810A2E1E 0000"],"options":null},"VS. Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2E47 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 4\\Low % Health":{"note":"","data":["810A2E92 0000"],"options":null}},"67D21868-C5424061-C:50":{"Infinite Energy\\Player 1":{"note":"","data":["800ACB89 00??"],"options":{"Max":"40","None":"00"}},"Infinite Energy\\Player 2":{"note":"","data":["800ACC79 00??"],"options":{"Max":"3F","None":"00"}},"Infinite Match Time":{"note":"","data":["800ABC33 0000"],"options":null},"Super Attacks\\Player 1":{"note":"","data":["800ACB8D 00??"],"options":{"3":"03","None":"00"}},"Super Attacks\\Player 2":{"note":"","data":["800ACC7D 00??"],"options":{"3":"03","None":"00"}},"Unlock Extras":{"note":"","data":["800ACD55 00FF","800ACD57 00FF"],"options":null}},"67FF12CC-76BF0212-C:4A":{"Extra Gems":{"note":"","data":["D016523B 0000","8016523B 004B"],"options":null},"Full\\Bomb Power":{"note":"","data":["80165239 0003"],"options":null},"Full\\Fire Power":{"note":"","data":["8016523A 0003"],"options":null},"Infinite\\Health":{"note":"","data":["8016523E 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["8016523D 0009"],"options":null},"Max\\Bombs":{"note":"","data":["80165239 0008"],"options":null},"Max\\Explosion":{"note":"","data":["8016523A 0008"],"options":null},"Max\\Score":{"note":"","data":["80177601 00FF","80177602 00FF"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D005A2F5 0020","81154178 41CB","D005A2F5 0020","D0154154 0000","80154154 0040"],"options":null}},"68D7A1DE-0079834A-C:50":{"Access\\All Characters":{"note":"","data":["80208910 FFFF"],"options":null},"Access\\All Floyd Awards":{"note":"only enable One character at a time when using this code","data":["50000501 0000","80208908 0005"],"options":null},"All Single Player Levels Unlocked":{"note":"All Charcters","data":["80208AA0 00FF","80208AA1 00FF","80208B16 00FF","80208B17 00FF","80208B8C 00FF","80208B8D 00FF"],"options":null},"Infinite Continues":{"note":"","data":["800A34F1 0063"],"options":null},"Juno\\Access\\All Keys":{"note":"","data":["81208B18 FFF7"],"options":null},"Juno\\Access\\All Objects":{"note":"","data":["81208B1A FFFF"],"options":null},"Juno\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["80208ABC 00FF","80208ABD 00FF"],"options":null},"Juno\\All Single Player Levels Unlocked":{"note":"","data":["80208B16 00FF","80208B17 00FF"],"options":null},"Juno\\Full \u0026 Max Health":{"note":"","data":["80208AB5 000C","80208AB2 0040"],"options":null},"Juno\\Infinite\\Max Ammo All Guns":{"note":"","data":["50000302 0000","81208AC6 03E7","50000802 0000","81208ACC 03E7","50000402 0000","81208ADC 03E7"],"options":null},"Juno\\Infinite\\Mizar Tokens":{"note":"","data":["81208AC4 03E7"],"options":null},"Juno\\Max Blue \u0026 White Heads":{"note":"","data":["81208ABA 03E7","81208AB8 03E7"],"options":null},"Lupus\\Access\\All Keys":{"note":"","data":["81208B8E FF70"],"options":null},"Lupus\\Access\\All Objects":{"note":"","data":["81208B90 FFFF"],"options":null},"Lupus\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["80208B32 00FF","80208B33 00FF"],"options":null},"Lupus\\All Single Player Levels Unlocked":{"note":"","data":["80208B8C 00FF","80208B8D 00FF"],"options":null},"Lupus\\Full \u0026 Max Health":{"note":"","data":["80208B2B 000C","80208B28 0040"],"options":null},"Lupus\\Infinite\\Max Ammo All Guns":{"note":"","data":["50000302 0000","81208B3C 03E7","50000802 0000","81208B42 03E7","50000402 0000","81208B52 03E7"],"options":null},"Lupus\\Infinite\\Mizar Tokens":{"note":"","data":["81208B3A 03E7"],"options":null},"Lupus\\Max\\Blue \u0026 White Heads":{"note":"","data":["81208B30 03E7","81208B2E 03E7"],"options":null},"Tribals\\Gold Wood\\Have All Tribals":{"note":"","data":["802088E4 000F"],"options":null},"Tribals\\Gold Wood\\Have No Tribals Remaining":{"note":"","data":["802088E6 0000"],"options":null},"Tribals\\Gold Wood\\No Tribals Killed":{"note":"","data":["802088E5 0000"],"options":null},"Vela\\Access\\All Keys":{"note":"","data":["81208AA2 FF70"],"options":null},"Vela\\Access\\All Objects":{"note":"","data":["81208AA4 FFFF"],"options":null},"Vela\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["80208A46 00FF","80208A47 00FF"],"options":null},"Vela\\All Single Player Levels Unlocked":{"note":"","data":["80208AA0 00FF","80208AA1 00FF"],"options":null},"Vela\\Full \u0026 Max Health":{"note":"","data":["80208A3F 000C","80208A3C 0040"],"options":null},"Vela\\Infinite\\Max Ammo All Guns":{"note":"","data":["50000302 0000","81208A50 03E7","50000802 0000","81208A56 03E7","50000402 0000","81208A66 03E7"],"options":null},"Vela\\Infinite\\Mizar Tokens":{"note":"","data":["81208A4E 03E7"],"options":null},"Vela\\Max\\Blue \u0026 White Heads":{"note":"","data":["81208A44 03E7","81208A42 03E7"],"options":null},"[Resolution Fix]":{"note":"","data":["800FE6F2 0003","800FE6DE 0003","800FEDEA 00D0"],"options":null}},"68E8A875-0CE7A486-C:50":{"Always Special\\Player 1":{"note":"","data":["800F9D35 0008"],"options":null},"Always Special\\Player 2":{"note":"","data":["800FA0E5 0008"],"options":null},"Always Special\\Player 3":{"note":"","data":["800FA495 0008"],"options":null},"Always Special\\Player 4":{"note":"","data":["800FA845 0008"],"options":null},"Character Select\\Player 1":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890F9D36 0240","890F9D60 42B4","8107E8B2 ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 2":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA0E6 0240","890FA110 42B4","8107E8B6 ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 3":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA496 0240","890FA4C0 42B4","8107E8BA ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 4":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA846 0240","890FA870 42B4","8107E8BE ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Extra Characters \u0026 Modes":{"note":"","data":["8107F07C FFFF"],"options":null},"Get Title Belt In 1-Match":{"note":"","data":["80038AAB 0008"],"options":null},"Infinite Time":{"note":"","data":["800FAF87 0000"],"options":null},"Infinite Time Out Of Ring":{"note":"","data":["800FACE8 0014"],"options":null},"Spirit Select\\Player 1":{"note":"","data":["800F9D25 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 2":{"note":"","data":["800FA0D5 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 3":{"note":"","data":["800FA485 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 4":{"note":"","data":["800FA835 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Ultimate Code\\Player 1":{"note":"","data":["800F9D24 0064"],"options":null},"Ultimate Code\\Player 2":{"note":"","data":["800FA0D4 0064"],"options":null},"Ultimate Code\\Player 3":{"note":"","data":["800FA484 0064"],"options":null},"Ultimate Code\\Player 4":{"note":"","data":["800FA834 0064"],"options":null},"Weapon Select\\Player 1":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800F9D31 0003","800F98E1 00??","800F98E2 0000","800F99A0 0000"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 2":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA0E1 0003","800F9911 00??","800F9912 0001","800F99A1 0001"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 3":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA491 0003","800F9941 00??","800F9942 0002","800F99A2 0002"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 4":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA841 0003","800F9971 00??","800F9972 0003","800F99A3 0003"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}}},"68FCF726-49658CBC-C:50":{"Have All Extras Open":{"note":"This Code opens all extra stages in VS Battles,Team Battle 1P, Team Battles VS,Tag Battle and Practice Modes. Extra Male and Female Body in Create A Fighter Character and Have Extra Characters (Gouriki \u0026 Reiji)","data":["8009E31F 00FF"],"options":null},"Music Modifier":{"note":"","data":["8009E21E 00??"],"options":{"Monaural":"01","Music Off":"02","Stereo":"00"}},"Player 1\\Character Modifier":{"note":"This Allows you to play as any Character you choose in any Mode","data":["80105001 00??"],"options":{"Azami":"00","Gouriki":"08","Hikari":"0B","Invisible Fighter":"0C","Kai":"03","Kaoru":"07","Kengon":"05","Kyeya":"06","Miki":"02","Reiji":"09","Sakai":"04","Serina":"01","Yami":"0A"}},"Player 1\\Infinite Energy":{"note":"","data":["81105026 03E8"],"options":null},"Player 1\\Need 1 Round to Win":{"note":"","data":["D009E334 0000","8009E334 0001"],"options":null},"Player 1\\Player 2 Has No Energy":{"note":"Press C-Button Up and Player 2 will lose All Health resulting in a Instant K.O.","data":["D0044461 0008","8111B3BE 0000"],"options":null},"Player 1\\Player 2 Never Wins":{"note":"","data":["8009E3F5 0000"],"options":null},"Player 2\\Character Modifier":{"note":"This Allows you to play as any Character you choose in any Mode","data":["8011B399 00??"],"options":{"Azami":"00","Gouriki":"08","Hikari":"0B","Invisible Fighter":"0C","Kai":"03","Kaoru":"07","Kengon":"05","Kyeya":"06","Miki":"02","Reiji":"09","Sakai":"04","Serina":"01","Yami":"0A"}},"Player 2\\Infinite Energy":{"note":"","data":["8111B3BE 03E8"],"options":null},"Player 2\\Need 1 Round to Win":{"note":"","data":["D009E335 0000","8009E335 0001"],"options":null},"Player 2\\Player 1 Has No Energy":{"note":"Press C-Button Up and Player 1 will lose All Health resulting in a Instant K.O.","data":["D0044467 0008","81105026 0000"],"options":null},"Player 2\\Player 1 Never Wins":{"note":"","data":["8009E3F4 0000"],"options":null}},"69256460-B9A3F586-C:45":{"Max Money\\Player 1":{"note":"","data":["81058122 FFFF"],"options":null},"Max Money\\Player 2":{"note":"","data":["81058124 FFFF"],"options":null},"Max Money\\Player 3":{"note":"","data":["81058126 FFFF"],"options":null}},"693BA2AE-B7F14E9F-C:45":{"Always Have Wallet Size":{"note":"","data":["8011AD22 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C8B65 0010","8111BFE6 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset,","data":["8011BB69 00FF","8011BFDF 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C8D75 0000","8011C093 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["80025CC4 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011AD06 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011AD07 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011AD08 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011AD09 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023EFBF 0020","8023EFC5 0033"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F3D38 0005","801F3EF8 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["8011AD22 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011AD23 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011AD21 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111AD1C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111AD24 30FF","8111AD26 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011ACF8 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011ACFE 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011AD04 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011ACFC 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011ACF6 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011AD00 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011ACF5 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011ACF4 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011ACF7 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011ACFA 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011ACFD 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011AD01 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011AD02 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011ACF9 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011ACFF 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011AD05 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011AD03 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011ACFB 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011AD0F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011AD28 0007","8011AD29 0007","8011AD2A 0007","8011AD2B 0007","8011AD2C 0007","8011AD2D 0007","8011AD2E 0007","8011AD2F 0007","8011AD30 0007","8011AD31 0007","8011AD32 0007","8011AD3F 0009","8011AD40 0009","8011AD41 0009","8011AD42 0009","8011AD43 0009","8011AD49 0009","8011AD4C 0009","8011AD47 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011AD14 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011AD0E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011AD0D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011AD12 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011AD0C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111ACB0 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011ACB9 0008","8011ACBA 0001","8011ACBC 0001","8011ACB3 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011AD1A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111C04C 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011C211 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011C215 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C8D75 0020","811DB350 40CB","D01C8D75 0000","811DBB72 000D","8011ACF0 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011AD4F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011AD51 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111ACAE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111C048 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C8D75 0020","811DBB72 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C8D75 0020","811DB350 40CB"],"options":null},"Press L+R For FMV Select":{"note":"Hold down `L+R' after the Nintendo logo is spinning to see your favourite FMV","data":["D01C8D75 0030","8011AC83 00A0","D01C8D75 0030","8011AC8B ????"],"options":{"anondorf FMV":"F600","ire FMV":"F50F","lanet Making FMV":"F400","nding":"F80E","ore Triforce FMV":"F700","riforce FMV":"F200"}},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C8D75 0010","8011AC87 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111AC8C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011AD0A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011AD0B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011ACF0 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011ACBE 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111BEA2 0000","8111BEA4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"693BA2AE-B7F14E9F-C:4A":{"Always Have Wallet Size":{"note":"","data":["8011AD22 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C8B65 0010","8111BFE6 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011BB69 00FF","8011BFDF 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C8D75 0000","8011C093 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest 01).","data":["80025CC4 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011AD06 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011AD07 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011AD08 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011AD09 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801D927A 0006","801F28B8 0001","801EF338 0001"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.If you Use Black Gauntlets,They are as strong as the Golden Gauntlets. This code also gives you the Silver Scale and the Golden Scale and unlimited rupees.","data":["8011AD22 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011AD23 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011AD21 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111AD1C 7777"],"options":null},"Have\\All Quest/Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111AD24 30FF","8111AD26 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011ACF8 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011ACFE 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011AD04 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011ACFC 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011ACF6 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011AD00 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011ACF5 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011ACF4 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011ACF7 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011ACFA 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011ACFD 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011AD01 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011AD02 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011ACF9 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011ACFF 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011AD05 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011AD03 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011ACFB 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011AD0F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011AD28 0007","8011AD29 0007","8011AD2A 0007","8011AD2B 0007","8011AD2C 0007","8011AD2D 0007","8011AD2E 0007","8011AD2F 0007","8011AD30 0007","8011AD31 0007","8011AD32 0007","8011AD3F 0009","8011AD40 0009","8011AD41 0009","8011AD42 0009","8011AD43 0009","8011AD49 0009","8011AD4C 0009","8011AD47 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011AD14 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011AD0E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011AD0D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011AD12 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011AD0C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111ACB0 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011ACB9 0008","8011ACBA 0001","8011ACBC 0001","8011ACB3 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011AD1A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111C04C 0001"],"options":null},"Infinite\\Timers\\All other Timers":{"note":"This cheat works on all Race Timers.Under Water with iron Boots etc.","data":["8011C051 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011C055 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C8D75 0020","811DB350 40CB","D01C8D75 0000","811DBB72 000D","8011ACF0 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011AD4F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011AD51 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111ACAE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111C048 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C8D75 0020","811DBB72 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C8D75 0020","811DB350 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C8D75 0010","8011AC87 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111AC8C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011AD0A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011AD0B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011ACF0 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011ACBE 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111BEA2 0000","8111BEA4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"69458B9E-FC95F936-C:4A":{"Have All\\Cups Select":{"note":"","data":["50002C02 0000","800CD611 00??"],"options":{"Bronze Cup":"02","Gold Cup":"00","None (Default)":"04","Silver Cup":"01"}},"Have All\\Points":{"note":"","data":["810D96E0 03E7"],"options":null},"Have All\\RB Medals":{"note":"","data":["810D96F0 03E7"],"options":null},"Infinite\\Credits":{"note":"","data":["800BE145 0005"],"options":null},"Infinite\\Timer":{"note":"","data":["810D9788 44E9"],"options":null},"Infinite\\Turbos":{"note":"Only turn this on ingame or it will freeze the game","data":["D00F3456 0020","800CD791 00??"],"options":{"Off":"00","On":"08"}},"Laps To Race":{"note":"Here you can select what Turbo feature you prefer.","data":["800C9009 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","7 Laps":"07","8 Laps":"08","9 Laps":"09","Laps":"06"}},"[Cheat Menu]":{"note":"Press Pause to access cheats.","data":["800CD789 00FF","800CD78A 00FF","800CD78B 00FF"],"options":null},"[Press F9]\\Enable All Courses":{"note":"","data":["890CD5F2 0B00","890CD5F4 0B00","890CD5F6 0B00"],"options":null},"[Press F9]\\Extra Characters":{"note":"","data":["890C6ADF 01FF"],"options":null},"[Press F9]\\Progress 100%":{"note":"","data":["50000801 0000","880CD600 0003","50000801 0000","880CD601 00FF"],"options":null}},"69AE0438-2C63F3F3-C:4A":{"All Equipment Upgrades":{"note":"","data":["801EF77D 0023","811EF7CA 201B"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D01FBC91 0000","801EF712 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Have All\\Masks":{"note":"","data":["801EF798 005A","801EF799 0055","801EF79A 0063","801EF79B 0061","801EF79C 005C","801EF79D 004E","801EF79E 0056","801EF79F 0062","801EF7A0 0054","801EF7A1 005E","801EF7A2 0064","801EF7A3 004F","801EF7A4 0058","801EF7A5 0059","801EF7A6 0053","801EF7A7 005B","801EF7A8 0052","801EF7A9 0050","801EF7AA 005F","801EF7AB 005D","801EF7AC 0057","801EF7AD 0060","801EF7AE 0065","801EF7AF 0051"],"options":null},"Have All\\Quest Status Items":{"note":"","data":["801EF7CD 0005","811EF7CE F7CF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801EF782 0002"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801EF783 0003"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801EF784 0004"],"options":null},"Have\\Bombchu":{"note":"","data":["801EF787 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801EF786 0006"],"options":null},"Have\\Bottle Modifier\\1":{"note":"","data":["801EF792 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\2":{"note":"","data":["801EF793 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\3":{"note":"","data":["801EF794 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\4":{"note":"","data":["801EF795 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\5":{"note":"","data":["801EF796 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\6":{"note":"","data":["801EF797 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Deku Nuts":{"note":"","data":["801EF789 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801EF788 0008"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801EF790 0010"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801EF781 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801EF78F 000F"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801EF78E 000E"],"options":null},"Have\\Magic Beans":{"note":"","data":["801EF78A 000A"],"options":null},"Have\\Ocarina of Time":{"note":"","data":["801EF780 0000"],"options":null},"Have\\Pictograph":{"note":"","data":["801EF78D 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801EF78C 000C"],"options":null},"Infinite\\Arrows":{"note":"","data":["801EF7B1 0063"],"options":null},"Infinite\\Bombchus":{"note":"","data":["801EF7B7 0063"],"options":null},"Infinite\\Bombs":{"note":"","data":["801EF7B6 0063"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801EF7B9 0063"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801EF7B8 0063"],"options":null},"Infinite\\Health":{"note":"","data":["811EF746 0140"],"options":null},"Infinite\\Hearts Options":{"note":"","data":["811EF744 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Magic Beans":{"note":"","data":["801EF7BA 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801EF749 0060","811EF750 0101"],"options":null},"Infinite\\Powder Kegs":{"note":"","data":["801EF7BC 0063"],"options":null},"Infinite\\Rupees":{"note":"","data":["811EF74A 03E7"],"options":null},"Play As":{"note":"","data":["801EF730 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03E6FCB 0020","814002C8 40CB"],"options":null},"Replace Sword With":{"note":"","data":["801EF75C 00??"],"options":{"Deity Link's Sword":"10","Fire Arrow w/ Bow":"02","Hero's Bow":"00","Ice Arrow w/ Bow":"03","Light Arrow w/ Bow":"04"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01FBC96 0008","811EF726 FFFD","D01FBC96 0004","811EF726 0000","D01FBC96 0002","811EF726 FFFE"],"options":null},"Warp Modifier":{"note":"Put this code on and press the start button and it will now take where you wanted to go, turn it back off after you have got there.","data":["D03E6FCA 0000","803FF805 0001","813FF80A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"6A121930-665CC274-C:45":{"Away Team\\Infinite Time-Outs":{"note":"Do not use this with the No Time Out's Cheat","data":["8013C2D7 0009","80140863 0009"],"options":null},"Away Team\\No Time-Outs":{"note":"Do not use this with the Infinite Time Out's Cheat","data":["8013C2D7 0000","80140863 0000"],"options":null},"Away Team\\Scores":{"note":"","data":["8013C2B3 00??"],"options":{"10 Points":"0A","100 Points":"64","20 Points":"14","200 Points":"C8","250 Points":"FA","40 Points":"28","60 Points":"3C","80 Points":"50","No Points":"00"}},"Create A Player\\Max 3 Point":{"note":"","data":["8013FF99 0063"],"options":null},"Create A Player\\Max Ball Control":{"note":"","data":["8013FFA1 0063"],"options":null},"Create A Player\\Max Block":{"note":"","data":["8013FF9D 0063"],"options":null},"Create A Player\\Max Field Goal":{"note":"","data":["8013FF98 0063"],"options":null},"Create A Player\\Max Free Throw":{"note":"","data":["8013FF9A 0063"],"options":null},"Create A Player\\Max Power":{"note":"","data":["8013FFA2 0063"],"options":null},"Create A Player\\Max Rebound":{"note":"","data":["8013FF9C 0063"],"options":null},"Create A Player\\Max Speed":{"note":"","data":["8013FF9F 0063"],"options":null},"Create A Player\\Max Steal":{"note":"","data":["8013FF9E 0063"],"options":null},"Home Team\\Infinite Time-Outs":{"note":"Do not use this with the No Time Out's Cheat","data":["8013C2D6 0009","80140862 0009"],"options":null},"Home Team\\No Time-Outs":{"note":"Do not use this with the Infinite Time Out's Cheat","data":["8013C2D6 0000","80140862 0000"],"options":null},"Home Team\\Scores":{"note":"","data":["8013C2B1 00??"],"options":{"10 Points":"0A","100 Points":"64","20 Points":"14","200 Points":"C8","250 Points":"FA","40 Points":"28","60 Points":"3C","80 Points":"50","No Points":"00"}},"No Shot Clock":{"note":"","data":["81140E1E FFFF"],"options":null},"Options\\27 Time Out Limit":{"note":"","data":["8013D867 00??"],"options":{"No":"01","Yes":"00"}},"Options\\3 Second Violation":{"note":"","data":["80144994 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\5 Second Violation":{"note":"","data":["80144993 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\Back Court":{"note":"","data":["80144996 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}},"Options\\Camera View":{"note":"","data":["8013D86A 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\FT. Penalty Situations":{"note":"","data":["80144999 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}},"Options\\Foul Out":{"note":"","data":["80144995 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}},"Options\\Goal Tending":{"note":"","data":["80144998 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}},"Options\\Level":{"note":"","data":["8013D864 00??"],"options":{"Enjoy":"00","Exciting":"01","Super Challenge":"02"}},"Options\\Out Of Bounds":{"note":"","data":["80144990 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\Player Display":{"note":"","data":["8013D869 00??"],"options":{"Name":"00","None":"02","Number":"01"}},"Options\\Quarter Length":{"note":"","data":["8013D865 00??"],"options":{"12:00":"03","3:00":"00","5:00":"01","8:00":"02"}},"Options\\Replay":{"note":"","data":["8013D868 00??"],"options":{"No":"01","Yes":"00"}},"Options\\Second Violation":{"note":"","data":["80144992 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\Shot Clock Violation":{"note":"","data":["80144991 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\Stamina":{"note":"","data":["8013D866 00??"],"options":{"Off":"01","On":"00"}},"Options\\Traveling":{"note":"","data":["80144997 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}}},"6A162FF2-2093704C-C:50":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["811659D4 FFFF","811659D6 FFFF","811659DA 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FB5C 270F"],"options":null}},"6AA4DDE7-E3E2F4E7-C:45":{"All Batteries Have Bad Aim":{"note":"","data":["800A1F7C 0001"],"options":null},"All Batteries Have Hellfire":{"note":"","data":["800A34A2 0001"],"options":null},"All Battletanx Are Invincible":{"note":"","data":["8009843D 0001"],"options":null},"Area 51\\Mines Are Invisible":{"note":"","data":["802D5ACB 00CC"],"options":null},"Area 51\\Mines Are Toxic Waste":{"note":"","data":["802D5ACB 007C"],"options":null},"Area 51\\Shock Wave Weapons":{"note":"","data":["802D5A7D 00AF"],"options":null},"Area 51\\Turn Ammo Pickup Picture To Flamer Picture":{"note":"","data":["802D5AAF 00AC"],"options":null},"Area 51\\Turn Nuke Into Toxic Waste Nuke":{"note":"","data":["802D5A7B 007C"],"options":null},"Auto Lose All Queen Lord Levels":{"note":"","data":["800A6746 0001"],"options":null},"Auto Win All Queen Lord Levels":{"note":"","data":["800A6745 0001"],"options":null},"Buildings Fall Fast":{"note":"","data":["80091BBC 0001"],"options":null},"Buildings Implode Instead Of Explode, And Remain Afire":{"note":"","data":["8009298E 0001"],"options":null},"Can't Pick Up Queen Lords":{"note":"","data":["8008A2F0 0001"],"options":null},"Frogs":{"note":"","data":["80135775 0001"],"options":null},"Full Control Of Tank In Bonus,Extra Side Player In Battlelord Multi!":{"note":"","data":["800971EE 0001"],"options":null},"Have All Levels":{"note":"","data":["80135767 0001"],"options":null},"Have Storm Ravens Gang":{"note":"","data":["80135773 0001"],"options":null},"Hurl Mode":{"note":"","data":["8013576B 0001"],"options":null},"In Campaign 3 Enemy Tanks May Join You":{"note":"","data":["802D9AAC 0000","802DB3D4 0000","802DCCFC 0000"],"options":null},"Invincible":{"note":"","data":["80135763 0001"],"options":null},"Invisible":{"note":"","data":["8013576A 0001"],"options":null},"Laser Fire Invisible":{"note":"","data":["800846ED 0001"],"options":null},"MultiPlayer\\Player 2\\One Hit And You Bite It":{"note":"","data":["802D9AC7 0001"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 1\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AD7EE FFFF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 1\\Infinite Secondary Weapons In Battlelord":{"note":"","data":["802D8609 00FF","802D860B 00FF","802D860D 00FF","802D860F 00FF","802D8611 00FF","802D8615 00FF","802D8617 00FF","802D8619 00FF","802D861B 00FF","802D861D 00FF","802D861F 00FF","802D8621 00FF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 2\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AE186 FFFF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 2\\Infinite Secondary Weapons In Battlelord":{"note":"","data":["802D9F31 00FF","802D9F33 00FF","802D9F35 00FF","802D9F37 00FF","802D9F39 00FF","802D9F3D 00FF","802D9F3F 00FF","802D9F41 00FF","802D9F43 00FF","802D9F45 00FF","802D9F47 00FF","802D9F49 00FF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 3\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AEB1E FFFF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 4\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AF4B6 FFFF"],"options":null},"Multiplayer\\Deathmatch, Frenzy \u0026 Convoy Modes\\Player 1\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AD322 FFFF"],"options":null},"Multiplayer\\Deathmatch, Frenzy \u0026 Convoy Modes\\Player 2\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811ADCBA FFFF"],"options":null},"Multiplayer\\Deathmatch, Frenzy \u0026 Convoy Modes\\Player 3\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AE652 FFFF"],"options":null},"Multiplayer\\Deathmatch, Frenzy \u0026 Convoy Modes\\Player 4\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AEFEA FFFF"],"options":null},"Multiplayer\\Hold 'Em Mode\\Player 1\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AD7EE FFFF"],"options":null},"Multiplayer\\Hold 'Em Mode\\Player 2\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AE186 FFFF"],"options":null},"Multiplayer\\Hold 'Em Mode\\Player 3\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AEB1E FFFF"],"options":null},"Multiplayer\\Hold 'Em Mode\\Player 4\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AF4B6 FFFF"],"options":null},"Multiplayer\\Plater 1\\One Hit And You Bite It":{"note":"","data":["802D819F 0001"],"options":null},"Multiplayer\\Player 1\\Always Has Cloaked On":{"note":"","data":["802D818D 0001"],"options":null},"Multiplayer\\Player 1\\Always Have Radar":{"note":"","data":["802D8195 0080"],"options":null},"Multiplayer\\Player 1\\Goalith Tank On Tracks Body Modifier":{"note":"","data":["802D86A3 00??"],"options":{"Big Tank":"02","Motor Tank":"01","Normal Tank":"00"}},"Multiplayer\\Player 1\\Infinite Ammo":{"note":"","data":["802D8603 00FF"],"options":null},"Multiplayer\\Player 1\\Main Weapon":{"note":"","data":["802D85EB 00??"],"options":{"?":"09","Big Tank Shells":"03","Cloaking":"0F","Gernades":"07","Gun Buddies":"0D","Health":"10","Laser":"05","Mines":"0C","Motor Tank Shells":"02","Normal Tank Shells":"01","Nothing":"00","Nuclear Lasers":"0A","Nuke":"06","Remote Rockets":"0B","Rockets":"04","Smoke Screen":"0E"}},"Multiplayer\\Player 1\\Secondary Weapon":{"note":"","data":["802D85F7 00??"],"options":{"?":"09","Big Tank Shells":"03","Cloaking":"0F","Gernades":"07","Gun Buddies":"0D","Health":"10","Laser":"05","Mines":"0C","Motor Tank Shells":"02","Normal Tank Shells":"01","Nothing":"00","Nuclear Lasers":"0A","Nuke":"06","Remote Rockets":"0B","Rockets":"04","Smoke Screen":"0E"}},"Multiplayer\\Player 1\\Tank Body Modifier":{"note":"","data":["802D819B 00??"],"options":{"Big Tank":"02","Motor Tank":"01","Normal Tank":"00"}},"Multiplayer\\Player 1\\Tank Turret Always On (Use Right/Left C Button)":{"note":"","data":["802DE7FB 0011","802DE7FF 0002"],"options":null},"Multiplayer\\Player 1\\Your Goalith Tank On Tracks Always Has Cloaked On":{"note":"","data":["802D8695 0001"],"options":null},"Multiplayer\\Player 1\\Your Goalith Tank On Tracks Always Has Radar":{"note":"","data":["802D869D 0080"],"options":null},"Multiplayer\\Player 2\\Always Has Cloaked On":{"note":"","data":["802D9AB5 0001"],"options":null},"Multiplayer\\Player 2\\Always Have Radar":{"note":"","data":["802D9ABD 0080"],"options":null},"Multiplayer\\Player 2\\Goalith Tank On Tracks Body Modifier":{"note":"","data":["802D9FCB 00??"],"options":{"Big Tank":"02","Motor Tank":"01","Normal Tank":"00"}},"Multiplayer\\Player 2\\Infinite Ammo":{"note":"","data":["802D9F2B 00FF"],"options":null},"Multiplayer\\Player 2\\Main Weapon":{"note":"","data":["802D9F13 00??"],"options":{"?":"09","Big Tank Shells":"03","Cloaking":"0F","Gernades":"07","Gun Buddies":"0D","Health":"10","Laser":"05","Mines":"0C","Motor Tank Shells":"02","Normal Tank Shells":"01","Nothing":"00","Nuclear Lasers":"0A","Nuke":"06","Remote Rockets":"0B","Rockets":"04","Smoke Screen":"0E"}},"Multiplayer\\Player 2\\Secondary Weapon":{"note":"","data":["802D9F1F 00??"],"options":{"?":"09","Big Tank Shells":"03","Cloaking":"0F","Gernades":"07","Gun Buddies":"0D","Health":"10","Laser":"05","Mines":"0C","Motor Tank Shells":"02","Normal Tank Shells":"01","Nothing":"00","Nuclear Lasers":"0A","Nuke":"06","Remote Rockets":"0B","Rockets":"04","Smoke Screen":"0E"}},"Multiplayer\\Player 2\\Tank Body Modifier":{"note":"","data":["802D9AC3 00??"],"options":{"Big Tank":"02","Motor Tank":"01","Normal Tank":"00"}},"Multiplayer\\Player 2\\Tank Turret Always On":{"note":"","data":["802DEB43 0011","802DEB47 0002"],"options":null},"Multiplayer\\Player 2\\Your Goalith Tank On Tracks Always Has Cloaked On":{"note":"","data":["802D9FBD 0001"],"options":null},"Multiplayer\\Player 2\\Your Goalith Tank On Tracks Always Has Radar":{"note":"","data":["802D9FC5 0080"],"options":null},"Multiplayer\\Player 3\\Tank Turret Always On":{"note":"","data":["802DEE8B 0011","802DEE8F 0002"],"options":null},"Multiplayer\\Player 4\\Tank Turret Always On":{"note":"","data":["802DF1D3 0011","802DF1D7 0002"],"options":null},"Nuke Blast Leaves Air Yellow":{"note":"","data":["800F3333 0001"],"options":null},"Nuke Blast Pink":{"note":"","data":["8008055F 0001"],"options":null},"Regenerated Allied Tanks Are Indestrucible In Campaign":{"note":"","data":["8009FB2A 0001"],"options":null},"Run Story":{"note":"","data":["80135770 0001"],"options":null},"Shoot Through Walls":{"note":"","data":["8008E529 0001"],"options":null},"Slow Battle Tanks":{"note":"","data":["8009A56A 0001"],"options":null},"Start With All Weapons":{"note":"","data":["80135765 0001"],"options":null},"Toads":{"note":"","data":["80135776 0001"],"options":null},"Trippy":{"note":"","data":["80135771 0001"],"options":null},"Unlimited Ammo":{"note":"","data":["80135760 0001"],"options":null},"Unlimited Lives":{"note":"","data":["80135772 0001"],"options":null}},"6AECEC4F-F0924814-C:50":{"All Equipment Upgrades":{"note":"","data":["801E54ED 0023","811E553A 201B","801E54CC 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03DC90B 0000","801E5482 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801E5502 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801E5503 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801E5504 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801E5505 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801E5506 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801E5507 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801E54F5 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801E54FB 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801E5501 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Have Item Modifier":{"note":"","data":["801E5500 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\All Masks":{"note":"","data":["811E5508 3E39","811E550A 4745","811E550C 4032","811E550E 3A46","811E5510 3842","811E5512 4833","811E5514 3C3D","811E5516 373F","811E5518 3634","811E551A 4341","811E551C 3B44","811E551E 4935"],"options":null},"Have\\Bombchu":{"note":"","data":["801E54F7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801E54F6 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801E54F9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801E54F8 0008"],"options":null},"Have\\Fire Arrow":{"note":"","data":["801E54F2 0002"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801E5500 0010"],"options":null},"Have\\Have\\Ocarina of Time":{"note":"","data":["801E54F0 0000"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801E54F1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801E54FF 000F"],"options":null},"Have\\Ice Arrow":{"note":"","data":["801E54F3 0003"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801E54FE 000E"],"options":null},"Have\\Light Arrow":{"note":"","data":["801E54F4 0004"],"options":null},"Have\\Magic Beans":{"note":"","data":["801E54FA 000A"],"options":null},"Have\\Pictograph":{"note":"","data":["801E54FD 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801E54FC 000C"],"options":null},"Have\\QuestStatus Items":{"note":"","data":["801E553D 0005","811E553E F7CF"],"options":null},"Infinite\\Health":{"note":"","data":["811E54B6 03E7"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811E54B4 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"This is Infinite use of Bombs,Bombchus,Deku Sticks,Deku Nuts,Magic Beans,\u0026 Powder Kegs. But you must also put it's Have on to work.","data":["801E5521 0063","50000801 0000","801E5526 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801E54B9 0060","811E54C0 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811E54BA 03E7"],"options":null},"Play As":{"note":"","data":["801E54A0 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0378ECB 0020","813921A8 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You Have\\been warned.","data":["801E54CC 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F0496 0008","811E5496 FFFD","D01F0496 0004","811E5496 0000","D01F0496 0002","811E5496 FFFE"],"options":null},"Use all C Buttons":{"note":"","data":["811E9398 0000","811E939A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["803DC90A 0000","803F5165 0001","813F516A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"6B45223F-F00E5C56-C:45":{"Crunched Players":{"note":"","data":["810EA078 3F00"],"options":null},"Extra Teams":{"note":"","data":["800C7205 0001"],"options":null},"Get In Fights Constantly":{"note":"","data":["800A442E 0020"],"options":null},"Players\\Head Size":{"note":"","data":["810EA070 ????"],"options":{"Normal Size":"3F80","Very Large":"4080","Very Small":"3F00"}},"Players\\Height Size":{"note":"","data":["810EA074 ????"],"options":{"Giants":"4080","Large":"3FC0","Midgets":"3F00","Normal Size":"3F80"}},"Team 1\\Score pts":{"note":"","data":["800E6AB1 00??"],"options":{"30 Points":"1E","50 Points":"23","75 Points":"4B","99 Points":"63","Zero Points":"00"}},"Team 2\\Score pts":{"note":"","data":["800E9F8D ????"],"options":{"0 Points":"2305","5 Points":"4B07","9 Points":"6309","ero Points":"0000"}}},"6B700750-29D621FE-C:45":{"1 Win to Win\\Player 1":{"note":"","data":["D0138B47 0000","80138B47 0001"],"options":null},"1 Win to Win\\Player 2":{"note":"","data":["D0138B43 0000","80138B43 0001"],"options":null},"Extra Characters":{"note":"","data":["8007F9F8 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["8008B1E7 0064"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["8008AE5F 0064"],"options":null},"Infinite Time":{"note":"","data":["81138B2A 0708"],"options":null},"Infinite Time To Choose Character":{"note":"","data":["D01340F6 0001","811340F6 0260"],"options":null},"No Health\\Player 1":{"note":"","data":["8008B1E7 0000"],"options":null},"No Health\\Player 2":{"note":"","data":["8008AE5F 0000"],"options":null},"P2/CPU Never Wins":{"note":"","data":["80138B43 0000"],"options":null},"R Button Health Restore\\Player 1":{"note":"","data":["D007CD2B 0010","8008B1E7 0064"],"options":null},"Sudden Death Mode\\Player 1":{"note":"","data":["D1138B2A 0120","8008B1E7 0001"],"options":null},"Sudden Death Mode\\Player 2":{"note":"","data":["D1138B2A 0120","8008AE5F 0001"],"options":null},"Z Trigger Deathblow\\Player 1":{"note":"","data":["D007CD2A 0020","8008AE5F 0000"],"options":null}},"6BFF4758-E5FF5D5E-C:4A":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118B2D0 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118B2D2 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118B2D4 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118B2D6 0003"],"options":null},"Have Bonus Mode and All Gold Cups":{"note":"","data":["8018C728 00??","8018C729 00??","8018C72A 00??","8018C72B 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["80163655 00??","80163682 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["80163735 00??","80163762 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["80163815 00??","80163842 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["801638F5 00??","80163922 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["801639D5 00??","80163A02 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["80163AB5 00??","80163AE2 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818C80F 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F73C5 0020","810F7478 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F73D5 0020","810F8250 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F73E5 0020","810F9028 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F73F5 0020","810F9E00 4000"],"options":null}},"6C2C6C49-9BE5CA66-C:45":{"Extra Bonuses":{"note":"","data":["810EBA6A 270F"],"options":null},"Fake Max Spin Bar?":{"note":"","data":["800EBA43 0009"],"options":null},"Infinite\\Crate Attempts":{"note":"","data":["800A9D1B 0007"],"options":null},"Infinite\\Gold Pickups":{"note":"","data":["802EB9E8 0064"],"options":null},"Infinite\\Health":{"note":"","data":["800EBA47 0009"],"options":null}},"6C45B60C-DCE50E30-C:4A":{"Access All Boards \u0026 Characters":{"note":"","data":["800500C1 000C"],"options":null},"All Street Work Levels Unlocked":{"note":"","data":["50007801 0000","80050170 00??"],"options":{"Courses unlocked":"01","Courses unlocked with A rank":"05","Courses unlocked with B rank":"04","Courses unlocked with C rank":"03","Courses unlocked with S rank":"06"}},"Class Score Select":{"note":"","data":["8016609E 00??"],"options":{"Class A":"64","Class B":"40","Class C":"20","Class S":"FF"}},"Coin Perfect Select":{"note":"this is for Coin Mode to get Perfect Coin Collection Score straight away when you enter the level","data":["801660B3 00??"],"options":{"Giant House Level 1":"6E","Giant House Level 2":"77","Giant House Level 3":"72","Green Park Level 1":"14","Green park Level 2":"1A","Green park Level 3":"2B","Lost Forest Level 1":"4A","Lost Forest Level 2":"59","Lost Forest Level 3":"80","Snow Festival 64 Levels 1 2 \u0026 3":"7D","Sunset Island Level 1":"6F","Sunset Island Level 2":"74","Sunset Island Level 3":"81"}},"Infinite Time\\Attack Time Time 000000":{"note":"","data":["811137EA 0000"],"options":null},"Infinite Time\\Street Work \u0026 Coin":{"note":"","data":["801137E9 0028"],"options":null},"Infinite Time\\Time Attack":{"note":"","data":["801137EB 0000"],"options":null},"Infinite Turbo\\Player 1":{"note":"","data":["80166019 0009"],"options":null},"Infinite Turbo\\Player2":{"note":"","data":["80167991 0009"],"options":null},"Maxed Out Turbo Bar":{"note":"","data":["811656E8 429F","80166017 0051"],"options":null},"Options\\Camera Type Modifier":{"note":"","data":["810500A6 00??"],"options":{"Roll Off Far":"05","Roll Off Mid":"04","Roll Off Near":"03","Roll On Far":"02","Roll On Mid":"01","Roll On Near":"00"}},"Options\\DJ Function Modifier":{"note":"","data":["810500AC 00??"],"options":{"DJ Function Off":"00","DJ Function On":"01"}},"Options\\Music Modifier":{"note":"","data":["800500A9 00??"],"options":{"BGM Off":"00","BGM On":"FF"}},"Options\\Sound Effects Modifier":{"note":"","data":["810500AA 00??"],"options":{"SE Off":"00","SE On":"FF"}}},"6D8DF08E-D008C3CF-C:50":{"2 Player Championship Mode":{"note":"This lets player 2 play with you in championship mode so if you have a friend that you want to tag team up with in tag team championship now you can.","data":["810A755E 0002"],"options":null},"Always Special\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF9E 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2F6 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["D015A5D1 0015","8015B64E 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["D015A5D1 0015","8015B9A6 0004"],"options":null},"Auto-Pin\\Player 1":{"note":"Do not use with Cant Pin","data":["8016CE23 0003"],"options":null},"Auto-Pin\\Player 2":{"note":"Do not use with Cant Pin","data":["8016CE17 0003"],"options":null},"Auto-Pin\\Player 3":{"note":"Do not use with Cant Pin","data":["8016CE2F 0003"],"options":null},"Auto-Pin\\Player 4":{"note":"Do not use with Cant Pin","data":["8016CE3B 0003"],"options":null},"CPU To Human Control\\Player 1":{"note":"","data":["8015AF99 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 2":{"note":"","data":["8015B2F1 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 3":{"note":"","data":["8015B649 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 4":{"note":"","data":["8015B9A1 00??"],"options":{"CPU":"18","Human":"17"}},"Can't Pin\\Player 1":{"note":"Do not use with Auto Pin","data":["8016CE23 0004"],"options":null},"Can't Pin\\Player 2":{"note":"Do not use with Auto Pin","data":["8016CE17 0004"],"options":null},"Can't Pin\\Player 3":{"note":"Do not use with Auto Pin","data":["8016CE2F 0004"],"options":null},"Can't Pin\\Player 4":{"note":"Do not use with Auto Pin","data":["8016CE3B 0004"],"options":null},"Cannot Be Grabbed\\Player 1":{"note":"","data":["D115AEC6 0052","8115AEC6 0001","D115AEC6 00A1","8115AEC6 00C1"],"options":null},"Cannot Be Knocked Down\\Player 1":{"note":"","data":["D115AEC6 0031","8115AEC6 0001"],"options":null},"Cannot Be Punched\\Player 1":{"note":"","data":["D115AEC6 002D","8115AEC6 0001","D115AEC6 0035","8115AEC6 00C1"],"options":null},"Clock At 00:00":{"note":"","data":["8115AB1E 0000","810A99F2 0000"],"options":null},"Hacked Moves\\Capture Tazzplex":{"note":"Replaces: Capture Suplex P1 grabs P2's feet like a capture suplex, then lets go \u0026 does a Tazzplex.","data":["D106B454 3689","D106B456 0021","8106B460 00BC","D106B454 3689","D106B456 0021","8106B462 A5E2","D106B514 368A","D106B516 0021","8106B520 00BC","D106B514 368A","D106B516 0021","8106B522 B6BE"],"options":null},"Hacked Moves\\Dominator into HHH Facebuster":{"note":"Replaces: Dominator","data":["D106B454 3810","D106B456 005C","8106B560 011A","D106B454 3810","D106B456 005C","8106B562 A256","D106B514 3811","D106B516 005C","8106B520 011A","D106B514 3811","D106B516 005C","8106B522 ACB0","D106B454 3810","D106B456 0075","8115AF52 0000"],"options":null},"Hacked Moves\\Dragon Screw Stunner":{"note":"Dragon Screw 02 P1 does a Dragon Screw then picks up P2 (still holding his leg) and spins him around and gives him a Stone Cold Stunner","data":["D106B454 3749","D106B456 0094","8106B460 00E9","D106B454 3749","D106B456 0094","8106B462 B9BE","D106B514 374A","D106B516 0094","8106B520 00E9","D106B514 374A","D106B516 0094"],"options":null},"Hacked Moves\\Dragon Screw Suplex":{"note":"Replaces: Double Dragon Screw 02 P1 does a Dragon screw then picks then up (still holding their feet) and does a capture suplex.","data":["D106B454 3749","D106B456 007C","8106B460 00AD","D106B454 3749","D106B456 007C","8106B462 DB2A","D106B514 374A","D106B516 007C","8106B520 00AD","D106B514 374A","D106B516 007C","8106B522 EAE0","D106B454 3749","D106B456 00A5","8115AF52 0000","D106B514 374A","D106B516 00A5","8115B2AA 0000"],"options":null},"Hacked Moves\\Morality Check to Back of head":{"note":"Replaces: Back Clothesline P1 is immediately backed up and does the Morality Check to P2 in the back of the head (misses by a little)","data":["D106B454 3892","D106B456 0000","8106B460 00B3","D106B454 3892","D106B456 0000","8106B462 194C"],"options":null},"Hacked Moves\\Running Rock Bottom":{"note":"Replaces: Farooq Spinebuster P2 runs into P1 and P1 delivers a RockBottom to P2.","data":["D106B454 3A80","D106B456 0000","8106B460 00C1","D106B454 3A80","D106B456 0000","8106B462 F7A2","D106B514 3A81","D106B516 0000","8106B520 00C2","D106B514 3A81","D106B516 0000","8106B522 1210"],"options":null},"Hacked Moves\\Running Tazplex":{"note":"Replaces: Underhook Belly to Belly P2 runs into P1 and P1 does a Tazplex to P2.","data":["D106B454 3A7A","D106B456 0000","8106B460 00BC","D106B454 3A7A","D106B456 0000","8106B462 A51E","D106B514 3A7B","D106B516 0000","8106B520 00BC","D106B514 3A7B","D106B516 0000","8106B522 B5FA"],"options":null},"Have All\\Characters,Costumes, \u0026 Moves":{"note":"","data":["50000B02 0000","810BEE40 FFFF"],"options":null},"Infinite\\Money\\Championship Mode":{"note":"For Championship Mode","data":["8109940A FFFF"],"options":null},"Infinite\\Money\\Smackdown Mall Shop":{"note":"For Smackdown Mall Shop","data":["8114FAD6 FFFF"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF5F 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2B7 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["D015A5D1 0015","8015B60F 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["D015A5D1 0015","8015B967 00FF"],"options":null},"Novalty\\Truck In The Crowd":{"note":"","data":["81050110 0747","81050112 0748","81050114 0749","81050116 074A","81050118 074B","81050124 0A4B","81050126 0A43","81050128 0A4B","8105012A 0A43","8105012C 0A43","8105012E 0A43","8105011A 074C","8105011C 074D","81050130 0A43","8105011E 074E","81050132 0A43","81050120 0746","81050134 0A4B","81050122 0743","81050136 0A4B","D1064880 2000","8115AFB0 42EE","D1064880 2000","8115B308 42EE"],"options":null},"Play As\\Player 1\\Option 1":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 1\\Option 2":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 1\\Option 3":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 2\\Option 1":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 2\\Option 2":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 2\\Option 3":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 3\\Option 1":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 3\\Option 2":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 3\\Option 3":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 4\\Option 1":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 4\\Option 2":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 4\\Option 3":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Replace Raw War with\\BACKYARD ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105010E 0F76","8105010C 0F76","810482E8 002F","81050150 2CFD","810528F4 33FF","810528F6 33FF","81050152 2DC7","81050114 04F4","81050116 04F5","8105011E 04F3","81050128 07FF","8105012A 07FF","81050132 07FF","81079F48 400C","81079F5C 3F00","81079F70 3FFF","8107A024 4010","8107A038 3F00","8107A04C 4020","8107A060 3F84","8107A394 4012","8107A3A8 3F00","8107A3BC 4030","8107A3D0 3F84","8105042C 0949","81050436 07FF","81050438 07FF","8105043A 07FF","8105043C 0000","8105043E 07FF","81050440 0949","81050442 0949","81050430 0F76","81050128 07FF","8105012A 07FF","8105012C 0000","8105012E 07FF","81050130 07FF","81050132 07FF","81050134 0000","81050136 08F9","81050196 2CFD","81050194 09EF","81050192 0000","81050190 09EF","8116C49E 0019","8116C4B8 0004","8116C4DC C2E1","8116C4E0 42B4","810500FE 2D2D","81050100 2D2D","81050102 2D2D","81050400 2DC7","81050402 2DC7","81050404 2DC7","81050406 2DC7","81050408 2DC7","8105040A 2DC7","8105040C 2DC7","8105040E 2DC7","50001002 0000","810501B8 0000","50000402 0000","810501E0 0000","50000902 0000","81050262 0000","50001402 0000","81050290 0000","50002C02 0000","810502EC 0000","8107941C 3FE0","81079428 3FFF","810500EC 06FE","810500EE 06FD","810500F8 07FF","810500FA 0997","81050110 06FC","81050112 06FB","8105011A 06FF","8105011C 06FA","81052CF0 2CC9","81052CF4 2D1B","81052CD0 2CD1","81052CD4 0963","81052C84 2CBF","81052C8A 0961","81052CB8 2CC4","81052CBC 2DD7","81052CC8 2CD1","81052CCC 2CFB","81052C78 2CBC","81052C80 2D31","81052CF8 2CC1","81052D00 2DD7"],"options":null},"Replace Raw War with\\BACKYARD WEAK":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0E88","8105042E 2D0D","81050430 2D0D","81050432 2D0D","81050434 2D0D","81050436 07FD","8105043A 2CFB","8105043C 2D0D","8105043E 2D0D","81050440 2D0D","81050442 2D0D","810500E8 2D0D","8105010E 2D0D","8105010C 2D0D","81050150 2D0D","81050196 2CFB","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81050136 2CFB","81050400 2D0D","81050402 2D0D","81050404 2D0D","81050406 2D0D","81050408 2D0D","8105040A 2D0D","8105040C 2D0D","8105040E 2D0D","810528F4 2D0D","810528F6 2D0D","81052CE8 2CC9","81052CEC 2D2D"],"options":null},"Replace Raw War with\\BARBEDWIRE ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 2CFB","8105042E 2CFB","81050430 2CFB","81050432 2CFB","81050434 2CFB","81050436 2CFB","81050438 2CFB","8105043A 2CFB","8105043C 2CFB","8105043E 2CFB","81050440 2CFB","81050442 2CFB","810500E8 2CFB","8105010E 2CFB","8105010C 2CFB","81050150 2CFB","81050196 2CFB","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81050136 2CFB","810528F4 DDDD","810528F6 DDDD","81052CE8 2CCA","81052CEC 2CFB","81050400 2CFB","81050402 2CFB","81050404 2CFB","81050406 2CFB","81050408 2CFB","8105040A 2CFB","8105040C 2CFB","8105040E 2CFB"],"options":null},"Replace Raw War with\\BARBEDWIRE ROPES":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050110 04F3","81050112 04F4","81050114 04F5","81050116 04F3","81050118 04F4","8105011A 04F5","8105011C 04F3","8105011E 04F4","81050120 04F5","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81079D90 3F6C","81079D94 3F48","81079DA4 3D10","81079DB8 3F71","81079E6C 3F6C","81079E80 3D10","81079E90 3F47","81079F48 3F6C","81079F4C BF4C","81079F5C 3D10","81079F70 3F71","8107A024 3F6C","8107A028 3F28","8107A038 3D10","8107A04C 3F71","8107A100 3F6C","8107A114 3D10","8107A124 3F23","8107A1DC 3F6C","8107A1E0 BF2A","8107A1F0 3D10","8107A204 3F71","8107A2B8 3F6C","8107A2BC 3F02","8107A2CC 3D10","8107A2E0 3F71","8107A394 3F6C","8107A3A8 3D10","8107A3B8 3F00","8107A470 3F6C","8107A474 BF02","8107A484 3D10","8107A498 3F71","81050144 0569","81050154 07F7","810528F4 0C01","810528F6 0555","81050140 04F4","81050150 2CFB","8107A628 3F60","8107A63C 3D10","8107A64C 3F52","8107A650 BF80","8107A8BC 3F56","8107A8C4 BA00","8107A8D0 3D10","8107A8DC 3C5A","8107A8E0 3F30","8107A8E4 BF80","8107ADE4 3F56","8107ADEC BA00","8107ADF8 3D10","8107AE04 3C5A","8107AE08 3F0E","8107AE0C BF80","8107AB7C 3F00","D115AF56 2EB2","8115AEC6 0017","D115B2AE 2EB2","8115B21E 0017","D115B606 2EB2","8115B570 0017","D115B95E 2EB2","8115B8CE 0017","81052922 FFFF","81052924 FFFF","81052926 FFFF"],"options":null},"Replace Raw War with\\BARBEDWIRE SQUARE\\Part 1":{"note":"Both Parts must be on for this Press the C Left Button to make your opponent bleed,These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050110 04F3","81050112 04F4","81050114 04F5","81050116 04F3","81050118 04F4","8105011A 04F5","8105011C 04F3","8105011E 04F4","81050120 04F5","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81079D90 3F6C","81079D94 3F48","81079DA4 3D10","81079DB8 3F71","81079E6C 3F6C","81079E80 3D10","81079E90 3F47","81079F48 3F6C","81079F4C BF4C","81079F5C 3D10","81079F70 3F71","8107A024 3F6C","8107A028 3F28","8107A038 3D10","8107A04C 3F71","8107A100 3F6C","8107A114 3D10","8107A124 3F23","8107A1DC 3F6C","8107A1E0 BF2A","8107A1F0 3D10","8107A204 3F71","8107A2B8 3F6C","8107A2BC 3F02","8107A2CC 3D10","8107A2E0 3F71","8107A394 3F6C","8107A3A8 3D10","8107A3B8 3F00","8107A470 3F6C","8107A474 BF02","8107A484 3D10","8107A498 3F71","81050144 0569","81050154 07F7","810528F4 0C01","810528F6 0555","81050140 04F4","81050150 2CFB","8107A628 3F60","8107A63C 3D10","8107A64C 3F52","8107A650 BF80","8107A8BC 3F56","8107A8C4 BA00","8107A8D0 3D10","8107A8DC 3C5A","8107A8E0 3F30","8107A8E4 BF80","8107ADE4 3F56","8107ADEC BA00","8107ADF8 3D10","8107AE04 3C5A","8107AE08 3F0E","8107AE0C BF80","8107AB7C 3F00","D115AF56 2EB2","8115AEC6 0017","D115B2AE 2EB2","8115B21E 0017","D115B606 2EB2","8115B570 0017","D115B95E 2EB2","8115B8CE 0017","81052922 FFFF","81052924 FFFF","81052926 FFFF","8116C330 0000","8116C332 000A","8116C334 0000","8116C336 000A","8116C378 42B4"],"options":null},"Replace Raw War with\\BARBEDWIRE SQUARE\\Part 2":{"note":"Both Parts must be on for this Press the C Left Button to make your opponent bleed,These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8116C382 0000","8116C38C FFFF","81052C9C 0672","81052CA4 2CFB","D1064880 0002","8115B21E 002F","D1064886 0002","8115AEC6 002F","8116C3E4 0000","8116C3E6 000C","8116C3E8 0000","8116C3EA 000C","8116C428 C3D4","8116C440 FFFF","81052CB2 2CC2","81052CB4 0805","81052CB6 2CFB","D1064880 2000","8116C3E6 001F","D1064880 2000","8116C3EA 001F","D1064880 2000","81005592 3F81","D1005592 3F81","8116C3E6 001F","D1064880 2000","81005592 3F81","D1005592 3F81","8116C3EA 001F","D1064886 2000","8116C3E6 001F","D1064886 2000","8116C3E6 001F","D1064886 2000","81005592 3F81","D1005592 3F81","8116C3EA 001F","81052CF8 04F4","81052D00 2CFB","8116C3E4 0000","8116C3E6 0015","8116C3E8 0000","8116C3EA 0015","8116C428 0000","8116C42A 0000","8116C42C 43EB","8116C42E 0000","8116C430 C3A6","8116C432 0000","8116C436 0400","8116C43A 0000","8116C43E 0000","8116C440 FFFF","8116C442 0000","810855A8 3F00","81085684 3F00","81085750 3F00","8108583C 3F00","81050100 2CFB","8105010E 2CFB"],"options":null},"Replace Raw War with\\DUDLEY ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 21A7","8105042E 2D0D","81050432 2D0D","81050436 21A7","8105043E 2D0D","81050440 0000","81050442 0000","810500E8 2D0D","8105010C 2CFD","8105010E 2CFD","81050150 2D29","81050152 2CFB","81050400 09EF","81050402 09EF","81050404 0000","81050406 0000","81050408 0000","8105040A 0000","8105040C 09EF","8105040E 09EF","81050188 04F6","8105018A 04F7","8105018C 04F8","8105018E 04F9","81050190 09EF","81050192 0000","81050194 09EF","81050196 2D0D","810528F4 6666","810528F6 6666","81052CE8 2CC2","81052CEC 2D0D","81052D1C 2CD3","81052D1E 2CD4","81052D20 2CD5","81052D22 2CD6","81052D24 2CFD","81052D26 2CFD","81052D28 2CFB","81052D2A 2CFB","81050124 2CFD","81050126 2CFD","81050128 2CFD","8105012A 2CFD","8105012C 2CFD","8105012E 2CFD","81050130 2CFD","81050132 2CFD","81050134 2CFD","81050136 2CFD","81050154 2CFB","811533F8 002E"],"options":null},"Replace Raw War with\\FLAME ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105010E 0EFE","8105010C 0EFE","810528F4 2508","810528F6 2508","81050430 2401","81050430 2401","81050404 2401","81050406 2401","81050408 2401","81050409 2401","8105040A 2401","8105040C 2401","810500E8 2401"],"options":null},"Replace Raw War with\\FLAMING TURNBUCKLES":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8116C334 FFFF","8116C336 001F","8116C374 C350","8116C376 FFF3","8116C378 4377","8116C37A 2689","8116C37C C380","8116C37E 0406","8116C382 0D14","8116C386 0FCC","8116C38A 07DC","8116C38C FFFF","8116C38E FDE3","8116C3E8 FFFF","8116C3EA 001F","8116C428 C360","8116C42C 4370","8116C430 4376","8116C436 0D14","8116C43A 0FCC","8116C43E 07DC","8116C442 F9C4","8116C49C FFFF","8116C49E 001F","8116C4DC 4360","8116C4E0 4370","8116C4E4 4380","8116C4EA 0CD0","8116C4EE 0136","8116C4F2 04EE","8116C4F6 F601","8116C550 FFFF","8116C552 001F","8116C590 434F","8116C594 4370","8116C598 C36C","8116C59E 0E70","8116C5A2 0F58","8116C5A6 0814","8116C5AA F1E6"],"options":null},"Replace Raw War with\\GREENWICH STREET ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050430 2DC5","81050436 0000","81050438 0000","8105043A 0000","8105043E 0000","810504E8 0EFE","8105010E 2DC5","8105010C 2DC5","81050196 2CFD","81050136 0FB6","81050134 0FC6","81050132 0FB6","81050130 0FC6","8105012E 0FB6","8105012C 0FC6","8105012A 0FB6","81050128 0FC6","81050126 0FB6","81050124 0FC6","81050440 0000","81050442 0000","50002C02 0000","81050378 0000","50002C02 0000","810502EC 0000","50001402 0000","81050290 0000","50000902 0000","81050262 0000","50000402 0000","810501CE 0000","50001002 0000","810501B8 0000","50000402 0000","810501E0 0000","8105042C 2D0D","81050430 0000","81050150 24F0"],"options":null},"Replace Raw War with\\HHH ARNEA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105040E 24EF","8105040C 24EF","8105040A 24EF","81050408 24EF","81050406 24EF","81050404 24EF","81050402 24EF","81050400 24EF","81050436 24E9","81050440 24E9","81050442 24E9","8105043E 24EF","8105042E 24EF","8105043C 24EF","8105042C 24E9","8105010E 24E9","8105010C 24E9","81050196 24E9","8105042E 24EF","81050432 24EF","810500F8 24EF","810500FA 24EF","810500FC 24EF","810500FC 24EF","81050100 24EF","81050100 24EF","81052CE8 2CCA","81052CEC 24EF","81050150 24E9","81050152 24E9","81050154 24E9","810528F4 24E9","810528F6 24E9"],"options":null},"Replace Raw War with\\HOSPITAL ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0949","8105042E 283F","81050428 0949","81050430 0949","81050430 0949","81050436 096B","81050438 0993","8105043A 096B","8105043E 283F","81050440 283F","81050442 283F","810504E8 0949","81050150 283F","81050196 283F","81050400 283F","81050402 283F","81050404 283F","81050406 283F","81050408 283F","8105040A 283F","8105040C 283F","8105040E 283F","810500F8 283F","810500FA 283F","810500FC 283F","810500FE 283F","81050100 283F","81050100 283F","81052CE8 2CCA","81052CEC 283F","8105010E 283F","8105010C 283F","81050124 0949","81050126 0949","81050128 0949","8105012A 0949","8105012C 0949","8105012E 0949","81050130 0949","81050132 0949","81050134 0949","81050136 0949","810500E8 0949","810528F4 0000","81052CE0 2CC9"],"options":null},"Replace Raw War with\\KANE ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0A61","8105042E 0A61","81050428 2B6C","81050430 2B6C","81050430 2B6C","81050436 2B57","81050438 2B57","8105043A 2B57","8105043E 0A61","81050440 2B57","81050442 2B57","810500E8 1B1E","8105010E 2D37","8105010C 209F","81050194 0955","81050196 2B57","81050400 2699","81050402 2699","81050404 2699","81050406 2699","81050408 2699","8105040A 2699","8105040C 2699","8105040E 2699"],"options":null},"Replace Raw War with\\REMOVE RING":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050150 0000","81050152 0000","81050154 0000","810500E8 0000","810855A8 3F00","81085684 3F00","81085750 3F00","8108583C 3F00","81079C08 3F00","81079C14 3F00","81079B10 3F00"],"options":null},"Replace Raw War with\\SHIMMER ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 1932","8105042E 1932","81050430 1932","81050434 1932","81050432 1932","81050436 1932","81050438 1932","8105043A 1932","8105043E 1932","81050440 1932","81050442 1932","81050150 1932","81050152 1932","81050154 1932","81050190 1932","81050192 1932","81050194 1932","81050196 1932","81050124 1932","81050126 1932","81050128 1932","8105012A 1932","8105012C 1932","8105012E 1932","81050130 1932","81050132 1932","81050134 1932","81050136 1932","810500E8 1932","8105010E 1932","8105010C 1932"],"options":null},"Replace Raw War with\\SPACE SHIP ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 094D","8105042E 0953","81050430 0953","81050432 0F0E","81050434 0953","81050436 0F0E","81050438 0899","8105043C 0953","8105043E 0899","81050440 0963","81050442 0963","81050400 0953","81050402 0953","81050404 0953","81050406 0953","81050408 0953","8105040A 0953","8105040C 0953","8105040E 0953","810500E8 0A75","810528F4 7223","810528F6 0119","81050150 0963","81050152 0963","81050190 0953","81050192 0953","81050194 0953","81050196 0963","8105010E 0F0E","8105010C 0F0E","81050124 0F10","81050126 0F10","81050128 0F10","8105012A 0F10","8105012C 0F10","8105012E 0F10","81050130 0F10","81050132 0F10","81050134 0F10","81050136 0F10","810500F8 0963","810500FA 0963","810500FC 0963","810500FE 0963","81050100 0963","81050102 0963","81052CE8 2CCA","81052CEC 0963"],"options":null},"Replace Raw War with\\TOKYO DOME":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["810528F4 7223","810528F6 0119","81050124 0100","81050126 0100","81050128 0100","8105012A 0100","8105012C 0100","8105012E 0100","81050130 0100","81050132 0100","81050134 0100","81050136 0100","8105010E 0999","81050400 03A5","81050402 0385","81050404 0385","81050406 0385","81050408 0385","8105040A 03A5","8105040C 03A5","8105040E 043F","81050430 043F","8105042C 03A5","81050430 21A5","81050432 0100","81050434 0000","81050436 2CFB","81050438 0899","8105043C 03AF","81050440 03AF","81050442 03A5","810500E8 24C3","81050444 0100","81050190 09EF","81050192 0000","81050194 09EF","81050196 2CFD"],"options":null},"Tables\\IN RING TABLE\\Part 1":{"note":"To Make the Table look broken Keep the Z Button press down, To make player stand on the Table, Stand next to it \u0026 Keep C-Right Pressed Down.Put all Parts on Together for this Cheat to work","data":["81052CF0 06E1","81052CF4 09F1","81052CF8 06E2","81052D00 09F1","81052D0C 06E3","81052D0E 06E4","81052D10 09EF","81052D12 09EF","81052D14 06E5","81052D16 06E6","81052D18 09EF","81052D1A 09EF","D1064880 0001","8115AFB0 432C","D1064880 0001","8115B308 432C","D1064880 2000","8115AFB0 42B4","D1064880 2000","8115B308 42B4","8116C330 0000","8116C332 0014","8116C334 0000","8116C336 0014","8116C374 4210","8116C376 C0B1","8116C378 432F","8116C37A 51DC","8116C37C 4210","8116C37E 92F1","8116C382 0800","8116C386 05A0","8116C38A 0800","8116C38C FFFF","8116C38E F3BC","8116C3E4 0000","8116C3E6 0015","8116C3E8 0000","8116C3EA 0015","8116C428 4210","8116C42A C0B1","8116C42C 432F","8116C42E 51DC","8116C430 4210","8116C432 92F1","8116C436 0800","8116C43A 05A0","8116C43E 0800","8116C440 FFFF","8116C442 F3BC","D1064880 2000","8116C378 42E0"],"options":null},"Tables\\IN RING TABLE\\Part 2":{"note":"To Make the Table look broken Keep the Z Button press down, To make player stand on the Table, Stand next to it \u0026 Keep C-Right Pressed Down.Put all Parts on Together for this Cheat to work","data":["D1064880 2000","8116C382 07E0","D1064880 2000","8116C38A 0680","D1064880 2000","8116C42C 42E0","D1064880 2000","8116C436 0820","D1064880 2000","8116C43E 0980","8116C498 0000","8116C49A 0017","8116C49C 0000","8116C49E 0017","8116C4DC 4210","8116C4DE C0B1","8116C4E0 432A","8116C4E2 51DC","8116C4E4 4210","8116C4E6 92F1","8116C4EA 0800","8116C4EE 05A0","8116C4F2 0800","8116C4F4 FFFF","8116C4F6 F3BC","8116C54C 0000","8116C54E 0018","8116C550 0000","8116C552 0018","8116C590 4210","8116C592 C0B1","8116C594 432A","8116C596 51DC","8116C598 4210","8116C59A 92F1","8116C59E 0800","8116C5A2 05A0","8116C5A6 0800","8116C5A8 FFFF","8116C5AA F3BC","D1064880 2000","8116C4E0 42E0","D1064880 2000","8116C4EA 07E0","D1064880 2000","8116C4F2 0680","D1064880 2000","8116C594 42E0","D1064880 2000","8116C59E 0820","D1064880 2000","8116C5A6 0980"],"options":null},"Tables\\MOVABLE TABLES\\Part 1":{"note":"You must use both parts for this cheat to work","data":["81052C24 06E1","81052C26 06E3","81052C2C 09F1","81052C2E 09EF","81052C30 06E2","81052C32 06E5","81052C38 09F1","81052C3A 09EF","81052C48 06E4","81052C4A 06E6","81052C50 09EF","81052C52 09EF","8116C3E4 0000","8116C3E6 0001","8116C3E8 0000","8116C3EA 0001","8116C498 0000","8116C49A 0003","8116C49C 0000","8116C49E 0003","8116C330 0000","8116C332 0000","8116C334 0000","8116C336 0000","D116C556 0000","8116C33A 0000","D116C33A 0000","8116C3EE 0000","D116C3EE 0000","8116C4A2 0000","D116C556 0001","8116C33A 0001","D116C33A 0001","8116C3EE 0001","D116C3EE 0001","8116C4A2 0001","D116C556 0002","8116C33A 0002","D116C33A 0002","8116C3EE 0002","D116C3EE 0002","8116C4A2 0002","D116C556 0003","8116C33A 0003","D116C33A 0003","8116C3EE 0003","D116C3EE 0003","8116C4A2 0003","D116C556 FFFF","8116C33A FFFF","D116C33A FFFF","8116C3EE FFFF","D116C3EE FFFF","8116C4A2 FFFF","D216C556 FFFF","81079B10 3F80","D1064886 2000","81079B10 3F81","D106488C 2000","81079B10 3F81","D1064892 2000","81079B10 3F81"],"options":null},"Tables\\MOVABLE TABLES\\Part 2":{"note":"You must use both parts for this cheat to work","data":["D116C33A FFFF","8116C382 0000","D116C382 0000","8116C386 0000","D116C386 0000","8116C38A 0000","D116C38A 0000","8116C38E 0000","D116C38E 0000","8116C436 0000","D116C436 0000","8116C43A 0000","D116C43A 0000","8116C43E 0000","D116C43E 0000","8116C442 0000","D116C442 0000","8116C4EA 0000","D116C4EA 0000","8116C4EE 0000","D116C4EE 0000","8116C4F2 0000","D116C4F2 0000","8116C4F6 0000","D116C594 42B4","D116C556 FFFF","8116C378 4335","D116C378 4335","8116C42C 4335","D116C42C 4335","8116C4E0 4335","D116C594 3DC7","D116C556 FFFF","8116C378 42B0","D116C378 42B0","8116C42C 42B0","D116C42C 42B0","8116C4E0 42B0","D1064880 2000","81079B10 3F81","D1079B10 3F81","D116C594 42B4","D116C556 FFFF","8116C378 42F0","D116C378 42F0","8116C42C 42F0","D116C42C 42F0","8116C4E0 42F0","D1079B10 3F81","8116C38A 0F00","D116C38A 0F00","8116C43E 0100","D116C594 3C93","8116C378 42B0","81052D18 0000","81052D1A 0000","D116C54C 0000","8116C54E 0018","D116C550 0000","8116C552 0018"],"options":null},"Tables\\Sabu Table":{"note":"Breakable/Fixable/Rebreakable/Refixable press Z to break, C-right + Cdown to fix","data":["8116C49A 000C","8116C49E 000C","8116C4DC 43CC","8116C4E0 42E6","8116C4E4 C2C5","8116C4EE 0800","8116C602 000C","8116C606 000C","8116C648 42E6","8116C644 43CC","8116C64C C314","81052C54 06E3","81052C5C 09EF","8116C6F8 43CC","8116C6FC 42F0","8116C700 C2F1","8116C70A 0400","8116C428 43CC","8116C430 C2D0","8116C42C 42F0","8116C43A 0C00","8116C6B6 0004","8116C6BA 0004","8116C3E6 0004","8116C3EA 0004","D1064880 2000","81005592 3F81","D1005592 3F81","8116C4EA 0F00","D1005592 3F81","8116C652 0100","D1005592 3F81","8116C4E0 4240","D1005592 3F81","8116C648 4240","D1064880 0005","81005CD4 3F83","D1005CD4 3F83","8116C4EA 0000","D1005CD4 3F83","8116C652 0000","D1005CD4 3F83","8116C4E0 42E6","D1005CD4 3F83","8116C648 42E6","D1005CD4 3F83","D1064880 2000","81005CD4 0000"],"options":null},"Ultimate Code\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF5E 0064"],"options":null},"Ultimate Code\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2B6 0064"],"options":null},"Ultimate Code\\Player 3":{"note":"","data":["D015A5D1 0015","8015B60E 0064"],"options":null},"Ultimate Code\\Player 4":{"note":"","data":["D015A5D1 0015","8015B964 0064"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B490 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B490 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B4A4 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B47C 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8106B4A4 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B47C 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B468 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B468 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B510 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B510 3DFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B564 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B53C 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B564 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B53C 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B528 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B528 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B610 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B610 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B624 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5FC 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B624 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5FC 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5E8 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5E8 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6D0 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6D0 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6E4 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6BC 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8006B6E4 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6BC 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6A8 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6A8 3FFF"],"options":null},"Z LADDER":{"note":"Press Z for the ladder to appear, sometimes there is an invisable ladder","data":["D1064880 2000","8116C768 0000","D1064880 2000","8116C76A 0019","D1064880 2000","8116C76C 0000","D1064880 2000","8116C76E 0019","D1064880 2000","8116C788 8104"],"options":null}},"6D9D1FE4-84D10BEA-C:4A":{"Freeze Timer":{"note":"","data":["810BCBD6 0BB8"],"options":null},"Goal Select Player 1":{"note":"","data":["810B637C 00??"],"options":{"10 Goals":"0A","20 Goals":"14","25 Goals":"19","50 Goals":"32","99 Goals":"63","No Goals":"00"}},"Infinite 99 Credits":{"note":"","data":["800B3961 0063"],"options":null},"Other Team Scores no Goals":{"note":"Disable to allow Other team to score","data":["810B6694 0000"],"options":null}},"6DFDCDC3-4DE701C8-C:45":{"Activate Cheat Menu":{"note":"","data":["80053F38 0001"],"options":null},"Away Team Goals":{"note":"","data":["8012BBBD 00??"],"options":{"Max Score":"FF","No Score":"00"}},"Home Team Goals":{"note":"","data":["8012BBBC 00??"],"options":{"Max Score":"FF","No Score":"00"}}},"70B0260E-6716D04C-C:4A":{"Always Shoot 3-Way":{"note":"","data":["800FD19A 0002"],"options":null},"Always Shoot 5-Way":{"note":"","data":["800FD198 0200"],"options":null},"Always Shoot Rapid Fire":{"note":"","data":["800FD19A 1000"],"options":null},"Have Rune Stones":{"note":"","data":["8104EFC6 1FFF"],"options":null},"Have Window Schards":{"note":"","data":["8104EFCA 000F"],"options":null},"Infinite\\Item On Pickup":{"note":"","data":["50010100 0000","810C5BF6 FFFF"],"options":null},"Infinite\\Keys On Pickup":{"note":"","data":["800C5C97 0006"],"options":null},"Infinite\\Max Health":{"note":"","data":["810C5C54 0000","810C5C56 270F","810C5C64 0000","810C5C66 270F"],"options":null},"Infinite\\Money":{"note":"","data":["810C5CF6 FFFF"],"options":null},"Infinite\\Special Weapons":{"note":"","data":["800C5FF7 0009","800C5D37 0009","800C5D67 0009","800C5DE7 0009","800C5EB7 0009"],"options":null},"Infinite\\Turbo":{"note":"","data":["800FD30F 0064"],"options":null},"Level 99":{"note":"","data":["810C5C44 0000","810C5C46 0063"],"options":null},"Max Armour":{"note":"","data":["810C5C34 0000","810C5C36 FFFF"],"options":null},"Max Magic":{"note":"","data":["810C5C24 0000","810C5C26 FFFF"],"options":null},"Max Speed":{"note":"","data":["810C5C14 0000","810C5C16 FFFF"],"options":null},"Max Strength":{"note":"","data":["810C5C04 0000","810C5C06 FFFF"],"options":null}},"7188F445-84410A68-C:4A":{"Can Skip End Credits":{"note":"","data":["8015627F 0001"],"options":null},"Endless Mode":{"note":"","data":["800854CD 0000"],"options":null},"Maximum Dance Gauge\\Player 1":{"note":"","data":["810854DC 03E8"],"options":null},"Maximum Dance Gauge\\Player 2":{"note":"","data":["81085514 03E8"],"options":null},"Maximum Song Score\\Player 1":{"note":"","data":["8108A260 3B9A","8108A262 C9FF"],"options":null},"Maximum Song Score\\Player 2":{"note":"","data":["8108A264 3B9A","8108A266 C9FF"],"options":null},"Maximum Total Score\\Player 1":{"note":"","data":["810854E0 3B9A","810854E2 C9FF"],"options":null},"Maximum Total Score\\Player 2":{"note":"","data":["81085518 3B9A","8101551A C9FF"],"options":null},"Results\\0 Boo Steps\\Player 1":{"note":"","data":["8108A22A 0000"],"options":null},"Results\\0 Boo Steps\\Player 2":{"note":"","data":["8108A242 0000"],"options":null},"Results\\0 Good Steps\\Player 1":{"note":"","data":["8108A226 0000"],"options":null},"Results\\0 Good Steps\\Player 2":{"note":"","data":["8108A23E 0000"],"options":null},"Results\\0 Miss Steps\\Player 1":{"note":"","data":["8108A22E 0000"],"options":null},"Results\\0 Miss Steps\\Player 2":{"note":"","data":["8108A246 0000"],"options":null},"Results\\999 Great Steps\\Player 1":{"note":"","data":["8108A222 03E7"],"options":null},"Results\\999 Great Steps\\Player 2":{"note":"","data":["8108A23A 03E7"],"options":null},"Results\\999 Perfect Steps\\Player 1":{"note":"","data":["8108A21E 03E7"],"options":null},"Results\\999 Perfect Steps\\Player 2":{"note":"","data":["8108A236 03E7"],"options":null},"Unlock All Puzzles":{"note":"","data":["50001902 0000","81156228 FFFF"],"options":null},"Unlock All Songs":{"note":"","data":["8015621D 00FF","8115621E FFFF"],"options":null}},"72611D7D-9919BDD2-C:58":{"Access All\\Cars":{"note":"","data":["8002CC07 000B"],"options":null},"Access All\\Difficulties":{"note":"","data":["8002CC0B 0004"],"options":null},"Access All\\Multiplayer Levels":{"note":"","data":["50000901 0000","8002CC10 0001"],"options":null},"Access All\\Tracks":{"note":"","data":["8002CC03 0006"],"options":null},"Access In-Game Cheats":{"note":"","data":["50001301 0000","8002CC18 0001"],"options":null},"Damage Select":{"note":"","data":["8002C9A3 00??"],"options":{"Double":"02","Half":"01","Normal":"00","Triple":"03"}},"Health Select":{"note":"","data":["8002C98F 00??"],"options":{"Bad Only":"02","Good Only":"01","Normal":"00","Off":"03"}},"Infinite Continues":{"note":"","data":["8002C867 0064"],"options":null},"Low Timer":{"note":"","data":["810259E4 3001"],"options":null},"Power-Up Select":{"note":"","data":["8002C98B 00??"],"options":{"?":"05","Health":"06","Invincible":"07","Mines":"01","Nitros":"04","Normal":"00","Off":"08","Rockets":"02","Stealer":"03"}},"Radar":{"note":"","data":["8002C99F 00??"],"options":{"Off":"01","On":"00"}},"Speed units\\Kph or Mph":{"note":"","data":["81025A78 ????"],"options":{"Kph":"0100","Mph":"0001"}},"View Mode Select?":{"note":"","data":["8002C99B 00??"],"options":{"Fisheye":"03","Flip":"02","Fog":"01","Normal":"00"}},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\01 Coventry Cove":{"note":"","data":["803653CB 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\02 Mount Mayhem":{"note":"","data":["80355DB3 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\03 Inferno Isle":{"note":"","data":["80366323 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\04 Sunset Sands":{"note":"","data":["80345A93 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\05 Metro Madness":{"note":"","data":["8035FF5B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\06 Wicked Woods":{"note":"","data":["80359043 0064"],"options":null}},"729B5E32-B728D980-C:45":{"Always Shoot 3-Way":{"note":"","data":["800FD19A 0002"],"options":null},"Always Shoot 5-Way":{"note":"","data":["800FD198 0200"],"options":null},"Always Shoot Rapid Fire":{"note":"","data":["800FD19A 1000"],"options":null},"Have Rune Stones":{"note":"","data":["8104EFC6 1FFF"],"options":null},"Have Window Schards":{"note":"","data":["8104EFCA 000F"],"options":null},"Infinite\\Item On Pickup":{"note":"","data":["50010100 0000","810C5BF6 FFFF"],"options":null},"Infinite\\Keys On Pickup":{"note":"","data":["800C5C97 0006"],"options":null},"Infinite\\Max Health":{"note":"","data":["810C5C54 0000","810C5C56 270F","810C5C64 0000","810C5C66 270F"],"options":null},"Infinite\\Money":{"note":"","data":["810C5CF6 FFFF"],"options":null},"Infinite\\Special Weapons":{"note":"","data":["800C5FF7 0009","800C5D37 0009","800C5D67 0009","800C5DE7 0009","800C5EB7 0009"],"options":null},"Infinite\\Turbo":{"note":"","data":["800FD30F 0064"],"options":null},"Level 99":{"note":"","data":["810C5C44 0000","810C5C46 0063"],"options":null},"Max Armour":{"note":"","data":["810C5C34 0000","810C5C36 FFFF"],"options":null},"Max Magic":{"note":"","data":["810C5C24 0000","810C5C26 FFFF"],"options":null},"Max Speed":{"note":"","data":["810C5C14 0000","810C5C16 FFFF"],"options":null},"Max Strength":{"note":"","data":["810C5C04 0000","810C5C06 FFFF"],"options":null}},"72F70398-6556A98B-C:45":{"Always 1st":{"note":"","data":["81118FEC 0001"],"options":null},"Enable In-Game cheat Menu \u0026 Cheats":{"note":"Here you can Activate the IN-Built Cheats Menu. At the Front Screen Just Press C-Button Right.This will open up All Tracks \u0026 Characters In Free Play \u0026 Time Attack. Also In A Race, Press The Start/Pause button to Access the In-Cheat-Menu Option.You can also choose how many Pod's Racers are in the Race \u0026 also how many Laps are in the Race in Free Play \u0026 Time Attack","data":["8009B7D7 0001","8109B7DA FFFF"],"options":null},"Have All Tracks Completed":{"note":"","data":["81113E6A FFFF","81113E6C 3FFF","81113E6E 3FFF","81113E70 3FFF","81113E72 00FF"],"options":null},"Infinite Truguts":{"note":"","data":["81113E7A FFFF","81113E78 7FFF"],"options":null},"No Damage":{"note":"If when Racing Your Pod Over heats \u0026 bursts into flames Press \"R\" \u0026 you will Repair the Damage.","data":["800A52D7 0001"],"options":null},"Unlock All Tracks \u0026 Characters":{"note":"When using Unlock All Tracks \u0026 Characters For can to pick \u0026 choose what ever you want to play As \u0026 where ;)","data":["80113E68 00FF","80113E69 00FF","80113E6A 00FF","80113E6B 00FF","81113E68 FFFF","81113E6A FFFF","80113E74 007D","81113E76 FFFF"],"options":null}},"73036F3B-CE0D69E9-C:50":{"Choose A Costume\\Player 1":{"note":"","data":["8104A612 00??"],"options":{"First":"01","Normal":"00","Second":"02","Third":"03"}},"Choose A Costume\\Player 2":{"note":"","data":["8104A616 00??"],"options":{"First":"01","Normal":"00","Second":"02","Third":"03"}},"Enable Restart Match option":{"note":"","data":["800494BB 0002"],"options":null},"Infinite Run\\Player 1":{"note":"","data":["811050FC 0001","811050FE 0000"],"options":null},"Infinite Run\\Player 2":{"note":"","data":["811051B0 0001","811051B2 0000"],"options":null},"Infinite Time":{"note":"","data":["8110524A 0063"],"options":null},"Play As\\Player 1":{"note":"","data":["800FE3C3 00??"],"options":{"Fujin":"05","Goro":"0F","Jarek":"0C","Jax":"0D","Johnny Cage":"0E","Kai":"0B","Liu Kang":"03","Noob Saibot":"11","Quan Chi":"08","Raiden":"01","Reiko":"07","Reptile":"0A","Scorpion":"00","Shinnok":"06","Sonya":"02","Sub-Zero":"04","Tanya":"09"}},"Play As\\Player 2":{"note":"","data":["80126FBF 00??"],"options":{"Fujin":"05","Goro":"0F","Jarek":"0C","Jax":"0D","Johnny Cage":"0E","Kai":"0B","Liu Kang":"03","Noob Saibot":"11","Quan Chi":"08","Raiden":"01","Reiko":"07","Reptile":"0A","Scorpion":"00","Shinnok":"06","Sonya":"02","Sub-Zero":"04","Tanya":"09"}},"Unlimited Energy\\Player 1":{"note":"","data":["810FE208 0001","810FE20A 0000"],"options":null},"Unlimited Energy\\Player 2":{"note":"","data":["81127084 0001","81127086 0000"],"options":null}},"733FCCB1-444892F9-C:50":{"Access All Moves":{"note":"","data":["8037CD70 0001","8037CD71 007F","8037CD72 00FF","8037CD73 00FF"],"options":null},"Do Anywhere Option\\Take off anywhere":{"note":"Press A","data":["D0285734 0080","8037CBA1 0001"],"options":null},"Have\\All Jinjos":{"note":"","data":["8038695B 00FF"],"options":null},"Have\\Blubbers Gold":{"note":"","data":["80386973 00FF"],"options":null},"Have\\Chimpys Oranges":{"note":"","data":["80386977 00FF"],"options":null},"Have\\Eyries Caterpillars":{"note":"","data":["8038699B 00FF"],"options":null},"Have\\Nabnuts Acorns":{"note":"","data":["8038699F 00FF"],"options":null},"Have\\Present Option\\Blue":{"note":"","data":["80386993 00FF"],"options":null},"Have\\Present Option\\Green":{"note":"","data":["8038698F 00FF"],"options":null},"Have\\Present Option\\Red":{"note":"","data":["80386997 00FF"],"options":null},"Have\\Running Shoes":{"note":"","data":["8137CA88 5019"],"options":null},"Have\\Zero Time all Levels":{"note":"","data":["50000B04 0000","813869E4 3000"],"options":null},"Infinite\\255 Eggs":{"note":"","data":["80386947 00FF"],"options":null},"Infinite\\255 Gold Feathers":{"note":"","data":["80386953 00FF"],"options":null},"Infinite\\255 Jigsaws":{"note":"","data":["803869AB 00FF"],"options":null},"Infinite\\255 Notes":{"note":"","data":["80386943 00FF"],"options":null},"Infinite\\255 Red Feathers":{"note":"","data":["8038694F 00FF"],"options":null},"Infinite\\8 Skulls":{"note":"","data":["803869A7 0008"],"options":null},"Infinite\\Air":{"note":"","data":["8038696E 000B"],"options":null},"Infinite\\Health":{"note":"","data":["80386963 0008","80386965 0001"],"options":null},"Infinite\\Lives":{"note":"","data":["8038696B 0009"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0285735 0020","8137CE8C 43E0"],"options":null},"Yumblies Counter\\Banjo":{"note":"","data":["8038697B 00FF"],"options":null},"Yumblies Counter\\Mr Vile":{"note":"","data":["8038697C 00FF"],"options":null}},"7365D8F8-9ED9326F-C:4A":{"Decrease Fodder":{"note":"","data":["81180E44 03E7"],"options":null},"Decrease Material":{"note":"","data":["8118A580 03E7"],"options":null},"Max Money":{"note":"","data":["811FDD2C 000F","811FDD2E 423F"],"options":null}},"736657F6-3C88A702-C:4A":{"Decrease Fodder":{"note":"","data":["81180E44 03E7"],"options":null},"Decrease Material":{"note":"","data":["8118A580 03E7"],"options":null},"Max Money":{"note":"","data":["811FDD2E 423F","811FDD2E 423F"],"options":null}},"736AE6AF-4117E9C7-C:4A":{"Always 1st \u0026 final time 00:00.00":{"note":"All Levels","data":["50000301 0000","801CE6E9 0000"],"options":null},"Difficulty Select":{"note":"","data":["8007C000 00??"],"options":{"Amateur":"00","Intermediate":"01","Mirror Mode":"03","Professional":"02"}},"Frantic Finale\\Colorado\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191992 0063"],"options":null},"Frantic Finale\\Hawaii\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80192072 0063"],"options":null},"Frantic Finale\\Oregon\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018EA42 0063"],"options":null},"Frantic Finale\\Texas\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018F1E2 0063"],"options":null},"Freewayphobia\\Chicago\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80192042 0063"],"options":null},"Freewayphobia\\Dakota\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018D212 0063"],"options":null},"Freewayphobia\\New York\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018F512 0063"],"options":null},"Freewayphobia\\Seattle\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FDF2 0063"],"options":null},"Level Select":{"note":"","data":["801876B9 00??"],"options":{"Contest":"07","Frantic Finale":"04","Freewayphobia":"02","Motor Way Mania":"01","Options":"08","Practice":"06","Time Trial":"05","Traffic Troubles":"00","Vitory Vehicles":"03"}},"Motor Way Mania\\Alaska\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E482 0063"],"options":null},"Motor Way Mania\\Las Vegas\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80192B12 0063"],"options":null},"Motor Way Mania\\Los Angeles\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018DCF2 0063"],"options":null},"Motor Way Mania\\Philadelphia\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80193992 0063"],"options":null},"Play As":{"note":"","data":["800D3161 00??"],"options":{"Daisy Duck":"01","Dewey":"07","Donald Duck":"05","Goofy":"02","Huey":"06","Louie":"08","Lugwig Von Drake":"09","Mickey Mouse":"00","Minnie Mouse":"04","Pete":"03"}},"Traffic Troubles\\Grand Canyon\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80193252 0063"],"options":null},"Traffic Troubles\\Indianapolis\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E892 0063"],"options":null},"Traffic Troubles\\New Mexico\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FD52 0063"],"options":null},"Traffic Troubles\\San Fransisco\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191B62 0063"],"options":null},"Unlock Everything":{"note":"This will unlock all characters, tracks, mirror mode, all in-game cheats, postcards, pluto's collar and give you all Trophies for every track and difficulties. To have this cheat save to mempak, enable it and then go into the Options Menu and disable the cheat. Go to the Wide-Screen Settings and Change it to Wide-Screen [16.9] and then the B button to get back to Wide-Screen Settings, now go back into Wide-Screen [16.9] and change it back to Normal [4.3].and press the B button until you come back to the main Options Menu.Close the game and load it again to see everything saved to the Mempak and unlocked.","data":["800D3208 008F","800D3209 0094","800D320A 0003","800D320C 0001","800D320F 0080","50000502 0000","800D3210 0009","50000502 0000","800D3211 0024","800D321A 0015","800D321B 007F","800D321C 0001","800D321D 00FF","800D321E 0004","800D321F 0022"],"options":null},"Victory Vehicles\\Everglades\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FC22 0063"],"options":null},"Victory Vehicles\\Malibu\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801916B2 0063"],"options":null},"Victory Vehicles\\Washington DC\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80197662 0063"],"options":null},"Victory Vehicles\\Yellowstone\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018D4C2 0063"],"options":null}},"73A88E3D-3AC5C571-C:45":{"Arcade Mode\\Car Modifier":{"note":"","data":["802818B3 00??"],"options":{"Hyundai Coupe EVO 2":"08","Mitsubishi Lancer Evolution V":"00","Nissan Almera Kit Car":"03","Proton WIRA":"07","Seat Cordoba WRC":"04","Skoda Octavia":"05","Subaru Impreza WRC":"01","Toyota Corolla WRC":"02","VW Golf GTI MK IV":"06"}},"Championship Mode\\Australia\\Infinite Damage\\Front End":{"note":"","data":["80178FA0 003E"],"options":null},"Championship Mode\\Australia\\Infinite Damage\\Left Side":{"note":"","data":["80178FA4 0040"],"options":null},"Championship Mode\\Australia\\Infinite Damage\\Right Side":{"note":"","data":["80178FA8 0040"],"options":null},"Championship Mode\\Australia\\Infinite Damage\\Tires":{"note":"","data":["80178FAC 0040"],"options":null},"Championship Mode\\Australia\\Start On 3rd Lap":{"note":"","data":["D0178F6F 0001","80178F6F 0003"],"options":null},"Championship Mode\\Brazil\\Infinite Damage\\Front End":{"note":"","data":["801748E0 0040"],"options":null},"Championship Mode\\Brazil\\Infinite Damage\\Left Side":{"note":"","data":["801748E4 0040"],"options":null},"Championship Mode\\Brazil\\Infinite Damage\\Right Side":{"note":"","data":["801748E8 0040"],"options":null},"Championship Mode\\Brazil\\Infinite Damage\\Tires":{"note":"","data":["801748EC 0040"],"options":null},"Championship Mode\\Brazil\\Start On 3rd Lap":{"note":"","data":["D01748AF 0001","801748AF 0003"],"options":null},"Championship Mode\\Canada\\Infinite Damage\\Front End":{"note":"","data":["8017CFA0 0040"],"options":null},"Championship Mode\\Canada\\Infinite Damage\\Left Side":{"note":"","data":["8017CFA4 0040"],"options":null},"Championship Mode\\Canada\\Infinite Damage\\Right Side":{"note":"","data":["8017CFA8 0040"],"options":null},"Championship Mode\\Canada\\Infinite Damage\\Tires":{"note":"","data":["8017CFAC 0040"],"options":null},"Championship Mode\\Canada\\Start On 3rd Lap":{"note":"","data":["D017CF6F 0001","8017CF6F 0003"],"options":null},"Championship Mode\\France\\Infinite Damage\\Front End":{"note":"","data":["80172490 0040"],"options":null},"Championship Mode\\France\\Infinite Damage\\Left Side":{"note":"","data":["80172494 0040"],"options":null},"Championship Mode\\France\\Infinite Damage\\Right Side":{"note":"","data":["80172498 0040"],"options":null},"Championship Mode\\France\\Infinite Damage\\Tires":{"note":"","data":["8017249C 0040"],"options":null},"Championship Mode\\France\\Start On 3rd Lap":{"note":"","data":["D017245F 0001","8017245F 0003"],"options":null},"Championship Mode\\Germany\\Infinite Damage\\Front End":{"note":"","data":["8017DFA0 0040"],"options":null},"Championship Mode\\Germany\\Infinite Damage\\Left Side":{"note":"","data":["8017DFA4 0040"],"options":null},"Championship Mode\\Germany\\Infinite Damage\\Right Side":{"note":"","data":["8017DFA8 0040"],"options":null},"Championship Mode\\Germany\\Infinite Damage\\Tires":{"note":"","data":["8017DFAC 0040"],"options":null},"Championship Mode\\Germany\\Start On 3rd Lap":{"note":"","data":["D017DF6F 0001","8017DF6F 0003"],"options":null},"Championship Mode\\Great Britain\\Infinite Damage\\Front End":{"note":"","data":["801766C0 0040"],"options":null},"Championship Mode\\Great Britain\\Infinite Damage\\Left Side":{"note":"","data":["801766C4 0040"],"options":null},"Championship Mode\\Great Britain\\Infinite Damage\\Right Side":{"note":"","data":["801766C8 0040"],"options":null},"Championship Mode\\Great Britain\\Infinite Damage\\Tires":{"note":"","data":["801766CC 0040"],"options":null},"Championship Mode\\Great Britain\\Start On 3rd Lap":{"note":"","data":["D017668F 0001","8017668F 0003"],"options":null},"Championship Mode\\Have 255 Race Points":{"note":"","data":["80101D1A 00FF"],"options":null},"Championship Mode\\Italy\\Infinite Damage\\Front End":{"note":"","data":["8017E500 0040"],"options":null},"Championship Mode\\Italy\\Infinite Damage\\Left Side":{"note":"","data":["8017E504 0040"],"options":null},"Championship Mode\\Italy\\Infinite Damage\\Right Side":{"note":"","data":["8017E508 0040"],"options":null},"Championship Mode\\Italy\\Infinite Damage\\Tires":{"note":"","data":["8017E50C 0040"],"options":null},"Championship Mode\\Italy\\Start On 3rd Lap":{"note":"","data":["D017E4CF 0001","8017E4CF 0003"],"options":null},"Championship Mode\\Spain\\Infinite Damage\\Front End":{"note":"","data":["801870F0 0040"],"options":null},"Championship Mode\\Spain\\Infinite Damage\\Left Side":{"note":"","data":["801870F4 0040"],"options":null},"Championship Mode\\Spain\\Infinite Damage\\Right Side":{"note":"","data":["801870F8 0040"],"options":null},"Championship Mode\\Spain\\Infinite Damage\\Tires":{"note":"","data":["801870FC 0040"],"options":null},"Championship Mode\\Spain\\Start On 3rd Lap":{"note":"","data":["D01870BF 0001","801870BF 0003"],"options":null},"Championship Mode\\USA\\Infinite Damage\\Front End":{"note":"","data":["8017EFA0 0040"],"options":null},"Championship Mode\\USA\\Infinite Damage\\Left Side":{"note":"","data":["8017EFA4 0040"],"options":null},"Championship Mode\\USA\\Infinite Damage\\Right Side":{"note":"","data":["8017EFA8 0040"],"options":null},"Championship Mode\\USA\\Infinite Damage\\Tires":{"note":"","data":["8017EFAC 0040"],"options":null},"Championship Mode\\USA\\Start On 3rd Lap":{"note":"","data":["D017EF6F 0001","8017EF6F 0003"],"options":null},"Easy Courses\\Australia\\Always Low Lap Timer":{"note":"","data":["81178F90 0000","81178F92 0000"],"options":null},"Easy Courses\\Australia\\Have 1st":{"note":"","data":["80178F87 0000"],"options":null},"Easy Courses\\Great Britian\\Always Low Lap Timer":{"note":"","data":["811766B0 0000","811766B2 0000"],"options":null},"Easy Courses\\Great Britian\\Have 1st":{"note":"","data":["801766A7 0000"],"options":null},"Easy Courses\\Spain\\Always Low Lap Timer":{"note":"","data":["811870E0 0000","811870E2 0000"],"options":null},"Easy Courses\\Spain\\Have 1st":{"note":"","data":["801870D7 0000"],"options":null},"Expert Courses\\Canada\\Always Low Lap Timer":{"note":"","data":["8117CF90 0000","8117CF92 0000"],"options":null},"Expert Courses\\Canada\\Have 1st":{"note":"","data":["8017CF87 0000"],"options":null},"Expert Courses\\Germany\\Always Low Lap Timer":{"note":"","data":["8117DF90 0000","8117DF92 0000"],"options":null},"Expert Courses\\Germany\\Have 1st":{"note":"","data":["8017DF87 0000"],"options":null},"Expert Courses\\USA\\Always Low Lap Timer":{"note":"","data":["8117EF90 0000","8117EF92 0000"],"options":null},"Expert Courses\\USA\\Have 1st":{"note":"","data":["8017EF87 0000"],"options":null},"Infinite Time":{"note":"","data":["81104998 49F2"],"options":null},"Medium Courses\\Brazil\\Always Low Lap Timer":{"note":"","data":["811748D0 0000","811748D2 0000"],"options":null},"Medium Courses\\Brazil\\Have 1st":{"note":"","data":["801748C7 0000"],"options":null},"Medium Courses\\France\\Always Low Lap Timer":{"note":"","data":["81172480 0000","81172482 0000"],"options":null},"Medium Courses\\France\\Have 1st":{"note":"","data":["80172477 0000"],"options":null},"Medium Courses\\Italy\\Always Low Lap Timer":{"note":"","data":["8117E4D0 0000","8117E4D2 0000"],"options":null},"Medium Courses\\Italy\\Have 1st":{"note":"","data":["8017E4E7 0000"],"options":null}},"73ABB1FB-9CCA6093-C:45":{"Always 1st":{"note":"","data":["8022AD06 0001"],"options":null},"Class Select":{"note":"This code is useful because you can play Class AA without having to beat a level!","data":["8021E1A7 00??"],"options":{"1 Play":"04","2 Play":"05","3 Play":"06","4 Play":"07","Class AA":"03","Class B":"01","Class C":"00"}},"Super Speed":{"note":"This is Turbo fast,So to slow it down a little more keep the B button pressed down","data":["8122AEB8 4800"],"options":null}},"7433D9D7-2C4322D0-C:50":{"Have All\\Weapons and Infinite Max Ammo\\Level 01":{"note":"","data":["50000904 0000","802A46AB 0001","50000604 0000","812A46CE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 02":{"note":"","data":["50000904 0000","8028A47B 0001","50000604 0000","8128A49E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 03":{"note":"","data":["50000904 0000","8027223B 0001","50000604 0000","8127225E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 04":{"note":"","data":["50000904 0000","8026A70B 0001","50000604 0000","8126A72E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 05":{"note":"","data":["50000904 0000","8028812B 0001","50000604 0000","8128814E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 06":{"note":"","data":["50000904 0000","8027DA0B 0001","50000604 0000","8127DA2E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 07":{"note":"","data":["50000904 0000","802811CB 0001","50000604 0000","812811EE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 08":{"note":"","data":["50000904 0000","8027C45B 0001","50000604 0000","8127C47E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 09":{"note":"","data":["50000904 0000","80247C7B 0001","50000604 0000","81247C9E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 10":{"note":"","data":["50000904 0000","80276C4B 0001","50000604 0000","81276C6E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 11":{"note":"","data":["50000904 0000","80278AFB 0001","50000604 0000","81278B1E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 12":{"note":"","data":["50000904 0000","8028F69B 0001","50000604 0000","8128F6BE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 13":{"note":"","data":["50000904 0000","80278A4B 0001","50000604 0000","81278A6E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 14":{"note":"","data":["50000904 0000","802807DB 0001","50000604 0000","812807FE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 15":{"note":"","data":["50000904 0000","8027636B 0001","50000604 0000","8127638E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 16":{"note":"","data":["50000904 0000","8028B7FB 0001","50000604 0000","8128B81E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 17":{"note":"","data":["50000904 0000","8027278B 0001","50000604 0000","812727AE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 18":{"note":"","data":["50000904 0000","8026594B 0001","50000604 0000","8126596E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 19":{"note":"","data":["50000904 0000","8024A28B 0001","50000604 0000","8124A2AE 03E7"],"options":null},"Invincible":{"note":"","data":["8002E618 0000"],"options":null},"Status Bar Always On":{"note":"","data":["8008E4CF 0001"],"options":null}},"74E87A70-6293AED4-C:50":{"Cheats Enabled Modifier":{"note":"","data":["8108F8F0 ????"],"options":{"Anyway (Race Circuits Backwards)":"0400","Big Wheels (Big Foot Cars)":"0040","Car Radio (Remote Control Cars)":"0100","Chopper (Top Down View)":"0200","Easy Money (You Get 1":"0008","Extra Resolution (Able To Change Resolution In Options Screen)":"0800","Fast Bucks (You Get 250":"0004","Skywalker (Hover Cars)":"0080","Smurfing (High Pitched Voices)":"0020","Trophies (Second And Third Championships Wins)":"0010"}},"Have\\Access All Trophies":{"note":"Also gives you all extra features in quick race \u0026 Trophy mode","data":["800BAA9B 0007","800BACAF 0007"],"options":null},"Have\\Always 1st":{"note":"","data":["800C1F81 0001","800C1F83 0001"],"options":null},"Have\\Easy Win":{"note":"Right After Start,Go, Quit Race, And you Have Won","data":["800BACAD 000A"],"options":null},"Have\\Infinite Supply Of Super Tires":{"note":"For All Cars","data":["5000220C 0000","810BAD58 0F0F","5000220C 0000","810BAD5A 0F0F"],"options":null},"Have\\Lots Of Seasons":{"note":"","data":["810BACAA 03E7"],"options":null},"Have\\Max Cash":{"note":"","data":["810BACA4 3AFF","810BACA6 F454"],"options":null},"Have\\Max Race Points":{"note":"","data":["800BACBE 00FF"],"options":null},"Have\\Max Upgrade":{"note":"For All Cars","data":["5000220C 0200","810BAD56 0270"],"options":null},"Race Options\\Laps To Race Select":{"note":"","data":["800A4649 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Race Options\\Race Direction Select":{"note":"","data":["800A4601 00??"],"options":{"Mirrored Normal":"02","Mirrored Reverse":"03","Normal":"00","Reverse":"01"}},"Race Options\\Track Select":{"note":"","data":["8008FA5D 00??"],"options":{"Area 51":"04","Chateau":"07","Docklands":"08","Lumber Mill":"03","Oilfields":"05","Rocket Base":"00","Ski Resort":"02","Temple":"01","Titus Park":"09","Tudor Village":"06"}},"Race Options\\View Select":{"note":"Select your View and then at start of Race press C-Up Button","data":["D00C2171 0000","800C2171 00??"],"options":{"Behind View":"01","Distant Behind View":"0B","Further Behind View":"02","Helicopter View":"FF","Inside Car":"00"}},"Special Category\\A Car [Mind Star 600]":{"note":"","data":["810BAE8E 3D70","810BAE90 0F0F","810BAE92 0F0F"],"options":null},"Special Category\\B Car [Vertige Stallion]":{"note":"","data":["810BAE16 2378","810BAE18 0F0F","810BAE1A 0F0F"],"options":null},"Special Category\\C Car [Mind Star 200R]":{"note":"","data":["810BAD86 0A78","810BAD88 0F0F","810BAD8A 0F0F"],"options":null}},"75A4E247-6008963D-C:45":{"Brandon Gang":{"note":"","data":["80125AB6 0001"],"options":null},"Cassandra Gang":{"note":"","data":["80125AB5 0001"],"options":null},"Edge Hits Everything":{"note":"","data":["80071AF0 0043"],"options":null},"Enable Models":{"note":"","data":["80125AB3 0001"],"options":null},"Infinite Tank Bucks":{"note":"","data":["80236A9F 0064"],"options":null},"Invulnerability":{"note":"","data":["80125AB0 0001"],"options":null},"Level Select":{"note":"","data":["80117F49 0001"],"options":null},"Mini-Tanks 1":{"note":"","data":["80125AB8 0001"],"options":null},"Mini-Tanks 2":{"note":"","data":["80125AB9 0001"],"options":null},"Mini-Tanks 3":{"note":"","data":["80125AB9 0001"],"options":null},"Mini-Tanks 4":{"note":"","data":["80125ABB 0001"],"options":null},"Mini-Tanks 5":{"note":"","data":["80125ABC 0001"],"options":null},"Rapid Fire":{"note":"","data":["8008E7F0 0001"],"options":null},"Secret Level":{"note":"","data":["80125AB2 0001"],"options":null},"Start With All Weapons":{"note":"","data":["80125AB1 0001"],"options":null}},"75B61647-7ADABF78-C:45":{"Max Score":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null},"Press L Button for Max Gauge\\Player 1":{"note":"","data":["D00B49D1 0020","811D2602 0098"],"options":null},"Press L Button for Max Gauge\\Player 2":{"note":"","data":["D00B49D7 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}}},"75FA0E14-C9B3D105-C:44":{"Earn Spirits Faster":{"note":"","data":["8007D66D 0000"],"options":null},"Have All Elements":{"note":"","data":["8107D65C 3232","8107D65E 3232"],"options":null},"Makes your HP 999-999":{"note":"","data":["8107D63C 03E7","8107D63E 03E7"],"options":null},"Makes your MP 999-999":{"note":"","data":["8107D640 03E7","8107D642 03E7"],"options":null},"No Random Battles":{"note":"","data":["8008E12C 0000","8008E12E 0000"],"options":null},"Set Agility to 999-999":{"note":"","data":["8107D644 03E7"],"options":null},"Set Defence to 999-999":{"note":"","data":["8107D646 03E7"],"options":null}},"769147F3-2033C10E-C:45":{"Always Have Equipped\\Player 1":{"note":"","data":["8039B144 00??","8039B147 00??","8039B149 0009"],"options":{"Boomerang":"04","Bullets":"07","Magnet":"01","Seeker":"05","Shield":"08","Stinger":"03","Stopper":"06","Turbo":"00"}},"Always Have Equipped\\Player 2":{"note":"","data":["8039B3E4 00??","8039B3E7 00??","8039B3E9 0009"],"options":{"Boomerang":"04","Bullets":"07","Magnet":"01","Seeker":"05","Shield":"08","Stinger":"03","Stopper":"06","Turbo":"00"}},"Always Have Equipped\\Player 3":{"note":"","data":["8039B684 00??","8039B687 00??","8039B689 0009"],"options":{"Boomerang":"04","Bullets":"07","Magnet":"01","Seeker":"05","Shield":"08","Stinger":"03","Stopper":"06","Turbo":"00"}},"Always Have Equipped\\Player 4":{"note":"","data":["8039B924 00??","8039B927 00??","8039B929 0009"],"options":{"Boomerang":"04","Bullets":"07","Magnet":"01","Seeker":"05","Shield":"08","Stinger":"03","Stopper":"06","Turbo":"00"}},"Game Speed":{"note":"","data":["802C9339 00??"],"options":{"Advanced":"02","Default":"01","Master":"03","Novice":"00"}},"Have All\\Cars":{"note":"","data":["50000402 0000","803DF94B 0001"],"options":null},"Have All\\Cups,Tracks \u0026 Challenges":{"note":"","data":["50000302 0000","802CB4A9 0001","50000402 0000","803DD109 0001"],"options":null},"Infinite Credits":{"note":"","data":["80388C1D 0009"],"options":null},"Max Score Points":{"note":"","data":["8139AFB6 03E7"],"options":null}},"776646F6-06B9AC2B-C:50":{"Boost From Start":{"note":"","data":["D02C4DA0 003F","802C4925 0050"],"options":null},"Infinite Lives":{"note":"","data":["800D8729 0005"],"options":null},"Infinite Shield":{"note":"","data":["812C4B48 4326","812C4B4C 4326"],"options":null},"Time Always 00.00.00/1st Place":{"note":"","data":["812C4BC0 0000","812C4BC2 0001"],"options":null},"Unlock Everything":{"note":"","data":["810C01E8 0100"],"options":null}},"782A9075-E552631D-C:44":{"Have 99 coins":{"note":"","data":["810BBBDE 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C8542 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BBBCC 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BBBD6 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BBBDA 0009"],"options":null}},"7928FE93-135A30CB-C:45":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118D8C0 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118D8C2 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118D8C4 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118D8C6 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["50000401 0000","8018ED10 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\1-2 player Mode\\Player 1":{"note":"","data":["80165F5D 00??","80165F8A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\1-2 player Mode\\Player 2":{"note":"","data":["8016603D 00??","8016606A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["8016611D 00??","8016614A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["801661FD 00??","8016622A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["801662DD 00??","8016630A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["801663BD 00??","801663EA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818EDEF 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F6915 0020","810F69C8 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F6925 0020","810F77A0 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F6935 0020","810F8578 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F6945 0020","810F9350 4000"],"options":null}},"7A65FDEC-50296300-C:45":{"All 64 Characters In Multi Player":{"note":"","data":["8002B197 0040"],"options":null},"All Objectives Complete":{"note":"","data":["80036FD3 0001"],"options":null},"Always Have\\00:00 Time (All Levels)":{"note":"","data":["8004837E 0000","8004838E 0000","80048396 0000","80079A22 0000","80079F26 0000"],"options":null},"Bulletproof Bond":{"note":"","data":["8002CE44 0030"],"options":null},"Cradle in multiplayer":{"note":"Puts the cradle graphic in the levels screen where the facility normally is in the multiplayer levels screen.Warning it doesn't allow you to enter the multiplayer levels screen,it should automatically Have\\selected cradle, which cannot be changed from the multiplayer menus","data":["8002B11D 0092","8002B11F 0093","8002B127 0029","8002B123 0008","802ADC8D 0052","802ADC8E 0041","802ADC8F 0044","802ADC90 004C","802ADC91 0045"],"options":null},"Custom Weapon Grouping":{"note":"golden gun fun should replace slappers only! appears in the multi weapons.","data":["80048673 0013","81048678 3FC0","80048677 00D0","8004867F 000D","80048683 000A","8004868B 0013","81048690 3FC0","8004868F 00D0","80048697 000D","8004869B 000A","800486A3 0019","810486A8 3FC0","800486A7 00D3","800486AF 0006","800486B3 0003","800486BB 0019","810486C0 3FC0","800486BF 00D3","800486C7 0006","800486CB 0003","800486D3 0013","810486D8 3FC0","800486D7 00D0","800486DF 000D","800486E3 000A","800486EB 0013","810486F0 3FC0","800486EF 00D0","800486F7 000D","800486FB 000A","80048703 0019","81048708 3FC0","80048707 00D3","8004870F 0006","80048713 0003","8004871B 0019","81048720 3FC0","8004871F 00D3","80048727 0006","8004872B 0003","812AEA50 476F","812AEA52 6C64","812AEA54 656E","812AEA56 2047","812AEA58 756E","812AEA5A 2046","812AEA5C 756E","802AEA5E 0000"],"options":null},"Enable All Levels":{"note":"","data":["80036FB7 0001"],"options":null},"Enable All Levels \u0026 In-Built Cheat Menu":{"note":"","data":["8006992E FFFF","80069930 FFFF","80069967 FFFF","8006996C FFFF","80069971 FFFF","80069976 FFFF","8006997B FFFF","8006992F FFFF","80069965 FFFF","8006996A FFFF","8006996F FFFF","80069974 FFFF","80069979 FFFF"],"options":null},"Facility Back Zone In Multiplayer\\Part 1\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811E6554 45E4","811E6558 43D5","811E655C C5A7","811E657C 801C","811E657E 6774","811E5164 45E4","811E5168 C383","811E516C 4492","811E518C 801C","811E518E D574","811E78C0 45AD","811E78C4 C383","811E78C8 4440","811E78E8 801C","811E78EA E464","811E4D18 45D0","811E4D1C 4307","811E4D20 C4FB","811E4D40 801C","811E4D42 75EC","811E6738 45CD","811E673C C383","811E6740 43F4","811E6760 801C","811E6762 A0DC","811E5450 45C2","811E5454 4356","811E5458 C598","811E5478 801C","811E547A 6A74","811E5240 4608","811E5244 4307","811E5248 43DC","811E5268 801C","811E526A 962C","811E691C 4606","811E6920 4321","811E6924 449D","811E6944 801C","811E6946 CBEC","801ED447 008A","801ED4DB 008B","801ED56F 008C","801ED603 008D","801ED697 008E","801ED72B 008F","801ED7BF 007D","801ED853 007E","801ED443 002A","801ED4D7 002A","801ED56B 002A","801ED5FF 002A","801ED693 002A","801ED727 002A","801ED7BB 002A","801ED84F 002A","801ED449 0000","801ED4DD 0000","801ED571 0000","801ED605 0000","801ED699 0000","801ED72D 0000","801ED7C1 0000","801ED855 0000","801ED44D 0000","801ED4E1 0000","801ED575 0000","801ED609 0000","801ED69D 0000","801ED731 0000","801ED7C5 0000","801ED859 0000","801EB743 002A","801EB745 0068","811EB746 277F","811EB748 1000","811EB74A 0262","811EB7C2 0190","801EB7C5 0000","811EB7C6 0258"],"options":null},"Facility Back Zone In Multiplayer\\Part 2\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811EB7C8 0000","811EB7CC FFFF","811EB7CE FFFF","811EB7D2 0000","801EB7D5 0000","801EB7DB 0000","811EB7E2 0000","801EB7E7 0000","801EB843 002A","801EB845 0068","811EB846 2780","811EB848 1000","811EB84A 0262","811EB8C2 0190","801EB8C5 0000","811EB8C6 0258","811EB8C8 0000","811EB8CC FFFF","811EB8CE FFFF","811EB8D2 0000","801EB8D5 0000","801EB8DB 0000","811EB8E2 0000","801EB8E7 0000","801EB943 002A","801EB945 0068","811EB946 2791","811EB948 1000","811EB94A 0262","811EB9C2 0190","801EB9C5 0000","811EB9C6 0258","811EB9C8 0000","811EB9CC FFFF","811EB9CE FFFF","811EB9D2 0000","801EB9D5 0000","801EB9DB 0000","811EB9E2 0000","801EB9E7 0000","801EBA43 002A","801EBA45 0068","811EBA46 2792","811EBA48 1000","811EBA4A 0262","811EBAC2 0190","801EBAC5 0000","811EBAC6 0258","811EBAC8 0000","811EBACC FFFF","811EBACE FFFF","811EBAD2 0000","801EBAD5 0000","801EBADB 0000","811EBAE2 0000","801EBAE7 0000","801EBB45 00A0","801EBC45 00A0","801EBD45 00A0","801EBE45 00A0","801EBB47 0075","801EBC47 0076","801EBD47 0077","801EBE47 0078","801EBBE7 0001","801EBCE7 0001","801EBDE7 0001","801EBEE7 0001","801EC247 0071","801ECD47 0072","801ECE47 0074","801ECF47 006C","801ED047 0079","801ED147 0083","D01EBFC5 005A","801EBFC5 0000","D11EBFC6 0000","811EBFC6 F333","D11EBFC8 03E8","811EBFC8 0000"],"options":null},"Facility Back Zone In Multiplayer\\Part 3\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["D11EBFCA 0000","811EBFCA F0C4","D11EBFCE 4CCC","811EBFCE 000A","D11EBFD2 4CCC","811EBFD2 000A","D11EBFD4 0003","811EBFD4 0000","D11EBFD6 0000","811EBFD6 02C4","801EBFD9 0004","801EBFDB 0000","811EBFE2 0384","801EBFE7 0004","801EBF45 009E","801EBF47 0084","801EBF48 0010","801EC2D9 0000","801EC447 0085","801EC547 0086","811EA6B6 2743","811EA73E 0114","811EA7F2 0115","811EA8A6 00A3","811EA92E 009D","811EA9E2 00A4","811EAA96 00DA","811EAB1E 00DB","811EABD2 00DF","811EAC86 0130","811EAD0E 008D","811EADC2 012E","811EAE76 0111","811EAEFE 2740","811EAFB2 2741","811EB066 00A0","811EB0EE 009E","811EB1A2 009F","811EB256 274F","811EB2DE 2750","811EB392 0117","811EB446 0131","811EB4CE 008E","811EB582 0132","811EB636 00A1","811EB6BE 0119","811EA62E 00FA","801ED3DF 0000","801ED2DF 0001","D0024337 0007","80024337 001F"],"options":null},"Gain Access\\To Aztec Level Without Beating Secret Agent Or 00 Agent":{"note":"","data":["8002A8FB 001A"],"options":null},"Gain Access\\To Egyptian Level Without Beating Secret Agent Or 00 Agent":{"note":"","data":["8002A8FB 001C"],"options":null},"Infinite Ammo (All Levels)":{"note":"","data":["80079E3B 0001"],"options":null},"Infinite Health Player 1 (all levels)":{"note":"","data":["8100C0F4 0801","8100C0F6 8090","8100C0F8 AFA4","8100C0FA 0000","81060240 0004","81060242 7600","81060244 3C02","81060246 8008","81060248 8C42","8106024A 9EE0","8106024C 3401","8106024E 3F80","81060250 A441","81060252 00DC","81060254 0800","81060256 303F"],"options":null},"Replace Cradle with Citadell hidden level":{"note":"","data":["8002A8F7 0029","8104468A 8970","81044690 3F44","81044692 BDEA","81044694 3F80","81044696 0000","81044698 4219","8104469A D89D","80069F80 00C4"],"options":null},"Secret Island on Dam Level":{"note":"For the above code to work,Get to the 2nd guard tower \u0026 go down the ladder on the left hand side \u0026 to the end of the Dock, Press L \u0026 GS and you will be transfered in the water. Just keep walking straight \u0026 you will get to it. Obviously you can't actually climb ladders or anything, you will simply walkthrough anything on that Part, if you want to walk back to the Dock, when you come near it click the cheat back on \u0026 keep pressing L \u0026 GS untill you are back on it.","data":["D0064F31 0020","800D33ED 0050","880D33ED 0000"],"options":null},"Walk through doors, objects":{"note":"","data":["800364CB 00??"],"options":{"Off":"01","On":"00"}},"Weak Enemies":{"note":"","data":["8002CE48 0048"],"options":null}},"7AA65B36-FDCEE5AD-C:4A":{"Always Have\\BFG 9000":{"note":"","data":["80063B4B 0001"],"options":null},"Always Have\\Bio Suite":{"note":"","data":["80063AF3 00??"],"options":{"Off":"00","On":"FF"}},"Always Have\\Chain Gun":{"note":"","data":["80063B3F 0001"],"options":null},"Always Have\\Chainsaw":{"note":"","data":["80063B2B 0001"],"options":null},"Always Have\\Double Shotgun":{"note":"","data":["80063B3B 0001"],"options":null},"Always Have\\Gun":{"note":"","data":["80063B33 0001"],"options":null},"Always Have\\Have Rocket Launcher":{"note":"","data":["80063B41 0001"],"options":null},"Always Have\\Laser Weapon":{"note":"","data":["80063B4D 0001"],"options":null},"Always Have\\Missile Launcher":{"note":"","data":["80063B43 0001"],"options":null},"Always Have\\Plasma Rifle":{"note":"","data":["80063B47 0001"],"options":null},"Always Have\\Rapid Fire":{"note":"","data":["81063BAA 0B94"],"options":null},"Always Have\\Shotgun":{"note":"","data":["80063B37 0001"],"options":null},"Berserk Mode":{"note":"","data":["80063AEB 00FF"],"options":null},"Enable Cheat Menu":{"note":"","data":["8005B043 0001"],"options":null},"Have All\\Keys":{"note":"","data":["50000504 0000","81063AFE FFFF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000A04 0000","81063B2A 0001"],"options":null},"Infinite\\Ammo All Weapons":{"note":"","data":["50000404 0000","81063B52 013C"],"options":null},"Infinite\\Armor":{"note":"","data":["80063ADF 00FF"],"options":null},"Invincible":{"note":"","data":["80063B7B 0002"],"options":null},"Invincible And Map Markers":{"note":"","data":["80063B7B 0006"],"options":null},"Turn Map Markers On":{"note":"","data":["80063B7B 0004"],"options":null},"[Max Brightness]":{"note":"Enable this cheat on rom load to have Max Brightness (internal) and then put Jabo d3d8 on 160% Max for a extra brightness Boost.","data":["8005B598 0064"],"options":null}},"7BB18D40-83138559-C:55":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2CD2 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE51F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80382CB7 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","80202BB5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","801DE715 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","801FD085 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","801F042D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","80202CE5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","801DA57D 0001"],"options":null}},"7C3829D9-6E8247CE-C:45":{"Lower Left Character\\Coin Options":{"note":"","data":["810D1182 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDC6D 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800D1186 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["810D11BA 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDCB9 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800D11BE 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["810D1112 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDBD5 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800D1116 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["810D114A 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDC21 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800D114E 00??"],"options":{"0 Stars":"00","99 Stars":"64"}}},"7C647C25-D9D901E6-C:45":{"Ballista Can Drive Through Anything":{"note":"","data":["803F8A68 0001"],"options":null},"Found All\\RDUS":{"note":"","data":["8036E9CC C350"],"options":null},"Found All\\Scientists":{"note":"","data":["80364AD0 003F"],"options":null},"Found All\\Survivors":{"note":"","data":["8036E9C9 00FF"],"options":null},"Infinite Time":{"note":"","data":["D0315610 0000","81315610 0000","D0315612 0001","81315612 0000"],"options":null},"Infinite\\Boosts Buggy Vehicle":{"note":"","data":["803EE301 0064"],"options":null},"Infinite\\Hydraulics Sidesweeper":{"note":"","data":["803EDB51 0063"],"options":null},"Infinite\\Missiles Motor Bike":{"note":"","data":["803F8AC3 0063"],"options":null}},"7C647E65-1948D305-C:45":{"Ballista Can Drive Through Anything":{"note":"","data":["803F8B17 0001"],"options":null},"Found All\\RDUS":{"note":"","data":["8036EA7C C350"],"options":null},"Found All\\Scientists":{"note":"","data":["80364B80 003F"],"options":null},"Found All\\Survivors":{"note":"","data":["8036EA70 00FF"],"options":null},"Infinite Time":{"note":"","data":["D03156C0 0000","813156C0 0000","D03156C2 0001","813156C2 0000"],"options":null},"Infinite\\Boosts Buggy Vehicle":{"note":"","data":["803EE3B0 0064"],"options":null},"Infinite\\Hydraulics Sidesweeper":{"note":"","data":["803EDC00 0063"],"options":null},"Infinite\\Missiles Motor Bike":{"note":"","data":["803F8B72 0063"],"options":null}},"7C64E6DB-55B924DB-C:50":{"Ballista Can Drive Through Anything":{"note":"","data":["803F8A68 0001"],"options":null},"Found All RDUS":{"note":"","data":["8036E9CC C350"],"options":null},"Found All Scientists":{"note":"","data":["80364AD0 003F"],"options":null},"Found All Survivors":{"note":"","data":["8036E9C9 00FF"],"options":null},"Infinite Boosts Buggy Vehicle":{"note":"","data":["803EE301 0064"],"options":null},"Infinite Hydraulics Sidesweeper":{"note":"","data":["803EDB51 0063"],"options":null},"Infinite Missiles Motor Bike":{"note":"","data":["803F8AC3 0063"],"options":null}},"7CD08B12-1153FF89-C:45":{"Can Walk When The Game Is Paused":{"note":"","data":["810AB9B6 0001"],"options":null},"Have All\\Keys":{"note":"This will give you the Grey \u0026 Red,Green \u0026 Gold Keys","data":["800BD0B8 00FF","800BD0BE 00FF","800BD0BD 00FF"],"options":null},"Have All\\Music Notes":{"note":"This will give you all 10 Music Notes","data":["50000A01 0000","800BD1F0 0001"],"options":null},"Infinite\\Health":{"note":"","data":["800BD0F7 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["800BD0E3 0009"],"options":null},"Max Money":{"note":"","data":["810BD0E6 03E7"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D017DBC5 0020","810DAFD8 44CB"],"options":null}},"7DE11F53-74872F9D-C:45":{"99 Points":{"note":"","data":["801CB0A3 0063"],"options":null},"Always First Place":{"note":"","data":["801C269F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801C2983 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801C295E 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801C27C7 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801C2DEA 0005","801C308A 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801C27CF 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800DA753 0007"],"options":null},"Open\\Course Option":{"note":"This works in all modes except for Championship Mode.","data":["801CAFEB 00??"],"options":{"Dolphin Park":"00","Drake Lake":"03","Glacier Coast":"07","Marian Fortress":"04","Port Blue":"05","Southern Island":"08","Sunny Beach":"01","Sunset Bay":"02","Twilight City":"06"}},"Open\\Difficulty Option":{"note":"","data":["801CAFE0 00??"],"options":{"Dolphin":"10","Dolphin \u0026 Expert":"12","Dolphin \u0026 Hard":"11","Dolphin Hard \u0026 Expert":"13","Expert":"02","Hard":"01","Hard \u0026 Expert":"03"}},"Open\\Level Option":{"note":"","data":["800DA753 00??"],"options":{"Above \u0026 Drake Lake":"03","All Above \u0026 Glacier Coast":"16","All Above \u0026 Marine Fortress":"04","All Above \u0026 Port Blue":"05","All Above \u0026 Southern Island":"06","All Above \u0026 Twilight City":"0D","Sunset Bay":"02"}},"Super Speed":{"note":"","data":["801C27C7 0005","D0154051 0010","801C27C7 0020"],"options":null}},"7EAE2488-9D40A35A-C:4A":{"Have All Guns In Chest":{"note":"","data":["50000E04 0100","810E5474 05FF"],"options":null},"Have All Main Items In Chest":{"note":"If you want items that are not listed in the Chest, then just use the Have Item On Slot Select code to have what you desire.","data":["810E54AC 17FF","810E54B0 1EFF","810E54B4 1FFF","810E54B8 23FF","50000404 0100","810E54BC 25FF","810E54CC 2AFF","810E54D0 2BFF","50000304 0100","810E54D4 2EFF","50000F04 0100","810E54E0 32FF","810E551C 43FF","50000504 0100","810E5520 47FF","50000404 0100","810E5534 53FF","50000C04 0100","810E5544 58FF"],"options":null},"Have\\Fine Condition Always":{"note":"","data":["810DD964 0000"],"options":null},"Have\\Item On Slot Select\\Slot 01":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5448 00??","800E5449 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 02":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E544C 00??","800E544D 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 03":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5450 00??","800E5451 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 04":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5454 00??","800E5455 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 05":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5458 00??","800E5459 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 06":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E545C 5D??","800E545D 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 07":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5460 00??","800E5461 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 08":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5464 00??","800E5465 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 09":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5468 00??","800E5469 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 10":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E546C 00??","800E546D 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Infinite\\Health":{"note":"","data":["810DD8A2 00C8"],"options":null},"Infinite\\Time":{"note":"","data":["800E8CBF 0010"],"options":null},"Play As":{"note":"This allows you to select what character you wish to play as. Just slect on load and select as normal at the menu and when in game you will be the character of your choice","data":["810DD6B8 ????"],"options":{"Ada (can crash the game)":"0E80","Cheryl":"0F80","Claire Original":"0380","Claire as Biker":"0980","Claire without jacket":"0780","Claires body Leons outfit":"0B80","Hunk (can crash the game)":"0C80","Leon Original":"0280","Leon Wounded":"0680","Leon as Biker":"0A80","Leon as Stars":"0880","To Fu":"0D80"}},"Play Extra Mission":{"note":"This allows you to select what extra mission you wish to play. Just slect on load and carry on as normal at the menu and when in game you will be the character of your choice Do not use at the same time as [Resident Evil 2 Mode]","data":["810DD66E 00??"],"options":{"The 4th Survior":"48","To-Fu":"49"}},"Quick Chest Access":{"note":"With this code, all you Have\\to do to access the chest, is hold L and C-Down","data":["D10DBE8C 0005","810E4EA8 8007","D10DBE8C 0005","810E4EAA 0814"],"options":null},"Quick Save Access":{"note":"(1 Anytime, anywhere, press Z and C-Down at the same time. You'll get the standard typewriter text: \"It's an old typewriter. You can save your progress with this.\" Note that you must, of course, Have\\an ink ribbon to save. 2) Choose \"Yes\" and you'll be able to save normally. Instead of the location name, your save file will say \"Scenario 1st\" or \"Scenario 2nd.\" 3) When you load your save file, you'll Have\\to skip through the intro, but when the game loads up you'll be exactly where you saved!","data":["D10DBE8C 0044","810E4EA8 8007","D10DBE8C 0044","810E4EAA 06B0"],"options":null},"[Resident Evil 2 Mode]":{"note":"Note: With this enabled the game will become Resident Evil 2, the English version of Biohazard 2! This means all text (except the text in files) is in Japanese, and all cinemas Have\\English subtitles. Note that the title screen will still say Biohazard 2 Do not use at the same time as Play Extra Mission","data":["810DD66E 00??"],"options":{"Off":"00","On":"40"}},"[Saves Always 0]":{"note":"No matter how many saves you do ithis makes the game think you Have\\not saved.","data":["800E50D1 0000"],"options":null}},"7ECBE939-3C331795-C:45":{"Have all Cheats":{"note":"Go into the Cheats From the main Menu \u0026 put on the Ones you want","data":["810CD226 01FF"],"options":null}},"7ED67CD4-B4415E6D-C:50":{"Access Demitron Character":{"note":"","data":["80049AA4 0001"],"options":null},"Access Sonork Character":{"note":"","data":["80049AA0 0001"],"options":null},"Infinite Health\\All Levels\\Player 1":{"note":"","data":["812716E0 0190","8127BDB8 0190","8127E478 0190","81292EE8 0190","81293768 0190","81297538 0190","812ACCC8 0190","812B1CE8 0190","812B7BE8 0190","8138AEE0 0190"],"options":null},"Infinite Health\\All Levels\\Player 2":{"note":"","data":["81271FB8 0190","8127B158 0190","8127E820 0190","81293B48 0190","81294390 0190","812980B8 0190","812AD608 0190","812B2D08 0190","812B67D8 0190","8138A898 0190"],"options":null},"Music Modifier":{"note":"","data":["80081812 00??"],"options":{"Music Off":"00","Volume Low":"2A","Volume Max":"7F","Volume Medium":"55"}},"Press GS For 2 Rounds Won\\Player 1":{"note":"","data":["880B6491 0002"],"options":null},"Press GS For 2 Rounds Won\\Player 2":{"note":"","data":["880B64A3 0002"],"options":null}},"7EE0E8BB-49E411AA-C:50":{"Access AT-ST Level":{"note":"","data":["81130B38 1250"],"options":null},"Access\\69 Buick Electra":{"note":"Replaces The V-Wing","data":["81130B3A 000E"],"options":null},"Accesses\\All Levels,Ships \u0026 Advanced Weapons":{"note":"","data":["80130B3B 00FF"],"options":null},"Accuracy 100%":{"note":"","data":["80130B5F 0063"],"options":null},"Always Pass Mission":{"note":"","data":["80130AF4 0001"],"options":null},"Bonus Collected 756":{"note":"","data":["80130B67 03E7"],"options":null},"Completion Time 0:00":{"note":"","data":["80130B85 3FCB"],"options":null},"Enemies Destroyed 756":{"note":"","data":["81130B64 03E7"],"options":null},"Friendly Saves 756":{"note":"","data":["80130B66 03E7"],"options":null},"Infinite Lives":{"note":"This Also accesses advanced Shields \u0026 Radar","data":["81130B38 01C0"],"options":null},"Infinite Secondary Weapon":{"note":"","data":["8010CA02 0063","80130B23 00??"],"options":{"Bombs":"04","Cluster Missiles":"07","Ion Cannon":"01","Missiles":"02","Proton Bombs":"05","Seeker Cluster Missiles":"09","Seeker Missiles":"03","Seeker Torpedos":"08"}},"Invincibility":{"note":"This Also Accesses All Levels And Makes All Crafts Available","data":["80130B2D 00FF"],"options":null}},"7F3CEB77-8981030A-C:45":{"Infinite Dinars":{"note":"","data":["800B6043 00E8","800B6042 00E8"],"options":null},"Infinite Health":{"note":"","data":["810CF93E 03E7","810CF942 03E7"],"options":null},"Infinite Magic":{"note":"","data":["810B65CA 0063","810B65B2 0063","810B65E2 0063","810B65FA 0063"],"options":null},"Press L for 1 Hit Kill Punch":{"note":"Press The L Button \u0026 Hold B \u0026 Then Let Go to Kill Enimies,Rocks,Tents etc with One Punch.","data":["D0103383 0020","800D9BCE 0000"],"options":null},"Press L to Levitate":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D017D2D5 0020","810CF994 44CB"],"options":null}},"7F43E701-536328D1-C:50":{"Always Place 1st":{"note":"","data":["8031EC0F 0000"],"options":null},"Extra Cars \u0026 Tracks":{"note":"","data":["8032690F 00FF","8032690C 00FF","8032690D 00FF"],"options":null},"Have 1-6 Level Points":{"note":"","data":["8032685F 0064","80326861 0064","80326863 0064","80326865 0064","80326867 0064","80326869 0064"],"options":null},"Only Race 1 Lap Championship Mode":{"note":"","data":["8031EBDB 0002"],"options":null}},"7F9345D3-841ECADE-C:50":{"Always Have\\Most Powerful Weapon":{"note":"","data":["80088ED9 0003"],"options":null},"Play As\\Player 1":{"note":"","data":["80088E02 00??"],"options":{"Ebisumaru":"01","Goemon":"00","Sasuke":"02","Yae":"03"}},"Unlimited Gate Opener Things":{"note":"","data":["80088EC6 0099"],"options":null},"Unlimited Health\\Player 1":{"note":"","data":["80088ED4 0004"],"options":null},"Unlimited Shield\\Player 1":{"note":"","data":["80088ED5 0004","8015D3C4 0001"],"options":null}},"8066D58A-C3DECAC1-C:45":{"Always On First Shot":{"note":"","data":["811DA47A 0001"],"options":null},"Club Type\\Irons Mods":{"note":"","data":["8012A473 00??"],"options":{"Cavity":"00","Conventional":"01"}},"Club Type\\Sand Wedge Mods":{"note":"","data":["8012A474 00??"],"options":{"58 Degrees":"00","60 Degrees":"01","62 Degrees":"02"}},"Club Type\\Woods Mods":{"note":"","data":["8012A472 00??"],"options":{"Metal Wood":"01","Persimmon":"02","Titan":"00"}},"Max Power":{"note":"","data":["8012A431 FFFF"],"options":null},"Max Putt":{"note":"","data":["8012A435 FFFF"],"options":null},"Max Recover":{"note":"","data":["8012A437 FFFF"],"options":null},"Max Technique":{"note":"","data":["8012A433 FFFF"],"options":null},"Select Club":{"note":"","data":["801DA496 00??"],"options":{"1I":"05","1W":"00","2I":"06","2W":"01","3I":"07","3W":"02","4I":"08","4W":"03","5I":"09","5W":"04","6I":"0A","7I":"0B","8I":"0C","9I":"0D","AW":"0F","PW":"0E","Putter":"11","SW":"10"}}},"80C8564A-929C65AB-C:4A":{"Max Score":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null},"Press L Button for Max Gauge\\Player 1":{"note":"","data":["D00B2791 0020","811D2602 0098"],"options":null},"Press L Button for Max Gauge\\Player 2":{"note":"","data":["D00B2797 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}}},"80F41131-384645F6-C:4A":{"Always 1st":{"note":"","data":["8013CD60 0001"],"options":null},"Freeze All Lap Timers":{"note":"","data":["8013CD21 0001","8013CD25 0001","8013CD29 0001"],"options":null},"Freeze Overall Timer":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8013CD15 0001"],"options":null},"Laps Of Race":{"note":"","data":["8013CD0E 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","Never Ending Laps":"06"}},"Level Select":{"note":"For this cheat to work,as soon as you put the cheat on you must turn it back off,if not you wont beable to quit a Race or even finish one.","data":["8013D01B 00??"],"options":{"Bikini Island":"01","Canyon Rush":"00","China Town":"02","China Town Jam":"04","Neo Arena":"03","Neo Speed Way":"05"}},"Music Modifier":{"note":"","data":["80106CCC 00??"],"options":{"Music Off":"00","Music On":"FF"}},"No Damage\\Player 1":{"note":"","data":["50000402 0000","8113D058 0000"],"options":null},"No Damage\\Player 2":{"note":"","data":["50000402 0000","8113F0E8 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["8013D015 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Play As\\Player 2":{"note":"","data":["8013D016 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Unlock All Tracks and Vehicles":{"note":"","data":["8008D1FC 0001"],"options":null}},"810729F6-E03FCFC1-C:45":{"Away Team\\Full Court Dunks":{"note":"","data":["81182E4E 0004","8118305A 0004","81183266 0004","81183472 0004","8118367E 0004"],"options":null},"Away Team\\Giant Players":{"note":"","data":["81182DF6 0032","81182DFE 003C","81183002 0032","8118300A 003C","8118320E 0032","81183216 003C","8118341A 0032","81183422 003C","81183626 0032","8118362E 003C"],"options":null},"Away Team\\Scores 0":{"note":"","data":["81160FFE 0000"],"options":null},"Away Team\\Scores 150":{"note":"","data":["81160FFE 0096"],"options":null},"Away Team\\Tiny Players":{"note":"","data":["81182DF6 0011","81182DFE 0014","81183002 0011","8118300A 0014","8118320E 0011","81183216 0014","8118341A 0011","81183422 0014","81183626 0011","8118362E 0014"],"options":null},"Creation Points (L / R)":{"note":"","data":["D0061269 0020","8117E008 0200","D0061269 0010","8117E008 0000"],"options":null},"Home Team\\Full Court Dunks":{"note":"","data":["81182412 0004","8118261E 0004","8118282A 0004","81182A36 0004","81182C42 0004"],"options":null},"Home Team\\Giant Players":{"note":"","data":["811823BA 0032","811823C2 003C","811825C6 0032","811825CE 003C","811827D2 0032","811827DA 003C","811829DE 0032","811829E6 003C","81182BEA 0032","81182BF2 003C"],"options":null},"Home Team\\Scores 0":{"note":"","data":["81160FFA 0000"],"options":null},"Home Team\\Scores 150":{"note":"","data":["81160FFA 0096"],"options":null},"Home Team\\Tiny Players":{"note":"","data":["811823BA 0011","811823C2 0014","811825C6 0011","811825CE 0014","811827D2 0011","811827DA 0014","811829DE 0011","811829E6 0014","81182BEA 0011","81182BF2 0014"],"options":null},"Infinite\\Time Outs\\Away":{"note":"","data":["800D5C9B 0007"],"options":null},"Infinite\\Time Outs\\Home":{"note":"","data":["800D5C75 0007"],"options":null},"No Time Outs\\Away":{"note":"","data":["800D5C9B 0000"],"options":null},"No Time Outs\\Home":{"note":"","data":["800D5C7F 0000"],"options":null}},"812289D0-C2E53296-C:50":{"1 Player\\Always Place 1st":{"note":"","data":["80103CD7 0000"],"options":null},"1 Player\\Max\\Acceleration":{"note":"","data":["8012C51F 000A"],"options":null},"1 Player\\Max\\Shocks":{"note":"","data":["8012C527 000A"],"options":null},"1 Player\\Max\\Speed":{"note":"","data":["8012C523 000A"],"options":null},"1 Player\\Max\\Tires":{"note":"","data":["8012C52B 000A"],"options":null},"Multi and 1 Player\\Infinite Turbos\\Player 1":{"note":"Can be used in 1 Player and Multiplayer Modes for Player 1","data":["81103F3A 03E7"],"options":null},"Multi and 1 Player\\Infinite Turbos\\Player 2":{"note":"Multiplayer Mode Only for Player 2","data":["8110422E 03E7"],"options":null},"Multi and 1 Player\\Max Crash Helmets\\Player 1":{"note":"Can be used in 1 Player and Multiplayer Modes for Player 1","data":["80103F33 0064"],"options":null},"Multi and 1 Player\\Max Crash Helmets\\Player 2":{"note":"Multiplayer Mode Only for Player 2","data":["80104227 0064"],"options":null}},"817D286A-EF417416-C:53":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2712 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE03F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802026F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE255 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FCB85 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFF6D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802027A5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DA0BD 0001"],"options":null}},"82B3248B-E73E244D-C:45":{"Always Play On\\2D Board":{"note":"","data":["800E7257 0001"],"options":null},"Always Play On\\3D Board":{"note":"","data":["800E7257 0000"],"options":null},"Debug Mode":{"note":"","data":["810E6290 0001"],"options":null},"Player 1 Controls\\Both Sides In 2-Player":{"note":"This is only for Human VS. Human Game","data":["8012C508 0000"],"options":null},"Time Always Counts Down\\On Black Players Side":{"note":"","data":["8012C67D 0001"],"options":null},"Time Always Counts Down\\On White Players Side":{"note":"","data":["8012C67D 0000"],"options":null}},"82DC04FD-CF2D82F4-C:45":{"Always Have\\50 pieces of corn":{"note":"","data":["801E1A39 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E1A28 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["801E1A26 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E1A3A 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E1A2D 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E1A38 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D008F2C1 0010","801E199E 0001","D008F2C1 0010","801E19AE 0001"],"options":null},"Start with Berry Weapon":{"note":"","data":["811E1A2E 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Unlock All Levels":{"note":"","data":["81099150 000F"],"options":null}},"82EFDC30-806A2461-C:45":{"Away Team Scores 50":{"note":"","data":["801F6407 0032","802004C0 0032"],"options":null},"Home Team Scores 50":{"note":"","data":["801F6406 0032","802004BF 0032"],"options":null}},"839F3AD5-406D15FA-C:50":{"Have All\\Characters Available":{"note":"","data":["810657A0 FFFF"],"options":null},"Have All\\Courts Available":{"note":"","data":["810657A4 FFFF"],"options":null},"Score\\Player 1":{"note":"","data":["80152DFA 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}},"Score\\Player 2":{"note":"","data":["80152DFB 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}}},"83F33AA9-A901D40D-C:45":{"Infinite Time":{"note":"","data":["8114C3D8 000A"],"options":null},"Pick Your Kombat Zone":{"note":"","data":["81257684 00??"],"options":{"Armory":"14","Bell Tower":"07","Bridge":"05","Courtyard":"02","Dead Pool":"11","Graveyard":"09","Hidden Portal":"10","Jade's Desert":"0E","Kahn's Kave":"0D","Kahn's Tower":"04","Kombat Temple":"08","Lair":"18","Living Forest":"15","Lost Bridge":"0F","Pit":"03","Pit 2":"1A","Pit 3":"0A","Pit Bottom":"1C","Portal":"17","River Kombat":"0B","Rooftop":"13","Scorpion's Lair":"0C","Soul Chamber":"06","Star Bridge":"1B","Street":"01","Subway":"00","Tomb":"19","Tower":"16","Wasteland":"12"}},"Player 1\\Aggressor Energy Bar":{"note":"","data":["80169A21 0030"],"options":null},"Player 1\\Energy is":{"note":"","data":["8016998D 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 1\\Infinite Run":{"note":"","data":["81169854 0030"],"options":null},"Player 1\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B5365 0020","811699B4 5100","D02B5365 0020","811699BC 5100"],"options":null},"Player 1\\Play As":{"note":"","data":["8016997D 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Player 2\\Aggressor Energy Bar":{"note":"","data":["80169A23 0030"],"options":null},"Player 2\\Energy is":{"note":"","data":["80169C61 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 2\\Infinite Run":{"note":"","data":["81169C68 0030"],"options":null},"Player 2\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B536D 0020","811699B6 5100","D02B536D 0020","811699BE 5100"],"options":null},"Player 2\\Play As":{"note":"","data":["80169C21 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Unlock Secret":{"note":"","data":["8016A021 0004"],"options":null}},"83F3931E-CB72223D-C:50":{"Access\\All Cars \u0026 Upgrades":{"note":"","data":["813BED58 1FFF","803BED22 0005"],"options":null},"Access\\Florida \u0026 Moon Tracks":{"note":"This is for Championship Mode Only","data":["813BF2A4 0101"],"options":null},"Always 1st\\Player 1":{"note":"","data":["803CDF03 0001"],"options":null},"Always 1st\\Player 2":{"note":"","data":["803CE3DB 0001"],"options":null},"Always 1st\\Player 3":{"note":"","data":["803CDA2B 0001"],"options":null},"Always 1st\\Player 4":{"note":"","data":["803CD553 0001"],"options":null},"Cannot Spin Out":{"note":"","data":["803CDC73 0000"],"options":null},"Dancing Girl Always On":{"note":"","data":["803BED53 0001","803C20AF 0054"],"options":null},"Disable\\Left Lane Traffic":{"note":"This is for Championship Mode Only","data":["8033C83B 0001"],"options":null},"Disable\\Right Lane Traffic":{"note":"This is for Championship Mode Only","data":["8033C83F 0001"],"options":null},"Infinite Time":{"note":"","data":["813D0C1C 4296"],"options":null},"Max Power Level,\u0026 Paint Job / Two Tone":{"note":"","data":["813BEDA2 0512"],"options":null},"Max\\Championship Points":{"note":"","data":["813BFB4E 270F"],"options":null},"Max\\Trick points":{"note":"","data":["803BF21F 0063"],"options":null},"Stop Elapsed Time\\Player 1":{"note":"","data":["813C7558 3C80"],"options":null},"Stop Elapsed Time\\Player 2":{"note":"","data":["813C7794 3C80"],"options":null},"Unlimited Nitro Player 4":{"note":"Press C-Button Down For Boost, This Code is for Championship Mode Only","data":["803C728B 0003"],"options":null},"Unlimited Nitro\\Player 1":{"note":"Press C-Button Down For Boost, This Code is for Championship Mode Only","data":["803C74C7 0003"],"options":null},"Unlimited Nitro\\Player 2":{"note":"Press C-Button Down For Boost, This Code is for Championship Mode Only","data":["803C7703 0003"],"options":null},"Unlimited Nitro\\Player 3":{"note":"Press C-Button Down For Boost, This Code is for Championship Mode Only","data":["803C704F 0064"],"options":null},"Unlocked Pro \u0026 Master difficulty level":{"note":"","data":["803BEDD5 0003"],"options":null}},"84077275-57315B9C-C:50":{"All Pokemon Level 100\\Player 1":{"note":"","data":["50000654 0000","800AE654 0064"],"options":null},"All Pokmon Have Max Hp":{"note":"","data":["81285AE8 0096"],"options":null},"Catch\\Mew on GB Tower":{"note":"","data":["80171E17 0015"],"options":null},"Catch\\Mewtwo on GB Tower":{"note":"","data":["80171E17 0083"],"options":null},"Clefairy Says\\Extended Life Bar\\Player 1":{"note":"","data":["8118F43A 0049"],"options":null},"Clefairy Says\\Extended Life Bar\\Player 2":{"note":"","data":["8118F5FA 0049"],"options":null},"Clefairy Says\\Extended Life Bar\\Player 3":{"note":"","data":["8118F7BA 0049"],"options":null},"Clefairy Says\\Extended Life Bar\\Player 4":{"note":"","data":["8118F97A 0049"],"options":null},"Clefairy Says\\Infinite Health\\Player 1":{"note":"","data":["8118F438 0064"],"options":null},"Clefairy Says\\Infinite Health\\Player 2":{"note":"","data":["8118F5F8 0064"],"options":null},"Clefairy Says\\Infinite Health\\Player 3":{"note":"","data":["8118F7B8 0064"],"options":null},"Clefairy Says\\Infinite Health\\Player 4":{"note":"","data":["8118F978 0064"],"options":null},"Game Difficulty":{"note":"","data":["D312FC40 FD70","D312FC40 A528","8112FC40 00??"],"options":{"Easy":"02","Extra Hard":"0F","Hard":"00","Normal":"01"}},"Gym Leader Castle\\Blaine":{"note":"","data":["80286B69 00A1"],"options":null},"Gym Leader Castle\\Brock":{"note":"","data":["80287539 00A1"],"options":null},"Gym Leader Castle\\Elite Four \u0026 Rival":{"note":"","data":["80286859 00A1"],"options":null},"Gym Leader Castle\\Erika":{"note":"","data":["80286BA9 00A1"],"options":null},"Gym Leader Castle\\Giovani":{"note":"","data":["80287169 00A1"],"options":null},"Gym Leader Castle\\Koga":{"note":"","data":["80287519 00A1"],"options":null},"Gym Leader Castle\\Misty":{"note":"","data":["80287E79 00A1"],"options":null},"Gym Leader Castle\\Sabrina":{"note":"","data":["802870A9 00A1"],"options":null},"Gym Leader Castle\\Surge":{"note":"","data":["80286BD9 00A1"],"options":null},"Infinite Attacks All Pokemon\\Player 1":{"note":"","data":["50000654 0000","810AE650 6363","50000654 0000","810AE652 6363"],"options":null},"Infinite Attacks All Pokemon\\Player 2":{"note":"","data":["50000654 0000","810AE86C FFFF","50000654 0000","810AE86E FFFF"],"options":null},"Infinite Attacks All Pokemon\\Player 3":{"note":"","data":["50000654 0000","810AE86C FFFF","50000654 0000","810AE86E FFFF"],"options":null},"Infinite Attacks All Pokemon\\Player 4":{"note":"","data":["50000654 0000","810AEA88 FFFF","50000654 0000","810AEA8A FFFF"],"options":null},"Infinite Health against Mew Two":{"note":"","data":["810AE632 FFFF","812823E8 FFFF"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["810AE686 03E7","810AE6AA 03E7","810AE6DA 03E7","810AE6FE 03E7"],"options":null},"Infinite Health\\Stadium\\Free Battle":{"note":"","data":["80287D79 0064"],"options":null},"Infinite Health\\Stadium\\Mewto":{"note":"","data":["802825B9 0064"],"options":null},"Infinite Health\\Stadium\\Petit Cup":{"note":"","data":["80286C29 0064"],"options":null},"Infinite Health\\Stadium\\Pica Cup":{"note":"","data":["80284659 0064"],"options":null},"Infinite Health\\Stadium\\Poke Cup":{"note":"","data":["80285399 0064"],"options":null},"Infinite Health\\Stadium\\Prime Cup":{"note":"","data":["80285FE9 0064"],"options":null},"Infinite cash":{"note":"","data":["81172186 9999"],"options":null},"Infinite coins for coin case":{"note":"","data":["801723E3 0099"],"options":null},"Pokemon beach stop code":{"note":"","data":["D00488A1 0020","80202BB5 0001"],"options":null},"Rock Harden\\Infinite Armour\\Player 1":{"note":"","data":["81193B78 0190"],"options":null},"Rock Harden\\Infinite Armour\\Player 2":{"note":"","data":["81193E2C 0190"],"options":null},"Rock Harden\\Infinite Armour\\Player 3":{"note":"","data":["811940E0 0190"],"options":null},"Rock Harden\\Infinite Armour\\Player 4":{"note":"","data":["81194394 0190"],"options":null}},"8473D0C1-23120666-C:4A":{"All Equipment Upgrades":{"note":"","data":["801ED88D 0023","811ED8DA 201B","801ED86C 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03E4CAB 0000","801ED822 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Event Item\\Modifier 1":{"note":"","data":["801ED895 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801ED89B 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801ED8A1 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Have Bottle\\Modifier 1":{"note":"","data":["801ED8A2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 2":{"note":"","data":["801ED8A3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 3":{"note":"","data":["801ED8A4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 4":{"note":"","data":["801ED8A5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 5":{"note":"","data":["801ED8A6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 6":{"note":"","data":["801ED8A7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Item Modifier":{"note":"","data":["801ED8A0 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\All Masks":{"note":"","data":["811ED8A8 3E39","811ED8AA 4745","811ED8AC 4032","811ED8AE 3A46","811ED8B0 3842","811ED8B2 4833","811ED8B4 3C3D","811ED8B6 373F","811ED8B8 3634","811ED8BA 4341","811ED8BC 3B44","811ED8BE 4935"],"options":null},"Have\\Bombchu":{"note":"","data":["801ED897 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801ED896 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801ED899 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801ED898 0008"],"options":null},"Have\\Fire Arrow":{"note":"","data":["801ED892 0002"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801ED8A0 0010"],"options":null},"Have\\Have\\Ocarina of Time":{"note":"","data":["801ED890 0000"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801ED891 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801ED89F 000F"],"options":null},"Have\\Ice Arrow":{"note":"","data":["801ED893 0003"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801ED89E 000E"],"options":null},"Have\\Light Arrow":{"note":"","data":["801ED894 0004"],"options":null},"Have\\Magic Beans":{"note":"","data":["801ED89A 000A"],"options":null},"Have\\Pictograph":{"note":"","data":["801ED89D 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801ED89C 000C"],"options":null},"Have\\QuestStatus Items":{"note":"","data":["801ED8DD 0005","811ED8DE F7CF"],"options":null},"Infinite\\Health":{"note":"","data":["811ED856 03E7"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811ED854 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"This is Infinite use of Bombs,Bombchus,Deku Sticks,Deku Nuts,Magic Beans,\u0026 Powder Kegs. But you must also put it's Have on to work.","data":["801ED8C1 0063","50000801 0000","801ED8C6 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801ED859 0060","811ED860 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811ED85A 03E7"],"options":null},"Play As":{"note":"","data":["801ED840 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You have been warned.","data":["801ED86C 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F8836 0008","811ED836 FFFD","D01F8836 0004","811ED836 0000","D01F8836 0002","811ED836 FFFE"],"options":null},"Use all C Buttons":{"note":"","data":["811F1738 0000","811F173A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["803E4CAA 0000","803FD505 0001","813FD50A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"84D5FD75-BBFD3CDF-C:44":{"Character Select":{"note":"","data":["80075F02 00??"],"options":{"Big Head.":"04","Flame Grilled":"08","Normal":"00","Play as Deadwing.":"01"}},"Have All\\Cheats: Book of Shadows":{"note":"","data":["81075EFE 0FFF"],"options":null},"Have All\\Dark Souls Collected":{"note":"","data":["80075EF9 0078"],"options":null},"Have All\\Gads \u0026 The Poign":{"note":"","data":["80030E57 000F"],"options":null},"Have All\\Items":{"note":"Youll not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50001B20 0000","80030613 000B"],"options":null},"Have All\\L-Eclipser":{"note":"You will not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50000320 0000","80030973 000B"],"options":null},"Have All\\Levels Unlocked":{"note":"","data":["5000101C 0000","80030A0E 0001"],"options":null},"Infinite\\0.9mm Ammo":{"note":"","data":["81075AEA 0190"],"options":null},"Infinite\\Accumulators":{"note":"","data":["800306D7 0005"],"options":null},"Infinite\\Cadeaux'":{"note":"","data":["81075AE6 03E7"],"options":null},"Infinite\\Max Health,Air,Shadow Charge \u0026 Voodoo Power":{"note":"","data":["50000604 0000","81075AC6 2710"],"options":null},"Infinite\\Prisms":{"note":"","data":["80030957 0003"],"options":null},"Infinite\\Retractors":{"note":"","data":["800308B7 0003"],"options":null},"Infinite\\Shotgun Shells":{"note":"","data":["80075ADF 0063"],"options":null},"Infinite\\Violator Ammo":{"note":"","data":["81075AE2 03E7"],"options":null},"Press L To Levitate":{"note":"Press the L-Button to rise and let go and press again in stages to come back down.","data":["D0058EE5 0020","80075528 0041"],"options":null},"[Ammo Always Displayed On Screen]":{"note":"","data":["50000408 0000","80075A7D 0007"],"options":null},"[Health Meter Displayed On Screen]":{"note":"","data":["81075B10 0000","81075B12 00FF"],"options":null}},"84EAB557-C88A190F-C:50":{"10x Points Multiplier":{"note":"","data":["800EAD8F 0001"],"options":null},"Access In-Game Cheat Menu":{"note":"","data":["50001104 0000","800E9E98 0001"],"options":null},"Access\\Officer Dick":{"note":"","data":["800E9E9C 0001","800F093B 0001"],"options":null},"Access\\Spider-Man":{"note":"","data":["800E9E98 0001","800F0C5B 0001"],"options":null},"All Gaps":{"note":"","data":["50000A0C 0000","810E9D84 FFFF","50000A0C 0000","810E9D86 FFFF","50000A0C 0000","810E9D8A FFFF","50000402 0000","810E9DF4 FFFF"],"options":null},"Always Special":{"note":"","data":["800E9EAC 0001","800E9EAE 0001"],"options":null},"Hoffmann Factory \u0026 Skate heaven Unlocked":{"note":"","data":["800EA18B 003F"],"options":null},"Infinite Time":{"note":"","data":["800E886A 0001"],"options":null},"Level Goals 100%":{"note":"All standard players,Officer Dick \u0026 Spider-Man, Use together with","data":["50000EE4 0000","810E8900 FFFF","50000EE4 0000","810E8902 FFFF","50000EE4 0000","810E8904 FFFF","50000EE4 0000","810E8906 FFFF","50000EE4 0000","810E8908 FFFF","50000EE4 0000","810E890A FFFF","50000EE4 0000","810E890C FFFF","50000EE4 0000","810E890E FFFF","50000EE4 0000","810E8920 FFFF"],"options":null},"Levels Goals 100% All Custom Players":{"note":"","data":["50000802 0000","810E9494 FFFF","50000802 0000","810E9578 FFFF","50000802 0000","810E965C FFFF","50000802 0000","810E9740 FFFF"],"options":null},"Max Cash":{"note":"All standard players,Officer Dick \u0026 Spider-Man","data":["50000EE4 0000","810E88F8 000A","50000EE4 0000","810E88FA 2B1F","50000EE4 0000","810E88FC 000A","50000EE4 0000","810E88FE 2B1F"],"options":null},"Max Cash For All Custom Players":{"note":"","data":["500004E4 0000","810E948C 000A","500004E4 0000","810E948E 2B1F","500004E4 0000","810E9490 000A","500004E4 0000","810E9492 2B1F"],"options":null},"Moon Psysics":{"note":"","data":["800E9ECE 0001"],"options":null},"Perfect Balance":{"note":"","data":["800E9EAA 0010"],"options":null}},"84FC04FF-B1253CE9-C:4A":{"1 Lap Race":{"note":"","data":["D01215A8 0000","801215A8 0009"],"options":null},"999 Trick Game Pts":{"note":"Press the A Button to stop Count,or it will continue to grow without stoping.","data":["81121360 03E7"],"options":null},"Access Gold Medals":{"note":"","data":["50006002 0000","810EBD42 0101"],"options":null},"Enable Sinobin":{"note":"","data":["8110A17E 0100"],"options":null},"Infinite\\Cash":{"note":"","data":["8012160A C350"],"options":null},"Infinite\\Lucky Dip":{"note":"\"Lucky Dip is Infinite Usage Of What Ever You Get From Each Red Box\"","data":["801215B4 0003"],"options":null},"Infinite\\Tools Options":{"note":"","data":["801215B5 00??"],"options":{"Board":"06","Fan":"01","Ghost":"02","Mouse":"05","Pan":"03","Rock":"04"}}},"85AE781A-C756F05D-C:45":{"Have\\Max Bonus":{"note":"","data":["810E964A 270F"],"options":null},"Have\\[All Guns \u0026 Infinite Ammo]":{"note":"Press C Left to receive all Guns","data":["810FFF8A 0001","50000B04 0000","810E92E6 03E8"],"options":null},"Have\\[All Keys]":{"note":"","data":["810E92E0 0101","800E92E2 0001"],"options":null},"Have\\[High Score]":{"note":"","data":["810E92CE FFFF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["810E9650 0005"],"options":null},"Infinite\\Health":{"note":"If you fall into Water just turn off the Infinite Health \u0026 put back on after.","data":["810E92D8 42D8"],"options":null},"Level Select":{"note":"","data":["810FFF92 00??"],"options":{"Boss Mission Destroy Carrier Level":"10","Mission 1 Shock Strike":"01","Mission 10 Scramble Pylon":"0A","Mission 11 Herding Research":"0B","Mission 12 The Extractor":"0C","Mission 13 Nuke Tower":"0D","Mission 14 Mucus Storage":"0E","Mission 15 Depot Attack":"0F","Mission 16 Sterilization":"11","Mission 17 Scorpion Killer":"12","Mission 18 Core Nuke":"13","Mission 19 Gate Keeper":"14","Mission 2 Radar Run":"02","Mission 3 Return Fire":"03","Mission 4 The Sonar Tower":"04","Mission 5 Big Blips":"05","Mission 6 Short Fuse":"06","Mission 7 Outpost":"07","Mission 8 Sewer":"08","Mission 9 Clean Up":"09","Queen Mission":"15"}},"Level Select Menu":{"note":"","data":["810FE5AA D320"],"options":null}},"85C18B16-DF9622AF-C:4A":{"Infinite Health Player1":{"note":"","data":["801A57B5 00CF"],"options":null},"Infinite Max Stats Creation Points":{"note":"Player 1","data":["801C200F 0064"],"options":null},"Max Stats":{"note":"Player 1","data":["801CA5D0 0064","801CA5D1 0064","801CA5D2 0064","801CA5D3 0064","801CA5D4 0064","801CA5D5 0064","801CA5D6 0064","801CA5D7 0064","801CA5D8 0064"],"options":null}},"862C0657-8DFD896D-C:45":{"(Multi-player)\\Have All\\Weapons and items\\Player 1":{"note":"","data":["8133BA4E FFFE"],"options":null},"(Multi-player)\\Have All\\Weapons and items\\Player 2":{"note":"","data":["8133BC0A FFFE"],"options":null},"(Multi-player)\\Have All\\Weapons and items\\Player 3":{"note":"","data":["8133BDC6 FFFE"],"options":null},"(Multi-player)\\Have All\\Weapons and items\\Player 4":{"note":"","data":["8133BF82 FFFE"],"options":null},"(Multi-player)\\Max Kills\\Player 1":{"note":"","data":["8033B9BC FFFF"],"options":null},"(Multi-player)\\Max Kills\\Player 2":{"note":"","data":["8033BB78 FFFF"],"options":null},"Access\\All Guns":{"note":"","data":["8015969F 0001"],"options":null},"Access\\Max Ammo":{"note":"","data":["8015FCBF 0001"],"options":null},"Can't Fail Missions":{"note":"","data":["810A04FA ED40"],"options":null},"Enable\\Cheat Menu":{"note":"Enable before you enter in game and you will find the cheat menu when you press the Start Button","data":["8003E22F 0003","8004609F 0003"],"options":null},"Enable\\Debug Mode":{"note":"When this code is activated, a display of numbers will show on the screen as the players move around","data":["801599E7 0001"],"options":null},"Enable\\Level Select Menu":{"note":"This must be used with Enable Cheat Menu and enabled before you enter in game and you will find the level select menu replaces the cheat menu when you press the Start Button","data":["810AA696 9214"],"options":null},"Enemies Don't Recongnize You Easily":{"note":"","data":["8005742D 0001"],"options":null},"Have\\Invisible Soldier":{"note":"you are Invisible to most enimies who just can not dectect or see you.","data":["80159683 0001"],"options":null},"Have\\Large Mode":{"note":"Do not use with Mini Mode only use one at a time","data":["8015FCDF 0001"],"options":null},"Have\\Less Enemies In Levels":{"note":"Do not use with No Enemies In Levels, only use one at a time","data":["80056688 0020"],"options":null},"Have\\Mini Mode":{"note":"Do not use with Large Mode only use one at a time","data":["80159699 0001"],"options":null},"Have\\No Enemies In Levels":{"note":"Do not use with Less Enemies In Levels, only use one at a time","data":["80056D4C 0020"],"options":null},"Improved Gun Handling":{"note":"","data":["8009C014 003E"],"options":null},"Infinite\\Continues":{"note":"","data":["80159693 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8015FCEF 0001"],"options":null},"Play As":{"note":"Here you can choose who you would like to play as. But Do not use this with any other play as option..","data":["801609A3 00??"],"options":{"Plastro":"09","The Big Green One":"07","Vikki":"08"}}},"870611BA-D8B1226C-C:00":{"God Mode":{"note":"","data":["80774EB7 00??"],"options":{"Off":"00","On":"01"}}},"8979169C-F189F6A0-C:4A":{"Infinite\\99 Lives":{"note":"","data":["8023648D 0063"],"options":null},"Infinite\\99 R Button Bombs":{"note":"","data":["8024BD89 0063"],"options":null},"Infinite\\Shield":{"note":"","data":["80250971 00??"],"options":{"Off":"00","On":"01"}},"Infinite\\Speed":{"note":"","data":["8024B6BC 00??"],"options":{"Fast":"03","Medium":"02","Normal":"00","Slow":"01","Warp Drive":"07"}},"Infinite\\Stream Laser":{"note":"","data":["80236CD0 00??"],"options":{"2 Stream Laser":"00","4 Stream Laser":"01","6 Stream Laser":"02"}},"Max Score":{"note":"","data":["80249F91 00FF"],"options":null},"Unlock Ramsie Mini-Game":{"note":"","data":["801FF43E 0001"],"options":null}},"89A579F1-667E97EF-C:45":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["811659C4 FFFF","811659C6 FFFF","811659CA 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FB5C 270F"],"options":null}},"89FED774-CAAFE21B-C:45":{"Have All Artifacts":{"note":"","data":["800C56BF 0063","800C56C3 0063","800C56C7 0063"],"options":null},"Infinite Health":{"note":"","data":["800C56BB 0005"],"options":null},"Infinite Lives":{"note":"","data":["800C56B7 0005"],"options":null}},"8A6009B6-94ACE150-C:45":{"Access\\All Characters":{"note":"","data":["801E6040 FFFF"],"options":null},"Access\\All Floyd Awards":{"note":"only enable One character at a time when using this code","data":["50000501 0000","801E6038 0005"],"options":null},"Juno\\Access\\All Keys":{"note":"","data":["811E6248 FFF7"],"options":null},"Juno\\Access\\All Objects":{"note":"","data":["811E624A FFFF"],"options":null},"Juno\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["801E61EC 00FF","801E61ED 00FF"],"options":null},"Juno\\Full \u0026 Max Health":{"note":"","data":["801BF976 0040","801E61E5 000C","801E61E2 0040"],"options":null},"Juno\\Infinite Continues":{"note":"","data":["800A3281 0002"],"options":null},"Juno\\Infinite\\Max Ammo All Weapons":{"note":"","data":["50000302 0000","811E61F6 03E7","50000802 0000","811E61FC 03E7","50000402 0000","811E620C 03E7"],"options":null},"Juno\\Infinite\\Mizar Tokens":{"note":"","data":["811E61F4 03E7"],"options":null},"Juno\\Max Blue \u0026 White Heads":{"note":"","data":["811E61EA 03E7","811E61E8 03E7"],"options":null},"Lupus\\Access\\All Keys":{"note":"","data":["811E62BE FF70"],"options":null},"Lupus\\Access\\All Objects":{"note":"","data":["811E62C0 FFFF"],"options":null},"Lupus\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["801E6262 00FF","801E6263 00FF"],"options":null},"Lupus\\Full \u0026 Max Health":{"note":"","data":["801BF9EC 0040","801E625B 000C","801E6258 0040"],"options":null},"Lupus\\Infinite\\Max Ammo All Weapons":{"note":"","data":["50000302 0000","811E626C 03E7","50000802 0000","811E6272 03E7","50000402 0000","811E6282 03E7"],"options":null},"Lupus\\Infinite\\Mizar Tokens":{"note":"","data":["811E626A 03E7"],"options":null},"Lupus\\Max\\Blue \u0026 White Heads":{"note":"","data":["811E6260 03E7","811E625E 03E7"],"options":null},"Tribals\\Gold Wood\\Have All Tribals":{"note":"","data":["801E6014 000F"],"options":null},"Tribals\\Gold Wood\\Have No Tribals Remaining":{"note":"","data":["801E6016 0000"],"options":null},"Tribals\\Gold Wood\\No Tribals Killed":{"note":"","data":["801E6015 0000"],"options":null},"Vela\\Access\\All Keys":{"note":"","data":["811E61D2 FF70"],"options":null},"Vela\\Access\\All Objects":{"note":"","data":["811E61D4 FFFF"],"options":null},"Vela\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["801E6176 00FF","801E6177 00FF"],"options":null},"Vela\\Full \u0026 Max Health":{"note":"","data":["801E616F 000C","801E616C 0040"],"options":null},"Vela\\Infinite\\Max Ammo All Weapons":{"note":"","data":["50000302 0000","811E6180 03E7","50000802 0000","811E6186 03E7","50000402 0000","811E6196 03E7"],"options":null},"Vela\\Infinite\\Mizar Tokens":{"note":"","data":["811E617E 03E7"],"options":null},"Vela\\Max\\Blue \u0026 White Heads":{"note":"","data":["811E6174 03E7","811E6172 03E7"],"options":null},"Wide Screen Always Off":{"note":"","data":["800FECA8 0000"],"options":null}},"8A86F073-CD45E54B-C:45":{"Computer\\Always Gets Bubbles":{"note":"","data":["80173601 0006"],"options":null},"Computer\\Never Gets Bubbles":{"note":"","data":["80173601 0000"],"options":null},"Infinite Credits":{"note":"","data":["80120171 0005"],"options":null},"Player 1\\Always Gets Bubbles":{"note":"","data":["80171131 0006"],"options":null},"Player 1\\Infinite Time To Set Pieces":{"note":"","data":["8117AAFC 0000"],"options":null},"Player 1\\Never Gets Bubbles":{"note":"","data":["80171131 0000"],"options":null},"Player 1\\Screen Never Fills Over Time":{"note":"","data":["80171125 000A"],"options":null}},"8A97A197-272DF6C1-C:50":{"Double MPG":{"note":"","data":["800ADB69 0001"],"options":null},"Infinite Attempts":{"note":"","data":["800ADB66 0001"],"options":null},"Invincibility":{"note":"Makes you also fly without any fuel","data":["800ADB64 0001"],"options":null},"Level \u0026 Scenario Select":{"note":"","data":["800ACE5C 000B"],"options":null},"No Quad Damage":{"note":"","data":["800ADB6B 0001"],"options":null},"infinite Ammo For All Guns":{"note":"","data":["800ADB65 0001"],"options":null}},"8BD4A334-1E138B05-C:50":{"Have Max Rumble":{"note":"","data":["810D8E96 00??","810E61B8 00??"],"options":{"Max":"30","Never Rumble":"00"}},"Infinite\\Cash":{"note":"","data":["810EB852 FC9A"],"options":null},"Infinite\\Health":{"note":"","data":["810D8E8A 00??","810E6522 00??"],"options":{"Infinite":"64","No Health":"00"}},"Infinite\\Stamina":{"note":"","data":["810D8E8E 00??","810E6526 00??"],"options":{"Infinite":"64","No Stamina":"00"}},"Infinite\\Time":{"note":"","data":["810E6486 0E10"],"options":null}},"8C138BE0-95700E46-C:45":{"All Lakes Unlocked":{"note":"","data":["80111F00 0001"],"options":null},"Catch Bigger Fish":{"note":"","data":["80111F06 0001"],"options":null},"Easier to Catch Fish":{"note":"","data":["80111F0E 0001"],"options":null},"Extra Cash":{"note":"","data":["80111F0B 0001"],"options":null},"Line Never Breaks":{"note":"","data":["80111F05 0001"],"options":null},"No Penalties in Tounament":{"note":"","data":["80111F08 0001"],"options":null}},"8C3D1192-BEF172E1-C:50":{"Infinite Time":{"note":"","data":["8114C2FC 000A"],"options":null},"Pick Your Kombat Zone":{"note":"","data":["812575A4 00??"],"options":{"Armory":"14","Bell Tower":"07","Bridge":"05","Courtyard":"02","Dead Pool":"11","Graveyard":"09","Hidden Portal":"10","Jade's Desert":"0E","Kahn's Kave":"0D","Kahn's Tower":"04","Kombat Temple":"08","Lair":"18","Living Forest":"15","Lost Bridge":"0F","Pit":"03","Pit 2":"1A","Pit 3":"0A","Pit Bottom":"1C","Portal":"17","River Kombat":"0B","Rooftop":"13","Scorpion's Lair":"0C","Soul Chamber":"06","Star Bridge":"1B","Street":"01","Subway":"00","Tomb":"19","Tower":"16","Wasteland":"12"}},"Player 1\\Aggressor Energy Bar":{"note":"","data":["80169941 0030"],"options":null},"Player 1\\Energy is":{"note":"","data":["801698AD 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 1\\Infinite Run":{"note":"","data":["811698B4 0030"],"options":null},"Player 1\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B5285 0020","811698D4 5100","D02B5285 0020","811698DC 5100"],"options":null},"Player 1\\Play As":{"note":"","data":["8016989D 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Player 2\\Aggressor Energy Bar":{"note":"","data":["80169943 0030"],"options":null},"Player 2\\Energy is":{"note":"","data":["80169B81 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 2\\Infinite Run":{"note":"","data":["81169B88 0030"],"options":null},"Player 2\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B528D 0020","811698D6 5100","D02B528D 0020","811698DE 5100"],"options":null},"Player 2\\Play As":{"note":"","data":["80169B41 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Unlock Secret":{"note":"","data":["80169F41 0004"],"options":null}},"8D2BAE98-D73725BF-C:45":{"Infinite Stamina":{"note":"","data":["81138400 447A","81138404 447A"],"options":null},"Press [START] To Reset Timer":{"note":"","data":["81137886 0000"],"options":null}},"8E6E01FF-CCB4F948-C:45":{"GS Button For 40 Gems":{"note":"","data":["8829018F 0028"],"options":null},"Infinite\\Action Modifier":{"note":"","data":["802901E3 00??"],"options":{"Beach Ball Spell":"0A","Big Glover Spell":"04","Call Ball Spell":"0E","Death Spell":"01","Enemy Ball Spell":"07","Freeze Enemy Spell":"00","Frog Spell":"02","Green Ball Spell":"0C","Helicopter Spell":"06","Hovering Ball Spell":"0B","Purple Bouncy Ball Spell":"08","Super Call Ball Spell":"0D","Tiny Black/Grey Ball Spell":"09","Tree Spell":"05","Walk On Walls Spell":"03"}},"Infinite\\Activate Cheat\\Modifier 1":{"note":"","data":["81297BEC ????"],"options":{"All Of The Above":"0380","Level Select":"0080","Open Levels":"0200","Open Portals":"0100"}},"Infinite\\Activate Cheat\\Modifier 2":{"note":"","data":["81297BEE ????"],"options":{"All Of The Above":"024A","Big Ball":"0200","Call Ball (Press L)":"0002","Infinite Energy":"0040","Infinite Lives":"0008"}},"Infinite\\Double Jumps":{"note":"","data":["8028FC07 0000"],"options":null},"Infinite\\Health":{"note":"","data":["8029018F 0028"],"options":null},"Infinite\\Lives":{"note":"","data":["80290193 000A"],"options":null},"Press L To Levitate":{"note":"","data":["D02AE905 0020","81290334 43E0"],"options":null}},"8E9692B3-4264BB2A-C:50":{"Aquadome Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F799B 0000"],"options":null},"Aquadome Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FAE2B 0000"],"options":null},"Aquadome Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F799A 0200"],"options":null},"Aquadome Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FAE3A 0200"],"options":null},"Aquadome Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7993 00AA"],"options":null},"Aquadome Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FAE33 00AA"],"options":null},"Aquadome Stage\\No Energy\\Player 1":{"note":"","data":["801F7993 0000"],"options":null},"Aquadome Stage\\No Energy\\Player 2":{"note":"","data":["801FAE33 0000"],"options":null},"Backwash Bay Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F80EB 0000"],"options":null},"Backwash Bay Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB58B 0000"],"options":null},"Backwash Bay Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F80FA 0200"],"options":null},"Backwash Bay Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB59A 0200"],"options":null},"Backwash Bay Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F80F3 00AA"],"options":null},"Backwash Bay Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB593 00AA"],"options":null},"Backwash Bay Stage\\No Energy\\Player 1":{"note":"","data":["801F80F3 0000"],"options":null},"Backwash Bay Stage\\No Energy\\Player 2":{"note":"","data":["801FB593 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F8B3B 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FBFDB 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F8B4A 0200"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FBFEA 0200"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8B43 00AA"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FBFE3 00AA"],"options":null},"Boogerhenge, Tureen Toilet Stage\\No Energy\\Player 1":{"note":"","data":["801F8B43 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\No Energy\\Player 2":{"note":"","data":["801FBFE3 0000"],"options":null},"Candy Factory Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F826B 0000"],"options":null},"Candy Factory Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB70B 0000"],"options":null},"Candy Factory Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F827A 0200"],"options":null},"Candy Factory Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB71A 0200"],"options":null},"Candy Factory Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8273 00AA"],"options":null},"Candy Factory Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB713 00AA"],"options":null},"Candy Factory Stage\\No Energy\\Player 1":{"note":"","data":["801F8273 0000"],"options":null},"Candy Factory Stage\\No Energy\\Player 2":{"note":"","data":["801FB713 0000"],"options":null},"Clayribbean Cruise Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F805B 0000"],"options":null},"Clayribbean Cruise Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB4FB 0000"],"options":null},"Clayribbean Cruise Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F806A 0200"],"options":null},"Clayribbean Cruise Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB50A 0200"],"options":null},"Clayribbean Cruise Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8063 00AA"],"options":null},"Clayribbean Cruise Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB503 00AA"],"options":null},"Clayribbean Cruise Stage\\No Energy\\Player 1":{"note":"","data":["801F8063 0000"],"options":null},"Clayribbean Cruise Stage\\No Energy\\Player 2":{"note":"","data":["801FB503 0000"],"options":null},"Extra Characters and Secret Options":{"note":"","data":["801A86A1 000F"],"options":null},"Freezing Fortress Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F7EFB 0000"],"options":null},"Freezing Fortress Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB39B 0000"],"options":null},"Freezing Fortress Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F7F0A 0200"],"options":null},"Freezing Fortress Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB3AA 0200"],"options":null},"Freezing Fortress Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7F03 00AA"],"options":null},"Freezing Fortress Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB3A3 00AA"],"options":null},"Freezing Fortress Stage\\No Energy\\Player 1":{"note":"","data":["801F7F03 0000"],"options":null},"Freezing Fortress Stage\\No Energy\\Player 2":{"note":"","data":["801FB3A3 0000"],"options":null},"Ghastly Graveyard Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F818B 0000"],"options":null},"Ghastly Graveyard Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB62B 0000"],"options":null},"Ghastly Graveyard Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F819A 0200"],"options":null},"Ghastly Graveyard Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB63A 0200"],"options":null},"Ghastly Graveyard Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8193 00AA"],"options":null},"Ghastly Graveyard Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB633 00AA"],"options":null},"Ghastly Graveyard Stage\\No Energy\\Player 1":{"note":"","data":["801F8193 0000"],"options":null},"Ghastly Graveyard Stage\\No Energy\\Player 2":{"note":"","data":["801FB633 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F7FAB 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB44B 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F7FBA 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB45A 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7FB3 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB453 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\No Energy\\Player 1":{"note":"","data":["801F7FB3 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\No Energy\\Player 2":{"note":"","data":["801FB453 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F971B 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FCBBB 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F972A 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FCBCA 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F9723 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FCBC3 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\No Energy\\Player 1":{"note":"","data":["801F9723 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\No Energy\\Player 2":{"note":"","data":["801FCBC3 0000"],"options":null},"Kooky Courtyard Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F836B 0000"],"options":null},"Kooky Courtyard Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB80B 0000"],"options":null},"Kooky Courtyard Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F837A 0200"],"options":null},"Kooky Courtyard Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB81A 0200"],"options":null},"Kooky Courtyard Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8373 00AA"],"options":null},"Kooky Courtyard Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB813 00AA"],"options":null},"Kooky Courtyard Stage\\No Energy\\Player 1":{"note":"","data":["801F8373 0000"],"options":null},"Kooky Courtyard Stage\\No Energy\\Player 2":{"note":"","data":["801FB813 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Can't be Stunned\\Player 1":{"note":"","data":["801F7E9B 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Can't be Stunned\\Player 2":{"note":"","data":["801FB33B 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Full Super Bar\\Player 1":{"note":"","data":["811F7EAA 0200"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Full Super Bar\\Player 2":{"note":"","data":["811FB34A 0200"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Infinite Energy\\Player 1":{"note":"","data":["801F7EA3 00AA"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Infinite Energy\\Player 2":{"note":"","data":["801FB343 00AA"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\No Energy\\Player 1":{"note":"","data":["801F7EA3 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\No Energy\\Player 2":{"note":"","data":["801FB343 0000"],"options":null},"Play As\\Player1":{"note":"","data":["801A868F 00??"],"options":{"Bad Mr. Frosty":"00","Blob":"01","Bonker":"02","Boogerman":"03","Dr. Kiln":"04","Earthworm Jim":"05","Houngan":"08","Icky Bod Clay":"09","Kung Pow":"0A","Sumo Santa":"0D","T-Hoppy":"0F","Taffy":"0E"}},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Can't be Stunned\\Player 1":{"note":"","data":["801F766B 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Can't be Stunned\\Player 2":{"note":"","data":["801FAB0B 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Full Super Bar\\Player 1":{"note":"","data":["811F767A 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Full Super Bar\\Player 2":{"note":"","data":["811FAB1A 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Infinite Energy\\Player 1":{"note":"","data":["801F7673 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Infinite Energy\\Player 2":{"note":"","data":["801FAB13 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\No Energy\\Player 1":{"note":"","data":["801F7673 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\No Energy\\Player 2":{"note":"","data":["801FAB13 0000"],"options":null},"Rubbage Reef Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F7F7B 0000"],"options":null},"Rubbage Reef Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB41B 0000"],"options":null},"Rubbage Reef Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F7F8A 0200"],"options":null},"Rubbage Reef Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB42A 0200"],"options":null},"Rubbage Reef Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7F83 00AA"],"options":null},"Rubbage Reef Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB423 00AA"],"options":null},"Rubbage Reef Stage\\No Energy\\Player 1":{"note":"","data":["801F7F83 0000"],"options":null},"Rubbage Reef Stage\\No Energy\\Player 2":{"note":"","data":["801FB423 0000"],"options":null},"Rubbage Room Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801FA1AB 0000"],"options":null},"Rubbage Room Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FD64B 0000"],"options":null},"Rubbage Room Stage\\Full Super Bar\\Player 1":{"note":"","data":["811FA1BA 0200"],"options":null},"Rubbage Room Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FD65A 0200"],"options":null},"Rubbage Room Stage\\Infinite Energy\\Player 1":{"note":"","data":["801FA1B3 00AA"],"options":null},"Rubbage Room Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FD653 00AA"],"options":null},"Rubbage Room Stage\\No Energy\\Player 1":{"note":"","data":["801FA1B3 0000"],"options":null},"Rubbage Room Stage\\No Energy\\Player 2":{"note":"","data":["801FD653 0000"],"options":null},"Santa's Toy Factory Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F879B 0000"],"options":null},"Santa's Toy Factory Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FBC3B 0000"],"options":null},"Santa's Toy Factory Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F87AA 0200"],"options":null},"Santa's Toy Factory Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FBC4A 0200"],"options":null},"Santa's Toy Factory Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F87A3 00AA"],"options":null},"Santa's Toy Factory Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FBC43 00AA"],"options":null},"Santa's Toy Factory Stage\\No Energy\\Player 1":{"note":"","data":["801F87A3 0000"],"options":null},"Santa's Toy Factory Stage\\No Energy\\Player 2":{"note":"","data":["801FBC43 0000"],"options":null},"Stage Select":{"note":"","data":["801A868B 00??"],"options":{"Aquadome":"19","Backwash Bay":"16","Boogerhenge":"15","Camp Claynaveral":"02","Candy Factory":"00","Claynaveral Hangar":"01","Clayribbean Cruise":"11","Fiery Furnace":"0F","Freezing Fortress":"08","Ghastly Graveyard":"05","Grotto Gulch":"0A","Happy Harry's Hut":"07","Kiln's Hideout":"0E","Kiln's Laboratory":"0D","Kooky Courtyard":"13","Mudville Mansion":"04","Outhouse":"03","Refuse Room":"09","Research Room":"10","Rubbage Reef":"0C","Rubbage Room":"0B","Santa's Toy Factory":"14","Santa's Workship":"12","Spooky Spire":"06","Tribal Tower":"18","Tureen Toilet":"17"}},"Tribal Tower Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F770B 0000"],"options":null},"Tribal Tower Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FABAB 0000"],"options":null},"Tribal Tower Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F771A 0200"],"options":null},"Tribal Tower Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FABBA 0200"],"options":null},"Tribal Tower Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7713 00AA"],"options":null},"Tribal Tower Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FABB3 00AA"],"options":null},"Tribal Tower Stage\\No Energy\\Player 1":{"note":"","data":["801F7713 0000"],"options":null},"Tribal Tower Stage\\No Energy\\Player 2":{"note":"","data":["801FABB3 0000"],"options":null}},"8E9D834E-1E8B29A9-C:50":{"All Tracks Unlocked":{"note":"","data":["80095F6E 0008","50000264 0000","80169347 0001","50000264 0000","80169473 0001","50000564 0000","8016959F 0001"],"options":null},"Bike Modifier\\Player 1":{"note":"","data":["8016983F 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 2":{"note":"","data":["8016988B 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 3":{"note":"","data":["801698D7 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 4":{"note":"","data":["80169923 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Extra Bikes Unlocked":{"note":"","data":["80167C13 0001","80167C17 0003"],"options":null},"Extra Levels Unlocked":{"note":"","data":["8016980B 0001","8016980F 0001"],"options":null},"Infinite Primary Weapon\\Player 1":{"note":"","data":["801651FD 00C8"],"options":null},"Infinite Primary Weapon\\Player 2":{"note":"","data":["8016596D 00C8"],"options":null},"Infinite Primary Weapon\\Player 3":{"note":"","data":["801660DD 00C8"],"options":null},"Infinite Primary Weapon\\Player 4":{"note":"","data":["8016684D 00C8"],"options":null},"Infinite Shields\\Player 1":{"note":"","data":["801651F5 00C8"],"options":null},"Infinite Shields\\Player 2":{"note":"","data":["80165965 00C8"],"options":null},"Infinite Shields\\Player 3":{"note":"","data":["801660D5 00C8"],"options":null},"Infinite Shields\\Player 4":{"note":"","data":["80166845 00C8"],"options":null},"Infinite Turbos\\Player 1":{"note":"","data":["801651CB 0003","801651CF 0003"],"options":null},"Infinite Turbos\\Player 2":{"note":"","data":["8016593B 0003","8016593F 0003"],"options":null},"Infinite Turbos\\Player 3":{"note":"","data":["801660AB 0003","801660AF 0003"],"options":null},"Infinite Turbos\\Player 4":{"note":"","data":["8016681B 0003","8016681F 0003"],"options":null},"Mode Select":{"note":"","data":["80097687 00??"],"options":{"Anti-Gravity":"08","Anti-Gravity \u0026 Fish Eye Lens":"0A","Boulder":"01","Boulder \u0026 Fish Eye Lens":"03","Boulder \u0026 Wireframe":"11","Fish Eye Lens":"02","Ghost Mode":"40","Magnify":"04","Stealth Mode":"20","Ugly Mode":"80","Wireframe":"10"}}},"8ECC02F0-7F8BDE81-C:45":{"Access All\\Bikes":{"note":"","data":["810FBCBE FFFF"],"options":null},"Access All\\Tracks":{"note":"","data":["810FBCC2 FFFF"],"options":null},"Infinite\\Nitro":{"note":"","data":["810B8E4C 42C8"],"options":null},"Infinite\\Nitro Always On":{"note":"","data":["810BB5A4 8004"],"options":null},"Laps 2 Race":{"note":"","data":["8016FC88 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}}},"8F0CC36D-C738259E-C:45":{"Day":{"note":"","data":["80136FBF 00??"],"options":{"Friday 12th":"0C","Friday 19th":"13","Friday 26th":"1A","Friday 5th":"05","Monday 15th":"0F","Monday 1st":"01","Monday 22nd":"16","Monday 29th":"1D","Monday 8th":"08","Saturday 13th":"0D","Saturday 27th":"1B","Saturday 30th":"14","Saturday 6th":"06","Sunday 14th":"0E","Sunday 21st":"15","Sunday 28th":"1C","Sunday 7th":"07","Thursday 11th":"0B","Thursday 18th":"12","Thursday 25th":"19","Thursday 4th":"04","Tuesday 16th":"10","Tuesday 23rd":"17","Tuesday 2nd":"02","Tuesday 30th":"1E","Tuesday 9th":"09","Wednesday 10th":"0A","Wednesday 17th":"11","Wednesday 24th":"18","Wednesday 31st":"1F","Wednesday 3rd":"03"}},"Hours":{"note":"","data":["80136FBE 00??"],"options":{"00 AM":"00","00 PM":"0C","01 AM":"01","01 PM":"0D","02 AM":"02","02 PM":"0E","03 AM":"03","03 PM":"0F","04 AM":"04","04 PM":"10","05 AM":"05","05 PM":"11","06 AM":"06","06 PM":"12","07 AM":"07","07 PM":"13","08 AM":"08","08 PM":"14","09 AM":"09","09 PM":"15","10 AM":"0A","10 PM":"16","11 AM":"0B","11 PM":"17"}},"Item Select":{"note":"","data":["81126EE8 ????"],"options":{"100 Bag":"2103","1000 Bag":"2100","10000 Bag":"2101","30000 Bag":"2102","Alarm Clock":"1DB3","Blue NES Game":"1D42","CD Player":"1DAC","Fish Tank (Fish Included!)":"1CA6","Flat Shell":"2514","Grandfather Clock":"1DA0","Grey NES Game":"1D2F","JukeBox":"1D50","Lamp":"1EA1","Light Blue NES Game":"1D37","Nook's Shirt":"2410","Orange":"2804","Orange NES Game":"1D2B","Pet Cage":"1C00","Pointy Shell":"2515","Purple NES Game":"1D3E","Record Player":"1D4C","Red NES Game":"1D33","Round Snowman Table":"1EAB","Snowman Bed":"1EAF","Snowman Fridge":"1EA5","Snowman Seat":"1EB0","Stereo":"1DA9","Stereo Kinda Thing":"1DA6","Stereo NES Colour":"1D47","Tall Red Cupboard":"1011","Yellow NES Game":"1D3A"}},"Max Cash":{"note":"","data":["813BC34C FFFF"],"options":null},"Minutes":{"note":"","data":["80136FBD 00??"],"options":{"00":"00","05":"05","10":"0A","15":"0F","20":"14","25":"19","30":"1E","35":"23","40":"28","45":"2D","50":"32","55":"37","59":"3B"}},"Month":{"note":"","data":["80136FC1 00??"],"options":{"April":"04","Aug":"08","Dec":"0C","Feb":"02","Jan":"01","July":"07","June":"06","March":"03","May":"05","Nov":"0B","Oct":"0A","Sept":"09"}},"Time Passes":{"note":"","data":["80136FD2 00??"],"options":{"Hours \u0026 Mins Fast":"10","Hours \u0026 Mins Medium":"05","Mins Like Seconds":"01","Time Normal":"00","Time Zooms By":"FF"}}},"8F12C096-45DC17E1-C:50":{"All enemies killed":{"note":"","data":["801E244E 0000","801E244F 0000"],"options":null},"Always Have\\50 pieces of corn":{"note":"","data":["801E2461 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E2450 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["D01E244E 0000","801E244E 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E2462 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E2455 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E2460 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D008FCE1 0010","801E23C6 0001","D008FCE1 0010","801E23D6 0001"],"options":null},"Start with Berry Weapon":{"note":"","data":["801E2457 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Unlock All Levels":{"note":"","data":["81099B70 000F"],"options":null}},"8F50B845-D729D22F-C:44":{"Infinite Attempts":{"note":"","data":["800ADA96 0001"],"options":null},"Invincibility":{"note":"Makes you also fly without any fuel","data":["800ADA92 0001"],"options":null},"Level \u0026 Scenario Select":{"note":"","data":["800ACD8C 000E"],"options":null},"infinite Ammo For All Guns":{"note":"","data":["800ADA91 0001"],"options":null}},"906C3F77-CE495EA1-C:45":{"255 Scarabs":{"note":"","data":["805C396D 00FF"],"options":null},"All Items":{"note":"","data":["805C4DBC FFFF"],"options":null},"All Spells":{"note":"","data":["805C4DBE 00BF","805C4DBF 00FF"],"options":null},"Food Bags":{"note":"","data":["805C4DBF 00??"],"options":{"Large Food Bag":"80","Medium Food Bag":"40","Small Food Bag":"20"}},"Get the Cape Claw Cage Key":{"note":"","data":["805C4C51 0001"],"options":null},"Infinite Health":{"note":"","data":["805C3971 007C","805C3965 007C"],"options":null},"Infinite Magic":{"note":"","data":["815C3968 0019","815C3974 0019"],"options":null},"Item Pickup Bug Fix":{"note":"","data":["814F92E2 05B1"],"options":null},"Lanterns":{"note":"","data":["805C4DCF 00??"],"options":{"Firefly Lantern":"01"}},"Levitate (Press L)":{"note":"","data":["814EA390 0802","814EA392 6C2D","814EA394 8FBC","814EA396 0030","8109B0B4 8FBF","8109B0B6 0034","8109B0B8 3C04","8109B0BA 800A","8109B0BC 8484","8109B0BE 7DC0","8109B0C0 2405","8109B0C2 0020","8109B0C4 14A4","8109B0C6 0003","8109B0C8 8606","8109B0CA 0010","8109B0CC 00C5","8109B0CE 3022","8109B0D0 A606","8109B0D2 0010","8109B0D4 0813","8109B0D6 A8E6","8109B0D8 0000","8109B0DA 0000"],"options":null},"Mushroom Bags":{"note":"","data":["805C4DC0 00??"],"options":{"Large Mushroom Bag":"38","Medium Mushroom Bag":"18"}},"Play as Fox":{"note":"You'll need to restart the level or save/load","data":["805C3C5B 0000","805C3C67 0000"],"options":null},"Play as Krystal":{"note":"You'll need to restart the level or save/load","data":["805C3C5B 0001","805C3C67 0001"],"options":null},"Primary Spells":{"note":"","data":["805C4DBE 00??"],"options":{"Dinosaur Eye":"20","Disguise Spell":"05","Illusion Spell":"04","Portal Spell":"80","Projectile Spell":"08","Shield":"10"}},"Replace Fox's Model with Sabre's":{"note":"","data":["81035B9C 081F","81035B9E C000","817F0000 2409","817F0002 0002","817F0004 0800","817F0006 D6E9","817F0008 A1C9","817F000A 00AD"],"options":null},"Secondary Spells":{"note":"","data":["805C4DBF 00??"],"options":{"Ice Blast Spell":"03","Mindread":"06","Mindread Spell":"02","Wizard Randorn (behaves like Projectile)":"04","Wizard Randorn (unique behavior)":"05"}},"Show Hidden Options Menu":{"note":"","data":["8008C857 0041"],"options":null},"Spawn Past the GuardClaw in the Mammoth Area near Swapstone Hollow (File 3)":{"note":"","data":["816DFBA4 C5D4","816DFBA6 0000","816DFBA8 C496","816DFBAA 0000","816DFBAC 44E5","816DFBAE 0000"],"options":null},"Teleport Tricky to Player (Press D-Pad Down)":{"note":"","data":["814FD888 0802","814FD88A 6C37","8109B0DC 3C02","8109B0DE 800A","8109B0E0 8442","8109B0E2 7DC0","8109B0E4 2403","8109B0E6 0400","8109B0E8 1443","8109B0EA 0007","8109B0EC 8E5C","8109B0EE 00E4","8109B0F0 8F82","8109B0F2 000C","8109B0F4 8F83","8109B0F6 0010","8109B0F8 8F9C","8109B0FA 0014","8109B0FC AE42","8109B0FE 0000","8109B100 AE43","8109B102 0004","8109B104 AE5C","8109B106 0008","8109B108 8E45","8109B10A 0000","8109B10C 0813","8109B10E F624","8109B110 8E46","8109B112 0008"],"options":null},"Walk Through Walls / Levitate":{"note":"L plus Dpad Up to disable clipping, L plus Dpad Down to re-enable clipping, L to levitate","data":["81012144 081F","81012146 C400","81012148 0000","8101214A 0000","817F1000 3C18","817F1002 805C","817F1004 8F18","817F1006 1568","817F1008 1300","817F100A 001E","817F100C 0000","817F100E 0000","817F1010 3C02","817F1012 800D","817F1014 8042","817F1016 D3F5","817F1018 2408","817F101A 0020","817F101C 1448","817F101E 0019","817F1020 0000","817F1022 0000","817F1024 3C08","817F1026 807F","817F1028 8102","817F102A 10F0","817F102C 1040","817F102E 0003","817F1030 0000","817F1032 0000","817F1034 2402","817F1036 00A4","817F1038 A302","817F103A 00FB","817F103C 3C08","817F103E 807F","817F1040 8102","817F1042 10F1","817F1044 5440","817F1046 0003","817F1048 A100","817F104A 10F1","817F104C 1000","817F104E 0005","817F1050 0000","817F1052 0000","817F1054 2402","817F1056 00AF","817F1058 A302","817F105A 00FB","817F105C 1000","817F105E 0009","817F1060 0000","817F1062 0000","817F1064 3C08","817F1066 807F","817F1068 8102","817F106A 10F0","817F106C 1040","817F106E 0005","817F1070 0000","817F1072 0000","817F1074 3C18","817F1076 805C","817F1078 8F18","817F107A 1568","817F107C 3C02","817F107E 4000","817F1080 AF02","817F1082 0028","817F1084 8E78","817F1086 0000","817F1088 0800","817F108A 4853","817F108C 8E02","817F108E 0000","D00CD3F4 0008","817F10F0 0100","D00CD3F4 0004","817F10F0 0001"],"options":null}},"90A59003-31089864-C:45":{"Always Normal Spirit\\Player 1":{"note":"","data":["801671F5 0032"],"options":null},"Always Normal Spirit\\Player 2":{"note":"","data":["80167689 0032"],"options":null},"Always Normal Spirit\\Player 3":{"note":"","data":["80167B1D 0032"],"options":null},"Always Normal Spirit\\Player 4":{"note":"","data":["80167FB1 0032"],"options":null},"Always Special\\Player 1":{"note":"","data":["80167235 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["801676C9 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["80167B5D 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["80167FF1 0004"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 1":{"note":"","data":["801671F4 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 2":{"note":"","data":["80167688 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 3":{"note":"","data":["80167B1C 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 4":{"note":"","data":["80167FB0 0064"],"options":null},"Have All Characters":{"note":"","data":["8109ED5A FFFF"],"options":null},"Infinite Create-A-Wrestler Attribute Points":{"note":"","data":["8011A81B 001E"],"options":null},"Max Attributes":{"note":"","data":["50000502 0000","8011A811 0032"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["801671F5 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["80167689 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["80167B1D 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["80167FB1 00FF"],"options":null},"No Spirit\\Player 1":{"note":"","data":["801671F5 0000"],"options":null},"No Spirit\\Player 2":{"note":"","data":["80167689 0000"],"options":null},"No Spirit\\Player 3":{"note":"","data":["80167B1D 0000"],"options":null},"No Spirit\\Player 4":{"note":"","data":["80167FB1 0000"],"options":null},"Specials Don't Run Out":{"note":"","data":["8112AD94 2400"],"options":null},"Timer Is Always 00:00":{"note":"","data":["8016F0AF 0000"],"options":null},"Ultimate Codes\\Player 1":{"note":"","data":["801671F4 0064"],"options":null},"Ultimate Codes\\Player 2":{"note":"","data":["80167688 0064"],"options":null},"Ultimate Codes\\Player 3":{"note":"","data":["80167B1C 0064"],"options":null},"Ultimate Codes\\Player 4":{"note":"","data":["80167FB0 0064"],"options":null},"Weapon Select\\Player 1":{"note":"","data":["81167236 0300","81166D90 ????","81166D92 0000","80166E50 0000"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 2":{"note":"","data":["811676CA 0300","81166DC0 ????","80166DC2 0001","80166E51 0001"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 3":{"note":"","data":["81167B5E 0300","81166DF0 ????","80166DF2 0002","80166E52 0002"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 4":{"note":"","data":["81167FF2 0300","81166E18 ????","81166E1A 0003","80166E53 0003"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}}},"90AF8D2C-E1AC1B37-C:00":{"Freeze Timer":{"note":"","data":["80161E95 0000"],"options":null},"Infinite 9 Credits":{"note":"","data":["8009F0DB 0009"],"options":null},"Infinite Lives":{"note":"","data":["800A1059 0001"],"options":null},"Infinite Max Energy":{"note":"This give you the most engery to jump really high","data":["800A1067 000F","800A106B 000F"],"options":null}},"90F5D9B3-9D0EDCF0-C:45":{"Have All Pikachus Magnemites":{"note":"","data":["801183BC 0000","801183BD 0000","801183BE 0000"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 1":{"note":"","data":["81285A18 03E7"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 2":{"note":"","data":["81286438 03E7"],"options":null},"Pokemon\\Inf Spells\\Player 1":{"note":"","data":["810AE580 FFFF","810AE582 FFFF","810AE5D4 FFFF","810AE5D6 FFFF","810AE628 FFFF","810AE62A FFFF"],"options":null},"Pokemon\\Inf Spells\\Player 2":{"note":"","data":["810AE79C FFFF","810AE79E FFFF","810AE7F0 FFFF","810AE7F2 FFFF","810AE844 FFFF","810AE846 FFFF"],"options":null},"Pokemon\\Max HP\\Player 1":{"note":"","data":["810AE586 03E7","810AE5DA 03E7","810AE62E 03E7"],"options":null},"Pokemon\\Max HP\\Player 2":{"note":"","data":["810AE7A2 03E7","810AE7F6 03E7","810AE84A 03E7"],"options":null},"Ultimate Code":{"note":"what's so ultimate about this code is it raises your Pokemon to its full potential. Even at Level 100, most Pokemon still have a way to go to raise their stats to the max. But with this code, you can instantly boost any Pokemon to its greatest potential!!!","data":["81171F3C FF01","81171F3E FF01","81171F40 FF01","81171F42 FF01","81171F44 FF01"],"options":null}},"91691C3D-F4AC5B4D-C:4A":{"Infinite\\Health\\Player 1":{"note":"","data":["8112A576 270F"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["8114AAF6 270F"],"options":null},"Infinite\\Stun Meter\\Player 1":{"note":"","data":["8012A579 00FF"],"options":null},"Infinite\\Stun Meter\\Player 2":{"note":"","data":["8014AAF9 00FF"],"options":null},"Play As\\Player 1":{"note":"","data":["801BBA54 00??"],"options":{"Airazor":"03","Cheetor":"02","Megatron":"04","Optimus Primal":"00","Rattrap":"01","Tarantulas":"05","Terrorsaur":"07","Waspinator":"06"}},"Play As\\Player 2":{"note":"","data":["801BBA55 00??"],"options":{"Airazor":"03","Cheetor":"02","Megatron":"04","Optimus Primal":"00","Rattrap":"01","Tarantulas":"05","Terrorsaur":"07","Waspinator":"06"}}},"916AE6B8-8817AB22-C:4A":{"Diffuculty Modifier":{"note":"","data":["8011252F 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Gems":{"note":"","data":["8012FF07 00FF"],"options":null},"Have All\\Level Keys":{"note":"","data":["8012FDE3 0007","8012FDE7 0007","8012FDEB 0007","8012FDEF 0007","8012FDF3 0007","8012FDF7 0007","8012FDFB 0007"],"options":null},"Have All\\Weapons":{"note":"","data":["8012FDA7 0001","8012FDAB 0001","8012FDAF 0001","8012FDB3 0001","8012FDB7 0001","8012FDBB 0001","8012FDBF 0001","8012FDC3 0001","8012FDC7 0001","8012FDCB 0001","8012FDCF 0001","8012FDD3 0001"],"options":null},"Have\\Backpack":{"note":"","data":["8012FD9B 0001","8012FDDB 0001"],"options":null},"Have\\Cheat Menu":{"note":"","data":["811205F0 FFFF","811205F2 FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["81129030 AAE1","811E85EA F1FF"],"options":null},"Infinite\\Ammo":{"note":"","data":["8012FD7F 00FF","8012FD93 00FF","8012FD83 00FF","8012FD63 00FF","8012FD8B 00FF","8012FD67 00FF","8012FD8F 00FF","8012FD6B 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["8112FD96 5B23","8012FDD7 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C15F4 013C"],"options":null},"Infinite\\Lives":{"note":"","data":["8012FF0B 00FF"],"options":null}},"916B8B5B-780B85A4-C:45":{"Bonus Stage Character Modifier (Training Mode)":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["8018F1D3 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Enable Item Switch Menu (All Modes)":{"note":"Go into Vs Mode \u0026 then Vs Options \u0026 then Press Up On the D-Pad Or Analogue Stick \u0026 then click the A Button to enter the Item Switch Menu. This Cheat Works For All Modes","data":["811348E2 0004"],"options":null},"Give Kirby A Wierd Blow-Up":{"note":"","data":["8025E158 000A"],"options":null},"Have All Characters":{"note":"","data":["810A4938 0FF0"],"options":null},"P1 Press Down On D-Pad To Make Items Appear In Random Spots":{"note":"","data":["D109EFA4 0400","8118D0A2 0001"],"options":null},"Story Mode\\Always Get Pacifist (60,000 Points)":{"note":"","data":["810A4B6E 0000"],"options":null},"Story Mode\\Infinite Time":{"note":"","data":["810A4B2E 43CB"],"options":null},"Story Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code could also result freezing at the end of the Level.","data":["800A4B3B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 1\\Infinite Lives":{"note":"","data":["800A4B43 0004"],"options":null},"Story Mode\\Player 1\\Kirby B Button Move\\Congo Jungle":{"note":"","data":["80270ACF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Fighting Polygon Team":{"note":"","data":["8026271F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["80268B0F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Kirby's Dreamland":{"note":"","data":["8026DB3F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Master Hand Stage":{"note":"","data":["80271C4F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Metal Mario Stage":{"note":"","data":["80263597 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Peach's Castle":{"note":"","data":["80263D9F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Planet Zebes":{"note":"","data":["8026FFA7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Saffron City":{"note":"","data":["80273A97 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["802710F7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["80268E4F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Low % Health":{"note":"","data":["810A4B86 0000"],"options":null},"Story Mode\\Player 1\\Stage Select":{"note":"","data":["D1045188 0010","800A4AE7 00??"],"options":{"Bonus Stage 1":"03","Bonus Stage 2":"07","Bonus Stage 3 (Race To The Finish)":"0B","Final Stage (Vs Master Hand)":"0D","Stage 1 (Vs Link)":"00","Stage 10 (Fighting Polygon Team vs30)":"0C","Stage 2 (Vs Yoshi Team vs 18)":"01","Stage 3 (Vs Fox McCloud)":"02","Stage 4 (Freezes?)":"04","Stage 5 (Vs Pikachu)":"05","Stage 6 (Freezes?)":"06","Stage 7 (Vs Kirby Team vs8)":"08","Stage 8 (Vs Samus Aran)":"09","Stage 9 (Vs Metal Mario)":"0A"}},"Story Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4BAF 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 2\\Infinite Lives":{"note":"","data":["800A4BB7 0004"],"options":null},"Story Mode\\Player 2\\Low % Health":{"note":"","data":["810A4BFA 0000"],"options":null},"Story Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4C23 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 3\\Infinite Lives":{"note":"","data":["800A4C2B 0004"],"options":null},"Story Mode\\Player 3\\Low % Health":{"note":"","data":["810A4C6E 0000"],"options":null},"Story Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4C97 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 4\\Infinite Lives":{"note":"","data":["800A4C9F 0004"],"options":null},"Story Mode\\Player 4\\Low % Health":{"note":"","data":["810A4CE2 0000"],"options":null},"Story Mode\\Skip Straight To Master Hand":{"note":"","data":["800A4AE7 000D"],"options":null},"VS. Mode\\Have Mushroom Kindom":{"note":"","data":["800A4937 00FF"],"options":null},"VS. Mode\\Infinite Time":{"note":"","data":["810A4D1E 43CB"],"options":null},"VS. Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4D2B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["802639EF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["8026BF87 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["8026E2B7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Low % Health":{"note":"","data":["810A4D76 0000"],"options":null},"VS. Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4D9F 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 2\\Low % Health":{"note":"","data":["810A4DEA 0000"],"options":null},"VS. Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4E13 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 3\\Low % Health":{"note":"","data":["810A4E5E 0000"],"options":null},"VS. Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4E87 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 4\\Low % Health":{"note":"","data":["810A4ED2 0000"],"options":null}},"918E2D60-F865683E-C:50":{"Access\\All Cars":{"note":"","data":["50000402 0000","813DFC6A 0001"],"options":null},"Access\\All Challenges":{"note":"","data":["50000502 0000","813DD428 0001"],"options":null},"Access\\All Cups":{"note":"","data":["50000302 0000","812CB7C8 0001"],"options":null},"Always 1st":{"note":"","data":["813E00E8 0001"],"options":null},"Infinite\\Boomerang's":{"note":"","data":["8039B464 0004","8039B467 0004","8039B469 0009"],"options":null},"Infinite\\Bullet's":{"note":"","data":["8039B464 0007","8039B467 0007","8039B469 0009"],"options":null},"Infinite\\CREDITS":{"note":"","data":["80388F3D 0003"],"options":null},"Infinite\\Magnet's":{"note":"","data":["8039B464 0001","8039B467 0001","8039B469 0009"],"options":null},"Infinite\\Seeker's":{"note":"","data":["8039B464 0005","8039B467 0005","8039B469 0009"],"options":null},"Infinite\\Shield's":{"note":"","data":["8039B464 0008","8039B467 0008","8039B469 0009"],"options":null},"Infinite\\Stinger's":{"note":"","data":["8039B464 0003","8039B467 0003","8039B469 0009"],"options":null},"Infinite\\Stopper's":{"note":"","data":["8039B464 0006","8039B467 0006","8039B469 0009"],"options":null},"Infinite\\Turbo's":{"note":"","data":["8039B464 0000","8039B467 0000","8039B469 0009"],"options":null},"Laps To Race":{"note":"","data":["813BBD5C 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Psycho Weapons":{"note":"","data":["8039B469 0003","802B85A3 0003"],"options":null}},"91B66D42-16AC4E46-C:44":{"Have Cheats Menu":{"note":"Go into the Cheats From the main Menu \u0026 put on the Ones you want","data":["810CF716 01FF"],"options":null},"Infinite Balls":{"note":"","data":["802FD21F 0064"],"options":null},"Infinite Credits":{"note":"","data":["802FD215 0064"],"options":null},"Infinite Energy":{"note":"","data":["802FD209 0064"],"options":null},"Infinite Sponge Darts":{"note":"","data":["802FD223 0064"],"options":null},"Infinite Suckers":{"note":"","data":["802FD222 0064"],"options":null},"Start with 9999 Monster Score":{"note":"","data":["812FD20E 270F"],"options":null}},"93053075-261E0F43-C:50":{"All Players On 1st Shot":{"note":"","data":["813013DA 0000"],"options":null}},"930C29EA-939245BF-C:45":{"All Gold Medals":{"note":"","data":["50000502 0000","81259130 0101"],"options":null},"Infinite\\Tools Options":{"note":"","data":["8025A624 00??"],"options":{"Fan":"04","Frying Pan":"01","Ghost":"02","Invisible":"06","Rat Face":"08","Rock":"07","Rocket":"05","Super Ghost":"03","Super Rat Face":"09","Wings":"0A"}},"Infinite\\Trick Game 300 Points":{"note":"","data":["8125A7F2 012C"],"options":null},"Infinite\\Weapons Options":{"note":"","data":["8025A622 00??","8025A623 0009"],"options":{"Bomb":"05","Freeze Shot":"03","Parachute":"02","Slap Stick":"01","Snowman":"04","Whirlwind":"06"}},"Max Coins":{"note":"","data":["8125A5BE 270F","8025A5BF 00C8"],"options":null},"Open Extra Characters \u0026 Snowboards":{"note":"Battle Mode Only","data":["8125916E 0101","80259170 0001","8025915C 0001","8125915E 0101","81259160 0101"],"options":null}},"931AEF3F-EF196B90-C:4A":{"Infinite\\Armor\\Player 1":{"note":"","data":["8011D4DF 0064"],"options":null},"Infinite\\Armor\\Player 2":{"note":"","data":["8011D4E3 0064"],"options":null},"Infinite\\Bombs\\Player 1":{"note":"","data":["8011D4E7 0003"],"options":null},"Infinite\\Bombs\\Player 2":{"note":"","data":["8011D4EB 0003"],"options":null},"Level 11 Vulcan Cannon\\Player 1":{"note":"","data":["80123A2B 000A"],"options":null},"Level 11 Vulcan Cannon\\Player 2":{"note":"","data":["80123BCB 000A"],"options":null},"Press L For Rapid Fire Select\\Player 1":{"note":"","data":["D011BDF1 0020","8011D50F 00??"],"options":{"On Flak":"14","On Nuke \u0026 Laser":"28"}},"Press L For Rapid Fire Select\\Player 2":{"note":"","data":["D011BDF9 0020","8011D513 00??"],"options":{"On Flak":"14","On Nuke \u0026 Laser":"28"}}},"93945F48-5C0F2E30-C:50":{"Bonus Stage Character Modifier (Training Mode)":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["80197A33 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Give Kirby A Wierd Blow-Up":{"note":"","data":["802669B8 000A"],"options":null},"Have All Characters":{"note":"","data":["810AD198 0FF0"],"options":null},"Jump off to win":{"note":"","data":["810AD3A2 0000"],"options":null},"P1 Press Down On D-Pad To Make Items Appear In Random Spots":{"note":"","data":["D10A7804 0400","81195902 0001"],"options":null},"Story Mode\\Always Get Pacifist (60,000 Points)":{"note":"","data":["810AD3CE 0000"],"options":null},"Story Mode\\Infinite Time":{"note":"","data":["810AD38E 43CB"],"options":null},"Story Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code could also result freezing at the end of the Level.","data":["800AD39B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 1\\Infinite Lives":{"note":"","data":["800AD3A3 0004"],"options":null},"Story Mode\\Player 1\\Kirby B Button Move\\Congo Jungle":{"note":"","data":["8027932F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Fighting Polygon Team":{"note":"","data":["8026AF7F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["8027136F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Kirby's Dreamland":{"note":"","data":["8027639F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Master Hand Stage":{"note":"","data":["8027A4AF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Metal Mario Stage":{"note":"","data":["8026BDF7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Peach's Castle":{"note":"","data":["8026C5FF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Planet Zebes":{"note":"","data":["80278807 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Saffron City":{"note":"","data":["8027C2F7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["80279957 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["802716AF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Low % Health":{"note":"","data":["810AD3E6 0000"],"options":null},"Story Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD40F 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 2\\Infinite Lives":{"note":"","data":["800AD417 0004"],"options":null},"Story Mode\\Player 2\\Low % Health":{"note":"","data":["810AD45A 0000"],"options":null},"Story Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD483 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 3\\Infinite Lives":{"note":"","data":["800AD48B 0004"],"options":null},"Story Mode\\Player 3\\Low % Health":{"note":"","data":["810AD4CE 0000"],"options":null},"Story Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD4F7 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 4\\Infinite Lives":{"note":"","data":["800AD4FF 0004"],"options":null},"Story Mode\\Player 4\\Low % Health":{"note":"","data":["810AD542 0000"],"options":null},"Story Mode\\Skip Straight To Master Hand":{"note":"","data":["800AD347 000D"],"options":null},"VS. Mode\\Have Mushroom Kindom":{"note":"","data":["800AD197 00FF"],"options":null},"VS. Mode\\Infinite Time":{"note":"","data":["810AD57E 43CB"],"options":null},"VS. Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD58B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["8026C24F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["802747E7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["80276B17 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Low % Health":{"note":"","data":["810AD5D6 0000"],"options":null},"VS. Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD5FF 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 2\\Low % Health":{"note":"","data":["810AD64A 0000"],"options":null},"VS. Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD673 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 3\\Low % Health":{"note":"","data":["810AD6BE 0000"],"options":null},"VS. Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD6E7 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 4\\Low % Health":{"note":"","data":["810AD732 0000"],"options":null}},"93EB3F7E-81675E44-C:44":{"Access All Levels":{"note":"","data":["8008A9D6 0001","8008A9EA 0001","8008AA12 0001","8008AA62 0001","8008AA76 0001","8008AA8A 0001","8008AA9E 0001","8008AAB2 0001","8008AAC6 0011","8008AADA 0021","8008AAEE 0001","8008AB16 0011","8008AB2A 0041","8008AB3E 0021","8008AB52 0081","8008AB66 0001","8008AB7A 0081","8008AB8E 0001","8008ABB6 0001","8008ABDE 0001","8008ABF2 0011","8008AC06 0021","8008AC56 0001","8008AF3A 0001","8008AF4E 0001","8008AF62 0001","8008AF76 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81094150 0063","81094152 0063","81094154 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A9297 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810866C2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810864C4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80094305 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A92B5 00??","800A92C5 00??","800A92D5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"944FAFC4-B288266A-C:00":{"Infinite Health":{"note":"","data":["812128D0 42C8","812128D2 0000"],"options":null},"Infinite Heat Vision":{"note":"","data":["812128E0 42C8","812128E2 0000"],"options":null},"Infinite Ice Breath":{"note":"","data":["812128E4 42C8","812128E6 0000"],"options":null},"Infinite Speed Boost":{"note":"","data":["812128D8 42C8","812128DA 0000"],"options":null},"Infinite Timer\\Level 2":{"note":"","data":["8119B927 003B","8119B92B 0009"],"options":null},"Infinite X-Ray":{"note":"","data":["812128F0 42C8","812128F2 0000"],"options":null}},"94807E6B-60CC62E4-C:4A":{"1P Mode\\Stage Select":{"note":"","data":["D0162FEB 0001","80162FEB 00??"],"options":{"Car-kun Arle game":"0E","Car-kun Schezo game":"09","Satan Arle game":"0D","Satan Schezo game":"08"}},"Endless Mode\\Player Level 99 Player 1":{"note":"","data":["801632E7 0063"],"options":null},"Endless Mode\\Player Level 99 Player 2":{"note":"","data":["801632EB 0063"],"options":null},"Instant 7th Step of Chain\\Player 1":{"note":"","data":["D0163A2B 0001","80163A2B 0007"],"options":null},"Instant 7th Step of Chain\\Player 2":{"note":"","data":["D0163E5B 0001","80163E5B 0007"],"options":null},"Maximum Score\\Player 1":{"note":"","data":["811632CC 05F5","811632CE E0FF"],"options":null},"Maximum Score\\Player 2":{"note":"","data":["811632D0 05F5","811632D2 E0FF"],"options":null},"Mode Total Continues 0":{"note":"","data":["801632AF 0000","801632C7 0000"],"options":null},"Nazo Puyo Mode\\All Practice Stages Cleared 4":{"note":"","data":["50000402 0000","811631E8 FFFF"],"options":null},"No Warning Icons\\Player 1":{"note":"","data":["80164EA3 0000"],"options":null},"No Warning Icons\\Player 2":{"note":"","data":["80164EA7 0000"],"options":null},"Options Complete Demo Viewer":{"note":"","data":["8016320B 0007","8116320C FFFF","8116320E FFFF"],"options":null}},"95286EB4-B76AD58F-C:45":{"100% Efficiency":{"note":"","data":["80092E4B 0064"],"options":null},"100% Leadership":{"note":"","data":["80092E47 0064"],"options":null},"GDI\\Instant\\Air Strike":{"note":"","data":["800962A4 0032","800C4E50 00FF"],"options":null},"GDI\\Instant\\Build Aircraft":{"note":"","data":["810C4F12 FFFF"],"options":null},"GDI\\Instant\\Build Buildings":{"note":"","data":["810C4F1E FFFF"],"options":null},"GDI\\Instant\\Build Units":{"note":"","data":["810C4F16 FFFF"],"options":null},"GDI\\Instant\\Build Vehicles":{"note":"","data":["810C4F1A FFFF"],"options":null},"GDI\\Instant\\Ion Cannon":{"note":"","data":["800962A5 0033","800C4E30 00FF"],"options":null},"GDI\\Instant\\Nuclear Strike":{"note":"","data":["800962A6 0034","800C4E70 00FF"],"options":null},"GDI\\Max Cash":{"note":"","data":["810C4F06 FFFF","810C4F08 0001"],"options":null},"GDI\\Max Power":{"note":"","data":["810C4F26 FFFF","810C4F28 0001"],"options":null},"GDI\\Maximum Buildings Lost":{"note":"","data":["80092E5F 00C8"],"options":null},"GDI\\Maximum Killed":{"note":"","data":["80092E53 00C8"],"options":null},"GDI\\Mission 4\\Infinite Health APC #1":{"note":"","data":["800ABFB1 00C8"],"options":null},"GDI\\Mission 4\\Infinite Health APC #2":{"note":"","data":["800AC03D 00C8"],"options":null},"GDI\\Mission 4\\Infinite Health Hum-Vee":{"note":"","data":["800ABE99 0096"],"options":null},"GDI\\Mission 6\\Infinite Health Commando":{"note":"","data":["800B56CD 0050"],"options":null},"GDI\\Mission 6\\Infinite Health Transportational Helicopter":{"note":"","data":["800BFC95 005A"],"options":null},"GDI\\No Buildings Lost":{"note":"","data":["80092E5F 0000"],"options":null},"GDI\\None Killed":{"note":"","data":["80092E53 0000"],"options":null},"Max Total Score":{"note":"","data":["81092E42 FFFF"],"options":null},"NOD\\Instant\\Air Strike":{"note":"","data":["800962A4 0032","800C4FF8 00FF"],"options":null},"NOD\\Instant\\Build Aircraft":{"note":"","data":["810C50BA FFFF"],"options":null},"NOD\\Instant\\Build Buildings":{"note":"","data":["810C50C6 FFFF"],"options":null},"NOD\\Instant\\Build Units":{"note":"","data":["810C50BE FFFF"],"options":null},"NOD\\Instant\\Build Vehicles":{"note":"","data":["810C50C2 FFFF"],"options":null},"NOD\\Instant\\Ion Cannon":{"note":"","data":["800962A5 0033","800C4FD8 00FF"],"options":null},"NOD\\Instant\\Nuclear Strike":{"note":"","data":["800962A6 0034","800C5018 00FF"],"options":null},"NOD\\Max Cash":{"note":"","data":["810C50AE FFFF","810C50B0 0001"],"options":null},"NOD\\Max Power":{"note":"","data":["810C50CE FFFF","810C50D0 0001"],"options":null},"NOD\\Maximum Buildings Lost":{"note":"","data":["80092E5B 00C8"],"options":null},"NOD\\Maximum Killed":{"note":"","data":["80092E4F 00C8"],"options":null},"NOD\\No Buildings Lost":{"note":"","data":["80092E5B 0000"],"options":null},"NOD\\None Killed":{"note":"","data":["80092E4F 0000"],"options":null},"Time Spent On Mission":{"note":"","data":["80092E3B 00??"],"options":{"Max Time":"FF","No Time":"00"}},"Tons Of Ending Credits":{"note":"","data":["81092E3C 0FFF","81092E3E FFFF"],"options":null}},"95B2B30B-2B6415C1-C:50":{"Boots Of Speed Select\\Player 1":{"note":"","data":["8113F128 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113F2C4 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113F460 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113F5FC ????"],"options":{"Off":"0000","On":"03FF"}},"Enable Cheat Menu":{"note":"","data":["80137D33 0005","81137C56 07FF"],"options":null},"Have All\\Armour":{"note":"","data":["8013F081 0019","8013F085 0014","8013F089 0014","8013F08D 0014"],"options":null},"Have All\\Items And Artifacts\\Player 1":{"note":"","data":["8013F091 0001","8013F093 00FF","8013F095 0002","8013F097 00FF","8013F099 0003","8013F09B 00FF","8013F09D 0004","8013F09F 00FF","8013F0A1 0005","8013F0A3 00FF","8013F0A5 0006","8013F0A7 00FF","8013F0A9 0007","8013F0AB 00FF","8013F0AD 0008","8013F0AF 00FF","8013F0B1 0009","8013F0B3 00FF","8013F0B5 000A","8013F0B7 00FF","8013F0B9 000B","8013F0BB 00FF","8013F0BD 000C","8013F0BF 00FF","8013F0C1 000D","8013F0C3 00FF","8013F0C5 000E","8013F0C7 00FF","8013F0C9 000F","8013F0CB 00FF","8013F0CD 0010","8013F0CF 00FF","8013F0D1 0011","8013F0D3 00FF","8013F0D5 0012","8013F0D7 00FF","8013F0D9 0013","8013F0DB 00FF","8013F0DD 0014","8013F0DF 00FF","8013F0E1 0015","8013F0E3 00FF","8013F0E5 0016","8013F0E7 00FF","8013F0E9 0017","8013F0EB 00FF","8013F0ED 0018","8013F0EF 00FF","8013F0F1 0019","8013F0F3 00FF","8013F0F5 001B","8013F0F7 00FF","8013F0F9 001C","8013F0FB 00FF","8013F0FD 001D","8013F0FF 00FF","8013F101 001E","8013F103 00FF","8013F105 001F","8013F107 00FF","8013F109 0020","8013F10B 00FF","8013F119 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113F12C 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113F2C8 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113F464 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113F600 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013F145 00FF","8013F147 00FF","8013F149 00FF","8013F14B 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013F2E1 00FF","8013F2E3 00FF","8013F2E5 00FF","8013F2E7 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013F47D 00FF","8013F47F 00FF","8013F481 00FF","8013F483 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013F619 00FF","8013F61B 00FF","8013F61D 00FF","8013F61F 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013F14D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013F2E9 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013F485 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013F621 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013F14F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013F2EB 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013F487 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013F623 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113F11C ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113F2B8 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113F454 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113F5F0 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113F11C FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113F2B8 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113F454 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113F5F0 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8013F123 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113F2BE ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113F45A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113F5F6 ????"],"options":{"Off":"0000","On":"03FF"}}},"964ADD0B-B29213DB-C:4A":{"Access All In-Game Cheats":{"note":"Pause Gameplay To Access","data":["81157E46 000F","81157E56 FFFF"],"options":null},"Access All Navigation Cards":{"note":"","data":["80157E9B 0005"],"options":null},"Access Secret Worlds":{"note":"","data":["81152946 0064"],"options":null},"Infinite Lives":{"note":"","data":["81157EAE 0063"],"options":null},"Max \u0026 Total Gold":{"note":"","data":["80157E4B 0063","80157E4F 0063"],"options":null}},"96747EB4-104BB243-C:4A":{"All levels Complete":{"note":"This activate's solo missions, give all medals on solo missions, activate cheats, activate cinemas, and who knows what else. I just don't Have\\the time to identify these codes. I know that some of this is creditted to Zap2. I don't Have\\the time to cut those codes out.","data":["50003201 0000","800A2940 0001","50003201 0000","800A2972 0001","50003201 0000","800A29A4 0001"],"options":null},"Have All Weapons\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80206B60 0007","801EDB60 0007","801D4B60 0007"],"options":null},"Have All Weapons\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["802087D0 0007","801EF7D0 0007","801D67D0 0007"],"options":null},"Infinite Ammo\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["802062EF 00FF","801ED2EF 00FF","801D42EF 00FF","80205B4B 00FF","801ECB4B 00FF","801D3B4B 00FF"],"options":null},"Infinite Ammo\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80207F5F 00FF","801EEF5F 00FF","801D5F5F 00FF","802077BB 00FF","801EE7BB 00FF","801D57BB 00FF"],"options":null},"Infinite Health\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["812053CC 3F80","811EC3CC 3F80","811D33CC 3F80"],"options":null},"Infinite Health\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8120703C 3F80","811EE03C 3F80","811D503C 3F80"],"options":null},"Infinite Shield\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["812053E0 3F80","811E35A0 3F80","811CA5A0 3F80"],"options":null},"Infinite Shield\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["811FE210 3F80","811E5210 3F80","811CC210 3F80"],"options":null}},"979B263E-F8470004-C:50":{"Access Gargos Character":{"note":"","data":["80127DC8 0001"],"options":null},"Access In-Game Cheats":{"note":"","data":["801283DC 0006"],"options":null},"Fast Kick \u0026 Punch":{"note":"","data":["801D357E 0010"],"options":null},"Infinite Health":{"note":"","data":["801D3584 0078"],"options":null},"Invincible":{"note":"","data":["801D35D4 000A"],"options":null},"Max Blood":{"note":"","data":["80127D5D 0003"],"options":null},"No Time Limit":{"note":"","data":["80127D5B 0001"],"options":null}},"98DF9DFC-6606C189-C:45":{"Belongings\\Slot 01":{"note":"","data":["80189084 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 02":{"note":"","data":["80189085 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 03":{"note":"","data":["80189086 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 04":{"note":"","data":["80189087 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 05":{"note":"","data":["80189088 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 06":{"note":"","data":["80189089 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 07":{"note":"","data":["8018908A 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 08":{"note":"","data":["8018908B 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Have\\All Pics":{"note":"","data":["8118905A FFFF"],"options":null},"Have\\Max Shipped In Bin!":{"note":"","data":["8023738A FFFF"],"options":null},"Have\\Win Dog Races":{"note":"","data":["801886B0 00FF"],"options":null},"Infinite\\Cake Card Points":{"note":"","data":["80181B10 0063"],"options":null},"Infinite\\Chicken Feed":{"note":"","data":["80237411 005C"],"options":null},"Infinite\\Flower Card Points":{"note":"","data":["802373F0 0063"],"options":null},"Infinite\\Fodder Spout (Sheep And Cows)":{"note":"","data":["81180714 0063"],"options":null},"Infinite\\Horse Stamina":{"note":"","data":["802F5015 0002"],"options":null},"Infinite\\Lumber":{"note":"","data":["81189E50 03E7"],"options":null},"Infinite\\Medals For Horse \u0026 Dog Races":{"note":"","data":["81189B06 270F","81205206 270F"],"options":null},"Infinite\\Money":{"note":"","data":["811FD60E FFFF"],"options":null},"Infinite\\Stamina":{"note":"","data":["80189060 00FF"],"options":null},"Infinite\\Watering Can Uses":{"note":"","data":["8016FBCD 0004"],"options":null},"Item\\Slot 01":{"note":"","data":["8018908E 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 02":{"note":"","data":["8018908F 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 03":{"note":"","data":["80189090 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 04":{"note":"","data":["80189091 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 05":{"note":"","data":["80189092 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 06":{"note":"","data":["80189093 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 07":{"note":"","data":["80189094 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 08":{"note":"","data":["80189095 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 09":{"note":"","data":["80189096 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 10":{"note":"","data":["80189097 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 11":{"note":"","data":["80189098 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 12":{"note":"","data":["80189099 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 13":{"note":"","data":["8018909A 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 14":{"note":"","data":["8018909B 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 15":{"note":"","data":["8018909C 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 16":{"note":"","data":["8018909D 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 17":{"note":"","data":["8018909E 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 18":{"note":"","data":["8018909F 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 19":{"note":"","data":["801890A0 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 20":{"note":"","data":["801890A1 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 21":{"note":"","data":["801890A2 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 22":{"note":"","data":["801890A3 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 23":{"note":"","data":["801890A4 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 24":{"note":"","data":["801890A5 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Make\\Ann Love You":{"note":"","data":["801C3F93 00FF"],"options":null},"Make\\Elli Love You":{"note":"","data":["801C3F92 00FF"],"options":null},"Make\\Karen Love You":{"note":"","data":["801C3F94 00FF"],"options":null},"Make\\Maria Love You":{"note":"","data":["801C3F90 00FF"],"options":null},"Make\\Popuri Love You":{"note":"","data":["801C3F91 00FF"],"options":null},"Tool\\Slot 01":{"note":"","data":["80189075 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 02":{"note":"","data":["80189076 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 03":{"note":"","data":["80189077 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 04":{"note":"","data":["80189078 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 05":{"note":"","data":["80189079 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 06":{"note":"","data":["8018907A 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 07":{"note":"","data":["8018907B 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 08":{"note":"","data":["8018907C 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}}},"98F9F2D0-03D9F09C-C:50":{"Foul score will stay at 0":{"note":"","data":["802EF725 0000"],"options":null},"Have 5 games won":{"note":"","data":["802EF721 0005"],"options":null},"Pot 1 to win Set points to 25 in straight pool":{"note":"","data":["802EF71D 0019"],"options":null},"Score 0 points in shark skins":{"note":"","data":["802EF723 0000"],"options":null}},"99150E18-1266E6A5-C:45":{"1 Million Points":{"note":"","data":["8119054C 000F","8119054E 4240"],"options":null},"Access In-Game Cheat Menu":{"note":"","data":["50001104 0000","800E9DD8 0001"],"options":null},"All Complete\\Bob Burnquist":{"note":"","data":["810E8924 FFFF","810E8926 FFFF","810E8928 FFFF","810E892A FFFF","810E892C FFFF","810E892E FFFF","810E8930 FFFF","810E8932 FFFF"],"options":null},"All Complete\\Tony Hawk":{"note":"","data":["810E8840 FFFF","810E8842 FFFF","810E8844 FFFF","810E8846 FFFF","810E8848 FFFF","810E884A FFFF","810E884C FFFF","810E884E FFFF"],"options":null},"All Gaps\\Hanger":{"note":"","data":["800E9CC5 00FF","810E9CC6 FFFF"],"options":null},"All Gaps\\Marseille":{"note":"","data":["810E9CDC FFFF","810E9CDE FFFF","800E9CE3 000F"],"options":null},"All Gaps\\Philadelphia":{"note":"","data":["810E9D0C FFFF","810E9D0E FFFF","810E9D12 0FFF"],"options":null},"All Gaps\\School II":{"note":"","data":["810E9CD0 FFFF","810E9CD2 FFFF","810E9CD6 0FFF"],"options":null},"All Gaps\\Skatestreet":{"note":"","data":["810E9D00 FFFF","810E9D02 FFFF","800E9D07 000F"],"options":null},"All Gaps\\Venice Beach":{"note":"","data":["810E9CF4 FFFF","810E9CF6 FFFF","810E9CFA 0FFF"],"options":null},"All Tricks Available\\Custom Player 1":{"note":"","data":["810E9454 FFFF","810E9456 FFFF","810E9458 FFFF","810E945A FFFF","810E945C FFFF","810E945E FFFF"],"options":null},"All Tricks Available\\Custom Player 2":{"note":"","data":["810E9538 FFFF","810E953A FFFF","810E953C FFFF","810E953E FFFF","810E9540 FFFF","810E9542 FFFF"],"options":null},"All Tricks Available\\Custom Player 3":{"note":"","data":["810E961C FFFF","810E961E FFFF","810E9620 FFFF","810E9622 FFFF","810E9624 FFFF","810E9626 FFFF"],"options":null},"All Tricks Available\\Custom Player 4":{"note":"","data":["810E9700 FFFF","810E9702 FFFF","810E9704 FFFF","810E9706 FFFF","810E9708 FFFF","810E970A FFFF"],"options":null},"Always Special On Cheat":{"note":"","data":["800E9DEC 0001"],"options":null},"Infinte Time":{"note":"","data":["810E87AA 0000"],"options":null},"Max Cash\\Andrew Reynolds":{"note":"","data":["810E903C 000F","810E903E 423F","810E9040 000F","810E9042 423F"],"options":null},"Max Cash\\Bob Burnquist":{"note":"","data":["810E891C 000F","810E891E 423F","810E8920 000F","810E8922 423F"],"options":null},"Max Cash\\Bucky Lasek":{"note":"","data":["810E8D90 000F","810E8D92 423F","810E8D94 000F","810E8D96 423F"],"options":null},"Max Cash\\Chad Muska":{"note":"","data":["810E8F58 000F","810E8F5A 423F","810E8F5C 000F","810E8F5E 423F"],"options":null},"Max Cash\\Custom Player 1":{"note":"","data":["810E93CC 000F","810E93CE 423F","810E93D0 000F","810E93D2 423F"],"options":null},"Max Cash\\Custom Player 2":{"note":"","data":["810E94B0 000F","810E94B2 423F","810E94B4 000F","810E94B6 423F"],"options":null},"Max Cash\\Custom Player 3":{"note":"","data":["810E9594 000F","810E9596 423F","810E9598 000F","810E959A 423F"],"options":null},"Max Cash\\Custom Player 4":{"note":"","data":["810E9678 000F","810E967A 423F","810E967C 000F","810E967E 423F"],"options":null},"Max Cash\\Elissa Steamer":{"note":"","data":["810E9204 000F","810E9206 423F","810E9208 000F","810E920A 423F"],"options":null},"Max Cash\\Eric Koston":{"note":"","data":["810E8CAC 000F","810E8CAE 423F","810E8CB0 000F","810E8CB2 423F"],"options":null},"Max Cash\\Geoff Rowley":{"note":"","data":["810E9120 000F","810E9122 423F","810E9124 000F","810E9126 423F"],"options":null},"Max Cash\\Jamie Thomas":{"note":"","data":["810E92E8 000F","810E92EA 423F","810E92EC 000F","810E92EE 423F"],"options":null},"Max Cash\\Kareem Campbell":{"note":"","data":["810E8AE4 000F","810E8AE6 423F","810E8AE8 000F","810E8AEA 423F"],"options":null},"Max Cash\\Officer Dick":{"note":"","data":["810E975C 000F","810E975E 423F","810E9760 000F","810E9762 423F"],"options":null},"Max Cash\\Rodney Mullen":{"note":"","data":["810E8E74 000F","810E8E76 423F","810E8E78 000F","810E8E7A 423F"],"options":null},"Max Cash\\Rune Glifberg":{"note":"","data":["810E8BC8 000F","810E8BCA 423F","810E8BCC 000F","810E8BCE 423F"],"options":null},"Max Cash\\Steve Caballero":{"note":"","data":["810E8A00 000F","810E8A02 423F","810E8A04 000F","810E8A06 423F"],"options":null},"Perfect Balance Cheat":{"note":"","data":["800E9DE8 0001"],"options":null},"Tricks Available\\Andrew Reynolds":{"note":"","data":["810E90C4 FFFF","810E90C6 FFFF","810E90C8 FFFF","810E90CA FFFF","810E90CC FFFF","810E90CE FFFF"],"options":null},"Tricks Available\\Bob Burnquist":{"note":"","data":["810E89A4 FFFF","810E89A6 FFFF","810E89A8 FFFF","810E89AA FFFF","810E89AC FFFF","810E89AE FFFF"],"options":null},"Tricks Available\\Chad Muska":{"note":"","data":["810E8FE0 FFFF","810E8FE2 FFFF","810E8FE4 FFFF","810E8FE6 FFFF","810E8FE8 FFFF","810E8FEA FFFF"],"options":null},"Tricks Available\\Elissa Steamer":{"note":"","data":["810E928C FFFF","810E928E FFFF","810E9290 FFFF","810E9292 FFFF","810E9294 FFFF","810E9296 FFFF"],"options":null},"Tricks Available\\Eric Koston":{"note":"","data":["810E8D34 FFFF","810E8D36 FFFF","810E8D38 FFFF","810E8D3A FFFF","810E8D3C FFFF","810E8D3E FFFF"],"options":null},"Tricks Available\\Geoff Rowley":{"note":"","data":["810E91A8 FFFF","810E91AA FFFF","810E91AC FFFF","810E91AE FFFF","810E91B0 FFFF","810E91B2 FFFF"],"options":null},"Tricks Available\\Jamie Thomas":{"note":"","data":["810E9370 FFFF","810E9372 FFFF","810E9374 FFFF","810E9376 FFFF","810E9378 FFFF","810E937A FFFF"],"options":null},"Tricks Available\\Kareem Campbell":{"note":"","data":["810E8B6C FFFF","810E8B6E FFFF","810E8B70 FFFF","810E8B72 FFFF","810E8B74 FFFF","810E8B76 FFFF"],"options":null},"Tricks Available\\Officer Dick":{"note":"","data":["810E97E4 FFFF","810E97E6 FFFF","810E97E8 FFFF","810E97EA FFFF","810E97EC FFFF","810E97EE FFFF"],"options":null},"Tricks Available\\Rodney Mullen":{"note":"","data":["810E8EFC FFFF","810E8EFE FFFF","810E8F00 FFFF","810E8F02 FFFF","810E8F04 FFFF","810E8F06 FFFF"],"options":null},"Tricks Available\\Rune Glifberg":{"note":"","data":["810E8C50 FFFF","810E8C52 FFFF","810E8C54 FFFF","810E8C56 FFFF","810E8C58 FFFF","810E8C5A FFFF"],"options":null},"Tricks Available\\Spider Man":{"note":"","data":["810E99AC FFFF","810E99AE FFFF","810E99B0 FFFF","810E99B2 FFFF","810E99B4 FFFF","810E99B6 FFFF"],"options":null},"Tricks Available\\Steve Caballero":{"note":"","data":["810E8A88 FFFF","810E8A8A FFFF","810E8A8C FFFF","810E8A8E FFFF","810E8A90 FFFF","810E8A92 FFFF"],"options":null},"Tricks Available\\Tony Hawk":{"note":"","data":["810E88C0 FFFF","810E88C2 FFFF","810E88C4 FFFF","810E88C6 FFFF","810E88C8 FFFF","810E88CA FFFF"],"options":null},"Unlock Hoffman Factory \u0026 Skate Heaven":{"note":"","data":["800EA0CB 003F"],"options":null},"Unlock\\Officer Dick":{"note":"","data":["800E9DDC 0001","800F087B 0001"],"options":null},"Unlock\\Spider Man":{"note":"","data":["800E9DD8 0001","800F0B9B 0001"],"options":null}},"99179359-2FE7EBC3-C:50":{"Access All\\Bonus Coins":{"note":"","data":["50000F02 0000","810A6124 0007"],"options":null},"Access All\\Paw Coins":{"note":"","data":["50000F02 0000","810A60E8 03FF"],"options":null},"Access All\\Special Remote Controls":{"note":"","data":["810A60E4 FFFF","810A60E6 FFFF"],"options":null},"Access All\\ordinary Remote Controls":{"note":"","data":["50000F01 0000","800A60A8 000F"],"options":null},"Crazy Tail":{"note":"","data":["8110955E 0001"],"options":null},"Infinite\\Health":{"note":"","data":["810A60C8 0005"],"options":null},"Infinite\\Lives":{"note":"","data":["810A60C6 0064"],"options":null}},"9AB3B50A-BC666105-C:44":{"Access In-Game Cheat Menu":{"note":"To Access Pause Game Play. This gives you access to In-game Cheats like God Mode,Level Select,All Items Etc","data":["81137CD6 07FF","80137DB3 0005"],"options":null},"Boots Of Speed Select\\Player 1":{"note":"","data":["8113F538 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113F6D4 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113F870 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113FA0C ????"],"options":{"Off":"0000","On":"03FF"}},"Have All\\Armour":{"note":"","data":["8013F491 0019","8013F495 0014","8013F499 0014","8013F49D 0014"],"options":null},"Have All\\Items And Artifacts\\Player 1":{"note":"","data":["8013F4A1 0001","8013F4A3 00FF","8013F4A5 0002","8013F4A7 00FF","8013F4A9 0003","8013F4AB 00FF","8013F4AD 0004","8013F4AF 00FF","8013F4B1 0005","8013F4B3 00FF","8013F4B5 0006","8013F4B7 00FF","8013F4B9 0007","8013F4BB 00FF","8013F4BD 0008","8013F4BF 00FF","8013F4C1 0009","8013F4C3 00FF","8013F4C5 000A","8013F4C7 00FF","8013F4C9 000B","8013F4CB 00FF","8013F4CD 000C","8013F4CF 00FF","8013F4D1 000D","8013F4D3 00FF","8013F4D5 000E","8013F4D7 00FF","8013F4D9 0010","8013F4DB 00FF","8013F4DD 0011","8013F4DF 00FF","8013F4E1 0012","8013F4E3 00FF","8013F4E5 0013","8013F4E7 00FF","8013F4E9 0014","8013F4EB 00FF","8013F4ED 0015","8013F4EF 00FF","8013F4F1 0016","8013F4F3 00FF","8013F4F5 0017","8013F4F7 00FF","8013F4F9 0018","8013F4FB 00FF","8013F4FD 0019","8013F4FF 00FF","8013F501 001A","8013F503 00FF","8013F505 001B","8013F507 00FF","8013F509 001C","8013F50B 00FF","8013F50D 001D","8013F50F 00FF","8013F511 001E","8013F513 00FF","8013F515 001F","8013F517 00FF","8013F519 0020","8013F51B 00FF","8013F529 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113F53C 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113F6D8 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113F874 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113FA10 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013F555 00FF","8013F557 00FF","8013F559 00FF","8013F55B 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013F6F1 00FF","8013F6F3 00FF","8013F6F5 00FF","8013F6F7 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013F88D 00FF","8013F88F 00FF","8013F891 00FF","8013F893 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013FA29 00FF","8013FA2B 00FF","8013FA2D 00FF","8013FA2F 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013F55D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013F2E9 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013F485 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013F621 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013F55F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013F2EB 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013F487 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013F623 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113F52C ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113F6C8 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113F864 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113FA00 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113F52C FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113F2B8 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113F454 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113F5F0 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8113F533 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113F6CE ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113F86A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113FA06 ????"],"options":{"Off":"0000","On":"03FF"}}},"9B500E8E-E90550B3-C:50":{"Have All Guns In Chest":{"note":"","data":["50000E04 0100","810E59F4 05FF"],"options":null},"Have All Main Items In Chest":{"note":"If you want items that are not listed in the Chest, then just use the Have Item On Slot Select code to have what you desire.","data":["810E5A2C 17FF","810E5A30 1EFF","810E5A34 1FFF","810E5A38 23FF","50000404 0100","810E5A3C 25FF","810E5A4C 2AFF","810E5A50 2BFF","50000304 0100","810E5A54 2EFF","50000F04 0100","810E5A60 32FF","810E5A9C 43FF","50000504 0100","810E5AA0 47FF","50000404 0100","810E5AB4 53FF","50000C04 0100","810E5AC4 58FF"],"options":null},"Have\\Fine Condition Always":{"note":"","data":["810DDEE4 0000"],"options":null},"Have\\Item On Slot Select\\Slot 01":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59C8 00??","800E59C9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 02":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59CC 00??","800E59CD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 03":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59D0 00??","800E59D1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 04":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59D4 00??","800E59D5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 05":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59D8 00??","800E59D9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 06":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59DC 00??","800E59DD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 07":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59E0 00??","800E59E1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 08":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59E4 00??","800E59E5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 09":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59E8 00??","800E59E9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 10":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59EC 00??","800E59ED 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Infinite\\Health":{"note":"","data":["810DDE22 00C8"],"options":null},"Infinite\\Time":{"note":"","data":["800E57BF 0010"],"options":null},"Play As":{"note":"This allows you to select what character you wish to play as. Just slect on load and select as normal at the menu and when in game you will be the character of your choice","data":["810DDC38 ????"],"options":{"Ada (can crash the game)":"0E80","Cheryl":"0F80","Claire Original":"0380","Claire as Biker":"0980","Claire without jacket":"0780","Claires body Leons outfit":"0B80","Hunk (can crash the game)":"0C80","Leon Original":"0280","Leon Wounded":"0680","Leon as Biker":"0A80","Leon as Stars":"0880","To Fu":"0D80"}},"Play Extra Mission":{"note":"This allows you to select what extra mission you wish to play. Just slect on load and carry on as normal at the menu and when in game you will be the character of your choice Do not use at the same time as [Resident Evil 2 Mode]","data":["810DDBEE 00??"],"options":{"The 4th Survior":"48","To-Fu":"49"}},"Quick Chest Access":{"note":"With this code, all you have to do to access the chest, is hold L and Press Start.","data":["D1014FA4 0020","81122598 0100"],"options":null},"Quick Save Access":{"note":"(1 Anytime, anywhere, press Z and B at the same time. You'll get the standard typewriter text: \"It's an old typewriter. You can save your progress with this.\" Note that you must, of course, have an ink ribbon to save. 2) Choose \"Yes\" and you'll be able to save normally. Instead of the location name, your save file will say \"Scenario 1st\" or \"Scenario 2nd.\" 3) When you load your save file, you'll have to skip through the intro, but when the game loads up you'll be exactly where you saved!","data":["D1014FA4 6000","810E5428 8007","D1014FA4 6000","810E542A 0E30"],"options":null},"[Saves Always 0]":{"note":"No matter how many saves you do ithis makes the game think you Have\\not saved.","data":["810E8B50 0000"],"options":null}},"9C40016E-63BFFE91-C:4A":{"All Bonus Buildings":{"note":"","data":["8123D22A 0007","8123D21C 000F","81155BF8 03FF","81157A6C 0004"],"options":null},"Infinite Money":{"note":"","data":["8123D190 05F5","8123D192 E0FF"],"options":null},"Unlock All Scenarios":{"note":"","data":["810DD938 FFFF"],"options":null}},"9C663069-80F24A80-C:50":{"Lower Left Character\\Coin Options":{"note":"","data":["800FFB09 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800DDD1A 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800FFB0C 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["800FFB39 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800DDD5E 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800FFB3C 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Mini Game\\Max 99 Coins":{"note":"","data":["800FFF61 0063"],"options":null},"Mini Game\\Unlimited 99 lives":{"note":"","data":["800FFF58 0063"],"options":null},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["800FFAA9 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800DDC92 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800FFAAC 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["800FFAD9 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800DDCD6 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800FFADC 00??"],"options":{"0 Stars":"00","99 Stars":"64"}}},"9C7318D2-24AE0DC1-C:4A":{"Access All\\Cars":{"note":"","data":["8002CA97 000B"],"options":null},"Access All\\Difficulties":{"note":"","data":["8002CA9B 0004"],"options":null},"Access All\\Multiplayer Levels":{"note":"","data":["50000901 0000","8002CAA0 0001"],"options":null},"Access All\\Tracks":{"note":"","data":["8002CA93 0006"],"options":null},"Access In-Game Cheats":{"note":"","data":["50001301 0000","8002CAA8 0001"],"options":null},"Damage Select":{"note":"","data":["8002C833 00??"],"options":{"Double":"02","Half":"01","Normal":"00","Triple":"03"}},"Health Select":{"note":"","data":["8002C81F 00??"],"options":{"Bad Only":"02","Good Only":"01","Normal":"00","Off":"03"}},"Infinite Continues":{"note":"","data":["8002C6F7 0064"],"options":null},"Low Timer":{"note":"","data":["81025874 3001"],"options":null},"Power-Up Select":{"note":"","data":["8002C81B 00??"],"options":{"?":"05","Health":"06","Invincible":"07","Mines":"01","Nitros":"04","Normal":"00","Off":"08","Rockets":"02","Stealer":"03"}},"Radar":{"note":"","data":["8002C82F 00??"],"options":{"Off":"01","On":"00"}},"Speed units\\Kph or Mph":{"note":"","data":["81025908 ????"],"options":{"Kph":"0100","Mph":"0001"}},"View Mode Select?":{"note":"","data":["8002C82B 00??"],"options":{"Fisheye":"03","Flip":"02","Fog":"01","Normal":"00"}},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\01 Coventry Cove":{"note":"","data":["8036B243 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\02 Mount Mayhem":{"note":"","data":["80351283 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\03 Inferno Isle":{"note":"","data":["80364153 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\04 Sunset Sands":{"note":"","data":["8034242B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\05 Metro Madness":{"note":"","data":["8035CAFB 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\06 Wicked Woods":{"note":"","data":["80354A33 0064"],"options":null}},"9C8FB2FA-9B84A09B-C:45":{"Have All Pikachus Magnemites":{"note":"","data":["801183BC 0000","801183BD 0000","801183BE 0000"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 1":{"note":"","data":["81285A18 03E7"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 2":{"note":"","data":["81286438 03E7"],"options":null},"Pokemon\\Inf Spells\\Player 1":{"note":"","data":["810AE580 FFFF","810AE582 FFFF","810AE5D4 FFFF","810AE5D6 FFFF","810AE628 FFFF","810AE62A FFFF"],"options":null},"Pokemon\\Inf Spells\\Player 2":{"note":"","data":["810AE79C FFFF","810AE79E FFFF","810AE7F0 FFFF","810AE7F2 FFFF","810AE844 FFFF","810AE846 FFFF"],"options":null},"Pokemon\\Max HP\\Player 1":{"note":"","data":["810AE586 03E7","810AE5DA 03E7","810AE62E 03E7"],"options":null},"Pokemon\\Max HP\\Player 2":{"note":"","data":["810AE7A2 03E7","810AE7F6 03E7","810AE84A 03E7"],"options":null},"Ultimate Code":{"note":"what's so ultimate about this code is it raises your Pokemon to its full potential. Even at Level 100, most Pokemon still have a way to go to raise their stats to the max. But with this code, you can instantly boost any Pokemon to its greatest potential!!!","data":["81171F3C FF01","81171F3E FF01","81171F40 FF01","81171F42 FF01","81171F44 FF01"],"options":null}},"9C961069-F5EA488D-C:4A":{"Player 1 Health":{"note":"If you select the Low option, It will give your opponent an easy win over over you","data":["8110CF68 ????"],"options":{"Low":"4220","Max":"0000"}},"Player 2 Health":{"note":"If you select the Low option, It will give your opponent an easy win over over you","data":["8110CF6C ????"],"options":{"Low":"4220","Max":"0000"}}},"9CAB6AEA-87C61C00-C:45":{"Boots Of Speed Select\\Player 1":{"note":"","data":["8113DB58 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113DCF4 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113DE90 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113E02C ????"],"options":{"Off":"0000","On":"03FF"}},"Enable Cheat Menu":{"note":"","data":["80136773 0005","81136696 FFFF"],"options":null},"Have All\\Armour":{"note":"","data":["8013DAB1 0019","8013DAB5 0014","8013DAB9 0014","8013DABD 0014"],"options":null},"Have All\\Items And Artifacts":{"note":"","data":["8013DAC1 0001","8013DAC3 00FF","8013DAC5 0002","8013DAC7 00FF","8013DAC9 0003","8013DACB 00FF","8013DACD 0004","8013DACF 00FF","8013DAD1 0005","8013DAD3 00FF","8013DAD5 0006","8013DAD7 00FF","8013DAD9 0007","8013DADB 00FF","8013DADD 0008","8013DADF 00FF","8013DAE1 0009","8013DAE3 00FF","8013DAE5 000A","8013DAE7 00FF","8013DAE9 000B","8013DAEB 00FF","8013DAED 000C","8013DAEF 00FF","8013DAF1 000D","8013DAF3 00FF","8013DAF5 000E","8013DAF7 00FF","8013DAF9 000F","8013DAFB 00FF","8013DAFD 0010","8013DAFF 00FF","8013DB01 0011","8013DB03 00FF","8013DB05 0012","8013DB07 00FF","8013DB09 0013","8013DB0B 00FF","8013DB0D 0014","8013DB0F 00FF","8013DB11 0015","8013DB13 00FF","8013DB15 0016","8013DB17 00FF","8013DB19 0017","8013DB1B 00FF","8013DB1D 0018","8013DB1F 00FF","8013DB21 0019","8013DB23 00FF","8013DB25 001B","8013DB27 00FF","8013DB29 001C","8013DB2B 00FF","8013DB2D 001D","8013DB2F 00FF","8013DB31 001E","8013DB33 00FF","8013DB35 001F","8013DB37 00FF","8013DB39 0020","8013DB3B 00FF","8013DB49 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113DB5C 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113DCF8 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113DE94 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113E030 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013DB75 00FF","8013DB79 00FF","8013DB7B 00FF","8013DB77 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013DD11 00FF","8013DD13 00FF","8013DD15 00FF","8013DD17 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013DEAD 00FF","8013DEAF 00FF","8013DEB1 00FF","8013DEB3 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013E049 00FF","8013E04B 00FF","8013E04D 00FF","8013E04F 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013DB7D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013DD19 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013DEB5 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013E051 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013DB7F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013DD1B 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013DEB7 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013E053 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113DB4C ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113DCE8 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113DE84 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113E020 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113DB4C FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113DCE8 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113DE84 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113E020 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8113DB53 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113DCEE ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113DE8A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113E026 ????"],"options":{"Off":"0000","On":"03FF"}}},"9CCE5B1D-6351E283-C:00":{"Invaders\\Have Infinite 99 Credits":{"note":"","data":["802C40AB 0099"],"options":null},"Invaders\\Have Infinite Max Lives":{"note":"","data":["802C41BF 0008"],"options":null}},"9CE02E22-206EF1B0-C:4A":{"1 Lap To Race":{"note":"In Single and Chapionship Modes use the Laps In Race Cheat or use the in game setting to choose how many laps you want per race and them use this cheat and amount of Laps to have only have 1 left if needed.","data":["80098A5D 00??"],"options":{"12 of 12 Laps":"0C","15 of 15 Laps":"0F","18 of 18 Laps":"12","21 of 21 Laps":"15","24 of 24 Laps":"18","27 of 27 Laps":"1B","3 of 3 Laps":"03","30 of 30 Laps":"1E","6 of 6 Laps":"06","9 of 9 Laps":"09"}},"Always 1st Place":{"note":"","data":["81098A58 0001"],"options":null},"Car Select":{"note":"","data":["800C50B1 00??"],"options":{"Car 1":"00","Car 10":"09","Car 11":"0A","Car 12":"0B","Car 13":"0C","Car 14":"0D","Car 15":"0E","Car 16":"0F","Car 17":"10","Car 18":"11","Car 2":"01","Car 3":"02","Car 4":"03","Car 5":"04","Car 6":"05","Car 7":"06","Car 8":"07","Car 9":"08"}},"Freeze\\Lap Timer":{"note":"Single and Chapionship Race Modes","data":["800967E5 0000","800967E7 0000"],"options":null},"Freeze\\Pit Timer":{"note":"Single and Chapionship Race Modes","data":["800968A5 0000","800968A7 0000"],"options":null},"Freeze\\Timer Challenge Timer":{"note":"Timer Challenge","data":["800C4F87 0050"],"options":null},"Laps\\In Race\\Chapionship Race Mode":{"note":"","data":["800C4ED3 00??"],"options":{"12 Laps In Race":"0C","15 Laps In Race":"0F","18 Laps In Race":"12","21 Laps In Race":"15","24 Laps In Race":"18","27 Laps In Race":"1B","3 Laps In Race":"03","30 Laps In Race":"1E","6 Laps In Race":"06","9 Laps In Race":"09"}},"Laps\\In Race\\Single Race Mode":{"note":"","data":["800C4ED1 00??"],"options":{"12 Laps In Race":"0C","15 Laps In Race":"0F","18 Laps In Race":"12","21 Laps In Race":"15","24 Laps In Race":"18","27 Laps In Race":"1B","3 Laps In Race":"03","30 Laps In Race":"1E","6 Laps In Race":"06","9 Laps In Race":"09"}},"Pit Stops\\Championship":{"note":"","data":["800C4F13 00??"],"options":{"Off":"00","On":"01"}},"Pit Stops\\Single Race Mode":{"note":"","data":["800C4F11 00??"],"options":{"Off":"00","On":"01"}},"Track Direction\\Championship":{"note":"","data":["800C4EF3 00??"],"options":{"Normal":"00","Reverse":"01"}},"Weather\\Championship":{"note":"","data":["800C4F33 00??"],"options":{"Dry":"00","Night":"03","Wet":"01"}},"Weather\\Single Race Mode":{"note":"","data":["800C4F31 00??"],"options":{"Dry":"00","Night":"03","Wet":"01"}}},"9D7E3C4B-E60F4A6C-C:4A":{"Have All Weapons":{"note":"","data":["811ED1E2 FFFF"],"options":null},"Infinite\\Ammo (All Weapons)":{"note":"","data":["8125E330 A05B"],"options":null},"Infinite\\Armor":{"note":"","data":["801ED273 0064"],"options":null},"Infinite\\Experience":{"note":"","data":["801ED253 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["801ED251 0064"],"options":null},"Max\\Acro":{"note":"","data":["801ED25B 0007"],"options":null},"Max\\Attack":{"note":"","data":["801ED257 0007"],"options":null},"Max\\Power":{"note":"","data":["801ED25D 0007"],"options":null},"Max\\Speed":{"note":"","data":["801ED259 0007"],"options":null},"Max\\Vitality":{"note":"","data":["801ED255 0007"],"options":null}},"9E330C01-8C0314BA-C:45":{"Enable Battle Mode And Levels":{"note":"","data":["8008ED6E 0012"],"options":null},"GS Button For 255 Spare0 Missiles":{"note":"","data":["8814E648 00FF"],"options":null},"Gore Mode":{"note":"","data":["8008ED67 0012"],"options":null},"Infinite Lives":{"note":"","data":["8004013C 0005"],"options":null},"Infinite Shields":{"note":"","data":["D014E5E2 0011","8114E5E0 1000"],"options":null}},"9E8FCDFA-49F5652B-C:45":{"Player 1\\1-Hit Death":{"note":"","data":["D01D3484 0078","801D3484 0001"],"options":null},"Player 1\\Fast\\Jump Walk":{"note":"","data":["801D347C 0001"],"options":null},"Player 1\\Fast\\Punch Kick":{"note":"","data":["801D347E 0010"],"options":null},"Player 1\\Fight Gargos Immediately":{"note":"","data":["8012834B 000A"],"options":null},"Player 1\\Fulgore\\Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3478 0020","801D3479 0090","801D34C5 0092","801D3527 005E"],"options":null},"Player 1\\Fulgore\\Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3478 0023","801D3479 00F0","801D34C5 0080","801D3527 00AF"],"options":null},"Player 1\\Infinite Energy":{"note":"","data":["801D3484 0069"],"options":null},"Player 1\\Play As":{"note":"","data":["802C8CB8 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 1\\Slow Jump Walk":{"note":"","data":["801D347D 0050"],"options":null},"Player 1\\Spinal Always Has All Skulls":{"note":"","data":["801D3523 0006"],"options":null},"Player 1\\Undefeated Players Scroll By Quickly":{"note":"","data":["802C8CE8 0007"],"options":null},"Player 1\\Untouchable":{"note":"","data":["801D34D4 000A"],"options":null},"Player 1\\Wins Score":{"note":"","data":["8012830A 00FF"],"options":null},"Player 2\\Fast\\Jump Walk":{"note":"","data":["801D357C 0001"],"options":null},"Player 2\\Fast\\Punch Kick":{"note":"","data":["801D357E 0010"],"options":null},"Player 2\\Fulgore Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3578 0020","801D3579 0090","801D35C5 0092","801D3527 005E"],"options":null},"Player 2\\Fulgore Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3578 0023","801D3579 00F0","801D35C5 0080","801D3527 00AF"],"options":null},"Player 2\\Infinite Energy":{"note":"","data":["801D3584 0078"],"options":null},"Player 2\\Play As":{"note":"","data":["8004EA9D 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 2\\Slow\\Jump Walk":{"note":"","data":["801D357D 0050"],"options":null},"Player 2\\Slow\\Punch Kick":{"note":"","data":["801D357F 0050"],"options":null},"Player 2\\Spinal Always Has All Skulls":{"note":"","data":["801D3623 0006"],"options":null},"Player 2\\Untouchable":{"note":"","data":["801D34D5 000A"],"options":null},"Unlock All Options":{"note":"","data":["8012834C 0006"],"options":null}},"9E8FE2BA-8B270770-C:45":{"Player 1\\1-Hit Death":{"note":"","data":["D01D3484 0078","801D3484 0001"],"options":null},"Player 1\\Fast\\Jump Walk":{"note":"","data":["801D347C 0001"],"options":null},"Player 1\\Fast\\Punch Kick":{"note":"","data":["801D347E 0010"],"options":null},"Player 1\\Fight Gargos Immediately":{"note":"","data":["8012834B 000A"],"options":null},"Player 1\\Fulgore\\Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3478 0020","801D3479 0090","801D34C5 0092","801D3527 005E"],"options":null},"Player 1\\Fulgore\\Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3478 0023","801D3479 00F0","801D34C5 0080","801D3527 00AF"],"options":null},"Player 1\\Infinite Energy":{"note":"","data":["801D3484 0069"],"options":null},"Player 1\\Play As":{"note":"","data":["802C8CB8 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 1\\Slow Jump Walk":{"note":"","data":["801D347D 0050"],"options":null},"Player 1\\Spinal Always Has All Skulls":{"note":"","data":["801D3523 0006"],"options":null},"Player 1\\Undefeated Players Scroll By Quickly":{"note":"","data":["802C8CE8 0007"],"options":null},"Player 1\\Untouchable":{"note":"","data":["801D34D4 000A"],"options":null},"Player 1\\Wins Score":{"note":"","data":["8012830A 00FF"],"options":null},"Player 2\\Fast\\Jump Walk":{"note":"","data":["801D357C 0001"],"options":null},"Player 2\\Fast\\Punch Kick":{"note":"","data":["801D357E 0010"],"options":null},"Player 2\\Fulgore Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3578 0020","801D3579 0090","801D35C5 0092","801D3527 005E"],"options":null},"Player 2\\Fulgore Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3578 0023","801D3579 00F0","801D35C5 0080","801D3527 00AF"],"options":null},"Player 2\\Infinite Energy":{"note":"","data":["801D3584 0078"],"options":null},"Player 2\\Play As":{"note":"","data":["8004EA9D 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 2\\Slow\\Jump Walk":{"note":"","data":["801D357D 0050"],"options":null},"Player 2\\Slow\\Punch Kick":{"note":"","data":["801D357F 0050"],"options":null},"Player 2\\Spinal Always Has All Skulls":{"note":"","data":["801D3623 0006"],"options":null},"Player 2\\Untouchable":{"note":"","data":["801D34D5 000A"],"options":null},"Unlock All Options":{"note":"","data":["8012834C 0006"],"options":null}},"9EA95858-AF72B618-C:45":{"Infinite Coins Main Menu":{"note":"","data":["810F8CD2 FFFF"],"options":null},"Lower Left Char\\Item On Pick-Up":{"note":"","data":["800FD341 00??"],"options":{"Boo Bell":"07","Bowser Bomb":"03","Bowser Suit":"08","Dueling Glove":"04","Golden Mushroom":"06","Magic Lamp":"09","Mushroom":"00","Plunder Chest":"02","Skeleton Key":"01","Warp Block":"05"}},"Lower Left Char\\Rolls 10":{"note":"","data":["800DF55D 000A"],"options":null},"Lower Right Char\\Item On Pick-Up":{"note":"","data":["800FD375 00??"],"options":{"Boo Bell":"07","Bowser Bomb":"03","Bowser Suit":"08","Dueling Glove":"04","Golden Mushroom":"06","Magic Lamp":"09","Mushroom":"00","Plunder Chest":"02","Skeleton Key":"01","Warp Block":"05"}},"Lower Right Char\\Rolls 10":{"note":"","data":["800DF5A9 000A"],"options":null},"Upper Left Char\\Item On Pick-Up":{"note":"","data":["800FD2D9 00??"],"options":{"Boo Bell":"07","Bowser Bomb":"03","Bowser Suit":"08","Dueling Glove":"04","Golden Mushroom":"06","Magic Lamp":"09","Mushroom":"00","Plunder Chest":"02","Skeleton Key":"01","Warp Block":"05"}},"Upper Left Char\\Rolls 10":{"note":"","data":["800DF4C5 000A"],"options":null},"Upper Right Char\\Item On Pick-Up":{"note":"","data":["800DF30D 00??"],"options":{"Boo Bell":"07","Bowser Bomb":"03","Bowser Suit":"08","Dueling Glove":"04","Golden Mushroom":"06","Magic Lamp":"09","Mushroom":"00","Plunder Chest":"02","Skeleton Key":"01","Warp Block":"05"}},"Upper Right Char\\Rolls 10":{"note":"","data":["800DF511 000A"],"options":null}},"9F1ECAF0-EEC48A0E-C:4A":{"Infinite Energy\\Player 1":{"note":"","data":["800AC339 00??"],"options":{"Max":"40","None":"00"}},"Infinite Energy\\Player 2":{"note":"","data":["800AC429 00??"],"options":{"Max":"3F","None":"00"}},"Infinite Match Time":{"note":"","data":["800AB433 0000"],"options":null},"Super Attacks\\Player 1":{"note":"","data":["800AC33D 00??"],"options":{"3":"03","None":"00"}},"Super Attacks\\Player 2":{"note":"","data":["800AC42D 00??"],"options":{"3":"03","None":"00"}},"Unlock Extras":{"note":"","data":["800ACA05 00FF","800ACA07 00FF"],"options":null}},"9F5BF79C-D2FE08A0-C:45":{"Debug Mode":{"note":"","data":["8006C4C2 0001"],"options":null},"Have\\All Keys":{"note":"","data":["801639E9 000F"],"options":null},"Have\\All Weapons":{"note":"","data":["801639EB 007F"],"options":null},"Have\\Quad Damage":{"note":"","data":["8116397C 42C8"],"options":null},"Have\\Ring of Shadows":{"note":"","data":["811639E8 ????"],"options":{"Off":"0000","On":"42C8"}},"Infinite\\Ammo":{"note":"","data":["50000402 0000","80163A2D 0064","50000402 0000","81163A2C 03E7"],"options":null},"Infinite\\Armor":{"note":"","data":["81163944 42C8"],"options":null},"Infinite\\Bio Suit":{"note":"","data":["81163980 42C8"],"options":null},"Infinite\\Health":{"note":"","data":["81163930 42C8"],"options":null},"Multi\\Have All Weapons\\Player 1":{"note":"","data":["8016634B 007F"],"options":null},"Multi\\Have All Weapons\\Player 2":{"note":"","data":["8016661B 007F"],"options":null},"Multi\\Infinite Ammo\\Player 1":{"note":"","data":["50000402 0000","8116638C 03E7"],"options":null},"Multi\\Infinite Ammo\\Player 2":{"note":"","data":["50000402 0000","8116665C 03E7"],"options":null},"Multi\\Infinite Armor\\Player 1":{"note":"","data":["811662A4 42C8"],"options":null},"Multi\\Infinite Armor\\Player 2":{"note":"","data":["81166574 42C8"],"options":null},"Multi\\Infinite Bio Suit\\Player 1":{"note":"","data":["811662E0 42C8"],"options":null},"Multi\\Infinite Bio Suit\\Player 2":{"note":"","data":["811665B0 42C8"],"options":null},"Multi\\Infinite Health\\Player 1":{"note":"","data":["81166290 42C8"],"options":null},"Multi\\Infinite Health\\Player 2":{"note":"","data":["81166560 42C8"],"options":null},"Rapid Fire":{"note":"","data":["D00CA9E0 0020","8016396D 0001"],"options":null}},"9F8926A5-0587B409-C:50":{"10x Trick Multiplier":{"note":"","data":["800D60FE 0001"],"options":null},"Access All gold medals":{"note":"Also opens San Francisco \u0026 Downtown Minneapolis","data":["50000C14 0000","800DEA03 00FF","50000C14 0000","800DEA06 00FF","50000C14 0000","800DEA08 00FF"],"options":null},"Access all Levels,tapes,boards \u0026 Officer Dick":{"note":"","data":["50000C14 0000","800DE9FC 001E"],"options":null},"Max\\Air":{"note":"","data":["800D62DC 00FF"],"options":null},"Max\\Balance":{"note":"","data":["800D62DF 00FF"],"options":null},"Max\\Speed":{"note":"","data":["800DE83A 0001"],"options":null},"Max\\Turning":{"note":"","data":["800D6220 00FF"],"options":null}},"9FD375F8-45F32DC8-C:50":{"Access All Ticket Switches \u0026 Vehicles":{"note":"","data":["800A5E1F 0001","50002004 0000","810A5D70 FFFF"],"options":null},"Activate All In-Game Cheats":{"note":"With this code on, all rocket's abilities are now max","data":["810A6846 F5FF"],"options":null},"Infinite \u0026 Max Health":{"note":"","data":["8109FB82 000C","8109FB84 000A"],"options":null}},"9FE6162D-E97E4037-C:4A":{"All 52 Gold Gems Collected":{"note":"","data":["8016EA30 0003","8016EA31 007E","8016EA32 00FF","8016EA33 00EF","8016EA34 00FF","8016EA35 007F","8016EA36 00FF","8016EA37 00FC"],"options":null},"All Stages \u0026 Chapters Unlocked":{"note":"","data":["8016EA38 003B"],"options":null},"Infinite\\Health\\Marina":{"note":"","data":["810ECAD0 03E8"],"options":null},"Infinite\\Health\\Teran":{"note":"","data":["810F1750 03E8"],"options":null},"Infinite\\Max Red Gems":{"note":"","data":["81175056 270F"],"options":null},"Level Select":{"note":"To access this anytime during game, press L+R+Z to enable the menu. Press D-Pad Up / Down to move through the menu, D-Pad Left / Right to change level digits and then press Start to enter level. Don not do this whhile in pause mode (Start Button Pause) or the game will freeze.","data":["D10BC208 2030","800BC201 0004"],"options":null}},"9FF69D4F-195F0059-C:50":{"Easy Difficulty level":{"note":"","data":["800AD243 0000"],"options":null},"Fast Run":{"note":"","data":["8009B14F 0003"],"options":null},"Infinite Lives":{"note":"","data":["8109B0EE 03E7","810AD24E 03E7"],"options":null},"Level select":{"note":"Set Up In Menu","data":["81076FB6 6F74"],"options":null},"Rapid fire":{"note":"","data":["8009B15F 0003"],"options":null},"Speed level 1 Slow":{"note":"","data":["800AD247 0000"],"options":null}},"A03CF036-BCC1C5D2-C:50":{"Don't Hurt Mario\\Falling":{"note":"Press L to levitate \u0026 Let go to land","data":["8036CF6C 00E8","8136CEB8 FFFF"],"options":null},"Don't Hurt Mario\\Monsters":{"note":"","data":["80309457 0001"],"options":null},"Funny Mario Options\\Mario Walks On Water":{"note":"","data":["802A6204 0800","802A6206 0024","81000090 3C04","81000092 8034","81000094 8484","81000096 B1E6","81000098 4484","8100009A 3000","810000A0 4680","810000A2 3120","810000A4 4604","810000A6 903C","810000AC 4500","810000AE 0002","810000B4 4600","810000B6 2486","810000B8 080E","810000BA 05DB","810000BC E712"],"options":null},"Funny Mario Options\\Mario's Cap\\Off \u0026 in His Hand":{"note":"Here you can Choose Options with Mario with His Cap off \u0026 in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["80309437 00??"],"options":{"Cap In Hand":"20","Flying Mario Cap In Hand":"28","Invisible Mario Cap In Hand":"22","Invisible Metal Mario Cap In Hand":"26","Metal Mario Cap In Hand":"24"}},"Funny Mario Options\\Mario's Cap\\On \u0026 An Extra in His Hand":{"note":"Here you can Choose Options with Mario with His Cap on \u0026 An Extra in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["80309437 00??"],"options":{"Cap In Hand":"30","Flying Mario Cap In Hand":"38","Invisible Mario Cap In Hand":"32","Invisible Metal Mario Cap In Hand":"36","Metal Mario Cap In Hand":"34"}},"Have\\Debug Mode":{"note":"","data":["A02F9748 00??"],"options":{"Off":"00","On":"01"}},"Have\\Level Select":{"note":"","data":["A02F973C 0001"],"options":null},"Infinite\\Energy \u0026 Breath":{"note":"","data":["803094DE 0008"],"options":null},"Infinite\\Lives":{"note":"","data":["803094DD 0064"],"options":null},"Mario's Cap\\Off Options":{"note":"Here you can Choose Options with Mario without His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["80309437 00??"],"options":{"Flying Mario":"08","Invisible Flying Mario":"0A","Invisible Mario":"02","Invisible Metal Flying Mario":"0F","Mario No Cap":"01","Metal Flying Mario":"0D","Metal Mario":"04"}},"Mario's Cap\\On Options":{"note":"Here you can Choose Options with Mario with His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["80309437 00??"],"options":{"Flying Mario":"19","Invisible Mario":"12","Invisible Metal Mario":"16","Metal Mario":"15"}},"Press GS For 255 Coins":{"note":"","data":["893094D8 00FF"],"options":null},"[Slot A Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80202F23 0001","80202F0B 00C7","50001101 0000","80202F0C 00FF"],"options":null},"[Slot A Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80202F25 0064"],"options":null},"[Slot A Codes]\\Have All\\key doors unlocked (and mote empty)":{"note":"","data":["80202F0A 007E"],"options":null},"[Slot B Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80202F93 0001","80202F7B 00C7","50001101 0000","80202F7C 00FF"],"options":null},"[Slot B Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80202F95 0064"],"options":null},"[Slot B Codes]\\Have All\\key doors unlocked (and mote empty)":{"note":"","data":["80202F7A 007E"],"options":null},"[Slot C Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80203003 0001","80202FEB 00C7","50001101 0000","80202FEC 00FF"],"options":null},"[Slot C Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80203005 0064"],"options":null},"[Slot C Codes]\\Have All\\key doors unlocked (and mote empty)":{"note":"","data":["80202FEA 007E"],"options":null},"[Slot D Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80203073 0001","8020305B 00C7","50001101 0000","8020305C 00FF"],"options":null},"[Slot D Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80203075 0064"],"options":null},"[Slot D Codes]\\Have All\\key doors unlocked (and mote empty)":{"note":"","data":["8020305A 007E"],"options":null}},"A08D0F77-6F82E38C-C:45":{"(Tap L Twice) To Skip Intro":{"note":"On game start up, as soon as you see the N64 Logo, Tap the L Button twice letting go eachtime.","data":["D00A6289 0020","800A679F 0024"],"options":null},"Access Multiplayer mode setup menu":{"note":"Enables bypassing the lock by pressing Left on the D-Pad to access character select on the only locked map in Deathmatch: Temple.","data":["D00D1054 0001","800D0B60 0002"],"options":null},"Bypass locked menu":{"note":"","data":["800D0BD3 00??"],"options":{"Chapters":"02","Options":"01"}},"Enable Unused Cheats\\BAPHOMETSVAN":{"note":"Unlock cavemen in multiplayer.","data":["800DE623 0080"],"options":null},"Enable Unused Cheats\\BEEFCURTAINS":{"note":"Unlock zombies in multiplayer.","data":["800DE622 0001"],"options":null},"Enable Unused Cheats\\BEELZEBUBSBUM":{"note":"\"Hitler\" Easter egg.","data":["800DE623 0004"],"options":null},"Enable Unused Cheats\\BILLYMILLROUNDABOUT":{"note":"Unlock Gregg in multiplayer.","data":["800DE621 0002"],"options":null},"Enable Unused Cheats\\BOVRILBULLETHOLE":{"note":"Conker with caveman afro.","data":["800DE622 0002"],"options":null},"Enable Unused Cheats\\DRACULASTEABAGS":{"note":"Conker with caveman mohawk.","data":["800DE622 0004"],"options":null},"Enable Unused Cheats\\DUTCHOVENS":{"note":"Conker with caveman spiky hair.","data":["800DE622 0008"],"options":null},"Enable Unused Cheats\\EASTEREGGSRUS":{"note":"Unlock Neo Conker in multiplayer.","data":["800DE623 0010"],"options":null},"Enable Unused Cheats\\KOJACKSROLLNECK":{"note":"1 Player Multiplayer Resolution Option.","data":["800DE622 0010"],"options":null},"Enable Unused Cheats\\NUTBINGCOEDS":{"note":"Unlock weasel guard in multiplayer.","data":["800DE623 0040"],"options":null},"Enable Unused Cheats\\RUSTYSHERIFFSBADGE":{"note":"Unlock Squirrel Sergeant and Tediz Leader in multiplayer.","data":["800DE621 0001"],"options":null},"Enable Unused Cheats\\SPUNKJOCKEY":{"note":"Slow motion kills with katana/chainsaw.","data":["800DE623 0008"],"options":null},"Enable Unused Cheats\\WELDERSBENCH":{"note":"Unlock all chapters.","data":["800DE622 0080"],"options":null},"Enable Unused Cheats\\WELLYTOP":{"note":"Unlock Conker in multiplayer.","data":["800DE623 0020"],"options":null},"Infinite 99 Lives":{"note":"","data":["800B9B84 0063"],"options":null},"Infinite 99999 Cash":{"note":"","data":["810B9B88 270F"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["800BCFD7 0006"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["800B42CE 0006"],"options":null},"Infinite Health\\Player 3":{"note":"","data":["800B45F2 0006"],"options":null},"Infinite Health\\Player 4":{"note":"","data":["800B4916 0006"],"options":null},"Infinite Oxygen":{"note":"","data":["810B3E9A 0000"],"options":null},"Infinite Time in Multi":{"note":"","data":["810770DA 8C9E"],"options":null},"Map Warp":{"note":"","data":["800A679F 00??"],"options":{"Barn Boys interior - devoid of entities":"01","Barn boys outside, had a funny bug where Conker would hold money forever. Missing a lot of assets.":"0C","Bats tower. Lighting is different(?) Cannot do much since you spawn without the ability to swim underwater. Had a weird bug where all the cutscenes played.":"0B","Battery water helmet room? Can't tell as you can't swim, and you raise up into a warp that crashes the game.":"17","Beach multiplayer, You can fall off and die by exiting the turrets":"2B","Big, big guy boss fight. Map seems to be the same as final.":"0A","Black void":"05","Bluff cutscene area, devoid of anything":"37","Bugga the Knuts arena. Doesn't have much in it. Is the hole normally there?":"14","Bull boss fight - room has all the targets placed all in the middle, and lacks any other objects":"00","Bunker multiplayer, Teddiz symbols changed again":"34","CRASH":"3E","CRASHES GAME":"12","Capture the flag multiplayer. Teddiz symbol was changed.":"30","Causality Dept. Devoid of anything.":"2F","Cheese test room. Lacks textures":"0D","D-Day beach - lacks assets":"04","Don weasel cutscene map":"38","Dupe of above":"20","Experiment boss map, devoid of anything":"23","Fangy Test room.":"0F","First room inside the Tediz base. Devoid of Teddiz":"1B","First room where you encounter Rodent. Devoid of anything, really.":"1C","Fish test room":"03","Great Mighty Poo fight, devoid of anything":"35","Haybot/water raising room. Dying will play all the cutscenes but will crash. Enabling the expansion pack shows weird broken red eye textures":"10","Heist multiplayer map":"1A","Inside Wasps' hive. Devoid of anything.":"27","Inside the Poo Mountain cabin. Can't do much since there's no triggers/ability to escape.":"2C","Inside the Windmill?":"15","Lava race/mugged":"32","Matrix scene, devoid of anything":"36","Mrs catfish, lacks assets":"07","Multiplayer race":"33","N64 Chainsaw cutscene":"21","Outside the bank":"39","Panther King's throne":"18","Rock Solid. Devoid of anything":"31","Room after the bluff. No dinosaurs are present":"19","Second room of Matrix bank":"3A","Spooky Mansion inside":"3C","Spooky mansion outside, devoid of anything":"41","Tank test room":"16","Tanks multiplayer map. Seems to be an asset dump for weird villager sprites.":"24","Teddiz base toxic waste room. Is filled with water for unknown reasons":"28","Teddiz base turret room. Teddiz logo is different, as the turret sprite when using is is displaced (needs console proof this is a graphical error)":"26","Test room. Purpose unknown.":"1F","Uga Buga - cutscene where the caveman gets squashed":"02","Uga Bugga test room":"2A","Uga buga baby dinosaur room. Devoid of anything, and has some missing textures.":"43","Uga buga slime room, has some assets":"42","Upper floor of Teddiz Base UV and scripting issues. Devoid of almost anything":"1E","War plane crash area. Devoid of almost anything":"13","Windy at night":"3B","Windy, Ms bee is not present":"06","another test map":"25","dinosaur multiplayer":"3F","dying first time/meeting Gregg":"22","final boss arena. Exiting will lead you into the vault where you can moonjump and find the Alien in the Matrix vault.":"40","strange maze room. Has a switch, and a random grate.":"11","training":"29","training key room. Can't do much in here.":"2E"}},"Press L To Levitate\\Player 1":{"note":"","data":["D00D1055 0020","810B3E08 4200"],"options":null},"Restore Unused Title Screen":{"note":"Pressing Up on the D-Pad enables a semi-working version of a title screen","data":["D00D1054 0008","800D0D18 0002"],"options":null},"Start with Infinite 9 Granades or Bombs":{"note":"This works for all Players, including player 1 in story mode.","data":["800B9B70 0009"],"options":null}},"A150743E-CF2522CD-C:45":{"Have 99 Coins":{"note":"","data":["810BB10E 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C7A72 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BB0FC 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BB106 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BB10A 0009"],"options":null}},"A1B64A61-D014940B-C:50":{"Access All\\Cars":{"note":"","data":["8002CFF7 000B"],"options":null},"Access All\\Difficulties":{"note":"","data":["8002CFFB 0004"],"options":null},"Access All\\Multiplayer Levels":{"note":"","data":["50000901 0000","8002D000 0001"],"options":null},"Access All\\Tracks":{"note":"","data":["8002CFF3 0006"],"options":null},"Access In-Game Cheats":{"note":"","data":["50001301 0000","8002D008 0001"],"options":null},"Damage Select":{"note":"","data":["8002CD93 00??"],"options":{"Double":"02","Half":"01","Normal":"00","Triple":"03"}},"Health Select":{"note":"","data":["8002CD7F 00??"],"options":{"Bad Only":"02","Good Only":"01","Normal":"00","Off":"03"}},"Infinite Continues":{"note":"","data":["8002CC57 0064"],"options":null},"Low Timer":{"note":"","data":["81025DD4 3001"],"options":null},"Power-Up Select":{"note":"","data":["8002CD7B 00??"],"options":{"?":"05","Health":"06","Invincible":"07","Mines":"01","Nitros":"04","Normal":"00","Off":"08","Rockets":"02","Stealer":"03"}},"Radar":{"note":"","data":["8002CD8F 00??"],"options":{"Off":"01","On":"00"}},"Speed units\\Kph or Mph":{"note":"","data":["81025E68 ????"],"options":{"Kph":"0100","Mph":"0001"}},"View Mode Select?":{"note":"","data":["8002CD8B 00??"],"options":{"Fisheye":"03","Flip":"02","Fog":"01","Normal":"00"}},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\01 Coventry Cove":{"note":"","data":["8036A97B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\02 Mount Mayhem":{"note":"","data":["8034C65B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\03 Inferno Isle":{"note":"","data":["80364A53 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\04 Sunset Sands":{"note":"","data":["8033B4AB 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\05 Metro Madness":{"note":"","data":["8035E9E3 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\06 Wicked Woods":{"note":"","data":["80358E5B 0064"],"options":null}},"A1F51C25-16D61291-C:00":{"God Mode":{"note":"","data":["80774EB7 00??"],"options":{"Off":"00","On":"01"}}},"A24F4CF1-A82327BA-C:4A":{"Debug Mode":{"note":"","data":["80036FFB 0001"],"options":null},"Everything Unlocked\\Save File 1":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","81069A2E FFFF"],"options":null},"Everything Unlocked\\Save File 2":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8106996E FFFF"],"options":null},"Everything Unlocked\\Save File 3":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","81069A8E FFFF"],"options":null},"Everything Unlocked\\Save File 4":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","810699CE FFFF"],"options":null},"Have All Objectives Complete":{"note":"","data":["80037003 0001"],"options":null},"Infinite Ammo (All Levels)":{"note":"","data":["80079EAB 0001"],"options":null}},"A273AB56-DA33DB9A-C:45":{"In-Game Cheats\\Access Cheat menu":{"note":"","data":["50000504 0000","801012D8 0001"],"options":null},"In-Game Cheats\\Enable\\All Items":{"note":"To access simply pause in game play \u0026 then unpause.","data":["801012BC 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Invincibility":{"note":"","data":["802AAA68 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Monsters":{"note":"","data":["802AABDB 00??"],"options":{"Are Active":"00","Are Gone":"01"}},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5DD6 0064","812A5E1E 0064","812A5E2E 00C8","812A5E18 1900","812A5E1A 0640","812A5DE8 04B0","812A5DE8 0960","812A5DB8 0960"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Keys":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5DD3 000F"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000E01 0000","802A5E46 0001","50000E02 0000","812A5D8C 03E7"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Infinite Health (All Levels)":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on Single-Player, Co-Operative and DUKEMATCH, All Levels.","data":["8024CCE7 0064","802A5D89 0064"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A6162 0064","812A61AA 0064","812A61BA 00C8","812A61A4 1900","812A61A6 0640","812A6174 04B0","812A6174 0960","812A6144 0960"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000E01 0000","802A61D2 0001","50000E02 0000","812A6118 03E7"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on DUKEMATCH, All Levels.","data":["8024D073 0064","802A6115 0064"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A64EE 0064","812A6536 0064","812A6546 00C8","812A6530 1900","812A6532 0640","812A6500 04B0","812A6500 0960","812A64D0 0960"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000E01 0000","802A655E 0001","50000E02 0000","812A64A4 03E7"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 4 on DUKEMATCH, All Levels.","data":["8024D3FF 0064","802A64A1 0064"],"options":null},"Single-Player (All Levels)\\Have All\\Items \u0026 Infinite Use on all levels":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5A4A 0064","812A5A92 0064","812A5AA2 00C8","812A5A8C 1900","812A5A8E 0640","812A5A5C 04B0","812A5A5C 0960","812A5A2C 0960"],"options":null},"Single-Player (All Levels)\\Have All\\Keys":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5A47 000F"],"options":null},"Single-Player (All Levels)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000E01 0000","802A5ABA 0001","50000E02 0000","812A5A00 03E7"],"options":null},"Single-Player (All Levels)\\Have Infinite Health (All Levels)":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels and does what it says on the tin. Infinite health for player 1, All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["80247463 0064","8026EC5B 0064","802A59FD 0064"],"options":null}},"A292524F-3D6C2A49-C:45":{"Away Team\\Score":{"note":"","data":["8129195C ????"],"options":{"0 Points":"5008","00 Points":"C802","50 Points":"FA02","o Points":"0000"}},"Away Team\\Time Outs":{"note":"","data":["80291958 00??"],"options":{"Infinite":"07","None":"00"}},"Create A Player Codes\\Max 3 Point":{"note":"","data":["802C5EFC 0063"],"options":null},"Create A Player Codes\\Max Capaility":{"note":"","data":["802C5F02 0063"],"options":null},"Create A Player Codes\\Max Defensive":{"note":"","data":["802C5EFF 0063"],"options":null},"Create A Player Codes\\Max Free Throw":{"note":"","data":["802C5EFD 0063"],"options":null},"Create A Player Codes\\Max Offensive":{"note":"","data":["802C5EFE 0063"],"options":null},"Create A Player Codes\\Max Rebound":{"note":"","data":["802C5F00 0063"],"options":null},"Create A Player Codes\\Max Shooting":{"note":"","data":["802C5EFB 0063"],"options":null},"Create A Player Codes\\Max Techinque":{"note":"","data":["802C5F01 0063"],"options":null},"Home Team\\Score":{"note":"","data":["81290378 ????"],"options":{"0 Points":"5008","00 Points":"C802","50 Points":"FA02","o Points":"0000"}},"Home Team\\Time Outs Home":{"note":"","data":["80290374 00??"],"options":{"Infinite":"07","None":"00"}},"No Shot Clock":{"note":"","data":["812010C4 43FF"],"options":null}},"A2C54BE7-6719CBB2-C:50":{"Enable All Characters":{"note":"","data":["D02E4062 0000","802E4063 0004"],"options":null},"Have Max\\Powerups":{"note":"","data":["801CC2F3 0002"],"options":null},"Have Max\\Weapon Power-Up":{"note":"","data":["801CC2F7 0002"],"options":null},"Infinite\\Bullets":{"note":"For Henry","data":["801D5273 0006"],"options":null},"Infinite\\Gold":{"note":"","data":["811CC012 2710"],"options":null},"Infinite\\Health":{"note":"","data":["811CC00A 2710"],"options":null},"Infinite\\Health Young Henry":{"note":"","data":["D1191616 0010","8136E180 2800"],"options":null},"Infinite\\Items\\Crest Half A":{"note":"","data":["801CC02B 000A"],"options":null},"Infinite\\Items\\Crest Half B":{"note":"","data":["801CC02C 000A"],"options":null},"Infinite\\Items\\Cure Ampoule":{"note":"","data":["801CC01E 000A"],"options":null},"Infinite\\Items\\Healing Kit":{"note":"","data":["801CC01C 000A"],"options":null},"Infinite\\Items\\Magical Nitro":{"note":"","data":["801CC025 000A"],"options":null},"Infinite\\Items\\Mandragora":{"note":"","data":["801CC026 000A"],"options":null},"Infinite\\Items\\Moon Card":{"note":"","data":["801CC028 000A"],"options":null},"Infinite\\Items\\Oldrey's Diary":{"note":"","data":["801CC02A 000A"],"options":null},"Infinite\\Items\\Powerup":{"note":"","data":["801CC01F 000A"],"options":null},"Infinite\\Items\\Purifying":{"note":"","data":["801CC01D 000A"],"options":null},"Infinite\\Items\\Red Jewels":{"note":"","data":["801CC014 0068"],"options":null},"Infinite\\Items\\Roast Beef":{"note":"","data":["801CC01B 000A"],"options":null},"Infinite\\Items\\Roast Chicken":{"note":"","data":["801CC01A 000A"],"options":null},"Infinite\\Items\\Rose Brooch":{"note":"","data":["801CC02D 000A"],"options":null},"Infinite\\Items\\Sun Card":{"note":"","data":["801CC027 000A"],"options":null},"Infinite\\Items\\The Contract":{"note":"","data":["801CC024 000A"],"options":null},"Infinite\\Items\\Throwing Weapons":{"note":"","data":["801CC015 0064"],"options":null},"Infinite\\Items\\Winch Lever":{"note":"","data":["801CC029 000A"],"options":null},"Infinite\\Keys\\Archives":{"note":"","data":["801CC02E 000A"],"options":null},"Infinite\\Keys\\Art Tower 1":{"note":"","data":["801CC03A 000A"],"options":null},"Infinite\\Keys\\Art Tower 2":{"note":"","data":["801CC03B 000A"],"options":null},"Infinite\\Keys\\Chamber":{"note":"","data":["801CC033 000A"],"options":null},"Infinite\\Keys\\Clocktower A":{"note":"","data":["801CC03F 000A"],"options":null},"Infinite\\Keys\\Clocktower B":{"note":"","data":["801CC040 000A"],"options":null},"Infinite\\Keys\\Clocktower C":{"note":"","data":["801CC038 000A"],"options":null},"Infinite\\Keys\\Clocktower D":{"note":"","data":["801CC039 000A"],"options":null},"Infinite\\Keys\\Clocktower E":{"note":"","data":["801CC03E 000A"],"options":null},"Infinite\\Keys\\Control Room":{"note":"","data":["801CC03C 000A"],"options":null},"Infinite\\Keys\\Copper":{"note":"","data":["801CC032 000A"],"options":null},"Infinite\\Keys\\Deck":{"note":"","data":["801CC035 000A"],"options":null},"Infinite\\Keys\\Execution":{"note":"","data":["801CC034 000A"],"options":null},"Infinite\\Keys\\Garden":{"note":"","data":["801CC031 000A"],"options":null},"Infinite\\Keys\\Left Tower":{"note":"","data":["801CC02F 000A"],"options":null},"Infinite\\Keys\\Rose Garden":{"note":"","data":["801CC01A 000A"],"options":null},"Infinite\\Keys\\Storeroom":{"note":"","data":["801CC030 000A"],"options":null},"Infinite\\Keys\\Thorn":{"note":"","data":["801CC037 000A"],"options":null},"Infinite\\Keys\\Wall":{"note":"","data":["801CC03D 000A"],"options":null},"Infinite\\Specials\\Special 1":{"note":"","data":["801CC017 000A"],"options":null},"Infinite\\Specials\\Special 2":{"note":"","data":["801CC018 000A"],"options":null},"Infinite\\Specials\\Special 3":{"note":"","data":["801CC019 000A"],"options":null},"Rapid Fire Gun (Henry-Hold B)":{"note":"For Henry, Hold B","data":["811C9CC6 0040","801D5273 0006"],"options":null},"Selection Options\\Cut Scene Select":{"note":"With this code, you must use the appropiate level mod before you attemp to run these cut scenes. Not doing so will ruin the cut scene as the graphics will be glitched.","data":["801CC363 0009","801CC35B 00??"],"options":{"\"I Smell Poison\" From Underground Waterway":"08","(?)":"22","Actrise Appears Again Before Fight With Carrie":"56","Actrise Appears Again With Cousin Fernandes Before Fight With Carrie":"54","Actrise Appears In Castle Center":"52","Actrise Defeated By Carrie":"57","Ada":"30","Bleeding Statue":"12","Bull Awakens":"17","Castel Destruction":"27","Castle Destruction":"29","Castle Drawbridge Closes And Ortega Appears":"46","Castle Drawbridge Lowers":"03","Castle Gate Closes In Villa Upon Entering Villa":"09","Castle Keep Destructs":"1E","Character Enters Castle":"04","Character In Boat On Foggy Lake":"10","Cornell And Henry Part In Garden":"49","Cornell Meets Henry In Garden":"48","Cosmic Lights":"13","Cousin Fernandes Is Destroyed":"55","Death Is Destroyed":"45","Death(Grim Reaper)":"44","Explosion At Wall In Arena":"14","Explosion At Wall In Castle That Leads To Hidden Room":"15","Finds Hidden Path In Villa Basement":"35","Gate Opens In Forest Of Silence":"1A","Harpie":"38","Harpie Destroyed":"39","Lever \u0026 Gear In Castle":"37","Malus And Reinhardt On Horse":"2B","Malus Appears Again In Upstairs Room Of Castle":"16","Malus Appears For The First Time":"0E","Malus Is Saved By Reinhardt":"2A","Malus Leaves Garden":"0F","Malus On Flying Horse Outside Castle Keep":"1F","Meet Renon For The Last Time In Castle Keep.":"1B","Monster Dracula Appears":"51","One Of The Working Gears Cut Scenes":"19","Renon Appears For First Time":"0B","Rosa In Garden":"25","Rosa Returns":"2E","Scrolling Text About Castle And Henry":"31","Seal Removed From Wall In Arena":"11","Space Warp":"28","Spider People In Tunnel":"24","Thirsty Man":"47","This Cut Scene Runs Cut Scene 27 And 2E":"1C","Vampire In Basement":"33","Vampire In Main Entrance Hall Of Villa":"06","Vampire In Villa Basement Destroyed":"34","Village Vampire In Upstairs Villa":"0D","Vincent The Vampire":"18"}},"Selection Options\\Day Select For Adult Henry":{"note":"","data":["801CBFEF 00??"],"options":{"0 Days":"07","1 Day":"06","2 Days":"05","3 Days":"04","4 Days":"03","5 Days":"02","6 Days":"01","7 Days":"00"}},"Selection Options\\Level Select\\Inter":{"note":"","data":["801CC34B 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Level Select\\Main":{"note":"","data":["801CC349 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Status Select":{"note":"","data":["801CC054 00??"],"options":{"Instant Death":"FF","Never Get Poisoned or Vamped":"00","Normal":"01","Poison":"08","Vamp":"04","Vamped \u0026 Poisoned":"0C"}},"Selection Options\\Weapon Select":{"note":"","data":["801CC00F 00??"],"options":{"Axe":"04","Cross":"03","Knife":"01","Nothing":"00","Potion":"02"}},"Selection Options\\[Press F9 For Wolfman Can Use Weapons]":{"note":"For Cornell","data":["881CC007 00??"],"options":{"No (Default)":"04","Yes":"02"}},"Stop Timer Input":{"note":"","data":["811CBFF2 0001"],"options":null}},"A2E8F35B-C9DC87D9-C:45":{"Fly Through 1st \u0026 Last Ring Only To Complete Challenge":{"note":"","data":["801442E9 0063"],"options":null},"Infinite Freezing Breath":{"note":"","data":["8122CDE8 42C8"],"options":null},"Infinite Health":{"note":"","data":["8122CDD4 42C8"],"options":null},"Infinite Laser Eye":{"note":"","data":["8122CDE4 42C8"],"options":null},"Infinite Running Boosts":{"note":"","data":["8122CDDC 42C8"],"options":null},"Infinite X-Ray Vision":{"note":"","data":["8122CDE0 42C8"],"options":null}},"A3A044B5-6DB1BF5E-C:0":{"Collect One Item For Portal":{"note":"","data":["802E4E47 00??"],"options":{"Level 1":"03","Level 2":"0E","Level 3":"0C","Level 4":"0D"}},"Freeze Timer":{"note":"","data":["802E4D5F 0000"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["802E4E4A 0027"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802E4EA2 0027"],"options":null},"Infinite Health\\Player 3":{"note":"","data":["802E4EFA 0027"],"options":null},"Infinite Health\\Player 4":{"note":"","data":["802E4F52 0027"],"options":null},"Paly As":{"note":"","data":["802E4E4C 00??"],"options":{"Blue Back Bee":"22","Blue Helic":"02","Blue Rocket":"12","Blue Stealth":"32","Green Back Bee":"21","Green Helic":"01","Green Rocket":"11","Green Stealth":"31","Red Back Bee":"20","Red Helic":"00","Red Rocket":"10","Red Stealth":"30","Yellow Back Bee":"23","Yellow Helic":"03","Yellow Rocket":"13","Yellow Stealth":"33"}}},"A3A044B5-6DB1BF5E-C:00":{"Collect One Item For Portal":{"note":"","data":["802E4E47 00??"],"options":{"Level 1":"03","Level 2":"0E","Level 3":"0C","Level 4":"0D"}},"Freeze Timer":{"note":"","data":["802E4D5F 0000"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["802E4E4A 0027"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802E4EA2 0027"],"options":null},"Infinite Health\\Player 3":{"note":"","data":["802E4EFA 0027"],"options":null},"Infinite Health\\Player 4":{"note":"","data":["802E4F52 0027"],"options":null},"Paly As":{"note":"","data":["802E4E4C 00??"],"options":{"Blue Back Bee":"22","Blue Helic":"02","Blue Rocket":"12","Blue Stealth":"32","Green Back Bee":"21","Green Helic":"01","Green Rocket":"11","Green Stealth":"31","Red Back Bee":"20","Red Helic":"00","Red Rocket":"10","Red Stealth":"30","Yellow Back Bee":"23","Yellow Helic":"03","Yellow Rocket":"13","Yellow Stealth":"33"}}},"A3F6876A-DB943BD5-C:4A":{"Infinite 9 Credits\\Player 1":{"note":"","data":["801D7B38 0009"],"options":null},"Infinite 9 Credits\\Player 2":{"note":"","data":["801D7B3C 0009"],"options":null},"Press Z Button for Max Gauge\\Player 1":{"note":"","data":["D00B1CE0 0020","811D2602 0098"],"options":null},"Press Z Button for Max Gauge\\Player 2":{"note":"","data":["D00B1CE6 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Max Score]":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null}},"A47D4AD4-8BFA81F9-C:45":{"Infinite Air":{"note":"","data":["8128FB74 FF00"],"options":null},"Infinite Max Lives":{"note":"","data":["80290E5F 000A"],"options":null}},"A47D4AD4-F5B0C6CB-C:45":{"Infinite Air":{"note":"","data":["8128FB74 FF00"],"options":null},"Infinite Max Lives":{"note":"","data":["80290E5F 000A"],"options":null}},"A4A52B58-23759841-C:45":{"Access Demitron Character":{"note":"","data":["80049DF4 0001"],"options":null},"Access Sonork Character":{"note":"","data":["80049DF0 0001"],"options":null},"Infinite Health\\All Levels\\Player 1":{"note":"","data":["81028988 0800","8102898A 0018","81000060 3C1B","81000062 8008","81000064 8F7B","81000066 0228","8100006C 03E0","8100006E 0008","81000070 A761","81000072 0070"],"options":null},"Music Modifier":{"note":"","data":["800816B2 00??"],"options":{"Music Off":"00","Volume Low":"2A","Volume Max":"7F","Volume Medium":"55"}},"Press GS For 2 Rounds Won\\Player 1":{"note":"","data":["890B6330 0002"],"options":null},"Press GS For 2 Rounds Won\\Player 2":{"note":"","data":["890B6342 0002"],"options":null}},"A4BF9306-BF0CDFD1-C:45":{"Access All Moves":{"note":"","data":["8037C3A0 0001","8037C3A1 007F","8037C3A2 00FF","8037C3A3 00FF"],"options":null},"Character Select":{"note":"When Mumbo transforms you hold:C-Up for the Termite,C-Right for the Pumpkin,C-Down for the Walrus,C-Left for the Crocc,R for the Bumble Bee,L for the Washing Machine,Press nothing to turn into Banjo","data":["D0281251 0008","8037C2D3 0002","D0281251 0001","8037C2D3 0003","D0281251 0004","8037C2D3 0004","D0281251 0002","8037C2D3 0005","D0281251 0010","8037C2D3 0006","D0281251 0020","8037C2D3 0007"],"options":null},"Do Shock Spring Jump From Anywhere":{"note":"Press A Button. Do not use with Take Off And Fly From Anywhere","data":["8037C1D2 0002"],"options":null},"Game 100% Complete":{"note":"","data":["8137C3A0 001F","50000302 0000","8137C3A2 FFFF","50000602 0000","813832C0 FFFF","81383FCA 0064","81383FDC 0064","50000802 0000","813832F0 FFFF","81385FA0 0063","81385FC4 0063","81385FF0 0064","50000602 0000","81385FF2 6464","50001002 0000","813831A8 FFFF","813831B0 FF7F","813831B2 FFB0","813831B4 3DA6","813831B6 F264","813831C6 FF7F"],"options":null},"Have Zero Time all Levels":{"note":"","data":["50000B04 0000","81386004 3000"],"options":null},"Infinite\\Air":{"note":"","data":["81385F8E 0E10"],"options":null},"Infinite\\Always Have All Jinjos":{"note":"","data":["80385F7B 00FF"],"options":null},"Infinite\\Eggs":{"note":"","data":["80385F67 00FF"],"options":null},"Infinite\\Gold Feathers":{"note":"","data":["80385F73 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["80385F83 0008","80385F87 0008"],"options":null},"Infinite\\Jiggies":{"note":"","data":["80385FCB 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["80385F8B 00FF"],"options":null},"Infinite\\Mumbo Tokens":{"note":"","data":["80385FC6 00FF","80385FA2 00FF"],"options":null},"Infinite\\Notes":{"note":"Just collect one Note to Have 255 Notes in all Worlds.","data":["80385FF2 00FF","80385F62 0001"],"options":null},"Infinite\\Red Feathers":{"note":"","data":["80385F6F 00FF"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0281251 0020","8137C4BC 43E0"],"options":null},"Secret Items":{"note":"","data":["81283400 ????"],"options":{"Have All Collected":"FFFF","Have None":"0000"}},"Take Off And Fly From Anywhere":{"note":"Press A Button. Do not use with Do Shock Spring Jump From Anywhere","data":["8037C1D1 0002"],"options":null}},"A4F2F521-F0EB168E-C:4A":{"Access All Levels":{"note":"","data":["80200B66 00FF"],"options":null},"Extended Tongue":{"note":"","data":["8132790E FFFF"],"options":null},"Have 99 Carrots":{"note":"With all Carrots collected. You will be allowed into mini-games and secret areas","data":["80200B2F 0063"],"options":null},"Have 99 Crowns":{"note":"","data":["8024790B 0063"],"options":null},"Have All Levels Completed":{"note":"","data":["80200B6A 0019","80200B6B 0019","80200B6C 0015","80200B6D 0018","80200B6E 0017","80200B6F 0017"],"options":null},"Infinite Health":{"note":"","data":["80168E73 000A"],"options":null},"Level Select":{"note":"When you press Pause in-game and Stage Quit yo will go to the Stage Screen this cheat lets you choose what Stage you would like to go to but make sure you turn the cheat off and press A to continue to that stage.","data":["8029BF7B 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06"}}},"A5533106-B9F25E5B-C:4A":{"Enable All Characters":{"note":"","data":["D02E4082 0000","802E4083 0004"],"options":null},"Hard Mode Selected In A New Game":{"note":"With this code, you will not see the hard level status until you save and restart the game file. No special items are required to access this feature with this code turned on.","data":["8032630F 0002"],"options":null},"Have Max\\Powerups":{"note":"","data":["801CC7D3 0002"],"options":null},"Have Max\\Weapon Power-Up":{"note":"","data":["801CC7D7 0002"],"options":null},"Infinite\\Bullets":{"note":"For Henry","data":["801D5753 0006"],"options":null},"Infinite\\Gold":{"note":"","data":["811CC4F2 2710"],"options":null},"Infinite\\Health":{"note":"","data":["811CC4EA 2710"],"options":null},"Infinite\\Health Young Henry":{"note":"","data":["D11CA1A6 0010","813A6D10 2800"],"options":null},"Infinite\\Items\\Crest Half A":{"note":"","data":["801CC50B 000A"],"options":null},"Infinite\\Items\\Crest Half B":{"note":"","data":["801CC50C 000A"],"options":null},"Infinite\\Items\\Cure Ampoule":{"note":"","data":["801CC4FE 000A"],"options":null},"Infinite\\Items\\Healing Kit":{"note":"","data":["801CC4FC 000A"],"options":null},"Infinite\\Items\\Magical Nitro":{"note":"","data":["801CC505 000A"],"options":null},"Infinite\\Items\\Mandragora":{"note":"","data":["801CC506 000A"],"options":null},"Infinite\\Items\\Moon Card":{"note":"","data":["801CC508 000A"],"options":null},"Infinite\\Items\\Oldrey's Diary":{"note":"","data":["801CC50A 000A"],"options":null},"Infinite\\Items\\Powerup":{"note":"","data":["801CC4FF 000A"],"options":null},"Infinite\\Items\\Purifying":{"note":"","data":["801CC4FD 000A"],"options":null},"Infinite\\Items\\Red Jewels on Pick-Up":{"note":"","data":["801CC4F5 0068"],"options":null},"Infinite\\Items\\Roast Beef":{"note":"","data":["801CC4FB 000A"],"options":null},"Infinite\\Items\\Roast Chicken":{"note":"","data":["801CC4FA 000A"],"options":null},"Infinite\\Items\\Rose Brooch":{"note":"","data":["801CC50D 000A"],"options":null},"Infinite\\Items\\Sun Card":{"note":"","data":["801CC507 000A"],"options":null},"Infinite\\Items\\The Contract":{"note":"","data":["801CC504 000A"],"options":null},"Infinite\\Items\\Throwing Weapons":{"note":"","data":["801CC4F5 0064"],"options":null},"Infinite\\Items\\Winch Lever":{"note":"","data":["801CC509 000A"],"options":null},"Infinite\\Keys\\Archives":{"note":"","data":["801CC50E 000A"],"options":null},"Infinite\\Keys\\Art Tower 1":{"note":"","data":["801CC51A 000A"],"options":null},"Infinite\\Keys\\Art Tower 2":{"note":"","data":["801CC51B 000A"],"options":null},"Infinite\\Keys\\Chamber":{"note":"","data":["801CC513 000A"],"options":null},"Infinite\\Keys\\Clocktower A":{"note":"","data":["801CC51F 000A"],"options":null},"Infinite\\Keys\\Clocktower B":{"note":"","data":["801CC520 000A"],"options":null},"Infinite\\Keys\\Clocktower C":{"note":"","data":["801CC518 000A"],"options":null},"Infinite\\Keys\\Clocktower D":{"note":"","data":["801CC519 000A"],"options":null},"Infinite\\Keys\\Clocktower E":{"note":"","data":["801CC51E 000A"],"options":null},"Infinite\\Keys\\Control Room":{"note":"","data":["801CC51C 000A"],"options":null},"Infinite\\Keys\\Copper":{"note":"","data":["801CC512 000A"],"options":null},"Infinite\\Keys\\Deck":{"note":"","data":["801CC515 000A"],"options":null},"Infinite\\Keys\\Execution":{"note":"","data":["801CC514 000A"],"options":null},"Infinite\\Keys\\Garden":{"note":"","data":["801CC511 000A"],"options":null},"Infinite\\Keys\\Left Tower":{"note":"","data":["801CC50F 000A"],"options":null},"Infinite\\Keys\\Rose Garden":{"note":"","data":["801CC516 000A"],"options":null},"Infinite\\Keys\\Storeroom":{"note":"","data":["801CC510 000A"],"options":null},"Infinite\\Keys\\Thorn":{"note":"","data":["801CC517 000A"],"options":null},"Infinite\\Keys\\Wall":{"note":"","data":["801CC51D 000A"],"options":null},"Infinite\\Specials\\Special 1":{"note":"","data":["801CC4F7 000A"],"options":null},"Infinite\\Specials\\Special 2":{"note":"","data":["801CC4F8 000A"],"options":null},"Infinite\\Specials\\Special 3":{"note":"","data":["801CC4F9 000A"],"options":null},"Rapid Fire Gun (Henry-Hold B)":{"note":"For Henry, Hold B","data":["811CA1A6 0040","801D5753 0006"],"options":null},"Selection Options\\Cut Scene Select":{"note":"With this code, you must use the appropiate level mod before you attemp to run these cut scenes. Not doing so will ruin the cut scene as the graphics will be glitched.","data":["801CC843 0009","801CC83B 00??"],"options":{"\"I Smell Poison\" From Underground Waterway":"08","(?)":"22","Actrise Appears Again Before Fight With Carrie":"56","Actrise Appears Again With Cousin Fernandes Before Fight With Carrie":"54","Actrise Appears In Castle Center":"52","Actrise Defeated By Carrie":"57","Ada":"30","Bleeding Statue":"12","Bull Awakens":"17","Castel Destruction":"27","Castle Destruction":"29","Castle Drawbridge Closes And Ortega Appears":"46","Castle Drawbridge Lowers":"03","Castle Gate Closes In Villa Upon Entering Villa":"09","Castle Keep Destructs":"1E","Character Enters Castle":"04","Character In Boat On Foggy Lake":"10","Cornell And Henry Part In Garden":"49","Cornell Meets Henry In Garden":"48","Cosmic Lights":"13","Cousin Fernandes Is Destroyed":"55","Death Is Destroyed":"45","Death(Grim Reaper)":"44","Explosion At Wall In Arena":"14","Explosion At Wall In Castle That Leads To Hidden Room":"15","Finds Hidden Path In Villa Basement":"35","Gate Opens In Forest Of Silence":"1A","Harpie":"38","Harpie Destroyed":"39","Lever \u0026 Gear In Castle":"37","Malus And Reinhardt On Horse":"2B","Malus Appears Again In Upstairs Room Of Castle":"16","Malus Appears For The First Time":"0E","Malus Is Saved By Reinhardt":"2A","Malus Leaves Garden":"0F","Malus On Flying Horse Outside Castle Keep":"1F","Meet Renon For The Last Time In Castle Keep.":"1B","Monster Dracula Appears":"51","One Of The Working Gears Cut Scenes":"19","Renon Appears For First Time":"0B","Rosa In Garden":"25","Rosa Returns":"2E","Scrolling Text About Castle And Henry":"31","Seal Removed From Wall In Arena":"11","Space Warp":"28","Spider People In Tunnel":"24","Thirsty Man":"47","This Cut Scene Runs Cut Scene 27 And 2E":"1C","Vampire In Basement":"33","Vampire In Main Entrance Hall Of Villa":"06","Vampire In Villa Basement Destroyed":"34","Village Vampire In Upstairs Villa":"0D","Vincent The Vampire":"18"}},"Selection Options\\Day Select For Adult Henry":{"note":"","data":["801CC4CF 00??"],"options":{"0 Days":"07","1 Day":"06","2 Days":"05","3 Days":"04","4 Days":"03","5 Days":"02","6 Days":"01","7 Days":"00"}},"Selection Options\\Level Select\\Inter":{"note":"","data":["801CC82B 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Level Select\\Main":{"note":"","data":["801CC829 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Status Select":{"note":"","data":["801CC534 00??"],"options":{"Instant Death":"FF","Never Get Poisoned or Vamped":"00","Normal":"01","Poison":"08","Vamp":"04","Vamped \u0026 Poisoned":"0C"}},"Selection Options\\Weapon Select":{"note":"","data":["801CC4EF 00??"],"options":{"Axe":"04","Cross":"03","Knife":"01","Nothing":"00","Potion":"02"}},"Selection Options\\[Press F9 For Wolfman Can Use Weapons]":{"note":"For Cornell","data":["881CC4E7 00??"],"options":{"No (Default)":"04","Yes":"02"}},"Stop Timer Input":{"note":"","data":["811CC4D2 0001"],"options":null}},"A60ED171-3D85D06E-C:45":{"Have All Characters In Viewer":{"note":"","data":["810ECD80 FFFF","810ECD82 FFFF"],"options":null},"Infinite\\Health":{"note":"","data":["800F5F26 0001"],"options":null},"Infinite\\Webbing":{"note":"","data":["800F5F53 0001"],"options":null},"Unlocked\\All Costumes":{"note":"","data":["810ECD7E FFFF"],"options":null},"Unlocked\\All Levels":{"note":"","data":["810ECD74 0105","810ECDB0 FFFF"],"options":null}},"A62230C3-F0834488-C:45":{"Infinite Time":{"note":"","data":["D0226724 0000","81226724 003C"],"options":null},"Only Play One Round":{"note":"","data":["D0226791 0000","81226718 0001"],"options":null},"Player 1\\1 Win To Win":{"note":"","data":["D0226715 0000","80226715 0001"],"options":null},"Player 1\\Infinite Energy":{"note":"","data":["D022671C 0000","8122671C 00FA"],"options":null},"Player 1\\Infinite Time To Continue":{"note":"","data":["802267CB 0009","803CF2A1 0009"],"options":null},"Player 1\\Never Wins":{"note":"","data":["D0226715 0001","80226715 0000"],"options":null},"Player 1\\No Energy":{"note":"","data":["D022671C 0000","8122671C 0000"],"options":null},"Player 2\\1 Win To Win":{"note":"","data":["D0226717 0000","80226717 0001"],"options":null},"Player 2\\Infinite Energy":{"note":"","data":["D022671E 0000","8122671E 00FA"],"options":null},"Player 2\\Lifebar Flashes Red":{"note":"","data":["D022672E 0000","8122672E 00CF"],"options":null},"Player 2\\Never Wins":{"note":"","data":["D0226717 0001","80226717 0000"],"options":null},"Player 2\\No Energy":{"note":"","data":["D022671E 0000","8122671E 0000"],"options":null}},"A7941528-61F1199D-C:4A":{"All Gold Medals":{"note":"","data":["50000502 0000","81259130 0101"],"options":null},"Infinite\\Tools Options":{"note":"","data":["8025A624 00??"],"options":{"Fan":"04","Frying Pan":"01","Ghost":"02","Invisible":"06","Rat Face":"08","Rock":"07","Rocket":"05","Super Ghost":"03","Super Rat Face":"09","Wings":"0A"}},"Infinite\\Trick Game 300 Points":{"note":"","data":["8125A7F2 012C"],"options":null},"Infinite\\Weapons Options":{"note":"","data":["8025A622 00??","8025A623 0009"],"options":{"Bomb":"05","Freeze Shot":"03","Parachute":"02","Slap Stick":"01","Snowman":"04","Whirlwind":"06"}},"Max Coins":{"note":"","data":["8125A5BE 270F","8025A5BF 00C8"],"options":null},"Open Extra Characters \u0026 Snowboards":{"note":"Battle Mode Only","data":["8125916E 0101","80259170 0001","8025915C 0001","8125915E 0101","81259160 0101"],"options":null}},"A7D015F8-2289AA43-C:45":{"Have All Medals":{"note":"For Expert \u0026 Normal Modes","data":["50000802 0000","8116E6E0 7777"],"options":null},"Infinite\\Armor\\Falco":{"note":"","data":["8016D727 00FF"],"options":null},"Infinite\\Armor\\Peppy":{"note":"","data":["8016D72F 00FF"],"options":null},"Infinite\\Armor\\Slippy":{"note":"","data":["8016D72B 00FF"],"options":null},"Infinite\\Dual Blue Lasers":{"note":"","data":["8015791B 0002"],"options":null},"Infinite\\Energy":{"note":"","data":["8013AB27 00FF","80137C47 00FF"],"options":null},"Infinite\\Hyper Laser":{"note":"","data":["8015791B 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["80157911 0009"],"options":null},"Level Select":{"note":"","data":["D016E0A7 0000","8016E0A7 00??"],"options":{"Aquas":"0D","Area 6":"03","Bolse":"11","Corneria":"00","Corneria (Multi)":"14","Fortuna":"0E","Glitch":"04","Katina":"10","Macbeth":"0B","Meteo":"01","Sector X":"02","Sector Y":"05","Sector Z":"12","Solar":"07","Titania":"0C","Training Mode Level":"0A","Venom 1":"06","Venom 2":"09","Venom With Starwolf":"13","Zoness":"08"}},"Loads O' Hits":{"note":"","data":["8015790B 00FF"],"options":null},"Unlimited\\Boost":{"note":"","data":["81137C9C 0000","81137C9E 0000","8113AB7C 0000","8113AB7E 0000"],"options":null},"Unlimited\\Smart Bombs":{"note":"","data":["8016DC13 0004"],"options":null}},"A8275140-B9B056E8-C:4A":{"Have All\\Characters":{"note":"","data":["50000702 0000","801B361B 0001"],"options":null},"Have All\\Key Items":{"note":"","data":["50001602 0000","811B3714 0101"],"options":null},"Have All\\Normal Items":{"note":"","data":["50000902 0000","811B3700 6363"],"options":null},"Have All\\Weapons":{"note":"","data":["50000702 0000","811B3678 0101"],"options":null},"Infinite\\Air":{"note":"","data":["8121D4FA 04B0"],"options":null},"Infinite\\HP (All Characters)":{"note":"","data":["50000602 0000","801B361C 000A"],"options":null},"[Can Leave Town]":{"note":"Start a new game, and immediately leave town without talking to anyone.","data":["811B362A FFFF"],"options":null},"[Press L To Levitate":{"note":"Jump first, then hold L-Button while in mid-air.","data":["D0082915 0020","812456F4 418E","D0082915 0020","812456F6 38E2"],"options":null}},"A83E101A-E937B69D-C:45":{"Always Have\\BFG 9000":{"note":"","data":["800632DB 0001"],"options":null},"Always Have\\Bio Suite":{"note":"","data":["80063283 00??"],"options":{"Off":"00","On":"FF"}},"Always Have\\Chain Gun":{"note":"","data":["800632CF 0001"],"options":null},"Always Have\\Chainsaw":{"note":"","data":["800632BB 0001"],"options":null},"Always Have\\Double Shotgun":{"note":"","data":["800632CB 0001"],"options":null},"Always Have\\Gun":{"note":"","data":["800632C3 0001"],"options":null},"Always Have\\Have Rocket Launcher":{"note":"","data":["800632D1 0001"],"options":null},"Always Have\\Laser Weapon":{"note":"","data":["800632DD 0001"],"options":null},"Always Have\\Missile Launcher":{"note":"","data":["800632D3 0001"],"options":null},"Always Have\\Plasma Rifle":{"note":"","data":["800632D7 0001"],"options":null},"Always Have\\Shotgun":{"note":"","data":["800632C7 0001"],"options":null},"Berserk Mode":{"note":"","data":["8006327B 00FF"],"options":null},"Enable Cheat Menu":{"note":"","data":["8005A7D3 0001"],"options":null},"Have All\\Keys":{"note":"","data":["50000504 0000","8106328E FFFF"],"options":null},"Have All\\Secret Pentagram Items":{"note":"","data":["800632A7 0007"],"options":null},"Have All\\Weapons":{"note":"","data":["50000A04 0000","810632BA 0001"],"options":null},"Infinite\\Ammo All Weapons":{"note":"","data":["50000404 0000","810632E2 013C"],"options":null},"Infinite\\Armor":{"note":"","data":["8006326F 00FF"],"options":null},"Invincible":{"note":"","data":["8006330B 0002"],"options":null},"Invincible And Map Markers":{"note":"","data":["8006330B 0006"],"options":null},"Rapid Fire":{"note":"","data":["8106333A 0B94"],"options":null},"Turn Map Markers On":{"note":"","data":["8006330B 0004"],"options":null},"[Max Brightness]":{"note":"Enable this cheat on rom load to have Max Brightness (internal) and then put Jabo d3d8 on 160% Max for a extra brightness Boost.","data":["8005A7C8 0064"],"options":null}},"A92D52E5-1D26B655-C:45":{"1 Win to Win\\Player 1":{"note":"","data":["D020C27F 0000","8020C27F 0001"],"options":null},"1 Win to Win\\Player 2":{"note":"","data":["D020C27F 0000","8020C27F 0010"],"options":null},"Infinite\\Health\\Player 1":{"note":"","data":["8020B7B1 00C8"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["8020BC0D 00C8"],"options":null},"Infinite\\Money":{"note":"","data":["8121106C 2704"],"options":null},"Infinite\\Special\\Player 1":{"note":"","data":["8120AEB4 0190"],"options":null},"Infinite\\Special\\Player 2":{"note":"","data":["8120B1B0 0190"],"options":null}},"AA18B1A5-07DB6AEB-C:45":{"Have\\All Guns In Chest":{"note":"","data":["50000E04 0100","810E8EF4 05FF"],"options":null},"Have\\All Main Items In Chest":{"note":"If you want items that are not listed in the Chest, then just use the Have Item On Slot Select code to have what you desire.","data":["810E8F2C 17FF","810E8F30 1EFF","810E8F34 1FFF","810E8F38 23FF","50000404 0100","810E8F3C 25FF","810E8F4C 2AFF","810E8F50 2BFF","50000304 0100","810E8F54 2EFF","50000F04 0100","810E8F60 32FF","810E8F9C 43FF","50000504 0100","810E8FA0 47FF","50000404 0100","810E8FB4 53FF","50000C04 0100","810E8FC4 58FF"],"options":null},"Have\\Fine Condition Always":{"note":"","data":["810E13E4 0000"],"options":null},"Have\\Item On Slot Select\\Slot 01":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EC8 00??","800E8EC9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 02":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ECC 00??","800E8ECD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 03":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED0 00??","800E8ED1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 04":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED4 00??","800E8ED5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 05":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED8 00??","800E8ED9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 06":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EDC 00??","800E8EDD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 07":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE0 00??","800E8EE1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 08":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE4 00??","800E8EE5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 09":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE8 00??","800E8EE9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 10":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EEC 00??","800E8EED 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Infinite\\Health":{"note":"","data":["810E1322 00C8"],"options":null},"Infinite\\Time":{"note":"","data":["800E8CBF 0010"],"options":null},"Play As":{"note":"This allows you to select what character you wish to play as. Just slect on load and select as normal at the menu and when in game you will be the character of your choice","data":["810E1138 ????"],"options":{"Ada (can crash the game)":"0E80","Cheryl":"0F80","Claire Original":"0380","Claire as Biker":"0980","Claire without jacket":"0780","Claires body Leons outfit":"0B80","Hunk (can crash the game)":"0C80","Leon Original":"0280","Leon Wounded":"0680","Leon as Biker":"0A80","Leon as Stars":"0880","To Fu":"0D80"}},"Play Extra Mission":{"note":"This allows you to select what extra mission you wish to play. Just slect on load and carry on as normal at the menu and when in game you will be the character of your choice Do not use at the same time as [Resident Evil 2 Mode]","data":["810E10EE 00??"],"options":{"The 4th Survior":"48","To-Fu":"49"}},"Quick Chest Access":{"note":"With this code, all you have to do to access the chest, is hold L and Press Start.","data":["D1014FA4 1020","8012BFA8 0001"],"options":null},"Quick Save Access":{"note":"(1 Anytime, anywhere, press Z and B at the same time. You'll get the standard typewriter text: \"It's an old typewriter. You can save your progress with this.\" Note that you must, of course, have an ink ribbon to save. 2) Choose \"Yes\" and you'll be able to save normally. Instead of the location name, your save file will say \"Scenario 1st\" or \"Scenario 2nd.\" 3) When you load your save file, you'll have to skip through the intro, but when the game loads up you'll be exactly where you saved!","data":["D1014FA4 6000","810E8928 8007","D1014FA4 6000","810E892A 4110"],"options":null},"[Biohazard 2 Mode]":{"note":"Note: With this enabled the game will become Bio Hazard 2, the Japanese version of Resident Evil 2! This means all text (except the text in files) is in Japanese, and all cinemas have Japanese subtitles. Note that the title screen will still say Resident Evil 2 Do not use at the same time as Play Extra Mission","data":["D10E10EE 00??","810E10EE 0000"],"options":{"Off":"00","On":"40"}},"[Saves Always 0]":{"note":"No matter how many saves you do ithis makes the game think you Have\\not saved.","data":["810E8B50 0000"],"options":null}},"AA7B0658-9C96937B-C:50":{"Character Creation\\Max\\Aerial":{"note":"","data":["80326C35 0009"],"options":null},"Character Creation\\Max\\Brawling":{"note":"","data":["8032CB75 0009"],"options":null},"Character Creation\\Max\\Dirtiness":{"note":"","data":["8032EB35 0009"],"options":null},"Character Creation\\Max\\Impact":{"note":"","data":["80320375 0009"],"options":null},"Character Creation\\Max\\Mat Ability":{"note":"","data":["80328BF5 0009"],"options":null},"Character Creation\\Max\\Quickness":{"note":"","data":["80324C75 0009"],"options":null},"Character Creation\\Max\\Speed":{"note":"","data":["80322CB5 0009"],"options":null},"Character Creation\\Max\\Strength":{"note":"","data":["80308D35 0009"],"options":null},"Character Creation\\Max\\Submission":{"note":"","data":["8032ABB5 0009"],"options":null},"Enable Cheat":{"note":"","data":["800B6F5B 00??"],"options":{"All Wrestlers":"80","Momentum Meter":"08","Play As Same Wrestler":"20","Stamina Meter":"04","Super Created Wrestlers":"02"}},"Freeze Timer":{"note":"","data":["800B7E02 D300"],"options":null},"Infinite Stamina\\Player 1":{"note":"","data":["810E9798 0478"],"options":null},"Infinite Stamina\\Player 2":{"note":"","data":["810E9934 03ED"],"options":null},"Meter Select\\Player 1":{"note":"","data":["800E979D 00??"],"options":{"Empty Meter Bar":"00","Full Meter Bar":"60"}},"Meter Select\\Player 2":{"note":"","data":["800E993D 00??"],"options":{"Empty Meter Bar":"00","Full Meter Bar":"60"}}},"AB7C101D-EC58C8B0-C:50":{"Infinite Health\\Player One":{"note":"","data":["811507FA 6400"],"options":null},"Infinite Health\\Player Two":{"note":"","data":["81152E76 6400"],"options":null},"Infinite Jet Pack\\Player One":{"note":"","data":["81150802 3200"],"options":null},"Infinite Jet Pack\\Player Two":{"note":"","data":["81152E7E 3200"],"options":null},"Infinite Shields\\Player One":{"note":"","data":["811507FE 6400"],"options":null},"Infinite Shields\\Player Two":{"note":"","data":["81152E7A 6400"],"options":null},"Player 1 Easily Defeated\\Player Two":{"note":"","data":["811507FA 0100","811507FE 0100"],"options":null},"Player 2 Easily Defeated\\Player One":{"note":"","data":["81152E76 0100","81152E7A 0100"],"options":null},"Shields Always Active\\Player One":{"note":"","data":["8015080A 0022"],"options":null},"Shields Always Active\\Player Two":{"note":"","data":["80152E86 0022"],"options":null},"Smoke Trail\\Player One":{"note":"","data":["80150804 0001"],"options":null},"Smoke Trail\\Player Two":{"note":"","data":["80152E80 0001"],"options":null}},"ABA51D09-C668BAD9-C:58":{"Character Select":{"note":"","data":["801D535F 00??"],"options":{"Ruff (Boy) (Default)":"00","Tumble (Girl)":"01"}},"Enable Cheat Menu":{"note":"","data":["801D5355 0001"],"options":null},"Have All Levels Completed":{"note":"","data":["50000202 0000","81207D6C FFFF"],"options":null},"Have\\All 40 Winks Collected":{"note":"Combined with Have All Levels Completed cheat will open the door for Have All 40 Winks","data":["50000602 0000","81207D60 FFFF"],"options":null},"Have\\All Dreamkeys Collected":{"note":"","data":["50000802 0000","81207D70 FFFF"],"options":null},"Infinite\\40 Cogs":{"note":"Disable when on Boss Modes as it can cause hanging!","data":["811D2A82 0028"],"options":null},"Infinite\\50 Health ZZZ's":{"note":"","data":["811D2A84 0032"],"options":null},"Infinite\\99 Lives":{"note":"Disable when on Boss Modes as it can cause hanging!","data":["801D2A87 0063"],"options":null},"Infinite\\99 Moons":{"note":"","data":["801D2A81 0063"],"options":null},"Infinite\\99 Tokens":{"note":"Disable when on Boss Modes as it can cause hanging!","data":["801D2A8D 0063"],"options":null},"Infinite\\Max Air":{"note":"","data":["811D2AA0 07C6","811DA2F6 07C1"],"options":null},"Setting Options\\Controller Select":{"note":"","data":["801D5362 00??"],"options":{"Preset 1 (Normal)":"00","Preset 2":"01","Preset 3":"02"}},"Setting Options\\Difficulty Select":{"note":"","data":["801D534F 00??"],"options":{"Easy":"00","Hard":"02","Medium":"01"}},"Setting Options\\GFX Quality Select":{"note":"","data":["801D5354 00??"],"options":{"HighCol":"02","Medium":"01","Normal":"00"}},"Setting Options\\Langauge Select":{"note":"","data":["801D21AC 00??"],"options":{"English":"00","Italian":"02","Spanish":"01"}},"Setting Options\\Music Volume Select":{"note":"","data":["801D5351 00??"],"options":{"Max":"07","Normal":"05","Off":"00"}},"Setting Options\\Rumble Pak Strength Select":{"note":"","data":["801D5353 00??"],"options":{"Max":"07","Middle":"05","Off (Normal)":"00"}},"Setting Options\\SFX Volume Select":{"note":"","data":["801D5350 00??"],"options":{"Max":"07","Normal":"05","Off":"00"}},"test health":{"note":"","data":["801D2A85 0032"],"options":null}},"AC16400E-CF5D071A-C:45":{"Always Place 1st":{"note":"","data":["80151C01 0000"],"options":null},"Have All Cars":{"note":"","data":["50001504 0000","800AAE5B 0001"],"options":null},"Have All Tracks":{"note":"","data":["81168F8C FFFF"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D013435F 0010","8112BD0C 43CB"],"options":null}},"AC8E4B32-E7B47326-C:45":{"Infinite Lives":{"note":"","data":["8009B1AF 0009"],"options":null},"Level Select In Setup Menu":{"note":"","data":["81076FF6 6F8C"],"options":null},"Max Score":{"note":"","data":["8009B1AA 00FF"],"options":null}},"AC976B38-C3A9C97A-C:50":{"99 Total Houses":{"note":"","data":["8106A61A 0063"],"options":null},"Big Newspapers":{"note":"","data":["81268D5A 0001"],"options":null},"Infinite Newspapers":{"note":"","data":["81268D12 0001"],"options":null},"Invincibility":{"note":"","data":["81268D1A 0001"],"options":null},"Level Select":{"note":"Also accesses All Bonus Levels","data":["8006A6A7 0001"],"options":null},"Rocket Boosters":{"note":"","data":["81268D3E 0001"],"options":null},"Super Jump Springs":{"note":"","data":["81268D3A 0001"],"options":null},"Throw Newspapers Backwards":{"note":"","data":["81268D4A 0001"],"options":null},"Throw Newspapers Forwards":{"note":"","data":["81268D46 0001"],"options":null},"Turbo Mode":{"note":"","data":["81268D36 0001"],"options":null}},"AC9F7DA7-A8C029D8-C:45":{"Activate\\Auto Abort Disable":{"note":"","data":["800F4078 0001"],"options":null},"Activate\\Cones to Mines":{"note":"","data":["800F3F88 0001"],"options":null},"Activate\\Disable Car 2 Car Control":{"note":"","data":["800F4050 0001"],"options":null},"Activate\\Resurrect in Place":{"note":"","data":["800F4080 0001"],"options":null},"Activate\\Stop Timer":{"note":"","data":["800F4090 0001"],"options":null},"Activate\\Upside Down Mode":{"note":"","data":["800F4061 0001"],"options":null},"Always Place 1st":{"note":"","data":["80101339 0000"],"options":null},"Car":{"note":"","data":["D00F40A5 0020","800D9EC1 00??","800D9F64 00??","800DA078 00??","800DA321 00??"],"options":{"F1 Car":"0A","Hot Rod":"09","Taxi":"08"}},"Car Type":{"note":"It gets you from 0-150 in the the time it takes the F1 racer to. Don't use the F1 racer and only hold until you reach 150 or the game will freeze.","data":["800F40B1 00??"],"options":{"Fat Car":"02","Flat Car":"01","Giant Car":"03","Invisible Car":"0A","Invisible Car (Can See Wheels)":"CD","Normal Car":"00","Paper-Thin Cars":"66","Screen-Talled Cars":"6E","Super-Sky Car":"BB","Super-Sky Car #2":"DD","Super-Tiny Car":"FF","Super-Tiny Car #2":"44"}},"Edge Boost":{"note":"by pressing R you will get a small speed boost that pushes you ahead.","data":["D00F40A5 0010","81101331 FFFF"],"options":null},"Gravity":{"note":"","data":["800F3D91 00??"],"options":{"1 Weight":"02","2 Weights":"03","A Balloon \u0026 2 Weights":"00","Normal":"01"}},"Have Two Special Cars":{"note":"You receive the Hotrod and Taxi with this code, but you may have to go through the cars from the \"Beginning\" past the \"Extreme\" for them to appear.","data":["810CAC82 FFFF","810CAC98 FFFF","810CACAE FFFF","810CACC4 FFFF","810CACDA FFFF","810CACF0 FFFF"],"options":null},"Press F9 For Track Select":{"note":"With this code, press F9 when on the track selction screen and press A to select that track!","data":["88100050 00??"],"options":{"Track 1":"00","Track 2":"01","Track 3":"02","Track 4":"03","Track 5":"04","Track 6":"05","Track 7":"06"}}},"ADA815BE-6028622F-C:4A":{"Lower Left Character\\Coin Options":{"note":"","data":["800F2769 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D580A 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800F276D 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["800F2799 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D584E 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800F279D 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Mini Game\\Max 99 Coins":{"note":"","data":["800F2C0C 0063"],"options":null},"Mini Game\\Unlimited 99 lives":{"note":"","data":["800F2C03 0063"],"options":null},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["800F2709 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D5782 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800F270D 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["800F2739 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D57C6 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800F273D 00??"],"options":{"0 Stars":"00","99 Stars":"64"}}},"ADB9498B-DAF28F55-C:45":{"Level Select\\Proving Ground-Tightrope":{"note":"Do Not use this with Level Select The Pit-Starlight. Only use One Level Select Option At A Time","data":["8014BD9F 00??"],"options":{"Basic Training":"01","Bomb Shelter":"0B","Bottleneck":"10","Boxed Set":"06","Cathedral":"04","Crossroads":"02","Dire Straight":"07","Earth Temple":"0D","Fall Out":"05","Fire Temple":"0E","Grim Retreat":"03","Mystic":"0F","Prey":"08","Proving Grounds":"00","Tempered":"0C","Tightrope":"11","Warehouse":"09","Water Temple":"0A"}},"Level Select\\The Pit-Starlight":{"note":"Do Not use this with Level Select Proving Ground-Tightrope. Only use One Level Select Option At A Time","data":["8014BD9F 00??"],"options":{"Ampatheater":"16","Breakdown":"19","Bunker":"15","Courtyard":"22","Crypts":"18","Defcon 5":"1F","Fathom":"1D","Fire Walker":"17","Hopeless":"1B","Leap Of Faith":"13","Matrix":"1C","Retaliation":"1A","Spirit Temple":"20","Starlight":"23","Stronghold":"21","The Pedestal":"1E","The Pit":"12","Wicked Dance":"14"}},"Player 1\\Have All\\Medals":{"note":"","data":["810FCB4A FFFF","810FCB4C FFFF","810FCB4E FFFF","800FCB50 0003"],"options":null},"Player 1\\Have All\\Mini Game Icons":{"note":"","data":["800FCB17 0024"],"options":null},"Player 1\\Infinite Ammo":{"note":"","data":["80336535 0063","80336537 0063","80336539 0063","80692B95 0063","80692B97 0063","80692B99 0063","80692B9B 0063","80692B9D 0063","80692B9F 0063","80692BA1 0063"],"options":null},"Player 1\\Infinite\\Cerebral Bores":{"note":"","data":["8033653B 00FF"],"options":null},"Player 1\\Infinite\\Health":{"note":"","data":["81336526 6400","80692B86 0064"],"options":null},"Player 1\\Infinite\\Metal Claws":{"note":"","data":["80336541 00FF"],"options":null},"Player 1\\Infinite\\Proximity Mines":{"note":"","data":["8033653D 00FF"],"options":null},"Player 1\\Infinite\\Sentry Guns":{"note":"","data":["8033653F 00FF"],"options":null},"Player 1\\Infinite\\Time":{"note":"","data":["811407F4 47AF","811407F6 C4B1"],"options":null},"Player 1\\Play As":{"note":"","data":["80140358 00??"],"options":{"Adon":"05","Bastile":"0B","Blind One":"08","Death Guard":"0A","Drone":"02","Elite Guard":"07","Fireborn":"03","Juggernaut":"09","Lord Of The Dead":"06","Mantid":"01","Mites":"12","Monkey":"13","Pur-Lin":"0F","Raptor":"11","Soldier":"04","Symbiont":"10","Syra":"0C","Tail Set":"0E","Turok":"00"}},"Player 1\\Start With Weapon":{"note":"","data":["803366B0 00??"],"options":{"Assault Rifle":"05","Boomerang":"01","Cerebral Bore":"12","Chest Burster":"0F","Emaciator":"0D","Flaregun":"09","Freeze Gun":"08","Grenade Launcher":"0A","Inflator":"0E","Iron Claw":"14","Mag 60":"03","Mini Gun":"06","Mite Bite":"11","Napalm Gel":"0C","PFM Mine":"13","Plasma Rifle":"07","Raptor Claw":"10","Scorpion Launcher":"0B","Sentry Turret":"15","Shotgun":"04","Tek Crossbow":"02","Warhammer":"00"}}},"AE4992C9-9253B253-C:50":{"Access All Secret NASCAR Legends":{"note":"This will give you access to,Alan Kulwicki,Cale Yarborough,Bobby Allison,Davey Allison,Richard Petty,Benny Parsons","data":["50000602 0000","810DF400 0101"],"options":null},"Laps To Race":{"note":"","data":["81044B7E 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7Laps":"07","8 Laps":"08","9 Laps":"09"}}},"AE5B9465-C54D6576-C:50":{"Infinite Options\\Health Commando":{"note":"","data":["810B5364 0080"],"options":null},"Infinite Options\\Money GDI":{"note":"","data":["810C55B6 FFFF"],"options":null},"Infinite Options\\Money NOD":{"note":"","data":["810C575E FFFF"],"options":null},"Infinite Options\\Power GDI":{"note":"","data":["810C55D6 FFFF"],"options":null},"Infinite Options\\Power NOD":{"note":"","data":["810C577E FFFF"],"options":null},"Level Select":{"note":"Select Replay Mission, Press L To Display All Missions,And Press R To Select Your Team You can now press R+L+Up To Win A Battle","data":["810901AA 0001"],"options":null}},"AE82687A-9A3F388D-C:45":{"Always First Place":{"note":"","data":["810BA6DA 0000"],"options":null}},"AE90DBEB-79B89123-C:50":{"Infinite Dinars":{"note":"","data":["800B6663 00E8","800B6662 00E8"],"options":null},"Infinite Health \u0026 Max Health":{"note":"","data":["810CFF5E 03E7","810CFF62 03E7"],"options":null},"Infinite Magic":{"note":"","data":["810B6BEA 0063","810B6BD2 0063","810B6C02 0063","810B6C1A 0063"],"options":null},"Press L to Levitate":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D017D8F5 0020","810CFFB4 44CB"],"options":null}},"AEBCDD54-15FF834A-C:50":{"Extra Bonuses":{"note":"","data":["810EB9EA 270F"],"options":null},"Fake Max Spin Bar?":{"note":"","data":["800EB9C3 0009"],"options":null},"Infinite\\Crate Attempts":{"note":"","data":["800A9C9B 0007"],"options":null},"Infinite\\Gold Pickups":{"note":"","data":["802EB9E8 0064"],"options":null},"Infinite\\Health":{"note":"","data":["800EB9C7 0009"],"options":null}},"AEBE463E-CC71464B-C:45":{"Always 1st":{"note":"","data":["8013FCE0 0001"],"options":null},"Freeze All Lap Timers":{"note":"","data":["8013FCA1 0001","8013FCA5 0001","8013FCA9 0001"],"options":null},"Freeze Overall Timer":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8013FC95 0001"],"options":null},"Laps Of Race":{"note":"","data":["8013FC8E 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","Never Ending Laps":"06"}},"Level Select":{"note":"","data":["8013FF9B 00??"],"options":{"Bikini Island":"01","Canyon Rush":"00","China Town":"02","China Town Jam":"04","Neo Arena":"03","Neo Speed Way":"05"}},"Music Modifier":{"note":"","data":["80109BDC 00??"],"options":{"Music Off":"00","Music On":"FF"}},"No Damage\\Player 1":{"note":"","data":["50000402 0000","8113FFD8 0000"],"options":null},"No Damage\\Player 2":{"note":"","data":["50000402 0000","81142078 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["8013FF95 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Play As\\Player 2":{"note":"","data":["8013FF96 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Unlock Hidden Tracks \u0026 Cars":{"note":"","data":["8008F29C 0001"],"options":null}},"AEEF2F45-F97E30F1-C:45":{"Low Time":{"note":"","data":["800BA390 0001"],"options":null},"Max Attack Power-Fighters Arena":{"note":"","data":["801FBF6E 00C7"],"options":null},"Max Health Power-Fighters Arena":{"note":"","data":["801FBF6F 00C7"],"options":null},"Max Recovery-Fighters Arena":{"note":"","data":["801FBF70 00C7"],"options":null},"P1 Always Lose Judging":{"note":"","data":["801F727A 0000"],"options":null},"P1 Always Win Judging":{"note":"","data":["801F727A 00FF"],"options":null},"P2 Always Lose Judging":{"note":"","data":["801F53AE 0000"],"options":null},"P2 Always Win Judging":{"note":"","data":["801F53AE 00FF"],"options":null}},"AF7C97CF-24755D18-C:00":{"Infinite 9 Credits":{"note":"","data":["80091A0B 0009"],"options":null}},"AF8679B6-5E1011BF-C:4A":{"Freeze Round Timer":{"note":"","data":["8009D4B4 0000"],"options":null},"Player 1\\Infinite Health":{"note":"","data":["81105026 03E8"],"options":null},"Player 1\\Max Tech Points":{"note":"","data":["811071A0 000F","811071A2 423F","811071A4 000F","811071A6 423F","811071A8 0000","811071AA 0000","811071AC 000F","811071AE 423F"],"options":null},"Player 2\\Infinite Health":{"note":"","data":["8111B3BE 03E8"],"options":null},"Player 2\\Max Tech Points":{"note":"","data":["8111D538 000F","8111D53A 423F","8111D53C 000F","8111D53E 423F","8111D540 0000","8111D542 0000","8111D544 000F","8111D546 423F"],"options":null},"{Unlock All Extras }":{"note":"","data":["8009D48F 00FF"],"options":null}},"B00903C9-3916C146-C:4A":{"Always 1st":{"note":"","data":["8013CC10 0001"],"options":null},"Freeze All Lap Timers":{"note":"","data":["8013CBD1 0001","8013CBD5 0001","8013CBD9 0001"],"options":null},"Freeze Overall Timer":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8013CBC5 0001"],"options":null},"Laps Of Race":{"note":"","data":["8013CBBE 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","Never Ending Laps":"06"}},"Level Select":{"note":"For this cheat to work,as soon as you put the cheat on you must turn it back off,if not you wont beable to quit a Race or even finish one.","data":["8013CECB 00??"],"options":{"Bikini Island":"01","Canyon Rush":"00","China Town":"02","China Town Jam":"04","Neo Arena":"03","Neo Speed Way":"05"}},"Music Modifier":{"note":"","data":["80106B7C 00??"],"options":{"Music Off":"00","Music On":"FF"}},"No Damage\\Player 1":{"note":"","data":["50000402 0000","8113CF08 0000"],"options":null},"No Damage\\Player 2":{"note":"","data":["50000402 0000","8113EF98 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["8013CEC5 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Play As\\Player 2":{"note":"","data":["8013CEC6 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Unlock All Tracks and Vehicles":{"note":"","data":["8008D0AC 0001"],"options":null}},"B044B569-373C1985-C:50":{"Always Have Wallet Size":{"note":"","data":["80118472 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C64F5 0010","81119736 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["801192B9 00FF","8011972F 00??"],"options":{"Off":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C64F5 0000","801197E3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["80023414 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["80118456 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["80118457 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["80118458 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["80118459 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023D6DF 0020","8023D6E5 0033"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F12C8 0005","801EDD08 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["80118472 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["80118473 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["80118471 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111846C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["81118474 30FF","81118476 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["80118448 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011844E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["80118454 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011844C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["80118446 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["80118450 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["80118445 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["80118444 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["80118447 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011844A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011844D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["80118451 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["80118452 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["80118449 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011844F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["80118455 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["80118453 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011844B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011845F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["50000B01 0000","80118478 0007","50000501 0000","8011848F 0009","80118497 0009","80118499 0009","8011849C 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["80118464 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011845E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011845D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["80118462 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011845C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118400 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118409 0008","8011840A 0001","8011840C 0001","80118403 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011846A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111979C 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["801197A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["801197A5 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C64F5 0020","811D8AE0 40CB","D01C64F5 0000","811D92F2 000D","80118440 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["801197D9 00??"],"options":{"English":"00","French":"02","German":"01"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011849F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["801184A1 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["811183FE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["801D851B ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C64F5 0020","811D92F2 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C64F5 0020","811D8AE0 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C64F5 0010","801183D7 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["811183DC ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011845A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011845B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["80118440 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011840E 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["811195F2 0000","811195F4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119765 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119765 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119765 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119765 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"B088FBB4-441E4B1D-C:50":{"Access\\All Lures":{"note":"Codes To Be Used With Save Slot 1","data":["8019A1A9 0003","8119A1AA FFFF"],"options":null},"Access\\All Poles 2":{"note":"Codes To Be Used With Slot 1","data":["8019A1AC 0007"],"options":null},"Access\\Extra Boat 2":{"note":"Codes To Be Used With Slot 1","data":["8019A1AD 0001"],"options":null},"All Lakes Available":{"note":"","data":["80119800 0001"],"options":null},"Easy Win Current Tournament":{"note":"","data":["8011980F 0001"],"options":null},"Extra $300":{"note":"","data":["8011980B 0001"],"options":null},"Fish Are More Active":{"note":"","data":["80119807 0001"],"options":null},"Large Fish":{"note":"","data":["80119806 0001"],"options":null},"More fish in Lakes":{"note":"","data":["8011980D 0001"],"options":null},"No Penalties During Tournamet":{"note":"","data":["80119808 0001"],"options":null},"No Snags While Fishing":{"note":"","data":["80119809 0001"],"options":null},"Super Lure":{"note":"","data":["8011980E 0001"],"options":null},"Unbreakable Line":{"note":"","data":["80119805 0001"],"options":null}},"B19AD999-7E585118-C:45":{"Have\\Alpine Challenge Track":{"note":"","data":["801256DF 0001"],"options":null},"Have\\Aztec Valley Track":{"note":"","data":["801256BF 0001"],"options":null},"Have\\Death Trap Track":{"note":"","data":["801256FF 0001"],"options":null},"Infinite Missiles (Upon Pickup)":{"note":"","data":["D0164BBF 0001","801A6054 0009"],"options":null}},"B2055FBD-0BAB4E0C-C:50":{"Always Have Wallet Size":{"note":"","data":["801184B2 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C6535 0010","81119776 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["801192F9 00FF","8011976F 00??"],"options":{"Off":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C6535 0000","80119823 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["80023454 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["80118496 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["80118497 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["80118498 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["80118499 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023D71F 0020","8023D725 0033"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1308 0005","801EDD48 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801184B2 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801184B3 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801184B1 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811184AC 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811184B4 30FF","811184B6 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["80118488 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011848E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["80118494 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011848C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["80118486 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["80118490 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["80118485 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["80118484 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["80118487 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011848A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011848D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["80118491 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["80118492 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["80118489 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011848F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["80118495 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["80118493 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011848B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011849F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["50000B01 0000","801184B8 0007","50000501 0000","801184CF 0009","801184D7 0009","801184D9 0009","801184DC 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801184A4 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011849E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011849D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801184A2 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011849C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118440 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118449 0008","8011844A 0001","8011844C 0001","80118443 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801184AA 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["811197DC 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["801197E1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["801197E5 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C6535 0020","811D8B20 40CB","D01C6535 0000","811D9332 000D","80118480 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119819 00??"],"options":{"English":"00","French":"02","German":"01"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["801184DF 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["801184E1 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111843E 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["811197D8 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C6535 0020","811D9332 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C6535 0020","811D8B20 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C6535 0010","80118417 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111841C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011849A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011849B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["80118480 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011844E 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119632 0000","81119634 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"B20F73B6-2975FC34-C:45":{"Enemies Fight Themselves":{"note":"","data":["8005EE9C 0020"],"options":null},"Have\\All Weapons \u0026 Ammo":{"note":"","data":["8115D06E 0001","8116368E 0001"],"options":null},"Have\\Invisible Soldier":{"note":"you are Invisible to most enimies who just can not dectect or see you.","data":["8115D052 0001"],"options":null},"Have\\Large Mode":{"note":"Do not use with Mini Mode only use one at a time","data":["811636AE 0001"],"options":null},"Have\\Mini Mode":{"note":"Do not use with Big Mode only use one at a time","data":["8115D06A 0001"],"options":null},"Infinite\\Continues":{"note":"","data":["8115D062 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8135C516 0600"],"options":null},"Move Faster":{"note":"","data":["800B9705 00FF","800B9749 00FF"],"options":null},"Play Level":{"note":"","data":["81172C0A 0001","810B51AE 00??"],"options":{"Bed":"0B","Bridge":"02","Cashier":"0D","Castle":"07","Desk":"0A","Dinner":"01","Freezer":"04","Fridge":"03","Graveyard":"06","Insidewall":"05","Pinball":"11","Pool":"10","Revenge":"09","Rockets":"0F","Tanbase":"08","Town":"0C","Train":"0E"}},"Play as":{"note":"","data":["81164372 00??"],"options":{"Big Green One":"07","Hail Mendheimicus":"0C","Mini Soldier":"0D","Mystery Women":"0B","Plastro":"09","Vikki":"08"}}},"B210DF19-98B58D1A-C:50":{"Access\\All Guns":{"note":"","data":["8015E0CF 0001"],"options":null},"Access\\Max Ammo":{"note":"","data":["801646EF 0001"],"options":null},"Enable Cheat Menu":{"note":"Enable before you enter in game and you will find the cheat menu when you press the Start Button","data":["8003F36F 0003","8004719F 0003"],"options":null},"Enable Level Select Menu":{"note":"This must be used with Enable Cheat Menu and enabled before you enter in game and you will find the level select menu replaces the cheat menu when you press the Start Button","data":["810AF0BA DC38"],"options":null},"Have\\Debug Mode":{"note":"When this code is activated, a display of numbers will show on the screen as the players move around","data":["8015E417 0001"],"options":null},"Have\\Large Mode":{"note":"Do not use with Mini Mode only use one at a time","data":["8016470F 0001"],"options":null},"Have\\Mini Mode":{"note":"Do not use with Large Mode only use one at a time","data":["8015E0C9 0001"],"options":null},"Infinite\\Continues":{"note":"","data":["8015E0C3 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8016471F 0001"],"options":null},"Invisible Soldier":{"note":"you are Invisible to most enimies who just can not dectect or see you.","data":["8015E0B3 0001"],"options":null},"Play As":{"note":"Here you can choose who you would like to play as. But Do not use this with any other play as option..","data":["811653D2 00??"],"options":{"Plastro":"09","The Big Green One":"07","Vikki":"08"}}},"B2242748-FFBD61DA-C:45":{"(Everything Unlocked)\\Save File 1":{"note":"This Unlocks All Levels and Cheat Menu Items","data":["50002902 0000","810699EE ????"],"options":{"Clear Save Slot":"0000","Unlocked":"FFFF"}},"(Everything Unlocked)\\Save File 2":{"note":"This Unlocks All Levels and Cheat Menu Items","data":["50002902 0000","8106992E ????"],"options":{"Clear Save Slot":"0000","Unlocked":"FFFF"}},"(Everything Unlocked)\\Save File 3":{"note":"This Unlocks All Levels and Cheat Menu Items","data":["50002902 0000","81069A4E ????"],"options":{"Clear Save Slot":"0000","Unlocked":"FFFF"}},"(Everything Unlocked)\\Save File 4":{"note":"This Unlocks All Levels and Cheat Menu Items","data":["50002902 0000","8106998E ????"],"options":{"Clear Save Slot":"0000","Unlocked":"FFFF"}},"Have All\\64 Characters In Multi Player":{"note":"Enables all Characters selectable to play as in Multi-Player","data":["8002B197 0040"],"options":null},"Have All\\Objectives Complete":{"note":"","data":["80036FD3 0001"],"options":null},"Infinite\\Ammo (All Levels)":{"note":"","data":["80079E3B 0001"],"options":null},"Infinite\\Health (All levels)":{"note":"","data":["8100C0F4 0801","8100C0F6 8090","8100C0F8 AFA4","8100C0FA 0000","81060240 0004","81060242 7600","81060244 3C02","81060246 8008","81060248 8C42","8106024A 9EE0","8106024C 3401","8106024E 3F80","81060250 A441","81060252 00DC","81060254 0800","81060256 303F"],"options":null}},"B30ED978-3003C9F9-C:45":{"Cool Camera":{"note":"","data":["800E523E 0000"],"options":null},"Expert Mode":{"note":"","data":["800E5ED9 0000","812C4B48 0000","812C4B4C 0000"],"options":null},"Have Boost From Start":{"note":"","data":["D02C4DAC 003F","802C4925 0050"],"options":null},"Hunk O' Junk":{"note":"","data":["802C4B3F 0040"],"options":null},"Infinite Lives":{"note":"","data":["800E5ED9 0005"],"options":null},"Max Grand Prix Points":{"note":"","data":["812C492A FFFF"],"options":null},"Max Shield":{"note":"","data":["812C4B4C 4326"],"options":null},"One Lap To Race":{"note":"","data":["D02C4BC9 0000","812C4BC8 0002","D02C4BCB 0001","812C4BCA 0002"],"options":null},"Player 1\\Car Color Modifier":{"note":"","data":["802C4BED 00??"],"options":{"1st Color":"00","2nd Color":"01","3rd Color":"02","4th Color":"03","Hidden Color":"05"}},"Player 1\\Character Modifier":{"note":"","data":["800E5EE1 00??"],"options":{"Antonio Guster":"0E","Baba":"07","Beastman":"15","Billy":"1B","Bio Rex":"19","Black Shadow":"0F","Blood Falcon":"1D","Captain Falcon":"00","Dr. Clash":"17","Dr. Stewart":"01","Draq":"1A","Gomar + Shioh":"09","Jack Levin":"11","James McCloud":"0C","Jody Summer":"04","John Tanaka":"14","Kate Alen":"0A","Leon":"0D","Michael Chain":"10","Mighty Gazelle":"05","Mr. EAD":"06","Mrs. Arrow":"13","Octoman":"08","Perfect Captain Falcon":"1E","Pico":"02","Roger Buster":"0B","Samurai Goroh":"03","Silver Neelsen":"18","Super Arrow":"12","The Skull":"1C","Zoda":"16"}},"Player 1\\Infinite Shield":{"note":"","data":["812C4B48 4326"],"options":null},"Player 1\\Invisible Car":{"note":"Vs. Mode Only","data":["802C4CCB 0000"],"options":null},"Player 2\\Car Color Modifier":{"note":"","data":["802C4F95 00??"],"options":{"1st Color":"00","2nd Color":"01","3rd Color":"02","4th Color":"03","Hidden Color":"05"}},"Player 2\\Character Modifier":{"note":"","data":["802C4F90 00??"],"options":{"Antonio Guster":"0E","Baba":"07","Beastman":"15","Billy":"1B","Bio Rex":"19","Black Shadow":"0F","Blood Falcon":"1D","Captain Falcon":"00","Dr. Clash":"17","Dr. Stewart":"01","Draq":"1A","Gomar + Shioh":"09","Jack Levin":"11","James McCloud":"0C","Jody Summer":"04","John Tanaka":"14","Kate Alen":"0A","Leon":"0D","Michael Chain":"10","Mighty Gazelle":"05","Mr. EAD":"06","Mrs. Arrow":"13","Octoman":"08","Perfect Captain Falcon":"1E","Pico":"02","Roger Buster":"0B","Samurai Goroh":"03","Silver Neelsen":"18","Super Arrow":"12","The Skull":"1C","Zoda":"16"}},"Player 2\\Infinite Shield":{"note":"","data":["812C4EF0 4326"],"options":null},"Player 3\\Car Color Modifier":{"note":"","data":["802C533D 00??"],"options":{"1st Color":"00","2nd Color":"01","3rd Color":"02","4th Color":"03","Hidden Color":"05"}},"Player 3\\Character Modifier":{"note":"","data":["802C5338 00??"],"options":{"Antonio Guster":"0E","Baba":"07","Beastman":"15","Billy":"1B","Bio Rex":"19","Black Shadow":"0F","Blood Falcon":"1D","Captain Falcon":"00","Dr. Clash":"17","Dr. Stewart":"01","Draq":"1A","Gomar + Shioh":"09","Jack Levin":"11","James McCloud":"0C","Jody Summer":"04","John Tanaka":"14","Kate Alen":"0A","Leon":"0D","Michael Chain":"10","Mighty Gazelle":"05","Mr. EAD":"06","Mrs. Arrow":"13","Octoman":"08","Perfect Captain Falcon":"1E","Pico":"02","Roger Buster":"0B","Samurai Goroh":"03","Silver Neelsen":"18","Super Arrow":"12","The Skull":"1C","Zoda":"16"}},"Player 3\\Infinite Shield":{"note":"","data":["812C5298 4326"],"options":null},"Player 4\\Car Color Modifier":{"note":"","data":["802C56E5 00??"],"options":{"1st Color":"00","2nd Color":"01","3rd Color":"02","4th Color":"03","Hidden Color":"05"}},"Player 4\\Character Modifier":{"note":"","data":["802C56E0 00??"],"options":{"Antonio Guster":"0E","Baba":"07","Beastman":"15","Billy":"1B","Bio Rex":"19","Black Shadow":"0F","Blood Falcon":"1D","Captain Falcon":"00","Dr. Clash":"17","Dr. Stewart":"01","Draq":"1A","Gomar + Shioh":"09","Jack Levin":"11","James McCloud":"0C","Jody Summer":"04","John Tanaka":"14","Kate Alen":"0A","Leon":"0D","Michael Chain":"10","Mighty Gazelle":"05","Mr. EAD":"06","Mrs. Arrow":"13","Octoman":"08","Perfect Captain Falcon":"1E","Pico":"02","Roger Buster":"0B","Samurai Goroh":"03","Silver Neelsen":"18","Super Arrow":"12","The Skull":"1C","Zoda":"16"}},"Player 4\\Infinite Shield":{"note":"","data":["812C5640 4326"],"options":null},"Show 30 Cars Out Of 1 Position":{"note":"","data":["800E5FC7 001D"],"options":null},"Super Ultimate Mega Fast Mode":{"note":"","data":["812C4984 2222"],"options":null},"Time Always 00.00.00/1st Place":{"note":"","data":["802C4BC0 0000","802C4BC2 0001"],"options":null},"Track Modifier":{"note":"","data":["800F8517 00??"],"options":{"Big Blue":"04","Big Blue 2":"0A","Big Hand":"17","Devils Forest":"03","Devils Forest 2":"08","Devils Forest 3":"13","Fire Field":"0C","Mute City":"00","Mute City 2":"11","Port Town":"05","Port Town 2":"16","Rainbow Road":"12","Red Canyon":"0F","Sand Ocean":"02","Sand Ocean 2":"15","Sector Alpha":"06","Sector Beta":"0E","Silence":"01","Silence 2":"0D","Space Plant":"14","White Land":"0B","White Land 2":"10"}},"Unlock Everything":{"note":"","data":["800CD3C8 0001"],"options":null}},"B323E37C-BBC35EC4-C:00":{"Have Infinite Max Credits":{"note":"","data":["802C9FE1 0099"],"options":null}},"B3402554-7340C004-C:45":{"Car Upgrades\\'63 Muscle Car":{"note":"","data":["8015056F 0005"],"options":null},"Car Upgrades\\All-Terrain Vehicle":{"note":"","data":["8015057F 0004"],"options":null},"Car Upgrades\\Devastator":{"note":"","data":["80150577 0005"],"options":null},"Car Upgrades\\Italia P69":{"note":"","data":["8015057B 0005"],"options":null},"Car Upgrades\\La Bomba":{"note":"","data":["80150573 0005"],"options":null},"Car Upgrades\\Police Car":{"note":"","data":["80150587 0004"],"options":null},"Car Upgrades\\School Bus":{"note":"","data":["80150583 0004"],"options":null},"Infinite Time":{"note":"","data":["8015097D 0095"],"options":null},"Play Level Modifier":{"note":"","data":["80150993 00??"],"options":{"Appalachia":"0C","Arizona":"07","Beverly Hills":"04","Chicago":"0A","Cruise The USA":"0E","Death Valley":"06","Golden Gate Park":"00","Grand Canyon":"08","Indiana":"0B","Iowa":"09","LA Freeway":"05","Redwood Forest":"03","San Francisco":"01","US 101":"02","Washington DC":"0D"}},"Player 1\\Always First Place":{"note":"","data":["8015025B 0001"],"options":null},"Player 1\\Always Have Fastest Car":{"note":"","data":["8015024A 0001"],"options":null},"Player 1\\Gearbox Type Modifier":{"note":"","data":["80150243 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 1\\Lights \u0026 Sirens For Police Car \u0026 School Bus":{"note":"","data":["8115056A 0001","8114E3BA 0001"],"options":null},"Player 2\\Always First Place":{"note":"","data":["801505F7 0001"],"options":null},"Player 2\\Always Have Fastest Car":{"note":"","data":["801505E6 0001"],"options":null},"Player 2\\Gearbox Type Modifier":{"note":"","data":["801505DF 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 2\\Lights \u0026 Sirens For Police Car \u0026 School Bus":{"note":"","data":["81150906 0001","8114E3D2 0001"],"options":null},"Stop Elapsed Time And No Traffic":{"note":"","data":["80150979 0000"],"options":null}},"B35FEBB0-7427B204-C:46":{"Earn Spirits Faster":{"note":"","data":["8007D3AD 0000"],"options":null},"Have All Elements":{"note":"","data":["8107D39C 3232","8107D39E 3232"],"options":null},"Makes your HP 999-999":{"note":"","data":["8107D37C 03E7","8107D37E 03E7"],"options":null},"Makes your MP 999-999":{"note":"","data":["8107D380 03E7","8107D382 03E7"],"options":null},"No Random Battles":{"note":"","data":["8008DE6C 0000","8008DE6E 0000"],"options":null},"Set Agility to 999-999":{"note":"","data":["8107D384 03E7"],"options":null},"Set Defence to 999-999":{"note":"","data":["8107D386 03E7"],"options":null}},"B3D451C6-E1CB58E2-C:4A":{"Decrease Fodder":{"note":"","data":["81180BB4 03E7"],"options":null},"Decrease Material":{"note":"","data":["8118A2F0 03E7"],"options":null},"Max Money":{"note":"","data":["811FDA9C 000F","811FDA9E 423F"],"options":null}},"B443EB08-4DB31193-C:45":{"All Equipment Upgrades":{"note":"","data":["801ED89D 0023","811ED8EA 201B","801ED87C 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D038127B 0000","801ED832 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801ED8B2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801ED8B3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801ED8B4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801ED8B5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801ED8B6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801ED8B7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801ED8A5 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801ED8AB 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801ED8B1 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Fight Demo Majora's Mask":{"note":"With this code,load the game \u0026 put the cheat on. then press start to apear in the Demo mode.","data":["801688D8 0020"],"options":null},"Fog\\Blue":{"note":"","data":["801642C8 0020"],"options":null},"Fog\\Pink":{"note":"","data":["801642CC 0020"],"options":null},"Fog\\Yellow":{"note":"","data":["801642D0 0020"],"options":null},"Have\\All Masks":{"note":"","data":["801ED8B8 003E","801ED8B9 0038","801ED8BA 0047","801ED8BB 0045","801ED8BC 0040","801ED8BD 0032","801ED8BE 003A","801ED8BF 0046","801ED8C0 0039","801ED8C1 0042","801ED8C2 0048","801ED8C3 0033","801ED8C4 003C","801ED8C5 003D","801ED8C6 0037","801ED8C7 003F","801ED8C8 0036","801ED8C9 0034","801ED8CA 0043","801ED8CB 0041","801ED8CC 003B","801ED8CD 0044","801ED8CE 0049","801ED8CF 0035"],"options":null},"Have\\All Quest Status Items":{"note":"","data":["801ED8ED 0005","811ED8EE F7CF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801ED8A2 0002"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801ED8A3 0003"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801ED8A4 0004"],"options":null},"Have\\Bombchu":{"note":"","data":["801ED8A7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801ED8A6 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801ED8A9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801ED8A8 0008"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801ED8B0 0010"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801ED8A1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801ED8AF 000F"],"options":null},"Have\\Item Modifier":{"note":"","data":["801ED8B0 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\Lens of Truth":{"note":"","data":["801ED8AE 000E"],"options":null},"Have\\Magic Beans":{"note":"","data":["801ED8AA 000A"],"options":null},"Have\\Ocarina of Time":{"note":"","data":["801ED8A0 0000"],"options":null},"Have\\Pictograph":{"note":"","data":["801ED8AD 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801ED8AC 000C"],"options":null},"Infinite\\Health":{"note":"","data":["811ED866 0140"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811ED864 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"","data":["801ED8D1 0063","50000501 0000","801ED8D6 0063","50000201 0000","801ED8DC 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801ED869 0060","811ED870 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811ED86A 03E7"],"options":null},"Maximum Visibility":{"note":"","data":["801642D8 0020"],"options":null},"Play As":{"note":"","data":["801ED850 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D038127B 0020","8139A558 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You have been warned.","data":["801ED87C 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F88A0 0008","811ED846 FFFD","D01F88A0 0004","811ED846 0000","D01F88A0 0002","811ED846 FFFE"],"options":null},"Use C-Buttons Anywhere":{"note":"This code allows you to use C-Button Items where you normally can't use them.","data":["811F1748 0000","811F174A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["D03E4CFA 0000","803FD555 0001","813FD55A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"B44CAB74-07029A29-C:50":{"For More Time Press D-pad up":{"note":"","data":["D00EA380 0008","8115F0D2 1724","D00EA380 0008","8115F0DA 003C"],"options":null},"Infinite Options\\Freezing Breath":{"note":"","data":["8122CDE8 42C8"],"options":null},"Infinite Options\\Health":{"note":"","data":["8122CDD4 42C8"],"options":null},"Infinite Options\\Laser Eye":{"note":"","data":["8122CDE4 42C8"],"options":null},"Infinite Options\\Running Boosts":{"note":"","data":["8122CDDC 42C8"],"options":null},"Infinite Options\\X-Ray Vision":{"note":"","data":["8122CDE0 42C8"],"options":null},"Level Select":{"note":"","data":["D00EA380 0020","8117A378 0013","D00EA380 0020","8117A388 000F","81144727 0063"],"options":null}},"B54CE881-BCCB6126-C:45":{"Hole In One\\Hole 01":{"note":"","data":["800FF713 0000"],"options":null},"Hole In One\\Hole 02":{"note":"","data":["800FF715 0000"],"options":null},"Hole In One\\Hole 03":{"note":"","data":["800FF717 0000"],"options":null},"Hole In One\\Hole 04":{"note":"","data":["800FF719 0000"],"options":null},"Hole In One\\Hole 05":{"note":"","data":["800FF71B 0000"],"options":null},"Hole In One\\Hole 06":{"note":"","data":["800FF71D 0000"],"options":null},"Hole In One\\Hole 07":{"note":"","data":["800FF71F 0000"],"options":null},"Hole In One\\Hole 08":{"note":"","data":["800FF721 0000"],"options":null},"Hole In One\\Hole 09":{"note":"","data":["800FF723 0000"],"options":null},"Hole In One\\Hole 10":{"note":"","data":["800FF725 0000"],"options":null},"Hole In One\\Hole 11":{"note":"","data":["800FF727 0000"],"options":null},"Hole In One\\Hole 12":{"note":"","data":["800FF729 0000"],"options":null},"Hole In One\\Hole 13":{"note":"","data":["800FF72B 0000"],"options":null},"Hole In One\\Hole 14":{"note":"","data":["800FF72D 0000"],"options":null},"Hole In One\\Hole 15":{"note":"","data":["800FF72F 0000"],"options":null},"Hole In One\\Hole 16":{"note":"","data":["800FF731 0000"],"options":null},"Hole In One\\Hole 17":{"note":"","data":["800FF733 0000"],"options":null},"Hole In One\\Hole 18":{"note":"","data":["800FF735 0000"],"options":null}},"B58988E9-B1FC4BE8-C:50":{"Always 1st":{"note":"","data":["812C4DC6 0001"],"options":null},"Have All\\Races":{"note":"","data":["812B5DC4 0101","812B5DC6 0101","812B5DC8 0101","812B5DCA 0101","812B5DCC 0101","812B5DCE 0101","812B5DD0 0101"],"options":null},"Have All\\Ships":{"note":"","data":["812B5DD2 0101","812B5DD4 0101","812B5DD6 0101","812B5DD8 0101","812B5DDA 0101","812B5DDC 0101","812B5DDE 0101"],"options":null},"Infinite\\Boosts\\Player 1":{"note":"","data":["812C4DCC 4190"],"options":null},"Infinite\\Boosts\\Player 2":{"note":"","data":["812C50FC 4190"],"options":null},"Infinite\\Time":{"note":"","data":["812B49C0 42C8"],"options":null}},"B6524461-ED6D04B1-C:50":{"Infinite Health\\Player 1":{"note":"","data":["80225E9D 00FA"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["80225E9F 00FA"],"options":null},"Infinite Time":{"note":"","data":["80225EA5 003C"],"options":null},"Win Once To Win\\Player 1":{"note":"","data":["80225E95 0001"],"options":null},"Win Once To Win\\Player 2":{"note":"","data":["80225E97 0001"],"options":null}},"B6951A94-63C849AF-C:4A":{"Have All Items":{"note":"","data":["50000501 0000","80389C4A 0001","50000301 0000","80389C51 0001","80389C5A 0001","80389C5B 0001","80389C5D 0001","50000E01 0000","80389C60 0001"],"options":null},"Have\\Exp Points":{"note":"","data":["80389C49 0063"],"options":null},"Have\\Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C3F 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C45 0001","81389C46 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C3E 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C49 0063"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C48 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the GS button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C90 ????","89389C92 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CED 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C88 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C88 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C3D 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C42 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"B6BC0FB0-E3812198-C:4A":{"All Levels\\Infinite\\Energy":{"note":"","data":["800D5A9B 00FF"],"options":null},"All Levels\\Infinite\\Max Credits":{"note":"","data":["80075DDC 00FF"],"options":null},"All Levels\\Infinite\\Time":{"note":"","data":["800D5A97 0063"],"options":null},"All Levels\\Unlock All\\Levels - Options Menu":{"note":"","data":["80075DD6 FFFF","80075DD7 FFFF"],"options":null},"All Levels\\Unlock All\\Option Menu Items":{"note":"","data":["80075DD8 FFFF","80075DD9 FFFF"],"options":null},"Level\\0-0\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["8010BB0C 0000"],"options":null},"Level\\0-0\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8010BB2B 0001"],"options":null},"Level\\1-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801657DC 0000"],"options":null},"Level\\1-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801657FB 0001"],"options":null},"Level\\1-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCF9C 0000"],"options":null},"Level\\1-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCFBB 0001"],"options":null},"Level\\1-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801126EC 0000"],"options":null},"Level\\1-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8011270B 0001"],"options":null},"Level\\2-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BD29C 0000"],"options":null},"Level\\2-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801BD2BB 0001"],"options":null},"Level\\2-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B911C 0000"],"options":null},"Level\\2-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B913B 0001"],"options":null},"Level\\2-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7CEC 0000"],"options":null},"Level\\2-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7D0B 0001"],"options":null},"Level\\3-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801588EC 0000"],"options":null},"Level\\3-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8015890B 0001"],"options":null},"Level\\3-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B936C 0000"],"options":null},"Level\\3-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B938B 0001"],"options":null},"Level\\3-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801013CC 0000"],"options":null},"Level\\3-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["81100E08 C350"],"options":null}},"B703EB23-28AAE53A-C:4A":{"Infinite\\Lives":{"note":"","data":["800A37C8 0009"],"options":null},"Infinite\\Specials":{"note":"","data":["800A37C9 0003"],"options":null},"Max\\Combo":{"note":"","data":["810A37C4 7FFF"],"options":null},"Max\\Lower Level":{"note":"","data":["800A37D8 0003"],"options":null},"Max\\Score":{"note":"","data":["800A37A8 03E7","800A37A9 03E7"],"options":null},"Max\\Upper Level":{"note":"","data":["800A37D9 0063"],"options":null},"Play As":{"note":"","data":["800A37CC 00??"],"options":{"Character 1":"00","Character 2":"01","Character 3":"02"}},"Status Modifier":{"note":"","data":["800A37CA 00??"],"options":{"High":"01","Low":"03","Mid":"02"}}},"B73AB6F6-296267DD-C:45":{"All Levels\\Infinite\\Energy":{"note":"","data":["800D5A9B 00FF"],"options":null},"All Levels\\Infinite\\Max Credits":{"note":"","data":["80075DDC 00FF"],"options":null},"All Levels\\Infinite\\Time":{"note":"","data":["800D5A97 0063"],"options":null},"All Levels\\Unlock All\\Levels - Options Menu":{"note":"","data":["80075DD6 FFFF","80075DD7 FFFF"],"options":null},"All Levels\\Unlock All\\Option Menu Items":{"note":"","data":["80075DD8 FFFF","80075DD9 FFFF"],"options":null},"Level\\0-0\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time and only use for that specific level Cheat","data":["8010BB0C 0000"],"options":null},"Level\\0-0\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8010BB2B 0001"],"options":null},"Level\\1-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801657DC 0000"],"options":null},"Level\\1-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801657FB 0001"],"options":null},"Level\\1-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCF9C 0000"],"options":null},"Level\\1-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCFBB 0001"],"options":null},"Level\\1-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801126EC 0000"],"options":null},"Level\\1-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8011270B 0001"],"options":null},"Level\\2-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BD29C 0000"],"options":null},"Level\\2-1\\Invincible":{"note":"","data":["801BD2BB 0001"],"options":null},"Level\\2-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B911C 0000"],"options":null},"Level\\2-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B913B 0001"],"options":null},"Level\\2-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7CEC 0000"],"options":null},"Level\\2-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7D0B 0001"],"options":null},"Level\\3-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801588EC 0000"],"options":null},"Level\\3-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8015890B 0001"],"options":null},"Level\\3-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B936C 0000"],"options":null},"Level\\3-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B938B 0001"],"options":null},"Level\\3-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801013CC 0000"],"options":null},"Level\\3-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["81100E08 C350"],"options":null}},"B7CF2136-FA0AA715-C:50":{"Access All In-Game Cheats":{"note":"In Set-Up Menu","data":["810C48F8 0100"],"options":null},"Access Midway Track":{"note":"","data":["810C4890 03E7"],"options":null},"Activate All In-Game Cheats":{"note":"","data":["50000E02 0000","810C48A4 FFFF"],"options":null},"All Keys,Cars \u0026 Cans":{"note":"","data":["50000E02 0000","810C4574 FFFF"],"options":null},"Always 1st":{"note":"","data":["80115499 0000"],"options":null},"Best Stunt Points":{"note":"On Track","data":["8110B438 03E7"],"options":null},"Easy Difficulty":{"note":"","data":["8010FFAA 0000"],"options":null},"Laps To Race":{"note":"","data":["811088D0 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Max \u0026 Best Score":{"note":"On Stunt Track","data":["50000502 0000","810C4702 FFFF"],"options":null},"Max Points In Total":{"note":"","data":["810E235A 03E7"],"options":null},"No\\Checkpoints Extended Time":{"note":"","data":["8010FF47 0000"],"options":null},"No\\Wind":{"note":"","data":["80116E98 0000"],"options":null},"Number Of Drones In Race":{"note":"","data":["810E1B88 00??"],"options":{"1 Drone":"01","2 Drones":"02","3 Drones":"03","4 Drones":"04","5 Drones":"05","6 Drones":"06","7 Drones":"07","8 Drones":"08","9 Drones":"09"}}},"B7F40BCF-553556A5-C:45":{"Have Spells\\Ball Bearing":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA67C 0006"],"options":null},"Have Spells\\Balloon":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA7BC 0006"],"options":null},"Have Spells\\Bowling Ball":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA5FC 0006"],"options":null},"Have Spells\\Boxing Glove":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA8BC 000E"],"options":null},"Have Spells\\Bungee":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA77C 000E"],"options":null},"Have Spells\\Fat Glover":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA97C 001E"],"options":null},"Have Spells\\First Aid":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA93C 001E"],"options":null},"Have Spells\\Gauntlet":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA87C 001E"],"options":null},"Have Spells\\Glass Cutter":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA8FC 000E"],"options":null},"Have Spells\\Possess":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA83C 0006"],"options":null},"Have Spells\\Rubber Ball":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["801DA5BC 0006"],"options":null},"Have Spells\\Speed-Up":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA6FC 000E"],"options":null},"Have Spells\\Sucker Ball":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA63C 000E"],"options":null},"Have Spells\\Super-Slam":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA7FC 0016"],"options":null},"Have Spells\\Teleport":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA73C 000E"],"options":null},"Have Spells\\Yo-Yo":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA6BC 0016"],"options":null},"Infinite\\Max Health":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["8027069B 0006","8027069D 0006","802881CB 0006"],"options":null},"Infinite\\Max Lives":{"note":"","data":["80288127 00FF","80270697 00FF"],"options":null},"Infinite\\Max Magical\\Ball Energy":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["802706A3 00FF","80288313 00FF"],"options":null},"Infinite\\Max Magical\\Spell Energy":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["802706A1 00FF","8028826F 00FF"],"options":null},"Infinite\\Max Rank Bonus":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["802706FD 00FF","802883B7 00FF"],"options":null}},"B8F0BD03-4479189E-C:50":{"Access All Tracks In Match Mode":{"note":"","data":["50000602 0000","810A9080 0001"],"options":null},"Access all Gold Trophies":{"note":"Championshp \u0026 Match Mode","data":["50000602 0000","810A9078 0000"],"options":null},"Always 1st":{"note":"","data":["800A9107 0000"],"options":null},"Infinite Time":{"note":"","data":["8009498F 003C"],"options":null}},"B9A9ECA2-17AAE48E-C:45":{"Always Place 1st":{"note":"","data":["80152906 0000"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 1":{"note":"","data":["8113A110 FFFF"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 2":{"note":"","data":["8113A170 FFFF"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 4":{"note":"","data":["8113A230 FFFF"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 5":{"note":"","data":["8113A290 FFFF"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 6":{"note":"","data":["8113A2F0 FFFF"],"options":null},"Infinate Ammo\\All Players In Battle":{"note":"","data":["80152B9D 0050","80152F55 0050","8015330D 0050","801536C5 0050"],"options":null},"Max Score\\Stunt Mode":{"note":"","data":["8115204E 7FFF"],"options":null},"Speed Activator":{"note":"","data":["D0037AA4 0020","8114A298 ????"],"options":{"146 mph":"4333","170 mph":"4350","210 mph":"4380","270 mph":"4393"}},"Start On Lap Modifier":{"note":"","data":["D014AA38 0000","8014AA38 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Track Modifier":{"note":"","data":["8014978C 00??"],"options":{"Track 1":"00","Track 2":"01","Track 3":"02","Track 4":"03"}},"Unlock All Cheats":{"note":"","data":["50000B02 0000","8111648C 0101"],"options":null}},"B9AF8CC6-DEC9F19F-C:50":{"Access All Levels":{"note":"","data":["8020860E 00FF","80208610 00FF"],"options":null},"Extended Tongue":{"note":"","data":["8133185E FFFF"],"options":null},"Have 99 Crowns":{"note":"","data":["80251857 0063"],"options":null},"Have All Levels Completed":{"note":"","data":["80208612 0019","80208613 0019","80208614 0015","80208615 0018","80208616 0017","80208617 0017"],"options":null},"Infinite Health":{"note":"","data":["80174DF3 000A"],"options":null},"Level Select":{"note":"","data":["8029097B 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06"}}},"BA6C293A-9FAFA338-C:46":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2552 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE03F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","80202535 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE095 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FC9C5 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFDAD 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802025E5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801D9EFD 0001"],"options":null}},"BA780BA0-0F21DB34-C:45":{"Have All Medals":{"note":"For Expert \u0026 Normal Modes","data":["50000802 0000","81178870 7777"],"options":null},"Infinite Boost\\Player 2":{"note":"","data":["8113CB6C 0000","8113CB6E 0000","8113FA4C 0000","8113FA4E 0000"],"options":null},"Infinite Boost\\Player 3":{"note":"","data":["8113D04C 0000","8113D04E 0000","8113FF2C 0000","8113FF2E 0000"],"options":null},"Infinite Boost\\Player 4":{"note":"","data":["8113D52C 0000","8113D52E 0000","8114040C 0000","8114040E 0000"],"options":null},"Infinite Dual Blue Lasers\\Player 2":{"note":"","data":["80161AAF 0002"],"options":null},"Infinite Dual Blue Lasers\\Player 3":{"note":"","data":["80161AB3 0002"],"options":null},"Infinite Dual Blue Lasers\\Player 4":{"note":"","data":["80161AB7 0002"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["8013CB17 00FF","8013F9F7 00FF"],"options":null},"Infinite Health\\Player 3":{"note":"","data":["8013CFF7 00FF","8013FED7 00FF"],"options":null},"Infinite Health\\Player 4":{"note":"","data":["8013D4D7 00FF","801403B7 00FF"],"options":null},"Infinite Smart Bombs\\Player 2":{"note":"","data":["80177DA7 0004"],"options":null},"Infinite Smart Bombs\\Player 3":{"note":"","data":["80177DAB 0004"],"options":null},"Infinite Smart Bombs\\Player 4":{"note":"","data":["80177DAF 0004"],"options":null},"Infinite\\Armor\\Falco":{"note":"","data":["801778B7 00FF"],"options":null},"Infinite\\Armor\\Peppy":{"note":"","data":["801778BF 00FF"],"options":null},"Infinite\\Armor\\Slippy":{"note":"","data":["801778BB 00FF"],"options":null},"Infinite\\Dual Blue Lasers":{"note":"","data":["80161AAB 0002"],"options":null},"Infinite\\Energy\\Player 1":{"note":"For Solo \u0026 Multi Player","data":["8013C637 00FF","8013F517 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["80161AA1 0009"],"options":null},"Level Select":{"note":"","data":["80178237 00??"],"options":{"Aquas":"0D","Area 6":"03","Bolse":"11","Corneria":"00","Corneria (Multi)":"14","Fortuna":"0E","Glitch":"04","Katina":"10","Macbeth":"0B","Meteo":"01","Sector X":"02","Sector Y":"05","Sector Z":"12","Solar":"07","Titania":"0C","Training Mode Level":"0A","Venom 1":"06","Venom 2":"09","Venom With Starwolf":"13","Zoness":"08"}},"Loads O' Hits":{"note":"","data":["80161A9B 00FF"],"options":null},"Unlimited\\Boost":{"note":"","data":["8113C68C 0000","8113C68E 0000","8113F56C 0000","8113F56E 0000"],"options":null},"Unlimited\\Smart Bombs":{"note":"","data":["80177DA3 0004"],"options":null}},"BADDF714-A1FF1B80-C:45":{"Bomb Select":{"note":"","data":["8024A3A1 00??"],"options":{"Blue Remote Bomb":"05","Clear All Special Bombs.":"00","Crazy Bomb":"1D","Invisible Mine Bomb":"07","Jelly Bomb":"03","Power Bomb":"02","Red Beem Bomb":"06","Shock Wave Bomb":"04"}},"Bomberman Speed":{"note":"","data":["8024A3A0 00??"],"options":{"Fast":"0E","Normal":"08","Slow":"04","Turbo":"10"}},"Have\\Infinite\\Kick":{"note":"","data":["8024A3A6 0002"],"options":null},"Have\\Max Bombs":{"note":"","data":["8024A39F 00FF"],"options":null},"Have\\Max Fire":{"note":"","data":["8024A39E 00FF"],"options":null},"Infinite\\Health Hearts":{"note":"","data":["8024A3AE 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["802E1CE7 00FF"],"options":null},"Infinite\\Timer":{"note":"","data":["800FDD72 002A"],"options":null},"Invincible":{"note":"Enemies \u0026 Bomb Blasts cant harm you.But if you walk \u0026 keep laying Bombs it will most likly freeze.so try to avoid constant bombing while walking.Turn cheat to off to go back to normal.","data":["8024A3A8 00??"],"options":{"Off":"00","On":"01"}},"Walk through\\Blocks":{"note":"Walk through Blocks like they are not there.Turn cheat to off to go back to normal.","data":["8024A3A5 00??"],"options":{"Off":"00","On":"01"}},"Walk through\\Bombs":{"note":"Walk through Bombs like they are not there.Turn cheat to off to go back to normal.","data":["8024A3A6 00??"],"options":{"Off":"00","On":"01"}}},"BB30B1A5-FCF712CE-C:45":{"Enable Chasm Freestyle":{"note":"","data":["81071834 0001"],"options":null},"Enable Jim Jam Freestyle":{"note":"","data":["81071838 0001"],"options":null},"Enable Moon Freestyle":{"note":"","data":["8107183C 0001"],"options":null},"Enable Tabletop Freestyle":{"note":"","data":["81071832 0001"],"options":null},"Extra Points":{"note":"","data":["800711E7 00FF"],"options":null}},"BBC99D32-117DAA80-C:45":{"Have All\\Boards":{"note":"","data":["81082A04 0003","81082A06 FFFF"],"options":null},"Have All\\Characters":{"note":"","data":["810829F8 07FF"],"options":null},"Have All\\Difficulties":{"note":"","data":["810829F0 0700"],"options":null},"Have All\\Tracks":{"note":"","data":["810829FC BFFE"],"options":null},"Low Timer":{"note":"","data":["801495FF 0000","80149601 0000"],"options":null},"Max\\50000 Stunt Points":{"note":"","data":["810829B8 C350"],"options":null},"[Audio Fix]":{"note":"","data":["81051840 AD99"],"options":null}},"BCB1F89F-060752A2-C:4A":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D51F0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112CD2E 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800EAFE8 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D51D0 0001","50001701 0000","800D51D8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D5460 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D545F 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D51C9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D51CA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D51CB 0003"],"options":null}},"BCFACCAA-B814D8EF-C:45":{"Player 1 Max Score (Casting Game)":{"note":"","data":["8107A412 FFFF"],"options":null},"Player 2 Max Score (Casting Game)":{"note":"","data":["8107A416 FFFF"],"options":null}},"BD636D6A-5D1F54BA-C:45":{"Away Team scores":{"note":"","data":["800478BB 00??"],"options":{"0 Goals":"00","25 Goals":"19","50 Goals":"32","99 Goals":"63"}},"Home Team scores":{"note":"","data":["800478BF 00??"],"options":{"0 Goals":"00","25 Goals":"19","50 Goals":"32","99 Goals":"63"}},"Open Cup Classic Mode":{"note":"","data":["8003CC6F 0001"],"options":null}},"BD8E206D-98C35E1C-C:4A":{"Day":{"note":"","data":["80136FBF 00??"],"options":{"Friday 12th":"0C","Friday 19th":"13","Friday 26th":"1A","Friday 5th":"05","Monday 15th":"0F","Monday 1st":"01","Monday 22nd":"16","Monday 29th":"1D","Monday 8th":"08","Saturday 13th":"0D","Saturday 27th":"1B","Saturday 30th":"14","Saturday 6th":"06","Sunday 14th":"0E","Sunday 21st":"15","Sunday 28th":"1C","Sunday 7th":"07","Thursday 11th":"0B","Thursday 18th":"12","Thursday 25th":"19","Thursday 4th":"04","Tuesday 16th":"10","Tuesday 23rd":"17","Tuesday 2nd":"02","Tuesday 30th":"1E","Tuesday 9th":"09","Wednesday 10th":"0A","Wednesday 17th":"11","Wednesday 24th":"18","Wednesday 31st":"1F","Wednesday 3rd":"03"}},"Hours":{"note":"","data":["80136FBE 00??"],"options":{"00 AM":"00","00 PM":"0C","01 AM":"01","01 PM":"0D","02 AM":"02","02 PM":"0E","03 AM":"03","03 PM":"0F","04 AM":"04","04 PM":"10","05 AM":"05","05 PM":"11","06 AM":"06","06 PM":"12","07 AM":"07","07 PM":"13","08 AM":"08","08 PM":"14","09 AM":"09","09 PM":"15","10 AM":"0A","10 PM":"16","11 AM":"0B","11 PM":"17"}},"Item Select":{"note":"","data":["81126EE8 ????"],"options":{"100 Bag":"2103","1000 Bag":"2100","10000 Bag":"2101","30000 Bag":"2102","Alarm Clock":"1DB3","Blue NES Game":"1D42","CD Player":"1DAC","Fish Tank (Fish Included!)":"1CA6","Flat Shell":"2514","Grandfather Clock":"1DA0","Grey NES Game":"1D2F","JukeBox":"1D50","Lamp":"1EA1","Light Blue NES Game":"1D37","Nook's Shirt":"2410","Orange":"2804","Orange NES Game":"1D2B","Pet Cage":"1C00","Pointy Shell":"2515","Purple NES Game":"1D3E","Record Player":"1D4C","Red NES Game":"1D33","Round Snowman Table":"1EAB","Snowman Bed":"1EAF","Snowman Fridge":"1EA5","Snowman Seat":"1EB0","Stereo":"1DA9","Stereo Kinda Thing":"1DA6","Stereo NES Colour":"1D47","Tall Red Cupboard":"1011","Yellow NES Game":"1D3A"}},"Max Cash":{"note":"","data":["813BC34C FFFF"],"options":null},"Minutes":{"note":"","data":["80136FBD 00??"],"options":{"00":"00","05":"05","10":"0A","15":"0F","20":"14","25":"19","30":"1E","35":"23","40":"28","45":"2D","50":"32","55":"37","59":"3B"}},"Month":{"note":"","data":["80136FC1 00??"],"options":{"April":"04","Aug":"08","Dec":"0C","Feb":"02","Jan":"01","July":"07","June":"06","March":"03","May":"05","Nov":"0B","Oct":"0A","Sept":"09"}},"Time Passes":{"note":"","data":["80136FD2 00??"],"options":{"Hours \u0026 Mins Fast":"10","Hours \u0026 Mins Medium":"05","Mins Like Seconds":"01","Time Normal":"00","Time Zooms By":"FF"}}},"BDA8F143-B1AF2D62-C:45":{"Multi\\Agony\\Have All\\Weapons\\Player 1":{"note":"","data":["801832B7 0001","801832BB 0001","801832BF 0001","801832C3 0001","801832C7 0001","801832CB 0001","801832CF 0001","801832D3 0001","801832D7 0001","801832DB 0001"],"options":null},"Multi\\Agony\\Have All\\Weapons\\Player 2":{"note":"","data":["8018361B 0001","8018361F 0001","80183623 0001","80183627 0001","8018362B 0001","8018362F 0001","80183633 0001","80183637 0001","8018363B 0001","8018363F 0001"],"options":null},"Multi\\Agony\\Infinite\\Ammo\\Player 1":{"note":"","data":["801832DF 0063","801832E3 0063","801832E7 0063","801832EB 0063","801832EF 0063","801832F3 0063"],"options":null},"Multi\\Agony\\Infinite\\Ammo\\Player 2":{"note":"","data":["80183643 0063","80183647 0063","8018364B 0063","8018364F 0063","80183653 0063","80183657 0063"],"options":null},"Multi\\Cold Steel\\Have All\\Weapons\\Player 1":{"note":"","data":["8017B577 0001","8017B57B 0001","8017B57F 0001","8017B583 0001","8017B587 0001","8017B58B 0001","8017B58F 0001","8017B593 0001","8017B597 0001","8017B59B 0001"],"options":null},"Multi\\Cold Steel\\Have All\\Weapons\\Player 2":{"note":"","data":["8017B8DB 0001","8017B8DF 0001","8017B8E3 0001","8017B8E7 0001","8017B8EB 0001","8017B8EF 0001","8017B8F3 0001","8017B8F7 0001","8017B8FB 0001","8017B8FF 0001"],"options":null},"Multi\\Cold Steel\\Infinite\\Ammo\\Player 1":{"note":"","data":["8017B59F 0063","8017B5A3 0063","8017B5A7 0063","8017B5AB 0063","8017B5AF 0063","8017B5B3 0063"],"options":null},"Multi\\Cold Steel\\Infinite\\Ammo\\Player 2":{"note":"","data":["8017B903 0063","8017B907 0063","8017B90B 0063","8017B90F 0063","8017B913 0063","8017B917 0063"],"options":null},"Multi\\Corridors\\Have All\\Weapons\\Player 1":{"note":"","data":["8017D1C7 0001","8017D1CB 0001","8017D1CF 0001","8017D1D3 0001","8017D1D7 0001","8017D1DB 0001","8017D1DF 0001","8017D1E3 0001","8017D1E7 0001","8017D1EB 0001"],"options":null},"Multi\\Corridors\\Have All\\Weapons\\Player 2":{"note":"","data":["8017D52B 0001","8017D52F 0001","8017D533 0001","8017D537 0001","8017D53B 0001","8017D53F 0001","8017D543 0001","8017D547 0001","8017D54B 0001","8017D54F 0001"],"options":null},"Multi\\Corridors\\Infinite\\Ammo\\Player 1":{"note":"","data":["8017D1E7 0063","8017D1F3 0063","8017D1F7 0063","8017D1FB 0063","8017D1FF 0063","8017D203 0063"],"options":null},"Multi\\Corridors\\Infinite\\Ammo\\Player 2":{"note":"","data":["8017D553 0063","8017D557 0063","8017D55B 0063","8017D55F 0063","8017D567 0063"],"options":null},"Multi\\Dying Halls\\Have All\\Weapons\\Player 1":{"note":"","data":["801BF937 0001","801BF93B 0001","801BF93F 0001","801BF943 0001","801BF947 0001","801BF94B 0001","801BF94F 0001","801BF953 0001","801BF957 0001","801BF95B 0001"],"options":null},"Multi\\Dying Halls\\Have All\\Weapons\\Player 2":{"note":"","data":["801BFC9B 0001","801BFC9F 0001","801BFCA3 0001","801BFCA7 0001","801BFCAB 0001","801BFCAF 0001","801BFCB3 0001","801BFCB7 0001","801BFCBB 0001","801BFCBF 0001"],"options":null},"Multi\\Dying Halls\\Infinite\\Ammo\\Player 1":{"note":"","data":["801BF95F 0063","801BF963 0063","801BF967 0063","801BF96B 0063","801BF96F 0063","801BF973 0063"],"options":null},"Multi\\Dying Halls\\Infinite\\Ammo\\Player 2":{"note":"","data":["801BFCC3 0063","801BFCC7 0063","801BFCCB 0063","801BFCCF 0063","801BFCD3 0063","801BFCD7 0063"],"options":null},"Multi\\Empty Space\\Have All\\Weapons\\Player 1":{"note":"","data":["80179B27 0001","80179B2B 0001","80179B2F 0001","80179B33 0001","80179B37 0001","80179B3B 0001","80179B3F 0001","80179B43 0001","80179B47 0001","80179B4B 0001"],"options":null},"Multi\\Empty Space\\Have All\\Weapons\\Player 2":{"note":"","data":["80179E8B 0001","80179E8F 0001","80179E93 0001","80179E97 0001","80179E9B 0001","80179E9F 0001","80179EA3 0001","80179EA7 0001","80179EAB 0001","80179EAF 0001"],"options":null},"Multi\\Empty Space\\Infinite\\Ammo\\Player 1":{"note":"","data":["80179B4F 0063","80179B53 0063","80179B57 0063","80179B5B 0063","80179B5F 0063","80179B63 0063"],"options":null},"Multi\\Empty Space\\Infinite\\Ammo\\Player 2":{"note":"","data":["80179EB3 0063","80179EB7 0063","80179EBB 0063","80179EBF 0063","80179EC3 0063","80179EC7 0063"],"options":null},"Multi\\Fortress\\Have All\\Weapons\\Player 1":{"note":"","data":["8017D617 0001","8017D61B 0001","8017D61F 0001","8017D623 0001","8017D627 0001","8017D62B 0001","8017D62F 0001","8017D633 0001","8017D637 0001","8017D63B 0001"],"options":null},"Multi\\Fortress\\Have All\\Weapons\\Player 2":{"note":"","data":["8017D97B 0001","8017D97F 0001","8017D983 0001","8017D987 0001","8017D98B 0001","8017D98F 0001","8017D993 0001","8017D997 0001","8017D99B 0001","8017D99F 0001"],"options":null},"Multi\\Fortress\\Infinite\\Ammo\\Player 1":{"note":"","data":["8017D63F 0063","8017D643 0063","8017D647 0063","8017D64B 0063","8017D64F 0063","8017D653 0063"],"options":null},"Multi\\Fortress\\Infinite\\Ammo\\Player 2":{"note":"","data":["8017D9A3 0063","8017D9A7 0063","8017D9AB 0063","8017D9AF 0063","8017D9B3 0063","8017D9B7 0063"],"options":null},"Multi\\Mad Dash\\Have All\\Weapons\\Player 1":{"note":"","data":["801AE9A7 0001","801AE9AB 0001","801AE9AF 0001","801AE9B3 0001","801AE9B7 0001","801AE9BB 0001","801AE9BF 0001","801AE9C3 0001","801AE9C7 0001","801AE9CB 0001"],"options":null},"Multi\\Mad Dash\\Have All\\Weapons\\Player 2":{"note":"","data":["801AED0B 0001","801AED0F 0001","801AED13 0001","801AED17 0001","801AED1B 0001","801AED1F 0001","801AED23 0001","801AED27 0001","801AED2B 0001","801AED2F 0001"],"options":null},"Multi\\Mad Dash\\Infinite\\Ammo\\Player 1":{"note":"","data":["801AE9CF 0063","801AE9D3 0063","801AE9D7 0063","801AE9DB 0063","801AE9DF 0063","801AE9E3 0063"],"options":null},"Multi\\Mad Dash\\Infinite\\Ammo\\Player 2":{"note":"","data":["801AED33 0063","801AED37 0063","801AED3B 0063","801AED3F 0063","801AED43 0063","801AED47 0063"],"options":null},"Multi\\Overflow\\Have All\\Weapons\\Player 1":{"note":"","data":["80197907 0001","8019790B 0001","8019790F 0001","80197913 0001","80197917 0001","8019791B 0001","8019791F 0001","80197923 0001","80197927 0001","8019792B 0001"],"options":null},"Multi\\Overflow\\Have All\\Weapons\\Player 2":{"note":"","data":["80197C6B 0001","80197C6F 0001","80197C73 0001","80197C77 0001","80197C7B 0001","80197C7F 0001","80197C83 0001","80197C87 0001","80197C8B 0001","80197C8F 0001"],"options":null},"Multi\\Overflow\\Infinite\\Ammo\\Player 1":{"note":"","data":["8019792F 0063","80197933 0063","80197937 0063","8019793B 0063","8019793F 0063","80197943 0063"],"options":null},"Multi\\Overflow\\Infinite\\Ammo\\Player 2":{"note":"","data":["80197C93 0063","80197C97 0063","80197C9B 0063","80197C9F 0063","80197CA3 0063","80197CA7 0063"],"options":null},"Multi\\Twists\\Have All\\Weapons\\Player 1":{"note":"","data":["801ABE47 0001","801ABE4B 0001","801ABE4F 0001","801ABE53 0001","801ABE57 0001","801ABE5B 0001","801ABE5F 0001","801ABE63 0001","801ABE67 0001","801ABE6B 0001"],"options":null},"Multi\\Twists\\Have All\\Weapons\\Player 2":{"note":"","data":["801AC1AB 0001","801AC1AF 0001","801AC1B3 0001","801AC1B7 0001","801AC1BB 0001","801AC1BF 0001","801AC1C3 0001","801AC1C7 0001","801AC1CB 0001","801AC1CF 0001"],"options":null},"Multi\\Twists\\Infinite\\Ammo\\Player 1":{"note":"","data":["801ABE6F 0063","801ABE73 0063","801ABE77 0063","801ABE7B 0063","801ABE7F 0063","801ABE83 0063"],"options":null},"Multi\\Twists\\Infinite\\Ammo\\Player 2":{"note":"","data":["801AC1D3 0063","801AC1D7 0063","801AC1DB 0063","801AC1DF 0063","801AC1E3 0063","801AC1E7 0063"],"options":null},"Multi\\War Room\\Have All\\Weapons\\Player 1":{"note":"","data":["801A2E57 0001","801A2E5B 0001","801A2E5F 0001","801A2E63 0001","801A2E67 0001","801A2E6B 0001","801A2E6F 0001","801A2E73 0001","801A2E77 0001","801A2E7B 0001"],"options":null},"Multi\\War Room\\Have All\\Weapons\\Player 2":{"note":"","data":["801A31BB 0001","801A31BF 0001","801A31C3 0001","801A31C7 0001","801A31CB 0001","801A31CF 0001","801A31D3 0001","801A31D7 0001","801A31DB 0001","801A31DF 0001"],"options":null},"Multi\\War Room\\Infinite\\Ammo\\Player 1":{"note":"","data":["801A2E7F 0063","801A2E83 0063","801A2E87 0063","801A2E8B 0063","801A2E8F 0063","801A2E93 0063"],"options":null},"Multi\\War Room\\Infinite\\Ammo\\Player 2":{"note":"","data":["801A31E3 0063","801A31E7 0063","801A31EB 0063","801A31EF 0063","801A31F3 0063","801A31F7 0063"],"options":null},"The Ultimate":{"note":"The Ultimate Gives you on Solo Play Infinite Health, Infinite Armor, All Guns, and Infinite Ammo On all Levels","data":["8104AD2C 0800","8104AD2E 0018","81000060 8E30","81000062 0068","81000064 241B","81000066 03E7","81000068 AE1B","8100006A 0030","8100006C AC9B","8100006E 0204","81000070 A219","81000072 004B","81000074 A219","81000076 004C","81000078 1000","8100007A 0005","8100007C A219","8100007E 0050","50000604 0000","81000090 A219","50000604 0004","81000092 0054","50000504 0000","810000A8 AE1B","50000504 0004","810000AA 006C","810000BC 0801","810000BE 2B4D","810000C0 AE1B","810000C2 0080"],"options":null}},"BDF9766D-BD068D70-C:45":{"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Can't Be Counted Out":{"note":"","data":["D0296E4D 0029","81296ECE 0384"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Can't Be Pinned":{"note":"","data":["D0296E4D 0029","81296F5A FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Infinite Health":{"note":"","data":["D0296E4D 0029","81296FD0 0000","D0296E4D 0029","81296FD2 0000"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Instant Recovery":{"note":"","data":["D0296E4D 0029","8129703A FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Invincible":{"note":"","data":["D0296E4D 0029","8129702E FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Super Speed":{"note":"","data":["D0296E4D 0029","81297032 FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Super Stamina":{"note":"","data":["D0296E4D 0029","81297036 FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Super Strength":{"note":"","data":["D0296E4D 0029","8129702A FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Can't Be Counted Out":{"note":"","data":["D0296E4D 0029","8129816E 0384"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Can't Be Pinned":{"note":"","data":["D0296E4D 0029","812981FA FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Infinite Health":{"note":"","data":["D0296E4D 0029","81298270 0000","D0296E4D 0029","81298272 0000"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Instant Recovery":{"note":"","data":["D0296E4D 0029","812982DA FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Invincible":{"note":"","data":["D0296E4D 0029","812982CE FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Super Speed":{"note":"","data":["D0296E4D 0029","812982D2 FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Super Stamina":{"note":"","data":["D0296E4D 0029","812982D6 FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Super Strength":{"note":"","data":["D0296E4D 0029","812982CA FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Can't Be Counted Out":{"note":"","data":["D0296C3D 0029","81296CBE 0384"],"options":null},"3 Way Dance Mode\\Player 1\\Can't Be Pinned":{"note":"","data":["D0296C3D 0029","81296D4A FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Infinite Health":{"note":"","data":["D0296C3D 0029","81296DC0 0000","D0296C3D 0029","81296DC2 0000"],"options":null},"3 Way Dance Mode\\Player 1\\Instant Recovery":{"note":"","data":["D0296C3D 0029","81296E2A FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Invincible":{"note":"","data":["D0296C3D 0029","81296E1E FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Super Speed":{"note":"","data":["D0296C3D 0029","81296E22 FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Super Stamina":{"note":"","data":["D0296C3D 0029","81296E26 FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Super Strength":{"note":"","data":["D0296C3D 0029","81296E1A FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Can't Be Counted Out":{"note":"","data":["D0296C3D 0029","81297F5E 0384"],"options":null},"3 Way Dance Mode\\Player 2\\Can't Be Pinned":{"note":"","data":["D0296C3D 0029","81297FEA FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Infinite Health":{"note":"","data":["D0296C3D 0029","81298060 0000","D0296C3D 0029","81298062 0000"],"options":null},"3 Way Dance Mode\\Player 2\\Instant Recovery":{"note":"","data":["D0296C3D 0029","812980CA FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Invincible":{"note":"","data":["D0296C3D 0029","812980BE FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Super Speed":{"note":"","data":["D0296C3D 0029","812980C2 FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Super Stamina":{"note":"","data":["D0296C3D 0029","812980C6 FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Super Strength":{"note":"","data":["D0296C3D 0029","812980BA FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Can't Be Counted Out":{"note":"","data":["D0296C3D 0029","812991FE 0384"],"options":null},"3 Way Dance Mode\\Player 3\\Can't Be Pinned":{"note":"","data":["D0296C3D 0029","8129928A FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Infinite Health":{"note":"","data":["D0296C3D 0029","81299300 0000","D0296C3D 0029","81299302 0000"],"options":null},"3 Way Dance Mode\\Player 3\\Instant Recovery":{"note":"","data":["D0296C3D 0029","8129936A FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Invincible":{"note":"","data":["D0296C3D 0029","8129935E FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Super Speed":{"note":"","data":["D0296C3D 0029","81299362 FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Super Stamina":{"note":"","data":["D0296C3D 0029","81299366 FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Super Strength":{"note":"","data":["D0296C3D 0029","8129935A FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Can't Be Counted Out":{"note":"","data":["D029A98D 0029","8129AA0E 0384"],"options":null},"All Tag Team Modes\\Player 1\\Can't Be Pinned":{"note":"","data":["D029A98D 0029","8129AA9A FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Infinite Health":{"note":"","data":["D029A98D 0029","8129AB10 0000","D029A98D 0029","8129AB12 0000"],"options":null},"All Tag Team Modes\\Player 1\\Instant Recovery":{"note":"","data":["D029A98D 0029","8129AB7A FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Invincible":{"note":"","data":["D029A98D 0029","8129AB6E FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Super Speed":{"note":"","data":["D029A98D 0029","8129AB72 FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Super Stamina":{"note":"","data":["D029A98D 0029","8129AB76 FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Super Strength":{"note":"","data":["D029A98D 0029","8129AB6A FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Can't Be Counted Out":{"note":"","data":["D029A98D 0029","8129BCAE 0384"],"options":null},"All Tag Team Modes\\Player 2\\Can't Be Pinned":{"note":"","data":["D029A98D 0029","8129BD3A FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Infinite Health":{"note":"","data":["D029A98D 0029","8129BDB0 0000","D029A98D 0029","8129BDB2 0000"],"options":null},"All Tag Team Modes\\Player 2\\Instant Recovery":{"note":"","data":["D029A98D 0029","8129BE1A FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Invincible":{"note":"","data":["D029A98D 0029","8129BE0E FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Super Speed":{"note":"","data":["D029A98D 0029","8129BE12 FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Super Stamina":{"note":"","data":["D029A98D 0029","8129BE16 FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Super Strength":{"note":"","data":["D029A98D 0029","8129BE0A FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Can't Be Counted Out":{"note":"","data":["D029A98D 0029","8129CF4E 0384"],"options":null},"All Tag Team Modes\\Player 3\\Can't Be Pinned":{"note":"","data":["D029A98D 0029","8129CFDA FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Infinite Health":{"note":"","data":["D029A98D 0029","8129D050 0000","D029A98D 0029","8129D052 0000"],"options":null},"All Tag Team Modes\\Player 3\\Instant Recovery":{"note":"","data":["D029A98D 0029","8129D0BA FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Invincible":{"note":"","data":["D029A98D 0029","8129D0AE FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Super Speed":{"note":"","data":["D029A98D 0029","8129D0B2 FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Super Stamina":{"note":"","data":["D029A98D 0029","8129D0B6 FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Super Strength":{"note":"","data":["D029A98D 0029","8129D0AA FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Can't Be Counted Out":{"note":"","data":["D029A98D 0029","8129E1EE 0384"],"options":null},"All Tag Team Modes\\Player 4\\Can't Be Pinned":{"note":"","data":["D029A98D 0029","8129E27A FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Infinite Health":{"note":"","data":["D029A98D 0029","8129E2F0 0000","D029A98D 0029","8129E2F2 0000"],"options":null},"All Tag Team Modes\\Player 4\\Instant Recovery":{"note":"","data":["D029A98D 0029","8129E35A FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Invincible":{"note":"","data":["D029A98D 0029","8129E34E FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Super Speed":{"note":"","data":["D029A98D 0029","8129E352 FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Super Stamina":{"note":"","data":["D029A98D 0029","8129E356 FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Super Strength":{"note":"","data":["D029A98D 0029","8129E34A FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Can't Be Counted Out":{"note":"","data":["D029A66D 0029","8129A6EE 0384"],"options":null},"Battle Royal Mode\\Player 1\\Can't Be Pinned":{"note":"","data":["D029A66D 0029","8129A77A FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Infinite Health":{"note":"","data":["D029A66D 0029","8129A7F0 0000","D029A66D 0029","8129A7F2 0000"],"options":null},"Battle Royal Mode\\Player 1\\Instant Recovery":{"note":"","data":["D029A66D 0029","8129A85A FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Invincible":{"note":"","data":["D029A66D 0029","8129A84E FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Super Speed":{"note":"","data":["D029A66D 0029","8129A852 FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Super Stamina":{"note":"","data":["D029A66D 0029","8129A856 FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Super Strength":{"note":"","data":["D029A66D 0029","8129A84A FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Can't Be Counted Out":{"note":"","data":["D029A66D 0029","8129B98E 0384"],"options":null},"Battle Royal Mode\\Player 2\\Can't Be Pinned":{"note":"","data":["D029A66D 0029","8129BA1A FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Infinite Health":{"note":"","data":["D029A66D 0029","8129BA90 0000","D029A66D 0029","8129BA92 0000"],"options":null},"Battle Royal Mode\\Player 2\\Instant Recovery":{"note":"","data":["D029A66D 0029","8129BAFA FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Invincible":{"note":"","data":["D029A66D 0029","8129BAEE FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Super Speed":{"note":"","data":["D029A66D 0029","8129BAF2 FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Super Stamina":{"note":"","data":["D029A66D 0029","8129BAF6 FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Super Strength":{"note":"","data":["D029A66D 0029","8129BAEA FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Can't Be Counted Out":{"note":"","data":["D029A66D 0029","8129CC2E 0384"],"options":null},"Battle Royal Mode\\Player 3\\Can't Be Pinned":{"note":"","data":["D029A66D 0029","8129CCBA FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Infinite Health":{"note":"","data":["D029A66D 0029","8129CD30 0000","D029A66D 0029","8129CD32 0000"],"options":null},"Battle Royal Mode\\Player 3\\Instant Recovery":{"note":"","data":["D029A66D 0029","8129CD9A FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Invincible":{"note":"","data":["D029A66D 0029","8129CD8E FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Super Speed":{"note":"","data":["D029A66D 0029","8129CD92 FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Super Stamina":{"note":"","data":["D029A66D 0029","8129CD96 FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Super Strength":{"note":"","data":["D029A66D 0029","8129CD8A FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Can't Be Counted Out":{"note":"","data":["D029A66D 0029","8129DECE 0384"],"options":null},"Battle Royal Mode\\Player 4\\Can't Be Pinned":{"note":"","data":["D029A66D 0029","8129DF5A FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Infinite Health":{"note":"","data":["D029A66D 0029","8129DFD0 0000","D029A66D 0029","8129DFD2 0000"],"options":null},"Battle Royal Mode\\Player 4\\Instant Recovery":{"note":"","data":["D029A66D 0029","8129E03A FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Invincible":{"note":"","data":["D029A66D 0029","8129E02E FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Super Speed":{"note":"","data":["D029A66D 0029","8129E032 FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Super Stamina":{"note":"","data":["D029A66D 0029","8129E036 FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Super Strength":{"note":"","data":["D029A66D 0029","8129E02A FFFF"],"options":null},"Character Modifier\\Player 1":{"note":"","data":["80122773 00??"],"options":{"Beulah":"1C","Cyrus the Virus":"0D","Excel":"36","Gertner":"15","H Slash":"2A","J Styles":"30","Jeff Jones":"19","Louie":"2E","Mack Daddy":"0F","Mad Goat":"1D","Nurse":"1F","Santoro":"25","Skull":"29","Sound Guy":"27","Taz":"32","The Sheik":"28","Tommy Rich":"22","Trainer":"33"}},"Character Modifier\\Player 2":{"note":"","data":["80122783 00??"],"options":{"Beulah":"1C","Cyrus the Virus":"0D","Excel":"36","Gertner":"15","H Slash":"2A","J Styles":"30","Jeff Jones":"19","Louie":"2E","Mack Daddy":"0F","Mad Goat":"1D","Nurse":"1F","Santoro":"25","Skull":"29","Sound Guy":"27","Taz":"32","The Sheik":"28","Tommy Rich":"22","Trainer":"33"}},"Create A Wrestler\\Infinite Attribute Points":{"note":"","data":["8115DD52 0000"],"options":null},"Create A Wrestler\\Infinite Move %":{"note":"","data":["80131600 0024"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Can't Be Counted Out":{"note":"","data":["D029A87D 0029","8129A8FE 0384"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Can't Be Pinned":{"note":"","data":["D029A87D 0029","8129A98A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Infinite Health":{"note":"","data":["D029A87D 0029","8129AA00 0000","D029A87D 0029","8129AA02 0000"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Instant Recovery":{"note":"","data":["D029A87D 0029","8129AA6A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Invincible":{"note":"","data":["D029A87D 0029","8129AA5E FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Super Speed":{"note":"","data":["D029A87D 0029","8129AA62 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Super Stamina":{"note":"","data":["D029A87D 0029","8129AA66 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Super Strength":{"note":"","data":["D029A87D 0029","8129AA5A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Can't Be Counted Out":{"note":"","data":["D029A87D 0029","8129BB9E 0384"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Can't Be Pinned":{"note":"","data":["D029A87D 0029","8129BC2A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Infinite Health":{"note":"","data":["D029A87D 0029","8129BCA0 0000","D029A87D 0029","8129BCA2 0000"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Instant Recovery":{"note":"","data":["D029A87D 0029","8129BD0A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Invincible":{"note":"","data":["D029A87D 0029","8129BCFE FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Super Speed":{"note":"","data":["D029A87D 0029","8129BD02 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Super Stamina":{"note":"","data":["D029A87D 0029","8129BD06 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Super Strength":{"note":"","data":["D029A87D 0029","8129BCFA FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Can't Be Counted Out":{"note":"","data":["D029A87D 0029","8129CE3E 0384"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Can't Be Pinned":{"note":"","data":["D029A87D 0029","8129CECA FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Infinite Health":{"note":"","data":["D029A87D 0029","8129CF40 0000","D029A87D 0029","8129CF42 0000"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Instant Recovery":{"note":"","data":["D029A87D 0029","8129CFAA FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Invincible":{"note":"","data":["D029A87D 0029","8129CF9E FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Super Speed":{"note":"","data":["D029A87D 0029","8129CFA2 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Super Stamina":{"note":"","data":["D029A87D 0029","8129CFA6 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Super Strength":{"note":"","data":["D029A87D 0029","8129CF9A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Can't Be Counted Out":{"note":"","data":["D029A87D 0029","8129E0DE 0384"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Can't Be Pinned":{"note":"","data":["D029A87D 0029","8129E16A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Infinite Health":{"note":"","data":["D029A87D 0029","8129E1E0 0000","D029A87D 0029","8129E1E2 0000"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Instant Recovery":{"note":"","data":["D029A87D 0029","8129E24A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Invincible":{"note":"","data":["D029A87D 0029","8129E23E FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Super Speed":{"note":"","data":["D029A87D 0029","8129E242 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Super Stamina":{"note":"","data":["D029A87D 0029","8129E246 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Super Strength":{"note":"","data":["D029A87D 0029","8129E23A FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Can't Be Counted Out":{"note":"","data":["D02931FD 0029","8129327E 0384"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Can't Be Pinned":{"note":"","data":["D02931FD 0029","8129330A FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Infinite Health":{"note":"","data":["D02931FD 0029","81293380 0000","D02931FD 0029","81293382 0000"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Instant Recovery":{"note":"","data":["D02931FD 0029","812933EA FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Invincible":{"note":"","data":["D02931FD 0029","812933DE FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Super Speed":{"note":"","data":["D02931FD 0029","812933E2 FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Super Stamina":{"note":"","data":["D02931FD 0029","812933E6 FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Super Strength":{"note":"","data":["D02931FD 0029","812933DA FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Can't Be Counted Out":{"note":"","data":["D02931FD 0029","8129451E 0384"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Can't Be Pinned":{"note":"","data":["D02931FD 0029","812945AA FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Infinite Health":{"note":"","data":["D02931FD 0029","81294620 0000","D02931FD 0029","81294622 0000"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Instant Recovery":{"note":"","data":["D02931FD 0029","8129468A FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Invincible":{"note":"","data":["D02931FD 0029","8129467E FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Super Speed":{"note":"","data":["D02931FD 0029","81294682 FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Super Stamina":{"note":"","data":["D02931FD 0029","81294686 FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Super Strength":{"note":"","data":["D02931FD 0029","8129467A FFFF"],"options":null}},"BE5973E0-89B0EDB8-C:45":{"100.000 Sponsor Credits \u0026 950 Championship Points In Support Van":{"note":"You Also Have Access To All Cars, Tracks \u0026 Extra Features","data":["80030D82 00F3"],"options":null},"Always 1st":{"note":"","data":["810318E2 0001"],"options":null},"Infinite Time \u0026 Always Place 1st":{"note":"Championship Mode Only.","data":["810318EE 0001"],"options":null},"Max Sponsor Credits":{"note":"","data":["81033816 270F"],"options":null},"Max Sponsor Points \u0026 Extra Cars \u0026 Tracks":{"note":"This code gives you all tracks and cars. once you activate this code, You must make an internal save (Native) in options \u0026 then load that internal save, \u0026 go to Drivers Board to pick your car, Then to Race to pick your track","data":["81033816 270F"],"options":null},"No Cones Hit":{"note":"In ARSG Rally School","data":["81031CEA 0000"],"options":null},"No Damage Or Failures":{"note":"","data":["81030D76 0001"],"options":null},"No Navigator":{"note":"","data":["80032677 0000"],"options":null}},"BE76EDFF-20452D09-C:45":{"Away Team\\Infinite Time Outs":{"note":"","data":["8004C62E 0003"],"options":null},"Away Team\\No Time Outs":{"note":"","data":["8004C62E 0000"],"options":null},"Home Team\\Infinite Time Outs":{"note":"","data":["8004C0B6 0003"],"options":null},"Home Team\\No Time Outs":{"note":"","data":["8004C0B6 0000"],"options":null},"Infinite\\Character Creation Points":{"note":"","data":["81072F30 015E"],"options":null},"Infinite\\Time to Choose Play":{"note":"","data":["81080152 0028"],"options":null},"Max\\Accuracy":{"note":"","data":["8106FDB8 0064"],"options":null},"Max\\Catch":{"note":"","data":["8106FDC2 0064"],"options":null},"Max\\Endurance":{"note":"","data":["8106FDC4 0064"],"options":null},"Max\\Hands":{"note":"","data":["8106FDBE 0064"],"options":null},"Max\\Range":{"note":"","data":["8106FDBA 0064"],"options":null},"Max\\Scramble":{"note":"","data":["8106FDBC 0064"],"options":null},"Max\\Speed":{"note":"","data":["8106FDC0 0064"],"options":null}},"BEBAB677-51B0B5E4-C:50":{"100.000 Sponsor Credits \u0026 950 Championship Points In Support Van":{"note":"You Also Have Access To All Cars, Tracks \u0026 Extra Features","data":["80031BB3 00F3"],"options":null},"Always 1st":{"note":"","data":["80032713 0001"],"options":null},"Freeze Timer":{"note":"","data":["8003271F 0000"],"options":null},"Infinite Cash":{"note":"","data":["803D004E 4000"],"options":null},"Max Sponsor Credits":{"note":"","data":["803D27E2 0010","803D27E4 0001"],"options":null},"No Cones Hit":{"note":"In ARSG Rally School","data":["80032743 0000","80032B1B 0000"],"options":null},"No Damage Or Failures":{"note":"","data":["80031BA7 0001"],"options":null},"No Navigator":{"note":"","data":["80032677 0000"],"options":null}},"BFA526B4-0691E430-C:45":{"All 52 Gold Gems Collected":{"note":"","data":["80171B10 0003","80171B11 007E","80171B12 00FF","80171B13 00EF","80171B14 00FF","80171B15 007F","80171B16 00FF","80171B17 00FC"],"options":null},"All Stages \u0026 Chapters Unlocked":{"note":"","data":["80171B18 003B"],"options":null},"Infinite Health\\Marina":{"note":"","data":["81057458 03E8"],"options":null},"Infinite Health\\Teran":{"note":"","data":["810F4270 03E8"],"options":null},"Infinite\\Max Red Gems":{"note":"","data":["81178136 270F"],"options":null},"Level Select":{"note":"To access this anytime during game, press L+R+Z to enable the menu. Press D-Pad Up / Down to move through the menu, D-Pad Left / Right to change level digits and then press Start to enter level. Don not do this whhile in pause mode (Start Button Pause) or the game will freeze.","data":["D10BE538 2030","800BE4F1 0004"],"options":null}},"BFE23884-EF48EAAF-C:45":{"All Levels Open":{"note":"","data":["50002001 0000","803F7DE0 0001"],"options":null},"Always\\Raining":{"note":"","data":["803F2D6F 0005"],"options":null},"Always\\Snowing":{"note":"","data":["803F2D6D 0005"],"options":null},"Debug Mode":{"note":"","data":["803F642F 0001"],"options":null},"Have All\\Power Cells":{"note":"","data":["803F2D3D 000F"],"options":null},"Have All\\Secret Mini Game":{"note":"","data":["803F643D 0001"],"options":null},"High Score":{"note":"","data":["813F2D30 007F","813F2D32 FFFF"],"options":null},"Infinite Health\\Ship\\in Asteroids Level":{"note":"","data":["803E4CDB 0003"],"options":null},"Infinite\\Ability\\Fox":{"note":"","data":["811DF8F4 0400"],"options":null},"Infinite\\Ability\\Heli-Rabbit":{"note":"","data":["811DF14C 0400"],"options":null},"Infinite\\Ability\\Husky":{"note":"","data":["811DED78 0400"],"options":null},"Infinite\\Ability\\Mouse":{"note":"","data":["811DFCC8 0400"],"options":null},"Infinite\\Ability\\Penguin":{"note":"","data":["811E009C 0400"],"options":null},"Infinite\\Ability\\Rabbit":{"note":"","data":["811DE5D0 0400"],"options":null},"Infinite\\Ability\\Racing Dog":{"note":"","data":["811DF14C 0400"],"options":null},"Infinite\\Ability\\Racing Fox":{"note":"","data":["811DF8F4 0082"],"options":null},"Infinite\\Ability\\Ram":{"note":"","data":["811DE5D0 0400"],"options":null},"Infinite\\Ability\\Sheep":{"note":"","data":["811DE9A0 0400"],"options":null},"Infinite\\Ability\\Springy Thing":{"note":"","data":["811DF14C 0400"],"options":null},"Infinite\\Ability\\Walrus":{"note":"","data":["811DE5D0 0400"],"options":null},"Infinite\\Boost\\Fox":{"note":"","data":["811DF8F0 0400"],"options":null},"Infinite\\Boost\\Mouse":{"note":"","data":["811DFCC4 0400"],"options":null},"Infinite\\Boost\\Racing Dog":{"note":"","data":["811DF148 0400"],"options":null},"Infinite\\Boost\\Racing Fox":{"note":"","data":["811DF8F0 0400"],"options":null},"Infinite\\Boost\\Walrus":{"note":"","data":["811DED74 0400"],"options":null},"Infinite\\Energy\\Dog":{"note":"","data":["811DFF04 0082"],"options":null},"Infinite\\Energy\\EVO (Chip)":{"note":"","data":["801DE065 0082"],"options":null},"Infinite\\Energy\\Evo\\In Bonus Level 4":{"note":"","data":["801DEFB5 0082"],"options":null},"Infinite\\Energy\\Evo\\in Bonus Level 1 \u0026 Final Level":{"note":"","data":["801DE439 0082"],"options":null},"Infinite\\Energy\\Fox":{"note":"","data":["811DF75C 0082"],"options":null},"Infinite\\Energy\\Heli-Rabbit":{"note":"","data":["811DEFB4 0082"],"options":null},"Infinite\\Energy\\Mouse,Hyena":{"note":"","data":["801DFB31 0082"],"options":null},"Infinite\\Energy\\Normal Penguin":{"note":"","data":["811DFF04 0082"],"options":null},"Infinite\\Energy\\Normal Rabbit":{"note":"","data":["811DE438 0082"],"options":null},"Infinite\\Energy\\Racing Dog":{"note":"","data":["811DEFB4 0082"],"options":null},"Infinite\\Energy\\Racing Fox":{"note":"","data":["811DF7FC 0082"],"options":null},"Infinite\\Energy\\Ram":{"note":"","data":["811DE438 0082"],"options":null},"Infinite\\Energy\\Sheep":{"note":"","data":["811DEBE0 0082"],"options":null},"Infinite\\Energy\\Snow Husky":{"note":"","data":["811DFF04 0082"],"options":null},"Infinite\\Energy\\Springy Thing":{"note":"","data":["811DEFB4 0082"],"options":null}},"BFF7B1C2-AEBF148E-C:4A":{"Infinite\\Bells":{"note":"","data":["800F38C3 00??"],"options":{"99 Bells":"63","No Bells":"00"}},"Infinite\\Energy":{"note":"","data":["800FB897 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["800F38C5 000A"],"options":null}},"C00CA948-8E60D34B-C:45":{"Max Or No Score\\Player 1":{"note":"","data":["81104772 ????"],"options":{"Max Score":"FFFF","No Score":"0000"}},"Max Or No Score\\Player 2":{"note":"","data":["81104776 ????"],"options":{"Max Score":"FFFF","No Score":"0000"}},"Max Or No Score\\Player 3":{"note":"","data":["8110477A ????"],"options":{"Max Score":"FFFF","No Score":"0000"}},"Max Or No Score\\Player 4":{"note":"","data":["8110477E ????"],"options":{"Max Score":"FFFF","No Score":"0000"}}},"C0C85046-61051B05-C:49":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2712 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE03F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802026F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE255 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FCB85 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFF6D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802027A5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DA0BD 0001"],"options":null}},"C0F6DB17-80E0D532-C:44":{"Enable Cheat Select":{"note":"","data":["80115933 00??"],"options":{"All Weapons With Fast Run":"42","All Weapons With Infinite Ammo":"06","Fast run":"40","Have All Weapons":"02","Infinite Ammo":"04","Infinite Ammo With Fast Run":"44","Invincible":"01","Invincible With All Weapons And Fast Run":"43","Invincible With All Weapons and Ammo and Fast Run":"47","Invincible With Fast Run":"41","Invincible With Infinite Ammo and All Weapons":"07"}},"Enable In-Game Cheat Menu \u0026 Level Select":{"note":"","data":["81115936 014F"],"options":null},"Sound Select\\Music Volume":{"note":"","data":["80115944 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"Sound Select\\SFX Volume":{"note":"","data":["80115945 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"[Press L For Levitate]":{"note":"","data":["D10F7550 0020","816FE35C 43D5"],"options":null}},"C151AD61-280FFF22-C:45":{"Have 99 Coins":{"note":"","data":["810BB55E 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C7EC2 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BB54C 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BB556 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BB55A 0009"],"options":null}},"C16C421B-A21580F7-C:45":{"Have All\\Levels and Bonus Stages Unlocked":{"note":"Press start in Gyro's Lab and then resume game to see all open","data":["801D72CC 00FF","801D72CD 00FF","801D72CE 00FF","801D72CF 00FF","801D72D3 00FF"],"options":null},"Have All\\Time Attack \u0026 Toy Hunting Comnpleated (All Levels)":{"note":"Press start in Gyro's Lab and then resume game to see all open","data":["801D72D8 00FF","801D72D9 00FF","801D72DA 00FF","801D72DB 00FF","801D72DC 00FF","801D72DD 00FF","801D72DE 00FF","801D72DF 00FF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["801D72AE 0063"],"options":null},"Infinite\\99 Stars":{"note":"","data":["801D72AF 0063"],"options":null},"Infinite\\Time\\Gladstones Time Attack":{"note":"","data":["801D72A7 00FF"],"options":null},"Infinite\\Time\\Nephews Toy Hunting":{"note":"","data":["801D72A3 0063"],"options":null},"Instant\\Carrier Box [Moon Walk] (Press L)":{"note":"Press and hold the L Button and you will run floating of any ledge slowing drifting down. If you keep pressing the A Button while Holding L it will act as a Moon Jump.","data":["D00CB2A1 0020","801C939F 0001"],"options":null},"Instant\\Hyperactive State [Invincible] (Press C-Right)":{"note":"","data":["D00CB2A1 0001","801CE616 0001"],"options":null},"Instant\\Rage Attack (Press C-Left)":{"note":"","data":["D00CB2A1 0002","801CE5BD 0001"],"options":null}},"C1D702BD-6D416547-C:4A":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D55E0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112CF0E 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800EB470 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D55C0 0001","50001701 0000","800D55C8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D5850 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D5889 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D55B9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D55BA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D55BB 0003"],"options":null}},"C2751D1A-F8C19BFF-C:50":{"Access Everything\\Start New Game":{"note":"","data":["50000502 0002","80204F3B 0013","50000502 0002","80204F42 0009","50000402 0002","80204F43 000A","80204F4B 000D","81204F4C 0E0F","81204F4E 0101","81204F5A 0100"],"options":null},"Have All Snowboards":{"note":"","data":["80204F3C 0001","81204F3E 0101","81204F40 0101"],"options":null},"Infinite Tools Options":{"note":"","data":["80206404 00??"],"options":{"Fan":"04","Frying Pan":"01","Ghost":"02","Invisible":"06","Rat Face":"08","Rock":"07","Rocket":"05","Super Ghost":"03","Super Rat Face":"09","Wings":"0A"}},"Infinite Weapons Options":{"note":"","data":["80206402 00??","80206403 0009"],"options":{"Bomb":"05","Freeze Shot":"03","Parachute":"02","Slap Stick":"01","Snowman":"04","Whirlwind":"06"}},"Max Coins":{"note":"","data":["8120639E 270F"],"options":null},"Max Money(Story Mode)":{"note":"","data":["81204EB0 0098","81204EB2 967F"],"options":null},"Open Extra Characters":{"note":"","data":["81204F4E 0101","80204F50 0001"],"options":null},"Trick Game 300 Points":{"note":"","data":["812065D2 012C"],"options":null}},"C29FF9E4-264BFE7D-C:45":{"Boris\\1-Hit Death":{"note":"","data":["D01543D5 0044","811543D4 0001"],"options":null},"Boris\\Infinite\\Health":{"note":"","data":["811543D4 0044"],"options":null},"Boris\\Infinite\\Lives":{"note":"","data":["811543D0 0063"],"options":null},"Boris\\Infinite\\Special":{"note":"","data":["811543DC 0044"],"options":null},"Boris\\Max Score":{"note":"","data":["81154404 000F","81154406 423F"],"options":null},"Curtis\\1-Hit Death":{"note":"","data":["D01541B9 0044","811541B8 0001"],"options":null},"Curtis\\Infinite\\Health":{"note":"","data":["811541B8 0044"],"options":null},"Curtis\\Infinite\\Lives":{"note":"","data":["811541B4 0063"],"options":null},"Curtis\\Infinite\\Special":{"note":"","data":["811541C0 0044"],"options":null},"Curtis\\Max Score":{"note":"","data":["811541E8 000F","811541EA 423F"],"options":null},"George\\1-Hit Death":{"note":"","data":["D015480D 0044","8115480C 0001"],"options":null},"George\\Infinite\\Health":{"note":"","data":["8115480C 0044"],"options":null},"George\\Infinite\\Lives":{"note":"","data":["81154808 0063"],"options":null},"George\\Infinite\\Special":{"note":"","data":["81154814 0044"],"options":null},"George\\Max Score":{"note":"","data":["8115483C 000F","8115483E 423F"],"options":null},"Infinite Time to Choose A Character":{"note":"","data":["8118CF9A 06CB"],"options":null},"Lizzie\\1-Hit Death":{"note":"","data":["D0154A29 0044","81154A28 0001"],"options":null},"Lizzie\\Infinite\\Health":{"note":"","data":["81154A28 0044"],"options":null},"Lizzie\\Infinite\\Lives":{"note":"","data":["81154A24 0063"],"options":null},"Lizzie\\Infinite\\Special":{"note":"","data":["81154A30 0044"],"options":null},"Lizzie\\Max Score":{"note":"","data":["81154A58 000F","81154A5A 423F"],"options":null},"Myukus Codes\\1-Hit Death":{"note":"","data":["D0154E61 0044","81154E60 0001"],"options":null},"Myukus Codes\\Infinite\\Health":{"note":"","data":["81154E60 0044"],"options":null},"Myukus Codes\\Infinite\\Lives":{"note":"","data":["81154E5C 0063"],"options":null},"Myukus Codes\\Infinite\\Special":{"note":"","data":["81154E68 0044"],"options":null},"Myukus Codes\\Max Score":{"note":"","data":["81154E90 000F","81154E92 423F"],"options":null},"Ralph\\1-Hit Death":{"note":"","data":["D0154C45 0044","81154C44 0001"],"options":null},"Ralph\\Infinite\\Health":{"note":"","data":["81154C44 0044"],"options":null},"Ralph\\Infinite\\Lives":{"note":"","data":["81154C40 0063"],"options":null},"Ralph\\Infinite\\Special":{"note":"","data":["81154C4C 0044"],"options":null},"Ralph\\Max Score":{"note":"","data":["81154C74 000F","81154C76 423F"],"options":null},"Ruby\\1-Hit Death":{"note":"","data":["D01545F1 0044","811545F0 0001"],"options":null},"Ruby\\Infinite\\Health":{"note":"","data":["811545F0 0044"],"options":null},"Ruby\\Infinite\\Lives":{"note":"","data":["811545EC 0063"],"options":null},"Ruby\\Infinite\\Special":{"note":"","data":["811545F8 0044"],"options":null},"Ruby\\Max Score":{"note":"","data":["81154620 000F","81154622 423F"],"options":null},"Unlock Cheat Menu":{"note":"","data":["810D5710 0001"],"options":null}},"C2E9AA9A-475D70AA-C:45":{"Beta Bottles Revenge Mode":{"note":"Bottles Revenge is a Beta mode from Banjo Tooie that the RWP team recently uncovered after an extraordinary amount of effort. Bottles the Spirit transforms into Bottles the Devil and posses enemies nearby and allows a second player hooked up to Pad 2 to play as that Posses character to try to foil Banjos Plans. As player one goes about its business, player two uses every enemy nearby to try to nab Banjo and take away some life. This mode is incredible, and you can control almost every enemy in the game: slot machines, flying creatures, uggers, zubbas...and this is just the beginning. (Congrats Rare Witch Project)","data":["8012B3F2 0001","800810C1 0002"],"options":null},"Fly At Anytime":{"note":"","data":["81120010 240E","81120012 0001","81120014 2400","D1081084 0400","81120014 A08E","81120016 0605"],"options":null},"Have Most of the Game Finished":{"note":"Start a new game,when you appear in Spiral Mountain press Top D-Pad. Go to the menu and you will notice all eggs, all moves are available. All the jiggies have been collected. Simply Save and Restart.","data":["5000AC01 0000","80290000 00FF","8029002B 007F","80290063 00FB","80290073 005F","D1081084 0800","8112C770 8029","D1081084 0800","8112C772 0000"],"options":null},"Have\\All Moves":{"note":"Press Top D-pad,Do not use with Have\\All Moves \u0026 Dragon Kazooie Or Have\\Dragon Kazooie","data":["D1081084 0800","8112C770 8029","D1081084 0800","8112C772 0000","81290018 FFFF","8129001A FFFF","8129001C FFFF","8129001E FFFF"],"options":null},"Have\\All Moves \u0026 Dragon Kazooie":{"note":"Press Top D-pad,Do not use with either Have all Moves,Or Have Dragon Kazooie","data":["D1081084 0800","8112C770 8029","D1081084 0800","8112C772 0000","81290018 FFFF","8129001A FFFF","8129001C FFFF","8129001E FFFF","81290078 FFFF","8129007A FFFF"],"options":null},"Have\\Dragon Kazooie":{"note":"Press Top D-pad,Do not use with Have All Modes Or Have All Moves \u0026 Dragon Kazooie","data":["D1081084 0800","8112C770 8029","D1081084 0800","8112C772 0000","81290078 FFFF","8129007A FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["8112B052 42C8"],"options":null},"Infinite\\Eggs, Feathers, All Items":{"note":"","data":["810D1A60 3442","810D1A62 03E7"],"options":null},"Infinite\\Energy\\Banjo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B65F 000A","8011B660 000A"],"options":null},"Infinite\\Energy\\Banjo and Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B644 0A0A"],"options":null},"Infinite\\Energy\\Bee":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B653 000A","8011B654 000A"],"options":null},"Infinite\\Energy\\Detonator":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B66E 0A0A"],"options":null},"Infinite\\Energy\\Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B662 0A0A"],"options":null},"Infinite\\Energy\\Mumbo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B668 0A0A"],"options":null},"Infinite\\Energy\\Snowball":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B647 0005"],"options":null},"Infinite\\Energy\\Stony":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B659 000A","8011B65A 000A"],"options":null},"Infinite\\Energy\\Submarine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B665 000A","8011B666 000A"],"options":null},"Infinite\\Energy\\T-Rex Baby":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B67F 000A","8011B680 000A"],"options":null},"Infinite\\Energy\\Washing Machine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B656 0A0A"],"options":null},"Instant Warp\\Options\\Cauldron Keep":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Cauldron Keep":"015D","Colosseum kickball arena":"0180","Crazy Castle Stockade Jump the hoops multi":"017C","Crazy Castle Stockade balloon burst multi":"017B","Dodgems":"0186","Grunty Industries packing game":"017D","Gun chamber":"0160","Gun room still":"016A","The gatehouse":"015E","Tower of Tragedy Quiz":"015F"}},"Instant Warp\\Options\\Cloud Cuckoo Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Central cavern":"013A","Cloud Cuckoo Land 1":"0136","Cloud Cuckoo Land 2":"0161","Humba wumba's wigwam":"0140","Inside the cheesewedge":"0138","Inside the pot o gold":"013D","Inside the trashcan":"0137","Mingy jongo's skull":"013F","Mumbo's skull":"013E","Trash can mini":"0185","Zubba's nest":"0139","Zubba's nest multi":"0188"}},"Instant Warp\\Options\\Glitter Gulch Mine":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Canary cave":"00DB","Chuffy's cab":"00D0","Crushing shed":"00CB","Flooded caves":"00CC","Fuel depot":"00CA","Generator caverns":"00D3","Gloomy caverns":"00D2","Humba":"00E9","Inside chuffy's boiler boss":"00D1","Mine":"00C7","Mumbo's hut":"00D9","Mumbo's skull":"0171","Ordnance Storage entrance":"0163","Ordnance Storage game":"0164","Ordnance Storage game Multi":"0165","Ordnance storage":"00DC","Power hut":"00D4","Power hut basement":"00CF","Prospectors hut":"00D8","Testing":"0170","Toxic gas cave":"00DA","Train station":"00D7","Water storage":"00CD","Water supply pipe":"0126","Waterfall cavern":"00CE","Wumba's wigwam":"00D5"}},"Instant Warp\\Options\\Grunty Industries":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Basement":"010F","Basement \"repair depot":"0110","Basement \"waste disposal\"":"0111","Elevator shaft":"0105","Floor 2":"0106","Floor 2 \"electromagnet chamber\"":"0107","Floor 3":"0108","Floor 3 \"boiler plant\"":"0109","Floor 3 \"packing room\"":"010A","Floor 4":"010B","Floor 4 \"cable room\"":"010C","Floor 4 \"clinkers cavern\"":"0162","Floor 4 \"quality control\"":"010D","Floor 5":"010E","Inside":"0101","Mumbo's skull":"0172","Outside":"0100","Sewer entrance":"0187","Train station":"0102","Trash compactor":"0104","Water supply pipe":"0125","Workers quarters":"0103"}},"Instant Warp\\Options\\Hailfire Peaks":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Boggy's igloo":"0131","Chilli billi":"012B","Chilly willy":"012C","Colosseum kickball stadium lobby":"012D","Ice train station":"012A","Icicle grotto":"0132","Icy side":"0128","Icy side still":"0168","Inside the volcano":"0133","Lava side":"0127","Lava train station":"0129"}},"Instant Warp\\Options\\Isle O Hags":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Cliff top":"0155","Cliff top Mumbo's skull":"0156","Heggy's egg shed":"0150","Jiggywiggy's temple":"0151","Pine Grove":"0154","Plateau":"0152","Plateau \"Honey B's Hive\"":"0153","Quagmire":"015C","Wooded Hollow":"014F","inside another digger tunnel":"015B","wasteland":"015A"}},"Instant Warp\\Options\\Jinjo Village":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Black Jinjo's House":"0146","Blue Jinjo's House":"0148","Bottles house":"0143","Brown Jinjo's House":"014A","Green Jinjo's House":"0145","Jinjo Village":"0142","King Jingalings throne room":"0144","Orange Jinjo's House":"014B","Purple Jinjo's House":"014C","Red Jinjo's House":"014D","White Jinjo's House":"014E","Yellow Jinjo's House":"0147"}},"Instant Warp\\Options\\Jolly Roger's Lagoon":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Ancient Swimming Baths":"00F4","Atlantis":"01A8","Blubber's wave race hire":"00FF","Electric Eels lair":"00F6","Inside the big fish":"00F8","Jolly Roger's Lagoon":"01A7","Jolly's":"00ED","Pawno's emporium":"00EE","Seabottom":"01A9","Seaweed Sanctum":"00F7","mumbo's skull":"00EF","sea bottom cavern":"0181","submarine multi":"0182","temple of the fishes":"00FA"}},"Instant Warp\\Options\\Mayahem Temple":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Code chamber":"00BC","Humba's Wigwam":"00B6","Inside Targitzans Temple":"0178","Jade Snake Grove":"00C4","Kickball Arena":"00C9","Mayan Kickball Arena":"017F","Multi":"0166","Mumbo's skull":"00B7","Prison Compound":"00B9","Still":"0167","Targitzan Temple Lobby":"0179","Targitzan's Slighty Sacred Temple":"0177","Targitzan's Temple Boss":"017A","The Temple":"00B8","Treasure Chamber":"00C5"}},"Instant Warp\\Options\\Not sure":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Bottles house":"0143","Bottles house still":"0169","HAG Inside":"018A","HAG1 Final Boss":"019A","Humba Wumba's wigwam 1":"0135","Humba Wumba's wigwam 2":"0157","Inside Chuffy's wagon":"0121","Inside the digger tunnel":"0141","Jingalings Zombified Palace":"019B","Lord woo fak fak":"00FC","Mr Patch":"00F9","Mumbo's Skull":"0134","Smuggler cavern":"01A6"}},"Instant Warp\\Options\\Spiral Mountain":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Banjo's house":"0173","Behind The Waterfall":"00AE","Grunty's Old Lair":"00AD","Top Of Castle":"00AF"}},"Instant Warp\\Options\\Terrydacty Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Bonfire caverns":"011B","Chompa's belly multi":"0183","Humba's Wigwam":"011E","Inside chompa's belly":"0123","Inside the mountain":"0116","Oogle boogles cave":"0115","River passage":"0117","Stomping plains":"011A","Styracosaurus family cave":"0118","Terry's nest":"0113","Terrydacty Land":"0112","Train station":"0114","Unga bunga's cave":"0119"}},"Instant Warp\\Options\\Witchy World":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Balloon burst game":"00E4","Cave of horrors":"00EA","Crazy castle lobby":"00E2","Crazy castle pump room":"00E3","Crazy castle stockade":"00E1","Crazy castle stockade \"sop\"":"013B","Dodgem challenge \"1 vs 1\"":"00DE","Dodgem challenge \"2 vs 1\"":"00DF","Dodgem challenge \"3 vs 1\"":"00E0","Dodgem dome lobby":"00DD","Haunted cavern":"00EB","Hoop hurry game":"00E5","Mumbo's skull":"0176","Saucer of Peril":"0124","Star spinner":"00E6","Star spinner \"sop\"":"013C","The inferno":"00E7","Train station":"00EC","Witcy World":"00D6"}},"Monsters dont Hurt Banjo":{"note":"","data":["50002430 0000","80132EF5 0000","50002430 0000","80132EF6 0000","50002430 0000","80132EF7 0000","50002430 0000","80132EF8 0000","50002430 0000","80132EF9 0000"],"options":null},"Multi-Player\\Everyone Infinite All Eggs Multiplayer":{"note":"All blaster modes specifically.[ Thanks retroben, awesome work on this!]","data":["810EA078 0C04","810EA07A 8040","81120100 3C08","81120102 8008","81120104 8108","81120106 4288","81120108 1100","8112010A 0010","8112010C 0000","8112010E 0000","81120110 3C08","81120112 8008","81120114 8D08","81120116 4288","81120118 0008","8112011A 4200","8112011C 0008","8112011E 4202","81120120 0008","81120122 4080","81120124 3C04","81120126 8000","81120128 0104","8112012A 4020","8112012C 3C04","8112012E 2406","81120130 2484","81120132 0064","81120134 AD04","81120136 31C4","81120138 3C04","8112013A 2408","8112013C 2484","8112013E FFFE","81120140 AD04","81120142 31CC","81120144 3C04","81120146 8013","81120148 8C84","8112014A 2DC4","8112014C 0802","8112014E 2098","81120150 0000","81120152 0000"],"options":null},"Multi-Player\\Infinite Health\\Player 1":{"note":"","data":["80135531 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 2":{"note":"","data":["80135535 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 3":{"note":"","data":["80135539 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 4":{"note":"","data":["8013553D 0064"],"options":null},"Play As":{"note":"To use this cheat, put the cheat on, then press L as you walk through a door to become that chosen character. Do not try to use the following character in Banjos house or anywhere as small or you will get stuck and wont be able to continue. Snowball Washing machine Submarine Golden Goliath Truck T-rex baby and T-rex daddy","data":["D0081085 0020","8012704C 00??"],"options":{"Banjo":"0A","Banjo and Kazooie":"01","Bee":"06","Detonator":"0F","Golden Goliath":"0E","Kazooie":"0B","Mumbo":"0D","Snowball":"02","Stony":"08","Submarine":"0C","T-rex baby":"12","T-rex daddy":"13","Truck":"10","Washing machine":"07"}},"Realistic tunnel entrance portals":{"note":"","data":["810F70D4 0C10","810F70D6 4000","81410000 3C0E","81410002 8008","81410004 81CE","81410006 7AD0","81410008 11C0","8141000A 0015","8141000C 0000","8141000E 0000","81410010 3C0E","81410012 8008","81410014 8DCE","81410016 7AD0","81410018 000E","8141001A 7200","8141001C 000E","8141001E 7202","81410020 000E","81410022 7080","81410024 3C05","81410026 8000","81410028 01C5","8141002A 7020","8141002C 2405","8141002E 1000","81410030 A5C5","81410032 0EE4","81410034 A5C5","81410036 0F7C","81410038 A5C5","8141003A 0FA4","8141003C 0005","8141003E 2C00","81410040 34A5","81410042 003E","81410044 ADC5","81410046 0F18","81410048 2402","8141004A 000E","8141004C 00A2","8141004E 2823","81410050 ADC5","81410052 0F50","81410054 2402","81410056 0029","81410058 00A2","8141005A 2823","8141005C ADC5","8141005E 0FF4","81410060 2405","81410062 000E","81410064 0802","81410066 79C7","81410068 0000","8141006A 0000"],"options":null},"Shock Spring At Anytime":{"note":"Press Top D-pad,Do not use with Have\\All Moves Or Have\\Dragon Kazooie","data":["81120018 240E","8112001A 0001","8112001C 2400","D1081084 0800","8112001C A08E","8112001E 0606"],"options":null}},"C34304AC-2D79C021-C:45":{"Infinite Lives":{"note":"","data":["8010BCFF 0009"],"options":null},"Invincible":{"note":"","data":["8009F742 0001"],"options":null},"Level Select":{"note":"","data":["D009A913 0000","8009A913 00??"],"options":{"Level 1 - Shaolin Temple - China":"00","Level 2 - Wind Realm":"01","Level 3 - Earth Realm":"02","Level 4 - Water Realm":"03","Level 5 - Fire Ream":"04","Level 6 - Prison":"05","Level 7 - Bridge":"06","Level 8 - Fortress":"07"}},"Max Experience":{"note":"","data":["8111200E FC9A"],"options":null}},"C3B6DE9D-65D2DE76-C:50":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118DA00 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118DA02 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118DA04 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118DA06 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["50000402 0000","8018EE50 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["8016609D 00??","801660CA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["8016617D 00??","801661AA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["8016625D 00??","8016628A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["8016633D 00??","8016636A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["8016641D 00??","8016644A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["801664FD 00??","8016652A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818EF2F 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F6A55 0020","810F6B08 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F6A65 0020","810F78E0 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F6A75 0020","810F86B8 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F6A85 0020","810F9490 4000"],"options":null}},"C3CD76FF-9B9DCBDE-C:44":{"Freeze Enemies":{"note":"","data":["8008EE3B 0012"],"options":null},"Gore Mode":{"note":"","data":["8008EE37 0012"],"options":null},"Infinite\\Lives":{"note":"","data":["8008EE33 0012"],"options":null},"Infinite\\Primery Weapons":{"note":"","data":["8008EE30 0012"],"options":null},"Infinite\\Secondary Weapons":{"note":"","data":["8008EE31 0012"],"options":null},"Infinite\\Solaris":{"note":"Solaris are included in code","data":["8008EE3D 0012"],"options":null},"Infinite\\Titans":{"note":"Titans are included in code","data":["8008EE3C 0012"],"options":null},"Infinite\\Weapon Energy":{"note":"","data":["8008EE32 0012"],"options":null},"Invulnerability":{"note":"","data":["8008EE35 0012"],"options":null},"Level Select":{"note":"Accesses all Missions \u0026 Battle mode","data":["8008EE3E 0012"],"options":null},"One Shot Enemies":{"note":"","data":["8008EE3A 0012"],"options":null},"Psychedelic Mode":{"note":"","data":["8008EE39 0012"],"options":null},"Stealth Mode":{"note":"","data":["8008EE34 0012"],"options":null},"Turbo Mode":{"note":"","data":["8008EE38 0012"],"options":null},"Wireframe Mode":{"note":"","data":["8008EE36 0012"],"options":null}},"C3E7E29E-5D7251CC-C:50":{"99 Points Player 1":{"note":"","data":["8010C33F 0063"],"options":null},"Access All\\Cars \u0026 Tracks":{"note":"","data":["8104ADF6 0001"],"options":null},"Access All\\Cups":{"note":"","data":["8005444B 0003","8005442D 0000","8005442E 0000","8005442F 0000","80054477 0003","80054459 0000","8005445A 0000","8005445B 0000","800544A3 0003","80054485 0000","80054486 0000","80054487 0000"],"options":null},"Always 1st":{"note":"","data":["811157AE 0001","811157B6 0000","8110C33E 03E7"],"options":null},"Drones Have No Weapons":{"note":"","data":["8111CECE 0000"],"options":null},"Infinite Continues":{"note":"","data":["8110C332 0006"],"options":null},"Infinite Weapons\\Player 1":{"note":"","data":["81115798 0000","8111579A 00??","8111579E 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 2":{"note":"","data":["81117C60 0000","81117C62 00??","81117C66 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 3":{"note":"","data":["8111A128 0000","8111A12A 00??","8111A12E 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 4":{"note":"","data":["8111C5F0 0000","8111C5F2 00??","8111C5F6 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Laps To Race":{"note":"","data":["8107DD1E 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Number Of Drones In The Race":{"note":"","data":["8110FFF6 00??"],"options":{"1 Drone":"01","2 Drones":"02","3 Drones":"03","4 Drones":"04","5 Drones":"05","6 Drones":"06","7 Drones":"07","8 Drones":"08","9 Drones":"09"}}},"C3F19159-65D2BC5A-C:50":{"Number Of Goals Player 1":{"note":"","data":["80119043 00??"],"options":{"1 Goal":"01","10 Goals":"0A","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08","9 Goals":"09"}},"Number Of Goals Player 2":{"note":"","data":["80119047 00??"],"options":{"1 Goal":"01","10 Goals":"0A","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08","9 Goals":"09"}}},"C43E23A7-40B1681A-C:45":{"Infinite\\Balls":{"note":"","data":["800ABFB7 0000"],"options":null},"Infinite\\Character Creation Points":{"note":"","data":["800E2C31 00B0"],"options":null},"Infinite\\Outs":{"note":"","data":["800ABFBB 0000"],"options":null},"Infinite\\Strikes":{"note":"","data":["800ABFB9 0000"],"options":null},"Max\\Character Creation Accuracy":{"note":"","data":["810E2BF0 4170"],"options":null},"Max\\Character Creation Arm Strength":{"note":"","data":["810E2C20 4170"],"options":null},"Max\\Character Creation Bunting":{"note":"","data":["810E2C0C 4170"],"options":null},"Max\\Character Creation Clutch":{"note":"","data":["810E2BF4 4170"],"options":null},"Max\\Character Creation Clutch 2":{"note":"","data":["810E2C28 4170"],"options":null},"Max\\Character Creation Contact":{"note":"","data":["810E2BFC 4170"],"options":null},"Max\\Character Creation Defense":{"note":"","data":["810E2C1C 4170"],"options":null},"Max\\Character Creation Power":{"note":"","data":["810E2C00 4170"],"options":null},"Max\\Character Creation Speed":{"note":"","data":["810E2C18 4170"],"options":null},"Max\\Character Creation Streak":{"note":"","data":["810E2C24 4170"],"options":null},"Max\\Character Creation VS LHB":{"note":"","data":["810E2C10 4170"],"options":null},"Max\\Character Creation VS RHB":{"note":"","data":["810E2C14 4170"],"options":null},"Max\\Character Creation VS. LHP":{"note":"","data":["810E2C04 4170"],"options":null},"Max\\Character Creation VS. RHP":{"note":"","data":["810E2C08 4170"],"options":null}},"C49ADCA2-F1501B62-C:45":{"Always Have\\99 points":{"note":"","data":["8015FD09 0063"],"options":null},"Always first position":{"note":"","data":["80162A80 0001"],"options":null},"Only race one lap":{"note":"","data":["8015FC35 0001"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D01A10B5 0010","81162F28 4077","D01A10B5 0010","81162F30 4077"],"options":null}},"C5674160-0F5F453C-C:50":{"Lower Left Character\\Coin Options":{"note":"","data":["810D1002 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDAED 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800D1006 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["810D103A 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDB39 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800D103E 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["810D0F92 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDA55 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800D0F96 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["810D0FCA 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDAA1 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800D0FCE 00??"],"options":{"0 Stars":"00","99 Stars":"64"}}},"C71353BE-AA09A6EE-C:50":{"Always Normal Spirit\\Player 1":{"note":"","data":["801671F5 0032"],"options":null},"Always Normal Spirit\\Player 2":{"note":"","data":["80167689 0032"],"options":null},"Always Normal Spirit\\Player 3":{"note":"","data":["80167B1D 0032"],"options":null},"Always Normal Spirit\\Player 4":{"note":"","data":["80167FB1 0032"],"options":null},"Always Special\\Player 1":{"note":"","data":["80167235 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["801676C9 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["80167B5D 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["80167FF1 0004"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 1":{"note":"","data":["801671F4 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 2":{"note":"","data":["80167688 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 3":{"note":"","data":["80167B1C 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 4":{"note":"","data":["80167FB0 0064"],"options":null},"Have All Characters":{"note":"","data":["8109ED5A FFFF"],"options":null},"Infinite Create-A-Wrestler Attribute Points":{"note":"","data":["8011A81B 001E"],"options":null},"Max Attributes":{"note":"","data":["8011A811 0032","8011A813 0032","8011A815 0032","8011A817 0032","8011A819 0032"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["801671F5 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["80167689 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["80167B1D 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["80167FB1 00FF"],"options":null},"No Spirit\\Player 1":{"note":"","data":["801671F5 0000"],"options":null},"No Spirit\\Player 2":{"note":"","data":["80167689 0000"],"options":null},"No Spirit\\Player 3":{"note":"","data":["80167B1D 0000"],"options":null},"No Spirit\\Player 4":{"note":"","data":["80167FB1 0000"],"options":null},"Specials Don't Run Out":{"note":"","data":["8112AD94 2400"],"options":null},"Timer Is Always 00:00":{"note":"","data":["8016F0AF 0000"],"options":null},"Ultimate Codes\\Player 1":{"note":"","data":["801671F4 0064"],"options":null},"Ultimate Codes\\Player 2":{"note":"","data":["80167688 0064"],"options":null},"Ultimate Codes\\Player 3":{"note":"","data":["80167B1C 0064"],"options":null},"Ultimate Codes\\Player 4":{"note":"","data":["80167FB0 0064"],"options":null},"Weapon Select\\Player 1":{"note":"","data":["81167236 0300","81166D90 ????","81166D92 0000","80166E50 0000"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 2":{"note":"","data":["811676CA 0300","81166DC0 ????","80166DC2 0001","80166E51 0001"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 3":{"note":"","data":["81167B5E 0300","81166DF0 ????","80166DF2 0002","80166E52 0002"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 4":{"note":"","data":["81167FF2 0300","81166E18 ????","81166E1A 0003","80166E53 0003"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}}},"C7C98F8E-42145DDE-C:45":{"Allways 1st":{"note":"","data":["8111D7EA 0000"],"options":null},"Have All\\Cars \u0026 Cups\\Player 1":{"note":"","data":["81124A0A FFFF"],"options":null},"Have All\\Cars \u0026 Cups\\Player 2":{"note":"","data":["81124B4A FFFF"],"options":null},"Have All\\Special Cars\\Player 1":{"note":"","data":["81124A04 FFFF","81124A06 FFFF","81124A0A FFFF"],"options":null},"Have All\\Special Cars\\Player 2":{"note":"","data":["81124B44 FFFF","81124B46 FFFF","81124B4A FFFF"],"options":null},"Have All\\Tracks":{"note":"","data":["81124A0E FFFF"],"options":null},"Infinite Turbos\\Player 1":{"note":"","data":["80118CFC 000A"],"options":null},"Infinite Turbos\\Player 2":{"note":"","data":["80119478 000A"],"options":null},"Max Tournament Points":{"note":"","data":["81124A16 00FF"],"options":null},"Press L For Time Is Always 0:00:00\\Player 1":{"note":"","data":["D0137FE5 0020","810F3900 0000","D0137FE5 0020","810F3902 0000"],"options":null},"Press L For Time Is Always 0:00:00\\Player 2":{"note":"","data":["D0137FED 0020","810F3900 0000","D0137FED 0020","810F3902 0000"],"options":null},"Start On Lap Modifier\\Player 1":{"note":"","data":["D0118AA8 0000","80118AA8 00??"],"options":{"1st":"00","2nd":"01","3rd":"02","4th":"03"}},"Start On Lap Modifier\\Player 2":{"note":"","data":["D0119224 0000","80119224 00??"],"options":{"1st":"00","2nd":"01","3rd":"02","4th":"03"}}},"C83CEB83-FDC56219-C:50":{"Always 1st":{"note":"","data":["8022CC16 0001"],"options":null},"Class Select":{"note":"This code is useful because you can play Class AA without having to beat a level!\u0026 then once any edit is done while the game is running","data":["8021C297 00??"],"options":{"1 Play":"04","2 Play":"05","3 Play":"06","4 Play":"07","Class AA":"03","Class B":"01","Class C":"00"}},"Super Speed":{"note":"This is Turbo fast,So to slow it down a little more keep the B button pressed down","data":["81228FA8 4800"],"options":null}},"C851961C-78FCAAFA-C:45":{"Choose Vehicle":{"note":"Make your Choice \u0026 then Press GS To Activate,But do not use with any other Press GS Cheat Codes.","data":["883626A7 00??"],"options":{"Birdman":"06","Cannonball":"03","Gyrocopter":"02","Hang Glider":"00","Jumble Hopper":"05","Rocket Belt":"01","Skydiving":"04"}},"Fly As Gray Plane In USA Level":{"note":"Press GS To Activate,But do not use with any other Press GS Cheat Codes.","data":["89362748 0008","813627B0 3F30","8024CDF5 006E"],"options":null},"Fly As Yellow Plane In USA Level":{"note":"Press GS To Activate,But do not use with any other Press GS Cheat Codes.","data":["89362748 0009","813627B0 3EE0","8024CDF5 006E"],"options":null},"Have Perfect Score in all Class \u0026 Level's":{"note":"With these codes, if you want them to save, you have to play a level, and lose and just choose quit after it tallies up your score. Also dont keep the code active once you save the level at 100%, turn the code off and continue with the other levels!","data":["8036427D 0064","803642AD 0064","803642DD 0064","80364911 0064","80364A61 0064","80364941 0064","80364A91 0064","80364971 0064","80364AC1 0064","80364FA5 0064","803650F5 0064","80365245 0064","80364FD5 0064","80365125 0064","80365275 0064","80365005 0064","80365155 0064","803652A5 0064","80365639 0064","80365789 0064","803658D9 0064","80365669 0064","803657B9 0064","80365909 0064","80365699 0064","803657E9 0064","80365939 0064","8036430D 0019","8036445D 0019","803645AD 0019","803646FD 0019","8036433D 0064","8036436D 0064","803649A1 0019","80364AF1 0019","80364C41 0019","80364D91 0019","803649D1 0064","80364A01 0064","80365035 0019","80365185 0019","803652D5 0019","80365425 0019","80365065 0064","80365095 0064"],"options":null},"Infinite Fuel\\Gyrocopter":{"note":"","data":["80362821 0081"],"options":null},"Infinite Fuel\\Rocket Belt":{"note":"","data":["80362841 0081"],"options":null},"Time Always 00'00'10":{"note":"This Cheat code is for All Events","data":["80362750 0001"],"options":null}},"C8BB4DD9-CC5F430B-C:45":{"Have All Elements":{"note":"","data":["8107BAA4 3232","8107BAA6 3232"],"options":null},"Infinite Health":{"note":"","data":["8107BA84 01F4","8107BA86 01F4"],"options":null},"Infinite Magic Points":{"note":"","data":["8107BA88 01F4","8107BA8A 01F4"],"options":null},"Super Agility":{"note":"","data":["8107BA8E 01F4"],"options":null},"Super Defense":{"note":"","data":["8107BA8C 01F4"],"options":null}},"C8DC65EB-3D8C8904-C:45":{"Always 1st":{"note":"","data":["812C4C96 0001"],"options":null},"Have All\\Boats":{"note":"","data":["812B5CA2 0101","812B5CA4 0101","812B5CA6 0101","812B5CA8 0101","812B5CAA 0101","812B5CAC 0101","812B5CAE 0101"],"options":null},"Have All\\Races":{"note":"","data":["812B5C94 0101","812B5C96 0101","812B5C98 0101","812B5C9A 0101","812B5C9C 0101","812B5C9E 0101","812B5CA0 0101"],"options":null},"Hydro Speedway":{"note":"","data":["802B5C94 00??"],"options":{"Unlocked \u0026 Completed":"03","Unlocked \u0026 Not Completed":"01"}},"Infinite\\Boosts\\Player 1":{"note":"","data":["812C4C9C 4190"],"options":null},"Infinite\\Boosts\\Player 2":{"note":"","data":["812C4FCC 4190"],"options":null},"Infinite\\Time":{"note":"","data":["812B4890 42C8"],"options":null}},"C9176D39-EA4779D1-C:50":{"Beta Bottles Revenge Mode":{"note":"Bottles Revenge is a Beta mode from Banjo Tooie that the RWP team recently uncovered after an extraordinary amount of effort. Bottles the Spirit transforms into Bottles the Devil and posses enemies nearby and allows a second player hooked up to Pad 2 to play as that Posses character to try to foil Banjos Plans. As player one goes about its business, player two uses every enemy nearby to try to nab Banjo and take away some life. This mode is incredible, and you can control almost every enemy in the game: slot machines, flying creatures, uggers, zubbas...and this is just the beginning. (Congrats Rare Witch Project)","data":["80130402 0001","8008B4D1 0002"],"options":null},"Have\\All Moves":{"note":"Press Top D-pad,Do not use with Have\\All Moves \u0026 Dragon Kazooie Or Have\\Dragon Kazooie","data":["D1083F08 0800","811314F0 8029","D1083F08 0800","811314F2 0000","81290018 FFFF","8129001A FFFF","8129001C FFFF","8129001E FFFF"],"options":null},"Have\\All Moves \u0026 Dragon Kazooie":{"note":"Press Top D-pad,Do not use with Have\\All Moves Or Have\\Dragon Kazooie","data":["D1083F08 0800","811314F0 8029","D1083F08 0800","811314F2 0000","81290018 FFFF","8129001A FFFF","8129001C FFFF","8129001E FFFF","81290078 FFFF","8129007A FFFF"],"options":null},"Have\\Dragon Kazooie":{"note":"","data":["D1083F08 0800","811314F0 8029","D1083F08 0800","811314F2 0000","81290078 FFFF","8129007A FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["8112FFD2 42C8"],"options":null},"Infinite\\Energy\\Banjo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207AF 000A","801207B0 000A"],"options":null},"Infinite\\Energy\\Banjo and Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0A0A","81120794 0A0A"],"options":null},"Infinite\\Energy\\Bee":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207A3 000A","801207A4 000A"],"options":null},"Infinite\\Energy\\Detonator":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","811207BE 0A0A"],"options":null},"Infinite\\Energy\\Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","811207B2 0A0A"],"options":null},"Infinite\\Energy\\Mumbo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","811207B8 0A0A"],"options":null},"Infinite\\Energy\\Snowball":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","80120797 0005"],"options":null},"Infinite\\Energy\\Stony":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207A9 000A","8011B65A 000A"],"options":null},"Infinite\\Energy\\Submarine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207B5 000A","801207B6 000A"],"options":null},"Infinite\\Energy\\T-Rex Baby":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207CF 000A","801207D0 000A"],"options":null},"Infinite\\Energy\\Washing Machine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","811207A6 0A0A"],"options":null},"Instant Warp\\Options\\Cauldron Keep":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Cauldron Keep":"015D","Colosseum kickball arena":"0180","Crazy Castle Stockade Jump the hoops multi":"017C","Crazy Castle Stockade balloon burst multi":"017B","Dodgems":"0186","Grunty Industries packing game":"017D","Gun chamber":"0160","Gun room still":"016A","The gatehouse":"015E","Tower of Tragedy Quiz":"015F"}},"Instant Warp\\Options\\Cloud Cuckoo Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Central cavern":"013A","Cloud Cuckoo Land 1":"0136","Cloud Cuckoo Land 2":"0161","Humba wumba's wigwam":"0140","Inside the cheesewedge":"0138","Inside the pot o gold":"013D","Inside the trashcan":"0137","Mingy jongo's skull":"013F","Mumbo's skull":"013E","Trash can mini":"0185","Zubba's nest":"0139","Zubba's nest multi":"0188"}},"Instant Warp\\Options\\Glitter Gulch Mine":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Canary cave":"00DB","Chuffy's cab":"00D0","Crushing shed":"00CB","Flooded caves":"00CC","Fuel depot":"00CA","Generator caverns":"00D3","Gloomy caverns":"00D2","Humba":"00E9","Inside chuffy's boiler boss":"00D1","Mine":"00C7","Mumbo's hut":"00D9","Mumbo's skull":"0171","Ordnance Storage entrance":"0163","Ordnance Storage game":"0164","Ordnance Storage game Multi":"0165","Ordnance storage":"00DC","Power hut":"00D4","Power hut basement":"00CF","Prospectors hut":"00D8","Testing":"0170","Toxic gas cave":"00DA","Train station":"00D7","Water storage":"00CD","Water supply pipe":"0126","Waterfall cavern":"00CE","Wumba's wigwam":"00D5"}},"Instant Warp\\Options\\Grunty Industries":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Basement":"010F","Basement \"repair depot":"0110","Basement \"waste disposal\"":"0111","Elevator shaft":"0105","Floor 2":"0106","Floor 2 \"electromagnet chamber\"":"0107","Floor 3":"0108","Floor 3 \"boiler plant\"":"0109","Floor 3 \"packing room\"":"010A","Floor 4":"010B","Floor 4 \"cable room\"":"010C","Floor 4 \"clinkers cavern\"":"0162","Floor 4 \"quality control\"":"010D","Floor 5":"010E","Inside":"0101","Mumbo's skull":"0172","Outside":"0100","Sewer entrance":"0187","Train station":"0102","Trash compactor":"0104","Water supply pipe":"0125","Workers quarters":"0103"}},"Instant Warp\\Options\\Hailfire Peaks":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Boggy's igloo":"0131","Chilli billi":"012B","Chilly willy":"012C","Colosseum kickball stadium lobby":"012D","Ice train station":"012A","Icicle grotto":"0132","Icy side":"0128","Icy side still":"0168","Inside the volcano":"0133","Lava side":"0127","Lava train station":"0129"}},"Instant Warp\\Options\\Isle O Hags":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Cliff top":"0155","Cliff top Mumbo's skull":"0156","Heggy's egg shed":"0150","Jiggywiggy's temple":"0151","Pine Grove":"0154","Plateau":"0152","Plateau \"Honey B's Hive\"":"0153","Quagmire":"015C","Wooded Hollow":"014F","inside another digger tunnel":"015B","wasteland":"015A"}},"Instant Warp\\Options\\Jinjo Village":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Black Jinjo's House":"0146","Blue Jinjo's House":"0148","Bottles house":"0143","Brown Jinjo's House":"014A","Green Jinjo's House":"0145","Jinjo Village":"0142","King Jingalings throne room":"0144","Orange Jinjo's House":"014B","Purple Jinjo's House":"014C","Red Jinjo's House":"014D","White Jinjo's House":"014E","Yellow Jinjo's House":"0147"}},"Instant Warp\\Options\\Jolly Roger's Lagoon":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Ancient Swimming Baths":"00F4","Atlantis":"01A8","Blubber's wave race hire":"00FF","Electric Eels lair":"00F6","Inside the big fish":"00F8","Jolly Roger's Lagoon":"01A7","Jolly's":"00ED","Pawno's emporium":"00EE","Seabottom":"01A9","Seaweed Sanctum":"00F7","mumbo's skull":"00EF","sea bottom cavern":"0181","submarine multi":"0182","temple of the fishes":"00FA"}},"Instant Warp\\Options\\Mayahem Temple":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Code chamber":"00BC","Humba's Wigwam":"00B6","Inside Targitzans Temple":"0178","Jade Snake Grove":"00C4","Kickball Arena":"00C9","Mayan Kickball Arena":"017F","Multi":"0166","Mumbo's skull":"00B7","Prison Compound":"00B9","Still":"0167","Targitzan Temple Lobby":"0179","Targitzan's Slighty Sacred Temple":"0177","Targitzan's Temple Boss":"017A","The Temple":"00B8","Treasure Chamber":"00C5"}},"Instant Warp\\Options\\Not sure":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Bottles house":"0143","Bottles house still":"0169","HAG Inside":"018A","HAG1 Final Boss":"019A","Humba Wumba's wigwam 1":"0135","Humba Wumba's wigwam 2":"0157","Inside Chuffy's wagon":"0121","Inside the digger tunnel":"0141","Jingalings Zombified Palace":"019B","Lord woo fak fak":"00FC","Mr Patch":"00F9","Mumbo's Skull":"0134","Smuggler cavern":"01A6"}},"Instant Warp\\Options\\Spiral Mountain":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Banjo's house":"0173","Behind The Waterfall":"00AE","Grunty's Old Lair":"00AD","Top Of Castle":"00AF"}},"Instant Warp\\Options\\Terrydacty Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Bonfire caverns":"011B","Chompa's belly multi":"0183","Humba's Wigwam":"011E","Inside chompa's belly":"0123","Inside the mountain":"0116","Oogle boogles cave":"0115","River passage":"0117","Stomping plains":"011A","Styracosaurus family cave":"0118","Terry's nest":"0113","Terrydacty Land":"0112","Train station":"0114","Unga bunga's cave":"0119"}},"Instant Warp\\Options\\Witchy World":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Balloon burst game":"00E4","Cave of horrors":"00EA","Crazy castle lobby":"00E2","Crazy castle pump room":"00E3","Crazy castle stockade":"00E1","Crazy castle stockade \"sop\"":"013B","Dodgem challenge \"1 vs 1\"":"00DE","Dodgem challenge \"2 vs 1\"":"00DF","Dodgem challenge \"3 vs 1\"":"00E0","Dodgem dome lobby":"00DD","Haunted cavern":"00EB","Hoop hurry game":"00E5","Mumbo's skull":"0176","Saucer of Peril":"0124","Star spinner":"00E6","Star spinner \"sop\"":"013C","The inferno":"00E7","Train station":"00EC","Witcy World":"00D6"}},"Multi-Player\\Infinite Health\\Player 1":{"note":"","data":["8013A541 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 2":{"note":"","data":["8013A545 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 3":{"note":"","data":["8013A549 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 4":{"note":"","data":["8013A54D 0064"],"options":null},"Play As":{"note":"To use this cheat, put the cheat on, then press L as you walk through a door to become that chosen character","data":["D008B494 0020","8012BFAC 00??"],"options":{"Banjo":"0A","Banjo and Kazooie":"01","Bee":"06","Detonator":"0F","Golden Goliath":"0E","Kazooie":"0B","Mumbo":"0D","Snowball":"02","Stony":"08","Submarine":"0C","T-rex baby":"12","T-rex daddy":"13","Truck":"10","Washing machine":"07"}}},"C9C3A987-5810344C-C:4A":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118A080 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118A082 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118A084 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118A086 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["8018B4D8 00??","8018B4D9 00??","8018B4DA 00??","8018B4DB 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["8016271D 00??","8016274A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["801627FD 00??","8016282A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["801628DD 00??","8016290A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["801629BD 00??","801629EA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["80162A9D 00??","80162ACA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["80162B7D 00??","80162BAA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818B5BF 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F61B5 0020","810F6268 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F61C5 0020","810F7040 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F61D5 0020","810F7E18 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F61E5 0020","810F8BF0 4000"],"options":null}},"CA12B547-71FA4EE4-C:45":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2212 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE51F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80382CB7 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","802020F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801DDC55 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801FC5C5 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801EF96D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","80202225 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801D9ABD 0001"],"options":null}},"CA1BB86F-41CCA5C5-C:4A":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D55E0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112CF2E 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800EB470 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D55C0 0001","50001701 0000","800D55C8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D5850 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D5889 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D55B9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D55BA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D55BB 0003"],"options":null}},"CA2A7444-71DAB71C-C:50":{"Always Place 1st":{"note":"","data":["80152D61 0000"],"options":null},"Have All\\Cars":{"note":"","data":["50001504 0000","800AAD4B 0001"],"options":null},"Have All\\Tracks":{"note":"","data":["8116A0EC FFFF"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D01354BF 0010","8112CE6C 43CB"],"options":null}},"CB93DB97-7F5C63D5-C:46":{"Have 99 coins":{"note":"","data":["810BBBDE 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C8542 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BBBCC 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BBBD6 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BBBDA 0009"],"options":null}},"CBFE69C7-F2C0AB2A-C:45":{"Access Level Select":{"note":"On the main menu Scroll down to make CHEATS visible to go into Level Select.For in-Game Cheats,Pause gameplay.","data":["810DD21C 8001"],"options":null},"Have\\All TARZAN Letters":{"note":"","data":["800DD225 00FF"],"options":null},"Have\\Coins Collected 100%":{"note":"","data":["800DD257 0064"],"options":null},"Have\\Full Portrait":{"note":"","data":["800DD224 00FF"],"options":null},"Have\\Level \u0026 Tokens Completed 100%":{"note":"","data":["800DD22F 0000","800DD230 0001","800DD231 0000"],"options":null},"Infinite\\Bonus Timer":{"note":"This is For All Timers on Bonus Levels","data":["801735FE 0025"],"options":null},"Infinite\\Green Weapon":{"note":"","data":["81192096 0063"],"options":null},"Infinite\\Health":{"note":"","data":["811921C0 0120"],"options":null},"Infinite\\Lives":{"note":"","data":["800DD252 00??"],"options":{"3 Lives":"03","99 Lives":"63"}},"Infinite\\Purple Weapon":{"note":"","data":["8119209A 0063"],"options":null},"Infinite\\Red Weapon":{"note":"","data":["81192098 0063"],"options":null},"Press GS For\\Sabor Attacks\\Sabor 1 Hit Kill":{"note":"","data":["8924A23E 0001"],"options":null}},"CCEB3858-26952D97-C:50":{"Have 99 Coins":{"note":"","data":["810BB4FE 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C7E62 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BB4EC 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BB4F6 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BB4FA 0009"],"options":null}},"CCEDB696-D3883DB4-C:4A":{"All Items":{"note":"","data":["50002402 0202","810EC7E0 0001","50004601 0000","800EC861 0003"],"options":null},"Item Modifier Codes\\Position 01":{"note":"","data":["800EC7E0 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 02":{"note":"","data":["800EC7E1 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 03":{"note":"","data":["800EC7E2 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 04":{"note":"","data":["800EC7E3 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 05":{"note":"","data":["800EC7E4 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 06":{"note":"","data":["800EC7E5 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 07":{"note":"","data":["800EC7E6 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 08":{"note":"","data":["800EC7E7 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 09":{"note":"","data":["800EC7E8 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 10":{"note":"","data":["800EC7E9 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 11":{"note":"","data":["800EC7EA 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 12":{"note":"","data":["800EC7EB 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 13":{"note":"","data":["800EC7EC 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 14":{"note":"","data":["800EC7ED 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 15":{"note":"","data":["800EC7EE 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 16":{"note":"","data":["800EC7EF 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 17":{"note":"","data":["800EC7F0 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 18":{"note":"","data":["800EC7F1 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 19":{"note":"","data":["800EC7F2 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 20":{"note":"","data":["800EC7F3 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 21":{"note":"","data":["800EC7F4 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 22":{"note":"","data":["800EC7F5 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 23":{"note":"","data":["800EC7F6 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 24":{"note":"","data":["800EC7F7 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 25":{"note":"","data":["800EC7F8 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 26":{"note":"","data":["800EC7F9 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 27":{"note":"","data":["800EC7FA 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 28":{"note":"","data":["800EC7FB 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 29":{"note":"","data":["800EC7FC 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 30":{"note":"","data":["800EC7FD 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 31":{"note":"","data":["800EC7FE 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 32":{"note":"","data":["800EC7FF 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 33":{"note":"","data":["800EC800 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 34":{"note":"","data":["800EC801 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 35":{"note":"","data":["800EC802 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 36":{"note":"","data":["800EC803 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 37":{"note":"","data":["800EC804 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 38":{"note":"","data":["800EC805 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 39":{"note":"","data":["800EC806 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 40":{"note":"","data":["800EC807 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 41":{"note":"","data":["800EC808 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 42":{"note":"","data":["800EC809 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 43":{"note":"","data":["800EC80A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 44":{"note":"","data":["800EC80B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 45":{"note":"","data":["800EC80C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 46":{"note":"","data":["800EC80D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 47":{"note":"","data":["800EC80E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 48":{"note":"","data":["800EC80F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}}},"CD538CE4-618AFCF9-C:45":{"Have 6 Carrots":{"note":"","data":["80164519 007E"],"options":null},"Have All\\Collectibles\\Stage 1":{"note":"","data":["80164510 0014"],"options":null},"Have All\\Collectibles\\Stage 2":{"note":"","data":["80164511 0014"],"options":null},"Have All\\Collectibles\\Stage 3":{"note":"","data":["80164512 0014"],"options":null},"Have All\\Collectibles\\Stage 4":{"note":"","data":["80164513 0014"],"options":null},"Have All\\Collectibles\\Stage 5":{"note":"","data":["80164514 0014"],"options":null},"Have All\\Collectibles\\Stage 6":{"note":"","data":["80164515 0014"],"options":null},"Have All\\Costumes":{"note":"","data":["8016451A 00FE"],"options":null},"Have All\\Levels":{"note":"","data":["80164508 003F"],"options":null},"Infinite Health":{"note":"","data":["8018BA7D 000F"],"options":null},"Max Collectable Items":{"note":"","data":["80164501 0014"],"options":null},"Press L To levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D018BAB5 0020","8118B9E0 4200"],"options":null}},"CD5BEC0F-86FD1008-C:45":{"Extra Characters":{"note":"","data":["8113A488 1000","8113A48A 07FF","8113A48C 2000","8113A48E 3FFF"],"options":null},"Infinite Creation Points":{"note":"","data":["80136245 0000"],"options":null}},"CD7559AC-B26CF5AE-C:45":{"Access All Moves":{"note":"","data":["8037C3A0 0001","8037C3A1 007F","8037C3A2 00FF","8037C3A3 00FF"],"options":null},"Character Select":{"note":"When Mumbo transforms you hold:C-Up for the Termite,C-Right for the Pumpkin,C-Down for the Walrus,C-Left for the Crocc,R for the Bumble Bee,L for the Washing Machine,Press nothing to turn into Banjo","data":["D0281251 0008","8037C2D3 0002","D0281251 0001","8037C2D3 0003","D0281251 0004","8037C2D3 0004","D0281251 0002","8037C2D3 0005","D0281251 0010","8037C2D3 0006","D0281251 0020","8037C2D3 0007"],"options":null},"Do Shock Spring Jump From Anywhere":{"note":"Press A Button. Do not use with Take Off And Fly From Anywhere","data":["8037C1D2 0002"],"options":null},"Game 100% Complete":{"note":"","data":["8137C3A0 001F","50000302 0000","8137C3A2 FFFF","50000602 0000","813832C0 FFFF","81383FCA 0064","81383FDC 0064","50000802 0000","813832F0 FFFF","81385FA0 0063","81385FC4 0063","81385FF0 0064","50000602 0000","81385FF2 6464","50001002 0000","813831A8 FFFF","813831B0 FF7F","813831B2 FFB0","813831B4 3DA6","813831B6 F264","813831C6 FF7F"],"options":null},"Have Zero Time all Levels":{"note":"","data":["50000B04 0000","81386004 3000"],"options":null},"Infinite\\Air":{"note":"","data":["813851AE 0E10"],"options":null},"Infinite\\Always Have All Jinjos":{"note":"","data":["80385F7B 00FF"],"options":null},"Infinite\\Eggs":{"note":"","data":["80385F67 00FF"],"options":null},"Infinite\\Gold Feathers":{"note":"","data":["80385F73 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["803851A3 0008"],"options":null},"Infinite\\Jiggies":{"note":"","data":["80385FCB 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["80385F8B 00FF"],"options":null},"Infinite\\Mumbo Tokens":{"note":"","data":["80385FC6 00FF","80385FA2 00FF"],"options":null},"Infinite\\Notes":{"note":"Just collect one Note to Have 255 Notes in all Worlds.","data":["80385FF2 00FF","80385F62 0001"],"options":null},"Infinite\\Red Feathers":{"note":"","data":["80385F6F 00FF"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0281251 0020","8137C4BC 43E0"],"options":null},"Secret Items":{"note":"","data":["81283400 ????"],"options":{"Have All Collected":"FFFF","Have None":"0000"}},"Take Off And Fly From Anywhere":{"note":"Press A Button. Do not use with Do Shock Spring Jump From Anywhere","data":["8037C1D1 0002"],"options":null}},"CEA8B54F-7F21D503-C:45":{"Always Berserk Mode":{"note":"","data":["801BF9AF 00FF"],"options":null},"Always Drop\\Player 1":{"note":"","data":["801BF9BB 00??"],"options":{"Bar":"00","Big Water":"06","Bomb":"0A","Corner":"02","Down Bar":"05","Down Square":"04","Fireball":"0B","Medium Water":"07","Small Water":"08","Smallest Water":"09","Square":"03","T":"01"}},"Always Drop\\Player 2":{"note":"","data":["801F013B 00??"],"options":{"Bar":"00","Big Water":"06","Bomb":"0A","Corner":"02","Down Bar":"05","Down Square":"04","Fireball":"0B","Medium Water":"07","Small Water":"08","Smallest Water":"09","Square":"03","T":"01"}},"Always Empty Drain":{"note":"","data":["801BF991 0000","811BF992 0000","811BF994 0000"],"options":null},"Infinite Ducks":{"note":"","data":["801BF94B 0009"],"options":null},"Infinite Lakes":{"note":"","data":["811BF93E 0009"],"options":null},"Mega Score":{"note":"","data":["801BF958 00FF","801EED04 00FF"],"options":null},"Practice Lessons Open":{"note":"","data":["810B0BAA 0008"],"options":null},"Stop Level Timer":{"note":"","data":["801BF9B2 00FF"],"options":null}},"CEA8B54F-7F21D503-C:50":{"Always Empty Drain":{"note":"","data":["801BF991 0000","811BF992 0000","811BF994 0000"],"options":null},"Bezerk Mode":{"note":"","data":["801BF9AF 00FF"],"options":null},"Stop Level Timer":{"note":"","data":["801BF9B2 00FF"],"options":null}},"CEDCDE1E-513A0502-C:50":{"Access Another World":{"note":"This is for Puzzle Mode","data":["8116D100 0001"],"options":null},"Bubble Pointer 1P V CPU":{"note":"","data":["8017E1FD 0001"],"options":null},"Bubble Pointer Puzzle":{"note":"","data":["801807CD 0001"],"options":null},"Infinite Credit":{"note":"","data":["80120171 00FF"],"options":null},"Max Points Aid":{"note":"","data":["81170E4A 25C2"],"options":null}},"CF8957AD-96D57EA9-C:45":{"Infinite\\Health":{"note":"For Overhead \u0026 Driving Levels","data":["81064DF0 42C8"],"options":null},"Unlock All\\Characters":{"note":"","data":["50000C01 0000","8006252D 0001"],"options":null},"Unlock All\\Levels":{"note":"","data":["50000301 0000","80062508 0001","50000801 0000","8006250C 0001","50000801 0000","80062516 0001","50000A01 0000","8006251F 0001"],"options":null}},"D0151AB0-FE5CA14B-C:45":{"Have All Weapons":{"note":"","data":["8120A8F6 FFFF"],"options":null},"Infinite\\Ammo (All Weapons)":{"note":"","data":["81261A40 A05B"],"options":null},"Infinite\\Armor":{"note":"","data":["8020A987 0064"],"options":null},"Infinite\\Experience":{"note":"","data":["8020A967 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["8020A965 0064"],"options":null},"Max\\Acro":{"note":"","data":["8020A96F 0007"],"options":null},"Max\\Attack":{"note":"","data":["8020A96B 0007"],"options":null},"Max\\Power":{"note":"","data":["8020A971 0007"],"options":null},"Max\\Speed":{"note":"","data":["8020A96D 0007"],"options":null},"Max\\Vitality":{"note":"","data":["8020A969 0007"],"options":null}},"D09BA538-1C1A5489-C:50":{"Car Select":{"note":"","data":["D00F5900 0000","800F5900 00??"],"options":{"Chevrolet Camaro":"03","Chrysler Jeep Jeepster (Prototype)":"08","Default":"00","Dodge Viper":"04","Donkey In Glass Box":"0E","Ferrari F40":"07","Hotdog":"0A","Hummer H1":"05","Jeep Wrangler":"02","McLaren F1":"09","Mitsubishi Eclipse":"01","Nintendo 64 Logo":"0C","Nintendo Power Car":"0B","Porsche 911 Turbo":"06","Taco":"0D"}},"Infinite\\Max Acceleration\\Player 1":{"note":"","data":["800F590D 0005"],"options":null},"Infinite\\Max Acceleration\\Player 2":{"note":"","data":["800F5AF9 0005"],"options":null},"Infinite\\Max Acceleration\\Player 3":{"note":"","data":["800F5CE5 0005"],"options":null},"Infinite\\Max Acceleration\\Player 4":{"note":"","data":["800F5ED1 0005"],"options":null},"Infinite\\Max Handling\\Player 1":{"note":"","data":["800F590C 0005"],"options":null},"Infinite\\Max Handling\\Player 2":{"note":"","data":["800F5AF8 0005"],"options":null},"Infinite\\Max Handling\\Player 3":{"note":"","data":["800F5CE4 0005"],"options":null},"Infinite\\Max Handling\\Player 4":{"note":"","data":["800F5ED0 0005"],"options":null},"Infinite\\Max Money\\Player 1":{"note":"","data":["800F5905 000F"],"options":null},"Infinite\\Max Money\\Player 2":{"note":"","data":["800F5AF1 000F"],"options":null},"Infinite\\Max Money\\Player 3":{"note":"","data":["800F5CDD 000F"],"options":null},"Infinite\\Max Money\\Player 4":{"note":"","data":["800F5EC9 000F"],"options":null},"Infinite\\Max Top Speed\\Player 1":{"note":"","data":["800F590E 0005"],"options":null},"Infinite\\Max Top Speed\\Player 2":{"note":"","data":["800F5AFA 0005"],"options":null},"Infinite\\Max Top Speed\\Player 3":{"note":"","data":["800F5CE6 0005"],"options":null},"Infinite\\Max Top Speed\\Player 4":{"note":"","data":["800F5ED2 0005"],"options":null},"Infinite\\Nitro\\Player 1":{"note":"","data":["800F590F 0009"],"options":null},"Infinite\\Nitro\\Player 2":{"note":"","data":["800F5AFB 0009"],"options":null},"Laps 2 Race":{"note":"","data":["80118E20 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"[Press F9]\\All Cars (All Modes)":{"note":"","data":["880EA08B 000E","88102A71 000E"],"options":null},"[Press F9]\\Jump To Season 6":{"note":"","data":["881023A8 0005"],"options":null}},"D124DBB7-7C9FF5E5-C:00":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["811744B8 FFFF","811744BA FFFF","811744BE 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FEC8 270F"],"options":null}},"D1A78A07-52A3DD3E-C:50":{"Access Secret Characters\\Bengal The Tiger":{"note":"","data":["800B4DB2 0011"],"options":null},"Access Secret Characters\\Festus":{"note":"","data":["800B0DC3 0001"],"options":null},"Access Secret Characters\\Kimmi \u0026 Cindy":{"note":"","data":["800B0DAA 0011"],"options":null},"Access Secret Characters\\Mark":{"note":"","data":["800B0DB7 0012"],"options":null},"Access Secret Characters\\Marvin The Alien":{"note":"","data":["800B0DC7 0001"],"options":null},"Access Secret Characters\\Robert \u0026 Delvis":{"note":"","data":["800B0DBA 0011"],"options":null},"Access Secret Characters\\Starr \u0026 Traci":{"note":"","data":["800B0DBE 0011"],"options":null},"Access Secret Characters\\Twfan \u0026 Eagamer":{"note":"","data":["800B0DAE 0011"],"options":null},"Infinite \u0026 Max Power-Ups":{"note":"","data":["800B4612 00F0","50000801 0000","800B4600 00FF"],"options":null}},"D1F7D8AB-293B0446-C:45":{"Extra Lives":{"note":"Not to be used with CLassic Mode, or it will freeze","data":["8007F90E 0063"],"options":null},"Extra Points":{"note":"Not to be used with CLassic Mode, or it will freeze","data":["8107F8FE FFFF"],"options":null},"Infinite Armageddon":{"note":"Not to be used with CLassic Mode, or it will freeze","data":["8107F892 0001"],"options":null},"Infinite Items On Pickup":{"note":"Not to be used with CLassic Mode, or it will freeze","data":["8107F8A2 270F"],"options":null},"Infinite Lives (Classic Asteroids)":{"note":"","data":["8007F90F 0009"],"options":null},"Unlock Classic Asteroids":{"note":"","data":["8106DF5A 0001"],"options":null}},"D25C1211-13EEBF67-C:44":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["8116FA44 FFFF","8116FA46 FFFF","8116FA4A 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FC1C 270F"],"options":null}},"D2BE2F14-38453788-C:45":{"0% in Move List":{"note":"","data":["81135620 0000"],"options":null},"Enable Everything":{"note":"","data":["8112E21C F000","8112E21E 09FF","8112E220 FFFF","8112E222 FFFF"],"options":null},"Infinite Creation Points":{"note":"","data":["80161313 0000"],"options":null},"Max\\Charisma":{"note":"","data":["8014E3EC 000A"],"options":null},"Max\\Mat Skills":{"note":"","data":["8014E3ED 000A"],"options":null},"Max\\Recovery":{"note":"","data":["8014E3EB 000A"],"options":null},"Max\\Speed":{"note":"","data":["8014E3EA 000A"],"options":null},"Max\\Strength":{"note":"","data":["8014E3E8 000A"],"options":null},"Max\\Toughness":{"note":"","data":["8014E3E9 000A"],"options":null}},"D3F97D49-6924135B-C:50":{"Infinite Eggs":{"note":"This is for All Yoshis All levels","data":["80285078 0006"],"options":null},"Infinite\\Health":{"note":"This is for All Yoshis All levels","data":["50000804 0000","800F954F 0008"],"options":null},"Infinite\\Lives":{"note":"This is for All Yoshis All levels","data":["800F958F 00FF"],"options":null}},"D43DA81F-021E1E19-C:45":{"Always Have Wallet Size":{"note":"","data":["8011A832 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C8675 0010","8111BAF6 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011B679 00FF","8011BAEF 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C8675 0000","8011BBA3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["800257D4 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011A816 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011A817 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011A818 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011A819 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023E9AF 0020","8023E9B5 0033"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F3688 0005","801F3848 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["8011A832 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011A833 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011A831 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A82C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A834 30FF","8111A836 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011A808 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011A80E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011A814 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011A80C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011A806 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011A810 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011A805 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011A804 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011A807 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011A80A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011A80D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011A811 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011A812 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011A809 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011A80F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011A815 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011A813 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011A80B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011A81F 0009"],"options":null},"Infinite\\Big Keys,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011A838 0007","8011A839 0007","8011A83A 0007","8011A83B 0007","8011A83C 0007","8011A83D 0007","8011A83E 0007","8011A83F 0007","8011A840 0007","8011A841 0007","8011A842 0007","8011A84F 0009","8011A850 0009","8011A851 0009","8011A852 0009","8011A853 0009","8011A859 0009","8011A85C 0009","8011A857 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011A824 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011A81E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011A81D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011A822 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011A81C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111A7C0 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011A7C9 0008","8011A7CA 0001","8011A7CC 0001","8011A7C3 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011A82A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111BB5C 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011BB61 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011BB65 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C8675 0020","811DAC50 40CB","D01C8675 0000","811DB472 000D","8011A800 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011A85F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011A861 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111A7BE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111BB58 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C8675 0020","811DB472 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C8675 0020","811DAC50 40CB"],"options":null},"Press L+R For FMV Select":{"note":"Hold down `L+R' after the Nintendo logo is spinning to see your favourite FMV","data":["D01C8675 0030","8011A793 00A0","D01C8675 0030","8011A79B ????"],"options":{"anondorf FMV":"F600","ire FMV":"F50F","lanet Making FMV":"F400","nding":"F80E","ore Triforce FMV":"F700","riforce FMV":"F200"}},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C8675 0010","8011A797 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111A79C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011A81A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011A81B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011A800 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011A7CE 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111B9B2 0000","8111B9B4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"D43DA81F-021E1E19-C:4A":{"Always Have Wallet Size":{"note":"","data":["8011A832 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C8675 0010","8111BAF6 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011B679 00FF","8011BAEF 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C8675 0000","8011BBA3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest 01).","data":["800257D4 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011A816 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011A817 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011A818 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011A819 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801D8D8A 0006","801F23C8 0001","801EEE48 0001"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.If you Use Black Gauntlets,They are as strong as the Golden Gauntlets. This code also gives you the Silver Scale and the Golden Scale and unlimited rupees.","data":["8011A832 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011A833 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011A831 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A82C 7777"],"options":null},"Have\\All Quest/Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A834 30FF","8111A836 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011A808 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011A80E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011A814 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011A80C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011A806 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011A810 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011A805 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011A804 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011A807 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011A80A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011A80D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011A811 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011A812 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011A809 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011A80F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011A815 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011A813 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011A80B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011A81F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011A838 0007","8011A839 0007","8011A83A 0007","8011A83B 0007","8011A83C 0007","8011A83D 0007","8011A83E 0007","8011A83F 0007","8011A840 0007","8011A841 0007","8011A842 0007","8011A84F 0009","8011A850 0009","8011A851 0009","8011A852 0009","8011A853 0009","8011A859 0009","8011A85C 0009","8011A857 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011A824 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011A81E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011A81D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011A822 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011A81C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111A7C0 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011A7C9 0008","8011A7CA 0001","8011A7CC 0001","8011A7C3 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011A82A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111BB5C 0001"],"options":null},"Infinite\\Timers\\All other Timers":{"note":"This cheat works on all Race Timers.Under Water with iron Boots etc.","data":["8011BB61 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011BB65 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C8675 0020","811DAC50 40CB","D01C8675 0000","811DB472 000D","8011A800 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011A85F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011A861 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111A7BE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111BB58 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C8675 0020","811DB472 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C8675 0020","811DAC50 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C8675 0010","8011A797 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111A79C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011A81A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011A81B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011A800 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011A7CE 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111B9B2 0000","8111B9B4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"D48944D1-B0D93A0E-C:4A":{"Enable All Courses":{"note":"","data":["8112A61E FFFF"],"options":null},"Have All Characters":{"note":"","data":["50000D02 0001","810BC834 0000"],"options":null},"Max Gold Mario Badges Player 1":{"note":"","data":["800BF87B 0063"],"options":null},"No Wind":{"note":"","data":["800B45F1 0000","800B45F3 0000"],"options":null},"Unlimited\\Power Hits\\Player 1":{"note":"","data":["801B0DF8 0004"],"options":null},"Unlimited\\Power Hits\\Player 2":{"note":"","data":["801B0EB0 0004"],"options":null},"Unlimited\\Power Hits\\Player 3":{"note":"","data":["801B0F68 0004"],"options":null},"Unlimited\\Power Hits\\Player 4":{"note":"","data":["801B1020 0004"],"options":null},"Zero Strokes Taken":{"note":"","data":["801B0313 0000"],"options":null}},"D52FE29D-8EA6A759-C:00":{"Infinite 9 Credits":{"note":"","data":["80279C8F 0009"],"options":null}},"D543BCD6-2BA5E256-C:50":{"Access All Rune Stones":{"note":"","data":["50000302 0000","810AE6D6 07FF"],"options":null},"Access All Window Shards":{"note":"","data":["50000302 0000","810AE6C6 07FF"],"options":null},"Access Skill Level 99":{"note":"And Get A Familiar","data":["800FD38A FFFF"],"options":null},"Always Max Turbo Attack":{"note":"","data":["810FD4AE FF64"],"options":null},"Get All Stuff":{"note":"Opens Up New Levels Etc,","data":["50001410 0000","810C5DA6 FFFF"],"options":null},"Infinite Use Of Items":{"note":"On Pick-Ups Only","data":["50001310 0000","800C5EC6 FFFF"],"options":null},"New Player Name":{"note":"","data":["810FD36C 4249","810FD36E 5443","810FD370 4820","810FD372 3639"],"options":null},"Start With Big Familiar":{"note":"Do not use this with Small Familiar Code","data":["810FD512 0202"],"options":null},"Start With Small Familiar":{"note":"Do not use this with Big Familiar Code","data":["810FD512 0102"],"options":null}},"D571C883-822D3FCF-C:50":{"Have All\\Keys":{"note":"This will give you the Grey \u0026 Red,Green \u0026 Gold Keys","data":["800BE268 00FF","800BE26D 00FF","800BE26E 00FF"],"options":null},"Have All\\Music Notes":{"note":"This will give you all 10 Music Notes","data":["50000A01 0000","800BE3A0 0001"],"options":null},"Infinite\\Health":{"note":"","data":["800BE2A7 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["800BE293 0009"],"options":null},"Max Money":{"note":"","data":["810BE296 03E7"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D017E975 0020","810DBD88 44CB"],"options":null}},"D5898CAF-6007B65B-C:50":{"All Multiplayer Characters":{"note":"","data":["8015C8E1 000F","8015C8E2 00FF","8015C8E3 00FF"],"options":null},"C4 Detector":{"note":"Slot 3","data":["80157C98 0001"],"options":null},"C4 Explosives":{"note":"Slot 1","data":["80157C93 0001"],"options":null},"Card Key":{"note":"Slot 3","data":["80157C9A 0001"],"options":null},"Flash Light":{"note":"Slot 2","data":["80157C95 0001"],"options":null},"Infinite\\Ammo and No Reloads":{"note":"","data":["80157C9B 0078","80157C94 0078","80157C90 0063","80179F6F 001E","80157C91 0063","80179F83 0008"],"options":null},"Infinite\\Health":{"note":"","data":["80179F8B 0064"],"options":null},"Key":{"note":"Slot 2","data":["80157C99 0001"],"options":null},"Max Power Mode":{"note":"","data":["8015C8E7 0001"],"options":null},"Sudden death \u0026 trial modes unlocked":{"note":"","data":["8015C8E0 00A0"],"options":null},"Time is always 00:20:38":{"note":"","data":["8010D342 0078"],"options":null},"Walk Through Walls/Objects":{"note":"Press Z Button And Joystick Forward Dont Stand Too Close To Wall/Object","data":["D0139BC4 0020","8117964C 43C7"],"options":null},"Weapon modifier":{"note":"","data":["80179F78 00??"],"options":{"Handgun":"00","Handgun w/ silencer":"14","Rocket launcher":"03","Shotgun":"02","Submachine gun":"01"}}},"D5B2339C-CABCCAED-C:50":{"Have\\Max Bonus":{"note":"","data":["810EC2CA 270F"],"options":null},"Have\\[All Guns \u0026 Infinite Ammo]":{"note":"Press C Left to receive all Guns","data":["81102C0A 0001","50000B04 0000","810EBF66 03E8"],"options":null},"Have\\[All Keys]":{"note":"","data":["810EBF60 0001","800EBF61 0001","810EBF62 0001"],"options":null},"Have\\[High Score]":{"note":"","data":["810EBF4E FFFF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["810EC2D2 03E7"],"options":null},"Infinite\\Health":{"note":"If you fall into Water just turn off the Infinite Health \u0026 put back on when you restrat.","data":["810EBF58 42D8"],"options":null},"Level Select":{"note":"","data":["81103D82 00??"],"options":{"Boss Mission Destroy Carrier Level":"10","Mission 1 Shock Strike":"01","Mission 10 Scramble Pylon":"0A","Mission 11 Herding Research":"0B","Mission 12 The Extractor":"0C","Mission 13 Nuke Tower":"0D","Mission 14 Mucus Storage":"0E","Mission 15 Depot Attack":"0F","Mission 16 Sterilization":"11","Mission 17 Scorpion Killer":"12","Mission 18 Core Nuke":"13","Mission 19 Gate Keeper":"14","Mission 2 Radar Run":"02","Mission 3 Return Fire":"03","Mission 4 The Sonar Tower":"04","Mission 5 Big Blips":"05","Mission 6 Short Fuse":"06","Mission 7 Outpost":"07","Mission 8 Sewer":"08","Mission 9 Clean Up":"09","Queen Mission":"15"}},"Level Select Menu":{"note":"","data":["811022CA 0EF0"],"options":null}},"D614E5BF-A76DBCC1-C:50":{"Access Level Select":{"note":"On the main menu Scroll down to make CHEATS visible to go into Level Select.For in-Game Cheats,Pause gameplay.","data":["810DD47C 8001"],"options":null},"Have\\All TARZAN Letters":{"note":"","data":["800DD485 00FF"],"options":null},"Have\\Coins Collected 100%":{"note":"","data":["800DD4B7 0064"],"options":null},"Have\\Full Portrait":{"note":"","data":["800DD484 00FF"],"options":null},"Have\\Level \u0026 Tokens Completed 100%":{"note":"","data":["800DD48F 0000","800DD490 0001","800DD491 0000"],"options":null},"Infinite\\Bonus Timer":{"note":"This is For All Timers on Bonus Levels","data":["8017373E 0025"],"options":null},"Infinite\\Green Weapon":{"note":"","data":["811921D6 0063"],"options":null},"Infinite\\Health":{"note":"","data":["81192300 0120"],"options":null},"Infinite\\Lives":{"note":"","data":["800DD4B2 00??"],"options":{"3 Lives":"03","99 Lives":"63"}},"Infinite\\Purple Weapon":{"note":"","data":["811921DA 0063"],"options":null},"Infinite\\Red Weapon":{"note":"","data":["811921D8 0063"],"options":null},"Press GS For\\Sabor Attacks\\Sabor 1 Hit Kill":{"note":"","data":["8924A49E 0001"],"options":null}},"D666593B-D7A25C07-C:4A":{"Buster Parts Slot Select\\Slot 01":{"note":"","data":["8020CED3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 02":{"note":"","data":["8020CED4 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 03":{"note":"","data":["8020CED5 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 04":{"note":"","data":["8020CED6 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 05":{"note":"","data":["8020CED7 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 06":{"note":"","data":["8020CED8 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 07":{"note":"","data":["8020CED9 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 08":{"note":"","data":["8020CEDA 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 09":{"note":"","data":["8020CEDB 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 10":{"note":"","data":["8020CEDC 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 11":{"note":"","data":["8020CEDD 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 12":{"note":"","data":["8020CEDE 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 13":{"note":"","data":["8020CEDF 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 14":{"note":"","data":["8020CEE0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 15":{"note":"","data":["8020CEE1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 16":{"note":"","data":["8020CEE2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 17":{"note":"","data":["8020CEE3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 18":{"note":"","data":["8020CEE4 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 19":{"note":"","data":["8020CEE5 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 20":{"note":"","data":["8020CEE6 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 21":{"note":"","data":["8020CEE7 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 22":{"note":"","data":["8020CEE8 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 23":{"note":"","data":["8020CEE9 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 24":{"note":"","data":["8020CEEA 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 25":{"note":"","data":["8020CEEB 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 26":{"note":"","data":["8020CEEC 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 27":{"note":"","data":["8020CEED 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 28":{"note":"","data":["8020CEEE 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 29":{"note":"","data":["8020CEEF 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 30":{"note":"","data":["8020CEF0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 31":{"note":"","data":["8020CEF1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 32":{"note":"","data":["8020CEF2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 33":{"note":"","data":["8020CEF3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 01":{"note":"","data":["8020CED0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 02":{"note":"","data":["8020CED1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 03":{"note":"","data":["8020CED2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Freeze Timer at 00:00":{"note":"","data":["811C44C4 0000","811C44C6 0000"],"options":null},"Have All\\Normal Items":{"note":"","data":["8120D720 FFFF","8120D722 FFFF","8120D724 FFFF","8120D726 FFFF"],"options":null},"Have All\\Special Items":{"note":"","data":["8120D71C FFFF","8120D71E FFFF"],"options":null},"Have All\\Special Weapons":{"note":"These are Equiped With Roll","data":["8120D710 FFFF"],"options":null},"Infinite\\Ammo":{"note":"","data":["8120CF8A 0080","8120CF92 0010","8120CF9A 0708","8120CFA2 0018","8120CFAA 0010","8120CFB2 0708","8120CFBA 0020","8120CFC2 0020","8120CFCA 0020","8120CFD2 0018","8120CFDA 012C","8120CFE2 0258"],"options":null},"Infinite\\Health":{"note":"","data":["8120CAEE 0050"],"options":null},"Infinite\\Max Zenny":{"note":"","data":["811C44D4 0098","811C44D6 967F"],"options":null},"Rapid Fire":{"note":"","data":["8020CF83 0002"],"options":null}},"D692CC5E-EC58D072-C:50":{"Have All\\Cups Select":{"note":"","data":["50002C02 0000","800CCF11 00??"],"options":{"Bronze Cup":"02","Gold Cup":"00","None (Default)":"04","Silver Cup":"01"}},"Have All\\Points":{"note":"","data":["810D8FE0 03E7"],"options":null},"Have All\\RB Medals":{"note":"","data":["810D8FF0 03E7"],"options":null},"Infinite\\Credits":{"note":"","data":["800BDFA5 0005"],"options":null},"Infinite\\Timer":{"note":"","data":["810D9088 44E9"],"options":null},"Infinite\\Turbos":{"note":"To enable this just select On or Off and when you press Z you will use your Turbos accordantly. Warning you can only have Infinite if you have some turbo level to begin with","data":["D00F2D16 0020","800CD091 00??"],"options":{"Off":"00","On":"08"}},"Laps To Race":{"note":"Here you can select how many laps you prefer.to race","data":["800C8909 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","7 Laps":"07","8 Laps":"08","9 Laps":"09","Laps":"06"}},"[Cheat Menu]":{"note":"Press Pause to access cheats.","data":["800CD089 00FF","800CD08A 00FF","800CD08B 00FF"],"options":null},"[Press F9]\\Enable All Courses":{"note":"","data":["890CCEF2 0B00","890CCEF4 0B00","890CCEF6 0B00"],"options":null},"[Press F9]\\Extra Characters":{"note":"","data":["890C642F 01FF"],"options":null},"[Press F9]\\Progress 100%":{"note":"","data":["50000801 0000","880CCF00 0003","50000801 0000","880CCF01 00FF"],"options":null}},"D6FBA4A8-6326AA2C-C:4A":{"Don't Hurt Mario\\Monsters":{"note":"","data":["A031D9E7 0001"],"options":null},"Funny Mario Options\\Limbo Mario":{"note":"Only Use This Code On Its Own,Do not use with any other Funny Mario Options.","data":["8031DC0C 00C0"],"options":null},"Funny Mario Options\\Mario's Cap\\Off \u0026 in His Hand":{"note":"Here you can Choose Options with Mario with His Cap off \u0026 in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["8031D9C7 00??"],"options":{"Cap In Hand":"20","Flying Mario Cap In Hand":"28","Invisible Mario Cap In Hand":"22","Invisible Metal Mario Cap In Hand":"26","Metal Mario Cap In Hand":"24"}},"Funny Mario Options\\Mario's Cap\\On \u0026 An Extra in His Hand":{"note":"Here you can Choose Options with Mario with His Cap on \u0026 An Extra in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["8031D9C7 00??"],"options":{"Cap In Hand":"30","Flying Mario Cap In Hand":"38","Invisible Mario Cap In Hand":"32","Invisible Metal Mario Cap In Hand":"36","Metal Mario Cap In Hand":"34"}},"Funny Mario Options\\Ostrich Mario":{"note":"Only Use This Code On Its Own,Do not use with any other Funny Mario Options.","data":["8031DC0C 0070"],"options":null},"Funny Mario Options\\Runs Backwards":{"note":"Only Use This Code On Its Own,Do not use with any other Funny Mario Options.","data":["8031DC0E 0080"],"options":null},"Have All\\175 Stars":{"note":"I have Managed to put a Have 175 Stars Option in for you,once the Code is activated, you will see it as a new option in Save Slot A.","data":["80203F0B 00FF","50000D02 0000","81203F0C FFFF"],"options":null},"Have All\\Maxed Out Coin Records For All Levels":{"note":"","data":["80203F25 00FF","50000702 0000","81203F26 FFFF"],"options":null},"Have\\Level Select":{"note":"","data":["8030CCBC 0001"],"options":null},"Infinite\\Energy \u0026 Breath":{"note":"","data":["8031DA6E 0008"],"options":null},"Infinite\\Lives":{"note":"","data":["8031DA6D 0064"],"options":null},"Mario's Cap\\Off Options":{"note":"Here you can Choose Options with Mario without His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["8031D9C7 00??"],"options":{"Flying Mario":"08","Invisible Flying Mario":"0A","Invisible Mario":"02","Invisible Metal Flying Mario":"0F","Mario No Cap":"01","Metal Flying Mario":"0D","Metal Mario":"04"}},"Mario's Cap\\On Options":{"note":"Here you can Choose Options with Mario with His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["8031D9C7 00??"],"options":{"Flying Mario":"19","Invisible Mario":"12","Invisible Metal Mario":"16","Metal Mario":"15"}},"Press GS For 255 Coins":{"note":"Press GS Once on a Level To Get that amount of Coins","data":["8931DA68 00FF"],"options":null}},"D715CC70-271CF5D6-C:50":{"Difficulty Select":{"note":"","data":["80336953 00??"],"options":{"Easy":"01","Hard":"03","Medium":"02","Very Easy":"00","Very hard":"04"}},"Easy Fatality Select":{"note":"","data":["8033584F 00??"],"options":{"Always Off":"00","Always On":"01"}},"Enable Cheat Menu":{"note":"","data":["80336973 0001"],"options":null},"Fatalities Select":{"note":"","data":["8033695C 00??"],"options":{"Off":"00","On":"01"}},"Infinite Max Continues":{"note":"","data":["80336963 0005"],"options":null},"Infinite Time":{"note":"","data":["8033F6FB 0064"],"options":null},"Level Select":{"note":"","data":["80335C27 00??"],"options":{"Ahau Kin":"04","Anubis":"02","Kabuki":"06","Off":"00","Pagan":"01","Voodoo":"05","Warhead":"03"}},"Music Select":{"note":"","data":["80336954 00??"],"options":{"Off":"00","On":"01"}},"Play As":{"note":"","data":["800EAF87 00??"],"options":{"Ahau Kin":"06","Anubis":"07","CY-5":"08","Exor":"0B","Grox":"0A","Kabuki Jo":"04","Maximus":"09","Pagan":"03","Tak":"01","Vallah":"05","Voodoo":"02","Warhead":"00"}},"Press D-Pad\\Left to Play As Grox":{"note":"Press D-Pad Left at the character Select screen to Replace Maximus with Grox. Do not use with the Play As Cheat","data":["D033C263 0004","800EAF87 000A"],"options":null},"Press D-Pad\\Right to Play As Exor":{"note":"Press D-Pad Right at the character Select screen to Replace Maximus with Exor. Do not use with the Play As Cheat","data":["D033C263 0008","800EAF87 000B"],"options":null},"Skill Select\\Player 1":{"note":"Max Skill makes the player more Skillful while easier to hurt where as Weak Skill is Non Skillful yet harder to harm.","data":["80335C1D 00??"],"options":{"Max Skill":"80","Weak Skill":"00"}},"Skill Select\\Player 2":{"note":"Max Skill makes the player more Skillful while easier to hurt where as Weak Skill is Non Skillful yet harder to harm.","data":["80335C20 00??"],"options":{"Max Skill":"80","Weak Skill":"00"}}},"D741CD80-ACA9B912-C:45":{"Car Select":{"note":"","data":["D00F50C0 0000","800F50C0 00??"],"options":{"Chevrolet Camaro":"03","Chrysler Jeep Jeepster (Prototype)":"08","Default":"00","Dodge Viper":"04","Donkey In Glass Box":"0E","Ferrari F40":"07","Hotdog":"0A","Hummer H1":"05","Jeep Wrangler":"02","McLaren F1":"09","Mitsubishi Eclipse":"01","Nintendo 64 Logo":"0C","Nintendo Power Car":"0B","Porsche 911 Turbo":"06","Taco":"0D"}},"Infinite\\Max Acceleration\\Player 1":{"note":"","data":["800F50CD 0005"],"options":null},"Infinite\\Max Acceleration\\Player 2":{"note":"","data":["800F52B9 0005"],"options":null},"Infinite\\Max Acceleration\\Player 3":{"note":"","data":["800F54A5 0005"],"options":null},"Infinite\\Max Acceleration\\Player 4":{"note":"","data":["800F5691 0005"],"options":null},"Infinite\\Max Handling\\Player 1":{"note":"","data":["800F50CC 0005"],"options":null},"Infinite\\Max Handling\\Player 2":{"note":"","data":["800F52B8 0005"],"options":null},"Infinite\\Max Handling\\Player 3":{"note":"","data":["800F54A4 0005"],"options":null},"Infinite\\Max Handling\\Player 4":{"note":"","data":["800F5690 0005"],"options":null},"Infinite\\Max Money\\Player 1":{"note":"","data":["800F50C5 000F"],"options":null},"Infinite\\Max Money\\Player 2":{"note":"","data":["800F52B1 000F"],"options":null},"Infinite\\Max Money\\Player 3":{"note":"","data":["800F549D 000F"],"options":null},"Infinite\\Max Money\\Player 4":{"note":"","data":["800F5689 000F"],"options":null},"Infinite\\Max Top Speed\\Player 1":{"note":"","data":["800F50CE 0005"],"options":null},"Infinite\\Max Top Speed\\Player 2":{"note":"","data":["800F52BA 0005"],"options":null},"Infinite\\Max Top Speed\\Player 3":{"note":"","data":["800F54A6 0005"],"options":null},"Infinite\\Max Top Speed\\Player 4":{"note":"","data":["800F5692 0005"],"options":null},"Infinite\\Nitro\\Player 1":{"note":"","data":["800F50CF 0009"],"options":null},"Infinite\\Nitro\\Player 2":{"note":"","data":["800F52BB 0009"],"options":null},"Laps 2 Race":{"note":"","data":["801186A0 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"[Press F9]\\All Cars (All Modes)":{"note":"","data":["880E990B 000E","881022F1 000E"],"options":null},"[Press F9]\\Jump To Season 6":{"note":"","data":["881022E8 0005"],"options":null}},"D7C762B6-F83D9642-C:4A":{"Have\\Max Bonus":{"note":"","data":["810EB4BA 270F"],"options":null},"Have\\[All Guns \u0026 Infinite Ammo]":{"note":"Press C Left to receive all Guns","data":["81101DFA 0001","50000B04 0000","810EB156 03E7"],"options":null},"Have\\[All Keys]":{"note":"","data":["810EB150 0101","800EB152 0001"],"options":null},"Have\\[High Score]":{"note":"","data":["810EB13E FFFF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["810EB4C0 0005"],"options":null},"Infinite\\Health":{"note":"If you fall into Water just turn off the Infinite Health \u0026 put back on after.","data":["810EB148 42D8"],"options":null},"Level Select":{"note":"","data":["8110FE32 00??"],"options":{"Boss Mission Destroy Carrier Level":"10","Mission 1 Shock Strike":"01","Mission 10 Scramble Pylon":"0A","Mission 11 Herding Research":"0B","Mission 12 The Extractor":"0C","Mission 13 Nuke Tower":"0D","Mission 14 Mucus Storage":"0E","Mission 15 Depot Attack":"0F","Mission 16 Sterilization":"11","Mission 17 Scorpion Killer":"12","Mission 18 Core Nuke":"13","Mission 19 Gate Keeper":"14","Mission 2 Radar Run":"02","Mission 3 Return Fire":"03","Mission 4 The Sonar Tower":"04","Mission 5 Big Blips":"05","Mission 6 Short Fuse":"06","Mission 7 Outpost":"07","Mission 8 Sewer":"08","Mission 9 Clean Up":"09","Queen Mission":"15"}},"Level Select Menu":{"note":"","data":["8110D1EA BF60"],"options":null}},"D81963C7-4271A3AA-C:45":{"Access All Levels":{"note":"","data":["801FC5E6 00FF","801FC5E8 00FF"],"options":null},"Extended Tongue":{"note":"","data":["81323382 FFFF"],"options":null},"Have 99 Crowns":{"note":"","data":["8024337B 0063"],"options":null},"Have All Levels Completed":{"note":"","data":["801FC5EA 0019","801FC5EB 0019","801FC5EC 0015","801FC5ED 0018","801FC5EE 0017","801FC5EF 0017"],"options":null},"Infinite Health":{"note":"","data":["80164923 000A"],"options":null},"Level Select":{"note":"","data":["80297A7B 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06"}}},"D83045C8-F29D3A36-C:50":{"Always 1st":{"note":"","data":["8013F040 0001"],"options":null},"Freeze All Timers":{"note":"","data":["8013F001 0000","8013F005 0000","8013F00A 0000"],"options":null},"Freeze Overall Timer":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8013EFF5 0001"],"options":null},"Language Select":{"note":"","data":["8008CF93 00??"],"options":{"English":"00","French":"01","German":"02"}},"Laps Of Race":{"note":"","data":["8013EFEF 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","Never Ending Laps":"06"}},"Level Select":{"note":"For this cheat to work,as soon as you put the cheat on you must turn it back off,if not you wont beable to quit a Race or even finish one.","data":["8013F2FB 00??"],"options":{"Bikini Island":"01","Canyon Rush":"00","China Town":"02","China Town Jam":"04","Neo Arena":"03","Neo Speed Way":"05"}},"Music Modifier":{"note":"","data":["800F715F 00??"],"options":{"Music Off":"00","Music On":"FF"}},"No Damage\\Player 1":{"note":"","data":["50000402 0000","8113F338 0000"],"options":null},"No Damage\\Player 2":{"note":"","data":["50000402 0000","811413D8 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["8013F2F5 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Play As\\Player 2":{"note":"","data":["8013F2F6 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Unlock Hidden Tracks \u0026 Cars":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8009127C 0001"],"options":null}},"D84EEA84-45B2F1B4-C:50":{"All Items":{"note":"","data":["50002402 0202","810ED130 0001","50004601 0000","800ED1B1 0003"],"options":null},"Item Modifier Codes\\Position 01":{"note":"","data":["800ED130 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 02":{"note":"","data":["800ED131 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 03":{"note":"","data":["800ED132 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 04":{"note":"","data":["800ED133 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 05":{"note":"","data":["800ED134 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 06":{"note":"","data":["800ED135 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 07":{"note":"","data":["800ED136 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 08":{"note":"","data":["800ED137 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 09":{"note":"","data":["800ED138 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 10":{"note":"","data":["800ED139 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 11":{"note":"","data":["800ED13A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 12":{"note":"","data":["800ED13B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 13":{"note":"","data":["800ED13C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 14":{"note":"","data":["800ED13D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 15":{"note":"","data":["800ED13E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 16":{"note":"","data":["800ED13F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 17":{"note":"","data":["800ED140 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 18":{"note":"","data":["800ED141 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 19":{"note":"","data":["800ED142 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 20":{"note":"","data":["800ED143 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 21":{"note":"","data":["800ED144 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 22":{"note":"","data":["800ED145 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 23":{"note":"","data":["800ED146 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 24":{"note":"","data":["800ED147 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 25":{"note":"","data":["800ED148 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 26":{"note":"","data":["800ED149 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 27":{"note":"","data":["800ED14A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 28":{"note":"","data":["800ED14B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 29":{"note":"","data":["800ED14C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 30":{"note":"","data":["800ED14D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 31":{"note":"","data":["800ED14E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 32":{"note":"","data":["800ED14F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 33":{"note":"","data":["800ED150 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 34":{"note":"","data":["800ED151 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 35":{"note":"","data":["800ED152 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 36":{"note":"","data":["800ED153 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 37":{"note":"","data":["800ED154 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 38":{"note":"","data":["800ED155 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 39":{"note":"","data":["800ED156 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 40":{"note":"","data":["800ED157 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 41":{"note":"","data":["800ED158 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 42":{"note":"","data":["800ED159 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 43":{"note":"","data":["800ED15A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 44":{"note":"","data":["800ED15B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 45":{"note":"","data":["800ED15C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 46":{"note":"","data":["800ED15D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 47":{"note":"","data":["800ED15E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 48":{"note":"","data":["800ED15F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}}},"D85C4E29-88E276AF-C:50":{"Extra Gems":{"note":"","data":["D0165241 0000","80165241 004B"],"options":null},"Full\\Bomb Power":{"note":"","data":["8016523F 0003"],"options":null},"Full\\Fire Power":{"note":"","data":["80165240 0008"],"options":null},"Infinite\\Health":{"note":"","data":["80165244 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["80165243 0009"],"options":null},"Max\\Bombs":{"note":"","data":["8016523F 0008"],"options":null},"Max\\Explosion":{"note":"","data":["80165240 0008"],"options":null},"Max\\Score":{"note":"","data":["80177608 FFFF"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D005A465 0020","81154178 41CB","D005A465 0020","D0154154 0000","80154154 0040"],"options":null}},"D889EB0F-277614F0-C:45":{"Unlock All ? Blocks":{"note":"","data":["50001C04 0000","8014FECB 0001"],"options":null},"Unlock All Power Blocks":{"note":"","data":["50000604 0000","8014FE0B 0001","50000704 0000","8014FE43 0001","50000804 0000","8014FE6F 0001","50000404 0000","8014FE93 0001","50000704 0000","8014FEAF 0001","8014FE2B 0001","8014FE2F 0001","8014FE63 0001"],"options":null},"Unlock All Warps":{"note":"","data":["8014FF3B 000F"],"options":null}},"D889EB0F-277614F0-C:4A":{"Unlock All ? Blocks":{"note":"","data":["50001C04 0000","8014FECB 0001"],"options":null},"Unlock All Power Blocks":{"note":"","data":["50000604 0000","8014FE0B 0001","50000704 0000","8014FE43 0001","50000804 0000","8014FE6F 0001","50000404 0000","8014FE93 0001","50000704 0000","8014FEAF 0001","8014FE2B 0001","8014FE2F 0001","8014FE63 0001"],"options":null},"Unlock All Warps":{"note":"","data":["8014FF3B 000F"],"options":null}},"D89E0E55-B17AA99A-C:50":{"Infinite Flight Time":{"note":"","data":["801A3F1F 0064"],"options":null},"Infinite Lives":{"note":"","data":["801A3E83 0063"],"options":null},"Infinite Mega Fuel":{"note":"","data":["801A3EEB 0064"],"options":null},"Infinite Shots":{"note":"","data":["801A3EB7 0064"],"options":null}},"D9EDD54D-6BB8E274-C:50":{"The Away Team Has Max Score":{"note":"","data":["81080082 FFFF"],"options":null},"The Home Team Has Max Score":{"note":"","data":["8107972A FFFF"],"options":null}},"D9F75C12-A8859B59-C:45":{"Infinite Time":{"note":"","data":["8114C298 000A"],"options":null},"Pick Your Kombat Zone":{"note":"","data":["81257544 00??"],"options":{"Armory":"14","Bell Tower":"07","Bridge":"05","Courtyard":"02","Dead Pool":"11","Graveyard":"09","Hidden Portal":"10","Jade's Desert":"0E","Kahn's Kave":"0D","Kahn's Tower":"04","Kombat Temple":"08","Lair":"18","Living Forest":"15","Lost Bridge":"0F","Pit":"03","Pit 2":"1A","Pit 3":"0A","Pit Bottom":"1C","Portal":"17","River Kombat":"0B","Rooftop":"13","Scorpion's Lair":"0C","Soul Chamber":"06","Star Bridge":"1B","Street":"01","Subway":"00","Tomb":"19","Tower":"16","Wasteland":"12"}},"Player 1\\Aggressor Energy Bar":{"note":"","data":["801698E1 0030"],"options":null},"Player 1\\Energy is":{"note":"","data":["8016984D 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 1\\Infinite Run":{"note":"","data":["81169854 0030"],"options":null},"Player 1\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B5225 0020","81169874 5100","D02B5225 0020","8116987C 5100"],"options":null},"Player 1\\Play As":{"note":"","data":["8016983D 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Player 2\\Aggressor Energy Bar":{"note":"","data":["801698E3 0030"],"options":null},"Player 2\\Energy is":{"note":"","data":["80169B21 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 2\\Infinite Run":{"note":"","data":["81169B28 0030"],"options":null},"Player 2\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B522D 0020","81169876 5100","D02B522D 0020","8116987E 5100"],"options":null},"Player 2\\Play As":{"note":"","data":["80169AE1 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Unlock Secret":{"note":"","data":["80169EE1 0004"],"options":null}},"DBF4EA9D-333E82C0-C:45":{"1 Lap Race":{"note":"","data":["D0122288 0000","80122288 0009"],"options":null},"999 Trick Game Pts":{"note":"","data":["81122040 03E7"],"options":null},"Access Gold Medals":{"note":"","data":["50000602 0000","810ECA22 0101"],"options":null},"Enable Sinobin":{"note":"","data":["8110AE5E 0100"],"options":null},"Infinite\\Cash":{"note":"","data":["801222EA C350"],"options":null},"Infinite\\Lucky Dip":{"note":"\"Lucky Dip is Infinite Usage Of What Ever You Get From Each Red Box\"","data":["80122294 0003"],"options":null},"Infinite\\Tools Options":{"note":"","data":["80122295 00??"],"options":{"Board":"06","Fan":"01","Ghost":"02","Mouse":"05","Pan":"03","Rock":"04"}}},"DC36626A-3F3770CB-C:50":{"Cheat Menu\\All Weapons Enabled":{"note":"","data":["801CCC59 0001","801CCCC5 0001","801CDD25 0001","801CDE21 0001","801CDEB5 0001","801CDEB7 0001","801CDEE9 0001","801CE819 0001","801CE821 0001","801CE88D 0001","801CF9D5 0001"],"options":null},"Cheat Menu\\Cheat Menu Enabled":{"note":"","data":["800CF7D8 0001"],"options":null},"Cheat Menu\\Have All Game Type \u0026 Other":{"note":"","data":["810E1A3E 0FFF"],"options":null},"Cheat Menu\\Have All Weapons":{"note":"","data":["811CE810 FFFF"],"options":null},"Enable Debug Menu":{"note":"","data":["800DFCD0 0001"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810A21B4 A65B"],"options":null},"Invincibility":{"note":"","data":["800DF203 0001"],"options":null},"Time Always 00:00":{"note":"","data":["801A1D06 0000"],"options":null}},"DCB6EAFA-C6BBCFA3-C:4A":{"Always Berserk Mode":{"note":"","data":["801ACA6F 00FF"],"options":null},"Always Drop\\Player 1":{"note":"","data":["801ACA7B 00??"],"options":{"Bar":"00","Big Water":"06","Bomb":"0A","Corner":"02","Down Bar":"05","Down Square":"04","Fireball":"0B","Medium Water":"07","Small Water":"08","Smallest Water":"09","Square":"03","T":"01"}},"Always Drop\\Player 2":{"note":"","data":["801DD1FB 00??"],"options":{"Bar":"00","Big Water":"06","Bomb":"0A","Corner":"02","Down Bar":"05","Down Square":"04","Fireball":"0B","Medium Water":"07","Small Water":"08","Smallest Water":"09","Square":"03","T":"01"}},"Always Empty Drain":{"note":"","data":["801ACA51 0000","811ACA52 0000","811ACA54 0000"],"options":null},"Infinite Ducks":{"note":"","data":["801ACA0B 0009"],"options":null},"Infinite Lakes":{"note":"","data":["811AC9FE 0009"],"options":null},"Mega Score":{"note":"","data":["801ACA18 00FF","801DBDC4 00FF"],"options":null},"Practice Lessons Open":{"note":"","data":["810C3AEA 0008"],"options":null},"Stop Level Timer":{"note":"","data":["801ACA72 00FF"],"options":null}},"DCBC50D1-09FD1AA3-C:45":{"Debug Mode":{"note":"Press A or Start to enable the currently selected option. Pressing Start when in control of the player will also open the watch menu and close the debug menu.","data":["80036FCB 0001"],"options":null},"Everything Unlocked\\Save File 1":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","810699EE FFFF"],"options":null},"Everything Unlocked\\Save File 2":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8106992E FFFF"],"options":null},"Everything Unlocked\\Save File 3":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","81069A4E FFFF"],"options":null},"Everything Unlocked\\Save File 4":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8106998E FFFF"],"options":null},"Have All\\64 Characters In Multi Player":{"note":"Enables all Characters selectable to play as in Multi-Player","data":["8002B197 0040"],"options":null},"Have All\\Objectives Complete":{"note":"","data":["80036FD3 0001"],"options":null},"Have\\Infinite 00:00 Time (All Levels)":{"note":"","data":["8004837E 0000","8004838E 0000","80048396 0000","80079A22 0000","80079F26 0000"],"options":null},"Infinite\\Ammo (All Levels)":{"note":"","data":["80079E3B 0001"],"options":null},"Infinite\\Health (All levels)":{"note":"","data":["8100C0F4 0801","8100C0F6 8090","8100C0F8 AFA4","8100C0FA 0000","81060240 0004","81060242 7600","81060244 3C02","81060246 8008","81060248 8C42","8106024A 9EE0","8106024C 3401","8106024E 3F80","81060250 A441","81060252 00DC","81060254 0800","81060256 303F"],"options":null},"Mod Section\\Custom Weapon Grouping":{"note":"golden gun fun should replace slappers only! appears in the multi weapons. No weapons or ammunition crates appear inside the level. All players must rely on is their unarmed \"slapping\" skills.","data":["80048673 0013","81048678 3FC0","80048677 00D0","8004867F 000D","80048683 000A","8004868B 0013","81048690 3FC0","8004868F 00D0","80048697 000D","8004869B 000A","800486A3 0019","810486A8 3FC0","800486A7 00D3","800486AF 0006","800486B3 0003","800486BB 0019","810486C0 3FC0","800486BF 00D3","800486C7 0006","800486CB 0003","800486D3 0013","810486D8 3FC0","800486D7 00D0","800486DF 000D","800486E3 000A","800486EB 0013","810486F0 3FC0","800486EF 00D0","800486F7 000D","800486FB 000A","80048703 0019","81048708 3FC0","80048707 00D3","8004870F 0006","80048713 0003","8004871B 0019","81048720 3FC0","8004871F 00D3","80048727 0006","8004872B 0003","812AEA50 476F","812AEA52 6C64","812AEA54 656E","812AEA56 2047","812AEA58 756E","812AEA5A 2046","812AEA5C 756E","802AEA5E 0000"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 1\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811E6554 45E4","811E6558 43D5","811E655C C5A7","811E657C 801C","811E657E 6774","811E5164 45E4","811E5168 C383","811E516C 4492","811E518C 801C","811E518E D574","811E78C0 45AD","811E78C4 C383","811E78C8 4440","811E78E8 801C","811E78EA E464","811E4D18 45D0","811E4D1C 4307","811E4D20 C4FB","811E4D40 801C","811E4D42 75EC","811E6738 45CD","811E673C C383","811E6740 43F4","811E6760 801C","811E6762 A0DC","811E5450 45C2","811E5454 4356","811E5458 C598","811E5478 801C","811E547A 6A74","811E5240 4608","811E5244 4307","811E5248 43DC","811E5268 801C","811E526A 962C","811E691C 4606","811E6920 4321","811E6924 449D","811E6944 801C","811E6946 CBEC","801ED447 008A","801ED4DB 008B","801ED56F 008C","801ED603 008D","801ED697 008E","801ED72B 008F","801ED7BF 007D","801ED853 007E","801ED443 002A","801ED4D7 002A","801ED56B 002A","801ED5FF 002A","801ED693 002A","801ED727 002A","801ED7BB 002A","801ED84F 002A","801ED449 0000","801ED4DD 0000","801ED571 0000","801ED605 0000","801ED699 0000","801ED72D 0000","801ED7C1 0000","801ED855 0000","801ED44D 0000","801ED4E1 0000","801ED575 0000","801ED609 0000","801ED69D 0000","801ED731 0000","801ED7C5 0000","801ED859 0000","801EB743 002A","801EB745 0068","811EB746 277F","811EB748 1000","811EB74A 0262","811EB7C2 0190","801EB7C5 0000","811EB7C6 0258"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 2\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811EB7C8 0000","811EB7CC FFFF","811EB7CE FFFF","811EB7D2 0000","801EB7D5 0000","801EB7DB 0000","811EB7E2 0000","801EB7E7 0000","801EB843 002A","801EB845 0068","811EB846 2780","811EB848 1000","811EB84A 0262","811EB8C2 0190","801EB8C5 0000","811EB8C6 0258","811EB8C8 0000","811EB8CC FFFF","811EB8CE FFFF","811EB8D2 0000","801EB8D5 0000","801EB8DB 0000","811EB8E2 0000","801EB8E7 0000","801EB943 002A","801EB945 0068","811EB946 2791","811EB948 1000","811EB94A 0262","811EB9C2 0190","801EB9C5 0000","811EB9C6 0258","811EB9C8 0000","811EB9CC FFFF","811EB9CE FFFF","811EB9D2 0000","801EB9D5 0000","801EB9DB 0000","811EB9E2 0000","801EB9E7 0000","801EBA43 002A","801EBA45 0068","811EBA46 2792","811EBA48 1000","811EBA4A 0262","811EBAC2 0190","801EBAC5 0000","811EBAC6 0258","811EBAC8 0000","811EBACC FFFF","811EBACE FFFF","811EBAD2 0000","801EBAD5 0000","801EBADB 0000","811EBAE2 0000","801EBAE7 0000","801EBB45 00A0","801EBC45 00A0","801EBD45 00A0","801EBE45 00A0","801EBB47 0075","801EBC47 0076","801EBD47 0077","801EBE47 0078","801EBBE7 0001","801EBCE7 0001","801EBDE7 0001","801EBEE7 0001","801EC247 0071","801ECD47 0072","801ECE47 0074","801ECF47 006C","801ED047 0079","801ED147 0083","D01EBFC5 005A","801EBFC5 0000","D11EBFC6 0000","811EBFC6 F333","D11EBFC8 03E8","811EBFC8 0000"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 3\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["D11EBFCA 0000","811EBFCA F0C4","D11EBFCE 4CCC","811EBFCE 000A","D11EBFD2 4CCC","811EBFD2 000A","D11EBFD4 0003","811EBFD4 0000","D11EBFD6 0000","811EBFD6 02C4","801EBFD9 0004","801EBFDB 0000","811EBFE2 0384","801EBFE7 0004","801EBF45 009E","801EBF47 0084","801EBF48 0010","801EC2D9 0000","801EC447 0085","801EC547 0086","811EA6B6 2743","811EA73E 0114","811EA7F2 0115","811EA8A6 00A3","811EA92E 009D","811EA9E2 00A4","811EAA96 00DA","811EAB1E 00DB","811EABD2 00DF","811EAC86 0130","811EAD0E 008D","811EADC2 012E","811EAE76 0111","811EAEFE 2740","811EAFB2 2741","811EB066 00A0","811EB0EE 009E","811EB1A2 009F","811EB256 274F","811EB2DE 2750","811EB392 0117","811EB446 0131","811EB4CE 008E","811EB582 0132","811EB636 00A1","811EB6BE 0119","811EA62E 00FA","801ED3DF 0000","801ED2DF 0001","D0024337 0007","80024337 001F"],"options":null},"Mod Section\\Gain Access To\\Aztec Level Without Beating Secret Agent Or 00 Agent":{"note":"","data":["8002A8FB 001A"],"options":null},"Mod Section\\Gain Access To\\Egyptian Level Without Beating Secret Agent Or 00 Agent":{"note":"","data":["8002A8FB 001C"],"options":null},"Mod Section\\Have Cradle in multiplayer":{"note":"Puts the cradle graphic in the levels screen where the facility normally is in the multiplayer levels screen.Warning it doesn't allow you to enter the multiplayer levels screen,it should automatically Have\\selected cradle, which cannot be changed from the multiplayer menus","data":["8002B11D 0092","8002B11F 0093","8002B127 0029","8002B123 0008","802ADC8D 0052","802ADC8E 0041","802ADC8F 0044","802ADC90 004C","802ADC91 0045"],"options":null},"Mod Section\\Replace Cradle with Citadell hidden level":{"note":"","data":["8002A8F7 0029","8104468A 8970","81044690 3F44","81044692 BDEA","81044694 3F80","81044696 0000","81044698 4219","8104469A D89D","80069F80 00C4"],"options":null},"Mod Section\\Secret Island on Dam Level":{"note":"For the above code to work,Get to the 2nd guard tower \u0026 go down the ladder on the left hand side \u0026 to the end of the Dock, Press L \u0026 GS and you will be transfered in the water. Just keep walking straight \u0026 you will get to it. Obviously you can't actually climb ladders or anything, you will simply walkthrough anything on that Part, if you want to walk back to the Dock, when you come near it click the cheat back on \u0026 keep pressing L \u0026 GS untill you are back on it.","data":["D0064F31 0020","800D33ED 0050","880D33ED 0000"],"options":null},"Mod Section\\Walk through doors, objects":{"note":"","data":["800364CB 00??"],"options":{"Off":"01","On":"00"}},"Mod Section\\Weak Enemies":{"note":"","data":["8002CE48 0048"],"options":null}},"DCCF2134-9DD63578-C:50":{"Infinite Character Creation Points":{"note":"","data":["8017BB17 000A"],"options":null},"Left vs Right Side":{"note":"","data":["8017BB16 0005"],"options":null},"Max Score In Mini Games":{"note":"","data":["81116230 05F5","81116232 E0FF"],"options":null},"Maximum\\Back,Front,Left \u0026 Right Move":{"note":"","data":["8117BB14 000A"],"options":null},"Maximum\\Serve Smash":{"note":"","data":["8117BB0E 0A0A"],"options":null},"Maximum\\Stroke Spin":{"note":"","data":["8117BB12 0A0A"],"options":null},"Maximum\\Volley Lob":{"note":"","data":["8117BB10 0A0A"],"options":null},"Practice\\Balls Always Zero":{"note":"","data":["8011684F 0000"],"options":null},"Practice\\Time Always Zero":{"note":"","data":["8111684A 0000"],"options":null},"Scoreboard\\Max games bottom":{"note":"","data":["8011698F 0009"],"options":null},"Scoreboard\\Max games top":{"note":"","data":["8011698B 0009"],"options":null},"Scoreboard\\Max sets bottom":{"note":"","data":["80116987 0009"],"options":null},"Scoreboard\\Max sets top":{"note":"","data":["80116983 0009"],"options":null}},"DD26FDA1-CB4A6BE3-C:55":{"Bonus Stage Character Modifier (Training Mode)":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["8018F913 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Give Kirby A Wierd Blow-Up":{"note":"","data":["8025E898 000A"],"options":null},"Have All Characters":{"note":"","data":["810A5078 0FF0"],"options":null},"Jump off to win":{"note":"","data":["810A5282 0000"],"options":null},"P1 Press Down On D-Pad To Make Items Appear In Random Spots":{"note":"","data":["D109F6E4 0400","8118D7E2 0001"],"options":null},"Story Mode\\Always Get Pacifist (60,000 Points)":{"note":"","data":["810A52AE 0000"],"options":null},"Story Mode\\Infinite Time":{"note":"","data":["810A526E 43CB"],"options":null},"Story Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code could also result freezing at the end of the Level.","data":["800A527B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 1\\Infinite Lives":{"note":"","data":["800A5283 0004"],"options":null},"Story Mode\\Player 1\\Kirby B Button Move\\Congo Jungle":{"note":"","data":["8027120F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Fighting Polygon Team":{"note":"","data":["80262E5F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["8026924F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Kirby's Dreamland":{"note":"","data":["8026E27F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Master Hand Stage":{"note":"","data":["8027238F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Metal Mario Stage":{"note":"","data":["80263CD7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Peach's Castle":{"note":"","data":["802644DF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Planet Zebes":{"note":"","data":["802706E7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Saffron City":{"note":"","data":["802741D7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["80271837 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["8026958F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Low % Health":{"note":"","data":["810A52C6 0000"],"options":null},"Story Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A52EF 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 2\\Infinite Lives":{"note":"","data":["800A52F7 0004"],"options":null},"Story Mode\\Player 2\\Low % Health":{"note":"","data":["810A533A 0000"],"options":null},"Story Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A5363 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 3\\Infinite Lives":{"note":"","data":["800A536B 0004"],"options":null},"Story Mode\\Player 3\\Low % Health":{"note":"","data":["810A53AE 0000"],"options":null},"Story Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A53D7 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 4\\Infinite Lives":{"note":"","data":["800A53DF 0004"],"options":null},"Story Mode\\Player 4\\Low % Health":{"note":"","data":["810A5422 0000"],"options":null},"Story Mode\\Skip Straight To Master Hand":{"note":"","data":["800A5227 000D"],"options":null},"VS. Mode\\Have Mushroom Kindom":{"note":"","data":["800A5077 00FF"],"options":null},"VS. Mode\\Infinite Time":{"note":"","data":["810A545E 43CB"],"options":null},"VS. Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A546B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["8026412F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["8026C6C7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["8026E9F7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Low % Health":{"note":"","data":["810A54B6 0000"],"options":null},"VS. Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A54DF 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 2\\Low % Health":{"note":"","data":["810A552A 0000"],"options":null},"VS. Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A5553 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 3\\Low % Health":{"note":"","data":["810A559E 0000"],"options":null},"VS. Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A55C7 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 4\\Low % Health":{"note":"","data":["810A5612 0000"],"options":null}},"DD318CE2-B73798BA-C:45":{"Always On First Shot":{"note":"","data":["811DA47A 0001"],"options":null},"Club Type\\Irons Mods":{"note":"","data":["8012A473 00??"],"options":{"Cavity":"00","Conventional":"01"}},"Club Type\\Sand Wedge Mods":{"note":"","data":["8012A474 00??"],"options":{"58 Degrees":"00","60 Degrees":"01","62 Degrees":"02"}},"Club Type\\Woods Mods":{"note":"","data":["8012A472 00??"],"options":{"Metal Wood":"01","Persimmon":"02","Titan":"00"}},"Max Power":{"note":"","data":["8012A431 FFFF"],"options":null},"Max Putt":{"note":"","data":["8012A435 FFFF"],"options":null},"Max Recover":{"note":"","data":["8012A437 FFFF"],"options":null},"Max Technique":{"note":"","data":["8012A433 FFFF"],"options":null},"Select Club":{"note":"","data":["801DA496 00??"],"options":{"1I":"05","1W":"00","2I":"06","2W":"01","3I":"07","3W":"02","4I":"08","4W":"03","5I":"09","5W":"04","6I":"0A","7I":"0B","8I":"0C","9I":"0D","AW":"0F","PW":"0E","Putter":"11","SW":"10"}}},"DDD93C85-DAE381E8-C:45":{"Infinite\\Lives":{"note":"","data":["800A3648 0009"],"options":null},"Infinite\\Specials":{"note":"","data":["800A3649 0003"],"options":null},"Max\\Combo":{"note":"","data":["810A3644 7FFF"],"options":null},"Max\\Lower Level":{"note":"","data":["800A3658 0003"],"options":null},"Max\\Score":{"note":"","data":["800A3628 0063","800A3629 0063"],"options":null},"Max\\Upper Level":{"note":"","data":["800A3659 0063"],"options":null},"Play As":{"note":"","data":["800A364C 00??"],"options":{"Character 1":"00","Character 2":"01","Character 3":"02"}},"Status Modifier":{"note":"","data":["800A364A 00??"],"options":{"High":"01","Low":"03","Mid":"02"}}},"DDF460CC-3CA634C0-C:45":{"All levels Complete":{"note":"","data":["50004002 0000","810A2218 0001"],"options":null},"Carrington Institute\\Have 255 targets destroyed":{"note":"","data":["810B1E34 00FF"],"options":null},"Carrington Institute\\Have 999 points in Firing Range":{"note":"","data":["810B1E32 03E7"],"options":null},"Carrington Institute\\Have Infinite time in Firing Range":{"note":"","data":["810B1E2E 004D"],"options":null},"Have All\\Weapons\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80207F10 0007","801EEF10 0007","801D5F10 0007"],"options":null},"Have All\\Weapons\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80209B80 0007","801F0B80 0007","801D7B80 0007"],"options":null},"Infinite Ammo\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8020769F 00FF","801EE69F 00FF","801D569F 00FF","80206EFB 00FF","801EDEFB 00FF","801D4EFB 00FF"],"options":null},"Infinite Ammo\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8020930F 00FF","801F030F 00FF","801D730F 00FF","80208B6B 00FF","801EFB6B 00FF","801D6B6B 00FF"],"options":null},"Infinite Health\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8120677C 3F80","811ED77C 3F80","811D477C 3F80"],"options":null},"Infinite Health\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["812083EC 3F80","811EF3EC 3F80","811D63EC 3F80"],"options":null},"Infinite Shield\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81206790 3F80","811E4950 3F80","811CB950 3F80"],"options":null},"Infinite Shield\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["811FF5C0 3F80","811E65C0 3F80","811CD5C0 3F80"],"options":null},"Multi\\Press B To Levitate\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7E4 0040","811BB720 40F2","D009C7E4 0040","801BB6D3 0000"],"options":null},"Multi\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7EC 0040","811BD390 40F2","D009C7EC 0040","801BD343 0000"],"options":null},"Multi\\Press B To Levitate\\Player 3":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7F4 0040","811BF000 40F2","D009C7F4 0040","801BEFB3 0000"],"options":null},"Multi\\Press B To Levitate\\Player 4":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7FC 0040","811C0C70 40F2","D009C7FC 0040","801C0C23 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7E4 0040","81206720 40F2","D009C7E4 0040","802066D3 0000","D009C7E4 0040","811ED720 40F2","D009C7E4 0040","801ED6D3 0000","D009C7E4 0040","811D4720 40F2","D009C7E4 0040","801D46D3 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7EC 0040","81208390 40F2","D009C7EC 0040","80208343 0000","D009C7EC 0040","811EF390 40F2","D009C7EC 0040","801EF343 0000","D009C7EC 0040","811D6390 40F2","D009C7EC 0040","801D6343 0000"],"options":null},"The Ultimate All In One":{"note":"The Ultimate All In One activate's solo missions, give all medals on solo missions, activate cheats, activate cinemas, and who knows what else. I just don't have the time to identify these codes. I know that some of this is creditted to Zap2. I don't have the time to cut those codes out.","data":["800884F3 0001","8008850E 0001","80088575 0001","50000302 0000","80088572 0001","8008858C 0001","8008858D 0001","800885A6 0001","800885A9 0001","800885C0 0001","800885DA 0001","800885DC 0001","800885F4 0001","800885F5 0001","8008860E 0001","80088610 0001","80088612 0001","80088628 0001","50000501 0000","80088642 0001","50000501 0000","8008865C 0001","50000501 0000","80088676 0001","50000501 0000","80088690 0001","50000501 0000","800886AA 0001","50000501 0000","800886C4 0001","50000501 0000","800886DE 0001","50000501 0000","800886F8 0001","50000501 0000","80088712 0001","50000501 0000","8008872C 0001","50000501 0000","80088746 0001","50000501 0000","80088760 0001","50000501 0000","8008877A 0001","50000501 0000","80088794 0001","50000501 0000","800887AE 0001","800A2219 0001","50003E02 0000","800A221D 0001","50000B01 0000","800ACCC9 0001","50000901 0000","800ACCD5 0001","50000401 0000","800ACCDF 0001","50000301 0000","800ACCE4 0001","800ACCE8 0001","800ACCE9 0001","800ACCEB 0001","800ACCEC 0001","50000901 0000","800ACCEE 0001","800ACCF8 0001","50002101 0000","800ACCFA 0001","800ACD12 0001","800ACD15 0001","800ACD16 0001","800ACDEA 0001","800ACD3A 0001"],"options":null}},"DEB78BBA-52F6BD9D-C:45":{"Away Team\\Scores 0":{"note":"","data":["8005FA47 0000"],"options":null},"Away Team\\Scores 50":{"note":"","data":["8005FA47 0032"],"options":null},"Enable\\All Stadiums":{"note":"","data":["50000801 0000","8004A7F0 00FF"],"options":null},"Enable\\All Teams":{"note":"","data":["50000E01 0000","8004ADD0 00FF"],"options":null},"Home Team\\Scores 0":{"note":"","data":["8005CF87 0000"],"options":null},"Home Team\\Scores 50":{"note":"","data":["8005CF87 0032"],"options":null},"Infinite\\Time Outs Away Team":{"note":"","data":["8005FA49 0003"],"options":null},"Infinite\\Time Outs Home Team":{"note":"","data":["8005CF89 0003"],"options":null},"No Time-Outs\\Away Team":{"note":"","data":["8005FA49 0000"],"options":null},"No Time-Outs\\Home Team":{"note":"","data":["8005CF89 0000"],"options":null},"Press L For First Down\\Player 1":{"note":"","data":["D0066F2D 0020","810612E0 0001"],"options":null},"Press L For First Down\\Player 2":{"note":"","data":["D0066F35 0020","810612E0 0001"],"options":null},"Press L For First Down\\Player 3":{"note":"","data":["D0066F3D 0020","810612E0 0001"],"options":null},"Press L For First Down\\Player 4":{"note":"","data":["D0066F45 0020","810612E0 0001"],"options":null},"Press L For More Time To Choose Play\\Player 1":{"note":"","data":["D0066F2D 0020","80061245 0028"],"options":null},"Press L For More Time To Choose Play\\Player 2":{"note":"","data":["D0066F35 0020","80061245 0028"],"options":null},"Press L For More Time To Choose Play\\Player 3":{"note":"","data":["D0066F3D 0020","80061245 0028"],"options":null},"Press L For More Time To Choose Play\\Player 4":{"note":"","data":["D0066F45 0020","80061245 0028"],"options":null},"Press R For Fourth Down\\Player 1":{"note":"","data":["D0066F2D 0010","810612E0 0004"],"options":null},"Press R For Fourth Down\\Player 2":{"note":"","data":["D0066F35 0010","810612E0 0004"],"options":null},"Press R For Fourth Down\\Player 3":{"note":"","data":["D0066F3D 0010","810612E0 0004"],"options":null},"Press R For Fourth Down\\Player 4":{"note":"","data":["D0066F45 0010","810612E0 0004"],"options":null}},"DED0DD9A-E78225A7-C:50":{"Always 1st \u0026 final time 00:00.00":{"note":"All Levels","data":["50000301 0000","801CE959 0000"],"options":null},"Difficulty Select":{"note":"","data":["8007C1C0 00??"],"options":{"Amateur":"00","Intermediate":"01","Mirror Mode":"03","Professional":"02"}},"Frantic Finale\\Colorado\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801BDB3B 00FF"],"options":null},"Frantic Finale\\Colorado\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7432 0063"],"options":null},"Frantic Finale\\Hawaii\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B75BB 00FF"],"options":null},"Frantic Finale\\Hawaii\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7B12 0063"],"options":null},"Frantic Finale\\Oregon\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801BABEB 00FF"],"options":null},"Frantic Finale\\Oregon\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B44E2 0063"],"options":null},"Frantic Finale\\Texas\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801BB38B 00FF"],"options":null},"Frantic Finale\\Texas\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B4C82 0063"],"options":null},"Freewayphobia\\Chicago\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B758B 00FF"],"options":null},"Freewayphobia\\Chicago\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7AE2 0063"],"options":null},"Freewayphobia\\Dakota\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B159B 00FF"],"options":null},"Freewayphobia\\Dakota\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B2CB2 0063"],"options":null},"Freewayphobia\\New York\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B4A5B 00FF"],"options":null},"Freewayphobia\\New York\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B4FB2 0063"],"options":null},"Freewayphobia\\Seattle\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B417B 00FF"],"options":null},"Freewayphobia\\Seattle\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B5892 0063"],"options":null},"Level Select":{"note":"","data":["801AD159 00??"],"options":{"Contest":"07","Frantic Finale":"04","Freewayphobia":"02","Motor Way Mania":"01","Options":"08","Practice":"06","Time Trial":"05","Traffic Troubles":"00","Vitory Vehicles":"03"}},"Motor Way Mania\\Alaska\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B280B 00FF"],"options":null},"Motor Way Mania\\Alaska\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B3F22 0063"],"options":null},"Motor Way Mania\\Las Vegas\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B6E9B 00FF"],"options":null},"Motor Way Mania\\Las Vegas\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B85B2 0063"],"options":null},"Motor Way Mania\\Los Angeles\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B207B 00FF"],"options":null},"Motor Way Mania\\Los Angeles\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B3792 0063"],"options":null},"Motor Way Mania\\Philadelphia\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B7DEB 00FF"],"options":null},"Motor Way Mania\\Philadelphia\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B9502 0063"],"options":null},"Play As":{"note":"","data":["800D33D1 00??"],"options":{"Daisy Duck":"01","Dewey":"07","Donald Duck":"05","Goofy":"02","Huey":"06","Louie":"08","Lugwig Von Drake":"09","Mickey Mouse":"00","Minnie Mouse":"04","Pete":"03"}},"Re-name Characters\\Daisy\\Letter 1":{"note":"","data":["801E39CE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 2":{"note":"","data":["801E39CF 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 3":{"note":"","data":["801E39D0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 4":{"note":"","data":["801E39D1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 5":{"note":"","data":["801E39D2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 1":{"note":"","data":["801E39E4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 2":{"note":"","data":["801E39E5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 3":{"note":"","data":["801E39E6 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 4":{"note":"","data":["801E39E7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 5":{"note":"","data":["801E39E8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 1":{"note":"","data":["801E39C7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 2":{"note":"","data":["801E39C8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 3":{"note":"","data":["801E39C9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 4":{"note":"","data":["801E39CA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 5":{"note":"","data":["801E39CB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 6":{"note":"","data":["801E39CC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 1":{"note":"","data":["801E39D4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 2":{"note":"","data":["801E39D5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 3":{"note":"","data":["801E39D6 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 4":{"note":"","data":["801E39D7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 5":{"note":"","data":["801E39D8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 1":{"note":"","data":["801E39DF 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 2":{"note":"","data":["801E39E0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 3":{"note":"","data":["801E39E1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 4":{"note":"","data":["801E39E2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 1":{"note":"","data":["801E39EA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 2":{"note":"","data":["801E39EB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 3":{"note":"","data":["801E39EC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 4":{"note":"","data":["801E39ED 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 5":{"note":"","data":["801E39EE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 1":{"note":"","data":["801E39F0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 2":{"note":"","data":["801E39F1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 3":{"note":"","data":["801E39F2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 4":{"note":"","data":["801E39F3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 5":{"note":"","data":["801E39F4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 6":{"note":"","data":["801E39F5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 1":{"note":"","data":["801E39B9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 2":{"note":"","data":["801E39BA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 3":{"note":"","data":["801E39BB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 4":{"note":"","data":["801E39BC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 5":{"note":"","data":["801E39BD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 6":{"note":"","data":["801E39BE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 1":{"note":"","data":["801E39C0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 2":{"note":"","data":["801E39C1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 3":{"note":"","data":["801E39C2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 4":{"note":"","data":["801E39C3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 5":{"note":"","data":["801E39C4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 6":{"note":"","data":["801E39C5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 1":{"note":"","data":["801E39DA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 2":{"note":"","data":["801E39DB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 3":{"note":"","data":["801E39DC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 4":{"note":"","data":["801E39DD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Traffic Troubles\\Grand Canyon\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B8CCB 00FF"],"options":null},"Traffic Troubles\\Grand Canyon\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B8CF2 0063"],"options":null},"Traffic Troubles\\Indianapolis\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B430B 00FF"],"options":null},"Traffic Troubles\\Indianapolis\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B4332 0063"],"options":null},"Traffic Troubles\\New Mexico\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B58DB 00FF"],"options":null},"Traffic Troubles\\New Mexico\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B5902 0063"],"options":null},"Traffic Troubles\\San Fransisco\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B75DB 00FF"],"options":null},"Traffic Troubles\\San Fransisco\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7602 0063"],"options":null},"Unlock Everything":{"note":"This will unlock all characters, tracks, mirror mode, all in-game cheats, postcards, pluto's collar and give you all Trophies for every track and difficulties. To have this cheat save to mempak, enable it and then go into the Options Menu and disable the cheat. Go to the Wide-Screen Settings and Change it to Wide-Screen [16.9] and then the B button to get back to Wide-Screen Settings, now go back into Wide-Screen [16.9] and change it back to Normal [4.3].and press the B button until you come back to the main Options Menu.Close the game and load it again to see everything saved to the Mempak and unlocked.","data":["800D3478 008F","800D3479 0094","800D347A 0003","800D347C 0001","800D347F 0080","50000502 0000","800D3480 0009","50000502 0000","800D3481 0024","800D348A 0015","800D348B 007F","800D348C 0001","800D348D 00FF","800D348E 0004","800D348F 0022"],"options":null},"Victory Vehicles\\Everglades\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B516B 00FF"],"options":null},"Victory Vehicles\\Everglades\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B56C2 0063"],"options":null},"Victory Vehicles\\Malibu\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B6BFB 00FF"],"options":null},"Victory Vehicles\\Malibu\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7152 0063"],"options":null},"Victory Vehicles\\Washington DC\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801BCBAB 00FF"],"options":null},"Victory Vehicles\\Washington DC\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801BD102 0063"],"options":null},"Victory Vehicles\\Yellowstone\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B2A0B 00FF"],"options":null},"Victory Vehicles\\Yellowstone\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B2F62 0063"],"options":null}},"DEE584A2-0F161187-C:45":{"Have All\\Cars":{"note":"","data":["50000C01 0000","80097A18 0001"],"options":null},"Have All\\Difficulty Levels":{"note":"","data":["80097A17 0003"],"options":null},"Have All\\Tracks":{"note":"","data":["50000C01 0000","80095CC8 0001"],"options":null},"Infinite Health\\Player 1\\Alpine Ridge":{"note":"","data":["D02BA164 0080","802BA173 00EB"],"options":null},"Infinite Health\\Player 1\\Aztec Ruins":{"note":"","data":["D01FC428 0080","801FC437 00BE"],"options":null},"Infinite Health\\Player 1\\Bayou Run":{"note":"","data":["D02862BC 0080","802862CB 00EB"],"options":null},"Infinite Health\\Player 1\\Destruction Junction":{"note":"","data":["D029A9B0 0080","8029A9BF 00E1"],"options":null},"Infinite Health\\Player 1\\Ground Zero":{"note":"","data":["D01F64C8 0080","801F64D7 00BE"],"options":null},"Infinite Health\\Player 1\\Junkyard":{"note":"","data":["D0205B7C 0080","80205B8B 00BE"],"options":null},"Infinite Health\\Player 1\\Metro Challenge":{"note":"","data":["D02EDB18 0080","802EDB27 00E1"],"options":null},"Infinite Health\\Player 1\\Midnyte Rumble":{"note":"","data":["D030CC0C 0080","8030CC1B 00EB"],"options":null},"Infinite Health\\Player 1\\Seascape Sprint":{"note":"","data":["D02D4C24 0080","802D4C33 00E1"],"options":null},"Infinite Health\\Player 1\\Sunset Canyon":{"note":"","data":["D0303EA8 0080","80303EB7 00EB"],"options":null},"Infinite Health\\Player 1\\Terminal Impact":{"note":"","data":["D02B5F2D 0080","802B56B3 00E1"],"options":null},"Infinite Health\\Player 1\\Urban Mayhem":{"note":"","data":["D0203F10 0080","80203F1F 00C8"],"options":null},"Infinite Health\\Player 2\\Alpine Ridge":{"note":"","data":["D02C8BD0 0080","802C8BDF 00B4"],"options":null},"Infinite Health\\Player 2\\Aztec Ruins":{"note":"","data":["D0217C50 0080","80217C5F 00A0"],"options":null},"Infinite Health\\Player 2\\Bayou Run":{"note":"","data":["D0295190 0080","8029519F 00B4"],"options":null},"Infinite Health\\Player 2\\Destruction Junction":{"note":"","data":["D02B61D0 0080","802B61DF 00B4"],"options":null},"Infinite Health\\Player 2\\Ground Zero":{"note":"","data":["D0211D10 0080","80211D1F 00A0"],"options":null},"Infinite Health\\Player 2\\Junkyard":{"note":"","data":["D0215050 0080","8021505F 00A0"],"options":null},"Infinite Health\\Player 2\\Metro Challenge":{"note":"","data":["D02FCC10 0080","802FCC1F 00B4"],"options":null},"Infinite Health\\Player 2\\Midnyte Rumble":{"note":"","data":["D032ADD0 0080","8032ADDF 00B4"],"options":null},"Infinite Health\\Player 2\\Seascape Sprint":{"note":"","data":["D02E2D50 0080","802E2D5F 00E1"],"options":null},"Infinite Health\\Player 2\\Sunset Canyon":{"note":"","data":["D0312810 0080","8031281F 00B4"],"options":null},"Infinite Health\\Player 2\\Terminal Impact":{"note":"","data":["D02C4550 0080","802C455F 00E1"],"options":null},"Infinite Health\\Player 2\\Urban Mayhem":{"note":"","data":["D0235E50 0080","80235E5F 00A0"],"options":null},"Max Bonus Points\\01: Seascape Sprint":{"note":"","data":["812D4C3E 03E7"],"options":null},"Max Bonus Points\\02: Metro Challenge":{"note":"","data":["812EDB32 03E7"],"options":null},"Max Bonus Points\\03: Junkyard":{"note":"","data":["81205B9A 03E7"],"options":null},"Max Bonus Points\\04: Terminal Impact":{"note":"","data":["812B56BE 03E7"],"options":null},"Max Bonus Points\\05: Destruction Junction":{"note":"","data":["8129A9CA 03E7"],"options":null},"Max Bonus Points\\06: Aztec Ruins":{"note":"","data":["81095D36 03E7"],"options":null},"Max Collisions Points\\01: Seascape Sprint":{"note":"","data":["812D4C3A 03E7"],"options":null},"Max Collisions Points\\02: Metro Challenge":{"note":"","data":["812EDB2E 03E7"],"options":null},"Max Collisions Points\\03: Junkyard":{"note":"","data":["81205B92 03E7"],"options":null},"Max Collisions Points\\04: Terminal Impact":{"note":"","data":["812B56BA 03E7"],"options":null},"Max Collisions Points\\05: Destruction Junction":{"note":"","data":["8129A9C6 03E7"],"options":null},"Max Collisions Points\\06: Aztec Ruins":{"note":"","data":["81095D06 03E7"],"options":null},"Max Points Aid":{"note":"","data":["8111EF4E 03E7"],"options":null}},"DEE596AB-AF3B7AE7-C:45":{"Always Special\\Player 1":{"note":"","data":["800F9D35 0008"],"options":null},"Always Special\\Player 2":{"note":"","data":["800FA0E5 0008"],"options":null},"Always Special\\Player 3":{"note":"","data":["800FA495 0008"],"options":null},"Always Special\\Player 4":{"note":"","data":["800FA845 0008"],"options":null},"Character Select\\Player 1":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890F9D36 0240","890F9D60 42B4","8107E8B2 ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 2":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA0E6 0240","890FA110 42B4","8107E8B6 ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 3":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA496 0240","890FA4C0 42B4","8107E8BA ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 4":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA846 0240","890FA870 42B4","8107E8BE ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Extra Characters \u0026 Modes":{"note":"","data":["8107F07C FFFF"],"options":null},"Get Title Belt In 1-Match":{"note":"","data":["80038AAB 0008"],"options":null},"Infinite Time":{"note":"","data":["800FAF87 0000"],"options":null},"Infinite Time Out Of Ring":{"note":"","data":["800FACE8 0014"],"options":null},"Spirit Select\\Player 1":{"note":"","data":["800F9D25 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 2":{"note":"","data":["800FA0D5 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 3":{"note":"","data":["800FA485 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 4":{"note":"","data":["800FA835 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Ultimate Code\\Player 1":{"note":"","data":["800F9D24 0064"],"options":null},"Ultimate Code\\Player 2":{"note":"","data":["800FA0D4 0064"],"options":null},"Ultimate Code\\Player 3":{"note":"","data":["800FA484 0064"],"options":null},"Ultimate Code\\Player 4":{"note":"","data":["800FA834 0064"],"options":null},"Weapon Select\\Player 1":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800F9D31 0003","800F98E1 00??","800F98E2 0000","800F99A0 0000"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 2":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA0E1 0003","800F9911 00??","800F9912 0001","800F99A1 0001"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 3":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA491 0003","800F9941 00??","800F9942 0002","800F99A2 0002"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 4":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA841 0003","800F9971 00??","800F9972 0003","800F99A3 0003"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}}},"DF331A18-5FD4E044-C:45":{"1 Lap Race":{"note":"Do not put this on with Total Number of Laps Code","data":["810495AE 0001"],"options":null},"Beat Championship Mode Easily":{"note":"","data":["80223E3B 0255"],"options":null},"Both Players Can Be Dale E":{"note":"","data":["80046538 0003"],"options":null},"Have CPU Control Car Player 1":{"note":"","data":["D0092985 0020","8015CC5C 0001","D0092985 0010","8015CC5C 0000"],"options":null},"Infinite Fuel\\Player 1":{"note":"","data":["81220502 3E80"],"options":null},"Infinite Fuel\\Player 2":{"note":"","data":["81230472 3E80"],"options":null},"Maximum\\Acceleration":{"note":"","data":["800C7113 0000"],"options":null},"Maximum\\Pit Distance":{"note":"","data":["800C7110 0000"],"options":null},"Maximum\\Top Speed":{"note":"","data":["800C7111 0000"],"options":null},"Race Forever":{"note":"","data":["810465AE FDE8"],"options":null},"Total Number Of Laps":{"note":"","data":["80046553 00??"],"options":{"1 lap":"01","2 lap":"02","3 lap":"03","4 lap":"04","5 lap":"05","6 lap":"06","7 lap":"07","8 lap":"08","9 lap":"09"}}},"DF574191-9EB5123D-C:45":{"Have 231 Marbles":{"note":"","data":["D00E9FF3 0000","800E9FF3 03E7"],"options":null},"Have All Gold Udders":{"note":"","data":["50002802 0000","810C625A 0101"],"options":null},"Infinite Banana Peel Ammo":{"note":"","data":["810C6976 03E7"],"options":null},"Infinite Blaster Ammo":{"note":"","data":["810C6916 03E7"],"options":null},"Infinite Boomerang Knives Ammo":{"note":"","data":["810C6A1E 03E7"],"options":null},"Infinite Cleaver Ammo":{"note":"","data":["800C6A1F 00FA"],"options":null},"Infinite Egg Chucker Ammo":{"note":"","data":["800C69BF 00FA"],"options":null},"Infinite Green Slimer Ammo":{"note":"","data":["810C69A6 03E7"],"options":null},"Infinite Health":{"note":"","data":["800C690F 0064"],"options":null},"Infinite Laser Ammo":{"note":"","data":["800C6917 00FA"],"options":null},"Infinite Lives":{"note":"","data":["800C6913 0063"],"options":null},"Infinite Mushroom Ammo":{"note":"","data":["810C6E36 03E7"],"options":null},"Infinite Music Gun Ammo":{"note":"","data":["810C6A06 03E7"],"options":null},"Infinite Rocket Launcher Ammo":{"note":"","data":["810C6946 03E7"],"options":null},"Infinite Shotgun Ammo":{"note":"","data":["810C69EE 03E7"],"options":null}},"DF6FF0F4-29D14238-C:4A":{"Bomb Select":{"note":"","data":["8024A3A1 00??"],"options":{"Blue Remote Bomb":"05","Clear All Special Bombs.":"00","Crazy Bomb":"1D","Invisible Mine Bomb":"07","Jelly Bomb":"03","Power Bomb":"02","Red Beem Bomb":"06","Shock Wave Bomb":"04"}},"Bomberman Speed":{"note":"","data":["8024A3A0 00??"],"options":{"Fast":"0E","Normal":"08","Slow":"04","Turbo":"10"}},"Have\\Infinite\\Kick":{"note":"","data":["8024A3A6 0002"],"options":null},"Have\\Max Bombs":{"note":"","data":["8024A39F 00FF"],"options":null},"Have\\Max Fire":{"note":"","data":["8024A39E 00FF"],"options":null},"Infinite\\Health Hearts":{"note":"","data":["8024A3AE 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["802E1CE7 00FF"],"options":null},"Infinite\\Timer":{"note":"","data":["800FDD72 002A"],"options":null},"Invincible":{"note":"Enemies \u0026 Bomb Blasts cant harm you.But if you walk \u0026 keep laying Bombs it will most likly freeze.so try to avoid constant bombing while walking.Turn cheat to off to go back to normal.","data":["8024A3A8 00??"],"options":{"Off":"00","On":"01"}},"Walk through\\Blocks":{"note":"Walk through Blocks like they are not there.Turn cheat to off to go back to normal.","data":["8024A3A5 00??"],"options":{"Off":"00","On":"01"}},"Walk through\\Bombs":{"note":"Walk through Bombs like they are not there.Turn cheat to off to go back to normal.","data":["8024A3A6 00??"],"options":{"Off":"00","On":"01"}}},"DF98B95D-58840978-C:4A":{"Freeze Timer":{"note":"","data":["811C84C4 012C"],"options":null},"Level 01\\Invincible":{"note":"","data":["D112D33A 0001","811E4B38 000A","D1147DEA 0001","811E4B38 000A"],"options":null},"Level 01\\Press R For Supa Attack":{"note":"","data":["D112D33A 0001","811E4B3C 01F4","D1147DEA 0001","811E4B3C 01F4"],"options":null},"Level 02\\Invincible":{"note":"","data":["D112D33A 0002","811E1DB8 000A","D1147DEA 0002","811E1DB8 000A"],"options":null},"Level 02\\Press R For Supa Attack":{"note":"","data":["D112D33A 0002","811E1DBC 01F4","D1147DEA 0002","811E1DBC 01F4"],"options":null},"Level 03\\Invincible":{"note":"","data":["D112D33A 0003","811E4D38 000A","D1147DEA 0003","811E4D38 000A"],"options":null},"Level 03\\Press R For Supa Attack":{"note":"","data":["D112D33A 0003","811E4D3C 01F4","D1147DEA 0003","811E4D3C 01F4"],"options":null},"Level 04\\Invincible":{"note":"","data":["D112D33A 0004","811E11B8 000A","D1147DEA 0004","811E11B8 000A"],"options":null},"Level 04\\Press R For Supa Attack":{"note":"","data":["D112D33A 0004","811E11BC 01F4","D1147DEA 0004","811E11BC 01F4"],"options":null},"Level 05\\Invincible":{"note":"","data":["D112D33A 0005","811E3638 000A","D1147DEA 0005","811E3638 000A"],"options":null},"Level 05\\Press R For Supa Attack":{"note":"","data":["D112D33A 0005","811E363C 01F4","D1147DEA 0005","811E363C 01F4"],"options":null},"Level 06\\Invincible":{"note":"","data":["D112D33A 0006","811E4EB8 000A","D1147DEA 0006","811E4EB8 000A"],"options":null},"Level 06\\Press R For Supa Attack":{"note":"","data":["D112D33A 0006","811E4EBC 01F4","D1147DEA 0006","811E4EBC 01F4"],"options":null},"Level 07\\Invincible":{"note":"","data":["D112D33A 0007","811E5D38 000A","D1147DEA 0007","811E5D38 000A"],"options":null},"Level 07\\Press R For Supa Attack":{"note":"","data":["D112D33A 0007","811E5D3C 01F4","D1147DEA 0007","811E5D3C 01F4"],"options":null},"Level 08\\Invincible":{"note":"","data":["D112D33A 0008","811E2838 000A","D1147DEA 0008","811E2838 000A"],"options":null},"Level 08\\Press R For Supa Attack":{"note":"","data":["D112D33A 0008","811E283C 01F4","D1147DEA 0008","811E283C 01F4"],"options":null},"Level 09\\Invincible":{"note":"","data":["D112D33A 0009","811EB3B8 000A","D1147DEA 0009","811EB3B8 000A"],"options":null},"Level 09\\Press R For Supa Attack":{"note":"","data":["D112D33A 0009","811EB3BC 01F4","D1147DEA 0009","811EB3BC 01F4"],"options":null},"Level 10\\Invincible":{"note":"","data":["D112D33A 000A","811E5438 000A","D1147DEA 000A","811E5438 000A"],"options":null},"Level 10\\Press R For Supa Attack":{"note":"","data":["D112D33A 000A","811E543C 01F4","D1147DEA 000A","811E543C 01F4"],"options":null},"Level 11\\Invincible":{"note":"","data":["D112D33A 000B","811E1EB8 000A","D1147DEA 000B","811E1EB8 000A"],"options":null},"Level 11\\Press R For Supa Attack":{"note":"","data":["D112D33A 000B","811E1EBC 01F4","D1147DEA 000B","811E1EBC 01F4"],"options":null},"Level 12\\Invincible":{"note":"","data":["D112D33A 000C","811FA6B8 000A","D1147DEA 000C","811FA6B8 000A"],"options":null},"Level 12\\Press R For Supa Attack":{"note":"","data":["D112D33A 000C","811FA6BC 01F4","D1147DEA 000C","811FA6BC 01F4"],"options":null},"Level 13\\Invincible":{"note":"","data":["D112D33A 000D","811EAE38 000A","D1147DEA 000D","811EAE38 000A"],"options":null},"Level 13\\Press R For Supa Attack":{"note":"","data":["D112D33A 000D","811EAE3C 01F4","D1147DEA 000D","811EAE3C 01F4"],"options":null},"Level 14\\Invincible":{"note":"","data":["D112D33A 000E","811E2EB8 000A","D1147DEA 000E","811E2EB8 000A"],"options":null},"Level 14\\Press R For Supa Attack":{"note":"","data":["D112D33A 000E","811E2EBC 01F4","D1147DEA 000E","811E2EBC 01F4"],"options":null},"Level 15\\Invincible":{"note":"","data":["D112D33A 000F","811E2738 000A","D1147DEA 000F","811E2738 000A"],"options":null},"Level 15\\Press R For Supa Attack":{"note":"","data":["D112D33A 000F","811E273C 01F4","D1147DEA 000F","811E273C 01F4"],"options":null},"Level 16\\Invincible":{"note":"","data":["D112D33A 0010","811E53B8 000A","D1147DEA 0010","811E53B8 000A"],"options":null},"Level 16\\Press R For Supa Attack":{"note":"","data":["D112D33A 0010","811E538C 01F4","D1147DEA 0010","811E538C 01F4"],"options":null},"Level 17\\Invincible":{"note":"","data":["D112D33A 0011","811E2738 000A","D1147DEA 0011","811E2738 000A"],"options":null},"Level 17\\Press R For Supa Attack":{"note":"","data":["D112D33A 0011","811E273C 01F4","D1147DEA 0011","811E273C 01F4"],"options":null},"Level 18\\Invincible":{"note":"","data":["D112D33A 0012","811E1CB8 000A","D1147DEA 0012","811E1CB8 000A"],"options":null},"Level 18\\Press R For Supa Attack":{"note":"","data":["D112D33A 0012","811E1CBC 01F4","D1147DEA 0012","811E1CBC 01F4"],"options":null},"Level 19\\Invincible":{"note":"","data":["D112D33A 0013","811E4438 000A","D1147DEA 0013","811E4438 000A"],"options":null},"Level 19\\Press R For Supa Attack":{"note":"","data":["D112D33A 0013","811E443C 01F4","D1147DEA 0013","811E443C 01F4"],"options":null},"Level 20\\Invincible":{"note":"","data":["D112D33A 0014","811F7238 000A","D1147DEA 0014","811F7238 000A"],"options":null},"Level 20\\Press R For Supa Attack":{"note":"","data":["D112D33A 0014","811F723C 01F4","D1147DEA 0014","811F723C 01F4"],"options":null},"Level 21\\Invincible":{"note":"","data":["D112D33A 0015","811E49B8 000A","D1147DEA 0015","811E49B8 000A"],"options":null},"Level 21\\Press R For Supa Attack":{"note":"","data":["D112D33A 0015","811E49BC 01F4","D1147DEA 0015","811E49BC 01F4"],"options":null},"Level 22\\Invincible":{"note":"","data":["D112D33A 0016","811E40B8 000A","D1147DEA 0016","811E40B8 000A"],"options":null},"Level 22\\Press R For Supa Attack":{"note":"","data":["D112D33A 0016","811E40BC 01F4","D1147DEA 0016","811E40BC 01F4"],"options":null},"Level 23\\Invincible":{"note":"","data":["D112D33A 0017","811E9C38 000A","D1147DEA 0017","811E9C38 000A"],"options":null},"Level 23\\Press R For Supa Attack":{"note":"","data":["D112D33A 0017","811E9C3C 01F4","D1147DEA 0017","811E9C3C 01F4"],"options":null},"Level 24\\Invincible":{"note":"","data":["D112D33A 0018","811E2938 000A","D1147DEA 0018","811E2938 000A"],"options":null},"Level 24\\Press R For Supa Attack":{"note":"","data":["D112D33A 0018","811E293C 01F4","D1147DEA 0018","811E293C 01F4"],"options":null},"Level 25\\Invincible":{"note":"","data":["D112D33A 0019","811E4D38 000A","D1147DEA 0019","811E4D38 000A"],"options":null},"Level 25\\Press R For Supa Attack":{"note":"","data":["D112D33A 0019","811E4D3C 01F4","D1147DEA 0019","811E4D3C 01F4"],"options":null},"Level 26\\Invincible":{"note":"","data":["D112D33A 001A","811EFFB8 000A","D1147DEA 001A","811EFFB8 000A"],"options":null},"Level 26\\Press R For Supa Attack":{"note":"","data":["D112D33A 001A","811EFFBC 01F4","D1147DEA 001A","811EFFBC 01F4"],"options":null},"Level 27\\Invincible":{"note":"","data":["D112D33A 001B","811E2B38 000A","D1147DEA 001B","811E2B38 000A"],"options":null},"Level 27\\Press R For Supa Attack":{"note":"","data":["D112D33A 001B","811E2B3C 01F4","D1147DEA 001B","811E2B3C 01F4"],"options":null},"Level 28\\Invincible":{"note":"","data":["D112D33A 001C","811E25B8 000A","D1147DEA 001C","811E25B8 000A"],"options":null},"Level 28\\Press R For Supa Attack":{"note":"","data":["D112D33A 001C","811E25BC 01F4","D1147DEA 001C","811E25BC 01F4"],"options":null},"Level 29\\Invincible":{"note":"","data":["D112D33A 001D","811E1EB8 000A","D1147DEA 001D","811E1EB8 000A"],"options":null},"Level 29\\Press R For Supa Attack":{"note":"","data":["D112D33A 001D","811E1EBC 01F4","D1147DEA 001D","811E1EBC 01F4"],"options":null},"Level 30\\Invincible":{"note":"","data":["D112D33A 001E","811E38B8 000A","D1147DEA 001E","811E38B8 000A"],"options":null},"Level 30\\Press R For Supa Attack":{"note":"","data":["D112D33A 001E","811E38BC 01F4","D1147DEA 001E","811E38BC 01F4"],"options":null},"Level 31\\Invincible":{"note":"","data":["D112D33A 001F","811F5638 000A","D1147DEA 001F","811F5638 000A"],"options":null},"Level 31\\Press R For Supa Attack":{"note":"","data":["D112D33A 001F","811F563C 01F4","D1147DEA 001F","811F563C 01F4"],"options":null},"Level 32\\Invincible":{"note":"","data":["D112D33A 0020","811E4238 000A","D1147DEA 0020","811E4238 000A"],"options":null},"Level 32\\Press R For Supa Attack":{"note":"","data":["D112D33A 0020","811E423C 01F4","D1147DEA 0020","811E423C 01F4"],"options":null},"Level 33\\Invincible":{"note":"","data":["D112D33A 0021","811E4EB8 000A","D1147DEA 0021","811E4EB8 000A"],"options":null},"Level 33\\Press R For Supa Attack":{"note":"","data":["D112D33A 0021","811E4EBC 01F4","D1147DEA 0021","811E4EBC 01F4"],"options":null},"Level 34\\Invincible":{"note":"","data":["D112D33A 0022","811E16B8 000A","D1147DEA 0022","811E16B8 000A"],"options":null},"Level 34\\Press R For Supa Attack":{"note":"","data":["D112D33A 0022","811E16BC 01F4","D1147DEA 0022","811E16BC 01F4"],"options":null},"Level 35\\Invincible":{"note":"","data":["D112D33A 0023","811FABB8 000A","D1147DEA 0023","811FABB8 000A"],"options":null},"Level 35\\Press R For Supa Attack":{"note":"","data":["D112D33A 0023","811FABBC 01F4","D1147DEA 0023","811FABBC 01F4"],"options":null},"Level 36\\Invincible":{"note":"","data":["D112D33A 0024","811EA738 000A","D1147DEA 0024","811EA738 000A"],"options":null},"Level 36\\Press R For Supa Attack":{"note":"","data":["D112D33A 0024","811EA73C 01F4","D1147DEA 0024","811EA73C 01F4"],"options":null},"Level 37\\Invincible":{"note":"","data":["D112D33A 0025","811FC638 000A","D1147DEA 0025","811FC638 000A"],"options":null},"Level 37\\Press R For Supa Attack":{"note":"","data":["D112D33A 0025","811FC63C 01F4","D1147DEA 0025","811FC63C 01F4"],"options":null},"Level 38\\Invincible":{"note":"","data":["D112D33A 0026","811EEBC8 000A","D1147DEA 0026","811EEBC8 000A"],"options":null},"Level 38\\Press R For Supa Attack":{"note":"","data":["D112D33A 0026","811EEBCC 01F4","D1147DEA 0026","811EEBCC 01F4"],"options":null},"Level 39\\Invincible":{"note":"","data":["D112D33A 0027","811F50B8 000A","D1147DEA 0027","811F50B8 000A"],"options":null},"Level 39\\Press R For Supa Attack":{"note":"","data":["D112D33A 0027","811F50BC 01F4","D1147DEA 0027","811F50BC 01F4"],"options":null},"Level 40\\Invincible":{"note":"","data":["D112D33A 0028","811E2038 000A","D1147DEA 0028","811E2038 000A"],"options":null},"Level 40\\Press R For Supa Attack":{"note":"","data":["D112D33A 0028","811E203C 01F4","D1147DEA 0028","811E203C 01F4"],"options":null},"Level 41\\Invincible":{"note":"","data":["D112D33A 0029","811F02B8 000A","D1147DEA 0029","811F02B8 000A"],"options":null},"Level 41\\Press R For Supa Attack":{"note":"","data":["D112D33A 0029","811F02BC 01F4","D1147DEA 0029","811F02BC 01F4"],"options":null},"Level 42\\Invincible":{"note":"","data":["D112D33A 002A","811FD7B8 000A","D1147DEA 002A","811FD7B8 000A"],"options":null},"Level 42\\Press R For Supa Attack":{"note":"","data":["D112D33A 002A","811FD7BC 01F4","D1147DEA 002A","811FD7BC 01F4"],"options":null},"Level 43\\Invincible":{"note":"","data":["D112D33A 002B","811E97B8 000A","D1147DEA 002B","811E97B8 000A"],"options":null},"Level 43\\Press R For Supa Attack":{"note":"","data":["D112D33A 002B","811E97BC 01F4","D1147DEA 002B","811E97BC 01F4"],"options":null},"Level 44\\Invincible":{"note":"","data":["D112D33A 002C","811E4538 000A","D1147DEA 002C","811E4538 000A"],"options":null},"Level 44\\Press R For Supa Attack":{"note":"","data":["D112D33A 002C","811E453C 01F4","D1147DEA 002C","811E453C 01F4"],"options":null}},"DFD784AD-AE426603-C:50":{"Game Win Select\\Player 1":{"note":"","data":["801BAEB1 00??"],"options":{"0 Games Won":"00","1 Game Won":"01","2 Games Won":"02","3 Games Won":"03","4 Games Won":"04","5 Games Won":"05","For Game Set \u0026 Match":"06"}},"Game Win Select\\Player 2":{"note":"","data":["801BAEB2 00??"],"options":{"0 Games Won":"00","1 Game Won":"01","2 Games Won":"02","3 Games Won":"03","4 Games Won":"04","5 Games Won":"05","For Game Set \u0026 Match":"06"}},"Play As\\Player 1":{"note":"","data":["800BE351 00??"],"options":{"Amanda Coetzer":"02","Conchita Martinez":"04","Gustavo Kuerten":"07","Jana Novotna":"03","Jonas Bjorkman":"08","Leon Rodez":"05","Mark Philippoussis":"09","Michael Chang":"06","Randy Powell":"0A","Richard Krajicek":"0B","Vanessa Child":"01","Zoe Taylor":"00"}},"Play As\\Player 2":{"note":"","data":["800BE352 00??"],"options":{"Amanda Coetzer":"02","Conchita Martinez":"04","Gustavo Kuerten":"07","Jana Novotna":"03","Jonas Bjorkman":"08","Leon Rodez":"05","Mark Philippoussis":"09","Michael Chang":"06","Randy Powell":"0A","Richard Krajicek":"0B","Vanessa Child":"01","Zoe Taylor":"00"}},"Points Select\\Player 1":{"note":"","data":["801C6160 00??"],"options":{"0 Points":"00","15 Points":"15","30 Points":"30","40 Points":"40"}},"Points Select\\Player 2":{"note":"","data":["801C6161 00??"],"options":{"0 Points":"00","15 Points":"15","30 Points":"30","40 Points":"40"}}},"DFE61153-D76118E6-C:45":{"Championship Mode\\Cannot Spin Out":{"note":"","data":["803CDD93 0000"],"options":null},"Championship Mode\\Disable Left Lane Traffic":{"note":"","data":["8033C95B 0001"],"options":null},"Championship Mode\\Disable Right Lane Traffic":{"note":"","data":["8033C95F 0001"],"options":null},"Championship Mode\\Max Points Per Race":{"note":"","data":["813BFBFE FFFF"],"options":null},"Championship Mode\\Max Points To Next Level":{"note":"","data":["813BFBFC FFFF"],"options":null},"Championship Mode\\Max Total Points":{"note":"","data":["813BFBFA FFFF"],"options":null},"Championship Mode\\Unlimited Nitro\\Player 1":{"note":"","data":["803C75E7 0003"],"options":null},"Championship Mode\\Unlimited Nitro\\Player 2":{"note":"","data":["803C7823 0003"],"options":null},"Championship Mode\\Unlimited Nitro\\Player 3":{"note":"","data":["803C716F 0003"],"options":null},"Dancing Girl Always On":{"note":"","data":["803BEE73 0001","803C21CF 0054"],"options":null},"Have All\\Car Upgrades":{"note":"","data":["803BEE42 0005"],"options":null},"Have All\\Cars":{"note":"","data":["813BEE78 1FFF"],"options":null},"Player 1\\Always Place 1st":{"note":"","data":["803CE023 0001"],"options":null},"Player 1\\Car/Transmission Modifier":{"note":"","data":["803BEE40 00??"],"options":{"ATV (Auto":"04","ATV (Manual)":"05","Banzai GTV (Auto)":"0A","Banzai GTV (Manual)":"0B","Bulldog (Auto)":"1A","Bulldog (Manual)":"1B","Conductor (Auto)":"24","Conductor (Manual)":"25","El Nino (Auto)":"10","El Nino (Manual)":"11","Enforcer (Auto)":"1C","Enforcer (Manual)":"1D","Exec (Auto)":"22","Exec (Manual)":"23","Grass Hopper (Auto)":"18","Grass Hopper (Manual)":"19","Howler (Auto)":"30","Howler (Manual)":"31","Kamikaze (Auto)":"02","Kamikaze (Manual)":"03","Monsta (Auto)":"2E","Monsta (Manual)":"2F","NY Taxi (Auto)":"1E","NY Taxi (Manual)":"1F","Orca (Auto)":"0E","Orca (manual)":"0F","Rhino 4x4 (Auto)":"12","Rhino 4x4 (Manual)":"13","Road King (Auto)":"16","Road King (Manual)":"17","Rocket (Auto)":"2A","Rocket (Manual)":"2B","Sardine Extreme (Auto)":"14","Sardine Extreme (Manual)":"15","Scarab (Auto)":"06","Scarab (Manual)":"07","School Bus (Auto)":"20","School Bus (Manual)":"21","Serpent (Auto)":"00","Serpent (Manual)":"01","Speed Demon (Auto)":"26","Speed Demon (Manual)":"27","Stallion P6 (Auto)":"08","Stallion P6 (Manual)":"09","The Surgeon (Auto)":"2C","The Surgeon (Manual)":"2D","Tommy (Auto)":"28","Tommy (Manual)":"29","Zombie (Auto)":"0C","Zombie (Manual)":"0D"}},"Player 1\\Stop Elapsed Time":{"note":"","data":["813C7678 3C80"],"options":null},"Player 2\\Always Place 1st":{"note":"","data":["803CE4FB 0001"],"options":null},"Player 2\\Car/Transmission Modifier":{"note":"","data":["803BEE48 00??"],"options":{"ATV (Auto":"04","ATV (Manual)":"05","Banzai GTV (Auto)":"0A","Banzai GTV (Manual)":"0B","Bulldog (Auto)":"1A","Bulldog (Manual)":"1B","Conductor (Auto)":"24","Conductor (Manual)":"25","El Nino (Auto)":"10","El Nino (Manual)":"11","Enforcer (Auto)":"1C","Enforcer (Manual)":"1D","Exec (Auto)":"22","Exec (Manual)":"23","Grass Hopper (Auto)":"18","Grass Hopper (Manual)":"19","Howler (Auto)":"30","Howler (Manual)":"31","Kamikaze (Auto)":"02","Kamikaze (Manual)":"03","Monsta (Auto)":"2E","Monsta (Manual)":"2F","NY Taxi (Auto)":"1E","NY Taxi (Manual)":"1F","Orca (Auto)":"0E","Orca (manual)":"0F","Rhino 4x4 (Auto)":"12","Rhino 4x4 (Manual)":"13","Road King (Auto)":"16","Road King (Manual)":"17","Rocket (Auto)":"2A","Rocket (Manual)":"2B","Sardine Extreme (Auto)":"14","Sardine Extreme (Manual)":"15","Scarab (Auto)":"06","Scarab (Manual)":"07","School Bus (Auto)":"20","School Bus (Manual)":"21","Serpent (Auto)":"00","Serpent (Manual)":"01","Speed Demon (Auto)":"26","Speed Demon (Manual)":"27","Stallion P6 (Auto)":"08","Stallion P6 (Manual)":"09","The Surgeon (Auto)":"2C","The Surgeon (Manual)":"2D","Tommy (Auto)":"28","Tommy (Manual)":"29","Zombie (Auto)":"0C","Zombie (Manual)":"0D"}},"Player 2\\Stop Elapsed Time":{"note":"","data":["813C78B4 3C80"],"options":null},"Player 3\\Always Place 1st":{"note":"","data":["803CDB4B 0001"],"options":null},"Player 3\\Car/Transmission Modifier":{"note":"","data":["803BEE50 00??"],"options":{"ATV (Auto":"04","ATV (Manual)":"05","Banzai GTV (Auto)":"0A","Banzai GTV (Manual)":"0B","Bulldog (Auto)":"1A","Bulldog (Manual)":"1B","Conductor (Auto)":"24","Conductor (Manual)":"25","El Nino (Auto)":"10","El Nino (Manual)":"11","Enforcer (Auto)":"1C","Enforcer (Manual)":"1D","Exec (Auto)":"22","Exec (Manual)":"23","Grass Hopper (Auto)":"18","Grass Hopper (Manual)":"19","Howler (Auto)":"30","Howler (Manual)":"31","Kamikaze (Auto)":"02","Kamikaze (Manual)":"03","Monsta (Auto)":"2E","Monsta (Manual)":"2F","NY Taxi (Auto)":"1E","NY Taxi (Manual)":"1F","Orca (Auto)":"0E","Orca (manual)":"0F","Rhino 4x4 (Auto)":"12","Rhino 4x4 (Manual)":"13","Road King (Auto)":"16","Road King (Manual)":"17","Rocket (Auto)":"2A","Rocket (Manual)":"2B","Sardine Extreme (Auto)":"14","Sardine Extreme (Manual)":"15","Scarab (Auto)":"06","Scarab (Manual)":"07","School Bus (Auto)":"20","School Bus (Manual)":"21","Serpent (Auto)":"00","Serpent (Manual)":"01","Speed Demon (Auto)":"26","Speed Demon (Manual)":"27","Stallion P6 (Auto)":"08","Stallion P6 (Manual)":"09","The Surgeon (Auto)":"2C","The Surgeon (Manual)":"2D","Tommy (Auto)":"28","Tommy (Manual)":"29","Zombie (Auto)":"0C","Zombie (Manual)":"0D"}},"Player 4\\Always Place 1st":{"note":"","data":["803CD673 0001"],"options":null},"Player 4\\Car/Transmission Modifier":{"note":"","data":["803BEE58 00??"],"options":{"ATV (Auto":"04","ATV (Manual)":"05","Banzai GTV (Auto)":"0A","Banzai GTV (Manual)":"0B","Bulldog (Auto)":"1A","Bulldog (Manual)":"1B","Conductor (Auto)":"24","Conductor (Manual)":"25","El Nino (Auto)":"10","El Nino (Manual)":"11","Enforcer (Auto)":"1C","Enforcer (Manual)":"1D","Exec (Auto)":"22","Exec (Manual)":"23","Grass Hopper (Auto)":"18","Grass Hopper (Manual)":"19","Howler (Auto)":"30","Howler (Manual)":"31","Kamikaze (Auto)":"02","Kamikaze (Manual)":"03","Monsta (Auto)":"2E","Monsta (Manual)":"2F","NY Taxi (Auto)":"1E","NY Taxi (Manual)":"1F","Orca (Auto)":"0E","Orca (manual)":"0F","Rhino 4x4 (Auto)":"12","Rhino 4x4 (Manual)":"13","Road King (Auto)":"16","Road King (Manual)":"17","Rocket (Auto)":"2A","Rocket (Manual)":"2B","Sardine Extreme (Auto)":"14","Sardine Extreme (Manual)":"15","Scarab (Auto)":"06","Scarab (Manual)":"07","School Bus (Auto)":"20","School Bus (Manual)":"21","Serpent (Auto)":"00","Serpent (Manual)":"01","Speed Demon (Auto)":"26","Speed Demon (Manual)":"27","Stallion P6 (Auto)":"08","Stallion P6 (Manual)":"09","The Surgeon (Auto)":"2C","The Surgeon (Manual)":"2D","Tommy (Auto)":"28","Tommy (Manual)":"29","Zombie (Auto)":"0C","Zombie (Manual)":"0D"}},"Time Counts Down Faster":{"note":"","data":["813D0D3E 0000"],"options":null}},"DFF227D9-0D4D8169-C:44":{"Always Have\\50 pieces of corn":{"note":"","data":["801E2761 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E2750 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["811E274E 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E2762 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E2755 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E2760 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D008FFA1 0010","811E26C6 1000","D008FFA1 0010","811E26D6 1000"],"options":null},"No Music":{"note":"","data":["801DD906 0000"],"options":null},"Start with Berry Weapon":{"note":"","data":["801E2757 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Subtitles On":{"note":"","data":["801DDB7B 00??"],"options":{"Off":"00","On":"01"}},"Unlock All Levels":{"note":"","data":["81099E30 000F"],"options":null}},"E0144180-650B78C9-C:45":{"Andrew Reynolds\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA7E 00FF"],"options":null},"Andrew Reynolds\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA80 00FF"],"options":null},"Andrew Reynolds\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA7B 00FF"],"options":null},"Andrew Reynolds\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA78 00FF"],"options":null},"Bob Burnquist\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA1A 00FF"],"options":null},"Bob Burnquist\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA1C 00FF"],"options":null},"Bob Burnquist\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA17 00FF"],"options":null},"Bob Burnquist\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA14 00FF"],"options":null},"Bucky Lasek\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA42 00FF"],"options":null},"Bucky Lasek\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA44 00FF"],"options":null},"Bucky Lasek\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA3F 00FF"],"options":null},"Bucky Lasek\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA3C 00FF"],"options":null},"Chad Muska\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA56 00FF"],"options":null},"Chad Muska\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA58 00FF"],"options":null},"Chad Muska\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA53 00FF"],"options":null},"Chad Muska\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA50 00FF"],"options":null},"Elissa Steamer\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEABA 00FF"],"options":null},"Elissa Steamer\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEABC 00FF"],"options":null},"Elissa Steamer\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEAB7 00FF"],"options":null},"Elissa Steamer\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEAB4 00FF"],"options":null},"Geoff Rowley\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA2E 00FF"],"options":null},"Geoff Rowley\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA30 00FF"],"options":null},"Geoff Rowley\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA2B 00FF"],"options":null},"Geoff Rowley\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA28 00FF"],"options":null},"Jamie Thomas\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEAA6 00FF"],"options":null},"Jamie Thomas\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEAA8 00FF"],"options":null},"Jamie Thomas\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEAA3 00FF"],"options":null},"Jamie Thomas\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEAA0 00FF"],"options":null},"Kareem Campbell\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA6A 00FF"],"options":null},"Kareem Campbell\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA6C 00FF"],"options":null},"Kareem Campbell\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA67 00FF"],"options":null},"Kareem Campbell\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA64 00FF"],"options":null},"Officer Dick\\Have\\All\\Gold Medal\\Burnside":{"note":"","data":["800DEACE 00FF"],"options":null},"Officer Dick\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEAD0 00FF"],"options":null},"Officer Dick\\Have\\All\\Gold Medal\\Skate Park":{"note":"","data":["800DEACB 00FF"],"options":null},"Officer Dick\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEAC8 00FF"],"options":null},"Player 1\\Have\\Perfect Balance":{"note":"","data":["800DE843 0001"],"options":null},"Player 1\\Play As":{"note":"","data":["800D0FD4 00??"],"options":{"Andrew Reynolds":"06","Bob Burnquist":"01","Bucky Lasek":"03","Chad Muska":"04","Elissa Steamer":"09","Geoff Rowley":"02","Jamie Thomas":"08","Kareem Campbell":"05","Officer Dick":"0A","Rune Glifberg":"07","Tony Hawk":"00"}},"Player 1\\Super Max\\Air":{"note":"","data":["800D62DE FFFF"],"options":null},"Player 1\\Super Max\\Balance":{"note":"","data":["800D62DF FFFF"],"options":null},"Player 1\\Super Max\\Ollie":{"note":"","data":["800D62DC FFFF"],"options":null},"Player 1\\Super Max\\Speed":{"note":"","data":["800D62DD FFFF"],"options":null},"Player 1\\Super Max\\Turning":{"note":"","data":["800D62E0 FFFF"],"options":null},"Player 2\\Play As":{"note":"","data":["800D0FD5 00??"],"options":{"Andrew Reynolds":"06","Bob Burnquist":"01","Bucky Lasek":"03","Chad Muska":"04","Elissa Steamer":"09","Geoff Rowley":"02","Jamie Thomas":"08","Kareem Campbell":"05","Officer Dick":"0A","Rune Glifberg":"07","Tony Hawk":"00"}},"Player 2\\Super Max\\Air":{"note":"","data":["800D62E3 FFFF"],"options":null},"Player 2\\Super Max\\Balance":{"note":"","data":["800D62E4 FFFF"],"options":null},"Player 2\\Super Max\\Ollie":{"note":"","data":["800D62E1 FFFF"],"options":null},"Player 2\\Super Max\\Speed":{"note":"","data":["800D62E2 FFFF"],"options":null},"Player 2\\Super Max\\Turning":{"note":"","data":["800D62E5 FFFF"],"options":null},"Rune Glifberg\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA92 00FF"],"options":null},"Rune Glifberg\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA94 00FF"],"options":null},"Rune Glifberg\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA8F 00FF"],"options":null},"Rune Glifberg\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA8C 00FF"],"options":null},"Tony Hawk\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA06 00FF"],"options":null},"Tony Hawk\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA08 00FF"],"options":null},"Tony Hawk\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA03 00FF"],"options":null},"Tony Hawk\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA00 00FF"],"options":null}},"E0B92B94-80E87CBD-C:50":{"Access All Nuke Pieces 1-6":{"note":"Enter the In-game inventory option, and press L Button","data":["D00FC701 0020","50000601 0000","802FC99C 0030"],"options":null},"Access In-Game Cheat Menu":{"note":"","data":["8112167C FFFF","8112167E FFFF"],"options":null}},"E0B92B94-B9A7E025-C:45":{"Access In-Game Cheat Menu":{"note":"","data":["8112167C FFFF","8112167E FFFF"],"options":null}},"E0C4F72F-769E1506-C:50":{"Have Mouse Card\\Night Tail":{"note":"","data":["800A2865 0001"],"options":null},"Have Mouse Card\\The Adventure Begins":{"note":"","data":["800A2864 0001"],"options":null},"Infinite Lives":{"note":"","data":["810A2886 0009"],"options":null},"Max Honey Pots":{"note":"","data":["810A288A 03E7"],"options":null}},"E13AE2DC-4FB65CE8-C:4A":{"Have All Elements":{"note":"","data":["8107A9F4 3232","8107A9F6 3232"],"options":null},"Infinite Health":{"note":"","data":["8107A9D4 01F4","8107A9D6 01F4"],"options":null},"Infinite Magic Points":{"note":"","data":["8107A9D8 01F4","8107A9DA 01F4"],"options":null},"Super Agility":{"note":"","data":["8107A9DE 01F4"],"options":null},"Super Defense":{"note":"","data":["8107A9DC 01F4"],"options":null}},"E185E291-4E50766D-C:45":{"Game Win Select\\Player 1":{"note":"","data":["801BBFA1 00??"],"options":{"0 Games Won":"00","1 Game Won":"01","2 Games Won":"02","3 Games Won":"03","4 Games Won":"04","5 Games Won":"05","For Game Set \u0026 Match":"06"}},"Game Win Select\\Player 2":{"note":"","data":["801BBFA2 00??"],"options":{"0 Games Won":"00","1 Game Won":"01","2 Games Won":"02","3 Games Won":"03","4 Games Won":"04","5 Games Won":"05","For Game Set \u0026 Match":"06"}},"Play As\\Player 1":{"note":"","data":["800BFFA5 00??"],"options":{"Amanda Coetzer":"02","Conchita Martinez":"04","Gustavo Kuerten":"07","Jana Novotna":"03","Jonas Bjorkman":"08","Leon Rodez":"05","Mark Philippoussis":"09","Michael Chang":"06","Randy Powell":"0A","Richard Krajicek":"0B","Vanessa Child":"01","Zoe Taylor":"00"}},"Play As\\Player 2":{"note":"","data":["800BFFA6 00??"],"options":{"Amanda Coetzer":"02","Conchita Martinez":"04","Gustavo Kuerten":"07","Jana Novotna":"03","Jonas Bjorkman":"08","Leon Rodez":"05","Mark Philippoussis":"09","Michael Chang":"06","Randy Powell":"0A","Richard Krajicek":"0B","Vanessa Child":"01","Zoe Taylor":"00"}},"Points Select\\Player 1":{"note":"","data":["801C7260 00??"],"options":{"0 Points":"00","15 Points":"15","30 Points":"30","40 Points":"40"}},"Points Select\\Player 2":{"note":"","data":["801C7261 00??"],"options":{"0 Points":"00","15 Points":"15","30 Points":"30","40 Points":"40"}}},"E1EF93F7-14908B0B-C:44":{"Max Score":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null},"Press L Button for Max Gauge\\Player 1":{"note":"","data":["D00B5661 0020","811D2602 0098"],"options":null},"Press L Button for Max Gauge\\Player 2":{"note":"","data":["D00B5667 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}}},"E2D37CF0-F57E4EAE-C:50":{"Away Team Scores":{"note":"","data":["8011A9BF 00??"],"options":{"0 Goal":"00","1 Goal":"01","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08"}},"Home Team Scores":{"note":"","data":["80119F2B 00??"],"options":{"0 Goal":"00","1 Goal":"01","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08"}},"Infinite player creation points":{"note":"","data":["801AC581 003C"],"options":null}},"E328B4FA-004A28E1-C:50":{"Always Have\\guide line on":{"note":"","data":["80056CCC 0082"],"options":null},"Next Bubble Select\\Player 1":{"note":"","data":["800ECE19 00??"],"options":{"Black":"08","Blue":"03","Green":"02","No Bubble":"00","Orange":"05","Purple":"06","Red":"01","White":"07","Yellow":"04"}},"Next Bubble Select\\Player 2":{"note":"","data":["800ECF09 00??"],"options":{"Black":"08","Blue":"03","Green":"02","No Bubble":"00","Orange":"05","Purple":"06","Red":"01","White":"07","Yellow":"04"}},"Play As Select\\Player 1":{"note":"","data":["800E3250 00??"],"options":{"1 of the two Ballons":"13","Blue Gnome":"12","Bubbloon":"00","Dragoon":"08","Gnome":"09","Jack":"06","Luna":"05","Marina":"03","Monkey":"10","Musashi":"04","Prettio":"02","SSB":"07","Twinkie":"01","Water under ballons":"14","furby? (looks like 2 balloons)":"11"}},"Play As Select\\Player 2":{"note":"","data":["800E3258 00??"],"options":{"1 of the two Ballons":"13","Blue Gnome":"12","Bubbloon":"00","Dragoon":"08","Gnome":"09","Jack":"06","Luna":"05","Marina":"03","Monkey":"10","Musashi":"04","Prettio":"02","SSB":"07","Twinkie":"01","Water under ballons":"14","furby? (looks like 2 balloons)":"11"}},"Pointer always active":{"note":"","data":["D0056FA0 0002","80056FA0 0082"],"options":null},"Press GS to Reset Player 2 score to 0":{"note":"","data":["8809D9C0 0000","8809D9C2 0000"],"options":null}},"E340A49C-74318D41-C:4A":{"Carry 20 Bombs At A Time":{"note":"","data":["800AEE0F 0014"],"options":null},"Have\\Pumped up Red Remote Bombs":{"note":"","data":["802AC653 0004"],"options":null},"Infinite\\Credits":{"note":"","data":["802AB85B 0009"],"options":null},"Infinite\\Energy\\Player 1":{"note":"","data":["800AEE07 0002"],"options":null},"Infinite\\Energy\\Player 2":{"note":"","data":["800AEECF 0002"],"options":null},"Infinite\\Energy\\Player 3":{"note":"","data":["800AEF97 0002"],"options":null},"Infinite\\Energy\\Player 4":{"note":"","data":["800AF05F 0002"],"options":null},"Infinite\\Gems":{"note":"","data":["802AB85F 0063"],"options":null},"Infinite\\Lives":{"note":"","data":["802AB857 0063"],"options":null},"Infinite\\Time":{"note":"","data":["802AB873 0001"],"options":null},"Invincible\\Player 1":{"note":"","data":["800AEE01 0001"],"options":null}},"E3AB4ED0-83040DD2-C:45":{"Away Team\\Infinite Time Outs":{"note":"","data":["80054ED6 0003"],"options":null},"Away Team\\No Time Outs Away":{"note":"","data":["80054ED6 0000"],"options":null},"Home Team\\Infinite Time Outs":{"note":"","data":["80054956 0003"],"options":null},"Home Team\\No Time Outs":{"note":"","data":["80054956 0000"],"options":null},"Infinite Creation Points":{"note":"","data":["8107B36E 03E7"],"options":null},"Infinite Time To Choose Play":{"note":"","data":["81081448 2800"],"options":null},"Max Acc":{"note":"","data":["8007526D 0064"],"options":null},"Max Cat":{"note":"","data":["8007527B 0063"],"options":null},"Max Clu":{"note":"","data":["80075275 0063"],"options":null},"Max End":{"note":"","data":["8007527D 0063"],"options":null},"Max Hnd":{"note":"","data":["80075279 0063"],"options":null},"Max Rcg":{"note":"","data":["80075273 0063"],"options":null},"Max Rng":{"note":"","data":["8007526F 0063"],"options":null},"Max Scr":{"note":"","data":["80075271 0063"],"options":null},"Max Spd":{"note":"","data":["80075277 0063"],"options":null}},"E3BD221D-3C0834D3-C:50":{"Have All Items\\What a night for a knight":{"note":"","data":["811BA010 0101","811BA012 0101","811BA014 0101","811BA016 0101","811BA018 0101"],"options":null},"Infinite Courage":{"note":"","data":["810BB096 0007"],"options":null}},"E3D6A795-2A1C5D3C-C:50":{"Big Options\\Big Gloves Mode":{"note":"","data":["800F407D 0001"],"options":null},"Big Options\\Big Head Mode":{"note":"","data":["800F407C 0001"],"options":null},"Empty Punch Meter\\Player 1":{"note":"","data":["8106B9E8 0000","8106B9EA 0000"],"options":null},"Empty Punch Meter\\Player 2":{"note":"","data":["8016BAF0 0000","8016BAF2 0000"],"options":null},"Full Punch Meter\\Player 1":{"note":"","data":["8106B9E8 0000","8106B9EA 0BB2"],"options":null},"Full Punch Meter\\Player 2":{"note":"","data":["8106B9E8 0000","8106B9EA 0BB2"],"options":null},"Have Full\\Power Bar":{"note":"","data":["810637AE 0064"],"options":null},"Have Full\\Speed Bar":{"note":"","data":["810637B2 0064"],"options":null},"Have Full\\Stamina Bar":{"note":"","data":["810637B6 0064"],"options":null},"Infinite Boxer Creation Points":{"note":"","data":["810637AA 0064"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["8106B974 42C8","8106B9DE 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["8106BAE4 42C8","8106BAE6 0000"],"options":null},"No Health\\Player 1":{"note":"","data":["8106B9DC 0000","8106B9DE 0000"],"options":null},"No Health\\Player 2":{"note":"","data":["8106BAE4 0000","8106BAE6 0000"],"options":null}},"E402430D-D2FCFC9D-C:45":{"Boss Cannot Move\\Dino":{"note":"","data":["811E0444 44A0"],"options":null},"Boss Cannot Move\\Octo":{"note":"","data":["811E0BAC 44A0"],"options":null},"Enable All Cheats":{"note":"Go into Options \u0026 then Magic Codes. Then Code list to turn off \u0026 on what you want.","data":["810E031C FFFF","810E031E FFFF"],"options":null},"Have All\\50 Bananas\\Ancient Lake":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3A1D 0032"],"options":null},"Have All\\50 Bananas\\Boulder Canyon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E693D 0032"],"options":null},"Have All\\50 Bananas\\Crescent Island":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E417D 0032"],"options":null},"Have All\\50 Bananas\\Darkmoon Caverns":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E645D 0032"],"options":null},"Have All\\50 Bananas\\Everfrost Peak":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E56AD 0032"],"options":null},"Have All\\50 Bananas\\Fossil Canyon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E6EBD 0032"],"options":null},"Have All\\50 Bananas\\Frosty Village":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E669D 0032"],"options":null},"Have All\\50 Bananas\\Greenwood Village":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E51FD 0032"],"options":null},"Have All\\50 Bananas\\Haunted Woods":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E516D 0032"],"options":null},"Have All\\50 Bananas\\Hot Top Volcano":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4D7D 0032"],"options":null},"Have All\\50 Bananas\\Jungle Falls":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4C1D 0032"],"options":null},"Have All\\50 Bananas\\Pirate Lagoon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E30AD 0032"],"options":null},"Have All\\50 Bananas\\Snowball Valley":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E514D 0032"],"options":null},"Have All\\50 Bananas\\Spacedust Alley":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E6C9D 0032"],"options":null},"Have All\\50 Bananas\\Spaceport Alpha":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E43BD 0032"],"options":null},"Have All\\50 Bananas\\Star City":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E5EDD 0032"],"options":null},"Have All\\50 Bananas\\Treasure Caves":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3E6D 0032"],"options":null},"Have All\\50 Bananas\\Walrus Cove":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E51CD 0032"],"options":null},"Have All\\50 Bananas\\Whale Bay":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E424D 0032"],"options":null},"Have All\\50 Bananas\\Windwill Plains":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801EA30D 0032"],"options":null},"Have All\\99 Balloons":{"note":"","data":["810E058A FFFF","801FD3DD 0063"],"options":null},"Have All\\Amulets":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FD1D6 FFFF"],"options":null},"Have All\\Keys":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FD1C8 FFFF"],"options":null},"Have All\\Levels Completely Finished":{"note":"","data":["50000904 0000","801FD2E7 00FF","801FD30F 00FF","801FD317 00FF","50000404 0000","801FD31F 00FF","801FD33F 00FF","50000804 0000","801FD343 00FF"],"options":null},"Have All\\Silver Coins\\Ancient Lake":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E3BFA 0008"],"options":null},"Have All\\Silver Coins\\Boulder Canyon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E6B1A 0008"],"options":null},"Have All\\Silver Coins\\Crescent Island":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E435A 0008"],"options":null},"Have All\\Silver Coins\\Everfrost Peak":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E588A 0008"],"options":null},"Have All\\Silver Coins\\Fossil Canyon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E709A 0008"],"options":null},"Have All\\Silver Coins\\Frosty Village":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E687A 0008"],"options":null},"Have All\\Silver Coins\\Greenwood Village":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E53DA 0008"],"options":null},"Have All\\Silver Coins\\Haunted Woods":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E534A 0008"],"options":null},"Have All\\Silver Coins\\Hot Top Volcano":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4F5A 0008"],"options":null},"Have All\\Silver Coins\\Jungle Falls":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E588A 0008"],"options":null},"Have All\\Silver Coins\\Pirate Lagoon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E328A 0008"],"options":null},"Have All\\Silver Coins\\Snowball Valley":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E532A 0008"],"options":null},"Have All\\Silver Coins\\Treasure Caves":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E404A 0008"],"options":null},"Have All\\Silver Coins\\Walrus Cove":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E53AA 0008"],"options":null},"Have All\\Silver Coins\\Whale Bay":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E442A 0008"],"options":null},"Have All\\Silver Coins\\Windmill Plains":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801EA4EA 0008"],"options":null},"Have All\\The pieces of the TT thing":{"note":"","data":["801FD1D6 0004"],"options":null},"Have All\\Trophies":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FC9DE FFFF"],"options":null},"Infinite\\Power Ups\\Ancient Lake":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E717B 0010"],"options":null},"Infinite\\Power Ups\\Boulder Canyon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E949B 0010"],"options":null},"Infinite\\Power Ups\\Crescent Island":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E78DB 0010"],"options":null},"Infinite\\Power Ups\\Darkmoon Caverns":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E9DFB 0010"],"options":null},"Infinite\\Power Ups\\Everfrost Peak":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E8E6B 0010"],"options":null},"Infinite\\Power Ups\\Fossil Canyon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801EA61B 0010"],"options":null},"Infinite\\Power Ups\\Frosty Village":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E9DF6 0010"],"options":null},"Infinite\\Power Ups\\Greenwood Village":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E895B 0010"],"options":null},"Infinite\\Power Ups\\Haunted Woods":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E88CB 0010"],"options":null},"Infinite\\Power Ups\\Hot Top Volcano":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E4ECB 0010"],"options":null},"Infinite\\Power Ups\\Jungle Falls":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E4D0B 0010"],"options":null},"Infinite\\Power Ups\\Pirate Lagoon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E5C06 0010"],"options":null},"Infinite\\Power Ups\\Snowball Valley":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E88AB 0010"],"options":null},"Infinite\\Power Ups\\Space Dust Alley":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E979B 0010"],"options":null},"Infinite\\Power Ups\\Spaceport Alpha":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E6EBB 0010"],"options":null},"Infinite\\Power Ups\\Starcity":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E963B 0010"],"options":null},"Infinite\\Power Ups\\Treasure Cove":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E75CB 0010"],"options":null},"Infinite\\Power Ups\\Walrus Cove":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E892B 0010"],"options":null},"Infinite\\Power Ups\\Whale Bay":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E6DAB 0010"],"options":null},"Infinite\\Power Ups\\Windmill Plains":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801ECE0B 0010"],"options":null}},"E436467A-82DE8F9B-C:45":{"Always Place 1st":{"note":"","data":["8012955F 0001"],"options":null},"Driver Modifier (Champsionship Mode)":{"note":"","data":["812CBEC6 00??"],"options":{"Billy Boat #11":"02","Buddy Lazier #91":"04","Buzz Calkins #12":"08","Davey Hamilton #9":"05","Eddie Cheever Jr.#51":"03","Greg Ray #2":"01","Jeff Ward #21":"10","John Hollansworth Jr. #42":"13","Johnny Unser #92":"0E","Kenny Brack #14":"09","Mark Dismore #28":"0C","Robbie Buyl #22":"0A","Robby McGehee #55":"12","Robby Unser #81":"0F","Roberto Guerrero #50":"0D","Sam Schmidt #99":"06","Scott Goodyear #4":"00","Scott Sharp #8":"07","Stephan Gregoire #7":"11","Tyce Carison #20":"0B"}},"Max Exp (Gold Cup - All Classes Unlocked)":{"note":"With the 'Max Exp' codes for the Gold Cup, start a new file and leave it and go back to it again.","data":["81033918 7FFF","8103391A FFFF"],"options":null},"Unlock\\Formula Cars Part 1":{"note":"","data":["810230F0 0000","810230F2 0000","810230F4 0000","810230F6 0000"],"options":null},"Unlock\\Gold Cup 1st Upgrade":{"note":"","data":["81023100 0000","81023102 0000"],"options":null},"Unlock\\Gold Cup 2nd Upgrade":{"note":"","data":["81023104 0000","81023106 0000"],"options":null},"Unlock\\Sprint Car Class":{"note":"","data":["810230EE 0000","810230EC 0000"],"options":null}},"E43C9765-05B1C1BE-C:4A":{"Max HP":{"note":"","data":["812D71F8 03E7"],"options":null},"Max MP":{"note":"","data":["812D71FA 03E7"],"options":null},"Max Money":{"note":"","data":["811A70E9 0001","811A70EA 869F"],"options":null}},"E4906679-9F243F05-C:50":{"Max Score":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null},"Press L Button for Max Gauge\\Player 1":{"note":"","data":["D00B4171 0020","811D2602 0098"],"options":null},"Press L Button for Max Gauge\\Player 2":{"note":"","data":["D00B4177 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}}},"E4B08007-A602FF33-C:50":{"Carrington Institute\\Have 255 targets destroyed":{"note":"","data":["810AD714 00FF"],"options":null},"Carrington Institute\\Have 999 points in Firing Range":{"note":"","data":["810AD712 03E7"],"options":null},"Carrington Institute\\Have Infinite time in Firing Range":{"note":"","data":["810AD70E 004D"],"options":null},"Have All\\Levels Complete \u0026 All Challenges":{"note":"Have All levels Complete on Solo Missions, \u0026 Acces all Challenges \u0026 CO-OP Levels","data":["50003C02 0000","800A27C1 0001","50001E1A 0000","80088A0D 0001","50001E1A 0000","80088A0E 0001","50001E1A 0000","80088A0F 0001","50001E1A 0000","80088A10 0001"],"options":null},"Have All\\Weapons\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["802037F0 0007","801EA7F0 0007","801D17F0 0007"],"options":null},"Have All\\Weapons\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80205460 0007","801EC460 0007","801D3460 0007"],"options":null},"Infinite\\Ammo\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80202F7F 00FF","801E9F7F 00FF","801D0F7F 00FF","802027DB 00FF","801E97DB 00FF","801D07DB 00FF"],"options":null},"Infinite\\Ammo\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80204BEF 00FF","801EBBEF 00FF","801D2BEF 00FF","8020444B 00FF","801EB44B 00FF","801D244B 00FF"],"options":null},"Infinite\\Health\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8120205C 3F80","811E905C 3F80","811D005C 3F80"],"options":null},"Infinite\\Health\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81203CCC 3F80","811EACCC 3F80","811D1CCC 3F80"],"options":null},"Infinite\\Shield\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81202070 3F80","811E9070 3F80","811D0070 3F80"],"options":null},"Infinite\\Shield\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81203CE0 3F80","811EACE0 3F80","811D1CE0 3F80"],"options":null},"Press B To Levitate\\Single \u0026 Co-Op\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D00980C4 0040","81202000 40F2","D00980C4 0040","80201FB3 0000","D00980C4 0040","811E9000 40F2","D00980C4 0040","801E8FB3 0000","D00980C4 0040","811D0000 40F2","D00980C4 0040","801CFFB3 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D1099FB6 4000","81203C70 40F2","D1099FB6 4000","81203C23 0000","D1099FB6 4000","811EAC70 40F2","D1099FB6 4000","811EAC23 0000","D1099FB6 4000","811D1C70 40F2","D1099FB6 4000","811D1C23 0000"],"options":null}},"E616B5BC-C9658B88-C:45":{"Have All\\Cups Select":{"note":"","data":["50002C02 0000","800CCE11 00??"],"options":{"Bronze Cup":"02","Gold Cup":"00","None (Default)":"04","Silver Cup":"01"}},"Have All\\Points":{"note":"","data":["810D8EE0 03E7"],"options":null},"Have All\\RB Medals":{"note":"","data":["810D8EF0 03E7"],"options":null},"Infinite\\Credits":{"note":"","data":["800BDEA5 0005"],"options":null},"Infinite\\Timer":{"note":"","data":["810D8F88 44E9"],"options":null},"Infinite\\Turbos":{"note":"To enable this just select On or Off and when you press Z you will use your Turbos accordantly. Warning you can only have Infinite if you have some turbo level to begin with","data":["D00F2C16 0020","800CCF91 00??"],"options":{"Off":"00","On":"08"}},"Laps To Race":{"note":"Here you can select how many laps you prefer.to race","data":["800C8809 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","7 Laps":"07","8 Laps":"08","9 Laps":"09","Laps":"06"}},"[Cheat Menu]":{"note":"Press Pause to access cheats.","data":["800CCF89 00FF","800CCF8A 00FF","800CCF8B 00FF"],"options":null},"[Press F9]\\Enable All Courses":{"note":"","data":["890CCDF2 0B00","890CCDF4 0B00","890CCDF6 0B00"],"options":null},"[Press F9]\\Extra Characters":{"note":"","data":["890C632F 01FF"],"options":null},"[Press F9]\\Progress 100%":{"note":"","data":["50000801 0000","880CCE00 0003","50000801 0000","880CCE01 00FF"],"options":null}},"E6419BC5-69011DE3-C:45":{"Always Have Retreat \u0026 Elem Pedra Opened":{"note":"Do not put this on until in-game or the game will freeze.","data":["D01A1C72 0000","811A1C72 0003"],"options":null},"Day Always 00":{"note":"","data":["811F106C 0000"],"options":null},"Finish All Levels":{"note":"","data":["81196A86 5454","81196A88 5140","81196A8A 4555","81196A8C 9514","81196A8E 5515"],"options":null},"Hour Always":{"note":"","data":["80196A2D 00??"],"options":{"(0 Hour - 24:00 PM - Midnight)":"00","(01:00 AM)":"01","(02:00 AM)":"02","(03:00 AM)":"03","(04:00 AM)":"04","(05:00 AM)":"05","(06:00 AM)":"06","(07:00 AM)":"07","(08:00 AM)":"08","(09:00 AM)":"09","(10:00 AM)":"0A","(11:00 AM)":"0B","(12:00 PM - Noon)":"0C","(13:00 - 1 PM)":"0D","(14:00 - 2 PM)":"0E","(15:00 - 3 PM)":"0F","(16:00 - 4 PM)":"10","(17:00 - 5 PM)":"11","(18:00 - 6 PM)":"12","(19:00 - 7 PM)":"13","(20:00 - 8 PM)":"14","(21:00 - 9 PM)":"15","(22:00 - 10 PM)":"16","(23:00 - 11 PM)":"17"}},"Infinite Goth":{"note":"","data":["81196A6E FFFF"],"options":null},"Magnus\\Infinite HP":{"note":"","data":["81193C10 03E7"],"options":null},"Magnus\\Level 99":{"note":"","data":["80193C0B 0063"],"options":null},"Magnus\\Max Agi":{"note":"","data":["81193C1C 03E7"],"options":null},"Magnus\\Max Dex":{"note":"","data":["81193C1E 03E7"],"options":null},"Magnus\\Max HP":{"note":"","data":["81193C0E 03E7"],"options":null},"Magnus\\Max Int":{"note":"","data":["81193C18 03E7"],"options":null},"Magnus\\Max Mem":{"note":"","data":["81193C1A 03E7"],"options":null},"Magnus\\Max Str":{"note":"","data":["81193C14 03E7"],"options":null},"Magnus\\Max Vit":{"note":"","data":["81193C16 03E7"],"options":null},"Max Goth":{"note":"","data":["81196A6C 0098","81196A6E 967F"],"options":null},"Open All Paths":{"note":"","data":["81196A80 01FF","81196A82 677F","81196A84 FCFF"],"options":null}},"E688A5B8-B14B3F18-C:50":{"Have All\\Boards":{"note":"","data":["81082B24 0003","81082B26 FFFF"],"options":null},"Have All\\Characters":{"note":"","data":["81082B18 07FF"],"options":null},"Have All\\Difficulties":{"note":"","data":["81082B10 0700"],"options":null},"Have All\\Tracks":{"note":"","data":["81082B1C BFFE"],"options":null},"Low Timer":{"note":"","data":["80082A04 0000","80182A06 0000"],"options":null},"Max\\50000 Stunt Points":{"note":"","data":["81082AD8 C350"],"options":null},"[Audio Fix]":{"note":"","data":["81051840 AD99"],"options":null}},"E68A000E-639166DD-C:50":{"Access All Remote Controls\\Red Remotes":{"note":"Opens Gate 4 And The Lions Mouth","data":["50000E01 0000","800C513E 0007"],"options":null},"All Silver \u0026 Gold Gold Remotes":{"note":"Opens Gate 3,2,1","data":["810C5164 0FFF","810C5166 FFFF","810C5168 01E0","810C516A 007F"],"options":null},"Fully Charged Gex":{"note":"Press L Button Once When On One Of The Specific Levels, For Circuit Central Levels Only","data":["D00AAAB9 0020","81163CDE 32FF"],"options":null},"Hover \u0026 Fly Mode":{"note":"Press And Hold L Button + A Button","data":["D10BED04 0020","8114ECA2 0010","D10BED04 0010"],"options":null},"Infinite Air Codes\\Pain In The Asteroids":{"note":"","data":["D00BED05 0004","8133CBEE 012B"],"options":null},"Infinite Air Codes\\Umpire Strikes Out":{"note":"","data":["D00BED05 0004","8136608E 012B"],"options":null},"Infinite Health":{"note":"","data":["800C50CB 0063"],"options":null},"Infinite Lives":{"note":"","data":["810C50C6 0063"],"options":null}},"E6A95A4F-BAD2EA23-C:45":{"Have\\Max Gold":{"note":"","data":["50000401 0000","80277335 00FF"],"options":null},"Have\\Max Total XP":{"note":"","data":["50000401 0000","80278BAD 00FF"],"options":null},"Have\\Max Total XP Remaning to Start":{"note":"This will give you 16777215 Total XP Remaning to start with and after your 1st batle will allow you to buy your Max Stats","data":["50000401 0000","80278BB1 00FF"],"options":null},"Infinite\\99 Health Potions":{"note":"Do Not put this cheat on until you have collected your 1st Health Potion from the 1st Cheat or you will not be able to get into the Sub menu and Continue the game.","data":["802785CB 0063"],"options":null},"Infinite\\Max Health":{"note":"","data":["80278B98 001E"],"options":null}},"E73C7C4F-AF93B838-C:4A":{"Flashing Invincible":{"note":"This cheat Makes you Flash But you cant be harmed,Once out of danger Turn the cheat off to stop the flashing.also do not put this on if you have already been hurt or you will stay on the floor.","data":["800AB5C7 000A"],"options":null},"Have\\Fire Bombs":{"note":"","data":["800AB59B 0003"],"options":null},"Have\\Kick Bombs Anytime":{"note":"","data":["800AB5A3 0003"],"options":null},"Have\\Max Fire Level":{"note":"","data":["800AB593 0003"],"options":null},"Infinite\\Bombs":{"note":"","data":["800AB5B8 0003"],"options":null},"Infinite\\Continue Time":{"note":"","data":["810B3B36 0090"],"options":null},"Infinite\\Health":{"note":"","data":["800AB5BF 0005"],"options":null},"Infinite\\Money":{"note":"","data":["810A9BB2 FFFF"],"options":null}},"E7D20193-C1158E93-C:50":{"A Few Extra Cars":{"note":"","data":["811270AA FFFF"],"options":null},"Access All Cars":{"note":"","data":["811270A4 FFFF","811270A6 FFFF"],"options":null},"Allways 1st":{"note":"","data":["8111B14A 0000"],"options":null},"Bonus Tracks":{"note":"","data":["811270AE FFFF"],"options":null},"Infinite Turbos":{"note":"","data":["8111B39C 0800"],"options":null},"Max Tournament Points":{"note":"","data":["811270B6 03E7"],"options":null},"Mirror Mode":{"note":"","data":["801270CE 0001"],"options":null},"Race At Night":{"note":"","data":["801270CF 0080"],"options":null}},"E86415A6-98395B53-C:50":{"Have Infinite\\99 Blue Ammo":{"note":"","data":["800CEA16 0063"],"options":null},"Have Infinite\\99 Blue Power (1UP)":{"note":"","data":["800CEA2A 0063"],"options":null},"Have Infinite\\99 Engery Pickups":{"note":"","data":["800CEA0C 0063"],"options":null},"Have Infinite\\99 Gas":{"note":"","data":["800CEA3E 0063"],"options":null},"Have Infinite\\99 Grenades":{"note":"","data":["800CEA34 003F"],"options":null},"Have Infinite\\99 Yellow Ammo":{"note":"","data":["800CEA20 0063"],"options":null},"Have\\All Magic":{"note":"","data":["800CEB48 0010","800CEB4D 0000","800CEB57 0001","800CEB61 0002","800CEB6B 0003","800CEB75 0005","800CEB7F 0006","800CEB89 0008","800CEB93 0009","800CEB9D 000B","800CEBA7 000E","800CEBB1 000F","800CEBBB 0010","800CEBC5 0011","800CEBCF 000A","800CEBD9 000C","800CEBE3 000D"],"options":null},"Have\\Magic On Level 4":{"note":"","data":["810C8CDD FFFF","810C8CDE FFFF","810C8CDF FFFF","810C8CE0 FFFF","810C8CE1 FFFF","810C8CE2 FFFF"],"options":null},"Have\\Max Armour Level":{"note":"","data":["800C8D00 0064"],"options":null},"Have\\Max Experience Level":{"note":"","data":["800C8CFC 00FF"],"options":null},"Have\\Max Spirit Level":{"note":"","data":["800C8D04 0064"],"options":null},"Have\\Max Weapon Level":{"note":"","data":["800C8D02 0064"],"options":null},"Have\\Weapons On Max Upgrade":{"note":"","data":["800C8CAC 0009","800C8CB4 0009","800C8CBC 0009","800C8CC4 0009"],"options":null},"Infinite Air Under Water":{"note":"","data":["800C8BE4 0069"],"options":null},"Infinite Max\\999 Lives":{"note":"","data":["810C8CF8 03E8"],"options":null},"Infinite Max\\Fire Ammo":{"note":"","data":["800C8CB3 0066"],"options":null},"Infinite Max\\Fusion Ammo":{"note":"","data":["800C8CC3 0066"],"options":null},"Infinite Max\\Health":{"note":"","data":["800C8AD9 0066"],"options":null},"Infinite Max\\Ionic Ammo":{"note":"","data":["800C8CBB 0066"],"options":null},"Infinite Max\\Light Ammo":{"note":"","data":["800C8CAB 0066"],"options":null},"Infinite Max\\Mana":{"note":"","data":["800C8CFF 0066"],"options":null},"Infinite Throwing Weapon Ammo":{"note":"","data":["800CF57D 0063"],"options":null},"Play As Select":{"note":"","data":["800FCEC5 00??"],"options":{"Ike Hawkings (Corporal)":"00","Julia Chase (Cartographer)":"02","Karma (The Ex-Deviant)":"03","Max Havok (Chief Enginer)":"04","Mr Bodybolt (7th Passenger)":"06","Solaar (Archbishop)":"05","Sophia Hawkings (Stowaway)":"01"}},"Press A For Bionic Jump":{"note":"This will make you jump to a great height","data":["D00C8BCA 0080","810C8AE8 ????"],"options":{"Max Jump":"0800","Medium Jump":"0250"}}},"E896092B-DC244D4E-C:45":{"Player 1\\Infinite Free Spins":{"note":"","data":["800B999B 0001"],"options":null},"Player 1\\Max Cash":{"note":"","data":["810B9990 FFFF"],"options":null},"Player 1\\No Cash":{"note":"","data":["810B9992 0000"],"options":null},"Player 2\\Infinite Free Spins":{"note":"","data":["800B9AAF 0001"],"options":null},"Player 2\\Max Cash":{"note":"","data":["810B9AA4 FFFF"],"options":null},"Player 2\\No Cash":{"note":"","data":["810B9AA6 0000"],"options":null},"Player 3\\Infinite Free Spins":{"note":"","data":["800B9BC3 0001"],"options":null},"Player 3\\Max Cash":{"note":"","data":["810B9BB8 FFFF"],"options":null},"Player 3\\No Cash":{"note":"","data":["810B9BB8 0000"],"options":null}},"E8C95AFC-35D121DA-C:45":{"99 Gems":{"note":"","data":["80305449 0063","80648FA9 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000302 0000","81305868 0063","50000304 0000","81305872 0063","5000020E 0000","81305882 0063","50000302 0000","816493C8 0063","50000304 0000","816493D2 0063","5000020E 0000","816493E2 0063","80648F65 0000","806493D1 0063"],"options":null},"Infinite\\Health":{"note":"","data":["80305446 0064","80648FA6 0064"],"options":null},"Infinite\\Lives":{"note":"","data":["80648FAB 0009"],"options":null},"Infinite\\Oxygen":{"note":"","data":["806495BD 0000"],"options":null}},"E8C95AFC-35D121DA-C:50":{"99 Gems":{"note":"","data":["80305449 0063","80648FA9 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000302 0000","81305868 0063","50000304 0000","81305872 0063","5000020E 0000","81305882 0063","50000302 0000","816493C8 0063","50000304 0000","816493D2 0063","5000020E 0000","816493E2 0063","80648F65 0000","806493D1 0063"],"options":null},"Infinite\\Health":{"note":"","data":["80305446 0064","80648FA6 0064"],"options":null},"Infinite\\Lives":{"note":"","data":["80648FAB 0009"],"options":null},"Infinite\\Oxygen":{"note":"","data":["806495BD 0000"],"options":null}},"E8E5B179-44AA30E8-C:45":{"Freeze Timer":{"note":"","data":["80163ABF 000A"],"options":null},"Infinite 99 Lives":{"note":"","data":["80163AC7 0063"],"options":null},"Infinite Lives (Retro Frogger)":{"note":"","data":["8025AC2F 0005"],"options":null}},"E8FC8EA1-9F738391-C:45":{"Always Hole In One":{"note":"","data":["8115E1D6 0000"],"options":null},"Big Head":{"note":"","data":["810AE840 401F"],"options":null},"Change Looks Of Liltiger":{"note":"","data":["800B0BC4 0011"],"options":null},"Character Unlock\\Bengal The Tiger":{"note":"","data":["800B0BC2 0010"],"options":null},"Character Unlock\\Bobby":{"note":"","data":["800B0BC6 0001"],"options":null},"Character Unlock\\Cindy":{"note":"","data":["800B0BBA 0001"],"options":null},"Character Unlock\\Festus":{"note":"","data":["800B0BD3 0001"],"options":null},"Character Unlock\\Kimmi":{"note":"","data":["800B0BBA 0010"],"options":null},"Character Unlock\\Mark":{"note":"","data":["800B0BC7 0012"],"options":null},"Character Unlock\\Marvin The Alien":{"note":"","data":["800B0BD7 0001"],"options":null},"Character Unlock\\Robert \u0026 Delvis":{"note":"","data":["800B0BCA 0011"],"options":null},"Character Unlock\\Starr":{"note":"","data":["800B0BCE 0010"],"options":null},"Character Unlock\\Traci (Leopard Costume)":{"note":"","data":["800B0BCE 0011"],"options":null},"Character Unlock\\Twfan \u0026 Eagamer":{"note":"","data":["800B0BBE 0011"],"options":null},"Inventory\\Max Accuracy \u0026 Skipper":{"note":"","data":["800B4410 00FF"],"options":null},"Inventory\\Max Distance \u0026 Wind Cutter":{"note":"","data":["800B4412 00FF"],"options":null},"Inventory\\Max Mystery":{"note":"","data":["800B4420 00F0"],"options":null},"Inventory\\Max No Bounce \u0026 Tee Up":{"note":"","data":["800B4411 00FF"],"options":null},"Inventory\\Max Spinner \u0026 Burrow":{"note":"","data":["800B4413 00FF"],"options":null}},"E9219533-13FBAFBD-C:45":{"Championship Mode\\Infinite Money":{"note":"","data":["810F81CA FFFF"],"options":null},"Championship Mode\\Max Dexterity":{"note":"","data":["810F81D8 447A","810F81DA 0000"],"options":null},"Championship Mode\\Max Endurance":{"note":"","data":["810F81D4 447A","810F81D6 0000"],"options":null},"Championship Mode\\Max Experience":{"note":"","data":["810F81DC 447A","810F81DE 0000"],"options":null},"Championship Mode\\Max Money":{"note":"","data":["810F81C8 7FFF","810F81CA FFFF"],"options":null},"Championship Mode\\Max Stamina":{"note":"","data":["810F81D0 447A","810F81D2 0000"],"options":null},"Championship Mode\\Max Strength":{"note":"","data":["810F81CC 447A","810F81CE 0000"],"options":null},"Championship Mode\\Top Rank":{"note":"","data":["810F81BA 000A"],"options":null},"Enable Extra Characters":{"note":"","data":["80101E6F 0003","80101E73 0003","80101E77 0003","80101E7B 0003","80101E7F 0003","80101E83 0003","80101E87 0003"],"options":null},"Infinite\\Health\\Player 1":{"note":"Do not use this with No Health","data":["810FF6B6 0064"],"options":null},"Infinite\\Health\\Player 2":{"note":"Do not use this with No Health","data":["81100316 0064"],"options":null},"Infinite\\Stamina\\Player 1":{"note":"Do not use this with No Stamina","data":["810FF6BA 0064"],"options":null},"Infinite\\Stamina\\Player 2":{"note":"Do not use this with No Stamina","data":["8110031A 0064"],"options":null},"Infinite\\Time":{"note":"","data":["810FE352 0E10"],"options":null},"Max RUMBLE\\Player 1":{"note":"Do not use this with Never RUMBLE","data":["810FF6C2 0090"],"options":null},"Max RUMBLE\\Player 2":{"note":"Do not use this with Never RUMBLE","data":["81100322 0090"],"options":null},"Never RUMBLE\\Player 1":{"note":"Do not use this with Max RUMBLE","data":["810FF6C2 0000"],"options":null},"Never RUMBLE\\Player 2":{"note":"Do not use this with Max RUMBLE","data":["81100322 0000"],"options":null},"No Health\\Player 1":{"note":"Do not use this with Infinite Health","data":["810FF6B6 0000"],"options":null},"No Health\\Player 2":{"note":"Do not use this with Infinite Health","data":["81100316 0000"],"options":null},"No Stamina\\Player 1":{"note":"Do not use this with Infinite Stamina","data":["810FF6BA 0000"],"options":null},"No Stamina\\Player 2":{"note":"Do not use this with Infinite Stamina","data":["8110031A 0000"],"options":null},"Win 1 Fight to Complete Arcade Mode":{"note":"","data":["80101F0B 000B"],"options":null}},"E97955C6-BC338D38-C:50":{"All Equipment Upgrades":{"note":"","data":["801E6BBD 0023","811E6C0A 201B","801E6B9C 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03DDFDB 0000","801E6B52 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801E6BD2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801E6BD3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801E6BD4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801E6BD5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801E6BD6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801E6BD7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801E6BC5 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801E6BCB 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801E6BD1 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Have Item Modifier":{"note":"","data":["801E6BD0 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\All Masks":{"note":"","data":["811E6BD8 3E39","811E6BDA 4745","811E6BDC 4032","811E6BDE 3A46","811E6BE0 3842","811E6BE2 4833","811E6BE4 3C3D","811E6BE6 373F","811E6BE8 3634","811E6BEA 4341","811E6BEC 3B44","811E6BEE 4935"],"options":null},"Have\\Bombchu":{"note":"","data":["801E6BC7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801E6BC6 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801E6BC9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801E6BC8 0008"],"options":null},"Have\\Fire Arrow":{"note":"","data":["801E6BC2 0002"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801E6BD0 0010"],"options":null},"Have\\Have\\Ocarina of Time":{"note":"","data":["801E6BC0 0000"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801E6BC1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801E6BCF 000F"],"options":null},"Have\\Ice Arrow":{"note":"","data":["801E6BC3 0003"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801E6BCE 000E"],"options":null},"Have\\Light Arrow":{"note":"","data":["801E6BC4 0004"],"options":null},"Have\\Magic Beans":{"note":"","data":["801E6BCA 000A"],"options":null},"Have\\Pictograph":{"note":"","data":["801E6BCD 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801E6BCC 000C"],"options":null},"Have\\QuestStatus Items":{"note":"","data":["801E6C0D 0005","811E6C0E F7CF"],"options":null},"Infinite\\Health":{"note":"","data":["811E6B86 03E7"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811E6B84 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"This is Infinite use of Bombs,Bombchus,Deku Sticks,Deku Nuts,Magic Beans,\u0026 Powder Kegs. But you must also put it's Have on to work.","data":["801E6BF1 0063","801E6BF6 0063","801E6BF7 0063","801E6BF8 0063","801E6BF9 0063","801E6BFA 0063","801E6BFC 0063","801E6BFB 0063","801E6BFD 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801E6B89 0060","811E6B90 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811E6B8A 03E7"],"options":null},"Play As":{"note":"","data":["801E6B70 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03DDFDB 0020","813F72B8 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You Have\\been warned.","data":["801E6B9C 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F2D56 0008","811E6B66 FFFD","D01F2D56 0004","811E6B66 0000","D01F2D56 0002","811E6B66 FFFE"],"options":null},"Use all C Buttons":{"note":"","data":["811EAA68 0000","811EAA6A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["803DDFDA 0000","803F6835 0001","813F683A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"EA06F8C3-07C2DEED-C:46":{"Character Select":{"note":"","data":["80075F52 00??"],"options":{"Big Head.":"04","Flame Grilled":"08","Normal":"00","Play as Deadwing.":"01"}},"Have All\\Cheats: Book of Shadows":{"note":"","data":["81075F4E 0FFF"],"options":null},"Have All\\Dark Souls Collected":{"note":"","data":["80075F49 0078"],"options":null},"Have All\\Gads \u0026 The Poign":{"note":"","data":["80030E57 000F"],"options":null},"Have All\\Items":{"note":"","data":["50001B20 0000","80030613 000B"],"options":null},"Have All\\L-Eclipser":{"note":"You will not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50000320 0000","80030973 000B"],"options":null},"Have All\\Levels Unlocked":{"note":"","data":["5000101C 0000","80030A0E 0001"],"options":null},"Infinite\\0.9mm Ammo":{"note":"","data":["81075B3A 0190"],"options":null},"Infinite\\Accumulators":{"note":"","data":["800306D7 0005"],"options":null},"Infinite\\Cadeaux'":{"note":"","data":["81075B36 03E7"],"options":null},"Infinite\\Max Health/Air/Shadow Charge \u0026 Voodoo Power":{"note":"","data":["50000604 0000","81075B16 2710"],"options":null},"Infinite\\Prisms":{"note":"","data":["80030957 0003"],"options":null},"Infinite\\Retractors":{"note":"","data":["800308B7 0003"],"options":null},"Infinite\\Shotgun Shells":{"note":"","data":["80075B2F 0063"],"options":null},"Infinite\\Violator Ammo":{"note":"","data":["81075B32 03E7"],"options":null},"Press L To Levitate":{"note":"Press the L-Button to rise and let go and press again in stages to come back down.","data":["D0059097 0020","80075578 0041"],"options":null},"[Ammo Always Displayed On Screen]":{"note":"","data":["50000408 0000","80075ACD 0007"],"options":null},"[Health Meter Displayed On Screen]":{"note":"","data":["81075B10 0000","81075B12 00FF"],"options":null}},"EA71056A-E4214847-C:45":{"Have All Cars":{"note":"","data":["50000D01 0000","80191298 001F"],"options":null},"Have All Characters \u0026 Levels":{"note":"","data":["81181572 01C0"],"options":null},"Level Select":{"note":"","data":["80190150 00??"],"options":{"Aircraft Graveyard":"04","Canyonlands":"09","Casino City":"08","Ghost Town":"05","Hoover Dam":"06","Oil Fields":"03","Sand Factory":"02","Secret Base":"01","Ski Resorts":"0A","Super Dreamland 64":"00","Valley Farms":"07"}},"Play As\\Player 1":{"note":"","data":["80186AE0 00??"],"options":{"\"Y\" The Alien":"0C","Beezwax":"09","Boogie":"08","Chassey Blue":"00","Convoy":"05","Dave":"04","Houston 3":"07","John Torque":"03","Loki":"06","Molo":"0A","Sheila":"02","Sid Burn":"0B","Slick Clyde":"01"}},"Play As\\Player 2":{"note":"","data":["80186AE1 00??"],"options":{"\"Y\" The Alien":"0C","Beezwax":"09","Boogie":"08","Chassey Blue":"00","Convoy":"05","Dave":"04","Houston 3":"07","John Torque":"03","Loki":"06","Molo":"0A","Sheila":"02","Sid Burn":"0B","Slick Clyde":"01"}}},"EAB7B429-BAC92C57-C:45":{"Have All Characters":{"note":"","data":["5000125C 0000","810EC938 0000","5000125C 0000","810EC93A 0003"],"options":null},"Infinite\\Money":{"note":"","data":["810EC932 FFFF"],"options":null},"Infinite\\Time":{"note":"","data":["810E7596 0E10"],"options":null},"Player 1\\Health":{"note":"","data":["810D9F78 0000","810D9F7A 00??"],"options":{"Infinite":"64","No Health":"00"}},"Player 1\\RUMBLE":{"note":"","data":["810D9F84 0000","810D9F86 00??"],"options":{"Max":"30","Never Rumble":"00"}},"Player 1\\Stamina":{"note":"","data":["810D9F7C 0000","810D9F7E 00??"],"options":{"Infinite":"64","No Stamina":"00"}},"Player 2\\Health":{"note":"","data":["810DA790 0000","810DA792 00??"],"options":{"Infinite":"64","No Health":"00"}},"Player 2\\RUMBLE":{"note":"","data":["810DA7A0 0000","810DA7A2 00??"],"options":{"Max":"30","Never Rumble":"00"}},"Player 2\\Stamina":{"note":"","data":["810DA794 0000","810DA796 00??"],"options":{"Infinite":"64","No Stamina":"00"}},"Sudden Death Mode\\Player 1":{"note":"","data":["D00E7596 03D7","810DAF78 0000","810D9F7A 0001"],"options":null},"Sudden Death Mode\\Player 2":{"note":"","data":["D00E7596 03D7","810DA790 0000","810DA792 0001"],"options":null}},"EAE6ACE2-020B4384-C:50":{"2X Secondary Weapons":{"note":"","data":["8104C62A 0080"],"options":null},"Access All Platinium Medals":{"note":"","data":["50001301 0000","8004C63D 0004"],"options":null},"Accuracy 100%":{"note":"","data":["8105C896 0064","8105C89A 0064"],"options":null},"Advanced Weapons,Shields \u0026 Extra Ships":{"note":"","data":["8104C636 00FF"],"options":null},"Always Pass Mission":{"note":"","data":["8105C88E 0001"],"options":null},"Bonus Collected":{"note":"Where Bonus Are Available","data":["8005C89F 0002"],"options":null},"Completion Time 0:00":{"note":"","data":["8105C892 0000"],"options":null},"Enemies Destroyed 756":{"note":"","data":["8005C89D 03E7"],"options":null},"Friendly Saves 756":{"note":"","data":["8005C89E 03E7"],"options":null},"Infinite Lives":{"note":"","data":["80067553 03E7"],"options":null},"Level Select":{"note":"","data":["8004C650 0013"],"options":null},"Lives Remaining 756":{"note":"","data":["8005C8A0 03E7"],"options":null}},"EB38F792-190EA246-C:45":{"Away Team\\Infinite Time-Outs":{"note":"","data":["800738E7 0003"],"options":null},"Away Team\\No Time-Outs":{"note":"","data":["800738E7 0000"],"options":null},"Have 99 Tokens":{"note":"","data":["8115F9F0 0063"],"options":null},"Have All\\Cards":{"note":"","data":["50007802 0000","8115F9F2 FFFF"],"options":null},"Have All\\Cheats":{"note":"","data":["50000402 0000","81070788 FFFF"],"options":null},"Have All\\Levels Completed":{"note":"","data":["50001902 0000","8115FB2C FFFF"],"options":null},"Have All\\Stadiums":{"note":"","data":["50000802 0000","81061850 FFFF"],"options":null},"Have All\\Teams":{"note":"","data":["50001102 0000","810C1628 FFFF"],"options":null},"Home Team\\Infinite Time-Outs":{"note":"","data":["80071617 0003"],"options":null},"Home Team\\No Time-Outs":{"note":"","data":["80071617 0000"],"options":null}},"EBA949DC-39BAECBD-C:49":{"Access All Levels":{"note":"","data":["8008A9D6 0001","8008A9EA 0001","8008AA12 0001","8008AA62 0001","8008AA76 0001","8008AA8A 0001","8008AA9E 0001","8008AAB2 0001","8008AAC6 0011","8008AADA 0021","8008AAEE 0001","8008AB16 0011","8008AB2A 0041","8008AB3E 0021","8008AB52 0081","8008AB66 0001","8008AB7A 0081","8008AB8E 0001","8008ABB6 0001","8008ABDE 0001","8008ABF2 0011","8008AC06 0021","8008AC56 0001","8008AF3A 0001","8008AF4E 0001","8008AF62 0001","8008AF76 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81094150 0063","81094152 0063","81094154 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A9297 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810866C2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810864C4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80094305 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A92B5 00??","800A92C5 00??","800A92D5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"EBEEA8DB-F2ECB23C-C:45":{"Infinite Shot Clock":{"note":"","data":["801378DF 0016"],"options":null},"Infinite Turbo\\Team 1\\Player 1":{"note":"","data":["8115B512 FF00"],"options":null},"Infinite Turbo\\Team 1\\Player 2":{"note":"","data":["8115B516 FF00"],"options":null},"Infinite Turbo\\Team 2\\Player 1":{"note":"","data":["8115B50A FF00"],"options":null},"Infinite Turbo\\Team 2\\Player 2":{"note":"","data":["8115B50E FF00"],"options":null},"Infinite Violation Clock":{"note":"","data":["8013783B 005D"],"options":null},"Team 1 Score Select":{"note":"","data":["80137117 00??"],"options":{"00":"00","150":"96"}},"Team 2 Score Select":{"note":"","data":["80137113 00??"],"options":{"00":"00","150":"96"}}},"EBFE2397-FF74DA34-C:45":{"Always Have Rapid Shot":{"note":"This is a constant fire without a break as long as you keep pressing A","data":["800B51AB 0009"],"options":null},"Infinite\\Lives":{"note":"","data":["800B51DD 0063"],"options":null},"Infinite\\Points":{"note":"","data":["810B51E2 FFFF"],"options":null},"Infinite\\Shields":{"note":"","data":["810B51B6 0001"],"options":null},"Secondary Weapon Select":{"note":"B Button Weapon infinite ammo","data":["800B519F 00??"],"options":{"Diagonal Burst":"20","Horizontal Left":"0C","Horizontal Right":"0D","Swarm Missiles":"1A","Vertical Burst":"06"}},"[Unlock All Modes}":{"note":"Enable this as so as you load the game.This Unlocks Classic and Maniacle Mode. To get to Classic Mode you pr ess Right on Player 1. To get to Maniacle Mode, go to Options and press Left on Normal Mode. This can be disabled once saved to mempak.","data":["80070217 0003"],"options":null}},"EC0F690D-32A7438C-C:4A":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C18E2 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803A7DAF 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["8036D1C7 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","80201035 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","801DCB95 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","801FB505 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","801EE8ED 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","80201165 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","801D89FD 0001"],"options":null}},"EC417312-EB31DE5F-C:4A":{"All Equipment Upgrades":{"note":"","data":["801EF4CD 0023","811EF51A 201B"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D01FB9E1 0000","801EF462 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Have All\\Masks":{"note":"","data":["801EF4E8 005A","801EF4E9 0055","801EF4EA 0063","801EF4EB 0061","801EF4EC 005C","801EF4ED 004E","801EF4EE 0056","801EF4EF 0062","801EF4F0 0054","801EF4F1 005E","801EF4F2 0064","801EF4F3 004F","801EF4F4 0058","801EF4F5 0059","801EF4F6 0053","801EF4F7 005B","801EF4F8 0052","801EF4F9 0050","801EF4FA 005F","801EF4FB 005D","801EF4FC 0057","801EF4FD 0060","801EF4FE 0065","801EF4FF 0051"],"options":null},"Have All\\Quest Status Items":{"note":"","data":["801EF51D 0005","811EF51E F7CF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801EF4D2 0002"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801EF4D3 0003"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801EF4D4 0004"],"options":null},"Have\\Bombchu":{"note":"","data":["801EF4D7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801EF4D6 0006"],"options":null},"Have\\Bottle Modifier\\1":{"note":"","data":["801EF4E2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\2":{"note":"","data":["801EF4E3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\3":{"note":"","data":["801EF4E4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\4":{"note":"","data":["801EF4E5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\5":{"note":"","data":["801EF4E6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\6":{"note":"","data":["801EF4E7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Deku Nuts":{"note":"","data":["801EF4D9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801EF4D8 0008"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801EF4E0 0010"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801EF4D1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801EF4DF 000F"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801EF4DE 000E"],"options":null},"Have\\Magic Beans":{"note":"","data":["801EF4DA 000A"],"options":null},"Have\\Ocarina of Time":{"note":"","data":["801EF4D0 0000"],"options":null},"Have\\Pictograph":{"note":"","data":["801EF4DD 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801EF4DC 000C"],"options":null},"Infinite\\Arrows":{"note":"","data":["801EF501 0063"],"options":null},"Infinite\\Bombchus":{"note":"","data":["801EF507 0063"],"options":null},"Infinite\\Bombs":{"note":"","data":["801EF506 0063"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801EF509 0063"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801EF508 0063"],"options":null},"Infinite\\Health":{"note":"","data":["811EF496 0140"],"options":null},"Infinite\\Hearts Options":{"note":"","data":["811EF494 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Magic Beans":{"note":"","data":["801EF50A 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801EF499 0060","811EF4A0 0101"],"options":null},"Infinite\\Powder Kegs":{"note":"","data":["801EF50C 0063"],"options":null},"Infinite\\Rupees":{"note":"","data":["811EF49A 03E7"],"options":null},"Play As":{"note":"","data":["801EF480 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03E6D0B 0020","81400008 40CB"],"options":null},"Replace Sword With":{"note":"","data":["801EF4AC 00??"],"options":{"Deity Link's Sword":"10","Fire Arrow w/ Bow":"02","Hero's Bow":"00","Ice Arrow w/ Bow":"03","Light Arrow w/ Bow":"04"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01FBA40 0008","811EF476 FFFD","D01FBA40 0004","811EF476 0000","D01FBA40 0002","811EF476 FFFE"],"options":null},"Warp Modifier":{"note":"Put this code on and press the start button and it will now take where you wanted to go, turn it back off after you have got there.","data":["D05EC55A 0000","803FF545 0001","813FF54A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"EC58EABF-AD7C7169-C:45":{"Chunky\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FCB0C 0064"],"options":null},"Chunky\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FCB16 0064"],"options":null},"Chunky\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FCB14 0064"],"options":null},"Chunky\\All Golden Bananas\\DK Isle":{"note":"","data":["817FCB18 0064"],"options":null},"Chunky\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FCB0E 0064"],"options":null},"Chunky\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FCB12 0064"],"options":null},"Chunky\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FCB10 0064"],"options":null},"Chunky\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FCB0A 0064"],"options":null},"Chunky\\Infinite Coins":{"note":"","data":["817FCACE 03E7"],"options":null},"Chunky\\Infinite Musical Instrument":{"note":"","data":["817FCAD0 000A"],"options":null},"Diddy\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC9F2 0064"],"options":null},"Diddy\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC9FC 0064"],"options":null},"Diddy\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC9FA 0064"],"options":null},"Diddy\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC9FE 0064"],"options":null},"Diddy\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC9F4 0064"],"options":null},"Diddy\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FC9F8 0064"],"options":null},"Diddy\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC9F6 0064"],"options":null},"Diddy\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC9F0 0064"],"options":null},"Diddy\\Infinite Coins":{"note":"","data":["817FC9B4 03E7"],"options":null},"Diddy\\Infinite Musical Instrument":{"note":"","data":["817FC9B6 000A"],"options":null},"Donkey Kong\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC994 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC99E 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC99C 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC9A0 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC996 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC998 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC992 03E7"],"options":null},"Donkey Kong\\Has Moves":{"note":"","data":["817FC950 0103"],"options":null},"Donkey Kong\\Have Weapon":{"note":"","data":["817FC952 0103"],"options":null},"Donkey Kong\\Infinite Ammo":{"note":"","data":["807FCC45 0096"],"options":null},"Donkey Kong\\Infinite Bananas\\Angry Aztec":{"note":"","data":["817FC95C 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Creepy Castle":{"note":"","data":["817FC966 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Crystal Caves":{"note":"","data":["817FC964 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\FactoryLevel":{"note":"","data":["817FC95E 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Fungi Forest":{"note":"","data":["817FC962 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Galleon Level":{"note":"","data":["817FC9BE 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Jungle Japes":{"note":"","data":["817FC95A 03E7"],"options":null},"Donkey Kong\\Infinite Coins":{"note":"","data":["817FC956 03E7"],"options":null},"Donkey Kong\\Infinite Musical Instrument":{"note":"","data":["817FC954 0103","817FC958 00FF"],"options":null},"Free Pass (Access All Areas)":{"note":"This is exactly what it says, You can walk through Any Locked Door,Gate, Or Area. Have Fun.","data":["8066D226 0001","8066D321 0001"],"options":null},"Infinite\\Camera Film":{"note":"","data":["807FCC49 0005"],"options":null},"Infinite\\Crystal Coconuts":{"note":"","data":["807FCB87 0096"],"options":null},"Infinite\\Health":{"note":"","data":["817FCC4C 041F"],"options":null},"Infinite\\Orange Bombs":{"note":"","data":["807FCC41 0096"],"options":null},"Lanky\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FCA50 0064"],"options":null},"Lanky\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FCA5A 0064"],"options":null},"Lanky\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FCA58 0064"],"options":null},"Lanky\\All Golden Bananas\\DK Isle":{"note":"","data":["817FCA5C 0064"],"options":null},"Lanky\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FCA52 0064"],"options":null},"Lanky\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FCA56 0064"],"options":null},"Lanky\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FCA54 0064"],"options":null},"Lanky\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FCA4E 0064"],"options":null},"Lanky\\Infinite Coins":{"note":"","data":["817FCA12 03E7"],"options":null},"Lanky\\Infinite Musical Instrument":{"note":"","data":["817FCA14 000A"],"options":null},"Tiny\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FCAAE 0064"],"options":null},"Tiny\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FCAA8 0064"],"options":null},"Tiny\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FCAB6 0064"],"options":null},"Tiny\\All Golden Bananas\\DK Isle":{"note":"","data":["817FCABA 0064"],"options":null},"Tiny\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FCAB0 0064"],"options":null},"Tiny\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FCAB4 0064"],"options":null},"Tiny\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FCAB2 0064"],"options":null},"Tiny\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FCAAC 0064"],"options":null},"Tiny\\Infinite Coins":{"note":"","data":["817FCA70 03E7"],"options":null},"Tiny\\Infinite Musical Instrument":{"note":"","data":["817FCA72 000A"],"options":null}},"EC7011B7-7616D72B-C:45":{"Always Have Wallet Size":{"note":"","data":["8011A672 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C84B5 0010","8111B936 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011B4B9 00FF","8011B92F 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C84B5 0000","8011B9E3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest 01).","data":["80025614 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011A656 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011A657 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011A658 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011A659 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023E80F 0020","8023E815 0033"],"options":null},"Dark Link\\Play As Dark Link":{"note":"","data":["D01C84B5 0020","811DAB60 801E","D01C84B5 0020","811F2C24 801D","D01C84B5 0020","811F2C26 AA30","D01C84B5 0020","811CA0E4 801E","D01C84B5 0020","811CA0E6 4B60","D01C84B5 0020","811E4B60 0000","D01C84B5 0020","811E4B62 02FF","D01C84B5 0020","811DAA30 0033","D01C84B5 0020","811DAA32 0901","D01C84B5 0020","811DAB62 27E0","D01C84B5 0020","811E4C90 8009","D01C84B5 0020","811E4C92 7740","D01C84B5 0020","811C8710 801E","D01C84B5 0020","811C8712 4B60"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F2208 0005","801EEC88 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["8011A672 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011A673 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011A671 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A66C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A674 30FF","8111A676 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011A648 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011A64E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011A654 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011A64C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011A646 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011A650 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011A645 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011A644 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011A647 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011A64A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011A64D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011A651 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011A652 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011A649 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011A64F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011A655 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011A653 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011A64B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011A65F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011A678 0007","8011A679 0007","8011A67A 0007","8011A67B 0007","8011A67C 0007","8011A67D 0007","8011A67E 0007","8011A67F 0007","8011A680 0007","8011A681 0007","8011A682 0007","8011A68F 0009","8011A690 0009","8011A691 0009","8011A692 0009","8011A693 0009","8011A699 0009","8011A69C 0009","8011A697 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011A664 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011A65E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011A65D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011A662 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011A65C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111A600 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011A609 0008","8011A60A 0001","8011A60C 0001","8011A603 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011A66A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111B99C 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011B9A5 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C84B5 0020","811DAA90 40CB","D01C84B5 0000","811DB2B2 000D","8011A640 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011A69F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011A6A1 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111A5FE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111B998 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L+R For FMV Select":{"note":"Hold down `L+R' after the Nintendo logo is spinning to see your favourite FMV","data":["D01C84B5 0030","8111A5D2 00A0","D01C84B5 0030","8111A5DA ????"],"options":{"Ending":"FFF8","Fire FMV":"FFF5","Ganondorf FMV":"FFF6","More Triforce FMV":"FFF7","Planet Making FMV":"FFF4","Triforce FMV":"FFF2","fire FMV":"FFF1"}},"Press L\\For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C84B5 0020","811DB2B2 000D"],"options":null},"Press L\\To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C84B5 0020","811DAA90 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C84B5 0010","8011A5D7 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111A5DC ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011A65A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011A65B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011A640 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011A60E 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111B7F2 0000","8111B7F4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"EC7011B7-7616D72B-C:4A":{"Always Have Wallet Size":{"note":"","data":["8011A672 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C84B5 0010","8111B936 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011B4B9 00FF","8011B92F 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C84B5 0000","8011B9E3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest 01).","data":["80025614 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011A656 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011A657 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011A658 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011A659 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801D8BCA 0006","801F2208 0001","801EEC88 0001"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.If you Use Black Gauntlets,They are as strong as the Golden Gauntlets. This code also gives you the Silver Scale and the Golden Scale and unlimited rupees.","data":["8011A672 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011A673 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011A671 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A66C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A674 30FF","8111A676 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011A648 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011A64E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011A654 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011A64C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011A646 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011A650 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011A645 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011A644 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011A647 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011A64A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011A64D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011A651 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011A652 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011A649 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011A64F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011A655 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011A653 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011A64B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011A65F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011A678 0007","8011A679 0007","8011A67A 0007","8011A67B 0007","8011A67C 0007","8011A67D 0007","8011A67E 0007","8011A67F 0007","8011A680 0007","8011A681 0007","8011A682 0007","8011A68F 0009","8011A690 0009","8011A691 0009","8011A692 0009","8011A693 0009","8011A699 0009","8011A69C 0009","8011A697 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011A664 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011A65E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011A65D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011A662 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011A65C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111A600 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011A609 0008","8011A60A 0001","8011A60C 0001","8011A603 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011A66A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111B99C 0001"],"options":null},"Infinite\\Timers\\All other Timers":{"note":"This cheat works on all Race Timers.Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011B9A5 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C84B5 0020","811DAA90 40CB","D01C84B5 0000","811DB2B2 000D","8011A640 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011A69F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011A6A1 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111A5FE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111B998 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C84B5 0020","811DB2B2 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C84B5 0020","811DAA90 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C84B5 0010","8011A5D7 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111A5DC ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011A65A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011A65B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011A640 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011A60E 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111B7F2 0000","8111B7F4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"ED98957E-8242DCAC-C:45":{"All Bosses 1 Hit Deaths":{"note":"","data":["811BE482 0000"],"options":null},"Enable\\Max Power Mode":{"note":"","data":["8015D417 0001"],"options":null},"Flashlight Mod":{"note":"","data":["80179448 00??"],"options":{"Off":"00","On":"01"}},"Have All\\Weapons,Items \u0026 Infinite Ammo\\Player 1":{"note":"","data":["8017AA9F 001E","8017AAB3 0008","8017AAB7 0009","801587C4 0009","8015D417 0001","801587C0 000C","801587C1 0060","801587C3 0001","50000601 0000","801587C5 0001","801587CB 0004","801587CD 000C"],"options":null},"Have Trial Mode Unlocked":{"note":"","data":["8110DCEE 0004"],"options":null},"Have\\All Characters In Multi":{"note":"","data":["8115D412 FFFF","8115D410 0003","8015D411 0003"],"options":null},"Infinite Health":{"note":"","data":["8017AABB 0064"],"options":null},"Start with Weapon\\Player 1":{"note":"","data":["8017AAA8 00??"],"options":{"Cool Rocket Launcher With Infinite Ammo":"09","HandGun":"00","Invisible Gun 1 With Infinite Ammo":"06","Invisible Gun 2 With Infinite Ammo":"07","M16 With Infinite Ammo":"04","Machinegun":"01","New Cooler Handgun":"05","Odd Inviso ShotGun With Infinite Ammo":"08","Rocket Launcher":"03","Shotgun":"02","Silenced Handgun":"14"}},"Time is Always 00:00:00":{"note":"","data":["8110DD62 0000"],"options":null}},"EDD6E031-68136013-C:45":{"Always Place 1st":{"note":"","data":["80112589 0000"],"options":null},"Best Points\\In Stunt Mode\\Player 1":{"note":"","data":["8010C068 00FF"],"options":null},"Best Points\\In Stunt Mode\\Player 2":{"note":"","data":["8010C069 00FF"],"options":null},"Car Select\\Player 1":{"note":"","data":["803CB362 00??"],"options":{"4x4":"0F","Bandit":"05","Compact":"01","Concept":"0B","Coupe":"06","Cruiser":"0D","Exotic":"07","Formula":"12","Hot Rod":"11","Mobster":"03","Mtn Dew":"15","Muscle Car":"02","Pickup":"00","Prototype":"13","Rocket":"14","Sedan":"04","Sportster":"09","Stallion":"0E","Subcompact":"0A","Taxi":"10","Van":"08"}},"Car Select\\Player 2":{"note":"","data":["803CB363 00??"],"options":{"4x4":"0F","Bandit":"05","Compact":"01","Concept":"0B","Coupe":"06","Cruiser":"0D","Exotic":"07","Formula":"12","Hot Rod":"11","Mobster":"03","Mtn Dew":"15","Muscle Car":"02","Pickup":"00","Prototype":"13","Rocket":"14","Sedan":"04","Sportster":"09","Stallion":"0E","Subcompact":"0A","Taxi":"10","Van":"08"}},"Cruiser Front Tire Size\\Player 1":{"note":"","data":["800C0AF9 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Cruiser Rear Tire Size\\Player 1":{"note":"","data":["800C0C01 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Formula Front Tire Size\\Player 1":{"note":"","data":["800C0B0D 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Formula Rear Tire Size\\Player 1":{"note":"","data":["800C0C15 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Front Pickup Tire Size\\Player 1":{"note":"","data":["800C0AC5 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Have All Keys Found\\Alcatraz\\Normal":{"note":"","data":["810C1DC4 FFFF"],"options":null},"Have All Keys Found\\Hawaii\\Normal":{"note":"","data":["810C1DC0 FFFF"],"options":null},"Have All Keys Found\\Las Vegas Normal":{"note":"","data":["810C1DBC FFFF"],"options":null},"Have All Keys Found\\Los Angeles\\Normal":{"note":"","data":["810C1DC6 FFFF"],"options":null},"Have All Keys Found\\New York-Downtown\\Normal":{"note":"","data":["810C1DBE FFFF"],"options":null},"Have All Keys Found\\New York-Uptown\\Normal":{"note":"","data":["810C1DC2 FFFF"],"options":null},"Have All Keys Found\\Seattle\\Normal":{"note":"","data":["810C1DC8 FFFF"],"options":null},"Have\\All Keys \u0026 Cans\\Midway Track":{"note":"","data":["810C1DD0 FFFF"],"options":null},"Have\\All Keys \u0026 Cans\\Stunt Track":{"note":"","data":["810C1DD2 FFFF"],"options":null},"Have\\Extra Cars":{"note":"","data":["50000902 0000","810C1DBC FFFF"],"options":null},"Have\\Game Timer Off":{"note":"","data":["800D9E88 0001"],"options":null},"Have\\Midway Track":{"note":"","data":["800E7D19 0001"],"options":null},"Have\\Stunts All Tracks":{"note":"","data":["8010C200 0001"],"options":null},"Hot Rod Front Tire Size\\Player 1":{"note":"","data":["800C0B09 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Hot Rod Rear Tire Size\\Player 1":{"note":"","data":["800C0C11 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Misc\\Auto Abort Disable":{"note":"","data":["8010C168 0001"],"options":null},"Misc\\Brakes Off":{"note":"","data":["80125C64 0001"],"options":null},"Misc\\Car Collisions Off":{"note":"","data":["8011249A 0001"],"options":null},"Misc\\Car Mines On":{"note":"","data":["8010C167 0001"],"options":null},"Misc\\Cone Mines On":{"note":"","data":["8010C166 0001"],"options":null},"Misc\\Damage Off":{"note":"","data":["8011CDB0 0001"],"options":null},"Misc\\Difficulty Mod":{"note":"","data":["8010C211 00??"],"options":{"Easy":"01","Extremely Hard":"05","Hard":"03","Medium":"02","Very Easy":"00","Very Hard":"04"}},"Misc\\Drones In Race":{"note":"","data":["800D5761 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07"}},"Misc\\Have All Cars In Pipe":{"note":"","data":["810C1DCE FFFF"],"options":null},"Misc\\Heavy Gravity":{"note":"","data":["800E7D22 0002"],"options":null},"Misc\\Heavy Mass":{"note":"","data":["8010C179 0001"],"options":null},"Misc\\Inside-Out Car On":{"note":"","data":["801174E0 0001"],"options":null},"Misc\\Invincible":{"note":"","data":["80119634 0001"],"options":null},"Misc\\Invisible Cars":{"note":"","data":["8010C170 0001"],"options":null},"Misc\\Invisible Tracks":{"note":"","data":["8010C178 0001"],"options":null},"Misc\\Jovian Gravity":{"note":"","data":["800E7D22 0003"],"options":null},"Misc\\Killer Rats On":{"note":"","data":["8010C17C 0001"],"options":null},"Misc\\Laps to Race":{"note":"","data":["8010C0E3 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Misc\\Large Frame":{"note":"","data":["8010C43C 0003"],"options":null},"Misc\\Levitation":{"note":"","data":["8010C254 0001"],"options":null},"Misc\\Light Gravity":{"note":"","data":["800E7D22 0000"],"options":null},"Misc\\Massive Mass":{"note":"","data":["8010C179 0002"],"options":null},"Misc\\New York Cabs":{"note":"","data":["800D9E89 0001"],"options":null},"Misc\\Resurrect In Place":{"note":"","data":["8010C210 0001"],"options":null},"Misc\\Suicide Mode Humans On":{"note":"","data":["80119628 0002"],"options":null},"Misc\\Suicide Mode On":{"note":"","data":["80119628 0001"],"options":null},"Misc\\Super Speed":{"note":"","data":["80111950 0001"],"options":null},"Misc\\Super Tires":{"note":"","data":["8010D3A6 0002"],"options":null},"Misc\\Upside Down Mode":{"note":"","data":["800D0171 0001"],"options":null},"Misc\\Your Car Is Invisible":{"note":"","data":["801127A1 0001"],"options":null},"Mt. Dew Front Tire Size\\Player 1":{"note":"","data":["800C0B19 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Mt. Dew Rear Tire Size\\Player 1":{"note":"","data":["800C0C21 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Pickup Front Tire Size\\Player 2":{"note":"","data":["800C0B1D 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Press GS Activate Cheat Menu":{"note":"","data":["880C2132 0001"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D00D0193 0010","810F58DC 44CB","D00D0193 0010","810F5938 44CB"],"options":null},"Press R to Shrink Car":{"note":"","data":["D00D0193 0010","8010C43C 0001"],"options":null},"Prototype Front Tire Size\\Player 1":{"note":"","data":["800C0B11 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Prototype Rear Tire Size\\Player 1":{"note":"","data":["800C0C19 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Rear Pickup Tire Size\\Player 1":{"note":"","data":["800C0BCD 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Rear Tire Size\\Player 2":{"note":"","data":["800C0C25 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Rocket Front Tire Size\\Player 1":{"note":"","data":["800C0B15 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Rocket Rear Tire Size\\Player 1":{"note":"","data":["800C0C1D 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Total Points\\In Stunt Mode\\Player 1":{"note":"","data":["8010C075 00FF"],"options":null},"Total Points\\In Stunt Mode\\Player 2":{"note":"","data":["8010C077 00FF"],"options":null},"Track Modifier":{"note":"","data":["8010C3F0 00??"],"options":{"Alcatraz":"04","Crash":"08","Half Pipe":"07","Hawaii":"02","Las Vegas":"00","Los Angeles":"05","Midway":"0A","New York Downtown":"01","New York Uptown":"03","Pipe":"09","Seattle":"06","Stunt":"0B"}},"Unlock All Cheats":{"note":"","data":["50000E02 0000","810C20E8 0101"],"options":null},"Van Front Tire Size\\Player 1":{"note":"","data":["800C0AE5 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Van Rear Tire Size\\Player 1":{"note":"","data":["800C0BED 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}}},"EDF419A8-BF1904CC-C:45":{"Access All\\Cars":{"note":"","data":["8002CFF7 000B"],"options":null},"Access All\\Difficulties":{"note":"","data":["8002CFFB 0004"],"options":null},"Access All\\Multiplayer Levels":{"note":"","data":["50000901 0000","8002D000 0001"],"options":null},"Access All\\Tracks":{"note":"","data":["8002CFF3 0006"],"options":null},"Access In-Game Cheats":{"note":"","data":["50001301 0000","8002D008 0001"],"options":null},"Damage Select":{"note":"","data":["8002CD93 00??"],"options":{"Double":"02","Half":"01","Normal":"00","Triple":"03"}},"Health Select":{"note":"","data":["8002CD7F 00??"],"options":{"Bad Only":"02","Good Only":"01","Normal":"00","Off":"03"}},"Infinite Continues":{"note":"","data":["8002CC57 0064"],"options":null},"Low Timer":{"note":"","data":["81025DD4 1040"],"options":null},"Power-Up Select":{"note":"","data":["8002CD7B 00??"],"options":{"?":"05","Health":"06","Invincible":"07","Mines":"01","Nitros":"04","Normal":"00","Off":"08","Rockets":"02","Stealer":"03"}},"Radar":{"note":"","data":["8002CD8F 00??"],"options":{"Off":"01","On":"00"}},"Speed units\\Kph or Mph":{"note":"","data":["81025E68 ????"],"options":{"Kph":"0100","Mph":"0001"}},"View Mode Select?":{"note":"","data":["8002CD8B 00??"],"options":{"Fisheye":"03","Flip":"02","Fog":"01","Normal":"00"}},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\01 Coventry Cove":{"note":"","data":["80363DD3 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\02 Mount Mayhem":{"note":"","data":["80351E9B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\03 Inferno Isle":{"note":"","data":["80364633 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\04 Sunset Sands":{"note":"","data":["8033C91B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\05 Metro Madness":{"note":"","data":["8035E61B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\06 Wicked Woods":{"note":"","data":["80357F33 0064"],"options":null}},"EE4A0E33-8FD588C9-C:50":{"Always Have\\99 points":{"note":"","data":["80161EC1 0063"],"options":null},"Always first position":{"note":"","data":["801608D8 0001"],"options":null},"Only race one lap":{"note":"","data":["80161DF5 0001"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D01A3095 0010","811650E8 4077","D01A3095 0010","811650F0 4077"],"options":null}},"EE802DC4-690BD57D-C:4A":{"Bike Modifier\\Player 1":{"note":"","data":["8016BDF7 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 2":{"note":"","data":["8016BE43 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 3":{"note":"","data":["8016BE8F 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 4":{"note":"","data":["8016BEDB 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Infinite Primary Weapon\\Player 1":{"note":"","data":["801677B5 00C8"],"options":null},"Infinite Primary Weapon\\Player 2":{"note":"","data":["80167F25 00C8"],"options":null},"Infinite Primary Weapon\\Player 3":{"note":"","data":["80168695 00C8"],"options":null},"Infinite Primary Weapon\\Player 4":{"note":"","data":["80168E05 00C8"],"options":null},"Infinite Shields\\Player 1":{"note":"","data":["801677AD 00C8"],"options":null},"Infinite Shields\\Player 2":{"note":"","data":["80167F1D 00C8"],"options":null},"Infinite Shields\\Player 3":{"note":"","data":["8016868D 00C8"],"options":null},"Infinite Shields\\Player 4":{"note":"","data":["80168DFD 00C8"],"options":null},"Infinite Turbos\\Player 1":{"note":"","data":["80167783 0003","80167787 0003"],"options":null},"Infinite Turbos\\Player 2":{"note":"","data":["80167EF3 0003","80167EF7 0003"],"options":null},"Infinite Turbos\\Player 3":{"note":"","data":["80168663 0003","80168667 0003"],"options":null},"Infinite Turbos\\Player 4":{"note":"","data":["80168DD3 0003","80168DD7 0003"],"options":null},"Mode Select":{"note":"","data":["8009A11F 00??"],"options":{"Anti-Gravity":"08","Anti-Gravity \u0026 Fish Eye Lens":"0A","Boulder":"01","Boulder \u0026 Fish Eye Lens":"03","Boulder \u0026 Wireframe":"11","Fish Eye Lens":"02","Ghost Mode":"40","Magnify":"04","Stealth Mode":"20","Ugly Mode":"80","Wireframe":"10"}},"{All Tracks and Bonus Cars Unlocked}":{"note":"","data":["80198520 0008","50000264 0000","8016B903 0001","50000264 0000","8016BA2F 0001","50000564 0000","8016BB5B 0001","8016BDBB 0001","50000404 0000","8016BDC3 0001","80162B8B 0003","8016BDD3 0003"],"options":null}},"F00F2D4E-340FAAF4-C:45":{"Freeze Time at 02:00":{"note":"","data":["811C479E 1C40"],"options":null},"Have All Groups Completed":{"note":"This gives you all Cups for all Groups.","data":["50002801 0000","801C48DC 0002"],"options":null},"Have Everything Unlocked":{"note":"This will unlock Cars, Races, Missions and the in-built Cheat Menu. This will also replace all the Zombies with Dinosaurs. To access Cheat menu options: Pause Game: Use Control Stick, to scroll the Cheat Menu. Press A, to activate Cheats","data":["801C49BD 000F"],"options":null},"Have Infinite\\Free Repairs":{"note":"","data":["8109DEC4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Frozen Opponents":{"note":"","data":["8109DF24 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Grip-O-Matic Tires":{"note":"","data":["8109E05C ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Hot Rod":{"note":"","data":["8109DE64 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Invunerability":{"note":"","data":["8109DEAC ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Mega Turbo":{"note":"","data":["8109DE4C ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Mine Dropping Ability":{"note":"","data":["8009E119 ????"],"options":{"Off":"0000","On":"0064"}},"Have Infinite\\Turbo":{"note":"","data":["8109DE34 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Turbo Nitrous":{"note":"","data":["8109DE7C ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Underwater Ability":{"note":"","data":["8109DEF4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Max Credits":{"note":"This is also Infinite until disabled","data":["811C481B FFFF"],"options":null},"Max Kills":{"note":"This will automatically Clear the stage if enabled and go back to the stage menu","data":["8109AC46 012C"],"options":null}},"F03C24CA-C5237BCC-C:45":{"Aquadome\\Player 1\\Cant be Stunned":{"note":"","data":["801F1E3B 0000"],"options":null},"Aquadome\\Player 1\\Full Super Bar":{"note":"","data":["811F1E3A 0200"],"options":null},"Aquadome\\Player 1\\Infinite Energy":{"note":"","data":["801F1E33 00AA"],"options":null},"Aquadome\\Player 1\\No Energy":{"note":"","data":["801F1E33 0000"],"options":null},"Aquadome\\Player 2\\Cant be Stunned":{"note":"","data":["801F52CB 0000"],"options":null},"Aquadome\\Player 2\\Full Super Bar":{"note":"","data":["811F52DA 0200"],"options":null},"Aquadome\\Player 2\\Infinite Energy":{"note":"","data":["801F52D3 00AA"],"options":null},"Aquadome\\Player 2\\No Energy":{"note":"","data":["801F52D3 0000"],"options":null},"Backwash Bay\\Player 1\\Cant be Stunned":{"note":"","data":["801F258B 0000"],"options":null},"Backwash Bay\\Player 1\\Full Super Bar":{"note":"","data":["811F259A 0200"],"options":null},"Backwash Bay\\Player 1\\Infinite Energy":{"note":"","data":["801F2593 00AA"],"options":null},"Backwash Bay\\Player 1\\No Energy":{"note":"","data":["801F2593 0000"],"options":null},"Backwash Bay\\Player 2\\Cant be Stunned":{"note":"","data":["801F5A2B 0000"],"options":null},"Backwash Bay\\Player 2\\Full Super Bar":{"note":"","data":["811F5A3A 0200"],"options":null},"Backwash Bay\\Player 2\\Infinite Energy":{"note":"","data":["801F5A33 00AA"],"options":null},"Backwash Bay\\Player 2\\No Energy":{"note":"","data":["801F5A33 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Cant be Stunned":{"note":"","data":["801F2FDB 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Full Super Bar":{"note":"","data":["811F2FEA 0200"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Infinite Energy":{"note":"","data":["801F2FE3 00AA"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\No Energy":{"note":"","data":["801F2FE3 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Cant be Stunned":{"note":"","data":["801F647B 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Full Super Bar":{"note":"","data":["811F648A 0200"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Infinite Energy":{"note":"","data":["801F6483 00AA"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\No Energy":{"note":"","data":["801F6483 0000"],"options":null},"Candy Factory\\Player 1\\Cant be Stunned":{"note":"","data":["801F270B 0000"],"options":null},"Candy Factory\\Player 1\\Full Super Bar":{"note":"","data":["811F271A 0200"],"options":null},"Candy Factory\\Player 1\\Infinite Energy":{"note":"","data":["801F2713 00AA"],"options":null},"Candy Factory\\Player 1\\No Energy":{"note":"","data":["801F2713 0000"],"options":null},"Candy Factory\\Player 2\\Cant be Stunned":{"note":"","data":["801F5BAB 0000"],"options":null},"Candy Factory\\Player 2\\Full Super Bar":{"note":"","data":["811F5BBA 0200"],"options":null},"Candy Factory\\Player 2\\Infinite Energy":{"note":"","data":["801F5BB3 00AA"],"options":null},"Candy Factory\\Player 2\\No Energy":{"note":"","data":["801F5BB3 0000"],"options":null},"Clayribbean Cruise\\Player 1\\Cant be Stunned":{"note":"","data":["801F24FB 0000"],"options":null},"Clayribbean Cruise\\Player 1\\Full Super Bar":{"note":"","data":["811F250A 0200"],"options":null},"Clayribbean Cruise\\Player 1\\Infinite Energy":{"note":"","data":["801F2503 00AA"],"options":null},"Clayribbean Cruise\\Player 1\\No Energy":{"note":"","data":["801F2503 0000"],"options":null},"Clayribbean Cruise\\Player 2\\Cant be Stunned":{"note":"","data":["801F599B 0000"],"options":null},"Clayribbean Cruise\\Player 2\\Full Super Bar":{"note":"","data":["811F59AA 0200"],"options":null},"Clayribbean Cruise\\Player 2\\Infinite Energy":{"note":"","data":["801F59A3 00AA"],"options":null},"Clayribbean Cruise\\Player 2\\No Energy":{"note":"","data":["801F59A3 0000"],"options":null},"Extra Characters/Secret Options":{"note":"","data":["801A2B41 000F"],"options":null},"Freezing Fortress\\Player 1\\Cant be Stunned":{"note":"","data":["801F239B 0000"],"options":null},"Freezing Fortress\\Player 1\\Full Super Bar":{"note":"","data":["811F23AA 0200"],"options":null},"Freezing Fortress\\Player 1\\Infinite Energy":{"note":"","data":["801F23A3 00AA"],"options":null},"Freezing Fortress\\Player 1\\No Energy":{"note":"","data":["801F23A3 0000"],"options":null},"Freezing Fortress\\Player 2\\Cant be Stunned":{"note":"","data":["801F583B 0000"],"options":null},"Freezing Fortress\\Player 2\\Full Super Bar":{"note":"","data":["811F584A 0200"],"options":null},"Freezing Fortress\\Player 2\\Infinite Energy":{"note":"","data":["801F5843 00AA"],"options":null},"Freezing Fortress\\Player 2\\No Energy":{"note":"","data":["801F5843 0000"],"options":null},"Ghastly Graveyard\\Player 1\\Cant be Stunned":{"note":"","data":["801F262B 0000"],"options":null},"Ghastly Graveyard\\Player 1\\Full Super Bar":{"note":"","data":["811F263A 0200"],"options":null},"Ghastly Graveyard\\Player 1\\Infinite Energy":{"note":"","data":["801F2633 00AA"],"options":null},"Ghastly Graveyard\\Player 1\\No Energy":{"note":"","data":["801F2633 0000"],"options":null},"Ghastly Graveyard\\Player 2\\Cant be Stunned":{"note":"","data":["801F5ACB 0000"],"options":null},"Ghastly Graveyard\\Player 2\\Full Super Bar":{"note":"","data":["811F5ADA 0200"],"options":null},"Ghastly Graveyard\\Player 2\\Infinite Energy":{"note":"","data":["801F5AD3 00AA"],"options":null},"Ghastly Graveyard\\Player 2\\No Energy":{"note":"","data":["801F5AD3 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 1\\Cant be Stunned":{"note":"","data":["801F244B 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 1\\Full Super Bar":{"note":"","data":["811F245A 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 1\\Infinite Energy":{"note":"","data":["801F2453 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 1\\No Energy":{"note":"","data":["801F2453 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 2\\Cant be Stunned":{"note":"","data":["801F58EB 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 2\\Full Super Bar":{"note":"","data":["811F58FA 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 2\\Infinite Energy":{"note":"","data":["801F58F3 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 2\\No Energy":{"note":"","data":["801F58F3 0000"],"options":null},"Infinite Time To Choose Your Fighter":{"note":"","data":["81200BEC 03A7"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 1\\Cant be Stunned":{"note":"","data":["801F3BBB 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 1\\Full Super Bar":{"note":"","data":["811F3BCA 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 1\\Infinite Energy":{"note":"","data":["801F3BC3 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 1\\No Energy":{"note":"","data":["801F3BC3 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 2\\Cant be Stunned":{"note":"","data":["801F705B 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 2\\Full Super Bar":{"note":"","data":["811F706A 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 2\\Infinite Energy":{"note":"","data":["801F7063 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 2\\No Energy":{"note":"","data":["801F7063 0000"],"options":null},"Kooky Courtyard\\Player 1\\Cant be Stunned":{"note":"","data":["801F280B 0000"],"options":null},"Kooky Courtyard\\Player 1\\Full Super Bar":{"note":"","data":["811F281A 0200"],"options":null},"Kooky Courtyard\\Player 1\\Infinite Energy":{"note":"","data":["801F2813 00AA"],"options":null},"Kooky Courtyard\\Player 1\\No Energy":{"note":"","data":["801F2813 0000"],"options":null},"Kooky Courtyard\\Player 2\\Cant be Stunned":{"note":"","data":["801F5CAB 0000"],"options":null},"Kooky Courtyard\\Player 2\\Full Super Bar":{"note":"","data":["811F5CBA 0200"],"options":null},"Kooky Courtyard\\Player 2\\Infinite Energy":{"note":"","data":["801F5CB3 00AA"],"options":null},"Kooky Courtyard\\Player 2\\No Energy":{"note":"","data":["801F5CB3 0000"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 1\\Cant be Stunned":{"note":"","data":["801F233B 0000"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 1\\Full Super Bar":{"note":"","data":["811F234A 0200"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 1\\Infinite Energy":{"note":"","data":["801F2343 00AA"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 1\\No Energy":{"note":"","data":["801F2343 0000"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 2\\Cant be Stunned":{"note":"","data":["801F57DB 0000"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 2\\Full Super Bar":{"note":"","data":["811F57EA 0200"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 2\\Infinite Energy":{"note":"","data":["801F57E3 00AA"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 2\\No Energy":{"note":"","data":["801F57E3 0000"],"options":null},"Player 1 Character Modifier":{"note":"","data":["801A2B2F 00??"],"options":{"Blob":"01","Bonker":"02","Boogerman":"03","Dr. Kiln":"04","Earthworm Jim":"05","Houngan":"08","Icky Bod Clay":"09","Kung Pow":"0A","Sumo Santa":"0D","T-Hoppy":"0F","Taffy":"0E"}},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 1\\Cant be Stunned":{"note":"","data":["801F1B0B 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 1\\Full Super Bar":{"note":"","data":["811F1B1A 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 1\\Infinite Energy":{"note":"","data":["801F1B13 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 1\\No Energy":{"note":"","data":["801F1B13 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 2\\Cant be Stunned":{"note":"","data":["801F4FAB 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 2\\Full Super Bar":{"note":"","data":["811F4FBA 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 2\\Infinite Energy":{"note":"","data":["801F4FB3 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 2\\No Energy":{"note":"","data":["801F4FB3 0000"],"options":null},"Rubbage Reef\\Player 1\\Cant be Stunned":{"note":"","data":["801F241B 0000"],"options":null},"Rubbage Reef\\Player 1\\Full Super Bar":{"note":"","data":["811F242A 0200"],"options":null},"Rubbage Reef\\Player 1\\Infinite Energy":{"note":"","data":["801F2423 00AA"],"options":null},"Rubbage Reef\\Player 1\\No Energy":{"note":"","data":["801F2423 0000"],"options":null},"Rubbage Reef\\Player 2\\Cant be Stunned":{"note":"","data":["801F58BB 0000"],"options":null},"Rubbage Reef\\Player 2\\Full Super Bar":{"note":"","data":["811F58CA 0200"],"options":null},"Rubbage Reef\\Player 2\\Infinite Energy":{"note":"","data":["801F58C3 00AA"],"options":null},"Rubbage Reef\\Player 2\\No Energy":{"note":"","data":["801F58C3 0000"],"options":null},"Rubbage Room\\Player 1\\Cant be Stunned":{"note":"","data":["801F464B 0000"],"options":null},"Rubbage Room\\Player 1\\Full Super Bar":{"note":"","data":["811F465A 0200"],"options":null},"Rubbage Room\\Player 1\\Infinite Energy":{"note":"","data":["801F4653 00AA"],"options":null},"Rubbage Room\\Player 1\\No Energy":{"note":"","data":["801F4653 0000"],"options":null},"Rubbage Room\\Player 2\\Cant be Stunned":{"note":"","data":["801F7AEB 0000"],"options":null},"Rubbage Room\\Player 2\\Full Super Bar":{"note":"","data":["811F7AFA 0200"],"options":null},"Rubbage Room\\Player 2\\Infinite Energy":{"note":"","data":["801F7AF3 00AA"],"options":null},"Rubbage Room\\Player 2\\No Energy":{"note":"","data":["801F7AF3 0000"],"options":null},"Santa's Toy Factory\\Player 1\\Cant be Stunned":{"note":"","data":["801F2C3B 0000"],"options":null},"Santa's Toy Factory\\Player 1\\Full Super Bar":{"note":"","data":["811F2C4A 0200"],"options":null},"Santa's Toy Factory\\Player 1\\Infinite Energy":{"note":"","data":["801F2C43 00AA"],"options":null},"Santa's Toy Factory\\Player 1\\No Energy":{"note":"","data":["801F2C43 0000"],"options":null},"Santa's Toy Factory\\Player 2\\Cant be Stunned":{"note":"","data":["801F60DB 0000"],"options":null},"Santa's Toy Factory\\Player 2\\Full Super Bar":{"note":"","data":["811F60EA 0200"],"options":null},"Santa's Toy Factory\\Player 2\\Infinite Energy":{"note":"","data":["801F60E3 00AA"],"options":null},"Santa's Toy Factory\\Player 2\\No Energy":{"note":"","data":["801F60E3 0000"],"options":null},"Stage Modifier":{"note":"","data":["801A2B2B 00??"],"options":{"Aquadome":"19","Backwash Bay":"16","Boogerhenge":"15","Camp Claynaveral":"02","Candy Factory":"00","Claynaveral Hangar":"01","Clayribbean Cruise":"11","Fiery Furnace":"0F","Freezing Fortress":"08","Ghastly Graveyard":"05","Grotto Gulch":"0A","Happy Harry's Hut":"07","Kiln's Hideout":"0E","Kiln's Laboratory":"0D","Kooky Courtyard":"13","Mudville Mansion":"04","Outhouse":"03","Refuse Room":"09","Research Room":"10","Rubbage Reef":"0C","Rubbage Room":"0B","Santa's Toy Factory":"14","Santa's Workship":"12","Spooky Spire":"06","Tribal Tower":"18","Tureen Toilet":"17"}},"Tribal Tower\\Player 1\\Cant be Stunned":{"note":"","data":["801F1BAB 0000"],"options":null},"Tribal Tower\\Player 1\\Full Super Bar":{"note":"","data":["811F1BBA 0200"],"options":null},"Tribal Tower\\Player 1\\Infinite Energy":{"note":"","data":["801F1BB3 00AA"],"options":null},"Tribal Tower\\Player 1\\No Energy":{"note":"","data":["801F1BB3 0000"],"options":null},"Tribal Tower\\Player 2\\Cant be Stunned":{"note":"","data":["801F504B 0000"],"options":null},"Tribal Tower\\Player 2\\Full Super Bar":{"note":"","data":["811F505A 0200"],"options":null},"Tribal Tower\\Player 2\\Infinite Energy":{"note":"","data":["801F5053 00AA"],"options":null},"Tribal Tower\\Player 2\\No Energy":{"note":"","data":["801F5053 0000"],"options":null}},"F050746C-247B820B-C:45":{"Access\\All Bikes \u0026 Tracks":{"note":"","data":["800A77D5 0063"],"options":null},"Access\\Infinite \u0026 All Weapons":{"note":"","data":["50000E02 0000","811B8D7A 0505"],"options":null},"Always 1st":{"note":"","data":["810D7856 0000"],"options":null},"Always Have\\Max Cash":{"note":"","data":["810D6A7A FFFF"],"options":null},"Always Have\\Weapon":{"note":"","data":["801C00B3 00??"],"options":{"Bace":"0C","Banana":"09","Bat":"04","Billie Club":"05","Cattle Prod":"0A","Chain":"0E","Fists":"01","Monkey Wrench":"08","Nunchuk":"0D","Pool Cue":"07","Sledge Hammer":"06","Spiked Club":"02","Taser":"0B","Tiring Iron":"03"}},"Infinite\\Damage":{"note":"","data":["801C0D17 0002"],"options":null},"Infinite\\Health\\To Bike":{"note":"","data":["811B8A38 42F0","811B8A3C 42F0"],"options":null},"Infinite\\Health\\To Character":{"note":"","data":["811BFE10 4489","811BFE12 8000"],"options":null}},"F1850C35-ACE07912-C:45":{"Always Place 1st":{"note":"","data":["802083F1 0001"],"options":null},"Infinite\\Lives":{"note":"","data":["800BAFD2 0009"],"options":null},"Infinite\\Specials On Pickup":{"note":"","data":["80208401 0005"],"options":null}},"F255D6F1-B65D6728-C:4A":{"Access All Boards \u0026 Characters":{"note":"","data":["800500C1 000C"],"options":null},"All Street Work Levels Unlocked":{"note":"","data":["50007801 0000","80050170 00??"],"options":{"Courses unlocked":"01","Courses unlocked with A rank":"05","Courses unlocked with B rank":"04","Courses unlocked with C rank":"03","Courses unlocked with S rank":"06"}},"Class Score Select":{"note":"","data":["8016609E 00??"],"options":{"Class A":"64","Class B":"40","Class C":"20","Class S":"FF"}},"Coin Perfect Select":{"note":"this is for Coin Mode to get Perfect Coin Collection Score straight away when you enter the level","data":["801660B3 00??"],"options":{"Giant House Level 1":"6E","Giant House Level 2":"77","Giant House Level 3":"72","Green Park Level 1":"14","Green park Level 2":"1A","Green park Level 3":"2B","Lost Forest Level 1":"4A","Lost Forest Level 2":"59","Lost Forest Level 3":"80","Snow Festival 64 Levels 1 2 \u0026 3":"7D","Sunset Island Level 1":"6F","Sunset Island Level 2":"74","Sunset Island Level 3":"81"}},"Infinite Time\\Attack Time Time 000000":{"note":"","data":["811137EA 0000"],"options":null},"Infinite Time\\Street Work \u0026 Coin":{"note":"","data":["801137E9 0028"],"options":null},"Infinite Time\\Time Attack":{"note":"","data":["801137EB 0000"],"options":null},"Infinite Turbo\\Player 1":{"note":"","data":["80166019 0009"],"options":null},"Infinite Turbo\\Player2":{"note":"","data":["80167991 0009"],"options":null},"Maxed Out Turbo Bar":{"note":"","data":["811656E8 429F","80166017 0051"],"options":null},"Options\\Camera Type Modifier":{"note":"","data":["810500A6 00??"],"options":{"Roll Off Far":"05","Roll Off Mid":"04","Roll Off Near":"03","Roll On Far":"02","Roll On Mid":"01","Roll On Near":"00"}},"Options\\DJ Function Modifier":{"note":"","data":["810500AC 00??"],"options":{"DJ Function Off":"00","DJ Function On":"01"}},"Options\\Music Modifier":{"note":"","data":["800500A9 00??"],"options":{"BGM Off":"00","BGM On":"FF"}},"Options\\Sound Effects Modifier":{"note":"","data":["810500AA 00??"],"options":{"SE Off":"00","SE On":"FF"}}},"F2A653CB-60633B3B-C:45":{"Found All Letters":{"note":"","data":["810ACBA2 000C"],"options":null},"Have No Letters":{"note":"Keep you kid busy for hours!!!","data":["810ACBA2 0000"],"options":null},"Infinite Strikes":{"note":"","data":["810A760A 0000"],"options":null}},"F35D5335-B7667CB7-C:45":{"Have All Items":{"note":"","data":["50000501 0000","80389C4A 0001","50000301 0000","80389C51 0001","80389C5A 0001","80389C5B 0001","80389C5D 0001","50000E01 0000","80389C60 0001"],"options":null},"Have Exp Points":{"note":"","data":["80389C49 0063"],"options":null},"Have Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C3F 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C45 0001","81389C46 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C3E 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C49 0063"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C48 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the F9 button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C90 ????","89389C92 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CED 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C88 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C88 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C3D 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C42 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"F35D5F95-8AFE3D69-C:45":{"Have All Items":{"note":"","data":["50000501 0000","80389C4A 0001","50000301 0000","80389C51 0001","80389C5A 0001","80389C5B 0001","80389C5D 0001","50000E01 0000","80389C60 0001"],"options":null},"Have Exp Points":{"note":"","data":["80389C49 0063"],"options":null},"Have Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C3F 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C45 0001","81389C46 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C3E 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C49 0063"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C48 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the GS button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C90 ????","89389C92 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CED 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C88 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C88 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C3D 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C42 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"F3C5BF9B-160F33E2-C:45":{"All Masks":{"note":"Press GS To Activate All Masks","data":["891F1210 8780"],"options":null},"Have All\\Crates":{"note":"","data":["810C70F8 7FFF","810C70FA FFFF","810C70FC FFFF","810C70FE FFFF","810C7100 FFFF","800C7102 00FF"],"options":null},"Have All\\Levels":{"note":"","data":["811F1200 FFFF","811F1202 FFFF","811F1201 03E7","811F1203 03E7"],"options":null},"Have All\\Pirate Cages":{"note":"","data":["801F1142 0050","811F11F0 FFFF","811F11F2 FFFF","811F11F4 FFFF","811F11F6 FFFF","811F11F8 00FF","811F11FA FFFF"],"options":null},"Have All\\Yellow Lums":{"note":"","data":["50006401 0000","800C7108 00FF","50001901 0000","800C70BD 00FF","811F1182 0005","50005702 0000","811F1188 FFFF"],"options":null},"Infinite\\Oxygen":{"note":"","data":["810F4B90 4396"],"options":null},"Open Map":{"note":"","data":["810C70F0 FFFF","810C70F2 FFFF"],"options":null},"Start with Full Health":{"note":"","data":["811BC64C 001E"],"options":null}},"F41B6343-C10661E6-C:50":{"Away Team Scores":{"note":"","data":["801A9579 00??"],"options":{"0 Goal":"00","1 Goal":"01","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08"}},"Home Team Scores":{"note":"","data":["801A86FD 00??"],"options":{"0 Goal":"00","1 Goal":"01","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08"}},"Infinite player creation points":{"note":"","data":["D03E0CF2 0001","803E0CF2 0063"],"options":null}},"F478D8B3-9716DD6D-C:50":{"Cheat Select":{"note":"","data":["8109ACBE ????"],"options":{"All Of The Above":"0FFF","All Pick-Ups Are Grapple":"0040","All Pick-Ups Are Green":"0010","All Pick-Ups Are Red":"0004","All Pick-Ups Are Yellow":"0008","Maintain Speed Off Track":"0001","No Chassis":"0400","No Driver":"0800","No Wheels":"0200","Pick-Ups Are Maximum":"0080","Reversed Rocket Racer Run Track":"0020","Rocket Cars":"0002","Turbo Mode":"0100"}},"Have All Tracks and Building Pieces":{"note":"","data":["812576D4 FFFF","812576D6 FFFF"],"options":null}},"F4CBE92C-B392ED12-C:50":{"999 Kills":{"note":"","data":["80163BFF 0040","80163C01 0040"],"options":null},"Have All Medals":{"note":"","data":["50001801 0000","8017A9D8 0006"],"options":null},"Infinite\\Armor\\Falco":{"note":"","data":["80174187 00FF"],"options":null},"Infinite\\Armor\\Peppy":{"note":"","data":["8017418F 00FF"],"options":null},"Infinite\\Armor\\Slippy":{"note":"","data":["8017418B 00FF"],"options":null},"Infinite\\Dual Blue Lasers":{"note":"","data":["81163C13 0002"],"options":null},"Infinite\\Energy (Except Fox))":{"note":"","data":["80179A27 00FF","80179A23 00FF","80179A1F 00FF"],"options":null},"Infinite\\Hyper Laser":{"note":"","data":["81163C13 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["80163C09 0063"],"options":null},"Level Select":{"note":"","data":["8017A39F 00??"],"options":{"Aquas":"0D","Area 6":"03","Bolse":"11","Corneria":"00","Corneria (Multi)":"14","Fortuna":"0E","Glitch":"04","Katina":"10","Macbeth":"0B","Meteo":"01","Sector X":"02","Sector Y":"05","Sector Z":"12","Solar":"07","Titania":"0C","Training Mode Level":"0A","Venom 1":"06","Venom 2":"09","Venom With Starwolf":"13","Zoness":"08"}},"Loads O' Hits":{"note":"","data":["80163C03 00FF"],"options":null},"Unlimited\\Boost\\Player 1":{"note":"","data":["8113E6FC 0000","8113E6FE 0000","811415DC 0000","811415DE 0000"],"options":null},"Unlimited\\Smart Bombs":{"note":"","data":["80179F0B 0063"],"options":null}},"F5237301-99E3EE93-C:50":{"1000 Garibs":{"note":"","data":["80291297 0064"],"options":null},"All levels unlocked":{"note":"At the main menu, where it says: Start, practice, options, \u0026 time trial, hold D-pad up, then the glove, playing-with-the-ball icon, will jump down into the lower left corner of the screen, then press the A button, and a level select screen will be available with all ordinary and boss levels, etc. available","data":["80298CFD 00A0"],"options":null},"Cheat Modifier\\1":{"note":"","data":["80298CFE 00??"],"options":{"Big ball":"02","Both of the above":"03","Low gravity":"01"}},"Cheat Modifier\\2":{"note":"","data":["80298CFF 00??"],"options":{"All of the above":"7B","Call ball":"02","Control ball":"20","Infinite energy":"40","Locate caribs":"01","Power ball":"10","Unlimited lives":"08"}},"Have Spell\\Death Spell":{"note":"","data":["812912A8 03E8"],"options":null},"Have Spell\\Enlarge Spell":{"note":"","data":["812912B4 03E8"],"options":null},"Have Spell\\Speed Up Spell":{"note":"","data":["812912B8 03E8"],"options":null},"Have Spell\\Sticky Fingers Spell":{"note":"","data":["812912B2 03E8"],"options":null},"Infinite\\99 Lives":{"note":"","data":["8029129B 0063"],"options":null},"Infinite\\Energy":{"note":"","data":["8029129F 0003"],"options":null},"Super Jump":{"note":"","data":["D02AFA14 0080","801EE771 0013"],"options":null},"[100% Complete]\\Save Slot 1":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBA37 0007","50000801 0000","801EBA28 00FF"],"options":null},"[100% Complete]\\Save Slot 2":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBA53 0007","50000801 0000","801EBA44 00FF"],"options":null},"[100% Complete]\\Save Slot 3":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBA6F 0007","50000801 0000","801EBA60 00FF"],"options":null},"[100% Complete]\\Save Slot 4":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBA8B 0007","50000801 0000","801EBA7C 00FF"],"options":null},"[100% Complete]\\Save Slot 5":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBAA7 0007","50000801 0000","801EBA98 00FF"],"options":null},"[100% Complete]\\Save Slot 6":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBAC3 0007","50000801 0000","801EBAB4 00FF"],"options":null}},"F5360FBE-2BF1691D-C:50":{"Access\\Always have Big Laser":{"note":"Use only one of these codes at a time!","data":["802F706F FFFF"],"options":null},"Access\\Enemy Health Modifer attach Activator":{"note":"Use only one of these codes at a time!","data":["812F7062 03E8"],"options":null},"Access\\Full Energy for Lazer":{"note":"Use only one of these codes at a time!","data":["812F706E 0064"],"options":null},"Access\\Gold Helmet":{"note":"Use only one of these codes at a time!","data":["8015D2F7 0003"],"options":null},"Access\\Infinite Health":{"note":"Use only one of these codes at a time!","data":["802F706A 0999"],"options":null},"Access\\Infinite Impact Oil":{"note":"Use only one of these codes at a time!","data":["812F706A 0154"],"options":null},"Access\\Infinite Ryo Impact Fighting":{"note":"Use only one of these codes at a time!","data":["812F7066 0005"],"options":null},"Access\\Infinite Ryo Impact Running":{"note":"Use only one of these codes at a time!","data":["812F70EA 270F"],"options":null},"Access\\Infy Ryo":{"note":"Use only one of these codes at a time!","data":["802F7667 0999"],"options":null},"Access\\Japanese Sombrero":{"note":"Use only one of these codes at a time!","data":["8015D2F7 0001"],"options":null},"Access\\Metal Helmet":{"note":"Use only one of these codes at a time!","data":["8015D2F7 0002"],"options":null},"Access\\Move Lock":{"note":"","data":["8116AE6A 0000","8120D84A 0000"],"options":null},"Access\\Mystical Ninja Skating team":{"note":"","data":["8120D620 4E20","8120DEF4 4E20","8116AE78 4E20"],"options":null},"Access\\Skating Team V2":{"note":"","data":["8120D620 4E20","8120DEF4 4E20","8116AE78 4E20","8116AE6A 0001","8120D84A 0001"],"options":null},"Have\\Bazooka":{"note":"","data":["8015D3CB 0001"],"options":null},"Have\\Blue Item":{"note":"","data":["8015D422 0001"],"options":null},"Have\\Blue Sausage":{"note":"","data":["8015D417 0001"],"options":null},"Have\\Brown Item":{"note":"","data":["8015D402 0001"],"options":null},"Have\\Brown Round Item":{"note":"","data":["8015D40F 0001"],"options":null},"Have\\Chain Pipe":{"note":"","data":["8015D3BF 0002"],"options":null},"Have\\Ebisumaru":{"note":"","data":["8015D3A3 0001"],"options":null},"Have\\Fire Cracker Bomb":{"note":"","data":["8015D3C4 0001"],"options":null},"Have\\Flute":{"note":"","data":["8015D3DB 0001"],"options":null},"Have\\Gold Item":{"note":"","data":["8015D41C 0001"],"options":null},"Have\\Gold Key":{"note":"","data":["8015D412 0001"],"options":null},"Have\\Kunai of Severe Cold":{"note":"","data":["8015D3D4 0001"],"options":null},"Have\\Magic Flying":{"note":"","data":["8015D3F4 0001"],"options":null},"Have\\Magic Mermaid":{"note":"","data":["8015D3FB 0001"],"options":null},"Have\\Magic Mini Ebisu":{"note":"","data":["8015D3F2 0001"],"options":null},"Have\\Magic Sudden Impact":{"note":"","data":["8015D3EC 0001"],"options":null},"Have\\Meat Saw Hammer":{"note":"","data":["8015D3C0 0001"],"options":null},"Have\\Medal of Flames":{"note":"","data":["8015D3DF 0001"],"options":null},"Have\\Pink Item":{"note":"","data":["8015D41B 0001"],"options":null},"Have\\Sasuke Character":{"note":"","data":["8015D3A4 0001"],"options":null},"Have\\Shell":{"note":"","data":["8015D3FC 0001"],"options":null},"Have\\Yae Character":{"note":"","data":["8015D3AB 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8015D2E7 0028"],"options":null},"Infinite\\Lives":{"note":"","data":["8015D2EF 000A"],"options":null},"Infinite\\Ryo":{"note":"","data":["8015D2EA 0010"],"options":null},"Keep Blue Fish":{"note":"","data":["8015D303 0003","50000404 0000","8015D2F3 0003"],"options":null}},"F5363349-DBF9D21B-C:45":{"Have Extra Characters (Gouriki \u0026 Reiji)":{"note":"","data":["8009E3DF 00FF"],"options":null},"Player 1\\Character Modifier":{"note":"","data":["80105001 00??"],"options":{"Azami":"00","Gouriki":"08","Hikari":"0B","Invisible Fighter":"0C","Kai":"03","Kaoru":"07","Kengon":"05","Kyeya":"06","Miki":"02","Reiji":"09","Sakai":"04","Serina":"01","Yami":"0A"}},"Player 1\\Infinite Energy":{"note":"","data":["81105026 03E8"],"options":null},"Player 1\\Needs 1 Round to Win":{"note":"","data":["D009E3F4 0000","8009E3F4 0001"],"options":null},"Player 1\\Never Wins":{"note":"","data":["8009E3F4 0000"],"options":null},"Player 1\\No Energy":{"note":"","data":["81105026 0000"],"options":null},"Player 2\\Character Modifier":{"note":"","data":["8011B399 00??"],"options":{"Azami":"00","Gouriki":"08","Hikari":"0B","Invisible Fighter":"0C","Kai":"03","Kaoru":"07","Kengon":"05","Kyeya":"06","Miki":"02","Reiji":"09","Sakai":"04","Serina":"01","Yami":"0A"}},"Player 2\\Infinite Energy":{"note":"","data":["8111B3BE 03E8"],"options":null},"Player 2\\Needs 1 Round to Win":{"note":"","data":["D009E3F5 0000","8009E3F5 0001"],"options":null},"Player 2\\No Energy":{"note":"","data":["8111B3BE 0000"],"options":null},"Player 2\\P2 Never Wins":{"note":"","data":["8009E3F5 0000"],"options":null}},"F568D51E-7E49BA1E-C:45":{"Carry 20 Bombs At A Time":{"note":"","data":["800AEE0F 0014"],"options":null},"Have\\Pumped up Red Remote Bombs":{"note":"","data":["802AC653 0004"],"options":null},"Infinite\\Credits":{"note":"","data":["802AC62B 0009"],"options":null},"Infinite\\Energy\\Player 1":{"note":"","data":["800AEE07 0002"],"options":null},"Infinite\\Energy\\Player 2":{"note":"","data":["800AEECF 0002"],"options":null},"Infinite\\Energy\\Player 3":{"note":"","data":["800AEF97 0002"],"options":null},"Infinite\\Energy\\Player 4":{"note":"","data":["800AF05F 0002"],"options":null},"Infinite\\Gems":{"note":"","data":["802AC62F 0063"],"options":null},"Infinite\\Lives":{"note":"","data":["802AC627 0063"],"options":null},"Infinite\\Time":{"note":"","data":["802AC643 0001"],"options":null},"Invincible\\Player 1":{"note":"","data":["800AEE01 0001"],"options":null}},"F5C5866D-052713D9-C:45":{"All Characters\\Have Max\\Acceleration\\Player 1":{"note":"","data":["50000C0A 0000","80197FF6 0064"],"options":null},"All Characters\\Have Max\\Acceleration\\Player 2":{"note":"","data":["5000120A 0000","801980AA 0064"],"options":null},"All Characters\\Have Max\\Armor\\Player 1":{"note":"","data":["5000120A 0000","80197FF8 0064"],"options":null},"All Characters\\Have Max\\Armor\\Player 2":{"note":"","data":["5000120A 0000","801980AC 0064"],"options":null},"All Characters\\Have Max\\Attributes\\Player 1":{"note":"","data":["5000120A 0000","81197FF6 6464","5000120A 0000","81197FF8 6464"],"options":null},"All Characters\\Have Max\\Attributes\\Player 2":{"note":"","data":["5000120A 0000","811980AA 6464","5000120A 0000","811980AC 6464"],"options":null},"All Characters\\Have Max\\Speed\\Player 1":{"note":"","data":["5000120A 0000","80197FF7 0064"],"options":null},"All Characters\\Have Max\\Speed\\Player 2":{"note":"","data":["5000120A 0000","801980AB 0064"],"options":null},"All Characters\\Have Max\\Target Avoidance\\Player 1":{"note":"","data":["5000120A 0000","80197FF9 0064"],"options":null},"All Characters\\Have Max\\Target Avoidance\\Player 2":{"note":"","data":["5000120A 0000","801980AD 0064"],"options":null},"All Quests Complete\\Player 1":{"note":"","data":["5000120A 0000","81197FF0 01FF"],"options":null},"All Quests Complete\\Player 2":{"note":"","data":["5000120A 0000","811980A4 01FF"],"options":null}},"F63B89CE-4582D57D-C:49":{"Always Have\\50 pieces of corn":{"note":"","data":["801E2761 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E2750 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["811E274E 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E2762 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E2755 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E2760 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D008FFA1 0010","811E26C6 1000","D008FFA1 0010","811E26D6 1000"],"options":null},"No Music":{"note":"","data":["801DD906 0000"],"options":null},"Start with Berry Weapon":{"note":"","data":["801E2757 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Subtitles On":{"note":"","data":["801DDB7B 00??"],"options":{"Off":"00","On":"01"}},"Unlock All Levels":{"note":"","data":["81099E30 000F"],"options":null}},"F7FE28F6-C3F2ACC3-C:45":{"Cheat Menu":{"note":"","data":["80336593 0001"],"options":null},"Infinite Credits":{"note":"","data":["81336582 0005","8133658E 0004"],"options":null},"Unlimited Time":{"note":"","data":["8033F31B 0063"],"options":null}},"F82DD377-8C3FB347-C:58":{"100.000 Sponsor Credits \u0026 950 Championship Points In Support Van":{"note":"You Also Have Access To All Cars, Tracks \u0026 Extra Features","data":["80031433 00F3"],"options":null},"Always 1st":{"note":"","data":["80031F93 0001"],"options":null},"Freeze Timer":{"note":"","data":["80031F9F 0000"],"options":null},"Infinite Cash":{"note":"","data":["803A418E 4000"],"options":null},"Max Sponsor Credits":{"note":"","data":["803A6702 0010","803A6704 0001"],"options":null},"No Cones Hit":{"note":"In ARSG Rally School","data":["80031FC3 0000","8003239B 0000"],"options":null},"No Damage Or Failures":{"note":"","data":["80031427 0001"],"options":null},"No Navigator":{"note":"","data":["80031EF7 0000"],"options":null}},"F908CA4C-36464327-C:45":{"Player 1\\1-Hit Death":{"note":"","data":["D01D3484 0078","801D3484 0001"],"options":null},"Player 1\\Fast\\Jump Walk":{"note":"","data":["801D347C 0001"],"options":null},"Player 1\\Fast\\Punch Kick":{"note":"","data":["801D347E 0010"],"options":null},"Player 1\\Fight Gargos Immediately":{"note":"","data":["8012834B 000A"],"options":null},"Player 1\\Fulgore\\Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3478 0020","801D3479 0090","801D34C5 0092","801D3527 005E"],"options":null},"Player 1\\Fulgore\\Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3478 0023","801D3479 00F0","801D34C5 0080","801D3527 00AF"],"options":null},"Player 1\\Infinite Energy":{"note":"","data":["801D3484 0069"],"options":null},"Player 1\\Play As":{"note":"","data":["802C8CB8 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 1\\Slow Jump Walk":{"note":"","data":["801D347D 0050"],"options":null},"Player 1\\Spinal Always Has All Skulls":{"note":"","data":["801D3523 0006"],"options":null},"Player 1\\Undefeated Players Scroll By Quickly":{"note":"","data":["802C8CE8 0007"],"options":null},"Player 1\\Untouchable":{"note":"","data":["801D34D4 000A"],"options":null},"Player 1\\Wins Score":{"note":"","data":["8012830A 00FF"],"options":null},"Player 2\\Fast\\Jump Walk":{"note":"","data":["801D357C 0001"],"options":null},"Player 2\\Fast\\Punch Kick":{"note":"","data":["801D357E 0010"],"options":null},"Player 2\\Fulgore Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3578 0020","801D3579 0090","801D35C5 0092","801D3527 005E"],"options":null},"Player 2\\Fulgore Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3578 0023","801D3579 00F0","801D35C5 0080","801D3527 00AF"],"options":null},"Player 2\\Infinite Energy":{"note":"","data":["801D3584 0078"],"options":null},"Player 2\\Play As":{"note":"","data":["8004EA9D 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 2\\Slow\\Jump Walk":{"note":"","data":["801D357D 0050"],"options":null},"Player 2\\Slow\\Punch Kick":{"note":"","data":["801D357F 0050"],"options":null},"Player 2\\Spinal Always Has All Skulls":{"note":"","data":["801D3623 0006"],"options":null},"Player 2\\Untouchable":{"note":"","data":["801D34D5 000A"],"options":null},"Unlock All Options":{"note":"","data":["8012834C 0006"],"options":null}},"F9D411E3-7CB29BC0-C:45":{"Always Low Temp":{"note":"","data":["810E4F98 0000","810E4F9A 0000"],"options":null},"Auto-Pilot Always On Turbo (Original Excitebike Mode)":{"note":"","data":["810E3142 19AA"],"options":null},"Earthquake Mode":{"note":"","data":["810D7010 3AD0"],"options":null},"Fast\\Movement (Drones)":{"note":"","data":["800D9D55 00A0"],"options":null},"Fast\\Movement (Player)":{"note":"","data":["800D9D65 00AF"],"options":null},"Max Stunt Points":{"note":"","data":["810E4D18 0098","810E4D1A 967F"],"options":null},"No\\Collision Drivers":{"note":"","data":["800D9D34 0040"],"options":null},"No\\Overheating":{"note":"","data":["800CA984 00C3"],"options":null},"Power Turbo":{"note":"","data":["800CA99C 0040","800CA99D 00E0"],"options":null},"Slow\\Movement (Drones)":{"note":"","data":["800D9D55 0060"],"options":null},"Slow\\Movement (Player)":{"note":"","data":["800D9D65 0060"],"options":null},"Steering Control":{"note":"","data":["800C9E50 0040"],"options":null},"Super Speed For All":{"note":"","data":["800CA9A0 0040","800CA9A1 0070"],"options":null},"Unlock\\Difficulties \u0026 All Special Tracks":{"note":"","data":["810F2D50 FFFF"],"options":null},"Unlock\\Silver \u0026 Gold Cup":{"note":"","data":["810F2D4E 0003"],"options":null}},"FA5A3DFF-B4C9CDB9-C:45":{"Aquadome\\Player 1\\Cant be Stunned":{"note":"","data":["80193D1F 0000"],"options":null},"Aquadome\\Player 1\\Full Super Bar":{"note":"","data":["81193D2E 0200"],"options":null},"Aquadome\\Player 1\\Infinite Health":{"note":"","data":["80193D27 00AA"],"options":null},"Aquadome\\Player 1\\No Health":{"note":"","data":["80193D27 0000"],"options":null},"Aquadome\\Player 2\\Cant be Stunned":{"note":"","data":["8019720F 0000"],"options":null},"Aquadome\\Player 2\\Full Super Bar":{"note":"","data":["8119721E 0200"],"options":null},"Aquadome\\Player 2\\Infinite Health":{"note":"","data":["80197217 00AA"],"options":null},"Aquadome\\Player 2\\No Health":{"note":"","data":["80197217 0000"],"options":null},"Backwash Bay\\Player 1\\Cant be Stunned":{"note":"","data":["8019447F 0000"],"options":null},"Backwash Bay\\Player 1\\Full Super Bar":{"note":"","data":["8119448E 0200"],"options":null},"Backwash Bay\\Player 1\\Infinite Health":{"note":"","data":["80194487 00AA"],"options":null},"Backwash Bay\\Player 1\\No Health":{"note":"","data":["80194487 0000"],"options":null},"Backwash Bay\\Player 2\\Cant be Stunned":{"note":"","data":["8019796F 0000"],"options":null},"Backwash Bay\\Player 2\\Full Super Bar":{"note":"","data":["8119797E 0200"],"options":null},"Backwash Bay\\Player 2\\Infinite Health":{"note":"","data":["80197977 00AA"],"options":null},"Backwash Bay\\Player 2\\No Health":{"note":"","data":["80197977 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Cant be Stunned":{"note":"","data":["80194ECF 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Full Super Bar":{"note":"","data":["81194EDE 0200"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Infinite Health":{"note":"","data":["80194ED7 00AA"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\No Health":{"note":"","data":["80194ED7 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Cant be Stunned":{"note":"","data":["801983BF 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Full Super Bar":{"note":"","data":["811983CE 0200"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Infinite Health":{"note":"","data":["801983C7 00AA"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\No Health":{"note":"","data":["801983C7 0000"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 1\\Cant be Stunned":{"note":"","data":["8019422F 0000"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 1\\Full Super Bar":{"note":"","data":["8119423E 0200"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 1\\Infinite Health":{"note":"","data":["80194237 00AA"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 1\\No Health":{"note":"","data":["80194237 0000"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 2\\Cant be Stunned":{"note":"","data":["8019771F 0000"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 2\\Full Super Bar":{"note":"","data":["8119772E 0200"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 2\\Infinite Health":{"note":"","data":["80197727 00AA"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 2\\No Health":{"note":"","data":["80197727 0000"],"options":null},"Candy Factory\\Player 1\\Cant be Stunned":{"note":"","data":["801945FF 0000"],"options":null},"Candy Factory\\Player 1\\Full Super Bar":{"note":"","data":["8119460E 0200"],"options":null},"Candy Factory\\Player 1\\Infinite Health":{"note":"","data":["80194607 00AA"],"options":null},"Candy Factory\\Player 1\\No Health":{"note":"","data":["80194607 0000"],"options":null},"Candy Factory\\Player 2\\Cant be Stunned":{"note":"","data":["80197AEF 0000"],"options":null},"Candy Factory\\Player 2\\Full Super Bar":{"note":"","data":["81197AFE 0200"],"options":null},"Candy Factory\\Player 2\\Infinite Health":{"note":"","data":["80197AF7 00AA"],"options":null},"Candy Factory\\Player 2\\No Health":{"note":"","data":["80197AF7 0000"],"options":null},"Clayribbean Cruise\\Player 1\\Cant be Stunned":{"note":"","data":["80193F3F 0000"],"options":null},"Clayribbean Cruise\\Player 1\\Full Super Bar":{"note":"","data":["81193F4E 0200"],"options":null},"Clayribbean Cruise\\Player 1\\Infinite Health":{"note":"","data":["80193F47 00AA"],"options":null},"Clayribbean Cruise\\Player 1\\No Health":{"note":"","data":["80193F47 0000"],"options":null},"Clayribbean Cruise\\Player 2\\Cant be Stunned":{"note":"","data":["8019742F 0000"],"options":null},"Clayribbean Cruise\\Player 2\\Full Super Bar":{"note":"","data":["8119743E 0200"],"options":null},"Clayribbean Cruise\\Player 2\\Infinite Health":{"note":"","data":["80197437 00AA"],"options":null},"Clayribbean Cruise\\Player 2\\No Health":{"note":"","data":["80197437 0000"],"options":null},"Dog House\\Player 1\\Cant be Stunned":{"note":"","data":["8019653F 0000"],"options":null},"Dog House\\Player 1\\Full Super Bar":{"note":"","data":["8119654E 0200"],"options":null},"Dog House\\Player 1\\Infinite Health":{"note":"","data":["80196547 00AA"],"options":null},"Dog House\\Player 1\\No Health":{"note":"","data":["80196547 0000"],"options":null},"Dog House\\Player 2\\Cant be Stunned":{"note":"","data":["80199A2F 0000"],"options":null},"Dog House\\Player 2\\Full Super Bar":{"note":"","data":["81199A3E 0200"],"options":null},"Dog House\\Player 2\\Infinite Health":{"note":"","data":["80199A37 00AA"],"options":null},"Dog House\\Player 2\\No Health":{"note":"","data":["80199A37 0000"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 1\\Cant be Stunned":{"note":"","data":["80195AAF 0000"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 1\\Full Super Bar":{"note":"","data":["81195ABE 0200"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 1\\Infinite Health":{"note":"","data":["80195AB7 00AA"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 1\\No Health":{"note":"","data":["80195AB7 0000"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 2\\Cant be Stunned":{"note":"","data":["80198F9F 0000"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 2\\Full Super Bar":{"note":"","data":["81198FAE 0200"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 2\\Infinite Health":{"note":"","data":["80198FA7 00AA"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 2\\No Health":{"note":"","data":["80198FA7 0000"],"options":null},"Freezing Fortress\\Player 1\\Cant be Stunned":{"note":"","data":["8019428F 0000"],"options":null},"Freezing Fortress\\Player 1\\Full Super Bar":{"note":"","data":["8119429E 0200"],"options":null},"Freezing Fortress\\Player 1\\Infinite Health":{"note":"","data":["80194297 00AA"],"options":null},"Freezing Fortress\\Player 1\\No Health":{"note":"","data":["80194297 0000"],"options":null},"Freezing Fortress\\Player 2\\Cant be Stunned":{"note":"","data":["8019777F 0000"],"options":null},"Freezing Fortress\\Player 2\\Full Super Bar":{"note":"","data":["8119778E 0200"],"options":null},"Freezing Fortress\\Player 2\\Infinite Health":{"note":"","data":["80197787 00AA"],"options":null},"Freezing Fortress\\Player 2\\No Health":{"note":"","data":["80197787 0000"],"options":null},"Ghastly Graveyard\\Player 1\\Cant be Stunned":{"note":"","data":["8019451F 0000"],"options":null},"Ghastly Graveyard\\Player 1\\Full Super Bar":{"note":"","data":["8119452E 0200"],"options":null},"Ghastly Graveyard\\Player 1\\Infinite Health":{"note":"","data":["80194527 00AA"],"options":null},"Ghastly Graveyard\\Player 1\\No Health":{"note":"","data":["80194527 0000"],"options":null},"Ghastly Graveyard\\Player 2\\Cant be Stunned":{"note":"","data":["80197A0F 0000"],"options":null},"Ghastly Graveyard\\Player 2\\Full Super Bar":{"note":"","data":["81197A1E 0200"],"options":null},"Ghastly Graveyard\\Player 2\\Infinite Health":{"note":"","data":["80197A17 00AA"],"options":null},"Ghastly Graveyard\\Player 2\\No Health":{"note":"","data":["80197A17 0000"],"options":null},"Kooky Courtyard\\Player 1\\Cant be Stunned":{"note":"","data":["801946FF 0000"],"options":null},"Kooky Courtyard\\Player 1\\Full Super Bar":{"note":"","data":["8119470E 0200"],"options":null},"Kooky Courtyard\\Player 1\\Infinite Health":{"note":"","data":["80194707 00AA"],"options":null},"Kooky Courtyard\\Player 1\\No Health":{"note":"","data":["80194707 0000"],"options":null},"Kooky Courtyard\\Player 2\\Cant be Stunned":{"note":"","data":["80197BEF 0000"],"options":null},"Kooky Courtyard\\Player 2\\Full Super Bar":{"note":"","data":["81197BFE 0200"],"options":null},"Kooky Courtyard\\Player 2\\Infinite Health":{"note":"","data":["80197BF7 00AA"],"options":null},"Kooky Courtyard\\Player 2\\No Health":{"note":"","data":["80197BF7 0000"],"options":null},"Other Codes\\Debug Mode":{"note":"With this code, Press C-Up \u0026 C-Down to pick your stage.","data":["810AA1A6 0001"],"options":null},"Other Codes\\Difficulty Modifier":{"note":"","data":["810AE40A 00??"],"options":{"Cookie":"00","Dude":"03","Easy":"01","Normal":"02","Psycho":"04"}},"Other Codes\\Have Booger Man":{"note":"","data":["810AA12A 0001"],"options":null},"Other Codes\\Have Earth Worm Jim":{"note":"","data":["810AA0E2 0001"],"options":null},"Other Codes\\Have High Five":{"note":"","data":["810AA0BE 0001"],"options":null},"Other Codes\\Have Sumo Santa":{"note":"","data":["810AA106 0001"],"options":null},"Other Codes\\Health Meters Modifier":{"note":"","data":["800AE5EF 00??"],"options":{"Off":"00","On":"01"}},"Other Codes\\Portraits Modifier":{"note":"","data":["800AE613 00??"],"options":{"Off":"00","On":"01"}},"Other Codes\\Spillits Modifier":{"note":"","data":["800AE447 00??"],"options":{"Normal":"00","Psycho":"01"}},"Other Codes\\Stun Meters Modifier":{"note":"","data":["800AE5FB 00??"],"options":{"Off":"00","On":"01"}},"Other Codes\\Super Meters Modifier":{"note":"","data":["800AE607 00??"],"options":{"Off":"00","On":"01"}},"Other Codes\\Throws \u0026 Holds Modifier":{"note":"","data":["800AE42F 00??"],"options":{"Off":"01","On":"00"}},"Other Codes\\Time Limit Modifier":{"note":"","data":["800AE423 00??"],"options":{"Off":"01","On":"00"}},"Other Codes\\VS. Arena Select Modifier":{"note":"","data":["800AE43B 00??"],"options":{"Normal":"01","Random":"00"}},"Rubbage Reef Code\\Player 1\\Cant be Stunned":{"note":"","data":["8019430F 0000"],"options":null},"Rubbage Reef Code\\Player 1\\Full Super Bar":{"note":"","data":["8119431E 0200"],"options":null},"Rubbage Reef Code\\Player 1\\Infinite Health":{"note":"","data":["80194317 00AA"],"options":null},"Rubbage Reef Code\\Player 1\\No Health":{"note":"","data":["80194317 0000"],"options":null},"Rubbage Reef Code\\Player 2\\Cant be Stunned":{"note":"","data":["801977FF 0000"],"options":null},"Rubbage Reef Code\\Player 2\\Full Super Bar":{"note":"","data":["8119780E 0200"],"options":null},"Rubbage Reef Code\\Player 2\\Infinite Health":{"note":"","data":["80197807 00AA"],"options":null},"Rubbage Reef Code\\Player 2\\No Health":{"note":"","data":["80197807 0000"],"options":null},"Santa's Toy Factory\\Player 1\\Cant be Stunned":{"note":"","data":["80194B2F 0000"],"options":null},"Santa's Toy Factory\\Player 1\\Full Super Bar":{"note":"","data":["81194B3E 0200"],"options":null},"Santa's Toy Factory\\Player 1\\Infinite Health":{"note":"","data":["80194B37 00AA"],"options":null},"Santa's Toy Factory\\Player 1\\No Health":{"note":"","data":["80194B37 0000"],"options":null},"Santa's Toy Factory\\Player 2\\Cant be Stunned":{"note":"","data":["8019801F 0000"],"options":null},"Santa's Toy Factory\\Player 2\\Full Super Bar":{"note":"","data":["8119802E 0200"],"options":null},"Santa's Toy Factory\\Player 2\\Infinite Health":{"note":"","data":["80198027 00AA"],"options":null},"Santa's Toy Factory\\Player 2\\No Health":{"note":"","data":["80198027 0000"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 1\\Cant be Stunned":{"note":"","data":["801939FF 0000"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 1\\Full Super Bar":{"note":"","data":["81193A0E 0200"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 1\\Infinite Health":{"note":"","data":["80193A07 00AA"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 1\\No Health":{"note":"","data":["80193A07 0000"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 2\\Cant be Stunned":{"note":"","data":["80196EEF 0000"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 2\\Full Super Bar":{"note":"","data":["81196EFE 0200"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 2\\Infinite Health":{"note":"","data":["80196EF7 00AA"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 2\\No Health":{"note":"","data":["80196EF7 0000"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 1\\Cant be Stunned":{"note":"","data":["8019433F 0000"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 1\\Full Super Bar":{"note":"","data":["8119434E 0200"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 1\\Infinite Health":{"note":"","data":["80194347 00AA"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 1\\No Health":{"note":"","data":["80194347 0000"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 2\\Cant be Stunned":{"note":"","data":["8019782F 0000"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 2\\Full Super Bar":{"note":"","data":["8119783E 0200"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 2\\Infinite Health":{"note":"","data":["80197837 00AA"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 2\\No Health":{"note":"","data":["80197837 0000"],"options":null},"Tribal Tower\\Player 1\\Cant be Stunned":{"note":"","data":["80193A9F 0000"],"options":null},"Tribal Tower\\Player 1\\Full Super Bar":{"note":"","data":["81193AAE 0200"],"options":null},"Tribal Tower\\Player 1\\Infinite Health":{"note":"","data":["80193AA7 00AA"],"options":null},"Tribal Tower\\Player 1\\No Health":{"note":"","data":["80193AA7 0000"],"options":null},"Tribal Tower\\Player 2\\Cant be Stunned":{"note":"","data":["80196F8F 0000"],"options":null},"Tribal Tower\\Player 2\\Full Super Bar":{"note":"","data":["81196F9E 0200"],"options":null},"Tribal Tower\\Player 2\\Infinite Health":{"note":"","data":["80196F97 00AA"],"options":null},"Tribal Tower\\Player 2\\No Health":{"note":"","data":["80196F97 0000"],"options":null},"VS. Mode\\Player 1\\Cant be Stunned":{"note":"","data":["8019195F 0000"],"options":null},"VS. Mode\\Player 1\\Full Super Bar":{"note":"","data":["8119916E 0200"],"options":null},"VS. Mode\\Player 1\\Infinite Health":{"note":"","data":["80199167 00AA"],"options":null},"VS. Mode\\Player 1\\No Health":{"note":"","data":["80199167 0000"],"options":null},"VS. Mode\\Player 2\\Cant be Stunned":{"note":"","data":["80194E4F 0000"],"options":null},"VS. Mode\\Player 2\\Full Super Bar":{"note":"","data":["81194E5E 0200"],"options":null},"VS. Mode\\Player 2\\Infinite Health":{"note":"","data":["80194E57 00AA"],"options":null},"VS. Mode\\Player 2\\No Health":{"note":"","data":["80194E57 0000"],"options":null}},"FA8C4571-BBE7F9C0-C:45":{"Always 1st \u0026 final time 00:00.00":{"note":"All Levels","data":["50000301 0000","801CE609 0000"],"options":null},"Difficulty Select":{"note":"","data":["8007BF00 00??"],"options":{"Amateur":"00","Intermediate":"01","Mirror Mode":"03","Professional":"02"}},"Frantic Finale\\Colorado\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019185B 0063"],"options":null},"Frantic Finale\\Colorado\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191882 0063"],"options":null},"Frantic Finale\\Hawaii\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["80191F3B 0063"],"options":null},"Frantic Finale\\Hawaii\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191F62 0063"],"options":null},"Frantic Finale\\Oregon\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018E90B 0063"],"options":null},"Frantic Finale\\Oregon\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E932 0063"],"options":null},"Frantic Finale\\Texas\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018F0AB 0063"],"options":null},"Frantic Finale\\Texas\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018F0D2 0063"],"options":null},"Freewayphobia\\Chicago\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["80191F0B 0063"],"options":null},"Freewayphobia\\Chicago\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191F32 0063"],"options":null},"Freewayphobia\\Dakota\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018D0DB 0063"],"options":null},"Freewayphobia\\Dakota\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018D102 0063"],"options":null},"Freewayphobia\\New York\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018F3DB 0063"],"options":null},"Freewayphobia\\New York\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018F402 0063"],"options":null},"Freewayphobia\\Seattle\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018FCBB 0063"],"options":null},"Freewayphobia\\Seattle\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FCE2 0063"],"options":null},"Level Select":{"note":"","data":["801875A9 00??"],"options":{"Contest":"07","Frantic Finale":"04","Freewayphobia":"02","Motor Way Mania":"01","Options":"08","Practice":"06","Time Trial":"05","Traffic Troubles":"00","Vitory Vehicles":"03"}},"Motor Way Mania\\Alaska\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018E34B 0063"],"options":null},"Motor Way Mania\\Alaska\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E372 0063"],"options":null},"Motor Way Mania\\Las Vegas\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801929DB 0063"],"options":null},"Motor Way Mania\\Las Vegas\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80192A02 0063"],"options":null},"Motor Way Mania\\Los Angeles\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018DBBB 0063"],"options":null},"Motor Way Mania\\Los Angeles\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018DBE2 0063"],"options":null},"Motor Way Mania\\Philadelphia\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019385B 0063"],"options":null},"Motor Way Mania\\Philadelphia\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80193882 0063"],"options":null},"Play As":{"note":"","data":["800D3081 00??"],"options":{"Daisy Duck":"01","Dewey":"07","Donald Duck":"05","Goofy":"02","Huey":"06","Louie":"08","Lugwig Von Drake":"09","Mickey Mouse":"00","Minnie Mouse":"04","Pete":"03"}},"Re-name Characters\\Daisy\\Letter 1":{"note":"","data":["801BE5A6 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 2":{"note":"","data":["801BE5A7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 3":{"note":"","data":["801BE5A8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 4":{"note":"","data":["801BE5A9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 5":{"note":"","data":["801BE5AA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 1":{"note":"","data":["801BE5BC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 2":{"note":"","data":["801BE5BD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 3":{"note":"","data":["801BE5BE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 4":{"note":"","data":["801BE5BF 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 5":{"note":"","data":["801BE5C0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 1":{"note":"","data":["801BE59F 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 2":{"note":"","data":["801BE5A0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 3":{"note":"","data":["801BE5A1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 4":{"note":"","data":["801BE5A2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 5":{"note":"","data":["801BE5A3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 6":{"note":"","data":["801BE5A4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 1":{"note":"","data":["801BE5AC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 2":{"note":"","data":["801BE5AD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 3":{"note":"","data":["801BE5AE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 4":{"note":"","data":["801BE5AF 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 5":{"note":"","data":["801BE5B0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 1":{"note":"","data":["801BE5B7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 2":{"note":"","data":["801BE5B8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 3":{"note":"","data":["801BE5B9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 4":{"note":"","data":["801BE5BA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 1":{"note":"","data":["801BE5C2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 2":{"note":"","data":["801BE5C3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 3":{"note":"","data":["801BE5C4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 4":{"note":"","data":["801BE5C5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 5":{"note":"","data":["801BE5C6 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 1":{"note":"","data":["801BE5C8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 2":{"note":"","data":["801BE5C9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 3":{"note":"","data":["801BE5CA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 4":{"note":"","data":["801BE5CB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 5":{"note":"","data":["801BE5CC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 6":{"note":"","data":["801BE5CD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 1":{"note":"","data":["801BE591 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 2":{"note":"","data":["801BE592 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 3":{"note":"","data":["801BE593 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 4":{"note":"","data":["801BE594 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 5":{"note":"","data":["801BE595 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 6":{"note":"","data":["801BE596 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 1":{"note":"","data":["801BE598 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 2":{"note":"","data":["801BE599 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 3":{"note":"","data":["801BE59A 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 4":{"note":"","data":["801BE59B 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 5":{"note":"","data":["801BE59C 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 6":{"note":"","data":["801BE59D 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 1":{"note":"","data":["801BE5B2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 2":{"note":"","data":["801BE5B3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 3":{"note":"","data":["801BE5B4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 4":{"note":"","data":["801BE5B5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Traffic Troubles\\Grand Canyon\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019311B 0063"],"options":null},"Traffic Troubles\\Grand Canyon\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80193142 0063"],"options":null},"Traffic Troubles\\Indianapolis\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018E75B 0063"],"options":null},"Traffic Troubles\\Indianapolis\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E782 0063"],"options":null},"Traffic Troubles\\New Mexico\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018FD2B 0063"],"options":null},"Traffic Troubles\\New Mexico\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FD52 0063"],"options":null},"Traffic Troubles\\San Fransisco\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["80191A2B 0063"],"options":null},"Traffic Troubles\\San Fransisco\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191A52 0063"],"options":null},"Unlock Everything":{"note":"This will unlock all characters, tracks, mirror mode, all in-game cheats, postcards, pluto's collar and give you all Trophies for every track and difficulties. To have this cheat save to mempak, enable it and then go into the Options Menu and disable the cheat. Go to the Wide-Screen Settings and Change it to Wide-Screen [16.9] and then the B button to get back to Wide-Screen Settings, now go back into Wide-Screen [16.9] and change it back to Normal [4.3].and press the B button until you come back to the main Options Menu.Close the game and load it again to see everything saved to the Mempak and unlocked.","data":["800D3128 008F","800D3129 0094","800D312A 0003","800D312C 0001","800D312F 0080","50000502 0000","800D3130 0009","50000502 0000","800D3131 0024","800D313A 0015","800D313B 007F","800D313C 0001","800D313D 00FF","800D313E 0004","800D313F 0022"],"options":null},"Victory Vehicles\\Everglades\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018FAEB 0063"],"options":null},"Victory Vehicles\\Everglades\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FB12 0063"],"options":null},"Victory Vehicles\\Malibu\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019157B 0063"],"options":null},"Victory Vehicles\\Malibu\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801915A2 0063"],"options":null},"Victory Vehicles\\Washington DC\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019752B 0063"],"options":null},"Victory Vehicles\\Washington DC\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80197552 0063"],"options":null},"Victory Vehicles\\Yellowstone\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018D38B 0063"],"options":null},"Victory Vehicles\\Yellowstone\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018D3B2 0063"],"options":null}},"FB3C48D0-8D28F69F-C:50":{"Level Select":{"note":"","data":["80046333 00??"],"options":{"Level 1":"01","Level 10":"0A","Level 11":"0B","Level 12":"0C","Level 13":"0D","Level 14":"0E","Level 15":"0F","Level 16":"10","Level 17":"11","Level 18":"12","Level 19":"13","Level 2":"02","Level 20":"14","Level 21":"15","Level 22":"16","Level 23":"17","Level 24":"18","Level 25":"19","Level 3":"03","Level 4":"04","Level 5":"05","Level 6":"06","Level 7":"07","Level 8":"08","Level 9":"09"}},"Stop Timer From Counting Down (All Levels)":{"note":"","data":["8101D4E0 2400"],"options":null}},"FBB9F1FA-6BF88689-C:45":{"Infinite\\Atoms":{"note":"","data":["81159286 FFFF"],"options":null},"Infinite\\Lives":{"note":"","data":["80026A67 0063"],"options":null},"Infinite\\Quarks":{"note":"","data":["81159282 FFFF"],"options":null}},"FC70E272-08FFE7AA-C:50":{"0 Enemies To Kill In Big Celebration Parade":{"note":"","data":["803E4DBB 0000"],"options":null},"All levels open":{"note":"","data":["50002001 0000","803F7ED0 0001"],"options":null},"Always Raining":{"note":"","data":["803F2E5F 0005"],"options":null},"Always Snowing":{"note":"","data":["803F2E5D 0005"],"options":null},"Always in 2nd Camera Angle":{"note":"","data":["803F2B89 0001"],"options":null},"Debug Mode":{"note":"","data":["803F651F 0001"],"options":null},"Enable Secret Mini Game":{"note":"","data":["803F652D 0001"],"options":null},"Great Score":{"note":"","data":["813F2E22 03E7"],"options":null},"High Score In Evo's Escape":{"note":"","data":["813E4DDA 7FFF"],"options":null},"Infinite Health\\2 Mouse,Hyena":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DFB51 0080"],"options":null},"Infinite Health\\A. Desert Rat, Vulture, Box, Kang":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DEFD5 0080"],"options":null},"Infinite Health\\Bunny, Racing Turtle":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DF3A9 0080"],"options":null},"Infinite Health\\Cool Cod":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E4039 0080"],"options":null},"Infinite Health\\Desert Fox":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E161D 0080"],"options":null},"Infinite Health\\EVO":{"note":"","data":["801DE085 0080"],"options":null},"Infinite Health\\Elephant":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DE82D 0080"],"options":null},"Infinite Health\\Fox, Pen, Husky, Tortoise Tank":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DFF25 0080"],"options":null},"Infinite Health\\King Rat":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E19F1 0080"],"options":null},"Infinite Health\\Lion, Camel":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E02F9 0080"],"options":null},"Infinite Health\\Rocket Dog":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DEC01 0080"],"options":null},"Infinite Health\\Rocket Husky":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E1DC5 0080"],"options":null},"Infinite Health\\Spit Dog, Bear, King Pen, FB EVO":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DE459 0080"],"options":null},"Infinite Skill\\A\\King Penguin":{"note":"Only Use Infinite Skill A Codes For Animals You Need","data":["801DE5EC 0004"],"options":null},"Infinite Skill\\A\\King Rat":{"note":"Only Use Infinite Skill A Codes For Animals You Need","data":["801E1B84 0004"],"options":null},"Infinite Skill\\A\\Power Mouse":{"note":"Only Use Infinite Skill A Codes For Animals You Need","data":["801DFCE4 0004"],"options":null},"Infinite Skill\\A\\Rocket Dog":{"note":"Only Use Infinite Skill A Codes For Animals You Need","data":["801E3A24 0004"],"options":null},"Infinite Skill\\B\\Armed Desert Rat":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DF16C 0004"],"options":null},"Infinite Skill\\B\\Bear":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DE5F0 0004"],"options":null},"Infinite Skill\\B\\Boxing Kangeroo":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DF16C 0004"],"options":null},"Infinite Skill\\B\\Bunny, Racing Turtle":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DF540 0004"],"options":null},"Infinite Skill\\B\\Desert Fox":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E17B4 0004"],"options":null},"Infinite Skill\\B\\Hyena":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DF914 0004"],"options":null},"Infinite Skill\\B\\Lion":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E0490 0004"],"options":null},"Infinite Skill\\B\\Power Pen, Husky, Fox, Tort Tank":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E00BC 0004"],"options":null},"Infinite Skill\\B\\Rocket Dog":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E3A28 0004"],"options":null},"Infinite Skill\\B\\Rocket Husky":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E1F5C 0004"],"options":null},"Title Screen":{"note":"Press the Pause Button to takes you to Title Screen","data":["803F6799 0000"],"options":null}},"FC74D475-9A0278AB-C:45":{"1 Win Needed\\Player 1":{"note":"","data":["D00BAD0F 0000","800BAD0F 0001"],"options":null},"1 Win Needed\\Player 2":{"note":"","data":["D00BB04F 0000","800BB04F 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["810BACDC 42C8"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["810BB01C 42C8"],"options":null},"Infinite Time":{"note":"","data":["810E69AC 42F0"],"options":null},"Max Chemical X\\Player 1":{"note":"","data":["800BAD28 0003"],"options":null},"Max Chemical X\\Player 2":{"note":"","data":["800BB068 0003"],"options":null},"Never Win\\Player 1":{"note":"","data":["800BAD0F 0000"],"options":null},"Never Win\\Player 2":{"note":"","data":["800BB04F 0000"],"options":null},"No Chemical X\\Player 1":{"note":"","data":["800BAD28 0000"],"options":null},"No Chemical X\\Player 2":{"note":"","data":["800BB068 0000"],"options":null},"No Health\\Player 1":{"note":"","data":["810BACDC 0000"],"options":null},"No Health\\Player 2":{"note":"","data":["810BB01C 0000"],"options":null}},"FC7797BF-4A95E83C-C:50":{"Access All Bonus Cars":{"note":"","data":["50000302 0000","80098583 0001","50000302 0000","8009858B 0001"],"options":null},"Always 1st Place":{"note":"","data":["810A5F30 0001"],"options":null},"Infinite Time":{"note":"","data":["810CE72E 03E7"],"options":null},"Max Points":{"note":"","data":["810CE702 010A"],"options":null},"Speedometer Select":{"note":"","data":["810CE7C2 00??"],"options":{"KM/H":"00","MPH":"01"}},"Start On Lap Modifier":{"note":"","data":["D00A5F35 0000","810A5F34 00??"],"options":{"Lap 1":"01","Lap 2":"02","Lap 3":"03","Lap 4":"04","Lap 5":"06","Lap 6":"06","Last Lap from Start":"07","Normal":"00"}},"Track Direction Unlocked (All Levels)":{"note":"","data":["800A4131 0003"],"options":null}},"FCBCCB21-72903C6B-C:45":{"Ebisumaru\\Automatically Complete Ebisumaru's Training":{"note":"","data":["803B52F4 0008"],"options":null},"Ebisumaru\\Have\\Magic Mini Ebisu":{"note":"","data":["8015C6F3 0001"],"options":null},"Ebisumaru\\Have\\Meat Saw Hammer":{"note":"","data":["8015C6C3 0001"],"options":null},"Ebisumaru\\Have\\Windup Camera":{"note":"","data":["8015C6D3 0001"],"options":null},"Ebisumaru\\Saw Hammer Modifier":{"note":"","data":["8015C6B3 00??"],"options":{"Gold Saw Hammer":"02","Normal Saw Hammer":"00","Silver Saw Hammer":"01"}},"Goemon\\D-Pad Left To Charge Laser":{"note":"","data":["D00C7D3A 0002","802F706F 0064"],"options":null},"Goemon\\D-Pad Up To Refill Oil":{"note":"","data":["D0067D3A 0008","812F706A 03E7"],"options":null},"Goemon\\Have\\Chain Pipe":{"note":"","data":["8015C6BF 0002"],"options":null},"Goemon\\Have\\Magic Sudden Impact":{"note":"","data":["8015C6EF 0001"],"options":null},"Goemon\\Have\\Medal of Flames":{"note":"","data":["8015C6DF 0001"],"options":null},"Goemon\\Maximum Money":{"note":"","data":["812F70EA 03E7"],"options":null},"Goemon\\Pipe Modifier":{"note":"","data":["8015C6AF 00??"],"options":{"Gold Pipe":"02","Normal Pipe":"00","Silver Pipe":"01"}},"Goemon\\Robot Boss' Has No Health":{"note":"","data":["812F7062 0000"],"options":null},"Have\\Blue Fish":{"note":"","data":["8015C723 0001"],"options":null},"Have\\Blue Sausage":{"note":"","data":["8015C717 0001"],"options":null},"Have\\Brown Item":{"note":"","data":["8015C703 0001"],"options":null},"Have\\Brown Round Item":{"note":"","data":["8015C70F 0001"],"options":null},"Have\\Gold Fish":{"note":"","data":["8015C71F 0001"],"options":null},"Have\\Gold Key":{"note":"","data":["8015C713 0001"],"options":null},"Have\\Pink Fish":{"note":"","data":["8015C71B 0001"],"options":null},"Have\\Silver Fortune Doll":{"note":"","data":["8015C707 0001"],"options":null},"Have\\Triton Shell":{"note":"","data":["8015C6FF 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8015C5E7 0028"],"options":null},"Infinite\\Lives":{"note":"","data":["8015C5EF 0009"],"options":null},"Infinite\\Money":{"note":"","data":["8115C5EA 270F"],"options":null},"Max Heart Containers":{"note":"","data":["8015C5E3 0027"],"options":null},"Play As":{"note":"","data":["8015C5DF 00??"],"options":{"Ebisumaru":"01","Goemon":"00","Sasuke":"02","Yae":"03"}},"Press\\L To Levitate":{"note":"","data":["D00C7D3B 0020","8116A044 4000"],"options":null},"Press\\R To Use Chargeable Weapon":{"note":"","data":["D00C7D3B 0010","8120C896 005D"],"options":null},"Sasuke\\Have\\Fire Cracker Bomb":{"note":"","data":["8015C6C7 0001"],"options":null},"Sasuke\\Have\\Kunai of Severe Cold":{"note":"","data":["8015C6D7 0001"],"options":null},"Sasuke\\Have\\Magic Flying":{"note":"","data":["8015C6F7 0001"],"options":null},"Sasuke\\Kunai Modifier":{"note":"","data":["8015C6B7 00??"],"options":{"2 Kunai's":"01","Gold Kunai":"02","Normal Kunai":"00"}},"Yae\\Have\\Bazooka":{"note":"","data":["8015C6DB 0001"],"options":null},"Yae\\Have\\Flute":{"note":"","data":["8015C6CB 0001"],"options":null},"Yae\\Have\\Magic Mermaid":{"note":"","data":["8015C6FB 0001"],"options":null},"Yae\\Katana Modifier":{"note":"","data":["8015C6BB 00??"],"options":{"Gold Katana":"02","Normal Katana":"00","Silver Katana":"01"}}},"FCE0D799-65316C54-C:45":{"Infinite\\Armor\\Player 1":{"note":"","data":["8011D467 0064"],"options":null},"Infinite\\Armor\\Player 2":{"note":"","data":["8011D46B 0064"],"options":null},"Infinite\\Bombs\\Player 1":{"note":"","data":["8011D46F 0003"],"options":null},"Infinite\\Bombs\\Player 2":{"note":"","data":["8011D473 0003"],"options":null},"Level 11 Vulcan Cannon\\Player 1":{"note":"","data":["801239B3 000A"],"options":null},"Level 11 Vulcan Cannon\\Player 2":{"note":"","data":["801239D3 000A"],"options":null},"Press L For Rapid Fire Select\\Player 1":{"note":"","data":["D011BE01 0020","8011D497 00??"],"options":{"On Flak":"14","On Nuke \u0026 Laser":"28"}},"Press L For Rapid Fire Select\\Player 2":{"note":"","data":["D011BE09 0020","8011D49B 00??"],"options":{"On Flak":"14","On Nuke \u0026 Laser":"28"}}},"FD73F775-9724755A-C:50":{"Enable All Cheats":{"note":"Go into Options \u0026 then Magic Codes. Then Code list to turn off \u0026 on what you want.","data":["800DFE2C 001F","50000301 0000","800DFE2D 00FF"],"options":null},"Have All\\50 Balloons":{"note":"","data":["8020807D 0032"],"options":null},"Have All\\Control Drumstick \u0026 Adventure Two mode unlocked":{"note":"","data":["801264DC 0003","801264DF 0003","801264F2 0003","801264F3 0008"],"options":null},"Have All\\Keys":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80207E69 001F"],"options":null},"Have All\\None-Adventure tracks completed":{"note":"","data":["50001204 0000","80207F87 0007","50000904 0000","80207FDF 0007","80207E68 0007","80207E6A 0007","80207E6B 0007","80207E6C 000F","80207E6D 00FF"],"options":null},"Have All\\T.T. Amulets":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80207E77 0004"],"options":null},"Have All\\T.T. time trial races beaten":{"note":"","data":["80207E76 0004"],"options":null},"Have All\\Trophies":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80207E6E 0007","80207E6F 00FF"],"options":null},"Have All\\Trophy Adventure races unlocked":{"note":"","data":["50000502 0000","8020807E 0007"],"options":null}},"FDA245D2-A74A3D47-C:45":{"All Tracks Unlocked":{"note":"","data":["8019436E 0008","50000264 0000","80167747 0001","50000264 0000","80167873 0001","50000564 0000","8016799F 0001"],"options":null},"Bike Modifier\\Player 1":{"note":"","data":["80167C3F 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 2":{"note":"","data":["80167C8B 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 3":{"note":"","data":["80167CD7 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 4":{"note":"","data":["80167D23 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Extra Bikes Unlocked":{"note":"","data":["80167C13 0001","80167C17 0003"],"options":null},"Extra Levels Unlocked":{"note":"","data":["80167C0B 0001","80167C0F 0001"],"options":null},"Infinite Primary Weapon\\Player 1":{"note":"","data":["801635FD 00C8"],"options":null},"Infinite Primary Weapon\\Player 2":{"note":"","data":["80163D6D 00C8"],"options":null},"Infinite Primary Weapon\\Player 3":{"note":"","data":["801644DD 00C8"],"options":null},"Infinite Primary Weapon\\Player 4":{"note":"","data":["80164C4D 00C8"],"options":null},"Infinite Shields\\Player 1":{"note":"","data":["801635F5 00C8"],"options":null},"Infinite Shields\\Player 2":{"note":"","data":["80163D65 00C8"],"options":null},"Infinite Shields\\Player 3":{"note":"","data":["801644D5 00C8"],"options":null},"Infinite Shields\\Player 4":{"note":"","data":["80164C45 00C8"],"options":null},"Infinite Turbos\\Player 1":{"note":"","data":["801635CB 0003","801635CF 0003"],"options":null},"Infinite Turbos\\Player 2":{"note":"","data":["80163D3B 0003","80163D3F 0003"],"options":null},"Infinite Turbos\\Player 3":{"note":"","data":["801644AB 0003","801644AF 0003"],"options":null},"Infinite Turbos\\Player 4":{"note":"","data":["80164C1B 0003","80164C1F 0003"],"options":null},"Mode Select":{"note":"","data":["80095F6F 00??"],"options":{"Anti-Gravity":"08","Anti-Gravity \u0026 Fish Eye Lens":"0A","Boulder":"01","Boulder \u0026 Fish Eye Lens":"03","Boulder \u0026 Wireframe":"11","Fish Eye Lens":"02","Ghost Mode":"40","Magnify":"04","Stealth Mode":"20","Ugly Mode":"80","Wireframe":"10"}}},"FE94E570-E4873A9C-C:44":{"Have 1 Star\\Abdul":{"note":"","data":["80307333 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["8030732F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80307332 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80307331 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80307334 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80307330 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["8030732E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80307335 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80307336 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["80209881 0000","802047A3 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802047A7 0000","8020B749 0000"],"options":null},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EF57B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0209737 0000","80209737 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020B5FF 0000","8020B5FF 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810ADADC 3F80"],"options":null}},"FEE97010-4E94A9A0-C:50":{"Access All\\Cars,Tracks \u0026 Golg Trophies":{"note":"","data":["50000402 0000","81043AA0 FFFF"],"options":null},"Access All\\Platinum Trophies":{"note":"","data":["8102F70C FFFF","8102F70E FFFF"],"options":null},"Access\\Galage '88 UFO Car":{"note":"","data":["810E2C20 0028"],"options":null},"Always 1st":{"note":"","data":["810569B4 0001"],"options":null},"Always Engine Class S":{"note":"","data":["81043AB0 0000"],"options":null},"Easy Mode":{"note":"","data":["81057B10 0001"],"options":null},"Easy Win":{"note":"","data":["810569BA 0007"],"options":null},"Freeze Lap Timer":{"note":"Select Car Attack, And You'll Have All The Cars At Your Disposal For A Quick Spin !!","data":["810569DE 014D"],"options":null},"Infinite Time":{"note":"","data":["811280B2 0C00"],"options":null},"Laps to Race":{"note":"Here you can choose how many laps are in the race, 1-9. Do not use with Option 7-9.","data":["8111CA16 00??"],"options":{"1 Lap to Race":"01","2 Laps to Race":"02","3 Laps to Race":"03","4 Laps to Race":"04","5 Laps to Race":"05","6 Laps to Race":"06","7 Laps to Race":"07","8 Laps to Race":"08","9 Laps to Race":"09"}},"Ultra 64":{"note":"Pick any car, beat stage 8: RR Extreme Extra and the UFO car is yours to drive!","data":["8113DDBA 0018"],"options":null}},"FF14C1DA-167FDE92-C:45":{"In-Game Cheats\\Access Cheat menu":{"note":"","data":["50000504 0000","80100778 0001"],"options":null},"In-Game Cheats\\Enable\\All Items":{"note":"To access simply pause in game play \u0026 then unpause.","data":["8010075C 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Invincibility":{"note":"","data":["802A9C88 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Monsters":{"note":"","data":["802A9DFB 00??"],"options":{"Are Active":"00","Are Gone":"01"}},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A4FF6 0064","812A503E 0064","812A504E 00C8","812A5038 1900","812A5008 04B0","812A503A 0640","812A4FD8 0960","812A503C 0190"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Keys":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A4FF3 000F"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A5067 0001","50000E02 0000","812A4FAC 03E7"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Infinite Health (All Levels)":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on Single-Player, Co-Operative and DUKEMATCH, All Levels.","data":["8024C747 0064","802A4FA9 0064"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5382 0064","812A53CA 0064","812A53DA 00C8","812A53C4 1900","812A5394 04B0","812A53C6 0640","812A5364 0960","812A53C8 0190"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A53F3 0001","50000E02 0000","812A5338 03E7"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on DUKEMATCH, All Levels.","data":["8024AE2F 0064","802A5335 0064"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A570E 0064","812A5756 0064","812A5766 00C8","812A5750 1900","812A5720 04B0","812A5752 0640","812A56F0 0960","812A5754 0190"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A577F 0001","50000E02 0000","812A56C4 03E7"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 4 on DUKEMATCH, All Levels.","data":["8024A98B 0064","802A56C1 0064"],"options":null},"Single-Player (All Levels)\\Have All\\Items \u0026 Infinite Use on all levels":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of. Just press D-Pad Up or D-Pad Down to enable.","data":["812A4C4C 0960","812A4C6A 0064","812A4C7C 04B0","812A4CAC 1900","812A4CAE 0640","812A4CB0 0190","812A4CB2 0064","812A4CC2 00C8"],"options":null},"Single-Player (All Levels)\\Have All\\Keys":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A4C67 000F"],"options":null},"Single-Player (All Levels)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000B01 0000","802A4CD9 0001","50000C02 0000","812A4C20 03E7"],"options":null},"Single-Player (All Levels)\\Have Infinite Health (All Levels)":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels and does what it says on the tin. Infinite health for player 1, All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["80246683 0064","8026DE7B 0064","802A4C1D 0064"],"options":null}},"FF2F2FB4-D161149A-C:45":{"Always Place 1st":{"note":"","data":["8015025B 0001"],"options":null},"Car Upgrades\\'63 Muscle Car":{"note":"","data":["8015065F 0005"],"options":null},"Car Upgrades\\All-Terrain Vehicle":{"note":"","data":["8015066F 0004"],"options":null},"Car Upgrades\\Devastator":{"note":"","data":["80150667 0005"],"options":null},"Car Upgrades\\Italia P69":{"note":"","data":["8015066B 0005"],"options":null},"Car Upgrades\\La Bomba":{"note":"","data":["80150663 0005"],"options":null},"Car Upgrades\\Police Car":{"note":"","data":["80150677 0004"],"options":null},"Car Upgrades\\School Bus":{"note":"","data":["80150673 0004"],"options":null},"Infinite Time":{"note":"","data":["80150A6D 0045"],"options":null},"Play Level Modifier":{"note":"","data":["80150A83 00??"],"options":{"Appalachia":"0C","Arizona":"07","Beverly Hills":"04","Chicago":"0A","Cruise The USA":"0E","Death Valley":"06","Golden Gate Park":"00","Grand Canyon":"08","Indiana":"0B","Iowa":"09","LA Freeway":"05","Redwood Forest":"03","San Francisco":"01","US 101":"02","Washington DC":"0D"}},"Player 1\\Always First Place":{"note":"","data":["8015034B 0001"],"options":null},"Player 1\\Always Have Fastest Car":{"note":"","data":["8015033A 000C"],"options":null},"Player 1\\Gearbox Type Modifier":{"note":"","data":["80150333 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 1\\Lights \u0026 Sirens For Police Car \u0026 School Bus":{"note":"","data":["8115065A 0001","8114E4AA 0001"],"options":null},"Player 2\\Always First Place":{"note":"","data":["801506E7 0001"],"options":null},"Player 2\\Always Have Fastest Car":{"note":"","data":["801506D6 000C"],"options":null},"Player 2\\Gearbox Type Modifier":{"note":"","data":["801506CF 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 2\\Lights \u0026 Sirens For Police Car \u0026 School Bus":{"note":"","data":["811509F6 0001","8114E4C2 0001"],"options":null},"Stop Elapsed Time And No Traffic":{"note":"","data":["80150A69 0000"],"options":null},"Unlimited Time":{"note":"","data":["80150A68 0095","8015097D 0095"],"options":null}}} \ No newline at end of file +{"001A3BD0-AFB3DE1A-C:46":{"Access Level Select":{"note":"On the main menu Scroll down to make CHEATS visible to go into Level Select.For in-Game Cheats,Pause gameplay.","data":["810DD50C 8001"],"options":null},"Have\\All TARZAN Letters":{"note":"","data":["800DD515 00FF"],"options":null},"Have\\Coins Collected 100%":{"note":"","data":["800DD547 0064"],"options":null},"Have\\Full Portrait":{"note":"","data":["800DD514 00FF"],"options":null},"Have\\Level \u0026 Tokens Completed 100%":{"note":"","data":["800DD51F 0000","800DD520 0001","800DD521 0000"],"options":null},"Infinite\\Bonus Timer":{"note":"This is For All Timers on Bonus Levels","data":["801736DE 0025"],"options":null},"Infinite\\Green Weapon":{"note":"","data":["811921F6 0063"],"options":null},"Infinite\\Health":{"note":"","data":["81192320 0120"],"options":null},"Infinite\\Lives":{"note":"","data":["800DD542 00??"],"options":{"3 Lives":"03","99 Lives":"63"}},"Infinite\\Purple Weapon":{"note":"","data":["811921FA 0063"],"options":null},"Infinite\\Red Weapon":{"note":"","data":["811921F8 0063"],"options":null},"Press GS For\\Sabor Attacks\\Sabor 1 Hit Kill":{"note":"","data":["8924A23E 0001"],"options":null}},"0198A651-FC219D84-C:50":{"Team on the left of score board has 0 goals":{"note":"","data":["800375C7 0000"],"options":null},"Team on the left of score board has 15 goals":{"note":"","data":["800375C7 000F"],"options":null},"Team on the right of score board has 0 goals":{"note":"","data":["800375C3 0000"],"options":null},"Team on the right of score board has 15 goals":{"note":"","data":["800375C3 000F"],"options":null}},"02B1538F-C94B88D0-C:45":{"Found All Numbers":{"note":"","data":["810ACFB2 000C"],"options":null},"Have No Numbers":{"note":"Keep you kid busy for hours!!!","data":["810ACFB2 0000"],"options":null},"Infinite Strikes":{"note":"","data":["810A7A76 0000"],"options":null}},"02D8366A-6CABEF9C-C:50":{"Access All Bikes \u0026 Tracks":{"note":"","data":["810A7D16 0063"],"options":null},"Access All Weapons For All Modes":{"note":"","data":["50000E02 0000","811B9EFA 0505"],"options":null},"Always 1st":{"note":"","data":["810D7D96 0000"],"options":null},"Infinite Damage":{"note":"","data":["801C1257 0002"],"options":null},"Infinite Health\\To Bike":{"note":"","data":["811B9BB8 4270"],"options":null},"Infinite Health\\To Character":{"note":"","data":["811C0F90 4489"],"options":null},"Max Cash":{"note":"","data":["810D6FBA FFFF"],"options":null},"No Music Elsewhere":{"note":"","data":["810D61AA 0000"],"options":null},"No Music In Game":{"note":"","data":["810D61AE 0000"],"options":null}},"0304C48E-AC4001B8-C:45":{"Max Score":{"note":"","data":["81158440 05F5","81158442 E0FF"],"options":null},"Play As/Player 1":{"note":"","data":["801514F3 00??"],"options":{"Atomicat":"06","Bob Cat":"04","Hai Jinx":"00","Manx":"02","Muffy Dupont":"03","Pearl":"07","Smokey":"05","Sparky":"01"}},"Play As/Player 2":{"note":"","data":["80151503 00??"],"options":{"Atomicat":"06","Bob Cat":"04","Hai Jinx":"00","Manx":"02","Muffy Dupont":"03","Pearl":"07","Smokey":"05","Sparky":"01"}},"Play As/Player 3":{"note":"","data":["80151513 00??"],"options":{"Atomicat":"06","Bob Cat":"04","Hai Jinx":"00","Manx":"02","Muffy Dupont":"03","Pearl":"07","Smokey":"05","Sparky":"01"}},"Play As/Player 4":{"note":"","data":["80151523 00??"],"options":{"Atomicat":"06","Bob Cat":"04","Hai Jinx":"00","Manx":"02","Muffy Dupont":"03","Pearl":"07","Smokey":"05","Sparky":"01"}}},"033F4C13-319EE7A7-C:45":{"Fail Objectives To Complete Them":{"note":"","data":["810315B8 2402","810315BA 0011"],"options":null},"Go Solo In Multiplayer":{"note":"","data":["D00E0778 0042","801002B7 0001"],"options":null},"Have\\All\\Gadgets":{"note":"","data":["80112F6D 0001"],"options":null},"Have\\All\\Guns On All Levels":{"note":"Once you pick up a Gun You will have all weapons","data":["8105F224 0810","8105F226 0000","8105F228 2442","8105F22A 0001","81400000 3C02","81400002 0100","81400004 2442","81400006 0063","81400008 AE82","8140000A 0288","8140000C AE82","8140000E 0298","81400010 AE82","81400012 02A0","81400014 AE82","81400016 02A8","81400018 AE82","8140001A 02B0","8140001C AE82","8140001E 02C0","81400020 AE82","81400022 02C8","81400024 AE82","81400026 02D0","81400028 AE82","8140002A 02D8","8140002C AE82","8140002E 02E8","81400030 AE82","81400032 02F0","81400034 AE82","81400036 02F8","81400038 AE82","8140003A 0300","8140003C AE82","8140003E 0308","81400040 AE82","81400042 0310","81400044 AE82","81400046 0320","81400048 AE82","8140004A 0330","8140004C AE82","8140004E 0338","81400050 AE82","81400052 0350","81400054 AE82","81400056 0358","81400058 AE82","8140005A 0360","8140005C AE82","8140005E 0370","81400060 AE82","81400062 0378","81400064 AE82","81400066 0380","81400068 AE82","8140006A 0388","8140006C AE82","8140006E 0340","81400070 AE82","81400072 0348","81400074 AE82","81400076 0350","81400078 0801","8140007A 7C8C","8140007C A077","8140007E 01FC"],"options":null},"Have\\All\\Levels Unlocked":{"note":"For Single Player Mode Only","data":["81102EE6 0021"],"options":null},"Have\\All\\Skins + Everyone is Evil":{"note":"","data":["50005C0C 0000","800BF687 0081"],"options":null},"Have\\Tons Of Nightvision":{"note":"For Battery Only","data":["81064C82 1500"],"options":null},"Infinite\\Ammo On All Levels":{"note":"","data":["810648DC 2400"],"options":null},"Infinite\\Ammo On Clip":{"note":"","data":["810649AC 2400"],"options":null},"Infinite\\Time":{"note":"Underground Uprising","data":["8138EE3A 19B8"],"options":null},"Invincibility On All levels":{"note":"","data":["81112F68 0101"],"options":null},"Level select":{"note":"","data":["803B0E5F 0009"],"options":null},"Play Crate Yard Level":{"note":"","data":["80102EDF 0008"],"options":null},"Skip Intro":{"note":"","data":["D03B0E5F 0004","803B0E5F 0009"],"options":null},"Stop Bond From Going Downhill on Cold Reception":{"note":"Press L to Stop, \u0026 R to Go","data":["D10E0778 0020","803A8466 0001","D10E0778 0010","803A8466 0000"],"options":null},"Time Taken Clock At 0:00":{"note":"","data":["80102F02 0000"],"options":null}},"03571182-892FD06D-C:45":{"Infinite\\Continues":{"note":"","data":["8114738C 0009"],"options":null},"Infinite\\Dirt Rollout Rampage\\Player 1":{"note":"","data":["8017DFEB 0002"],"options":null},"Instant\\Win\\Barrier Ball\\Player 1":{"note":"","data":["8016EA97 0005"],"options":null},"Instant\\Win\\Pichu's Power Plant\\Player 1":{"note":"","data":["8016D64F 0050"],"options":null},"Instant\\Win\\Topsy Turvy\\Player 1":{"note":"","data":["80176887 0005"],"options":null},"Max Score":{"note":"","data":["D117F812 03E7","8117F812 03E7"],"options":null},"One Hit KO":{"note":"To Win you must get at least one hit or just return your pokemon.","data":["8014576F 0000","801457C7 0000","8014581F 0000"],"options":null},"Press R To Reset Time":{"note":"Press R To Reset Time","data":["801CE066 0010","81183ACC 0063"],"options":null},"Press R+L to KO Opponents":{"note":"Press R+L Activate","data":["D10CE066 0030","80145767 0000","D10CE066 0030","801457C7 0000","D10CE066 0030","8014576F 0000","D10CE066 0030","8014581F 0000"],"options":null},"Press Z\\for Max HP\\1st Pokemon":{"note":"This will give them Max HP when they are not in use. Just call a Pokemon out and he will then have Max HP. When your Pokemon faints, just press Z again and it will revive itIn Battle Only,Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","8114528E 00FF","D112B554 2000","81145290 00FF"],"options":null},"Press Z\\for Max HP\\2nd Pokemon\\Player 1":{"note":"This will give them Max HP when they are not in use. Just call a Pokemon out and he will then have Max HP. When your Pokemon faints, just press Z again and it will revive itIn Battle Only,Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","811452E6 00FF","D112B554 2000","811452E8 00FF"],"options":null},"Press Z\\for Max HP\\3rd Pokemon\\Player 1":{"note":"This will give them Max HP when they are not in use. Just call a Pokemon out and he will then have Max HP. When your Pokemon faints, just press Z again and it will revive itIn Battle Only,Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","8114533E 00FF","D112B554 2000","81145340 00FF"],"options":null},"Press Z\\for Max L.\\1st Pokemon\\Player 1":{"note":"Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","81145284 0063"],"options":null},"Press Z\\for Max L.\\2nd Pokemon\\Player 1":{"note":"Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","811452DC 0063"],"options":null},"Press Z\\for Max L.\\3rd Pokemon\\Player 1":{"note":"Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","81145334 0063"],"options":null}},"036897CE-E0D4FA54-C:45":{"All Items":{"note":"","data":["50002402 0202","810EC350 0001","50004601 0000","800EC3D1 0003"],"options":null},"Item Modifier Codes\\Position 01":{"note":"","data":["800EC350 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 02":{"note":"","data":["800EC351 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 03":{"note":"","data":["800EC352 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 04":{"note":"","data":["800EC353 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 05":{"note":"","data":["800EC354 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 06":{"note":"","data":["800EC355 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 07":{"note":"","data":["800EC356 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 08":{"note":"","data":["800EC357 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 09":{"note":"","data":["800EC358 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 10":{"note":"","data":["800EC359 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 11":{"note":"","data":["800EC35A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 12":{"note":"","data":["800EC35B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 13":{"note":"","data":["800EC35C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 14":{"note":"","data":["800EC35D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 15":{"note":"","data":["800EC35E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 16":{"note":"","data":["800EC35F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 17":{"note":"","data":["800EC360 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 18":{"note":"","data":["800EC361 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 19":{"note":"","data":["800EC362 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 20":{"note":"","data":["800EC363 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 21":{"note":"","data":["800EC364 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 22":{"note":"","data":["800EC365 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 23":{"note":"","data":["800EC366 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 24":{"note":"","data":["800EC367 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 25":{"note":"","data":["800EC368 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 26":{"note":"","data":["800EC369 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 27":{"note":"","data":["800EC36A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 28":{"note":"","data":["800EC36B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 29":{"note":"","data":["800EC36C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 30":{"note":"","data":["800EC36D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 31":{"note":"","data":["800EC36E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 32":{"note":"","data":["800EC36F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 33":{"note":"","data":["800EC370 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 34":{"note":"","data":["800EC371 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 35":{"note":"","data":["800EC372 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 36":{"note":"","data":["800EC373 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 37":{"note":"","data":["800EC374 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 38":{"note":"","data":["800EC375 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 39":{"note":"","data":["800EC376 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 40":{"note":"","data":["800EC377 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 41":{"note":"","data":["800EC378 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 42":{"note":"","data":["800EC379 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 43":{"note":"","data":["800EC37A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 44":{"note":"","data":["800EC37B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 45":{"note":"","data":["800EC37C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 46":{"note":"","data":["800EC37D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 47":{"note":"","data":["800EC37E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 48":{"note":"","data":["800EC37F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}}},"0375CF67-56A93FAA-C:4A":{"Always Have Retreat \u0026 Elem Pedra Opened":{"note":"Do not put this on until in-game or the game will freeze.","data":["D01A1312 0000","811A1312 0003"],"options":null},"Day Always 00":{"note":"","data":["811F008C 0000"],"options":null},"Finish All Levels":{"note":"","data":["81196126 5454","81196128 5140","8119612A 4555","8119612C 9514","8119612E 5515"],"options":null},"Hour Always":{"note":"","data":["801960CD 00??"],"options":{"(0 Hour - 24:00 PM - Midnight)":"00","(01:00 AM)":"01","(02:00 AM)":"02","(03:00 AM)":"03","(04:00 AM)":"04","(05:00 AM)":"05","(06:00 AM)":"06","(07:00 AM)":"07","(08:00 AM)":"08","(09:00 AM)":"09","(10:00 AM)":"0A","(11:00 AM)":"0B","(12:00 PM - Noon)":"0C","(13:00 - 1 PM)":"0D","(14:00 - 2 PM)":"0E","(15:00 - 3 PM)":"0F","(16:00 - 4 PM)":"10","(17:00 - 5 PM)":"11","(18:00 - 6 PM)":"12","(19:00 - 7 PM)":"13","(20:00 - 8 PM)":"14","(21:00 - 9 PM)":"15","(22:00 - 10 PM)":"16","(23:00 - 11 PM)":"17"}},"Infinite Goth":{"note":"","data":["8119610E FFFF"],"options":null},"Magnus\\Infinite HP":{"note":"","data":["811932B0 03E7"],"options":null},"Magnus\\Level 99":{"note":"","data":["801932AB 0063"],"options":null},"Magnus\\Max Agi":{"note":"","data":["811932BC 03E7"],"options":null},"Magnus\\Max Dex":{"note":"","data":["811932BE 3E77"],"options":null},"Magnus\\Max HP":{"note":"","data":["811932AE 03E7"],"options":null},"Magnus\\Max Int":{"note":"","data":["811932B8 03E7"],"options":null},"Magnus\\Max Mem":{"note":"","data":["811932BA 03E7"],"options":null},"Magnus\\Max Str":{"note":"","data":["811932B4 03E7"],"options":null},"Magnus\\Max Vit":{"note":"","data":["811932B6 03E7"],"options":null},"Max Goth":{"note":"","data":["8119610C 0098","8119610E 967F"],"options":null},"Open All Paths":{"note":"","data":["81196120 01FF","81196122 677F","81196124 FCFF"],"options":null}},"0414CA61-2E57B8AA-C:50":{"Everything Unlocked\\Save File 1":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8105892E FFFF"],"options":null},"Everything Unlocked\\Save File 2":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8105886E FFFF"],"options":null},"Everything Unlocked\\Save File 3":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8105898E FFFF"],"options":null},"Everything Unlocked\\Save File 4":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","810588CE FFFF"],"options":null},"In-Built Cheat Menu":{"note":"This code gives you all Cheats in Menu","data":["50002001 0000","800585A0 0001"],"options":null},"Infinite\\Ammo (All Levels)":{"note":"","data":["8006894B 0001"],"options":null},"Mod Section\\Cradle in multiplayer":{"note":"Puts the cradle graphic in the levels screen where the facility normally is in the multiplayer levels screen.Warning it doesn't allow you to enter the multiplayer levels screen,it should automatically Have\\selected cradle, which cannot be changed from the multiplayer menus","data":["8002666D 0092","8002666F 0093","80026677 0029","80026673 0008","803230C5 0052","803230C6 0041","803230C7 0044","803230C8 004C","803230C9 0045"],"options":null},"Mod Section\\Enemies Do Nothing":{"note":"","data":["80027E54 00FF"],"options":null},"Mod Section\\Enemy Options":{"note":"\"These Codes Are very very cool but in most places pointless ! But great fun, try then. But remember to deactivate them before coming to the end of the level, otherwise, there will be nothing/no one, to meet or do (:\"","data":["80032142 00??"],"options":{"Enemies Check Around Themselves":"FF","Enemies Come After You":"01","Enemies Move Around \u0026 Check":"97"}},"Mod Section\\Facility Back Zone In Multiplayer\\Part 1\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811E6554 45E4","811E6558 43D5","811E655C C5A7","811E657C 801C","811E657E 6774","811E5164 45E4","811E5168 C383","811E516C 4492","811E518C 801C","811E518E D574","811E78C0 45AD","811E78C4 C383","811E78C8 4440","811E78E8 801C","811E78EA E464","811E4D18 45D0","811E4D1C 4307","811E4D20 C4FB","811E4D40 801C","811E4D42 75EC","811E6738 45CD","811E673C C383","811E6740 43F4","811E6760 801C","811E6762 A0DC","811E5450 45C2","811E5454 4356","811E5458 C598","811E5478 801C","811E547A 6A74","811E5240 4608","811E5244 4307","811E5248 43DC","811E5268 801C","811E526A 962C","811E691C 4606","811E6920 4321","811E6924 449D","811E6944 801C","811E6946 CBEC","801ED447 008A","801ED4DB 008B","801ED56F 008C","801ED603 008D","801ED697 008E","801ED72B 008F","801ED7BF 007D","801ED853 007E","801ED443 002A","801ED4D7 002A","801ED56B 002A","801ED5FF 002A","801ED693 002A","801ED727 002A","801ED7BB 002A","801ED84F 002A","801ED449 0000","801ED4DD 0000","801ED571 0000","801ED605 0000","801ED699 0000","801ED72D 0000","801ED7C1 0000","801ED855 0000","801ED44D 0000","801ED4E1 0000","801ED575 0000","801ED609 0000","801ED69D 0000","801ED731 0000","801ED7C5 0000","801ED859 0000","801EB743 002A","801EB745 0068","811EB746 277F","811EB748 1000","811EB74A 0262","811EB7C2 0190","801EB7C5 0000","811EB7C6 0258"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 2\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811EB7C8 0000","811EB7CC FFFF","811EB7CE FFFF","811EB7D2 0000","801EB7D5 0000","801EB7DB 0000","811EB7E2 0000","801EB7E7 0000","801EB843 002A","801EB845 0068","811EB846 2780","811EB848 1000","811EB84A 0262","811EB8C2 0190","801EB8C5 0000","811EB8C6 0258","811EB8C8 0000","811EB8CC FFFF","811EB8CE FFFF","811EB8D2 0000","801EB8D5 0000","801EB8DB 0000","811EB8E2 0000","801EB8E7 0000","801EB943 002A","801EB945 0068","811EB946 2791","811EB948 1000","811EB94A 0262","811EB9C2 0190","801EB9C5 0000","811EB9C6 0258","811EB9C8 0000","811EB9CC FFFF","811EB9CE FFFF","811EB9D2 0000","801EB9D5 0000","801EB9DB 0000","811EB9E2 0000","801EB9E7 0000","801EBA43 002A","801EBA45 0068","811EBA46 2792","811EBA48 1000","811EBA4A 0262","811EBAC2 0190","801EBAC5 0000","811EBAC6 0258","811EBAC8 0000","811EBACC FFFF","811EBACE FFFF","811EBAD2 0000","801EBAD5 0000","801EBADB 0000","811EBAE2 0000","801EBAE7 0000","801EBB45 00A0","801EBC45 00A0","801EBD45 00A0","801EBE45 00A0","801EBB47 0075","801EBC47 0076","801EBD47 0077","801EBE47 0078","801EBBE7 0001","801EBCE7 0001","801EBDE7 0001","801EBEE7 0001","801EC247 0071","801ECD47 0072","801ECE47 0074","801ECF47 006C","801ED047 0079","801ED147 0083","D01EBFC5 005A","801EBFC5 0000","D11EBFC6 0000","811EBFC6 F333","D11EBFC8 03E8","811EBFC8 0000"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 3\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["D11EBFCA 0000","811EBFCA F0C4","D11EBFCE 4CCC","811EBFCE 000A","D11EBFD2 4CCC","811EBFD2 000A","D11EBFD4 0003","811EBFD4 0000","D11EBFD6 0000","811EBFD6 02C4","801EBFD9 0004","801EBFDB 0000","811EBFE2 0384","801EBFE7 0004","801EBF45 009E","801EBF47 0084","801EBF48 0010","801EC2D9 0000","801EC447 0085","801EC547 0086","811EA6B6 2743","811EA73E 0114","811EA7F2 0115","811EA8A6 00A3","811EA92E 009D","811EA9E2 00A4","811EAA96 00DA","811EAB1E 00DB","811EABD2 00DF","811EAC86 0130","811EAD0E 008D","811EADC2 012E","811EAE76 0111","811EAEFE 2740","811EAFB2 2741","811EB066 00A0","811EB0EE 009E","811EB1A2 009F","811EB256 274F","811EB2DE 2750","811EB392 0117","811EB446 0131","811EB4CE 008E","811EB582 0132","811EB636 00A1","811EB6BE 0119","811EA62E 00FA","801ED3DF 0000","801ED2DF 0001","D0024337 0007","80024337 001F"],"options":null},"Mod Section\\Freeze Unfreeze enemies":{"note":"Press C-Up To Freeze \u0026 C-Down To Unfreeze.","data":["D00572D1 0008","80027E5C 000F","D00572D1 0004","80027E5C 0000"],"options":null},"Mod Section\\Replace Cradle with Citadell hidden level":{"note":"","data":["80025E47 0029","8103DB6A D9B4","8103DB70 3F44","8103DB72 BDEA","8103DB74 3F80","8103DB76 0000","8103DB78 4219","8103DB7A D89D","81058EC0 C470"],"options":null},"Mod Section\\Secret Island on Dam Level":{"note":"For the above code to work,Get to the 2nd guard tower \u0026 go down the ladder on the left hand side \u0026 to the end of the Dock, Press L \u0026 GS and you will be transfered in the water. Just keep walking straight \u0026 you will get to it. Obviously you can't actually climb ladders or anything, you will simply walkthrough anything on that Part, if you want to walk back to the Dock, when you come near it click the cheat back on \u0026 keep pressing L \u0026 GS untill you are back on it.","data":["D004C2D1 0020","800BA78D 0050","880BA78D 0000"],"options":null}},"04DAF07F-0D18E688-C:45":{"Cheat Menu\\All Weapons Enabled":{"note":"","data":["801CC8B9 0001","801CC925 0001","801CD985 0001","801CDA81 0001","801CDB15 0001","801CDB17 0001","801CDB49 0001","801CE479 0001","801CE481 0001","801CE4ED 0001","801CF635 0001"],"options":null},"Cheat Menu\\Cheat Menu Enabled":{"note":"","data":["801CE4E8 0001"],"options":null},"Cheat Menu\\Have All Game Type \u0026 Other":{"note":"","data":["810E16BE FFFF"],"options":null},"Cheat Menu\\Have All Weapons":{"note":"","data":["811CE470 FFFF"],"options":null},"Enable Debug Menu":{"note":"","data":["800DF990 0001"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810A1E74 A65B"],"options":null},"Invincibility":{"note":"","data":["800DEEC3 0001"],"options":null},"Time Always 00:00":{"note":"","data":["801A19C6 0000"],"options":null}},"0549765A-93B9D042-C:4A":{"Have 6 Carrots":{"note":"","data":["80160659 007E"],"options":null},"Have All\\Collectibles\\Stage 1":{"note":"","data":["80160650 0014"],"options":null},"Have All\\Collectibles\\Stage 2":{"note":"","data":["80160651 0014"],"options":null},"Have All\\Collectibles\\Stage 3":{"note":"","data":["80160652 0014"],"options":null},"Have All\\Collectibles\\Stage 4":{"note":"","data":["80160653 0014"],"options":null},"Have All\\Collectibles\\Stage 5":{"note":"","data":["80160654 0014"],"options":null},"Have All\\Collectibles\\Stage 6":{"note":"","data":["80160655 0014"],"options":null},"Have All\\Costumes":{"note":"","data":["8016065A 00FE"],"options":null},"Have All\\Levels":{"note":"","data":["80160648 003F"],"options":null},"Infinite Health":{"note":"","data":["80187BBD 000F"],"options":null},"Max Collectable Items":{"note":"","data":["80160641 0014"],"options":null},"Press L To levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0187BF5 0020","81187B20 4200"],"options":null}},"0553AE9D-EAD8E0C1-C:45":{"1 Hit to Kill Opponent\\Player 1":{"note":"","data":["D10B6354 42C8","810B6354 4080"],"options":null},"1 Hit to Kill Opponent\\Player 2":{"note":"","data":["D10B6170 42C8","810B6170 4080"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["810B6170 42C8"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["810B6354 42C8"],"options":null},"Opponent Has No Energy\\Player 1":{"note":"","data":["810B6354 C080"],"options":null},"Opponent Has No Energy\\Player 2":{"note":"","data":["810B6170 C080"],"options":null},"Player 1 Never Wins":{"note":"","data":["800C0C03 0000"],"options":null},"Player 2 Never Wins":{"note":"","data":["800C0C05 0000"],"options":null},"Unlock Titan Difficulty Level":{"note":"","data":["810BF752 0001"],"options":null}},"056EAB63-C215FCD5-C:4A":{"Infinite\\Energy\\Player 1":{"note":"","data":["81224DC4 00FF"],"options":null},"Infinite\\Energy\\Player 2":{"note":"","data":["81224DC6 00FF"],"options":null},"Infinite\\Time":{"note":"","data":["81224DCC 00FF"],"options":null},"Never Wins\\Player 1":{"note":"","data":["80224DB5 0000"],"options":null},"Never Wins\\Player 2":{"note":"","data":["80224DB7 0000"],"options":null}},"0578F24F-9175BF17-C:4A":{"Car Select":{"note":"","data":["D00F5180 0000","800F5180 00??"],"options":{"Chevrolet Camaro":"03","Chrysler Jeep Jeepster (Prototype)":"08","Default":"00","Dodge Viper":"04","Donkey In Glass Box":"0E","Ferrari F40":"07","Hotdog":"0A","Hummer H1":"05","Jeep Wrangler":"02","McLaren F1":"09","Mitsubishi Eclipse":"01","Nintendo 64 Logo":"0C","Nintendo Power Car":"0B","Porsche 911 Turbo":"06","Taco":"0D"}},"Infinite\\Max Acceleration\\Player 1":{"note":"","data":["800F518D 0005"],"options":null},"Infinite\\Max Acceleration\\Player 2":{"note":"","data":["800F5379 0005"],"options":null},"Infinite\\Max Acceleration\\Player 3":{"note":"","data":["800F5565 0005"],"options":null},"Infinite\\Max Acceleration\\Player 4":{"note":"","data":["800F5751 0005"],"options":null},"Infinite\\Max Handling\\Player 1":{"note":"","data":["800F518C 0005"],"options":null},"Infinite\\Max Handling\\Player 2":{"note":"","data":["800F5378 0005"],"options":null},"Infinite\\Max Handling\\Player 3":{"note":"","data":["800F5564 0005"],"options":null},"Infinite\\Max Handling\\Player 4":{"note":"","data":["800F5750 0005"],"options":null},"Infinite\\Max Money\\Player 1":{"note":"","data":["800F5185 000F"],"options":null},"Infinite\\Max Money\\Player 2":{"note":"","data":["800F5371 000F"],"options":null},"Infinite\\Max Money\\Player 3":{"note":"","data":["800F555D 000F"],"options":null},"Infinite\\Max Money\\Player 4":{"note":"","data":["800F5749 000F"],"options":null},"Infinite\\Max Top Speed\\Player 1":{"note":"","data":["800F518E 0005"],"options":null},"Infinite\\Max Top Speed\\Player 2":{"note":"","data":["800F537A 0005"],"options":null},"Infinite\\Max Top Speed\\Player 3":{"note":"","data":["800F5566 0005"],"options":null},"Infinite\\Max Top Speed\\Player 4":{"note":"","data":["800F5752 0005"],"options":null},"Infinite\\Nitro\\Player 1":{"note":"","data":["800F518F 0009"],"options":null},"Infinite\\Nitro\\Player 2":{"note":"","data":["800F537B 0009"],"options":null},"Infinite\\Nitro\\Player 3":{"note":"","data":["800F5567 0009"],"options":null},"Infinite\\Nitro\\Player 4":{"note":"","data":["800F5753 0009"],"options":null},"Laps 2 Race":{"note":"","data":["80118760 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"[Press F9]\\All Cars (All Modes)":{"note":"","data":["880E99CB 000E","881023B1 000E"],"options":null},"[Press F9]\\Jump To Season 6":{"note":"","data":["881023A8 0005"],"options":null}},"0684FBFB-5D3EA8A5-C:45":{"All levels complete":{"note":"","data":["800D13C4 000C","800D13C5 000A","800D13C6 000A","800D13C7 000A","800D13C8 000A","800D13C9 000A"],"options":null},"Infinite\\\u0026 Max Minerals":{"note":"","data":["50000C04 0000","810B1D46 FFFF","50000C04 0000","810B1D44 3B9A","50000C04 0000","810B1D46 C9FF"],"options":null},"Infinite\\\u0026 Max Vespene Gas":{"note":"","data":["50000C04 0000","810B1D76 FFFF","50000D04 0000","810B1D74 3B9A","50000D04 0000","810B1D76 C9FF"],"options":null}},"07861842-A12EBC9F-C:45":{"Always Low Temp":{"note":"","data":["810E4F98 0000","810E4F9A 0000"],"options":null},"Auto-Pilot Always On Turbo (Original Excitebike Mode)":{"note":"","data":["810E3142 19AA"],"options":null},"Earthquake Mode":{"note":"","data":["810D7010 3AD0"],"options":null},"Fast\\Movement (Drones)":{"note":"","data":["800D9D55 00A0"],"options":null},"Fast\\Movement (Player)":{"note":"","data":["800D9D65 00AF"],"options":null},"Max Stunt Points":{"note":"","data":["810E4D18 0098","810E4D1A 967F"],"options":null},"No\\Collision Drivers":{"note":"","data":["800D9D34 0040"],"options":null},"No\\Overheating":{"note":"","data":["800CA984 00C3"],"options":null},"Power Turbo":{"note":"","data":["800CA99C 0040","800CA99D 00E0"],"options":null},"Sixty Frames":{"note":"Use Glide64 while hoping for full speed.","data":["800CDD6F 0000"],"options":null},"Slow\\Movement (Drones)":{"note":"","data":["800D9D55 0060"],"options":null},"Slow\\Movement (Player)":{"note":"","data":["800D9D65 0060"],"options":null},"Steering Control":{"note":"","data":["800C9E50 0040"],"options":null},"Super Speed For All":{"note":"","data":["800CA9A0 0040","800CA9A1 0070"],"options":null},"Unlock\\Difficulties \u0026 All Special Tracks":{"note":"","data":["810F2D50 FFFF"],"options":null},"Unlock\\Silver \u0026 Gold Cup":{"note":"","data":["810F2D4E 0003"],"options":null}},"079501B9-AB0232AB-C:4A":{"All Equipment Registered":{"note":"","data":["50001402 0000","810F40D8 FFFF"],"options":null},"All Equipment Unhighlighted":{"note":"","data":["50001402 0000","810F4100 FFFF"],"options":null},"All Equipment Unlocked":{"note":"","data":["50001402 0000","810F40B0 FFFF"],"options":null},"All Help Notes Available For Player 1":{"note":"","data":["50000602 0000","810F409C FFFF"],"options":null},"All Stuff Available For Player 1":{"note":"This modifies your save file. That will make all the multiplayer stages available, as well as unlocking every part. The actual breakdown is:","data":["50003802 0000","810F4230 FFFF"],"options":null},"Side Invincible\\Player 1":{"note":"","data":["811FC00C 447A"],"options":null},"Side Invincible\\Player 2":{"note":"","data":["811FC034 447A"],"options":null}},"07A69D01-9A7D41A1-C:50":{"Have 6 Carrots":{"note":"","data":["80164519 007E"],"options":null},"Have All\\Collectibles\\Stage 1":{"note":"","data":["80164510 0014"],"options":null},"Have All\\Collectibles\\Stage 2":{"note":"","data":["80164511 0014"],"options":null},"Have All\\Collectibles\\Stage 3":{"note":"","data":["80164512 0014"],"options":null},"Have All\\Collectibles\\Stage 4":{"note":"","data":["80164513 0014"],"options":null},"Have All\\Collectibles\\Stage 5":{"note":"","data":["80164514 0014"],"options":null},"Have All\\Collectibles\\Stage 6":{"note":"","data":["80164515 0014"],"options":null},"Have All\\Costumes":{"note":"","data":["8016451A 00FE"],"options":null},"Have All\\Levels":{"note":"","data":["80164508 003F"],"options":null},"Infinite Health":{"note":"","data":["8018BA7D 000F"],"options":null},"Max Collectable Items":{"note":"","data":["80164501 0014"],"options":null},"Press L To levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D018BAB5 0020","8118B9E0 4200"],"options":null}},"07C1866E-5775CCDE-C:50":{"Max Constructor Points":{"note":"","data":["8103A8F8 03E7"],"options":null},"Max Driver Points":{"note":"","data":["8103A8F6 03E7"],"options":null}},"07F3B276-EC8F3D39-C:45":{"Have All\\Races":{"note":"","data":["81088756 FFFF"],"options":null},"Have All\\Tracks":{"note":"","data":["8108875A FFFF"],"options":null},"Infinite Credits":{"note":"","data":["8008D659 0063"],"options":null},"Unlock All Characters \u0026 Extra Cheats":{"note":"","data":["81088750 FFFF","81088752 FFFF"],"options":null}},"08123595-0510F1DE-C:45":{"1-Hit Death\\Player 1":{"note":"","data":["D01502AA 0064","811502AA 0100"],"options":null},"1-Hit Death\\Player 2":{"note":"","data":["D0152926 0064","81152926 0100"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["811502AA 6400"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["811502AA 6400"],"options":null},"Infinite Jetpack\\Player 1":{"note":"","data":["811502B2 3200"],"options":null},"Infinite Jetpack\\Player 2":{"note":"","data":["8115292E 3200"],"options":null},"Infinite Shield\\Player 1":{"note":"","data":["811502AE 6400"],"options":null},"Infinite Shield\\Player 2":{"note":"","data":["8115292A 6400"],"options":null},"Needs 1 Match to Win\\Player 1":{"note":"","data":["D015029B 0000","8015029B 0001"],"options":null},"Needs 1 Match to Win\\Player 2":{"note":"","data":["D0152917 0000","80152917 0001"],"options":null},"Never Wins\\Player 1":{"note":"","data":["8015029B 0000"],"options":null},"Never Wins\\Player 2":{"note":"","data":["80152917 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["801ABB2B 00??"],"options":{"ChainSaw":"0D","Mutilator":"0C","PainMaster":"0B","She-Freak":"0A"}}},"0894909C-DAD4D82D-C:45":{"Big\\Glove Mode":{"note":"","data":["800F401D 0001"],"options":null},"Big\\Head Mode":{"note":"","data":["800F401C 0001"],"options":null},"Infinite\\Creation Points":{"note":"","data":["81063742 0064"],"options":null},"Player 1\\Character Modifier":{"note":"","data":["800EC6F3 00??"],"options":{"Alameda":"23","Ali":"00","Ang":"2B","Argnello":"13","Barclay":"32","Bazzel":"44","Botti":"2D","Bristov":"2C","Bunch":"3F","Butterbean":"07","Carr":"0E","Coallier":"49","Created Boxer":"1A","Creater Boxer":"1B","De La Hoya":"08","Dempsey":"1C","Dexter":"42","Di Ricco":"36","Duran":"0B","Eckhardt":"27","Eklund":"46","F. Sandoval":"2A","Frazier":"01","Garrett":"31","Giolito":"30","Greenberg":"3B","Hagler":"0A","Hasson":"22","Holmes":"02","Holyfield":"03","Hopra":"26","Hsu":"43","IUppa":"1E","K. Orr":"1D","Kelley":"17","Lajoie":"3A","Leonard":"09","Lewis":"04","Lupidi":"34","M. Broadhurst":"38","Manfredy":"16","Mayweather":"15","Moskey":"11","O'Grady":"14","Parker":"28","Perone":"3D","Philippine":"37","Pole":"21","Pryor":"12","Quartey":"0D","Quinn":"3C","Random":"19","Reid":"10","Romero":"18","Ruiz":"29","S. Broadhurst":"20","S. Orr":"2E","S. Sandoval":"1F","Scott":"25","Spinks":"06","St. Aubyn":"40","Tallarico":"47","Thompson":"45","Tool":"3E","Tua":"05","Vargas":"0F","W. Aguitar":"35","Wahlberg":"24","Weaver":"39","Wells":"41","Whitaker":"0C","Wynne":"33","Zarifes":"2F","de Leon":"48"}},"Player 1\\Infinite\\Health":{"note":"","data":["8106B974 42C8","8106B976 0000"],"options":null},"Player 1\\Max\\Power":{"note":"","data":["8106B980 0000","8106B982 0BB2"],"options":null},"Player 1\\No Health":{"note":"","data":["8106B974 0000","8106B976 0000"],"options":null},"Player 1\\No Power":{"note":"","data":["8106B980 0000","8106B982 0000"],"options":null},"Player 1\\Power Punch After 1st Punch":{"note":"","data":["8006B983 0064"],"options":null},"Player 2\\Character Modifier":{"note":"","data":["800EC6F7 00??"],"options":{"Alameda":"23","Ali":"00","Ang":"2B","Argnello":"13","Barclay":"32","Bazzel":"44","Botti":"2D","Bristov":"2C","Bunch":"3F","Butterbean":"07","Carr":"0E","Coallier":"49","Created Boxer":"1A","Creater Boxer":"1B","De La Hoya":"08","Dempsey":"1C","Dexter":"42","Di Ricco":"36","Duran":"0B","Eckhardt":"27","Eklund":"46","F. Sandoval":"2A","Frazier":"01","Garrett":"31","Giolito":"30","Greenberg":"3B","Hagler":"0A","Hasson":"22","Holmes":"02","Holyfield":"03","Hopra":"26","Hsu":"43","IUppa":"1E","K. Orr":"1D","Kelley":"17","Lajoie":"3A","Leonard":"09","Lewis":"04","Lupidi":"34","M. Broadhurst":"38","Manfredy":"16","Mayweather":"15","Moskey":"11","O'Grady":"14","Parker":"28","Perone":"3D","Philippine":"37","Pole":"21","Pryor":"12","Quartey":"0D","Quinn":"3C","Random":"19","Reid":"10","Romero":"18","Ruiz":"29","S. Broadhurst":"20","S. Orr":"2E","S. Sandoval":"1F","Scott":"25","Spinks":"06","St. Aubyn":"40","Tallarico":"47","Thompson":"45","Tool":"3E","Tua":"05","Vargas":"0F","W. Aguitar":"35","Wahlberg":"24","Weaver":"39","Wells":"41","Whitaker":"0C","Wynne":"33","Zarifes":"2F","de Leon":"48"}},"Player 2\\Infinite\\Health":{"note":"","data":["8106BA7C 42C8","8106BA7E 0000"],"options":null},"Player 2\\Max\\Power":{"note":"","data":["8106BA88 0000","8106BA8A 0BB2"],"options":null},"Player 2\\No Health":{"note":"","data":["8106BA7C 0000","8106BA7E 0000"],"options":null},"Player 2\\No Power":{"note":"","data":["8106BA88 0000","8106BA8A 0000"],"options":null},"Player 2\\Power Punch After 1st Punch":{"note":"","data":["8006BA8B 0064"],"options":null},"Ring Modifier":{"note":"","data":["800EC703 00??"],"options":{"Caesars Palace":"01","Ecko Sports Arena":"02","Great Western Forum":"00","International Arena":"03","Knockout Kings Arena":"08","Local 440":"04","Roppongi Palace":"06","The Colosseum":"05","Wembley Arena":"07"}},"Stop Timer":{"note":"","data":["81067546 001C"],"options":null}},"08D49262-03763D39-C:00":{"God Mode":{"note":"","data":["80774EB7 00??"],"options":{"Off":"00","On":"01"}}},"08FFA4B7-01F453B6-C:45":{"All Boards Complete":{"note":"","data":["50001802 0000","810B3578 0001"],"options":null},"Always 1st/Low Time":{"note":"","data":["81350C02 0000","80350C17 0063"],"options":null},"Free Ride Complete\\Stage 1-Boarder":{"note":"","data":["800B357A 0001"],"options":null},"Free Ride Complete\\Stage 1-Skier":{"note":"","data":["800B3578 0001"],"options":null},"Free Ride Complete\\Stage 2-Boarder":{"note":"","data":["800B3586 0001"],"options":null},"Free Ride Complete\\Stage 2-Skier":{"note":"","data":["800B3584 0001"],"options":null},"Free Ride Complete\\Stage 3-Boarder":{"note":"","data":["800B3592 0001"],"options":null},"Free Ride Complete\\Stage 3-Skier":{"note":"","data":["800B3590 0001"],"options":null},"Free Ride Complete\\Stage 4-Boarder":{"note":"","data":["800B359E 0001"],"options":null},"Free Ride Complete\\Stage 4-Skier":{"note":"","data":["800B359C 0001"],"options":null},"Giant Slalom Complete\\Stage 1-Boarder":{"note":"","data":["800B3582 0001"],"options":null},"Giant Slalom Complete\\Stage 1-Skier":{"note":"","data":["800B3580 0001"],"options":null},"Giant Slalom Complete\\Stage 2-Boarder":{"note":"","data":["800B358E 0001"],"options":null},"Giant Slalom Complete\\Stage 2-Skier":{"note":"","data":["800B358C 0001"],"options":null},"Giant Slalom Complete\\Stage 3-Boarder":{"note":"","data":["800B359A 0001"],"options":null},"Giant Slalom Complete\\Stage 3-Skier":{"note":"","data":["800B3598 0001"],"options":null},"Giant Slalom Complete\\Stage 4-Boarder":{"note":"","data":["800B35A6 0001"],"options":null},"Giant Slalom Complete\\Stage 4-Skier":{"note":"","data":["800B35A4 0001"],"options":null},"Infinite Stamina":{"note":"","data":["8034F798 0012"],"options":null},"Lagfix":{"note":"Smoother 30fps only.","data":["8012CF52 000D"],"options":null},"Slalom Complete\\Stage 1-Boarder":{"note":"","data":["800B357E 0001"],"options":null},"Slalom Complete\\Stage 1-Skier":{"note":"","data":["800B357C 0001"],"options":null},"Slalom Complete\\Stage 2-Boarder":{"note":"","data":["800B358A 0001"],"options":null},"Slalom Complete\\Stage 2-Skier":{"note":"","data":["800B3588 0001"],"options":null},"Slalom Complete\\Stage 3-Boarder":{"note":"","data":["800B3596 0001"],"options":null},"Slalom Complete\\Stage 3-Skier":{"note":"","data":["800B3594 0001"],"options":null},"Slalom Complete\\Stage 4-Boarder":{"note":"","data":["800B35A2 0001"],"options":null},"Slalom Complete\\Stage 4-Skier":{"note":"","data":["800B35A0 0001"],"options":null}},"09465AC3-F8CB501B-C:50":{"Always Have Wallet Size":{"note":"","data":["801189FA 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C6A7D 0010","81119CBE 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["80119841 00FF","80119CB7 00??"],"options":{"Off":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C6A7D 0000","80119D6B 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["8002399C 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801189DE 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801189DF 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801189E0 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801189E1 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1850 0005","801EE290 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801189FA 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801189FB 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801189F9 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189F4 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189FC 30FF","811189FE FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801189D0 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801189D6 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801189DC 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["801189D4 0009"],"options":null},"Have\\Bombs":{"note":"","data":["801189CE 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["801189D8 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["801189CD 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["801189CC 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["801189CF 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["801189D2 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["801189D5 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["801189D9 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["801189DA 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["801189D1 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["801189D7 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["801189DD 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["801189DB 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["801189D3 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["801189E7 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["50000B01 0000","80118A00 0007","50000501 0000","80118A17 0009","80118A1F 0009","80118A21 0009","80118A24 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801189EC 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["801189E6 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801189E5 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801189EA 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801189E4 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118988 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118991 0008","80118992 0001","80118994 0001","8011898B 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801189F2 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["81119D24 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["80119D29 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["80119D2D 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D011BB37 0020","811D9410 40CB","D011BB37 0000","811D9C32 000D","801189C8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119D61 00??"],"options":{"English":"00","French":"02","German":"01"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["80118A27 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["80118A29 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["81118986 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["81119D20 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D011BB37 0020","811D9C32 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D011BB37 0020","811D9410 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C6A7D 0010","8011895F 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["81118964 ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["801189E2 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["801189E3 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["801189C8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["80118996 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119B7A 0000","81119B7C 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"096A40EA-8ABE0A10-C:45":{"Cheat Select":{"note":"","data":["8109ACBE ????"],"options":{"All Of The Above":"0FFF","All Pick-Ups Are Grapple":"0040","All Pick-Ups Are Green":"0010","All Pick-Ups Are Red":"0004","All Pick-Ups Are Yellow":"0008","Maintain Speed Off Track":"0001","No Chassis":"0400","No Driver":"0800","No Wheels":"0200","Pick-Ups Are Maximum":"0080","Reversed Rocket Racer Run Track":"0020","Rocket Cars":"0002","Turbo Mode":"0100"}},"Have All Tracks and Building Pieces":{"note":"","data":["812576D4 FFFF","812576D6 FFFF"],"options":null}},"09CC4801-E42EE491-C:4A":{"Infinite Fuel\\Gyrocopter":{"note":"","data":["80355211 0081"],"options":null},"Infinite Fuel\\Rocket Belt":{"note":"","data":["80355231 0081"],"options":null},"Infinite Photos":{"note":"","data":["81342F5E 0000"],"options":null},"Music Volume Select":{"note":"","data":["8025C454 00??"],"options":{"Max Volume":"04","Medium Volume":"02","No Music":"00"}},"Time Always 00'00'10":{"note":"This Cheat code is for All Events","data":["80355140 0001"],"options":null}},"09D53E16-3AB268B9-C:45":{"Almost Always Hit A Home Run":{"note":"","data":["80195714 0001"],"options":null},"Away Team\\Score 0":{"note":"Do not use with Away Team Scors 30","data":["801606B5 0000"],"options":null},"Away Team\\Score 30":{"note":"Do not use with Away Team Scors 30","data":["801606B5 001E"],"options":null},"Fast Game":{"note":"","data":["80195729 0001"],"options":null},"Home Team\\Score 0":{"note":"Do not use with Home Team Scors 30","data":["801606B7 0000"],"options":null},"Home Team\\Score 30":{"note":"Do not use with Home Team Scors 0","data":["801606B7 001E"],"options":null},"Increased Gravity":{"note":"","data":["80195727 0001"],"options":null},"Infinite\\Balls":{"note":"","data":["801606D0 0000"],"options":null},"Infinite\\Strikes":{"note":"","data":["801606D1 0000"],"options":null},"Low Gravity":{"note":"","data":["80195726 0001"],"options":null},"Slow Game":{"note":"","data":["8019572A 0001"],"options":null},"Stadium Modifier":{"note":"","data":["800DE7E5 00??"],"options":{"3 Rivers Stadium":"16","3com Park at Candle Stick Park":"06","Baltimore":"05","Bank One Ballpark":"03","Bush Stadium":"15","Cinergy Field":"12","Comiskey Park":"07","Coors Field":"08","Devil's Thumb Stadium":"1E","Dodger Stadium":"0F","Edison Into Field":"00","Fenway Park":"0A","Hubert Humphrey Metrodome":"1A","Jacobs Field":"0B","Kauffman Stadium":"0D","Milwaukee County Stadium":"04","Oakland Alameda Country Stadium":"10","Olympics Stadium":"09","Proplayer Stadium":"0C","Qualcomm Stadium at Jack Murphy Field":"11","Shea Stadium":"13","Skydome":"14","The Astrodome":"02","The Ball Park At Arlington":"01","The Kingdom":"0E","Tiger Stadium":"17","Tropicane Field":"18","Turner Field":"19","Veterans Stadium":"1B","Wrigley Field":"1C","Yankee Stadium":"1D"}}},"0A1667C7-293346A6-C:50":{"1 Win To Win\\Player 1":{"note":"","data":["D00C0983 0000","800C0983 0001"],"options":null},"1-Hit Death to Player 1\\Player 2":{"note":"","data":["D10B5EF0 42C8","810B5EF0 4080"],"options":null},"1-Hit Death to Player 2\\Player 1":{"note":"","data":["D10B60D4 42C8","810B60D4 4080"],"options":null},"Fight Forest Team":{"note":"Select Hardest Difficulty + Quest Mode","data":["810BF482 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["810B5EF0 42C8"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["810B60D4 42C8"],"options":null},"Invisibility\\Player 1":{"note":"","data":["810BF3A2 0001"],"options":null},"Join River Team":{"note":"Select Quest Mode","data":["810BF482 0001"],"options":null},"Needs 1 Win To Win\\Player 2":{"note":"","data":["D00C0985 0000","800C0985 0001"],"options":null},"P1 Never Wins\\Player 2":{"note":"","data":["800C0983 0000"],"options":null},"P2 Never Wins\\Player 1":{"note":"","data":["800C0985 0000"],"options":null},"Player 1 Has No Energy\\Player 2":{"note":"","data":["810B5EF0 C080"],"options":null},"Player 2 Has No Energy\\Player 1":{"note":"","data":["810B60D4 C080"],"options":null},"Unlock Titan Difficulty Level":{"note":"","data":["810BF4D2 0001"],"options":null}},"0A5D8F83-98C5371A-C:50":{"All Equipment Upgrades":{"note":"","data":["801E6F5D 0023","811E6FAA 201B","801E6F3C 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03DE37B 0000","801E6EF2 00??"],"options":{"Beneaf the Graveyard":"02","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Green Blobs":"71","Inside The Royal Palace of the Deku Kingdom 1":"4E","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House":"00","Outside Magic Hag's Potion Shop":"08","Outside The Royal Palace of the Deku Kingdom":"4A","Outside Tourist Information Southern Swamp":"06","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Waterfall Sothern Swamp":"7F"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801E6F72 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801E6F73 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801E6F74 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801E6F75 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801E6F76 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801E6F77 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801E6F65 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801E6F6B 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801E6F71 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Have Item Modifier":{"note":"","data":["801E6F70 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\All Masks":{"note":"","data":["811E6F78 3E39","811E6F7A 4745","811E6F7C 4032","811E6F7E 3A46","811E6F80 3842","811E6F82 4833","811E6F84 3C3D","811E6F86 373F","811E6F88 3634","811E6F8A 4341","811E6F8C 3B44","811E6F8E 4935"],"options":null},"Have\\Bombchu":{"note":"","data":["801E6F67 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801E6F66 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801E6F69 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801E6F68 0008"],"options":null},"Have\\Fire Arrow":{"note":"","data":["801E6F62 0002"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801E6F70 0010"],"options":null},"Have\\Have\\Ocarina of Time":{"note":"","data":["801E6F60 0000"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801E6F61 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801E6F6F 000F"],"options":null},"Have\\Ice Arrow":{"note":"","data":["801E6F63 0003"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801E6F6E 000E"],"options":null},"Have\\Light Arrow":{"note":"","data":["801E6F64 0004"],"options":null},"Have\\Magic Beans":{"note":"","data":["801E6F6A 000A"],"options":null},"Have\\Pictograph":{"note":"","data":["801E6F6D 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801E6F6C 000C"],"options":null},"Have\\QuestStatus Items":{"note":"","data":["801E6FAD 0005","811E6FAE F7CF"],"options":null},"Infinite\\Health":{"note":"","data":["811E6F26 03E7"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811E6F24 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"This is Infinite use of Bombs,Bombchus,Deku Sticks,Deku Nuts,Magic Beans,\u0026 Powder Kegs. But you must also put it's Have on to work.","data":["801E6F91 0063","50000801 0000","801E6F96 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801E6F29 0060","811E6F30 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811E6F2A 03E7"],"options":null},"Play As":{"note":"","data":["801E6F10 00??"],"options":{"- Fierce Deity Link":"00","Deku Link":"03","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03DE37B 0020","813F7658 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You have been warned.","data":["801E6F3C 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F30F6 0008","811E6F06 FFFD","D01F30F6 0004","811E6F06 0000","D01F30F6 0002","811E6F06 FFFE"],"options":null},"Use all C Buttons":{"note":"","data":["811EAE08 0000","811EAE0A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["803DE37A 0000","803F6BD5 0001","813F6BDA ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"0AA0055B-7637DF65-C:50":{"Infinite Time\\Basketball Gym":{"note":"","data":["8029F901 0042"],"options":null},"Infinite Time\\Cecil's Flying Toys":{"note":"","data":["802A5575 0042"],"options":null},"Infinite Time\\Flight Test Range":{"note":"","data":["802BA3A9 0042"],"options":null},"Infinite Time\\Slippery Slide":{"note":"","data":["802A7E8D 0042"],"options":null},"Infinite\\Atoms":{"note":"","data":["80159667 00C8"],"options":null},"Infinite\\Health":{"note":"","data":["80026DE3 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["80026DE7 0063"],"options":null},"Infinite\\Quarks":{"note":"","data":["80159663 00C8"],"options":null},"Tennis CPU Can't Score":{"note":"","data":["801D7B4B 0000"],"options":null}},"0AC61D39-ABFA03A6-C:50":{"Access all items In Inventory":{"note":"","data":["8111F8BE 1FFF"],"options":null},"Tickets\\Gold":{"note":"","data":["8111F8C8 FFFF"],"options":null},"Tickets\\Red":{"note":"","data":["8111F8C6 FFFF"],"options":null}},"0ADAECA7-B17F9795-C:45":{"Always Have Retreat \u0026 Elem Pedra Opened":{"note":"Do not put this on until in-game or the game will freeze.","data":["D01A1C92 0000","811A1C92 0003"],"options":null},"Day Always 00":{"note":"","data":["811F108C 0000"],"options":null},"Finish All Levels":{"note":"","data":["81196AA6 5454","81196AA8 5140","81196AAA 4555","81196AAC 9514","81196AAE 5515"],"options":null},"Hour Always":{"note":"","data":["80196A4D 00??"],"options":{"(0 Hour - 24:00 PM - Midnight)":"00","(01:00 AM)":"01","(02:00 AM)":"02","(03:00 AM)":"03","(04:00 AM)":"04","(05:00 AM)":"05","(06:00 AM)":"06","(07:00 AM)":"07","(08:00 AM)":"08","(09:00 AM)":"09","(10:00 AM)":"0A","(11:00 AM)":"0B","(12:00 PM - Noon)":"0C","(13:00 - 1 PM)":"0D","(14:00 - 2 PM)":"0E","(15:00 - 3 PM)":"0F","(16:00 - 4 PM)":"10","(17:00 - 5 PM)":"11","(18:00 - 6 PM)":"12","(19:00 - 7 PM)":"13","(20:00 - 8 PM)":"14","(21:00 - 9 PM)":"15","(22:00 - 10 PM)":"16","(23:00 - 11 PM)":"17"}},"Infinite Goth":{"note":"","data":["81196A8E FFFF"],"options":null},"Magnus\\Infinite HP":{"note":"","data":["81193C30 03E7"],"options":null},"Magnus\\Level 99":{"note":"","data":["80193C2B 0063"],"options":null},"Magnus\\Max Agi":{"note":"","data":["81193C3C 03E7"],"options":null},"Magnus\\Max Dex":{"note":"","data":["81193C3E 03E7"],"options":null},"Magnus\\Max HP":{"note":"","data":["81193C2E 03E7"],"options":null},"Magnus\\Max Int":{"note":"","data":["81193C38 03E7"],"options":null},"Magnus\\Max Mem":{"note":"","data":["81193C3A 03E7"],"options":null},"Magnus\\Max Str":{"note":"","data":["81193C34 03E7"],"options":null},"Magnus\\Max Vit":{"note":"","data":["81193C36 03E7"],"options":null},"Max Goth":{"note":"","data":["81196A8C 0098","81196A8E 967F"],"options":null},"Open All Paths":{"note":"","data":["81196AA0 01FF","81196AA2 677F","81196AA4 FCFF"],"options":null}},"0B58B8CD-B7B291D2-C:50":{"Have Alien Artifact":{"note":"","data":["8004DC8F 0001"],"options":null},"Infinite Ammo All Weapons":{"note":"","data":["50001102 0000","81048176 8000"],"options":null},"Infinite\\Fuel":{"note":"","data":["8004E46C 0050"],"options":null},"Infinite\\Greece":{"note":"","data":["81052B48 0098","81052B4A 967F"],"options":null},"Infinite\\Health":{"note":"","data":["8004DD1C 0002"],"options":null},"Item Modifier":{"note":"","data":["8004DC7F ????"],"options":{"All Items":"FFFF","Crank":"0040","Hangar Key":"0400","Heirglyph Map Piece":"0100","Howitzer Shells":"0002","Nothing":"0000","Windmill Cog":"0080"}},"Level Select":{"note":"","data":["80047FC3 00??"],"options":{"America":"03","Comet":"05","Greece":"01","Java":"02","Siberia":"04"}},"No Humans Killed":{"note":"","data":["8104819A 0000"],"options":null},"Press L To Wall Over Water, Climb Hills":{"note":"","data":["D0047609 0020","8104DD02 0808"],"options":null},"Weapon Select\\1st Position":{"note":"","data":["80048168 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\2nd Position":{"note":"","data":["80048169 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\3rd Position":{"note":"","data":["8004816A 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\4th Position":{"note":"","data":["8004816B 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\5th Position":{"note":"","data":["8004816C 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\6th Position":{"note":"","data":["8004816D 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\7th Position":{"note":"","data":["8004816E 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\8th Position":{"note":"","data":["8004816F 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}}},"0B6B4DDB-9671E682-C:45":{"Cheats Enabled Modifier":{"note":"","data":["8008F840 ????"],"options":{"Anyway (Race Circuits Backwards)":"0400","Big Wheels (Big Foot Cars)":"0040","Car Radio (Remote Control Cars)":"0100","Chopper (Top Down View)":"0200","Easy Money (You Get 1":"0008","Extra Resolution (Able To Change Resolution In Options Screen)":"0800","Fast Bucks (You Get 250":"0004","Skywalker (Hover Cars)":"0080","Smurfing (High Pitched Voices)":"0020","Trophies (Second And Third Championships Wins)":"0010"}},"Have\\Access All Trophies":{"note":"Also gives you all extra features in quick race \u0026 Trophy mode","data":["800BA9EB 0007","800BABFF 0007"],"options":null},"Have\\Always 1st":{"note":"","data":["800C1ED1 0001","800C1ED3 0001"],"options":null},"Have\\Easy Win":{"note":"Right After Start,Go, Quit Race, And you Have Won","data":["800BABFD 000A"],"options":null},"Have\\Infinite Max Cash":{"note":"","data":["810BABF4 3AFF","810BABF6 F454"],"options":null},"Have\\Infinite Supply Of Super Tires":{"note":"For All Cars","data":["5000220C 0000","810BACA8 0F0F","5000220C 0000","810BACAA 0F0F"],"options":null},"Have\\Lots Of Seasons":{"note":"","data":["810BABFA 03E7"],"options":null},"Have\\Max Race Points":{"note":"","data":["800BAC0E 00FF"],"options":null},"Have\\Max Upgrade":{"note":"For All Cars","data":["5000220C 0200","810BACA6 0270"],"options":null},"Race Options\\Laps To Race Select":{"note":"","data":["800A4599 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Race Options\\Race Direction Select":{"note":"","data":["800A4551 00??"],"options":{"Mirrored Normal":"02","Mirrored Reverse":"03","Normal":"00","Reverse":"01"}},"Race Options\\Track Select":{"note":"","data":["8008F9AD 00??"],"options":{"Area 51":"04","Chateau":"07","Docklands":"08","Lumber Mill":"03","Oilfields":"05","Rocket Base":"00","Ski Resort":"02","Temple":"01","Titus Park":"09","Tudor Village":"06"}},"Race Options\\View Select":{"note":"Select your View and then at start of Race press C-Up Button","data":["D00C20B1 0000","800C20C1 00??"],"options":{"Behind View":"01","Distant Behind View":"0B","Further Behind View":"02","Helicopter View":"FF","Inside Car":"00"}},"Special Category\\A Car [Mind Star 600]":{"note":"","data":["810BADDE 3D70","810BADE0 0F0F","810BADE2 0F0F"],"options":null},"Special Category\\B Car [Vertige Stallion]":{"note":"","data":["800BAD66 2378","810BAD68 0F0F","810BAD6A 0F0F"],"options":null},"Special Category\\C Car [Mind Star 200R]":{"note":"","data":["810BACD6 0A78","810BACD8 0F0F","810BACDA 0F0F"],"options":null}},"0B93051B-603D81F9-C:45":{"All 52 Gold Gems Collected":{"note":"","data":["8016F540 0003","8016F541 007E","8016F542 00FF","8016F543 00EF","8016F544 00FF","8016F545 007F","8016F546 00FF","8016F547 00FC"],"options":null},"All Stages \u0026 Chapters Unlocked":{"note":"","data":["8016F548 003B"],"options":null},"Infinite Health\\Marina":{"note":"","data":["810ED0E0 03E8"],"options":null},"Infinite Health\\Teran":{"note":"","data":["810F1D60 03E8"],"options":null},"Infinite\\Max Red Gems":{"note":"","data":["81175B66 270F"],"options":null},"Level Select":{"note":"To access this anytime during game, press L+R+Z to enable the menu. Press D-Pad Up / Down to move through the menu, D-Pad Left / Right to change level digits and then press Start to enter level. Don not do this whhile in pause mode (Start Button Pause) or the game will freeze.","data":["D10BC4E8 2030","800BC4E1 0004"],"options":null}},"0C02B3C5-9E2511B8-C:45":{"Widescreen":{"note":"","data":["8100F8C2 4036","8101E426 4036"],"options":null}},"0C41F9C2-01717A0D-C:46":{"Have 1 Star\\Abdul":{"note":"","data":["80307433 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["8030742F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80307432 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80307431 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80307434 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80307430 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["8030742E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80307435 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80307436 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["80209981 0000","802048A3 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802048A7 0000","8020B849 0000"],"options":null},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EF67B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0209837 0000","80209837 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020B6FF 0000","8020B6FF 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810ADBDC 3F80"],"options":null}},"0C581C7A-3D6E20E4-C:4A":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D51D0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112CD0E 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800EAFC8 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D51B0 0001","50001701 0000","800D51B8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D5440 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D547B 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D51A9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D51AA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D51AB 0003"],"options":null}},"0C5EE085-A167DD3E-C:45":{"Activate Cheat":{"note":"","data":["810A63C6 F5FF"],"options":null},"Arabian Flights\\Infinite Time":{"note":"","data":["810A593E FFFF"],"options":null},"Arabian Flights\\Max Tickets":{"note":"","data":["810A5930 FFFF","810A5932 FFFF","810A5934 FFFF","810A5936 FFFF","810A5938 FFFF","810A593A FFFF","810A593C FFFF"],"options":null},"Clowney Island\\Infinite Time":{"note":"","data":["810A590E FFFF"],"options":null},"Clowney Island\\Max Tickets":{"note":"","data":["810A5900 FFFF","810A5902 FFFF","810A5904 FFFF","810A5906 FFFF","810A5908 FFFF","810A590A FFFF","810A590C FFFF"],"options":null},"Food Fright\\Infinite Time":{"note":"","data":["810A595E FFFF"],"options":null},"Food Fright\\Max Tickets":{"note":"","data":["810A5950 FFFF","810A5952 FFFF","810A5954 FFFF","810A5956 FFFF","810A5958 FFFF","810A595A FFFF","810A595C FFFF"],"options":null},"Have All\\Machine Parts":{"note":"","data":["810A5960 FFFF"],"options":null},"Have All\\Vechicles":{"note":"","data":["810A5968 FFFF"],"options":null},"Infinite\\Max Health":{"note":"","data":["8109F702 000C","8109F706 000C"],"options":null},"Max\\Ticket Switches":{"note":"","data":["810A59A2 00C8"],"options":null},"Max\\Tinker Toys":{"note":"","data":["810A599E 270F"],"options":null},"Mine Blowing\\Infinite Time":{"note":"","data":["810A592E FFFF"],"options":null},"Mine Blowing\\Max Tickets":{"note":"","data":["810A5920 FFFF","810A5922 FFFF","810A5924 FFFF","810A5926 FFFF","810A5928 FFFF","810A592A FFFF","810A592C FFFF"],"options":null},"Paint Misbehaving\\Infinite Time":{"note":"","data":["810A591E FFFF"],"options":null},"Paint Misbehaving\\Max Tickets":{"note":"","data":["810A5910 FFFF","810A5912 FFFF","810A5914 FFFF","810A5916 FFFF","810A5918 FFFF","810A591A FFFF","810A591C FFFF"],"options":null},"Pyramid Scheme\\Infinite Time":{"note":"","data":["810A594E FFFF"],"options":null},"Pyramid Scheme\\Max Tickets":{"note":"","data":["810A5940 FFFF","810A5942 FFFF","810A5944 FFFF","810A5946 FFFF","810A5948 FFFF","810A594A FFFF","810A594C FFFF"],"options":null},"Whoopie World\\Infinite Time":{"note":"","data":["810A58FE FFFF"],"options":null},"Whoopie World\\Max Tickets":{"note":"","data":["810A58F0 FFFF","810A58F2 FFFF","810A58F4 FFFF","810A58F6 FFFF","810A58F8 FFFF","810A58FA FFFF","810A58FC FFFF"],"options":null}},"0C814EC4-58FE5CA8-C:45":{"Infinite Health":{"note":"","data":["81086BCA 0038","800BAF97 0007"],"options":null}},"0CAD17E6-71A5B797-C:50":{"All Tanx \u0026 All Campaigns":{"note":"","data":["50001370 0000","81120546 FFFF","50001370 0000","8112054A FFFF"],"options":null},"All Weapons \u0026 Invulnerable":{"note":"","data":["81121420 0101"],"options":null},"Infinite Edge Power":{"note":"","data":["811A8D20 000A","8111AD08 000A","811AC1E4 000A","811ACB7E 000A","811AAEB4 000A","811AE378 000A","811AD514 000A","811AA51C 000A"],"options":null},"Infinite Tank Credits":{"note":"","data":["8124AB3E 03E7"],"options":null},"Inincibility":{"note":"","data":["81121420 0100"],"options":null},"Level Select":{"note":"","data":["811150B8 0001"],"options":null},"Score Aid":{"note":"","data":["8124A152 FC9A"],"options":null}},"0CB81686-5FD85A81-C:45":{"Away Team\\Always Has The Ball":{"note":"","data":["810590A8 0001","810590AA 0000"],"options":null},"Enable\\Stadium\\4th And Incas":{"note":"","data":["800591A0 00FF"],"options":null},"Enable\\Stadium\\Alpha Blitz":{"note":"","data":["8005919E 00FF"],"options":null},"Enable\\Stadium\\Cosmodome":{"note":"","data":["800591A2 00FF"],"options":null},"Enable\\Stadium\\Dodge City":{"note":"","data":["80059198 00FF"],"options":null},"Enable\\Stadium\\EA Sports":{"note":"","data":["800591A3 00FF"],"options":null},"Enable\\Stadium\\Gridiron":{"note":"","data":["8005919D 00FF"],"options":null},"Enable\\Stadium\\Maddenstein":{"note":"","data":["800591A1 00FF"],"options":null},"Enable\\Stadium\\New Orleans":{"note":"","data":["800591A6 00FF"],"options":null},"Enable\\Stadium\\Nile High":{"note":"","data":["8005919F 00FF"],"options":null},"Enable\\Stadium\\Salvage Field":{"note":"","data":["8005919C 00FF"],"options":null},"Enable\\Stadium\\San Diego":{"note":"","data":["800591A7 00FF"],"options":null},"Enable\\Stadium\\Tampa Bay":{"note":"","data":["800591A5 00FF"],"options":null},"Enable\\Stadium\\Tib Bros":{"note":"","data":["8005919A 00FF"],"options":null},"Enable\\Stadium\\Tiberium":{"note":"","data":["8005919B 00FF"],"options":null},"Enable\\Stadium\\Tiburon":{"note":"","data":["800591A4 00FF"],"options":null},"Enable\\Stadium\\Xmas Rush":{"note":"","data":["80059199 00FF"],"options":null},"Enable\\Team\\All 60's":{"note":"","data":["800598CC 00FF"],"options":null},"Enable\\Team\\All 70's":{"note":"","data":["800598CD 00FF"],"options":null},"Enable\\Team\\All 80's":{"note":"","data":["800598CE 00FF"],"options":null},"Enable\\Team\\All 90's":{"note":"","data":["800598CF 00FF"],"options":null},"Enable\\Team\\Clows":{"note":"","data":["800598D7 00FF"],"options":null},"Enable\\Team\\Comets":{"note":"","data":["800598DF 00FF"],"options":null},"Enable\\Team\\EA Sports":{"note":"","data":["800598D3 00FF"],"options":null},"Enable\\Team\\Industrials":{"note":"","data":["800598DA 00FF"],"options":null},"Enable\\Team\\Junkyard Dogs":{"note":"","data":["800598D9 00FF"],"options":null},"Enable\\Team\\Madden 1999":{"note":"","data":["800598D0 00FF"],"options":null},"Enable\\Team\\Madden Millenium":{"note":"","data":["800598D1 00FF"],"options":null},"Enable\\Team\\Marshalls":{"note":"","data":["800598D5 00FF"],"options":null},"Enable\\Team\\Monsters":{"note":"","data":["800598DE 00FF"],"options":null},"Enable\\Team\\Mummies":{"note":"","data":["800598DC 00FF"],"options":null},"Enable\\Team\\NFL Millenium":{"note":"","data":["800598D2 00FF"],"options":null},"Enable\\Team\\Praetorians":{"note":"","data":["800598D8 00FF"],"options":null},"Enable\\Team\\Sugarbuzz":{"note":"","data":["800598DB 00FF"],"options":null},"Enable\\Team\\Tiburon":{"note":"","data":["800598D4 00FF"],"options":null},"Enable\\Team\\Toymakers":{"note":"","data":["800598D6 00FF"],"options":null},"Enable\\Team\\Vipers":{"note":"","data":["800598DD 00FF"],"options":null},"Have All Secret Codes In Menu":{"note":"","data":["81070788 FFFF","8107078A FFFF","8107078C FFFF","8107078E FFFF"],"options":null},"Home Team\\Always Has The Ball":{"note":"","data":["810590A8 0000","810590AA 0001"],"options":null},"Infinite\\Time-Outs Away Team":{"note":"","data":["8006FE6F 0003"],"options":null},"Infinite\\Time-Outs Home Team":{"note":"","data":["8006CE7F 0003"],"options":null},"Level 1\\200 Yards Of Total Offense Or More":{"note":"","data":["800707C1 0040"],"options":null},"Level 1\\3 Tackles Or More By One Player":{"note":"","data":["800707B7 0040"],"options":null},"Level 1\\Complete A 20 Yard Run Or Longer":{"note":"","data":["800707B1 0040"],"options":null},"Level 1\\Complete A 30 Yard Pass Or Longer":{"note":"","data":["800707B0 0040"],"options":null},"Level 1\\Create A Player And use Him In A Game":{"note":"","data":["800707BA 0040"],"options":null},"Level 1\\Defeat Green Bay In Snow At Lambeau Field":{"note":"","data":["800707B8 0040"],"options":null},"Level 1\\Defeat San Francisco In Rain At 3COM Park":{"note":"","data":["800707B9 0040"],"options":null},"Level 1\\Have A Minimium Of Three Players ON Team Catch One Pass":{"note":"","data":["800707C3 0040"],"options":null},"Level 1\\Hold Your Oppnent to 7 Points Or Less In a Game":{"note":"","data":["800707B3 0040"],"options":null},"Level 1\\Intercept At Least One Pass":{"note":"","data":["800707BF 0040"],"options":null},"Level 1\\Kick A 40 Yard Field Goal Or Longer":{"note":"","data":["800707B5 0040"],"options":null},"Level 1\\Kick A 40 Yard Punt Or Longer":{"note":"","data":["800707B6 0040"],"options":null},"Level 1\\Play A Exhibition Game In A QTR Length Other Than 5 Minutes":{"note":"","data":["800707BB 0040"],"options":null},"Level 1\\Play And Win One Game of The Tournment":{"note":"","data":["800707C2 0040"],"options":null},"Level 1\\Play a Exhibition Game In A Stadium Other Than The Default One":{"note":"","data":["800707BE 0040"],"options":null},"Level 1\\QB Passes For Two TDS Or More":{"note":"","data":["800707BC 0040"],"options":null},"Level 1\\Recover At Least One Fumble":{"note":"","data":["800707C0 0040"],"options":null},"Level 1\\Sack The Opposing QB":{"note":"","data":["800707BD 0040"],"options":null},"Level 1\\Score 21 Points Or More With A QTR Length Of 6 Minutes Or Less":{"note":"","data":["800707B2 0040"],"options":null},"Level 1\\Throw 0 Interceptions In A Game":{"note":"","data":["800707B4 0040"],"options":null},"Level 2\\100 Recption Yards Or Greater By One Player":{"note":"","data":["800707C6 0040"],"options":null},"Level 2\\100 Yards Of Rushing Or Greater By One Player":{"note":"","data":["800707C5 0040"],"options":null},"Level 2\\2 TDS Or More By One Receiver":{"note":"","data":["800707D7 0040"],"options":null},"Level 2\\3 Field Goals Or More By One Player":{"note":"","data":["800707C8 0040"],"options":null},"Level 2\\6 Receptions Or Greater By One Player":{"note":"","data":["800707CE 0040"],"options":null},"Level 2\\Commit No Fumbles In A Game":{"note":"","data":["800707D2 0040"],"options":null},"Level 2\\Complete a 60 Yard Pass Or Longer":{"note":"","data":["800707D4 0040"],"options":null},"Level 2\\Do Not Allow Your QB To Be Sacked In A Game":{"note":"","data":["800707D3 0040"],"options":null},"Level 2\\Have A RB Who Rushes For 3 TDS Or More":{"note":"","data":["800707CF 0040"],"options":null},"Level 2\\Hold Opposing Team To 150 Yards Total Offense Or Less":{"note":"","data":["800707D0 0040"],"options":null},"Level 2\\Play And Win A Pro Bowl Game As The AFC Team":{"note":"","data":["800707D6 0040"],"options":null},"Level 2\\Play And Win A Pro Bowl Game As The NFC Team":{"note":"","data":["800707D5 0040"],"options":null},"Level 2\\Play And Win One Franchise Mode Game":{"note":"","data":["800707CA 0040"],"options":null},"Level 2\\Play And Win One Season Mode Game With Modified Divisions":{"note":"","data":["800707CC 0040"],"options":null},"Level 2\\Play And Win One Season Mode Game Without Modified Divisions":{"note":"","data":["800707CB 0040"],"options":null},"Level 2\\Play And Win Two Games In A Tournment With The Same Team":{"note":"","data":["800707CD 0040"],"options":null},"Level 2\\QB Passes 300 Yards Or More":{"note":"","data":["800707C7 0040"],"options":null},"Level 2\\QB Passes For 4 TDS Or More":{"note":"","data":["800707C9 0040"],"options":null},"Level 2\\QB Rushes For One Rushing TD Or More":{"note":"","data":["800707D1 0040"],"options":null},"Level 2\\Score 40 Points Or More Within A Quarter Length Of 6 Minutes Or Less":{"note":"","data":["800707C4 0040"],"options":null},"Level 3\\150 Reception Yards Or Greater By One Player":{"note":"","data":["800707D9 0040"],"options":null},"Level 3\\150 Yards Rushing Or Greater By One Player":{"note":"","data":["800707D8 0040"],"options":null},"Level 3\\2 Interceptions Or More By One Player":{"note":"","data":["800707DC 0040"],"options":null},"Level 3\\3 Knockdowns Or More By One PLayer":{"note":"","data":["800707DF 0040"],"options":null},"Level 3\\3 Sacks Or More By One Player":{"note":"","data":["800707DB 0040"],"options":null},"Level 3\\3 Tips Or More By One Player":{"note":"","data":["800707E0 0040"],"options":null},"Level 3\\400 Yards Of Total Defense Or More":{"note":"","data":["800707EA 0040"],"options":null},"Level 3\\5 Successful Field Goals Or More By One Player":{"note":"","data":["800707DE 0040"],"options":null},"Level 3\\8 Tackles Or More By One Player":{"note":"","data":["800707E9 0040"],"options":null},"Level 3\\Break 2 Different All-Time Records Or More In A Game":{"note":"","data":["800707E7 0040"],"options":null},"Level 3\\Commit No Penalties In A Game":{"note":"","data":["800707E6 0040"],"options":null},"Level 3\\Complete A 50 Yard Run Or Longer":{"note":"","data":["800707E5 0040"],"options":null},"Level 3\\Have A RB Rush For Over 100 Yards And 50 Yards Receiving":{"note":"","data":["800707EB 0040"],"options":null},"Level 3\\Play And Win A Superbowl In Franchise Mode":{"note":"","data":["800707E1 0040"],"options":null},"Level 3\\Play And Win A Superbowl In Season Mode":{"note":"","data":["800707E2 0040"],"options":null},"Level 3\\Play And Win An 8 Team Tournament":{"note":"","data":["800707E4 0040"],"options":null},"Level 3\\QB Who Passes For 400 Yards Or More":{"note":"","data":["800707DA 0040"],"options":null},"Level 3\\Recover 2 Fumbles Or More":{"note":"","data":["800707DD 0040"],"options":null},"Level 3\\Score 55 Points Or Greater":{"note":"","data":["800707E8 0040"],"options":null},"Level 3\\Successfully Kick 8 Extra Points Or More":{"note":"","data":["800707E3 0040"],"options":null},"Level 4\\200 Receptions Yards Or Greater By One Player":{"note":"","data":["800707ED 0040"],"options":null},"Level 4\\200 Yards Rushing Or Greater By One Player":{"note":"","data":["800707EC 0040"],"options":null},"Level 4\\25 Completions Or More By One QB":{"note":"","data":["800707F2 0040"],"options":null},"Level 4\\40 First Downs Or More":{"note":"","data":["800707FE 0040"],"options":null},"Level 4\\6 Successful Two Point Conversions Or More":{"note":"","data":["800707F1 0040"],"options":null},"Level 4\\650 Yards Of Total Offense Or More By One Team":{"note":"","data":["800707F9 0040"],"options":null},"Level 4\\7 Sacks Or More By One Player":{"note":"","data":["800707F8 0040"],"options":null},"Level 4\\Go Undefeated And Win A Superbowl In One Franchise Mode Season By Playing Every Game":{"note":"","data":["800707F3 0040"],"options":null},"Level 4\\Go Undefeated And Win A Superbowl In One Season Mode Season By Playing Every Game":{"note":"","data":["800707F4 0040"],"options":null},"Level 4\\Have A Minimum Of 7 Members Of Your Team Catch At Least 1 Pass":{"note":"","data":["800707F6 0040"],"options":null},"Level 4\\Have One Reciever With 150 RAC Yards Or Greater":{"note":"","data":["800707FA 0040"],"options":null},"Level 4\\Kick A Punt Of 55 Yards Or More":{"note":"","data":["800707FF 0040"],"options":null},"Level 4\\QB Who Passes For 500 Yards Or More":{"note":"","data":["800707EE 0040"],"options":null},"Level 4\\QB Who Rushes For 75 Yards Or More":{"note":"","data":["800707F5 0040"],"options":null},"Level 4\\Return A Punt For A Touchdown":{"note":"","data":["800707EF 0040"],"options":null},"Level 4\\Return An Interception For A Touchdown":{"note":"","data":["800707F0 0040"],"options":null},"Level 4\\Rush For 100 Yards Or More With 2 Different Running Backs":{"note":"","data":["800707FC 0040"],"options":null},"Level 4\\Rush The Ball 40 Time Or More With A QTR Length Of 6 Minutes Or Less":{"note":"","data":["800707FB 0040"],"options":null},"Level 4\\Win A 16 Team Tournament":{"note":"","data":["800707F7 0040"],"options":null},"Level 4\\Win By A Margin Of 50 Points Or More":{"note":"","data":["800707FD 0040"],"options":null},"Level 5\\200 Kick Return Yards Or Greater By One Player":{"note":"","data":["80070809 0040"],"options":null},"Level 5\\200 Punt Return Yards Or Greater By One Player":{"note":"","data":["80070806 0040"],"options":null},"Level 5\\250 Yards Rushing Or Greater By One Player":{"note":"","data":["80070813 0040"],"options":null},"Level 5\\3 Receivers With 100 Yards Or More Recieving":{"note":"","data":["80070805 0040"],"options":null},"Level 5\\Break 4 Different All-Time Records Or More In A Game":{"note":"","data":["8007080D 0040"],"options":null},"Level 5\\Complete A Run Play Of 80 Yards Or More":{"note":"","data":["8007080A 0040"],"options":null},"Level 5\\Convert 10 4th Down Conversions Or More":{"note":"","data":["8007080B 0040"],"options":null},"Level 5\\Convert To 3RD Down Conversions Or More":{"note":"","data":["80070812 0040"],"options":null},"Level 5\\Have A QB With A 100 Passing PCT While Throwing A Minimum Of 5 Passes":{"note":"","data":["8007080F 0040"],"options":null},"Level 5\\Have A QB With A Pass AVG Of 30 Yards Or Greater While Throwing At Least 5 Passes":{"note":"","data":["80070801 0040"],"options":null},"Level 5\\Have A RB With A Rushing AVG Of 20 Yards Or Greater While Rushing At least 3 Times":{"note":"","data":["80070804 0040"],"options":null},"Level 5\\Pass For 200 Yards Or More With 2 QBS":{"note":"","data":["80070803 0040"],"options":null},"Level 5\\Play And Win A Minimum Of Four Superbowls With The Same Team In Franchise Mode":{"note":"","data":["80070810 0040"],"options":null},"Level 5\\QB Rushes For 3 Touchdowns Or More":{"note":"","data":["80070807 0040"],"options":null},"Level 5\\QB With A Minimum Of 150 Yards Passing And 100 Yards Rushing":{"note":"","data":["8007080C 0040"],"options":null},"Level 5\\RB With A Minimum Of 100 Yards Receiving And 100 Yards Rushing":{"note":"","data":["80070811 0040"],"options":null},"Level 5\\Return A Kickoff For A Touchdown":{"note":"","data":["80070800 0040"],"options":null},"Level 5\\Score 80 Points Or Greater":{"note":"","data":["80070808 0040"],"options":null},"Level 5\\Shut Out Opposing Team With A QTR Length Of 5 Minutes":{"note":"","data":["80070802 0040"],"options":null},"Level 5\\Successfully Kick A FG Of 55 Yards Or More":{"note":"","data":["8007080E 0040"],"options":null},"No Time-Outs\\Away Team":{"note":"","data":["8006EF6F 0000"],"options":null},"No Time-Outs\\Home Team":{"note":"","data":["8006EC7F 0000"],"options":null},"Particle Illusions\\A":{"note":"","data":["8005F19B 00FE"],"options":null},"Particle Illusions\\B":{"note":"","data":["8005F199 0002"],"options":null},"Players\\Evil Crystal":{"note":"","data":["8005F183 000F"],"options":null},"Players\\Generic Black \u0026 White":{"note":"","data":["8005F233 0058"],"options":null},"Players\\Hallow":{"note":"","data":["8005F233 0047"],"options":null},"Players\\Jagged":{"note":"","data":["8005F180 0080"],"options":null},"Players\\Pixel":{"note":"","data":["8005F18D 0001"],"options":null},"Players\\Polygon":{"note":"","data":["8005F183 0001"],"options":null},"Players\\Super Red":{"note":"","data":["8005F43E 0002"],"options":null},"Press GS For More Time To Choose Play":{"note":"","data":["890723E6 0024"],"options":null},"Press L For First Down\\Player 1":{"note":"","data":["D00753DD 0020","81071B18 0001"],"options":null},"Press L For First Down\\Player 2":{"note":"","data":["D00753E5 0020","81071B18 0001"],"options":null},"Press L For First Down\\Player 3":{"note":"","data":["D00753ED 0020","81071B18 0001"],"options":null},"Press L For First Down\\Player 4":{"note":"","data":["D00753F5 0020","81071B18 0001"],"options":null},"Press R For Fourth Down\\Player 1":{"note":"","data":["D00753DD 0010","81071B18 0004"],"options":null},"Press R For Fourth Down\\Player 2":{"note":"","data":["D00753E5 0010","81071B18 0004"],"options":null},"Press R For Fourth Down\\Player 3":{"note":"","data":["D00753ED 0010","81071B18 0004"],"options":null},"Press R For Fourth Down\\Player 4":{"note":"","data":["D00753F5 0010","81071B18 0004"],"options":null},"Uniforms\\Bare":{"note":"","data":["8005F188 008F"],"options":null},"Uniforms\\Future":{"note":"","data":["8005F207 0033"],"options":null},"Uniforms\\Ghetto":{"note":"","data":["8005F188 001F"],"options":null}},"0CEBC4C7-0C9CE932-C:4A":{"Gun 4-Way Shot":{"note":"","data":["801279B3 0004"],"options":null},"Infinite Fuel":{"note":"","data":["811279B6 FFFF"],"options":null},"Infinite Shield":{"note":"","data":["81127958 0264"],"options":null},"Infinite Weapon\\1st Position":{"note":"","data":["811276CA 03E7"],"options":null},"Infinite Weapon\\2nd Position":{"note":"","data":["811276CE 03E7"],"options":null},"Infinite Weapon\\3rd Position":{"note":"","data":["811276D2 03E7"],"options":null},"Infinite Weapon\\4th Position":{"note":"","data":["811276D6 03E7"],"options":null},"Infinite Weapon\\5th Position":{"note":"","data":["811276DA 03E7"],"options":null},"Max Score":{"note":"","data":["811276B6 FFFF"],"options":null},"Stage Select On":{"note":"","data":["81127706 0001"],"options":null},"Weapon Modifier\\Gun Weapon":{"note":"","data":["801279B3 00??"],"options":{"2-Way Shot":"02","3-Way Shot":"03","4-Way Shot":"04","No Weapon":"00","Normal Shot":"01"}},"Weapon Modifier\\Rockets\\Slot 1":{"note":"","data":["801276C9 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\Rockets\\Slot 2":{"note":"","data":["801276CD 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\Rockets\\Slot 3":{"note":"","data":["801276D1 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}}},"0D93BA11-683868A6-C:50":{"Access all crystals":{"note":"","data":["50000701 0000","800D6EC0 0001","50001701 0000","800D6EC8 0007"],"options":null},"Access all difficulty levels":{"note":"100 yard hop, bumper crop bump \u0026 checkerboard chase","data":["50000301 0000","800D6E69 0003"],"options":null},"Access all enemy info":{"note":"","data":["50005101 0000","800D6F10 0002"],"options":null},"All Levels completed":{"note":"You must still beat boss's to continue onto next level","data":["50002B01 0000","800D6EE0 0002"],"options":null},"All Save Slots 100% Completed\\Save slot 1":{"note":"","data":["800ECD18 0064"],"options":null},"All Save Slots 100% Completed\\Save slot 2":{"note":"","data":["800ECD70 0064"],"options":null},"All Save Slots 100% Completed\\Save slot 3":{"note":"","data":["800ECDC8 0064"],"options":null},"Infinite Max Health":{"note":"","data":["800D718F 0006","800D7151 00C0"],"options":null},"Infinite Max Lives":{"note":"","data":["800D714F 0064"],"options":null},"Kirkby can fly unlimited":{"note":"","data":["8012EADF 00F0"],"options":null}},"0DD4ABAB-B5A2A91E-C:45":{"Infinite Max DK Tokens":{"note":"","data":["803A8FD5 0063"],"options":null},"Infinite Max Health":{"note":"","data":["807B6760 0008","807B675F 0003"],"options":null}},"0DE2CE36-D41D29E6-C:4A":{"Infinite\\Max Body Stats":{"note":"","data":["81181788 270F","811817C8 0063","50000C02 0000","81181790 270F","50000502 0000","811817C0 270F","50000602 0000","811817E8 270F","50000602 0000","811817F6 270F"],"options":null},"Infinite\\Max Health":{"note":"","data":["81181780 270F","81181782 270F"],"options":null},"Infinite\\Weapons \u0026 Items":{"note":"Do not put this on until in game. This gives you all Weapons, Items and Keys and infinite use of.","data":["50002508 0000","80181B48 0063","50000808 0000","80181C70 0063"],"options":null},"Level 999":{"note":"","data":["811817C8 270F"],"options":null},"Level and Battle Select":{"note":"The level and battle select screen can be accessed by pressing A at the main menu","data":["801CFB94 0005"],"options":null},"Press L To Levitate":{"note":"","data":["D005D8D1 0020","8124C710 3FCB"],"options":null}},"0E31EDF0-C37249D5-C:50":{"Away Team scores 0 Goals":{"note":"","data":["801AF437 0000"],"options":null},"Away Team scores 25 Goals":{"note":"","data":["801AF437 0019"],"options":null},"Home Team scores 0 Goals":{"note":"","data":["801AF433 0000"],"options":null},"Home Team scores 25 Goals":{"note":"","data":["801AF433 0019"],"options":null}},"0E652C21-F19AD3DE-C:4A":{"Unlock All Jurassic World Dinosaurs":{"note":"","data":["8114237C 0101","8114237E 0101","80142380 0001"],"options":null},"Unlock All Planet Mars Characters":{"note":"","data":["81142384 0101","81142386 0101","80142388 0001"],"options":null},"Unlock All Sea World Animals":{"note":"","data":["81142374 0101","81142376 0101","80142378 0001"],"options":null}},"0EC158F5-FB3E6896-C45":{},"0EC158F5-FB3E6896-C:45":{"Buster Parts Slot Select\\Slot 01":{"note":"","data":["80204E03 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 02":{"note":"","data":["80204E04 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 03":{"note":"","data":["80204E05 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 04":{"note":"","data":["80204E06 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 05":{"note":"","data":["80204E07 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 06":{"note":"","data":["80204E08 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 07":{"note":"","data":["80204E09 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 08":{"note":"","data":["80204E0A 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 09":{"note":"","data":["80204E0B 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 10":{"note":"","data":["80204E0C 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 11":{"note":"","data":["80204E0D 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 12":{"note":"","data":["80204E0E 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 13":{"note":"","data":["80204E0F 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 14":{"note":"","data":["80204E10 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 15":{"note":"","data":["80204E11 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 16":{"note":"","data":["80204E12 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 17":{"note":"","data":["80204E13 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 18":{"note":"","data":["80204E14 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 19":{"note":"","data":["80204E15 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 20":{"note":"","data":["80204E16 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 21":{"note":"","data":["80204E17 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 22":{"note":"","data":["80204E18 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 23":{"note":"","data":["80204E19 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 24":{"note":"","data":["80204E1A 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 25":{"note":"","data":["80204E1B 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 26":{"note":"","data":["80204E1C 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 27":{"note":"","data":["80204E1D 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 28":{"note":"","data":["80204E1E 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 29":{"note":"","data":["80204E1F 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 30":{"note":"","data":["80204E20 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 31":{"note":"","data":["80204E21 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 32":{"note":"","data":["80204E22 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 33":{"note":"","data":["80204E23 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 01":{"note":"","data":["80204E00 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 02":{"note":"","data":["80204E01 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 03":{"note":"","data":["80204E02 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Freeze Timer at 00:00":{"note":"","data":["811BC3F4 0000","811BC3F6 0000"],"options":null},"Have\\All Special Weapons":{"note":"With this code, Roll is the one that has to equip the weapons before you can use them.","data":["81205640 FFFF"],"options":null},"Have\\Normal Items":{"note":"","data":["81205650 FFFF","81205652 FFFF","81205654 FFFF","81205656 FFFF"],"options":null},"Have\\Special Items":{"note":"","data":["8120564C FFFF","8120564E FFFF"],"options":null},"Infinite\\Ammo":{"note":"","data":["81204EBA 0080","81204EC2 0010","81204ECA 0708","81204ED2 0018","81204EDA 0010","81204EE2 0708","81204EEA 0020","81204EF2 0020","81204EFA 0020","81204F02 0018","81204F0A 012C","81204F12 0258"],"options":null},"Infinite\\Health":{"note":"","data":["81204A1E 0050"],"options":null},"Infinite\\Zenny":{"note":"","data":["811BC404 0098","811BC406 967F"],"options":null},"Rapid Fire":{"note":"","data":["80204EB3 0002"],"options":null}},"0F1FA987-BFC1AFA6-C:45":{"99 Points Player 1":{"note":"","data":["8010C1EF 0063"],"options":null},"Access All\\Cars \u0026 Tracks":{"note":"","data":["8104ACA6 0001"],"options":null},"Access All\\Cups":{"note":"","data":["800542F3 0003","800542D5 0000","800542D6 0000","800542D7 0000","8005431F 0003","80054301 0000","80054302 0000","80054303 0000","8005434B 0003","8005432D 0000","8005432E 0000","8005432F 0000"],"options":null},"Always 1st":{"note":"","data":["8111565E 0001","81115666 0000","8110C1EE 03E7"],"options":null},"Drones Have No Weapons":{"note":"","data":["8111CD7E 0000"],"options":null},"Infinite Continues":{"note":"","data":["8110C1E2 0006"],"options":null},"Infinite Weapons\\Player 1":{"note":"","data":["81115648 0000","8111564A 00??","8111564E 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 2":{"note":"","data":["81117B10 0000","81117B12 00??","81117B16 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 3":{"note":"","data":["81119FD8 0000","81119FDA 00??","81119FDE 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 4":{"note":"","data":["8111C4A0 0000","8111C4A2 00??","8111C4A6 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Laps To Race":{"note":"","data":["8107DBCE 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Number Of Drones In The Race":{"note":"","data":["8110FEA6 00??"],"options":{"1 Drone":"01","2 Drones":"02","3 Drones":"03","4 Drones":"04","5 Drones":"05","6 Drones":"06","7 Drones":"07","8 Drones":"08","9 Drones":"09"}}},"0F743195-D8A6DB95-C:50":{"Access\\All Guns \u0026 Infinite Ammo":{"note":"","data":["81207AB4 007F","81207AB6 FFFF","81207B84 03E7","50000A02 0000","81207B70 03E7"],"options":null},"Access\\All Items":{"note":"Press L Button Where Items Are available","data":["D0209D85 0020","81207B8C 007F"],"options":null},"Infinite\\Armour":{"note":"","data":["81207B44 0001","81207B46 03E7"],"options":null},"Infinite\\Health":{"note":"","data":["81207B24 03E7"],"options":null},"Level Select":{"note":"","data":["811C6B4E 0001"],"options":null},"Max\\Attributes":{"note":"","data":["50000502 0000","81207B28 0007"],"options":null},"Max\\Experience":{"note":"","data":["81207B26 03E7"],"options":null}},"102888BF-434888CA-C:45":{"Have All\\Keys":{"note":"","data":["50000410 0000","8017E130 0063","50000410 0000","8017E138 0063"],"options":null},"Have All\\Moves":{"note":"","data":["50005306 0000","81183CE0 0100","50005306 0000","81183CE2 00FF"],"options":null},"Have All\\Moves At Skill Level 250":{"note":"","data":["50000E06 0000","80188F63 00FA","50001306 0000","80188FBD 00FA","50003006 0000","80189047 00FA"],"options":null},"Infinite\\Max Body Stats":{"note":"","data":["8117DC48 270F","8117DC88 0063","50000C02 0000","8117DC50 270F","50000502 0000","8117DC80 270F","50000602 0000","8117DCA8 270F","50000602 0000","8117DCB6 270F"],"options":null},"Infinite\\Max Health":{"note":"","data":["8117DC40 270F","8117DC42 270F"],"options":null},"Infinite\\Refresh Items":{"note":"","data":["50000D10 0000","8017E008 0063","50000C10 0000","8017E010 0063"],"options":null},"Infinite\\Weapons \u0026 Items":{"note":"","data":["50000610 0000","8017E0D0 0063","50000610 0000","8017E0D8 0063"],"options":null},"Level 999":{"note":"","data":["8117DC88 270F"],"options":null},"Level and Battle Select":{"note":"The level and battle select screen can be accessed by pressing A at the main menu","data":["801CC8C4 0005"],"options":null},"Press L To Levitate":{"note":"","data":["D005CE51 0020","8124A0B0 3FCB"],"options":null}},"112051D2-68BEF8AC-C:45":{"Have\\Max Gold":{"note":"","data":["50000401 0000","80277335 00FF"],"options":null},"Have\\Max Total XP":{"note":"","data":["50000401 0000","80278BAD 00FF"],"options":null},"Have\\Max Total XP Remaning to Start":{"note":"This will give you 16777215 Total XP Remaning to start with and after your 1st batle will allow you to buy your Max Stats","data":["50000401 0000","80278BB1 00FF"],"options":null},"Infinite\\99 Health Potions":{"note":"Do Not put this cheat on until you have collected your 1st Health Potion from the 1st Cheat or you will not be able to get into the Sub menu and Continue the game.","data":["802785CB 0063"],"options":null},"Infinite\\Max Health":{"note":"","data":["80278B98 001E"],"options":null}},"11223344-55667788-C:45":{},"1145443D-11610EDB-C:50":{"Extra Characters":{"note":"","data":["8007FA98 0001"],"options":null},"Fight With Bunny Slippers On":{"note":"","data":["81138914 0100"],"options":null},"Infinite Health Player 1":{"note":"","data":["8008B287 0064"],"options":null},"Infinite Health Player 2":{"note":"","data":["8008AEFF 0064"],"options":null},"Infinite\\Continues":{"note":"","data":["8015183B 0006"],"options":null},"Infinite\\Time":{"note":"","data":["8113C5BA 0B9E"],"options":null},"Infinite\\Time To Choose Character":{"note":"","data":["D0137ABE 0001","81137ABE 02A2"],"options":null},"Ned The Janitor":{"note":"","data":["8013C281 0001"],"options":null},"One Hit Death\\Player 1":{"note":"","data":["D008B287 0064","8008B287 0001"],"options":null},"One Hit Death\\Player 2":{"note":"","data":["D008AEFF 0064","8008AEFF 0001"],"options":null},"Play As Options\\Player 1":{"note":"","data":["8113C6E2 ????"],"options":{"AL-Rashid":"33FC","Big Guy with spikes and a skull staff":"34C4","Dregan":"358C","Executioner":"3334","Hellnight":"353C","Koyasha":"33AC","Lord Deimos":"335C","Monk dude with sword":"3514","Mordoskull":"344C","Namira":"449C","Pojo The Chicken":"3564","Ragnar":"33C4","Takeshi":"3424","Taria":"33D4","War Mech":"35B4","Xiao Lang":"3474"}},"Play As Options\\Player 2":{"note":"","data":["8113C6DE ????"],"options":{"AL-Rashid":"33FC","Big Guy with spikes and a skull staff":"34C4","Dregan":"358C","Executioner":"3334","Hellnight":"353C","Koyasha":"33AC","Lord Deimos":"335C","Monk dude with sword":"3514","Mordoskull":"344C","Namira":"449C","Pojo The Chicken":"3564","Ragnar":"33C4","Takeshi":"3424","Taria":"33D4","War Mech":"35B4","Xiao Lang":"3474"}}},"1185EC85-4B5A7731-C:50":{"Access\\All Levels \u0026 Superbikes":{"note":"","data":["50000304 0000","80183A0F 0001"],"options":null},"Access\\All Secret Characters":{"note":"This code is Fantastic, You have 12 characters to choose from to you race without any bike, just on foot","data":["50000C04 0000","80183A27 0001"],"options":null},"Access\\All Tracks":{"note":"","data":["50000BD8 0000","80182FC7 0001","50000CD8 0000","80182EF3 0001","50000CD8 0000","80182EF7 0001","50000CD8 0000","80182EFB 0001","50000CD8 0000","80182EFF 0001","50000CD8 0000","80182F03 0001","50000CD8 0000","80182F07 0001"],"options":null},"Infinite Lasers\\Player 1":{"note":"","data":["80170BD9 00C8"],"options":null},"Infinite Lasers\\Player 2":{"note":"","data":["80171241 00C8"],"options":null},"Infinite Lasers\\Player 3":{"note":"","data":["801718A9 00C8"],"options":null},"Infinite Lasers\\Player 4":{"note":"","data":["80171F11 00C8"],"options":null},"Infinite Nitros\\Player 1":{"note":"","data":["80170BA3 0004","80170BA7 0004"],"options":null},"Infinite Nitros\\Player 2":{"note":"","data":["8017120B 0004","8017120F 0004"],"options":null},"Infinite Nitros\\Player 3":{"note":"","data":["80171873 0004","80171877 0004"],"options":null},"Infinite Nitros\\Player 4":{"note":"","data":["80171EDB 0004","80171EDF 0004"],"options":null},"Infinite Shield\\Player 1":{"note":"","data":["80170BCD 00C8"],"options":null},"Infinite Shield\\Player 2":{"note":"","data":["80171235 00C8"],"options":null},"Infinite Shield\\Player 3":{"note":"","data":["8017189D 00C8"],"options":null},"Infinite Shield\\Player 4":{"note":"","data":["80171F05 00C8"],"options":null},"[Screen Hud Clear]":{"note":"If you are using a Plugin other then Jabos 1.5 and can not see through the Thick Hud on the Screen. then Let the game load 1st before Putting this code on,Or it will give an error and Freeze","data":["80092C6B 0004"],"options":null}},"11936D8C-6F2C4B43-C:50":{"Chunky\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FCA4C 0064"],"options":null},"Chunky\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FCA56 0064"],"options":null},"Chunky\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FCA54 0064"],"options":null},"Chunky\\All Golden Bananas\\DK Isle":{"note":"","data":["817FCA58 0064"],"options":null},"Chunky\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FCA4E 0064"],"options":null},"Chunky\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FCA52 0064"],"options":null},"Chunky\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FCA50 0064"],"options":null},"Chunky\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FCA4A 0064"],"options":null},"Chunky\\Infinite Coins":{"note":"","data":["817FCA0E 03E7"],"options":null},"Chunky\\Infinite Musical Instrument":{"note":"","data":["817FCA10 000A"],"options":null},"Diddy\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC932 0064"],"options":null},"Diddy\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC93C 0064"],"options":null},"Diddy\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC93A 0064"],"options":null},"Diddy\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC93E 0064"],"options":null},"Diddy\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC934 0064"],"options":null},"Diddy\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FC938 0064"],"options":null},"Diddy\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC936 0064"],"options":null},"Diddy\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC930 0064"],"options":null},"Diddy\\Infinite Coins":{"note":"","data":["817FC8F4 03E7"],"options":null},"Diddy\\Infinite Musical Instrument":{"note":"","data":["817FC8F6 000A"],"options":null},"Donkey Kong\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC8D4 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC8DE 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC8DC 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC8E0 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC8D6 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC8D8 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC8D2 03E7"],"options":null},"Donkey Kong\\Has Moves":{"note":"","data":["817FC890 0103"],"options":null},"Donkey Kong\\Have Weapon":{"note":"","data":["817FC892 0103"],"options":null},"Donkey Kong\\Infinite Ammo":{"note":"","data":["807FCB85 0096"],"options":null},"Donkey Kong\\Infinite Bananas\\Angry Aztec":{"note":"","data":["817FC89C 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Creepy Castle":{"note":"","data":["817FC8A6 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Crystal Caves":{"note":"","data":["817FC8A4 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\FactoryLevel":{"note":"","data":["817FC89E 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Fungi Forest":{"note":"","data":["817FC8A2 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Galleon Level":{"note":"","data":["817FC8FE 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Jungle Japes":{"note":"","data":["817FC89A 03E7"],"options":null},"Donkey Kong\\Infinite Coins":{"note":"","data":["817FC896 03E7"],"options":null},"Donkey Kong\\Infinite Musical Instrument":{"note":"","data":["817FC894 0103","817FC898 00FF"],"options":null},"Free Pass (Access All Areas)":{"note":"This is exactly what it says, You can walk through Any Locked Door,Gate, Or Area. Have Fun.","data":["8066D167 0001","8066D262 0001"],"options":null},"Infinite\\Camera Film":{"note":"","data":["807FCB89 0005"],"options":null},"Infinite\\Crystal Coconuts":{"note":"","data":["817FCB86 03E7"],"options":null},"Infinite\\Health":{"note":"","data":["817FCB8C 041F"],"options":null},"Infinite\\Orange Bombs":{"note":"","data":["807FCB81 0096"],"options":null},"Lanky\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC990 0064"],"options":null},"Lanky\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC99A 0064"],"options":null},"Lanky\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC998 0064"],"options":null},"Lanky\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC99C 0064"],"options":null},"Lanky\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC992 0064"],"options":null},"Lanky\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FC996 0064"],"options":null},"Lanky\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC994 0064"],"options":null},"Lanky\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC98E 0064"],"options":null},"Lanky\\Infinite Coins":{"note":"","data":["817FC952 03E7"],"options":null},"Lanky\\Infinite Musical Instrument":{"note":"","data":["817FC954 000A"],"options":null},"Tiny\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC9EE 0064"],"options":null},"Tiny\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC9E8 0064"],"options":null},"Tiny\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC9F6 0064"],"options":null},"Tiny\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC9FA 0064"],"options":null},"Tiny\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC9F0 0064"],"options":null},"Tiny\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FC9F4 0064"],"options":null},"Tiny\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC9F2 0064"],"options":null},"Tiny\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC9EC 0064"],"options":null},"Tiny\\Infinite Coins":{"note":"","data":["817FC9B0 03E7"],"options":null},"Tiny\\Infinite Musical Instrument":{"note":"","data":["817FC9B2 000A"],"options":null}},"12737DA5-23969159-C:4A":{"Always Normal Spirit\\Player 1":{"note":"","data":["8015D075 0032"],"options":null},"Always Normal Spirit\\Player 2":{"note":"","data":["8015D509 0032"],"options":null},"Always Normal Spirit\\Player 3":{"note":"","data":["8015D99D 0032"],"options":null},"Always Normal Spirit\\Player 4":{"note":"","data":["8015DE31 0032"],"options":null},"Always Special\\Player 1":{"note":"","data":["8015D0B5 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["8015D549 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["8015D9DD 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["8015DE71 0004"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 1":{"note":"","data":["8015D074 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 2":{"note":"","data":["8015D508 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 3":{"note":"","data":["8015D99C 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 4":{"note":"","data":["8015DE30 0064"],"options":null},"Have All Characters":{"note":"","data":["81094BDA FFFF"],"options":null},"Infinite Create-A-Wrestler Attribute Points":{"note":"","data":["8011069B 001E"],"options":null},"Max Attributes":{"note":"","data":["80110691 0032","80110693 0032","80110695 0032","80110697 0032","80110699 0032"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["8015D075 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["8015D509 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["8015D99D 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["8015DE31 00FF"],"options":null},"No Spirit\\Player 1":{"note":"","data":["8015D075 0000"],"options":null},"No Spirit\\Player 2":{"note":"","data":["8015D509 0000"],"options":null},"No Spirit\\Player 3":{"note":"","data":["8015D99D 0000"],"options":null},"No Spirit\\Player 4":{"note":"","data":["8015DE31 0000"],"options":null},"Specials Don't Run Out":{"note":"","data":["81120C14 2400"],"options":null},"Timer Is Always 00:00":{"note":"","data":["80164F2F 0000"],"options":null},"Ultimate Codes\\Player 1":{"note":"","data":["8015D074 0064"],"options":null},"Ultimate Codes\\Player 2":{"note":"","data":["8015D508 0064"],"options":null},"Ultimate Codes\\Player 3":{"note":"","data":["8015D99C 0064"],"options":null},"Ultimate Codes\\Player 4":{"note":"","data":["8015DE30 0064"],"options":null},"Weapon Select\\Player 1":{"note":"","data":["8115D0B6 0300","8115CC10 ????","8115CC12 0000","8015CCD0 0000"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 2":{"note":"","data":["8115D54A 0300","8115CC40 ????","8015CC42 0001","8015CCD1 0001"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 3":{"note":"","data":["8115D9DE 0300","8115CC70 ????","8015CC72 0002","8015CCD2 0002"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 4":{"note":"","data":["8115DE72 0300","8115CC98 ????","8115CC9A 0003","8015CCD3 0003"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}}},"132D2732-C70E9118-C:45":{"Always 1st\\Player 1":{"note":"This code doesn't record the win on the Time Trial Gold Challenge or the Weapons Gold Challenge.","data":["8109BC68 0001"],"options":null},"Freeze Checkpoint Timer":{"note":"","data":["810CDE92 0BCC"],"options":null},"Infinite Auto Pilot\\AG Systems\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BCE47 005B"],"options":null},"Infinite Auto Pilot\\Auricom\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC1E7 005B"],"options":null},"Infinite Auto Pilot\\Direx\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC817 005C"],"options":null},"Infinite Auto Pilot\\Feisar 1\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["811BC4FE 005B"],"options":null},"Infinite Auto Pilot\\Piranah\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC817 0060"],"options":null},"Weapon Select\\AG Systems":{"note":"","data":["811BCE3E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Auricom":{"note":"","data":["811BC1DE ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Direx":{"note":"","data":["811BC80E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Feisar 1":{"note":"","data":["811BC4F6 ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Piranah":{"note":"","data":["811BCB2E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"[In-Game Cheat Unlock]\\Cyclone Weapon":{"note":"","data":["80094F7E 00??"],"options":{"Off":"00","On":"01"}},"[In-Game Cheat Unlock]\\Infinite Ammo\\Player 1":{"note":"","data":["80091C24 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Ammo\\Player 2":{"note":"","data":["80093340 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Shield Energy\\Player 1":{"note":"","data":["80091C26 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Shield Energy\\Player 2":{"note":"","data":["80093342 0001"],"options":null},"[In-Game Cheat Unlock]\\[Ultimate Unlock All]":{"note":"This Unlocks All Levels, Tracks, Velocitar and Super Combo, Piranha 2 Ship, Cyclone Weapons Power Up and all 28 Gold Awards unlocked","data":["80091C25 0001","80091C2C 0020"],"options":null},"[Infinite Sheild]":{"note":"This cheat enabled fixes Av's popping up and spoiling you racing,it also gives you Infinite Sheild on all Cars,Tracks and Modes","data":["5000030C 0000","8109BCE2 0000","8109BD12 0000"],"options":null}},"13836389-265B3C76-C:45":{"Background\\Coloured Madden":{"note":"","data":["810596E0 0003"],"options":null},"Background\\Gray Madden":{"note":"","data":["810596E0 0000"],"options":null},"Background\\Green \u0026 Black Madden":{"note":"","data":["810596E0 0002"],"options":null},"Background\\Pink \u0026 Purple Madden":{"note":"","data":["810596E0 0004"],"options":null},"Background\\Pink Madden":{"note":"","data":["810596E0 0001"],"options":null},"Background\\Pinker Madden":{"note":"","data":["810596E0 0006"],"options":null},"Enable\\All Stadiums":{"note":"","data":["50000901 0000","80073510 00FF"],"options":null},"Enable\\All Teams":{"note":"","data":["50000901 0000","80073CF8 00FF"],"options":null},"Infinite\\Time Outs Away Team":{"note":"","data":["80084EE3 0003"],"options":null},"Infinite\\Time Outs Home Team":{"note":"","data":["80082D97 0003"],"options":null},"Invisible Players":{"note":"","data":["800545A0 0000","800545A0 0001","800545A0 0002","800545A0 0003"],"options":null},"No Time-Outs\\Away Team":{"note":"","data":["80084EE3 0000"],"options":null},"No Time-Outs\\Home Team":{"note":"","data":["80082D97 0000"],"options":null},"Sixty Frames":{"note":"Animations still choppy,especially the title screen.","data":["8007130D 0001"],"options":null}},"142A17AA-13028D96-C:50":{"Freeze Enemies":{"note":"","data":["8008EE3B 0012"],"options":null},"Gore Mode":{"note":"","data":["8008EE37 0012"],"options":null},"Infinite\\Lives":{"note":"","data":["8008EE33 0012"],"options":null},"Infinite\\Primery Weapons":{"note":"","data":["8008EE30 0012"],"options":null},"Infinite\\Secondary Weapons":{"note":"","data":["8008EE31 0012"],"options":null},"Infinite\\Solaris":{"note":"Solaris are included in code","data":["8008EE3D 0012"],"options":null},"Infinite\\Titans":{"note":"Titans are included in code","data":["8008EE3C 0012"],"options":null},"Infinite\\Weapon Energy":{"note":"","data":["8008EE32 0012"],"options":null},"Invulnerability":{"note":"","data":["8008EE35 0012"],"options":null},"Level Select":{"note":"Accesses all Missions \u0026 Battle mode","data":["8008EE3E 0012"],"options":null},"One Shot Enemies":{"note":"","data":["8008EE3A 0012"],"options":null},"Psychedelic Mode":{"note":"","data":["8008EE39 0012"],"options":null},"Stealth Mode":{"note":"","data":["8008EE34 0012"],"options":null},"Turbo Mode":{"note":"","data":["8008EE38 0012"],"options":null},"Wireframe Mode":{"note":"","data":["8008EE36 0012"],"options":null}},"147E0EDB-36C5B12C-C:4A":{"(Press GS)\\To Kill Enemy":{"note":"Don't Press GS after the Enemy is killed, only during the fight! and only use on Press GS Cheat at a time","data":["891F2454 0000","891F2456 0000","891F2458 0000","891F245A 0000"],"options":null},"(Press GS)\\To Refill Health":{"note":"Don't Press GS after the Enemy is killed, only during the fight!","data":["891F0F18 42C8","891F0F1A 0000"],"options":null},"(Press L)\\ For One Hit Kill":{"note":"Don't Press L after the Enemy is killed, only during the fight!","data":["D0149DD5 0020","811F2458 0000","D0149DD5 0020","811F245A 0000"],"options":null},"(Press R)\\For Level Warp":{"note":"Press Reset and enjoy!","data":["D00D5115 0015","800D5115 00??"],"options":{"Credits 1":"18","Credits 2":"19","Credits 3":"1A","Level 01":"2B","Level 02":"2F","Level 03":"33","Level 04":"37","Level 05":"3B","Level 06":"3D","Level 07":"40","Level 08":"43","Level 09":"46","Level 10":"49","Level 11":"4C","Level 12":"4F","Level 12.5":"51","Level 13":"53"}},"Secret Beta 2 Player Test Mode":{"note":"Press Reset and enjoy! Secret 2 Player Test Mode? The Second Player doesn't move ;(","data":["D00D5115 0015","800D5115 0055"],"options":null}},"151F79F4-8EEDC8E5-C:50":{"Access All Characters":{"note":"","data":["81193CA4 3F00","50000602 0000","81193C98 1F1F"],"options":null},"All Quests Completed":{"note":"","data":["80193CA4 003F","50000C01 0000","80193C98 001F"],"options":null},"Max Stats All Characters":{"note":"","data":["50000B24 0000","811896EC 1414","50000B24 0000","811896EE 1400"],"options":null}},"155B7CDF-F0DA7325-C:55":{"Beta Bottles Revenge Mode":{"note":"Bottles Revenge is a Beta mode from Banjo Tooie that the RWP team recently uncovered after an extraordinary amount of effort. Bottles the Spirit transforms into Bottles the Devil and posses enemies nearby and allows a second player hooked up to Pad 2 to play as that Posses character to try to foil Banjos Plans. As player one goes about its business, player two uses every enemy nearby to try to nab Banjo and take away some life. This mode is incredible, and you can control almost every enemy in the game: slot machines, flying creatures, uggers, zubbas...and this is just the beginning. (Congrats Rare Witch Project)","data":["80130172 0001","8008B4D1 0002"],"options":null},"Infinite\\Air":{"note":"","data":["8112FDC2 42C8"],"options":null},"Infinite\\Energy\\Banjo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","8012059F 000A","801205A0 000A"],"options":null},"Infinite\\Energy\\Banjo and Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","81120584 0A0A"],"options":null},"Infinite\\Energy\\Bee":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","80120593 000A","80120594 000A"],"options":null},"Infinite\\Energy\\Detonator":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","811205AE 0A0A"],"options":null},"Infinite\\Energy\\Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","811205A2 0A0A"],"options":null},"Infinite\\Energy\\Mumbo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","811205A8 0A0A"],"options":null},"Infinite\\Energy\\Snowball":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","80120587 0005"],"options":null},"Infinite\\Energy\\Stony":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","80120599 000A","8011B44A 000A"],"options":null},"Infinite\\Energy\\Submarine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","801205A5 000A","801205A6 000A"],"options":null},"Infinite\\Energy\\T-Rex Baby":{"note":"","data":["8011FFA9 0063","801205BF 000A","801205C0 000A"],"options":null},"Infinite\\Energy\\Washing Machine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","81120596 0A0A"],"options":null},"Instant Warp\\Options\\Cauldron Keep":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Cauldron Keep":"015D","Colosseum kickball arena":"0180","Crazy Castle Stockade Jump the hoops multi":"017C","Crazy Castle Stockade balloon burst multi":"017B","Dodgems":"0186","Grunty Industries packing game":"017D","Gun chamber":"0160","Gun room still":"016A","The gatehouse":"015E","Tower of Tragedy Quiz":"015F"}},"Instant Warp\\Options\\Cloud Cuckoo Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Central cavern":"013A","Cloud Cuckoo Land 1":"0136","Cloud Cuckoo Land 2":"0161","Humba wumba's wigwam":"0140","Inside the cheesewedge":"0138","Inside the pot o gold":"013D","Inside the trashcan":"0137","Mingy jongo's skull":"013F","Mumbo's skull":"013E","Trash can mini":"0185","Zubba's nest":"0139","Zubba's nest multi":"0188"}},"Instant Warp\\Options\\Glitter Gulch Mine":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Canary cave":"00DB","Chuffy's cab":"00D0","Crushing shed":"00CB","Flooded caves":"00CC","Fuel depot":"00CA","Generator caverns":"00D3","Gloomy caverns":"00D2","Humba":"00E9","Inside chuffy's boiler boss":"00D1","Mine":"00C7","Mumbo's hut":"00D9","Mumbo's skull":"0171","Ordnance Storage entrance":"0163","Ordnance Storage game":"0164","Ordnance Storage game Multi":"0165","Ordnance storage":"00DC","Power hut":"00D4","Power hut basement":"00CF","Prospectors hut":"00D8","Testing":"0170","Toxic gas cave":"00DA","Train station":"00D7","Water storage":"00CD","Water supply pipe":"0126","Waterfall cavern":"00CE","Wumba's wigwam":"00D5"}},"Instant Warp\\Options\\Grunty Industries":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Basement":"010F","Basement \"repair depot":"0110","Basement \"waste disposal\"":"0111","Elevator shaft":"0105","Floor 2":"0106","Floor 2 \"electromagnet chamber\"":"0107","Floor 3":"0108","Floor 3 \"boiler plant\"":"0109","Floor 3 \"packing room\"":"010A","Floor 4":"010B","Floor 4 \"cable room\"":"010C","Floor 4 \"clinkers cavern\"":"0162","Floor 4 \"quality control\"":"010D","Floor 5":"010E","Inside":"0101","Mumbo's skull":"0172","Outside":"0100","Sewer entrance":"0187","Train station":"0102","Trash compactor":"0104","Water supply pipe":"0125","Workers quarters":"0103"}},"Instant Warp\\Options\\Hailfire Peaks":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Boggy's igloo":"0131","Chilli billi":"012B","Chilly willy":"012C","Colosseum kickball stadium lobby":"012D","Ice train station":"012A","Icicle grotto":"0132","Icy side":"0128","Icy side still":"0168","Inside the volcano":"0133","Lava side":"0127","Lava train station":"0129"}},"Instant Warp\\Options\\Isle O Hags":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Cliff top":"0155","Cliff top Mumbo's skull":"0156","Heggy's egg shed":"0150","Jiggywiggy's temple":"0151","Pine Grove":"0154","Plateau":"0152","Plateau \"Honey B's Hive\"":"0153","Quagmire":"015C","Wooded Hollow":"014F","inside another digger tunnel":"015B","wasteland":"015A"}},"Instant Warp\\Options\\Jinjo Village":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Black Jinjo's House":"0146","Blue Jinjo's House":"0148","Bottles house":"0143","Brown Jinjo's House":"014A","Green Jinjo's House":"0145","Jinjo Village":"0142","King Jingalings throne room":"0144","Orange Jinjo's House":"014B","Purple Jinjo's House":"014C","Red Jinjo's House":"014D","White Jinjo's House":"014E","Yellow Jinjo's House":"0147"}},"Instant Warp\\Options\\Jolly Roger's Lagoon":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Ancient Swimming Baths":"00F4","Atlantis":"01A8","Blubber's wave race hire":"00FF","Electric Eels lair":"00F6","Inside the big fish":"00F8","Jolly Roger's Lagoon":"01A7","Jolly's":"00ED","Pawno's emporium":"00EE","Seabottom":"01A9","Seaweed Sanctum":"00F7","mumbo's skull":"00EF","sea bottom cavern":"0181","submarine multi":"0182","temple of the fishes":"00FA"}},"Instant Warp\\Options\\Mayahem Temple":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Code chamber":"00BC","Humba's Wigwam":"00B6","Inside Targitzans Temple":"0178","Jade Snake Grove":"00C4","Kickball Arena":"00C9","Mayan Kickball Arena":"017F","Multi":"0166","Mumbo's skull":"00B7","Prison Compound":"00B9","Still":"0167","Targitzan Temple Lobby":"0179","Targitzan's Slighty Sacred Temple":"0177","Targitzan's Temple Boss":"017A","The Temple":"00B8","Treasure Chamber":"00C5"}},"Instant Warp\\Options\\Not sure":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8012C390 ????","8012C393 0001"],"options":{"Bottles house":"0143","Bottles house still":"0169","HAG Inside":"018A","HAG1 Final Boss":"019A","Humba Wumba's wigwam 1":"0135","Humba Wumba's wigwam 2":"0157","Inside Chuffy's wagon":"0121","Inside the digger tunnel":"0141","Jingalings Zombified Palace":"019B","Lord woo fak fak":"00FC","Mr Patch":"00F9","Mumbo's Skull":"0134","Smuggler cavern":"01A6"}},"Instant Warp\\Options\\Spiral Mountain":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Banjo's house":"0173","Behind The Waterfall":"00AE","Grunty's Old Lair":"00AD","Top Of Castle":"00AF"}},"Instant Warp\\Options\\Terrydacty Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Bonfire caverns":"011B","Chompa's belly multi":"0183","Humba's Wigwam":"011E","Inside chompa's belly":"0123","Inside the mountain":"0116","Oogle boogles cave":"0115","River passage":"0117","Stomping plains":"011A","Styracosaurus family cave":"0118","Terry's nest":"0113","Terrydacty Land":"0112","Train station":"0114","Unga bunga's cave":"0119"}},"Instant Warp\\Options\\Witchy World":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Balloon burst game":"00E4","Cave of horrors":"00EA","Crazy castle lobby":"00E2","Crazy castle pump room":"00E3","Crazy castle stockade":"00E1","Crazy castle stockade \"sop\"":"013B","Dodgem challenge \"1 vs 1\"":"00DE","Dodgem challenge \"2 vs 1\"":"00DF","Dodgem challenge \"3 vs 1\"":"00E0","Dodgem dome lobby":"00DD","Haunted cavern":"00EB","Hoop hurry game":"00E5","Mumbo's skull":"0176","Saucer of Peril":"0124","Star spinner":"00E6","Star spinner \"sop\"":"013C","The inferno":"00E7","Train station":"00EC","Witcy World":"00D6"}},"Multi-Player\\Everyone Infinite All Eggs Multiplayer":{"note":"All blaster modes specifically.[ Thanks retroben, awesome work on this!]","data":["810F0BA8 0C04","810F0BAA 8580","81121600 3C08","81121602 8009","81121604 8108","81121606 E5C0","81121608 1100","8112160A 0010","8112160C 0000","8112160E 0000","81121610 3C08","81121612 8009","81121614 8D08","81121616 E5C0","81121618 0008","8112161A 4200","8112161C 0008","8112161E 4202","81121620 0008","81121622 4080","81121624 3C04","81121626 8000","81121628 0104","8112162A 4020","8112162C 3C04","8112162E 2406","81121630 2484","81121632 0064","81121634 AD04","81121636 31C4","81121638 3C04","8112163A 2408","8112163C 2484","8112163E FFFE","81121640 AD04","81121642 31CC","81121644 3C04","81121646 8013","81121648 8C84","8112164A 7B44","8112164C 0802","8112164E 4912","81121650 0000","81121652 0000"],"options":null},"Multi-Player\\Infinite Health\\Player 1":{"note":"","data":["8013A2B1 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 2":{"note":"","data":["8013A2B5 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 3":{"note":"","data":["8013A2B9 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 4":{"note":"","data":["8013A2BD 0064"],"options":null},"Play As":{"note":"To use this cheat, put the cheat on, then press L as you walk through a door to become that chosen character","data":["D108B284 0000","8012BD9C 00??"],"options":{"Banjo":"0A","Banjo and Kazooie":"01","Bee":"06","Detonator":"0F","Golden Goliath":"0E","Kazooie":"0B","Mumbo":"0D","Snowball":"02","Stony":"08","Submarine":"0C","T-rex baby":"12","T-rex daddy":"13","Truck":"10","Washing machine":"07"}}},"16931D74-65DC6D34-C:50":{"Debug Mode":{"note":"","data":["8006C4E3 0001"],"options":null},"Have\\All Keys":{"note":"","data":["80164229 000F"],"options":null},"Have\\All Weapons":{"note":"","data":["8016422B 007F"],"options":null},"Have\\Quad Damage":{"note":"","data":["811641BC 42C8"],"options":null},"Have\\Ring of Shadows":{"note":"","data":["81164228 ????"],"options":{"Off":"0000","On":"42C8"}},"Infinite\\Ammo":{"note":"","data":["50000402 0000","8016426D 0064","50000402 0000","8116426C 03E7"],"options":null},"Infinite\\Armor":{"note":"","data":["81164184 42C8"],"options":null},"Infinite\\Bio Suit":{"note":"","data":["811641C0 42C8"],"options":null},"Infinite\\Health":{"note":"","data":["81164170 42C8"],"options":null},"Multi\\Have All Weapons\\Player 1":{"note":"","data":["80166B8B 007F"],"options":null},"Multi\\Have All Weapons\\Player 2":{"note":"","data":["80166E5B 007F"],"options":null},"Multi\\Infinite Ammo\\Player 1":{"note":"","data":["50000402 0000","81166BCC 03E7"],"options":null},"Multi\\Infinite Ammo\\Player 2":{"note":"","data":["50000402 0000","81166E9C 03E7"],"options":null},"Multi\\Infinite Armor\\Player 1":{"note":"","data":["81166AE4 42C8"],"options":null},"Multi\\Infinite Armor\\Player 2":{"note":"","data":["81166DB4 42C8"],"options":null},"Multi\\Infinite Bio Suit\\Player 1":{"note":"","data":["81166B20 42C8"],"options":null},"Multi\\Infinite Bio Suit\\Player 2":{"note":"","data":["81166DF0 42C8"],"options":null},"Multi\\Infinite Health\\Player 1":{"note":"","data":["81166AD0 42C8"],"options":null},"Multi\\Infinite Health\\Player 2":{"note":"","data":["81166DA0 42C8"],"options":null},"Rapid Fire":{"note":"","data":["D00CB220 0020","801641AD 0001"],"options":null}},"1938525C-586E9656-C:45":{"Have All Dots":{"note":"","data":["8111D55E 03E7"],"options":null},"Infinite\\Health":{"note":"","data":["8111D55C 003C"],"options":null},"Infinite\\Lives":{"note":"","data":["8010A3D7 0009"],"options":null},"Max Score":{"note":"","data":["8111EF14 E0FF","8111EF16 05F5"],"options":null}},"19AB29AF-C71BCD28-C:50":{"Access\\All Star Spirits":{"note":"Disable this code as soon as you have reached level 8, or everything will be removed again","data":["8110E01E 0007"],"options":null},"Access\\Infinite Coins":{"note":"","data":["8110DD9C 03E7"],"options":null},"Access\\Infinite Star Spirits":{"note":"","data":["8010E020 0007"],"options":null},"Access\\Level 99":{"note":"","data":["8010DD99 0063"],"options":null},"Access\\Max Badge Points":{"note":"","data":["8010DD98 00??"],"options":{"127 Badge Points":"7F","60 Badge Points":"3C"}},"Access\\Max Star Energy":{"note":"","data":["8010E01E 0007"],"options":null},"Access\\Max Star Pieces":{"note":"","data":["8010DD9F 0063"],"options":null},"Access\\Max Star Points":{"note":"You will level up, everytime you get a Star point","data":["8010DDA0 0063"],"options":null},"Access\\Ultra Rank":{"note":"This will give you Goombario,Kooper,Bombette,Parakarry,Bow Watt, Sushie \u0026 Lakilester","data":["50000C08 0000","8010DDAD 0002","50000C08 0000","8010DDED 0002"],"options":null},"Access\\all members in your party":{"note":"","data":["50000C08 0000","8010DDAC 0001"],"options":null},"Infinite \u0026 Max HP + FP":{"note":"Do not enable this code before you have made a save, when a new game is started up.","data":["50000601 0000","8010DD91 0063"],"options":null},"Press L Button For Moon Jump":{"note":"","data":["D0071337 0020","8010DAF4 0043"],"options":null}},"19F55D46-73A27B34-C:45":{"Infinite Time":{"note":"","data":["8114C298 000A"],"options":null},"Pick Your Kombat Zone":{"note":"","data":["81257544 00??"],"options":{"Armory":"14","Bell Tower":"07","Bridge":"05","Courtyard":"02","Dead Pool":"11","Graveyard":"09","Hidden Portal":"10","Jade's Desert":"0E","Kahn's Kave":"0D","Kahn's Tower":"04","Kombat Temple":"08","Lair":"18","Living Forest":"15","Lost Bridge":"0F","Pit":"03","Pit 2":"1A","Pit 3":"0A","Pit Bottom":"1C","Portal":"17","River Kombat":"0B","Rooftop":"13","Scorpion's Lair":"0C","Soul Chamber":"06","Star Bridge":"1B","Street":"01","Subway":"00","Tomb":"19","Tower":"16","Wasteland":"12"}},"Player 1\\Aggressor Energy Bar":{"note":"","data":["801698E1 0030"],"options":null},"Player 1\\Energy is":{"note":"","data":["8016984D 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 1\\Infinite Run":{"note":"","data":["81169854 0030"],"options":null},"Player 1\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B5225 0020","81169874 5100","D02B5225 0020","8116987C 5100"],"options":null},"Player 1\\Play As":{"note":"","data":["8016983D 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Player 2\\Aggressor Energy Bar":{"note":"","data":["801698E3 0030"],"options":null},"Player 2\\Energy is":{"note":"","data":["80169B21 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 2\\Infinite Run":{"note":"","data":["81169B28 0030"],"options":null},"Player 2\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B522D 0020","81169876 5100","D02B522D 0020","8116987E 5100"],"options":null},"Player 2\\Play As":{"note":"","data":["80169AE1 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Unlock Secret":{"note":"","data":["80169EE1 0004"],"options":null}},"1A122D43-C17DAF0F-C:45":{"Have All Pikachus Magnemites":{"note":"","data":["801183BC 0000","801183BD 0000","801183BE 0000"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 1":{"note":"","data":["81285A18 03E7"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 2":{"note":"","data":["81286438 03E7"],"options":null},"Pokemon\\Inf Spells\\Player 1":{"note":"","data":["810AE580 FFFF","810AE582 FFFF","810AE5D4 FFFF","810AE5D6 FFFF","810AE628 FFFF","810AE62A FFFF"],"options":null},"Pokemon\\Inf Spells\\Player 2":{"note":"","data":["810AE79C FFFF","810AE79E FFFF","810AE7F0 FFFF","810AE7F2 FFFF","810AE844 FFFF","810AE846 FFFF"],"options":null},"Pokemon\\Max HP\\Player 1":{"note":"","data":["810AE586 03E7","810AE5DA 03E7","810AE62E 03E7"],"options":null},"Pokemon\\Max HP\\Player 2":{"note":"","data":["810AE7A2 03E7","810AE7F6 03E7","810AE84A 03E7"],"options":null},"Ultimate Code":{"note":"what's so ultimate about this code is it raises your Pokemon to its full potential. Even at Level 100, most Pokemon still have a way to go to raise their stats to the max. But with this code, you can instantly boost any Pokemon to its greatest potential!!!","data":["81171F3C FF01","81171F3E FF01","81171F40 FF01","81171F42 FF01","81171F44 FF01"],"options":null}},"1A7F70B5-00B7B9FD-C:45":{"Andrew Rynolds\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDFD8 00FF","50001001 0000","800EDFE8 00FF"],"options":null},"Andrew Rynolds\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE014 00FF"],"options":null},"Bam Margera\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE348 00FF","50001001 0000","800EE358 00FF"],"options":null},"Bam Margera\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE384 00FF"],"options":null},"Bucky Lasek\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDD44 00FF","50001001 0000","800EDD54 00FF"],"options":null},"Bucky Lasek\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDD80 00FF"],"options":null},"Chad Muska\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDEFC 00FF","50001001 0000","800EDF0C 00FF"],"options":null},"Chad Muska\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDF38 00FF"],"options":null},"Elissa Steamer\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE190 00FF","50001001 0000","800EE1A0 00FF"],"options":null},"Elissa Steamer\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE1CC 00FF"],"options":null},"Eric Koston\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDC68 00FF","50001001 0000","800EDC78 00FF"],"options":null},"Eric Koston\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDCA4 00FF"],"options":null},"Geoff Rowley\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE0B4 00FF","50001001 0000","800EE0C4 00FF"],"options":null},"Geoff Rowley\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE0F0 00FF"],"options":null},"Infinite Stat Upgrades \u0026 Deck Boards to Buy":{"note":"This allows you to ugrade you stats in Upgrades to the Max \u0026 Also to open the Boards in Decks For All Characters.","data":["800ED8F9 00FF","800ED905 00FF","800EDD45 00FF","800EDD51 00FF","800EDFE5 00FF","800EDFD9 00FF","800ED9D5 00FF","800ED9E1 00FF","800EDAB1 00FF","800EDABD 00FF","800EDB8D 00FF","800EDB99 00FF","800EDC69 00FF","800EDC75 00FF","800EDE21 00FF","800EDE2D 00FF","800EDEFD 00FF","800EDF09 00FF","800EE0B5 00FF","800EE0C1 00FF","800EE191 00FF","800EE19D 00FF","800EE26D 00FF","800EE279 00FF","800EE349 00FF","800EE355 00FF","800EE425 00FF","800EE431 00FF","800EE501 00FF","800EE50D 00FF","800EE5DD 00FF","800EE5E9 00FF","800EE6B9 00FF","800EE6C5 00FF","800EE795 00FF","800EE7A1 00FF"],"options":null},"Jamie Thomas\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE26C 00FF","50001001 0000","800EE27C 00FF"],"options":null},"Jamie Thomas\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE2A8 00FF"],"options":null},"Kareem Campbell\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDAB0 00FF","50001001 0000","800EDAC0 00FF"],"options":null},"Kareem Campbell\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDAEC 00FF"],"options":null},"Officer Dick\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE6B8 00FF","50001001 0000","800EE6C8 00FF"],"options":null},"Officer Dick\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE6F4 00FF"],"options":null},"Play As":{"note":"","data":["800E9D69 00??"],"options":{"Andrew Rynolds":"08","Bam Margera":"0C","Bucky Lasek":"05","Chad Muska":"07","Elissa Steamer":"0A","Eric Koston":"04","Geoff Rowley":"09","Jamie Thomas":"0B","Kareem Campbell":"02","Officer Dick":"10","Rodney Mullen":"06","Rune Glifberg":"03","Skater A":"0D","Skater B":"0E","Skater C":"0F","Steve Caballero":"01","Tony Hawk":"00","Wolverine":"11"}},"Play On Level":{"note":"This allows you to play on a level even if it isnt already open just choose \u0026 tick choose foundary or what ever level \u0026 play the one you selected","data":["800ED58F 00??"],"options":{"Airport":"04","Canada":"06","Custom":"09","Downhill":"08","Foundary":"00","Los Angeles":"01","Rio De Janeiro":"02","Skater Island":"05","Suburbia":"03","Tokyo":"07"}},"Rodney Mullen\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDE20 00FF","50001001 0000","800EDE30 00FF"],"options":null},"Rodney Mullen\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDE5C 00FF"],"options":null},"Rune Glifberg\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDB8C 00FF","50001001 0000","800EDB9C 00FF"],"options":null},"Rune Glifberg\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDBC8 00FF"],"options":null},"Skater A\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE424 00FF","50001001 0000","800EE434 00FF"],"options":null},"Skater A\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE460 00FF"],"options":null},"Skater B\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE500 00FF","50001001 0000","800EE510 00FF"],"options":null},"Skater B\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE53C 00FF"],"options":null},"Skater C\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE5DC 00FF","50001001 0000","800EE5EC 00FF"],"options":null},"Skater C\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE618 00FF"],"options":null},"Steve Caballero\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800ED9D4 00FF","50001001 0000","800ED9E4 00FF"],"options":null},"Steve Caballero\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDA10 00FF"],"options":null},"Timer Starts Off At 20 Mins":{"note":"","data":["800E9D64 FFFF"],"options":null},"Tony Hawk\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800ED8F8 00FF","50001001 0000","800ED908 00FF"],"options":null},"Tony Hawk\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800ED934 00FF"],"options":null},"Wolverine\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE794 00FF","50001001 0000","800EE7A4 00FF"],"options":null},"Wolverine\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE7D0 00FF"],"options":null}},"1AA05AD5-46F52D80-C:50":{"Choose Vehicle":{"note":"Make your Choice \u0026 then Press GS To Activate,But do not use with any other Press GS Cheat Codes.","data":["88366807 00??"],"options":{"Birdman":"06","Cannonball":"03","Gyrocopter":"02","Hang Glider":"00","Jumble Hopper":"05","Rocket Belt":"01","Skydiving":"04"}},"Infinite Fuel\\Gyrocopter":{"note":"","data":["80366989 0081"],"options":null},"Infinite Fuel\\Rocket Belt":{"note":"","data":["803669A9 0081"],"options":null},"Infinite Photos":{"note":"","data":["813545EE 0000"],"options":null},"Music Volume Select":{"note":"","data":["80250FA4 00??"],"options":{"Default Volume":"3F","Max Volume":"80","No Music":"00"}},"Time Always 00'00'10":{"note":"This Cheat code is for All Events","data":["803668B8 0001"],"options":null},"[Perfect Score] (All Class \u0026 Level's)":{"note":"To make these codes save to Game-Pak; just pick a level and lose, choose Next then Quit. Enable Disable Perfect Score then save and disable before using the Extra Games Perfect Score Cheat.","data":["50000330 0000","803683ED 0064","50000330 0000","80368A81 0064","50000330 0000","80368BD1 0064","50000330 0000","80369115 0064","50000330 0000","80369265 0064","50000330 0000","803693B5 0064","50000330 0000","803697A9 0064","50000330 0000","803698F9 0064","50000330 0000","80369A49 0064"],"options":null},"[Perfect Score] Extra Games (All Class \u0026 Level's)":{"note":"To make these codes save to Game-Pak; just pick a level and lose, choose Next then Quit. Enable Disable Perfect Score then save and disable before using the Extra Games Perfect Score Cheat.","data":["8036847D 0019","803685CD 0019","8036871D 0019","8036886D 0019","803684AD 0064","803684DD 0064","80368B11 0019","80368C61 0019","80368DB1 0019","80368F01 0019","80368B41 0064","80368B71 0064","803691A5 0019","803692F5 0019","80369445 0019","80369595 0019","803691D5 0064","80369205 0064"],"options":null}},"1B598BF1-ECA29B45-C:45":{"99 Accuracy":{"note":"","data":["80130B80 0063"],"options":null},"99 Bonus":{"note":"","data":["80130B87 0063"],"options":null},"Always Have\\F-15J Eagle":{"note":"","data":["8027CCEC 0010"],"options":null},"Always Have\\X-29A A.T.D.":{"note":"","data":["8027CCED 0020"],"options":null},"Extra Planes":{"note":"","data":["8127CCEC FFFF"],"options":null},"Extra Points":{"note":"","data":["D027A20C 0000","8027A20C 00FF"],"options":null},"Gun Select":{"note":"","data":["8027E023 00??"],"options":{"22mm":"0B","22mm BB Shot":"0A","Air Mines":"02","Chaff":"00","Fire":"14","Fire Arrow":"21","Fire Wave":"17","Fireball":"0D","Hunai Shot":"0C","Jammings":"01","Mahibishi":"03","Ninja Glitch":"16","Ninjabeam":"28","Phoenix":"1F","Rocket":"1E","Sabre":"0E","Star":"20","Tomahawk":"15"}},"Infinite\\99 Lives":{"note":"","data":["80348B98 0063"],"options":null},"Infinite\\Armor":{"note":"","data":["8127CFF4 44A0","8127CFF8 44A0"],"options":null},"Infinite\\Chaffs":{"note":"","data":["8027E017 000A"],"options":null},"Infinite\\Gun":{"note":"","data":["8027E110 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8027CFF5 00C8","8027CFF9 00C8"],"options":null},"Infinite\\Special Weapons":{"note":"","data":["8027E4D2 0002"],"options":null},"Rocket Squad":{"note":"","data":["8027E107 0001"],"options":null},"Tomahawk Squad":{"note":"","data":["8027E109 0001"],"options":null},"Ultra Fast Missile Recharge":{"note":"","data":["8027E300 0001"],"options":null}},"1CC06338-87388926-C:45":{"Enable All Characters":{"note":"","data":["8031B242 0000","8031B243 0004"],"options":null},"Have Max\\Powerups":{"note":"","data":["801CAE23 0002"],"options":null},"Have Max\\Weapon Power-Up":{"note":"","data":["801CAE27 0002"],"options":null},"Infinite\\Bullets":{"note":"For Henry","data":["801D3DA3 0006"],"options":null},"Infinite\\Gold":{"note":"","data":["811CAB42 2710"],"options":null},"Infinite\\Health":{"note":"","data":["811CAB3A 2710"],"options":null},"Infinite\\Health Young Henry":{"note":"","data":["D11C87F6 0010","813A5360 2800"],"options":null},"Infinite\\Items\\Crest Half A":{"note":"","data":["801CAB5B 000A"],"options":null},"Infinite\\Items\\Crest Half B":{"note":"","data":["801CAB5C 000A"],"options":null},"Infinite\\Items\\Cure Ampoule":{"note":"","data":["801CAB4E 000A"],"options":null},"Infinite\\Items\\Healing Kit":{"note":"","data":["801CAB4C 000A"],"options":null},"Infinite\\Items\\Magical Nitro":{"note":"","data":["801CAB55 000A"],"options":null},"Infinite\\Items\\Mandragora":{"note":"","data":["801CAB56 000A"],"options":null},"Infinite\\Items\\Moon Card":{"note":"","data":["801CAB58 000A"],"options":null},"Infinite\\Items\\Oldrey's Diary":{"note":"","data":["801CAB5A 000A"],"options":null},"Infinite\\Items\\Powerup":{"note":"","data":["801CAB4F 000A"],"options":null},"Infinite\\Items\\Purifying":{"note":"","data":["801CAB4D 000A"],"options":null},"Infinite\\Items\\Red Jewels":{"note":"","data":["801CAB44 0068"],"options":null},"Infinite\\Items\\Roast Beef":{"note":"","data":["801CAB4B 000A"],"options":null},"Infinite\\Items\\Roast Chicken":{"note":"","data":["801CAB4A 000A"],"options":null},"Infinite\\Items\\Rose Brooch":{"note":"","data":["801CAB5D 000A"],"options":null},"Infinite\\Items\\Sun Card":{"note":"","data":["801CAB57 000A"],"options":null},"Infinite\\Items\\The Contract":{"note":"","data":["801CAB54 000A"],"options":null},"Infinite\\Items\\Throwing Weapons":{"note":"","data":["801CAB45 0064"],"options":null},"Infinite\\Items\\Winch Lever":{"note":"","data":["801CAB59 000A"],"options":null},"Infinite\\Keys\\Archives":{"note":"","data":["801CAB5E 000A"],"options":null},"Infinite\\Keys\\Art Tower 1":{"note":"","data":["801CAB6A 000A"],"options":null},"Infinite\\Keys\\Art Tower 2":{"note":"","data":["801CAB6B 000A"],"options":null},"Infinite\\Keys\\Chamber":{"note":"","data":["801CAB63 000A"],"options":null},"Infinite\\Keys\\Clocktower A":{"note":"","data":["801CAB6F 000A"],"options":null},"Infinite\\Keys\\Clocktower B":{"note":"","data":["801CAB70 000A"],"options":null},"Infinite\\Keys\\Clocktower C":{"note":"","data":["801CAB68 000A"],"options":null},"Infinite\\Keys\\Clocktower D":{"note":"","data":["801CAB69 000A"],"options":null},"Infinite\\Keys\\Clocktower E":{"note":"","data":["801CAB6E 000A"],"options":null},"Infinite\\Keys\\Control Room":{"note":"","data":["801CAB6C 000A"],"options":null},"Infinite\\Keys\\Copper":{"note":"","data":["801CAB62 000A"],"options":null},"Infinite\\Keys\\Deck":{"note":"","data":["801CAB65 000A"],"options":null},"Infinite\\Keys\\Execution":{"note":"","data":["801CAB64 000A"],"options":null},"Infinite\\Keys\\Garden":{"note":"","data":["801CAB61 000A"],"options":null},"Infinite\\Keys\\Left Tower":{"note":"","data":["801CAB5F 000A"],"options":null},"Infinite\\Keys\\Rose Garden":{"note":"","data":["801CAB66 000A"],"options":null},"Infinite\\Keys\\Storeroom":{"note":"","data":["801CAB60 000A"],"options":null},"Infinite\\Keys\\Thorn":{"note":"","data":["801CAB67 000A"],"options":null},"Infinite\\Keys\\Wall":{"note":"","data":["801CAB6D 000A"],"options":null},"Infinite\\Specials\\Special 1":{"note":"","data":["801CAB47 000A"],"options":null},"Infinite\\Specials\\Special 2":{"note":"","data":["801CAB48 000A"],"options":null},"Infinite\\Specials\\Special 3":{"note":"","data":["801CAB49 000A"],"options":null},"Rapid Fire Gun (Henry-Hold B)":{"note":"For Henry, Hold B","data":["811C87F6 0040","801D3DA3 0006"],"options":null},"Selection Options\\Cut Scene Select":{"note":"With this code, you must use the appropiate level mod before you attemp to run these cut scenes. Not doing so will ruin the cut scene as the graphics will be glitched.","data":["801CAE93 0009","801CAE8B 00??"],"options":{"\"I Smell Poison\" From Underground Waterway":"08","(?)":"22","Actrise Appears Again Before Fight With Carrie":"56","Actrise Appears Again With Cousin Fernandes Before Fight With Carrie":"54","Actrise Appears In Castle Center":"52","Actrise Defeated By Carrie":"57","Ada":"30","Bleeding Statue":"12","Bull Awakens":"17","Castel Destruction":"27","Castle Destruction":"29","Castle Drawbridge Closes And Ortega Appears":"46","Castle Drawbridge Lowers":"03","Castle Gate Closes In Villa Upon Entering Villa":"09","Castle Keep Destructs":"1E","Character Enters Castle":"04","Character In Boat On Foggy Lake":"10","Cornell And Henry Part In Garden":"49","Cornell Meets Henry In Garden":"48","Cosmic Lights":"13","Cousin Fernandes Is Destroyed":"55","Death Is Destroyed":"45","Death(Grim Reaper)":"44","Explosion At Wall In Arena":"14","Explosion At Wall In Castle That Leads To Hidden Room":"15","Finds Hidden Path In Villa Basement":"35","Gate Opens In Forest Of Silence":"1A","Harpie":"38","Harpie Destroyed":"39","Lever \u0026 Gear In Castle":"37","Malus And Reinhardt On Horse":"2B","Malus Appears Again In Upstairs Room Of Castle":"16","Malus Appears For The First Time":"0E","Malus Is Saved By Reinhardt":"2A","Malus Leaves Garden":"0F","Malus On Flying Horse Outside Castle Keep":"1F","Meet Renon For The Last Time In Castle Keep.":"1B","Monster Dracula Appears":"51","One Of The Working Gears Cut Scenes":"19","Renon Appears For First Time":"0B","Rosa In Garden":"25","Rosa Returns":"2E","Scrolling Text About Castle And Henry":"31","Seal Removed From Wall In Arena":"11","Space Warp":"28","Spider People In Tunnel":"24","Thirsty Man":"47","This Cut Scene Runs Cut Scene 27 And 2E":"1C","Vampire In Basement":"33","Vampire In Main Entrance Hall Of Villa":"06","Vampire In Villa Basement Destroyed":"34","Village Vampire In Upstairs Villa":"0D","Vincent The Vampire":"18"}},"Selection Options\\Day Select For Adult Henry":{"note":"","data":["801CAB1F 00??"],"options":{"0 Days":"07","1 Day":"06","2 Days":"05","3 Days":"04","4 Days":"03","5 Days":"02","6 Days":"01","7 Days":"00"}},"Selection Options\\Level Select\\Inter":{"note":"","data":["801CAE7B 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Level Select\\Main":{"note":"","data":["801CAE79 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Status Select":{"note":"","data":["801CAB84 00??"],"options":{"Instant Death":"FF","Never Get Poisoned or Vamped":"00","Normal":"01","Poison":"08","Vamp":"04","Vamped \u0026 Poisoned":"0C"}},"Selection Options\\Weapon Select":{"note":"","data":["801CAB3F 00??"],"options":{"Axe":"04","Cross":"03","Knife":"01","Nothing":"00","Potion":"02"}},"Selection Options\\[Press F9 For Wolfman Can Use Weapons]":{"note":"For Cornell","data":["881CAB37 00??"],"options":{"No (Default)":"04","Yes":"02"}},"Stop Timer Input":{"note":"","data":["811CAB22 0001"],"options":null}},"1D4136F3-AF63EEA9-C:45":{"Always Have Wallet Size":{"note":"","data":["801189DA 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C681D 0010","81119C9E 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["80119821 00FF","80119C97 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,\u0026 then press reset (F1) you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D011BB71 0000","80119D4B 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["8002397C 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801189BE 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801189BF 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801189C0 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801189C1 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1A68 0005","801EE508 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801189DA 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801189DB 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801189D9 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189D4 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189DC 30FF","811189DE FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801189B0 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801189B6 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801189BC 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["801189B4 0009"],"options":null},"Have\\Bombs":{"note":"","data":["801189AE 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["801189B8 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["801189AD 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["801189AC 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["801189AF 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["801189B2 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["801189B5 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["801189B9 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["801189BA 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["801189B1 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["801189B7 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["801189BD 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["801189BB 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["801189B3 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["801189C7 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["801189E0 0007","801189E1 0007","801189E2 0007","801189E3 0007","801189E4 0007","801189E5 0007","801189E6 0007","801189E7 0007","801189E8 0007","801189E9 0007","801189EA 0007","801189F7 0009","801189F8 0009","801189F9 0009","801189FA 0009","801189FB 0009","80118A01 0009","80118A04 0009","801189FF 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801189CC 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["801189C6 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801189C5 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801189CA 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801189C4 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118968 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118971 0008","80118972 0001","80118974 0001","8011896B 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801189D2 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["81119D04 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["80119D0D 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D011BB11 0020","811D93D0 40CB","D011BB11 0000","811D9BF2 000D","801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119D41 00??"],"options":{"English":"00","French":"02","German":"01"}},"Level Select":{"note":"","data":["D01C6E35 0000","8111893A ????"],"options":{"?":"006C","Below The Phantom Gannon Boss":"000C","Dodongo's Cavern":"0004","Gerudo Training Ground":"0008","Inside Jabu-Jabu's Belly":"0027","Inside the Deku Tree":"0000","Lakeside Laboratory":"0042","Royal Family's Tomb":"002C","Shoadow Temple":"0036","Temple Of Time":"0052","Water Temple":"0010"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["80118A07 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["80118A09 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["81118966 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["81119D00 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L\\For Infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D011BB11 0020","811D9BF2 000D"],"options":null},"Press L\\To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D011BB11 0020","811D93D0 40CB"],"options":null},"Time of Day Modifier":{"note":"","data":["81118944 ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["801189C2 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["801189C3 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["80118976 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119B5A 0000","81119B5C 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"1D4136F3-AF63EEA9-C:50":{"Always Have Wallet Size":{"note":"","data":["801189DA 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C681D 0010","81119C9E 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["80119821 00FF","80119C97 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,\u0026 then press reset (F1) you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D011BB71 0000","80119D4B 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["8002397C 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801189BE 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801189BF 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801189C0 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801189C1 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1A68 0005","801EE508 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801189DA 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801189DB 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801189D9 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189D4 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["801189DD 00??","801189DE 00??","801189DF 00??"],"options":{"Off":"00","On":"FF"}},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801189B0 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801189B6 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801189BC 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["801189B4 0009"],"options":null},"Have\\Bombs":{"note":"","data":["801189AE 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["801189B8 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["801189AD 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["801189AC 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["801189AF 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["801189B2 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["801189B5 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["801189B9 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["801189BA 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["801189B1 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["801189B7 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["801189BD 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["801189BB 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["801189B3 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Have\\Status Heart Containers":{"note":"","data":["801189DC 00??"],"options":{"Off":"00","On":"30"}},"Infinite\\Arrows":{"note":"","data":["801189C7 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["801189E0 0007","801189E1 0007","801189E2 0007","801189E3 0007","801189E4 0007","801189E5 0007","801189E6 0007","801189E7 0007","801189E8 0007","801189E9 0007","801189EA 0007","801189F7 0009","801189F8 0009","801189F9 0009","801189FA 0009","801189FB 0009","80118A01 0009","80118A04 0009","801189FF 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801189CC 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["801189C6 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801189C5 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801189CA 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801189C4 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118968 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118971 0008","80118972 0001","80118974 0001","8011896B 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801189D2 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["81119D04 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["80119D0D 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D011BB11 0020","811D93D0 40CB","D011BB11 0000","811D9BF2 000D","801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119D41 00??"],"options":{"English":"00","French":"02","German":"01"}},"Level Select":{"note":"","data":["D01C6E35 0000","8111893A ????"],"options":{"?":"006C","Below The Phantom Gannon Boss":"000C","Dodongo's Cavern":"0004","Gerudo Training Ground":"0008","Inside Jabu-Jabu's Belly":"0027","Inside the Deku Tree":"0000","Lakeside Laboratory":"0042","Royal Family's Tomb":"002C","Shoadow Temple":"0036","Temple Of Time":"0052","Water Temple":"0010"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["80118A07 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["80118A09 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["81118966 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["81119D00 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L\\For Infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D011BB11 0020","811D9BF2 000D"],"options":null},"Press L\\To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D011BB11 0020","811D93D0 40CB"],"options":null},"Time of Day Modifier":{"note":"","data":["81118944 ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["801189C2 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["801189C3 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["80118976 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119B5A 0000","81119B5C 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"1E0E96E8-4E28826B-C:45":{"Level Select":{"note":"","data":["80046353 00??"],"options":{"Level 1":"01","Level 10":"0A","Level 11":"0B","Level 12":"0C","Level 13":"0D","Level 14":"0E","Level 15":"0F","Level 16":"10","Level 17":"11","Level 18":"12","Level 19":"13","Level 2":"02","Level 20":"14","Level 21":"15","Level 22":"16","Level 23":"17","Level 24":"18","Level 25":"19","Level 3":"03","Level 4":"04","Level 5":"05","Level 6":"06","Level 7":"07","Level 8":"08","Level 9":"09"}},"Stop Timer From Counting Down (All Levels)":{"note":"","data":["8101D4FC 2400"],"options":null}},"1E12883D-D3B92718-C:46":{"In-Game Cheats\\Access Cheat menu":{"note":"","data":["50000504 0000","80100D98 0001"],"options":null},"In-Game Cheats\\Enable\\All Items":{"note":"To access simply pause in game play \u0026 then unpause.","data":["80100D7C 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Invincibility":{"note":"","data":["802AAFE8 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Monsters":{"note":"","data":["802AB15B 00??"],"options":{"Are Active":"00","Are Gone":"01"}},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A6356 0064","812A639E 0064","812A63AE 00C8","812A6398 1900","812A6368 04B0","812A639A 0640","812A6338 0960","812A639C 0190"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Keys":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A6353 000F"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A63C7 0001","50000E02 0000","812A630C 03E7"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Infinite Health (All Levels)":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on Single-Player, Co-Operative and DUKEMATCH, All Levels.","data":["8024D25F 0064","802A6309 0064"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A66E2 0064","812A672A 0064","812A673A 00C8","812A6724 1900","812A66F4 04B0","812A6726 0640","812A66C4 0960","812A6728 0190"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A6753 0001","50000E02 0000","812A6698 03E7"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on DUKEMATCH, All Levels.","data":["8024C18F 0064","802A6695 0064"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A6A6E 0064","812A6AB6 0064","812A6AC6 00C8","812A6AB0 1900","812A6A80 04B0","812A6AB2 0640","812A6A50 0960","812A6AB4 0190"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A6ADF 0001","50000E02 0000","812A6A24 03E7"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 4 on DUKEMATCH, All Levels.","data":["8024BCEB 0064","802A6A21 0064"],"options":null},"Single-Player (All Levels)\\Have All\\Items \u0026 Infinite Use on all levels":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5FCA 0064","812A6012 0064","812A6022 00C8","812A600C 1900","812A600E 0640","812A5FDC 04B0","812A5FAC 0960","812A6010 0190"],"options":null},"Single-Player (All Levels)\\Have All\\Keys":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5FC7 000F"],"options":null},"Single-Player (All Levels)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000C01 0000","802A603B 0001","50000C02 0000","812A5F7E 03E7"],"options":null},"Single-Player (All Levels)\\Have Infinite Health (All Levels)":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels and does what it says on the tin. Infinite health for player 1, All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802479DB 0064","8026F1DB 0064","802A5F7D 0064"],"options":null}},"1EA26214-E790900F-C:50":{"All Characters":{"note":"","data":["50000301 0000","8010EB51 00FF"],"options":null},"All Levels Completed":{"note":"Unlocks Frag Fest \u0026 Time Trial","data":["50000601 0000","8010EB7D 00FF"],"options":null},"Deaths Modifier":{"note":"","data":["8110EB76 ????"],"options":{"10":"000A","100":"0064","1600":"0640","20":"0014","200":"00C8","30":"001E","40":"0028","400":"0190","50":"0032","800":"0320","Infinite":"03E7"}},"Have All\\Medals":{"note":"Unlocks the In-Game Cheat Menu.Only works with a Controller-Pak","data":["8010EB50 0003","50000601 0000","8010EB4A 00FF"],"options":null},"Have All\\Mini Game Icons":{"note":"Only works with a Controller-Pak","data":["8010EB17 0024"],"options":null},"Infinite Ammo All Guns\\Player 1":{"note":"","data":["50000302 0000","80336535 0063","50000702 0000","80692B95 0063"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["80336527 0064","80692B86 0064"],"options":null},"Infinite Lives\\Player 1":{"note":"","data":["8033637E 0064"],"options":null},"Total Kills Modifier":{"note":"","data":["8110EB6E ????"],"options":{"10":"000A","100":"0064","1600":"0640","20":"0014","200":"00C8","30":"001E","40":"0028","400":"0190","50":"0032","800":"0320","Infinite":"03E7"}},"Wins Modifier":{"note":"","data":["8110EB72 ????"],"options":{"10":"000A","100":"0064","1600":"0640","20":"0014","200":"00C8","30":"001E","40":"0028","400":"0190","50":"0032","800":"0320","Infinite":"03E7"}}},"1FA056E0-A4B9946A-C:4A":{"All Bosses 1 Hit Deaths":{"note":"","data":["811BE182 0000"],"options":null},"Enable\\Max Power Mode":{"note":"","data":["8015D117 0001"],"options":null},"Flashlight Mod":{"note":"","data":["80179148 00??"],"options":{"Off":"00","On":"01"}},"Have All Characters In Multi":{"note":"","data":["8115D112 FFFF","8115D110 0003","8015D111 0003"],"options":null},"Have\\All\\Weapons,Items \u0026 Infinite Ammo\\Player 1":{"note":"","data":["8017A79F 001E","8017A7B3 0008","8017A7B7 0009","801584C4 0009","8015D117 0001","801584C0 000C","801584C1 0060","801584C3 0001","50000601 0000","801584C5 0001","801584CB 0009","801584CD 000C"],"options":null},"Infinite Health":{"note":"","data":["8017A7BB 0064"],"options":null},"Start with Weapon\\Player 1":{"note":"","data":["8017A7A8 00??"],"options":{"Cool Rocket Launcher With Infinite Ammo":"09","HandGun":"00","Invisible Gun 1 With Infinite Ammo":"06","Invisible Gun 2 With Infinite Ammo":"07","M16 With Infinite Ammo":"04","Machinegun":"01","New Cooler Handgun":"05","Odd Inviso ShotGun With Infinite Ammo":"08","Rocket Launcher":"03","Shotgun":"02","Silenced Handgun":"14"}},"Time is Always 00:00:00":{"note":"","data":["8110DA62 0000"],"options":null}},"1FB5D932-3BA9481B-C:45":{"Don't Take Any Damage":{"note":"","data":["8104A260 2400"],"options":null},"Enable Cheat Select":{"note":"","data":["80115933 00??"],"options":{"All Weapons With Fast Run":"42","All Weapons With Infinite Ammo":"06","Fast run":"40","Have All Weapons":"02","Infinite Ammo":"04","Infinite Ammo With Fast Run":"44","Invincible":"01","Invincible With All Weapons And Fast Run":"43","Invincible With All Weapons and Ammo and Fast Run":"47","Invincible With Fast Run":"41","Invincible With Infinite Ammo and All Weapons":"07"}},"Enable In-Game Cheat Menu \u0026 Level Select":{"note":"","data":["81115936 014F"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810496D0 2400"],"options":null},"Sixty Hack":{"note":"","data":["800F8697 0001","800F87CF 0001","800F8907 0001"],"options":null},"Sound Select\\Music Volume":{"note":"","data":["80115944 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"Sound Select\\SFX Volume":{"note":"","data":["80115945 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"[Press L For Levitate]":{"note":"","data":["D10F7550 0020","816FE35C 43D5"],"options":null}},"1FBAF161-2C1C54F1-C:41":{"Enable All Levels \u0026 Boarders":{"note":"","data":["80255089 00FF","8025508B 0005","81255096 FCFF","80255098 0007"],"options":null},"Have All\\Contest First Place Done":{"note":"","data":["80244098 0007"],"options":null},"Have All\\Match Levels Completed":{"note":"","data":["8025508A 0005"],"options":null},"Have All\\Trick Attacks Done":{"note":"","data":["81255096 FCFF"],"options":null},"Infinite Damage All Players \u0026 Levels":{"note":"","data":["803F4C3D 0000"],"options":null},"Infinite Lives \u0026 Continues":{"note":"","data":["8026B1CB 0003"],"options":null},"Open Level Character Select":{"note":"With these codes, you have to press the buttons listed below when you are viewing a certain boarders stats. Highlight Akari Hayami's stats, and then hold down the C-Left button and then press the A button to be the Crystal Boarder. Highlight Kensuke Kimachi's stats, and then hold down the C-Up button and then press the A button to be the Metal Boarder. Hightlight Rob Haywood's stats, and then hold down the C-Right button and then press the A button to be the Panda Boarder","data":["8125508A 00??"],"options":{"Easy \u0026 Normal Level":"02","Easy Level":"01","Easy Normal \u0026 Hard Levels":"03","Easy Normal Hard Levels \u0026 Crystal \u0026 Metal Boarders":"05","Easy Normal Hard Levels \u0026 Crystal Boarder":"04"}},"Play As":{"note":"","data":["800200E7 00??"],"options":{"Akari Hayami":"02","Dion Blaster":"00","Gold Boarder":"06","Kensuke Kimachi":"01","Panda Boarder":"07","Ricky Winterborn":"03","Rob Haywood":"04","Silver Boarder":"05"}},"Stop Timer\\Contest\\Air Make":{"note":"","data":["80319CCA 00C5"],"options":null},"Stop Timer\\Contest\\Crystal Lake":{"note":"","data":["8029C1EA 00C5"],"options":null},"Stop Timer\\Contest\\Crystal Peak":{"note":"","data":["802A89AA 00C5"],"options":null},"Stop Timer\\Contest\\Golden Forest":{"note":"","data":["802A6E4A 00C5"],"options":null},"Stop Timer\\Contest\\Half Pipe":{"note":"","data":["802F530A 00C5"],"options":null},"Stop Timer\\Time Attack\\Air Make":{"note":"","data":["8031AB5A 0000"],"options":null},"Stop Timer\\Time Attack\\Crystal Lake":{"note":"","data":["802A593A 0000"],"options":null},"Stop Timer\\Time Attack\\Crystal Peak":{"note":"","data":["802B2CDA 0000"],"options":null},"Stop Timer\\Time Attack\\Deadly Fall":{"note":"","data":["802CF67A 0000"],"options":null},"Stop Timer\\Time Attack\\Dragon Cave":{"note":"","data":["802C148A 0000"],"options":null},"Stop Timer\\Time Attack\\Golden Forrest":{"note":"","data":["802B146A 0000"],"options":null},"Stop Timer\\Time Attack\\Half Pipe":{"note":"","data":["802F649A 0000"],"options":null},"Stop Timer\\Time Attack\\Mountain Village":{"note":"","data":["802CBA6A 0000"],"options":null},"Stop Timer\\Trick Attack\\Air Make":{"note":"","data":["8031ABCA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Crystal Lake":{"note":"","data":["8029F77A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Crystal Peak":{"note":"","data":["802AC9FA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Deadly Fall":{"note":"","data":["802C8F1A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Dragon Cave":{"note":"","data":["802BAE4A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Golden Forrest":{"note":"","data":["802AB06A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Half Pipe":{"note":"","data":["802F650A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Mountain Village":{"note":"","data":["802C51EA 00C5"],"options":null},"Widescreen":{"note":"","data":["810F8FE8 240E","810F8FEA 01AB"],"options":null}},"1FC21532-0B6466D4-C:45":{"Gold Tickets\\Player 1":{"note":"","data":["D00BE8C1 0000","8111F7F8 03E7"],"options":null},"Gold Tickets\\Player 2":{"note":"","data":["D00BE8C1 0001","8111F7F8 03E7"],"options":null},"Gold Tickets\\Player 3":{"note":"","data":["D00BE8C1 0002","8111F7F8 03E7"],"options":null},"Gold Tickets\\Player 4":{"note":"","data":["D00BE8C1 0003","8111F7F8 03E7"],"options":null},"Red Tickets\\Player 1":{"note":"","data":["D00BE8C1 0000","8111F7F6 03E7"],"options":null},"Red Tickets\\Player 2":{"note":"","data":["D00BE8C1 0001","8111F7F6 03E7"],"options":null},"Red Tickets\\Player 3":{"note":"","data":["D00BE8C1 0002","8111F7F6 03E7"],"options":null},"Red Tickets\\Player 4":{"note":"","data":["D00BE8C1 0003","8111F7F6 03E7"],"options":null}},"202A8EE4-83F88B89-C:50":{"Always Low Temp\\Player One":{"note":"","data":["810E4668 0000","810E466A 0000"],"options":null},"Always Low Temp\\Player Two":{"note":"","data":["810E4E48 0000","810E4E4A 0000"],"options":null},"In Game Cheat Select\\1":{"note":"","data":["800CDA4A 00??"],"options":{"All stunts":"02","Beat this":"10","Developers team photo":"08","Invincible mode":"04","Small head mode":"20","Transparent riders":"01"}},"In Game Cheat Select\\2":{"note":"","data":["800CDA4B 00??"],"options":{"Big head mode":"01","Debug mode":"04","Down hill mode":"08","Invisible riders":"20","Mirror mode":"02","Night mode":"40","Odd colour mode":"80","Stunt bonus":"10"}},"In-Game cheat modifer":{"note":"","data":["810CDA4A ????"],"options":{"All stunts":"0200","Beat this":"1000","Big head mode":"0001","Debug mode":"0004","Developers team photo":"0800","Down hill mode":"0008","Invincible mode":"0400","Invisible riders":"0020","Mirror mode":"0002","Night mode":"0040","Odd colour mode":"0080","Small head mode":"2000","Stunt bonus":"0010","Transparent riders":"0100"}},"Infinite Time":{"note":"","data":["810F0E36 1770"],"options":null},"Max Score Stunt Mode\\Player One":{"note":"","data":["810E43E8 0098","810E43EA 967F"],"options":null},"Max Score Stunt Mode\\Player Two":{"note":"","data":["810E4BC8 0098","810E4BCA 967F"],"options":null},"Start On Lap":{"note":"","data":["D00E4681 0000","800E4681 00??"],"options":{"Lap 1":"01","Lap 2":"02","Lap 3":"03","Lap 4":"04"}},"Unlock Original Excitebike":{"note":"Press L+R at track selection to Access Soccer,Hill Climb \u0026 Excite 3D","data":["D00F6605 0030","810F2420 FF07"],"options":null}},"204489C1-1286CF2B-C:45":{"Infinite\\99 Dark Knight Discus":{"note":"","data":["802086FE 0063"],"options":null},"Infinite\\99 Lives":{"note":"","data":["802086F1 0063"],"options":null},"Infinite\\Health":{"note":"","data":["802086F2 0064"],"options":null},"Infinite\\Max Charge \u0026 Magnetic Nun Chaku":{"note":"","data":["802086B9 0064"],"options":null},"Press F9 to Have\\Key":{"note":"","data":["88208524 0020"],"options":null},"Suit Select":{"note":"","data":["802086F4 00??"],"options":{"Defensive":"02","Nimble":"03","Offensive":"01","Standard":"00"}},"Weapon Select":{"note":"","data":["802086F7 00??"],"options":{"Dark Knight Discus":"01","Dark Knight Staff":"02","Magnetic Nun Chaku":"03","Standard":"00"}}},"204EC022-B119D185-C:45":{"Andrew Reynolds\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDBE 00FF"],"options":null},"Andrew Reynolds\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDC0 00FF"],"options":null},"Andrew Reynolds\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDBB 00FF"],"options":null},"Andrew Reynolds\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDB8 00FF"],"options":null},"Bob Burnquist\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD5A 00FF"],"options":null},"Bob Burnquist\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD5C 00FF"],"options":null},"Bob Burnquist\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD57 00FF"],"options":null},"Bob Burnquist\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD54 00FF"],"options":null},"Bucky Lasek\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD82 00FF"],"options":null},"Bucky Lasek\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD84 00FF"],"options":null},"Bucky Lasek\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD7F 00FF"],"options":null},"Bucky Lasek\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD7C 00FF"],"options":null},"Chad Muska\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD96 00FF"],"options":null},"Chad Muska\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD98 00FF"],"options":null},"Chad Muska\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD93 00FF"],"options":null},"Chad Muska\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD90 00FF"],"options":null},"Elissa Steamer\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDFA 00FF"],"options":null},"Elissa Steamer\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDFC 00FF"],"options":null},"Elissa Steamer\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDF7 00FF"],"options":null},"Elissa Steamer\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDF4 00FF"],"options":null},"Geoff Rowley\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD6E 00FF"],"options":null},"Geoff Rowley\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD70 00FF"],"options":null},"Geoff Rowley\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD6B 00FF"],"options":null},"Geoff Rowley\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD68 00FF"],"options":null},"Have All Tracks":{"note":"","data":["813D6E42 FFFF","813D4FFA FFFF","813D5D62 FFFF","813D84E2 FFFF","813D4FCA FFFF","813D5F2A FFFF","813D8C52 FFFF","813D5602 FFFF","813D6D3A FFFF"],"options":null},"Jamie Thomas\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDE6 00FF"],"options":null},"Jamie Thomas\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDE8 00FF"],"options":null},"Jamie Thomas\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDE3 00FF"],"options":null},"Jamie Thomas\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDE0 00FF"],"options":null},"Kareem Campbell\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDAA 00FF"],"options":null},"Kareem Campbell\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDAC 00FF"],"options":null},"Kareem Campbell\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDA7 00FF"],"options":null},"Kareem Campbell\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDA4 00FF"],"options":null},"Officer Dick\\Have All\\Gold Medal\\Burnside":{"note":"","data":["800DDE0E 00FF"],"options":null},"Officer Dick\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDE10 00FF"],"options":null},"Officer Dick\\Have All\\Gold Medal\\Skate Park":{"note":"","data":["800DDE0B 00FF"],"options":null},"Officer Dick\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDE08 00FF"],"options":null},"Player 1\\Have\\ Perfect Balance":{"note":"","data":["800DDB83 0001"],"options":null},"Player 1\\Max Points\\Burnside":{"note":"","data":["813D8C52 FFFF"],"options":null},"Player 1\\Max Points\\Downhill Jam":{"note":"","data":["813D5F2A FFFF"],"options":null},"Player 1\\Max Points\\Downtown Chicago":{"note":"","data":["813D4FCA FFFF"],"options":null},"Player 1\\Max Points\\Roswell New Mexico":{"note":"","data":["813D6D3A FFFF"],"options":null},"Player 1\\Max Points\\Street":{"note":"","data":["813D5602 FFFF"],"options":null},"Player 1\\Max Points\\The Mall":{"note":"","data":["813D5D62 FFFF"],"options":null},"Player 1\\Max Points\\The School":{"note":"","data":["813D4FFA FFFF"],"options":null},"Player 1\\Max Points\\The Skate Park":{"note":"","data":["813D84E2 FFFF"],"options":null},"Player 1\\Max Points\\The Warehouse":{"note":"","data":["813D6E42 FFFF"],"options":null},"Player 1\\Max Trick Score\\Burnside":{"note":"","data":["813D8C52 FFFF"],"options":null},"Player 1\\Max Trick Score\\Downhill Jam":{"note":"","data":["813D5F2A FFFF"],"options":null},"Player 1\\Max Trick Score\\Downtown":{"note":"","data":["813D4FCA FFFF"],"options":null},"Player 1\\Max Trick Score\\Roswell":{"note":"","data":["813D6D3A FFFF"],"options":null},"Player 1\\Max Trick Score\\The Mall":{"note":"","data":["813D5D62 FFFF"],"options":null},"Player 1\\Max Trick Score\\The School":{"note":"","data":["813D4FFA FFFF"],"options":null},"Player 1\\Max Trick Score\\The Skate Park Course":{"note":"","data":["813D84E2 FFFF"],"options":null},"Player 1\\Max Trick Score\\The Streets":{"note":"","data":["813D5602 FFFF"],"options":null},"Player 1\\Play As":{"note":"","data":["800D03D4 00??"],"options":{"Andrew Reynolds":"06","Bob Burnquist":"01","Bucky Lasek":"03","Chad Muska":"04","Elissa Steamer":"09","Geoff Rowley":"02","Jamie Thomas":"08","Kareem Campbell":"05","Officer Dick":"0A","Rune Glifberg":"07","Tony Hawk":"00"}},"Player 1\\Super Max\\Air":{"note":"","data":["800D561E FFFF"],"options":null},"Player 1\\Super Max\\Balance":{"note":"","data":["800D561F FFFF"],"options":null},"Player 1\\Super Max\\Ollie":{"note":"","data":["800D561C FFFF"],"options":null},"Player 1\\Super Max\\Speed":{"note":"","data":["800D561D FFFF"],"options":null},"Player 1\\Super Max\\Turning":{"note":"","data":["800D5620 FFFF"],"options":null},"Player 1\\Tony Hawk\\Full Special All Levels":{"note":"","data":["D00C0223 0000","813D6576 02EE","D00C0223 0001","813D4728 02EE","D00C0223 0002","813D5496 02EE","D00C0223 0003","813D7C16 02EE","D00C0223 0004","813D467E 02EE","D00C0223 0005","813D565E 02EE","D00C0223 0006","813D8386 02EE","D00C0223 0007","813D4D36 02EE","D00C0223 0008","813D646E 02EE"],"options":null},"Player 2\\Play As":{"note":"","data":["800D03D5 00??"],"options":{"Andrew Reynolds":"06","Bob Burnquist":"01","Bucky Lasek":"03","Chad Muska":"04","Elissa Steamer":"09","Geoff Rowley":"02","Jamie Thomas":"08","Kareem Campbell":"05","Officer Dick":"0A","Rune Glifberg":"07","Tony Hawk":"00"}},"Player 2\\Super Max\\Air":{"note":"","data":["800D5623 FFFF"],"options":null},"Player 2\\Super Max\\Balance":{"note":"","data":["800D5624 FFFF"],"options":null},"Player 2\\Super Max\\Ollie":{"note":"","data":["800D5621 FFFF"],"options":null},"Player 2\\Super Max\\Speed":{"note":"","data":["800D5622 FFFF"],"options":null},"Player 2\\Super Max\\Turning":{"note":"","data":["800D5625 FFFF"],"options":null},"Rune Glifberg\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDD2 00FF"],"options":null},"Rune Glifberg\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDD4 00FF"],"options":null},"Rune Glifberg\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDCF 00FF"],"options":null},"Rune Glifberg\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDCC 00FF"],"options":null},"Tony Hawk\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD46 00FF"],"options":null},"Tony Hawk\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD48 00FF"],"options":null},"Tony Hawk\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD43 00FF"],"options":null},"Tony Hawk\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD40 00FF"],"options":null}},"20B53662-7B61899F-C:50":{"Have Cheats Menu":{"note":"","data":["800D77D6 01FF"],"options":null},"Infinite Balls":{"note":"","data":["802FD21F 0064"],"options":null},"Infinite Credits":{"note":"","data":["802FD215 0064"],"options":null},"Infinite Energy":{"note":"","data":["802FD209 0064"],"options":null},"Infinite Sponge Darts":{"note":"","data":["802FD223 0064"],"options":null},"Infinite Suckers":{"note":"","data":["802FD222 0064"],"options":null},"Start with 9999 Monster Score":{"note":"","data":["812FD20E 270F"],"options":null}},"214CAD94-BE1A3B24-C:45":{"Gun 4-Way Shot":{"note":"","data":["80129723 0004"],"options":null},"Infinite Fuel":{"note":"","data":["81129726 FFFF"],"options":null},"Infinite Shield":{"note":"","data":["811296C8 03E8"],"options":null},"Infinite Weapon\\1st Position":{"note":"","data":["8012943B 0063"],"options":null},"Infinite Weapon\\2nd Position":{"note":"","data":["8012943F 0063"],"options":null},"Infinite Weapon\\3rd Position":{"note":"","data":["80129443 0063"],"options":null},"Infinite Weapon\\4th Position":{"note":"","data":["80129447 0063"],"options":null},"Infinite Weapon\\5th Position":{"note":"","data":["8012944B 0063"],"options":null},"Max Score":{"note":"","data":["81129426 FFFF"],"options":null},"Score Attack Mode":{"note":"","data":["81129472 0001"],"options":null},"Stage Select On":{"note":"","data":["81129476 0001"],"options":null},"Weapon Modifier\\1st Position":{"note":"Must to be used with the Infinite Weapon Codes","data":["80129439 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\2nd Position":{"note":"Must to be used with the Infinite Weapon Codes","data":["8012943D 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\3rd Position":{"note":"Must to be used with the Infinite Weapon Codes","data":["801294F1 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\Gun Weapon":{"note":"","data":["80129723 00??"],"options":{"2-Way Shot":"02","3-Way Shot":"03","4-Way Shot":"04","No Weapon":"00","Normal Shot":"01"}}},"2153143F-992D6351-C:45":{"Press L + C-Down For Cheat Screen":{"note":"","data":["D01101B3 0024","8103BFE0 0000","D01101B3 0024","8103BFE2 0000"],"options":null}},"21548CA9-9059F32C-C:00":{"Everything Unlocked":{"note":"Have All Grand Prix Levels Open And Completed","data":["8008270F 00FF","8108277A 0FFF"],"options":null},"Regional Class\\Max Grip":{"note":"Do not enable until you are at the Region Class Selection menu. Disbale before restarting.","data":["800B2529 003D","800BC529 003D","800C6529 003D"],"options":null},"Regional Class\\Max Motor":{"note":"Do not enable until you are at the Region Class Selection menu. Disbale before restarting.","data":["800C6481 003D","800BC481 003D","800B2481 003D"],"options":null},"Regional Class\\Max Turbo":{"note":"Do not enable until you are at the Region Class Selection menu. Disbale before restarting.","data":["800B25D1 003D","800BC5D1 003D","800C65D1 003D"],"options":null},"World Challenge\\Max Grip":{"note":"Do not enable until you are at the World Challenge Selection menu. Disbale before restarting.","data":["800B28B1 003D","800BC8B1 003D","800C68B1 003D"],"options":null},"World Challenge\\Max Motor":{"note":"Do not enable until you are at the World Challenge Selection menu. Disbale before restarting.","data":["800B2809 003D","800BC809 003D","800C6809 003D"],"options":null},"World Challenge\\Max Turbo":{"note":"Do not enable until you are at the World Challenge Selection menu. Disbale before restarting.","data":["800B2959 003D","800BC959 003D","800C6959 003D"],"options":null},"World Class\\Max Grip":{"note":"Do not enable until you are at the World Class Selection menu. Disbale before restarting.","data":["800B2861 003D","800BC861 003D","800C6861 003D"],"options":null},"World Class\\Max Motor":{"note":"Do not enable until you are at the World Class Selection menu. Disbale before restarting.","data":["800B27B9 003D","800BC7B9 003D","800C67B9 003D"],"options":null},"World Class\\Max Turbo":{"note":"Do not enable until you are at the World Class Selection menu. Disbale before restarting.","data":["800B2909 003D","800BC909 003D","800C6909 003D"],"options":null},"[Player 1]\\Infinite\\Lives":{"note":"","data":["800827BB 0006"],"options":null},"[Player 1]\\Infinite\\Turbo":{"note":"","data":["80195CF3 00FF"],"options":null},"[Player 1]\\Press R to Come In 1st":{"note":"Do not press this until you have finished the race and came in at whatever position. Then Press R Button to then Come In 1st","data":["D0093671 0010","801460A3 0000"],"options":null}},"219191C1-33183C61-C:50":{"1-Hit Death":{"note":"","data":["81137E7C 4136"],"options":null},"Extra Shields":{"note":"","data":["81137E7C 4316"],"options":null},"Have\\99\\Bonus Collected":{"note":"","data":["80130B87 0063"],"options":null},"Have\\99\\Kills":{"note":"","data":["80130B85 0063"],"options":null},"Have\\99\\Saves":{"note":"","data":["80130B86 0063"],"options":null},"Have\\Medals For\\Ambush at Mos Eisley":{"note":"","data":["88130B1C 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Assault on Kile II":{"note":"","data":["88130B23 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Battle Above Taloraan":{"note":"","data":["88130B26 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Battle of Hoth":{"note":"","data":["88130B2E 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Beggar's Canyon":{"note":"","data":["88130B2C 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Blockade on Chandrila":{"note":"","data":["88130B28 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Defection At Corellia":{"note":"","data":["88130B1F 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Escape From Fest":{"note":"","data":["88130B27 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Imperial Construction Yard":{"note":"","data":["88130B22 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Liberation V":{"note":"","data":["88130B20 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Moff Seerdon's Revenge":{"note":"","data":["88130B2A 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Prisons on Kessel":{"note":"","data":["88130B25 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Raid on Sullust":{"note":"","data":["88130B29 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Rendezvou on Bankhesh":{"note":"","data":["88130B1D 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Rescue on Kessel":{"note":"","data":["88130B24 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\The Battle of Calamari":{"note":"","data":["88130B2B 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\The Death Star Trench Run":{"note":"","data":["88130B2D 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\The Jade Moon":{"note":"","data":["88130B21 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\The Search For The Noonnah":{"note":"","data":["88130B1E 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Infinite\\Infinite Health":{"note":"","data":["81137E7C 4316"],"options":null},"Infinite\\Infinite Lives":{"note":"","data":["80130B10 0008"],"options":null},"Infinite\\Infinite Secondary Weapons":{"note":"","data":["8010CA32 0008"],"options":null}},"2256ECDA-71AB1B9C-C:50":{"Access All Levels":{"note":"","data":["8008AA56 0001","8008AD3A 0001","8008A862 0001","8008A876 0001","8008A88A 0001","8008A89E 0001","8008A8B2 0001","8008A8C6 0011","8008A8DA 0021","8008AD4E 0001","8008A916 0011","8008A92A 0041","8008A93E 0021","8008A966 0001","8008A98E 0001","8008AD62 0001","8008A9DE 0001","8008A9F2 0011","8008AA06 0021","8008AD76 0001","8008A7D6 0001","8008A7EA 0001","8008A812 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81093F50 0063","81093F52 0063","81093F54 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A9097 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810864C2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810864C4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80094105 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A90B5 00??","800A90C5 00??","800A90D5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"22E9623F-B60E52AD-C:50":{"1 Win to Win\\Player 1":{"note":"","data":["D020A84F 0000","8020A84F 0001"],"options":null},"1 Win to Win\\Player 2":{"note":"","data":["D020A84F 0000","8020A84F 0010"],"options":null},"Infinite\\Health\\Player 1":{"note":"","data":["80209D81 00C8"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["81209780 0190"],"options":null},"Infinite\\Money":{"note":"","data":["8121106C 2704"],"options":null},"Infinite\\Special\\Player 1":{"note":"","data":["81209484 0190"],"options":null},"Infinite\\Special\\Player 2":{"note":"","data":["8120B1B0 0190"],"options":null}},"2337D8E8-6B8E7CEC-C:45":{"Infinite\\Eggs Once You Get One":{"note":"This is for All Yoshis All levels","data":["8103E89C 2400"],"options":null},"Infinite\\Health":{"note":"This is for All Yoshis All levels","data":["8102B780 2400"],"options":null},"Infinite\\Lives":{"note":"This is for All Yoshis All levels","data":["800F8DF7 00FF"],"options":null}},"23749578-80DC58FD-C:45":{"1 Lap to Race":{"note":"","data":["800438B3 0009","D021FBAB 0000","8021FBAB 0008","D022359B 0000","8022359B 0008"],"options":null},"Max Gear Ratios":{"note":"","data":["810C9E90 7F1E","810C9E82 707F"],"options":null},"Total Laps to Race Modifier":{"note":"","data":["800438B3 00??"],"options":{"1 lap":"01","2 lap":"02","3 lap":"03","4 lap":"04","5 lap":"05","6 lap":"06","7 lap":"07","8 lap":"08","9 lap":"09"}}},"237E73B4-D63B6B37-C:45":{"Flashing Invincible":{"note":"This cheat Makes you Flash But you cant be harmed,Once out of danger Turn the cheat off to stop the flashing.also do not put this on if you have already been hurt or you will stay on the floor.","data":["800AD767 000A"],"options":null},"Have\\Fire Bombs":{"note":"","data":["800AD73B 0003"],"options":null},"Have\\Kick Bombs Anytime":{"note":"","data":["800AC743 0003"],"options":null},"Have\\Max Fire Level":{"note":"","data":["800AD733 0003"],"options":null},"Infinite\\Bombs":{"note":"","data":["800AD758 0003"],"options":null},"Infinite\\Continue Time":{"note":"","data":["810B5CD6 0090"],"options":null},"Infinite\\Health":{"note":"","data":["800AD75F 0005"],"options":null},"Infinite\\Money":{"note":"","data":["810ABD52 FFFF"],"options":null}},"2388984C-DA7B3CC5-C:45":{"Level Select\\Proving Ground-Tightrope":{"note":"Do Not use this with Level Select The Pit-Starlight. Only use One Level Select Option At A Time","data":["8014BD9F 00??"],"options":{"Basic Training":"01","Bomb Shelter":"0B","Bottleneck":"10","Boxed Set":"06","Cathedral":"04","Crossroads":"02","Dire Straight":"07","Earth Temple":"0D","Fall Out":"05","Fire Temple":"0E","Grim Retreat":"03","Mystic":"0F","Prey":"08","Proving Grounds":"00","Tempered":"0C","Tightrope":"11","Warehouse":"09","Water Temple":"0A"}},"Level Select\\The Pit-Starlight":{"note":"Do Not use this with Level Select Proving Ground-Tightrope. Only use One Level Select Option At A Time","data":["8014BD9F 00??"],"options":{"Ampatheater":"16","Breakdown":"19","Bunker":"15","Courtyard":"22","Crypts":"18","Defcon 5":"1F","Fathom":"1D","Fire Walker":"17","Hopeless":"1B","Leap Of Faith":"13","Matrix":"1C","Retaliation":"1A","Spirit Temple":"20","Starlight":"23","Stronghold":"21","The Pedestal":"1E","The Pit":"12","Wicked Dance":"14"}},"Player 1\\Have All\\Medals":{"note":"","data":["810FCB4A FFFF","810FCB4C FFFF","810FCB4E FFFF","800FCB50 0003"],"options":null},"Player 1\\Have All\\Mini Game Icons":{"note":"","data":["800FCB17 0024"],"options":null},"Player 1\\Infinite Ammo":{"note":"","data":["80336535 0063","80336537 0063","80336539 0063","80692B95 0063","80692B97 0063","80692B99 0063","80692B9B 0063","80692B9D 0063","80692B9F 0063","80692BA1 0063"],"options":null},"Player 1\\Infinite\\Cerebral Bores":{"note":"","data":["8033653B 00FF"],"options":null},"Player 1\\Infinite\\Health":{"note":"","data":["81336526 6400","80692B86 0064"],"options":null},"Player 1\\Infinite\\Metal Claws":{"note":"","data":["80336541 00FF"],"options":null},"Player 1\\Infinite\\Proximity Mines":{"note":"","data":["8033653D 00FF"],"options":null},"Player 1\\Infinite\\Sentry Guns":{"note":"","data":["8033653F 00FF"],"options":null},"Player 1\\Infinite\\Time":{"note":"","data":["811407F4 47AF","811407F6 C4B1"],"options":null},"Player 1\\Play As":{"note":"","data":["80140358 00??"],"options":{"Adon":"05","Bastile":"0B","Blind One":"08","Death Guard":"0A","Drone":"02","Elite Guard":"07","Fireborn":"03","Juggernaut":"09","Lord Of The Dead":"06","Mantid":"01","Mites":"12","Monkey":"13","Pur-Lin":"0F","Raptor":"11","Soldier":"04","Symbiont":"10","Syra":"0C","Tail Set":"0E","Turok":"00"}},"Player 1\\Start With Weapon":{"note":"","data":["803366B0 00??"],"options":{"Assault Rifle":"05","Boomerang":"01","Cerebral Bore":"12","Chest Burster":"0F","Emaciator":"0D","Flaregun":"09","Freeze Gun":"08","Grenade Launcher":"0A","Inflator":"0E","Iron Claw":"14","Mag 60":"03","Mini Gun":"06","Mite Bite":"11","Napalm Gel":"0C","PFM Mine":"13","Plasma Rifle":"07","Raptor Claw":"10","Scorpion Launcher":"0B","Sentry Turret":"15","Shotgun":"04","Tek Crossbow":"02","Warhammer":"00"}}},"2483F22B-136E025E-C:55":{"999 Kills":{"note":"","data":["80163B03 00FF"],"options":null},"Have All Medals":{"note":"For Expert \u0026 Normal Modes","data":["50000802 0000","8017A9D9 7777"],"options":null},"Infinite\\Armor\\Falco":{"note":"","data":["80174187 00FF"],"options":null},"Infinite\\Armor\\Peppy":{"note":"","data":["8017418F 00FF"],"options":null},"Infinite\\Armor\\Slippy":{"note":"","data":["8017418B 00FF"],"options":null},"Infinite\\Dual Blue Lasers":{"note":"","data":["80163C13 0002"],"options":null},"Infinite\\Energy":{"note":"","data":["80141587 00FF","8013E6A7 00FF"],"options":null},"Infinite\\Hyper Laser":{"note":"","data":["80163B13 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["80163B09 0063"],"options":null},"Level Select":{"note":"","data":["8017A29F 00??"],"options":{"Aquas":"0D","Area 6":"03","Bolse":"11","Corneria":"00","Corneria (Multi)":"14","Fortuna":"0E","Glitch":"04","Katina":"10","Macbeth":"0B","Meteo":"01","Sector X":"02","Sector Y":"05","Sector Z":"12","Solar":"07","Titania":"0C","Training Mode Level":"0A","Venom 1":"06","Venom 2":"09","Venom With Starwolf":"13","Zoness":"08"}},"Loads O' Hits":{"note":"","data":["80163B03 00FF"],"options":null},"Unlimited\\Boost":{"note":"","data":["8113E6FC 0000","8113E6FE 0000","811415DC 0000","811415DE 0000","8013E7FD 0000","801416DD 0000"],"options":null},"Unlimited\\Smart Bombs":{"note":"","data":["80179E0B 0063"],"options":null}},"2500267E-2A7EC3CE-C:45":{"All Modes\\Always Have 1st Place":{"note":"","data":["81056444 0001"],"options":null},"All Modes\\Infinite Time":{"note":"","data":["811269CA 0700"],"options":null},"All Modes\\Press R Button For Turbo":{"note":"","data":["D103E1EA 0010","8105641A 0800"],"options":null},"Grand Prix Mode\\2 Tier Cars":{"note":"","data":["80119BB0 0039"],"options":null},"Grand Prix Mode\\All Cars Have Perfect Stats":{"note":"","data":["50008002 0000","8102F314 05DC"],"options":null},"Grand Prix Mode\\Car Modifier":{"note":"","data":["8113CF5A 00??"],"options":{"00-Agent":"19","13th Racing Kid":"0E","Age Solo Supernova":"12","Assoluto Infinito":"11","Atomic Purple":"13","Blinky":"1B","Caddy Car":"1E","Crazy Canuck":"1D","Dig Racing Team":"0C","Digipen Racing":"10","Extreme Green":"14","F/A Racing":"00","Galaga RT Carrot":"07","Galaga RT Prid's":"06","Galaga' 88":"1A","Lizard Nightmare":"16","Micro Mouse Mappy":"0D","PAC Racing":"02","Pooka":"1F","RT Blue Mappy":"05","RT Bosconian":"08","RT Nebulasray":"09","RT Pink Mappy":"04","RT Ryukyu":"01","RT Solvalou":"03","RT Xevious Green":"0B","RT Xevious Red":"0A","Red Shirt Rage":"1C","Screamin' Eagle":"17","Terrazi Terrific":"15","Ultra 64 (Full Stats)":"18","White Angel":"0F"}},"Grand Prix Mode\\Enlarge Cars":{"note":"","data":["81119758 3FC0","811197AC 3FC0","81119800 3FC0"],"options":null},"Grand Prix Mode\\Laps to Race":{"note":"","data":["8111B32E ????"],"options":{"lap":"0101","laps":"0909"}},"Grand Prix Mode\\Microscopic Cars":{"note":"","data":["80119758 003D","801197AC 003D","80119800 003D"],"options":null},"Grand Prix Mode\\Press GS For Overhead View":{"note":"","data":["8811AB0F 0002"],"options":null},"Grand Prix Mode\\Shrink Cars":{"note":"","data":["80119758 003E","801197AC 003E","80119800 003E"],"options":null},"Grand Prix Mode\\Track Modifier":{"note":"","data":["8113CF6A 00??"],"options":{"Renegade Expert":"08","Renegade Intermediate":"05","Renegade Novice":"02","Revolution Expert":"07","Revolution Intermediate":"04","Revolution Novice":"01","Ridge Racer Expert":"06","Ridge Racer Extreme":"09","Ridge Racer Intermediate":"03","Ridge Racer Novice":"00"}},"Grand Prix Mode\\Unlock\\All Cars":{"note":"","data":["8102F19C FFFF","8102F19E FFFF"],"options":null},"Grand Prix Mode\\Unlock\\All Engine Classes All Levels":{"note":"","data":["50001E08 0000","8102FAB0 0004","50001E08 0000","8102FAB2 0403"],"options":null},"Grand Prix Mode\\Unlock\\All Tracks \u0026 Trophies":{"note":"","data":["81043530 FFFF","81043532 FFFF"],"options":null}},"255018DF-57D6AE3A-C:45":{"Access All In-Game Cheats":{"note":"Pause Gameplay To Access","data":["81152946 000F","81152956 FFFF"],"options":null},"Access All Navigation Cards":{"note":"","data":["8015298B 0005"],"options":null},"Access Secret Worlds":{"note":"","data":["81152946 0064"],"options":null},"Infinite Lives":{"note":"","data":["8015299F 0063"],"options":null},"Max \u0026 Total Gold":{"note":"","data":["8015293B 0063","80152AFF 0063"],"options":null}},"2577C7D4-D18FAAAE-C:50":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118D920 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118D922 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118D924 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118D926 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["50000402 0000","8018ED70 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["80165FBD 00??","80165FEA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["8016609D 00??","801660CA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["8016617D 00??","801661AA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["8016625D 00??","8016628A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["8016633D 00??","8016636A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["8016641D 00??","8016644A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818EE4F 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F6975 0020","810F6A28 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F6985 0020","810F7800 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F6995 0020","810F85D8 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F69A5 0020","810F93B0 4000"],"options":null}},"259F7F84-7C9EED26-C:50":{"Infinite\\99 Dark Knight Discus":{"note":"","data":["801D7F4A 0063"],"options":null},"Infinite\\99 Lives":{"note":"","data":["801D7F3E 0064"],"options":null},"Infinite\\Health":{"note":"","data":["801D7F3D 0064"],"options":null},"Infinite\\Max Charge \u0026 Magnetic Nun Chaku":{"note":"","data":["801D7F06 0064"],"options":null},"Press F9 to Have\\Key":{"note":"","data":["881D7D70 0020"],"options":null},"Suit Select":{"note":"","data":["801D7F40 00??"],"options":{"Defensive":"02","Nimble":"03","Offensive":"01","Standard":"00"}},"Weapon Select":{"note":"","data":["801D7F43 00??"],"options":{"Dark Knight Discus":"01","Dark Knight Staff":"02","Magnetic Nun Chuku":"03","Standard":"00"}}},"26035CF8-802B9135-C:45":{"Access All Levels":{"note":"","data":["8008A5C6 0001","8008A5DA 0001","8008A602 0001","8008A652 0001","8008A666 0001","8008A67A 0001","8008A68E 0001","8008A6A2 0001","8008A6B6 0011","8008A6CA 0021","8008A6DE 0001","8008A706 0011","8008A71A 0041","8008A72E 0021","8008A742 0081","8008A756 0001","8008A76A 0081","8008A77E 0001","8008A7A6 0001","8008A7CE 0001","8008A7E2 0011","8008A7F6 0021","8008A846 0001","8008AB2A 0001","8008AB3E 0001","8008AB52 0001","8008AB66 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81093D40 0063","81093D42 0063","81093D44 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A8EA7 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810862B2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810862B4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80093EF5 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A8EA5 00??","800A8EB5 00??","800A8EC5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"264D7E5C-18874622-C:45":{"All Levels\\Dash Becomes Shorter \u0026 Wider":{"note":"","data":["800BA025 FFFF"],"options":null},"All Levels\\Infinite\\Lives":{"note":"","data":["800E05CB 0064"],"options":null},"All Levels\\Infinite\\Missiles":{"note":"","data":["800E1265 00FF"],"options":null},"All Levels\\Large Mutant Enemies":{"note":"","data":["800BB62B FFFF"],"options":null},"All Levels\\No Clipping\\Off":{"note":"","data":["81111E67 0001"],"options":null},"All Levels\\No Clipping\\On":{"note":"","data":["81111E67 0000"],"options":null},"All Levels\\See Through\\Everything Except Specific Things":{"note":"","data":["800BC665 FFFF"],"options":null},"All Levels\\See Through\\Some Walls":{"note":"","data":["800BC625 FFFF"],"options":null},"All Levels\\Time Always 0:00:02":{"note":"","data":["810E04E8 4000"],"options":null},"All Levels\\Visibililty\\Maximum":{"note":"","data":["800BA62B FFFF"],"options":null},"All Levels\\Visibililty\\Minimum":{"note":"","data":["800BA66B FFFF"],"options":null},"All Stages\\Infinite Health":{"note":"","data":["81072D0C 2400"],"options":null},"All Stages\\Infinite\\Disruptor Ammo":{"note":"","data":["81073F04 2400"],"options":null},"All Stages\\Infinite\\Flame Ammo":{"note":"","data":["81073720 2400"],"options":null},"All Stages\\Infinite\\Jet Pack":{"note":"","data":["81076AAC 2400","81076C58 2400","81076B48 2400"],"options":null},"All Stages\\Infinite\\Pulse Ammo":{"note":"","data":["81074204 2400"],"options":null},"All Stages\\Infinite\\Seeker Ammo":{"note":"","data":["81073A94 2400"],"options":null},"All Stages\\Infinite\\Stunner Ammo":{"note":"","data":["81073BD4 2400"],"options":null},"All Stages\\Invincible":{"note":"","data":["8107A770 2400"],"options":null},"All Stages\\Lasers Never Overheat":{"note":"","data":["81073948 2400"],"options":null},"All Stages\\Upper Lasers":{"note":"Don't Use With Never Overheat Code","data":["81073944 3C06","81073946 4EFF"],"options":null},"Press GS For Pink Cheat Debug Screen":{"note":"","data":["890D017F 0001"],"options":null}},"2655BB70-667D9925-C:45":{"Have\\All Magic":{"note":"","data":["800CE9C8 0010","800CE9CD 0000","800CE9D7 0001","800CE9E1 0002","800CE9EB 0003","800CE9F5 0005","800CE9FF 0006","800CEA09 0008","800CEA13 0009","800CEA1D 000B","800CEA27 000E","800CEA31 000F","800CEA3B 0010","800CEA45 0011","800CEA4F 000A","800CEA59 000C","800CEA63 000D"],"options":null},"Have\\Magic On Level 4":{"note":"","data":["810C8B5D FFFF","810C8B5E FFFF","810C8B5F FFFF","810C8B60 FFFF","810C8B61 FFFF","810C8B62 FFFF"],"options":null},"Have\\Max Armour Level":{"note":"","data":["800C8B80 0064"],"options":null},"Have\\Max Experience Level":{"note":"","data":["800C8B7C 00FF"],"options":null},"Have\\Max Spirit Level":{"note":"","data":["800C8B84 0064"],"options":null},"Have\\Max Weapon Level":{"note":"","data":["800C8B82 0064"],"options":null},"Have\\Weapons On Max Upgrade":{"note":"","data":["50000408 0000","800C8B2C 0009"],"options":null},"Infinite Air Under Water":{"note":"","data":["800C8A64 0069"],"options":null},"Infinite Max\\999 Lives":{"note":"","data":["810C8B78 03E8"],"options":null},"Infinite Max\\Fire Ammo":{"note":"","data":["800C8B33 0066"],"options":null},"Infinite Max\\Fusion Ammo":{"note":"","data":["800C8B43 0066"],"options":null},"Infinite Max\\Health":{"note":"","data":["800C8959 0066"],"options":null},"Infinite Max\\Ionic Ammo":{"note":"","data":["800C8B3B 0066"],"options":null},"Infinite Max\\Light Ammo":{"note":"","data":["800C8B2B 0066"],"options":null},"Infinite Max\\Mana":{"note":"","data":["800C8B7F 0066"],"options":null},"Matts":{"note":"","data":["D00C8A4A 0080","810C8963 0100"],"options":null},"Play As Select":{"note":"","data":["800FCD45 00??"],"options":{"Ike Hawkings (Corporal)":"00","Julia Chase (Cartographer)":"02","Karma (The Ex-Deviant)":"03","Max Havok (Chief Enginer)":"04","Mr Bodybolt (7th Passenger)":"06","Solaar (Archbishop)":"05","Sophia Hawkings (Stowaway)":"01"}},"Press A For Bionic Jump":{"note":"This will make you jump to a great height","data":["D00C8A4A 0080","810C8968 ????"],"options":{"Max Jump":"0800","Medium Jump":"0250"}}},"26809B20-39A516A4-C:4A":{"Access All Boards \u0026 Characters":{"note":"","data":["800500C1 000C"],"options":null},"All Street Work Levels Unlocked":{"note":"","data":["50007801 0000","80050170 00??"],"options":{"Courses unlocked":"01","Courses unlocked with A rank":"05","Courses unlocked with B rank":"04","Courses unlocked with C rank":"03","Courses unlocked with S rank":"06"}},"Class Score Select":{"note":"","data":["8016609E 00??"],"options":{"Class A":"64","Class B":"40","Class C":"20","Class S":"FF"}},"Coin Perfect Select":{"note":"this is for Coin Mode to get Perfect Coin Collection Score straight away when you enter the level","data":["801660B3 00??"],"options":{"Giant House Level 1":"6E","Giant House Level 2":"77","Giant House Level 3":"72","Green Park Level 1":"14","Green park Level 2":"1A","Green park Level 3":"2B","Lost Forest Level 1":"4A","Lost Forest Level 2":"59","Lost Forest Level 3":"80","Snow Festival 64 Levels 1 2 \u0026 3":"7D","Sunset Island Level 1":"6F","Sunset Island Level 2":"74","Sunset Island Level 3":"81"}},"Infinite Time\\Attack Time Time 000000":{"note":"","data":["811137EA 0000"],"options":null},"Infinite Time\\Street Work \u0026 Coin":{"note":"","data":["801137E9 0028"],"options":null},"Infinite Time\\Time Attack":{"note":"","data":["801137EB 0000"],"options":null},"Infinite Turbo\\Player 1":{"note":"","data":["80166019 0009"],"options":null},"Infinite Turbo\\Player2":{"note":"","data":["80167991 0009"],"options":null},"Maxed Out Turbo Bar":{"note":"","data":["811656E8 429F","80166017 0051"],"options":null},"Options\\Camera Type Modifier":{"note":"","data":["810500A6 00??"],"options":{"Roll Off Far":"05","Roll Off Mid":"04","Roll Off Near":"03","Roll On Far":"02","Roll On Mid":"01","Roll On Near":"00"}},"Options\\DJ Function Modifier":{"note":"","data":["810500AC 00??"],"options":{"DJ Function Off":"00","DJ Function On":"01"}},"Options\\Music Modifier":{"note":"","data":["800500A9 00??"],"options":{"BGM Off":"00","BGM On":"FF"}},"Options\\Sound Effects Modifier":{"note":"","data":["810500AA 00??"],"options":{"SE Off":"00","SE On":"FF"}}},"26CD0F54-53EBEFE0-C:4A":{"Have\\Max Car Strength":{"note":"This has Graphical Issues when used.....","data":["A0165C21 00FF"],"options":null},"Have\\Max Car Upgrade":{"note":"","data":["80165BF8 00FF","80165BF9 00FF","80165BFA 00FF","80165BFB 005F"],"options":null},"Have\\Max Gear Box Upgrades":{"note":"","data":["80165C00 00FF","80165C01 00FF","80165C02 007F"],"options":null},"Have\\Max Roof Upgrades":{"note":"","data":["81165C2A FFFF"],"options":null},"Have\\Max Steering Upgrades":{"note":"","data":["80165C1A 006F","80165C1B 000F"],"options":null},"Have\\Max Tyre Tred Upgrades":{"note":"","data":["80165C10 00FF"],"options":null},"Have\\Max Weapons Upgrades":{"note":"","data":["81165C32 FFFF","80165C33 00FF"],"options":null},"Have\\Max Wheel Parts Upgrades":{"note":"","data":["80165C0A 00FF","80165C0B 007F"],"options":null},"Infinite\\Blue Pointa":{"note":"","data":["801F92A7 0009"],"options":null},"Infinite\\Red Weapons Use":{"note":"","data":["801F92A5 0009"],"options":null},"Sound Select\\Music Mod":{"note":"","data":["8014A558 00??"],"options":{"High":"10","Medium":"0A","Off":"00"}},"Sound Select\\SFX Mod":{"note":"","data":["8014A559 00??"],"options":{"High":"10","Medium":"0A","Off":"00"}},"Sound Select\\Sound Mod":{"note":"","data":["8014A55A 00??"],"options":{"Mono":"01","Stereo":"00"}},"{Always First With 1 Lap to Race}":{"note":"","data":["800F7A31 0003"],"options":null},"{Unlocked All Stages}":{"note":"","data":["801672EB 000F"],"options":null},"{Weapon Select}":{"note":"","data":["801F92A1 00??"],"options":{"100 Ton Weight":"0E","Blue Lazer Cloud":"10","Bolt Launcher":"0F","Cannon":"08","Crafy Mine":"0B","Freeze Bombs":"09","Hypno Spinning Birds":"0D","Invincible":"02","Iron Beam Drop":"07","Lightening Cloud Attack":"0A","Nothing":"00","Red Spinning Fish?":"03","Rocket Launcher (Hangs?)":"0C","Smoke Bomb":"05","Turbo Boost":"01","Tyre Buster Tacks":"06","Wind Attack":"04"}}},"277B129D-DD3879FF-C:50":{"Earn Spirits Faster":{"note":"","data":["8007C25D 0000"],"options":null},"Have All Elements":{"note":"","data":["8107C24C 3232","8107C24E 3232"],"options":null},"Makes your HP 999-999":{"note":"","data":["8107C22C 03E7","8107C22E 03E7"],"options":null},"Makes your MP 999-999":{"note":"","data":["8107C230 03E7","8107C232 03E7"],"options":null},"No Random Battles":{"note":"","data":["8108CD1C 0000","8108CD1E 0000"],"options":null},"Set Agility to 999-999":{"note":"","data":["8107C234 03E7"],"options":null},"Set Defence to 999-999":{"note":"","data":["8107C236 03E7"],"options":null}},"27A3831D-B505A533-C:45":{"Always Have Wallet Size":{"note":"","data":["801189DA 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C681D 0010","81119C9E 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["80119821 00FF","80119C97 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,\u0026 then press reset (F1) you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D011BB71 0000","80119D4B 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["8002397C 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801189BE 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801189BF 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801189C0 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801189C1 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1A68 0005","801EE508 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801189DA 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801189DB 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801189D9 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189D4 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189DC 30FF","811189DE FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801189B0 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801189B6 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801189BC 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["801189B4 0009"],"options":null},"Have\\Bombs":{"note":"","data":["801189AE 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["801189B8 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["801189AD 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["801189AC 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["801189AF 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["801189B2 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["801189B5 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["801189B9 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["801189BA 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["801189B1 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["801189B7 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["801189BD 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["801189BB 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["801189B3 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["801189C7 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["801189E0 0007","801189E1 0007","801189E2 0007","801189E3 0007","801189E4 0007","801189E5 0007","801189E6 0007","801189E7 0007","801189E8 0007","801189E9 0007","801189EA 0007","801189F7 0009","801189F8 0009","801189F9 0009","801189FA 0009","801189FB 0009","80118A01 0009","80118A04 0009","801189FF 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801189CC 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["801189C6 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801189C5 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801189CA 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801189C4 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118968 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118971 0008","80118972 0001","80118974 0001","8011896B 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801189D2 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["81119D04 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["80119D0D 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D011BB11 0020","811D93D0 40CB","D011BB11 0000","811D9BF2 000D","801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119D41 00??"],"options":{"English":"00","French":"02","German":"01"}},"Level Select":{"note":"","data":["D01C6E35 0000","8111893A ????"],"options":{"?":"006C","Below The Phantom Gannon Boss":"000C","Dodongo's Cavern":"0004","Gerudo Training Ground":"0008","Inside Jabu-Jabu's Belly":"0027","Inside the Deku Tree":"0000","Lakeside Laboratory":"0042","Royal Family's Tomb":"002C","Shoadow Temple":"0036","Temple Of Time":"0052","Water Temple":"0010"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["80118A07 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["80118A09 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["81118966 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["81119D00 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L\\For Infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D011BB11 0020","811D9BF2 000D"],"options":null},"Press L\\To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D011BB11 0020","811D93D0 40CB"],"options":null},"Time of Day Modifier":{"note":"","data":["81118944 ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["801189C2 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["801189C3 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["80118976 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119B5A 0000","81119B5C 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"27C425D0-8C2D99C1-C:50":{"Access All Boards \u0026 Characters":{"note":"","data":["80050071 000C"],"options":null},"All Street Work Levels Unlocked":{"note":"","data":["50007801 0000","80050120 00??"],"options":{"Courses unlocked":"01","Courses unlocked with A rank":"05","Courses unlocked with B rank":"04","Courses unlocked with C rank":"03","Courses unlocked with S rank":"06"}},"Class Score Select":{"note":"","data":["8016609E 00??"],"options":{"Class A":"64","Class B":"40","Class C":"20","Class S":"FF"}},"Coin Perfect Select":{"note":"this is for Coin Mode to get Perfect Coin Collection Score straight away when you enter the level","data":["801660B3 00??"],"options":{"Giant House Level 1":"6E","Giant House Level 2":"77","Giant House Level 3":"72","Green Park Level 1":"14","Green park Level 2":"1A","Green park Level 3":"2B","Lost Forest Level 1":"4A","Lost Forest Level 2":"59","Lost Forest Level 3":"80","Snow Festival 64 Levels 1 2 \u0026 3":"7D","Sunset Island Level 1":"6F","Sunset Island Level 2":"74","Sunset Island Level 3":"81"}},"Infinite Time\\Attack Time Time 000000":{"note":"","data":["8110FA0A 0000"],"options":null},"Infinite Time\\Street Work \u0026 Coin":{"note":"","data":["8010FA09 0028"],"options":null},"Infinite Time\\Time Attack":{"note":"","data":["8010FA0B 0000"],"options":null},"Infinite Turbo\\Player 1":{"note":"","data":["80166019 0009"],"options":null},"Infinite Turbo\\Player2":{"note":"","data":["80167991 0009"],"options":null},"Maxed Out Turbo Bar":{"note":"","data":["811656E8 429F","80166017 0051"],"options":null},"Options\\Camera Type Modifier":{"note":"","data":["81050056 00??"],"options":{"Roll Off Far":"05","Roll Off Mid":"04","Roll Off Near":"03","Roll On Far":"02","Roll On Mid":"01","Roll On Near":"00"}},"Options\\DJ Function Modifier":{"note":"","data":["8105005C 00??"],"options":{"DJ Function Off":"00","DJ Function On":"01"}},"Options\\Music Modifier":{"note":"","data":["80050059 00??"],"options":{"BGM Off":"00","BGM On":"FF"}},"Options\\Sound Effects Modifier":{"note":"","data":["8105005A 00??"],"options":{"SE Off":"00","SE On":"FF"}}},"27C985A8-ED7CE5C6-C:00":{"Buster Parts Slot Select\\Slot 01":{"note":"","data":["8020B293 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 02":{"note":"","data":["8020B294 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 03":{"note":"","data":["8020B295 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 04":{"note":"","data":["8020B296 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 05":{"note":"","data":["8020B297 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 06":{"note":"","data":["8020B298 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 07":{"note":"","data":["8020B299 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 08":{"note":"","data":["8020B29A 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 09":{"note":"","data":["8020B29B 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 10":{"note":"","data":["8020B29C 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 11":{"note":"","data":["8020B29D 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 12":{"note":"","data":["8020B29E 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 13":{"note":"","data":["8020B29F 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 14":{"note":"","data":["8020B2A0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 15":{"note":"","data":["8020B2A1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 16":{"note":"","data":["8020B2A2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 17":{"note":"","data":["8020B2A3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 18":{"note":"","data":["8020B2A4 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 19":{"note":"","data":["8020B2A5 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 20":{"note":"","data":["8020B2A6 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 21":{"note":"","data":["8020B2A7 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 22":{"note":"","data":["8020B2A8 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 23":{"note":"","data":["8020B2A9 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 24":{"note":"","data":["8020B2AA 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 25":{"note":"","data":["8020B2AB 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 26":{"note":"","data":["8020B2AC 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 27":{"note":"","data":["8020B2AD 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 28":{"note":"","data":["8020B2AE 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 29":{"note":"","data":["8020B2AF 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 30":{"note":"","data":["8020B2B0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 31":{"note":"","data":["8020B2B1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 32":{"note":"","data":["8020B2B2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 33":{"note":"","data":["8020B2B3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 01":{"note":"","data":["8020B290 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 02":{"note":"","data":["8020B291 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 03":{"note":"","data":["8020B292 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Freeze Timer at 00:00":{"note":"","data":["811C0E3C 0000","811C0E3E 0000"],"options":null},"Have All\\Normal Items":{"note":"","data":["8120BAE0 FFFF","8120BAE2 FFFF","8120BAE4 FFFF","8120BAE6 FFFF"],"options":null},"Have All\\Special Items":{"note":"","data":["8120BADC FFFF","8120BADE FFFF"],"options":null},"Have All\\Special Weapons":{"note":"These are Equiped With Roll","data":["8120BAD0 FFFF"],"options":null},"Infinite\\Ammo":{"note":"","data":["8120B34A 0080","8120B352 0010","8120B35A 0708","8120B362 0018","8120B36A 0010","8120B372 0708","8120B37A 0020","8120B382 0020","8120B38A 0020","8120B392 0018","8120B39A 012C","8120B3A2 0258"],"options":null},"Infinite\\Health":{"note":"","data":["8120AEAE 0050"],"options":null},"Infinite\\Max Zenny":{"note":"","data":["811C0E4C 0098","811C0E4E 967F"],"options":null},"Rapid Fire":{"note":"","data":["8020B343 0002"],"options":null}},"2829657E-A0621877-C:45":{"Board Select":{"note":"","data":["800ED5C3 00??"],"options":{"Bowser's Magma Mountain":"06","DK's Jungle Adventure":"00","Eternal Star":"07","Explaination Map":"08","Luigi's Engine Room":"04","Mario's Rainbow Castle":"05","Mini Game Stadium":"09","Peach's Birthday Cake":"01","Wario's Battle Canyon":"03","Yoshi's Tropical Island":"02"}},"Lower Left Character\\Coin Options":{"note":"","data":["800F3318 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D635B 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800F331C 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["800F3348 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D639F 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800F334C 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Mini Game Island\\99 Coins":{"note":"","data":["800F37C4 0063"],"options":null},"Mini Game Island\\Always Clear Level":{"note":"","data":["800F32BB 0063"],"options":null},"Mini Game Island\\Press GS For 99 Lives":{"note":"","data":["880F37BB 0063"],"options":null},"Mini Game Island\\World Level Select":{"note":"Select where you want to go then Enable the cheat. as soon as you enter turn the cheat back off so you can move on to the next level and not the same place.","data":["810F32C4 ????"],"options":{"1-1 Coin Block Blitz":"0001","1-2 Coin Block Bash":"0002","1-3 Coin Shower Flower":"0003","1-4 Paddle Battle":"0004","2-1 Memory Match":"0006","2-2 Ground Pound":"0007","2-3 Limbo Dance":"0008","2-4 Magical Mushroom":"0009","2-5 Piranha's Pursuit":"000A","3-1 Crazy Cutter":"0018","3-2 Buried Treasure":"0019","3-3 Desrt Dash":"001A","3-4 Tug O' War":"001B","3-5 Teetering Towers":"001C","9-1 Hammer Drop":"004A","9-2 Slot Car Derby":"004B","9-3 Shell Game":"004C","9-4 Knock Block Tower":"004D","9-5 Platform Peril":"004E","Goal Space - Final Goal":"004F","Save and Return Space 1":"0005","Save and Return Space 2":"001D","Save and Return Space 3":"0029","Save and Return Space 4":"0049","Start Save and Return Space":"0000","World 4-1 to 4-3 - Entrance":"001E","World 4-4 Entrance":"0028","World 6-1 to 6-6 Castle Entrance":"002A","World 8-6 to 8-1 Castle Entrance 2":"0048"}},"Mini Game\\Max 99 Coins":{"note":"","data":["800F3770 0063"],"options":null},"Mini Game\\Unlimited 99 lives":{"note":"","data":["800F3767 0063"],"options":null},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["800F32B8 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D62D3 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800F32BC 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["800F32E8 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D6317 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800F32EC 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Widescreen":{"note":"","data":["8101D5F2 3FE3","8101DA8A 3FE3","D10F8BF6 3FAA","810F8BF6 3FE3","8104BCC0 0801","8104BCC2 7BEA","8104BCC4 C602","8104BCC6 0004","8105EFA8 3C1B","8105EFAA 3FAB","8105EFAC 449B","8105EFAE 0000","8105EFB0 4600","8105EFB2 1082","8105EFB4 8E06","8105EFB6 0008","8105EFB8 0801","8105EFBA 2F32","8105EFBC 4405","8105EFBE 1000","81024D08 0801","81024D0A 7BF0","81024D0C C602","81024D0E 0024","8105EFC0 3C1B","8105EFC2 800E","8105EFC4 8F7B","8105EFC6 811C","8105EFC8 101B","8105EFCA 0004","8105EFCC 2400","8105EFD0 3C1B","8105EFD2 3FAB","8105EFD4 449B","8105EFD6 0000","8105EFD8 4600","8105EFDA 1082","8105EFDC 4405","8105EFDE 1000","8105EFE0 0800","8105EFE2 9344","8105EFE4 8E06","8105EFE6 0028"],"options":null}},"2857674D-CC4337DA-C:45":{"Brightness Modifier":{"note":"","data":["810B96EC ????"],"options":{"Very Dark":"8000","Very Well Lit Up":"7FFF"}},"Ignatius\\Infinite Health\\[Level 01]Chelsea":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802EC6E6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 02]Spitafields":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["803215FE 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 03]Thames Tunnel":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031AB6E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 04]Sewer Snake":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80255E46 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 05]India Docks":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80321546 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 06]Highgate Cemetery":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031B2E6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 07]Hampstead Heath":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["803218B6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 08]Queenhite Docks":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80320C1E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 09]City":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80328256 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 10]Smithfield":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8030B05E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 11]Snowman":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80251496 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 12]Regent's":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80315326 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 13]London Zoo":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031E00E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 14]St. Marilebone":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031CD4E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 15]Bloomsbury":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8032C4F6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 16]Pimlico":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031F9CE 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 17]Jose Manuel":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8025F196 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 18]Westminister":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802F4ECE 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 19]Westminister II":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802F5DE6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 20]The Roofs":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802848FE 0010"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000D02 0000","800A4BAF 0009"],"options":null},"Infinite\\Berzerkers":{"note":"","data":["810A4BBE 0009"],"options":null},"Infinite\\Chaos":{"note":"","data":["810A4BC4 0009"],"options":null},"Infinite\\Dynamite":{"note":"","data":["810A4BB6 0009"],"options":null},"Infinite\\Fire Bombs":{"note":"","data":["810A4BBA 0009"],"options":null},"Infinite\\Flash":{"note":"","data":["810A4BB8 0009"],"options":null},"Infinite\\Freeze Spell":{"note":"","data":["810A4BB4 0009"],"options":null},"Infinite\\Gun":{"note":"","data":["810A4BC6 0009"],"options":null},"Infinite\\Healing":{"note":"","data":["810A4BC2 0009"],"options":null},"Infinite\\Lives":{"note":"","data":["800A4B53 0009"],"options":null},"Infinite\\Multi-Gun":{"note":"","data":["810A4BBC 0009"],"options":null},"Infinite\\Proximity Mines":{"note":"","data":["810A4BB0 0009"],"options":null},"Infinite\\Repulsive Smoke":{"note":"","data":["810A4BB2 0009"],"options":null},"Infinite\\Spider Cards":{"note":"","data":["810A4BAE 0009"],"options":null},"Infinite\\Super Healing":{"note":"","data":["810A4BC0 0009"],"options":null},"Lagfix":{"note":"Makes it stay at 60fps more,set CounterFactor/CountPerOp to 1.","data":["810C24B2 041A"],"options":null},"Level Select":{"note":"","data":["D00978B1 0000","810978B0 00??"],"options":{"Bloomsbury":"0E","Chelsea":"00","City":"08","Hampstead Heath":"06","Highgate Cemetery":"05","India Docks":"04","Jose Manuel":"10","London Zoo":"0C","Map":"14","Pimlico":"0F","Queenhite Docks":"07","Regent's":"0B","Sewer Snake":"03","Smithfield":"09","Snowman":"0A","Spitafields":"01","St. Marilebone":"0D","Thames Tunnel":"02","The Roofs":"13","Westminister":"11","Westminister II":"12"}},"Nadia\\Infinite Health\\[Level 01]Chelsea":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802EB6D6 000C"],"options":null},"Nadia\\Infinite Health\\[Level 02]Spitafield":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80320116 000C"],"options":null},"Nadia\\Infinite Health\\[Level 03]Thames Tunnel":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80319AC6 000C"],"options":null},"Nadia\\Infinite Health\\[Level 04]Sewer Snake":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80254926 000C"],"options":null},"Nadia\\Infinite Health\\[Level 05]India Docks":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["803202CE 000C"],"options":null},"Nadia\\Infinite Health\\[Level 06]Highgate Cemetary":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031A58E 000C"],"options":null},"Nadia\\Infinite Health\\[Level 07]Hampstead Heath":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["803203D6 000C"],"options":null},"Nadia\\Infinite Health\\[Level 08]Queenhite Dock's":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031FB7E 000C"],"options":null},"Nadia\\Infinite Health\\[Level 09]City":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80326A36 000C"],"options":null},"Nadia\\Infinite Health\\[Level 10]Smithfield":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8030A0CE 000C"],"options":null},"Nadia\\Infinite Health\\[Level 11]Snowman":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80250036 000C"],"options":null},"Nadia\\Infinite Health\\[Level 12]Regent's Canal":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80313E36 000C"],"options":null},"Nadia\\Infinite Health\\[Level 13]London Zoo":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031CB66 000C"],"options":null},"Nadia\\Infinite Health\\[Level 14]St. Marilebone":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031B686 000C"],"options":null},"Nadia\\Infinite Health\\[Level 15]Bloomsbury":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8032B256 000C"],"options":null},"Nadia\\Infinite Health\\[Level 16]Pimlico":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031E4B6 000C"],"options":null},"Nadia\\Infinite Health\\[Level 17]Jose Manuel":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8025DA0E 000C"],"options":null},"Nadia\\Infinite Health\\[Level 18]Westminister":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802F360E 000C"],"options":null},"Nadia\\Infinite Health\\[Level 19]Westminister II":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802F4C76 000C"],"options":null},"Nadia\\Infinite Health\\[Level 20]The Roofs":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80282DB6 000C"],"options":null}},"28784622-FFB22985-C:45":{"1 Down Per Possession":{"note":"","data":["800785D2 0004"],"options":null},"Always 1st Down":{"note":"","data":["800785D2 0001"],"options":null},"Infinite Player Creation Pts":{"note":"","data":["8107A0F2 00C8"],"options":null}},"28D5562D-E4D5AE50-C:4A":{"Presss F9 to Refresh Timer to 80":{"note":"When time is running low, just press F9 to refresh the timer back to 80.","data":["890760CA 0400"],"options":null},"Silence Shouting Commentator":{"note":"This shuts off the Shouting Commentary, giving you the much much needed silence.","data":["80076171 0001"],"options":null}},"2952369C-B6E4C3A8-C:50":{"Infinite Health Stadium \u0026 Gym Leader Castle":{"note":"","data":["801DD22D 0030"],"options":null},"Mini Games\\Player 1\\Clear Cut Challenge gets perfect score":{"note":"","data":["801744C3 0063"],"options":null},"Mini Games\\Player 1\\Delibird Delivery Perfect Score":{"note":"","data":["801AC2CC 0063"],"options":null},"Mini Games\\Player 1\\Egg Emergency perfect score":{"note":"","data":["80191C3F 0064"],"options":null},"Mini Games\\Player 1\\Furret Frolic Perfect Score":{"note":"","data":["801E9623 0063"],"options":null},"Mini Games\\Player 1\\Gutsy Golbat has 99 Hearts":{"note":"","data":["D017711F 0001","8017711F 0063"],"options":null},"Mini Games\\Player 1\\Roll Out Rampage Always in 1st Place":{"note":"","data":["80103179 0001"],"options":null},"Mini Games\\Player 1\\Streaming Stampede Perfect Score":{"note":"","data":["8018138B 0063"],"options":null},"Mini Games\\Player 1\\Topsy Turvy":{"note":"Immediatly wins","data":["D01769E7 0001","801769E7 0005"],"options":null},"Mini Games\\Player 2\\Gutsy Golbat has 99 hearts":{"note":"","data":["D017714B 0001","8017714B 0063"],"options":null},"Mini Games\\Player 3\\Gutsy Golbat has 99 hearts":{"note":"","data":["D0177177 0001","80177177 0063"],"options":null},"Mini Games\\Player 4\\Gutsy Golbat has 99 hearts":{"note":"","data":["D01771A3 0001","801771A3 0063"],"options":null}},"29A045CE-ABA9060E-C:46":{"Always 1st":{"note":"","data":["812C56A6 0001"],"options":null},"Have All\\Races":{"note":"","data":["50000702 0000","812B66A4 0101"],"options":null},"Have All\\Ships":{"note":"","data":["50000702 0000","812B66B2 0101"],"options":null},"Infinite\\Boosts\\Player 1":{"note":"","data":["812C56AC 4190"],"options":null},"Infinite\\Boosts\\Player 2":{"note":"","data":["812C59DC 4190"],"options":null},"Infinite\\Time":{"note":"","data":["812B52A0 42C8"],"options":null}},"29CE7692-71C58579-C:50":{"Activate Cheat Menu":{"note":"","data":["80053F78 0001"],"options":null},"Away Team Score":{"note":"","data":["8012BC2D 00??"],"options":{"Max Score":"FF","No Score":"00"}},"Home Team Scores":{"note":"","data":["8012BC2C 00??"],"options":{"Max Score":"FF","No Score":"00"}}},"2A49018D-D0034A02-C:50":{"Access All Tracks":{"note":"","data":["810B88DA 0001"],"options":null},"Always 1st":{"note":"","data":["800BB1F7 0001"],"options":null},"Always Turbo Level 1":{"note":"In Easy Mode","data":["810B4070 3100","810BBD30 0000"],"options":null},"Always Win Head 2 Head":{"note":"","data":["810BD590 0008"],"options":null},"Infinite 99 Lives":{"note":"","data":["800BB1C2 0064"],"options":null},"One Lap To Race":{"note":"","data":["810B88DE 0101"],"options":null}},"2A6B1820-6ABCF466-C:45":{"Activate\\Auto Abort Disable":{"note":"","data":["800F4078 0001"],"options":null},"Activate\\Cones to Mines":{"note":"","data":["800F3F88 0001"],"options":null},"Activate\\Disable Car 2 Car Control":{"note":"","data":["800F4050 0001"],"options":null},"Activate\\Resurrect in Place":{"note":"","data":["800F4080 0001"],"options":null},"Activate\\Stop Timer":{"note":"","data":["800F4090 0001"],"options":null},"Activate\\Upside Down Mode":{"note":"","data":["800F4061 0001"],"options":null},"Always Place 1st":{"note":"","data":["80101339 0000"],"options":null},"Car":{"note":"","data":["D00F40A5 0020","800D9EC1 00??","800D9F64 00??","800DA078 00??","800DA321 00??"],"options":{"F1 Car":"0A","Hot Rod":"09","Taxi":"08"}},"Car Type":{"note":"It gets you from 0-150 in the the time it takes the F1 racer to. Don't use the F1 racer and only hold until you reach 150 or the game will freeze.","data":["800F40B1 00??"],"options":{"Fat Car":"02","Flat Car":"01","Giant Car":"03","Invisible Car":"0A","Invisible Car (Can See Wheels)":"CD","Normal Car":"00","Paper-Thin Cars":"66","Screen-Talled Cars":"6E","Super-Sky Car":"BB","Super-Sky Car #2":"DD","Super-Tiny Car":"FF","Super-Tiny Car #2":"44"}},"Edge Boost":{"note":"by pressing R you will get a small speed boost that pushes you ahead.","data":["D00F40A5 0010","81101331 FFFF"],"options":null},"Gravity":{"note":"","data":["800F3D91 00??"],"options":{"1 Weight":"02","2 Weights":"03","A Balloon \u0026 2 Weights":"00","Normal":"01"}},"Have Two Special Cars":{"note":"You receive the Hotrod and Taxi with this code, but you may have to go through the cars from the \"Beginning\" past the \"Extreme\" for them to appear.","data":["810CAC82 FFFF","810CAC98 FFFF","810CACAE FFFF","810CACC4 FFFF","810CACDA FFFF","810CACF0 FFFF"],"options":null},"Press GS For Track Select":{"note":"With this code, press GS when on the track selction screen and press A to select that track!","data":["88100050 00??"],"options":{"Track 1":"00","Track 2":"01","Track 3":"02","Track 4":"03","Track 5":"04","Track 6":"05","Track 7":"06"}}},"2AF9B65C-85E2A2D7-C:45":{"Always Place 1st":{"note":"","data":["800A960F 0000"],"options":null},"Infinite Time":{"note":"","data":["80094E97 0064"],"options":null},"Low Course Time":{"note":"","data":["8009483B 0000"],"options":null}},"2B38AEC0-6350B810-C:46":{"Always Have\\50 pieces of corn":{"note":"","data":["801E27C1 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E27B0 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["811E27AE 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E27C2 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E27B5 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E27C0 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D0090001 0010","811E2726 1000","D0090001 0010","811E2736 1000"],"options":null},"No Music":{"note":"","data":["801DD966 0000"],"options":null},"Start with Berry Weapon":{"note":"","data":["801E27B7 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Subtitles On":{"note":"","data":["801DDBDB 00??"],"options":{"Off":"00","On":"01"}},"Unlock All Levels":{"note":"","data":["81099E90 000F"],"options":null}},"2B4F4EFB-43C511FE-C:50":{"Always Have Weapon Options\\Player 1":{"note":"","data":["810E2DD4 00??"],"options":{"Anvil":"79","Bee hive":"6D","Bird bath":"04","Blue Swordfish":"63","Bouy":"29","Broom":"08","Chair":"0B","Champagne":"0C","Chicken":"0E","Club":"03","Crate":"0F","Deck chair":"14","Egg":"16","Fish":"1A","Frying Pan":"1E","Gardeners Fork":"1D","Mallet":"2A","Milk Bottle":"2D","Mooses head":"78","NCube knife":"09","NCube missiles":"0A","Plank":"39","Rolling Pin":"41","Saucepan":"64","Spade":"46","Spanner":"4E","Stick":"55","Stool":"6B","Tennis Racket":"48","Watermelon":"2B","Wooden Chair":"1F","Wooden Spoon":"65"}},"Always Have Weapon Options\\Player 2":{"note":"","data":["810E30AC 00??"],"options":{"Anvil":"79","Bee hive":"6D","Bird bath":"04","Blue Swordfish":"63","Bouy":"29","Broom":"08","Chair":"0B","Champagne":"0C","Chicken":"0E","Club":"03","Crate":"0F","Deck chair":"14","Egg":"16","Fish":"1A","Frying Pan":"1E","Gardeners Fork":"1D","Mallet":"2A","Milk Bottle":"2D","Mooses head":"78","NCube knife":"09","NCube missiles":"0A","Plank":"39","Rolling Pin":"41","Saucepan":"64","Spade":"46","Spanner":"4E","Stick":"55","Stool":"6B","Tennis Racket":"48","Watermelon":"2B","Wooden Chair":"1F","Wooden Spoon":"65"}},"Infinite Health":{"note":"","data":["800E2BDD 00C8"],"options":null},"Infinite time":{"note":"","data":["800FF18E 00F0"],"options":null},"No music":{"note":"","data":["800B7718 0000"],"options":null},"One Hit To Kill\\Player 1":{"note":"This Will Give Player 1 A One Hit Kill Over Player 2","data":["800E2EB4 0080"],"options":null},"One Hit To Kill\\Player 2":{"note":"This Will Give Player 2 A One Hit Kill Over Player 1","data":["800E2BDC 0080"],"options":null},"Open All Versus Arenas":{"note":"","data":["800E4934 00FF","800E4935 00FF"],"options":null},"[Unlock All Characters]":{"note":"This Gives you all Characters to choose from plus fixes A freeze on the Charecter Select Menu by having it on","data":["800E4933 00FF"],"options":null}},"2B6FA7C0-09A71225-C:45":{"Aquadome Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE013 0000"],"options":null},"Aquadome Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F14A3 0000"],"options":null},"Aquadome Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE012 0200"],"options":null},"Aquadome Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F14B2 0200"],"options":null},"Aquadome Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE00B 00AA"],"options":null},"Aquadome Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F14AB 00AA"],"options":null},"Aquadome Stage\\No Energy\\Player 1":{"note":"","data":["801EE00B 0000"],"options":null},"Aquadome Stage\\No Energy\\Player 2":{"note":"","data":["801F14AB 0000"],"options":null},"Backwash Bay Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE763 0000"],"options":null},"Backwash Bay Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1C03 0000"],"options":null},"Backwash Bay Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE772 0200"],"options":null},"Backwash Bay Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1C12 0200"],"options":null},"Backwash Bay Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE76B 00AA"],"options":null},"Backwash Bay Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1C0B 00AA"],"options":null},"Backwash Bay Stage\\No Energy\\Player 1":{"note":"","data":["801EE76B 0000"],"options":null},"Backwash Bay Stage\\No Energy\\Player 2":{"note":"","data":["801F1C0B 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EF1B3 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F2653 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EF1C2 0200"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F2662 0200"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EF1BB 00AA"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F265B 00AA"],"options":null},"Boogerhenge, Tureen Toilet Stage\\No Energy\\Player 1":{"note":"","data":["801EF1BB 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\No Energy\\Player 2":{"note":"","data":["801F265B 0000"],"options":null},"Candy Factory Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE8E3 0000"],"options":null},"Candy Factory Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1D83 0000"],"options":null},"Candy Factory Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE8F2 0200"],"options":null},"Candy Factory Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1D92 0200"],"options":null},"Candy Factory Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE8EB 00AA"],"options":null},"Candy Factory Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1D8B 00AA"],"options":null},"Candy Factory Stage\\No Energy\\Player 1":{"note":"","data":["801EE8EB 0000"],"options":null},"Candy Factory Stage\\No Energy\\Player 2":{"note":"","data":["801F1D8B 0000"],"options":null},"Clayribbean Cruise Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE6D3 0000"],"options":null},"Clayribbean Cruise Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1B73 0000"],"options":null},"Clayribbean Cruise Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE6E2 0200"],"options":null},"Clayribbean Cruise Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1B82 0200"],"options":null},"Clayribbean Cruise Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE6DB 00AA"],"options":null},"Clayribbean Cruise Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1B7B 00AA"],"options":null},"Clayribbean Cruise Stage\\No Energy\\Player 1":{"note":"","data":["801EE6DB 0000"],"options":null},"Clayribbean Cruise Stage\\No Energy\\Player 2":{"note":"","data":["801F1B7B 0000"],"options":null},"Extra Characters and Secret Options":{"note":"","data":["8019ED41 000F"],"options":null},"Freezing Fortress Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE573 0000"],"options":null},"Freezing Fortress Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1A13 0000"],"options":null},"Freezing Fortress Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE582 0200"],"options":null},"Freezing Fortress Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1A22 0200"],"options":null},"Freezing Fortress Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE57B 00AA"],"options":null},"Freezing Fortress Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1A1B 00AA"],"options":null},"Freezing Fortress Stage\\No Energy\\Player 1":{"note":"","data":["801EE57B 0000"],"options":null},"Freezing Fortress Stage\\No Energy\\Player 2":{"note":"","data":["801F1A1B 0000"],"options":null},"Ghastly Graveyard Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE803 0000"],"options":null},"Ghastly Graveyard Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1CA3 0000"],"options":null},"Ghastly Graveyard Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE812 0200"],"options":null},"Ghastly Graveyard Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1CB2 0200"],"options":null},"Ghastly Graveyard Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE80B 00AA"],"options":null},"Ghastly Graveyard Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1CAB 00AA"],"options":null},"Ghastly Graveyard Stage\\No Energy\\Player 1":{"note":"","data":["801EE80B 0000"],"options":null},"Ghastly Graveyard Stage\\No Energy\\Player 2":{"note":"","data":["801F1CAB 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE623 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1AC3 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE632 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1AD2 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE62B 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1ACB 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\No Energy\\Player 1":{"note":"","data":["801EE62B 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\No Energy\\Player 2":{"note":"","data":["801F1ACB 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EFD93 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F3233 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EFDA2 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F3242 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EFD9B 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F323B 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\No Energy\\Player 1":{"note":"","data":["801EFD9B 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\No Energy\\Player 2":{"note":"","data":["801F323B 0000"],"options":null},"Kooky Courtyard Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE9E3 0000"],"options":null},"Kooky Courtyard Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1E83 0000"],"options":null},"Kooky Courtyard Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE9F2 0200"],"options":null},"Kooky Courtyard Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1E92 0200"],"options":null},"Kooky Courtyard Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE9EB 00AA"],"options":null},"Kooky Courtyard Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1E8B 00AA"],"options":null},"Kooky Courtyard Stage\\No Energy\\Player 1":{"note":"","data":["801EE9EB 0000"],"options":null},"Kooky Courtyard Stage\\No Energy\\Player 2":{"note":"","data":["801F1E8B 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Can't be Stunned\\Player 1":{"note":"","data":["801EE513 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Can't be Stunned\\Player 2":{"note":"","data":["801F19B3 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Full Super Bar\\Player 1":{"note":"","data":["811EE522 0200"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Full Super Bar\\Player 2":{"note":"","data":["811F19C2 0200"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Infinite Energy\\Player 1":{"note":"","data":["801EE51B 00AA"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Infinite Energy\\Player 2":{"note":"","data":["801F19BB 00AA"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\No Energy\\Player 1":{"note":"","data":["801EE51B 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\No Energy\\Player 2":{"note":"","data":["801F19BB 0000"],"options":null},"Play As\\Player1":{"note":"","data":["8019ED2F 00??"],"options":{"Bad Mr. Frosty":"00","Blob":"01","Bonker":"02","Boogerman":"03","Dr. Kiln":"04","Earthworm Jim":"05","Houngan":"08","Icky Bod Clay":"09","Kung Pow":"0A","Sumo Santa":"0D","T-Hoppy":"0F","Taffy":"0E"}},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Can't be Stunned\\Player 1":{"note":"","data":["801EDCE3 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Can't be Stunned\\Player 2":{"note":"","data":["801F1183 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Full Super Bar\\Player 1":{"note":"","data":["811EDCF2 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Full Super Bar\\Player 2":{"note":"","data":["811F1192 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Infinite Energy\\Player 1":{"note":"","data":["801EDCEB 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Infinite Energy\\Player 2":{"note":"","data":["801F118B 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\No Energy\\Player 1":{"note":"","data":["801EDCEB 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\No Energy\\Player 2":{"note":"","data":["801F118B 0000"],"options":null},"Rubbage Reef Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE5F3 0000"],"options":null},"Rubbage Reef Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1A93 0000"],"options":null},"Rubbage Reef Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE602 0200"],"options":null},"Rubbage Reef Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1AA2 0200"],"options":null},"Rubbage Reef Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE5FB 00AA"],"options":null},"Rubbage Reef Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1A9B 00AA"],"options":null},"Rubbage Reef Stage\\No Energy\\Player 1":{"note":"","data":["801EE5FB 0000"],"options":null},"Rubbage Reef Stage\\No Energy\\Player 2":{"note":"","data":["801F1A9B 0000"],"options":null},"Rubbage Room Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F0823 0000"],"options":null},"Rubbage Room Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F3CC3 0000"],"options":null},"Rubbage Room Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F0832 0200"],"options":null},"Rubbage Room Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F3CD2 0200"],"options":null},"Rubbage Room Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F082B 00AA"],"options":null},"Rubbage Room Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F3CCB 00AA"],"options":null},"Rubbage Room Stage\\No Energy\\Player 1":{"note":"","data":["801F082B 0000"],"options":null},"Rubbage Room Stage\\No Energy\\Player 2":{"note":"","data":["801F3CCB 0000"],"options":null},"Santa's Toy Factory Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EEE13 0000"],"options":null},"Santa's Toy Factory Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F22B3 0000"],"options":null},"Santa's Toy Factory Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EEE22 0200"],"options":null},"Santa's Toy Factory Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F22C2 0200"],"options":null},"Santa's Toy Factory Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EEE1B 00AA"],"options":null},"Santa's Toy Factory Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F22BB 00AA"],"options":null},"Santa's Toy Factory Stage\\No Energy\\Player 1":{"note":"","data":["801EEE1B 0000"],"options":null},"Santa's Toy Factory Stage\\No Energy\\Player 2":{"note":"","data":["801F22BB 0000"],"options":null},"Stage Select":{"note":"","data":["8019ED2B 00??"],"options":{"Aquadome":"19","Backwash Bay":"16","Boogerhenge":"15","Camp Claynaveral":"02","Candy Factory":"00","Claynaveral Hangar":"01","Clayribbean Cruise":"11","Fiery Furnace":"0F","Freezing Fortress":"08","Ghastly Graveyard":"05","Grotto Gulch":"0A","Happy Harry's Hut":"07","Kiln's Hideout":"0E","Kiln's Laboratory":"0D","Kooky Courtyard":"13","Mudville Mansion":"04","Outhouse":"03","Refuse Room":"09","Research Room":"10","Rubbage Reef":"0C","Rubbage Room":"0B","Santa's Toy Factory":"14","Santa's Workship":"12","Spooky Spire":"06","Tribal Tower":"18","Tureen Toilet":"17"}},"Tribal Tower Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EDD83 0000"],"options":null},"Tribal Tower Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1223 0000"],"options":null},"Tribal Tower Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EDD92 0200"],"options":null},"Tribal Tower Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1232 0200"],"options":null},"Tribal Tower Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EDD8B 00AA"],"options":null},"Tribal Tower Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F122B 00AA"],"options":null},"Tribal Tower Stage\\No Energy\\Player 1":{"note":"","data":["801EDD8B 0000"],"options":null},"Tribal Tower Stage\\No Energy\\Player 2":{"note":"","data":["801F122B 0000"],"options":null}},"2BC1FCF2-7B9A0DF4-C:58":{"All Items":{"note":"","data":["50002402 0202","810ED130 0001","50004601 0000","800ED1B1 0003"],"options":null},"Item Modifier Codes\\Position 01":{"note":"","data":["800ED130 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 02":{"note":"","data":["800ED131 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 03":{"note":"","data":["800ED132 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 04":{"note":"","data":["800ED133 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 05":{"note":"","data":["800ED134 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 06":{"note":"","data":["800ED135 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 07":{"note":"","data":["800ED136 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 08":{"note":"","data":["800ED137 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 09":{"note":"","data":["800ED138 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 10":{"note":"","data":["800ED139 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 11":{"note":"","data":["800ED13A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 12":{"note":"","data":["800ED13B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 13":{"note":"","data":["800ED13C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 14":{"note":"","data":["800ED13D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 15":{"note":"","data":["800ED13E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 16":{"note":"","data":["800ED13F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 17":{"note":"","data":["800ED140 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 18":{"note":"","data":["800ED141 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 19":{"note":"","data":["800ED142 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 20":{"note":"","data":["800ED143 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 21":{"note":"","data":["800ED144 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 22":{"note":"","data":["800ED145 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 23":{"note":"","data":["800ED146 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 24":{"note":"","data":["800ED147 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 25":{"note":"","data":["800ED148 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 26":{"note":"","data":["800ED149 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 27":{"note":"","data":["800ED14A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 28":{"note":"","data":["800ED14B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 29":{"note":"","data":["800ED14C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 30":{"note":"","data":["800ED14D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 31":{"note":"","data":["800ED14E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 32":{"note":"","data":["800ED14F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 33":{"note":"","data":["800ED150 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 34":{"note":"","data":["800ED151 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 35":{"note":"","data":["800ED152 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 36":{"note":"","data":["800ED153 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 37":{"note":"","data":["800ED154 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 38":{"note":"","data":["800ED155 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 39":{"note":"","data":["800ED156 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 40":{"note":"","data":["800ED157 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 41":{"note":"","data":["800ED158 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 42":{"note":"","data":["800ED159 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 43":{"note":"","data":["800ED15A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 44":{"note":"","data":["800ED15B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 45":{"note":"","data":["800ED15C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 46":{"note":"","data":["800ED15D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 47":{"note":"","data":["800ED15E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 48":{"note":"","data":["800ED15F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}}},"2BCCF9C4-403D9F6F-C:4A":{"Always 1st":{"note":"","data":["802133B6 0001"],"options":null},"Always Win Race Heats":{"note":"","data":["802133B6 0001","80377B60 0001","8021455F 0001","80381424 0001"],"options":null},"Class Select":{"note":"This code is useful because you can play Class AA without having to beat a level!","data":["80206857 00??"],"options":{"1 Play":"04","2 Play":"05","3 Play":"06","4 Play":"07","Class AA":"03","Class B":"01","Class C":"00"}},"Super Speed":{"note":"This is Turbo fast,So to slow it down a little more keep the B button pressed down","data":["81213568 4800"],"options":null}},"2C739EAC-9EF77726-C:50":{"Always Have\\BFG":{"note":"","data":["8006338B 0001"],"options":null},"Always Have\\Bio Suite":{"note":"","data":["80063333 00??"],"options":{"Off":"00","On":"FF"}},"Always Have\\Chain Gun":{"note":"","data":["8006337F 0001"],"options":null},"Always Have\\Chainsaw":{"note":"","data":["8006336B 0001"],"options":null},"Always Have\\Double Shotgun":{"note":"","data":["8006337B 0001"],"options":null},"Always Have\\Gun":{"note":"","data":["80063373 0001"],"options":null},"Always Have\\Have Laser Weapon":{"note":"","data":["8006338D 0001"],"options":null},"Always Have\\Have Rocket Launcher":{"note":"","data":["80063381 0001"],"options":null},"Always Have\\Missile Ammo":{"note":"","data":["8006339F 0064"],"options":null},"Always Have\\Missile Launcher":{"note":"","data":["80063383 0001"],"options":null},"Always Have\\Plasma Rifle":{"note":"","data":["80063387 0001"],"options":null},"Always Have\\Shotgun":{"note":"","data":["80063377 0001"],"options":null},"Enable Cheat Menu":{"note":"","data":["8005AA23 0001"],"options":null},"Have All\\Keys":{"note":"","data":["50000504 0000","810634DE FFFF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000A04 0000","8106350A 0001"],"options":null},"Infinite\\Ammo All Weapons":{"note":"","data":["50000404 0000","81063532 013C"],"options":null},"Infinite\\Armor":{"note":"","data":["800634BF 00FF"],"options":null},"Invincible":{"note":"","data":["8006355B 0002"],"options":null},"Invincible And Map Markers":{"note":"","data":["800633BB 0006"],"options":null},"Rapid Fire":{"note":"","data":["810633EA 0B94"],"options":null},"Turn Map Markers On":{"note":"","data":["800633BB 0004"],"options":null},"[Max Brightness]":{"note":"Enable this cheat on rom load to have Max Brightness (internal) and then put Jabo d3d8 on 160% Max for a extra brightness Boost.","data":["8005AA18 0064"],"options":null}},"2DC4FFCC-C8FF5A21-C:50":{"Have\\Max Gold":{"note":"","data":["50000401 0000","80277AA5 00FF"],"options":null},"Have\\Max Total XP":{"note":"","data":["50000401 0000","8027931D 00FF"],"options":null},"Have\\Max Total XP Remaning to Start":{"note":"This will give you 16777215 Total XP Remaning to start with and after your 1st batle will allow you to buy your Max Stats","data":["50000401 0000","80279321 00FF"],"options":null},"Infinite\\99 Health Potions":{"note":"Do Not put this cheat on until you have collected your 1st Health Potion from the 1st Cheat or you will not be able to get into the Sub menu and Continue the game.","data":["8027876B 0063"],"options":null},"Infinite\\Max Health":{"note":"","data":["80279308 001E"],"options":null}},"2E0E7749-B8B49D59-C:58":{"Access In-Game Cheat Menu":{"note":"","data":["8113568C FFFF","8113568E FFFF"],"options":null}},"2E359339-3FA5EDA6-C:50":{"Clear Mission Selector":{"note":"","data":["8112976C 00??"],"options":{"1":"01","2":"02","3":"03","4":"04","5":"05","6":"06","7":"07","8":"08"}},"Gun 4-Way Shot":{"note":"","data":["80129A13 0004"],"options":null},"Infinite Fuel":{"note":"","data":["81129A16 FFFF"],"options":null},"Infinite Shield":{"note":"","data":["811299B8 03E8"],"options":null},"Infinite Weapon\\1st Position":{"note":"","data":["8012972B 0063"],"options":null},"Infinite Weapon\\2nd Position":{"note":"","data":["8012972F 0063"],"options":null},"Infinite Weapon\\3rd Position":{"note":"","data":["80129733 0063"],"options":null},"Infinite Weapon\\4th Position":{"note":"","data":["80129737 0063"],"options":null},"Infinite Weapon\\5th Position":{"note":"","data":["8012973B 0063"],"options":null},"Max Score":{"note":"","data":["81129716 FFFF"],"options":null},"Opens All 5 Item Slots":{"note":"","data":["8012974B 0005"],"options":null},"Option On":{"note":"","data":["8112976A 0001"],"options":null},"Score Attack Mode":{"note":"","data":["81129762 0001"],"options":null},"Stage Select On":{"note":"","data":["81129766 0001"],"options":null},"Texture Mode":{"note":"","data":["81129774 0001"],"options":null},"Weapon Modifier\\1st Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["80129729 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\2nd Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["8012972D 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\3rd Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["801297E1 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\4th Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["801297E5 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\5th Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["801297E9 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\Gun Weapon":{"note":"","data":["80129A13 00??"],"options":{"2-Way Shot":"02","3-Way Shot":"03","4-Way Shot":"04","No Weapon":"00","Normal Shot":"01"}}},"2E955ECD-F3000884-C:45":{"Bowl A Perfect Game":{"note":"","data":["5000090C 0000","800AC9F0 000A","800ACA5E 000A"],"options":null}},"2F493DD0-2E64DFD9-C:45":{"Have\\All Guns In Chest":{"note":"","data":["50000E04 0100","810E8EF4 05FF"],"options":null},"Have\\All Main Items In Chest":{"note":"If you want items that are not listed in the Chest, then just use the Have Item On Slot Select code to have what you desire.","data":["810E8F2C 17FF","810E8F30 1EFF","810E8F34 1FFF","810E8F38 23FF","50000404 0100","810E8F3C 25FF","810E8F4C 2AFF","810E8F50 2BFF","50000304 0100","810E8F54 2EFF","50000F04 0100","810E8F60 32FF","810E8F9C 43FF","50000504 0100","810E8FA0 47FF","50000404 0100","810E8FB4 53FF","50000C04 0100","810E8FC4 58FF"],"options":null},"Have\\Fine Condition Always":{"note":"","data":["810E13E4 0000"],"options":null},"Have\\Item On Slot Select\\Slot 01":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EC8 00??","800E8EC9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 02":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ECC 00??","800E8ECD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 03":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED0 00??","800E8ED1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 04":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED4 00??","800E8ED5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 05":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED8 00??","800E8ED9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 06":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EDC 00??","800E8EDD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 07":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE0 00??","800E8EE1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 08":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE4 00??","800E8EE5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 09":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE8 00??","800E8EE9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 10":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EEC 00??","800E8EED 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Infinite\\Health":{"note":"","data":["810E1322 00C8"],"options":null},"Infinite\\Time":{"note":"","data":["800E8CBF 0010"],"options":null},"Play As":{"note":"This allows you to select what character you wish to play as. Just slect on load and select as normal at the menu and when in game you will be the character of your choice","data":["810E1138 ????"],"options":{"Ada (can crash the game)":"0E80","Cheryl":"0F80","Claire Original":"0380","Claire as Biker":"0980","Claire without jacket":"0780","Claires body Leons outfit":"0B80","Hunk (can crash the game)":"0C80","Leon Original":"0280","Leon Wounded":"0680","Leon as Biker":"0A80","Leon as Stars":"0880","To Fu":"0D80"}},"Play Extra Mission":{"note":"This allows you to select what extra mission you wish to play. Just slect on load and carry on as normal at the menu and when in game you will be the character of your choice Do not use at the same time as [Resident Evil 2 Mode]","data":["810E10EE 00??"],"options":{"The 4th Survior":"48","To-Fu":"49"}},"Quick Chest Access":{"note":"With this code, all you have to do to access the chest, is hold L and Press Start.","data":["D1014FA4 1020","8012BFA8 0001"],"options":null},"Quick Save Access":{"note":"(1 Anytime, anywhere, press Z and B at the same time. You'll get the standard typewriter text: \"It's an old typewriter. You can save your progress with this.\" Note that you must, of course, have an ink ribbon to save. 2) Choose \"Yes\" and you'll be able to save normally. Instead of the location name, your save file will say \"Scenario 1st\" or \"Scenario 2nd.\" 3) When you load your save file, you'll have to skip through the intro, but when the game loads up you'll be exactly where you saved!","data":["D1014FA4 6000","810E8928 8007","D1014FA4 6000","810E892A 4110"],"options":null},"[Biohazard 2 Mode]":{"note":"Note: With this enabled the game will become Bio Hazard 2, the Japanese version of Resident Evil 2! This means all text (except the text in files) is in Japanese, and all cinemas have Japanese subtitles. Note that the title screen will still say Resident Evil 2 Do not use at the same time as Play Extra Mission","data":["D10E10EE 00??","810E10EE 0000"],"options":{"Off":"00","On":"40"}},"[Saves Always 0]":{"note":"No matter how many saves you do ithis makes the game think you Have\\not saved.","data":["810E8B50 0000"],"options":null}},"2F57C9F7-F1E29CA6-C:4A":{"Have All Keys":{"note":"","data":["800C3177 0003"],"options":null},"Infinite 99 Credits":{"note":"","data":["800C30CB 0063"],"options":null},"Infinite Max Lives":{"note":"","data":["800B04D7 0004"],"options":null}},"2F7009DD-FC3BAC53-C:50":{"Diffuculty Modifier":{"note":"","data":["801195DF 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Gems":{"note":"","data":["80128F07 00FF"],"options":null},"Have All\\Level Keys":{"note":"","data":["50000604 0000","80128DE3 0007","80128DFB 001F","80128E1B 00FF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000B04 0000","80128DB7 0001","80128D33 0001"],"options":null},"Have Cheat Menu":{"note":"","data":["811195F0 FFFF","811195F2 FFFF"],"options":null},"Have\\Backpack":{"note":"","data":["80128CEB 0001","80128D2B 0001"],"options":null},"Infinite\\Air":{"note":"","data":["801290E0 0063","801E869A 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128D63 00FF","80128D73 00FF","80128D7F 00FF","50000504 0000","80128D83 00FF","80128F0B 00FF","80128F07 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128D96 5B23","80128DD7 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C1634 1E61","812A25A4 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["80128D7F 00FF"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114F8CA F803","81128D4E 0003","81128D52 0003","81128D56 0003","81128D5A 0003","81128D5E 0003","81128D62 0003","81128D66 0005"],"options":null}},"2F700DCD-176CC5C9-C:45":{"Diffuculty Modifier":{"note":"","data":["8011972F 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Level Keys":{"note":"","data":["50000604 0000","80128E83 0007","80128E9B 001F","80128EBB 00FF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000B04 0000","80128E47 0001","80128E73 0001"],"options":null},"Have\\Backpack":{"note":"","data":["80128E3B 0001","80128E7B 0001"],"options":null},"Have\\Cheat Menu":{"note":"","data":["81119690 FFFF","81119692 FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["81129180 AAE1","811E873A F1FF"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128E03 00FF","80128E13 00FF","80128E1F 00FF","50000504 0000","80128E23 00FF","80128FAB 00FF","80128FA7 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128E36 5B23","80128E77 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C16D4 1E61","812A2644 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["8005E7D9 0098","8105E7F0 2400","8005E7FD 0083"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114FA1A F803","81128E9E 0003","81128EA2 0003","81128EA6 0003","81128EAA 0003","81128EAE 0003","81128EB2 0003","81128EB6 0005"],"options":null}},"2F700DCD-176CC5C9-C:50":{"Diffuculty Modifier":{"note":"","data":["8011967F 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Gems":{"note":"","data":["80128FA7 00FF"],"options":null},"Have All\\Level Keys":{"note":"","data":["50000604 0000","80128E83 0007","80128E9B 001F","80128EBB 00FF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000B04 0000","80128E57 0001","80128DD3 0001"],"options":null},"Have Cheat Menu":{"note":"","data":["81119690 FFFF","81119692 FFFF"],"options":null},"Have\\Backpack":{"note":"","data":["80128D8B 0001","80128DCB 0001"],"options":null},"Infinite\\Air":{"note":"","data":["80129180 0063","801E873A 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128E03 00FF","80128E13 00FF","80128E1F 00FF","50000504 0000","80128E23 00FF","80128FAB 00FF","80128FA7 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128E36 5B23","80128E77 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C16D4 1E61","812A2644 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["80128E1F 00FF"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114F96A F803","81128DEE 0003","81128DF2 0003","81128DF6 0003","81128DFA 0003","81128DFE 0003","81128E02 0003","81128E06 0005"],"options":null}},"2F70F10D-5C4187FF-C:45":{"Diffuculty Modifier":{"note":"","data":["801195DF 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Level Keys":{"note":"","data":["50000604 0000","80128D33 0007","80128D4B 001F","80128D6B 00FF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000B04 0000","80128CF7 0001","80128D23 0001"],"options":null},"Have\\Backpack":{"note":"","data":["80128CEB 0001","80128D2B 0001"],"options":null},"Have\\Cheat Menu":{"note":"","data":["81119540 FFFF","81119542 FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["81129030 AAE1","811E85EA F1FF"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128CB3 00FF","80128CC3 00FF","80128CCF 00FF","50000504 0000","80128CD3 00FF","80128E5B 00FF","80128E57 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128CE6 5B23","80128D27 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C1584 1E61","812A24F4 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["8005E689 0098","8105E6A0 2400","8005E6AD 0083"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114F8CA F803","50000604 0000","81128D4E 0003","81128D66 0005"],"options":null},"Sixty Frames":{"note":"","data":["8000A13F 0001","8000A2FF 0001","8000A68F 0001"],"options":null},"Widescreen":{"note":"","data":["8103851E 43D5"],"options":null}},"30C7AC50-7704072D-C:45":{"Access All\\Chapters, Scenes,\u0026 Multi-Player Characters":{"note":"","data":["50000401 0000","800E9D01 00FF"],"options":null},"Access All\\Characters \u0026 Weapons In Multi Race":{"note":"","data":["810E9D02 ??FF"],"options":{"All Characters \u0026 Baseball bat":"FF","All Characters \u0026 Bones":"F3","All Characters \u0026 Frying Pan":"FB"}},"Conkers Speed Select":{"note":"","data":["810CC318 ????"],"options":{"Fast Conker":"3FF0","Normal Conker":"3F80","Slow Conker":"3F00","Super Fast Conker":"4030"}},"Infinite\\Accuracy Count Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game","data":["800E0B67 0001"],"options":null},"Infinite\\Bags In Heist":{"note":"","data":["800E0BE4 00FF"],"options":null},"Infinite\\Bombs":{"note":"","data":["802055CA 0030"],"options":null},"Infinite\\Head Shot Count Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game,Once you pick up a Gun a shoot once, you will 100%.","data":["800E0B6B 03E7"],"options":null},"Infinite\\Health\\Player 1":{"note":"","data":["800CC49A 0006"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["800CC7C6 270F"],"options":null},"Infinite\\Health\\Player 3":{"note":"","data":["800CCAF2 270F"],"options":null},"Infinite\\Health\\Player 4":{"note":"","data":["800CCE1E 270F"],"options":null},"Infinite\\Lives Player 1":{"note":"","data":["800D2144 0064"],"options":null},"Infinite\\Max Kills Player 1":{"note":"","data":["800E0B47 03E7"],"options":null},"Infinite\\Oxygen":{"note":"","data":["800CC382 0001"],"options":null},"Infinite\\Pots of cash":{"note":"","data":["810D214A FFFF"],"options":null},"Infinite\\Time In Multi":{"note":"","data":["8108FD7A 7500"],"options":null},"Matrix Mode (Anywhere)":{"note":"Press R to activate and then Right-C to exit.","data":["D1042A14 0010","800BEA0C 0001","D1042A14 0010","810BE574 D202","D1042A14 0001","800BEA0C 0000","D1042A14 0001","810BE574 0000"],"options":null},"Play as Option 1":{"note":"Here you can choose who you want to play as, but only one option at a time. Shadow will not be visible, except when playing as Conker.","data":["800D213F 00??"],"options":{"Army Captain":"25","Bald Caveman":"0C","Caveman":"0D","Combat Squirrel":"04","Conker":"05","Conker the Bat":"24","Dinosaur (Cannot move)":"09","Enemy Bat":"23","Female Villager":"1D","Female Villager (with hood and glasses)":"1F","Female Zombie":"22","Gregg":"27","Male Villager":"11","Male Villager (with cap and glasses and moustache)":"1C","Male Villager (with cap and glasses)":"1A","Male Villager (with cap and moustache)":"1B","Male Villager (with cap)":"19","Male Villager (with glasses and moustache)":"14","Male Villager (with glasses)":"12","Male Villager (with hat and glasses and moustache)":"18","Male Villager (with hat and glasses)":"16","Male Villager (with hat and moustache)":"17","Male Villager (with hat)":"15","Male Villager (with moustache)":"13","Male Zombie":"21","Mohican Caveman":"0E","Neo Conker":"10","Skeleton Gregg":"28","Spikey Caveman":"0F","Tank Vehicle (Cannot move)":"08","Tedi":"03","Tedi Boss":"26","Uga":"0B","Wessle":"01","Wessle (Black outfit)":"02"}},"Press L To Levitate\\Player 1":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042A15 0020","810CC2F0 41CB"],"options":null},"Press L To Levitate\\Player 2":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042A1D 0020","810CC61C 41CB"],"options":null},"Press L To Levitate\\Player 3":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042A25 0020","810CC948 41CB"],"options":null},"Press L To Levitate\\Player 4":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042A2D 0020","810CCC74 41CB"],"options":null},"Wait Animation Trigger":{"note":"","data":["800CC5C8 00??"],"options":{"Default at most":"00","Wait animations disabled":"02"}},"Weapon Select In Multi (On Pick Up)":{"note":"Select what Weapon you would like in Multi Player and then on a Weapon Pickup you will have the weapon of your choice.to change for another just Enable the one of your choice to have that instead.(you must have a weapon already to change for the next.","data":["80180873 00??"],"options":{"Buck Shot":"08","Gas Mask":"13","High Powred Riffle With Scope":"0A","Long Pistol with Sight":"06","Nothing":"02","Riffle":"05","Rocket Launcher":"07","Sword":"01","Throwing Knives":"04","Two Automatic Machine Guns":"0C","Yellow Chain-Ssaw":"03"}}},"315C7466-3A453265-C:4A":{"Infinite\\99 Credits":{"note":"","data":["80085B03 0063"],"options":null},"Infinite\\Lives":{"note":"","data":["800A0CE8 0009"],"options":null},"Infinite\\Specials":{"note":"","data":["800A0CE9 0003"],"options":null},"Max\\Combo":{"note":"","data":["810A0CE4 7FFF"],"options":null},"Max\\Lower Level":{"note":"","data":["800A0CF8 0003"],"options":null},"Max\\Score":{"note":"","data":["800A0CD8 03E7","800A0CD9 03E7"],"options":null},"Max\\Upper Level":{"note":"","data":["800A0CF9 0063"],"options":null},"Play As":{"note":"","data":["800A0CEC 00??"],"options":{"Character 1":"00","Character 2":"01","Character 3":"02"}},"Status Modifier":{"note":"","data":["800A0CEA 00??"],"options":{"High":"01","Low":"03","Mid":"02"}}},"319093EC-0FC209EF-C:45":{"1 Player\\Always Place 1st":{"note":"","data":["80103C57 0000"],"options":null},"1 Player\\Max\\Acceleration":{"note":"","data":["8012C49F 000A"],"options":null},"1 Player\\Max\\Shocks":{"note":"","data":["8012C4A7 000A"],"options":null},"1 Player\\Max\\Speed":{"note":"","data":["8012C4A3 000A"],"options":null},"1 Player\\Max\\Tires":{"note":"","data":["8012C4AB 000A"],"options":null},"Multi and 1 Player\\Infinite Turbos\\Player 1":{"note":"Can be used in 1 Player and Multiplayer Modes for Player 1","data":["81103EBA 03E7"],"options":null},"Multi and 1 Player\\Infinite Turbos\\Player 2":{"note":"Multiplayer Mode Only for Player 2","data":["811041AE 03E7"],"options":null},"Multi and 1 Player\\Max Crash Helmets\\Player 1":{"note":"Can be used in 1 Player and Multiplayer Modes for Player 1","data":["80103EB3 0064"],"options":null},"Multi and 1 Player\\Max Crash Helmets\\Player 2":{"note":"Multiplayer Mode Only for Player 2","data":["801041A7 0064"],"options":null}},"3261D479-ED0DBC25-C:45":{"Away Team Scores 0":{"note":"","data":["8012A4EA 0000"],"options":null},"Away Team Scores 150":{"note":"","data":["8012A4EA 0096"],"options":null},"Big Head Mode":{"note":"","data":["81098E88 0100"],"options":null},"Final Four Stadium":{"note":"","data":["80098E98 0089"],"options":null},"GS Button For 1-Second Shot Clock":{"note":"","data":["8912A4BC 3FC0"],"options":null},"Home Team Scores 0":{"note":"","data":["8012A4D2 0000"],"options":null},"Home Team Scores 150":{"note":"","data":["8012A4D2 0096"],"options":null},"Infinite Shot Clock":{"note":"","data":["8112A4BC 4210"],"options":null},"Infinite Time Outs Away":{"note":"","data":["8012A4EC 0006"],"options":null},"Infinite Time Outs Home":{"note":"","data":["8012A4D4 0006"],"options":null},"No Fans In Crowd":{"note":"","data":["810CA520 0454"],"options":null},"No Time Outs Away":{"note":"","data":["8012A4EC 0000"],"options":null},"No Time Outs Home":{"note":"","data":["8012A4D4 0000"],"options":null},"Partially Invisible Players":{"note":"","data":["81098E84 0100"],"options":null},"Programmers Team":{"note":"","data":["81097088 0100"],"options":null},"Shot Clock Disabled":{"note":"","data":["8109707C 0000"],"options":null},"Trail Follows The Ball":{"note":"","data":["810B4600 4100"],"options":null},"Z-Axis Stadium":{"note":"","data":["80098E98 0088"],"options":null}},"32CA974B-B2C29C50-C:46":{"Cheat Menu\\All Weapons Enabled":{"note":"","data":["801D8B19 0001","801D8B85 0001","801D9BE5 0001","801D9CE1 0001","801D9D75 0001","801D9D77 0001","801D9DA9 0001","801DA6D9 0001","801DA6E1 0001","801DA74D 0001","801DB895 0001"],"options":null},"Cheat Menu\\Cheat Menu Enabled":{"note":"","data":["801DA748 0001"],"options":null},"Cheat Menu\\Have All Game Type \u0026 Other":{"note":"","data":["810E1B5E 0FFF"],"options":null},"Cheat Menu\\Have All Weapons":{"note":"","data":["811DA6D0 FFFF"],"options":null},"Enable Debug Menu":{"note":"","data":["800DFCF0 0001"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810A21D4 A65B"],"options":null},"Invincibility":{"note":"","data":["800DF223 0001"],"options":null}},"32EFC7CB-C3EA3F20-C:45":{"Infinite Lives P1":{"note":"","data":["800CE0F3 0003"],"options":null},"Infinite Lives P2":{"note":"","data":["800CE0F7 0003"],"options":null},"Infinite Pistol Ammo":{"note":"","data":["8106006C 2400"],"options":null},"Infinite Rocket Launcher Ammo":{"note":"","data":["81060130 2400"],"options":null},"Infinite Shotgun Ammo":{"note":"","data":["810601D8 2400"],"options":null}},"33BE8CD6-EC186912-C:45":{"Character Creation\\Max\\Aerial":{"note":"","data":["80319675 0009"],"options":null},"Character Creation\\Max\\Brawling":{"note":"","data":["8031F5B5 0009"],"options":null},"Character Creation\\Max\\Dirtiness":{"note":"","data":["80321575 0009"],"options":null},"Character Creation\\Max\\Impact":{"note":"","data":["803121B5 0009"],"options":null},"Character Creation\\Max\\Mat Ability":{"note":"","data":["8031B635 0009"],"options":null},"Character Creation\\Max\\Quickness":{"note":"","data":["803176B5 0009"],"options":null},"Character Creation\\Max\\Speed":{"note":"","data":["803156F5 0009"],"options":null},"Character Creation\\Max\\Strength":{"note":"","data":["802F16F5 0009"],"options":null},"Character Creation\\Max\\Submission":{"note":"","data":["8031D5F5 0009"],"options":null},"Enable Cheat":{"note":"","data":["800B115B 00??"],"options":{"All Wrestlers":"80","Momentum Meter":"08","Play As Same Wrestler":"20","Stamina Meter":"04","Super Created Wrestlers":"02"}},"Freeze Timer":{"note":"","data":["810B3242 D300"],"options":null},"Infinite Stamina\\Player 1":{"note":"","data":["810E3998 0478"],"options":null},"Infinite Stamina\\Player 2":{"note":"","data":["810E3B34 03ED"],"options":null},"Meter Select\\Player 1":{"note":"","data":["800E399D 00??"],"options":{"Empty Meter Bar":"00","Full Meter Bar":"60"}},"Meter Select\\Player 2":{"note":"","data":["800AD80D 00??"],"options":{"Empty Meter Bar":"00","Full Meter Bar":"60"}}},"36281F23-009756CF-C:45":{"Infinite\\Balls":{"note":"","data":["8021AC47 0000"],"options":null},"Infinite\\Creation Points":{"note":"","data":["81059408 420C"],"options":null},"Infinite\\Strikes":{"note":"","data":["8021AC48 0000"],"options":null},"Inning Selection":{"note":"","data":["8021AC42 00??"],"options":{"2nd Inning":"02","3rd Inning":"03","4th Inning":"04","5th Inning":"05","6th Inning":"06","7th Inning":"07","8th Inning":"08","9th Inning":"09"}},"Max\\Arm Strength":{"note":"","data":["8105C5F8 4120"],"options":null},"Max\\Batting":{"note":"","data":["8105D6D8 4120"],"options":null},"Max\\Clutch":{"note":"","data":["8105BB98 4120"],"options":null},"Max\\Control":{"note":"","data":["8105B760 4120"],"options":null},"Max\\Defense":{"note":"","data":["8105CA60 4120"],"options":null},"Max\\Durability":{"note":"","data":["8105C098 4120"],"options":null},"Max\\Pitch Speed":{"note":"","data":["8105AE90 4120"],"options":null},"Max\\Power":{"note":"","data":["8105D270 4120"],"options":null},"Max\\Speed":{"note":"","data":["8105CE68 4120"],"options":null},"Max\\Stamina":{"note":"","data":["8105B2F8 4120"],"options":null}},"36F1C74B-F2029939-C:50":{"Always Win Judge's Decision\\Player 1":{"note":"","data":["8020B777 FFFF","802098AF 0000"],"options":null},"Always Win Judge's Decision\\Player 2":{"note":"","data":["802098AF FFFF","8020B777 0000"],"options":null},"Enable Boro":{"note":"","data":["80307349 0001"],"options":null},"Have 1 Star\\Abdul":{"note":"","data":["80307353 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["8030734F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80307352 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80307351 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80307354 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80307350 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["8030734E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80307355 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80307356 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["802098A1 0000","802047C3 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802047C7 0000","8020B769 0000"],"options":null},"Level Select":{"note":"","data":["8022A84C 00??"],"options":{"Blue Hell Mountain":"0C","Coliseum":"04","Desert":"01","Fire Mountain":"00","Highlands":"02","Hong Kong":"03","Joker's Room":"0B","Jungle":"05","Ninja Room":"06","Observation":"09","Palace":"0D","Pasture":"0A","Suspension Bridge":"07"}},"Play As\\Player 1":{"note":"","data":["802EF622 00??"],"options":{"Abdul":"05","Bob":"01","Boro":"08","Joker":"0B","Leon":"04","Meiling":"03","Ninja":"06","No Clue":"0D","Pierre":"02","Ryuji":"00","The Master":"0C","Tomahawk":"07","Ushi":"0A","Valerie":"09"}},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EF67B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0209757 0000","80209757 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020B61F 0000","8020B61F 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810ADBDC 3F80"],"options":null}},"36FA35EB-E85E2E36-C:45":{"Always On Fire Team 2\\Player 2":{"note":"","data":["800EC0CF 00??"],"options":{"Always On":"01","Never On":"00"}},"Fire Team 1\\Player 1":{"note":"","data":["800EC0CB 00??"],"options":{"Always On":"01","Never On":"00"}},"Infinite Turbo\\Player 1":{"note":"","data":["810EC12C 42C8","810EC12E 0000"],"options":null},"Infinite Turbo\\Player 2":{"note":"","data":["81DEC164 42C8","81DEC166 0000"],"options":null}},"373F5889-9A6CA80A-C:50":{"Access All\\Chapters, Scenes,\u0026 Multi-Player Characters":{"note":"","data":["50002401 0000","800EA120 00FF"],"options":null},"Access All\\Characters \u0026 Weapons In Multi Race":{"note":"","data":["810EA122 ??FF"],"options":{"All Characters \u0026 Baseball bat":"FF","All Characters \u0026 Bones":"F3","All Characters \u0026 Frying Pan":"FB"}},"Infinite\\Accuracy Count Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game,Once you pick up a Gun a shoot once, you will 100%.","data":["800E0F87 0001"],"options":null},"Infinite\\Bags In Heist":{"note":"","data":["800E1004 00FF"],"options":null},"Infinite\\Bombs":{"note":"","data":["802059EA 0030"],"options":null},"Infinite\\Head Shot Count Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game","data":["800E0F8B 0064"],"options":null},"Infinite\\Health\\Player 1":{"note":"","data":["800CC8BA 0006"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["800CCBE6 270F"],"options":null},"Infinite\\Health\\Player 3":{"note":"","data":["800CCF12 270F"],"options":null},"Infinite\\Health\\Player 4":{"note":"","data":["800CD23E 270F"],"options":null},"Infinite\\Lives Player 1":{"note":"","data":["800D2564 0063"],"options":null},"Infinite\\Max Kills Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game","data":["800E0F67 03E7"],"options":null},"Infinite\\Oxygen":{"note":"","data":["800CC7A2 0001"],"options":null},"Infinite\\Pots of cash":{"note":"","data":["810D256A FFFF"],"options":null},"Infinite\\Time In Multi":{"note":"","data":["8109019A 7500"],"options":null},"Play as":{"note":"Here you can choose who you want to play as, but only one option at a time. Shadow will not be visible, except when playing as Conker.","data":["800D255F 00??"],"options":{"Army Captain":"25","Bald Caveman":"0C","Caveman":"0D","Combat Squirrel":"04","Conker":"05","Conker the Bat":"24","Dinosaur (Cannot move)":"09","Enemy Bat":"23","Female Villager":"1D","Female Villager (with hood and glasses)":"1F","Female Zombie":"22","Gregg":"27","Male Villager":"11","Male Villager (with cap and glasses and moustache)":"1C","Male Villager (with cap and glasses)":"1A","Male Villager (with cap and moustache)":"1B","Male Villager (with cap)":"19","Male Villager (with glasses and moustache)":"14","Male Villager (with glasses)":"12","Male Villager (with hat and glasses and moustache)":"18","Male Villager (with hat and glasses)":"16","Male Villager (with hat and moustache)":"17","Male Villager (with hat)":"15","Male Villager (with moustache)":"13","Male Zombie":"21","Mohican Caveman":"0E","Neo Conker":"10","Skeleton Gregg":"28","Spikey Caveman":"0F","Tank Vehicle (Cannot move)":"08","Tedi":"03","Tedi Boss":"26","Uga":"0B","Wessle":"01","Wessle (Black outfit)":"02"}},"Press L To Levitate\\Player 1":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042DA5 0020","810CC710 41CB"],"options":null},"Press L To Levitate\\Player 2":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042DAE 0020","810CCA3C 41CB"],"options":null},"Press L To Levitate\\Player 3":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042DB5 0020","810CCD68 41CB"],"options":null},"Press L To Levitate\\Player 4":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042DBE 0020","810CD094 41CB"],"options":null},"Wait Animation Trigger":{"note":"","data":["800CC9E8 00??"],"options":{"Default at most":"00","Wait animations disabled":"02"}},"Weapon Select In Multi (On Pick Up)":{"note":"Select what Weapon you would like in Multi Player and then on a Weapon Pickup you will have the weapon of your choice.to change for another just Enable the one of your choice to have that instead.(you must have a weapon already to change for the next.","data":["80180C4B 00??"],"options":{"Buck Shot":"08","Gas Mask":"13","High Powred Riffle With Scope":"0A","Long Pistol with Sight":"06","Nothing":"02","Riffle":"05","Rocket Launcher":"07","Sword":"01","Throwing Knives":"04","Two Automatic Machine Guns":"0C","Yellow Chain-Ssaw":"03"}}},"37FA8F16-5F824D37-C:44":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["811784E0 FFFF","811784E2 FFFF","811784E6 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FCBC 270F"],"options":null}},"39119872-07722E9F-C:45":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2212 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE51F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80382CB7 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","802020F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801DDC55 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801FC5C5 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801EF96D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","80202225 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801D9ABD 0001"],"options":null}},"3918834A-15B50C29-C:45":{"Freeze Timer":{"note":"","data":["800CE4EE 0077"],"options":null},"Have All Charcters \u0026 Levels Unlocked":{"note":"","data":["50000740 0000","800CB951 0001","50000304 0000","800CB945 0001","50000304 0000","800CB985 0001","50000304 0000","800CB9C5 0001","50000304 0000","800CBA05 0001","50000304 0000","800CBA45 0001","50000304 0000","800CBA85 0001"],"options":null},"Max\\Combos Landed":{"note":"","data":["810CE4AA 03E7","810CE4AE 03E7"],"options":null},"Max\\Tricks Landed":{"note":"","data":["810CE4A6 03E7","810CE4A2 03E7"],"options":null},"Max\\Wheels Collected":{"note":"","data":["800CE513 00??"],"options":{"0 Wheels":"00","30 Wheels":"1E","40 Wheels":"28"}},"Zero Crash Counts":{"note":"","data":["800CE49F 0000"],"options":null}},"392A0C42-B790E77D-C:45":{"All Missions Unlocked":{"note":"","data":["810C1F10 000B"],"options":null},"Infinite Ammo":{"note":"","data":["8103A180 2400"],"options":null},"Infinite Health":{"note":"","data":["8105518A 2400"],"options":null}},"399B9B81-D533AD11-C:4A":{"Access\\All Secret Characters":{"note":"","data":["50000C04 0000","80183D6F 0001"],"options":null},"Access\\All Superbikes":{"note":"","data":["50000304 0000","80183D6F 0001"],"options":null},"Access\\All Tracks":{"note":"","data":["50000BD8 0000","80183327 0001"],"options":null},"Always 1st":{"note":"","data":["80171063 0001"],"options":null},"Infinite\\Nitros":{"note":"","data":["81170F02 0003","81170F06 0003"],"options":null},"Infinite\\Shield":{"note":"","data":["81170F2C 42C8"],"options":null},"Max Points":{"note":"","data":["80183DD3 0064"],"options":null},"[Screen Hud Clear]":{"note":"This Fixes the Problem on all Plugins that have Hud covering the Screen.Let the game load 1st before Putting this code on,Or it will give an error and Freeze","data":["80092D1B 0004"],"options":null}},"3A089BBC-54AB2C06-C:0":{"Infinite Health":{"note":"","data":["800794CB 0009"],"options":null}},"3A089BBC-54AB2C06-C:00":{"Infinite Health":{"note":"","data":["800794CB 0009"],"options":null}},"3A4760B5-2D74D410-C:45":{"Character Select":{"note":"","data":["80075F52 00??"],"options":{"Big Head.":"04","Flame Grilled":"08","Normal":"00","Play as Deadwing.":"01"}},"Have All\\Cheats: Book of Shadows":{"note":"","data":["81075F4E 0FFF"],"options":null},"Have All\\Dark Souls Collected":{"note":"","data":["80075F49 0078"],"options":null},"Have All\\Gads \u0026 The Poign":{"note":"","data":["80030E57 000F"],"options":null},"Have All\\Items":{"note":"Youll not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50001B20 0000","80030613 000B"],"options":null},"Have All\\L-Eclipser":{"note":"You will not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50000320 0000","80030973 000B"],"options":null},"Have All\\Levels Unlocked":{"note":"","data":["5000101C 0000","80030A0E 0001"],"options":null},"Infinite\\0.9mm Ammo":{"note":"","data":["81075B3A 0190"],"options":null},"Infinite\\Accumulators":{"note":"","data":["800306D7 0005"],"options":null},"Infinite\\Cadeaux'":{"note":"","data":["81075B36 03E7"],"options":null},"Infinite\\Max Health/Air/Shadow Charge \u0026 Voodoo Power":{"note":"","data":["50000604 0000","81075B16 2710"],"options":null},"Infinite\\Prisms":{"note":"","data":["80030957 0003"],"options":null},"Infinite\\Retractors":{"note":"","data":["800308B7 0003"],"options":null},"Infinite\\Shotgun Shells":{"note":"","data":["80075B2F 0063"],"options":null},"Infinite\\Violator Ammo":{"note":"","data":["81075B32 03E7"],"options":null},"Press L To Levitate":{"note":"Press the L-Button to rise and let go and press again in stages to come back down.","data":["D0059097 0020","80075578 0041"],"options":null},"[Ammo Always Displayed On Screen]":{"note":"","data":["50000408 0000","80075ACD 0007"],"options":null},"[Health Meter Displayed On Screen]":{"note":"","data":["81075B10 0000","81075B12 00FF"],"options":null}},"3A6C42B5-1ACADA1B-C:4A":{"Have All\\Characters Available":{"note":"","data":["8105DEB8 FFFF"],"options":null},"Have All\\Courts Available":{"note":"","data":["8105DEBC FFFF"],"options":null},"Score\\Player 1":{"note":"","data":["8014B1DA 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}},"Score\\Player 2":{"note":"","data":["8014B1DB 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}}},"3B941695-F90A5EEB-C:50":{"Access\\All Gadgets and Items":{"note":"","data":["801147DD 0001"],"options":null},"Access\\All Guns and Weapons":{"note":"This also comes with Ammo","data":["801147DC 0001"],"options":null},"Access\\All Levels \u0026 Difficulties":{"note":"","data":["81103B66 0021","50000D01 0000","80118F38 0001"],"options":null},"Infinite\\Oxygen":{"note":"","data":["800E25E4 0004"],"options":null},"Infinite\\Time":{"note":"","data":["81103B82 0000"],"options":null},"Invincible":{"note":"","data":["811147D8 0101"],"options":null},"Multi Player\\Access All Arenas":{"note":"","data":["801147EB 0001","811147EC 0101","801147EE 0001"],"options":null},"Multi Player\\Access All Evil Skins":{"note":"","data":["50005C0C 0000","800C0167 0081"],"options":null},"Multi Player\\Access All Scenarios":{"note":"","data":["801147EF 0001","811147F0 0101"],"options":null},"Multi Player\\Access All Weapon Modes":{"note":"","data":["811147F2 0101","801147F4 0001"],"options":null},"Multi Player\\Access Evil Q":{"note":"","data":["800C06EF 0081"],"options":null},"Multi Player\\Access Good Q":{"note":"","data":["800C06EF 0001"],"options":null},"Multi Player\\Invincible":{"note":"","data":["811147D8 0101"],"options":null}},"3BA7CDDC-464E52A0-C:4A":{"Widescreen":{"note":"","data":["8102D204 2407","8102D206 018A"],"options":null}},"3C059038-C8BF2182-C:45":{"Enable All\\Cars":{"note":"","data":["80140D1F 003F"],"options":null},"Enable All\\Expert Times":{"note":"","data":["80140D1C 0031"],"options":null},"Enable All\\Tracks":{"note":"","data":["80140D1A 0070"],"options":null},"Unlock Champ":{"note":"","data":["80140D28 0001"],"options":null},"Unlock Cheat Menu":{"note":"","data":["D11B1F14 0000","811B1F14 00FF","811D530A 04FF","D11B1F14 00FF","811B0270 FF03"],"options":null}},"3C1FDABE-02A4E0BA-C:45":{"Single \u0026 VS Mode\\Infinite Misses\\Player 1":{"note":"","data":["80112F9F 0003"],"options":null},"Single \u0026 VS Mode\\Infinite Misses\\Player 2":{"note":"","data":["80116207 0003"],"options":null},"Single \u0026 VS Modes\\Secret Cheat Menu":{"note":"","data":["8011265F 00AD"],"options":null},"Single Player Stage Select":{"note":"","data":["810E12DC 0001"],"options":null}},"3CC77150-21CDB987-C:50":{"Don't Take Any Damage":{"note":"","data":["8104A260 2400"],"options":null},"Enable Cheat Select":{"note":"","data":["80115933 00??"],"options":{"All Weapons With Fast Run":"42","All Weapons With Infinite Ammo":"06","Fast run":"40","Have All Weapons":"02","Infinite Ammo":"04","Infinite Ammo With Fast Run":"44","Invincible":"01","Invincible With All Weapons And Fast Run":"43","Invincible With All Weapons and Ammo and Fast Run":"47","Invincible With Fast Run":"41","Invincible With Infinite Ammo and All Weapons":"07"}},"Enable In-Game Cheat Menu \u0026 Level Select":{"note":"","data":["81115936 014F"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810496D0 2400"],"options":null},"Sound Select\\Music Volume":{"note":"","data":["80115944 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"Sound Select\\SFX Volume":{"note":"","data":["80115945 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"[Press L For Levitate]":{"note":"","data":["D10F7550 0020","816FE35C 43D5"],"options":null}},"3CECBCB8-6126BF07-C:50":{"Big Score":{"note":"","data":["81164E58 8181","81164E5A 8181"],"options":null},"Instant 450kmh Boost":{"note":"Press Trigger Button","data":["D10A1F50 2000","8119D334 005A"],"options":null},"No Checkpoint time":{"note":"","data":["81164E1C 0001"],"options":null}},"3DF17480-193DED5A-C:50":{"Have All\\Levels and Bonus Stages Unlocked":{"note":"Press start in Gyro's Lab and then resume game to see all open","data":["801D6F4C 00FF","801D6F4D 00FF","801D6F4E 00FF","801D6F4F 00FF","801D6F53 00FF"],"options":null},"Have All\\Time Attack \u0026 Toy Hunting Comnpleated (All Levels)":{"note":"Press start in Gyro's Lab and then resume game to see all open","data":["801D6F58 00FF","801D6F59 00FF","801D6F5A 00FF","801D6F5B 00FF","801D6F5C 00FF","801D6F5D 00FF","801D6F5E 00FF","801D6F5F 00FF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["801D6F2E 0063"],"options":null},"Infinite\\99 Stars":{"note":"","data":["801D6F2F 0063"],"options":null},"Infinite\\Time\\Gladstones Time Attack":{"note":"","data":["801D6F27 00FF"],"options":null},"Infinite\\Time\\Nephews Toy Hunting":{"note":"","data":["801D6F23 0063"],"options":null},"Instant\\Carrier Box [Moon Walk] (Press L)":{"note":"Press and hold the L Button and you will run floating of any ledge slowing drifting down. If you keep pressing the A Button while Holding L it will act as a Moon Jump.","data":["D00CAFD1 0020","801C901F 0001"],"options":null},"Instant\\Hyperactive State [Invincible] (Press C-Right)":{"note":"","data":["D00CAFD1 0001","801CE296 0001"],"options":null},"Instant\\Rage Attack (Press C-Left)":{"note":"","data":["D00CAFD1 0002","801CE23D 0001"],"options":null}},"3E198D9E-F2E1267E-C:45":{"99 Total Houses":{"note":"","data":["8106A56A 0063"],"options":null},"Big Newspapers":{"note":"","data":["81268B5A 0001"],"options":null},"Enable Level Select":{"note":"Also accesses All Bonus Levels","data":["8006A5F7 0001"],"options":null},"Infinite Health":{"note":"","data":["8006A5D2 0064"],"options":null},"Infinite Newspapers":{"note":"","data":["81268B12 0001"],"options":null},"Invincibility":{"note":"","data":["812688FE 0001"],"options":null},"Rocket Boosters":{"note":"","data":["81268B3E 0001"],"options":null},"Super Jump Springs":{"note":"","data":["81268B3A 0001"],"options":null},"Turbo Mode":{"note":"","data":["81268B36 0001"],"options":null}},"3E5055B6-2E92DA52-C:45":{"16:9 Widescreen":{"note":"For 16:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81150146 8E39","81150148 3FE3","D10DC532 0001","81150148 4063","D10DC532 0002","81150148 3F63","810946BA 3FE3","810947EE 3FE3"],"options":null},"21:9 Widescreen":{"note":"For 21:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81150146 E38E","81150148 4018","D10DC532 0001","81150148 4098","D10DC532 0002","81150148 3F98","810946BA 4018","810947EE 4018"],"options":null},"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118D8C0 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118D8C2 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118D8C4 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118D8C6 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["50000401 0000","8018ED10 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["80165F5D 00??","80165F8A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["8016603D 00??","8016606A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["8016611D 00??","8016614A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["801661FD 00??","8016622A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["801662DD 00??","8016630A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["801663BD 00??","801663EA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818EDEF 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F6915 0020","810F69C8 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F6925 0020","810F77A0 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F6935 0020","810F8578 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F6945 0020","810F9350 4000"],"options":null},"Sixty Frames (1P Mode)":{"note":"","data":["80000FE3 0000","800014CF 0001"],"options":null},"WIP 60 FPS hack":{"note":"","data":["81001890 2419","81001892 0001","81001894 2419","81001896 0001","80000FE3 0000","800014CF 0001","81001C90 240A","81001C92 0001","81001C94 240A","81001C96 0001","81001A38 2409","81001A3A 0001","81001A3C 2409","81001A3E 0001","80122CBB 001C"],"options":null}},"3EDC7E12-E26C1CC9-C:45":{"Extra Flies":{"note":"","data":["D00A54DF 0000","800A54DF 0032"],"options":null},"Infinite Health":{"note":"","data":["800A54D9 0004"],"options":null},"Sixty Frames":{"note":"Changes an ASM value,too fast.","data":["80031D27 0001"],"options":null},"Start With 50 Remotes":{"note":"","data":["D00A54EB 0000","800A54EB 0032"],"options":null}},"40DFEDA0-3AA09CB2-C:50":{"Infinite Max\\Armour":{"note":"","data":["80145E79 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Max\\Health":{"note":"","data":["81145E6C 4316"],"options":null},"Infinite Max\\Lives (Credits)":{"note":"","data":["8012920B 0009"],"options":null},"Infinite Max\\Sword Use (Press Z)":{"note":"Press The Z Button on your controller to use the infinite Sword Flame effect","data":["80145E81 00??"],"options":{"Off":"00","On":"D0"}},"Level Select":{"note":"","data":["801249B3 00??"],"options":{"01 (Incarceration)":"00","02 (The Dead Shall Rise)":"01","03 (Crush Your Enemies)":"02","04 (Infestation)":"03","05 (The Law of Disorder)":"04","06 (The Abyss)":"05","07 (Darrc Pilgrimage)":"06","08 (Ultimate Sacrifice)":"07","09 (The Dragon Sword)":"08"}},"Setting Options\\Sound\\Format":{"note":"","data":["800FD428 00??"],"options":{"Mono":"00","Stereo":"FF"}},"Setting Options\\Sound\\Game FX":{"note":"","data":["800FD41F 00??"],"options":{"Low":"19","Max":"64","Middle":"32","Off":"00"}},"Setting Options\\Sound\\Music Volume":{"note":"","data":["800FD423 00??"],"options":{"Low":"19","Max":"64","Middle":"32","Off":"00"}},"Setting Options\\Vibration Option":{"note":"","data":["80129202 00??"],"options":{"Off":"00","On":"FF"}},"[Character Select]":{"note":"","data":["800F84F3 00??"],"options":{"Aisha":"02","Cutter":"00","Gouranga":"03","Kailan":"01"}},"[Have 999999 Score]":{"note":"","data":["811458C4 000F","811458C6 423F"],"options":null},"[Press Z for Levitate]":{"note":"","data":["D00DDF88 0020","8014665D 00EF"],"options":null}},"41380792-A167E045-C:45":{"Have All\\Divisions Complete":{"note":"","data":["8008323F 00FF"],"options":null},"Have All\\Sleds Unlocked":{"note":"","data":["8108324E FFFF"],"options":null},"Have All\\Tracks Unlocked":{"note":"","data":["81083252 03FF"],"options":null},"Have\\Max Race Points":{"note":"","data":["8108321E FFFF"],"options":null},"Have\\Max Wrenches (All Sleds)":{"note":"This will give you 100 Wrench Points for all Sledges to boost your stats","data":["50000C01 0000","80083168 0064","50000201 0000","80083177 0064","50000206 0000","8008317C 0064","50000206 0000","80083186 0064","50000301 0000","80083190 0064"],"options":null},"[Continue Tournament]":{"note":"This will allow you to Continue Tournament with All Tracks \u0026 Divisions Unlocked","data":["80083247 00FF"],"options":null}},"4147B091-63251060-C:45":{"All Levels\\Dash Becomes Shorter \u0026 Wider":{"note":"","data":["800BA025 FFFF"],"options":null},"All Levels\\Infinite\\Lives":{"note":"","data":["800E05CB 0064"],"options":null},"All Levels\\Infinite\\Missiles":{"note":"","data":["800E1265 00FF"],"options":null},"All Levels\\Large Mutant Enemies":{"note":"","data":["800BB62B FFFF"],"options":null},"All Levels\\No Clipping\\Off":{"note":"","data":["81111E67 0001"],"options":null},"All Levels\\No Clipping\\On":{"note":"","data":["81111E67 0000"],"options":null},"All Levels\\See Through\\Everything Except Specific Things":{"note":"","data":["800BC665 FFFF"],"options":null},"All Levels\\See Through\\Some Walls":{"note":"","data":["800BC625 FFFF"],"options":null},"All Levels\\Time Always 0:00:02":{"note":"","data":["810E04E8 4000"],"options":null},"All Levels\\Visibililty\\Maximum":{"note":"","data":["800BA62B FFFF"],"options":null},"All Levels\\Visibililty\\Minimum":{"note":"","data":["800BA66B FFFF"],"options":null},"All Stages\\Infinite Health":{"note":"","data":["81072D0C 2400"],"options":null},"All Stages\\Infinite\\Disruptor Ammo":{"note":"","data":["81073F04 2400"],"options":null},"All Stages\\Infinite\\Flame Ammo":{"note":"","data":["81073720 2400"],"options":null},"All Stages\\Infinite\\Jet Pack":{"note":"","data":["81076AAC 2400","81076C58 2400","81076B48 2400"],"options":null},"All Stages\\Infinite\\Pulse Ammo":{"note":"","data":["81074204 2400"],"options":null},"All Stages\\Infinite\\Seeker Ammo":{"note":"","data":["81073A94 2400"],"options":null},"All Stages\\Infinite\\Stunner Ammo":{"note":"","data":["81073BD4 2400"],"options":null},"All Stages\\Invincible":{"note":"","data":["8107A770 2400"],"options":null},"All Stages\\Lasers Never Overheat":{"note":"","data":["81073948 2400"],"options":null},"All Stages\\Upper Lasers":{"note":"Don't Use With Never Overheat Code","data":["81073944 3C06","81073946 4EFF"],"options":null},"Press GS For Pink Cheat Debug Screen":{"note":"","data":["890D01BF 0001"],"options":null}},"417DD4F4-1B482FE2-C:45":{"1 Round To Win Player 1":{"note":"","data":["D01050F3 0000","801050F3 0001"],"options":null},"99 Wins Player 1":{"note":"","data":["800FE27F 0063"],"options":null},"Big Head Mode":{"note":"","data":["80048CB5 0001"],"options":null},"Infinite\\Credits":{"note":"","data":["800493BF 00FF"],"options":null},"Infinite\\Health Player 1":{"note":"","data":["810FE0D8 0001","810FE0DA 0000"],"options":null},"Infinite\\Health Player 2":{"note":"","data":["81126F54 0001","81126F56 0000"],"options":null},"Infinite\\Time":{"note":"","data":["8010511B 0063"],"options":null},"Play\\As Goro Player 1":{"note":"","data":["800FE293 000F"],"options":null},"Play\\As Noob Saibot Player 1":{"note":"","data":["800FE293 0011"],"options":null}},"418BDA98-248A0F58-C:50":{"All 52 Gold Gems Collected":{"note":"","data":["80163640 0003","80163641 007E","80163642 00FF","80163643 00EF","80163644 00FF","80163645 007F","80163646 00FF","80163647 00FC"],"options":null},"All Stages \u0026 Chapters Unlocked":{"note":"","data":["80163648 003B"],"options":null},"Infinite\\Health\\Marina":{"note":"","data":["810E1120 03E8"],"options":null},"Infinite\\Health\\Teran":{"note":"","data":["810E5DA0 03E8"],"options":null},"Infinite\\Max Red Gems":{"note":"","data":["81169C66 270F"],"options":null},"Level Select":{"note":"To access this anytime during game, press L+R+Z to enable the menu. Press D-Pad Up / Down to move through the menu, D-Pad Left / Right to change level digits and then press Start to enter level. Don not do this whhile in pause mode (Start Button Pause) or the game will freeze.","data":["D10B0878 2030","800B0871 0004"],"options":null}},"41B25DC4-1B726786-C:45":{"Access All Bonus Cars":{"note":"","data":["50000302 0000","800985C3 0001","50000302 0000","800985CB 0001"],"options":null},"Always 1st Place":{"note":"","data":["810A5F70 0001"],"options":null},"Infinite Time":{"note":"","data":["810CE76E 03E7"],"options":null},"Max Points":{"note":"","data":["800CE743 FFFF"],"options":null},"Speedometer Select":{"note":"","data":["800CE803 00??"],"options":{"KM/H":"00","MPH":"01"}},"Start On Lap Modifier":{"note":"","data":["D00A5F75 0000","810A5F74 00??"],"options":{"Lap 1":"01","Lap 2":"02","Lap 3":"03","Lap 4":"04","Lap 5":"06","Lap 6":"06","Last Lap from Start":"07","Normal":"00"}},"Track Direction Unlocked (All Levels)":{"note":"","data":["800A4171 0003"],"options":null}},"41F2B98F-B458B466-C:45":{"All levels Complete":{"note":"","data":["50004002 0000","810A2218 0001"],"options":null},"Carrington Institute\\Have 255 targets destroyed":{"note":"","data":["810B1E34 00FF"],"options":null},"Carrington Institute\\Have 999 points in Firing Range":{"note":"","data":["810B1E32 03E7"],"options":null},"Carrington Institute\\Have Infinite time in Firing Range":{"note":"","data":["810B1E2E 004D"],"options":null},"Have All\\Weapons\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80207F10 0007","801EEF10 0007","801D5F10 0007"],"options":null},"Have All\\Weapons\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80209B80 0007","801F0B80 0007","801D7B80 0007"],"options":null},"Infinite Ammo\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8020769F 00FF","801EE69F 00FF","801D569F 00FF","80206EFB 00FF","801EDEFB 00FF","801D4EFB 00FF"],"options":null},"Infinite Ammo\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8020930F 00FF","801F030F 00FF","801D730F 00FF","80208B6B 00FF","801EFB6B 00FF","801D6B6B 00FF"],"options":null},"Infinite Health\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8120677C 3F80","811ED77C 3F80","811D477C 3F80"],"options":null},"Infinite Health\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["812083EC 3F80","811EF3EC 3F80","811D63EC 3F80"],"options":null},"Infinite Shield\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81206790 3F80","811E4950 3F80","811CB950 3F80"],"options":null},"Infinite Shield\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["811FF5C0 3F80","811E65C0 3F80","811CD5C0 3F80"],"options":null},"Multi\\Press B To Levitate\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7E4 0040","811BB720 40F2","D009C7E4 0040","801BB6D3 0000"],"options":null},"Multi\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7EC 0040","811BD390 40F2","D009C7EC 0040","801BD343 0000"],"options":null},"Multi\\Press B To Levitate\\Player 3":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7F4 0040","811BF000 40F2","D009C7F4 0040","801BEFB3 0000"],"options":null},"Multi\\Press B To Levitate\\Player 4":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7FC 0040","811C0C70 40F2","D009C7FC 0040","801C0C23 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7E4 0040","81206720 40F2","D009C7E4 0040","802066D3 0000","D009C7E4 0040","811ED720 40F2","D009C7E4 0040","801ED6D3 0000","D009C7E4 0040","811D4720 40F2","D009C7E4 0040","801D46D3 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7EC 0040","81208390 40F2","D009C7EC 0040","80208343 0000","D009C7EC 0040","811EF390 40F2","D009C7EC 0040","801EF343 0000","D009C7EC 0040","811D6390 40F2","D009C7EC 0040","801D6343 0000"],"options":null},"The Ultimate All In One":{"note":"The Ultimate All In One activate's solo missions, give all medals on solo missions, activate cheats, activate cinemas, and who knows what else. I just don't have the time to identify these codes. I know that some of this is creditted to Zap2. I don't have the time to cut those codes out.","data":["800884F3 0001","8008850E 0001","80088575 0001","50000302 0000","80088572 0001","8008858C 0001","8008858D 0001","800885A6 0001","800885A9 0001","800885C0 0001","800885DA 0001","800885DC 0001","800885F4 0001","800885F5 0001","8008860E 0001","80088610 0001","80088612 0001","80088628 0001","50000501 0000","80088642 0001","50000501 0000","8008865C 0001","50000501 0000","80088676 0001","50000501 0000","80088690 0001","50000501 0000","800886AA 0001","50000501 0000","800886C4 0001","50000501 0000","800886DE 0001","50000501 0000","800886F8 0001","50000501 0000","80088712 0001","50000501 0000","8008872C 0001","50000501 0000","80088746 0001","50000501 0000","80088760 0001","50000501 0000","8008877A 0001","50000501 0000","80088794 0001","50000501 0000","800887AE 0001","800A2219 0001","50003E02 0000","800A221D 0001","50000B01 0000","800ACCC9 0001","50000901 0000","800ACCD5 0001","50000401 0000","800ACCDF 0001","50000301 0000","800ACCE4 0001","800ACCE8 0001","800ACCE9 0001","800ACCEB 0001","800ACCEC 0001","50000901 0000","800ACCEE 0001","800ACCF8 0001","50002101 0000","800ACCFA 0001","800ACD12 0001","800ACD15 0001","800ACD16 0001","800ACDEA 0001","800ACD3A 0001"],"options":null}},"4222D89F-AFE0B637-C:45":{"Always Gets Bubbles\\Player 1":{"note":"","data":["800ECE59 0007"],"options":null},"Always Gets Bubbles\\Player 2":{"note":"","data":["800ECF49 0007"],"options":null},"Always Gets Bubbles\\Player 3":{"note":"","data":["801588B1 0007"],"options":null},"Always Gets Bubbles\\Player 4":{"note":"","data":["801589A1 0007"],"options":null},"Ceiling Never Drops\\Player 1":{"note":"","data":["810ECDEE 0000"],"options":null},"Ceiling Never Drops\\Player 2":{"note":"","data":["810ECEDE 0000"],"options":null},"Ceiling Never Drops\\Player 3":{"note":"","data":["81158846 0000"],"options":null},"Ceiling Never Drops\\Player 4":{"note":"","data":["81158974 0000"],"options":null},"Infinite Time To Set Pieces\\Player 1":{"note":"","data":["810ECE2C 0000"],"options":null},"Infinite Time To Set Pieces\\Player 2":{"note":"","data":["810ECF1C 0000"],"options":null},"Infinite Time To Set Pieces\\Player 3":{"note":"","data":["81158884 0000"],"options":null},"Infinite Time To Set Pieces\\Player 4":{"note":"","data":["81158936 0000"],"options":null},"Never Gets Bubbles\\Player 1":{"note":"","data":["800ECE59 0000"],"options":null},"Never Gets Bubbles\\Player 2":{"note":"","data":["800ECF49 0000"],"options":null},"Never Gets Bubbles\\Player 3":{"note":"","data":["801588B1 0000"],"options":null},"Never Gets Bubbles\\Player 4":{"note":"","data":["801589A1 0000"],"options":null}},"423E96F4-CE88F05B-C:45":{"Always Have\\BFG 9000":{"note":"","data":["8006338B 0001"],"options":null},"Always Have\\Bio Suite":{"note":"","data":["80063333 00??"],"options":{"Off":"00","On":"FF"}},"Always Have\\Chain Gun":{"note":"","data":["8006337F 0001"],"options":null},"Always Have\\Chainsaw":{"note":"","data":["8006336B 0001"],"options":null},"Always Have\\Double Shotgun":{"note":"","data":["8006337B 0001"],"options":null},"Always Have\\Gun":{"note":"","data":["80063373 0001"],"options":null},"Always Have\\Have Rocket Launcher":{"note":"","data":["80063381 0001"],"options":null},"Always Have\\Laser Weapon":{"note":"","data":["8006338F FFFF"],"options":null},"Always Have\\Missile Launcher":{"note":"","data":["80063383 0001"],"options":null},"Always Have\\Plasma Rifle":{"note":"","data":["80063387 0001"],"options":null},"Always Have\\Shotgun":{"note":"","data":["80063377 0001"],"options":null},"Berserk Mode":{"note":"","data":["8006332B 00FF"],"options":null},"Enable Cheat Menu":{"note":"","data":["8005A883 0001"],"options":null},"Have All Keys":{"note":"","data":["8006333F 0001","80063343 0001","80063344 0001","80063353 0001","8006334F 0001","80063348 0001"],"options":null},"Infinite\\Ammo All Weapons":{"note":"","data":["80063393 00FF","80063397 00FF","8006339B 00FF","8006339F 00FF"],"options":null},"Infinite\\Armor":{"note":"","data":["8006331F 00FF"],"options":null},"Invincible":{"note":"","data":["800633BB 0002"],"options":null},"Invincible And Map Markers":{"note":"","data":["800633BB 0006"],"options":null},"Rapid Fire":{"note":"","data":["810633EA 0B94"],"options":null},"Turn Map Markers On":{"note":"","data":["800633BB 0004"],"options":null},"[Max Brightness]":{"note":"Enable this cheat on rom load to have Max Brightness (internal) and then put Jabo d3d8 on 160% Max for a extra brightness Boost.","data":["8005A878 0064"],"options":null}},"4248BA87-99BE605D-C:00":{"Always Have 0 kcal (Player 1)":{"note":"","data":["812FFBF2 0000"],"options":null},"Infinite 9 Credits":{"note":"","data":["802D9DDF 0009"],"options":null},"Player 2 has High kcal":{"note":"","data":["812FFC4E FFFF","812FFC4F FFFF"],"options":null}},"4252A5AD-AE6FBF4E-C:45":{"Infinite Coins P1":{"note":"","data":["8119ADEE 03E7"],"options":null},"Infinite Gold P1":{"note":"","data":["81088286 03E7"],"options":null},"Infinite Gold P2":{"note":"","data":["8119ADEE 03E7"],"options":null},"Infinite Health P1":{"note":"","data":["80088284 0003"],"options":null},"Infinite Health P2":{"note":"","data":["81088290 03E7"],"options":null},"Infinite Lives P1":{"note":"","data":["80088283 0003"],"options":null},"Infinite Lives P2":{"note":"","data":["8008828D 0003"],"options":null},"Open All Levels":{"note":"","data":["50002D02 0000","810882AA 0303"],"options":null}},"42CF5EA3-9A1334DF-C:50":{"All levels complete":{"note":"","data":["800D1364 000C","50000501 0000","800D1365 000A"],"options":null},"Infinite Vespene gas,minerals \u0026 Most missions":{"note":"","data":["50003202 0000","800B1D96 00FF"],"options":null}},"4446FDD6-E3788208-C:45":{"Extra Gems":{"note":"","data":["D0165241 0000","80165241 004B"],"options":null},"Full\\Bomb Power":{"note":"","data":["8016523F 0003"],"options":null},"Full\\Fire Power":{"note":"","data":["80165240 0003"],"options":null},"Infinite\\Health":{"note":"","data":["80165244 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["80165243 0009"],"options":null},"Lagfix":{"note":"For consistent 60fps.","data":["8004A822 000D"],"options":null},"Max\\Bombs":{"note":"","data":["8016523F 0008"],"options":null},"Max\\Explosion":{"note":"","data":["80165240 0008"],"options":null},"Max\\Score":{"note":"","data":["80177608 FFFF"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D005A455 0020","81154178 41CB","D005A455 0020","D0154154 0000","80154154 0040"],"options":null},"Widescreen":{"note":"","data":["81036E94 3C07","81036E96 3FE3"],"options":null}},"44995484-20A5FC5E-C:4A":{"99 Points":{"note":"","data":["801D8E13 0063"],"options":null},"Always First Place":{"note":"","data":["801D040F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801D06F3 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801D06CE 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801D0537 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801D0B5A 0005","801D0DFA 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801D053F 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800E84C3 0007"],"options":null},"Super Speed":{"note":"","data":["801D0537 0005","D0161DC1 0010","801D0537 0020"],"options":null}},"46039FB4-0337822C-C:45":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D6BE0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112E7DE 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800ECA18 0064"],"options":null},"Game 100% Complete\\Save Slot 2":{"note":"","data":["800ECA70 0064"],"options":null},"Game 100% Complete\\Save Slot 3":{"note":"","data":["800ECAC8 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D6BC0 0001","50001701 0000","800D6BC8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D6E50 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D714F 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D6BB9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D6BBA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D6BBB 0003"],"options":null},"Widescreen":{"note":"","data":["8101B0E0 0801","8101B0E2 0344","81040D10 3C1B","81040D12 3F40","81040D14 449B","81040D16 2000","81040D18 0800","81040D1A 6C3A","81040D1C 4604","81040D1E 4202"],"options":null}},"46A3F7AF-0F7591D0-C:45":{"Always Place 1st\\Player 1":{"note":"","data":["81065174 0000"],"options":null},"Infinite\\Continues":{"note":"","data":["8107F850 00FF"],"options":null},"Infinite\\Nitros\\Player 1":{"note":"","data":["800BE7FD 00FF"],"options":null},"Infinite\\Time":{"note":"","data":["810802D4 4296"],"options":null},"Unlock All Cars":{"note":"","data":["8104F10E FFFF"],"options":null}},"49088A11-6494957E-C:45":{"Access In-Game Cheat Menu":{"note":"","data":["8111AADC FFFF","8111AADE FFFF"],"options":null},"Player 1\\99 Gems":{"note":"","data":["812FC4C8 0063","806FE2F8 0063"],"options":null},"Player 1\\Have All\\Keys,Nuke,Evrything":{"note":"Only enable once in game or it will freeze before you get into the start menu","data":["802FC602 0030","802FC60C 0030","802FC616 0030","802FC620 0030","50000601 0000","802FC634 0030","50000501 0000","802FC648 0030","50000401 0000","802FC65C 0030","50000601 0000","802FC99C 0030","802FC4E0 0033","802FC4E5 0033","802FC4EA 0033","802FC594 0033","802FC530 0033","802FC53A 0033","802FC53B 0033","802FC5B0 0033","802FC5B1 0033","802FC5B2 0033","802FC5B3 0033","806FE432 0030","806FE43C 0030","806FE446 0030","806FE450 0030","50000601 0000","806FE464 0030","50000501 0000","806FE478 0030","50000501 0000","806FE48C 0030","50000601 0000","806FE4CC 0030","806FE310 0033","806FE315 0033","806FE31A 0033","806FE360 0033","806FE36A 0033","806FE36B 0033","806FE3C4 0033","50000401 0000","806FE3E0 0033","50000601 0000","8059D61A 0001","50000D01 0000","8059D620 0001","50000401 0000","8059D62E 0001"],"options":null},"Player 1\\Have All\\Weapons":{"note":"","data":["D12FC912 0000","812FC912 0101","D12FC914 0000","812FC914 0101","D12FC916 0000","812FC916 0101","D12FC918 0000","812FC918 0101","D12FC91A 0000","812FC91A 0101","D12FC91C 0000","812FC91C 0101","D12FC91E 0000","812FC91E 0101","D12FC920 0000","812FC920 0101","D12FC922 0000","812FC922 0101","D12FC924 0000","812FC924 0101","D12FC926 0000","812FC926 0101","D12FC928 0000","812FC928 0101","D12FC92A 0000","812FC92A 0101","D12FC92C 0000","812FC92C 0101","D12FC92E 0000","812FC92E 0101","D12FC930 0000","812FC930 0101","D12FC932 0000","812FC932 0101","806FE742 0001","806FE743 0001","806FE744 0001","806FE745 0001","806FE746 0001","806FE747 0001","806FE748 0001","806FE749 0001","806FE74A 0001","806FE74B 0001","806FE74C 0001","806FE74D 0001","806FE74E 0001","806FE74F 0001","806FE750 0001","806FE751 0001","806FE752 0001","806FE753 0001","806FE754 0001","806FE756 0001","806FE757 0001","806FE758 0001","806FE759 0001","806FE75A 0001","806FE75B 0001","806FE75C 0001","806FE75E 0001","806FE75F 0001","806FE760 0001","806FE761 0001","806FE762 0001","806FE763 0001","806FE764 0001"],"options":null},"Player 1\\Infinite\\Ammo":{"note":"","data":["802FC499 0000","50000302 0000","812FC8D4 0063","812FC8DE 0063","812FC8E2 0063","50000A02 0000","812FC8E6 0063","50000302 0000","816FE704 0063","816FE70E 0063","816FE712 0063","50000802 0000","816FE716 0063","816FE72C 0063","816FE730 0063"],"options":null},"Player 1\\Infinite\\Health":{"note":"","data":["812FC4C6 0064","816FE2F6 6400"],"options":null},"Player 2\\99 Gems":{"note":"","data":["812F7240 0063"],"options":null},"Player 2\\Infinite\\Ammo":{"note":"","data":["50000602 0000","812F767C 0063","812F764C 013C","812F764E 013C","50000302 0000","812F7654 013C","812F7660 013C","812F7664 013C","812F766A 013C","812F766C 013C","812F7674 013C","812F7678 013C","8159D5DC 013C","8159D5DE 013C","8159D5E4 013C","8159D5E8 013C","8159D5EA 013C","8159D5F0 013C","8159D5F4 013C","8159D5FA 013C","8159D5FC 013C","8159D604 013C","8159D608 013C","50000602 0000","8159D60C 013C"],"options":null},"Player 2\\Infinite\\Health":{"note":"","data":["812F723E 0064","8059D1CE 0064"],"options":null},"Sixty Frames":{"note":"","data":["80087CE7 0001","80087D6B 0001","80087E3B 0001","80087F37 0001","80087FBB 0001"],"options":null}},"492B9DE8-C6CCC81C-C:50":{"Have 231 Marbles":{"note":"","data":["D00EBE53 0000","800EBE53 03E7"],"options":null},"Have All Gold Udders":{"note":"","data":["50002802 0000","810C80BA 0101"],"options":null},"Infinite\\Ammo\\Banana Peel Bomb":{"note":"","data":["810C6976 0064"],"options":null},"Infinite\\Ammo\\Blaster":{"note":"","data":["810C6916 0064"],"options":null},"Infinite\\Ammo\\Boomerang Knives":{"note":"","data":["810C691E 0064"],"options":null},"Infinite\\Ammo\\Butcher Knife Gun":{"note":"","data":["800C887F 0064"],"options":null},"Infinite\\Ammo\\Chickens":{"note":"","data":["810C69BE 0064"],"options":null},"Infinite\\Ammo\\Green Slimer":{"note":"","data":["810C69A6 0064"],"options":null},"Infinite\\Ammo\\Laser":{"note":"","data":["810C698E 0064"],"options":null},"Infinite\\Ammo\\Lepricon Gun":{"note":"","data":["800C8897 0064"],"options":null},"Infinite\\Ammo\\Mushrooms":{"note":"","data":["810C6936 0064"],"options":null},"Infinite\\Ammo\\Music Gun":{"note":"","data":["810C6906 0064"],"options":null},"Infinite\\Ammo\\Pistol":{"note":"","data":["800C8777 0064"],"options":null},"Infinite\\Ammo\\Rocket Launcher":{"note":"","data":["810C6946 0064"],"options":null},"Infinite\\Ammo\\Shotgun":{"note":"","data":["810C69EE 0064"],"options":null},"Infinite\\Ammo\\Sniper Chicken":{"note":"","data":["800C881F 0064"],"options":null},"Infinite\\Health":{"note":"","data":["800C876F 0064"],"options":null},"Infinite\\Lives":{"note":"","data":["800C8773 0064"],"options":null}},"492F4B61-04E5146A-C:45":{"99 Points":{"note":"","data":["801CB343 0063"],"options":null},"Always First Place":{"note":"","data":["801C293F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801C2C03 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801C2BFE 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801C2A67 0005","8013FC91 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801C308A 0005","801C392D 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801C2A6F 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800DA9D3 0007"],"options":null},"Open\\Course Option":{"note":"This works in all modes except for Championship Mode.","data":["800DA9D3 00??"],"options":{"Dolphin Park":"00","Drake Lake":"03","Glacier Coast":"07","Marian Fortress":"04","Port Blue":"05","Southern Island":"08","Sunny Beach":"01","Sunset Bay":"02","Twilight City":"06"}},"Open\\Difficulty Option":{"note":"","data":["801CB260 00??"],"options":{"Dolphin":"10","Dolphin \u0026 Expert":"12","Dolphin \u0026 Hard":"11","Dolphin Hard \u0026 Expert":"13","Expert":"02","Hard":"01","Hard \u0026 Expert":"03"}},"Open\\Level Option":{"note":"","data":["801CB26B 00??"],"options":{"Above \u0026 Drake Lake":"03","All Above \u0026 Glacier Coast":"16","All Above \u0026 Marine Fortress":"04","All Above \u0026 Port Blue":"05","All Above \u0026 Southern Island":"06","All Above \u0026 Twilight City":"0D","Sunset Bay":"02"}},"Super Speed":{"note":"","data":["801C2A67 0005","D01CE659 0010","801C2A67 0020"],"options":null}},"4998DDBB-F7B7AEBC-C:45":{"Agility":{"note":"","data":["800A973D 0001"],"options":null},"Auto Win Scenario":{"note":"","data":["800A9741 0001"],"options":null},"Debug Menu":{"note":"","data":["800A9740 0001"],"options":null},"Double MPG":{"note":"","data":["800A9735 0001"],"options":null},"Infinite\\Ammo":{"note":"","data":["800A9731 0001"],"options":null},"Infinite\\Attempts":{"note":"","data":["800A9732 0001"],"options":null},"Infinite\\Chaingun":{"note":"","data":["800A9737 0001"],"options":null},"Infinite\\Fuel":{"note":"","data":["800A9733 0001"],"options":null},"Infinite\\Lives":{"note":"","data":["800A5DF0 0009"],"options":null},"Infinite\\Missiles":{"note":"","data":["800A9739 0001"],"options":null},"Infinite\\Rockets":{"note":"","data":["800A9738 0001"],"options":null},"Infinite\\Wingtips":{"note":"","data":["800A973A 0001"],"options":null},"Invulnerability":{"note":"","data":["800A9730 0001"],"options":null},"Level Skip":{"note":"","data":["800A973F 0001"],"options":null},"Max Armor Increased 50%":{"note":"","data":["800A973C 0001"],"options":null},"Overhead View":{"note":"","data":["800A973E 0001"],"options":null},"Play Mission\\1":{"note":"","data":["800A5DF1 0000"],"options":null},"Play Mission\\2":{"note":"","data":["800A5DF1 0001"],"options":null},"Play Mission\\3":{"note":"","data":["800A5DF1 0002"],"options":null},"Play Mission\\4":{"note":"","data":["800A5DF1 0003"],"options":null},"Play Mission\\5":{"note":"","data":["800A5DF1 0004"],"options":null},"Play Mission\\6":{"note":"","data":["800A5DF1 0005"],"options":null},"Quad Damage":{"note":"","data":["800A9736 0001"],"options":null},"Stealth Mode":{"note":"","data":["800A9734 0001"],"options":null},"Wingtips Do Double Damage":{"note":"","data":["800A973B 0001"],"options":null}},"49E46C2D-7B1A110C-C:4A":{"Have 1 Star\\Abdul":{"note":"","data":["80306A13 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["80306A0F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80306A12 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80306A11 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80306A14 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80306A10 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["80306A0E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80306A15 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80306A16 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["80208F61 0000","80203E83 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["80203E87 0000","8020AE29 0000"],"options":null},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EED3B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0208E17 0000","80208E17 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020ACDF 0000","8020ACDF 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810AD29C 3F80"],"options":null}},"4A997C74-E2087F99-C:50":{"Extreme Mode":{"note":"","data":["8111D332 0003"],"options":null},"Infinite Armour\\Player One":{"note":"","data":["8011D65F 0064"],"options":null},"Infinite Armour\\Player Two":{"note":"","data":["8011D663 0064"],"options":null},"Infinite Bombs\\Player One":{"note":"","data":["8011D667 0003"],"options":null},"Infinite Bombs\\Player Two":{"note":"","data":["8011D66B 0003"],"options":null},"Level 11 Vulcan Cannon\\Player One":{"note":"","data":["80123BAB 000A"],"options":null},"Level 11 Vulcan Cannon\\Player Two":{"note":"","data":["80123BCB 000A"],"options":null},"Level Select":{"note":"","data":["81123E16 000C"],"options":null},"Max Score":{"note":"","data":["81123B82 FC9A"],"options":null}},"4BCDFF47-AAA3AF8F-C:45":{"Have All Items":{"note":"","data":["50000501 0000","80389C4A 0001","50000301 0000","80389C51 0001","80389C5A 0001","80389C5B 0001","80389C5D 0001","50000E01 0000","80389C60 0001"],"options":null},"Have Exp Points":{"note":"","data":["80389C49 0063"],"options":null},"Have Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C3F 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C45 0001","81389C46 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C3E 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C49 0063"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C48 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the GS button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C90 ????","89389C92 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CED 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C88 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C88 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C3D 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C42 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"4C261323-4F295E1A-C:44":{"Access Level Select":{"note":"On the main menu Scroll down to make CHEATS visible to go into Level Select.For in-Game Cheats,Pause gameplay.","data":["810DD50C 8001"],"options":null},"Have\\All TARZAN Letters":{"note":"","data":["800DD515 00FF"],"options":null},"Have\\Coins Collected 100%":{"note":"","data":["800DD547 0064"],"options":null},"Have\\Full Portrait":{"note":"","data":["800DD514 00FF"],"options":null},"Have\\Level \u0026 Tokens Completed 100%":{"note":"","data":["800DD51F 0000","800DD520 0001","800DD521 0000"],"options":null},"Infinite\\Bonus Timer":{"note":"This is For All Timers on Bonus Levels","data":["801736DE 0025"],"options":null},"Infinite\\Green Weapon":{"note":"","data":["811921F6 0063"],"options":null},"Infinite\\Health":{"note":"","data":["81192320 0120"],"options":null},"Infinite\\Lives":{"note":"","data":["800DD542 00??"],"options":{"3 Lives":"03","99 Lives":"63"}},"Infinite\\Purple Weapon":{"note":"","data":["811921FA 0063"],"options":null},"Infinite\\Red Weapon":{"note":"","data":["811921F8 0063"],"options":null},"Press GS For\\Sabor Attacks\\Sabor 1 Hit Kill":{"note":"","data":["8924A23E 0001"],"options":null}},"4C52BBB2-CEAB0F6B-C:45":{"Always Play Level Modifier":{"note":"","data":["800B254C 00??"],"options":{"Mission 1-Plastic Pandemonium":"00","Mission 10-The Melting Pot":"09","Mission 11-River Rapids Riot":"0A","Mission 12-Nighttime Teddy":"0B","Mission 13-Demolition Time":"0C","Mission 14-Pick Up The Pieces":"0D","Mission 15-Have An Ice Day":"0E","Mission 16-Plastro's Revenge":"0F","Mission 17-Bug Hunt: Chew Chew Bug-B-Q":"10","Mission 18-Bug Hunt: Crispy Critters":"11","Mission 19-Flag-Nab-It: Fort Frenzy":"12","Mission 2-Going Car-razy":"01","Mission 20-Flag-Nab-it: Freezer Burn":"13","Mission 21-Food Fight: Picnic Panic":"14","Mission 22-Food Fight: Cherry Surprise":"15","Mission 23-Rescue: Don't Feed The Crabs":"16","Mission 24-Rescue: Tide Pool Terror":"17","Mission 3-The Train That Could":"02","Mission 4-Tan Terror-Tory":"03","Mission 5-Bug Bath":"04","Mission 6-Uninvited Guests":"05","Mission 7-Ants In The Pants":"06","Mission 8-Saucer Attack":"07","Mission 9-The Heat is On":"08"}},"Co-Pilot Modifier":{"note":"","data":["800B245C 00??"],"options":{"Lt. Dave Parker \"Rawhide\"":"02","Lt. Felicity Wannamaker \"Bombshell\"":"03","Lt. James Marshall \"Woodstock\"":"00","Lt. John Lawless \"Hardcore\"":"01","Sergeant Hawk \"Sarge\" (Hidden Character)":"04"}},"Helicopter Modifier":{"note":"","data":["800B2534 00??"],"options":{"Apache (Hidden)":"04","Chinook (Hidden)":"02","Huey":"01","Super Stallion (Hidden)":"03"}},"Start On Play Level Modifier":{"note":"","data":["D00B254C 0000","800B254C 00??"],"options":{"Mission 1-Plastic Pandemonium":"00","Mission 10-The Melting Pot":"09","Mission 11-River Rapids Riot":"0A","Mission 12-Nighttime Teddy":"0B","Mission 13-Demolition Time":"0C","Mission 14-Pick Up The Pieces":"0D","Mission 15-Have An Ice Day":"0E","Mission 16-Plastro's Revenge":"0F","Mission 17-Bug Hunt: Chew Chew Bug-B-Q":"10","Mission 18-Bug Hunt: Crispy Critters":"11","Mission 19-Flag-Nab-It: Fort Frenzy":"12","Mission 2-Going Car-razy":"01","Mission 20-Flag-Nab-it: Freezer Burn":"13","Mission 21-Food Fight: Picnic Panic":"14","Mission 22-Food Fight: Cherry Surprise":"15","Mission 23-Rescue: Don't Feed The Crabs":"16","Mission 24-Rescue: Tide Pool Terror":"17","Mission 3-The Train That Could":"02","Mission 4-Tan Terror-Tory":"03","Mission 5-Bug Bath":"04","Mission 6-Uninvited Guests":"05","Mission 7-Ants In The Pants":"06","Mission 8-Saucer Attack":"07","Mission 9-The Heat is On":"08"}},"Unlock All Planes":{"note":"","data":["810B252A 0105"],"options":null}},"4D3ADFDA-7598FCAE-C:50":{"Infinite Energy\\Player 1":{"note":"","data":["80254A76 001E","8025CCF6 001E"],"options":null},"Infinite Energy\\Player 2":{"note":"","data":["80257B86 001E","80260846 001E"],"options":null},"Infinite Energy\\Player 3":{"note":"","data":["8025ACA6 001E","802637A6 001E"],"options":null},"Infinite Energy\\Player 4":{"note":"","data":["8025E0E6 001E","80266B76 001E"],"options":null}},"4D3E622E-9B828B4E-C:4A":{"Always 1st Place":{"note":"","data":["802C4BC2 0001"],"options":null},"Have Boost From Start":{"note":"","data":["D02C4DAC 003F","802C4925 0050"],"options":null},"Infinite Lives":{"note":"","data":["800E5AA9 0005"],"options":null},"Player 1\\Infinite Shield":{"note":"","data":["812C4B48 4336","812C4B4C 4336"],"options":null},"Time Always 00.00.00 1st Place":{"note":"","data":["802C4BC0 0000","802C4BC2 0001"],"options":null},"Unlock Everything":{"note":"","data":["800CD428 0001"],"options":null}},"4D486681-AB7D9245-C:50":{"Access All Levels":{"note":"Must be used with Access Wampa Stompa","data":["810DE2EA 0004"],"options":null},"Access In-Game Cheat Menu":{"note":"Pause gameplay and pink text will appear in top screen. scroll with multiple buttons and select with 'A'","data":["D10DDE2E 0001","810D3F32 0001","D10DDE14 0002","810D3F32 0001","D10E28D4 0011","810D3F32 0001","D10E28D4 0011","810D3F32 0001"],"options":null},"Access Wampa Stompa":{"note":"Important To Get All Codes To Work! Select empty file \"Wampa Stompa\" will now be your playername.","data":["8118D4E8 2057","8118D4EA 616D","8118D4EC 7061","8118D4EE 2020","8118D4F0 5374","8118D4F2 6F6D","8118D4F4 7061"],"options":null},"Extra Jump Power":{"note":"","data":["810E2220 3F92"],"options":null},"Freeze Timer":{"note":"","data":["810E2230 4018"],"options":null},"Max Challenge Points":{"note":"","data":["8118F370 000F"],"options":null}},"4D79D316-E8501B33-C:45":{"Bonus Menu Games\\Infinite Time\\Escape Race 100 \u0026 200\\Player 1":{"note":"","data":["811BD3B6 000A"],"options":null},"Bonus Menu Games\\Infinite Time\\Escape Race 100 \u0026 200\\Player 2":{"note":"","data":["811BD3BA 000A"],"options":null},"Bonus Menu Games\\Max\\Points\\Disc Hunter\\Player 1":{"note":"","data":["801BD3E9 00FF"],"options":null},"Bonus Menu Games\\Max\\Points\\Disc Hunter\\Player 2":{"note":"","data":["801BD3EB 00FF"],"options":null},"Bonus Menu Games\\Max\\Wins\\Sunset \u0026 Sunrise Showdown\\Player 1":{"note":"","data":["801BC25F 00FF"],"options":null},"Choose Stage\\VS. Mode":{"note":"","data":["800ED6CF 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06","Stage 8 (Hidden Stage)":"07","Stage 9 (Hidden Stage)":"08","Stage A (Hidden Stage)":"09"}},"Infinite\\Health\\Player 1":{"note":"","data":["8112CD46 270F"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["8114D2C6 270F"],"options":null},"Infinite\\Stun Meter\\Player 1":{"note":"","data":["8012CD49 00FF"],"options":null},"Infinite\\Stun Meter\\Player 2":{"note":"","data":["8014D2C9 00FF"],"options":null},"Infinite\\Time":{"note":"","data":["80102A94 000A"],"options":null},"Play As\\Player 1":{"note":"","data":["801BE2A4 00??"],"options":{"Airazor":"03","Cheetor":"02","Megatron":"04","Optimus Primal":"00","Rattrap":"01","Tarantulas":"05","Terrorsaur":"07","Waspinator":"06"}},"Play As\\Player 2":{"note":"","data":["801BE2A5 00??"],"options":{"Airazor":"03","Cheetor":"02","Megatron":"04","Optimus Primal":"00","Rattrap":"01","Tarantulas":"05","Terrorsaur":"07","Waspinator":"06"}}},"4DD7ED54-74F9287D-C:45":{"All Levels\\Dash Becomes Shorter \u0026 Wider":{"note":"","data":["800BA025 FFFF"],"options":null},"All Levels\\Infinite\\Lives":{"note":"","data":["800E05CB 0064"],"options":null},"All Levels\\Infinite\\Missiles":{"note":"","data":["800E1265 00FF"],"options":null},"All Levels\\Large Mutant Enemies":{"note":"","data":["800BB62B FFFF"],"options":null},"All Levels\\No Clipping\\Off":{"note":"","data":["81111E67 0001"],"options":null},"All Levels\\No Clipping\\On":{"note":"","data":["81111E67 0000"],"options":null},"All Levels\\See Through\\Everything Except Specific Things":{"note":"","data":["800BC665 FFFF"],"options":null},"All Levels\\See Through\\Some Walls":{"note":"","data":["800BC625 FFFF"],"options":null},"All Levels\\Time Always 0:00:02":{"note":"","data":["810E04E8 4000"],"options":null},"All Levels\\Visibililty\\Maximum":{"note":"","data":["800BA62B FFFF"],"options":null},"All Levels\\Visibililty\\Minimum":{"note":"","data":["800BA66B FFFF"],"options":null},"All Stages\\Infinite Health":{"note":"","data":["81072D0C 2400"],"options":null},"All Stages\\Infinite\\Disruptor Ammo":{"note":"","data":["81073F04 2400"],"options":null},"All Stages\\Infinite\\Flame Ammo":{"note":"","data":["81073720 2400"],"options":null},"All Stages\\Infinite\\Jet Pack":{"note":"","data":["81076AAC 2400","81076C58 2400","81076B48 2400"],"options":null},"All Stages\\Infinite\\Pulse Ammo":{"note":"","data":["81074204 2400"],"options":null},"All Stages\\Infinite\\Seeker Ammo":{"note":"","data":["81073A94 2400"],"options":null},"All Stages\\Infinite\\Stunner Ammo":{"note":"","data":["81073BD4 2400"],"options":null},"All Stages\\Invincible":{"note":"","data":["8107A770 2400"],"options":null},"All Stages\\Lasers Never Overheat":{"note":"","data":["81073948 2400"],"options":null},"All Stages\\Upper Lasers":{"note":"Don't Use With Never Overheat Code","data":["81073944 3C06","81073946 4EFF"],"options":null},"Press F9 For Pink Cheat Debug Screen":{"note":"","data":["890D098B 0001"],"options":null}},"4E4A7643-A37439D7-C:45":{"Aiming Sites Always Available":{"note":"","data":["812F0922 0004"],"options":null},"Always Your Turn\\Player 1":{"note":"","data":["802EF798 0000"],"options":null},"Always Your Turn\\Player 2":{"note":"","data":["802EF798 0001"],"options":null},"Ball\\Always In Hand":{"note":"","data":["802EF79C 0002"],"options":null},"Foul Score Options\\Player 1":{"note":"","data":["812EF784 ????"],"options":{"Max Fouls":"FFFF","Zero Fouls":"0000"}},"Foul Score Options\\Player 2":{"note":"","data":["812EF786 ????"],"options":{"Max Fouls":"FFFF","Zero Fouls":"0000"}},"Max Ratings\\Player 1":{"note":"","data":["81062C6A FFFF"],"options":null},"Max Ratings\\Player 2":{"note":"","data":["81062CEE FFFF"],"options":null},"Wins Options\\Player 1":{"note":"","data":["812EF780 ????"],"options":{"Max Points":"FFFF","Zero Points":"0000"}},"Wins Options\\Player 2":{"note":"","data":["812EF782 ????"],"options":{"Max Points":"FFFF","Zero Points":"0000"}}},"4E4B0640-1B49BCFB-C:45":{"2 Player Championship Mode":{"note":"This lets player 2 play with you in championship mode so if you have a friend that you want to tag team up with in tag team championship now you can.","data":["810A755E 0002"],"options":null},"Always Special\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF9E 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2F6 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["D015A5D1 0015","8015B64E 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["D015A5D1 0015","8015B9A6 0004"],"options":null},"Auto-Pin\\Player 1":{"note":"Do not use with Cant Pin","data":["8016CE23 0003"],"options":null},"Auto-Pin\\Player 2":{"note":"Do not use with Cant Pin","data":["8016CE17 0003"],"options":null},"Auto-Pin\\Player 3":{"note":"Do not use with Cant Pin","data":["8016CE2F 0003"],"options":null},"Auto-Pin\\Player 4":{"note":"Do not use with Cant Pin","data":["8016CE3B 0003"],"options":null},"CPU To Human Control\\Player 1":{"note":"","data":["8015AF99 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 2":{"note":"","data":["8015B2F1 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 3":{"note":"","data":["8015B649 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 4":{"note":"","data":["8015B9A1 00??"],"options":{"CPU":"18","Human":"17"}},"Can't Pin\\Player 1":{"note":"Do not use with Auto Pin","data":["8016CE23 0004"],"options":null},"Can't Pin\\Player 2":{"note":"Do not use with Auto Pin","data":["8016CE17 0004"],"options":null},"Can't Pin\\Player 3":{"note":"Do not use with Auto Pin","data":["8016CE2F 0004"],"options":null},"Can't Pin\\Player 4":{"note":"Do not use with Auto Pin","data":["8016CE3B 0004"],"options":null},"Cannot Be Grabbed\\Player 1":{"note":"","data":["D115AEC6 0052","8115AEC6 0001","D115AEC6 00A1","8115AEC6 00C1"],"options":null},"Cannot Be Knocked Down\\Player 1":{"note":"","data":["D115AEC6 0031","8115AEC6 0001"],"options":null},"Cannot Be Punched\\Player 1":{"note":"","data":["D115AEC6 002D","8115AEC6 0001","D115AEC6 0035","8115AEC6 00C1"],"options":null},"Clock At 00:00":{"note":"","data":["8115AB1E 0000","810A99F2 0000"],"options":null},"Hacked Moves\\Capture Tazzplex":{"note":"Replaces: Capture Suplex P1 grabs P2's feet like a capture suplex, then lets go \u0026 does a Tazzplex.","data":["D106B454 3689","D106B456 0021","8106B460 00BC","D106B454 3689","D106B456 0021","8106B462 A5E2","D106B514 368A","D106B516 0021","8106B520 00BC","D106B514 368A","D106B516 0021","8106B522 B6BE"],"options":null},"Hacked Moves\\Dominator into HHH Facebuster":{"note":"Replaces: Dominator","data":["D106B454 3810","D106B456 005C","8106B560 011A","D106B454 3810","D106B456 005C","8106B562 A256","D106B514 3811","D106B516 005C","8106B520 011A","D106B514 3811","D106B516 005C","8106B522 ACB0","D106B454 3810","D106B456 0075","8115AF52 0000"],"options":null},"Hacked Moves\\Dragon Screw Stunner":{"note":"Dragon Screw 02 P1 does a Dragon Screw then picks up P2 (still holding his leg) and spins him around and gives him a Stone Cold Stunner","data":["D106B454 3749","D106B456 0094","8106B460 00E9","D106B454 3749","D106B456 0094","8106B462 B9BE","D106B514 374A","D106B516 0094","8106B520 00E9","D106B514 374A","D106B516 0094"],"options":null},"Hacked Moves\\Dragon Screw Suplex":{"note":"Replaces: Double Dragon Screw 02 P1 does a Dragon screw then picks then up (still holding their feet) and does a capture suplex.","data":["D106B454 3749","D106B456 007C","8106B460 00AD","D106B454 3749","D106B456 007C","8106B462 DB2A","D106B514 374A","D106B516 007C","8106B520 00AD","D106B514 374A","D106B516 007C","8106B522 EAE0","D106B454 3749","D106B456 00A5","8115AF52 0000","D106B514 374A","D106B516 00A5","8115B2AA 0000"],"options":null},"Hacked Moves\\Morality Check to Back of head":{"note":"Replaces: Back Clothesline P1 is immediately backed up and does the Morality Check to P2 in the back of the head (misses by a little)","data":["D106B454 3892","D106B456 0000","8106B460 00B3","D106B454 3892","D106B456 0000","8106B462 194C"],"options":null},"Hacked Moves\\Running Rock Bottom":{"note":"Replaces: Farooq Spinebuster P2 runs into P1 and P1 delivers a RockBottom to P2.","data":["D106B454 3A80","D106B456 0000","8106B460 00C1","D106B454 3A80","D106B456 0000","8106B462 F7A2","D106B514 3A81","D106B516 0000","8106B520 00C2","D106B514 3A81","D106B516 0000","8106B522 1210"],"options":null},"Hacked Moves\\Running Tazplex":{"note":"Replaces: Underhook Belly to Belly P2 runs into P1 and P1 does a Tazplex to P2.","data":["D106B454 3A7A","D106B456 0000","8106B460 00BC","D106B454 3A7A","D106B456 0000","8106B462 A51E","D106B514 3A7B","D106B516 0000","8106B520 00BC","D106B514 3A7B","D106B516 0000","8106B522 B5FA"],"options":null},"Have All\\Characters,Costumes \u0026 Moves":{"note":"","data":["50000B02 0000","810BEE40 FFFF"],"options":null},"Infinite\\Money\\Championship Mode":{"note":"For Championship Mode","data":["8109940A FFFF"],"options":null},"Infinite\\Money\\Smackdown Mall Shop":{"note":"For Smackdown Mall Shop","data":["8114FAD6 FFFF"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF5F 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2B7 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["D015A5D1 0015","8015B60F 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["D015A5D1 0015","8015B967 00FF"],"options":null},"Novalty\\Truck In The Crowd":{"note":"","data":["81050110 0747","81050112 0748","81050114 0749","81050116 074A","81050118 074B","81050124 0A4B","81050126 0A43","81050128 0A4B","8105012A 0A43","8105012C 0A43","8105012E 0A43","8105011A 074C","8105011C 074D","81050130 0A43","8105011E 074E","81050132 0A43","81050120 0746","81050134 0A4B","81050122 0743","81050136 0A4B","D1064880 2000","8115AFB0 42EE","D1064880 2000","8115B308 42EE"],"options":null},"Play As\\Player 1\\Option 1":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 1\\Option 2":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 1\\Option 3":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 2\\Option 1":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 2\\Option 2":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 2\\Option 3":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 3\\Option 1":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 3\\Option 2":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 3\\Option 3":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 4\\Option 1":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 4\\Option 2":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 4\\Option 3":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Replace Raw War with\\BACKYARD ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105010E 0F76","8105010C 0F76","810482E8 002F","81050150 2CFD","810528F4 33FF","810528F6 33FF","81050152 2DC7","81050114 04F4","81050116 04F5","8105011E 04F3","81050128 07FF","8105012A 07FF","81050132 07FF","81079F48 400C","81079F5C 3F00","81079F70 3FFF","8107A024 4010","8107A038 3F00","8107A04C 4020","8107A060 3F84","8107A394 4012","8107A3A8 3F00","8107A3BC 4030","8107A3D0 3F84","8105042C 0949","81050436 07FF","81050438 07FF","8105043A 07FF","8105043C 0000","8105043E 07FF","81050440 0949","81050442 0949","81050430 0F76","81050128 07FF","8105012A 07FF","8105012C 0000","8105012E 07FF","81050130 07FF","81050132 07FF","81050134 0000","81050136 08F9","81050196 2CFD","81050194 09EF","81050192 0000","81050190 09EF","8116C49E 0019","8116C4B8 0004","8116C4DC C2E1","8116C4E0 42B4","810500FE 2D2D","81050100 2D2D","81050102 2D2D","81050400 2DC7","81050402 2DC7","81050404 2DC7","81050406 2DC7","81050408 2DC7","8105040A 2DC7","8105040C 2DC7","8105040E 2DC7","50001002 0000","810501B8 0000","50000402 0000","810501E0 0000","50000902 0000","81050262 0000","50001402 0000","81050290 0000","50002C02 0000","810502EC 0000","8107941C 3FE0","81079428 3FFF","810500EC 06FE","810500EE 06FD","810500F8 07FF","810500FA 0997","81050110 06FC","81050112 06FB","8105011A 06FF","8105011C 06FA","81052CF0 2CC9","81052CF4 2D1B","81052CD0 2CD1","81052CD4 0963","81052C84 2CBF","81052C8A 0961","81052CB8 2CC4","81052CBC 2DD7","81052CC8 2CD1","81052CCC 2CFB","81052C78 2CBC","81052C80 2D31","81052CF8 2CC1","81052D00 2DD7"],"options":null},"Replace Raw War with\\BACKYARD WEAK":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0E88","8105042E 2D0D","81050430 2D0D","81050432 2D0D","81050434 2D0D","81050436 07FD","8105043A 2CFB","8105043C 2D0D","8105043E 2D0D","81050440 2D0D","81050442 2D0D","810500E8 2D0D","8105010E 2D0D","8105010C 2D0D","81050150 2D0D","81050196 2CFB","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81050136 2CFB","81050400 2D0D","81050402 2D0D","81050404 2D0D","81050406 2D0D","81050408 2D0D","8105040A 2D0D","8105040C 2D0D","8105040E 2D0D","810528F4 2D0D","810528F6 2D0D","81052CE8 2CC9","81052CEC 2D2D"],"options":null},"Replace Raw War with\\BARBEDWIRE ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 2CFB","8105042E 2CFB","81050430 2CFB","81050432 2CFB","81050434 2CFB","81050436 2CFB","81050438 2CFB","8105043A 2CFB","8105043C 2CFB","8105043E 2CFB","81050440 2CFB","81050442 2CFB","810500E8 2CFB","8105010E 2CFB","8105010C 2CFB","81050150 2CFB","81050196 2CFB","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81050136 2CFB","810528F4 DDDD","810528F6 DDDD","81052CE8 2CCA","81052CEC 2CFB","81050400 2CFB","81050402 2CFB","81050404 2CFB","81050406 2CFB","81050408 2CFB","8105040A 2CFB","8105040C 2CFB","8105040E 2CFB"],"options":null},"Replace Raw War with\\BARBEDWIRE ROPES":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050110 04F3","81050112 04F4","81050114 04F5","81050116 04F3","81050118 04F4","8105011A 04F5","8105011C 04F3","8105011E 04F4","81050120 04F5","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81079D90 3F6C","81079D94 3F48","81079DA4 3D10","81079DB8 3F71","81079E6C 3F6C","81079E80 3D10","81079E90 3F47","81079F48 3F6C","81079F4C BF4C","81079F5C 3D10","81079F70 3F71","8107A024 3F6C","8107A028 3F28","8107A038 3D10","8107A04C 3F71","8107A100 3F6C","8107A114 3D10","8107A124 3F23","8107A1DC 3F6C","8107A1E0 BF2A","8107A1F0 3D10","8107A204 3F71","8107A2B8 3F6C","8107A2BC 3F02","8107A2CC 3D10","8107A2E0 3F71","8107A394 3F6C","8107A3A8 3D10","8107A3B8 3F00","8107A470 3F6C","8107A474 BF02","8107A484 3D10","8107A498 3F71","81050144 0569","81050154 07F7","810528F4 0C01","810528F6 0555","81050140 04F4","81050150 2CFB","8107A628 3F60","8107A63C 3D10","8107A64C 3F52","8107A650 BF80","8107A8BC 3F56","8107A8C4 BA00","8107A8D0 3D10","8107A8DC 3C5A","8107A8E0 3F30","8107A8E4 BF80","8107ADE4 3F56","8107ADEC BA00","8107ADF8 3D10","8107AE04 3C5A","8107AE08 3F0E","8107AE0C BF80","8107AB7C 3F00","D115AF56 2EB2","8115AEC6 0017","D115B2AE 2EB2","8115B21E 0017","D115B606 2EB2","8115B570 0017","D115B95E 2EB2","8115B8CE 0017","81052922 FFFF","81052924 FFFF","81052926 FFFF"],"options":null},"Replace Raw War with\\BARBEDWIRE SQUARE\\Part 1":{"note":"Both Parts must be on for this Press the C Left Button to make your opponent bleed,These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050110 04F3","81050112 04F4","81050114 04F5","81050116 04F3","81050118 04F4","8105011A 04F5","8105011C 04F3","8105011E 04F4","81050120 04F5","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81079D90 3F6C","81079D94 3F48","81079DA4 3D10","81079DB8 3F71","81079E6C 3F6C","81079E80 3D10","81079E90 3F47","81079F48 3F6C","81079F4C BF4C","81079F5C 3D10","81079F70 3F71","8107A024 3F6C","8107A028 3F28","8107A038 3D10","8107A04C 3F71","8107A100 3F6C","8107A114 3D10","8107A124 3F23","8107A1DC 3F6C","8107A1E0 BF2A","8107A1F0 3D10","8107A204 3F71","8107A2B8 3F6C","8107A2BC 3F02","8107A2CC 3D10","8107A2E0 3F71","8107A394 3F6C","8107A3A8 3D10","8107A3B8 3F00","8107A470 3F6C","8107A474 BF02","8107A484 3D10","8107A498 3F71","81050144 0569","81050154 07F7","810528F4 0C01","810528F6 0555","81050140 04F4","81050150 2CFB","8107A628 3F60","8107A63C 3D10","8107A64C 3F52","8107A650 BF80","8107A8BC 3F56","8107A8C4 BA00","8107A8D0 3D10","8107A8DC 3C5A","8107A8E0 3F30","8107A8E4 BF80","8107ADE4 3F56","8107ADEC BA00","8107ADF8 3D10","8107AE04 3C5A","8107AE08 3F0E","8107AE0C BF80","8107AB7C 3F00","D115AF56 2EB2","8115AEC6 0017","D115B2AE 2EB2","8115B21E 0017","D115B606 2EB2","8115B570 0017","D115B95E 2EB2","8115B8CE 0017","81052922 FFFF","81052924 FFFF","81052926 FFFF","8116C330 0000","8116C332 000A","8116C334 0000","8116C336 000A","8116C378 42B4"],"options":null},"Replace Raw War with\\BARBEDWIRE SQUARE\\Part 2":{"note":"Both Parts must be on for this Press the C Left Button to make your opponent bleed,These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8116C382 0000","8116C38C FFFF","81052C9C 0672","81052CA4 2CFB","D1064880 0002","8115B21E 002F","D1064886 0002","8115AEC6 002F","8116C3E4 0000","8116C3E6 000C","8116C3E8 0000","8116C3EA 000C","8116C428 C3D4","8116C440 FFFF","81052CB2 2CC2","81052CB4 0805","81052CB6 2CFB","D1064880 2000","8116C3E6 001F","D1064880 2000","8116C3EA 001F","D1064880 2000","81005592 3F81","D1005592 3F81","8116C3E6 001F","D1064880 2000","81005592 3F81","D1005592 3F81","8116C3EA 001F","D1064886 2000","8116C3E6 001F","D1064886 2000","8116C3E6 001F","D1064886 2000","81005592 3F81","D1005592 3F81","8116C3EA 001F","81052CF8 04F4","81052D00 2CFB","8116C3E4 0000","8116C3E6 0015","8116C3E8 0000","8116C3EA 0015","8116C428 0000","8116C42A 0000","8116C42C 43EB","8116C42E 0000","8116C430 C3A6","8116C432 0000","8116C436 0400","8116C43A 0000","8116C43E 0000","8116C440 FFFF","8116C442 0000","810855A8 3F00","81085684 3F00","81085750 3F00","8108583C 3F00","81050100 2CFB","8105010E 2CFB"],"options":null},"Replace Raw War with\\DUDLEY ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 21A7","8105042E 2D0D","81050432 2D0D","81050436 21A7","8105043E 2D0D","81050440 0000","81050442 0000","810500E8 2D0D","8105010C 2CFD","8105010E 2CFD","81050150 2D29","81050152 2CFB","81050400 09EF","81050402 09EF","81050404 0000","81050406 0000","81050408 0000","8105040A 0000","8105040C 09EF","8105040E 09EF","81050188 04F6","8105018A 04F7","8105018C 04F8","8105018E 04F9","81050190 09EF","81050192 0000","81050194 09EF","81050196 2D0D","810528F4 6666","810528F6 6666","81052CE8 2CC2","81052CEC 2D0D","81052D1C 2CD3","81052D1E 2CD4","81052D20 2CD5","81052D22 2CD6","81052D24 2CFD","81052D26 2CFD","81052D28 2CFB","81052D2A 2CFB","81050124 2CFD","81050126 2CFD","81050128 2CFD","8105012A 2CFD","8105012C 2CFD","8105012E 2CFD","81050130 2CFD","81050132 2CFD","81050134 2CFD","81050136 2CFD","81050154 2CFB","811533F8 002E"],"options":null},"Replace Raw War with\\FLAME ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105010E 0EFE","8105010C 0EFE","810528F4 2508","810528F6 2508","81050430 2401","81050430 2401","81050404 2401","81050406 2401","81050408 2401","81050409 2401","8105040A 2401","8105040C 2401","810500E8 2401"],"options":null},"Replace Raw War with\\FLAMING TURNBUCKLES":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8116C334 FFFF","8116C336 001F","8116C374 C350","8116C376 FFF3","8116C378 4377","8116C37A 2689","8116C37C C380","8116C37E 0406","8116C382 0D14","8116C386 0FCC","8116C38A 07DC","8116C38C FFFF","8116C38E FDE3","8116C3E8 FFFF","8116C3EA 001F","8116C428 C360","8116C42C 4370","8116C430 4376","8116C436 0D14","8116C43A 0FCC","8116C43E 07DC","8116C442 F9C4","8116C49C FFFF","8116C49E 001F","8116C4DC 4360","8116C4E0 4370","8116C4E4 4380","8116C4EA 0CD0","8116C4EE 0136","8116C4F2 04EE","8116C4F6 F601","8116C550 FFFF","8116C552 001F","8116C590 434F","8116C594 4370","8116C598 C36C","8116C59E 0E70","8116C5A2 0F58","8116C5A6 0814","8116C5AA F1E6"],"options":null},"Replace Raw War with\\GREENWICH STREET ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050430 2DC5","81050436 0000","81050438 0000","8105043A 0000","8105043E 0000","810504E8 0EFE","8105010E 2DC5","8105010C 2DC5","81050196 2CFD","81050136 0FB6","81050134 0FC6","81050132 0FB6","81050130 0FC6","8105012E 0FB6","8105012C 0FC6","8105012A 0FB6","81050128 0FC6","81050126 0FB6","81050124 0FC6","81050440 0000","81050442 0000","50002C02 0000","81050378 0000","50002C02 0000","810502EC 0000","50001402 0000","81050290 0000","50000902 0000","81050262 0000","50000402 0000","810501CE 0000","50001002 0000","810501B8 0000","50000402 0000","810501E0 0000","8105042C 2D0D","81050430 0000","81050150 24F0"],"options":null},"Replace Raw War with\\HHH ARNEA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105040E 24EF","8105040C 24EF","8105040A 24EF","81050408 24EF","81050406 24EF","81050404 24EF","81050402 24EF","81050400 24EF","81050436 24E9","81050440 24E9","81050442 24E9","8105043E 24EF","8105042E 24EF","8105043C 24EF","8105042C 24E9","8105010E 24E9","8105010C 24E9","81050196 24E9","8105042E 24EF","81050432 24EF","810500F8 24EF","810500FA 24EF","810500FC 24EF","810500FC 24EF","81050100 24EF","81050100 24EF","81052CE8 2CCA","81052CEC 24EF","81050150 24E9","81050152 24E9","81050154 24E9","810528F4 24E9","810528F6 24E9"],"options":null},"Replace Raw War with\\HOSPITAL ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0949","8105042E 283F","81050428 0949","81050430 0949","81050430 0949","81050436 096B","81050438 0993","8105043A 096B","8105043E 283F","81050440 283F","81050442 283F","810504E8 0949","81050150 283F","81050196 283F","81050400 283F","81050402 283F","81050404 283F","81050406 283F","81050408 283F","8105040A 283F","8105040C 283F","8105040E 283F","810500F8 283F","810500FA 283F","810500FC 283F","810500FE 283F","81050100 283F","81050100 283F","81052CE8 2CCA","81052CEC 283F","8105010E 283F","8105010C 283F","81050124 0949","81050126 0949","81050128 0949","8105012A 0949","8105012C 0949","8105012E 0949","81050130 0949","81050132 0949","81050134 0949","81050136 0949","810500E8 0949","810528F4 0000","81052CE0 2CC9"],"options":null},"Replace Raw War with\\KANE ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0A61","8105042E 0A61","81050428 2B6C","81050430 2B6C","81050430 2B6C","81050436 2B57","81050438 2B57","8105043A 2B57","8105043E 0A61","81050440 2B57","81050442 2B57","810500E8 1B1E","8105010E 2D37","8105010C 209F","81050194 0955","81050196 2B57","81050400 2699","81050402 2699","81050404 2699","81050406 2699","81050408 2699","8105040A 2699","8105040C 2699","8105040E 2699"],"options":null},"Replace Raw War with\\REMOVE RING":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050150 0000","81050152 0000","81050154 0000","810500E8 0000","810855A8 3F00","81085684 3F00","81085750 3F00","8108583C 3F00","81079C08 3F00","81079C14 3F00","81079B10 3F00"],"options":null},"Replace Raw War with\\SHIMMER ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 1932","8105042E 1932","81050430 1932","81050434 1932","81050432 1932","81050436 1932","81050438 1932","8105043A 1932","8105043E 1932","81050440 1932","81050442 1932","81050150 1932","81050152 1932","81050154 1932","81050190 1932","81050192 1932","81050194 1932","81050196 1932","81050124 1932","81050126 1932","81050128 1932","8105012A 1932","8105012C 1932","8105012E 1932","81050130 1932","81050132 1932","81050134 1932","81050136 1932","810500E8 1932","8105010E 1932","8105010C 1932"],"options":null},"Replace Raw War with\\SPACE SHIP ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 094D","8105042E 0953","81050430 0953","81050432 0F0E","81050434 0953","81050436 0F0E","81050438 0899","8105043C 0953","8105043E 0899","81050440 0963","81050442 0963","81050400 0953","81050402 0953","81050404 0953","81050406 0953","81050408 0953","8105040A 0953","8105040C 0953","8105040E 0953","810500E8 0A75","810528F4 7223","810528F6 0119","81050150 0963","81050152 0963","81050190 0953","81050192 0953","81050194 0953","81050196 0963","8105010E 0F0E","8105010C 0F0E","81050124 0F10","81050126 0F10","81050128 0F10","8105012A 0F10","8105012C 0F10","8105012E 0F10","81050130 0F10","81050132 0F10","81050134 0F10","81050136 0F10","810500F8 0963","810500FA 0963","810500FC 0963","810500FE 0963","81050100 0963","81050102 0963","81052CE8 2CCA","81052CEC 0963"],"options":null},"Replace Raw War with\\TOKYO DOME":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["810528F4 7223","810528F6 0119","81050124 0100","81050126 0100","81050128 0100","8105012A 0100","8105012C 0100","8105012E 0100","81050130 0100","81050132 0100","81050134 0100","81050136 0100","8105010E 0999","81050400 03A5","81050402 0385","81050404 0385","81050406 0385","81050408 0385","8105040A 03A5","8105040C 03A5","8105040E 043F","81050430 043F","8105042C 03A5","81050430 21A5","81050432 0100","81050434 0000","81050436 2CFB","81050438 0899","8105043C 03AF","81050440 03AF","81050442 03A5","810500E8 24C3","81050444 0100","81050190 09EF","81050192 0000","81050194 09EF","81050196 2CFD"],"options":null},"Tables\\IN RING TABLE\\Part 1":{"note":"To Make the Table look broken Keep the Z Button press down, To make player stand on the Table, Stand next to it \u0026 Keep C-Right Pressed Down.Put all Parts on Together for this Cheat to work","data":["81052CF0 06E1","81052CF4 09F1","81052CF8 06E2","81052D00 09F1","81052D0C 06E3","81052D0E 06E4","81052D10 09EF","81052D12 09EF","81052D14 06E5","81052D16 06E6","81052D18 09EF","81052D1A 09EF","D1064880 0001","8115AFB0 432C","D1064880 0001","8115B308 432C","D1064880 2000","8115AFB0 42B4","D1064880 2000","8115B308 42B4","8116C330 0000","8116C332 0014","8116C334 0000","8116C336 0014","8116C374 4210","8116C376 C0B1","8116C378 432F","8116C37A 51DC","8116C37C 4210","8116C37E 92F1","8116C382 0800","8116C386 05A0","8116C38A 0800","8116C38C FFFF","8116C38E F3BC","8116C3E4 0000","8116C3E6 0015","8116C3E8 0000","8116C3EA 0015","8116C428 4210","8116C42A C0B1","8116C42C 432F","8116C42E 51DC","8116C430 4210","8116C432 92F1","8116C436 0800","8116C43A 05A0","8116C43E 0800","8116C440 FFFF","8116C442 F3BC","D1064880 2000","8116C378 42E0"],"options":null},"Tables\\IN RING TABLE\\Part 2":{"note":"To Make the Table look broken Keep the Z Button press down, To make player stand on the Table, Stand next to it \u0026 Keep C-Right Pressed Down.Put all Parts on Together for this Cheat to work","data":["D1064880 2000","8116C382 07E0","D1064880 2000","8116C38A 0680","D1064880 2000","8116C42C 42E0","D1064880 2000","8116C436 0820","D1064880 2000","8116C43E 0980","8116C498 0000","8116C49A 0017","8116C49C 0000","8116C49E 0017","8116C4DC 4210","8116C4DE C0B1","8116C4E0 432A","8116C4E2 51DC","8116C4E4 4210","8116C4E6 92F1","8116C4EA 0800","8116C4EE 05A0","8116C4F2 0800","8116C4F4 FFFF","8116C4F6 F3BC","8116C54C 0000","8116C54E 0018","8116C550 0000","8116C552 0018","8116C590 4210","8116C592 C0B1","8116C594 432A","8116C596 51DC","8116C598 4210","8116C59A 92F1","8116C59E 0800","8116C5A2 05A0","8116C5A6 0800","8116C5A8 FFFF","8116C5AA F3BC","D1064880 2000","8116C4E0 42E0","D1064880 2000","8116C4EA 07E0","D1064880 2000","8116C4F2 0680","D1064880 2000","8116C594 42E0","D1064880 2000","8116C59E 0820","D1064880 2000","8116C5A6 0980"],"options":null},"Tables\\MOVABLE TABLES\\Part 1":{"note":"You must use both parts for this cheat to work","data":["81052C24 06E1","81052C26 06E3","81052C2C 09F1","81052C2E 09EF","81052C30 06E2","81052C32 06E5","81052C38 09F1","81052C3A 09EF","81052C48 06E4","81052C4A 06E6","81052C50 09EF","81052C52 09EF","8116C3E4 0000","8116C3E6 0001","8116C3E8 0000","8116C3EA 0001","8116C498 0000","8116C49A 0003","8116C49C 0000","8116C49E 0003","8116C330 0000","8116C332 0000","8116C334 0000","8116C336 0000","D116C556 0000","8116C33A 0000","D116C33A 0000","8116C3EE 0000","D116C3EE 0000","8116C4A2 0000","D116C556 0001","8116C33A 0001","D116C33A 0001","8116C3EE 0001","D116C3EE 0001","8116C4A2 0001","D116C556 0002","8116C33A 0002","D116C33A 0002","8116C3EE 0002","D116C3EE 0002","8116C4A2 0002","D116C556 0003","8116C33A 0003","D116C33A 0003","8116C3EE 0003","D116C3EE 0003","8116C4A2 0003","D116C556 FFFF","8116C33A FFFF","D116C33A FFFF","8116C3EE FFFF","D116C3EE FFFF","8116C4A2 FFFF","D216C556 FFFF","81079B10 3F80","D1064886 2000","81079B10 3F81","D106488C 2000","81079B10 3F81","D1064892 2000","81079B10 3F81"],"options":null},"Tables\\MOVABLE TABLES\\Part 2":{"note":"You must use both parts for this cheat to work","data":["D116C33A FFFF","8116C382 0000","D116C382 0000","8116C386 0000","D116C386 0000","8116C38A 0000","D116C38A 0000","8116C38E 0000","D116C38E 0000","8116C436 0000","D116C436 0000","8116C43A 0000","D116C43A 0000","8116C43E 0000","D116C43E 0000","8116C442 0000","D116C442 0000","8116C4EA 0000","D116C4EA 0000","8116C4EE 0000","D116C4EE 0000","8116C4F2 0000","D116C4F2 0000","8116C4F6 0000","D116C594 42B4","D116C556 FFFF","8116C378 4335","D116C378 4335","8116C42C 4335","D116C42C 4335","8116C4E0 4335","D116C594 3DC7","D116C556 FFFF","8116C378 42B0","D116C378 42B0","8116C42C 42B0","D116C42C 42B0","8116C4E0 42B0","D1064880 2000","81079B10 3F81","D1079B10 3F81","D116C594 42B4","D116C556 FFFF","8116C378 42F0","D116C378 42F0","8116C42C 42F0","D116C42C 42F0","8116C4E0 42F0","D1079B10 3F81","8116C38A 0F00","D116C38A 0F00","8116C43E 0100","D116C594 3C93","8116C378 42B0","81052D18 0000","81052D1A 0000","D116C54C 0000","8116C54E 0018","D116C550 0000","8116C552 0018"],"options":null},"Tables\\Sabu Table":{"note":"Breakable/Fixable/Rebreakable/Refixable press Z to break, C-right + Cdown to fix","data":["8116C49A 000C","8116C49E 000C","8116C4DC 43CC","8116C4E0 42E6","8116C4E4 C2C5","8116C4EE 0800","8116C602 000C","8116C606 000C","8116C648 42E6","8116C644 43CC","8116C64C C314","81052C54 06E3","81052C5C 09EF","8116C6F8 43CC","8116C6FC 42F0","8116C700 C2F1","8116C70A 0400","8116C428 43CC","8116C430 C2D0","8116C42C 42F0","8116C43A 0C00","8116C6B6 0004","8116C6BA 0004","8116C3E6 0004","8116C3EA 0004","D1064880 2000","81005592 3F81","D1005592 3F81","8116C4EA 0F00","D1005592 3F81","8116C652 0100","D1005592 3F81","8116C4E0 4240","D1005592 3F81","8116C648 4240","D1064880 0005","81005CD4 3F83","D1005CD4 3F83","8116C4EA 0000","D1005CD4 3F83","8116C652 0000","D1005CD4 3F83","8116C4E0 42E6","D1005CD4 3F83","8116C648 42E6","D1005CD4 3F83","D1064880 2000","81005CD4 0000"],"options":null},"Ultimate Code\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF5E 0064"],"options":null},"Ultimate Code\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2B6 0064"],"options":null},"Ultimate Code\\Player 3":{"note":"","data":["D015A5D1 0015","8015B60E 0064"],"options":null},"Ultimate Code\\Player 4":{"note":"","data":["D015A5D1 0015","8015B964 0064"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B490 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B490 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B4A4 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B47C 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8106B4A4 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B47C 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B468 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B468 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B510 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B510 3DFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B564 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B53C 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B564 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B53C 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B528 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B528 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B610 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B610 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B624 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5FC 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B624 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5FC 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5E8 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5E8 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6D0 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6D0 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6E4 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6BC 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8006B6E4 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6BC 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6A8 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6A8 3FFF"],"options":null},"Z LADDER":{"note":"Press Z for the ladder to appear, sometimes there is an invisable ladder","data":["D1064880 2000","8116C768 0000","D1064880 2000","8116C76A 0019","D1064880 2000","8116C76C 0000","D1064880 2000","8116C76E 0019","D1064880 2000","8116C788 8104"],"options":null}},"4E69B487-FE18E290-C:45":{"Team 1 Scores 150 pts":{"note":"","data":["800A6689 0096"],"options":null},"Team 2 Scores 150 pts":{"note":"","data":["800A668B 0096"],"options":null}},"4EAA3D0E-74757C24-C:4A":{"Don't Hurt Mario\\Monsters":{"note":"","data":["A0339E27 0001"],"options":null},"Funny Mario Options\\Mario's Cap\\Off \u0026 in His Hand":{"note":"Here you can Choose Options with Mario with His Cap off \u0026 in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["80339E07 00??"],"options":{"Cap In Hand":"20","Flying Mario Cap In Hand":"28","Invisible Mario Cap In Hand":"22","Invisible Metal Mario Cap In Hand":"26","Metal Mario Cap In Hand":"24"}},"Funny Mario Options\\Mario's Cap\\On \u0026 An Extra in His Hand":{"note":"Here you can Choose Options with Mario with His Cap on \u0026 An Extra in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["80339E07 00??"],"options":{"Cap In Hand":"30","Flying Mario Cap In Hand":"38","Invisible Mario Cap In Hand":"32","Invisible Metal Mario Cap In Hand":"36","Metal Mario Cap In Hand":"34"}},"Have All\\175 Stars":{"note":"I have managed to put a have 175 Stars Option in for you,once the Code is activated, you will see it as a new option in Save Slot A.","data":["80207B0B 00FF","50000D02 0000","81207B0C FFFF"],"options":null},"Have All\\Maxed Out Coin Records For All Levels":{"note":"","data":["80207B25 00FF","81207B26 FFFF","81207B28 FFFF","81207B2A FFFF","81207B2C FFFF","81207B2E FFFF","81207B30 FFFF","81207B32 FFFF"],"options":null},"Have\\Debug Mode":{"note":"","data":["8032C658 00??"],"options":{"Off":"00","On":"01"}},"Have\\Level Select":{"note":"","data":["8032C64C 0001"],"options":null},"Infinite\\Energy \u0026 Breath":{"note":"","data":["80339EAE 0008"],"options":null},"Infinite\\Lives":{"note":"","data":["80339EAD 0064"],"options":null},"Mario's Cap\\Off Options":{"note":"Here you can Choose Options with Mario without His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["80339E07 00??"],"options":{"Flying Mario":"08","Invisible Flying Mario":"0A","Invisible Mario":"02","Invisible Metal Flying Mario":"0F","Mario No Cap":"01","Metal Flying Mario":"0D","Metal Mario":"04"}},"Mario's Cap\\On Options":{"note":"Here you can Choose Options with Mario with His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["80339E07 00??"],"options":{"Flying Mario":"19","Invisible Mario":"12","Invisible Metal Mario":"16","Metal Mario":"15"}},"Press GS for 255 Coins":{"note":"","data":["89339EA8 00FF"],"options":null},"Press L To Levitate":{"note":"Press L to levitate \u0026 Let go to land","data":["D0339C31 0020","81339E4C 4220","D0339E4D 0020","81339E0C 0300","D0339E4D 0020","81339E0E 0880"],"options":null}},"4F1E88F7-4A5A3F96-C:4A":{"Max HP":{"note":"","data":["812D71F8 03E7"],"options":null},"Max MP":{"note":"","data":["812D71FA 03E7"],"options":null},"Max Money":{"note":"","data":["811A70E9 0001","811A70EA 869F"],"options":null}},"4F48B0FD-8E7173F4-C:45":{"All Levels\\Infinite\\Energy":{"note":"","data":["800D5A9B 00FF"],"options":null},"All Levels\\Infinite\\Max Credits":{"note":"","data":["80075DDC 00FF"],"options":null},"All Levels\\Infinite\\Time":{"note":"","data":["800D5A97 0063"],"options":null},"All Levels\\Unlock All\\Levels - Options Menu":{"note":"","data":["80075DD6 FFFF","80075DD7 FFFF"],"options":null},"All Levels\\Unlock All\\Option Menu Items":{"note":"","data":["80075DD8 FFFF","80075DD9 FFFF"],"options":null},"Level\\0-0\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time and only use for that specific level Cheat","data":["8010BB0C 0000"],"options":null},"Level\\0-0\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8010BB2B 0001"],"options":null},"Level\\1-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801657DC 0000"],"options":null},"Level\\1-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801657FB 0001"],"options":null},"Level\\1-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCF9C 0000"],"options":null},"Level\\1-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCFBB 0001"],"options":null},"Level\\1-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801126EC 0000"],"options":null},"Level\\1-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8011270B 0001"],"options":null},"Level\\2-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BD29C 0000"],"options":null},"Level\\2-1\\Invincible":{"note":"","data":["801BD2BB 0001"],"options":null},"Level\\2-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B911C 0000"],"options":null},"Level\\2-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B913B 0001"],"options":null},"Level\\2-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7CEC 0000"],"options":null},"Level\\2-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7D0B 0001"],"options":null},"Level\\3-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801588EC 0000"],"options":null},"Level\\3-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8015890B 0001"],"options":null},"Level\\3-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B936C 0000"],"options":null},"Level\\3-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B938B 0001"],"options":null},"Level\\3-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801013CC 0000"],"options":null},"Level\\3-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["81100E08 C350"],"options":null}},"4F8AFC3A-F7912DF2-C:50":{"Have All Races":{"note":"","data":["81088756 FFFF"],"options":null},"Have All Tracks":{"note":"","data":["8108875A FFFF"],"options":null},"Infinite Credits":{"note":"","data":["8008D659 0005"],"options":null},"Unlock All Characters \u0026 Extra Cheats":{"note":"","data":["81088750 FFFF","81088752 FFFF"],"options":null}},"4FF5976F-ACF559D8-C:50":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2712 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE02F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802026F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE255 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FCB85 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFF6D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802027A5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DA0BD 0001"],"options":null}},"5001CF4F-F30CB3BD-C:45":{"Have All\\Characters Available":{"note":"","data":["810653C8 FFFF"],"options":null},"Have All\\Courts Available":{"note":"","data":["810653CC FFFF"],"options":null},"Press C-Down Easy Win Ring Shot - Time,Balls,Points":{"note":"Do Not use with Game Option","data":["D0066985 0004","80153527 0082","D0066985 0004","80153523 0082"],"options":null},"Press C-Down For Easy Win Ring Shot - Game":{"note":"Do Not use with Time,Balls,Points Option","data":["D0066985 0004","8015350B 0082"],"options":null},"Score\\Player 1":{"note":"","data":["8015344A 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}},"Score\\Player 2":{"note":"","data":["8015344B 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}},"Widescreen":{"note":"","data":["81033CA6 3FE4"],"options":null}},"503EA760-E1300E96-C:50":{"Access Options\\All Car Upgrades":{"note":"","data":["50000704 0000","801505DF 0003"],"options":null},"Access Options\\All Tracks":{"note":"","data":["80150602 001F","80150603 00FF"],"options":null},"Always Place 1st":{"note":"","data":["801502CB 0001"],"options":null},"Unlimited Time":{"note":"","data":["801509ED 0045"],"options":null}},"5129B6DA-9DEF3C8C-C:45":{"Dig-Dug\\Infinite\\Credits":{"note":"","data":["800FE67E 0063"],"options":null},"Dig-Dug\\Infinite\\Lives\\Player 1":{"note":"","data":["800FE709 0002"],"options":null},"Dig-Dug\\Infinite\\Lives\\Player 2":{"note":"","data":["800FE76B 0004"],"options":null},"Dig-Dug\\Score\\Player 1":{"note":"","data":["810FE704 9999"],"options":null},"Dig-Dug\\Score\\Player 2":{"note":"","data":["810FE768 9999"],"options":null},"Galaga\\Infinite\\Credits":{"note":"","data":["800D76A4 0063"],"options":null},"Galaga\\Infinite\\Lives\\Both Players":{"note":"","data":["800D7510 0002"],"options":null},"Galaxian\\Infinite\\Credits":{"note":"","data":["800CD3D0 0063"],"options":null},"Galaxian\\Infinite\\Lives":{"note":"","data":["800CD3AD 0003"],"options":null},"Galaxian\\Score\\Player 1":{"note":"","data":["810BCE7C 9999"],"options":null},"Galaxian\\Score\\Player 2":{"note":"","data":["810BC780 9999"],"options":null},"Ms Pac-Man\\Eat All Ghosts All The Time":{"note":"","data":["810BC100 0000","810BC102 0000","810BC12C 0000","810BC12E 0000","810BC158 0000","810BC15A 0000","810BC184 0000","810BC186 0000"],"options":null},"Ms Pac-Man\\High Score Modifier":{"note":"","data":["810BC1F8 9999"],"options":null},"Ms Pac-Man\\Infinite\\Credits":{"note":"","data":["800BBE4B 0063"],"options":null},"Ms Pac-Man\\Infinite\\Lives\\Player 2":{"note":"","data":["800BBE27 0004"],"options":null},"Ms Pac-Man\\Infinite\\Lives\\Player P1":{"note":"","data":["800BBE23 0004"],"options":null},"Ms Pac-Man\\Score Modifier\\Player 1":{"note":"","data":["810BC7E8 9999"],"options":null},"Ms Pac-Man\\Score\\Player 2":{"note":"","data":["810BC7EC 9999"],"options":null},"Pac-Man\\Eat All Ghosts All The Time":{"note":"","data":["810A8760 0000","810A8762 0000","810A878C 0000","810A878E 0000","810A87B8 0000","810A87BA 0000","810A87E4 0000","810A87E6 0000"],"options":null},"Pac-Man\\High Score":{"note":"","data":["810A86F8 9999"],"options":null},"Pac-Man\\Infinite\\Credits":{"note":"","data":["800A8817 0063"],"options":null},"Pac-Man\\Infinite\\Lives\\Player 1":{"note":"","data":["800BBE23 0004"],"options":null},"Pac-Man\\Infinite\\Lives\\Player 2":{"note":"","data":["800BBE27 0004"],"options":null},"Pac-Man\\Score\\Player 1":{"note":"","data":["810A86F0 9999"],"options":null},"Pac-Man\\Score\\Player 2":{"note":"","data":["810A86F4 9999"],"options":null},"Pole Position\\Infinite Time":{"note":"","data":["8010A243 0063"],"options":null},"Pole Position\\Score":{"note":"","data":["81107BF8 9999"],"options":null}},"514B6900-B4B19881-C:4A":{"Beta Bottles Revenge Mode":{"note":"Bottles Revenge is a Beta mode from Banjo Tooie that the RWP team recently uncovered after an extraordinary amount of effort. Bottles the Spirit transforms into Bottles the Devil and posses enemies nearby and allows a second player hooked up to Pad 2 to play as that Posses character to try to foil Banjos Plans. As player one goes about its business, player two uses every enemy nearby to try to nab Banjo and take away some life. This mode is incredible, and you can control almost every enemy in the game: slot machines, flying creatures, uggers, zubbas...and this is just the beginning. (Congrats Rare Witch Project)","data":["801255C2 0001","80080881 0002"],"options":null},"Infinite\\Air":{"note":"","data":["80125222 42C8"],"options":null},"Infinite\\Energy\\Banjo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","8011591F 000A","80115920 000A"],"options":null},"Infinite\\Energy\\Banjo and Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","81115A04 0A0A"],"options":null},"Infinite\\Energy\\Bee":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","80115913 000A","80115914 000A"],"options":null},"Infinite\\Energy\\Detonator":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","8111592E 0A0A"],"options":null},"Infinite\\Energy\\Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","81115922 0A0A"],"options":null},"Infinite\\Energy\\Mumbo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","81115928 0A0A"],"options":null},"Infinite\\Energy\\Snowball":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","80115907 0005"],"options":null},"Infinite\\Energy\\Stony":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","80115919 000A","8011591A 000A"],"options":null},"Infinite\\Energy\\Submarine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","80115925 000A","80115926 000A"],"options":null},"Infinite\\Energy\\T-Rex Baby":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","8011593F 000A","80115940 000A"],"options":null},"Infinite\\Energy\\Washing Machine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","81115916 0A0A"],"options":null},"Instant Warp\\Options\\Cauldron Keep":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"5D Cauldron Keep":"01","5E The gatehouse":"01","5F Tower of Tragedy Quiz":"01","60 Gun chamber":"01","6A Gun room still":"01","7B Crazy Castle Stockade balloon burst multi":"01","7C Crazy Castle Stockade Jump the hoops multi":"01","7D Grunty Industries packing game":"01","80 Colosseum kickball arena":"01","86 Dodgems":"01"}},"Instant Warp\\Options\\Cloud Cuckoo Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"36 Cloud Cuckoo Land 1":"01","37 Inside the trashcan":"01","38 Inside the cheesewedge":"01","39 Zubba's nest":"01","3A Central cavern":"01","3D Inside the pot o gold":"01","3E Mumbo's skull":"01","3F Mingy jongo's skull":"01","40 Humba wumba's wigwam":"01","61 Cloud Cuckoo Land 2":"01","85 Trash can mini":"01","88 Zubba's nest multi":"01"}},"Instant Warp\\Options\\Glitter Gulch Mine":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"26 Water supply pipe":"01","63 Ordnance Storage entrance":"01","64 Ordnance Storage game":"01","65 Ordnance Storage game Multi":"01","6F Testing":"01","70 Testing":"01","71 Mumbo's skull":"01","C7 Mine":"00","CA Fuel depot":"00","CB Crushing shed":"00","CC Flooded caves":"00","CD Water storage":"00","CE Waterfall cavern":"00","CF Power hut basement":"00","D0 Chuffy's cab":"00","D1 Inside chuffy's boiler boss":"00","D2 Gloomy caverns":"00","D3 Generator caverns":"00","D4 Power hut":"00","D5 Wumba's wigwam":"00","D7 Train station":"00","D8 Prospectors hut":"00","D9 Mumbo's hut":"00","DA Toxic gas cave":"00","DB Canary cave":"00","DC Ordnance storage":"00","E9 Humba":"00"}},"Instant Warp\\Options\\Grunty Industries":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"00 Outside":"01","01 Inside":"01","02 Train station":"01","03 Workers quarters":"01","04 Trash compactor":"01","05 Elevator shaft":"01","06 Floor 2":"01","07 Floor 2 \"electromagnet chamber\"":"01","08 Floor 3":"01","09 Floor 3 \"boiler plant\"":"01","0A Floor 3 \"packing room\"":"01","0B Floor 4":"01","0C Floor 4 \"cable room\"":"01","0D Floor 4 \"quality control\"":"01","0E Floor 5":"01","0F Basement":"01","10 Basement \"repair depot":"01","11 Basement \"waste disposal\"":"01","25 Water supply pipe":"01","62 Floor 4 \"clinkers cavern\"":"01","72 Mumbo's skull":"01","87 Sewer entrance":"01"}},"Instant Warp\\Options\\Hailfire Peaks":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"27 Lava side":"01","28 Icy side":"01","29 Lava train station":"01","2A Ice train station":"01","2B Chilli billi":"01","2C Chilly willy":"01","2D Colosseum kickball stadium lobby":"01","31 Boggy's igloo":"01","32 Icicle grotto":"01","33 Inside the volcano":"01","68 Icy side still":"01"}},"Instant Warp\\Options\\Isle O Hags":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"4F Wooded Hollow":"01","50 Heggy's egg shed":"01","51 Jiggywiggy's temple":"01","52 Plateau":"01","53 Plateau \"Honey B's Hive\"":"01","54 Pine Grove":"01","55 Cliff top":"01","56 Cliff top Mumbo's skull":"01","5A wasteland":"01","5B inside another digger tunnel":"01","5C Quagmire":"01"}},"Instant Warp\\Options\\Jinjo Village":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"42 Jinjo Village":"01","43 Bottles house":"01","44 King Jingalings throne room":"01","45 Green Jinjo's House":"01","46 Black Jinjo's House":"01","47 Yellow Jinjo's House":"01","48 Blue Jinjo's House":"01","4A Brown Jinjo's House":"01","4B Orange Jinjo's House":"01","4C Purple Jinjo's House":"01","4D Red Jinjo's House":"01","4E White Jinjo's House":"01"}},"Instant Warp\\Options\\Jolly Roger's Lagoon":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"81 sea bottom cavern":"01","82 submarine multi":"01","A7 Jolly Roger's Lagoon":"01","A8 Atlantis":"01","A9 Seabottom":"01","ED Jolly's":"00","EE Pawno's emporium":"00","EF mumbo's skull":"00","F4 Ancient Swimming Baths":"00","F6 Electric Eels lair":"00","F7 Seaweed Sanctum":"00","F8 Inside the big fish":"00","FA temple of the fishes":"00","FF Blubber's wave race hire":"00"}},"Instant Warp\\Options\\Mayahem Temple":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"66 Multi":"01","67 Still":"01","77 Targitzan's Slighty Sacred Temple":"01","78 Inside Targitzans Temple":"01","79 Targitzan Temple Lobby":"01","7A Targitzan's Temple Boss":"01","7F Mayan Kickball Arena":"01","B6 Humba's Wigwam":"00","B7 Mumbo's skull":"00","B8 The Temple":"00","B9 Prison Compound":"00","BC Code chamber":"00","C4 Jade Snake Grove":"00","C5 Treasure Chamber":"00","C6 Kickball Arena":"00","C8 Kickball Arena":"00","C9 Kickball Arena":"00"}},"Instant Warp\\Options\\Not sure":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"21 Inside Chuffy's wagon":"01","34 Mumbo's Skull":"01","35 Humba Wumba's wigwam 1":"01","41 Inside the digger tunnel":"01","43 Bottles house":"01","57 Humba Wumba's wigwam 2":"01","69 Bottles house still":"01","8A HAG Inside":"01","9A HAG1 Final Boss":"01","9B Jingalings Zombified Palace":"01","A6 Smuggler cavern":"01","F9 Mr Patch":"00","FC Lord woo fak fak":"00"}},"Instant Warp\\Options\\Spiral Mountain":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"73 Banjo's house":"01","AD Grunty's Old Lair":"00","AE Behind The Waterfall":"00","AF Top Of Castle":"00"}},"Instant Warp\\Options\\Terrydacty Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"12 Terrydacty Land":"01","13 Terry's nest":"01","14 Train station":"01","15 Oogle boogles cave":"01","16 Inside the mountain":"01","17 River passage":"01","18 Styracosaurus family cave":"01","19 Unga bunga's cave":"01","1A Stomping plains":"01","1B Bonfire caverns":"01","1E Humba's Wigwam":"01","23 Inside chompa's belly":"01","83 Chompa's belly multi":"01"}},"Instant Warp\\Options\\Witchy World":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"24 Saucer of Peril":"01","3B Crazy castle stockade \"sop\"":"01","3C Star spinner \"sop\"":"01","76 Mumbo's skull":"01","D6 Witcy World":"00","DD Dodgem dome lobby":"00","DE Dodgem challenge \"1 vs 1\"":"00","DF Dodgem challenge \"2 vs 1\"":"00","E0 Dodgem challenge \"3 vs 1\"":"00","E1 Crazy castle stockade":"00","E2 Crazy castle lobby":"00","E3 Crazy castle pump room":"00","E4 Balloon burst game":"00","E5 Hoop hurry game":"00","E6 Star spinner":"00","E7 The inferno":"00","EA Cave of horrors":"00","EB Haunted cavern":"00","EC Train station":"00"}},"Multi-Player\\Everyone Infinite All Eggs Multiplayer":{"note":"All blaster modes specifically.[ Thanks retroben, awesome work on this!]","data":["810E5F38 0C04","810E5F3A 5A80","81116A00 3C08","81116A02 8008","81116A04 8108","81116A06 3970","81116A08 1100","81116A0A 0010","81116A0C 0000","81116A0E 0000","81116A10 3C08","81116A12 8008","81116A14 8D08","81116A16 3970","81116A18 0008","81116A1A 4200","81116A1C 0008","81116A1E 4202","81116A20 0008","81116A22 4080","81116A24 3C04","81116A26 8000","81116A28 0104","81116A2A 4020","81116A2C 3C04","81116A2E 2406","81116A30 2484","81116A32 0064","81116A34 AD04","81116A36 31C4","81116A38 3C04","81116A3A 2408","81116A3C 2484","81116A3E FFFE","81116A40 AD04","81116A42 31CC","81116A44 3C04","81116A46 8013","81116A48 8C84","81116A4A CF94","81116A4C 0802","81116A4E 1DFE","81116A50 0000","81116A52 0000"],"options":null},"Multi-Player\\Infinite Health\\Player 1":{"note":"","data":["8012F701 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 2":{"note":"","data":["8012F705 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 3":{"note":"","data":["8012F709 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 4":{"note":"","data":["8012F70D 0064"],"options":null},"Play As":{"note":"To use this cheat, put the cheat on, then press L as you walk through a door to become that chosen character","data":["D0080845 0020","801211FC 00??"],"options":{"Banjo":"0A","Banjo and Kazooie":"01","Bee":"06","Detonator":"0F","Golden Goliath":"0E","Kazooie":"0B","Mumbo":"0D","Snowball":"02","Stony":"08","Submarine":"0C","T-rex baby":"12","T-rex daddy":"13","Truck":"10","Washing machine":"07"}}},"5168D520-CA5FCD0D-C:4A":{"Have Zero Time all Levels":{"note":"","data":["50000B04 0000","81386B44 3000"],"options":null},"Infinite\\Air":{"note":"","data":["81386ACE 0E10"],"options":null},"Infinite\\Always Have All Jinjos":{"note":"","data":["80386ABB 00FF"],"options":null},"Infinite\\Eggs":{"note":"","data":["80386AA7 00FF"],"options":null},"Infinite\\Gold Feathers":{"note":"","data":["80386AB3 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["80386AC3 0008","80386AC7 0008"],"options":null},"Infinite\\Jiggies":{"note":"","data":["80386B0B 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["80386ACB 00FF"],"options":null},"Infinite\\Mumbo Tokens":{"note":"","data":["80386B07 00FF"],"options":null},"Infinite\\Notes":{"note":"Just collect one Note to Have 255 Notes in all Worlds.","data":["80386B32 00FF","80386AA2 0001"],"options":null},"Infinite\\Red Feathers":{"note":"","data":["80386AAF 00FF"],"options":null}},"519EA4E1-EB7584E8-C:4A":{"Have All\\Boards":{"note":"","data":["8108C9C4 0003","8108C9C6 FFFF"],"options":null},"Have All\\Characters":{"note":"","data":["8108C9B8 07FF"],"options":null},"Have All\\Difficulties":{"note":"","data":["8108C9B0 0700"],"options":null},"Have All\\Tracks":{"note":"","data":["8108C9BC BFFE"],"options":null},"Low Timer":{"note":"","data":["8008C8A4 0000","8008C8A6 0000"],"options":null},"Max\\50000 Stunt Points":{"note":"","data":["8108C978 C350"],"options":null},"exhalatio audio hack":{"note":"","data":["81052760 AD99"],"options":null}},"51D29418-D5B46AE3-C:50":{"Access All In-Game Cheats":{"note":"","data":["81118E9A 0001"],"options":null},"Activate All In-Game Cheats":{"note":"","data":["50000D02 0000","81118E82 0101"],"options":null},"All Silver \u0026 Gold Coins (Circuit - Using C/P)":{"note":"Circuit Mode - Using Controller Pack","data":["50000660 0000","811C542C FFFF"],"options":null},"All Silver \u0026 Gold Coins (Single Race + Practice Mode)":{"note":"Single, Practice \u0026 Circuit Mode","data":["50000660 0000","8116375C FFFF"],"options":null},"All Silver \u0026 Gold Coins (Stunt Mode)":{"note":"Stunt Mode","data":["50000440 0000","81163BBC FFFF"],"options":null},"Always 1st":{"note":"","data":["80177D4E 0000"],"options":null},"Easy Difficulty level":{"note":"","data":["80177A3C 0000"],"options":null},"Extended Time In Battle \u0026 Stunt Mode To 2.05 Hours":{"note":"","data":["811633BA 457C","811636EE 4514"],"options":null},"Laps To Race":{"note":"","data":["81177A18 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Max Points Stunt Mode":{"note":"","data":["81177A55 3AFF","81177A57 F3FA"],"options":null},"Max Race Points":{"note":"","data":["8117CE22 03E7"],"options":null},"Number Of Drones In Race":{"note":"","data":["81163240 00??"],"options":{"1 Drone":"01","2 Drones":"02","3 Drones":"03","4 Drones":"04","5 Drones":"05","6 Drones":"06","7 Drones":"07","8 Drones":"08","9 Drones":"09"}},"Stunt Wings All Modes":{"note":"Where Wings Are Available Press D-Pad Up On Wing Select","data":["D017055A 0004","50000C02 0000","811139D0 0202"],"options":null},"Stunt Wings Circuit Mode":{"note":"Press D-Pad Up On Wing Select","data":["D017055A 0004","50000C02 0000","801756A1 0202"],"options":null}},"52F78805-8B8FCAB7-C:45":{"Always Win Judge's Decision\\Player 1":{"note":"","data":["8020B777 FFFF","802098AF 0000"],"options":null},"Always Win Judge's Decision\\Player 2":{"note":"","data":["802098AF FFFF","8020B777 0000"],"options":null},"Enable Boro":{"note":"","data":["80307349 0001"],"options":null},"Have 1 Star\\Abdul":{"note":"","data":["80307353 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["8030734F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80307352 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80307351 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80307354 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80307350 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["8030734E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80307355 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80307356 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["802098A1 0000","802047C3 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802047C7 0000","8020B769 0000"],"options":null},"Level Select":{"note":"","data":["8022A84C 00??"],"options":{"Blue Hell Mountain":"0C","Coliseum":"04","Desert":"01","Fire Mountain":"00","Highlands":"02","Hong Kong":"03","Joker's Room":"0B","Jungle":"05","Ninja Room":"06","Observation":"09","Palace":"0D","Pasture":"0A","Suspension Bridge":"07"}},"Play As\\Player 1":{"note":"","data":["802EF622 00??"],"options":{"Abdul":"05","Bob":"01","Boro":"08","Joker":"0B","Leon":"04","Meiling":"03","Ninja":"06","No Clue":"0D","Pierre":"02","Ryuji":"00","The Master":"0C","Tomahawk":"07","Ushi":"0A","Valerie":"09"}},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EF67B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0209757 0000","80209757 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020B61F 0000","8020B61F 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810ADBDC 3F80"],"options":null}},"5306CF45-CBC49250-C:45":{"Car Upgrades\\'63 Muscle Car":{"note":"","data":["8015053F 0005"],"options":null},"Car Upgrades\\All-Terrain Vehicle":{"note":"","data":["8015054F 0004"],"options":null},"Car Upgrades\\Devastator":{"note":"","data":["80150547 0005"],"options":null},"Car Upgrades\\Italia P69":{"note":"","data":["8015054B 0005"],"options":null},"Car Upgrades\\La Bomba":{"note":"","data":["80150543 0005"],"options":null},"Car Upgrades\\Police Car":{"note":"","data":["80150557 0004"],"options":null},"Car Upgrades\\School Bus":{"note":"","data":["80150553 0004"],"options":null},"Infinite Time":{"note":"","data":["8015094D 0095"],"options":null},"Play Level Modifier":{"note":"","data":["80150963 00??"],"options":{"Appalachia":"0C","Arizona":"07","Beverly Hills":"04","Chicago":"0A","Cruise The USA":"0E","Death Valley":"06","Golden Gate Park":"00","Grand Canyon":"08","Indiana":"0B","Iowa":"09","LA Freeway":"05","Redwood Forest":"03","San Francisco":"01","US 101":"02","Washington DC":"0D"}},"Player 1\\Always First Place":{"note":"","data":["8015022B 0001"],"options":null},"Player 1\\Always Have Fastest Car":{"note":"","data":["8015021A 0001"],"options":null},"Player 1\\Gearbox Type Modifier":{"note":"","data":["80150213 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 1\\Lights \u0026 Sirens For Police Car \u0026 School Bus P1":{"note":"","data":["8115053A 0001","8114E38A 0001"],"options":null},"Player 2\\Always First Place":{"note":"","data":["801505C7 0001"],"options":null},"Player 2\\Always Have Fastest Car":{"note":"","data":["801505B6 0001"],"options":null},"Player 2\\Gearbox Type Modifier":{"note":"","data":["801505AF 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 2\\Lights \u0026 Sirens For Police Car \u0026 School Bus P2":{"note":"","data":["811508D6 0001","8114E3A2 0001"],"options":null},"Stop Elapsed Time And No Traffic":{"note":"","data":["80150949 0000"],"options":null}},"5326696F-FE9A99C3-C:45":{"Have Alien Artifact":{"note":"","data":["8004DC5F 0001"],"options":null},"Infinite Ammo All Weapons":{"note":"","data":["50001102 0000","81048146 8000"],"options":null},"Infinite\\Greece":{"note":"","data":["81052B18 0098","81052B1A 967F"],"options":null},"Infinite\\Health":{"note":"","data":["810DDCEC 0258"],"options":null},"Item Modifier":{"note":"","data":["8004DC4F ????"],"options":{"All Items":"FFFF","Crank":"0040","Hangar Key":"0400","Heirglyph Map Piece":"0100","Howitzer Shells":"0002","Nothing":"0000","Windmill Cog":"0080"}},"Level Select":{"note":"","data":["80047F93 00??"],"options":{"America":"03","Comet":"05","Greece":"01","Java":"02","Siberia":"04"}},"No Humans Killed":{"note":"","data":["8104816A 0000"],"options":null},"Press L To Walk Over Water, Climb Hills":{"note":"","data":["D00475D9 0020","8104DCD2 0808"],"options":null},"Sixty Frames WIP":{"note":"Too fast but looks nice I guess.","data":["8001B48F 0004","8001B497 0004","8001B49F 0004","8001B4A7 0004","8001B4AF 0004"],"options":null},"Weapon Select\\1st Position":{"note":"","data":["80048138 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\2nd Position":{"note":"","data":["80048139 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\3rd Position":{"note":"","data":["8004813A 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\4th Position":{"note":"","data":["8004813B 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\5th Position":{"note":"","data":["8004813C 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\6th Position":{"note":"","data":["8004813D 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\7th Position":{"note":"","data":["8004813E 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\8th Position":{"note":"","data":["8004813F 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}}},"5354631C-03A2DEF0-C:45":{"All Equipment Upgrades":{"note":"","data":["801EF6DD 0023","811EF72A 201B","801EF6BC 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03E6B3B 0000","801EF672 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801EF6F2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801EF6F3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801EF6F4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801EF6F5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801EF6F6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801EF6F7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801EF6E5 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801EF6EB 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801EF6F1 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Fight Demo Majora's Mask":{"note":"With this code,load the game \u0026 put the cheat on. then press start to apear in the Demo mode.","data":["8016A718 0020"],"options":null},"Fog\\Blue":{"note":"","data":["80166108 0020"],"options":null},"Fog\\Pink":{"note":"","data":["8016610C 0020"],"options":null},"Fog\\Yellow":{"note":"","data":["80166110 0020"],"options":null},"Have\\All Masks":{"note":"","data":["801EF6F8 003E","801EF6F9 0038","801EF6FA 0047","801EF6FB 0045","801EF6FC 0040","801EF6FD 0032","801EF6FE 003A","801EF6FF 0046","801EF700 0039","801EF701 0042","801EF702 0048","801EF703 0033","801EF704 003C","801EF705 003D","801EF706 0037","801EF707 003F","801EF708 0036","801EF709 0034","801EF70A 0043","801EF70B 0041","801EF70C 003B","801EF70D 0044","801EF70E 0049","801EF70F 0035"],"options":null},"Have\\All Quest Status Items":{"note":"","data":["801EF72D 0005","811EF72E F7CF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801EF6E2 0002"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801EF6E3 0003"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801EF6E4 0004"],"options":null},"Have\\Bombchu":{"note":"","data":["801EF6E7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801EF6E6 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801EF6E9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801EF6E8 0008"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801EF6F0 0010"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801EF6E1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801EF6EF 000F"],"options":null},"Have\\Item Modifier":{"note":"","data":["801EF6F0 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\Lens of Truth":{"note":"","data":["801EF6EE 000E"],"options":null},"Have\\Magic Beans":{"note":"","data":["801EF6EA 000A"],"options":null},"Have\\Ocarina of Time":{"note":"","data":["801EF6E0 0000"],"options":null},"Have\\Pictograph":{"note":"","data":["801EF6ED 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801EF6EC 000C"],"options":null},"Infinite\\Health":{"note":"","data":["811EF6A6 0140"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811EF6A4 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"","data":["801EF711 0063","801EF716 0063","801EF717 0063","801EF718 0063","801EF719 0063","801EF71A 0063","801EF71C 0063","801EF71D 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801EF6A9 0060","811EF6B0 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811EF6AA 03E7"],"options":null},"Maximum Visibility":{"note":"","data":["80166118 0020"],"options":null},"Play As":{"note":"","data":["801EF690 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03E6B3B 0020","813FFE18 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You have been warned.","data":["801EF6BC 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01FB876 0008","811EF686 FFFD","D01FB876 0004","811EF686 0000","D01FB876 0002","811EF686 FFFE"],"options":null},"Use C-Buttons Anywhere":{"note":"This code allows you to use C-Button Items where you normally can't use them.","data":["811F3588 0000","811F358A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["D03E6B3A 0000","803FF395 0001","813FF39A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}},"Widescreen":{"note":"","data":["8113F834 3C07","8113F836 3FE3"],"options":null}},"535DF3E2-609789F1-C:4A":{"99 Points":{"note":"","data":["801CC273 0063"],"options":null},"Always First Place":{"note":"","data":["801C386F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801C3B53 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801C3B2E 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801C3997 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801C3FBA 0005","801C425A 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801C399F 0000"],"options":null},"Super Speed":{"note":"","data":["801C3997 0005","D0155221 0010","801C3997 0020"],"options":null}},"53D440E7-7519B011-C:45":{"Alt Sixty Frames":{"note":"A friend informed me this didn't freeze.","data":["80079A2A 0003"],"options":null},"Boss Cannot Move\\Dino":{"note":"","data":["811DFCF4 44A0"],"options":null},"Boss Cannot Move\\Octo":{"note":"","data":["811E045C 44A0"],"options":null},"Enable All Cheats":{"note":"Go into Options \u0026 then Magic Codes. Then Code list to turn off \u0026 on what you want.","data":["50000401 0000","810DFD9C FFFF"],"options":null},"Have All\\50 Bananas\\Ancient Lake":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E32CD 0032"],"options":null},"Have All\\50 Bananas\\Boulder Canyon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E61ED 0032"],"options":null},"Have All\\50 Bananas\\Crescent Island":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3A2D 0032"],"options":null},"Have All\\50 Bananas\\Darkmoon Caverns":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E5D0D 0032"],"options":null},"Have All\\50 Bananas\\Everfrost Peak":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4F5D 0032"],"options":null},"Have All\\50 Bananas\\Fossil Canyon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E676D 0032"],"options":null},"Have All\\50 Bananas\\Frosty Village":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E5F4D 0032"],"options":null},"Have All\\50 Bananas\\Greenwood Village":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4AAD 0032"],"options":null},"Have All\\50 Bananas\\Haunted Woods":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4A1D 0032"],"options":null},"Have All\\50 Bananas\\Hot Top Volcano":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E462D 0032"],"options":null},"Have All\\50 Bananas\\Jungle Falls":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E44CD 0032"],"options":null},"Have All\\50 Bananas\\Pirate Lagoon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E295D 0032"],"options":null},"Have All\\50 Bananas\\Snowball Valley":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E49FD 0032"],"options":null},"Have All\\50 Bananas\\Spacedust Alley":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E654D 0032"],"options":null},"Have All\\50 Bananas\\Spaceport Alpha":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3C6D 0032"],"options":null},"Have All\\50 Bananas\\Star City":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E578D 0032"],"options":null},"Have All\\50 Bananas\\Treasure Caves":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E371D 0032"],"options":null},"Have All\\50 Bananas\\Walrus Cove":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4A7D 0032"],"options":null},"Have All\\50 Bananas\\Whale Bay":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3AFD 0032"],"options":null},"Have All\\50 Bananas\\Windwill Plains":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E9BBD 0032"],"options":null},"Have All\\99 Balloons":{"note":"","data":["810DFD9A FFFF","801FCBED 0063"],"options":null},"Have All\\Amulets":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FC9E6 FFFF"],"options":null},"Have All\\Keys":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FC9D8 FFFF"],"options":null},"Have All\\Levels Completely Finished":{"note":"","data":["50000904 0000","801FCAF7 00FF","801FCB1F 00FF","801FCB27 00FF","50000404 0000","801FCB2F 00FF","801FCB4F 00FF","50000804 0000","801FCB53 00FF"],"options":null},"Have All\\Silver Coins\\Ancient Lake":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E34AA 0008"],"options":null},"Have All\\Silver Coins\\Boulder Canyon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E63CA 0008"],"options":null},"Have All\\Silver Coins\\Crescent Island":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E3C0A 0008"],"options":null},"Have All\\Silver Coins\\Everfrost Peak":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E513A 0008"],"options":null},"Have All\\Silver Coins\\Fossil Canyon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E694A 0008"],"options":null},"Have All\\Silver Coins\\Frosty Village":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E612A 0008"],"options":null},"Have All\\Silver Coins\\Greenwood Village":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4C8A 0008"],"options":null},"Have All\\Silver Coins\\Haunted Woods":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4BFA 0008"],"options":null},"Have All\\Silver Coins\\Hot Top Volcano":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E480A 0008"],"options":null},"Have All\\Silver Coins\\Jungle Falls":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E513A 0008"],"options":null},"Have All\\Silver Coins\\Pirate Lagoon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E2B3A 0008"],"options":null},"Have All\\Silver Coins\\Snowball Valley":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4BDA 0008"],"options":null},"Have All\\Silver Coins\\Treasure Caves":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E38FA 0008"],"options":null},"Have All\\Silver Coins\\Walrus Cove":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4C5A 0008"],"options":null},"Have All\\Silver Coins\\Whale Bay":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E3CDA 0008"],"options":null},"Have All\\Silver Coins\\Windmill Plains":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E9D9A 0008"],"options":null},"Have All\\The pieces of the TT thing":{"note":"","data":["801FC9E6 0004"],"options":null},"Have All\\Trophies":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FC9DE FFFF"],"options":null},"Infinite\\Power Ups\\Ancient Lake":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E6A2B 0010"],"options":null},"Infinite\\Power Ups\\Boulder Canyon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E8D4B 0010"],"options":null},"Infinite\\Power Ups\\Crescent Island":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E718B 0010"],"options":null},"Infinite\\Power Ups\\Darkmoon Caverns":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E96AB 0010"],"options":null},"Infinite\\Power Ups\\Everfrost Peak":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E871B 0010"],"options":null},"Infinite\\Power Ups\\Fossil Canyon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E9ECB 0010"],"options":null},"Infinite\\Power Ups\\Frosty Village":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E96A6 0010"],"options":null},"Infinite\\Power Ups\\Greenwood Village":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E820B 0010"],"options":null},"Infinite\\Power Ups\\Haunted Woods":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E817B 0010"],"options":null},"Infinite\\Power Ups\\Hot Top Volcano":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E477B 0010"],"options":null},"Infinite\\Power Ups\\Jungle Falls":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E45BB 0010"],"options":null},"Infinite\\Power Ups\\Pirate Lagoon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E54B6 0010"],"options":null},"Infinite\\Power Ups\\Snowball Valley":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E815B 0010"],"options":null},"Infinite\\Power Ups\\Space Dust Alley":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E904B 0010"],"options":null},"Infinite\\Power Ups\\Spaceport Alpha":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E676B 0010"],"options":null},"Infinite\\Power Ups\\Starcity":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E8EEB 0010"],"options":null},"Infinite\\Power Ups\\Treasure Cove":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E6E7B 0010"],"options":null},"Infinite\\Power Ups\\Walrus Cove":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E81DB 0010"],"options":null},"Infinite\\Power Ups\\Whale Bay":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E665B 0010"],"options":null},"Infinite\\Power Ups\\Windmill Plains":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801EC6BB 0010"],"options":null},"Sixty Frames":{"note":"May freeze at some points,physics can get wonky with slopes on both codes","data":["80079A2B 0003"],"options":null},"Widescreen":{"note":"","data":["81066006 3FE3","81066156 3FE3","810661BE 3FE3","81126174 3FE3"],"options":null}},"53ED2DC4-06258002-C:50":{"Always 1st":{"note":"","data":["80121C8C 0001","80125489 0001"],"options":null},"Enable In-Game cheat Menu \u0026 Cheats":{"note":"Here you can Activate the IN-Built Cheats Menu. At the Front Screen Just Press C-Button Right.This will open up All Tracks \u0026 Characters In Free Play \u0026 Time Attack. Also In A Race, Press The Start/Pause button to Access the In-Cheat-Menu Option.You can also choose how many Pod's Racers are in the Race \u0026 also how many Laps are in the Race in Free Play \u0026 Time Attack","data":["810A0D27 000A","810A0D2A FFFF"],"options":null},"Have All Tracks Completed":{"note":"","data":["8111CB0A FFFF","8111CB0C 3FFF","8111CB0E 3FFF","8111CB10 3FFF","8111CB12 00FF"],"options":null},"Infinite Truguts":{"note":"","data":["8111CB1A FFFF","8111CB18 7FFF"],"options":null},"No Damage":{"note":"If when Racing Your Pod Over heats \u0026 bursts into flames Press \"R\" \u0026 you will Repair the Damage.","data":["800AA5D7 0001"],"options":null},"Unlock All Tracks \u0026 Characters":{"note":"When using Unlock All Tracks \u0026 Characters For can to pick \u0026 choose what ever you want to play As \u0026 where ;)","data":["8011CB08 00FF","8011CB09 00FF","8011CB0B 00FF","8111CB08 FFFF","8111C80A FFFF","8011CB14 007D","8111CB16 FFFF"],"options":null}},"54310E7D-6B5430D8-C:50":{"Always 1st\\Player 1":{"note":"","data":["810A9248 0001"],"options":null},"Freeze Checkpoint Timer":{"note":"","data":["810CE1D2 BCCC"],"options":null},"Infinite Auto Pilot\\AG Systems\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BCE47 005B"],"options":null},"Infinite Auto Pilot\\Auricom\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC1E7 005B"],"options":null},"Infinite Auto Pilot\\Direx\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC817 005B"],"options":null},"Infinite Auto Pilot\\Feisar 1\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["811BC4FE 005B"],"options":null},"Infinite Auto Pilot\\Piranah\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC817 005B"],"options":null},"Weapon Select\\AG Systems":{"note":"","data":["811BC1DE ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Auricom":{"note":"","data":["811BCE3E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Direx":{"note":"","data":["811BC80E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Feisar 1":{"note":"","data":["811BC4F6 ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Piranah":{"note":"","data":["811BC80E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"[In-Game Cheat Unlock]\\Cyclone Weapon":{"note":"","data":["800924C4 00??"],"options":{"Off":"00","On":"01"}},"[In-Game Cheat Unlock]\\Infinite Ammo\\Player 1":{"note":"","data":["80091254 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Ammo\\Player 2":{"note":"","data":["80092970 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Shield Energy\\Player 1":{"note":"","data":["80091256 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Shield Energy\\Player 2":{"note":"","data":["80092972 0001"],"options":null},"[In-Game Cheat Unlock]\\[Ultimate Unlock All]":{"note":"This Unlocks All Levels, Tracks, Velocitar and Super Combo, Piranha 2 Ship, Cyclone Weapons Power Up and all 28 Gold Awards unlocked","data":["80091255 0001","8009125C 0020"],"options":null}},"55D4C4CE-7753C78A-C:45":{"Add\\Building":{"note":"","data":["8006A1C0 0001"],"options":null},"Add\\Satellite":{"note":"","data":["8006A1C3 0001"],"options":null},"Have\\All\\Levels Unlocked \u0026 Completed For Americans":{"note":"","data":["8006A1F0 0011"],"options":null},"Have\\All\\Levels Unlocked \u0026 Completed For Black Dogs":{"note":"","data":["8006A1F3 000A"],"options":null},"Have\\All\\Levels Unlocked \u0026 Completed For Soviets":{"note":"","data":["8006A1F1 0008"],"options":null},"Have\\All\\Missions Open And Complete For Americans":{"note":"","data":["8006A1EC 0011"],"options":null},"Have\\All\\Missions Open And Complete For Black Dogs":{"note":"","data":["8006A1EF 000A"],"options":null},"Have\\All\\Missions Open And Complete For Soviets":{"note":"","data":["8006A1ED 0008"],"options":null},"Infinite\\Ammo":{"note":"","data":["8006A1C1 0001"],"options":null},"Infinite\\Armor":{"note":"","data":["8006A1C2 0001"],"options":null},"Infinite\\Pilots":{"note":"","data":["811FBCCE FFFF"],"options":null},"Infinite\\Scrap Collected":{"note":"","data":["811FBCC6 FFFF"],"options":null},"Infinite\\Ship Health":{"note":"","data":["811DF6DE 0BA9"],"options":null},"Infinite\\Shots For Sniper Rifle":{"note":"","data":["811DA682 0003"],"options":null},"Infinite\\Weapons":{"note":"","data":["811DF6EA 04B0"],"options":null},"Level Select":{"note":"","data":["8006A1F5 0001"],"options":null},"Max\\Pilot Limits":{"note":"","data":["811FBCD2 FFFF"],"options":null},"Max\\Scrap Limit":{"note":"","data":["811FBCCA FFFF"],"options":null}},"569433AD-F7E13561-C:45":{"Infinite Health":{"note":"","data":["81086BCA 0038","800BAF97 0007"],"options":null}},"5753720D-2A8A884D-C:44":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C24D2 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE02F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802024B5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE015 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FC945 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFD2D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","80202565 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801D9E7D 0001"],"options":null}},"57BFF74D-DE747743-C:50":{"In-Game Cheats\\Access Cheat menu":{"note":"","data":["50000504 0000","80101308 0001"],"options":null},"In-Game Cheats\\Enable\\All Items":{"note":"To access simply pause in game play \u0026 then unpause.","data":["801012EC 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Invincibility":{"note":"","data":["802AA818 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Monsters":{"note":"","data":["802AA98B 00??"],"options":{"Are Active":"00","Are Gone":"01"}},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5E06 0064","812A5E4E 0064","812A5E5E 00C8","812A5E48 1900","812A5E18 04B0","812A5E4A 0640","812A5DE8 0960","812A5E4C 0190"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Keys":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5E03 000F"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A5E77 0001","50000F02 0000","812A5DBA 03E7"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Infinite Health (All Levels)":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on Single-Player, Co-Operative and DUKEMATCH, All Levels.","data":["8024D557 0064","802A5DB9 0064"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A6192 0064","812A61DA 0064","812A61EA 00C8","812A61D4 1900","812A61A4 04B0","812A61D6 0640","812A6174 0960","812A61D8 0190"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A6203 0001","50000E02 0000","812A6148 03E7"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on DUKEMATCH, All Levels.","data":["8024BC3F 0064","802A6145 0064"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A651E 0064","812A6566 0064","812A6576 00C8","812A6560 1900","812A6530 04B0","812A6562 0640","812A6500 0960","812A6564 0190"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A658F 0001","50000E02 0000","812A64D4 03E7"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 4 on DUKEMATCH, All Levels.","data":["8024B79B 0064","802A64D1 0064"],"options":null},"Single-Player (All Levels)\\Have All\\Items \u0026 Infinite Use on all levels":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5A7A 0064","812A5AC2 0064","812A5AD2 00C8","812A5ABC 1900","812A5ABE 0640","812A5A8C 04B0","812A5A5C 0960","812A5AC0 0190"],"options":null},"Single-Player (All Levels)\\Have All\\Keys":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5A77 000F"],"options":null},"Single-Player (All Levels)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A5AEB 0001","50000A02 0000","812A5A30 03E7"],"options":null},"Single-Player (All Levels)\\Have Infinite Health (All Levels)":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels and does what it says on the tin. Infinite health for player 1, All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["80247493 0064","8026EC8B 0064","802A5A2D 0064"],"options":null}},"580162EC-E3108BF1-C:58":{"Freeze Timer at 04:59":{"note":"Do not enable until count down to race is finished","data":["811BDB9E 3A70"],"options":null},"Have All Groups Completed":{"note":"This gives you all Cups for all Groups.","data":["50002801 0000","801BDCDC 0002"],"options":null},"Have Everything Unlocked":{"note":"Pause Game: Use Control Stick, to scroll the Cheat Menu. Press A, to activate Cheats. This will unlock everything and also be replacing all the Zombies with Pre-Historic Dinosaurs.","data":["801BDDBD 000F"],"options":null},"Have Infinite\\Free Repairs":{"note":"","data":["81097844 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Frozen Opponents":{"note":"","data":["810978A4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Grip-O-Matic Tires":{"note":"","data":["810979DC ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Hot Rod":{"note":"","data":["810977E4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Invunerability":{"note":"","data":["8109782C ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Mega Turbo":{"note":"","data":["810977CC ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Mine Dropping Ability":{"note":"","data":["81097A98 ????"],"options":{"Off":"0000","On":"0064"}},"Have Infinite\\Turbo":{"note":"","data":["810977B4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Turbo Nitrous":{"note":"","data":["810977FC ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Underwater Ability":{"note":"","data":["81097874 ????"],"options":{"Off":"0000","On":"0BBB"}},"Max Credits":{"note":"This is also Infinite until disabled","data":["811BDC1B FFFF"],"options":null},"Max Kills":{"note":"This will automatically Clear the stage if enabled and go back to the stage menu","data":["81094596 01F4"],"options":null}},"58FD3F25-D92EAA8D-C:50":{"Enable All Levels \u0026 Boarders":{"note":"","data":["80250AB9 00FF","80250ABB 0005","81250AC6 FCFF","80250AC8 0007"],"options":null},"Infinite Damage All Players and Levels":{"note":"","data":["803F4C01 0000"],"options":null},"Play As":{"note":"","data":["8001A0E7 00??"],"options":{"Akari Hayami":"02","Dion Blaster":"00","Gold Boarder":"06","Kensuke Kimachi":"01","Panda Boarder":"07","Ricky Winterborn":"03","Rob Haywood":"04","Silver Boarder":"05"}},"Prees L For Infinite Lives \u0026 Continues":{"note":"Whenever you've lost a life, Press L.Do not press L when on the main menu or during the intro Only use this feature in Match Race","data":["D00556A9 0020","8026B14B 0003"],"options":null},"Stop Timer\\Contest\\Air Make":{"note":"","data":["80319BBA 00C5"],"options":null},"Stop Timer\\Contest\\Crystal Lake":{"note":"","data":["8029C0DA 00C5"],"options":null},"Stop Timer\\Contest\\Crystal Peak":{"note":"","data":["802A889A 00C5"],"options":null},"Stop Timer\\Contest\\Golden Forest":{"note":"","data":["802A6D3A 00C5"],"options":null},"Stop Timer\\Contest\\Half Pipe":{"note":"","data":["802F51FA 00C5"],"options":null},"Stop Timer\\Time Attack\\Air Make":{"note":"","data":["8031AA4A 0000"],"options":null},"Stop Timer\\Time Attack\\Crystal Lake":{"note":"","data":["802A582A 0000"],"options":null},"Stop Timer\\Time Attack\\Crystal Peak":{"note":"","data":["802B2BCA 0000"],"options":null},"Stop Timer\\Time Attack\\Deadly Fall":{"note":"","data":["802CF56A 0000"],"options":null},"Stop Timer\\Time Attack\\Dragon Cave":{"note":"","data":["802C137A 0000"],"options":null},"Stop Timer\\Time Attack\\Golden Forrest":{"note":"","data":["802B135A 0000"],"options":null},"Stop Timer\\Time Attack\\Half Pipe":{"note":"","data":["802F638A 0000"],"options":null},"Stop Timer\\Time Attack\\Mountain Village":{"note":"","data":["802CB95A 0000"],"options":null},"Stop Timer\\Trick Attack\\Air Make":{"note":"","data":["8031AABA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Crystal Lake":{"note":"","data":["8029F66A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Crystal Peak":{"note":"","data":["802AC8EA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Deadly Fall":{"note":"","data":["802C8E0A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Dragon Cave":{"note":"","data":["802BAD3A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Golden Forrest":{"note":"","data":["802AAF5A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Half Pipe":{"note":"","data":["802F63FA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Mountain Village":{"note":"","data":["802C50DA 00C5"],"options":null}},"591A806E-A5E6921D-C:45":{},"596E145B-F7D9879F-C:50":{"Enable All Cheats":{"note":"Go into Options \u0026 then Magic Codes. Then Code list to turn off \u0026 on what you want.","data":["800E03AC 001F","50000301 0000","800E03AD 00FF"],"options":null},"Fifty Frames":{"note":"Identical location to the NTSC address","data":["80079E7B 0003"],"options":null},"Have All\\50 Balloons":{"note":"","data":["8020807D 0032"],"options":null},"Have All\\Control Drumstick \u0026 Adventure Two mode unlocked":{"note":"","data":["80126CCC 0003","80126CCF 0003","80126CE2 0003","80126CE3 0008"],"options":null},"Have All\\Keys":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80208659 001F"],"options":null},"Have All\\None-Adventure tracks completed":{"note":"","data":["50001204 0000","80208777 0007","50000904 0000","802087CF 0007","80208658 0007","8020865A 0007","8020865B 0007","8020865C 000F","8020865D 00FF"],"options":null},"Have All\\T.T. Amulets":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80208667 0004"],"options":null},"Have All\\T.T. time trial races beaten":{"note":"","data":["80208666 0004"],"options":null},"Have All\\Trophies":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["8020865E 0007","8020865F 00FF"],"options":null},"Have All\\Trophy Adventure races unlocked":{"note":"","data":["50000502 0000","8020886E 0007"],"options":null},"Widescreen":{"note":"","data":["81066246 3FE3","81066396 3FE3","810663FE 3FE3","8107037A 3740","811267A4 3FCE"],"options":null}},"5A160336-BC7B37B0-C:50":{"All Levels \u0026 Stages Unlocked":{"note":"","data":["50001804 0000","8008E5CF 0001"],"options":null},"Have All Gold Cards":{"note":"","data":["8008E575 00FF","8108E576 FFFF","8108E578 FFFF","8108E57A FFFF","8108E57C FFFF"],"options":null},"Infinite Red Pumped-Up Bombs":{"note":"","data":["802AC643 0004"],"options":null},"Infinite\\Credits":{"note":"","data":["802AC61B 0063"],"options":null},"Infinite\\Gems":{"note":"","data":["802AC61F 0063"],"options":null},"Infinite\\Lives":{"note":"","data":["802AC617 0063"],"options":null},"Infinite\\Time":{"note":"","data":["802AC633 0000"],"options":null}},"5A9D3859-97AAE710-C:45":{"Anger metre always full":{"note":"","data":["800D5978 00FF","800D5666 00FF"],"options":null},"Crunched Players":{"note":"","data":["810DBA6C 3F00"],"options":null},"Difficulty Mod":{"note":"","data":["80120639 00??"],"options":{"Easy":"01","Hard":"03","Medium":"02","Very Easy":"00"}},"Extra Teams":{"note":"","data":["80115A0C 0001"],"options":null},"Get In Fights Constantly":{"note":"","data":["800CF766 0020"],"options":null},"Players\\Head Size":{"note":"","data":["81118A2C ????"],"options":{"Normal Size":"3F80","Very Large":"4080","Very Small":"3F00"}},"Players\\Height Size":{"note":"","data":["81120688 ????"],"options":{"Giants":"4080","Large":"3FC0","Midgets":"3F00","Normal Size":"3F80"}},"Team 1\\Score pts":{"note":"","data":["8011C061 00??"],"options":{"30 Points":"1E","50 Points":"23","75 Points":"4B","99 Points":"63","Zero Points":"00"}},"Team 2\\Score pts":{"note":"","data":["8011F571 ????"],"options":{"0 Points":"2305","5 Points":"4B07","9 Points":"6309","ero Points":"0000"}}},"5AC383E1-D712E387-C:45":{"Double Frames":{"note":"Sadly only 30fps when playing but at least its not the SLOW 15fps rate","data":["8002ADAB 0001"],"options":null},"Infinite\\Money\\Player 1":{"note":"","data":["81324B46 270F"],"options":null},"Infinite\\Money\\Player 2":{"note":"","data":["81324B5A 270F"],"options":null},"Infinite\\Money\\Player 3":{"note":"","data":["81324B6E 270F"],"options":null},"Infinite\\Money\\Player 4":{"note":"","data":["81324B82 270F"],"options":null},"[Language Select]":{"note":"To use this load the game then enable this cheat and Reset (F1) you will now be on your chosen Language and Relative Local Language Board and Money.","data":["D009675F 0001","80096758 00??"],"options":{"American":"00","British":"01","France":"02","German":"03"}}},"5C1B5FBD-7E961634-C:46":{"Access In-Game Cheat Menu":{"note":"To Access Pause Game Play. This gives you access to In-game Cheats like God Mode,Level Select,All Items Etc","data":["81137DB6 07FF","80137E93 0005"],"options":null},"Boots Of Speed Select\\Player 1":{"note":"","data":["8113F538 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113F6D4 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113F870 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113FA0C ????"],"options":{"Off":"0000","On":"03FF"}},"Have All\\Armour":{"note":"","data":["8013F651 0019","8013F655 0014","8013F659 0014","8013F65D 0014"],"options":null},"Have All\\Items And Artifacts\\Player 1":{"note":"","data":["8013F651 0019","8013F655 0014","8013F659 0014","8013F65D 0014","8013F661 0001","8013F663 00FF","8013F665 0002","8013F667 00FF","8013F669 0003","8013F66B 00FF","8013F66D 0004","8013F66F 00FF","8013F671 0006","8013F673 00FF","8013F675 0007","8013F677 00FF","8013F679 0008","8013F67B 00FF","8013F67D 0009","8013F67F 00FF","8013F681 000A","8013F683 00FF","8013F685 000B","8013F687 00FF","8013F689 000C","8013F68B 00FF","8013F68D 000D","8013F68F 00FF","8013F691 000E","8013F693 00FF","8013F695 000F","8013F697 00FF","8013F699 0010","8013F69B 00FF","8013F69D 0011","8013F69F 00FF","8013F6A1 0012","8013F6A3 00FF","8013F6A5 0013","8013F6A7 00FF","8013F6A9 0014","8013F6AB 00FF","8013F6AD 0015","8013F6AF 00FF","8013F6B1 0016","8013F6B3 00FF","8013F6B5 0017","8013F6B7 00FF","8013F6B9 0018","8013F6BB 00FF","8013F6BD 0019","8013F6BF 00FF","8013F6C1 001A","8013F6C3 00FF","8013F6C5 001B","8013F6C7 00FF","8013F6C9 001C","8013F6CB 00FF","8013F6CD 001D","8013F6CF 00FF","8013F6D1 001E","8013F6D3 00FF","8013F6D5 001F","8013F6D7 00FF","8013F6D9 0020","8013F6DB 00FF","8013F6E9 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113F6FC 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113F6D8 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113F874 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113FA10 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013F715 00FF","8013F717 00FF","8013F719 00FF","8013F71B 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013F6F1 00FF","8013F6F3 00FF","8013F6F5 00FF","8013F6F7 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013F88D 00FF","8013F88F 00FF","8013F891 00FF","8013F893 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013FA29 00FF","8013FA2B 00FF","8013FA2D 00FF","8013FA2F 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013F71D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013F2E9 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013F485 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013F621 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013F71F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013F2EB 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013F487 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013F623 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113F52C ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113F6C8 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113F864 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113FA00 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113F6EC FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113F2B8 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113F454 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113F5F0 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8113F533 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113F6CE ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113F86A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113FA06 ????"],"options":{"Off":"0000","On":"03FF"}}},"5C9191D6-B30AC306-C:4A":{"99 Points":{"note":"","data":["801D8E13 0063"],"options":null},"Always First Place":{"note":"","data":["801D040F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801D06F3 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801D06CE 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801D0537 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801D0B5A 0005","801D0DFA 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801D053F 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800E84C3 0007"],"options":null},"Super Speed":{"note":"","data":["801D0537 0005","D0161DC1 0010","801D0537 0020"],"options":null}},"5CD4150B-470CC2F1-C:45":{"Access\\All Secret Characters":{"note":"This code is Fantastic, You have 12 characters to choose from to you race without any bike, just on foot","data":["50000C04 0000","801839CF 0001"],"options":null},"Access\\All Superbikes":{"note":"","data":["50000304 0000","801839CF 0001"],"options":null},"Access\\All Tracks":{"note":"","data":["50000BD8 0000","80182F87 0001"],"options":null},"Infinite Lasers\\Player 1":{"note":"","data":["80170B99 00C8"],"options":null},"Infinite Lasers\\Player 2":{"note":"","data":["80171241 00C8"],"options":null},"Infinite Lasers\\Player 3":{"note":"","data":["80171869 00C8"],"options":null},"Infinite Lasers\\Player 4":{"note":"","data":["80171ED1 00C8"],"options":null},"Infinite Nitros\\Player 2":{"note":"","data":["801711CB 0004","801711CF 0004"],"options":null},"Infinite Nitros\\Player 3":{"note":"","data":["80171833 0004","80171837 0004"],"options":null},"Infinite Nitros\\Player 4":{"note":"","data":["80171E9B 0004","80171E9F 0004"],"options":null},"Infinite Shield\\Player 2":{"note":"","data":["801711F5 00C8"],"options":null},"Infinite Shield\\Player 3":{"note":"","data":["8017185D 00C8"],"options":null},"Infinite Shield\\Player 4":{"note":"","data":["80171EC5 00C8"],"options":null},"Infinite\\Nitros\\Player 1":{"note":"","data":["80170B63 0004","80170B67 0004"],"options":null},"Infinite\\Shield\\Player 1":{"note":"","data":["80170B8D 00C8"],"options":null},"[Screen Hud Clear]":{"note":"If you are using a Plugin other then Jabos and can not see through the Thick Hud then Let the game load 1st before Putting this code on,Or it will give an error and Freeze","data":["80092B8B 0004"],"options":null}},"5D40ED2C-10D6ABCF-C:00":{"Infinite Max Health":{"note":"","data":["8011249D 00A0"],"options":null},"Infinite Max Lives":{"note":"","data":["801124B4 0009"],"options":null},"Infinite Max Shield":{"note":"","data":["801124A3 00A0"],"options":null}},"5E547A4D-90E60795-C:45":{"Character Creation\\Max\\Accuracy":{"note":"","data":["81115A20 4170"],"options":null},"Character Creation\\Max\\Arm Str.":{"note":"","data":["81115A4C 4170"],"options":null},"Character Creation\\Max\\Bunting":{"note":"","data":["81115A38 4170"],"options":null},"Character Creation\\Max\\Clutch":{"note":"","data":["81115A54 4170"],"options":null},"Character Creation\\Max\\Contact":{"note":"","data":["81115A28 4170"],"options":null},"Character Creation\\Max\\Defense":{"note":"","data":["81115A48 4170"],"options":null},"Character Creation\\Max\\Power":{"note":"","data":["81115A2C 4170"],"options":null},"Character Creation\\Max\\Speed":{"note":"","data":["81115A44 4170"],"options":null},"Character Creation\\Max\\Stamina":{"note":"","data":["81115A24 4170"],"options":null},"Character Creation\\Max\\Streak":{"note":"","data":["81115A50 4170"],"options":null},"Character Creation\\Max\\VS LHB":{"note":"","data":["81115A3C 4170"],"options":null},"Character Creation\\Max\\VS LHP":{"note":"","data":["81115A30 4170"],"options":null},"Character Creation\\Max\\VS RHB":{"note":"","data":["81115A40 4170"],"options":null},"Character Creation\\Max\\VS RHP":{"note":"","data":["81115A34 4170"],"options":null},"Infinite\\Balls":{"note":"","data":["8006E4DF 0000"],"options":null},"Infinite\\Character Creation Points":{"note":"","data":["81103350 4170"],"options":null},"Infinite\\Outs":{"note":"","data":["8006E4E3 0000"],"options":null},"Infinite\\Pitch Type Creation Points":{"note":"","data":["811039BC 4170","811039C0 4170"],"options":null},"Infinite\\Strikes":{"note":"","data":["8006E4E1 0000"],"options":null}},"5F25B0EE-6227C1DB-C:45":{"Away Team\\Infinite Time Outs":{"note":"","data":["81135098 0700"],"options":null},"Away Team\\No Time Outs":{"note":"","data":["81135098 0000"],"options":null},"Home Team\\Infinite Time Outs":{"note":"","data":["811344D0 0700"],"options":null},"Home Team\\No Time Outs":{"note":"","data":["811344D0 0000"],"options":null},"Infinite Shot Clock":{"note":"","data":["811318F2 05A0"],"options":null},"Jump Shooting":{"note":"","data":["8017B7AD 0064"],"options":null},"Max Inside Scoring":{"note":"","data":["8017B7AC 0064"],"options":null},"Max\\3 Pointers":{"note":"","data":["8017B7AE 0064"],"options":null},"Max\\Blocking":{"note":"","data":["8017B7B2 0064"],"options":null},"Max\\Def. Awareness":{"note":"","data":["8017B7B3 0064"],"options":null},"Max\\Def. Rebounds":{"note":"","data":["8017B7B6 0064"],"options":null},"Max\\Dribbling":{"note":"","data":["8017B7BC 0064"],"options":null},"Max\\Dunking":{"note":"","data":["8017B7B0 0064"],"options":null},"Max\\Endurance":{"note":"","data":["8017B7BD 0064"],"options":null},"Max\\Free Throws":{"note":"","data":["8017B7AF 0064"],"options":null},"Max\\Jumping":{"note":"","data":["8017B7B7 0064"],"options":null},"Max\\Off. Awareness":{"note":"","data":["8017B7BA 0064"],"options":null},"Max\\Off. Rebounds":{"note":"","data":["8017B7B5 0064"],"options":null},"Max\\Passing":{"note":"","data":["8017B7B9 0064"],"options":null},"Max\\Quickness":{"note":"","data":["8017B7B4 0064"],"options":null},"Max\\Shooting Range":{"note":"","data":["8017B7BE 0064"],"options":null},"Max\\Speed":{"note":"","data":["8017B7BB 0064"],"options":null},"Max\\Stealing":{"note":"","data":["8017B7B1 0064"],"options":null},"Max\\Strength":{"note":"","data":["8017B7B8 0064"],"options":null}},"5F3F49C6-0DC714B0-C:50":{"Access All\\Bikes":{"note":"","data":["8107F6EE FFFF"],"options":null},"Access All\\Tracks":{"note":"","data":["8107F6F0 00FF","8107F6F2 FFFF"],"options":null},"Infinite\\Nitro":{"note":"","data":["810BA540 4296"],"options":null},"Infinite\\Nitro Always On":{"note":"","data":["810BA52C 0010"],"options":null},"Laps 2 Race":{"note":"","data":["800F36B8 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}}},"5F6A04E2-D4FA070D-C:53":{"Access All Levels":{"note":"","data":["8008A9D6 0001","8008A9EA 0001","8008AA12 0001","8008AA62 0001","8008AA76 0001","8008AA8A 0001","8008AA9E 0001","8008AAB2 0001","8008AAC6 0011","8008AADA 0021","8008AAEE 0001","8008AB16 0011","8008AB2A 0041","8008AB3E 0021","8008AB52 0081","8008AB66 0001","8008AB7A 0081","8008AB8E 0001","8008ABB6 0001","8008ABDE 0001","8008ABF2 0011","8008AC06 0021","8008AC56 0001","8008AF3A 0001","8008AF4E 0001","8008AF62 0001","8008AF76 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81094150 0063","81094152 0063","81094154 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A9297 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810866C2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810864C4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80094305 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A92B5 00??","800A92C5 00??","800A92D5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"5FD7CDA0-D9BB51AD-C:50":{"1 Lap To Race":{"note":"","data":["D01226C8 0000","801226C8 0009"],"options":null},"Access Everything":{"note":"\"Have All Characters,Cups,Courses,\u0026Boards\"","data":["810B3160 0100","810B3164 0F00"],"options":null},"Infinite Cash":{"note":"","data":["8112272A 03E7"],"options":null},"Infinite Tools Options":{"note":"","data":["801226D5 00??"],"options":{"Board":"06","Fan":"01","Ghost":"02","Mouse":"05","Pan":"03","Rock":"04"}},"Infinite Weapons\\Lucky Dip":{"note":"\"Lucky Dip is Infinite Usage Of What Ever You Get From Each Red Box\"","data":["801226D4 0003"],"options":null}},"60460680-305F0E72-C:50":{"Access All In-Game Cheats":{"note":"Pause Gameplay To Access","data":["81157E46 000F","81157E56 FFFF"],"options":null},"Access All Navigation Cards":{"note":"","data":["80157E9B 0005"],"options":null},"Access Secret Worlds":{"note":"","data":["81152946 0064"],"options":null},"Infinite Lives":{"note":"","data":["81157EAE 0063"],"options":null},"Max \u0026 Total Gold":{"note":"","data":["80157E4B 0063","80157E4F 0063"],"options":null}},"60C437E5-A2251EE3-C:50":{"Character Select":{"note":"","data":["80075F52 00??"],"options":{"Big Head.":"04","Flame Grilled":"08","Normal":"00","Play as Deadwing.":"01"}},"Have All\\Cheats: Book of Shadows":{"note":"","data":["81075F4E 0FFF"],"options":null},"Have All\\Dark Souls Collected":{"note":"","data":["80075F49 0078"],"options":null},"Have All\\Gads \u0026 The Poign":{"note":"","data":["80030E57 000F"],"options":null},"Have All\\Items":{"note":"Youll not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50001B20 0000","80030613 000B"],"options":null},"Have All\\L-Eclipser":{"note":"You will not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50000320 0000","80030973 000B"],"options":null},"Have All\\Levels Unlocked":{"note":"","data":["5000101C 0000","80030A0E 0001"],"options":null},"Infinite\\0.9mm Ammo":{"note":"","data":["81075B3A 0190"],"options":null},"Infinite\\Accumulators":{"note":"","data":["800306D7 0005"],"options":null},"Infinite\\Cadeaux'":{"note":"","data":["81075B36 03E7"],"options":null},"Infinite\\Max Health/Air/Shadow Charge \u0026 Voodoo Power":{"note":"","data":["50000604 0000","81075B16 2710"],"options":null},"Infinite\\Prisms":{"note":"","data":["80030957 0003"],"options":null},"Infinite\\Retractors":{"note":"","data":["800308B7 0003"],"options":null},"Infinite\\Shotgun Shells":{"note":"","data":["80075B2F 0063"],"options":null},"Infinite\\Violator Ammo":{"note":"","data":["81075B32 03E7"],"options":null},"Press L To Levitate":{"note":"Press the L-Button to rise and let go and press again in stages to come back down.","data":["D0059097 0020","80075578 0041"],"options":null},"[Ammo Always Displayed On Screen]":{"note":"","data":["50000408 0000","80075ACD 0007"],"options":null},"[Health Meter Displayed On Screen]":{"note":"","data":["81075B10 0000","81075B12 00FF"],"options":null}},"60D5E10B-8BEDED46-C:50":{"All Masks":{"note":"Press GS To Activate All Masks","data":["891F1110 8780"],"options":null},"Have All\\Crates":{"note":"","data":["810C6FE8 7FFF","50000602 0000","810C6FEA FFFF","800C6FF2 00FF"],"options":null},"Have All\\Yellow Lums":{"note":"","data":["50006401 0000","800C6FF8 00FF","50001901 0000","800C6FAD 00FF","811F1072 0005","50005702 0000","811F1078 FFFF"],"options":null},"Infinite\\Max Health":{"note":"","data":["811BC54C 001E"],"options":null},"Infinite\\Oxygen":{"note":"","data":["810F4A80 4396"],"options":null},"Open Options\\Open all cages":{"note":"","data":["801F1032 0050","50000602 0000","811F10E0 FFFF"],"options":null},"Open Options\\levels \u0026 Map":{"note":"","data":["50000801 0000","801F1101 00FF"],"options":null}},"61D116B0-FA24D60C-C:50":{"Access The Rock Alcatraz bonus level":{"note":"Press C-right, on any level, at the track selection screen","data":["D00F4174 0002","80100120 0006"],"options":null},"All\\Keys \u0026 Cars":{"note":"","data":["50000E16 0000","810CAD52 FFFF"],"options":null},"All\\Keys \u0026 Cars Circuits":{"note":"","data":["8105696E FFFF","8105699A FFFF","50000404 0000","81056910 FFFF"],"options":null},"Always 1st":{"note":"","data":["80101409 0000"],"options":null},"Automatic Transmission":{"note":"","data":["800C8100 0001"],"options":null},"Big Back Wheels":{"note":"","data":["800DA03C 0002"],"options":null},"Big Front Wheels":{"note":"","data":["800DA02C 0002"],"options":null},"Difficulty Very Easy":{"note":"","data":["810D9F7A 0002"],"options":null},"Gravity Modifier":{"note":"","data":["800F3E61 00??"],"options":{"Ballon \u0026 Two Weights":"00","One Weight":"01","Two Weights":"02"}},"Laps To Race":{"note":"","data":["800E7411 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Max Race Points":{"note":"","data":["810DACCA 03E7"],"options":null},"No\\Auto Abort":{"note":"","data":["800F4140 0001"],"options":null},"No\\Car Collisions":{"note":"","data":["800F4120 0001"],"options":null},"Resurrect In Place":{"note":"","data":["800F4150 0001"],"options":null},"Stop Timer":{"note":"","data":["800F4160 0001"],"options":null}},"61F5B152-046122AB-C:4A":{"Always 1st":{"note":"","data":["8011C25D 0001"],"options":null},"Have All Characters":{"note":"","data":["801170E2 007D","811170E4 FFFF"],"options":null},"Have All Tracks Completed":{"note":"","data":["811170DA FFFF","811170DC 3FFF","811170DE 3FFF","811170E0 3FFF","811170E2 00FF"],"options":null},"No Damage":{"note":"","data":["800A8047 0001"],"options":null},"Unlock All Tracks":{"note":"","data":["801170D8 00FF","801170D9 00FF","801170DA 00FF","801170DB 00FF","811170D8 FFFF"],"options":null}},"62269B3D-FE11B1E8-C:45":{"Always Place 1st":{"note":"","data":["8131C70E 0000"],"options":null},"Extra Cars \u0026 Tracks":{"note":"","data":["50000201 0000","8032690C 00FF","8032690F 00FF","813243CC FFFF"],"options":null},"Have 1-6 Level Points":{"note":"","data":["50000602 0000","8032685F 0064"],"options":null},"Only Race 1 Lap Championship Mode":{"note":"","data":["8031EBDB 0002"],"options":null}},"62E957D0-7FC15A5D-C:50":{"All Golf Courses Unlocked":{"note":"","data":["80130FED 0001"],"options":null},"Always On 1st Stroke":{"note":"","data":["801B74F3 0000"],"options":null},"Infinite Power Shots":{"note":"","data":["801B74F8 0042"],"options":null},"Unlock all Characters and Birdy Badges":{"note":"Unlocks Metal Mario, Maple, Luigi, Sonny, Wario, Harry, Bowser, Yoshi, Mario and DK","data":["50006C01 0000","801304A4 0001","50000901 0000","80130518 0001","50000901 0000","80130521 0001"],"options":null},"Weather Select":{"note":"","data":["800BACAB 00??"],"options":{"Always Rains":"01","Never Rains":"00"}},"Wind Speed Select":{"note":"","data":["800BACA1 00??"],"options":{"0 MPH":"00","20 MPH":"14"}}},"62F6BE95-F102D6D6-C:50":{"99 Accuracy":{"note":"","data":["80131530 0063"],"options":null},"99 Bonus":{"note":"","data":["80131537 0063"],"options":null},"All Boss Attack levels unlocked":{"note":"Unlocks all planes in death match","data":["80355701 003F"],"options":null},"Always Have\\F-15J Eagle":{"note":"","data":["8027D69C 0010"],"options":null},"Always Have\\X-29A A.T.D.":{"note":"","data":["8027D69D 0020"],"options":null},"Extra Planes":{"note":"","data":["8127D69C FFFF"],"options":null},"F-15J Eagle \u0026 X-29A A.T.D. planes unlocked":{"note":"","data":["8035575C 00??"],"options":{"Both of the above planes":"3F","F-15J Eagle":"10","X-29A A.T.D.":"20"}},"Gun Select":{"note":"","data":["8027E9D3 00??"],"options":{"22mm":"0B","22mm BB Shot":"0A","Air Mines":"02","Chaff":"00","Fire":"14","Fire Arrow":"21","Fire Wave":"17","Fireball":"0D","Hunai Shot":"0C","Jammings":"01","Mahibishi":"03","Ninja Glitch":"16","Ninjabeam":"28","Phoenix":"1F","Rocket":"1E","Sabre":"0E","Star":"20","Tomahawk":"15"}},"Infinite\\99 Lives":{"note":"","data":["80355748 0063"],"options":null},"Infinite\\Armor":{"note":"","data":["8127D9A4 44A0","8127D9A8 44A0"],"options":null},"Infinite\\Chaffs":{"note":"","data":["8027E9C7 000A"],"options":null},"Infinite\\Gun":{"note":"","data":["8027EAC0 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8027D9A5 00C8","8027D9A9 00C8"],"options":null},"Infinite\\Special Weapons":{"note":"","data":["8027EE82 0002"],"options":null},"Stage Select screen unlocked":{"note":"Hold L + R at the Game Mode screen and it will unlock every single level in the game; from Tokyo to Space. Do not hold L + R on any other screen, as this may cause game to freeze","data":["D0281691 0030","8027D5C0 000A","D0281691 0030","8027D5DA 000A"],"options":null}},"630AA37D-896BD7DB-C:50":{"Have All\\Cars":{"note":"","data":["50000C01 0000","8009B7D8 0001"],"options":null},"Have All\\Difficulty Levels":{"note":"","data":["8009B7D7 0003"],"options":null},"Have All\\Tracks":{"note":"","data":["50000C01 0000","80099498 0001"],"options":null},"Max\\Checkpoint Bonus":{"note":"","data":["812E013E 03E7"],"options":null},"Max\\Collisions Points":{"note":"","data":["812E013A 03E7"],"options":null},"Max\\Points Aid":{"note":"","data":["8112A3CE 03E7"],"options":null},"Solo Mode\\Infinite Health\\Alpine Ridge":{"note":"","data":["D02C5224 0080","802C5233 00E1"],"options":null},"Solo Mode\\Infinite Health\\Bayou Run":{"note":"","data":["D029137C 0080","8029138B 00E1"],"options":null},"Solo Mode\\Infinite Health\\Destruction Junction":{"note":"","data":["D02A5EB0 0080","802A5EBF 00E1"],"options":null},"Solo Mode\\Infinite Health\\Metro Challenge":{"note":"","data":["D02F9018 0080","802F9027 00E1"],"options":null},"Solo Mode\\Infinite Health\\Midnyte Rumble":{"note":"","data":["D0317C0B 0080","80317C1A 00E1"],"options":null},"Solo Mode\\Infinite Health\\Seascape Sprint":{"note":"","data":["D02E0124 0080","802E0133 00E1"],"options":null},"Solo Mode\\Infinite Health\\Sunset Canyon":{"note":"","data":["D030EF68 0080","8030EF77 00E1"],"options":null},"Solo Mode\\Infinite Health\\Terminal Impact":{"note":"","data":["D02C0FA3 0080","802C0FB2 00E1"],"options":null}},"635A2BFF-8B022326-C:45":{"16:9 Widescreen":{"note":"Menu Misalignments. For 16:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81325034 3C07","81325036 3FE3","8127D6A0 1000","8127D6D4 1000"],"options":null},"21:9 Widescreen":{"note":"Menu Misalignments. For 21:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81325034 3C07","81325036 4018","8127D6A0 1000","8127D6D4 1000"],"options":null},"Don't Hurt Mario\\Falling":{"note":"","data":["8033B22C 00E8","8133B178 FFFF"],"options":null},"Don't Hurt Mario\\Monsters":{"note":"","data":["A033B197 0001"],"options":null},"Funny Mario Options\\Mario Walks On Lava":{"note":"","data":["81250900 1000"],"options":null},"Funny Mario Options\\Mario Walks On Sand":{"note":"","data":["81255490 1000","8125572C 1000","8125572E 0031"],"options":null},"Funny Mario Options\\Mario Walks On Water":{"note":"","data":["81381764 0800","81381766 0024","81000090 3C04","81000092 8034","81000094 8484","81000096 B1E6","81000098 4484","8100009A 3000","810000A0 4680","810000A2 3120","810000A4 4604","810000A6 903C","810000AC 4500","810000AE 0002","810000B4 4600","810000B6 2486","810000B8 080E","810000BA 05DB","810000BC E712"],"options":null},"Funny Mario Options\\Mario's Cap\\Off \u0026 in His Hand":{"note":"Here you can Choose Options with Mario with His Cap off \u0026 in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["8033B177 00??"],"options":{"Cap In Hand":"20","Flying Mario Cap In Hand":"28","Invisible Mario Cap In Hand":"22","Invisible Metal Mario Cap In Hand":"26","Metal Mario Cap In Hand":"24"}},"Funny Mario Options\\Mario's Cap\\On \u0026 An Extra in His Hand":{"note":"Here you can Choose Options with Mario with His Cap on \u0026 An Extra in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["8033B177 00??"],"options":{"Cap In Hand":"30","Flying Mario Cap In Hand":"38","Invisible Mario Cap In Hand":"32","Invisible Metal Mario Cap In Hand":"36","Metal Mario Cap In Hand":"34"}},"Have\\Level Select":{"note":"","data":["A032D58C 0001"],"options":null},"Have\\Turbo Running Speed":{"note":"","data":["8033B1C3 00FF"],"options":null},"Infinite\\Energy \u0026 Breath":{"note":"","data":["8033B21E 0008"],"options":null},"Infinite\\Lives":{"note":"","data":["8033B21D 0064"],"options":null},"Level Select":{"note":"Select a Level. Jump Into a Painting. Press A at the Stars Collected Screen. As Stats are fading hold L, and you'll jump to the level you've selected.","data":["D033AFA1 0020","A032DDF9 00??"],"options":{"Big Boo's Haunt":"04","Bob omb Battlefield":"09","Bowser In The Dark World":"11","Bowser In The Dark World Boss":"1E","Bowser In The Fire Sea":"13","Bowser In The Fire Sea Boss":"21","Bowser In The Sky":"15","Bowser In The Sky Boss":"22","Castle Courtyard":"1A","Cavern Of The Metal Cap":"1C","Cool Cool Mountain":"05","Dire Dire Docks":"17","Hazy Maze Cave":"07","Intro":"01","Jolly Roger Bay":"0C","Lethal Lava Land":"16","Mushroom Castle":"06","Mushroom Castle Field":"10","Rainbow Ride":"0F","Shifting Sand Land":"08","Snowman's Land":"0A","Tall Tall Mountain":"24","The End":"19","The Princess's Secret Slide":"1B","The Secret Aquarium":"14","Tick tock Clock":"0E","Tiny Huge World":"0D","Tower Of The Wing Cap":"1D","Vanish Cap Under The Moat":"12","Wet Dry World":"0B","Whomp's Fortress":"18","Wing Mario Over The Rainbow":"1F"}},"Mario's Cap\\Off Options":{"note":"Here you can Choose Options with Mario without His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["8033B177 00??"],"options":{"Flying Mario":"08","Invisible Flying Mario":"0A","Invisible Mario":"02","Invisible Metal Flying Mario":"0F","Mario No Cap":"01","Metal Flying Mario":"0D","Metal Mario":"04"}},"Mario's Cap\\On Options":{"note":"Here you can Choose Options with Mario with His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["8033B177 00??"],"options":{"Flying Mario":"19","Invisible Mario":"12","Invisible Metal Mario":"16","Metal Mario":"15"}},"Press GS For 255 Coins":{"note":"","data":["8933B218 00FF"],"options":null},"Press L To Levitate":{"note":"Press L to levitate \u0026 Let go to land","data":["D033AFA1 0020","8133B1BC 4220","D033AFA1 0020","8133B17C 0300","D033AFA1 0020","8133B17E 0880"],"options":null},"[Slot A Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80207723 0001","8020770B 00C7","50001101 0000","8020770C 00FF"],"options":null},"[Slot A Codes]\\Have All\\Key doors unlocked (and mote empty)":{"note":"","data":["8020770A 007E"],"options":null},"[Slot A Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80207725 0064"],"options":null},"[Slot B Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80207793 0001","8020777B 00C7","50001101 0000","8020777C 00FF"],"options":null},"[Slot B Codes]\\Have All\\Key doors unlocked (and mote empty)":{"note":"","data":["8020777A 007E"],"options":null},"[Slot B Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80207795 0064"],"options":null},"[Slot C Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80207803 0001","802077EB 00C7","50001101 0000","802077EC 00FF"],"options":null},"[Slot C Codes]\\Have All\\Key doors unlocked (and mote empty)":{"note":"","data":["802077EA 007E"],"options":null},"[Slot C Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80207805 0064"],"options":null},"[Slot D Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80207873 0001","8020785B 00C7","50001101 0000","8020785C 00FF"],"options":null},"[Slot D Codes]\\Have All\\Key doors unlocked (and mote empty)":{"note":"","data":["8020785A 007E"],"options":null},"[Slot D Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80207875 0064"],"options":null}},"636E6B19-E57DDC5F-C:50":{"Access\\All Cars":{"note":"","data":["8015EC13 003F"],"options":null},"Access\\All Tracks":{"note":"","data":["8015EC0E 0070"],"options":null},"Access\\Championship,World,Expert":{"note":"","data":["8015EC1C 0001"],"options":null},"Access\\Expert Times":{"note":"","data":["8015EC10 0031"],"options":null},"Access\\In-Game Cheat Menu":{"note":"On The Title Screen, Hold Z Button \u0026 Push L Button","data":["811CFE09 00FF","811F31FF 04FF","811CE165 FF03"],"options":null}},"63E7391C-E6CCEA33-C:45":{"Always Have Weapon Options\\Player 1":{"note":"","data":["810E2994 00??"],"options":{"Anvil":"79","Bee hive":"6D","Bird bath":"04","Blue Swordfish":"63","Bouy":"29","Broom":"08","Chair":"0B","Champagne":"0C","Chicken":"0E","Club":"03","Crate":"0F","Deck chair":"14","Egg":"16","Fish":"1A","Frying Pan":"1E","Gardeners Fork":"1D","Mallet":"2A","Milk Bottle":"2D","Mooses head":"78","NCube knife":"09","NCube missiles":"0A","Plank":"39","Rolling Pin":"41","Saucepan":"64","Spade":"46","Spanner":"4E","Stick":"55","Stool":"6B","Tennis Racket":"48","Watermelon":"2B","Wooden Chair":"1F","Wooden Spoon":"65"}},"Always Have Weapon Options\\Player 2":{"note":"","data":["810E2C6C 00??"],"options":{"Anvil":"79","Bee hive":"6D","Bird bath":"04","Blue Swordfish":"63","Bouy":"29","Broom":"08","Chair":"0B","Champagne":"0C","Chicken":"0E","Club":"03","Crate":"0F","Deck chair":"14","Egg":"16","Fish":"1A","Frying Pan":"1E","Gardeners Fork":"1D","Mallet":"2A","Milk Bottle":"2D","Mooses head":"78","NCube knife":"09","NCube missiles":"0A","Plank":"39","Rolling Pin":"41","Saucepan":"64","Spade":"46","Spanner":"4E","Stick":"55","Stool":"6B","Tennis Racket":"48","Watermelon":"2B","Wooden Chair":"1F","Wooden Spoon":"65"}},"Infinite Health\\Player 1":{"note":"","data":["810E279C 42C8"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["810E2A74 42C8"],"options":null},"Infinite Time":{"note":"","data":["810FED4C 42F0"],"options":null},"One Hit To Kill\\Player 1":{"note":"","data":["810E2A74 3F80"],"options":null},"One Hit To Kill\\Player 2":{"note":"","data":["810E2D4C 3F80"],"options":null},"Open All Versus Arenas":{"note":"","data":["810E44F4 03FF"],"options":null},"Unlock All Characters":{"note":"This Gives you all Characters to choose from plus fixes A freeze on the Charecter Select Menu by having it on","data":["810E44F2 00FF"],"options":null}},"641D3A7F-86820466-C:50":{"Difficulty Select Options":{"note":"","data":["811C5C1C ????"],"options":{"Hard":"0101","Normal":"0100","Ultimate":"0102"}},"Have All\\Keys":{"note":"","data":["50000410 0000","80181B20 0063","50000410 0000","80181B28 0063"],"options":null},"Have All\\Moves":{"note":"","data":["50005306 0000","811876D0 0100","50005306 0000","811876D2 00FF"],"options":null},"Have All\\Moves At Skill Level 250":{"note":"","data":["50000E06 0000","8018C953 00FA","50001306 0000","8018C9AD 00FA","50003006 0000","8018CA37 00FA"],"options":null},"Infinite\\Max Body Stats":{"note":"","data":["81181638 270F","81181678 0063","50000C02 0000","81181640 270F","50000502 0000","81181670 270F","50000602 0000","81181698 270F","50000602 0000","811816A6 270F"],"options":null},"Infinite\\Max Health":{"note":"","data":["81181630 270F","81181632 270F"],"options":null},"Infinite\\Refresh Items":{"note":"","data":["50000E10 0000","801819F8 0063","50000D10 0000","80181A00 0063"],"options":null},"Infinite\\Weapons \u0026 Items":{"note":"","data":["50000610 0000","80181AD0 0063","50000610 0000","80181AD8 0063"],"options":null},"Level 999":{"note":"","data":["81181678 270F"],"options":null},"Level and Battle Select":{"note":"The level and battle select screen can be accessed by pressing A at the main menu","data":["801D74A4 0005"],"options":null},"Play As":{"note":"","data":["811C5CF6 00??"],"options":{"Alien":"03","President Weller":"02","The real Mr Diaz Baddie":"01"}},"Press L To Levitate":{"note":"","data":["D00CCE25 0020","812558F0 3FCB"],"options":null},"[Have Full Power and Max Combos]":{"note":"Gives you full power and Max Combos in fights","data":["811C6052 03FC"],"options":null},"[Unlock all Code Key Doors]":{"note":"Code Key always Re-newed and Matching all Doors","data":["801C5C16 00FF"],"options":null}},"6420535A-50028062-C:45":{"Access All Levels":{"note":"","data":["8020850E 00FF","80208510 00FF"],"options":null},"Extended Tongue":{"note":"","data":["8133176E FFFF"],"options":null},"Have 99 Crowns":{"note":"","data":["80251767 0063"],"options":null},"Have All Levels Completed":{"note":"","data":["80208512 0019","80208513 0019","80208514 0015","80208515 0018","80208516 0017","80208517 0017"],"options":null},"Infinite Health":{"note":"","data":["80174CF3 000A"],"options":null},"Level Select":{"note":"","data":["8029087B 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06"}}},"64F1B7CA-71A23755-C:50":{"Have\\All Items":{"note":"","data":["50000501 0000","80389C4E 0001","50000301 0000","80389C55 0001","80389C5E 0001","80389C5F 0001","80389C61 0001","50000E01 0000","80389C64 0001"],"options":null},"Have\\Exp Points":{"note":"","data":["80389C4D 0063"],"options":null},"Have\\Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C33 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C49 0001","81389C4A 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C42 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C4D 0064"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C4C 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the GS button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C94 ????","89389C91 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CF1 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C8C 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C8C 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C41 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C46 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"650EFA96-30DDF9A7-C:50":{"Always Place 1st\\Player 1":{"note":"","data":["801BFF4F 0000"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801C020E 00FF"],"options":null},"Lap Timer Below 0'00'10\\Player 1":{"note":"","data":["811C00E6 0000"],"options":null},"Lap Timer Below 0'00'10\\Player 2":{"note":"","data":["811C045E 0000"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801C0077 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801C069A 0005","801C093A 0005"],"options":null},"Misses Don't Count\\Player 1":{"note":"","data":["801C007F 0000"],"options":null},"Misses Don't Count\\Player 2":{"note":"","data":["811C03F6 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800D8003 0007"],"options":null},"Set\\Speed Size":{"note":"","data":["801C0077 00??"],"options":{"Fast":"0F","Medium":"0A","Slow":"01"}},"Set\\Wave Size":{"note":"","data":["800E6B90 00??"],"options":{"Medium":"19","Oh My God":"FF","Rough":"64","Smooth":"00"}}},"65234451-EBD3346F-C:4A":{"Drive Through Anything\\Ballista":{"note":"","data":["803F8BF8 0001"],"options":null},"Drive Through Anything\\Dump Truck":{"note":"","data":["813EEBE8 0101"],"options":null},"Drive Through Anything\\Police Car":{"note":"","data":["813F8FD8 0101"],"options":null},"Drive Through Anything\\Red Car":{"note":"","data":["813FC658 0101"],"options":null},"Drive Through Anything\\Red, White, \u0026 Blue Car":{"note":"","data":["813EEFC8 0101"],"options":null},"Drive Through Anything\\Skyfall":{"note":"","data":["813EE438 0101"],"options":null},"Drive Through Anything\\Van":{"note":"","data":["813F93A8 0101"],"options":null},"Infinite\\Boosts Buggy Vehicle":{"note":"","data":["803EE491 0064"],"options":null},"Infinite\\Hydraulics Sidesweeper":{"note":"","data":["803EDCE1 0063"],"options":null},"Infinite\\Missiles Motor Bike":{"note":"","data":["803F8C53 0063"],"options":null},"J-Bomb Floats Through Anything":{"note":"","data":["803F7C5A 0001"],"options":null},"Rapid Fire\\Ballista":{"note":"","data":["803F8C5D 0000"],"options":null},"Rapid Fire\\Sideswipe":{"note":"","data":["803EDCE6 0000"],"options":null},"Sidesweep\\Can Go Through Anything":{"note":"","data":["803EDCE2 FFFF"],"options":null},"Sideswipe\\Can Go In Water":{"note":"","data":["803EDCE2 0063"],"options":null}},"65EEE53A-ED7D733C-C:45":{"Have All Spirits":{"note":"","data":["8010F51E 0007"],"options":null},"Have hammer\\Level 1":{"note":"Do not use with other level hammer cheats","data":["8010F291 0000"],"options":null},"Have hammer\\Level 2":{"note":"Do not use with other level hammer cheats","data":["8010F291 0001"],"options":null},"Have hammer\\Level 3":{"note":"Do not use with other level hammer cheats","data":["8010F291 0002"],"options":null},"Have jump boots\\Level 1":{"note":"Do not use with other level jump boots cheats","data":["8010F290 0000"],"options":null},"Have jump boots\\Level 2":{"note":"Do not use with other level jump boots cheats","data":["8010F290 0001"],"options":null},"Have jump boots\\Level 3":{"note":"Do not use with other level jump boots cheats","data":["8010F290 0002"],"options":null},"Have member\\Bombette":{"note":"","data":["8010F2BC 0001"],"options":null},"Have member\\Bow":{"note":"","data":["8010F2EC 0001"],"options":null},"Have member\\Goomario":{"note":"","data":["8010F2AC 0001"],"options":null},"Have member\\Kooper":{"note":"","data":["8010F2B4 0001"],"options":null},"Have member\\Lakitu":{"note":"","data":["8010F2E4 0001"],"options":null},"Have member\\Parrakary":{"note":"","data":["8010F2C4 0001"],"options":null},"Have member\\Sushie":{"note":"","data":["8010F2DC 0001"],"options":null},"Have member\\Watt":{"note":"","data":["8010F2D4 0001"],"options":null},"Have\\Attack item":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Dusty Hammer":"0086","Fire Flower":"0800","Pebble":"0085","Shooting Star":"0083","Snowman Doll":"0081","Thunder Bolt":"0084","Thunder Rage":"0082"}},"Have\\Defense item":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Mushroom":"008A","Repel Gel":"0097","Stone Cap":"0088","Volt Shroom":"008B"}},"Have\\Enemy Stats item":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Dizzy Dial":"009A","Fright Jar":"0098","POW Block":"0090","Sleep Sheep":"008F","Stop Watch":"0092"}},"Have\\Recovery Items Option 1":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Apple":"0094","Apple Pie":"00B1","Big Cookie":"00C0","Bland Meal":"00BD","Blue Berry":"009E","Boiled Egg":"00D8","Bubble Berry":"00A1","Cake Mix":"00AA","Coco Pop":"00CF","Deluxe Feast":"00BE","Dried Fruit":"00A8","Dried Pasta":"00A7","Dried Shroom":"008D","Egg":"005F","Electro Pop":"00CC","Fire Pop":"00CD","Fried Egg":"00C9","Fried Shroom":"00B6","Frozen Fries":"00D4","Goomnut":"00A5","Healthy Juice":"00BC","Honey Candy":"00CB","Honey Shroom":"00CA","Honey Super":"00C4"}},"Have\\Recovery Items Option 2":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Honey Syrup":"00A4","Honey Ultra":"00B2","Hot Shroom":"00B9","Iced Potato":"00AF","Jammin' Jelly":"00A2","Jelly Pop":"00D1","Jelly Shroom":"00DA","Jelly Super":"00C6","Jelly Ultra":"00B4","KooPasta":"00B5","Kooky Cookie":"00D3","Koopa Leaf":"00A6","Koopa Tea":"00C3","Lemon":"009C","Lemon Candy":"00D0","Life Shroom":"0095","Lime":"009D","Lime Candy":"0C0E","Maple Shroom":"00D7","Maple Super":"00C5","Maple Syrup":"00A3","Maple Ultra":"00B3","Melon":"00AD","Mistake":"00C2","Mushroom":"008A"}},"Have\\Recovery Items Option 3":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Nutty Cake":"00D6","Potato Salad":"00D5","Red Berry":"009F","Shroom Cake":"00B7","Shroom Steak":"00B8","Spaghetti":"00C7","Special Shake":"00BF","Spicy Soup":"00B0","Stinky Herb":"00AE","Strange Leaf":"00A9","Super Shroom":"008C","Super Soda":"009B","Sweet Shroom":"00BA","Tasty Tonic":"0089","Ultra Shroom":"008E","Whacka's Bump":"0093","Yellow Berry":"00A0","Yoshi Cookie":"00D9","Yummy Meal":"00BB"}},"Have\\Special Items Option 1":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Bucket":"0031","Calculator":"0030","Cook Book":"0029","Crystal Berry":"001E","Diamond Stone":"0017","Dictonary":"0024","Diploma":"000E","First Degree Card":"000A","Fourth Degree Card":"000D","Frying Pan":"0023","Hammer":"0004","Jade Raven":"002A","Kooper's Shell":"0019","Magical Bean":"0058","Magical Seed Brown-Orange":"002E","Magical Seed Green":"002D","Magical Seed Red":"002B","Mailbag":"0069","Melody":"0068","Scarf":"0032","Second Degree Card":"000B","Star Stone":"006C","Third Degree Card":"000C","Toy Train":"0021","Volcano Vase":"005B"}},"Have\\Special Items Options 1":{"note":"Only use One Have item Option at one time","data":["8110F444 ????"],"options":{"Artifact":"0053","Boo's Portrait":"001D","Bucket":"0131","Diploma":"010E","Dolly":"0156","Fertile Soil":"0159","Fortress Key":"0110","Golden Jar":"0118","Jade Raven":"012A","Jump":"0101","Kooper's Shell":"0119","Letter":"0150","Lunar Stone":"0115","Lyrics":"0067","Magical Bean":"0158","Magical Seed Blue":"012D","Magical Seed Purple":"012C","Miracle Water":"015A","Mystery Note":"0125","Record":"0122","Ultra Stone":"010F","Volcano Vase":"015B","Water Stone":"0157"}},"Infinite\\FP":{"note":"","data":["8010F295 0063","8010F296 0063"],"options":null},"Infinite\\HP":{"note":"","data":["8010F292 0063","8010F293 0063"],"options":null},"Infinite\\Star Power":{"note":"","data":["8010F520 0007","8010F521 0007"],"options":null},"Lots Of Coins":{"note":"","data":["8110F29C 03E7"],"options":null},"Max\\Badge Points":{"note":"","data":["8010F298 00??"],"options":{"127 Badge Points":"7F","60 Badge Points":"3C"}},"Max\\Level":{"note":"","data":["8010F299 0063"],"options":null},"Max\\Star Pieces":{"note":"","data":["8010F29F 0063"],"options":null},"Max\\Star Points":{"note":"","data":["8010F2A0 0063"],"options":null},"No Star Points (0)":{"note":"If emulator hangs at level up, enable this cheat and don't disable it whatsoever!","data":["8010F2A0 0000"],"options":null},"Upgrade member\\Level 1\\Bombette":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2BD 0001"],"options":null},"Upgrade member\\Level 1\\Bow":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2ED 0001"],"options":null},"Upgrade member\\Level 1\\Goomario":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2AD 0001"],"options":null},"Upgrade member\\Level 1\\Kooper":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2B5 0001"],"options":null},"Upgrade member\\Level 1\\Lakitu":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2E5 0001"],"options":null},"Upgrade member\\Level 1\\Parrakary":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2C5 0001"],"options":null},"Upgrade member\\Level 1\\Sushie":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2DD 0001"],"options":null},"Upgrade member\\Level 1\\Watt":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2D5 0001"],"options":null},"Upgrade member\\Level 2\\Bombette":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2BD 0002"],"options":null},"Upgrade member\\Level 2\\Bow":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2ED 0002"],"options":null},"Upgrade member\\Level 2\\Goomario":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2AD 0002"],"options":null},"Upgrade member\\Level 2\\Kooper":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2B5 0002"],"options":null},"Upgrade member\\Level 2\\Lakitu":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2E5 0002"],"options":null},"Upgrade member\\Level 2\\Parrakary":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2C5 0002"],"options":null},"Upgrade member\\Level 2\\Sushie":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2DD 0002"],"options":null},"Upgrade member\\Level 2\\Watt":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2D5 0002"],"options":null},"Widescreen":{"note":"","data":["8102D574 2407","8102D576 018A"],"options":null}},"661B45F3-9ED6266D-C:50":{"Anger metre always full":{"note":"","data":["800D9B38 00FF","800D9826 00FF"],"options":null},"Crunched Players":{"note":"","data":["800DFC2D 003F"],"options":null},"Difficulty Mod":{"note":"","data":["801247F9 00??"],"options":{"Easy":"01","Hard":"03","Medium":"02","Very Easy":"00"}},"Extra Teams":{"note":"","data":["80115A0C 0001"],"options":null},"Get In Fights Constantly":{"note":"","data":["800D3926 0020"],"options":null},"Max Score\\Team 1":{"note":"","data":["80120221 00??"],"options":{"30 Points":"1E","50 Points":"23","75 Points":"4B","99 Points":"63","Zero Points":"00"}},"Max Score\\Team 2":{"note":"","data":["80123731 00??"],"options":{"30 Points":"1E","50 Points":"23","75 Points":"4B","99 Points":"63","Zero Points":"00"}},"Players\\Head Size":{"note":"","data":["8111CBEC ????"],"options":{"Normal Size":"3F80","Very Large":"4080","Very Small":"3F00"}},"Players\\Height Size":{"note":"","data":["81124848 ????"],"options":{"Giants":"4080","Large":"3FC0","Midgets":"3F00","Normal Size":"3F80"}}},"664BA3D4-678A80B7-C:45":{"Enable All Courses":{"note":"","data":["81130CEE FFFF"],"options":null},"Have All Characters":{"note":"","data":["50000E02 0001","810C28E4 0000"],"options":null},"Max Gold Mario Badges Player 1":{"note":"","data":["800C545B 0063"],"options":null},"No Wind":{"note":"","data":["810BA9F1 0000","800BA9F3 0000"],"options":null},"Unlimited\\Power Hits\\Player 1":{"note":"","data":["801B71F8 0004"],"options":null},"Unlimited\\Power Hits\\Player 2":{"note":"","data":["801B72B0 0004"],"options":null},"Unlimited\\Power Hits\\Player 3":{"note":"","data":["801B7368 0004"],"options":null},"Unlimited\\Power Hits\\Player 4":{"note":"","data":["801B7420 0004"],"options":null},"Widescreen":{"note":"","data":["8102F29A 3FE3","D12020F6 3FAA","812020F6 3FE3"],"options":null},"Zero Strokes Taken":{"note":"","data":["801B71F3 0000"],"options":null}},"66572080-28E348E1-C:4A":{"Infinite Hp":{"note":"","data":["802016A7 0000"],"options":null},"Infinite Sp":{"note":"","data":["802016AB 005A"],"options":null},"Infinite Time":{"note":"","data":["80260BDE 0000"],"options":null},"Play As":{"note":"","data":["801B9D5C 00??"],"options":{"1st BOSS":"08","DAITARN 3":"02","DANCOUGAR":"03","DUNBINE":"05","FINAL BOSS":"00","R1":"01","SHINING GUNDAM":"04","VOLTES V":"07","WALKER GALLIER":"06"}},"Player 2 Health Mod":{"note":"","data":["80206AF7 00??"],"options":{"Infinite Health":"00","Instant Death":"C8"}}},"665FD963-B5CC6612-C:44":{"Diffuculty Modifier":{"note":"","data":["8011956F 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Gems":{"note":"","data":["80128E97 00FF"],"options":null},"Have\\All Level Keys":{"note":"","data":["50000604 0000","80128D73 0007","80128D8B 001F","80128DAB 00FF"],"options":null},"Have\\All Weapons":{"note":"","data":["50000B04 0000","80128D47 0001","80128D33 0001"],"options":null},"Have\\Backpack":{"note":"","data":["80128C7B 0001","80128CBB 0001"],"options":null},"Infinite\\Air":{"note":"","data":["80129070 0063","801E862A 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128CF3 00FF","80128D03 00FF","80128D0F 00FF","50000504 0000","80128D13 00FF","80128E9B 00FF","80128E97 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128D26 5B23","80128D67 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C15C4 1E61","812A2534 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["80128E9B 00FF"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114F85A F803","81128CDE 0003","81128CE2 0003","81128CE6 0003","81128CEA 0003","81128CEE 0003","81128CF2 0003","81128CF6 0005"],"options":null}},"66751A57-54A29D6E-C:4A":{"Boots Of Speed Select\\Player 1":{"note":"","data":["8113D5E8 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113D784 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113D920 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113DABC ????"],"options":{"Off":"0000","On":"03FF"}},"Enable Cheat Menu":{"note":"","data":["801370C7 0005","81136FEA FFFF"],"options":null},"Have All\\Armour":{"note":"","data":["8013D541 0019","8013D545 0014","8013D549 0014","8013D54D 0014"],"options":null},"Have All\\Items And Artifacts":{"note":"","data":["8013D551 0001","8013D553 00FF","8013D555 0002","8013D557 00FF","8013D559 0003","8013D55B 00FF","8013D55D 0004","8013D55F 00FF","8013D561 0005","8013D563 00FF","8013D565 0006","8013D567 00FF","8013D569 0007","8013D56B 00FF","8013D56D 0008","8013D56F 00FF","8013D571 0009","8013D573 00FF","8013D575 000A","8013D577 00FF","8013D579 000B","8013D57B 00FF","8013D57D 000C","8013D57F 00FF","8013D581 000D","8013D583 00FF","8013D585 000E","8013D587 00FF","8013D589 000F","8013D58B 00FF","8013D58D 0010","8013D58F 00FF","8013D591 0011","8013D593 00FF","8013D595 0012","8013D597 00FF","8013D599 0013","8013D59B 00FF","8013D59D 0014","8013D59F 00FF","8013D5A1 0015","8013D5A3 00FF","8013D5A5 0016","8013D5A7 00FF","8013D5A9 0017","8013D5AB 00FF","8013D5AD 0018","8013D5AF 00FF","8013D5B1 0019","8013D5B3 00FF","8013D5B5 001B","8013D5B7 00FF","8013D5B9 001C","8013D5BB 00FF","8013D5BD 001D","8013D5BF 00FF","8013D5C1 001E","8013D5C3 00FF","8013D5C5 001F","8013D5C7 00FF","8013D5C9 0020","8013D5CB 00FF","8013D5D9 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113D5EC 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113D788 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113D924 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113DAC0 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013D605 00FF","8013D607 00FF","8013D609 00FF","8013D60B 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013D7A1 00FF","8013D7A3 00FF","8013D7A5 00FF","8013D7A7 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013D93D 00FF","8013D93F 00FF","8013D941 00FF","8013D943 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013DAD9 00FF","8013DADB 00FF","8013DADD 00FF","8013DADF 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013D60D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013D7A9 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013D945 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013DAE1 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013D60F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013D7AB 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013D947 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013DAE3 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113D5DC ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113D778 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113D914 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113DAB0 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113D5DC FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113D778 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113D914 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113DAB0 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8013D5E3 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113D77E ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113D91A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113DAB6 ????"],"options":{"Off":"0000","On":"03FF"}}},"66A24BEC-2EADD94F-C:45":{"Widescreen":{"note":"UI Partially Fixed. Also has Shorter Draw Distance.","data":["810007DC 3FE3","D10C1E6A 0D60","810C1E66 FE00","D10C1E6A 0D60","810C1E7A 0200","8103A51C C0AA"],"options":null}},"66CF0FFE-AD697F9C-C:50":{"Infinite Lives":{"note":"","data":["810CE462 03E7"],"options":null},"Infinite health":{"note":"","data":["810C8B0E 03E7"],"options":null},"Level Select":{"note":"Scroll With C-Left \u0026 C-Right Level Select Available, At The Player Select Top Screen","data":["810A590E 0001"],"options":null},"Score Aid":{"note":"","data":["810CD912 29AA"],"options":null}},"673D099B-A4C808DE-C:45":{"Always Full Special\\Boris":{"note":"","data":["811543DC 0044"],"options":null},"Always Full Special\\Curtis":{"note":"","data":["811541C0 0044"],"options":null},"Always Full Special\\George":{"note":"","data":["81154814 0044"],"options":null},"Always Full Special\\Lizzie":{"note":"","data":["81154A30 0044"],"options":null},"Always Full Special\\Myukus":{"note":"","data":["81554E68 0044"],"options":null},"Always Full Special\\Ralph":{"note":"","data":["81154C4C 0044"],"options":null},"Always Full Special\\Ruby":{"note":"","data":["811545F8 0044"],"options":null},"Enable George":{"note":"","data":["8118CF92 0000"],"options":null},"Enable\\Lizzie":{"note":"","data":["8118CF94 0000"],"options":null},"Enable\\Myukus":{"note":"","data":["8118CF98 0000"],"options":null},"Enable\\Ralph":{"note":"","data":["8118CF96 0000"],"options":null},"Infinite Health\\George":{"note":"","data":["8115480C 0044"],"options":null},"Infinite Health\\Lizzie":{"note":"","data":["81154A28 0044"],"options":null},"Infinite Health\\Ralph":{"note":"","data":["81154C44 0044"],"options":null},"Infinite Lives\\George":{"note":"","data":["81154808 0063"],"options":null},"Infinite Lives\\Lizzie":{"note":"","data":["81154A24 0063"],"options":null},"Infinite Lives\\Ralph":{"note":"","data":["81154C40 0063"],"options":null},"Infinite\\Health\\Boris":{"note":"","data":["811543D4 0044"],"options":null},"Infinite\\Health\\Curtis":{"note":"","data":["811541B8 0044"],"options":null},"Infinite\\Health\\Myukus":{"note":"","data":["81154E60 0044"],"options":null},"Infinite\\Health\\Ruby":{"note":"","data":["811545F0 0044"],"options":null},"Infinite\\Lives\\Boris":{"note":"","data":["811543D0 0063"],"options":null},"Infinite\\Lives\\Curtis":{"note":"","data":["811541B4 0063"],"options":null},"Infinite\\Lives\\Myukus":{"note":"","data":["81154EFC 0063"],"options":null},"Infinite\\Lives\\Ruby":{"note":"","data":["811545EC 0063"],"options":null}},"67D20729-F696774C-C:4A":{"Bonus Stage Character Modifier (Training Mode)":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["8018D193 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Give Kirby A Wierd Blow-Up":{"note":"","data":["8025C118 000A"],"options":null},"Have All Characters":{"note":"","data":["810A28F8 0FF0"],"options":null},"P1 Press Down On D-Pad To Make Items Appear In Random Spots":{"note":"","data":["D109CF64 0400","8118B062 0001"],"options":null},"Story Mode\\Always Get Pacifist (60,000 Points)":{"note":"","data":["810A2B2E 0000"],"options":null},"Story Mode\\Infinite Time":{"note":"","data":["810A2AEE 43CB"],"options":null},"Story Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code could also result freezing at the end of the Level.","data":["800A2AFB 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 1\\Infinite Lives":{"note":"","data":["800A2B03 0004"],"options":null},"Story Mode\\Player 1\\Kirby B Button Move\\Congo Jungle":{"note":"","data":["8026EA8F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Fighting Polygon Team":{"note":"","data":["802606DF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["80266ACF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Kirby's Dreamland":{"note":"","data":["8026BAFF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Master Hand Stage":{"note":"","data":["8026FC0F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Metal Mario Stage":{"note":"","data":["80261557 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Peach's Castle":{"note":"","data":["80261D5F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Planet Zebes":{"note":"","data":["8026DF67 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Saffron City":{"note":"","data":["80271A57 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["8026F0B7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["80266E0F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Low % Health":{"note":"","data":["810A2B46 0000"],"options":null},"Story Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2B6F 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 2\\Infinite Lives":{"note":"","data":["800A2B77 0004"],"options":null},"Story Mode\\Player 2\\Low % Health":{"note":"","data":["810A2BBA 0000"],"options":null},"Story Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2BE3 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 3\\Infinite Lives":{"note":"","data":["800A2BEB 0004"],"options":null},"Story Mode\\Player 3\\Low % Health":{"note":"","data":["810A2C2E 0000"],"options":null},"Story Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2C57 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 4\\Infinite Lives":{"note":"","data":["800A2C5F 0004"],"options":null},"Story Mode\\Player 4\\Low % Health":{"note":"","data":["810A2CA2 0000"],"options":null},"Story Mode\\Skip Straight To Master Hand":{"note":"","data":["800A2AA7 000D"],"options":null},"VS. Mode\\Have Mushroom Kindom":{"note":"","data":["800A28F7 00FF"],"options":null},"VS. Mode\\Infinite Time":{"note":"","data":["810A2CDE 43CB"],"options":null},"VS. Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2CEB 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["802619AF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["80269F47 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["8026C277 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Low % Health":{"note":"","data":["810A2D36 0000"],"options":null},"VS. Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2D5F 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 2\\Low % Health":{"note":"","data":["810A2DAA 0000"],"options":null},"VS. Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2DD3 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 3\\Low % Health":{"note":"","data":["810A2E1E 0000"],"options":null},"VS. Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2E47 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 4\\Low % Health":{"note":"","data":["810A2E92 0000"],"options":null},"Widescreen":{"note":"Minor Menu Misalignments","data":["8103BC94 3FE3","8110AE98 3C07","8110AE9A 3FE8","810CEE44 3C07","810CEE46 3FE8"],"options":null}},"67D21868-C5424061-C:50":{"Infinite Energy\\Player 1":{"note":"","data":["800ACB89 00??"],"options":{"Max":"40","None":"00"}},"Infinite Energy\\Player 2":{"note":"","data":["800ACC79 00??"],"options":{"Max":"3F","None":"00"}},"Infinite Match Time":{"note":"","data":["800ABC33 0000"],"options":null},"Super Attacks\\Player 1":{"note":"","data":["800ACB8D 00??"],"options":{"3":"03","None":"00"}},"Super Attacks\\Player 2":{"note":"","data":["800ACC7D 00??"],"options":{"3":"03","None":"00"}},"Unlock Extras":{"note":"","data":["800ACD55 00FF","800ACD57 00FF"],"options":null}},"67FF12CC-76BF0212-C:4A":{"Extra Gems":{"note":"","data":["D016523B 0000","8016523B 004B"],"options":null},"Full\\Bomb Power":{"note":"","data":["80165239 0003"],"options":null},"Full\\Fire Power":{"note":"","data":["8016523A 0003"],"options":null},"Infinite\\Health":{"note":"","data":["8016523E 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["8016523D 0009"],"options":null},"Max\\Bombs":{"note":"","data":["80165239 0008"],"options":null},"Max\\Explosion":{"note":"","data":["8016523A 0008"],"options":null},"Max\\Score":{"note":"","data":["80177601 00FF","80177602 00FF"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D005A2F5 0020","81154178 41CB","D005A2F5 0020","D0154154 0000","80154154 0040"],"options":null},"Widescreen":{"note":"","data":["81036CE4 3C07","81036CE8 3FE3"],"options":null}},"68D7A1DE-0079834A-C:50":{"Access\\All Characters":{"note":"","data":["80208910 FFFF"],"options":null},"Access\\All Floyd Awards":{"note":"only enable One character at a time when using this code","data":["50000501 0000","80208908 0005"],"options":null},"All Single Player Levels Unlocked":{"note":"All Charcters","data":["80208AA0 00FF","80208AA1 00FF","80208B16 00FF","80208B17 00FF","80208B8C 00FF","80208B8D 00FF"],"options":null},"Infinite Continues":{"note":"","data":["800A34F1 0063"],"options":null},"Juno\\Access\\All Keys":{"note":"","data":["81208B18 FFF7"],"options":null},"Juno\\Access\\All Objects":{"note":"","data":["81208B1A FFFF"],"options":null},"Juno\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["80208ABC 00FF","80208ABD 00FF"],"options":null},"Juno\\All Single Player Levels Unlocked":{"note":"","data":["80208B16 00FF","80208B17 00FF"],"options":null},"Juno\\Full \u0026 Max Health":{"note":"","data":["80208AB5 000C","80208AB2 0040"],"options":null},"Juno\\Infinite\\Max Ammo All Guns":{"note":"","data":["50000302 0000","81208AC6 03E7","50000802 0000","81208ACC 03E7","50000402 0000","81208ADC 03E7"],"options":null},"Juno\\Infinite\\Mizar Tokens":{"note":"","data":["81208AC4 03E7"],"options":null},"Juno\\Max Blue \u0026 White Heads":{"note":"","data":["81208ABA 03E7","81208AB8 03E7"],"options":null},"Lupus\\Access\\All Keys":{"note":"","data":["81208B8E FF70"],"options":null},"Lupus\\Access\\All Objects":{"note":"","data":["81208B90 FFFF"],"options":null},"Lupus\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["80208B32 00FF","80208B33 00FF"],"options":null},"Lupus\\All Single Player Levels Unlocked":{"note":"","data":["80208B8C 00FF","80208B8D 00FF"],"options":null},"Lupus\\Full \u0026 Max Health":{"note":"","data":["80208B2B 000C","80208B28 0040"],"options":null},"Lupus\\Infinite\\Max Ammo All Guns":{"note":"","data":["50000302 0000","81208B3C 03E7","50000802 0000","81208B42 03E7","50000402 0000","81208B52 03E7"],"options":null},"Lupus\\Infinite\\Mizar Tokens":{"note":"","data":["81208B3A 03E7"],"options":null},"Lupus\\Max\\Blue \u0026 White Heads":{"note":"","data":["81208B30 03E7","81208B2E 03E7"],"options":null},"Tribals\\Gold Wood\\Have All Tribals":{"note":"","data":["802088E4 000F"],"options":null},"Tribals\\Gold Wood\\Have No Tribals Remaining":{"note":"","data":["802088E6 0000"],"options":null},"Tribals\\Gold Wood\\No Tribals Killed":{"note":"","data":["802088E5 0000"],"options":null},"Vela\\Access\\All Keys":{"note":"","data":["81208AA2 FF70"],"options":null},"Vela\\Access\\All Objects":{"note":"","data":["81208AA4 FFFF"],"options":null},"Vela\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["80208A46 00FF","80208A47 00FF"],"options":null},"Vela\\All Single Player Levels Unlocked":{"note":"","data":["80208AA0 00FF","80208AA1 00FF"],"options":null},"Vela\\Full \u0026 Max Health":{"note":"","data":["80208A3F 000C","80208A3C 0040"],"options":null},"Vela\\Infinite\\Max Ammo All Guns":{"note":"","data":["50000302 0000","81208A50 03E7","50000802 0000","81208A56 03E7","50000402 0000","81208A66 03E7"],"options":null},"Vela\\Infinite\\Mizar Tokens":{"note":"","data":["81208A4E 03E7"],"options":null},"Vela\\Max\\Blue \u0026 White Heads":{"note":"","data":["81208A44 03E7","81208A42 03E7"],"options":null},"[Resolution Fix]":{"note":"","data":["800FE6F2 0003","800FE6DE 0003","800FEDEA 00D0"],"options":null}},"68E8A875-0CE7A486-C:50":{"Always Special\\Player 1":{"note":"","data":["800F9D35 0008"],"options":null},"Always Special\\Player 2":{"note":"","data":["800FA0E5 0008"],"options":null},"Always Special\\Player 3":{"note":"","data":["800FA495 0008"],"options":null},"Always Special\\Player 4":{"note":"","data":["800FA845 0008"],"options":null},"Character Select\\Player 1":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890F9D36 0240","890F9D60 42B4","8107E8B2 ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 2":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA0E6 0240","890FA110 42B4","8107E8B6 ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 3":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA496 0240","890FA4C0 42B4","8107E8BA ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 4":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA846 0240","890FA870 42B4","8107E8BE ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Extra Characters \u0026 Modes":{"note":"","data":["8107F07C FFFF"],"options":null},"Get Title Belt In 1-Match":{"note":"","data":["80038AAB 0008"],"options":null},"Infinite Time":{"note":"","data":["800FAF87 0000"],"options":null},"Infinite Time Out Of Ring":{"note":"","data":["800FACE8 0014"],"options":null},"Spirit Select\\Player 1":{"note":"","data":["800F9D25 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 2":{"note":"","data":["800FA0D5 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 3":{"note":"","data":["800FA485 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 4":{"note":"","data":["800FA835 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Ultimate Code\\Player 1":{"note":"","data":["800F9D24 0064"],"options":null},"Ultimate Code\\Player 2":{"note":"","data":["800FA0D4 0064"],"options":null},"Ultimate Code\\Player 3":{"note":"","data":["800FA484 0064"],"options":null},"Ultimate Code\\Player 4":{"note":"","data":["800FA834 0064"],"options":null},"Weapon Select\\Player 1":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800F9D31 0003","800F98E1 00??","800F98E2 0000","800F99A0 0000"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 2":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA0E1 0003","800F9911 00??","800F9912 0001","800F99A1 0001"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 3":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA491 0003","800F9941 00??","800F9942 0002","800F99A2 0002"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 4":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA841 0003","800F9971 00??","800F9972 0003","800F99A3 0003"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}}},"68FCF726-49658CBC-C:50":{"Have All Extras Open":{"note":"This Code opens all extra stages in VS Battles,Team Battle 1P, Team Battles VS,Tag Battle and Practice Modes. Extra Male and Female Body in Create A Fighter Character and Have Extra Characters (Gouriki \u0026 Reiji)","data":["8009E31F 00FF"],"options":null},"Music Modifier":{"note":"","data":["8009E21E 00??"],"options":{"Monaural":"01","Music Off":"02","Stereo":"00"}},"Player 1\\Character Modifier":{"note":"This Allows you to play as any Character you choose in any Mode","data":["80105001 00??"],"options":{"Azami":"00","Gouriki":"08","Hikari":"0B","Invisible Fighter":"0C","Kai":"03","Kaoru":"07","Kengon":"05","Kyeya":"06","Miki":"02","Reiji":"09","Sakai":"04","Serina":"01","Yami":"0A"}},"Player 1\\Infinite Energy":{"note":"","data":["81105026 03E8"],"options":null},"Player 1\\Need 1 Round to Win":{"note":"","data":["D009E334 0000","8009E334 0001"],"options":null},"Player 1\\Player 2 Has No Energy":{"note":"Press C-Button Up and Player 2 will lose All Health resulting in a Instant K.O.","data":["D0044461 0008","8111B3BE 0000"],"options":null},"Player 1\\Player 2 Never Wins":{"note":"","data":["8009E3F5 0000"],"options":null},"Player 2\\Character Modifier":{"note":"This Allows you to play as any Character you choose in any Mode","data":["8011B399 00??"],"options":{"Azami":"00","Gouriki":"08","Hikari":"0B","Invisible Fighter":"0C","Kai":"03","Kaoru":"07","Kengon":"05","Kyeya":"06","Miki":"02","Reiji":"09","Sakai":"04","Serina":"01","Yami":"0A"}},"Player 2\\Infinite Energy":{"note":"","data":["8111B3BE 03E8"],"options":null},"Player 2\\Need 1 Round to Win":{"note":"","data":["D009E335 0000","8009E335 0001"],"options":null},"Player 2\\Player 1 Has No Energy":{"note":"Press C-Button Up and Player 1 will lose All Health resulting in a Instant K.O.","data":["D0044467 0008","81105026 0000"],"options":null},"Player 2\\Player 1 Never Wins":{"note":"","data":["8009E3F4 0000"],"options":null}},"69256460-B9A3F586-C:45":{"Max Money\\Player 1":{"note":"","data":["81058122 FFFF"],"options":null},"Max Money\\Player 2":{"note":"","data":["81058124 FFFF"],"options":null},"Max Money\\Player 3":{"note":"","data":["81058126 FFFF"],"options":null}},"693BA2AE-B7F14E9F-C:45":{"Always Have Wallet Size":{"note":"","data":["8011AD22 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C8B65 0010","8111BFE6 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset,","data":["8011BB69 00FF","8011BFDF 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C8D75 0000","8011C093 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["80025CC4 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011AD06 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011AD07 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011AD08 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011AD09 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023EFBF 0020","8023EFC5 0033"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F3D38 0005","801F3EF8 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["8011AD22 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011AD23 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011AD21 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111AD1C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111AD24 30FF","8111AD26 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011ACF8 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011ACFE 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011AD04 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011ACFC 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011ACF6 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011AD00 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011ACF5 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011ACF4 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011ACF7 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011ACFA 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011ACFD 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011AD01 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011AD02 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011ACF9 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011ACFF 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011AD05 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011AD03 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011ACFB 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011AD0F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011AD28 0007","8011AD29 0007","8011AD2A 0007","8011AD2B 0007","8011AD2C 0007","8011AD2D 0007","8011AD2E 0007","8011AD2F 0007","8011AD30 0007","8011AD31 0007","8011AD32 0007","8011AD3F 0009","8011AD40 0009","8011AD41 0009","8011AD42 0009","8011AD43 0009","8011AD49 0009","8011AD4C 0009","8011AD47 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011AD14 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011AD0E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011AD0D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011AD12 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011AD0C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111ACB0 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011ACB9 0008","8011ACBA 0001","8011ACBC 0001","8011ACB3 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011AD1A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111C04C 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011C211 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011C215 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C8D75 0020","811DB350 40CB","D01C8D75 0000","811DBB72 000D","8011ACF0 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011AD4F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011AD51 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111ACAE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111C048 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C8D75 0020","811DBB72 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C8D75 0020","811DB350 40CB"],"options":null},"Press L+R For FMV Select":{"note":"Hold down `L+R' after the Nintendo logo is spinning to see your favourite FMV","data":["D01C8D75 0030","8011AC83 00A0","D01C8D75 0030","8011AC8B ????"],"options":{"anondorf FMV":"F600","ire FMV":"F50F","lanet Making FMV":"F400","nding":"F80E","ore Triforce FMV":"F700","riforce FMV":"F200"}},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C8D75 0010","8011AC87 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111AC8C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011AD0A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011AD0B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011ACF0 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011ACBE 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111BEA2 0000","8111BEA4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}},"Widescreen":{"note":"","data":["81025188 2402","81092718 3C07","8109271A 3FE3"],"options":null}},"693BA2AE-B7F14E9F-C:4A":{"Always Have Wallet Size":{"note":"","data":["8011AD22 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C8B65 0010","8111BFE6 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011BB69 00FF","8011BFDF 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C8D75 0000","8011C093 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest 01).","data":["80025CC4 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011AD06 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011AD07 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011AD08 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011AD09 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801D927A 0006","801F28B8 0001","801EF338 0001"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.If you Use Black Gauntlets,They are as strong as the Golden Gauntlets. This code also gives you the Silver Scale and the Golden Scale and unlimited rupees.","data":["8011AD22 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011AD23 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011AD21 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111AD1C 7777"],"options":null},"Have\\All Quest/Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111AD24 30FF","8111AD26 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011ACF8 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011ACFE 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011AD04 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011ACFC 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011ACF6 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011AD00 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011ACF5 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011ACF4 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011ACF7 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011ACFA 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011ACFD 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011AD01 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011AD02 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011ACF9 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011ACFF 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011AD05 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011AD03 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011ACFB 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011AD0F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011AD28 0007","8011AD29 0007","8011AD2A 0007","8011AD2B 0007","8011AD2C 0007","8011AD2D 0007","8011AD2E 0007","8011AD2F 0007","8011AD30 0007","8011AD31 0007","8011AD32 0007","8011AD3F 0009","8011AD40 0009","8011AD41 0009","8011AD42 0009","8011AD43 0009","8011AD49 0009","8011AD4C 0009","8011AD47 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011AD14 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011AD0E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011AD0D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011AD12 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011AD0C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111ACB0 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011ACB9 0008","8011ACBA 0001","8011ACBC 0001","8011ACB3 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011AD1A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111C04C 0001"],"options":null},"Infinite\\Timers\\All other Timers":{"note":"This cheat works on all Race Timers.Under Water with iron Boots etc.","data":["8011C051 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011C055 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C8D75 0020","811DB350 40CB","D01C8D75 0000","811DBB72 000D","8011ACF0 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011AD4F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011AD51 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111ACAE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111C048 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C8D75 0020","811DBB72 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C8D75 0020","811DB350 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C8D75 0010","8011AC87 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111AC8C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011AD0A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011AD0B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011ACF0 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011ACBE 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111BEA2 0000","8111BEA4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"69458B9E-FC95F936-C:4A":{"Have All\\Cups Select":{"note":"","data":["50002C02 0000","800CD611 00??"],"options":{"Bronze Cup":"02","Gold Cup":"00","None (Default)":"04","Silver Cup":"01"}},"Have All\\Points":{"note":"","data":["810D96E0 03E7"],"options":null},"Have All\\RB Medals":{"note":"","data":["810D96F0 03E7"],"options":null},"Infinite\\Credits":{"note":"","data":["800BE145 0005"],"options":null},"Infinite\\Timer":{"note":"","data":["810D9788 44E9"],"options":null},"Infinite\\Turbos":{"note":"Only turn this on ingame or it will freeze the game","data":["D00F3456 0020","800CD791 00??"],"options":{"Off":"00","On":"08"}},"Laps To Race":{"note":"Here you can select what Turbo feature you prefer.","data":["800C9009 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","7 Laps":"07","8 Laps":"08","9 Laps":"09","Laps":"06"}},"[Cheat Menu]":{"note":"Press Pause to access cheats.","data":["800CD789 00FF","800CD78A 00FF","800CD78B 00FF"],"options":null},"[Press F9]\\Enable All Courses":{"note":"","data":["890CD5F2 0B00","890CD5F4 0B00","890CD5F6 0B00"],"options":null},"[Press F9]\\Extra Characters":{"note":"","data":["890C6ADF 01FF"],"options":null},"[Press F9]\\Progress 100%":{"note":"","data":["50000801 0000","880CD600 0003","50000801 0000","880CD601 00FF"],"options":null}},"69AE0438-2C63F3F3-C:4A":{"All Equipment Upgrades":{"note":"","data":["801EF77D 0023","811EF7CA 201B"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D01FBC91 0000","801EF712 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Have All\\Masks":{"note":"","data":["801EF798 005A","801EF799 0055","801EF79A 0063","801EF79B 0061","801EF79C 005C","801EF79D 004E","801EF79E 0056","801EF79F 0062","801EF7A0 0054","801EF7A1 005E","801EF7A2 0064","801EF7A3 004F","801EF7A4 0058","801EF7A5 0059","801EF7A6 0053","801EF7A7 005B","801EF7A8 0052","801EF7A9 0050","801EF7AA 005F","801EF7AB 005D","801EF7AC 0057","801EF7AD 0060","801EF7AE 0065","801EF7AF 0051"],"options":null},"Have All\\Quest Status Items":{"note":"","data":["801EF7CD 0005","811EF7CE F7CF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801EF782 0002"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801EF783 0003"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801EF784 0004"],"options":null},"Have\\Bombchu":{"note":"","data":["801EF787 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801EF786 0006"],"options":null},"Have\\Bottle Modifier\\1":{"note":"","data":["801EF792 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\2":{"note":"","data":["801EF793 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\3":{"note":"","data":["801EF794 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\4":{"note":"","data":["801EF795 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\5":{"note":"","data":["801EF796 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\6":{"note":"","data":["801EF797 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Deku Nuts":{"note":"","data":["801EF789 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801EF788 0008"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801EF790 0010"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801EF781 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801EF78F 000F"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801EF78E 000E"],"options":null},"Have\\Magic Beans":{"note":"","data":["801EF78A 000A"],"options":null},"Have\\Ocarina of Time":{"note":"","data":["801EF780 0000"],"options":null},"Have\\Pictograph":{"note":"","data":["801EF78D 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801EF78C 000C"],"options":null},"Infinite\\Arrows":{"note":"","data":["801EF7B1 0063"],"options":null},"Infinite\\Bombchus":{"note":"","data":["801EF7B7 0063"],"options":null},"Infinite\\Bombs":{"note":"","data":["801EF7B6 0063"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801EF7B9 0063"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801EF7B8 0063"],"options":null},"Infinite\\Health":{"note":"","data":["811EF746 0140"],"options":null},"Infinite\\Hearts Options":{"note":"","data":["811EF744 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Magic Beans":{"note":"","data":["801EF7BA 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801EF749 0060","811EF750 0101"],"options":null},"Infinite\\Powder Kegs":{"note":"","data":["801EF7BC 0063"],"options":null},"Infinite\\Rupees":{"note":"","data":["811EF74A 03E7"],"options":null},"Play As":{"note":"","data":["801EF730 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03E6FCB 0020","814002C8 40CB"],"options":null},"Replace Sword With":{"note":"","data":["801EF75C 00??"],"options":{"Deity Link's Sword":"10","Fire Arrow w/ Bow":"02","Hero's Bow":"00","Ice Arrow w/ Bow":"03","Light Arrow w/ Bow":"04"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01FBC96 0008","811EF726 FFFD","D01FBC96 0004","811EF726 0000","D01FBC96 0002","811EF726 FFFE"],"options":null},"Warp Modifier":{"note":"Put this code on and press the start button and it will now take where you wanted to go, turn it back off after you have got there.","data":["D03E6FCA 0000","803FF805 0001","813FF80A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"6A121930-665CC274-C:45":{"Away Team\\Infinite Time-Outs":{"note":"Do not use this with the No Time Out's Cheat","data":["8013C2D7 0009","80140863 0009"],"options":null},"Away Team\\No Time-Outs":{"note":"Do not use this with the Infinite Time Out's Cheat","data":["8013C2D7 0000","80140863 0000"],"options":null},"Away Team\\Scores":{"note":"","data":["8013C2B3 00??"],"options":{"10 Points":"0A","100 Points":"64","20 Points":"14","200 Points":"C8","250 Points":"FA","40 Points":"28","60 Points":"3C","80 Points":"50","No Points":"00"}},"Create A Player\\Max 3 Point":{"note":"","data":["8013FF99 0063"],"options":null},"Create A Player\\Max Ball Control":{"note":"","data":["8013FFA1 0063"],"options":null},"Create A Player\\Max Block":{"note":"","data":["8013FF9D 0063"],"options":null},"Create A Player\\Max Field Goal":{"note":"","data":["8013FF98 0063"],"options":null},"Create A Player\\Max Free Throw":{"note":"","data":["8013FF9A 0063"],"options":null},"Create A Player\\Max Power":{"note":"","data":["8013FFA2 0063"],"options":null},"Create A Player\\Max Rebound":{"note":"","data":["8013FF9C 0063"],"options":null},"Create A Player\\Max Speed":{"note":"","data":["8013FF9F 0063"],"options":null},"Create A Player\\Max Steal":{"note":"","data":["8013FF9E 0063"],"options":null},"Home Team\\Infinite Time-Outs":{"note":"Do not use this with the No Time Out's Cheat","data":["8013C2D6 0009","80140862 0009"],"options":null},"Home Team\\No Time-Outs":{"note":"Do not use this with the Infinite Time Out's Cheat","data":["8013C2D6 0000","80140862 0000"],"options":null},"Home Team\\Scores":{"note":"","data":["8013C2B1 00??"],"options":{"10 Points":"0A","100 Points":"64","20 Points":"14","200 Points":"C8","250 Points":"FA","40 Points":"28","60 Points":"3C","80 Points":"50","No Points":"00"}},"No Shot Clock":{"note":"","data":["81140E1E FFFF"],"options":null},"Options\\27 Time Out Limit":{"note":"","data":["8013D867 00??"],"options":{"No":"01","Yes":"00"}},"Options\\3 Second Violation":{"note":"","data":["80144994 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\5 Second Violation":{"note":"","data":["80144993 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\Back Court":{"note":"","data":["80144996 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}},"Options\\Camera View":{"note":"","data":["8013D86A 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\FT. Penalty Situations":{"note":"","data":["80144999 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}},"Options\\Foul Out":{"note":"","data":["80144995 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}},"Options\\Goal Tending":{"note":"","data":["80144998 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}},"Options\\Level":{"note":"","data":["8013D864 00??"],"options":{"Enjoy":"00","Exciting":"01","Super Challenge":"02"}},"Options\\Out Of Bounds":{"note":"","data":["80144990 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\Player Display":{"note":"","data":["8013D869 00??"],"options":{"Name":"00","None":"02","Number":"01"}},"Options\\Quarter Length":{"note":"","data":["8013D865 00??"],"options":{"12:00":"03","3:00":"00","5:00":"01","8:00":"02"}},"Options\\Replay":{"note":"","data":["8013D868 00??"],"options":{"No":"01","Yes":"00"}},"Options\\Second Violation":{"note":"","data":["80144992 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\Shot Clock Violation":{"note":"","data":["80144991 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\Stamina":{"note":"","data":["8013D866 00??"],"options":{"Off":"01","On":"00"}},"Options\\Traveling":{"note":"","data":["80144997 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}}},"6A162FF2-2093704C-C:50":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["811659D4 FFFF","811659D6 FFFF","811659DA 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FB5C 270F"],"options":null}},"6AA4DDE7-E3E2F4E7-C:45":{"All Batteries Have Bad Aim":{"note":"","data":["800A1F7C 0001"],"options":null},"All Batteries Have Hellfire":{"note":"","data":["800A34A2 0001"],"options":null},"All Battletanx Are Invincible":{"note":"","data":["8009843D 0001"],"options":null},"Area 51\\Mines Are Invisible":{"note":"","data":["802D5ACB 00CC"],"options":null},"Area 51\\Mines Are Toxic Waste":{"note":"","data":["802D5ACB 007C"],"options":null},"Area 51\\Shock Wave Weapons":{"note":"","data":["802D5A7D 00AF"],"options":null},"Area 51\\Turn Ammo Pickup Picture To Flamer Picture":{"note":"","data":["802D5AAF 00AC"],"options":null},"Area 51\\Turn Nuke Into Toxic Waste Nuke":{"note":"","data":["802D5A7B 007C"],"options":null},"Auto Lose All Queen Lord Levels":{"note":"","data":["800A6746 0001"],"options":null},"Auto Win All Queen Lord Levels":{"note":"","data":["800A6745 0001"],"options":null},"Buildings Fall Fast":{"note":"","data":["80091BBC 0001"],"options":null},"Buildings Implode Instead Of Explode, And Remain Afire":{"note":"","data":["8009298E 0001"],"options":null},"Can't Pick Up Queen Lords":{"note":"","data":["8008A2F0 0001"],"options":null},"Frogs":{"note":"","data":["80135775 0001"],"options":null},"Full Control Of Tank In Bonus,Extra Side Player In Battlelord Multi!":{"note":"","data":["800971EE 0001"],"options":null},"Have All Levels":{"note":"","data":["80135767 0001"],"options":null},"Have Storm Ravens Gang":{"note":"","data":["80135773 0001"],"options":null},"Hurl Mode":{"note":"","data":["8013576B 0001"],"options":null},"In Campaign 3 Enemy Tanks May Join You":{"note":"","data":["802D9AAC 0000","802DB3D4 0000","802DCCFC 0000"],"options":null},"Invincible":{"note":"","data":["80135763 0001"],"options":null},"Invisible":{"note":"","data":["8013576A 0001"],"options":null},"Laser Fire Invisible":{"note":"","data":["800846ED 0001"],"options":null},"MultiPlayer\\Player 2\\One Hit And You Bite It":{"note":"","data":["802D9AC7 0001"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 1\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AD7EE FFFF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 1\\Infinite Secondary Weapons In Battlelord":{"note":"","data":["802D8609 00FF","802D860B 00FF","802D860D 00FF","802D860F 00FF","802D8611 00FF","802D8615 00FF","802D8617 00FF","802D8619 00FF","802D861B 00FF","802D861D 00FF","802D861F 00FF","802D8621 00FF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 2\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AE186 FFFF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 2\\Infinite Secondary Weapons In Battlelord":{"note":"","data":["802D9F31 00FF","802D9F33 00FF","802D9F35 00FF","802D9F37 00FF","802D9F39 00FF","802D9F3D 00FF","802D9F3F 00FF","802D9F41 00FF","802D9F43 00FF","802D9F45 00FF","802D9F47 00FF","802D9F49 00FF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 3\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AEB1E FFFF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 4\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AF4B6 FFFF"],"options":null},"Multiplayer\\Deathmatch, Frenzy \u0026 Convoy Modes\\Player 1\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AD322 FFFF"],"options":null},"Multiplayer\\Deathmatch, Frenzy \u0026 Convoy Modes\\Player 2\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811ADCBA FFFF"],"options":null},"Multiplayer\\Deathmatch, Frenzy \u0026 Convoy Modes\\Player 3\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AE652 FFFF"],"options":null},"Multiplayer\\Deathmatch, Frenzy \u0026 Convoy Modes\\Player 4\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AEFEA FFFF"],"options":null},"Multiplayer\\Hold 'Em Mode\\Player 1\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AD7EE FFFF"],"options":null},"Multiplayer\\Hold 'Em Mode\\Player 2\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AE186 FFFF"],"options":null},"Multiplayer\\Hold 'Em Mode\\Player 3\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AEB1E FFFF"],"options":null},"Multiplayer\\Hold 'Em Mode\\Player 4\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AF4B6 FFFF"],"options":null},"Multiplayer\\Plater 1\\One Hit And You Bite It":{"note":"","data":["802D819F 0001"],"options":null},"Multiplayer\\Player 1\\Always Has Cloaked On":{"note":"","data":["802D818D 0001"],"options":null},"Multiplayer\\Player 1\\Always Have Radar":{"note":"","data":["802D8195 0080"],"options":null},"Multiplayer\\Player 1\\Goalith Tank On Tracks Body Modifier":{"note":"","data":["802D86A3 00??"],"options":{"Big Tank":"02","Motor Tank":"01","Normal Tank":"00"}},"Multiplayer\\Player 1\\Infinite Ammo":{"note":"","data":["802D8603 00FF"],"options":null},"Multiplayer\\Player 1\\Main Weapon":{"note":"","data":["802D85EB 00??"],"options":{"?":"09","Big Tank Shells":"03","Cloaking":"0F","Gernades":"07","Gun Buddies":"0D","Health":"10","Laser":"05","Mines":"0C","Motor Tank Shells":"02","Normal Tank Shells":"01","Nothing":"00","Nuclear Lasers":"0A","Nuke":"06","Remote Rockets":"0B","Rockets":"04","Smoke Screen":"0E"}},"Multiplayer\\Player 1\\Secondary Weapon":{"note":"","data":["802D85F7 00??"],"options":{"?":"09","Big Tank Shells":"03","Cloaking":"0F","Gernades":"07","Gun Buddies":"0D","Health":"10","Laser":"05","Mines":"0C","Motor Tank Shells":"02","Normal Tank Shells":"01","Nothing":"00","Nuclear Lasers":"0A","Nuke":"06","Remote Rockets":"0B","Rockets":"04","Smoke Screen":"0E"}},"Multiplayer\\Player 1\\Tank Body Modifier":{"note":"","data":["802D819B 00??"],"options":{"Big Tank":"02","Motor Tank":"01","Normal Tank":"00"}},"Multiplayer\\Player 1\\Tank Turret Always On (Use Right/Left C Button)":{"note":"","data":["802DE7FB 0011","802DE7FF 0002"],"options":null},"Multiplayer\\Player 1\\Your Goalith Tank On Tracks Always Has Cloaked On":{"note":"","data":["802D8695 0001"],"options":null},"Multiplayer\\Player 1\\Your Goalith Tank On Tracks Always Has Radar":{"note":"","data":["802D869D 0080"],"options":null},"Multiplayer\\Player 2\\Always Has Cloaked On":{"note":"","data":["802D9AB5 0001"],"options":null},"Multiplayer\\Player 2\\Always Have Radar":{"note":"","data":["802D9ABD 0080"],"options":null},"Multiplayer\\Player 2\\Goalith Tank On Tracks Body Modifier":{"note":"","data":["802D9FCB 00??"],"options":{"Big Tank":"02","Motor Tank":"01","Normal Tank":"00"}},"Multiplayer\\Player 2\\Infinite Ammo":{"note":"","data":["802D9F2B 00FF"],"options":null},"Multiplayer\\Player 2\\Main Weapon":{"note":"","data":["802D9F13 00??"],"options":{"?":"09","Big Tank Shells":"03","Cloaking":"0F","Gernades":"07","Gun Buddies":"0D","Health":"10","Laser":"05","Mines":"0C","Motor Tank Shells":"02","Normal Tank Shells":"01","Nothing":"00","Nuclear Lasers":"0A","Nuke":"06","Remote Rockets":"0B","Rockets":"04","Smoke Screen":"0E"}},"Multiplayer\\Player 2\\Secondary Weapon":{"note":"","data":["802D9F1F 00??"],"options":{"?":"09","Big Tank Shells":"03","Cloaking":"0F","Gernades":"07","Gun Buddies":"0D","Health":"10","Laser":"05","Mines":"0C","Motor Tank Shells":"02","Normal Tank Shells":"01","Nothing":"00","Nuclear Lasers":"0A","Nuke":"06","Remote Rockets":"0B","Rockets":"04","Smoke Screen":"0E"}},"Multiplayer\\Player 2\\Tank Body Modifier":{"note":"","data":["802D9AC3 00??"],"options":{"Big Tank":"02","Motor Tank":"01","Normal Tank":"00"}},"Multiplayer\\Player 2\\Tank Turret Always On":{"note":"","data":["802DEB43 0011","802DEB47 0002"],"options":null},"Multiplayer\\Player 2\\Your Goalith Tank On Tracks Always Has Cloaked On":{"note":"","data":["802D9FBD 0001"],"options":null},"Multiplayer\\Player 2\\Your Goalith Tank On Tracks Always Has Radar":{"note":"","data":["802D9FC5 0080"],"options":null},"Multiplayer\\Player 3\\Tank Turret Always On":{"note":"","data":["802DEE8B 0011","802DEE8F 0002"],"options":null},"Multiplayer\\Player 4\\Tank Turret Always On":{"note":"","data":["802DF1D3 0011","802DF1D7 0002"],"options":null},"Nuke Blast Leaves Air Yellow":{"note":"","data":["800F3333 0001"],"options":null},"Nuke Blast Pink":{"note":"","data":["8008055F 0001"],"options":null},"Regenerated Allied Tanks Are Indestrucible In Campaign":{"note":"","data":["8009FB2A 0001"],"options":null},"Run Story":{"note":"","data":["80135770 0001"],"options":null},"Shoot Through Walls":{"note":"","data":["8008E529 0001"],"options":null},"Slow Battle Tanks":{"note":"","data":["8009A56A 0001"],"options":null},"Start With All Weapons":{"note":"","data":["80135765 0001"],"options":null},"Toads":{"note":"","data":["80135776 0001"],"options":null},"Trippy":{"note":"","data":["80135771 0001"],"options":null},"Unlimited Ammo":{"note":"","data":["80135760 0001"],"options":null},"Unlimited Lives":{"note":"","data":["80135772 0001"],"options":null}},"6AECEC4F-F0924814-C:50":{"All Equipment Upgrades":{"note":"","data":["801E54ED 0023","811E553A 201B","801E54CC 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03DC90B 0000","801E5482 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801E5502 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801E5503 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801E5504 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801E5505 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801E5506 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801E5507 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801E54F5 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801E54FB 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801E5501 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Have Item Modifier":{"note":"","data":["801E5500 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\All Masks":{"note":"","data":["811E5508 3E39","811E550A 4745","811E550C 4032","811E550E 3A46","811E5510 3842","811E5512 4833","811E5514 3C3D","811E5516 373F","811E5518 3634","811E551A 4341","811E551C 3B44","811E551E 4935"],"options":null},"Have\\Bombchu":{"note":"","data":["801E54F7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801E54F6 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801E54F9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801E54F8 0008"],"options":null},"Have\\Fire Arrow":{"note":"","data":["801E54F2 0002"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801E5500 0010"],"options":null},"Have\\Have\\Ocarina of Time":{"note":"","data":["801E54F0 0000"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801E54F1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801E54FF 000F"],"options":null},"Have\\Ice Arrow":{"note":"","data":["801E54F3 0003"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801E54FE 000E"],"options":null},"Have\\Light Arrow":{"note":"","data":["801E54F4 0004"],"options":null},"Have\\Magic Beans":{"note":"","data":["801E54FA 000A"],"options":null},"Have\\Pictograph":{"note":"","data":["801E54FD 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801E54FC 000C"],"options":null},"Have\\QuestStatus Items":{"note":"","data":["801E553D 0005","811E553E F7CF"],"options":null},"Infinite\\Health":{"note":"","data":["811E54B6 03E7"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811E54B4 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"This is Infinite use of Bombs,Bombchus,Deku Sticks,Deku Nuts,Magic Beans,\u0026 Powder Kegs. But you must also put it's Have on to work.","data":["801E5521 0063","50000801 0000","801E5526 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801E54B9 0060","811E54C0 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811E54BA 03E7"],"options":null},"Play As":{"note":"","data":["801E54A0 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0378ECB 0020","813921A8 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You Have\\been warned.","data":["801E54CC 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F0496 0008","811E5496 FFFD","D01F0496 0004","811E5496 0000","D01F0496 0002","811E5496 FFFE"],"options":null},"Use all C Buttons":{"note":"","data":["811E9398 0000","811E939A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["803DC90A 0000","803F5165 0001","813F516A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"6B45223F-F00E5C56-C:45":{"Crunched Players":{"note":"","data":["810EA078 3F00"],"options":null},"Extra Teams":{"note":"","data":["800C7205 0001"],"options":null},"Get In Fights Constantly":{"note":"","data":["800A442E 0020"],"options":null},"Players\\Head Size":{"note":"","data":["810EA070 ????"],"options":{"Normal Size":"3F80","Very Large":"4080","Very Small":"3F00"}},"Players\\Height Size":{"note":"","data":["810EA074 ????"],"options":{"Giants":"4080","Large":"3FC0","Midgets":"3F00","Normal Size":"3F80"}},"Team 1\\Score pts":{"note":"","data":["800E6AB1 00??"],"options":{"30 Points":"1E","50 Points":"23","75 Points":"4B","99 Points":"63","Zero Points":"00"}},"Team 2\\Score pts":{"note":"","data":["800E9F8D ????"],"options":{"0 Points":"2305","5 Points":"4B07","9 Points":"6309","ero Points":"0000"}}},"6B700750-29D621FE-C:45":{"1 Win to Win\\Player 1":{"note":"","data":["D0138B47 0000","80138B47 0001"],"options":null},"1 Win to Win\\Player 2":{"note":"","data":["D0138B43 0000","80138B43 0001"],"options":null},"Extra Characters":{"note":"","data":["8007F9F8 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["8008B1E7 0064"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["8008AE5F 0064"],"options":null},"Infinite Time":{"note":"","data":["81138B2A 0708"],"options":null},"Infinite Time To Choose Character":{"note":"","data":["D01340F6 0001","811340F6 0260"],"options":null},"No Health\\Player 1":{"note":"","data":["8008B1E7 0000"],"options":null},"No Health\\Player 2":{"note":"","data":["8008AE5F 0000"],"options":null},"P2/CPU Never Wins":{"note":"","data":["80138B43 0000"],"options":null},"R Button Health Restore\\Player 1":{"note":"","data":["D007CD2B 0010","8008B1E7 0064"],"options":null},"Sudden Death Mode\\Player 1":{"note":"","data":["D1138B2A 0120","8008B1E7 0001"],"options":null},"Sudden Death Mode\\Player 2":{"note":"","data":["D1138B2A 0120","8008AE5F 0001"],"options":null},"Z Trigger Deathblow\\Player 1":{"note":"","data":["D007CD2A 0020","8008AE5F 0000"],"options":null}},"6BFF4758-E5FF5D5E-C:4A":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118B2D0 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118B2D2 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118B2D4 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118B2D6 0003"],"options":null},"Have Bonus Mode and All Gold Cups":{"note":"","data":["8018C728 00??","8018C729 00??","8018C72A 00??","8018C72B 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["80163655 00??","80163682 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["80163735 00??","80163762 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["80163815 00??","80163842 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["801638F5 00??","80163922 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["801639D5 00??","80163A02 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["80163AB5 00??","80163AE2 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818C80F 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F73C5 0020","810F7478 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F73D5 0020","810F8250 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F73E5 0020","810F9028 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F73F5 0020","810F9E00 4000"],"options":null}},"6C2C6C49-9BE5CA66-C:45":{"Extra Bonuses":{"note":"","data":["810EBA6A 270F"],"options":null},"Fake Max Spin Bar?":{"note":"","data":["800EBA43 0009"],"options":null},"Infinite\\Crate Attempts":{"note":"","data":["800A9D1B 0007"],"options":null},"Infinite\\Gold Pickups":{"note":"","data":["802EB9E8 0064"],"options":null},"Infinite\\Health":{"note":"","data":["800EBA47 0009"],"options":null}},"6C45B60C-DCE50E30-C:4A":{"Access All Boards \u0026 Characters":{"note":"","data":["800500C1 000C"],"options":null},"All Street Work Levels Unlocked":{"note":"","data":["50007801 0000","80050170 00??"],"options":{"Courses unlocked":"01","Courses unlocked with A rank":"05","Courses unlocked with B rank":"04","Courses unlocked with C rank":"03","Courses unlocked with S rank":"06"}},"Class Score Select":{"note":"","data":["8016609E 00??"],"options":{"Class A":"64","Class B":"40","Class C":"20","Class S":"FF"}},"Coin Perfect Select":{"note":"this is for Coin Mode to get Perfect Coin Collection Score straight away when you enter the level","data":["801660B3 00??"],"options":{"Giant House Level 1":"6E","Giant House Level 2":"77","Giant House Level 3":"72","Green Park Level 1":"14","Green park Level 2":"1A","Green park Level 3":"2B","Lost Forest Level 1":"4A","Lost Forest Level 2":"59","Lost Forest Level 3":"80","Snow Festival 64 Levels 1 2 \u0026 3":"7D","Sunset Island Level 1":"6F","Sunset Island Level 2":"74","Sunset Island Level 3":"81"}},"Infinite Time\\Attack Time Time 000000":{"note":"","data":["811137EA 0000"],"options":null},"Infinite Time\\Street Work \u0026 Coin":{"note":"","data":["801137E9 0028"],"options":null},"Infinite Time\\Time Attack":{"note":"","data":["801137EB 0000"],"options":null},"Infinite Turbo\\Player 1":{"note":"","data":["80166019 0009"],"options":null},"Infinite Turbo\\Player2":{"note":"","data":["80167991 0009"],"options":null},"Maxed Out Turbo Bar":{"note":"","data":["811656E8 429F","80166017 0051"],"options":null},"Options\\Camera Type Modifier":{"note":"","data":["810500A6 00??"],"options":{"Roll Off Far":"05","Roll Off Mid":"04","Roll Off Near":"03","Roll On Far":"02","Roll On Mid":"01","Roll On Near":"00"}},"Options\\DJ Function Modifier":{"note":"","data":["810500AC 00??"],"options":{"DJ Function Off":"00","DJ Function On":"01"}},"Options\\Music Modifier":{"note":"","data":["800500A9 00??"],"options":{"BGM Off":"00","BGM On":"FF"}},"Options\\Sound Effects Modifier":{"note":"","data":["810500AA 00??"],"options":{"SE Off":"00","SE On":"FF"}}},"6D8DF08E-D008C3CF-C:50":{"2 Player Championship Mode":{"note":"This lets player 2 play with you in championship mode so if you have a friend that you want to tag team up with in tag team championship now you can.","data":["810A755E 0002"],"options":null},"Always Special\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF9E 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2F6 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["D015A5D1 0015","8015B64E 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["D015A5D1 0015","8015B9A6 0004"],"options":null},"Auto-Pin\\Player 1":{"note":"Do not use with Cant Pin","data":["8016CE23 0003"],"options":null},"Auto-Pin\\Player 2":{"note":"Do not use with Cant Pin","data":["8016CE17 0003"],"options":null},"Auto-Pin\\Player 3":{"note":"Do not use with Cant Pin","data":["8016CE2F 0003"],"options":null},"Auto-Pin\\Player 4":{"note":"Do not use with Cant Pin","data":["8016CE3B 0003"],"options":null},"CPU To Human Control\\Player 1":{"note":"","data":["8015AF99 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 2":{"note":"","data":["8015B2F1 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 3":{"note":"","data":["8015B649 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 4":{"note":"","data":["8015B9A1 00??"],"options":{"CPU":"18","Human":"17"}},"Can't Pin\\Player 1":{"note":"Do not use with Auto Pin","data":["8016CE23 0004"],"options":null},"Can't Pin\\Player 2":{"note":"Do not use with Auto Pin","data":["8016CE17 0004"],"options":null},"Can't Pin\\Player 3":{"note":"Do not use with Auto Pin","data":["8016CE2F 0004"],"options":null},"Can't Pin\\Player 4":{"note":"Do not use with Auto Pin","data":["8016CE3B 0004"],"options":null},"Cannot Be Grabbed\\Player 1":{"note":"","data":["D115AEC6 0052","8115AEC6 0001","D115AEC6 00A1","8115AEC6 00C1"],"options":null},"Cannot Be Knocked Down\\Player 1":{"note":"","data":["D115AEC6 0031","8115AEC6 0001"],"options":null},"Cannot Be Punched\\Player 1":{"note":"","data":["D115AEC6 002D","8115AEC6 0001","D115AEC6 0035","8115AEC6 00C1"],"options":null},"Clock At 00:00":{"note":"","data":["8115AB1E 0000","810A99F2 0000"],"options":null},"Hacked Moves\\Capture Tazzplex":{"note":"Replaces: Capture Suplex P1 grabs P2's feet like a capture suplex, then lets go \u0026 does a Tazzplex.","data":["D106B454 3689","D106B456 0021","8106B460 00BC","D106B454 3689","D106B456 0021","8106B462 A5E2","D106B514 368A","D106B516 0021","8106B520 00BC","D106B514 368A","D106B516 0021","8106B522 B6BE"],"options":null},"Hacked Moves\\Dominator into HHH Facebuster":{"note":"Replaces: Dominator","data":["D106B454 3810","D106B456 005C","8106B560 011A","D106B454 3810","D106B456 005C","8106B562 A256","D106B514 3811","D106B516 005C","8106B520 011A","D106B514 3811","D106B516 005C","8106B522 ACB0","D106B454 3810","D106B456 0075","8115AF52 0000"],"options":null},"Hacked Moves\\Dragon Screw Stunner":{"note":"Dragon Screw 02 P1 does a Dragon Screw then picks up P2 (still holding his leg) and spins him around and gives him a Stone Cold Stunner","data":["D106B454 3749","D106B456 0094","8106B460 00E9","D106B454 3749","D106B456 0094","8106B462 B9BE","D106B514 374A","D106B516 0094","8106B520 00E9","D106B514 374A","D106B516 0094"],"options":null},"Hacked Moves\\Dragon Screw Suplex":{"note":"Replaces: Double Dragon Screw 02 P1 does a Dragon screw then picks then up (still holding their feet) and does a capture suplex.","data":["D106B454 3749","D106B456 007C","8106B460 00AD","D106B454 3749","D106B456 007C","8106B462 DB2A","D106B514 374A","D106B516 007C","8106B520 00AD","D106B514 374A","D106B516 007C","8106B522 EAE0","D106B454 3749","D106B456 00A5","8115AF52 0000","D106B514 374A","D106B516 00A5","8115B2AA 0000"],"options":null},"Hacked Moves\\Morality Check to Back of head":{"note":"Replaces: Back Clothesline P1 is immediately backed up and does the Morality Check to P2 in the back of the head (misses by a little)","data":["D106B454 3892","D106B456 0000","8106B460 00B3","D106B454 3892","D106B456 0000","8106B462 194C"],"options":null},"Hacked Moves\\Running Rock Bottom":{"note":"Replaces: Farooq Spinebuster P2 runs into P1 and P1 delivers a RockBottom to P2.","data":["D106B454 3A80","D106B456 0000","8106B460 00C1","D106B454 3A80","D106B456 0000","8106B462 F7A2","D106B514 3A81","D106B516 0000","8106B520 00C2","D106B514 3A81","D106B516 0000","8106B522 1210"],"options":null},"Hacked Moves\\Running Tazplex":{"note":"Replaces: Underhook Belly to Belly P2 runs into P1 and P1 does a Tazplex to P2.","data":["D106B454 3A7A","D106B456 0000","8106B460 00BC","D106B454 3A7A","D106B456 0000","8106B462 A51E","D106B514 3A7B","D106B516 0000","8106B520 00BC","D106B514 3A7B","D106B516 0000","8106B522 B5FA"],"options":null},"Have All\\Characters,Costumes, \u0026 Moves":{"note":"","data":["50000B02 0000","810BEE40 FFFF"],"options":null},"Infinite\\Money\\Championship Mode":{"note":"For Championship Mode","data":["8109940A FFFF"],"options":null},"Infinite\\Money\\Smackdown Mall Shop":{"note":"For Smackdown Mall Shop","data":["8114FAD6 FFFF"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF5F 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2B7 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["D015A5D1 0015","8015B60F 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["D015A5D1 0015","8015B967 00FF"],"options":null},"Novalty\\Truck In The Crowd":{"note":"","data":["81050110 0747","81050112 0748","81050114 0749","81050116 074A","81050118 074B","81050124 0A4B","81050126 0A43","81050128 0A4B","8105012A 0A43","8105012C 0A43","8105012E 0A43","8105011A 074C","8105011C 074D","81050130 0A43","8105011E 074E","81050132 0A43","81050120 0746","81050134 0A4B","81050122 0743","81050136 0A4B","D1064880 2000","8115AFB0 42EE","D1064880 2000","8115B308 42EE"],"options":null},"Play As\\Player 1\\Option 1":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 1\\Option 2":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 1\\Option 3":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 2\\Option 1":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 2\\Option 2":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 2\\Option 3":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 3\\Option 1":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 3\\Option 2":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 3\\Option 3":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 4\\Option 1":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 4\\Option 2":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 4\\Option 3":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Replace Raw War with\\BACKYARD ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105010E 0F76","8105010C 0F76","810482E8 002F","81050150 2CFD","810528F4 33FF","810528F6 33FF","81050152 2DC7","81050114 04F4","81050116 04F5","8105011E 04F3","81050128 07FF","8105012A 07FF","81050132 07FF","81079F48 400C","81079F5C 3F00","81079F70 3FFF","8107A024 4010","8107A038 3F00","8107A04C 4020","8107A060 3F84","8107A394 4012","8107A3A8 3F00","8107A3BC 4030","8107A3D0 3F84","8105042C 0949","81050436 07FF","81050438 07FF","8105043A 07FF","8105043C 0000","8105043E 07FF","81050440 0949","81050442 0949","81050430 0F76","81050128 07FF","8105012A 07FF","8105012C 0000","8105012E 07FF","81050130 07FF","81050132 07FF","81050134 0000","81050136 08F9","81050196 2CFD","81050194 09EF","81050192 0000","81050190 09EF","8116C49E 0019","8116C4B8 0004","8116C4DC C2E1","8116C4E0 42B4","810500FE 2D2D","81050100 2D2D","81050102 2D2D","81050400 2DC7","81050402 2DC7","81050404 2DC7","81050406 2DC7","81050408 2DC7","8105040A 2DC7","8105040C 2DC7","8105040E 2DC7","50001002 0000","810501B8 0000","50000402 0000","810501E0 0000","50000902 0000","81050262 0000","50001402 0000","81050290 0000","50002C02 0000","810502EC 0000","8107941C 3FE0","81079428 3FFF","810500EC 06FE","810500EE 06FD","810500F8 07FF","810500FA 0997","81050110 06FC","81050112 06FB","8105011A 06FF","8105011C 06FA","81052CF0 2CC9","81052CF4 2D1B","81052CD0 2CD1","81052CD4 0963","81052C84 2CBF","81052C8A 0961","81052CB8 2CC4","81052CBC 2DD7","81052CC8 2CD1","81052CCC 2CFB","81052C78 2CBC","81052C80 2D31","81052CF8 2CC1","81052D00 2DD7"],"options":null},"Replace Raw War with\\BACKYARD WEAK":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0E88","8105042E 2D0D","81050430 2D0D","81050432 2D0D","81050434 2D0D","81050436 07FD","8105043A 2CFB","8105043C 2D0D","8105043E 2D0D","81050440 2D0D","81050442 2D0D","810500E8 2D0D","8105010E 2D0D","8105010C 2D0D","81050150 2D0D","81050196 2CFB","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81050136 2CFB","81050400 2D0D","81050402 2D0D","81050404 2D0D","81050406 2D0D","81050408 2D0D","8105040A 2D0D","8105040C 2D0D","8105040E 2D0D","810528F4 2D0D","810528F6 2D0D","81052CE8 2CC9","81052CEC 2D2D"],"options":null},"Replace Raw War with\\BARBEDWIRE ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 2CFB","8105042E 2CFB","81050430 2CFB","81050432 2CFB","81050434 2CFB","81050436 2CFB","81050438 2CFB","8105043A 2CFB","8105043C 2CFB","8105043E 2CFB","81050440 2CFB","81050442 2CFB","810500E8 2CFB","8105010E 2CFB","8105010C 2CFB","81050150 2CFB","81050196 2CFB","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81050136 2CFB","810528F4 DDDD","810528F6 DDDD","81052CE8 2CCA","81052CEC 2CFB","81050400 2CFB","81050402 2CFB","81050404 2CFB","81050406 2CFB","81050408 2CFB","8105040A 2CFB","8105040C 2CFB","8105040E 2CFB"],"options":null},"Replace Raw War with\\BARBEDWIRE ROPES":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050110 04F3","81050112 04F4","81050114 04F5","81050116 04F3","81050118 04F4","8105011A 04F5","8105011C 04F3","8105011E 04F4","81050120 04F5","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81079D90 3F6C","81079D94 3F48","81079DA4 3D10","81079DB8 3F71","81079E6C 3F6C","81079E80 3D10","81079E90 3F47","81079F48 3F6C","81079F4C BF4C","81079F5C 3D10","81079F70 3F71","8107A024 3F6C","8107A028 3F28","8107A038 3D10","8107A04C 3F71","8107A100 3F6C","8107A114 3D10","8107A124 3F23","8107A1DC 3F6C","8107A1E0 BF2A","8107A1F0 3D10","8107A204 3F71","8107A2B8 3F6C","8107A2BC 3F02","8107A2CC 3D10","8107A2E0 3F71","8107A394 3F6C","8107A3A8 3D10","8107A3B8 3F00","8107A470 3F6C","8107A474 BF02","8107A484 3D10","8107A498 3F71","81050144 0569","81050154 07F7","810528F4 0C01","810528F6 0555","81050140 04F4","81050150 2CFB","8107A628 3F60","8107A63C 3D10","8107A64C 3F52","8107A650 BF80","8107A8BC 3F56","8107A8C4 BA00","8107A8D0 3D10","8107A8DC 3C5A","8107A8E0 3F30","8107A8E4 BF80","8107ADE4 3F56","8107ADEC BA00","8107ADF8 3D10","8107AE04 3C5A","8107AE08 3F0E","8107AE0C BF80","8107AB7C 3F00","D115AF56 2EB2","8115AEC6 0017","D115B2AE 2EB2","8115B21E 0017","D115B606 2EB2","8115B570 0017","D115B95E 2EB2","8115B8CE 0017","81052922 FFFF","81052924 FFFF","81052926 FFFF"],"options":null},"Replace Raw War with\\BARBEDWIRE SQUARE\\Part 1":{"note":"Both Parts must be on for this Press the C Left Button to make your opponent bleed,These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050110 04F3","81050112 04F4","81050114 04F5","81050116 04F3","81050118 04F4","8105011A 04F5","8105011C 04F3","8105011E 04F4","81050120 04F5","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81079D90 3F6C","81079D94 3F48","81079DA4 3D10","81079DB8 3F71","81079E6C 3F6C","81079E80 3D10","81079E90 3F47","81079F48 3F6C","81079F4C BF4C","81079F5C 3D10","81079F70 3F71","8107A024 3F6C","8107A028 3F28","8107A038 3D10","8107A04C 3F71","8107A100 3F6C","8107A114 3D10","8107A124 3F23","8107A1DC 3F6C","8107A1E0 BF2A","8107A1F0 3D10","8107A204 3F71","8107A2B8 3F6C","8107A2BC 3F02","8107A2CC 3D10","8107A2E0 3F71","8107A394 3F6C","8107A3A8 3D10","8107A3B8 3F00","8107A470 3F6C","8107A474 BF02","8107A484 3D10","8107A498 3F71","81050144 0569","81050154 07F7","810528F4 0C01","810528F6 0555","81050140 04F4","81050150 2CFB","8107A628 3F60","8107A63C 3D10","8107A64C 3F52","8107A650 BF80","8107A8BC 3F56","8107A8C4 BA00","8107A8D0 3D10","8107A8DC 3C5A","8107A8E0 3F30","8107A8E4 BF80","8107ADE4 3F56","8107ADEC BA00","8107ADF8 3D10","8107AE04 3C5A","8107AE08 3F0E","8107AE0C BF80","8107AB7C 3F00","D115AF56 2EB2","8115AEC6 0017","D115B2AE 2EB2","8115B21E 0017","D115B606 2EB2","8115B570 0017","D115B95E 2EB2","8115B8CE 0017","81052922 FFFF","81052924 FFFF","81052926 FFFF","8116C330 0000","8116C332 000A","8116C334 0000","8116C336 000A","8116C378 42B4"],"options":null},"Replace Raw War with\\BARBEDWIRE SQUARE\\Part 2":{"note":"Both Parts must be on for this Press the C Left Button to make your opponent bleed,These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8116C382 0000","8116C38C FFFF","81052C9C 0672","81052CA4 2CFB","D1064880 0002","8115B21E 002F","D1064886 0002","8115AEC6 002F","8116C3E4 0000","8116C3E6 000C","8116C3E8 0000","8116C3EA 000C","8116C428 C3D4","8116C440 FFFF","81052CB2 2CC2","81052CB4 0805","81052CB6 2CFB","D1064880 2000","8116C3E6 001F","D1064880 2000","8116C3EA 001F","D1064880 2000","81005592 3F81","D1005592 3F81","8116C3E6 001F","D1064880 2000","81005592 3F81","D1005592 3F81","8116C3EA 001F","D1064886 2000","8116C3E6 001F","D1064886 2000","8116C3E6 001F","D1064886 2000","81005592 3F81","D1005592 3F81","8116C3EA 001F","81052CF8 04F4","81052D00 2CFB","8116C3E4 0000","8116C3E6 0015","8116C3E8 0000","8116C3EA 0015","8116C428 0000","8116C42A 0000","8116C42C 43EB","8116C42E 0000","8116C430 C3A6","8116C432 0000","8116C436 0400","8116C43A 0000","8116C43E 0000","8116C440 FFFF","8116C442 0000","810855A8 3F00","81085684 3F00","81085750 3F00","8108583C 3F00","81050100 2CFB","8105010E 2CFB"],"options":null},"Replace Raw War with\\DUDLEY ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 21A7","8105042E 2D0D","81050432 2D0D","81050436 21A7","8105043E 2D0D","81050440 0000","81050442 0000","810500E8 2D0D","8105010C 2CFD","8105010E 2CFD","81050150 2D29","81050152 2CFB","81050400 09EF","81050402 09EF","81050404 0000","81050406 0000","81050408 0000","8105040A 0000","8105040C 09EF","8105040E 09EF","81050188 04F6","8105018A 04F7","8105018C 04F8","8105018E 04F9","81050190 09EF","81050192 0000","81050194 09EF","81050196 2D0D","810528F4 6666","810528F6 6666","81052CE8 2CC2","81052CEC 2D0D","81052D1C 2CD3","81052D1E 2CD4","81052D20 2CD5","81052D22 2CD6","81052D24 2CFD","81052D26 2CFD","81052D28 2CFB","81052D2A 2CFB","81050124 2CFD","81050126 2CFD","81050128 2CFD","8105012A 2CFD","8105012C 2CFD","8105012E 2CFD","81050130 2CFD","81050132 2CFD","81050134 2CFD","81050136 2CFD","81050154 2CFB","811533F8 002E"],"options":null},"Replace Raw War with\\FLAME ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105010E 0EFE","8105010C 0EFE","810528F4 2508","810528F6 2508","81050430 2401","81050430 2401","81050404 2401","81050406 2401","81050408 2401","81050409 2401","8105040A 2401","8105040C 2401","810500E8 2401"],"options":null},"Replace Raw War with\\FLAMING TURNBUCKLES":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8116C334 FFFF","8116C336 001F","8116C374 C350","8116C376 FFF3","8116C378 4377","8116C37A 2689","8116C37C C380","8116C37E 0406","8116C382 0D14","8116C386 0FCC","8116C38A 07DC","8116C38C FFFF","8116C38E FDE3","8116C3E8 FFFF","8116C3EA 001F","8116C428 C360","8116C42C 4370","8116C430 4376","8116C436 0D14","8116C43A 0FCC","8116C43E 07DC","8116C442 F9C4","8116C49C FFFF","8116C49E 001F","8116C4DC 4360","8116C4E0 4370","8116C4E4 4380","8116C4EA 0CD0","8116C4EE 0136","8116C4F2 04EE","8116C4F6 F601","8116C550 FFFF","8116C552 001F","8116C590 434F","8116C594 4370","8116C598 C36C","8116C59E 0E70","8116C5A2 0F58","8116C5A6 0814","8116C5AA F1E6"],"options":null},"Replace Raw War with\\GREENWICH STREET ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050430 2DC5","81050436 0000","81050438 0000","8105043A 0000","8105043E 0000","810504E8 0EFE","8105010E 2DC5","8105010C 2DC5","81050196 2CFD","81050136 0FB6","81050134 0FC6","81050132 0FB6","81050130 0FC6","8105012E 0FB6","8105012C 0FC6","8105012A 0FB6","81050128 0FC6","81050126 0FB6","81050124 0FC6","81050440 0000","81050442 0000","50002C02 0000","81050378 0000","50002C02 0000","810502EC 0000","50001402 0000","81050290 0000","50000902 0000","81050262 0000","50000402 0000","810501CE 0000","50001002 0000","810501B8 0000","50000402 0000","810501E0 0000","8105042C 2D0D","81050430 0000","81050150 24F0"],"options":null},"Replace Raw War with\\HHH ARNEA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105040E 24EF","8105040C 24EF","8105040A 24EF","81050408 24EF","81050406 24EF","81050404 24EF","81050402 24EF","81050400 24EF","81050436 24E9","81050440 24E9","81050442 24E9","8105043E 24EF","8105042E 24EF","8105043C 24EF","8105042C 24E9","8105010E 24E9","8105010C 24E9","81050196 24E9","8105042E 24EF","81050432 24EF","810500F8 24EF","810500FA 24EF","810500FC 24EF","810500FC 24EF","81050100 24EF","81050100 24EF","81052CE8 2CCA","81052CEC 24EF","81050150 24E9","81050152 24E9","81050154 24E9","810528F4 24E9","810528F6 24E9"],"options":null},"Replace Raw War with\\HOSPITAL ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0949","8105042E 283F","81050428 0949","81050430 0949","81050430 0949","81050436 096B","81050438 0993","8105043A 096B","8105043E 283F","81050440 283F","81050442 283F","810504E8 0949","81050150 283F","81050196 283F","81050400 283F","81050402 283F","81050404 283F","81050406 283F","81050408 283F","8105040A 283F","8105040C 283F","8105040E 283F","810500F8 283F","810500FA 283F","810500FC 283F","810500FE 283F","81050100 283F","81050100 283F","81052CE8 2CCA","81052CEC 283F","8105010E 283F","8105010C 283F","81050124 0949","81050126 0949","81050128 0949","8105012A 0949","8105012C 0949","8105012E 0949","81050130 0949","81050132 0949","81050134 0949","81050136 0949","810500E8 0949","810528F4 0000","81052CE0 2CC9"],"options":null},"Replace Raw War with\\KANE ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0A61","8105042E 0A61","81050428 2B6C","81050430 2B6C","81050430 2B6C","81050436 2B57","81050438 2B57","8105043A 2B57","8105043E 0A61","81050440 2B57","81050442 2B57","810500E8 1B1E","8105010E 2D37","8105010C 209F","81050194 0955","81050196 2B57","81050400 2699","81050402 2699","81050404 2699","81050406 2699","81050408 2699","8105040A 2699","8105040C 2699","8105040E 2699"],"options":null},"Replace Raw War with\\REMOVE RING":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050150 0000","81050152 0000","81050154 0000","810500E8 0000","810855A8 3F00","81085684 3F00","81085750 3F00","8108583C 3F00","81079C08 3F00","81079C14 3F00","81079B10 3F00"],"options":null},"Replace Raw War with\\SHIMMER ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 1932","8105042E 1932","81050430 1932","81050434 1932","81050432 1932","81050436 1932","81050438 1932","8105043A 1932","8105043E 1932","81050440 1932","81050442 1932","81050150 1932","81050152 1932","81050154 1932","81050190 1932","81050192 1932","81050194 1932","81050196 1932","81050124 1932","81050126 1932","81050128 1932","8105012A 1932","8105012C 1932","8105012E 1932","81050130 1932","81050132 1932","81050134 1932","81050136 1932","810500E8 1932","8105010E 1932","8105010C 1932"],"options":null},"Replace Raw War with\\SPACE SHIP ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 094D","8105042E 0953","81050430 0953","81050432 0F0E","81050434 0953","81050436 0F0E","81050438 0899","8105043C 0953","8105043E 0899","81050440 0963","81050442 0963","81050400 0953","81050402 0953","81050404 0953","81050406 0953","81050408 0953","8105040A 0953","8105040C 0953","8105040E 0953","810500E8 0A75","810528F4 7223","810528F6 0119","81050150 0963","81050152 0963","81050190 0953","81050192 0953","81050194 0953","81050196 0963","8105010E 0F0E","8105010C 0F0E","81050124 0F10","81050126 0F10","81050128 0F10","8105012A 0F10","8105012C 0F10","8105012E 0F10","81050130 0F10","81050132 0F10","81050134 0F10","81050136 0F10","810500F8 0963","810500FA 0963","810500FC 0963","810500FE 0963","81050100 0963","81050102 0963","81052CE8 2CCA","81052CEC 0963"],"options":null},"Replace Raw War with\\TOKYO DOME":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["810528F4 7223","810528F6 0119","81050124 0100","81050126 0100","81050128 0100","8105012A 0100","8105012C 0100","8105012E 0100","81050130 0100","81050132 0100","81050134 0100","81050136 0100","8105010E 0999","81050400 03A5","81050402 0385","81050404 0385","81050406 0385","81050408 0385","8105040A 03A5","8105040C 03A5","8105040E 043F","81050430 043F","8105042C 03A5","81050430 21A5","81050432 0100","81050434 0000","81050436 2CFB","81050438 0899","8105043C 03AF","81050440 03AF","81050442 03A5","810500E8 24C3","81050444 0100","81050190 09EF","81050192 0000","81050194 09EF","81050196 2CFD"],"options":null},"Tables\\IN RING TABLE\\Part 1":{"note":"To Make the Table look broken Keep the Z Button press down, To make player stand on the Table, Stand next to it \u0026 Keep C-Right Pressed Down.Put all Parts on Together for this Cheat to work","data":["81052CF0 06E1","81052CF4 09F1","81052CF8 06E2","81052D00 09F1","81052D0C 06E3","81052D0E 06E4","81052D10 09EF","81052D12 09EF","81052D14 06E5","81052D16 06E6","81052D18 09EF","81052D1A 09EF","D1064880 0001","8115AFB0 432C","D1064880 0001","8115B308 432C","D1064880 2000","8115AFB0 42B4","D1064880 2000","8115B308 42B4","8116C330 0000","8116C332 0014","8116C334 0000","8116C336 0014","8116C374 4210","8116C376 C0B1","8116C378 432F","8116C37A 51DC","8116C37C 4210","8116C37E 92F1","8116C382 0800","8116C386 05A0","8116C38A 0800","8116C38C FFFF","8116C38E F3BC","8116C3E4 0000","8116C3E6 0015","8116C3E8 0000","8116C3EA 0015","8116C428 4210","8116C42A C0B1","8116C42C 432F","8116C42E 51DC","8116C430 4210","8116C432 92F1","8116C436 0800","8116C43A 05A0","8116C43E 0800","8116C440 FFFF","8116C442 F3BC","D1064880 2000","8116C378 42E0"],"options":null},"Tables\\IN RING TABLE\\Part 2":{"note":"To Make the Table look broken Keep the Z Button press down, To make player stand on the Table, Stand next to it \u0026 Keep C-Right Pressed Down.Put all Parts on Together for this Cheat to work","data":["D1064880 2000","8116C382 07E0","D1064880 2000","8116C38A 0680","D1064880 2000","8116C42C 42E0","D1064880 2000","8116C436 0820","D1064880 2000","8116C43E 0980","8116C498 0000","8116C49A 0017","8116C49C 0000","8116C49E 0017","8116C4DC 4210","8116C4DE C0B1","8116C4E0 432A","8116C4E2 51DC","8116C4E4 4210","8116C4E6 92F1","8116C4EA 0800","8116C4EE 05A0","8116C4F2 0800","8116C4F4 FFFF","8116C4F6 F3BC","8116C54C 0000","8116C54E 0018","8116C550 0000","8116C552 0018","8116C590 4210","8116C592 C0B1","8116C594 432A","8116C596 51DC","8116C598 4210","8116C59A 92F1","8116C59E 0800","8116C5A2 05A0","8116C5A6 0800","8116C5A8 FFFF","8116C5AA F3BC","D1064880 2000","8116C4E0 42E0","D1064880 2000","8116C4EA 07E0","D1064880 2000","8116C4F2 0680","D1064880 2000","8116C594 42E0","D1064880 2000","8116C59E 0820","D1064880 2000","8116C5A6 0980"],"options":null},"Tables\\MOVABLE TABLES\\Part 1":{"note":"You must use both parts for this cheat to work","data":["81052C24 06E1","81052C26 06E3","81052C2C 09F1","81052C2E 09EF","81052C30 06E2","81052C32 06E5","81052C38 09F1","81052C3A 09EF","81052C48 06E4","81052C4A 06E6","81052C50 09EF","81052C52 09EF","8116C3E4 0000","8116C3E6 0001","8116C3E8 0000","8116C3EA 0001","8116C498 0000","8116C49A 0003","8116C49C 0000","8116C49E 0003","8116C330 0000","8116C332 0000","8116C334 0000","8116C336 0000","D116C556 0000","8116C33A 0000","D116C33A 0000","8116C3EE 0000","D116C3EE 0000","8116C4A2 0000","D116C556 0001","8116C33A 0001","D116C33A 0001","8116C3EE 0001","D116C3EE 0001","8116C4A2 0001","D116C556 0002","8116C33A 0002","D116C33A 0002","8116C3EE 0002","D116C3EE 0002","8116C4A2 0002","D116C556 0003","8116C33A 0003","D116C33A 0003","8116C3EE 0003","D116C3EE 0003","8116C4A2 0003","D116C556 FFFF","8116C33A FFFF","D116C33A FFFF","8116C3EE FFFF","D116C3EE FFFF","8116C4A2 FFFF","D216C556 FFFF","81079B10 3F80","D1064886 2000","81079B10 3F81","D106488C 2000","81079B10 3F81","D1064892 2000","81079B10 3F81"],"options":null},"Tables\\MOVABLE TABLES\\Part 2":{"note":"You must use both parts for this cheat to work","data":["D116C33A FFFF","8116C382 0000","D116C382 0000","8116C386 0000","D116C386 0000","8116C38A 0000","D116C38A 0000","8116C38E 0000","D116C38E 0000","8116C436 0000","D116C436 0000","8116C43A 0000","D116C43A 0000","8116C43E 0000","D116C43E 0000","8116C442 0000","D116C442 0000","8116C4EA 0000","D116C4EA 0000","8116C4EE 0000","D116C4EE 0000","8116C4F2 0000","D116C4F2 0000","8116C4F6 0000","D116C594 42B4","D116C556 FFFF","8116C378 4335","D116C378 4335","8116C42C 4335","D116C42C 4335","8116C4E0 4335","D116C594 3DC7","D116C556 FFFF","8116C378 42B0","D116C378 42B0","8116C42C 42B0","D116C42C 42B0","8116C4E0 42B0","D1064880 2000","81079B10 3F81","D1079B10 3F81","D116C594 42B4","D116C556 FFFF","8116C378 42F0","D116C378 42F0","8116C42C 42F0","D116C42C 42F0","8116C4E0 42F0","D1079B10 3F81","8116C38A 0F00","D116C38A 0F00","8116C43E 0100","D116C594 3C93","8116C378 42B0","81052D18 0000","81052D1A 0000","D116C54C 0000","8116C54E 0018","D116C550 0000","8116C552 0018"],"options":null},"Tables\\Sabu Table":{"note":"Breakable/Fixable/Rebreakable/Refixable press Z to break, C-right + Cdown to fix","data":["8116C49A 000C","8116C49E 000C","8116C4DC 43CC","8116C4E0 42E6","8116C4E4 C2C5","8116C4EE 0800","8116C602 000C","8116C606 000C","8116C648 42E6","8116C644 43CC","8116C64C C314","81052C54 06E3","81052C5C 09EF","8116C6F8 43CC","8116C6FC 42F0","8116C700 C2F1","8116C70A 0400","8116C428 43CC","8116C430 C2D0","8116C42C 42F0","8116C43A 0C00","8116C6B6 0004","8116C6BA 0004","8116C3E6 0004","8116C3EA 0004","D1064880 2000","81005592 3F81","D1005592 3F81","8116C4EA 0F00","D1005592 3F81","8116C652 0100","D1005592 3F81","8116C4E0 4240","D1005592 3F81","8116C648 4240","D1064880 0005","81005CD4 3F83","D1005CD4 3F83","8116C4EA 0000","D1005CD4 3F83","8116C652 0000","D1005CD4 3F83","8116C4E0 42E6","D1005CD4 3F83","8116C648 42E6","D1005CD4 3F83","D1064880 2000","81005CD4 0000"],"options":null},"Ultimate Code\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF5E 0064"],"options":null},"Ultimate Code\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2B6 0064"],"options":null},"Ultimate Code\\Player 3":{"note":"","data":["D015A5D1 0015","8015B60E 0064"],"options":null},"Ultimate Code\\Player 4":{"note":"","data":["D015A5D1 0015","8015B964 0064"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B490 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B490 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B4A4 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B47C 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8106B4A4 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B47C 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B468 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B468 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B510 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B510 3DFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B564 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B53C 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B564 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B53C 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B528 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B528 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B610 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B610 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B624 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5FC 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B624 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5FC 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5E8 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5E8 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6D0 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6D0 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6E4 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6BC 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8006B6E4 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6BC 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6A8 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6A8 3FFF"],"options":null},"Z LADDER":{"note":"Press Z for the ladder to appear, sometimes there is an invisable ladder","data":["D1064880 2000","8116C768 0000","D1064880 2000","8116C76A 0019","D1064880 2000","8116C76C 0000","D1064880 2000","8116C76E 0019","D1064880 2000","8116C788 8104"],"options":null}},"6D9D1FE4-84D10BEA-C:4A":{"Freeze Timer":{"note":"","data":["810BCBD6 0BB8"],"options":null},"Goal Select Player 1":{"note":"","data":["810B637C 00??"],"options":{"10 Goals":"0A","20 Goals":"14","25 Goals":"19","50 Goals":"32","99 Goals":"63","No Goals":"00"}},"Infinite 99 Credits":{"note":"","data":["800B3961 0063"],"options":null},"Other Team Scores no Goals":{"note":"Disable to allow Other team to score","data":["810B6694 0000"],"options":null}},"6DFDCDC3-4DE701C8-C:45":{"Activate Cheat Menu":{"note":"","data":["80053F38 0001"],"options":null},"Away Team Goals":{"note":"","data":["8012BBBD 00??"],"options":{"Max Score":"FF","No Score":"00"}},"Home Team Goals":{"note":"","data":["8012BBBC 00??"],"options":{"Max Score":"FF","No Score":"00"}}},"70B0260E-6716D04C-C:4A":{"Always Shoot 3-Way":{"note":"","data":["800FD19A 0002"],"options":null},"Always Shoot 5-Way":{"note":"","data":["800FD198 0200"],"options":null},"Always Shoot Rapid Fire":{"note":"","data":["800FD19A 1000"],"options":null},"Have Rune Stones":{"note":"","data":["8104EFC6 1FFF"],"options":null},"Have Window Schards":{"note":"","data":["8104EFCA 000F"],"options":null},"Infinite\\Item On Pickup":{"note":"","data":["50010100 0000","810C5BF6 FFFF"],"options":null},"Infinite\\Keys On Pickup":{"note":"","data":["800C5C97 0006"],"options":null},"Infinite\\Max Health":{"note":"","data":["810C5C54 0000","810C5C56 270F","810C5C64 0000","810C5C66 270F"],"options":null},"Infinite\\Money":{"note":"","data":["810C5CF6 FFFF"],"options":null},"Infinite\\Special Weapons":{"note":"","data":["800C5FF7 0009","800C5D37 0009","800C5D67 0009","800C5DE7 0009","800C5EB7 0009"],"options":null},"Infinite\\Turbo":{"note":"","data":["800FD30F 0064"],"options":null},"Level 99":{"note":"","data":["810C5C44 0000","810C5C46 0063"],"options":null},"Max Armour":{"note":"","data":["810C5C34 0000","810C5C36 FFFF"],"options":null},"Max Magic":{"note":"","data":["810C5C24 0000","810C5C26 FFFF"],"options":null},"Max Speed":{"note":"","data":["810C5C14 0000","810C5C16 FFFF"],"options":null},"Max Strength":{"note":"","data":["810C5C04 0000","810C5C06 FFFF"],"options":null}},"7188F445-84410A68-C:4A":{"Can Skip End Credits":{"note":"","data":["8015627F 0001"],"options":null},"Endless Mode":{"note":"","data":["800854CD 0000"],"options":null},"Maximum Dance Gauge\\Player 1":{"note":"","data":["810854DC 03E8"],"options":null},"Maximum Dance Gauge\\Player 2":{"note":"","data":["81085514 03E8"],"options":null},"Maximum Song Score\\Player 1":{"note":"","data":["8108A260 3B9A","8108A262 C9FF"],"options":null},"Maximum Song Score\\Player 2":{"note":"","data":["8108A264 3B9A","8108A266 C9FF"],"options":null},"Maximum Total Score\\Player 1":{"note":"","data":["810854E0 3B9A","810854E2 C9FF"],"options":null},"Maximum Total Score\\Player 2":{"note":"","data":["81085518 3B9A","8101551A C9FF"],"options":null},"Results\\0 Boo Steps\\Player 1":{"note":"","data":["8108A22A 0000"],"options":null},"Results\\0 Boo Steps\\Player 2":{"note":"","data":["8108A242 0000"],"options":null},"Results\\0 Good Steps\\Player 1":{"note":"","data":["8108A226 0000"],"options":null},"Results\\0 Good Steps\\Player 2":{"note":"","data":["8108A23E 0000"],"options":null},"Results\\0 Miss Steps\\Player 1":{"note":"","data":["8108A22E 0000"],"options":null},"Results\\0 Miss Steps\\Player 2":{"note":"","data":["8108A246 0000"],"options":null},"Results\\999 Great Steps\\Player 1":{"note":"","data":["8108A222 03E7"],"options":null},"Results\\999 Great Steps\\Player 2":{"note":"","data":["8108A23A 03E7"],"options":null},"Results\\999 Perfect Steps\\Player 1":{"note":"","data":["8108A21E 03E7"],"options":null},"Results\\999 Perfect Steps\\Player 2":{"note":"","data":["8108A236 03E7"],"options":null},"Unlock All Puzzles":{"note":"","data":["50001902 0000","81156228 FFFF"],"options":null},"Unlock All Songs":{"note":"","data":["8015621D 00FF","8115621E FFFF"],"options":null}},"72611D7D-9919BDD2-C:58":{"Access All\\Cars":{"note":"","data":["8002CC07 000B"],"options":null},"Access All\\Difficulties":{"note":"","data":["8002CC0B 0004"],"options":null},"Access All\\Multiplayer Levels":{"note":"","data":["50000901 0000","8002CC10 0001"],"options":null},"Access All\\Tracks":{"note":"","data":["8002CC03 0006"],"options":null},"Access In-Game Cheats":{"note":"","data":["50001301 0000","8002CC18 0001"],"options":null},"Damage Select":{"note":"","data":["8002C9A3 00??"],"options":{"Double":"02","Half":"01","Normal":"00","Triple":"03"}},"Health Select":{"note":"","data":["8002C98F 00??"],"options":{"Bad Only":"02","Good Only":"01","Normal":"00","Off":"03"}},"Infinite Continues":{"note":"","data":["8002C867 0064"],"options":null},"Low Timer":{"note":"","data":["810259E4 3001"],"options":null},"Power-Up Select":{"note":"","data":["8002C98B 00??"],"options":{"?":"05","Health":"06","Invincible":"07","Mines":"01","Nitros":"04","Normal":"00","Off":"08","Rockets":"02","Stealer":"03"}},"Radar":{"note":"","data":["8002C99F 00??"],"options":{"Off":"01","On":"00"}},"Speed units\\Kph or Mph":{"note":"","data":["81025A78 ????"],"options":{"Kph":"0100","Mph":"0001"}},"View Mode Select?":{"note":"","data":["8002C99B 00??"],"options":{"Fisheye":"03","Flip":"02","Fog":"01","Normal":"00"}},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\01 Coventry Cove":{"note":"","data":["803653CB 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\02 Mount Mayhem":{"note":"","data":["80355DB3 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\03 Inferno Isle":{"note":"","data":["80366323 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\04 Sunset Sands":{"note":"","data":["80345A93 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\05 Metro Madness":{"note":"","data":["8035FF5B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\06 Wicked Woods":{"note":"","data":["80359043 0064"],"options":null}},"729B5E32-B728D980-C:45":{"Always Shoot 3-Way":{"note":"","data":["800FD19A 0002"],"options":null},"Always Shoot 5-Way":{"note":"","data":["800FD198 0200"],"options":null},"Always Shoot Rapid Fire":{"note":"","data":["800FD19A 1000"],"options":null},"Have Rune Stones":{"note":"","data":["8104EFC6 1FFF"],"options":null},"Have Window Schards":{"note":"","data":["8104EFCA 000F"],"options":null},"Infinite\\Item On Pickup":{"note":"","data":["50010100 0000","810C5BF6 FFFF"],"options":null},"Infinite\\Keys On Pickup":{"note":"","data":["800C5C97 0006"],"options":null},"Infinite\\Max Health":{"note":"","data":["810C5C54 0000","810C5C56 270F","810C5C64 0000","810C5C66 270F"],"options":null},"Infinite\\Money":{"note":"","data":["810C5CF6 FFFF"],"options":null},"Infinite\\Special Weapons":{"note":"","data":["800C5FF7 0009","800C5D37 0009","800C5D67 0009","800C5DE7 0009","800C5EB7 0009"],"options":null},"Infinite\\Turbo":{"note":"","data":["800FD30F 0064"],"options":null},"Level 99":{"note":"","data":["810C5C44 0000","810C5C46 0063"],"options":null},"Max Armour":{"note":"","data":["810C5C34 0000","810C5C36 FFFF"],"options":null},"Max Magic":{"note":"","data":["810C5C24 0000","810C5C26 FFFF"],"options":null},"Max Speed":{"note":"","data":["810C5C14 0000","810C5C16 FFFF"],"options":null},"Max Strength":{"note":"","data":["810C5C04 0000","810C5C06 FFFF"],"options":null}},"72F70398-6556A98B-C:45":{"Always 1st":{"note":"","data":["81118FEC 0001"],"options":null},"Enable In-Game cheat Menu \u0026 Cheats":{"note":"Here you can Activate the IN-Built Cheats Menu. At the Front Screen Just Press C-Button Right.This will open up All Tracks \u0026 Characters In Free Play \u0026 Time Attack. Also In A Race, Press The Start/Pause button to Access the In-Cheat-Menu Option.You can also choose how many Pod's Racers are in the Race \u0026 also how many Laps are in the Race in Free Play \u0026 Time Attack","data":["8009B7D7 0001","8109B7DA FFFF"],"options":null},"Have All Tracks Completed":{"note":"","data":["81113E6A FFFF","81113E6C 3FFF","81113E6E 3FFF","81113E70 3FFF","81113E72 00FF"],"options":null},"Infinite Truguts":{"note":"","data":["81113E7A FFFF","81113E78 7FFF"],"options":null},"No Damage":{"note":"If when Racing Your Pod Over heats \u0026 bursts into flames Press \"R\" \u0026 you will Repair the Damage.","data":["800A52D7 0001"],"options":null},"Unlock All Tracks \u0026 Characters":{"note":"When using Unlock All Tracks \u0026 Characters For can to pick \u0026 choose what ever you want to play As \u0026 where ;)","data":["80113E68 00FF","80113E69 00FF","80113E6A 00FF","80113E6B 00FF","81113E68 FFFF","81113E6A FFFF","80113E74 007D","81113E76 FFFF"],"options":null},"Widescreen":{"note":"Narrow Sprites Widths","data":["81085FC4 2405","81085FC6 01A2","81085FFE 3F25","81011F40 240F","81011F42 00F0","81011FDC 2484","81011FDE 0035","81011FE0 1000","8103D508 0802","8103D50A A0AC","810A82B0 4487","810A82B2 7000","810A82B4 3C1B","810A82B6 3F40","810A82B8 449B","810A82BA 0000","810A82BC 0000","810A82BE 0000","810A82C0 4600","810A82C2 7382","810A82C4 0005","810A82C6 0883","810A82C8 0005","810A82CA 2843","810A82CC 00A1","810A82CE 2821","810A82D0 0800","810A82D2 F544","810A82D4 24A5","810A82D6 0028","8100A726 41D5","8100A768 2405","8100A76A FFCB","8100A5D2 41D5","8100A614 2405","8100A616 FFCB","8100A79A 41D5","8100A7D8 2405","8100A7DA FFCB","8101A690 2405","8101A692 FFCB","8101A6A2 3F2A","81057EEC 2405","81057EEE FFCB","81057EFE 43D5"],"options":null}},"73036F3B-CE0D69E9-C:50":{"Choose A Costume\\Player 1":{"note":"","data":["8104A612 00??"],"options":{"First":"01","Normal":"00","Second":"02","Third":"03"}},"Choose A Costume\\Player 2":{"note":"","data":["8104A616 00??"],"options":{"First":"01","Normal":"00","Second":"02","Third":"03"}},"Enable Restart Match option":{"note":"","data":["800494BB 0002"],"options":null},"Infinite Run\\Player 1":{"note":"","data":["811050FC 0001","811050FE 0000"],"options":null},"Infinite Run\\Player 2":{"note":"","data":["811051B0 0001","811051B2 0000"],"options":null},"Infinite Time":{"note":"","data":["8110524A 0063"],"options":null},"Play As\\Player 1":{"note":"","data":["800FE3C3 00??"],"options":{"Fujin":"05","Goro":"0F","Jarek":"0C","Jax":"0D","Johnny Cage":"0E","Kai":"0B","Liu Kang":"03","Noob Saibot":"11","Quan Chi":"08","Raiden":"01","Reiko":"07","Reptile":"0A","Scorpion":"00","Shinnok":"06","Sonya":"02","Sub-Zero":"04","Tanya":"09"}},"Play As\\Player 2":{"note":"","data":["80126FBF 00??"],"options":{"Fujin":"05","Goro":"0F","Jarek":"0C","Jax":"0D","Johnny Cage":"0E","Kai":"0B","Liu Kang":"03","Noob Saibot":"11","Quan Chi":"08","Raiden":"01","Reiko":"07","Reptile":"0A","Scorpion":"00","Shinnok":"06","Sonya":"02","Sub-Zero":"04","Tanya":"09"}},"Unlimited Energy\\Player 1":{"note":"","data":["810FE208 0001","810FE20A 0000"],"options":null},"Unlimited Energy\\Player 2":{"note":"","data":["81127084 0001","81127086 0000"],"options":null}},"733FCCB1-444892F9-C:50":{"Access All Moves":{"note":"","data":["8037CD70 0001","8037CD71 007F","8037CD72 00FF","8037CD73 00FF"],"options":null},"Do Anywhere Option\\Take off anywhere":{"note":"Press A","data":["D0285734 0080","8037CBA1 0001"],"options":null},"Have\\All Jinjos":{"note":"","data":["8038695B 00FF"],"options":null},"Have\\Blubbers Gold":{"note":"","data":["80386973 00FF"],"options":null},"Have\\Chimpys Oranges":{"note":"","data":["80386977 00FF"],"options":null},"Have\\Eyries Caterpillars":{"note":"","data":["8038699B 00FF"],"options":null},"Have\\Nabnuts Acorns":{"note":"","data":["8038699F 00FF"],"options":null},"Have\\Present Option\\Blue":{"note":"","data":["80386993 00FF"],"options":null},"Have\\Present Option\\Green":{"note":"","data":["8038698F 00FF"],"options":null},"Have\\Present Option\\Red":{"note":"","data":["80386997 00FF"],"options":null},"Have\\Running Shoes":{"note":"","data":["8137CA88 5019"],"options":null},"Have\\Zero Time all Levels":{"note":"","data":["50000B04 0000","813869E4 3000"],"options":null},"Infinite\\255 Eggs":{"note":"","data":["80386947 00FF"],"options":null},"Infinite\\255 Gold Feathers":{"note":"","data":["80386953 00FF"],"options":null},"Infinite\\255 Jigsaws":{"note":"","data":["803869AB 00FF"],"options":null},"Infinite\\255 Notes":{"note":"","data":["80386943 00FF"],"options":null},"Infinite\\255 Red Feathers":{"note":"","data":["8038694F 00FF"],"options":null},"Infinite\\8 Skulls":{"note":"","data":["803869A7 0008"],"options":null},"Infinite\\Air":{"note":"","data":["8038696E 000B"],"options":null},"Infinite\\Health":{"note":"","data":["80386963 0008","80386965 0001"],"options":null},"Infinite\\Lives":{"note":"","data":["8038696B 0009"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0285735 0020","8137CE8C 43E0"],"options":null},"Yumblies Counter\\Banjo":{"note":"","data":["8038697B 00FF"],"options":null},"Yumblies Counter\\Mr Vile":{"note":"","data":["8038697C 00FF"],"options":null}},"7365D8F8-9ED9326F-C:4A":{"Decrease Fodder":{"note":"","data":["81180E44 03E7"],"options":null},"Decrease Material":{"note":"","data":["8118A580 03E7"],"options":null},"Max Money":{"note":"","data":["811FDD2C 000F","811FDD2E 423F"],"options":null}},"736657F6-3C88A702-C:4A":{"Decrease Fodder":{"note":"","data":["81180E44 03E7"],"options":null},"Decrease Material":{"note":"","data":["8118A580 03E7"],"options":null},"Max Money":{"note":"","data":["811FDD2E 423F","811FDD2E 423F"],"options":null}},"736AE6AF-4117E9C7-C:4A":{"Always 1st \u0026 final time 00:00.00":{"note":"All Levels","data":["50000301 0000","801CE6E9 0000"],"options":null},"Difficulty Select":{"note":"","data":["8007C000 00??"],"options":{"Amateur":"00","Intermediate":"01","Mirror Mode":"03","Professional":"02"}},"Frantic Finale\\Colorado\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191992 0063"],"options":null},"Frantic Finale\\Hawaii\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80192072 0063"],"options":null},"Frantic Finale\\Oregon\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018EA42 0063"],"options":null},"Frantic Finale\\Texas\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018F1E2 0063"],"options":null},"Freewayphobia\\Chicago\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80192042 0063"],"options":null},"Freewayphobia\\Dakota\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018D212 0063"],"options":null},"Freewayphobia\\New York\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018F512 0063"],"options":null},"Freewayphobia\\Seattle\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FDF2 0063"],"options":null},"Level Select":{"note":"","data":["801876B9 00??"],"options":{"Contest":"07","Frantic Finale":"04","Freewayphobia":"02","Motor Way Mania":"01","Options":"08","Practice":"06","Time Trial":"05","Traffic Troubles":"00","Vitory Vehicles":"03"}},"Motor Way Mania\\Alaska\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E482 0063"],"options":null},"Motor Way Mania\\Las Vegas\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80192B12 0063"],"options":null},"Motor Way Mania\\Los Angeles\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018DCF2 0063"],"options":null},"Motor Way Mania\\Philadelphia\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80193992 0063"],"options":null},"Play As":{"note":"","data":["800D3161 00??"],"options":{"Daisy Duck":"01","Dewey":"07","Donald Duck":"05","Goofy":"02","Huey":"06","Louie":"08","Lugwig Von Drake":"09","Mickey Mouse":"00","Minnie Mouse":"04","Pete":"03"}},"Traffic Troubles\\Grand Canyon\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80193252 0063"],"options":null},"Traffic Troubles\\Indianapolis\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E892 0063"],"options":null},"Traffic Troubles\\New Mexico\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FD52 0063"],"options":null},"Traffic Troubles\\San Fransisco\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191B62 0063"],"options":null},"Unlock Everything":{"note":"This will unlock all characters, tracks, mirror mode, all in-game cheats, postcards, pluto's collar and give you all Trophies for every track and difficulties. To have this cheat save to mempak, enable it and then go into the Options Menu and disable the cheat. Go to the Wide-Screen Settings and Change it to Wide-Screen [16.9] and then the B button to get back to Wide-Screen Settings, now go back into Wide-Screen [16.9] and change it back to Normal [4.3].and press the B button until you come back to the main Options Menu.Close the game and load it again to see everything saved to the Mempak and unlocked.","data":["800D3208 008F","800D3209 0094","800D320A 0003","800D320C 0001","800D320F 0080","50000502 0000","800D3210 0009","50000502 0000","800D3211 0024","800D321A 0015","800D321B 007F","800D321C 0001","800D321D 00FF","800D321E 0004","800D321F 0022"],"options":null},"Victory Vehicles\\Everglades\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FC22 0063"],"options":null},"Victory Vehicles\\Malibu\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801916B2 0063"],"options":null},"Victory Vehicles\\Washington DC\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80197662 0063"],"options":null},"Victory Vehicles\\Yellowstone\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018D4C2 0063"],"options":null}},"73A88E3D-3AC5C571-C:45":{"Arcade Mode\\Car Modifier":{"note":"","data":["802818B3 00??"],"options":{"Hyundai Coupe EVO 2":"08","Mitsubishi Lancer Evolution V":"00","Nissan Almera Kit Car":"03","Proton WIRA":"07","Seat Cordoba WRC":"04","Skoda Octavia":"05","Subaru Impreza WRC":"01","Toyota Corolla WRC":"02","VW Golf GTI MK IV":"06"}},"Championship Mode\\Australia\\Infinite Damage\\Front End":{"note":"","data":["80178FA0 003E"],"options":null},"Championship Mode\\Australia\\Infinite Damage\\Left Side":{"note":"","data":["80178FA4 0040"],"options":null},"Championship Mode\\Australia\\Infinite Damage\\Right Side":{"note":"","data":["80178FA8 0040"],"options":null},"Championship Mode\\Australia\\Infinite Damage\\Tires":{"note":"","data":["80178FAC 0040"],"options":null},"Championship Mode\\Australia\\Start On 3rd Lap":{"note":"","data":["D0178F6F 0001","80178F6F 0003"],"options":null},"Championship Mode\\Brazil\\Infinite Damage\\Front End":{"note":"","data":["801748E0 0040"],"options":null},"Championship Mode\\Brazil\\Infinite Damage\\Left Side":{"note":"","data":["801748E4 0040"],"options":null},"Championship Mode\\Brazil\\Infinite Damage\\Right Side":{"note":"","data":["801748E8 0040"],"options":null},"Championship Mode\\Brazil\\Infinite Damage\\Tires":{"note":"","data":["801748EC 0040"],"options":null},"Championship Mode\\Brazil\\Start On 3rd Lap":{"note":"","data":["D01748AF 0001","801748AF 0003"],"options":null},"Championship Mode\\Canada\\Infinite Damage\\Front End":{"note":"","data":["8017CFA0 0040"],"options":null},"Championship Mode\\Canada\\Infinite Damage\\Left Side":{"note":"","data":["8017CFA4 0040"],"options":null},"Championship Mode\\Canada\\Infinite Damage\\Right Side":{"note":"","data":["8017CFA8 0040"],"options":null},"Championship Mode\\Canada\\Infinite Damage\\Tires":{"note":"","data":["8017CFAC 0040"],"options":null},"Championship Mode\\Canada\\Start On 3rd Lap":{"note":"","data":["D017CF6F 0001","8017CF6F 0003"],"options":null},"Championship Mode\\France\\Infinite Damage\\Front End":{"note":"","data":["80172490 0040"],"options":null},"Championship Mode\\France\\Infinite Damage\\Left Side":{"note":"","data":["80172494 0040"],"options":null},"Championship Mode\\France\\Infinite Damage\\Right Side":{"note":"","data":["80172498 0040"],"options":null},"Championship Mode\\France\\Infinite Damage\\Tires":{"note":"","data":["8017249C 0040"],"options":null},"Championship Mode\\France\\Start On 3rd Lap":{"note":"","data":["D017245F 0001","8017245F 0003"],"options":null},"Championship Mode\\Germany\\Infinite Damage\\Front End":{"note":"","data":["8017DFA0 0040"],"options":null},"Championship Mode\\Germany\\Infinite Damage\\Left Side":{"note":"","data":["8017DFA4 0040"],"options":null},"Championship Mode\\Germany\\Infinite Damage\\Right Side":{"note":"","data":["8017DFA8 0040"],"options":null},"Championship Mode\\Germany\\Infinite Damage\\Tires":{"note":"","data":["8017DFAC 0040"],"options":null},"Championship Mode\\Germany\\Start On 3rd Lap":{"note":"","data":["D017DF6F 0001","8017DF6F 0003"],"options":null},"Championship Mode\\Great Britain\\Infinite Damage\\Front End":{"note":"","data":["801766C0 0040"],"options":null},"Championship Mode\\Great Britain\\Infinite Damage\\Left Side":{"note":"","data":["801766C4 0040"],"options":null},"Championship Mode\\Great Britain\\Infinite Damage\\Right Side":{"note":"","data":["801766C8 0040"],"options":null},"Championship Mode\\Great Britain\\Infinite Damage\\Tires":{"note":"","data":["801766CC 0040"],"options":null},"Championship Mode\\Great Britain\\Start On 3rd Lap":{"note":"","data":["D017668F 0001","8017668F 0003"],"options":null},"Championship Mode\\Have 255 Race Points":{"note":"","data":["80101D1A 00FF"],"options":null},"Championship Mode\\Italy\\Infinite Damage\\Front End":{"note":"","data":["8017E500 0040"],"options":null},"Championship Mode\\Italy\\Infinite Damage\\Left Side":{"note":"","data":["8017E504 0040"],"options":null},"Championship Mode\\Italy\\Infinite Damage\\Right Side":{"note":"","data":["8017E508 0040"],"options":null},"Championship Mode\\Italy\\Infinite Damage\\Tires":{"note":"","data":["8017E50C 0040"],"options":null},"Championship Mode\\Italy\\Start On 3rd Lap":{"note":"","data":["D017E4CF 0001","8017E4CF 0003"],"options":null},"Championship Mode\\Spain\\Infinite Damage\\Front End":{"note":"","data":["801870F0 0040"],"options":null},"Championship Mode\\Spain\\Infinite Damage\\Left Side":{"note":"","data":["801870F4 0040"],"options":null},"Championship Mode\\Spain\\Infinite Damage\\Right Side":{"note":"","data":["801870F8 0040"],"options":null},"Championship Mode\\Spain\\Infinite Damage\\Tires":{"note":"","data":["801870FC 0040"],"options":null},"Championship Mode\\Spain\\Start On 3rd Lap":{"note":"","data":["D01870BF 0001","801870BF 0003"],"options":null},"Championship Mode\\USA\\Infinite Damage\\Front End":{"note":"","data":["8017EFA0 0040"],"options":null},"Championship Mode\\USA\\Infinite Damage\\Left Side":{"note":"","data":["8017EFA4 0040"],"options":null},"Championship Mode\\USA\\Infinite Damage\\Right Side":{"note":"","data":["8017EFA8 0040"],"options":null},"Championship Mode\\USA\\Infinite Damage\\Tires":{"note":"","data":["8017EFAC 0040"],"options":null},"Championship Mode\\USA\\Start On 3rd Lap":{"note":"","data":["D017EF6F 0001","8017EF6F 0003"],"options":null},"Easy Courses\\Australia\\Always Low Lap Timer":{"note":"","data":["81178F90 0000","81178F92 0000"],"options":null},"Easy Courses\\Australia\\Have 1st":{"note":"","data":["80178F87 0000"],"options":null},"Easy Courses\\Great Britian\\Always Low Lap Timer":{"note":"","data":["811766B0 0000","811766B2 0000"],"options":null},"Easy Courses\\Great Britian\\Have 1st":{"note":"","data":["801766A7 0000"],"options":null},"Easy Courses\\Spain\\Always Low Lap Timer":{"note":"","data":["811870E0 0000","811870E2 0000"],"options":null},"Easy Courses\\Spain\\Have 1st":{"note":"","data":["801870D7 0000"],"options":null},"Expert Courses\\Canada\\Always Low Lap Timer":{"note":"","data":["8117CF90 0000","8117CF92 0000"],"options":null},"Expert Courses\\Canada\\Have 1st":{"note":"","data":["8017CF87 0000"],"options":null},"Expert Courses\\Germany\\Always Low Lap Timer":{"note":"","data":["8117DF90 0000","8117DF92 0000"],"options":null},"Expert Courses\\Germany\\Have 1st":{"note":"","data":["8017DF87 0000"],"options":null},"Expert Courses\\USA\\Always Low Lap Timer":{"note":"","data":["8117EF90 0000","8117EF92 0000"],"options":null},"Expert Courses\\USA\\Have 1st":{"note":"","data":["8017EF87 0000"],"options":null},"Infinite Time":{"note":"","data":["81104998 49F2"],"options":null},"Medium Courses\\Brazil\\Always Low Lap Timer":{"note":"","data":["811748D0 0000","811748D2 0000"],"options":null},"Medium Courses\\Brazil\\Have 1st":{"note":"","data":["801748C7 0000"],"options":null},"Medium Courses\\France\\Always Low Lap Timer":{"note":"","data":["81172480 0000","81172482 0000"],"options":null},"Medium Courses\\France\\Have 1st":{"note":"","data":["80172477 0000"],"options":null},"Medium Courses\\Italy\\Always Low Lap Timer":{"note":"","data":["8117E4D0 0000","8117E4D2 0000"],"options":null},"Medium Courses\\Italy\\Have 1st":{"note":"","data":["8017E4E7 0000"],"options":null}},"73ABB1FB-9CCA6093-C:45":{"Always 1st":{"note":"","data":["8022AD06 0001"],"options":null},"Class Select":{"note":"This code is useful because you can play Class AA without having to beat a level!","data":["8021E1A7 00??"],"options":{"1 Play":"04","2 Play":"05","3 Play":"06","4 Play":"07","Class AA":"03","Class B":"01","Class C":"00"}},"Super Speed":{"note":"This is Turbo fast,So to slow it down a little more keep the B button pressed down","data":["8122AEB8 4800"],"options":null}},"7433D9D7-2C4322D0-C:50":{"Have All\\Weapons and Infinite Max Ammo\\Level 01":{"note":"","data":["50000904 0000","802A46AB 0001","50000604 0000","812A46CE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 02":{"note":"","data":["50000904 0000","8028A47B 0001","50000604 0000","8128A49E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 03":{"note":"","data":["50000904 0000","8027223B 0001","50000604 0000","8127225E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 04":{"note":"","data":["50000904 0000","8026A70B 0001","50000604 0000","8126A72E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 05":{"note":"","data":["50000904 0000","8028812B 0001","50000604 0000","8128814E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 06":{"note":"","data":["50000904 0000","8027DA0B 0001","50000604 0000","8127DA2E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 07":{"note":"","data":["50000904 0000","802811CB 0001","50000604 0000","812811EE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 08":{"note":"","data":["50000904 0000","8027C45B 0001","50000604 0000","8127C47E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 09":{"note":"","data":["50000904 0000","80247C7B 0001","50000604 0000","81247C9E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 10":{"note":"","data":["50000904 0000","80276C4B 0001","50000604 0000","81276C6E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 11":{"note":"","data":["50000904 0000","80278AFB 0001","50000604 0000","81278B1E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 12":{"note":"","data":["50000904 0000","8028F69B 0001","50000604 0000","8128F6BE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 13":{"note":"","data":["50000904 0000","80278A4B 0001","50000604 0000","81278A6E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 14":{"note":"","data":["50000904 0000","802807DB 0001","50000604 0000","812807FE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 15":{"note":"","data":["50000904 0000","8027636B 0001","50000604 0000","8127638E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 16":{"note":"","data":["50000904 0000","8028B7FB 0001","50000604 0000","8128B81E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 17":{"note":"","data":["50000904 0000","8027278B 0001","50000604 0000","812727AE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 18":{"note":"","data":["50000904 0000","8026594B 0001","50000604 0000","8126596E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 19":{"note":"","data":["50000904 0000","8024A28B 0001","50000604 0000","8124A2AE 03E7"],"options":null},"Invincible":{"note":"","data":["8002E618 0000"],"options":null},"Status Bar Always On":{"note":"","data":["8008E4CF 0001"],"options":null}},"7435C9BB-39763CF4-C:4A":{"Sixty Frames":{"note":"","data":["80079D3B 0003"],"options":null},"Widescreen":{"note":"","data":["810660D6 3FE3","81066226 3FE3","8106628E 3FE3","81127C04 3FE3"],"options":null}},"74E87A70-6293AED4-C:50":{"Cheats Enabled Modifier":{"note":"","data":["8108F8F0 ????"],"options":{"Anyway (Race Circuits Backwards)":"0400","Big Wheels (Big Foot Cars)":"0040","Car Radio (Remote Control Cars)":"0100","Chopper (Top Down View)":"0200","Easy Money (You Get 1":"0008","Extra Resolution (Able To Change Resolution In Options Screen)":"0800","Fast Bucks (You Get 250":"0004","Skywalker (Hover Cars)":"0080","Smurfing (High Pitched Voices)":"0020","Trophies (Second And Third Championships Wins)":"0010"}},"Have\\Access All Trophies":{"note":"Also gives you all extra features in quick race \u0026 Trophy mode","data":["800BAA9B 0007","800BACAF 0007"],"options":null},"Have\\Always 1st":{"note":"","data":["800C1F81 0001","800C1F83 0001"],"options":null},"Have\\Easy Win":{"note":"Right After Start,Go, Quit Race, And you Have Won","data":["800BACAD 000A"],"options":null},"Have\\Infinite Supply Of Super Tires":{"note":"For All Cars","data":["5000220C 0000","810BAD58 0F0F","5000220C 0000","810BAD5A 0F0F"],"options":null},"Have\\Lots Of Seasons":{"note":"","data":["810BACAA 03E7"],"options":null},"Have\\Max Cash":{"note":"","data":["810BACA4 3AFF","810BACA6 F454"],"options":null},"Have\\Max Race Points":{"note":"","data":["800BACBE 00FF"],"options":null},"Have\\Max Upgrade":{"note":"For All Cars","data":["5000220C 0200","810BAD56 0270"],"options":null},"Race Options\\Laps To Race Select":{"note":"","data":["800A4649 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Race Options\\Race Direction Select":{"note":"","data":["800A4601 00??"],"options":{"Mirrored Normal":"02","Mirrored Reverse":"03","Normal":"00","Reverse":"01"}},"Race Options\\Track Select":{"note":"","data":["8008FA5D 00??"],"options":{"Area 51":"04","Chateau":"07","Docklands":"08","Lumber Mill":"03","Oilfields":"05","Rocket Base":"00","Ski Resort":"02","Temple":"01","Titus Park":"09","Tudor Village":"06"}},"Race Options\\View Select":{"note":"Select your View and then at start of Race press C-Up Button","data":["D00C2171 0000","800C2171 00??"],"options":{"Behind View":"01","Distant Behind View":"0B","Further Behind View":"02","Helicopter View":"FF","Inside Car":"00"}},"Special Category\\A Car [Mind Star 600]":{"note":"","data":["810BAE8E 3D70","810BAE90 0F0F","810BAE92 0F0F"],"options":null},"Special Category\\B Car [Vertige Stallion]":{"note":"","data":["810BAE16 2378","810BAE18 0F0F","810BAE1A 0F0F"],"options":null},"Special Category\\C Car [Mind Star 200R]":{"note":"","data":["810BAD86 0A78","810BAD88 0F0F","810BAD8A 0F0F"],"options":null}},"75A4E247-6008963D-C:45":{"Brandon Gang":{"note":"","data":["80125AB6 0001"],"options":null},"Cassandra Gang":{"note":"","data":["80125AB5 0001"],"options":null},"Edge Hits Everything":{"note":"","data":["80071AF0 0043"],"options":null},"Enable Models":{"note":"","data":["80125AB3 0001"],"options":null},"Infinite Tank Bucks":{"note":"","data":["80236A9F 0064"],"options":null},"Invulnerability":{"note":"","data":["80125AB0 0001"],"options":null},"Level Select":{"note":"","data":["80117F49 0001"],"options":null},"Mini-Tanks 1":{"note":"","data":["80125AB8 0001"],"options":null},"Mini-Tanks 2":{"note":"","data":["80125AB9 0001"],"options":null},"Mini-Tanks 3":{"note":"","data":["80125AB9 0001"],"options":null},"Mini-Tanks 4":{"note":"","data":["80125ABB 0001"],"options":null},"Mini-Tanks 5":{"note":"","data":["80125ABC 0001"],"options":null},"Rapid Fire":{"note":"","data":["8008E7F0 0001"],"options":null},"Secret Level":{"note":"","data":["80125AB2 0001"],"options":null},"Start With All Weapons":{"note":"","data":["80125AB1 0001"],"options":null}},"75B61647-7ADABF78-C:45":{"Max Score":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null},"Press L Button for Max Gauge\\Player 1":{"note":"","data":["D00B49D1 0020","811D2602 0098"],"options":null},"Press L Button for Max Gauge\\Player 2":{"note":"","data":["D00B49D7 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}}},"75FA0E14-C9B3D105-C:44":{"Earn Spirits Faster":{"note":"","data":["8007D66D 0000"],"options":null},"Have All Elements":{"note":"","data":["8107D65C 3232","8107D65E 3232"],"options":null},"Makes your HP 999-999":{"note":"","data":["8107D63C 03E7","8107D63E 03E7"],"options":null},"Makes your MP 999-999":{"note":"","data":["8107D640 03E7","8107D642 03E7"],"options":null},"No Random Battles":{"note":"","data":["8008E12C 0000","8008E12E 0000"],"options":null},"Set Agility to 999-999":{"note":"","data":["8107D644 03E7"],"options":null},"Set Defence to 999-999":{"note":"","data":["8107D646 03E7"],"options":null}},"769147F3-2033C10E-C:45":{"Always Have Equipped\\Player 1":{"note":"","data":["8039B144 00??","8039B147 00??","8039B149 0009"],"options":{"Boomerang":"04","Bullets":"07","Magnet":"01","Seeker":"05","Shield":"08","Stinger":"03","Stopper":"06","Turbo":"00"}},"Always Have Equipped\\Player 2":{"note":"","data":["8039B3E4 00??","8039B3E7 00??","8039B3E9 0009"],"options":{"Boomerang":"04","Bullets":"07","Magnet":"01","Seeker":"05","Shield":"08","Stinger":"03","Stopper":"06","Turbo":"00"}},"Always Have Equipped\\Player 3":{"note":"","data":["8039B684 00??","8039B687 00??","8039B689 0009"],"options":{"Boomerang":"04","Bullets":"07","Magnet":"01","Seeker":"05","Shield":"08","Stinger":"03","Stopper":"06","Turbo":"00"}},"Always Have Equipped\\Player 4":{"note":"","data":["8039B924 00??","8039B927 00??","8039B929 0009"],"options":{"Boomerang":"04","Bullets":"07","Magnet":"01","Seeker":"05","Shield":"08","Stinger":"03","Stopper":"06","Turbo":"00"}},"Game Speed":{"note":"","data":["802C9339 00??"],"options":{"Advanced":"02","Default":"01","Master":"03","Novice":"00"}},"Have All\\Cars":{"note":"","data":["50000402 0000","803DF94B 0001"],"options":null},"Have All\\Cups,Tracks \u0026 Challenges":{"note":"","data":["50000302 0000","802CB4A9 0001","50000402 0000","803DD109 0001"],"options":null},"Infinite Credits":{"note":"","data":["80388C1D 0009"],"options":null},"Max Score Points":{"note":"","data":["8139AFB6 03E7"],"options":null},"Sixty Frames (odd again)":{"note":"Too fast like the other one,tis' a shame.","data":["802ADD4B 0001","802ADD7B 0001"],"options":null}},"776646F6-06B9AC2B-C:50":{"Boost From Start":{"note":"","data":["D02C4DA0 003F","802C4925 0050"],"options":null},"Infinite Lives":{"note":"","data":["800D8729 0005"],"options":null},"Infinite Shield":{"note":"","data":["812C4B48 4326","812C4B4C 4326"],"options":null},"Time Always 00.00.00/1st Place":{"note":"","data":["812C4BC0 0000","812C4BC2 0001"],"options":null},"Unlock Everything":{"note":"","data":["810C01E8 0100"],"options":null}},"782A9075-E552631D-C:44":{"Have 99 coins":{"note":"","data":["810BBBDE 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C8542 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BBBCC 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BBBD6 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BBBDA 0009"],"options":null}},"7928FE93-135A30CB-C:45":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118D8C0 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118D8C2 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118D8C4 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118D8C6 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["50000401 0000","8018ED10 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\1-2 player Mode\\Player 1":{"note":"","data":["80165F5D 00??","80165F8A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\1-2 player Mode\\Player 2":{"note":"","data":["8016603D 00??","8016606A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["8016611D 00??","8016614A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["801661FD 00??","8016622A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["801662DD 00??","8016630A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["801663BD 00??","801663EA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818EDEF 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F6915 0020","810F69C8 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F6925 0020","810F77A0 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F6935 0020","810F8578 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F6945 0020","810F9350 4000"],"options":null}},"7A65FDEC-50296300-C:45":{"All 64 Characters In Multi Player":{"note":"","data":["8002B197 0040"],"options":null},"All Objectives Complete":{"note":"","data":["80036FD3 0001"],"options":null},"Always Have\\00:00 Time (All Levels)":{"note":"","data":["8004837E 0000","8004838E 0000","80048396 0000","80079A22 0000","80079F26 0000"],"options":null},"Bulletproof Bond":{"note":"","data":["8002CE44 0030"],"options":null},"Cradle in multiplayer":{"note":"Puts the cradle graphic in the levels screen where the facility normally is in the multiplayer levels screen.Warning it doesn't allow you to enter the multiplayer levels screen,it should automatically Have\\selected cradle, which cannot be changed from the multiplayer menus","data":["8002B11D 0092","8002B11F 0093","8002B127 0029","8002B123 0008","802ADC8D 0052","802ADC8E 0041","802ADC8F 0044","802ADC90 004C","802ADC91 0045"],"options":null},"Custom Weapon Grouping":{"note":"golden gun fun should replace slappers only! appears in the multi weapons.","data":["80048673 0013","81048678 3FC0","80048677 00D0","8004867F 000D","80048683 000A","8004868B 0013","81048690 3FC0","8004868F 00D0","80048697 000D","8004869B 000A","800486A3 0019","810486A8 3FC0","800486A7 00D3","800486AF 0006","800486B3 0003","800486BB 0019","810486C0 3FC0","800486BF 00D3","800486C7 0006","800486CB 0003","800486D3 0013","810486D8 3FC0","800486D7 00D0","800486DF 000D","800486E3 000A","800486EB 0013","810486F0 3FC0","800486EF 00D0","800486F7 000D","800486FB 000A","80048703 0019","81048708 3FC0","80048707 00D3","8004870F 0006","80048713 0003","8004871B 0019","81048720 3FC0","8004871F 00D3","80048727 0006","8004872B 0003","812AEA50 476F","812AEA52 6C64","812AEA54 656E","812AEA56 2047","812AEA58 756E","812AEA5A 2046","812AEA5C 756E","802AEA5E 0000"],"options":null},"Enable All Levels":{"note":"","data":["80036FB7 0001"],"options":null},"Enable All Levels \u0026 In-Built Cheat Menu":{"note":"","data":["8006992E FFFF","80069930 FFFF","80069967 FFFF","8006996C FFFF","80069971 FFFF","80069976 FFFF","8006997B FFFF","8006992F FFFF","80069965 FFFF","8006996A FFFF","8006996F FFFF","80069974 FFFF","80069979 FFFF"],"options":null},"Facility Back Zone In Multiplayer\\Part 1\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811E6554 45E4","811E6558 43D5","811E655C C5A7","811E657C 801C","811E657E 6774","811E5164 45E4","811E5168 C383","811E516C 4492","811E518C 801C","811E518E D574","811E78C0 45AD","811E78C4 C383","811E78C8 4440","811E78E8 801C","811E78EA E464","811E4D18 45D0","811E4D1C 4307","811E4D20 C4FB","811E4D40 801C","811E4D42 75EC","811E6738 45CD","811E673C C383","811E6740 43F4","811E6760 801C","811E6762 A0DC","811E5450 45C2","811E5454 4356","811E5458 C598","811E5478 801C","811E547A 6A74","811E5240 4608","811E5244 4307","811E5248 43DC","811E5268 801C","811E526A 962C","811E691C 4606","811E6920 4321","811E6924 449D","811E6944 801C","811E6946 CBEC","801ED447 008A","801ED4DB 008B","801ED56F 008C","801ED603 008D","801ED697 008E","801ED72B 008F","801ED7BF 007D","801ED853 007E","801ED443 002A","801ED4D7 002A","801ED56B 002A","801ED5FF 002A","801ED693 002A","801ED727 002A","801ED7BB 002A","801ED84F 002A","801ED449 0000","801ED4DD 0000","801ED571 0000","801ED605 0000","801ED699 0000","801ED72D 0000","801ED7C1 0000","801ED855 0000","801ED44D 0000","801ED4E1 0000","801ED575 0000","801ED609 0000","801ED69D 0000","801ED731 0000","801ED7C5 0000","801ED859 0000","801EB743 002A","801EB745 0068","811EB746 277F","811EB748 1000","811EB74A 0262","811EB7C2 0190","801EB7C5 0000","811EB7C6 0258"],"options":null},"Facility Back Zone In Multiplayer\\Part 2\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811EB7C8 0000","811EB7CC FFFF","811EB7CE FFFF","811EB7D2 0000","801EB7D5 0000","801EB7DB 0000","811EB7E2 0000","801EB7E7 0000","801EB843 002A","801EB845 0068","811EB846 2780","811EB848 1000","811EB84A 0262","811EB8C2 0190","801EB8C5 0000","811EB8C6 0258","811EB8C8 0000","811EB8CC FFFF","811EB8CE FFFF","811EB8D2 0000","801EB8D5 0000","801EB8DB 0000","811EB8E2 0000","801EB8E7 0000","801EB943 002A","801EB945 0068","811EB946 2791","811EB948 1000","811EB94A 0262","811EB9C2 0190","801EB9C5 0000","811EB9C6 0258","811EB9C8 0000","811EB9CC FFFF","811EB9CE FFFF","811EB9D2 0000","801EB9D5 0000","801EB9DB 0000","811EB9E2 0000","801EB9E7 0000","801EBA43 002A","801EBA45 0068","811EBA46 2792","811EBA48 1000","811EBA4A 0262","811EBAC2 0190","801EBAC5 0000","811EBAC6 0258","811EBAC8 0000","811EBACC FFFF","811EBACE FFFF","811EBAD2 0000","801EBAD5 0000","801EBADB 0000","811EBAE2 0000","801EBAE7 0000","801EBB45 00A0","801EBC45 00A0","801EBD45 00A0","801EBE45 00A0","801EBB47 0075","801EBC47 0076","801EBD47 0077","801EBE47 0078","801EBBE7 0001","801EBCE7 0001","801EBDE7 0001","801EBEE7 0001","801EC247 0071","801ECD47 0072","801ECE47 0074","801ECF47 006C","801ED047 0079","801ED147 0083","D01EBFC5 005A","801EBFC5 0000","D11EBFC6 0000","811EBFC6 F333","D11EBFC8 03E8","811EBFC8 0000"],"options":null},"Facility Back Zone In Multiplayer\\Part 3\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["D11EBFCA 0000","811EBFCA F0C4","D11EBFCE 4CCC","811EBFCE 000A","D11EBFD2 4CCC","811EBFD2 000A","D11EBFD4 0003","811EBFD4 0000","D11EBFD6 0000","811EBFD6 02C4","801EBFD9 0004","801EBFDB 0000","811EBFE2 0384","801EBFE7 0004","801EBF45 009E","801EBF47 0084","801EBF48 0010","801EC2D9 0000","801EC447 0085","801EC547 0086","811EA6B6 2743","811EA73E 0114","811EA7F2 0115","811EA8A6 00A3","811EA92E 009D","811EA9E2 00A4","811EAA96 00DA","811EAB1E 00DB","811EABD2 00DF","811EAC86 0130","811EAD0E 008D","811EADC2 012E","811EAE76 0111","811EAEFE 2740","811EAFB2 2741","811EB066 00A0","811EB0EE 009E","811EB1A2 009F","811EB256 274F","811EB2DE 2750","811EB392 0117","811EB446 0131","811EB4CE 008E","811EB582 0132","811EB636 00A1","811EB6BE 0119","811EA62E 00FA","801ED3DF 0000","801ED2DF 0001","D0024337 0007","80024337 001F"],"options":null},"Gain Access\\To Aztec Level Without Beating Secret Agent Or 00 Agent":{"note":"","data":["8002A8FB 001A"],"options":null},"Gain Access\\To Egyptian Level Without Beating Secret Agent Or 00 Agent":{"note":"","data":["8002A8FB 001C"],"options":null},"Infinite Ammo (All Levels)":{"note":"","data":["80079E3B 0001"],"options":null},"Infinite Health Player 1 (all levels)":{"note":"","data":["8100C0F4 0801","8100C0F6 8090","8100C0F8 AFA4","8100C0FA 0000","81060240 0004","81060242 7600","81060244 3C02","81060246 8008","81060248 8C42","8106024A 9EE0","8106024C 3401","8106024E 3F80","81060250 A441","81060252 00DC","81060254 0800","81060256 303F"],"options":null},"Replace Cradle with Citadell hidden level":{"note":"","data":["8002A8F7 0029","8104468A 8970","81044690 3F44","81044692 BDEA","81044694 3F80","81044696 0000","81044698 4219","8104469A D89D","80069F80 00C4"],"options":null},"Secret Island on Dam Level":{"note":"For the above code to work,Get to the 2nd guard tower \u0026 go down the ladder on the left hand side \u0026 to the end of the Dock, Press L \u0026 GS and you will be transfered in the water. Just keep walking straight \u0026 you will get to it. Obviously you can't actually climb ladders or anything, you will simply walkthrough anything on that Part, if you want to walk back to the Dock, when you come near it click the cheat back on \u0026 keep pressing L \u0026 GS untill you are back on it.","data":["D0064F31 0020","800D33ED 0050","880D33ED 0000"],"options":null},"Walk through doors, objects":{"note":"","data":["800364CB 00??"],"options":{"Off":"01","On":"00"}},"Weak Enemies":{"note":"","data":["8002CE48 0048"],"options":null}},"7AA65B36-FDCEE5AD-C:4A":{"Always Have\\BFG 9000":{"note":"","data":["80063B4B 0001"],"options":null},"Always Have\\Bio Suite":{"note":"","data":["80063AF3 00??"],"options":{"Off":"00","On":"FF"}},"Always Have\\Chain Gun":{"note":"","data":["80063B3F 0001"],"options":null},"Always Have\\Chainsaw":{"note":"","data":["80063B2B 0001"],"options":null},"Always Have\\Double Shotgun":{"note":"","data":["80063B3B 0001"],"options":null},"Always Have\\Gun":{"note":"","data":["80063B33 0001"],"options":null},"Always Have\\Have Rocket Launcher":{"note":"","data":["80063B41 0001"],"options":null},"Always Have\\Laser Weapon":{"note":"","data":["80063B4D 0001"],"options":null},"Always Have\\Missile Launcher":{"note":"","data":["80063B43 0001"],"options":null},"Always Have\\Plasma Rifle":{"note":"","data":["80063B47 0001"],"options":null},"Always Have\\Rapid Fire":{"note":"","data":["81063BAA 0B94"],"options":null},"Always Have\\Shotgun":{"note":"","data":["80063B37 0001"],"options":null},"Berserk Mode":{"note":"","data":["80063AEB 00FF"],"options":null},"Enable Cheat Menu":{"note":"","data":["8005B043 0001"],"options":null},"Have All\\Keys":{"note":"","data":["50000504 0000","81063AFE FFFF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000A04 0000","81063B2A 0001"],"options":null},"Infinite\\Ammo All Weapons":{"note":"","data":["50000404 0000","81063B52 013C"],"options":null},"Infinite\\Armor":{"note":"","data":["80063ADF 00FF"],"options":null},"Invincible":{"note":"","data":["80063B7B 0002"],"options":null},"Invincible And Map Markers":{"note":"","data":["80063B7B 0006"],"options":null},"Turn Map Markers On":{"note":"","data":["80063B7B 0004"],"options":null},"[Max Brightness]":{"note":"Enable this cheat on rom load to have Max Brightness (internal) and then put Jabo d3d8 on 160% Max for a extra brightness Boost.","data":["8005B598 0064"],"options":null}},"7BB18D40-83138559-C:55":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2CD2 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE51F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80382CB7 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","80202BB5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","801DE715 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","801FD085 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","801F042D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","80202CE5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","801DA57D 0001"],"options":null}},"7C3829D9-6E8247CE-C:45":{"Lower Left Character\\Coin Options":{"note":"","data":["810D1182 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDC6D 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800D1186 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["810D11BA 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDCB9 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800D11BE 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["810D1112 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDBD5 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800D1116 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["810D114A 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDC21 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800D114E 00??"],"options":{"0 Stars":"00","99 Stars":"64"}}},"7C647C25-D9D901E6-C:45":{"Ballista Can Drive Through Anything":{"note":"","data":["803F8A68 0001"],"options":null},"Found All\\RDUS":{"note":"","data":["8036E9CC C350"],"options":null},"Found All\\Scientists":{"note":"","data":["80364AD0 003F"],"options":null},"Found All\\Survivors":{"note":"","data":["8036E9C9 00FF"],"options":null},"Infinite Time":{"note":"","data":["D0315610 0000","81315610 0000","D0315612 0001","81315612 0000"],"options":null},"Infinite\\Boosts Buggy Vehicle":{"note":"","data":["803EE301 0064"],"options":null},"Infinite\\Hydraulics Sidesweeper":{"note":"","data":["803EDB51 0063"],"options":null},"Infinite\\Missiles Motor Bike":{"note":"","data":["803F8AC3 0063"],"options":null}},"7C647E65-1948D305-C:45":{"Ballista Can Drive Through Anything":{"note":"","data":["803F8B17 0001"],"options":null},"Found All\\RDUS":{"note":"","data":["8036EA7C C350"],"options":null},"Found All\\Scientists":{"note":"","data":["80364B80 003F"],"options":null},"Found All\\Survivors":{"note":"","data":["8036EA70 00FF"],"options":null},"Infinite Time":{"note":"","data":["D03156C0 0000","813156C0 0000","D03156C2 0001","813156C2 0000"],"options":null},"Infinite\\Boosts Buggy Vehicle":{"note":"","data":["803EE3B0 0064"],"options":null},"Infinite\\Hydraulics Sidesweeper":{"note":"","data":["803EDC00 0063"],"options":null},"Infinite\\Missiles Motor Bike":{"note":"","data":["803F8B72 0063"],"options":null}},"7C64E6DB-55B924DB-C:50":{"Ballista Can Drive Through Anything":{"note":"","data":["803F8A68 0001"],"options":null},"Found All RDUS":{"note":"","data":["8036E9CC C350"],"options":null},"Found All Scientists":{"note":"","data":["80364AD0 003F"],"options":null},"Found All Survivors":{"note":"","data":["8036E9C9 00FF"],"options":null},"Infinite Boosts Buggy Vehicle":{"note":"","data":["803EE301 0064"],"options":null},"Infinite Hydraulics Sidesweeper":{"note":"","data":["803EDB51 0063"],"options":null},"Infinite Missiles Motor Bike":{"note":"","data":["803F8AC3 0063"],"options":null}},"7CD08B12-1153FF89-C:45":{"Can Walk When The Game Is Paused":{"note":"","data":["810AB9B6 0001"],"options":null},"Have All\\Keys":{"note":"This will give you the Grey \u0026 Red,Green \u0026 Gold Keys","data":["800BD0B8 00FF","800BD0BE 00FF","800BD0BD 00FF"],"options":null},"Have All\\Music Notes":{"note":"This will give you all 10 Music Notes","data":["50000A01 0000","800BD1F0 0001"],"options":null},"Infinite\\Health":{"note":"","data":["800BD0F7 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["800BD0E3 0009"],"options":null},"Max Money":{"note":"","data":["810BD0E6 03E7"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D017DBC5 0020","810DAFD8 44CB"],"options":null}},"7DE11F53-74872F9D-C:45":{"99 Points":{"note":"","data":["801CB0A3 0063"],"options":null},"Always First Place":{"note":"","data":["801C269F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801C2983 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801C295E 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801C27C7 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801C2DEA 0005","801C308A 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801C27CF 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800DA753 0007"],"options":null},"Open\\Course Option":{"note":"This works in all modes except for Championship Mode.","data":["801CAFEB 00??"],"options":{"Dolphin Park":"00","Drake Lake":"03","Glacier Coast":"07","Marian Fortress":"04","Port Blue":"05","Southern Island":"08","Sunny Beach":"01","Sunset Bay":"02","Twilight City":"06"}},"Open\\Difficulty Option":{"note":"","data":["801CAFE0 00??"],"options":{"Dolphin":"10","Dolphin \u0026 Expert":"12","Dolphin \u0026 Hard":"11","Dolphin Hard \u0026 Expert":"13","Expert":"02","Hard":"01","Hard \u0026 Expert":"03"}},"Open\\Level Option":{"note":"","data":["800DA753 00??"],"options":{"Above \u0026 Drake Lake":"03","All Above \u0026 Glacier Coast":"16","All Above \u0026 Marine Fortress":"04","All Above \u0026 Port Blue":"05","All Above \u0026 Southern Island":"06","All Above \u0026 Twilight City":"0D","Sunset Bay":"02"}},"Super Speed":{"note":"","data":["801C27C7 0005","D0154051 0010","801C27C7 0020"],"options":null},"Widescreen":{"note":"","data":["810699FA 3FE3","811E11F2 3FE3","811EF3F2 3FE3","811F07E6 3FE3","D12C58C2 4204","812C58C6 3FAA","D12C5896 8C50","812C5890 3C07","D12C5896 8C50","812C5892 3FAA"],"options":null}},"7EAE2488-9D40A35A-C:4A":{"Have All Guns In Chest":{"note":"","data":["50000E04 0100","810E5474 05FF"],"options":null},"Have All Main Items In Chest":{"note":"If you want items that are not listed in the Chest, then just use the Have Item On Slot Select code to have what you desire.","data":["810E54AC 17FF","810E54B0 1EFF","810E54B4 1FFF","810E54B8 23FF","50000404 0100","810E54BC 25FF","810E54CC 2AFF","810E54D0 2BFF","50000304 0100","810E54D4 2EFF","50000F04 0100","810E54E0 32FF","810E551C 43FF","50000504 0100","810E5520 47FF","50000404 0100","810E5534 53FF","50000C04 0100","810E5544 58FF"],"options":null},"Have\\Fine Condition Always":{"note":"","data":["810DD964 0000"],"options":null},"Have\\Item On Slot Select\\Slot 01":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5448 00??","800E5449 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 02":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E544C 00??","800E544D 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 03":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5450 00??","800E5451 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 04":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5454 00??","800E5455 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 05":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5458 00??","800E5459 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 06":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E545C 5D??","800E545D 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 07":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5460 00??","800E5461 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 08":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5464 00??","800E5465 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 09":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5468 00??","800E5469 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 10":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E546C 00??","800E546D 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Infinite\\Health":{"note":"","data":["810DD8A2 00C8"],"options":null},"Infinite\\Time":{"note":"","data":["800E8CBF 0010"],"options":null},"Play As":{"note":"This allows you to select what character you wish to play as. Just slect on load and select as normal at the menu and when in game you will be the character of your choice","data":["810DD6B8 ????"],"options":{"Ada (can crash the game)":"0E80","Cheryl":"0F80","Claire Original":"0380","Claire as Biker":"0980","Claire without jacket":"0780","Claires body Leons outfit":"0B80","Hunk (can crash the game)":"0C80","Leon Original":"0280","Leon Wounded":"0680","Leon as Biker":"0A80","Leon as Stars":"0880","To Fu":"0D80"}},"Play Extra Mission":{"note":"This allows you to select what extra mission you wish to play. Just slect on load and carry on as normal at the menu and when in game you will be the character of your choice Do not use at the same time as [Resident Evil 2 Mode]","data":["810DD66E 00??"],"options":{"The 4th Survior":"48","To-Fu":"49"}},"Quick Chest Access":{"note":"With this code, all you Have\\to do to access the chest, is hold L and C-Down","data":["D10DBE8C 0005","810E4EA8 8007","D10DBE8C 0005","810E4EAA 0814"],"options":null},"Quick Save Access":{"note":"(1 Anytime, anywhere, press Z and C-Down at the same time. You'll get the standard typewriter text: \"It's an old typewriter. You can save your progress with this.\" Note that you must, of course, Have\\an ink ribbon to save. 2) Choose \"Yes\" and you'll be able to save normally. Instead of the location name, your save file will say \"Scenario 1st\" or \"Scenario 2nd.\" 3) When you load your save file, you'll Have\\to skip through the intro, but when the game loads up you'll be exactly where you saved!","data":["D10DBE8C 0044","810E4EA8 8007","D10DBE8C 0044","810E4EAA 06B0"],"options":null},"[Resident Evil 2 Mode]":{"note":"Note: With this enabled the game will become Resident Evil 2, the English version of Biohazard 2! This means all text (except the text in files) is in Japanese, and all cinemas Have\\English subtitles. Note that the title screen will still say Biohazard 2 Do not use at the same time as Play Extra Mission","data":["810DD66E 00??"],"options":{"Off":"00","On":"40"}},"[Saves Always 0]":{"note":"No matter how many saves you do ithis makes the game think you Have\\not saved.","data":["800E50D1 0000"],"options":null}},"7ECBE939-3C331795-C:45":{"Have all Cheats":{"note":"Go into the Cheats From the main Menu \u0026 put on the Ones you want","data":["810CD226 01FF"],"options":null}},"7ED67CD4-B4415E6D-C:50":{"Access Demitron Character":{"note":"","data":["80049AA4 0001"],"options":null},"Access Sonork Character":{"note":"","data":["80049AA0 0001"],"options":null},"Infinite Health\\All Levels\\Player 1":{"note":"","data":["812716E0 0190","8127BDB8 0190","8127E478 0190","81292EE8 0190","81293768 0190","81297538 0190","812ACCC8 0190","812B1CE8 0190","812B7BE8 0190","8138AEE0 0190"],"options":null},"Infinite Health\\All Levels\\Player 2":{"note":"","data":["81271FB8 0190","8127B158 0190","8127E820 0190","81293B48 0190","81294390 0190","812980B8 0190","812AD608 0190","812B2D08 0190","812B67D8 0190","8138A898 0190"],"options":null},"Music Modifier":{"note":"","data":["80081812 00??"],"options":{"Music Off":"00","Volume Low":"2A","Volume Max":"7F","Volume Medium":"55"}},"Press GS For 2 Rounds Won\\Player 1":{"note":"","data":["880B6491 0002"],"options":null},"Press GS For 2 Rounds Won\\Player 2":{"note":"","data":["880B64A3 0002"],"options":null}},"7EE0E8BB-49E411AA-C:50":{"Access AT-ST Level":{"note":"","data":["81130B38 1250"],"options":null},"Access\\69 Buick Electra":{"note":"Replaces The V-Wing","data":["81130B3A 000E"],"options":null},"Accesses\\All Levels,Ships \u0026 Advanced Weapons":{"note":"","data":["80130B3B 00FF"],"options":null},"Accuracy 100%":{"note":"","data":["80130B5F 0063"],"options":null},"Always Pass Mission":{"note":"","data":["80130AF4 0001"],"options":null},"Bonus Collected 756":{"note":"","data":["80130B67 03E7"],"options":null},"Completion Time 0:00":{"note":"","data":["80130B85 3FCB"],"options":null},"Enemies Destroyed 756":{"note":"","data":["81130B64 03E7"],"options":null},"Friendly Saves 756":{"note":"","data":["80130B66 03E7"],"options":null},"Infinite Lives":{"note":"This Also accesses advanced Shields \u0026 Radar","data":["81130B38 01C0"],"options":null},"Infinite Secondary Weapon":{"note":"","data":["8010CA02 0063","80130B23 00??"],"options":{"Bombs":"04","Cluster Missiles":"07","Ion Cannon":"01","Missiles":"02","Proton Bombs":"05","Seeker Cluster Missiles":"09","Seeker Missiles":"03","Seeker Torpedos":"08"}},"Invincibility":{"note":"This Also Accesses All Levels And Makes All Crafts Available","data":["80130B2D 00FF"],"options":null}},"7F3CEB77-8981030A-C:45":{"Infinite Dinars":{"note":"","data":["800B6043 00E8","800B6042 00E8"],"options":null},"Infinite Health":{"note":"","data":["810CF93E 03E7","810CF942 03E7"],"options":null},"Infinite Magic":{"note":"","data":["810B65CA 0063","810B65B2 0063","810B65E2 0063","810B65FA 0063"],"options":null},"Press L for 1 Hit Kill Punch":{"note":"Press The L Button \u0026 Hold B \u0026 Then Let Go to Kill Enimies,Rocks,Tents etc with One Punch.","data":["D0103383 0020","800D9BCE 0000"],"options":null},"Press L to Levitate":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D017D2D5 0020","810CF994 44CB"],"options":null}},"7F43E701-536328D1-C:50":{"Always Place 1st":{"note":"","data":["8031EC0F 0000"],"options":null},"Extra Cars \u0026 Tracks":{"note":"","data":["8032690F 00FF","8032690C 00FF","8032690D 00FF"],"options":null},"Have 1-6 Level Points":{"note":"","data":["8032685F 0064","80326861 0064","80326863 0064","80326865 0064","80326867 0064","80326869 0064"],"options":null},"Only Race 1 Lap Championship Mode":{"note":"","data":["8031EBDB 0002"],"options":null}},"7F9345D3-841ECADE-C:50":{"Always Have\\Most Powerful Weapon":{"note":"","data":["80088ED9 0003"],"options":null},"Fifty Frames":{"note":"Too fast,needs pacing code.","data":["80088E34 0001"],"options":null},"Fifty Frames (ASM)":{"note":"Still too fast.","data":["810012C4 240B","810012C6 0001"],"options":null},"Play As\\Player 1":{"note":"","data":["80088E02 00??"],"options":{"Ebisumaru":"01","Goemon":"00","Sasuke":"02","Yae":"03"}},"Unlimited Gate Opener Things":{"note":"","data":["80088EC6 0099"],"options":null},"Unlimited Health\\Player 1":{"note":"","data":["80088ED4 0004"],"options":null},"Unlimited Shield\\Player 1":{"note":"","data":["80088ED5 0004","8015D3C4 0001"],"options":null}},"8066D58A-C3DECAC1-C:45":{"Always On First Shot":{"note":"","data":["811DA47A 0001"],"options":null},"Club Type\\Irons Mods":{"note":"","data":["8012A473 00??"],"options":{"Cavity":"00","Conventional":"01"}},"Club Type\\Sand Wedge Mods":{"note":"","data":["8012A474 00??"],"options":{"58 Degrees":"00","60 Degrees":"01","62 Degrees":"02"}},"Club Type\\Woods Mods":{"note":"","data":["8012A472 00??"],"options":{"Metal Wood":"01","Persimmon":"02","Titan":"00"}},"Max Power":{"note":"","data":["8012A431 FFFF"],"options":null},"Max Putt":{"note":"","data":["8012A435 FFFF"],"options":null},"Max Recover":{"note":"","data":["8012A437 FFFF"],"options":null},"Max Technique":{"note":"","data":["8012A433 FFFF"],"options":null},"Select Club":{"note":"","data":["801DA496 00??"],"options":{"1I":"05","1W":"00","2I":"06","2W":"01","3I":"07","3W":"02","4I":"08","4W":"03","5I":"09","5W":"04","6I":"0A","7I":"0B","8I":"0C","9I":"0D","AW":"0F","PW":"0E","Putter":"11","SW":"10"}}},"80C8564A-929C65AB-C:4A":{"Max Score":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null},"Press L Button for Max Gauge\\Player 1":{"note":"","data":["D00B2791 0020","811D2602 0098"],"options":null},"Press L Button for Max Gauge\\Player 2":{"note":"","data":["D00B2797 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}}},"80F41131-384645F6-C:4A":{"Always 1st":{"note":"","data":["8013CD60 0001"],"options":null},"Freeze All Lap Timers":{"note":"","data":["8013CD21 0001","8013CD25 0001","8013CD29 0001"],"options":null},"Freeze Overall Timer":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8013CD15 0001"],"options":null},"Laps Of Race":{"note":"","data":["8013CD0E 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","Never Ending Laps":"06"}},"Level Select":{"note":"For this cheat to work,as soon as you put the cheat on you must turn it back off,if not you wont beable to quit a Race or even finish one.","data":["8013D01B 00??"],"options":{"Bikini Island":"01","Canyon Rush":"00","China Town":"02","China Town Jam":"04","Neo Arena":"03","Neo Speed Way":"05"}},"Music Modifier":{"note":"","data":["80106CCC 00??"],"options":{"Music Off":"00","Music On":"FF"}},"No Damage\\Player 1":{"note":"","data":["50000402 0000","8113D058 0000"],"options":null},"No Damage\\Player 2":{"note":"","data":["50000402 0000","8113F0E8 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["8013D015 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Play As\\Player 2":{"note":"","data":["8013D016 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Unlock All Tracks and Vehicles":{"note":"","data":["8008D1FC 0001"],"options":null}},"810729F6-E03FCFC1-C:45":{"Away Team\\Full Court Dunks":{"note":"","data":["81182E4E 0004","8118305A 0004","81183266 0004","81183472 0004","8118367E 0004"],"options":null},"Away Team\\Giant Players":{"note":"","data":["81182DF6 0032","81182DFE 003C","81183002 0032","8118300A 003C","8118320E 0032","81183216 003C","8118341A 0032","81183422 003C","81183626 0032","8118362E 003C"],"options":null},"Away Team\\Scores 0":{"note":"","data":["81160FFE 0000"],"options":null},"Away Team\\Scores 150":{"note":"","data":["81160FFE 0096"],"options":null},"Away Team\\Tiny Players":{"note":"","data":["81182DF6 0011","81182DFE 0014","81183002 0011","8118300A 0014","8118320E 0011","81183216 0014","8118341A 0011","81183422 0014","81183626 0011","8118362E 0014"],"options":null},"Creation Points (L / R)":{"note":"","data":["D0061269 0020","8117E008 0200","D0061269 0010","8117E008 0000"],"options":null},"Home Team\\Full Court Dunks":{"note":"","data":["81182412 0004","8118261E 0004","8118282A 0004","81182A36 0004","81182C42 0004"],"options":null},"Home Team\\Giant Players":{"note":"","data":["811823BA 0032","811823C2 003C","811825C6 0032","811825CE 003C","811827D2 0032","811827DA 003C","811829DE 0032","811829E6 003C","81182BEA 0032","81182BF2 003C"],"options":null},"Home Team\\Scores 0":{"note":"","data":["81160FFA 0000"],"options":null},"Home Team\\Scores 150":{"note":"","data":["81160FFA 0096"],"options":null},"Home Team\\Tiny Players":{"note":"","data":["811823BA 0011","811823C2 0014","811825C6 0011","811825CE 0014","811827D2 0011","811827DA 0014","811829DE 0011","811829E6 0014","81182BEA 0011","81182BF2 0014"],"options":null},"Infinite\\Time Outs\\Away":{"note":"","data":["800D5C9B 0007"],"options":null},"Infinite\\Time Outs\\Home":{"note":"","data":["800D5C75 0007"],"options":null},"No Time Outs\\Away":{"note":"","data":["800D5C9B 0000"],"options":null},"No Time Outs\\Home":{"note":"","data":["800D5C7F 0000"],"options":null}},"812289D0-C2E53296-C:50":{"1 Player\\Always Place 1st":{"note":"","data":["80103CD7 0000"],"options":null},"1 Player\\Max\\Acceleration":{"note":"","data":["8012C51F 000A"],"options":null},"1 Player\\Max\\Shocks":{"note":"","data":["8012C527 000A"],"options":null},"1 Player\\Max\\Speed":{"note":"","data":["8012C523 000A"],"options":null},"1 Player\\Max\\Tires":{"note":"","data":["8012C52B 000A"],"options":null},"Multi and 1 Player\\Infinite Turbos\\Player 1":{"note":"Can be used in 1 Player and Multiplayer Modes for Player 1","data":["81103F3A 03E7"],"options":null},"Multi and 1 Player\\Infinite Turbos\\Player 2":{"note":"Multiplayer Mode Only for Player 2","data":["8110422E 03E7"],"options":null},"Multi and 1 Player\\Max Crash Helmets\\Player 1":{"note":"Can be used in 1 Player and Multiplayer Modes for Player 1","data":["80103F33 0064"],"options":null},"Multi and 1 Player\\Max Crash Helmets\\Player 2":{"note":"Multiplayer Mode Only for Player 2","data":["80104227 0064"],"options":null}},"817D286A-EF417416-C:53":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2712 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE03F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802026F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE255 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FCB85 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFF6D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802027A5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DA0BD 0001"],"options":null}},"82380387-DFC744D9-C:50":{"Widescreen":{"note":"Boards in 4:3.","data":["8101FBBA 3FE3","81052D3C 080C","81052D3E 0074","81052D40 3C1B","81052D42 3FAB","813001D0 449B","813001D2 6000","813001D4 460C","813001D6 0002","813001D8 4606","813001DA 0002","813001DC 0801","813001DE 4B51","813001E0 2400"],"options":null}},"82B3248B-E73E244D-C:45":{"Always Play On\\2D Board":{"note":"","data":["800E7257 0001"],"options":null},"Always Play On\\3D Board":{"note":"","data":["800E7257 0000"],"options":null},"Debug Mode":{"note":"","data":["810E6290 0001"],"options":null},"Player 1 Controls\\Both Sides In 2-Player":{"note":"This is only for Human VS. Human Game","data":["8012C508 0000"],"options":null},"Time Always Counts Down\\On Black Players Side":{"note":"","data":["8012C67D 0001"],"options":null},"Time Always Counts Down\\On White Players Side":{"note":"","data":["8012C67D 0000"],"options":null}},"82DC04FD-CF2D82F4-C:45":{"Always Have\\50 pieces of corn":{"note":"","data":["801E1A39 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E1A28 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["801E1A26 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E1A3A 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E1A2D 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E1A38 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D008F2C1 0010","801E199E 0001","D008F2C1 0010","801E19AE 0001"],"options":null},"Start with Berry Weapon":{"note":"","data":["811E1A2E 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Unlock All Levels":{"note":"","data":["81099150 000F"],"options":null}},"82EFDC30-806A2461-C:45":{"Away Team Scores 50":{"note":"","data":["801F6407 0032","802004C0 0032"],"options":null},"Home Team Scores 50":{"note":"","data":["801F6406 0032","802004BF 0032"],"options":null}},"839F3AD5-406D15FA-C:50":{"Have All\\Characters Available":{"note":"","data":["810657A0 FFFF"],"options":null},"Have All\\Courts Available":{"note":"","data":["810657A4 FFFF"],"options":null},"Score\\Player 1":{"note":"","data":["80152DFA 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}},"Score\\Player 2":{"note":"","data":["80152DFB 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}}},"83F33AA9-A901D40D-C:45":{"Infinite Time":{"note":"","data":["8114C3D8 000A"],"options":null},"Pick Your Kombat Zone":{"note":"","data":["81257684 00??"],"options":{"Armory":"14","Bell Tower":"07","Bridge":"05","Courtyard":"02","Dead Pool":"11","Graveyard":"09","Hidden Portal":"10","Jade's Desert":"0E","Kahn's Kave":"0D","Kahn's Tower":"04","Kombat Temple":"08","Lair":"18","Living Forest":"15","Lost Bridge":"0F","Pit":"03","Pit 2":"1A","Pit 3":"0A","Pit Bottom":"1C","Portal":"17","River Kombat":"0B","Rooftop":"13","Scorpion's Lair":"0C","Soul Chamber":"06","Star Bridge":"1B","Street":"01","Subway":"00","Tomb":"19","Tower":"16","Wasteland":"12"}},"Player 1\\Aggressor Energy Bar":{"note":"","data":["80169A21 0030"],"options":null},"Player 1\\Energy is":{"note":"","data":["8016998D 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 1\\Infinite Run":{"note":"","data":["81169854 0030"],"options":null},"Player 1\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B5365 0020","811699B4 5100","D02B5365 0020","811699BC 5100"],"options":null},"Player 1\\Play As":{"note":"","data":["8016997D 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Player 2\\Aggressor Energy Bar":{"note":"","data":["80169A23 0030"],"options":null},"Player 2\\Energy is":{"note":"","data":["80169C61 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 2\\Infinite Run":{"note":"","data":["81169C68 0030"],"options":null},"Player 2\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B536D 0020","811699B6 5100","D02B536D 0020","811699BE 5100"],"options":null},"Player 2\\Play As":{"note":"","data":["80169C21 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Unlock Secret":{"note":"","data":["8016A021 0004"],"options":null}},"83F3931E-CB72223D-C:50":{"Access\\All Cars \u0026 Upgrades":{"note":"","data":["813BED58 1FFF","803BED22 0005"],"options":null},"Access\\Florida \u0026 Moon Tracks":{"note":"This is for Championship Mode Only","data":["813BF2A4 0101"],"options":null},"Always 1st\\Player 1":{"note":"","data":["803CDF03 0001"],"options":null},"Always 1st\\Player 2":{"note":"","data":["803CE3DB 0001"],"options":null},"Always 1st\\Player 3":{"note":"","data":["803CDA2B 0001"],"options":null},"Always 1st\\Player 4":{"note":"","data":["803CD553 0001"],"options":null},"Cannot Spin Out":{"note":"","data":["803CDC73 0000"],"options":null},"Dancing Girl Always On":{"note":"","data":["803BED53 0001","803C20AF 0054"],"options":null},"Disable\\Left Lane Traffic":{"note":"This is for Championship Mode Only","data":["8033C83B 0001"],"options":null},"Disable\\Right Lane Traffic":{"note":"This is for Championship Mode Only","data":["8033C83F 0001"],"options":null},"Infinite Time":{"note":"","data":["813D0C1C 4296"],"options":null},"Max Power Level,\u0026 Paint Job / Two Tone":{"note":"","data":["813BEDA2 0512"],"options":null},"Max\\Championship Points":{"note":"","data":["813BFB4E 270F"],"options":null},"Max\\Trick points":{"note":"","data":["803BF21F 0063"],"options":null},"Stop Elapsed Time\\Player 1":{"note":"","data":["813C7558 3C80"],"options":null},"Stop Elapsed Time\\Player 2":{"note":"","data":["813C7794 3C80"],"options":null},"Unlimited Nitro Player 4":{"note":"Press C-Button Down For Boost, This Code is for Championship Mode Only","data":["803C728B 0003"],"options":null},"Unlimited Nitro\\Player 1":{"note":"Press C-Button Down For Boost, This Code is for Championship Mode Only","data":["803C74C7 0003"],"options":null},"Unlimited Nitro\\Player 2":{"note":"Press C-Button Down For Boost, This Code is for Championship Mode Only","data":["803C7703 0003"],"options":null},"Unlimited Nitro\\Player 3":{"note":"Press C-Button Down For Boost, This Code is for Championship Mode Only","data":["803C704F 0064"],"options":null},"Unlocked Pro \u0026 Master difficulty level":{"note":"","data":["803BEDD5 0003"],"options":null}},"84077275-57315B9C-C:50":{"All Pokemon Level 100\\Player 1":{"note":"","data":["50000654 0000","800AE654 0064"],"options":null},"All Pokmon Have Max Hp":{"note":"","data":["81285AE8 0096"],"options":null},"Catch\\Mew on GB Tower":{"note":"","data":["80171E17 0015"],"options":null},"Catch\\Mewtwo on GB Tower":{"note":"","data":["80171E17 0083"],"options":null},"Clefairy Says\\Extended Life Bar\\Player 1":{"note":"","data":["8118F43A 0049"],"options":null},"Clefairy Says\\Extended Life Bar\\Player 2":{"note":"","data":["8118F5FA 0049"],"options":null},"Clefairy Says\\Extended Life Bar\\Player 3":{"note":"","data":["8118F7BA 0049"],"options":null},"Clefairy Says\\Extended Life Bar\\Player 4":{"note":"","data":["8118F97A 0049"],"options":null},"Clefairy Says\\Infinite Health\\Player 1":{"note":"","data":["8118F438 0064"],"options":null},"Clefairy Says\\Infinite Health\\Player 2":{"note":"","data":["8118F5F8 0064"],"options":null},"Clefairy Says\\Infinite Health\\Player 3":{"note":"","data":["8118F7B8 0064"],"options":null},"Clefairy Says\\Infinite Health\\Player 4":{"note":"","data":["8118F978 0064"],"options":null},"Game Difficulty":{"note":"","data":["D312FC40 FD70","D312FC40 A528","8112FC40 00??"],"options":{"Easy":"02","Extra Hard":"0F","Hard":"00","Normal":"01"}},"Gym Leader Castle\\Blaine":{"note":"","data":["80286B69 00A1"],"options":null},"Gym Leader Castle\\Brock":{"note":"","data":["80287539 00A1"],"options":null},"Gym Leader Castle\\Elite Four \u0026 Rival":{"note":"","data":["80286859 00A1"],"options":null},"Gym Leader Castle\\Erika":{"note":"","data":["80286BA9 00A1"],"options":null},"Gym Leader Castle\\Giovani":{"note":"","data":["80287169 00A1"],"options":null},"Gym Leader Castle\\Koga":{"note":"","data":["80287519 00A1"],"options":null},"Gym Leader Castle\\Misty":{"note":"","data":["80287E79 00A1"],"options":null},"Gym Leader Castle\\Sabrina":{"note":"","data":["802870A9 00A1"],"options":null},"Gym Leader Castle\\Surge":{"note":"","data":["80286BD9 00A1"],"options":null},"Infinite Attacks All Pokemon\\Player 1":{"note":"","data":["50000654 0000","810AE650 6363","50000654 0000","810AE652 6363"],"options":null},"Infinite Attacks All Pokemon\\Player 2":{"note":"","data":["50000654 0000","810AE86C FFFF","50000654 0000","810AE86E FFFF"],"options":null},"Infinite Attacks All Pokemon\\Player 3":{"note":"","data":["50000654 0000","810AE86C FFFF","50000654 0000","810AE86E FFFF"],"options":null},"Infinite Attacks All Pokemon\\Player 4":{"note":"","data":["50000654 0000","810AEA88 FFFF","50000654 0000","810AEA8A FFFF"],"options":null},"Infinite Health against Mew Two":{"note":"","data":["810AE632 FFFF","812823E8 FFFF"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["810AE686 03E7","810AE6AA 03E7","810AE6DA 03E7","810AE6FE 03E7"],"options":null},"Infinite Health\\Stadium\\Free Battle":{"note":"","data":["80287D79 0064"],"options":null},"Infinite Health\\Stadium\\Mewto":{"note":"","data":["802825B9 0064"],"options":null},"Infinite Health\\Stadium\\Petit Cup":{"note":"","data":["80286C29 0064"],"options":null},"Infinite Health\\Stadium\\Pica Cup":{"note":"","data":["80284659 0064"],"options":null},"Infinite Health\\Stadium\\Poke Cup":{"note":"","data":["80285399 0064"],"options":null},"Infinite Health\\Stadium\\Prime Cup":{"note":"","data":["80285FE9 0064"],"options":null},"Infinite cash":{"note":"","data":["81172186 9999"],"options":null},"Infinite coins for coin case":{"note":"","data":["801723E3 0099"],"options":null},"Pokemon beach stop code":{"note":"","data":["D00488A1 0020","80202BB5 0001"],"options":null},"Rock Harden\\Infinite Armour\\Player 1":{"note":"","data":["81193B78 0190"],"options":null},"Rock Harden\\Infinite Armour\\Player 2":{"note":"","data":["81193E2C 0190"],"options":null},"Rock Harden\\Infinite Armour\\Player 3":{"note":"","data":["811940E0 0190"],"options":null},"Rock Harden\\Infinite Armour\\Player 4":{"note":"","data":["81194394 0190"],"options":null}},"8473D0C1-23120666-C:4A":{"All Equipment Upgrades":{"note":"","data":["801ED88D 0023","811ED8DA 201B","801ED86C 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03E4CAB 0000","801ED822 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Event Item\\Modifier 1":{"note":"","data":["801ED895 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801ED89B 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801ED8A1 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Have Bottle\\Modifier 1":{"note":"","data":["801ED8A2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 2":{"note":"","data":["801ED8A3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 3":{"note":"","data":["801ED8A4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 4":{"note":"","data":["801ED8A5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 5":{"note":"","data":["801ED8A6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 6":{"note":"","data":["801ED8A7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Item Modifier":{"note":"","data":["801ED8A0 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\All Masks":{"note":"","data":["811ED8A8 3E39","811ED8AA 4745","811ED8AC 4032","811ED8AE 3A46","811ED8B0 3842","811ED8B2 4833","811ED8B4 3C3D","811ED8B6 373F","811ED8B8 3634","811ED8BA 4341","811ED8BC 3B44","811ED8BE 4935"],"options":null},"Have\\Bombchu":{"note":"","data":["801ED897 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801ED896 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801ED899 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801ED898 0008"],"options":null},"Have\\Fire Arrow":{"note":"","data":["801ED892 0002"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801ED8A0 0010"],"options":null},"Have\\Have\\Ocarina of Time":{"note":"","data":["801ED890 0000"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801ED891 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801ED89F 000F"],"options":null},"Have\\Ice Arrow":{"note":"","data":["801ED893 0003"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801ED89E 000E"],"options":null},"Have\\Light Arrow":{"note":"","data":["801ED894 0004"],"options":null},"Have\\Magic Beans":{"note":"","data":["801ED89A 000A"],"options":null},"Have\\Pictograph":{"note":"","data":["801ED89D 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801ED89C 000C"],"options":null},"Have\\QuestStatus Items":{"note":"","data":["801ED8DD 0005","811ED8DE F7CF"],"options":null},"Infinite\\Health":{"note":"","data":["811ED856 03E7"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811ED854 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"This is Infinite use of Bombs,Bombchus,Deku Sticks,Deku Nuts,Magic Beans,\u0026 Powder Kegs. But you must also put it's Have on to work.","data":["801ED8C1 0063","50000801 0000","801ED8C6 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801ED859 0060","811ED860 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811ED85A 03E7"],"options":null},"Play As":{"note":"","data":["801ED840 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You have been warned.","data":["801ED86C 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F8836 0008","811ED836 FFFD","D01F8836 0004","811ED836 0000","D01F8836 0002","811ED836 FFFE"],"options":null},"Use all C Buttons":{"note":"","data":["811F1738 0000","811F173A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["803E4CAA 0000","803FD505 0001","813FD50A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}},"Widescreen":{"note":"","data":["81143CA4 3C07","81143CA6 3FE3"],"options":null}},"84D5FD75-BBFD3CDF-C:44":{"Character Select":{"note":"","data":["80075F02 00??"],"options":{"Big Head.":"04","Flame Grilled":"08","Normal":"00","Play as Deadwing.":"01"}},"Have All\\Cheats: Book of Shadows":{"note":"","data":["81075EFE 0FFF"],"options":null},"Have All\\Dark Souls Collected":{"note":"","data":["80075EF9 0078"],"options":null},"Have All\\Gads \u0026 The Poign":{"note":"","data":["80030E57 000F"],"options":null},"Have All\\Items":{"note":"Youll not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50001B20 0000","80030613 000B"],"options":null},"Have All\\L-Eclipser":{"note":"You will not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50000320 0000","80030973 000B"],"options":null},"Have All\\Levels Unlocked":{"note":"","data":["5000101C 0000","80030A0E 0001"],"options":null},"Infinite\\0.9mm Ammo":{"note":"","data":["81075AEA 0190"],"options":null},"Infinite\\Accumulators":{"note":"","data":["800306D7 0005"],"options":null},"Infinite\\Cadeaux'":{"note":"","data":["81075AE6 03E7"],"options":null},"Infinite\\Max Health,Air,Shadow Charge \u0026 Voodoo Power":{"note":"","data":["50000604 0000","81075AC6 2710"],"options":null},"Infinite\\Prisms":{"note":"","data":["80030957 0003"],"options":null},"Infinite\\Retractors":{"note":"","data":["800308B7 0003"],"options":null},"Infinite\\Shotgun Shells":{"note":"","data":["80075ADF 0063"],"options":null},"Infinite\\Violator Ammo":{"note":"","data":["81075AE2 03E7"],"options":null},"Press L To Levitate":{"note":"Press the L-Button to rise and let go and press again in stages to come back down.","data":["D0058EE5 0020","80075528 0041"],"options":null},"[Ammo Always Displayed On Screen]":{"note":"","data":["50000408 0000","80075A7D 0007"],"options":null},"[Health Meter Displayed On Screen]":{"note":"","data":["81075B10 0000","81075B12 00FF"],"options":null}},"84EAB557-C88A190F-C:50":{"10x Points Multiplier":{"note":"","data":["800EAD8F 0001"],"options":null},"Access In-Game Cheat Menu":{"note":"","data":["50001104 0000","800E9E98 0001"],"options":null},"Access\\Officer Dick":{"note":"","data":["800E9E9C 0001","800F093B 0001"],"options":null},"Access\\Spider-Man":{"note":"","data":["800E9E98 0001","800F0C5B 0001"],"options":null},"All Gaps":{"note":"","data":["50000A0C 0000","810E9D84 FFFF","50000A0C 0000","810E9D86 FFFF","50000A0C 0000","810E9D8A FFFF","50000402 0000","810E9DF4 FFFF"],"options":null},"Always Special":{"note":"","data":["800E9EAC 0001","800E9EAE 0001"],"options":null},"Hoffmann Factory \u0026 Skate heaven Unlocked":{"note":"","data":["800EA18B 003F"],"options":null},"Infinite Time":{"note":"","data":["800E886A 0001"],"options":null},"Level Goals 100%":{"note":"All standard players,Officer Dick \u0026 Spider-Man, Use together with","data":["50000EE4 0000","810E8900 FFFF","50000EE4 0000","810E8902 FFFF","50000EE4 0000","810E8904 FFFF","50000EE4 0000","810E8906 FFFF","50000EE4 0000","810E8908 FFFF","50000EE4 0000","810E890A FFFF","50000EE4 0000","810E890C FFFF","50000EE4 0000","810E890E FFFF","50000EE4 0000","810E8920 FFFF"],"options":null},"Levels Goals 100% All Custom Players":{"note":"","data":["50000802 0000","810E9494 FFFF","50000802 0000","810E9578 FFFF","50000802 0000","810E965C FFFF","50000802 0000","810E9740 FFFF"],"options":null},"Max Cash":{"note":"All standard players,Officer Dick \u0026 Spider-Man","data":["50000EE4 0000","810E88F8 000A","50000EE4 0000","810E88FA 2B1F","50000EE4 0000","810E88FC 000A","50000EE4 0000","810E88FE 2B1F"],"options":null},"Max Cash For All Custom Players":{"note":"","data":["500004E4 0000","810E948C 000A","500004E4 0000","810E948E 2B1F","500004E4 0000","810E9490 000A","500004E4 0000","810E9492 2B1F"],"options":null},"Moon Psysics":{"note":"","data":["800E9ECE 0001"],"options":null},"Perfect Balance":{"note":"","data":["800E9EAA 0010"],"options":null}},"84FC04FF-B1253CE9-C:4A":{"1 Lap Race":{"note":"","data":["D01215A8 0000","801215A8 0009"],"options":null},"999 Trick Game Pts":{"note":"Press the A Button to stop Count,or it will continue to grow without stoping.","data":["81121360 03E7"],"options":null},"Access Gold Medals":{"note":"","data":["50006002 0000","810EBD42 0101"],"options":null},"Enable Sinobin":{"note":"","data":["8110A17E 0100"],"options":null},"Infinite\\Cash":{"note":"","data":["8012160A C350"],"options":null},"Infinite\\Lucky Dip":{"note":"\"Lucky Dip is Infinite Usage Of What Ever You Get From Each Red Box\"","data":["801215B4 0003"],"options":null},"Infinite\\Tools Options":{"note":"","data":["801215B5 00??"],"options":{"Board":"06","Fan":"01","Ghost":"02","Mouse":"05","Pan":"03","Rock":"04"}}},"85AE781A-C756F05D-C:45":{"Have\\Max Bonus":{"note":"","data":["810E964A 270F"],"options":null},"Have\\[All Guns \u0026 Infinite Ammo]":{"note":"Press C Left to receive all Guns","data":["810FFF8A 0001","50000B04 0000","810E92E6 03E8"],"options":null},"Have\\[All Keys]":{"note":"","data":["810E92E0 0101","800E92E2 0001"],"options":null},"Have\\[High Score]":{"note":"","data":["810E92CE FFFF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["810E9650 0005"],"options":null},"Infinite\\Health":{"note":"If you fall into Water just turn off the Infinite Health \u0026 put back on after.","data":["810E92D8 42D8"],"options":null},"Level Select":{"note":"","data":["810FFF92 00??"],"options":{"Boss Mission Destroy Carrier Level":"10","Mission 1 Shock Strike":"01","Mission 10 Scramble Pylon":"0A","Mission 11 Herding Research":"0B","Mission 12 The Extractor":"0C","Mission 13 Nuke Tower":"0D","Mission 14 Mucus Storage":"0E","Mission 15 Depot Attack":"0F","Mission 16 Sterilization":"11","Mission 17 Scorpion Killer":"12","Mission 18 Core Nuke":"13","Mission 19 Gate Keeper":"14","Mission 2 Radar Run":"02","Mission 3 Return Fire":"03","Mission 4 The Sonar Tower":"04","Mission 5 Big Blips":"05","Mission 6 Short Fuse":"06","Mission 7 Outpost":"07","Mission 8 Sewer":"08","Mission 9 Clean Up":"09","Queen Mission":"15"}},"Level Select Menu":{"note":"","data":["810FE5AA D320"],"options":null}},"85C18B16-DF9622AF-C:4A":{"Infinite Health Player1":{"note":"","data":["801A57B5 00CF"],"options":null},"Infinite Max Stats Creation Points":{"note":"Player 1","data":["801C200F 0064"],"options":null},"Max Stats":{"note":"Player 1","data":["801CA5D0 0064","801CA5D1 0064","801CA5D2 0064","801CA5D3 0064","801CA5D4 0064","801CA5D5 0064","801CA5D6 0064","801CA5D7 0064","801CA5D8 0064"],"options":null}},"862C0657-8DFD896D-C:45":{"(Multi-player)\\Have All\\Weapons and items\\Player 1":{"note":"","data":["8133BA4E FFFE"],"options":null},"(Multi-player)\\Have All\\Weapons and items\\Player 2":{"note":"","data":["8133BC0A FFFE"],"options":null},"(Multi-player)\\Have All\\Weapons and items\\Player 3":{"note":"","data":["8133BDC6 FFFE"],"options":null},"(Multi-player)\\Have All\\Weapons and items\\Player 4":{"note":"","data":["8133BF82 FFFE"],"options":null},"(Multi-player)\\Max Kills\\Player 1":{"note":"","data":["8033B9BC FFFF"],"options":null},"(Multi-player)\\Max Kills\\Player 2":{"note":"","data":["8033BB78 FFFF"],"options":null},"Access\\All Guns":{"note":"","data":["8015969F 0001"],"options":null},"Access\\Max Ammo":{"note":"","data":["8015FCBF 0001"],"options":null},"Can't Fail Missions":{"note":"","data":["810A04FA ED40"],"options":null},"Enable\\Cheat Menu":{"note":"Enable before you enter in game and you will find the cheat menu when you press the Start Button","data":["8003E22F 0003","8004609F 0003"],"options":null},"Enable\\Debug Mode":{"note":"When this code is activated, a display of numbers will show on the screen as the players move around","data":["801599E7 0001"],"options":null},"Enable\\Level Select Menu":{"note":"This must be used with Enable Cheat Menu and enabled before you enter in game and you will find the level select menu replaces the cheat menu when you press the Start Button","data":["810AA696 9214"],"options":null},"Enemies Don't Recongnize You Easily":{"note":"","data":["8005742D 0001"],"options":null},"Have\\Invisible Soldier":{"note":"you are Invisible to most enimies who just can not dectect or see you.","data":["80159683 0001"],"options":null},"Have\\Large Mode":{"note":"Do not use with Mini Mode only use one at a time","data":["8015FCDF 0001"],"options":null},"Have\\Less Enemies In Levels":{"note":"Do not use with No Enemies In Levels, only use one at a time","data":["80056688 0020"],"options":null},"Have\\Mini Mode":{"note":"Do not use with Large Mode only use one at a time","data":["80159699 0001"],"options":null},"Have\\No Enemies In Levels":{"note":"Do not use with Less Enemies In Levels, only use one at a time","data":["80056D4C 0020"],"options":null},"Improved Gun Handling":{"note":"","data":["8009C014 003E"],"options":null},"Infinite\\Continues":{"note":"","data":["80159693 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8015FCEF 0001"],"options":null},"Play As":{"note":"Here you can choose who you would like to play as. But Do not use this with any other play as option..","data":["801609A3 00??"],"options":{"Plastro":"09","The Big Green One":"07","Vikki":"08"}}},"870611BA-D8B1226C-C:00":{"God Mode":{"note":"","data":["80774EB7 00??"],"options":{"Off":"00","On":"01"}}},"8979169C-F189F6A0-C:4A":{"Infinite\\99 Lives":{"note":"","data":["8023648D 0063"],"options":null},"Infinite\\99 R Button Bombs":{"note":"","data":["8024BD89 0063"],"options":null},"Infinite\\Shield":{"note":"","data":["80250971 00??"],"options":{"Off":"00","On":"01"}},"Infinite\\Speed":{"note":"","data":["8024B6BC 00??"],"options":{"Fast":"03","Medium":"02","Normal":"00","Slow":"01","Warp Drive":"07"}},"Infinite\\Stream Laser":{"note":"","data":["80236CD0 00??"],"options":{"2 Stream Laser":"00","4 Stream Laser":"01","6 Stream Laser":"02"}},"Max Score":{"note":"","data":["80249F91 00FF"],"options":null},"Unlock Ramsie Mini-Game":{"note":"","data":["801FF43E 0001"],"options":null}},"89A579F1-667E97EF-C:45":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["811659C4 FFFF","811659C6 FFFF","811659CA 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FB5C 270F"],"options":null},"Sixty Frames":{"note":"Seems Turok 3 doesn't use 20fps.","data":["8008590B 0001","800859D7 0001"],"options":null}},"89FED774-CAAFE21B-C:45":{"Have All Artifacts":{"note":"","data":["800C56BF 0063","800C56C3 0063","800C56C7 0063"],"options":null},"Infinite Health":{"note":"","data":["800C56BB 0005"],"options":null},"Infinite Lives":{"note":"","data":["800C56B7 0005"],"options":null},"Sixty Frames":{"note":"Change ASM value,too fast.","data":["8003B8FB 0001"],"options":null}},"8A6009B6-94ACE150-C:45":{"Access\\All Characters":{"note":"","data":["801E6040 FFFF"],"options":null},"Access\\All Floyd Awards":{"note":"only enable One character at a time when using this code","data":["50000501 0000","801E6038 0005"],"options":null},"Juno\\Access\\All Keys":{"note":"","data":["811E6248 FFF7"],"options":null},"Juno\\Access\\All Objects":{"note":"","data":["811E624A FFFF"],"options":null},"Juno\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["801E61EC 00FF","801E61ED 00FF"],"options":null},"Juno\\Full \u0026 Max Health":{"note":"","data":["801BF976 0040","801E61E5 000C","801E61E2 0040"],"options":null},"Juno\\Infinite Continues":{"note":"","data":["800A3281 0002"],"options":null},"Juno\\Infinite\\Max Ammo All Weapons":{"note":"","data":["50000302 0000","811E61F6 03E7","50000802 0000","811E61FC 03E7","50000402 0000","811E620C 03E7"],"options":null},"Juno\\Infinite\\Mizar Tokens":{"note":"","data":["811E61F4 03E7"],"options":null},"Juno\\Max Blue \u0026 White Heads":{"note":"","data":["811E61EA 03E7","811E61E8 03E7"],"options":null},"Lupus\\Access\\All Keys":{"note":"","data":["811E62BE FF70"],"options":null},"Lupus\\Access\\All Objects":{"note":"","data":["811E62C0 FFFF"],"options":null},"Lupus\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["801E6262 00FF","801E6263 00FF"],"options":null},"Lupus\\Full \u0026 Max Health":{"note":"","data":["801BF9EC 0040","801E625B 000C","801E6258 0040"],"options":null},"Lupus\\Infinite\\Max Ammo All Weapons":{"note":"","data":["50000302 0000","811E626C 03E7","50000802 0000","811E6272 03E7","50000402 0000","811E6282 03E7"],"options":null},"Lupus\\Infinite\\Mizar Tokens":{"note":"","data":["811E626A 03E7"],"options":null},"Lupus\\Max\\Blue \u0026 White Heads":{"note":"","data":["811E6260 03E7","811E625E 03E7"],"options":null},"Tribals\\Gold Wood\\Have All Tribals":{"note":"","data":["801E6014 000F"],"options":null},"Tribals\\Gold Wood\\Have No Tribals Remaining":{"note":"","data":["801E6016 0000"],"options":null},"Tribals\\Gold Wood\\No Tribals Killed":{"note":"","data":["801E6015 0000"],"options":null},"Vela\\Access\\All Keys":{"note":"","data":["811E61D2 FF70"],"options":null},"Vela\\Access\\All Objects":{"note":"","data":["811E61D4 FFFF"],"options":null},"Vela\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["801E6176 00FF","801E6177 00FF"],"options":null},"Vela\\Full \u0026 Max Health":{"note":"","data":["801E616F 000C","801E616C 0040"],"options":null},"Vela\\Infinite\\Max Ammo All Weapons":{"note":"","data":["50000302 0000","811E6180 03E7","50000802 0000","811E6186 03E7","50000402 0000","811E6196 03E7"],"options":null},"Vela\\Infinite\\Mizar Tokens":{"note":"","data":["811E617E 03E7"],"options":null},"Vela\\Max\\Blue \u0026 White Heads":{"note":"","data":["811E6174 03E7","811E6172 03E7"],"options":null},"Wide Screen Always Off":{"note":"","data":["800FECA8 0000"],"options":null}},"8A86F073-CD45E54B-C:45":{"Computer\\Always Gets Bubbles":{"note":"","data":["80173601 0006"],"options":null},"Computer\\Never Gets Bubbles":{"note":"","data":["80173601 0000"],"options":null},"Infinite Credits":{"note":"","data":["80120171 0005"],"options":null},"Player 1\\Always Gets Bubbles":{"note":"","data":["80171131 0006"],"options":null},"Player 1\\Infinite Time To Set Pieces":{"note":"","data":["8117AAFC 0000"],"options":null},"Player 1\\Never Gets Bubbles":{"note":"","data":["80171131 0000"],"options":null},"Player 1\\Screen Never Fills Over Time":{"note":"","data":["80171125 000A"],"options":null}},"8A97A197-272DF6C1-C:50":{"Double MPG":{"note":"","data":["800ADB69 0001"],"options":null},"Infinite Attempts":{"note":"","data":["800ADB66 0001"],"options":null},"Invincibility":{"note":"Makes you also fly without any fuel","data":["800ADB64 0001"],"options":null},"Level \u0026 Scenario Select":{"note":"","data":["800ACE5C 000B"],"options":null},"No Quad Damage":{"note":"","data":["800ADB6B 0001"],"options":null},"infinite Ammo For All Guns":{"note":"","data":["800ADB65 0001"],"options":null}},"8BD4A334-1E138B05-C:50":{"Have Max Rumble":{"note":"","data":["810D8E96 00??","810E61B8 00??"],"options":{"Max":"30","Never Rumble":"00"}},"Infinite\\Cash":{"note":"","data":["810EB852 FC9A"],"options":null},"Infinite\\Health":{"note":"","data":["810D8E8A 00??","810E6522 00??"],"options":{"Infinite":"64","No Health":"00"}},"Infinite\\Stamina":{"note":"","data":["810D8E8E 00??","810E6526 00??"],"options":{"Infinite":"64","No Stamina":"00"}},"Infinite\\Time":{"note":"","data":["810E6486 0E10"],"options":null}},"8C138BE0-95700E46-C:45":{"All Lakes Unlocked":{"note":"","data":["80111F00 0001"],"options":null},"Catch Bigger Fish":{"note":"","data":["80111F06 0001"],"options":null},"Easier to Catch Fish":{"note":"","data":["80111F0E 0001"],"options":null},"Extra Cash":{"note":"","data":["80111F0B 0001"],"options":null},"Line Never Breaks":{"note":"","data":["80111F05 0001"],"options":null},"No Penalties in Tounament":{"note":"","data":["80111F08 0001"],"options":null}},"8C3D1192-BEF172E1-C:50":{"Infinite Time":{"note":"","data":["8114C2FC 000A"],"options":null},"Pick Your Kombat Zone":{"note":"","data":["812575A4 00??"],"options":{"Armory":"14","Bell Tower":"07","Bridge":"05","Courtyard":"02","Dead Pool":"11","Graveyard":"09","Hidden Portal":"10","Jade's Desert":"0E","Kahn's Kave":"0D","Kahn's Tower":"04","Kombat Temple":"08","Lair":"18","Living Forest":"15","Lost Bridge":"0F","Pit":"03","Pit 2":"1A","Pit 3":"0A","Pit Bottom":"1C","Portal":"17","River Kombat":"0B","Rooftop":"13","Scorpion's Lair":"0C","Soul Chamber":"06","Star Bridge":"1B","Street":"01","Subway":"00","Tomb":"19","Tower":"16","Wasteland":"12"}},"Player 1\\Aggressor Energy Bar":{"note":"","data":["80169941 0030"],"options":null},"Player 1\\Energy is":{"note":"","data":["801698AD 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 1\\Infinite Run":{"note":"","data":["811698B4 0030"],"options":null},"Player 1\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B5285 0020","811698D4 5100","D02B5285 0020","811698DC 5100"],"options":null},"Player 1\\Play As":{"note":"","data":["8016989D 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Player 2\\Aggressor Energy Bar":{"note":"","data":["80169943 0030"],"options":null},"Player 2\\Energy is":{"note":"","data":["80169B81 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 2\\Infinite Run":{"note":"","data":["81169B88 0030"],"options":null},"Player 2\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B528D 0020","811698D6 5100","D02B528D 0020","811698DE 5100"],"options":null},"Player 2\\Play As":{"note":"","data":["80169B41 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Unlock Secret":{"note":"","data":["80169F41 0004"],"options":null}},"8D2BAE98-D73725BF-C:45":{"Infinite Stamina":{"note":"","data":["81138400 447A","81138404 447A"],"options":null},"Press [START] To Reset Timer":{"note":"","data":["81137886 0000"],"options":null}},"8E6E01FF-CCB4F948-C:45":{"GS Button For 40 Gems":{"note":"","data":["8829018F 0028"],"options":null},"Infinite\\Action Modifier":{"note":"","data":["802901E3 00??"],"options":{"Beach Ball Spell":"0A","Big Glover Spell":"04","Call Ball Spell":"0E","Death Spell":"01","Enemy Ball Spell":"07","Freeze Enemy Spell":"00","Frog Spell":"02","Green Ball Spell":"0C","Helicopter Spell":"06","Hovering Ball Spell":"0B","Purple Bouncy Ball Spell":"08","Super Call Ball Spell":"0D","Tiny Black/Grey Ball Spell":"09","Tree Spell":"05","Walk On Walls Spell":"03"}},"Infinite\\Activate Cheat\\Modifier 1":{"note":"","data":["81297BEC ????"],"options":{"All Of The Above":"0380","Level Select":"0080","Open Levels":"0200","Open Portals":"0100"}},"Infinite\\Activate Cheat\\Modifier 2":{"note":"","data":["81297BEE ????"],"options":{"All Of The Above":"024A","Big Ball":"0200","Call Ball (Press L)":"0002","Infinite Energy":"0040","Infinite Lives":"0008"}},"Infinite\\Double Jumps":{"note":"","data":["8028FC07 0000"],"options":null},"Infinite\\Health":{"note":"","data":["8029018F 0028"],"options":null},"Infinite\\Lives":{"note":"","data":["80290193 000A"],"options":null},"Press L To Levitate":{"note":"","data":["D02AE905 0020","81290334 43E0"],"options":null}},"8E9692B3-4264BB2A-C:50":{"Aquadome Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F799B 0000"],"options":null},"Aquadome Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FAE2B 0000"],"options":null},"Aquadome Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F799A 0200"],"options":null},"Aquadome Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FAE3A 0200"],"options":null},"Aquadome Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7993 00AA"],"options":null},"Aquadome Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FAE33 00AA"],"options":null},"Aquadome Stage\\No Energy\\Player 1":{"note":"","data":["801F7993 0000"],"options":null},"Aquadome Stage\\No Energy\\Player 2":{"note":"","data":["801FAE33 0000"],"options":null},"Backwash Bay Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F80EB 0000"],"options":null},"Backwash Bay Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB58B 0000"],"options":null},"Backwash Bay Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F80FA 0200"],"options":null},"Backwash Bay Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB59A 0200"],"options":null},"Backwash Bay Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F80F3 00AA"],"options":null},"Backwash Bay Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB593 00AA"],"options":null},"Backwash Bay Stage\\No Energy\\Player 1":{"note":"","data":["801F80F3 0000"],"options":null},"Backwash Bay Stage\\No Energy\\Player 2":{"note":"","data":["801FB593 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F8B3B 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FBFDB 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F8B4A 0200"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FBFEA 0200"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8B43 00AA"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FBFE3 00AA"],"options":null},"Boogerhenge, Tureen Toilet Stage\\No Energy\\Player 1":{"note":"","data":["801F8B43 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\No Energy\\Player 2":{"note":"","data":["801FBFE3 0000"],"options":null},"Candy Factory Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F826B 0000"],"options":null},"Candy Factory Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB70B 0000"],"options":null},"Candy Factory Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F827A 0200"],"options":null},"Candy Factory Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB71A 0200"],"options":null},"Candy Factory Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8273 00AA"],"options":null},"Candy Factory Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB713 00AA"],"options":null},"Candy Factory Stage\\No Energy\\Player 1":{"note":"","data":["801F8273 0000"],"options":null},"Candy Factory Stage\\No Energy\\Player 2":{"note":"","data":["801FB713 0000"],"options":null},"Clayribbean Cruise Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F805B 0000"],"options":null},"Clayribbean Cruise Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB4FB 0000"],"options":null},"Clayribbean Cruise Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F806A 0200"],"options":null},"Clayribbean Cruise Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB50A 0200"],"options":null},"Clayribbean Cruise Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8063 00AA"],"options":null},"Clayribbean Cruise Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB503 00AA"],"options":null},"Clayribbean Cruise Stage\\No Energy\\Player 1":{"note":"","data":["801F8063 0000"],"options":null},"Clayribbean Cruise Stage\\No Energy\\Player 2":{"note":"","data":["801FB503 0000"],"options":null},"Extra Characters and Secret Options":{"note":"","data":["801A86A1 000F"],"options":null},"Freezing Fortress Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F7EFB 0000"],"options":null},"Freezing Fortress Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB39B 0000"],"options":null},"Freezing Fortress Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F7F0A 0200"],"options":null},"Freezing Fortress Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB3AA 0200"],"options":null},"Freezing Fortress Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7F03 00AA"],"options":null},"Freezing Fortress Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB3A3 00AA"],"options":null},"Freezing Fortress Stage\\No Energy\\Player 1":{"note":"","data":["801F7F03 0000"],"options":null},"Freezing Fortress Stage\\No Energy\\Player 2":{"note":"","data":["801FB3A3 0000"],"options":null},"Ghastly Graveyard Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F818B 0000"],"options":null},"Ghastly Graveyard Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB62B 0000"],"options":null},"Ghastly Graveyard Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F819A 0200"],"options":null},"Ghastly Graveyard Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB63A 0200"],"options":null},"Ghastly Graveyard Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8193 00AA"],"options":null},"Ghastly Graveyard Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB633 00AA"],"options":null},"Ghastly Graveyard Stage\\No Energy\\Player 1":{"note":"","data":["801F8193 0000"],"options":null},"Ghastly Graveyard Stage\\No Energy\\Player 2":{"note":"","data":["801FB633 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F7FAB 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB44B 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F7FBA 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB45A 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7FB3 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB453 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\No Energy\\Player 1":{"note":"","data":["801F7FB3 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\No Energy\\Player 2":{"note":"","data":["801FB453 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F971B 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FCBBB 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F972A 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FCBCA 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F9723 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FCBC3 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\No Energy\\Player 1":{"note":"","data":["801F9723 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\No Energy\\Player 2":{"note":"","data":["801FCBC3 0000"],"options":null},"Kooky Courtyard Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F836B 0000"],"options":null},"Kooky Courtyard Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB80B 0000"],"options":null},"Kooky Courtyard Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F837A 0200"],"options":null},"Kooky Courtyard Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB81A 0200"],"options":null},"Kooky Courtyard Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8373 00AA"],"options":null},"Kooky Courtyard Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB813 00AA"],"options":null},"Kooky Courtyard Stage\\No Energy\\Player 1":{"note":"","data":["801F8373 0000"],"options":null},"Kooky Courtyard Stage\\No Energy\\Player 2":{"note":"","data":["801FB813 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Can't be Stunned\\Player 1":{"note":"","data":["801F7E9B 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Can't be Stunned\\Player 2":{"note":"","data":["801FB33B 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Full Super Bar\\Player 1":{"note":"","data":["811F7EAA 0200"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Full Super Bar\\Player 2":{"note":"","data":["811FB34A 0200"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Infinite Energy\\Player 1":{"note":"","data":["801F7EA3 00AA"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Infinite Energy\\Player 2":{"note":"","data":["801FB343 00AA"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\No Energy\\Player 1":{"note":"","data":["801F7EA3 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\No Energy\\Player 2":{"note":"","data":["801FB343 0000"],"options":null},"Play As\\Player1":{"note":"","data":["801A868F 00??"],"options":{"Bad Mr. Frosty":"00","Blob":"01","Bonker":"02","Boogerman":"03","Dr. Kiln":"04","Earthworm Jim":"05","Houngan":"08","Icky Bod Clay":"09","Kung Pow":"0A","Sumo Santa":"0D","T-Hoppy":"0F","Taffy":"0E"}},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Can't be Stunned\\Player 1":{"note":"","data":["801F766B 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Can't be Stunned\\Player 2":{"note":"","data":["801FAB0B 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Full Super Bar\\Player 1":{"note":"","data":["811F767A 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Full Super Bar\\Player 2":{"note":"","data":["811FAB1A 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Infinite Energy\\Player 1":{"note":"","data":["801F7673 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Infinite Energy\\Player 2":{"note":"","data":["801FAB13 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\No Energy\\Player 1":{"note":"","data":["801F7673 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\No Energy\\Player 2":{"note":"","data":["801FAB13 0000"],"options":null},"Rubbage Reef Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F7F7B 0000"],"options":null},"Rubbage Reef Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB41B 0000"],"options":null},"Rubbage Reef Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F7F8A 0200"],"options":null},"Rubbage Reef Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB42A 0200"],"options":null},"Rubbage Reef Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7F83 00AA"],"options":null},"Rubbage Reef Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB423 00AA"],"options":null},"Rubbage Reef Stage\\No Energy\\Player 1":{"note":"","data":["801F7F83 0000"],"options":null},"Rubbage Reef Stage\\No Energy\\Player 2":{"note":"","data":["801FB423 0000"],"options":null},"Rubbage Room Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801FA1AB 0000"],"options":null},"Rubbage Room Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FD64B 0000"],"options":null},"Rubbage Room Stage\\Full Super Bar\\Player 1":{"note":"","data":["811FA1BA 0200"],"options":null},"Rubbage Room Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FD65A 0200"],"options":null},"Rubbage Room Stage\\Infinite Energy\\Player 1":{"note":"","data":["801FA1B3 00AA"],"options":null},"Rubbage Room Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FD653 00AA"],"options":null},"Rubbage Room Stage\\No Energy\\Player 1":{"note":"","data":["801FA1B3 0000"],"options":null},"Rubbage Room Stage\\No Energy\\Player 2":{"note":"","data":["801FD653 0000"],"options":null},"Santa's Toy Factory Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F879B 0000"],"options":null},"Santa's Toy Factory Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FBC3B 0000"],"options":null},"Santa's Toy Factory Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F87AA 0200"],"options":null},"Santa's Toy Factory Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FBC4A 0200"],"options":null},"Santa's Toy Factory Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F87A3 00AA"],"options":null},"Santa's Toy Factory Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FBC43 00AA"],"options":null},"Santa's Toy Factory Stage\\No Energy\\Player 1":{"note":"","data":["801F87A3 0000"],"options":null},"Santa's Toy Factory Stage\\No Energy\\Player 2":{"note":"","data":["801FBC43 0000"],"options":null},"Stage Select":{"note":"","data":["801A868B 00??"],"options":{"Aquadome":"19","Backwash Bay":"16","Boogerhenge":"15","Camp Claynaveral":"02","Candy Factory":"00","Claynaveral Hangar":"01","Clayribbean Cruise":"11","Fiery Furnace":"0F","Freezing Fortress":"08","Ghastly Graveyard":"05","Grotto Gulch":"0A","Happy Harry's Hut":"07","Kiln's Hideout":"0E","Kiln's Laboratory":"0D","Kooky Courtyard":"13","Mudville Mansion":"04","Outhouse":"03","Refuse Room":"09","Research Room":"10","Rubbage Reef":"0C","Rubbage Room":"0B","Santa's Toy Factory":"14","Santa's Workship":"12","Spooky Spire":"06","Tribal Tower":"18","Tureen Toilet":"17"}},"Tribal Tower Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F770B 0000"],"options":null},"Tribal Tower Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FABAB 0000"],"options":null},"Tribal Tower Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F771A 0200"],"options":null},"Tribal Tower Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FABBA 0200"],"options":null},"Tribal Tower Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7713 00AA"],"options":null},"Tribal Tower Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FABB3 00AA"],"options":null},"Tribal Tower Stage\\No Energy\\Player 1":{"note":"","data":["801F7713 0000"],"options":null},"Tribal Tower Stage\\No Energy\\Player 2":{"note":"","data":["801FABB3 0000"],"options":null}},"8E9D834E-1E8B29A9-C:50":{"All Tracks Unlocked":{"note":"","data":["80095F6E 0008","50000264 0000","80169347 0001","50000264 0000","80169473 0001","50000564 0000","8016959F 0001"],"options":null},"Bike Modifier\\Player 1":{"note":"","data":["8016983F 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 2":{"note":"","data":["8016988B 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 3":{"note":"","data":["801698D7 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 4":{"note":"","data":["80169923 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Extra Bikes Unlocked":{"note":"","data":["80167C13 0001","80167C17 0003"],"options":null},"Extra Levels Unlocked":{"note":"","data":["8016980B 0001","8016980F 0001"],"options":null},"Infinite Primary Weapon\\Player 1":{"note":"","data":["801651FD 00C8"],"options":null},"Infinite Primary Weapon\\Player 2":{"note":"","data":["8016596D 00C8"],"options":null},"Infinite Primary Weapon\\Player 3":{"note":"","data":["801660DD 00C8"],"options":null},"Infinite Primary Weapon\\Player 4":{"note":"","data":["8016684D 00C8"],"options":null},"Infinite Shields\\Player 1":{"note":"","data":["801651F5 00C8"],"options":null},"Infinite Shields\\Player 2":{"note":"","data":["80165965 00C8"],"options":null},"Infinite Shields\\Player 3":{"note":"","data":["801660D5 00C8"],"options":null},"Infinite Shields\\Player 4":{"note":"","data":["80166845 00C8"],"options":null},"Infinite Turbos\\Player 1":{"note":"","data":["801651CB 0003","801651CF 0003"],"options":null},"Infinite Turbos\\Player 2":{"note":"","data":["8016593B 0003","8016593F 0003"],"options":null},"Infinite Turbos\\Player 3":{"note":"","data":["801660AB 0003","801660AF 0003"],"options":null},"Infinite Turbos\\Player 4":{"note":"","data":["8016681B 0003","8016681F 0003"],"options":null},"Mode Select":{"note":"","data":["80097687 00??"],"options":{"Anti-Gravity":"08","Anti-Gravity \u0026 Fish Eye Lens":"0A","Boulder":"01","Boulder \u0026 Fish Eye Lens":"03","Boulder \u0026 Wireframe":"11","Fish Eye Lens":"02","Ghost Mode":"40","Magnify":"04","Stealth Mode":"20","Ugly Mode":"80","Wireframe":"10"}}},"8ECC02F0-7F8BDE81-C:45":{"Access All\\Bikes":{"note":"","data":["810FBCBE FFFF"],"options":null},"Access All\\Tracks":{"note":"","data":["810FBCC2 FFFF"],"options":null},"Infinite\\Nitro":{"note":"","data":["810B8E4C 42C8"],"options":null},"Infinite\\Nitro Always On":{"note":"","data":["810BB5A4 8004"],"options":null},"Laps 2 Race":{"note":"","data":["8016FC88 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}}},"8F0CC36D-C738259E-C:45":{"Day":{"note":"","data":["80136FBF 00??"],"options":{"Friday 12th":"0C","Friday 19th":"13","Friday 26th":"1A","Friday 5th":"05","Monday 15th":"0F","Monday 1st":"01","Monday 22nd":"16","Monday 29th":"1D","Monday 8th":"08","Saturday 13th":"0D","Saturday 27th":"1B","Saturday 30th":"14","Saturday 6th":"06","Sunday 14th":"0E","Sunday 21st":"15","Sunday 28th":"1C","Sunday 7th":"07","Thursday 11th":"0B","Thursday 18th":"12","Thursday 25th":"19","Thursday 4th":"04","Tuesday 16th":"10","Tuesday 23rd":"17","Tuesday 2nd":"02","Tuesday 30th":"1E","Tuesday 9th":"09","Wednesday 10th":"0A","Wednesday 17th":"11","Wednesday 24th":"18","Wednesday 31st":"1F","Wednesday 3rd":"03"}},"Hours":{"note":"","data":["80136FBE 00??"],"options":{"00 AM":"00","00 PM":"0C","01 AM":"01","01 PM":"0D","02 AM":"02","02 PM":"0E","03 AM":"03","03 PM":"0F","04 AM":"04","04 PM":"10","05 AM":"05","05 PM":"11","06 AM":"06","06 PM":"12","07 AM":"07","07 PM":"13","08 AM":"08","08 PM":"14","09 AM":"09","09 PM":"15","10 AM":"0A","10 PM":"16","11 AM":"0B","11 PM":"17"}},"Item Select":{"note":"","data":["81126EE8 ????"],"options":{"100 Bag":"2103","1000 Bag":"2100","10000 Bag":"2101","30000 Bag":"2102","Alarm Clock":"1DB3","Blue NES Game":"1D42","CD Player":"1DAC","Fish Tank (Fish Included!)":"1CA6","Flat Shell":"2514","Grandfather Clock":"1DA0","Grey NES Game":"1D2F","JukeBox":"1D50","Lamp":"1EA1","Light Blue NES Game":"1D37","Nook's Shirt":"2410","Orange":"2804","Orange NES Game":"1D2B","Pet Cage":"1C00","Pointy Shell":"2515","Purple NES Game":"1D3E","Record Player":"1D4C","Red NES Game":"1D33","Round Snowman Table":"1EAB","Snowman Bed":"1EAF","Snowman Fridge":"1EA5","Snowman Seat":"1EB0","Stereo":"1DA9","Stereo Kinda Thing":"1DA6","Stereo NES Colour":"1D47","Tall Red Cupboard":"1011","Yellow NES Game":"1D3A"}},"Max Cash":{"note":"","data":["813BC34C FFFF"],"options":null},"Minutes":{"note":"","data":["80136FBD 00??"],"options":{"00":"00","05":"05","10":"0A","15":"0F","20":"14","25":"19","30":"1E","35":"23","40":"28","45":"2D","50":"32","55":"37","59":"3B"}},"Month":{"note":"","data":["80136FC1 00??"],"options":{"April":"04","Aug":"08","Dec":"0C","Feb":"02","Jan":"01","July":"07","June":"06","March":"03","May":"05","Nov":"0B","Oct":"0A","Sept":"09"}},"Time Passes":{"note":"","data":["80136FD2 00??"],"options":{"Hours \u0026 Mins Fast":"10","Hours \u0026 Mins Medium":"05","Mins Like Seconds":"01","Time Normal":"00","Time Zooms By":"FF"}}},"8F12C096-45DC17E1-C:50":{"All enemies killed":{"note":"","data":["801E244E 0000","801E244F 0000"],"options":null},"Always Have\\50 pieces of corn":{"note":"","data":["801E2461 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E2450 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["D01E244E 0000","801E244E 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E2462 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E2455 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E2460 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D008FCE1 0010","801E23C6 0001","D008FCE1 0010","801E23D6 0001"],"options":null},"Start with Berry Weapon":{"note":"","data":["801E2457 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Unlock All Levels":{"note":"","data":["81099B70 000F"],"options":null}},"8F50B845-D729D22F-C:44":{"Infinite Attempts":{"note":"","data":["800ADA96 0001"],"options":null},"Invincibility":{"note":"Makes you also fly without any fuel","data":["800ADA92 0001"],"options":null},"Level \u0026 Scenario Select":{"note":"","data":["800ACD8C 000E"],"options":null},"infinite Ammo For All Guns":{"note":"","data":["800ADA91 0001"],"options":null}},"906C3F77-CE495EA1-C:45":{"255 Scarabs":{"note":"","data":["805C396D 00FF"],"options":null},"All Items":{"note":"","data":["805C4DBC FFFF"],"options":null},"All Spells":{"note":"","data":["805C4DBE 00BF","805C4DBF 00FF"],"options":null},"Disable Blur Filter":{"note":"","data":["81097E6C 0000","81097E6E 3242","81097E9C 0000","81097E9E 3242"],"options":null},"Disable Environment Updates":{"note":"","data":["81013E14 3C04","81013E16 0001"],"options":null},"Disable Unused Options Menu":{"note":"","data":["8008C853 003C","8008C857 003F"],"options":null},"Food Bags":{"note":"","data":["805C4DBF 00??"],"options":{"Large Food Bag":"80","Medium Food Bag":"40","Small Food Bag":"20"}},"Force Best Player Model":{"note":"","data":["81035B9C 081F","81035B9E C000","81035BA0 0000","81035BA2 0000","817F0000 3C02","817F0002 805C","817F0004 8C42","817F0006 1568","817F0008 1040","817F000A 0003","817F000C 0000","817F000E 0000","817F0010 2409","817F0012 0001","817F0014 A049","817F0016 00AD","817F0018 81C9","817F001A 00AD","817F001C 0800","817F001E D6E9","817F0020 0019","817F0022 10C0"],"options":null},"Get the Cape Claw Cage Key":{"note":"","data":["805C4C51 0001"],"options":null},"Infinite Health":{"note":"","data":["805C3971 007C","805C3965 007C"],"options":null},"Infinite Magic":{"note":"","data":["815C3968 0019","815C3974 0019"],"options":null},"Item Pickup Bug Fix":{"note":"","data":["814F92E2 05B1"],"options":null},"Lanterns":{"note":"","data":["805C4DCF 00??"],"options":{"Firefly Lantern":"01"}},"Levitate (Press L)":{"note":"","data":["814EA390 0802","814EA392 6C2D","814EA394 8FBC","814EA396 0030","8109B0B4 8FBF","8109B0B6 0034","8109B0B8 3C04","8109B0BA 800A","8109B0BC 8484","8109B0BE 7DC0","8109B0C0 2405","8109B0C2 0020","8109B0C4 14A4","8109B0C6 0003","8109B0C8 8606","8109B0CA 0010","8109B0CC 00C5","8109B0CE 3022","8109B0D0 A606","8109B0D2 0010","8109B0D4 0813","8109B0D6 A8E6","8109B0D8 0000","8109B0DA 0000"],"options":null},"Mushroom Bags":{"note":"","data":["805C4DC0 00??"],"options":{"Large Mushroom Bag":"38","Medium Mushroom Bag":"18"}},"Play as Fox":{"note":"You'll need to restart the level or save/load","data":["805C3C5B 0000","805C3C67 0000"],"options":null},"Play as Krystal":{"note":"You'll need to restart the level or save/load","data":["805C3C5B 0001","805C3C67 0001"],"options":null},"Primary Spells":{"note":"","data":["805C4DBE 00??"],"options":{"Dinosaur Eye":"20","Disguise Spell":"05","Illusion Spell":"04","Portal Spell":"80","Projectile Spell":"08","Shield":"10"}},"Replace Fox's Model with Sabre's":{"note":"","data":["81035B9C 081F","81035B9E C000","817F0000 2409","817F0002 0002","817F0004 0800","817F0006 D6E9","817F0008 A1C9","817F000A 00AD"],"options":null},"Secondary Spells":{"note":"","data":["805C4DBF 00??"],"options":{"Ice Blast Spell":"03","Mindread":"06","Mindread Spell":"02","Wizard Randorn (behaves like Projectile)":"04","Wizard Randorn (unique behavior)":"05"}},"Show Hidden Options Menu":{"note":"","data":["8008C857 0041"],"options":null},"Spawn Past the GuardClaw in the Mammoth Area near Swapstone Hollow (File 3)":{"note":"","data":["816DFBA4 C5D4","816DFBA6 0000","816DFBA8 C496","816DFBAA 0000","816DFBAC 44E5","816DFBAE 0000"],"options":null},"Teleport Tricky to Player (Press D-Pad Down)":{"note":"","data":["814FD888 0802","814FD88A 6C37","8109B0DC 3C02","8109B0DE 800A","8109B0E0 8442","8109B0E2 7DC0","8109B0E4 2403","8109B0E6 0400","8109B0E8 1443","8109B0EA 0007","8109B0EC 8E5C","8109B0EE 00E4","8109B0F0 8F82","8109B0F2 000C","8109B0F4 8F83","8109B0F6 0010","8109B0F8 8F9C","8109B0FA 0014","8109B0FC AE42","8109B0FE 0000","8109B100 AE43","8109B102 0004","8109B104 AE5C","8109B106 0008","8109B108 8E45","8109B10A 0000","8109B10C 0813","8109B10E F624","8109B110 8E46","8109B112 0008"],"options":null},"Ultra Widescreen (21:9)":{"note":"","data":["810BCE30 4017","810BCE32 AE14"],"options":null},"Walk Through Walls / Levitate":{"note":"L plus Dpad Up to disable clipping, L plus Dpad Down to re-enable clipping, L to levitate","data":["81012144 081F","81012146 C400","81012148 0000","8101214A 0000","817F1000 3C18","817F1002 805C","817F1004 8F18","817F1006 1568","817F1008 1300","817F100A 001E","817F100C 0000","817F100E 0000","817F1010 3C02","817F1012 800D","817F1014 8042","817F1016 D3F5","817F1018 2408","817F101A 0020","817F101C 1448","817F101E 0019","817F1020 0000","817F1022 0000","817F1024 3C08","817F1026 807F","817F1028 8102","817F102A 10F0","817F102C 1040","817F102E 0003","817F1030 0000","817F1032 0000","817F1034 2402","817F1036 00A4","817F1038 A302","817F103A 00FB","817F103C 3C08","817F103E 807F","817F1040 8102","817F1042 10F1","817F1044 5440","817F1046 0003","817F1048 A100","817F104A 10F1","817F104C 1000","817F104E 0005","817F1050 0000","817F1052 0000","817F1054 2402","817F1056 00AF","817F1058 A302","817F105A 00FB","817F105C 1000","817F105E 0009","817F1060 0000","817F1062 0000","817F1064 3C08","817F1066 807F","817F1068 8102","817F106A 10F0","817F106C 1040","817F106E 0005","817F1070 0000","817F1072 0000","817F1074 3C18","817F1076 805C","817F1078 8F18","817F107A 1568","817F107C 3C02","817F107E 4000","817F1080 AF02","817F1082 0028","817F1084 8E78","817F1086 0000","817F1088 0800","817F108A 4853","817F108C 8E02","817F108E 0000","D00CD3F4 0008","817F10F0 0100","D00CD3F4 0004","817F10F0 0001"],"options":null},"Widescreen (16:9)":{"note":"","data":["810BCE30 3FE3","810BCE32 D70A"],"options":null}},"90A59003-31089864-C:45":{"Always Normal Spirit\\Player 1":{"note":"","data":["801671F5 0032"],"options":null},"Always Normal Spirit\\Player 2":{"note":"","data":["80167689 0032"],"options":null},"Always Normal Spirit\\Player 3":{"note":"","data":["80167B1D 0032"],"options":null},"Always Normal Spirit\\Player 4":{"note":"","data":["80167FB1 0032"],"options":null},"Always Special\\Player 1":{"note":"","data":["80167235 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["801676C9 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["80167B5D 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["80167FF1 0004"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 1":{"note":"","data":["801671F4 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 2":{"note":"","data":["80167688 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 3":{"note":"","data":["80167B1C 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 4":{"note":"","data":["80167FB0 0064"],"options":null},"Have All Characters":{"note":"","data":["8109ED5A FFFF"],"options":null},"Infinite Create-A-Wrestler Attribute Points":{"note":"","data":["8011A81B 001E"],"options":null},"Max Attributes":{"note":"","data":["50000502 0000","8011A811 0032"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["801671F5 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["80167689 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["80167B1D 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["80167FB1 00FF"],"options":null},"No Spirit\\Player 1":{"note":"","data":["801671F5 0000"],"options":null},"No Spirit\\Player 2":{"note":"","data":["80167689 0000"],"options":null},"No Spirit\\Player 3":{"note":"","data":["80167B1D 0000"],"options":null},"No Spirit\\Player 4":{"note":"","data":["80167FB1 0000"],"options":null},"Specials Don't Run Out":{"note":"","data":["8112AD94 2400"],"options":null},"Timer Is Always 00:00":{"note":"","data":["8016F0AF 0000"],"options":null},"Ultimate Codes\\Player 1":{"note":"","data":["801671F4 0064"],"options":null},"Ultimate Codes\\Player 2":{"note":"","data":["80167688 0064"],"options":null},"Ultimate Codes\\Player 3":{"note":"","data":["80167B1C 0064"],"options":null},"Ultimate Codes\\Player 4":{"note":"","data":["80167FB0 0064"],"options":null},"Weapon Select\\Player 1":{"note":"","data":["81167236 0300","81166D90 ????","81166D92 0000","80166E50 0000"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 2":{"note":"","data":["811676CA 0300","81166DC0 ????","80166DC2 0001","80166E51 0001"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 3":{"note":"","data":["81167B5E 0300","81166DF0 ????","80166DF2 0002","80166E52 0002"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 4":{"note":"","data":["81167FF2 0300","81166E18 ????","81166E1A 0003","80166E53 0003"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}}},"90AF8D2C-E1AC1B37-C:00":{"Freeze Timer":{"note":"","data":["80161E95 0000"],"options":null},"Infinite 9 Credits":{"note":"","data":["8009F0DB 0009"],"options":null},"Infinite Lives":{"note":"","data":["800A1059 0001"],"options":null},"Infinite Max Energy":{"note":"This give you the most engery to jump really high","data":["800A1067 000F","800A106B 000F"],"options":null}},"90F5D9B3-9D0EDCF0-C:45":{"Have All Pikachus Magnemites":{"note":"","data":["801183BC 0000","801183BD 0000","801183BE 0000"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 1":{"note":"","data":["81285A18 03E7"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 2":{"note":"","data":["81286438 03E7"],"options":null},"Pokemon\\Inf Spells\\Player 1":{"note":"","data":["810AE580 FFFF","810AE582 FFFF","810AE5D4 FFFF","810AE5D6 FFFF","810AE628 FFFF","810AE62A FFFF"],"options":null},"Pokemon\\Inf Spells\\Player 2":{"note":"","data":["810AE79C FFFF","810AE79E FFFF","810AE7F0 FFFF","810AE7F2 FFFF","810AE844 FFFF","810AE846 FFFF"],"options":null},"Pokemon\\Max HP\\Player 1":{"note":"","data":["810AE586 03E7","810AE5DA 03E7","810AE62E 03E7"],"options":null},"Pokemon\\Max HP\\Player 2":{"note":"","data":["810AE7A2 03E7","810AE7F6 03E7","810AE84A 03E7"],"options":null},"Ultimate Code":{"note":"what's so ultimate about this code is it raises your Pokemon to its full potential. Even at Level 100, most Pokemon still have a way to go to raise their stats to the max. But with this code, you can instantly boost any Pokemon to its greatest potential!!!","data":["81171F3C FF01","81171F3E FF01","81171F40 FF01","81171F42 FF01","81171F44 FF01"],"options":null},"Widescreen":{"note":"","data":["81011E6C 240F","81011E6E 00F0","81011E70 240E","81011E72 01AB"],"options":null}},"91691C3D-F4AC5B4D-C:4A":{"Infinite\\Health\\Player 1":{"note":"","data":["8112A576 270F"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["8114AAF6 270F"],"options":null},"Infinite\\Stun Meter\\Player 1":{"note":"","data":["8012A579 00FF"],"options":null},"Infinite\\Stun Meter\\Player 2":{"note":"","data":["8014AAF9 00FF"],"options":null},"Play As\\Player 1":{"note":"","data":["801BBA54 00??"],"options":{"Airazor":"03","Cheetor":"02","Megatron":"04","Optimus Primal":"00","Rattrap":"01","Tarantulas":"05","Terrorsaur":"07","Waspinator":"06"}},"Play As\\Player 2":{"note":"","data":["801BBA55 00??"],"options":{"Airazor":"03","Cheetor":"02","Megatron":"04","Optimus Primal":"00","Rattrap":"01","Tarantulas":"05","Terrorsaur":"07","Waspinator":"06"}}},"916AE6B8-8817AB22-C:4A":{"Diffuculty Modifier":{"note":"","data":["8011252F 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Gems":{"note":"","data":["8012FF07 00FF"],"options":null},"Have All\\Level Keys":{"note":"","data":["8012FDE3 0007","8012FDE7 0007","8012FDEB 0007","8012FDEF 0007","8012FDF3 0007","8012FDF7 0007","8012FDFB 0007"],"options":null},"Have All\\Weapons":{"note":"","data":["8012FDA7 0001","8012FDAB 0001","8012FDAF 0001","8012FDB3 0001","8012FDB7 0001","8012FDBB 0001","8012FDBF 0001","8012FDC3 0001","8012FDC7 0001","8012FDCB 0001","8012FDCF 0001","8012FDD3 0001"],"options":null},"Have\\Backpack":{"note":"","data":["8012FD9B 0001","8012FDDB 0001"],"options":null},"Have\\Cheat Menu":{"note":"","data":["811205F0 FFFF","811205F2 FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["81129030 AAE1","811E85EA F1FF"],"options":null},"Infinite\\Ammo":{"note":"","data":["8012FD7F 00FF","8012FD93 00FF","8012FD83 00FF","8012FD63 00FF","8012FD8B 00FF","8012FD67 00FF","8012FD8F 00FF","8012FD6B 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["8112FD96 5B23","8012FDD7 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C15F4 013C"],"options":null},"Infinite\\Lives":{"note":"","data":["8012FF0B 00FF"],"options":null}},"916B8B5B-780B85A4-C:45":{"Bonus Stage Character Modifier (Training Mode)":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["8018F1D3 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Enable Item Switch Menu (All Modes)":{"note":"Go into Vs Mode \u0026 then Vs Options \u0026 then Press Up On the D-Pad Or Analogue Stick \u0026 then click the A Button to enter the Item Switch Menu. This Cheat Works For All Modes","data":["811348E2 0004"],"options":null},"Give Kirby A Wierd Blow-Up":{"note":"","data":["8025E158 000A"],"options":null},"Have All Characters":{"note":"","data":["810A4938 0FF0"],"options":null},"P1 Press Down On D-Pad To Make Items Appear In Random Spots":{"note":"","data":["D109EFA4 0400","8118D0A2 0001"],"options":null},"Story Mode\\Always Get Pacifist (60,000 Points)":{"note":"","data":["810A4B6E 0000"],"options":null},"Story Mode\\Infinite Time":{"note":"","data":["810A4B2E 43CB"],"options":null},"Story Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code could also result freezing at the end of the Level.","data":["800A4B3B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 1\\Infinite Lives":{"note":"","data":["800A4B43 0004"],"options":null},"Story Mode\\Player 1\\Kirby B Button Move\\Congo Jungle":{"note":"","data":["80270ACF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Fighting Polygon Team":{"note":"","data":["8026271F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["80268B0F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Kirby's Dreamland":{"note":"","data":["8026DB3F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Master Hand Stage":{"note":"","data":["80271C4F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Metal Mario Stage":{"note":"","data":["80263597 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Peach's Castle":{"note":"","data":["80263D9F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Planet Zebes":{"note":"","data":["8026FFA7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Saffron City":{"note":"","data":["80273A97 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["802710F7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["80268E4F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Low % Health":{"note":"","data":["810A4B86 0000"],"options":null},"Story Mode\\Player 1\\Stage Select":{"note":"","data":["D1045188 0010","800A4AE7 00??"],"options":{"Bonus Stage 1":"03","Bonus Stage 2":"07","Bonus Stage 3 (Race To The Finish)":"0B","Final Stage (Vs Master Hand)":"0D","Stage 1 (Vs Link)":"00","Stage 10 (Fighting Polygon Team vs30)":"0C","Stage 2 (Vs Yoshi Team vs 18)":"01","Stage 3 (Vs Fox McCloud)":"02","Stage 4 (Freezes?)":"04","Stage 5 (Vs Pikachu)":"05","Stage 6 (Freezes?)":"06","Stage 7 (Vs Kirby Team vs8)":"08","Stage 8 (Vs Samus Aran)":"09","Stage 9 (Vs Metal Mario)":"0A"}},"Story Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4BAF 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 2\\Infinite Lives":{"note":"","data":["800A4BB7 0004"],"options":null},"Story Mode\\Player 2\\Low % Health":{"note":"","data":["810A4BFA 0000"],"options":null},"Story Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4C23 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 3\\Infinite Lives":{"note":"","data":["800A4C2B 0004"],"options":null},"Story Mode\\Player 3\\Low % Health":{"note":"","data":["810A4C6E 0000"],"options":null},"Story Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4C97 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 4\\Infinite Lives":{"note":"","data":["800A4C9F 0004"],"options":null},"Story Mode\\Player 4\\Low % Health":{"note":"","data":["810A4CE2 0000"],"options":null},"Story Mode\\Skip Straight To Master Hand":{"note":"","data":["800A4AE7 000D"],"options":null},"VS. Mode\\Have Mushroom Kindom":{"note":"","data":["800A4937 00FF"],"options":null},"VS. Mode\\Infinite Time":{"note":"","data":["810A4D1E 43CB"],"options":null},"VS. Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4D2B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["802639EF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["8026BF87 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["8026E2B7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Low % Health":{"note":"","data":["810A4D76 0000"],"options":null},"VS. Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4D9F 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 2\\Low % Health":{"note":"","data":["810A4DEA 0000"],"options":null},"VS. Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4E13 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 3\\Low % Health":{"note":"","data":["810A4E5E 0000"],"options":null},"VS. Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4E87 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 4\\Low % Health":{"note":"","data":["810A4ED2 0000"],"options":null},"Widescreen":{"note":"Minor Menu Misalignments","data":["8103B884 3FE3","8110D288 3C07","8110D28A 3FE8","810D0F64 3C07","810D0F66 3FE8"],"options":null}},"918E2D60-F865683E-C:50":{"Access\\All Cars":{"note":"","data":["50000402 0000","813DFC6A 0001"],"options":null},"Access\\All Challenges":{"note":"","data":["50000502 0000","813DD428 0001"],"options":null},"Access\\All Cups":{"note":"","data":["50000302 0000","812CB7C8 0001"],"options":null},"Always 1st":{"note":"","data":["813E00E8 0001"],"options":null},"Infinite\\Boomerang's":{"note":"","data":["8039B464 0004","8039B467 0004","8039B469 0009"],"options":null},"Infinite\\Bullet's":{"note":"","data":["8039B464 0007","8039B467 0007","8039B469 0009"],"options":null},"Infinite\\CREDITS":{"note":"","data":["80388F3D 0003"],"options":null},"Infinite\\Magnet's":{"note":"","data":["8039B464 0001","8039B467 0001","8039B469 0009"],"options":null},"Infinite\\Seeker's":{"note":"","data":["8039B464 0005","8039B467 0005","8039B469 0009"],"options":null},"Infinite\\Shield's":{"note":"","data":["8039B464 0008","8039B467 0008","8039B469 0009"],"options":null},"Infinite\\Stinger's":{"note":"","data":["8039B464 0003","8039B467 0003","8039B469 0009"],"options":null},"Infinite\\Stopper's":{"note":"","data":["8039B464 0006","8039B467 0006","8039B469 0009"],"options":null},"Infinite\\Turbo's":{"note":"","data":["8039B464 0000","8039B467 0000","8039B469 0009"],"options":null},"Laps To Race":{"note":"","data":["813BBD5C 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Psycho Weapons":{"note":"","data":["8039B469 0003","802B85A3 0003"],"options":null}},"91B66D42-16AC4E46-C:44":{"Have Cheats Menu":{"note":"Go into the Cheats From the main Menu \u0026 put on the Ones you want","data":["810CF716 01FF"],"options":null},"Infinite Balls":{"note":"","data":["802FD21F 0064"],"options":null},"Infinite Credits":{"note":"","data":["802FD215 0064"],"options":null},"Infinite Energy":{"note":"","data":["802FD209 0064"],"options":null},"Infinite Sponge Darts":{"note":"","data":["802FD223 0064"],"options":null},"Infinite Suckers":{"note":"","data":["802FD222 0064"],"options":null},"Start with 9999 Monster Score":{"note":"","data":["812FD20E 270F"],"options":null}},"93053075-261E0F43-C:50":{"All Players On 1st Shot":{"note":"","data":["813013DA 0000"],"options":null}},"930C29EA-939245BF-C:45":{"All Gold Medals":{"note":"","data":["50000502 0000","81259130 0101"],"options":null},"Infinite\\Tools Options":{"note":"","data":["8025A624 00??"],"options":{"Fan":"04","Frying Pan":"01","Ghost":"02","Invisible":"06","Rat Face":"08","Rock":"07","Rocket":"05","Super Ghost":"03","Super Rat Face":"09","Wings":"0A"}},"Infinite\\Trick Game 300 Points":{"note":"","data":["8125A7F2 012C"],"options":null},"Infinite\\Weapons Options":{"note":"","data":["8025A622 00??","8025A623 0009"],"options":{"Bomb":"05","Freeze Shot":"03","Parachute":"02","Slap Stick":"01","Snowman":"04","Whirlwind":"06"}},"Max Coins":{"note":"","data":["8125A5BE 270F","8025A5BF 00C8"],"options":null},"No Frame Skip MP":{"note":"Makes it run at 30fps instead of 15fps.","data":["8009AFD7 0000"],"options":null},"Open Extra Characters \u0026 Snowboards":{"note":"Battle Mode Only","data":["8125916E 0101","80259170 0001","8025915C 0001","8125915E 0101","81259160 0101"],"options":null}},"931AEF3F-EF196B90-C:4A":{"Infinite\\Armor\\Player 1":{"note":"","data":["8011D4DF 0064"],"options":null},"Infinite\\Armor\\Player 2":{"note":"","data":["8011D4E3 0064"],"options":null},"Infinite\\Bombs\\Player 1":{"note":"","data":["8011D4E7 0003"],"options":null},"Infinite\\Bombs\\Player 2":{"note":"","data":["8011D4EB 0003"],"options":null},"Level 11 Vulcan Cannon\\Player 1":{"note":"","data":["80123A2B 000A"],"options":null},"Level 11 Vulcan Cannon\\Player 2":{"note":"","data":["80123BCB 000A"],"options":null},"Press L For Rapid Fire Select\\Player 1":{"note":"","data":["D011BDF1 0020","8011D50F 00??"],"options":{"On Flak":"14","On Nuke \u0026 Laser":"28"}},"Press L For Rapid Fire Select\\Player 2":{"note":"","data":["D011BDF9 0020","8011D513 00??"],"options":{"On Flak":"14","On Nuke \u0026 Laser":"28"}}},"93945F48-5C0F2E30-C:50":{"Bonus Stage Character Modifier (Training Mode)":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["80197A33 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Give Kirby A Wierd Blow-Up":{"note":"","data":["802669B8 000A"],"options":null},"Have All Characters":{"note":"","data":["810AD198 0FF0"],"options":null},"Jump off to win":{"note":"","data":["810AD3A2 0000"],"options":null},"P1 Press Down On D-Pad To Make Items Appear In Random Spots":{"note":"","data":["D10A7804 0400","81195902 0001"],"options":null},"Story Mode\\Always Get Pacifist (60,000 Points)":{"note":"","data":["810AD3CE 0000"],"options":null},"Story Mode\\Infinite Time":{"note":"","data":["810AD38E 43CB"],"options":null},"Story Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code could also result freezing at the end of the Level.","data":["800AD39B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 1\\Infinite Lives":{"note":"","data":["800AD3A3 0004"],"options":null},"Story Mode\\Player 1\\Kirby B Button Move\\Congo Jungle":{"note":"","data":["8027932F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Fighting Polygon Team":{"note":"","data":["8026AF7F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["8027136F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Kirby's Dreamland":{"note":"","data":["8027639F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Master Hand Stage":{"note":"","data":["8027A4AF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Metal Mario Stage":{"note":"","data":["8026BDF7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Peach's Castle":{"note":"","data":["8026C5FF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Planet Zebes":{"note":"","data":["80278807 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Saffron City":{"note":"","data":["8027C2F7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["80279957 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["802716AF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Low % Health":{"note":"","data":["810AD3E6 0000"],"options":null},"Story Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD40F 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 2\\Infinite Lives":{"note":"","data":["800AD417 0004"],"options":null},"Story Mode\\Player 2\\Low % Health":{"note":"","data":["810AD45A 0000"],"options":null},"Story Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD483 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 3\\Infinite Lives":{"note":"","data":["800AD48B 0004"],"options":null},"Story Mode\\Player 3\\Low % Health":{"note":"","data":["810AD4CE 0000"],"options":null},"Story Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD4F7 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 4\\Infinite Lives":{"note":"","data":["800AD4FF 0004"],"options":null},"Story Mode\\Player 4\\Low % Health":{"note":"","data":["810AD542 0000"],"options":null},"Story Mode\\Skip Straight To Master Hand":{"note":"","data":["800AD347 000D"],"options":null},"VS. Mode\\Have Mushroom Kindom":{"note":"","data":["800AD197 00FF"],"options":null},"VS. Mode\\Infinite Time":{"note":"","data":["810AD57E 43CB"],"options":null},"VS. Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD58B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["8026C24F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["802747E7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["80276B17 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Low % Health":{"note":"","data":["810AD5D6 0000"],"options":null},"VS. Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD5FF 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 2\\Low % Health":{"note":"","data":["810AD64A 0000"],"options":null},"VS. Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD673 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 3\\Low % Health":{"note":"","data":["810AD6BE 0000"],"options":null},"VS. Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD6E7 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 4\\Low % Health":{"note":"","data":["810AD732 0000"],"options":null}},"93EB3F7E-81675E44-C:44":{"Access All Levels":{"note":"","data":["8008A9D6 0001","8008A9EA 0001","8008AA12 0001","8008AA62 0001","8008AA76 0001","8008AA8A 0001","8008AA9E 0001","8008AAB2 0001","8008AAC6 0011","8008AADA 0021","8008AAEE 0001","8008AB16 0011","8008AB2A 0041","8008AB3E 0021","8008AB52 0081","8008AB66 0001","8008AB7A 0081","8008AB8E 0001","8008ABB6 0001","8008ABDE 0001","8008ABF2 0011","8008AC06 0021","8008AC56 0001","8008AF3A 0001","8008AF4E 0001","8008AF62 0001","8008AF76 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81094150 0063","81094152 0063","81094154 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A9297 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810866C2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810864C4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80094305 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A92B5 00??","800A92C5 00??","800A92D5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"944FAFC4-B288266A-C:00":{"Infinite Health":{"note":"","data":["812128D0 42C8","812128D2 0000"],"options":null},"Infinite Heat Vision":{"note":"","data":["812128E0 42C8","812128E2 0000"],"options":null},"Infinite Ice Breath":{"note":"","data":["812128E4 42C8","812128E6 0000"],"options":null},"Infinite Speed Boost":{"note":"","data":["812128D8 42C8","812128DA 0000"],"options":null},"Infinite Timer\\Level 2":{"note":"","data":["8119B927 003B","8119B92B 0009"],"options":null},"Infinite X-Ray":{"note":"","data":["812128F0 42C8","812128F2 0000"],"options":null}},"94807E6B-60CC62E4-C:4A":{"1P Mode\\Stage Select":{"note":"","data":["D0162FEB 0001","80162FEB 00??"],"options":{"Car-kun Arle game":"0E","Car-kun Schezo game":"09","Satan Arle game":"0D","Satan Schezo game":"08"}},"Endless Mode\\Player Level 99 Player 1":{"note":"","data":["801632E7 0063"],"options":null},"Endless Mode\\Player Level 99 Player 2":{"note":"","data":["801632EB 0063"],"options":null},"Instant 7th Step of Chain\\Player 1":{"note":"","data":["D0163A2B 0001","80163A2B 0007"],"options":null},"Instant 7th Step of Chain\\Player 2":{"note":"","data":["D0163E5B 0001","80163E5B 0007"],"options":null},"Maximum Score\\Player 1":{"note":"","data":["811632CC 05F5","811632CE E0FF"],"options":null},"Maximum Score\\Player 2":{"note":"","data":["811632D0 05F5","811632D2 E0FF"],"options":null},"Mode Total Continues 0":{"note":"","data":["801632AF 0000","801632C7 0000"],"options":null},"Nazo Puyo Mode\\All Practice Stages Cleared 4":{"note":"","data":["50000402 0000","811631E8 FFFF"],"options":null},"No Warning Icons\\Player 1":{"note":"","data":["80164EA3 0000"],"options":null},"No Warning Icons\\Player 2":{"note":"","data":["80164EA7 0000"],"options":null},"Options Complete Demo Viewer":{"note":"","data":["8016320B 0007","8116320C FFFF","8116320E FFFF"],"options":null}},"95286EB4-B76AD58F-C:45":{"100% Efficiency":{"note":"","data":["80092E4B 0064"],"options":null},"100% Leadership":{"note":"","data":["80092E47 0064"],"options":null},"GDI\\Instant\\Air Strike":{"note":"","data":["800962A4 0032","800C4E50 00FF"],"options":null},"GDI\\Instant\\Build Aircraft":{"note":"","data":["810C4F12 FFFF"],"options":null},"GDI\\Instant\\Build Buildings":{"note":"","data":["810C4F1E FFFF"],"options":null},"GDI\\Instant\\Build Units":{"note":"","data":["810C4F16 FFFF"],"options":null},"GDI\\Instant\\Build Vehicles":{"note":"","data":["810C4F1A FFFF"],"options":null},"GDI\\Instant\\Ion Cannon":{"note":"","data":["800962A5 0033","800C4E30 00FF"],"options":null},"GDI\\Instant\\Nuclear Strike":{"note":"","data":["800962A6 0034","800C4E70 00FF"],"options":null},"GDI\\Max Cash":{"note":"","data":["810C4F06 FFFF","810C4F08 0001"],"options":null},"GDI\\Max Power":{"note":"","data":["810C4F26 FFFF","810C4F28 0001"],"options":null},"GDI\\Maximum Buildings Lost":{"note":"","data":["80092E5F 00C8"],"options":null},"GDI\\Maximum Killed":{"note":"","data":["80092E53 00C8"],"options":null},"GDI\\Mission 4\\Infinite Health APC #1":{"note":"","data":["800ABFB1 00C8"],"options":null},"GDI\\Mission 4\\Infinite Health APC #2":{"note":"","data":["800AC03D 00C8"],"options":null},"GDI\\Mission 4\\Infinite Health Hum-Vee":{"note":"","data":["800ABE99 0096"],"options":null},"GDI\\Mission 6\\Infinite Health Commando":{"note":"","data":["800B56CD 0050"],"options":null},"GDI\\Mission 6\\Infinite Health Transportational Helicopter":{"note":"","data":["800BFC95 005A"],"options":null},"GDI\\No Buildings Lost":{"note":"","data":["80092E5F 0000"],"options":null},"GDI\\None Killed":{"note":"","data":["80092E53 0000"],"options":null},"Max Total Score":{"note":"","data":["81092E42 FFFF"],"options":null},"NOD\\Instant\\Air Strike":{"note":"","data":["800962A4 0032","800C4FF8 00FF"],"options":null},"NOD\\Instant\\Build Aircraft":{"note":"","data":["810C50BA FFFF"],"options":null},"NOD\\Instant\\Build Buildings":{"note":"","data":["810C50C6 FFFF"],"options":null},"NOD\\Instant\\Build Units":{"note":"","data":["810C50BE FFFF"],"options":null},"NOD\\Instant\\Build Vehicles":{"note":"","data":["810C50C2 FFFF"],"options":null},"NOD\\Instant\\Ion Cannon":{"note":"","data":["800962A5 0033","800C4FD8 00FF"],"options":null},"NOD\\Instant\\Nuclear Strike":{"note":"","data":["800962A6 0034","800C5018 00FF"],"options":null},"NOD\\Max Cash":{"note":"","data":["810C50AE FFFF","810C50B0 0001"],"options":null},"NOD\\Max Power":{"note":"","data":["810C50CE FFFF","810C50D0 0001"],"options":null},"NOD\\Maximum Buildings Lost":{"note":"","data":["80092E5B 00C8"],"options":null},"NOD\\Maximum Killed":{"note":"","data":["80092E4F 00C8"],"options":null},"NOD\\No Buildings Lost":{"note":"","data":["80092E5B 0000"],"options":null},"NOD\\None Killed":{"note":"","data":["80092E4F 0000"],"options":null},"Time Spent On Mission":{"note":"","data":["80092E3B 00??"],"options":{"Max Time":"FF","No Time":"00"}},"Tons Of Ending Credits":{"note":"","data":["81092E3C 0FFF","81092E3E FFFF"],"options":null}},"95B2B30B-2B6415C1-C:50":{"Boots Of Speed Select\\Player 1":{"note":"","data":["8113F128 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113F2C4 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113F460 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113F5FC ????"],"options":{"Off":"0000","On":"03FF"}},"Enable Cheat Menu":{"note":"","data":["80137D33 0005","81137C56 07FF"],"options":null},"Have All\\Armour":{"note":"","data":["8013F081 0019","8013F085 0014","8013F089 0014","8013F08D 0014"],"options":null},"Have All\\Items And Artifacts\\Player 1":{"note":"","data":["8013F091 0001","8013F093 00FF","8013F095 0002","8013F097 00FF","8013F099 0003","8013F09B 00FF","8013F09D 0004","8013F09F 00FF","8013F0A1 0005","8013F0A3 00FF","8013F0A5 0006","8013F0A7 00FF","8013F0A9 0007","8013F0AB 00FF","8013F0AD 0008","8013F0AF 00FF","8013F0B1 0009","8013F0B3 00FF","8013F0B5 000A","8013F0B7 00FF","8013F0B9 000B","8013F0BB 00FF","8013F0BD 000C","8013F0BF 00FF","8013F0C1 000D","8013F0C3 00FF","8013F0C5 000E","8013F0C7 00FF","8013F0C9 000F","8013F0CB 00FF","8013F0CD 0010","8013F0CF 00FF","8013F0D1 0011","8013F0D3 00FF","8013F0D5 0012","8013F0D7 00FF","8013F0D9 0013","8013F0DB 00FF","8013F0DD 0014","8013F0DF 00FF","8013F0E1 0015","8013F0E3 00FF","8013F0E5 0016","8013F0E7 00FF","8013F0E9 0017","8013F0EB 00FF","8013F0ED 0018","8013F0EF 00FF","8013F0F1 0019","8013F0F3 00FF","8013F0F5 001B","8013F0F7 00FF","8013F0F9 001C","8013F0FB 00FF","8013F0FD 001D","8013F0FF 00FF","8013F101 001E","8013F103 00FF","8013F105 001F","8013F107 00FF","8013F109 0020","8013F10B 00FF","8013F119 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113F12C 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113F2C8 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113F464 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113F600 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013F145 00FF","8013F147 00FF","8013F149 00FF","8013F14B 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013F2E1 00FF","8013F2E3 00FF","8013F2E5 00FF","8013F2E7 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013F47D 00FF","8013F47F 00FF","8013F481 00FF","8013F483 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013F619 00FF","8013F61B 00FF","8013F61D 00FF","8013F61F 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013F14D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013F2E9 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013F485 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013F621 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013F14F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013F2EB 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013F487 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013F623 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113F11C ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113F2B8 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113F454 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113F5F0 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113F11C FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113F2B8 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113F454 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113F5F0 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8013F123 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113F2BE ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113F45A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113F5F6 ????"],"options":{"Off":"0000","On":"03FF"}}},"964ADD0B-B29213DB-C:4A":{"Access All In-Game Cheats":{"note":"Pause Gameplay To Access","data":["81157E46 000F","81157E56 FFFF"],"options":null},"Access All Navigation Cards":{"note":"","data":["80157E9B 0005"],"options":null},"Access Secret Worlds":{"note":"","data":["81152946 0064"],"options":null},"Infinite Lives":{"note":"","data":["81157EAE 0063"],"options":null},"Max \u0026 Total Gold":{"note":"","data":["80157E4B 0063","80157E4F 0063"],"options":null}},"96747EB4-104BB243-C:4A":{"All levels Complete":{"note":"This activate's solo missions, give all medals on solo missions, activate cheats, activate cinemas, and who knows what else. I just don't Have\\the time to identify these codes. I know that some of this is creditted to Zap2. I don't Have\\the time to cut those codes out.","data":["50003201 0000","800A2940 0001","50003201 0000","800A2972 0001","50003201 0000","800A29A4 0001"],"options":null},"Have All Weapons\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80206B60 0007","801EDB60 0007","801D4B60 0007"],"options":null},"Have All Weapons\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["802087D0 0007","801EF7D0 0007","801D67D0 0007"],"options":null},"Infinite Ammo\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["802062EF 00FF","801ED2EF 00FF","801D42EF 00FF","80205B4B 00FF","801ECB4B 00FF","801D3B4B 00FF"],"options":null},"Infinite Ammo\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80207F5F 00FF","801EEF5F 00FF","801D5F5F 00FF","802077BB 00FF","801EE7BB 00FF","801D57BB 00FF"],"options":null},"Infinite Health\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["812053CC 3F80","811EC3CC 3F80","811D33CC 3F80"],"options":null},"Infinite Health\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8120703C 3F80","811EE03C 3F80","811D503C 3F80"],"options":null},"Infinite Shield\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["812053E0 3F80","811E35A0 3F80","811CA5A0 3F80"],"options":null},"Infinite Shield\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["811FE210 3F80","811E5210 3F80","811CC210 3F80"],"options":null}},"979B263E-F8470004-C:50":{"Access Gargos Character":{"note":"","data":["80127DC8 0001"],"options":null},"Access In-Game Cheats":{"note":"","data":["801283DC 0006"],"options":null},"Fast Kick \u0026 Punch":{"note":"","data":["801D357E 0010"],"options":null},"Infinite Health":{"note":"","data":["801D3584 0078"],"options":null},"Invincible":{"note":"","data":["801D35D4 000A"],"options":null},"Max Blood":{"note":"","data":["80127D5D 0003"],"options":null},"No Time Limit":{"note":"","data":["80127D5B 0001"],"options":null}},"98DF9DFC-6606C189-C:45":{"Belongings\\Slot 01":{"note":"","data":["80189084 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 02":{"note":"","data":["80189085 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 03":{"note":"","data":["80189086 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 04":{"note":"","data":["80189087 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 05":{"note":"","data":["80189088 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 06":{"note":"","data":["80189089 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 07":{"note":"","data":["8018908A 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 08":{"note":"","data":["8018908B 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Have\\All Pics":{"note":"","data":["8118905A FFFF"],"options":null},"Have\\Max Shipped In Bin!":{"note":"","data":["8023738A FFFF"],"options":null},"Have\\Win Dog Races":{"note":"","data":["801886B0 00FF"],"options":null},"Infinite\\Cake Card Points":{"note":"","data":["80181B10 0063"],"options":null},"Infinite\\Chicken Feed":{"note":"","data":["80237411 005C"],"options":null},"Infinite\\Flower Card Points":{"note":"","data":["802373F0 0063"],"options":null},"Infinite\\Fodder Spout (Sheep And Cows)":{"note":"","data":["81180714 0063"],"options":null},"Infinite\\Horse Stamina":{"note":"","data":["802F5015 0002"],"options":null},"Infinite\\Lumber":{"note":"","data":["81189E50 03E7"],"options":null},"Infinite\\Medals For Horse \u0026 Dog Races":{"note":"","data":["81189B06 270F","81205206 270F"],"options":null},"Infinite\\Money":{"note":"","data":["811FD60E FFFF"],"options":null},"Infinite\\Stamina":{"note":"","data":["80189060 00FF"],"options":null},"Infinite\\Watering Can Uses":{"note":"","data":["8016FBCD 0004"],"options":null},"Item\\Slot 01":{"note":"","data":["8018908E 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 02":{"note":"","data":["8018908F 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 03":{"note":"","data":["80189090 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 04":{"note":"","data":["80189091 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 05":{"note":"","data":["80189092 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 06":{"note":"","data":["80189093 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 07":{"note":"","data":["80189094 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 08":{"note":"","data":["80189095 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 09":{"note":"","data":["80189096 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 10":{"note":"","data":["80189097 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 11":{"note":"","data":["80189098 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 12":{"note":"","data":["80189099 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 13":{"note":"","data":["8018909A 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 14":{"note":"","data":["8018909B 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 15":{"note":"","data":["8018909C 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 16":{"note":"","data":["8018909D 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 17":{"note":"","data":["8018909E 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 18":{"note":"","data":["8018909F 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 19":{"note":"","data":["801890A0 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 20":{"note":"","data":["801890A1 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 21":{"note":"","data":["801890A2 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 22":{"note":"","data":["801890A3 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 23":{"note":"","data":["801890A4 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 24":{"note":"","data":["801890A5 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Make\\Ann Love You":{"note":"","data":["801C3F93 00FF"],"options":null},"Make\\Elli Love You":{"note":"","data":["801C3F92 00FF"],"options":null},"Make\\Karen Love You":{"note":"","data":["801C3F94 00FF"],"options":null},"Make\\Maria Love You":{"note":"","data":["801C3F90 00FF"],"options":null},"Make\\Popuri Love You":{"note":"","data":["801C3F91 00FF"],"options":null},"Tool\\Slot 01":{"note":"","data":["80189075 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 02":{"note":"","data":["80189076 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 03":{"note":"","data":["80189077 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 04":{"note":"","data":["80189078 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 05":{"note":"","data":["80189079 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 06":{"note":"","data":["8018907A 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 07":{"note":"","data":["8018907B 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 08":{"note":"","data":["8018907C 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}}},"98F9F2D0-03D9F09C-C:50":{"Foul score will stay at 0":{"note":"","data":["802EF725 0000"],"options":null},"Have 5 games won":{"note":"","data":["802EF721 0005"],"options":null},"Pot 1 to win Set points to 25 in straight pool":{"note":"","data":["802EF71D 0019"],"options":null},"Score 0 points in shark skins":{"note":"","data":["802EF723 0000"],"options":null}},"99150E18-1266E6A5-C:45":{"1 Million Points":{"note":"","data":["8119054C 000F","8119054E 4240"],"options":null},"Access In-Game Cheat Menu":{"note":"","data":["50001104 0000","800E9DD8 0001"],"options":null},"All Complete\\Bob Burnquist":{"note":"","data":["810E8924 FFFF","810E8926 FFFF","810E8928 FFFF","810E892A FFFF","810E892C FFFF","810E892E FFFF","810E8930 FFFF","810E8932 FFFF"],"options":null},"All Complete\\Tony Hawk":{"note":"","data":["810E8840 FFFF","810E8842 FFFF","810E8844 FFFF","810E8846 FFFF","810E8848 FFFF","810E884A FFFF","810E884C FFFF","810E884E FFFF"],"options":null},"All Gaps\\Hanger":{"note":"","data":["800E9CC5 00FF","810E9CC6 FFFF"],"options":null},"All Gaps\\Marseille":{"note":"","data":["810E9CDC FFFF","810E9CDE FFFF","800E9CE3 000F"],"options":null},"All Gaps\\Philadelphia":{"note":"","data":["810E9D0C FFFF","810E9D0E FFFF","810E9D12 0FFF"],"options":null},"All Gaps\\School II":{"note":"","data":["810E9CD0 FFFF","810E9CD2 FFFF","810E9CD6 0FFF"],"options":null},"All Gaps\\Skatestreet":{"note":"","data":["810E9D00 FFFF","810E9D02 FFFF","800E9D07 000F"],"options":null},"All Gaps\\Venice Beach":{"note":"","data":["810E9CF4 FFFF","810E9CF6 FFFF","810E9CFA 0FFF"],"options":null},"All Tricks Available\\Custom Player 1":{"note":"","data":["810E9454 FFFF","810E9456 FFFF","810E9458 FFFF","810E945A FFFF","810E945C FFFF","810E945E FFFF"],"options":null},"All Tricks Available\\Custom Player 2":{"note":"","data":["810E9538 FFFF","810E953A FFFF","810E953C FFFF","810E953E FFFF","810E9540 FFFF","810E9542 FFFF"],"options":null},"All Tricks Available\\Custom Player 3":{"note":"","data":["810E961C FFFF","810E961E FFFF","810E9620 FFFF","810E9622 FFFF","810E9624 FFFF","810E9626 FFFF"],"options":null},"All Tricks Available\\Custom Player 4":{"note":"","data":["810E9700 FFFF","810E9702 FFFF","810E9704 FFFF","810E9706 FFFF","810E9708 FFFF","810E970A FFFF"],"options":null},"Always Special On Cheat":{"note":"","data":["800E9DEC 0001"],"options":null},"Infinte Time":{"note":"","data":["810E87AA 0000"],"options":null},"Max Cash\\Andrew Reynolds":{"note":"","data":["810E903C 000F","810E903E 423F","810E9040 000F","810E9042 423F"],"options":null},"Max Cash\\Bob Burnquist":{"note":"","data":["810E891C 000F","810E891E 423F","810E8920 000F","810E8922 423F"],"options":null},"Max Cash\\Bucky Lasek":{"note":"","data":["810E8D90 000F","810E8D92 423F","810E8D94 000F","810E8D96 423F"],"options":null},"Max Cash\\Chad Muska":{"note":"","data":["810E8F58 000F","810E8F5A 423F","810E8F5C 000F","810E8F5E 423F"],"options":null},"Max Cash\\Custom Player 1":{"note":"","data":["810E93CC 000F","810E93CE 423F","810E93D0 000F","810E93D2 423F"],"options":null},"Max Cash\\Custom Player 2":{"note":"","data":["810E94B0 000F","810E94B2 423F","810E94B4 000F","810E94B6 423F"],"options":null},"Max Cash\\Custom Player 3":{"note":"","data":["810E9594 000F","810E9596 423F","810E9598 000F","810E959A 423F"],"options":null},"Max Cash\\Custom Player 4":{"note":"","data":["810E9678 000F","810E967A 423F","810E967C 000F","810E967E 423F"],"options":null},"Max Cash\\Elissa Steamer":{"note":"","data":["810E9204 000F","810E9206 423F","810E9208 000F","810E920A 423F"],"options":null},"Max Cash\\Eric Koston":{"note":"","data":["810E8CAC 000F","810E8CAE 423F","810E8CB0 000F","810E8CB2 423F"],"options":null},"Max Cash\\Geoff Rowley":{"note":"","data":["810E9120 000F","810E9122 423F","810E9124 000F","810E9126 423F"],"options":null},"Max Cash\\Jamie Thomas":{"note":"","data":["810E92E8 000F","810E92EA 423F","810E92EC 000F","810E92EE 423F"],"options":null},"Max Cash\\Kareem Campbell":{"note":"","data":["810E8AE4 000F","810E8AE6 423F","810E8AE8 000F","810E8AEA 423F"],"options":null},"Max Cash\\Officer Dick":{"note":"","data":["810E975C 000F","810E975E 423F","810E9760 000F","810E9762 423F"],"options":null},"Max Cash\\Rodney Mullen":{"note":"","data":["810E8E74 000F","810E8E76 423F","810E8E78 000F","810E8E7A 423F"],"options":null},"Max Cash\\Rune Glifberg":{"note":"","data":["810E8BC8 000F","810E8BCA 423F","810E8BCC 000F","810E8BCE 423F"],"options":null},"Max Cash\\Steve Caballero":{"note":"","data":["810E8A00 000F","810E8A02 423F","810E8A04 000F","810E8A06 423F"],"options":null},"Perfect Balance Cheat":{"note":"","data":["800E9DE8 0001"],"options":null},"Tricks Available\\Andrew Reynolds":{"note":"","data":["810E90C4 FFFF","810E90C6 FFFF","810E90C8 FFFF","810E90CA FFFF","810E90CC FFFF","810E90CE FFFF"],"options":null},"Tricks Available\\Bob Burnquist":{"note":"","data":["810E89A4 FFFF","810E89A6 FFFF","810E89A8 FFFF","810E89AA FFFF","810E89AC FFFF","810E89AE FFFF"],"options":null},"Tricks Available\\Chad Muska":{"note":"","data":["810E8FE0 FFFF","810E8FE2 FFFF","810E8FE4 FFFF","810E8FE6 FFFF","810E8FE8 FFFF","810E8FEA FFFF"],"options":null},"Tricks Available\\Elissa Steamer":{"note":"","data":["810E928C FFFF","810E928E FFFF","810E9290 FFFF","810E9292 FFFF","810E9294 FFFF","810E9296 FFFF"],"options":null},"Tricks Available\\Eric Koston":{"note":"","data":["810E8D34 FFFF","810E8D36 FFFF","810E8D38 FFFF","810E8D3A FFFF","810E8D3C FFFF","810E8D3E FFFF"],"options":null},"Tricks Available\\Geoff Rowley":{"note":"","data":["810E91A8 FFFF","810E91AA FFFF","810E91AC FFFF","810E91AE FFFF","810E91B0 FFFF","810E91B2 FFFF"],"options":null},"Tricks Available\\Jamie Thomas":{"note":"","data":["810E9370 FFFF","810E9372 FFFF","810E9374 FFFF","810E9376 FFFF","810E9378 FFFF","810E937A FFFF"],"options":null},"Tricks Available\\Kareem Campbell":{"note":"","data":["810E8B6C FFFF","810E8B6E FFFF","810E8B70 FFFF","810E8B72 FFFF","810E8B74 FFFF","810E8B76 FFFF"],"options":null},"Tricks Available\\Officer Dick":{"note":"","data":["810E97E4 FFFF","810E97E6 FFFF","810E97E8 FFFF","810E97EA FFFF","810E97EC FFFF","810E97EE FFFF"],"options":null},"Tricks Available\\Rodney Mullen":{"note":"","data":["810E8EFC FFFF","810E8EFE FFFF","810E8F00 FFFF","810E8F02 FFFF","810E8F04 FFFF","810E8F06 FFFF"],"options":null},"Tricks Available\\Rune Glifberg":{"note":"","data":["810E8C50 FFFF","810E8C52 FFFF","810E8C54 FFFF","810E8C56 FFFF","810E8C58 FFFF","810E8C5A FFFF"],"options":null},"Tricks Available\\Spider Man":{"note":"","data":["810E99AC FFFF","810E99AE FFFF","810E99B0 FFFF","810E99B2 FFFF","810E99B4 FFFF","810E99B6 FFFF"],"options":null},"Tricks Available\\Steve Caballero":{"note":"","data":["810E8A88 FFFF","810E8A8A FFFF","810E8A8C FFFF","810E8A8E FFFF","810E8A90 FFFF","810E8A92 FFFF"],"options":null},"Tricks Available\\Tony Hawk":{"note":"","data":["810E88C0 FFFF","810E88C2 FFFF","810E88C4 FFFF","810E88C6 FFFF","810E88C8 FFFF","810E88CA FFFF"],"options":null},"Unlock Hoffman Factory \u0026 Skate Heaven":{"note":"","data":["800EA0CB 003F"],"options":null},"Unlock\\Officer Dick":{"note":"","data":["800E9DDC 0001","800F087B 0001"],"options":null},"Unlock\\Spider Man":{"note":"","data":["800E9DD8 0001","800F0B9B 0001"],"options":null}},"99179359-2FE7EBC3-C:50":{"Access All\\Bonus Coins":{"note":"","data":["50000F02 0000","810A6124 0007"],"options":null},"Access All\\Paw Coins":{"note":"","data":["50000F02 0000","810A60E8 03FF"],"options":null},"Access All\\Special Remote Controls":{"note":"","data":["810A60E4 FFFF","810A60E6 FFFF"],"options":null},"Access All\\ordinary Remote Controls":{"note":"","data":["50000F01 0000","800A60A8 000F"],"options":null},"Crazy Tail":{"note":"","data":["8110955E 0001"],"options":null},"Infinite\\Health":{"note":"","data":["810A60C8 0005"],"options":null},"Infinite\\Lives":{"note":"","data":["810A60C6 0064"],"options":null}},"9AB3B50A-BC666105-C:44":{"Access In-Game Cheat Menu":{"note":"To Access Pause Game Play. This gives you access to In-game Cheats like God Mode,Level Select,All Items Etc","data":["81137CD6 07FF","80137DB3 0005"],"options":null},"Boots Of Speed Select\\Player 1":{"note":"","data":["8113F538 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113F6D4 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113F870 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113FA0C ????"],"options":{"Off":"0000","On":"03FF"}},"Have All\\Armour":{"note":"","data":["8013F491 0019","8013F495 0014","8013F499 0014","8013F49D 0014"],"options":null},"Have All\\Items And Artifacts\\Player 1":{"note":"","data":["8013F4A1 0001","8013F4A3 00FF","8013F4A5 0002","8013F4A7 00FF","8013F4A9 0003","8013F4AB 00FF","8013F4AD 0004","8013F4AF 00FF","8013F4B1 0005","8013F4B3 00FF","8013F4B5 0006","8013F4B7 00FF","8013F4B9 0007","8013F4BB 00FF","8013F4BD 0008","8013F4BF 00FF","8013F4C1 0009","8013F4C3 00FF","8013F4C5 000A","8013F4C7 00FF","8013F4C9 000B","8013F4CB 00FF","8013F4CD 000C","8013F4CF 00FF","8013F4D1 000D","8013F4D3 00FF","8013F4D5 000E","8013F4D7 00FF","8013F4D9 0010","8013F4DB 00FF","8013F4DD 0011","8013F4DF 00FF","8013F4E1 0012","8013F4E3 00FF","8013F4E5 0013","8013F4E7 00FF","8013F4E9 0014","8013F4EB 00FF","8013F4ED 0015","8013F4EF 00FF","8013F4F1 0016","8013F4F3 00FF","8013F4F5 0017","8013F4F7 00FF","8013F4F9 0018","8013F4FB 00FF","8013F4FD 0019","8013F4FF 00FF","8013F501 001A","8013F503 00FF","8013F505 001B","8013F507 00FF","8013F509 001C","8013F50B 00FF","8013F50D 001D","8013F50F 00FF","8013F511 001E","8013F513 00FF","8013F515 001F","8013F517 00FF","8013F519 0020","8013F51B 00FF","8013F529 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113F53C 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113F6D8 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113F874 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113FA10 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013F555 00FF","8013F557 00FF","8013F559 00FF","8013F55B 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013F6F1 00FF","8013F6F3 00FF","8013F6F5 00FF","8013F6F7 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013F88D 00FF","8013F88F 00FF","8013F891 00FF","8013F893 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013FA29 00FF","8013FA2B 00FF","8013FA2D 00FF","8013FA2F 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013F55D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013F2E9 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013F485 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013F621 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013F55F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013F2EB 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013F487 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013F623 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113F52C ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113F6C8 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113F864 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113FA00 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113F52C FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113F2B8 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113F454 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113F5F0 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8113F533 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113F6CE ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113F86A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113FA06 ????"],"options":{"Off":"0000","On":"03FF"}}},"9B500E8E-E90550B3-C:50":{"Have All Guns In Chest":{"note":"","data":["50000E04 0100","810E59F4 05FF"],"options":null},"Have All Main Items In Chest":{"note":"If you want items that are not listed in the Chest, then just use the Have Item On Slot Select code to have what you desire.","data":["810E5A2C 17FF","810E5A30 1EFF","810E5A34 1FFF","810E5A38 23FF","50000404 0100","810E5A3C 25FF","810E5A4C 2AFF","810E5A50 2BFF","50000304 0100","810E5A54 2EFF","50000F04 0100","810E5A60 32FF","810E5A9C 43FF","50000504 0100","810E5AA0 47FF","50000404 0100","810E5AB4 53FF","50000C04 0100","810E5AC4 58FF"],"options":null},"Have\\Fine Condition Always":{"note":"","data":["810DDEE4 0000"],"options":null},"Have\\Item On Slot Select\\Slot 01":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59C8 00??","800E59C9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 02":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59CC 00??","800E59CD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 03":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59D0 00??","800E59D1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 04":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59D4 00??","800E59D5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 05":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59D8 00??","800E59D9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 06":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59DC 00??","800E59DD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 07":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59E0 00??","800E59E1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 08":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59E4 00??","800E59E5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 09":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59E8 00??","800E59E9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 10":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59EC 00??","800E59ED 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Infinite\\Health":{"note":"","data":["810DDE22 00C8"],"options":null},"Infinite\\Time":{"note":"","data":["800E57BF 0010"],"options":null},"Play As":{"note":"This allows you to select what character you wish to play as. Just slect on load and select as normal at the menu and when in game you will be the character of your choice","data":["810DDC38 ????"],"options":{"Ada (can crash the game)":"0E80","Cheryl":"0F80","Claire Original":"0380","Claire as Biker":"0980","Claire without jacket":"0780","Claires body Leons outfit":"0B80","Hunk (can crash the game)":"0C80","Leon Original":"0280","Leon Wounded":"0680","Leon as Biker":"0A80","Leon as Stars":"0880","To Fu":"0D80"}},"Play Extra Mission":{"note":"This allows you to select what extra mission you wish to play. Just slect on load and carry on as normal at the menu and when in game you will be the character of your choice Do not use at the same time as [Resident Evil 2 Mode]","data":["810DDBEE 00??"],"options":{"The 4th Survior":"48","To-Fu":"49"}},"Quick Chest Access":{"note":"With this code, all you have to do to access the chest, is hold L and Press Start.","data":["D1014FA4 0020","81122598 0100"],"options":null},"Quick Save Access":{"note":"(1 Anytime, anywhere, press Z and B at the same time. You'll get the standard typewriter text: \"It's an old typewriter. You can save your progress with this.\" Note that you must, of course, have an ink ribbon to save. 2) Choose \"Yes\" and you'll be able to save normally. Instead of the location name, your save file will say \"Scenario 1st\" or \"Scenario 2nd.\" 3) When you load your save file, you'll have to skip through the intro, but when the game loads up you'll be exactly where you saved!","data":["D1014FA4 6000","810E5428 8007","D1014FA4 6000","810E542A 0E30"],"options":null},"[Saves Always 0]":{"note":"No matter how many saves you do ithis makes the game think you Have\\not saved.","data":["810E8B50 0000"],"options":null}},"9C40016E-63BFFE91-C:4A":{"All Bonus Buildings":{"note":"","data":["8123D22A 0007","8123D21C 000F","81155BF8 03FF","81157A6C 0004"],"options":null},"Infinite Money":{"note":"","data":["8123D190 05F5","8123D192 E0FF"],"options":null},"Unlock All Scenarios":{"note":"","data":["810DD938 FFFF"],"options":null}},"9C663069-80F24A80-C:50":{"Lower Left Character\\Coin Options":{"note":"","data":["800FFB09 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800DDD1A 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800FFB0C 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["800FFB39 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800DDD5E 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800FFB3C 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Mini Game\\Max 99 Coins":{"note":"","data":["800FFF61 0063"],"options":null},"Mini Game\\Unlimited 99 lives":{"note":"","data":["800FFF58 0063"],"options":null},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["800FFAA9 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800DDC92 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800FFAAC 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["800FFAD9 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800DDCD6 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800FFADC 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Widescreen":{"note":"","data":["8101E3D2 3FE3","8101EBE6 3FE3","D1105E52 3FAA","81105E52 3FE3","8104DDEC 0801","8104DDEE 86D1","8104DDF0 C602","8104DDF2 0004","81061B44 3C1B","81061B46 3FAB","81061B48 449B","81061B4A 0000","81061B4C 4600","81061B4E 1082","81061B50 8E06","81061B52 0008","81061B54 0801","81061B56 377D","81061B58 4405","81061B5A 1000","81025D68 0801","81025D6A 86D7","81025D6C C602","81025D6E 0024","81061B5C 3C1B","81061B5E 800E","81061B60 8F7B","81061B62 FADC","81061B64 101B","81061B66 0004","81061B68 2400","81061B6C 3C1B","81061B6E 3FAB","81061B70 449B","81061B72 0000","81061B74 4600","81061B76 1082","81061B78 4405","81061B7A 1000","81061B7C 0800","81061B7E 975C","81061B80 8E06","81061B82 0028"],"options":null}},"9C7318D2-24AE0DC1-C:4A":{"Access All\\Cars":{"note":"","data":["8002CA97 000B"],"options":null},"Access All\\Difficulties":{"note":"","data":["8002CA9B 0004"],"options":null},"Access All\\Multiplayer Levels":{"note":"","data":["50000901 0000","8002CAA0 0001"],"options":null},"Access All\\Tracks":{"note":"","data":["8002CA93 0006"],"options":null},"Access In-Game Cheats":{"note":"","data":["50001301 0000","8002CAA8 0001"],"options":null},"Damage Select":{"note":"","data":["8002C833 00??"],"options":{"Double":"02","Half":"01","Normal":"00","Triple":"03"}},"Health Select":{"note":"","data":["8002C81F 00??"],"options":{"Bad Only":"02","Good Only":"01","Normal":"00","Off":"03"}},"Infinite Continues":{"note":"","data":["8002C6F7 0064"],"options":null},"Low Timer":{"note":"","data":["81025874 3001"],"options":null},"Power-Up Select":{"note":"","data":["8002C81B 00??"],"options":{"?":"05","Health":"06","Invincible":"07","Mines":"01","Nitros":"04","Normal":"00","Off":"08","Rockets":"02","Stealer":"03"}},"Radar":{"note":"","data":["8002C82F 00??"],"options":{"Off":"01","On":"00"}},"Speed units\\Kph or Mph":{"note":"","data":["81025908 ????"],"options":{"Kph":"0100","Mph":"0001"}},"View Mode Select?":{"note":"","data":["8002C82B 00??"],"options":{"Fisheye":"03","Flip":"02","Fog":"01","Normal":"00"}},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\01 Coventry Cove":{"note":"","data":["8036B243 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\02 Mount Mayhem":{"note":"","data":["80351283 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\03 Inferno Isle":{"note":"","data":["80364153 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\04 Sunset Sands":{"note":"","data":["8034242B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\05 Metro Madness":{"note":"","data":["8035CAFB 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\06 Wicked Woods":{"note":"","data":["80354A33 0064"],"options":null}},"9C8FB2FA-9B84A09B-C:45":{"Have All Pikachus Magnemites":{"note":"","data":["801183BC 0000","801183BD 0000","801183BE 0000"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 1":{"note":"","data":["81285A18 03E7"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 2":{"note":"","data":["81286438 03E7"],"options":null},"Pokemon\\Inf Spells\\Player 1":{"note":"","data":["810AE580 FFFF","810AE582 FFFF","810AE5D4 FFFF","810AE5D6 FFFF","810AE628 FFFF","810AE62A FFFF"],"options":null},"Pokemon\\Inf Spells\\Player 2":{"note":"","data":["810AE79C FFFF","810AE79E FFFF","810AE7F0 FFFF","810AE7F2 FFFF","810AE844 FFFF","810AE846 FFFF"],"options":null},"Pokemon\\Max HP\\Player 1":{"note":"","data":["810AE586 03E7","810AE5DA 03E7","810AE62E 03E7"],"options":null},"Pokemon\\Max HP\\Player 2":{"note":"","data":["810AE7A2 03E7","810AE7F6 03E7","810AE84A 03E7"],"options":null},"Ultimate Code":{"note":"what's so ultimate about this code is it raises your Pokemon to its full potential. Even at Level 100, most Pokemon still have a way to go to raise their stats to the max. But with this code, you can instantly boost any Pokemon to its greatest potential!!!","data":["81171F3C FF01","81171F3E FF01","81171F40 FF01","81171F42 FF01","81171F44 FF01"],"options":null}},"9C961069-F5EA488D-C:4A":{"Player 1 Health":{"note":"If you select the Low option, It will give your opponent an easy win over over you","data":["8110CF68 ????"],"options":{"Low":"4220","Max":"0000"}},"Player 2 Health":{"note":"If you select the Low option, It will give your opponent an easy win over over you","data":["8110CF6C ????"],"options":{"Low":"4220","Max":"0000"}}},"9CAB6AEA-87C61C00-C:45":{"Boots Of Speed Select\\Player 1":{"note":"","data":["8113DB58 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113DCF4 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113DE90 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113E02C ????"],"options":{"Off":"0000","On":"03FF"}},"Enable Cheat Menu":{"note":"","data":["80136773 0005","81136696 FFFF"],"options":null},"Have All\\Armour":{"note":"","data":["8013DAB1 0019","8013DAB5 0014","8013DAB9 0014","8013DABD 0014"],"options":null},"Have All\\Items And Artifacts":{"note":"","data":["8013DAC1 0001","8013DAC3 00FF","8013DAC5 0002","8013DAC7 00FF","8013DAC9 0003","8013DACB 00FF","8013DACD 0004","8013DACF 00FF","8013DAD1 0005","8013DAD3 00FF","8013DAD5 0006","8013DAD7 00FF","8013DAD9 0007","8013DADB 00FF","8013DADD 0008","8013DADF 00FF","8013DAE1 0009","8013DAE3 00FF","8013DAE5 000A","8013DAE7 00FF","8013DAE9 000B","8013DAEB 00FF","8013DAED 000C","8013DAEF 00FF","8013DAF1 000D","8013DAF3 00FF","8013DAF5 000E","8013DAF7 00FF","8013DAF9 000F","8013DAFB 00FF","8013DAFD 0010","8013DAFF 00FF","8013DB01 0011","8013DB03 00FF","8013DB05 0012","8013DB07 00FF","8013DB09 0013","8013DB0B 00FF","8013DB0D 0014","8013DB0F 00FF","8013DB11 0015","8013DB13 00FF","8013DB15 0016","8013DB17 00FF","8013DB19 0017","8013DB1B 00FF","8013DB1D 0018","8013DB1F 00FF","8013DB21 0019","8013DB23 00FF","8013DB25 001B","8013DB27 00FF","8013DB29 001C","8013DB2B 00FF","8013DB2D 001D","8013DB2F 00FF","8013DB31 001E","8013DB33 00FF","8013DB35 001F","8013DB37 00FF","8013DB39 0020","8013DB3B 00FF","8013DB49 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113DB5C 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113DCF8 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113DE94 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113E030 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013DB75 00FF","8013DB79 00FF","8013DB7B 00FF","8013DB77 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013DD11 00FF","8013DD13 00FF","8013DD15 00FF","8013DD17 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013DEAD 00FF","8013DEAF 00FF","8013DEB1 00FF","8013DEB3 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013E049 00FF","8013E04B 00FF","8013E04D 00FF","8013E04F 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013DB7D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013DD19 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013DEB5 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013E051 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013DB7F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013DD1B 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013DEB7 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013E053 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113DB4C ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113DCE8 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113DE84 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113E020 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113DB4C FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113DCE8 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113DE84 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113E020 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8113DB53 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113DCEE ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113DE8A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113E026 ????"],"options":{"Off":"0000","On":"03FF"}}},"9CCE5B1D-6351E283-C:00":{"Invaders\\Have Infinite 99 Credits":{"note":"","data":["802C40AB 0099"],"options":null},"Invaders\\Have Infinite Max Lives":{"note":"","data":["802C41BF 0008"],"options":null}},"9CE02E22-206EF1B0-C:4A":{"1 Lap To Race":{"note":"In Single and Chapionship Modes use the Laps In Race Cheat or use the in game setting to choose how many laps you want per race and them use this cheat and amount of Laps to have only have 1 left if needed.","data":["80098A5D 00??"],"options":{"12 of 12 Laps":"0C","15 of 15 Laps":"0F","18 of 18 Laps":"12","21 of 21 Laps":"15","24 of 24 Laps":"18","27 of 27 Laps":"1B","3 of 3 Laps":"03","30 of 30 Laps":"1E","6 of 6 Laps":"06","9 of 9 Laps":"09"}},"Always 1st Place":{"note":"","data":["81098A58 0001"],"options":null},"Car Select":{"note":"","data":["800C50B1 00??"],"options":{"Car 1":"00","Car 10":"09","Car 11":"0A","Car 12":"0B","Car 13":"0C","Car 14":"0D","Car 15":"0E","Car 16":"0F","Car 17":"10","Car 18":"11","Car 2":"01","Car 3":"02","Car 4":"03","Car 5":"04","Car 6":"05","Car 7":"06","Car 8":"07","Car 9":"08"}},"Freeze\\Lap Timer":{"note":"Single and Chapionship Race Modes","data":["800967E5 0000","800967E7 0000"],"options":null},"Freeze\\Pit Timer":{"note":"Single and Chapionship Race Modes","data":["800968A5 0000","800968A7 0000"],"options":null},"Freeze\\Timer Challenge Timer":{"note":"Timer Challenge","data":["800C4F87 0050"],"options":null},"Laps\\In Race\\Chapionship Race Mode":{"note":"","data":["800C4ED3 00??"],"options":{"12 Laps In Race":"0C","15 Laps In Race":"0F","18 Laps In Race":"12","21 Laps In Race":"15","24 Laps In Race":"18","27 Laps In Race":"1B","3 Laps In Race":"03","30 Laps In Race":"1E","6 Laps In Race":"06","9 Laps In Race":"09"}},"Laps\\In Race\\Single Race Mode":{"note":"","data":["800C4ED1 00??"],"options":{"12 Laps In Race":"0C","15 Laps In Race":"0F","18 Laps In Race":"12","21 Laps In Race":"15","24 Laps In Race":"18","27 Laps In Race":"1B","3 Laps In Race":"03","30 Laps In Race":"1E","6 Laps In Race":"06","9 Laps In Race":"09"}},"Pit Stops\\Championship":{"note":"","data":["800C4F13 00??"],"options":{"Off":"00","On":"01"}},"Pit Stops\\Single Race Mode":{"note":"","data":["800C4F11 00??"],"options":{"Off":"00","On":"01"}},"Track Direction\\Championship":{"note":"","data":["800C4EF3 00??"],"options":{"Normal":"00","Reverse":"01"}},"Weather\\Championship":{"note":"","data":["800C4F33 00??"],"options":{"Dry":"00","Night":"03","Wet":"01"}},"Weather\\Single Race Mode":{"note":"","data":["800C4F31 00??"],"options":{"Dry":"00","Night":"03","Wet":"01"}}},"9D7E3C4B-E60F4A6C-C:4A":{"Have All Weapons":{"note":"","data":["811ED1E2 FFFF"],"options":null},"Infinite\\Ammo (All Weapons)":{"note":"","data":["8125E330 A05B"],"options":null},"Infinite\\Armor":{"note":"","data":["801ED273 0064"],"options":null},"Infinite\\Experience":{"note":"","data":["801ED253 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["801ED251 0064"],"options":null},"Max\\Acro":{"note":"","data":["801ED25B 0007"],"options":null},"Max\\Attack":{"note":"","data":["801ED257 0007"],"options":null},"Max\\Power":{"note":"","data":["801ED25D 0007"],"options":null},"Max\\Speed":{"note":"","data":["801ED259 0007"],"options":null},"Max\\Vitality":{"note":"","data":["801ED255 0007"],"options":null}},"9E330C01-8C0314BA-C:45":{"Enable Battle Mode And Levels":{"note":"","data":["8008ED6E 0012"],"options":null},"GS Button For 255 Spare0 Missiles":{"note":"","data":["8814E648 00FF"],"options":null},"Gore Mode":{"note":"","data":["8008ED67 0012"],"options":null},"Infinite Lives":{"note":"","data":["8004013C 0005"],"options":null},"Infinite Shields":{"note":"","data":["D014E5E2 0011","8114E5E0 1000"],"options":null},"Lagfix":{"note":"","data":["80028E22 000D"],"options":null},"Sixty Frames":{"note":"","data":["800233C3 0001"],"options":null}},"9E8FCDFA-49F5652B-C:45":{"Player 1\\1-Hit Death":{"note":"","data":["D01D3484 0078","801D3484 0001"],"options":null},"Player 1\\Fast\\Jump Walk":{"note":"","data":["801D347C 0001"],"options":null},"Player 1\\Fast\\Punch Kick":{"note":"","data":["801D347E 0010"],"options":null},"Player 1\\Fight Gargos Immediately":{"note":"","data":["8012834B 000A"],"options":null},"Player 1\\Fulgore\\Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3478 0020","801D3479 0090","801D34C5 0092","801D3527 005E"],"options":null},"Player 1\\Fulgore\\Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3478 0023","801D3479 00F0","801D34C5 0080","801D3527 00AF"],"options":null},"Player 1\\Infinite Energy":{"note":"","data":["801D3484 0069"],"options":null},"Player 1\\Play As":{"note":"","data":["802C8CB8 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 1\\Slow Jump Walk":{"note":"","data":["801D347D 0050"],"options":null},"Player 1\\Spinal Always Has All Skulls":{"note":"","data":["801D3523 0006"],"options":null},"Player 1\\Undefeated Players Scroll By Quickly":{"note":"","data":["802C8CE8 0007"],"options":null},"Player 1\\Untouchable":{"note":"","data":["801D34D4 000A"],"options":null},"Player 1\\Wins Score":{"note":"","data":["8012830A 00FF"],"options":null},"Player 2\\Fast\\Jump Walk":{"note":"","data":["801D357C 0001"],"options":null},"Player 2\\Fast\\Punch Kick":{"note":"","data":["801D357E 0010"],"options":null},"Player 2\\Fulgore Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3578 0020","801D3579 0090","801D35C5 0092","801D3527 005E"],"options":null},"Player 2\\Fulgore Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3578 0023","801D3579 00F0","801D35C5 0080","801D3527 00AF"],"options":null},"Player 2\\Infinite Energy":{"note":"","data":["801D3584 0078"],"options":null},"Player 2\\Play As":{"note":"","data":["8004EA9D 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 2\\Slow\\Jump Walk":{"note":"","data":["801D357D 0050"],"options":null},"Player 2\\Slow\\Punch Kick":{"note":"","data":["801D357F 0050"],"options":null},"Player 2\\Spinal Always Has All Skulls":{"note":"","data":["801D3623 0006"],"options":null},"Player 2\\Untouchable":{"note":"","data":["801D34D5 000A"],"options":null},"Unlock All Options":{"note":"","data":["8012834C 0006"],"options":null}},"9E8FE2BA-8B270770-C:45":{"Always 60fps":{"note":"Intro with N logo is at 60fps now! Why is it a pointer address?!?","data":["D029571F 0002","8029571F 0001"],"options":null},"Player 1\\1-Hit Death":{"note":"","data":["D01D3484 0078","801D3484 0001"],"options":null},"Player 1\\Fast\\Jump Walk":{"note":"","data":["801D347C 0001"],"options":null},"Player 1\\Fast\\Punch Kick":{"note":"","data":["801D347E 0010"],"options":null},"Player 1\\Fight Gargos Immediately":{"note":"","data":["8012834B 000A"],"options":null},"Player 1\\Fulgore\\Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3478 0020","801D3479 0090","801D34C5 0092","801D3527 005E"],"options":null},"Player 1\\Fulgore\\Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3478 0023","801D3479 00F0","801D34C5 0080","801D3527 00AF"],"options":null},"Player 1\\Infinite Energy":{"note":"","data":["801D3484 0069"],"options":null},"Player 1\\Play As":{"note":"","data":["802C8CB8 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 1\\Slow Jump Walk":{"note":"","data":["801D347D 0050"],"options":null},"Player 1\\Spinal Always Has All Skulls":{"note":"","data":["801D3523 0006"],"options":null},"Player 1\\Undefeated Players Scroll By Quickly":{"note":"","data":["802C8CE8 0007"],"options":null},"Player 1\\Untouchable":{"note":"","data":["801D34D4 000A"],"options":null},"Player 1\\Wins Score":{"note":"","data":["8012830A 00FF"],"options":null},"Player 2\\Fast\\Jump Walk":{"note":"","data":["801D357C 0001"],"options":null},"Player 2\\Fast\\Punch Kick":{"note":"","data":["801D357E 0010"],"options":null},"Player 2\\Fulgore Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3578 0020","801D3579 0090","801D35C5 0092","801D3527 005E"],"options":null},"Player 2\\Fulgore Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3578 0023","801D3579 00F0","801D35C5 0080","801D3527 00AF"],"options":null},"Player 2\\Infinite Energy":{"note":"","data":["801D3584 0078"],"options":null},"Player 2\\Play As":{"note":"","data":["8004EA9D 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 2\\Slow\\Jump Walk":{"note":"","data":["801D357D 0050"],"options":null},"Player 2\\Slow\\Punch Kick":{"note":"","data":["801D357F 0050"],"options":null},"Player 2\\Spinal Always Has All Skulls":{"note":"","data":["801D3623 0006"],"options":null},"Player 2\\Untouchable":{"note":"","data":["801D34D5 000A"],"options":null},"Unlock All Options":{"note":"","data":["8012834C 0006"],"options":null}},"9EA95858-AF72B618-C:45":{"Infinite Coins Main Menu":{"note":"","data":["810F8CD2 FFFF"],"options":null},"Lower Left Char\\Item On Pick-Up":{"note":"","data":["800FD341 00??"],"options":{"Boo Bell":"07","Bowser Bomb":"03","Bowser Suit":"08","Dueling Glove":"04","Golden Mushroom":"06","Magic Lamp":"09","Mushroom":"00","Plunder Chest":"02","Skeleton Key":"01","Warp Block":"05"}},"Lower Left Char\\Rolls 10":{"note":"","data":["800DF55D 000A"],"options":null},"Lower Right Char\\Item On Pick-Up":{"note":"","data":["800FD375 00??"],"options":{"Boo Bell":"07","Bowser Bomb":"03","Bowser Suit":"08","Dueling Glove":"04","Golden Mushroom":"06","Magic Lamp":"09","Mushroom":"00","Plunder Chest":"02","Skeleton Key":"01","Warp Block":"05"}},"Lower Right Char\\Rolls 10":{"note":"","data":["800DF5A9 000A"],"options":null},"Upper Left Char\\Item On Pick-Up":{"note":"","data":["800FD2D9 00??"],"options":{"Boo Bell":"07","Bowser Bomb":"03","Bowser Suit":"08","Dueling Glove":"04","Golden Mushroom":"06","Magic Lamp":"09","Mushroom":"00","Plunder Chest":"02","Skeleton Key":"01","Warp Block":"05"}},"Upper Left Char\\Rolls 10":{"note":"","data":["800DF4C5 000A"],"options":null},"Upper Right Char\\Item On Pick-Up":{"note":"","data":["800DF30D 00??"],"options":{"Boo Bell":"07","Bowser Bomb":"03","Bowser Suit":"08","Dueling Glove":"04","Golden Mushroom":"06","Magic Lamp":"09","Mushroom":"00","Plunder Chest":"02","Skeleton Key":"01","Warp Block":"05"}},"Upper Right Char\\Rolls 10":{"note":"","data":["800DF511 000A"],"options":null},"Widescreen":{"note":"Boards in 4:3.","data":["8102045A 3FE3","81053554 0801","81053556 DFD4","81053558 3C1B","8105355A 3FAB","81077F50 449B","81077F52 6000","81077F54 460C","81077F56 0002","81077F58 4606","81077F5A 0002","81077F5C 0801","81077F5E 4D57","81077F60 0000","81077F62 0000"],"options":null}},"9F1ECAF0-EEC48A0E-C:4A":{"Infinite Energy\\Player 1":{"note":"","data":["800AC339 00??"],"options":{"Max":"40","None":"00"}},"Infinite Energy\\Player 2":{"note":"","data":["800AC429 00??"],"options":{"Max":"3F","None":"00"}},"Infinite Match Time":{"note":"","data":["800AB433 0000"],"options":null},"Super Attacks\\Player 1":{"note":"","data":["800AC33D 00??"],"options":{"3":"03","None":"00"}},"Super Attacks\\Player 2":{"note":"","data":["800AC42D 00??"],"options":{"3":"03","None":"00"}},"Unlock Extras":{"note":"","data":["800ACA05 00FF","800ACA07 00FF"],"options":null}},"9F5BF79C-D2FE08A0-C:45":{"Debug Mode":{"note":"","data":["8006C4C2 0001"],"options":null},"Have\\All Keys":{"note":"","data":["801639E9 000F"],"options":null},"Have\\All Weapons":{"note":"","data":["801639EB 007F"],"options":null},"Have\\Quad Damage":{"note":"","data":["8116397C 42C8"],"options":null},"Have\\Ring of Shadows":{"note":"","data":["811639E8 ????"],"options":{"Off":"0000","On":"42C8"}},"Infinite\\Ammo":{"note":"","data":["50000402 0000","80163A2D 0064","50000402 0000","81163A2C 03E7"],"options":null},"Infinite\\Armor":{"note":"","data":["81163944 42C8"],"options":null},"Infinite\\Bio Suit":{"note":"","data":["81163980 42C8"],"options":null},"Infinite\\Health":{"note":"","data":["81163930 42C8"],"options":null},"Multi\\Have All Weapons\\Player 1":{"note":"","data":["8016634B 007F"],"options":null},"Multi\\Have All Weapons\\Player 2":{"note":"","data":["8016661B 007F"],"options":null},"Multi\\Infinite Ammo\\Player 1":{"note":"","data":["50000402 0000","8116638C 03E7"],"options":null},"Multi\\Infinite Ammo\\Player 2":{"note":"","data":["50000402 0000","8116665C 03E7"],"options":null},"Multi\\Infinite Armor\\Player 1":{"note":"","data":["811662A4 42C8"],"options":null},"Multi\\Infinite Armor\\Player 2":{"note":"","data":["81166574 42C8"],"options":null},"Multi\\Infinite Bio Suit\\Player 1":{"note":"","data":["811662E0 42C8"],"options":null},"Multi\\Infinite Bio Suit\\Player 2":{"note":"","data":["811665B0 42C8"],"options":null},"Multi\\Infinite Health\\Player 1":{"note":"","data":["81166290 42C8"],"options":null},"Multi\\Infinite Health\\Player 2":{"note":"","data":["81166560 42C8"],"options":null},"Rapid Fire":{"note":"","data":["D00CA9E0 0020","8016396D 0001"],"options":null}},"9F8926A5-0587B409-C:50":{"10x Trick Multiplier":{"note":"","data":["800D60FE 0001"],"options":null},"Access All gold medals":{"note":"Also opens San Francisco \u0026 Downtown Minneapolis","data":["50000C14 0000","800DEA03 00FF","50000C14 0000","800DEA06 00FF","50000C14 0000","800DEA08 00FF"],"options":null},"Access all Levels,tapes,boards \u0026 Officer Dick":{"note":"","data":["50000C14 0000","800DE9FC 001E"],"options":null},"Max\\Air":{"note":"","data":["800D62DC 00FF"],"options":null},"Max\\Balance":{"note":"","data":["800D62DF 00FF"],"options":null},"Max\\Speed":{"note":"","data":["800DE83A 0001"],"options":null},"Max\\Turning":{"note":"","data":["800D6220 00FF"],"options":null}},"9FD375F8-45F32DC8-C:50":{"Access All Ticket Switches \u0026 Vehicles":{"note":"","data":["800A5E1F 0001","50002004 0000","810A5D70 FFFF"],"options":null},"Activate All In-Game Cheats":{"note":"With this code on, all rocket's abilities are now max","data":["810A6846 F5FF"],"options":null},"Infinite \u0026 Max Health":{"note":"","data":["8109FB82 000C","8109FB84 000A"],"options":null}},"9FE6162D-E97E4037-C:4A":{"All 52 Gold Gems Collected":{"note":"","data":["8016EA30 0003","8016EA31 007E","8016EA32 00FF","8016EA33 00EF","8016EA34 00FF","8016EA35 007F","8016EA36 00FF","8016EA37 00FC"],"options":null},"All Stages \u0026 Chapters Unlocked":{"note":"","data":["8016EA38 003B"],"options":null},"Infinite\\Health\\Marina":{"note":"","data":["810ECAD0 03E8"],"options":null},"Infinite\\Health\\Teran":{"note":"","data":["810F1750 03E8"],"options":null},"Infinite\\Max Red Gems":{"note":"","data":["81175056 270F"],"options":null},"Level Select":{"note":"To access this anytime during game, press L+R+Z to enable the menu. Press D-Pad Up / Down to move through the menu, D-Pad Left / Right to change level digits and then press Start to enter level. Don not do this whhile in pause mode (Start Button Pause) or the game will freeze.","data":["D10BC208 2030","800BC201 0004"],"options":null}},"9FF69D4F-195F0059-C:50":{"Easy Difficulty level":{"note":"","data":["800AD243 0000"],"options":null},"Fast Run":{"note":"","data":["8009B14F 0003"],"options":null},"Infinite Lives":{"note":"","data":["8109B0EE 03E7","810AD24E 03E7"],"options":null},"Level select":{"note":"Set Up In Menu","data":["81076FB6 6F74"],"options":null},"Rapid fire":{"note":"","data":["8009B15F 0003"],"options":null},"Speed level 1 Slow":{"note":"","data":["800AD247 0000"],"options":null}},"A03CF036-BCC1C5D2-C:50":{"Don't Hurt Mario\\Falling":{"note":"Press L to levitate \u0026 Let go to land","data":["8036CF6C 00E8","8136CEB8 FFFF"],"options":null},"Don't Hurt Mario\\Monsters":{"note":"","data":["80309457 0001"],"options":null},"Funny Mario Options\\Mario Walks On Water":{"note":"","data":["802A6204 0800","802A6206 0024","81000090 3C04","81000092 8034","81000094 8484","81000096 B1E6","81000098 4484","8100009A 3000","810000A0 4680","810000A2 3120","810000A4 4604","810000A6 903C","810000AC 4500","810000AE 0002","810000B4 4600","810000B6 2486","810000B8 080E","810000BA 05DB","810000BC E712"],"options":null},"Funny Mario Options\\Mario's Cap\\Off \u0026 in His Hand":{"note":"Here you can Choose Options with Mario with His Cap off \u0026 in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["80309437 00??"],"options":{"Cap In Hand":"20","Flying Mario Cap In Hand":"28","Invisible Mario Cap In Hand":"22","Invisible Metal Mario Cap In Hand":"26","Metal Mario Cap In Hand":"24"}},"Funny Mario Options\\Mario's Cap\\On \u0026 An Extra in His Hand":{"note":"Here you can Choose Options with Mario with His Cap on \u0026 An Extra in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["80309437 00??"],"options":{"Cap In Hand":"30","Flying Mario Cap In Hand":"38","Invisible Mario Cap In Hand":"32","Invisible Metal Mario Cap In Hand":"36","Metal Mario Cap In Hand":"34"}},"Have\\Debug Mode":{"note":"","data":["A02F9748 00??"],"options":{"Off":"00","On":"01"}},"Have\\Level Select":{"note":"","data":["A02F973C 0001"],"options":null},"Infinite\\Energy \u0026 Breath":{"note":"","data":["803094DE 0008"],"options":null},"Infinite\\Lives":{"note":"","data":["803094DD 0064"],"options":null},"Mario's Cap\\Off Options":{"note":"Here you can Choose Options with Mario without His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["80309437 00??"],"options":{"Flying Mario":"08","Invisible Flying Mario":"0A","Invisible Mario":"02","Invisible Metal Flying Mario":"0F","Mario No Cap":"01","Metal Flying Mario":"0D","Metal Mario":"04"}},"Mario's Cap\\On Options":{"note":"Here you can Choose Options with Mario with His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["80309437 00??"],"options":{"Flying Mario":"19","Invisible Mario":"12","Invisible Metal Mario":"16","Metal Mario":"15"}},"Press GS For 255 Coins":{"note":"","data":["893094D8 00FF"],"options":null},"[Slot A Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80202F23 0001","80202F0B 00C7","50001101 0000","80202F0C 00FF"],"options":null},"[Slot A Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80202F25 0064"],"options":null},"[Slot A Codes]\\Have All\\key doors unlocked (and mote empty)":{"note":"","data":["80202F0A 007E"],"options":null},"[Slot B Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80202F93 0001","80202F7B 00C7","50001101 0000","80202F7C 00FF"],"options":null},"[Slot B Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80202F95 0064"],"options":null},"[Slot B Codes]\\Have All\\key doors unlocked (and mote empty)":{"note":"","data":["80202F7A 007E"],"options":null},"[Slot C Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80203003 0001","80202FEB 00C7","50001101 0000","80202FEC 00FF"],"options":null},"[Slot C Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80203005 0064"],"options":null},"[Slot C Codes]\\Have All\\key doors unlocked (and mote empty)":{"note":"","data":["80202FEA 007E"],"options":null},"[Slot D Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80203073 0001","8020305B 00C7","50001101 0000","8020305C 00FF"],"options":null},"[Slot D Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80203075 0064"],"options":null},"[Slot D Codes]\\Have All\\key doors unlocked (and mote empty)":{"note":"","data":["8020305A 007E"],"options":null}},"A08D0F77-6F82E38C-C:45":{"(Tap L Twice) To Skip Intro":{"note":"On game start up, as soon as you see the N64 Logo, Tap the L Button twice letting go eachtime.","data":["D00A6289 0020","800A679F 0024"],"options":null},"Access Multiplayer mode setup menu":{"note":"Enables bypassing the lock by pressing Left on the D-Pad to access character select on the only locked map in Deathmatch: Temple.","data":["D00D1054 0001","800D0B60 0002"],"options":null},"Bypass locked menu":{"note":"","data":["800D0BD3 00??"],"options":{"Chapters":"02","Options":"01"}},"Enable Unused Cheats\\BAPHOMETSVAN":{"note":"Unlock cavemen in multiplayer.","data":["800DE623 0080"],"options":null},"Enable Unused Cheats\\BEEFCURTAINS":{"note":"Unlock zombies in multiplayer.","data":["800DE622 0001"],"options":null},"Enable Unused Cheats\\BEELZEBUBSBUM":{"note":"\"Hitler\" Easter egg.","data":["800DE623 0004"],"options":null},"Enable Unused Cheats\\BILLYMILLROUNDABOUT":{"note":"Unlock Gregg in multiplayer.","data":["800DE621 0002"],"options":null},"Enable Unused Cheats\\BOVRILBULLETHOLE":{"note":"Conker with caveman afro.","data":["800DE622 0002"],"options":null},"Enable Unused Cheats\\DRACULASTEABAGS":{"note":"Conker with caveman mohawk.","data":["800DE622 0004"],"options":null},"Enable Unused Cheats\\DUTCHOVENS":{"note":"Conker with caveman spiky hair.","data":["800DE622 0008"],"options":null},"Enable Unused Cheats\\EASTEREGGSRUS":{"note":"Unlock Neo Conker in multiplayer.","data":["800DE623 0010"],"options":null},"Enable Unused Cheats\\KOJACKSROLLNECK":{"note":"1 Player Multiplayer Resolution Option.","data":["800DE622 0010"],"options":null},"Enable Unused Cheats\\NUTBINGCOEDS":{"note":"Unlock weasel guard in multiplayer.","data":["800DE623 0040"],"options":null},"Enable Unused Cheats\\RUSTYSHERIFFSBADGE":{"note":"Unlock Squirrel Sergeant and Tediz Leader in multiplayer.","data":["800DE621 0001"],"options":null},"Enable Unused Cheats\\SPUNKJOCKEY":{"note":"Slow motion kills with katana/chainsaw.","data":["800DE623 0008"],"options":null},"Enable Unused Cheats\\WELDERSBENCH":{"note":"Unlock all chapters.","data":["800DE622 0080"],"options":null},"Enable Unused Cheats\\WELLYTOP":{"note":"Unlock Conker in multiplayer.","data":["800DE623 0020"],"options":null},"Infinite 99 Lives":{"note":"","data":["800B9B84 0063"],"options":null},"Infinite 99999 Cash":{"note":"","data":["810B9B88 270F"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["800BCFD7 0006"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["800B42CE 0006"],"options":null},"Infinite Health\\Player 3":{"note":"","data":["800B45F2 0006"],"options":null},"Infinite Health\\Player 4":{"note":"","data":["800B4916 0006"],"options":null},"Infinite Oxygen":{"note":"","data":["810B3E9A 0000"],"options":null},"Infinite Time in Multi":{"note":"","data":["810770DA 8C9E"],"options":null},"Map Warp":{"note":"","data":["800A679F 00??"],"options":{"Barn Boys interior - devoid of entities":"01","Barn boys outside, had a funny bug where Conker would hold money forever. Missing a lot of assets.":"0C","Bats tower. Lighting is different(?) Cannot do much since you spawn without the ability to swim underwater. Had a weird bug where all the cutscenes played.":"0B","Battery water helmet room? Can't tell as you can't swim, and you raise up into a warp that crashes the game.":"17","Beach multiplayer, You can fall off and die by exiting the turrets":"2B","Big, big guy boss fight. Map seems to be the same as final.":"0A","Black void":"05","Bluff cutscene area, devoid of anything":"37","Bugga the Knuts arena. Doesn't have much in it. Is the hole normally there?":"14","Bull boss fight - room has all the targets placed all in the middle, and lacks any other objects":"00","Bunker multiplayer, Teddiz symbols changed again":"34","CRASH":"3E","CRASHES GAME":"12","Capture the flag multiplayer. Teddiz symbol was changed.":"30","Causality Dept. Devoid of anything.":"2F","Cheese test room. Lacks textures":"0D","D-Day beach - lacks assets":"04","Don weasel cutscene map":"38","Dupe of above":"20","Experiment boss map, devoid of anything":"23","Fangy Test room.":"0F","First room inside the Tediz base. Devoid of Teddiz":"1B","First room where you encounter Rodent. Devoid of anything, really.":"1C","Fish test room":"03","Great Mighty Poo fight, devoid of anything":"35","Haybot/water raising room. Dying will play all the cutscenes but will crash. Enabling the expansion pack shows weird broken red eye textures":"10","Heist multiplayer map":"1A","Inside Wasps' hive. Devoid of anything.":"27","Inside the Poo Mountain cabin. Can't do much since there's no triggers/ability to escape.":"2C","Inside the Windmill?":"15","Lava race/mugged":"32","Matrix scene, devoid of anything":"36","Mrs catfish, lacks assets":"07","Multiplayer race":"33","N64 Chainsaw cutscene":"21","Outside the bank":"39","Panther King's throne":"18","Rock Solid. Devoid of anything":"31","Room after the bluff. No dinosaurs are present":"19","Second room of Matrix bank":"3A","Spooky Mansion inside":"3C","Spooky mansion outside, devoid of anything":"41","Tank test room":"16","Tanks multiplayer map. Seems to be an asset dump for weird villager sprites.":"24","Teddiz base toxic waste room. Is filled with water for unknown reasons":"28","Teddiz base turret room. Teddiz logo is different, as the turret sprite when using is is displaced (needs console proof this is a graphical error)":"26","Test room. Purpose unknown.":"1F","Uga Buga - cutscene where the caveman gets squashed":"02","Uga Bugga test room":"2A","Uga buga baby dinosaur room. Devoid of anything, and has some missing textures.":"43","Uga buga slime room, has some assets":"42","Upper floor of Teddiz Base UV and scripting issues. Devoid of almost anything":"1E","War plane crash area. Devoid of almost anything":"13","Windy at night":"3B","Windy, Ms bee is not present":"06","another test map":"25","dinosaur multiplayer":"3F","dying first time/meeting Gregg":"22","final boss arena. Exiting will lead you into the vault where you can moonjump and find the Alien in the Matrix vault.":"40","strange maze room. Has a switch, and a random grate.":"11","training":"29","training key room. Can't do much in here.":"2E"}},"Press L To Levitate\\Player 1":{"note":"","data":["D00D1055 0020","810B3E08 4200"],"options":null},"Restore Unused Title Screen":{"note":"Pressing Up on the D-Pad enables a semi-working version of a title screen","data":["D00D1054 0008","800D0D18 0002"],"options":null},"Start with Infinite 9 Granades or Bombs":{"note":"This works for all Players, including player 1 in story mode.","data":["800B9B70 0009"],"options":null}},"A150743E-CF2522CD-C:45":{"Have 99 Coins":{"note":"","data":["810BB10E 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C7A72 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BB0FC 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BB106 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BB10A 0009"],"options":null}},"A1B64A61-D014940B-C:50":{"Access All\\Cars":{"note":"","data":["8002CFF7 000B"],"options":null},"Access All\\Difficulties":{"note":"","data":["8002CFFB 0004"],"options":null},"Access All\\Multiplayer Levels":{"note":"","data":["50000901 0000","8002D000 0001"],"options":null},"Access All\\Tracks":{"note":"","data":["8002CFF3 0006"],"options":null},"Access In-Game Cheats":{"note":"","data":["50001301 0000","8002D008 0001"],"options":null},"Damage Select":{"note":"","data":["8002CD93 00??"],"options":{"Double":"02","Half":"01","Normal":"00","Triple":"03"}},"Health Select":{"note":"","data":["8002CD7F 00??"],"options":{"Bad Only":"02","Good Only":"01","Normal":"00","Off":"03"}},"Infinite Continues":{"note":"","data":["8002CC57 0064"],"options":null},"Low Timer":{"note":"","data":["81025DD4 3001"],"options":null},"Power-Up Select":{"note":"","data":["8002CD7B 00??"],"options":{"?":"05","Health":"06","Invincible":"07","Mines":"01","Nitros":"04","Normal":"00","Off":"08","Rockets":"02","Stealer":"03"}},"Radar":{"note":"","data":["8002CD8F 00??"],"options":{"Off":"01","On":"00"}},"Speed units\\Kph or Mph":{"note":"","data":["81025E68 ????"],"options":{"Kph":"0100","Mph":"0001"}},"View Mode Select?":{"note":"","data":["8002CD8B 00??"],"options":{"Fisheye":"03","Flip":"02","Fog":"01","Normal":"00"}},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\01 Coventry Cove":{"note":"","data":["8036A97B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\02 Mount Mayhem":{"note":"","data":["8034C65B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\03 Inferno Isle":{"note":"","data":["80364A53 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\04 Sunset Sands":{"note":"","data":["8033B4AB 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\05 Metro Madness":{"note":"","data":["8035E9E3 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\06 Wicked Woods":{"note":"","data":["80358E5B 0064"],"options":null}},"A1F51C25-16D61291-C:00":{"God Mode":{"note":"","data":["80774EB7 00??"],"options":{"Off":"00","On":"01"}}},"A24F4CF1-A82327BA-C:4A":{"Debug Mode":{"note":"","data":["80036FFB 0001"],"options":null},"Everything Unlocked\\Save File 1":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","81069A2E FFFF"],"options":null},"Everything Unlocked\\Save File 2":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8106996E FFFF"],"options":null},"Everything Unlocked\\Save File 3":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","81069A8E FFFF"],"options":null},"Everything Unlocked\\Save File 4":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","810699CE FFFF"],"options":null},"Have All Objectives Complete":{"note":"","data":["80037003 0001"],"options":null},"Infinite Ammo (All Levels)":{"note":"","data":["80079EAB 0001"],"options":null}},"A273AB56-DA33DB9A-C:45":{"In-Game Cheats\\Access Cheat menu":{"note":"","data":["50000504 0000","801012D8 0001"],"options":null},"In-Game Cheats\\Enable\\All Items":{"note":"To access simply pause in game play \u0026 then unpause.","data":["801012BC 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Invincibility":{"note":"","data":["802AAA68 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Monsters":{"note":"","data":["802AABDB 00??"],"options":{"Are Active":"00","Are Gone":"01"}},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5DD6 0064","812A5E1E 0064","812A5E2E 00C8","812A5E18 1900","812A5E1A 0640","812A5DE8 04B0","812A5DE8 0960","812A5DB8 0960"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Keys":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5DD3 000F"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000E01 0000","802A5E46 0001","50000E02 0000","812A5D8C 03E7"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Infinite Health (All Levels)":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on Single-Player, Co-Operative and DUKEMATCH, All Levels.","data":["8024CCE7 0064","802A5D89 0064"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A6162 0064","812A61AA 0064","812A61BA 00C8","812A61A4 1900","812A61A6 0640","812A6174 04B0","812A6174 0960","812A6144 0960"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000E01 0000","802A61D2 0001","50000E02 0000","812A6118 03E7"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on DUKEMATCH, All Levels.","data":["8024D073 0064","802A6115 0064"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A64EE 0064","812A6536 0064","812A6546 00C8","812A6530 1900","812A6532 0640","812A6500 04B0","812A6500 0960","812A64D0 0960"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000E01 0000","802A655E 0001","50000E02 0000","812A64A4 03E7"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 4 on DUKEMATCH, All Levels.","data":["8024D3FF 0064","802A64A1 0064"],"options":null},"Single-Player (All Levels)\\Have All\\Items \u0026 Infinite Use on all levels":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5A4A 0064","812A5A92 0064","812A5AA2 00C8","812A5A8C 1900","812A5A8E 0640","812A5A5C 04B0","812A5A5C 0960","812A5A2C 0960"],"options":null},"Single-Player (All Levels)\\Have All\\Keys":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5A47 000F"],"options":null},"Single-Player (All Levels)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000E01 0000","802A5ABA 0001","50000E02 0000","812A5A00 03E7"],"options":null},"Single-Player (All Levels)\\Have Infinite Health (All Levels)":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels and does what it says on the tin. Infinite health for player 1, All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["80247463 0064","8026EC5B 0064","802A59FD 0064"],"options":null}},"A292524F-3D6C2A49-C:45":{"Away Team\\Score":{"note":"","data":["8129195C ????"],"options":{"0 Points":"5008","00 Points":"C802","50 Points":"FA02","o Points":"0000"}},"Away Team\\Time Outs":{"note":"","data":["80291958 00??"],"options":{"Infinite":"07","None":"00"}},"Create A Player Codes\\Max 3 Point":{"note":"","data":["802C5EFC 0063"],"options":null},"Create A Player Codes\\Max Capaility":{"note":"","data":["802C5F02 0063"],"options":null},"Create A Player Codes\\Max Defensive":{"note":"","data":["802C5EFF 0063"],"options":null},"Create A Player Codes\\Max Free Throw":{"note":"","data":["802C5EFD 0063"],"options":null},"Create A Player Codes\\Max Offensive":{"note":"","data":["802C5EFE 0063"],"options":null},"Create A Player Codes\\Max Rebound":{"note":"","data":["802C5F00 0063"],"options":null},"Create A Player Codes\\Max Shooting":{"note":"","data":["802C5EFB 0063"],"options":null},"Create A Player Codes\\Max Techinque":{"note":"","data":["802C5F01 0063"],"options":null},"Home Team\\Score":{"note":"","data":["81290378 ????"],"options":{"0 Points":"5008","00 Points":"C802","50 Points":"FA02","o Points":"0000"}},"Home Team\\Time Outs Home":{"note":"","data":["80290374 00??"],"options":{"Infinite":"07","None":"00"}},"No Shot Clock":{"note":"","data":["812010C4 43FF"],"options":null}},"A2C54BE7-6719CBB2-C:50":{"Enable All Characters":{"note":"","data":["D02E4062 0000","802E4063 0004"],"options":null},"Have Max\\Powerups":{"note":"","data":["801CC2F3 0002"],"options":null},"Have Max\\Weapon Power-Up":{"note":"","data":["801CC2F7 0002"],"options":null},"Infinite\\Bullets":{"note":"For Henry","data":["801D5273 0006"],"options":null},"Infinite\\Gold":{"note":"","data":["811CC012 2710"],"options":null},"Infinite\\Health":{"note":"","data":["811CC00A 2710"],"options":null},"Infinite\\Health Young Henry":{"note":"","data":["D1191616 0010","8136E180 2800"],"options":null},"Infinite\\Items\\Crest Half A":{"note":"","data":["801CC02B 000A"],"options":null},"Infinite\\Items\\Crest Half B":{"note":"","data":["801CC02C 000A"],"options":null},"Infinite\\Items\\Cure Ampoule":{"note":"","data":["801CC01E 000A"],"options":null},"Infinite\\Items\\Healing Kit":{"note":"","data":["801CC01C 000A"],"options":null},"Infinite\\Items\\Magical Nitro":{"note":"","data":["801CC025 000A"],"options":null},"Infinite\\Items\\Mandragora":{"note":"","data":["801CC026 000A"],"options":null},"Infinite\\Items\\Moon Card":{"note":"","data":["801CC028 000A"],"options":null},"Infinite\\Items\\Oldrey's Diary":{"note":"","data":["801CC02A 000A"],"options":null},"Infinite\\Items\\Powerup":{"note":"","data":["801CC01F 000A"],"options":null},"Infinite\\Items\\Purifying":{"note":"","data":["801CC01D 000A"],"options":null},"Infinite\\Items\\Red Jewels":{"note":"","data":["801CC014 0068"],"options":null},"Infinite\\Items\\Roast Beef":{"note":"","data":["801CC01B 000A"],"options":null},"Infinite\\Items\\Roast Chicken":{"note":"","data":["801CC01A 000A"],"options":null},"Infinite\\Items\\Rose Brooch":{"note":"","data":["801CC02D 000A"],"options":null},"Infinite\\Items\\Sun Card":{"note":"","data":["801CC027 000A"],"options":null},"Infinite\\Items\\The Contract":{"note":"","data":["801CC024 000A"],"options":null},"Infinite\\Items\\Throwing Weapons":{"note":"","data":["801CC015 0064"],"options":null},"Infinite\\Items\\Winch Lever":{"note":"","data":["801CC029 000A"],"options":null},"Infinite\\Keys\\Archives":{"note":"","data":["801CC02E 000A"],"options":null},"Infinite\\Keys\\Art Tower 1":{"note":"","data":["801CC03A 000A"],"options":null},"Infinite\\Keys\\Art Tower 2":{"note":"","data":["801CC03B 000A"],"options":null},"Infinite\\Keys\\Chamber":{"note":"","data":["801CC033 000A"],"options":null},"Infinite\\Keys\\Clocktower A":{"note":"","data":["801CC03F 000A"],"options":null},"Infinite\\Keys\\Clocktower B":{"note":"","data":["801CC040 000A"],"options":null},"Infinite\\Keys\\Clocktower C":{"note":"","data":["801CC038 000A"],"options":null},"Infinite\\Keys\\Clocktower D":{"note":"","data":["801CC039 000A"],"options":null},"Infinite\\Keys\\Clocktower E":{"note":"","data":["801CC03E 000A"],"options":null},"Infinite\\Keys\\Control Room":{"note":"","data":["801CC03C 000A"],"options":null},"Infinite\\Keys\\Copper":{"note":"","data":["801CC032 000A"],"options":null},"Infinite\\Keys\\Deck":{"note":"","data":["801CC035 000A"],"options":null},"Infinite\\Keys\\Execution":{"note":"","data":["801CC034 000A"],"options":null},"Infinite\\Keys\\Garden":{"note":"","data":["801CC031 000A"],"options":null},"Infinite\\Keys\\Left Tower":{"note":"","data":["801CC02F 000A"],"options":null},"Infinite\\Keys\\Rose Garden":{"note":"","data":["801CC01A 000A"],"options":null},"Infinite\\Keys\\Storeroom":{"note":"","data":["801CC030 000A"],"options":null},"Infinite\\Keys\\Thorn":{"note":"","data":["801CC037 000A"],"options":null},"Infinite\\Keys\\Wall":{"note":"","data":["801CC03D 000A"],"options":null},"Infinite\\Specials\\Special 1":{"note":"","data":["801CC017 000A"],"options":null},"Infinite\\Specials\\Special 2":{"note":"","data":["801CC018 000A"],"options":null},"Infinite\\Specials\\Special 3":{"note":"","data":["801CC019 000A"],"options":null},"Rapid Fire Gun (Henry-Hold B)":{"note":"For Henry, Hold B","data":["811C9CC6 0040","801D5273 0006"],"options":null},"Selection Options\\Cut Scene Select":{"note":"With this code, you must use the appropiate level mod before you attemp to run these cut scenes. Not doing so will ruin the cut scene as the graphics will be glitched.","data":["801CC363 0009","801CC35B 00??"],"options":{"\"I Smell Poison\" From Underground Waterway":"08","(?)":"22","Actrise Appears Again Before Fight With Carrie":"56","Actrise Appears Again With Cousin Fernandes Before Fight With Carrie":"54","Actrise Appears In Castle Center":"52","Actrise Defeated By Carrie":"57","Ada":"30","Bleeding Statue":"12","Bull Awakens":"17","Castel Destruction":"27","Castle Destruction":"29","Castle Drawbridge Closes And Ortega Appears":"46","Castle Drawbridge Lowers":"03","Castle Gate Closes In Villa Upon Entering Villa":"09","Castle Keep Destructs":"1E","Character Enters Castle":"04","Character In Boat On Foggy Lake":"10","Cornell And Henry Part In Garden":"49","Cornell Meets Henry In Garden":"48","Cosmic Lights":"13","Cousin Fernandes Is Destroyed":"55","Death Is Destroyed":"45","Death(Grim Reaper)":"44","Explosion At Wall In Arena":"14","Explosion At Wall In Castle That Leads To Hidden Room":"15","Finds Hidden Path In Villa Basement":"35","Gate Opens In Forest Of Silence":"1A","Harpie":"38","Harpie Destroyed":"39","Lever \u0026 Gear In Castle":"37","Malus And Reinhardt On Horse":"2B","Malus Appears Again In Upstairs Room Of Castle":"16","Malus Appears For The First Time":"0E","Malus Is Saved By Reinhardt":"2A","Malus Leaves Garden":"0F","Malus On Flying Horse Outside Castle Keep":"1F","Meet Renon For The Last Time In Castle Keep.":"1B","Monster Dracula Appears":"51","One Of The Working Gears Cut Scenes":"19","Renon Appears For First Time":"0B","Rosa In Garden":"25","Rosa Returns":"2E","Scrolling Text About Castle And Henry":"31","Seal Removed From Wall In Arena":"11","Space Warp":"28","Spider People In Tunnel":"24","Thirsty Man":"47","This Cut Scene Runs Cut Scene 27 And 2E":"1C","Vampire In Basement":"33","Vampire In Main Entrance Hall Of Villa":"06","Vampire In Villa Basement Destroyed":"34","Village Vampire In Upstairs Villa":"0D","Vincent The Vampire":"18"}},"Selection Options\\Day Select For Adult Henry":{"note":"","data":["801CBFEF 00??"],"options":{"0 Days":"07","1 Day":"06","2 Days":"05","3 Days":"04","4 Days":"03","5 Days":"02","6 Days":"01","7 Days":"00"}},"Selection Options\\Level Select\\Inter":{"note":"","data":["801CC34B 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Level Select\\Main":{"note":"","data":["801CC349 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Status Select":{"note":"","data":["801CC054 00??"],"options":{"Instant Death":"FF","Never Get Poisoned or Vamped":"00","Normal":"01","Poison":"08","Vamp":"04","Vamped \u0026 Poisoned":"0C"}},"Selection Options\\Weapon Select":{"note":"","data":["801CC00F 00??"],"options":{"Axe":"04","Cross":"03","Knife":"01","Nothing":"00","Potion":"02"}},"Selection Options\\[Press F9 For Wolfman Can Use Weapons]":{"note":"For Cornell","data":["881CC007 00??"],"options":{"No (Default)":"04","Yes":"02"}},"Stop Timer Input":{"note":"","data":["811CBFF2 0001"],"options":null}},"A2E8F35B-C9DC87D9-C:45":{"Fly Through 1st \u0026 Last Ring Only To Complete Challenge":{"note":"","data":["801442E9 0063"],"options":null},"Infinite Freezing Breath":{"note":"","data":["8122CDE8 42C8"],"options":null},"Infinite Health":{"note":"","data":["8122CDD4 42C8"],"options":null},"Infinite Laser Eye":{"note":"","data":["8122CDE4 42C8"],"options":null},"Infinite Running Boosts":{"note":"","data":["8122CDDC 42C8"],"options":null},"Infinite X-Ray Vision":{"note":"","data":["8122CDE0 42C8"],"options":null},"Widescreen":{"note":"","data":["810DE77C 3FE3","810DE77E 8E39","810DE780 401B","810DE782 26CB","810DE784 3F63","810DE786 8E39","810DE788 4063","810DE78A 8E39","810DE78C 3FE3","810DE78E 8E39","810DE790 3FE3","810DE792 8E39","810DE794 4063","810DE796 8E39","810DE798 3FE3","810DE79A 8E39","810B1C0E 3FE3","810B1C12 8E39","8107A940 241B","8107A942 0001","8107A944 A5DB","8107A946 A328","8107A948 240E","8107A94A 0001"],"options":null}},"A3A044B5-6DB1BF5E-C:0":{"Collect One Item For Portal":{"note":"","data":["802E4E47 00??"],"options":{"Level 1":"03","Level 2":"0E","Level 3":"0C","Level 4":"0D"}},"Freeze Timer":{"note":"","data":["802E4D5F 0000"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["802E4E4A 0027"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802E4EA2 0027"],"options":null},"Infinite Health\\Player 3":{"note":"","data":["802E4EFA 0027"],"options":null},"Infinite Health\\Player 4":{"note":"","data":["802E4F52 0027"],"options":null},"Paly As":{"note":"","data":["802E4E4C 00??"],"options":{"Blue Back Bee":"22","Blue Helic":"02","Blue Rocket":"12","Blue Stealth":"32","Green Back Bee":"21","Green Helic":"01","Green Rocket":"11","Green Stealth":"31","Red Back Bee":"20","Red Helic":"00","Red Rocket":"10","Red Stealth":"30","Yellow Back Bee":"23","Yellow Helic":"03","Yellow Rocket":"13","Yellow Stealth":"33"}}},"A3A044B5-6DB1BF5E-C:00":{"Collect One Item For Portal":{"note":"","data":["802E4E47 00??"],"options":{"Level 1":"03","Level 2":"0E","Level 3":"0C","Level 4":"0D"}},"Freeze Timer":{"note":"","data":["802E4D5F 0000"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["802E4E4A 0027"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802E4EA2 0027"],"options":null},"Infinite Health\\Player 3":{"note":"","data":["802E4EFA 0027"],"options":null},"Infinite Health\\Player 4":{"note":"","data":["802E4F52 0027"],"options":null},"Paly As":{"note":"","data":["802E4E4C 00??"],"options":{"Blue Back Bee":"22","Blue Helic":"02","Blue Rocket":"12","Blue Stealth":"32","Green Back Bee":"21","Green Helic":"01","Green Rocket":"11","Green Stealth":"31","Red Back Bee":"20","Red Helic":"00","Red Rocket":"10","Red Stealth":"30","Yellow Back Bee":"23","Yellow Helic":"03","Yellow Rocket":"13","Yellow Stealth":"33"}}},"A3F6876A-DB943BD5-C:4A":{"Infinite 9 Credits\\Player 1":{"note":"","data":["801D7B38 0009"],"options":null},"Infinite 9 Credits\\Player 2":{"note":"","data":["801D7B3C 0009"],"options":null},"Press Z Button for Max Gauge\\Player 1":{"note":"","data":["D00B1CE0 0020","811D2602 0098"],"options":null},"Press Z Button for Max Gauge\\Player 2":{"note":"","data":["D00B1CE6 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Max Score]":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null}},"A47D4AD4-8BFA81F9-C:45":{"Infinite Air":{"note":"","data":["8128FB74 FF00"],"options":null},"Infinite Max Lives":{"note":"","data":["80290E5F 000A"],"options":null}},"A47D4AD4-F5B0C6CB-C:45":{"Infinite Air":{"note":"","data":["8128FB74 FF00"],"options":null},"Infinite Max Lives":{"note":"","data":["80290E5F 000A"],"options":null}},"A4A52B58-23759841-C:45":{"Access Demitron Character":{"note":"","data":["80049DF4 0001"],"options":null},"Access Sonork Character":{"note":"","data":["80049DF0 0001"],"options":null},"Infinite Health\\All Levels\\Player 1":{"note":"","data":["81028988 0800","8102898A 0018","81000060 3C1B","81000062 8008","81000064 8F7B","81000066 0228","8100006C 03E0","8100006E 0008","81000070 A761","81000072 0070"],"options":null},"Music Modifier":{"note":"","data":["800816B2 00??"],"options":{"Music Off":"00","Volume Low":"2A","Volume Max":"7F","Volume Medium":"55"}},"Press GS For 2 Rounds Won\\Player 1":{"note":"","data":["890B6330 0002"],"options":null},"Press GS For 2 Rounds Won\\Player 2":{"note":"","data":["890B6342 0002"],"options":null}},"A4BF9306-BF0CDFD1-C:45":{"16:9 Widescreen":{"note":"For 16:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81277A0C 4334","81277A10 4334","81275D24 3FE6"],"options":null},"21:9 Widescreen":{"note":"For 21:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81277A0C 4334","81277A10 4334","81275D24 4019"],"options":null},"Access All Moves":{"note":"","data":["8037C3A0 0001","8037C3A1 007F","8037C3A2 00FF","8037C3A3 00FF"],"options":null},"Better Special Fix pt1":{"note":"","data":["D3371E60 0000","81326930 0811","D3371E60 0000","81326932 DA00","D3371E60 0000","81326934 0000","D3371E60 0000","81326936 0000","81476800 8459","81476802 0002","81476804 2413","81476806 0367","81476808 1279","8147680A 0056","8147680C 2413","8147680E 03BF","81476810 1279","81476812 001E","81476814 2413","81476816 03C0","81476818 1279","8147681A 001F","8147681C 2413","8147681E 034F","81476820 1279","81476822 0017","81476824 2413","81476826 0006","81476828 1279","8147682A 001E","8147682C 2413","8147682E 0120","81476830 1279","81476832 001F","81476834 2413","81476836 0142","81476838 1279","8147683A 0023","8147683C 2413","8147683E 0123","81476840 1279","81476842 0026","81476844 2413","81476846 0350","81476848 1279","8147684A 002A","8147684C 2413","8147684E 0375","81476850 1279","81476852 002B","81476854 2413","81476856 034E","81476858 1279","8147685A 0042","8147685C 2413","8147685E 0118","81476860 1279","81476862 002A","81476864 2413","81476866 0143","81476868 1279","8147686A 002D","8147686C 2413","8147686E 0069","81476870 1279","81476872 0031","81476874 0000","81476876 0000","81476878 1000","8147687A 003D","8147687C 0000","8147687E 0000","81476880 3C19","81476882 0104","81476884 1000","81476886 0039","81476888 2739","8147688A 0602","8147688C 3C19","8147688E 0106","81476890 1000","81476892 0036","81476894 2739","81476896 0903","81476898 3C19","8147689A 0208","8147689C 1000","8147689E 0033","814768A0 2739","814768A2 0C04","814768A4 3C19","814768A6 0103","814768A8 1000","814768AA 0030","814768AC 2739","814768AE 0505","814768B0 8C59","814768B2 000C","814768B4 2413","814768B6 4100","814768B8 A733","814768BA FE2A","814768BC A733","814768BE 03D6","814768C0 1000","814768C2 002B","814768C4 0000","814768C6 0000","814768C8 8C59","814768CA 000C","814768CC 2413","814768CE 402C","814768D0 A733","814768D2 00BE","814768D4 1000","814768D6 0026","814768D8 0000","814768DA 0000","814768DC 8C59","814768DE 000C","814768E0 2413","814768E2 42B4","814768E4 A733","814768E6 013E","814768E8 A733","814768EA 029E","814768EC 1000","814768EE 0020","814768F0 0000","814768F2 0000","814768F4 3C19","814768F6 0105","814768F8 1000","814768FA 001C","814768FC 2739","814768FE 0604","81476900 3C19","81476902 0107","81476904 1000","81476906 0019","81476908 2739","8147690A 0903","8147690C 8C59","8147690E 000C","81476910 2413","81476912 0018"],"options":null},"Better Special Fix pt2":{"note":"","data":["81476914 A733","81476916 036A","81476918 1000","8147691A 0015","8147691C 0000","8147691E 0000","81476920 2413","81476922 3FD0","81476924 A453","81476926 0480","81476928 2413","8147692A 3FC9","8147692C A453","8147692E 0488","81476930 1000","81476932 000F","81476934 0000","81476936 0000","81476938 8C59","8147693A 000C","8147693C 3C13","8147693E 0812","81476940 2673","81476942 DA80","81476944 AF33","81476946 00AC","81476948 AF20","8147694A 00B0","8147694C 2413","8147694E C120","81476950 A733","81476952 023A","81476954 2413","81476956 447A","81476958 A733","8147695A 0272","8147695C 1000","8147695E 0004","81476960 0000","81476962 0000","81476964 3C19","81476966 0105","81476968 2739","8147696A 0704","8147696C AE19","8147696E 0084","81476970 8E59","81476972 0000","81476974 8E13","81476976 0014","81476978 080C","8147697A 9A4E","8147697C 0000","8147697E 0000","81476A00 8D08","81476A02 0000","81476A04 0008","81476A06 4602","81476A08 2401","81476A0A 0080","81476A0C 5428","81476A0E 0009","81476A10 8FA2","81476A12 0044","81476A14 8FA8","81476A16 004C","81476A18 8D09","81476A1A 0000","81476A1C 8D22","81476A1E 0014","81476A20 8E01","81476A22 0018","81476A24 8C21","81476A26 002C","81476A28 2421","81476A2A 00B4","81476A2C 0020","81476A2E 0008","81476A30 0000","81476A32 0000","81476A34 8FA8","81476A36 004C","81476A38 8E01","81476A3A 0018","81476A3C 8C21","81476A3E 002C","81476A40 2421","81476A42 00C4","81476A44 0020","81476A46 0008","81476A48 0000","81476A4A 0000"],"options":null},"Character Select":{"note":"When Mumbo transforms you hold:C-Up for the Termite,C-Right for the Pumpkin,C-Down for the Walrus,C-Left for the Crocc,R for the Bumble Bee,L for the Washing Machine,Press nothing to turn into Banjo","data":["D0281251 0008","8037C2D3 0002","D0281251 0001","8037C2D3 0003","D0281251 0004","8037C2D3 0004","D0281251 0002","8037C2D3 0005","D0281251 0010","8037C2D3 0006","D0281251 0020","8037C2D3 0007"],"options":null},"Concert Timer Fix":{"note":"","data":["D3371E60 0000","81307D68 0811","D3371E60 0000","81307D6A DAB1","D3371E60 0000","81307D6C 0000","D3371E60 0000","81307D6E 0000","81476AC4 3C01","81476AC6 8038","81476AC8 8021","81476ACA 35D7","81476ACC 240A","81476ACE 001E","81476AD0 1541","81476AD2 0011","81476AD4 0000","81476AD6 0000","81476AD8 3C01","81476ADA 8038","81476ADC 8421","81476ADE E8F0","81476AE0 240A","81476AE2 426A","81476AE4 002A","81476AE6 082A","81476AE8 1420","81476AEA 000B","81476AEC 0000","81476AEE 0000","81476AF0 3C01","81476AF2 8038","81476AF4 8421","81476AF6 E8F0","81476AF8 240A","81476AFA 428A","81476AFC 002A","81476AFE 082A","81476B00 1020","81476B02 0005","81476B04 0000","81476B06 0000","81476B08 0062","81476B0A 5023","81476B0C 2401","81476B0E 0000","81476B10 1000","81476B12 0003","81476B14 0000","81476B16 0000","81476B18 0062","81476B1A 5023","81476B1C 0144","81476B1E 082A","81476B20 080C","81476B22 1F5C","81476B24 0000","81476B26 0000"],"options":null},"Do Shock Spring Jump From Anywhere":{"note":"Press A Button. Do not use with Take Off And Fly From Anywhere","data":["8037C1D2 0002"],"options":null},"Dynamic Sixty Frames":{"note":"","data":["D3371E60 0000","81246F6C 0C11","D3371E60 0000","81246F6E DA93","81476A4C 3C0F","81476A4E 8027","81476A50 8DEF","81476A52 6E40","81476A54 55E0","81476A56 0008","81476A58 0000","81476A5A 0000","81476A5C 3C0F","81476A5E 8038","81476A60 8DEF","81476A62 E8E4","81476A64 240E","81476A66 0008","81476A68 11CF","81476A6A 0003","81476A6C 240E","81476A6E 0009","81476A70 55CF","81476A72 0005","81476A74 3C0E","81476A76 8038","81476A78 3C0F","81476A7A 8038","81476A7C 8DEF","81476A7E 4484","81476A80 1000","81476A82 000C","81476A84 0000","81476A86 0000","81476A88 3C0E","81476A8A 8028","81476A8C 85CE","81476A8E 1BD8","81476A90 240F","81476A92 0090","81476A94 51CF","81476A96 0007","81476A98 240F","81476A9A 0002","81476A9C 3C0E","81476A9E 8038","81476AA0 85CE","81476AA2 35D6","81476AA4 240F","81476AA6 0007","81476AA8 51CF","81476AAA 0002","81476AAC 240F","81476AAE 0001","81476AB0 240F","81476AB2 0001","81476AB4 3C0E","81476AB6 8028","81476AB8 A1CF","81476ABA 08DF","81476ABC 0809","81476ABE 9630","81476AC0 0000","81476AC2 0000"],"options":null},"Egg Gravity Fix":{"note":"","data":["D3371E60 0000","81353C16 C72B"],"options":null},"Game 100% Complete":{"note":"","data":["8137C3A0 001F","50000302 0000","8137C3A2 FFFF","50000602 0000","813832C0 FFFF","81383FCA 0064","81383FDC 0064","50000802 0000","813832F0 FFFF","81385FA0 0063","81385FC4 0063","81385FF0 0064","50000602 0000","81385FF2 6464","50001002 0000","813831A8 FFFF","813831B0 FF7F","813831B2 FFB0","813831B4 3DA6","813831B6 F264","813831C6 FF7F"],"options":null},"Global Fix":{"note":"","data":["D3371E60 0000","812C685A 4110","D3371E60 0000","812C689A 4170","D3371E60 0000","81376230 3F43","D3371E60 0000","812CB042 3F40","D3371E60 0000","812CBE32 3C75","D3371E60 0000","812CBF7E 40C0","D3371E60 0000","812CC05E 4060","D3371E60 0000","812D128E 4000","D3371E60 0000","812D12DA 4009","D3371E60 0000","812E0CD2 4020","D3371E60 0000","812E1496 4019","D3371E60 0000","812E2A36 4220","D3371E60 0000","812E2A46 C220","D3371E60 0000","81343984 1000","D3371E60 0000","8135ADBA 4110","D3371E60 0000","81379788 3FB1","D3371E60 0000","8135B796 4008","D3371E60 0000","8135DE52 40A8","D3371E60 0000","8135EBC6 414C","D3371E60 0000","8135E042 4100","D3371E60 0000","8135E096 4020","D3371E60 0000","81379900 40DB","D3371E60 0000","8135EE9E 40A8","D3371E60 0000","8135F45A 4022","D3371E60 0000","8135F9DA 4020","D3371E60 0000","8135FA2A 4020","D3371E60 0000","813799D0 3F9C"],"options":null},"Gravity Fix":{"note":"","data":["D3371E60 0000","8132C5BC 3C04","D3371E60 0000","8132C5BE C155","D3371E60 0000","8132C5C0 4484","D3371E60 0000","8132C5C2 4000","D3371E60 0000","8132C5C4 0000","D3371E60 0000","8132C5C6 0000"],"options":null},"HD Bear":{"note":"","data":["D3371E60 0000","812986B2 034E","D3371E60 0000","812986BA 034E","D3371E60 0000","81338BA4 4480","D3371E60 0000","81338BA6 0000","D3371E60 0000","81338BB6 803E"],"options":null},"Have Zero Time all Levels":{"note":"","data":["50000B04 0000","81386004 3000"],"options":null},"Infinite\\Air":{"note":"","data":["81385F8E 0E10"],"options":null},"Infinite\\Always Have All Jinjos":{"note":"","data":["80385F7B 00FF"],"options":null},"Infinite\\Eggs":{"note":"","data":["80385F67 00FF"],"options":null},"Infinite\\Gold Feathers":{"note":"","data":["80385F73 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["80385F83 0008","80385F87 0008"],"options":null},"Infinite\\Jiggies":{"note":"","data":["80385FCB 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["80385F8B 00FF"],"options":null},"Infinite\\Mumbo Tokens":{"note":"","data":["80385FC6 00FF","80385FA2 00FF"],"options":null},"Infinite\\Notes":{"note":"Just collect one Note to Have 255 Notes in all Worlds.","data":["80385FF2 00FF","80385F62 0001"],"options":null},"Infinite\\Red Feathers":{"note":"","data":["80385F6F 00FF"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0281251 0020","8137C4BC 43E0"],"options":null},"Secret Items":{"note":"","data":["81283400 ????"],"options":{"Have All Collected":"FFFF","Have None":"0000"}},"Swim Fix":{"note":"","data":["D3371E60 0000","812A788A 40A0","D3371E60 0000","812A78D2 4425","81375654 4049","81375658 3FC6","8137565C 40B3"],"options":null},"Take Off And Fly From Anywhere":{"note":"Press A Button. Do not use with Do Shock Spring Jump From Anywhere","data":["8037C1D1 0002"],"options":null}},"A4F2F521-F0EB168E-C:4A":{"Access All Levels":{"note":"","data":["80200B66 00FF"],"options":null},"Extended Tongue":{"note":"","data":["8132790E FFFF"],"options":null},"Have 99 Carrots":{"note":"With all Carrots collected. You will be allowed into mini-games and secret areas","data":["80200B2F 0063"],"options":null},"Have 99 Crowns":{"note":"","data":["8024790B 0063"],"options":null},"Have All Levels Completed":{"note":"","data":["80200B6A 0019","80200B6B 0019","80200B6C 0015","80200B6D 0018","80200B6E 0017","80200B6F 0017"],"options":null},"Infinite Health":{"note":"","data":["80168E73 000A"],"options":null},"Level Select":{"note":"When you press Pause in-game and Stage Quit yo will go to the Stage Screen this cheat lets you choose what Stage you would like to go to but make sure you turn the cheat off and press A to continue to that stage.","data":["8029BF7B 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06"}}},"A5533106-B9F25E5B-C:4A":{"Enable All Characters":{"note":"","data":["D02E4082 0000","802E4083 0004"],"options":null},"Hard Mode Selected In A New Game":{"note":"With this code, you will not see the hard level status until you save and restart the game file. No special items are required to access this feature with this code turned on.","data":["8032630F 0002"],"options":null},"Have Max\\Powerups":{"note":"","data":["801CC7D3 0002"],"options":null},"Have Max\\Weapon Power-Up":{"note":"","data":["801CC7D7 0002"],"options":null},"Infinite\\Bullets":{"note":"For Henry","data":["801D5753 0006"],"options":null},"Infinite\\Gold":{"note":"","data":["811CC4F2 2710"],"options":null},"Infinite\\Health":{"note":"","data":["811CC4EA 2710"],"options":null},"Infinite\\Health Young Henry":{"note":"","data":["D11CA1A6 0010","813A6D10 2800"],"options":null},"Infinite\\Items\\Crest Half A":{"note":"","data":["801CC50B 000A"],"options":null},"Infinite\\Items\\Crest Half B":{"note":"","data":["801CC50C 000A"],"options":null},"Infinite\\Items\\Cure Ampoule":{"note":"","data":["801CC4FE 000A"],"options":null},"Infinite\\Items\\Healing Kit":{"note":"","data":["801CC4FC 000A"],"options":null},"Infinite\\Items\\Magical Nitro":{"note":"","data":["801CC505 000A"],"options":null},"Infinite\\Items\\Mandragora":{"note":"","data":["801CC506 000A"],"options":null},"Infinite\\Items\\Moon Card":{"note":"","data":["801CC508 000A"],"options":null},"Infinite\\Items\\Oldrey's Diary":{"note":"","data":["801CC50A 000A"],"options":null},"Infinite\\Items\\Powerup":{"note":"","data":["801CC4FF 000A"],"options":null},"Infinite\\Items\\Purifying":{"note":"","data":["801CC4FD 000A"],"options":null},"Infinite\\Items\\Red Jewels on Pick-Up":{"note":"","data":["801CC4F5 0068"],"options":null},"Infinite\\Items\\Roast Beef":{"note":"","data":["801CC4FB 000A"],"options":null},"Infinite\\Items\\Roast Chicken":{"note":"","data":["801CC4FA 000A"],"options":null},"Infinite\\Items\\Rose Brooch":{"note":"","data":["801CC50D 000A"],"options":null},"Infinite\\Items\\Sun Card":{"note":"","data":["801CC507 000A"],"options":null},"Infinite\\Items\\The Contract":{"note":"","data":["801CC504 000A"],"options":null},"Infinite\\Items\\Throwing Weapons":{"note":"","data":["801CC4F5 0064"],"options":null},"Infinite\\Items\\Winch Lever":{"note":"","data":["801CC509 000A"],"options":null},"Infinite\\Keys\\Archives":{"note":"","data":["801CC50E 000A"],"options":null},"Infinite\\Keys\\Art Tower 1":{"note":"","data":["801CC51A 000A"],"options":null},"Infinite\\Keys\\Art Tower 2":{"note":"","data":["801CC51B 000A"],"options":null},"Infinite\\Keys\\Chamber":{"note":"","data":["801CC513 000A"],"options":null},"Infinite\\Keys\\Clocktower A":{"note":"","data":["801CC51F 000A"],"options":null},"Infinite\\Keys\\Clocktower B":{"note":"","data":["801CC520 000A"],"options":null},"Infinite\\Keys\\Clocktower C":{"note":"","data":["801CC518 000A"],"options":null},"Infinite\\Keys\\Clocktower D":{"note":"","data":["801CC519 000A"],"options":null},"Infinite\\Keys\\Clocktower E":{"note":"","data":["801CC51E 000A"],"options":null},"Infinite\\Keys\\Control Room":{"note":"","data":["801CC51C 000A"],"options":null},"Infinite\\Keys\\Copper":{"note":"","data":["801CC512 000A"],"options":null},"Infinite\\Keys\\Deck":{"note":"","data":["801CC515 000A"],"options":null},"Infinite\\Keys\\Execution":{"note":"","data":["801CC514 000A"],"options":null},"Infinite\\Keys\\Garden":{"note":"","data":["801CC511 000A"],"options":null},"Infinite\\Keys\\Left Tower":{"note":"","data":["801CC50F 000A"],"options":null},"Infinite\\Keys\\Rose Garden":{"note":"","data":["801CC516 000A"],"options":null},"Infinite\\Keys\\Storeroom":{"note":"","data":["801CC510 000A"],"options":null},"Infinite\\Keys\\Thorn":{"note":"","data":["801CC517 000A"],"options":null},"Infinite\\Keys\\Wall":{"note":"","data":["801CC51D 000A"],"options":null},"Infinite\\Specials\\Special 1":{"note":"","data":["801CC4F7 000A"],"options":null},"Infinite\\Specials\\Special 2":{"note":"","data":["801CC4F8 000A"],"options":null},"Infinite\\Specials\\Special 3":{"note":"","data":["801CC4F9 000A"],"options":null},"Rapid Fire Gun (Henry-Hold B)":{"note":"For Henry, Hold B","data":["811CA1A6 0040","801D5753 0006"],"options":null},"Selection Options\\Cut Scene Select":{"note":"With this code, you must use the appropiate level mod before you attemp to run these cut scenes. Not doing so will ruin the cut scene as the graphics will be glitched.","data":["801CC843 0009","801CC83B 00??"],"options":{"\"I Smell Poison\" From Underground Waterway":"08","(?)":"22","Actrise Appears Again Before Fight With Carrie":"56","Actrise Appears Again With Cousin Fernandes Before Fight With Carrie":"54","Actrise Appears In Castle Center":"52","Actrise Defeated By Carrie":"57","Ada":"30","Bleeding Statue":"12","Bull Awakens":"17","Castel Destruction":"27","Castle Destruction":"29","Castle Drawbridge Closes And Ortega Appears":"46","Castle Drawbridge Lowers":"03","Castle Gate Closes In Villa Upon Entering Villa":"09","Castle Keep Destructs":"1E","Character Enters Castle":"04","Character In Boat On Foggy Lake":"10","Cornell And Henry Part In Garden":"49","Cornell Meets Henry In Garden":"48","Cosmic Lights":"13","Cousin Fernandes Is Destroyed":"55","Death Is Destroyed":"45","Death(Grim Reaper)":"44","Explosion At Wall In Arena":"14","Explosion At Wall In Castle That Leads To Hidden Room":"15","Finds Hidden Path In Villa Basement":"35","Gate Opens In Forest Of Silence":"1A","Harpie":"38","Harpie Destroyed":"39","Lever \u0026 Gear In Castle":"37","Malus And Reinhardt On Horse":"2B","Malus Appears Again In Upstairs Room Of Castle":"16","Malus Appears For The First Time":"0E","Malus Is Saved By Reinhardt":"2A","Malus Leaves Garden":"0F","Malus On Flying Horse Outside Castle Keep":"1F","Meet Renon For The Last Time In Castle Keep.":"1B","Monster Dracula Appears":"51","One Of The Working Gears Cut Scenes":"19","Renon Appears For First Time":"0B","Rosa In Garden":"25","Rosa Returns":"2E","Scrolling Text About Castle And Henry":"31","Seal Removed From Wall In Arena":"11","Space Warp":"28","Spider People In Tunnel":"24","Thirsty Man":"47","This Cut Scene Runs Cut Scene 27 And 2E":"1C","Vampire In Basement":"33","Vampire In Main Entrance Hall Of Villa":"06","Vampire In Villa Basement Destroyed":"34","Village Vampire In Upstairs Villa":"0D","Vincent The Vampire":"18"}},"Selection Options\\Day Select For Adult Henry":{"note":"","data":["801CC4CF 00??"],"options":{"0 Days":"07","1 Day":"06","2 Days":"05","3 Days":"04","4 Days":"03","5 Days":"02","6 Days":"01","7 Days":"00"}},"Selection Options\\Level Select\\Inter":{"note":"","data":["801CC82B 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Level Select\\Main":{"note":"","data":["801CC829 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Status Select":{"note":"","data":["801CC534 00??"],"options":{"Instant Death":"FF","Never Get Poisoned or Vamped":"00","Normal":"01","Poison":"08","Vamp":"04","Vamped \u0026 Poisoned":"0C"}},"Selection Options\\Weapon Select":{"note":"","data":["801CC4EF 00??"],"options":{"Axe":"04","Cross":"03","Knife":"01","Nothing":"00","Potion":"02"}},"Selection Options\\[Press F9 For Wolfman Can Use Weapons]":{"note":"For Cornell","data":["881CC4E7 00??"],"options":{"No (Default)":"04","Yes":"02"}},"Stop Timer Input":{"note":"","data":["811CC4D2 0001"],"options":null}},"A60ED171-3D85D06E-C:45":{"Have All Characters In Viewer":{"note":"","data":["810ECD80 FFFF","810ECD82 FFFF"],"options":null},"Infinite\\Health":{"note":"","data":["800F5F26 0001"],"options":null},"Infinite\\Webbing":{"note":"","data":["800F5F53 0001"],"options":null},"Unlocked\\All Costumes":{"note":"","data":["810ECD7E FFFF"],"options":null},"Unlocked\\All Levels":{"note":"","data":["810ECD74 0105","810ECDB0 FFFF"],"options":null}},"A62230C3-F0834488-C:45":{"Infinite Time":{"note":"","data":["D0226724 0000","81226724 003C"],"options":null},"Lagfix":{"note":"fixes horrendous load-times,still 30fps","data":["8002E692 000D"],"options":null},"Only Play One Round":{"note":"","data":["D0226791 0000","81226718 0001"],"options":null},"Player 1\\1 Win To Win":{"note":"","data":["D0226715 0000","80226715 0001"],"options":null},"Player 1\\Infinite Energy":{"note":"","data":["D022671C 0000","8122671C 00FA"],"options":null},"Player 1\\Infinite Time To Continue":{"note":"","data":["802267CB 0009","803CF2A1 0009"],"options":null},"Player 1\\Never Wins":{"note":"","data":["D0226715 0001","80226715 0000"],"options":null},"Player 1\\No Energy":{"note":"","data":["D022671C 0000","8122671C 0000"],"options":null},"Player 2\\1 Win To Win":{"note":"","data":["D0226717 0000","80226717 0001"],"options":null},"Player 2\\Infinite Energy":{"note":"","data":["D022671E 0000","8122671E 00FA"],"options":null},"Player 2\\Lifebar Flashes Red":{"note":"","data":["D022672E 0000","8122672E 00CF"],"options":null},"Player 2\\Never Wins":{"note":"","data":["D0226717 0001","80226717 0000"],"options":null},"Player 2\\No Energy":{"note":"","data":["D022671E 0000","8122671E 0000"],"options":null}},"A7941528-61F1199D-C:4A":{"All Gold Medals":{"note":"","data":["50000502 0000","81259130 0101"],"options":null},"Infinite\\Tools Options":{"note":"","data":["8025A624 00??"],"options":{"Fan":"04","Frying Pan":"01","Ghost":"02","Invisible":"06","Rat Face":"08","Rock":"07","Rocket":"05","Super Ghost":"03","Super Rat Face":"09","Wings":"0A"}},"Infinite\\Trick Game 300 Points":{"note":"","data":["8125A7F2 012C"],"options":null},"Infinite\\Weapons Options":{"note":"","data":["8025A622 00??","8025A623 0009"],"options":{"Bomb":"05","Freeze Shot":"03","Parachute":"02","Slap Stick":"01","Snowman":"04","Whirlwind":"06"}},"Max Coins":{"note":"","data":["8125A5BE 270F","8025A5BF 00C8"],"options":null},"Open Extra Characters \u0026 Snowboards":{"note":"Battle Mode Only","data":["8125916E 0101","80259170 0001","8025915C 0001","8125915E 0101","81259160 0101"],"options":null}},"A7D015F8-2289AA43-C:45":{"Have All Medals":{"note":"For Expert \u0026 Normal Modes","data":["50000802 0000","8116E6E0 7777"],"options":null},"Infinite\\Armor\\Falco":{"note":"","data":["8016D727 00FF"],"options":null},"Infinite\\Armor\\Peppy":{"note":"","data":["8016D72F 00FF"],"options":null},"Infinite\\Armor\\Slippy":{"note":"","data":["8016D72B 00FF"],"options":null},"Infinite\\Dual Blue Lasers":{"note":"","data":["8015791B 0002"],"options":null},"Infinite\\Energy":{"note":"","data":["8013AB27 00FF","80137C47 00FF"],"options":null},"Infinite\\Hyper Laser":{"note":"","data":["8015791B 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["80157911 0009"],"options":null},"Level Select":{"note":"","data":["D016E0A7 0000","8016E0A7 00??"],"options":{"Aquas":"0D","Area 6":"03","Bolse":"11","Corneria":"00","Corneria (Multi)":"14","Fortuna":"0E","Glitch":"04","Katina":"10","Macbeth":"0B","Meteo":"01","Sector X":"02","Sector Y":"05","Sector Z":"12","Solar":"07","Titania":"0C","Training Mode Level":"0A","Venom 1":"06","Venom 2":"09","Venom With Starwolf":"13","Zoness":"08"}},"Loads O' Hits":{"note":"","data":["8015790B 00FF"],"options":null},"Unlimited\\Boost":{"note":"","data":["81137C9C 0000","81137C9E 0000","8113AB7C 0000","8113AB7E 0000"],"options":null},"Unlimited\\Smart Bombs":{"note":"","data":["8016DC13 0004"],"options":null},"Widescreen":{"note":"","data":["810031A2 3FE3"],"options":null}},"A8275140-B9B056E8-C:4A":{"Have All\\Characters":{"note":"","data":["50000702 0000","801B361B 0001"],"options":null},"Have All\\Key Items":{"note":"","data":["50001602 0000","811B3714 0101"],"options":null},"Have All\\Normal Items":{"note":"","data":["50000902 0000","811B3700 6363"],"options":null},"Have All\\Weapons":{"note":"","data":["50000702 0000","811B3678 0101"],"options":null},"Infinite\\Air":{"note":"","data":["8121D4FA 04B0"],"options":null},"Infinite\\HP (All Characters)":{"note":"","data":["50000602 0000","801B361C 000A"],"options":null},"[Can Leave Town]":{"note":"Start a new game, and immediately leave town without talking to anyone.","data":["811B362A FFFF"],"options":null},"[Press L To Levitate":{"note":"Jump first, then hold L-Button while in mid-air.","data":["D0082915 0020","812456F4 418E","D0082915 0020","812456F6 38E2"],"options":null}},"A83E101A-E937B69D-C:45":{"Always Have\\BFG 9000":{"note":"","data":["800632DB 0001"],"options":null},"Always Have\\Bio Suite":{"note":"","data":["80063283 00??"],"options":{"Off":"00","On":"FF"}},"Always Have\\Chain Gun":{"note":"","data":["800632CF 0001"],"options":null},"Always Have\\Chainsaw":{"note":"","data":["800632BB 0001"],"options":null},"Always Have\\Double Shotgun":{"note":"","data":["800632CB 0001"],"options":null},"Always Have\\Gun":{"note":"","data":["800632C3 0001"],"options":null},"Always Have\\Have Rocket Launcher":{"note":"","data":["800632D1 0001"],"options":null},"Always Have\\Laser Weapon":{"note":"","data":["800632DD 0001"],"options":null},"Always Have\\Missile Launcher":{"note":"","data":["800632D3 0001"],"options":null},"Always Have\\Plasma Rifle":{"note":"","data":["800632D7 0001"],"options":null},"Always Have\\Shotgun":{"note":"","data":["800632C7 0001"],"options":null},"Berserk Mode":{"note":"","data":["8006327B 00FF"],"options":null},"Enable Cheat Menu":{"note":"","data":["8005A7D3 0001"],"options":null},"Have All\\Keys":{"note":"","data":["50000504 0000","8106328E FFFF"],"options":null},"Have All\\Secret Pentagram Items":{"note":"","data":["800632A7 0007"],"options":null},"Have All\\Weapons":{"note":"","data":["50000A04 0000","810632BA 0001"],"options":null},"Infinite\\Ammo All Weapons":{"note":"","data":["50000404 0000","810632E2 013C"],"options":null},"Infinite\\Armor":{"note":"","data":["8006326F 00FF"],"options":null},"Invincible":{"note":"","data":["8006330B 0002"],"options":null},"Invincible And Map Markers":{"note":"","data":["8006330B 0006"],"options":null},"Rapid Fire":{"note":"","data":["8106333A 0B94"],"options":null},"Turn Map Markers On":{"note":"","data":["8006330B 0004"],"options":null},"[Max Brightness]":{"note":"Enable this cheat on rom load to have Max Brightness (internal) and then put Jabo d3d8 on 160% Max for a extra brightness Boost.","data":["8005A7C8 0064"],"options":null}},"A92D52E5-1D26B655-C:45":{"1 Win to Win\\Player 1":{"note":"","data":["D020C27F 0000","8020C27F 0001"],"options":null},"1 Win to Win\\Player 2":{"note":"","data":["D020C27F 0000","8020C27F 0010"],"options":null},"Infinite\\Health\\Player 1":{"note":"","data":["8020B7B1 00C8"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["8020BC0D 00C8"],"options":null},"Infinite\\Money":{"note":"","data":["8121106C 2704"],"options":null},"Infinite\\Special\\Player 1":{"note":"","data":["8120AEB4 0190"],"options":null},"Infinite\\Special\\Player 2":{"note":"","data":["8120B1B0 0190"],"options":null}},"AA18B1A5-07DB6AEB-C:45":{"Have\\All Guns In Chest":{"note":"","data":["50000E04 0100","810E8EF4 05FF"],"options":null},"Have\\All Main Items In Chest":{"note":"If you want items that are not listed in the Chest, then just use the Have Item On Slot Select code to have what you desire.","data":["810E8F2C 17FF","810E8F30 1EFF","810E8F34 1FFF","810E8F38 23FF","50000404 0100","810E8F3C 25FF","810E8F4C 2AFF","810E8F50 2BFF","50000304 0100","810E8F54 2EFF","50000F04 0100","810E8F60 32FF","810E8F9C 43FF","50000504 0100","810E8FA0 47FF","50000404 0100","810E8FB4 53FF","50000C04 0100","810E8FC4 58FF"],"options":null},"Have\\Fine Condition Always":{"note":"","data":["810E13E4 0000"],"options":null},"Have\\Item On Slot Select\\Slot 01":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EC8 00??","800E8EC9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 02":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ECC 00??","800E8ECD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 03":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED0 00??","800E8ED1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 04":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED4 00??","800E8ED5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 05":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED8 00??","800E8ED9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 06":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EDC 00??","800E8EDD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 07":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE0 00??","800E8EE1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 08":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE4 00??","800E8EE5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 09":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE8 00??","800E8EE9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 10":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EEC 00??","800E8EED 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Infinite\\Health":{"note":"","data":["810E1322 00C8"],"options":null},"Infinite\\Time":{"note":"","data":["800E8CBF 0010"],"options":null},"Play As":{"note":"This allows you to select what character you wish to play as. Just slect on load and select as normal at the menu and when in game you will be the character of your choice","data":["810E1138 ????"],"options":{"Ada (can crash the game)":"0E80","Cheryl":"0F80","Claire Original":"0380","Claire as Biker":"0980","Claire without jacket":"0780","Claires body Leons outfit":"0B80","Hunk (can crash the game)":"0C80","Leon Original":"0280","Leon Wounded":"0680","Leon as Biker":"0A80","Leon as Stars":"0880","To Fu":"0D80"}},"Play Extra Mission":{"note":"This allows you to select what extra mission you wish to play. Just slect on load and carry on as normal at the menu and when in game you will be the character of your choice Do not use at the same time as [Resident Evil 2 Mode]","data":["810E10EE 00??"],"options":{"The 4th Survior":"48","To-Fu":"49"}},"Quick Chest Access":{"note":"With this code, all you have to do to access the chest, is hold L and Press Start.","data":["D1014FA4 1020","8012BFA8 0001"],"options":null},"Quick Save Access":{"note":"(1 Anytime, anywhere, press Z and B at the same time. You'll get the standard typewriter text: \"It's an old typewriter. You can save your progress with this.\" Note that you must, of course, have an ink ribbon to save. 2) Choose \"Yes\" and you'll be able to save normally. Instead of the location name, your save file will say \"Scenario 1st\" or \"Scenario 2nd.\" 3) When you load your save file, you'll have to skip through the intro, but when the game loads up you'll be exactly where you saved!","data":["D1014FA4 6000","810E8928 8007","D1014FA4 6000","810E892A 4110"],"options":null},"[Biohazard 2 Mode]":{"note":"Note: With this enabled the game will become Bio Hazard 2, the Japanese version of Resident Evil 2! This means all text (except the text in files) is in Japanese, and all cinemas have Japanese subtitles. Note that the title screen will still say Resident Evil 2 Do not use at the same time as Play Extra Mission","data":["D10E10EE 00??","810E10EE 0000"],"options":{"Off":"00","On":"40"}},"[Saves Always 0]":{"note":"No matter how many saves you do ithis makes the game think you Have\\not saved.","data":["810E8B50 0000"],"options":null}},"AA7B0658-9C96937B-C:50":{"Character Creation\\Max\\Aerial":{"note":"","data":["80326C35 0009"],"options":null},"Character Creation\\Max\\Brawling":{"note":"","data":["8032CB75 0009"],"options":null},"Character Creation\\Max\\Dirtiness":{"note":"","data":["8032EB35 0009"],"options":null},"Character Creation\\Max\\Impact":{"note":"","data":["80320375 0009"],"options":null},"Character Creation\\Max\\Mat Ability":{"note":"","data":["80328BF5 0009"],"options":null},"Character Creation\\Max\\Quickness":{"note":"","data":["80324C75 0009"],"options":null},"Character Creation\\Max\\Speed":{"note":"","data":["80322CB5 0009"],"options":null},"Character Creation\\Max\\Strength":{"note":"","data":["80308D35 0009"],"options":null},"Character Creation\\Max\\Submission":{"note":"","data":["8032ABB5 0009"],"options":null},"Enable Cheat":{"note":"","data":["800B6F5B 00??"],"options":{"All Wrestlers":"80","Momentum Meter":"08","Play As Same Wrestler":"20","Stamina Meter":"04","Super Created Wrestlers":"02"}},"Freeze Timer":{"note":"","data":["800B7E02 D300"],"options":null},"Infinite Stamina\\Player 1":{"note":"","data":["810E9798 0478"],"options":null},"Infinite Stamina\\Player 2":{"note":"","data":["810E9934 03ED"],"options":null},"Meter Select\\Player 1":{"note":"","data":["800E979D 00??"],"options":{"Empty Meter Bar":"00","Full Meter Bar":"60"}},"Meter Select\\Player 2":{"note":"","data":["800E993D 00??"],"options":{"Empty Meter Bar":"00","Full Meter Bar":"60"}}},"AB7C101D-EC58C8B0-C:50":{"Infinite Health\\Player One":{"note":"","data":["811507FA 6400"],"options":null},"Infinite Health\\Player Two":{"note":"","data":["81152E76 6400"],"options":null},"Infinite Jet Pack\\Player One":{"note":"","data":["81150802 3200"],"options":null},"Infinite Jet Pack\\Player Two":{"note":"","data":["81152E7E 3200"],"options":null},"Infinite Shields\\Player One":{"note":"","data":["811507FE 6400"],"options":null},"Infinite Shields\\Player Two":{"note":"","data":["81152E7A 6400"],"options":null},"Player 1 Easily Defeated\\Player Two":{"note":"","data":["811507FA 0100","811507FE 0100"],"options":null},"Player 2 Easily Defeated\\Player One":{"note":"","data":["81152E76 0100","81152E7A 0100"],"options":null},"Shields Always Active\\Player One":{"note":"","data":["8015080A 0022"],"options":null},"Shields Always Active\\Player Two":{"note":"","data":["80152E86 0022"],"options":null},"Smoke Trail\\Player One":{"note":"","data":["80150804 0001"],"options":null},"Smoke Trail\\Player Two":{"note":"","data":["80152E80 0001"],"options":null}},"ABA51D09-C668BAD9-C:58":{"Character Select":{"note":"","data":["801D535F 00??"],"options":{"Ruff (Boy) (Default)":"00","Tumble (Girl)":"01"}},"Enable Cheat Menu":{"note":"","data":["801D5355 0001"],"options":null},"Have All Levels Completed":{"note":"","data":["50000202 0000","81207D6C FFFF"],"options":null},"Have\\All 40 Winks Collected":{"note":"Combined with Have All Levels Completed cheat will open the door for Have All 40 Winks","data":["50000602 0000","81207D60 FFFF"],"options":null},"Have\\All Dreamkeys Collected":{"note":"","data":["50000802 0000","81207D70 FFFF"],"options":null},"Infinite\\40 Cogs":{"note":"Disable when on Boss Modes as it can cause hanging!","data":["811D2A82 0028"],"options":null},"Infinite\\50 Health ZZZ's":{"note":"","data":["811D2A84 0032"],"options":null},"Infinite\\99 Lives":{"note":"Disable when on Boss Modes as it can cause hanging!","data":["801D2A87 0063"],"options":null},"Infinite\\99 Moons":{"note":"","data":["801D2A81 0063"],"options":null},"Infinite\\99 Tokens":{"note":"Disable when on Boss Modes as it can cause hanging!","data":["801D2A8D 0063"],"options":null},"Infinite\\Max Air":{"note":"","data":["811D2AA0 07C6","811DA2F6 07C1"],"options":null},"Setting Options\\Controller Select":{"note":"","data":["801D5362 00??"],"options":{"Preset 1 (Normal)":"00","Preset 2":"01","Preset 3":"02"}},"Setting Options\\Difficulty Select":{"note":"","data":["801D534F 00??"],"options":{"Easy":"00","Hard":"02","Medium":"01"}},"Setting Options\\GFX Quality Select":{"note":"","data":["801D5354 00??"],"options":{"HighCol":"02","Medium":"01","Normal":"00"}},"Setting Options\\Langauge Select":{"note":"","data":["801D21AC 00??"],"options":{"English":"00","Italian":"02","Spanish":"01"}},"Setting Options\\Music Volume Select":{"note":"","data":["801D5351 00??"],"options":{"Max":"07","Normal":"05","Off":"00"}},"Setting Options\\Rumble Pak Strength Select":{"note":"","data":["801D5353 00??"],"options":{"Max":"07","Middle":"05","Off (Normal)":"00"}},"Setting Options\\SFX Volume Select":{"note":"","data":["801D5350 00??"],"options":{"Max":"07","Normal":"05","Off":"00"}},"test health":{"note":"","data":["801D2A85 0032"],"options":null}},"AC16400E-CF5D071A-C:45":{"Always Place 1st":{"note":"","data":["80151C01 0000"],"options":null},"Have All Cars":{"note":"","data":["50001504 0000","800AAE5B 0001"],"options":null},"Have All Tracks":{"note":"","data":["81168F8C FFFF"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D013435F 0010","8112BD0C 43CB"],"options":null}},"AC8E4B32-E7B47326-C:45":{"Infinite Lives":{"note":"","data":["8009B1AF 0009"],"options":null},"Level Select In Setup Menu":{"note":"","data":["81076FF6 6F8C"],"options":null},"Max Score":{"note":"","data":["8009B1AA 00FF"],"options":null}},"AC976B38-C3A9C97A-C:50":{"99 Total Houses":{"note":"","data":["8106A61A 0063"],"options":null},"Big Newspapers":{"note":"","data":["81268D5A 0001"],"options":null},"Infinite Newspapers":{"note":"","data":["81268D12 0001"],"options":null},"Invincibility":{"note":"","data":["81268D1A 0001"],"options":null},"Level Select":{"note":"Also accesses All Bonus Levels","data":["8006A6A7 0001"],"options":null},"Rocket Boosters":{"note":"","data":["81268D3E 0001"],"options":null},"Super Jump Springs":{"note":"","data":["81268D3A 0001"],"options":null},"Throw Newspapers Backwards":{"note":"","data":["81268D4A 0001"],"options":null},"Throw Newspapers Forwards":{"note":"","data":["81268D46 0001"],"options":null},"Turbo Mode":{"note":"","data":["81268D36 0001"],"options":null}},"AC9F7DA7-A8C029D8-C:45":{"Activate\\Auto Abort Disable":{"note":"","data":["800F4078 0001"],"options":null},"Activate\\Cones to Mines":{"note":"","data":["800F3F88 0001"],"options":null},"Activate\\Disable Car 2 Car Control":{"note":"","data":["800F4050 0001"],"options":null},"Activate\\Resurrect in Place":{"note":"","data":["800F4080 0001"],"options":null},"Activate\\Stop Timer":{"note":"","data":["800F4090 0001"],"options":null},"Activate\\Upside Down Mode":{"note":"","data":["800F4061 0001"],"options":null},"Always Place 1st":{"note":"","data":["80101339 0000"],"options":null},"Car":{"note":"","data":["D00F40A5 0020","800D9EC1 00??","800D9F64 00??","800DA078 00??","800DA321 00??"],"options":{"F1 Car":"0A","Hot Rod":"09","Taxi":"08"}},"Car Type":{"note":"It gets you from 0-150 in the the time it takes the F1 racer to. Don't use the F1 racer and only hold until you reach 150 or the game will freeze.","data":["800F40B1 00??"],"options":{"Fat Car":"02","Flat Car":"01","Giant Car":"03","Invisible Car":"0A","Invisible Car (Can See Wheels)":"CD","Normal Car":"00","Paper-Thin Cars":"66","Screen-Talled Cars":"6E","Super-Sky Car":"BB","Super-Sky Car #2":"DD","Super-Tiny Car":"FF","Super-Tiny Car #2":"44"}},"Edge Boost":{"note":"by pressing R you will get a small speed boost that pushes you ahead.","data":["D00F40A5 0010","81101331 FFFF"],"options":null},"Gravity":{"note":"","data":["800F3D91 00??"],"options":{"1 Weight":"02","2 Weights":"03","A Balloon \u0026 2 Weights":"00","Normal":"01"}},"Have Two Special Cars":{"note":"You receive the Hotrod and Taxi with this code, but you may have to go through the cars from the \"Beginning\" past the \"Extreme\" for them to appear.","data":["810CAC82 FFFF","810CAC98 FFFF","810CACAE FFFF","810CACC4 FFFF","810CACDA FFFF","810CACF0 FFFF"],"options":null},"Press F9 For Track Select":{"note":"With this code, press F9 when on the track selction screen and press A to select that track!","data":["88100050 00??"],"options":{"Track 1":"00","Track 2":"01","Track 3":"02","Track 4":"03","Track 5":"04","Track 6":"05","Track 7":"06"}}},"ADA815BE-6028622F-C:4A":{"Lower Left Character\\Coin Options":{"note":"","data":["800F2769 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D580A 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800F276D 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["800F2799 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D584E 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800F279D 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Mini Game\\Max 99 Coins":{"note":"","data":["800F2C0C 0063"],"options":null},"Mini Game\\Unlimited 99 lives":{"note":"","data":["800F2C03 0063"],"options":null},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["800F2709 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D5782 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800F270D 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["800F2739 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D57C6 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800F273D 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Widescreen":{"note":"","data":["8101D522 3FE3","8101DD1E 3FE3","D10F8046 3FAA","810F8046 3FE3","8104BB40 0801","8104BB42 7ADD","8104BB44 C602","8104BB46 0004","8105EB74 3C1B","8105EB76 3FAB","8105EB78 449B","8105EB7A 0000","8105EB7C 4600","8105EB7E 1082","8105EB80 8E06","8105EB82 0008","8105EB84 0801","8105EB86 2ED2","8105EB88 4405","8105EB8A 1000","81024C38 0801","81024C3A 7AE3","81024C3C C602","81024C3E 0024","8105EB8C 3C1B","8105EB8E 800D","8105EB90 8F7B","8105EB92 75CC","8105EB94 101B","8105EB96 0004","8105EB98 2400","8105EB9C 3C1B","8105EB9E 3FAB","8105EBA0 449B","8105EBA2 0000","8105EBA4 4600","8105EBA6 1082","8105EBA8 4405","8105EBAA 1000","8105EBAC 0800","8105EBAE 9310","8105EBB0 8E06","8105EBB2 0028"],"options":null}},"ADB9498B-DAF28F55-C:45":{"Level Select\\Proving Ground-Tightrope":{"note":"Do Not use this with Level Select The Pit-Starlight. Only use One Level Select Option At A Time","data":["8014BD9F 00??"],"options":{"Basic Training":"01","Bomb Shelter":"0B","Bottleneck":"10","Boxed Set":"06","Cathedral":"04","Crossroads":"02","Dire Straight":"07","Earth Temple":"0D","Fall Out":"05","Fire Temple":"0E","Grim Retreat":"03","Mystic":"0F","Prey":"08","Proving Grounds":"00","Tempered":"0C","Tightrope":"11","Warehouse":"09","Water Temple":"0A"}},"Level Select\\The Pit-Starlight":{"note":"Do Not use this with Level Select Proving Ground-Tightrope. Only use One Level Select Option At A Time","data":["8014BD9F 00??"],"options":{"Ampatheater":"16","Breakdown":"19","Bunker":"15","Courtyard":"22","Crypts":"18","Defcon 5":"1F","Fathom":"1D","Fire Walker":"17","Hopeless":"1B","Leap Of Faith":"13","Matrix":"1C","Retaliation":"1A","Spirit Temple":"20","Starlight":"23","Stronghold":"21","The Pedestal":"1E","The Pit":"12","Wicked Dance":"14"}},"Player 1\\Have All\\Medals":{"note":"","data":["810FCB4A FFFF","810FCB4C FFFF","810FCB4E FFFF","800FCB50 0003"],"options":null},"Player 1\\Have All\\Mini Game Icons":{"note":"","data":["800FCB17 0024"],"options":null},"Player 1\\Infinite Ammo":{"note":"","data":["80336535 0063","80336537 0063","80336539 0063","80692B95 0063","80692B97 0063","80692B99 0063","80692B9B 0063","80692B9D 0063","80692B9F 0063","80692BA1 0063"],"options":null},"Player 1\\Infinite\\Cerebral Bores":{"note":"","data":["8033653B 00FF"],"options":null},"Player 1\\Infinite\\Health":{"note":"","data":["81336526 6400","80692B86 0064"],"options":null},"Player 1\\Infinite\\Metal Claws":{"note":"","data":["80336541 00FF"],"options":null},"Player 1\\Infinite\\Proximity Mines":{"note":"","data":["8033653D 00FF"],"options":null},"Player 1\\Infinite\\Sentry Guns":{"note":"","data":["8033653F 00FF"],"options":null},"Player 1\\Infinite\\Time":{"note":"","data":["811407F4 47AF","811407F6 C4B1"],"options":null},"Player 1\\Play As":{"note":"","data":["80140358 00??"],"options":{"Adon":"05","Bastile":"0B","Blind One":"08","Death Guard":"0A","Drone":"02","Elite Guard":"07","Fireborn":"03","Juggernaut":"09","Lord Of The Dead":"06","Mantid":"01","Mites":"12","Monkey":"13","Pur-Lin":"0F","Raptor":"11","Soldier":"04","Symbiont":"10","Syra":"0C","Tail Set":"0E","Turok":"00"}},"Player 1\\Start With Weapon":{"note":"","data":["803366B0 00??"],"options":{"Assault Rifle":"05","Boomerang":"01","Cerebral Bore":"12","Chest Burster":"0F","Emaciator":"0D","Flaregun":"09","Freeze Gun":"08","Grenade Launcher":"0A","Inflator":"0E","Iron Claw":"14","Mag 60":"03","Mini Gun":"06","Mite Bite":"11","Napalm Gel":"0C","PFM Mine":"13","Plasma Rifle":"07","Raptor Claw":"10","Scorpion Launcher":"0B","Sentry Turret":"15","Shotgun":"04","Tek Crossbow":"02","Warhammer":"00"}}},"AE4992C9-9253B253-C:50":{"Access All Secret NASCAR Legends":{"note":"This will give you access to,Alan Kulwicki,Cale Yarborough,Bobby Allison,Davey Allison,Richard Petty,Benny Parsons","data":["50000602 0000","810DF400 0101"],"options":null},"Laps To Race":{"note":"","data":["81044B7E 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7Laps":"07","8 Laps":"08","9 Laps":"09"}}},"AE5B9465-C54D6576-C:50":{"Infinite Options\\Health Commando":{"note":"","data":["810B5364 0080"],"options":null},"Infinite Options\\Money GDI":{"note":"","data":["810C55B6 FFFF"],"options":null},"Infinite Options\\Money NOD":{"note":"","data":["810C575E FFFF"],"options":null},"Infinite Options\\Power GDI":{"note":"","data":["810C55D6 FFFF"],"options":null},"Infinite Options\\Power NOD":{"note":"","data":["810C577E FFFF"],"options":null},"Level Select":{"note":"Select Replay Mission, Press L To Display All Missions,And Press R To Select Your Team You can now press R+L+Up To Win A Battle","data":["810901AA 0001"],"options":null}},"AE82687A-9A3F388D-C:45":{"Always First Place":{"note":"","data":["810BA6DA 0000"],"options":null},"Sixty Frames":{"note":"Too fast.","data":["800B0147 0001"],"options":null}},"AE90DBEB-79B89123-C:50":{"Infinite Dinars":{"note":"","data":["800B6663 00E8","800B6662 00E8"],"options":null},"Infinite Health \u0026 Max Health":{"note":"","data":["810CFF5E 03E7","810CFF62 03E7"],"options":null},"Infinite Magic":{"note":"","data":["810B6BEA 0063","810B6BD2 0063","810B6C02 0063","810B6C1A 0063"],"options":null},"Press L to Levitate":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D017D8F5 0020","810CFFB4 44CB"],"options":null}},"AEBCDD54-15FF834A-C:50":{"Extra Bonuses":{"note":"","data":["810EB9EA 270F"],"options":null},"Fake Max Spin Bar?":{"note":"","data":["800EB9C3 0009"],"options":null},"Infinite\\Crate Attempts":{"note":"","data":["800A9C9B 0007"],"options":null},"Infinite\\Gold Pickups":{"note":"","data":["802EB9E8 0064"],"options":null},"Infinite\\Health":{"note":"","data":["800EB9C7 0009"],"options":null}},"AEBE463E-CC71464B-C:45":{"Always 1st":{"note":"","data":["8013FCE0 0001"],"options":null},"Freeze All Lap Timers":{"note":"","data":["8013FCA1 0001","8013FCA5 0001","8013FCA9 0001"],"options":null},"Freeze Overall Timer":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8013FC95 0001"],"options":null},"Laps Of Race":{"note":"","data":["8013FC8E 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","Never Ending Laps":"06"}},"Level Select":{"note":"","data":["8013FF9B 00??"],"options":{"Bikini Island":"01","Canyon Rush":"00","China Town":"02","China Town Jam":"04","Neo Arena":"03","Neo Speed Way":"05"}},"Music Modifier":{"note":"","data":["80109BDC 00??"],"options":{"Music Off":"00","Music On":"FF"}},"No Damage\\Player 1":{"note":"","data":["50000402 0000","8113FFD8 0000"],"options":null},"No Damage\\Player 2":{"note":"","data":["50000402 0000","81142078 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["8013FF95 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Play As\\Player 2":{"note":"","data":["8013FF96 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Unlock Hidden Tracks \u0026 Cars":{"note":"","data":["8008F29C 0001"],"options":null}},"AEEF2F45-F97E30F1-C:45":{"Low Time":{"note":"","data":["800BA390 0001"],"options":null},"Max Attack Power-Fighters Arena":{"note":"","data":["801FBF6E 00C7"],"options":null},"Max Health Power-Fighters Arena":{"note":"","data":["801FBF6F 00C7"],"options":null},"Max Recovery-Fighters Arena":{"note":"","data":["801FBF70 00C7"],"options":null},"P1 Always Lose Judging":{"note":"","data":["801F727A 0000"],"options":null},"P1 Always Win Judging":{"note":"","data":["801F727A 00FF"],"options":null},"P2 Always Lose Judging":{"note":"","data":["801F53AE 0000"],"options":null},"P2 Always Win Judging":{"note":"","data":["801F53AE 00FF"],"options":null}},"AF7C97CF-24755D18-C:00":{"Infinite 9 Credits":{"note":"","data":["80091A0B 0009"],"options":null}},"AF8679B6-5E1011BF-C:4A":{"Freeze Round Timer":{"note":"","data":["8009D4B4 0000"],"options":null},"Player 1\\Infinite Health":{"note":"","data":["81105026 03E8"],"options":null},"Player 1\\Max Tech Points":{"note":"","data":["811071A0 000F","811071A2 423F","811071A4 000F","811071A6 423F","811071A8 0000","811071AA 0000","811071AC 000F","811071AE 423F"],"options":null},"Player 2\\Infinite Health":{"note":"","data":["8111B3BE 03E8"],"options":null},"Player 2\\Max Tech Points":{"note":"","data":["8111D538 000F","8111D53A 423F","8111D53C 000F","8111D53E 423F","8111D540 0000","8111D542 0000","8111D544 000F","8111D546 423F"],"options":null},"{Unlock All Extras }":{"note":"","data":["8009D48F 00FF"],"options":null}},"B00903C9-3916C146-C:4A":{"Always 1st":{"note":"","data":["8013CC10 0001"],"options":null},"Freeze All Lap Timers":{"note":"","data":["8013CBD1 0001","8013CBD5 0001","8013CBD9 0001"],"options":null},"Freeze Overall Timer":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8013CBC5 0001"],"options":null},"Laps Of Race":{"note":"","data":["8013CBBE 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","Never Ending Laps":"06"}},"Level Select":{"note":"For this cheat to work,as soon as you put the cheat on you must turn it back off,if not you wont beable to quit a Race or even finish one.","data":["8013CECB 00??"],"options":{"Bikini Island":"01","Canyon Rush":"00","China Town":"02","China Town Jam":"04","Neo Arena":"03","Neo Speed Way":"05"}},"Music Modifier":{"note":"","data":["80106B7C 00??"],"options":{"Music Off":"00","Music On":"FF"}},"No Damage\\Player 1":{"note":"","data":["50000402 0000","8113CF08 0000"],"options":null},"No Damage\\Player 2":{"note":"","data":["50000402 0000","8113EF98 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["8013CEC5 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Play As\\Player 2":{"note":"","data":["8013CEC6 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Unlock All Tracks and Vehicles":{"note":"","data":["8008D0AC 0001"],"options":null}},"B044B569-373C1985-C:50":{"Always Have Wallet Size":{"note":"","data":["80118472 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C64F5 0010","81119736 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["801192B9 00FF","8011972F 00??"],"options":{"Off":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C64F5 0000","801197E3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["80023414 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["80118456 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["80118457 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["80118458 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["80118459 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023D6DF 0020","8023D6E5 0033"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F12C8 0005","801EDD08 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["80118472 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["80118473 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["80118471 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111846C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["81118474 30FF","81118476 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["80118448 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011844E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["80118454 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011844C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["80118446 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["80118450 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["80118445 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["80118444 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["80118447 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011844A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011844D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["80118451 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["80118452 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["80118449 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011844F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["80118455 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["80118453 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011844B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011845F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["50000B01 0000","80118478 0007","50000501 0000","8011848F 0009","80118497 0009","80118499 0009","8011849C 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["80118464 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011845E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011845D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["80118462 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011845C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118400 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118409 0008","8011840A 0001","8011840C 0001","80118403 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011846A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111979C 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["801197A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["801197A5 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C64F5 0020","811D8AE0 40CB","D01C64F5 0000","811D92F2 000D","80118440 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["801197D9 00??"],"options":{"English":"00","French":"02","German":"01"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011849F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["801184A1 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["811183FE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["801D851B ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C64F5 0020","811D92F2 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C64F5 0020","811D8AE0 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C64F5 0010","801183D7 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["811183DC ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011845A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011845B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["80118440 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011840E 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["811195F2 0000","811195F4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119765 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119765 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119765 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119765 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}},"Widescreen":{"note":"Originally by Darkludx","data":["81025044 1000","81025046 0023","81092778 3C07","8109277A 3FE3"],"options":null}},"B088FBB4-441E4B1D-C:50":{"Access\\All Lures":{"note":"Codes To Be Used With Save Slot 1","data":["8019A1A9 0003","8119A1AA FFFF"],"options":null},"Access\\All Poles 2":{"note":"Codes To Be Used With Slot 1","data":["8019A1AC 0007"],"options":null},"Access\\Extra Boat 2":{"note":"Codes To Be Used With Slot 1","data":["8019A1AD 0001"],"options":null},"All Lakes Available":{"note":"","data":["80119800 0001"],"options":null},"Easy Win Current Tournament":{"note":"","data":["8011980F 0001"],"options":null},"Extra $300":{"note":"","data":["8011980B 0001"],"options":null},"Fish Are More Active":{"note":"","data":["80119807 0001"],"options":null},"Large Fish":{"note":"","data":["80119806 0001"],"options":null},"More fish in Lakes":{"note":"","data":["8011980D 0001"],"options":null},"No Penalties During Tournamet":{"note":"","data":["80119808 0001"],"options":null},"No Snags While Fishing":{"note":"","data":["80119809 0001"],"options":null},"Super Lure":{"note":"","data":["8011980E 0001"],"options":null},"Unbreakable Line":{"note":"","data":["80119805 0001"],"options":null}},"B19AD999-7E585118-C:45":{"Have\\Alpine Challenge Track":{"note":"","data":["801256DF 0001"],"options":null},"Have\\Aztec Valley Track":{"note":"","data":["801256BF 0001"],"options":null},"Have\\Death Trap Track":{"note":"","data":["801256FF 0001"],"options":null},"Infinite Missiles (Upon Pickup)":{"note":"","data":["D0164BBF 0001","801A6054 0009"],"options":null}},"B2055FBD-0BAB4E0C-C:50":{"Always Have Wallet Size":{"note":"","data":["801184B2 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C6535 0010","81119776 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["801192F9 00FF","8011976F 00??"],"options":{"Off":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C6535 0000","80119823 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["80023454 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["80118496 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["80118497 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["80118498 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["80118499 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023D71F 0020","8023D725 0033"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1308 0005","801EDD48 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801184B2 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801184B3 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801184B1 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811184AC 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811184B4 30FF","811184B6 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["80118488 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011848E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["80118494 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011848C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["80118486 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["80118490 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["80118485 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["80118484 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["80118487 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011848A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011848D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["80118491 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["80118492 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["80118489 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011848F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["80118495 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["80118493 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011848B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011849F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["50000B01 0000","801184B8 0007","50000501 0000","801184CF 0009","801184D7 0009","801184D9 0009","801184DC 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801184A4 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011849E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011849D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801184A2 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011849C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118440 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118449 0008","8011844A 0001","8011844C 0001","80118443 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801184AA 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["811197DC 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["801197E1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["801197E5 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C6535 0020","811D8B20 40CB","D01C6535 0000","811D9332 000D","80118480 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119819 00??"],"options":{"English":"00","French":"02","German":"01"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["801184DF 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["801184E1 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111843E 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["811197D8 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C6535 0020","811D9332 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C6535 0020","811D8B20 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C6535 0010","80118417 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111841C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011849A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011849B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["80118480 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011844E 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119632 0000","81119634 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}},"Widescreen":{"note":"Originally by Darkludx","data":["81025044 1000","81025046 0023","81092778 3C07","8109277A 3FE3"],"options":null}},"B20F73B6-2975FC34-C:45":{"Enemies Fight Themselves":{"note":"","data":["8005EE9C 0020"],"options":null},"Have\\All Weapons \u0026 Ammo":{"note":"","data":["8115D06E 0001","8116368E 0001"],"options":null},"Have\\Invisible Soldier":{"note":"you are Invisible to most enimies who just can not dectect or see you.","data":["8115D052 0001"],"options":null},"Have\\Large Mode":{"note":"Do not use with Mini Mode only use one at a time","data":["811636AE 0001"],"options":null},"Have\\Mini Mode":{"note":"Do not use with Big Mode only use one at a time","data":["8115D06A 0001"],"options":null},"Infinite\\Continues":{"note":"","data":["8115D062 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8135C516 0600"],"options":null},"Move Faster":{"note":"","data":["800B9705 00FF","800B9749 00FF"],"options":null},"Play Level":{"note":"","data":["81172C0A 0001","810B51AE 00??"],"options":{"Bed":"0B","Bridge":"02","Cashier":"0D","Castle":"07","Desk":"0A","Dinner":"01","Freezer":"04","Fridge":"03","Graveyard":"06","Insidewall":"05","Pinball":"11","Pool":"10","Revenge":"09","Rockets":"0F","Tanbase":"08","Town":"0C","Train":"0E"}},"Play as":{"note":"","data":["81164372 00??"],"options":{"Big Green One":"07","Hail Mendheimicus":"0C","Mini Soldier":"0D","Mystery Women":"0B","Plastro":"09","Vikki":"08"}}},"B210DF19-98B58D1A-C:50":{"Access\\All Guns":{"note":"","data":["8015E0CF 0001"],"options":null},"Access\\Max Ammo":{"note":"","data":["801646EF 0001"],"options":null},"Enable Cheat Menu":{"note":"Enable before you enter in game and you will find the cheat menu when you press the Start Button","data":["8003F36F 0003","8004719F 0003"],"options":null},"Enable Level Select Menu":{"note":"This must be used with Enable Cheat Menu and enabled before you enter in game and you will find the level select menu replaces the cheat menu when you press the Start Button","data":["810AF0BA DC38"],"options":null},"Have\\Debug Mode":{"note":"When this code is activated, a display of numbers will show on the screen as the players move around","data":["8015E417 0001"],"options":null},"Have\\Large Mode":{"note":"Do not use with Mini Mode only use one at a time","data":["8016470F 0001"],"options":null},"Have\\Mini Mode":{"note":"Do not use with Large Mode only use one at a time","data":["8015E0C9 0001"],"options":null},"Infinite\\Continues":{"note":"","data":["8015E0C3 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8016471F 0001"],"options":null},"Invisible Soldier":{"note":"you are Invisible to most enimies who just can not dectect or see you.","data":["8015E0B3 0001"],"options":null},"Play As":{"note":"Here you can choose who you would like to play as. But Do not use this with any other play as option..","data":["811653D2 00??"],"options":{"Plastro":"09","The Big Green One":"07","Vikki":"08"}}},"B2242748-FFBD61DA-C:45":{"(Everything Unlocked)\\Save File 1":{"note":"This Unlocks All Levels and Cheat Menu Items","data":["50002902 0000","810699EE ????"],"options":{"Clear Save Slot":"0000","Unlocked":"FFFF"}},"(Everything Unlocked)\\Save File 2":{"note":"This Unlocks All Levels and Cheat Menu Items","data":["50002902 0000","8106992E ????"],"options":{"Clear Save Slot":"0000","Unlocked":"FFFF"}},"(Everything Unlocked)\\Save File 3":{"note":"This Unlocks All Levels and Cheat Menu Items","data":["50002902 0000","81069A4E ????"],"options":{"Clear Save Slot":"0000","Unlocked":"FFFF"}},"(Everything Unlocked)\\Save File 4":{"note":"This Unlocks All Levels and Cheat Menu Items","data":["50002902 0000","8106998E ????"],"options":{"Clear Save Slot":"0000","Unlocked":"FFFF"}},"Have All\\64 Characters In Multi Player":{"note":"Enables all Characters selectable to play as in Multi-Player","data":["8002B197 0040"],"options":null},"Have All\\Objectives Complete":{"note":"","data":["80036FD3 0001"],"options":null},"Infinite\\Ammo (All Levels)":{"note":"","data":["80079E3B 0001"],"options":null},"Infinite\\Health (All levels)":{"note":"","data":["8100C0F4 0801","8100C0F6 8090","8100C0F8 AFA4","8100C0FA 0000","81060240 0004","81060242 7600","81060244 3C02","81060246 8008","81060248 8C42","8106024A 9EE0","8106024C 3401","8106024E 3F80","81060250 A441","81060252 00DC","81060254 0800","81060256 303F"],"options":null}},"B30ED978-3003C9F9-C:45":{"Cool Camera":{"note":"","data":["800E523E 0000"],"options":null},"Expert Mode":{"note":"","data":["800E5ED9 0000","812C4B48 0000","812C4B4C 0000"],"options":null},"Have Boost From Start":{"note":"","data":["D02C4DAC 003F","802C4925 0050"],"options":null},"Hunk O' Junk":{"note":"","data":["802C4B3F 0040"],"options":null},"Infinite Lives":{"note":"","data":["800E5ED9 0005"],"options":null},"Max Grand Prix Points":{"note":"","data":["812C492A FFFF"],"options":null},"Max Shield":{"note":"","data":["812C4B4C 4326"],"options":null},"One Lap To Race":{"note":"","data":["D02C4BC9 0000","812C4BC8 0002","D02C4BCB 0001","812C4BCA 0002"],"options":null},"Player 1\\Car Color Modifier":{"note":"","data":["802C4BED 00??"],"options":{"1st Color":"00","2nd Color":"01","3rd Color":"02","4th Color":"03","Hidden Color":"05"}},"Player 1\\Character Modifier":{"note":"","data":["800E5EE1 00??"],"options":{"Antonio Guster":"0E","Baba":"07","Beastman":"15","Billy":"1B","Bio Rex":"19","Black Shadow":"0F","Blood Falcon":"1D","Captain Falcon":"00","Dr. Clash":"17","Dr. Stewart":"01","Draq":"1A","Gomar + Shioh":"09","Jack Levin":"11","James McCloud":"0C","Jody Summer":"04","John Tanaka":"14","Kate Alen":"0A","Leon":"0D","Michael Chain":"10","Mighty Gazelle":"05","Mr. EAD":"06","Mrs. Arrow":"13","Octoman":"08","Perfect Captain Falcon":"1E","Pico":"02","Roger Buster":"0B","Samurai Goroh":"03","Silver Neelsen":"18","Super Arrow":"12","The Skull":"1C","Zoda":"16"}},"Player 1\\Infinite Shield":{"note":"","data":["812C4B48 4326"],"options":null},"Player 1\\Invisible Car":{"note":"Vs. Mode Only","data":["802C4CCB 0000"],"options":null},"Player 2\\Car Color Modifier":{"note":"","data":["802C4F95 00??"],"options":{"1st Color":"00","2nd Color":"01","3rd Color":"02","4th Color":"03","Hidden Color":"05"}},"Player 2\\Character Modifier":{"note":"","data":["802C4F90 00??"],"options":{"Antonio Guster":"0E","Baba":"07","Beastman":"15","Billy":"1B","Bio Rex":"19","Black Shadow":"0F","Blood Falcon":"1D","Captain Falcon":"00","Dr. Clash":"17","Dr. Stewart":"01","Draq":"1A","Gomar + Shioh":"09","Jack Levin":"11","James McCloud":"0C","Jody Summer":"04","John Tanaka":"14","Kate Alen":"0A","Leon":"0D","Michael Chain":"10","Mighty Gazelle":"05","Mr. EAD":"06","Mrs. Arrow":"13","Octoman":"08","Perfect Captain Falcon":"1E","Pico":"02","Roger Buster":"0B","Samurai Goroh":"03","Silver Neelsen":"18","Super Arrow":"12","The Skull":"1C","Zoda":"16"}},"Player 2\\Infinite Shield":{"note":"","data":["812C4EF0 4326"],"options":null},"Player 3\\Car Color Modifier":{"note":"","data":["802C533D 00??"],"options":{"1st Color":"00","2nd Color":"01","3rd Color":"02","4th Color":"03","Hidden Color":"05"}},"Player 3\\Character Modifier":{"note":"","data":["802C5338 00??"],"options":{"Antonio Guster":"0E","Baba":"07","Beastman":"15","Billy":"1B","Bio Rex":"19","Black Shadow":"0F","Blood Falcon":"1D","Captain Falcon":"00","Dr. Clash":"17","Dr. Stewart":"01","Draq":"1A","Gomar + Shioh":"09","Jack Levin":"11","James McCloud":"0C","Jody Summer":"04","John Tanaka":"14","Kate Alen":"0A","Leon":"0D","Michael Chain":"10","Mighty Gazelle":"05","Mr. EAD":"06","Mrs. Arrow":"13","Octoman":"08","Perfect Captain Falcon":"1E","Pico":"02","Roger Buster":"0B","Samurai Goroh":"03","Silver Neelsen":"18","Super Arrow":"12","The Skull":"1C","Zoda":"16"}},"Player 3\\Infinite Shield":{"note":"","data":["812C5298 4326"],"options":null},"Player 4\\Car Color Modifier":{"note":"","data":["802C56E5 00??"],"options":{"1st Color":"00","2nd Color":"01","3rd Color":"02","4th Color":"03","Hidden Color":"05"}},"Player 4\\Character Modifier":{"note":"","data":["802C56E0 00??"],"options":{"Antonio Guster":"0E","Baba":"07","Beastman":"15","Billy":"1B","Bio Rex":"19","Black Shadow":"0F","Blood Falcon":"1D","Captain Falcon":"00","Dr. Clash":"17","Dr. Stewart":"01","Draq":"1A","Gomar + Shioh":"09","Jack Levin":"11","James McCloud":"0C","Jody Summer":"04","John Tanaka":"14","Kate Alen":"0A","Leon":"0D","Michael Chain":"10","Mighty Gazelle":"05","Mr. EAD":"06","Mrs. Arrow":"13","Octoman":"08","Perfect Captain Falcon":"1E","Pico":"02","Roger Buster":"0B","Samurai Goroh":"03","Silver Neelsen":"18","Super Arrow":"12","The Skull":"1C","Zoda":"16"}},"Player 4\\Infinite Shield":{"note":"","data":["812C5640 4326"],"options":null},"Show 30 Cars Out Of 1 Position":{"note":"","data":["800E5FC7 001D"],"options":null},"Super Ultimate Mega Fast Mode":{"note":"","data":["812C4984 2222"],"options":null},"Time Always 00.00.00/1st Place":{"note":"","data":["802C4BC0 0000","802C4BC2 0001"],"options":null},"Track Modifier":{"note":"","data":["800F8517 00??"],"options":{"Big Blue":"04","Big Blue 2":"0A","Big Hand":"17","Devils Forest":"03","Devils Forest 2":"08","Devils Forest 3":"13","Fire Field":"0C","Mute City":"00","Mute City 2":"11","Port Town":"05","Port Town 2":"16","Rainbow Road":"12","Red Canyon":"0F","Sand Ocean":"02","Sand Ocean 2":"15","Sector Alpha":"06","Sector Beta":"0E","Silence":"01","Silence 2":"0D","Space Plant":"14","White Land":"0B","White Land 2":"10"}},"Unlock Everything":{"note":"","data":["800CD3C8 0001"],"options":null},"Widescreen":{"note":"","data":["8106D164 0803","8106D166 522C","810D48B0 3C1B","810D48B2 3F40","810D48B4 449B","810D48B6 9000","810D48B8 0000","810D48BA 0000","810D48BC 0801","810D48BE B45B","810D48C0 4612","810D48C2 3182","D11418A0 3F99","811418A0 3FCC"],"options":null}},"B323E37C-BBC35EC4-C:00":{"Have Infinite Max Credits":{"note":"","data":["802C9FE1 0099"],"options":null}},"B3402554-7340C004-C:45":{"Car Upgrades\\'63 Muscle Car":{"note":"","data":["8015056F 0005"],"options":null},"Car Upgrades\\All-Terrain Vehicle":{"note":"","data":["8015057F 0004"],"options":null},"Car Upgrades\\Devastator":{"note":"","data":["80150577 0005"],"options":null},"Car Upgrades\\Italia P69":{"note":"","data":["8015057B 0005"],"options":null},"Car Upgrades\\La Bomba":{"note":"","data":["80150573 0005"],"options":null},"Car Upgrades\\Police Car":{"note":"","data":["80150587 0004"],"options":null},"Car Upgrades\\School Bus":{"note":"","data":["80150583 0004"],"options":null},"Infinite Time":{"note":"","data":["8015097D 0095"],"options":null},"Play Level Modifier":{"note":"","data":["80150993 00??"],"options":{"Appalachia":"0C","Arizona":"07","Beverly Hills":"04","Chicago":"0A","Cruise The USA":"0E","Death Valley":"06","Golden Gate Park":"00","Grand Canyon":"08","Indiana":"0B","Iowa":"09","LA Freeway":"05","Redwood Forest":"03","San Francisco":"01","US 101":"02","Washington DC":"0D"}},"Player 1\\Always First Place":{"note":"","data":["8015025B 0001"],"options":null},"Player 1\\Always Have Fastest Car":{"note":"","data":["8015024A 0001"],"options":null},"Player 1\\Gearbox Type Modifier":{"note":"","data":["80150243 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 1\\Lights \u0026 Sirens For Police Car \u0026 School Bus":{"note":"","data":["8115056A 0001","8114E3BA 0001"],"options":null},"Player 2\\Always First Place":{"note":"","data":["801505F7 0001"],"options":null},"Player 2\\Always Have Fastest Car":{"note":"","data":["801505E6 0001"],"options":null},"Player 2\\Gearbox Type Modifier":{"note":"","data":["801505DF 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 2\\Lights \u0026 Sirens For Police Car \u0026 School Bus":{"note":"","data":["81150906 0001","8114E3D2 0001"],"options":null},"Stop Elapsed Time And No Traffic":{"note":"","data":["80150979 0000"],"options":null}},"B35FEBB0-7427B204-C:46":{"Earn Spirits Faster":{"note":"","data":["8007D3AD 0000"],"options":null},"Have All Elements":{"note":"","data":["8107D39C 3232","8107D39E 3232"],"options":null},"Makes your HP 999-999":{"note":"","data":["8107D37C 03E7","8107D37E 03E7"],"options":null},"Makes your MP 999-999":{"note":"","data":["8107D380 03E7","8107D382 03E7"],"options":null},"No Random Battles":{"note":"","data":["8008DE6C 0000","8008DE6E 0000"],"options":null},"Set Agility to 999-999":{"note":"","data":["8107D384 03E7"],"options":null},"Set Defence to 999-999":{"note":"","data":["8107D386 03E7"],"options":null}},"B3D451C6-E1CB58E2-C:4A":{"Decrease Fodder":{"note":"","data":["81180BB4 03E7"],"options":null},"Decrease Material":{"note":"","data":["8118A2F0 03E7"],"options":null},"Max Money":{"note":"","data":["811FDA9C 000F","811FDA9E 423F"],"options":null}},"B443EB08-4DB31193-C:45":{"All Equipment Upgrades":{"note":"","data":["801ED89D 0023","811ED8EA 201B","801ED87C 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D038127B 0000","801ED832 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801ED8B2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801ED8B3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801ED8B4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801ED8B5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801ED8B6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801ED8B7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801ED8A5 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801ED8AB 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801ED8B1 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Fight Demo Majora's Mask":{"note":"With this code,load the game \u0026 put the cheat on. then press start to apear in the Demo mode.","data":["801688D8 0020"],"options":null},"Fog\\Blue":{"note":"","data":["801642C8 0020"],"options":null},"Fog\\Pink":{"note":"","data":["801642CC 0020"],"options":null},"Fog\\Yellow":{"note":"","data":["801642D0 0020"],"options":null},"Have\\All Masks":{"note":"","data":["801ED8B8 003E","801ED8B9 0038","801ED8BA 0047","801ED8BB 0045","801ED8BC 0040","801ED8BD 0032","801ED8BE 003A","801ED8BF 0046","801ED8C0 0039","801ED8C1 0042","801ED8C2 0048","801ED8C3 0033","801ED8C4 003C","801ED8C5 003D","801ED8C6 0037","801ED8C7 003F","801ED8C8 0036","801ED8C9 0034","801ED8CA 0043","801ED8CB 0041","801ED8CC 003B","801ED8CD 0044","801ED8CE 0049","801ED8CF 0035"],"options":null},"Have\\All Quest Status Items":{"note":"","data":["801ED8ED 0005","811ED8EE F7CF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801ED8A2 0002"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801ED8A3 0003"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801ED8A4 0004"],"options":null},"Have\\Bombchu":{"note":"","data":["801ED8A7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801ED8A6 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801ED8A9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801ED8A8 0008"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801ED8B0 0010"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801ED8A1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801ED8AF 000F"],"options":null},"Have\\Item Modifier":{"note":"","data":["801ED8B0 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\Lens of Truth":{"note":"","data":["801ED8AE 000E"],"options":null},"Have\\Magic Beans":{"note":"","data":["801ED8AA 000A"],"options":null},"Have\\Ocarina of Time":{"note":"","data":["801ED8A0 0000"],"options":null},"Have\\Pictograph":{"note":"","data":["801ED8AD 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801ED8AC 000C"],"options":null},"Infinite\\Health":{"note":"","data":["811ED866 0140"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811ED864 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"","data":["801ED8D1 0063","50000501 0000","801ED8D6 0063","50000201 0000","801ED8DC 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801ED869 0060","811ED870 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811ED86A 03E7"],"options":null},"Maximum Visibility":{"note":"","data":["801642D8 0020"],"options":null},"Play As":{"note":"","data":["801ED850 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D038127B 0020","8139A558 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You have been warned.","data":["801ED87C 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F88A0 0008","811ED846 FFFD","D01F88A0 0004","811ED846 0000","D01F88A0 0002","811ED846 FFFE"],"options":null},"Use C-Buttons Anywhere":{"note":"This code allows you to use C-Button Items where you normally can't use them.","data":["811F1748 0000","811F174A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["D03E4CFA 0000","803FD555 0001","813FD55A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"B44CAB74-07029A29-C:50":{"For More Time Press D-pad up":{"note":"","data":["D00EA380 0008","8115F0D2 1724","D00EA380 0008","8115F0DA 003C"],"options":null},"Infinite Options\\Freezing Breath":{"note":"","data":["8122CDE8 42C8"],"options":null},"Infinite Options\\Health":{"note":"","data":["8122CDD4 42C8"],"options":null},"Infinite Options\\Laser Eye":{"note":"","data":["8122CDE4 42C8"],"options":null},"Infinite Options\\Running Boosts":{"note":"","data":["8122CDDC 42C8"],"options":null},"Infinite Options\\X-Ray Vision":{"note":"","data":["8122CDE0 42C8"],"options":null},"Level Select":{"note":"","data":["D00EA380 0020","8117A378 0013","D00EA380 0020","8117A388 000F","81144727 0063"],"options":null}},"B54CE881-BCCB6126-C:45":{"Hole In One\\Hole 01":{"note":"","data":["800FF713 0000"],"options":null},"Hole In One\\Hole 02":{"note":"","data":["800FF715 0000"],"options":null},"Hole In One\\Hole 03":{"note":"","data":["800FF717 0000"],"options":null},"Hole In One\\Hole 04":{"note":"","data":["800FF719 0000"],"options":null},"Hole In One\\Hole 05":{"note":"","data":["800FF71B 0000"],"options":null},"Hole In One\\Hole 06":{"note":"","data":["800FF71D 0000"],"options":null},"Hole In One\\Hole 07":{"note":"","data":["800FF71F 0000"],"options":null},"Hole In One\\Hole 08":{"note":"","data":["800FF721 0000"],"options":null},"Hole In One\\Hole 09":{"note":"","data":["800FF723 0000"],"options":null},"Hole In One\\Hole 10":{"note":"","data":["800FF725 0000"],"options":null},"Hole In One\\Hole 11":{"note":"","data":["800FF727 0000"],"options":null},"Hole In One\\Hole 12":{"note":"","data":["800FF729 0000"],"options":null},"Hole In One\\Hole 13":{"note":"","data":["800FF72B 0000"],"options":null},"Hole In One\\Hole 14":{"note":"","data":["800FF72D 0000"],"options":null},"Hole In One\\Hole 15":{"note":"","data":["800FF72F 0000"],"options":null},"Hole In One\\Hole 16":{"note":"","data":["800FF731 0000"],"options":null},"Hole In One\\Hole 17":{"note":"","data":["800FF733 0000"],"options":null},"Hole In One\\Hole 18":{"note":"","data":["800FF735 0000"],"options":null}},"B58988E9-B1FC4BE8-C:50":{"Always 1st":{"note":"","data":["812C4DC6 0001"],"options":null},"Have All\\Races":{"note":"","data":["812B5DC4 0101","812B5DC6 0101","812B5DC8 0101","812B5DCA 0101","812B5DCC 0101","812B5DCE 0101","812B5DD0 0101"],"options":null},"Have All\\Ships":{"note":"","data":["812B5DD2 0101","812B5DD4 0101","812B5DD6 0101","812B5DD8 0101","812B5DDA 0101","812B5DDC 0101","812B5DDE 0101"],"options":null},"Infinite\\Boosts\\Player 1":{"note":"","data":["812C4DCC 4190"],"options":null},"Infinite\\Boosts\\Player 2":{"note":"","data":["812C50FC 4190"],"options":null},"Infinite\\Time":{"note":"","data":["812B49C0 42C8"],"options":null}},"B6524461-ED6D04B1-C:50":{"Infinite Health\\Player 1":{"note":"","data":["80225E9D 00FA"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["80225E9F 00FA"],"options":null},"Infinite Time":{"note":"","data":["80225EA5 003C"],"options":null},"Win Once To Win\\Player 1":{"note":"","data":["80225E95 0001"],"options":null},"Win Once To Win\\Player 2":{"note":"","data":["80225E97 0001"],"options":null}},"B6951A94-63C849AF-C:4A":{"Have All Items":{"note":"","data":["50000501 0000","80389C4A 0001","50000301 0000","80389C51 0001","80389C5A 0001","80389C5B 0001","80389C5D 0001","50000E01 0000","80389C60 0001"],"options":null},"Have\\Exp Points":{"note":"","data":["80389C49 0063"],"options":null},"Have\\Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C3F 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C45 0001","81389C46 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C3E 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C49 0063"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C48 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the GS button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C90 ????","89389C92 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CED 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C88 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C88 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C3D 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C42 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"B6BC0FB0-E3812198-C:4A":{"All Levels\\Infinite\\Energy":{"note":"","data":["800D5A9B 00FF"],"options":null},"All Levels\\Infinite\\Max Credits":{"note":"","data":["80075DDC 00FF"],"options":null},"All Levels\\Infinite\\Time":{"note":"","data":["800D5A97 0063"],"options":null},"All Levels\\Unlock All\\Levels - Options Menu":{"note":"","data":["80075DD6 FFFF","80075DD7 FFFF"],"options":null},"All Levels\\Unlock All\\Option Menu Items":{"note":"","data":["80075DD8 FFFF","80075DD9 FFFF"],"options":null},"Level\\0-0\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["8010BB0C 0000"],"options":null},"Level\\0-0\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8010BB2B 0001"],"options":null},"Level\\1-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801657DC 0000"],"options":null},"Level\\1-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801657FB 0001"],"options":null},"Level\\1-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCF9C 0000"],"options":null},"Level\\1-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCFBB 0001"],"options":null},"Level\\1-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801126EC 0000"],"options":null},"Level\\1-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8011270B 0001"],"options":null},"Level\\2-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BD29C 0000"],"options":null},"Level\\2-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801BD2BB 0001"],"options":null},"Level\\2-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B911C 0000"],"options":null},"Level\\2-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B913B 0001"],"options":null},"Level\\2-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7CEC 0000"],"options":null},"Level\\2-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7D0B 0001"],"options":null},"Level\\3-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801588EC 0000"],"options":null},"Level\\3-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8015890B 0001"],"options":null},"Level\\3-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B936C 0000"],"options":null},"Level\\3-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B938B 0001"],"options":null},"Level\\3-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801013CC 0000"],"options":null},"Level\\3-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["81100E08 C350"],"options":null}},"B703EB23-28AAE53A-C:4A":{"Infinite\\Lives":{"note":"","data":["800A37C8 0009"],"options":null},"Infinite\\Specials":{"note":"","data":["800A37C9 0003"],"options":null},"Max\\Combo":{"note":"","data":["810A37C4 7FFF"],"options":null},"Max\\Lower Level":{"note":"","data":["800A37D8 0003"],"options":null},"Max\\Score":{"note":"","data":["800A37A8 03E7","800A37A9 03E7"],"options":null},"Max\\Upper Level":{"note":"","data":["800A37D9 0063"],"options":null},"Play As":{"note":"","data":["800A37CC 00??"],"options":{"Character 1":"00","Character 2":"01","Character 3":"02"}},"Status Modifier":{"note":"","data":["800A37CA 00??"],"options":{"High":"01","Low":"03","Mid":"02"}}},"B73AB6F6-296267DD-C:45":{"All Levels\\Infinite\\Energy":{"note":"","data":["800D5A9B 00FF"],"options":null},"All Levels\\Infinite\\Max Credits":{"note":"","data":["80075DDC 00FF"],"options":null},"All Levels\\Infinite\\Time":{"note":"","data":["800D5A97 0063"],"options":null},"All Levels\\Unlock All\\Levels - Options Menu":{"note":"","data":["80075DD6 FFFF","80075DD7 FFFF"],"options":null},"All Levels\\Unlock All\\Option Menu Items":{"note":"","data":["80075DD8 FFFF","80075DD9 FFFF"],"options":null},"Level\\0-0\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time and only use for that specific level Cheat","data":["8010BB0C 0000"],"options":null},"Level\\0-0\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8010BB2B 0001"],"options":null},"Level\\1-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801657DC 0000"],"options":null},"Level\\1-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801657FB 0001"],"options":null},"Level\\1-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCF9C 0000"],"options":null},"Level\\1-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCFBB 0001"],"options":null},"Level\\1-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801126EC 0000"],"options":null},"Level\\1-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8011270B 0001"],"options":null},"Level\\2-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BD29C 0000"],"options":null},"Level\\2-1\\Invincible":{"note":"","data":["801BD2BB 0001"],"options":null},"Level\\2-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B911C 0000"],"options":null},"Level\\2-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B913B 0001"],"options":null},"Level\\2-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7CEC 0000"],"options":null},"Level\\2-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7D0B 0001"],"options":null},"Level\\3-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801588EC 0000"],"options":null},"Level\\3-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8015890B 0001"],"options":null},"Level\\3-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B936C 0000"],"options":null},"Level\\3-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B938B 0001"],"options":null},"Level\\3-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801013CC 0000"],"options":null},"Level\\3-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["81100E08 C350"],"options":null},"Widescreen":{"note":"","data":["81062CCC 3FE3"],"options":null}},"B7CF2136-FA0AA715-C:50":{"Access All In-Game Cheats":{"note":"In Set-Up Menu","data":["810C48F8 0100"],"options":null},"Access Midway Track":{"note":"","data":["810C4890 03E7"],"options":null},"Activate All In-Game Cheats":{"note":"","data":["50000E02 0000","810C48A4 FFFF"],"options":null},"All Keys,Cars \u0026 Cans":{"note":"","data":["50000E02 0000","810C4574 FFFF"],"options":null},"Always 1st":{"note":"","data":["80115499 0000"],"options":null},"Best Stunt Points":{"note":"On Track","data":["8110B438 03E7"],"options":null},"Easy Difficulty":{"note":"","data":["8010FFAA 0000"],"options":null},"Laps To Race":{"note":"","data":["811088D0 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Max \u0026 Best Score":{"note":"On Stunt Track","data":["50000502 0000","810C4702 FFFF"],"options":null},"Max Points In Total":{"note":"","data":["810E235A 03E7"],"options":null},"No\\Checkpoints Extended Time":{"note":"","data":["8010FF47 0000"],"options":null},"No\\Wind":{"note":"","data":["80116E98 0000"],"options":null},"Number Of Drones In Race":{"note":"","data":["810E1B88 00??"],"options":{"1 Drone":"01","2 Drones":"02","3 Drones":"03","4 Drones":"04","5 Drones":"05","6 Drones":"06","7 Drones":"07","8 Drones":"08","9 Drones":"09"}}},"B7F40BCF-553556A5-C:45":{"Have Spells\\Ball Bearing":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA67C 0006"],"options":null},"Have Spells\\Balloon":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA7BC 0006"],"options":null},"Have Spells\\Bowling Ball":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA5FC 0006"],"options":null},"Have Spells\\Boxing Glove":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA8BC 000E"],"options":null},"Have Spells\\Bungee":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA77C 000E"],"options":null},"Have Spells\\Fat Glover":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA97C 001E"],"options":null},"Have Spells\\First Aid":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA93C 001E"],"options":null},"Have Spells\\Gauntlet":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA87C 001E"],"options":null},"Have Spells\\Glass Cutter":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA8FC 000E"],"options":null},"Have Spells\\Possess":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA83C 0006"],"options":null},"Have Spells\\Rubber Ball":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["801DA5BC 0006"],"options":null},"Have Spells\\Speed-Up":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA6FC 000E"],"options":null},"Have Spells\\Sucker Ball":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA63C 000E"],"options":null},"Have Spells\\Super-Slam":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA7FC 0016"],"options":null},"Have Spells\\Teleport":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA73C 000E"],"options":null},"Have Spells\\Yo-Yo":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA6BC 0016"],"options":null},"Infinite\\Max Health":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["8027069B 0006","8027069D 0006","802881CB 0006"],"options":null},"Infinite\\Max Lives":{"note":"","data":["80288127 00FF","80270697 00FF"],"options":null},"Infinite\\Max Magical\\Ball Energy":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["802706A3 00FF","80288313 00FF"],"options":null},"Infinite\\Max Magical\\Spell Energy":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["802706A1 00FF","8028826F 00FF"],"options":null},"Infinite\\Max Rank Bonus":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["802706FD 00FF","802883B7 00FF"],"options":null}},"B8F0BD03-4479189E-C:50":{"Access All Tracks In Match Mode":{"note":"","data":["50000602 0000","810A9080 0001"],"options":null},"Access all Gold Trophies":{"note":"Championshp \u0026 Match Mode","data":["50000602 0000","810A9078 0000"],"options":null},"Always 1st":{"note":"","data":["800A9107 0000"],"options":null},"Infinite Time":{"note":"","data":["8009498F 003C"],"options":null}},"B9A9ECA2-17AAE48E-C:45":{"Always Place 1st":{"note":"","data":["80152906 0000"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 1":{"note":"","data":["8113A110 FFFF"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 2":{"note":"","data":["8113A170 FFFF"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 4":{"note":"","data":["8113A230 FFFF"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 5":{"note":"","data":["8113A290 FFFF"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 6":{"note":"","data":["8113A2F0 FFFF"],"options":null},"Infinate Ammo\\All Players In Battle":{"note":"","data":["80152B9D 0050","80152F55 0050","8015330D 0050","801536C5 0050"],"options":null},"Max Score\\Stunt Mode":{"note":"","data":["8115204E 7FFF"],"options":null},"Speed Activator":{"note":"","data":["D0037AA4 0020","8114A298 ????"],"options":{"146 mph":"4333","170 mph":"4350","210 mph":"4380","270 mph":"4393"}},"Start On Lap Modifier":{"note":"","data":["D014AA38 0000","8014AA38 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Track Modifier":{"note":"","data":["8014978C 00??"],"options":{"Track 1":"00","Track 2":"01","Track 3":"02","Track 4":"03"}},"Unlock All Cheats":{"note":"","data":["50000B02 0000","8111648C 0101"],"options":null}},"B9AF8CC6-DEC9F19F-C:50":{"Access All Levels":{"note":"","data":["8020860E 00FF","80208610 00FF"],"options":null},"Extended Tongue":{"note":"","data":["8133185E FFFF"],"options":null},"Have 99 Crowns":{"note":"","data":["80251857 0063"],"options":null},"Have All Levels Completed":{"note":"","data":["80208612 0019","80208613 0019","80208614 0015","80208615 0018","80208616 0017","80208617 0017"],"options":null},"Infinite Health":{"note":"","data":["80174DF3 000A"],"options":null},"Level Select":{"note":"","data":["8029097B 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06"}}},"BA6C293A-9FAFA338-C:46":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2552 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE03F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","80202535 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE095 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FC9C5 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFDAD 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802025E5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801D9EFD 0001"],"options":null}},"BA780BA0-0F21DB34-C:45":{"Have All Medals":{"note":"For Expert \u0026 Normal Modes","data":["50000802 0000","81178870 7777"],"options":null},"Infinite Boost\\Player 2":{"note":"","data":["8113CB6C 0000","8113CB6E 0000","8113FA4C 0000","8113FA4E 0000"],"options":null},"Infinite Boost\\Player 3":{"note":"","data":["8113D04C 0000","8113D04E 0000","8113FF2C 0000","8113FF2E 0000"],"options":null},"Infinite Boost\\Player 4":{"note":"","data":["8113D52C 0000","8113D52E 0000","8114040C 0000","8114040E 0000"],"options":null},"Infinite Dual Blue Lasers\\Player 2":{"note":"","data":["80161AAF 0002"],"options":null},"Infinite Dual Blue Lasers\\Player 3":{"note":"","data":["80161AB3 0002"],"options":null},"Infinite Dual Blue Lasers\\Player 4":{"note":"","data":["80161AB7 0002"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["8013CB17 00FF","8013F9F7 00FF"],"options":null},"Infinite Health\\Player 3":{"note":"","data":["8013CFF7 00FF","8013FED7 00FF"],"options":null},"Infinite Health\\Player 4":{"note":"","data":["8013D4D7 00FF","801403B7 00FF"],"options":null},"Infinite Smart Bombs\\Player 2":{"note":"","data":["80177DA7 0004"],"options":null},"Infinite Smart Bombs\\Player 3":{"note":"","data":["80177DAB 0004"],"options":null},"Infinite Smart Bombs\\Player 4":{"note":"","data":["80177DAF 0004"],"options":null},"Infinite\\Armor\\Falco":{"note":"","data":["801778B7 00FF"],"options":null},"Infinite\\Armor\\Peppy":{"note":"","data":["801778BF 00FF"],"options":null},"Infinite\\Armor\\Slippy":{"note":"","data":["801778BB 00FF"],"options":null},"Infinite\\Dual Blue Lasers":{"note":"","data":["80161AAB 0002"],"options":null},"Infinite\\Energy\\Player 1":{"note":"For Solo \u0026 Multi Player","data":["8013C637 00FF","8013F517 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["80161AA1 0009"],"options":null},"Level Select":{"note":"","data":["80178237 00??"],"options":{"Aquas":"0D","Area 6":"03","Bolse":"11","Corneria":"00","Corneria (Multi)":"14","Fortuna":"0E","Glitch":"04","Katina":"10","Macbeth":"0B","Meteo":"01","Sector X":"02","Sector Y":"05","Sector Z":"12","Solar":"07","Titania":"0C","Training Mode Level":"0A","Venom 1":"06","Venom 2":"09","Venom With Starwolf":"13","Zoness":"08"}},"Loads O' Hits":{"note":"","data":["80161A9B 00FF"],"options":null},"Unlimited\\Boost":{"note":"","data":["8113C68C 0000","8113C68E 0000","8113F56C 0000","8113F56E 0000"],"options":null},"Unlimited\\Smart Bombs":{"note":"","data":["80177DA3 0004"],"options":null},"Widescreen":{"note":"","data":["810031A2 3FE3"],"options":null}},"BADDF714-A1FF1B80-C:45":{"Bomb Select":{"note":"","data":["8024A3A1 00??"],"options":{"Blue Remote Bomb":"05","Clear All Special Bombs.":"00","Crazy Bomb":"1D","Invisible Mine Bomb":"07","Jelly Bomb":"03","Power Bomb":"02","Red Beem Bomb":"06","Shock Wave Bomb":"04"}},"Bomberman Speed":{"note":"","data":["8024A3A0 00??"],"options":{"Fast":"0E","Normal":"08","Slow":"04","Turbo":"10"}},"Have\\Infinite\\Kick":{"note":"","data":["8024A3A6 0002"],"options":null},"Have\\Max Bombs":{"note":"","data":["8024A39F 00FF"],"options":null},"Have\\Max Fire":{"note":"","data":["8024A39E 00FF"],"options":null},"Infinite\\Health Hearts":{"note":"","data":["8024A3AE 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["802E1CE7 00FF"],"options":null},"Infinite\\Timer":{"note":"","data":["800FDD72 002A"],"options":null},"Invincible":{"note":"Enemies \u0026 Bomb Blasts cant harm you.But if you walk \u0026 keep laying Bombs it will most likly freeze.so try to avoid constant bombing while walking.Turn cheat to off to go back to normal.","data":["8024A3A8 00??"],"options":{"Off":"00","On":"01"}},"Walk through\\Blocks":{"note":"Walk through Blocks like they are not there.Turn cheat to off to go back to normal.","data":["8024A3A5 00??"],"options":{"Off":"00","On":"01"}},"Walk through\\Bombs":{"note":"Walk through Bombs like they are not there.Turn cheat to off to go back to normal.","data":["8024A3A6 00??"],"options":{"Off":"00","On":"01"}}},"BB30B1A5-FCF712CE-C:45":{"Enable Chasm Freestyle":{"note":"","data":["81071834 0001"],"options":null},"Enable Jim Jam Freestyle":{"note":"","data":["81071838 0001"],"options":null},"Enable Moon Freestyle":{"note":"","data":["8107183C 0001"],"options":null},"Enable Tabletop Freestyle":{"note":"","data":["81071832 0001"],"options":null},"Extra Points":{"note":"","data":["800711E7 00FF"],"options":null}},"BBC99D32-117DAA80-C:45":{"Have All\\Boards":{"note":"","data":["81082A04 0003","81082A06 FFFF"],"options":null},"Have All\\Characters":{"note":"","data":["810829F8 07FF"],"options":null},"Have All\\Difficulties":{"note":"","data":["810829F0 0700"],"options":null},"Have All\\Tracks":{"note":"","data":["810829FC BFFE"],"options":null},"Low Timer":{"note":"","data":["801495FF 0000","80149601 0000"],"options":null},"Max\\50000 Stunt Points":{"note":"","data":["810829B8 C350"],"options":null},"[Audio Fix]":{"note":"","data":["81051840 AD99"],"options":null}},"BCB1F89F-060752A2-C:4A":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D51F0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112CD2E 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800EAFE8 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D51D0 0001","50001701 0000","800D51D8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D5460 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D545F 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D51C9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D51CA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D51CB 0003"],"options":null}},"BCFACCAA-B814D8EF-C:45":{"Player 1 Max Score (Casting Game)":{"note":"","data":["8107A412 FFFF"],"options":null},"Player 2 Max Score (Casting Game)":{"note":"","data":["8107A416 FFFF"],"options":null}},"BD636D6A-5D1F54BA-C:45":{"Away Team scores":{"note":"","data":["800478BB 00??"],"options":{"0 Goals":"00","25 Goals":"19","50 Goals":"32","99 Goals":"63"}},"Home Team scores":{"note":"","data":["800478BF 00??"],"options":{"0 Goals":"00","25 Goals":"19","50 Goals":"32","99 Goals":"63"}},"Open Cup Classic Mode":{"note":"","data":["8003CC6F 0001"],"options":null}},"BD8E206D-98C35E1C-C:4A":{"Day":{"note":"","data":["80136FBF 00??"],"options":{"Friday 12th":"0C","Friday 19th":"13","Friday 26th":"1A","Friday 5th":"05","Monday 15th":"0F","Monday 1st":"01","Monday 22nd":"16","Monday 29th":"1D","Monday 8th":"08","Saturday 13th":"0D","Saturday 27th":"1B","Saturday 30th":"14","Saturday 6th":"06","Sunday 14th":"0E","Sunday 21st":"15","Sunday 28th":"1C","Sunday 7th":"07","Thursday 11th":"0B","Thursday 18th":"12","Thursday 25th":"19","Thursday 4th":"04","Tuesday 16th":"10","Tuesday 23rd":"17","Tuesday 2nd":"02","Tuesday 30th":"1E","Tuesday 9th":"09","Wednesday 10th":"0A","Wednesday 17th":"11","Wednesday 24th":"18","Wednesday 31st":"1F","Wednesday 3rd":"03"}},"Hours":{"note":"","data":["80136FBE 00??"],"options":{"00 AM":"00","00 PM":"0C","01 AM":"01","01 PM":"0D","02 AM":"02","02 PM":"0E","03 AM":"03","03 PM":"0F","04 AM":"04","04 PM":"10","05 AM":"05","05 PM":"11","06 AM":"06","06 PM":"12","07 AM":"07","07 PM":"13","08 AM":"08","08 PM":"14","09 AM":"09","09 PM":"15","10 AM":"0A","10 PM":"16","11 AM":"0B","11 PM":"17"}},"Item Select":{"note":"","data":["81126EE8 ????"],"options":{"100 Bag":"2103","1000 Bag":"2100","10000 Bag":"2101","30000 Bag":"2102","Alarm Clock":"1DB3","Blue NES Game":"1D42","CD Player":"1DAC","Fish Tank (Fish Included!)":"1CA6","Flat Shell":"2514","Grandfather Clock":"1DA0","Grey NES Game":"1D2F","JukeBox":"1D50","Lamp":"1EA1","Light Blue NES Game":"1D37","Nook's Shirt":"2410","Orange":"2804","Orange NES Game":"1D2B","Pet Cage":"1C00","Pointy Shell":"2515","Purple NES Game":"1D3E","Record Player":"1D4C","Red NES Game":"1D33","Round Snowman Table":"1EAB","Snowman Bed":"1EAF","Snowman Fridge":"1EA5","Snowman Seat":"1EB0","Stereo":"1DA9","Stereo Kinda Thing":"1DA6","Stereo NES Colour":"1D47","Tall Red Cupboard":"1011","Yellow NES Game":"1D3A"}},"Max Cash":{"note":"","data":["813BC34C FFFF"],"options":null},"Minutes":{"note":"","data":["80136FBD 00??"],"options":{"00":"00","05":"05","10":"0A","15":"0F","20":"14","25":"19","30":"1E","35":"23","40":"28","45":"2D","50":"32","55":"37","59":"3B"}},"Month":{"note":"","data":["80136FC1 00??"],"options":{"April":"04","Aug":"08","Dec":"0C","Feb":"02","Jan":"01","July":"07","June":"06","March":"03","May":"05","Nov":"0B","Oct":"0A","Sept":"09"}},"Time Passes":{"note":"","data":["80136FD2 00??"],"options":{"Hours \u0026 Mins Fast":"10","Hours \u0026 Mins Medium":"05","Mins Like Seconds":"01","Time Normal":"00","Time Zooms By":"FF"}},"Widescreen":{"note":"","data":["810CB180 3C07","810CB182 3FE3"],"options":null}},"BDA8F143-B1AF2D62-C:45":{"Multi\\Agony\\Have All\\Weapons\\Player 1":{"note":"","data":["801832B7 0001","801832BB 0001","801832BF 0001","801832C3 0001","801832C7 0001","801832CB 0001","801832CF 0001","801832D3 0001","801832D7 0001","801832DB 0001"],"options":null},"Multi\\Agony\\Have All\\Weapons\\Player 2":{"note":"","data":["8018361B 0001","8018361F 0001","80183623 0001","80183627 0001","8018362B 0001","8018362F 0001","80183633 0001","80183637 0001","8018363B 0001","8018363F 0001"],"options":null},"Multi\\Agony\\Infinite\\Ammo\\Player 1":{"note":"","data":["801832DF 0063","801832E3 0063","801832E7 0063","801832EB 0063","801832EF 0063","801832F3 0063"],"options":null},"Multi\\Agony\\Infinite\\Ammo\\Player 2":{"note":"","data":["80183643 0063","80183647 0063","8018364B 0063","8018364F 0063","80183653 0063","80183657 0063"],"options":null},"Multi\\Cold Steel\\Have All\\Weapons\\Player 1":{"note":"","data":["8017B577 0001","8017B57B 0001","8017B57F 0001","8017B583 0001","8017B587 0001","8017B58B 0001","8017B58F 0001","8017B593 0001","8017B597 0001","8017B59B 0001"],"options":null},"Multi\\Cold Steel\\Have All\\Weapons\\Player 2":{"note":"","data":["8017B8DB 0001","8017B8DF 0001","8017B8E3 0001","8017B8E7 0001","8017B8EB 0001","8017B8EF 0001","8017B8F3 0001","8017B8F7 0001","8017B8FB 0001","8017B8FF 0001"],"options":null},"Multi\\Cold Steel\\Infinite\\Ammo\\Player 1":{"note":"","data":["8017B59F 0063","8017B5A3 0063","8017B5A7 0063","8017B5AB 0063","8017B5AF 0063","8017B5B3 0063"],"options":null},"Multi\\Cold Steel\\Infinite\\Ammo\\Player 2":{"note":"","data":["8017B903 0063","8017B907 0063","8017B90B 0063","8017B90F 0063","8017B913 0063","8017B917 0063"],"options":null},"Multi\\Corridors\\Have All\\Weapons\\Player 1":{"note":"","data":["8017D1C7 0001","8017D1CB 0001","8017D1CF 0001","8017D1D3 0001","8017D1D7 0001","8017D1DB 0001","8017D1DF 0001","8017D1E3 0001","8017D1E7 0001","8017D1EB 0001"],"options":null},"Multi\\Corridors\\Have All\\Weapons\\Player 2":{"note":"","data":["8017D52B 0001","8017D52F 0001","8017D533 0001","8017D537 0001","8017D53B 0001","8017D53F 0001","8017D543 0001","8017D547 0001","8017D54B 0001","8017D54F 0001"],"options":null},"Multi\\Corridors\\Infinite\\Ammo\\Player 1":{"note":"","data":["8017D1E7 0063","8017D1F3 0063","8017D1F7 0063","8017D1FB 0063","8017D1FF 0063","8017D203 0063"],"options":null},"Multi\\Corridors\\Infinite\\Ammo\\Player 2":{"note":"","data":["8017D553 0063","8017D557 0063","8017D55B 0063","8017D55F 0063","8017D567 0063"],"options":null},"Multi\\Dying Halls\\Have All\\Weapons\\Player 1":{"note":"","data":["801BF937 0001","801BF93B 0001","801BF93F 0001","801BF943 0001","801BF947 0001","801BF94B 0001","801BF94F 0001","801BF953 0001","801BF957 0001","801BF95B 0001"],"options":null},"Multi\\Dying Halls\\Have All\\Weapons\\Player 2":{"note":"","data":["801BFC9B 0001","801BFC9F 0001","801BFCA3 0001","801BFCA7 0001","801BFCAB 0001","801BFCAF 0001","801BFCB3 0001","801BFCB7 0001","801BFCBB 0001","801BFCBF 0001"],"options":null},"Multi\\Dying Halls\\Infinite\\Ammo\\Player 1":{"note":"","data":["801BF95F 0063","801BF963 0063","801BF967 0063","801BF96B 0063","801BF96F 0063","801BF973 0063"],"options":null},"Multi\\Dying Halls\\Infinite\\Ammo\\Player 2":{"note":"","data":["801BFCC3 0063","801BFCC7 0063","801BFCCB 0063","801BFCCF 0063","801BFCD3 0063","801BFCD7 0063"],"options":null},"Multi\\Empty Space\\Have All\\Weapons\\Player 1":{"note":"","data":["80179B27 0001","80179B2B 0001","80179B2F 0001","80179B33 0001","80179B37 0001","80179B3B 0001","80179B3F 0001","80179B43 0001","80179B47 0001","80179B4B 0001"],"options":null},"Multi\\Empty Space\\Have All\\Weapons\\Player 2":{"note":"","data":["80179E8B 0001","80179E8F 0001","80179E93 0001","80179E97 0001","80179E9B 0001","80179E9F 0001","80179EA3 0001","80179EA7 0001","80179EAB 0001","80179EAF 0001"],"options":null},"Multi\\Empty Space\\Infinite\\Ammo\\Player 1":{"note":"","data":["80179B4F 0063","80179B53 0063","80179B57 0063","80179B5B 0063","80179B5F 0063","80179B63 0063"],"options":null},"Multi\\Empty Space\\Infinite\\Ammo\\Player 2":{"note":"","data":["80179EB3 0063","80179EB7 0063","80179EBB 0063","80179EBF 0063","80179EC3 0063","80179EC7 0063"],"options":null},"Multi\\Fortress\\Have All\\Weapons\\Player 1":{"note":"","data":["8017D617 0001","8017D61B 0001","8017D61F 0001","8017D623 0001","8017D627 0001","8017D62B 0001","8017D62F 0001","8017D633 0001","8017D637 0001","8017D63B 0001"],"options":null},"Multi\\Fortress\\Have All\\Weapons\\Player 2":{"note":"","data":["8017D97B 0001","8017D97F 0001","8017D983 0001","8017D987 0001","8017D98B 0001","8017D98F 0001","8017D993 0001","8017D997 0001","8017D99B 0001","8017D99F 0001"],"options":null},"Multi\\Fortress\\Infinite\\Ammo\\Player 1":{"note":"","data":["8017D63F 0063","8017D643 0063","8017D647 0063","8017D64B 0063","8017D64F 0063","8017D653 0063"],"options":null},"Multi\\Fortress\\Infinite\\Ammo\\Player 2":{"note":"","data":["8017D9A3 0063","8017D9A7 0063","8017D9AB 0063","8017D9AF 0063","8017D9B3 0063","8017D9B7 0063"],"options":null},"Multi\\Mad Dash\\Have All\\Weapons\\Player 1":{"note":"","data":["801AE9A7 0001","801AE9AB 0001","801AE9AF 0001","801AE9B3 0001","801AE9B7 0001","801AE9BB 0001","801AE9BF 0001","801AE9C3 0001","801AE9C7 0001","801AE9CB 0001"],"options":null},"Multi\\Mad Dash\\Have All\\Weapons\\Player 2":{"note":"","data":["801AED0B 0001","801AED0F 0001","801AED13 0001","801AED17 0001","801AED1B 0001","801AED1F 0001","801AED23 0001","801AED27 0001","801AED2B 0001","801AED2F 0001"],"options":null},"Multi\\Mad Dash\\Infinite\\Ammo\\Player 1":{"note":"","data":["801AE9CF 0063","801AE9D3 0063","801AE9D7 0063","801AE9DB 0063","801AE9DF 0063","801AE9E3 0063"],"options":null},"Multi\\Mad Dash\\Infinite\\Ammo\\Player 2":{"note":"","data":["801AED33 0063","801AED37 0063","801AED3B 0063","801AED3F 0063","801AED43 0063","801AED47 0063"],"options":null},"Multi\\Overflow\\Have All\\Weapons\\Player 1":{"note":"","data":["80197907 0001","8019790B 0001","8019790F 0001","80197913 0001","80197917 0001","8019791B 0001","8019791F 0001","80197923 0001","80197927 0001","8019792B 0001"],"options":null},"Multi\\Overflow\\Have All\\Weapons\\Player 2":{"note":"","data":["80197C6B 0001","80197C6F 0001","80197C73 0001","80197C77 0001","80197C7B 0001","80197C7F 0001","80197C83 0001","80197C87 0001","80197C8B 0001","80197C8F 0001"],"options":null},"Multi\\Overflow\\Infinite\\Ammo\\Player 1":{"note":"","data":["8019792F 0063","80197933 0063","80197937 0063","8019793B 0063","8019793F 0063","80197943 0063"],"options":null},"Multi\\Overflow\\Infinite\\Ammo\\Player 2":{"note":"","data":["80197C93 0063","80197C97 0063","80197C9B 0063","80197C9F 0063","80197CA3 0063","80197CA7 0063"],"options":null},"Multi\\Twists\\Have All\\Weapons\\Player 1":{"note":"","data":["801ABE47 0001","801ABE4B 0001","801ABE4F 0001","801ABE53 0001","801ABE57 0001","801ABE5B 0001","801ABE5F 0001","801ABE63 0001","801ABE67 0001","801ABE6B 0001"],"options":null},"Multi\\Twists\\Have All\\Weapons\\Player 2":{"note":"","data":["801AC1AB 0001","801AC1AF 0001","801AC1B3 0001","801AC1B7 0001","801AC1BB 0001","801AC1BF 0001","801AC1C3 0001","801AC1C7 0001","801AC1CB 0001","801AC1CF 0001"],"options":null},"Multi\\Twists\\Infinite\\Ammo\\Player 1":{"note":"","data":["801ABE6F 0063","801ABE73 0063","801ABE77 0063","801ABE7B 0063","801ABE7F 0063","801ABE83 0063"],"options":null},"Multi\\Twists\\Infinite\\Ammo\\Player 2":{"note":"","data":["801AC1D3 0063","801AC1D7 0063","801AC1DB 0063","801AC1DF 0063","801AC1E3 0063","801AC1E7 0063"],"options":null},"Multi\\War Room\\Have All\\Weapons\\Player 1":{"note":"","data":["801A2E57 0001","801A2E5B 0001","801A2E5F 0001","801A2E63 0001","801A2E67 0001","801A2E6B 0001","801A2E6F 0001","801A2E73 0001","801A2E77 0001","801A2E7B 0001"],"options":null},"Multi\\War Room\\Have All\\Weapons\\Player 2":{"note":"","data":["801A31BB 0001","801A31BF 0001","801A31C3 0001","801A31C7 0001","801A31CB 0001","801A31CF 0001","801A31D3 0001","801A31D7 0001","801A31DB 0001","801A31DF 0001"],"options":null},"Multi\\War Room\\Infinite\\Ammo\\Player 1":{"note":"","data":["801A2E7F 0063","801A2E83 0063","801A2E87 0063","801A2E8B 0063","801A2E8F 0063","801A2E93 0063"],"options":null},"Multi\\War Room\\Infinite\\Ammo\\Player 2":{"note":"","data":["801A31E3 0063","801A31E7 0063","801A31EB 0063","801A31EF 0063","801A31F3 0063","801A31F7 0063"],"options":null},"The Ultimate":{"note":"The Ultimate Gives you on Solo Play Infinite Health, Infinite Armor, All Guns, and Infinite Ammo On all Levels","data":["8104AD2C 0800","8104AD2E 0018","81000060 8E30","81000062 0068","81000064 241B","81000066 03E7","81000068 AE1B","8100006A 0030","8100006C AC9B","8100006E 0204","81000070 A219","81000072 004B","81000074 A219","81000076 004C","81000078 1000","8100007A 0005","8100007C A219","8100007E 0050","50000604 0000","81000090 A219","50000604 0004","81000092 0054","50000504 0000","810000A8 AE1B","50000504 0004","810000AA 006C","810000BC 0801","810000BE 2B4D","810000C0 AE1B","810000C2 0080"],"options":null}},"BDF9766D-BD068D70-C:45":{"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Can't Be Counted Out":{"note":"","data":["D0296E4D 0029","81296ECE 0384"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Can't Be Pinned":{"note":"","data":["D0296E4D 0029","81296F5A FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Infinite Health":{"note":"","data":["D0296E4D 0029","81296FD0 0000","D0296E4D 0029","81296FD2 0000"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Instant Recovery":{"note":"","data":["D0296E4D 0029","8129703A FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Invincible":{"note":"","data":["D0296E4D 0029","8129702E FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Super Speed":{"note":"","data":["D0296E4D 0029","81297032 FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Super Stamina":{"note":"","data":["D0296E4D 0029","81297036 FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Super Strength":{"note":"","data":["D0296E4D 0029","8129702A FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Can't Be Counted Out":{"note":"","data":["D0296E4D 0029","8129816E 0384"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Can't Be Pinned":{"note":"","data":["D0296E4D 0029","812981FA FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Infinite Health":{"note":"","data":["D0296E4D 0029","81298270 0000","D0296E4D 0029","81298272 0000"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Instant Recovery":{"note":"","data":["D0296E4D 0029","812982DA FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Invincible":{"note":"","data":["D0296E4D 0029","812982CE FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Super Speed":{"note":"","data":["D0296E4D 0029","812982D2 FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Super Stamina":{"note":"","data":["D0296E4D 0029","812982D6 FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Super Strength":{"note":"","data":["D0296E4D 0029","812982CA FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Can't Be Counted Out":{"note":"","data":["D0296C3D 0029","81296CBE 0384"],"options":null},"3 Way Dance Mode\\Player 1\\Can't Be Pinned":{"note":"","data":["D0296C3D 0029","81296D4A FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Infinite Health":{"note":"","data":["D0296C3D 0029","81296DC0 0000","D0296C3D 0029","81296DC2 0000"],"options":null},"3 Way Dance Mode\\Player 1\\Instant Recovery":{"note":"","data":["D0296C3D 0029","81296E2A FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Invincible":{"note":"","data":["D0296C3D 0029","81296E1E FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Super Speed":{"note":"","data":["D0296C3D 0029","81296E22 FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Super Stamina":{"note":"","data":["D0296C3D 0029","81296E26 FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Super Strength":{"note":"","data":["D0296C3D 0029","81296E1A FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Can't Be Counted Out":{"note":"","data":["D0296C3D 0029","81297F5E 0384"],"options":null},"3 Way Dance Mode\\Player 2\\Can't Be Pinned":{"note":"","data":["D0296C3D 0029","81297FEA FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Infinite Health":{"note":"","data":["D0296C3D 0029","81298060 0000","D0296C3D 0029","81298062 0000"],"options":null},"3 Way Dance Mode\\Player 2\\Instant Recovery":{"note":"","data":["D0296C3D 0029","812980CA FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Invincible":{"note":"","data":["D0296C3D 0029","812980BE FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Super Speed":{"note":"","data":["D0296C3D 0029","812980C2 FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Super Stamina":{"note":"","data":["D0296C3D 0029","812980C6 FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Super Strength":{"note":"","data":["D0296C3D 0029","812980BA FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Can't Be Counted Out":{"note":"","data":["D0296C3D 0029","812991FE 0384"],"options":null},"3 Way Dance Mode\\Player 3\\Can't Be Pinned":{"note":"","data":["D0296C3D 0029","8129928A FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Infinite Health":{"note":"","data":["D0296C3D 0029","81299300 0000","D0296C3D 0029","81299302 0000"],"options":null},"3 Way Dance Mode\\Player 3\\Instant Recovery":{"note":"","data":["D0296C3D 0029","8129936A FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Invincible":{"note":"","data":["D0296C3D 0029","8129935E FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Super Speed":{"note":"","data":["D0296C3D 0029","81299362 FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Super Stamina":{"note":"","data":["D0296C3D 0029","81299366 FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Super Strength":{"note":"","data":["D0296C3D 0029","8129935A FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Can't Be Counted Out":{"note":"","data":["D029A98D 0029","8129AA0E 0384"],"options":null},"All Tag Team Modes\\Player 1\\Can't Be Pinned":{"note":"","data":["D029A98D 0029","8129AA9A FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Infinite Health":{"note":"","data":["D029A98D 0029","8129AB10 0000","D029A98D 0029","8129AB12 0000"],"options":null},"All Tag Team Modes\\Player 1\\Instant Recovery":{"note":"","data":["D029A98D 0029","8129AB7A FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Invincible":{"note":"","data":["D029A98D 0029","8129AB6E FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Super Speed":{"note":"","data":["D029A98D 0029","8129AB72 FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Super Stamina":{"note":"","data":["D029A98D 0029","8129AB76 FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Super Strength":{"note":"","data":["D029A98D 0029","8129AB6A FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Can't Be Counted Out":{"note":"","data":["D029A98D 0029","8129BCAE 0384"],"options":null},"All Tag Team Modes\\Player 2\\Can't Be Pinned":{"note":"","data":["D029A98D 0029","8129BD3A FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Infinite Health":{"note":"","data":["D029A98D 0029","8129BDB0 0000","D029A98D 0029","8129BDB2 0000"],"options":null},"All Tag Team Modes\\Player 2\\Instant Recovery":{"note":"","data":["D029A98D 0029","8129BE1A FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Invincible":{"note":"","data":["D029A98D 0029","8129BE0E FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Super Speed":{"note":"","data":["D029A98D 0029","8129BE12 FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Super Stamina":{"note":"","data":["D029A98D 0029","8129BE16 FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Super Strength":{"note":"","data":["D029A98D 0029","8129BE0A FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Can't Be Counted Out":{"note":"","data":["D029A98D 0029","8129CF4E 0384"],"options":null},"All Tag Team Modes\\Player 3\\Can't Be Pinned":{"note":"","data":["D029A98D 0029","8129CFDA FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Infinite Health":{"note":"","data":["D029A98D 0029","8129D050 0000","D029A98D 0029","8129D052 0000"],"options":null},"All Tag Team Modes\\Player 3\\Instant Recovery":{"note":"","data":["D029A98D 0029","8129D0BA FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Invincible":{"note":"","data":["D029A98D 0029","8129D0AE FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Super Speed":{"note":"","data":["D029A98D 0029","8129D0B2 FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Super Stamina":{"note":"","data":["D029A98D 0029","8129D0B6 FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Super Strength":{"note":"","data":["D029A98D 0029","8129D0AA FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Can't Be Counted Out":{"note":"","data":["D029A98D 0029","8129E1EE 0384"],"options":null},"All Tag Team Modes\\Player 4\\Can't Be Pinned":{"note":"","data":["D029A98D 0029","8129E27A FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Infinite Health":{"note":"","data":["D029A98D 0029","8129E2F0 0000","D029A98D 0029","8129E2F2 0000"],"options":null},"All Tag Team Modes\\Player 4\\Instant Recovery":{"note":"","data":["D029A98D 0029","8129E35A FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Invincible":{"note":"","data":["D029A98D 0029","8129E34E FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Super Speed":{"note":"","data":["D029A98D 0029","8129E352 FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Super Stamina":{"note":"","data":["D029A98D 0029","8129E356 FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Super Strength":{"note":"","data":["D029A98D 0029","8129E34A FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Can't Be Counted Out":{"note":"","data":["D029A66D 0029","8129A6EE 0384"],"options":null},"Battle Royal Mode\\Player 1\\Can't Be Pinned":{"note":"","data":["D029A66D 0029","8129A77A FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Infinite Health":{"note":"","data":["D029A66D 0029","8129A7F0 0000","D029A66D 0029","8129A7F2 0000"],"options":null},"Battle Royal Mode\\Player 1\\Instant Recovery":{"note":"","data":["D029A66D 0029","8129A85A FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Invincible":{"note":"","data":["D029A66D 0029","8129A84E FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Super Speed":{"note":"","data":["D029A66D 0029","8129A852 FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Super Stamina":{"note":"","data":["D029A66D 0029","8129A856 FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Super Strength":{"note":"","data":["D029A66D 0029","8129A84A FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Can't Be Counted Out":{"note":"","data":["D029A66D 0029","8129B98E 0384"],"options":null},"Battle Royal Mode\\Player 2\\Can't Be Pinned":{"note":"","data":["D029A66D 0029","8129BA1A FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Infinite Health":{"note":"","data":["D029A66D 0029","8129BA90 0000","D029A66D 0029","8129BA92 0000"],"options":null},"Battle Royal Mode\\Player 2\\Instant Recovery":{"note":"","data":["D029A66D 0029","8129BAFA FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Invincible":{"note":"","data":["D029A66D 0029","8129BAEE FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Super Speed":{"note":"","data":["D029A66D 0029","8129BAF2 FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Super Stamina":{"note":"","data":["D029A66D 0029","8129BAF6 FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Super Strength":{"note":"","data":["D029A66D 0029","8129BAEA FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Can't Be Counted Out":{"note":"","data":["D029A66D 0029","8129CC2E 0384"],"options":null},"Battle Royal Mode\\Player 3\\Can't Be Pinned":{"note":"","data":["D029A66D 0029","8129CCBA FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Infinite Health":{"note":"","data":["D029A66D 0029","8129CD30 0000","D029A66D 0029","8129CD32 0000"],"options":null},"Battle Royal Mode\\Player 3\\Instant Recovery":{"note":"","data":["D029A66D 0029","8129CD9A FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Invincible":{"note":"","data":["D029A66D 0029","8129CD8E FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Super Speed":{"note":"","data":["D029A66D 0029","8129CD92 FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Super Stamina":{"note":"","data":["D029A66D 0029","8129CD96 FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Super Strength":{"note":"","data":["D029A66D 0029","8129CD8A FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Can't Be Counted Out":{"note":"","data":["D029A66D 0029","8129DECE 0384"],"options":null},"Battle Royal Mode\\Player 4\\Can't Be Pinned":{"note":"","data":["D029A66D 0029","8129DF5A FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Infinite Health":{"note":"","data":["D029A66D 0029","8129DFD0 0000","D029A66D 0029","8129DFD2 0000"],"options":null},"Battle Royal Mode\\Player 4\\Instant Recovery":{"note":"","data":["D029A66D 0029","8129E03A FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Invincible":{"note":"","data":["D029A66D 0029","8129E02E FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Super Speed":{"note":"","data":["D029A66D 0029","8129E032 FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Super Stamina":{"note":"","data":["D029A66D 0029","8129E036 FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Super Strength":{"note":"","data":["D029A66D 0029","8129E02A FFFF"],"options":null},"Character Modifier\\Player 1":{"note":"","data":["80122773 00??"],"options":{"Beulah":"1C","Cyrus the Virus":"0D","Excel":"36","Gertner":"15","H Slash":"2A","J Styles":"30","Jeff Jones":"19","Louie":"2E","Mack Daddy":"0F","Mad Goat":"1D","Nurse":"1F","Santoro":"25","Skull":"29","Sound Guy":"27","Taz":"32","The Sheik":"28","Tommy Rich":"22","Trainer":"33"}},"Character Modifier\\Player 2":{"note":"","data":["80122783 00??"],"options":{"Beulah":"1C","Cyrus the Virus":"0D","Excel":"36","Gertner":"15","H Slash":"2A","J Styles":"30","Jeff Jones":"19","Louie":"2E","Mack Daddy":"0F","Mad Goat":"1D","Nurse":"1F","Santoro":"25","Skull":"29","Sound Guy":"27","Taz":"32","The Sheik":"28","Tommy Rich":"22","Trainer":"33"}},"Create A Wrestler\\Infinite Attribute Points":{"note":"","data":["8115DD52 0000"],"options":null},"Create A Wrestler\\Infinite Move %":{"note":"","data":["80131600 0024"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Can't Be Counted Out":{"note":"","data":["D029A87D 0029","8129A8FE 0384"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Can't Be Pinned":{"note":"","data":["D029A87D 0029","8129A98A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Infinite Health":{"note":"","data":["D029A87D 0029","8129AA00 0000","D029A87D 0029","8129AA02 0000"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Instant Recovery":{"note":"","data":["D029A87D 0029","8129AA6A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Invincible":{"note":"","data":["D029A87D 0029","8129AA5E FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Super Speed":{"note":"","data":["D029A87D 0029","8129AA62 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Super Stamina":{"note":"","data":["D029A87D 0029","8129AA66 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Super Strength":{"note":"","data":["D029A87D 0029","8129AA5A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Can't Be Counted Out":{"note":"","data":["D029A87D 0029","8129BB9E 0384"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Can't Be Pinned":{"note":"","data":["D029A87D 0029","8129BC2A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Infinite Health":{"note":"","data":["D029A87D 0029","8129BCA0 0000","D029A87D 0029","8129BCA2 0000"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Instant Recovery":{"note":"","data":["D029A87D 0029","8129BD0A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Invincible":{"note":"","data":["D029A87D 0029","8129BCFE FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Super Speed":{"note":"","data":["D029A87D 0029","8129BD02 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Super Stamina":{"note":"","data":["D029A87D 0029","8129BD06 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Super Strength":{"note":"","data":["D029A87D 0029","8129BCFA FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Can't Be Counted Out":{"note":"","data":["D029A87D 0029","8129CE3E 0384"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Can't Be Pinned":{"note":"","data":["D029A87D 0029","8129CECA FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Infinite Health":{"note":"","data":["D029A87D 0029","8129CF40 0000","D029A87D 0029","8129CF42 0000"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Instant Recovery":{"note":"","data":["D029A87D 0029","8129CFAA FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Invincible":{"note":"","data":["D029A87D 0029","8129CF9E FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Super Speed":{"note":"","data":["D029A87D 0029","8129CFA2 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Super Stamina":{"note":"","data":["D029A87D 0029","8129CFA6 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Super Strength":{"note":"","data":["D029A87D 0029","8129CF9A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Can't Be Counted Out":{"note":"","data":["D029A87D 0029","8129E0DE 0384"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Can't Be Pinned":{"note":"","data":["D029A87D 0029","8129E16A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Infinite Health":{"note":"","data":["D029A87D 0029","8129E1E0 0000","D029A87D 0029","8129E1E2 0000"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Instant Recovery":{"note":"","data":["D029A87D 0029","8129E24A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Invincible":{"note":"","data":["D029A87D 0029","8129E23E FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Super Speed":{"note":"","data":["D029A87D 0029","8129E242 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Super Stamina":{"note":"","data":["D029A87D 0029","8129E246 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Super Strength":{"note":"","data":["D029A87D 0029","8129E23A FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Can't Be Counted Out":{"note":"","data":["D02931FD 0029","8129327E 0384"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Can't Be Pinned":{"note":"","data":["D02931FD 0029","8129330A FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Infinite Health":{"note":"","data":["D02931FD 0029","81293380 0000","D02931FD 0029","81293382 0000"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Instant Recovery":{"note":"","data":["D02931FD 0029","812933EA FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Invincible":{"note":"","data":["D02931FD 0029","812933DE FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Super Speed":{"note":"","data":["D02931FD 0029","812933E2 FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Super Stamina":{"note":"","data":["D02931FD 0029","812933E6 FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Super Strength":{"note":"","data":["D02931FD 0029","812933DA FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Can't Be Counted Out":{"note":"","data":["D02931FD 0029","8129451E 0384"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Can't Be Pinned":{"note":"","data":["D02931FD 0029","812945AA FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Infinite Health":{"note":"","data":["D02931FD 0029","81294620 0000","D02931FD 0029","81294622 0000"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Instant Recovery":{"note":"","data":["D02931FD 0029","8129468A FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Invincible":{"note":"","data":["D02931FD 0029","8129467E FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Super Speed":{"note":"","data":["D02931FD 0029","81294682 FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Super Stamina":{"note":"","data":["D02931FD 0029","81294686 FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Super Strength":{"note":"","data":["D02931FD 0029","8129467A FFFF"],"options":null}},"BE5973E0-89B0EDB8-C:45":{"100.000 Sponsor Credits \u0026 950 Championship Points In Support Van":{"note":"You Also Have Access To All Cars, Tracks \u0026 Extra Features","data":["80030D82 00F3"],"options":null},"Always 1st":{"note":"","data":["810318E2 0001"],"options":null},"Infinite Time \u0026 Always Place 1st":{"note":"Championship Mode Only.","data":["810318EE 0001"],"options":null},"Max Sponsor Credits":{"note":"","data":["81033816 270F"],"options":null},"Max Sponsor Points \u0026 Extra Cars \u0026 Tracks":{"note":"This code gives you all tracks and cars. once you activate this code, You must make an internal save (Native) in options \u0026 then load that internal save, \u0026 go to Drivers Board to pick your car, Then to Race to pick your track","data":["81033816 270F"],"options":null},"No Cones Hit":{"note":"In ARSG Rally School","data":["81031CEA 0000"],"options":null},"No Damage Or Failures":{"note":"","data":["81030D76 0001"],"options":null},"No Navigator":{"note":"","data":["80032677 0000"],"options":null}},"BE76EDFF-20452D09-C:45":{"Away Team\\Infinite Time Outs":{"note":"","data":["8004C62E 0003"],"options":null},"Away Team\\No Time Outs":{"note":"","data":["8004C62E 0000"],"options":null},"Home Team\\Infinite Time Outs":{"note":"","data":["8004C0B6 0003"],"options":null},"Home Team\\No Time Outs":{"note":"","data":["8004C0B6 0000"],"options":null},"Infinite\\Character Creation Points":{"note":"","data":["81072F30 015E"],"options":null},"Infinite\\Time to Choose Play":{"note":"","data":["81080152 0028"],"options":null},"Max\\Accuracy":{"note":"","data":["8106FDB8 0064"],"options":null},"Max\\Catch":{"note":"","data":["8106FDC2 0064"],"options":null},"Max\\Endurance":{"note":"","data":["8106FDC4 0064"],"options":null},"Max\\Hands":{"note":"","data":["8106FDBE 0064"],"options":null},"Max\\Range":{"note":"","data":["8106FDBA 0064"],"options":null},"Max\\Scramble":{"note":"","data":["8106FDBC 0064"],"options":null},"Max\\Speed":{"note":"","data":["8106FDC0 0064"],"options":null}},"BEBAB677-51B0B5E4-C:50":{"100.000 Sponsor Credits \u0026 950 Championship Points In Support Van":{"note":"You Also Have Access To All Cars, Tracks \u0026 Extra Features","data":["80031BB3 00F3"],"options":null},"Always 1st":{"note":"","data":["80032713 0001"],"options":null},"Freeze Timer":{"note":"","data":["8003271F 0000"],"options":null},"Infinite Cash":{"note":"","data":["803D004E 4000"],"options":null},"Max Sponsor Credits":{"note":"","data":["803D27E2 0010","803D27E4 0001"],"options":null},"No Cones Hit":{"note":"In ARSG Rally School","data":["80032743 0000","80032B1B 0000"],"options":null},"No Damage Or Failures":{"note":"","data":["80031BA7 0001"],"options":null},"No Navigator":{"note":"","data":["80032677 0000"],"options":null}},"BFA526B4-0691E430-C:45":{"All 52 Gold Gems Collected":{"note":"","data":["80171B10 0003","80171B11 007E","80171B12 00FF","80171B13 00EF","80171B14 00FF","80171B15 007F","80171B16 00FF","80171B17 00FC"],"options":null},"All Stages \u0026 Chapters Unlocked":{"note":"","data":["80171B18 003B"],"options":null},"Infinite Health\\Marina":{"note":"","data":["81057458 03E8"],"options":null},"Infinite Health\\Teran":{"note":"","data":["810F4270 03E8"],"options":null},"Infinite\\Max Red Gems":{"note":"","data":["81178136 270F"],"options":null},"Level Select":{"note":"To access this anytime during game, press L+R+Z to enable the menu. Press D-Pad Up / Down to move through the menu, D-Pad Left / Right to change level digits and then press Start to enter level. Don not do this whhile in pause mode (Start Button Pause) or the game will freeze.","data":["D10BE538 2030","800BE4F1 0004"],"options":null}},"BFE23884-EF48EAAF-C:45":{"All Levels Open":{"note":"","data":["50002001 0000","803F7DE0 0001"],"options":null},"Always\\Raining":{"note":"","data":["803F2D6F 0005"],"options":null},"Always\\Snowing":{"note":"","data":["803F2D6D 0005"],"options":null},"Debug Mode":{"note":"","data":["803F642F 0001"],"options":null},"Have All\\Power Cells":{"note":"","data":["803F2D3D 000F"],"options":null},"Have All\\Secret Mini Game":{"note":"","data":["803F643D 0001"],"options":null},"High Score":{"note":"","data":["813F2D30 007F","813F2D32 FFFF"],"options":null},"Infinite Health\\Ship\\in Asteroids Level":{"note":"","data":["803E4CDB 0003"],"options":null},"Infinite\\Ability\\Fox":{"note":"","data":["811DF8F4 0400"],"options":null},"Infinite\\Ability\\Heli-Rabbit":{"note":"","data":["811DF14C 0400"],"options":null},"Infinite\\Ability\\Husky":{"note":"","data":["811DED78 0400"],"options":null},"Infinite\\Ability\\Mouse":{"note":"","data":["811DFCC8 0400"],"options":null},"Infinite\\Ability\\Penguin":{"note":"","data":["811E009C 0400"],"options":null},"Infinite\\Ability\\Rabbit":{"note":"","data":["811DE5D0 0400"],"options":null},"Infinite\\Ability\\Racing Dog":{"note":"","data":["811DF14C 0400"],"options":null},"Infinite\\Ability\\Racing Fox":{"note":"","data":["811DF8F4 0082"],"options":null},"Infinite\\Ability\\Ram":{"note":"","data":["811DE5D0 0400"],"options":null},"Infinite\\Ability\\Sheep":{"note":"","data":["811DE9A0 0400"],"options":null},"Infinite\\Ability\\Springy Thing":{"note":"","data":["811DF14C 0400"],"options":null},"Infinite\\Ability\\Walrus":{"note":"","data":["811DE5D0 0400"],"options":null},"Infinite\\Boost\\Fox":{"note":"","data":["811DF8F0 0400"],"options":null},"Infinite\\Boost\\Mouse":{"note":"","data":["811DFCC4 0400"],"options":null},"Infinite\\Boost\\Racing Dog":{"note":"","data":["811DF148 0400"],"options":null},"Infinite\\Boost\\Racing Fox":{"note":"","data":["811DF8F0 0400"],"options":null},"Infinite\\Boost\\Walrus":{"note":"","data":["811DED74 0400"],"options":null},"Infinite\\Energy\\Dog":{"note":"","data":["811DFF04 0082"],"options":null},"Infinite\\Energy\\EVO (Chip)":{"note":"","data":["801DE065 0082"],"options":null},"Infinite\\Energy\\Evo\\In Bonus Level 4":{"note":"","data":["801DEFB5 0082"],"options":null},"Infinite\\Energy\\Evo\\in Bonus Level 1 \u0026 Final Level":{"note":"","data":["801DE439 0082"],"options":null},"Infinite\\Energy\\Fox":{"note":"","data":["811DF75C 0082"],"options":null},"Infinite\\Energy\\Heli-Rabbit":{"note":"","data":["811DEFB4 0082"],"options":null},"Infinite\\Energy\\Mouse,Hyena":{"note":"","data":["801DFB31 0082"],"options":null},"Infinite\\Energy\\Normal Penguin":{"note":"","data":["811DFF04 0082"],"options":null},"Infinite\\Energy\\Normal Rabbit":{"note":"","data":["811DE438 0082"],"options":null},"Infinite\\Energy\\Racing Dog":{"note":"","data":["811DEFB4 0082"],"options":null},"Infinite\\Energy\\Racing Fox":{"note":"","data":["811DF7FC 0082"],"options":null},"Infinite\\Energy\\Ram":{"note":"","data":["811DE438 0082"],"options":null},"Infinite\\Energy\\Sheep":{"note":"","data":["811DEBE0 0082"],"options":null},"Infinite\\Energy\\Snow Husky":{"note":"","data":["811DFF04 0082"],"options":null},"Infinite\\Energy\\Springy Thing":{"note":"","data":["811DEFB4 0082"],"options":null}},"BFF7B1C2-AEBF148E-C:4A":{"Infinite\\Bells":{"note":"","data":["800F38C3 00??"],"options":{"99 Bells":"63","No Bells":"00"}},"Infinite\\Energy":{"note":"","data":["800FB897 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["800F38C5 000A"],"options":null}},"C00CA948-8E60D34B-C:45":{"Max Or No Score\\Player 1":{"note":"","data":["81104772 ????"],"options":{"Max Score":"FFFF","No Score":"0000"}},"Max Or No Score\\Player 2":{"note":"","data":["81104776 ????"],"options":{"Max Score":"FFFF","No Score":"0000"}},"Max Or No Score\\Player 3":{"note":"","data":["8110477A ????"],"options":{"Max Score":"FFFF","No Score":"0000"}},"Max Or No Score\\Player 4":{"note":"","data":["8110477E ????"],"options":{"Max Score":"FFFF","No Score":"0000"}}},"C0C85046-61051B05-C:49":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2712 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE03F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802026F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE255 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FCB85 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFF6D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802027A5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DA0BD 0001"],"options":null}},"C0F6DB17-80E0D532-C:44":{"Enable Cheat Select":{"note":"","data":["80115933 00??"],"options":{"All Weapons With Fast Run":"42","All Weapons With Infinite Ammo":"06","Fast run":"40","Have All Weapons":"02","Infinite Ammo":"04","Infinite Ammo With Fast Run":"44","Invincible":"01","Invincible With All Weapons And Fast Run":"43","Invincible With All Weapons and Ammo and Fast Run":"47","Invincible With Fast Run":"41","Invincible With Infinite Ammo and All Weapons":"07"}},"Enable In-Game Cheat Menu \u0026 Level Select":{"note":"","data":["81115936 014F"],"options":null},"Sound Select\\Music Volume":{"note":"","data":["80115944 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"Sound Select\\SFX Volume":{"note":"","data":["80115945 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"[Press L For Levitate]":{"note":"","data":["D10F7550 0020","816FE35C 43D5"],"options":null}},"C151AD61-280FFF22-C:45":{"Have 99 Coins":{"note":"","data":["810BB55E 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C7EC2 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BB54C 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BB556 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BB55A 0009"],"options":null}},"C16C421B-A21580F7-C:45":{"Have All\\Levels and Bonus Stages Unlocked":{"note":"Press start in Gyro's Lab and then resume game to see all open","data":["801D72CC 00FF","801D72CD 00FF","801D72CE 00FF","801D72CF 00FF","801D72D3 00FF"],"options":null},"Have All\\Time Attack \u0026 Toy Hunting Comnpleated (All Levels)":{"note":"Press start in Gyro's Lab and then resume game to see all open","data":["801D72D8 00FF","801D72D9 00FF","801D72DA 00FF","801D72DB 00FF","801D72DC 00FF","801D72DD 00FF","801D72DE 00FF","801D72DF 00FF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["801D72AE 0063"],"options":null},"Infinite\\99 Stars":{"note":"","data":["801D72AF 0063"],"options":null},"Infinite\\Time\\Gladstones Time Attack":{"note":"","data":["801D72A7 00FF"],"options":null},"Infinite\\Time\\Nephews Toy Hunting":{"note":"","data":["801D72A3 0063"],"options":null},"Instant\\Carrier Box [Moon Walk] (Press L)":{"note":"Press and hold the L Button and you will run floating of any ledge slowing drifting down. If you keep pressing the A Button while Holding L it will act as a Moon Jump.","data":["D00CB2A1 0020","801C939F 0001"],"options":null},"Instant\\Hyperactive State [Invincible] (Press C-Right)":{"note":"","data":["D00CB2A1 0001","801CE616 0001"],"options":null},"Instant\\Rage Attack (Press C-Left)":{"note":"","data":["D00CB2A1 0002","801CE5BD 0001"],"options":null},"Widescreen":{"note":"","data":["81094100 2402","81094102 0190","81094124 2402","81094126 00E0","8107EFB4 03E0","8107EFB6 0008","8107EFB8 2402","8107EFBA 0001"],"options":null}},"C1D702BD-6D416547-C:4A":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D55E0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112CF0E 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800EB470 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D55C0 0001","50001701 0000","800D55C8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D5850 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D5889 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D55B9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D55BA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D55BB 0003"],"options":null}},"C2751D1A-F8C19BFF-C:50":{"Access Everything\\Start New Game":{"note":"","data":["50000502 0002","80204F3B 0013","50000502 0002","80204F42 0009","50000402 0002","80204F43 000A","80204F4B 000D","81204F4C 0E0F","81204F4E 0101","81204F5A 0100"],"options":null},"Have All Snowboards":{"note":"","data":["80204F3C 0001","81204F3E 0101","81204F40 0101"],"options":null},"Infinite Tools Options":{"note":"","data":["80206404 00??"],"options":{"Fan":"04","Frying Pan":"01","Ghost":"02","Invisible":"06","Rat Face":"08","Rock":"07","Rocket":"05","Super Ghost":"03","Super Rat Face":"09","Wings":"0A"}},"Infinite Weapons Options":{"note":"","data":["80206402 00??","80206403 0009"],"options":{"Bomb":"05","Freeze Shot":"03","Parachute":"02","Slap Stick":"01","Snowman":"04","Whirlwind":"06"}},"Max Coins":{"note":"","data":["8120639E 270F"],"options":null},"Max Money(Story Mode)":{"note":"","data":["81204EB0 0098","81204EB2 967F"],"options":null},"Open Extra Characters":{"note":"","data":["81204F4E 0101","80204F50 0001"],"options":null},"Trick Game 300 Points":{"note":"","data":["812065D2 012C"],"options":null}},"C29FF9E4-264BFE7D-C:45":{"Boris\\1-Hit Death":{"note":"","data":["D01543D5 0044","811543D4 0001"],"options":null},"Boris\\Infinite\\Health":{"note":"","data":["811543D4 0044"],"options":null},"Boris\\Infinite\\Lives":{"note":"","data":["811543D0 0063"],"options":null},"Boris\\Infinite\\Special":{"note":"","data":["811543DC 0044"],"options":null},"Boris\\Max Score":{"note":"","data":["81154404 000F","81154406 423F"],"options":null},"Curtis\\1-Hit Death":{"note":"","data":["D01541B9 0044","811541B8 0001"],"options":null},"Curtis\\Infinite\\Health":{"note":"","data":["811541B8 0044"],"options":null},"Curtis\\Infinite\\Lives":{"note":"","data":["811541B4 0063"],"options":null},"Curtis\\Infinite\\Special":{"note":"","data":["811541C0 0044"],"options":null},"Curtis\\Max Score":{"note":"","data":["811541E8 000F","811541EA 423F"],"options":null},"George\\1-Hit Death":{"note":"","data":["D015480D 0044","8115480C 0001"],"options":null},"George\\Infinite\\Health":{"note":"","data":["8115480C 0044"],"options":null},"George\\Infinite\\Lives":{"note":"","data":["81154808 0063"],"options":null},"George\\Infinite\\Special":{"note":"","data":["81154814 0044"],"options":null},"George\\Max Score":{"note":"","data":["8115483C 000F","8115483E 423F"],"options":null},"Infinite Time to Choose A Character":{"note":"","data":["8118CF9A 06CB"],"options":null},"Lizzie\\1-Hit Death":{"note":"","data":["D0154A29 0044","81154A28 0001"],"options":null},"Lizzie\\Infinite\\Health":{"note":"","data":["81154A28 0044"],"options":null},"Lizzie\\Infinite\\Lives":{"note":"","data":["81154A24 0063"],"options":null},"Lizzie\\Infinite\\Special":{"note":"","data":["81154A30 0044"],"options":null},"Lizzie\\Max Score":{"note":"","data":["81154A58 000F","81154A5A 423F"],"options":null},"Myukus Codes\\1-Hit Death":{"note":"","data":["D0154E61 0044","81154E60 0001"],"options":null},"Myukus Codes\\Infinite\\Health":{"note":"","data":["81154E60 0044"],"options":null},"Myukus Codes\\Infinite\\Lives":{"note":"","data":["81154E5C 0063"],"options":null},"Myukus Codes\\Infinite\\Special":{"note":"","data":["81154E68 0044"],"options":null},"Myukus Codes\\Max Score":{"note":"","data":["81154E90 000F","81154E92 423F"],"options":null},"Ralph\\1-Hit Death":{"note":"","data":["D0154C45 0044","81154C44 0001"],"options":null},"Ralph\\Infinite\\Health":{"note":"","data":["81154C44 0044"],"options":null},"Ralph\\Infinite\\Lives":{"note":"","data":["81154C40 0063"],"options":null},"Ralph\\Infinite\\Special":{"note":"","data":["81154C4C 0044"],"options":null},"Ralph\\Max Score":{"note":"","data":["81154C74 000F","81154C76 423F"],"options":null},"Ruby\\1-Hit Death":{"note":"","data":["D01545F1 0044","811545F0 0001"],"options":null},"Ruby\\Infinite\\Health":{"note":"","data":["811545F0 0044"],"options":null},"Ruby\\Infinite\\Lives":{"note":"","data":["811545EC 0063"],"options":null},"Ruby\\Infinite\\Special":{"note":"","data":["811545F8 0044"],"options":null},"Ruby\\Max Score":{"note":"","data":["81154620 000F","81154622 423F"],"options":null},"Unlock Cheat Menu":{"note":"","data":["810D5710 0001"],"options":null}},"C2E9AA9A-475D70AA-C:45":{"Beta Bottles Revenge Mode":{"note":"Bottles Revenge is a Beta mode from Banjo Tooie that the RWP team recently uncovered after an extraordinary amount of effort. Bottles the Spirit transforms into Bottles the Devil and posses enemies nearby and allows a second player hooked up to Pad 2 to play as that Posses character to try to foil Banjos Plans. As player one goes about its business, player two uses every enemy nearby to try to nab Banjo and take away some life. This mode is incredible, and you can control almost every enemy in the game: slot machines, flying creatures, uggers, zubbas...and this is just the beginning. (Congrats Rare Witch Project)","data":["8012B3F2 0001","800810C1 0002"],"options":null},"Disable LoD":{"note":"Makes nests and musical notes fully HD in addition to the stairs in Mayahem Temple leading to Targitzan's area.","data":null,"options":null},"Fly At Anytime":{"note":"","data":["81120010 240E","81120012 0001","81120014 2400","D1081084 0400","81120014 A08E","81120016 0605"],"options":null},"HD Shadows and Banjo Models":{"note":"Uses main models of Banjo,Kazooie,Mumbo and Clockwork Kazooie as their dynamic shadows and forces Banjo models (normal and dragon) to always use best LoD in order to avoid a glitch that would happen without that.","data":["D1117DEA 062B","81117DEA 062A","D1117DEE 0839","81117DEE 0838","D003F428 0080","810A62A4 0C14","D003F428 0080","810A62A6 0000","81500000 2404","81500002 0853","81500004 1464","81500006 000A","81500008 0000","8150000A 0000","8150000C 2404","8150000E 0010","81500010 1144","81500012 0004","81500014 0000","81500016 0000","81500018 2402","8150001A 062A","8150001C 1000","8150001E 0014","81500020 0000","81500022 0000","81500024 2402","81500026 0838","81500028 1000","8150002A 0011","8150002C 0000","8150002E 0000","81500030 2404","81500032 0855","81500034 1464","81500036 0004","81500038 0000","8150003A 0000","8150003C 2402","8150003E 061C","81500040 1000","81500042 000B","81500044 0000","81500046 0000","81500048 2404","8150004A 080A","8150004C 1464","8150004E 0004","81500050 0000","81500052 0000","81500054 2402","81500056 060E","81500058 1000","8150005A 0005","8150005C 0000","8150005E 0000","81500060 2404","81500062 062E","81500064 1464","81500066 0002","81500068 0000","8150006A 0000","8150006C 2402","8150006E 083A","81500070 0040","81500072 2025","81500074 0803","81500076 59D3","81500078 0000","8150007A 0000"],"options":null},"Have Most of the Game Finished":{"note":"Start a new game,when you appear in Spiral Mountain press Top D-Pad. Go to the menu and you will notice all eggs, all moves are available. All the jiggies have been collected. Simply Save and Restart.","data":["5000AC01 0000","80290000 00FF","8029002B 007F","80290063 00FB","80290073 005F","D1081084 0800","8112C770 8029","D1081084 0800","8112C772 0000"],"options":null},"Have\\All Moves":{"note":"Press Top D-pad,Do not use with Have\\All Moves \u0026 Dragon Kazooie Or Have\\Dragon Kazooie","data":["D1081084 0800","8112C770 8029","D1081084 0800","8112C772 0000","81290018 FFFF","8129001A FFFF","8129001C FFFF","8129001E FFFF"],"options":null},"Have\\All Moves \u0026 Dragon Kazooie":{"note":"Press Top D-pad,Do not use with either Have all Moves,Or Have Dragon Kazooie","data":["D1081084 0800","8112C770 8029","D1081084 0800","8112C772 0000","81290018 FFFF","8129001A FFFF","8129001C FFFF","8129001E FFFF","81290078 FFFF","8129007A FFFF"],"options":null},"Have\\Dragon Kazooie":{"note":"Press Top D-pad,Do not use with Have All Modes Or Have All Moves \u0026 Dragon Kazooie","data":["D1081084 0800","8112C770 8029","D1081084 0800","8112C772 0000","81290078 FFFF","8129007A FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["8112B052 42C8"],"options":null},"Infinite\\Eggs, Feathers, All Items":{"note":"","data":["810D1A60 3442","810D1A62 03E7"],"options":null},"Infinite\\Energy\\Banjo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B65F 000A","8011B660 000A"],"options":null},"Infinite\\Energy\\Banjo and Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B644 0A0A"],"options":null},"Infinite\\Energy\\Bee":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B653 000A","8011B654 000A"],"options":null},"Infinite\\Energy\\Detonator":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B66E 0A0A"],"options":null},"Infinite\\Energy\\Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B662 0A0A"],"options":null},"Infinite\\Energy\\Mumbo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B668 0A0A"],"options":null},"Infinite\\Energy\\Snowball":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B647 0005"],"options":null},"Infinite\\Energy\\Stony":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B659 000A","8011B65A 000A"],"options":null},"Infinite\\Energy\\Submarine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B665 000A","8011B666 000A"],"options":null},"Infinite\\Energy\\T-Rex Baby":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B67F 000A","8011B680 000A"],"options":null},"Infinite\\Energy\\Washing Machine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B656 0A0A"],"options":null},"Instant Warp\\Options\\Cauldron Keep":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Cauldron Keep":"015D","Colosseum kickball arena":"0180","Crazy Castle Stockade Jump the hoops multi":"017C","Crazy Castle Stockade balloon burst multi":"017B","Dodgems":"0186","Grunty Industries packing game":"017D","Gun chamber":"0160","Gun room still":"016A","The gatehouse":"015E","Tower of Tragedy Quiz":"015F"}},"Instant Warp\\Options\\Cloud Cuckoo Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Central cavern":"013A","Cloud Cuckoo Land 1":"0136","Cloud Cuckoo Land 2":"0161","Humba wumba's wigwam":"0140","Inside the cheesewedge":"0138","Inside the pot o gold":"013D","Inside the trashcan":"0137","Mingy jongo's skull":"013F","Mumbo's skull":"013E","Trash can mini":"0185","Zubba's nest":"0139","Zubba's nest multi":"0188"}},"Instant Warp\\Options\\Glitter Gulch Mine":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Canary cave":"00DB","Chuffy's cab":"00D0","Crushing shed":"00CB","Flooded caves":"00CC","Fuel depot":"00CA","Generator caverns":"00D3","Gloomy caverns":"00D2","Humba":"00E9","Inside chuffy's boiler boss":"00D1","Mine":"00C7","Mumbo's hut":"00D9","Mumbo's skull":"0171","Ordnance Storage entrance":"0163","Ordnance Storage game":"0164","Ordnance Storage game Multi":"0165","Ordnance storage":"00DC","Power hut":"00D4","Power hut basement":"00CF","Prospectors hut":"00D8","Testing":"0170","Toxic gas cave":"00DA","Train station":"00D7","Water storage":"00CD","Water supply pipe":"0126","Waterfall cavern":"00CE","Wumba's wigwam":"00D5"}},"Instant Warp\\Options\\Grunty Industries":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Basement":"010F","Basement \"repair depot":"0110","Basement \"waste disposal\"":"0111","Elevator shaft":"0105","Floor 2":"0106","Floor 2 \"electromagnet chamber\"":"0107","Floor 3":"0108","Floor 3 \"boiler plant\"":"0109","Floor 3 \"packing room\"":"010A","Floor 4":"010B","Floor 4 \"cable room\"":"010C","Floor 4 \"clinkers cavern\"":"0162","Floor 4 \"quality control\"":"010D","Floor 5":"010E","Inside":"0101","Mumbo's skull":"0172","Outside":"0100","Sewer entrance":"0187","Train station":"0102","Trash compactor":"0104","Water supply pipe":"0125","Workers quarters":"0103"}},"Instant Warp\\Options\\Hailfire Peaks":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Boggy's igloo":"0131","Chilli billi":"012B","Chilly willy":"012C","Colosseum kickball stadium lobby":"012D","Ice train station":"012A","Icicle grotto":"0132","Icy side":"0128","Icy side still":"0168","Inside the volcano":"0133","Lava side":"0127","Lava train station":"0129"}},"Instant Warp\\Options\\Isle O Hags":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Cliff top":"0155","Cliff top Mumbo's skull":"0156","Heggy's egg shed":"0150","Jiggywiggy's temple":"0151","Pine Grove":"0154","Plateau":"0152","Plateau \"Honey B's Hive\"":"0153","Quagmire":"015C","Wooded Hollow":"014F","inside another digger tunnel":"015B","wasteland":"015A"}},"Instant Warp\\Options\\Jinjo Village":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Black Jinjo's House":"0146","Blue Jinjo's House":"0148","Bottles house":"0143","Brown Jinjo's House":"014A","Green Jinjo's House":"0145","Jinjo Village":"0142","King Jingalings throne room":"0144","Orange Jinjo's House":"014B","Purple Jinjo's House":"014C","Red Jinjo's House":"014D","White Jinjo's House":"014E","Yellow Jinjo's House":"0147"}},"Instant Warp\\Options\\Jolly Roger's Lagoon":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Ancient Swimming Baths":"00F4","Atlantis":"01A8","Blubber's wave race hire":"00FF","Electric Eels lair":"00F6","Inside the big fish":"00F8","Jolly Roger's Lagoon":"01A7","Jolly's":"00ED","Pawno's emporium":"00EE","Seabottom":"01A9","Seaweed Sanctum":"00F7","mumbo's skull":"00EF","sea bottom cavern":"0181","submarine multi":"0182","temple of the fishes":"00FA"}},"Instant Warp\\Options\\Mayahem Temple":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Code chamber":"00BC","Humba's Wigwam":"00B6","Inside Targitzans Temple":"0178","Jade Snake Grove":"00C4","Kickball Arena":"00C9","Mayan Kickball Arena":"017F","Multi":"0166","Mumbo's skull":"00B7","Prison Compound":"00B9","Still":"0167","Targitzan Temple Lobby":"0179","Targitzan's Slighty Sacred Temple":"0177","Targitzan's Temple Boss":"017A","The Temple":"00B8","Treasure Chamber":"00C5"}},"Instant Warp\\Options\\Not sure":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Bottles house":"0143","Bottles house still":"0169","HAG Inside":"018A","HAG1 Final Boss":"019A","Humba Wumba's wigwam 1":"0135","Humba Wumba's wigwam 2":"0157","Inside Chuffy's wagon":"0121","Inside the digger tunnel":"0141","Jingalings Zombified Palace":"019B","Lord woo fak fak":"00FC","Mr Patch":"00F9","Mumbo's Skull":"0134","Smuggler cavern":"01A6"}},"Instant Warp\\Options\\Spiral Mountain":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Banjo's house":"0173","Behind The Waterfall":"00AE","Grunty's Old Lair":"00AD","Top Of Castle":"00AF"}},"Instant Warp\\Options\\Terrydacty Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Bonfire caverns":"011B","Chompa's belly multi":"0183","Humba's Wigwam":"011E","Inside chompa's belly":"0123","Inside the mountain":"0116","Oogle boogles cave":"0115","River passage":"0117","Stomping plains":"011A","Styracosaurus family cave":"0118","Terry's nest":"0113","Terrydacty Land":"0112","Train station":"0114","Unga bunga's cave":"0119"}},"Instant Warp\\Options\\Witchy World":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Balloon burst game":"00E4","Cave of horrors":"00EA","Crazy castle lobby":"00E2","Crazy castle pump room":"00E3","Crazy castle stockade":"00E1","Crazy castle stockade \"sop\"":"013B","Dodgem challenge \"1 vs 1\"":"00DE","Dodgem challenge \"2 vs 1\"":"00DF","Dodgem challenge \"3 vs 1\"":"00E0","Dodgem dome lobby":"00DD","Haunted cavern":"00EB","Hoop hurry game":"00E5","Mumbo's skull":"0176","Saucer of Peril":"0124","Star spinner":"00E6","Star spinner \"sop\"":"013C","The inferno":"00E7","Train station":"00EC","Witcy World":"00D6"}},"Monsters dont Hurt Banjo":{"note":"","data":["50002430 0000","80132EF5 0000","50002430 0000","80132EF6 0000","50002430 0000","80132EF7 0000","50002430 0000","80132EF8 0000","50002430 0000","80132EF9 0000"],"options":null},"Multi-Player\\Everyone Infinite All Eggs Multiplayer":{"note":"All blaster modes specifically.[ Thanks retroben, awesome work on this!]","data":["810EA078 0C04","810EA07A 8040","81120100 3C08","81120102 8008","81120104 8108","81120106 4288","81120108 1100","8112010A 0010","8112010C 0000","8112010E 0000","81120110 3C08","81120112 8008","81120114 8D08","81120116 4288","81120118 0008","8112011A 4200","8112011C 0008","8112011E 4202","81120120 0008","81120122 4080","81120124 3C04","81120126 8000","81120128 0104","8112012A 4020","8112012C 3C04","8112012E 2406","81120130 2484","81120132 0064","81120134 AD04","81120136 31C4","81120138 3C04","8112013A 2408","8112013C 2484","8112013E FFFE","81120140 AD04","81120142 31CC","81120144 3C04","81120146 8013","81120148 8C84","8112014A 2DC4","8112014C 0802","8112014E 2098","81120150 0000","81120152 0000"],"options":null},"Multi-Player\\Infinite Health\\Player 1":{"note":"","data":["80135531 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 2":{"note":"","data":["80135535 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 3":{"note":"","data":["80135539 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 4":{"note":"","data":["8013553D 0064"],"options":null},"Play As":{"note":"To use this cheat, put the cheat on, then press L as you walk through a door to become that chosen character. Do not try to use the following character in Banjos house or anywhere as small or you will get stuck and wont be able to continue. Snowball Washing machine Submarine Golden Goliath Truck T-rex baby and T-rex daddy","data":["D0081085 0020","8012704C 00??"],"options":{"Banjo":"0A","Banjo and Kazooie":"01","Bee":"06","Detonator":"0F","Golden Goliath":"0E","Kazooie":"0B","Mumbo":"0D","Snowball":"02","Stony":"08","Submarine":"0C","T-rex baby":"12","T-rex daddy":"13","Truck":"10","Washing machine":"07"}},"Realistic tunnel entrance portals":{"note":"","data":["810F70D4 0C10","810F70D6 4000","81410000 3C0E","81410002 8008","81410004 81CE","81410006 7AD0","81410008 11C0","8141000A 0015","8141000C 0000","8141000E 0000","81410010 3C0E","81410012 8008","81410014 8DCE","81410016 7AD0","81410018 000E","8141001A 7200","8141001C 000E","8141001E 7202","81410020 000E","81410022 7080","81410024 3C05","81410026 8000","81410028 01C5","8141002A 7020","8141002C 2405","8141002E 1000","81410030 A5C5","81410032 0EE4","81410034 A5C5","81410036 0F7C","81410038 A5C5","8141003A 0FA4","8141003C 0005","8141003E 2C00","81410040 34A5","81410042 003E","81410044 ADC5","81410046 0F18","81410048 2402","8141004A 000E","8141004C 00A2","8141004E 2823","81410050 ADC5","81410052 0F50","81410054 2402","81410056 0029","81410058 00A2","8141005A 2823","8141005C ADC5","8141005E 0FF4","81410060 2405","81410062 000E","81410064 0802","81410066 79C7","81410068 0000","8141006A 0000"],"options":null},"Shock Spring At Anytime":{"note":"Press Top D-pad,Do not use with Have\\All Moves Or Have\\Dragon Kazooie","data":["81120018 240E","8112001A 0001","8112001C 2400","D1081084 0800","8112001C A08E","8112001E 0606"],"options":null},"Sixty Frames - fps1":{"note":"","data":["D003F428 0080","810145EC 0C10","D003F428 0080","810145EE 0000","81400000 3C0E","81400002 8009","81400004 81CA","81400006 8C58","81400008 1140","8140000A 0003","8140000C 3C0E","8140000E 8013","81400010 1000","81400012 0005","81400014 0000","81400016 0000","81400018 3C0E","8140001A 8008","8140001C 81CE","8140001E 5B20","81400020 51C0","81400022 0004","81400024 3C0E","81400026 8013","81400028 3C0A","8140002A 8013","8140002C 1000","8140002E 0043","81400030 814A","81400032 C767","81400034 85CE","81400036 8608","81400038 240A","8140003A 016F","8140003C 114E","8140003E 0042","81400040 240A","81400042 0170","81400044 114E","81400046 0040","81400048 240A","8140004A 00C7","8140004C 114E","8140004E 005B","81400050 240A","81400052 00CB","81400054 114E","81400056 0059","81400058 240A","8140005A 01A7","8140005C 114E","8140005E 008E","81400060 240A","81400062 0107","81400064 114E","81400066 0055","81400068 240A","8140006A 0112","8140006C 114E","8140006E 009D","81400070 240A","81400072 0116","81400074 114E","81400076 000F","81400078 240A","8140007A 0128","8140007C 114E","8140007E 008C","81400080 240A","81400082 0101","81400084 114E","81400086 004D","81400088 240A","8140008A 0136","8140008C 114E","8140008E 009C","81400090 240A","81400092 013D","81400094 114E","81400096 0049","81400098 240A","8140009A 0161","8140009C 114E","8140009E 0057","814000A0 240A","814000A2 015F","814000A4 554E","814000A6 000F","814000A8 3C0E","814000AA 8012","814000AC 1000","814000AE 0008","814000B0 3C0E","814000B2 8008","814000B4 3C0E","814000B6 8013","814000B8 81CE","814000BA A9AC","814000BC 240A","814000BE 0002"],"options":null},"Sixty Frames - fps2":{"note":"","data":["814000C0 554E","814000C2 0070","814000C4 3C0E","814000C6 8008","814000C8 1000","814000CA 0069","814000CC 3C0E","814000CE 8008","814000D0 81CE","814000D2 63E0","814000D4 11C0","814000D6 0019","814000D8 240A","814000DA 0001","814000DC 1000","814000DE 0017","814000E0 240A","814000E2 0002","814000E4 81CE","814000E6 7096","814000E8 240A","814000EA 0007","814000EC 554E","814000EE 0013","814000F0 240A","814000F2 0001","814000F4 3C0E","814000F6 8013","814000F8 8DCE","814000FA 5490","814000FC 11C0","814000FE 000F","81400100 240A","81400102 0001","81400104 8DCE","81400106 01A0","81400108 85CE","8140010A 0018","8140010C 240A","8140010E 0357","81400110 154E","81400112 000A","81400114 240A","81400116 0001","81400118 3C0E","8140011A 8013","8140011C 8DCE","8140011E 5490","81400120 ADC0","81400122 0A0C","81400124 ADC0","81400126 0A14","81400128 ADC0","8140012A 0A20","8140012C ADC0","8140012E 0A24","81400130 ADC0","81400132 0A2C","81400134 ADC0","81400136 0A38","81400138 240A","8140013A 0001","8140013C 3C0E","8140013E 8008","81400140 0800","81400142 BCA4","81400144 A1CA","81400146 913F","81400148 3C0E","8140014A 8008","8140014C 81CA","8140014E 6AF8","81400150 5140","81400152 FFFA","81400154 240A","81400156 0001","81400158 8DCE","8140015A 6AF8","8140015C 000E","8140015E 7200","81400160 000E","81400162 7202","81400164 000E","81400166 7080","81400168 3C0A","8140016A 8000","8140016C 01CA","8140016E 7020","81400170 340A","81400172 C040","81400174 A5CA","81400176 15DA","81400178 340A","8140017A 4110","8140017C A5CA","8140017E 15E2","81400180 A5CA","81400182 163E","81400184 340A","81400186 BCF5"],"options":null},"Sixty Frames - fps3":{"note":"","data":["81400188 A5CA","8140018A 15EA","8140018C 340A","8140018E C28F","81400190 A5CA","81400192 15F2","81400194 A5CA","81400196 164E","81400198 340A","8140019A 42C8","8140019C A5CA","8140019E 162E","814001A0 A5CA","814001A2 168A","814001A4 340A","814001A6 4040","814001A8 A5CA","814001AA 1636","814001AC 340A","814001AE 3CF5","814001B0 A5CA","814001B2 1646","814001B4 1000","814001B6 FFE1","814001B8 240A","814001BA 0001","814001BC 3C0E","814001BE 8013","814001C0 81CE","814001C2 A9AC","814001C4 240A","814001C6 0002","814001C8 154E","814001CA 000C","814001CC 3C0E","814001CE 8009","814001D0 81CA","814001D2 9D78","814001D4 1140","814001D6 0009","814001D8 8DCE","814001DA 9D78","814001DC 000E","814001DE 7200","814001E0 000E","814001E2 7202","814001E4 000E","814001E6 7080","814001E8 3C0A","814001EA 8000","814001EC 01CA","814001EE 7020","814001F0 3C0A","814001F2 3E4C","814001F4 354A","814001F6 CCCD","814001F8 ADCA","814001FA 0F6C","814001FC 3C0E","814001FE 8008","81400200 81CA","81400202 6948","81400204 5140","81400206 FFB7","81400208 3C0E","8140020A 8012","8140020C 8DCE","8140020E 6948","81400210 000E","81400212 7200","81400214 000E","81400216 7202","81400218 000E","8140021A 7080","8140021C 3C0A","8140021E 8000","81400220 01CA","81400222 7020","81400224 340A","81400226 C070","81400228 A5CA","8140022A 132E","8140022C 340A","8140022E 4130","81400230 A5CA","81400232 1336","81400234 A5CA","81400236 1392","81400238 340A","8140023A BCF5","8140023C A5CA","8140023E 133E","81400240 340A","81400242 C28F","81400244 A5CA","81400246 1346","81400248 A5CA","8140024A 13A2","8140024C 340A","8140024E 4070"],"options":null},"Sixty Frames - fps4":{"note":"","data":["81400250 A5CA","81400252 138A","81400254 340A","81400256 3CF5","81400258 A5CA","8140025A 139A","8140025C 340A","8140025E 435E","81400260 A5CA","81400262 1382","81400264 A5CA","81400266 13DE","81400268 1000","8140026A FFB4","8140026C 240A","8140026E 0001","81400270 81CA","81400272 7978","81400274 5540","81400276 FFB1","81400278 240A","8140027A 0002","8140027C 1000","8140027E FFCF","81400280 240A","81400282 0001","81400284 81CA","81400286 68E8","81400288 5540","8140028A FFAC","8140028C 240A","8140028E 0002","81400290 1000","81400292 FFAA","81400294 240A","81400296 0001","81400298 3C0E","8140029A 8008","8140029C 81CE","8140029E 2B48","814002A0 11C0","814002A2 FFD6","814002A4 0000","814002A6 0000","814002A8 15C0","814002AA FFC4","814002AC 0000","814002AE 0000","814002B0 3C0E","814002B2 8012","814002B4 81CE","814002B6 7096","814002B8 240A","814002BA 0002","814002BC 114E","814002BE FFBF","814002C0 240A","814002C2 000D","814002C4 154E","814002C6 FFCD","814002C8 0000","814002CA 0000","814002CC 3C0E","814002CE 8008","814002D0 81CE","814002D2 6568","814002D4 11C0","814002D6 FFC9","814002D8 0000","814002DA 0000","814002DC 15C0","814002DE FFB7","814002E0 0000","814002E2 0000"],"options":null},"Sixty Frames - fps5":{"note":"","data":["814002E4 3C0E","814002E6 8013","814002E8 85CE","814002EA 59C8","814002EC 240A","814002EE 0057","814002F0 514E","814002F2 FF92","814002F4 240A","814002F6 0002","814002F8 1000","814002FA FFB0","814002FC 0000","814002FE 0000","81400300 3C0E","81400302 8013","81400304 81CE","81400306 A9AC","81400308 240A","8140030A 0002","8140030C 154E","8140030E FFBB","81400310 0000","81400312 0000","81400314 3C0E","81400316 8012","81400318 81CE","8140031A 7096","8140031C 240A","8140031E 000D","81400320 154E","81400322 FFAB","81400324 3C0E","81400326 8009","81400328 81CA","8140032A 9D78","8140032C 5140","8140032E FF83","81400330 240A","81400332 0001","81400334 1000","81400336 FF81","81400338 240A","8140033A 0002"],"options":null}},"C34304AC-2D79C021-C:45":{"Infinite Lives":{"note":"","data":["8010BCFF 0009"],"options":null},"Invincible":{"note":"","data":["8009F742 0001"],"options":null},"Level Select":{"note":"","data":["D009A913 0000","8009A913 00??"],"options":{"Level 1 - Shaolin Temple - China":"00","Level 2 - Wind Realm":"01","Level 3 - Earth Realm":"02","Level 4 - Water Realm":"03","Level 5 - Fire Ream":"04","Level 6 - Prison":"05","Level 7 - Bridge":"06","Level 8 - Fortress":"07"}},"Max Experience":{"note":"","data":["8111200E FC9A"],"options":null},"Widescreen":{"note":"Minor Clipping Issues","data":["8101B95A C355","8101BA6E 4355","8101AEE6 FF2A","8101AEDE 00D6","8105CC42 FF5E","8105CC14 0004","8105CC16 2080","8105CC18 241B","8105CC1A 0300","8105CC1C 009B","8105CC1E 001B","8105CC20 0000","8105CC22 9012","8105D81C 0003","8105D81E 1880","8105D820 241B","8105D822 0300","8105D824 007B","8105D826 001B","8105D828 0000","8105D82A 9012","8105D84A FF5F","810743E6 FF40","8107455E FF40","8107463E FF40","8107445E FF96","810745D6 FF96","810744C6 FF40","81074874 0003","81074876 1880","81074878 241B","8107487A 0300","8107487C 007B","8107487E 001B","81074880 0000","81074882 8812","810748B6 FF38","81074AEA FF39","81074A78 0004","81074A7A 2080","81074A7C 241B","81074A7E 0300","81074A84 009B","81074A86 001B","81074A88 0000","81074A8A A812","8101B68A FF2B","8101B6F2 00D5","81064366 FF2B","810643AA 00D5","810643E2 00D5","81064432 FF2B","8109F69C FFFF","8109F69E FFCB","8109F6A6 0079","8109F6B6 007A"],"options":null}},"C3B6DE9D-65D2DE76-C:50":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118DA00 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118DA02 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118DA04 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118DA06 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["50000402 0000","8018EE50 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["8016609D 00??","801660CA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["8016617D 00??","801661AA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["8016625D 00??","8016628A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["8016633D 00??","8016636A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["8016641D 00??","8016644A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["801664FD 00??","8016652A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818EF2F 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F6A55 0020","810F6B08 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F6A65 0020","810F78E0 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F6A75 0020","810F86B8 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F6A85 0020","810F9490 4000"],"options":null}},"C3CD76FF-9B9DCBDE-C:44":{"Freeze Enemies":{"note":"","data":["8008EE3B 0012"],"options":null},"Gore Mode":{"note":"","data":["8008EE37 0012"],"options":null},"Infinite\\Lives":{"note":"","data":["8008EE33 0012"],"options":null},"Infinite\\Primery Weapons":{"note":"","data":["8008EE30 0012"],"options":null},"Infinite\\Secondary Weapons":{"note":"","data":["8008EE31 0012"],"options":null},"Infinite\\Solaris":{"note":"Solaris are included in code","data":["8008EE3D 0012"],"options":null},"Infinite\\Titans":{"note":"Titans are included in code","data":["8008EE3C 0012"],"options":null},"Infinite\\Weapon Energy":{"note":"","data":["8008EE32 0012"],"options":null},"Invulnerability":{"note":"","data":["8008EE35 0012"],"options":null},"Level Select":{"note":"Accesses all Missions \u0026 Battle mode","data":["8008EE3E 0012"],"options":null},"One Shot Enemies":{"note":"","data":["8008EE3A 0012"],"options":null},"Psychedelic Mode":{"note":"","data":["8008EE39 0012"],"options":null},"Stealth Mode":{"note":"","data":["8008EE34 0012"],"options":null},"Turbo Mode":{"note":"","data":["8008EE38 0012"],"options":null},"Wireframe Mode":{"note":"","data":["8008EE36 0012"],"options":null}},"C3E7E29E-5D7251CC-C:50":{"99 Points Player 1":{"note":"","data":["8010C33F 0063"],"options":null},"Access All\\Cars \u0026 Tracks":{"note":"","data":["8104ADF6 0001"],"options":null},"Access All\\Cups":{"note":"","data":["8005444B 0003","8005442D 0000","8005442E 0000","8005442F 0000","80054477 0003","80054459 0000","8005445A 0000","8005445B 0000","800544A3 0003","80054485 0000","80054486 0000","80054487 0000"],"options":null},"Always 1st":{"note":"","data":["811157AE 0001","811157B6 0000","8110C33E 03E7"],"options":null},"Drones Have No Weapons":{"note":"","data":["8111CECE 0000"],"options":null},"Infinite Continues":{"note":"","data":["8110C332 0006"],"options":null},"Infinite Weapons\\Player 1":{"note":"","data":["81115798 0000","8111579A 00??","8111579E 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 2":{"note":"","data":["81117C60 0000","81117C62 00??","81117C66 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 3":{"note":"","data":["8111A128 0000","8111A12A 00??","8111A12E 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 4":{"note":"","data":["8111C5F0 0000","8111C5F2 00??","8111C5F6 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Laps To Race":{"note":"","data":["8107DD1E 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Number Of Drones In The Race":{"note":"","data":["8110FFF6 00??"],"options":{"1 Drone":"01","2 Drones":"02","3 Drones":"03","4 Drones":"04","5 Drones":"05","6 Drones":"06","7 Drones":"07","8 Drones":"08","9 Drones":"09"}}},"C3F19159-65D2BC5A-C:50":{"Number Of Goals Player 1":{"note":"","data":["80119043 00??"],"options":{"1 Goal":"01","10 Goals":"0A","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08","9 Goals":"09"}},"Number Of Goals Player 2":{"note":"","data":["80119047 00??"],"options":{"1 Goal":"01","10 Goals":"0A","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08","9 Goals":"09"}}},"C43E23A7-40B1681A-C:45":{"Infinite\\Balls":{"note":"","data":["800ABFB7 0000"],"options":null},"Infinite\\Character Creation Points":{"note":"","data":["800E2C31 00B0"],"options":null},"Infinite\\Outs":{"note":"","data":["800ABFBB 0000"],"options":null},"Infinite\\Strikes":{"note":"","data":["800ABFB9 0000"],"options":null},"Max\\Character Creation Accuracy":{"note":"","data":["810E2BF0 4170"],"options":null},"Max\\Character Creation Arm Strength":{"note":"","data":["810E2C20 4170"],"options":null},"Max\\Character Creation Bunting":{"note":"","data":["810E2C0C 4170"],"options":null},"Max\\Character Creation Clutch":{"note":"","data":["810E2BF4 4170"],"options":null},"Max\\Character Creation Clutch 2":{"note":"","data":["810E2C28 4170"],"options":null},"Max\\Character Creation Contact":{"note":"","data":["810E2BFC 4170"],"options":null},"Max\\Character Creation Defense":{"note":"","data":["810E2C1C 4170"],"options":null},"Max\\Character Creation Power":{"note":"","data":["810E2C00 4170"],"options":null},"Max\\Character Creation Speed":{"note":"","data":["810E2C18 4170"],"options":null},"Max\\Character Creation Streak":{"note":"","data":["810E2C24 4170"],"options":null},"Max\\Character Creation VS LHB":{"note":"","data":["810E2C10 4170"],"options":null},"Max\\Character Creation VS RHB":{"note":"","data":["810E2C14 4170"],"options":null},"Max\\Character Creation VS. LHP":{"note":"","data":["810E2C04 4170"],"options":null},"Max\\Character Creation VS. RHP":{"note":"","data":["810E2C08 4170"],"options":null}},"C49ADCA2-F1501B62-C:45":{"Always Have\\99 points":{"note":"","data":["8015FD09 0063"],"options":null},"Always first position":{"note":"","data":["80162A80 0001"],"options":null},"Only race one lap":{"note":"","data":["8015FC35 0001"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D01A10B5 0010","81162F28 4077","D01A10B5 0010","81162F30 4077"],"options":null}},"C5674160-0F5F453C-C:50":{"Lower Left Character\\Coin Options":{"note":"","data":["810D1002 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDAED 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800D1006 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["810D103A 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDB39 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800D103E 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["810D0F92 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDA55 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800D0F96 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["810D0FCA 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDAA1 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800D0FCE 00??"],"options":{"0 Stars":"00","99 Stars":"64"}}},"C71353BE-AA09A6EE-C:50":{"Always Normal Spirit\\Player 1":{"note":"","data":["801671F5 0032"],"options":null},"Always Normal Spirit\\Player 2":{"note":"","data":["80167689 0032"],"options":null},"Always Normal Spirit\\Player 3":{"note":"","data":["80167B1D 0032"],"options":null},"Always Normal Spirit\\Player 4":{"note":"","data":["80167FB1 0032"],"options":null},"Always Special\\Player 1":{"note":"","data":["80167235 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["801676C9 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["80167B5D 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["80167FF1 0004"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 1":{"note":"","data":["801671F4 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 2":{"note":"","data":["80167688 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 3":{"note":"","data":["80167B1C 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 4":{"note":"","data":["80167FB0 0064"],"options":null},"Have All Characters":{"note":"","data":["8109ED5A FFFF"],"options":null},"Infinite Create-A-Wrestler Attribute Points":{"note":"","data":["8011A81B 001E"],"options":null},"Max Attributes":{"note":"","data":["8011A811 0032","8011A813 0032","8011A815 0032","8011A817 0032","8011A819 0032"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["801671F5 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["80167689 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["80167B1D 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["80167FB1 00FF"],"options":null},"No Spirit\\Player 1":{"note":"","data":["801671F5 0000"],"options":null},"No Spirit\\Player 2":{"note":"","data":["80167689 0000"],"options":null},"No Spirit\\Player 3":{"note":"","data":["80167B1D 0000"],"options":null},"No Spirit\\Player 4":{"note":"","data":["80167FB1 0000"],"options":null},"Specials Don't Run Out":{"note":"","data":["8112AD94 2400"],"options":null},"Timer Is Always 00:00":{"note":"","data":["8016F0AF 0000"],"options":null},"Ultimate Codes\\Player 1":{"note":"","data":["801671F4 0064"],"options":null},"Ultimate Codes\\Player 2":{"note":"","data":["80167688 0064"],"options":null},"Ultimate Codes\\Player 3":{"note":"","data":["80167B1C 0064"],"options":null},"Ultimate Codes\\Player 4":{"note":"","data":["80167FB0 0064"],"options":null},"Weapon Select\\Player 1":{"note":"","data":["81167236 0300","81166D90 ????","81166D92 0000","80166E50 0000"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 2":{"note":"","data":["811676CA 0300","81166DC0 ????","80166DC2 0001","80166E51 0001"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 3":{"note":"","data":["81167B5E 0300","81166DF0 ????","80166DF2 0002","80166E52 0002"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 4":{"note":"","data":["81167FF2 0300","81166E18 ????","81166E1A 0003","80166E53 0003"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}}},"C7C98F8E-42145DDE-C:45":{"Allways 1st":{"note":"","data":["8111D7EA 0000"],"options":null},"Have All\\Cars \u0026 Cups\\Player 1":{"note":"","data":["81124A0A FFFF"],"options":null},"Have All\\Cars \u0026 Cups\\Player 2":{"note":"","data":["81124B4A FFFF"],"options":null},"Have All\\Special Cars\\Player 1":{"note":"","data":["81124A04 FFFF","81124A06 FFFF","81124A0A FFFF"],"options":null},"Have All\\Special Cars\\Player 2":{"note":"","data":["81124B44 FFFF","81124B46 FFFF","81124B4A FFFF"],"options":null},"Have All\\Tracks":{"note":"","data":["81124A0E FFFF"],"options":null},"Infinite Turbos\\Player 1":{"note":"","data":["80118CFC 000A"],"options":null},"Infinite Turbos\\Player 2":{"note":"","data":["80119478 000A"],"options":null},"Max Tournament Points":{"note":"","data":["81124A16 00FF"],"options":null},"Press L For Time Is Always 0:00:00\\Player 1":{"note":"","data":["D0137FE5 0020","810F3900 0000","D0137FE5 0020","810F3902 0000"],"options":null},"Press L For Time Is Always 0:00:00\\Player 2":{"note":"","data":["D0137FED 0020","810F3900 0000","D0137FED 0020","810F3902 0000"],"options":null},"Start On Lap Modifier\\Player 1":{"note":"","data":["D0118AA8 0000","80118AA8 00??"],"options":{"1st":"00","2nd":"01","3rd":"02","4th":"03"}},"Start On Lap Modifier\\Player 2":{"note":"","data":["D0119224 0000","80119224 00??"],"options":{"1st":"00","2nd":"01","3rd":"02","4th":"03"}}},"C83CEB83-FDC56219-C:50":{"Always 1st":{"note":"","data":["8022CC16 0001"],"options":null},"Class Select":{"note":"This code is useful because you can play Class AA without having to beat a level!\u0026 then once any edit is done while the game is running","data":["8021C297 00??"],"options":{"1 Play":"04","2 Play":"05","3 Play":"06","4 Play":"07","Class AA":"03","Class B":"01","Class C":"00"}},"Super Speed":{"note":"This is Turbo fast,So to slow it down a little more keep the B button pressed down","data":["81228FA8 4800"],"options":null}},"C851961C-78FCAAFA-C:45":{"Choose Vehicle":{"note":"Make your Choice \u0026 then Press GS To Activate,But do not use with any other Press GS Cheat Codes.","data":["883626A7 00??"],"options":{"Birdman":"06","Cannonball":"03","Gyrocopter":"02","Hang Glider":"00","Jumble Hopper":"05","Rocket Belt":"01","Skydiving":"04"}},"Fly As Gray Plane In USA Level":{"note":"Press GS To Activate,But do not use with any other Press GS Cheat Codes.","data":["89362748 0008","813627B0 3F30","8024CDF5 006E"],"options":null},"Fly As Yellow Plane In USA Level":{"note":"Press GS To Activate,But do not use with any other Press GS Cheat Codes.","data":["89362748 0009","813627B0 3EE0","8024CDF5 006E"],"options":null},"Have Perfect Score in all Class \u0026 Level's":{"note":"With these codes, if you want them to save, you have to play a level, and lose and just choose quit after it tallies up your score. Also dont keep the code active once you save the level at 100%, turn the code off and continue with the other levels!","data":["8036427D 0064","803642AD 0064","803642DD 0064","80364911 0064","80364A61 0064","80364941 0064","80364A91 0064","80364971 0064","80364AC1 0064","80364FA5 0064","803650F5 0064","80365245 0064","80364FD5 0064","80365125 0064","80365275 0064","80365005 0064","80365155 0064","803652A5 0064","80365639 0064","80365789 0064","803658D9 0064","80365669 0064","803657B9 0064","80365909 0064","80365699 0064","803657E9 0064","80365939 0064","8036430D 0019","8036445D 0019","803645AD 0019","803646FD 0019","8036433D 0064","8036436D 0064","803649A1 0019","80364AF1 0019","80364C41 0019","80364D91 0019","803649D1 0064","80364A01 0064","80365035 0019","80365185 0019","803652D5 0019","80365425 0019","80365065 0064","80365095 0064"],"options":null},"Infinite Fuel\\Gyrocopter":{"note":"","data":["80362821 0081"],"options":null},"Infinite Fuel\\Rocket Belt":{"note":"","data":["80362841 0081"],"options":null},"Time Always 00'00'10":{"note":"This Cheat code is for All Events","data":["80362750 0001"],"options":null}},"C8BB4DD9-CC5F430B-C:45":{"Have All Elements":{"note":"","data":["8107BAA4 3232","8107BAA6 3232"],"options":null},"Infinite Health":{"note":"","data":["8107BA84 01F4","8107BA86 01F4"],"options":null},"Infinite Magic Points":{"note":"","data":["8107BA88 01F4","8107BA8A 01F4"],"options":null},"Super Agility":{"note":"","data":["8107BA8E 01F4"],"options":null},"Super Defense":{"note":"","data":["8107BA8C 01F4"],"options":null}},"C8DC65EB-3D8C8904-C:45":{"Always 1st":{"note":"","data":["812C4C96 0001"],"options":null},"Have All\\Boats":{"note":"","data":["812B5CA2 0101","812B5CA4 0101","812B5CA6 0101","812B5CA8 0101","812B5CAA 0101","812B5CAC 0101","812B5CAE 0101"],"options":null},"Have All\\Races":{"note":"","data":["812B5C94 0101","812B5C96 0101","812B5C98 0101","812B5C9A 0101","812B5C9C 0101","812B5C9E 0101","812B5CA0 0101"],"options":null},"Hydro Speedway":{"note":"","data":["802B5C94 00??"],"options":{"Unlocked \u0026 Completed":"03","Unlocked \u0026 Not Completed":"01"}},"Infinite\\Boosts\\Player 1":{"note":"","data":["812C4C9C 4190"],"options":null},"Infinite\\Boosts\\Player 2":{"note":"","data":["812C4FCC 4190"],"options":null},"Infinite\\Time":{"note":"","data":["812B4890 42C8"],"options":null}},"C9176D39-EA4779D1-C:50":{"Beta Bottles Revenge Mode":{"note":"Bottles Revenge is a Beta mode from Banjo Tooie that the RWP team recently uncovered after an extraordinary amount of effort. Bottles the Spirit transforms into Bottles the Devil and posses enemies nearby and allows a second player hooked up to Pad 2 to play as that Posses character to try to foil Banjos Plans. As player one goes about its business, player two uses every enemy nearby to try to nab Banjo and take away some life. This mode is incredible, and you can control almost every enemy in the game: slot machines, flying creatures, uggers, zubbas...and this is just the beginning. (Congrats Rare Witch Project)","data":["80130402 0001","8008B4D1 0002"],"options":null},"Have\\All Moves":{"note":"Press Top D-pad,Do not use with Have\\All Moves \u0026 Dragon Kazooie Or Have\\Dragon Kazooie","data":["D1083F08 0800","811314F0 8029","D1083F08 0800","811314F2 0000","81290018 FFFF","8129001A FFFF","8129001C FFFF","8129001E FFFF"],"options":null},"Have\\All Moves \u0026 Dragon Kazooie":{"note":"Press Top D-pad,Do not use with Have\\All Moves Or Have\\Dragon Kazooie","data":["D1083F08 0800","811314F0 8029","D1083F08 0800","811314F2 0000","81290018 FFFF","8129001A FFFF","8129001C FFFF","8129001E FFFF","81290078 FFFF","8129007A FFFF"],"options":null},"Have\\Dragon Kazooie":{"note":"","data":["D1083F08 0800","811314F0 8029","D1083F08 0800","811314F2 0000","81290078 FFFF","8129007A FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["8112FFD2 42C8"],"options":null},"Infinite\\Energy\\Banjo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207AF 000A","801207B0 000A"],"options":null},"Infinite\\Energy\\Banjo and Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0A0A","81120794 0A0A"],"options":null},"Infinite\\Energy\\Bee":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207A3 000A","801207A4 000A"],"options":null},"Infinite\\Energy\\Detonator":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","811207BE 0A0A"],"options":null},"Infinite\\Energy\\Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","811207B2 0A0A"],"options":null},"Infinite\\Energy\\Mumbo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","811207B8 0A0A"],"options":null},"Infinite\\Energy\\Snowball":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","80120797 0005"],"options":null},"Infinite\\Energy\\Stony":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207A9 000A","8011B65A 000A"],"options":null},"Infinite\\Energy\\Submarine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207B5 000A","801207B6 000A"],"options":null},"Infinite\\Energy\\T-Rex Baby":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207CF 000A","801207D0 000A"],"options":null},"Infinite\\Energy\\Washing Machine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","811207A6 0A0A"],"options":null},"Instant Warp\\Options\\Cauldron Keep":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Cauldron Keep":"015D","Colosseum kickball arena":"0180","Crazy Castle Stockade Jump the hoops multi":"017C","Crazy Castle Stockade balloon burst multi":"017B","Dodgems":"0186","Grunty Industries packing game":"017D","Gun chamber":"0160","Gun room still":"016A","The gatehouse":"015E","Tower of Tragedy Quiz":"015F"}},"Instant Warp\\Options\\Cloud Cuckoo Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Central cavern":"013A","Cloud Cuckoo Land 1":"0136","Cloud Cuckoo Land 2":"0161","Humba wumba's wigwam":"0140","Inside the cheesewedge":"0138","Inside the pot o gold":"013D","Inside the trashcan":"0137","Mingy jongo's skull":"013F","Mumbo's skull":"013E","Trash can mini":"0185","Zubba's nest":"0139","Zubba's nest multi":"0188"}},"Instant Warp\\Options\\Glitter Gulch Mine":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Canary cave":"00DB","Chuffy's cab":"00D0","Crushing shed":"00CB","Flooded caves":"00CC","Fuel depot":"00CA","Generator caverns":"00D3","Gloomy caverns":"00D2","Humba":"00E9","Inside chuffy's boiler boss":"00D1","Mine":"00C7","Mumbo's hut":"00D9","Mumbo's skull":"0171","Ordnance Storage entrance":"0163","Ordnance Storage game":"0164","Ordnance Storage game Multi":"0165","Ordnance storage":"00DC","Power hut":"00D4","Power hut basement":"00CF","Prospectors hut":"00D8","Testing":"0170","Toxic gas cave":"00DA","Train station":"00D7","Water storage":"00CD","Water supply pipe":"0126","Waterfall cavern":"00CE","Wumba's wigwam":"00D5"}},"Instant Warp\\Options\\Grunty Industries":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Basement":"010F","Basement \"repair depot":"0110","Basement \"waste disposal\"":"0111","Elevator shaft":"0105","Floor 2":"0106","Floor 2 \"electromagnet chamber\"":"0107","Floor 3":"0108","Floor 3 \"boiler plant\"":"0109","Floor 3 \"packing room\"":"010A","Floor 4":"010B","Floor 4 \"cable room\"":"010C","Floor 4 \"clinkers cavern\"":"0162","Floor 4 \"quality control\"":"010D","Floor 5":"010E","Inside":"0101","Mumbo's skull":"0172","Outside":"0100","Sewer entrance":"0187","Train station":"0102","Trash compactor":"0104","Water supply pipe":"0125","Workers quarters":"0103"}},"Instant Warp\\Options\\Hailfire Peaks":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Boggy's igloo":"0131","Chilli billi":"012B","Chilly willy":"012C","Colosseum kickball stadium lobby":"012D","Ice train station":"012A","Icicle grotto":"0132","Icy side":"0128","Icy side still":"0168","Inside the volcano":"0133","Lava side":"0127","Lava train station":"0129"}},"Instant Warp\\Options\\Isle O Hags":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Cliff top":"0155","Cliff top Mumbo's skull":"0156","Heggy's egg shed":"0150","Jiggywiggy's temple":"0151","Pine Grove":"0154","Plateau":"0152","Plateau \"Honey B's Hive\"":"0153","Quagmire":"015C","Wooded Hollow":"014F","inside another digger tunnel":"015B","wasteland":"015A"}},"Instant Warp\\Options\\Jinjo Village":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Black Jinjo's House":"0146","Blue Jinjo's House":"0148","Bottles house":"0143","Brown Jinjo's House":"014A","Green Jinjo's House":"0145","Jinjo Village":"0142","King Jingalings throne room":"0144","Orange Jinjo's House":"014B","Purple Jinjo's House":"014C","Red Jinjo's House":"014D","White Jinjo's House":"014E","Yellow Jinjo's House":"0147"}},"Instant Warp\\Options\\Jolly Roger's Lagoon":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Ancient Swimming Baths":"00F4","Atlantis":"01A8","Blubber's wave race hire":"00FF","Electric Eels lair":"00F6","Inside the big fish":"00F8","Jolly Roger's Lagoon":"01A7","Jolly's":"00ED","Pawno's emporium":"00EE","Seabottom":"01A9","Seaweed Sanctum":"00F7","mumbo's skull":"00EF","sea bottom cavern":"0181","submarine multi":"0182","temple of the fishes":"00FA"}},"Instant Warp\\Options\\Mayahem Temple":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Code chamber":"00BC","Humba's Wigwam":"00B6","Inside Targitzans Temple":"0178","Jade Snake Grove":"00C4","Kickball Arena":"00C9","Mayan Kickball Arena":"017F","Multi":"0166","Mumbo's skull":"00B7","Prison Compound":"00B9","Still":"0167","Targitzan Temple Lobby":"0179","Targitzan's Slighty Sacred Temple":"0177","Targitzan's Temple Boss":"017A","The Temple":"00B8","Treasure Chamber":"00C5"}},"Instant Warp\\Options\\Not sure":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Bottles house":"0143","Bottles house still":"0169","HAG Inside":"018A","HAG1 Final Boss":"019A","Humba Wumba's wigwam 1":"0135","Humba Wumba's wigwam 2":"0157","Inside Chuffy's wagon":"0121","Inside the digger tunnel":"0141","Jingalings Zombified Palace":"019B","Lord woo fak fak":"00FC","Mr Patch":"00F9","Mumbo's Skull":"0134","Smuggler cavern":"01A6"}},"Instant Warp\\Options\\Spiral Mountain":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Banjo's house":"0173","Behind The Waterfall":"00AE","Grunty's Old Lair":"00AD","Top Of Castle":"00AF"}},"Instant Warp\\Options\\Terrydacty Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Bonfire caverns":"011B","Chompa's belly multi":"0183","Humba's Wigwam":"011E","Inside chompa's belly":"0123","Inside the mountain":"0116","Oogle boogles cave":"0115","River passage":"0117","Stomping plains":"011A","Styracosaurus family cave":"0118","Terry's nest":"0113","Terrydacty Land":"0112","Train station":"0114","Unga bunga's cave":"0119"}},"Instant Warp\\Options\\Witchy World":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Balloon burst game":"00E4","Cave of horrors":"00EA","Crazy castle lobby":"00E2","Crazy castle pump room":"00E3","Crazy castle stockade":"00E1","Crazy castle stockade \"sop\"":"013B","Dodgem challenge \"1 vs 1\"":"00DE","Dodgem challenge \"2 vs 1\"":"00DF","Dodgem challenge \"3 vs 1\"":"00E0","Dodgem dome lobby":"00DD","Haunted cavern":"00EB","Hoop hurry game":"00E5","Mumbo's skull":"0176","Saucer of Peril":"0124","Star spinner":"00E6","Star spinner \"sop\"":"013C","The inferno":"00E7","Train station":"00EC","Witcy World":"00D6"}},"Multi-Player\\Infinite Health\\Player 1":{"note":"","data":["8013A541 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 2":{"note":"","data":["8013A545 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 3":{"note":"","data":["8013A549 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 4":{"note":"","data":["8013A54D 0064"],"options":null},"Play As":{"note":"To use this cheat, put the cheat on, then press L as you walk through a door to become that chosen character","data":["D008B494 0020","8012BFAC 00??"],"options":{"Banjo":"0A","Banjo and Kazooie":"01","Bee":"06","Detonator":"0F","Golden Goliath":"0E","Kazooie":"0B","Mumbo":"0D","Snowball":"02","Stony":"08","Submarine":"0C","T-rex baby":"12","T-rex daddy":"13","Truck":"10","Washing machine":"07"}}},"C9C3A987-5810344C-C:4A":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118A080 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118A082 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118A084 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118A086 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["8018B4D8 00??","8018B4D9 00??","8018B4DA 00??","8018B4DB 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["8016271D 00??","8016274A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["801627FD 00??","8016282A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["801628DD 00??","8016290A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["801629BD 00??","801629EA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["80162A9D 00??","80162ACA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["80162B7D 00??","80162BAA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818B5BF 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F61B5 0020","810F6268 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F61C5 0020","810F7040 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F61D5 0020","810F7E18 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F61E5 0020","810F8BF0 4000"],"options":null},"Sixty Frames":{"note":"Single player only for now.","data":["80000FC3 0000","800014AF 0001"],"options":null}},"CA12B547-71FA4EE4-C:45":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2212 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE51F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80382CB7 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","802020F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801DDC55 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801FC5C5 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801EF96D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","80202225 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801D9ABD 0001"],"options":null},"Widescreen":{"note":"","data":["8101C7A0 0801","8101C7A2 0F84","81043E10 3C1B","81043E12 3F40","81043E14 449B","81043E16 2000","81043E18 0800","81043E1A 71EA","81043E1C 4604","81043E1E 4202","D10A80A6 A113","810B0518 4300"],"options":null}},"CA1BB86F-41CCA5C5-C:4A":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D55E0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112CF2E 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800EB470 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D55C0 0001","50001701 0000","800D55C8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D5850 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D5889 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D55B9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D55BA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D55BB 0003"],"options":null}},"CA2A7444-71DAB71C-C:50":{"Always Place 1st":{"note":"","data":["80152D61 0000"],"options":null},"Have All\\Cars":{"note":"","data":["50001504 0000","800AAD4B 0001"],"options":null},"Have All\\Tracks":{"note":"","data":["8116A0EC FFFF"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D01354BF 0010","8112CE6C 43CB"],"options":null}},"CB93DB97-7F5C63D5-C:46":{"Have 99 coins":{"note":"","data":["810BBBDE 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C8542 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BBBCC 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BBBD6 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BBBDA 0009"],"options":null}},"CBFE69C7-F2C0AB2A-C:45":{"Access Level Select":{"note":"On the main menu Scroll down to make CHEATS visible to go into Level Select.For in-Game Cheats,Pause gameplay.","data":["810DD21C 8001"],"options":null},"Have\\All TARZAN Letters":{"note":"","data":["800DD225 00FF"],"options":null},"Have\\Coins Collected 100%":{"note":"","data":["800DD257 0064"],"options":null},"Have\\Full Portrait":{"note":"","data":["800DD224 00FF"],"options":null},"Have\\Level \u0026 Tokens Completed 100%":{"note":"","data":["800DD22F 0000","800DD230 0001","800DD231 0000"],"options":null},"Infinite\\Bonus Timer":{"note":"This is For All Timers on Bonus Levels","data":["801735FE 0025"],"options":null},"Infinite\\Green Weapon":{"note":"","data":["81192096 0063"],"options":null},"Infinite\\Health":{"note":"","data":["811921C0 0120"],"options":null},"Infinite\\Lives":{"note":"","data":["800DD252 00??"],"options":{"3 Lives":"03","99 Lives":"63"}},"Infinite\\Purple Weapon":{"note":"","data":["8119209A 0063"],"options":null},"Infinite\\Red Weapon":{"note":"","data":["81192098 0063"],"options":null},"Press GS For\\Sabor Attacks\\Sabor 1 Hit Kill":{"note":"","data":["8924A23E 0001"],"options":null}},"CCEB3858-26952D97-C:50":{"Have 99 Coins":{"note":"","data":["810BB4FE 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C7E62 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BB4EC 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BB4F6 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BB4FA 0009"],"options":null}},"CCEDB696-D3883DB4-C:4A":{"All Items":{"note":"","data":["50002402 0202","810EC7E0 0001","50004601 0000","800EC861 0003"],"options":null},"Item Modifier Codes\\Position 01":{"note":"","data":["800EC7E0 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 02":{"note":"","data":["800EC7E1 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 03":{"note":"","data":["800EC7E2 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 04":{"note":"","data":["800EC7E3 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 05":{"note":"","data":["800EC7E4 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 06":{"note":"","data":["800EC7E5 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 07":{"note":"","data":["800EC7E6 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 08":{"note":"","data":["800EC7E7 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 09":{"note":"","data":["800EC7E8 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 10":{"note":"","data":["800EC7E9 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 11":{"note":"","data":["800EC7EA 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 12":{"note":"","data":["800EC7EB 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 13":{"note":"","data":["800EC7EC 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 14":{"note":"","data":["800EC7ED 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 15":{"note":"","data":["800EC7EE 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 16":{"note":"","data":["800EC7EF 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 17":{"note":"","data":["800EC7F0 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 18":{"note":"","data":["800EC7F1 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 19":{"note":"","data":["800EC7F2 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 20":{"note":"","data":["800EC7F3 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 21":{"note":"","data":["800EC7F4 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 22":{"note":"","data":["800EC7F5 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 23":{"note":"","data":["800EC7F6 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 24":{"note":"","data":["800EC7F7 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 25":{"note":"","data":["800EC7F8 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 26":{"note":"","data":["800EC7F9 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 27":{"note":"","data":["800EC7FA 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 28":{"note":"","data":["800EC7FB 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 29":{"note":"","data":["800EC7FC 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 30":{"note":"","data":["800EC7FD 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 31":{"note":"","data":["800EC7FE 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 32":{"note":"","data":["800EC7FF 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 33":{"note":"","data":["800EC800 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 34":{"note":"","data":["800EC801 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 35":{"note":"","data":["800EC802 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 36":{"note":"","data":["800EC803 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 37":{"note":"","data":["800EC804 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 38":{"note":"","data":["800EC805 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 39":{"note":"","data":["800EC806 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 40":{"note":"","data":["800EC807 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 41":{"note":"","data":["800EC808 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 42":{"note":"","data":["800EC809 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 43":{"note":"","data":["800EC80A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 44":{"note":"","data":["800EC80B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 45":{"note":"","data":["800EC80C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 46":{"note":"","data":["800EC80D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 47":{"note":"","data":["800EC80E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 48":{"note":"","data":["800EC80F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}}},"CD538CE4-618AFCF9-C:45":{"Have 6 Carrots":{"note":"","data":["80164519 007E"],"options":null},"Have All\\Collectibles\\Stage 1":{"note":"","data":["80164510 0014"],"options":null},"Have All\\Collectibles\\Stage 2":{"note":"","data":["80164511 0014"],"options":null},"Have All\\Collectibles\\Stage 3":{"note":"","data":["80164512 0014"],"options":null},"Have All\\Collectibles\\Stage 4":{"note":"","data":["80164513 0014"],"options":null},"Have All\\Collectibles\\Stage 5":{"note":"","data":["80164514 0014"],"options":null},"Have All\\Collectibles\\Stage 6":{"note":"","data":["80164515 0014"],"options":null},"Have All\\Costumes":{"note":"","data":["8016451A 00FE"],"options":null},"Have All\\Levels":{"note":"","data":["80164508 003F"],"options":null},"Infinite Health":{"note":"","data":["8018BA7D 000F"],"options":null},"Max Collectable Items":{"note":"","data":["80164501 0014"],"options":null},"Press L To levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D018BAB5 0020","8118B9E0 4200"],"options":null}},"CD5BEC0F-86FD1008-C:45":{"Extra Characters":{"note":"","data":["8113A488 1000","8113A48A 07FF","8113A48C 2000","8113A48E 3FFF"],"options":null},"Infinite Creation Points":{"note":"","data":["80136245 0000"],"options":null}},"CD7559AC-B26CF5AE-C:45":{"16:9 Widescreen":{"note":"For 16:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["8127683C 4334","81276840 4334","81274B74 3FE6"],"options":null},"21:9 Widescreen":{"note":"For 21:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["8127683C 4334","81276840 4334","81274B74 4019"],"options":null},"Access All Moves":{"note":"","data":["8037C3A0 0001","8037C3A1 007F","8037C3A2 00FF","8037C3A3 00FF"],"options":null},"Character Select":{"note":"When Mumbo transforms you hold:C-Up for the Termite,C-Right for the Pumpkin,C-Down for the Walrus,C-Left for the Crocc,R for the Bumble Bee,L for the Washing Machine,Press nothing to turn into Banjo","data":["D0281251 0008","8037C2D3 0002","D0281251 0001","8037C2D3 0003","D0281251 0004","8037C2D3 0004","D0281251 0002","8037C2D3 0005","D0281251 0010","8037C2D3 0006","D0281251 0020","8037C2D3 0007"],"options":null},"Do Shock Spring Jump From Anywhere":{"note":"Press A Button. Do not use with Take Off And Fly From Anywhere","data":["8037C1D2 0002"],"options":null},"Game 100% Complete":{"note":"","data":["8137C3A0 001F","50000302 0000","8137C3A2 FFFF","50000602 0000","813832C0 FFFF","81383FCA 0064","81383FDC 0064","50000802 0000","813832F0 FFFF","81385FA0 0063","81385FC4 0063","81385FF0 0064","50000602 0000","81385FF2 6464","50001002 0000","813831A8 FFFF","813831B0 FF7F","813831B2 FFB0","813831B4 3DA6","813831B6 F264","813831C6 FF7F"],"options":null},"Have Zero Time all Levels":{"note":"","data":["50000B04 0000","81386004 3000"],"options":null},"Infinite\\Air":{"note":"","data":["813851AE 0E10"],"options":null},"Infinite\\Always Have All Jinjos":{"note":"","data":["80385F7B 00FF"],"options":null},"Infinite\\Eggs":{"note":"","data":["80385F67 00FF"],"options":null},"Infinite\\Gold Feathers":{"note":"","data":["80385F73 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["803851A3 0008"],"options":null},"Infinite\\Jiggies":{"note":"","data":["80385FCB 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["80385F8B 00FF"],"options":null},"Infinite\\Mumbo Tokens":{"note":"","data":["80385FC6 00FF","80385FA2 00FF"],"options":null},"Infinite\\Notes":{"note":"Just collect one Note to Have 255 Notes in all Worlds.","data":["80385FF2 00FF","80385F62 0001"],"options":null},"Infinite\\Red Feathers":{"note":"","data":["80385F6F 00FF"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0281251 0020","8137C4BC 43E0"],"options":null},"Secret Items":{"note":"","data":["81283400 ????"],"options":{"Have All Collected":"FFFF","Have None":"0000"}},"Take Off And Fly From Anywhere":{"note":"Press A Button. Do not use with Do Shock Spring Jump From Anywhere","data":["8037C1D1 0002"],"options":null}},"CEA8B54F-7F21D503-C:45":{"Always Berserk Mode":{"note":"","data":["801BF9AF 00FF"],"options":null},"Always Drop\\Player 1":{"note":"","data":["801BF9BB 00??"],"options":{"Bar":"00","Big Water":"06","Bomb":"0A","Corner":"02","Down Bar":"05","Down Square":"04","Fireball":"0B","Medium Water":"07","Small Water":"08","Smallest Water":"09","Square":"03","T":"01"}},"Always Drop\\Player 2":{"note":"","data":["801F013B 00??"],"options":{"Bar":"00","Big Water":"06","Bomb":"0A","Corner":"02","Down Bar":"05","Down Square":"04","Fireball":"0B","Medium Water":"07","Small Water":"08","Smallest Water":"09","Square":"03","T":"01"}},"Always Empty Drain":{"note":"","data":["801BF991 0000","811BF992 0000","811BF994 0000"],"options":null},"Infinite Ducks":{"note":"","data":["801BF94B 0009"],"options":null},"Infinite Lakes":{"note":"","data":["811BF93E 0009"],"options":null},"Mega Score":{"note":"","data":["801BF958 00FF","801EED04 00FF"],"options":null},"Practice Lessons Open":{"note":"","data":["810B0BAA 0008"],"options":null},"Stop Level Timer":{"note":"","data":["801BF9B2 00FF"],"options":null}},"CEA8B54F-7F21D503-C:50":{"Always Empty Drain":{"note":"","data":["801BF991 0000","811BF992 0000","811BF994 0000"],"options":null},"Bezerk Mode":{"note":"","data":["801BF9AF 00FF"],"options":null},"Stop Level Timer":{"note":"","data":["801BF9B2 00FF"],"options":null}},"CEDCDE1E-513A0502-C:50":{"Access Another World":{"note":"This is for Puzzle Mode","data":["8116D100 0001"],"options":null},"Bubble Pointer 1P V CPU":{"note":"","data":["8017E1FD 0001"],"options":null},"Bubble Pointer Puzzle":{"note":"","data":["801807CD 0001"],"options":null},"Infinite Credit":{"note":"","data":["80120171 00FF"],"options":null},"Max Points Aid":{"note":"","data":["81170E4A 25C2"],"options":null}},"CF8957AD-96D57EA9-C:45":{"Infinite\\Health":{"note":"For Overhead \u0026 Driving Levels","data":["81064DF0 42C8"],"options":null},"Unlock All\\Characters":{"note":"","data":["50000C01 0000","8006252D 0001"],"options":null},"Unlock All\\Levels":{"note":"","data":["50000301 0000","80062508 0001","50000801 0000","8006250C 0001","50000801 0000","80062516 0001","50000A01 0000","8006251F 0001"],"options":null}},"D0151AB0-FE5CA14B-C:45":{"Have All Weapons":{"note":"","data":["8120A8F6 FFFF"],"options":null},"Infinite\\Ammo (All Weapons)":{"note":"","data":["81261A40 A05B"],"options":null},"Infinite\\Armor":{"note":"","data":["8020A987 0064"],"options":null},"Infinite\\Experience":{"note":"","data":["8020A967 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["8020A965 0064"],"options":null},"Max\\Acro":{"note":"","data":["8020A96F 0007"],"options":null},"Max\\Attack":{"note":"","data":["8020A96B 0007"],"options":null},"Max\\Power":{"note":"","data":["8020A971 0007"],"options":null},"Max\\Speed":{"note":"","data":["8020A96D 0007"],"options":null},"Max\\Vitality":{"note":"","data":["8020A969 0007"],"options":null}},"D09BA538-1C1A5489-C:50":{"Car Select":{"note":"","data":["D00F5900 0000","800F5900 00??"],"options":{"Chevrolet Camaro":"03","Chrysler Jeep Jeepster (Prototype)":"08","Default":"00","Dodge Viper":"04","Donkey In Glass Box":"0E","Ferrari F40":"07","Hotdog":"0A","Hummer H1":"05","Jeep Wrangler":"02","McLaren F1":"09","Mitsubishi Eclipse":"01","Nintendo 64 Logo":"0C","Nintendo Power Car":"0B","Porsche 911 Turbo":"06","Taco":"0D"}},"Infinite\\Max Acceleration\\Player 1":{"note":"","data":["800F590D 0005"],"options":null},"Infinite\\Max Acceleration\\Player 2":{"note":"","data":["800F5AF9 0005"],"options":null},"Infinite\\Max Acceleration\\Player 3":{"note":"","data":["800F5CE5 0005"],"options":null},"Infinite\\Max Acceleration\\Player 4":{"note":"","data":["800F5ED1 0005"],"options":null},"Infinite\\Max Handling\\Player 1":{"note":"","data":["800F590C 0005"],"options":null},"Infinite\\Max Handling\\Player 2":{"note":"","data":["800F5AF8 0005"],"options":null},"Infinite\\Max Handling\\Player 3":{"note":"","data":["800F5CE4 0005"],"options":null},"Infinite\\Max Handling\\Player 4":{"note":"","data":["800F5ED0 0005"],"options":null},"Infinite\\Max Money\\Player 1":{"note":"","data":["800F5905 000F"],"options":null},"Infinite\\Max Money\\Player 2":{"note":"","data":["800F5AF1 000F"],"options":null},"Infinite\\Max Money\\Player 3":{"note":"","data":["800F5CDD 000F"],"options":null},"Infinite\\Max Money\\Player 4":{"note":"","data":["800F5EC9 000F"],"options":null},"Infinite\\Max Top Speed\\Player 1":{"note":"","data":["800F590E 0005"],"options":null},"Infinite\\Max Top Speed\\Player 2":{"note":"","data":["800F5AFA 0005"],"options":null},"Infinite\\Max Top Speed\\Player 3":{"note":"","data":["800F5CE6 0005"],"options":null},"Infinite\\Max Top Speed\\Player 4":{"note":"","data":["800F5ED2 0005"],"options":null},"Infinite\\Nitro\\Player 1":{"note":"","data":["800F590F 0009"],"options":null},"Infinite\\Nitro\\Player 2":{"note":"","data":["800F5AFB 0009"],"options":null},"Laps 2 Race":{"note":"","data":["80118E20 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"[Press F9]\\All Cars (All Modes)":{"note":"","data":["880EA08B 000E","88102A71 000E"],"options":null},"[Press F9]\\Jump To Season 6":{"note":"","data":["881023A8 0005"],"options":null}},"D124DBB7-7C9FF5E5-C:00":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["811744B8 FFFF","811744BA FFFF","811744BE 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FEC8 270F"],"options":null}},"D1A78A07-52A3DD3E-C:50":{"Access Secret Characters\\Bengal The Tiger":{"note":"","data":["800B4DB2 0011"],"options":null},"Access Secret Characters\\Festus":{"note":"","data":["800B0DC3 0001"],"options":null},"Access Secret Characters\\Kimmi \u0026 Cindy":{"note":"","data":["800B0DAA 0011"],"options":null},"Access Secret Characters\\Mark":{"note":"","data":["800B0DB7 0012"],"options":null},"Access Secret Characters\\Marvin The Alien":{"note":"","data":["800B0DC7 0001"],"options":null},"Access Secret Characters\\Robert \u0026 Delvis":{"note":"","data":["800B0DBA 0011"],"options":null},"Access Secret Characters\\Starr \u0026 Traci":{"note":"","data":["800B0DBE 0011"],"options":null},"Access Secret Characters\\Twfan \u0026 Eagamer":{"note":"","data":["800B0DAE 0011"],"options":null},"Infinite \u0026 Max Power-Ups":{"note":"","data":["800B4612 00F0","50000801 0000","800B4600 00FF"],"options":null}},"D1F7D8AB-293B0446-C:45":{"Extra Lives":{"note":"Not to be used with CLassic Mode, or it will freeze","data":["8007F90E 0063"],"options":null},"Extra Points":{"note":"Not to be used with CLassic Mode, or it will freeze","data":["8107F8FE FFFF"],"options":null},"Infinite Armageddon":{"note":"Not to be used with CLassic Mode, or it will freeze","data":["8107F892 0001"],"options":null},"Infinite Items On Pickup":{"note":"Not to be used with CLassic Mode, or it will freeze","data":["8107F8A2 270F"],"options":null},"Infinite Lives (Classic Asteroids)":{"note":"","data":["8007F90F 0009"],"options":null},"Unlock Classic Asteroids":{"note":"","data":["8106DF5A 0001"],"options":null}},"D25C1211-13EEBF67-C:44":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["8116FA44 FFFF","8116FA46 FFFF","8116FA4A 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FC1C 270F"],"options":null}},"D2BE2F14-38453788-C:45":{"0% in Move List":{"note":"","data":["81135620 0000"],"options":null},"Enable Everything":{"note":"","data":["8112E21C F000","8112E21E 09FF","8112E220 FFFF","8112E222 FFFF"],"options":null},"Infinite Creation Points":{"note":"","data":["80161313 0000"],"options":null},"Max\\Charisma":{"note":"","data":["8014E3EC 000A"],"options":null},"Max\\Mat Skills":{"note":"","data":["8014E3ED 000A"],"options":null},"Max\\Recovery":{"note":"","data":["8014E3EB 000A"],"options":null},"Max\\Speed":{"note":"","data":["8014E3EA 000A"],"options":null},"Max\\Strength":{"note":"","data":["8014E3E8 000A"],"options":null},"Max\\Toughness":{"note":"","data":["8014E3E9 000A"],"options":null}},"D3F97D49-6924135B-C:50":{"Infinite Eggs":{"note":"This is for All Yoshis All levels","data":["80285078 0006"],"options":null},"Infinite\\Health":{"note":"This is for All Yoshis All levels","data":["50000804 0000","800F954F 0008"],"options":null},"Infinite\\Lives":{"note":"This is for All Yoshis All levels","data":["800F958F 00FF"],"options":null}},"D43DA81F-021E1E19-C:45":{"Always Have Wallet Size":{"note":"","data":["8011A832 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C8675 0010","8111BAF6 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011B679 00FF","8011BAEF 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C8675 0000","8011BBA3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["800257D4 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011A816 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011A817 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011A818 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011A819 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023E9AF 0020","8023E9B5 0033"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F3688 0005","801F3848 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["8011A832 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011A833 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011A831 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A82C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A834 30FF","8111A836 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011A808 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011A80E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011A814 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011A80C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011A806 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011A810 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011A805 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011A804 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011A807 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011A80A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011A80D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011A811 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011A812 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011A809 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011A80F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011A815 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011A813 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011A80B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011A81F 0009"],"options":null},"Infinite\\Big Keys,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011A838 0007","8011A839 0007","8011A83A 0007","8011A83B 0007","8011A83C 0007","8011A83D 0007","8011A83E 0007","8011A83F 0007","8011A840 0007","8011A841 0007","8011A842 0007","8011A84F 0009","8011A850 0009","8011A851 0009","8011A852 0009","8011A853 0009","8011A859 0009","8011A85C 0009","8011A857 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011A824 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011A81E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011A81D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011A822 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011A81C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111A7C0 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011A7C9 0008","8011A7CA 0001","8011A7CC 0001","8011A7C3 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011A82A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111BB5C 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011BB61 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011BB65 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C8675 0020","811DAC50 40CB","D01C8675 0000","811DB472 000D","8011A800 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011A85F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011A861 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111A7BE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111BB58 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C8675 0020","811DB472 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C8675 0020","811DAC50 40CB"],"options":null},"Press L+R For FMV Select":{"note":"Hold down `L+R' after the Nintendo logo is spinning to see your favourite FMV","data":["D01C8675 0030","8011A793 00A0","D01C8675 0030","8011A79B ????"],"options":{"anondorf FMV":"F600","ire FMV":"F50F","lanet Making FMV":"F400","nding":"F80E","ore Triforce FMV":"F700","riforce FMV":"F200"}},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C8675 0010","8011A797 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111A79C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011A81A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011A81B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011A800 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011A7CE 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111B9B2 0000","8111B9B4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}},"Widescreen":{"note":"Originally by Darkludx","data":["81024A18 1000","81024A1A 0023","810920D8 3C07","810920DA 3FE3"],"options":null}},"D43DA81F-021E1E19-C:4A":{"Always Have Wallet Size":{"note":"","data":["8011A832 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C8675 0010","8111BAF6 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011B679 00FF","8011BAEF 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C8675 0000","8011BBA3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest 01).","data":["800257D4 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011A816 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011A817 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011A818 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011A819 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801D8D8A 0006","801F23C8 0001","801EEE48 0001"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.If you Use Black Gauntlets,They are as strong as the Golden Gauntlets. This code also gives you the Silver Scale and the Golden Scale and unlimited rupees.","data":["8011A832 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011A833 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011A831 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A82C 7777"],"options":null},"Have\\All Quest/Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A834 30FF","8111A836 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011A808 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011A80E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011A814 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011A80C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011A806 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011A810 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011A805 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011A804 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011A807 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011A80A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011A80D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011A811 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011A812 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011A809 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011A80F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011A815 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011A813 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011A80B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011A81F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011A838 0007","8011A839 0007","8011A83A 0007","8011A83B 0007","8011A83C 0007","8011A83D 0007","8011A83E 0007","8011A83F 0007","8011A840 0007","8011A841 0007","8011A842 0007","8011A84F 0009","8011A850 0009","8011A851 0009","8011A852 0009","8011A853 0009","8011A859 0009","8011A85C 0009","8011A857 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011A824 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011A81E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011A81D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011A822 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011A81C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111A7C0 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011A7C9 0008","8011A7CA 0001","8011A7CC 0001","8011A7C3 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011A82A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111BB5C 0001"],"options":null},"Infinite\\Timers\\All other Timers":{"note":"This cheat works on all Race Timers.Under Water with iron Boots etc.","data":["8011BB61 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011BB65 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C8675 0020","811DAC50 40CB","D01C8675 0000","811DB472 000D","8011A800 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011A85F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011A861 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111A7BE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111BB58 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C8675 0020","811DB472 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C8675 0020","811DAC50 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C8675 0010","8011A797 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111A79C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011A81A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011A81B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011A800 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011A7CE 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111B9B2 0000","8111B9B4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"D48944D1-B0D93A0E-C:4A":{"Enable All Courses":{"note":"","data":["8112A61E FFFF"],"options":null},"Have All Characters":{"note":"","data":["50000D02 0001","810BC834 0000"],"options":null},"Max Gold Mario Badges Player 1":{"note":"","data":["800BF87B 0063"],"options":null},"No Wind":{"note":"","data":["800B45F1 0000","800B45F3 0000"],"options":null},"Unlimited\\Power Hits\\Player 1":{"note":"","data":["801B0DF8 0004"],"options":null},"Unlimited\\Power Hits\\Player 2":{"note":"","data":["801B0EB0 0004"],"options":null},"Unlimited\\Power Hits\\Player 3":{"note":"","data":["801B0F68 0004"],"options":null},"Unlimited\\Power Hits\\Player 4":{"note":"","data":["801B1020 0004"],"options":null},"Zero Strokes Taken":{"note":"","data":["801B0313 0000"],"options":null}},"D52FE29D-8EA6A759-C:00":{"Infinite 9 Credits":{"note":"","data":["80279C8F 0009"],"options":null}},"D543BCD6-2BA5E256-C:50":{"Access All Rune Stones":{"note":"","data":["50000302 0000","810AE6D6 07FF"],"options":null},"Access All Window Shards":{"note":"","data":["50000302 0000","810AE6C6 07FF"],"options":null},"Access Skill Level 99":{"note":"And Get A Familiar","data":["800FD38A FFFF"],"options":null},"Always Max Turbo Attack":{"note":"","data":["810FD4AE FF64"],"options":null},"Get All Stuff":{"note":"Opens Up New Levels Etc,","data":["50001410 0000","810C5DA6 FFFF"],"options":null},"Infinite Use Of Items":{"note":"On Pick-Ups Only","data":["50001310 0000","800C5EC6 FFFF"],"options":null},"New Player Name":{"note":"","data":["810FD36C 4249","810FD36E 5443","810FD370 4820","810FD372 3639"],"options":null},"Start With Big Familiar":{"note":"Do not use this with Small Familiar Code","data":["810FD512 0202"],"options":null},"Start With Small Familiar":{"note":"Do not use this with Big Familiar Code","data":["810FD512 0102"],"options":null}},"D571C883-822D3FCF-C:50":{"Have All\\Keys":{"note":"This will give you the Grey \u0026 Red,Green \u0026 Gold Keys","data":["800BE268 00FF","800BE26D 00FF","800BE26E 00FF"],"options":null},"Have All\\Music Notes":{"note":"This will give you all 10 Music Notes","data":["50000A01 0000","800BE3A0 0001"],"options":null},"Infinite\\Health":{"note":"","data":["800BE2A7 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["800BE293 0009"],"options":null},"Max Money":{"note":"","data":["810BE296 03E7"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D017E975 0020","810DBD88 44CB"],"options":null}},"D5898CAF-6007B65B-C:50":{"All Multiplayer Characters":{"note":"","data":["8015C8E1 000F","8015C8E2 00FF","8015C8E3 00FF"],"options":null},"C4 Detector":{"note":"Slot 3","data":["80157C98 0001"],"options":null},"C4 Explosives":{"note":"Slot 1","data":["80157C93 0001"],"options":null},"Card Key":{"note":"Slot 3","data":["80157C9A 0001"],"options":null},"Flash Light":{"note":"Slot 2","data":["80157C95 0001"],"options":null},"Infinite\\Ammo and No Reloads":{"note":"","data":["80157C9B 0078","80157C94 0078","80157C90 0063","80179F6F 001E","80157C91 0063","80179F83 0008"],"options":null},"Infinite\\Health":{"note":"","data":["80179F8B 0064"],"options":null},"Key":{"note":"Slot 2","data":["80157C99 0001"],"options":null},"Max Power Mode":{"note":"","data":["8015C8E7 0001"],"options":null},"Sudden death \u0026 trial modes unlocked":{"note":"","data":["8015C8E0 00A0"],"options":null},"Time is always 00:20:38":{"note":"","data":["8010D342 0078"],"options":null},"Walk Through Walls/Objects":{"note":"Press Z Button And Joystick Forward Dont Stand Too Close To Wall/Object","data":["D0139BC4 0020","8117964C 43C7"],"options":null},"Weapon modifier":{"note":"","data":["80179F78 00??"],"options":{"Handgun":"00","Handgun w/ silencer":"14","Rocket launcher":"03","Shotgun":"02","Submachine gun":"01"}}},"D5B2339C-CABCCAED-C:50":{"Have\\Max Bonus":{"note":"","data":["810EC2CA 270F"],"options":null},"Have\\[All Guns \u0026 Infinite Ammo]":{"note":"Press C Left to receive all Guns","data":["81102C0A 0001","50000B04 0000","810EBF66 03E8"],"options":null},"Have\\[All Keys]":{"note":"","data":["810EBF60 0001","800EBF61 0001","810EBF62 0001"],"options":null},"Have\\[High Score]":{"note":"","data":["810EBF4E FFFF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["810EC2D2 03E7"],"options":null},"Infinite\\Health":{"note":"If you fall into Water just turn off the Infinite Health \u0026 put back on when you restrat.","data":["810EBF58 42D8"],"options":null},"Level Select":{"note":"","data":["81103D82 00??"],"options":{"Boss Mission Destroy Carrier Level":"10","Mission 1 Shock Strike":"01","Mission 10 Scramble Pylon":"0A","Mission 11 Herding Research":"0B","Mission 12 The Extractor":"0C","Mission 13 Nuke Tower":"0D","Mission 14 Mucus Storage":"0E","Mission 15 Depot Attack":"0F","Mission 16 Sterilization":"11","Mission 17 Scorpion Killer":"12","Mission 18 Core Nuke":"13","Mission 19 Gate Keeper":"14","Mission 2 Radar Run":"02","Mission 3 Return Fire":"03","Mission 4 The Sonar Tower":"04","Mission 5 Big Blips":"05","Mission 6 Short Fuse":"06","Mission 7 Outpost":"07","Mission 8 Sewer":"08","Mission 9 Clean Up":"09","Queen Mission":"15"}},"Level Select Menu":{"note":"","data":["811022CA 0EF0"],"options":null}},"D614E5BF-A76DBCC1-C:50":{"Access Level Select":{"note":"On the main menu Scroll down to make CHEATS visible to go into Level Select.For in-Game Cheats,Pause gameplay.","data":["810DD47C 8001"],"options":null},"Have\\All TARZAN Letters":{"note":"","data":["800DD485 00FF"],"options":null},"Have\\Coins Collected 100%":{"note":"","data":["800DD4B7 0064"],"options":null},"Have\\Full Portrait":{"note":"","data":["800DD484 00FF"],"options":null},"Have\\Level \u0026 Tokens Completed 100%":{"note":"","data":["800DD48F 0000","800DD490 0001","800DD491 0000"],"options":null},"Infinite\\Bonus Timer":{"note":"This is For All Timers on Bonus Levels","data":["8017373E 0025"],"options":null},"Infinite\\Green Weapon":{"note":"","data":["811921D6 0063"],"options":null},"Infinite\\Health":{"note":"","data":["81192300 0120"],"options":null},"Infinite\\Lives":{"note":"","data":["800DD4B2 00??"],"options":{"3 Lives":"03","99 Lives":"63"}},"Infinite\\Purple Weapon":{"note":"","data":["811921DA 0063"],"options":null},"Infinite\\Red Weapon":{"note":"","data":["811921D8 0063"],"options":null},"Press GS For\\Sabor Attacks\\Sabor 1 Hit Kill":{"note":"","data":["8924A49E 0001"],"options":null}},"D666593B-D7A25C07-C:4A":{"Buster Parts Slot Select\\Slot 01":{"note":"","data":["8020CED3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 02":{"note":"","data":["8020CED4 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 03":{"note":"","data":["8020CED5 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 04":{"note":"","data":["8020CED6 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 05":{"note":"","data":["8020CED7 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 06":{"note":"","data":["8020CED8 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 07":{"note":"","data":["8020CED9 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 08":{"note":"","data":["8020CEDA 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 09":{"note":"","data":["8020CEDB 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 10":{"note":"","data":["8020CEDC 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 11":{"note":"","data":["8020CEDD 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 12":{"note":"","data":["8020CEDE 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 13":{"note":"","data":["8020CEDF 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 14":{"note":"","data":["8020CEE0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 15":{"note":"","data":["8020CEE1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 16":{"note":"","data":["8020CEE2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 17":{"note":"","data":["8020CEE3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 18":{"note":"","data":["8020CEE4 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 19":{"note":"","data":["8020CEE5 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 20":{"note":"","data":["8020CEE6 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 21":{"note":"","data":["8020CEE7 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 22":{"note":"","data":["8020CEE8 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 23":{"note":"","data":["8020CEE9 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 24":{"note":"","data":["8020CEEA 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 25":{"note":"","data":["8020CEEB 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 26":{"note":"","data":["8020CEEC 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 27":{"note":"","data":["8020CEED 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 28":{"note":"","data":["8020CEEE 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 29":{"note":"","data":["8020CEEF 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 30":{"note":"","data":["8020CEF0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 31":{"note":"","data":["8020CEF1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 32":{"note":"","data":["8020CEF2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 33":{"note":"","data":["8020CEF3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 01":{"note":"","data":["8020CED0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 02":{"note":"","data":["8020CED1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 03":{"note":"","data":["8020CED2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Freeze Timer at 00:00":{"note":"","data":["811C44C4 0000","811C44C6 0000"],"options":null},"Have All\\Normal Items":{"note":"","data":["8120D720 FFFF","8120D722 FFFF","8120D724 FFFF","8120D726 FFFF"],"options":null},"Have All\\Special Items":{"note":"","data":["8120D71C FFFF","8120D71E FFFF"],"options":null},"Have All\\Special Weapons":{"note":"These are Equiped With Roll","data":["8120D710 FFFF"],"options":null},"Infinite\\Ammo":{"note":"","data":["8120CF8A 0080","8120CF92 0010","8120CF9A 0708","8120CFA2 0018","8120CFAA 0010","8120CFB2 0708","8120CFBA 0020","8120CFC2 0020","8120CFCA 0020","8120CFD2 0018","8120CFDA 012C","8120CFE2 0258"],"options":null},"Infinite\\Health":{"note":"","data":["8120CAEE 0050"],"options":null},"Infinite\\Max Zenny":{"note":"","data":["811C44D4 0098","811C44D6 967F"],"options":null},"Rapid Fire":{"note":"","data":["8020CF83 0002"],"options":null}},"D692CC5E-EC58D072-C:50":{"Have All\\Cups Select":{"note":"","data":["50002C02 0000","800CCF11 00??"],"options":{"Bronze Cup":"02","Gold Cup":"00","None (Default)":"04","Silver Cup":"01"}},"Have All\\Points":{"note":"","data":["810D8FE0 03E7"],"options":null},"Have All\\RB Medals":{"note":"","data":["810D8FF0 03E7"],"options":null},"Infinite\\Credits":{"note":"","data":["800BDFA5 0005"],"options":null},"Infinite\\Timer":{"note":"","data":["810D9088 44E9"],"options":null},"Infinite\\Turbos":{"note":"To enable this just select On or Off and when you press Z you will use your Turbos accordantly. Warning you can only have Infinite if you have some turbo level to begin with","data":["D00F2D16 0020","800CD091 00??"],"options":{"Off":"00","On":"08"}},"Laps To Race":{"note":"Here you can select how many laps you prefer.to race","data":["800C8909 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","7 Laps":"07","8 Laps":"08","9 Laps":"09","Laps":"06"}},"[Cheat Menu]":{"note":"Press Pause to access cheats.","data":["800CD089 00FF","800CD08A 00FF","800CD08B 00FF"],"options":null},"[Press F9]\\Enable All Courses":{"note":"","data":["890CCEF2 0B00","890CCEF4 0B00","890CCEF6 0B00"],"options":null},"[Press F9]\\Extra Characters":{"note":"","data":["890C642F 01FF"],"options":null},"[Press F9]\\Progress 100%":{"note":"","data":["50000801 0000","880CCF00 0003","50000801 0000","880CCF01 00FF"],"options":null}},"D6FBA4A8-6326AA2C-C:4A":{"Don't Hurt Mario\\Monsters":{"note":"","data":["A031D9E7 0001"],"options":null},"Funny Mario Options\\Limbo Mario":{"note":"Only Use This Code On Its Own,Do not use with any other Funny Mario Options.","data":["8031DC0C 00C0"],"options":null},"Funny Mario Options\\Mario's Cap\\Off \u0026 in His Hand":{"note":"Here you can Choose Options with Mario with His Cap off \u0026 in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["8031D9C7 00??"],"options":{"Cap In Hand":"20","Flying Mario Cap In Hand":"28","Invisible Mario Cap In Hand":"22","Invisible Metal Mario Cap In Hand":"26","Metal Mario Cap In Hand":"24"}},"Funny Mario Options\\Mario's Cap\\On \u0026 An Extra in His Hand":{"note":"Here you can Choose Options with Mario with His Cap on \u0026 An Extra in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["8031D9C7 00??"],"options":{"Cap In Hand":"30","Flying Mario Cap In Hand":"38","Invisible Mario Cap In Hand":"32","Invisible Metal Mario Cap In Hand":"36","Metal Mario Cap In Hand":"34"}},"Funny Mario Options\\Ostrich Mario":{"note":"Only Use This Code On Its Own,Do not use with any other Funny Mario Options.","data":["8031DC0C 0070"],"options":null},"Funny Mario Options\\Runs Backwards":{"note":"Only Use This Code On Its Own,Do not use with any other Funny Mario Options.","data":["8031DC0E 0080"],"options":null},"Have All\\175 Stars":{"note":"I have Managed to put a Have 175 Stars Option in for you,once the Code is activated, you will see it as a new option in Save Slot A.","data":["80203F0B 00FF","50000D02 0000","81203F0C FFFF"],"options":null},"Have All\\Maxed Out Coin Records For All Levels":{"note":"","data":["80203F25 00FF","50000702 0000","81203F26 FFFF"],"options":null},"Have\\Level Select":{"note":"","data":["8030CCBC 0001"],"options":null},"Infinite\\Energy \u0026 Breath":{"note":"","data":["8031DA6E 0008"],"options":null},"Infinite\\Lives":{"note":"","data":["8031DA6D 0064"],"options":null},"Mario's Cap\\Off Options":{"note":"Here you can Choose Options with Mario without His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["8031D9C7 00??"],"options":{"Flying Mario":"08","Invisible Flying Mario":"0A","Invisible Mario":"02","Invisible Metal Flying Mario":"0F","Mario No Cap":"01","Metal Flying Mario":"0D","Metal Mario":"04"}},"Mario's Cap\\On Options":{"note":"Here you can Choose Options with Mario with His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["8031D9C7 00??"],"options":{"Flying Mario":"19","Invisible Mario":"12","Invisible Metal Mario":"16","Metal Mario":"15"}},"Press GS For 255 Coins":{"note":"Press GS Once on a Level To Get that amount of Coins","data":["8931DA68 00FF"],"options":null}},"D715CC70-271CF5D6-C:50":{"Difficulty Select":{"note":"","data":["80336953 00??"],"options":{"Easy":"01","Hard":"03","Medium":"02","Very Easy":"00","Very hard":"04"}},"Easy Fatality Select":{"note":"","data":["8033584F 00??"],"options":{"Always Off":"00","Always On":"01"}},"Enable Cheat Menu":{"note":"","data":["80336973 0001"],"options":null},"Fatalities Select":{"note":"","data":["8033695C 00??"],"options":{"Off":"00","On":"01"}},"Infinite Max Continues":{"note":"","data":["80336963 0005"],"options":null},"Infinite Time":{"note":"","data":["8033F6FB 0064"],"options":null},"Level Select":{"note":"","data":["80335C27 00??"],"options":{"Ahau Kin":"04","Anubis":"02","Kabuki":"06","Off":"00","Pagan":"01","Voodoo":"05","Warhead":"03"}},"Music Select":{"note":"","data":["80336954 00??"],"options":{"Off":"00","On":"01"}},"Play As":{"note":"","data":["800EAF87 00??"],"options":{"Ahau Kin":"06","Anubis":"07","CY-5":"08","Exor":"0B","Grox":"0A","Kabuki Jo":"04","Maximus":"09","Pagan":"03","Tak":"01","Vallah":"05","Voodoo":"02","Warhead":"00"}},"Press D-Pad\\Left to Play As Grox":{"note":"Press D-Pad Left at the character Select screen to Replace Maximus with Grox. Do not use with the Play As Cheat","data":["D033C263 0004","800EAF87 000A"],"options":null},"Press D-Pad\\Right to Play As Exor":{"note":"Press D-Pad Right at the character Select screen to Replace Maximus with Exor. Do not use with the Play As Cheat","data":["D033C263 0008","800EAF87 000B"],"options":null},"Skill Select\\Player 1":{"note":"Max Skill makes the player more Skillful while easier to hurt where as Weak Skill is Non Skillful yet harder to harm.","data":["80335C1D 00??"],"options":{"Max Skill":"80","Weak Skill":"00"}},"Skill Select\\Player 2":{"note":"Max Skill makes the player more Skillful while easier to hurt where as Weak Skill is Non Skillful yet harder to harm.","data":["80335C20 00??"],"options":{"Max Skill":"80","Weak Skill":"00"}}},"D741CD80-ACA9B912-C:45":{"Car Select":{"note":"","data":["D00F50C0 0000","800F50C0 00??"],"options":{"Chevrolet Camaro":"03","Chrysler Jeep Jeepster (Prototype)":"08","Default":"00","Dodge Viper":"04","Donkey In Glass Box":"0E","Ferrari F40":"07","Hotdog":"0A","Hummer H1":"05","Jeep Wrangler":"02","McLaren F1":"09","Mitsubishi Eclipse":"01","Nintendo 64 Logo":"0C","Nintendo Power Car":"0B","Porsche 911 Turbo":"06","Taco":"0D"}},"Infinite\\Max Acceleration\\Player 1":{"note":"","data":["800F50CD 0005"],"options":null},"Infinite\\Max Acceleration\\Player 2":{"note":"","data":["800F52B9 0005"],"options":null},"Infinite\\Max Acceleration\\Player 3":{"note":"","data":["800F54A5 0005"],"options":null},"Infinite\\Max Acceleration\\Player 4":{"note":"","data":["800F5691 0005"],"options":null},"Infinite\\Max Handling\\Player 1":{"note":"","data":["800F50CC 0005"],"options":null},"Infinite\\Max Handling\\Player 2":{"note":"","data":["800F52B8 0005"],"options":null},"Infinite\\Max Handling\\Player 3":{"note":"","data":["800F54A4 0005"],"options":null},"Infinite\\Max Handling\\Player 4":{"note":"","data":["800F5690 0005"],"options":null},"Infinite\\Max Money\\Player 1":{"note":"","data":["800F50C5 000F"],"options":null},"Infinite\\Max Money\\Player 2":{"note":"","data":["800F52B1 000F"],"options":null},"Infinite\\Max Money\\Player 3":{"note":"","data":["800F549D 000F"],"options":null},"Infinite\\Max Money\\Player 4":{"note":"","data":["800F5689 000F"],"options":null},"Infinite\\Max Top Speed\\Player 1":{"note":"","data":["800F50CE 0005"],"options":null},"Infinite\\Max Top Speed\\Player 2":{"note":"","data":["800F52BA 0005"],"options":null},"Infinite\\Max Top Speed\\Player 3":{"note":"","data":["800F54A6 0005"],"options":null},"Infinite\\Max Top Speed\\Player 4":{"note":"","data":["800F5692 0005"],"options":null},"Infinite\\Nitro\\Player 1":{"note":"","data":["800F50CF 0009"],"options":null},"Infinite\\Nitro\\Player 2":{"note":"","data":["800F52BB 0009"],"options":null},"Laps 2 Race":{"note":"","data":["801186A0 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"[Press F9]\\All Cars (All Modes)":{"note":"","data":["880E990B 000E","881022F1 000E"],"options":null},"[Press F9]\\Jump To Season 6":{"note":"","data":["881022E8 0005"],"options":null}},"D7C762B6-F83D9642-C:4A":{"Have\\Max Bonus":{"note":"","data":["810EB4BA 270F"],"options":null},"Have\\[All Guns \u0026 Infinite Ammo]":{"note":"Press C Left to receive all Guns","data":["81101DFA 0001","50000B04 0000","810EB156 03E7"],"options":null},"Have\\[All Keys]":{"note":"","data":["810EB150 0101","800EB152 0001"],"options":null},"Have\\[High Score]":{"note":"","data":["810EB13E FFFF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["810EB4C0 0005"],"options":null},"Infinite\\Health":{"note":"If you fall into Water just turn off the Infinite Health \u0026 put back on after.","data":["810EB148 42D8"],"options":null},"Level Select":{"note":"","data":["8110FE32 00??"],"options":{"Boss Mission Destroy Carrier Level":"10","Mission 1 Shock Strike":"01","Mission 10 Scramble Pylon":"0A","Mission 11 Herding Research":"0B","Mission 12 The Extractor":"0C","Mission 13 Nuke Tower":"0D","Mission 14 Mucus Storage":"0E","Mission 15 Depot Attack":"0F","Mission 16 Sterilization":"11","Mission 17 Scorpion Killer":"12","Mission 18 Core Nuke":"13","Mission 19 Gate Keeper":"14","Mission 2 Radar Run":"02","Mission 3 Return Fire":"03","Mission 4 The Sonar Tower":"04","Mission 5 Big Blips":"05","Mission 6 Short Fuse":"06","Mission 7 Outpost":"07","Mission 8 Sewer":"08","Mission 9 Clean Up":"09","Queen Mission":"15"}},"Level Select Menu":{"note":"","data":["8110D1EA BF60"],"options":null}},"D81963C7-4271A3AA-C:45":{"Access All Levels":{"note":"","data":["801FC5E6 00FF","801FC5E8 00FF"],"options":null},"Extended Tongue":{"note":"","data":["81323382 FFFF"],"options":null},"Have 99 Crowns":{"note":"","data":["8024337B 0063"],"options":null},"Have All Levels Completed":{"note":"","data":["801FC5EA 0019","801FC5EB 0019","801FC5EC 0015","801FC5ED 0018","801FC5EE 0017","801FC5EF 0017"],"options":null},"Infinite Health":{"note":"","data":["80164923 000A"],"options":null},"Level Select":{"note":"","data":["80297A7B 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06"}}},"D83045C8-F29D3A36-C:50":{"Always 1st":{"note":"","data":["8013F040 0001"],"options":null},"Freeze All Timers":{"note":"","data":["8013F001 0000","8013F005 0000","8013F00A 0000"],"options":null},"Freeze Overall Timer":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8013EFF5 0001"],"options":null},"Language Select":{"note":"","data":["8008CF93 00??"],"options":{"English":"00","French":"01","German":"02"}},"Laps Of Race":{"note":"","data":["8013EFEF 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","Never Ending Laps":"06"}},"Level Select":{"note":"For this cheat to work,as soon as you put the cheat on you must turn it back off,if not you wont beable to quit a Race or even finish one.","data":["8013F2FB 00??"],"options":{"Bikini Island":"01","Canyon Rush":"00","China Town":"02","China Town Jam":"04","Neo Arena":"03","Neo Speed Way":"05"}},"Music Modifier":{"note":"","data":["800F715F 00??"],"options":{"Music Off":"00","Music On":"FF"}},"No Damage\\Player 1":{"note":"","data":["50000402 0000","8113F338 0000"],"options":null},"No Damage\\Player 2":{"note":"","data":["50000402 0000","811413D8 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["8013F2F5 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Play As\\Player 2":{"note":"","data":["8013F2F6 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Unlock Hidden Tracks \u0026 Cars":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8009127C 0001"],"options":null}},"D84EEA84-45B2F1B4-C:50":{"All Items":{"note":"","data":["50002402 0202","810ED130 0001","50004601 0000","800ED1B1 0003"],"options":null},"Item Modifier Codes\\Position 01":{"note":"","data":["800ED130 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 02":{"note":"","data":["800ED131 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 03":{"note":"","data":["800ED132 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 04":{"note":"","data":["800ED133 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 05":{"note":"","data":["800ED134 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 06":{"note":"","data":["800ED135 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 07":{"note":"","data":["800ED136 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 08":{"note":"","data":["800ED137 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 09":{"note":"","data":["800ED138 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 10":{"note":"","data":["800ED139 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 11":{"note":"","data":["800ED13A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 12":{"note":"","data":["800ED13B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 13":{"note":"","data":["800ED13C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 14":{"note":"","data":["800ED13D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 15":{"note":"","data":["800ED13E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 16":{"note":"","data":["800ED13F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 17":{"note":"","data":["800ED140 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 18":{"note":"","data":["800ED141 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 19":{"note":"","data":["800ED142 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 20":{"note":"","data":["800ED143 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 21":{"note":"","data":["800ED144 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 22":{"note":"","data":["800ED145 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 23":{"note":"","data":["800ED146 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 24":{"note":"","data":["800ED147 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 25":{"note":"","data":["800ED148 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 26":{"note":"","data":["800ED149 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 27":{"note":"","data":["800ED14A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 28":{"note":"","data":["800ED14B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 29":{"note":"","data":["800ED14C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 30":{"note":"","data":["800ED14D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 31":{"note":"","data":["800ED14E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 32":{"note":"","data":["800ED14F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 33":{"note":"","data":["800ED150 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 34":{"note":"","data":["800ED151 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 35":{"note":"","data":["800ED152 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 36":{"note":"","data":["800ED153 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 37":{"note":"","data":["800ED154 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 38":{"note":"","data":["800ED155 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 39":{"note":"","data":["800ED156 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 40":{"note":"","data":["800ED157 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 41":{"note":"","data":["800ED158 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 42":{"note":"","data":["800ED159 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 43":{"note":"","data":["800ED15A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 44":{"note":"","data":["800ED15B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 45":{"note":"","data":["800ED15C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 46":{"note":"","data":["800ED15D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 47":{"note":"","data":["800ED15E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 48":{"note":"","data":["800ED15F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}}},"D85C4E29-88E276AF-C:50":{"Extra Gems":{"note":"","data":["D0165241 0000","80165241 004B"],"options":null},"Full\\Bomb Power":{"note":"","data":["8016523F 0003"],"options":null},"Full\\Fire Power":{"note":"","data":["80165240 0008"],"options":null},"Infinite\\Health":{"note":"","data":["80165244 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["80165243 0009"],"options":null},"Max\\Bombs":{"note":"","data":["8016523F 0008"],"options":null},"Max\\Explosion":{"note":"","data":["80165240 0008"],"options":null},"Max\\Score":{"note":"","data":["80177608 FFFF"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D005A465 0020","81154178 41CB","D005A465 0020","D0154154 0000","80154154 0040"],"options":null}},"D889EB0F-277614F0-C:45":{"Unlock All ? Blocks":{"note":"","data":["50001C04 0000","8014FECB 0001"],"options":null},"Unlock All Power Blocks":{"note":"","data":["50000604 0000","8014FE0B 0001","50000704 0000","8014FE43 0001","50000804 0000","8014FE6F 0001","50000404 0000","8014FE93 0001","50000704 0000","8014FEAF 0001","8014FE2B 0001","8014FE2F 0001","8014FE63 0001"],"options":null},"Unlock All Warps":{"note":"","data":["8014FF3B 000F"],"options":null}},"D889EB0F-277614F0-C:4A":{"Unlock All ? Blocks":{"note":"","data":["50001C04 0000","8014FECB 0001"],"options":null},"Unlock All Power Blocks":{"note":"","data":["50000604 0000","8014FE0B 0001","50000704 0000","8014FE43 0001","50000804 0000","8014FE6F 0001","50000404 0000","8014FE93 0001","50000704 0000","8014FEAF 0001","8014FE2B 0001","8014FE2F 0001","8014FE63 0001"],"options":null},"Unlock All Warps":{"note":"","data":["8014FF3B 000F"],"options":null}},"D89E0E55-B17AA99A-C:50":{"Infinite Flight Time":{"note":"","data":["801A3F1F 0064"],"options":null},"Infinite Lives":{"note":"","data":["801A3E83 0063"],"options":null},"Infinite Mega Fuel":{"note":"","data":["801A3EEB 0064"],"options":null},"Infinite Shots":{"note":"","data":["801A3EB7 0064"],"options":null}},"D9EDD54D-6BB8E274-C:50":{"The Away Team Has Max Score":{"note":"","data":["81080082 FFFF"],"options":null},"The Home Team Has Max Score":{"note":"","data":["8107972A FFFF"],"options":null}},"D9F75C12-A8859B59-C:45":{"Infinite Time":{"note":"","data":["8114C298 000A"],"options":null},"Pick Your Kombat Zone":{"note":"","data":["81257544 00??"],"options":{"Armory":"14","Bell Tower":"07","Bridge":"05","Courtyard":"02","Dead Pool":"11","Graveyard":"09","Hidden Portal":"10","Jade's Desert":"0E","Kahn's Kave":"0D","Kahn's Tower":"04","Kombat Temple":"08","Lair":"18","Living Forest":"15","Lost Bridge":"0F","Pit":"03","Pit 2":"1A","Pit 3":"0A","Pit Bottom":"1C","Portal":"17","River Kombat":"0B","Rooftop":"13","Scorpion's Lair":"0C","Soul Chamber":"06","Star Bridge":"1B","Street":"01","Subway":"00","Tomb":"19","Tower":"16","Wasteland":"12"}},"Player 1\\Aggressor Energy Bar":{"note":"","data":["801698E1 0030"],"options":null},"Player 1\\Energy is":{"note":"","data":["8016984D 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 1\\Infinite Run":{"note":"","data":["81169854 0030"],"options":null},"Player 1\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B5225 0020","81169874 5100","D02B5225 0020","8116987C 5100"],"options":null},"Player 1\\Play As":{"note":"","data":["8016983D 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Player 2\\Aggressor Energy Bar":{"note":"","data":["801698E3 0030"],"options":null},"Player 2\\Energy is":{"note":"","data":["80169B21 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 2\\Infinite Run":{"note":"","data":["81169B28 0030"],"options":null},"Player 2\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B522D 0020","81169876 5100","D02B522D 0020","8116987E 5100"],"options":null},"Player 2\\Play As":{"note":"","data":["80169AE1 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Unlock Secret":{"note":"","data":["80169EE1 0004"],"options":null}},"DBF4EA9D-333E82C0-C:45":{"1 Lap Race":{"note":"","data":["D0122288 0000","80122288 0009"],"options":null},"999 Trick Game Pts":{"note":"","data":["81122040 03E7"],"options":null},"Access Gold Medals":{"note":"","data":["50000602 0000","810ECA22 0101"],"options":null},"Enable Sinobin":{"note":"","data":["8110AE5E 0100"],"options":null},"Infinite\\Cash":{"note":"","data":["801222EA C350"],"options":null},"Infinite\\Lucky Dip":{"note":"\"Lucky Dip is Infinite Usage Of What Ever You Get From Each Red Box\"","data":["80122294 0003"],"options":null},"Infinite\\Tools Options":{"note":"","data":["80122295 00??"],"options":{"Board":"06","Fan":"01","Ghost":"02","Mouse":"05","Pan":"03","Rock":"04"}},"No Frameskip":{"note":"Multiplayer is now smoother at 30fps.","data":["800DEED4 0000"],"options":null},"No Frameskip (ASM)":{"note":"","data":["80099324 0024","81099326 0000"],"options":null}},"DC36626A-3F3770CB-C:50":{"Cheat Menu\\All Weapons Enabled":{"note":"","data":["801CCC59 0001","801CCCC5 0001","801CDD25 0001","801CDE21 0001","801CDEB5 0001","801CDEB7 0001","801CDEE9 0001","801CE819 0001","801CE821 0001","801CE88D 0001","801CF9D5 0001"],"options":null},"Cheat Menu\\Cheat Menu Enabled":{"note":"","data":["800CF7D8 0001"],"options":null},"Cheat Menu\\Have All Game Type \u0026 Other":{"note":"","data":["810E1A3E 0FFF"],"options":null},"Cheat Menu\\Have All Weapons":{"note":"","data":["811CE810 FFFF"],"options":null},"Enable Debug Menu":{"note":"","data":["800DFCD0 0001"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810A21B4 A65B"],"options":null},"Invincibility":{"note":"","data":["800DF203 0001"],"options":null},"Time Always 00:00":{"note":"","data":["801A1D06 0000"],"options":null}},"DCB6EAFA-C6BBCFA3-C:4A":{"Always Berserk Mode":{"note":"","data":["801ACA6F 00FF"],"options":null},"Always Drop\\Player 1":{"note":"","data":["801ACA7B 00??"],"options":{"Bar":"00","Big Water":"06","Bomb":"0A","Corner":"02","Down Bar":"05","Down Square":"04","Fireball":"0B","Medium Water":"07","Small Water":"08","Smallest Water":"09","Square":"03","T":"01"}},"Always Drop\\Player 2":{"note":"","data":["801DD1FB 00??"],"options":{"Bar":"00","Big Water":"06","Bomb":"0A","Corner":"02","Down Bar":"05","Down Square":"04","Fireball":"0B","Medium Water":"07","Small Water":"08","Smallest Water":"09","Square":"03","T":"01"}},"Always Empty Drain":{"note":"","data":["801ACA51 0000","811ACA52 0000","811ACA54 0000"],"options":null},"Infinite Ducks":{"note":"","data":["801ACA0B 0009"],"options":null},"Infinite Lakes":{"note":"","data":["811AC9FE 0009"],"options":null},"Mega Score":{"note":"","data":["801ACA18 00FF","801DBDC4 00FF"],"options":null},"Practice Lessons Open":{"note":"","data":["810C3AEA 0008"],"options":null},"Stop Level Timer":{"note":"","data":["801ACA72 00FF"],"options":null}},"DCBC50D1-09FD1AA3-C:45":{"Debug Mode":{"note":"Press A or Start to enable the currently selected option. Pressing Start when in control of the player will also open the watch menu and close the debug menu.","data":["80036FCB 0001"],"options":null},"Everything Unlocked\\Save File 1":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","810699EE FFFF"],"options":null},"Everything Unlocked\\Save File 2":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8106992E FFFF"],"options":null},"Everything Unlocked\\Save File 3":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","81069A4E FFFF"],"options":null},"Everything Unlocked\\Save File 4":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8106998E FFFF"],"options":null},"Have All\\64 Characters In Multi Player":{"note":"Enables all Characters selectable to play as in Multi-Player","data":["8002B197 0040"],"options":null},"Have All\\Objectives Complete":{"note":"","data":["80036FD3 0001"],"options":null},"Have\\Infinite 00:00 Time (All Levels)":{"note":"","data":["8004837E 0000","8004838E 0000","80048396 0000","80079A22 0000","80079F26 0000"],"options":null},"Infinite\\Ammo (All Levels)":{"note":"","data":["80079E3B 0001"],"options":null},"Infinite\\Health (All levels)":{"note":"","data":["8100C0F4 0801","8100C0F6 8090","8100C0F8 AFA4","8100C0FA 0000","81060240 0004","81060242 7600","81060244 3C02","81060246 8008","81060248 8C42","8106024A 9EE0","8106024C 3401","8106024E 3F80","81060250 A441","81060252 00DC","81060254 0800","81060256 303F"],"options":null},"Mod Section\\Custom Weapon Grouping":{"note":"golden gun fun should replace slappers only! appears in the multi weapons. No weapons or ammunition crates appear inside the level. All players must rely on is their unarmed \"slapping\" skills.","data":["80048673 0013","81048678 3FC0","80048677 00D0","8004867F 000D","80048683 000A","8004868B 0013","81048690 3FC0","8004868F 00D0","80048697 000D","8004869B 000A","800486A3 0019","810486A8 3FC0","800486A7 00D3","800486AF 0006","800486B3 0003","800486BB 0019","810486C0 3FC0","800486BF 00D3","800486C7 0006","800486CB 0003","800486D3 0013","810486D8 3FC0","800486D7 00D0","800486DF 000D","800486E3 000A","800486EB 0013","810486F0 3FC0","800486EF 00D0","800486F7 000D","800486FB 000A","80048703 0019","81048708 3FC0","80048707 00D3","8004870F 0006","80048713 0003","8004871B 0019","81048720 3FC0","8004871F 00D3","80048727 0006","8004872B 0003","812AEA50 476F","812AEA52 6C64","812AEA54 656E","812AEA56 2047","812AEA58 756E","812AEA5A 2046","812AEA5C 756E","802AEA5E 0000"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 1\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811E6554 45E4","811E6558 43D5","811E655C C5A7","811E657C 801C","811E657E 6774","811E5164 45E4","811E5168 C383","811E516C 4492","811E518C 801C","811E518E D574","811E78C0 45AD","811E78C4 C383","811E78C8 4440","811E78E8 801C","811E78EA E464","811E4D18 45D0","811E4D1C 4307","811E4D20 C4FB","811E4D40 801C","811E4D42 75EC","811E6738 45CD","811E673C C383","811E6740 43F4","811E6760 801C","811E6762 A0DC","811E5450 45C2","811E5454 4356","811E5458 C598","811E5478 801C","811E547A 6A74","811E5240 4608","811E5244 4307","811E5248 43DC","811E5268 801C","811E526A 962C","811E691C 4606","811E6920 4321","811E6924 449D","811E6944 801C","811E6946 CBEC","801ED447 008A","801ED4DB 008B","801ED56F 008C","801ED603 008D","801ED697 008E","801ED72B 008F","801ED7BF 007D","801ED853 007E","801ED443 002A","801ED4D7 002A","801ED56B 002A","801ED5FF 002A","801ED693 002A","801ED727 002A","801ED7BB 002A","801ED84F 002A","801ED449 0000","801ED4DD 0000","801ED571 0000","801ED605 0000","801ED699 0000","801ED72D 0000","801ED7C1 0000","801ED855 0000","801ED44D 0000","801ED4E1 0000","801ED575 0000","801ED609 0000","801ED69D 0000","801ED731 0000","801ED7C5 0000","801ED859 0000","801EB743 002A","801EB745 0068","811EB746 277F","811EB748 1000","811EB74A 0262","811EB7C2 0190","801EB7C5 0000","811EB7C6 0258"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 2\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811EB7C8 0000","811EB7CC FFFF","811EB7CE FFFF","811EB7D2 0000","801EB7D5 0000","801EB7DB 0000","811EB7E2 0000","801EB7E7 0000","801EB843 002A","801EB845 0068","811EB846 2780","811EB848 1000","811EB84A 0262","811EB8C2 0190","801EB8C5 0000","811EB8C6 0258","811EB8C8 0000","811EB8CC FFFF","811EB8CE FFFF","811EB8D2 0000","801EB8D5 0000","801EB8DB 0000","811EB8E2 0000","801EB8E7 0000","801EB943 002A","801EB945 0068","811EB946 2791","811EB948 1000","811EB94A 0262","811EB9C2 0190","801EB9C5 0000","811EB9C6 0258","811EB9C8 0000","811EB9CC FFFF","811EB9CE FFFF","811EB9D2 0000","801EB9D5 0000","801EB9DB 0000","811EB9E2 0000","801EB9E7 0000","801EBA43 002A","801EBA45 0068","811EBA46 2792","811EBA48 1000","811EBA4A 0262","811EBAC2 0190","801EBAC5 0000","811EBAC6 0258","811EBAC8 0000","811EBACC FFFF","811EBACE FFFF","811EBAD2 0000","801EBAD5 0000","801EBADB 0000","811EBAE2 0000","801EBAE7 0000","801EBB45 00A0","801EBC45 00A0","801EBD45 00A0","801EBE45 00A0","801EBB47 0075","801EBC47 0076","801EBD47 0077","801EBE47 0078","801EBBE7 0001","801EBCE7 0001","801EBDE7 0001","801EBEE7 0001","801EC247 0071","801ECD47 0072","801ECE47 0074","801ECF47 006C","801ED047 0079","801ED147 0083","D01EBFC5 005A","801EBFC5 0000","D11EBFC6 0000","811EBFC6 F333","D11EBFC8 03E8","811EBFC8 0000"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 3\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["D11EBFCA 0000","811EBFCA F0C4","D11EBFCE 4CCC","811EBFCE 000A","D11EBFD2 4CCC","811EBFD2 000A","D11EBFD4 0003","811EBFD4 0000","D11EBFD6 0000","811EBFD6 02C4","801EBFD9 0004","801EBFDB 0000","811EBFE2 0384","801EBFE7 0004","801EBF45 009E","801EBF47 0084","801EBF48 0010","801EC2D9 0000","801EC447 0085","801EC547 0086","811EA6B6 2743","811EA73E 0114","811EA7F2 0115","811EA8A6 00A3","811EA92E 009D","811EA9E2 00A4","811EAA96 00DA","811EAB1E 00DB","811EABD2 00DF","811EAC86 0130","811EAD0E 008D","811EADC2 012E","811EAE76 0111","811EAEFE 2740","811EAFB2 2741","811EB066 00A0","811EB0EE 009E","811EB1A2 009F","811EB256 274F","811EB2DE 2750","811EB392 0117","811EB446 0131","811EB4CE 008E","811EB582 0132","811EB636 00A1","811EB6BE 0119","811EA62E 00FA","801ED3DF 0000","801ED2DF 0001","D0024337 0007","80024337 001F"],"options":null},"Mod Section\\Gain Access To\\Aztec Level Without Beating Secret Agent Or 00 Agent":{"note":"","data":["8002A8FB 001A"],"options":null},"Mod Section\\Gain Access To\\Egyptian Level Without Beating Secret Agent Or 00 Agent":{"note":"","data":["8002A8FB 001C"],"options":null},"Mod Section\\Have Cradle in multiplayer":{"note":"Puts the cradle graphic in the levels screen where the facility normally is in the multiplayer levels screen.Warning it doesn't allow you to enter the multiplayer levels screen,it should automatically Have\\selected cradle, which cannot be changed from the multiplayer menus","data":["8002B11D 0092","8002B11F 0093","8002B127 0029","8002B123 0008","802ADC8D 0052","802ADC8E 0041","802ADC8F 0044","802ADC90 004C","802ADC91 0045"],"options":null},"Mod Section\\Replace Cradle with Citadell hidden level":{"note":"","data":["8002A8F7 0029","8104468A 8970","81044690 3F44","81044692 BDEA","81044694 3F80","81044696 0000","81044698 4219","8104469A D89D","80069F80 00C4"],"options":null},"Mod Section\\Secret Island on Dam Level":{"note":"For the above code to work,Get to the 2nd guard tower \u0026 go down the ladder on the left hand side \u0026 to the end of the Dock, Press L \u0026 GS and you will be transfered in the water. Just keep walking straight \u0026 you will get to it. Obviously you can't actually climb ladders or anything, you will simply walkthrough anything on that Part, if you want to walk back to the Dock, when you come near it click the cheat back on \u0026 keep pressing L \u0026 GS untill you are back on it.","data":["D0064F31 0020","800D33ED 0050","880D33ED 0000"],"options":null},"Mod Section\\Walk through doors, objects":{"note":"","data":["800364CB 00??"],"options":{"Off":"01","On":"00"}},"Mod Section\\Weak Enemies":{"note":"","data":["8002CE48 0048"],"options":null}},"DCCF2134-9DD63578-C:50":{"Infinite Character Creation Points":{"note":"","data":["8017BB17 000A"],"options":null},"Left vs Right Side":{"note":"","data":["8017BB16 0005"],"options":null},"Max Score In Mini Games":{"note":"","data":["81116230 05F5","81116232 E0FF"],"options":null},"Maximum\\Back,Front,Left \u0026 Right Move":{"note":"","data":["8117BB14 000A"],"options":null},"Maximum\\Serve Smash":{"note":"","data":["8117BB0E 0A0A"],"options":null},"Maximum\\Stroke Spin":{"note":"","data":["8117BB12 0A0A"],"options":null},"Maximum\\Volley Lob":{"note":"","data":["8117BB10 0A0A"],"options":null},"Practice\\Balls Always Zero":{"note":"","data":["8011684F 0000"],"options":null},"Practice\\Time Always Zero":{"note":"","data":["8111684A 0000"],"options":null},"Scoreboard\\Max games bottom":{"note":"","data":["8011698F 0009"],"options":null},"Scoreboard\\Max games top":{"note":"","data":["8011698B 0009"],"options":null},"Scoreboard\\Max sets bottom":{"note":"","data":["80116987 0009"],"options":null},"Scoreboard\\Max sets top":{"note":"","data":["80116983 0009"],"options":null}},"DD26FDA1-CB4A6BE3-C:55":{"Bonus Stage Character Modifier (Training Mode)":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["8018F913 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Give Kirby A Wierd Blow-Up":{"note":"","data":["8025E898 000A"],"options":null},"Have All Characters":{"note":"","data":["810A5078 0FF0"],"options":null},"Jump off to win":{"note":"","data":["810A5282 0000"],"options":null},"P1 Press Down On D-Pad To Make Items Appear In Random Spots":{"note":"","data":["D109F6E4 0400","8118D7E2 0001"],"options":null},"Story Mode\\Always Get Pacifist (60,000 Points)":{"note":"","data":["810A52AE 0000"],"options":null},"Story Mode\\Infinite Time":{"note":"","data":["810A526E 43CB"],"options":null},"Story Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code could also result freezing at the end of the Level.","data":["800A527B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 1\\Infinite Lives":{"note":"","data":["800A5283 0004"],"options":null},"Story Mode\\Player 1\\Kirby B Button Move\\Congo Jungle":{"note":"","data":["8027120F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Fighting Polygon Team":{"note":"","data":["80262E5F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["8026924F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Kirby's Dreamland":{"note":"","data":["8026E27F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Master Hand Stage":{"note":"","data":["8027238F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Metal Mario Stage":{"note":"","data":["80263CD7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Peach's Castle":{"note":"","data":["802644DF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Planet Zebes":{"note":"","data":["802706E7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Saffron City":{"note":"","data":["802741D7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["80271837 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["8026958F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Low % Health":{"note":"","data":["810A52C6 0000"],"options":null},"Story Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A52EF 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 2\\Infinite Lives":{"note":"","data":["800A52F7 0004"],"options":null},"Story Mode\\Player 2\\Low % Health":{"note":"","data":["810A533A 0000"],"options":null},"Story Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A5363 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 3\\Infinite Lives":{"note":"","data":["800A536B 0004"],"options":null},"Story Mode\\Player 3\\Low % Health":{"note":"","data":["810A53AE 0000"],"options":null},"Story Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A53D7 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 4\\Infinite Lives":{"note":"","data":["800A53DF 0004"],"options":null},"Story Mode\\Player 4\\Low % Health":{"note":"","data":["810A5422 0000"],"options":null},"Story Mode\\Skip Straight To Master Hand":{"note":"","data":["800A5227 000D"],"options":null},"VS. Mode\\Have Mushroom Kindom":{"note":"","data":["800A5077 00FF"],"options":null},"VS. Mode\\Infinite Time":{"note":"","data":["810A545E 43CB"],"options":null},"VS. Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A546B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["8026412F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["8026C6C7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["8026E9F7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Low % Health":{"note":"","data":["810A54B6 0000"],"options":null},"VS. Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A54DF 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 2\\Low % Health":{"note":"","data":["810A552A 0000"],"options":null},"VS. Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A5553 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 3\\Low % Health":{"note":"","data":["810A559E 0000"],"options":null},"VS. Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A55C7 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 4\\Low % Health":{"note":"","data":["810A5612 0000"],"options":null}},"DD318CE2-B73798BA-C:45":{"Always On First Shot":{"note":"","data":["811DA47A 0001"],"options":null},"Club Type\\Irons Mods":{"note":"","data":["8012A473 00??"],"options":{"Cavity":"00","Conventional":"01"}},"Club Type\\Sand Wedge Mods":{"note":"","data":["8012A474 00??"],"options":{"58 Degrees":"00","60 Degrees":"01","62 Degrees":"02"}},"Club Type\\Woods Mods":{"note":"","data":["8012A472 00??"],"options":{"Metal Wood":"01","Persimmon":"02","Titan":"00"}},"Max Power":{"note":"","data":["8012A431 FFFF"],"options":null},"Max Putt":{"note":"","data":["8012A435 FFFF"],"options":null},"Max Recover":{"note":"","data":["8012A437 FFFF"],"options":null},"Max Technique":{"note":"","data":["8012A433 FFFF"],"options":null},"Select Club":{"note":"","data":["801DA496 00??"],"options":{"1I":"05","1W":"00","2I":"06","2W":"01","3I":"07","3W":"02","4I":"08","4W":"03","5I":"09","5W":"04","6I":"0A","7I":"0B","8I":"0C","9I":"0D","AW":"0F","PW":"0E","Putter":"11","SW":"10"}}},"DDD93C85-DAE381E8-C:45":{"Infinite\\Lives":{"note":"","data":["800A3648 0009"],"options":null},"Infinite\\Specials":{"note":"","data":["800A3649 0003"],"options":null},"Max\\Combo":{"note":"","data":["810A3644 7FFF"],"options":null},"Max\\Lower Level":{"note":"","data":["800A3658 0003"],"options":null},"Max\\Score":{"note":"","data":["800A3628 0063","800A3629 0063"],"options":null},"Max\\Upper Level":{"note":"","data":["800A3659 0063"],"options":null},"Play As":{"note":"","data":["800A364C 00??"],"options":{"Character 1":"00","Character 2":"01","Character 3":"02"}},"Status Modifier":{"note":"","data":["800A364A 00??"],"options":{"High":"01","Low":"03","Mid":"02"}},"Widescreen":{"note":"Clearing Issues Near Edges of Screen","data":["810754EC 3FE3"],"options":null}},"DDF460CC-3CA634C0-C:45":{"All levels Complete":{"note":"","data":["50004002 0000","810A2218 0001"],"options":null},"Carrington Institute\\Have 255 targets destroyed":{"note":"","data":["810B1E34 00FF"],"options":null},"Carrington Institute\\Have 999 points in Firing Range":{"note":"","data":["810B1E32 03E7"],"options":null},"Carrington Institute\\Have Infinite time in Firing Range":{"note":"","data":["810B1E2E 004D"],"options":null},"Have All\\Weapons\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80207F10 0007","801EEF10 0007","801D5F10 0007"],"options":null},"Have All\\Weapons\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80209B80 0007","801F0B80 0007","801D7B80 0007"],"options":null},"Infinite Ammo\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8020769F 00FF","801EE69F 00FF","801D569F 00FF","80206EFB 00FF","801EDEFB 00FF","801D4EFB 00FF"],"options":null},"Infinite Ammo\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8020930F 00FF","801F030F 00FF","801D730F 00FF","80208B6B 00FF","801EFB6B 00FF","801D6B6B 00FF"],"options":null},"Infinite Health\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8120677C 3F80","811ED77C 3F80","811D477C 3F80"],"options":null},"Infinite Health\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["812083EC 3F80","811EF3EC 3F80","811D63EC 3F80"],"options":null},"Infinite Shield\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81206790 3F80","811E4950 3F80","811CB950 3F80"],"options":null},"Infinite Shield\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["811FF5C0 3F80","811E65C0 3F80","811CD5C0 3F80"],"options":null},"Multi\\Press B To Levitate\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7E4 0040","811BB720 40F2","D009C7E4 0040","801BB6D3 0000"],"options":null},"Multi\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7EC 0040","811BD390 40F2","D009C7EC 0040","801BD343 0000"],"options":null},"Multi\\Press B To Levitate\\Player 3":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7F4 0040","811BF000 40F2","D009C7F4 0040","801BEFB3 0000"],"options":null},"Multi\\Press B To Levitate\\Player 4":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7FC 0040","811C0C70 40F2","D009C7FC 0040","801C0C23 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7E4 0040","81206720 40F2","D009C7E4 0040","802066D3 0000","D009C7E4 0040","811ED720 40F2","D009C7E4 0040","801ED6D3 0000","D009C7E4 0040","811D4720 40F2","D009C7E4 0040","801D46D3 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7EC 0040","81208390 40F2","D009C7EC 0040","80208343 0000","D009C7EC 0040","811EF390 40F2","D009C7EC 0040","801EF343 0000","D009C7EC 0040","811D6390 40F2","D009C7EC 0040","801D6343 0000"],"options":null},"The Ultimate All In One":{"note":"The Ultimate All In One activate's solo missions, give all medals on solo missions, activate cheats, activate cinemas, and who knows what else. I just don't have the time to identify these codes. I know that some of this is creditted to Zap2. I don't have the time to cut those codes out.","data":["800884F3 0001","8008850E 0001","80088575 0001","50000302 0000","80088572 0001","8008858C 0001","8008858D 0001","800885A6 0001","800885A9 0001","800885C0 0001","800885DA 0001","800885DC 0001","800885F4 0001","800885F5 0001","8008860E 0001","80088610 0001","80088612 0001","80088628 0001","50000501 0000","80088642 0001","50000501 0000","8008865C 0001","50000501 0000","80088676 0001","50000501 0000","80088690 0001","50000501 0000","800886AA 0001","50000501 0000","800886C4 0001","50000501 0000","800886DE 0001","50000501 0000","800886F8 0001","50000501 0000","80088712 0001","50000501 0000","8008872C 0001","50000501 0000","80088746 0001","50000501 0000","80088760 0001","50000501 0000","8008877A 0001","50000501 0000","80088794 0001","50000501 0000","800887AE 0001","800A2219 0001","50003E02 0000","800A221D 0001","50000B01 0000","800ACCC9 0001","50000901 0000","800ACCD5 0001","50000401 0000","800ACCDF 0001","50000301 0000","800ACCE4 0001","800ACCE8 0001","800ACCE9 0001","800ACCEB 0001","800ACCEC 0001","50000901 0000","800ACCEE 0001","800ACCF8 0001","50002101 0000","800ACCFA 0001","800ACD12 0001","800ACD15 0001","800ACD16 0001","800ACDEA 0001","800ACD3A 0001"],"options":null}},"DEB78BBA-52F6BD9D-C:45":{"Away Team\\Scores 0":{"note":"","data":["8005FA47 0000"],"options":null},"Away Team\\Scores 50":{"note":"","data":["8005FA47 0032"],"options":null},"Enable\\All Stadiums":{"note":"","data":["50000801 0000","8004A7F0 00FF"],"options":null},"Enable\\All Teams":{"note":"","data":["50000E01 0000","8004ADD0 00FF"],"options":null},"Home Team\\Scores 0":{"note":"","data":["8005CF87 0000"],"options":null},"Home Team\\Scores 50":{"note":"","data":["8005CF87 0032"],"options":null},"Infinite\\Time Outs Away Team":{"note":"","data":["8005FA49 0003"],"options":null},"Infinite\\Time Outs Home Team":{"note":"","data":["8005CF89 0003"],"options":null},"No Time-Outs\\Away Team":{"note":"","data":["8005FA49 0000"],"options":null},"No Time-Outs\\Home Team":{"note":"","data":["8005CF89 0000"],"options":null},"Press L For First Down\\Player 1":{"note":"","data":["D0066F2D 0020","810612E0 0001"],"options":null},"Press L For First Down\\Player 2":{"note":"","data":["D0066F35 0020","810612E0 0001"],"options":null},"Press L For First Down\\Player 3":{"note":"","data":["D0066F3D 0020","810612E0 0001"],"options":null},"Press L For First Down\\Player 4":{"note":"","data":["D0066F45 0020","810612E0 0001"],"options":null},"Press L For More Time To Choose Play\\Player 1":{"note":"","data":["D0066F2D 0020","80061245 0028"],"options":null},"Press L For More Time To Choose Play\\Player 2":{"note":"","data":["D0066F35 0020","80061245 0028"],"options":null},"Press L For More Time To Choose Play\\Player 3":{"note":"","data":["D0066F3D 0020","80061245 0028"],"options":null},"Press L For More Time To Choose Play\\Player 4":{"note":"","data":["D0066F45 0020","80061245 0028"],"options":null},"Press R For Fourth Down\\Player 1":{"note":"","data":["D0066F2D 0010","810612E0 0004"],"options":null},"Press R For Fourth Down\\Player 2":{"note":"","data":["D0066F35 0010","810612E0 0004"],"options":null},"Press R For Fourth Down\\Player 3":{"note":"","data":["D0066F3D 0010","810612E0 0004"],"options":null},"Press R For Fourth Down\\Player 4":{"note":"","data":["D0066F45 0010","810612E0 0004"],"options":null}},"DED0DD9A-E78225A7-C:50":{"Always 1st \u0026 final time 00:00.00":{"note":"All Levels","data":["50000301 0000","801CE959 0000"],"options":null},"Difficulty Select":{"note":"","data":["8007C1C0 00??"],"options":{"Amateur":"00","Intermediate":"01","Mirror Mode":"03","Professional":"02"}},"Frantic Finale\\Colorado\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801BDB3B 00FF"],"options":null},"Frantic Finale\\Colorado\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7432 0063"],"options":null},"Frantic Finale\\Hawaii\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B75BB 00FF"],"options":null},"Frantic Finale\\Hawaii\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7B12 0063"],"options":null},"Frantic Finale\\Oregon\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801BABEB 00FF"],"options":null},"Frantic Finale\\Oregon\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B44E2 0063"],"options":null},"Frantic Finale\\Texas\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801BB38B 00FF"],"options":null},"Frantic Finale\\Texas\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B4C82 0063"],"options":null},"Freewayphobia\\Chicago\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B758B 00FF"],"options":null},"Freewayphobia\\Chicago\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7AE2 0063"],"options":null},"Freewayphobia\\Dakota\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B159B 00FF"],"options":null},"Freewayphobia\\Dakota\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B2CB2 0063"],"options":null},"Freewayphobia\\New York\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B4A5B 00FF"],"options":null},"Freewayphobia\\New York\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B4FB2 0063"],"options":null},"Freewayphobia\\Seattle\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B417B 00FF"],"options":null},"Freewayphobia\\Seattle\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B5892 0063"],"options":null},"Level Select":{"note":"","data":["801AD159 00??"],"options":{"Contest":"07","Frantic Finale":"04","Freewayphobia":"02","Motor Way Mania":"01","Options":"08","Practice":"06","Time Trial":"05","Traffic Troubles":"00","Vitory Vehicles":"03"}},"Motor Way Mania\\Alaska\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B280B 00FF"],"options":null},"Motor Way Mania\\Alaska\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B3F22 0063"],"options":null},"Motor Way Mania\\Las Vegas\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B6E9B 00FF"],"options":null},"Motor Way Mania\\Las Vegas\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B85B2 0063"],"options":null},"Motor Way Mania\\Los Angeles\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B207B 00FF"],"options":null},"Motor Way Mania\\Los Angeles\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B3792 0063"],"options":null},"Motor Way Mania\\Philadelphia\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B7DEB 00FF"],"options":null},"Motor Way Mania\\Philadelphia\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B9502 0063"],"options":null},"Play As":{"note":"","data":["800D33D1 00??"],"options":{"Daisy Duck":"01","Dewey":"07","Donald Duck":"05","Goofy":"02","Huey":"06","Louie":"08","Lugwig Von Drake":"09","Mickey Mouse":"00","Minnie Mouse":"04","Pete":"03"}},"Re-name Characters\\Daisy\\Letter 1":{"note":"","data":["801E39CE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 2":{"note":"","data":["801E39CF 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 3":{"note":"","data":["801E39D0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 4":{"note":"","data":["801E39D1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 5":{"note":"","data":["801E39D2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 1":{"note":"","data":["801E39E4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 2":{"note":"","data":["801E39E5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 3":{"note":"","data":["801E39E6 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 4":{"note":"","data":["801E39E7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 5":{"note":"","data":["801E39E8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 1":{"note":"","data":["801E39C7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 2":{"note":"","data":["801E39C8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 3":{"note":"","data":["801E39C9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 4":{"note":"","data":["801E39CA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 5":{"note":"","data":["801E39CB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 6":{"note":"","data":["801E39CC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 1":{"note":"","data":["801E39D4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 2":{"note":"","data":["801E39D5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 3":{"note":"","data":["801E39D6 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 4":{"note":"","data":["801E39D7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 5":{"note":"","data":["801E39D8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 1":{"note":"","data":["801E39DF 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 2":{"note":"","data":["801E39E0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 3":{"note":"","data":["801E39E1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 4":{"note":"","data":["801E39E2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 1":{"note":"","data":["801E39EA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 2":{"note":"","data":["801E39EB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 3":{"note":"","data":["801E39EC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 4":{"note":"","data":["801E39ED 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 5":{"note":"","data":["801E39EE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 1":{"note":"","data":["801E39F0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 2":{"note":"","data":["801E39F1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 3":{"note":"","data":["801E39F2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 4":{"note":"","data":["801E39F3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 5":{"note":"","data":["801E39F4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 6":{"note":"","data":["801E39F5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 1":{"note":"","data":["801E39B9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 2":{"note":"","data":["801E39BA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 3":{"note":"","data":["801E39BB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 4":{"note":"","data":["801E39BC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 5":{"note":"","data":["801E39BD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 6":{"note":"","data":["801E39BE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 1":{"note":"","data":["801E39C0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 2":{"note":"","data":["801E39C1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 3":{"note":"","data":["801E39C2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 4":{"note":"","data":["801E39C3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 5":{"note":"","data":["801E39C4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 6":{"note":"","data":["801E39C5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 1":{"note":"","data":["801E39DA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 2":{"note":"","data":["801E39DB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 3":{"note":"","data":["801E39DC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 4":{"note":"","data":["801E39DD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Traffic Troubles\\Grand Canyon\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B8CCB 00FF"],"options":null},"Traffic Troubles\\Grand Canyon\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B8CF2 0063"],"options":null},"Traffic Troubles\\Indianapolis\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B430B 00FF"],"options":null},"Traffic Troubles\\Indianapolis\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B4332 0063"],"options":null},"Traffic Troubles\\New Mexico\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B58DB 00FF"],"options":null},"Traffic Troubles\\New Mexico\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B5902 0063"],"options":null},"Traffic Troubles\\San Fransisco\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B75DB 00FF"],"options":null},"Traffic Troubles\\San Fransisco\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7602 0063"],"options":null},"Unlock Everything":{"note":"This will unlock all characters, tracks, mirror mode, all in-game cheats, postcards, pluto's collar and give you all Trophies for every track and difficulties. To have this cheat save to mempak, enable it and then go into the Options Menu and disable the cheat. Go to the Wide-Screen Settings and Change it to Wide-Screen [16.9] and then the B button to get back to Wide-Screen Settings, now go back into Wide-Screen [16.9] and change it back to Normal [4.3].and press the B button until you come back to the main Options Menu.Close the game and load it again to see everything saved to the Mempak and unlocked.","data":["800D3478 008F","800D3479 0094","800D347A 0003","800D347C 0001","800D347F 0080","50000502 0000","800D3480 0009","50000502 0000","800D3481 0024","800D348A 0015","800D348B 007F","800D348C 0001","800D348D 00FF","800D348E 0004","800D348F 0022"],"options":null},"Victory Vehicles\\Everglades\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B516B 00FF"],"options":null},"Victory Vehicles\\Everglades\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B56C2 0063"],"options":null},"Victory Vehicles\\Malibu\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B6BFB 00FF"],"options":null},"Victory Vehicles\\Malibu\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7152 0063"],"options":null},"Victory Vehicles\\Washington DC\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801BCBAB 00FF"],"options":null},"Victory Vehicles\\Washington DC\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801BD102 0063"],"options":null},"Victory Vehicles\\Yellowstone\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B2A0B 00FF"],"options":null},"Victory Vehicles\\Yellowstone\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B2F62 0063"],"options":null}},"DEE584A2-0F161187-C:45":{"Have All\\Cars":{"note":"","data":["50000C01 0000","80097A18 0001"],"options":null},"Have All\\Difficulty Levels":{"note":"","data":["80097A17 0003"],"options":null},"Have All\\Tracks":{"note":"","data":["50000C01 0000","80095CC8 0001"],"options":null},"Infinite Health\\Player 1\\Alpine Ridge":{"note":"","data":["D02BA164 0080","802BA173 00EB"],"options":null},"Infinite Health\\Player 1\\Aztec Ruins":{"note":"","data":["D01FC428 0080","801FC437 00BE"],"options":null},"Infinite Health\\Player 1\\Bayou Run":{"note":"","data":["D02862BC 0080","802862CB 00EB"],"options":null},"Infinite Health\\Player 1\\Destruction Junction":{"note":"","data":["D029A9B0 0080","8029A9BF 00E1"],"options":null},"Infinite Health\\Player 1\\Ground Zero":{"note":"","data":["D01F64C8 0080","801F64D7 00BE"],"options":null},"Infinite Health\\Player 1\\Junkyard":{"note":"","data":["D0205B7C 0080","80205B8B 00BE"],"options":null},"Infinite Health\\Player 1\\Metro Challenge":{"note":"","data":["D02EDB18 0080","802EDB27 00E1"],"options":null},"Infinite Health\\Player 1\\Midnyte Rumble":{"note":"","data":["D030CC0C 0080","8030CC1B 00EB"],"options":null},"Infinite Health\\Player 1\\Seascape Sprint":{"note":"","data":["D02D4C24 0080","802D4C33 00E1"],"options":null},"Infinite Health\\Player 1\\Sunset Canyon":{"note":"","data":["D0303EA8 0080","80303EB7 00EB"],"options":null},"Infinite Health\\Player 1\\Terminal Impact":{"note":"","data":["D02B5F2D 0080","802B56B3 00E1"],"options":null},"Infinite Health\\Player 1\\Urban Mayhem":{"note":"","data":["D0203F10 0080","80203F1F 00C8"],"options":null},"Infinite Health\\Player 2\\Alpine Ridge":{"note":"","data":["D02C8BD0 0080","802C8BDF 00B4"],"options":null},"Infinite Health\\Player 2\\Aztec Ruins":{"note":"","data":["D0217C50 0080","80217C5F 00A0"],"options":null},"Infinite Health\\Player 2\\Bayou Run":{"note":"","data":["D0295190 0080","8029519F 00B4"],"options":null},"Infinite Health\\Player 2\\Destruction Junction":{"note":"","data":["D02B61D0 0080","802B61DF 00B4"],"options":null},"Infinite Health\\Player 2\\Ground Zero":{"note":"","data":["D0211D10 0080","80211D1F 00A0"],"options":null},"Infinite Health\\Player 2\\Junkyard":{"note":"","data":["D0215050 0080","8021505F 00A0"],"options":null},"Infinite Health\\Player 2\\Metro Challenge":{"note":"","data":["D02FCC10 0080","802FCC1F 00B4"],"options":null},"Infinite Health\\Player 2\\Midnyte Rumble":{"note":"","data":["D032ADD0 0080","8032ADDF 00B4"],"options":null},"Infinite Health\\Player 2\\Seascape Sprint":{"note":"","data":["D02E2D50 0080","802E2D5F 00E1"],"options":null},"Infinite Health\\Player 2\\Sunset Canyon":{"note":"","data":["D0312810 0080","8031281F 00B4"],"options":null},"Infinite Health\\Player 2\\Terminal Impact":{"note":"","data":["D02C4550 0080","802C455F 00E1"],"options":null},"Infinite Health\\Player 2\\Urban Mayhem":{"note":"","data":["D0235E50 0080","80235E5F 00A0"],"options":null},"Max Bonus Points\\01: Seascape Sprint":{"note":"","data":["812D4C3E 03E7"],"options":null},"Max Bonus Points\\02: Metro Challenge":{"note":"","data":["812EDB32 03E7"],"options":null},"Max Bonus Points\\03: Junkyard":{"note":"","data":["81205B9A 03E7"],"options":null},"Max Bonus Points\\04: Terminal Impact":{"note":"","data":["812B56BE 03E7"],"options":null},"Max Bonus Points\\05: Destruction Junction":{"note":"","data":["8129A9CA 03E7"],"options":null},"Max Bonus Points\\06: Aztec Ruins":{"note":"","data":["81095D36 03E7"],"options":null},"Max Collisions Points\\01: Seascape Sprint":{"note":"","data":["812D4C3A 03E7"],"options":null},"Max Collisions Points\\02: Metro Challenge":{"note":"","data":["812EDB2E 03E7"],"options":null},"Max Collisions Points\\03: Junkyard":{"note":"","data":["81205B92 03E7"],"options":null},"Max Collisions Points\\04: Terminal Impact":{"note":"","data":["812B56BA 03E7"],"options":null},"Max Collisions Points\\05: Destruction Junction":{"note":"","data":["8129A9C6 03E7"],"options":null},"Max Collisions Points\\06: Aztec Ruins":{"note":"","data":["81095D06 03E7"],"options":null},"Max Points Aid":{"note":"","data":["8111EF4E 03E7"],"options":null}},"DEE596AB-AF3B7AE7-C:45":{"Always Special\\Player 1":{"note":"","data":["800F9D35 0008"],"options":null},"Always Special\\Player 2":{"note":"","data":["800FA0E5 0008"],"options":null},"Always Special\\Player 3":{"note":"","data":["800FA495 0008"],"options":null},"Always Special\\Player 4":{"note":"","data":["800FA845 0008"],"options":null},"Character Select\\Player 1":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890F9D36 0240","890F9D60 42B4","8107E8B2 ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 2":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA0E6 0240","890FA110 42B4","8107E8B6 ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 3":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA496 0240","890FA4C0 42B4","8107E8BA ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 4":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA846 0240","890FA870 42B4","8107E8BE ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Extra Characters \u0026 Modes":{"note":"","data":["8107F07C FFFF"],"options":null},"Get Title Belt In 1-Match":{"note":"","data":["80038AAB 0008"],"options":null},"Infinite Time":{"note":"","data":["800FAF87 0000"],"options":null},"Infinite Time Out Of Ring":{"note":"","data":["800FACE8 0014"],"options":null},"Spirit Select\\Player 1":{"note":"","data":["800F9D25 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 2":{"note":"","data":["800FA0D5 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 3":{"note":"","data":["800FA485 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 4":{"note":"","data":["800FA835 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Ultimate Code\\Player 1":{"note":"","data":["800F9D24 0064"],"options":null},"Ultimate Code\\Player 2":{"note":"","data":["800FA0D4 0064"],"options":null},"Ultimate Code\\Player 3":{"note":"","data":["800FA484 0064"],"options":null},"Ultimate Code\\Player 4":{"note":"","data":["800FA834 0064"],"options":null},"Weapon Select\\Player 1":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800F9D31 0003","800F98E1 00??","800F98E2 0000","800F99A0 0000"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 2":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA0E1 0003","800F9911 00??","800F9912 0001","800F99A1 0001"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 3":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA491 0003","800F9941 00??","800F9942 0002","800F99A2 0002"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 4":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA841 0003","800F9971 00??","800F9972 0003","800F99A3 0003"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}}},"DF331A18-5FD4E044-C:45":{"1 Lap Race":{"note":"Do not put this on with Total Number of Laps Code","data":["810495AE 0001"],"options":null},"Beat Championship Mode Easily":{"note":"","data":["80223E3B 0255"],"options":null},"Both Players Can Be Dale E":{"note":"","data":["80046538 0003"],"options":null},"Have CPU Control Car Player 1":{"note":"","data":["D0092985 0020","8015CC5C 0001","D0092985 0010","8015CC5C 0000"],"options":null},"Infinite Fuel\\Player 1":{"note":"","data":["81220502 3E80"],"options":null},"Infinite Fuel\\Player 2":{"note":"","data":["81230472 3E80"],"options":null},"Maximum\\Acceleration":{"note":"","data":["800C7113 0000"],"options":null},"Maximum\\Pit Distance":{"note":"","data":["800C7110 0000"],"options":null},"Maximum\\Top Speed":{"note":"","data":["800C7111 0000"],"options":null},"Race Forever":{"note":"","data":["810465AE FDE8"],"options":null},"Total Number Of Laps":{"note":"","data":["80046553 00??"],"options":{"1 lap":"01","2 lap":"02","3 lap":"03","4 lap":"04","5 lap":"05","6 lap":"06","7 lap":"07","8 lap":"08","9 lap":"09"}}},"DF574191-9EB5123D-C:45":{"Have 231 Marbles":{"note":"","data":["D00E9FF3 0000","800E9FF3 03E7"],"options":null},"Have All Gold Udders":{"note":"","data":["50002802 0000","810C625A 0101"],"options":null},"Infinite Banana Peel Ammo":{"note":"","data":["810C6976 03E7"],"options":null},"Infinite Blaster Ammo":{"note":"","data":["810C6916 03E7"],"options":null},"Infinite Boomerang Knives Ammo":{"note":"","data":["810C6A1E 03E7"],"options":null},"Infinite Cleaver Ammo":{"note":"","data":["800C6A1F 00FA"],"options":null},"Infinite Egg Chucker Ammo":{"note":"","data":["800C69BF 00FA"],"options":null},"Infinite Green Slimer Ammo":{"note":"","data":["810C69A6 03E7"],"options":null},"Infinite Health":{"note":"","data":["800C690F 0064"],"options":null},"Infinite Laser Ammo":{"note":"","data":["800C6917 00FA"],"options":null},"Infinite Lives":{"note":"","data":["800C6913 0063"],"options":null},"Infinite Mushroom Ammo":{"note":"","data":["810C6E36 03E7"],"options":null},"Infinite Music Gun Ammo":{"note":"","data":["810C6A06 03E7"],"options":null},"Infinite Rocket Launcher Ammo":{"note":"","data":["810C6946 03E7"],"options":null},"Infinite Shotgun Ammo":{"note":"","data":["810C69EE 03E7"],"options":null}},"DF6FF0F4-29D14238-C:4A":{"Bomb Select":{"note":"","data":["8024A3A1 00??"],"options":{"Blue Remote Bomb":"05","Clear All Special Bombs.":"00","Crazy Bomb":"1D","Invisible Mine Bomb":"07","Jelly Bomb":"03","Power Bomb":"02","Red Beem Bomb":"06","Shock Wave Bomb":"04"}},"Bomberman Speed":{"note":"","data":["8024A3A0 00??"],"options":{"Fast":"0E","Normal":"08","Slow":"04","Turbo":"10"}},"Have\\Infinite\\Kick":{"note":"","data":["8024A3A6 0002"],"options":null},"Have\\Max Bombs":{"note":"","data":["8024A39F 00FF"],"options":null},"Have\\Max Fire":{"note":"","data":["8024A39E 00FF"],"options":null},"Infinite\\Health Hearts":{"note":"","data":["8024A3AE 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["802E1CE7 00FF"],"options":null},"Infinite\\Timer":{"note":"","data":["800FDD72 002A"],"options":null},"Invincible":{"note":"Enemies \u0026 Bomb Blasts cant harm you.But if you walk \u0026 keep laying Bombs it will most likly freeze.so try to avoid constant bombing while walking.Turn cheat to off to go back to normal.","data":["8024A3A8 00??"],"options":{"Off":"00","On":"01"}},"Walk through\\Blocks":{"note":"Walk through Blocks like they are not there.Turn cheat to off to go back to normal.","data":["8024A3A5 00??"],"options":{"Off":"00","On":"01"}},"Walk through\\Bombs":{"note":"Walk through Bombs like they are not there.Turn cheat to off to go back to normal.","data":["8024A3A6 00??"],"options":{"Off":"00","On":"01"}}},"DF98B95D-58840978-C:4A":{"Freeze Timer":{"note":"","data":["811C84C4 012C"],"options":null},"Level 01\\Invincible":{"note":"","data":["D112D33A 0001","811E4B38 000A","D1147DEA 0001","811E4B38 000A"],"options":null},"Level 01\\Press R For Supa Attack":{"note":"","data":["D112D33A 0001","811E4B3C 01F4","D1147DEA 0001","811E4B3C 01F4"],"options":null},"Level 02\\Invincible":{"note":"","data":["D112D33A 0002","811E1DB8 000A","D1147DEA 0002","811E1DB8 000A"],"options":null},"Level 02\\Press R For Supa Attack":{"note":"","data":["D112D33A 0002","811E1DBC 01F4","D1147DEA 0002","811E1DBC 01F4"],"options":null},"Level 03\\Invincible":{"note":"","data":["D112D33A 0003","811E4D38 000A","D1147DEA 0003","811E4D38 000A"],"options":null},"Level 03\\Press R For Supa Attack":{"note":"","data":["D112D33A 0003","811E4D3C 01F4","D1147DEA 0003","811E4D3C 01F4"],"options":null},"Level 04\\Invincible":{"note":"","data":["D112D33A 0004","811E11B8 000A","D1147DEA 0004","811E11B8 000A"],"options":null},"Level 04\\Press R For Supa Attack":{"note":"","data":["D112D33A 0004","811E11BC 01F4","D1147DEA 0004","811E11BC 01F4"],"options":null},"Level 05\\Invincible":{"note":"","data":["D112D33A 0005","811E3638 000A","D1147DEA 0005","811E3638 000A"],"options":null},"Level 05\\Press R For Supa Attack":{"note":"","data":["D112D33A 0005","811E363C 01F4","D1147DEA 0005","811E363C 01F4"],"options":null},"Level 06\\Invincible":{"note":"","data":["D112D33A 0006","811E4EB8 000A","D1147DEA 0006","811E4EB8 000A"],"options":null},"Level 06\\Press R For Supa Attack":{"note":"","data":["D112D33A 0006","811E4EBC 01F4","D1147DEA 0006","811E4EBC 01F4"],"options":null},"Level 07\\Invincible":{"note":"","data":["D112D33A 0007","811E5D38 000A","D1147DEA 0007","811E5D38 000A"],"options":null},"Level 07\\Press R For Supa Attack":{"note":"","data":["D112D33A 0007","811E5D3C 01F4","D1147DEA 0007","811E5D3C 01F4"],"options":null},"Level 08\\Invincible":{"note":"","data":["D112D33A 0008","811E2838 000A","D1147DEA 0008","811E2838 000A"],"options":null},"Level 08\\Press R For Supa Attack":{"note":"","data":["D112D33A 0008","811E283C 01F4","D1147DEA 0008","811E283C 01F4"],"options":null},"Level 09\\Invincible":{"note":"","data":["D112D33A 0009","811EB3B8 000A","D1147DEA 0009","811EB3B8 000A"],"options":null},"Level 09\\Press R For Supa Attack":{"note":"","data":["D112D33A 0009","811EB3BC 01F4","D1147DEA 0009","811EB3BC 01F4"],"options":null},"Level 10\\Invincible":{"note":"","data":["D112D33A 000A","811E5438 000A","D1147DEA 000A","811E5438 000A"],"options":null},"Level 10\\Press R For Supa Attack":{"note":"","data":["D112D33A 000A","811E543C 01F4","D1147DEA 000A","811E543C 01F4"],"options":null},"Level 11\\Invincible":{"note":"","data":["D112D33A 000B","811E1EB8 000A","D1147DEA 000B","811E1EB8 000A"],"options":null},"Level 11\\Press R For Supa Attack":{"note":"","data":["D112D33A 000B","811E1EBC 01F4","D1147DEA 000B","811E1EBC 01F4"],"options":null},"Level 12\\Invincible":{"note":"","data":["D112D33A 000C","811FA6B8 000A","D1147DEA 000C","811FA6B8 000A"],"options":null},"Level 12\\Press R For Supa Attack":{"note":"","data":["D112D33A 000C","811FA6BC 01F4","D1147DEA 000C","811FA6BC 01F4"],"options":null},"Level 13\\Invincible":{"note":"","data":["D112D33A 000D","811EAE38 000A","D1147DEA 000D","811EAE38 000A"],"options":null},"Level 13\\Press R For Supa Attack":{"note":"","data":["D112D33A 000D","811EAE3C 01F4","D1147DEA 000D","811EAE3C 01F4"],"options":null},"Level 14\\Invincible":{"note":"","data":["D112D33A 000E","811E2EB8 000A","D1147DEA 000E","811E2EB8 000A"],"options":null},"Level 14\\Press R For Supa Attack":{"note":"","data":["D112D33A 000E","811E2EBC 01F4","D1147DEA 000E","811E2EBC 01F4"],"options":null},"Level 15\\Invincible":{"note":"","data":["D112D33A 000F","811E2738 000A","D1147DEA 000F","811E2738 000A"],"options":null},"Level 15\\Press R For Supa Attack":{"note":"","data":["D112D33A 000F","811E273C 01F4","D1147DEA 000F","811E273C 01F4"],"options":null},"Level 16\\Invincible":{"note":"","data":["D112D33A 0010","811E53B8 000A","D1147DEA 0010","811E53B8 000A"],"options":null},"Level 16\\Press R For Supa Attack":{"note":"","data":["D112D33A 0010","811E538C 01F4","D1147DEA 0010","811E538C 01F4"],"options":null},"Level 17\\Invincible":{"note":"","data":["D112D33A 0011","811E2738 000A","D1147DEA 0011","811E2738 000A"],"options":null},"Level 17\\Press R For Supa Attack":{"note":"","data":["D112D33A 0011","811E273C 01F4","D1147DEA 0011","811E273C 01F4"],"options":null},"Level 18\\Invincible":{"note":"","data":["D112D33A 0012","811E1CB8 000A","D1147DEA 0012","811E1CB8 000A"],"options":null},"Level 18\\Press R For Supa Attack":{"note":"","data":["D112D33A 0012","811E1CBC 01F4","D1147DEA 0012","811E1CBC 01F4"],"options":null},"Level 19\\Invincible":{"note":"","data":["D112D33A 0013","811E4438 000A","D1147DEA 0013","811E4438 000A"],"options":null},"Level 19\\Press R For Supa Attack":{"note":"","data":["D112D33A 0013","811E443C 01F4","D1147DEA 0013","811E443C 01F4"],"options":null},"Level 20\\Invincible":{"note":"","data":["D112D33A 0014","811F7238 000A","D1147DEA 0014","811F7238 000A"],"options":null},"Level 20\\Press R For Supa Attack":{"note":"","data":["D112D33A 0014","811F723C 01F4","D1147DEA 0014","811F723C 01F4"],"options":null},"Level 21\\Invincible":{"note":"","data":["D112D33A 0015","811E49B8 000A","D1147DEA 0015","811E49B8 000A"],"options":null},"Level 21\\Press R For Supa Attack":{"note":"","data":["D112D33A 0015","811E49BC 01F4","D1147DEA 0015","811E49BC 01F4"],"options":null},"Level 22\\Invincible":{"note":"","data":["D112D33A 0016","811E40B8 000A","D1147DEA 0016","811E40B8 000A"],"options":null},"Level 22\\Press R For Supa Attack":{"note":"","data":["D112D33A 0016","811E40BC 01F4","D1147DEA 0016","811E40BC 01F4"],"options":null},"Level 23\\Invincible":{"note":"","data":["D112D33A 0017","811E9C38 000A","D1147DEA 0017","811E9C38 000A"],"options":null},"Level 23\\Press R For Supa Attack":{"note":"","data":["D112D33A 0017","811E9C3C 01F4","D1147DEA 0017","811E9C3C 01F4"],"options":null},"Level 24\\Invincible":{"note":"","data":["D112D33A 0018","811E2938 000A","D1147DEA 0018","811E2938 000A"],"options":null},"Level 24\\Press R For Supa Attack":{"note":"","data":["D112D33A 0018","811E293C 01F4","D1147DEA 0018","811E293C 01F4"],"options":null},"Level 25\\Invincible":{"note":"","data":["D112D33A 0019","811E4D38 000A","D1147DEA 0019","811E4D38 000A"],"options":null},"Level 25\\Press R For Supa Attack":{"note":"","data":["D112D33A 0019","811E4D3C 01F4","D1147DEA 0019","811E4D3C 01F4"],"options":null},"Level 26\\Invincible":{"note":"","data":["D112D33A 001A","811EFFB8 000A","D1147DEA 001A","811EFFB8 000A"],"options":null},"Level 26\\Press R For Supa Attack":{"note":"","data":["D112D33A 001A","811EFFBC 01F4","D1147DEA 001A","811EFFBC 01F4"],"options":null},"Level 27\\Invincible":{"note":"","data":["D112D33A 001B","811E2B38 000A","D1147DEA 001B","811E2B38 000A"],"options":null},"Level 27\\Press R For Supa Attack":{"note":"","data":["D112D33A 001B","811E2B3C 01F4","D1147DEA 001B","811E2B3C 01F4"],"options":null},"Level 28\\Invincible":{"note":"","data":["D112D33A 001C","811E25B8 000A","D1147DEA 001C","811E25B8 000A"],"options":null},"Level 28\\Press R For Supa Attack":{"note":"","data":["D112D33A 001C","811E25BC 01F4","D1147DEA 001C","811E25BC 01F4"],"options":null},"Level 29\\Invincible":{"note":"","data":["D112D33A 001D","811E1EB8 000A","D1147DEA 001D","811E1EB8 000A"],"options":null},"Level 29\\Press R For Supa Attack":{"note":"","data":["D112D33A 001D","811E1EBC 01F4","D1147DEA 001D","811E1EBC 01F4"],"options":null},"Level 30\\Invincible":{"note":"","data":["D112D33A 001E","811E38B8 000A","D1147DEA 001E","811E38B8 000A"],"options":null},"Level 30\\Press R For Supa Attack":{"note":"","data":["D112D33A 001E","811E38BC 01F4","D1147DEA 001E","811E38BC 01F4"],"options":null},"Level 31\\Invincible":{"note":"","data":["D112D33A 001F","811F5638 000A","D1147DEA 001F","811F5638 000A"],"options":null},"Level 31\\Press R For Supa Attack":{"note":"","data":["D112D33A 001F","811F563C 01F4","D1147DEA 001F","811F563C 01F4"],"options":null},"Level 32\\Invincible":{"note":"","data":["D112D33A 0020","811E4238 000A","D1147DEA 0020","811E4238 000A"],"options":null},"Level 32\\Press R For Supa Attack":{"note":"","data":["D112D33A 0020","811E423C 01F4","D1147DEA 0020","811E423C 01F4"],"options":null},"Level 33\\Invincible":{"note":"","data":["D112D33A 0021","811E4EB8 000A","D1147DEA 0021","811E4EB8 000A"],"options":null},"Level 33\\Press R For Supa Attack":{"note":"","data":["D112D33A 0021","811E4EBC 01F4","D1147DEA 0021","811E4EBC 01F4"],"options":null},"Level 34\\Invincible":{"note":"","data":["D112D33A 0022","811E16B8 000A","D1147DEA 0022","811E16B8 000A"],"options":null},"Level 34\\Press R For Supa Attack":{"note":"","data":["D112D33A 0022","811E16BC 01F4","D1147DEA 0022","811E16BC 01F4"],"options":null},"Level 35\\Invincible":{"note":"","data":["D112D33A 0023","811FABB8 000A","D1147DEA 0023","811FABB8 000A"],"options":null},"Level 35\\Press R For Supa Attack":{"note":"","data":["D112D33A 0023","811FABBC 01F4","D1147DEA 0023","811FABBC 01F4"],"options":null},"Level 36\\Invincible":{"note":"","data":["D112D33A 0024","811EA738 000A","D1147DEA 0024","811EA738 000A"],"options":null},"Level 36\\Press R For Supa Attack":{"note":"","data":["D112D33A 0024","811EA73C 01F4","D1147DEA 0024","811EA73C 01F4"],"options":null},"Level 37\\Invincible":{"note":"","data":["D112D33A 0025","811FC638 000A","D1147DEA 0025","811FC638 000A"],"options":null},"Level 37\\Press R For Supa Attack":{"note":"","data":["D112D33A 0025","811FC63C 01F4","D1147DEA 0025","811FC63C 01F4"],"options":null},"Level 38\\Invincible":{"note":"","data":["D112D33A 0026","811EEBC8 000A","D1147DEA 0026","811EEBC8 000A"],"options":null},"Level 38\\Press R For Supa Attack":{"note":"","data":["D112D33A 0026","811EEBCC 01F4","D1147DEA 0026","811EEBCC 01F4"],"options":null},"Level 39\\Invincible":{"note":"","data":["D112D33A 0027","811F50B8 000A","D1147DEA 0027","811F50B8 000A"],"options":null},"Level 39\\Press R For Supa Attack":{"note":"","data":["D112D33A 0027","811F50BC 01F4","D1147DEA 0027","811F50BC 01F4"],"options":null},"Level 40\\Invincible":{"note":"","data":["D112D33A 0028","811E2038 000A","D1147DEA 0028","811E2038 000A"],"options":null},"Level 40\\Press R For Supa Attack":{"note":"","data":["D112D33A 0028","811E203C 01F4","D1147DEA 0028","811E203C 01F4"],"options":null},"Level 41\\Invincible":{"note":"","data":["D112D33A 0029","811F02B8 000A","D1147DEA 0029","811F02B8 000A"],"options":null},"Level 41\\Press R For Supa Attack":{"note":"","data":["D112D33A 0029","811F02BC 01F4","D1147DEA 0029","811F02BC 01F4"],"options":null},"Level 42\\Invincible":{"note":"","data":["D112D33A 002A","811FD7B8 000A","D1147DEA 002A","811FD7B8 000A"],"options":null},"Level 42\\Press R For Supa Attack":{"note":"","data":["D112D33A 002A","811FD7BC 01F4","D1147DEA 002A","811FD7BC 01F4"],"options":null},"Level 43\\Invincible":{"note":"","data":["D112D33A 002B","811E97B8 000A","D1147DEA 002B","811E97B8 000A"],"options":null},"Level 43\\Press R For Supa Attack":{"note":"","data":["D112D33A 002B","811E97BC 01F4","D1147DEA 002B","811E97BC 01F4"],"options":null},"Level 44\\Invincible":{"note":"","data":["D112D33A 002C","811E4538 000A","D1147DEA 002C","811E4538 000A"],"options":null},"Level 44\\Press R For Supa Attack":{"note":"","data":["D112D33A 002C","811E453C 01F4","D1147DEA 002C","811E453C 01F4"],"options":null}},"DFD784AD-AE426603-C:50":{"Game Win Select\\Player 1":{"note":"","data":["801BAEB1 00??"],"options":{"0 Games Won":"00","1 Game Won":"01","2 Games Won":"02","3 Games Won":"03","4 Games Won":"04","5 Games Won":"05","For Game Set \u0026 Match":"06"}},"Game Win Select\\Player 2":{"note":"","data":["801BAEB2 00??"],"options":{"0 Games Won":"00","1 Game Won":"01","2 Games Won":"02","3 Games Won":"03","4 Games Won":"04","5 Games Won":"05","For Game Set \u0026 Match":"06"}},"Play As\\Player 1":{"note":"","data":["800BE351 00??"],"options":{"Amanda Coetzer":"02","Conchita Martinez":"04","Gustavo Kuerten":"07","Jana Novotna":"03","Jonas Bjorkman":"08","Leon Rodez":"05","Mark Philippoussis":"09","Michael Chang":"06","Randy Powell":"0A","Richard Krajicek":"0B","Vanessa Child":"01","Zoe Taylor":"00"}},"Play As\\Player 2":{"note":"","data":["800BE352 00??"],"options":{"Amanda Coetzer":"02","Conchita Martinez":"04","Gustavo Kuerten":"07","Jana Novotna":"03","Jonas Bjorkman":"08","Leon Rodez":"05","Mark Philippoussis":"09","Michael Chang":"06","Randy Powell":"0A","Richard Krajicek":"0B","Vanessa Child":"01","Zoe Taylor":"00"}},"Points Select\\Player 1":{"note":"","data":["801C6160 00??"],"options":{"0 Points":"00","15 Points":"15","30 Points":"30","40 Points":"40"}},"Points Select\\Player 2":{"note":"","data":["801C6161 00??"],"options":{"0 Points":"00","15 Points":"15","30 Points":"30","40 Points":"40"}}},"DFE61153-D76118E6-C:45":{"Championship Mode\\Cannot Spin Out":{"note":"","data":["803CDD93 0000"],"options":null},"Championship Mode\\Disable Left Lane Traffic":{"note":"","data":["8033C95B 0001"],"options":null},"Championship Mode\\Disable Right Lane Traffic":{"note":"","data":["8033C95F 0001"],"options":null},"Championship Mode\\Max Points Per Race":{"note":"","data":["813BFBFE FFFF"],"options":null},"Championship Mode\\Max Points To Next Level":{"note":"","data":["813BFBFC FFFF"],"options":null},"Championship Mode\\Max Total Points":{"note":"","data":["813BFBFA FFFF"],"options":null},"Championship Mode\\Unlimited Nitro\\Player 1":{"note":"","data":["803C75E7 0003"],"options":null},"Championship Mode\\Unlimited Nitro\\Player 2":{"note":"","data":["803C7823 0003"],"options":null},"Championship Mode\\Unlimited Nitro\\Player 3":{"note":"","data":["803C716F 0003"],"options":null},"Dancing Girl Always On":{"note":"","data":["803BEE73 0001","803C21CF 0054"],"options":null},"Have All\\Car Upgrades":{"note":"","data":["803BEE42 0005"],"options":null},"Have All\\Cars":{"note":"","data":["813BEE78 1FFF"],"options":null},"Player 1\\Always Place 1st":{"note":"","data":["803CE023 0001"],"options":null},"Player 1\\Car/Transmission Modifier":{"note":"","data":["803BEE40 00??"],"options":{"ATV (Auto":"04","ATV (Manual)":"05","Banzai GTV (Auto)":"0A","Banzai GTV (Manual)":"0B","Bulldog (Auto)":"1A","Bulldog (Manual)":"1B","Conductor (Auto)":"24","Conductor (Manual)":"25","El Nino (Auto)":"10","El Nino (Manual)":"11","Enforcer (Auto)":"1C","Enforcer (Manual)":"1D","Exec (Auto)":"22","Exec (Manual)":"23","Grass Hopper (Auto)":"18","Grass Hopper (Manual)":"19","Howler (Auto)":"30","Howler (Manual)":"31","Kamikaze (Auto)":"02","Kamikaze (Manual)":"03","Monsta (Auto)":"2E","Monsta (Manual)":"2F","NY Taxi (Auto)":"1E","NY Taxi (Manual)":"1F","Orca (Auto)":"0E","Orca (manual)":"0F","Rhino 4x4 (Auto)":"12","Rhino 4x4 (Manual)":"13","Road King (Auto)":"16","Road King (Manual)":"17","Rocket (Auto)":"2A","Rocket (Manual)":"2B","Sardine Extreme (Auto)":"14","Sardine Extreme (Manual)":"15","Scarab (Auto)":"06","Scarab (Manual)":"07","School Bus (Auto)":"20","School Bus (Manual)":"21","Serpent (Auto)":"00","Serpent (Manual)":"01","Speed Demon (Auto)":"26","Speed Demon (Manual)":"27","Stallion P6 (Auto)":"08","Stallion P6 (Manual)":"09","The Surgeon (Auto)":"2C","The Surgeon (Manual)":"2D","Tommy (Auto)":"28","Tommy (Manual)":"29","Zombie (Auto)":"0C","Zombie (Manual)":"0D"}},"Player 1\\Stop Elapsed Time":{"note":"","data":["813C7678 3C80"],"options":null},"Player 2\\Always Place 1st":{"note":"","data":["803CE4FB 0001"],"options":null},"Player 2\\Car/Transmission Modifier":{"note":"","data":["803BEE48 00??"],"options":{"ATV (Auto":"04","ATV (Manual)":"05","Banzai GTV (Auto)":"0A","Banzai GTV (Manual)":"0B","Bulldog (Auto)":"1A","Bulldog (Manual)":"1B","Conductor (Auto)":"24","Conductor (Manual)":"25","El Nino (Auto)":"10","El Nino (Manual)":"11","Enforcer (Auto)":"1C","Enforcer (Manual)":"1D","Exec (Auto)":"22","Exec (Manual)":"23","Grass Hopper (Auto)":"18","Grass Hopper (Manual)":"19","Howler (Auto)":"30","Howler (Manual)":"31","Kamikaze (Auto)":"02","Kamikaze (Manual)":"03","Monsta (Auto)":"2E","Monsta (Manual)":"2F","NY Taxi (Auto)":"1E","NY Taxi (Manual)":"1F","Orca (Auto)":"0E","Orca (manual)":"0F","Rhino 4x4 (Auto)":"12","Rhino 4x4 (Manual)":"13","Road King (Auto)":"16","Road King (Manual)":"17","Rocket (Auto)":"2A","Rocket (Manual)":"2B","Sardine Extreme (Auto)":"14","Sardine Extreme (Manual)":"15","Scarab (Auto)":"06","Scarab (Manual)":"07","School Bus (Auto)":"20","School Bus (Manual)":"21","Serpent (Auto)":"00","Serpent (Manual)":"01","Speed Demon (Auto)":"26","Speed Demon (Manual)":"27","Stallion P6 (Auto)":"08","Stallion P6 (Manual)":"09","The Surgeon (Auto)":"2C","The Surgeon (Manual)":"2D","Tommy (Auto)":"28","Tommy (Manual)":"29","Zombie (Auto)":"0C","Zombie (Manual)":"0D"}},"Player 2\\Stop Elapsed Time":{"note":"","data":["813C78B4 3C80"],"options":null},"Player 3\\Always Place 1st":{"note":"","data":["803CDB4B 0001"],"options":null},"Player 3\\Car/Transmission Modifier":{"note":"","data":["803BEE50 00??"],"options":{"ATV (Auto":"04","ATV (Manual)":"05","Banzai GTV (Auto)":"0A","Banzai GTV (Manual)":"0B","Bulldog (Auto)":"1A","Bulldog (Manual)":"1B","Conductor (Auto)":"24","Conductor (Manual)":"25","El Nino (Auto)":"10","El Nino (Manual)":"11","Enforcer (Auto)":"1C","Enforcer (Manual)":"1D","Exec (Auto)":"22","Exec (Manual)":"23","Grass Hopper (Auto)":"18","Grass Hopper (Manual)":"19","Howler (Auto)":"30","Howler (Manual)":"31","Kamikaze (Auto)":"02","Kamikaze (Manual)":"03","Monsta (Auto)":"2E","Monsta (Manual)":"2F","NY Taxi (Auto)":"1E","NY Taxi (Manual)":"1F","Orca (Auto)":"0E","Orca (manual)":"0F","Rhino 4x4 (Auto)":"12","Rhino 4x4 (Manual)":"13","Road King (Auto)":"16","Road King (Manual)":"17","Rocket (Auto)":"2A","Rocket (Manual)":"2B","Sardine Extreme (Auto)":"14","Sardine Extreme (Manual)":"15","Scarab (Auto)":"06","Scarab (Manual)":"07","School Bus (Auto)":"20","School Bus (Manual)":"21","Serpent (Auto)":"00","Serpent (Manual)":"01","Speed Demon (Auto)":"26","Speed Demon (Manual)":"27","Stallion P6 (Auto)":"08","Stallion P6 (Manual)":"09","The Surgeon (Auto)":"2C","The Surgeon (Manual)":"2D","Tommy (Auto)":"28","Tommy (Manual)":"29","Zombie (Auto)":"0C","Zombie (Manual)":"0D"}},"Player 4\\Always Place 1st":{"note":"","data":["803CD673 0001"],"options":null},"Player 4\\Car/Transmission Modifier":{"note":"","data":["803BEE58 00??"],"options":{"ATV (Auto":"04","ATV (Manual)":"05","Banzai GTV (Auto)":"0A","Banzai GTV (Manual)":"0B","Bulldog (Auto)":"1A","Bulldog (Manual)":"1B","Conductor (Auto)":"24","Conductor (Manual)":"25","El Nino (Auto)":"10","El Nino (Manual)":"11","Enforcer (Auto)":"1C","Enforcer (Manual)":"1D","Exec (Auto)":"22","Exec (Manual)":"23","Grass Hopper (Auto)":"18","Grass Hopper (Manual)":"19","Howler (Auto)":"30","Howler (Manual)":"31","Kamikaze (Auto)":"02","Kamikaze (Manual)":"03","Monsta (Auto)":"2E","Monsta (Manual)":"2F","NY Taxi (Auto)":"1E","NY Taxi (Manual)":"1F","Orca (Auto)":"0E","Orca (manual)":"0F","Rhino 4x4 (Auto)":"12","Rhino 4x4 (Manual)":"13","Road King (Auto)":"16","Road King (Manual)":"17","Rocket (Auto)":"2A","Rocket (Manual)":"2B","Sardine Extreme (Auto)":"14","Sardine Extreme (Manual)":"15","Scarab (Auto)":"06","Scarab (Manual)":"07","School Bus (Auto)":"20","School Bus (Manual)":"21","Serpent (Auto)":"00","Serpent (Manual)":"01","Speed Demon (Auto)":"26","Speed Demon (Manual)":"27","Stallion P6 (Auto)":"08","Stallion P6 (Manual)":"09","The Surgeon (Auto)":"2C","The Surgeon (Manual)":"2D","Tommy (Auto)":"28","Tommy (Manual)":"29","Zombie (Auto)":"0C","Zombie (Manual)":"0D"}},"Time Counts Down Faster":{"note":"","data":["813D0D3E 0000"],"options":null}},"DFF227D9-0D4D8169-C:44":{"Always Have\\50 pieces of corn":{"note":"","data":["801E2761 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E2750 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["811E274E 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E2762 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E2755 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E2760 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D008FFA1 0010","811E26C6 1000","D008FFA1 0010","811E26D6 1000"],"options":null},"No Music":{"note":"","data":["801DD906 0000"],"options":null},"Start with Berry Weapon":{"note":"","data":["801E2757 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Subtitles On":{"note":"","data":["801DDB7B 00??"],"options":{"Off":"00","On":"01"}},"Unlock All Levels":{"note":"","data":["81099E30 000F"],"options":null}},"E0044E9E-CD659D0D-C:4A":{},"E0144180-650B78C9-C:45":{"Andrew Reynolds\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA7E 00FF"],"options":null},"Andrew Reynolds\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA80 00FF"],"options":null},"Andrew Reynolds\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA7B 00FF"],"options":null},"Andrew Reynolds\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA78 00FF"],"options":null},"Bob Burnquist\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA1A 00FF"],"options":null},"Bob Burnquist\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA1C 00FF"],"options":null},"Bob Burnquist\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA17 00FF"],"options":null},"Bob Burnquist\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA14 00FF"],"options":null},"Bucky Lasek\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA42 00FF"],"options":null},"Bucky Lasek\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA44 00FF"],"options":null},"Bucky Lasek\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA3F 00FF"],"options":null},"Bucky Lasek\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA3C 00FF"],"options":null},"Chad Muska\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA56 00FF"],"options":null},"Chad Muska\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA58 00FF"],"options":null},"Chad Muska\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA53 00FF"],"options":null},"Chad Muska\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA50 00FF"],"options":null},"Elissa Steamer\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEABA 00FF"],"options":null},"Elissa Steamer\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEABC 00FF"],"options":null},"Elissa Steamer\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEAB7 00FF"],"options":null},"Elissa Steamer\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEAB4 00FF"],"options":null},"Geoff Rowley\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA2E 00FF"],"options":null},"Geoff Rowley\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA30 00FF"],"options":null},"Geoff Rowley\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA2B 00FF"],"options":null},"Geoff Rowley\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA28 00FF"],"options":null},"Jamie Thomas\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEAA6 00FF"],"options":null},"Jamie Thomas\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEAA8 00FF"],"options":null},"Jamie Thomas\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEAA3 00FF"],"options":null},"Jamie Thomas\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEAA0 00FF"],"options":null},"Kareem Campbell\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA6A 00FF"],"options":null},"Kareem Campbell\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA6C 00FF"],"options":null},"Kareem Campbell\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA67 00FF"],"options":null},"Kareem Campbell\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA64 00FF"],"options":null},"Officer Dick\\Have\\All\\Gold Medal\\Burnside":{"note":"","data":["800DEACE 00FF"],"options":null},"Officer Dick\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEAD0 00FF"],"options":null},"Officer Dick\\Have\\All\\Gold Medal\\Skate Park":{"note":"","data":["800DEACB 00FF"],"options":null},"Officer Dick\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEAC8 00FF"],"options":null},"Player 1\\Have\\Perfect Balance":{"note":"","data":["800DE843 0001"],"options":null},"Player 1\\Play As":{"note":"","data":["800D0FD4 00??"],"options":{"Andrew Reynolds":"06","Bob Burnquist":"01","Bucky Lasek":"03","Chad Muska":"04","Elissa Steamer":"09","Geoff Rowley":"02","Jamie Thomas":"08","Kareem Campbell":"05","Officer Dick":"0A","Rune Glifberg":"07","Tony Hawk":"00"}},"Player 1\\Super Max\\Air":{"note":"","data":["800D62DE FFFF"],"options":null},"Player 1\\Super Max\\Balance":{"note":"","data":["800D62DF FFFF"],"options":null},"Player 1\\Super Max\\Ollie":{"note":"","data":["800D62DC FFFF"],"options":null},"Player 1\\Super Max\\Speed":{"note":"","data":["800D62DD FFFF"],"options":null},"Player 1\\Super Max\\Turning":{"note":"","data":["800D62E0 FFFF"],"options":null},"Player 2\\Play As":{"note":"","data":["800D0FD5 00??"],"options":{"Andrew Reynolds":"06","Bob Burnquist":"01","Bucky Lasek":"03","Chad Muska":"04","Elissa Steamer":"09","Geoff Rowley":"02","Jamie Thomas":"08","Kareem Campbell":"05","Officer Dick":"0A","Rune Glifberg":"07","Tony Hawk":"00"}},"Player 2\\Super Max\\Air":{"note":"","data":["800D62E3 FFFF"],"options":null},"Player 2\\Super Max\\Balance":{"note":"","data":["800D62E4 FFFF"],"options":null},"Player 2\\Super Max\\Ollie":{"note":"","data":["800D62E1 FFFF"],"options":null},"Player 2\\Super Max\\Speed":{"note":"","data":["800D62E2 FFFF"],"options":null},"Player 2\\Super Max\\Turning":{"note":"","data":["800D62E5 FFFF"],"options":null},"Rune Glifberg\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA92 00FF"],"options":null},"Rune Glifberg\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA94 00FF"],"options":null},"Rune Glifberg\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA8F 00FF"],"options":null},"Rune Glifberg\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA8C 00FF"],"options":null},"Tony Hawk\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA06 00FF"],"options":null},"Tony Hawk\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA08 00FF"],"options":null},"Tony Hawk\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA03 00FF"],"options":null},"Tony Hawk\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA00 00FF"],"options":null}},"E0B92B94-80E87CBD-C:50":{"Access All Nuke Pieces 1-6":{"note":"Enter the In-game inventory option, and press L Button","data":["D00FC701 0020","50000601 0000","802FC99C 0030"],"options":null},"Access In-Game Cheat Menu":{"note":"","data":["8112167C FFFF","8112167E FFFF"],"options":null}},"E0B92B94-B9A7E025-C:45":{"Access In-Game Cheat Menu":{"note":"","data":["8112167C FFFF","8112167E FFFF"],"options":null}},"E0C4F72F-769E1506-C:50":{"Have Mouse Card\\Night Tail":{"note":"","data":["800A2865 0001"],"options":null},"Have Mouse Card\\The Adventure Begins":{"note":"","data":["800A2864 0001"],"options":null},"Infinite Lives":{"note":"","data":["810A2886 0009"],"options":null},"Max Honey Pots":{"note":"","data":["810A288A 03E7"],"options":null}},"E13AE2DC-4FB65CE8-C:4A":{"Have All Elements":{"note":"","data":["8107A9F4 3232","8107A9F6 3232"],"options":null},"Infinite Health":{"note":"","data":["8107A9D4 01F4","8107A9D6 01F4"],"options":null},"Infinite Magic Points":{"note":"","data":["8107A9D8 01F4","8107A9DA 01F4"],"options":null},"Super Agility":{"note":"","data":["8107A9DE 01F4"],"options":null},"Super Defense":{"note":"","data":["8107A9DC 01F4"],"options":null}},"E185E291-4E50766D-C:45":{"Game Win Select\\Player 1":{"note":"","data":["801BBFA1 00??"],"options":{"0 Games Won":"00","1 Game Won":"01","2 Games Won":"02","3 Games Won":"03","4 Games Won":"04","5 Games Won":"05","For Game Set \u0026 Match":"06"}},"Game Win Select\\Player 2":{"note":"","data":["801BBFA2 00??"],"options":{"0 Games Won":"00","1 Game Won":"01","2 Games Won":"02","3 Games Won":"03","4 Games Won":"04","5 Games Won":"05","For Game Set \u0026 Match":"06"}},"Play As\\Player 1":{"note":"","data":["800BFFA5 00??"],"options":{"Amanda Coetzer":"02","Conchita Martinez":"04","Gustavo Kuerten":"07","Jana Novotna":"03","Jonas Bjorkman":"08","Leon Rodez":"05","Mark Philippoussis":"09","Michael Chang":"06","Randy Powell":"0A","Richard Krajicek":"0B","Vanessa Child":"01","Zoe Taylor":"00"}},"Play As\\Player 2":{"note":"","data":["800BFFA6 00??"],"options":{"Amanda Coetzer":"02","Conchita Martinez":"04","Gustavo Kuerten":"07","Jana Novotna":"03","Jonas Bjorkman":"08","Leon Rodez":"05","Mark Philippoussis":"09","Michael Chang":"06","Randy Powell":"0A","Richard Krajicek":"0B","Vanessa Child":"01","Zoe Taylor":"00"}},"Points Select\\Player 1":{"note":"","data":["801C7260 00??"],"options":{"0 Points":"00","15 Points":"15","30 Points":"30","40 Points":"40"}},"Points Select\\Player 2":{"note":"","data":["801C7261 00??"],"options":{"0 Points":"00","15 Points":"15","30 Points":"30","40 Points":"40"}}},"E1EF93F7-14908B0B-C:44":{"Max Score":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null},"Press L Button for Max Gauge\\Player 1":{"note":"","data":["D00B5661 0020","811D2602 0098"],"options":null},"Press L Button for Max Gauge\\Player 2":{"note":"","data":["D00B5667 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}}},"E2D37CF0-F57E4EAE-C:50":{"Away Team Scores":{"note":"","data":["8011A9BF 00??"],"options":{"0 Goal":"00","1 Goal":"01","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08"}},"Home Team Scores":{"note":"","data":["80119F2B 00??"],"options":{"0 Goal":"00","1 Goal":"01","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08"}},"Infinite player creation points":{"note":"","data":["801AC581 003C"],"options":null}},"E328B4FA-004A28E1-C:50":{"Always Have\\guide line on":{"note":"","data":["80056CCC 0082"],"options":null},"Next Bubble Select\\Player 1":{"note":"","data":["800ECE19 00??"],"options":{"Black":"08","Blue":"03","Green":"02","No Bubble":"00","Orange":"05","Purple":"06","Red":"01","White":"07","Yellow":"04"}},"Next Bubble Select\\Player 2":{"note":"","data":["800ECF09 00??"],"options":{"Black":"08","Blue":"03","Green":"02","No Bubble":"00","Orange":"05","Purple":"06","Red":"01","White":"07","Yellow":"04"}},"Play As Select\\Player 1":{"note":"","data":["800E3250 00??"],"options":{"1 of the two Ballons":"13","Blue Gnome":"12","Bubbloon":"00","Dragoon":"08","Gnome":"09","Jack":"06","Luna":"05","Marina":"03","Monkey":"10","Musashi":"04","Prettio":"02","SSB":"07","Twinkie":"01","Water under ballons":"14","furby? (looks like 2 balloons)":"11"}},"Play As Select\\Player 2":{"note":"","data":["800E3258 00??"],"options":{"1 of the two Ballons":"13","Blue Gnome":"12","Bubbloon":"00","Dragoon":"08","Gnome":"09","Jack":"06","Luna":"05","Marina":"03","Monkey":"10","Musashi":"04","Prettio":"02","SSB":"07","Twinkie":"01","Water under ballons":"14","furby? (looks like 2 balloons)":"11"}},"Pointer always active":{"note":"","data":["D0056FA0 0002","80056FA0 0082"],"options":null},"Press GS to Reset Player 2 score to 0":{"note":"","data":["8809D9C0 0000","8809D9C2 0000"],"options":null}},"E340A49C-74318D41-C:4A":{"Carry 20 Bombs At A Time":{"note":"","data":["800AEE0F 0014"],"options":null},"Have\\Pumped up Red Remote Bombs":{"note":"","data":["802AC653 0004"],"options":null},"Infinite\\Credits":{"note":"","data":["802AB85B 0009"],"options":null},"Infinite\\Energy\\Player 1":{"note":"","data":["800AEE07 0002"],"options":null},"Infinite\\Energy\\Player 2":{"note":"","data":["800AEECF 0002"],"options":null},"Infinite\\Energy\\Player 3":{"note":"","data":["800AEF97 0002"],"options":null},"Infinite\\Energy\\Player 4":{"note":"","data":["800AF05F 0002"],"options":null},"Infinite\\Gems":{"note":"","data":["802AB85F 0063"],"options":null},"Infinite\\Lives":{"note":"","data":["802AB857 0063"],"options":null},"Infinite\\Time":{"note":"","data":["802AB873 0001"],"options":null},"Invincible\\Player 1":{"note":"","data":["800AEE01 0001"],"options":null}},"E3AB4ED0-83040DD2-C:45":{"Away Team\\Infinite Time Outs":{"note":"","data":["80054ED6 0003"],"options":null},"Away Team\\No Time Outs Away":{"note":"","data":["80054ED6 0000"],"options":null},"Home Team\\Infinite Time Outs":{"note":"","data":["80054956 0003"],"options":null},"Home Team\\No Time Outs":{"note":"","data":["80054956 0000"],"options":null},"Infinite Creation Points":{"note":"","data":["8107B36E 03E7"],"options":null},"Infinite Time To Choose Play":{"note":"","data":["81081448 2800"],"options":null},"Max Acc":{"note":"","data":["8007526D 0064"],"options":null},"Max Cat":{"note":"","data":["8007527B 0063"],"options":null},"Max Clu":{"note":"","data":["80075275 0063"],"options":null},"Max End":{"note":"","data":["8007527D 0063"],"options":null},"Max Hnd":{"note":"","data":["80075279 0063"],"options":null},"Max Rcg":{"note":"","data":["80075273 0063"],"options":null},"Max Rng":{"note":"","data":["8007526F 0063"],"options":null},"Max Scr":{"note":"","data":["80075271 0063"],"options":null},"Max Spd":{"note":"","data":["80075277 0063"],"options":null}},"E3BD221D-3C0834D3-C:50":{"Have All Items\\What a night for a knight":{"note":"","data":["811BA010 0101","811BA012 0101","811BA014 0101","811BA016 0101","811BA018 0101"],"options":null},"Infinite Courage":{"note":"","data":["810BB096 0007"],"options":null}},"E3D6A795-2A1C5D3C-C:50":{"Big Options\\Big Gloves Mode":{"note":"","data":["800F407D 0001"],"options":null},"Big Options\\Big Head Mode":{"note":"","data":["800F407C 0001"],"options":null},"Empty Punch Meter\\Player 1":{"note":"","data":["8106B9E8 0000","8106B9EA 0000"],"options":null},"Empty Punch Meter\\Player 2":{"note":"","data":["8016BAF0 0000","8016BAF2 0000"],"options":null},"Full Punch Meter\\Player 1":{"note":"","data":["8106B9E8 0000","8106B9EA 0BB2"],"options":null},"Full Punch Meter\\Player 2":{"note":"","data":["8106B9E8 0000","8106B9EA 0BB2"],"options":null},"Have Full\\Power Bar":{"note":"","data":["810637AE 0064"],"options":null},"Have Full\\Speed Bar":{"note":"","data":["810637B2 0064"],"options":null},"Have Full\\Stamina Bar":{"note":"","data":["810637B6 0064"],"options":null},"Infinite Boxer Creation Points":{"note":"","data":["810637AA 0064"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["8106B974 42C8","8106B9DE 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["8106BAE4 42C8","8106BAE6 0000"],"options":null},"No Health\\Player 1":{"note":"","data":["8106B9DC 0000","8106B9DE 0000"],"options":null},"No Health\\Player 2":{"note":"","data":["8106BAE4 0000","8106BAE6 0000"],"options":null}},"E402430D-D2FCFC9D-C:45":{"16:9 Widescreen":{"note":"For 16:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81066246 3FE3","81066396 3FE3","810663FE 3FE3","8107037A 3740","81126714 3FE3"],"options":null},"21:9 Widescreen":{"note":"For 21:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81066246 4018","81066396 4018","810663FE 4018","8107037A 370F","81126714 4018"],"options":null},"Alt Sixty Frames":{"note":"A friend informed me this didn't freeze","data":["80079E7A 0003"],"options":null},"Boss Cannot Move\\Dino":{"note":"","data":["811E0444 44A0"],"options":null},"Boss Cannot Move\\Octo":{"note":"","data":["811E0BAC 44A0"],"options":null},"Enable All Cheats":{"note":"Go into Options \u0026 then Magic Codes. Then Code list to turn off \u0026 on what you want.","data":["810E031C FFFF","810E031E FFFF"],"options":null},"Have All\\50 Bananas\\Ancient Lake":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3A1D 0032"],"options":null},"Have All\\50 Bananas\\Boulder Canyon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E693D 0032"],"options":null},"Have All\\50 Bananas\\Crescent Island":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E417D 0032"],"options":null},"Have All\\50 Bananas\\Darkmoon Caverns":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E645D 0032"],"options":null},"Have All\\50 Bananas\\Everfrost Peak":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E56AD 0032"],"options":null},"Have All\\50 Bananas\\Fossil Canyon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E6EBD 0032"],"options":null},"Have All\\50 Bananas\\Frosty Village":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E669D 0032"],"options":null},"Have All\\50 Bananas\\Greenwood Village":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E51FD 0032"],"options":null},"Have All\\50 Bananas\\Haunted Woods":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E516D 0032"],"options":null},"Have All\\50 Bananas\\Hot Top Volcano":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4D7D 0032"],"options":null},"Have All\\50 Bananas\\Jungle Falls":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4C1D 0032"],"options":null},"Have All\\50 Bananas\\Pirate Lagoon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E30AD 0032"],"options":null},"Have All\\50 Bananas\\Snowball Valley":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E514D 0032"],"options":null},"Have All\\50 Bananas\\Spacedust Alley":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E6C9D 0032"],"options":null},"Have All\\50 Bananas\\Spaceport Alpha":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E43BD 0032"],"options":null},"Have All\\50 Bananas\\Star City":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E5EDD 0032"],"options":null},"Have All\\50 Bananas\\Treasure Caves":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3E6D 0032"],"options":null},"Have All\\50 Bananas\\Walrus Cove":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E51CD 0032"],"options":null},"Have All\\50 Bananas\\Whale Bay":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E424D 0032"],"options":null},"Have All\\50 Bananas\\Windwill Plains":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801EA30D 0032"],"options":null},"Have All\\99 Balloons":{"note":"","data":["810E058A FFFF","801FD3DD 0063"],"options":null},"Have All\\Amulets":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FD1D6 FFFF"],"options":null},"Have All\\Keys":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FD1C8 FFFF"],"options":null},"Have All\\Levels Completely Finished":{"note":"","data":["50000904 0000","801FD2E7 00FF","801FD30F 00FF","801FD317 00FF","50000404 0000","801FD31F 00FF","801FD33F 00FF","50000804 0000","801FD343 00FF"],"options":null},"Have All\\Silver Coins\\Ancient Lake":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E3BFA 0008"],"options":null},"Have All\\Silver Coins\\Boulder Canyon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E6B1A 0008"],"options":null},"Have All\\Silver Coins\\Crescent Island":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E435A 0008"],"options":null},"Have All\\Silver Coins\\Everfrost Peak":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E588A 0008"],"options":null},"Have All\\Silver Coins\\Fossil Canyon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E709A 0008"],"options":null},"Have All\\Silver Coins\\Frosty Village":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E687A 0008"],"options":null},"Have All\\Silver Coins\\Greenwood Village":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E53DA 0008"],"options":null},"Have All\\Silver Coins\\Haunted Woods":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E534A 0008"],"options":null},"Have All\\Silver Coins\\Hot Top Volcano":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4F5A 0008"],"options":null},"Have All\\Silver Coins\\Jungle Falls":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E588A 0008"],"options":null},"Have All\\Silver Coins\\Pirate Lagoon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E328A 0008"],"options":null},"Have All\\Silver Coins\\Snowball Valley":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E532A 0008"],"options":null},"Have All\\Silver Coins\\Treasure Caves":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E404A 0008"],"options":null},"Have All\\Silver Coins\\Walrus Cove":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E53AA 0008"],"options":null},"Have All\\Silver Coins\\Whale Bay":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E442A 0008"],"options":null},"Have All\\Silver Coins\\Windmill Plains":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801EA4EA 0008"],"options":null},"Have All\\The pieces of the TT thing":{"note":"","data":["801FD1D6 0004"],"options":null},"Have All\\Trophies":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FC9DE FFFF"],"options":null},"Infinite\\Power Ups\\Ancient Lake":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E717B 0010"],"options":null},"Infinite\\Power Ups\\Boulder Canyon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E949B 0010"],"options":null},"Infinite\\Power Ups\\Crescent Island":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E78DB 0010"],"options":null},"Infinite\\Power Ups\\Darkmoon Caverns":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E9DFB 0010"],"options":null},"Infinite\\Power Ups\\Everfrost Peak":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E8E6B 0010"],"options":null},"Infinite\\Power Ups\\Fossil Canyon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801EA61B 0010"],"options":null},"Infinite\\Power Ups\\Frosty Village":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E9DF6 0010"],"options":null},"Infinite\\Power Ups\\Greenwood Village":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E895B 0010"],"options":null},"Infinite\\Power Ups\\Haunted Woods":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E88CB 0010"],"options":null},"Infinite\\Power Ups\\Hot Top Volcano":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E4ECB 0010"],"options":null},"Infinite\\Power Ups\\Jungle Falls":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E4D0B 0010"],"options":null},"Infinite\\Power Ups\\Pirate Lagoon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E5C06 0010"],"options":null},"Infinite\\Power Ups\\Snowball Valley":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E88AB 0010"],"options":null},"Infinite\\Power Ups\\Space Dust Alley":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E979B 0010"],"options":null},"Infinite\\Power Ups\\Spaceport Alpha":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E6EBB 0010"],"options":null},"Infinite\\Power Ups\\Starcity":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E963B 0010"],"options":null},"Infinite\\Power Ups\\Treasure Cove":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E75CB 0010"],"options":null},"Infinite\\Power Ups\\Walrus Cove":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E892B 0010"],"options":null},"Infinite\\Power Ups\\Whale Bay":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E6DAB 0010"],"options":null},"Infinite\\Power Ups\\Windmill Plains":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801ECE0B 0010"],"options":null},"Sixty Frames":{"note":"May freeze at some points,physics can get wonky with slopes on both codes.","data":["80079E7B 0003"],"options":null}},"E436467A-82DE8F9B-C:45":{"Always Place 1st":{"note":"","data":["8012955F 0001"],"options":null},"Driver Modifier (Champsionship Mode)":{"note":"","data":["812CBEC6 00??"],"options":{"Billy Boat #11":"02","Buddy Lazier #91":"04","Buzz Calkins #12":"08","Davey Hamilton #9":"05","Eddie Cheever Jr.#51":"03","Greg Ray #2":"01","Jeff Ward #21":"10","John Hollansworth Jr. #42":"13","Johnny Unser #92":"0E","Kenny Brack #14":"09","Mark Dismore #28":"0C","Robbie Buyl #22":"0A","Robby McGehee #55":"12","Robby Unser #81":"0F","Roberto Guerrero #50":"0D","Sam Schmidt #99":"06","Scott Goodyear #4":"00","Scott Sharp #8":"07","Stephan Gregoire #7":"11","Tyce Carison #20":"0B"}},"Max Exp (Gold Cup - All Classes Unlocked)":{"note":"With the 'Max Exp' codes for the Gold Cup, start a new file and leave it and go back to it again.","data":["81033918 7FFF","8103391A FFFF"],"options":null},"Unlock\\Formula Cars Part 1":{"note":"","data":["810230F0 0000","810230F2 0000","810230F4 0000","810230F6 0000"],"options":null},"Unlock\\Gold Cup 1st Upgrade":{"note":"","data":["81023100 0000","81023102 0000"],"options":null},"Unlock\\Gold Cup 2nd Upgrade":{"note":"","data":["81023104 0000","81023106 0000"],"options":null},"Unlock\\Sprint Car Class":{"note":"","data":["810230EE 0000","810230EC 0000"],"options":null}},"E43C9765-05B1C1BE-C:4A":{"Max HP":{"note":"","data":["812D71F8 03E7"],"options":null},"Max MP":{"note":"","data":["812D71FA 03E7"],"options":null},"Max Money":{"note":"","data":["811A70E9 0001","811A70EA 869F"],"options":null}},"E4906679-9F243F05-C:50":{"Max Score":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null},"Press L Button for Max Gauge\\Player 1":{"note":"","data":["D00B4171 0020","811D2602 0098"],"options":null},"Press L Button for Max Gauge\\Player 2":{"note":"","data":["D00B4177 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}}},"E4B08007-A602FF33-C:50":{"Carrington Institute\\Have 255 targets destroyed":{"note":"","data":["810AD714 00FF"],"options":null},"Carrington Institute\\Have 999 points in Firing Range":{"note":"","data":["810AD712 03E7"],"options":null},"Carrington Institute\\Have Infinite time in Firing Range":{"note":"","data":["810AD70E 004D"],"options":null},"Have All\\Levels Complete \u0026 All Challenges":{"note":"Have All levels Complete on Solo Missions, \u0026 Acces all Challenges \u0026 CO-OP Levels","data":["50003C02 0000","800A27C1 0001","50001E1A 0000","80088A0D 0001","50001E1A 0000","80088A0E 0001","50001E1A 0000","80088A0F 0001","50001E1A 0000","80088A10 0001"],"options":null},"Have All\\Weapons\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["802037F0 0007","801EA7F0 0007","801D17F0 0007"],"options":null},"Have All\\Weapons\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80205460 0007","801EC460 0007","801D3460 0007"],"options":null},"Infinite\\Ammo\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80202F7F 00FF","801E9F7F 00FF","801D0F7F 00FF","802027DB 00FF","801E97DB 00FF","801D07DB 00FF"],"options":null},"Infinite\\Ammo\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80204BEF 00FF","801EBBEF 00FF","801D2BEF 00FF","8020444B 00FF","801EB44B 00FF","801D244B 00FF"],"options":null},"Infinite\\Health\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8120205C 3F80","811E905C 3F80","811D005C 3F80"],"options":null},"Infinite\\Health\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81203CCC 3F80","811EACCC 3F80","811D1CCC 3F80"],"options":null},"Infinite\\Shield\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81202070 3F80","811E9070 3F80","811D0070 3F80"],"options":null},"Infinite\\Shield\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81203CE0 3F80","811EACE0 3F80","811D1CE0 3F80"],"options":null},"Press B To Levitate\\Single \u0026 Co-Op\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D00980C4 0040","81202000 40F2","D00980C4 0040","80201FB3 0000","D00980C4 0040","811E9000 40F2","D00980C4 0040","801E8FB3 0000","D00980C4 0040","811D0000 40F2","D00980C4 0040","801CFFB3 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D1099FB6 4000","81203C70 40F2","D1099FB6 4000","81203C23 0000","D1099FB6 4000","811EAC70 40F2","D1099FB6 4000","811EAC23 0000","D1099FB6 4000","811D1C70 40F2","D1099FB6 4000","811D1C23 0000"],"options":null}},"E616B5BC-C9658B88-C:45":{"Fast Sixty":{"note":"Too fast.","data":["800FF71F 0001","800FF7B7 0001","800FF84F 0001"],"options":null},"Have All\\Cups Select":{"note":"","data":["50002C02 0000","800CCE11 00??"],"options":{"Bronze Cup":"02","Gold Cup":"00","None (Default)":"04","Silver Cup":"01"}},"Have All\\Points":{"note":"","data":["810D8EE0 03E7"],"options":null},"Have All\\RB Medals":{"note":"","data":["810D8EF0 03E7"],"options":null},"Infinite\\Credits":{"note":"","data":["800BDEA5 0005"],"options":null},"Infinite\\Timer":{"note":"","data":["810D8F88 44E9"],"options":null},"Infinite\\Turbos":{"note":"To enable this just select On or Off and when you press Z you will use your Turbos accordantly. Warning you can only have Infinite if you have some turbo level to begin with","data":["D00F2C16 0020","800CCF91 00??"],"options":{"Off":"00","On":"08"}},"Laps To Race":{"note":"Here you can select how many laps you prefer.to race","data":["800C8809 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","7 Laps":"07","8 Laps":"08","9 Laps":"09","Laps":"06"}},"[Cheat Menu]":{"note":"Press Pause to access cheats.","data":["800CCF89 00FF","800CCF8A 00FF","800CCF8B 00FF"],"options":null},"[Press F9]\\Enable All Courses":{"note":"","data":["890CCDF2 0B00","890CCDF4 0B00","890CCDF6 0B00"],"options":null},"[Press F9]\\Extra Characters":{"note":"","data":["890C632F 01FF"],"options":null},"[Press F9]\\Progress 100%":{"note":"","data":["50000801 0000","880CCE00 0003","50000801 0000","880CCE01 00FF"],"options":null}},"E6419BC5-69011DE3-C:45":{"Always Have Retreat \u0026 Elem Pedra Opened":{"note":"Do not put this on until in-game or the game will freeze.","data":["D01A1C72 0000","811A1C72 0003"],"options":null},"Day Always 00":{"note":"","data":["811F106C 0000"],"options":null},"Finish All Levels":{"note":"","data":["81196A86 5454","81196A88 5140","81196A8A 4555","81196A8C 9514","81196A8E 5515"],"options":null},"Hour Always":{"note":"","data":["80196A2D 00??"],"options":{"(0 Hour - 24:00 PM - Midnight)":"00","(01:00 AM)":"01","(02:00 AM)":"02","(03:00 AM)":"03","(04:00 AM)":"04","(05:00 AM)":"05","(06:00 AM)":"06","(07:00 AM)":"07","(08:00 AM)":"08","(09:00 AM)":"09","(10:00 AM)":"0A","(11:00 AM)":"0B","(12:00 PM - Noon)":"0C","(13:00 - 1 PM)":"0D","(14:00 - 2 PM)":"0E","(15:00 - 3 PM)":"0F","(16:00 - 4 PM)":"10","(17:00 - 5 PM)":"11","(18:00 - 6 PM)":"12","(19:00 - 7 PM)":"13","(20:00 - 8 PM)":"14","(21:00 - 9 PM)":"15","(22:00 - 10 PM)":"16","(23:00 - 11 PM)":"17"}},"Infinite Goth":{"note":"","data":["81196A6E FFFF"],"options":null},"Magnus\\Infinite HP":{"note":"","data":["81193C10 03E7"],"options":null},"Magnus\\Level 99":{"note":"","data":["80193C0B 0063"],"options":null},"Magnus\\Max Agi":{"note":"","data":["81193C1C 03E7"],"options":null},"Magnus\\Max Dex":{"note":"","data":["81193C1E 03E7"],"options":null},"Magnus\\Max HP":{"note":"","data":["81193C0E 03E7"],"options":null},"Magnus\\Max Int":{"note":"","data":["81193C18 03E7"],"options":null},"Magnus\\Max Mem":{"note":"","data":["81193C1A 03E7"],"options":null},"Magnus\\Max Str":{"note":"","data":["81193C14 03E7"],"options":null},"Magnus\\Max Vit":{"note":"","data":["81193C16 03E7"],"options":null},"Max Goth":{"note":"","data":["81196A6C 0098","81196A6E 967F"],"options":null},"Open All Paths":{"note":"","data":["81196A80 01FF","81196A82 677F","81196A84 FCFF"],"options":null}},"E688A5B8-B14B3F18-C:50":{"Have All\\Boards":{"note":"","data":["81082B24 0003","81082B26 FFFF"],"options":null},"Have All\\Characters":{"note":"","data":["81082B18 07FF"],"options":null},"Have All\\Difficulties":{"note":"","data":["81082B10 0700"],"options":null},"Have All\\Tracks":{"note":"","data":["81082B1C BFFE"],"options":null},"Low Timer":{"note":"","data":["80082A04 0000","80182A06 0000"],"options":null},"Max\\50000 Stunt Points":{"note":"","data":["81082AD8 C350"],"options":null},"[Audio Fix]":{"note":"","data":["81051840 AD99"],"options":null}},"E68A000E-639166DD-C:50":{"Access All Remote Controls\\Red Remotes":{"note":"Opens Gate 4 And The Lions Mouth","data":["50000E01 0000","800C513E 0007"],"options":null},"All Silver \u0026 Gold Gold Remotes":{"note":"Opens Gate 3,2,1","data":["810C5164 0FFF","810C5166 FFFF","810C5168 01E0","810C516A 007F"],"options":null},"Fully Charged Gex":{"note":"Press L Button Once When On One Of The Specific Levels, For Circuit Central Levels Only","data":["D00AAAB9 0020","81163CDE 32FF"],"options":null},"Hover \u0026 Fly Mode":{"note":"Press And Hold L Button + A Button","data":["D10BED04 0020","8114ECA2 0010","D10BED04 0010"],"options":null},"Infinite Air Codes\\Pain In The Asteroids":{"note":"","data":["D00BED05 0004","8133CBEE 012B"],"options":null},"Infinite Air Codes\\Umpire Strikes Out":{"note":"","data":["D00BED05 0004","8136608E 012B"],"options":null},"Infinite Health":{"note":"","data":["800C50CB 0063"],"options":null},"Infinite Lives":{"note":"","data":["810C50C6 0063"],"options":null}},"E6A95A4F-BAD2EA23-C:45":{"Have\\Max Gold":{"note":"","data":["50000401 0000","80277335 00FF"],"options":null},"Have\\Max Total XP":{"note":"","data":["50000401 0000","80278BAD 00FF"],"options":null},"Have\\Max Total XP Remaning to Start":{"note":"This will give you 16777215 Total XP Remaning to start with and after your 1st batle will allow you to buy your Max Stats","data":["50000401 0000","80278BB1 00FF"],"options":null},"Infinite\\99 Health Potions":{"note":"Do Not put this cheat on until you have collected your 1st Health Potion from the 1st Cheat or you will not be able to get into the Sub menu and Continue the game.","data":["802785CB 0063"],"options":null},"Infinite\\Max Health":{"note":"","data":["80278B98 001E"],"options":null},"Lagfix High Rez":{"note":"","data":["800D7F16 000D"],"options":null},"Lagfix Lo Res":{"note":"Game natively runs 60fps already,just needed that extra push.","data":["800E5392 000D"],"options":null}},"E73C7C4F-AF93B838-C:4A":{"Flashing Invincible":{"note":"This cheat Makes you Flash But you cant be harmed,Once out of danger Turn the cheat off to stop the flashing.also do not put this on if you have already been hurt or you will stay on the floor.","data":["800AB5C7 000A"],"options":null},"Have\\Fire Bombs":{"note":"","data":["800AB59B 0003"],"options":null},"Have\\Kick Bombs Anytime":{"note":"","data":["800AB5A3 0003"],"options":null},"Have\\Max Fire Level":{"note":"","data":["800AB593 0003"],"options":null},"Infinite\\Bombs":{"note":"","data":["800AB5B8 0003"],"options":null},"Infinite\\Continue Time":{"note":"","data":["810B3B36 0090"],"options":null},"Infinite\\Health":{"note":"","data":["800AB5BF 0005"],"options":null},"Infinite\\Money":{"note":"","data":["810A9BB2 FFFF"],"options":null}},"E7D20193-C1158E93-C:50":{"A Few Extra Cars":{"note":"","data":["811270AA FFFF"],"options":null},"Access All Cars":{"note":"","data":["811270A4 FFFF","811270A6 FFFF"],"options":null},"Allways 1st":{"note":"","data":["8111B14A 0000"],"options":null},"Bonus Tracks":{"note":"","data":["811270AE FFFF"],"options":null},"Infinite Turbos":{"note":"","data":["8111B39C 0800"],"options":null},"Max Tournament Points":{"note":"","data":["811270B6 03E7"],"options":null},"Mirror Mode":{"note":"","data":["801270CE 0001"],"options":null},"Race At Night":{"note":"","data":["801270CF 0080"],"options":null}},"E86415A6-98395B53-C:50":{"Have Infinite\\99 Blue Ammo":{"note":"","data":["800CEA16 0063"],"options":null},"Have Infinite\\99 Blue Power (1UP)":{"note":"","data":["800CEA2A 0063"],"options":null},"Have Infinite\\99 Engery Pickups":{"note":"","data":["800CEA0C 0063"],"options":null},"Have Infinite\\99 Gas":{"note":"","data":["800CEA3E 0063"],"options":null},"Have Infinite\\99 Grenades":{"note":"","data":["800CEA34 003F"],"options":null},"Have Infinite\\99 Yellow Ammo":{"note":"","data":["800CEA20 0063"],"options":null},"Have\\All Magic":{"note":"","data":["800CEB48 0010","800CEB4D 0000","800CEB57 0001","800CEB61 0002","800CEB6B 0003","800CEB75 0005","800CEB7F 0006","800CEB89 0008","800CEB93 0009","800CEB9D 000B","800CEBA7 000E","800CEBB1 000F","800CEBBB 0010","800CEBC5 0011","800CEBCF 000A","800CEBD9 000C","800CEBE3 000D"],"options":null},"Have\\Magic On Level 4":{"note":"","data":["810C8CDD FFFF","810C8CDE FFFF","810C8CDF FFFF","810C8CE0 FFFF","810C8CE1 FFFF","810C8CE2 FFFF"],"options":null},"Have\\Max Armour Level":{"note":"","data":["800C8D00 0064"],"options":null},"Have\\Max Experience Level":{"note":"","data":["800C8CFC 00FF"],"options":null},"Have\\Max Spirit Level":{"note":"","data":["800C8D04 0064"],"options":null},"Have\\Max Weapon Level":{"note":"","data":["800C8D02 0064"],"options":null},"Have\\Weapons On Max Upgrade":{"note":"","data":["800C8CAC 0009","800C8CB4 0009","800C8CBC 0009","800C8CC4 0009"],"options":null},"Infinite Air Under Water":{"note":"","data":["800C8BE4 0069"],"options":null},"Infinite Max\\999 Lives":{"note":"","data":["810C8CF8 03E8"],"options":null},"Infinite Max\\Fire Ammo":{"note":"","data":["800C8CB3 0066"],"options":null},"Infinite Max\\Fusion Ammo":{"note":"","data":["800C8CC3 0066"],"options":null},"Infinite Max\\Health":{"note":"","data":["800C8AD9 0066"],"options":null},"Infinite Max\\Ionic Ammo":{"note":"","data":["800C8CBB 0066"],"options":null},"Infinite Max\\Light Ammo":{"note":"","data":["800C8CAB 0066"],"options":null},"Infinite Max\\Mana":{"note":"","data":["800C8CFF 0066"],"options":null},"Infinite Throwing Weapon Ammo":{"note":"","data":["800CF57D 0063"],"options":null},"Play As Select":{"note":"","data":["800FCEC5 00??"],"options":{"Ike Hawkings (Corporal)":"00","Julia Chase (Cartographer)":"02","Karma (The Ex-Deviant)":"03","Max Havok (Chief Enginer)":"04","Mr Bodybolt (7th Passenger)":"06","Solaar (Archbishop)":"05","Sophia Hawkings (Stowaway)":"01"}},"Press A For Bionic Jump":{"note":"This will make you jump to a great height","data":["D00C8BCA 0080","810C8AE8 ????"],"options":{"Max Jump":"0800","Medium Jump":"0250"}}},"E896092B-DC244D4E-C:45":{"Player 1\\Infinite Free Spins":{"note":"","data":["800B999B 0001"],"options":null},"Player 1\\Max Cash":{"note":"","data":["810B9990 FFFF"],"options":null},"Player 1\\No Cash":{"note":"","data":["810B9992 0000"],"options":null},"Player 2\\Infinite Free Spins":{"note":"","data":["800B9AAF 0001"],"options":null},"Player 2\\Max Cash":{"note":"","data":["810B9AA4 FFFF"],"options":null},"Player 2\\No Cash":{"note":"","data":["810B9AA6 0000"],"options":null},"Player 3\\Infinite Free Spins":{"note":"","data":["800B9BC3 0001"],"options":null},"Player 3\\Max Cash":{"note":"","data":["810B9BB8 FFFF"],"options":null},"Player 3\\No Cash":{"note":"","data":["810B9BB8 0000"],"options":null}},"E8C95AFC-35D121DA-C:45":{"99 Gems":{"note":"","data":["80305449 0063","80648FA9 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000302 0000","81305868 0063","50000304 0000","81305872 0063","5000020E 0000","81305882 0063","50000302 0000","816493C8 0063","50000304 0000","816493D2 0063","5000020E 0000","816493E2 0063","80648F65 0000","806493D1 0063"],"options":null},"Infinite\\Health":{"note":"","data":["80305446 0064","80648FA6 0064"],"options":null},"Infinite\\Lives":{"note":"","data":["80648FAB 0009"],"options":null},"Infinite\\Oxygen":{"note":"","data":["806495BD 0000"],"options":null}},"E8C95AFC-35D121DA-C:50":{"99 Gems":{"note":"","data":["80305449 0063","80648FA9 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000302 0000","81305868 0063","50000304 0000","81305872 0063","5000020E 0000","81305882 0063","50000302 0000","816493C8 0063","50000304 0000","816493D2 0063","5000020E 0000","816493E2 0063","80648F65 0000","806493D1 0063"],"options":null},"Infinite\\Health":{"note":"","data":["80305446 0064","80648FA6 0064"],"options":null},"Infinite\\Lives":{"note":"","data":["80648FAB 0009"],"options":null},"Infinite\\Oxygen":{"note":"","data":["806495BD 0000"],"options":null}},"E8E5B179-44AA30E8-C:45":{"Freeze Timer":{"note":"","data":["80163ABF 000A"],"options":null},"Infinite 99 Lives":{"note":"","data":["80163AC7 0063"],"options":null},"Infinite Lives (Retro Frogger)":{"note":"","data":["8025AC2F 0005"],"options":null}},"E8FC8EA1-9F738391-C:45":{"Always Hole In One":{"note":"","data":["8115E1D6 0000"],"options":null},"Big Head":{"note":"","data":["810AE840 401F"],"options":null},"Change Looks Of Liltiger":{"note":"","data":["800B0BC4 0011"],"options":null},"Character Unlock\\Bengal The Tiger":{"note":"","data":["800B0BC2 0010"],"options":null},"Character Unlock\\Bobby":{"note":"","data":["800B0BC6 0001"],"options":null},"Character Unlock\\Cindy":{"note":"","data":["800B0BBA 0001"],"options":null},"Character Unlock\\Festus":{"note":"","data":["800B0BD3 0001"],"options":null},"Character Unlock\\Kimmi":{"note":"","data":["800B0BBA 0010"],"options":null},"Character Unlock\\Mark":{"note":"","data":["800B0BC7 0012"],"options":null},"Character Unlock\\Marvin The Alien":{"note":"","data":["800B0BD7 0001"],"options":null},"Character Unlock\\Robert \u0026 Delvis":{"note":"","data":["800B0BCA 0011"],"options":null},"Character Unlock\\Starr":{"note":"","data":["800B0BCE 0010"],"options":null},"Character Unlock\\Traci (Leopard Costume)":{"note":"","data":["800B0BCE 0011"],"options":null},"Character Unlock\\Twfan \u0026 Eagamer":{"note":"","data":["800B0BBE 0011"],"options":null},"Inventory\\Max Accuracy \u0026 Skipper":{"note":"","data":["800B4410 00FF"],"options":null},"Inventory\\Max Distance \u0026 Wind Cutter":{"note":"","data":["800B4412 00FF"],"options":null},"Inventory\\Max Mystery":{"note":"","data":["800B4420 00F0"],"options":null},"Inventory\\Max No Bounce \u0026 Tee Up":{"note":"","data":["800B4411 00FF"],"options":null},"Inventory\\Max Spinner \u0026 Burrow":{"note":"","data":["800B4413 00FF"],"options":null}},"E9219533-13FBAFBD-C:45":{"Championship Mode\\Infinite Money":{"note":"","data":["810F81CA FFFF"],"options":null},"Championship Mode\\Max Dexterity":{"note":"","data":["810F81D8 447A","810F81DA 0000"],"options":null},"Championship Mode\\Max Endurance":{"note":"","data":["810F81D4 447A","810F81D6 0000"],"options":null},"Championship Mode\\Max Experience":{"note":"","data":["810F81DC 447A","810F81DE 0000"],"options":null},"Championship Mode\\Max Money":{"note":"","data":["810F81C8 7FFF","810F81CA FFFF"],"options":null},"Championship Mode\\Max Stamina":{"note":"","data":["810F81D0 447A","810F81D2 0000"],"options":null},"Championship Mode\\Max Strength":{"note":"","data":["810F81CC 447A","810F81CE 0000"],"options":null},"Championship Mode\\Top Rank":{"note":"","data":["810F81BA 000A"],"options":null},"Enable Extra Characters":{"note":"","data":["80101E6F 0003","80101E73 0003","80101E77 0003","80101E7B 0003","80101E7F 0003","80101E83 0003","80101E87 0003"],"options":null},"Infinite\\Health\\Player 1":{"note":"Do not use this with No Health","data":["810FF6B6 0064"],"options":null},"Infinite\\Health\\Player 2":{"note":"Do not use this with No Health","data":["81100316 0064"],"options":null},"Infinite\\Stamina\\Player 1":{"note":"Do not use this with No Stamina","data":["810FF6BA 0064"],"options":null},"Infinite\\Stamina\\Player 2":{"note":"Do not use this with No Stamina","data":["8110031A 0064"],"options":null},"Infinite\\Time":{"note":"","data":["810FE352 0E10"],"options":null},"Max RUMBLE\\Player 1":{"note":"Do not use this with Never RUMBLE","data":["810FF6C2 0090"],"options":null},"Max RUMBLE\\Player 2":{"note":"Do not use this with Never RUMBLE","data":["81100322 0090"],"options":null},"Never RUMBLE\\Player 1":{"note":"Do not use this with Max RUMBLE","data":["810FF6C2 0000"],"options":null},"Never RUMBLE\\Player 2":{"note":"Do not use this with Max RUMBLE","data":["81100322 0000"],"options":null},"No Health\\Player 1":{"note":"Do not use this with Infinite Health","data":["810FF6B6 0000"],"options":null},"No Health\\Player 2":{"note":"Do not use this with Infinite Health","data":["81100316 0000"],"options":null},"No Stamina\\Player 1":{"note":"Do not use this with Infinite Stamina","data":["810FF6BA 0000"],"options":null},"No Stamina\\Player 2":{"note":"Do not use this with Infinite Stamina","data":["8110031A 0000"],"options":null},"Win 1 Fight to Complete Arcade Mode":{"note":"","data":["80101F0B 000B"],"options":null}},"E97955C6-BC338D38-C:50":{"All Equipment Upgrades":{"note":"","data":["801E6BBD 0023","811E6C0A 201B","801E6B9C 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03DDFDB 0000","801E6B52 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801E6BD2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801E6BD3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801E6BD4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801E6BD5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801E6BD6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801E6BD7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801E6BC5 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801E6BCB 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801E6BD1 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Have Item Modifier":{"note":"","data":["801E6BD0 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\All Masks":{"note":"","data":["811E6BD8 3E39","811E6BDA 4745","811E6BDC 4032","811E6BDE 3A46","811E6BE0 3842","811E6BE2 4833","811E6BE4 3C3D","811E6BE6 373F","811E6BE8 3634","811E6BEA 4341","811E6BEC 3B44","811E6BEE 4935"],"options":null},"Have\\Bombchu":{"note":"","data":["801E6BC7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801E6BC6 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801E6BC9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801E6BC8 0008"],"options":null},"Have\\Fire Arrow":{"note":"","data":["801E6BC2 0002"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801E6BD0 0010"],"options":null},"Have\\Have\\Ocarina of Time":{"note":"","data":["801E6BC0 0000"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801E6BC1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801E6BCF 000F"],"options":null},"Have\\Ice Arrow":{"note":"","data":["801E6BC3 0003"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801E6BCE 000E"],"options":null},"Have\\Light Arrow":{"note":"","data":["801E6BC4 0004"],"options":null},"Have\\Magic Beans":{"note":"","data":["801E6BCA 000A"],"options":null},"Have\\Pictograph":{"note":"","data":["801E6BCD 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801E6BCC 000C"],"options":null},"Have\\QuestStatus Items":{"note":"","data":["801E6C0D 0005","811E6C0E F7CF"],"options":null},"Infinite\\Health":{"note":"","data":["811E6B86 03E7"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811E6B84 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"This is Infinite use of Bombs,Bombchus,Deku Sticks,Deku Nuts,Magic Beans,\u0026 Powder Kegs. But you must also put it's Have on to work.","data":["801E6BF1 0063","801E6BF6 0063","801E6BF7 0063","801E6BF8 0063","801E6BF9 0063","801E6BFA 0063","801E6BFC 0063","801E6BFB 0063","801E6BFD 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801E6B89 0060","811E6B90 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811E6B8A 03E7"],"options":null},"Play As":{"note":"","data":["801E6B70 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03DDFDB 0020","813F72B8 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You Have\\been warned.","data":["801E6B9C 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F2D56 0008","811E6B66 FFFD","D01F2D56 0004","811E6B66 0000","D01F2D56 0002","811E6B66 FFFE"],"options":null},"Use all C Buttons":{"note":"","data":["811EAA68 0000","811EAA6A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["803DDFDA 0000","803F6835 0001","813F683A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"EA06F8C3-07C2DEED-C:46":{"Character Select":{"note":"","data":["80075F52 00??"],"options":{"Big Head.":"04","Flame Grilled":"08","Normal":"00","Play as Deadwing.":"01"}},"Have All\\Cheats: Book of Shadows":{"note":"","data":["81075F4E 0FFF"],"options":null},"Have All\\Dark Souls Collected":{"note":"","data":["80075F49 0078"],"options":null},"Have All\\Gads \u0026 The Poign":{"note":"","data":["80030E57 000F"],"options":null},"Have All\\Items":{"note":"","data":["50001B20 0000","80030613 000B"],"options":null},"Have All\\L-Eclipser":{"note":"You will not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50000320 0000","80030973 000B"],"options":null},"Have All\\Levels Unlocked":{"note":"","data":["5000101C 0000","80030A0E 0001"],"options":null},"Infinite\\0.9mm Ammo":{"note":"","data":["81075B3A 0190"],"options":null},"Infinite\\Accumulators":{"note":"","data":["800306D7 0005"],"options":null},"Infinite\\Cadeaux'":{"note":"","data":["81075B36 03E7"],"options":null},"Infinite\\Max Health/Air/Shadow Charge \u0026 Voodoo Power":{"note":"","data":["50000604 0000","81075B16 2710"],"options":null},"Infinite\\Prisms":{"note":"","data":["80030957 0003"],"options":null},"Infinite\\Retractors":{"note":"","data":["800308B7 0003"],"options":null},"Infinite\\Shotgun Shells":{"note":"","data":["80075B2F 0063"],"options":null},"Infinite\\Violator Ammo":{"note":"","data":["81075B32 03E7"],"options":null},"Press L To Levitate":{"note":"Press the L-Button to rise and let go and press again in stages to come back down.","data":["D0059097 0020","80075578 0041"],"options":null},"[Ammo Always Displayed On Screen]":{"note":"","data":["50000408 0000","80075ACD 0007"],"options":null},"[Health Meter Displayed On Screen]":{"note":"","data":["81075B10 0000","81075B12 00FF"],"options":null}},"EA71056A-E4214847-C:45":{"Have All Cars":{"note":"","data":["50000D01 0000","80191298 001F"],"options":null},"Have All Characters \u0026 Levels":{"note":"","data":["81181572 01C0"],"options":null},"Level Select":{"note":"","data":["80190150 00??"],"options":{"Aircraft Graveyard":"04","Canyonlands":"09","Casino City":"08","Ghost Town":"05","Hoover Dam":"06","Oil Fields":"03","Sand Factory":"02","Secret Base":"01","Ski Resorts":"0A","Super Dreamland 64":"00","Valley Farms":"07"}},"Play As\\Player 1":{"note":"","data":["80186AE0 00??"],"options":{"\"Y\" The Alien":"0C","Beezwax":"09","Boogie":"08","Chassey Blue":"00","Convoy":"05","Dave":"04","Houston 3":"07","John Torque":"03","Loki":"06","Molo":"0A","Sheila":"02","Sid Burn":"0B","Slick Clyde":"01"}},"Play As\\Player 2":{"note":"","data":["80186AE1 00??"],"options":{"\"Y\" The Alien":"0C","Beezwax":"09","Boogie":"08","Chassey Blue":"00","Convoy":"05","Dave":"04","Houston 3":"07","John Torque":"03","Loki":"06","Molo":"0A","Sheila":"02","Sid Burn":"0B","Slick Clyde":"01"}}},"EAB7B429-BAC92C57-C:45":{"Have All Characters":{"note":"","data":["5000125C 0000","810EC938 0000","5000125C 0000","810EC93A 0003"],"options":null},"Infinite\\Money":{"note":"","data":["810EC932 FFFF"],"options":null},"Infinite\\Time":{"note":"","data":["810E7596 0E10"],"options":null},"Player 1\\Health":{"note":"","data":["810D9F78 0000","810D9F7A 00??"],"options":{"Infinite":"64","No Health":"00"}},"Player 1\\RUMBLE":{"note":"","data":["810D9F84 0000","810D9F86 00??"],"options":{"Max":"30","Never Rumble":"00"}},"Player 1\\Stamina":{"note":"","data":["810D9F7C 0000","810D9F7E 00??"],"options":{"Infinite":"64","No Stamina":"00"}},"Player 2\\Health":{"note":"","data":["810DA790 0000","810DA792 00??"],"options":{"Infinite":"64","No Health":"00"}},"Player 2\\RUMBLE":{"note":"","data":["810DA7A0 0000","810DA7A2 00??"],"options":{"Max":"30","Never Rumble":"00"}},"Player 2\\Stamina":{"note":"","data":["810DA794 0000","810DA796 00??"],"options":{"Infinite":"64","No Stamina":"00"}},"Sudden Death Mode\\Player 1":{"note":"","data":["D00E7596 03D7","810DAF78 0000","810D9F7A 0001"],"options":null},"Sudden Death Mode\\Player 2":{"note":"","data":["D00E7596 03D7","810DA790 0000","810DA792 0001"],"options":null}},"EAE6ACE2-020B4384-C:50":{"2X Secondary Weapons":{"note":"","data":["8104C62A 0080"],"options":null},"Access All Platinium Medals":{"note":"","data":["50001301 0000","8004C63D 0004"],"options":null},"Accuracy 100%":{"note":"","data":["8105C896 0064","8105C89A 0064"],"options":null},"Advanced Weapons,Shields \u0026 Extra Ships":{"note":"","data":["8104C636 00FF"],"options":null},"Always Pass Mission":{"note":"","data":["8105C88E 0001"],"options":null},"Bonus Collected":{"note":"Where Bonus Are Available","data":["8005C89F 0002"],"options":null},"Completion Time 0:00":{"note":"","data":["8105C892 0000"],"options":null},"Enemies Destroyed 756":{"note":"","data":["8005C89D 03E7"],"options":null},"Friendly Saves 756":{"note":"","data":["8005C89E 03E7"],"options":null},"Infinite Lives":{"note":"","data":["80067553 03E7"],"options":null},"Level Select":{"note":"","data":["8004C650 0013"],"options":null},"Lives Remaining 756":{"note":"","data":["8005C8A0 03E7"],"options":null}},"EB38F792-190EA246-C:45":{"Away Team\\Infinite Time-Outs":{"note":"","data":["800738E7 0003"],"options":null},"Away Team\\No Time-Outs":{"note":"","data":["800738E7 0000"],"options":null},"Have 99 Tokens":{"note":"","data":["8115F9F0 0063"],"options":null},"Have All\\Cards":{"note":"","data":["50007802 0000","8115F9F2 FFFF"],"options":null},"Have All\\Cheats":{"note":"","data":["50000402 0000","81070788 FFFF"],"options":null},"Have All\\Levels Completed":{"note":"","data":["50001902 0000","8115FB2C FFFF"],"options":null},"Have All\\Stadiums":{"note":"","data":["50000802 0000","81061850 FFFF"],"options":null},"Have All\\Teams":{"note":"","data":["50001102 0000","810C1628 FFFF"],"options":null},"Home Team\\Infinite Time-Outs":{"note":"","data":["80071617 0003"],"options":null},"Home Team\\No Time-Outs":{"note":"","data":["80071617 0000"],"options":null}},"EBA949DC-39BAECBD-C:49":{"Access All Levels":{"note":"","data":["8008A9D6 0001","8008A9EA 0001","8008AA12 0001","8008AA62 0001","8008AA76 0001","8008AA8A 0001","8008AA9E 0001","8008AAB2 0001","8008AAC6 0011","8008AADA 0021","8008AAEE 0001","8008AB16 0011","8008AB2A 0041","8008AB3E 0021","8008AB52 0081","8008AB66 0001","8008AB7A 0081","8008AB8E 0001","8008ABB6 0001","8008ABDE 0001","8008ABF2 0011","8008AC06 0021","8008AC56 0001","8008AF3A 0001","8008AF4E 0001","8008AF62 0001","8008AF76 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81094150 0063","81094152 0063","81094154 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A9297 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810866C2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810864C4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80094305 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A92B5 00??","800A92C5 00??","800A92D5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"EBEEA8DB-F2ECB23C-C:45":{"Infinite Shot Clock":{"note":"","data":["801378DF 0016"],"options":null},"Infinite Turbo\\Team 1\\Player 1":{"note":"","data":["8115B512 FF00"],"options":null},"Infinite Turbo\\Team 1\\Player 2":{"note":"","data":["8115B516 FF00"],"options":null},"Infinite Turbo\\Team 2\\Player 1":{"note":"","data":["8115B50A FF00"],"options":null},"Infinite Turbo\\Team 2\\Player 2":{"note":"","data":["8115B50E FF00"],"options":null},"Infinite Violation Clock":{"note":"","data":["8013783B 005D"],"options":null},"Team 1 Score Select":{"note":"","data":["80137117 00??"],"options":{"00":"00","150":"96"}},"Team 2 Score Select":{"note":"","data":["80137113 00??"],"options":{"00":"00","150":"96"}}},"EBFE2397-FF74DA34-C:45":{"Always Have Rapid Shot":{"note":"This is a constant fire without a break as long as you keep pressing A","data":["800B51AB 0009"],"options":null},"Infinite\\Lives":{"note":"","data":["800B51DD 0063"],"options":null},"Infinite\\Points":{"note":"","data":["810B51E2 FFFF"],"options":null},"Infinite\\Shields":{"note":"","data":["810B51B6 0001"],"options":null},"Secondary Weapon Select":{"note":"B Button Weapon infinite ammo","data":["800B519F 00??"],"options":{"Diagonal Burst":"20","Horizontal Left":"0C","Horizontal Right":"0D","Swarm Missiles":"1A","Vertical Burst":"06"}},"[Unlock All Modes}":{"note":"Enable this as so as you load the game.This Unlocks Classic and Maniacle Mode. To get to Classic Mode you pr ess Right on Player 1. To get to Maniacle Mode, go to Options and press Left on Normal Mode. This can be disabled once saved to mempak.","data":["80070217 0003"],"options":null}},"EC0F690D-32A7438C-C:4A":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C18E2 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803A7DAF 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["8036D1C7 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","80201035 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","801DCB95 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","801FB505 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","801EE8ED 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","80201165 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","801D89FD 0001"],"options":null}},"EC417312-EB31DE5F-C:4A":{"All Equipment Upgrades":{"note":"","data":["801EF4CD 0023","811EF51A 201B"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D01FB9E1 0000","801EF462 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Have All\\Masks":{"note":"","data":["801EF4E8 005A","801EF4E9 0055","801EF4EA 0063","801EF4EB 0061","801EF4EC 005C","801EF4ED 004E","801EF4EE 0056","801EF4EF 0062","801EF4F0 0054","801EF4F1 005E","801EF4F2 0064","801EF4F3 004F","801EF4F4 0058","801EF4F5 0059","801EF4F6 0053","801EF4F7 005B","801EF4F8 0052","801EF4F9 0050","801EF4FA 005F","801EF4FB 005D","801EF4FC 0057","801EF4FD 0060","801EF4FE 0065","801EF4FF 0051"],"options":null},"Have All\\Quest Status Items":{"note":"","data":["801EF51D 0005","811EF51E F7CF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801EF4D2 0002"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801EF4D3 0003"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801EF4D4 0004"],"options":null},"Have\\Bombchu":{"note":"","data":["801EF4D7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801EF4D6 0006"],"options":null},"Have\\Bottle Modifier\\1":{"note":"","data":["801EF4E2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\2":{"note":"","data":["801EF4E3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\3":{"note":"","data":["801EF4E4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\4":{"note":"","data":["801EF4E5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\5":{"note":"","data":["801EF4E6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\6":{"note":"","data":["801EF4E7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Deku Nuts":{"note":"","data":["801EF4D9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801EF4D8 0008"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801EF4E0 0010"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801EF4D1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801EF4DF 000F"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801EF4DE 000E"],"options":null},"Have\\Magic Beans":{"note":"","data":["801EF4DA 000A"],"options":null},"Have\\Ocarina of Time":{"note":"","data":["801EF4D0 0000"],"options":null},"Have\\Pictograph":{"note":"","data":["801EF4DD 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801EF4DC 000C"],"options":null},"Infinite\\Arrows":{"note":"","data":["801EF501 0063"],"options":null},"Infinite\\Bombchus":{"note":"","data":["801EF507 0063"],"options":null},"Infinite\\Bombs":{"note":"","data":["801EF506 0063"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801EF509 0063"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801EF508 0063"],"options":null},"Infinite\\Health":{"note":"","data":["811EF496 0140"],"options":null},"Infinite\\Hearts Options":{"note":"","data":["811EF494 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Magic Beans":{"note":"","data":["801EF50A 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801EF499 0060","811EF4A0 0101"],"options":null},"Infinite\\Powder Kegs":{"note":"","data":["801EF50C 0063"],"options":null},"Infinite\\Rupees":{"note":"","data":["811EF49A 03E7"],"options":null},"Play As":{"note":"","data":["801EF480 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03E6D0B 0020","81400008 40CB"],"options":null},"Replace Sword With":{"note":"","data":["801EF4AC 00??"],"options":{"Deity Link's Sword":"10","Fire Arrow w/ Bow":"02","Hero's Bow":"00","Ice Arrow w/ Bow":"03","Light Arrow w/ Bow":"04"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01FBA40 0008","811EF476 FFFD","D01FBA40 0004","811EF476 0000","D01FBA40 0002","811EF476 FFFE"],"options":null},"Warp Modifier":{"note":"Put this code on and press the start button and it will now take where you wanted to go, turn it back off after you have got there.","data":["D05EC55A 0000","803FF545 0001","813FF54A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"EC58EABF-AD7C7169-C:45":{"Chunky\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FCB0C 0064"],"options":null},"Chunky\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FCB16 0064"],"options":null},"Chunky\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FCB14 0064"],"options":null},"Chunky\\All Golden Bananas\\DK Isle":{"note":"","data":["817FCB18 0064"],"options":null},"Chunky\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FCB0E 0064"],"options":null},"Chunky\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FCB12 0064"],"options":null},"Chunky\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FCB10 0064"],"options":null},"Chunky\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FCB0A 0064"],"options":null},"Chunky\\Infinite Coins":{"note":"","data":["817FCACE 03E7"],"options":null},"Chunky\\Infinite Musical Instrument":{"note":"","data":["817FCAD0 000A"],"options":null},"Diddy\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC9F2 0064"],"options":null},"Diddy\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC9FC 0064"],"options":null},"Diddy\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC9FA 0064"],"options":null},"Diddy\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC9FE 0064"],"options":null},"Diddy\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC9F4 0064"],"options":null},"Diddy\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FC9F8 0064"],"options":null},"Diddy\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC9F6 0064"],"options":null},"Diddy\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC9F0 0064"],"options":null},"Diddy\\Infinite Coins":{"note":"","data":["817FC9B4 03E7"],"options":null},"Diddy\\Infinite Musical Instrument":{"note":"","data":["817FC9B6 000A"],"options":null},"Donkey Kong\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC994 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC99E 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC99C 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC9A0 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC996 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC998 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC992 03E7"],"options":null},"Donkey Kong\\Has Moves":{"note":"","data":["817FC950 0103"],"options":null},"Donkey Kong\\Have Weapon":{"note":"","data":["817FC952 0103"],"options":null},"Donkey Kong\\Infinite Ammo":{"note":"","data":["807FCC45 0096"],"options":null},"Donkey Kong\\Infinite Bananas\\Angry Aztec":{"note":"","data":["817FC95C 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Creepy Castle":{"note":"","data":["817FC966 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Crystal Caves":{"note":"","data":["817FC964 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\FactoryLevel":{"note":"","data":["817FC95E 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Fungi Forest":{"note":"","data":["817FC962 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Galleon Level":{"note":"","data":["817FC9BE 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Jungle Japes":{"note":"","data":["817FC95A 03E7"],"options":null},"Donkey Kong\\Infinite Coins":{"note":"","data":["817FC956 03E7"],"options":null},"Donkey Kong\\Infinite Musical Instrument":{"note":"","data":["817FC954 0103","817FC958 00FF"],"options":null},"Free Pass (Access All Areas)":{"note":"This is exactly what it says, You can walk through Any Locked Door,Gate, Or Area. Have Fun.","data":["8066D226 0001","8066D321 0001"],"options":null},"Infinite\\Camera Film":{"note":"","data":["807FCC49 0005"],"options":null},"Infinite\\Crystal Coconuts":{"note":"","data":["807FCB87 0096"],"options":null},"Infinite\\Health":{"note":"","data":["817FCC4C 041F"],"options":null},"Infinite\\Orange Bombs":{"note":"","data":["807FCC41 0096"],"options":null},"Lanky\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FCA50 0064"],"options":null},"Lanky\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FCA5A 0064"],"options":null},"Lanky\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FCA58 0064"],"options":null},"Lanky\\All Golden Bananas\\DK Isle":{"note":"","data":["817FCA5C 0064"],"options":null},"Lanky\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FCA52 0064"],"options":null},"Lanky\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FCA56 0064"],"options":null},"Lanky\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FCA54 0064"],"options":null},"Lanky\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FCA4E 0064"],"options":null},"Lanky\\Infinite Coins":{"note":"","data":["817FCA12 03E7"],"options":null},"Lanky\\Infinite Musical Instrument":{"note":"","data":["817FCA14 000A"],"options":null},"Tiny\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FCAAE 0064"],"options":null},"Tiny\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FCAA8 0064"],"options":null},"Tiny\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FCAB6 0064"],"options":null},"Tiny\\All Golden Bananas\\DK Isle":{"note":"","data":["817FCABA 0064"],"options":null},"Tiny\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FCAB0 0064"],"options":null},"Tiny\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FCAB4 0064"],"options":null},"Tiny\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FCAB2 0064"],"options":null},"Tiny\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FCAAC 0064"],"options":null},"Tiny\\Infinite Coins":{"note":"","data":["817FCA70 03E7"],"options":null},"Tiny\\Infinite Musical Instrument":{"note":"","data":["817FCA72 000A"],"options":null}},"EC7011B7-7616D72B-C:45":{"Always Have Wallet Size":{"note":"","data":["8011A672 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C84B5 0010","8111B936 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011B4B9 00FF","8011B92F 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C84B5 0000","8011B9E3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest 01).","data":["80025614 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011A656 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011A657 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011A658 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011A659 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023E80F 0020","8023E815 0033"],"options":null},"Dark Link\\Play As Dark Link":{"note":"","data":["D01C84B5 0020","811DAB60 801E","D01C84B5 0020","811F2C24 801D","D01C84B5 0020","811F2C26 AA30","D01C84B5 0020","811CA0E4 801E","D01C84B5 0020","811CA0E6 4B60","D01C84B5 0020","811E4B60 0000","D01C84B5 0020","811E4B62 02FF","D01C84B5 0020","811DAA30 0033","D01C84B5 0020","811DAA32 0901","D01C84B5 0020","811DAB62 27E0","D01C84B5 0020","811E4C90 8009","D01C84B5 0020","811E4C92 7740","D01C84B5 0020","811C8710 801E","D01C84B5 0020","811C8712 4B60"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F2208 0005","801EEC88 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["8011A672 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011A673 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011A671 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A66C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A674 30FF","8111A676 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011A648 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011A64E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011A654 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011A64C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011A646 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011A650 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011A645 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011A644 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011A647 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011A64A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011A64D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011A651 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011A652 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011A649 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011A64F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011A655 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011A653 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011A64B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011A65F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011A678 0007","8011A679 0007","8011A67A 0007","8011A67B 0007","8011A67C 0007","8011A67D 0007","8011A67E 0007","8011A67F 0007","8011A680 0007","8011A681 0007","8011A682 0007","8011A68F 0009","8011A690 0009","8011A691 0009","8011A692 0009","8011A693 0009","8011A699 0009","8011A69C 0009","8011A697 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011A664 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011A65E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011A65D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011A662 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011A65C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111A600 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011A609 0008","8011A60A 0001","8011A60C 0001","8011A603 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011A66A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111B99C 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011B9A5 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C84B5 0020","811DAA90 40CB","D01C84B5 0000","811DB2B2 000D","8011A640 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011A69F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011A6A1 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111A5FE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111B998 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L+R For FMV Select":{"note":"Hold down `L+R' after the Nintendo logo is spinning to see your favourite FMV","data":["D01C84B5 0030","8111A5D2 00A0","D01C84B5 0030","8111A5DA ????"],"options":{"Ending":"FFF8","Fire FMV":"FFF5","Ganondorf FMV":"FFF6","More Triforce FMV":"FFF7","Planet Making FMV":"FFF4","Triforce FMV":"FFF2","fire FMV":"FFF1"}},"Press L\\For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C84B5 0020","811DB2B2 000D"],"options":null},"Press L\\To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C84B5 0020","811DAA90 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C84B5 0010","8011A5D7 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111A5DC ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011A65A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011A65B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011A640 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011A60E 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111B7F2 0000","8111B7F4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}},"Widescreen":{"note":"Originally by Darkludx","data":["81024A18 1000","81024A1A 0023","810920D8 3C07","810920DA 3FE3"],"options":null}},"EC7011B7-7616D72B-C:4A":{"Always Have Wallet Size":{"note":"","data":["8011A672 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C84B5 0010","8111B936 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011B4B9 00FF","8011B92F 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C84B5 0000","8011B9E3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest 01).","data":["80025614 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011A656 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011A657 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011A658 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011A659 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801D8BCA 0006","801F2208 0001","801EEC88 0001"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.If you Use Black Gauntlets,They are as strong as the Golden Gauntlets. This code also gives you the Silver Scale and the Golden Scale and unlimited rupees.","data":["8011A672 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011A673 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011A671 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A66C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A674 30FF","8111A676 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011A648 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011A64E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011A654 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011A64C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011A646 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011A650 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011A645 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011A644 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011A647 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011A64A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011A64D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011A651 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011A652 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011A649 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011A64F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011A655 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011A653 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011A64B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011A65F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011A678 0007","8011A679 0007","8011A67A 0007","8011A67B 0007","8011A67C 0007","8011A67D 0007","8011A67E 0007","8011A67F 0007","8011A680 0007","8011A681 0007","8011A682 0007","8011A68F 0009","8011A690 0009","8011A691 0009","8011A692 0009","8011A693 0009","8011A699 0009","8011A69C 0009","8011A697 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011A664 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011A65E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011A65D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011A662 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011A65C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111A600 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011A609 0008","8011A60A 0001","8011A60C 0001","8011A603 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011A66A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111B99C 0001"],"options":null},"Infinite\\Timers\\All other Timers":{"note":"This cheat works on all Race Timers.Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011B9A5 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C84B5 0020","811DAA90 40CB","D01C84B5 0000","811DB2B2 000D","8011A640 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011A69F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011A6A1 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111A5FE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111B998 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C84B5 0020","811DB2B2 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C84B5 0020","811DAA90 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C84B5 0010","8011A5D7 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111A5DC ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011A65A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011A65B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011A640 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011A60E 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111B7F2 0000","8111B7F4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"ECBD95DD-1FAB637D-C:0":{},"ED567D0F-38B08915-C:4A":{"Widescreen":{"note":"Boards in 4:3.","data":["8101FB1A 3FE3","810538D4 080C","810538D6 0074","810538D8 3C1B","810538DA 3FAB","813001D0 449B","813001D2 6000","813001D4 460C","813001D6 0002","813001D8 4606","813001DA 0002","813001DC 0801","813001DE 4E37","813001E0 2400"],"options":null}},"ED98957E-8242DCAC-C:45":{"All Bosses 1 Hit Deaths":{"note":"","data":["811BE482 0000"],"options":null},"Enable\\Max Power Mode":{"note":"","data":["8015D417 0001"],"options":null},"Flashlight Mod":{"note":"","data":["80179448 00??"],"options":{"Off":"00","On":"01"}},"Have All\\Weapons,Items \u0026 Infinite Ammo\\Player 1":{"note":"","data":["8017AA9F 001E","8017AAB3 0008","8017AAB7 0009","801587C4 0009","8015D417 0001","801587C0 000C","801587C1 0060","801587C3 0001","50000601 0000","801587C5 0001","801587CB 0004","801587CD 000C"],"options":null},"Have Trial Mode Unlocked":{"note":"","data":["8110DCEE 0004"],"options":null},"Have\\All Characters In Multi":{"note":"","data":["8115D412 FFFF","8115D410 0003","8015D411 0003"],"options":null},"Infinite Health":{"note":"","data":["8017AABB 0064"],"options":null},"Start with Weapon\\Player 1":{"note":"","data":["8017AAA8 00??"],"options":{"Cool Rocket Launcher With Infinite Ammo":"09","HandGun":"00","Invisible Gun 1 With Infinite Ammo":"06","Invisible Gun 2 With Infinite Ammo":"07","M16 With Infinite Ammo":"04","Machinegun":"01","New Cooler Handgun":"05","Odd Inviso ShotGun With Infinite Ammo":"08","Rocket Launcher":"03","Shotgun":"02","Silenced Handgun":"14"}},"Time is Always 00:00:00":{"note":"","data":["8110DD62 0000"],"options":null}},"EDD6E031-68136013-C:45":{"Always Place 1st":{"note":"","data":["80112589 0000"],"options":null},"Best Points\\In Stunt Mode\\Player 1":{"note":"","data":["8010C068 00FF"],"options":null},"Best Points\\In Stunt Mode\\Player 2":{"note":"","data":["8010C069 00FF"],"options":null},"Car Select\\Player 1":{"note":"","data":["803CB362 00??"],"options":{"4x4":"0F","Bandit":"05","Compact":"01","Concept":"0B","Coupe":"06","Cruiser":"0D","Exotic":"07","Formula":"12","Hot Rod":"11","Mobster":"03","Mtn Dew":"15","Muscle Car":"02","Pickup":"00","Prototype":"13","Rocket":"14","Sedan":"04","Sportster":"09","Stallion":"0E","Subcompact":"0A","Taxi":"10","Van":"08"}},"Car Select\\Player 2":{"note":"","data":["803CB363 00??"],"options":{"4x4":"0F","Bandit":"05","Compact":"01","Concept":"0B","Coupe":"06","Cruiser":"0D","Exotic":"07","Formula":"12","Hot Rod":"11","Mobster":"03","Mtn Dew":"15","Muscle Car":"02","Pickup":"00","Prototype":"13","Rocket":"14","Sedan":"04","Sportster":"09","Stallion":"0E","Subcompact":"0A","Taxi":"10","Van":"08"}},"Cruiser Front Tire Size\\Player 1":{"note":"","data":["800C0AF9 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Cruiser Rear Tire Size\\Player 1":{"note":"","data":["800C0C01 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Formula Front Tire Size\\Player 1":{"note":"","data":["800C0B0D 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Formula Rear Tire Size\\Player 1":{"note":"","data":["800C0C15 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Front Pickup Tire Size\\Player 1":{"note":"","data":["800C0AC5 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Have All Keys Found\\Alcatraz\\Normal":{"note":"","data":["810C1DC4 FFFF"],"options":null},"Have All Keys Found\\Hawaii\\Normal":{"note":"","data":["810C1DC0 FFFF"],"options":null},"Have All Keys Found\\Las Vegas Normal":{"note":"","data":["810C1DBC FFFF"],"options":null},"Have All Keys Found\\Los Angeles\\Normal":{"note":"","data":["810C1DC6 FFFF"],"options":null},"Have All Keys Found\\New York-Downtown\\Normal":{"note":"","data":["810C1DBE FFFF"],"options":null},"Have All Keys Found\\New York-Uptown\\Normal":{"note":"","data":["810C1DC2 FFFF"],"options":null},"Have All Keys Found\\Seattle\\Normal":{"note":"","data":["810C1DC8 FFFF"],"options":null},"Have\\All Keys \u0026 Cans\\Midway Track":{"note":"","data":["810C1DD0 FFFF"],"options":null},"Have\\All Keys \u0026 Cans\\Stunt Track":{"note":"","data":["810C1DD2 FFFF"],"options":null},"Have\\Extra Cars":{"note":"","data":["50000902 0000","810C1DBC FFFF"],"options":null},"Have\\Game Timer Off":{"note":"","data":["800D9E88 0001"],"options":null},"Have\\Midway Track":{"note":"","data":["800E7D19 0001"],"options":null},"Have\\Stunts All Tracks":{"note":"","data":["8010C200 0001"],"options":null},"Hot Rod Front Tire Size\\Player 1":{"note":"","data":["800C0B09 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Hot Rod Rear Tire Size\\Player 1":{"note":"","data":["800C0C11 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Misc\\Auto Abort Disable":{"note":"","data":["8010C168 0001"],"options":null},"Misc\\Brakes Off":{"note":"","data":["80125C64 0001"],"options":null},"Misc\\Car Collisions Off":{"note":"","data":["8011249A 0001"],"options":null},"Misc\\Car Mines On":{"note":"","data":["8010C167 0001"],"options":null},"Misc\\Cone Mines On":{"note":"","data":["8010C166 0001"],"options":null},"Misc\\Damage Off":{"note":"","data":["8011CDB0 0001"],"options":null},"Misc\\Difficulty Mod":{"note":"","data":["8010C211 00??"],"options":{"Easy":"01","Extremely Hard":"05","Hard":"03","Medium":"02","Very Easy":"00","Very Hard":"04"}},"Misc\\Drones In Race":{"note":"","data":["800D5761 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07"}},"Misc\\Have All Cars In Pipe":{"note":"","data":["810C1DCE FFFF"],"options":null},"Misc\\Heavy Gravity":{"note":"","data":["800E7D22 0002"],"options":null},"Misc\\Heavy Mass":{"note":"","data":["8010C179 0001"],"options":null},"Misc\\Inside-Out Car On":{"note":"","data":["801174E0 0001"],"options":null},"Misc\\Invincible":{"note":"","data":["80119634 0001"],"options":null},"Misc\\Invisible Cars":{"note":"","data":["8010C170 0001"],"options":null},"Misc\\Invisible Tracks":{"note":"","data":["8010C178 0001"],"options":null},"Misc\\Jovian Gravity":{"note":"","data":["800E7D22 0003"],"options":null},"Misc\\Killer Rats On":{"note":"","data":["8010C17C 0001"],"options":null},"Misc\\Laps to Race":{"note":"","data":["8010C0E3 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Misc\\Large Frame":{"note":"","data":["8010C43C 0003"],"options":null},"Misc\\Levitation":{"note":"","data":["8010C254 0001"],"options":null},"Misc\\Light Gravity":{"note":"","data":["800E7D22 0000"],"options":null},"Misc\\Massive Mass":{"note":"","data":["8010C179 0002"],"options":null},"Misc\\New York Cabs":{"note":"","data":["800D9E89 0001"],"options":null},"Misc\\Resurrect In Place":{"note":"","data":["8010C210 0001"],"options":null},"Misc\\Suicide Mode Humans On":{"note":"","data":["80119628 0002"],"options":null},"Misc\\Suicide Mode On":{"note":"","data":["80119628 0001"],"options":null},"Misc\\Super Speed":{"note":"","data":["80111950 0001"],"options":null},"Misc\\Super Tires":{"note":"","data":["8010D3A6 0002"],"options":null},"Misc\\Upside Down Mode":{"note":"","data":["800D0171 0001"],"options":null},"Misc\\Your Car Is Invisible":{"note":"","data":["801127A1 0001"],"options":null},"Mt. Dew Front Tire Size\\Player 1":{"note":"","data":["800C0B19 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Mt. Dew Rear Tire Size\\Player 1":{"note":"","data":["800C0C21 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Pickup Front Tire Size\\Player 2":{"note":"","data":["800C0B1D 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Press GS Activate Cheat Menu":{"note":"","data":["880C2132 0001"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D00D0193 0010","810F58DC 44CB","D00D0193 0010","810F5938 44CB"],"options":null},"Press R to Shrink Car":{"note":"","data":["D00D0193 0010","8010C43C 0001"],"options":null},"Prototype Front Tire Size\\Player 1":{"note":"","data":["800C0B11 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Prototype Rear Tire Size\\Player 1":{"note":"","data":["800C0C19 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Rear Pickup Tire Size\\Player 1":{"note":"","data":["800C0BCD 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Rear Tire Size\\Player 2":{"note":"","data":["800C0C25 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Rocket Front Tire Size\\Player 1":{"note":"","data":["800C0B15 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Rocket Rear Tire Size\\Player 1":{"note":"","data":["800C0C1D 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Total Points\\In Stunt Mode\\Player 1":{"note":"","data":["8010C075 00FF"],"options":null},"Total Points\\In Stunt Mode\\Player 2":{"note":"","data":["8010C077 00FF"],"options":null},"Track Modifier":{"note":"","data":["8010C3F0 00??"],"options":{"Alcatraz":"04","Crash":"08","Half Pipe":"07","Hawaii":"02","Las Vegas":"00","Los Angeles":"05","Midway":"0A","New York Downtown":"01","New York Uptown":"03","Pipe":"09","Seattle":"06","Stunt":"0B"}},"Unlock All Cheats":{"note":"","data":["50000E02 0000","810C20E8 0101"],"options":null},"Van Front Tire Size\\Player 1":{"note":"","data":["800C0AE5 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Van Rear Tire Size\\Player 1":{"note":"","data":["800C0BED 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}}},"EDF419A8-BF1904CC-C:45":{"Access All\\Cars":{"note":"","data":["8002CFF7 000B"],"options":null},"Access All\\Difficulties":{"note":"","data":["8002CFFB 0004"],"options":null},"Access All\\Multiplayer Levels":{"note":"","data":["50000901 0000","8002D000 0001"],"options":null},"Access All\\Tracks":{"note":"","data":["8002CFF3 0006"],"options":null},"Access In-Game Cheats":{"note":"","data":["50001301 0000","8002D008 0001"],"options":null},"Damage Select":{"note":"","data":["8002CD93 00??"],"options":{"Double":"02","Half":"01","Normal":"00","Triple":"03"}},"Health Select":{"note":"","data":["8002CD7F 00??"],"options":{"Bad Only":"02","Good Only":"01","Normal":"00","Off":"03"}},"Infinite Continues":{"note":"","data":["8002CC57 0064"],"options":null},"Low Timer":{"note":"","data":["81025DD4 1040"],"options":null},"Power-Up Select":{"note":"","data":["8002CD7B 00??"],"options":{"?":"05","Health":"06","Invincible":"07","Mines":"01","Nitros":"04","Normal":"00","Off":"08","Rockets":"02","Stealer":"03"}},"Radar":{"note":"","data":["8002CD8F 00??"],"options":{"Off":"01","On":"00"}},"Speed units\\Kph or Mph":{"note":"","data":["81025E68 ????"],"options":{"Kph":"0100","Mph":"0001"}},"View Mode Select?":{"note":"","data":["8002CD8B 00??"],"options":{"Fisheye":"03","Flip":"02","Fog":"01","Normal":"00"}},"Widescreen":{"note":"","data":["D1178BF6 3F00","81178BF6 3F2B","D1178C16 3F00","81178C16 3F2B"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\01 Coventry Cove":{"note":"","data":["80363DD3 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\02 Mount Mayhem":{"note":"","data":["80351E9B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\03 Inferno Isle":{"note":"","data":["80364633 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\04 Sunset Sands":{"note":"","data":["8033C91B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\05 Metro Madness":{"note":"","data":["8035E61B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\06 Wicked Woods":{"note":"","data":["80357F33 0064"],"options":null}},"EE4A0E33-8FD588C9-C:50":{"Always Have\\99 points":{"note":"","data":["80161EC1 0063"],"options":null},"Always first position":{"note":"","data":["801608D8 0001"],"options":null},"Only race one lap":{"note":"","data":["80161DF5 0001"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D01A3095 0010","811650E8 4077","D01A3095 0010","811650F0 4077"],"options":null}},"EE802DC4-690BD57D-C:4A":{"Bike Modifier\\Player 1":{"note":"","data":["8016BDF7 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 2":{"note":"","data":["8016BE43 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 3":{"note":"","data":["8016BE8F 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 4":{"note":"","data":["8016BEDB 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Infinite Primary Weapon\\Player 1":{"note":"","data":["801677B5 00C8"],"options":null},"Infinite Primary Weapon\\Player 2":{"note":"","data":["80167F25 00C8"],"options":null},"Infinite Primary Weapon\\Player 3":{"note":"","data":["80168695 00C8"],"options":null},"Infinite Primary Weapon\\Player 4":{"note":"","data":["80168E05 00C8"],"options":null},"Infinite Shields\\Player 1":{"note":"","data":["801677AD 00C8"],"options":null},"Infinite Shields\\Player 2":{"note":"","data":["80167F1D 00C8"],"options":null},"Infinite Shields\\Player 3":{"note":"","data":["8016868D 00C8"],"options":null},"Infinite Shields\\Player 4":{"note":"","data":["80168DFD 00C8"],"options":null},"Infinite Turbos\\Player 1":{"note":"","data":["80167783 0003","80167787 0003"],"options":null},"Infinite Turbos\\Player 2":{"note":"","data":["80167EF3 0003","80167EF7 0003"],"options":null},"Infinite Turbos\\Player 3":{"note":"","data":["80168663 0003","80168667 0003"],"options":null},"Infinite Turbos\\Player 4":{"note":"","data":["80168DD3 0003","80168DD7 0003"],"options":null},"Mode Select":{"note":"","data":["8009A11F 00??"],"options":{"Anti-Gravity":"08","Anti-Gravity \u0026 Fish Eye Lens":"0A","Boulder":"01","Boulder \u0026 Fish Eye Lens":"03","Boulder \u0026 Wireframe":"11","Fish Eye Lens":"02","Ghost Mode":"40","Magnify":"04","Stealth Mode":"20","Ugly Mode":"80","Wireframe":"10"}},"{All Tracks and Bonus Cars Unlocked}":{"note":"","data":["80198520 0008","50000264 0000","8016B903 0001","50000264 0000","8016BA2F 0001","50000564 0000","8016BB5B 0001","8016BDBB 0001","50000404 0000","8016BDC3 0001","80162B8B 0003","8016BDD3 0003"],"options":null}},"F00F2D4E-340FAAF4-C:45":{"Freeze Time at 02:00":{"note":"","data":["811C479E 1C40"],"options":null},"Have All Groups Completed":{"note":"This gives you all Cups for all Groups.","data":["50002801 0000","801C48DC 0002"],"options":null},"Have Everything Unlocked":{"note":"This will unlock Cars, Races, Missions and the in-built Cheat Menu. This will also replace all the Zombies with Dinosaurs. To access Cheat menu options: Pause Game: Use Control Stick, to scroll the Cheat Menu. Press A, to activate Cheats","data":["801C49BD 000F"],"options":null},"Have Infinite\\Free Repairs":{"note":"","data":["8109DEC4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Frozen Opponents":{"note":"","data":["8109DF24 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Grip-O-Matic Tires":{"note":"","data":["8109E05C ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Hot Rod":{"note":"","data":["8109DE64 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Invunerability":{"note":"","data":["8109DEAC ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Mega Turbo":{"note":"","data":["8109DE4C ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Mine Dropping Ability":{"note":"","data":["8009E119 ????"],"options":{"Off":"0000","On":"0064"}},"Have Infinite\\Turbo":{"note":"","data":["8109DE34 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Turbo Nitrous":{"note":"","data":["8109DE7C ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Underwater Ability":{"note":"","data":["8109DEF4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Max Credits":{"note":"This is also Infinite until disabled","data":["811C481B FFFF"],"options":null},"Max Kills":{"note":"This will automatically Clear the stage if enabled and go back to the stage menu","data":["8109AC46 012C"],"options":null}},"F034001A-AE47ED06-C:45":{},"F03C24CA-C5237BCC-C:45":{"Aquadome\\Player 1\\Cant be Stunned":{"note":"","data":["801F1E3B 0000"],"options":null},"Aquadome\\Player 1\\Full Super Bar":{"note":"","data":["811F1E3A 0200"],"options":null},"Aquadome\\Player 1\\Infinite Energy":{"note":"","data":["801F1E33 00AA"],"options":null},"Aquadome\\Player 1\\No Energy":{"note":"","data":["801F1E33 0000"],"options":null},"Aquadome\\Player 2\\Cant be Stunned":{"note":"","data":["801F52CB 0000"],"options":null},"Aquadome\\Player 2\\Full Super Bar":{"note":"","data":["811F52DA 0200"],"options":null},"Aquadome\\Player 2\\Infinite Energy":{"note":"","data":["801F52D3 00AA"],"options":null},"Aquadome\\Player 2\\No Energy":{"note":"","data":["801F52D3 0000"],"options":null},"Backwash Bay\\Player 1\\Cant be Stunned":{"note":"","data":["801F258B 0000"],"options":null},"Backwash Bay\\Player 1\\Full Super Bar":{"note":"","data":["811F259A 0200"],"options":null},"Backwash Bay\\Player 1\\Infinite Energy":{"note":"","data":["801F2593 00AA"],"options":null},"Backwash Bay\\Player 1\\No Energy":{"note":"","data":["801F2593 0000"],"options":null},"Backwash Bay\\Player 2\\Cant be Stunned":{"note":"","data":["801F5A2B 0000"],"options":null},"Backwash Bay\\Player 2\\Full Super Bar":{"note":"","data":["811F5A3A 0200"],"options":null},"Backwash Bay\\Player 2\\Infinite Energy":{"note":"","data":["801F5A33 00AA"],"options":null},"Backwash Bay\\Player 2\\No Energy":{"note":"","data":["801F5A33 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Cant be Stunned":{"note":"","data":["801F2FDB 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Full Super Bar":{"note":"","data":["811F2FEA 0200"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Infinite Energy":{"note":"","data":["801F2FE3 00AA"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\No Energy":{"note":"","data":["801F2FE3 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Cant be Stunned":{"note":"","data":["801F647B 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Full Super Bar":{"note":"","data":["811F648A 0200"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Infinite Energy":{"note":"","data":["801F6483 00AA"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\No Energy":{"note":"","data":["801F6483 0000"],"options":null},"Candy Factory\\Player 1\\Cant be Stunned":{"note":"","data":["801F270B 0000"],"options":null},"Candy Factory\\Player 1\\Full Super Bar":{"note":"","data":["811F271A 0200"],"options":null},"Candy Factory\\Player 1\\Infinite Energy":{"note":"","data":["801F2713 00AA"],"options":null},"Candy Factory\\Player 1\\No Energy":{"note":"","data":["801F2713 0000"],"options":null},"Candy Factory\\Player 2\\Cant be Stunned":{"note":"","data":["801F5BAB 0000"],"options":null},"Candy Factory\\Player 2\\Full Super Bar":{"note":"","data":["811F5BBA 0200"],"options":null},"Candy Factory\\Player 2\\Infinite Energy":{"note":"","data":["801F5BB3 00AA"],"options":null},"Candy Factory\\Player 2\\No Energy":{"note":"","data":["801F5BB3 0000"],"options":null},"Clayribbean Cruise\\Player 1\\Cant be Stunned":{"note":"","data":["801F24FB 0000"],"options":null},"Clayribbean Cruise\\Player 1\\Full Super Bar":{"note":"","data":["811F250A 0200"],"options":null},"Clayribbean Cruise\\Player 1\\Infinite Energy":{"note":"","data":["801F2503 00AA"],"options":null},"Clayribbean Cruise\\Player 1\\No Energy":{"note":"","data":["801F2503 0000"],"options":null},"Clayribbean Cruise\\Player 2\\Cant be Stunned":{"note":"","data":["801F599B 0000"],"options":null},"Clayribbean Cruise\\Player 2\\Full Super Bar":{"note":"","data":["811F59AA 0200"],"options":null},"Clayribbean Cruise\\Player 2\\Infinite Energy":{"note":"","data":["801F59A3 00AA"],"options":null},"Clayribbean Cruise\\Player 2\\No Energy":{"note":"","data":["801F59A3 0000"],"options":null},"Extra Characters/Secret Options":{"note":"","data":["801A2B41 000F"],"options":null},"Freezing Fortress\\Player 1\\Cant be Stunned":{"note":"","data":["801F239B 0000"],"options":null},"Freezing Fortress\\Player 1\\Full Super Bar":{"note":"","data":["811F23AA 0200"],"options":null},"Freezing Fortress\\Player 1\\Infinite Energy":{"note":"","data":["801F23A3 00AA"],"options":null},"Freezing Fortress\\Player 1\\No Energy":{"note":"","data":["801F23A3 0000"],"options":null},"Freezing Fortress\\Player 2\\Cant be Stunned":{"note":"","data":["801F583B 0000"],"options":null},"Freezing Fortress\\Player 2\\Full Super Bar":{"note":"","data":["811F584A 0200"],"options":null},"Freezing Fortress\\Player 2\\Infinite Energy":{"note":"","data":["801F5843 00AA"],"options":null},"Freezing Fortress\\Player 2\\No Energy":{"note":"","data":["801F5843 0000"],"options":null},"Ghastly Graveyard\\Player 1\\Cant be Stunned":{"note":"","data":["801F262B 0000"],"options":null},"Ghastly Graveyard\\Player 1\\Full Super Bar":{"note":"","data":["811F263A 0200"],"options":null},"Ghastly Graveyard\\Player 1\\Infinite Energy":{"note":"","data":["801F2633 00AA"],"options":null},"Ghastly Graveyard\\Player 1\\No Energy":{"note":"","data":["801F2633 0000"],"options":null},"Ghastly Graveyard\\Player 2\\Cant be Stunned":{"note":"","data":["801F5ACB 0000"],"options":null},"Ghastly Graveyard\\Player 2\\Full Super Bar":{"note":"","data":["811F5ADA 0200"],"options":null},"Ghastly Graveyard\\Player 2\\Infinite Energy":{"note":"","data":["801F5AD3 00AA"],"options":null},"Ghastly Graveyard\\Player 2\\No Energy":{"note":"","data":["801F5AD3 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 1\\Cant be Stunned":{"note":"","data":["801F244B 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 1\\Full Super Bar":{"note":"","data":["811F245A 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 1\\Infinite Energy":{"note":"","data":["801F2453 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 1\\No Energy":{"note":"","data":["801F2453 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 2\\Cant be Stunned":{"note":"","data":["801F58EB 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 2\\Full Super Bar":{"note":"","data":["811F58FA 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 2\\Infinite Energy":{"note":"","data":["801F58F3 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 2\\No Energy":{"note":"","data":["801F58F3 0000"],"options":null},"Infinite Time To Choose Your Fighter":{"note":"","data":["81200BEC 03A7"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 1\\Cant be Stunned":{"note":"","data":["801F3BBB 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 1\\Full Super Bar":{"note":"","data":["811F3BCA 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 1\\Infinite Energy":{"note":"","data":["801F3BC3 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 1\\No Energy":{"note":"","data":["801F3BC3 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 2\\Cant be Stunned":{"note":"","data":["801F705B 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 2\\Full Super Bar":{"note":"","data":["811F706A 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 2\\Infinite Energy":{"note":"","data":["801F7063 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 2\\No Energy":{"note":"","data":["801F7063 0000"],"options":null},"Kooky Courtyard\\Player 1\\Cant be Stunned":{"note":"","data":["801F280B 0000"],"options":null},"Kooky Courtyard\\Player 1\\Full Super Bar":{"note":"","data":["811F281A 0200"],"options":null},"Kooky Courtyard\\Player 1\\Infinite Energy":{"note":"","data":["801F2813 00AA"],"options":null},"Kooky Courtyard\\Player 1\\No Energy":{"note":"","data":["801F2813 0000"],"options":null},"Kooky Courtyard\\Player 2\\Cant be Stunned":{"note":"","data":["801F5CAB 0000"],"options":null},"Kooky Courtyard\\Player 2\\Full Super Bar":{"note":"","data":["811F5CBA 0200"],"options":null},"Kooky Courtyard\\Player 2\\Infinite Energy":{"note":"","data":["801F5CB3 00AA"],"options":null},"Kooky Courtyard\\Player 2\\No Energy":{"note":"","data":["801F5CB3 0000"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 1\\Cant be Stunned":{"note":"","data":["801F233B 0000"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 1\\Full Super Bar":{"note":"","data":["811F234A 0200"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 1\\Infinite Energy":{"note":"","data":["801F2343 00AA"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 1\\No Energy":{"note":"","data":["801F2343 0000"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 2\\Cant be Stunned":{"note":"","data":["801F57DB 0000"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 2\\Full Super Bar":{"note":"","data":["811F57EA 0200"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 2\\Infinite Energy":{"note":"","data":["801F57E3 00AA"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 2\\No Energy":{"note":"","data":["801F57E3 0000"],"options":null},"Player 1 Character Modifier":{"note":"","data":["801A2B2F 00??"],"options":{"Blob":"01","Bonker":"02","Boogerman":"03","Dr. Kiln":"04","Earthworm Jim":"05","Houngan":"08","Icky Bod Clay":"09","Kung Pow":"0A","Sumo Santa":"0D","T-Hoppy":"0F","Taffy":"0E"}},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 1\\Cant be Stunned":{"note":"","data":["801F1B0B 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 1\\Full Super Bar":{"note":"","data":["811F1B1A 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 1\\Infinite Energy":{"note":"","data":["801F1B13 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 1\\No Energy":{"note":"","data":["801F1B13 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 2\\Cant be Stunned":{"note":"","data":["801F4FAB 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 2\\Full Super Bar":{"note":"","data":["811F4FBA 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 2\\Infinite Energy":{"note":"","data":["801F4FB3 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 2\\No Energy":{"note":"","data":["801F4FB3 0000"],"options":null},"Rubbage Reef\\Player 1\\Cant be Stunned":{"note":"","data":["801F241B 0000"],"options":null},"Rubbage Reef\\Player 1\\Full Super Bar":{"note":"","data":["811F242A 0200"],"options":null},"Rubbage Reef\\Player 1\\Infinite Energy":{"note":"","data":["801F2423 00AA"],"options":null},"Rubbage Reef\\Player 1\\No Energy":{"note":"","data":["801F2423 0000"],"options":null},"Rubbage Reef\\Player 2\\Cant be Stunned":{"note":"","data":["801F58BB 0000"],"options":null},"Rubbage Reef\\Player 2\\Full Super Bar":{"note":"","data":["811F58CA 0200"],"options":null},"Rubbage Reef\\Player 2\\Infinite Energy":{"note":"","data":["801F58C3 00AA"],"options":null},"Rubbage Reef\\Player 2\\No Energy":{"note":"","data":["801F58C3 0000"],"options":null},"Rubbage Room\\Player 1\\Cant be Stunned":{"note":"","data":["801F464B 0000"],"options":null},"Rubbage Room\\Player 1\\Full Super Bar":{"note":"","data":["811F465A 0200"],"options":null},"Rubbage Room\\Player 1\\Infinite Energy":{"note":"","data":["801F4653 00AA"],"options":null},"Rubbage Room\\Player 1\\No Energy":{"note":"","data":["801F4653 0000"],"options":null},"Rubbage Room\\Player 2\\Cant be Stunned":{"note":"","data":["801F7AEB 0000"],"options":null},"Rubbage Room\\Player 2\\Full Super Bar":{"note":"","data":["811F7AFA 0200"],"options":null},"Rubbage Room\\Player 2\\Infinite Energy":{"note":"","data":["801F7AF3 00AA"],"options":null},"Rubbage Room\\Player 2\\No Energy":{"note":"","data":["801F7AF3 0000"],"options":null},"Santa's Toy Factory\\Player 1\\Cant be Stunned":{"note":"","data":["801F2C3B 0000"],"options":null},"Santa's Toy Factory\\Player 1\\Full Super Bar":{"note":"","data":["811F2C4A 0200"],"options":null},"Santa's Toy Factory\\Player 1\\Infinite Energy":{"note":"","data":["801F2C43 00AA"],"options":null},"Santa's Toy Factory\\Player 1\\No Energy":{"note":"","data":["801F2C43 0000"],"options":null},"Santa's Toy Factory\\Player 2\\Cant be Stunned":{"note":"","data":["801F60DB 0000"],"options":null},"Santa's Toy Factory\\Player 2\\Full Super Bar":{"note":"","data":["811F60EA 0200"],"options":null},"Santa's Toy Factory\\Player 2\\Infinite Energy":{"note":"","data":["801F60E3 00AA"],"options":null},"Santa's Toy Factory\\Player 2\\No Energy":{"note":"","data":["801F60E3 0000"],"options":null},"Stage Modifier":{"note":"","data":["801A2B2B 00??"],"options":{"Aquadome":"19","Backwash Bay":"16","Boogerhenge":"15","Camp Claynaveral":"02","Candy Factory":"00","Claynaveral Hangar":"01","Clayribbean Cruise":"11","Fiery Furnace":"0F","Freezing Fortress":"08","Ghastly Graveyard":"05","Grotto Gulch":"0A","Happy Harry's Hut":"07","Kiln's Hideout":"0E","Kiln's Laboratory":"0D","Kooky Courtyard":"13","Mudville Mansion":"04","Outhouse":"03","Refuse Room":"09","Research Room":"10","Rubbage Reef":"0C","Rubbage Room":"0B","Santa's Toy Factory":"14","Santa's Workship":"12","Spooky Spire":"06","Tribal Tower":"18","Tureen Toilet":"17"}},"Tribal Tower\\Player 1\\Cant be Stunned":{"note":"","data":["801F1BAB 0000"],"options":null},"Tribal Tower\\Player 1\\Full Super Bar":{"note":"","data":["811F1BBA 0200"],"options":null},"Tribal Tower\\Player 1\\Infinite Energy":{"note":"","data":["801F1BB3 00AA"],"options":null},"Tribal Tower\\Player 1\\No Energy":{"note":"","data":["801F1BB3 0000"],"options":null},"Tribal Tower\\Player 2\\Cant be Stunned":{"note":"","data":["801F504B 0000"],"options":null},"Tribal Tower\\Player 2\\Full Super Bar":{"note":"","data":["811F505A 0200"],"options":null},"Tribal Tower\\Player 2\\Infinite Energy":{"note":"","data":["801F5053 00AA"],"options":null},"Tribal Tower\\Player 2\\No Energy":{"note":"","data":["801F5053 0000"],"options":null}},"F050746C-247B820B-C:45":{"Access\\All Bikes \u0026 Tracks":{"note":"","data":["800A77D5 0063"],"options":null},"Access\\Infinite \u0026 All Weapons":{"note":"","data":["50000E02 0000","811B8D7A 0505"],"options":null},"Always 1st":{"note":"","data":["810D7856 0000"],"options":null},"Always Have\\Max Cash":{"note":"","data":["810D6A7A FFFF"],"options":null},"Always Have\\Weapon":{"note":"","data":["801C00B3 00??"],"options":{"Bace":"0C","Banana":"09","Bat":"04","Billie Club":"05","Cattle Prod":"0A","Chain":"0E","Fists":"01","Monkey Wrench":"08","Nunchuk":"0D","Pool Cue":"07","Sledge Hammer":"06","Spiked Club":"02","Taser":"0B","Tiring Iron":"03"}},"Infinite\\Damage":{"note":"","data":["801C0D17 0002"],"options":null},"Infinite\\Health\\To Bike":{"note":"","data":["811B8A38 42F0","811B8A3C 42F0"],"options":null},"Infinite\\Health\\To Character":{"note":"","data":["811BFE10 4489","811BFE12 8000"],"options":null}},"F1850C35-ACE07912-C:45":{"Always Place 1st":{"note":"","data":["802083F1 0001"],"options":null},"Infinite\\Lives":{"note":"","data":["800BAFD2 0009"],"options":null},"Infinite\\Specials On Pickup":{"note":"","data":["80208401 0005"],"options":null}},"F255D6F1-B65D6728-C:4A":{"Access All Boards \u0026 Characters":{"note":"","data":["800500C1 000C"],"options":null},"All Street Work Levels Unlocked":{"note":"","data":["50007801 0000","80050170 00??"],"options":{"Courses unlocked":"01","Courses unlocked with A rank":"05","Courses unlocked with B rank":"04","Courses unlocked with C rank":"03","Courses unlocked with S rank":"06"}},"Class Score Select":{"note":"","data":["8016609E 00??"],"options":{"Class A":"64","Class B":"40","Class C":"20","Class S":"FF"}},"Coin Perfect Select":{"note":"this is for Coin Mode to get Perfect Coin Collection Score straight away when you enter the level","data":["801660B3 00??"],"options":{"Giant House Level 1":"6E","Giant House Level 2":"77","Giant House Level 3":"72","Green Park Level 1":"14","Green park Level 2":"1A","Green park Level 3":"2B","Lost Forest Level 1":"4A","Lost Forest Level 2":"59","Lost Forest Level 3":"80","Snow Festival 64 Levels 1 2 \u0026 3":"7D","Sunset Island Level 1":"6F","Sunset Island Level 2":"74","Sunset Island Level 3":"81"}},"Infinite Time\\Attack Time Time 000000":{"note":"","data":["811137EA 0000"],"options":null},"Infinite Time\\Street Work \u0026 Coin":{"note":"","data":["801137E9 0028"],"options":null},"Infinite Time\\Time Attack":{"note":"","data":["801137EB 0000"],"options":null},"Infinite Turbo\\Player 1":{"note":"","data":["80166019 0009"],"options":null},"Infinite Turbo\\Player2":{"note":"","data":["80167991 0009"],"options":null},"Maxed Out Turbo Bar":{"note":"","data":["811656E8 429F","80166017 0051"],"options":null},"Options\\Camera Type Modifier":{"note":"","data":["810500A6 00??"],"options":{"Roll Off Far":"05","Roll Off Mid":"04","Roll Off Near":"03","Roll On Far":"02","Roll On Mid":"01","Roll On Near":"00"}},"Options\\DJ Function Modifier":{"note":"","data":["810500AC 00??"],"options":{"DJ Function Off":"00","DJ Function On":"01"}},"Options\\Music Modifier":{"note":"","data":["800500A9 00??"],"options":{"BGM Off":"00","BGM On":"FF"}},"Options\\Sound Effects Modifier":{"note":"","data":["810500AA 00??"],"options":{"SE Off":"00","SE On":"FF"}}},"F2A653CB-60633B3B-C:45":{"Found All Letters":{"note":"","data":["810ACBA2 000C"],"options":null},"Have No Letters":{"note":"Keep you kid busy for hours!!!","data":["810ACBA2 0000"],"options":null},"Infinite Strikes":{"note":"","data":["810A760A 0000"],"options":null}},"F35D5335-B7667CB7-C:45":{"Have All Items":{"note":"","data":["50000501 0000","80389C4A 0001","50000301 0000","80389C51 0001","80389C5A 0001","80389C5B 0001","80389C5D 0001","50000E01 0000","80389C60 0001"],"options":null},"Have Exp Points":{"note":"","data":["80389C49 0063"],"options":null},"Have Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C3F 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C45 0001","81389C46 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C3E 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C49 0063"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C48 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the F9 button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C90 ????","89389C92 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CED 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C88 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C88 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C3D 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C42 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"F35D5F95-8AFE3D69-C:45":{"Have All Items":{"note":"","data":["50000501 0000","80389C4A 0001","50000301 0000","80389C51 0001","80389C5A 0001","80389C5B 0001","80389C5D 0001","50000E01 0000","80389C60 0001"],"options":null},"Have Exp Points":{"note":"","data":["80389C49 0063"],"options":null},"Have Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C3F 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C45 0001","81389C46 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C3E 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C49 0063"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C48 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the GS button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C90 ????","89389C92 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CED 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C88 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C88 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C3D 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C42 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"F3C5BF9B-160F33E2-C:45":{"All Masks":{"note":"Press GS To Activate All Masks","data":["891F1210 8780"],"options":null},"Have All\\Crates":{"note":"","data":["810C70F8 7FFF","810C70FA FFFF","810C70FC FFFF","810C70FE FFFF","810C7100 FFFF","800C7102 00FF"],"options":null},"Have All\\Levels":{"note":"","data":["811F1200 FFFF","811F1202 FFFF","811F1201 03E7","811F1203 03E7"],"options":null},"Have All\\Pirate Cages":{"note":"","data":["801F1142 0050","811F11F0 FFFF","811F11F2 FFFF","811F11F4 FFFF","811F11F6 FFFF","811F11F8 00FF","811F11FA FFFF"],"options":null},"Have All\\Yellow Lums":{"note":"","data":["50006401 0000","800C7108 00FF","50001901 0000","800C70BD 00FF","811F1182 0005","50005702 0000","811F1188 FFFF"],"options":null},"Infinite\\Oxygen":{"note":"","data":["810F4B90 4396"],"options":null},"Open Map":{"note":"","data":["810C70F0 FFFF","810C70F2 FFFF"],"options":null},"Start with Full Health":{"note":"","data":["811BC64C 001E"],"options":null},"Widescreen":{"note":"","data":["81099E10 2402","81099E12 0190","81099E34 2402","81099E36 00E0","81089BC4 03E0","81089BC6 0008","81089BC8 2402","81089BCA 0001"],"options":null}},"F3DD35BA-4152E075-C:45":{"Widescreen":{"note":"","data":["81091DFC 3C07","81091DFE 3FE3","8102499C 2402"],"options":null}},"F41B6343-C10661E6-C:50":{"Away Team Scores":{"note":"","data":["801A9579 00??"],"options":{"0 Goal":"00","1 Goal":"01","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08"}},"Home Team Scores":{"note":"","data":["801A86FD 00??"],"options":{"0 Goal":"00","1 Goal":"01","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08"}},"Infinite player creation points":{"note":"","data":["D03E0CF2 0001","803E0CF2 0063"],"options":null}},"F43B45BA-2F0E9B6F-C:4A":{},"F478D8B3-9716DD6D-C:50":{"Cheat Select":{"note":"","data":["8109ACBE ????"],"options":{"All Of The Above":"0FFF","All Pick-Ups Are Grapple":"0040","All Pick-Ups Are Green":"0010","All Pick-Ups Are Red":"0004","All Pick-Ups Are Yellow":"0008","Maintain Speed Off Track":"0001","No Chassis":"0400","No Driver":"0800","No Wheels":"0200","Pick-Ups Are Maximum":"0080","Reversed Rocket Racer Run Track":"0020","Rocket Cars":"0002","Turbo Mode":"0100"}},"Have All Tracks and Building Pieces":{"note":"","data":["812576D4 FFFF","812576D6 FFFF"],"options":null}},"F4CBE92C-B392ED12-C:50":{"999 Kills":{"note":"","data":["80163BFF 0040","80163C01 0040"],"options":null},"Have All Medals":{"note":"","data":["50001801 0000","8017A9D8 0006"],"options":null},"Infinite\\Armor\\Falco":{"note":"","data":["80174187 00FF"],"options":null},"Infinite\\Armor\\Peppy":{"note":"","data":["8017418F 00FF"],"options":null},"Infinite\\Armor\\Slippy":{"note":"","data":["8017418B 00FF"],"options":null},"Infinite\\Dual Blue Lasers":{"note":"","data":["81163C13 0002"],"options":null},"Infinite\\Energy (Except Fox))":{"note":"","data":["80179A27 00FF","80179A23 00FF","80179A1F 00FF"],"options":null},"Infinite\\Hyper Laser":{"note":"","data":["81163C13 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["80163C09 0063"],"options":null},"Level Select":{"note":"","data":["8017A39F 00??"],"options":{"Aquas":"0D","Area 6":"03","Bolse":"11","Corneria":"00","Corneria (Multi)":"14","Fortuna":"0E","Glitch":"04","Katina":"10","Macbeth":"0B","Meteo":"01","Sector X":"02","Sector Y":"05","Sector Z":"12","Solar":"07","Titania":"0C","Training Mode Level":"0A","Venom 1":"06","Venom 2":"09","Venom With Starwolf":"13","Zoness":"08"}},"Loads O' Hits":{"note":"","data":["80163C03 00FF"],"options":null},"Unlimited\\Boost\\Player 1":{"note":"","data":["8113E6FC 0000","8113E6FE 0000","811415DC 0000","811415DE 0000"],"options":null},"Unlimited\\Smart Bombs":{"note":"","data":["80179F0B 0063"],"options":null}},"F5237301-99E3EE93-C:50":{"1000 Garibs":{"note":"","data":["80291297 0064"],"options":null},"All levels unlocked":{"note":"At the main menu, where it says: Start, practice, options, \u0026 time trial, hold D-pad up, then the glove, playing-with-the-ball icon, will jump down into the lower left corner of the screen, then press the A button, and a level select screen will be available with all ordinary and boss levels, etc. available","data":["80298CFD 00A0"],"options":null},"Cheat Modifier\\1":{"note":"","data":["80298CFE 00??"],"options":{"Big ball":"02","Both of the above":"03","Low gravity":"01"}},"Cheat Modifier\\2":{"note":"","data":["80298CFF 00??"],"options":{"All of the above":"7B","Call ball":"02","Control ball":"20","Infinite energy":"40","Locate caribs":"01","Power ball":"10","Unlimited lives":"08"}},"Have Spell\\Death Spell":{"note":"","data":["812912A8 03E8"],"options":null},"Have Spell\\Enlarge Spell":{"note":"","data":["812912B4 03E8"],"options":null},"Have Spell\\Speed Up Spell":{"note":"","data":["812912B8 03E8"],"options":null},"Have Spell\\Sticky Fingers Spell":{"note":"","data":["812912B2 03E8"],"options":null},"Infinite\\99 Lives":{"note":"","data":["8029129B 0063"],"options":null},"Infinite\\Energy":{"note":"","data":["8029129F 0003"],"options":null},"Super Jump":{"note":"","data":["D02AFA14 0080","801EE771 0013"],"options":null},"[100% Complete]\\Save Slot 1":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBA37 0007","50000801 0000","801EBA28 00FF"],"options":null},"[100% Complete]\\Save Slot 2":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBA53 0007","50000801 0000","801EBA44 00FF"],"options":null},"[100% Complete]\\Save Slot 3":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBA6F 0007","50000801 0000","801EBA60 00FF"],"options":null},"[100% Complete]\\Save Slot 4":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBA8B 0007","50000801 0000","801EBA7C 00FF"],"options":null},"[100% Complete]\\Save Slot 5":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBAA7 0007","50000801 0000","801EBA98 00FF"],"options":null},"[100% Complete]\\Save Slot 6":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBAC3 0007","50000801 0000","801EBAB4 00FF"],"options":null}},"F5360FBE-2BF1691D-C:50":{"Access\\Always have Big Laser":{"note":"Use only one of these codes at a time!","data":["802F706F FFFF"],"options":null},"Access\\Enemy Health Modifer attach Activator":{"note":"Use only one of these codes at a time!","data":["812F7062 03E8"],"options":null},"Access\\Full Energy for Lazer":{"note":"Use only one of these codes at a time!","data":["812F706E 0064"],"options":null},"Access\\Gold Helmet":{"note":"Use only one of these codes at a time!","data":["8015D2F7 0003"],"options":null},"Access\\Infinite Health":{"note":"Use only one of these codes at a time!","data":["802F706A 0999"],"options":null},"Access\\Infinite Impact Oil":{"note":"Use only one of these codes at a time!","data":["812F706A 0154"],"options":null},"Access\\Infinite Ryo Impact Fighting":{"note":"Use only one of these codes at a time!","data":["812F7066 0005"],"options":null},"Access\\Infinite Ryo Impact Running":{"note":"Use only one of these codes at a time!","data":["812F70EA 270F"],"options":null},"Access\\Infy Ryo":{"note":"Use only one of these codes at a time!","data":["802F7667 0999"],"options":null},"Access\\Japanese Sombrero":{"note":"Use only one of these codes at a time!","data":["8015D2F7 0001"],"options":null},"Access\\Metal Helmet":{"note":"Use only one of these codes at a time!","data":["8015D2F7 0002"],"options":null},"Access\\Move Lock":{"note":"","data":["8116AE6A 0000","8120D84A 0000"],"options":null},"Access\\Mystical Ninja Skating team":{"note":"","data":["8120D620 4E20","8120DEF4 4E20","8116AE78 4E20"],"options":null},"Access\\Skating Team V2":{"note":"","data":["8120D620 4E20","8120DEF4 4E20","8116AE78 4E20","8116AE6A 0001","8120D84A 0001"],"options":null},"Have\\Bazooka":{"note":"","data":["8015D3CB 0001"],"options":null},"Have\\Blue Item":{"note":"","data":["8015D422 0001"],"options":null},"Have\\Blue Sausage":{"note":"","data":["8015D417 0001"],"options":null},"Have\\Brown Item":{"note":"","data":["8015D402 0001"],"options":null},"Have\\Brown Round Item":{"note":"","data":["8015D40F 0001"],"options":null},"Have\\Chain Pipe":{"note":"","data":["8015D3BF 0002"],"options":null},"Have\\Ebisumaru":{"note":"","data":["8015D3A3 0001"],"options":null},"Have\\Fire Cracker Bomb":{"note":"","data":["8015D3C4 0001"],"options":null},"Have\\Flute":{"note":"","data":["8015D3DB 0001"],"options":null},"Have\\Gold Item":{"note":"","data":["8015D41C 0001"],"options":null},"Have\\Gold Key":{"note":"","data":["8015D412 0001"],"options":null},"Have\\Kunai of Severe Cold":{"note":"","data":["8015D3D4 0001"],"options":null},"Have\\Magic Flying":{"note":"","data":["8015D3F4 0001"],"options":null},"Have\\Magic Mermaid":{"note":"","data":["8015D3FB 0001"],"options":null},"Have\\Magic Mini Ebisu":{"note":"","data":["8015D3F2 0001"],"options":null},"Have\\Magic Sudden Impact":{"note":"","data":["8015D3EC 0001"],"options":null},"Have\\Meat Saw Hammer":{"note":"","data":["8015D3C0 0001"],"options":null},"Have\\Medal of Flames":{"note":"","data":["8015D3DF 0001"],"options":null},"Have\\Pink Item":{"note":"","data":["8015D41B 0001"],"options":null},"Have\\Sasuke Character":{"note":"","data":["8015D3A4 0001"],"options":null},"Have\\Shell":{"note":"","data":["8015D3FC 0001"],"options":null},"Have\\Yae Character":{"note":"","data":["8015D3AB 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8015D2E7 0028"],"options":null},"Infinite\\Lives":{"note":"","data":["8015D2EF 000A"],"options":null},"Infinite\\Ryo":{"note":"","data":["8015D2EA 0010"],"options":null},"Keep Blue Fish":{"note":"","data":["8015D303 0003","50000404 0000","8015D2F3 0003"],"options":null}},"F5363349-DBF9D21B-C:45":{"Have Extra Characters (Gouriki \u0026 Reiji)":{"note":"","data":["8009E3DF 00FF"],"options":null},"Player 1\\Character Modifier":{"note":"","data":["80105001 00??"],"options":{"Azami":"00","Gouriki":"08","Hikari":"0B","Invisible Fighter":"0C","Kai":"03","Kaoru":"07","Kengon":"05","Kyeya":"06","Miki":"02","Reiji":"09","Sakai":"04","Serina":"01","Yami":"0A"}},"Player 1\\Infinite Energy":{"note":"","data":["81105026 03E8"],"options":null},"Player 1\\Needs 1 Round to Win":{"note":"","data":["D009E3F4 0000","8009E3F4 0001"],"options":null},"Player 1\\Never Wins":{"note":"","data":["8009E3F4 0000"],"options":null},"Player 1\\No Energy":{"note":"","data":["81105026 0000"],"options":null},"Player 2\\Character Modifier":{"note":"","data":["8011B399 00??"],"options":{"Azami":"00","Gouriki":"08","Hikari":"0B","Invisible Fighter":"0C","Kai":"03","Kaoru":"07","Kengon":"05","Kyeya":"06","Miki":"02","Reiji":"09","Sakai":"04","Serina":"01","Yami":"0A"}},"Player 2\\Infinite Energy":{"note":"","data":["8111B3BE 03E8"],"options":null},"Player 2\\Needs 1 Round to Win":{"note":"","data":["D009E3F5 0000","8009E3F5 0001"],"options":null},"Player 2\\No Energy":{"note":"","data":["8111B3BE 0000"],"options":null},"Player 2\\P2 Never Wins":{"note":"","data":["8009E3F5 0000"],"options":null}},"F568D51E-7E49BA1E-C:45":{"Carry 20 Bombs At A Time":{"note":"","data":["800AEE0F 0014"],"options":null},"Have\\Pumped up Red Remote Bombs":{"note":"","data":["802AC653 0004"],"options":null},"Infinite\\Credits":{"note":"","data":["802AC62B 0009"],"options":null},"Infinite\\Energy\\Player 1":{"note":"","data":["800AEE07 0002"],"options":null},"Infinite\\Energy\\Player 2":{"note":"","data":["800AEECF 0002"],"options":null},"Infinite\\Energy\\Player 3":{"note":"","data":["800AEF97 0002"],"options":null},"Infinite\\Energy\\Player 4":{"note":"","data":["800AF05F 0002"],"options":null},"Infinite\\Gems":{"note":"","data":["802AC62F 0063"],"options":null},"Infinite\\Lives":{"note":"","data":["802AC627 0063"],"options":null},"Infinite\\Time":{"note":"","data":["802AC643 0001"],"options":null},"Invincible\\Player 1":{"note":"","data":["800AEE01 0001"],"options":null},"Widescreen":{"note":"Narrows Sprites","data":["812B0288 C255","812B0290 43BA","81233BB2 C0F0","D1049DA6 0062","81049DA6 0071","D1049DA6 0050","81049DA6 0064","D1049D9A E148","81049D98 3F15","D1049D9A E148","81049E2E 00CB","D1049D9A E148","81049E20 3F15","D1049D9A E148","81049DAC 4228","D1049D9A E148","81049E34 4228","D10469A4 356C","81046976 0000","D10469A4 356C","810470D2 008C","D10469A4 356C","810470EE 00B4","812A53F8 1969","81242652 0555","812A0782 00A0","812A0796 0420","812428E2 0555","8124286E 0007","812A076A 010B","812A0766 002C","81241F0E 0555","812A07E2 00A0","812A07F6 01FA","812A080A 02BA","812A081E 037A","812A0832 0438","812421BA 0555","812421DA 0007","812A079E 002C","812A07A2 0033","812A07A6 003A","812A07AA 0082","812A07AE 00B2","812A07B2 00E2","812A07B6 0112","81228F4C 080A","81228F4E 9198","812A4660 C644","812A4662 0010","812A4664 3C04","812A4666 3F40","812A4668 4484","812A466A 3000","812A466C 4606","812A466E 5282","812A4670 4606","812A4672 2102","812A4674 3C04","812A4676 4220","812A4678 4484","812A467A 3000","812A467C 4606","812A467E 5280","812A4680 4606","812A4682 2100","812A4684 0808","812A4686 A3D5","812A4688 4406","812A468A 2000"],"options":null}},"F5C5866D-052713D9-C:45":{"All Characters\\Have Max\\Acceleration\\Player 1":{"note":"","data":["50000C0A 0000","80197FF6 0064"],"options":null},"All Characters\\Have Max\\Acceleration\\Player 2":{"note":"","data":["5000120A 0000","801980AA 0064"],"options":null},"All Characters\\Have Max\\Armor\\Player 1":{"note":"","data":["5000120A 0000","80197FF8 0064"],"options":null},"All Characters\\Have Max\\Armor\\Player 2":{"note":"","data":["5000120A 0000","801980AC 0064"],"options":null},"All Characters\\Have Max\\Attributes\\Player 1":{"note":"","data":["5000120A 0000","81197FF6 6464","5000120A 0000","81197FF8 6464"],"options":null},"All Characters\\Have Max\\Attributes\\Player 2":{"note":"","data":["5000120A 0000","811980AA 6464","5000120A 0000","811980AC 6464"],"options":null},"All Characters\\Have Max\\Speed\\Player 1":{"note":"","data":["5000120A 0000","80197FF7 0064"],"options":null},"All Characters\\Have Max\\Speed\\Player 2":{"note":"","data":["5000120A 0000","801980AB 0064"],"options":null},"All Characters\\Have Max\\Target Avoidance\\Player 1":{"note":"","data":["5000120A 0000","80197FF9 0064"],"options":null},"All Characters\\Have Max\\Target Avoidance\\Player 2":{"note":"","data":["5000120A 0000","801980AD 0064"],"options":null},"All Quests Complete\\Player 1":{"note":"","data":["5000120A 0000","81197FF0 01FF"],"options":null},"All Quests Complete\\Player 2":{"note":"","data":["5000120A 0000","811980A4 01FF"],"options":null}},"F611F4BA-C584135C-C:4A":{},"F63B89CE-4582D57D-C:49":{"Always Have\\50 pieces of corn":{"note":"","data":["801E2761 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E2750 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["811E274E 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E2762 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E2755 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E2760 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D008FFA1 0010","811E26C6 1000","D008FFA1 0010","811E26D6 1000"],"options":null},"No Music":{"note":"","data":["801DD906 0000"],"options":null},"Start with Berry Weapon":{"note":"","data":["801E2757 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Subtitles On":{"note":"","data":["801DDB7B 00??"],"options":{"Off":"00","On":"01"}},"Unlock All Levels":{"note":"","data":["81099E30 000F"],"options":null}},"F7F52DB8-2195E636-C:4A":{},"F7FE28F6-C3F2ACC3-C:45":{"Cheat Menu":{"note":"","data":["80336593 0001"],"options":null},"Infinite Credits":{"note":"","data":["81336582 0005","8133658E 0004"],"options":null},"Unlimited Time":{"note":"","data":["8033F31B 0063"],"options":null}},"F82DD377-8C3FB347-C:58":{"100.000 Sponsor Credits \u0026 950 Championship Points In Support Van":{"note":"You Also Have Access To All Cars, Tracks \u0026 Extra Features","data":["80031433 00F3"],"options":null},"Always 1st":{"note":"","data":["80031F93 0001"],"options":null},"Freeze Timer":{"note":"","data":["80031F9F 0000"],"options":null},"Infinite Cash":{"note":"","data":["803A418E 4000"],"options":null},"Max Sponsor Credits":{"note":"","data":["803A6702 0010","803A6704 0001"],"options":null},"No Cones Hit":{"note":"In ARSG Rally School","data":["80031FC3 0000","8003239B 0000"],"options":null},"No Damage Or Failures":{"note":"","data":["80031427 0001"],"options":null},"No Navigator":{"note":"","data":["80031EF7 0000"],"options":null}},"F908CA4C-36464327-C:45":{"Player 1\\1-Hit Death":{"note":"","data":["D01D3484 0078","801D3484 0001"],"options":null},"Player 1\\Fast\\Jump Walk":{"note":"","data":["801D347C 0001"],"options":null},"Player 1\\Fast\\Punch Kick":{"note":"","data":["801D347E 0010"],"options":null},"Player 1\\Fight Gargos Immediately":{"note":"","data":["8012834B 000A"],"options":null},"Player 1\\Fulgore\\Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3478 0020","801D3479 0090","801D34C5 0092","801D3527 005E"],"options":null},"Player 1\\Fulgore\\Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3478 0023","801D3479 00F0","801D34C5 0080","801D3527 00AF"],"options":null},"Player 1\\Infinite Energy":{"note":"","data":["801D3484 0069"],"options":null},"Player 1\\Play As":{"note":"","data":["802C8CB8 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 1\\Slow Jump Walk":{"note":"","data":["801D347D 0050"],"options":null},"Player 1\\Spinal Always Has All Skulls":{"note":"","data":["801D3523 0006"],"options":null},"Player 1\\Undefeated Players Scroll By Quickly":{"note":"","data":["802C8CE8 0007"],"options":null},"Player 1\\Untouchable":{"note":"","data":["801D34D4 000A"],"options":null},"Player 1\\Wins Score":{"note":"","data":["8012830A 00FF"],"options":null},"Player 2\\Fast\\Jump Walk":{"note":"","data":["801D357C 0001"],"options":null},"Player 2\\Fast\\Punch Kick":{"note":"","data":["801D357E 0010"],"options":null},"Player 2\\Fulgore Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3578 0020","801D3579 0090","801D35C5 0092","801D3527 005E"],"options":null},"Player 2\\Fulgore Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3578 0023","801D3579 00F0","801D35C5 0080","801D3527 00AF"],"options":null},"Player 2\\Infinite Energy":{"note":"","data":["801D3584 0078"],"options":null},"Player 2\\Play As":{"note":"","data":["8004EA9D 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 2\\Slow\\Jump Walk":{"note":"","data":["801D357D 0050"],"options":null},"Player 2\\Slow\\Punch Kick":{"note":"","data":["801D357F 0050"],"options":null},"Player 2\\Spinal Always Has All Skulls":{"note":"","data":["801D3623 0006"],"options":null},"Player 2\\Untouchable":{"note":"","data":["801D34D5 000A"],"options":null},"Unlock All Options":{"note":"","data":["8012834C 0006"],"options":null}},"F9D411E3-7CB29BC0-C:45":{"Always Low Temp":{"note":"","data":["810E4F98 0000","810E4F9A 0000"],"options":null},"Auto-Pilot Always On Turbo (Original Excitebike Mode)":{"note":"","data":["810E3142 19AA"],"options":null},"Earthquake Mode":{"note":"","data":["810D7010 3AD0"],"options":null},"Fast\\Movement (Drones)":{"note":"","data":["800D9D55 00A0"],"options":null},"Fast\\Movement (Player)":{"note":"","data":["800D9D65 00AF"],"options":null},"Max Stunt Points":{"note":"","data":["810E4D18 0098","810E4D1A 967F"],"options":null},"No\\Collision Drivers":{"note":"","data":["800D9D34 0040"],"options":null},"No\\Overheating":{"note":"","data":["800CA984 00C3"],"options":null},"Power Turbo":{"note":"","data":["800CA99C 0040","800CA99D 00E0"],"options":null},"Slow\\Movement (Drones)":{"note":"","data":["800D9D55 0060"],"options":null},"Slow\\Movement (Player)":{"note":"","data":["800D9D65 0060"],"options":null},"Steering Control":{"note":"","data":["800C9E50 0040"],"options":null},"Super Speed For All":{"note":"","data":["800CA9A0 0040","800CA9A1 0070"],"options":null},"Unlock\\Difficulties \u0026 All Special Tracks":{"note":"","data":["810F2D50 FFFF"],"options":null},"Unlock\\Silver \u0026 Gold Cup":{"note":"","data":["810F2D4E 0003"],"options":null}},"FA5A3DFF-B4C9CDB9-C:45":{"Aquadome\\Player 1\\Cant be Stunned":{"note":"","data":["80193D1F 0000"],"options":null},"Aquadome\\Player 1\\Full Super Bar":{"note":"","data":["81193D2E 0200"],"options":null},"Aquadome\\Player 1\\Infinite Health":{"note":"","data":["80193D27 00AA"],"options":null},"Aquadome\\Player 1\\No Health":{"note":"","data":["80193D27 0000"],"options":null},"Aquadome\\Player 2\\Cant be Stunned":{"note":"","data":["8019720F 0000"],"options":null},"Aquadome\\Player 2\\Full Super Bar":{"note":"","data":["8119721E 0200"],"options":null},"Aquadome\\Player 2\\Infinite Health":{"note":"","data":["80197217 00AA"],"options":null},"Aquadome\\Player 2\\No Health":{"note":"","data":["80197217 0000"],"options":null},"Backwash Bay\\Player 1\\Cant be Stunned":{"note":"","data":["8019447F 0000"],"options":null},"Backwash Bay\\Player 1\\Full Super Bar":{"note":"","data":["8119448E 0200"],"options":null},"Backwash Bay\\Player 1\\Infinite Health":{"note":"","data":["80194487 00AA"],"options":null},"Backwash Bay\\Player 1\\No Health":{"note":"","data":["80194487 0000"],"options":null},"Backwash Bay\\Player 2\\Cant be Stunned":{"note":"","data":["8019796F 0000"],"options":null},"Backwash Bay\\Player 2\\Full Super Bar":{"note":"","data":["8119797E 0200"],"options":null},"Backwash Bay\\Player 2\\Infinite Health":{"note":"","data":["80197977 00AA"],"options":null},"Backwash Bay\\Player 2\\No Health":{"note":"","data":["80197977 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Cant be Stunned":{"note":"","data":["80194ECF 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Full Super Bar":{"note":"","data":["81194EDE 0200"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Infinite Health":{"note":"","data":["80194ED7 00AA"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\No Health":{"note":"","data":["80194ED7 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Cant be Stunned":{"note":"","data":["801983BF 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Full Super Bar":{"note":"","data":["811983CE 0200"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Infinite Health":{"note":"","data":["801983C7 00AA"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\No Health":{"note":"","data":["801983C7 0000"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 1\\Cant be Stunned":{"note":"","data":["8019422F 0000"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 1\\Full Super Bar":{"note":"","data":["8119423E 0200"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 1\\Infinite Health":{"note":"","data":["80194237 00AA"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 1\\No Health":{"note":"","data":["80194237 0000"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 2\\Cant be Stunned":{"note":"","data":["8019771F 0000"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 2\\Full Super Bar":{"note":"","data":["8119772E 0200"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 2\\Infinite Health":{"note":"","data":["80197727 00AA"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 2\\No Health":{"note":"","data":["80197727 0000"],"options":null},"Candy Factory\\Player 1\\Cant be Stunned":{"note":"","data":["801945FF 0000"],"options":null},"Candy Factory\\Player 1\\Full Super Bar":{"note":"","data":["8119460E 0200"],"options":null},"Candy Factory\\Player 1\\Infinite Health":{"note":"","data":["80194607 00AA"],"options":null},"Candy Factory\\Player 1\\No Health":{"note":"","data":["80194607 0000"],"options":null},"Candy Factory\\Player 2\\Cant be Stunned":{"note":"","data":["80197AEF 0000"],"options":null},"Candy Factory\\Player 2\\Full Super Bar":{"note":"","data":["81197AFE 0200"],"options":null},"Candy Factory\\Player 2\\Infinite Health":{"note":"","data":["80197AF7 00AA"],"options":null},"Candy Factory\\Player 2\\No Health":{"note":"","data":["80197AF7 0000"],"options":null},"Clayribbean Cruise\\Player 1\\Cant be Stunned":{"note":"","data":["80193F3F 0000"],"options":null},"Clayribbean Cruise\\Player 1\\Full Super Bar":{"note":"","data":["81193F4E 0200"],"options":null},"Clayribbean Cruise\\Player 1\\Infinite Health":{"note":"","data":["80193F47 00AA"],"options":null},"Clayribbean Cruise\\Player 1\\No Health":{"note":"","data":["80193F47 0000"],"options":null},"Clayribbean Cruise\\Player 2\\Cant be Stunned":{"note":"","data":["8019742F 0000"],"options":null},"Clayribbean Cruise\\Player 2\\Full Super Bar":{"note":"","data":["8119743E 0200"],"options":null},"Clayribbean Cruise\\Player 2\\Infinite Health":{"note":"","data":["80197437 00AA"],"options":null},"Clayribbean Cruise\\Player 2\\No Health":{"note":"","data":["80197437 0000"],"options":null},"Dog House\\Player 1\\Cant be Stunned":{"note":"","data":["8019653F 0000"],"options":null},"Dog House\\Player 1\\Full Super Bar":{"note":"","data":["8119654E 0200"],"options":null},"Dog House\\Player 1\\Infinite Health":{"note":"","data":["80196547 00AA"],"options":null},"Dog House\\Player 1\\No Health":{"note":"","data":["80196547 0000"],"options":null},"Dog House\\Player 2\\Cant be Stunned":{"note":"","data":["80199A2F 0000"],"options":null},"Dog House\\Player 2\\Full Super Bar":{"note":"","data":["81199A3E 0200"],"options":null},"Dog House\\Player 2\\Infinite Health":{"note":"","data":["80199A37 00AA"],"options":null},"Dog House\\Player 2\\No Health":{"note":"","data":["80199A37 0000"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 1\\Cant be Stunned":{"note":"","data":["80195AAF 0000"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 1\\Full Super Bar":{"note":"","data":["81195ABE 0200"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 1\\Infinite Health":{"note":"","data":["80195AB7 00AA"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 1\\No Health":{"note":"","data":["80195AB7 0000"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 2\\Cant be Stunned":{"note":"","data":["80198F9F 0000"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 2\\Full Super Bar":{"note":"","data":["81198FAE 0200"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 2\\Infinite Health":{"note":"","data":["80198FA7 00AA"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 2\\No Health":{"note":"","data":["80198FA7 0000"],"options":null},"Freezing Fortress\\Player 1\\Cant be Stunned":{"note":"","data":["8019428F 0000"],"options":null},"Freezing Fortress\\Player 1\\Full Super Bar":{"note":"","data":["8119429E 0200"],"options":null},"Freezing Fortress\\Player 1\\Infinite Health":{"note":"","data":["80194297 00AA"],"options":null},"Freezing Fortress\\Player 1\\No Health":{"note":"","data":["80194297 0000"],"options":null},"Freezing Fortress\\Player 2\\Cant be Stunned":{"note":"","data":["8019777F 0000"],"options":null},"Freezing Fortress\\Player 2\\Full Super Bar":{"note":"","data":["8119778E 0200"],"options":null},"Freezing Fortress\\Player 2\\Infinite Health":{"note":"","data":["80197787 00AA"],"options":null},"Freezing Fortress\\Player 2\\No Health":{"note":"","data":["80197787 0000"],"options":null},"Ghastly Graveyard\\Player 1\\Cant be Stunned":{"note":"","data":["8019451F 0000"],"options":null},"Ghastly Graveyard\\Player 1\\Full Super Bar":{"note":"","data":["8119452E 0200"],"options":null},"Ghastly Graveyard\\Player 1\\Infinite Health":{"note":"","data":["80194527 00AA"],"options":null},"Ghastly Graveyard\\Player 1\\No Health":{"note":"","data":["80194527 0000"],"options":null},"Ghastly Graveyard\\Player 2\\Cant be Stunned":{"note":"","data":["80197A0F 0000"],"options":null},"Ghastly Graveyard\\Player 2\\Full Super Bar":{"note":"","data":["81197A1E 0200"],"options":null},"Ghastly Graveyard\\Player 2\\Infinite Health":{"note":"","data":["80197A17 00AA"],"options":null},"Ghastly Graveyard\\Player 2\\No Health":{"note":"","data":["80197A17 0000"],"options":null},"Kooky Courtyard\\Player 1\\Cant be Stunned":{"note":"","data":["801946FF 0000"],"options":null},"Kooky Courtyard\\Player 1\\Full Super Bar":{"note":"","data":["8119470E 0200"],"options":null},"Kooky Courtyard\\Player 1\\Infinite Health":{"note":"","data":["80194707 00AA"],"options":null},"Kooky Courtyard\\Player 1\\No Health":{"note":"","data":["80194707 0000"],"options":null},"Kooky Courtyard\\Player 2\\Cant be Stunned":{"note":"","data":["80197BEF 0000"],"options":null},"Kooky Courtyard\\Player 2\\Full Super Bar":{"note":"","data":["81197BFE 0200"],"options":null},"Kooky Courtyard\\Player 2\\Infinite Health":{"note":"","data":["80197BF7 00AA"],"options":null},"Kooky Courtyard\\Player 2\\No Health":{"note":"","data":["80197BF7 0000"],"options":null},"Other Codes\\Debug Mode":{"note":"With this code, Press C-Up \u0026 C-Down to pick your stage.","data":["810AA1A6 0001"],"options":null},"Other Codes\\Difficulty Modifier":{"note":"","data":["810AE40A 00??"],"options":{"Cookie":"00","Dude":"03","Easy":"01","Normal":"02","Psycho":"04"}},"Other Codes\\Have Booger Man":{"note":"","data":["810AA12A 0001"],"options":null},"Other Codes\\Have Earth Worm Jim":{"note":"","data":["810AA0E2 0001"],"options":null},"Other Codes\\Have High Five":{"note":"","data":["810AA0BE 0001"],"options":null},"Other Codes\\Have Sumo Santa":{"note":"","data":["810AA106 0001"],"options":null},"Other Codes\\Health Meters Modifier":{"note":"","data":["800AE5EF 00??"],"options":{"Off":"00","On":"01"}},"Other Codes\\Portraits Modifier":{"note":"","data":["800AE613 00??"],"options":{"Off":"00","On":"01"}},"Other Codes\\Spillits Modifier":{"note":"","data":["800AE447 00??"],"options":{"Normal":"00","Psycho":"01"}},"Other Codes\\Stun Meters Modifier":{"note":"","data":["800AE5FB 00??"],"options":{"Off":"00","On":"01"}},"Other Codes\\Super Meters Modifier":{"note":"","data":["800AE607 00??"],"options":{"Off":"00","On":"01"}},"Other Codes\\Throws \u0026 Holds Modifier":{"note":"","data":["800AE42F 00??"],"options":{"Off":"01","On":"00"}},"Other Codes\\Time Limit Modifier":{"note":"","data":["800AE423 00??"],"options":{"Off":"01","On":"00"}},"Other Codes\\VS. Arena Select Modifier":{"note":"","data":["800AE43B 00??"],"options":{"Normal":"01","Random":"00"}},"Rubbage Reef Code\\Player 1\\Cant be Stunned":{"note":"","data":["8019430F 0000"],"options":null},"Rubbage Reef Code\\Player 1\\Full Super Bar":{"note":"","data":["8119431E 0200"],"options":null},"Rubbage Reef Code\\Player 1\\Infinite Health":{"note":"","data":["80194317 00AA"],"options":null},"Rubbage Reef Code\\Player 1\\No Health":{"note":"","data":["80194317 0000"],"options":null},"Rubbage Reef Code\\Player 2\\Cant be Stunned":{"note":"","data":["801977FF 0000"],"options":null},"Rubbage Reef Code\\Player 2\\Full Super Bar":{"note":"","data":["8119780E 0200"],"options":null},"Rubbage Reef Code\\Player 2\\Infinite Health":{"note":"","data":["80197807 00AA"],"options":null},"Rubbage Reef Code\\Player 2\\No Health":{"note":"","data":["80197807 0000"],"options":null},"Santa's Toy Factory\\Player 1\\Cant be Stunned":{"note":"","data":["80194B2F 0000"],"options":null},"Santa's Toy Factory\\Player 1\\Full Super Bar":{"note":"","data":["81194B3E 0200"],"options":null},"Santa's Toy Factory\\Player 1\\Infinite Health":{"note":"","data":["80194B37 00AA"],"options":null},"Santa's Toy Factory\\Player 1\\No Health":{"note":"","data":["80194B37 0000"],"options":null},"Santa's Toy Factory\\Player 2\\Cant be Stunned":{"note":"","data":["8019801F 0000"],"options":null},"Santa's Toy Factory\\Player 2\\Full Super Bar":{"note":"","data":["8119802E 0200"],"options":null},"Santa's Toy Factory\\Player 2\\Infinite Health":{"note":"","data":["80198027 00AA"],"options":null},"Santa's Toy Factory\\Player 2\\No Health":{"note":"","data":["80198027 0000"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 1\\Cant be Stunned":{"note":"","data":["801939FF 0000"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 1\\Full Super Bar":{"note":"","data":["81193A0E 0200"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 1\\Infinite Health":{"note":"","data":["80193A07 00AA"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 1\\No Health":{"note":"","data":["80193A07 0000"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 2\\Cant be Stunned":{"note":"","data":["80196EEF 0000"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 2\\Full Super Bar":{"note":"","data":["81196EFE 0200"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 2\\Infinite Health":{"note":"","data":["80196EF7 00AA"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 2\\No Health":{"note":"","data":["80196EF7 0000"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 1\\Cant be Stunned":{"note":"","data":["8019433F 0000"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 1\\Full Super Bar":{"note":"","data":["8119434E 0200"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 1\\Infinite Health":{"note":"","data":["80194347 00AA"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 1\\No Health":{"note":"","data":["80194347 0000"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 2\\Cant be Stunned":{"note":"","data":["8019782F 0000"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 2\\Full Super Bar":{"note":"","data":["8119783E 0200"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 2\\Infinite Health":{"note":"","data":["80197837 00AA"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 2\\No Health":{"note":"","data":["80197837 0000"],"options":null},"Tribal Tower\\Player 1\\Cant be Stunned":{"note":"","data":["80193A9F 0000"],"options":null},"Tribal Tower\\Player 1\\Full Super Bar":{"note":"","data":["81193AAE 0200"],"options":null},"Tribal Tower\\Player 1\\Infinite Health":{"note":"","data":["80193AA7 00AA"],"options":null},"Tribal Tower\\Player 1\\No Health":{"note":"","data":["80193AA7 0000"],"options":null},"Tribal Tower\\Player 2\\Cant be Stunned":{"note":"","data":["80196F8F 0000"],"options":null},"Tribal Tower\\Player 2\\Full Super Bar":{"note":"","data":["81196F9E 0200"],"options":null},"Tribal Tower\\Player 2\\Infinite Health":{"note":"","data":["80196F97 00AA"],"options":null},"Tribal Tower\\Player 2\\No Health":{"note":"","data":["80196F97 0000"],"options":null},"VS. Mode\\Player 1\\Cant be Stunned":{"note":"","data":["8019195F 0000"],"options":null},"VS. Mode\\Player 1\\Full Super Bar":{"note":"","data":["8119916E 0200"],"options":null},"VS. Mode\\Player 1\\Infinite Health":{"note":"","data":["80199167 00AA"],"options":null},"VS. Mode\\Player 1\\No Health":{"note":"","data":["80199167 0000"],"options":null},"VS. Mode\\Player 2\\Cant be Stunned":{"note":"","data":["80194E4F 0000"],"options":null},"VS. Mode\\Player 2\\Full Super Bar":{"note":"","data":["81194E5E 0200"],"options":null},"VS. Mode\\Player 2\\Infinite Health":{"note":"","data":["80194E57 00AA"],"options":null},"VS. Mode\\Player 2\\No Health":{"note":"","data":["80194E57 0000"],"options":null}},"FA8C4571-BBE7F9C0-C:45":{"Always 1st \u0026 final time 00:00.00":{"note":"All Levels","data":["50000301 0000","801CE609 0000"],"options":null},"Difficulty Select":{"note":"","data":["8007BF00 00??"],"options":{"Amateur":"00","Intermediate":"01","Mirror Mode":"03","Professional":"02"}},"Frantic Finale\\Colorado\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019185B 0063"],"options":null},"Frantic Finale\\Colorado\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191882 0063"],"options":null},"Frantic Finale\\Hawaii\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["80191F3B 0063"],"options":null},"Frantic Finale\\Hawaii\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191F62 0063"],"options":null},"Frantic Finale\\Oregon\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018E90B 0063"],"options":null},"Frantic Finale\\Oregon\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E932 0063"],"options":null},"Frantic Finale\\Texas\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018F0AB 0063"],"options":null},"Frantic Finale\\Texas\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018F0D2 0063"],"options":null},"Freewayphobia\\Chicago\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["80191F0B 0063"],"options":null},"Freewayphobia\\Chicago\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191F32 0063"],"options":null},"Freewayphobia\\Dakota\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018D0DB 0063"],"options":null},"Freewayphobia\\Dakota\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018D102 0063"],"options":null},"Freewayphobia\\New York\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018F3DB 0063"],"options":null},"Freewayphobia\\New York\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018F402 0063"],"options":null},"Freewayphobia\\Seattle\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018FCBB 0063"],"options":null},"Freewayphobia\\Seattle\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FCE2 0063"],"options":null},"Level Select":{"note":"","data":["801875A9 00??"],"options":{"Contest":"07","Frantic Finale":"04","Freewayphobia":"02","Motor Way Mania":"01","Options":"08","Practice":"06","Time Trial":"05","Traffic Troubles":"00","Vitory Vehicles":"03"}},"Motor Way Mania\\Alaska\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018E34B 0063"],"options":null},"Motor Way Mania\\Alaska\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E372 0063"],"options":null},"Motor Way Mania\\Las Vegas\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801929DB 0063"],"options":null},"Motor Way Mania\\Las Vegas\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80192A02 0063"],"options":null},"Motor Way Mania\\Los Angeles\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018DBBB 0063"],"options":null},"Motor Way Mania\\Los Angeles\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018DBE2 0063"],"options":null},"Motor Way Mania\\Philadelphia\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019385B 0063"],"options":null},"Motor Way Mania\\Philadelphia\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80193882 0063"],"options":null},"Play As":{"note":"","data":["800D3081 00??"],"options":{"Daisy Duck":"01","Dewey":"07","Donald Duck":"05","Goofy":"02","Huey":"06","Louie":"08","Lugwig Von Drake":"09","Mickey Mouse":"00","Minnie Mouse":"04","Pete":"03"}},"Re-name Characters\\Daisy\\Letter 1":{"note":"","data":["801BE5A6 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 2":{"note":"","data":["801BE5A7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 3":{"note":"","data":["801BE5A8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 4":{"note":"","data":["801BE5A9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 5":{"note":"","data":["801BE5AA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 1":{"note":"","data":["801BE5BC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 2":{"note":"","data":["801BE5BD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 3":{"note":"","data":["801BE5BE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 4":{"note":"","data":["801BE5BF 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 5":{"note":"","data":["801BE5C0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 1":{"note":"","data":["801BE59F 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 2":{"note":"","data":["801BE5A0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 3":{"note":"","data":["801BE5A1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 4":{"note":"","data":["801BE5A2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 5":{"note":"","data":["801BE5A3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 6":{"note":"","data":["801BE5A4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 1":{"note":"","data":["801BE5AC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 2":{"note":"","data":["801BE5AD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 3":{"note":"","data":["801BE5AE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 4":{"note":"","data":["801BE5AF 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 5":{"note":"","data":["801BE5B0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 1":{"note":"","data":["801BE5B7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 2":{"note":"","data":["801BE5B8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 3":{"note":"","data":["801BE5B9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 4":{"note":"","data":["801BE5BA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 1":{"note":"","data":["801BE5C2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 2":{"note":"","data":["801BE5C3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 3":{"note":"","data":["801BE5C4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 4":{"note":"","data":["801BE5C5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 5":{"note":"","data":["801BE5C6 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 1":{"note":"","data":["801BE5C8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 2":{"note":"","data":["801BE5C9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 3":{"note":"","data":["801BE5CA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 4":{"note":"","data":["801BE5CB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 5":{"note":"","data":["801BE5CC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 6":{"note":"","data":["801BE5CD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 1":{"note":"","data":["801BE591 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 2":{"note":"","data":["801BE592 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 3":{"note":"","data":["801BE593 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 4":{"note":"","data":["801BE594 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 5":{"note":"","data":["801BE595 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 6":{"note":"","data":["801BE596 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 1":{"note":"","data":["801BE598 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 2":{"note":"","data":["801BE599 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 3":{"note":"","data":["801BE59A 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 4":{"note":"","data":["801BE59B 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 5":{"note":"","data":["801BE59C 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 6":{"note":"","data":["801BE59D 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 1":{"note":"","data":["801BE5B2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 2":{"note":"","data":["801BE5B3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 3":{"note":"","data":["801BE5B4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 4":{"note":"","data":["801BE5B5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Traffic Troubles\\Grand Canyon\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019311B 0063"],"options":null},"Traffic Troubles\\Grand Canyon\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80193142 0063"],"options":null},"Traffic Troubles\\Indianapolis\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018E75B 0063"],"options":null},"Traffic Troubles\\Indianapolis\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E782 0063"],"options":null},"Traffic Troubles\\New Mexico\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018FD2B 0063"],"options":null},"Traffic Troubles\\New Mexico\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FD52 0063"],"options":null},"Traffic Troubles\\San Fransisco\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["80191A2B 0063"],"options":null},"Traffic Troubles\\San Fransisco\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191A52 0063"],"options":null},"Unlock Everything":{"note":"This will unlock all characters, tracks, mirror mode, all in-game cheats, postcards, pluto's collar and give you all Trophies for every track and difficulties. To have this cheat save to mempak, enable it and then go into the Options Menu and disable the cheat. Go to the Wide-Screen Settings and Change it to Wide-Screen [16.9] and then the B button to get back to Wide-Screen Settings, now go back into Wide-Screen [16.9] and change it back to Normal [4.3].and press the B button until you come back to the main Options Menu.Close the game and load it again to see everything saved to the Mempak and unlocked.","data":["800D3128 008F","800D3129 0094","800D312A 0003","800D312C 0001","800D312F 0080","50000502 0000","800D3130 0009","50000502 0000","800D3131 0024","800D313A 0015","800D313B 007F","800D313C 0001","800D313D 00FF","800D313E 0004","800D313F 0022"],"options":null},"Victory Vehicles\\Everglades\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018FAEB 0063"],"options":null},"Victory Vehicles\\Everglades\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FB12 0063"],"options":null},"Victory Vehicles\\Malibu\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019157B 0063"],"options":null},"Victory Vehicles\\Malibu\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801915A2 0063"],"options":null},"Victory Vehicles\\Washington DC\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019752B 0063"],"options":null},"Victory Vehicles\\Washington DC\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80197552 0063"],"options":null},"Victory Vehicles\\Yellowstone\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018D38B 0063"],"options":null},"Victory Vehicles\\Yellowstone\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018D3B2 0063"],"options":null}},"FB3C48D0-8D28F69F-C:50":{"Level Select":{"note":"","data":["80046333 00??"],"options":{"Level 1":"01","Level 10":"0A","Level 11":"0B","Level 12":"0C","Level 13":"0D","Level 14":"0E","Level 15":"0F","Level 16":"10","Level 17":"11","Level 18":"12","Level 19":"13","Level 2":"02","Level 20":"14","Level 21":"15","Level 22":"16","Level 23":"17","Level 24":"18","Level 25":"19","Level 3":"03","Level 4":"04","Level 5":"05","Level 6":"06","Level 7":"07","Level 8":"08","Level 9":"09"}},"Stop Timer From Counting Down (All Levels)":{"note":"","data":["8101D4E0 2400"],"options":null}},"FBB9F1FA-6BF88689-C:45":{"Infinite\\Atoms":{"note":"","data":["81159286 FFFF"],"options":null},"Infinite\\Lives":{"note":"","data":["80026A67 0063"],"options":null},"Infinite\\Quarks":{"note":"","data":["81159282 FFFF"],"options":null}},"FC70E272-08FFE7AA-C:50":{"0 Enemies To Kill In Big Celebration Parade":{"note":"","data":["803E4DBB 0000"],"options":null},"All levels open":{"note":"","data":["50002001 0000","803F7ED0 0001"],"options":null},"Always Raining":{"note":"","data":["803F2E5F 0005"],"options":null},"Always Snowing":{"note":"","data":["803F2E5D 0005"],"options":null},"Always in 2nd Camera Angle":{"note":"","data":["803F2B89 0001"],"options":null},"Debug Mode":{"note":"","data":["803F651F 0001"],"options":null},"Enable Secret Mini Game":{"note":"","data":["803F652D 0001"],"options":null},"Great Score":{"note":"","data":["813F2E22 03E7"],"options":null},"High Score In Evo's Escape":{"note":"","data":["813E4DDA 7FFF"],"options":null},"Infinite Health\\2 Mouse,Hyena":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DFB51 0080"],"options":null},"Infinite Health\\A. Desert Rat, Vulture, Box, Kang":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DEFD5 0080"],"options":null},"Infinite Health\\Bunny, Racing Turtle":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DF3A9 0080"],"options":null},"Infinite Health\\Cool Cod":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E4039 0080"],"options":null},"Infinite Health\\Desert Fox":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E161D 0080"],"options":null},"Infinite Health\\EVO":{"note":"","data":["801DE085 0080"],"options":null},"Infinite Health\\Elephant":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DE82D 0080"],"options":null},"Infinite Health\\Fox, Pen, Husky, Tortoise Tank":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DFF25 0080"],"options":null},"Infinite Health\\King Rat":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E19F1 0080"],"options":null},"Infinite Health\\Lion, Camel":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E02F9 0080"],"options":null},"Infinite Health\\Rocket Dog":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DEC01 0080"],"options":null},"Infinite Health\\Rocket Husky":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E1DC5 0080"],"options":null},"Infinite Health\\Spit Dog, Bear, King Pen, FB EVO":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DE459 0080"],"options":null},"Infinite Skill\\A\\King Penguin":{"note":"Only Use Infinite Skill A Codes For Animals You Need","data":["801DE5EC 0004"],"options":null},"Infinite Skill\\A\\King Rat":{"note":"Only Use Infinite Skill A Codes For Animals You Need","data":["801E1B84 0004"],"options":null},"Infinite Skill\\A\\Power Mouse":{"note":"Only Use Infinite Skill A Codes For Animals You Need","data":["801DFCE4 0004"],"options":null},"Infinite Skill\\A\\Rocket Dog":{"note":"Only Use Infinite Skill A Codes For Animals You Need","data":["801E3A24 0004"],"options":null},"Infinite Skill\\B\\Armed Desert Rat":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DF16C 0004"],"options":null},"Infinite Skill\\B\\Bear":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DE5F0 0004"],"options":null},"Infinite Skill\\B\\Boxing Kangeroo":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DF16C 0004"],"options":null},"Infinite Skill\\B\\Bunny, Racing Turtle":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DF540 0004"],"options":null},"Infinite Skill\\B\\Desert Fox":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E17B4 0004"],"options":null},"Infinite Skill\\B\\Hyena":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DF914 0004"],"options":null},"Infinite Skill\\B\\Lion":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E0490 0004"],"options":null},"Infinite Skill\\B\\Power Pen, Husky, Fox, Tort Tank":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E00BC 0004"],"options":null},"Infinite Skill\\B\\Rocket Dog":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E3A28 0004"],"options":null},"Infinite Skill\\B\\Rocket Husky":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E1F5C 0004"],"options":null},"Title Screen":{"note":"Press the Pause Button to takes you to Title Screen","data":["803F6799 0000"],"options":null}},"FC74D475-9A0278AB-C:45":{"1 Win Needed\\Player 1":{"note":"","data":["D00BAD0F 0000","800BAD0F 0001"],"options":null},"1 Win Needed\\Player 2":{"note":"","data":["D00BB04F 0000","800BB04F 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["810BACDC 42C8"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["810BB01C 42C8"],"options":null},"Infinite Time":{"note":"","data":["810E69AC 42F0"],"options":null},"Max Chemical X\\Player 1":{"note":"","data":["800BAD28 0003"],"options":null},"Max Chemical X\\Player 2":{"note":"","data":["800BB068 0003"],"options":null},"Never Win\\Player 1":{"note":"","data":["800BAD0F 0000"],"options":null},"Never Win\\Player 2":{"note":"","data":["800BB04F 0000"],"options":null},"No Chemical X\\Player 1":{"note":"","data":["800BAD28 0000"],"options":null},"No Chemical X\\Player 2":{"note":"","data":["800BB068 0000"],"options":null},"No Health\\Player 1":{"note":"","data":["810BACDC 0000"],"options":null},"No Health\\Player 2":{"note":"","data":["810BB01C 0000"],"options":null}},"FC7797BF-4A95E83C-C:50":{"Access All Bonus Cars":{"note":"","data":["50000302 0000","80098583 0001","50000302 0000","8009858B 0001"],"options":null},"Always 1st Place":{"note":"","data":["810A5F30 0001"],"options":null},"Infinite Time":{"note":"","data":["810CE72E 03E7"],"options":null},"Max Points":{"note":"","data":["810CE702 010A"],"options":null},"Speedometer Select":{"note":"","data":["810CE7C2 00??"],"options":{"KM/H":"00","MPH":"01"}},"Start On Lap Modifier":{"note":"","data":["D00A5F35 0000","810A5F34 00??"],"options":{"Lap 1":"01","Lap 2":"02","Lap 3":"03","Lap 4":"04","Lap 5":"06","Lap 6":"06","Last Lap from Start":"07","Normal":"00"}},"Track Direction Unlocked (All Levels)":{"note":"","data":["800A4131 0003"],"options":null}},"FCBCCB21-72903C6B-C:45":{"Ebisumaru\\Automatically Complete Ebisumaru's Training":{"note":"","data":["803B52F4 0008"],"options":null},"Ebisumaru\\Have\\Magic Mini Ebisu":{"note":"","data":["8015C6F3 0001"],"options":null},"Ebisumaru\\Have\\Meat Saw Hammer":{"note":"","data":["8015C6C3 0001"],"options":null},"Ebisumaru\\Have\\Windup Camera":{"note":"","data":["8015C6D3 0001"],"options":null},"Ebisumaru\\Saw Hammer Modifier":{"note":"","data":["8015C6B3 00??"],"options":{"Gold Saw Hammer":"02","Normal Saw Hammer":"00","Silver Saw Hammer":"01"}},"Goemon\\D-Pad Left To Charge Laser":{"note":"","data":["D00C7D3A 0002","802F706F 0064"],"options":null},"Goemon\\D-Pad Up To Refill Oil":{"note":"","data":["D0067D3A 0008","812F706A 03E7"],"options":null},"Goemon\\Have\\Chain Pipe":{"note":"","data":["8015C6BF 0002"],"options":null},"Goemon\\Have\\Magic Sudden Impact":{"note":"","data":["8015C6EF 0001"],"options":null},"Goemon\\Have\\Medal of Flames":{"note":"","data":["8015C6DF 0001"],"options":null},"Goemon\\Maximum Money":{"note":"","data":["812F70EA 03E7"],"options":null},"Goemon\\Pipe Modifier":{"note":"","data":["8015C6AF 00??"],"options":{"Gold Pipe":"02","Normal Pipe":"00","Silver Pipe":"01"}},"Goemon\\Robot Boss' Has No Health":{"note":"","data":["812F7062 0000"],"options":null},"Have\\Blue Fish":{"note":"","data":["8015C723 0001"],"options":null},"Have\\Blue Sausage":{"note":"","data":["8015C717 0001"],"options":null},"Have\\Brown Item":{"note":"","data":["8015C703 0001"],"options":null},"Have\\Brown Round Item":{"note":"","data":["8015C70F 0001"],"options":null},"Have\\Gold Fish":{"note":"","data":["8015C71F 0001"],"options":null},"Have\\Gold Key":{"note":"","data":["8015C713 0001"],"options":null},"Have\\Pink Fish":{"note":"","data":["8015C71B 0001"],"options":null},"Have\\Silver Fortune Doll":{"note":"","data":["8015C707 0001"],"options":null},"Have\\Triton Shell":{"note":"","data":["8015C6FF 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8015C5E7 0028"],"options":null},"Infinite\\Lives":{"note":"","data":["8015C5EF 0009"],"options":null},"Infinite\\Money":{"note":"","data":["8115C5EA 270F"],"options":null},"Max Heart Containers":{"note":"","data":["8015C5E3 0027"],"options":null},"Play As":{"note":"","data":["8015C5DF 00??"],"options":{"Ebisumaru":"01","Goemon":"00","Sasuke":"02","Yae":"03"}},"Press\\L To Levitate":{"note":"","data":["D00C7D3B 0020","8116A044 4000"],"options":null},"Press\\R To Use Chargeable Weapon":{"note":"","data":["D00C7D3B 0010","8120C896 005D"],"options":null},"Sasuke\\Have\\Fire Cracker Bomb":{"note":"","data":["8015C6C7 0001"],"options":null},"Sasuke\\Have\\Kunai of Severe Cold":{"note":"","data":["8015C6D7 0001"],"options":null},"Sasuke\\Have\\Magic Flying":{"note":"","data":["8015C6F7 0001"],"options":null},"Sasuke\\Kunai Modifier":{"note":"","data":["8015C6B7 00??"],"options":{"2 Kunai's":"01","Gold Kunai":"02","Normal Kunai":"00"}},"Widescreen":{"note":"Some Textboxes Too Small","data":["81017F2A 3FE3"],"options":null},"Yae\\Have\\Bazooka":{"note":"","data":["8015C6DB 0001"],"options":null},"Yae\\Have\\Flute":{"note":"","data":["8015C6CB 0001"],"options":null},"Yae\\Have\\Magic Mermaid":{"note":"","data":["8015C6FB 0001"],"options":null},"Yae\\Katana Modifier":{"note":"","data":["8015C6BB 00??"],"options":{"Gold Katana":"02","Normal Katana":"00","Silver Katana":"01"}}},"FCE0D799-65316C54-C:45":{"Infinite\\Armor\\Player 1":{"note":"","data":["8011D467 0064"],"options":null},"Infinite\\Armor\\Player 2":{"note":"","data":["8011D46B 0064"],"options":null},"Infinite\\Bombs\\Player 1":{"note":"","data":["8011D46F 0003"],"options":null},"Infinite\\Bombs\\Player 2":{"note":"","data":["8011D473 0003"],"options":null},"Level 11 Vulcan Cannon\\Player 1":{"note":"","data":["801239B3 000A"],"options":null},"Level 11 Vulcan Cannon\\Player 2":{"note":"","data":["801239D3 000A"],"options":null},"Press L For Rapid Fire Select\\Player 1":{"note":"","data":["D011BE01 0020","8011D497 00??"],"options":{"On Flak":"14","On Nuke \u0026 Laser":"28"}},"Press L For Rapid Fire Select\\Player 2":{"note":"","data":["D011BE09 0020","8011D49B 00??"],"options":{"On Flak":"14","On Nuke \u0026 Laser":"28"}}},"FD73F775-9724755A-C:50":{"Enable All Cheats":{"note":"Go into Options \u0026 then Magic Codes. Then Code list to turn off \u0026 on what you want.","data":["800DFE2C 001F","50000301 0000","800DFE2D 00FF"],"options":null},"Fifty Frames":{"note":"Identical location to the NTSC address","data":["80079A2B 0003"],"options":null},"Have All\\50 Balloons":{"note":"","data":["8020807D 0032"],"options":null},"Have All\\Control Drumstick \u0026 Adventure Two mode unlocked":{"note":"","data":["801264DC 0003","801264DF 0003","801264F2 0003","801264F3 0008"],"options":null},"Have All\\Keys":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80207E69 001F"],"options":null},"Have All\\None-Adventure tracks completed":{"note":"","data":["50001204 0000","80207F87 0007","50000904 0000","80207FDF 0007","80207E68 0007","80207E6A 0007","80207E6B 0007","80207E6C 000F","80207E6D 00FF"],"options":null},"Have All\\T.T. Amulets":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80207E77 0004"],"options":null},"Have All\\T.T. time trial races beaten":{"note":"","data":["80207E76 0004"],"options":null},"Have All\\Trophies":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80207E6E 0007","80207E6F 00FF"],"options":null},"Have All\\Trophy Adventure races unlocked":{"note":"","data":["50000502 0000","8020807E 0007"],"options":null},"Widescreen":{"note":"","data":["81066006 3FE3","81066156 3FE3","810661BE 3FE3","81126204 3FCE"],"options":null}},"FDA245D2-A74A3D47-C:45":{"All Tracks Unlocked":{"note":"","data":["8019436E 0008","50000264 0000","80167747 0001","50000264 0000","80167873 0001","50000564 0000","8016799F 0001"],"options":null},"Bike Modifier\\Player 1":{"note":"","data":["80167C3F 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 2":{"note":"","data":["80167C8B 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 3":{"note":"","data":["80167CD7 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 4":{"note":"","data":["80167D23 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Extra Bikes Unlocked":{"note":"","data":["80167C13 0001","80167C17 0003"],"options":null},"Extra Levels Unlocked":{"note":"","data":["80167C0B 0001","80167C0F 0001"],"options":null},"Infinite Primary Weapon\\Player 1":{"note":"","data":["801635FD 00C8"],"options":null},"Infinite Primary Weapon\\Player 2":{"note":"","data":["80163D6D 00C8"],"options":null},"Infinite Primary Weapon\\Player 3":{"note":"","data":["801644DD 00C8"],"options":null},"Infinite Primary Weapon\\Player 4":{"note":"","data":["80164C4D 00C8"],"options":null},"Infinite Shields\\Player 1":{"note":"","data":["801635F5 00C8"],"options":null},"Infinite Shields\\Player 2":{"note":"","data":["80163D65 00C8"],"options":null},"Infinite Shields\\Player 3":{"note":"","data":["801644D5 00C8"],"options":null},"Infinite Shields\\Player 4":{"note":"","data":["80164C45 00C8"],"options":null},"Infinite Turbos\\Player 1":{"note":"","data":["801635CB 0003","801635CF 0003"],"options":null},"Infinite Turbos\\Player 2":{"note":"","data":["80163D3B 0003","80163D3F 0003"],"options":null},"Infinite Turbos\\Player 3":{"note":"","data":["801644AB 0003","801644AF 0003"],"options":null},"Infinite Turbos\\Player 4":{"note":"","data":["80164C1B 0003","80164C1F 0003"],"options":null},"Mode Select":{"note":"","data":["80095F6F 00??"],"options":{"Anti-Gravity":"08","Anti-Gravity \u0026 Fish Eye Lens":"0A","Boulder":"01","Boulder \u0026 Fish Eye Lens":"03","Boulder \u0026 Wireframe":"11","Fish Eye Lens":"02","Ghost Mode":"40","Magnify":"04","Stealth Mode":"20","Ugly Mode":"80","Wireframe":"10"}}},"FE94E570-E4873A9C-C:44":{"Have 1 Star\\Abdul":{"note":"","data":["80307333 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["8030732F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80307332 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80307331 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80307334 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80307330 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["8030732E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80307335 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80307336 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["80209881 0000","802047A3 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802047A7 0000","8020B749 0000"],"options":null},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EF57B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0209737 0000","80209737 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020B5FF 0000","8020B5FF 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810ADADC 3F80"],"options":null}},"FEE97010-4E94A9A0-C:50":{"Access All\\Cars,Tracks \u0026 Golg Trophies":{"note":"","data":["50000402 0000","81043AA0 FFFF"],"options":null},"Access All\\Platinum Trophies":{"note":"","data":["8102F70C FFFF","8102F70E FFFF"],"options":null},"Access\\Galage '88 UFO Car":{"note":"","data":["810E2C20 0028"],"options":null},"Always 1st":{"note":"","data":["810569B4 0001"],"options":null},"Always Engine Class S":{"note":"","data":["81043AB0 0000"],"options":null},"Easy Mode":{"note":"","data":["81057B10 0001"],"options":null},"Easy Win":{"note":"","data":["810569BA 0007"],"options":null},"Freeze Lap Timer":{"note":"Select Car Attack, And You'll Have All The Cars At Your Disposal For A Quick Spin !!","data":["810569DE 014D"],"options":null},"Infinite Time":{"note":"","data":["811280B2 0C00"],"options":null},"Laps to Race":{"note":"Here you can choose how many laps are in the race, 1-9. Do not use with Option 7-9.","data":["8111CA16 00??"],"options":{"1 Lap to Race":"01","2 Laps to Race":"02","3 Laps to Race":"03","4 Laps to Race":"04","5 Laps to Race":"05","6 Laps to Race":"06","7 Laps to Race":"07","8 Laps to Race":"08","9 Laps to Race":"09"}},"Ultra 64":{"note":"Pick any car, beat stage 8: RR Extreme Extra and the UFO car is yours to drive!","data":["8113DDBA 0018"],"options":null}},"FF14C1DA-167FDE92-C:45":{"In-Game Cheats\\Access Cheat menu":{"note":"","data":["50000504 0000","80100778 0001"],"options":null},"In-Game Cheats\\Enable\\All Items":{"note":"To access simply pause in game play \u0026 then unpause.","data":["8010075C 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Invincibility":{"note":"","data":["802A9C88 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Monsters":{"note":"","data":["802A9DFB 00??"],"options":{"Are Active":"00","Are Gone":"01"}},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A4FF6 0064","812A503E 0064","812A504E 00C8","812A5038 1900","812A5008 04B0","812A503A 0640","812A4FD8 0960","812A503C 0190"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Keys":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A4FF3 000F"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A5067 0001","50000E02 0000","812A4FAC 03E7"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Infinite Health (All Levels)":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on Single-Player, Co-Operative and DUKEMATCH, All Levels.","data":["8024C747 0064","802A4FA9 0064"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5382 0064","812A53CA 0064","812A53DA 00C8","812A53C4 1900","812A5394 04B0","812A53C6 0640","812A5364 0960","812A53C8 0190"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A53F3 0001","50000E02 0000","812A5338 03E7"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on DUKEMATCH, All Levels.","data":["8024AE2F 0064","802A5335 0064"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A570E 0064","812A5756 0064","812A5766 00C8","812A5750 1900","812A5720 04B0","812A5752 0640","812A56F0 0960","812A5754 0190"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A577F 0001","50000E02 0000","812A56C4 03E7"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 4 on DUKEMATCH, All Levels.","data":["8024A98B 0064","802A56C1 0064"],"options":null},"Single-Player (All Levels)\\Have All\\Items \u0026 Infinite Use on all levels":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of. Just press D-Pad Up or D-Pad Down to enable.","data":["812A4C4C 0960","812A4C6A 0064","812A4C7C 04B0","812A4CAC 1900","812A4CAE 0640","812A4CB0 0190","812A4CB2 0064","812A4CC2 00C8"],"options":null},"Single-Player (All Levels)\\Have All\\Keys":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A4C67 000F"],"options":null},"Single-Player (All Levels)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000B01 0000","802A4CD9 0001","50000C02 0000","812A4C20 03E7"],"options":null},"Single-Player (All Levels)\\Have Infinite Health (All Levels)":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels and does what it says on the tin. Infinite health for player 1, All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["80246683 0064","8026DE7B 0064","802A4C1D 0064"],"options":null}},"FF2F2FB4-D161149A-C:45":{"Always Place 1st":{"note":"","data":["8015025B 0001"],"options":null},"Car Upgrades\\'63 Muscle Car":{"note":"","data":["8015065F 0005"],"options":null},"Car Upgrades\\All-Terrain Vehicle":{"note":"","data":["8015066F 0004"],"options":null},"Car Upgrades\\Devastator":{"note":"","data":["80150667 0005"],"options":null},"Car Upgrades\\Italia P69":{"note":"","data":["8015066B 0005"],"options":null},"Car Upgrades\\La Bomba":{"note":"","data":["80150663 0005"],"options":null},"Car Upgrades\\Police Car":{"note":"","data":["80150677 0004"],"options":null},"Car Upgrades\\School Bus":{"note":"","data":["80150673 0004"],"options":null},"Infinite Time":{"note":"","data":["80150A6D 0045"],"options":null},"Play Level Modifier":{"note":"","data":["80150A83 00??"],"options":{"Appalachia":"0C","Arizona":"07","Beverly Hills":"04","Chicago":"0A","Cruise The USA":"0E","Death Valley":"06","Golden Gate Park":"00","Grand Canyon":"08","Indiana":"0B","Iowa":"09","LA Freeway":"05","Redwood Forest":"03","San Francisco":"01","US 101":"02","Washington DC":"0D"}},"Player 1\\Always First Place":{"note":"","data":["8015034B 0001"],"options":null},"Player 1\\Always Have Fastest Car":{"note":"","data":["8015033A 000C"],"options":null},"Player 1\\Gearbox Type Modifier":{"note":"","data":["80150333 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 1\\Lights \u0026 Sirens For Police Car \u0026 School Bus":{"note":"","data":["8115065A 0001","8114E4AA 0001"],"options":null},"Player 2\\Always First Place":{"note":"","data":["801506E7 0001"],"options":null},"Player 2\\Always Have Fastest Car":{"note":"","data":["801506D6 000C"],"options":null},"Player 2\\Gearbox Type Modifier":{"note":"","data":["801506CF 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 2\\Lights \u0026 Sirens For Police Car \u0026 School Bus":{"note":"","data":["811509F6 0001","8114E4C2 0001"],"options":null},"Stop Elapsed Time And No Traffic":{"note":"","data":["80150A69 0000"],"options":null},"Unlimited Time":{"note":"","data":["80150A68 0095","8015097D 0095"],"options":null}}} \ No newline at end of file diff --git a/src/device.rs b/src/device.rs index f9feb0e..19c4d2e 100644 --- a/src/device.rs +++ b/src/device.rs @@ -151,12 +151,12 @@ pub fn get_rom_contents(file_path: &std::path::Path) -> Option> { } } else if file_path.extension().unwrap().eq_ignore_ascii_case("7z") { let mut archive = - sevenz_rust2::SevenZReader::open(file_path, sevenz_rust2::Password::empty()).unwrap(); + sevenz_rust2::ArchiveReader::open(file_path, sevenz_rust2::Password::empty()).unwrap(); let mut found = false; archive .for_each_entries( - &mut |entry: &sevenz_rust2::SevenZArchiveEntry, reader: &mut dyn std::io::Read| { + &mut |entry: &sevenz_rust2::ArchiveEntry, reader: &mut dyn std::io::Read| { let name = entry.name().to_ascii_lowercase(); if !found && (name.ends_with("z64") || name.ends_with("n64") || name.ends_with("v64")) From 6c6d0f32a7f871e79284d48e5eddcdd78e3c10cd Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 4 Jul 2025 22:33:25 +0200 Subject: [PATCH 0491/1117] fix cheats --- data/cheats.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/cheats.json b/data/cheats.json index a38a096..f15eb7a 100644 --- a/data/cheats.json +++ b/data/cheats.json @@ -1 +1 @@ -{"001A3BD0-AFB3DE1A-C:46":{"Access Level Select":{"note":"On the main menu Scroll down to make CHEATS visible to go into Level Select.For in-Game Cheats,Pause gameplay.","data":["810DD50C 8001"],"options":null},"Have\\All TARZAN Letters":{"note":"","data":["800DD515 00FF"],"options":null},"Have\\Coins Collected 100%":{"note":"","data":["800DD547 0064"],"options":null},"Have\\Full Portrait":{"note":"","data":["800DD514 00FF"],"options":null},"Have\\Level \u0026 Tokens Completed 100%":{"note":"","data":["800DD51F 0000","800DD520 0001","800DD521 0000"],"options":null},"Infinite\\Bonus Timer":{"note":"This is For All Timers on Bonus Levels","data":["801736DE 0025"],"options":null},"Infinite\\Green Weapon":{"note":"","data":["811921F6 0063"],"options":null},"Infinite\\Health":{"note":"","data":["81192320 0120"],"options":null},"Infinite\\Lives":{"note":"","data":["800DD542 00??"],"options":{"3 Lives":"03","99 Lives":"63"}},"Infinite\\Purple Weapon":{"note":"","data":["811921FA 0063"],"options":null},"Infinite\\Red Weapon":{"note":"","data":["811921F8 0063"],"options":null},"Press GS For\\Sabor Attacks\\Sabor 1 Hit Kill":{"note":"","data":["8924A23E 0001"],"options":null}},"0198A651-FC219D84-C:50":{"Team on the left of score board has 0 goals":{"note":"","data":["800375C7 0000"],"options":null},"Team on the left of score board has 15 goals":{"note":"","data":["800375C7 000F"],"options":null},"Team on the right of score board has 0 goals":{"note":"","data":["800375C3 0000"],"options":null},"Team on the right of score board has 15 goals":{"note":"","data":["800375C3 000F"],"options":null}},"02B1538F-C94B88D0-C:45":{"Found All Numbers":{"note":"","data":["810ACFB2 000C"],"options":null},"Have No Numbers":{"note":"Keep you kid busy for hours!!!","data":["810ACFB2 0000"],"options":null},"Infinite Strikes":{"note":"","data":["810A7A76 0000"],"options":null}},"02D8366A-6CABEF9C-C:50":{"Access All Bikes \u0026 Tracks":{"note":"","data":["810A7D16 0063"],"options":null},"Access All Weapons For All Modes":{"note":"","data":["50000E02 0000","811B9EFA 0505"],"options":null},"Always 1st":{"note":"","data":["810D7D96 0000"],"options":null},"Infinite Damage":{"note":"","data":["801C1257 0002"],"options":null},"Infinite Health\\To Bike":{"note":"","data":["811B9BB8 4270"],"options":null},"Infinite Health\\To Character":{"note":"","data":["811C0F90 4489"],"options":null},"Max Cash":{"note":"","data":["810D6FBA FFFF"],"options":null},"No Music Elsewhere":{"note":"","data":["810D61AA 0000"],"options":null},"No Music In Game":{"note":"","data":["810D61AE 0000"],"options":null}},"0304C48E-AC4001B8-C:45":{"Max Score":{"note":"","data":["81158440 05F5","81158442 E0FF"],"options":null},"Play As/Player 1":{"note":"","data":["801514F3 00??"],"options":{"Atomicat":"06","Bob Cat":"04","Hai Jinx":"00","Manx":"02","Muffy Dupont":"03","Pearl":"07","Smokey":"05","Sparky":"01"}},"Play As/Player 2":{"note":"","data":["80151503 00??"],"options":{"Atomicat":"06","Bob Cat":"04","Hai Jinx":"00","Manx":"02","Muffy Dupont":"03","Pearl":"07","Smokey":"05","Sparky":"01"}},"Play As/Player 3":{"note":"","data":["80151513 00??"],"options":{"Atomicat":"06","Bob Cat":"04","Hai Jinx":"00","Manx":"02","Muffy Dupont":"03","Pearl":"07","Smokey":"05","Sparky":"01"}},"Play As/Player 4":{"note":"","data":["80151523 00??"],"options":{"Atomicat":"06","Bob Cat":"04","Hai Jinx":"00","Manx":"02","Muffy Dupont":"03","Pearl":"07","Smokey":"05","Sparky":"01"}}},"033F4C13-319EE7A7-C:45":{"Fail Objectives To Complete Them":{"note":"","data":["810315B8 2402","810315BA 0011"],"options":null},"Go Solo In Multiplayer":{"note":"","data":["D00E0778 0042","801002B7 0001"],"options":null},"Have\\All\\Gadgets":{"note":"","data":["80112F6D 0001"],"options":null},"Have\\All\\Guns On All Levels":{"note":"Once you pick up a Gun You will have all weapons","data":["8105F224 0810","8105F226 0000","8105F228 2442","8105F22A 0001","81400000 3C02","81400002 0100","81400004 2442","81400006 0063","81400008 AE82","8140000A 0288","8140000C AE82","8140000E 0298","81400010 AE82","81400012 02A0","81400014 AE82","81400016 02A8","81400018 AE82","8140001A 02B0","8140001C AE82","8140001E 02C0","81400020 AE82","81400022 02C8","81400024 AE82","81400026 02D0","81400028 AE82","8140002A 02D8","8140002C AE82","8140002E 02E8","81400030 AE82","81400032 02F0","81400034 AE82","81400036 02F8","81400038 AE82","8140003A 0300","8140003C AE82","8140003E 0308","81400040 AE82","81400042 0310","81400044 AE82","81400046 0320","81400048 AE82","8140004A 0330","8140004C AE82","8140004E 0338","81400050 AE82","81400052 0350","81400054 AE82","81400056 0358","81400058 AE82","8140005A 0360","8140005C AE82","8140005E 0370","81400060 AE82","81400062 0378","81400064 AE82","81400066 0380","81400068 AE82","8140006A 0388","8140006C AE82","8140006E 0340","81400070 AE82","81400072 0348","81400074 AE82","81400076 0350","81400078 0801","8140007A 7C8C","8140007C A077","8140007E 01FC"],"options":null},"Have\\All\\Levels Unlocked":{"note":"For Single Player Mode Only","data":["81102EE6 0021"],"options":null},"Have\\All\\Skins + Everyone is Evil":{"note":"","data":["50005C0C 0000","800BF687 0081"],"options":null},"Have\\Tons Of Nightvision":{"note":"For Battery Only","data":["81064C82 1500"],"options":null},"Infinite\\Ammo On All Levels":{"note":"","data":["810648DC 2400"],"options":null},"Infinite\\Ammo On Clip":{"note":"","data":["810649AC 2400"],"options":null},"Infinite\\Time":{"note":"Underground Uprising","data":["8138EE3A 19B8"],"options":null},"Invincibility On All levels":{"note":"","data":["81112F68 0101"],"options":null},"Level select":{"note":"","data":["803B0E5F 0009"],"options":null},"Play Crate Yard Level":{"note":"","data":["80102EDF 0008"],"options":null},"Skip Intro":{"note":"","data":["D03B0E5F 0004","803B0E5F 0009"],"options":null},"Stop Bond From Going Downhill on Cold Reception":{"note":"Press L to Stop, \u0026 R to Go","data":["D10E0778 0020","803A8466 0001","D10E0778 0010","803A8466 0000"],"options":null},"Time Taken Clock At 0:00":{"note":"","data":["80102F02 0000"],"options":null}},"03571182-892FD06D-C:45":{"Infinite\\Continues":{"note":"","data":["8114738C 0009"],"options":null},"Infinite\\Dirt Rollout Rampage\\Player 1":{"note":"","data":["8017DFEB 0002"],"options":null},"Instant\\Win\\Barrier Ball\\Player 1":{"note":"","data":["8016EA97 0005"],"options":null},"Instant\\Win\\Pichu's Power Plant\\Player 1":{"note":"","data":["8016D64F 0050"],"options":null},"Instant\\Win\\Topsy Turvy\\Player 1":{"note":"","data":["80176887 0005"],"options":null},"Max Score":{"note":"","data":["D117F812 03E7","8117F812 03E7"],"options":null},"One Hit KO":{"note":"To Win you must get at least one hit or just return your pokemon.","data":["8014576F 0000","801457C7 0000","8014581F 0000"],"options":null},"Press R To Reset Time":{"note":"Press R To Reset Time","data":["801CE066 0010","81183ACC 0063"],"options":null},"Press R+L to KO Opponents":{"note":"Press R+L Activate","data":["D10CE066 0030","80145767 0000","D10CE066 0030","801457C7 0000","D10CE066 0030","8014576F 0000","D10CE066 0030","8014581F 0000"],"options":null},"Press Z\\for Max HP\\1st Pokemon":{"note":"This will give them Max HP when they are not in use. Just call a Pokemon out and he will then have Max HP. When your Pokemon faints, just press Z again and it will revive itIn Battle Only,Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","8114528E 00FF","D112B554 2000","81145290 00FF"],"options":null},"Press Z\\for Max HP\\2nd Pokemon\\Player 1":{"note":"This will give them Max HP when they are not in use. Just call a Pokemon out and he will then have Max HP. When your Pokemon faints, just press Z again and it will revive itIn Battle Only,Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","811452E6 00FF","D112B554 2000","811452E8 00FF"],"options":null},"Press Z\\for Max HP\\3rd Pokemon\\Player 1":{"note":"This will give them Max HP when they are not in use. Just call a Pokemon out and he will then have Max HP. When your Pokemon faints, just press Z again and it will revive itIn Battle Only,Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","8114533E 00FF","D112B554 2000","81145340 00FF"],"options":null},"Press Z\\for Max L.\\1st Pokemon\\Player 1":{"note":"Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","81145284 0063"],"options":null},"Press Z\\for Max L.\\2nd Pokemon\\Player 1":{"note":"Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","811452DC 0063"],"options":null},"Press Z\\for Max L.\\3rd Pokemon\\Player 1":{"note":"Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","81145334 0063"],"options":null}},"036897CE-E0D4FA54-C:45":{"All Items":{"note":"","data":["50002402 0202","810EC350 0001","50004601 0000","800EC3D1 0003"],"options":null},"Item Modifier Codes\\Position 01":{"note":"","data":["800EC350 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 02":{"note":"","data":["800EC351 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 03":{"note":"","data":["800EC352 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 04":{"note":"","data":["800EC353 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 05":{"note":"","data":["800EC354 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 06":{"note":"","data":["800EC355 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 07":{"note":"","data":["800EC356 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 08":{"note":"","data":["800EC357 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 09":{"note":"","data":["800EC358 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 10":{"note":"","data":["800EC359 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 11":{"note":"","data":["800EC35A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 12":{"note":"","data":["800EC35B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 13":{"note":"","data":["800EC35C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 14":{"note":"","data":["800EC35D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 15":{"note":"","data":["800EC35E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 16":{"note":"","data":["800EC35F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 17":{"note":"","data":["800EC360 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 18":{"note":"","data":["800EC361 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 19":{"note":"","data":["800EC362 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 20":{"note":"","data":["800EC363 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 21":{"note":"","data":["800EC364 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 22":{"note":"","data":["800EC365 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 23":{"note":"","data":["800EC366 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 24":{"note":"","data":["800EC367 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 25":{"note":"","data":["800EC368 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 26":{"note":"","data":["800EC369 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 27":{"note":"","data":["800EC36A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 28":{"note":"","data":["800EC36B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 29":{"note":"","data":["800EC36C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 30":{"note":"","data":["800EC36D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 31":{"note":"","data":["800EC36E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 32":{"note":"","data":["800EC36F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 33":{"note":"","data":["800EC370 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 34":{"note":"","data":["800EC371 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 35":{"note":"","data":["800EC372 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 36":{"note":"","data":["800EC373 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 37":{"note":"","data":["800EC374 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 38":{"note":"","data":["800EC375 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 39":{"note":"","data":["800EC376 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 40":{"note":"","data":["800EC377 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 41":{"note":"","data":["800EC378 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 42":{"note":"","data":["800EC379 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 43":{"note":"","data":["800EC37A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 44":{"note":"","data":["800EC37B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 45":{"note":"","data":["800EC37C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 46":{"note":"","data":["800EC37D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 47":{"note":"","data":["800EC37E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 48":{"note":"","data":["800EC37F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}}},"0375CF67-56A93FAA-C:4A":{"Always Have Retreat \u0026 Elem Pedra Opened":{"note":"Do not put this on until in-game or the game will freeze.","data":["D01A1312 0000","811A1312 0003"],"options":null},"Day Always 00":{"note":"","data":["811F008C 0000"],"options":null},"Finish All Levels":{"note":"","data":["81196126 5454","81196128 5140","8119612A 4555","8119612C 9514","8119612E 5515"],"options":null},"Hour Always":{"note":"","data":["801960CD 00??"],"options":{"(0 Hour - 24:00 PM - Midnight)":"00","(01:00 AM)":"01","(02:00 AM)":"02","(03:00 AM)":"03","(04:00 AM)":"04","(05:00 AM)":"05","(06:00 AM)":"06","(07:00 AM)":"07","(08:00 AM)":"08","(09:00 AM)":"09","(10:00 AM)":"0A","(11:00 AM)":"0B","(12:00 PM - Noon)":"0C","(13:00 - 1 PM)":"0D","(14:00 - 2 PM)":"0E","(15:00 - 3 PM)":"0F","(16:00 - 4 PM)":"10","(17:00 - 5 PM)":"11","(18:00 - 6 PM)":"12","(19:00 - 7 PM)":"13","(20:00 - 8 PM)":"14","(21:00 - 9 PM)":"15","(22:00 - 10 PM)":"16","(23:00 - 11 PM)":"17"}},"Infinite Goth":{"note":"","data":["8119610E FFFF"],"options":null},"Magnus\\Infinite HP":{"note":"","data":["811932B0 03E7"],"options":null},"Magnus\\Level 99":{"note":"","data":["801932AB 0063"],"options":null},"Magnus\\Max Agi":{"note":"","data":["811932BC 03E7"],"options":null},"Magnus\\Max Dex":{"note":"","data":["811932BE 3E77"],"options":null},"Magnus\\Max HP":{"note":"","data":["811932AE 03E7"],"options":null},"Magnus\\Max Int":{"note":"","data":["811932B8 03E7"],"options":null},"Magnus\\Max Mem":{"note":"","data":["811932BA 03E7"],"options":null},"Magnus\\Max Str":{"note":"","data":["811932B4 03E7"],"options":null},"Magnus\\Max Vit":{"note":"","data":["811932B6 03E7"],"options":null},"Max Goth":{"note":"","data":["8119610C 0098","8119610E 967F"],"options":null},"Open All Paths":{"note":"","data":["81196120 01FF","81196122 677F","81196124 FCFF"],"options":null}},"0414CA61-2E57B8AA-C:50":{"Everything Unlocked\\Save File 1":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8105892E FFFF"],"options":null},"Everything Unlocked\\Save File 2":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8105886E FFFF"],"options":null},"Everything Unlocked\\Save File 3":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8105898E FFFF"],"options":null},"Everything Unlocked\\Save File 4":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","810588CE FFFF"],"options":null},"In-Built Cheat Menu":{"note":"This code gives you all Cheats in Menu","data":["50002001 0000","800585A0 0001"],"options":null},"Infinite\\Ammo (All Levels)":{"note":"","data":["8006894B 0001"],"options":null},"Mod Section\\Cradle in multiplayer":{"note":"Puts the cradle graphic in the levels screen where the facility normally is in the multiplayer levels screen.Warning it doesn't allow you to enter the multiplayer levels screen,it should automatically Have\\selected cradle, which cannot be changed from the multiplayer menus","data":["8002666D 0092","8002666F 0093","80026677 0029","80026673 0008","803230C5 0052","803230C6 0041","803230C7 0044","803230C8 004C","803230C9 0045"],"options":null},"Mod Section\\Enemies Do Nothing":{"note":"","data":["80027E54 00FF"],"options":null},"Mod Section\\Enemy Options":{"note":"\"These Codes Are very very cool but in most places pointless ! But great fun, try then. But remember to deactivate them before coming to the end of the level, otherwise, there will be nothing/no one, to meet or do (:\"","data":["80032142 00??"],"options":{"Enemies Check Around Themselves":"FF","Enemies Come After You":"01","Enemies Move Around \u0026 Check":"97"}},"Mod Section\\Facility Back Zone In Multiplayer\\Part 1\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811E6554 45E4","811E6558 43D5","811E655C C5A7","811E657C 801C","811E657E 6774","811E5164 45E4","811E5168 C383","811E516C 4492","811E518C 801C","811E518E D574","811E78C0 45AD","811E78C4 C383","811E78C8 4440","811E78E8 801C","811E78EA E464","811E4D18 45D0","811E4D1C 4307","811E4D20 C4FB","811E4D40 801C","811E4D42 75EC","811E6738 45CD","811E673C C383","811E6740 43F4","811E6760 801C","811E6762 A0DC","811E5450 45C2","811E5454 4356","811E5458 C598","811E5478 801C","811E547A 6A74","811E5240 4608","811E5244 4307","811E5248 43DC","811E5268 801C","811E526A 962C","811E691C 4606","811E6920 4321","811E6924 449D","811E6944 801C","811E6946 CBEC","801ED447 008A","801ED4DB 008B","801ED56F 008C","801ED603 008D","801ED697 008E","801ED72B 008F","801ED7BF 007D","801ED853 007E","801ED443 002A","801ED4D7 002A","801ED56B 002A","801ED5FF 002A","801ED693 002A","801ED727 002A","801ED7BB 002A","801ED84F 002A","801ED449 0000","801ED4DD 0000","801ED571 0000","801ED605 0000","801ED699 0000","801ED72D 0000","801ED7C1 0000","801ED855 0000","801ED44D 0000","801ED4E1 0000","801ED575 0000","801ED609 0000","801ED69D 0000","801ED731 0000","801ED7C5 0000","801ED859 0000","801EB743 002A","801EB745 0068","811EB746 277F","811EB748 1000","811EB74A 0262","811EB7C2 0190","801EB7C5 0000","811EB7C6 0258"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 2\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811EB7C8 0000","811EB7CC FFFF","811EB7CE FFFF","811EB7D2 0000","801EB7D5 0000","801EB7DB 0000","811EB7E2 0000","801EB7E7 0000","801EB843 002A","801EB845 0068","811EB846 2780","811EB848 1000","811EB84A 0262","811EB8C2 0190","801EB8C5 0000","811EB8C6 0258","811EB8C8 0000","811EB8CC FFFF","811EB8CE FFFF","811EB8D2 0000","801EB8D5 0000","801EB8DB 0000","811EB8E2 0000","801EB8E7 0000","801EB943 002A","801EB945 0068","811EB946 2791","811EB948 1000","811EB94A 0262","811EB9C2 0190","801EB9C5 0000","811EB9C6 0258","811EB9C8 0000","811EB9CC FFFF","811EB9CE FFFF","811EB9D2 0000","801EB9D5 0000","801EB9DB 0000","811EB9E2 0000","801EB9E7 0000","801EBA43 002A","801EBA45 0068","811EBA46 2792","811EBA48 1000","811EBA4A 0262","811EBAC2 0190","801EBAC5 0000","811EBAC6 0258","811EBAC8 0000","811EBACC FFFF","811EBACE FFFF","811EBAD2 0000","801EBAD5 0000","801EBADB 0000","811EBAE2 0000","801EBAE7 0000","801EBB45 00A0","801EBC45 00A0","801EBD45 00A0","801EBE45 00A0","801EBB47 0075","801EBC47 0076","801EBD47 0077","801EBE47 0078","801EBBE7 0001","801EBCE7 0001","801EBDE7 0001","801EBEE7 0001","801EC247 0071","801ECD47 0072","801ECE47 0074","801ECF47 006C","801ED047 0079","801ED147 0083","D01EBFC5 005A","801EBFC5 0000","D11EBFC6 0000","811EBFC6 F333","D11EBFC8 03E8","811EBFC8 0000"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 3\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["D11EBFCA 0000","811EBFCA F0C4","D11EBFCE 4CCC","811EBFCE 000A","D11EBFD2 4CCC","811EBFD2 000A","D11EBFD4 0003","811EBFD4 0000","D11EBFD6 0000","811EBFD6 02C4","801EBFD9 0004","801EBFDB 0000","811EBFE2 0384","801EBFE7 0004","801EBF45 009E","801EBF47 0084","801EBF48 0010","801EC2D9 0000","801EC447 0085","801EC547 0086","811EA6B6 2743","811EA73E 0114","811EA7F2 0115","811EA8A6 00A3","811EA92E 009D","811EA9E2 00A4","811EAA96 00DA","811EAB1E 00DB","811EABD2 00DF","811EAC86 0130","811EAD0E 008D","811EADC2 012E","811EAE76 0111","811EAEFE 2740","811EAFB2 2741","811EB066 00A0","811EB0EE 009E","811EB1A2 009F","811EB256 274F","811EB2DE 2750","811EB392 0117","811EB446 0131","811EB4CE 008E","811EB582 0132","811EB636 00A1","811EB6BE 0119","811EA62E 00FA","801ED3DF 0000","801ED2DF 0001","D0024337 0007","80024337 001F"],"options":null},"Mod Section\\Freeze Unfreeze enemies":{"note":"Press C-Up To Freeze \u0026 C-Down To Unfreeze.","data":["D00572D1 0008","80027E5C 000F","D00572D1 0004","80027E5C 0000"],"options":null},"Mod Section\\Replace Cradle with Citadell hidden level":{"note":"","data":["80025E47 0029","8103DB6A D9B4","8103DB70 3F44","8103DB72 BDEA","8103DB74 3F80","8103DB76 0000","8103DB78 4219","8103DB7A D89D","81058EC0 C470"],"options":null},"Mod Section\\Secret Island on Dam Level":{"note":"For the above code to work,Get to the 2nd guard tower \u0026 go down the ladder on the left hand side \u0026 to the end of the Dock, Press L \u0026 GS and you will be transfered in the water. Just keep walking straight \u0026 you will get to it. Obviously you can't actually climb ladders or anything, you will simply walkthrough anything on that Part, if you want to walk back to the Dock, when you come near it click the cheat back on \u0026 keep pressing L \u0026 GS untill you are back on it.","data":["D004C2D1 0020","800BA78D 0050","880BA78D 0000"],"options":null}},"04DAF07F-0D18E688-C:45":{"Cheat Menu\\All Weapons Enabled":{"note":"","data":["801CC8B9 0001","801CC925 0001","801CD985 0001","801CDA81 0001","801CDB15 0001","801CDB17 0001","801CDB49 0001","801CE479 0001","801CE481 0001","801CE4ED 0001","801CF635 0001"],"options":null},"Cheat Menu\\Cheat Menu Enabled":{"note":"","data":["801CE4E8 0001"],"options":null},"Cheat Menu\\Have All Game Type \u0026 Other":{"note":"","data":["810E16BE FFFF"],"options":null},"Cheat Menu\\Have All Weapons":{"note":"","data":["811CE470 FFFF"],"options":null},"Enable Debug Menu":{"note":"","data":["800DF990 0001"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810A1E74 A65B"],"options":null},"Invincibility":{"note":"","data":["800DEEC3 0001"],"options":null},"Time Always 00:00":{"note":"","data":["801A19C6 0000"],"options":null}},"0549765A-93B9D042-C:4A":{"Have 6 Carrots":{"note":"","data":["80160659 007E"],"options":null},"Have All\\Collectibles\\Stage 1":{"note":"","data":["80160650 0014"],"options":null},"Have All\\Collectibles\\Stage 2":{"note":"","data":["80160651 0014"],"options":null},"Have All\\Collectibles\\Stage 3":{"note":"","data":["80160652 0014"],"options":null},"Have All\\Collectibles\\Stage 4":{"note":"","data":["80160653 0014"],"options":null},"Have All\\Collectibles\\Stage 5":{"note":"","data":["80160654 0014"],"options":null},"Have All\\Collectibles\\Stage 6":{"note":"","data":["80160655 0014"],"options":null},"Have All\\Costumes":{"note":"","data":["8016065A 00FE"],"options":null},"Have All\\Levels":{"note":"","data":["80160648 003F"],"options":null},"Infinite Health":{"note":"","data":["80187BBD 000F"],"options":null},"Max Collectable Items":{"note":"","data":["80160641 0014"],"options":null},"Press L To levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0187BF5 0020","81187B20 4200"],"options":null}},"0553AE9D-EAD8E0C1-C:45":{"1 Hit to Kill Opponent\\Player 1":{"note":"","data":["D10B6354 42C8","810B6354 4080"],"options":null},"1 Hit to Kill Opponent\\Player 2":{"note":"","data":["D10B6170 42C8","810B6170 4080"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["810B6170 42C8"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["810B6354 42C8"],"options":null},"Opponent Has No Energy\\Player 1":{"note":"","data":["810B6354 C080"],"options":null},"Opponent Has No Energy\\Player 2":{"note":"","data":["810B6170 C080"],"options":null},"Player 1 Never Wins":{"note":"","data":["800C0C03 0000"],"options":null},"Player 2 Never Wins":{"note":"","data":["800C0C05 0000"],"options":null},"Unlock Titan Difficulty Level":{"note":"","data":["810BF752 0001"],"options":null}},"056EAB63-C215FCD5-C:4A":{"Infinite\\Energy\\Player 1":{"note":"","data":["81224DC4 00FF"],"options":null},"Infinite\\Energy\\Player 2":{"note":"","data":["81224DC6 00FF"],"options":null},"Infinite\\Time":{"note":"","data":["81224DCC 00FF"],"options":null},"Never Wins\\Player 1":{"note":"","data":["80224DB5 0000"],"options":null},"Never Wins\\Player 2":{"note":"","data":["80224DB7 0000"],"options":null}},"0578F24F-9175BF17-C:4A":{"Car Select":{"note":"","data":["D00F5180 0000","800F5180 00??"],"options":{"Chevrolet Camaro":"03","Chrysler Jeep Jeepster (Prototype)":"08","Default":"00","Dodge Viper":"04","Donkey In Glass Box":"0E","Ferrari F40":"07","Hotdog":"0A","Hummer H1":"05","Jeep Wrangler":"02","McLaren F1":"09","Mitsubishi Eclipse":"01","Nintendo 64 Logo":"0C","Nintendo Power Car":"0B","Porsche 911 Turbo":"06","Taco":"0D"}},"Infinite\\Max Acceleration\\Player 1":{"note":"","data":["800F518D 0005"],"options":null},"Infinite\\Max Acceleration\\Player 2":{"note":"","data":["800F5379 0005"],"options":null},"Infinite\\Max Acceleration\\Player 3":{"note":"","data":["800F5565 0005"],"options":null},"Infinite\\Max Acceleration\\Player 4":{"note":"","data":["800F5751 0005"],"options":null},"Infinite\\Max Handling\\Player 1":{"note":"","data":["800F518C 0005"],"options":null},"Infinite\\Max Handling\\Player 2":{"note":"","data":["800F5378 0005"],"options":null},"Infinite\\Max Handling\\Player 3":{"note":"","data":["800F5564 0005"],"options":null},"Infinite\\Max Handling\\Player 4":{"note":"","data":["800F5750 0005"],"options":null},"Infinite\\Max Money\\Player 1":{"note":"","data":["800F5185 000F"],"options":null},"Infinite\\Max Money\\Player 2":{"note":"","data":["800F5371 000F"],"options":null},"Infinite\\Max Money\\Player 3":{"note":"","data":["800F555D 000F"],"options":null},"Infinite\\Max Money\\Player 4":{"note":"","data":["800F5749 000F"],"options":null},"Infinite\\Max Top Speed\\Player 1":{"note":"","data":["800F518E 0005"],"options":null},"Infinite\\Max Top Speed\\Player 2":{"note":"","data":["800F537A 0005"],"options":null},"Infinite\\Max Top Speed\\Player 3":{"note":"","data":["800F5566 0005"],"options":null},"Infinite\\Max Top Speed\\Player 4":{"note":"","data":["800F5752 0005"],"options":null},"Infinite\\Nitro\\Player 1":{"note":"","data":["800F518F 0009"],"options":null},"Infinite\\Nitro\\Player 2":{"note":"","data":["800F537B 0009"],"options":null},"Infinite\\Nitro\\Player 3":{"note":"","data":["800F5567 0009"],"options":null},"Infinite\\Nitro\\Player 4":{"note":"","data":["800F5753 0009"],"options":null},"Laps 2 Race":{"note":"","data":["80118760 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"[Press F9]\\All Cars (All Modes)":{"note":"","data":["880E99CB 000E","881023B1 000E"],"options":null},"[Press F9]\\Jump To Season 6":{"note":"","data":["881023A8 0005"],"options":null}},"0684FBFB-5D3EA8A5-C:45":{"All levels complete":{"note":"","data":["800D13C4 000C","800D13C5 000A","800D13C6 000A","800D13C7 000A","800D13C8 000A","800D13C9 000A"],"options":null},"Infinite\\\u0026 Max Minerals":{"note":"","data":["50000C04 0000","810B1D46 FFFF","50000C04 0000","810B1D44 3B9A","50000C04 0000","810B1D46 C9FF"],"options":null},"Infinite\\\u0026 Max Vespene Gas":{"note":"","data":["50000C04 0000","810B1D76 FFFF","50000D04 0000","810B1D74 3B9A","50000D04 0000","810B1D76 C9FF"],"options":null}},"07861842-A12EBC9F-C:45":{"Always Low Temp":{"note":"","data":["810E4F98 0000","810E4F9A 0000"],"options":null},"Auto-Pilot Always On Turbo (Original Excitebike Mode)":{"note":"","data":["810E3142 19AA"],"options":null},"Earthquake Mode":{"note":"","data":["810D7010 3AD0"],"options":null},"Fast\\Movement (Drones)":{"note":"","data":["800D9D55 00A0"],"options":null},"Fast\\Movement (Player)":{"note":"","data":["800D9D65 00AF"],"options":null},"Max Stunt Points":{"note":"","data":["810E4D18 0098","810E4D1A 967F"],"options":null},"No\\Collision Drivers":{"note":"","data":["800D9D34 0040"],"options":null},"No\\Overheating":{"note":"","data":["800CA984 00C3"],"options":null},"Power Turbo":{"note":"","data":["800CA99C 0040","800CA99D 00E0"],"options":null},"Sixty Frames":{"note":"Use Glide64 while hoping for full speed.","data":["800CDD6F 0000"],"options":null},"Slow\\Movement (Drones)":{"note":"","data":["800D9D55 0060"],"options":null},"Slow\\Movement (Player)":{"note":"","data":["800D9D65 0060"],"options":null},"Steering Control":{"note":"","data":["800C9E50 0040"],"options":null},"Super Speed For All":{"note":"","data":["800CA9A0 0040","800CA9A1 0070"],"options":null},"Unlock\\Difficulties \u0026 All Special Tracks":{"note":"","data":["810F2D50 FFFF"],"options":null},"Unlock\\Silver \u0026 Gold Cup":{"note":"","data":["810F2D4E 0003"],"options":null}},"079501B9-AB0232AB-C:4A":{"All Equipment Registered":{"note":"","data":["50001402 0000","810F40D8 FFFF"],"options":null},"All Equipment Unhighlighted":{"note":"","data":["50001402 0000","810F4100 FFFF"],"options":null},"All Equipment Unlocked":{"note":"","data":["50001402 0000","810F40B0 FFFF"],"options":null},"All Help Notes Available For Player 1":{"note":"","data":["50000602 0000","810F409C FFFF"],"options":null},"All Stuff Available For Player 1":{"note":"This modifies your save file. That will make all the multiplayer stages available, as well as unlocking every part. The actual breakdown is:","data":["50003802 0000","810F4230 FFFF"],"options":null},"Side Invincible\\Player 1":{"note":"","data":["811FC00C 447A"],"options":null},"Side Invincible\\Player 2":{"note":"","data":["811FC034 447A"],"options":null}},"07A69D01-9A7D41A1-C:50":{"Have 6 Carrots":{"note":"","data":["80164519 007E"],"options":null},"Have All\\Collectibles\\Stage 1":{"note":"","data":["80164510 0014"],"options":null},"Have All\\Collectibles\\Stage 2":{"note":"","data":["80164511 0014"],"options":null},"Have All\\Collectibles\\Stage 3":{"note":"","data":["80164512 0014"],"options":null},"Have All\\Collectibles\\Stage 4":{"note":"","data":["80164513 0014"],"options":null},"Have All\\Collectibles\\Stage 5":{"note":"","data":["80164514 0014"],"options":null},"Have All\\Collectibles\\Stage 6":{"note":"","data":["80164515 0014"],"options":null},"Have All\\Costumes":{"note":"","data":["8016451A 00FE"],"options":null},"Have All\\Levels":{"note":"","data":["80164508 003F"],"options":null},"Infinite Health":{"note":"","data":["8018BA7D 000F"],"options":null},"Max Collectable Items":{"note":"","data":["80164501 0014"],"options":null},"Press L To levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D018BAB5 0020","8118B9E0 4200"],"options":null}},"07C1866E-5775CCDE-C:50":{"Max Constructor Points":{"note":"","data":["8103A8F8 03E7"],"options":null},"Max Driver Points":{"note":"","data":["8103A8F6 03E7"],"options":null}},"07F3B276-EC8F3D39-C:45":{"Have All\\Races":{"note":"","data":["81088756 FFFF"],"options":null},"Have All\\Tracks":{"note":"","data":["8108875A FFFF"],"options":null},"Infinite Credits":{"note":"","data":["8008D659 0063"],"options":null},"Unlock All Characters \u0026 Extra Cheats":{"note":"","data":["81088750 FFFF","81088752 FFFF"],"options":null}},"08123595-0510F1DE-C:45":{"1-Hit Death\\Player 1":{"note":"","data":["D01502AA 0064","811502AA 0100"],"options":null},"1-Hit Death\\Player 2":{"note":"","data":["D0152926 0064","81152926 0100"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["811502AA 6400"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["811502AA 6400"],"options":null},"Infinite Jetpack\\Player 1":{"note":"","data":["811502B2 3200"],"options":null},"Infinite Jetpack\\Player 2":{"note":"","data":["8115292E 3200"],"options":null},"Infinite Shield\\Player 1":{"note":"","data":["811502AE 6400"],"options":null},"Infinite Shield\\Player 2":{"note":"","data":["8115292A 6400"],"options":null},"Needs 1 Match to Win\\Player 1":{"note":"","data":["D015029B 0000","8015029B 0001"],"options":null},"Needs 1 Match to Win\\Player 2":{"note":"","data":["D0152917 0000","80152917 0001"],"options":null},"Never Wins\\Player 1":{"note":"","data":["8015029B 0000"],"options":null},"Never Wins\\Player 2":{"note":"","data":["80152917 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["801ABB2B 00??"],"options":{"ChainSaw":"0D","Mutilator":"0C","PainMaster":"0B","She-Freak":"0A"}}},"0894909C-DAD4D82D-C:45":{"Big\\Glove Mode":{"note":"","data":["800F401D 0001"],"options":null},"Big\\Head Mode":{"note":"","data":["800F401C 0001"],"options":null},"Infinite\\Creation Points":{"note":"","data":["81063742 0064"],"options":null},"Player 1\\Character Modifier":{"note":"","data":["800EC6F3 00??"],"options":{"Alameda":"23","Ali":"00","Ang":"2B","Argnello":"13","Barclay":"32","Bazzel":"44","Botti":"2D","Bristov":"2C","Bunch":"3F","Butterbean":"07","Carr":"0E","Coallier":"49","Created Boxer":"1A","Creater Boxer":"1B","De La Hoya":"08","Dempsey":"1C","Dexter":"42","Di Ricco":"36","Duran":"0B","Eckhardt":"27","Eklund":"46","F. Sandoval":"2A","Frazier":"01","Garrett":"31","Giolito":"30","Greenberg":"3B","Hagler":"0A","Hasson":"22","Holmes":"02","Holyfield":"03","Hopra":"26","Hsu":"43","IUppa":"1E","K. Orr":"1D","Kelley":"17","Lajoie":"3A","Leonard":"09","Lewis":"04","Lupidi":"34","M. Broadhurst":"38","Manfredy":"16","Mayweather":"15","Moskey":"11","O'Grady":"14","Parker":"28","Perone":"3D","Philippine":"37","Pole":"21","Pryor":"12","Quartey":"0D","Quinn":"3C","Random":"19","Reid":"10","Romero":"18","Ruiz":"29","S. Broadhurst":"20","S. Orr":"2E","S. Sandoval":"1F","Scott":"25","Spinks":"06","St. Aubyn":"40","Tallarico":"47","Thompson":"45","Tool":"3E","Tua":"05","Vargas":"0F","W. Aguitar":"35","Wahlberg":"24","Weaver":"39","Wells":"41","Whitaker":"0C","Wynne":"33","Zarifes":"2F","de Leon":"48"}},"Player 1\\Infinite\\Health":{"note":"","data":["8106B974 42C8","8106B976 0000"],"options":null},"Player 1\\Max\\Power":{"note":"","data":["8106B980 0000","8106B982 0BB2"],"options":null},"Player 1\\No Health":{"note":"","data":["8106B974 0000","8106B976 0000"],"options":null},"Player 1\\No Power":{"note":"","data":["8106B980 0000","8106B982 0000"],"options":null},"Player 1\\Power Punch After 1st Punch":{"note":"","data":["8006B983 0064"],"options":null},"Player 2\\Character Modifier":{"note":"","data":["800EC6F7 00??"],"options":{"Alameda":"23","Ali":"00","Ang":"2B","Argnello":"13","Barclay":"32","Bazzel":"44","Botti":"2D","Bristov":"2C","Bunch":"3F","Butterbean":"07","Carr":"0E","Coallier":"49","Created Boxer":"1A","Creater Boxer":"1B","De La Hoya":"08","Dempsey":"1C","Dexter":"42","Di Ricco":"36","Duran":"0B","Eckhardt":"27","Eklund":"46","F. Sandoval":"2A","Frazier":"01","Garrett":"31","Giolito":"30","Greenberg":"3B","Hagler":"0A","Hasson":"22","Holmes":"02","Holyfield":"03","Hopra":"26","Hsu":"43","IUppa":"1E","K. Orr":"1D","Kelley":"17","Lajoie":"3A","Leonard":"09","Lewis":"04","Lupidi":"34","M. Broadhurst":"38","Manfredy":"16","Mayweather":"15","Moskey":"11","O'Grady":"14","Parker":"28","Perone":"3D","Philippine":"37","Pole":"21","Pryor":"12","Quartey":"0D","Quinn":"3C","Random":"19","Reid":"10","Romero":"18","Ruiz":"29","S. Broadhurst":"20","S. Orr":"2E","S. Sandoval":"1F","Scott":"25","Spinks":"06","St. Aubyn":"40","Tallarico":"47","Thompson":"45","Tool":"3E","Tua":"05","Vargas":"0F","W. Aguitar":"35","Wahlberg":"24","Weaver":"39","Wells":"41","Whitaker":"0C","Wynne":"33","Zarifes":"2F","de Leon":"48"}},"Player 2\\Infinite\\Health":{"note":"","data":["8106BA7C 42C8","8106BA7E 0000"],"options":null},"Player 2\\Max\\Power":{"note":"","data":["8106BA88 0000","8106BA8A 0BB2"],"options":null},"Player 2\\No Health":{"note":"","data":["8106BA7C 0000","8106BA7E 0000"],"options":null},"Player 2\\No Power":{"note":"","data":["8106BA88 0000","8106BA8A 0000"],"options":null},"Player 2\\Power Punch After 1st Punch":{"note":"","data":["8006BA8B 0064"],"options":null},"Ring Modifier":{"note":"","data":["800EC703 00??"],"options":{"Caesars Palace":"01","Ecko Sports Arena":"02","Great Western Forum":"00","International Arena":"03","Knockout Kings Arena":"08","Local 440":"04","Roppongi Palace":"06","The Colosseum":"05","Wembley Arena":"07"}},"Stop Timer":{"note":"","data":["81067546 001C"],"options":null}},"08D49262-03763D39-C:00":{"God Mode":{"note":"","data":["80774EB7 00??"],"options":{"Off":"00","On":"01"}}},"08FFA4B7-01F453B6-C:45":{"All Boards Complete":{"note":"","data":["50001802 0000","810B3578 0001"],"options":null},"Always 1st/Low Time":{"note":"","data":["81350C02 0000","80350C17 0063"],"options":null},"Free Ride Complete\\Stage 1-Boarder":{"note":"","data":["800B357A 0001"],"options":null},"Free Ride Complete\\Stage 1-Skier":{"note":"","data":["800B3578 0001"],"options":null},"Free Ride Complete\\Stage 2-Boarder":{"note":"","data":["800B3586 0001"],"options":null},"Free Ride Complete\\Stage 2-Skier":{"note":"","data":["800B3584 0001"],"options":null},"Free Ride Complete\\Stage 3-Boarder":{"note":"","data":["800B3592 0001"],"options":null},"Free Ride Complete\\Stage 3-Skier":{"note":"","data":["800B3590 0001"],"options":null},"Free Ride Complete\\Stage 4-Boarder":{"note":"","data":["800B359E 0001"],"options":null},"Free Ride Complete\\Stage 4-Skier":{"note":"","data":["800B359C 0001"],"options":null},"Giant Slalom Complete\\Stage 1-Boarder":{"note":"","data":["800B3582 0001"],"options":null},"Giant Slalom Complete\\Stage 1-Skier":{"note":"","data":["800B3580 0001"],"options":null},"Giant Slalom Complete\\Stage 2-Boarder":{"note":"","data":["800B358E 0001"],"options":null},"Giant Slalom Complete\\Stage 2-Skier":{"note":"","data":["800B358C 0001"],"options":null},"Giant Slalom Complete\\Stage 3-Boarder":{"note":"","data":["800B359A 0001"],"options":null},"Giant Slalom Complete\\Stage 3-Skier":{"note":"","data":["800B3598 0001"],"options":null},"Giant Slalom Complete\\Stage 4-Boarder":{"note":"","data":["800B35A6 0001"],"options":null},"Giant Slalom Complete\\Stage 4-Skier":{"note":"","data":["800B35A4 0001"],"options":null},"Infinite Stamina":{"note":"","data":["8034F798 0012"],"options":null},"Lagfix":{"note":"Smoother 30fps only.","data":["8012CF52 000D"],"options":null},"Slalom Complete\\Stage 1-Boarder":{"note":"","data":["800B357E 0001"],"options":null},"Slalom Complete\\Stage 1-Skier":{"note":"","data":["800B357C 0001"],"options":null},"Slalom Complete\\Stage 2-Boarder":{"note":"","data":["800B358A 0001"],"options":null},"Slalom Complete\\Stage 2-Skier":{"note":"","data":["800B3588 0001"],"options":null},"Slalom Complete\\Stage 3-Boarder":{"note":"","data":["800B3596 0001"],"options":null},"Slalom Complete\\Stage 3-Skier":{"note":"","data":["800B3594 0001"],"options":null},"Slalom Complete\\Stage 4-Boarder":{"note":"","data":["800B35A2 0001"],"options":null},"Slalom Complete\\Stage 4-Skier":{"note":"","data":["800B35A0 0001"],"options":null}},"09465AC3-F8CB501B-C:50":{"Always Have Wallet Size":{"note":"","data":["801189FA 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C6A7D 0010","81119CBE 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["80119841 00FF","80119CB7 00??"],"options":{"Off":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C6A7D 0000","80119D6B 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["8002399C 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801189DE 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801189DF 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801189E0 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801189E1 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1850 0005","801EE290 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801189FA 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801189FB 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801189F9 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189F4 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189FC 30FF","811189FE FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801189D0 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801189D6 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801189DC 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["801189D4 0009"],"options":null},"Have\\Bombs":{"note":"","data":["801189CE 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["801189D8 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["801189CD 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["801189CC 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["801189CF 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["801189D2 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["801189D5 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["801189D9 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["801189DA 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["801189D1 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["801189D7 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["801189DD 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["801189DB 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["801189D3 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["801189E7 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["50000B01 0000","80118A00 0007","50000501 0000","80118A17 0009","80118A1F 0009","80118A21 0009","80118A24 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801189EC 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["801189E6 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801189E5 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801189EA 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801189E4 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118988 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118991 0008","80118992 0001","80118994 0001","8011898B 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801189F2 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["81119D24 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["80119D29 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["80119D2D 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D011BB37 0020","811D9410 40CB","D011BB37 0000","811D9C32 000D","801189C8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119D61 00??"],"options":{"English":"00","French":"02","German":"01"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["80118A27 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["80118A29 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["81118986 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["81119D20 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D011BB37 0020","811D9C32 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D011BB37 0020","811D9410 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C6A7D 0010","8011895F 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["81118964 ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["801189E2 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["801189E3 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["801189C8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["80118996 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119B7A 0000","81119B7C 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"096A40EA-8ABE0A10-C:45":{"Cheat Select":{"note":"","data":["8109ACBE ????"],"options":{"All Of The Above":"0FFF","All Pick-Ups Are Grapple":"0040","All Pick-Ups Are Green":"0010","All Pick-Ups Are Red":"0004","All Pick-Ups Are Yellow":"0008","Maintain Speed Off Track":"0001","No Chassis":"0400","No Driver":"0800","No Wheels":"0200","Pick-Ups Are Maximum":"0080","Reversed Rocket Racer Run Track":"0020","Rocket Cars":"0002","Turbo Mode":"0100"}},"Have All Tracks and Building Pieces":{"note":"","data":["812576D4 FFFF","812576D6 FFFF"],"options":null}},"09CC4801-E42EE491-C:4A":{"Infinite Fuel\\Gyrocopter":{"note":"","data":["80355211 0081"],"options":null},"Infinite Fuel\\Rocket Belt":{"note":"","data":["80355231 0081"],"options":null},"Infinite Photos":{"note":"","data":["81342F5E 0000"],"options":null},"Music Volume Select":{"note":"","data":["8025C454 00??"],"options":{"Max Volume":"04","Medium Volume":"02","No Music":"00"}},"Time Always 00'00'10":{"note":"This Cheat code is for All Events","data":["80355140 0001"],"options":null}},"09D53E16-3AB268B9-C:45":{"Almost Always Hit A Home Run":{"note":"","data":["80195714 0001"],"options":null},"Away Team\\Score 0":{"note":"Do not use with Away Team Scors 30","data":["801606B5 0000"],"options":null},"Away Team\\Score 30":{"note":"Do not use with Away Team Scors 30","data":["801606B5 001E"],"options":null},"Fast Game":{"note":"","data":["80195729 0001"],"options":null},"Home Team\\Score 0":{"note":"Do not use with Home Team Scors 30","data":["801606B7 0000"],"options":null},"Home Team\\Score 30":{"note":"Do not use with Home Team Scors 0","data":["801606B7 001E"],"options":null},"Increased Gravity":{"note":"","data":["80195727 0001"],"options":null},"Infinite\\Balls":{"note":"","data":["801606D0 0000"],"options":null},"Infinite\\Strikes":{"note":"","data":["801606D1 0000"],"options":null},"Low Gravity":{"note":"","data":["80195726 0001"],"options":null},"Slow Game":{"note":"","data":["8019572A 0001"],"options":null},"Stadium Modifier":{"note":"","data":["800DE7E5 00??"],"options":{"3 Rivers Stadium":"16","3com Park at Candle Stick Park":"06","Baltimore":"05","Bank One Ballpark":"03","Bush Stadium":"15","Cinergy Field":"12","Comiskey Park":"07","Coors Field":"08","Devil's Thumb Stadium":"1E","Dodger Stadium":"0F","Edison Into Field":"00","Fenway Park":"0A","Hubert Humphrey Metrodome":"1A","Jacobs Field":"0B","Kauffman Stadium":"0D","Milwaukee County Stadium":"04","Oakland Alameda Country Stadium":"10","Olympics Stadium":"09","Proplayer Stadium":"0C","Qualcomm Stadium at Jack Murphy Field":"11","Shea Stadium":"13","Skydome":"14","The Astrodome":"02","The Ball Park At Arlington":"01","The Kingdom":"0E","Tiger Stadium":"17","Tropicane Field":"18","Turner Field":"19","Veterans Stadium":"1B","Wrigley Field":"1C","Yankee Stadium":"1D"}}},"0A1667C7-293346A6-C:50":{"1 Win To Win\\Player 1":{"note":"","data":["D00C0983 0000","800C0983 0001"],"options":null},"1-Hit Death to Player 1\\Player 2":{"note":"","data":["D10B5EF0 42C8","810B5EF0 4080"],"options":null},"1-Hit Death to Player 2\\Player 1":{"note":"","data":["D10B60D4 42C8","810B60D4 4080"],"options":null},"Fight Forest Team":{"note":"Select Hardest Difficulty + Quest Mode","data":["810BF482 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["810B5EF0 42C8"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["810B60D4 42C8"],"options":null},"Invisibility\\Player 1":{"note":"","data":["810BF3A2 0001"],"options":null},"Join River Team":{"note":"Select Quest Mode","data":["810BF482 0001"],"options":null},"Needs 1 Win To Win\\Player 2":{"note":"","data":["D00C0985 0000","800C0985 0001"],"options":null},"P1 Never Wins\\Player 2":{"note":"","data":["800C0983 0000"],"options":null},"P2 Never Wins\\Player 1":{"note":"","data":["800C0985 0000"],"options":null},"Player 1 Has No Energy\\Player 2":{"note":"","data":["810B5EF0 C080"],"options":null},"Player 2 Has No Energy\\Player 1":{"note":"","data":["810B60D4 C080"],"options":null},"Unlock Titan Difficulty Level":{"note":"","data":["810BF4D2 0001"],"options":null}},"0A5D8F83-98C5371A-C:50":{"All Equipment Upgrades":{"note":"","data":["801E6F5D 0023","811E6FAA 201B","801E6F3C 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03DE37B 0000","801E6EF2 00??"],"options":{"Beneaf the Graveyard":"02","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Green Blobs":"71","Inside The Royal Palace of the Deku Kingdom 1":"4E","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House":"00","Outside Magic Hag's Potion Shop":"08","Outside The Royal Palace of the Deku Kingdom":"4A","Outside Tourist Information Southern Swamp":"06","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Waterfall Sothern Swamp":"7F"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801E6F72 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801E6F73 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801E6F74 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801E6F75 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801E6F76 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801E6F77 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801E6F65 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801E6F6B 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801E6F71 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Have Item Modifier":{"note":"","data":["801E6F70 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\All Masks":{"note":"","data":["811E6F78 3E39","811E6F7A 4745","811E6F7C 4032","811E6F7E 3A46","811E6F80 3842","811E6F82 4833","811E6F84 3C3D","811E6F86 373F","811E6F88 3634","811E6F8A 4341","811E6F8C 3B44","811E6F8E 4935"],"options":null},"Have\\Bombchu":{"note":"","data":["801E6F67 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801E6F66 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801E6F69 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801E6F68 0008"],"options":null},"Have\\Fire Arrow":{"note":"","data":["801E6F62 0002"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801E6F70 0010"],"options":null},"Have\\Have\\Ocarina of Time":{"note":"","data":["801E6F60 0000"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801E6F61 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801E6F6F 000F"],"options":null},"Have\\Ice Arrow":{"note":"","data":["801E6F63 0003"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801E6F6E 000E"],"options":null},"Have\\Light Arrow":{"note":"","data":["801E6F64 0004"],"options":null},"Have\\Magic Beans":{"note":"","data":["801E6F6A 000A"],"options":null},"Have\\Pictograph":{"note":"","data":["801E6F6D 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801E6F6C 000C"],"options":null},"Have\\QuestStatus Items":{"note":"","data":["801E6FAD 0005","811E6FAE F7CF"],"options":null},"Infinite\\Health":{"note":"","data":["811E6F26 03E7"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811E6F24 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"This is Infinite use of Bombs,Bombchus,Deku Sticks,Deku Nuts,Magic Beans,\u0026 Powder Kegs. But you must also put it's Have on to work.","data":["801E6F91 0063","50000801 0000","801E6F96 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801E6F29 0060","811E6F30 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811E6F2A 03E7"],"options":null},"Play As":{"note":"","data":["801E6F10 00??"],"options":{"- Fierce Deity Link":"00","Deku Link":"03","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03DE37B 0020","813F7658 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You have been warned.","data":["801E6F3C 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F30F6 0008","811E6F06 FFFD","D01F30F6 0004","811E6F06 0000","D01F30F6 0002","811E6F06 FFFE"],"options":null},"Use all C Buttons":{"note":"","data":["811EAE08 0000","811EAE0A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["803DE37A 0000","803F6BD5 0001","813F6BDA ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"0AA0055B-7637DF65-C:50":{"Infinite Time\\Basketball Gym":{"note":"","data":["8029F901 0042"],"options":null},"Infinite Time\\Cecil's Flying Toys":{"note":"","data":["802A5575 0042"],"options":null},"Infinite Time\\Flight Test Range":{"note":"","data":["802BA3A9 0042"],"options":null},"Infinite Time\\Slippery Slide":{"note":"","data":["802A7E8D 0042"],"options":null},"Infinite\\Atoms":{"note":"","data":["80159667 00C8"],"options":null},"Infinite\\Health":{"note":"","data":["80026DE3 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["80026DE7 0063"],"options":null},"Infinite\\Quarks":{"note":"","data":["80159663 00C8"],"options":null},"Tennis CPU Can't Score":{"note":"","data":["801D7B4B 0000"],"options":null}},"0AC61D39-ABFA03A6-C:50":{"Access all items In Inventory":{"note":"","data":["8111F8BE 1FFF"],"options":null},"Tickets\\Gold":{"note":"","data":["8111F8C8 FFFF"],"options":null},"Tickets\\Red":{"note":"","data":["8111F8C6 FFFF"],"options":null}},"0ADAECA7-B17F9795-C:45":{"Always Have Retreat \u0026 Elem Pedra Opened":{"note":"Do not put this on until in-game or the game will freeze.","data":["D01A1C92 0000","811A1C92 0003"],"options":null},"Day Always 00":{"note":"","data":["811F108C 0000"],"options":null},"Finish All Levels":{"note":"","data":["81196AA6 5454","81196AA8 5140","81196AAA 4555","81196AAC 9514","81196AAE 5515"],"options":null},"Hour Always":{"note":"","data":["80196A4D 00??"],"options":{"(0 Hour - 24:00 PM - Midnight)":"00","(01:00 AM)":"01","(02:00 AM)":"02","(03:00 AM)":"03","(04:00 AM)":"04","(05:00 AM)":"05","(06:00 AM)":"06","(07:00 AM)":"07","(08:00 AM)":"08","(09:00 AM)":"09","(10:00 AM)":"0A","(11:00 AM)":"0B","(12:00 PM - Noon)":"0C","(13:00 - 1 PM)":"0D","(14:00 - 2 PM)":"0E","(15:00 - 3 PM)":"0F","(16:00 - 4 PM)":"10","(17:00 - 5 PM)":"11","(18:00 - 6 PM)":"12","(19:00 - 7 PM)":"13","(20:00 - 8 PM)":"14","(21:00 - 9 PM)":"15","(22:00 - 10 PM)":"16","(23:00 - 11 PM)":"17"}},"Infinite Goth":{"note":"","data":["81196A8E FFFF"],"options":null},"Magnus\\Infinite HP":{"note":"","data":["81193C30 03E7"],"options":null},"Magnus\\Level 99":{"note":"","data":["80193C2B 0063"],"options":null},"Magnus\\Max Agi":{"note":"","data":["81193C3C 03E7"],"options":null},"Magnus\\Max Dex":{"note":"","data":["81193C3E 03E7"],"options":null},"Magnus\\Max HP":{"note":"","data":["81193C2E 03E7"],"options":null},"Magnus\\Max Int":{"note":"","data":["81193C38 03E7"],"options":null},"Magnus\\Max Mem":{"note":"","data":["81193C3A 03E7"],"options":null},"Magnus\\Max Str":{"note":"","data":["81193C34 03E7"],"options":null},"Magnus\\Max Vit":{"note":"","data":["81193C36 03E7"],"options":null},"Max Goth":{"note":"","data":["81196A8C 0098","81196A8E 967F"],"options":null},"Open All Paths":{"note":"","data":["81196AA0 01FF","81196AA2 677F","81196AA4 FCFF"],"options":null}},"0B58B8CD-B7B291D2-C:50":{"Have Alien Artifact":{"note":"","data":["8004DC8F 0001"],"options":null},"Infinite Ammo All Weapons":{"note":"","data":["50001102 0000","81048176 8000"],"options":null},"Infinite\\Fuel":{"note":"","data":["8004E46C 0050"],"options":null},"Infinite\\Greece":{"note":"","data":["81052B48 0098","81052B4A 967F"],"options":null},"Infinite\\Health":{"note":"","data":["8004DD1C 0002"],"options":null},"Item Modifier":{"note":"","data":["8004DC7F ????"],"options":{"All Items":"FFFF","Crank":"0040","Hangar Key":"0400","Heirglyph Map Piece":"0100","Howitzer Shells":"0002","Nothing":"0000","Windmill Cog":"0080"}},"Level Select":{"note":"","data":["80047FC3 00??"],"options":{"America":"03","Comet":"05","Greece":"01","Java":"02","Siberia":"04"}},"No Humans Killed":{"note":"","data":["8104819A 0000"],"options":null},"Press L To Wall Over Water, Climb Hills":{"note":"","data":["D0047609 0020","8104DD02 0808"],"options":null},"Weapon Select\\1st Position":{"note":"","data":["80048168 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\2nd Position":{"note":"","data":["80048169 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\3rd Position":{"note":"","data":["8004816A 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\4th Position":{"note":"","data":["8004816B 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\5th Position":{"note":"","data":["8004816C 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\6th Position":{"note":"","data":["8004816D 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\7th Position":{"note":"","data":["8004816E 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\8th Position":{"note":"","data":["8004816F 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}}},"0B6B4DDB-9671E682-C:45":{"Cheats Enabled Modifier":{"note":"","data":["8008F840 ????"],"options":{"Anyway (Race Circuits Backwards)":"0400","Big Wheels (Big Foot Cars)":"0040","Car Radio (Remote Control Cars)":"0100","Chopper (Top Down View)":"0200","Easy Money (You Get 1":"0008","Extra Resolution (Able To Change Resolution In Options Screen)":"0800","Fast Bucks (You Get 250":"0004","Skywalker (Hover Cars)":"0080","Smurfing (High Pitched Voices)":"0020","Trophies (Second And Third Championships Wins)":"0010"}},"Have\\Access All Trophies":{"note":"Also gives you all extra features in quick race \u0026 Trophy mode","data":["800BA9EB 0007","800BABFF 0007"],"options":null},"Have\\Always 1st":{"note":"","data":["800C1ED1 0001","800C1ED3 0001"],"options":null},"Have\\Easy Win":{"note":"Right After Start,Go, Quit Race, And you Have Won","data":["800BABFD 000A"],"options":null},"Have\\Infinite Max Cash":{"note":"","data":["810BABF4 3AFF","810BABF6 F454"],"options":null},"Have\\Infinite Supply Of Super Tires":{"note":"For All Cars","data":["5000220C 0000","810BACA8 0F0F","5000220C 0000","810BACAA 0F0F"],"options":null},"Have\\Lots Of Seasons":{"note":"","data":["810BABFA 03E7"],"options":null},"Have\\Max Race Points":{"note":"","data":["800BAC0E 00FF"],"options":null},"Have\\Max Upgrade":{"note":"For All Cars","data":["5000220C 0200","810BACA6 0270"],"options":null},"Race Options\\Laps To Race Select":{"note":"","data":["800A4599 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Race Options\\Race Direction Select":{"note":"","data":["800A4551 00??"],"options":{"Mirrored Normal":"02","Mirrored Reverse":"03","Normal":"00","Reverse":"01"}},"Race Options\\Track Select":{"note":"","data":["8008F9AD 00??"],"options":{"Area 51":"04","Chateau":"07","Docklands":"08","Lumber Mill":"03","Oilfields":"05","Rocket Base":"00","Ski Resort":"02","Temple":"01","Titus Park":"09","Tudor Village":"06"}},"Race Options\\View Select":{"note":"Select your View and then at start of Race press C-Up Button","data":["D00C20B1 0000","800C20C1 00??"],"options":{"Behind View":"01","Distant Behind View":"0B","Further Behind View":"02","Helicopter View":"FF","Inside Car":"00"}},"Special Category\\A Car [Mind Star 600]":{"note":"","data":["810BADDE 3D70","810BADE0 0F0F","810BADE2 0F0F"],"options":null},"Special Category\\B Car [Vertige Stallion]":{"note":"","data":["800BAD66 2378","810BAD68 0F0F","810BAD6A 0F0F"],"options":null},"Special Category\\C Car [Mind Star 200R]":{"note":"","data":["810BACD6 0A78","810BACD8 0F0F","810BACDA 0F0F"],"options":null}},"0B93051B-603D81F9-C:45":{"All 52 Gold Gems Collected":{"note":"","data":["8016F540 0003","8016F541 007E","8016F542 00FF","8016F543 00EF","8016F544 00FF","8016F545 007F","8016F546 00FF","8016F547 00FC"],"options":null},"All Stages \u0026 Chapters Unlocked":{"note":"","data":["8016F548 003B"],"options":null},"Infinite Health\\Marina":{"note":"","data":["810ED0E0 03E8"],"options":null},"Infinite Health\\Teran":{"note":"","data":["810F1D60 03E8"],"options":null},"Infinite\\Max Red Gems":{"note":"","data":["81175B66 270F"],"options":null},"Level Select":{"note":"To access this anytime during game, press L+R+Z to enable the menu. Press D-Pad Up / Down to move through the menu, D-Pad Left / Right to change level digits and then press Start to enter level. Don not do this whhile in pause mode (Start Button Pause) or the game will freeze.","data":["D10BC4E8 2030","800BC4E1 0004"],"options":null}},"0C02B3C5-9E2511B8-C:45":{"Widescreen":{"note":"","data":["8100F8C2 4036","8101E426 4036"],"options":null}},"0C41F9C2-01717A0D-C:46":{"Have 1 Star\\Abdul":{"note":"","data":["80307433 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["8030742F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80307432 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80307431 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80307434 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80307430 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["8030742E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80307435 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80307436 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["80209981 0000","802048A3 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802048A7 0000","8020B849 0000"],"options":null},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EF67B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0209837 0000","80209837 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020B6FF 0000","8020B6FF 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810ADBDC 3F80"],"options":null}},"0C581C7A-3D6E20E4-C:4A":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D51D0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112CD0E 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800EAFC8 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D51B0 0001","50001701 0000","800D51B8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D5440 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D547B 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D51A9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D51AA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D51AB 0003"],"options":null}},"0C5EE085-A167DD3E-C:45":{"Activate Cheat":{"note":"","data":["810A63C6 F5FF"],"options":null},"Arabian Flights\\Infinite Time":{"note":"","data":["810A593E FFFF"],"options":null},"Arabian Flights\\Max Tickets":{"note":"","data":["810A5930 FFFF","810A5932 FFFF","810A5934 FFFF","810A5936 FFFF","810A5938 FFFF","810A593A FFFF","810A593C FFFF"],"options":null},"Clowney Island\\Infinite Time":{"note":"","data":["810A590E FFFF"],"options":null},"Clowney Island\\Max Tickets":{"note":"","data":["810A5900 FFFF","810A5902 FFFF","810A5904 FFFF","810A5906 FFFF","810A5908 FFFF","810A590A FFFF","810A590C FFFF"],"options":null},"Food Fright\\Infinite Time":{"note":"","data":["810A595E FFFF"],"options":null},"Food Fright\\Max Tickets":{"note":"","data":["810A5950 FFFF","810A5952 FFFF","810A5954 FFFF","810A5956 FFFF","810A5958 FFFF","810A595A FFFF","810A595C FFFF"],"options":null},"Have All\\Machine Parts":{"note":"","data":["810A5960 FFFF"],"options":null},"Have All\\Vechicles":{"note":"","data":["810A5968 FFFF"],"options":null},"Infinite\\Max Health":{"note":"","data":["8109F702 000C","8109F706 000C"],"options":null},"Max\\Ticket Switches":{"note":"","data":["810A59A2 00C8"],"options":null},"Max\\Tinker Toys":{"note":"","data":["810A599E 270F"],"options":null},"Mine Blowing\\Infinite Time":{"note":"","data":["810A592E FFFF"],"options":null},"Mine Blowing\\Max Tickets":{"note":"","data":["810A5920 FFFF","810A5922 FFFF","810A5924 FFFF","810A5926 FFFF","810A5928 FFFF","810A592A FFFF","810A592C FFFF"],"options":null},"Paint Misbehaving\\Infinite Time":{"note":"","data":["810A591E FFFF"],"options":null},"Paint Misbehaving\\Max Tickets":{"note":"","data":["810A5910 FFFF","810A5912 FFFF","810A5914 FFFF","810A5916 FFFF","810A5918 FFFF","810A591A FFFF","810A591C FFFF"],"options":null},"Pyramid Scheme\\Infinite Time":{"note":"","data":["810A594E FFFF"],"options":null},"Pyramid Scheme\\Max Tickets":{"note":"","data":["810A5940 FFFF","810A5942 FFFF","810A5944 FFFF","810A5946 FFFF","810A5948 FFFF","810A594A FFFF","810A594C FFFF"],"options":null},"Whoopie World\\Infinite Time":{"note":"","data":["810A58FE FFFF"],"options":null},"Whoopie World\\Max Tickets":{"note":"","data":["810A58F0 FFFF","810A58F2 FFFF","810A58F4 FFFF","810A58F6 FFFF","810A58F8 FFFF","810A58FA FFFF","810A58FC FFFF"],"options":null}},"0C814EC4-58FE5CA8-C:45":{"Infinite Health":{"note":"","data":["81086BCA 0038","800BAF97 0007"],"options":null}},"0CAD17E6-71A5B797-C:50":{"All Tanx \u0026 All Campaigns":{"note":"","data":["50001370 0000","81120546 FFFF","50001370 0000","8112054A FFFF"],"options":null},"All Weapons \u0026 Invulnerable":{"note":"","data":["81121420 0101"],"options":null},"Infinite Edge Power":{"note":"","data":["811A8D20 000A","8111AD08 000A","811AC1E4 000A","811ACB7E 000A","811AAEB4 000A","811AE378 000A","811AD514 000A","811AA51C 000A"],"options":null},"Infinite Tank Credits":{"note":"","data":["8124AB3E 03E7"],"options":null},"Inincibility":{"note":"","data":["81121420 0100"],"options":null},"Level Select":{"note":"","data":["811150B8 0001"],"options":null},"Score Aid":{"note":"","data":["8124A152 FC9A"],"options":null}},"0CB81686-5FD85A81-C:45":{"Away Team\\Always Has The Ball":{"note":"","data":["810590A8 0001","810590AA 0000"],"options":null},"Enable\\Stadium\\4th And Incas":{"note":"","data":["800591A0 00FF"],"options":null},"Enable\\Stadium\\Alpha Blitz":{"note":"","data":["8005919E 00FF"],"options":null},"Enable\\Stadium\\Cosmodome":{"note":"","data":["800591A2 00FF"],"options":null},"Enable\\Stadium\\Dodge City":{"note":"","data":["80059198 00FF"],"options":null},"Enable\\Stadium\\EA Sports":{"note":"","data":["800591A3 00FF"],"options":null},"Enable\\Stadium\\Gridiron":{"note":"","data":["8005919D 00FF"],"options":null},"Enable\\Stadium\\Maddenstein":{"note":"","data":["800591A1 00FF"],"options":null},"Enable\\Stadium\\New Orleans":{"note":"","data":["800591A6 00FF"],"options":null},"Enable\\Stadium\\Nile High":{"note":"","data":["8005919F 00FF"],"options":null},"Enable\\Stadium\\Salvage Field":{"note":"","data":["8005919C 00FF"],"options":null},"Enable\\Stadium\\San Diego":{"note":"","data":["800591A7 00FF"],"options":null},"Enable\\Stadium\\Tampa Bay":{"note":"","data":["800591A5 00FF"],"options":null},"Enable\\Stadium\\Tib Bros":{"note":"","data":["8005919A 00FF"],"options":null},"Enable\\Stadium\\Tiberium":{"note":"","data":["8005919B 00FF"],"options":null},"Enable\\Stadium\\Tiburon":{"note":"","data":["800591A4 00FF"],"options":null},"Enable\\Stadium\\Xmas Rush":{"note":"","data":["80059199 00FF"],"options":null},"Enable\\Team\\All 60's":{"note":"","data":["800598CC 00FF"],"options":null},"Enable\\Team\\All 70's":{"note":"","data":["800598CD 00FF"],"options":null},"Enable\\Team\\All 80's":{"note":"","data":["800598CE 00FF"],"options":null},"Enable\\Team\\All 90's":{"note":"","data":["800598CF 00FF"],"options":null},"Enable\\Team\\Clows":{"note":"","data":["800598D7 00FF"],"options":null},"Enable\\Team\\Comets":{"note":"","data":["800598DF 00FF"],"options":null},"Enable\\Team\\EA Sports":{"note":"","data":["800598D3 00FF"],"options":null},"Enable\\Team\\Industrials":{"note":"","data":["800598DA 00FF"],"options":null},"Enable\\Team\\Junkyard Dogs":{"note":"","data":["800598D9 00FF"],"options":null},"Enable\\Team\\Madden 1999":{"note":"","data":["800598D0 00FF"],"options":null},"Enable\\Team\\Madden Millenium":{"note":"","data":["800598D1 00FF"],"options":null},"Enable\\Team\\Marshalls":{"note":"","data":["800598D5 00FF"],"options":null},"Enable\\Team\\Monsters":{"note":"","data":["800598DE 00FF"],"options":null},"Enable\\Team\\Mummies":{"note":"","data":["800598DC 00FF"],"options":null},"Enable\\Team\\NFL Millenium":{"note":"","data":["800598D2 00FF"],"options":null},"Enable\\Team\\Praetorians":{"note":"","data":["800598D8 00FF"],"options":null},"Enable\\Team\\Sugarbuzz":{"note":"","data":["800598DB 00FF"],"options":null},"Enable\\Team\\Tiburon":{"note":"","data":["800598D4 00FF"],"options":null},"Enable\\Team\\Toymakers":{"note":"","data":["800598D6 00FF"],"options":null},"Enable\\Team\\Vipers":{"note":"","data":["800598DD 00FF"],"options":null},"Have All Secret Codes In Menu":{"note":"","data":["81070788 FFFF","8107078A FFFF","8107078C FFFF","8107078E FFFF"],"options":null},"Home Team\\Always Has The Ball":{"note":"","data":["810590A8 0000","810590AA 0001"],"options":null},"Infinite\\Time-Outs Away Team":{"note":"","data":["8006FE6F 0003"],"options":null},"Infinite\\Time-Outs Home Team":{"note":"","data":["8006CE7F 0003"],"options":null},"Level 1\\200 Yards Of Total Offense Or More":{"note":"","data":["800707C1 0040"],"options":null},"Level 1\\3 Tackles Or More By One Player":{"note":"","data":["800707B7 0040"],"options":null},"Level 1\\Complete A 20 Yard Run Or Longer":{"note":"","data":["800707B1 0040"],"options":null},"Level 1\\Complete A 30 Yard Pass Or Longer":{"note":"","data":["800707B0 0040"],"options":null},"Level 1\\Create A Player And use Him In A Game":{"note":"","data":["800707BA 0040"],"options":null},"Level 1\\Defeat Green Bay In Snow At Lambeau Field":{"note":"","data":["800707B8 0040"],"options":null},"Level 1\\Defeat San Francisco In Rain At 3COM Park":{"note":"","data":["800707B9 0040"],"options":null},"Level 1\\Have A Minimium Of Three Players ON Team Catch One Pass":{"note":"","data":["800707C3 0040"],"options":null},"Level 1\\Hold Your Oppnent to 7 Points Or Less In a Game":{"note":"","data":["800707B3 0040"],"options":null},"Level 1\\Intercept At Least One Pass":{"note":"","data":["800707BF 0040"],"options":null},"Level 1\\Kick A 40 Yard Field Goal Or Longer":{"note":"","data":["800707B5 0040"],"options":null},"Level 1\\Kick A 40 Yard Punt Or Longer":{"note":"","data":["800707B6 0040"],"options":null},"Level 1\\Play A Exhibition Game In A QTR Length Other Than 5 Minutes":{"note":"","data":["800707BB 0040"],"options":null},"Level 1\\Play And Win One Game of The Tournment":{"note":"","data":["800707C2 0040"],"options":null},"Level 1\\Play a Exhibition Game In A Stadium Other Than The Default One":{"note":"","data":["800707BE 0040"],"options":null},"Level 1\\QB Passes For Two TDS Or More":{"note":"","data":["800707BC 0040"],"options":null},"Level 1\\Recover At Least One Fumble":{"note":"","data":["800707C0 0040"],"options":null},"Level 1\\Sack The Opposing QB":{"note":"","data":["800707BD 0040"],"options":null},"Level 1\\Score 21 Points Or More With A QTR Length Of 6 Minutes Or Less":{"note":"","data":["800707B2 0040"],"options":null},"Level 1\\Throw 0 Interceptions In A Game":{"note":"","data":["800707B4 0040"],"options":null},"Level 2\\100 Recption Yards Or Greater By One Player":{"note":"","data":["800707C6 0040"],"options":null},"Level 2\\100 Yards Of Rushing Or Greater By One Player":{"note":"","data":["800707C5 0040"],"options":null},"Level 2\\2 TDS Or More By One Receiver":{"note":"","data":["800707D7 0040"],"options":null},"Level 2\\3 Field Goals Or More By One Player":{"note":"","data":["800707C8 0040"],"options":null},"Level 2\\6 Receptions Or Greater By One Player":{"note":"","data":["800707CE 0040"],"options":null},"Level 2\\Commit No Fumbles In A Game":{"note":"","data":["800707D2 0040"],"options":null},"Level 2\\Complete a 60 Yard Pass Or Longer":{"note":"","data":["800707D4 0040"],"options":null},"Level 2\\Do Not Allow Your QB To Be Sacked In A Game":{"note":"","data":["800707D3 0040"],"options":null},"Level 2\\Have A RB Who Rushes For 3 TDS Or More":{"note":"","data":["800707CF 0040"],"options":null},"Level 2\\Hold Opposing Team To 150 Yards Total Offense Or Less":{"note":"","data":["800707D0 0040"],"options":null},"Level 2\\Play And Win A Pro Bowl Game As The AFC Team":{"note":"","data":["800707D6 0040"],"options":null},"Level 2\\Play And Win A Pro Bowl Game As The NFC Team":{"note":"","data":["800707D5 0040"],"options":null},"Level 2\\Play And Win One Franchise Mode Game":{"note":"","data":["800707CA 0040"],"options":null},"Level 2\\Play And Win One Season Mode Game With Modified Divisions":{"note":"","data":["800707CC 0040"],"options":null},"Level 2\\Play And Win One Season Mode Game Without Modified Divisions":{"note":"","data":["800707CB 0040"],"options":null},"Level 2\\Play And Win Two Games In A Tournment With The Same Team":{"note":"","data":["800707CD 0040"],"options":null},"Level 2\\QB Passes 300 Yards Or More":{"note":"","data":["800707C7 0040"],"options":null},"Level 2\\QB Passes For 4 TDS Or More":{"note":"","data":["800707C9 0040"],"options":null},"Level 2\\QB Rushes For One Rushing TD Or More":{"note":"","data":["800707D1 0040"],"options":null},"Level 2\\Score 40 Points Or More Within A Quarter Length Of 6 Minutes Or Less":{"note":"","data":["800707C4 0040"],"options":null},"Level 3\\150 Reception Yards Or Greater By One Player":{"note":"","data":["800707D9 0040"],"options":null},"Level 3\\150 Yards Rushing Or Greater By One Player":{"note":"","data":["800707D8 0040"],"options":null},"Level 3\\2 Interceptions Or More By One Player":{"note":"","data":["800707DC 0040"],"options":null},"Level 3\\3 Knockdowns Or More By One PLayer":{"note":"","data":["800707DF 0040"],"options":null},"Level 3\\3 Sacks Or More By One Player":{"note":"","data":["800707DB 0040"],"options":null},"Level 3\\3 Tips Or More By One Player":{"note":"","data":["800707E0 0040"],"options":null},"Level 3\\400 Yards Of Total Defense Or More":{"note":"","data":["800707EA 0040"],"options":null},"Level 3\\5 Successful Field Goals Or More By One Player":{"note":"","data":["800707DE 0040"],"options":null},"Level 3\\8 Tackles Or More By One Player":{"note":"","data":["800707E9 0040"],"options":null},"Level 3\\Break 2 Different All-Time Records Or More In A Game":{"note":"","data":["800707E7 0040"],"options":null},"Level 3\\Commit No Penalties In A Game":{"note":"","data":["800707E6 0040"],"options":null},"Level 3\\Complete A 50 Yard Run Or Longer":{"note":"","data":["800707E5 0040"],"options":null},"Level 3\\Have A RB Rush For Over 100 Yards And 50 Yards Receiving":{"note":"","data":["800707EB 0040"],"options":null},"Level 3\\Play And Win A Superbowl In Franchise Mode":{"note":"","data":["800707E1 0040"],"options":null},"Level 3\\Play And Win A Superbowl In Season Mode":{"note":"","data":["800707E2 0040"],"options":null},"Level 3\\Play And Win An 8 Team Tournament":{"note":"","data":["800707E4 0040"],"options":null},"Level 3\\QB Who Passes For 400 Yards Or More":{"note":"","data":["800707DA 0040"],"options":null},"Level 3\\Recover 2 Fumbles Or More":{"note":"","data":["800707DD 0040"],"options":null},"Level 3\\Score 55 Points Or Greater":{"note":"","data":["800707E8 0040"],"options":null},"Level 3\\Successfully Kick 8 Extra Points Or More":{"note":"","data":["800707E3 0040"],"options":null},"Level 4\\200 Receptions Yards Or Greater By One Player":{"note":"","data":["800707ED 0040"],"options":null},"Level 4\\200 Yards Rushing Or Greater By One Player":{"note":"","data":["800707EC 0040"],"options":null},"Level 4\\25 Completions Or More By One QB":{"note":"","data":["800707F2 0040"],"options":null},"Level 4\\40 First Downs Or More":{"note":"","data":["800707FE 0040"],"options":null},"Level 4\\6 Successful Two Point Conversions Or More":{"note":"","data":["800707F1 0040"],"options":null},"Level 4\\650 Yards Of Total Offense Or More By One Team":{"note":"","data":["800707F9 0040"],"options":null},"Level 4\\7 Sacks Or More By One Player":{"note":"","data":["800707F8 0040"],"options":null},"Level 4\\Go Undefeated And Win A Superbowl In One Franchise Mode Season By Playing Every Game":{"note":"","data":["800707F3 0040"],"options":null},"Level 4\\Go Undefeated And Win A Superbowl In One Season Mode Season By Playing Every Game":{"note":"","data":["800707F4 0040"],"options":null},"Level 4\\Have A Minimum Of 7 Members Of Your Team Catch At Least 1 Pass":{"note":"","data":["800707F6 0040"],"options":null},"Level 4\\Have One Reciever With 150 RAC Yards Or Greater":{"note":"","data":["800707FA 0040"],"options":null},"Level 4\\Kick A Punt Of 55 Yards Or More":{"note":"","data":["800707FF 0040"],"options":null},"Level 4\\QB Who Passes For 500 Yards Or More":{"note":"","data":["800707EE 0040"],"options":null},"Level 4\\QB Who Rushes For 75 Yards Or More":{"note":"","data":["800707F5 0040"],"options":null},"Level 4\\Return A Punt For A Touchdown":{"note":"","data":["800707EF 0040"],"options":null},"Level 4\\Return An Interception For A Touchdown":{"note":"","data":["800707F0 0040"],"options":null},"Level 4\\Rush For 100 Yards Or More With 2 Different Running Backs":{"note":"","data":["800707FC 0040"],"options":null},"Level 4\\Rush The Ball 40 Time Or More With A QTR Length Of 6 Minutes Or Less":{"note":"","data":["800707FB 0040"],"options":null},"Level 4\\Win A 16 Team Tournament":{"note":"","data":["800707F7 0040"],"options":null},"Level 4\\Win By A Margin Of 50 Points Or More":{"note":"","data":["800707FD 0040"],"options":null},"Level 5\\200 Kick Return Yards Or Greater By One Player":{"note":"","data":["80070809 0040"],"options":null},"Level 5\\200 Punt Return Yards Or Greater By One Player":{"note":"","data":["80070806 0040"],"options":null},"Level 5\\250 Yards Rushing Or Greater By One Player":{"note":"","data":["80070813 0040"],"options":null},"Level 5\\3 Receivers With 100 Yards Or More Recieving":{"note":"","data":["80070805 0040"],"options":null},"Level 5\\Break 4 Different All-Time Records Or More In A Game":{"note":"","data":["8007080D 0040"],"options":null},"Level 5\\Complete A Run Play Of 80 Yards Or More":{"note":"","data":["8007080A 0040"],"options":null},"Level 5\\Convert 10 4th Down Conversions Or More":{"note":"","data":["8007080B 0040"],"options":null},"Level 5\\Convert To 3RD Down Conversions Or More":{"note":"","data":["80070812 0040"],"options":null},"Level 5\\Have A QB With A 100 Passing PCT While Throwing A Minimum Of 5 Passes":{"note":"","data":["8007080F 0040"],"options":null},"Level 5\\Have A QB With A Pass AVG Of 30 Yards Or Greater While Throwing At Least 5 Passes":{"note":"","data":["80070801 0040"],"options":null},"Level 5\\Have A RB With A Rushing AVG Of 20 Yards Or Greater While Rushing At least 3 Times":{"note":"","data":["80070804 0040"],"options":null},"Level 5\\Pass For 200 Yards Or More With 2 QBS":{"note":"","data":["80070803 0040"],"options":null},"Level 5\\Play And Win A Minimum Of Four Superbowls With The Same Team In Franchise Mode":{"note":"","data":["80070810 0040"],"options":null},"Level 5\\QB Rushes For 3 Touchdowns Or More":{"note":"","data":["80070807 0040"],"options":null},"Level 5\\QB With A Minimum Of 150 Yards Passing And 100 Yards Rushing":{"note":"","data":["8007080C 0040"],"options":null},"Level 5\\RB With A Minimum Of 100 Yards Receiving And 100 Yards Rushing":{"note":"","data":["80070811 0040"],"options":null},"Level 5\\Return A Kickoff For A Touchdown":{"note":"","data":["80070800 0040"],"options":null},"Level 5\\Score 80 Points Or Greater":{"note":"","data":["80070808 0040"],"options":null},"Level 5\\Shut Out Opposing Team With A QTR Length Of 5 Minutes":{"note":"","data":["80070802 0040"],"options":null},"Level 5\\Successfully Kick A FG Of 55 Yards Or More":{"note":"","data":["8007080E 0040"],"options":null},"No Time-Outs\\Away Team":{"note":"","data":["8006EF6F 0000"],"options":null},"No Time-Outs\\Home Team":{"note":"","data":["8006EC7F 0000"],"options":null},"Particle Illusions\\A":{"note":"","data":["8005F19B 00FE"],"options":null},"Particle Illusions\\B":{"note":"","data":["8005F199 0002"],"options":null},"Players\\Evil Crystal":{"note":"","data":["8005F183 000F"],"options":null},"Players\\Generic Black \u0026 White":{"note":"","data":["8005F233 0058"],"options":null},"Players\\Hallow":{"note":"","data":["8005F233 0047"],"options":null},"Players\\Jagged":{"note":"","data":["8005F180 0080"],"options":null},"Players\\Pixel":{"note":"","data":["8005F18D 0001"],"options":null},"Players\\Polygon":{"note":"","data":["8005F183 0001"],"options":null},"Players\\Super Red":{"note":"","data":["8005F43E 0002"],"options":null},"Press GS For More Time To Choose Play":{"note":"","data":["890723E6 0024"],"options":null},"Press L For First Down\\Player 1":{"note":"","data":["D00753DD 0020","81071B18 0001"],"options":null},"Press L For First Down\\Player 2":{"note":"","data":["D00753E5 0020","81071B18 0001"],"options":null},"Press L For First Down\\Player 3":{"note":"","data":["D00753ED 0020","81071B18 0001"],"options":null},"Press L For First Down\\Player 4":{"note":"","data":["D00753F5 0020","81071B18 0001"],"options":null},"Press R For Fourth Down\\Player 1":{"note":"","data":["D00753DD 0010","81071B18 0004"],"options":null},"Press R For Fourth Down\\Player 2":{"note":"","data":["D00753E5 0010","81071B18 0004"],"options":null},"Press R For Fourth Down\\Player 3":{"note":"","data":["D00753ED 0010","81071B18 0004"],"options":null},"Press R For Fourth Down\\Player 4":{"note":"","data":["D00753F5 0010","81071B18 0004"],"options":null},"Uniforms\\Bare":{"note":"","data":["8005F188 008F"],"options":null},"Uniforms\\Future":{"note":"","data":["8005F207 0033"],"options":null},"Uniforms\\Ghetto":{"note":"","data":["8005F188 001F"],"options":null}},"0CEBC4C7-0C9CE932-C:4A":{"Gun 4-Way Shot":{"note":"","data":["801279B3 0004"],"options":null},"Infinite Fuel":{"note":"","data":["811279B6 FFFF"],"options":null},"Infinite Shield":{"note":"","data":["81127958 0264"],"options":null},"Infinite Weapon\\1st Position":{"note":"","data":["811276CA 03E7"],"options":null},"Infinite Weapon\\2nd Position":{"note":"","data":["811276CE 03E7"],"options":null},"Infinite Weapon\\3rd Position":{"note":"","data":["811276D2 03E7"],"options":null},"Infinite Weapon\\4th Position":{"note":"","data":["811276D6 03E7"],"options":null},"Infinite Weapon\\5th Position":{"note":"","data":["811276DA 03E7"],"options":null},"Max Score":{"note":"","data":["811276B6 FFFF"],"options":null},"Stage Select On":{"note":"","data":["81127706 0001"],"options":null},"Weapon Modifier\\Gun Weapon":{"note":"","data":["801279B3 00??"],"options":{"2-Way Shot":"02","3-Way Shot":"03","4-Way Shot":"04","No Weapon":"00","Normal Shot":"01"}},"Weapon Modifier\\Rockets\\Slot 1":{"note":"","data":["801276C9 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\Rockets\\Slot 2":{"note":"","data":["801276CD 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\Rockets\\Slot 3":{"note":"","data":["801276D1 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}}},"0D93BA11-683868A6-C:50":{"Access all crystals":{"note":"","data":["50000701 0000","800D6EC0 0001","50001701 0000","800D6EC8 0007"],"options":null},"Access all difficulty levels":{"note":"100 yard hop, bumper crop bump \u0026 checkerboard chase","data":["50000301 0000","800D6E69 0003"],"options":null},"Access all enemy info":{"note":"","data":["50005101 0000","800D6F10 0002"],"options":null},"All Levels completed":{"note":"You must still beat boss's to continue onto next level","data":["50002B01 0000","800D6EE0 0002"],"options":null},"All Save Slots 100% Completed\\Save slot 1":{"note":"","data":["800ECD18 0064"],"options":null},"All Save Slots 100% Completed\\Save slot 2":{"note":"","data":["800ECD70 0064"],"options":null},"All Save Slots 100% Completed\\Save slot 3":{"note":"","data":["800ECDC8 0064"],"options":null},"Infinite Max Health":{"note":"","data":["800D718F 0006","800D7151 00C0"],"options":null},"Infinite Max Lives":{"note":"","data":["800D714F 0064"],"options":null},"Kirkby can fly unlimited":{"note":"","data":["8012EADF 00F0"],"options":null}},"0DD4ABAB-B5A2A91E-C:45":{"Infinite Max DK Tokens":{"note":"","data":["803A8FD5 0063"],"options":null},"Infinite Max Health":{"note":"","data":["807B6760 0008","807B675F 0003"],"options":null}},"0DE2CE36-D41D29E6-C:4A":{"Infinite\\Max Body Stats":{"note":"","data":["81181788 270F","811817C8 0063","50000C02 0000","81181790 270F","50000502 0000","811817C0 270F","50000602 0000","811817E8 270F","50000602 0000","811817F6 270F"],"options":null},"Infinite\\Max Health":{"note":"","data":["81181780 270F","81181782 270F"],"options":null},"Infinite\\Weapons \u0026 Items":{"note":"Do not put this on until in game. This gives you all Weapons, Items and Keys and infinite use of.","data":["50002508 0000","80181B48 0063","50000808 0000","80181C70 0063"],"options":null},"Level 999":{"note":"","data":["811817C8 270F"],"options":null},"Level and Battle Select":{"note":"The level and battle select screen can be accessed by pressing A at the main menu","data":["801CFB94 0005"],"options":null},"Press L To Levitate":{"note":"","data":["D005D8D1 0020","8124C710 3FCB"],"options":null}},"0E31EDF0-C37249D5-C:50":{"Away Team scores 0 Goals":{"note":"","data":["801AF437 0000"],"options":null},"Away Team scores 25 Goals":{"note":"","data":["801AF437 0019"],"options":null},"Home Team scores 0 Goals":{"note":"","data":["801AF433 0000"],"options":null},"Home Team scores 25 Goals":{"note":"","data":["801AF433 0019"],"options":null}},"0E652C21-F19AD3DE-C:4A":{"Unlock All Jurassic World Dinosaurs":{"note":"","data":["8114237C 0101","8114237E 0101","80142380 0001"],"options":null},"Unlock All Planet Mars Characters":{"note":"","data":["81142384 0101","81142386 0101","80142388 0001"],"options":null},"Unlock All Sea World Animals":{"note":"","data":["81142374 0101","81142376 0101","80142378 0001"],"options":null}},"0EC158F5-FB3E6896-C45":{},"0EC158F5-FB3E6896-C:45":{"Buster Parts Slot Select\\Slot 01":{"note":"","data":["80204E03 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 02":{"note":"","data":["80204E04 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 03":{"note":"","data":["80204E05 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 04":{"note":"","data":["80204E06 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 05":{"note":"","data":["80204E07 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 06":{"note":"","data":["80204E08 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 07":{"note":"","data":["80204E09 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 08":{"note":"","data":["80204E0A 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 09":{"note":"","data":["80204E0B 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 10":{"note":"","data":["80204E0C 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 11":{"note":"","data":["80204E0D 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 12":{"note":"","data":["80204E0E 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 13":{"note":"","data":["80204E0F 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 14":{"note":"","data":["80204E10 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 15":{"note":"","data":["80204E11 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 16":{"note":"","data":["80204E12 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 17":{"note":"","data":["80204E13 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 18":{"note":"","data":["80204E14 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 19":{"note":"","data":["80204E15 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 20":{"note":"","data":["80204E16 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 21":{"note":"","data":["80204E17 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 22":{"note":"","data":["80204E18 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 23":{"note":"","data":["80204E19 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 24":{"note":"","data":["80204E1A 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 25":{"note":"","data":["80204E1B 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 26":{"note":"","data":["80204E1C 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 27":{"note":"","data":["80204E1D 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 28":{"note":"","data":["80204E1E 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 29":{"note":"","data":["80204E1F 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 30":{"note":"","data":["80204E20 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 31":{"note":"","data":["80204E21 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 32":{"note":"","data":["80204E22 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 33":{"note":"","data":["80204E23 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 01":{"note":"","data":["80204E00 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 02":{"note":"","data":["80204E01 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 03":{"note":"","data":["80204E02 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Freeze Timer at 00:00":{"note":"","data":["811BC3F4 0000","811BC3F6 0000"],"options":null},"Have\\All Special Weapons":{"note":"With this code, Roll is the one that has to equip the weapons before you can use them.","data":["81205640 FFFF"],"options":null},"Have\\Normal Items":{"note":"","data":["81205650 FFFF","81205652 FFFF","81205654 FFFF","81205656 FFFF"],"options":null},"Have\\Special Items":{"note":"","data":["8120564C FFFF","8120564E FFFF"],"options":null},"Infinite\\Ammo":{"note":"","data":["81204EBA 0080","81204EC2 0010","81204ECA 0708","81204ED2 0018","81204EDA 0010","81204EE2 0708","81204EEA 0020","81204EF2 0020","81204EFA 0020","81204F02 0018","81204F0A 012C","81204F12 0258"],"options":null},"Infinite\\Health":{"note":"","data":["81204A1E 0050"],"options":null},"Infinite\\Zenny":{"note":"","data":["811BC404 0098","811BC406 967F"],"options":null},"Rapid Fire":{"note":"","data":["80204EB3 0002"],"options":null}},"0F1FA987-BFC1AFA6-C:45":{"99 Points Player 1":{"note":"","data":["8010C1EF 0063"],"options":null},"Access All\\Cars \u0026 Tracks":{"note":"","data":["8104ACA6 0001"],"options":null},"Access All\\Cups":{"note":"","data":["800542F3 0003","800542D5 0000","800542D6 0000","800542D7 0000","8005431F 0003","80054301 0000","80054302 0000","80054303 0000","8005434B 0003","8005432D 0000","8005432E 0000","8005432F 0000"],"options":null},"Always 1st":{"note":"","data":["8111565E 0001","81115666 0000","8110C1EE 03E7"],"options":null},"Drones Have No Weapons":{"note":"","data":["8111CD7E 0000"],"options":null},"Infinite Continues":{"note":"","data":["8110C1E2 0006"],"options":null},"Infinite Weapons\\Player 1":{"note":"","data":["81115648 0000","8111564A 00??","8111564E 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 2":{"note":"","data":["81117B10 0000","81117B12 00??","81117B16 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 3":{"note":"","data":["81119FD8 0000","81119FDA 00??","81119FDE 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 4":{"note":"","data":["8111C4A0 0000","8111C4A2 00??","8111C4A6 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Laps To Race":{"note":"","data":["8107DBCE 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Number Of Drones In The Race":{"note":"","data":["8110FEA6 00??"],"options":{"1 Drone":"01","2 Drones":"02","3 Drones":"03","4 Drones":"04","5 Drones":"05","6 Drones":"06","7 Drones":"07","8 Drones":"08","9 Drones":"09"}}},"0F743195-D8A6DB95-C:50":{"Access\\All Guns \u0026 Infinite Ammo":{"note":"","data":["81207AB4 007F","81207AB6 FFFF","81207B84 03E7","50000A02 0000","81207B70 03E7"],"options":null},"Access\\All Items":{"note":"Press L Button Where Items Are available","data":["D0209D85 0020","81207B8C 007F"],"options":null},"Infinite\\Armour":{"note":"","data":["81207B44 0001","81207B46 03E7"],"options":null},"Infinite\\Health":{"note":"","data":["81207B24 03E7"],"options":null},"Level Select":{"note":"","data":["811C6B4E 0001"],"options":null},"Max\\Attributes":{"note":"","data":["50000502 0000","81207B28 0007"],"options":null},"Max\\Experience":{"note":"","data":["81207B26 03E7"],"options":null}},"102888BF-434888CA-C:45":{"Have All\\Keys":{"note":"","data":["50000410 0000","8017E130 0063","50000410 0000","8017E138 0063"],"options":null},"Have All\\Moves":{"note":"","data":["50005306 0000","81183CE0 0100","50005306 0000","81183CE2 00FF"],"options":null},"Have All\\Moves At Skill Level 250":{"note":"","data":["50000E06 0000","80188F63 00FA","50001306 0000","80188FBD 00FA","50003006 0000","80189047 00FA"],"options":null},"Infinite\\Max Body Stats":{"note":"","data":["8117DC48 270F","8117DC88 0063","50000C02 0000","8117DC50 270F","50000502 0000","8117DC80 270F","50000602 0000","8117DCA8 270F","50000602 0000","8117DCB6 270F"],"options":null},"Infinite\\Max Health":{"note":"","data":["8117DC40 270F","8117DC42 270F"],"options":null},"Infinite\\Refresh Items":{"note":"","data":["50000D10 0000","8017E008 0063","50000C10 0000","8017E010 0063"],"options":null},"Infinite\\Weapons \u0026 Items":{"note":"","data":["50000610 0000","8017E0D0 0063","50000610 0000","8017E0D8 0063"],"options":null},"Level 999":{"note":"","data":["8117DC88 270F"],"options":null},"Level and Battle Select":{"note":"The level and battle select screen can be accessed by pressing A at the main menu","data":["801CC8C4 0005"],"options":null},"Press L To Levitate":{"note":"","data":["D005CE51 0020","8124A0B0 3FCB"],"options":null}},"112051D2-68BEF8AC-C:45":{"Have\\Max Gold":{"note":"","data":["50000401 0000","80277335 00FF"],"options":null},"Have\\Max Total XP":{"note":"","data":["50000401 0000","80278BAD 00FF"],"options":null},"Have\\Max Total XP Remaning to Start":{"note":"This will give you 16777215 Total XP Remaning to start with and after your 1st batle will allow you to buy your Max Stats","data":["50000401 0000","80278BB1 00FF"],"options":null},"Infinite\\99 Health Potions":{"note":"Do Not put this cheat on until you have collected your 1st Health Potion from the 1st Cheat or you will not be able to get into the Sub menu and Continue the game.","data":["802785CB 0063"],"options":null},"Infinite\\Max Health":{"note":"","data":["80278B98 001E"],"options":null}},"11223344-55667788-C:45":{},"1145443D-11610EDB-C:50":{"Extra Characters":{"note":"","data":["8007FA98 0001"],"options":null},"Fight With Bunny Slippers On":{"note":"","data":["81138914 0100"],"options":null},"Infinite Health Player 1":{"note":"","data":["8008B287 0064"],"options":null},"Infinite Health Player 2":{"note":"","data":["8008AEFF 0064"],"options":null},"Infinite\\Continues":{"note":"","data":["8015183B 0006"],"options":null},"Infinite\\Time":{"note":"","data":["8113C5BA 0B9E"],"options":null},"Infinite\\Time To Choose Character":{"note":"","data":["D0137ABE 0001","81137ABE 02A2"],"options":null},"Ned The Janitor":{"note":"","data":["8013C281 0001"],"options":null},"One Hit Death\\Player 1":{"note":"","data":["D008B287 0064","8008B287 0001"],"options":null},"One Hit Death\\Player 2":{"note":"","data":["D008AEFF 0064","8008AEFF 0001"],"options":null},"Play As Options\\Player 1":{"note":"","data":["8113C6E2 ????"],"options":{"AL-Rashid":"33FC","Big Guy with spikes and a skull staff":"34C4","Dregan":"358C","Executioner":"3334","Hellnight":"353C","Koyasha":"33AC","Lord Deimos":"335C","Monk dude with sword":"3514","Mordoskull":"344C","Namira":"449C","Pojo The Chicken":"3564","Ragnar":"33C4","Takeshi":"3424","Taria":"33D4","War Mech":"35B4","Xiao Lang":"3474"}},"Play As Options\\Player 2":{"note":"","data":["8113C6DE ????"],"options":{"AL-Rashid":"33FC","Big Guy with spikes and a skull staff":"34C4","Dregan":"358C","Executioner":"3334","Hellnight":"353C","Koyasha":"33AC","Lord Deimos":"335C","Monk dude with sword":"3514","Mordoskull":"344C","Namira":"449C","Pojo The Chicken":"3564","Ragnar":"33C4","Takeshi":"3424","Taria":"33D4","War Mech":"35B4","Xiao Lang":"3474"}}},"1185EC85-4B5A7731-C:50":{"Access\\All Levels \u0026 Superbikes":{"note":"","data":["50000304 0000","80183A0F 0001"],"options":null},"Access\\All Secret Characters":{"note":"This code is Fantastic, You have 12 characters to choose from to you race without any bike, just on foot","data":["50000C04 0000","80183A27 0001"],"options":null},"Access\\All Tracks":{"note":"","data":["50000BD8 0000","80182FC7 0001","50000CD8 0000","80182EF3 0001","50000CD8 0000","80182EF7 0001","50000CD8 0000","80182EFB 0001","50000CD8 0000","80182EFF 0001","50000CD8 0000","80182F03 0001","50000CD8 0000","80182F07 0001"],"options":null},"Infinite Lasers\\Player 1":{"note":"","data":["80170BD9 00C8"],"options":null},"Infinite Lasers\\Player 2":{"note":"","data":["80171241 00C8"],"options":null},"Infinite Lasers\\Player 3":{"note":"","data":["801718A9 00C8"],"options":null},"Infinite Lasers\\Player 4":{"note":"","data":["80171F11 00C8"],"options":null},"Infinite Nitros\\Player 1":{"note":"","data":["80170BA3 0004","80170BA7 0004"],"options":null},"Infinite Nitros\\Player 2":{"note":"","data":["8017120B 0004","8017120F 0004"],"options":null},"Infinite Nitros\\Player 3":{"note":"","data":["80171873 0004","80171877 0004"],"options":null},"Infinite Nitros\\Player 4":{"note":"","data":["80171EDB 0004","80171EDF 0004"],"options":null},"Infinite Shield\\Player 1":{"note":"","data":["80170BCD 00C8"],"options":null},"Infinite Shield\\Player 2":{"note":"","data":["80171235 00C8"],"options":null},"Infinite Shield\\Player 3":{"note":"","data":["8017189D 00C8"],"options":null},"Infinite Shield\\Player 4":{"note":"","data":["80171F05 00C8"],"options":null},"[Screen Hud Clear]":{"note":"If you are using a Plugin other then Jabos 1.5 and can not see through the Thick Hud on the Screen. then Let the game load 1st before Putting this code on,Or it will give an error and Freeze","data":["80092C6B 0004"],"options":null}},"11936D8C-6F2C4B43-C:50":{"Chunky\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FCA4C 0064"],"options":null},"Chunky\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FCA56 0064"],"options":null},"Chunky\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FCA54 0064"],"options":null},"Chunky\\All Golden Bananas\\DK Isle":{"note":"","data":["817FCA58 0064"],"options":null},"Chunky\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FCA4E 0064"],"options":null},"Chunky\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FCA52 0064"],"options":null},"Chunky\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FCA50 0064"],"options":null},"Chunky\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FCA4A 0064"],"options":null},"Chunky\\Infinite Coins":{"note":"","data":["817FCA0E 03E7"],"options":null},"Chunky\\Infinite Musical Instrument":{"note":"","data":["817FCA10 000A"],"options":null},"Diddy\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC932 0064"],"options":null},"Diddy\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC93C 0064"],"options":null},"Diddy\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC93A 0064"],"options":null},"Diddy\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC93E 0064"],"options":null},"Diddy\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC934 0064"],"options":null},"Diddy\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FC938 0064"],"options":null},"Diddy\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC936 0064"],"options":null},"Diddy\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC930 0064"],"options":null},"Diddy\\Infinite Coins":{"note":"","data":["817FC8F4 03E7"],"options":null},"Diddy\\Infinite Musical Instrument":{"note":"","data":["817FC8F6 000A"],"options":null},"Donkey Kong\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC8D4 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC8DE 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC8DC 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC8E0 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC8D6 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC8D8 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC8D2 03E7"],"options":null},"Donkey Kong\\Has Moves":{"note":"","data":["817FC890 0103"],"options":null},"Donkey Kong\\Have Weapon":{"note":"","data":["817FC892 0103"],"options":null},"Donkey Kong\\Infinite Ammo":{"note":"","data":["807FCB85 0096"],"options":null},"Donkey Kong\\Infinite Bananas\\Angry Aztec":{"note":"","data":["817FC89C 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Creepy Castle":{"note":"","data":["817FC8A6 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Crystal Caves":{"note":"","data":["817FC8A4 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\FactoryLevel":{"note":"","data":["817FC89E 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Fungi Forest":{"note":"","data":["817FC8A2 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Galleon Level":{"note":"","data":["817FC8FE 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Jungle Japes":{"note":"","data":["817FC89A 03E7"],"options":null},"Donkey Kong\\Infinite Coins":{"note":"","data":["817FC896 03E7"],"options":null},"Donkey Kong\\Infinite Musical Instrument":{"note":"","data":["817FC894 0103","817FC898 00FF"],"options":null},"Free Pass (Access All Areas)":{"note":"This is exactly what it says, You can walk through Any Locked Door,Gate, Or Area. Have Fun.","data":["8066D167 0001","8066D262 0001"],"options":null},"Infinite\\Camera Film":{"note":"","data":["807FCB89 0005"],"options":null},"Infinite\\Crystal Coconuts":{"note":"","data":["817FCB86 03E7"],"options":null},"Infinite\\Health":{"note":"","data":["817FCB8C 041F"],"options":null},"Infinite\\Orange Bombs":{"note":"","data":["807FCB81 0096"],"options":null},"Lanky\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC990 0064"],"options":null},"Lanky\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC99A 0064"],"options":null},"Lanky\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC998 0064"],"options":null},"Lanky\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC99C 0064"],"options":null},"Lanky\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC992 0064"],"options":null},"Lanky\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FC996 0064"],"options":null},"Lanky\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC994 0064"],"options":null},"Lanky\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC98E 0064"],"options":null},"Lanky\\Infinite Coins":{"note":"","data":["817FC952 03E7"],"options":null},"Lanky\\Infinite Musical Instrument":{"note":"","data":["817FC954 000A"],"options":null},"Tiny\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC9EE 0064"],"options":null},"Tiny\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC9E8 0064"],"options":null},"Tiny\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC9F6 0064"],"options":null},"Tiny\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC9FA 0064"],"options":null},"Tiny\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC9F0 0064"],"options":null},"Tiny\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FC9F4 0064"],"options":null},"Tiny\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC9F2 0064"],"options":null},"Tiny\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC9EC 0064"],"options":null},"Tiny\\Infinite Coins":{"note":"","data":["817FC9B0 03E7"],"options":null},"Tiny\\Infinite Musical Instrument":{"note":"","data":["817FC9B2 000A"],"options":null}},"12737DA5-23969159-C:4A":{"Always Normal Spirit\\Player 1":{"note":"","data":["8015D075 0032"],"options":null},"Always Normal Spirit\\Player 2":{"note":"","data":["8015D509 0032"],"options":null},"Always Normal Spirit\\Player 3":{"note":"","data":["8015D99D 0032"],"options":null},"Always Normal Spirit\\Player 4":{"note":"","data":["8015DE31 0032"],"options":null},"Always Special\\Player 1":{"note":"","data":["8015D0B5 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["8015D549 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["8015D9DD 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["8015DE71 0004"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 1":{"note":"","data":["8015D074 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 2":{"note":"","data":["8015D508 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 3":{"note":"","data":["8015D99C 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 4":{"note":"","data":["8015DE30 0064"],"options":null},"Have All Characters":{"note":"","data":["81094BDA FFFF"],"options":null},"Infinite Create-A-Wrestler Attribute Points":{"note":"","data":["8011069B 001E"],"options":null},"Max Attributes":{"note":"","data":["80110691 0032","80110693 0032","80110695 0032","80110697 0032","80110699 0032"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["8015D075 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["8015D509 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["8015D99D 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["8015DE31 00FF"],"options":null},"No Spirit\\Player 1":{"note":"","data":["8015D075 0000"],"options":null},"No Spirit\\Player 2":{"note":"","data":["8015D509 0000"],"options":null},"No Spirit\\Player 3":{"note":"","data":["8015D99D 0000"],"options":null},"No Spirit\\Player 4":{"note":"","data":["8015DE31 0000"],"options":null},"Specials Don't Run Out":{"note":"","data":["81120C14 2400"],"options":null},"Timer Is Always 00:00":{"note":"","data":["80164F2F 0000"],"options":null},"Ultimate Codes\\Player 1":{"note":"","data":["8015D074 0064"],"options":null},"Ultimate Codes\\Player 2":{"note":"","data":["8015D508 0064"],"options":null},"Ultimate Codes\\Player 3":{"note":"","data":["8015D99C 0064"],"options":null},"Ultimate Codes\\Player 4":{"note":"","data":["8015DE30 0064"],"options":null},"Weapon Select\\Player 1":{"note":"","data":["8115D0B6 0300","8115CC10 ????","8115CC12 0000","8015CCD0 0000"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 2":{"note":"","data":["8115D54A 0300","8115CC40 ????","8015CC42 0001","8015CCD1 0001"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 3":{"note":"","data":["8115D9DE 0300","8115CC70 ????","8015CC72 0002","8015CCD2 0002"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 4":{"note":"","data":["8115DE72 0300","8115CC98 ????","8115CC9A 0003","8015CCD3 0003"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}}},"132D2732-C70E9118-C:45":{"Always 1st\\Player 1":{"note":"This code doesn't record the win on the Time Trial Gold Challenge or the Weapons Gold Challenge.","data":["8109BC68 0001"],"options":null},"Freeze Checkpoint Timer":{"note":"","data":["810CDE92 0BCC"],"options":null},"Infinite Auto Pilot\\AG Systems\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BCE47 005B"],"options":null},"Infinite Auto Pilot\\Auricom\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC1E7 005B"],"options":null},"Infinite Auto Pilot\\Direx\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC817 005C"],"options":null},"Infinite Auto Pilot\\Feisar 1\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["811BC4FE 005B"],"options":null},"Infinite Auto Pilot\\Piranah\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC817 0060"],"options":null},"Weapon Select\\AG Systems":{"note":"","data":["811BCE3E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Auricom":{"note":"","data":["811BC1DE ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Direx":{"note":"","data":["811BC80E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Feisar 1":{"note":"","data":["811BC4F6 ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Piranah":{"note":"","data":["811BCB2E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"[In-Game Cheat Unlock]\\Cyclone Weapon":{"note":"","data":["80094F7E 00??"],"options":{"Off":"00","On":"01"}},"[In-Game Cheat Unlock]\\Infinite Ammo\\Player 1":{"note":"","data":["80091C24 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Ammo\\Player 2":{"note":"","data":["80093340 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Shield Energy\\Player 1":{"note":"","data":["80091C26 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Shield Energy\\Player 2":{"note":"","data":["80093342 0001"],"options":null},"[In-Game Cheat Unlock]\\[Ultimate Unlock All]":{"note":"This Unlocks All Levels, Tracks, Velocitar and Super Combo, Piranha 2 Ship, Cyclone Weapons Power Up and all 28 Gold Awards unlocked","data":["80091C25 0001","80091C2C 0020"],"options":null},"[Infinite Sheild]":{"note":"This cheat enabled fixes Av's popping up and spoiling you racing,it also gives you Infinite Sheild on all Cars,Tracks and Modes","data":["5000030C 0000","8109BCE2 0000","8109BD12 0000"],"options":null}},"13836389-265B3C76-C:45":{"Background\\Coloured Madden":{"note":"","data":["810596E0 0003"],"options":null},"Background\\Gray Madden":{"note":"","data":["810596E0 0000"],"options":null},"Background\\Green \u0026 Black Madden":{"note":"","data":["810596E0 0002"],"options":null},"Background\\Pink \u0026 Purple Madden":{"note":"","data":["810596E0 0004"],"options":null},"Background\\Pink Madden":{"note":"","data":["810596E0 0001"],"options":null},"Background\\Pinker Madden":{"note":"","data":["810596E0 0006"],"options":null},"Enable\\All Stadiums":{"note":"","data":["50000901 0000","80073510 00FF"],"options":null},"Enable\\All Teams":{"note":"","data":["50000901 0000","80073CF8 00FF"],"options":null},"Infinite\\Time Outs Away Team":{"note":"","data":["80084EE3 0003"],"options":null},"Infinite\\Time Outs Home Team":{"note":"","data":["80082D97 0003"],"options":null},"Invisible Players":{"note":"","data":["800545A0 0000","800545A0 0001","800545A0 0002","800545A0 0003"],"options":null},"No Time-Outs\\Away Team":{"note":"","data":["80084EE3 0000"],"options":null},"No Time-Outs\\Home Team":{"note":"","data":["80082D97 0000"],"options":null},"Sixty Frames":{"note":"Animations still choppy,especially the title screen.","data":["8007130D 0001"],"options":null}},"142A17AA-13028D96-C:50":{"Freeze Enemies":{"note":"","data":["8008EE3B 0012"],"options":null},"Gore Mode":{"note":"","data":["8008EE37 0012"],"options":null},"Infinite\\Lives":{"note":"","data":["8008EE33 0012"],"options":null},"Infinite\\Primery Weapons":{"note":"","data":["8008EE30 0012"],"options":null},"Infinite\\Secondary Weapons":{"note":"","data":["8008EE31 0012"],"options":null},"Infinite\\Solaris":{"note":"Solaris are included in code","data":["8008EE3D 0012"],"options":null},"Infinite\\Titans":{"note":"Titans are included in code","data":["8008EE3C 0012"],"options":null},"Infinite\\Weapon Energy":{"note":"","data":["8008EE32 0012"],"options":null},"Invulnerability":{"note":"","data":["8008EE35 0012"],"options":null},"Level Select":{"note":"Accesses all Missions \u0026 Battle mode","data":["8008EE3E 0012"],"options":null},"One Shot Enemies":{"note":"","data":["8008EE3A 0012"],"options":null},"Psychedelic Mode":{"note":"","data":["8008EE39 0012"],"options":null},"Stealth Mode":{"note":"","data":["8008EE34 0012"],"options":null},"Turbo Mode":{"note":"","data":["8008EE38 0012"],"options":null},"Wireframe Mode":{"note":"","data":["8008EE36 0012"],"options":null}},"147E0EDB-36C5B12C-C:4A":{"(Press GS)\\To Kill Enemy":{"note":"Don't Press GS after the Enemy is killed, only during the fight! and only use on Press GS Cheat at a time","data":["891F2454 0000","891F2456 0000","891F2458 0000","891F245A 0000"],"options":null},"(Press GS)\\To Refill Health":{"note":"Don't Press GS after the Enemy is killed, only during the fight!","data":["891F0F18 42C8","891F0F1A 0000"],"options":null},"(Press L)\\ For One Hit Kill":{"note":"Don't Press L after the Enemy is killed, only during the fight!","data":["D0149DD5 0020","811F2458 0000","D0149DD5 0020","811F245A 0000"],"options":null},"(Press R)\\For Level Warp":{"note":"Press Reset and enjoy!","data":["D00D5115 0015","800D5115 00??"],"options":{"Credits 1":"18","Credits 2":"19","Credits 3":"1A","Level 01":"2B","Level 02":"2F","Level 03":"33","Level 04":"37","Level 05":"3B","Level 06":"3D","Level 07":"40","Level 08":"43","Level 09":"46","Level 10":"49","Level 11":"4C","Level 12":"4F","Level 12.5":"51","Level 13":"53"}},"Secret Beta 2 Player Test Mode":{"note":"Press Reset and enjoy! Secret 2 Player Test Mode? The Second Player doesn't move ;(","data":["D00D5115 0015","800D5115 0055"],"options":null}},"151F79F4-8EEDC8E5-C:50":{"Access All Characters":{"note":"","data":["81193CA4 3F00","50000602 0000","81193C98 1F1F"],"options":null},"All Quests Completed":{"note":"","data":["80193CA4 003F","50000C01 0000","80193C98 001F"],"options":null},"Max Stats All Characters":{"note":"","data":["50000B24 0000","811896EC 1414","50000B24 0000","811896EE 1400"],"options":null}},"155B7CDF-F0DA7325-C:55":{"Beta Bottles Revenge Mode":{"note":"Bottles Revenge is a Beta mode from Banjo Tooie that the RWP team recently uncovered after an extraordinary amount of effort. Bottles the Spirit transforms into Bottles the Devil and posses enemies nearby and allows a second player hooked up to Pad 2 to play as that Posses character to try to foil Banjos Plans. As player one goes about its business, player two uses every enemy nearby to try to nab Banjo and take away some life. This mode is incredible, and you can control almost every enemy in the game: slot machines, flying creatures, uggers, zubbas...and this is just the beginning. (Congrats Rare Witch Project)","data":["80130172 0001","8008B4D1 0002"],"options":null},"Infinite\\Air":{"note":"","data":["8112FDC2 42C8"],"options":null},"Infinite\\Energy\\Banjo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","8012059F 000A","801205A0 000A"],"options":null},"Infinite\\Energy\\Banjo and Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","81120584 0A0A"],"options":null},"Infinite\\Energy\\Bee":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","80120593 000A","80120594 000A"],"options":null},"Infinite\\Energy\\Detonator":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","811205AE 0A0A"],"options":null},"Infinite\\Energy\\Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","811205A2 0A0A"],"options":null},"Infinite\\Energy\\Mumbo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","811205A8 0A0A"],"options":null},"Infinite\\Energy\\Snowball":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","80120587 0005"],"options":null},"Infinite\\Energy\\Stony":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","80120599 000A","8011B44A 000A"],"options":null},"Infinite\\Energy\\Submarine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","801205A5 000A","801205A6 000A"],"options":null},"Infinite\\Energy\\T-Rex Baby":{"note":"","data":["8011FFA9 0063","801205BF 000A","801205C0 000A"],"options":null},"Infinite\\Energy\\Washing Machine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","81120596 0A0A"],"options":null},"Instant Warp\\Options\\Cauldron Keep":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Cauldron Keep":"015D","Colosseum kickball arena":"0180","Crazy Castle Stockade Jump the hoops multi":"017C","Crazy Castle Stockade balloon burst multi":"017B","Dodgems":"0186","Grunty Industries packing game":"017D","Gun chamber":"0160","Gun room still":"016A","The gatehouse":"015E","Tower of Tragedy Quiz":"015F"}},"Instant Warp\\Options\\Cloud Cuckoo Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Central cavern":"013A","Cloud Cuckoo Land 1":"0136","Cloud Cuckoo Land 2":"0161","Humba wumba's wigwam":"0140","Inside the cheesewedge":"0138","Inside the pot o gold":"013D","Inside the trashcan":"0137","Mingy jongo's skull":"013F","Mumbo's skull":"013E","Trash can mini":"0185","Zubba's nest":"0139","Zubba's nest multi":"0188"}},"Instant Warp\\Options\\Glitter Gulch Mine":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Canary cave":"00DB","Chuffy's cab":"00D0","Crushing shed":"00CB","Flooded caves":"00CC","Fuel depot":"00CA","Generator caverns":"00D3","Gloomy caverns":"00D2","Humba":"00E9","Inside chuffy's boiler boss":"00D1","Mine":"00C7","Mumbo's hut":"00D9","Mumbo's skull":"0171","Ordnance Storage entrance":"0163","Ordnance Storage game":"0164","Ordnance Storage game Multi":"0165","Ordnance storage":"00DC","Power hut":"00D4","Power hut basement":"00CF","Prospectors hut":"00D8","Testing":"0170","Toxic gas cave":"00DA","Train station":"00D7","Water storage":"00CD","Water supply pipe":"0126","Waterfall cavern":"00CE","Wumba's wigwam":"00D5"}},"Instant Warp\\Options\\Grunty Industries":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Basement":"010F","Basement \"repair depot":"0110","Basement \"waste disposal\"":"0111","Elevator shaft":"0105","Floor 2":"0106","Floor 2 \"electromagnet chamber\"":"0107","Floor 3":"0108","Floor 3 \"boiler plant\"":"0109","Floor 3 \"packing room\"":"010A","Floor 4":"010B","Floor 4 \"cable room\"":"010C","Floor 4 \"clinkers cavern\"":"0162","Floor 4 \"quality control\"":"010D","Floor 5":"010E","Inside":"0101","Mumbo's skull":"0172","Outside":"0100","Sewer entrance":"0187","Train station":"0102","Trash compactor":"0104","Water supply pipe":"0125","Workers quarters":"0103"}},"Instant Warp\\Options\\Hailfire Peaks":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Boggy's igloo":"0131","Chilli billi":"012B","Chilly willy":"012C","Colosseum kickball stadium lobby":"012D","Ice train station":"012A","Icicle grotto":"0132","Icy side":"0128","Icy side still":"0168","Inside the volcano":"0133","Lava side":"0127","Lava train station":"0129"}},"Instant Warp\\Options\\Isle O Hags":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Cliff top":"0155","Cliff top Mumbo's skull":"0156","Heggy's egg shed":"0150","Jiggywiggy's temple":"0151","Pine Grove":"0154","Plateau":"0152","Plateau \"Honey B's Hive\"":"0153","Quagmire":"015C","Wooded Hollow":"014F","inside another digger tunnel":"015B","wasteland":"015A"}},"Instant Warp\\Options\\Jinjo Village":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Black Jinjo's House":"0146","Blue Jinjo's House":"0148","Bottles house":"0143","Brown Jinjo's House":"014A","Green Jinjo's House":"0145","Jinjo Village":"0142","King Jingalings throne room":"0144","Orange Jinjo's House":"014B","Purple Jinjo's House":"014C","Red Jinjo's House":"014D","White Jinjo's House":"014E","Yellow Jinjo's House":"0147"}},"Instant Warp\\Options\\Jolly Roger's Lagoon":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Ancient Swimming Baths":"00F4","Atlantis":"01A8","Blubber's wave race hire":"00FF","Electric Eels lair":"00F6","Inside the big fish":"00F8","Jolly Roger's Lagoon":"01A7","Jolly's":"00ED","Pawno's emporium":"00EE","Seabottom":"01A9","Seaweed Sanctum":"00F7","mumbo's skull":"00EF","sea bottom cavern":"0181","submarine multi":"0182","temple of the fishes":"00FA"}},"Instant Warp\\Options\\Mayahem Temple":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Code chamber":"00BC","Humba's Wigwam":"00B6","Inside Targitzans Temple":"0178","Jade Snake Grove":"00C4","Kickball Arena":"00C9","Mayan Kickball Arena":"017F","Multi":"0166","Mumbo's skull":"00B7","Prison Compound":"00B9","Still":"0167","Targitzan Temple Lobby":"0179","Targitzan's Slighty Sacred Temple":"0177","Targitzan's Temple Boss":"017A","The Temple":"00B8","Treasure Chamber":"00C5"}},"Instant Warp\\Options\\Not sure":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8012C390 ????","8012C393 0001"],"options":{"Bottles house":"0143","Bottles house still":"0169","HAG Inside":"018A","HAG1 Final Boss":"019A","Humba Wumba's wigwam 1":"0135","Humba Wumba's wigwam 2":"0157","Inside Chuffy's wagon":"0121","Inside the digger tunnel":"0141","Jingalings Zombified Palace":"019B","Lord woo fak fak":"00FC","Mr Patch":"00F9","Mumbo's Skull":"0134","Smuggler cavern":"01A6"}},"Instant Warp\\Options\\Spiral Mountain":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Banjo's house":"0173","Behind The Waterfall":"00AE","Grunty's Old Lair":"00AD","Top Of Castle":"00AF"}},"Instant Warp\\Options\\Terrydacty Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Bonfire caverns":"011B","Chompa's belly multi":"0183","Humba's Wigwam":"011E","Inside chompa's belly":"0123","Inside the mountain":"0116","Oogle boogles cave":"0115","River passage":"0117","Stomping plains":"011A","Styracosaurus family cave":"0118","Terry's nest":"0113","Terrydacty Land":"0112","Train station":"0114","Unga bunga's cave":"0119"}},"Instant Warp\\Options\\Witchy World":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Balloon burst game":"00E4","Cave of horrors":"00EA","Crazy castle lobby":"00E2","Crazy castle pump room":"00E3","Crazy castle stockade":"00E1","Crazy castle stockade \"sop\"":"013B","Dodgem challenge \"1 vs 1\"":"00DE","Dodgem challenge \"2 vs 1\"":"00DF","Dodgem challenge \"3 vs 1\"":"00E0","Dodgem dome lobby":"00DD","Haunted cavern":"00EB","Hoop hurry game":"00E5","Mumbo's skull":"0176","Saucer of Peril":"0124","Star spinner":"00E6","Star spinner \"sop\"":"013C","The inferno":"00E7","Train station":"00EC","Witcy World":"00D6"}},"Multi-Player\\Everyone Infinite All Eggs Multiplayer":{"note":"All blaster modes specifically.[ Thanks retroben, awesome work on this!]","data":["810F0BA8 0C04","810F0BAA 8580","81121600 3C08","81121602 8009","81121604 8108","81121606 E5C0","81121608 1100","8112160A 0010","8112160C 0000","8112160E 0000","81121610 3C08","81121612 8009","81121614 8D08","81121616 E5C0","81121618 0008","8112161A 4200","8112161C 0008","8112161E 4202","81121620 0008","81121622 4080","81121624 3C04","81121626 8000","81121628 0104","8112162A 4020","8112162C 3C04","8112162E 2406","81121630 2484","81121632 0064","81121634 AD04","81121636 31C4","81121638 3C04","8112163A 2408","8112163C 2484","8112163E FFFE","81121640 AD04","81121642 31CC","81121644 3C04","81121646 8013","81121648 8C84","8112164A 7B44","8112164C 0802","8112164E 4912","81121650 0000","81121652 0000"],"options":null},"Multi-Player\\Infinite Health\\Player 1":{"note":"","data":["8013A2B1 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 2":{"note":"","data":["8013A2B5 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 3":{"note":"","data":["8013A2B9 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 4":{"note":"","data":["8013A2BD 0064"],"options":null},"Play As":{"note":"To use this cheat, put the cheat on, then press L as you walk through a door to become that chosen character","data":["D108B284 0000","8012BD9C 00??"],"options":{"Banjo":"0A","Banjo and Kazooie":"01","Bee":"06","Detonator":"0F","Golden Goliath":"0E","Kazooie":"0B","Mumbo":"0D","Snowball":"02","Stony":"08","Submarine":"0C","T-rex baby":"12","T-rex daddy":"13","Truck":"10","Washing machine":"07"}}},"16931D74-65DC6D34-C:50":{"Debug Mode":{"note":"","data":["8006C4E3 0001"],"options":null},"Have\\All Keys":{"note":"","data":["80164229 000F"],"options":null},"Have\\All Weapons":{"note":"","data":["8016422B 007F"],"options":null},"Have\\Quad Damage":{"note":"","data":["811641BC 42C8"],"options":null},"Have\\Ring of Shadows":{"note":"","data":["81164228 ????"],"options":{"Off":"0000","On":"42C8"}},"Infinite\\Ammo":{"note":"","data":["50000402 0000","8016426D 0064","50000402 0000","8116426C 03E7"],"options":null},"Infinite\\Armor":{"note":"","data":["81164184 42C8"],"options":null},"Infinite\\Bio Suit":{"note":"","data":["811641C0 42C8"],"options":null},"Infinite\\Health":{"note":"","data":["81164170 42C8"],"options":null},"Multi\\Have All Weapons\\Player 1":{"note":"","data":["80166B8B 007F"],"options":null},"Multi\\Have All Weapons\\Player 2":{"note":"","data":["80166E5B 007F"],"options":null},"Multi\\Infinite Ammo\\Player 1":{"note":"","data":["50000402 0000","81166BCC 03E7"],"options":null},"Multi\\Infinite Ammo\\Player 2":{"note":"","data":["50000402 0000","81166E9C 03E7"],"options":null},"Multi\\Infinite Armor\\Player 1":{"note":"","data":["81166AE4 42C8"],"options":null},"Multi\\Infinite Armor\\Player 2":{"note":"","data":["81166DB4 42C8"],"options":null},"Multi\\Infinite Bio Suit\\Player 1":{"note":"","data":["81166B20 42C8"],"options":null},"Multi\\Infinite Bio Suit\\Player 2":{"note":"","data":["81166DF0 42C8"],"options":null},"Multi\\Infinite Health\\Player 1":{"note":"","data":["81166AD0 42C8"],"options":null},"Multi\\Infinite Health\\Player 2":{"note":"","data":["81166DA0 42C8"],"options":null},"Rapid Fire":{"note":"","data":["D00CB220 0020","801641AD 0001"],"options":null}},"1938525C-586E9656-C:45":{"Have All Dots":{"note":"","data":["8111D55E 03E7"],"options":null},"Infinite\\Health":{"note":"","data":["8111D55C 003C"],"options":null},"Infinite\\Lives":{"note":"","data":["8010A3D7 0009"],"options":null},"Max Score":{"note":"","data":["8111EF14 E0FF","8111EF16 05F5"],"options":null}},"19AB29AF-C71BCD28-C:50":{"Access\\All Star Spirits":{"note":"Disable this code as soon as you have reached level 8, or everything will be removed again","data":["8110E01E 0007"],"options":null},"Access\\Infinite Coins":{"note":"","data":["8110DD9C 03E7"],"options":null},"Access\\Infinite Star Spirits":{"note":"","data":["8010E020 0007"],"options":null},"Access\\Level 99":{"note":"","data":["8010DD99 0063"],"options":null},"Access\\Max Badge Points":{"note":"","data":["8010DD98 00??"],"options":{"127 Badge Points":"7F","60 Badge Points":"3C"}},"Access\\Max Star Energy":{"note":"","data":["8010E01E 0007"],"options":null},"Access\\Max Star Pieces":{"note":"","data":["8010DD9F 0063"],"options":null},"Access\\Max Star Points":{"note":"You will level up, everytime you get a Star point","data":["8010DDA0 0063"],"options":null},"Access\\Ultra Rank":{"note":"This will give you Goombario,Kooper,Bombette,Parakarry,Bow Watt, Sushie \u0026 Lakilester","data":["50000C08 0000","8010DDAD 0002","50000C08 0000","8010DDED 0002"],"options":null},"Access\\all members in your party":{"note":"","data":["50000C08 0000","8010DDAC 0001"],"options":null},"Infinite \u0026 Max HP + FP":{"note":"Do not enable this code before you have made a save, when a new game is started up.","data":["50000601 0000","8010DD91 0063"],"options":null},"Press L Button For Moon Jump":{"note":"","data":["D0071337 0020","8010DAF4 0043"],"options":null}},"19F55D46-73A27B34-C:45":{"Infinite Time":{"note":"","data":["8114C298 000A"],"options":null},"Pick Your Kombat Zone":{"note":"","data":["81257544 00??"],"options":{"Armory":"14","Bell Tower":"07","Bridge":"05","Courtyard":"02","Dead Pool":"11","Graveyard":"09","Hidden Portal":"10","Jade's Desert":"0E","Kahn's Kave":"0D","Kahn's Tower":"04","Kombat Temple":"08","Lair":"18","Living Forest":"15","Lost Bridge":"0F","Pit":"03","Pit 2":"1A","Pit 3":"0A","Pit Bottom":"1C","Portal":"17","River Kombat":"0B","Rooftop":"13","Scorpion's Lair":"0C","Soul Chamber":"06","Star Bridge":"1B","Street":"01","Subway":"00","Tomb":"19","Tower":"16","Wasteland":"12"}},"Player 1\\Aggressor Energy Bar":{"note":"","data":["801698E1 0030"],"options":null},"Player 1\\Energy is":{"note":"","data":["8016984D 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 1\\Infinite Run":{"note":"","data":["81169854 0030"],"options":null},"Player 1\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B5225 0020","81169874 5100","D02B5225 0020","8116987C 5100"],"options":null},"Player 1\\Play As":{"note":"","data":["8016983D 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Player 2\\Aggressor Energy Bar":{"note":"","data":["801698E3 0030"],"options":null},"Player 2\\Energy is":{"note":"","data":["80169B21 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 2\\Infinite Run":{"note":"","data":["81169B28 0030"],"options":null},"Player 2\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B522D 0020","81169876 5100","D02B522D 0020","8116987E 5100"],"options":null},"Player 2\\Play As":{"note":"","data":["80169AE1 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Unlock Secret":{"note":"","data":["80169EE1 0004"],"options":null}},"1A122D43-C17DAF0F-C:45":{"Have All Pikachus Magnemites":{"note":"","data":["801183BC 0000","801183BD 0000","801183BE 0000"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 1":{"note":"","data":["81285A18 03E7"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 2":{"note":"","data":["81286438 03E7"],"options":null},"Pokemon\\Inf Spells\\Player 1":{"note":"","data":["810AE580 FFFF","810AE582 FFFF","810AE5D4 FFFF","810AE5D6 FFFF","810AE628 FFFF","810AE62A FFFF"],"options":null},"Pokemon\\Inf Spells\\Player 2":{"note":"","data":["810AE79C FFFF","810AE79E FFFF","810AE7F0 FFFF","810AE7F2 FFFF","810AE844 FFFF","810AE846 FFFF"],"options":null},"Pokemon\\Max HP\\Player 1":{"note":"","data":["810AE586 03E7","810AE5DA 03E7","810AE62E 03E7"],"options":null},"Pokemon\\Max HP\\Player 2":{"note":"","data":["810AE7A2 03E7","810AE7F6 03E7","810AE84A 03E7"],"options":null},"Ultimate Code":{"note":"what's so ultimate about this code is it raises your Pokemon to its full potential. Even at Level 100, most Pokemon still have a way to go to raise their stats to the max. But with this code, you can instantly boost any Pokemon to its greatest potential!!!","data":["81171F3C FF01","81171F3E FF01","81171F40 FF01","81171F42 FF01","81171F44 FF01"],"options":null}},"1A7F70B5-00B7B9FD-C:45":{"Andrew Rynolds\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDFD8 00FF","50001001 0000","800EDFE8 00FF"],"options":null},"Andrew Rynolds\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE014 00FF"],"options":null},"Bam Margera\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE348 00FF","50001001 0000","800EE358 00FF"],"options":null},"Bam Margera\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE384 00FF"],"options":null},"Bucky Lasek\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDD44 00FF","50001001 0000","800EDD54 00FF"],"options":null},"Bucky Lasek\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDD80 00FF"],"options":null},"Chad Muska\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDEFC 00FF","50001001 0000","800EDF0C 00FF"],"options":null},"Chad Muska\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDF38 00FF"],"options":null},"Elissa Steamer\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE190 00FF","50001001 0000","800EE1A0 00FF"],"options":null},"Elissa Steamer\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE1CC 00FF"],"options":null},"Eric Koston\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDC68 00FF","50001001 0000","800EDC78 00FF"],"options":null},"Eric Koston\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDCA4 00FF"],"options":null},"Geoff Rowley\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE0B4 00FF","50001001 0000","800EE0C4 00FF"],"options":null},"Geoff Rowley\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE0F0 00FF"],"options":null},"Infinite Stat Upgrades \u0026 Deck Boards to Buy":{"note":"This allows you to ugrade you stats in Upgrades to the Max \u0026 Also to open the Boards in Decks For All Characters.","data":["800ED8F9 00FF","800ED905 00FF","800EDD45 00FF","800EDD51 00FF","800EDFE5 00FF","800EDFD9 00FF","800ED9D5 00FF","800ED9E1 00FF","800EDAB1 00FF","800EDABD 00FF","800EDB8D 00FF","800EDB99 00FF","800EDC69 00FF","800EDC75 00FF","800EDE21 00FF","800EDE2D 00FF","800EDEFD 00FF","800EDF09 00FF","800EE0B5 00FF","800EE0C1 00FF","800EE191 00FF","800EE19D 00FF","800EE26D 00FF","800EE279 00FF","800EE349 00FF","800EE355 00FF","800EE425 00FF","800EE431 00FF","800EE501 00FF","800EE50D 00FF","800EE5DD 00FF","800EE5E9 00FF","800EE6B9 00FF","800EE6C5 00FF","800EE795 00FF","800EE7A1 00FF"],"options":null},"Jamie Thomas\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE26C 00FF","50001001 0000","800EE27C 00FF"],"options":null},"Jamie Thomas\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE2A8 00FF"],"options":null},"Kareem Campbell\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDAB0 00FF","50001001 0000","800EDAC0 00FF"],"options":null},"Kareem Campbell\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDAEC 00FF"],"options":null},"Officer Dick\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE6B8 00FF","50001001 0000","800EE6C8 00FF"],"options":null},"Officer Dick\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE6F4 00FF"],"options":null},"Play As":{"note":"","data":["800E9D69 00??"],"options":{"Andrew Rynolds":"08","Bam Margera":"0C","Bucky Lasek":"05","Chad Muska":"07","Elissa Steamer":"0A","Eric Koston":"04","Geoff Rowley":"09","Jamie Thomas":"0B","Kareem Campbell":"02","Officer Dick":"10","Rodney Mullen":"06","Rune Glifberg":"03","Skater A":"0D","Skater B":"0E","Skater C":"0F","Steve Caballero":"01","Tony Hawk":"00","Wolverine":"11"}},"Play On Level":{"note":"This allows you to play on a level even if it isnt already open just choose \u0026 tick choose foundary or what ever level \u0026 play the one you selected","data":["800ED58F 00??"],"options":{"Airport":"04","Canada":"06","Custom":"09","Downhill":"08","Foundary":"00","Los Angeles":"01","Rio De Janeiro":"02","Skater Island":"05","Suburbia":"03","Tokyo":"07"}},"Rodney Mullen\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDE20 00FF","50001001 0000","800EDE30 00FF"],"options":null},"Rodney Mullen\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDE5C 00FF"],"options":null},"Rune Glifberg\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDB8C 00FF","50001001 0000","800EDB9C 00FF"],"options":null},"Rune Glifberg\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDBC8 00FF"],"options":null},"Skater A\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE424 00FF","50001001 0000","800EE434 00FF"],"options":null},"Skater A\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE460 00FF"],"options":null},"Skater B\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE500 00FF","50001001 0000","800EE510 00FF"],"options":null},"Skater B\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE53C 00FF"],"options":null},"Skater C\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE5DC 00FF","50001001 0000","800EE5EC 00FF"],"options":null},"Skater C\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE618 00FF"],"options":null},"Steve Caballero\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800ED9D4 00FF","50001001 0000","800ED9E4 00FF"],"options":null},"Steve Caballero\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDA10 00FF"],"options":null},"Timer Starts Off At 20 Mins":{"note":"","data":["800E9D64 FFFF"],"options":null},"Tony Hawk\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800ED8F8 00FF","50001001 0000","800ED908 00FF"],"options":null},"Tony Hawk\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800ED934 00FF"],"options":null},"Wolverine\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE794 00FF","50001001 0000","800EE7A4 00FF"],"options":null},"Wolverine\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE7D0 00FF"],"options":null}},"1AA05AD5-46F52D80-C:50":{"Choose Vehicle":{"note":"Make your Choice \u0026 then Press GS To Activate,But do not use with any other Press GS Cheat Codes.","data":["88366807 00??"],"options":{"Birdman":"06","Cannonball":"03","Gyrocopter":"02","Hang Glider":"00","Jumble Hopper":"05","Rocket Belt":"01","Skydiving":"04"}},"Infinite Fuel\\Gyrocopter":{"note":"","data":["80366989 0081"],"options":null},"Infinite Fuel\\Rocket Belt":{"note":"","data":["803669A9 0081"],"options":null},"Infinite Photos":{"note":"","data":["813545EE 0000"],"options":null},"Music Volume Select":{"note":"","data":["80250FA4 00??"],"options":{"Default Volume":"3F","Max Volume":"80","No Music":"00"}},"Time Always 00'00'10":{"note":"This Cheat code is for All Events","data":["803668B8 0001"],"options":null},"[Perfect Score] (All Class \u0026 Level's)":{"note":"To make these codes save to Game-Pak; just pick a level and lose, choose Next then Quit. Enable Disable Perfect Score then save and disable before using the Extra Games Perfect Score Cheat.","data":["50000330 0000","803683ED 0064","50000330 0000","80368A81 0064","50000330 0000","80368BD1 0064","50000330 0000","80369115 0064","50000330 0000","80369265 0064","50000330 0000","803693B5 0064","50000330 0000","803697A9 0064","50000330 0000","803698F9 0064","50000330 0000","80369A49 0064"],"options":null},"[Perfect Score] Extra Games (All Class \u0026 Level's)":{"note":"To make these codes save to Game-Pak; just pick a level and lose, choose Next then Quit. Enable Disable Perfect Score then save and disable before using the Extra Games Perfect Score Cheat.","data":["8036847D 0019","803685CD 0019","8036871D 0019","8036886D 0019","803684AD 0064","803684DD 0064","80368B11 0019","80368C61 0019","80368DB1 0019","80368F01 0019","80368B41 0064","80368B71 0064","803691A5 0019","803692F5 0019","80369445 0019","80369595 0019","803691D5 0064","80369205 0064"],"options":null}},"1B598BF1-ECA29B45-C:45":{"99 Accuracy":{"note":"","data":["80130B80 0063"],"options":null},"99 Bonus":{"note":"","data":["80130B87 0063"],"options":null},"Always Have\\F-15J Eagle":{"note":"","data":["8027CCEC 0010"],"options":null},"Always Have\\X-29A A.T.D.":{"note":"","data":["8027CCED 0020"],"options":null},"Extra Planes":{"note":"","data":["8127CCEC FFFF"],"options":null},"Extra Points":{"note":"","data":["D027A20C 0000","8027A20C 00FF"],"options":null},"Gun Select":{"note":"","data":["8027E023 00??"],"options":{"22mm":"0B","22mm BB Shot":"0A","Air Mines":"02","Chaff":"00","Fire":"14","Fire Arrow":"21","Fire Wave":"17","Fireball":"0D","Hunai Shot":"0C","Jammings":"01","Mahibishi":"03","Ninja Glitch":"16","Ninjabeam":"28","Phoenix":"1F","Rocket":"1E","Sabre":"0E","Star":"20","Tomahawk":"15"}},"Infinite\\99 Lives":{"note":"","data":["80348B98 0063"],"options":null},"Infinite\\Armor":{"note":"","data":["8127CFF4 44A0","8127CFF8 44A0"],"options":null},"Infinite\\Chaffs":{"note":"","data":["8027E017 000A"],"options":null},"Infinite\\Gun":{"note":"","data":["8027E110 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8027CFF5 00C8","8027CFF9 00C8"],"options":null},"Infinite\\Special Weapons":{"note":"","data":["8027E4D2 0002"],"options":null},"Rocket Squad":{"note":"","data":["8027E107 0001"],"options":null},"Tomahawk Squad":{"note":"","data":["8027E109 0001"],"options":null},"Ultra Fast Missile Recharge":{"note":"","data":["8027E300 0001"],"options":null}},"1CC06338-87388926-C:45":{"Enable All Characters":{"note":"","data":["8031B242 0000","8031B243 0004"],"options":null},"Have Max\\Powerups":{"note":"","data":["801CAE23 0002"],"options":null},"Have Max\\Weapon Power-Up":{"note":"","data":["801CAE27 0002"],"options":null},"Infinite\\Bullets":{"note":"For Henry","data":["801D3DA3 0006"],"options":null},"Infinite\\Gold":{"note":"","data":["811CAB42 2710"],"options":null},"Infinite\\Health":{"note":"","data":["811CAB3A 2710"],"options":null},"Infinite\\Health Young Henry":{"note":"","data":["D11C87F6 0010","813A5360 2800"],"options":null},"Infinite\\Items\\Crest Half A":{"note":"","data":["801CAB5B 000A"],"options":null},"Infinite\\Items\\Crest Half B":{"note":"","data":["801CAB5C 000A"],"options":null},"Infinite\\Items\\Cure Ampoule":{"note":"","data":["801CAB4E 000A"],"options":null},"Infinite\\Items\\Healing Kit":{"note":"","data":["801CAB4C 000A"],"options":null},"Infinite\\Items\\Magical Nitro":{"note":"","data":["801CAB55 000A"],"options":null},"Infinite\\Items\\Mandragora":{"note":"","data":["801CAB56 000A"],"options":null},"Infinite\\Items\\Moon Card":{"note":"","data":["801CAB58 000A"],"options":null},"Infinite\\Items\\Oldrey's Diary":{"note":"","data":["801CAB5A 000A"],"options":null},"Infinite\\Items\\Powerup":{"note":"","data":["801CAB4F 000A"],"options":null},"Infinite\\Items\\Purifying":{"note":"","data":["801CAB4D 000A"],"options":null},"Infinite\\Items\\Red Jewels":{"note":"","data":["801CAB44 0068"],"options":null},"Infinite\\Items\\Roast Beef":{"note":"","data":["801CAB4B 000A"],"options":null},"Infinite\\Items\\Roast Chicken":{"note":"","data":["801CAB4A 000A"],"options":null},"Infinite\\Items\\Rose Brooch":{"note":"","data":["801CAB5D 000A"],"options":null},"Infinite\\Items\\Sun Card":{"note":"","data":["801CAB57 000A"],"options":null},"Infinite\\Items\\The Contract":{"note":"","data":["801CAB54 000A"],"options":null},"Infinite\\Items\\Throwing Weapons":{"note":"","data":["801CAB45 0064"],"options":null},"Infinite\\Items\\Winch Lever":{"note":"","data":["801CAB59 000A"],"options":null},"Infinite\\Keys\\Archives":{"note":"","data":["801CAB5E 000A"],"options":null},"Infinite\\Keys\\Art Tower 1":{"note":"","data":["801CAB6A 000A"],"options":null},"Infinite\\Keys\\Art Tower 2":{"note":"","data":["801CAB6B 000A"],"options":null},"Infinite\\Keys\\Chamber":{"note":"","data":["801CAB63 000A"],"options":null},"Infinite\\Keys\\Clocktower A":{"note":"","data":["801CAB6F 000A"],"options":null},"Infinite\\Keys\\Clocktower B":{"note":"","data":["801CAB70 000A"],"options":null},"Infinite\\Keys\\Clocktower C":{"note":"","data":["801CAB68 000A"],"options":null},"Infinite\\Keys\\Clocktower D":{"note":"","data":["801CAB69 000A"],"options":null},"Infinite\\Keys\\Clocktower E":{"note":"","data":["801CAB6E 000A"],"options":null},"Infinite\\Keys\\Control Room":{"note":"","data":["801CAB6C 000A"],"options":null},"Infinite\\Keys\\Copper":{"note":"","data":["801CAB62 000A"],"options":null},"Infinite\\Keys\\Deck":{"note":"","data":["801CAB65 000A"],"options":null},"Infinite\\Keys\\Execution":{"note":"","data":["801CAB64 000A"],"options":null},"Infinite\\Keys\\Garden":{"note":"","data":["801CAB61 000A"],"options":null},"Infinite\\Keys\\Left Tower":{"note":"","data":["801CAB5F 000A"],"options":null},"Infinite\\Keys\\Rose Garden":{"note":"","data":["801CAB66 000A"],"options":null},"Infinite\\Keys\\Storeroom":{"note":"","data":["801CAB60 000A"],"options":null},"Infinite\\Keys\\Thorn":{"note":"","data":["801CAB67 000A"],"options":null},"Infinite\\Keys\\Wall":{"note":"","data":["801CAB6D 000A"],"options":null},"Infinite\\Specials\\Special 1":{"note":"","data":["801CAB47 000A"],"options":null},"Infinite\\Specials\\Special 2":{"note":"","data":["801CAB48 000A"],"options":null},"Infinite\\Specials\\Special 3":{"note":"","data":["801CAB49 000A"],"options":null},"Rapid Fire Gun (Henry-Hold B)":{"note":"For Henry, Hold B","data":["811C87F6 0040","801D3DA3 0006"],"options":null},"Selection Options\\Cut Scene Select":{"note":"With this code, you must use the appropiate level mod before you attemp to run these cut scenes. Not doing so will ruin the cut scene as the graphics will be glitched.","data":["801CAE93 0009","801CAE8B 00??"],"options":{"\"I Smell Poison\" From Underground Waterway":"08","(?)":"22","Actrise Appears Again Before Fight With Carrie":"56","Actrise Appears Again With Cousin Fernandes Before Fight With Carrie":"54","Actrise Appears In Castle Center":"52","Actrise Defeated By Carrie":"57","Ada":"30","Bleeding Statue":"12","Bull Awakens":"17","Castel Destruction":"27","Castle Destruction":"29","Castle Drawbridge Closes And Ortega Appears":"46","Castle Drawbridge Lowers":"03","Castle Gate Closes In Villa Upon Entering Villa":"09","Castle Keep Destructs":"1E","Character Enters Castle":"04","Character In Boat On Foggy Lake":"10","Cornell And Henry Part In Garden":"49","Cornell Meets Henry In Garden":"48","Cosmic Lights":"13","Cousin Fernandes Is Destroyed":"55","Death Is Destroyed":"45","Death(Grim Reaper)":"44","Explosion At Wall In Arena":"14","Explosion At Wall In Castle That Leads To Hidden Room":"15","Finds Hidden Path In Villa Basement":"35","Gate Opens In Forest Of Silence":"1A","Harpie":"38","Harpie Destroyed":"39","Lever \u0026 Gear In Castle":"37","Malus And Reinhardt On Horse":"2B","Malus Appears Again In Upstairs Room Of Castle":"16","Malus Appears For The First Time":"0E","Malus Is Saved By Reinhardt":"2A","Malus Leaves Garden":"0F","Malus On Flying Horse Outside Castle Keep":"1F","Meet Renon For The Last Time In Castle Keep.":"1B","Monster Dracula Appears":"51","One Of The Working Gears Cut Scenes":"19","Renon Appears For First Time":"0B","Rosa In Garden":"25","Rosa Returns":"2E","Scrolling Text About Castle And Henry":"31","Seal Removed From Wall In Arena":"11","Space Warp":"28","Spider People In Tunnel":"24","Thirsty Man":"47","This Cut Scene Runs Cut Scene 27 And 2E":"1C","Vampire In Basement":"33","Vampire In Main Entrance Hall Of Villa":"06","Vampire In Villa Basement Destroyed":"34","Village Vampire In Upstairs Villa":"0D","Vincent The Vampire":"18"}},"Selection Options\\Day Select For Adult Henry":{"note":"","data":["801CAB1F 00??"],"options":{"0 Days":"07","1 Day":"06","2 Days":"05","3 Days":"04","4 Days":"03","5 Days":"02","6 Days":"01","7 Days":"00"}},"Selection Options\\Level Select\\Inter":{"note":"","data":["801CAE7B 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Level Select\\Main":{"note":"","data":["801CAE79 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Status Select":{"note":"","data":["801CAB84 00??"],"options":{"Instant Death":"FF","Never Get Poisoned or Vamped":"00","Normal":"01","Poison":"08","Vamp":"04","Vamped \u0026 Poisoned":"0C"}},"Selection Options\\Weapon Select":{"note":"","data":["801CAB3F 00??"],"options":{"Axe":"04","Cross":"03","Knife":"01","Nothing":"00","Potion":"02"}},"Selection Options\\[Press F9 For Wolfman Can Use Weapons]":{"note":"For Cornell","data":["881CAB37 00??"],"options":{"No (Default)":"04","Yes":"02"}},"Stop Timer Input":{"note":"","data":["811CAB22 0001"],"options":null}},"1D4136F3-AF63EEA9-C:45":{"Always Have Wallet Size":{"note":"","data":["801189DA 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C681D 0010","81119C9E 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["80119821 00FF","80119C97 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,\u0026 then press reset (F1) you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D011BB71 0000","80119D4B 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["8002397C 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801189BE 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801189BF 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801189C0 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801189C1 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1A68 0005","801EE508 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801189DA 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801189DB 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801189D9 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189D4 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189DC 30FF","811189DE FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801189B0 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801189B6 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801189BC 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["801189B4 0009"],"options":null},"Have\\Bombs":{"note":"","data":["801189AE 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["801189B8 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["801189AD 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["801189AC 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["801189AF 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["801189B2 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["801189B5 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["801189B9 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["801189BA 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["801189B1 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["801189B7 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["801189BD 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["801189BB 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["801189B3 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["801189C7 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["801189E0 0007","801189E1 0007","801189E2 0007","801189E3 0007","801189E4 0007","801189E5 0007","801189E6 0007","801189E7 0007","801189E8 0007","801189E9 0007","801189EA 0007","801189F7 0009","801189F8 0009","801189F9 0009","801189FA 0009","801189FB 0009","80118A01 0009","80118A04 0009","801189FF 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801189CC 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["801189C6 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801189C5 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801189CA 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801189C4 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118968 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118971 0008","80118972 0001","80118974 0001","8011896B 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801189D2 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["81119D04 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["80119D0D 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D011BB11 0020","811D93D0 40CB","D011BB11 0000","811D9BF2 000D","801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119D41 00??"],"options":{"English":"00","French":"02","German":"01"}},"Level Select":{"note":"","data":["D01C6E35 0000","8111893A ????"],"options":{"?":"006C","Below The Phantom Gannon Boss":"000C","Dodongo's Cavern":"0004","Gerudo Training Ground":"0008","Inside Jabu-Jabu's Belly":"0027","Inside the Deku Tree":"0000","Lakeside Laboratory":"0042","Royal Family's Tomb":"002C","Shoadow Temple":"0036","Temple Of Time":"0052","Water Temple":"0010"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["80118A07 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["80118A09 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["81118966 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["81119D00 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L\\For Infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D011BB11 0020","811D9BF2 000D"],"options":null},"Press L\\To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D011BB11 0020","811D93D0 40CB"],"options":null},"Time of Day Modifier":{"note":"","data":["81118944 ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["801189C2 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["801189C3 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["80118976 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119B5A 0000","81119B5C 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"1D4136F3-AF63EEA9-C:50":{"Always Have Wallet Size":{"note":"","data":["801189DA 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C681D 0010","81119C9E 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["80119821 00FF","80119C97 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,\u0026 then press reset (F1) you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D011BB71 0000","80119D4B 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["8002397C 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801189BE 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801189BF 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801189C0 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801189C1 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1A68 0005","801EE508 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801189DA 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801189DB 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801189D9 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189D4 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["801189DD 00??","801189DE 00??","801189DF 00??"],"options":{"Off":"00","On":"FF"}},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801189B0 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801189B6 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801189BC 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["801189B4 0009"],"options":null},"Have\\Bombs":{"note":"","data":["801189AE 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["801189B8 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["801189AD 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["801189AC 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["801189AF 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["801189B2 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["801189B5 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["801189B9 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["801189BA 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["801189B1 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["801189B7 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["801189BD 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["801189BB 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["801189B3 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Have\\Status Heart Containers":{"note":"","data":["801189DC 00??"],"options":{"Off":"00","On":"30"}},"Infinite\\Arrows":{"note":"","data":["801189C7 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["801189E0 0007","801189E1 0007","801189E2 0007","801189E3 0007","801189E4 0007","801189E5 0007","801189E6 0007","801189E7 0007","801189E8 0007","801189E9 0007","801189EA 0007","801189F7 0009","801189F8 0009","801189F9 0009","801189FA 0009","801189FB 0009","80118A01 0009","80118A04 0009","801189FF 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801189CC 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["801189C6 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801189C5 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801189CA 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801189C4 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118968 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118971 0008","80118972 0001","80118974 0001","8011896B 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801189D2 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["81119D04 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["80119D0D 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D011BB11 0020","811D93D0 40CB","D011BB11 0000","811D9BF2 000D","801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119D41 00??"],"options":{"English":"00","French":"02","German":"01"}},"Level Select":{"note":"","data":["D01C6E35 0000","8111893A ????"],"options":{"?":"006C","Below The Phantom Gannon Boss":"000C","Dodongo's Cavern":"0004","Gerudo Training Ground":"0008","Inside Jabu-Jabu's Belly":"0027","Inside the Deku Tree":"0000","Lakeside Laboratory":"0042","Royal Family's Tomb":"002C","Shoadow Temple":"0036","Temple Of Time":"0052","Water Temple":"0010"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["80118A07 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["80118A09 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["81118966 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["81119D00 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L\\For Infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D011BB11 0020","811D9BF2 000D"],"options":null},"Press L\\To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D011BB11 0020","811D93D0 40CB"],"options":null},"Time of Day Modifier":{"note":"","data":["81118944 ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["801189C2 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["801189C3 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["80118976 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119B5A 0000","81119B5C 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"1E0E96E8-4E28826B-C:45":{"Level Select":{"note":"","data":["80046353 00??"],"options":{"Level 1":"01","Level 10":"0A","Level 11":"0B","Level 12":"0C","Level 13":"0D","Level 14":"0E","Level 15":"0F","Level 16":"10","Level 17":"11","Level 18":"12","Level 19":"13","Level 2":"02","Level 20":"14","Level 21":"15","Level 22":"16","Level 23":"17","Level 24":"18","Level 25":"19","Level 3":"03","Level 4":"04","Level 5":"05","Level 6":"06","Level 7":"07","Level 8":"08","Level 9":"09"}},"Stop Timer From Counting Down (All Levels)":{"note":"","data":["8101D4FC 2400"],"options":null}},"1E12883D-D3B92718-C:46":{"In-Game Cheats\\Access Cheat menu":{"note":"","data":["50000504 0000","80100D98 0001"],"options":null},"In-Game Cheats\\Enable\\All Items":{"note":"To access simply pause in game play \u0026 then unpause.","data":["80100D7C 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Invincibility":{"note":"","data":["802AAFE8 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Monsters":{"note":"","data":["802AB15B 00??"],"options":{"Are Active":"00","Are Gone":"01"}},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A6356 0064","812A639E 0064","812A63AE 00C8","812A6398 1900","812A6368 04B0","812A639A 0640","812A6338 0960","812A639C 0190"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Keys":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A6353 000F"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A63C7 0001","50000E02 0000","812A630C 03E7"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Infinite Health (All Levels)":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on Single-Player, Co-Operative and DUKEMATCH, All Levels.","data":["8024D25F 0064","802A6309 0064"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A66E2 0064","812A672A 0064","812A673A 00C8","812A6724 1900","812A66F4 04B0","812A6726 0640","812A66C4 0960","812A6728 0190"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A6753 0001","50000E02 0000","812A6698 03E7"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on DUKEMATCH, All Levels.","data":["8024C18F 0064","802A6695 0064"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A6A6E 0064","812A6AB6 0064","812A6AC6 00C8","812A6AB0 1900","812A6A80 04B0","812A6AB2 0640","812A6A50 0960","812A6AB4 0190"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A6ADF 0001","50000E02 0000","812A6A24 03E7"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 4 on DUKEMATCH, All Levels.","data":["8024BCEB 0064","802A6A21 0064"],"options":null},"Single-Player (All Levels)\\Have All\\Items \u0026 Infinite Use on all levels":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5FCA 0064","812A6012 0064","812A6022 00C8","812A600C 1900","812A600E 0640","812A5FDC 04B0","812A5FAC 0960","812A6010 0190"],"options":null},"Single-Player (All Levels)\\Have All\\Keys":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5FC7 000F"],"options":null},"Single-Player (All Levels)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000C01 0000","802A603B 0001","50000C02 0000","812A5F7E 03E7"],"options":null},"Single-Player (All Levels)\\Have Infinite Health (All Levels)":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels and does what it says on the tin. Infinite health for player 1, All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802479DB 0064","8026F1DB 0064","802A5F7D 0064"],"options":null}},"1EA26214-E790900F-C:50":{"All Characters":{"note":"","data":["50000301 0000","8010EB51 00FF"],"options":null},"All Levels Completed":{"note":"Unlocks Frag Fest \u0026 Time Trial","data":["50000601 0000","8010EB7D 00FF"],"options":null},"Deaths Modifier":{"note":"","data":["8110EB76 ????"],"options":{"10":"000A","100":"0064","1600":"0640","20":"0014","200":"00C8","30":"001E","40":"0028","400":"0190","50":"0032","800":"0320","Infinite":"03E7"}},"Have All\\Medals":{"note":"Unlocks the In-Game Cheat Menu.Only works with a Controller-Pak","data":["8010EB50 0003","50000601 0000","8010EB4A 00FF"],"options":null},"Have All\\Mini Game Icons":{"note":"Only works with a Controller-Pak","data":["8010EB17 0024"],"options":null},"Infinite Ammo All Guns\\Player 1":{"note":"","data":["50000302 0000","80336535 0063","50000702 0000","80692B95 0063"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["80336527 0064","80692B86 0064"],"options":null},"Infinite Lives\\Player 1":{"note":"","data":["8033637E 0064"],"options":null},"Total Kills Modifier":{"note":"","data":["8110EB6E ????"],"options":{"10":"000A","100":"0064","1600":"0640","20":"0014","200":"00C8","30":"001E","40":"0028","400":"0190","50":"0032","800":"0320","Infinite":"03E7"}},"Wins Modifier":{"note":"","data":["8110EB72 ????"],"options":{"10":"000A","100":"0064","1600":"0640","20":"0014","200":"00C8","30":"001E","40":"0028","400":"0190","50":"0032","800":"0320","Infinite":"03E7"}}},"1FA056E0-A4B9946A-C:4A":{"All Bosses 1 Hit Deaths":{"note":"","data":["811BE182 0000"],"options":null},"Enable\\Max Power Mode":{"note":"","data":["8015D117 0001"],"options":null},"Flashlight Mod":{"note":"","data":["80179148 00??"],"options":{"Off":"00","On":"01"}},"Have All Characters In Multi":{"note":"","data":["8115D112 FFFF","8115D110 0003","8015D111 0003"],"options":null},"Have\\All\\Weapons,Items \u0026 Infinite Ammo\\Player 1":{"note":"","data":["8017A79F 001E","8017A7B3 0008","8017A7B7 0009","801584C4 0009","8015D117 0001","801584C0 000C","801584C1 0060","801584C3 0001","50000601 0000","801584C5 0001","801584CB 0009","801584CD 000C"],"options":null},"Infinite Health":{"note":"","data":["8017A7BB 0064"],"options":null},"Start with Weapon\\Player 1":{"note":"","data":["8017A7A8 00??"],"options":{"Cool Rocket Launcher With Infinite Ammo":"09","HandGun":"00","Invisible Gun 1 With Infinite Ammo":"06","Invisible Gun 2 With Infinite Ammo":"07","M16 With Infinite Ammo":"04","Machinegun":"01","New Cooler Handgun":"05","Odd Inviso ShotGun With Infinite Ammo":"08","Rocket Launcher":"03","Shotgun":"02","Silenced Handgun":"14"}},"Time is Always 00:00:00":{"note":"","data":["8110DA62 0000"],"options":null}},"1FB5D932-3BA9481B-C:45":{"Don't Take Any Damage":{"note":"","data":["8104A260 2400"],"options":null},"Enable Cheat Select":{"note":"","data":["80115933 00??"],"options":{"All Weapons With Fast Run":"42","All Weapons With Infinite Ammo":"06","Fast run":"40","Have All Weapons":"02","Infinite Ammo":"04","Infinite Ammo With Fast Run":"44","Invincible":"01","Invincible With All Weapons And Fast Run":"43","Invincible With All Weapons and Ammo and Fast Run":"47","Invincible With Fast Run":"41","Invincible With Infinite Ammo and All Weapons":"07"}},"Enable In-Game Cheat Menu \u0026 Level Select":{"note":"","data":["81115936 014F"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810496D0 2400"],"options":null},"Sixty Hack":{"note":"","data":["800F8697 0001","800F87CF 0001","800F8907 0001"],"options":null},"Sound Select\\Music Volume":{"note":"","data":["80115944 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"Sound Select\\SFX Volume":{"note":"","data":["80115945 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"[Press L For Levitate]":{"note":"","data":["D10F7550 0020","816FE35C 43D5"],"options":null}},"1FBAF161-2C1C54F1-C:41":{"Enable All Levels \u0026 Boarders":{"note":"","data":["80255089 00FF","8025508B 0005","81255096 FCFF","80255098 0007"],"options":null},"Have All\\Contest First Place Done":{"note":"","data":["80244098 0007"],"options":null},"Have All\\Match Levels Completed":{"note":"","data":["8025508A 0005"],"options":null},"Have All\\Trick Attacks Done":{"note":"","data":["81255096 FCFF"],"options":null},"Infinite Damage All Players \u0026 Levels":{"note":"","data":["803F4C3D 0000"],"options":null},"Infinite Lives \u0026 Continues":{"note":"","data":["8026B1CB 0003"],"options":null},"Open Level Character Select":{"note":"With these codes, you have to press the buttons listed below when you are viewing a certain boarders stats. Highlight Akari Hayami's stats, and then hold down the C-Left button and then press the A button to be the Crystal Boarder. Highlight Kensuke Kimachi's stats, and then hold down the C-Up button and then press the A button to be the Metal Boarder. Hightlight Rob Haywood's stats, and then hold down the C-Right button and then press the A button to be the Panda Boarder","data":["8125508A 00??"],"options":{"Easy \u0026 Normal Level":"02","Easy Level":"01","Easy Normal \u0026 Hard Levels":"03","Easy Normal Hard Levels \u0026 Crystal \u0026 Metal Boarders":"05","Easy Normal Hard Levels \u0026 Crystal Boarder":"04"}},"Play As":{"note":"","data":["800200E7 00??"],"options":{"Akari Hayami":"02","Dion Blaster":"00","Gold Boarder":"06","Kensuke Kimachi":"01","Panda Boarder":"07","Ricky Winterborn":"03","Rob Haywood":"04","Silver Boarder":"05"}},"Stop Timer\\Contest\\Air Make":{"note":"","data":["80319CCA 00C5"],"options":null},"Stop Timer\\Contest\\Crystal Lake":{"note":"","data":["8029C1EA 00C5"],"options":null},"Stop Timer\\Contest\\Crystal Peak":{"note":"","data":["802A89AA 00C5"],"options":null},"Stop Timer\\Contest\\Golden Forest":{"note":"","data":["802A6E4A 00C5"],"options":null},"Stop Timer\\Contest\\Half Pipe":{"note":"","data":["802F530A 00C5"],"options":null},"Stop Timer\\Time Attack\\Air Make":{"note":"","data":["8031AB5A 0000"],"options":null},"Stop Timer\\Time Attack\\Crystal Lake":{"note":"","data":["802A593A 0000"],"options":null},"Stop Timer\\Time Attack\\Crystal Peak":{"note":"","data":["802B2CDA 0000"],"options":null},"Stop Timer\\Time Attack\\Deadly Fall":{"note":"","data":["802CF67A 0000"],"options":null},"Stop Timer\\Time Attack\\Dragon Cave":{"note":"","data":["802C148A 0000"],"options":null},"Stop Timer\\Time Attack\\Golden Forrest":{"note":"","data":["802B146A 0000"],"options":null},"Stop Timer\\Time Attack\\Half Pipe":{"note":"","data":["802F649A 0000"],"options":null},"Stop Timer\\Time Attack\\Mountain Village":{"note":"","data":["802CBA6A 0000"],"options":null},"Stop Timer\\Trick Attack\\Air Make":{"note":"","data":["8031ABCA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Crystal Lake":{"note":"","data":["8029F77A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Crystal Peak":{"note":"","data":["802AC9FA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Deadly Fall":{"note":"","data":["802C8F1A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Dragon Cave":{"note":"","data":["802BAE4A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Golden Forrest":{"note":"","data":["802AB06A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Half Pipe":{"note":"","data":["802F650A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Mountain Village":{"note":"","data":["802C51EA 00C5"],"options":null},"Widescreen":{"note":"","data":["810F8FE8 240E","810F8FEA 01AB"],"options":null}},"1FC21532-0B6466D4-C:45":{"Gold Tickets\\Player 1":{"note":"","data":["D00BE8C1 0000","8111F7F8 03E7"],"options":null},"Gold Tickets\\Player 2":{"note":"","data":["D00BE8C1 0001","8111F7F8 03E7"],"options":null},"Gold Tickets\\Player 3":{"note":"","data":["D00BE8C1 0002","8111F7F8 03E7"],"options":null},"Gold Tickets\\Player 4":{"note":"","data":["D00BE8C1 0003","8111F7F8 03E7"],"options":null},"Red Tickets\\Player 1":{"note":"","data":["D00BE8C1 0000","8111F7F6 03E7"],"options":null},"Red Tickets\\Player 2":{"note":"","data":["D00BE8C1 0001","8111F7F6 03E7"],"options":null},"Red Tickets\\Player 3":{"note":"","data":["D00BE8C1 0002","8111F7F6 03E7"],"options":null},"Red Tickets\\Player 4":{"note":"","data":["D00BE8C1 0003","8111F7F6 03E7"],"options":null}},"202A8EE4-83F88B89-C:50":{"Always Low Temp\\Player One":{"note":"","data":["810E4668 0000","810E466A 0000"],"options":null},"Always Low Temp\\Player Two":{"note":"","data":["810E4E48 0000","810E4E4A 0000"],"options":null},"In Game Cheat Select\\1":{"note":"","data":["800CDA4A 00??"],"options":{"All stunts":"02","Beat this":"10","Developers team photo":"08","Invincible mode":"04","Small head mode":"20","Transparent riders":"01"}},"In Game Cheat Select\\2":{"note":"","data":["800CDA4B 00??"],"options":{"Big head mode":"01","Debug mode":"04","Down hill mode":"08","Invisible riders":"20","Mirror mode":"02","Night mode":"40","Odd colour mode":"80","Stunt bonus":"10"}},"In-Game cheat modifer":{"note":"","data":["810CDA4A ????"],"options":{"All stunts":"0200","Beat this":"1000","Big head mode":"0001","Debug mode":"0004","Developers team photo":"0800","Down hill mode":"0008","Invincible mode":"0400","Invisible riders":"0020","Mirror mode":"0002","Night mode":"0040","Odd colour mode":"0080","Small head mode":"2000","Stunt bonus":"0010","Transparent riders":"0100"}},"Infinite Time":{"note":"","data":["810F0E36 1770"],"options":null},"Max Score Stunt Mode\\Player One":{"note":"","data":["810E43E8 0098","810E43EA 967F"],"options":null},"Max Score Stunt Mode\\Player Two":{"note":"","data":["810E4BC8 0098","810E4BCA 967F"],"options":null},"Start On Lap":{"note":"","data":["D00E4681 0000","800E4681 00??"],"options":{"Lap 1":"01","Lap 2":"02","Lap 3":"03","Lap 4":"04"}},"Unlock Original Excitebike":{"note":"Press L+R at track selection to Access Soccer,Hill Climb \u0026 Excite 3D","data":["D00F6605 0030","810F2420 FF07"],"options":null}},"204489C1-1286CF2B-C:45":{"Infinite\\99 Dark Knight Discus":{"note":"","data":["802086FE 0063"],"options":null},"Infinite\\99 Lives":{"note":"","data":["802086F1 0063"],"options":null},"Infinite\\Health":{"note":"","data":["802086F2 0064"],"options":null},"Infinite\\Max Charge \u0026 Magnetic Nun Chaku":{"note":"","data":["802086B9 0064"],"options":null},"Press F9 to Have\\Key":{"note":"","data":["88208524 0020"],"options":null},"Suit Select":{"note":"","data":["802086F4 00??"],"options":{"Defensive":"02","Nimble":"03","Offensive":"01","Standard":"00"}},"Weapon Select":{"note":"","data":["802086F7 00??"],"options":{"Dark Knight Discus":"01","Dark Knight Staff":"02","Magnetic Nun Chaku":"03","Standard":"00"}}},"204EC022-B119D185-C:45":{"Andrew Reynolds\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDBE 00FF"],"options":null},"Andrew Reynolds\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDC0 00FF"],"options":null},"Andrew Reynolds\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDBB 00FF"],"options":null},"Andrew Reynolds\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDB8 00FF"],"options":null},"Bob Burnquist\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD5A 00FF"],"options":null},"Bob Burnquist\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD5C 00FF"],"options":null},"Bob Burnquist\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD57 00FF"],"options":null},"Bob Burnquist\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD54 00FF"],"options":null},"Bucky Lasek\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD82 00FF"],"options":null},"Bucky Lasek\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD84 00FF"],"options":null},"Bucky Lasek\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD7F 00FF"],"options":null},"Bucky Lasek\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD7C 00FF"],"options":null},"Chad Muska\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD96 00FF"],"options":null},"Chad Muska\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD98 00FF"],"options":null},"Chad Muska\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD93 00FF"],"options":null},"Chad Muska\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD90 00FF"],"options":null},"Elissa Steamer\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDFA 00FF"],"options":null},"Elissa Steamer\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDFC 00FF"],"options":null},"Elissa Steamer\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDF7 00FF"],"options":null},"Elissa Steamer\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDF4 00FF"],"options":null},"Geoff Rowley\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD6E 00FF"],"options":null},"Geoff Rowley\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD70 00FF"],"options":null},"Geoff Rowley\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD6B 00FF"],"options":null},"Geoff Rowley\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD68 00FF"],"options":null},"Have All Tracks":{"note":"","data":["813D6E42 FFFF","813D4FFA FFFF","813D5D62 FFFF","813D84E2 FFFF","813D4FCA FFFF","813D5F2A FFFF","813D8C52 FFFF","813D5602 FFFF","813D6D3A FFFF"],"options":null},"Jamie Thomas\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDE6 00FF"],"options":null},"Jamie Thomas\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDE8 00FF"],"options":null},"Jamie Thomas\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDE3 00FF"],"options":null},"Jamie Thomas\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDE0 00FF"],"options":null},"Kareem Campbell\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDAA 00FF"],"options":null},"Kareem Campbell\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDAC 00FF"],"options":null},"Kareem Campbell\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDA7 00FF"],"options":null},"Kareem Campbell\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDA4 00FF"],"options":null},"Officer Dick\\Have All\\Gold Medal\\Burnside":{"note":"","data":["800DDE0E 00FF"],"options":null},"Officer Dick\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDE10 00FF"],"options":null},"Officer Dick\\Have All\\Gold Medal\\Skate Park":{"note":"","data":["800DDE0B 00FF"],"options":null},"Officer Dick\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDE08 00FF"],"options":null},"Player 1\\Have\\ Perfect Balance":{"note":"","data":["800DDB83 0001"],"options":null},"Player 1\\Max Points\\Burnside":{"note":"","data":["813D8C52 FFFF"],"options":null},"Player 1\\Max Points\\Downhill Jam":{"note":"","data":["813D5F2A FFFF"],"options":null},"Player 1\\Max Points\\Downtown Chicago":{"note":"","data":["813D4FCA FFFF"],"options":null},"Player 1\\Max Points\\Roswell New Mexico":{"note":"","data":["813D6D3A FFFF"],"options":null},"Player 1\\Max Points\\Street":{"note":"","data":["813D5602 FFFF"],"options":null},"Player 1\\Max Points\\The Mall":{"note":"","data":["813D5D62 FFFF"],"options":null},"Player 1\\Max Points\\The School":{"note":"","data":["813D4FFA FFFF"],"options":null},"Player 1\\Max Points\\The Skate Park":{"note":"","data":["813D84E2 FFFF"],"options":null},"Player 1\\Max Points\\The Warehouse":{"note":"","data":["813D6E42 FFFF"],"options":null},"Player 1\\Max Trick Score\\Burnside":{"note":"","data":["813D8C52 FFFF"],"options":null},"Player 1\\Max Trick Score\\Downhill Jam":{"note":"","data":["813D5F2A FFFF"],"options":null},"Player 1\\Max Trick Score\\Downtown":{"note":"","data":["813D4FCA FFFF"],"options":null},"Player 1\\Max Trick Score\\Roswell":{"note":"","data":["813D6D3A FFFF"],"options":null},"Player 1\\Max Trick Score\\The Mall":{"note":"","data":["813D5D62 FFFF"],"options":null},"Player 1\\Max Trick Score\\The School":{"note":"","data":["813D4FFA FFFF"],"options":null},"Player 1\\Max Trick Score\\The Skate Park Course":{"note":"","data":["813D84E2 FFFF"],"options":null},"Player 1\\Max Trick Score\\The Streets":{"note":"","data":["813D5602 FFFF"],"options":null},"Player 1\\Play As":{"note":"","data":["800D03D4 00??"],"options":{"Andrew Reynolds":"06","Bob Burnquist":"01","Bucky Lasek":"03","Chad Muska":"04","Elissa Steamer":"09","Geoff Rowley":"02","Jamie Thomas":"08","Kareem Campbell":"05","Officer Dick":"0A","Rune Glifberg":"07","Tony Hawk":"00"}},"Player 1\\Super Max\\Air":{"note":"","data":["800D561E FFFF"],"options":null},"Player 1\\Super Max\\Balance":{"note":"","data":["800D561F FFFF"],"options":null},"Player 1\\Super Max\\Ollie":{"note":"","data":["800D561C FFFF"],"options":null},"Player 1\\Super Max\\Speed":{"note":"","data":["800D561D FFFF"],"options":null},"Player 1\\Super Max\\Turning":{"note":"","data":["800D5620 FFFF"],"options":null},"Player 1\\Tony Hawk\\Full Special All Levels":{"note":"","data":["D00C0223 0000","813D6576 02EE","D00C0223 0001","813D4728 02EE","D00C0223 0002","813D5496 02EE","D00C0223 0003","813D7C16 02EE","D00C0223 0004","813D467E 02EE","D00C0223 0005","813D565E 02EE","D00C0223 0006","813D8386 02EE","D00C0223 0007","813D4D36 02EE","D00C0223 0008","813D646E 02EE"],"options":null},"Player 2\\Play As":{"note":"","data":["800D03D5 00??"],"options":{"Andrew Reynolds":"06","Bob Burnquist":"01","Bucky Lasek":"03","Chad Muska":"04","Elissa Steamer":"09","Geoff Rowley":"02","Jamie Thomas":"08","Kareem Campbell":"05","Officer Dick":"0A","Rune Glifberg":"07","Tony Hawk":"00"}},"Player 2\\Super Max\\Air":{"note":"","data":["800D5623 FFFF"],"options":null},"Player 2\\Super Max\\Balance":{"note":"","data":["800D5624 FFFF"],"options":null},"Player 2\\Super Max\\Ollie":{"note":"","data":["800D5621 FFFF"],"options":null},"Player 2\\Super Max\\Speed":{"note":"","data":["800D5622 FFFF"],"options":null},"Player 2\\Super Max\\Turning":{"note":"","data":["800D5625 FFFF"],"options":null},"Rune Glifberg\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDD2 00FF"],"options":null},"Rune Glifberg\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDD4 00FF"],"options":null},"Rune Glifberg\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDCF 00FF"],"options":null},"Rune Glifberg\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDCC 00FF"],"options":null},"Tony Hawk\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD46 00FF"],"options":null},"Tony Hawk\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD48 00FF"],"options":null},"Tony Hawk\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD43 00FF"],"options":null},"Tony Hawk\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD40 00FF"],"options":null}},"20B53662-7B61899F-C:50":{"Have Cheats Menu":{"note":"","data":["800D77D6 01FF"],"options":null},"Infinite Balls":{"note":"","data":["802FD21F 0064"],"options":null},"Infinite Credits":{"note":"","data":["802FD215 0064"],"options":null},"Infinite Energy":{"note":"","data":["802FD209 0064"],"options":null},"Infinite Sponge Darts":{"note":"","data":["802FD223 0064"],"options":null},"Infinite Suckers":{"note":"","data":["802FD222 0064"],"options":null},"Start with 9999 Monster Score":{"note":"","data":["812FD20E 270F"],"options":null}},"214CAD94-BE1A3B24-C:45":{"Gun 4-Way Shot":{"note":"","data":["80129723 0004"],"options":null},"Infinite Fuel":{"note":"","data":["81129726 FFFF"],"options":null},"Infinite Shield":{"note":"","data":["811296C8 03E8"],"options":null},"Infinite Weapon\\1st Position":{"note":"","data":["8012943B 0063"],"options":null},"Infinite Weapon\\2nd Position":{"note":"","data":["8012943F 0063"],"options":null},"Infinite Weapon\\3rd Position":{"note":"","data":["80129443 0063"],"options":null},"Infinite Weapon\\4th Position":{"note":"","data":["80129447 0063"],"options":null},"Infinite Weapon\\5th Position":{"note":"","data":["8012944B 0063"],"options":null},"Max Score":{"note":"","data":["81129426 FFFF"],"options":null},"Score Attack Mode":{"note":"","data":["81129472 0001"],"options":null},"Stage Select On":{"note":"","data":["81129476 0001"],"options":null},"Weapon Modifier\\1st Position":{"note":"Must to be used with the Infinite Weapon Codes","data":["80129439 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\2nd Position":{"note":"Must to be used with the Infinite Weapon Codes","data":["8012943D 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\3rd Position":{"note":"Must to be used with the Infinite Weapon Codes","data":["801294F1 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\Gun Weapon":{"note":"","data":["80129723 00??"],"options":{"2-Way Shot":"02","3-Way Shot":"03","4-Way Shot":"04","No Weapon":"00","Normal Shot":"01"}}},"2153143F-992D6351-C:45":{"Press L + C-Down For Cheat Screen":{"note":"","data":["D01101B3 0024","8103BFE0 0000","D01101B3 0024","8103BFE2 0000"],"options":null}},"21548CA9-9059F32C-C:00":{"Everything Unlocked":{"note":"Have All Grand Prix Levels Open And Completed","data":["8008270F 00FF","8108277A 0FFF"],"options":null},"Regional Class\\Max Grip":{"note":"Do not enable until you are at the Region Class Selection menu. Disbale before restarting.","data":["800B2529 003D","800BC529 003D","800C6529 003D"],"options":null},"Regional Class\\Max Motor":{"note":"Do not enable until you are at the Region Class Selection menu. Disbale before restarting.","data":["800C6481 003D","800BC481 003D","800B2481 003D"],"options":null},"Regional Class\\Max Turbo":{"note":"Do not enable until you are at the Region Class Selection menu. Disbale before restarting.","data":["800B25D1 003D","800BC5D1 003D","800C65D1 003D"],"options":null},"World Challenge\\Max Grip":{"note":"Do not enable until you are at the World Challenge Selection menu. Disbale before restarting.","data":["800B28B1 003D","800BC8B1 003D","800C68B1 003D"],"options":null},"World Challenge\\Max Motor":{"note":"Do not enable until you are at the World Challenge Selection menu. Disbale before restarting.","data":["800B2809 003D","800BC809 003D","800C6809 003D"],"options":null},"World Challenge\\Max Turbo":{"note":"Do not enable until you are at the World Challenge Selection menu. Disbale before restarting.","data":["800B2959 003D","800BC959 003D","800C6959 003D"],"options":null},"World Class\\Max Grip":{"note":"Do not enable until you are at the World Class Selection menu. Disbale before restarting.","data":["800B2861 003D","800BC861 003D","800C6861 003D"],"options":null},"World Class\\Max Motor":{"note":"Do not enable until you are at the World Class Selection menu. Disbale before restarting.","data":["800B27B9 003D","800BC7B9 003D","800C67B9 003D"],"options":null},"World Class\\Max Turbo":{"note":"Do not enable until you are at the World Class Selection menu. Disbale before restarting.","data":["800B2909 003D","800BC909 003D","800C6909 003D"],"options":null},"[Player 1]\\Infinite\\Lives":{"note":"","data":["800827BB 0006"],"options":null},"[Player 1]\\Infinite\\Turbo":{"note":"","data":["80195CF3 00FF"],"options":null},"[Player 1]\\Press R to Come In 1st":{"note":"Do not press this until you have finished the race and came in at whatever position. Then Press R Button to then Come In 1st","data":["D0093671 0010","801460A3 0000"],"options":null}},"219191C1-33183C61-C:50":{"1-Hit Death":{"note":"","data":["81137E7C 4136"],"options":null},"Extra Shields":{"note":"","data":["81137E7C 4316"],"options":null},"Have\\99\\Bonus Collected":{"note":"","data":["80130B87 0063"],"options":null},"Have\\99\\Kills":{"note":"","data":["80130B85 0063"],"options":null},"Have\\99\\Saves":{"note":"","data":["80130B86 0063"],"options":null},"Have\\Medals For\\Ambush at Mos Eisley":{"note":"","data":["88130B1C 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Assault on Kile II":{"note":"","data":["88130B23 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Battle Above Taloraan":{"note":"","data":["88130B26 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Battle of Hoth":{"note":"","data":["88130B2E 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Beggar's Canyon":{"note":"","data":["88130B2C 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Blockade on Chandrila":{"note":"","data":["88130B28 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Defection At Corellia":{"note":"","data":["88130B1F 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Escape From Fest":{"note":"","data":["88130B27 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Imperial Construction Yard":{"note":"","data":["88130B22 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Liberation V":{"note":"","data":["88130B20 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Moff Seerdon's Revenge":{"note":"","data":["88130B2A 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Prisons on Kessel":{"note":"","data":["88130B25 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Raid on Sullust":{"note":"","data":["88130B29 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Rendezvou on Bankhesh":{"note":"","data":["88130B1D 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Rescue on Kessel":{"note":"","data":["88130B24 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\The Battle of Calamari":{"note":"","data":["88130B2B 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\The Death Star Trench Run":{"note":"","data":["88130B2D 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\The Jade Moon":{"note":"","data":["88130B21 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\The Search For The Noonnah":{"note":"","data":["88130B1E 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Infinite\\Infinite Health":{"note":"","data":["81137E7C 4316"],"options":null},"Infinite\\Infinite Lives":{"note":"","data":["80130B10 0008"],"options":null},"Infinite\\Infinite Secondary Weapons":{"note":"","data":["8010CA32 0008"],"options":null}},"2256ECDA-71AB1B9C-C:50":{"Access All Levels":{"note":"","data":["8008AA56 0001","8008AD3A 0001","8008A862 0001","8008A876 0001","8008A88A 0001","8008A89E 0001","8008A8B2 0001","8008A8C6 0011","8008A8DA 0021","8008AD4E 0001","8008A916 0011","8008A92A 0041","8008A93E 0021","8008A966 0001","8008A98E 0001","8008AD62 0001","8008A9DE 0001","8008A9F2 0011","8008AA06 0021","8008AD76 0001","8008A7D6 0001","8008A7EA 0001","8008A812 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81093F50 0063","81093F52 0063","81093F54 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A9097 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810864C2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810864C4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80094105 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A90B5 00??","800A90C5 00??","800A90D5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"22E9623F-B60E52AD-C:50":{"1 Win to Win\\Player 1":{"note":"","data":["D020A84F 0000","8020A84F 0001"],"options":null},"1 Win to Win\\Player 2":{"note":"","data":["D020A84F 0000","8020A84F 0010"],"options":null},"Infinite\\Health\\Player 1":{"note":"","data":["80209D81 00C8"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["81209780 0190"],"options":null},"Infinite\\Money":{"note":"","data":["8121106C 2704"],"options":null},"Infinite\\Special\\Player 1":{"note":"","data":["81209484 0190"],"options":null},"Infinite\\Special\\Player 2":{"note":"","data":["8120B1B0 0190"],"options":null}},"2337D8E8-6B8E7CEC-C:45":{"Infinite\\Eggs Once You Get One":{"note":"This is for All Yoshis All levels","data":["8103E89C 2400"],"options":null},"Infinite\\Health":{"note":"This is for All Yoshis All levels","data":["8102B780 2400"],"options":null},"Infinite\\Lives":{"note":"This is for All Yoshis All levels","data":["800F8DF7 00FF"],"options":null}},"23749578-80DC58FD-C:45":{"1 Lap to Race":{"note":"","data":["800438B3 0009","D021FBAB 0000","8021FBAB 0008","D022359B 0000","8022359B 0008"],"options":null},"Max Gear Ratios":{"note":"","data":["810C9E90 7F1E","810C9E82 707F"],"options":null},"Total Laps to Race Modifier":{"note":"","data":["800438B3 00??"],"options":{"1 lap":"01","2 lap":"02","3 lap":"03","4 lap":"04","5 lap":"05","6 lap":"06","7 lap":"07","8 lap":"08","9 lap":"09"}}},"237E73B4-D63B6B37-C:45":{"Flashing Invincible":{"note":"This cheat Makes you Flash But you cant be harmed,Once out of danger Turn the cheat off to stop the flashing.also do not put this on if you have already been hurt or you will stay on the floor.","data":["800AD767 000A"],"options":null},"Have\\Fire Bombs":{"note":"","data":["800AD73B 0003"],"options":null},"Have\\Kick Bombs Anytime":{"note":"","data":["800AC743 0003"],"options":null},"Have\\Max Fire Level":{"note":"","data":["800AD733 0003"],"options":null},"Infinite\\Bombs":{"note":"","data":["800AD758 0003"],"options":null},"Infinite\\Continue Time":{"note":"","data":["810B5CD6 0090"],"options":null},"Infinite\\Health":{"note":"","data":["800AD75F 0005"],"options":null},"Infinite\\Money":{"note":"","data":["810ABD52 FFFF"],"options":null}},"2388984C-DA7B3CC5-C:45":{"Level Select\\Proving Ground-Tightrope":{"note":"Do Not use this with Level Select The Pit-Starlight. Only use One Level Select Option At A Time","data":["8014BD9F 00??"],"options":{"Basic Training":"01","Bomb Shelter":"0B","Bottleneck":"10","Boxed Set":"06","Cathedral":"04","Crossroads":"02","Dire Straight":"07","Earth Temple":"0D","Fall Out":"05","Fire Temple":"0E","Grim Retreat":"03","Mystic":"0F","Prey":"08","Proving Grounds":"00","Tempered":"0C","Tightrope":"11","Warehouse":"09","Water Temple":"0A"}},"Level Select\\The Pit-Starlight":{"note":"Do Not use this with Level Select Proving Ground-Tightrope. Only use One Level Select Option At A Time","data":["8014BD9F 00??"],"options":{"Ampatheater":"16","Breakdown":"19","Bunker":"15","Courtyard":"22","Crypts":"18","Defcon 5":"1F","Fathom":"1D","Fire Walker":"17","Hopeless":"1B","Leap Of Faith":"13","Matrix":"1C","Retaliation":"1A","Spirit Temple":"20","Starlight":"23","Stronghold":"21","The Pedestal":"1E","The Pit":"12","Wicked Dance":"14"}},"Player 1\\Have All\\Medals":{"note":"","data":["810FCB4A FFFF","810FCB4C FFFF","810FCB4E FFFF","800FCB50 0003"],"options":null},"Player 1\\Have All\\Mini Game Icons":{"note":"","data":["800FCB17 0024"],"options":null},"Player 1\\Infinite Ammo":{"note":"","data":["80336535 0063","80336537 0063","80336539 0063","80692B95 0063","80692B97 0063","80692B99 0063","80692B9B 0063","80692B9D 0063","80692B9F 0063","80692BA1 0063"],"options":null},"Player 1\\Infinite\\Cerebral Bores":{"note":"","data":["8033653B 00FF"],"options":null},"Player 1\\Infinite\\Health":{"note":"","data":["81336526 6400","80692B86 0064"],"options":null},"Player 1\\Infinite\\Metal Claws":{"note":"","data":["80336541 00FF"],"options":null},"Player 1\\Infinite\\Proximity Mines":{"note":"","data":["8033653D 00FF"],"options":null},"Player 1\\Infinite\\Sentry Guns":{"note":"","data":["8033653F 00FF"],"options":null},"Player 1\\Infinite\\Time":{"note":"","data":["811407F4 47AF","811407F6 C4B1"],"options":null},"Player 1\\Play As":{"note":"","data":["80140358 00??"],"options":{"Adon":"05","Bastile":"0B","Blind One":"08","Death Guard":"0A","Drone":"02","Elite Guard":"07","Fireborn":"03","Juggernaut":"09","Lord Of The Dead":"06","Mantid":"01","Mites":"12","Monkey":"13","Pur-Lin":"0F","Raptor":"11","Soldier":"04","Symbiont":"10","Syra":"0C","Tail Set":"0E","Turok":"00"}},"Player 1\\Start With Weapon":{"note":"","data":["803366B0 00??"],"options":{"Assault Rifle":"05","Boomerang":"01","Cerebral Bore":"12","Chest Burster":"0F","Emaciator":"0D","Flaregun":"09","Freeze Gun":"08","Grenade Launcher":"0A","Inflator":"0E","Iron Claw":"14","Mag 60":"03","Mini Gun":"06","Mite Bite":"11","Napalm Gel":"0C","PFM Mine":"13","Plasma Rifle":"07","Raptor Claw":"10","Scorpion Launcher":"0B","Sentry Turret":"15","Shotgun":"04","Tek Crossbow":"02","Warhammer":"00"}}},"2483F22B-136E025E-C:55":{"999 Kills":{"note":"","data":["80163B03 00FF"],"options":null},"Have All Medals":{"note":"For Expert \u0026 Normal Modes","data":["50000802 0000","8017A9D9 7777"],"options":null},"Infinite\\Armor\\Falco":{"note":"","data":["80174187 00FF"],"options":null},"Infinite\\Armor\\Peppy":{"note":"","data":["8017418F 00FF"],"options":null},"Infinite\\Armor\\Slippy":{"note":"","data":["8017418B 00FF"],"options":null},"Infinite\\Dual Blue Lasers":{"note":"","data":["80163C13 0002"],"options":null},"Infinite\\Energy":{"note":"","data":["80141587 00FF","8013E6A7 00FF"],"options":null},"Infinite\\Hyper Laser":{"note":"","data":["80163B13 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["80163B09 0063"],"options":null},"Level Select":{"note":"","data":["8017A29F 00??"],"options":{"Aquas":"0D","Area 6":"03","Bolse":"11","Corneria":"00","Corneria (Multi)":"14","Fortuna":"0E","Glitch":"04","Katina":"10","Macbeth":"0B","Meteo":"01","Sector X":"02","Sector Y":"05","Sector Z":"12","Solar":"07","Titania":"0C","Training Mode Level":"0A","Venom 1":"06","Venom 2":"09","Venom With Starwolf":"13","Zoness":"08"}},"Loads O' Hits":{"note":"","data":["80163B03 00FF"],"options":null},"Unlimited\\Boost":{"note":"","data":["8113E6FC 0000","8113E6FE 0000","811415DC 0000","811415DE 0000","8013E7FD 0000","801416DD 0000"],"options":null},"Unlimited\\Smart Bombs":{"note":"","data":["80179E0B 0063"],"options":null}},"2500267E-2A7EC3CE-C:45":{"All Modes\\Always Have 1st Place":{"note":"","data":["81056444 0001"],"options":null},"All Modes\\Infinite Time":{"note":"","data":["811269CA 0700"],"options":null},"All Modes\\Press R Button For Turbo":{"note":"","data":["D103E1EA 0010","8105641A 0800"],"options":null},"Grand Prix Mode\\2 Tier Cars":{"note":"","data":["80119BB0 0039"],"options":null},"Grand Prix Mode\\All Cars Have Perfect Stats":{"note":"","data":["50008002 0000","8102F314 05DC"],"options":null},"Grand Prix Mode\\Car Modifier":{"note":"","data":["8113CF5A 00??"],"options":{"00-Agent":"19","13th Racing Kid":"0E","Age Solo Supernova":"12","Assoluto Infinito":"11","Atomic Purple":"13","Blinky":"1B","Caddy Car":"1E","Crazy Canuck":"1D","Dig Racing Team":"0C","Digipen Racing":"10","Extreme Green":"14","F/A Racing":"00","Galaga RT Carrot":"07","Galaga RT Prid's":"06","Galaga' 88":"1A","Lizard Nightmare":"16","Micro Mouse Mappy":"0D","PAC Racing":"02","Pooka":"1F","RT Blue Mappy":"05","RT Bosconian":"08","RT Nebulasray":"09","RT Pink Mappy":"04","RT Ryukyu":"01","RT Solvalou":"03","RT Xevious Green":"0B","RT Xevious Red":"0A","Red Shirt Rage":"1C","Screamin' Eagle":"17","Terrazi Terrific":"15","Ultra 64 (Full Stats)":"18","White Angel":"0F"}},"Grand Prix Mode\\Enlarge Cars":{"note":"","data":["81119758 3FC0","811197AC 3FC0","81119800 3FC0"],"options":null},"Grand Prix Mode\\Laps to Race":{"note":"","data":["8111B32E ????"],"options":{"lap":"0101","laps":"0909"}},"Grand Prix Mode\\Microscopic Cars":{"note":"","data":["80119758 003D","801197AC 003D","80119800 003D"],"options":null},"Grand Prix Mode\\Press GS For Overhead View":{"note":"","data":["8811AB0F 0002"],"options":null},"Grand Prix Mode\\Shrink Cars":{"note":"","data":["80119758 003E","801197AC 003E","80119800 003E"],"options":null},"Grand Prix Mode\\Track Modifier":{"note":"","data":["8113CF6A 00??"],"options":{"Renegade Expert":"08","Renegade Intermediate":"05","Renegade Novice":"02","Revolution Expert":"07","Revolution Intermediate":"04","Revolution Novice":"01","Ridge Racer Expert":"06","Ridge Racer Extreme":"09","Ridge Racer Intermediate":"03","Ridge Racer Novice":"00"}},"Grand Prix Mode\\Unlock\\All Cars":{"note":"","data":["8102F19C FFFF","8102F19E FFFF"],"options":null},"Grand Prix Mode\\Unlock\\All Engine Classes All Levels":{"note":"","data":["50001E08 0000","8102FAB0 0004","50001E08 0000","8102FAB2 0403"],"options":null},"Grand Prix Mode\\Unlock\\All Tracks \u0026 Trophies":{"note":"","data":["81043530 FFFF","81043532 FFFF"],"options":null}},"255018DF-57D6AE3A-C:45":{"Access All In-Game Cheats":{"note":"Pause Gameplay To Access","data":["81152946 000F","81152956 FFFF"],"options":null},"Access All Navigation Cards":{"note":"","data":["8015298B 0005"],"options":null},"Access Secret Worlds":{"note":"","data":["81152946 0064"],"options":null},"Infinite Lives":{"note":"","data":["8015299F 0063"],"options":null},"Max \u0026 Total Gold":{"note":"","data":["8015293B 0063","80152AFF 0063"],"options":null}},"2577C7D4-D18FAAAE-C:50":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118D920 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118D922 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118D924 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118D926 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["50000402 0000","8018ED70 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["80165FBD 00??","80165FEA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["8016609D 00??","801660CA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["8016617D 00??","801661AA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["8016625D 00??","8016628A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["8016633D 00??","8016636A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["8016641D 00??","8016644A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818EE4F 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F6975 0020","810F6A28 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F6985 0020","810F7800 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F6995 0020","810F85D8 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F69A5 0020","810F93B0 4000"],"options":null}},"259F7F84-7C9EED26-C:50":{"Infinite\\99 Dark Knight Discus":{"note":"","data":["801D7F4A 0063"],"options":null},"Infinite\\99 Lives":{"note":"","data":["801D7F3E 0064"],"options":null},"Infinite\\Health":{"note":"","data":["801D7F3D 0064"],"options":null},"Infinite\\Max Charge \u0026 Magnetic Nun Chaku":{"note":"","data":["801D7F06 0064"],"options":null},"Press F9 to Have\\Key":{"note":"","data":["881D7D70 0020"],"options":null},"Suit Select":{"note":"","data":["801D7F40 00??"],"options":{"Defensive":"02","Nimble":"03","Offensive":"01","Standard":"00"}},"Weapon Select":{"note":"","data":["801D7F43 00??"],"options":{"Dark Knight Discus":"01","Dark Knight Staff":"02","Magnetic Nun Chuku":"03","Standard":"00"}}},"26035CF8-802B9135-C:45":{"Access All Levels":{"note":"","data":["8008A5C6 0001","8008A5DA 0001","8008A602 0001","8008A652 0001","8008A666 0001","8008A67A 0001","8008A68E 0001","8008A6A2 0001","8008A6B6 0011","8008A6CA 0021","8008A6DE 0001","8008A706 0011","8008A71A 0041","8008A72E 0021","8008A742 0081","8008A756 0001","8008A76A 0081","8008A77E 0001","8008A7A6 0001","8008A7CE 0001","8008A7E2 0011","8008A7F6 0021","8008A846 0001","8008AB2A 0001","8008AB3E 0001","8008AB52 0001","8008AB66 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81093D40 0063","81093D42 0063","81093D44 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A8EA7 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810862B2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810862B4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80093EF5 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A8EA5 00??","800A8EB5 00??","800A8EC5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"264D7E5C-18874622-C:45":{"All Levels\\Dash Becomes Shorter \u0026 Wider":{"note":"","data":["800BA025 FFFF"],"options":null},"All Levels\\Infinite\\Lives":{"note":"","data":["800E05CB 0064"],"options":null},"All Levels\\Infinite\\Missiles":{"note":"","data":["800E1265 00FF"],"options":null},"All Levels\\Large Mutant Enemies":{"note":"","data":["800BB62B FFFF"],"options":null},"All Levels\\No Clipping\\Off":{"note":"","data":["81111E67 0001"],"options":null},"All Levels\\No Clipping\\On":{"note":"","data":["81111E67 0000"],"options":null},"All Levels\\See Through\\Everything Except Specific Things":{"note":"","data":["800BC665 FFFF"],"options":null},"All Levels\\See Through\\Some Walls":{"note":"","data":["800BC625 FFFF"],"options":null},"All Levels\\Time Always 0:00:02":{"note":"","data":["810E04E8 4000"],"options":null},"All Levels\\Visibililty\\Maximum":{"note":"","data":["800BA62B FFFF"],"options":null},"All Levels\\Visibililty\\Minimum":{"note":"","data":["800BA66B FFFF"],"options":null},"All Stages\\Infinite Health":{"note":"","data":["81072D0C 2400"],"options":null},"All Stages\\Infinite\\Disruptor Ammo":{"note":"","data":["81073F04 2400"],"options":null},"All Stages\\Infinite\\Flame Ammo":{"note":"","data":["81073720 2400"],"options":null},"All Stages\\Infinite\\Jet Pack":{"note":"","data":["81076AAC 2400","81076C58 2400","81076B48 2400"],"options":null},"All Stages\\Infinite\\Pulse Ammo":{"note":"","data":["81074204 2400"],"options":null},"All Stages\\Infinite\\Seeker Ammo":{"note":"","data":["81073A94 2400"],"options":null},"All Stages\\Infinite\\Stunner Ammo":{"note":"","data":["81073BD4 2400"],"options":null},"All Stages\\Invincible":{"note":"","data":["8107A770 2400"],"options":null},"All Stages\\Lasers Never Overheat":{"note":"","data":["81073948 2400"],"options":null},"All Stages\\Upper Lasers":{"note":"Don't Use With Never Overheat Code","data":["81073944 3C06","81073946 4EFF"],"options":null},"Press GS For Pink Cheat Debug Screen":{"note":"","data":["890D017F 0001"],"options":null}},"2655BB70-667D9925-C:45":{"Have\\All Magic":{"note":"","data":["800CE9C8 0010","800CE9CD 0000","800CE9D7 0001","800CE9E1 0002","800CE9EB 0003","800CE9F5 0005","800CE9FF 0006","800CEA09 0008","800CEA13 0009","800CEA1D 000B","800CEA27 000E","800CEA31 000F","800CEA3B 0010","800CEA45 0011","800CEA4F 000A","800CEA59 000C","800CEA63 000D"],"options":null},"Have\\Magic On Level 4":{"note":"","data":["810C8B5D FFFF","810C8B5E FFFF","810C8B5F FFFF","810C8B60 FFFF","810C8B61 FFFF","810C8B62 FFFF"],"options":null},"Have\\Max Armour Level":{"note":"","data":["800C8B80 0064"],"options":null},"Have\\Max Experience Level":{"note":"","data":["800C8B7C 00FF"],"options":null},"Have\\Max Spirit Level":{"note":"","data":["800C8B84 0064"],"options":null},"Have\\Max Weapon Level":{"note":"","data":["800C8B82 0064"],"options":null},"Have\\Weapons On Max Upgrade":{"note":"","data":["50000408 0000","800C8B2C 0009"],"options":null},"Infinite Air Under Water":{"note":"","data":["800C8A64 0069"],"options":null},"Infinite Max\\999 Lives":{"note":"","data":["810C8B78 03E8"],"options":null},"Infinite Max\\Fire Ammo":{"note":"","data":["800C8B33 0066"],"options":null},"Infinite Max\\Fusion Ammo":{"note":"","data":["800C8B43 0066"],"options":null},"Infinite Max\\Health":{"note":"","data":["800C8959 0066"],"options":null},"Infinite Max\\Ionic Ammo":{"note":"","data":["800C8B3B 0066"],"options":null},"Infinite Max\\Light Ammo":{"note":"","data":["800C8B2B 0066"],"options":null},"Infinite Max\\Mana":{"note":"","data":["800C8B7F 0066"],"options":null},"Matts":{"note":"","data":["D00C8A4A 0080","810C8963 0100"],"options":null},"Play As Select":{"note":"","data":["800FCD45 00??"],"options":{"Ike Hawkings (Corporal)":"00","Julia Chase (Cartographer)":"02","Karma (The Ex-Deviant)":"03","Max Havok (Chief Enginer)":"04","Mr Bodybolt (7th Passenger)":"06","Solaar (Archbishop)":"05","Sophia Hawkings (Stowaway)":"01"}},"Press A For Bionic Jump":{"note":"This will make you jump to a great height","data":["D00C8A4A 0080","810C8968 ????"],"options":{"Max Jump":"0800","Medium Jump":"0250"}}},"26809B20-39A516A4-C:4A":{"Access All Boards \u0026 Characters":{"note":"","data":["800500C1 000C"],"options":null},"All Street Work Levels Unlocked":{"note":"","data":["50007801 0000","80050170 00??"],"options":{"Courses unlocked":"01","Courses unlocked with A rank":"05","Courses unlocked with B rank":"04","Courses unlocked with C rank":"03","Courses unlocked with S rank":"06"}},"Class Score Select":{"note":"","data":["8016609E 00??"],"options":{"Class A":"64","Class B":"40","Class C":"20","Class S":"FF"}},"Coin Perfect Select":{"note":"this is for Coin Mode to get Perfect Coin Collection Score straight away when you enter the level","data":["801660B3 00??"],"options":{"Giant House Level 1":"6E","Giant House Level 2":"77","Giant House Level 3":"72","Green Park Level 1":"14","Green park Level 2":"1A","Green park Level 3":"2B","Lost Forest Level 1":"4A","Lost Forest Level 2":"59","Lost Forest Level 3":"80","Snow Festival 64 Levels 1 2 \u0026 3":"7D","Sunset Island Level 1":"6F","Sunset Island Level 2":"74","Sunset Island Level 3":"81"}},"Infinite Time\\Attack Time Time 000000":{"note":"","data":["811137EA 0000"],"options":null},"Infinite Time\\Street Work \u0026 Coin":{"note":"","data":["801137E9 0028"],"options":null},"Infinite Time\\Time Attack":{"note":"","data":["801137EB 0000"],"options":null},"Infinite Turbo\\Player 1":{"note":"","data":["80166019 0009"],"options":null},"Infinite Turbo\\Player2":{"note":"","data":["80167991 0009"],"options":null},"Maxed Out Turbo Bar":{"note":"","data":["811656E8 429F","80166017 0051"],"options":null},"Options\\Camera Type Modifier":{"note":"","data":["810500A6 00??"],"options":{"Roll Off Far":"05","Roll Off Mid":"04","Roll Off Near":"03","Roll On Far":"02","Roll On Mid":"01","Roll On Near":"00"}},"Options\\DJ Function Modifier":{"note":"","data":["810500AC 00??"],"options":{"DJ Function Off":"00","DJ Function On":"01"}},"Options\\Music Modifier":{"note":"","data":["800500A9 00??"],"options":{"BGM Off":"00","BGM On":"FF"}},"Options\\Sound Effects Modifier":{"note":"","data":["810500AA 00??"],"options":{"SE Off":"00","SE On":"FF"}}},"26CD0F54-53EBEFE0-C:4A":{"Have\\Max Car Strength":{"note":"This has Graphical Issues when used.....","data":["A0165C21 00FF"],"options":null},"Have\\Max Car Upgrade":{"note":"","data":["80165BF8 00FF","80165BF9 00FF","80165BFA 00FF","80165BFB 005F"],"options":null},"Have\\Max Gear Box Upgrades":{"note":"","data":["80165C00 00FF","80165C01 00FF","80165C02 007F"],"options":null},"Have\\Max Roof Upgrades":{"note":"","data":["81165C2A FFFF"],"options":null},"Have\\Max Steering Upgrades":{"note":"","data":["80165C1A 006F","80165C1B 000F"],"options":null},"Have\\Max Tyre Tred Upgrades":{"note":"","data":["80165C10 00FF"],"options":null},"Have\\Max Weapons Upgrades":{"note":"","data":["81165C32 FFFF","80165C33 00FF"],"options":null},"Have\\Max Wheel Parts Upgrades":{"note":"","data":["80165C0A 00FF","80165C0B 007F"],"options":null},"Infinite\\Blue Pointa":{"note":"","data":["801F92A7 0009"],"options":null},"Infinite\\Red Weapons Use":{"note":"","data":["801F92A5 0009"],"options":null},"Sound Select\\Music Mod":{"note":"","data":["8014A558 00??"],"options":{"High":"10","Medium":"0A","Off":"00"}},"Sound Select\\SFX Mod":{"note":"","data":["8014A559 00??"],"options":{"High":"10","Medium":"0A","Off":"00"}},"Sound Select\\Sound Mod":{"note":"","data":["8014A55A 00??"],"options":{"Mono":"01","Stereo":"00"}},"{Always First With 1 Lap to Race}":{"note":"","data":["800F7A31 0003"],"options":null},"{Unlocked All Stages}":{"note":"","data":["801672EB 000F"],"options":null},"{Weapon Select}":{"note":"","data":["801F92A1 00??"],"options":{"100 Ton Weight":"0E","Blue Lazer Cloud":"10","Bolt Launcher":"0F","Cannon":"08","Crafy Mine":"0B","Freeze Bombs":"09","Hypno Spinning Birds":"0D","Invincible":"02","Iron Beam Drop":"07","Lightening Cloud Attack":"0A","Nothing":"00","Red Spinning Fish?":"03","Rocket Launcher (Hangs?)":"0C","Smoke Bomb":"05","Turbo Boost":"01","Tyre Buster Tacks":"06","Wind Attack":"04"}}},"277B129D-DD3879FF-C:50":{"Earn Spirits Faster":{"note":"","data":["8007C25D 0000"],"options":null},"Have All Elements":{"note":"","data":["8107C24C 3232","8107C24E 3232"],"options":null},"Makes your HP 999-999":{"note":"","data":["8107C22C 03E7","8107C22E 03E7"],"options":null},"Makes your MP 999-999":{"note":"","data":["8107C230 03E7","8107C232 03E7"],"options":null},"No Random Battles":{"note":"","data":["8108CD1C 0000","8108CD1E 0000"],"options":null},"Set Agility to 999-999":{"note":"","data":["8107C234 03E7"],"options":null},"Set Defence to 999-999":{"note":"","data":["8107C236 03E7"],"options":null}},"27A3831D-B505A533-C:45":{"Always Have Wallet Size":{"note":"","data":["801189DA 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C681D 0010","81119C9E 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["80119821 00FF","80119C97 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,\u0026 then press reset (F1) you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D011BB71 0000","80119D4B 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["8002397C 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801189BE 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801189BF 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801189C0 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801189C1 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1A68 0005","801EE508 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801189DA 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801189DB 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801189D9 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189D4 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189DC 30FF","811189DE FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801189B0 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801189B6 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801189BC 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["801189B4 0009"],"options":null},"Have\\Bombs":{"note":"","data":["801189AE 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["801189B8 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["801189AD 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["801189AC 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["801189AF 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["801189B2 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["801189B5 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["801189B9 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["801189BA 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["801189B1 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["801189B7 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["801189BD 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["801189BB 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["801189B3 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["801189C7 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["801189E0 0007","801189E1 0007","801189E2 0007","801189E3 0007","801189E4 0007","801189E5 0007","801189E6 0007","801189E7 0007","801189E8 0007","801189E9 0007","801189EA 0007","801189F7 0009","801189F8 0009","801189F9 0009","801189FA 0009","801189FB 0009","80118A01 0009","80118A04 0009","801189FF 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801189CC 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["801189C6 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801189C5 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801189CA 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801189C4 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118968 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118971 0008","80118972 0001","80118974 0001","8011896B 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801189D2 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["81119D04 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["80119D0D 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D011BB11 0020","811D93D0 40CB","D011BB11 0000","811D9BF2 000D","801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119D41 00??"],"options":{"English":"00","French":"02","German":"01"}},"Level Select":{"note":"","data":["D01C6E35 0000","8111893A ????"],"options":{"?":"006C","Below The Phantom Gannon Boss":"000C","Dodongo's Cavern":"0004","Gerudo Training Ground":"0008","Inside Jabu-Jabu's Belly":"0027","Inside the Deku Tree":"0000","Lakeside Laboratory":"0042","Royal Family's Tomb":"002C","Shoadow Temple":"0036","Temple Of Time":"0052","Water Temple":"0010"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["80118A07 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["80118A09 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["81118966 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["81119D00 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L\\For Infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D011BB11 0020","811D9BF2 000D"],"options":null},"Press L\\To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D011BB11 0020","811D93D0 40CB"],"options":null},"Time of Day Modifier":{"note":"","data":["81118944 ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["801189C2 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["801189C3 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["80118976 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119B5A 0000","81119B5C 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"27C425D0-8C2D99C1-C:50":{"Access All Boards \u0026 Characters":{"note":"","data":["80050071 000C"],"options":null},"All Street Work Levels Unlocked":{"note":"","data":["50007801 0000","80050120 00??"],"options":{"Courses unlocked":"01","Courses unlocked with A rank":"05","Courses unlocked with B rank":"04","Courses unlocked with C rank":"03","Courses unlocked with S rank":"06"}},"Class Score Select":{"note":"","data":["8016609E 00??"],"options":{"Class A":"64","Class B":"40","Class C":"20","Class S":"FF"}},"Coin Perfect Select":{"note":"this is for Coin Mode to get Perfect Coin Collection Score straight away when you enter the level","data":["801660B3 00??"],"options":{"Giant House Level 1":"6E","Giant House Level 2":"77","Giant House Level 3":"72","Green Park Level 1":"14","Green park Level 2":"1A","Green park Level 3":"2B","Lost Forest Level 1":"4A","Lost Forest Level 2":"59","Lost Forest Level 3":"80","Snow Festival 64 Levels 1 2 \u0026 3":"7D","Sunset Island Level 1":"6F","Sunset Island Level 2":"74","Sunset Island Level 3":"81"}},"Infinite Time\\Attack Time Time 000000":{"note":"","data":["8110FA0A 0000"],"options":null},"Infinite Time\\Street Work \u0026 Coin":{"note":"","data":["8010FA09 0028"],"options":null},"Infinite Time\\Time Attack":{"note":"","data":["8010FA0B 0000"],"options":null},"Infinite Turbo\\Player 1":{"note":"","data":["80166019 0009"],"options":null},"Infinite Turbo\\Player2":{"note":"","data":["80167991 0009"],"options":null},"Maxed Out Turbo Bar":{"note":"","data":["811656E8 429F","80166017 0051"],"options":null},"Options\\Camera Type Modifier":{"note":"","data":["81050056 00??"],"options":{"Roll Off Far":"05","Roll Off Mid":"04","Roll Off Near":"03","Roll On Far":"02","Roll On Mid":"01","Roll On Near":"00"}},"Options\\DJ Function Modifier":{"note":"","data":["8105005C 00??"],"options":{"DJ Function Off":"00","DJ Function On":"01"}},"Options\\Music Modifier":{"note":"","data":["80050059 00??"],"options":{"BGM Off":"00","BGM On":"FF"}},"Options\\Sound Effects Modifier":{"note":"","data":["8105005A 00??"],"options":{"SE Off":"00","SE On":"FF"}}},"27C985A8-ED7CE5C6-C:00":{"Buster Parts Slot Select\\Slot 01":{"note":"","data":["8020B293 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 02":{"note":"","data":["8020B294 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 03":{"note":"","data":["8020B295 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 04":{"note":"","data":["8020B296 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 05":{"note":"","data":["8020B297 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 06":{"note":"","data":["8020B298 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 07":{"note":"","data":["8020B299 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 08":{"note":"","data":["8020B29A 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 09":{"note":"","data":["8020B29B 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 10":{"note":"","data":["8020B29C 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 11":{"note":"","data":["8020B29D 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 12":{"note":"","data":["8020B29E 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 13":{"note":"","data":["8020B29F 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 14":{"note":"","data":["8020B2A0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 15":{"note":"","data":["8020B2A1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 16":{"note":"","data":["8020B2A2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 17":{"note":"","data":["8020B2A3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 18":{"note":"","data":["8020B2A4 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 19":{"note":"","data":["8020B2A5 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 20":{"note":"","data":["8020B2A6 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 21":{"note":"","data":["8020B2A7 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 22":{"note":"","data":["8020B2A8 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 23":{"note":"","data":["8020B2A9 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 24":{"note":"","data":["8020B2AA 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 25":{"note":"","data":["8020B2AB 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 26":{"note":"","data":["8020B2AC 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 27":{"note":"","data":["8020B2AD 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 28":{"note":"","data":["8020B2AE 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 29":{"note":"","data":["8020B2AF 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 30":{"note":"","data":["8020B2B0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 31":{"note":"","data":["8020B2B1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 32":{"note":"","data":["8020B2B2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 33":{"note":"","data":["8020B2B3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 01":{"note":"","data":["8020B290 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 02":{"note":"","data":["8020B291 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 03":{"note":"","data":["8020B292 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Freeze Timer at 00:00":{"note":"","data":["811C0E3C 0000","811C0E3E 0000"],"options":null},"Have All\\Normal Items":{"note":"","data":["8120BAE0 FFFF","8120BAE2 FFFF","8120BAE4 FFFF","8120BAE6 FFFF"],"options":null},"Have All\\Special Items":{"note":"","data":["8120BADC FFFF","8120BADE FFFF"],"options":null},"Have All\\Special Weapons":{"note":"These are Equiped With Roll","data":["8120BAD0 FFFF"],"options":null},"Infinite\\Ammo":{"note":"","data":["8120B34A 0080","8120B352 0010","8120B35A 0708","8120B362 0018","8120B36A 0010","8120B372 0708","8120B37A 0020","8120B382 0020","8120B38A 0020","8120B392 0018","8120B39A 012C","8120B3A2 0258"],"options":null},"Infinite\\Health":{"note":"","data":["8120AEAE 0050"],"options":null},"Infinite\\Max Zenny":{"note":"","data":["811C0E4C 0098","811C0E4E 967F"],"options":null},"Rapid Fire":{"note":"","data":["8020B343 0002"],"options":null}},"2829657E-A0621877-C:45":{"Board Select":{"note":"","data":["800ED5C3 00??"],"options":{"Bowser's Magma Mountain":"06","DK's Jungle Adventure":"00","Eternal Star":"07","Explaination Map":"08","Luigi's Engine Room":"04","Mario's Rainbow Castle":"05","Mini Game Stadium":"09","Peach's Birthday Cake":"01","Wario's Battle Canyon":"03","Yoshi's Tropical Island":"02"}},"Lower Left Character\\Coin Options":{"note":"","data":["800F3318 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D635B 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800F331C 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["800F3348 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D639F 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800F334C 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Mini Game Island\\99 Coins":{"note":"","data":["800F37C4 0063"],"options":null},"Mini Game Island\\Always Clear Level":{"note":"","data":["800F32BB 0063"],"options":null},"Mini Game Island\\Press GS For 99 Lives":{"note":"","data":["880F37BB 0063"],"options":null},"Mini Game Island\\World Level Select":{"note":"Select where you want to go then Enable the cheat. as soon as you enter turn the cheat back off so you can move on to the next level and not the same place.","data":["810F32C4 ????"],"options":{"1-1 Coin Block Blitz":"0001","1-2 Coin Block Bash":"0002","1-3 Coin Shower Flower":"0003","1-4 Paddle Battle":"0004","2-1 Memory Match":"0006","2-2 Ground Pound":"0007","2-3 Limbo Dance":"0008","2-4 Magical Mushroom":"0009","2-5 Piranha's Pursuit":"000A","3-1 Crazy Cutter":"0018","3-2 Buried Treasure":"0019","3-3 Desrt Dash":"001A","3-4 Tug O' War":"001B","3-5 Teetering Towers":"001C","9-1 Hammer Drop":"004A","9-2 Slot Car Derby":"004B","9-3 Shell Game":"004C","9-4 Knock Block Tower":"004D","9-5 Platform Peril":"004E","Goal Space - Final Goal":"004F","Save and Return Space 1":"0005","Save and Return Space 2":"001D","Save and Return Space 3":"0029","Save and Return Space 4":"0049","Start Save and Return Space":"0000","World 4-1 to 4-3 - Entrance":"001E","World 4-4 Entrance":"0028","World 6-1 to 6-6 Castle Entrance":"002A","World 8-6 to 8-1 Castle Entrance 2":"0048"}},"Mini Game\\Max 99 Coins":{"note":"","data":["800F3770 0063"],"options":null},"Mini Game\\Unlimited 99 lives":{"note":"","data":["800F3767 0063"],"options":null},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["800F32B8 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D62D3 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800F32BC 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["800F32E8 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D6317 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800F32EC 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Widescreen":{"note":"","data":["8101D5F2 3FE3","8101DA8A 3FE3","D10F8BF6 3FAA","810F8BF6 3FE3","8104BCC0 0801","8104BCC2 7BEA","8104BCC4 C602","8104BCC6 0004","8105EFA8 3C1B","8105EFAA 3FAB","8105EFAC 449B","8105EFAE 0000","8105EFB0 4600","8105EFB2 1082","8105EFB4 8E06","8105EFB6 0008","8105EFB8 0801","8105EFBA 2F32","8105EFBC 4405","8105EFBE 1000","81024D08 0801","81024D0A 7BF0","81024D0C C602","81024D0E 0024","8105EFC0 3C1B","8105EFC2 800E","8105EFC4 8F7B","8105EFC6 811C","8105EFC8 101B","8105EFCA 0004","8105EFCC 2400","8105EFD0 3C1B","8105EFD2 3FAB","8105EFD4 449B","8105EFD6 0000","8105EFD8 4600","8105EFDA 1082","8105EFDC 4405","8105EFDE 1000","8105EFE0 0800","8105EFE2 9344","8105EFE4 8E06","8105EFE6 0028"],"options":null}},"2857674D-CC4337DA-C:45":{"Brightness Modifier":{"note":"","data":["810B96EC ????"],"options":{"Very Dark":"8000","Very Well Lit Up":"7FFF"}},"Ignatius\\Infinite Health\\[Level 01]Chelsea":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802EC6E6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 02]Spitafields":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["803215FE 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 03]Thames Tunnel":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031AB6E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 04]Sewer Snake":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80255E46 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 05]India Docks":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80321546 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 06]Highgate Cemetery":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031B2E6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 07]Hampstead Heath":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["803218B6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 08]Queenhite Docks":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80320C1E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 09]City":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80328256 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 10]Smithfield":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8030B05E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 11]Snowman":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80251496 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 12]Regent's":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80315326 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 13]London Zoo":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031E00E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 14]St. Marilebone":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031CD4E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 15]Bloomsbury":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8032C4F6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 16]Pimlico":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031F9CE 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 17]Jose Manuel":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8025F196 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 18]Westminister":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802F4ECE 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 19]Westminister II":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802F5DE6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 20]The Roofs":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802848FE 0010"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000D02 0000","800A4BAF 0009"],"options":null},"Infinite\\Berzerkers":{"note":"","data":["810A4BBE 0009"],"options":null},"Infinite\\Chaos":{"note":"","data":["810A4BC4 0009"],"options":null},"Infinite\\Dynamite":{"note":"","data":["810A4BB6 0009"],"options":null},"Infinite\\Fire Bombs":{"note":"","data":["810A4BBA 0009"],"options":null},"Infinite\\Flash":{"note":"","data":["810A4BB8 0009"],"options":null},"Infinite\\Freeze Spell":{"note":"","data":["810A4BB4 0009"],"options":null},"Infinite\\Gun":{"note":"","data":["810A4BC6 0009"],"options":null},"Infinite\\Healing":{"note":"","data":["810A4BC2 0009"],"options":null},"Infinite\\Lives":{"note":"","data":["800A4B53 0009"],"options":null},"Infinite\\Multi-Gun":{"note":"","data":["810A4BBC 0009"],"options":null},"Infinite\\Proximity Mines":{"note":"","data":["810A4BB0 0009"],"options":null},"Infinite\\Repulsive Smoke":{"note":"","data":["810A4BB2 0009"],"options":null},"Infinite\\Spider Cards":{"note":"","data":["810A4BAE 0009"],"options":null},"Infinite\\Super Healing":{"note":"","data":["810A4BC0 0009"],"options":null},"Lagfix":{"note":"Makes it stay at 60fps more,set CounterFactor/CountPerOp to 1.","data":["810C24B2 041A"],"options":null},"Level Select":{"note":"","data":["D00978B1 0000","810978B0 00??"],"options":{"Bloomsbury":"0E","Chelsea":"00","City":"08","Hampstead Heath":"06","Highgate Cemetery":"05","India Docks":"04","Jose Manuel":"10","London Zoo":"0C","Map":"14","Pimlico":"0F","Queenhite Docks":"07","Regent's":"0B","Sewer Snake":"03","Smithfield":"09","Snowman":"0A","Spitafields":"01","St. Marilebone":"0D","Thames Tunnel":"02","The Roofs":"13","Westminister":"11","Westminister II":"12"}},"Nadia\\Infinite Health\\[Level 01]Chelsea":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802EB6D6 000C"],"options":null},"Nadia\\Infinite Health\\[Level 02]Spitafield":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80320116 000C"],"options":null},"Nadia\\Infinite Health\\[Level 03]Thames Tunnel":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80319AC6 000C"],"options":null},"Nadia\\Infinite Health\\[Level 04]Sewer Snake":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80254926 000C"],"options":null},"Nadia\\Infinite Health\\[Level 05]India Docks":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["803202CE 000C"],"options":null},"Nadia\\Infinite Health\\[Level 06]Highgate Cemetary":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031A58E 000C"],"options":null},"Nadia\\Infinite Health\\[Level 07]Hampstead Heath":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["803203D6 000C"],"options":null},"Nadia\\Infinite Health\\[Level 08]Queenhite Dock's":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031FB7E 000C"],"options":null},"Nadia\\Infinite Health\\[Level 09]City":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80326A36 000C"],"options":null},"Nadia\\Infinite Health\\[Level 10]Smithfield":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8030A0CE 000C"],"options":null},"Nadia\\Infinite Health\\[Level 11]Snowman":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80250036 000C"],"options":null},"Nadia\\Infinite Health\\[Level 12]Regent's Canal":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80313E36 000C"],"options":null},"Nadia\\Infinite Health\\[Level 13]London Zoo":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031CB66 000C"],"options":null},"Nadia\\Infinite Health\\[Level 14]St. Marilebone":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031B686 000C"],"options":null},"Nadia\\Infinite Health\\[Level 15]Bloomsbury":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8032B256 000C"],"options":null},"Nadia\\Infinite Health\\[Level 16]Pimlico":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031E4B6 000C"],"options":null},"Nadia\\Infinite Health\\[Level 17]Jose Manuel":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8025DA0E 000C"],"options":null},"Nadia\\Infinite Health\\[Level 18]Westminister":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802F360E 000C"],"options":null},"Nadia\\Infinite Health\\[Level 19]Westminister II":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802F4C76 000C"],"options":null},"Nadia\\Infinite Health\\[Level 20]The Roofs":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80282DB6 000C"],"options":null}},"28784622-FFB22985-C:45":{"1 Down Per Possession":{"note":"","data":["800785D2 0004"],"options":null},"Always 1st Down":{"note":"","data":["800785D2 0001"],"options":null},"Infinite Player Creation Pts":{"note":"","data":["8107A0F2 00C8"],"options":null}},"28D5562D-E4D5AE50-C:4A":{"Presss F9 to Refresh Timer to 80":{"note":"When time is running low, just press F9 to refresh the timer back to 80.","data":["890760CA 0400"],"options":null},"Silence Shouting Commentator":{"note":"This shuts off the Shouting Commentary, giving you the much much needed silence.","data":["80076171 0001"],"options":null}},"2952369C-B6E4C3A8-C:50":{"Infinite Health Stadium \u0026 Gym Leader Castle":{"note":"","data":["801DD22D 0030"],"options":null},"Mini Games\\Player 1\\Clear Cut Challenge gets perfect score":{"note":"","data":["801744C3 0063"],"options":null},"Mini Games\\Player 1\\Delibird Delivery Perfect Score":{"note":"","data":["801AC2CC 0063"],"options":null},"Mini Games\\Player 1\\Egg Emergency perfect score":{"note":"","data":["80191C3F 0064"],"options":null},"Mini Games\\Player 1\\Furret Frolic Perfect Score":{"note":"","data":["801E9623 0063"],"options":null},"Mini Games\\Player 1\\Gutsy Golbat has 99 Hearts":{"note":"","data":["D017711F 0001","8017711F 0063"],"options":null},"Mini Games\\Player 1\\Roll Out Rampage Always in 1st Place":{"note":"","data":["80103179 0001"],"options":null},"Mini Games\\Player 1\\Streaming Stampede Perfect Score":{"note":"","data":["8018138B 0063"],"options":null},"Mini Games\\Player 1\\Topsy Turvy":{"note":"Immediatly wins","data":["D01769E7 0001","801769E7 0005"],"options":null},"Mini Games\\Player 2\\Gutsy Golbat has 99 hearts":{"note":"","data":["D017714B 0001","8017714B 0063"],"options":null},"Mini Games\\Player 3\\Gutsy Golbat has 99 hearts":{"note":"","data":["D0177177 0001","80177177 0063"],"options":null},"Mini Games\\Player 4\\Gutsy Golbat has 99 hearts":{"note":"","data":["D01771A3 0001","801771A3 0063"],"options":null}},"29A045CE-ABA9060E-C:46":{"Always 1st":{"note":"","data":["812C56A6 0001"],"options":null},"Have All\\Races":{"note":"","data":["50000702 0000","812B66A4 0101"],"options":null},"Have All\\Ships":{"note":"","data":["50000702 0000","812B66B2 0101"],"options":null},"Infinite\\Boosts\\Player 1":{"note":"","data":["812C56AC 4190"],"options":null},"Infinite\\Boosts\\Player 2":{"note":"","data":["812C59DC 4190"],"options":null},"Infinite\\Time":{"note":"","data":["812B52A0 42C8"],"options":null}},"29CE7692-71C58579-C:50":{"Activate Cheat Menu":{"note":"","data":["80053F78 0001"],"options":null},"Away Team Score":{"note":"","data":["8012BC2D 00??"],"options":{"Max Score":"FF","No Score":"00"}},"Home Team Scores":{"note":"","data":["8012BC2C 00??"],"options":{"Max Score":"FF","No Score":"00"}}},"2A49018D-D0034A02-C:50":{"Access All Tracks":{"note":"","data":["810B88DA 0001"],"options":null},"Always 1st":{"note":"","data":["800BB1F7 0001"],"options":null},"Always Turbo Level 1":{"note":"In Easy Mode","data":["810B4070 3100","810BBD30 0000"],"options":null},"Always Win Head 2 Head":{"note":"","data":["810BD590 0008"],"options":null},"Infinite 99 Lives":{"note":"","data":["800BB1C2 0064"],"options":null},"One Lap To Race":{"note":"","data":["810B88DE 0101"],"options":null}},"2A6B1820-6ABCF466-C:45":{"Activate\\Auto Abort Disable":{"note":"","data":["800F4078 0001"],"options":null},"Activate\\Cones to Mines":{"note":"","data":["800F3F88 0001"],"options":null},"Activate\\Disable Car 2 Car Control":{"note":"","data":["800F4050 0001"],"options":null},"Activate\\Resurrect in Place":{"note":"","data":["800F4080 0001"],"options":null},"Activate\\Stop Timer":{"note":"","data":["800F4090 0001"],"options":null},"Activate\\Upside Down Mode":{"note":"","data":["800F4061 0001"],"options":null},"Always Place 1st":{"note":"","data":["80101339 0000"],"options":null},"Car":{"note":"","data":["D00F40A5 0020","800D9EC1 00??","800D9F64 00??","800DA078 00??","800DA321 00??"],"options":{"F1 Car":"0A","Hot Rod":"09","Taxi":"08"}},"Car Type":{"note":"It gets you from 0-150 in the the time it takes the F1 racer to. Don't use the F1 racer and only hold until you reach 150 or the game will freeze.","data":["800F40B1 00??"],"options":{"Fat Car":"02","Flat Car":"01","Giant Car":"03","Invisible Car":"0A","Invisible Car (Can See Wheels)":"CD","Normal Car":"00","Paper-Thin Cars":"66","Screen-Talled Cars":"6E","Super-Sky Car":"BB","Super-Sky Car #2":"DD","Super-Tiny Car":"FF","Super-Tiny Car #2":"44"}},"Edge Boost":{"note":"by pressing R you will get a small speed boost that pushes you ahead.","data":["D00F40A5 0010","81101331 FFFF"],"options":null},"Gravity":{"note":"","data":["800F3D91 00??"],"options":{"1 Weight":"02","2 Weights":"03","A Balloon \u0026 2 Weights":"00","Normal":"01"}},"Have Two Special Cars":{"note":"You receive the Hotrod and Taxi with this code, but you may have to go through the cars from the \"Beginning\" past the \"Extreme\" for them to appear.","data":["810CAC82 FFFF","810CAC98 FFFF","810CACAE FFFF","810CACC4 FFFF","810CACDA FFFF","810CACF0 FFFF"],"options":null},"Press GS For Track Select":{"note":"With this code, press GS when on the track selction screen and press A to select that track!","data":["88100050 00??"],"options":{"Track 1":"00","Track 2":"01","Track 3":"02","Track 4":"03","Track 5":"04","Track 6":"05","Track 7":"06"}}},"2AF9B65C-85E2A2D7-C:45":{"Always Place 1st":{"note":"","data":["800A960F 0000"],"options":null},"Infinite Time":{"note":"","data":["80094E97 0064"],"options":null},"Low Course Time":{"note":"","data":["8009483B 0000"],"options":null}},"2B38AEC0-6350B810-C:46":{"Always Have\\50 pieces of corn":{"note":"","data":["801E27C1 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E27B0 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["811E27AE 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E27C2 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E27B5 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E27C0 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D0090001 0010","811E2726 1000","D0090001 0010","811E2736 1000"],"options":null},"No Music":{"note":"","data":["801DD966 0000"],"options":null},"Start with Berry Weapon":{"note":"","data":["801E27B7 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Subtitles On":{"note":"","data":["801DDBDB 00??"],"options":{"Off":"00","On":"01"}},"Unlock All Levels":{"note":"","data":["81099E90 000F"],"options":null}},"2B4F4EFB-43C511FE-C:50":{"Always Have Weapon Options\\Player 1":{"note":"","data":["810E2DD4 00??"],"options":{"Anvil":"79","Bee hive":"6D","Bird bath":"04","Blue Swordfish":"63","Bouy":"29","Broom":"08","Chair":"0B","Champagne":"0C","Chicken":"0E","Club":"03","Crate":"0F","Deck chair":"14","Egg":"16","Fish":"1A","Frying Pan":"1E","Gardeners Fork":"1D","Mallet":"2A","Milk Bottle":"2D","Mooses head":"78","NCube knife":"09","NCube missiles":"0A","Plank":"39","Rolling Pin":"41","Saucepan":"64","Spade":"46","Spanner":"4E","Stick":"55","Stool":"6B","Tennis Racket":"48","Watermelon":"2B","Wooden Chair":"1F","Wooden Spoon":"65"}},"Always Have Weapon Options\\Player 2":{"note":"","data":["810E30AC 00??"],"options":{"Anvil":"79","Bee hive":"6D","Bird bath":"04","Blue Swordfish":"63","Bouy":"29","Broom":"08","Chair":"0B","Champagne":"0C","Chicken":"0E","Club":"03","Crate":"0F","Deck chair":"14","Egg":"16","Fish":"1A","Frying Pan":"1E","Gardeners Fork":"1D","Mallet":"2A","Milk Bottle":"2D","Mooses head":"78","NCube knife":"09","NCube missiles":"0A","Plank":"39","Rolling Pin":"41","Saucepan":"64","Spade":"46","Spanner":"4E","Stick":"55","Stool":"6B","Tennis Racket":"48","Watermelon":"2B","Wooden Chair":"1F","Wooden Spoon":"65"}},"Infinite Health":{"note":"","data":["800E2BDD 00C8"],"options":null},"Infinite time":{"note":"","data":["800FF18E 00F0"],"options":null},"No music":{"note":"","data":["800B7718 0000"],"options":null},"One Hit To Kill\\Player 1":{"note":"This Will Give Player 1 A One Hit Kill Over Player 2","data":["800E2EB4 0080"],"options":null},"One Hit To Kill\\Player 2":{"note":"This Will Give Player 2 A One Hit Kill Over Player 1","data":["800E2BDC 0080"],"options":null},"Open All Versus Arenas":{"note":"","data":["800E4934 00FF","800E4935 00FF"],"options":null},"[Unlock All Characters]":{"note":"This Gives you all Characters to choose from plus fixes A freeze on the Charecter Select Menu by having it on","data":["800E4933 00FF"],"options":null}},"2B6FA7C0-09A71225-C:45":{"Aquadome Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE013 0000"],"options":null},"Aquadome Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F14A3 0000"],"options":null},"Aquadome Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE012 0200"],"options":null},"Aquadome Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F14B2 0200"],"options":null},"Aquadome Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE00B 00AA"],"options":null},"Aquadome Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F14AB 00AA"],"options":null},"Aquadome Stage\\No Energy\\Player 1":{"note":"","data":["801EE00B 0000"],"options":null},"Aquadome Stage\\No Energy\\Player 2":{"note":"","data":["801F14AB 0000"],"options":null},"Backwash Bay Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE763 0000"],"options":null},"Backwash Bay Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1C03 0000"],"options":null},"Backwash Bay Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE772 0200"],"options":null},"Backwash Bay Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1C12 0200"],"options":null},"Backwash Bay Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE76B 00AA"],"options":null},"Backwash Bay Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1C0B 00AA"],"options":null},"Backwash Bay Stage\\No Energy\\Player 1":{"note":"","data":["801EE76B 0000"],"options":null},"Backwash Bay Stage\\No Energy\\Player 2":{"note":"","data":["801F1C0B 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EF1B3 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F2653 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EF1C2 0200"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F2662 0200"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EF1BB 00AA"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F265B 00AA"],"options":null},"Boogerhenge, Tureen Toilet Stage\\No Energy\\Player 1":{"note":"","data":["801EF1BB 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\No Energy\\Player 2":{"note":"","data":["801F265B 0000"],"options":null},"Candy Factory Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE8E3 0000"],"options":null},"Candy Factory Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1D83 0000"],"options":null},"Candy Factory Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE8F2 0200"],"options":null},"Candy Factory Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1D92 0200"],"options":null},"Candy Factory Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE8EB 00AA"],"options":null},"Candy Factory Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1D8B 00AA"],"options":null},"Candy Factory Stage\\No Energy\\Player 1":{"note":"","data":["801EE8EB 0000"],"options":null},"Candy Factory Stage\\No Energy\\Player 2":{"note":"","data":["801F1D8B 0000"],"options":null},"Clayribbean Cruise Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE6D3 0000"],"options":null},"Clayribbean Cruise Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1B73 0000"],"options":null},"Clayribbean Cruise Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE6E2 0200"],"options":null},"Clayribbean Cruise Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1B82 0200"],"options":null},"Clayribbean Cruise Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE6DB 00AA"],"options":null},"Clayribbean Cruise Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1B7B 00AA"],"options":null},"Clayribbean Cruise Stage\\No Energy\\Player 1":{"note":"","data":["801EE6DB 0000"],"options":null},"Clayribbean Cruise Stage\\No Energy\\Player 2":{"note":"","data":["801F1B7B 0000"],"options":null},"Extra Characters and Secret Options":{"note":"","data":["8019ED41 000F"],"options":null},"Freezing Fortress Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE573 0000"],"options":null},"Freezing Fortress Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1A13 0000"],"options":null},"Freezing Fortress Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE582 0200"],"options":null},"Freezing Fortress Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1A22 0200"],"options":null},"Freezing Fortress Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE57B 00AA"],"options":null},"Freezing Fortress Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1A1B 00AA"],"options":null},"Freezing Fortress Stage\\No Energy\\Player 1":{"note":"","data":["801EE57B 0000"],"options":null},"Freezing Fortress Stage\\No Energy\\Player 2":{"note":"","data":["801F1A1B 0000"],"options":null},"Ghastly Graveyard Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE803 0000"],"options":null},"Ghastly Graveyard Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1CA3 0000"],"options":null},"Ghastly Graveyard Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE812 0200"],"options":null},"Ghastly Graveyard Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1CB2 0200"],"options":null},"Ghastly Graveyard Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE80B 00AA"],"options":null},"Ghastly Graveyard Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1CAB 00AA"],"options":null},"Ghastly Graveyard Stage\\No Energy\\Player 1":{"note":"","data":["801EE80B 0000"],"options":null},"Ghastly Graveyard Stage\\No Energy\\Player 2":{"note":"","data":["801F1CAB 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE623 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1AC3 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE632 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1AD2 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE62B 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1ACB 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\No Energy\\Player 1":{"note":"","data":["801EE62B 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\No Energy\\Player 2":{"note":"","data":["801F1ACB 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EFD93 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F3233 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EFDA2 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F3242 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EFD9B 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F323B 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\No Energy\\Player 1":{"note":"","data":["801EFD9B 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\No Energy\\Player 2":{"note":"","data":["801F323B 0000"],"options":null},"Kooky Courtyard Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE9E3 0000"],"options":null},"Kooky Courtyard Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1E83 0000"],"options":null},"Kooky Courtyard Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE9F2 0200"],"options":null},"Kooky Courtyard Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1E92 0200"],"options":null},"Kooky Courtyard Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE9EB 00AA"],"options":null},"Kooky Courtyard Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1E8B 00AA"],"options":null},"Kooky Courtyard Stage\\No Energy\\Player 1":{"note":"","data":["801EE9EB 0000"],"options":null},"Kooky Courtyard Stage\\No Energy\\Player 2":{"note":"","data":["801F1E8B 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Can't be Stunned\\Player 1":{"note":"","data":["801EE513 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Can't be Stunned\\Player 2":{"note":"","data":["801F19B3 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Full Super Bar\\Player 1":{"note":"","data":["811EE522 0200"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Full Super Bar\\Player 2":{"note":"","data":["811F19C2 0200"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Infinite Energy\\Player 1":{"note":"","data":["801EE51B 00AA"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Infinite Energy\\Player 2":{"note":"","data":["801F19BB 00AA"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\No Energy\\Player 1":{"note":"","data":["801EE51B 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\No Energy\\Player 2":{"note":"","data":["801F19BB 0000"],"options":null},"Play As\\Player1":{"note":"","data":["8019ED2F 00??"],"options":{"Bad Mr. Frosty":"00","Blob":"01","Bonker":"02","Boogerman":"03","Dr. Kiln":"04","Earthworm Jim":"05","Houngan":"08","Icky Bod Clay":"09","Kung Pow":"0A","Sumo Santa":"0D","T-Hoppy":"0F","Taffy":"0E"}},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Can't be Stunned\\Player 1":{"note":"","data":["801EDCE3 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Can't be Stunned\\Player 2":{"note":"","data":["801F1183 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Full Super Bar\\Player 1":{"note":"","data":["811EDCF2 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Full Super Bar\\Player 2":{"note":"","data":["811F1192 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Infinite Energy\\Player 1":{"note":"","data":["801EDCEB 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Infinite Energy\\Player 2":{"note":"","data":["801F118B 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\No Energy\\Player 1":{"note":"","data":["801EDCEB 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\No Energy\\Player 2":{"note":"","data":["801F118B 0000"],"options":null},"Rubbage Reef Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE5F3 0000"],"options":null},"Rubbage Reef Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1A93 0000"],"options":null},"Rubbage Reef Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE602 0200"],"options":null},"Rubbage Reef Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1AA2 0200"],"options":null},"Rubbage Reef Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE5FB 00AA"],"options":null},"Rubbage Reef Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1A9B 00AA"],"options":null},"Rubbage Reef Stage\\No Energy\\Player 1":{"note":"","data":["801EE5FB 0000"],"options":null},"Rubbage Reef Stage\\No Energy\\Player 2":{"note":"","data":["801F1A9B 0000"],"options":null},"Rubbage Room Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F0823 0000"],"options":null},"Rubbage Room Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F3CC3 0000"],"options":null},"Rubbage Room Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F0832 0200"],"options":null},"Rubbage Room Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F3CD2 0200"],"options":null},"Rubbage Room Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F082B 00AA"],"options":null},"Rubbage Room Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F3CCB 00AA"],"options":null},"Rubbage Room Stage\\No Energy\\Player 1":{"note":"","data":["801F082B 0000"],"options":null},"Rubbage Room Stage\\No Energy\\Player 2":{"note":"","data":["801F3CCB 0000"],"options":null},"Santa's Toy Factory Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EEE13 0000"],"options":null},"Santa's Toy Factory Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F22B3 0000"],"options":null},"Santa's Toy Factory Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EEE22 0200"],"options":null},"Santa's Toy Factory Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F22C2 0200"],"options":null},"Santa's Toy Factory Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EEE1B 00AA"],"options":null},"Santa's Toy Factory Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F22BB 00AA"],"options":null},"Santa's Toy Factory Stage\\No Energy\\Player 1":{"note":"","data":["801EEE1B 0000"],"options":null},"Santa's Toy Factory Stage\\No Energy\\Player 2":{"note":"","data":["801F22BB 0000"],"options":null},"Stage Select":{"note":"","data":["8019ED2B 00??"],"options":{"Aquadome":"19","Backwash Bay":"16","Boogerhenge":"15","Camp Claynaveral":"02","Candy Factory":"00","Claynaveral Hangar":"01","Clayribbean Cruise":"11","Fiery Furnace":"0F","Freezing Fortress":"08","Ghastly Graveyard":"05","Grotto Gulch":"0A","Happy Harry's Hut":"07","Kiln's Hideout":"0E","Kiln's Laboratory":"0D","Kooky Courtyard":"13","Mudville Mansion":"04","Outhouse":"03","Refuse Room":"09","Research Room":"10","Rubbage Reef":"0C","Rubbage Room":"0B","Santa's Toy Factory":"14","Santa's Workship":"12","Spooky Spire":"06","Tribal Tower":"18","Tureen Toilet":"17"}},"Tribal Tower Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EDD83 0000"],"options":null},"Tribal Tower Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1223 0000"],"options":null},"Tribal Tower Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EDD92 0200"],"options":null},"Tribal Tower Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1232 0200"],"options":null},"Tribal Tower Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EDD8B 00AA"],"options":null},"Tribal Tower Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F122B 00AA"],"options":null},"Tribal Tower Stage\\No Energy\\Player 1":{"note":"","data":["801EDD8B 0000"],"options":null},"Tribal Tower Stage\\No Energy\\Player 2":{"note":"","data":["801F122B 0000"],"options":null}},"2BC1FCF2-7B9A0DF4-C:58":{"All Items":{"note":"","data":["50002402 0202","810ED130 0001","50004601 0000","800ED1B1 0003"],"options":null},"Item Modifier Codes\\Position 01":{"note":"","data":["800ED130 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 02":{"note":"","data":["800ED131 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 03":{"note":"","data":["800ED132 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 04":{"note":"","data":["800ED133 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 05":{"note":"","data":["800ED134 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 06":{"note":"","data":["800ED135 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 07":{"note":"","data":["800ED136 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 08":{"note":"","data":["800ED137 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 09":{"note":"","data":["800ED138 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 10":{"note":"","data":["800ED139 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 11":{"note":"","data":["800ED13A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 12":{"note":"","data":["800ED13B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 13":{"note":"","data":["800ED13C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 14":{"note":"","data":["800ED13D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 15":{"note":"","data":["800ED13E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 16":{"note":"","data":["800ED13F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 17":{"note":"","data":["800ED140 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 18":{"note":"","data":["800ED141 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 19":{"note":"","data":["800ED142 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 20":{"note":"","data":["800ED143 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 21":{"note":"","data":["800ED144 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 22":{"note":"","data":["800ED145 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 23":{"note":"","data":["800ED146 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 24":{"note":"","data":["800ED147 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 25":{"note":"","data":["800ED148 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 26":{"note":"","data":["800ED149 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 27":{"note":"","data":["800ED14A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 28":{"note":"","data":["800ED14B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 29":{"note":"","data":["800ED14C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 30":{"note":"","data":["800ED14D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 31":{"note":"","data":["800ED14E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 32":{"note":"","data":["800ED14F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 33":{"note":"","data":["800ED150 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 34":{"note":"","data":["800ED151 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 35":{"note":"","data":["800ED152 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 36":{"note":"","data":["800ED153 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 37":{"note":"","data":["800ED154 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 38":{"note":"","data":["800ED155 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 39":{"note":"","data":["800ED156 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 40":{"note":"","data":["800ED157 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 41":{"note":"","data":["800ED158 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 42":{"note":"","data":["800ED159 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 43":{"note":"","data":["800ED15A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 44":{"note":"","data":["800ED15B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 45":{"note":"","data":["800ED15C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 46":{"note":"","data":["800ED15D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 47":{"note":"","data":["800ED15E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 48":{"note":"","data":["800ED15F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}}},"2BCCF9C4-403D9F6F-C:4A":{"Always 1st":{"note":"","data":["802133B6 0001"],"options":null},"Always Win Race Heats":{"note":"","data":["802133B6 0001","80377B60 0001","8021455F 0001","80381424 0001"],"options":null},"Class Select":{"note":"This code is useful because you can play Class AA without having to beat a level!","data":["80206857 00??"],"options":{"1 Play":"04","2 Play":"05","3 Play":"06","4 Play":"07","Class AA":"03","Class B":"01","Class C":"00"}},"Super Speed":{"note":"This is Turbo fast,So to slow it down a little more keep the B button pressed down","data":["81213568 4800"],"options":null}},"2C739EAC-9EF77726-C:50":{"Always Have\\BFG":{"note":"","data":["8006338B 0001"],"options":null},"Always Have\\Bio Suite":{"note":"","data":["80063333 00??"],"options":{"Off":"00","On":"FF"}},"Always Have\\Chain Gun":{"note":"","data":["8006337F 0001"],"options":null},"Always Have\\Chainsaw":{"note":"","data":["8006336B 0001"],"options":null},"Always Have\\Double Shotgun":{"note":"","data":["8006337B 0001"],"options":null},"Always Have\\Gun":{"note":"","data":["80063373 0001"],"options":null},"Always Have\\Have Laser Weapon":{"note":"","data":["8006338D 0001"],"options":null},"Always Have\\Have Rocket Launcher":{"note":"","data":["80063381 0001"],"options":null},"Always Have\\Missile Ammo":{"note":"","data":["8006339F 0064"],"options":null},"Always Have\\Missile Launcher":{"note":"","data":["80063383 0001"],"options":null},"Always Have\\Plasma Rifle":{"note":"","data":["80063387 0001"],"options":null},"Always Have\\Shotgun":{"note":"","data":["80063377 0001"],"options":null},"Enable Cheat Menu":{"note":"","data":["8005AA23 0001"],"options":null},"Have All\\Keys":{"note":"","data":["50000504 0000","810634DE FFFF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000A04 0000","8106350A 0001"],"options":null},"Infinite\\Ammo All Weapons":{"note":"","data":["50000404 0000","81063532 013C"],"options":null},"Infinite\\Armor":{"note":"","data":["800634BF 00FF"],"options":null},"Invincible":{"note":"","data":["8006355B 0002"],"options":null},"Invincible And Map Markers":{"note":"","data":["800633BB 0006"],"options":null},"Rapid Fire":{"note":"","data":["810633EA 0B94"],"options":null},"Turn Map Markers On":{"note":"","data":["800633BB 0004"],"options":null},"[Max Brightness]":{"note":"Enable this cheat on rom load to have Max Brightness (internal) and then put Jabo d3d8 on 160% Max for a extra brightness Boost.","data":["8005AA18 0064"],"options":null}},"2DC4FFCC-C8FF5A21-C:50":{"Have\\Max Gold":{"note":"","data":["50000401 0000","80277AA5 00FF"],"options":null},"Have\\Max Total XP":{"note":"","data":["50000401 0000","8027931D 00FF"],"options":null},"Have\\Max Total XP Remaning to Start":{"note":"This will give you 16777215 Total XP Remaning to start with and after your 1st batle will allow you to buy your Max Stats","data":["50000401 0000","80279321 00FF"],"options":null},"Infinite\\99 Health Potions":{"note":"Do Not put this cheat on until you have collected your 1st Health Potion from the 1st Cheat or you will not be able to get into the Sub menu and Continue the game.","data":["8027876B 0063"],"options":null},"Infinite\\Max Health":{"note":"","data":["80279308 001E"],"options":null}},"2E0E7749-B8B49D59-C:58":{"Access In-Game Cheat Menu":{"note":"","data":["8113568C FFFF","8113568E FFFF"],"options":null}},"2E359339-3FA5EDA6-C:50":{"Clear Mission Selector":{"note":"","data":["8112976C 00??"],"options":{"1":"01","2":"02","3":"03","4":"04","5":"05","6":"06","7":"07","8":"08"}},"Gun 4-Way Shot":{"note":"","data":["80129A13 0004"],"options":null},"Infinite Fuel":{"note":"","data":["81129A16 FFFF"],"options":null},"Infinite Shield":{"note":"","data":["811299B8 03E8"],"options":null},"Infinite Weapon\\1st Position":{"note":"","data":["8012972B 0063"],"options":null},"Infinite Weapon\\2nd Position":{"note":"","data":["8012972F 0063"],"options":null},"Infinite Weapon\\3rd Position":{"note":"","data":["80129733 0063"],"options":null},"Infinite Weapon\\4th Position":{"note":"","data":["80129737 0063"],"options":null},"Infinite Weapon\\5th Position":{"note":"","data":["8012973B 0063"],"options":null},"Max Score":{"note":"","data":["81129716 FFFF"],"options":null},"Opens All 5 Item Slots":{"note":"","data":["8012974B 0005"],"options":null},"Option On":{"note":"","data":["8112976A 0001"],"options":null},"Score Attack Mode":{"note":"","data":["81129762 0001"],"options":null},"Stage Select On":{"note":"","data":["81129766 0001"],"options":null},"Texture Mode":{"note":"","data":["81129774 0001"],"options":null},"Weapon Modifier\\1st Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["80129729 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\2nd Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["8012972D 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\3rd Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["801297E1 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\4th Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["801297E5 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\5th Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["801297E9 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\Gun Weapon":{"note":"","data":["80129A13 00??"],"options":{"2-Way Shot":"02","3-Way Shot":"03","4-Way Shot":"04","No Weapon":"00","Normal Shot":"01"}}},"2E955ECD-F3000884-C:45":{"Bowl A Perfect Game":{"note":"","data":["5000090C 0000","800AC9F0 000A","800ACA5E 000A"],"options":null}},"2F493DD0-2E64DFD9-C:45":{"Have\\All Guns In Chest":{"note":"","data":["50000E04 0100","810E8EF4 05FF"],"options":null},"Have\\All Main Items In Chest":{"note":"If you want items that are not listed in the Chest, then just use the Have Item On Slot Select code to have what you desire.","data":["810E8F2C 17FF","810E8F30 1EFF","810E8F34 1FFF","810E8F38 23FF","50000404 0100","810E8F3C 25FF","810E8F4C 2AFF","810E8F50 2BFF","50000304 0100","810E8F54 2EFF","50000F04 0100","810E8F60 32FF","810E8F9C 43FF","50000504 0100","810E8FA0 47FF","50000404 0100","810E8FB4 53FF","50000C04 0100","810E8FC4 58FF"],"options":null},"Have\\Fine Condition Always":{"note":"","data":["810E13E4 0000"],"options":null},"Have\\Item On Slot Select\\Slot 01":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EC8 00??","800E8EC9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 02":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ECC 00??","800E8ECD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 03":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED0 00??","800E8ED1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 04":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED4 00??","800E8ED5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 05":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED8 00??","800E8ED9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 06":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EDC 00??","800E8EDD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 07":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE0 00??","800E8EE1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 08":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE4 00??","800E8EE5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 09":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE8 00??","800E8EE9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 10":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EEC 00??","800E8EED 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Infinite\\Health":{"note":"","data":["810E1322 00C8"],"options":null},"Infinite\\Time":{"note":"","data":["800E8CBF 0010"],"options":null},"Play As":{"note":"This allows you to select what character you wish to play as. Just slect on load and select as normal at the menu and when in game you will be the character of your choice","data":["810E1138 ????"],"options":{"Ada (can crash the game)":"0E80","Cheryl":"0F80","Claire Original":"0380","Claire as Biker":"0980","Claire without jacket":"0780","Claires body Leons outfit":"0B80","Hunk (can crash the game)":"0C80","Leon Original":"0280","Leon Wounded":"0680","Leon as Biker":"0A80","Leon as Stars":"0880","To Fu":"0D80"}},"Play Extra Mission":{"note":"This allows you to select what extra mission you wish to play. Just slect on load and carry on as normal at the menu and when in game you will be the character of your choice Do not use at the same time as [Resident Evil 2 Mode]","data":["810E10EE 00??"],"options":{"The 4th Survior":"48","To-Fu":"49"}},"Quick Chest Access":{"note":"With this code, all you have to do to access the chest, is hold L and Press Start.","data":["D1014FA4 1020","8012BFA8 0001"],"options":null},"Quick Save Access":{"note":"(1 Anytime, anywhere, press Z and B at the same time. You'll get the standard typewriter text: \"It's an old typewriter. You can save your progress with this.\" Note that you must, of course, have an ink ribbon to save. 2) Choose \"Yes\" and you'll be able to save normally. Instead of the location name, your save file will say \"Scenario 1st\" or \"Scenario 2nd.\" 3) When you load your save file, you'll have to skip through the intro, but when the game loads up you'll be exactly where you saved!","data":["D1014FA4 6000","810E8928 8007","D1014FA4 6000","810E892A 4110"],"options":null},"[Biohazard 2 Mode]":{"note":"Note: With this enabled the game will become Bio Hazard 2, the Japanese version of Resident Evil 2! This means all text (except the text in files) is in Japanese, and all cinemas have Japanese subtitles. Note that the title screen will still say Resident Evil 2 Do not use at the same time as Play Extra Mission","data":["D10E10EE 00??","810E10EE 0000"],"options":{"Off":"00","On":"40"}},"[Saves Always 0]":{"note":"No matter how many saves you do ithis makes the game think you Have\\not saved.","data":["810E8B50 0000"],"options":null}},"2F57C9F7-F1E29CA6-C:4A":{"Have All Keys":{"note":"","data":["800C3177 0003"],"options":null},"Infinite 99 Credits":{"note":"","data":["800C30CB 0063"],"options":null},"Infinite Max Lives":{"note":"","data":["800B04D7 0004"],"options":null}},"2F7009DD-FC3BAC53-C:50":{"Diffuculty Modifier":{"note":"","data":["801195DF 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Gems":{"note":"","data":["80128F07 00FF"],"options":null},"Have All\\Level Keys":{"note":"","data":["50000604 0000","80128DE3 0007","80128DFB 001F","80128E1B 00FF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000B04 0000","80128DB7 0001","80128D33 0001"],"options":null},"Have Cheat Menu":{"note":"","data":["811195F0 FFFF","811195F2 FFFF"],"options":null},"Have\\Backpack":{"note":"","data":["80128CEB 0001","80128D2B 0001"],"options":null},"Infinite\\Air":{"note":"","data":["801290E0 0063","801E869A 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128D63 00FF","80128D73 00FF","80128D7F 00FF","50000504 0000","80128D83 00FF","80128F0B 00FF","80128F07 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128D96 5B23","80128DD7 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C1634 1E61","812A25A4 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["80128D7F 00FF"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114F8CA F803","81128D4E 0003","81128D52 0003","81128D56 0003","81128D5A 0003","81128D5E 0003","81128D62 0003","81128D66 0005"],"options":null}},"2F700DCD-176CC5C9-C:45":{"Diffuculty Modifier":{"note":"","data":["8011972F 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Level Keys":{"note":"","data":["50000604 0000","80128E83 0007","80128E9B 001F","80128EBB 00FF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000B04 0000","80128E47 0001","80128E73 0001"],"options":null},"Have\\Backpack":{"note":"","data":["80128E3B 0001","80128E7B 0001"],"options":null},"Have\\Cheat Menu":{"note":"","data":["81119690 FFFF","81119692 FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["81129180 AAE1","811E873A F1FF"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128E03 00FF","80128E13 00FF","80128E1F 00FF","50000504 0000","80128E23 00FF","80128FAB 00FF","80128FA7 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128E36 5B23","80128E77 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C16D4 1E61","812A2644 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["8005E7D9 0098","8105E7F0 2400","8005E7FD 0083"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114FA1A F803","81128E9E 0003","81128EA2 0003","81128EA6 0003","81128EAA 0003","81128EAE 0003","81128EB2 0003","81128EB6 0005"],"options":null}},"2F700DCD-176CC5C9-C:50":{"Diffuculty Modifier":{"note":"","data":["8011967F 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Gems":{"note":"","data":["80128FA7 00FF"],"options":null},"Have All\\Level Keys":{"note":"","data":["50000604 0000","80128E83 0007","80128E9B 001F","80128EBB 00FF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000B04 0000","80128E57 0001","80128DD3 0001"],"options":null},"Have Cheat Menu":{"note":"","data":["81119690 FFFF","81119692 FFFF"],"options":null},"Have\\Backpack":{"note":"","data":["80128D8B 0001","80128DCB 0001"],"options":null},"Infinite\\Air":{"note":"","data":["80129180 0063","801E873A 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128E03 00FF","80128E13 00FF","80128E1F 00FF","50000504 0000","80128E23 00FF","80128FAB 00FF","80128FA7 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128E36 5B23","80128E77 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C16D4 1E61","812A2644 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["80128E1F 00FF"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114F96A F803","81128DEE 0003","81128DF2 0003","81128DF6 0003","81128DFA 0003","81128DFE 0003","81128E02 0003","81128E06 0005"],"options":null}},"2F70F10D-5C4187FF-C:45":{"Diffuculty Modifier":{"note":"","data":["801195DF 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Level Keys":{"note":"","data":["50000604 0000","80128D33 0007","80128D4B 001F","80128D6B 00FF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000B04 0000","80128CF7 0001","80128D23 0001"],"options":null},"Have\\Backpack":{"note":"","data":["80128CEB 0001","80128D2B 0001"],"options":null},"Have\\Cheat Menu":{"note":"","data":["81119540 FFFF","81119542 FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["81129030 AAE1","811E85EA F1FF"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128CB3 00FF","80128CC3 00FF","80128CCF 00FF","50000504 0000","80128CD3 00FF","80128E5B 00FF","80128E57 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128CE6 5B23","80128D27 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C1584 1E61","812A24F4 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["8005E689 0098","8105E6A0 2400","8005E6AD 0083"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114F8CA F803","50000604 0000","81128D4E 0003","81128D66 0005"],"options":null},"Sixty Frames":{"note":"","data":["8000A13F 0001","8000A2FF 0001","8000A68F 0001"],"options":null},"Widescreen":{"note":"","data":["8103851E 43D5"],"options":null}},"30C7AC50-7704072D-C:45":{"Access All\\Chapters, Scenes,\u0026 Multi-Player Characters":{"note":"","data":["50000401 0000","800E9D01 00FF"],"options":null},"Access All\\Characters \u0026 Weapons In Multi Race":{"note":"","data":["810E9D02 ??FF"],"options":{"All Characters \u0026 Baseball bat":"FF","All Characters \u0026 Bones":"F3","All Characters \u0026 Frying Pan":"FB"}},"Conkers Speed Select":{"note":"","data":["810CC318 ????"],"options":{"Fast Conker":"3FF0","Normal Conker":"3F80","Slow Conker":"3F00","Super Fast Conker":"4030"}},"Infinite\\Accuracy Count Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game","data":["800E0B67 0001"],"options":null},"Infinite\\Bags In Heist":{"note":"","data":["800E0BE4 00FF"],"options":null},"Infinite\\Bombs":{"note":"","data":["802055CA 0030"],"options":null},"Infinite\\Head Shot Count Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game,Once you pick up a Gun a shoot once, you will 100%.","data":["800E0B6B 03E7"],"options":null},"Infinite\\Health\\Player 1":{"note":"","data":["800CC49A 0006"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["800CC7C6 270F"],"options":null},"Infinite\\Health\\Player 3":{"note":"","data":["800CCAF2 270F"],"options":null},"Infinite\\Health\\Player 4":{"note":"","data":["800CCE1E 270F"],"options":null},"Infinite\\Lives Player 1":{"note":"","data":["800D2144 0064"],"options":null},"Infinite\\Max Kills Player 1":{"note":"","data":["800E0B47 03E7"],"options":null},"Infinite\\Oxygen":{"note":"","data":["800CC382 0001"],"options":null},"Infinite\\Pots of cash":{"note":"","data":["810D214A FFFF"],"options":null},"Infinite\\Time In Multi":{"note":"","data":["8108FD7A 7500"],"options":null},"Matrix Mode (Anywhere)":{"note":"Press R to activate and then Right-C to exit.","data":["D1042A14 0010","800BEA0C 0001","D1042A14 0010","810BE574 D202","D1042A14 0001","800BEA0C 0000","D1042A14 0001","810BE574 0000"],"options":null},"Play as Option 1":{"note":"Here you can choose who you want to play as, but only one option at a time. Shadow will not be visible, except when playing as Conker.","data":["800D213F 00??"],"options":{"Army Captain":"25","Bald Caveman":"0C","Caveman":"0D","Combat Squirrel":"04","Conker":"05","Conker the Bat":"24","Dinosaur (Cannot move)":"09","Enemy Bat":"23","Female Villager":"1D","Female Villager (with hood and glasses)":"1F","Female Zombie":"22","Gregg":"27","Male Villager":"11","Male Villager (with cap and glasses and moustache)":"1C","Male Villager (with cap and glasses)":"1A","Male Villager (with cap and moustache)":"1B","Male Villager (with cap)":"19","Male Villager (with glasses and moustache)":"14","Male Villager (with glasses)":"12","Male Villager (with hat and glasses and moustache)":"18","Male Villager (with hat and glasses)":"16","Male Villager (with hat and moustache)":"17","Male Villager (with hat)":"15","Male Villager (with moustache)":"13","Male Zombie":"21","Mohican Caveman":"0E","Neo Conker":"10","Skeleton Gregg":"28","Spikey Caveman":"0F","Tank Vehicle (Cannot move)":"08","Tedi":"03","Tedi Boss":"26","Uga":"0B","Wessle":"01","Wessle (Black outfit)":"02"}},"Press L To Levitate\\Player 1":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042A15 0020","810CC2F0 41CB"],"options":null},"Press L To Levitate\\Player 2":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042A1D 0020","810CC61C 41CB"],"options":null},"Press L To Levitate\\Player 3":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042A25 0020","810CC948 41CB"],"options":null},"Press L To Levitate\\Player 4":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042A2D 0020","810CCC74 41CB"],"options":null},"Wait Animation Trigger":{"note":"","data":["800CC5C8 00??"],"options":{"Default at most":"00","Wait animations disabled":"02"}},"Weapon Select In Multi (On Pick Up)":{"note":"Select what Weapon you would like in Multi Player and then on a Weapon Pickup you will have the weapon of your choice.to change for another just Enable the one of your choice to have that instead.(you must have a weapon already to change for the next.","data":["80180873 00??"],"options":{"Buck Shot":"08","Gas Mask":"13","High Powred Riffle With Scope":"0A","Long Pistol with Sight":"06","Nothing":"02","Riffle":"05","Rocket Launcher":"07","Sword":"01","Throwing Knives":"04","Two Automatic Machine Guns":"0C","Yellow Chain-Ssaw":"03"}}},"315C7466-3A453265-C:4A":{"Infinite\\99 Credits":{"note":"","data":["80085B03 0063"],"options":null},"Infinite\\Lives":{"note":"","data":["800A0CE8 0009"],"options":null},"Infinite\\Specials":{"note":"","data":["800A0CE9 0003"],"options":null},"Max\\Combo":{"note":"","data":["810A0CE4 7FFF"],"options":null},"Max\\Lower Level":{"note":"","data":["800A0CF8 0003"],"options":null},"Max\\Score":{"note":"","data":["800A0CD8 03E7","800A0CD9 03E7"],"options":null},"Max\\Upper Level":{"note":"","data":["800A0CF9 0063"],"options":null},"Play As":{"note":"","data":["800A0CEC 00??"],"options":{"Character 1":"00","Character 2":"01","Character 3":"02"}},"Status Modifier":{"note":"","data":["800A0CEA 00??"],"options":{"High":"01","Low":"03","Mid":"02"}}},"319093EC-0FC209EF-C:45":{"1 Player\\Always Place 1st":{"note":"","data":["80103C57 0000"],"options":null},"1 Player\\Max\\Acceleration":{"note":"","data":["8012C49F 000A"],"options":null},"1 Player\\Max\\Shocks":{"note":"","data":["8012C4A7 000A"],"options":null},"1 Player\\Max\\Speed":{"note":"","data":["8012C4A3 000A"],"options":null},"1 Player\\Max\\Tires":{"note":"","data":["8012C4AB 000A"],"options":null},"Multi and 1 Player\\Infinite Turbos\\Player 1":{"note":"Can be used in 1 Player and Multiplayer Modes for Player 1","data":["81103EBA 03E7"],"options":null},"Multi and 1 Player\\Infinite Turbos\\Player 2":{"note":"Multiplayer Mode Only for Player 2","data":["811041AE 03E7"],"options":null},"Multi and 1 Player\\Max Crash Helmets\\Player 1":{"note":"Can be used in 1 Player and Multiplayer Modes for Player 1","data":["80103EB3 0064"],"options":null},"Multi and 1 Player\\Max Crash Helmets\\Player 2":{"note":"Multiplayer Mode Only for Player 2","data":["801041A7 0064"],"options":null}},"3261D479-ED0DBC25-C:45":{"Away Team Scores 0":{"note":"","data":["8012A4EA 0000"],"options":null},"Away Team Scores 150":{"note":"","data":["8012A4EA 0096"],"options":null},"Big Head Mode":{"note":"","data":["81098E88 0100"],"options":null},"Final Four Stadium":{"note":"","data":["80098E98 0089"],"options":null},"GS Button For 1-Second Shot Clock":{"note":"","data":["8912A4BC 3FC0"],"options":null},"Home Team Scores 0":{"note":"","data":["8012A4D2 0000"],"options":null},"Home Team Scores 150":{"note":"","data":["8012A4D2 0096"],"options":null},"Infinite Shot Clock":{"note":"","data":["8112A4BC 4210"],"options":null},"Infinite Time Outs Away":{"note":"","data":["8012A4EC 0006"],"options":null},"Infinite Time Outs Home":{"note":"","data":["8012A4D4 0006"],"options":null},"No Fans In Crowd":{"note":"","data":["810CA520 0454"],"options":null},"No Time Outs Away":{"note":"","data":["8012A4EC 0000"],"options":null},"No Time Outs Home":{"note":"","data":["8012A4D4 0000"],"options":null},"Partially Invisible Players":{"note":"","data":["81098E84 0100"],"options":null},"Programmers Team":{"note":"","data":["81097088 0100"],"options":null},"Shot Clock Disabled":{"note":"","data":["8109707C 0000"],"options":null},"Trail Follows The Ball":{"note":"","data":["810B4600 4100"],"options":null},"Z-Axis Stadium":{"note":"","data":["80098E98 0088"],"options":null}},"32CA974B-B2C29C50-C:46":{"Cheat Menu\\All Weapons Enabled":{"note":"","data":["801D8B19 0001","801D8B85 0001","801D9BE5 0001","801D9CE1 0001","801D9D75 0001","801D9D77 0001","801D9DA9 0001","801DA6D9 0001","801DA6E1 0001","801DA74D 0001","801DB895 0001"],"options":null},"Cheat Menu\\Cheat Menu Enabled":{"note":"","data":["801DA748 0001"],"options":null},"Cheat Menu\\Have All Game Type \u0026 Other":{"note":"","data":["810E1B5E 0FFF"],"options":null},"Cheat Menu\\Have All Weapons":{"note":"","data":["811DA6D0 FFFF"],"options":null},"Enable Debug Menu":{"note":"","data":["800DFCF0 0001"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810A21D4 A65B"],"options":null},"Invincibility":{"note":"","data":["800DF223 0001"],"options":null}},"32EFC7CB-C3EA3F20-C:45":{"Infinite Lives P1":{"note":"","data":["800CE0F3 0003"],"options":null},"Infinite Lives P2":{"note":"","data":["800CE0F7 0003"],"options":null},"Infinite Pistol Ammo":{"note":"","data":["8106006C 2400"],"options":null},"Infinite Rocket Launcher Ammo":{"note":"","data":["81060130 2400"],"options":null},"Infinite Shotgun Ammo":{"note":"","data":["810601D8 2400"],"options":null}},"33BE8CD6-EC186912-C:45":{"Character Creation\\Max\\Aerial":{"note":"","data":["80319675 0009"],"options":null},"Character Creation\\Max\\Brawling":{"note":"","data":["8031F5B5 0009"],"options":null},"Character Creation\\Max\\Dirtiness":{"note":"","data":["80321575 0009"],"options":null},"Character Creation\\Max\\Impact":{"note":"","data":["803121B5 0009"],"options":null},"Character Creation\\Max\\Mat Ability":{"note":"","data":["8031B635 0009"],"options":null},"Character Creation\\Max\\Quickness":{"note":"","data":["803176B5 0009"],"options":null},"Character Creation\\Max\\Speed":{"note":"","data":["803156F5 0009"],"options":null},"Character Creation\\Max\\Strength":{"note":"","data":["802F16F5 0009"],"options":null},"Character Creation\\Max\\Submission":{"note":"","data":["8031D5F5 0009"],"options":null},"Enable Cheat":{"note":"","data":["800B115B 00??"],"options":{"All Wrestlers":"80","Momentum Meter":"08","Play As Same Wrestler":"20","Stamina Meter":"04","Super Created Wrestlers":"02"}},"Freeze Timer":{"note":"","data":["810B3242 D300"],"options":null},"Infinite Stamina\\Player 1":{"note":"","data":["810E3998 0478"],"options":null},"Infinite Stamina\\Player 2":{"note":"","data":["810E3B34 03ED"],"options":null},"Meter Select\\Player 1":{"note":"","data":["800E399D 00??"],"options":{"Empty Meter Bar":"00","Full Meter Bar":"60"}},"Meter Select\\Player 2":{"note":"","data":["800AD80D 00??"],"options":{"Empty Meter Bar":"00","Full Meter Bar":"60"}}},"36281F23-009756CF-C:45":{"Infinite\\Balls":{"note":"","data":["8021AC47 0000"],"options":null},"Infinite\\Creation Points":{"note":"","data":["81059408 420C"],"options":null},"Infinite\\Strikes":{"note":"","data":["8021AC48 0000"],"options":null},"Inning Selection":{"note":"","data":["8021AC42 00??"],"options":{"2nd Inning":"02","3rd Inning":"03","4th Inning":"04","5th Inning":"05","6th Inning":"06","7th Inning":"07","8th Inning":"08","9th Inning":"09"}},"Max\\Arm Strength":{"note":"","data":["8105C5F8 4120"],"options":null},"Max\\Batting":{"note":"","data":["8105D6D8 4120"],"options":null},"Max\\Clutch":{"note":"","data":["8105BB98 4120"],"options":null},"Max\\Control":{"note":"","data":["8105B760 4120"],"options":null},"Max\\Defense":{"note":"","data":["8105CA60 4120"],"options":null},"Max\\Durability":{"note":"","data":["8105C098 4120"],"options":null},"Max\\Pitch Speed":{"note":"","data":["8105AE90 4120"],"options":null},"Max\\Power":{"note":"","data":["8105D270 4120"],"options":null},"Max\\Speed":{"note":"","data":["8105CE68 4120"],"options":null},"Max\\Stamina":{"note":"","data":["8105B2F8 4120"],"options":null}},"36F1C74B-F2029939-C:50":{"Always Win Judge's Decision\\Player 1":{"note":"","data":["8020B777 FFFF","802098AF 0000"],"options":null},"Always Win Judge's Decision\\Player 2":{"note":"","data":["802098AF FFFF","8020B777 0000"],"options":null},"Enable Boro":{"note":"","data":["80307349 0001"],"options":null},"Have 1 Star\\Abdul":{"note":"","data":["80307353 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["8030734F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80307352 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80307351 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80307354 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80307350 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["8030734E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80307355 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80307356 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["802098A1 0000","802047C3 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802047C7 0000","8020B769 0000"],"options":null},"Level Select":{"note":"","data":["8022A84C 00??"],"options":{"Blue Hell Mountain":"0C","Coliseum":"04","Desert":"01","Fire Mountain":"00","Highlands":"02","Hong Kong":"03","Joker's Room":"0B","Jungle":"05","Ninja Room":"06","Observation":"09","Palace":"0D","Pasture":"0A","Suspension Bridge":"07"}},"Play As\\Player 1":{"note":"","data":["802EF622 00??"],"options":{"Abdul":"05","Bob":"01","Boro":"08","Joker":"0B","Leon":"04","Meiling":"03","Ninja":"06","No Clue":"0D","Pierre":"02","Ryuji":"00","The Master":"0C","Tomahawk":"07","Ushi":"0A","Valerie":"09"}},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EF67B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0209757 0000","80209757 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020B61F 0000","8020B61F 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810ADBDC 3F80"],"options":null}},"36FA35EB-E85E2E36-C:45":{"Always On Fire Team 2\\Player 2":{"note":"","data":["800EC0CF 00??"],"options":{"Always On":"01","Never On":"00"}},"Fire Team 1\\Player 1":{"note":"","data":["800EC0CB 00??"],"options":{"Always On":"01","Never On":"00"}},"Infinite Turbo\\Player 1":{"note":"","data":["810EC12C 42C8","810EC12E 0000"],"options":null},"Infinite Turbo\\Player 2":{"note":"","data":["81DEC164 42C8","81DEC166 0000"],"options":null}},"373F5889-9A6CA80A-C:50":{"Access All\\Chapters, Scenes,\u0026 Multi-Player Characters":{"note":"","data":["50002401 0000","800EA120 00FF"],"options":null},"Access All\\Characters \u0026 Weapons In Multi Race":{"note":"","data":["810EA122 ??FF"],"options":{"All Characters \u0026 Baseball bat":"FF","All Characters \u0026 Bones":"F3","All Characters \u0026 Frying Pan":"FB"}},"Infinite\\Accuracy Count Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game,Once you pick up a Gun a shoot once, you will 100%.","data":["800E0F87 0001"],"options":null},"Infinite\\Bags In Heist":{"note":"","data":["800E1004 00FF"],"options":null},"Infinite\\Bombs":{"note":"","data":["802059EA 0030"],"options":null},"Infinite\\Head Shot Count Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game","data":["800E0F8B 0064"],"options":null},"Infinite\\Health\\Player 1":{"note":"","data":["800CC8BA 0006"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["800CCBE6 270F"],"options":null},"Infinite\\Health\\Player 3":{"note":"","data":["800CCF12 270F"],"options":null},"Infinite\\Health\\Player 4":{"note":"","data":["800CD23E 270F"],"options":null},"Infinite\\Lives Player 1":{"note":"","data":["800D2564 0063"],"options":null},"Infinite\\Max Kills Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game","data":["800E0F67 03E7"],"options":null},"Infinite\\Oxygen":{"note":"","data":["800CC7A2 0001"],"options":null},"Infinite\\Pots of cash":{"note":"","data":["810D256A FFFF"],"options":null},"Infinite\\Time In Multi":{"note":"","data":["8109019A 7500"],"options":null},"Play as":{"note":"Here you can choose who you want to play as, but only one option at a time. Shadow will not be visible, except when playing as Conker.","data":["800D255F 00??"],"options":{"Army Captain":"25","Bald Caveman":"0C","Caveman":"0D","Combat Squirrel":"04","Conker":"05","Conker the Bat":"24","Dinosaur (Cannot move)":"09","Enemy Bat":"23","Female Villager":"1D","Female Villager (with hood and glasses)":"1F","Female Zombie":"22","Gregg":"27","Male Villager":"11","Male Villager (with cap and glasses and moustache)":"1C","Male Villager (with cap and glasses)":"1A","Male Villager (with cap and moustache)":"1B","Male Villager (with cap)":"19","Male Villager (with glasses and moustache)":"14","Male Villager (with glasses)":"12","Male Villager (with hat and glasses and moustache)":"18","Male Villager (with hat and glasses)":"16","Male Villager (with hat and moustache)":"17","Male Villager (with hat)":"15","Male Villager (with moustache)":"13","Male Zombie":"21","Mohican Caveman":"0E","Neo Conker":"10","Skeleton Gregg":"28","Spikey Caveman":"0F","Tank Vehicle (Cannot move)":"08","Tedi":"03","Tedi Boss":"26","Uga":"0B","Wessle":"01","Wessle (Black outfit)":"02"}},"Press L To Levitate\\Player 1":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042DA5 0020","810CC710 41CB"],"options":null},"Press L To Levitate\\Player 2":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042DAE 0020","810CCA3C 41CB"],"options":null},"Press L To Levitate\\Player 3":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042DB5 0020","810CCD68 41CB"],"options":null},"Press L To Levitate\\Player 4":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042DBE 0020","810CD094 41CB"],"options":null},"Wait Animation Trigger":{"note":"","data":["800CC9E8 00??"],"options":{"Default at most":"00","Wait animations disabled":"02"}},"Weapon Select In Multi (On Pick Up)":{"note":"Select what Weapon you would like in Multi Player and then on a Weapon Pickup you will have the weapon of your choice.to change for another just Enable the one of your choice to have that instead.(you must have a weapon already to change for the next.","data":["80180C4B 00??"],"options":{"Buck Shot":"08","Gas Mask":"13","High Powred Riffle With Scope":"0A","Long Pistol with Sight":"06","Nothing":"02","Riffle":"05","Rocket Launcher":"07","Sword":"01","Throwing Knives":"04","Two Automatic Machine Guns":"0C","Yellow Chain-Ssaw":"03"}}},"37FA8F16-5F824D37-C:44":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["811784E0 FFFF","811784E2 FFFF","811784E6 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FCBC 270F"],"options":null}},"39119872-07722E9F-C:45":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2212 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE51F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80382CB7 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","802020F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801DDC55 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801FC5C5 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801EF96D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","80202225 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801D9ABD 0001"],"options":null}},"3918834A-15B50C29-C:45":{"Freeze Timer":{"note":"","data":["800CE4EE 0077"],"options":null},"Have All Charcters \u0026 Levels Unlocked":{"note":"","data":["50000740 0000","800CB951 0001","50000304 0000","800CB945 0001","50000304 0000","800CB985 0001","50000304 0000","800CB9C5 0001","50000304 0000","800CBA05 0001","50000304 0000","800CBA45 0001","50000304 0000","800CBA85 0001"],"options":null},"Max\\Combos Landed":{"note":"","data":["810CE4AA 03E7","810CE4AE 03E7"],"options":null},"Max\\Tricks Landed":{"note":"","data":["810CE4A6 03E7","810CE4A2 03E7"],"options":null},"Max\\Wheels Collected":{"note":"","data":["800CE513 00??"],"options":{"0 Wheels":"00","30 Wheels":"1E","40 Wheels":"28"}},"Zero Crash Counts":{"note":"","data":["800CE49F 0000"],"options":null}},"392A0C42-B790E77D-C:45":{"All Missions Unlocked":{"note":"","data":["810C1F10 000B"],"options":null},"Infinite Ammo":{"note":"","data":["8103A180 2400"],"options":null},"Infinite Health":{"note":"","data":["8105518A 2400"],"options":null}},"399B9B81-D533AD11-C:4A":{"Access\\All Secret Characters":{"note":"","data":["50000C04 0000","80183D6F 0001"],"options":null},"Access\\All Superbikes":{"note":"","data":["50000304 0000","80183D6F 0001"],"options":null},"Access\\All Tracks":{"note":"","data":["50000BD8 0000","80183327 0001"],"options":null},"Always 1st":{"note":"","data":["80171063 0001"],"options":null},"Infinite\\Nitros":{"note":"","data":["81170F02 0003","81170F06 0003"],"options":null},"Infinite\\Shield":{"note":"","data":["81170F2C 42C8"],"options":null},"Max Points":{"note":"","data":["80183DD3 0064"],"options":null},"[Screen Hud Clear]":{"note":"This Fixes the Problem on all Plugins that have Hud covering the Screen.Let the game load 1st before Putting this code on,Or it will give an error and Freeze","data":["80092D1B 0004"],"options":null}},"3A089BBC-54AB2C06-C:0":{"Infinite Health":{"note":"","data":["800794CB 0009"],"options":null}},"3A089BBC-54AB2C06-C:00":{"Infinite Health":{"note":"","data":["800794CB 0009"],"options":null}},"3A4760B5-2D74D410-C:45":{"Character Select":{"note":"","data":["80075F52 00??"],"options":{"Big Head.":"04","Flame Grilled":"08","Normal":"00","Play as Deadwing.":"01"}},"Have All\\Cheats: Book of Shadows":{"note":"","data":["81075F4E 0FFF"],"options":null},"Have All\\Dark Souls Collected":{"note":"","data":["80075F49 0078"],"options":null},"Have All\\Gads \u0026 The Poign":{"note":"","data":["80030E57 000F"],"options":null},"Have All\\Items":{"note":"Youll not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50001B20 0000","80030613 000B"],"options":null},"Have All\\L-Eclipser":{"note":"You will not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50000320 0000","80030973 000B"],"options":null},"Have All\\Levels Unlocked":{"note":"","data":["5000101C 0000","80030A0E 0001"],"options":null},"Infinite\\0.9mm Ammo":{"note":"","data":["81075B3A 0190"],"options":null},"Infinite\\Accumulators":{"note":"","data":["800306D7 0005"],"options":null},"Infinite\\Cadeaux'":{"note":"","data":["81075B36 03E7"],"options":null},"Infinite\\Max Health/Air/Shadow Charge \u0026 Voodoo Power":{"note":"","data":["50000604 0000","81075B16 2710"],"options":null},"Infinite\\Prisms":{"note":"","data":["80030957 0003"],"options":null},"Infinite\\Retractors":{"note":"","data":["800308B7 0003"],"options":null},"Infinite\\Shotgun Shells":{"note":"","data":["80075B2F 0063"],"options":null},"Infinite\\Violator Ammo":{"note":"","data":["81075B32 03E7"],"options":null},"Press L To Levitate":{"note":"Press the L-Button to rise and let go and press again in stages to come back down.","data":["D0059097 0020","80075578 0041"],"options":null},"[Ammo Always Displayed On Screen]":{"note":"","data":["50000408 0000","80075ACD 0007"],"options":null},"[Health Meter Displayed On Screen]":{"note":"","data":["81075B10 0000","81075B12 00FF"],"options":null}},"3A6C42B5-1ACADA1B-C:4A":{"Have All\\Characters Available":{"note":"","data":["8105DEB8 FFFF"],"options":null},"Have All\\Courts Available":{"note":"","data":["8105DEBC FFFF"],"options":null},"Score\\Player 1":{"note":"","data":["8014B1DA 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}},"Score\\Player 2":{"note":"","data":["8014B1DB 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}}},"3B941695-F90A5EEB-C:50":{"Access\\All Gadgets and Items":{"note":"","data":["801147DD 0001"],"options":null},"Access\\All Guns and Weapons":{"note":"This also comes with Ammo","data":["801147DC 0001"],"options":null},"Access\\All Levels \u0026 Difficulties":{"note":"","data":["81103B66 0021","50000D01 0000","80118F38 0001"],"options":null},"Infinite\\Oxygen":{"note":"","data":["800E25E4 0004"],"options":null},"Infinite\\Time":{"note":"","data":["81103B82 0000"],"options":null},"Invincible":{"note":"","data":["811147D8 0101"],"options":null},"Multi Player\\Access All Arenas":{"note":"","data":["801147EB 0001","811147EC 0101","801147EE 0001"],"options":null},"Multi Player\\Access All Evil Skins":{"note":"","data":["50005C0C 0000","800C0167 0081"],"options":null},"Multi Player\\Access All Scenarios":{"note":"","data":["801147EF 0001","811147F0 0101"],"options":null},"Multi Player\\Access All Weapon Modes":{"note":"","data":["811147F2 0101","801147F4 0001"],"options":null},"Multi Player\\Access Evil Q":{"note":"","data":["800C06EF 0081"],"options":null},"Multi Player\\Access Good Q":{"note":"","data":["800C06EF 0001"],"options":null},"Multi Player\\Invincible":{"note":"","data":["811147D8 0101"],"options":null}},"3BA7CDDC-464E52A0-C:4A":{"Widescreen":{"note":"","data":["8102D204 2407","8102D206 018A"],"options":null}},"3C059038-C8BF2182-C:45":{"Enable All\\Cars":{"note":"","data":["80140D1F 003F"],"options":null},"Enable All\\Expert Times":{"note":"","data":["80140D1C 0031"],"options":null},"Enable All\\Tracks":{"note":"","data":["80140D1A 0070"],"options":null},"Unlock Champ":{"note":"","data":["80140D28 0001"],"options":null},"Unlock Cheat Menu":{"note":"","data":["D11B1F14 0000","811B1F14 00FF","811D530A 04FF","D11B1F14 00FF","811B0270 FF03"],"options":null}},"3C1FDABE-02A4E0BA-C:45":{"Single \u0026 VS Mode\\Infinite Misses\\Player 1":{"note":"","data":["80112F9F 0003"],"options":null},"Single \u0026 VS Mode\\Infinite Misses\\Player 2":{"note":"","data":["80116207 0003"],"options":null},"Single \u0026 VS Modes\\Secret Cheat Menu":{"note":"","data":["8011265F 00AD"],"options":null},"Single Player Stage Select":{"note":"","data":["810E12DC 0001"],"options":null}},"3CC77150-21CDB987-C:50":{"Don't Take Any Damage":{"note":"","data":["8104A260 2400"],"options":null},"Enable Cheat Select":{"note":"","data":["80115933 00??"],"options":{"All Weapons With Fast Run":"42","All Weapons With Infinite Ammo":"06","Fast run":"40","Have All Weapons":"02","Infinite Ammo":"04","Infinite Ammo With Fast Run":"44","Invincible":"01","Invincible With All Weapons And Fast Run":"43","Invincible With All Weapons and Ammo and Fast Run":"47","Invincible With Fast Run":"41","Invincible With Infinite Ammo and All Weapons":"07"}},"Enable In-Game Cheat Menu \u0026 Level Select":{"note":"","data":["81115936 014F"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810496D0 2400"],"options":null},"Sound Select\\Music Volume":{"note":"","data":["80115944 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"Sound Select\\SFX Volume":{"note":"","data":["80115945 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"[Press L For Levitate]":{"note":"","data":["D10F7550 0020","816FE35C 43D5"],"options":null}},"3CECBCB8-6126BF07-C:50":{"Big Score":{"note":"","data":["81164E58 8181","81164E5A 8181"],"options":null},"Instant 450kmh Boost":{"note":"Press Trigger Button","data":["D10A1F50 2000","8119D334 005A"],"options":null},"No Checkpoint time":{"note":"","data":["81164E1C 0001"],"options":null}},"3DF17480-193DED5A-C:50":{"Have All\\Levels and Bonus Stages Unlocked":{"note":"Press start in Gyro's Lab and then resume game to see all open","data":["801D6F4C 00FF","801D6F4D 00FF","801D6F4E 00FF","801D6F4F 00FF","801D6F53 00FF"],"options":null},"Have All\\Time Attack \u0026 Toy Hunting Comnpleated (All Levels)":{"note":"Press start in Gyro's Lab and then resume game to see all open","data":["801D6F58 00FF","801D6F59 00FF","801D6F5A 00FF","801D6F5B 00FF","801D6F5C 00FF","801D6F5D 00FF","801D6F5E 00FF","801D6F5F 00FF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["801D6F2E 0063"],"options":null},"Infinite\\99 Stars":{"note":"","data":["801D6F2F 0063"],"options":null},"Infinite\\Time\\Gladstones Time Attack":{"note":"","data":["801D6F27 00FF"],"options":null},"Infinite\\Time\\Nephews Toy Hunting":{"note":"","data":["801D6F23 0063"],"options":null},"Instant\\Carrier Box [Moon Walk] (Press L)":{"note":"Press and hold the L Button and you will run floating of any ledge slowing drifting down. If you keep pressing the A Button while Holding L it will act as a Moon Jump.","data":["D00CAFD1 0020","801C901F 0001"],"options":null},"Instant\\Hyperactive State [Invincible] (Press C-Right)":{"note":"","data":["D00CAFD1 0001","801CE296 0001"],"options":null},"Instant\\Rage Attack (Press C-Left)":{"note":"","data":["D00CAFD1 0002","801CE23D 0001"],"options":null}},"3E198D9E-F2E1267E-C:45":{"99 Total Houses":{"note":"","data":["8106A56A 0063"],"options":null},"Big Newspapers":{"note":"","data":["81268B5A 0001"],"options":null},"Enable Level Select":{"note":"Also accesses All Bonus Levels","data":["8006A5F7 0001"],"options":null},"Infinite Health":{"note":"","data":["8006A5D2 0064"],"options":null},"Infinite Newspapers":{"note":"","data":["81268B12 0001"],"options":null},"Invincibility":{"note":"","data":["812688FE 0001"],"options":null},"Rocket Boosters":{"note":"","data":["81268B3E 0001"],"options":null},"Super Jump Springs":{"note":"","data":["81268B3A 0001"],"options":null},"Turbo Mode":{"note":"","data":["81268B36 0001"],"options":null}},"3E5055B6-2E92DA52-C:45":{"16:9 Widescreen":{"note":"For 16:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81150146 8E39","81150148 3FE3","D10DC532 0001","81150148 4063","D10DC532 0002","81150148 3F63","810946BA 3FE3","810947EE 3FE3"],"options":null},"21:9 Widescreen":{"note":"For 21:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81150146 E38E","81150148 4018","D10DC532 0001","81150148 4098","D10DC532 0002","81150148 3F98","810946BA 4018","810947EE 4018"],"options":null},"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118D8C0 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118D8C2 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118D8C4 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118D8C6 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["50000401 0000","8018ED10 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["80165F5D 00??","80165F8A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["8016603D 00??","8016606A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["8016611D 00??","8016614A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["801661FD 00??","8016622A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["801662DD 00??","8016630A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["801663BD 00??","801663EA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818EDEF 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F6915 0020","810F69C8 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F6925 0020","810F77A0 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F6935 0020","810F8578 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F6945 0020","810F9350 4000"],"options":null},"Sixty Frames (1P Mode)":{"note":"","data":["80000FE3 0000","800014CF 0001"],"options":null},"WIP 60 FPS hack":{"note":"","data":["81001890 2419","81001892 0001","81001894 2419","81001896 0001","80000FE3 0000","800014CF 0001","81001C90 240A","81001C92 0001","81001C94 240A","81001C96 0001","81001A38 2409","81001A3A 0001","81001A3C 2409","81001A3E 0001","80122CBB 001C"],"options":null}},"3EDC7E12-E26C1CC9-C:45":{"Extra Flies":{"note":"","data":["D00A54DF 0000","800A54DF 0032"],"options":null},"Infinite Health":{"note":"","data":["800A54D9 0004"],"options":null},"Sixty Frames":{"note":"Changes an ASM value,too fast.","data":["80031D27 0001"],"options":null},"Start With 50 Remotes":{"note":"","data":["D00A54EB 0000","800A54EB 0032"],"options":null}},"40DFEDA0-3AA09CB2-C:50":{"Infinite Max\\Armour":{"note":"","data":["80145E79 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Max\\Health":{"note":"","data":["81145E6C 4316"],"options":null},"Infinite Max\\Lives (Credits)":{"note":"","data":["8012920B 0009"],"options":null},"Infinite Max\\Sword Use (Press Z)":{"note":"Press The Z Button on your controller to use the infinite Sword Flame effect","data":["80145E81 00??"],"options":{"Off":"00","On":"D0"}},"Level Select":{"note":"","data":["801249B3 00??"],"options":{"01 (Incarceration)":"00","02 (The Dead Shall Rise)":"01","03 (Crush Your Enemies)":"02","04 (Infestation)":"03","05 (The Law of Disorder)":"04","06 (The Abyss)":"05","07 (Darrc Pilgrimage)":"06","08 (Ultimate Sacrifice)":"07","09 (The Dragon Sword)":"08"}},"Setting Options\\Sound\\Format":{"note":"","data":["800FD428 00??"],"options":{"Mono":"00","Stereo":"FF"}},"Setting Options\\Sound\\Game FX":{"note":"","data":["800FD41F 00??"],"options":{"Low":"19","Max":"64","Middle":"32","Off":"00"}},"Setting Options\\Sound\\Music Volume":{"note":"","data":["800FD423 00??"],"options":{"Low":"19","Max":"64","Middle":"32","Off":"00"}},"Setting Options\\Vibration Option":{"note":"","data":["80129202 00??"],"options":{"Off":"00","On":"FF"}},"[Character Select]":{"note":"","data":["800F84F3 00??"],"options":{"Aisha":"02","Cutter":"00","Gouranga":"03","Kailan":"01"}},"[Have 999999 Score]":{"note":"","data":["811458C4 000F","811458C6 423F"],"options":null},"[Press Z for Levitate]":{"note":"","data":["D00DDF88 0020","8014665D 00EF"],"options":null}},"41380792-A167E045-C:45":{"Have All\\Divisions Complete":{"note":"","data":["8008323F 00FF"],"options":null},"Have All\\Sleds Unlocked":{"note":"","data":["8108324E FFFF"],"options":null},"Have All\\Tracks Unlocked":{"note":"","data":["81083252 03FF"],"options":null},"Have\\Max Race Points":{"note":"","data":["8108321E FFFF"],"options":null},"Have\\Max Wrenches (All Sleds)":{"note":"This will give you 100 Wrench Points for all Sledges to boost your stats","data":["50000C01 0000","80083168 0064","50000201 0000","80083177 0064","50000206 0000","8008317C 0064","50000206 0000","80083186 0064","50000301 0000","80083190 0064"],"options":null},"[Continue Tournament]":{"note":"This will allow you to Continue Tournament with All Tracks \u0026 Divisions Unlocked","data":["80083247 00FF"],"options":null}},"4147B091-63251060-C:45":{"All Levels\\Dash Becomes Shorter \u0026 Wider":{"note":"","data":["800BA025 FFFF"],"options":null},"All Levels\\Infinite\\Lives":{"note":"","data":["800E05CB 0064"],"options":null},"All Levels\\Infinite\\Missiles":{"note":"","data":["800E1265 00FF"],"options":null},"All Levels\\Large Mutant Enemies":{"note":"","data":["800BB62B FFFF"],"options":null},"All Levels\\No Clipping\\Off":{"note":"","data":["81111E67 0001"],"options":null},"All Levels\\No Clipping\\On":{"note":"","data":["81111E67 0000"],"options":null},"All Levels\\See Through\\Everything Except Specific Things":{"note":"","data":["800BC665 FFFF"],"options":null},"All Levels\\See Through\\Some Walls":{"note":"","data":["800BC625 FFFF"],"options":null},"All Levels\\Time Always 0:00:02":{"note":"","data":["810E04E8 4000"],"options":null},"All Levels\\Visibililty\\Maximum":{"note":"","data":["800BA62B FFFF"],"options":null},"All Levels\\Visibililty\\Minimum":{"note":"","data":["800BA66B FFFF"],"options":null},"All Stages\\Infinite Health":{"note":"","data":["81072D0C 2400"],"options":null},"All Stages\\Infinite\\Disruptor Ammo":{"note":"","data":["81073F04 2400"],"options":null},"All Stages\\Infinite\\Flame Ammo":{"note":"","data":["81073720 2400"],"options":null},"All Stages\\Infinite\\Jet Pack":{"note":"","data":["81076AAC 2400","81076C58 2400","81076B48 2400"],"options":null},"All Stages\\Infinite\\Pulse Ammo":{"note":"","data":["81074204 2400"],"options":null},"All Stages\\Infinite\\Seeker Ammo":{"note":"","data":["81073A94 2400"],"options":null},"All Stages\\Infinite\\Stunner Ammo":{"note":"","data":["81073BD4 2400"],"options":null},"All Stages\\Invincible":{"note":"","data":["8107A770 2400"],"options":null},"All Stages\\Lasers Never Overheat":{"note":"","data":["81073948 2400"],"options":null},"All Stages\\Upper Lasers":{"note":"Don't Use With Never Overheat Code","data":["81073944 3C06","81073946 4EFF"],"options":null},"Press GS For Pink Cheat Debug Screen":{"note":"","data":["890D01BF 0001"],"options":null}},"417DD4F4-1B482FE2-C:45":{"1 Round To Win Player 1":{"note":"","data":["D01050F3 0000","801050F3 0001"],"options":null},"99 Wins Player 1":{"note":"","data":["800FE27F 0063"],"options":null},"Big Head Mode":{"note":"","data":["80048CB5 0001"],"options":null},"Infinite\\Credits":{"note":"","data":["800493BF 00FF"],"options":null},"Infinite\\Health Player 1":{"note":"","data":["810FE0D8 0001","810FE0DA 0000"],"options":null},"Infinite\\Health Player 2":{"note":"","data":["81126F54 0001","81126F56 0000"],"options":null},"Infinite\\Time":{"note":"","data":["8010511B 0063"],"options":null},"Play\\As Goro Player 1":{"note":"","data":["800FE293 000F"],"options":null},"Play\\As Noob Saibot Player 1":{"note":"","data":["800FE293 0011"],"options":null}},"418BDA98-248A0F58-C:50":{"All 52 Gold Gems Collected":{"note":"","data":["80163640 0003","80163641 007E","80163642 00FF","80163643 00EF","80163644 00FF","80163645 007F","80163646 00FF","80163647 00FC"],"options":null},"All Stages \u0026 Chapters Unlocked":{"note":"","data":["80163648 003B"],"options":null},"Infinite\\Health\\Marina":{"note":"","data":["810E1120 03E8"],"options":null},"Infinite\\Health\\Teran":{"note":"","data":["810E5DA0 03E8"],"options":null},"Infinite\\Max Red Gems":{"note":"","data":["81169C66 270F"],"options":null},"Level Select":{"note":"To access this anytime during game, press L+R+Z to enable the menu. Press D-Pad Up / Down to move through the menu, D-Pad Left / Right to change level digits and then press Start to enter level. Don not do this whhile in pause mode (Start Button Pause) or the game will freeze.","data":["D10B0878 2030","800B0871 0004"],"options":null}},"41B25DC4-1B726786-C:45":{"Access All Bonus Cars":{"note":"","data":["50000302 0000","800985C3 0001","50000302 0000","800985CB 0001"],"options":null},"Always 1st Place":{"note":"","data":["810A5F70 0001"],"options":null},"Infinite Time":{"note":"","data":["810CE76E 03E7"],"options":null},"Max Points":{"note":"","data":["800CE743 FFFF"],"options":null},"Speedometer Select":{"note":"","data":["800CE803 00??"],"options":{"KM/H":"00","MPH":"01"}},"Start On Lap Modifier":{"note":"","data":["D00A5F75 0000","810A5F74 00??"],"options":{"Lap 1":"01","Lap 2":"02","Lap 3":"03","Lap 4":"04","Lap 5":"06","Lap 6":"06","Last Lap from Start":"07","Normal":"00"}},"Track Direction Unlocked (All Levels)":{"note":"","data":["800A4171 0003"],"options":null}},"41F2B98F-B458B466-C:45":{"All levels Complete":{"note":"","data":["50004002 0000","810A2218 0001"],"options":null},"Carrington Institute\\Have 255 targets destroyed":{"note":"","data":["810B1E34 00FF"],"options":null},"Carrington Institute\\Have 999 points in Firing Range":{"note":"","data":["810B1E32 03E7"],"options":null},"Carrington Institute\\Have Infinite time in Firing Range":{"note":"","data":["810B1E2E 004D"],"options":null},"Have All\\Weapons\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80207F10 0007","801EEF10 0007","801D5F10 0007"],"options":null},"Have All\\Weapons\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80209B80 0007","801F0B80 0007","801D7B80 0007"],"options":null},"Infinite Ammo\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8020769F 00FF","801EE69F 00FF","801D569F 00FF","80206EFB 00FF","801EDEFB 00FF","801D4EFB 00FF"],"options":null},"Infinite Ammo\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8020930F 00FF","801F030F 00FF","801D730F 00FF","80208B6B 00FF","801EFB6B 00FF","801D6B6B 00FF"],"options":null},"Infinite Health\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8120677C 3F80","811ED77C 3F80","811D477C 3F80"],"options":null},"Infinite Health\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["812083EC 3F80","811EF3EC 3F80","811D63EC 3F80"],"options":null},"Infinite Shield\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81206790 3F80","811E4950 3F80","811CB950 3F80"],"options":null},"Infinite Shield\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["811FF5C0 3F80","811E65C0 3F80","811CD5C0 3F80"],"options":null},"Multi\\Press B To Levitate\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7E4 0040","811BB720 40F2","D009C7E4 0040","801BB6D3 0000"],"options":null},"Multi\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7EC 0040","811BD390 40F2","D009C7EC 0040","801BD343 0000"],"options":null},"Multi\\Press B To Levitate\\Player 3":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7F4 0040","811BF000 40F2","D009C7F4 0040","801BEFB3 0000"],"options":null},"Multi\\Press B To Levitate\\Player 4":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7FC 0040","811C0C70 40F2","D009C7FC 0040","801C0C23 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7E4 0040","81206720 40F2","D009C7E4 0040","802066D3 0000","D009C7E4 0040","811ED720 40F2","D009C7E4 0040","801ED6D3 0000","D009C7E4 0040","811D4720 40F2","D009C7E4 0040","801D46D3 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7EC 0040","81208390 40F2","D009C7EC 0040","80208343 0000","D009C7EC 0040","811EF390 40F2","D009C7EC 0040","801EF343 0000","D009C7EC 0040","811D6390 40F2","D009C7EC 0040","801D6343 0000"],"options":null},"The Ultimate All In One":{"note":"The Ultimate All In One activate's solo missions, give all medals on solo missions, activate cheats, activate cinemas, and who knows what else. I just don't have the time to identify these codes. I know that some of this is creditted to Zap2. I don't have the time to cut those codes out.","data":["800884F3 0001","8008850E 0001","80088575 0001","50000302 0000","80088572 0001","8008858C 0001","8008858D 0001","800885A6 0001","800885A9 0001","800885C0 0001","800885DA 0001","800885DC 0001","800885F4 0001","800885F5 0001","8008860E 0001","80088610 0001","80088612 0001","80088628 0001","50000501 0000","80088642 0001","50000501 0000","8008865C 0001","50000501 0000","80088676 0001","50000501 0000","80088690 0001","50000501 0000","800886AA 0001","50000501 0000","800886C4 0001","50000501 0000","800886DE 0001","50000501 0000","800886F8 0001","50000501 0000","80088712 0001","50000501 0000","8008872C 0001","50000501 0000","80088746 0001","50000501 0000","80088760 0001","50000501 0000","8008877A 0001","50000501 0000","80088794 0001","50000501 0000","800887AE 0001","800A2219 0001","50003E02 0000","800A221D 0001","50000B01 0000","800ACCC9 0001","50000901 0000","800ACCD5 0001","50000401 0000","800ACCDF 0001","50000301 0000","800ACCE4 0001","800ACCE8 0001","800ACCE9 0001","800ACCEB 0001","800ACCEC 0001","50000901 0000","800ACCEE 0001","800ACCF8 0001","50002101 0000","800ACCFA 0001","800ACD12 0001","800ACD15 0001","800ACD16 0001","800ACDEA 0001","800ACD3A 0001"],"options":null}},"4222D89F-AFE0B637-C:45":{"Always Gets Bubbles\\Player 1":{"note":"","data":["800ECE59 0007"],"options":null},"Always Gets Bubbles\\Player 2":{"note":"","data":["800ECF49 0007"],"options":null},"Always Gets Bubbles\\Player 3":{"note":"","data":["801588B1 0007"],"options":null},"Always Gets Bubbles\\Player 4":{"note":"","data":["801589A1 0007"],"options":null},"Ceiling Never Drops\\Player 1":{"note":"","data":["810ECDEE 0000"],"options":null},"Ceiling Never Drops\\Player 2":{"note":"","data":["810ECEDE 0000"],"options":null},"Ceiling Never Drops\\Player 3":{"note":"","data":["81158846 0000"],"options":null},"Ceiling Never Drops\\Player 4":{"note":"","data":["81158974 0000"],"options":null},"Infinite Time To Set Pieces\\Player 1":{"note":"","data":["810ECE2C 0000"],"options":null},"Infinite Time To Set Pieces\\Player 2":{"note":"","data":["810ECF1C 0000"],"options":null},"Infinite Time To Set Pieces\\Player 3":{"note":"","data":["81158884 0000"],"options":null},"Infinite Time To Set Pieces\\Player 4":{"note":"","data":["81158936 0000"],"options":null},"Never Gets Bubbles\\Player 1":{"note":"","data":["800ECE59 0000"],"options":null},"Never Gets Bubbles\\Player 2":{"note":"","data":["800ECF49 0000"],"options":null},"Never Gets Bubbles\\Player 3":{"note":"","data":["801588B1 0000"],"options":null},"Never Gets Bubbles\\Player 4":{"note":"","data":["801589A1 0000"],"options":null}},"423E96F4-CE88F05B-C:45":{"Always Have\\BFG 9000":{"note":"","data":["8006338B 0001"],"options":null},"Always Have\\Bio Suite":{"note":"","data":["80063333 00??"],"options":{"Off":"00","On":"FF"}},"Always Have\\Chain Gun":{"note":"","data":["8006337F 0001"],"options":null},"Always Have\\Chainsaw":{"note":"","data":["8006336B 0001"],"options":null},"Always Have\\Double Shotgun":{"note":"","data":["8006337B 0001"],"options":null},"Always Have\\Gun":{"note":"","data":["80063373 0001"],"options":null},"Always Have\\Have Rocket Launcher":{"note":"","data":["80063381 0001"],"options":null},"Always Have\\Laser Weapon":{"note":"","data":["8006338F FFFF"],"options":null},"Always Have\\Missile Launcher":{"note":"","data":["80063383 0001"],"options":null},"Always Have\\Plasma Rifle":{"note":"","data":["80063387 0001"],"options":null},"Always Have\\Shotgun":{"note":"","data":["80063377 0001"],"options":null},"Berserk Mode":{"note":"","data":["8006332B 00FF"],"options":null},"Enable Cheat Menu":{"note":"","data":["8005A883 0001"],"options":null},"Have All Keys":{"note":"","data":["8006333F 0001","80063343 0001","80063344 0001","80063353 0001","8006334F 0001","80063348 0001"],"options":null},"Infinite\\Ammo All Weapons":{"note":"","data":["80063393 00FF","80063397 00FF","8006339B 00FF","8006339F 00FF"],"options":null},"Infinite\\Armor":{"note":"","data":["8006331F 00FF"],"options":null},"Invincible":{"note":"","data":["800633BB 0002"],"options":null},"Invincible And Map Markers":{"note":"","data":["800633BB 0006"],"options":null},"Rapid Fire":{"note":"","data":["810633EA 0B94"],"options":null},"Turn Map Markers On":{"note":"","data":["800633BB 0004"],"options":null},"[Max Brightness]":{"note":"Enable this cheat on rom load to have Max Brightness (internal) and then put Jabo d3d8 on 160% Max for a extra brightness Boost.","data":["8005A878 0064"],"options":null}},"4248BA87-99BE605D-C:00":{"Always Have 0 kcal (Player 1)":{"note":"","data":["812FFBF2 0000"],"options":null},"Infinite 9 Credits":{"note":"","data":["802D9DDF 0009"],"options":null},"Player 2 has High kcal":{"note":"","data":["812FFC4E FFFF","812FFC4F FFFF"],"options":null}},"4252A5AD-AE6FBF4E-C:45":{"Infinite Coins P1":{"note":"","data":["8119ADEE 03E7"],"options":null},"Infinite Gold P1":{"note":"","data":["81088286 03E7"],"options":null},"Infinite Gold P2":{"note":"","data":["8119ADEE 03E7"],"options":null},"Infinite Health P1":{"note":"","data":["80088284 0003"],"options":null},"Infinite Health P2":{"note":"","data":["81088290 03E7"],"options":null},"Infinite Lives P1":{"note":"","data":["80088283 0003"],"options":null},"Infinite Lives P2":{"note":"","data":["8008828D 0003"],"options":null},"Open All Levels":{"note":"","data":["50002D02 0000","810882AA 0303"],"options":null}},"42CF5EA3-9A1334DF-C:50":{"All levels complete":{"note":"","data":["800D1364 000C","50000501 0000","800D1365 000A"],"options":null},"Infinite Vespene gas,minerals \u0026 Most missions":{"note":"","data":["50003202 0000","800B1D96 00FF"],"options":null}},"4446FDD6-E3788208-C:45":{"Extra Gems":{"note":"","data":["D0165241 0000","80165241 004B"],"options":null},"Full\\Bomb Power":{"note":"","data":["8016523F 0003"],"options":null},"Full\\Fire Power":{"note":"","data":["80165240 0003"],"options":null},"Infinite\\Health":{"note":"","data":["80165244 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["80165243 0009"],"options":null},"Lagfix":{"note":"For consistent 60fps.","data":["8004A822 000D"],"options":null},"Max\\Bombs":{"note":"","data":["8016523F 0008"],"options":null},"Max\\Explosion":{"note":"","data":["80165240 0008"],"options":null},"Max\\Score":{"note":"","data":["80177608 FFFF"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D005A455 0020","81154178 41CB","D005A455 0020","D0154154 0000","80154154 0040"],"options":null},"Widescreen":{"note":"","data":["81036E94 3C07","81036E96 3FE3"],"options":null}},"44995484-20A5FC5E-C:4A":{"99 Points":{"note":"","data":["801D8E13 0063"],"options":null},"Always First Place":{"note":"","data":["801D040F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801D06F3 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801D06CE 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801D0537 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801D0B5A 0005","801D0DFA 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801D053F 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800E84C3 0007"],"options":null},"Super Speed":{"note":"","data":["801D0537 0005","D0161DC1 0010","801D0537 0020"],"options":null}},"46039FB4-0337822C-C:45":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D6BE0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112E7DE 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800ECA18 0064"],"options":null},"Game 100% Complete\\Save Slot 2":{"note":"","data":["800ECA70 0064"],"options":null},"Game 100% Complete\\Save Slot 3":{"note":"","data":["800ECAC8 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D6BC0 0001","50001701 0000","800D6BC8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D6E50 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D714F 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D6BB9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D6BBA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D6BBB 0003"],"options":null},"Widescreen":{"note":"","data":["8101B0E0 0801","8101B0E2 0344","81040D10 3C1B","81040D12 3F40","81040D14 449B","81040D16 2000","81040D18 0800","81040D1A 6C3A","81040D1C 4604","81040D1E 4202"],"options":null}},"46A3F7AF-0F7591D0-C:45":{"Always Place 1st\\Player 1":{"note":"","data":["81065174 0000"],"options":null},"Infinite\\Continues":{"note":"","data":["8107F850 00FF"],"options":null},"Infinite\\Nitros\\Player 1":{"note":"","data":["800BE7FD 00FF"],"options":null},"Infinite\\Time":{"note":"","data":["810802D4 4296"],"options":null},"Unlock All Cars":{"note":"","data":["8104F10E FFFF"],"options":null}},"49088A11-6494957E-C:45":{"Access In-Game Cheat Menu":{"note":"","data":["8111AADC FFFF","8111AADE FFFF"],"options":null},"Player 1\\99 Gems":{"note":"","data":["812FC4C8 0063","806FE2F8 0063"],"options":null},"Player 1\\Have All\\Keys,Nuke,Evrything":{"note":"Only enable once in game or it will freeze before you get into the start menu","data":["802FC602 0030","802FC60C 0030","802FC616 0030","802FC620 0030","50000601 0000","802FC634 0030","50000501 0000","802FC648 0030","50000401 0000","802FC65C 0030","50000601 0000","802FC99C 0030","802FC4E0 0033","802FC4E5 0033","802FC4EA 0033","802FC594 0033","802FC530 0033","802FC53A 0033","802FC53B 0033","802FC5B0 0033","802FC5B1 0033","802FC5B2 0033","802FC5B3 0033","806FE432 0030","806FE43C 0030","806FE446 0030","806FE450 0030","50000601 0000","806FE464 0030","50000501 0000","806FE478 0030","50000501 0000","806FE48C 0030","50000601 0000","806FE4CC 0030","806FE310 0033","806FE315 0033","806FE31A 0033","806FE360 0033","806FE36A 0033","806FE36B 0033","806FE3C4 0033","50000401 0000","806FE3E0 0033","50000601 0000","8059D61A 0001","50000D01 0000","8059D620 0001","50000401 0000","8059D62E 0001"],"options":null},"Player 1\\Have All\\Weapons":{"note":"","data":["D12FC912 0000","812FC912 0101","D12FC914 0000","812FC914 0101","D12FC916 0000","812FC916 0101","D12FC918 0000","812FC918 0101","D12FC91A 0000","812FC91A 0101","D12FC91C 0000","812FC91C 0101","D12FC91E 0000","812FC91E 0101","D12FC920 0000","812FC920 0101","D12FC922 0000","812FC922 0101","D12FC924 0000","812FC924 0101","D12FC926 0000","812FC926 0101","D12FC928 0000","812FC928 0101","D12FC92A 0000","812FC92A 0101","D12FC92C 0000","812FC92C 0101","D12FC92E 0000","812FC92E 0101","D12FC930 0000","812FC930 0101","D12FC932 0000","812FC932 0101","806FE742 0001","806FE743 0001","806FE744 0001","806FE745 0001","806FE746 0001","806FE747 0001","806FE748 0001","806FE749 0001","806FE74A 0001","806FE74B 0001","806FE74C 0001","806FE74D 0001","806FE74E 0001","806FE74F 0001","806FE750 0001","806FE751 0001","806FE752 0001","806FE753 0001","806FE754 0001","806FE756 0001","806FE757 0001","806FE758 0001","806FE759 0001","806FE75A 0001","806FE75B 0001","806FE75C 0001","806FE75E 0001","806FE75F 0001","806FE760 0001","806FE761 0001","806FE762 0001","806FE763 0001","806FE764 0001"],"options":null},"Player 1\\Infinite\\Ammo":{"note":"","data":["802FC499 0000","50000302 0000","812FC8D4 0063","812FC8DE 0063","812FC8E2 0063","50000A02 0000","812FC8E6 0063","50000302 0000","816FE704 0063","816FE70E 0063","816FE712 0063","50000802 0000","816FE716 0063","816FE72C 0063","816FE730 0063"],"options":null},"Player 1\\Infinite\\Health":{"note":"","data":["812FC4C6 0064","816FE2F6 6400"],"options":null},"Player 2\\99 Gems":{"note":"","data":["812F7240 0063"],"options":null},"Player 2\\Infinite\\Ammo":{"note":"","data":["50000602 0000","812F767C 0063","812F764C 013C","812F764E 013C","50000302 0000","812F7654 013C","812F7660 013C","812F7664 013C","812F766A 013C","812F766C 013C","812F7674 013C","812F7678 013C","8159D5DC 013C","8159D5DE 013C","8159D5E4 013C","8159D5E8 013C","8159D5EA 013C","8159D5F0 013C","8159D5F4 013C","8159D5FA 013C","8159D5FC 013C","8159D604 013C","8159D608 013C","50000602 0000","8159D60C 013C"],"options":null},"Player 2\\Infinite\\Health":{"note":"","data":["812F723E 0064","8059D1CE 0064"],"options":null},"Sixty Frames":{"note":"","data":["80087CE7 0001","80087D6B 0001","80087E3B 0001","80087F37 0001","80087FBB 0001"],"options":null}},"492B9DE8-C6CCC81C-C:50":{"Have 231 Marbles":{"note":"","data":["D00EBE53 0000","800EBE53 03E7"],"options":null},"Have All Gold Udders":{"note":"","data":["50002802 0000","810C80BA 0101"],"options":null},"Infinite\\Ammo\\Banana Peel Bomb":{"note":"","data":["810C6976 0064"],"options":null},"Infinite\\Ammo\\Blaster":{"note":"","data":["810C6916 0064"],"options":null},"Infinite\\Ammo\\Boomerang Knives":{"note":"","data":["810C691E 0064"],"options":null},"Infinite\\Ammo\\Butcher Knife Gun":{"note":"","data":["800C887F 0064"],"options":null},"Infinite\\Ammo\\Chickens":{"note":"","data":["810C69BE 0064"],"options":null},"Infinite\\Ammo\\Green Slimer":{"note":"","data":["810C69A6 0064"],"options":null},"Infinite\\Ammo\\Laser":{"note":"","data":["810C698E 0064"],"options":null},"Infinite\\Ammo\\Lepricon Gun":{"note":"","data":["800C8897 0064"],"options":null},"Infinite\\Ammo\\Mushrooms":{"note":"","data":["810C6936 0064"],"options":null},"Infinite\\Ammo\\Music Gun":{"note":"","data":["810C6906 0064"],"options":null},"Infinite\\Ammo\\Pistol":{"note":"","data":["800C8777 0064"],"options":null},"Infinite\\Ammo\\Rocket Launcher":{"note":"","data":["810C6946 0064"],"options":null},"Infinite\\Ammo\\Shotgun":{"note":"","data":["810C69EE 0064"],"options":null},"Infinite\\Ammo\\Sniper Chicken":{"note":"","data":["800C881F 0064"],"options":null},"Infinite\\Health":{"note":"","data":["800C876F 0064"],"options":null},"Infinite\\Lives":{"note":"","data":["800C8773 0064"],"options":null}},"492F4B61-04E5146A-C:45":{"99 Points":{"note":"","data":["801CB343 0063"],"options":null},"Always First Place":{"note":"","data":["801C293F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801C2C03 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801C2BFE 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801C2A67 0005","8013FC91 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801C308A 0005","801C392D 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801C2A6F 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800DA9D3 0007"],"options":null},"Open\\Course Option":{"note":"This works in all modes except for Championship Mode.","data":["800DA9D3 00??"],"options":{"Dolphin Park":"00","Drake Lake":"03","Glacier Coast":"07","Marian Fortress":"04","Port Blue":"05","Southern Island":"08","Sunny Beach":"01","Sunset Bay":"02","Twilight City":"06"}},"Open\\Difficulty Option":{"note":"","data":["801CB260 00??"],"options":{"Dolphin":"10","Dolphin \u0026 Expert":"12","Dolphin \u0026 Hard":"11","Dolphin Hard \u0026 Expert":"13","Expert":"02","Hard":"01","Hard \u0026 Expert":"03"}},"Open\\Level Option":{"note":"","data":["801CB26B 00??"],"options":{"Above \u0026 Drake Lake":"03","All Above \u0026 Glacier Coast":"16","All Above \u0026 Marine Fortress":"04","All Above \u0026 Port Blue":"05","All Above \u0026 Southern Island":"06","All Above \u0026 Twilight City":"0D","Sunset Bay":"02"}},"Super Speed":{"note":"","data":["801C2A67 0005","D01CE659 0010","801C2A67 0020"],"options":null}},"4998DDBB-F7B7AEBC-C:45":{"Agility":{"note":"","data":["800A973D 0001"],"options":null},"Auto Win Scenario":{"note":"","data":["800A9741 0001"],"options":null},"Debug Menu":{"note":"","data":["800A9740 0001"],"options":null},"Double MPG":{"note":"","data":["800A9735 0001"],"options":null},"Infinite\\Ammo":{"note":"","data":["800A9731 0001"],"options":null},"Infinite\\Attempts":{"note":"","data":["800A9732 0001"],"options":null},"Infinite\\Chaingun":{"note":"","data":["800A9737 0001"],"options":null},"Infinite\\Fuel":{"note":"","data":["800A9733 0001"],"options":null},"Infinite\\Lives":{"note":"","data":["800A5DF0 0009"],"options":null},"Infinite\\Missiles":{"note":"","data":["800A9739 0001"],"options":null},"Infinite\\Rockets":{"note":"","data":["800A9738 0001"],"options":null},"Infinite\\Wingtips":{"note":"","data":["800A973A 0001"],"options":null},"Invulnerability":{"note":"","data":["800A9730 0001"],"options":null},"Level Skip":{"note":"","data":["800A973F 0001"],"options":null},"Max Armor Increased 50%":{"note":"","data":["800A973C 0001"],"options":null},"Overhead View":{"note":"","data":["800A973E 0001"],"options":null},"Play Mission\\1":{"note":"","data":["800A5DF1 0000"],"options":null},"Play Mission\\2":{"note":"","data":["800A5DF1 0001"],"options":null},"Play Mission\\3":{"note":"","data":["800A5DF1 0002"],"options":null},"Play Mission\\4":{"note":"","data":["800A5DF1 0003"],"options":null},"Play Mission\\5":{"note":"","data":["800A5DF1 0004"],"options":null},"Play Mission\\6":{"note":"","data":["800A5DF1 0005"],"options":null},"Quad Damage":{"note":"","data":["800A9736 0001"],"options":null},"Stealth Mode":{"note":"","data":["800A9734 0001"],"options":null},"Wingtips Do Double Damage":{"note":"","data":["800A973B 0001"],"options":null}},"49E46C2D-7B1A110C-C:4A":{"Have 1 Star\\Abdul":{"note":"","data":["80306A13 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["80306A0F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80306A12 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80306A11 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80306A14 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80306A10 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["80306A0E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80306A15 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80306A16 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["80208F61 0000","80203E83 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["80203E87 0000","8020AE29 0000"],"options":null},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EED3B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0208E17 0000","80208E17 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020ACDF 0000","8020ACDF 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810AD29C 3F80"],"options":null}},"4A997C74-E2087F99-C:50":{"Extreme Mode":{"note":"","data":["8111D332 0003"],"options":null},"Infinite Armour\\Player One":{"note":"","data":["8011D65F 0064"],"options":null},"Infinite Armour\\Player Two":{"note":"","data":["8011D663 0064"],"options":null},"Infinite Bombs\\Player One":{"note":"","data":["8011D667 0003"],"options":null},"Infinite Bombs\\Player Two":{"note":"","data":["8011D66B 0003"],"options":null},"Level 11 Vulcan Cannon\\Player One":{"note":"","data":["80123BAB 000A"],"options":null},"Level 11 Vulcan Cannon\\Player Two":{"note":"","data":["80123BCB 000A"],"options":null},"Level Select":{"note":"","data":["81123E16 000C"],"options":null},"Max Score":{"note":"","data":["81123B82 FC9A"],"options":null}},"4BCDFF47-AAA3AF8F-C:45":{"Have All Items":{"note":"","data":["50000501 0000","80389C4A 0001","50000301 0000","80389C51 0001","80389C5A 0001","80389C5B 0001","80389C5D 0001","50000E01 0000","80389C60 0001"],"options":null},"Have Exp Points":{"note":"","data":["80389C49 0063"],"options":null},"Have Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C3F 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C45 0001","81389C46 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C3E 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C49 0063"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C48 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the GS button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C90 ????","89389C92 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CED 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C88 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C88 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C3D 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C42 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"4C261323-4F295E1A-C:44":{"Access Level Select":{"note":"On the main menu Scroll down to make CHEATS visible to go into Level Select.For in-Game Cheats,Pause gameplay.","data":["810DD50C 8001"],"options":null},"Have\\All TARZAN Letters":{"note":"","data":["800DD515 00FF"],"options":null},"Have\\Coins Collected 100%":{"note":"","data":["800DD547 0064"],"options":null},"Have\\Full Portrait":{"note":"","data":["800DD514 00FF"],"options":null},"Have\\Level \u0026 Tokens Completed 100%":{"note":"","data":["800DD51F 0000","800DD520 0001","800DD521 0000"],"options":null},"Infinite\\Bonus Timer":{"note":"This is For All Timers on Bonus Levels","data":["801736DE 0025"],"options":null},"Infinite\\Green Weapon":{"note":"","data":["811921F6 0063"],"options":null},"Infinite\\Health":{"note":"","data":["81192320 0120"],"options":null},"Infinite\\Lives":{"note":"","data":["800DD542 00??"],"options":{"3 Lives":"03","99 Lives":"63"}},"Infinite\\Purple Weapon":{"note":"","data":["811921FA 0063"],"options":null},"Infinite\\Red Weapon":{"note":"","data":["811921F8 0063"],"options":null},"Press GS For\\Sabor Attacks\\Sabor 1 Hit Kill":{"note":"","data":["8924A23E 0001"],"options":null}},"4C52BBB2-CEAB0F6B-C:45":{"Always Play Level Modifier":{"note":"","data":["800B254C 00??"],"options":{"Mission 1-Plastic Pandemonium":"00","Mission 10-The Melting Pot":"09","Mission 11-River Rapids Riot":"0A","Mission 12-Nighttime Teddy":"0B","Mission 13-Demolition Time":"0C","Mission 14-Pick Up The Pieces":"0D","Mission 15-Have An Ice Day":"0E","Mission 16-Plastro's Revenge":"0F","Mission 17-Bug Hunt: Chew Chew Bug-B-Q":"10","Mission 18-Bug Hunt: Crispy Critters":"11","Mission 19-Flag-Nab-It: Fort Frenzy":"12","Mission 2-Going Car-razy":"01","Mission 20-Flag-Nab-it: Freezer Burn":"13","Mission 21-Food Fight: Picnic Panic":"14","Mission 22-Food Fight: Cherry Surprise":"15","Mission 23-Rescue: Don't Feed The Crabs":"16","Mission 24-Rescue: Tide Pool Terror":"17","Mission 3-The Train That Could":"02","Mission 4-Tan Terror-Tory":"03","Mission 5-Bug Bath":"04","Mission 6-Uninvited Guests":"05","Mission 7-Ants In The Pants":"06","Mission 8-Saucer Attack":"07","Mission 9-The Heat is On":"08"}},"Co-Pilot Modifier":{"note":"","data":["800B245C 00??"],"options":{"Lt. Dave Parker \"Rawhide\"":"02","Lt. Felicity Wannamaker \"Bombshell\"":"03","Lt. James Marshall \"Woodstock\"":"00","Lt. John Lawless \"Hardcore\"":"01","Sergeant Hawk \"Sarge\" (Hidden Character)":"04"}},"Helicopter Modifier":{"note":"","data":["800B2534 00??"],"options":{"Apache (Hidden)":"04","Chinook (Hidden)":"02","Huey":"01","Super Stallion (Hidden)":"03"}},"Start On Play Level Modifier":{"note":"","data":["D00B254C 0000","800B254C 00??"],"options":{"Mission 1-Plastic Pandemonium":"00","Mission 10-The Melting Pot":"09","Mission 11-River Rapids Riot":"0A","Mission 12-Nighttime Teddy":"0B","Mission 13-Demolition Time":"0C","Mission 14-Pick Up The Pieces":"0D","Mission 15-Have An Ice Day":"0E","Mission 16-Plastro's Revenge":"0F","Mission 17-Bug Hunt: Chew Chew Bug-B-Q":"10","Mission 18-Bug Hunt: Crispy Critters":"11","Mission 19-Flag-Nab-It: Fort Frenzy":"12","Mission 2-Going Car-razy":"01","Mission 20-Flag-Nab-it: Freezer Burn":"13","Mission 21-Food Fight: Picnic Panic":"14","Mission 22-Food Fight: Cherry Surprise":"15","Mission 23-Rescue: Don't Feed The Crabs":"16","Mission 24-Rescue: Tide Pool Terror":"17","Mission 3-The Train That Could":"02","Mission 4-Tan Terror-Tory":"03","Mission 5-Bug Bath":"04","Mission 6-Uninvited Guests":"05","Mission 7-Ants In The Pants":"06","Mission 8-Saucer Attack":"07","Mission 9-The Heat is On":"08"}},"Unlock All Planes":{"note":"","data":["810B252A 0105"],"options":null}},"4D3ADFDA-7598FCAE-C:50":{"Infinite Energy\\Player 1":{"note":"","data":["80254A76 001E","8025CCF6 001E"],"options":null},"Infinite Energy\\Player 2":{"note":"","data":["80257B86 001E","80260846 001E"],"options":null},"Infinite Energy\\Player 3":{"note":"","data":["8025ACA6 001E","802637A6 001E"],"options":null},"Infinite Energy\\Player 4":{"note":"","data":["8025E0E6 001E","80266B76 001E"],"options":null}},"4D3E622E-9B828B4E-C:4A":{"Always 1st Place":{"note":"","data":["802C4BC2 0001"],"options":null},"Have Boost From Start":{"note":"","data":["D02C4DAC 003F","802C4925 0050"],"options":null},"Infinite Lives":{"note":"","data":["800E5AA9 0005"],"options":null},"Player 1\\Infinite Shield":{"note":"","data":["812C4B48 4336","812C4B4C 4336"],"options":null},"Time Always 00.00.00 1st Place":{"note":"","data":["802C4BC0 0000","802C4BC2 0001"],"options":null},"Unlock Everything":{"note":"","data":["800CD428 0001"],"options":null}},"4D486681-AB7D9245-C:50":{"Access All Levels":{"note":"Must be used with Access Wampa Stompa","data":["810DE2EA 0004"],"options":null},"Access In-Game Cheat Menu":{"note":"Pause gameplay and pink text will appear in top screen. scroll with multiple buttons and select with 'A'","data":["D10DDE2E 0001","810D3F32 0001","D10DDE14 0002","810D3F32 0001","D10E28D4 0011","810D3F32 0001","D10E28D4 0011","810D3F32 0001"],"options":null},"Access Wampa Stompa":{"note":"Important To Get All Codes To Work! Select empty file \"Wampa Stompa\" will now be your playername.","data":["8118D4E8 2057","8118D4EA 616D","8118D4EC 7061","8118D4EE 2020","8118D4F0 5374","8118D4F2 6F6D","8118D4F4 7061"],"options":null},"Extra Jump Power":{"note":"","data":["810E2220 3F92"],"options":null},"Freeze Timer":{"note":"","data":["810E2230 4018"],"options":null},"Max Challenge Points":{"note":"","data":["8118F370 000F"],"options":null}},"4D79D316-E8501B33-C:45":{"Bonus Menu Games\\Infinite Time\\Escape Race 100 \u0026 200\\Player 1":{"note":"","data":["811BD3B6 000A"],"options":null},"Bonus Menu Games\\Infinite Time\\Escape Race 100 \u0026 200\\Player 2":{"note":"","data":["811BD3BA 000A"],"options":null},"Bonus Menu Games\\Max\\Points\\Disc Hunter\\Player 1":{"note":"","data":["801BD3E9 00FF"],"options":null},"Bonus Menu Games\\Max\\Points\\Disc Hunter\\Player 2":{"note":"","data":["801BD3EB 00FF"],"options":null},"Bonus Menu Games\\Max\\Wins\\Sunset \u0026 Sunrise Showdown\\Player 1":{"note":"","data":["801BC25F 00FF"],"options":null},"Choose Stage\\VS. Mode":{"note":"","data":["800ED6CF 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06","Stage 8 (Hidden Stage)":"07","Stage 9 (Hidden Stage)":"08","Stage A (Hidden Stage)":"09"}},"Infinite\\Health\\Player 1":{"note":"","data":["8112CD46 270F"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["8114D2C6 270F"],"options":null},"Infinite\\Stun Meter\\Player 1":{"note":"","data":["8012CD49 00FF"],"options":null},"Infinite\\Stun Meter\\Player 2":{"note":"","data":["8014D2C9 00FF"],"options":null},"Infinite\\Time":{"note":"","data":["80102A94 000A"],"options":null},"Play As\\Player 1":{"note":"","data":["801BE2A4 00??"],"options":{"Airazor":"03","Cheetor":"02","Megatron":"04","Optimus Primal":"00","Rattrap":"01","Tarantulas":"05","Terrorsaur":"07","Waspinator":"06"}},"Play As\\Player 2":{"note":"","data":["801BE2A5 00??"],"options":{"Airazor":"03","Cheetor":"02","Megatron":"04","Optimus Primal":"00","Rattrap":"01","Tarantulas":"05","Terrorsaur":"07","Waspinator":"06"}}},"4DD7ED54-74F9287D-C:45":{"All Levels\\Dash Becomes Shorter \u0026 Wider":{"note":"","data":["800BA025 FFFF"],"options":null},"All Levels\\Infinite\\Lives":{"note":"","data":["800E05CB 0064"],"options":null},"All Levels\\Infinite\\Missiles":{"note":"","data":["800E1265 00FF"],"options":null},"All Levels\\Large Mutant Enemies":{"note":"","data":["800BB62B FFFF"],"options":null},"All Levels\\No Clipping\\Off":{"note":"","data":["81111E67 0001"],"options":null},"All Levels\\No Clipping\\On":{"note":"","data":["81111E67 0000"],"options":null},"All Levels\\See Through\\Everything Except Specific Things":{"note":"","data":["800BC665 FFFF"],"options":null},"All Levels\\See Through\\Some Walls":{"note":"","data":["800BC625 FFFF"],"options":null},"All Levels\\Time Always 0:00:02":{"note":"","data":["810E04E8 4000"],"options":null},"All Levels\\Visibililty\\Maximum":{"note":"","data":["800BA62B FFFF"],"options":null},"All Levels\\Visibililty\\Minimum":{"note":"","data":["800BA66B FFFF"],"options":null},"All Stages\\Infinite Health":{"note":"","data":["81072D0C 2400"],"options":null},"All Stages\\Infinite\\Disruptor Ammo":{"note":"","data":["81073F04 2400"],"options":null},"All Stages\\Infinite\\Flame Ammo":{"note":"","data":["81073720 2400"],"options":null},"All Stages\\Infinite\\Jet Pack":{"note":"","data":["81076AAC 2400","81076C58 2400","81076B48 2400"],"options":null},"All Stages\\Infinite\\Pulse Ammo":{"note":"","data":["81074204 2400"],"options":null},"All Stages\\Infinite\\Seeker Ammo":{"note":"","data":["81073A94 2400"],"options":null},"All Stages\\Infinite\\Stunner Ammo":{"note":"","data":["81073BD4 2400"],"options":null},"All Stages\\Invincible":{"note":"","data":["8107A770 2400"],"options":null},"All Stages\\Lasers Never Overheat":{"note":"","data":["81073948 2400"],"options":null},"All Stages\\Upper Lasers":{"note":"Don't Use With Never Overheat Code","data":["81073944 3C06","81073946 4EFF"],"options":null},"Press F9 For Pink Cheat Debug Screen":{"note":"","data":["890D098B 0001"],"options":null}},"4E4A7643-A37439D7-C:45":{"Aiming Sites Always Available":{"note":"","data":["812F0922 0004"],"options":null},"Always Your Turn\\Player 1":{"note":"","data":["802EF798 0000"],"options":null},"Always Your Turn\\Player 2":{"note":"","data":["802EF798 0001"],"options":null},"Ball\\Always In Hand":{"note":"","data":["802EF79C 0002"],"options":null},"Foul Score Options\\Player 1":{"note":"","data":["812EF784 ????"],"options":{"Max Fouls":"FFFF","Zero Fouls":"0000"}},"Foul Score Options\\Player 2":{"note":"","data":["812EF786 ????"],"options":{"Max Fouls":"FFFF","Zero Fouls":"0000"}},"Max Ratings\\Player 1":{"note":"","data":["81062C6A FFFF"],"options":null},"Max Ratings\\Player 2":{"note":"","data":["81062CEE FFFF"],"options":null},"Wins Options\\Player 1":{"note":"","data":["812EF780 ????"],"options":{"Max Points":"FFFF","Zero Points":"0000"}},"Wins Options\\Player 2":{"note":"","data":["812EF782 ????"],"options":{"Max Points":"FFFF","Zero Points":"0000"}}},"4E4B0640-1B49BCFB-C:45":{"2 Player Championship Mode":{"note":"This lets player 2 play with you in championship mode so if you have a friend that you want to tag team up with in tag team championship now you can.","data":["810A755E 0002"],"options":null},"Always Special\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF9E 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2F6 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["D015A5D1 0015","8015B64E 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["D015A5D1 0015","8015B9A6 0004"],"options":null},"Auto-Pin\\Player 1":{"note":"Do not use with Cant Pin","data":["8016CE23 0003"],"options":null},"Auto-Pin\\Player 2":{"note":"Do not use with Cant Pin","data":["8016CE17 0003"],"options":null},"Auto-Pin\\Player 3":{"note":"Do not use with Cant Pin","data":["8016CE2F 0003"],"options":null},"Auto-Pin\\Player 4":{"note":"Do not use with Cant Pin","data":["8016CE3B 0003"],"options":null},"CPU To Human Control\\Player 1":{"note":"","data":["8015AF99 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 2":{"note":"","data":["8015B2F1 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 3":{"note":"","data":["8015B649 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 4":{"note":"","data":["8015B9A1 00??"],"options":{"CPU":"18","Human":"17"}},"Can't Pin\\Player 1":{"note":"Do not use with Auto Pin","data":["8016CE23 0004"],"options":null},"Can't Pin\\Player 2":{"note":"Do not use with Auto Pin","data":["8016CE17 0004"],"options":null},"Can't Pin\\Player 3":{"note":"Do not use with Auto Pin","data":["8016CE2F 0004"],"options":null},"Can't Pin\\Player 4":{"note":"Do not use with Auto Pin","data":["8016CE3B 0004"],"options":null},"Cannot Be Grabbed\\Player 1":{"note":"","data":["D115AEC6 0052","8115AEC6 0001","D115AEC6 00A1","8115AEC6 00C1"],"options":null},"Cannot Be Knocked Down\\Player 1":{"note":"","data":["D115AEC6 0031","8115AEC6 0001"],"options":null},"Cannot Be Punched\\Player 1":{"note":"","data":["D115AEC6 002D","8115AEC6 0001","D115AEC6 0035","8115AEC6 00C1"],"options":null},"Clock At 00:00":{"note":"","data":["8115AB1E 0000","810A99F2 0000"],"options":null},"Hacked Moves\\Capture Tazzplex":{"note":"Replaces: Capture Suplex P1 grabs P2's feet like a capture suplex, then lets go \u0026 does a Tazzplex.","data":["D106B454 3689","D106B456 0021","8106B460 00BC","D106B454 3689","D106B456 0021","8106B462 A5E2","D106B514 368A","D106B516 0021","8106B520 00BC","D106B514 368A","D106B516 0021","8106B522 B6BE"],"options":null},"Hacked Moves\\Dominator into HHH Facebuster":{"note":"Replaces: Dominator","data":["D106B454 3810","D106B456 005C","8106B560 011A","D106B454 3810","D106B456 005C","8106B562 A256","D106B514 3811","D106B516 005C","8106B520 011A","D106B514 3811","D106B516 005C","8106B522 ACB0","D106B454 3810","D106B456 0075","8115AF52 0000"],"options":null},"Hacked Moves\\Dragon Screw Stunner":{"note":"Dragon Screw 02 P1 does a Dragon Screw then picks up P2 (still holding his leg) and spins him around and gives him a Stone Cold Stunner","data":["D106B454 3749","D106B456 0094","8106B460 00E9","D106B454 3749","D106B456 0094","8106B462 B9BE","D106B514 374A","D106B516 0094","8106B520 00E9","D106B514 374A","D106B516 0094"],"options":null},"Hacked Moves\\Dragon Screw Suplex":{"note":"Replaces: Double Dragon Screw 02 P1 does a Dragon screw then picks then up (still holding their feet) and does a capture suplex.","data":["D106B454 3749","D106B456 007C","8106B460 00AD","D106B454 3749","D106B456 007C","8106B462 DB2A","D106B514 374A","D106B516 007C","8106B520 00AD","D106B514 374A","D106B516 007C","8106B522 EAE0","D106B454 3749","D106B456 00A5","8115AF52 0000","D106B514 374A","D106B516 00A5","8115B2AA 0000"],"options":null},"Hacked Moves\\Morality Check to Back of head":{"note":"Replaces: Back Clothesline P1 is immediately backed up and does the Morality Check to P2 in the back of the head (misses by a little)","data":["D106B454 3892","D106B456 0000","8106B460 00B3","D106B454 3892","D106B456 0000","8106B462 194C"],"options":null},"Hacked Moves\\Running Rock Bottom":{"note":"Replaces: Farooq Spinebuster P2 runs into P1 and P1 delivers a RockBottom to P2.","data":["D106B454 3A80","D106B456 0000","8106B460 00C1","D106B454 3A80","D106B456 0000","8106B462 F7A2","D106B514 3A81","D106B516 0000","8106B520 00C2","D106B514 3A81","D106B516 0000","8106B522 1210"],"options":null},"Hacked Moves\\Running Tazplex":{"note":"Replaces: Underhook Belly to Belly P2 runs into P1 and P1 does a Tazplex to P2.","data":["D106B454 3A7A","D106B456 0000","8106B460 00BC","D106B454 3A7A","D106B456 0000","8106B462 A51E","D106B514 3A7B","D106B516 0000","8106B520 00BC","D106B514 3A7B","D106B516 0000","8106B522 B5FA"],"options":null},"Have All\\Characters,Costumes \u0026 Moves":{"note":"","data":["50000B02 0000","810BEE40 FFFF"],"options":null},"Infinite\\Money\\Championship Mode":{"note":"For Championship Mode","data":["8109940A FFFF"],"options":null},"Infinite\\Money\\Smackdown Mall Shop":{"note":"For Smackdown Mall Shop","data":["8114FAD6 FFFF"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF5F 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2B7 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["D015A5D1 0015","8015B60F 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["D015A5D1 0015","8015B967 00FF"],"options":null},"Novalty\\Truck In The Crowd":{"note":"","data":["81050110 0747","81050112 0748","81050114 0749","81050116 074A","81050118 074B","81050124 0A4B","81050126 0A43","81050128 0A4B","8105012A 0A43","8105012C 0A43","8105012E 0A43","8105011A 074C","8105011C 074D","81050130 0A43","8105011E 074E","81050132 0A43","81050120 0746","81050134 0A4B","81050122 0743","81050136 0A4B","D1064880 2000","8115AFB0 42EE","D1064880 2000","8115B308 42EE"],"options":null},"Play As\\Player 1\\Option 1":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 1\\Option 2":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 1\\Option 3":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 2\\Option 1":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 2\\Option 2":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 2\\Option 3":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 3\\Option 1":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 3\\Option 2":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 3\\Option 3":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 4\\Option 1":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 4\\Option 2":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 4\\Option 3":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Replace Raw War with\\BACKYARD ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105010E 0F76","8105010C 0F76","810482E8 002F","81050150 2CFD","810528F4 33FF","810528F6 33FF","81050152 2DC7","81050114 04F4","81050116 04F5","8105011E 04F3","81050128 07FF","8105012A 07FF","81050132 07FF","81079F48 400C","81079F5C 3F00","81079F70 3FFF","8107A024 4010","8107A038 3F00","8107A04C 4020","8107A060 3F84","8107A394 4012","8107A3A8 3F00","8107A3BC 4030","8107A3D0 3F84","8105042C 0949","81050436 07FF","81050438 07FF","8105043A 07FF","8105043C 0000","8105043E 07FF","81050440 0949","81050442 0949","81050430 0F76","81050128 07FF","8105012A 07FF","8105012C 0000","8105012E 07FF","81050130 07FF","81050132 07FF","81050134 0000","81050136 08F9","81050196 2CFD","81050194 09EF","81050192 0000","81050190 09EF","8116C49E 0019","8116C4B8 0004","8116C4DC C2E1","8116C4E0 42B4","810500FE 2D2D","81050100 2D2D","81050102 2D2D","81050400 2DC7","81050402 2DC7","81050404 2DC7","81050406 2DC7","81050408 2DC7","8105040A 2DC7","8105040C 2DC7","8105040E 2DC7","50001002 0000","810501B8 0000","50000402 0000","810501E0 0000","50000902 0000","81050262 0000","50001402 0000","81050290 0000","50002C02 0000","810502EC 0000","8107941C 3FE0","81079428 3FFF","810500EC 06FE","810500EE 06FD","810500F8 07FF","810500FA 0997","81050110 06FC","81050112 06FB","8105011A 06FF","8105011C 06FA","81052CF0 2CC9","81052CF4 2D1B","81052CD0 2CD1","81052CD4 0963","81052C84 2CBF","81052C8A 0961","81052CB8 2CC4","81052CBC 2DD7","81052CC8 2CD1","81052CCC 2CFB","81052C78 2CBC","81052C80 2D31","81052CF8 2CC1","81052D00 2DD7"],"options":null},"Replace Raw War with\\BACKYARD WEAK":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0E88","8105042E 2D0D","81050430 2D0D","81050432 2D0D","81050434 2D0D","81050436 07FD","8105043A 2CFB","8105043C 2D0D","8105043E 2D0D","81050440 2D0D","81050442 2D0D","810500E8 2D0D","8105010E 2D0D","8105010C 2D0D","81050150 2D0D","81050196 2CFB","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81050136 2CFB","81050400 2D0D","81050402 2D0D","81050404 2D0D","81050406 2D0D","81050408 2D0D","8105040A 2D0D","8105040C 2D0D","8105040E 2D0D","810528F4 2D0D","810528F6 2D0D","81052CE8 2CC9","81052CEC 2D2D"],"options":null},"Replace Raw War with\\BARBEDWIRE ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 2CFB","8105042E 2CFB","81050430 2CFB","81050432 2CFB","81050434 2CFB","81050436 2CFB","81050438 2CFB","8105043A 2CFB","8105043C 2CFB","8105043E 2CFB","81050440 2CFB","81050442 2CFB","810500E8 2CFB","8105010E 2CFB","8105010C 2CFB","81050150 2CFB","81050196 2CFB","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81050136 2CFB","810528F4 DDDD","810528F6 DDDD","81052CE8 2CCA","81052CEC 2CFB","81050400 2CFB","81050402 2CFB","81050404 2CFB","81050406 2CFB","81050408 2CFB","8105040A 2CFB","8105040C 2CFB","8105040E 2CFB"],"options":null},"Replace Raw War with\\BARBEDWIRE ROPES":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050110 04F3","81050112 04F4","81050114 04F5","81050116 04F3","81050118 04F4","8105011A 04F5","8105011C 04F3","8105011E 04F4","81050120 04F5","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81079D90 3F6C","81079D94 3F48","81079DA4 3D10","81079DB8 3F71","81079E6C 3F6C","81079E80 3D10","81079E90 3F47","81079F48 3F6C","81079F4C BF4C","81079F5C 3D10","81079F70 3F71","8107A024 3F6C","8107A028 3F28","8107A038 3D10","8107A04C 3F71","8107A100 3F6C","8107A114 3D10","8107A124 3F23","8107A1DC 3F6C","8107A1E0 BF2A","8107A1F0 3D10","8107A204 3F71","8107A2B8 3F6C","8107A2BC 3F02","8107A2CC 3D10","8107A2E0 3F71","8107A394 3F6C","8107A3A8 3D10","8107A3B8 3F00","8107A470 3F6C","8107A474 BF02","8107A484 3D10","8107A498 3F71","81050144 0569","81050154 07F7","810528F4 0C01","810528F6 0555","81050140 04F4","81050150 2CFB","8107A628 3F60","8107A63C 3D10","8107A64C 3F52","8107A650 BF80","8107A8BC 3F56","8107A8C4 BA00","8107A8D0 3D10","8107A8DC 3C5A","8107A8E0 3F30","8107A8E4 BF80","8107ADE4 3F56","8107ADEC BA00","8107ADF8 3D10","8107AE04 3C5A","8107AE08 3F0E","8107AE0C BF80","8107AB7C 3F00","D115AF56 2EB2","8115AEC6 0017","D115B2AE 2EB2","8115B21E 0017","D115B606 2EB2","8115B570 0017","D115B95E 2EB2","8115B8CE 0017","81052922 FFFF","81052924 FFFF","81052926 FFFF"],"options":null},"Replace Raw War with\\BARBEDWIRE SQUARE\\Part 1":{"note":"Both Parts must be on for this Press the C Left Button to make your opponent bleed,These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050110 04F3","81050112 04F4","81050114 04F5","81050116 04F3","81050118 04F4","8105011A 04F5","8105011C 04F3","8105011E 04F4","81050120 04F5","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81079D90 3F6C","81079D94 3F48","81079DA4 3D10","81079DB8 3F71","81079E6C 3F6C","81079E80 3D10","81079E90 3F47","81079F48 3F6C","81079F4C BF4C","81079F5C 3D10","81079F70 3F71","8107A024 3F6C","8107A028 3F28","8107A038 3D10","8107A04C 3F71","8107A100 3F6C","8107A114 3D10","8107A124 3F23","8107A1DC 3F6C","8107A1E0 BF2A","8107A1F0 3D10","8107A204 3F71","8107A2B8 3F6C","8107A2BC 3F02","8107A2CC 3D10","8107A2E0 3F71","8107A394 3F6C","8107A3A8 3D10","8107A3B8 3F00","8107A470 3F6C","8107A474 BF02","8107A484 3D10","8107A498 3F71","81050144 0569","81050154 07F7","810528F4 0C01","810528F6 0555","81050140 04F4","81050150 2CFB","8107A628 3F60","8107A63C 3D10","8107A64C 3F52","8107A650 BF80","8107A8BC 3F56","8107A8C4 BA00","8107A8D0 3D10","8107A8DC 3C5A","8107A8E0 3F30","8107A8E4 BF80","8107ADE4 3F56","8107ADEC BA00","8107ADF8 3D10","8107AE04 3C5A","8107AE08 3F0E","8107AE0C BF80","8107AB7C 3F00","D115AF56 2EB2","8115AEC6 0017","D115B2AE 2EB2","8115B21E 0017","D115B606 2EB2","8115B570 0017","D115B95E 2EB2","8115B8CE 0017","81052922 FFFF","81052924 FFFF","81052926 FFFF","8116C330 0000","8116C332 000A","8116C334 0000","8116C336 000A","8116C378 42B4"],"options":null},"Replace Raw War with\\BARBEDWIRE SQUARE\\Part 2":{"note":"Both Parts must be on for this Press the C Left Button to make your opponent bleed,These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8116C382 0000","8116C38C FFFF","81052C9C 0672","81052CA4 2CFB","D1064880 0002","8115B21E 002F","D1064886 0002","8115AEC6 002F","8116C3E4 0000","8116C3E6 000C","8116C3E8 0000","8116C3EA 000C","8116C428 C3D4","8116C440 FFFF","81052CB2 2CC2","81052CB4 0805","81052CB6 2CFB","D1064880 2000","8116C3E6 001F","D1064880 2000","8116C3EA 001F","D1064880 2000","81005592 3F81","D1005592 3F81","8116C3E6 001F","D1064880 2000","81005592 3F81","D1005592 3F81","8116C3EA 001F","D1064886 2000","8116C3E6 001F","D1064886 2000","8116C3E6 001F","D1064886 2000","81005592 3F81","D1005592 3F81","8116C3EA 001F","81052CF8 04F4","81052D00 2CFB","8116C3E4 0000","8116C3E6 0015","8116C3E8 0000","8116C3EA 0015","8116C428 0000","8116C42A 0000","8116C42C 43EB","8116C42E 0000","8116C430 C3A6","8116C432 0000","8116C436 0400","8116C43A 0000","8116C43E 0000","8116C440 FFFF","8116C442 0000","810855A8 3F00","81085684 3F00","81085750 3F00","8108583C 3F00","81050100 2CFB","8105010E 2CFB"],"options":null},"Replace Raw War with\\DUDLEY ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 21A7","8105042E 2D0D","81050432 2D0D","81050436 21A7","8105043E 2D0D","81050440 0000","81050442 0000","810500E8 2D0D","8105010C 2CFD","8105010E 2CFD","81050150 2D29","81050152 2CFB","81050400 09EF","81050402 09EF","81050404 0000","81050406 0000","81050408 0000","8105040A 0000","8105040C 09EF","8105040E 09EF","81050188 04F6","8105018A 04F7","8105018C 04F8","8105018E 04F9","81050190 09EF","81050192 0000","81050194 09EF","81050196 2D0D","810528F4 6666","810528F6 6666","81052CE8 2CC2","81052CEC 2D0D","81052D1C 2CD3","81052D1E 2CD4","81052D20 2CD5","81052D22 2CD6","81052D24 2CFD","81052D26 2CFD","81052D28 2CFB","81052D2A 2CFB","81050124 2CFD","81050126 2CFD","81050128 2CFD","8105012A 2CFD","8105012C 2CFD","8105012E 2CFD","81050130 2CFD","81050132 2CFD","81050134 2CFD","81050136 2CFD","81050154 2CFB","811533F8 002E"],"options":null},"Replace Raw War with\\FLAME ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105010E 0EFE","8105010C 0EFE","810528F4 2508","810528F6 2508","81050430 2401","81050430 2401","81050404 2401","81050406 2401","81050408 2401","81050409 2401","8105040A 2401","8105040C 2401","810500E8 2401"],"options":null},"Replace Raw War with\\FLAMING TURNBUCKLES":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8116C334 FFFF","8116C336 001F","8116C374 C350","8116C376 FFF3","8116C378 4377","8116C37A 2689","8116C37C C380","8116C37E 0406","8116C382 0D14","8116C386 0FCC","8116C38A 07DC","8116C38C FFFF","8116C38E FDE3","8116C3E8 FFFF","8116C3EA 001F","8116C428 C360","8116C42C 4370","8116C430 4376","8116C436 0D14","8116C43A 0FCC","8116C43E 07DC","8116C442 F9C4","8116C49C FFFF","8116C49E 001F","8116C4DC 4360","8116C4E0 4370","8116C4E4 4380","8116C4EA 0CD0","8116C4EE 0136","8116C4F2 04EE","8116C4F6 F601","8116C550 FFFF","8116C552 001F","8116C590 434F","8116C594 4370","8116C598 C36C","8116C59E 0E70","8116C5A2 0F58","8116C5A6 0814","8116C5AA F1E6"],"options":null},"Replace Raw War with\\GREENWICH STREET ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050430 2DC5","81050436 0000","81050438 0000","8105043A 0000","8105043E 0000","810504E8 0EFE","8105010E 2DC5","8105010C 2DC5","81050196 2CFD","81050136 0FB6","81050134 0FC6","81050132 0FB6","81050130 0FC6","8105012E 0FB6","8105012C 0FC6","8105012A 0FB6","81050128 0FC6","81050126 0FB6","81050124 0FC6","81050440 0000","81050442 0000","50002C02 0000","81050378 0000","50002C02 0000","810502EC 0000","50001402 0000","81050290 0000","50000902 0000","81050262 0000","50000402 0000","810501CE 0000","50001002 0000","810501B8 0000","50000402 0000","810501E0 0000","8105042C 2D0D","81050430 0000","81050150 24F0"],"options":null},"Replace Raw War with\\HHH ARNEA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105040E 24EF","8105040C 24EF","8105040A 24EF","81050408 24EF","81050406 24EF","81050404 24EF","81050402 24EF","81050400 24EF","81050436 24E9","81050440 24E9","81050442 24E9","8105043E 24EF","8105042E 24EF","8105043C 24EF","8105042C 24E9","8105010E 24E9","8105010C 24E9","81050196 24E9","8105042E 24EF","81050432 24EF","810500F8 24EF","810500FA 24EF","810500FC 24EF","810500FC 24EF","81050100 24EF","81050100 24EF","81052CE8 2CCA","81052CEC 24EF","81050150 24E9","81050152 24E9","81050154 24E9","810528F4 24E9","810528F6 24E9"],"options":null},"Replace Raw War with\\HOSPITAL ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0949","8105042E 283F","81050428 0949","81050430 0949","81050430 0949","81050436 096B","81050438 0993","8105043A 096B","8105043E 283F","81050440 283F","81050442 283F","810504E8 0949","81050150 283F","81050196 283F","81050400 283F","81050402 283F","81050404 283F","81050406 283F","81050408 283F","8105040A 283F","8105040C 283F","8105040E 283F","810500F8 283F","810500FA 283F","810500FC 283F","810500FE 283F","81050100 283F","81050100 283F","81052CE8 2CCA","81052CEC 283F","8105010E 283F","8105010C 283F","81050124 0949","81050126 0949","81050128 0949","8105012A 0949","8105012C 0949","8105012E 0949","81050130 0949","81050132 0949","81050134 0949","81050136 0949","810500E8 0949","810528F4 0000","81052CE0 2CC9"],"options":null},"Replace Raw War with\\KANE ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0A61","8105042E 0A61","81050428 2B6C","81050430 2B6C","81050430 2B6C","81050436 2B57","81050438 2B57","8105043A 2B57","8105043E 0A61","81050440 2B57","81050442 2B57","810500E8 1B1E","8105010E 2D37","8105010C 209F","81050194 0955","81050196 2B57","81050400 2699","81050402 2699","81050404 2699","81050406 2699","81050408 2699","8105040A 2699","8105040C 2699","8105040E 2699"],"options":null},"Replace Raw War with\\REMOVE RING":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050150 0000","81050152 0000","81050154 0000","810500E8 0000","810855A8 3F00","81085684 3F00","81085750 3F00","8108583C 3F00","81079C08 3F00","81079C14 3F00","81079B10 3F00"],"options":null},"Replace Raw War with\\SHIMMER ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 1932","8105042E 1932","81050430 1932","81050434 1932","81050432 1932","81050436 1932","81050438 1932","8105043A 1932","8105043E 1932","81050440 1932","81050442 1932","81050150 1932","81050152 1932","81050154 1932","81050190 1932","81050192 1932","81050194 1932","81050196 1932","81050124 1932","81050126 1932","81050128 1932","8105012A 1932","8105012C 1932","8105012E 1932","81050130 1932","81050132 1932","81050134 1932","81050136 1932","810500E8 1932","8105010E 1932","8105010C 1932"],"options":null},"Replace Raw War with\\SPACE SHIP ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 094D","8105042E 0953","81050430 0953","81050432 0F0E","81050434 0953","81050436 0F0E","81050438 0899","8105043C 0953","8105043E 0899","81050440 0963","81050442 0963","81050400 0953","81050402 0953","81050404 0953","81050406 0953","81050408 0953","8105040A 0953","8105040C 0953","8105040E 0953","810500E8 0A75","810528F4 7223","810528F6 0119","81050150 0963","81050152 0963","81050190 0953","81050192 0953","81050194 0953","81050196 0963","8105010E 0F0E","8105010C 0F0E","81050124 0F10","81050126 0F10","81050128 0F10","8105012A 0F10","8105012C 0F10","8105012E 0F10","81050130 0F10","81050132 0F10","81050134 0F10","81050136 0F10","810500F8 0963","810500FA 0963","810500FC 0963","810500FE 0963","81050100 0963","81050102 0963","81052CE8 2CCA","81052CEC 0963"],"options":null},"Replace Raw War with\\TOKYO DOME":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["810528F4 7223","810528F6 0119","81050124 0100","81050126 0100","81050128 0100","8105012A 0100","8105012C 0100","8105012E 0100","81050130 0100","81050132 0100","81050134 0100","81050136 0100","8105010E 0999","81050400 03A5","81050402 0385","81050404 0385","81050406 0385","81050408 0385","8105040A 03A5","8105040C 03A5","8105040E 043F","81050430 043F","8105042C 03A5","81050430 21A5","81050432 0100","81050434 0000","81050436 2CFB","81050438 0899","8105043C 03AF","81050440 03AF","81050442 03A5","810500E8 24C3","81050444 0100","81050190 09EF","81050192 0000","81050194 09EF","81050196 2CFD"],"options":null},"Tables\\IN RING TABLE\\Part 1":{"note":"To Make the Table look broken Keep the Z Button press down, To make player stand on the Table, Stand next to it \u0026 Keep C-Right Pressed Down.Put all Parts on Together for this Cheat to work","data":["81052CF0 06E1","81052CF4 09F1","81052CF8 06E2","81052D00 09F1","81052D0C 06E3","81052D0E 06E4","81052D10 09EF","81052D12 09EF","81052D14 06E5","81052D16 06E6","81052D18 09EF","81052D1A 09EF","D1064880 0001","8115AFB0 432C","D1064880 0001","8115B308 432C","D1064880 2000","8115AFB0 42B4","D1064880 2000","8115B308 42B4","8116C330 0000","8116C332 0014","8116C334 0000","8116C336 0014","8116C374 4210","8116C376 C0B1","8116C378 432F","8116C37A 51DC","8116C37C 4210","8116C37E 92F1","8116C382 0800","8116C386 05A0","8116C38A 0800","8116C38C FFFF","8116C38E F3BC","8116C3E4 0000","8116C3E6 0015","8116C3E8 0000","8116C3EA 0015","8116C428 4210","8116C42A C0B1","8116C42C 432F","8116C42E 51DC","8116C430 4210","8116C432 92F1","8116C436 0800","8116C43A 05A0","8116C43E 0800","8116C440 FFFF","8116C442 F3BC","D1064880 2000","8116C378 42E0"],"options":null},"Tables\\IN RING TABLE\\Part 2":{"note":"To Make the Table look broken Keep the Z Button press down, To make player stand on the Table, Stand next to it \u0026 Keep C-Right Pressed Down.Put all Parts on Together for this Cheat to work","data":["D1064880 2000","8116C382 07E0","D1064880 2000","8116C38A 0680","D1064880 2000","8116C42C 42E0","D1064880 2000","8116C436 0820","D1064880 2000","8116C43E 0980","8116C498 0000","8116C49A 0017","8116C49C 0000","8116C49E 0017","8116C4DC 4210","8116C4DE C0B1","8116C4E0 432A","8116C4E2 51DC","8116C4E4 4210","8116C4E6 92F1","8116C4EA 0800","8116C4EE 05A0","8116C4F2 0800","8116C4F4 FFFF","8116C4F6 F3BC","8116C54C 0000","8116C54E 0018","8116C550 0000","8116C552 0018","8116C590 4210","8116C592 C0B1","8116C594 432A","8116C596 51DC","8116C598 4210","8116C59A 92F1","8116C59E 0800","8116C5A2 05A0","8116C5A6 0800","8116C5A8 FFFF","8116C5AA F3BC","D1064880 2000","8116C4E0 42E0","D1064880 2000","8116C4EA 07E0","D1064880 2000","8116C4F2 0680","D1064880 2000","8116C594 42E0","D1064880 2000","8116C59E 0820","D1064880 2000","8116C5A6 0980"],"options":null},"Tables\\MOVABLE TABLES\\Part 1":{"note":"You must use both parts for this cheat to work","data":["81052C24 06E1","81052C26 06E3","81052C2C 09F1","81052C2E 09EF","81052C30 06E2","81052C32 06E5","81052C38 09F1","81052C3A 09EF","81052C48 06E4","81052C4A 06E6","81052C50 09EF","81052C52 09EF","8116C3E4 0000","8116C3E6 0001","8116C3E8 0000","8116C3EA 0001","8116C498 0000","8116C49A 0003","8116C49C 0000","8116C49E 0003","8116C330 0000","8116C332 0000","8116C334 0000","8116C336 0000","D116C556 0000","8116C33A 0000","D116C33A 0000","8116C3EE 0000","D116C3EE 0000","8116C4A2 0000","D116C556 0001","8116C33A 0001","D116C33A 0001","8116C3EE 0001","D116C3EE 0001","8116C4A2 0001","D116C556 0002","8116C33A 0002","D116C33A 0002","8116C3EE 0002","D116C3EE 0002","8116C4A2 0002","D116C556 0003","8116C33A 0003","D116C33A 0003","8116C3EE 0003","D116C3EE 0003","8116C4A2 0003","D116C556 FFFF","8116C33A FFFF","D116C33A FFFF","8116C3EE FFFF","D116C3EE FFFF","8116C4A2 FFFF","D216C556 FFFF","81079B10 3F80","D1064886 2000","81079B10 3F81","D106488C 2000","81079B10 3F81","D1064892 2000","81079B10 3F81"],"options":null},"Tables\\MOVABLE TABLES\\Part 2":{"note":"You must use both parts for this cheat to work","data":["D116C33A FFFF","8116C382 0000","D116C382 0000","8116C386 0000","D116C386 0000","8116C38A 0000","D116C38A 0000","8116C38E 0000","D116C38E 0000","8116C436 0000","D116C436 0000","8116C43A 0000","D116C43A 0000","8116C43E 0000","D116C43E 0000","8116C442 0000","D116C442 0000","8116C4EA 0000","D116C4EA 0000","8116C4EE 0000","D116C4EE 0000","8116C4F2 0000","D116C4F2 0000","8116C4F6 0000","D116C594 42B4","D116C556 FFFF","8116C378 4335","D116C378 4335","8116C42C 4335","D116C42C 4335","8116C4E0 4335","D116C594 3DC7","D116C556 FFFF","8116C378 42B0","D116C378 42B0","8116C42C 42B0","D116C42C 42B0","8116C4E0 42B0","D1064880 2000","81079B10 3F81","D1079B10 3F81","D116C594 42B4","D116C556 FFFF","8116C378 42F0","D116C378 42F0","8116C42C 42F0","D116C42C 42F0","8116C4E0 42F0","D1079B10 3F81","8116C38A 0F00","D116C38A 0F00","8116C43E 0100","D116C594 3C93","8116C378 42B0","81052D18 0000","81052D1A 0000","D116C54C 0000","8116C54E 0018","D116C550 0000","8116C552 0018"],"options":null},"Tables\\Sabu Table":{"note":"Breakable/Fixable/Rebreakable/Refixable press Z to break, C-right + Cdown to fix","data":["8116C49A 000C","8116C49E 000C","8116C4DC 43CC","8116C4E0 42E6","8116C4E4 C2C5","8116C4EE 0800","8116C602 000C","8116C606 000C","8116C648 42E6","8116C644 43CC","8116C64C C314","81052C54 06E3","81052C5C 09EF","8116C6F8 43CC","8116C6FC 42F0","8116C700 C2F1","8116C70A 0400","8116C428 43CC","8116C430 C2D0","8116C42C 42F0","8116C43A 0C00","8116C6B6 0004","8116C6BA 0004","8116C3E6 0004","8116C3EA 0004","D1064880 2000","81005592 3F81","D1005592 3F81","8116C4EA 0F00","D1005592 3F81","8116C652 0100","D1005592 3F81","8116C4E0 4240","D1005592 3F81","8116C648 4240","D1064880 0005","81005CD4 3F83","D1005CD4 3F83","8116C4EA 0000","D1005CD4 3F83","8116C652 0000","D1005CD4 3F83","8116C4E0 42E6","D1005CD4 3F83","8116C648 42E6","D1005CD4 3F83","D1064880 2000","81005CD4 0000"],"options":null},"Ultimate Code\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF5E 0064"],"options":null},"Ultimate Code\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2B6 0064"],"options":null},"Ultimate Code\\Player 3":{"note":"","data":["D015A5D1 0015","8015B60E 0064"],"options":null},"Ultimate Code\\Player 4":{"note":"","data":["D015A5D1 0015","8015B964 0064"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B490 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B490 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B4A4 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B47C 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8106B4A4 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B47C 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B468 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B468 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B510 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B510 3DFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B564 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B53C 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B564 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B53C 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B528 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B528 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B610 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B610 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B624 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5FC 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B624 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5FC 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5E8 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5E8 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6D0 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6D0 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6E4 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6BC 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8006B6E4 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6BC 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6A8 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6A8 3FFF"],"options":null},"Z LADDER":{"note":"Press Z for the ladder to appear, sometimes there is an invisable ladder","data":["D1064880 2000","8116C768 0000","D1064880 2000","8116C76A 0019","D1064880 2000","8116C76C 0000","D1064880 2000","8116C76E 0019","D1064880 2000","8116C788 8104"],"options":null}},"4E69B487-FE18E290-C:45":{"Team 1 Scores 150 pts":{"note":"","data":["800A6689 0096"],"options":null},"Team 2 Scores 150 pts":{"note":"","data":["800A668B 0096"],"options":null}},"4EAA3D0E-74757C24-C:4A":{"Don't Hurt Mario\\Monsters":{"note":"","data":["A0339E27 0001"],"options":null},"Funny Mario Options\\Mario's Cap\\Off \u0026 in His Hand":{"note":"Here you can Choose Options with Mario with His Cap off \u0026 in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["80339E07 00??"],"options":{"Cap In Hand":"20","Flying Mario Cap In Hand":"28","Invisible Mario Cap In Hand":"22","Invisible Metal Mario Cap In Hand":"26","Metal Mario Cap In Hand":"24"}},"Funny Mario Options\\Mario's Cap\\On \u0026 An Extra in His Hand":{"note":"Here you can Choose Options with Mario with His Cap on \u0026 An Extra in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["80339E07 00??"],"options":{"Cap In Hand":"30","Flying Mario Cap In Hand":"38","Invisible Mario Cap In Hand":"32","Invisible Metal Mario Cap In Hand":"36","Metal Mario Cap In Hand":"34"}},"Have All\\175 Stars":{"note":"I have managed to put a have 175 Stars Option in for you,once the Code is activated, you will see it as a new option in Save Slot A.","data":["80207B0B 00FF","50000D02 0000","81207B0C FFFF"],"options":null},"Have All\\Maxed Out Coin Records For All Levels":{"note":"","data":["80207B25 00FF","81207B26 FFFF","81207B28 FFFF","81207B2A FFFF","81207B2C FFFF","81207B2E FFFF","81207B30 FFFF","81207B32 FFFF"],"options":null},"Have\\Debug Mode":{"note":"","data":["8032C658 00??"],"options":{"Off":"00","On":"01"}},"Have\\Level Select":{"note":"","data":["8032C64C 0001"],"options":null},"Infinite\\Energy \u0026 Breath":{"note":"","data":["80339EAE 0008"],"options":null},"Infinite\\Lives":{"note":"","data":["80339EAD 0064"],"options":null},"Mario's Cap\\Off Options":{"note":"Here you can Choose Options with Mario without His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["80339E07 00??"],"options":{"Flying Mario":"08","Invisible Flying Mario":"0A","Invisible Mario":"02","Invisible Metal Flying Mario":"0F","Mario No Cap":"01","Metal Flying Mario":"0D","Metal Mario":"04"}},"Mario's Cap\\On Options":{"note":"Here you can Choose Options with Mario with His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["80339E07 00??"],"options":{"Flying Mario":"19","Invisible Mario":"12","Invisible Metal Mario":"16","Metal Mario":"15"}},"Press GS for 255 Coins":{"note":"","data":["89339EA8 00FF"],"options":null},"Press L To Levitate":{"note":"Press L to levitate \u0026 Let go to land","data":["D0339C31 0020","81339E4C 4220","D0339E4D 0020","81339E0C 0300","D0339E4D 0020","81339E0E 0880"],"options":null}},"4F1E88F7-4A5A3F96-C:4A":{"Max HP":{"note":"","data":["812D71F8 03E7"],"options":null},"Max MP":{"note":"","data":["812D71FA 03E7"],"options":null},"Max Money":{"note":"","data":["811A70E9 0001","811A70EA 869F"],"options":null}},"4F48B0FD-8E7173F4-C:45":{"All Levels\\Infinite\\Energy":{"note":"","data":["800D5A9B 00FF"],"options":null},"All Levels\\Infinite\\Max Credits":{"note":"","data":["80075DDC 00FF"],"options":null},"All Levels\\Infinite\\Time":{"note":"","data":["800D5A97 0063"],"options":null},"All Levels\\Unlock All\\Levels - Options Menu":{"note":"","data":["80075DD6 FFFF","80075DD7 FFFF"],"options":null},"All Levels\\Unlock All\\Option Menu Items":{"note":"","data":["80075DD8 FFFF","80075DD9 FFFF"],"options":null},"Level\\0-0\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time and only use for that specific level Cheat","data":["8010BB0C 0000"],"options":null},"Level\\0-0\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8010BB2B 0001"],"options":null},"Level\\1-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801657DC 0000"],"options":null},"Level\\1-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801657FB 0001"],"options":null},"Level\\1-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCF9C 0000"],"options":null},"Level\\1-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCFBB 0001"],"options":null},"Level\\1-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801126EC 0000"],"options":null},"Level\\1-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8011270B 0001"],"options":null},"Level\\2-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BD29C 0000"],"options":null},"Level\\2-1\\Invincible":{"note":"","data":["801BD2BB 0001"],"options":null},"Level\\2-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B911C 0000"],"options":null},"Level\\2-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B913B 0001"],"options":null},"Level\\2-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7CEC 0000"],"options":null},"Level\\2-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7D0B 0001"],"options":null},"Level\\3-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801588EC 0000"],"options":null},"Level\\3-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8015890B 0001"],"options":null},"Level\\3-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B936C 0000"],"options":null},"Level\\3-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B938B 0001"],"options":null},"Level\\3-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801013CC 0000"],"options":null},"Level\\3-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["81100E08 C350"],"options":null}},"4F8AFC3A-F7912DF2-C:50":{"Have All Races":{"note":"","data":["81088756 FFFF"],"options":null},"Have All Tracks":{"note":"","data":["8108875A FFFF"],"options":null},"Infinite Credits":{"note":"","data":["8008D659 0005"],"options":null},"Unlock All Characters \u0026 Extra Cheats":{"note":"","data":["81088750 FFFF","81088752 FFFF"],"options":null}},"4FF5976F-ACF559D8-C:50":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2712 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE02F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802026F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE255 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FCB85 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFF6D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802027A5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DA0BD 0001"],"options":null}},"5001CF4F-F30CB3BD-C:45":{"Have All\\Characters Available":{"note":"","data":["810653C8 FFFF"],"options":null},"Have All\\Courts Available":{"note":"","data":["810653CC FFFF"],"options":null},"Press C-Down Easy Win Ring Shot - Time,Balls,Points":{"note":"Do Not use with Game Option","data":["D0066985 0004","80153527 0082","D0066985 0004","80153523 0082"],"options":null},"Press C-Down For Easy Win Ring Shot - Game":{"note":"Do Not use with Time,Balls,Points Option","data":["D0066985 0004","8015350B 0082"],"options":null},"Score\\Player 1":{"note":"","data":["8015344A 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}},"Score\\Player 2":{"note":"","data":["8015344B 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}},"Widescreen":{"note":"","data":["81033CA6 3FE4"],"options":null}},"503EA760-E1300E96-C:50":{"Access Options\\All Car Upgrades":{"note":"","data":["50000704 0000","801505DF 0003"],"options":null},"Access Options\\All Tracks":{"note":"","data":["80150602 001F","80150603 00FF"],"options":null},"Always Place 1st":{"note":"","data":["801502CB 0001"],"options":null},"Unlimited Time":{"note":"","data":["801509ED 0045"],"options":null}},"5129B6DA-9DEF3C8C-C:45":{"Dig-Dug\\Infinite\\Credits":{"note":"","data":["800FE67E 0063"],"options":null},"Dig-Dug\\Infinite\\Lives\\Player 1":{"note":"","data":["800FE709 0002"],"options":null},"Dig-Dug\\Infinite\\Lives\\Player 2":{"note":"","data":["800FE76B 0004"],"options":null},"Dig-Dug\\Score\\Player 1":{"note":"","data":["810FE704 9999"],"options":null},"Dig-Dug\\Score\\Player 2":{"note":"","data":["810FE768 9999"],"options":null},"Galaga\\Infinite\\Credits":{"note":"","data":["800D76A4 0063"],"options":null},"Galaga\\Infinite\\Lives\\Both Players":{"note":"","data":["800D7510 0002"],"options":null},"Galaxian\\Infinite\\Credits":{"note":"","data":["800CD3D0 0063"],"options":null},"Galaxian\\Infinite\\Lives":{"note":"","data":["800CD3AD 0003"],"options":null},"Galaxian\\Score\\Player 1":{"note":"","data":["810BCE7C 9999"],"options":null},"Galaxian\\Score\\Player 2":{"note":"","data":["810BC780 9999"],"options":null},"Ms Pac-Man\\Eat All Ghosts All The Time":{"note":"","data":["810BC100 0000","810BC102 0000","810BC12C 0000","810BC12E 0000","810BC158 0000","810BC15A 0000","810BC184 0000","810BC186 0000"],"options":null},"Ms Pac-Man\\High Score Modifier":{"note":"","data":["810BC1F8 9999"],"options":null},"Ms Pac-Man\\Infinite\\Credits":{"note":"","data":["800BBE4B 0063"],"options":null},"Ms Pac-Man\\Infinite\\Lives\\Player 2":{"note":"","data":["800BBE27 0004"],"options":null},"Ms Pac-Man\\Infinite\\Lives\\Player P1":{"note":"","data":["800BBE23 0004"],"options":null},"Ms Pac-Man\\Score Modifier\\Player 1":{"note":"","data":["810BC7E8 9999"],"options":null},"Ms Pac-Man\\Score\\Player 2":{"note":"","data":["810BC7EC 9999"],"options":null},"Pac-Man\\Eat All Ghosts All The Time":{"note":"","data":["810A8760 0000","810A8762 0000","810A878C 0000","810A878E 0000","810A87B8 0000","810A87BA 0000","810A87E4 0000","810A87E6 0000"],"options":null},"Pac-Man\\High Score":{"note":"","data":["810A86F8 9999"],"options":null},"Pac-Man\\Infinite\\Credits":{"note":"","data":["800A8817 0063"],"options":null},"Pac-Man\\Infinite\\Lives\\Player 1":{"note":"","data":["800BBE23 0004"],"options":null},"Pac-Man\\Infinite\\Lives\\Player 2":{"note":"","data":["800BBE27 0004"],"options":null},"Pac-Man\\Score\\Player 1":{"note":"","data":["810A86F0 9999"],"options":null},"Pac-Man\\Score\\Player 2":{"note":"","data":["810A86F4 9999"],"options":null},"Pole Position\\Infinite Time":{"note":"","data":["8010A243 0063"],"options":null},"Pole Position\\Score":{"note":"","data":["81107BF8 9999"],"options":null}},"514B6900-B4B19881-C:4A":{"Beta Bottles Revenge Mode":{"note":"Bottles Revenge is a Beta mode from Banjo Tooie that the RWP team recently uncovered after an extraordinary amount of effort. Bottles the Spirit transforms into Bottles the Devil and posses enemies nearby and allows a second player hooked up to Pad 2 to play as that Posses character to try to foil Banjos Plans. As player one goes about its business, player two uses every enemy nearby to try to nab Banjo and take away some life. This mode is incredible, and you can control almost every enemy in the game: slot machines, flying creatures, uggers, zubbas...and this is just the beginning. (Congrats Rare Witch Project)","data":["801255C2 0001","80080881 0002"],"options":null},"Infinite\\Air":{"note":"","data":["80125222 42C8"],"options":null},"Infinite\\Energy\\Banjo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","8011591F 000A","80115920 000A"],"options":null},"Infinite\\Energy\\Banjo and Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","81115A04 0A0A"],"options":null},"Infinite\\Energy\\Bee":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","80115913 000A","80115914 000A"],"options":null},"Infinite\\Energy\\Detonator":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","8111592E 0A0A"],"options":null},"Infinite\\Energy\\Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","81115922 0A0A"],"options":null},"Infinite\\Energy\\Mumbo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","81115928 0A0A"],"options":null},"Infinite\\Energy\\Snowball":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","80115907 0005"],"options":null},"Infinite\\Energy\\Stony":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","80115919 000A","8011591A 000A"],"options":null},"Infinite\\Energy\\Submarine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","80115925 000A","80115926 000A"],"options":null},"Infinite\\Energy\\T-Rex Baby":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","8011593F 000A","80115940 000A"],"options":null},"Infinite\\Energy\\Washing Machine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","81115916 0A0A"],"options":null},"Instant Warp\\Options\\Cauldron Keep":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"5D Cauldron Keep":"01","5E The gatehouse":"01","5F Tower of Tragedy Quiz":"01","60 Gun chamber":"01","6A Gun room still":"01","7B Crazy Castle Stockade balloon burst multi":"01","7C Crazy Castle Stockade Jump the hoops multi":"01","7D Grunty Industries packing game":"01","80 Colosseum kickball arena":"01","86 Dodgems":"01"}},"Instant Warp\\Options\\Cloud Cuckoo Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"36 Cloud Cuckoo Land 1":"01","37 Inside the trashcan":"01","38 Inside the cheesewedge":"01","39 Zubba's nest":"01","3A Central cavern":"01","3D Inside the pot o gold":"01","3E Mumbo's skull":"01","3F Mingy jongo's skull":"01","40 Humba wumba's wigwam":"01","61 Cloud Cuckoo Land 2":"01","85 Trash can mini":"01","88 Zubba's nest multi":"01"}},"Instant Warp\\Options\\Glitter Gulch Mine":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"26 Water supply pipe":"01","63 Ordnance Storage entrance":"01","64 Ordnance Storage game":"01","65 Ordnance Storage game Multi":"01","6F Testing":"01","70 Testing":"01","71 Mumbo's skull":"01","C7 Mine":"00","CA Fuel depot":"00","CB Crushing shed":"00","CC Flooded caves":"00","CD Water storage":"00","CE Waterfall cavern":"00","CF Power hut basement":"00","D0 Chuffy's cab":"00","D1 Inside chuffy's boiler boss":"00","D2 Gloomy caverns":"00","D3 Generator caverns":"00","D4 Power hut":"00","D5 Wumba's wigwam":"00","D7 Train station":"00","D8 Prospectors hut":"00","D9 Mumbo's hut":"00","DA Toxic gas cave":"00","DB Canary cave":"00","DC Ordnance storage":"00","E9 Humba":"00"}},"Instant Warp\\Options\\Grunty Industries":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"00 Outside":"01","01 Inside":"01","02 Train station":"01","03 Workers quarters":"01","04 Trash compactor":"01","05 Elevator shaft":"01","06 Floor 2":"01","07 Floor 2 \"electromagnet chamber\"":"01","08 Floor 3":"01","09 Floor 3 \"boiler plant\"":"01","0A Floor 3 \"packing room\"":"01","0B Floor 4":"01","0C Floor 4 \"cable room\"":"01","0D Floor 4 \"quality control\"":"01","0E Floor 5":"01","0F Basement":"01","10 Basement \"repair depot":"01","11 Basement \"waste disposal\"":"01","25 Water supply pipe":"01","62 Floor 4 \"clinkers cavern\"":"01","72 Mumbo's skull":"01","87 Sewer entrance":"01"}},"Instant Warp\\Options\\Hailfire Peaks":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"27 Lava side":"01","28 Icy side":"01","29 Lava train station":"01","2A Ice train station":"01","2B Chilli billi":"01","2C Chilly willy":"01","2D Colosseum kickball stadium lobby":"01","31 Boggy's igloo":"01","32 Icicle grotto":"01","33 Inside the volcano":"01","68 Icy side still":"01"}},"Instant Warp\\Options\\Isle O Hags":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"4F Wooded Hollow":"01","50 Heggy's egg shed":"01","51 Jiggywiggy's temple":"01","52 Plateau":"01","53 Plateau \"Honey B's Hive\"":"01","54 Pine Grove":"01","55 Cliff top":"01","56 Cliff top Mumbo's skull":"01","5A wasteland":"01","5B inside another digger tunnel":"01","5C Quagmire":"01"}},"Instant Warp\\Options\\Jinjo Village":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"42 Jinjo Village":"01","43 Bottles house":"01","44 King Jingalings throne room":"01","45 Green Jinjo's House":"01","46 Black Jinjo's House":"01","47 Yellow Jinjo's House":"01","48 Blue Jinjo's House":"01","4A Brown Jinjo's House":"01","4B Orange Jinjo's House":"01","4C Purple Jinjo's House":"01","4D Red Jinjo's House":"01","4E White Jinjo's House":"01"}},"Instant Warp\\Options\\Jolly Roger's Lagoon":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"81 sea bottom cavern":"01","82 submarine multi":"01","A7 Jolly Roger's Lagoon":"01","A8 Atlantis":"01","A9 Seabottom":"01","ED Jolly's":"00","EE Pawno's emporium":"00","EF mumbo's skull":"00","F4 Ancient Swimming Baths":"00","F6 Electric Eels lair":"00","F7 Seaweed Sanctum":"00","F8 Inside the big fish":"00","FA temple of the fishes":"00","FF Blubber's wave race hire":"00"}},"Instant Warp\\Options\\Mayahem Temple":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"66 Multi":"01","67 Still":"01","77 Targitzan's Slighty Sacred Temple":"01","78 Inside Targitzans Temple":"01","79 Targitzan Temple Lobby":"01","7A Targitzan's Temple Boss":"01","7F Mayan Kickball Arena":"01","B6 Humba's Wigwam":"00","B7 Mumbo's skull":"00","B8 The Temple":"00","B9 Prison Compound":"00","BC Code chamber":"00","C4 Jade Snake Grove":"00","C5 Treasure Chamber":"00","C6 Kickball Arena":"00","C8 Kickball Arena":"00","C9 Kickball Arena":"00"}},"Instant Warp\\Options\\Not sure":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"21 Inside Chuffy's wagon":"01","34 Mumbo's Skull":"01","35 Humba Wumba's wigwam 1":"01","41 Inside the digger tunnel":"01","43 Bottles house":"01","57 Humba Wumba's wigwam 2":"01","69 Bottles house still":"01","8A HAG Inside":"01","9A HAG1 Final Boss":"01","9B Jingalings Zombified Palace":"01","A6 Smuggler cavern":"01","F9 Mr Patch":"00","FC Lord woo fak fak":"00"}},"Instant Warp\\Options\\Spiral Mountain":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"73 Banjo's house":"01","AD Grunty's Old Lair":"00","AE Behind The Waterfall":"00","AF Top Of Castle":"00"}},"Instant Warp\\Options\\Terrydacty Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"12 Terrydacty Land":"01","13 Terry's nest":"01","14 Train station":"01","15 Oogle boogles cave":"01","16 Inside the mountain":"01","17 River passage":"01","18 Styracosaurus family cave":"01","19 Unga bunga's cave":"01","1A Stomping plains":"01","1B Bonfire caverns":"01","1E Humba's Wigwam":"01","23 Inside chompa's belly":"01","83 Chompa's belly multi":"01"}},"Instant Warp\\Options\\Witchy World":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"24 Saucer of Peril":"01","3B Crazy castle stockade \"sop\"":"01","3C Star spinner \"sop\"":"01","76 Mumbo's skull":"01","D6 Witcy World":"00","DD Dodgem dome lobby":"00","DE Dodgem challenge \"1 vs 1\"":"00","DF Dodgem challenge \"2 vs 1\"":"00","E0 Dodgem challenge \"3 vs 1\"":"00","E1 Crazy castle stockade":"00","E2 Crazy castle lobby":"00","E3 Crazy castle pump room":"00","E4 Balloon burst game":"00","E5 Hoop hurry game":"00","E6 Star spinner":"00","E7 The inferno":"00","EA Cave of horrors":"00","EB Haunted cavern":"00","EC Train station":"00"}},"Multi-Player\\Everyone Infinite All Eggs Multiplayer":{"note":"All blaster modes specifically.[ Thanks retroben, awesome work on this!]","data":["810E5F38 0C04","810E5F3A 5A80","81116A00 3C08","81116A02 8008","81116A04 8108","81116A06 3970","81116A08 1100","81116A0A 0010","81116A0C 0000","81116A0E 0000","81116A10 3C08","81116A12 8008","81116A14 8D08","81116A16 3970","81116A18 0008","81116A1A 4200","81116A1C 0008","81116A1E 4202","81116A20 0008","81116A22 4080","81116A24 3C04","81116A26 8000","81116A28 0104","81116A2A 4020","81116A2C 3C04","81116A2E 2406","81116A30 2484","81116A32 0064","81116A34 AD04","81116A36 31C4","81116A38 3C04","81116A3A 2408","81116A3C 2484","81116A3E FFFE","81116A40 AD04","81116A42 31CC","81116A44 3C04","81116A46 8013","81116A48 8C84","81116A4A CF94","81116A4C 0802","81116A4E 1DFE","81116A50 0000","81116A52 0000"],"options":null},"Multi-Player\\Infinite Health\\Player 1":{"note":"","data":["8012F701 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 2":{"note":"","data":["8012F705 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 3":{"note":"","data":["8012F709 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 4":{"note":"","data":["8012F70D 0064"],"options":null},"Play As":{"note":"To use this cheat, put the cheat on, then press L as you walk through a door to become that chosen character","data":["D0080845 0020","801211FC 00??"],"options":{"Banjo":"0A","Banjo and Kazooie":"01","Bee":"06","Detonator":"0F","Golden Goliath":"0E","Kazooie":"0B","Mumbo":"0D","Snowball":"02","Stony":"08","Submarine":"0C","T-rex baby":"12","T-rex daddy":"13","Truck":"10","Washing machine":"07"}}},"5168D520-CA5FCD0D-C:4A":{"Have Zero Time all Levels":{"note":"","data":["50000B04 0000","81386B44 3000"],"options":null},"Infinite\\Air":{"note":"","data":["81386ACE 0E10"],"options":null},"Infinite\\Always Have All Jinjos":{"note":"","data":["80386ABB 00FF"],"options":null},"Infinite\\Eggs":{"note":"","data":["80386AA7 00FF"],"options":null},"Infinite\\Gold Feathers":{"note":"","data":["80386AB3 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["80386AC3 0008","80386AC7 0008"],"options":null},"Infinite\\Jiggies":{"note":"","data":["80386B0B 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["80386ACB 00FF"],"options":null},"Infinite\\Mumbo Tokens":{"note":"","data":["80386B07 00FF"],"options":null},"Infinite\\Notes":{"note":"Just collect one Note to Have 255 Notes in all Worlds.","data":["80386B32 00FF","80386AA2 0001"],"options":null},"Infinite\\Red Feathers":{"note":"","data":["80386AAF 00FF"],"options":null}},"519EA4E1-EB7584E8-C:4A":{"Have All\\Boards":{"note":"","data":["8108C9C4 0003","8108C9C6 FFFF"],"options":null},"Have All\\Characters":{"note":"","data":["8108C9B8 07FF"],"options":null},"Have All\\Difficulties":{"note":"","data":["8108C9B0 0700"],"options":null},"Have All\\Tracks":{"note":"","data":["8108C9BC BFFE"],"options":null},"Low Timer":{"note":"","data":["8008C8A4 0000","8008C8A6 0000"],"options":null},"Max\\50000 Stunt Points":{"note":"","data":["8108C978 C350"],"options":null},"exhalatio audio hack":{"note":"","data":["81052760 AD99"],"options":null}},"51D29418-D5B46AE3-C:50":{"Access All In-Game Cheats":{"note":"","data":["81118E9A 0001"],"options":null},"Activate All In-Game Cheats":{"note":"","data":["50000D02 0000","81118E82 0101"],"options":null},"All Silver \u0026 Gold Coins (Circuit - Using C/P)":{"note":"Circuit Mode - Using Controller Pack","data":["50000660 0000","811C542C FFFF"],"options":null},"All Silver \u0026 Gold Coins (Single Race + Practice Mode)":{"note":"Single, Practice \u0026 Circuit Mode","data":["50000660 0000","8116375C FFFF"],"options":null},"All Silver \u0026 Gold Coins (Stunt Mode)":{"note":"Stunt Mode","data":["50000440 0000","81163BBC FFFF"],"options":null},"Always 1st":{"note":"","data":["80177D4E 0000"],"options":null},"Easy Difficulty level":{"note":"","data":["80177A3C 0000"],"options":null},"Extended Time In Battle \u0026 Stunt Mode To 2.05 Hours":{"note":"","data":["811633BA 457C","811636EE 4514"],"options":null},"Laps To Race":{"note":"","data":["81177A18 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Max Points Stunt Mode":{"note":"","data":["81177A55 3AFF","81177A57 F3FA"],"options":null},"Max Race Points":{"note":"","data":["8117CE22 03E7"],"options":null},"Number Of Drones In Race":{"note":"","data":["81163240 00??"],"options":{"1 Drone":"01","2 Drones":"02","3 Drones":"03","4 Drones":"04","5 Drones":"05","6 Drones":"06","7 Drones":"07","8 Drones":"08","9 Drones":"09"}},"Stunt Wings All Modes":{"note":"Where Wings Are Available Press D-Pad Up On Wing Select","data":["D017055A 0004","50000C02 0000","811139D0 0202"],"options":null},"Stunt Wings Circuit Mode":{"note":"Press D-Pad Up On Wing Select","data":["D017055A 0004","50000C02 0000","801756A1 0202"],"options":null}},"52F78805-8B8FCAB7-C:45":{"Always Win Judge's Decision\\Player 1":{"note":"","data":["8020B777 FFFF","802098AF 0000"],"options":null},"Always Win Judge's Decision\\Player 2":{"note":"","data":["802098AF FFFF","8020B777 0000"],"options":null},"Enable Boro":{"note":"","data":["80307349 0001"],"options":null},"Have 1 Star\\Abdul":{"note":"","data":["80307353 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["8030734F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80307352 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80307351 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80307354 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80307350 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["8030734E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80307355 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80307356 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["802098A1 0000","802047C3 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802047C7 0000","8020B769 0000"],"options":null},"Level Select":{"note":"","data":["8022A84C 00??"],"options":{"Blue Hell Mountain":"0C","Coliseum":"04","Desert":"01","Fire Mountain":"00","Highlands":"02","Hong Kong":"03","Joker's Room":"0B","Jungle":"05","Ninja Room":"06","Observation":"09","Palace":"0D","Pasture":"0A","Suspension Bridge":"07"}},"Play As\\Player 1":{"note":"","data":["802EF622 00??"],"options":{"Abdul":"05","Bob":"01","Boro":"08","Joker":"0B","Leon":"04","Meiling":"03","Ninja":"06","No Clue":"0D","Pierre":"02","Ryuji":"00","The Master":"0C","Tomahawk":"07","Ushi":"0A","Valerie":"09"}},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EF67B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0209757 0000","80209757 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020B61F 0000","8020B61F 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810ADBDC 3F80"],"options":null}},"5306CF45-CBC49250-C:45":{"Car Upgrades\\'63 Muscle Car":{"note":"","data":["8015053F 0005"],"options":null},"Car Upgrades\\All-Terrain Vehicle":{"note":"","data":["8015054F 0004"],"options":null},"Car Upgrades\\Devastator":{"note":"","data":["80150547 0005"],"options":null},"Car Upgrades\\Italia P69":{"note":"","data":["8015054B 0005"],"options":null},"Car Upgrades\\La Bomba":{"note":"","data":["80150543 0005"],"options":null},"Car Upgrades\\Police Car":{"note":"","data":["80150557 0004"],"options":null},"Car Upgrades\\School Bus":{"note":"","data":["80150553 0004"],"options":null},"Infinite Time":{"note":"","data":["8015094D 0095"],"options":null},"Play Level Modifier":{"note":"","data":["80150963 00??"],"options":{"Appalachia":"0C","Arizona":"07","Beverly Hills":"04","Chicago":"0A","Cruise The USA":"0E","Death Valley":"06","Golden Gate Park":"00","Grand Canyon":"08","Indiana":"0B","Iowa":"09","LA Freeway":"05","Redwood Forest":"03","San Francisco":"01","US 101":"02","Washington DC":"0D"}},"Player 1\\Always First Place":{"note":"","data":["8015022B 0001"],"options":null},"Player 1\\Always Have Fastest Car":{"note":"","data":["8015021A 0001"],"options":null},"Player 1\\Gearbox Type Modifier":{"note":"","data":["80150213 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 1\\Lights \u0026 Sirens For Police Car \u0026 School Bus P1":{"note":"","data":["8115053A 0001","8114E38A 0001"],"options":null},"Player 2\\Always First Place":{"note":"","data":["801505C7 0001"],"options":null},"Player 2\\Always Have Fastest Car":{"note":"","data":["801505B6 0001"],"options":null},"Player 2\\Gearbox Type Modifier":{"note":"","data":["801505AF 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 2\\Lights \u0026 Sirens For Police Car \u0026 School Bus P2":{"note":"","data":["811508D6 0001","8114E3A2 0001"],"options":null},"Stop Elapsed Time And No Traffic":{"note":"","data":["80150949 0000"],"options":null}},"5326696F-FE9A99C3-C:45":{"Have Alien Artifact":{"note":"","data":["8004DC5F 0001"],"options":null},"Infinite Ammo All Weapons":{"note":"","data":["50001102 0000","81048146 8000"],"options":null},"Infinite\\Greece":{"note":"","data":["81052B18 0098","81052B1A 967F"],"options":null},"Infinite\\Health":{"note":"","data":["810DDCEC 0258"],"options":null},"Item Modifier":{"note":"","data":["8004DC4F ????"],"options":{"All Items":"FFFF","Crank":"0040","Hangar Key":"0400","Heirglyph Map Piece":"0100","Howitzer Shells":"0002","Nothing":"0000","Windmill Cog":"0080"}},"Level Select":{"note":"","data":["80047F93 00??"],"options":{"America":"03","Comet":"05","Greece":"01","Java":"02","Siberia":"04"}},"No Humans Killed":{"note":"","data":["8104816A 0000"],"options":null},"Press L To Walk Over Water, Climb Hills":{"note":"","data":["D00475D9 0020","8104DCD2 0808"],"options":null},"Sixty Frames WIP":{"note":"Too fast but looks nice I guess.","data":["8001B48F 0004","8001B497 0004","8001B49F 0004","8001B4A7 0004","8001B4AF 0004"],"options":null},"Weapon Select\\1st Position":{"note":"","data":["80048138 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\2nd Position":{"note":"","data":["80048139 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\3rd Position":{"note":"","data":["8004813A 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\4th Position":{"note":"","data":["8004813B 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\5th Position":{"note":"","data":["8004813C 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\6th Position":{"note":"","data":["8004813D 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\7th Position":{"note":"","data":["8004813E 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\8th Position":{"note":"","data":["8004813F 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}}},"5354631C-03A2DEF0-C:45":{"All Equipment Upgrades":{"note":"","data":["801EF6DD 0023","811EF72A 201B","801EF6BC 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03E6B3B 0000","801EF672 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801EF6F2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801EF6F3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801EF6F4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801EF6F5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801EF6F6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801EF6F7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801EF6E5 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801EF6EB 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801EF6F1 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Fight Demo Majora's Mask":{"note":"With this code,load the game \u0026 put the cheat on. then press start to apear in the Demo mode.","data":["8016A718 0020"],"options":null},"Fog\\Blue":{"note":"","data":["80166108 0020"],"options":null},"Fog\\Pink":{"note":"","data":["8016610C 0020"],"options":null},"Fog\\Yellow":{"note":"","data":["80166110 0020"],"options":null},"Have\\All Masks":{"note":"","data":["801EF6F8 003E","801EF6F9 0038","801EF6FA 0047","801EF6FB 0045","801EF6FC 0040","801EF6FD 0032","801EF6FE 003A","801EF6FF 0046","801EF700 0039","801EF701 0042","801EF702 0048","801EF703 0033","801EF704 003C","801EF705 003D","801EF706 0037","801EF707 003F","801EF708 0036","801EF709 0034","801EF70A 0043","801EF70B 0041","801EF70C 003B","801EF70D 0044","801EF70E 0049","801EF70F 0035"],"options":null},"Have\\All Quest Status Items":{"note":"","data":["801EF72D 0005","811EF72E F7CF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801EF6E2 0002"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801EF6E3 0003"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801EF6E4 0004"],"options":null},"Have\\Bombchu":{"note":"","data":["801EF6E7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801EF6E6 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801EF6E9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801EF6E8 0008"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801EF6F0 0010"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801EF6E1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801EF6EF 000F"],"options":null},"Have\\Item Modifier":{"note":"","data":["801EF6F0 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\Lens of Truth":{"note":"","data":["801EF6EE 000E"],"options":null},"Have\\Magic Beans":{"note":"","data":["801EF6EA 000A"],"options":null},"Have\\Ocarina of Time":{"note":"","data":["801EF6E0 0000"],"options":null},"Have\\Pictograph":{"note":"","data":["801EF6ED 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801EF6EC 000C"],"options":null},"Infinite\\Health":{"note":"","data":["811EF6A6 0140"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811EF6A4 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"","data":["801EF711 0063","801EF716 0063","801EF717 0063","801EF718 0063","801EF719 0063","801EF71A 0063","801EF71C 0063","801EF71D 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801EF6A9 0060","811EF6B0 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811EF6AA 03E7"],"options":null},"Maximum Visibility":{"note":"","data":["80166118 0020"],"options":null},"Play As":{"note":"","data":["801EF690 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03E6B3B 0020","813FFE18 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You have been warned.","data":["801EF6BC 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01FB876 0008","811EF686 FFFD","D01FB876 0004","811EF686 0000","D01FB876 0002","811EF686 FFFE"],"options":null},"Use C-Buttons Anywhere":{"note":"This code allows you to use C-Button Items where you normally can't use them.","data":["811F3588 0000","811F358A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["D03E6B3A 0000","803FF395 0001","813FF39A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}},"Widescreen":{"note":"","data":["8113F834 3C07","8113F836 3FE3"],"options":null}},"535DF3E2-609789F1-C:4A":{"99 Points":{"note":"","data":["801CC273 0063"],"options":null},"Always First Place":{"note":"","data":["801C386F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801C3B53 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801C3B2E 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801C3997 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801C3FBA 0005","801C425A 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801C399F 0000"],"options":null},"Super Speed":{"note":"","data":["801C3997 0005","D0155221 0010","801C3997 0020"],"options":null}},"53D440E7-7519B011-C:45":{"Alt Sixty Frames":{"note":"A friend informed me this didn't freeze.","data":["80079A2A 0003"],"options":null},"Boss Cannot Move\\Dino":{"note":"","data":["811DFCF4 44A0"],"options":null},"Boss Cannot Move\\Octo":{"note":"","data":["811E045C 44A0"],"options":null},"Enable All Cheats":{"note":"Go into Options \u0026 then Magic Codes. Then Code list to turn off \u0026 on what you want.","data":["50000401 0000","810DFD9C FFFF"],"options":null},"Have All\\50 Bananas\\Ancient Lake":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E32CD 0032"],"options":null},"Have All\\50 Bananas\\Boulder Canyon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E61ED 0032"],"options":null},"Have All\\50 Bananas\\Crescent Island":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3A2D 0032"],"options":null},"Have All\\50 Bananas\\Darkmoon Caverns":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E5D0D 0032"],"options":null},"Have All\\50 Bananas\\Everfrost Peak":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4F5D 0032"],"options":null},"Have All\\50 Bananas\\Fossil Canyon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E676D 0032"],"options":null},"Have All\\50 Bananas\\Frosty Village":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E5F4D 0032"],"options":null},"Have All\\50 Bananas\\Greenwood Village":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4AAD 0032"],"options":null},"Have All\\50 Bananas\\Haunted Woods":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4A1D 0032"],"options":null},"Have All\\50 Bananas\\Hot Top Volcano":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E462D 0032"],"options":null},"Have All\\50 Bananas\\Jungle Falls":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E44CD 0032"],"options":null},"Have All\\50 Bananas\\Pirate Lagoon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E295D 0032"],"options":null},"Have All\\50 Bananas\\Snowball Valley":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E49FD 0032"],"options":null},"Have All\\50 Bananas\\Spacedust Alley":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E654D 0032"],"options":null},"Have All\\50 Bananas\\Spaceport Alpha":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3C6D 0032"],"options":null},"Have All\\50 Bananas\\Star City":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E578D 0032"],"options":null},"Have All\\50 Bananas\\Treasure Caves":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E371D 0032"],"options":null},"Have All\\50 Bananas\\Walrus Cove":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4A7D 0032"],"options":null},"Have All\\50 Bananas\\Whale Bay":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3AFD 0032"],"options":null},"Have All\\50 Bananas\\Windwill Plains":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E9BBD 0032"],"options":null},"Have All\\99 Balloons":{"note":"","data":["810DFD9A FFFF","801FCBED 0063"],"options":null},"Have All\\Amulets":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FC9E6 FFFF"],"options":null},"Have All\\Keys":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FC9D8 FFFF"],"options":null},"Have All\\Levels Completely Finished":{"note":"","data":["50000904 0000","801FCAF7 00FF","801FCB1F 00FF","801FCB27 00FF","50000404 0000","801FCB2F 00FF","801FCB4F 00FF","50000804 0000","801FCB53 00FF"],"options":null},"Have All\\Silver Coins\\Ancient Lake":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E34AA 0008"],"options":null},"Have All\\Silver Coins\\Boulder Canyon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E63CA 0008"],"options":null},"Have All\\Silver Coins\\Crescent Island":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E3C0A 0008"],"options":null},"Have All\\Silver Coins\\Everfrost Peak":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E513A 0008"],"options":null},"Have All\\Silver Coins\\Fossil Canyon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E694A 0008"],"options":null},"Have All\\Silver Coins\\Frosty Village":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E612A 0008"],"options":null},"Have All\\Silver Coins\\Greenwood Village":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4C8A 0008"],"options":null},"Have All\\Silver Coins\\Haunted Woods":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4BFA 0008"],"options":null},"Have All\\Silver Coins\\Hot Top Volcano":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E480A 0008"],"options":null},"Have All\\Silver Coins\\Jungle Falls":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E513A 0008"],"options":null},"Have All\\Silver Coins\\Pirate Lagoon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E2B3A 0008"],"options":null},"Have All\\Silver Coins\\Snowball Valley":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4BDA 0008"],"options":null},"Have All\\Silver Coins\\Treasure Caves":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E38FA 0008"],"options":null},"Have All\\Silver Coins\\Walrus Cove":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4C5A 0008"],"options":null},"Have All\\Silver Coins\\Whale Bay":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E3CDA 0008"],"options":null},"Have All\\Silver Coins\\Windmill Plains":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E9D9A 0008"],"options":null},"Have All\\The pieces of the TT thing":{"note":"","data":["801FC9E6 0004"],"options":null},"Have All\\Trophies":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FC9DE FFFF"],"options":null},"Infinite\\Power Ups\\Ancient Lake":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E6A2B 0010"],"options":null},"Infinite\\Power Ups\\Boulder Canyon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E8D4B 0010"],"options":null},"Infinite\\Power Ups\\Crescent Island":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E718B 0010"],"options":null},"Infinite\\Power Ups\\Darkmoon Caverns":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E96AB 0010"],"options":null},"Infinite\\Power Ups\\Everfrost Peak":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E871B 0010"],"options":null},"Infinite\\Power Ups\\Fossil Canyon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E9ECB 0010"],"options":null},"Infinite\\Power Ups\\Frosty Village":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E96A6 0010"],"options":null},"Infinite\\Power Ups\\Greenwood Village":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E820B 0010"],"options":null},"Infinite\\Power Ups\\Haunted Woods":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E817B 0010"],"options":null},"Infinite\\Power Ups\\Hot Top Volcano":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E477B 0010"],"options":null},"Infinite\\Power Ups\\Jungle Falls":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E45BB 0010"],"options":null},"Infinite\\Power Ups\\Pirate Lagoon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E54B6 0010"],"options":null},"Infinite\\Power Ups\\Snowball Valley":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E815B 0010"],"options":null},"Infinite\\Power Ups\\Space Dust Alley":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E904B 0010"],"options":null},"Infinite\\Power Ups\\Spaceport Alpha":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E676B 0010"],"options":null},"Infinite\\Power Ups\\Starcity":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E8EEB 0010"],"options":null},"Infinite\\Power Ups\\Treasure Cove":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E6E7B 0010"],"options":null},"Infinite\\Power Ups\\Walrus Cove":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E81DB 0010"],"options":null},"Infinite\\Power Ups\\Whale Bay":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E665B 0010"],"options":null},"Infinite\\Power Ups\\Windmill Plains":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801EC6BB 0010"],"options":null},"Sixty Frames":{"note":"May freeze at some points,physics can get wonky with slopes on both codes","data":["80079A2B 0003"],"options":null},"Widescreen":{"note":"","data":["81066006 3FE3","81066156 3FE3","810661BE 3FE3","81126174 3FE3"],"options":null}},"53ED2DC4-06258002-C:50":{"Always 1st":{"note":"","data":["80121C8C 0001","80125489 0001"],"options":null},"Enable In-Game cheat Menu \u0026 Cheats":{"note":"Here you can Activate the IN-Built Cheats Menu. At the Front Screen Just Press C-Button Right.This will open up All Tracks \u0026 Characters In Free Play \u0026 Time Attack. Also In A Race, Press The Start/Pause button to Access the In-Cheat-Menu Option.You can also choose how many Pod's Racers are in the Race \u0026 also how many Laps are in the Race in Free Play \u0026 Time Attack","data":["810A0D27 000A","810A0D2A FFFF"],"options":null},"Have All Tracks Completed":{"note":"","data":["8111CB0A FFFF","8111CB0C 3FFF","8111CB0E 3FFF","8111CB10 3FFF","8111CB12 00FF"],"options":null},"Infinite Truguts":{"note":"","data":["8111CB1A FFFF","8111CB18 7FFF"],"options":null},"No Damage":{"note":"If when Racing Your Pod Over heats \u0026 bursts into flames Press \"R\" \u0026 you will Repair the Damage.","data":["800AA5D7 0001"],"options":null},"Unlock All Tracks \u0026 Characters":{"note":"When using Unlock All Tracks \u0026 Characters For can to pick \u0026 choose what ever you want to play As \u0026 where ;)","data":["8011CB08 00FF","8011CB09 00FF","8011CB0B 00FF","8111CB08 FFFF","8111C80A FFFF","8011CB14 007D","8111CB16 FFFF"],"options":null}},"54310E7D-6B5430D8-C:50":{"Always 1st\\Player 1":{"note":"","data":["810A9248 0001"],"options":null},"Freeze Checkpoint Timer":{"note":"","data":["810CE1D2 BCCC"],"options":null},"Infinite Auto Pilot\\AG Systems\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BCE47 005B"],"options":null},"Infinite Auto Pilot\\Auricom\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC1E7 005B"],"options":null},"Infinite Auto Pilot\\Direx\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC817 005B"],"options":null},"Infinite Auto Pilot\\Feisar 1\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["811BC4FE 005B"],"options":null},"Infinite Auto Pilot\\Piranah\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC817 005B"],"options":null},"Weapon Select\\AG Systems":{"note":"","data":["811BC1DE ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Auricom":{"note":"","data":["811BCE3E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Direx":{"note":"","data":["811BC80E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Feisar 1":{"note":"","data":["811BC4F6 ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Piranah":{"note":"","data":["811BC80E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"[In-Game Cheat Unlock]\\Cyclone Weapon":{"note":"","data":["800924C4 00??"],"options":{"Off":"00","On":"01"}},"[In-Game Cheat Unlock]\\Infinite Ammo\\Player 1":{"note":"","data":["80091254 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Ammo\\Player 2":{"note":"","data":["80092970 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Shield Energy\\Player 1":{"note":"","data":["80091256 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Shield Energy\\Player 2":{"note":"","data":["80092972 0001"],"options":null},"[In-Game Cheat Unlock]\\[Ultimate Unlock All]":{"note":"This Unlocks All Levels, Tracks, Velocitar and Super Combo, Piranha 2 Ship, Cyclone Weapons Power Up and all 28 Gold Awards unlocked","data":["80091255 0001","8009125C 0020"],"options":null}},"55D4C4CE-7753C78A-C:45":{"Add\\Building":{"note":"","data":["8006A1C0 0001"],"options":null},"Add\\Satellite":{"note":"","data":["8006A1C3 0001"],"options":null},"Have\\All\\Levels Unlocked \u0026 Completed For Americans":{"note":"","data":["8006A1F0 0011"],"options":null},"Have\\All\\Levels Unlocked \u0026 Completed For Black Dogs":{"note":"","data":["8006A1F3 000A"],"options":null},"Have\\All\\Levels Unlocked \u0026 Completed For Soviets":{"note":"","data":["8006A1F1 0008"],"options":null},"Have\\All\\Missions Open And Complete For Americans":{"note":"","data":["8006A1EC 0011"],"options":null},"Have\\All\\Missions Open And Complete For Black Dogs":{"note":"","data":["8006A1EF 000A"],"options":null},"Have\\All\\Missions Open And Complete For Soviets":{"note":"","data":["8006A1ED 0008"],"options":null},"Infinite\\Ammo":{"note":"","data":["8006A1C1 0001"],"options":null},"Infinite\\Armor":{"note":"","data":["8006A1C2 0001"],"options":null},"Infinite\\Pilots":{"note":"","data":["811FBCCE FFFF"],"options":null},"Infinite\\Scrap Collected":{"note":"","data":["811FBCC6 FFFF"],"options":null},"Infinite\\Ship Health":{"note":"","data":["811DF6DE 0BA9"],"options":null},"Infinite\\Shots For Sniper Rifle":{"note":"","data":["811DA682 0003"],"options":null},"Infinite\\Weapons":{"note":"","data":["811DF6EA 04B0"],"options":null},"Level Select":{"note":"","data":["8006A1F5 0001"],"options":null},"Max\\Pilot Limits":{"note":"","data":["811FBCD2 FFFF"],"options":null},"Max\\Scrap Limit":{"note":"","data":["811FBCCA FFFF"],"options":null}},"569433AD-F7E13561-C:45":{"Infinite Health":{"note":"","data":["81086BCA 0038","800BAF97 0007"],"options":null}},"5753720D-2A8A884D-C:44":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C24D2 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE02F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802024B5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE015 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FC945 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFD2D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","80202565 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801D9E7D 0001"],"options":null}},"57BFF74D-DE747743-C:50":{"In-Game Cheats\\Access Cheat menu":{"note":"","data":["50000504 0000","80101308 0001"],"options":null},"In-Game Cheats\\Enable\\All Items":{"note":"To access simply pause in game play \u0026 then unpause.","data":["801012EC 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Invincibility":{"note":"","data":["802AA818 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Monsters":{"note":"","data":["802AA98B 00??"],"options":{"Are Active":"00","Are Gone":"01"}},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5E06 0064","812A5E4E 0064","812A5E5E 00C8","812A5E48 1900","812A5E18 04B0","812A5E4A 0640","812A5DE8 0960","812A5E4C 0190"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Keys":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5E03 000F"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A5E77 0001","50000F02 0000","812A5DBA 03E7"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Infinite Health (All Levels)":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on Single-Player, Co-Operative and DUKEMATCH, All Levels.","data":["8024D557 0064","802A5DB9 0064"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A6192 0064","812A61DA 0064","812A61EA 00C8","812A61D4 1900","812A61A4 04B0","812A61D6 0640","812A6174 0960","812A61D8 0190"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A6203 0001","50000E02 0000","812A6148 03E7"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on DUKEMATCH, All Levels.","data":["8024BC3F 0064","802A6145 0064"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A651E 0064","812A6566 0064","812A6576 00C8","812A6560 1900","812A6530 04B0","812A6562 0640","812A6500 0960","812A6564 0190"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A658F 0001","50000E02 0000","812A64D4 03E7"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 4 on DUKEMATCH, All Levels.","data":["8024B79B 0064","802A64D1 0064"],"options":null},"Single-Player (All Levels)\\Have All\\Items \u0026 Infinite Use on all levels":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5A7A 0064","812A5AC2 0064","812A5AD2 00C8","812A5ABC 1900","812A5ABE 0640","812A5A8C 04B0","812A5A5C 0960","812A5AC0 0190"],"options":null},"Single-Player (All Levels)\\Have All\\Keys":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5A77 000F"],"options":null},"Single-Player (All Levels)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A5AEB 0001","50000A02 0000","812A5A30 03E7"],"options":null},"Single-Player (All Levels)\\Have Infinite Health (All Levels)":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels and does what it says on the tin. Infinite health for player 1, All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["80247493 0064","8026EC8B 0064","802A5A2D 0064"],"options":null}},"580162EC-E3108BF1-C:58":{"Freeze Timer at 04:59":{"note":"Do not enable until count down to race is finished","data":["811BDB9E 3A70"],"options":null},"Have All Groups Completed":{"note":"This gives you all Cups for all Groups.","data":["50002801 0000","801BDCDC 0002"],"options":null},"Have Everything Unlocked":{"note":"Pause Game: Use Control Stick, to scroll the Cheat Menu. Press A, to activate Cheats. This will unlock everything and also be replacing all the Zombies with Pre-Historic Dinosaurs.","data":["801BDDBD 000F"],"options":null},"Have Infinite\\Free Repairs":{"note":"","data":["81097844 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Frozen Opponents":{"note":"","data":["810978A4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Grip-O-Matic Tires":{"note":"","data":["810979DC ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Hot Rod":{"note":"","data":["810977E4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Invunerability":{"note":"","data":["8109782C ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Mega Turbo":{"note":"","data":["810977CC ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Mine Dropping Ability":{"note":"","data":["81097A98 ????"],"options":{"Off":"0000","On":"0064"}},"Have Infinite\\Turbo":{"note":"","data":["810977B4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Turbo Nitrous":{"note":"","data":["810977FC ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Underwater Ability":{"note":"","data":["81097874 ????"],"options":{"Off":"0000","On":"0BBB"}},"Max Credits":{"note":"This is also Infinite until disabled","data":["811BDC1B FFFF"],"options":null},"Max Kills":{"note":"This will automatically Clear the stage if enabled and go back to the stage menu","data":["81094596 01F4"],"options":null}},"58FD3F25-D92EAA8D-C:50":{"Enable All Levels \u0026 Boarders":{"note":"","data":["80250AB9 00FF","80250ABB 0005","81250AC6 FCFF","80250AC8 0007"],"options":null},"Infinite Damage All Players and Levels":{"note":"","data":["803F4C01 0000"],"options":null},"Play As":{"note":"","data":["8001A0E7 00??"],"options":{"Akari Hayami":"02","Dion Blaster":"00","Gold Boarder":"06","Kensuke Kimachi":"01","Panda Boarder":"07","Ricky Winterborn":"03","Rob Haywood":"04","Silver Boarder":"05"}},"Prees L For Infinite Lives \u0026 Continues":{"note":"Whenever you've lost a life, Press L.Do not press L when on the main menu or during the intro Only use this feature in Match Race","data":["D00556A9 0020","8026B14B 0003"],"options":null},"Stop Timer\\Contest\\Air Make":{"note":"","data":["80319BBA 00C5"],"options":null},"Stop Timer\\Contest\\Crystal Lake":{"note":"","data":["8029C0DA 00C5"],"options":null},"Stop Timer\\Contest\\Crystal Peak":{"note":"","data":["802A889A 00C5"],"options":null},"Stop Timer\\Contest\\Golden Forest":{"note":"","data":["802A6D3A 00C5"],"options":null},"Stop Timer\\Contest\\Half Pipe":{"note":"","data":["802F51FA 00C5"],"options":null},"Stop Timer\\Time Attack\\Air Make":{"note":"","data":["8031AA4A 0000"],"options":null},"Stop Timer\\Time Attack\\Crystal Lake":{"note":"","data":["802A582A 0000"],"options":null},"Stop Timer\\Time Attack\\Crystal Peak":{"note":"","data":["802B2BCA 0000"],"options":null},"Stop Timer\\Time Attack\\Deadly Fall":{"note":"","data":["802CF56A 0000"],"options":null},"Stop Timer\\Time Attack\\Dragon Cave":{"note":"","data":["802C137A 0000"],"options":null},"Stop Timer\\Time Attack\\Golden Forrest":{"note":"","data":["802B135A 0000"],"options":null},"Stop Timer\\Time Attack\\Half Pipe":{"note":"","data":["802F638A 0000"],"options":null},"Stop Timer\\Time Attack\\Mountain Village":{"note":"","data":["802CB95A 0000"],"options":null},"Stop Timer\\Trick Attack\\Air Make":{"note":"","data":["8031AABA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Crystal Lake":{"note":"","data":["8029F66A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Crystal Peak":{"note":"","data":["802AC8EA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Deadly Fall":{"note":"","data":["802C8E0A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Dragon Cave":{"note":"","data":["802BAD3A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Golden Forrest":{"note":"","data":["802AAF5A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Half Pipe":{"note":"","data":["802F63FA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Mountain Village":{"note":"","data":["802C50DA 00C5"],"options":null}},"591A806E-A5E6921D-C:45":{},"596E145B-F7D9879F-C:50":{"Enable All Cheats":{"note":"Go into Options \u0026 then Magic Codes. Then Code list to turn off \u0026 on what you want.","data":["800E03AC 001F","50000301 0000","800E03AD 00FF"],"options":null},"Fifty Frames":{"note":"Identical location to the NTSC address","data":["80079E7B 0003"],"options":null},"Have All\\50 Balloons":{"note":"","data":["8020807D 0032"],"options":null},"Have All\\Control Drumstick \u0026 Adventure Two mode unlocked":{"note":"","data":["80126CCC 0003","80126CCF 0003","80126CE2 0003","80126CE3 0008"],"options":null},"Have All\\Keys":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80208659 001F"],"options":null},"Have All\\None-Adventure tracks completed":{"note":"","data":["50001204 0000","80208777 0007","50000904 0000","802087CF 0007","80208658 0007","8020865A 0007","8020865B 0007","8020865C 000F","8020865D 00FF"],"options":null},"Have All\\T.T. Amulets":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80208667 0004"],"options":null},"Have All\\T.T. time trial races beaten":{"note":"","data":["80208666 0004"],"options":null},"Have All\\Trophies":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["8020865E 0007","8020865F 00FF"],"options":null},"Have All\\Trophy Adventure races unlocked":{"note":"","data":["50000502 0000","8020886E 0007"],"options":null},"Widescreen":{"note":"","data":["81066246 3FE3","81066396 3FE3","810663FE 3FE3","8107037A 3740","811267A4 3FCE"],"options":null}},"5A160336-BC7B37B0-C:50":{"All Levels \u0026 Stages Unlocked":{"note":"","data":["50001804 0000","8008E5CF 0001"],"options":null},"Have All Gold Cards":{"note":"","data":["8008E575 00FF","8108E576 FFFF","8108E578 FFFF","8108E57A FFFF","8108E57C FFFF"],"options":null},"Infinite Red Pumped-Up Bombs":{"note":"","data":["802AC643 0004"],"options":null},"Infinite\\Credits":{"note":"","data":["802AC61B 0063"],"options":null},"Infinite\\Gems":{"note":"","data":["802AC61F 0063"],"options":null},"Infinite\\Lives":{"note":"","data":["802AC617 0063"],"options":null},"Infinite\\Time":{"note":"","data":["802AC633 0000"],"options":null}},"5A9D3859-97AAE710-C:45":{"Anger metre always full":{"note":"","data":["800D5978 00FF","800D5666 00FF"],"options":null},"Crunched Players":{"note":"","data":["810DBA6C 3F00"],"options":null},"Difficulty Mod":{"note":"","data":["80120639 00??"],"options":{"Easy":"01","Hard":"03","Medium":"02","Very Easy":"00"}},"Extra Teams":{"note":"","data":["80115A0C 0001"],"options":null},"Get In Fights Constantly":{"note":"","data":["800CF766 0020"],"options":null},"Players\\Head Size":{"note":"","data":["81118A2C ????"],"options":{"Normal Size":"3F80","Very Large":"4080","Very Small":"3F00"}},"Players\\Height Size":{"note":"","data":["81120688 ????"],"options":{"Giants":"4080","Large":"3FC0","Midgets":"3F00","Normal Size":"3F80"}},"Team 1\\Score pts":{"note":"","data":["8011C061 00??"],"options":{"30 Points":"1E","50 Points":"23","75 Points":"4B","99 Points":"63","Zero Points":"00"}},"Team 2\\Score pts":{"note":"","data":["8011F571 ????"],"options":{"0 Points":"2305","5 Points":"4B07","9 Points":"6309","ero Points":"0000"}}},"5AC383E1-D712E387-C:45":{"Double Frames":{"note":"Sadly only 30fps when playing but at least its not the SLOW 15fps rate","data":["8002ADAB 0001"],"options":null},"Infinite\\Money\\Player 1":{"note":"","data":["81324B46 270F"],"options":null},"Infinite\\Money\\Player 2":{"note":"","data":["81324B5A 270F"],"options":null},"Infinite\\Money\\Player 3":{"note":"","data":["81324B6E 270F"],"options":null},"Infinite\\Money\\Player 4":{"note":"","data":["81324B82 270F"],"options":null},"[Language Select]":{"note":"To use this load the game then enable this cheat and Reset (F1) you will now be on your chosen Language and Relative Local Language Board and Money.","data":["D009675F 0001","80096758 00??"],"options":{"American":"00","British":"01","France":"02","German":"03"}}},"5C1B5FBD-7E961634-C:46":{"Access In-Game Cheat Menu":{"note":"To Access Pause Game Play. This gives you access to In-game Cheats like God Mode,Level Select,All Items Etc","data":["81137DB6 07FF","80137E93 0005"],"options":null},"Boots Of Speed Select\\Player 1":{"note":"","data":["8113F538 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113F6D4 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113F870 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113FA0C ????"],"options":{"Off":"0000","On":"03FF"}},"Have All\\Armour":{"note":"","data":["8013F651 0019","8013F655 0014","8013F659 0014","8013F65D 0014"],"options":null},"Have All\\Items And Artifacts\\Player 1":{"note":"","data":["8013F651 0019","8013F655 0014","8013F659 0014","8013F65D 0014","8013F661 0001","8013F663 00FF","8013F665 0002","8013F667 00FF","8013F669 0003","8013F66B 00FF","8013F66D 0004","8013F66F 00FF","8013F671 0006","8013F673 00FF","8013F675 0007","8013F677 00FF","8013F679 0008","8013F67B 00FF","8013F67D 0009","8013F67F 00FF","8013F681 000A","8013F683 00FF","8013F685 000B","8013F687 00FF","8013F689 000C","8013F68B 00FF","8013F68D 000D","8013F68F 00FF","8013F691 000E","8013F693 00FF","8013F695 000F","8013F697 00FF","8013F699 0010","8013F69B 00FF","8013F69D 0011","8013F69F 00FF","8013F6A1 0012","8013F6A3 00FF","8013F6A5 0013","8013F6A7 00FF","8013F6A9 0014","8013F6AB 00FF","8013F6AD 0015","8013F6AF 00FF","8013F6B1 0016","8013F6B3 00FF","8013F6B5 0017","8013F6B7 00FF","8013F6B9 0018","8013F6BB 00FF","8013F6BD 0019","8013F6BF 00FF","8013F6C1 001A","8013F6C3 00FF","8013F6C5 001B","8013F6C7 00FF","8013F6C9 001C","8013F6CB 00FF","8013F6CD 001D","8013F6CF 00FF","8013F6D1 001E","8013F6D3 00FF","8013F6D5 001F","8013F6D7 00FF","8013F6D9 0020","8013F6DB 00FF","8013F6E9 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113F6FC 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113F6D8 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113F874 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113FA10 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013F715 00FF","8013F717 00FF","8013F719 00FF","8013F71B 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013F6F1 00FF","8013F6F3 00FF","8013F6F5 00FF","8013F6F7 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013F88D 00FF","8013F88F 00FF","8013F891 00FF","8013F893 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013FA29 00FF","8013FA2B 00FF","8013FA2D 00FF","8013FA2F 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013F71D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013F2E9 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013F485 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013F621 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013F71F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013F2EB 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013F487 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013F623 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113F52C ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113F6C8 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113F864 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113FA00 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113F6EC FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113F2B8 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113F454 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113F5F0 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8113F533 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113F6CE ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113F86A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113FA06 ????"],"options":{"Off":"0000","On":"03FF"}}},"5C9191D6-B30AC306-C:4A":{"99 Points":{"note":"","data":["801D8E13 0063"],"options":null},"Always First Place":{"note":"","data":["801D040F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801D06F3 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801D06CE 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801D0537 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801D0B5A 0005","801D0DFA 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801D053F 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800E84C3 0007"],"options":null},"Super Speed":{"note":"","data":["801D0537 0005","D0161DC1 0010","801D0537 0020"],"options":null}},"5CD4150B-470CC2F1-C:45":{"Access\\All Secret Characters":{"note":"This code is Fantastic, You have 12 characters to choose from to you race without any bike, just on foot","data":["50000C04 0000","801839CF 0001"],"options":null},"Access\\All Superbikes":{"note":"","data":["50000304 0000","801839CF 0001"],"options":null},"Access\\All Tracks":{"note":"","data":["50000BD8 0000","80182F87 0001"],"options":null},"Infinite Lasers\\Player 1":{"note":"","data":["80170B99 00C8"],"options":null},"Infinite Lasers\\Player 2":{"note":"","data":["80171241 00C8"],"options":null},"Infinite Lasers\\Player 3":{"note":"","data":["80171869 00C8"],"options":null},"Infinite Lasers\\Player 4":{"note":"","data":["80171ED1 00C8"],"options":null},"Infinite Nitros\\Player 2":{"note":"","data":["801711CB 0004","801711CF 0004"],"options":null},"Infinite Nitros\\Player 3":{"note":"","data":["80171833 0004","80171837 0004"],"options":null},"Infinite Nitros\\Player 4":{"note":"","data":["80171E9B 0004","80171E9F 0004"],"options":null},"Infinite Shield\\Player 2":{"note":"","data":["801711F5 00C8"],"options":null},"Infinite Shield\\Player 3":{"note":"","data":["8017185D 00C8"],"options":null},"Infinite Shield\\Player 4":{"note":"","data":["80171EC5 00C8"],"options":null},"Infinite\\Nitros\\Player 1":{"note":"","data":["80170B63 0004","80170B67 0004"],"options":null},"Infinite\\Shield\\Player 1":{"note":"","data":["80170B8D 00C8"],"options":null},"[Screen Hud Clear]":{"note":"If you are using a Plugin other then Jabos and can not see through the Thick Hud then Let the game load 1st before Putting this code on,Or it will give an error and Freeze","data":["80092B8B 0004"],"options":null}},"5D40ED2C-10D6ABCF-C:00":{"Infinite Max Health":{"note":"","data":["8011249D 00A0"],"options":null},"Infinite Max Lives":{"note":"","data":["801124B4 0009"],"options":null},"Infinite Max Shield":{"note":"","data":["801124A3 00A0"],"options":null}},"5E547A4D-90E60795-C:45":{"Character Creation\\Max\\Accuracy":{"note":"","data":["81115A20 4170"],"options":null},"Character Creation\\Max\\Arm Str.":{"note":"","data":["81115A4C 4170"],"options":null},"Character Creation\\Max\\Bunting":{"note":"","data":["81115A38 4170"],"options":null},"Character Creation\\Max\\Clutch":{"note":"","data":["81115A54 4170"],"options":null},"Character Creation\\Max\\Contact":{"note":"","data":["81115A28 4170"],"options":null},"Character Creation\\Max\\Defense":{"note":"","data":["81115A48 4170"],"options":null},"Character Creation\\Max\\Power":{"note":"","data":["81115A2C 4170"],"options":null},"Character Creation\\Max\\Speed":{"note":"","data":["81115A44 4170"],"options":null},"Character Creation\\Max\\Stamina":{"note":"","data":["81115A24 4170"],"options":null},"Character Creation\\Max\\Streak":{"note":"","data":["81115A50 4170"],"options":null},"Character Creation\\Max\\VS LHB":{"note":"","data":["81115A3C 4170"],"options":null},"Character Creation\\Max\\VS LHP":{"note":"","data":["81115A30 4170"],"options":null},"Character Creation\\Max\\VS RHB":{"note":"","data":["81115A40 4170"],"options":null},"Character Creation\\Max\\VS RHP":{"note":"","data":["81115A34 4170"],"options":null},"Infinite\\Balls":{"note":"","data":["8006E4DF 0000"],"options":null},"Infinite\\Character Creation Points":{"note":"","data":["81103350 4170"],"options":null},"Infinite\\Outs":{"note":"","data":["8006E4E3 0000"],"options":null},"Infinite\\Pitch Type Creation Points":{"note":"","data":["811039BC 4170","811039C0 4170"],"options":null},"Infinite\\Strikes":{"note":"","data":["8006E4E1 0000"],"options":null}},"5F25B0EE-6227C1DB-C:45":{"Away Team\\Infinite Time Outs":{"note":"","data":["81135098 0700"],"options":null},"Away Team\\No Time Outs":{"note":"","data":["81135098 0000"],"options":null},"Home Team\\Infinite Time Outs":{"note":"","data":["811344D0 0700"],"options":null},"Home Team\\No Time Outs":{"note":"","data":["811344D0 0000"],"options":null},"Infinite Shot Clock":{"note":"","data":["811318F2 05A0"],"options":null},"Jump Shooting":{"note":"","data":["8017B7AD 0064"],"options":null},"Max Inside Scoring":{"note":"","data":["8017B7AC 0064"],"options":null},"Max\\3 Pointers":{"note":"","data":["8017B7AE 0064"],"options":null},"Max\\Blocking":{"note":"","data":["8017B7B2 0064"],"options":null},"Max\\Def. Awareness":{"note":"","data":["8017B7B3 0064"],"options":null},"Max\\Def. Rebounds":{"note":"","data":["8017B7B6 0064"],"options":null},"Max\\Dribbling":{"note":"","data":["8017B7BC 0064"],"options":null},"Max\\Dunking":{"note":"","data":["8017B7B0 0064"],"options":null},"Max\\Endurance":{"note":"","data":["8017B7BD 0064"],"options":null},"Max\\Free Throws":{"note":"","data":["8017B7AF 0064"],"options":null},"Max\\Jumping":{"note":"","data":["8017B7B7 0064"],"options":null},"Max\\Off. Awareness":{"note":"","data":["8017B7BA 0064"],"options":null},"Max\\Off. Rebounds":{"note":"","data":["8017B7B5 0064"],"options":null},"Max\\Passing":{"note":"","data":["8017B7B9 0064"],"options":null},"Max\\Quickness":{"note":"","data":["8017B7B4 0064"],"options":null},"Max\\Shooting Range":{"note":"","data":["8017B7BE 0064"],"options":null},"Max\\Speed":{"note":"","data":["8017B7BB 0064"],"options":null},"Max\\Stealing":{"note":"","data":["8017B7B1 0064"],"options":null},"Max\\Strength":{"note":"","data":["8017B7B8 0064"],"options":null}},"5F3F49C6-0DC714B0-C:50":{"Access All\\Bikes":{"note":"","data":["8107F6EE FFFF"],"options":null},"Access All\\Tracks":{"note":"","data":["8107F6F0 00FF","8107F6F2 FFFF"],"options":null},"Infinite\\Nitro":{"note":"","data":["810BA540 4296"],"options":null},"Infinite\\Nitro Always On":{"note":"","data":["810BA52C 0010"],"options":null},"Laps 2 Race":{"note":"","data":["800F36B8 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}}},"5F6A04E2-D4FA070D-C:53":{"Access All Levels":{"note":"","data":["8008A9D6 0001","8008A9EA 0001","8008AA12 0001","8008AA62 0001","8008AA76 0001","8008AA8A 0001","8008AA9E 0001","8008AAB2 0001","8008AAC6 0011","8008AADA 0021","8008AAEE 0001","8008AB16 0011","8008AB2A 0041","8008AB3E 0021","8008AB52 0081","8008AB66 0001","8008AB7A 0081","8008AB8E 0001","8008ABB6 0001","8008ABDE 0001","8008ABF2 0011","8008AC06 0021","8008AC56 0001","8008AF3A 0001","8008AF4E 0001","8008AF62 0001","8008AF76 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81094150 0063","81094152 0063","81094154 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A9297 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810866C2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810864C4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80094305 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A92B5 00??","800A92C5 00??","800A92D5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"5FD7CDA0-D9BB51AD-C:50":{"1 Lap To Race":{"note":"","data":["D01226C8 0000","801226C8 0009"],"options":null},"Access Everything":{"note":"\"Have All Characters,Cups,Courses,\u0026Boards\"","data":["810B3160 0100","810B3164 0F00"],"options":null},"Infinite Cash":{"note":"","data":["8112272A 03E7"],"options":null},"Infinite Tools Options":{"note":"","data":["801226D5 00??"],"options":{"Board":"06","Fan":"01","Ghost":"02","Mouse":"05","Pan":"03","Rock":"04"}},"Infinite Weapons\\Lucky Dip":{"note":"\"Lucky Dip is Infinite Usage Of What Ever You Get From Each Red Box\"","data":["801226D4 0003"],"options":null}},"60460680-305F0E72-C:50":{"Access All In-Game Cheats":{"note":"Pause Gameplay To Access","data":["81157E46 000F","81157E56 FFFF"],"options":null},"Access All Navigation Cards":{"note":"","data":["80157E9B 0005"],"options":null},"Access Secret Worlds":{"note":"","data":["81152946 0064"],"options":null},"Infinite Lives":{"note":"","data":["81157EAE 0063"],"options":null},"Max \u0026 Total Gold":{"note":"","data":["80157E4B 0063","80157E4F 0063"],"options":null}},"60C437E5-A2251EE3-C:50":{"Character Select":{"note":"","data":["80075F52 00??"],"options":{"Big Head.":"04","Flame Grilled":"08","Normal":"00","Play as Deadwing.":"01"}},"Have All\\Cheats: Book of Shadows":{"note":"","data":["81075F4E 0FFF"],"options":null},"Have All\\Dark Souls Collected":{"note":"","data":["80075F49 0078"],"options":null},"Have All\\Gads \u0026 The Poign":{"note":"","data":["80030E57 000F"],"options":null},"Have All\\Items":{"note":"Youll not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50001B20 0000","80030613 000B"],"options":null},"Have All\\L-Eclipser":{"note":"You will not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50000320 0000","80030973 000B"],"options":null},"Have All\\Levels Unlocked":{"note":"","data":["5000101C 0000","80030A0E 0001"],"options":null},"Infinite\\0.9mm Ammo":{"note":"","data":["81075B3A 0190"],"options":null},"Infinite\\Accumulators":{"note":"","data":["800306D7 0005"],"options":null},"Infinite\\Cadeaux'":{"note":"","data":["81075B36 03E7"],"options":null},"Infinite\\Max Health/Air/Shadow Charge \u0026 Voodoo Power":{"note":"","data":["50000604 0000","81075B16 2710"],"options":null},"Infinite\\Prisms":{"note":"","data":["80030957 0003"],"options":null},"Infinite\\Retractors":{"note":"","data":["800308B7 0003"],"options":null},"Infinite\\Shotgun Shells":{"note":"","data":["80075B2F 0063"],"options":null},"Infinite\\Violator Ammo":{"note":"","data":["81075B32 03E7"],"options":null},"Press L To Levitate":{"note":"Press the L-Button to rise and let go and press again in stages to come back down.","data":["D0059097 0020","80075578 0041"],"options":null},"[Ammo Always Displayed On Screen]":{"note":"","data":["50000408 0000","80075ACD 0007"],"options":null},"[Health Meter Displayed On Screen]":{"note":"","data":["81075B10 0000","81075B12 00FF"],"options":null}},"60D5E10B-8BEDED46-C:50":{"All Masks":{"note":"Press GS To Activate All Masks","data":["891F1110 8780"],"options":null},"Have All\\Crates":{"note":"","data":["810C6FE8 7FFF","50000602 0000","810C6FEA FFFF","800C6FF2 00FF"],"options":null},"Have All\\Yellow Lums":{"note":"","data":["50006401 0000","800C6FF8 00FF","50001901 0000","800C6FAD 00FF","811F1072 0005","50005702 0000","811F1078 FFFF"],"options":null},"Infinite\\Max Health":{"note":"","data":["811BC54C 001E"],"options":null},"Infinite\\Oxygen":{"note":"","data":["810F4A80 4396"],"options":null},"Open Options\\Open all cages":{"note":"","data":["801F1032 0050","50000602 0000","811F10E0 FFFF"],"options":null},"Open Options\\levels \u0026 Map":{"note":"","data":["50000801 0000","801F1101 00FF"],"options":null}},"61D116B0-FA24D60C-C:50":{"Access The Rock Alcatraz bonus level":{"note":"Press C-right, on any level, at the track selection screen","data":["D00F4174 0002","80100120 0006"],"options":null},"All\\Keys \u0026 Cars":{"note":"","data":["50000E16 0000","810CAD52 FFFF"],"options":null},"All\\Keys \u0026 Cars Circuits":{"note":"","data":["8105696E FFFF","8105699A FFFF","50000404 0000","81056910 FFFF"],"options":null},"Always 1st":{"note":"","data":["80101409 0000"],"options":null},"Automatic Transmission":{"note":"","data":["800C8100 0001"],"options":null},"Big Back Wheels":{"note":"","data":["800DA03C 0002"],"options":null},"Big Front Wheels":{"note":"","data":["800DA02C 0002"],"options":null},"Difficulty Very Easy":{"note":"","data":["810D9F7A 0002"],"options":null},"Gravity Modifier":{"note":"","data":["800F3E61 00??"],"options":{"Ballon \u0026 Two Weights":"00","One Weight":"01","Two Weights":"02"}},"Laps To Race":{"note":"","data":["800E7411 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Max Race Points":{"note":"","data":["810DACCA 03E7"],"options":null},"No\\Auto Abort":{"note":"","data":["800F4140 0001"],"options":null},"No\\Car Collisions":{"note":"","data":["800F4120 0001"],"options":null},"Resurrect In Place":{"note":"","data":["800F4150 0001"],"options":null},"Stop Timer":{"note":"","data":["800F4160 0001"],"options":null}},"61F5B152-046122AB-C:4A":{"Always 1st":{"note":"","data":["8011C25D 0001"],"options":null},"Have All Characters":{"note":"","data":["801170E2 007D","811170E4 FFFF"],"options":null},"Have All Tracks Completed":{"note":"","data":["811170DA FFFF","811170DC 3FFF","811170DE 3FFF","811170E0 3FFF","811170E2 00FF"],"options":null},"No Damage":{"note":"","data":["800A8047 0001"],"options":null},"Unlock All Tracks":{"note":"","data":["801170D8 00FF","801170D9 00FF","801170DA 00FF","801170DB 00FF","811170D8 FFFF"],"options":null}},"62269B3D-FE11B1E8-C:45":{"Always Place 1st":{"note":"","data":["8131C70E 0000"],"options":null},"Extra Cars \u0026 Tracks":{"note":"","data":["50000201 0000","8032690C 00FF","8032690F 00FF","813243CC FFFF"],"options":null},"Have 1-6 Level Points":{"note":"","data":["50000602 0000","8032685F 0064"],"options":null},"Only Race 1 Lap Championship Mode":{"note":"","data":["8031EBDB 0002"],"options":null}},"62E957D0-7FC15A5D-C:50":{"All Golf Courses Unlocked":{"note":"","data":["80130FED 0001"],"options":null},"Always On 1st Stroke":{"note":"","data":["801B74F3 0000"],"options":null},"Infinite Power Shots":{"note":"","data":["801B74F8 0042"],"options":null},"Unlock all Characters and Birdy Badges":{"note":"Unlocks Metal Mario, Maple, Luigi, Sonny, Wario, Harry, Bowser, Yoshi, Mario and DK","data":["50006C01 0000","801304A4 0001","50000901 0000","80130518 0001","50000901 0000","80130521 0001"],"options":null},"Weather Select":{"note":"","data":["800BACAB 00??"],"options":{"Always Rains":"01","Never Rains":"00"}},"Wind Speed Select":{"note":"","data":["800BACA1 00??"],"options":{"0 MPH":"00","20 MPH":"14"}}},"62F6BE95-F102D6D6-C:50":{"99 Accuracy":{"note":"","data":["80131530 0063"],"options":null},"99 Bonus":{"note":"","data":["80131537 0063"],"options":null},"All Boss Attack levels unlocked":{"note":"Unlocks all planes in death match","data":["80355701 003F"],"options":null},"Always Have\\F-15J Eagle":{"note":"","data":["8027D69C 0010"],"options":null},"Always Have\\X-29A A.T.D.":{"note":"","data":["8027D69D 0020"],"options":null},"Extra Planes":{"note":"","data":["8127D69C FFFF"],"options":null},"F-15J Eagle \u0026 X-29A A.T.D. planes unlocked":{"note":"","data":["8035575C 00??"],"options":{"Both of the above planes":"3F","F-15J Eagle":"10","X-29A A.T.D.":"20"}},"Gun Select":{"note":"","data":["8027E9D3 00??"],"options":{"22mm":"0B","22mm BB Shot":"0A","Air Mines":"02","Chaff":"00","Fire":"14","Fire Arrow":"21","Fire Wave":"17","Fireball":"0D","Hunai Shot":"0C","Jammings":"01","Mahibishi":"03","Ninja Glitch":"16","Ninjabeam":"28","Phoenix":"1F","Rocket":"1E","Sabre":"0E","Star":"20","Tomahawk":"15"}},"Infinite\\99 Lives":{"note":"","data":["80355748 0063"],"options":null},"Infinite\\Armor":{"note":"","data":["8127D9A4 44A0","8127D9A8 44A0"],"options":null},"Infinite\\Chaffs":{"note":"","data":["8027E9C7 000A"],"options":null},"Infinite\\Gun":{"note":"","data":["8027EAC0 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8027D9A5 00C8","8027D9A9 00C8"],"options":null},"Infinite\\Special Weapons":{"note":"","data":["8027EE82 0002"],"options":null},"Stage Select screen unlocked":{"note":"Hold L + R at the Game Mode screen and it will unlock every single level in the game; from Tokyo to Space. Do not hold L + R on any other screen, as this may cause game to freeze","data":["D0281691 0030","8027D5C0 000A","D0281691 0030","8027D5DA 000A"],"options":null}},"630AA37D-896BD7DB-C:50":{"Have All\\Cars":{"note":"","data":["50000C01 0000","8009B7D8 0001"],"options":null},"Have All\\Difficulty Levels":{"note":"","data":["8009B7D7 0003"],"options":null},"Have All\\Tracks":{"note":"","data":["50000C01 0000","80099498 0001"],"options":null},"Max\\Checkpoint Bonus":{"note":"","data":["812E013E 03E7"],"options":null},"Max\\Collisions Points":{"note":"","data":["812E013A 03E7"],"options":null},"Max\\Points Aid":{"note":"","data":["8112A3CE 03E7"],"options":null},"Solo Mode\\Infinite Health\\Alpine Ridge":{"note":"","data":["D02C5224 0080","802C5233 00E1"],"options":null},"Solo Mode\\Infinite Health\\Bayou Run":{"note":"","data":["D029137C 0080","8029138B 00E1"],"options":null},"Solo Mode\\Infinite Health\\Destruction Junction":{"note":"","data":["D02A5EB0 0080","802A5EBF 00E1"],"options":null},"Solo Mode\\Infinite Health\\Metro Challenge":{"note":"","data":["D02F9018 0080","802F9027 00E1"],"options":null},"Solo Mode\\Infinite Health\\Midnyte Rumble":{"note":"","data":["D0317C0B 0080","80317C1A 00E1"],"options":null},"Solo Mode\\Infinite Health\\Seascape Sprint":{"note":"","data":["D02E0124 0080","802E0133 00E1"],"options":null},"Solo Mode\\Infinite Health\\Sunset Canyon":{"note":"","data":["D030EF68 0080","8030EF77 00E1"],"options":null},"Solo Mode\\Infinite Health\\Terminal Impact":{"note":"","data":["D02C0FA3 0080","802C0FB2 00E1"],"options":null}},"635A2BFF-8B022326-C:45":{"16:9 Widescreen":{"note":"Menu Misalignments. For 16:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81325034 3C07","81325036 3FE3","8127D6A0 1000","8127D6D4 1000"],"options":null},"21:9 Widescreen":{"note":"Menu Misalignments. For 21:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81325034 3C07","81325036 4018","8127D6A0 1000","8127D6D4 1000"],"options":null},"Don't Hurt Mario\\Falling":{"note":"","data":["8033B22C 00E8","8133B178 FFFF"],"options":null},"Don't Hurt Mario\\Monsters":{"note":"","data":["A033B197 0001"],"options":null},"Funny Mario Options\\Mario Walks On Lava":{"note":"","data":["81250900 1000"],"options":null},"Funny Mario Options\\Mario Walks On Sand":{"note":"","data":["81255490 1000","8125572C 1000","8125572E 0031"],"options":null},"Funny Mario Options\\Mario Walks On Water":{"note":"","data":["81381764 0800","81381766 0024","81000090 3C04","81000092 8034","81000094 8484","81000096 B1E6","81000098 4484","8100009A 3000","810000A0 4680","810000A2 3120","810000A4 4604","810000A6 903C","810000AC 4500","810000AE 0002","810000B4 4600","810000B6 2486","810000B8 080E","810000BA 05DB","810000BC E712"],"options":null},"Funny Mario Options\\Mario's Cap\\Off \u0026 in His Hand":{"note":"Here you can Choose Options with Mario with His Cap off \u0026 in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["8033B177 00??"],"options":{"Cap In Hand":"20","Flying Mario Cap In Hand":"28","Invisible Mario Cap In Hand":"22","Invisible Metal Mario Cap In Hand":"26","Metal Mario Cap In Hand":"24"}},"Funny Mario Options\\Mario's Cap\\On \u0026 An Extra in His Hand":{"note":"Here you can Choose Options with Mario with His Cap on \u0026 An Extra in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["8033B177 00??"],"options":{"Cap In Hand":"30","Flying Mario Cap In Hand":"38","Invisible Mario Cap In Hand":"32","Invisible Metal Mario Cap In Hand":"36","Metal Mario Cap In Hand":"34"}},"Have\\Level Select":{"note":"","data":["A032D58C 0001"],"options":null},"Have\\Turbo Running Speed":{"note":"","data":["8033B1C3 00FF"],"options":null},"Infinite\\Energy \u0026 Breath":{"note":"","data":["8033B21E 0008"],"options":null},"Infinite\\Lives":{"note":"","data":["8033B21D 0064"],"options":null},"Level Select":{"note":"Select a Level. Jump Into a Painting. Press A at the Stars Collected Screen. As Stats are fading hold L, and you'll jump to the level you've selected.","data":["D033AFA1 0020","A032DDF9 00??"],"options":{"Big Boo's Haunt":"04","Bob omb Battlefield":"09","Bowser In The Dark World":"11","Bowser In The Dark World Boss":"1E","Bowser In The Fire Sea":"13","Bowser In The Fire Sea Boss":"21","Bowser In The Sky":"15","Bowser In The Sky Boss":"22","Castle Courtyard":"1A","Cavern Of The Metal Cap":"1C","Cool Cool Mountain":"05","Dire Dire Docks":"17","Hazy Maze Cave":"07","Intro":"01","Jolly Roger Bay":"0C","Lethal Lava Land":"16","Mushroom Castle":"06","Mushroom Castle Field":"10","Rainbow Ride":"0F","Shifting Sand Land":"08","Snowman's Land":"0A","Tall Tall Mountain":"24","The End":"19","The Princess's Secret Slide":"1B","The Secret Aquarium":"14","Tick tock Clock":"0E","Tiny Huge World":"0D","Tower Of The Wing Cap":"1D","Vanish Cap Under The Moat":"12","Wet Dry World":"0B","Whomp's Fortress":"18","Wing Mario Over The Rainbow":"1F"}},"Mario's Cap\\Off Options":{"note":"Here you can Choose Options with Mario without His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["8033B177 00??"],"options":{"Flying Mario":"08","Invisible Flying Mario":"0A","Invisible Mario":"02","Invisible Metal Flying Mario":"0F","Mario No Cap":"01","Metal Flying Mario":"0D","Metal Mario":"04"}},"Mario's Cap\\On Options":{"note":"Here you can Choose Options with Mario with His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["8033B177 00??"],"options":{"Flying Mario":"19","Invisible Mario":"12","Invisible Metal Mario":"16","Metal Mario":"15"}},"Press GS For 255 Coins":{"note":"","data":["8933B218 00FF"],"options":null},"Press L To Levitate":{"note":"Press L to levitate \u0026 Let go to land","data":["D033AFA1 0020","8133B1BC 4220","D033AFA1 0020","8133B17C 0300","D033AFA1 0020","8133B17E 0880"],"options":null},"[Slot A Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80207723 0001","8020770B 00C7","50001101 0000","8020770C 00FF"],"options":null},"[Slot A Codes]\\Have All\\Key doors unlocked (and mote empty)":{"note":"","data":["8020770A 007E"],"options":null},"[Slot A Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80207725 0064"],"options":null},"[Slot B Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80207793 0001","8020777B 00C7","50001101 0000","8020777C 00FF"],"options":null},"[Slot B Codes]\\Have All\\Key doors unlocked (and mote empty)":{"note":"","data":["8020777A 007E"],"options":null},"[Slot B Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80207795 0064"],"options":null},"[Slot C Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80207803 0001","802077EB 00C7","50001101 0000","802077EC 00FF"],"options":null},"[Slot C Codes]\\Have All\\Key doors unlocked (and mote empty)":{"note":"","data":["802077EA 007E"],"options":null},"[Slot C Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80207805 0064"],"options":null},"[Slot D Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80207873 0001","8020785B 00C7","50001101 0000","8020785C 00FF"],"options":null},"[Slot D Codes]\\Have All\\Key doors unlocked (and mote empty)":{"note":"","data":["8020785A 007E"],"options":null},"[Slot D Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80207875 0064"],"options":null}},"636E6B19-E57DDC5F-C:50":{"Access\\All Cars":{"note":"","data":["8015EC13 003F"],"options":null},"Access\\All Tracks":{"note":"","data":["8015EC0E 0070"],"options":null},"Access\\Championship,World,Expert":{"note":"","data":["8015EC1C 0001"],"options":null},"Access\\Expert Times":{"note":"","data":["8015EC10 0031"],"options":null},"Access\\In-Game Cheat Menu":{"note":"On The Title Screen, Hold Z Button \u0026 Push L Button","data":["811CFE09 00FF","811F31FF 04FF","811CE165 FF03"],"options":null}},"63E7391C-E6CCEA33-C:45":{"Always Have Weapon Options\\Player 1":{"note":"","data":["810E2994 00??"],"options":{"Anvil":"79","Bee hive":"6D","Bird bath":"04","Blue Swordfish":"63","Bouy":"29","Broom":"08","Chair":"0B","Champagne":"0C","Chicken":"0E","Club":"03","Crate":"0F","Deck chair":"14","Egg":"16","Fish":"1A","Frying Pan":"1E","Gardeners Fork":"1D","Mallet":"2A","Milk Bottle":"2D","Mooses head":"78","NCube knife":"09","NCube missiles":"0A","Plank":"39","Rolling Pin":"41","Saucepan":"64","Spade":"46","Spanner":"4E","Stick":"55","Stool":"6B","Tennis Racket":"48","Watermelon":"2B","Wooden Chair":"1F","Wooden Spoon":"65"}},"Always Have Weapon Options\\Player 2":{"note":"","data":["810E2C6C 00??"],"options":{"Anvil":"79","Bee hive":"6D","Bird bath":"04","Blue Swordfish":"63","Bouy":"29","Broom":"08","Chair":"0B","Champagne":"0C","Chicken":"0E","Club":"03","Crate":"0F","Deck chair":"14","Egg":"16","Fish":"1A","Frying Pan":"1E","Gardeners Fork":"1D","Mallet":"2A","Milk Bottle":"2D","Mooses head":"78","NCube knife":"09","NCube missiles":"0A","Plank":"39","Rolling Pin":"41","Saucepan":"64","Spade":"46","Spanner":"4E","Stick":"55","Stool":"6B","Tennis Racket":"48","Watermelon":"2B","Wooden Chair":"1F","Wooden Spoon":"65"}},"Infinite Health\\Player 1":{"note":"","data":["810E279C 42C8"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["810E2A74 42C8"],"options":null},"Infinite Time":{"note":"","data":["810FED4C 42F0"],"options":null},"One Hit To Kill\\Player 1":{"note":"","data":["810E2A74 3F80"],"options":null},"One Hit To Kill\\Player 2":{"note":"","data":["810E2D4C 3F80"],"options":null},"Open All Versus Arenas":{"note":"","data":["810E44F4 03FF"],"options":null},"Unlock All Characters":{"note":"This Gives you all Characters to choose from plus fixes A freeze on the Charecter Select Menu by having it on","data":["810E44F2 00FF"],"options":null}},"641D3A7F-86820466-C:50":{"Difficulty Select Options":{"note":"","data":["811C5C1C ????"],"options":{"Hard":"0101","Normal":"0100","Ultimate":"0102"}},"Have All\\Keys":{"note":"","data":["50000410 0000","80181B20 0063","50000410 0000","80181B28 0063"],"options":null},"Have All\\Moves":{"note":"","data":["50005306 0000","811876D0 0100","50005306 0000","811876D2 00FF"],"options":null},"Have All\\Moves At Skill Level 250":{"note":"","data":["50000E06 0000","8018C953 00FA","50001306 0000","8018C9AD 00FA","50003006 0000","8018CA37 00FA"],"options":null},"Infinite\\Max Body Stats":{"note":"","data":["81181638 270F","81181678 0063","50000C02 0000","81181640 270F","50000502 0000","81181670 270F","50000602 0000","81181698 270F","50000602 0000","811816A6 270F"],"options":null},"Infinite\\Max Health":{"note":"","data":["81181630 270F","81181632 270F"],"options":null},"Infinite\\Refresh Items":{"note":"","data":["50000E10 0000","801819F8 0063","50000D10 0000","80181A00 0063"],"options":null},"Infinite\\Weapons \u0026 Items":{"note":"","data":["50000610 0000","80181AD0 0063","50000610 0000","80181AD8 0063"],"options":null},"Level 999":{"note":"","data":["81181678 270F"],"options":null},"Level and Battle Select":{"note":"The level and battle select screen can be accessed by pressing A at the main menu","data":["801D74A4 0005"],"options":null},"Play As":{"note":"","data":["811C5CF6 00??"],"options":{"Alien":"03","President Weller":"02","The real Mr Diaz Baddie":"01"}},"Press L To Levitate":{"note":"","data":["D00CCE25 0020","812558F0 3FCB"],"options":null},"[Have Full Power and Max Combos]":{"note":"Gives you full power and Max Combos in fights","data":["811C6052 03FC"],"options":null},"[Unlock all Code Key Doors]":{"note":"Code Key always Re-newed and Matching all Doors","data":["801C5C16 00FF"],"options":null}},"6420535A-50028062-C:45":{"Access All Levels":{"note":"","data":["8020850E 00FF","80208510 00FF"],"options":null},"Extended Tongue":{"note":"","data":["8133176E FFFF"],"options":null},"Have 99 Crowns":{"note":"","data":["80251767 0063"],"options":null},"Have All Levels Completed":{"note":"","data":["80208512 0019","80208513 0019","80208514 0015","80208515 0018","80208516 0017","80208517 0017"],"options":null},"Infinite Health":{"note":"","data":["80174CF3 000A"],"options":null},"Level Select":{"note":"","data":["8029087B 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06"}}},"64F1B7CA-71A23755-C:50":{"Have\\All Items":{"note":"","data":["50000501 0000","80389C4E 0001","50000301 0000","80389C55 0001","80389C5E 0001","80389C5F 0001","80389C61 0001","50000E01 0000","80389C64 0001"],"options":null},"Have\\Exp Points":{"note":"","data":["80389C4D 0063"],"options":null},"Have\\Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C33 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C49 0001","81389C4A 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C42 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C4D 0064"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C4C 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the GS button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C94 ????","89389C91 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CF1 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C8C 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C8C 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C41 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C46 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"650EFA96-30DDF9A7-C:50":{"Always Place 1st\\Player 1":{"note":"","data":["801BFF4F 0000"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801C020E 00FF"],"options":null},"Lap Timer Below 0'00'10\\Player 1":{"note":"","data":["811C00E6 0000"],"options":null},"Lap Timer Below 0'00'10\\Player 2":{"note":"","data":["811C045E 0000"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801C0077 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801C069A 0005","801C093A 0005"],"options":null},"Misses Don't Count\\Player 1":{"note":"","data":["801C007F 0000"],"options":null},"Misses Don't Count\\Player 2":{"note":"","data":["811C03F6 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800D8003 0007"],"options":null},"Set\\Speed Size":{"note":"","data":["801C0077 00??"],"options":{"Fast":"0F","Medium":"0A","Slow":"01"}},"Set\\Wave Size":{"note":"","data":["800E6B90 00??"],"options":{"Medium":"19","Oh My God":"FF","Rough":"64","Smooth":"00"}}},"65234451-EBD3346F-C:4A":{"Drive Through Anything\\Ballista":{"note":"","data":["803F8BF8 0001"],"options":null},"Drive Through Anything\\Dump Truck":{"note":"","data":["813EEBE8 0101"],"options":null},"Drive Through Anything\\Police Car":{"note":"","data":["813F8FD8 0101"],"options":null},"Drive Through Anything\\Red Car":{"note":"","data":["813FC658 0101"],"options":null},"Drive Through Anything\\Red, White, \u0026 Blue Car":{"note":"","data":["813EEFC8 0101"],"options":null},"Drive Through Anything\\Skyfall":{"note":"","data":["813EE438 0101"],"options":null},"Drive Through Anything\\Van":{"note":"","data":["813F93A8 0101"],"options":null},"Infinite\\Boosts Buggy Vehicle":{"note":"","data":["803EE491 0064"],"options":null},"Infinite\\Hydraulics Sidesweeper":{"note":"","data":["803EDCE1 0063"],"options":null},"Infinite\\Missiles Motor Bike":{"note":"","data":["803F8C53 0063"],"options":null},"J-Bomb Floats Through Anything":{"note":"","data":["803F7C5A 0001"],"options":null},"Rapid Fire\\Ballista":{"note":"","data":["803F8C5D 0000"],"options":null},"Rapid Fire\\Sideswipe":{"note":"","data":["803EDCE6 0000"],"options":null},"Sidesweep\\Can Go Through Anything":{"note":"","data":["803EDCE2 FFFF"],"options":null},"Sideswipe\\Can Go In Water":{"note":"","data":["803EDCE2 0063"],"options":null}},"65EEE53A-ED7D733C-C:45":{"Have All Spirits":{"note":"","data":["8010F51E 0007"],"options":null},"Have hammer\\Level 1":{"note":"Do not use with other level hammer cheats","data":["8010F291 0000"],"options":null},"Have hammer\\Level 2":{"note":"Do not use with other level hammer cheats","data":["8010F291 0001"],"options":null},"Have hammer\\Level 3":{"note":"Do not use with other level hammer cheats","data":["8010F291 0002"],"options":null},"Have jump boots\\Level 1":{"note":"Do not use with other level jump boots cheats","data":["8010F290 0000"],"options":null},"Have jump boots\\Level 2":{"note":"Do not use with other level jump boots cheats","data":["8010F290 0001"],"options":null},"Have jump boots\\Level 3":{"note":"Do not use with other level jump boots cheats","data":["8010F290 0002"],"options":null},"Have member\\Bombette":{"note":"","data":["8010F2BC 0001"],"options":null},"Have member\\Bow":{"note":"","data":["8010F2EC 0001"],"options":null},"Have member\\Goomario":{"note":"","data":["8010F2AC 0001"],"options":null},"Have member\\Kooper":{"note":"","data":["8010F2B4 0001"],"options":null},"Have member\\Lakitu":{"note":"","data":["8010F2E4 0001"],"options":null},"Have member\\Parrakary":{"note":"","data":["8010F2C4 0001"],"options":null},"Have member\\Sushie":{"note":"","data":["8010F2DC 0001"],"options":null},"Have member\\Watt":{"note":"","data":["8010F2D4 0001"],"options":null},"Have\\Attack item":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Dusty Hammer":"0086","Fire Flower":"0800","Pebble":"0085","Shooting Star":"0083","Snowman Doll":"0081","Thunder Bolt":"0084","Thunder Rage":"0082"}},"Have\\Defense item":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Mushroom":"008A","Repel Gel":"0097","Stone Cap":"0088","Volt Shroom":"008B"}},"Have\\Enemy Stats item":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Dizzy Dial":"009A","Fright Jar":"0098","POW Block":"0090","Sleep Sheep":"008F","Stop Watch":"0092"}},"Have\\Recovery Items Option 1":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Apple":"0094","Apple Pie":"00B1","Big Cookie":"00C0","Bland Meal":"00BD","Blue Berry":"009E","Boiled Egg":"00D8","Bubble Berry":"00A1","Cake Mix":"00AA","Coco Pop":"00CF","Deluxe Feast":"00BE","Dried Fruit":"00A8","Dried Pasta":"00A7","Dried Shroom":"008D","Egg":"005F","Electro Pop":"00CC","Fire Pop":"00CD","Fried Egg":"00C9","Fried Shroom":"00B6","Frozen Fries":"00D4","Goomnut":"00A5","Healthy Juice":"00BC","Honey Candy":"00CB","Honey Shroom":"00CA","Honey Super":"00C4"}},"Have\\Recovery Items Option 2":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Honey Syrup":"00A4","Honey Ultra":"00B2","Hot Shroom":"00B9","Iced Potato":"00AF","Jammin' Jelly":"00A2","Jelly Pop":"00D1","Jelly Shroom":"00DA","Jelly Super":"00C6","Jelly Ultra":"00B4","KooPasta":"00B5","Kooky Cookie":"00D3","Koopa Leaf":"00A6","Koopa Tea":"00C3","Lemon":"009C","Lemon Candy":"00D0","Life Shroom":"0095","Lime":"009D","Lime Candy":"0C0E","Maple Shroom":"00D7","Maple Super":"00C5","Maple Syrup":"00A3","Maple Ultra":"00B3","Melon":"00AD","Mistake":"00C2","Mushroom":"008A"}},"Have\\Recovery Items Option 3":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Nutty Cake":"00D6","Potato Salad":"00D5","Red Berry":"009F","Shroom Cake":"00B7","Shroom Steak":"00B8","Spaghetti":"00C7","Special Shake":"00BF","Spicy Soup":"00B0","Stinky Herb":"00AE","Strange Leaf":"00A9","Super Shroom":"008C","Super Soda":"009B","Sweet Shroom":"00BA","Tasty Tonic":"0089","Ultra Shroom":"008E","Whacka's Bump":"0093","Yellow Berry":"00A0","Yoshi Cookie":"00D9","Yummy Meal":"00BB"}},"Have\\Special Items Option 1":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Bucket":"0031","Calculator":"0030","Cook Book":"0029","Crystal Berry":"001E","Diamond Stone":"0017","Dictonary":"0024","Diploma":"000E","First Degree Card":"000A","Fourth Degree Card":"000D","Frying Pan":"0023","Hammer":"0004","Jade Raven":"002A","Kooper's Shell":"0019","Magical Bean":"0058","Magical Seed Brown-Orange":"002E","Magical Seed Green":"002D","Magical Seed Red":"002B","Mailbag":"0069","Melody":"0068","Scarf":"0032","Second Degree Card":"000B","Star Stone":"006C","Third Degree Card":"000C","Toy Train":"0021","Volcano Vase":"005B"}},"Have\\Special Items Options 1":{"note":"Only use One Have item Option at one time","data":["8110F444 ????"],"options":{"Artifact":"0053","Boo's Portrait":"001D","Bucket":"0131","Diploma":"010E","Dolly":"0156","Fertile Soil":"0159","Fortress Key":"0110","Golden Jar":"0118","Jade Raven":"012A","Jump":"0101","Kooper's Shell":"0119","Letter":"0150","Lunar Stone":"0115","Lyrics":"0067","Magical Bean":"0158","Magical Seed Blue":"012D","Magical Seed Purple":"012C","Miracle Water":"015A","Mystery Note":"0125","Record":"0122","Ultra Stone":"010F","Volcano Vase":"015B","Water Stone":"0157"}},"Infinite\\FP":{"note":"","data":["8010F295 0063","8010F296 0063"],"options":null},"Infinite\\HP":{"note":"","data":["8010F292 0063","8010F293 0063"],"options":null},"Infinite\\Star Power":{"note":"","data":["8010F520 0007","8010F521 0007"],"options":null},"Lots Of Coins":{"note":"","data":["8110F29C 03E7"],"options":null},"Max\\Badge Points":{"note":"","data":["8010F298 00??"],"options":{"127 Badge Points":"7F","60 Badge Points":"3C"}},"Max\\Level":{"note":"","data":["8010F299 0063"],"options":null},"Max\\Star Pieces":{"note":"","data":["8010F29F 0063"],"options":null},"Max\\Star Points":{"note":"","data":["8010F2A0 0063"],"options":null},"No Star Points (0)":{"note":"If emulator hangs at level up, enable this cheat and don't disable it whatsoever!","data":["8010F2A0 0000"],"options":null},"Upgrade member\\Level 1\\Bombette":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2BD 0001"],"options":null},"Upgrade member\\Level 1\\Bow":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2ED 0001"],"options":null},"Upgrade member\\Level 1\\Goomario":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2AD 0001"],"options":null},"Upgrade member\\Level 1\\Kooper":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2B5 0001"],"options":null},"Upgrade member\\Level 1\\Lakitu":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2E5 0001"],"options":null},"Upgrade member\\Level 1\\Parrakary":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2C5 0001"],"options":null},"Upgrade member\\Level 1\\Sushie":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2DD 0001"],"options":null},"Upgrade member\\Level 1\\Watt":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2D5 0001"],"options":null},"Upgrade member\\Level 2\\Bombette":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2BD 0002"],"options":null},"Upgrade member\\Level 2\\Bow":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2ED 0002"],"options":null},"Upgrade member\\Level 2\\Goomario":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2AD 0002"],"options":null},"Upgrade member\\Level 2\\Kooper":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2B5 0002"],"options":null},"Upgrade member\\Level 2\\Lakitu":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2E5 0002"],"options":null},"Upgrade member\\Level 2\\Parrakary":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2C5 0002"],"options":null},"Upgrade member\\Level 2\\Sushie":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2DD 0002"],"options":null},"Upgrade member\\Level 2\\Watt":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2D5 0002"],"options":null},"Widescreen":{"note":"","data":["8102D574 2407","8102D576 018A"],"options":null}},"661B45F3-9ED6266D-C:50":{"Anger metre always full":{"note":"","data":["800D9B38 00FF","800D9826 00FF"],"options":null},"Crunched Players":{"note":"","data":["800DFC2D 003F"],"options":null},"Difficulty Mod":{"note":"","data":["801247F9 00??"],"options":{"Easy":"01","Hard":"03","Medium":"02","Very Easy":"00"}},"Extra Teams":{"note":"","data":["80115A0C 0001"],"options":null},"Get In Fights Constantly":{"note":"","data":["800D3926 0020"],"options":null},"Max Score\\Team 1":{"note":"","data":["80120221 00??"],"options":{"30 Points":"1E","50 Points":"23","75 Points":"4B","99 Points":"63","Zero Points":"00"}},"Max Score\\Team 2":{"note":"","data":["80123731 00??"],"options":{"30 Points":"1E","50 Points":"23","75 Points":"4B","99 Points":"63","Zero Points":"00"}},"Players\\Head Size":{"note":"","data":["8111CBEC ????"],"options":{"Normal Size":"3F80","Very Large":"4080","Very Small":"3F00"}},"Players\\Height Size":{"note":"","data":["81124848 ????"],"options":{"Giants":"4080","Large":"3FC0","Midgets":"3F00","Normal Size":"3F80"}}},"664BA3D4-678A80B7-C:45":{"Enable All Courses":{"note":"","data":["81130CEE FFFF"],"options":null},"Have All Characters":{"note":"","data":["50000E02 0001","810C28E4 0000"],"options":null},"Max Gold Mario Badges Player 1":{"note":"","data":["800C545B 0063"],"options":null},"No Wind":{"note":"","data":["810BA9F1 0000","800BA9F3 0000"],"options":null},"Unlimited\\Power Hits\\Player 1":{"note":"","data":["801B71F8 0004"],"options":null},"Unlimited\\Power Hits\\Player 2":{"note":"","data":["801B72B0 0004"],"options":null},"Unlimited\\Power Hits\\Player 3":{"note":"","data":["801B7368 0004"],"options":null},"Unlimited\\Power Hits\\Player 4":{"note":"","data":["801B7420 0004"],"options":null},"Widescreen":{"note":"","data":["8102F29A 3FE3","D12020F6 3FAA","812020F6 3FE3"],"options":null},"Zero Strokes Taken":{"note":"","data":["801B71F3 0000"],"options":null}},"66572080-28E348E1-C:4A":{"Infinite Hp":{"note":"","data":["802016A7 0000"],"options":null},"Infinite Sp":{"note":"","data":["802016AB 005A"],"options":null},"Infinite Time":{"note":"","data":["80260BDE 0000"],"options":null},"Play As":{"note":"","data":["801B9D5C 00??"],"options":{"1st BOSS":"08","DAITARN 3":"02","DANCOUGAR":"03","DUNBINE":"05","FINAL BOSS":"00","R1":"01","SHINING GUNDAM":"04","VOLTES V":"07","WALKER GALLIER":"06"}},"Player 2 Health Mod":{"note":"","data":["80206AF7 00??"],"options":{"Infinite Health":"00","Instant Death":"C8"}}},"665FD963-B5CC6612-C:44":{"Diffuculty Modifier":{"note":"","data":["8011956F 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Gems":{"note":"","data":["80128E97 00FF"],"options":null},"Have\\All Level Keys":{"note":"","data":["50000604 0000","80128D73 0007","80128D8B 001F","80128DAB 00FF"],"options":null},"Have\\All Weapons":{"note":"","data":["50000B04 0000","80128D47 0001","80128D33 0001"],"options":null},"Have\\Backpack":{"note":"","data":["80128C7B 0001","80128CBB 0001"],"options":null},"Infinite\\Air":{"note":"","data":["80129070 0063","801E862A 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128CF3 00FF","80128D03 00FF","80128D0F 00FF","50000504 0000","80128D13 00FF","80128E9B 00FF","80128E97 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128D26 5B23","80128D67 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C15C4 1E61","812A2534 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["80128E9B 00FF"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114F85A F803","81128CDE 0003","81128CE2 0003","81128CE6 0003","81128CEA 0003","81128CEE 0003","81128CF2 0003","81128CF6 0005"],"options":null}},"66751A57-54A29D6E-C:4A":{"Boots Of Speed Select\\Player 1":{"note":"","data":["8113D5E8 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113D784 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113D920 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113DABC ????"],"options":{"Off":"0000","On":"03FF"}},"Enable Cheat Menu":{"note":"","data":["801370C7 0005","81136FEA FFFF"],"options":null},"Have All\\Armour":{"note":"","data":["8013D541 0019","8013D545 0014","8013D549 0014","8013D54D 0014"],"options":null},"Have All\\Items And Artifacts":{"note":"","data":["8013D551 0001","8013D553 00FF","8013D555 0002","8013D557 00FF","8013D559 0003","8013D55B 00FF","8013D55D 0004","8013D55F 00FF","8013D561 0005","8013D563 00FF","8013D565 0006","8013D567 00FF","8013D569 0007","8013D56B 00FF","8013D56D 0008","8013D56F 00FF","8013D571 0009","8013D573 00FF","8013D575 000A","8013D577 00FF","8013D579 000B","8013D57B 00FF","8013D57D 000C","8013D57F 00FF","8013D581 000D","8013D583 00FF","8013D585 000E","8013D587 00FF","8013D589 000F","8013D58B 00FF","8013D58D 0010","8013D58F 00FF","8013D591 0011","8013D593 00FF","8013D595 0012","8013D597 00FF","8013D599 0013","8013D59B 00FF","8013D59D 0014","8013D59F 00FF","8013D5A1 0015","8013D5A3 00FF","8013D5A5 0016","8013D5A7 00FF","8013D5A9 0017","8013D5AB 00FF","8013D5AD 0018","8013D5AF 00FF","8013D5B1 0019","8013D5B3 00FF","8013D5B5 001B","8013D5B7 00FF","8013D5B9 001C","8013D5BB 00FF","8013D5BD 001D","8013D5BF 00FF","8013D5C1 001E","8013D5C3 00FF","8013D5C5 001F","8013D5C7 00FF","8013D5C9 0020","8013D5CB 00FF","8013D5D9 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113D5EC 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113D788 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113D924 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113DAC0 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013D605 00FF","8013D607 00FF","8013D609 00FF","8013D60B 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013D7A1 00FF","8013D7A3 00FF","8013D7A5 00FF","8013D7A7 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013D93D 00FF","8013D93F 00FF","8013D941 00FF","8013D943 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013DAD9 00FF","8013DADB 00FF","8013DADD 00FF","8013DADF 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013D60D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013D7A9 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013D945 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013DAE1 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013D60F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013D7AB 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013D947 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013DAE3 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113D5DC ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113D778 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113D914 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113DAB0 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113D5DC FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113D778 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113D914 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113DAB0 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8013D5E3 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113D77E ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113D91A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113DAB6 ????"],"options":{"Off":"0000","On":"03FF"}}},"66A24BEC-2EADD94F-C:45":{"Widescreen":{"note":"UI Partially Fixed. Also has Shorter Draw Distance.","data":["810007DC 3FE3","D10C1E6A 0D60","810C1E66 FE00","D10C1E6A 0D60","810C1E7A 0200","8103A51C C0AA"],"options":null}},"66CF0FFE-AD697F9C-C:50":{"Infinite Lives":{"note":"","data":["810CE462 03E7"],"options":null},"Infinite health":{"note":"","data":["810C8B0E 03E7"],"options":null},"Level Select":{"note":"Scroll With C-Left \u0026 C-Right Level Select Available, At The Player Select Top Screen","data":["810A590E 0001"],"options":null},"Score Aid":{"note":"","data":["810CD912 29AA"],"options":null}},"673D099B-A4C808DE-C:45":{"Always Full Special\\Boris":{"note":"","data":["811543DC 0044"],"options":null},"Always Full Special\\Curtis":{"note":"","data":["811541C0 0044"],"options":null},"Always Full Special\\George":{"note":"","data":["81154814 0044"],"options":null},"Always Full Special\\Lizzie":{"note":"","data":["81154A30 0044"],"options":null},"Always Full Special\\Myukus":{"note":"","data":["81554E68 0044"],"options":null},"Always Full Special\\Ralph":{"note":"","data":["81154C4C 0044"],"options":null},"Always Full Special\\Ruby":{"note":"","data":["811545F8 0044"],"options":null},"Enable George":{"note":"","data":["8118CF92 0000"],"options":null},"Enable\\Lizzie":{"note":"","data":["8118CF94 0000"],"options":null},"Enable\\Myukus":{"note":"","data":["8118CF98 0000"],"options":null},"Enable\\Ralph":{"note":"","data":["8118CF96 0000"],"options":null},"Infinite Health\\George":{"note":"","data":["8115480C 0044"],"options":null},"Infinite Health\\Lizzie":{"note":"","data":["81154A28 0044"],"options":null},"Infinite Health\\Ralph":{"note":"","data":["81154C44 0044"],"options":null},"Infinite Lives\\George":{"note":"","data":["81154808 0063"],"options":null},"Infinite Lives\\Lizzie":{"note":"","data":["81154A24 0063"],"options":null},"Infinite Lives\\Ralph":{"note":"","data":["81154C40 0063"],"options":null},"Infinite\\Health\\Boris":{"note":"","data":["811543D4 0044"],"options":null},"Infinite\\Health\\Curtis":{"note":"","data":["811541B8 0044"],"options":null},"Infinite\\Health\\Myukus":{"note":"","data":["81154E60 0044"],"options":null},"Infinite\\Health\\Ruby":{"note":"","data":["811545F0 0044"],"options":null},"Infinite\\Lives\\Boris":{"note":"","data":["811543D0 0063"],"options":null},"Infinite\\Lives\\Curtis":{"note":"","data":["811541B4 0063"],"options":null},"Infinite\\Lives\\Myukus":{"note":"","data":["81154EFC 0063"],"options":null},"Infinite\\Lives\\Ruby":{"note":"","data":["811545EC 0063"],"options":null}},"67D20729-F696774C-C:4A":{"Bonus Stage Character Modifier (Training Mode)":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["8018D193 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Give Kirby A Wierd Blow-Up":{"note":"","data":["8025C118 000A"],"options":null},"Have All Characters":{"note":"","data":["810A28F8 0FF0"],"options":null},"P1 Press Down On D-Pad To Make Items Appear In Random Spots":{"note":"","data":["D109CF64 0400","8118B062 0001"],"options":null},"Story Mode\\Always Get Pacifist (60,000 Points)":{"note":"","data":["810A2B2E 0000"],"options":null},"Story Mode\\Infinite Time":{"note":"","data":["810A2AEE 43CB"],"options":null},"Story Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code could also result freezing at the end of the Level.","data":["800A2AFB 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 1\\Infinite Lives":{"note":"","data":["800A2B03 0004"],"options":null},"Story Mode\\Player 1\\Kirby B Button Move\\Congo Jungle":{"note":"","data":["8026EA8F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Fighting Polygon Team":{"note":"","data":["802606DF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["80266ACF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Kirby's Dreamland":{"note":"","data":["8026BAFF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Master Hand Stage":{"note":"","data":["8026FC0F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Metal Mario Stage":{"note":"","data":["80261557 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Peach's Castle":{"note":"","data":["80261D5F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Planet Zebes":{"note":"","data":["8026DF67 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Saffron City":{"note":"","data":["80271A57 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["8026F0B7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["80266E0F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Low % Health":{"note":"","data":["810A2B46 0000"],"options":null},"Story Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2B6F 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 2\\Infinite Lives":{"note":"","data":["800A2B77 0004"],"options":null},"Story Mode\\Player 2\\Low % Health":{"note":"","data":["810A2BBA 0000"],"options":null},"Story Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2BE3 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 3\\Infinite Lives":{"note":"","data":["800A2BEB 0004"],"options":null},"Story Mode\\Player 3\\Low % Health":{"note":"","data":["810A2C2E 0000"],"options":null},"Story Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2C57 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 4\\Infinite Lives":{"note":"","data":["800A2C5F 0004"],"options":null},"Story Mode\\Player 4\\Low % Health":{"note":"","data":["810A2CA2 0000"],"options":null},"Story Mode\\Skip Straight To Master Hand":{"note":"","data":["800A2AA7 000D"],"options":null},"VS. Mode\\Have Mushroom Kindom":{"note":"","data":["800A28F7 00FF"],"options":null},"VS. Mode\\Infinite Time":{"note":"","data":["810A2CDE 43CB"],"options":null},"VS. Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2CEB 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["802619AF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["80269F47 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["8026C277 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Low % Health":{"note":"","data":["810A2D36 0000"],"options":null},"VS. Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2D5F 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 2\\Low % Health":{"note":"","data":["810A2DAA 0000"],"options":null},"VS. Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2DD3 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 3\\Low % Health":{"note":"","data":["810A2E1E 0000"],"options":null},"VS. Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2E47 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 4\\Low % Health":{"note":"","data":["810A2E92 0000"],"options":null},"Widescreen":{"note":"Minor Menu Misalignments","data":["8103BC94 3FE3","8110AE98 3C07","8110AE9A 3FE8","810CEE44 3C07","810CEE46 3FE8"],"options":null}},"67D21868-C5424061-C:50":{"Infinite Energy\\Player 1":{"note":"","data":["800ACB89 00??"],"options":{"Max":"40","None":"00"}},"Infinite Energy\\Player 2":{"note":"","data":["800ACC79 00??"],"options":{"Max":"3F","None":"00"}},"Infinite Match Time":{"note":"","data":["800ABC33 0000"],"options":null},"Super Attacks\\Player 1":{"note":"","data":["800ACB8D 00??"],"options":{"3":"03","None":"00"}},"Super Attacks\\Player 2":{"note":"","data":["800ACC7D 00??"],"options":{"3":"03","None":"00"}},"Unlock Extras":{"note":"","data":["800ACD55 00FF","800ACD57 00FF"],"options":null}},"67FF12CC-76BF0212-C:4A":{"Extra Gems":{"note":"","data":["D016523B 0000","8016523B 004B"],"options":null},"Full\\Bomb Power":{"note":"","data":["80165239 0003"],"options":null},"Full\\Fire Power":{"note":"","data":["8016523A 0003"],"options":null},"Infinite\\Health":{"note":"","data":["8016523E 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["8016523D 0009"],"options":null},"Max\\Bombs":{"note":"","data":["80165239 0008"],"options":null},"Max\\Explosion":{"note":"","data":["8016523A 0008"],"options":null},"Max\\Score":{"note":"","data":["80177601 00FF","80177602 00FF"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D005A2F5 0020","81154178 41CB","D005A2F5 0020","D0154154 0000","80154154 0040"],"options":null},"Widescreen":{"note":"","data":["81036CE4 3C07","81036CE8 3FE3"],"options":null}},"68D7A1DE-0079834A-C:50":{"Access\\All Characters":{"note":"","data":["80208910 FFFF"],"options":null},"Access\\All Floyd Awards":{"note":"only enable One character at a time when using this code","data":["50000501 0000","80208908 0005"],"options":null},"All Single Player Levels Unlocked":{"note":"All Charcters","data":["80208AA0 00FF","80208AA1 00FF","80208B16 00FF","80208B17 00FF","80208B8C 00FF","80208B8D 00FF"],"options":null},"Infinite Continues":{"note":"","data":["800A34F1 0063"],"options":null},"Juno\\Access\\All Keys":{"note":"","data":["81208B18 FFF7"],"options":null},"Juno\\Access\\All Objects":{"note":"","data":["81208B1A FFFF"],"options":null},"Juno\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["80208ABC 00FF","80208ABD 00FF"],"options":null},"Juno\\All Single Player Levels Unlocked":{"note":"","data":["80208B16 00FF","80208B17 00FF"],"options":null},"Juno\\Full \u0026 Max Health":{"note":"","data":["80208AB5 000C","80208AB2 0040"],"options":null},"Juno\\Infinite\\Max Ammo All Guns":{"note":"","data":["50000302 0000","81208AC6 03E7","50000802 0000","81208ACC 03E7","50000402 0000","81208ADC 03E7"],"options":null},"Juno\\Infinite\\Mizar Tokens":{"note":"","data":["81208AC4 03E7"],"options":null},"Juno\\Max Blue \u0026 White Heads":{"note":"","data":["81208ABA 03E7","81208AB8 03E7"],"options":null},"Lupus\\Access\\All Keys":{"note":"","data":["81208B8E FF70"],"options":null},"Lupus\\Access\\All Objects":{"note":"","data":["81208B90 FFFF"],"options":null},"Lupus\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["80208B32 00FF","80208B33 00FF"],"options":null},"Lupus\\All Single Player Levels Unlocked":{"note":"","data":["80208B8C 00FF","80208B8D 00FF"],"options":null},"Lupus\\Full \u0026 Max Health":{"note":"","data":["80208B2B 000C","80208B28 0040"],"options":null},"Lupus\\Infinite\\Max Ammo All Guns":{"note":"","data":["50000302 0000","81208B3C 03E7","50000802 0000","81208B42 03E7","50000402 0000","81208B52 03E7"],"options":null},"Lupus\\Infinite\\Mizar Tokens":{"note":"","data":["81208B3A 03E7"],"options":null},"Lupus\\Max\\Blue \u0026 White Heads":{"note":"","data":["81208B30 03E7","81208B2E 03E7"],"options":null},"Tribals\\Gold Wood\\Have All Tribals":{"note":"","data":["802088E4 000F"],"options":null},"Tribals\\Gold Wood\\Have No Tribals Remaining":{"note":"","data":["802088E6 0000"],"options":null},"Tribals\\Gold Wood\\No Tribals Killed":{"note":"","data":["802088E5 0000"],"options":null},"Vela\\Access\\All Keys":{"note":"","data":["81208AA2 FF70"],"options":null},"Vela\\Access\\All Objects":{"note":"","data":["81208AA4 FFFF"],"options":null},"Vela\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["80208A46 00FF","80208A47 00FF"],"options":null},"Vela\\All Single Player Levels Unlocked":{"note":"","data":["80208AA0 00FF","80208AA1 00FF"],"options":null},"Vela\\Full \u0026 Max Health":{"note":"","data":["80208A3F 000C","80208A3C 0040"],"options":null},"Vela\\Infinite\\Max Ammo All Guns":{"note":"","data":["50000302 0000","81208A50 03E7","50000802 0000","81208A56 03E7","50000402 0000","81208A66 03E7"],"options":null},"Vela\\Infinite\\Mizar Tokens":{"note":"","data":["81208A4E 03E7"],"options":null},"Vela\\Max\\Blue \u0026 White Heads":{"note":"","data":["81208A44 03E7","81208A42 03E7"],"options":null},"[Resolution Fix]":{"note":"","data":["800FE6F2 0003","800FE6DE 0003","800FEDEA 00D0"],"options":null}},"68E8A875-0CE7A486-C:50":{"Always Special\\Player 1":{"note":"","data":["800F9D35 0008"],"options":null},"Always Special\\Player 2":{"note":"","data":["800FA0E5 0008"],"options":null},"Always Special\\Player 3":{"note":"","data":["800FA495 0008"],"options":null},"Always Special\\Player 4":{"note":"","data":["800FA845 0008"],"options":null},"Character Select\\Player 1":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890F9D36 0240","890F9D60 42B4","8107E8B2 ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 2":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA0E6 0240","890FA110 42B4","8107E8B6 ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 3":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA496 0240","890FA4C0 42B4","8107E8BA ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 4":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA846 0240","890FA870 42B4","8107E8BE ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Extra Characters \u0026 Modes":{"note":"","data":["8107F07C FFFF"],"options":null},"Get Title Belt In 1-Match":{"note":"","data":["80038AAB 0008"],"options":null},"Infinite Time":{"note":"","data":["800FAF87 0000"],"options":null},"Infinite Time Out Of Ring":{"note":"","data":["800FACE8 0014"],"options":null},"Spirit Select\\Player 1":{"note":"","data":["800F9D25 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 2":{"note":"","data":["800FA0D5 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 3":{"note":"","data":["800FA485 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 4":{"note":"","data":["800FA835 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Ultimate Code\\Player 1":{"note":"","data":["800F9D24 0064"],"options":null},"Ultimate Code\\Player 2":{"note":"","data":["800FA0D4 0064"],"options":null},"Ultimate Code\\Player 3":{"note":"","data":["800FA484 0064"],"options":null},"Ultimate Code\\Player 4":{"note":"","data":["800FA834 0064"],"options":null},"Weapon Select\\Player 1":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800F9D31 0003","800F98E1 00??","800F98E2 0000","800F99A0 0000"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 2":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA0E1 0003","800F9911 00??","800F9912 0001","800F99A1 0001"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 3":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA491 0003","800F9941 00??","800F9942 0002","800F99A2 0002"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 4":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA841 0003","800F9971 00??","800F9972 0003","800F99A3 0003"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}}},"68FCF726-49658CBC-C:50":{"Have All Extras Open":{"note":"This Code opens all extra stages in VS Battles,Team Battle 1P, Team Battles VS,Tag Battle and Practice Modes. Extra Male and Female Body in Create A Fighter Character and Have Extra Characters (Gouriki \u0026 Reiji)","data":["8009E31F 00FF"],"options":null},"Music Modifier":{"note":"","data":["8009E21E 00??"],"options":{"Monaural":"01","Music Off":"02","Stereo":"00"}},"Player 1\\Character Modifier":{"note":"This Allows you to play as any Character you choose in any Mode","data":["80105001 00??"],"options":{"Azami":"00","Gouriki":"08","Hikari":"0B","Invisible Fighter":"0C","Kai":"03","Kaoru":"07","Kengon":"05","Kyeya":"06","Miki":"02","Reiji":"09","Sakai":"04","Serina":"01","Yami":"0A"}},"Player 1\\Infinite Energy":{"note":"","data":["81105026 03E8"],"options":null},"Player 1\\Need 1 Round to Win":{"note":"","data":["D009E334 0000","8009E334 0001"],"options":null},"Player 1\\Player 2 Has No Energy":{"note":"Press C-Button Up and Player 2 will lose All Health resulting in a Instant K.O.","data":["D0044461 0008","8111B3BE 0000"],"options":null},"Player 1\\Player 2 Never Wins":{"note":"","data":["8009E3F5 0000"],"options":null},"Player 2\\Character Modifier":{"note":"This Allows you to play as any Character you choose in any Mode","data":["8011B399 00??"],"options":{"Azami":"00","Gouriki":"08","Hikari":"0B","Invisible Fighter":"0C","Kai":"03","Kaoru":"07","Kengon":"05","Kyeya":"06","Miki":"02","Reiji":"09","Sakai":"04","Serina":"01","Yami":"0A"}},"Player 2\\Infinite Energy":{"note":"","data":["8111B3BE 03E8"],"options":null},"Player 2\\Need 1 Round to Win":{"note":"","data":["D009E335 0000","8009E335 0001"],"options":null},"Player 2\\Player 1 Has No Energy":{"note":"Press C-Button Up and Player 1 will lose All Health resulting in a Instant K.O.","data":["D0044467 0008","81105026 0000"],"options":null},"Player 2\\Player 1 Never Wins":{"note":"","data":["8009E3F4 0000"],"options":null}},"69256460-B9A3F586-C:45":{"Max Money\\Player 1":{"note":"","data":["81058122 FFFF"],"options":null},"Max Money\\Player 2":{"note":"","data":["81058124 FFFF"],"options":null},"Max Money\\Player 3":{"note":"","data":["81058126 FFFF"],"options":null}},"693BA2AE-B7F14E9F-C:45":{"Always Have Wallet Size":{"note":"","data":["8011AD22 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C8B65 0010","8111BFE6 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset,","data":["8011BB69 00FF","8011BFDF 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C8D75 0000","8011C093 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["80025CC4 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011AD06 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011AD07 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011AD08 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011AD09 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023EFBF 0020","8023EFC5 0033"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F3D38 0005","801F3EF8 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["8011AD22 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011AD23 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011AD21 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111AD1C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111AD24 30FF","8111AD26 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011ACF8 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011ACFE 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011AD04 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011ACFC 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011ACF6 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011AD00 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011ACF5 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011ACF4 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011ACF7 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011ACFA 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011ACFD 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011AD01 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011AD02 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011ACF9 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011ACFF 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011AD05 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011AD03 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011ACFB 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011AD0F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011AD28 0007","8011AD29 0007","8011AD2A 0007","8011AD2B 0007","8011AD2C 0007","8011AD2D 0007","8011AD2E 0007","8011AD2F 0007","8011AD30 0007","8011AD31 0007","8011AD32 0007","8011AD3F 0009","8011AD40 0009","8011AD41 0009","8011AD42 0009","8011AD43 0009","8011AD49 0009","8011AD4C 0009","8011AD47 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011AD14 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011AD0E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011AD0D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011AD12 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011AD0C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111ACB0 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011ACB9 0008","8011ACBA 0001","8011ACBC 0001","8011ACB3 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011AD1A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111C04C 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011C211 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011C215 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C8D75 0020","811DB350 40CB","D01C8D75 0000","811DBB72 000D","8011ACF0 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011AD4F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011AD51 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111ACAE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111C048 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C8D75 0020","811DBB72 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C8D75 0020","811DB350 40CB"],"options":null},"Press L+R For FMV Select":{"note":"Hold down `L+R' after the Nintendo logo is spinning to see your favourite FMV","data":["D01C8D75 0030","8011AC83 00A0","D01C8D75 0030","8011AC8B ????"],"options":{"anondorf FMV":"F600","ire FMV":"F50F","lanet Making FMV":"F400","nding":"F80E","ore Triforce FMV":"F700","riforce FMV":"F200"}},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C8D75 0010","8011AC87 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111AC8C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011AD0A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011AD0B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011ACF0 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011ACBE 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111BEA2 0000","8111BEA4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}},"Widescreen":{"note":"","data":["81025188 2402","81092718 3C07","8109271A 3FE3"],"options":null}},"693BA2AE-B7F14E9F-C:4A":{"Always Have Wallet Size":{"note":"","data":["8011AD22 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C8B65 0010","8111BFE6 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011BB69 00FF","8011BFDF 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C8D75 0000","8011C093 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest 01).","data":["80025CC4 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011AD06 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011AD07 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011AD08 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011AD09 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801D927A 0006","801F28B8 0001","801EF338 0001"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.If you Use Black Gauntlets,They are as strong as the Golden Gauntlets. This code also gives you the Silver Scale and the Golden Scale and unlimited rupees.","data":["8011AD22 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011AD23 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011AD21 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111AD1C 7777"],"options":null},"Have\\All Quest/Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111AD24 30FF","8111AD26 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011ACF8 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011ACFE 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011AD04 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011ACFC 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011ACF6 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011AD00 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011ACF5 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011ACF4 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011ACF7 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011ACFA 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011ACFD 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011AD01 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011AD02 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011ACF9 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011ACFF 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011AD05 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011AD03 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011ACFB 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011AD0F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011AD28 0007","8011AD29 0007","8011AD2A 0007","8011AD2B 0007","8011AD2C 0007","8011AD2D 0007","8011AD2E 0007","8011AD2F 0007","8011AD30 0007","8011AD31 0007","8011AD32 0007","8011AD3F 0009","8011AD40 0009","8011AD41 0009","8011AD42 0009","8011AD43 0009","8011AD49 0009","8011AD4C 0009","8011AD47 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011AD14 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011AD0E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011AD0D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011AD12 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011AD0C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111ACB0 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011ACB9 0008","8011ACBA 0001","8011ACBC 0001","8011ACB3 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011AD1A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111C04C 0001"],"options":null},"Infinite\\Timers\\All other Timers":{"note":"This cheat works on all Race Timers.Under Water with iron Boots etc.","data":["8011C051 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011C055 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C8D75 0020","811DB350 40CB","D01C8D75 0000","811DBB72 000D","8011ACF0 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011AD4F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011AD51 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111ACAE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111C048 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C8D75 0020","811DBB72 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C8D75 0020","811DB350 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C8D75 0010","8011AC87 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111AC8C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011AD0A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011AD0B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011ACF0 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011ACBE 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111BEA2 0000","8111BEA4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"69458B9E-FC95F936-C:4A":{"Have All\\Cups Select":{"note":"","data":["50002C02 0000","800CD611 00??"],"options":{"Bronze Cup":"02","Gold Cup":"00","None (Default)":"04","Silver Cup":"01"}},"Have All\\Points":{"note":"","data":["810D96E0 03E7"],"options":null},"Have All\\RB Medals":{"note":"","data":["810D96F0 03E7"],"options":null},"Infinite\\Credits":{"note":"","data":["800BE145 0005"],"options":null},"Infinite\\Timer":{"note":"","data":["810D9788 44E9"],"options":null},"Infinite\\Turbos":{"note":"Only turn this on ingame or it will freeze the game","data":["D00F3456 0020","800CD791 00??"],"options":{"Off":"00","On":"08"}},"Laps To Race":{"note":"Here you can select what Turbo feature you prefer.","data":["800C9009 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","7 Laps":"07","8 Laps":"08","9 Laps":"09","Laps":"06"}},"[Cheat Menu]":{"note":"Press Pause to access cheats.","data":["800CD789 00FF","800CD78A 00FF","800CD78B 00FF"],"options":null},"[Press F9]\\Enable All Courses":{"note":"","data":["890CD5F2 0B00","890CD5F4 0B00","890CD5F6 0B00"],"options":null},"[Press F9]\\Extra Characters":{"note":"","data":["890C6ADF 01FF"],"options":null},"[Press F9]\\Progress 100%":{"note":"","data":["50000801 0000","880CD600 0003","50000801 0000","880CD601 00FF"],"options":null}},"69AE0438-2C63F3F3-C:4A":{"All Equipment Upgrades":{"note":"","data":["801EF77D 0023","811EF7CA 201B"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D01FBC91 0000","801EF712 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Have All\\Masks":{"note":"","data":["801EF798 005A","801EF799 0055","801EF79A 0063","801EF79B 0061","801EF79C 005C","801EF79D 004E","801EF79E 0056","801EF79F 0062","801EF7A0 0054","801EF7A1 005E","801EF7A2 0064","801EF7A3 004F","801EF7A4 0058","801EF7A5 0059","801EF7A6 0053","801EF7A7 005B","801EF7A8 0052","801EF7A9 0050","801EF7AA 005F","801EF7AB 005D","801EF7AC 0057","801EF7AD 0060","801EF7AE 0065","801EF7AF 0051"],"options":null},"Have All\\Quest Status Items":{"note":"","data":["801EF7CD 0005","811EF7CE F7CF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801EF782 0002"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801EF783 0003"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801EF784 0004"],"options":null},"Have\\Bombchu":{"note":"","data":["801EF787 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801EF786 0006"],"options":null},"Have\\Bottle Modifier\\1":{"note":"","data":["801EF792 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\2":{"note":"","data":["801EF793 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\3":{"note":"","data":["801EF794 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\4":{"note":"","data":["801EF795 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\5":{"note":"","data":["801EF796 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\6":{"note":"","data":["801EF797 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Deku Nuts":{"note":"","data":["801EF789 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801EF788 0008"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801EF790 0010"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801EF781 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801EF78F 000F"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801EF78E 000E"],"options":null},"Have\\Magic Beans":{"note":"","data":["801EF78A 000A"],"options":null},"Have\\Ocarina of Time":{"note":"","data":["801EF780 0000"],"options":null},"Have\\Pictograph":{"note":"","data":["801EF78D 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801EF78C 000C"],"options":null},"Infinite\\Arrows":{"note":"","data":["801EF7B1 0063"],"options":null},"Infinite\\Bombchus":{"note":"","data":["801EF7B7 0063"],"options":null},"Infinite\\Bombs":{"note":"","data":["801EF7B6 0063"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801EF7B9 0063"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801EF7B8 0063"],"options":null},"Infinite\\Health":{"note":"","data":["811EF746 0140"],"options":null},"Infinite\\Hearts Options":{"note":"","data":["811EF744 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Magic Beans":{"note":"","data":["801EF7BA 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801EF749 0060","811EF750 0101"],"options":null},"Infinite\\Powder Kegs":{"note":"","data":["801EF7BC 0063"],"options":null},"Infinite\\Rupees":{"note":"","data":["811EF74A 03E7"],"options":null},"Play As":{"note":"","data":["801EF730 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03E6FCB 0020","814002C8 40CB"],"options":null},"Replace Sword With":{"note":"","data":["801EF75C 00??"],"options":{"Deity Link's Sword":"10","Fire Arrow w/ Bow":"02","Hero's Bow":"00","Ice Arrow w/ Bow":"03","Light Arrow w/ Bow":"04"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01FBC96 0008","811EF726 FFFD","D01FBC96 0004","811EF726 0000","D01FBC96 0002","811EF726 FFFE"],"options":null},"Warp Modifier":{"note":"Put this code on and press the start button and it will now take where you wanted to go, turn it back off after you have got there.","data":["D03E6FCA 0000","803FF805 0001","813FF80A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"6A121930-665CC274-C:45":{"Away Team\\Infinite Time-Outs":{"note":"Do not use this with the No Time Out's Cheat","data":["8013C2D7 0009","80140863 0009"],"options":null},"Away Team\\No Time-Outs":{"note":"Do not use this with the Infinite Time Out's Cheat","data":["8013C2D7 0000","80140863 0000"],"options":null},"Away Team\\Scores":{"note":"","data":["8013C2B3 00??"],"options":{"10 Points":"0A","100 Points":"64","20 Points":"14","200 Points":"C8","250 Points":"FA","40 Points":"28","60 Points":"3C","80 Points":"50","No Points":"00"}},"Create A Player\\Max 3 Point":{"note":"","data":["8013FF99 0063"],"options":null},"Create A Player\\Max Ball Control":{"note":"","data":["8013FFA1 0063"],"options":null},"Create A Player\\Max Block":{"note":"","data":["8013FF9D 0063"],"options":null},"Create A Player\\Max Field Goal":{"note":"","data":["8013FF98 0063"],"options":null},"Create A Player\\Max Free Throw":{"note":"","data":["8013FF9A 0063"],"options":null},"Create A Player\\Max Power":{"note":"","data":["8013FFA2 0063"],"options":null},"Create A Player\\Max Rebound":{"note":"","data":["8013FF9C 0063"],"options":null},"Create A Player\\Max Speed":{"note":"","data":["8013FF9F 0063"],"options":null},"Create A Player\\Max Steal":{"note":"","data":["8013FF9E 0063"],"options":null},"Home Team\\Infinite Time-Outs":{"note":"Do not use this with the No Time Out's Cheat","data":["8013C2D6 0009","80140862 0009"],"options":null},"Home Team\\No Time-Outs":{"note":"Do not use this with the Infinite Time Out's Cheat","data":["8013C2D6 0000","80140862 0000"],"options":null},"Home Team\\Scores":{"note":"","data":["8013C2B1 00??"],"options":{"10 Points":"0A","100 Points":"64","20 Points":"14","200 Points":"C8","250 Points":"FA","40 Points":"28","60 Points":"3C","80 Points":"50","No Points":"00"}},"No Shot Clock":{"note":"","data":["81140E1E FFFF"],"options":null},"Options\\27 Time Out Limit":{"note":"","data":["8013D867 00??"],"options":{"No":"01","Yes":"00"}},"Options\\3 Second Violation":{"note":"","data":["80144994 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\5 Second Violation":{"note":"","data":["80144993 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\Back Court":{"note":"","data":["80144996 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}},"Options\\Camera View":{"note":"","data":["8013D86A 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\FT. Penalty Situations":{"note":"","data":["80144999 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}},"Options\\Foul Out":{"note":"","data":["80144995 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}},"Options\\Goal Tending":{"note":"","data":["80144998 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}},"Options\\Level":{"note":"","data":["8013D864 00??"],"options":{"Enjoy":"00","Exciting":"01","Super Challenge":"02"}},"Options\\Out Of Bounds":{"note":"","data":["80144990 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\Player Display":{"note":"","data":["8013D869 00??"],"options":{"Name":"00","None":"02","Number":"01"}},"Options\\Quarter Length":{"note":"","data":["8013D865 00??"],"options":{"12:00":"03","3:00":"00","5:00":"01","8:00":"02"}},"Options\\Replay":{"note":"","data":["8013D868 00??"],"options":{"No":"01","Yes":"00"}},"Options\\Second Violation":{"note":"","data":["80144992 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\Shot Clock Violation":{"note":"","data":["80144991 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\Stamina":{"note":"","data":["8013D866 00??"],"options":{"Off":"01","On":"00"}},"Options\\Traveling":{"note":"","data":["80144997 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}}},"6A162FF2-2093704C-C:50":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["811659D4 FFFF","811659D6 FFFF","811659DA 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FB5C 270F"],"options":null}},"6AA4DDE7-E3E2F4E7-C:45":{"All Batteries Have Bad Aim":{"note":"","data":["800A1F7C 0001"],"options":null},"All Batteries Have Hellfire":{"note":"","data":["800A34A2 0001"],"options":null},"All Battletanx Are Invincible":{"note":"","data":["8009843D 0001"],"options":null},"Area 51\\Mines Are Invisible":{"note":"","data":["802D5ACB 00CC"],"options":null},"Area 51\\Mines Are Toxic Waste":{"note":"","data":["802D5ACB 007C"],"options":null},"Area 51\\Shock Wave Weapons":{"note":"","data":["802D5A7D 00AF"],"options":null},"Area 51\\Turn Ammo Pickup Picture To Flamer Picture":{"note":"","data":["802D5AAF 00AC"],"options":null},"Area 51\\Turn Nuke Into Toxic Waste Nuke":{"note":"","data":["802D5A7B 007C"],"options":null},"Auto Lose All Queen Lord Levels":{"note":"","data":["800A6746 0001"],"options":null},"Auto Win All Queen Lord Levels":{"note":"","data":["800A6745 0001"],"options":null},"Buildings Fall Fast":{"note":"","data":["80091BBC 0001"],"options":null},"Buildings Implode Instead Of Explode, And Remain Afire":{"note":"","data":["8009298E 0001"],"options":null},"Can't Pick Up Queen Lords":{"note":"","data":["8008A2F0 0001"],"options":null},"Frogs":{"note":"","data":["80135775 0001"],"options":null},"Full Control Of Tank In Bonus,Extra Side Player In Battlelord Multi!":{"note":"","data":["800971EE 0001"],"options":null},"Have All Levels":{"note":"","data":["80135767 0001"],"options":null},"Have Storm Ravens Gang":{"note":"","data":["80135773 0001"],"options":null},"Hurl Mode":{"note":"","data":["8013576B 0001"],"options":null},"In Campaign 3 Enemy Tanks May Join You":{"note":"","data":["802D9AAC 0000","802DB3D4 0000","802DCCFC 0000"],"options":null},"Invincible":{"note":"","data":["80135763 0001"],"options":null},"Invisible":{"note":"","data":["8013576A 0001"],"options":null},"Laser Fire Invisible":{"note":"","data":["800846ED 0001"],"options":null},"MultiPlayer\\Player 2\\One Hit And You Bite It":{"note":"","data":["802D9AC7 0001"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 1\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AD7EE FFFF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 1\\Infinite Secondary Weapons In Battlelord":{"note":"","data":["802D8609 00FF","802D860B 00FF","802D860D 00FF","802D860F 00FF","802D8611 00FF","802D8615 00FF","802D8617 00FF","802D8619 00FF","802D861B 00FF","802D861D 00FF","802D861F 00FF","802D8621 00FF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 2\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AE186 FFFF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 2\\Infinite Secondary Weapons In Battlelord":{"note":"","data":["802D9F31 00FF","802D9F33 00FF","802D9F35 00FF","802D9F37 00FF","802D9F39 00FF","802D9F3D 00FF","802D9F3F 00FF","802D9F41 00FF","802D9F43 00FF","802D9F45 00FF","802D9F47 00FF","802D9F49 00FF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 3\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AEB1E FFFF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 4\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AF4B6 FFFF"],"options":null},"Multiplayer\\Deathmatch, Frenzy \u0026 Convoy Modes\\Player 1\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AD322 FFFF"],"options":null},"Multiplayer\\Deathmatch, Frenzy \u0026 Convoy Modes\\Player 2\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811ADCBA FFFF"],"options":null},"Multiplayer\\Deathmatch, Frenzy \u0026 Convoy Modes\\Player 3\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AE652 FFFF"],"options":null},"Multiplayer\\Deathmatch, Frenzy \u0026 Convoy Modes\\Player 4\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AEFEA FFFF"],"options":null},"Multiplayer\\Hold 'Em Mode\\Player 1\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AD7EE FFFF"],"options":null},"Multiplayer\\Hold 'Em Mode\\Player 2\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AE186 FFFF"],"options":null},"Multiplayer\\Hold 'Em Mode\\Player 3\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AEB1E FFFF"],"options":null},"Multiplayer\\Hold 'Em Mode\\Player 4\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AF4B6 FFFF"],"options":null},"Multiplayer\\Plater 1\\One Hit And You Bite It":{"note":"","data":["802D819F 0001"],"options":null},"Multiplayer\\Player 1\\Always Has Cloaked On":{"note":"","data":["802D818D 0001"],"options":null},"Multiplayer\\Player 1\\Always Have Radar":{"note":"","data":["802D8195 0080"],"options":null},"Multiplayer\\Player 1\\Goalith Tank On Tracks Body Modifier":{"note":"","data":["802D86A3 00??"],"options":{"Big Tank":"02","Motor Tank":"01","Normal Tank":"00"}},"Multiplayer\\Player 1\\Infinite Ammo":{"note":"","data":["802D8603 00FF"],"options":null},"Multiplayer\\Player 1\\Main Weapon":{"note":"","data":["802D85EB 00??"],"options":{"?":"09","Big Tank Shells":"03","Cloaking":"0F","Gernades":"07","Gun Buddies":"0D","Health":"10","Laser":"05","Mines":"0C","Motor Tank Shells":"02","Normal Tank Shells":"01","Nothing":"00","Nuclear Lasers":"0A","Nuke":"06","Remote Rockets":"0B","Rockets":"04","Smoke Screen":"0E"}},"Multiplayer\\Player 1\\Secondary Weapon":{"note":"","data":["802D85F7 00??"],"options":{"?":"09","Big Tank Shells":"03","Cloaking":"0F","Gernades":"07","Gun Buddies":"0D","Health":"10","Laser":"05","Mines":"0C","Motor Tank Shells":"02","Normal Tank Shells":"01","Nothing":"00","Nuclear Lasers":"0A","Nuke":"06","Remote Rockets":"0B","Rockets":"04","Smoke Screen":"0E"}},"Multiplayer\\Player 1\\Tank Body Modifier":{"note":"","data":["802D819B 00??"],"options":{"Big Tank":"02","Motor Tank":"01","Normal Tank":"00"}},"Multiplayer\\Player 1\\Tank Turret Always On (Use Right/Left C Button)":{"note":"","data":["802DE7FB 0011","802DE7FF 0002"],"options":null},"Multiplayer\\Player 1\\Your Goalith Tank On Tracks Always Has Cloaked On":{"note":"","data":["802D8695 0001"],"options":null},"Multiplayer\\Player 1\\Your Goalith Tank On Tracks Always Has Radar":{"note":"","data":["802D869D 0080"],"options":null},"Multiplayer\\Player 2\\Always Has Cloaked On":{"note":"","data":["802D9AB5 0001"],"options":null},"Multiplayer\\Player 2\\Always Have Radar":{"note":"","data":["802D9ABD 0080"],"options":null},"Multiplayer\\Player 2\\Goalith Tank On Tracks Body Modifier":{"note":"","data":["802D9FCB 00??"],"options":{"Big Tank":"02","Motor Tank":"01","Normal Tank":"00"}},"Multiplayer\\Player 2\\Infinite Ammo":{"note":"","data":["802D9F2B 00FF"],"options":null},"Multiplayer\\Player 2\\Main Weapon":{"note":"","data":["802D9F13 00??"],"options":{"?":"09","Big Tank Shells":"03","Cloaking":"0F","Gernades":"07","Gun Buddies":"0D","Health":"10","Laser":"05","Mines":"0C","Motor Tank Shells":"02","Normal Tank Shells":"01","Nothing":"00","Nuclear Lasers":"0A","Nuke":"06","Remote Rockets":"0B","Rockets":"04","Smoke Screen":"0E"}},"Multiplayer\\Player 2\\Secondary Weapon":{"note":"","data":["802D9F1F 00??"],"options":{"?":"09","Big Tank Shells":"03","Cloaking":"0F","Gernades":"07","Gun Buddies":"0D","Health":"10","Laser":"05","Mines":"0C","Motor Tank Shells":"02","Normal Tank Shells":"01","Nothing":"00","Nuclear Lasers":"0A","Nuke":"06","Remote Rockets":"0B","Rockets":"04","Smoke Screen":"0E"}},"Multiplayer\\Player 2\\Tank Body Modifier":{"note":"","data":["802D9AC3 00??"],"options":{"Big Tank":"02","Motor Tank":"01","Normal Tank":"00"}},"Multiplayer\\Player 2\\Tank Turret Always On":{"note":"","data":["802DEB43 0011","802DEB47 0002"],"options":null},"Multiplayer\\Player 2\\Your Goalith Tank On Tracks Always Has Cloaked On":{"note":"","data":["802D9FBD 0001"],"options":null},"Multiplayer\\Player 2\\Your Goalith Tank On Tracks Always Has Radar":{"note":"","data":["802D9FC5 0080"],"options":null},"Multiplayer\\Player 3\\Tank Turret Always On":{"note":"","data":["802DEE8B 0011","802DEE8F 0002"],"options":null},"Multiplayer\\Player 4\\Tank Turret Always On":{"note":"","data":["802DF1D3 0011","802DF1D7 0002"],"options":null},"Nuke Blast Leaves Air Yellow":{"note":"","data":["800F3333 0001"],"options":null},"Nuke Blast Pink":{"note":"","data":["8008055F 0001"],"options":null},"Regenerated Allied Tanks Are Indestrucible In Campaign":{"note":"","data":["8009FB2A 0001"],"options":null},"Run Story":{"note":"","data":["80135770 0001"],"options":null},"Shoot Through Walls":{"note":"","data":["8008E529 0001"],"options":null},"Slow Battle Tanks":{"note":"","data":["8009A56A 0001"],"options":null},"Start With All Weapons":{"note":"","data":["80135765 0001"],"options":null},"Toads":{"note":"","data":["80135776 0001"],"options":null},"Trippy":{"note":"","data":["80135771 0001"],"options":null},"Unlimited Ammo":{"note":"","data":["80135760 0001"],"options":null},"Unlimited Lives":{"note":"","data":["80135772 0001"],"options":null}},"6AECEC4F-F0924814-C:50":{"All Equipment Upgrades":{"note":"","data":["801E54ED 0023","811E553A 201B","801E54CC 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03DC90B 0000","801E5482 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801E5502 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801E5503 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801E5504 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801E5505 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801E5506 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801E5507 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801E54F5 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801E54FB 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801E5501 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Have Item Modifier":{"note":"","data":["801E5500 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\All Masks":{"note":"","data":["811E5508 3E39","811E550A 4745","811E550C 4032","811E550E 3A46","811E5510 3842","811E5512 4833","811E5514 3C3D","811E5516 373F","811E5518 3634","811E551A 4341","811E551C 3B44","811E551E 4935"],"options":null},"Have\\Bombchu":{"note":"","data":["801E54F7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801E54F6 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801E54F9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801E54F8 0008"],"options":null},"Have\\Fire Arrow":{"note":"","data":["801E54F2 0002"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801E5500 0010"],"options":null},"Have\\Have\\Ocarina of Time":{"note":"","data":["801E54F0 0000"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801E54F1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801E54FF 000F"],"options":null},"Have\\Ice Arrow":{"note":"","data":["801E54F3 0003"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801E54FE 000E"],"options":null},"Have\\Light Arrow":{"note":"","data":["801E54F4 0004"],"options":null},"Have\\Magic Beans":{"note":"","data":["801E54FA 000A"],"options":null},"Have\\Pictograph":{"note":"","data":["801E54FD 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801E54FC 000C"],"options":null},"Have\\QuestStatus Items":{"note":"","data":["801E553D 0005","811E553E F7CF"],"options":null},"Infinite\\Health":{"note":"","data":["811E54B6 03E7"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811E54B4 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"This is Infinite use of Bombs,Bombchus,Deku Sticks,Deku Nuts,Magic Beans,\u0026 Powder Kegs. But you must also put it's Have on to work.","data":["801E5521 0063","50000801 0000","801E5526 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801E54B9 0060","811E54C0 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811E54BA 03E7"],"options":null},"Play As":{"note":"","data":["801E54A0 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0378ECB 0020","813921A8 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You Have\\been warned.","data":["801E54CC 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F0496 0008","811E5496 FFFD","D01F0496 0004","811E5496 0000","D01F0496 0002","811E5496 FFFE"],"options":null},"Use all C Buttons":{"note":"","data":["811E9398 0000","811E939A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["803DC90A 0000","803F5165 0001","813F516A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"6B45223F-F00E5C56-C:45":{"Crunched Players":{"note":"","data":["810EA078 3F00"],"options":null},"Extra Teams":{"note":"","data":["800C7205 0001"],"options":null},"Get In Fights Constantly":{"note":"","data":["800A442E 0020"],"options":null},"Players\\Head Size":{"note":"","data":["810EA070 ????"],"options":{"Normal Size":"3F80","Very Large":"4080","Very Small":"3F00"}},"Players\\Height Size":{"note":"","data":["810EA074 ????"],"options":{"Giants":"4080","Large":"3FC0","Midgets":"3F00","Normal Size":"3F80"}},"Team 1\\Score pts":{"note":"","data":["800E6AB1 00??"],"options":{"30 Points":"1E","50 Points":"23","75 Points":"4B","99 Points":"63","Zero Points":"00"}},"Team 2\\Score pts":{"note":"","data":["800E9F8D ????"],"options":{"0 Points":"2305","5 Points":"4B07","9 Points":"6309","ero Points":"0000"}}},"6B700750-29D621FE-C:45":{"1 Win to Win\\Player 1":{"note":"","data":["D0138B47 0000","80138B47 0001"],"options":null},"1 Win to Win\\Player 2":{"note":"","data":["D0138B43 0000","80138B43 0001"],"options":null},"Extra Characters":{"note":"","data":["8007F9F8 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["8008B1E7 0064"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["8008AE5F 0064"],"options":null},"Infinite Time":{"note":"","data":["81138B2A 0708"],"options":null},"Infinite Time To Choose Character":{"note":"","data":["D01340F6 0001","811340F6 0260"],"options":null},"No Health\\Player 1":{"note":"","data":["8008B1E7 0000"],"options":null},"No Health\\Player 2":{"note":"","data":["8008AE5F 0000"],"options":null},"P2/CPU Never Wins":{"note":"","data":["80138B43 0000"],"options":null},"R Button Health Restore\\Player 1":{"note":"","data":["D007CD2B 0010","8008B1E7 0064"],"options":null},"Sudden Death Mode\\Player 1":{"note":"","data":["D1138B2A 0120","8008B1E7 0001"],"options":null},"Sudden Death Mode\\Player 2":{"note":"","data":["D1138B2A 0120","8008AE5F 0001"],"options":null},"Z Trigger Deathblow\\Player 1":{"note":"","data":["D007CD2A 0020","8008AE5F 0000"],"options":null}},"6BFF4758-E5FF5D5E-C:4A":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118B2D0 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118B2D2 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118B2D4 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118B2D6 0003"],"options":null},"Have Bonus Mode and All Gold Cups":{"note":"","data":["8018C728 00??","8018C729 00??","8018C72A 00??","8018C72B 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["80163655 00??","80163682 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["80163735 00??","80163762 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["80163815 00??","80163842 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["801638F5 00??","80163922 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["801639D5 00??","80163A02 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["80163AB5 00??","80163AE2 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818C80F 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F73C5 0020","810F7478 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F73D5 0020","810F8250 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F73E5 0020","810F9028 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F73F5 0020","810F9E00 4000"],"options":null}},"6C2C6C49-9BE5CA66-C:45":{"Extra Bonuses":{"note":"","data":["810EBA6A 270F"],"options":null},"Fake Max Spin Bar?":{"note":"","data":["800EBA43 0009"],"options":null},"Infinite\\Crate Attempts":{"note":"","data":["800A9D1B 0007"],"options":null},"Infinite\\Gold Pickups":{"note":"","data":["802EB9E8 0064"],"options":null},"Infinite\\Health":{"note":"","data":["800EBA47 0009"],"options":null}},"6C45B60C-DCE50E30-C:4A":{"Access All Boards \u0026 Characters":{"note":"","data":["800500C1 000C"],"options":null},"All Street Work Levels Unlocked":{"note":"","data":["50007801 0000","80050170 00??"],"options":{"Courses unlocked":"01","Courses unlocked with A rank":"05","Courses unlocked with B rank":"04","Courses unlocked with C rank":"03","Courses unlocked with S rank":"06"}},"Class Score Select":{"note":"","data":["8016609E 00??"],"options":{"Class A":"64","Class B":"40","Class C":"20","Class S":"FF"}},"Coin Perfect Select":{"note":"this is for Coin Mode to get Perfect Coin Collection Score straight away when you enter the level","data":["801660B3 00??"],"options":{"Giant House Level 1":"6E","Giant House Level 2":"77","Giant House Level 3":"72","Green Park Level 1":"14","Green park Level 2":"1A","Green park Level 3":"2B","Lost Forest Level 1":"4A","Lost Forest Level 2":"59","Lost Forest Level 3":"80","Snow Festival 64 Levels 1 2 \u0026 3":"7D","Sunset Island Level 1":"6F","Sunset Island Level 2":"74","Sunset Island Level 3":"81"}},"Infinite Time\\Attack Time Time 000000":{"note":"","data":["811137EA 0000"],"options":null},"Infinite Time\\Street Work \u0026 Coin":{"note":"","data":["801137E9 0028"],"options":null},"Infinite Time\\Time Attack":{"note":"","data":["801137EB 0000"],"options":null},"Infinite Turbo\\Player 1":{"note":"","data":["80166019 0009"],"options":null},"Infinite Turbo\\Player2":{"note":"","data":["80167991 0009"],"options":null},"Maxed Out Turbo Bar":{"note":"","data":["811656E8 429F","80166017 0051"],"options":null},"Options\\Camera Type Modifier":{"note":"","data":["810500A6 00??"],"options":{"Roll Off Far":"05","Roll Off Mid":"04","Roll Off Near":"03","Roll On Far":"02","Roll On Mid":"01","Roll On Near":"00"}},"Options\\DJ Function Modifier":{"note":"","data":["810500AC 00??"],"options":{"DJ Function Off":"00","DJ Function On":"01"}},"Options\\Music Modifier":{"note":"","data":["800500A9 00??"],"options":{"BGM Off":"00","BGM On":"FF"}},"Options\\Sound Effects Modifier":{"note":"","data":["810500AA 00??"],"options":{"SE Off":"00","SE On":"FF"}}},"6D8DF08E-D008C3CF-C:50":{"2 Player Championship Mode":{"note":"This lets player 2 play with you in championship mode so if you have a friend that you want to tag team up with in tag team championship now you can.","data":["810A755E 0002"],"options":null},"Always Special\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF9E 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2F6 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["D015A5D1 0015","8015B64E 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["D015A5D1 0015","8015B9A6 0004"],"options":null},"Auto-Pin\\Player 1":{"note":"Do not use with Cant Pin","data":["8016CE23 0003"],"options":null},"Auto-Pin\\Player 2":{"note":"Do not use with Cant Pin","data":["8016CE17 0003"],"options":null},"Auto-Pin\\Player 3":{"note":"Do not use with Cant Pin","data":["8016CE2F 0003"],"options":null},"Auto-Pin\\Player 4":{"note":"Do not use with Cant Pin","data":["8016CE3B 0003"],"options":null},"CPU To Human Control\\Player 1":{"note":"","data":["8015AF99 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 2":{"note":"","data":["8015B2F1 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 3":{"note":"","data":["8015B649 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 4":{"note":"","data":["8015B9A1 00??"],"options":{"CPU":"18","Human":"17"}},"Can't Pin\\Player 1":{"note":"Do not use with Auto Pin","data":["8016CE23 0004"],"options":null},"Can't Pin\\Player 2":{"note":"Do not use with Auto Pin","data":["8016CE17 0004"],"options":null},"Can't Pin\\Player 3":{"note":"Do not use with Auto Pin","data":["8016CE2F 0004"],"options":null},"Can't Pin\\Player 4":{"note":"Do not use with Auto Pin","data":["8016CE3B 0004"],"options":null},"Cannot Be Grabbed\\Player 1":{"note":"","data":["D115AEC6 0052","8115AEC6 0001","D115AEC6 00A1","8115AEC6 00C1"],"options":null},"Cannot Be Knocked Down\\Player 1":{"note":"","data":["D115AEC6 0031","8115AEC6 0001"],"options":null},"Cannot Be Punched\\Player 1":{"note":"","data":["D115AEC6 002D","8115AEC6 0001","D115AEC6 0035","8115AEC6 00C1"],"options":null},"Clock At 00:00":{"note":"","data":["8115AB1E 0000","810A99F2 0000"],"options":null},"Hacked Moves\\Capture Tazzplex":{"note":"Replaces: Capture Suplex P1 grabs P2's feet like a capture suplex, then lets go \u0026 does a Tazzplex.","data":["D106B454 3689","D106B456 0021","8106B460 00BC","D106B454 3689","D106B456 0021","8106B462 A5E2","D106B514 368A","D106B516 0021","8106B520 00BC","D106B514 368A","D106B516 0021","8106B522 B6BE"],"options":null},"Hacked Moves\\Dominator into HHH Facebuster":{"note":"Replaces: Dominator","data":["D106B454 3810","D106B456 005C","8106B560 011A","D106B454 3810","D106B456 005C","8106B562 A256","D106B514 3811","D106B516 005C","8106B520 011A","D106B514 3811","D106B516 005C","8106B522 ACB0","D106B454 3810","D106B456 0075","8115AF52 0000"],"options":null},"Hacked Moves\\Dragon Screw Stunner":{"note":"Dragon Screw 02 P1 does a Dragon Screw then picks up P2 (still holding his leg) and spins him around and gives him a Stone Cold Stunner","data":["D106B454 3749","D106B456 0094","8106B460 00E9","D106B454 3749","D106B456 0094","8106B462 B9BE","D106B514 374A","D106B516 0094","8106B520 00E9","D106B514 374A","D106B516 0094"],"options":null},"Hacked Moves\\Dragon Screw Suplex":{"note":"Replaces: Double Dragon Screw 02 P1 does a Dragon screw then picks then up (still holding their feet) and does a capture suplex.","data":["D106B454 3749","D106B456 007C","8106B460 00AD","D106B454 3749","D106B456 007C","8106B462 DB2A","D106B514 374A","D106B516 007C","8106B520 00AD","D106B514 374A","D106B516 007C","8106B522 EAE0","D106B454 3749","D106B456 00A5","8115AF52 0000","D106B514 374A","D106B516 00A5","8115B2AA 0000"],"options":null},"Hacked Moves\\Morality Check to Back of head":{"note":"Replaces: Back Clothesline P1 is immediately backed up and does the Morality Check to P2 in the back of the head (misses by a little)","data":["D106B454 3892","D106B456 0000","8106B460 00B3","D106B454 3892","D106B456 0000","8106B462 194C"],"options":null},"Hacked Moves\\Running Rock Bottom":{"note":"Replaces: Farooq Spinebuster P2 runs into P1 and P1 delivers a RockBottom to P2.","data":["D106B454 3A80","D106B456 0000","8106B460 00C1","D106B454 3A80","D106B456 0000","8106B462 F7A2","D106B514 3A81","D106B516 0000","8106B520 00C2","D106B514 3A81","D106B516 0000","8106B522 1210"],"options":null},"Hacked Moves\\Running Tazplex":{"note":"Replaces: Underhook Belly to Belly P2 runs into P1 and P1 does a Tazplex to P2.","data":["D106B454 3A7A","D106B456 0000","8106B460 00BC","D106B454 3A7A","D106B456 0000","8106B462 A51E","D106B514 3A7B","D106B516 0000","8106B520 00BC","D106B514 3A7B","D106B516 0000","8106B522 B5FA"],"options":null},"Have All\\Characters,Costumes, \u0026 Moves":{"note":"","data":["50000B02 0000","810BEE40 FFFF"],"options":null},"Infinite\\Money\\Championship Mode":{"note":"For Championship Mode","data":["8109940A FFFF"],"options":null},"Infinite\\Money\\Smackdown Mall Shop":{"note":"For Smackdown Mall Shop","data":["8114FAD6 FFFF"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF5F 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2B7 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["D015A5D1 0015","8015B60F 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["D015A5D1 0015","8015B967 00FF"],"options":null},"Novalty\\Truck In The Crowd":{"note":"","data":["81050110 0747","81050112 0748","81050114 0749","81050116 074A","81050118 074B","81050124 0A4B","81050126 0A43","81050128 0A4B","8105012A 0A43","8105012C 0A43","8105012E 0A43","8105011A 074C","8105011C 074D","81050130 0A43","8105011E 074E","81050132 0A43","81050120 0746","81050134 0A4B","81050122 0743","81050136 0A4B","D1064880 2000","8115AFB0 42EE","D1064880 2000","8115B308 42EE"],"options":null},"Play As\\Player 1\\Option 1":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 1\\Option 2":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 1\\Option 3":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 2\\Option 1":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 2\\Option 2":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 2\\Option 3":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 3\\Option 1":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 3\\Option 2":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 3\\Option 3":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 4\\Option 1":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 4\\Option 2":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 4\\Option 3":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Replace Raw War with\\BACKYARD ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105010E 0F76","8105010C 0F76","810482E8 002F","81050150 2CFD","810528F4 33FF","810528F6 33FF","81050152 2DC7","81050114 04F4","81050116 04F5","8105011E 04F3","81050128 07FF","8105012A 07FF","81050132 07FF","81079F48 400C","81079F5C 3F00","81079F70 3FFF","8107A024 4010","8107A038 3F00","8107A04C 4020","8107A060 3F84","8107A394 4012","8107A3A8 3F00","8107A3BC 4030","8107A3D0 3F84","8105042C 0949","81050436 07FF","81050438 07FF","8105043A 07FF","8105043C 0000","8105043E 07FF","81050440 0949","81050442 0949","81050430 0F76","81050128 07FF","8105012A 07FF","8105012C 0000","8105012E 07FF","81050130 07FF","81050132 07FF","81050134 0000","81050136 08F9","81050196 2CFD","81050194 09EF","81050192 0000","81050190 09EF","8116C49E 0019","8116C4B8 0004","8116C4DC C2E1","8116C4E0 42B4","810500FE 2D2D","81050100 2D2D","81050102 2D2D","81050400 2DC7","81050402 2DC7","81050404 2DC7","81050406 2DC7","81050408 2DC7","8105040A 2DC7","8105040C 2DC7","8105040E 2DC7","50001002 0000","810501B8 0000","50000402 0000","810501E0 0000","50000902 0000","81050262 0000","50001402 0000","81050290 0000","50002C02 0000","810502EC 0000","8107941C 3FE0","81079428 3FFF","810500EC 06FE","810500EE 06FD","810500F8 07FF","810500FA 0997","81050110 06FC","81050112 06FB","8105011A 06FF","8105011C 06FA","81052CF0 2CC9","81052CF4 2D1B","81052CD0 2CD1","81052CD4 0963","81052C84 2CBF","81052C8A 0961","81052CB8 2CC4","81052CBC 2DD7","81052CC8 2CD1","81052CCC 2CFB","81052C78 2CBC","81052C80 2D31","81052CF8 2CC1","81052D00 2DD7"],"options":null},"Replace Raw War with\\BACKYARD WEAK":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0E88","8105042E 2D0D","81050430 2D0D","81050432 2D0D","81050434 2D0D","81050436 07FD","8105043A 2CFB","8105043C 2D0D","8105043E 2D0D","81050440 2D0D","81050442 2D0D","810500E8 2D0D","8105010E 2D0D","8105010C 2D0D","81050150 2D0D","81050196 2CFB","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81050136 2CFB","81050400 2D0D","81050402 2D0D","81050404 2D0D","81050406 2D0D","81050408 2D0D","8105040A 2D0D","8105040C 2D0D","8105040E 2D0D","810528F4 2D0D","810528F6 2D0D","81052CE8 2CC9","81052CEC 2D2D"],"options":null},"Replace Raw War with\\BARBEDWIRE ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 2CFB","8105042E 2CFB","81050430 2CFB","81050432 2CFB","81050434 2CFB","81050436 2CFB","81050438 2CFB","8105043A 2CFB","8105043C 2CFB","8105043E 2CFB","81050440 2CFB","81050442 2CFB","810500E8 2CFB","8105010E 2CFB","8105010C 2CFB","81050150 2CFB","81050196 2CFB","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81050136 2CFB","810528F4 DDDD","810528F6 DDDD","81052CE8 2CCA","81052CEC 2CFB","81050400 2CFB","81050402 2CFB","81050404 2CFB","81050406 2CFB","81050408 2CFB","8105040A 2CFB","8105040C 2CFB","8105040E 2CFB"],"options":null},"Replace Raw War with\\BARBEDWIRE ROPES":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050110 04F3","81050112 04F4","81050114 04F5","81050116 04F3","81050118 04F4","8105011A 04F5","8105011C 04F3","8105011E 04F4","81050120 04F5","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81079D90 3F6C","81079D94 3F48","81079DA4 3D10","81079DB8 3F71","81079E6C 3F6C","81079E80 3D10","81079E90 3F47","81079F48 3F6C","81079F4C BF4C","81079F5C 3D10","81079F70 3F71","8107A024 3F6C","8107A028 3F28","8107A038 3D10","8107A04C 3F71","8107A100 3F6C","8107A114 3D10","8107A124 3F23","8107A1DC 3F6C","8107A1E0 BF2A","8107A1F0 3D10","8107A204 3F71","8107A2B8 3F6C","8107A2BC 3F02","8107A2CC 3D10","8107A2E0 3F71","8107A394 3F6C","8107A3A8 3D10","8107A3B8 3F00","8107A470 3F6C","8107A474 BF02","8107A484 3D10","8107A498 3F71","81050144 0569","81050154 07F7","810528F4 0C01","810528F6 0555","81050140 04F4","81050150 2CFB","8107A628 3F60","8107A63C 3D10","8107A64C 3F52","8107A650 BF80","8107A8BC 3F56","8107A8C4 BA00","8107A8D0 3D10","8107A8DC 3C5A","8107A8E0 3F30","8107A8E4 BF80","8107ADE4 3F56","8107ADEC BA00","8107ADF8 3D10","8107AE04 3C5A","8107AE08 3F0E","8107AE0C BF80","8107AB7C 3F00","D115AF56 2EB2","8115AEC6 0017","D115B2AE 2EB2","8115B21E 0017","D115B606 2EB2","8115B570 0017","D115B95E 2EB2","8115B8CE 0017","81052922 FFFF","81052924 FFFF","81052926 FFFF"],"options":null},"Replace Raw War with\\BARBEDWIRE SQUARE\\Part 1":{"note":"Both Parts must be on for this Press the C Left Button to make your opponent bleed,These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050110 04F3","81050112 04F4","81050114 04F5","81050116 04F3","81050118 04F4","8105011A 04F5","8105011C 04F3","8105011E 04F4","81050120 04F5","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81079D90 3F6C","81079D94 3F48","81079DA4 3D10","81079DB8 3F71","81079E6C 3F6C","81079E80 3D10","81079E90 3F47","81079F48 3F6C","81079F4C BF4C","81079F5C 3D10","81079F70 3F71","8107A024 3F6C","8107A028 3F28","8107A038 3D10","8107A04C 3F71","8107A100 3F6C","8107A114 3D10","8107A124 3F23","8107A1DC 3F6C","8107A1E0 BF2A","8107A1F0 3D10","8107A204 3F71","8107A2B8 3F6C","8107A2BC 3F02","8107A2CC 3D10","8107A2E0 3F71","8107A394 3F6C","8107A3A8 3D10","8107A3B8 3F00","8107A470 3F6C","8107A474 BF02","8107A484 3D10","8107A498 3F71","81050144 0569","81050154 07F7","810528F4 0C01","810528F6 0555","81050140 04F4","81050150 2CFB","8107A628 3F60","8107A63C 3D10","8107A64C 3F52","8107A650 BF80","8107A8BC 3F56","8107A8C4 BA00","8107A8D0 3D10","8107A8DC 3C5A","8107A8E0 3F30","8107A8E4 BF80","8107ADE4 3F56","8107ADEC BA00","8107ADF8 3D10","8107AE04 3C5A","8107AE08 3F0E","8107AE0C BF80","8107AB7C 3F00","D115AF56 2EB2","8115AEC6 0017","D115B2AE 2EB2","8115B21E 0017","D115B606 2EB2","8115B570 0017","D115B95E 2EB2","8115B8CE 0017","81052922 FFFF","81052924 FFFF","81052926 FFFF","8116C330 0000","8116C332 000A","8116C334 0000","8116C336 000A","8116C378 42B4"],"options":null},"Replace Raw War with\\BARBEDWIRE SQUARE\\Part 2":{"note":"Both Parts must be on for this Press the C Left Button to make your opponent bleed,These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8116C382 0000","8116C38C FFFF","81052C9C 0672","81052CA4 2CFB","D1064880 0002","8115B21E 002F","D1064886 0002","8115AEC6 002F","8116C3E4 0000","8116C3E6 000C","8116C3E8 0000","8116C3EA 000C","8116C428 C3D4","8116C440 FFFF","81052CB2 2CC2","81052CB4 0805","81052CB6 2CFB","D1064880 2000","8116C3E6 001F","D1064880 2000","8116C3EA 001F","D1064880 2000","81005592 3F81","D1005592 3F81","8116C3E6 001F","D1064880 2000","81005592 3F81","D1005592 3F81","8116C3EA 001F","D1064886 2000","8116C3E6 001F","D1064886 2000","8116C3E6 001F","D1064886 2000","81005592 3F81","D1005592 3F81","8116C3EA 001F","81052CF8 04F4","81052D00 2CFB","8116C3E4 0000","8116C3E6 0015","8116C3E8 0000","8116C3EA 0015","8116C428 0000","8116C42A 0000","8116C42C 43EB","8116C42E 0000","8116C430 C3A6","8116C432 0000","8116C436 0400","8116C43A 0000","8116C43E 0000","8116C440 FFFF","8116C442 0000","810855A8 3F00","81085684 3F00","81085750 3F00","8108583C 3F00","81050100 2CFB","8105010E 2CFB"],"options":null},"Replace Raw War with\\DUDLEY ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 21A7","8105042E 2D0D","81050432 2D0D","81050436 21A7","8105043E 2D0D","81050440 0000","81050442 0000","810500E8 2D0D","8105010C 2CFD","8105010E 2CFD","81050150 2D29","81050152 2CFB","81050400 09EF","81050402 09EF","81050404 0000","81050406 0000","81050408 0000","8105040A 0000","8105040C 09EF","8105040E 09EF","81050188 04F6","8105018A 04F7","8105018C 04F8","8105018E 04F9","81050190 09EF","81050192 0000","81050194 09EF","81050196 2D0D","810528F4 6666","810528F6 6666","81052CE8 2CC2","81052CEC 2D0D","81052D1C 2CD3","81052D1E 2CD4","81052D20 2CD5","81052D22 2CD6","81052D24 2CFD","81052D26 2CFD","81052D28 2CFB","81052D2A 2CFB","81050124 2CFD","81050126 2CFD","81050128 2CFD","8105012A 2CFD","8105012C 2CFD","8105012E 2CFD","81050130 2CFD","81050132 2CFD","81050134 2CFD","81050136 2CFD","81050154 2CFB","811533F8 002E"],"options":null},"Replace Raw War with\\FLAME ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105010E 0EFE","8105010C 0EFE","810528F4 2508","810528F6 2508","81050430 2401","81050430 2401","81050404 2401","81050406 2401","81050408 2401","81050409 2401","8105040A 2401","8105040C 2401","810500E8 2401"],"options":null},"Replace Raw War with\\FLAMING TURNBUCKLES":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8116C334 FFFF","8116C336 001F","8116C374 C350","8116C376 FFF3","8116C378 4377","8116C37A 2689","8116C37C C380","8116C37E 0406","8116C382 0D14","8116C386 0FCC","8116C38A 07DC","8116C38C FFFF","8116C38E FDE3","8116C3E8 FFFF","8116C3EA 001F","8116C428 C360","8116C42C 4370","8116C430 4376","8116C436 0D14","8116C43A 0FCC","8116C43E 07DC","8116C442 F9C4","8116C49C FFFF","8116C49E 001F","8116C4DC 4360","8116C4E0 4370","8116C4E4 4380","8116C4EA 0CD0","8116C4EE 0136","8116C4F2 04EE","8116C4F6 F601","8116C550 FFFF","8116C552 001F","8116C590 434F","8116C594 4370","8116C598 C36C","8116C59E 0E70","8116C5A2 0F58","8116C5A6 0814","8116C5AA F1E6"],"options":null},"Replace Raw War with\\GREENWICH STREET ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050430 2DC5","81050436 0000","81050438 0000","8105043A 0000","8105043E 0000","810504E8 0EFE","8105010E 2DC5","8105010C 2DC5","81050196 2CFD","81050136 0FB6","81050134 0FC6","81050132 0FB6","81050130 0FC6","8105012E 0FB6","8105012C 0FC6","8105012A 0FB6","81050128 0FC6","81050126 0FB6","81050124 0FC6","81050440 0000","81050442 0000","50002C02 0000","81050378 0000","50002C02 0000","810502EC 0000","50001402 0000","81050290 0000","50000902 0000","81050262 0000","50000402 0000","810501CE 0000","50001002 0000","810501B8 0000","50000402 0000","810501E0 0000","8105042C 2D0D","81050430 0000","81050150 24F0"],"options":null},"Replace Raw War with\\HHH ARNEA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105040E 24EF","8105040C 24EF","8105040A 24EF","81050408 24EF","81050406 24EF","81050404 24EF","81050402 24EF","81050400 24EF","81050436 24E9","81050440 24E9","81050442 24E9","8105043E 24EF","8105042E 24EF","8105043C 24EF","8105042C 24E9","8105010E 24E9","8105010C 24E9","81050196 24E9","8105042E 24EF","81050432 24EF","810500F8 24EF","810500FA 24EF","810500FC 24EF","810500FC 24EF","81050100 24EF","81050100 24EF","81052CE8 2CCA","81052CEC 24EF","81050150 24E9","81050152 24E9","81050154 24E9","810528F4 24E9","810528F6 24E9"],"options":null},"Replace Raw War with\\HOSPITAL ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0949","8105042E 283F","81050428 0949","81050430 0949","81050430 0949","81050436 096B","81050438 0993","8105043A 096B","8105043E 283F","81050440 283F","81050442 283F","810504E8 0949","81050150 283F","81050196 283F","81050400 283F","81050402 283F","81050404 283F","81050406 283F","81050408 283F","8105040A 283F","8105040C 283F","8105040E 283F","810500F8 283F","810500FA 283F","810500FC 283F","810500FE 283F","81050100 283F","81050100 283F","81052CE8 2CCA","81052CEC 283F","8105010E 283F","8105010C 283F","81050124 0949","81050126 0949","81050128 0949","8105012A 0949","8105012C 0949","8105012E 0949","81050130 0949","81050132 0949","81050134 0949","81050136 0949","810500E8 0949","810528F4 0000","81052CE0 2CC9"],"options":null},"Replace Raw War with\\KANE ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0A61","8105042E 0A61","81050428 2B6C","81050430 2B6C","81050430 2B6C","81050436 2B57","81050438 2B57","8105043A 2B57","8105043E 0A61","81050440 2B57","81050442 2B57","810500E8 1B1E","8105010E 2D37","8105010C 209F","81050194 0955","81050196 2B57","81050400 2699","81050402 2699","81050404 2699","81050406 2699","81050408 2699","8105040A 2699","8105040C 2699","8105040E 2699"],"options":null},"Replace Raw War with\\REMOVE RING":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050150 0000","81050152 0000","81050154 0000","810500E8 0000","810855A8 3F00","81085684 3F00","81085750 3F00","8108583C 3F00","81079C08 3F00","81079C14 3F00","81079B10 3F00"],"options":null},"Replace Raw War with\\SHIMMER ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 1932","8105042E 1932","81050430 1932","81050434 1932","81050432 1932","81050436 1932","81050438 1932","8105043A 1932","8105043E 1932","81050440 1932","81050442 1932","81050150 1932","81050152 1932","81050154 1932","81050190 1932","81050192 1932","81050194 1932","81050196 1932","81050124 1932","81050126 1932","81050128 1932","8105012A 1932","8105012C 1932","8105012E 1932","81050130 1932","81050132 1932","81050134 1932","81050136 1932","810500E8 1932","8105010E 1932","8105010C 1932"],"options":null},"Replace Raw War with\\SPACE SHIP ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 094D","8105042E 0953","81050430 0953","81050432 0F0E","81050434 0953","81050436 0F0E","81050438 0899","8105043C 0953","8105043E 0899","81050440 0963","81050442 0963","81050400 0953","81050402 0953","81050404 0953","81050406 0953","81050408 0953","8105040A 0953","8105040C 0953","8105040E 0953","810500E8 0A75","810528F4 7223","810528F6 0119","81050150 0963","81050152 0963","81050190 0953","81050192 0953","81050194 0953","81050196 0963","8105010E 0F0E","8105010C 0F0E","81050124 0F10","81050126 0F10","81050128 0F10","8105012A 0F10","8105012C 0F10","8105012E 0F10","81050130 0F10","81050132 0F10","81050134 0F10","81050136 0F10","810500F8 0963","810500FA 0963","810500FC 0963","810500FE 0963","81050100 0963","81050102 0963","81052CE8 2CCA","81052CEC 0963"],"options":null},"Replace Raw War with\\TOKYO DOME":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["810528F4 7223","810528F6 0119","81050124 0100","81050126 0100","81050128 0100","8105012A 0100","8105012C 0100","8105012E 0100","81050130 0100","81050132 0100","81050134 0100","81050136 0100","8105010E 0999","81050400 03A5","81050402 0385","81050404 0385","81050406 0385","81050408 0385","8105040A 03A5","8105040C 03A5","8105040E 043F","81050430 043F","8105042C 03A5","81050430 21A5","81050432 0100","81050434 0000","81050436 2CFB","81050438 0899","8105043C 03AF","81050440 03AF","81050442 03A5","810500E8 24C3","81050444 0100","81050190 09EF","81050192 0000","81050194 09EF","81050196 2CFD"],"options":null},"Tables\\IN RING TABLE\\Part 1":{"note":"To Make the Table look broken Keep the Z Button press down, To make player stand on the Table, Stand next to it \u0026 Keep C-Right Pressed Down.Put all Parts on Together for this Cheat to work","data":["81052CF0 06E1","81052CF4 09F1","81052CF8 06E2","81052D00 09F1","81052D0C 06E3","81052D0E 06E4","81052D10 09EF","81052D12 09EF","81052D14 06E5","81052D16 06E6","81052D18 09EF","81052D1A 09EF","D1064880 0001","8115AFB0 432C","D1064880 0001","8115B308 432C","D1064880 2000","8115AFB0 42B4","D1064880 2000","8115B308 42B4","8116C330 0000","8116C332 0014","8116C334 0000","8116C336 0014","8116C374 4210","8116C376 C0B1","8116C378 432F","8116C37A 51DC","8116C37C 4210","8116C37E 92F1","8116C382 0800","8116C386 05A0","8116C38A 0800","8116C38C FFFF","8116C38E F3BC","8116C3E4 0000","8116C3E6 0015","8116C3E8 0000","8116C3EA 0015","8116C428 4210","8116C42A C0B1","8116C42C 432F","8116C42E 51DC","8116C430 4210","8116C432 92F1","8116C436 0800","8116C43A 05A0","8116C43E 0800","8116C440 FFFF","8116C442 F3BC","D1064880 2000","8116C378 42E0"],"options":null},"Tables\\IN RING TABLE\\Part 2":{"note":"To Make the Table look broken Keep the Z Button press down, To make player stand on the Table, Stand next to it \u0026 Keep C-Right Pressed Down.Put all Parts on Together for this Cheat to work","data":["D1064880 2000","8116C382 07E0","D1064880 2000","8116C38A 0680","D1064880 2000","8116C42C 42E0","D1064880 2000","8116C436 0820","D1064880 2000","8116C43E 0980","8116C498 0000","8116C49A 0017","8116C49C 0000","8116C49E 0017","8116C4DC 4210","8116C4DE C0B1","8116C4E0 432A","8116C4E2 51DC","8116C4E4 4210","8116C4E6 92F1","8116C4EA 0800","8116C4EE 05A0","8116C4F2 0800","8116C4F4 FFFF","8116C4F6 F3BC","8116C54C 0000","8116C54E 0018","8116C550 0000","8116C552 0018","8116C590 4210","8116C592 C0B1","8116C594 432A","8116C596 51DC","8116C598 4210","8116C59A 92F1","8116C59E 0800","8116C5A2 05A0","8116C5A6 0800","8116C5A8 FFFF","8116C5AA F3BC","D1064880 2000","8116C4E0 42E0","D1064880 2000","8116C4EA 07E0","D1064880 2000","8116C4F2 0680","D1064880 2000","8116C594 42E0","D1064880 2000","8116C59E 0820","D1064880 2000","8116C5A6 0980"],"options":null},"Tables\\MOVABLE TABLES\\Part 1":{"note":"You must use both parts for this cheat to work","data":["81052C24 06E1","81052C26 06E3","81052C2C 09F1","81052C2E 09EF","81052C30 06E2","81052C32 06E5","81052C38 09F1","81052C3A 09EF","81052C48 06E4","81052C4A 06E6","81052C50 09EF","81052C52 09EF","8116C3E4 0000","8116C3E6 0001","8116C3E8 0000","8116C3EA 0001","8116C498 0000","8116C49A 0003","8116C49C 0000","8116C49E 0003","8116C330 0000","8116C332 0000","8116C334 0000","8116C336 0000","D116C556 0000","8116C33A 0000","D116C33A 0000","8116C3EE 0000","D116C3EE 0000","8116C4A2 0000","D116C556 0001","8116C33A 0001","D116C33A 0001","8116C3EE 0001","D116C3EE 0001","8116C4A2 0001","D116C556 0002","8116C33A 0002","D116C33A 0002","8116C3EE 0002","D116C3EE 0002","8116C4A2 0002","D116C556 0003","8116C33A 0003","D116C33A 0003","8116C3EE 0003","D116C3EE 0003","8116C4A2 0003","D116C556 FFFF","8116C33A FFFF","D116C33A FFFF","8116C3EE FFFF","D116C3EE FFFF","8116C4A2 FFFF","D216C556 FFFF","81079B10 3F80","D1064886 2000","81079B10 3F81","D106488C 2000","81079B10 3F81","D1064892 2000","81079B10 3F81"],"options":null},"Tables\\MOVABLE TABLES\\Part 2":{"note":"You must use both parts for this cheat to work","data":["D116C33A FFFF","8116C382 0000","D116C382 0000","8116C386 0000","D116C386 0000","8116C38A 0000","D116C38A 0000","8116C38E 0000","D116C38E 0000","8116C436 0000","D116C436 0000","8116C43A 0000","D116C43A 0000","8116C43E 0000","D116C43E 0000","8116C442 0000","D116C442 0000","8116C4EA 0000","D116C4EA 0000","8116C4EE 0000","D116C4EE 0000","8116C4F2 0000","D116C4F2 0000","8116C4F6 0000","D116C594 42B4","D116C556 FFFF","8116C378 4335","D116C378 4335","8116C42C 4335","D116C42C 4335","8116C4E0 4335","D116C594 3DC7","D116C556 FFFF","8116C378 42B0","D116C378 42B0","8116C42C 42B0","D116C42C 42B0","8116C4E0 42B0","D1064880 2000","81079B10 3F81","D1079B10 3F81","D116C594 42B4","D116C556 FFFF","8116C378 42F0","D116C378 42F0","8116C42C 42F0","D116C42C 42F0","8116C4E0 42F0","D1079B10 3F81","8116C38A 0F00","D116C38A 0F00","8116C43E 0100","D116C594 3C93","8116C378 42B0","81052D18 0000","81052D1A 0000","D116C54C 0000","8116C54E 0018","D116C550 0000","8116C552 0018"],"options":null},"Tables\\Sabu Table":{"note":"Breakable/Fixable/Rebreakable/Refixable press Z to break, C-right + Cdown to fix","data":["8116C49A 000C","8116C49E 000C","8116C4DC 43CC","8116C4E0 42E6","8116C4E4 C2C5","8116C4EE 0800","8116C602 000C","8116C606 000C","8116C648 42E6","8116C644 43CC","8116C64C C314","81052C54 06E3","81052C5C 09EF","8116C6F8 43CC","8116C6FC 42F0","8116C700 C2F1","8116C70A 0400","8116C428 43CC","8116C430 C2D0","8116C42C 42F0","8116C43A 0C00","8116C6B6 0004","8116C6BA 0004","8116C3E6 0004","8116C3EA 0004","D1064880 2000","81005592 3F81","D1005592 3F81","8116C4EA 0F00","D1005592 3F81","8116C652 0100","D1005592 3F81","8116C4E0 4240","D1005592 3F81","8116C648 4240","D1064880 0005","81005CD4 3F83","D1005CD4 3F83","8116C4EA 0000","D1005CD4 3F83","8116C652 0000","D1005CD4 3F83","8116C4E0 42E6","D1005CD4 3F83","8116C648 42E6","D1005CD4 3F83","D1064880 2000","81005CD4 0000"],"options":null},"Ultimate Code\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF5E 0064"],"options":null},"Ultimate Code\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2B6 0064"],"options":null},"Ultimate Code\\Player 3":{"note":"","data":["D015A5D1 0015","8015B60E 0064"],"options":null},"Ultimate Code\\Player 4":{"note":"","data":["D015A5D1 0015","8015B964 0064"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B490 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B490 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B4A4 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B47C 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8106B4A4 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B47C 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B468 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B468 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B510 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B510 3DFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B564 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B53C 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B564 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B53C 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B528 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B528 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B610 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B610 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B624 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5FC 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B624 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5FC 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5E8 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5E8 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6D0 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6D0 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6E4 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6BC 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8006B6E4 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6BC 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6A8 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6A8 3FFF"],"options":null},"Z LADDER":{"note":"Press Z for the ladder to appear, sometimes there is an invisable ladder","data":["D1064880 2000","8116C768 0000","D1064880 2000","8116C76A 0019","D1064880 2000","8116C76C 0000","D1064880 2000","8116C76E 0019","D1064880 2000","8116C788 8104"],"options":null}},"6D9D1FE4-84D10BEA-C:4A":{"Freeze Timer":{"note":"","data":["810BCBD6 0BB8"],"options":null},"Goal Select Player 1":{"note":"","data":["810B637C 00??"],"options":{"10 Goals":"0A","20 Goals":"14","25 Goals":"19","50 Goals":"32","99 Goals":"63","No Goals":"00"}},"Infinite 99 Credits":{"note":"","data":["800B3961 0063"],"options":null},"Other Team Scores no Goals":{"note":"Disable to allow Other team to score","data":["810B6694 0000"],"options":null}},"6DFDCDC3-4DE701C8-C:45":{"Activate Cheat Menu":{"note":"","data":["80053F38 0001"],"options":null},"Away Team Goals":{"note":"","data":["8012BBBD 00??"],"options":{"Max Score":"FF","No Score":"00"}},"Home Team Goals":{"note":"","data":["8012BBBC 00??"],"options":{"Max Score":"FF","No Score":"00"}}},"70B0260E-6716D04C-C:4A":{"Always Shoot 3-Way":{"note":"","data":["800FD19A 0002"],"options":null},"Always Shoot 5-Way":{"note":"","data":["800FD198 0200"],"options":null},"Always Shoot Rapid Fire":{"note":"","data":["800FD19A 1000"],"options":null},"Have Rune Stones":{"note":"","data":["8104EFC6 1FFF"],"options":null},"Have Window Schards":{"note":"","data":["8104EFCA 000F"],"options":null},"Infinite\\Item On Pickup":{"note":"","data":["50010100 0000","810C5BF6 FFFF"],"options":null},"Infinite\\Keys On Pickup":{"note":"","data":["800C5C97 0006"],"options":null},"Infinite\\Max Health":{"note":"","data":["810C5C54 0000","810C5C56 270F","810C5C64 0000","810C5C66 270F"],"options":null},"Infinite\\Money":{"note":"","data":["810C5CF6 FFFF"],"options":null},"Infinite\\Special Weapons":{"note":"","data":["800C5FF7 0009","800C5D37 0009","800C5D67 0009","800C5DE7 0009","800C5EB7 0009"],"options":null},"Infinite\\Turbo":{"note":"","data":["800FD30F 0064"],"options":null},"Level 99":{"note":"","data":["810C5C44 0000","810C5C46 0063"],"options":null},"Max Armour":{"note":"","data":["810C5C34 0000","810C5C36 FFFF"],"options":null},"Max Magic":{"note":"","data":["810C5C24 0000","810C5C26 FFFF"],"options":null},"Max Speed":{"note":"","data":["810C5C14 0000","810C5C16 FFFF"],"options":null},"Max Strength":{"note":"","data":["810C5C04 0000","810C5C06 FFFF"],"options":null}},"7188F445-84410A68-C:4A":{"Can Skip End Credits":{"note":"","data":["8015627F 0001"],"options":null},"Endless Mode":{"note":"","data":["800854CD 0000"],"options":null},"Maximum Dance Gauge\\Player 1":{"note":"","data":["810854DC 03E8"],"options":null},"Maximum Dance Gauge\\Player 2":{"note":"","data":["81085514 03E8"],"options":null},"Maximum Song Score\\Player 1":{"note":"","data":["8108A260 3B9A","8108A262 C9FF"],"options":null},"Maximum Song Score\\Player 2":{"note":"","data":["8108A264 3B9A","8108A266 C9FF"],"options":null},"Maximum Total Score\\Player 1":{"note":"","data":["810854E0 3B9A","810854E2 C9FF"],"options":null},"Maximum Total Score\\Player 2":{"note":"","data":["81085518 3B9A","8101551A C9FF"],"options":null},"Results\\0 Boo Steps\\Player 1":{"note":"","data":["8108A22A 0000"],"options":null},"Results\\0 Boo Steps\\Player 2":{"note":"","data":["8108A242 0000"],"options":null},"Results\\0 Good Steps\\Player 1":{"note":"","data":["8108A226 0000"],"options":null},"Results\\0 Good Steps\\Player 2":{"note":"","data":["8108A23E 0000"],"options":null},"Results\\0 Miss Steps\\Player 1":{"note":"","data":["8108A22E 0000"],"options":null},"Results\\0 Miss Steps\\Player 2":{"note":"","data":["8108A246 0000"],"options":null},"Results\\999 Great Steps\\Player 1":{"note":"","data":["8108A222 03E7"],"options":null},"Results\\999 Great Steps\\Player 2":{"note":"","data":["8108A23A 03E7"],"options":null},"Results\\999 Perfect Steps\\Player 1":{"note":"","data":["8108A21E 03E7"],"options":null},"Results\\999 Perfect Steps\\Player 2":{"note":"","data":["8108A236 03E7"],"options":null},"Unlock All Puzzles":{"note":"","data":["50001902 0000","81156228 FFFF"],"options":null},"Unlock All Songs":{"note":"","data":["8015621D 00FF","8115621E FFFF"],"options":null}},"72611D7D-9919BDD2-C:58":{"Access All\\Cars":{"note":"","data":["8002CC07 000B"],"options":null},"Access All\\Difficulties":{"note":"","data":["8002CC0B 0004"],"options":null},"Access All\\Multiplayer Levels":{"note":"","data":["50000901 0000","8002CC10 0001"],"options":null},"Access All\\Tracks":{"note":"","data":["8002CC03 0006"],"options":null},"Access In-Game Cheats":{"note":"","data":["50001301 0000","8002CC18 0001"],"options":null},"Damage Select":{"note":"","data":["8002C9A3 00??"],"options":{"Double":"02","Half":"01","Normal":"00","Triple":"03"}},"Health Select":{"note":"","data":["8002C98F 00??"],"options":{"Bad Only":"02","Good Only":"01","Normal":"00","Off":"03"}},"Infinite Continues":{"note":"","data":["8002C867 0064"],"options":null},"Low Timer":{"note":"","data":["810259E4 3001"],"options":null},"Power-Up Select":{"note":"","data":["8002C98B 00??"],"options":{"?":"05","Health":"06","Invincible":"07","Mines":"01","Nitros":"04","Normal":"00","Off":"08","Rockets":"02","Stealer":"03"}},"Radar":{"note":"","data":["8002C99F 00??"],"options":{"Off":"01","On":"00"}},"Speed units\\Kph or Mph":{"note":"","data":["81025A78 ????"],"options":{"Kph":"0100","Mph":"0001"}},"View Mode Select?":{"note":"","data":["8002C99B 00??"],"options":{"Fisheye":"03","Flip":"02","Fog":"01","Normal":"00"}},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\01 Coventry Cove":{"note":"","data":["803653CB 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\02 Mount Mayhem":{"note":"","data":["80355DB3 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\03 Inferno Isle":{"note":"","data":["80366323 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\04 Sunset Sands":{"note":"","data":["80345A93 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\05 Metro Madness":{"note":"","data":["8035FF5B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\06 Wicked Woods":{"note":"","data":["80359043 0064"],"options":null}},"729B5E32-B728D980-C:45":{"Always Shoot 3-Way":{"note":"","data":["800FD19A 0002"],"options":null},"Always Shoot 5-Way":{"note":"","data":["800FD198 0200"],"options":null},"Always Shoot Rapid Fire":{"note":"","data":["800FD19A 1000"],"options":null},"Have Rune Stones":{"note":"","data":["8104EFC6 1FFF"],"options":null},"Have Window Schards":{"note":"","data":["8104EFCA 000F"],"options":null},"Infinite\\Item On Pickup":{"note":"","data":["50010100 0000","810C5BF6 FFFF"],"options":null},"Infinite\\Keys On Pickup":{"note":"","data":["800C5C97 0006"],"options":null},"Infinite\\Max Health":{"note":"","data":["810C5C54 0000","810C5C56 270F","810C5C64 0000","810C5C66 270F"],"options":null},"Infinite\\Money":{"note":"","data":["810C5CF6 FFFF"],"options":null},"Infinite\\Special Weapons":{"note":"","data":["800C5FF7 0009","800C5D37 0009","800C5D67 0009","800C5DE7 0009","800C5EB7 0009"],"options":null},"Infinite\\Turbo":{"note":"","data":["800FD30F 0064"],"options":null},"Level 99":{"note":"","data":["810C5C44 0000","810C5C46 0063"],"options":null},"Max Armour":{"note":"","data":["810C5C34 0000","810C5C36 FFFF"],"options":null},"Max Magic":{"note":"","data":["810C5C24 0000","810C5C26 FFFF"],"options":null},"Max Speed":{"note":"","data":["810C5C14 0000","810C5C16 FFFF"],"options":null},"Max Strength":{"note":"","data":["810C5C04 0000","810C5C06 FFFF"],"options":null}},"72F70398-6556A98B-C:45":{"Always 1st":{"note":"","data":["81118FEC 0001"],"options":null},"Enable In-Game cheat Menu \u0026 Cheats":{"note":"Here you can Activate the IN-Built Cheats Menu. At the Front Screen Just Press C-Button Right.This will open up All Tracks \u0026 Characters In Free Play \u0026 Time Attack. Also In A Race, Press The Start/Pause button to Access the In-Cheat-Menu Option.You can also choose how many Pod's Racers are in the Race \u0026 also how many Laps are in the Race in Free Play \u0026 Time Attack","data":["8009B7D7 0001","8109B7DA FFFF"],"options":null},"Have All Tracks Completed":{"note":"","data":["81113E6A FFFF","81113E6C 3FFF","81113E6E 3FFF","81113E70 3FFF","81113E72 00FF"],"options":null},"Infinite Truguts":{"note":"","data":["81113E7A FFFF","81113E78 7FFF"],"options":null},"No Damage":{"note":"If when Racing Your Pod Over heats \u0026 bursts into flames Press \"R\" \u0026 you will Repair the Damage.","data":["800A52D7 0001"],"options":null},"Unlock All Tracks \u0026 Characters":{"note":"When using Unlock All Tracks \u0026 Characters For can to pick \u0026 choose what ever you want to play As \u0026 where ;)","data":["80113E68 00FF","80113E69 00FF","80113E6A 00FF","80113E6B 00FF","81113E68 FFFF","81113E6A FFFF","80113E74 007D","81113E76 FFFF"],"options":null},"Widescreen":{"note":"Narrow Sprites Widths","data":["81085FC4 2405","81085FC6 01A2","81085FFE 3F25","81011F40 240F","81011F42 00F0","81011FDC 2484","81011FDE 0035","81011FE0 1000","8103D508 0802","8103D50A A0AC","810A82B0 4487","810A82B2 7000","810A82B4 3C1B","810A82B6 3F40","810A82B8 449B","810A82BA 0000","810A82BC 0000","810A82BE 0000","810A82C0 4600","810A82C2 7382","810A82C4 0005","810A82C6 0883","810A82C8 0005","810A82CA 2843","810A82CC 00A1","810A82CE 2821","810A82D0 0800","810A82D2 F544","810A82D4 24A5","810A82D6 0028","8100A726 41D5","8100A768 2405","8100A76A FFCB","8100A5D2 41D5","8100A614 2405","8100A616 FFCB","8100A79A 41D5","8100A7D8 2405","8100A7DA FFCB","8101A690 2405","8101A692 FFCB","8101A6A2 3F2A","81057EEC 2405","81057EEE FFCB","81057EFE 43D5"],"options":null}},"73036F3B-CE0D69E9-C:50":{"Choose A Costume\\Player 1":{"note":"","data":["8104A612 00??"],"options":{"First":"01","Normal":"00","Second":"02","Third":"03"}},"Choose A Costume\\Player 2":{"note":"","data":["8104A616 00??"],"options":{"First":"01","Normal":"00","Second":"02","Third":"03"}},"Enable Restart Match option":{"note":"","data":["800494BB 0002"],"options":null},"Infinite Run\\Player 1":{"note":"","data":["811050FC 0001","811050FE 0000"],"options":null},"Infinite Run\\Player 2":{"note":"","data":["811051B0 0001","811051B2 0000"],"options":null},"Infinite Time":{"note":"","data":["8110524A 0063"],"options":null},"Play As\\Player 1":{"note":"","data":["800FE3C3 00??"],"options":{"Fujin":"05","Goro":"0F","Jarek":"0C","Jax":"0D","Johnny Cage":"0E","Kai":"0B","Liu Kang":"03","Noob Saibot":"11","Quan Chi":"08","Raiden":"01","Reiko":"07","Reptile":"0A","Scorpion":"00","Shinnok":"06","Sonya":"02","Sub-Zero":"04","Tanya":"09"}},"Play As\\Player 2":{"note":"","data":["80126FBF 00??"],"options":{"Fujin":"05","Goro":"0F","Jarek":"0C","Jax":"0D","Johnny Cage":"0E","Kai":"0B","Liu Kang":"03","Noob Saibot":"11","Quan Chi":"08","Raiden":"01","Reiko":"07","Reptile":"0A","Scorpion":"00","Shinnok":"06","Sonya":"02","Sub-Zero":"04","Tanya":"09"}},"Unlimited Energy\\Player 1":{"note":"","data":["810FE208 0001","810FE20A 0000"],"options":null},"Unlimited Energy\\Player 2":{"note":"","data":["81127084 0001","81127086 0000"],"options":null}},"733FCCB1-444892F9-C:50":{"Access All Moves":{"note":"","data":["8037CD70 0001","8037CD71 007F","8037CD72 00FF","8037CD73 00FF"],"options":null},"Do Anywhere Option\\Take off anywhere":{"note":"Press A","data":["D0285734 0080","8037CBA1 0001"],"options":null},"Have\\All Jinjos":{"note":"","data":["8038695B 00FF"],"options":null},"Have\\Blubbers Gold":{"note":"","data":["80386973 00FF"],"options":null},"Have\\Chimpys Oranges":{"note":"","data":["80386977 00FF"],"options":null},"Have\\Eyries Caterpillars":{"note":"","data":["8038699B 00FF"],"options":null},"Have\\Nabnuts Acorns":{"note":"","data":["8038699F 00FF"],"options":null},"Have\\Present Option\\Blue":{"note":"","data":["80386993 00FF"],"options":null},"Have\\Present Option\\Green":{"note":"","data":["8038698F 00FF"],"options":null},"Have\\Present Option\\Red":{"note":"","data":["80386997 00FF"],"options":null},"Have\\Running Shoes":{"note":"","data":["8137CA88 5019"],"options":null},"Have\\Zero Time all Levels":{"note":"","data":["50000B04 0000","813869E4 3000"],"options":null},"Infinite\\255 Eggs":{"note":"","data":["80386947 00FF"],"options":null},"Infinite\\255 Gold Feathers":{"note":"","data":["80386953 00FF"],"options":null},"Infinite\\255 Jigsaws":{"note":"","data":["803869AB 00FF"],"options":null},"Infinite\\255 Notes":{"note":"","data":["80386943 00FF"],"options":null},"Infinite\\255 Red Feathers":{"note":"","data":["8038694F 00FF"],"options":null},"Infinite\\8 Skulls":{"note":"","data":["803869A7 0008"],"options":null},"Infinite\\Air":{"note":"","data":["8038696E 000B"],"options":null},"Infinite\\Health":{"note":"","data":["80386963 0008","80386965 0001"],"options":null},"Infinite\\Lives":{"note":"","data":["8038696B 0009"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0285735 0020","8137CE8C 43E0"],"options":null},"Yumblies Counter\\Banjo":{"note":"","data":["8038697B 00FF"],"options":null},"Yumblies Counter\\Mr Vile":{"note":"","data":["8038697C 00FF"],"options":null}},"7365D8F8-9ED9326F-C:4A":{"Decrease Fodder":{"note":"","data":["81180E44 03E7"],"options":null},"Decrease Material":{"note":"","data":["8118A580 03E7"],"options":null},"Max Money":{"note":"","data":["811FDD2C 000F","811FDD2E 423F"],"options":null}},"736657F6-3C88A702-C:4A":{"Decrease Fodder":{"note":"","data":["81180E44 03E7"],"options":null},"Decrease Material":{"note":"","data":["8118A580 03E7"],"options":null},"Max Money":{"note":"","data":["811FDD2E 423F","811FDD2E 423F"],"options":null}},"736AE6AF-4117E9C7-C:4A":{"Always 1st \u0026 final time 00:00.00":{"note":"All Levels","data":["50000301 0000","801CE6E9 0000"],"options":null},"Difficulty Select":{"note":"","data":["8007C000 00??"],"options":{"Amateur":"00","Intermediate":"01","Mirror Mode":"03","Professional":"02"}},"Frantic Finale\\Colorado\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191992 0063"],"options":null},"Frantic Finale\\Hawaii\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80192072 0063"],"options":null},"Frantic Finale\\Oregon\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018EA42 0063"],"options":null},"Frantic Finale\\Texas\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018F1E2 0063"],"options":null},"Freewayphobia\\Chicago\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80192042 0063"],"options":null},"Freewayphobia\\Dakota\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018D212 0063"],"options":null},"Freewayphobia\\New York\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018F512 0063"],"options":null},"Freewayphobia\\Seattle\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FDF2 0063"],"options":null},"Level Select":{"note":"","data":["801876B9 00??"],"options":{"Contest":"07","Frantic Finale":"04","Freewayphobia":"02","Motor Way Mania":"01","Options":"08","Practice":"06","Time Trial":"05","Traffic Troubles":"00","Vitory Vehicles":"03"}},"Motor Way Mania\\Alaska\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E482 0063"],"options":null},"Motor Way Mania\\Las Vegas\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80192B12 0063"],"options":null},"Motor Way Mania\\Los Angeles\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018DCF2 0063"],"options":null},"Motor Way Mania\\Philadelphia\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80193992 0063"],"options":null},"Play As":{"note":"","data":["800D3161 00??"],"options":{"Daisy Duck":"01","Dewey":"07","Donald Duck":"05","Goofy":"02","Huey":"06","Louie":"08","Lugwig Von Drake":"09","Mickey Mouse":"00","Minnie Mouse":"04","Pete":"03"}},"Traffic Troubles\\Grand Canyon\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80193252 0063"],"options":null},"Traffic Troubles\\Indianapolis\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E892 0063"],"options":null},"Traffic Troubles\\New Mexico\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FD52 0063"],"options":null},"Traffic Troubles\\San Fransisco\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191B62 0063"],"options":null},"Unlock Everything":{"note":"This will unlock all characters, tracks, mirror mode, all in-game cheats, postcards, pluto's collar and give you all Trophies for every track and difficulties. To have this cheat save to mempak, enable it and then go into the Options Menu and disable the cheat. Go to the Wide-Screen Settings and Change it to Wide-Screen [16.9] and then the B button to get back to Wide-Screen Settings, now go back into Wide-Screen [16.9] and change it back to Normal [4.3].and press the B button until you come back to the main Options Menu.Close the game and load it again to see everything saved to the Mempak and unlocked.","data":["800D3208 008F","800D3209 0094","800D320A 0003","800D320C 0001","800D320F 0080","50000502 0000","800D3210 0009","50000502 0000","800D3211 0024","800D321A 0015","800D321B 007F","800D321C 0001","800D321D 00FF","800D321E 0004","800D321F 0022"],"options":null},"Victory Vehicles\\Everglades\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FC22 0063"],"options":null},"Victory Vehicles\\Malibu\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801916B2 0063"],"options":null},"Victory Vehicles\\Washington DC\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80197662 0063"],"options":null},"Victory Vehicles\\Yellowstone\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018D4C2 0063"],"options":null}},"73A88E3D-3AC5C571-C:45":{"Arcade Mode\\Car Modifier":{"note":"","data":["802818B3 00??"],"options":{"Hyundai Coupe EVO 2":"08","Mitsubishi Lancer Evolution V":"00","Nissan Almera Kit Car":"03","Proton WIRA":"07","Seat Cordoba WRC":"04","Skoda Octavia":"05","Subaru Impreza WRC":"01","Toyota Corolla WRC":"02","VW Golf GTI MK IV":"06"}},"Championship Mode\\Australia\\Infinite Damage\\Front End":{"note":"","data":["80178FA0 003E"],"options":null},"Championship Mode\\Australia\\Infinite Damage\\Left Side":{"note":"","data":["80178FA4 0040"],"options":null},"Championship Mode\\Australia\\Infinite Damage\\Right Side":{"note":"","data":["80178FA8 0040"],"options":null},"Championship Mode\\Australia\\Infinite Damage\\Tires":{"note":"","data":["80178FAC 0040"],"options":null},"Championship Mode\\Australia\\Start On 3rd Lap":{"note":"","data":["D0178F6F 0001","80178F6F 0003"],"options":null},"Championship Mode\\Brazil\\Infinite Damage\\Front End":{"note":"","data":["801748E0 0040"],"options":null},"Championship Mode\\Brazil\\Infinite Damage\\Left Side":{"note":"","data":["801748E4 0040"],"options":null},"Championship Mode\\Brazil\\Infinite Damage\\Right Side":{"note":"","data":["801748E8 0040"],"options":null},"Championship Mode\\Brazil\\Infinite Damage\\Tires":{"note":"","data":["801748EC 0040"],"options":null},"Championship Mode\\Brazil\\Start On 3rd Lap":{"note":"","data":["D01748AF 0001","801748AF 0003"],"options":null},"Championship Mode\\Canada\\Infinite Damage\\Front End":{"note":"","data":["8017CFA0 0040"],"options":null},"Championship Mode\\Canada\\Infinite Damage\\Left Side":{"note":"","data":["8017CFA4 0040"],"options":null},"Championship Mode\\Canada\\Infinite Damage\\Right Side":{"note":"","data":["8017CFA8 0040"],"options":null},"Championship Mode\\Canada\\Infinite Damage\\Tires":{"note":"","data":["8017CFAC 0040"],"options":null},"Championship Mode\\Canada\\Start On 3rd Lap":{"note":"","data":["D017CF6F 0001","8017CF6F 0003"],"options":null},"Championship Mode\\France\\Infinite Damage\\Front End":{"note":"","data":["80172490 0040"],"options":null},"Championship Mode\\France\\Infinite Damage\\Left Side":{"note":"","data":["80172494 0040"],"options":null},"Championship Mode\\France\\Infinite Damage\\Right Side":{"note":"","data":["80172498 0040"],"options":null},"Championship Mode\\France\\Infinite Damage\\Tires":{"note":"","data":["8017249C 0040"],"options":null},"Championship Mode\\France\\Start On 3rd Lap":{"note":"","data":["D017245F 0001","8017245F 0003"],"options":null},"Championship Mode\\Germany\\Infinite Damage\\Front End":{"note":"","data":["8017DFA0 0040"],"options":null},"Championship Mode\\Germany\\Infinite Damage\\Left Side":{"note":"","data":["8017DFA4 0040"],"options":null},"Championship Mode\\Germany\\Infinite Damage\\Right Side":{"note":"","data":["8017DFA8 0040"],"options":null},"Championship Mode\\Germany\\Infinite Damage\\Tires":{"note":"","data":["8017DFAC 0040"],"options":null},"Championship Mode\\Germany\\Start On 3rd Lap":{"note":"","data":["D017DF6F 0001","8017DF6F 0003"],"options":null},"Championship Mode\\Great Britain\\Infinite Damage\\Front End":{"note":"","data":["801766C0 0040"],"options":null},"Championship Mode\\Great Britain\\Infinite Damage\\Left Side":{"note":"","data":["801766C4 0040"],"options":null},"Championship Mode\\Great Britain\\Infinite Damage\\Right Side":{"note":"","data":["801766C8 0040"],"options":null},"Championship Mode\\Great Britain\\Infinite Damage\\Tires":{"note":"","data":["801766CC 0040"],"options":null},"Championship Mode\\Great Britain\\Start On 3rd Lap":{"note":"","data":["D017668F 0001","8017668F 0003"],"options":null},"Championship Mode\\Have 255 Race Points":{"note":"","data":["80101D1A 00FF"],"options":null},"Championship Mode\\Italy\\Infinite Damage\\Front End":{"note":"","data":["8017E500 0040"],"options":null},"Championship Mode\\Italy\\Infinite Damage\\Left Side":{"note":"","data":["8017E504 0040"],"options":null},"Championship Mode\\Italy\\Infinite Damage\\Right Side":{"note":"","data":["8017E508 0040"],"options":null},"Championship Mode\\Italy\\Infinite Damage\\Tires":{"note":"","data":["8017E50C 0040"],"options":null},"Championship Mode\\Italy\\Start On 3rd Lap":{"note":"","data":["D017E4CF 0001","8017E4CF 0003"],"options":null},"Championship Mode\\Spain\\Infinite Damage\\Front End":{"note":"","data":["801870F0 0040"],"options":null},"Championship Mode\\Spain\\Infinite Damage\\Left Side":{"note":"","data":["801870F4 0040"],"options":null},"Championship Mode\\Spain\\Infinite Damage\\Right Side":{"note":"","data":["801870F8 0040"],"options":null},"Championship Mode\\Spain\\Infinite Damage\\Tires":{"note":"","data":["801870FC 0040"],"options":null},"Championship Mode\\Spain\\Start On 3rd Lap":{"note":"","data":["D01870BF 0001","801870BF 0003"],"options":null},"Championship Mode\\USA\\Infinite Damage\\Front End":{"note":"","data":["8017EFA0 0040"],"options":null},"Championship Mode\\USA\\Infinite Damage\\Left Side":{"note":"","data":["8017EFA4 0040"],"options":null},"Championship Mode\\USA\\Infinite Damage\\Right Side":{"note":"","data":["8017EFA8 0040"],"options":null},"Championship Mode\\USA\\Infinite Damage\\Tires":{"note":"","data":["8017EFAC 0040"],"options":null},"Championship Mode\\USA\\Start On 3rd Lap":{"note":"","data":["D017EF6F 0001","8017EF6F 0003"],"options":null},"Easy Courses\\Australia\\Always Low Lap Timer":{"note":"","data":["81178F90 0000","81178F92 0000"],"options":null},"Easy Courses\\Australia\\Have 1st":{"note":"","data":["80178F87 0000"],"options":null},"Easy Courses\\Great Britian\\Always Low Lap Timer":{"note":"","data":["811766B0 0000","811766B2 0000"],"options":null},"Easy Courses\\Great Britian\\Have 1st":{"note":"","data":["801766A7 0000"],"options":null},"Easy Courses\\Spain\\Always Low Lap Timer":{"note":"","data":["811870E0 0000","811870E2 0000"],"options":null},"Easy Courses\\Spain\\Have 1st":{"note":"","data":["801870D7 0000"],"options":null},"Expert Courses\\Canada\\Always Low Lap Timer":{"note":"","data":["8117CF90 0000","8117CF92 0000"],"options":null},"Expert Courses\\Canada\\Have 1st":{"note":"","data":["8017CF87 0000"],"options":null},"Expert Courses\\Germany\\Always Low Lap Timer":{"note":"","data":["8117DF90 0000","8117DF92 0000"],"options":null},"Expert Courses\\Germany\\Have 1st":{"note":"","data":["8017DF87 0000"],"options":null},"Expert Courses\\USA\\Always Low Lap Timer":{"note":"","data":["8117EF90 0000","8117EF92 0000"],"options":null},"Expert Courses\\USA\\Have 1st":{"note":"","data":["8017EF87 0000"],"options":null},"Infinite Time":{"note":"","data":["81104998 49F2"],"options":null},"Medium Courses\\Brazil\\Always Low Lap Timer":{"note":"","data":["811748D0 0000","811748D2 0000"],"options":null},"Medium Courses\\Brazil\\Have 1st":{"note":"","data":["801748C7 0000"],"options":null},"Medium Courses\\France\\Always Low Lap Timer":{"note":"","data":["81172480 0000","81172482 0000"],"options":null},"Medium Courses\\France\\Have 1st":{"note":"","data":["80172477 0000"],"options":null},"Medium Courses\\Italy\\Always Low Lap Timer":{"note":"","data":["8117E4D0 0000","8117E4D2 0000"],"options":null},"Medium Courses\\Italy\\Have 1st":{"note":"","data":["8017E4E7 0000"],"options":null}},"73ABB1FB-9CCA6093-C:45":{"Always 1st":{"note":"","data":["8022AD06 0001"],"options":null},"Class Select":{"note":"This code is useful because you can play Class AA without having to beat a level!","data":["8021E1A7 00??"],"options":{"1 Play":"04","2 Play":"05","3 Play":"06","4 Play":"07","Class AA":"03","Class B":"01","Class C":"00"}},"Super Speed":{"note":"This is Turbo fast,So to slow it down a little more keep the B button pressed down","data":["8122AEB8 4800"],"options":null}},"7433D9D7-2C4322D0-C:50":{"Have All\\Weapons and Infinite Max Ammo\\Level 01":{"note":"","data":["50000904 0000","802A46AB 0001","50000604 0000","812A46CE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 02":{"note":"","data":["50000904 0000","8028A47B 0001","50000604 0000","8128A49E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 03":{"note":"","data":["50000904 0000","8027223B 0001","50000604 0000","8127225E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 04":{"note":"","data":["50000904 0000","8026A70B 0001","50000604 0000","8126A72E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 05":{"note":"","data":["50000904 0000","8028812B 0001","50000604 0000","8128814E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 06":{"note":"","data":["50000904 0000","8027DA0B 0001","50000604 0000","8127DA2E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 07":{"note":"","data":["50000904 0000","802811CB 0001","50000604 0000","812811EE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 08":{"note":"","data":["50000904 0000","8027C45B 0001","50000604 0000","8127C47E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 09":{"note":"","data":["50000904 0000","80247C7B 0001","50000604 0000","81247C9E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 10":{"note":"","data":["50000904 0000","80276C4B 0001","50000604 0000","81276C6E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 11":{"note":"","data":["50000904 0000","80278AFB 0001","50000604 0000","81278B1E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 12":{"note":"","data":["50000904 0000","8028F69B 0001","50000604 0000","8128F6BE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 13":{"note":"","data":["50000904 0000","80278A4B 0001","50000604 0000","81278A6E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 14":{"note":"","data":["50000904 0000","802807DB 0001","50000604 0000","812807FE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 15":{"note":"","data":["50000904 0000","8027636B 0001","50000604 0000","8127638E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 16":{"note":"","data":["50000904 0000","8028B7FB 0001","50000604 0000","8128B81E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 17":{"note":"","data":["50000904 0000","8027278B 0001","50000604 0000","812727AE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 18":{"note":"","data":["50000904 0000","8026594B 0001","50000604 0000","8126596E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 19":{"note":"","data":["50000904 0000","8024A28B 0001","50000604 0000","8124A2AE 03E7"],"options":null},"Invincible":{"note":"","data":["8002E618 0000"],"options":null},"Status Bar Always On":{"note":"","data":["8008E4CF 0001"],"options":null}},"7435C9BB-39763CF4-C:4A":{"Sixty Frames":{"note":"","data":["80079D3B 0003"],"options":null},"Widescreen":{"note":"","data":["810660D6 3FE3","81066226 3FE3","8106628E 3FE3","81127C04 3FE3"],"options":null}},"74E87A70-6293AED4-C:50":{"Cheats Enabled Modifier":{"note":"","data":["8108F8F0 ????"],"options":{"Anyway (Race Circuits Backwards)":"0400","Big Wheels (Big Foot Cars)":"0040","Car Radio (Remote Control Cars)":"0100","Chopper (Top Down View)":"0200","Easy Money (You Get 1":"0008","Extra Resolution (Able To Change Resolution In Options Screen)":"0800","Fast Bucks (You Get 250":"0004","Skywalker (Hover Cars)":"0080","Smurfing (High Pitched Voices)":"0020","Trophies (Second And Third Championships Wins)":"0010"}},"Have\\Access All Trophies":{"note":"Also gives you all extra features in quick race \u0026 Trophy mode","data":["800BAA9B 0007","800BACAF 0007"],"options":null},"Have\\Always 1st":{"note":"","data":["800C1F81 0001","800C1F83 0001"],"options":null},"Have\\Easy Win":{"note":"Right After Start,Go, Quit Race, And you Have Won","data":["800BACAD 000A"],"options":null},"Have\\Infinite Supply Of Super Tires":{"note":"For All Cars","data":["5000220C 0000","810BAD58 0F0F","5000220C 0000","810BAD5A 0F0F"],"options":null},"Have\\Lots Of Seasons":{"note":"","data":["810BACAA 03E7"],"options":null},"Have\\Max Cash":{"note":"","data":["810BACA4 3AFF","810BACA6 F454"],"options":null},"Have\\Max Race Points":{"note":"","data":["800BACBE 00FF"],"options":null},"Have\\Max Upgrade":{"note":"For All Cars","data":["5000220C 0200","810BAD56 0270"],"options":null},"Race Options\\Laps To Race Select":{"note":"","data":["800A4649 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Race Options\\Race Direction Select":{"note":"","data":["800A4601 00??"],"options":{"Mirrored Normal":"02","Mirrored Reverse":"03","Normal":"00","Reverse":"01"}},"Race Options\\Track Select":{"note":"","data":["8008FA5D 00??"],"options":{"Area 51":"04","Chateau":"07","Docklands":"08","Lumber Mill":"03","Oilfields":"05","Rocket Base":"00","Ski Resort":"02","Temple":"01","Titus Park":"09","Tudor Village":"06"}},"Race Options\\View Select":{"note":"Select your View and then at start of Race press C-Up Button","data":["D00C2171 0000","800C2171 00??"],"options":{"Behind View":"01","Distant Behind View":"0B","Further Behind View":"02","Helicopter View":"FF","Inside Car":"00"}},"Special Category\\A Car [Mind Star 600]":{"note":"","data":["810BAE8E 3D70","810BAE90 0F0F","810BAE92 0F0F"],"options":null},"Special Category\\B Car [Vertige Stallion]":{"note":"","data":["810BAE16 2378","810BAE18 0F0F","810BAE1A 0F0F"],"options":null},"Special Category\\C Car [Mind Star 200R]":{"note":"","data":["810BAD86 0A78","810BAD88 0F0F","810BAD8A 0F0F"],"options":null}},"75A4E247-6008963D-C:45":{"Brandon Gang":{"note":"","data":["80125AB6 0001"],"options":null},"Cassandra Gang":{"note":"","data":["80125AB5 0001"],"options":null},"Edge Hits Everything":{"note":"","data":["80071AF0 0043"],"options":null},"Enable Models":{"note":"","data":["80125AB3 0001"],"options":null},"Infinite Tank Bucks":{"note":"","data":["80236A9F 0064"],"options":null},"Invulnerability":{"note":"","data":["80125AB0 0001"],"options":null},"Level Select":{"note":"","data":["80117F49 0001"],"options":null},"Mini-Tanks 1":{"note":"","data":["80125AB8 0001"],"options":null},"Mini-Tanks 2":{"note":"","data":["80125AB9 0001"],"options":null},"Mini-Tanks 3":{"note":"","data":["80125AB9 0001"],"options":null},"Mini-Tanks 4":{"note":"","data":["80125ABB 0001"],"options":null},"Mini-Tanks 5":{"note":"","data":["80125ABC 0001"],"options":null},"Rapid Fire":{"note":"","data":["8008E7F0 0001"],"options":null},"Secret Level":{"note":"","data":["80125AB2 0001"],"options":null},"Start With All Weapons":{"note":"","data":["80125AB1 0001"],"options":null}},"75B61647-7ADABF78-C:45":{"Max Score":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null},"Press L Button for Max Gauge\\Player 1":{"note":"","data":["D00B49D1 0020","811D2602 0098"],"options":null},"Press L Button for Max Gauge\\Player 2":{"note":"","data":["D00B49D7 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}}},"75FA0E14-C9B3D105-C:44":{"Earn Spirits Faster":{"note":"","data":["8007D66D 0000"],"options":null},"Have All Elements":{"note":"","data":["8107D65C 3232","8107D65E 3232"],"options":null},"Makes your HP 999-999":{"note":"","data":["8107D63C 03E7","8107D63E 03E7"],"options":null},"Makes your MP 999-999":{"note":"","data":["8107D640 03E7","8107D642 03E7"],"options":null},"No Random Battles":{"note":"","data":["8008E12C 0000","8008E12E 0000"],"options":null},"Set Agility to 999-999":{"note":"","data":["8107D644 03E7"],"options":null},"Set Defence to 999-999":{"note":"","data":["8107D646 03E7"],"options":null}},"769147F3-2033C10E-C:45":{"Always Have Equipped\\Player 1":{"note":"","data":["8039B144 00??","8039B147 00??","8039B149 0009"],"options":{"Boomerang":"04","Bullets":"07","Magnet":"01","Seeker":"05","Shield":"08","Stinger":"03","Stopper":"06","Turbo":"00"}},"Always Have Equipped\\Player 2":{"note":"","data":["8039B3E4 00??","8039B3E7 00??","8039B3E9 0009"],"options":{"Boomerang":"04","Bullets":"07","Magnet":"01","Seeker":"05","Shield":"08","Stinger":"03","Stopper":"06","Turbo":"00"}},"Always Have Equipped\\Player 3":{"note":"","data":["8039B684 00??","8039B687 00??","8039B689 0009"],"options":{"Boomerang":"04","Bullets":"07","Magnet":"01","Seeker":"05","Shield":"08","Stinger":"03","Stopper":"06","Turbo":"00"}},"Always Have Equipped\\Player 4":{"note":"","data":["8039B924 00??","8039B927 00??","8039B929 0009"],"options":{"Boomerang":"04","Bullets":"07","Magnet":"01","Seeker":"05","Shield":"08","Stinger":"03","Stopper":"06","Turbo":"00"}},"Game Speed":{"note":"","data":["802C9339 00??"],"options":{"Advanced":"02","Default":"01","Master":"03","Novice":"00"}},"Have All\\Cars":{"note":"","data":["50000402 0000","803DF94B 0001"],"options":null},"Have All\\Cups,Tracks \u0026 Challenges":{"note":"","data":["50000302 0000","802CB4A9 0001","50000402 0000","803DD109 0001"],"options":null},"Infinite Credits":{"note":"","data":["80388C1D 0009"],"options":null},"Max Score Points":{"note":"","data":["8139AFB6 03E7"],"options":null},"Sixty Frames (odd again)":{"note":"Too fast like the other one,tis' a shame.","data":["802ADD4B 0001","802ADD7B 0001"],"options":null}},"776646F6-06B9AC2B-C:50":{"Boost From Start":{"note":"","data":["D02C4DA0 003F","802C4925 0050"],"options":null},"Infinite Lives":{"note":"","data":["800D8729 0005"],"options":null},"Infinite Shield":{"note":"","data":["812C4B48 4326","812C4B4C 4326"],"options":null},"Time Always 00.00.00/1st Place":{"note":"","data":["812C4BC0 0000","812C4BC2 0001"],"options":null},"Unlock Everything":{"note":"","data":["810C01E8 0100"],"options":null}},"782A9075-E552631D-C:44":{"Have 99 coins":{"note":"","data":["810BBBDE 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C8542 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BBBCC 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BBBD6 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BBBDA 0009"],"options":null}},"7928FE93-135A30CB-C:45":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118D8C0 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118D8C2 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118D8C4 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118D8C6 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["50000401 0000","8018ED10 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\1-2 player Mode\\Player 1":{"note":"","data":["80165F5D 00??","80165F8A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\1-2 player Mode\\Player 2":{"note":"","data":["8016603D 00??","8016606A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["8016611D 00??","8016614A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["801661FD 00??","8016622A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["801662DD 00??","8016630A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["801663BD 00??","801663EA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818EDEF 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F6915 0020","810F69C8 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F6925 0020","810F77A0 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F6935 0020","810F8578 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F6945 0020","810F9350 4000"],"options":null}},"7A65FDEC-50296300-C:45":{"All 64 Characters In Multi Player":{"note":"","data":["8002B197 0040"],"options":null},"All Objectives Complete":{"note":"","data":["80036FD3 0001"],"options":null},"Always Have\\00:00 Time (All Levels)":{"note":"","data":["8004837E 0000","8004838E 0000","80048396 0000","80079A22 0000","80079F26 0000"],"options":null},"Bulletproof Bond":{"note":"","data":["8002CE44 0030"],"options":null},"Cradle in multiplayer":{"note":"Puts the cradle graphic in the levels screen where the facility normally is in the multiplayer levels screen.Warning it doesn't allow you to enter the multiplayer levels screen,it should automatically Have\\selected cradle, which cannot be changed from the multiplayer menus","data":["8002B11D 0092","8002B11F 0093","8002B127 0029","8002B123 0008","802ADC8D 0052","802ADC8E 0041","802ADC8F 0044","802ADC90 004C","802ADC91 0045"],"options":null},"Custom Weapon Grouping":{"note":"golden gun fun should replace slappers only! appears in the multi weapons.","data":["80048673 0013","81048678 3FC0","80048677 00D0","8004867F 000D","80048683 000A","8004868B 0013","81048690 3FC0","8004868F 00D0","80048697 000D","8004869B 000A","800486A3 0019","810486A8 3FC0","800486A7 00D3","800486AF 0006","800486B3 0003","800486BB 0019","810486C0 3FC0","800486BF 00D3","800486C7 0006","800486CB 0003","800486D3 0013","810486D8 3FC0","800486D7 00D0","800486DF 000D","800486E3 000A","800486EB 0013","810486F0 3FC0","800486EF 00D0","800486F7 000D","800486FB 000A","80048703 0019","81048708 3FC0","80048707 00D3","8004870F 0006","80048713 0003","8004871B 0019","81048720 3FC0","8004871F 00D3","80048727 0006","8004872B 0003","812AEA50 476F","812AEA52 6C64","812AEA54 656E","812AEA56 2047","812AEA58 756E","812AEA5A 2046","812AEA5C 756E","802AEA5E 0000"],"options":null},"Enable All Levels":{"note":"","data":["80036FB7 0001"],"options":null},"Enable All Levels \u0026 In-Built Cheat Menu":{"note":"","data":["8006992E FFFF","80069930 FFFF","80069967 FFFF","8006996C FFFF","80069971 FFFF","80069976 FFFF","8006997B FFFF","8006992F FFFF","80069965 FFFF","8006996A FFFF","8006996F FFFF","80069974 FFFF","80069979 FFFF"],"options":null},"Facility Back Zone In Multiplayer\\Part 1\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811E6554 45E4","811E6558 43D5","811E655C C5A7","811E657C 801C","811E657E 6774","811E5164 45E4","811E5168 C383","811E516C 4492","811E518C 801C","811E518E D574","811E78C0 45AD","811E78C4 C383","811E78C8 4440","811E78E8 801C","811E78EA E464","811E4D18 45D0","811E4D1C 4307","811E4D20 C4FB","811E4D40 801C","811E4D42 75EC","811E6738 45CD","811E673C C383","811E6740 43F4","811E6760 801C","811E6762 A0DC","811E5450 45C2","811E5454 4356","811E5458 C598","811E5478 801C","811E547A 6A74","811E5240 4608","811E5244 4307","811E5248 43DC","811E5268 801C","811E526A 962C","811E691C 4606","811E6920 4321","811E6924 449D","811E6944 801C","811E6946 CBEC","801ED447 008A","801ED4DB 008B","801ED56F 008C","801ED603 008D","801ED697 008E","801ED72B 008F","801ED7BF 007D","801ED853 007E","801ED443 002A","801ED4D7 002A","801ED56B 002A","801ED5FF 002A","801ED693 002A","801ED727 002A","801ED7BB 002A","801ED84F 002A","801ED449 0000","801ED4DD 0000","801ED571 0000","801ED605 0000","801ED699 0000","801ED72D 0000","801ED7C1 0000","801ED855 0000","801ED44D 0000","801ED4E1 0000","801ED575 0000","801ED609 0000","801ED69D 0000","801ED731 0000","801ED7C5 0000","801ED859 0000","801EB743 002A","801EB745 0068","811EB746 277F","811EB748 1000","811EB74A 0262","811EB7C2 0190","801EB7C5 0000","811EB7C6 0258"],"options":null},"Facility Back Zone In Multiplayer\\Part 2\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811EB7C8 0000","811EB7CC FFFF","811EB7CE FFFF","811EB7D2 0000","801EB7D5 0000","801EB7DB 0000","811EB7E2 0000","801EB7E7 0000","801EB843 002A","801EB845 0068","811EB846 2780","811EB848 1000","811EB84A 0262","811EB8C2 0190","801EB8C5 0000","811EB8C6 0258","811EB8C8 0000","811EB8CC FFFF","811EB8CE FFFF","811EB8D2 0000","801EB8D5 0000","801EB8DB 0000","811EB8E2 0000","801EB8E7 0000","801EB943 002A","801EB945 0068","811EB946 2791","811EB948 1000","811EB94A 0262","811EB9C2 0190","801EB9C5 0000","811EB9C6 0258","811EB9C8 0000","811EB9CC FFFF","811EB9CE FFFF","811EB9D2 0000","801EB9D5 0000","801EB9DB 0000","811EB9E2 0000","801EB9E7 0000","801EBA43 002A","801EBA45 0068","811EBA46 2792","811EBA48 1000","811EBA4A 0262","811EBAC2 0190","801EBAC5 0000","811EBAC6 0258","811EBAC8 0000","811EBACC FFFF","811EBACE FFFF","811EBAD2 0000","801EBAD5 0000","801EBADB 0000","811EBAE2 0000","801EBAE7 0000","801EBB45 00A0","801EBC45 00A0","801EBD45 00A0","801EBE45 00A0","801EBB47 0075","801EBC47 0076","801EBD47 0077","801EBE47 0078","801EBBE7 0001","801EBCE7 0001","801EBDE7 0001","801EBEE7 0001","801EC247 0071","801ECD47 0072","801ECE47 0074","801ECF47 006C","801ED047 0079","801ED147 0083","D01EBFC5 005A","801EBFC5 0000","D11EBFC6 0000","811EBFC6 F333","D11EBFC8 03E8","811EBFC8 0000"],"options":null},"Facility Back Zone In Multiplayer\\Part 3\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["D11EBFCA 0000","811EBFCA F0C4","D11EBFCE 4CCC","811EBFCE 000A","D11EBFD2 4CCC","811EBFD2 000A","D11EBFD4 0003","811EBFD4 0000","D11EBFD6 0000","811EBFD6 02C4","801EBFD9 0004","801EBFDB 0000","811EBFE2 0384","801EBFE7 0004","801EBF45 009E","801EBF47 0084","801EBF48 0010","801EC2D9 0000","801EC447 0085","801EC547 0086","811EA6B6 2743","811EA73E 0114","811EA7F2 0115","811EA8A6 00A3","811EA92E 009D","811EA9E2 00A4","811EAA96 00DA","811EAB1E 00DB","811EABD2 00DF","811EAC86 0130","811EAD0E 008D","811EADC2 012E","811EAE76 0111","811EAEFE 2740","811EAFB2 2741","811EB066 00A0","811EB0EE 009E","811EB1A2 009F","811EB256 274F","811EB2DE 2750","811EB392 0117","811EB446 0131","811EB4CE 008E","811EB582 0132","811EB636 00A1","811EB6BE 0119","811EA62E 00FA","801ED3DF 0000","801ED2DF 0001","D0024337 0007","80024337 001F"],"options":null},"Gain Access\\To Aztec Level Without Beating Secret Agent Or 00 Agent":{"note":"","data":["8002A8FB 001A"],"options":null},"Gain Access\\To Egyptian Level Without Beating Secret Agent Or 00 Agent":{"note":"","data":["8002A8FB 001C"],"options":null},"Infinite Ammo (All Levels)":{"note":"","data":["80079E3B 0001"],"options":null},"Infinite Health Player 1 (all levels)":{"note":"","data":["8100C0F4 0801","8100C0F6 8090","8100C0F8 AFA4","8100C0FA 0000","81060240 0004","81060242 7600","81060244 3C02","81060246 8008","81060248 8C42","8106024A 9EE0","8106024C 3401","8106024E 3F80","81060250 A441","81060252 00DC","81060254 0800","81060256 303F"],"options":null},"Replace Cradle with Citadell hidden level":{"note":"","data":["8002A8F7 0029","8104468A 8970","81044690 3F44","81044692 BDEA","81044694 3F80","81044696 0000","81044698 4219","8104469A D89D","80069F80 00C4"],"options":null},"Secret Island on Dam Level":{"note":"For the above code to work,Get to the 2nd guard tower \u0026 go down the ladder on the left hand side \u0026 to the end of the Dock, Press L \u0026 GS and you will be transfered in the water. Just keep walking straight \u0026 you will get to it. Obviously you can't actually climb ladders or anything, you will simply walkthrough anything on that Part, if you want to walk back to the Dock, when you come near it click the cheat back on \u0026 keep pressing L \u0026 GS untill you are back on it.","data":["D0064F31 0020","800D33ED 0050","880D33ED 0000"],"options":null},"Walk through doors, objects":{"note":"","data":["800364CB 00??"],"options":{"Off":"01","On":"00"}},"Weak Enemies":{"note":"","data":["8002CE48 0048"],"options":null}},"7AA65B36-FDCEE5AD-C:4A":{"Always Have\\BFG 9000":{"note":"","data":["80063B4B 0001"],"options":null},"Always Have\\Bio Suite":{"note":"","data":["80063AF3 00??"],"options":{"Off":"00","On":"FF"}},"Always Have\\Chain Gun":{"note":"","data":["80063B3F 0001"],"options":null},"Always Have\\Chainsaw":{"note":"","data":["80063B2B 0001"],"options":null},"Always Have\\Double Shotgun":{"note":"","data":["80063B3B 0001"],"options":null},"Always Have\\Gun":{"note":"","data":["80063B33 0001"],"options":null},"Always Have\\Have Rocket Launcher":{"note":"","data":["80063B41 0001"],"options":null},"Always Have\\Laser Weapon":{"note":"","data":["80063B4D 0001"],"options":null},"Always Have\\Missile Launcher":{"note":"","data":["80063B43 0001"],"options":null},"Always Have\\Plasma Rifle":{"note":"","data":["80063B47 0001"],"options":null},"Always Have\\Rapid Fire":{"note":"","data":["81063BAA 0B94"],"options":null},"Always Have\\Shotgun":{"note":"","data":["80063B37 0001"],"options":null},"Berserk Mode":{"note":"","data":["80063AEB 00FF"],"options":null},"Enable Cheat Menu":{"note":"","data":["8005B043 0001"],"options":null},"Have All\\Keys":{"note":"","data":["50000504 0000","81063AFE FFFF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000A04 0000","81063B2A 0001"],"options":null},"Infinite\\Ammo All Weapons":{"note":"","data":["50000404 0000","81063B52 013C"],"options":null},"Infinite\\Armor":{"note":"","data":["80063ADF 00FF"],"options":null},"Invincible":{"note":"","data":["80063B7B 0002"],"options":null},"Invincible And Map Markers":{"note":"","data":["80063B7B 0006"],"options":null},"Turn Map Markers On":{"note":"","data":["80063B7B 0004"],"options":null},"[Max Brightness]":{"note":"Enable this cheat on rom load to have Max Brightness (internal) and then put Jabo d3d8 on 160% Max for a extra brightness Boost.","data":["8005B598 0064"],"options":null}},"7BB18D40-83138559-C:55":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2CD2 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE51F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80382CB7 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","80202BB5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","801DE715 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","801FD085 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","801F042D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","80202CE5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","801DA57D 0001"],"options":null}},"7C3829D9-6E8247CE-C:45":{"Lower Left Character\\Coin Options":{"note":"","data":["810D1182 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDC6D 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800D1186 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["810D11BA 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDCB9 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800D11BE 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["810D1112 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDBD5 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800D1116 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["810D114A 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDC21 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800D114E 00??"],"options":{"0 Stars":"00","99 Stars":"64"}}},"7C647C25-D9D901E6-C:45":{"Ballista Can Drive Through Anything":{"note":"","data":["803F8A68 0001"],"options":null},"Found All\\RDUS":{"note":"","data":["8036E9CC C350"],"options":null},"Found All\\Scientists":{"note":"","data":["80364AD0 003F"],"options":null},"Found All\\Survivors":{"note":"","data":["8036E9C9 00FF"],"options":null},"Infinite Time":{"note":"","data":["D0315610 0000","81315610 0000","D0315612 0001","81315612 0000"],"options":null},"Infinite\\Boosts Buggy Vehicle":{"note":"","data":["803EE301 0064"],"options":null},"Infinite\\Hydraulics Sidesweeper":{"note":"","data":["803EDB51 0063"],"options":null},"Infinite\\Missiles Motor Bike":{"note":"","data":["803F8AC3 0063"],"options":null}},"7C647E65-1948D305-C:45":{"Ballista Can Drive Through Anything":{"note":"","data":["803F8B17 0001"],"options":null},"Found All\\RDUS":{"note":"","data":["8036EA7C C350"],"options":null},"Found All\\Scientists":{"note":"","data":["80364B80 003F"],"options":null},"Found All\\Survivors":{"note":"","data":["8036EA70 00FF"],"options":null},"Infinite Time":{"note":"","data":["D03156C0 0000","813156C0 0000","D03156C2 0001","813156C2 0000"],"options":null},"Infinite\\Boosts Buggy Vehicle":{"note":"","data":["803EE3B0 0064"],"options":null},"Infinite\\Hydraulics Sidesweeper":{"note":"","data":["803EDC00 0063"],"options":null},"Infinite\\Missiles Motor Bike":{"note":"","data":["803F8B72 0063"],"options":null}},"7C64E6DB-55B924DB-C:50":{"Ballista Can Drive Through Anything":{"note":"","data":["803F8A68 0001"],"options":null},"Found All RDUS":{"note":"","data":["8036E9CC C350"],"options":null},"Found All Scientists":{"note":"","data":["80364AD0 003F"],"options":null},"Found All Survivors":{"note":"","data":["8036E9C9 00FF"],"options":null},"Infinite Boosts Buggy Vehicle":{"note":"","data":["803EE301 0064"],"options":null},"Infinite Hydraulics Sidesweeper":{"note":"","data":["803EDB51 0063"],"options":null},"Infinite Missiles Motor Bike":{"note":"","data":["803F8AC3 0063"],"options":null}},"7CD08B12-1153FF89-C:45":{"Can Walk When The Game Is Paused":{"note":"","data":["810AB9B6 0001"],"options":null},"Have All\\Keys":{"note":"This will give you the Grey \u0026 Red,Green \u0026 Gold Keys","data":["800BD0B8 00FF","800BD0BE 00FF","800BD0BD 00FF"],"options":null},"Have All\\Music Notes":{"note":"This will give you all 10 Music Notes","data":["50000A01 0000","800BD1F0 0001"],"options":null},"Infinite\\Health":{"note":"","data":["800BD0F7 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["800BD0E3 0009"],"options":null},"Max Money":{"note":"","data":["810BD0E6 03E7"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D017DBC5 0020","810DAFD8 44CB"],"options":null}},"7DE11F53-74872F9D-C:45":{"99 Points":{"note":"","data":["801CB0A3 0063"],"options":null},"Always First Place":{"note":"","data":["801C269F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801C2983 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801C295E 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801C27C7 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801C2DEA 0005","801C308A 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801C27CF 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800DA753 0007"],"options":null},"Open\\Course Option":{"note":"This works in all modes except for Championship Mode.","data":["801CAFEB 00??"],"options":{"Dolphin Park":"00","Drake Lake":"03","Glacier Coast":"07","Marian Fortress":"04","Port Blue":"05","Southern Island":"08","Sunny Beach":"01","Sunset Bay":"02","Twilight City":"06"}},"Open\\Difficulty Option":{"note":"","data":["801CAFE0 00??"],"options":{"Dolphin":"10","Dolphin \u0026 Expert":"12","Dolphin \u0026 Hard":"11","Dolphin Hard \u0026 Expert":"13","Expert":"02","Hard":"01","Hard \u0026 Expert":"03"}},"Open\\Level Option":{"note":"","data":["800DA753 00??"],"options":{"Above \u0026 Drake Lake":"03","All Above \u0026 Glacier Coast":"16","All Above \u0026 Marine Fortress":"04","All Above \u0026 Port Blue":"05","All Above \u0026 Southern Island":"06","All Above \u0026 Twilight City":"0D","Sunset Bay":"02"}},"Super Speed":{"note":"","data":["801C27C7 0005","D0154051 0010","801C27C7 0020"],"options":null},"Widescreen":{"note":"","data":["810699FA 3FE3","811E11F2 3FE3","811EF3F2 3FE3","811F07E6 3FE3","D12C58C2 4204","812C58C6 3FAA","D12C5896 8C50","812C5890 3C07","D12C5896 8C50","812C5892 3FAA"],"options":null}},"7EAE2488-9D40A35A-C:4A":{"Have All Guns In Chest":{"note":"","data":["50000E04 0100","810E5474 05FF"],"options":null},"Have All Main Items In Chest":{"note":"If you want items that are not listed in the Chest, then just use the Have Item On Slot Select code to have what you desire.","data":["810E54AC 17FF","810E54B0 1EFF","810E54B4 1FFF","810E54B8 23FF","50000404 0100","810E54BC 25FF","810E54CC 2AFF","810E54D0 2BFF","50000304 0100","810E54D4 2EFF","50000F04 0100","810E54E0 32FF","810E551C 43FF","50000504 0100","810E5520 47FF","50000404 0100","810E5534 53FF","50000C04 0100","810E5544 58FF"],"options":null},"Have\\Fine Condition Always":{"note":"","data":["810DD964 0000"],"options":null},"Have\\Item On Slot Select\\Slot 01":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5448 00??","800E5449 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 02":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E544C 00??","800E544D 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 03":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5450 00??","800E5451 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 04":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5454 00??","800E5455 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 05":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5458 00??","800E5459 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 06":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E545C 5D??","800E545D 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 07":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5460 00??","800E5461 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 08":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5464 00??","800E5465 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 09":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5468 00??","800E5469 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 10":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E546C 00??","800E546D 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Infinite\\Health":{"note":"","data":["810DD8A2 00C8"],"options":null},"Infinite\\Time":{"note":"","data":["800E8CBF 0010"],"options":null},"Play As":{"note":"This allows you to select what character you wish to play as. Just slect on load and select as normal at the menu and when in game you will be the character of your choice","data":["810DD6B8 ????"],"options":{"Ada (can crash the game)":"0E80","Cheryl":"0F80","Claire Original":"0380","Claire as Biker":"0980","Claire without jacket":"0780","Claires body Leons outfit":"0B80","Hunk (can crash the game)":"0C80","Leon Original":"0280","Leon Wounded":"0680","Leon as Biker":"0A80","Leon as Stars":"0880","To Fu":"0D80"}},"Play Extra Mission":{"note":"This allows you to select what extra mission you wish to play. Just slect on load and carry on as normal at the menu and when in game you will be the character of your choice Do not use at the same time as [Resident Evil 2 Mode]","data":["810DD66E 00??"],"options":{"The 4th Survior":"48","To-Fu":"49"}},"Quick Chest Access":{"note":"With this code, all you Have\\to do to access the chest, is hold L and C-Down","data":["D10DBE8C 0005","810E4EA8 8007","D10DBE8C 0005","810E4EAA 0814"],"options":null},"Quick Save Access":{"note":"(1 Anytime, anywhere, press Z and C-Down at the same time. You'll get the standard typewriter text: \"It's an old typewriter. You can save your progress with this.\" Note that you must, of course, Have\\an ink ribbon to save. 2) Choose \"Yes\" and you'll be able to save normally. Instead of the location name, your save file will say \"Scenario 1st\" or \"Scenario 2nd.\" 3) When you load your save file, you'll Have\\to skip through the intro, but when the game loads up you'll be exactly where you saved!","data":["D10DBE8C 0044","810E4EA8 8007","D10DBE8C 0044","810E4EAA 06B0"],"options":null},"[Resident Evil 2 Mode]":{"note":"Note: With this enabled the game will become Resident Evil 2, the English version of Biohazard 2! This means all text (except the text in files) is in Japanese, and all cinemas Have\\English subtitles. Note that the title screen will still say Biohazard 2 Do not use at the same time as Play Extra Mission","data":["810DD66E 00??"],"options":{"Off":"00","On":"40"}},"[Saves Always 0]":{"note":"No matter how many saves you do ithis makes the game think you Have\\not saved.","data":["800E50D1 0000"],"options":null}},"7ECBE939-3C331795-C:45":{"Have all Cheats":{"note":"Go into the Cheats From the main Menu \u0026 put on the Ones you want","data":["810CD226 01FF"],"options":null}},"7ED67CD4-B4415E6D-C:50":{"Access Demitron Character":{"note":"","data":["80049AA4 0001"],"options":null},"Access Sonork Character":{"note":"","data":["80049AA0 0001"],"options":null},"Infinite Health\\All Levels\\Player 1":{"note":"","data":["812716E0 0190","8127BDB8 0190","8127E478 0190","81292EE8 0190","81293768 0190","81297538 0190","812ACCC8 0190","812B1CE8 0190","812B7BE8 0190","8138AEE0 0190"],"options":null},"Infinite Health\\All Levels\\Player 2":{"note":"","data":["81271FB8 0190","8127B158 0190","8127E820 0190","81293B48 0190","81294390 0190","812980B8 0190","812AD608 0190","812B2D08 0190","812B67D8 0190","8138A898 0190"],"options":null},"Music Modifier":{"note":"","data":["80081812 00??"],"options":{"Music Off":"00","Volume Low":"2A","Volume Max":"7F","Volume Medium":"55"}},"Press GS For 2 Rounds Won\\Player 1":{"note":"","data":["880B6491 0002"],"options":null},"Press GS For 2 Rounds Won\\Player 2":{"note":"","data":["880B64A3 0002"],"options":null}},"7EE0E8BB-49E411AA-C:50":{"Access AT-ST Level":{"note":"","data":["81130B38 1250"],"options":null},"Access\\69 Buick Electra":{"note":"Replaces The V-Wing","data":["81130B3A 000E"],"options":null},"Accesses\\All Levels,Ships \u0026 Advanced Weapons":{"note":"","data":["80130B3B 00FF"],"options":null},"Accuracy 100%":{"note":"","data":["80130B5F 0063"],"options":null},"Always Pass Mission":{"note":"","data":["80130AF4 0001"],"options":null},"Bonus Collected 756":{"note":"","data":["80130B67 03E7"],"options":null},"Completion Time 0:00":{"note":"","data":["80130B85 3FCB"],"options":null},"Enemies Destroyed 756":{"note":"","data":["81130B64 03E7"],"options":null},"Friendly Saves 756":{"note":"","data":["80130B66 03E7"],"options":null},"Infinite Lives":{"note":"This Also accesses advanced Shields \u0026 Radar","data":["81130B38 01C0"],"options":null},"Infinite Secondary Weapon":{"note":"","data":["8010CA02 0063","80130B23 00??"],"options":{"Bombs":"04","Cluster Missiles":"07","Ion Cannon":"01","Missiles":"02","Proton Bombs":"05","Seeker Cluster Missiles":"09","Seeker Missiles":"03","Seeker Torpedos":"08"}},"Invincibility":{"note":"This Also Accesses All Levels And Makes All Crafts Available","data":["80130B2D 00FF"],"options":null}},"7F3CEB77-8981030A-C:45":{"Infinite Dinars":{"note":"","data":["800B6043 00E8","800B6042 00E8"],"options":null},"Infinite Health":{"note":"","data":["810CF93E 03E7","810CF942 03E7"],"options":null},"Infinite Magic":{"note":"","data":["810B65CA 0063","810B65B2 0063","810B65E2 0063","810B65FA 0063"],"options":null},"Press L for 1 Hit Kill Punch":{"note":"Press The L Button \u0026 Hold B \u0026 Then Let Go to Kill Enimies,Rocks,Tents etc with One Punch.","data":["D0103383 0020","800D9BCE 0000"],"options":null},"Press L to Levitate":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D017D2D5 0020","810CF994 44CB"],"options":null}},"7F43E701-536328D1-C:50":{"Always Place 1st":{"note":"","data":["8031EC0F 0000"],"options":null},"Extra Cars \u0026 Tracks":{"note":"","data":["8032690F 00FF","8032690C 00FF","8032690D 00FF"],"options":null},"Have 1-6 Level Points":{"note":"","data":["8032685F 0064","80326861 0064","80326863 0064","80326865 0064","80326867 0064","80326869 0064"],"options":null},"Only Race 1 Lap Championship Mode":{"note":"","data":["8031EBDB 0002"],"options":null}},"7F9345D3-841ECADE-C:50":{"Always Have\\Most Powerful Weapon":{"note":"","data":["80088ED9 0003"],"options":null},"Fifty Frames":{"note":"Too fast,needs pacing code.","data":["80088E34 0001"],"options":null},"Fifty Frames (ASM)":{"note":"Still too fast.","data":["810012C4 240B","810012C6 0001"],"options":null},"Play As\\Player 1":{"note":"","data":["80088E02 00??"],"options":{"Ebisumaru":"01","Goemon":"00","Sasuke":"02","Yae":"03"}},"Unlimited Gate Opener Things":{"note":"","data":["80088EC6 0099"],"options":null},"Unlimited Health\\Player 1":{"note":"","data":["80088ED4 0004"],"options":null},"Unlimited Shield\\Player 1":{"note":"","data":["80088ED5 0004","8015D3C4 0001"],"options":null}},"8066D58A-C3DECAC1-C:45":{"Always On First Shot":{"note":"","data":["811DA47A 0001"],"options":null},"Club Type\\Irons Mods":{"note":"","data":["8012A473 00??"],"options":{"Cavity":"00","Conventional":"01"}},"Club Type\\Sand Wedge Mods":{"note":"","data":["8012A474 00??"],"options":{"58 Degrees":"00","60 Degrees":"01","62 Degrees":"02"}},"Club Type\\Woods Mods":{"note":"","data":["8012A472 00??"],"options":{"Metal Wood":"01","Persimmon":"02","Titan":"00"}},"Max Power":{"note":"","data":["8012A431 FFFF"],"options":null},"Max Putt":{"note":"","data":["8012A435 FFFF"],"options":null},"Max Recover":{"note":"","data":["8012A437 FFFF"],"options":null},"Max Technique":{"note":"","data":["8012A433 FFFF"],"options":null},"Select Club":{"note":"","data":["801DA496 00??"],"options":{"1I":"05","1W":"00","2I":"06","2W":"01","3I":"07","3W":"02","4I":"08","4W":"03","5I":"09","5W":"04","6I":"0A","7I":"0B","8I":"0C","9I":"0D","AW":"0F","PW":"0E","Putter":"11","SW":"10"}}},"80C8564A-929C65AB-C:4A":{"Max Score":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null},"Press L Button for Max Gauge\\Player 1":{"note":"","data":["D00B2791 0020","811D2602 0098"],"options":null},"Press L Button for Max Gauge\\Player 2":{"note":"","data":["D00B2797 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}}},"80F41131-384645F6-C:4A":{"Always 1st":{"note":"","data":["8013CD60 0001"],"options":null},"Freeze All Lap Timers":{"note":"","data":["8013CD21 0001","8013CD25 0001","8013CD29 0001"],"options":null},"Freeze Overall Timer":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8013CD15 0001"],"options":null},"Laps Of Race":{"note":"","data":["8013CD0E 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","Never Ending Laps":"06"}},"Level Select":{"note":"For this cheat to work,as soon as you put the cheat on you must turn it back off,if not you wont beable to quit a Race or even finish one.","data":["8013D01B 00??"],"options":{"Bikini Island":"01","Canyon Rush":"00","China Town":"02","China Town Jam":"04","Neo Arena":"03","Neo Speed Way":"05"}},"Music Modifier":{"note":"","data":["80106CCC 00??"],"options":{"Music Off":"00","Music On":"FF"}},"No Damage\\Player 1":{"note":"","data":["50000402 0000","8113D058 0000"],"options":null},"No Damage\\Player 2":{"note":"","data":["50000402 0000","8113F0E8 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["8013D015 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Play As\\Player 2":{"note":"","data":["8013D016 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Unlock All Tracks and Vehicles":{"note":"","data":["8008D1FC 0001"],"options":null}},"810729F6-E03FCFC1-C:45":{"Away Team\\Full Court Dunks":{"note":"","data":["81182E4E 0004","8118305A 0004","81183266 0004","81183472 0004","8118367E 0004"],"options":null},"Away Team\\Giant Players":{"note":"","data":["81182DF6 0032","81182DFE 003C","81183002 0032","8118300A 003C","8118320E 0032","81183216 003C","8118341A 0032","81183422 003C","81183626 0032","8118362E 003C"],"options":null},"Away Team\\Scores 0":{"note":"","data":["81160FFE 0000"],"options":null},"Away Team\\Scores 150":{"note":"","data":["81160FFE 0096"],"options":null},"Away Team\\Tiny Players":{"note":"","data":["81182DF6 0011","81182DFE 0014","81183002 0011","8118300A 0014","8118320E 0011","81183216 0014","8118341A 0011","81183422 0014","81183626 0011","8118362E 0014"],"options":null},"Creation Points (L / R)":{"note":"","data":["D0061269 0020","8117E008 0200","D0061269 0010","8117E008 0000"],"options":null},"Home Team\\Full Court Dunks":{"note":"","data":["81182412 0004","8118261E 0004","8118282A 0004","81182A36 0004","81182C42 0004"],"options":null},"Home Team\\Giant Players":{"note":"","data":["811823BA 0032","811823C2 003C","811825C6 0032","811825CE 003C","811827D2 0032","811827DA 003C","811829DE 0032","811829E6 003C","81182BEA 0032","81182BF2 003C"],"options":null},"Home Team\\Scores 0":{"note":"","data":["81160FFA 0000"],"options":null},"Home Team\\Scores 150":{"note":"","data":["81160FFA 0096"],"options":null},"Home Team\\Tiny Players":{"note":"","data":["811823BA 0011","811823C2 0014","811825C6 0011","811825CE 0014","811827D2 0011","811827DA 0014","811829DE 0011","811829E6 0014","81182BEA 0011","81182BF2 0014"],"options":null},"Infinite\\Time Outs\\Away":{"note":"","data":["800D5C9B 0007"],"options":null},"Infinite\\Time Outs\\Home":{"note":"","data":["800D5C75 0007"],"options":null},"No Time Outs\\Away":{"note":"","data":["800D5C9B 0000"],"options":null},"No Time Outs\\Home":{"note":"","data":["800D5C7F 0000"],"options":null}},"812289D0-C2E53296-C:50":{"1 Player\\Always Place 1st":{"note":"","data":["80103CD7 0000"],"options":null},"1 Player\\Max\\Acceleration":{"note":"","data":["8012C51F 000A"],"options":null},"1 Player\\Max\\Shocks":{"note":"","data":["8012C527 000A"],"options":null},"1 Player\\Max\\Speed":{"note":"","data":["8012C523 000A"],"options":null},"1 Player\\Max\\Tires":{"note":"","data":["8012C52B 000A"],"options":null},"Multi and 1 Player\\Infinite Turbos\\Player 1":{"note":"Can be used in 1 Player and Multiplayer Modes for Player 1","data":["81103F3A 03E7"],"options":null},"Multi and 1 Player\\Infinite Turbos\\Player 2":{"note":"Multiplayer Mode Only for Player 2","data":["8110422E 03E7"],"options":null},"Multi and 1 Player\\Max Crash Helmets\\Player 1":{"note":"Can be used in 1 Player and Multiplayer Modes for Player 1","data":["80103F33 0064"],"options":null},"Multi and 1 Player\\Max Crash Helmets\\Player 2":{"note":"Multiplayer Mode Only for Player 2","data":["80104227 0064"],"options":null}},"817D286A-EF417416-C:53":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2712 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE03F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802026F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE255 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FCB85 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFF6D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802027A5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DA0BD 0001"],"options":null}},"82380387-DFC744D9-C:50":{"Widescreen":{"note":"Boards in 4:3.","data":["8101FBBA 3FE3","81052D3C 080C","81052D3E 0074","81052D40 3C1B","81052D42 3FAB","813001D0 449B","813001D2 6000","813001D4 460C","813001D6 0002","813001D8 4606","813001DA 0002","813001DC 0801","813001DE 4B51","813001E0 2400"],"options":null}},"82B3248B-E73E244D-C:45":{"Always Play On\\2D Board":{"note":"","data":["800E7257 0001"],"options":null},"Always Play On\\3D Board":{"note":"","data":["800E7257 0000"],"options":null},"Debug Mode":{"note":"","data":["810E6290 0001"],"options":null},"Player 1 Controls\\Both Sides In 2-Player":{"note":"This is only for Human VS. Human Game","data":["8012C508 0000"],"options":null},"Time Always Counts Down\\On Black Players Side":{"note":"","data":["8012C67D 0001"],"options":null},"Time Always Counts Down\\On White Players Side":{"note":"","data":["8012C67D 0000"],"options":null}},"82DC04FD-CF2D82F4-C:45":{"Always Have\\50 pieces of corn":{"note":"","data":["801E1A39 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E1A28 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["801E1A26 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E1A3A 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E1A2D 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E1A38 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D008F2C1 0010","801E199E 0001","D008F2C1 0010","801E19AE 0001"],"options":null},"Start with Berry Weapon":{"note":"","data":["811E1A2E 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Unlock All Levels":{"note":"","data":["81099150 000F"],"options":null}},"82EFDC30-806A2461-C:45":{"Away Team Scores 50":{"note":"","data":["801F6407 0032","802004C0 0032"],"options":null},"Home Team Scores 50":{"note":"","data":["801F6406 0032","802004BF 0032"],"options":null}},"839F3AD5-406D15FA-C:50":{"Have All\\Characters Available":{"note":"","data":["810657A0 FFFF"],"options":null},"Have All\\Courts Available":{"note":"","data":["810657A4 FFFF"],"options":null},"Score\\Player 1":{"note":"","data":["80152DFA 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}},"Score\\Player 2":{"note":"","data":["80152DFB 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}}},"83F33AA9-A901D40D-C:45":{"Infinite Time":{"note":"","data":["8114C3D8 000A"],"options":null},"Pick Your Kombat Zone":{"note":"","data":["81257684 00??"],"options":{"Armory":"14","Bell Tower":"07","Bridge":"05","Courtyard":"02","Dead Pool":"11","Graveyard":"09","Hidden Portal":"10","Jade's Desert":"0E","Kahn's Kave":"0D","Kahn's Tower":"04","Kombat Temple":"08","Lair":"18","Living Forest":"15","Lost Bridge":"0F","Pit":"03","Pit 2":"1A","Pit 3":"0A","Pit Bottom":"1C","Portal":"17","River Kombat":"0B","Rooftop":"13","Scorpion's Lair":"0C","Soul Chamber":"06","Star Bridge":"1B","Street":"01","Subway":"00","Tomb":"19","Tower":"16","Wasteland":"12"}},"Player 1\\Aggressor Energy Bar":{"note":"","data":["80169A21 0030"],"options":null},"Player 1\\Energy is":{"note":"","data":["8016998D 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 1\\Infinite Run":{"note":"","data":["81169854 0030"],"options":null},"Player 1\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B5365 0020","811699B4 5100","D02B5365 0020","811699BC 5100"],"options":null},"Player 1\\Play As":{"note":"","data":["8016997D 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Player 2\\Aggressor Energy Bar":{"note":"","data":["80169A23 0030"],"options":null},"Player 2\\Energy is":{"note":"","data":["80169C61 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 2\\Infinite Run":{"note":"","data":["81169C68 0030"],"options":null},"Player 2\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B536D 0020","811699B6 5100","D02B536D 0020","811699BE 5100"],"options":null},"Player 2\\Play As":{"note":"","data":["80169C21 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Unlock Secret":{"note":"","data":["8016A021 0004"],"options":null}},"83F3931E-CB72223D-C:50":{"Access\\All Cars \u0026 Upgrades":{"note":"","data":["813BED58 1FFF","803BED22 0005"],"options":null},"Access\\Florida \u0026 Moon Tracks":{"note":"This is for Championship Mode Only","data":["813BF2A4 0101"],"options":null},"Always 1st\\Player 1":{"note":"","data":["803CDF03 0001"],"options":null},"Always 1st\\Player 2":{"note":"","data":["803CE3DB 0001"],"options":null},"Always 1st\\Player 3":{"note":"","data":["803CDA2B 0001"],"options":null},"Always 1st\\Player 4":{"note":"","data":["803CD553 0001"],"options":null},"Cannot Spin Out":{"note":"","data":["803CDC73 0000"],"options":null},"Dancing Girl Always On":{"note":"","data":["803BED53 0001","803C20AF 0054"],"options":null},"Disable\\Left Lane Traffic":{"note":"This is for Championship Mode Only","data":["8033C83B 0001"],"options":null},"Disable\\Right Lane Traffic":{"note":"This is for Championship Mode Only","data":["8033C83F 0001"],"options":null},"Infinite Time":{"note":"","data":["813D0C1C 4296"],"options":null},"Max Power Level,\u0026 Paint Job / Two Tone":{"note":"","data":["813BEDA2 0512"],"options":null},"Max\\Championship Points":{"note":"","data":["813BFB4E 270F"],"options":null},"Max\\Trick points":{"note":"","data":["803BF21F 0063"],"options":null},"Stop Elapsed Time\\Player 1":{"note":"","data":["813C7558 3C80"],"options":null},"Stop Elapsed Time\\Player 2":{"note":"","data":["813C7794 3C80"],"options":null},"Unlimited Nitro Player 4":{"note":"Press C-Button Down For Boost, This Code is for Championship Mode Only","data":["803C728B 0003"],"options":null},"Unlimited Nitro\\Player 1":{"note":"Press C-Button Down For Boost, This Code is for Championship Mode Only","data":["803C74C7 0003"],"options":null},"Unlimited Nitro\\Player 2":{"note":"Press C-Button Down For Boost, This Code is for Championship Mode Only","data":["803C7703 0003"],"options":null},"Unlimited Nitro\\Player 3":{"note":"Press C-Button Down For Boost, This Code is for Championship Mode Only","data":["803C704F 0064"],"options":null},"Unlocked Pro \u0026 Master difficulty level":{"note":"","data":["803BEDD5 0003"],"options":null}},"84077275-57315B9C-C:50":{"All Pokemon Level 100\\Player 1":{"note":"","data":["50000654 0000","800AE654 0064"],"options":null},"All Pokmon Have Max Hp":{"note":"","data":["81285AE8 0096"],"options":null},"Catch\\Mew on GB Tower":{"note":"","data":["80171E17 0015"],"options":null},"Catch\\Mewtwo on GB Tower":{"note":"","data":["80171E17 0083"],"options":null},"Clefairy Says\\Extended Life Bar\\Player 1":{"note":"","data":["8118F43A 0049"],"options":null},"Clefairy Says\\Extended Life Bar\\Player 2":{"note":"","data":["8118F5FA 0049"],"options":null},"Clefairy Says\\Extended Life Bar\\Player 3":{"note":"","data":["8118F7BA 0049"],"options":null},"Clefairy Says\\Extended Life Bar\\Player 4":{"note":"","data":["8118F97A 0049"],"options":null},"Clefairy Says\\Infinite Health\\Player 1":{"note":"","data":["8118F438 0064"],"options":null},"Clefairy Says\\Infinite Health\\Player 2":{"note":"","data":["8118F5F8 0064"],"options":null},"Clefairy Says\\Infinite Health\\Player 3":{"note":"","data":["8118F7B8 0064"],"options":null},"Clefairy Says\\Infinite Health\\Player 4":{"note":"","data":["8118F978 0064"],"options":null},"Game Difficulty":{"note":"","data":["D312FC40 FD70","D312FC40 A528","8112FC40 00??"],"options":{"Easy":"02","Extra Hard":"0F","Hard":"00","Normal":"01"}},"Gym Leader Castle\\Blaine":{"note":"","data":["80286B69 00A1"],"options":null},"Gym Leader Castle\\Brock":{"note":"","data":["80287539 00A1"],"options":null},"Gym Leader Castle\\Elite Four \u0026 Rival":{"note":"","data":["80286859 00A1"],"options":null},"Gym Leader Castle\\Erika":{"note":"","data":["80286BA9 00A1"],"options":null},"Gym Leader Castle\\Giovani":{"note":"","data":["80287169 00A1"],"options":null},"Gym Leader Castle\\Koga":{"note":"","data":["80287519 00A1"],"options":null},"Gym Leader Castle\\Misty":{"note":"","data":["80287E79 00A1"],"options":null},"Gym Leader Castle\\Sabrina":{"note":"","data":["802870A9 00A1"],"options":null},"Gym Leader Castle\\Surge":{"note":"","data":["80286BD9 00A1"],"options":null},"Infinite Attacks All Pokemon\\Player 1":{"note":"","data":["50000654 0000","810AE650 6363","50000654 0000","810AE652 6363"],"options":null},"Infinite Attacks All Pokemon\\Player 2":{"note":"","data":["50000654 0000","810AE86C FFFF","50000654 0000","810AE86E FFFF"],"options":null},"Infinite Attacks All Pokemon\\Player 3":{"note":"","data":["50000654 0000","810AE86C FFFF","50000654 0000","810AE86E FFFF"],"options":null},"Infinite Attacks All Pokemon\\Player 4":{"note":"","data":["50000654 0000","810AEA88 FFFF","50000654 0000","810AEA8A FFFF"],"options":null},"Infinite Health against Mew Two":{"note":"","data":["810AE632 FFFF","812823E8 FFFF"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["810AE686 03E7","810AE6AA 03E7","810AE6DA 03E7","810AE6FE 03E7"],"options":null},"Infinite Health\\Stadium\\Free Battle":{"note":"","data":["80287D79 0064"],"options":null},"Infinite Health\\Stadium\\Mewto":{"note":"","data":["802825B9 0064"],"options":null},"Infinite Health\\Stadium\\Petit Cup":{"note":"","data":["80286C29 0064"],"options":null},"Infinite Health\\Stadium\\Pica Cup":{"note":"","data":["80284659 0064"],"options":null},"Infinite Health\\Stadium\\Poke Cup":{"note":"","data":["80285399 0064"],"options":null},"Infinite Health\\Stadium\\Prime Cup":{"note":"","data":["80285FE9 0064"],"options":null},"Infinite cash":{"note":"","data":["81172186 9999"],"options":null},"Infinite coins for coin case":{"note":"","data":["801723E3 0099"],"options":null},"Pokemon beach stop code":{"note":"","data":["D00488A1 0020","80202BB5 0001"],"options":null},"Rock Harden\\Infinite Armour\\Player 1":{"note":"","data":["81193B78 0190"],"options":null},"Rock Harden\\Infinite Armour\\Player 2":{"note":"","data":["81193E2C 0190"],"options":null},"Rock Harden\\Infinite Armour\\Player 3":{"note":"","data":["811940E0 0190"],"options":null},"Rock Harden\\Infinite Armour\\Player 4":{"note":"","data":["81194394 0190"],"options":null}},"8473D0C1-23120666-C:4A":{"All Equipment Upgrades":{"note":"","data":["801ED88D 0023","811ED8DA 201B","801ED86C 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03E4CAB 0000","801ED822 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Event Item\\Modifier 1":{"note":"","data":["801ED895 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801ED89B 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801ED8A1 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Have Bottle\\Modifier 1":{"note":"","data":["801ED8A2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 2":{"note":"","data":["801ED8A3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 3":{"note":"","data":["801ED8A4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 4":{"note":"","data":["801ED8A5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 5":{"note":"","data":["801ED8A6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 6":{"note":"","data":["801ED8A7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Item Modifier":{"note":"","data":["801ED8A0 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\All Masks":{"note":"","data":["811ED8A8 3E39","811ED8AA 4745","811ED8AC 4032","811ED8AE 3A46","811ED8B0 3842","811ED8B2 4833","811ED8B4 3C3D","811ED8B6 373F","811ED8B8 3634","811ED8BA 4341","811ED8BC 3B44","811ED8BE 4935"],"options":null},"Have\\Bombchu":{"note":"","data":["801ED897 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801ED896 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801ED899 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801ED898 0008"],"options":null},"Have\\Fire Arrow":{"note":"","data":["801ED892 0002"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801ED8A0 0010"],"options":null},"Have\\Have\\Ocarina of Time":{"note":"","data":["801ED890 0000"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801ED891 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801ED89F 000F"],"options":null},"Have\\Ice Arrow":{"note":"","data":["801ED893 0003"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801ED89E 000E"],"options":null},"Have\\Light Arrow":{"note":"","data":["801ED894 0004"],"options":null},"Have\\Magic Beans":{"note":"","data":["801ED89A 000A"],"options":null},"Have\\Pictograph":{"note":"","data":["801ED89D 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801ED89C 000C"],"options":null},"Have\\QuestStatus Items":{"note":"","data":["801ED8DD 0005","811ED8DE F7CF"],"options":null},"Infinite\\Health":{"note":"","data":["811ED856 03E7"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811ED854 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"This is Infinite use of Bombs,Bombchus,Deku Sticks,Deku Nuts,Magic Beans,\u0026 Powder Kegs. But you must also put it's Have on to work.","data":["801ED8C1 0063","50000801 0000","801ED8C6 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801ED859 0060","811ED860 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811ED85A 03E7"],"options":null},"Play As":{"note":"","data":["801ED840 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You have been warned.","data":["801ED86C 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F8836 0008","811ED836 FFFD","D01F8836 0004","811ED836 0000","D01F8836 0002","811ED836 FFFE"],"options":null},"Use all C Buttons":{"note":"","data":["811F1738 0000","811F173A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["803E4CAA 0000","803FD505 0001","813FD50A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}},"Widescreen":{"note":"","data":["81143CA4 3C07","81143CA6 3FE3"],"options":null}},"84D5FD75-BBFD3CDF-C:44":{"Character Select":{"note":"","data":["80075F02 00??"],"options":{"Big Head.":"04","Flame Grilled":"08","Normal":"00","Play as Deadwing.":"01"}},"Have All\\Cheats: Book of Shadows":{"note":"","data":["81075EFE 0FFF"],"options":null},"Have All\\Dark Souls Collected":{"note":"","data":["80075EF9 0078"],"options":null},"Have All\\Gads \u0026 The Poign":{"note":"","data":["80030E57 000F"],"options":null},"Have All\\Items":{"note":"Youll not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50001B20 0000","80030613 000B"],"options":null},"Have All\\L-Eclipser":{"note":"You will not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50000320 0000","80030973 000B"],"options":null},"Have All\\Levels Unlocked":{"note":"","data":["5000101C 0000","80030A0E 0001"],"options":null},"Infinite\\0.9mm Ammo":{"note":"","data":["81075AEA 0190"],"options":null},"Infinite\\Accumulators":{"note":"","data":["800306D7 0005"],"options":null},"Infinite\\Cadeaux'":{"note":"","data":["81075AE6 03E7"],"options":null},"Infinite\\Max Health,Air,Shadow Charge \u0026 Voodoo Power":{"note":"","data":["50000604 0000","81075AC6 2710"],"options":null},"Infinite\\Prisms":{"note":"","data":["80030957 0003"],"options":null},"Infinite\\Retractors":{"note":"","data":["800308B7 0003"],"options":null},"Infinite\\Shotgun Shells":{"note":"","data":["80075ADF 0063"],"options":null},"Infinite\\Violator Ammo":{"note":"","data":["81075AE2 03E7"],"options":null},"Press L To Levitate":{"note":"Press the L-Button to rise and let go and press again in stages to come back down.","data":["D0058EE5 0020","80075528 0041"],"options":null},"[Ammo Always Displayed On Screen]":{"note":"","data":["50000408 0000","80075A7D 0007"],"options":null},"[Health Meter Displayed On Screen]":{"note":"","data":["81075B10 0000","81075B12 00FF"],"options":null}},"84EAB557-C88A190F-C:50":{"10x Points Multiplier":{"note":"","data":["800EAD8F 0001"],"options":null},"Access In-Game Cheat Menu":{"note":"","data":["50001104 0000","800E9E98 0001"],"options":null},"Access\\Officer Dick":{"note":"","data":["800E9E9C 0001","800F093B 0001"],"options":null},"Access\\Spider-Man":{"note":"","data":["800E9E98 0001","800F0C5B 0001"],"options":null},"All Gaps":{"note":"","data":["50000A0C 0000","810E9D84 FFFF","50000A0C 0000","810E9D86 FFFF","50000A0C 0000","810E9D8A FFFF","50000402 0000","810E9DF4 FFFF"],"options":null},"Always Special":{"note":"","data":["800E9EAC 0001","800E9EAE 0001"],"options":null},"Hoffmann Factory \u0026 Skate heaven Unlocked":{"note":"","data":["800EA18B 003F"],"options":null},"Infinite Time":{"note":"","data":["800E886A 0001"],"options":null},"Level Goals 100%":{"note":"All standard players,Officer Dick \u0026 Spider-Man, Use together with","data":["50000EE4 0000","810E8900 FFFF","50000EE4 0000","810E8902 FFFF","50000EE4 0000","810E8904 FFFF","50000EE4 0000","810E8906 FFFF","50000EE4 0000","810E8908 FFFF","50000EE4 0000","810E890A FFFF","50000EE4 0000","810E890C FFFF","50000EE4 0000","810E890E FFFF","50000EE4 0000","810E8920 FFFF"],"options":null},"Levels Goals 100% All Custom Players":{"note":"","data":["50000802 0000","810E9494 FFFF","50000802 0000","810E9578 FFFF","50000802 0000","810E965C FFFF","50000802 0000","810E9740 FFFF"],"options":null},"Max Cash":{"note":"All standard players,Officer Dick \u0026 Spider-Man","data":["50000EE4 0000","810E88F8 000A","50000EE4 0000","810E88FA 2B1F","50000EE4 0000","810E88FC 000A","50000EE4 0000","810E88FE 2B1F"],"options":null},"Max Cash For All Custom Players":{"note":"","data":["500004E4 0000","810E948C 000A","500004E4 0000","810E948E 2B1F","500004E4 0000","810E9490 000A","500004E4 0000","810E9492 2B1F"],"options":null},"Moon Psysics":{"note":"","data":["800E9ECE 0001"],"options":null},"Perfect Balance":{"note":"","data":["800E9EAA 0010"],"options":null}},"84FC04FF-B1253CE9-C:4A":{"1 Lap Race":{"note":"","data":["D01215A8 0000","801215A8 0009"],"options":null},"999 Trick Game Pts":{"note":"Press the A Button to stop Count,or it will continue to grow without stoping.","data":["81121360 03E7"],"options":null},"Access Gold Medals":{"note":"","data":["50006002 0000","810EBD42 0101"],"options":null},"Enable Sinobin":{"note":"","data":["8110A17E 0100"],"options":null},"Infinite\\Cash":{"note":"","data":["8012160A C350"],"options":null},"Infinite\\Lucky Dip":{"note":"\"Lucky Dip is Infinite Usage Of What Ever You Get From Each Red Box\"","data":["801215B4 0003"],"options":null},"Infinite\\Tools Options":{"note":"","data":["801215B5 00??"],"options":{"Board":"06","Fan":"01","Ghost":"02","Mouse":"05","Pan":"03","Rock":"04"}}},"85AE781A-C756F05D-C:45":{"Have\\Max Bonus":{"note":"","data":["810E964A 270F"],"options":null},"Have\\[All Guns \u0026 Infinite Ammo]":{"note":"Press C Left to receive all Guns","data":["810FFF8A 0001","50000B04 0000","810E92E6 03E8"],"options":null},"Have\\[All Keys]":{"note":"","data":["810E92E0 0101","800E92E2 0001"],"options":null},"Have\\[High Score]":{"note":"","data":["810E92CE FFFF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["810E9650 0005"],"options":null},"Infinite\\Health":{"note":"If you fall into Water just turn off the Infinite Health \u0026 put back on after.","data":["810E92D8 42D8"],"options":null},"Level Select":{"note":"","data":["810FFF92 00??"],"options":{"Boss Mission Destroy Carrier Level":"10","Mission 1 Shock Strike":"01","Mission 10 Scramble Pylon":"0A","Mission 11 Herding Research":"0B","Mission 12 The Extractor":"0C","Mission 13 Nuke Tower":"0D","Mission 14 Mucus Storage":"0E","Mission 15 Depot Attack":"0F","Mission 16 Sterilization":"11","Mission 17 Scorpion Killer":"12","Mission 18 Core Nuke":"13","Mission 19 Gate Keeper":"14","Mission 2 Radar Run":"02","Mission 3 Return Fire":"03","Mission 4 The Sonar Tower":"04","Mission 5 Big Blips":"05","Mission 6 Short Fuse":"06","Mission 7 Outpost":"07","Mission 8 Sewer":"08","Mission 9 Clean Up":"09","Queen Mission":"15"}},"Level Select Menu":{"note":"","data":["810FE5AA D320"],"options":null}},"85C18B16-DF9622AF-C:4A":{"Infinite Health Player1":{"note":"","data":["801A57B5 00CF"],"options":null},"Infinite Max Stats Creation Points":{"note":"Player 1","data":["801C200F 0064"],"options":null},"Max Stats":{"note":"Player 1","data":["801CA5D0 0064","801CA5D1 0064","801CA5D2 0064","801CA5D3 0064","801CA5D4 0064","801CA5D5 0064","801CA5D6 0064","801CA5D7 0064","801CA5D8 0064"],"options":null}},"862C0657-8DFD896D-C:45":{"(Multi-player)\\Have All\\Weapons and items\\Player 1":{"note":"","data":["8133BA4E FFFE"],"options":null},"(Multi-player)\\Have All\\Weapons and items\\Player 2":{"note":"","data":["8133BC0A FFFE"],"options":null},"(Multi-player)\\Have All\\Weapons and items\\Player 3":{"note":"","data":["8133BDC6 FFFE"],"options":null},"(Multi-player)\\Have All\\Weapons and items\\Player 4":{"note":"","data":["8133BF82 FFFE"],"options":null},"(Multi-player)\\Max Kills\\Player 1":{"note":"","data":["8033B9BC FFFF"],"options":null},"(Multi-player)\\Max Kills\\Player 2":{"note":"","data":["8033BB78 FFFF"],"options":null},"Access\\All Guns":{"note":"","data":["8015969F 0001"],"options":null},"Access\\Max Ammo":{"note":"","data":["8015FCBF 0001"],"options":null},"Can't Fail Missions":{"note":"","data":["810A04FA ED40"],"options":null},"Enable\\Cheat Menu":{"note":"Enable before you enter in game and you will find the cheat menu when you press the Start Button","data":["8003E22F 0003","8004609F 0003"],"options":null},"Enable\\Debug Mode":{"note":"When this code is activated, a display of numbers will show on the screen as the players move around","data":["801599E7 0001"],"options":null},"Enable\\Level Select Menu":{"note":"This must be used with Enable Cheat Menu and enabled before you enter in game and you will find the level select menu replaces the cheat menu when you press the Start Button","data":["810AA696 9214"],"options":null},"Enemies Don't Recongnize You Easily":{"note":"","data":["8005742D 0001"],"options":null},"Have\\Invisible Soldier":{"note":"you are Invisible to most enimies who just can not dectect or see you.","data":["80159683 0001"],"options":null},"Have\\Large Mode":{"note":"Do not use with Mini Mode only use one at a time","data":["8015FCDF 0001"],"options":null},"Have\\Less Enemies In Levels":{"note":"Do not use with No Enemies In Levels, only use one at a time","data":["80056688 0020"],"options":null},"Have\\Mini Mode":{"note":"Do not use with Large Mode only use one at a time","data":["80159699 0001"],"options":null},"Have\\No Enemies In Levels":{"note":"Do not use with Less Enemies In Levels, only use one at a time","data":["80056D4C 0020"],"options":null},"Improved Gun Handling":{"note":"","data":["8009C014 003E"],"options":null},"Infinite\\Continues":{"note":"","data":["80159693 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8015FCEF 0001"],"options":null},"Play As":{"note":"Here you can choose who you would like to play as. But Do not use this with any other play as option..","data":["801609A3 00??"],"options":{"Plastro":"09","The Big Green One":"07","Vikki":"08"}}},"870611BA-D8B1226C-C:00":{"God Mode":{"note":"","data":["80774EB7 00??"],"options":{"Off":"00","On":"01"}}},"8979169C-F189F6A0-C:4A":{"Infinite\\99 Lives":{"note":"","data":["8023648D 0063"],"options":null},"Infinite\\99 R Button Bombs":{"note":"","data":["8024BD89 0063"],"options":null},"Infinite\\Shield":{"note":"","data":["80250971 00??"],"options":{"Off":"00","On":"01"}},"Infinite\\Speed":{"note":"","data":["8024B6BC 00??"],"options":{"Fast":"03","Medium":"02","Normal":"00","Slow":"01","Warp Drive":"07"}},"Infinite\\Stream Laser":{"note":"","data":["80236CD0 00??"],"options":{"2 Stream Laser":"00","4 Stream Laser":"01","6 Stream Laser":"02"}},"Max Score":{"note":"","data":["80249F91 00FF"],"options":null},"Unlock Ramsie Mini-Game":{"note":"","data":["801FF43E 0001"],"options":null}},"89A579F1-667E97EF-C:45":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["811659C4 FFFF","811659C6 FFFF","811659CA 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FB5C 270F"],"options":null},"Sixty Frames":{"note":"Seems Turok 3 doesn't use 20fps.","data":["8008590B 0001","800859D7 0001"],"options":null}},"89FED774-CAAFE21B-C:45":{"Have All Artifacts":{"note":"","data":["800C56BF 0063","800C56C3 0063","800C56C7 0063"],"options":null},"Infinite Health":{"note":"","data":["800C56BB 0005"],"options":null},"Infinite Lives":{"note":"","data":["800C56B7 0005"],"options":null},"Sixty Frames":{"note":"Change ASM value,too fast.","data":["8003B8FB 0001"],"options":null}},"8A6009B6-94ACE150-C:45":{"Access\\All Characters":{"note":"","data":["801E6040 FFFF"],"options":null},"Access\\All Floyd Awards":{"note":"only enable One character at a time when using this code","data":["50000501 0000","801E6038 0005"],"options":null},"Juno\\Access\\All Keys":{"note":"","data":["811E6248 FFF7"],"options":null},"Juno\\Access\\All Objects":{"note":"","data":["811E624A FFFF"],"options":null},"Juno\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["801E61EC 00FF","801E61ED 00FF"],"options":null},"Juno\\Full \u0026 Max Health":{"note":"","data":["801BF976 0040","801E61E5 000C","801E61E2 0040"],"options":null},"Juno\\Infinite Continues":{"note":"","data":["800A3281 0002"],"options":null},"Juno\\Infinite\\Max Ammo All Weapons":{"note":"","data":["50000302 0000","811E61F6 03E7","50000802 0000","811E61FC 03E7","50000402 0000","811E620C 03E7"],"options":null},"Juno\\Infinite\\Mizar Tokens":{"note":"","data":["811E61F4 03E7"],"options":null},"Juno\\Max Blue \u0026 White Heads":{"note":"","data":["811E61EA 03E7","811E61E8 03E7"],"options":null},"Lupus\\Access\\All Keys":{"note":"","data":["811E62BE FF70"],"options":null},"Lupus\\Access\\All Objects":{"note":"","data":["811E62C0 FFFF"],"options":null},"Lupus\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["801E6262 00FF","801E6263 00FF"],"options":null},"Lupus\\Full \u0026 Max Health":{"note":"","data":["801BF9EC 0040","801E625B 000C","801E6258 0040"],"options":null},"Lupus\\Infinite\\Max Ammo All Weapons":{"note":"","data":["50000302 0000","811E626C 03E7","50000802 0000","811E6272 03E7","50000402 0000","811E6282 03E7"],"options":null},"Lupus\\Infinite\\Mizar Tokens":{"note":"","data":["811E626A 03E7"],"options":null},"Lupus\\Max\\Blue \u0026 White Heads":{"note":"","data":["811E6260 03E7","811E625E 03E7"],"options":null},"Tribals\\Gold Wood\\Have All Tribals":{"note":"","data":["801E6014 000F"],"options":null},"Tribals\\Gold Wood\\Have No Tribals Remaining":{"note":"","data":["801E6016 0000"],"options":null},"Tribals\\Gold Wood\\No Tribals Killed":{"note":"","data":["801E6015 0000"],"options":null},"Vela\\Access\\All Keys":{"note":"","data":["811E61D2 FF70"],"options":null},"Vela\\Access\\All Objects":{"note":"","data":["811E61D4 FFFF"],"options":null},"Vela\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["801E6176 00FF","801E6177 00FF"],"options":null},"Vela\\Full \u0026 Max Health":{"note":"","data":["801E616F 000C","801E616C 0040"],"options":null},"Vela\\Infinite\\Max Ammo All Weapons":{"note":"","data":["50000302 0000","811E6180 03E7","50000802 0000","811E6186 03E7","50000402 0000","811E6196 03E7"],"options":null},"Vela\\Infinite\\Mizar Tokens":{"note":"","data":["811E617E 03E7"],"options":null},"Vela\\Max\\Blue \u0026 White Heads":{"note":"","data":["811E6174 03E7","811E6172 03E7"],"options":null},"Wide Screen Always Off":{"note":"","data":["800FECA8 0000"],"options":null}},"8A86F073-CD45E54B-C:45":{"Computer\\Always Gets Bubbles":{"note":"","data":["80173601 0006"],"options":null},"Computer\\Never Gets Bubbles":{"note":"","data":["80173601 0000"],"options":null},"Infinite Credits":{"note":"","data":["80120171 0005"],"options":null},"Player 1\\Always Gets Bubbles":{"note":"","data":["80171131 0006"],"options":null},"Player 1\\Infinite Time To Set Pieces":{"note":"","data":["8117AAFC 0000"],"options":null},"Player 1\\Never Gets Bubbles":{"note":"","data":["80171131 0000"],"options":null},"Player 1\\Screen Never Fills Over Time":{"note":"","data":["80171125 000A"],"options":null}},"8A97A197-272DF6C1-C:50":{"Double MPG":{"note":"","data":["800ADB69 0001"],"options":null},"Infinite Attempts":{"note":"","data":["800ADB66 0001"],"options":null},"Invincibility":{"note":"Makes you also fly without any fuel","data":["800ADB64 0001"],"options":null},"Level \u0026 Scenario Select":{"note":"","data":["800ACE5C 000B"],"options":null},"No Quad Damage":{"note":"","data":["800ADB6B 0001"],"options":null},"infinite Ammo For All Guns":{"note":"","data":["800ADB65 0001"],"options":null}},"8BD4A334-1E138B05-C:50":{"Have Max Rumble":{"note":"","data":["810D8E96 00??","810E61B8 00??"],"options":{"Max":"30","Never Rumble":"00"}},"Infinite\\Cash":{"note":"","data":["810EB852 FC9A"],"options":null},"Infinite\\Health":{"note":"","data":["810D8E8A 00??","810E6522 00??"],"options":{"Infinite":"64","No Health":"00"}},"Infinite\\Stamina":{"note":"","data":["810D8E8E 00??","810E6526 00??"],"options":{"Infinite":"64","No Stamina":"00"}},"Infinite\\Time":{"note":"","data":["810E6486 0E10"],"options":null}},"8C138BE0-95700E46-C:45":{"All Lakes Unlocked":{"note":"","data":["80111F00 0001"],"options":null},"Catch Bigger Fish":{"note":"","data":["80111F06 0001"],"options":null},"Easier to Catch Fish":{"note":"","data":["80111F0E 0001"],"options":null},"Extra Cash":{"note":"","data":["80111F0B 0001"],"options":null},"Line Never Breaks":{"note":"","data":["80111F05 0001"],"options":null},"No Penalties in Tounament":{"note":"","data":["80111F08 0001"],"options":null}},"8C3D1192-BEF172E1-C:50":{"Infinite Time":{"note":"","data":["8114C2FC 000A"],"options":null},"Pick Your Kombat Zone":{"note":"","data":["812575A4 00??"],"options":{"Armory":"14","Bell Tower":"07","Bridge":"05","Courtyard":"02","Dead Pool":"11","Graveyard":"09","Hidden Portal":"10","Jade's Desert":"0E","Kahn's Kave":"0D","Kahn's Tower":"04","Kombat Temple":"08","Lair":"18","Living Forest":"15","Lost Bridge":"0F","Pit":"03","Pit 2":"1A","Pit 3":"0A","Pit Bottom":"1C","Portal":"17","River Kombat":"0B","Rooftop":"13","Scorpion's Lair":"0C","Soul Chamber":"06","Star Bridge":"1B","Street":"01","Subway":"00","Tomb":"19","Tower":"16","Wasteland":"12"}},"Player 1\\Aggressor Energy Bar":{"note":"","data":["80169941 0030"],"options":null},"Player 1\\Energy is":{"note":"","data":["801698AD 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 1\\Infinite Run":{"note":"","data":["811698B4 0030"],"options":null},"Player 1\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B5285 0020","811698D4 5100","D02B5285 0020","811698DC 5100"],"options":null},"Player 1\\Play As":{"note":"","data":["8016989D 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Player 2\\Aggressor Energy Bar":{"note":"","data":["80169943 0030"],"options":null},"Player 2\\Energy is":{"note":"","data":["80169B81 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 2\\Infinite Run":{"note":"","data":["81169B88 0030"],"options":null},"Player 2\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B528D 0020","811698D6 5100","D02B528D 0020","811698DE 5100"],"options":null},"Player 2\\Play As":{"note":"","data":["80169B41 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Unlock Secret":{"note":"","data":["80169F41 0004"],"options":null}},"8D2BAE98-D73725BF-C:45":{"Infinite Stamina":{"note":"","data":["81138400 447A","81138404 447A"],"options":null},"Press [START] To Reset Timer":{"note":"","data":["81137886 0000"],"options":null}},"8E6E01FF-CCB4F948-C:45":{"GS Button For 40 Gems":{"note":"","data":["8829018F 0028"],"options":null},"Infinite\\Action Modifier":{"note":"","data":["802901E3 00??"],"options":{"Beach Ball Spell":"0A","Big Glover Spell":"04","Call Ball Spell":"0E","Death Spell":"01","Enemy Ball Spell":"07","Freeze Enemy Spell":"00","Frog Spell":"02","Green Ball Spell":"0C","Helicopter Spell":"06","Hovering Ball Spell":"0B","Purple Bouncy Ball Spell":"08","Super Call Ball Spell":"0D","Tiny Black/Grey Ball Spell":"09","Tree Spell":"05","Walk On Walls Spell":"03"}},"Infinite\\Activate Cheat\\Modifier 1":{"note":"","data":["81297BEC ????"],"options":{"All Of The Above":"0380","Level Select":"0080","Open Levels":"0200","Open Portals":"0100"}},"Infinite\\Activate Cheat\\Modifier 2":{"note":"","data":["81297BEE ????"],"options":{"All Of The Above":"024A","Big Ball":"0200","Call Ball (Press L)":"0002","Infinite Energy":"0040","Infinite Lives":"0008"}},"Infinite\\Double Jumps":{"note":"","data":["8028FC07 0000"],"options":null},"Infinite\\Health":{"note":"","data":["8029018F 0028"],"options":null},"Infinite\\Lives":{"note":"","data":["80290193 000A"],"options":null},"Press L To Levitate":{"note":"","data":["D02AE905 0020","81290334 43E0"],"options":null}},"8E9692B3-4264BB2A-C:50":{"Aquadome Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F799B 0000"],"options":null},"Aquadome Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FAE2B 0000"],"options":null},"Aquadome Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F799A 0200"],"options":null},"Aquadome Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FAE3A 0200"],"options":null},"Aquadome Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7993 00AA"],"options":null},"Aquadome Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FAE33 00AA"],"options":null},"Aquadome Stage\\No Energy\\Player 1":{"note":"","data":["801F7993 0000"],"options":null},"Aquadome Stage\\No Energy\\Player 2":{"note":"","data":["801FAE33 0000"],"options":null},"Backwash Bay Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F80EB 0000"],"options":null},"Backwash Bay Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB58B 0000"],"options":null},"Backwash Bay Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F80FA 0200"],"options":null},"Backwash Bay Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB59A 0200"],"options":null},"Backwash Bay Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F80F3 00AA"],"options":null},"Backwash Bay Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB593 00AA"],"options":null},"Backwash Bay Stage\\No Energy\\Player 1":{"note":"","data":["801F80F3 0000"],"options":null},"Backwash Bay Stage\\No Energy\\Player 2":{"note":"","data":["801FB593 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F8B3B 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FBFDB 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F8B4A 0200"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FBFEA 0200"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8B43 00AA"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FBFE3 00AA"],"options":null},"Boogerhenge, Tureen Toilet Stage\\No Energy\\Player 1":{"note":"","data":["801F8B43 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\No Energy\\Player 2":{"note":"","data":["801FBFE3 0000"],"options":null},"Candy Factory Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F826B 0000"],"options":null},"Candy Factory Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB70B 0000"],"options":null},"Candy Factory Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F827A 0200"],"options":null},"Candy Factory Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB71A 0200"],"options":null},"Candy Factory Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8273 00AA"],"options":null},"Candy Factory Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB713 00AA"],"options":null},"Candy Factory Stage\\No Energy\\Player 1":{"note":"","data":["801F8273 0000"],"options":null},"Candy Factory Stage\\No Energy\\Player 2":{"note":"","data":["801FB713 0000"],"options":null},"Clayribbean Cruise Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F805B 0000"],"options":null},"Clayribbean Cruise Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB4FB 0000"],"options":null},"Clayribbean Cruise Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F806A 0200"],"options":null},"Clayribbean Cruise Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB50A 0200"],"options":null},"Clayribbean Cruise Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8063 00AA"],"options":null},"Clayribbean Cruise Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB503 00AA"],"options":null},"Clayribbean Cruise Stage\\No Energy\\Player 1":{"note":"","data":["801F8063 0000"],"options":null},"Clayribbean Cruise Stage\\No Energy\\Player 2":{"note":"","data":["801FB503 0000"],"options":null},"Extra Characters and Secret Options":{"note":"","data":["801A86A1 000F"],"options":null},"Freezing Fortress Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F7EFB 0000"],"options":null},"Freezing Fortress Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB39B 0000"],"options":null},"Freezing Fortress Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F7F0A 0200"],"options":null},"Freezing Fortress Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB3AA 0200"],"options":null},"Freezing Fortress Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7F03 00AA"],"options":null},"Freezing Fortress Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB3A3 00AA"],"options":null},"Freezing Fortress Stage\\No Energy\\Player 1":{"note":"","data":["801F7F03 0000"],"options":null},"Freezing Fortress Stage\\No Energy\\Player 2":{"note":"","data":["801FB3A3 0000"],"options":null},"Ghastly Graveyard Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F818B 0000"],"options":null},"Ghastly Graveyard Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB62B 0000"],"options":null},"Ghastly Graveyard Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F819A 0200"],"options":null},"Ghastly Graveyard Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB63A 0200"],"options":null},"Ghastly Graveyard Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8193 00AA"],"options":null},"Ghastly Graveyard Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB633 00AA"],"options":null},"Ghastly Graveyard Stage\\No Energy\\Player 1":{"note":"","data":["801F8193 0000"],"options":null},"Ghastly Graveyard Stage\\No Energy\\Player 2":{"note":"","data":["801FB633 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F7FAB 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB44B 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F7FBA 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB45A 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7FB3 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB453 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\No Energy\\Player 1":{"note":"","data":["801F7FB3 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\No Energy\\Player 2":{"note":"","data":["801FB453 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F971B 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FCBBB 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F972A 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FCBCA 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F9723 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FCBC3 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\No Energy\\Player 1":{"note":"","data":["801F9723 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\No Energy\\Player 2":{"note":"","data":["801FCBC3 0000"],"options":null},"Kooky Courtyard Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F836B 0000"],"options":null},"Kooky Courtyard Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB80B 0000"],"options":null},"Kooky Courtyard Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F837A 0200"],"options":null},"Kooky Courtyard Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB81A 0200"],"options":null},"Kooky Courtyard Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8373 00AA"],"options":null},"Kooky Courtyard Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB813 00AA"],"options":null},"Kooky Courtyard Stage\\No Energy\\Player 1":{"note":"","data":["801F8373 0000"],"options":null},"Kooky Courtyard Stage\\No Energy\\Player 2":{"note":"","data":["801FB813 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Can't be Stunned\\Player 1":{"note":"","data":["801F7E9B 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Can't be Stunned\\Player 2":{"note":"","data":["801FB33B 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Full Super Bar\\Player 1":{"note":"","data":["811F7EAA 0200"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Full Super Bar\\Player 2":{"note":"","data":["811FB34A 0200"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Infinite Energy\\Player 1":{"note":"","data":["801F7EA3 00AA"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Infinite Energy\\Player 2":{"note":"","data":["801FB343 00AA"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\No Energy\\Player 1":{"note":"","data":["801F7EA3 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\No Energy\\Player 2":{"note":"","data":["801FB343 0000"],"options":null},"Play As\\Player1":{"note":"","data":["801A868F 00??"],"options":{"Bad Mr. Frosty":"00","Blob":"01","Bonker":"02","Boogerman":"03","Dr. Kiln":"04","Earthworm Jim":"05","Houngan":"08","Icky Bod Clay":"09","Kung Pow":"0A","Sumo Santa":"0D","T-Hoppy":"0F","Taffy":"0E"}},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Can't be Stunned\\Player 1":{"note":"","data":["801F766B 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Can't be Stunned\\Player 2":{"note":"","data":["801FAB0B 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Full Super Bar\\Player 1":{"note":"","data":["811F767A 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Full Super Bar\\Player 2":{"note":"","data":["811FAB1A 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Infinite Energy\\Player 1":{"note":"","data":["801F7673 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Infinite Energy\\Player 2":{"note":"","data":["801FAB13 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\No Energy\\Player 1":{"note":"","data":["801F7673 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\No Energy\\Player 2":{"note":"","data":["801FAB13 0000"],"options":null},"Rubbage Reef Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F7F7B 0000"],"options":null},"Rubbage Reef Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB41B 0000"],"options":null},"Rubbage Reef Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F7F8A 0200"],"options":null},"Rubbage Reef Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB42A 0200"],"options":null},"Rubbage Reef Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7F83 00AA"],"options":null},"Rubbage Reef Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB423 00AA"],"options":null},"Rubbage Reef Stage\\No Energy\\Player 1":{"note":"","data":["801F7F83 0000"],"options":null},"Rubbage Reef Stage\\No Energy\\Player 2":{"note":"","data":["801FB423 0000"],"options":null},"Rubbage Room Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801FA1AB 0000"],"options":null},"Rubbage Room Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FD64B 0000"],"options":null},"Rubbage Room Stage\\Full Super Bar\\Player 1":{"note":"","data":["811FA1BA 0200"],"options":null},"Rubbage Room Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FD65A 0200"],"options":null},"Rubbage Room Stage\\Infinite Energy\\Player 1":{"note":"","data":["801FA1B3 00AA"],"options":null},"Rubbage Room Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FD653 00AA"],"options":null},"Rubbage Room Stage\\No Energy\\Player 1":{"note":"","data":["801FA1B3 0000"],"options":null},"Rubbage Room Stage\\No Energy\\Player 2":{"note":"","data":["801FD653 0000"],"options":null},"Santa's Toy Factory Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F879B 0000"],"options":null},"Santa's Toy Factory Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FBC3B 0000"],"options":null},"Santa's Toy Factory Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F87AA 0200"],"options":null},"Santa's Toy Factory Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FBC4A 0200"],"options":null},"Santa's Toy Factory Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F87A3 00AA"],"options":null},"Santa's Toy Factory Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FBC43 00AA"],"options":null},"Santa's Toy Factory Stage\\No Energy\\Player 1":{"note":"","data":["801F87A3 0000"],"options":null},"Santa's Toy Factory Stage\\No Energy\\Player 2":{"note":"","data":["801FBC43 0000"],"options":null},"Stage Select":{"note":"","data":["801A868B 00??"],"options":{"Aquadome":"19","Backwash Bay":"16","Boogerhenge":"15","Camp Claynaveral":"02","Candy Factory":"00","Claynaveral Hangar":"01","Clayribbean Cruise":"11","Fiery Furnace":"0F","Freezing Fortress":"08","Ghastly Graveyard":"05","Grotto Gulch":"0A","Happy Harry's Hut":"07","Kiln's Hideout":"0E","Kiln's Laboratory":"0D","Kooky Courtyard":"13","Mudville Mansion":"04","Outhouse":"03","Refuse Room":"09","Research Room":"10","Rubbage Reef":"0C","Rubbage Room":"0B","Santa's Toy Factory":"14","Santa's Workship":"12","Spooky Spire":"06","Tribal Tower":"18","Tureen Toilet":"17"}},"Tribal Tower Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F770B 0000"],"options":null},"Tribal Tower Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FABAB 0000"],"options":null},"Tribal Tower Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F771A 0200"],"options":null},"Tribal Tower Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FABBA 0200"],"options":null},"Tribal Tower Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7713 00AA"],"options":null},"Tribal Tower Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FABB3 00AA"],"options":null},"Tribal Tower Stage\\No Energy\\Player 1":{"note":"","data":["801F7713 0000"],"options":null},"Tribal Tower Stage\\No Energy\\Player 2":{"note":"","data":["801FABB3 0000"],"options":null}},"8E9D834E-1E8B29A9-C:50":{"All Tracks Unlocked":{"note":"","data":["80095F6E 0008","50000264 0000","80169347 0001","50000264 0000","80169473 0001","50000564 0000","8016959F 0001"],"options":null},"Bike Modifier\\Player 1":{"note":"","data":["8016983F 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 2":{"note":"","data":["8016988B 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 3":{"note":"","data":["801698D7 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 4":{"note":"","data":["80169923 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Extra Bikes Unlocked":{"note":"","data":["80167C13 0001","80167C17 0003"],"options":null},"Extra Levels Unlocked":{"note":"","data":["8016980B 0001","8016980F 0001"],"options":null},"Infinite Primary Weapon\\Player 1":{"note":"","data":["801651FD 00C8"],"options":null},"Infinite Primary Weapon\\Player 2":{"note":"","data":["8016596D 00C8"],"options":null},"Infinite Primary Weapon\\Player 3":{"note":"","data":["801660DD 00C8"],"options":null},"Infinite Primary Weapon\\Player 4":{"note":"","data":["8016684D 00C8"],"options":null},"Infinite Shields\\Player 1":{"note":"","data":["801651F5 00C8"],"options":null},"Infinite Shields\\Player 2":{"note":"","data":["80165965 00C8"],"options":null},"Infinite Shields\\Player 3":{"note":"","data":["801660D5 00C8"],"options":null},"Infinite Shields\\Player 4":{"note":"","data":["80166845 00C8"],"options":null},"Infinite Turbos\\Player 1":{"note":"","data":["801651CB 0003","801651CF 0003"],"options":null},"Infinite Turbos\\Player 2":{"note":"","data":["8016593B 0003","8016593F 0003"],"options":null},"Infinite Turbos\\Player 3":{"note":"","data":["801660AB 0003","801660AF 0003"],"options":null},"Infinite Turbos\\Player 4":{"note":"","data":["8016681B 0003","8016681F 0003"],"options":null},"Mode Select":{"note":"","data":["80097687 00??"],"options":{"Anti-Gravity":"08","Anti-Gravity \u0026 Fish Eye Lens":"0A","Boulder":"01","Boulder \u0026 Fish Eye Lens":"03","Boulder \u0026 Wireframe":"11","Fish Eye Lens":"02","Ghost Mode":"40","Magnify":"04","Stealth Mode":"20","Ugly Mode":"80","Wireframe":"10"}}},"8ECC02F0-7F8BDE81-C:45":{"Access All\\Bikes":{"note":"","data":["810FBCBE FFFF"],"options":null},"Access All\\Tracks":{"note":"","data":["810FBCC2 FFFF"],"options":null},"Infinite\\Nitro":{"note":"","data":["810B8E4C 42C8"],"options":null},"Infinite\\Nitro Always On":{"note":"","data":["810BB5A4 8004"],"options":null},"Laps 2 Race":{"note":"","data":["8016FC88 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}}},"8F0CC36D-C738259E-C:45":{"Day":{"note":"","data":["80136FBF 00??"],"options":{"Friday 12th":"0C","Friday 19th":"13","Friday 26th":"1A","Friday 5th":"05","Monday 15th":"0F","Monday 1st":"01","Monday 22nd":"16","Monday 29th":"1D","Monday 8th":"08","Saturday 13th":"0D","Saturday 27th":"1B","Saturday 30th":"14","Saturday 6th":"06","Sunday 14th":"0E","Sunday 21st":"15","Sunday 28th":"1C","Sunday 7th":"07","Thursday 11th":"0B","Thursday 18th":"12","Thursday 25th":"19","Thursday 4th":"04","Tuesday 16th":"10","Tuesday 23rd":"17","Tuesday 2nd":"02","Tuesday 30th":"1E","Tuesday 9th":"09","Wednesday 10th":"0A","Wednesday 17th":"11","Wednesday 24th":"18","Wednesday 31st":"1F","Wednesday 3rd":"03"}},"Hours":{"note":"","data":["80136FBE 00??"],"options":{"00 AM":"00","00 PM":"0C","01 AM":"01","01 PM":"0D","02 AM":"02","02 PM":"0E","03 AM":"03","03 PM":"0F","04 AM":"04","04 PM":"10","05 AM":"05","05 PM":"11","06 AM":"06","06 PM":"12","07 AM":"07","07 PM":"13","08 AM":"08","08 PM":"14","09 AM":"09","09 PM":"15","10 AM":"0A","10 PM":"16","11 AM":"0B","11 PM":"17"}},"Item Select":{"note":"","data":["81126EE8 ????"],"options":{"100 Bag":"2103","1000 Bag":"2100","10000 Bag":"2101","30000 Bag":"2102","Alarm Clock":"1DB3","Blue NES Game":"1D42","CD Player":"1DAC","Fish Tank (Fish Included!)":"1CA6","Flat Shell":"2514","Grandfather Clock":"1DA0","Grey NES Game":"1D2F","JukeBox":"1D50","Lamp":"1EA1","Light Blue NES Game":"1D37","Nook's Shirt":"2410","Orange":"2804","Orange NES Game":"1D2B","Pet Cage":"1C00","Pointy Shell":"2515","Purple NES Game":"1D3E","Record Player":"1D4C","Red NES Game":"1D33","Round Snowman Table":"1EAB","Snowman Bed":"1EAF","Snowman Fridge":"1EA5","Snowman Seat":"1EB0","Stereo":"1DA9","Stereo Kinda Thing":"1DA6","Stereo NES Colour":"1D47","Tall Red Cupboard":"1011","Yellow NES Game":"1D3A"}},"Max Cash":{"note":"","data":["813BC34C FFFF"],"options":null},"Minutes":{"note":"","data":["80136FBD 00??"],"options":{"00":"00","05":"05","10":"0A","15":"0F","20":"14","25":"19","30":"1E","35":"23","40":"28","45":"2D","50":"32","55":"37","59":"3B"}},"Month":{"note":"","data":["80136FC1 00??"],"options":{"April":"04","Aug":"08","Dec":"0C","Feb":"02","Jan":"01","July":"07","June":"06","March":"03","May":"05","Nov":"0B","Oct":"0A","Sept":"09"}},"Time Passes":{"note":"","data":["80136FD2 00??"],"options":{"Hours \u0026 Mins Fast":"10","Hours \u0026 Mins Medium":"05","Mins Like Seconds":"01","Time Normal":"00","Time Zooms By":"FF"}}},"8F12C096-45DC17E1-C:50":{"All enemies killed":{"note":"","data":["801E244E 0000","801E244F 0000"],"options":null},"Always Have\\50 pieces of corn":{"note":"","data":["801E2461 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E2450 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["D01E244E 0000","801E244E 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E2462 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E2455 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E2460 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D008FCE1 0010","801E23C6 0001","D008FCE1 0010","801E23D6 0001"],"options":null},"Start with Berry Weapon":{"note":"","data":["801E2457 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Unlock All Levels":{"note":"","data":["81099B70 000F"],"options":null}},"8F50B845-D729D22F-C:44":{"Infinite Attempts":{"note":"","data":["800ADA96 0001"],"options":null},"Invincibility":{"note":"Makes you also fly without any fuel","data":["800ADA92 0001"],"options":null},"Level \u0026 Scenario Select":{"note":"","data":["800ACD8C 000E"],"options":null},"infinite Ammo For All Guns":{"note":"","data":["800ADA91 0001"],"options":null}},"906C3F77-CE495EA1-C:45":{"255 Scarabs":{"note":"","data":["805C396D 00FF"],"options":null},"All Items":{"note":"","data":["805C4DBC FFFF"],"options":null},"All Spells":{"note":"","data":["805C4DBE 00BF","805C4DBF 00FF"],"options":null},"Disable Blur Filter":{"note":"","data":["81097E6C 0000","81097E6E 3242","81097E9C 0000","81097E9E 3242"],"options":null},"Disable Environment Updates":{"note":"","data":["81013E14 3C04","81013E16 0001"],"options":null},"Disable Unused Options Menu":{"note":"","data":["8008C853 003C","8008C857 003F"],"options":null},"Food Bags":{"note":"","data":["805C4DBF 00??"],"options":{"Large Food Bag":"80","Medium Food Bag":"40","Small Food Bag":"20"}},"Force Best Player Model":{"note":"","data":["81035B9C 081F","81035B9E C000","81035BA0 0000","81035BA2 0000","817F0000 3C02","817F0002 805C","817F0004 8C42","817F0006 1568","817F0008 1040","817F000A 0003","817F000C 0000","817F000E 0000","817F0010 2409","817F0012 0001","817F0014 A049","817F0016 00AD","817F0018 81C9","817F001A 00AD","817F001C 0800","817F001E D6E9","817F0020 0019","817F0022 10C0"],"options":null},"Get the Cape Claw Cage Key":{"note":"","data":["805C4C51 0001"],"options":null},"Infinite Health":{"note":"","data":["805C3971 007C","805C3965 007C"],"options":null},"Infinite Magic":{"note":"","data":["815C3968 0019","815C3974 0019"],"options":null},"Item Pickup Bug Fix":{"note":"","data":["814F92E2 05B1"],"options":null},"Lanterns":{"note":"","data":["805C4DCF 00??"],"options":{"Firefly Lantern":"01"}},"Levitate (Press L)":{"note":"","data":["814EA390 0802","814EA392 6C2D","814EA394 8FBC","814EA396 0030","8109B0B4 8FBF","8109B0B6 0034","8109B0B8 3C04","8109B0BA 800A","8109B0BC 8484","8109B0BE 7DC0","8109B0C0 2405","8109B0C2 0020","8109B0C4 14A4","8109B0C6 0003","8109B0C8 8606","8109B0CA 0010","8109B0CC 00C5","8109B0CE 3022","8109B0D0 A606","8109B0D2 0010","8109B0D4 0813","8109B0D6 A8E6","8109B0D8 0000","8109B0DA 0000"],"options":null},"Mushroom Bags":{"note":"","data":["805C4DC0 00??"],"options":{"Large Mushroom Bag":"38","Medium Mushroom Bag":"18"}},"Play as Fox":{"note":"You'll need to restart the level or save/load","data":["805C3C5B 0000","805C3C67 0000"],"options":null},"Play as Krystal":{"note":"You'll need to restart the level or save/load","data":["805C3C5B 0001","805C3C67 0001"],"options":null},"Primary Spells":{"note":"","data":["805C4DBE 00??"],"options":{"Dinosaur Eye":"20","Disguise Spell":"05","Illusion Spell":"04","Portal Spell":"80","Projectile Spell":"08","Shield":"10"}},"Replace Fox's Model with Sabre's":{"note":"","data":["81035B9C 081F","81035B9E C000","817F0000 2409","817F0002 0002","817F0004 0800","817F0006 D6E9","817F0008 A1C9","817F000A 00AD"],"options":null},"Secondary Spells":{"note":"","data":["805C4DBF 00??"],"options":{"Ice Blast Spell":"03","Mindread":"06","Mindread Spell":"02","Wizard Randorn (behaves like Projectile)":"04","Wizard Randorn (unique behavior)":"05"}},"Show Hidden Options Menu":{"note":"","data":["8008C857 0041"],"options":null},"Spawn Past the GuardClaw in the Mammoth Area near Swapstone Hollow (File 3)":{"note":"","data":["816DFBA4 C5D4","816DFBA6 0000","816DFBA8 C496","816DFBAA 0000","816DFBAC 44E5","816DFBAE 0000"],"options":null},"Teleport Tricky to Player (Press D-Pad Down)":{"note":"","data":["814FD888 0802","814FD88A 6C37","8109B0DC 3C02","8109B0DE 800A","8109B0E0 8442","8109B0E2 7DC0","8109B0E4 2403","8109B0E6 0400","8109B0E8 1443","8109B0EA 0007","8109B0EC 8E5C","8109B0EE 00E4","8109B0F0 8F82","8109B0F2 000C","8109B0F4 8F83","8109B0F6 0010","8109B0F8 8F9C","8109B0FA 0014","8109B0FC AE42","8109B0FE 0000","8109B100 AE43","8109B102 0004","8109B104 AE5C","8109B106 0008","8109B108 8E45","8109B10A 0000","8109B10C 0813","8109B10E F624","8109B110 8E46","8109B112 0008"],"options":null},"Ultra Widescreen (21:9)":{"note":"","data":["810BCE30 4017","810BCE32 AE14"],"options":null},"Walk Through Walls / Levitate":{"note":"L plus Dpad Up to disable clipping, L plus Dpad Down to re-enable clipping, L to levitate","data":["81012144 081F","81012146 C400","81012148 0000","8101214A 0000","817F1000 3C18","817F1002 805C","817F1004 8F18","817F1006 1568","817F1008 1300","817F100A 001E","817F100C 0000","817F100E 0000","817F1010 3C02","817F1012 800D","817F1014 8042","817F1016 D3F5","817F1018 2408","817F101A 0020","817F101C 1448","817F101E 0019","817F1020 0000","817F1022 0000","817F1024 3C08","817F1026 807F","817F1028 8102","817F102A 10F0","817F102C 1040","817F102E 0003","817F1030 0000","817F1032 0000","817F1034 2402","817F1036 00A4","817F1038 A302","817F103A 00FB","817F103C 3C08","817F103E 807F","817F1040 8102","817F1042 10F1","817F1044 5440","817F1046 0003","817F1048 A100","817F104A 10F1","817F104C 1000","817F104E 0005","817F1050 0000","817F1052 0000","817F1054 2402","817F1056 00AF","817F1058 A302","817F105A 00FB","817F105C 1000","817F105E 0009","817F1060 0000","817F1062 0000","817F1064 3C08","817F1066 807F","817F1068 8102","817F106A 10F0","817F106C 1040","817F106E 0005","817F1070 0000","817F1072 0000","817F1074 3C18","817F1076 805C","817F1078 8F18","817F107A 1568","817F107C 3C02","817F107E 4000","817F1080 AF02","817F1082 0028","817F1084 8E78","817F1086 0000","817F1088 0800","817F108A 4853","817F108C 8E02","817F108E 0000","D00CD3F4 0008","817F10F0 0100","D00CD3F4 0004","817F10F0 0001"],"options":null},"Widescreen (16:9)":{"note":"","data":["810BCE30 3FE3","810BCE32 D70A"],"options":null}},"90A59003-31089864-C:45":{"Always Normal Spirit\\Player 1":{"note":"","data":["801671F5 0032"],"options":null},"Always Normal Spirit\\Player 2":{"note":"","data":["80167689 0032"],"options":null},"Always Normal Spirit\\Player 3":{"note":"","data":["80167B1D 0032"],"options":null},"Always Normal Spirit\\Player 4":{"note":"","data":["80167FB1 0032"],"options":null},"Always Special\\Player 1":{"note":"","data":["80167235 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["801676C9 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["80167B5D 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["80167FF1 0004"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 1":{"note":"","data":["801671F4 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 2":{"note":"","data":["80167688 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 3":{"note":"","data":["80167B1C 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 4":{"note":"","data":["80167FB0 0064"],"options":null},"Have All Characters":{"note":"","data":["8109ED5A FFFF"],"options":null},"Infinite Create-A-Wrestler Attribute Points":{"note":"","data":["8011A81B 001E"],"options":null},"Max Attributes":{"note":"","data":["50000502 0000","8011A811 0032"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["801671F5 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["80167689 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["80167B1D 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["80167FB1 00FF"],"options":null},"No Spirit\\Player 1":{"note":"","data":["801671F5 0000"],"options":null},"No Spirit\\Player 2":{"note":"","data":["80167689 0000"],"options":null},"No Spirit\\Player 3":{"note":"","data":["80167B1D 0000"],"options":null},"No Spirit\\Player 4":{"note":"","data":["80167FB1 0000"],"options":null},"Specials Don't Run Out":{"note":"","data":["8112AD94 2400"],"options":null},"Timer Is Always 00:00":{"note":"","data":["8016F0AF 0000"],"options":null},"Ultimate Codes\\Player 1":{"note":"","data":["801671F4 0064"],"options":null},"Ultimate Codes\\Player 2":{"note":"","data":["80167688 0064"],"options":null},"Ultimate Codes\\Player 3":{"note":"","data":["80167B1C 0064"],"options":null},"Ultimate Codes\\Player 4":{"note":"","data":["80167FB0 0064"],"options":null},"Weapon Select\\Player 1":{"note":"","data":["81167236 0300","81166D90 ????","81166D92 0000","80166E50 0000"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 2":{"note":"","data":["811676CA 0300","81166DC0 ????","80166DC2 0001","80166E51 0001"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 3":{"note":"","data":["81167B5E 0300","81166DF0 ????","80166DF2 0002","80166E52 0002"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 4":{"note":"","data":["81167FF2 0300","81166E18 ????","81166E1A 0003","80166E53 0003"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}}},"90AF8D2C-E1AC1B37-C:00":{"Freeze Timer":{"note":"","data":["80161E95 0000"],"options":null},"Infinite 9 Credits":{"note":"","data":["8009F0DB 0009"],"options":null},"Infinite Lives":{"note":"","data":["800A1059 0001"],"options":null},"Infinite Max Energy":{"note":"This give you the most engery to jump really high","data":["800A1067 000F","800A106B 000F"],"options":null}},"90F5D9B3-9D0EDCF0-C:45":{"Have All Pikachus Magnemites":{"note":"","data":["801183BC 0000","801183BD 0000","801183BE 0000"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 1":{"note":"","data":["81285A18 03E7"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 2":{"note":"","data":["81286438 03E7"],"options":null},"Pokemon\\Inf Spells\\Player 1":{"note":"","data":["810AE580 FFFF","810AE582 FFFF","810AE5D4 FFFF","810AE5D6 FFFF","810AE628 FFFF","810AE62A FFFF"],"options":null},"Pokemon\\Inf Spells\\Player 2":{"note":"","data":["810AE79C FFFF","810AE79E FFFF","810AE7F0 FFFF","810AE7F2 FFFF","810AE844 FFFF","810AE846 FFFF"],"options":null},"Pokemon\\Max HP\\Player 1":{"note":"","data":["810AE586 03E7","810AE5DA 03E7","810AE62E 03E7"],"options":null},"Pokemon\\Max HP\\Player 2":{"note":"","data":["810AE7A2 03E7","810AE7F6 03E7","810AE84A 03E7"],"options":null},"Ultimate Code":{"note":"what's so ultimate about this code is it raises your Pokemon to its full potential. Even at Level 100, most Pokemon still have a way to go to raise their stats to the max. But with this code, you can instantly boost any Pokemon to its greatest potential!!!","data":["81171F3C FF01","81171F3E FF01","81171F40 FF01","81171F42 FF01","81171F44 FF01"],"options":null},"Widescreen":{"note":"","data":["81011E6C 240F","81011E6E 00F0","81011E70 240E","81011E72 01AB"],"options":null}},"91691C3D-F4AC5B4D-C:4A":{"Infinite\\Health\\Player 1":{"note":"","data":["8112A576 270F"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["8114AAF6 270F"],"options":null},"Infinite\\Stun Meter\\Player 1":{"note":"","data":["8012A579 00FF"],"options":null},"Infinite\\Stun Meter\\Player 2":{"note":"","data":["8014AAF9 00FF"],"options":null},"Play As\\Player 1":{"note":"","data":["801BBA54 00??"],"options":{"Airazor":"03","Cheetor":"02","Megatron":"04","Optimus Primal":"00","Rattrap":"01","Tarantulas":"05","Terrorsaur":"07","Waspinator":"06"}},"Play As\\Player 2":{"note":"","data":["801BBA55 00??"],"options":{"Airazor":"03","Cheetor":"02","Megatron":"04","Optimus Primal":"00","Rattrap":"01","Tarantulas":"05","Terrorsaur":"07","Waspinator":"06"}}},"916AE6B8-8817AB22-C:4A":{"Diffuculty Modifier":{"note":"","data":["8011252F 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Gems":{"note":"","data":["8012FF07 00FF"],"options":null},"Have All\\Level Keys":{"note":"","data":["8012FDE3 0007","8012FDE7 0007","8012FDEB 0007","8012FDEF 0007","8012FDF3 0007","8012FDF7 0007","8012FDFB 0007"],"options":null},"Have All\\Weapons":{"note":"","data":["8012FDA7 0001","8012FDAB 0001","8012FDAF 0001","8012FDB3 0001","8012FDB7 0001","8012FDBB 0001","8012FDBF 0001","8012FDC3 0001","8012FDC7 0001","8012FDCB 0001","8012FDCF 0001","8012FDD3 0001"],"options":null},"Have\\Backpack":{"note":"","data":["8012FD9B 0001","8012FDDB 0001"],"options":null},"Have\\Cheat Menu":{"note":"","data":["811205F0 FFFF","811205F2 FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["81129030 AAE1","811E85EA F1FF"],"options":null},"Infinite\\Ammo":{"note":"","data":["8012FD7F 00FF","8012FD93 00FF","8012FD83 00FF","8012FD63 00FF","8012FD8B 00FF","8012FD67 00FF","8012FD8F 00FF","8012FD6B 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["8112FD96 5B23","8012FDD7 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C15F4 013C"],"options":null},"Infinite\\Lives":{"note":"","data":["8012FF0B 00FF"],"options":null}},"916B8B5B-780B85A4-C:45":{"Bonus Stage Character Modifier (Training Mode)":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["8018F1D3 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Enable Item Switch Menu (All Modes)":{"note":"Go into Vs Mode \u0026 then Vs Options \u0026 then Press Up On the D-Pad Or Analogue Stick \u0026 then click the A Button to enter the Item Switch Menu. This Cheat Works For All Modes","data":["811348E2 0004"],"options":null},"Give Kirby A Wierd Blow-Up":{"note":"","data":["8025E158 000A"],"options":null},"Have All Characters":{"note":"","data":["810A4938 0FF0"],"options":null},"P1 Press Down On D-Pad To Make Items Appear In Random Spots":{"note":"","data":["D109EFA4 0400","8118D0A2 0001"],"options":null},"Story Mode\\Always Get Pacifist (60,000 Points)":{"note":"","data":["810A4B6E 0000"],"options":null},"Story Mode\\Infinite Time":{"note":"","data":["810A4B2E 43CB"],"options":null},"Story Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code could also result freezing at the end of the Level.","data":["800A4B3B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 1\\Infinite Lives":{"note":"","data":["800A4B43 0004"],"options":null},"Story Mode\\Player 1\\Kirby B Button Move\\Congo Jungle":{"note":"","data":["80270ACF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Fighting Polygon Team":{"note":"","data":["8026271F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["80268B0F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Kirby's Dreamland":{"note":"","data":["8026DB3F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Master Hand Stage":{"note":"","data":["80271C4F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Metal Mario Stage":{"note":"","data":["80263597 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Peach's Castle":{"note":"","data":["80263D9F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Planet Zebes":{"note":"","data":["8026FFA7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Saffron City":{"note":"","data":["80273A97 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["802710F7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["80268E4F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Low % Health":{"note":"","data":["810A4B86 0000"],"options":null},"Story Mode\\Player 1\\Stage Select":{"note":"","data":["D1045188 0010","800A4AE7 00??"],"options":{"Bonus Stage 1":"03","Bonus Stage 2":"07","Bonus Stage 3 (Race To The Finish)":"0B","Final Stage (Vs Master Hand)":"0D","Stage 1 (Vs Link)":"00","Stage 10 (Fighting Polygon Team vs30)":"0C","Stage 2 (Vs Yoshi Team vs 18)":"01","Stage 3 (Vs Fox McCloud)":"02","Stage 4 (Freezes?)":"04","Stage 5 (Vs Pikachu)":"05","Stage 6 (Freezes?)":"06","Stage 7 (Vs Kirby Team vs8)":"08","Stage 8 (Vs Samus Aran)":"09","Stage 9 (Vs Metal Mario)":"0A"}},"Story Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4BAF 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 2\\Infinite Lives":{"note":"","data":["800A4BB7 0004"],"options":null},"Story Mode\\Player 2\\Low % Health":{"note":"","data":["810A4BFA 0000"],"options":null},"Story Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4C23 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 3\\Infinite Lives":{"note":"","data":["800A4C2B 0004"],"options":null},"Story Mode\\Player 3\\Low % Health":{"note":"","data":["810A4C6E 0000"],"options":null},"Story Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4C97 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 4\\Infinite Lives":{"note":"","data":["800A4C9F 0004"],"options":null},"Story Mode\\Player 4\\Low % Health":{"note":"","data":["810A4CE2 0000"],"options":null},"Story Mode\\Skip Straight To Master Hand":{"note":"","data":["800A4AE7 000D"],"options":null},"VS. Mode\\Have Mushroom Kindom":{"note":"","data":["800A4937 00FF"],"options":null},"VS. Mode\\Infinite Time":{"note":"","data":["810A4D1E 43CB"],"options":null},"VS. Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4D2B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["802639EF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["8026BF87 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["8026E2B7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Low % Health":{"note":"","data":["810A4D76 0000"],"options":null},"VS. Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4D9F 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 2\\Low % Health":{"note":"","data":["810A4DEA 0000"],"options":null},"VS. Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4E13 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 3\\Low % Health":{"note":"","data":["810A4E5E 0000"],"options":null},"VS. Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4E87 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 4\\Low % Health":{"note":"","data":["810A4ED2 0000"],"options":null},"Widescreen":{"note":"Minor Menu Misalignments","data":["8103B884 3FE3","8110D288 3C07","8110D28A 3FE8","810D0F64 3C07","810D0F66 3FE8"],"options":null}},"918E2D60-F865683E-C:50":{"Access\\All Cars":{"note":"","data":["50000402 0000","813DFC6A 0001"],"options":null},"Access\\All Challenges":{"note":"","data":["50000502 0000","813DD428 0001"],"options":null},"Access\\All Cups":{"note":"","data":["50000302 0000","812CB7C8 0001"],"options":null},"Always 1st":{"note":"","data":["813E00E8 0001"],"options":null},"Infinite\\Boomerang's":{"note":"","data":["8039B464 0004","8039B467 0004","8039B469 0009"],"options":null},"Infinite\\Bullet's":{"note":"","data":["8039B464 0007","8039B467 0007","8039B469 0009"],"options":null},"Infinite\\CREDITS":{"note":"","data":["80388F3D 0003"],"options":null},"Infinite\\Magnet's":{"note":"","data":["8039B464 0001","8039B467 0001","8039B469 0009"],"options":null},"Infinite\\Seeker's":{"note":"","data":["8039B464 0005","8039B467 0005","8039B469 0009"],"options":null},"Infinite\\Shield's":{"note":"","data":["8039B464 0008","8039B467 0008","8039B469 0009"],"options":null},"Infinite\\Stinger's":{"note":"","data":["8039B464 0003","8039B467 0003","8039B469 0009"],"options":null},"Infinite\\Stopper's":{"note":"","data":["8039B464 0006","8039B467 0006","8039B469 0009"],"options":null},"Infinite\\Turbo's":{"note":"","data":["8039B464 0000","8039B467 0000","8039B469 0009"],"options":null},"Laps To Race":{"note":"","data":["813BBD5C 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Psycho Weapons":{"note":"","data":["8039B469 0003","802B85A3 0003"],"options":null}},"91B66D42-16AC4E46-C:44":{"Have Cheats Menu":{"note":"Go into the Cheats From the main Menu \u0026 put on the Ones you want","data":["810CF716 01FF"],"options":null},"Infinite Balls":{"note":"","data":["802FD21F 0064"],"options":null},"Infinite Credits":{"note":"","data":["802FD215 0064"],"options":null},"Infinite Energy":{"note":"","data":["802FD209 0064"],"options":null},"Infinite Sponge Darts":{"note":"","data":["802FD223 0064"],"options":null},"Infinite Suckers":{"note":"","data":["802FD222 0064"],"options":null},"Start with 9999 Monster Score":{"note":"","data":["812FD20E 270F"],"options":null}},"93053075-261E0F43-C:50":{"All Players On 1st Shot":{"note":"","data":["813013DA 0000"],"options":null}},"930C29EA-939245BF-C:45":{"All Gold Medals":{"note":"","data":["50000502 0000","81259130 0101"],"options":null},"Infinite\\Tools Options":{"note":"","data":["8025A624 00??"],"options":{"Fan":"04","Frying Pan":"01","Ghost":"02","Invisible":"06","Rat Face":"08","Rock":"07","Rocket":"05","Super Ghost":"03","Super Rat Face":"09","Wings":"0A"}},"Infinite\\Trick Game 300 Points":{"note":"","data":["8125A7F2 012C"],"options":null},"Infinite\\Weapons Options":{"note":"","data":["8025A622 00??","8025A623 0009"],"options":{"Bomb":"05","Freeze Shot":"03","Parachute":"02","Slap Stick":"01","Snowman":"04","Whirlwind":"06"}},"Max Coins":{"note":"","data":["8125A5BE 270F","8025A5BF 00C8"],"options":null},"No Frame Skip MP":{"note":"Makes it run at 30fps instead of 15fps.","data":["8009AFD7 0000"],"options":null},"Open Extra Characters \u0026 Snowboards":{"note":"Battle Mode Only","data":["8125916E 0101","80259170 0001","8025915C 0001","8125915E 0101","81259160 0101"],"options":null}},"931AEF3F-EF196B90-C:4A":{"Infinite\\Armor\\Player 1":{"note":"","data":["8011D4DF 0064"],"options":null},"Infinite\\Armor\\Player 2":{"note":"","data":["8011D4E3 0064"],"options":null},"Infinite\\Bombs\\Player 1":{"note":"","data":["8011D4E7 0003"],"options":null},"Infinite\\Bombs\\Player 2":{"note":"","data":["8011D4EB 0003"],"options":null},"Level 11 Vulcan Cannon\\Player 1":{"note":"","data":["80123A2B 000A"],"options":null},"Level 11 Vulcan Cannon\\Player 2":{"note":"","data":["80123BCB 000A"],"options":null},"Press L For Rapid Fire Select\\Player 1":{"note":"","data":["D011BDF1 0020","8011D50F 00??"],"options":{"On Flak":"14","On Nuke \u0026 Laser":"28"}},"Press L For Rapid Fire Select\\Player 2":{"note":"","data":["D011BDF9 0020","8011D513 00??"],"options":{"On Flak":"14","On Nuke \u0026 Laser":"28"}}},"93945F48-5C0F2E30-C:50":{"Bonus Stage Character Modifier (Training Mode)":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["80197A33 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Give Kirby A Wierd Blow-Up":{"note":"","data":["802669B8 000A"],"options":null},"Have All Characters":{"note":"","data":["810AD198 0FF0"],"options":null},"Jump off to win":{"note":"","data":["810AD3A2 0000"],"options":null},"P1 Press Down On D-Pad To Make Items Appear In Random Spots":{"note":"","data":["D10A7804 0400","81195902 0001"],"options":null},"Story Mode\\Always Get Pacifist (60,000 Points)":{"note":"","data":["810AD3CE 0000"],"options":null},"Story Mode\\Infinite Time":{"note":"","data":["810AD38E 43CB"],"options":null},"Story Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code could also result freezing at the end of the Level.","data":["800AD39B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 1\\Infinite Lives":{"note":"","data":["800AD3A3 0004"],"options":null},"Story Mode\\Player 1\\Kirby B Button Move\\Congo Jungle":{"note":"","data":["8027932F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Fighting Polygon Team":{"note":"","data":["8026AF7F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["8027136F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Kirby's Dreamland":{"note":"","data":["8027639F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Master Hand Stage":{"note":"","data":["8027A4AF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Metal Mario Stage":{"note":"","data":["8026BDF7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Peach's Castle":{"note":"","data":["8026C5FF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Planet Zebes":{"note":"","data":["80278807 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Saffron City":{"note":"","data":["8027C2F7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["80279957 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["802716AF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Low % Health":{"note":"","data":["810AD3E6 0000"],"options":null},"Story Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD40F 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 2\\Infinite Lives":{"note":"","data":["800AD417 0004"],"options":null},"Story Mode\\Player 2\\Low % Health":{"note":"","data":["810AD45A 0000"],"options":null},"Story Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD483 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 3\\Infinite Lives":{"note":"","data":["800AD48B 0004"],"options":null},"Story Mode\\Player 3\\Low % Health":{"note":"","data":["810AD4CE 0000"],"options":null},"Story Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD4F7 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 4\\Infinite Lives":{"note":"","data":["800AD4FF 0004"],"options":null},"Story Mode\\Player 4\\Low % Health":{"note":"","data":["810AD542 0000"],"options":null},"Story Mode\\Skip Straight To Master Hand":{"note":"","data":["800AD347 000D"],"options":null},"VS. Mode\\Have Mushroom Kindom":{"note":"","data":["800AD197 00FF"],"options":null},"VS. Mode\\Infinite Time":{"note":"","data":["810AD57E 43CB"],"options":null},"VS. Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD58B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["8026C24F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["802747E7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["80276B17 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Low % Health":{"note":"","data":["810AD5D6 0000"],"options":null},"VS. Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD5FF 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 2\\Low % Health":{"note":"","data":["810AD64A 0000"],"options":null},"VS. Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD673 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 3\\Low % Health":{"note":"","data":["810AD6BE 0000"],"options":null},"VS. Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD6E7 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 4\\Low % Health":{"note":"","data":["810AD732 0000"],"options":null}},"93EB3F7E-81675E44-C:44":{"Access All Levels":{"note":"","data":["8008A9D6 0001","8008A9EA 0001","8008AA12 0001","8008AA62 0001","8008AA76 0001","8008AA8A 0001","8008AA9E 0001","8008AAB2 0001","8008AAC6 0011","8008AADA 0021","8008AAEE 0001","8008AB16 0011","8008AB2A 0041","8008AB3E 0021","8008AB52 0081","8008AB66 0001","8008AB7A 0081","8008AB8E 0001","8008ABB6 0001","8008ABDE 0001","8008ABF2 0011","8008AC06 0021","8008AC56 0001","8008AF3A 0001","8008AF4E 0001","8008AF62 0001","8008AF76 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81094150 0063","81094152 0063","81094154 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A9297 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810866C2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810864C4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80094305 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A92B5 00??","800A92C5 00??","800A92D5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"944FAFC4-B288266A-C:00":{"Infinite Health":{"note":"","data":["812128D0 42C8","812128D2 0000"],"options":null},"Infinite Heat Vision":{"note":"","data":["812128E0 42C8","812128E2 0000"],"options":null},"Infinite Ice Breath":{"note":"","data":["812128E4 42C8","812128E6 0000"],"options":null},"Infinite Speed Boost":{"note":"","data":["812128D8 42C8","812128DA 0000"],"options":null},"Infinite Timer\\Level 2":{"note":"","data":["8119B927 003B","8119B92B 0009"],"options":null},"Infinite X-Ray":{"note":"","data":["812128F0 42C8","812128F2 0000"],"options":null}},"94807E6B-60CC62E4-C:4A":{"1P Mode\\Stage Select":{"note":"","data":["D0162FEB 0001","80162FEB 00??"],"options":{"Car-kun Arle game":"0E","Car-kun Schezo game":"09","Satan Arle game":"0D","Satan Schezo game":"08"}},"Endless Mode\\Player Level 99 Player 1":{"note":"","data":["801632E7 0063"],"options":null},"Endless Mode\\Player Level 99 Player 2":{"note":"","data":["801632EB 0063"],"options":null},"Instant 7th Step of Chain\\Player 1":{"note":"","data":["D0163A2B 0001","80163A2B 0007"],"options":null},"Instant 7th Step of Chain\\Player 2":{"note":"","data":["D0163E5B 0001","80163E5B 0007"],"options":null},"Maximum Score\\Player 1":{"note":"","data":["811632CC 05F5","811632CE E0FF"],"options":null},"Maximum Score\\Player 2":{"note":"","data":["811632D0 05F5","811632D2 E0FF"],"options":null},"Mode Total Continues 0":{"note":"","data":["801632AF 0000","801632C7 0000"],"options":null},"Nazo Puyo Mode\\All Practice Stages Cleared 4":{"note":"","data":["50000402 0000","811631E8 FFFF"],"options":null},"No Warning Icons\\Player 1":{"note":"","data":["80164EA3 0000"],"options":null},"No Warning Icons\\Player 2":{"note":"","data":["80164EA7 0000"],"options":null},"Options Complete Demo Viewer":{"note":"","data":["8016320B 0007","8116320C FFFF","8116320E FFFF"],"options":null}},"95286EB4-B76AD58F-C:45":{"100% Efficiency":{"note":"","data":["80092E4B 0064"],"options":null},"100% Leadership":{"note":"","data":["80092E47 0064"],"options":null},"GDI\\Instant\\Air Strike":{"note":"","data":["800962A4 0032","800C4E50 00FF"],"options":null},"GDI\\Instant\\Build Aircraft":{"note":"","data":["810C4F12 FFFF"],"options":null},"GDI\\Instant\\Build Buildings":{"note":"","data":["810C4F1E FFFF"],"options":null},"GDI\\Instant\\Build Units":{"note":"","data":["810C4F16 FFFF"],"options":null},"GDI\\Instant\\Build Vehicles":{"note":"","data":["810C4F1A FFFF"],"options":null},"GDI\\Instant\\Ion Cannon":{"note":"","data":["800962A5 0033","800C4E30 00FF"],"options":null},"GDI\\Instant\\Nuclear Strike":{"note":"","data":["800962A6 0034","800C4E70 00FF"],"options":null},"GDI\\Max Cash":{"note":"","data":["810C4F06 FFFF","810C4F08 0001"],"options":null},"GDI\\Max Power":{"note":"","data":["810C4F26 FFFF","810C4F28 0001"],"options":null},"GDI\\Maximum Buildings Lost":{"note":"","data":["80092E5F 00C8"],"options":null},"GDI\\Maximum Killed":{"note":"","data":["80092E53 00C8"],"options":null},"GDI\\Mission 4\\Infinite Health APC #1":{"note":"","data":["800ABFB1 00C8"],"options":null},"GDI\\Mission 4\\Infinite Health APC #2":{"note":"","data":["800AC03D 00C8"],"options":null},"GDI\\Mission 4\\Infinite Health Hum-Vee":{"note":"","data":["800ABE99 0096"],"options":null},"GDI\\Mission 6\\Infinite Health Commando":{"note":"","data":["800B56CD 0050"],"options":null},"GDI\\Mission 6\\Infinite Health Transportational Helicopter":{"note":"","data":["800BFC95 005A"],"options":null},"GDI\\No Buildings Lost":{"note":"","data":["80092E5F 0000"],"options":null},"GDI\\None Killed":{"note":"","data":["80092E53 0000"],"options":null},"Max Total Score":{"note":"","data":["81092E42 FFFF"],"options":null},"NOD\\Instant\\Air Strike":{"note":"","data":["800962A4 0032","800C4FF8 00FF"],"options":null},"NOD\\Instant\\Build Aircraft":{"note":"","data":["810C50BA FFFF"],"options":null},"NOD\\Instant\\Build Buildings":{"note":"","data":["810C50C6 FFFF"],"options":null},"NOD\\Instant\\Build Units":{"note":"","data":["810C50BE FFFF"],"options":null},"NOD\\Instant\\Build Vehicles":{"note":"","data":["810C50C2 FFFF"],"options":null},"NOD\\Instant\\Ion Cannon":{"note":"","data":["800962A5 0033","800C4FD8 00FF"],"options":null},"NOD\\Instant\\Nuclear Strike":{"note":"","data":["800962A6 0034","800C5018 00FF"],"options":null},"NOD\\Max Cash":{"note":"","data":["810C50AE FFFF","810C50B0 0001"],"options":null},"NOD\\Max Power":{"note":"","data":["810C50CE FFFF","810C50D0 0001"],"options":null},"NOD\\Maximum Buildings Lost":{"note":"","data":["80092E5B 00C8"],"options":null},"NOD\\Maximum Killed":{"note":"","data":["80092E4F 00C8"],"options":null},"NOD\\No Buildings Lost":{"note":"","data":["80092E5B 0000"],"options":null},"NOD\\None Killed":{"note":"","data":["80092E4F 0000"],"options":null},"Time Spent On Mission":{"note":"","data":["80092E3B 00??"],"options":{"Max Time":"FF","No Time":"00"}},"Tons Of Ending Credits":{"note":"","data":["81092E3C 0FFF","81092E3E FFFF"],"options":null}},"95B2B30B-2B6415C1-C:50":{"Boots Of Speed Select\\Player 1":{"note":"","data":["8113F128 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113F2C4 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113F460 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113F5FC ????"],"options":{"Off":"0000","On":"03FF"}},"Enable Cheat Menu":{"note":"","data":["80137D33 0005","81137C56 07FF"],"options":null},"Have All\\Armour":{"note":"","data":["8013F081 0019","8013F085 0014","8013F089 0014","8013F08D 0014"],"options":null},"Have All\\Items And Artifacts\\Player 1":{"note":"","data":["8013F091 0001","8013F093 00FF","8013F095 0002","8013F097 00FF","8013F099 0003","8013F09B 00FF","8013F09D 0004","8013F09F 00FF","8013F0A1 0005","8013F0A3 00FF","8013F0A5 0006","8013F0A7 00FF","8013F0A9 0007","8013F0AB 00FF","8013F0AD 0008","8013F0AF 00FF","8013F0B1 0009","8013F0B3 00FF","8013F0B5 000A","8013F0B7 00FF","8013F0B9 000B","8013F0BB 00FF","8013F0BD 000C","8013F0BF 00FF","8013F0C1 000D","8013F0C3 00FF","8013F0C5 000E","8013F0C7 00FF","8013F0C9 000F","8013F0CB 00FF","8013F0CD 0010","8013F0CF 00FF","8013F0D1 0011","8013F0D3 00FF","8013F0D5 0012","8013F0D7 00FF","8013F0D9 0013","8013F0DB 00FF","8013F0DD 0014","8013F0DF 00FF","8013F0E1 0015","8013F0E3 00FF","8013F0E5 0016","8013F0E7 00FF","8013F0E9 0017","8013F0EB 00FF","8013F0ED 0018","8013F0EF 00FF","8013F0F1 0019","8013F0F3 00FF","8013F0F5 001B","8013F0F7 00FF","8013F0F9 001C","8013F0FB 00FF","8013F0FD 001D","8013F0FF 00FF","8013F101 001E","8013F103 00FF","8013F105 001F","8013F107 00FF","8013F109 0020","8013F10B 00FF","8013F119 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113F12C 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113F2C8 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113F464 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113F600 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013F145 00FF","8013F147 00FF","8013F149 00FF","8013F14B 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013F2E1 00FF","8013F2E3 00FF","8013F2E5 00FF","8013F2E7 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013F47D 00FF","8013F47F 00FF","8013F481 00FF","8013F483 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013F619 00FF","8013F61B 00FF","8013F61D 00FF","8013F61F 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013F14D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013F2E9 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013F485 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013F621 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013F14F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013F2EB 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013F487 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013F623 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113F11C ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113F2B8 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113F454 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113F5F0 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113F11C FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113F2B8 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113F454 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113F5F0 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8013F123 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113F2BE ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113F45A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113F5F6 ????"],"options":{"Off":"0000","On":"03FF"}}},"964ADD0B-B29213DB-C:4A":{"Access All In-Game Cheats":{"note":"Pause Gameplay To Access","data":["81157E46 000F","81157E56 FFFF"],"options":null},"Access All Navigation Cards":{"note":"","data":["80157E9B 0005"],"options":null},"Access Secret Worlds":{"note":"","data":["81152946 0064"],"options":null},"Infinite Lives":{"note":"","data":["81157EAE 0063"],"options":null},"Max \u0026 Total Gold":{"note":"","data":["80157E4B 0063","80157E4F 0063"],"options":null}},"96747EB4-104BB243-C:4A":{"All levels Complete":{"note":"This activate's solo missions, give all medals on solo missions, activate cheats, activate cinemas, and who knows what else. I just don't Have\\the time to identify these codes. I know that some of this is creditted to Zap2. I don't Have\\the time to cut those codes out.","data":["50003201 0000","800A2940 0001","50003201 0000","800A2972 0001","50003201 0000","800A29A4 0001"],"options":null},"Have All Weapons\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80206B60 0007","801EDB60 0007","801D4B60 0007"],"options":null},"Have All Weapons\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["802087D0 0007","801EF7D0 0007","801D67D0 0007"],"options":null},"Infinite Ammo\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["802062EF 00FF","801ED2EF 00FF","801D42EF 00FF","80205B4B 00FF","801ECB4B 00FF","801D3B4B 00FF"],"options":null},"Infinite Ammo\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80207F5F 00FF","801EEF5F 00FF","801D5F5F 00FF","802077BB 00FF","801EE7BB 00FF","801D57BB 00FF"],"options":null},"Infinite Health\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["812053CC 3F80","811EC3CC 3F80","811D33CC 3F80"],"options":null},"Infinite Health\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8120703C 3F80","811EE03C 3F80","811D503C 3F80"],"options":null},"Infinite Shield\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["812053E0 3F80","811E35A0 3F80","811CA5A0 3F80"],"options":null},"Infinite Shield\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["811FE210 3F80","811E5210 3F80","811CC210 3F80"],"options":null}},"979B263E-F8470004-C:50":{"Access Gargos Character":{"note":"","data":["80127DC8 0001"],"options":null},"Access In-Game Cheats":{"note":"","data":["801283DC 0006"],"options":null},"Fast Kick \u0026 Punch":{"note":"","data":["801D357E 0010"],"options":null},"Infinite Health":{"note":"","data":["801D3584 0078"],"options":null},"Invincible":{"note":"","data":["801D35D4 000A"],"options":null},"Max Blood":{"note":"","data":["80127D5D 0003"],"options":null},"No Time Limit":{"note":"","data":["80127D5B 0001"],"options":null}},"98DF9DFC-6606C189-C:45":{"Belongings\\Slot 01":{"note":"","data":["80189084 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 02":{"note":"","data":["80189085 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 03":{"note":"","data":["80189086 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 04":{"note":"","data":["80189087 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 05":{"note":"","data":["80189088 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 06":{"note":"","data":["80189089 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 07":{"note":"","data":["8018908A 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 08":{"note":"","data":["8018908B 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Have\\All Pics":{"note":"","data":["8118905A FFFF"],"options":null},"Have\\Max Shipped In Bin!":{"note":"","data":["8023738A FFFF"],"options":null},"Have\\Win Dog Races":{"note":"","data":["801886B0 00FF"],"options":null},"Infinite\\Cake Card Points":{"note":"","data":["80181B10 0063"],"options":null},"Infinite\\Chicken Feed":{"note":"","data":["80237411 005C"],"options":null},"Infinite\\Flower Card Points":{"note":"","data":["802373F0 0063"],"options":null},"Infinite\\Fodder Spout (Sheep And Cows)":{"note":"","data":["81180714 0063"],"options":null},"Infinite\\Horse Stamina":{"note":"","data":["802F5015 0002"],"options":null},"Infinite\\Lumber":{"note":"","data":["81189E50 03E7"],"options":null},"Infinite\\Medals For Horse \u0026 Dog Races":{"note":"","data":["81189B06 270F","81205206 270F"],"options":null},"Infinite\\Money":{"note":"","data":["811FD60E FFFF"],"options":null},"Infinite\\Stamina":{"note":"","data":["80189060 00FF"],"options":null},"Infinite\\Watering Can Uses":{"note":"","data":["8016FBCD 0004"],"options":null},"Item\\Slot 01":{"note":"","data":["8018908E 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 02":{"note":"","data":["8018908F 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 03":{"note":"","data":["80189090 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 04":{"note":"","data":["80189091 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 05":{"note":"","data":["80189092 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 06":{"note":"","data":["80189093 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 07":{"note":"","data":["80189094 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 08":{"note":"","data":["80189095 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 09":{"note":"","data":["80189096 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 10":{"note":"","data":["80189097 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 11":{"note":"","data":["80189098 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 12":{"note":"","data":["80189099 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 13":{"note":"","data":["8018909A 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 14":{"note":"","data":["8018909B 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 15":{"note":"","data":["8018909C 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 16":{"note":"","data":["8018909D 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 17":{"note":"","data":["8018909E 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 18":{"note":"","data":["8018909F 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 19":{"note":"","data":["801890A0 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 20":{"note":"","data":["801890A1 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 21":{"note":"","data":["801890A2 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 22":{"note":"","data":["801890A3 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 23":{"note":"","data":["801890A4 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 24":{"note":"","data":["801890A5 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Make\\Ann Love You":{"note":"","data":["801C3F93 00FF"],"options":null},"Make\\Elli Love You":{"note":"","data":["801C3F92 00FF"],"options":null},"Make\\Karen Love You":{"note":"","data":["801C3F94 00FF"],"options":null},"Make\\Maria Love You":{"note":"","data":["801C3F90 00FF"],"options":null},"Make\\Popuri Love You":{"note":"","data":["801C3F91 00FF"],"options":null},"Tool\\Slot 01":{"note":"","data":["80189075 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 02":{"note":"","data":["80189076 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 03":{"note":"","data":["80189077 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 04":{"note":"","data":["80189078 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 05":{"note":"","data":["80189079 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 06":{"note":"","data":["8018907A 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 07":{"note":"","data":["8018907B 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 08":{"note":"","data":["8018907C 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}}},"98F9F2D0-03D9F09C-C:50":{"Foul score will stay at 0":{"note":"","data":["802EF725 0000"],"options":null},"Have 5 games won":{"note":"","data":["802EF721 0005"],"options":null},"Pot 1 to win Set points to 25 in straight pool":{"note":"","data":["802EF71D 0019"],"options":null},"Score 0 points in shark skins":{"note":"","data":["802EF723 0000"],"options":null}},"99150E18-1266E6A5-C:45":{"1 Million Points":{"note":"","data":["8119054C 000F","8119054E 4240"],"options":null},"Access In-Game Cheat Menu":{"note":"","data":["50001104 0000","800E9DD8 0001"],"options":null},"All Complete\\Bob Burnquist":{"note":"","data":["810E8924 FFFF","810E8926 FFFF","810E8928 FFFF","810E892A FFFF","810E892C FFFF","810E892E FFFF","810E8930 FFFF","810E8932 FFFF"],"options":null},"All Complete\\Tony Hawk":{"note":"","data":["810E8840 FFFF","810E8842 FFFF","810E8844 FFFF","810E8846 FFFF","810E8848 FFFF","810E884A FFFF","810E884C FFFF","810E884E FFFF"],"options":null},"All Gaps\\Hanger":{"note":"","data":["800E9CC5 00FF","810E9CC6 FFFF"],"options":null},"All Gaps\\Marseille":{"note":"","data":["810E9CDC FFFF","810E9CDE FFFF","800E9CE3 000F"],"options":null},"All Gaps\\Philadelphia":{"note":"","data":["810E9D0C FFFF","810E9D0E FFFF","810E9D12 0FFF"],"options":null},"All Gaps\\School II":{"note":"","data":["810E9CD0 FFFF","810E9CD2 FFFF","810E9CD6 0FFF"],"options":null},"All Gaps\\Skatestreet":{"note":"","data":["810E9D00 FFFF","810E9D02 FFFF","800E9D07 000F"],"options":null},"All Gaps\\Venice Beach":{"note":"","data":["810E9CF4 FFFF","810E9CF6 FFFF","810E9CFA 0FFF"],"options":null},"All Tricks Available\\Custom Player 1":{"note":"","data":["810E9454 FFFF","810E9456 FFFF","810E9458 FFFF","810E945A FFFF","810E945C FFFF","810E945E FFFF"],"options":null},"All Tricks Available\\Custom Player 2":{"note":"","data":["810E9538 FFFF","810E953A FFFF","810E953C FFFF","810E953E FFFF","810E9540 FFFF","810E9542 FFFF"],"options":null},"All Tricks Available\\Custom Player 3":{"note":"","data":["810E961C FFFF","810E961E FFFF","810E9620 FFFF","810E9622 FFFF","810E9624 FFFF","810E9626 FFFF"],"options":null},"All Tricks Available\\Custom Player 4":{"note":"","data":["810E9700 FFFF","810E9702 FFFF","810E9704 FFFF","810E9706 FFFF","810E9708 FFFF","810E970A FFFF"],"options":null},"Always Special On Cheat":{"note":"","data":["800E9DEC 0001"],"options":null},"Infinte Time":{"note":"","data":["810E87AA 0000"],"options":null},"Max Cash\\Andrew Reynolds":{"note":"","data":["810E903C 000F","810E903E 423F","810E9040 000F","810E9042 423F"],"options":null},"Max Cash\\Bob Burnquist":{"note":"","data":["810E891C 000F","810E891E 423F","810E8920 000F","810E8922 423F"],"options":null},"Max Cash\\Bucky Lasek":{"note":"","data":["810E8D90 000F","810E8D92 423F","810E8D94 000F","810E8D96 423F"],"options":null},"Max Cash\\Chad Muska":{"note":"","data":["810E8F58 000F","810E8F5A 423F","810E8F5C 000F","810E8F5E 423F"],"options":null},"Max Cash\\Custom Player 1":{"note":"","data":["810E93CC 000F","810E93CE 423F","810E93D0 000F","810E93D2 423F"],"options":null},"Max Cash\\Custom Player 2":{"note":"","data":["810E94B0 000F","810E94B2 423F","810E94B4 000F","810E94B6 423F"],"options":null},"Max Cash\\Custom Player 3":{"note":"","data":["810E9594 000F","810E9596 423F","810E9598 000F","810E959A 423F"],"options":null},"Max Cash\\Custom Player 4":{"note":"","data":["810E9678 000F","810E967A 423F","810E967C 000F","810E967E 423F"],"options":null},"Max Cash\\Elissa Steamer":{"note":"","data":["810E9204 000F","810E9206 423F","810E9208 000F","810E920A 423F"],"options":null},"Max Cash\\Eric Koston":{"note":"","data":["810E8CAC 000F","810E8CAE 423F","810E8CB0 000F","810E8CB2 423F"],"options":null},"Max Cash\\Geoff Rowley":{"note":"","data":["810E9120 000F","810E9122 423F","810E9124 000F","810E9126 423F"],"options":null},"Max Cash\\Jamie Thomas":{"note":"","data":["810E92E8 000F","810E92EA 423F","810E92EC 000F","810E92EE 423F"],"options":null},"Max Cash\\Kareem Campbell":{"note":"","data":["810E8AE4 000F","810E8AE6 423F","810E8AE8 000F","810E8AEA 423F"],"options":null},"Max Cash\\Officer Dick":{"note":"","data":["810E975C 000F","810E975E 423F","810E9760 000F","810E9762 423F"],"options":null},"Max Cash\\Rodney Mullen":{"note":"","data":["810E8E74 000F","810E8E76 423F","810E8E78 000F","810E8E7A 423F"],"options":null},"Max Cash\\Rune Glifberg":{"note":"","data":["810E8BC8 000F","810E8BCA 423F","810E8BCC 000F","810E8BCE 423F"],"options":null},"Max Cash\\Steve Caballero":{"note":"","data":["810E8A00 000F","810E8A02 423F","810E8A04 000F","810E8A06 423F"],"options":null},"Perfect Balance Cheat":{"note":"","data":["800E9DE8 0001"],"options":null},"Tricks Available\\Andrew Reynolds":{"note":"","data":["810E90C4 FFFF","810E90C6 FFFF","810E90C8 FFFF","810E90CA FFFF","810E90CC FFFF","810E90CE FFFF"],"options":null},"Tricks Available\\Bob Burnquist":{"note":"","data":["810E89A4 FFFF","810E89A6 FFFF","810E89A8 FFFF","810E89AA FFFF","810E89AC FFFF","810E89AE FFFF"],"options":null},"Tricks Available\\Chad Muska":{"note":"","data":["810E8FE0 FFFF","810E8FE2 FFFF","810E8FE4 FFFF","810E8FE6 FFFF","810E8FE8 FFFF","810E8FEA FFFF"],"options":null},"Tricks Available\\Elissa Steamer":{"note":"","data":["810E928C FFFF","810E928E FFFF","810E9290 FFFF","810E9292 FFFF","810E9294 FFFF","810E9296 FFFF"],"options":null},"Tricks Available\\Eric Koston":{"note":"","data":["810E8D34 FFFF","810E8D36 FFFF","810E8D38 FFFF","810E8D3A FFFF","810E8D3C FFFF","810E8D3E FFFF"],"options":null},"Tricks Available\\Geoff Rowley":{"note":"","data":["810E91A8 FFFF","810E91AA FFFF","810E91AC FFFF","810E91AE FFFF","810E91B0 FFFF","810E91B2 FFFF"],"options":null},"Tricks Available\\Jamie Thomas":{"note":"","data":["810E9370 FFFF","810E9372 FFFF","810E9374 FFFF","810E9376 FFFF","810E9378 FFFF","810E937A FFFF"],"options":null},"Tricks Available\\Kareem Campbell":{"note":"","data":["810E8B6C FFFF","810E8B6E FFFF","810E8B70 FFFF","810E8B72 FFFF","810E8B74 FFFF","810E8B76 FFFF"],"options":null},"Tricks Available\\Officer Dick":{"note":"","data":["810E97E4 FFFF","810E97E6 FFFF","810E97E8 FFFF","810E97EA FFFF","810E97EC FFFF","810E97EE FFFF"],"options":null},"Tricks Available\\Rodney Mullen":{"note":"","data":["810E8EFC FFFF","810E8EFE FFFF","810E8F00 FFFF","810E8F02 FFFF","810E8F04 FFFF","810E8F06 FFFF"],"options":null},"Tricks Available\\Rune Glifberg":{"note":"","data":["810E8C50 FFFF","810E8C52 FFFF","810E8C54 FFFF","810E8C56 FFFF","810E8C58 FFFF","810E8C5A FFFF"],"options":null},"Tricks Available\\Spider Man":{"note":"","data":["810E99AC FFFF","810E99AE FFFF","810E99B0 FFFF","810E99B2 FFFF","810E99B4 FFFF","810E99B6 FFFF"],"options":null},"Tricks Available\\Steve Caballero":{"note":"","data":["810E8A88 FFFF","810E8A8A FFFF","810E8A8C FFFF","810E8A8E FFFF","810E8A90 FFFF","810E8A92 FFFF"],"options":null},"Tricks Available\\Tony Hawk":{"note":"","data":["810E88C0 FFFF","810E88C2 FFFF","810E88C4 FFFF","810E88C6 FFFF","810E88C8 FFFF","810E88CA FFFF"],"options":null},"Unlock Hoffman Factory \u0026 Skate Heaven":{"note":"","data":["800EA0CB 003F"],"options":null},"Unlock\\Officer Dick":{"note":"","data":["800E9DDC 0001","800F087B 0001"],"options":null},"Unlock\\Spider Man":{"note":"","data":["800E9DD8 0001","800F0B9B 0001"],"options":null}},"99179359-2FE7EBC3-C:50":{"Access All\\Bonus Coins":{"note":"","data":["50000F02 0000","810A6124 0007"],"options":null},"Access All\\Paw Coins":{"note":"","data":["50000F02 0000","810A60E8 03FF"],"options":null},"Access All\\Special Remote Controls":{"note":"","data":["810A60E4 FFFF","810A60E6 FFFF"],"options":null},"Access All\\ordinary Remote Controls":{"note":"","data":["50000F01 0000","800A60A8 000F"],"options":null},"Crazy Tail":{"note":"","data":["8110955E 0001"],"options":null},"Infinite\\Health":{"note":"","data":["810A60C8 0005"],"options":null},"Infinite\\Lives":{"note":"","data":["810A60C6 0064"],"options":null}},"9AB3B50A-BC666105-C:44":{"Access In-Game Cheat Menu":{"note":"To Access Pause Game Play. This gives you access to In-game Cheats like God Mode,Level Select,All Items Etc","data":["81137CD6 07FF","80137DB3 0005"],"options":null},"Boots Of Speed Select\\Player 1":{"note":"","data":["8113F538 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113F6D4 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113F870 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113FA0C ????"],"options":{"Off":"0000","On":"03FF"}},"Have All\\Armour":{"note":"","data":["8013F491 0019","8013F495 0014","8013F499 0014","8013F49D 0014"],"options":null},"Have All\\Items And Artifacts\\Player 1":{"note":"","data":["8013F4A1 0001","8013F4A3 00FF","8013F4A5 0002","8013F4A7 00FF","8013F4A9 0003","8013F4AB 00FF","8013F4AD 0004","8013F4AF 00FF","8013F4B1 0005","8013F4B3 00FF","8013F4B5 0006","8013F4B7 00FF","8013F4B9 0007","8013F4BB 00FF","8013F4BD 0008","8013F4BF 00FF","8013F4C1 0009","8013F4C3 00FF","8013F4C5 000A","8013F4C7 00FF","8013F4C9 000B","8013F4CB 00FF","8013F4CD 000C","8013F4CF 00FF","8013F4D1 000D","8013F4D3 00FF","8013F4D5 000E","8013F4D7 00FF","8013F4D9 0010","8013F4DB 00FF","8013F4DD 0011","8013F4DF 00FF","8013F4E1 0012","8013F4E3 00FF","8013F4E5 0013","8013F4E7 00FF","8013F4E9 0014","8013F4EB 00FF","8013F4ED 0015","8013F4EF 00FF","8013F4F1 0016","8013F4F3 00FF","8013F4F5 0017","8013F4F7 00FF","8013F4F9 0018","8013F4FB 00FF","8013F4FD 0019","8013F4FF 00FF","8013F501 001A","8013F503 00FF","8013F505 001B","8013F507 00FF","8013F509 001C","8013F50B 00FF","8013F50D 001D","8013F50F 00FF","8013F511 001E","8013F513 00FF","8013F515 001F","8013F517 00FF","8013F519 0020","8013F51B 00FF","8013F529 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113F53C 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113F6D8 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113F874 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113FA10 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013F555 00FF","8013F557 00FF","8013F559 00FF","8013F55B 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013F6F1 00FF","8013F6F3 00FF","8013F6F5 00FF","8013F6F7 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013F88D 00FF","8013F88F 00FF","8013F891 00FF","8013F893 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013FA29 00FF","8013FA2B 00FF","8013FA2D 00FF","8013FA2F 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013F55D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013F2E9 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013F485 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013F621 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013F55F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013F2EB 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013F487 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013F623 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113F52C ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113F6C8 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113F864 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113FA00 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113F52C FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113F2B8 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113F454 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113F5F0 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8113F533 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113F6CE ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113F86A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113FA06 ????"],"options":{"Off":"0000","On":"03FF"}}},"9B500E8E-E90550B3-C:50":{"Have All Guns In Chest":{"note":"","data":["50000E04 0100","810E59F4 05FF"],"options":null},"Have All Main Items In Chest":{"note":"If you want items that are not listed in the Chest, then just use the Have Item On Slot Select code to have what you desire.","data":["810E5A2C 17FF","810E5A30 1EFF","810E5A34 1FFF","810E5A38 23FF","50000404 0100","810E5A3C 25FF","810E5A4C 2AFF","810E5A50 2BFF","50000304 0100","810E5A54 2EFF","50000F04 0100","810E5A60 32FF","810E5A9C 43FF","50000504 0100","810E5AA0 47FF","50000404 0100","810E5AB4 53FF","50000C04 0100","810E5AC4 58FF"],"options":null},"Have\\Fine Condition Always":{"note":"","data":["810DDEE4 0000"],"options":null},"Have\\Item On Slot Select\\Slot 01":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59C8 00??","800E59C9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 02":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59CC 00??","800E59CD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 03":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59D0 00??","800E59D1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 04":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59D4 00??","800E59D5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 05":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59D8 00??","800E59D9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 06":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59DC 00??","800E59DD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 07":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59E0 00??","800E59E1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 08":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59E4 00??","800E59E5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 09":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59E8 00??","800E59E9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 10":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59EC 00??","800E59ED 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Infinite\\Health":{"note":"","data":["810DDE22 00C8"],"options":null},"Infinite\\Time":{"note":"","data":["800E57BF 0010"],"options":null},"Play As":{"note":"This allows you to select what character you wish to play as. Just slect on load and select as normal at the menu and when in game you will be the character of your choice","data":["810DDC38 ????"],"options":{"Ada (can crash the game)":"0E80","Cheryl":"0F80","Claire Original":"0380","Claire as Biker":"0980","Claire without jacket":"0780","Claires body Leons outfit":"0B80","Hunk (can crash the game)":"0C80","Leon Original":"0280","Leon Wounded":"0680","Leon as Biker":"0A80","Leon as Stars":"0880","To Fu":"0D80"}},"Play Extra Mission":{"note":"This allows you to select what extra mission you wish to play. Just slect on load and carry on as normal at the menu and when in game you will be the character of your choice Do not use at the same time as [Resident Evil 2 Mode]","data":["810DDBEE 00??"],"options":{"The 4th Survior":"48","To-Fu":"49"}},"Quick Chest Access":{"note":"With this code, all you have to do to access the chest, is hold L and Press Start.","data":["D1014FA4 0020","81122598 0100"],"options":null},"Quick Save Access":{"note":"(1 Anytime, anywhere, press Z and B at the same time. You'll get the standard typewriter text: \"It's an old typewriter. You can save your progress with this.\" Note that you must, of course, have an ink ribbon to save. 2) Choose \"Yes\" and you'll be able to save normally. Instead of the location name, your save file will say \"Scenario 1st\" or \"Scenario 2nd.\" 3) When you load your save file, you'll have to skip through the intro, but when the game loads up you'll be exactly where you saved!","data":["D1014FA4 6000","810E5428 8007","D1014FA4 6000","810E542A 0E30"],"options":null},"[Saves Always 0]":{"note":"No matter how many saves you do ithis makes the game think you Have\\not saved.","data":["810E8B50 0000"],"options":null}},"9C40016E-63BFFE91-C:4A":{"All Bonus Buildings":{"note":"","data":["8123D22A 0007","8123D21C 000F","81155BF8 03FF","81157A6C 0004"],"options":null},"Infinite Money":{"note":"","data":["8123D190 05F5","8123D192 E0FF"],"options":null},"Unlock All Scenarios":{"note":"","data":["810DD938 FFFF"],"options":null}},"9C663069-80F24A80-C:50":{"Lower Left Character\\Coin Options":{"note":"","data":["800FFB09 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800DDD1A 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800FFB0C 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["800FFB39 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800DDD5E 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800FFB3C 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Mini Game\\Max 99 Coins":{"note":"","data":["800FFF61 0063"],"options":null},"Mini Game\\Unlimited 99 lives":{"note":"","data":["800FFF58 0063"],"options":null},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["800FFAA9 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800DDC92 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800FFAAC 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["800FFAD9 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800DDCD6 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800FFADC 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Widescreen":{"note":"","data":["8101E3D2 3FE3","8101EBE6 3FE3","D1105E52 3FAA","81105E52 3FE3","8104DDEC 0801","8104DDEE 86D1","8104DDF0 C602","8104DDF2 0004","81061B44 3C1B","81061B46 3FAB","81061B48 449B","81061B4A 0000","81061B4C 4600","81061B4E 1082","81061B50 8E06","81061B52 0008","81061B54 0801","81061B56 377D","81061B58 4405","81061B5A 1000","81025D68 0801","81025D6A 86D7","81025D6C C602","81025D6E 0024","81061B5C 3C1B","81061B5E 800E","81061B60 8F7B","81061B62 FADC","81061B64 101B","81061B66 0004","81061B68 2400","81061B6C 3C1B","81061B6E 3FAB","81061B70 449B","81061B72 0000","81061B74 4600","81061B76 1082","81061B78 4405","81061B7A 1000","81061B7C 0800","81061B7E 975C","81061B80 8E06","81061B82 0028"],"options":null}},"9C7318D2-24AE0DC1-C:4A":{"Access All\\Cars":{"note":"","data":["8002CA97 000B"],"options":null},"Access All\\Difficulties":{"note":"","data":["8002CA9B 0004"],"options":null},"Access All\\Multiplayer Levels":{"note":"","data":["50000901 0000","8002CAA0 0001"],"options":null},"Access All\\Tracks":{"note":"","data":["8002CA93 0006"],"options":null},"Access In-Game Cheats":{"note":"","data":["50001301 0000","8002CAA8 0001"],"options":null},"Damage Select":{"note":"","data":["8002C833 00??"],"options":{"Double":"02","Half":"01","Normal":"00","Triple":"03"}},"Health Select":{"note":"","data":["8002C81F 00??"],"options":{"Bad Only":"02","Good Only":"01","Normal":"00","Off":"03"}},"Infinite Continues":{"note":"","data":["8002C6F7 0064"],"options":null},"Low Timer":{"note":"","data":["81025874 3001"],"options":null},"Power-Up Select":{"note":"","data":["8002C81B 00??"],"options":{"?":"05","Health":"06","Invincible":"07","Mines":"01","Nitros":"04","Normal":"00","Off":"08","Rockets":"02","Stealer":"03"}},"Radar":{"note":"","data":["8002C82F 00??"],"options":{"Off":"01","On":"00"}},"Speed units\\Kph or Mph":{"note":"","data":["81025908 ????"],"options":{"Kph":"0100","Mph":"0001"}},"View Mode Select?":{"note":"","data":["8002C82B 00??"],"options":{"Fisheye":"03","Flip":"02","Fog":"01","Normal":"00"}},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\01 Coventry Cove":{"note":"","data":["8036B243 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\02 Mount Mayhem":{"note":"","data":["80351283 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\03 Inferno Isle":{"note":"","data":["80364153 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\04 Sunset Sands":{"note":"","data":["8034242B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\05 Metro Madness":{"note":"","data":["8035CAFB 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\06 Wicked Woods":{"note":"","data":["80354A33 0064"],"options":null}},"9C8FB2FA-9B84A09B-C:45":{"Have All Pikachus Magnemites":{"note":"","data":["801183BC 0000","801183BD 0000","801183BE 0000"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 1":{"note":"","data":["81285A18 03E7"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 2":{"note":"","data":["81286438 03E7"],"options":null},"Pokemon\\Inf Spells\\Player 1":{"note":"","data":["810AE580 FFFF","810AE582 FFFF","810AE5D4 FFFF","810AE5D6 FFFF","810AE628 FFFF","810AE62A FFFF"],"options":null},"Pokemon\\Inf Spells\\Player 2":{"note":"","data":["810AE79C FFFF","810AE79E FFFF","810AE7F0 FFFF","810AE7F2 FFFF","810AE844 FFFF","810AE846 FFFF"],"options":null},"Pokemon\\Max HP\\Player 1":{"note":"","data":["810AE586 03E7","810AE5DA 03E7","810AE62E 03E7"],"options":null},"Pokemon\\Max HP\\Player 2":{"note":"","data":["810AE7A2 03E7","810AE7F6 03E7","810AE84A 03E7"],"options":null},"Ultimate Code":{"note":"what's so ultimate about this code is it raises your Pokemon to its full potential. Even at Level 100, most Pokemon still have a way to go to raise their stats to the max. But with this code, you can instantly boost any Pokemon to its greatest potential!!!","data":["81171F3C FF01","81171F3E FF01","81171F40 FF01","81171F42 FF01","81171F44 FF01"],"options":null}},"9C961069-F5EA488D-C:4A":{"Player 1 Health":{"note":"If you select the Low option, It will give your opponent an easy win over over you","data":["8110CF68 ????"],"options":{"Low":"4220","Max":"0000"}},"Player 2 Health":{"note":"If you select the Low option, It will give your opponent an easy win over over you","data":["8110CF6C ????"],"options":{"Low":"4220","Max":"0000"}}},"9CAB6AEA-87C61C00-C:45":{"Boots Of Speed Select\\Player 1":{"note":"","data":["8113DB58 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113DCF4 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113DE90 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113E02C ????"],"options":{"Off":"0000","On":"03FF"}},"Enable Cheat Menu":{"note":"","data":["80136773 0005","81136696 FFFF"],"options":null},"Have All\\Armour":{"note":"","data":["8013DAB1 0019","8013DAB5 0014","8013DAB9 0014","8013DABD 0014"],"options":null},"Have All\\Items And Artifacts":{"note":"","data":["8013DAC1 0001","8013DAC3 00FF","8013DAC5 0002","8013DAC7 00FF","8013DAC9 0003","8013DACB 00FF","8013DACD 0004","8013DACF 00FF","8013DAD1 0005","8013DAD3 00FF","8013DAD5 0006","8013DAD7 00FF","8013DAD9 0007","8013DADB 00FF","8013DADD 0008","8013DADF 00FF","8013DAE1 0009","8013DAE3 00FF","8013DAE5 000A","8013DAE7 00FF","8013DAE9 000B","8013DAEB 00FF","8013DAED 000C","8013DAEF 00FF","8013DAF1 000D","8013DAF3 00FF","8013DAF5 000E","8013DAF7 00FF","8013DAF9 000F","8013DAFB 00FF","8013DAFD 0010","8013DAFF 00FF","8013DB01 0011","8013DB03 00FF","8013DB05 0012","8013DB07 00FF","8013DB09 0013","8013DB0B 00FF","8013DB0D 0014","8013DB0F 00FF","8013DB11 0015","8013DB13 00FF","8013DB15 0016","8013DB17 00FF","8013DB19 0017","8013DB1B 00FF","8013DB1D 0018","8013DB1F 00FF","8013DB21 0019","8013DB23 00FF","8013DB25 001B","8013DB27 00FF","8013DB29 001C","8013DB2B 00FF","8013DB2D 001D","8013DB2F 00FF","8013DB31 001E","8013DB33 00FF","8013DB35 001F","8013DB37 00FF","8013DB39 0020","8013DB3B 00FF","8013DB49 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113DB5C 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113DCF8 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113DE94 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113E030 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013DB75 00FF","8013DB79 00FF","8013DB7B 00FF","8013DB77 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013DD11 00FF","8013DD13 00FF","8013DD15 00FF","8013DD17 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013DEAD 00FF","8013DEAF 00FF","8013DEB1 00FF","8013DEB3 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013E049 00FF","8013E04B 00FF","8013E04D 00FF","8013E04F 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013DB7D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013DD19 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013DEB5 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013E051 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013DB7F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013DD1B 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013DEB7 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013E053 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113DB4C ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113DCE8 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113DE84 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113E020 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113DB4C FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113DCE8 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113DE84 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113E020 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8113DB53 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113DCEE ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113DE8A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113E026 ????"],"options":{"Off":"0000","On":"03FF"}}},"9CCE5B1D-6351E283-C:00":{"Invaders\\Have Infinite 99 Credits":{"note":"","data":["802C40AB 0099"],"options":null},"Invaders\\Have Infinite Max Lives":{"note":"","data":["802C41BF 0008"],"options":null}},"9CE02E22-206EF1B0-C:4A":{"1 Lap To Race":{"note":"In Single and Chapionship Modes use the Laps In Race Cheat or use the in game setting to choose how many laps you want per race and them use this cheat and amount of Laps to have only have 1 left if needed.","data":["80098A5D 00??"],"options":{"12 of 12 Laps":"0C","15 of 15 Laps":"0F","18 of 18 Laps":"12","21 of 21 Laps":"15","24 of 24 Laps":"18","27 of 27 Laps":"1B","3 of 3 Laps":"03","30 of 30 Laps":"1E","6 of 6 Laps":"06","9 of 9 Laps":"09"}},"Always 1st Place":{"note":"","data":["81098A58 0001"],"options":null},"Car Select":{"note":"","data":["800C50B1 00??"],"options":{"Car 1":"00","Car 10":"09","Car 11":"0A","Car 12":"0B","Car 13":"0C","Car 14":"0D","Car 15":"0E","Car 16":"0F","Car 17":"10","Car 18":"11","Car 2":"01","Car 3":"02","Car 4":"03","Car 5":"04","Car 6":"05","Car 7":"06","Car 8":"07","Car 9":"08"}},"Freeze\\Lap Timer":{"note":"Single and Chapionship Race Modes","data":["800967E5 0000","800967E7 0000"],"options":null},"Freeze\\Pit Timer":{"note":"Single and Chapionship Race Modes","data":["800968A5 0000","800968A7 0000"],"options":null},"Freeze\\Timer Challenge Timer":{"note":"Timer Challenge","data":["800C4F87 0050"],"options":null},"Laps\\In Race\\Chapionship Race Mode":{"note":"","data":["800C4ED3 00??"],"options":{"12 Laps In Race":"0C","15 Laps In Race":"0F","18 Laps In Race":"12","21 Laps In Race":"15","24 Laps In Race":"18","27 Laps In Race":"1B","3 Laps In Race":"03","30 Laps In Race":"1E","6 Laps In Race":"06","9 Laps In Race":"09"}},"Laps\\In Race\\Single Race Mode":{"note":"","data":["800C4ED1 00??"],"options":{"12 Laps In Race":"0C","15 Laps In Race":"0F","18 Laps In Race":"12","21 Laps In Race":"15","24 Laps In Race":"18","27 Laps In Race":"1B","3 Laps In Race":"03","30 Laps In Race":"1E","6 Laps In Race":"06","9 Laps In Race":"09"}},"Pit Stops\\Championship":{"note":"","data":["800C4F13 00??"],"options":{"Off":"00","On":"01"}},"Pit Stops\\Single Race Mode":{"note":"","data":["800C4F11 00??"],"options":{"Off":"00","On":"01"}},"Track Direction\\Championship":{"note":"","data":["800C4EF3 00??"],"options":{"Normal":"00","Reverse":"01"}},"Weather\\Championship":{"note":"","data":["800C4F33 00??"],"options":{"Dry":"00","Night":"03","Wet":"01"}},"Weather\\Single Race Mode":{"note":"","data":["800C4F31 00??"],"options":{"Dry":"00","Night":"03","Wet":"01"}}},"9D7E3C4B-E60F4A6C-C:4A":{"Have All Weapons":{"note":"","data":["811ED1E2 FFFF"],"options":null},"Infinite\\Ammo (All Weapons)":{"note":"","data":["8125E330 A05B"],"options":null},"Infinite\\Armor":{"note":"","data":["801ED273 0064"],"options":null},"Infinite\\Experience":{"note":"","data":["801ED253 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["801ED251 0064"],"options":null},"Max\\Acro":{"note":"","data":["801ED25B 0007"],"options":null},"Max\\Attack":{"note":"","data":["801ED257 0007"],"options":null},"Max\\Power":{"note":"","data":["801ED25D 0007"],"options":null},"Max\\Speed":{"note":"","data":["801ED259 0007"],"options":null},"Max\\Vitality":{"note":"","data":["801ED255 0007"],"options":null}},"9E330C01-8C0314BA-C:45":{"Enable Battle Mode And Levels":{"note":"","data":["8008ED6E 0012"],"options":null},"GS Button For 255 Spare0 Missiles":{"note":"","data":["8814E648 00FF"],"options":null},"Gore Mode":{"note":"","data":["8008ED67 0012"],"options":null},"Infinite Lives":{"note":"","data":["8004013C 0005"],"options":null},"Infinite Shields":{"note":"","data":["D014E5E2 0011","8114E5E0 1000"],"options":null},"Lagfix":{"note":"","data":["80028E22 000D"],"options":null},"Sixty Frames":{"note":"","data":["800233C3 0001"],"options":null}},"9E8FCDFA-49F5652B-C:45":{"Player 1\\1-Hit Death":{"note":"","data":["D01D3484 0078","801D3484 0001"],"options":null},"Player 1\\Fast\\Jump Walk":{"note":"","data":["801D347C 0001"],"options":null},"Player 1\\Fast\\Punch Kick":{"note":"","data":["801D347E 0010"],"options":null},"Player 1\\Fight Gargos Immediately":{"note":"","data":["8012834B 000A"],"options":null},"Player 1\\Fulgore\\Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3478 0020","801D3479 0090","801D34C5 0092","801D3527 005E"],"options":null},"Player 1\\Fulgore\\Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3478 0023","801D3479 00F0","801D34C5 0080","801D3527 00AF"],"options":null},"Player 1\\Infinite Energy":{"note":"","data":["801D3484 0069"],"options":null},"Player 1\\Play As":{"note":"","data":["802C8CB8 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 1\\Slow Jump Walk":{"note":"","data":["801D347D 0050"],"options":null},"Player 1\\Spinal Always Has All Skulls":{"note":"","data":["801D3523 0006"],"options":null},"Player 1\\Undefeated Players Scroll By Quickly":{"note":"","data":["802C8CE8 0007"],"options":null},"Player 1\\Untouchable":{"note":"","data":["801D34D4 000A"],"options":null},"Player 1\\Wins Score":{"note":"","data":["8012830A 00FF"],"options":null},"Player 2\\Fast\\Jump Walk":{"note":"","data":["801D357C 0001"],"options":null},"Player 2\\Fast\\Punch Kick":{"note":"","data":["801D357E 0010"],"options":null},"Player 2\\Fulgore Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3578 0020","801D3579 0090","801D35C5 0092","801D3527 005E"],"options":null},"Player 2\\Fulgore Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3578 0023","801D3579 00F0","801D35C5 0080","801D3527 00AF"],"options":null},"Player 2\\Infinite Energy":{"note":"","data":["801D3584 0078"],"options":null},"Player 2\\Play As":{"note":"","data":["8004EA9D 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 2\\Slow\\Jump Walk":{"note":"","data":["801D357D 0050"],"options":null},"Player 2\\Slow\\Punch Kick":{"note":"","data":["801D357F 0050"],"options":null},"Player 2\\Spinal Always Has All Skulls":{"note":"","data":["801D3623 0006"],"options":null},"Player 2\\Untouchable":{"note":"","data":["801D34D5 000A"],"options":null},"Unlock All Options":{"note":"","data":["8012834C 0006"],"options":null}},"9E8FE2BA-8B270770-C:45":{"Always 60fps":{"note":"Intro with N logo is at 60fps now! Why is it a pointer address?!?","data":["D029571F 0002","8029571F 0001"],"options":null},"Player 1\\1-Hit Death":{"note":"","data":["D01D3484 0078","801D3484 0001"],"options":null},"Player 1\\Fast\\Jump Walk":{"note":"","data":["801D347C 0001"],"options":null},"Player 1\\Fast\\Punch Kick":{"note":"","data":["801D347E 0010"],"options":null},"Player 1\\Fight Gargos Immediately":{"note":"","data":["8012834B 000A"],"options":null},"Player 1\\Fulgore\\Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3478 0020","801D3479 0090","801D34C5 0092","801D3527 005E"],"options":null},"Player 1\\Fulgore\\Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3478 0023","801D3479 00F0","801D34C5 0080","801D3527 00AF"],"options":null},"Player 1\\Infinite Energy":{"note":"","data":["801D3484 0069"],"options":null},"Player 1\\Play As":{"note":"","data":["802C8CB8 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 1\\Slow Jump Walk":{"note":"","data":["801D347D 0050"],"options":null},"Player 1\\Spinal Always Has All Skulls":{"note":"","data":["801D3523 0006"],"options":null},"Player 1\\Undefeated Players Scroll By Quickly":{"note":"","data":["802C8CE8 0007"],"options":null},"Player 1\\Untouchable":{"note":"","data":["801D34D4 000A"],"options":null},"Player 1\\Wins Score":{"note":"","data":["8012830A 00FF"],"options":null},"Player 2\\Fast\\Jump Walk":{"note":"","data":["801D357C 0001"],"options":null},"Player 2\\Fast\\Punch Kick":{"note":"","data":["801D357E 0010"],"options":null},"Player 2\\Fulgore Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3578 0020","801D3579 0090","801D35C5 0092","801D3527 005E"],"options":null},"Player 2\\Fulgore Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3578 0023","801D3579 00F0","801D35C5 0080","801D3527 00AF"],"options":null},"Player 2\\Infinite Energy":{"note":"","data":["801D3584 0078"],"options":null},"Player 2\\Play As":{"note":"","data":["8004EA9D 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 2\\Slow\\Jump Walk":{"note":"","data":["801D357D 0050"],"options":null},"Player 2\\Slow\\Punch Kick":{"note":"","data":["801D357F 0050"],"options":null},"Player 2\\Spinal Always Has All Skulls":{"note":"","data":["801D3623 0006"],"options":null},"Player 2\\Untouchable":{"note":"","data":["801D34D5 000A"],"options":null},"Unlock All Options":{"note":"","data":["8012834C 0006"],"options":null}},"9EA95858-AF72B618-C:45":{"Infinite Coins Main Menu":{"note":"","data":["810F8CD2 FFFF"],"options":null},"Lower Left Char\\Item On Pick-Up":{"note":"","data":["800FD341 00??"],"options":{"Boo Bell":"07","Bowser Bomb":"03","Bowser Suit":"08","Dueling Glove":"04","Golden Mushroom":"06","Magic Lamp":"09","Mushroom":"00","Plunder Chest":"02","Skeleton Key":"01","Warp Block":"05"}},"Lower Left Char\\Rolls 10":{"note":"","data":["800DF55D 000A"],"options":null},"Lower Right Char\\Item On Pick-Up":{"note":"","data":["800FD375 00??"],"options":{"Boo Bell":"07","Bowser Bomb":"03","Bowser Suit":"08","Dueling Glove":"04","Golden Mushroom":"06","Magic Lamp":"09","Mushroom":"00","Plunder Chest":"02","Skeleton Key":"01","Warp Block":"05"}},"Lower Right Char\\Rolls 10":{"note":"","data":["800DF5A9 000A"],"options":null},"Upper Left Char\\Item On Pick-Up":{"note":"","data":["800FD2D9 00??"],"options":{"Boo Bell":"07","Bowser Bomb":"03","Bowser Suit":"08","Dueling Glove":"04","Golden Mushroom":"06","Magic Lamp":"09","Mushroom":"00","Plunder Chest":"02","Skeleton Key":"01","Warp Block":"05"}},"Upper Left Char\\Rolls 10":{"note":"","data":["800DF4C5 000A"],"options":null},"Upper Right Char\\Item On Pick-Up":{"note":"","data":["800DF30D 00??"],"options":{"Boo Bell":"07","Bowser Bomb":"03","Bowser Suit":"08","Dueling Glove":"04","Golden Mushroom":"06","Magic Lamp":"09","Mushroom":"00","Plunder Chest":"02","Skeleton Key":"01","Warp Block":"05"}},"Upper Right Char\\Rolls 10":{"note":"","data":["800DF511 000A"],"options":null},"Widescreen":{"note":"Boards in 4:3.","data":["8102045A 3FE3","81053554 0801","81053556 DFD4","81053558 3C1B","8105355A 3FAB","81077F50 449B","81077F52 6000","81077F54 460C","81077F56 0002","81077F58 4606","81077F5A 0002","81077F5C 0801","81077F5E 4D57","81077F60 0000","81077F62 0000"],"options":null}},"9F1ECAF0-EEC48A0E-C:4A":{"Infinite Energy\\Player 1":{"note":"","data":["800AC339 00??"],"options":{"Max":"40","None":"00"}},"Infinite Energy\\Player 2":{"note":"","data":["800AC429 00??"],"options":{"Max":"3F","None":"00"}},"Infinite Match Time":{"note":"","data":["800AB433 0000"],"options":null},"Super Attacks\\Player 1":{"note":"","data":["800AC33D 00??"],"options":{"3":"03","None":"00"}},"Super Attacks\\Player 2":{"note":"","data":["800AC42D 00??"],"options":{"3":"03","None":"00"}},"Unlock Extras":{"note":"","data":["800ACA05 00FF","800ACA07 00FF"],"options":null}},"9F5BF79C-D2FE08A0-C:45":{"Debug Mode":{"note":"","data":["8006C4C2 0001"],"options":null},"Have\\All Keys":{"note":"","data":["801639E9 000F"],"options":null},"Have\\All Weapons":{"note":"","data":["801639EB 007F"],"options":null},"Have\\Quad Damage":{"note":"","data":["8116397C 42C8"],"options":null},"Have\\Ring of Shadows":{"note":"","data":["811639E8 ????"],"options":{"Off":"0000","On":"42C8"}},"Infinite\\Ammo":{"note":"","data":["50000402 0000","80163A2D 0064","50000402 0000","81163A2C 03E7"],"options":null},"Infinite\\Armor":{"note":"","data":["81163944 42C8"],"options":null},"Infinite\\Bio Suit":{"note":"","data":["81163980 42C8"],"options":null},"Infinite\\Health":{"note":"","data":["81163930 42C8"],"options":null},"Multi\\Have All Weapons\\Player 1":{"note":"","data":["8016634B 007F"],"options":null},"Multi\\Have All Weapons\\Player 2":{"note":"","data":["8016661B 007F"],"options":null},"Multi\\Infinite Ammo\\Player 1":{"note":"","data":["50000402 0000","8116638C 03E7"],"options":null},"Multi\\Infinite Ammo\\Player 2":{"note":"","data":["50000402 0000","8116665C 03E7"],"options":null},"Multi\\Infinite Armor\\Player 1":{"note":"","data":["811662A4 42C8"],"options":null},"Multi\\Infinite Armor\\Player 2":{"note":"","data":["81166574 42C8"],"options":null},"Multi\\Infinite Bio Suit\\Player 1":{"note":"","data":["811662E0 42C8"],"options":null},"Multi\\Infinite Bio Suit\\Player 2":{"note":"","data":["811665B0 42C8"],"options":null},"Multi\\Infinite Health\\Player 1":{"note":"","data":["81166290 42C8"],"options":null},"Multi\\Infinite Health\\Player 2":{"note":"","data":["81166560 42C8"],"options":null},"Rapid Fire":{"note":"","data":["D00CA9E0 0020","8016396D 0001"],"options":null}},"9F8926A5-0587B409-C:50":{"10x Trick Multiplier":{"note":"","data":["800D60FE 0001"],"options":null},"Access All gold medals":{"note":"Also opens San Francisco \u0026 Downtown Minneapolis","data":["50000C14 0000","800DEA03 00FF","50000C14 0000","800DEA06 00FF","50000C14 0000","800DEA08 00FF"],"options":null},"Access all Levels,tapes,boards \u0026 Officer Dick":{"note":"","data":["50000C14 0000","800DE9FC 001E"],"options":null},"Max\\Air":{"note":"","data":["800D62DC 00FF"],"options":null},"Max\\Balance":{"note":"","data":["800D62DF 00FF"],"options":null},"Max\\Speed":{"note":"","data":["800DE83A 0001"],"options":null},"Max\\Turning":{"note":"","data":["800D6220 00FF"],"options":null}},"9FD375F8-45F32DC8-C:50":{"Access All Ticket Switches \u0026 Vehicles":{"note":"","data":["800A5E1F 0001","50002004 0000","810A5D70 FFFF"],"options":null},"Activate All In-Game Cheats":{"note":"With this code on, all rocket's abilities are now max","data":["810A6846 F5FF"],"options":null},"Infinite \u0026 Max Health":{"note":"","data":["8109FB82 000C","8109FB84 000A"],"options":null}},"9FE6162D-E97E4037-C:4A":{"All 52 Gold Gems Collected":{"note":"","data":["8016EA30 0003","8016EA31 007E","8016EA32 00FF","8016EA33 00EF","8016EA34 00FF","8016EA35 007F","8016EA36 00FF","8016EA37 00FC"],"options":null},"All Stages \u0026 Chapters Unlocked":{"note":"","data":["8016EA38 003B"],"options":null},"Infinite\\Health\\Marina":{"note":"","data":["810ECAD0 03E8"],"options":null},"Infinite\\Health\\Teran":{"note":"","data":["810F1750 03E8"],"options":null},"Infinite\\Max Red Gems":{"note":"","data":["81175056 270F"],"options":null},"Level Select":{"note":"To access this anytime during game, press L+R+Z to enable the menu. Press D-Pad Up / Down to move through the menu, D-Pad Left / Right to change level digits and then press Start to enter level. Don not do this whhile in pause mode (Start Button Pause) or the game will freeze.","data":["D10BC208 2030","800BC201 0004"],"options":null}},"9FF69D4F-195F0059-C:50":{"Easy Difficulty level":{"note":"","data":["800AD243 0000"],"options":null},"Fast Run":{"note":"","data":["8009B14F 0003"],"options":null},"Infinite Lives":{"note":"","data":["8109B0EE 03E7","810AD24E 03E7"],"options":null},"Level select":{"note":"Set Up In Menu","data":["81076FB6 6F74"],"options":null},"Rapid fire":{"note":"","data":["8009B15F 0003"],"options":null},"Speed level 1 Slow":{"note":"","data":["800AD247 0000"],"options":null}},"A03CF036-BCC1C5D2-C:50":{"Don't Hurt Mario\\Falling":{"note":"Press L to levitate \u0026 Let go to land","data":["8036CF6C 00E8","8136CEB8 FFFF"],"options":null},"Don't Hurt Mario\\Monsters":{"note":"","data":["80309457 0001"],"options":null},"Funny Mario Options\\Mario Walks On Water":{"note":"","data":["802A6204 0800","802A6206 0024","81000090 3C04","81000092 8034","81000094 8484","81000096 B1E6","81000098 4484","8100009A 3000","810000A0 4680","810000A2 3120","810000A4 4604","810000A6 903C","810000AC 4500","810000AE 0002","810000B4 4600","810000B6 2486","810000B8 080E","810000BA 05DB","810000BC E712"],"options":null},"Funny Mario Options\\Mario's Cap\\Off \u0026 in His Hand":{"note":"Here you can Choose Options with Mario with His Cap off \u0026 in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["80309437 00??"],"options":{"Cap In Hand":"20","Flying Mario Cap In Hand":"28","Invisible Mario Cap In Hand":"22","Invisible Metal Mario Cap In Hand":"26","Metal Mario Cap In Hand":"24"}},"Funny Mario Options\\Mario's Cap\\On \u0026 An Extra in His Hand":{"note":"Here you can Choose Options with Mario with His Cap on \u0026 An Extra in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["80309437 00??"],"options":{"Cap In Hand":"30","Flying Mario Cap In Hand":"38","Invisible Mario Cap In Hand":"32","Invisible Metal Mario Cap In Hand":"36","Metal Mario Cap In Hand":"34"}},"Have\\Debug Mode":{"note":"","data":["A02F9748 00??"],"options":{"Off":"00","On":"01"}},"Have\\Level Select":{"note":"","data":["A02F973C 0001"],"options":null},"Infinite\\Energy \u0026 Breath":{"note":"","data":["803094DE 0008"],"options":null},"Infinite\\Lives":{"note":"","data":["803094DD 0064"],"options":null},"Mario's Cap\\Off Options":{"note":"Here you can Choose Options with Mario without His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["80309437 00??"],"options":{"Flying Mario":"08","Invisible Flying Mario":"0A","Invisible Mario":"02","Invisible Metal Flying Mario":"0F","Mario No Cap":"01","Metal Flying Mario":"0D","Metal Mario":"04"}},"Mario's Cap\\On Options":{"note":"Here you can Choose Options with Mario with His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["80309437 00??"],"options":{"Flying Mario":"19","Invisible Mario":"12","Invisible Metal Mario":"16","Metal Mario":"15"}},"Press GS For 255 Coins":{"note":"","data":["893094D8 00FF"],"options":null},"[Slot A Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80202F23 0001","80202F0B 00C7","50001101 0000","80202F0C 00FF"],"options":null},"[Slot A Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80202F25 0064"],"options":null},"[Slot A Codes]\\Have All\\key doors unlocked (and mote empty)":{"note":"","data":["80202F0A 007E"],"options":null},"[Slot B Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80202F93 0001","80202F7B 00C7","50001101 0000","80202F7C 00FF"],"options":null},"[Slot B Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80202F95 0064"],"options":null},"[Slot B Codes]\\Have All\\key doors unlocked (and mote empty)":{"note":"","data":["80202F7A 007E"],"options":null},"[Slot C Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80203003 0001","80202FEB 00C7","50001101 0000","80202FEC 00FF"],"options":null},"[Slot C Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80203005 0064"],"options":null},"[Slot C Codes]\\Have All\\key doors unlocked (and mote empty)":{"note":"","data":["80202FEA 007E"],"options":null},"[Slot D Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80203073 0001","8020305B 00C7","50001101 0000","8020305C 00FF"],"options":null},"[Slot D Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80203075 0064"],"options":null},"[Slot D Codes]\\Have All\\key doors unlocked (and mote empty)":{"note":"","data":["8020305A 007E"],"options":null}},"A08D0F77-6F82E38C-C:45":{"(Tap L Twice) To Skip Intro":{"note":"On game start up, as soon as you see the N64 Logo, Tap the L Button twice letting go eachtime.","data":["D00A6289 0020","800A679F 0024"],"options":null},"Access Multiplayer mode setup menu":{"note":"Enables bypassing the lock by pressing Left on the D-Pad to access character select on the only locked map in Deathmatch: Temple.","data":["D00D1054 0001","800D0B60 0002"],"options":null},"Bypass locked menu":{"note":"","data":["800D0BD3 00??"],"options":{"Chapters":"02","Options":"01"}},"Enable Unused Cheats\\BAPHOMETSVAN":{"note":"Unlock cavemen in multiplayer.","data":["800DE623 0080"],"options":null},"Enable Unused Cheats\\BEEFCURTAINS":{"note":"Unlock zombies in multiplayer.","data":["800DE622 0001"],"options":null},"Enable Unused Cheats\\BEELZEBUBSBUM":{"note":"\"Hitler\" Easter egg.","data":["800DE623 0004"],"options":null},"Enable Unused Cheats\\BILLYMILLROUNDABOUT":{"note":"Unlock Gregg in multiplayer.","data":["800DE621 0002"],"options":null},"Enable Unused Cheats\\BOVRILBULLETHOLE":{"note":"Conker with caveman afro.","data":["800DE622 0002"],"options":null},"Enable Unused Cheats\\DRACULASTEABAGS":{"note":"Conker with caveman mohawk.","data":["800DE622 0004"],"options":null},"Enable Unused Cheats\\DUTCHOVENS":{"note":"Conker with caveman spiky hair.","data":["800DE622 0008"],"options":null},"Enable Unused Cheats\\EASTEREGGSRUS":{"note":"Unlock Neo Conker in multiplayer.","data":["800DE623 0010"],"options":null},"Enable Unused Cheats\\KOJACKSROLLNECK":{"note":"1 Player Multiplayer Resolution Option.","data":["800DE622 0010"],"options":null},"Enable Unused Cheats\\NUTBINGCOEDS":{"note":"Unlock weasel guard in multiplayer.","data":["800DE623 0040"],"options":null},"Enable Unused Cheats\\RUSTYSHERIFFSBADGE":{"note":"Unlock Squirrel Sergeant and Tediz Leader in multiplayer.","data":["800DE621 0001"],"options":null},"Enable Unused Cheats\\SPUNKJOCKEY":{"note":"Slow motion kills with katana/chainsaw.","data":["800DE623 0008"],"options":null},"Enable Unused Cheats\\WELDERSBENCH":{"note":"Unlock all chapters.","data":["800DE622 0080"],"options":null},"Enable Unused Cheats\\WELLYTOP":{"note":"Unlock Conker in multiplayer.","data":["800DE623 0020"],"options":null},"Infinite 99 Lives":{"note":"","data":["800B9B84 0063"],"options":null},"Infinite 99999 Cash":{"note":"","data":["810B9B88 270F"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["800BCFD7 0006"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["800B42CE 0006"],"options":null},"Infinite Health\\Player 3":{"note":"","data":["800B45F2 0006"],"options":null},"Infinite Health\\Player 4":{"note":"","data":["800B4916 0006"],"options":null},"Infinite Oxygen":{"note":"","data":["810B3E9A 0000"],"options":null},"Infinite Time in Multi":{"note":"","data":["810770DA 8C9E"],"options":null},"Map Warp":{"note":"","data":["800A679F 00??"],"options":{"Barn Boys interior - devoid of entities":"01","Barn boys outside, had a funny bug where Conker would hold money forever. Missing a lot of assets.":"0C","Bats tower. Lighting is different(?) Cannot do much since you spawn without the ability to swim underwater. Had a weird bug where all the cutscenes played.":"0B","Battery water helmet room? Can't tell as you can't swim, and you raise up into a warp that crashes the game.":"17","Beach multiplayer, You can fall off and die by exiting the turrets":"2B","Big, big guy boss fight. Map seems to be the same as final.":"0A","Black void":"05","Bluff cutscene area, devoid of anything":"37","Bugga the Knuts arena. Doesn't have much in it. Is the hole normally there?":"14","Bull boss fight - room has all the targets placed all in the middle, and lacks any other objects":"00","Bunker multiplayer, Teddiz symbols changed again":"34","CRASH":"3E","CRASHES GAME":"12","Capture the flag multiplayer. Teddiz symbol was changed.":"30","Causality Dept. Devoid of anything.":"2F","Cheese test room. Lacks textures":"0D","D-Day beach - lacks assets":"04","Don weasel cutscene map":"38","Dupe of above":"20","Experiment boss map, devoid of anything":"23","Fangy Test room.":"0F","First room inside the Tediz base. Devoid of Teddiz":"1B","First room where you encounter Rodent. Devoid of anything, really.":"1C","Fish test room":"03","Great Mighty Poo fight, devoid of anything":"35","Haybot/water raising room. Dying will play all the cutscenes but will crash. Enabling the expansion pack shows weird broken red eye textures":"10","Heist multiplayer map":"1A","Inside Wasps' hive. Devoid of anything.":"27","Inside the Poo Mountain cabin. Can't do much since there's no triggers/ability to escape.":"2C","Inside the Windmill?":"15","Lava race/mugged":"32","Matrix scene, devoid of anything":"36","Mrs catfish, lacks assets":"07","Multiplayer race":"33","N64 Chainsaw cutscene":"21","Outside the bank":"39","Panther King's throne":"18","Rock Solid. Devoid of anything":"31","Room after the bluff. No dinosaurs are present":"19","Second room of Matrix bank":"3A","Spooky Mansion inside":"3C","Spooky mansion outside, devoid of anything":"41","Tank test room":"16","Tanks multiplayer map. Seems to be an asset dump for weird villager sprites.":"24","Teddiz base toxic waste room. Is filled with water for unknown reasons":"28","Teddiz base turret room. Teddiz logo is different, as the turret sprite when using is is displaced (needs console proof this is a graphical error)":"26","Test room. Purpose unknown.":"1F","Uga Buga - cutscene where the caveman gets squashed":"02","Uga Bugga test room":"2A","Uga buga baby dinosaur room. Devoid of anything, and has some missing textures.":"43","Uga buga slime room, has some assets":"42","Upper floor of Teddiz Base UV and scripting issues. Devoid of almost anything":"1E","War plane crash area. Devoid of almost anything":"13","Windy at night":"3B","Windy, Ms bee is not present":"06","another test map":"25","dinosaur multiplayer":"3F","dying first time/meeting Gregg":"22","final boss arena. Exiting will lead you into the vault where you can moonjump and find the Alien in the Matrix vault.":"40","strange maze room. Has a switch, and a random grate.":"11","training":"29","training key room. Can't do much in here.":"2E"}},"Press L To Levitate\\Player 1":{"note":"","data":["D00D1055 0020","810B3E08 4200"],"options":null},"Restore Unused Title Screen":{"note":"Pressing Up on the D-Pad enables a semi-working version of a title screen","data":["D00D1054 0008","800D0D18 0002"],"options":null},"Start with Infinite 9 Granades or Bombs":{"note":"This works for all Players, including player 1 in story mode.","data":["800B9B70 0009"],"options":null}},"A150743E-CF2522CD-C:45":{"Have 99 Coins":{"note":"","data":["810BB10E 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C7A72 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BB0FC 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BB106 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BB10A 0009"],"options":null}},"A1B64A61-D014940B-C:50":{"Access All\\Cars":{"note":"","data":["8002CFF7 000B"],"options":null},"Access All\\Difficulties":{"note":"","data":["8002CFFB 0004"],"options":null},"Access All\\Multiplayer Levels":{"note":"","data":["50000901 0000","8002D000 0001"],"options":null},"Access All\\Tracks":{"note":"","data":["8002CFF3 0006"],"options":null},"Access In-Game Cheats":{"note":"","data":["50001301 0000","8002D008 0001"],"options":null},"Damage Select":{"note":"","data":["8002CD93 00??"],"options":{"Double":"02","Half":"01","Normal":"00","Triple":"03"}},"Health Select":{"note":"","data":["8002CD7F 00??"],"options":{"Bad Only":"02","Good Only":"01","Normal":"00","Off":"03"}},"Infinite Continues":{"note":"","data":["8002CC57 0064"],"options":null},"Low Timer":{"note":"","data":["81025DD4 3001"],"options":null},"Power-Up Select":{"note":"","data":["8002CD7B 00??"],"options":{"?":"05","Health":"06","Invincible":"07","Mines":"01","Nitros":"04","Normal":"00","Off":"08","Rockets":"02","Stealer":"03"}},"Radar":{"note":"","data":["8002CD8F 00??"],"options":{"Off":"01","On":"00"}},"Speed units\\Kph or Mph":{"note":"","data":["81025E68 ????"],"options":{"Kph":"0100","Mph":"0001"}},"View Mode Select?":{"note":"","data":["8002CD8B 00??"],"options":{"Fisheye":"03","Flip":"02","Fog":"01","Normal":"00"}},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\01 Coventry Cove":{"note":"","data":["8036A97B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\02 Mount Mayhem":{"note":"","data":["8034C65B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\03 Inferno Isle":{"note":"","data":["80364A53 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\04 Sunset Sands":{"note":"","data":["8033B4AB 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\05 Metro Madness":{"note":"","data":["8035E9E3 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\06 Wicked Woods":{"note":"","data":["80358E5B 0064"],"options":null}},"A1F51C25-16D61291-C:00":{"God Mode":{"note":"","data":["80774EB7 00??"],"options":{"Off":"00","On":"01"}}},"A24F4CF1-A82327BA-C:4A":{"Debug Mode":{"note":"","data":["80036FFB 0001"],"options":null},"Everything Unlocked\\Save File 1":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","81069A2E FFFF"],"options":null},"Everything Unlocked\\Save File 2":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8106996E FFFF"],"options":null},"Everything Unlocked\\Save File 3":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","81069A8E FFFF"],"options":null},"Everything Unlocked\\Save File 4":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","810699CE FFFF"],"options":null},"Have All Objectives Complete":{"note":"","data":["80037003 0001"],"options":null},"Infinite Ammo (All Levels)":{"note":"","data":["80079EAB 0001"],"options":null}},"A273AB56-DA33DB9A-C:45":{"In-Game Cheats\\Access Cheat menu":{"note":"","data":["50000504 0000","801012D8 0001"],"options":null},"In-Game Cheats\\Enable\\All Items":{"note":"To access simply pause in game play \u0026 then unpause.","data":["801012BC 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Invincibility":{"note":"","data":["802AAA68 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Monsters":{"note":"","data":["802AABDB 00??"],"options":{"Are Active":"00","Are Gone":"01"}},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5DD6 0064","812A5E1E 0064","812A5E2E 00C8","812A5E18 1900","812A5E1A 0640","812A5DE8 04B0","812A5DE8 0960","812A5DB8 0960"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Keys":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5DD3 000F"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000E01 0000","802A5E46 0001","50000E02 0000","812A5D8C 03E7"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Infinite Health (All Levels)":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on Single-Player, Co-Operative and DUKEMATCH, All Levels.","data":["8024CCE7 0064","802A5D89 0064"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A6162 0064","812A61AA 0064","812A61BA 00C8","812A61A4 1900","812A61A6 0640","812A6174 04B0","812A6174 0960","812A6144 0960"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000E01 0000","802A61D2 0001","50000E02 0000","812A6118 03E7"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on DUKEMATCH, All Levels.","data":["8024D073 0064","802A6115 0064"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A64EE 0064","812A6536 0064","812A6546 00C8","812A6530 1900","812A6532 0640","812A6500 04B0","812A6500 0960","812A64D0 0960"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000E01 0000","802A655E 0001","50000E02 0000","812A64A4 03E7"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 4 on DUKEMATCH, All Levels.","data":["8024D3FF 0064","802A64A1 0064"],"options":null},"Single-Player (All Levels)\\Have All\\Items \u0026 Infinite Use on all levels":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5A4A 0064","812A5A92 0064","812A5AA2 00C8","812A5A8C 1900","812A5A8E 0640","812A5A5C 04B0","812A5A5C 0960","812A5A2C 0960"],"options":null},"Single-Player (All Levels)\\Have All\\Keys":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5A47 000F"],"options":null},"Single-Player (All Levels)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000E01 0000","802A5ABA 0001","50000E02 0000","812A5A00 03E7"],"options":null},"Single-Player (All Levels)\\Have Infinite Health (All Levels)":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels and does what it says on the tin. Infinite health for player 1, All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["80247463 0064","8026EC5B 0064","802A59FD 0064"],"options":null}},"A292524F-3D6C2A49-C:45":{"Away Team\\Score":{"note":"","data":["8129195C ????"],"options":{"0 Points":"5008","00 Points":"C802","50 Points":"FA02","o Points":"0000"}},"Away Team\\Time Outs":{"note":"","data":["80291958 00??"],"options":{"Infinite":"07","None":"00"}},"Create A Player Codes\\Max 3 Point":{"note":"","data":["802C5EFC 0063"],"options":null},"Create A Player Codes\\Max Capaility":{"note":"","data":["802C5F02 0063"],"options":null},"Create A Player Codes\\Max Defensive":{"note":"","data":["802C5EFF 0063"],"options":null},"Create A Player Codes\\Max Free Throw":{"note":"","data":["802C5EFD 0063"],"options":null},"Create A Player Codes\\Max Offensive":{"note":"","data":["802C5EFE 0063"],"options":null},"Create A Player Codes\\Max Rebound":{"note":"","data":["802C5F00 0063"],"options":null},"Create A Player Codes\\Max Shooting":{"note":"","data":["802C5EFB 0063"],"options":null},"Create A Player Codes\\Max Techinque":{"note":"","data":["802C5F01 0063"],"options":null},"Home Team\\Score":{"note":"","data":["81290378 ????"],"options":{"0 Points":"5008","00 Points":"C802","50 Points":"FA02","o Points":"0000"}},"Home Team\\Time Outs Home":{"note":"","data":["80290374 00??"],"options":{"Infinite":"07","None":"00"}},"No Shot Clock":{"note":"","data":["812010C4 43FF"],"options":null}},"A2C54BE7-6719CBB2-C:50":{"Enable All Characters":{"note":"","data":["D02E4062 0000","802E4063 0004"],"options":null},"Have Max\\Powerups":{"note":"","data":["801CC2F3 0002"],"options":null},"Have Max\\Weapon Power-Up":{"note":"","data":["801CC2F7 0002"],"options":null},"Infinite\\Bullets":{"note":"For Henry","data":["801D5273 0006"],"options":null},"Infinite\\Gold":{"note":"","data":["811CC012 2710"],"options":null},"Infinite\\Health":{"note":"","data":["811CC00A 2710"],"options":null},"Infinite\\Health Young Henry":{"note":"","data":["D1191616 0010","8136E180 2800"],"options":null},"Infinite\\Items\\Crest Half A":{"note":"","data":["801CC02B 000A"],"options":null},"Infinite\\Items\\Crest Half B":{"note":"","data":["801CC02C 000A"],"options":null},"Infinite\\Items\\Cure Ampoule":{"note":"","data":["801CC01E 000A"],"options":null},"Infinite\\Items\\Healing Kit":{"note":"","data":["801CC01C 000A"],"options":null},"Infinite\\Items\\Magical Nitro":{"note":"","data":["801CC025 000A"],"options":null},"Infinite\\Items\\Mandragora":{"note":"","data":["801CC026 000A"],"options":null},"Infinite\\Items\\Moon Card":{"note":"","data":["801CC028 000A"],"options":null},"Infinite\\Items\\Oldrey's Diary":{"note":"","data":["801CC02A 000A"],"options":null},"Infinite\\Items\\Powerup":{"note":"","data":["801CC01F 000A"],"options":null},"Infinite\\Items\\Purifying":{"note":"","data":["801CC01D 000A"],"options":null},"Infinite\\Items\\Red Jewels":{"note":"","data":["801CC014 0068"],"options":null},"Infinite\\Items\\Roast Beef":{"note":"","data":["801CC01B 000A"],"options":null},"Infinite\\Items\\Roast Chicken":{"note":"","data":["801CC01A 000A"],"options":null},"Infinite\\Items\\Rose Brooch":{"note":"","data":["801CC02D 000A"],"options":null},"Infinite\\Items\\Sun Card":{"note":"","data":["801CC027 000A"],"options":null},"Infinite\\Items\\The Contract":{"note":"","data":["801CC024 000A"],"options":null},"Infinite\\Items\\Throwing Weapons":{"note":"","data":["801CC015 0064"],"options":null},"Infinite\\Items\\Winch Lever":{"note":"","data":["801CC029 000A"],"options":null},"Infinite\\Keys\\Archives":{"note":"","data":["801CC02E 000A"],"options":null},"Infinite\\Keys\\Art Tower 1":{"note":"","data":["801CC03A 000A"],"options":null},"Infinite\\Keys\\Art Tower 2":{"note":"","data":["801CC03B 000A"],"options":null},"Infinite\\Keys\\Chamber":{"note":"","data":["801CC033 000A"],"options":null},"Infinite\\Keys\\Clocktower A":{"note":"","data":["801CC03F 000A"],"options":null},"Infinite\\Keys\\Clocktower B":{"note":"","data":["801CC040 000A"],"options":null},"Infinite\\Keys\\Clocktower C":{"note":"","data":["801CC038 000A"],"options":null},"Infinite\\Keys\\Clocktower D":{"note":"","data":["801CC039 000A"],"options":null},"Infinite\\Keys\\Clocktower E":{"note":"","data":["801CC03E 000A"],"options":null},"Infinite\\Keys\\Control Room":{"note":"","data":["801CC03C 000A"],"options":null},"Infinite\\Keys\\Copper":{"note":"","data":["801CC032 000A"],"options":null},"Infinite\\Keys\\Deck":{"note":"","data":["801CC035 000A"],"options":null},"Infinite\\Keys\\Execution":{"note":"","data":["801CC034 000A"],"options":null},"Infinite\\Keys\\Garden":{"note":"","data":["801CC031 000A"],"options":null},"Infinite\\Keys\\Left Tower":{"note":"","data":["801CC02F 000A"],"options":null},"Infinite\\Keys\\Rose Garden":{"note":"","data":["801CC01A 000A"],"options":null},"Infinite\\Keys\\Storeroom":{"note":"","data":["801CC030 000A"],"options":null},"Infinite\\Keys\\Thorn":{"note":"","data":["801CC037 000A"],"options":null},"Infinite\\Keys\\Wall":{"note":"","data":["801CC03D 000A"],"options":null},"Infinite\\Specials\\Special 1":{"note":"","data":["801CC017 000A"],"options":null},"Infinite\\Specials\\Special 2":{"note":"","data":["801CC018 000A"],"options":null},"Infinite\\Specials\\Special 3":{"note":"","data":["801CC019 000A"],"options":null},"Rapid Fire Gun (Henry-Hold B)":{"note":"For Henry, Hold B","data":["811C9CC6 0040","801D5273 0006"],"options":null},"Selection Options\\Cut Scene Select":{"note":"With this code, you must use the appropiate level mod before you attemp to run these cut scenes. Not doing so will ruin the cut scene as the graphics will be glitched.","data":["801CC363 0009","801CC35B 00??"],"options":{"\"I Smell Poison\" From Underground Waterway":"08","(?)":"22","Actrise Appears Again Before Fight With Carrie":"56","Actrise Appears Again With Cousin Fernandes Before Fight With Carrie":"54","Actrise Appears In Castle Center":"52","Actrise Defeated By Carrie":"57","Ada":"30","Bleeding Statue":"12","Bull Awakens":"17","Castel Destruction":"27","Castle Destruction":"29","Castle Drawbridge Closes And Ortega Appears":"46","Castle Drawbridge Lowers":"03","Castle Gate Closes In Villa Upon Entering Villa":"09","Castle Keep Destructs":"1E","Character Enters Castle":"04","Character In Boat On Foggy Lake":"10","Cornell And Henry Part In Garden":"49","Cornell Meets Henry In Garden":"48","Cosmic Lights":"13","Cousin Fernandes Is Destroyed":"55","Death Is Destroyed":"45","Death(Grim Reaper)":"44","Explosion At Wall In Arena":"14","Explosion At Wall In Castle That Leads To Hidden Room":"15","Finds Hidden Path In Villa Basement":"35","Gate Opens In Forest Of Silence":"1A","Harpie":"38","Harpie Destroyed":"39","Lever \u0026 Gear In Castle":"37","Malus And Reinhardt On Horse":"2B","Malus Appears Again In Upstairs Room Of Castle":"16","Malus Appears For The First Time":"0E","Malus Is Saved By Reinhardt":"2A","Malus Leaves Garden":"0F","Malus On Flying Horse Outside Castle Keep":"1F","Meet Renon For The Last Time In Castle Keep.":"1B","Monster Dracula Appears":"51","One Of The Working Gears Cut Scenes":"19","Renon Appears For First Time":"0B","Rosa In Garden":"25","Rosa Returns":"2E","Scrolling Text About Castle And Henry":"31","Seal Removed From Wall In Arena":"11","Space Warp":"28","Spider People In Tunnel":"24","Thirsty Man":"47","This Cut Scene Runs Cut Scene 27 And 2E":"1C","Vampire In Basement":"33","Vampire In Main Entrance Hall Of Villa":"06","Vampire In Villa Basement Destroyed":"34","Village Vampire In Upstairs Villa":"0D","Vincent The Vampire":"18"}},"Selection Options\\Day Select For Adult Henry":{"note":"","data":["801CBFEF 00??"],"options":{"0 Days":"07","1 Day":"06","2 Days":"05","3 Days":"04","4 Days":"03","5 Days":"02","6 Days":"01","7 Days":"00"}},"Selection Options\\Level Select\\Inter":{"note":"","data":["801CC34B 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Level Select\\Main":{"note":"","data":["801CC349 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Status Select":{"note":"","data":["801CC054 00??"],"options":{"Instant Death":"FF","Never Get Poisoned or Vamped":"00","Normal":"01","Poison":"08","Vamp":"04","Vamped \u0026 Poisoned":"0C"}},"Selection Options\\Weapon Select":{"note":"","data":["801CC00F 00??"],"options":{"Axe":"04","Cross":"03","Knife":"01","Nothing":"00","Potion":"02"}},"Selection Options\\[Press F9 For Wolfman Can Use Weapons]":{"note":"For Cornell","data":["881CC007 00??"],"options":{"No (Default)":"04","Yes":"02"}},"Stop Timer Input":{"note":"","data":["811CBFF2 0001"],"options":null}},"A2E8F35B-C9DC87D9-C:45":{"Fly Through 1st \u0026 Last Ring Only To Complete Challenge":{"note":"","data":["801442E9 0063"],"options":null},"Infinite Freezing Breath":{"note":"","data":["8122CDE8 42C8"],"options":null},"Infinite Health":{"note":"","data":["8122CDD4 42C8"],"options":null},"Infinite Laser Eye":{"note":"","data":["8122CDE4 42C8"],"options":null},"Infinite Running Boosts":{"note":"","data":["8122CDDC 42C8"],"options":null},"Infinite X-Ray Vision":{"note":"","data":["8122CDE0 42C8"],"options":null},"Widescreen":{"note":"","data":["810DE77C 3FE3","810DE77E 8E39","810DE780 401B","810DE782 26CB","810DE784 3F63","810DE786 8E39","810DE788 4063","810DE78A 8E39","810DE78C 3FE3","810DE78E 8E39","810DE790 3FE3","810DE792 8E39","810DE794 4063","810DE796 8E39","810DE798 3FE3","810DE79A 8E39","810B1C0E 3FE3","810B1C12 8E39","8107A940 241B","8107A942 0001","8107A944 A5DB","8107A946 A328","8107A948 240E","8107A94A 0001"],"options":null}},"A3A044B5-6DB1BF5E-C:0":{"Collect One Item For Portal":{"note":"","data":["802E4E47 00??"],"options":{"Level 1":"03","Level 2":"0E","Level 3":"0C","Level 4":"0D"}},"Freeze Timer":{"note":"","data":["802E4D5F 0000"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["802E4E4A 0027"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802E4EA2 0027"],"options":null},"Infinite Health\\Player 3":{"note":"","data":["802E4EFA 0027"],"options":null},"Infinite Health\\Player 4":{"note":"","data":["802E4F52 0027"],"options":null},"Paly As":{"note":"","data":["802E4E4C 00??"],"options":{"Blue Back Bee":"22","Blue Helic":"02","Blue Rocket":"12","Blue Stealth":"32","Green Back Bee":"21","Green Helic":"01","Green Rocket":"11","Green Stealth":"31","Red Back Bee":"20","Red Helic":"00","Red Rocket":"10","Red Stealth":"30","Yellow Back Bee":"23","Yellow Helic":"03","Yellow Rocket":"13","Yellow Stealth":"33"}}},"A3A044B5-6DB1BF5E-C:00":{"Collect One Item For Portal":{"note":"","data":["802E4E47 00??"],"options":{"Level 1":"03","Level 2":"0E","Level 3":"0C","Level 4":"0D"}},"Freeze Timer":{"note":"","data":["802E4D5F 0000"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["802E4E4A 0027"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802E4EA2 0027"],"options":null},"Infinite Health\\Player 3":{"note":"","data":["802E4EFA 0027"],"options":null},"Infinite Health\\Player 4":{"note":"","data":["802E4F52 0027"],"options":null},"Paly As":{"note":"","data":["802E4E4C 00??"],"options":{"Blue Back Bee":"22","Blue Helic":"02","Blue Rocket":"12","Blue Stealth":"32","Green Back Bee":"21","Green Helic":"01","Green Rocket":"11","Green Stealth":"31","Red Back Bee":"20","Red Helic":"00","Red Rocket":"10","Red Stealth":"30","Yellow Back Bee":"23","Yellow Helic":"03","Yellow Rocket":"13","Yellow Stealth":"33"}}},"A3F6876A-DB943BD5-C:4A":{"Infinite 9 Credits\\Player 1":{"note":"","data":["801D7B38 0009"],"options":null},"Infinite 9 Credits\\Player 2":{"note":"","data":["801D7B3C 0009"],"options":null},"Press Z Button for Max Gauge\\Player 1":{"note":"","data":["D00B1CE0 0020","811D2602 0098"],"options":null},"Press Z Button for Max Gauge\\Player 2":{"note":"","data":["D00B1CE6 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Max Score]":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null}},"A47D4AD4-8BFA81F9-C:45":{"Infinite Air":{"note":"","data":["8128FB74 FF00"],"options":null},"Infinite Max Lives":{"note":"","data":["80290E5F 000A"],"options":null}},"A47D4AD4-F5B0C6CB-C:45":{"Infinite Air":{"note":"","data":["8128FB74 FF00"],"options":null},"Infinite Max Lives":{"note":"","data":["80290E5F 000A"],"options":null}},"A4A52B58-23759841-C:45":{"Access Demitron Character":{"note":"","data":["80049DF4 0001"],"options":null},"Access Sonork Character":{"note":"","data":["80049DF0 0001"],"options":null},"Infinite Health\\All Levels\\Player 1":{"note":"","data":["81028988 0800","8102898A 0018","81000060 3C1B","81000062 8008","81000064 8F7B","81000066 0228","8100006C 03E0","8100006E 0008","81000070 A761","81000072 0070"],"options":null},"Music Modifier":{"note":"","data":["800816B2 00??"],"options":{"Music Off":"00","Volume Low":"2A","Volume Max":"7F","Volume Medium":"55"}},"Press GS For 2 Rounds Won\\Player 1":{"note":"","data":["890B6330 0002"],"options":null},"Press GS For 2 Rounds Won\\Player 2":{"note":"","data":["890B6342 0002"],"options":null}},"A4BF9306-BF0CDFD1-C:45":{"16:9 Widescreen":{"note":"For 16:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81277A0C 4334","81277A10 4334","81275D24 3FE6"],"options":null},"21:9 Widescreen":{"note":"For 21:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81277A0C 4334","81277A10 4334","81275D24 4019"],"options":null},"Access All Moves":{"note":"","data":["8037C3A0 0001","8037C3A1 007F","8037C3A2 00FF","8037C3A3 00FF"],"options":null},"Better Special Fix pt1":{"note":"","data":["D3371E60 0000","81326930 0811","D3371E60 0000","81326932 DA00","D3371E60 0000","81326934 0000","D3371E60 0000","81326936 0000","81476800 8459","81476802 0002","81476804 2413","81476806 0367","81476808 1279","8147680A 0056","8147680C 2413","8147680E 03BF","81476810 1279","81476812 001E","81476814 2413","81476816 03C0","81476818 1279","8147681A 001F","8147681C 2413","8147681E 034F","81476820 1279","81476822 0017","81476824 2413","81476826 0006","81476828 1279","8147682A 001E","8147682C 2413","8147682E 0120","81476830 1279","81476832 001F","81476834 2413","81476836 0142","81476838 1279","8147683A 0023","8147683C 2413","8147683E 0123","81476840 1279","81476842 0026","81476844 2413","81476846 0350","81476848 1279","8147684A 002A","8147684C 2413","8147684E 0375","81476850 1279","81476852 002B","81476854 2413","81476856 034E","81476858 1279","8147685A 0042","8147685C 2413","8147685E 0118","81476860 1279","81476862 002A","81476864 2413","81476866 0143","81476868 1279","8147686A 002D","8147686C 2413","8147686E 0069","81476870 1279","81476872 0031","81476874 0000","81476876 0000","81476878 1000","8147687A 003D","8147687C 0000","8147687E 0000","81476880 3C19","81476882 0104","81476884 1000","81476886 0039","81476888 2739","8147688A 0602","8147688C 3C19","8147688E 0106","81476890 1000","81476892 0036","81476894 2739","81476896 0903","81476898 3C19","8147689A 0208","8147689C 1000","8147689E 0033","814768A0 2739","814768A2 0C04","814768A4 3C19","814768A6 0103","814768A8 1000","814768AA 0030","814768AC 2739","814768AE 0505","814768B0 8C59","814768B2 000C","814768B4 2413","814768B6 4100","814768B8 A733","814768BA FE2A","814768BC A733","814768BE 03D6","814768C0 1000","814768C2 002B","814768C4 0000","814768C6 0000","814768C8 8C59","814768CA 000C","814768CC 2413","814768CE 402C","814768D0 A733","814768D2 00BE","814768D4 1000","814768D6 0026","814768D8 0000","814768DA 0000","814768DC 8C59","814768DE 000C","814768E0 2413","814768E2 42B4","814768E4 A733","814768E6 013E","814768E8 A733","814768EA 029E","814768EC 1000","814768EE 0020","814768F0 0000","814768F2 0000","814768F4 3C19","814768F6 0105","814768F8 1000","814768FA 001C","814768FC 2739","814768FE 0604","81476900 3C19","81476902 0107","81476904 1000","81476906 0019","81476908 2739","8147690A 0903","8147690C 8C59","8147690E 000C","81476910 2413","81476912 0018"],"options":null},"Better Special Fix pt2":{"note":"","data":["81476914 A733","81476916 036A","81476918 1000","8147691A 0015","8147691C 0000","8147691E 0000","81476920 2413","81476922 3FD0","81476924 A453","81476926 0480","81476928 2413","8147692A 3FC9","8147692C A453","8147692E 0488","81476930 1000","81476932 000F","81476934 0000","81476936 0000","81476938 8C59","8147693A 000C","8147693C 3C13","8147693E 0812","81476940 2673","81476942 DA80","81476944 AF33","81476946 00AC","81476948 AF20","8147694A 00B0","8147694C 2413","8147694E C120","81476950 A733","81476952 023A","81476954 2413","81476956 447A","81476958 A733","8147695A 0272","8147695C 1000","8147695E 0004","81476960 0000","81476962 0000","81476964 3C19","81476966 0105","81476968 2739","8147696A 0704","8147696C AE19","8147696E 0084","81476970 8E59","81476972 0000","81476974 8E13","81476976 0014","81476978 080C","8147697A 9A4E","8147697C 0000","8147697E 0000","81476A00 8D08","81476A02 0000","81476A04 0008","81476A06 4602","81476A08 2401","81476A0A 0080","81476A0C 5428","81476A0E 0009","81476A10 8FA2","81476A12 0044","81476A14 8FA8","81476A16 004C","81476A18 8D09","81476A1A 0000","81476A1C 8D22","81476A1E 0014","81476A20 8E01","81476A22 0018","81476A24 8C21","81476A26 002C","81476A28 2421","81476A2A 00B4","81476A2C 0020","81476A2E 0008","81476A30 0000","81476A32 0000","81476A34 8FA8","81476A36 004C","81476A38 8E01","81476A3A 0018","81476A3C 8C21","81476A3E 002C","81476A40 2421","81476A42 00C4","81476A44 0020","81476A46 0008","81476A48 0000","81476A4A 0000"],"options":null},"Character Select":{"note":"When Mumbo transforms you hold:C-Up for the Termite,C-Right for the Pumpkin,C-Down for the Walrus,C-Left for the Crocc,R for the Bumble Bee,L for the Washing Machine,Press nothing to turn into Banjo","data":["D0281251 0008","8037C2D3 0002","D0281251 0001","8037C2D3 0003","D0281251 0004","8037C2D3 0004","D0281251 0002","8037C2D3 0005","D0281251 0010","8037C2D3 0006","D0281251 0020","8037C2D3 0007"],"options":null},"Concert Timer Fix":{"note":"","data":["D3371E60 0000","81307D68 0811","D3371E60 0000","81307D6A DAB1","D3371E60 0000","81307D6C 0000","D3371E60 0000","81307D6E 0000","81476AC4 3C01","81476AC6 8038","81476AC8 8021","81476ACA 35D7","81476ACC 240A","81476ACE 001E","81476AD0 1541","81476AD2 0011","81476AD4 0000","81476AD6 0000","81476AD8 3C01","81476ADA 8038","81476ADC 8421","81476ADE E8F0","81476AE0 240A","81476AE2 426A","81476AE4 002A","81476AE6 082A","81476AE8 1420","81476AEA 000B","81476AEC 0000","81476AEE 0000","81476AF0 3C01","81476AF2 8038","81476AF4 8421","81476AF6 E8F0","81476AF8 240A","81476AFA 428A","81476AFC 002A","81476AFE 082A","81476B00 1020","81476B02 0005","81476B04 0000","81476B06 0000","81476B08 0062","81476B0A 5023","81476B0C 2401","81476B0E 0000","81476B10 1000","81476B12 0003","81476B14 0000","81476B16 0000","81476B18 0062","81476B1A 5023","81476B1C 0144","81476B1E 082A","81476B20 080C","81476B22 1F5C","81476B24 0000","81476B26 0000"],"options":null},"Do Shock Spring Jump From Anywhere":{"note":"Press A Button. Do not use with Take Off And Fly From Anywhere","data":["8037C1D2 0002"],"options":null},"Dynamic Sixty Frames":{"note":"","data":["D3371E60 0000","81246F6C 0C11","D3371E60 0000","81246F6E DA93","81476A4C 3C0F","81476A4E 8027","81476A50 8DEF","81476A52 6E40","81476A54 55E0","81476A56 0008","81476A58 0000","81476A5A 0000","81476A5C 3C0F","81476A5E 8038","81476A60 8DEF","81476A62 E8E4","81476A64 240E","81476A66 0008","81476A68 11CF","81476A6A 0003","81476A6C 240E","81476A6E 0009","81476A70 55CF","81476A72 0005","81476A74 3C0E","81476A76 8038","81476A78 3C0F","81476A7A 8038","81476A7C 8DEF","81476A7E 4484","81476A80 1000","81476A82 000C","81476A84 0000","81476A86 0000","81476A88 3C0E","81476A8A 8028","81476A8C 85CE","81476A8E 1BD8","81476A90 240F","81476A92 0090","81476A94 51CF","81476A96 0007","81476A98 240F","81476A9A 0002","81476A9C 3C0E","81476A9E 8038","81476AA0 85CE","81476AA2 35D6","81476AA4 240F","81476AA6 0007","81476AA8 51CF","81476AAA 0002","81476AAC 240F","81476AAE 0001","81476AB0 240F","81476AB2 0001","81476AB4 3C0E","81476AB6 8028","81476AB8 A1CF","81476ABA 08DF","81476ABC 0809","81476ABE 9630","81476AC0 0000","81476AC2 0000"],"options":null},"Egg Gravity Fix":{"note":"","data":["D3371E60 0000","81353C16 C72B"],"options":null},"Game 100% Complete":{"note":"","data":["8137C3A0 001F","50000302 0000","8137C3A2 FFFF","50000602 0000","813832C0 FFFF","81383FCA 0064","81383FDC 0064","50000802 0000","813832F0 FFFF","81385FA0 0063","81385FC4 0063","81385FF0 0064","50000602 0000","81385FF2 6464","50001002 0000","813831A8 FFFF","813831B0 FF7F","813831B2 FFB0","813831B4 3DA6","813831B6 F264","813831C6 FF7F"],"options":null},"Global Fix":{"note":"","data":["D3371E60 0000","812C685A 4110","D3371E60 0000","812C689A 4170","D3371E60 0000","81376230 3F43","D3371E60 0000","812CB042 3F40","D3371E60 0000","812CBE32 3C75","D3371E60 0000","812CBF7E 40C0","D3371E60 0000","812CC05E 4060","D3371E60 0000","812D128E 4000","D3371E60 0000","812D12DA 4009","D3371E60 0000","812E0CD2 4020","D3371E60 0000","812E1496 4019","D3371E60 0000","812E2A36 4220","D3371E60 0000","812E2A46 C220","D3371E60 0000","81343984 1000","D3371E60 0000","8135ADBA 4110","D3371E60 0000","81379788 3FB1","D3371E60 0000","8135B796 4008","D3371E60 0000","8135DE52 40A8","D3371E60 0000","8135EBC6 414C","D3371E60 0000","8135E042 4100","D3371E60 0000","8135E096 4020","D3371E60 0000","81379900 40DB","D3371E60 0000","8135EE9E 40A8","D3371E60 0000","8135F45A 4022","D3371E60 0000","8135F9DA 4020","D3371E60 0000","8135FA2A 4020","D3371E60 0000","813799D0 3F9C"],"options":null},"Gravity Fix":{"note":"","data":["D3371E60 0000","8132C5BC 3C04","D3371E60 0000","8132C5BE C155","D3371E60 0000","8132C5C0 4484","D3371E60 0000","8132C5C2 4000","D3371E60 0000","8132C5C4 0000","D3371E60 0000","8132C5C6 0000"],"options":null},"HD Bear":{"note":"","data":["D3371E60 0000","812986B2 034E","D3371E60 0000","812986BA 034E","D3371E60 0000","81338BA4 4480","D3371E60 0000","81338BA6 0000","D3371E60 0000","81338BB6 803E"],"options":null},"Have Zero Time all Levels":{"note":"","data":["50000B04 0000","81386004 3000"],"options":null},"Infinite\\Air":{"note":"","data":["81385F8E 0E10"],"options":null},"Infinite\\Always Have All Jinjos":{"note":"","data":["80385F7B 00FF"],"options":null},"Infinite\\Eggs":{"note":"","data":["80385F67 00FF"],"options":null},"Infinite\\Gold Feathers":{"note":"","data":["80385F73 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["80385F83 0008","80385F87 0008"],"options":null},"Infinite\\Jiggies":{"note":"","data":["80385FCB 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["80385F8B 00FF"],"options":null},"Infinite\\Mumbo Tokens":{"note":"","data":["80385FC6 00FF","80385FA2 00FF"],"options":null},"Infinite\\Notes":{"note":"Just collect one Note to Have 255 Notes in all Worlds.","data":["80385FF2 00FF","80385F62 0001"],"options":null},"Infinite\\Red Feathers":{"note":"","data":["80385F6F 00FF"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0281251 0020","8137C4BC 43E0"],"options":null},"Secret Items":{"note":"","data":["81283400 ????"],"options":{"Have All Collected":"FFFF","Have None":"0000"}},"Swim Fix":{"note":"","data":["D3371E60 0000","812A788A 40A0","D3371E60 0000","812A78D2 4425","81375654 4049","81375658 3FC6","8137565C 40B3"],"options":null},"Take Off And Fly From Anywhere":{"note":"Press A Button. Do not use with Do Shock Spring Jump From Anywhere","data":["8037C1D1 0002"],"options":null}},"A4F2F521-F0EB168E-C:4A":{"Access All Levels":{"note":"","data":["80200B66 00FF"],"options":null},"Extended Tongue":{"note":"","data":["8132790E FFFF"],"options":null},"Have 99 Carrots":{"note":"With all Carrots collected. You will be allowed into mini-games and secret areas","data":["80200B2F 0063"],"options":null},"Have 99 Crowns":{"note":"","data":["8024790B 0063"],"options":null},"Have All Levels Completed":{"note":"","data":["80200B6A 0019","80200B6B 0019","80200B6C 0015","80200B6D 0018","80200B6E 0017","80200B6F 0017"],"options":null},"Infinite Health":{"note":"","data":["80168E73 000A"],"options":null},"Level Select":{"note":"When you press Pause in-game and Stage Quit yo will go to the Stage Screen this cheat lets you choose what Stage you would like to go to but make sure you turn the cheat off and press A to continue to that stage.","data":["8029BF7B 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06"}}},"A5533106-B9F25E5B-C:4A":{"Enable All Characters":{"note":"","data":["D02E4082 0000","802E4083 0004"],"options":null},"Hard Mode Selected In A New Game":{"note":"With this code, you will not see the hard level status until you save and restart the game file. No special items are required to access this feature with this code turned on.","data":["8032630F 0002"],"options":null},"Have Max\\Powerups":{"note":"","data":["801CC7D3 0002"],"options":null},"Have Max\\Weapon Power-Up":{"note":"","data":["801CC7D7 0002"],"options":null},"Infinite\\Bullets":{"note":"For Henry","data":["801D5753 0006"],"options":null},"Infinite\\Gold":{"note":"","data":["811CC4F2 2710"],"options":null},"Infinite\\Health":{"note":"","data":["811CC4EA 2710"],"options":null},"Infinite\\Health Young Henry":{"note":"","data":["D11CA1A6 0010","813A6D10 2800"],"options":null},"Infinite\\Items\\Crest Half A":{"note":"","data":["801CC50B 000A"],"options":null},"Infinite\\Items\\Crest Half B":{"note":"","data":["801CC50C 000A"],"options":null},"Infinite\\Items\\Cure Ampoule":{"note":"","data":["801CC4FE 000A"],"options":null},"Infinite\\Items\\Healing Kit":{"note":"","data":["801CC4FC 000A"],"options":null},"Infinite\\Items\\Magical Nitro":{"note":"","data":["801CC505 000A"],"options":null},"Infinite\\Items\\Mandragora":{"note":"","data":["801CC506 000A"],"options":null},"Infinite\\Items\\Moon Card":{"note":"","data":["801CC508 000A"],"options":null},"Infinite\\Items\\Oldrey's Diary":{"note":"","data":["801CC50A 000A"],"options":null},"Infinite\\Items\\Powerup":{"note":"","data":["801CC4FF 000A"],"options":null},"Infinite\\Items\\Purifying":{"note":"","data":["801CC4FD 000A"],"options":null},"Infinite\\Items\\Red Jewels on Pick-Up":{"note":"","data":["801CC4F5 0068"],"options":null},"Infinite\\Items\\Roast Beef":{"note":"","data":["801CC4FB 000A"],"options":null},"Infinite\\Items\\Roast Chicken":{"note":"","data":["801CC4FA 000A"],"options":null},"Infinite\\Items\\Rose Brooch":{"note":"","data":["801CC50D 000A"],"options":null},"Infinite\\Items\\Sun Card":{"note":"","data":["801CC507 000A"],"options":null},"Infinite\\Items\\The Contract":{"note":"","data":["801CC504 000A"],"options":null},"Infinite\\Items\\Throwing Weapons":{"note":"","data":["801CC4F5 0064"],"options":null},"Infinite\\Items\\Winch Lever":{"note":"","data":["801CC509 000A"],"options":null},"Infinite\\Keys\\Archives":{"note":"","data":["801CC50E 000A"],"options":null},"Infinite\\Keys\\Art Tower 1":{"note":"","data":["801CC51A 000A"],"options":null},"Infinite\\Keys\\Art Tower 2":{"note":"","data":["801CC51B 000A"],"options":null},"Infinite\\Keys\\Chamber":{"note":"","data":["801CC513 000A"],"options":null},"Infinite\\Keys\\Clocktower A":{"note":"","data":["801CC51F 000A"],"options":null},"Infinite\\Keys\\Clocktower B":{"note":"","data":["801CC520 000A"],"options":null},"Infinite\\Keys\\Clocktower C":{"note":"","data":["801CC518 000A"],"options":null},"Infinite\\Keys\\Clocktower D":{"note":"","data":["801CC519 000A"],"options":null},"Infinite\\Keys\\Clocktower E":{"note":"","data":["801CC51E 000A"],"options":null},"Infinite\\Keys\\Control Room":{"note":"","data":["801CC51C 000A"],"options":null},"Infinite\\Keys\\Copper":{"note":"","data":["801CC512 000A"],"options":null},"Infinite\\Keys\\Deck":{"note":"","data":["801CC515 000A"],"options":null},"Infinite\\Keys\\Execution":{"note":"","data":["801CC514 000A"],"options":null},"Infinite\\Keys\\Garden":{"note":"","data":["801CC511 000A"],"options":null},"Infinite\\Keys\\Left Tower":{"note":"","data":["801CC50F 000A"],"options":null},"Infinite\\Keys\\Rose Garden":{"note":"","data":["801CC516 000A"],"options":null},"Infinite\\Keys\\Storeroom":{"note":"","data":["801CC510 000A"],"options":null},"Infinite\\Keys\\Thorn":{"note":"","data":["801CC517 000A"],"options":null},"Infinite\\Keys\\Wall":{"note":"","data":["801CC51D 000A"],"options":null},"Infinite\\Specials\\Special 1":{"note":"","data":["801CC4F7 000A"],"options":null},"Infinite\\Specials\\Special 2":{"note":"","data":["801CC4F8 000A"],"options":null},"Infinite\\Specials\\Special 3":{"note":"","data":["801CC4F9 000A"],"options":null},"Rapid Fire Gun (Henry-Hold B)":{"note":"For Henry, Hold B","data":["811CA1A6 0040","801D5753 0006"],"options":null},"Selection Options\\Cut Scene Select":{"note":"With this code, you must use the appropiate level mod before you attemp to run these cut scenes. Not doing so will ruin the cut scene as the graphics will be glitched.","data":["801CC843 0009","801CC83B 00??"],"options":{"\"I Smell Poison\" From Underground Waterway":"08","(?)":"22","Actrise Appears Again Before Fight With Carrie":"56","Actrise Appears Again With Cousin Fernandes Before Fight With Carrie":"54","Actrise Appears In Castle Center":"52","Actrise Defeated By Carrie":"57","Ada":"30","Bleeding Statue":"12","Bull Awakens":"17","Castel Destruction":"27","Castle Destruction":"29","Castle Drawbridge Closes And Ortega Appears":"46","Castle Drawbridge Lowers":"03","Castle Gate Closes In Villa Upon Entering Villa":"09","Castle Keep Destructs":"1E","Character Enters Castle":"04","Character In Boat On Foggy Lake":"10","Cornell And Henry Part In Garden":"49","Cornell Meets Henry In Garden":"48","Cosmic Lights":"13","Cousin Fernandes Is Destroyed":"55","Death Is Destroyed":"45","Death(Grim Reaper)":"44","Explosion At Wall In Arena":"14","Explosion At Wall In Castle That Leads To Hidden Room":"15","Finds Hidden Path In Villa Basement":"35","Gate Opens In Forest Of Silence":"1A","Harpie":"38","Harpie Destroyed":"39","Lever \u0026 Gear In Castle":"37","Malus And Reinhardt On Horse":"2B","Malus Appears Again In Upstairs Room Of Castle":"16","Malus Appears For The First Time":"0E","Malus Is Saved By Reinhardt":"2A","Malus Leaves Garden":"0F","Malus On Flying Horse Outside Castle Keep":"1F","Meet Renon For The Last Time In Castle Keep.":"1B","Monster Dracula Appears":"51","One Of The Working Gears Cut Scenes":"19","Renon Appears For First Time":"0B","Rosa In Garden":"25","Rosa Returns":"2E","Scrolling Text About Castle And Henry":"31","Seal Removed From Wall In Arena":"11","Space Warp":"28","Spider People In Tunnel":"24","Thirsty Man":"47","This Cut Scene Runs Cut Scene 27 And 2E":"1C","Vampire In Basement":"33","Vampire In Main Entrance Hall Of Villa":"06","Vampire In Villa Basement Destroyed":"34","Village Vampire In Upstairs Villa":"0D","Vincent The Vampire":"18"}},"Selection Options\\Day Select For Adult Henry":{"note":"","data":["801CC4CF 00??"],"options":{"0 Days":"07","1 Day":"06","2 Days":"05","3 Days":"04","4 Days":"03","5 Days":"02","6 Days":"01","7 Days":"00"}},"Selection Options\\Level Select\\Inter":{"note":"","data":["801CC82B 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Level Select\\Main":{"note":"","data":["801CC829 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Status Select":{"note":"","data":["801CC534 00??"],"options":{"Instant Death":"FF","Never Get Poisoned or Vamped":"00","Normal":"01","Poison":"08","Vamp":"04","Vamped \u0026 Poisoned":"0C"}},"Selection Options\\Weapon Select":{"note":"","data":["801CC4EF 00??"],"options":{"Axe":"04","Cross":"03","Knife":"01","Nothing":"00","Potion":"02"}},"Selection Options\\[Press F9 For Wolfman Can Use Weapons]":{"note":"For Cornell","data":["881CC4E7 00??"],"options":{"No (Default)":"04","Yes":"02"}},"Stop Timer Input":{"note":"","data":["811CC4D2 0001"],"options":null}},"A60ED171-3D85D06E-C:45":{"Have All Characters In Viewer":{"note":"","data":["810ECD80 FFFF","810ECD82 FFFF"],"options":null},"Infinite\\Health":{"note":"","data":["800F5F26 0001"],"options":null},"Infinite\\Webbing":{"note":"","data":["800F5F53 0001"],"options":null},"Unlocked\\All Costumes":{"note":"","data":["810ECD7E FFFF"],"options":null},"Unlocked\\All Levels":{"note":"","data":["810ECD74 0105","810ECDB0 FFFF"],"options":null}},"A62230C3-F0834488-C:45":{"Infinite Time":{"note":"","data":["D0226724 0000","81226724 003C"],"options":null},"Lagfix":{"note":"fixes horrendous load-times,still 30fps","data":["8002E692 000D"],"options":null},"Only Play One Round":{"note":"","data":["D0226791 0000","81226718 0001"],"options":null},"Player 1\\1 Win To Win":{"note":"","data":["D0226715 0000","80226715 0001"],"options":null},"Player 1\\Infinite Energy":{"note":"","data":["D022671C 0000","8122671C 00FA"],"options":null},"Player 1\\Infinite Time To Continue":{"note":"","data":["802267CB 0009","803CF2A1 0009"],"options":null},"Player 1\\Never Wins":{"note":"","data":["D0226715 0001","80226715 0000"],"options":null},"Player 1\\No Energy":{"note":"","data":["D022671C 0000","8122671C 0000"],"options":null},"Player 2\\1 Win To Win":{"note":"","data":["D0226717 0000","80226717 0001"],"options":null},"Player 2\\Infinite Energy":{"note":"","data":["D022671E 0000","8122671E 00FA"],"options":null},"Player 2\\Lifebar Flashes Red":{"note":"","data":["D022672E 0000","8122672E 00CF"],"options":null},"Player 2\\Never Wins":{"note":"","data":["D0226717 0001","80226717 0000"],"options":null},"Player 2\\No Energy":{"note":"","data":["D022671E 0000","8122671E 0000"],"options":null}},"A7941528-61F1199D-C:4A":{"All Gold Medals":{"note":"","data":["50000502 0000","81259130 0101"],"options":null},"Infinite\\Tools Options":{"note":"","data":["8025A624 00??"],"options":{"Fan":"04","Frying Pan":"01","Ghost":"02","Invisible":"06","Rat Face":"08","Rock":"07","Rocket":"05","Super Ghost":"03","Super Rat Face":"09","Wings":"0A"}},"Infinite\\Trick Game 300 Points":{"note":"","data":["8125A7F2 012C"],"options":null},"Infinite\\Weapons Options":{"note":"","data":["8025A622 00??","8025A623 0009"],"options":{"Bomb":"05","Freeze Shot":"03","Parachute":"02","Slap Stick":"01","Snowman":"04","Whirlwind":"06"}},"Max Coins":{"note":"","data":["8125A5BE 270F","8025A5BF 00C8"],"options":null},"Open Extra Characters \u0026 Snowboards":{"note":"Battle Mode Only","data":["8125916E 0101","80259170 0001","8025915C 0001","8125915E 0101","81259160 0101"],"options":null}},"A7D015F8-2289AA43-C:45":{"Have All Medals":{"note":"For Expert \u0026 Normal Modes","data":["50000802 0000","8116E6E0 7777"],"options":null},"Infinite\\Armor\\Falco":{"note":"","data":["8016D727 00FF"],"options":null},"Infinite\\Armor\\Peppy":{"note":"","data":["8016D72F 00FF"],"options":null},"Infinite\\Armor\\Slippy":{"note":"","data":["8016D72B 00FF"],"options":null},"Infinite\\Dual Blue Lasers":{"note":"","data":["8015791B 0002"],"options":null},"Infinite\\Energy":{"note":"","data":["8013AB27 00FF","80137C47 00FF"],"options":null},"Infinite\\Hyper Laser":{"note":"","data":["8015791B 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["80157911 0009"],"options":null},"Level Select":{"note":"","data":["D016E0A7 0000","8016E0A7 00??"],"options":{"Aquas":"0D","Area 6":"03","Bolse":"11","Corneria":"00","Corneria (Multi)":"14","Fortuna":"0E","Glitch":"04","Katina":"10","Macbeth":"0B","Meteo":"01","Sector X":"02","Sector Y":"05","Sector Z":"12","Solar":"07","Titania":"0C","Training Mode Level":"0A","Venom 1":"06","Venom 2":"09","Venom With Starwolf":"13","Zoness":"08"}},"Loads O' Hits":{"note":"","data":["8015790B 00FF"],"options":null},"Unlimited\\Boost":{"note":"","data":["81137C9C 0000","81137C9E 0000","8113AB7C 0000","8113AB7E 0000"],"options":null},"Unlimited\\Smart Bombs":{"note":"","data":["8016DC13 0004"],"options":null},"Widescreen":{"note":"","data":["810031A2 3FE3"],"options":null}},"A8275140-B9B056E8-C:4A":{"Have All\\Characters":{"note":"","data":["50000702 0000","801B361B 0001"],"options":null},"Have All\\Key Items":{"note":"","data":["50001602 0000","811B3714 0101"],"options":null},"Have All\\Normal Items":{"note":"","data":["50000902 0000","811B3700 6363"],"options":null},"Have All\\Weapons":{"note":"","data":["50000702 0000","811B3678 0101"],"options":null},"Infinite\\Air":{"note":"","data":["8121D4FA 04B0"],"options":null},"Infinite\\HP (All Characters)":{"note":"","data":["50000602 0000","801B361C 000A"],"options":null},"[Can Leave Town]":{"note":"Start a new game, and immediately leave town without talking to anyone.","data":["811B362A FFFF"],"options":null},"[Press L To Levitate":{"note":"Jump first, then hold L-Button while in mid-air.","data":["D0082915 0020","812456F4 418E","D0082915 0020","812456F6 38E2"],"options":null}},"A83E101A-E937B69D-C:45":{"Always Have\\BFG 9000":{"note":"","data":["800632DB 0001"],"options":null},"Always Have\\Bio Suite":{"note":"","data":["80063283 00??"],"options":{"Off":"00","On":"FF"}},"Always Have\\Chain Gun":{"note":"","data":["800632CF 0001"],"options":null},"Always Have\\Chainsaw":{"note":"","data":["800632BB 0001"],"options":null},"Always Have\\Double Shotgun":{"note":"","data":["800632CB 0001"],"options":null},"Always Have\\Gun":{"note":"","data":["800632C3 0001"],"options":null},"Always Have\\Have Rocket Launcher":{"note":"","data":["800632D1 0001"],"options":null},"Always Have\\Laser Weapon":{"note":"","data":["800632DD 0001"],"options":null},"Always Have\\Missile Launcher":{"note":"","data":["800632D3 0001"],"options":null},"Always Have\\Plasma Rifle":{"note":"","data":["800632D7 0001"],"options":null},"Always Have\\Shotgun":{"note":"","data":["800632C7 0001"],"options":null},"Berserk Mode":{"note":"","data":["8006327B 00FF"],"options":null},"Enable Cheat Menu":{"note":"","data":["8005A7D3 0001"],"options":null},"Have All\\Keys":{"note":"","data":["50000504 0000","8106328E FFFF"],"options":null},"Have All\\Secret Pentagram Items":{"note":"","data":["800632A7 0007"],"options":null},"Have All\\Weapons":{"note":"","data":["50000A04 0000","810632BA 0001"],"options":null},"Infinite\\Ammo All Weapons":{"note":"","data":["50000404 0000","810632E2 013C"],"options":null},"Infinite\\Armor":{"note":"","data":["8006326F 00FF"],"options":null},"Invincible":{"note":"","data":["8006330B 0002"],"options":null},"Invincible And Map Markers":{"note":"","data":["8006330B 0006"],"options":null},"Rapid Fire":{"note":"","data":["8106333A 0B94"],"options":null},"Turn Map Markers On":{"note":"","data":["8006330B 0004"],"options":null},"[Max Brightness]":{"note":"Enable this cheat on rom load to have Max Brightness (internal) and then put Jabo d3d8 on 160% Max for a extra brightness Boost.","data":["8005A7C8 0064"],"options":null}},"A92D52E5-1D26B655-C:45":{"1 Win to Win\\Player 1":{"note":"","data":["D020C27F 0000","8020C27F 0001"],"options":null},"1 Win to Win\\Player 2":{"note":"","data":["D020C27F 0000","8020C27F 0010"],"options":null},"Infinite\\Health\\Player 1":{"note":"","data":["8020B7B1 00C8"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["8020BC0D 00C8"],"options":null},"Infinite\\Money":{"note":"","data":["8121106C 2704"],"options":null},"Infinite\\Special\\Player 1":{"note":"","data":["8120AEB4 0190"],"options":null},"Infinite\\Special\\Player 2":{"note":"","data":["8120B1B0 0190"],"options":null}},"AA18B1A5-07DB6AEB-C:45":{"Have\\All Guns In Chest":{"note":"","data":["50000E04 0100","810E8EF4 05FF"],"options":null},"Have\\All Main Items In Chest":{"note":"If you want items that are not listed in the Chest, then just use the Have Item On Slot Select code to have what you desire.","data":["810E8F2C 17FF","810E8F30 1EFF","810E8F34 1FFF","810E8F38 23FF","50000404 0100","810E8F3C 25FF","810E8F4C 2AFF","810E8F50 2BFF","50000304 0100","810E8F54 2EFF","50000F04 0100","810E8F60 32FF","810E8F9C 43FF","50000504 0100","810E8FA0 47FF","50000404 0100","810E8FB4 53FF","50000C04 0100","810E8FC4 58FF"],"options":null},"Have\\Fine Condition Always":{"note":"","data":["810E13E4 0000"],"options":null},"Have\\Item On Slot Select\\Slot 01":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EC8 00??","800E8EC9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 02":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ECC 00??","800E8ECD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 03":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED0 00??","800E8ED1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 04":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED4 00??","800E8ED5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 05":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED8 00??","800E8ED9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 06":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EDC 00??","800E8EDD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 07":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE0 00??","800E8EE1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 08":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE4 00??","800E8EE5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 09":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE8 00??","800E8EE9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 10":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EEC 00??","800E8EED 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Infinite\\Health":{"note":"","data":["810E1322 00C8"],"options":null},"Infinite\\Time":{"note":"","data":["800E8CBF 0010"],"options":null},"Play As":{"note":"This allows you to select what character you wish to play as. Just slect on load and select as normal at the menu and when in game you will be the character of your choice","data":["810E1138 ????"],"options":{"Ada (can crash the game)":"0E80","Cheryl":"0F80","Claire Original":"0380","Claire as Biker":"0980","Claire without jacket":"0780","Claires body Leons outfit":"0B80","Hunk (can crash the game)":"0C80","Leon Original":"0280","Leon Wounded":"0680","Leon as Biker":"0A80","Leon as Stars":"0880","To Fu":"0D80"}},"Play Extra Mission":{"note":"This allows you to select what extra mission you wish to play. Just slect on load and carry on as normal at the menu and when in game you will be the character of your choice Do not use at the same time as [Resident Evil 2 Mode]","data":["810E10EE 00??"],"options":{"The 4th Survior":"48","To-Fu":"49"}},"Quick Chest Access":{"note":"With this code, all you have to do to access the chest, is hold L and Press Start.","data":["D1014FA4 1020","8012BFA8 0001"],"options":null},"Quick Save Access":{"note":"(1 Anytime, anywhere, press Z and B at the same time. You'll get the standard typewriter text: \"It's an old typewriter. You can save your progress with this.\" Note that you must, of course, have an ink ribbon to save. 2) Choose \"Yes\" and you'll be able to save normally. Instead of the location name, your save file will say \"Scenario 1st\" or \"Scenario 2nd.\" 3) When you load your save file, you'll have to skip through the intro, but when the game loads up you'll be exactly where you saved!","data":["D1014FA4 6000","810E8928 8007","D1014FA4 6000","810E892A 4110"],"options":null},"[Biohazard 2 Mode]":{"note":"Note: With this enabled the game will become Bio Hazard 2, the Japanese version of Resident Evil 2! This means all text (except the text in files) is in Japanese, and all cinemas have Japanese subtitles. Note that the title screen will still say Resident Evil 2 Do not use at the same time as Play Extra Mission","data":["D10E10EE 00??","810E10EE 0000"],"options":{"Off":"00","On":"40"}},"[Saves Always 0]":{"note":"No matter how many saves you do ithis makes the game think you Have\\not saved.","data":["810E8B50 0000"],"options":null}},"AA7B0658-9C96937B-C:50":{"Character Creation\\Max\\Aerial":{"note":"","data":["80326C35 0009"],"options":null},"Character Creation\\Max\\Brawling":{"note":"","data":["8032CB75 0009"],"options":null},"Character Creation\\Max\\Dirtiness":{"note":"","data":["8032EB35 0009"],"options":null},"Character Creation\\Max\\Impact":{"note":"","data":["80320375 0009"],"options":null},"Character Creation\\Max\\Mat Ability":{"note":"","data":["80328BF5 0009"],"options":null},"Character Creation\\Max\\Quickness":{"note":"","data":["80324C75 0009"],"options":null},"Character Creation\\Max\\Speed":{"note":"","data":["80322CB5 0009"],"options":null},"Character Creation\\Max\\Strength":{"note":"","data":["80308D35 0009"],"options":null},"Character Creation\\Max\\Submission":{"note":"","data":["8032ABB5 0009"],"options":null},"Enable Cheat":{"note":"","data":["800B6F5B 00??"],"options":{"All Wrestlers":"80","Momentum Meter":"08","Play As Same Wrestler":"20","Stamina Meter":"04","Super Created Wrestlers":"02"}},"Freeze Timer":{"note":"","data":["800B7E02 D300"],"options":null},"Infinite Stamina\\Player 1":{"note":"","data":["810E9798 0478"],"options":null},"Infinite Stamina\\Player 2":{"note":"","data":["810E9934 03ED"],"options":null},"Meter Select\\Player 1":{"note":"","data":["800E979D 00??"],"options":{"Empty Meter Bar":"00","Full Meter Bar":"60"}},"Meter Select\\Player 2":{"note":"","data":["800E993D 00??"],"options":{"Empty Meter Bar":"00","Full Meter Bar":"60"}}},"AB7C101D-EC58C8B0-C:50":{"Infinite Health\\Player One":{"note":"","data":["811507FA 6400"],"options":null},"Infinite Health\\Player Two":{"note":"","data":["81152E76 6400"],"options":null},"Infinite Jet Pack\\Player One":{"note":"","data":["81150802 3200"],"options":null},"Infinite Jet Pack\\Player Two":{"note":"","data":["81152E7E 3200"],"options":null},"Infinite Shields\\Player One":{"note":"","data":["811507FE 6400"],"options":null},"Infinite Shields\\Player Two":{"note":"","data":["81152E7A 6400"],"options":null},"Player 1 Easily Defeated\\Player Two":{"note":"","data":["811507FA 0100","811507FE 0100"],"options":null},"Player 2 Easily Defeated\\Player One":{"note":"","data":["81152E76 0100","81152E7A 0100"],"options":null},"Shields Always Active\\Player One":{"note":"","data":["8015080A 0022"],"options":null},"Shields Always Active\\Player Two":{"note":"","data":["80152E86 0022"],"options":null},"Smoke Trail\\Player One":{"note":"","data":["80150804 0001"],"options":null},"Smoke Trail\\Player Two":{"note":"","data":["80152E80 0001"],"options":null}},"ABA51D09-C668BAD9-C:58":{"Character Select":{"note":"","data":["801D535F 00??"],"options":{"Ruff (Boy) (Default)":"00","Tumble (Girl)":"01"}},"Enable Cheat Menu":{"note":"","data":["801D5355 0001"],"options":null},"Have All Levels Completed":{"note":"","data":["50000202 0000","81207D6C FFFF"],"options":null},"Have\\All 40 Winks Collected":{"note":"Combined with Have All Levels Completed cheat will open the door for Have All 40 Winks","data":["50000602 0000","81207D60 FFFF"],"options":null},"Have\\All Dreamkeys Collected":{"note":"","data":["50000802 0000","81207D70 FFFF"],"options":null},"Infinite\\40 Cogs":{"note":"Disable when on Boss Modes as it can cause hanging!","data":["811D2A82 0028"],"options":null},"Infinite\\50 Health ZZZ's":{"note":"","data":["811D2A84 0032"],"options":null},"Infinite\\99 Lives":{"note":"Disable when on Boss Modes as it can cause hanging!","data":["801D2A87 0063"],"options":null},"Infinite\\99 Moons":{"note":"","data":["801D2A81 0063"],"options":null},"Infinite\\99 Tokens":{"note":"Disable when on Boss Modes as it can cause hanging!","data":["801D2A8D 0063"],"options":null},"Infinite\\Max Air":{"note":"","data":["811D2AA0 07C6","811DA2F6 07C1"],"options":null},"Setting Options\\Controller Select":{"note":"","data":["801D5362 00??"],"options":{"Preset 1 (Normal)":"00","Preset 2":"01","Preset 3":"02"}},"Setting Options\\Difficulty Select":{"note":"","data":["801D534F 00??"],"options":{"Easy":"00","Hard":"02","Medium":"01"}},"Setting Options\\GFX Quality Select":{"note":"","data":["801D5354 00??"],"options":{"HighCol":"02","Medium":"01","Normal":"00"}},"Setting Options\\Langauge Select":{"note":"","data":["801D21AC 00??"],"options":{"English":"00","Italian":"02","Spanish":"01"}},"Setting Options\\Music Volume Select":{"note":"","data":["801D5351 00??"],"options":{"Max":"07","Normal":"05","Off":"00"}},"Setting Options\\Rumble Pak Strength Select":{"note":"","data":["801D5353 00??"],"options":{"Max":"07","Middle":"05","Off (Normal)":"00"}},"Setting Options\\SFX Volume Select":{"note":"","data":["801D5350 00??"],"options":{"Max":"07","Normal":"05","Off":"00"}},"test health":{"note":"","data":["801D2A85 0032"],"options":null}},"AC16400E-CF5D071A-C:45":{"Always Place 1st":{"note":"","data":["80151C01 0000"],"options":null},"Have All Cars":{"note":"","data":["50001504 0000","800AAE5B 0001"],"options":null},"Have All Tracks":{"note":"","data":["81168F8C FFFF"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D013435F 0010","8112BD0C 43CB"],"options":null}},"AC8E4B32-E7B47326-C:45":{"Infinite Lives":{"note":"","data":["8009B1AF 0009"],"options":null},"Level Select In Setup Menu":{"note":"","data":["81076FF6 6F8C"],"options":null},"Max Score":{"note":"","data":["8009B1AA 00FF"],"options":null}},"AC976B38-C3A9C97A-C:50":{"99 Total Houses":{"note":"","data":["8106A61A 0063"],"options":null},"Big Newspapers":{"note":"","data":["81268D5A 0001"],"options":null},"Infinite Newspapers":{"note":"","data":["81268D12 0001"],"options":null},"Invincibility":{"note":"","data":["81268D1A 0001"],"options":null},"Level Select":{"note":"Also accesses All Bonus Levels","data":["8006A6A7 0001"],"options":null},"Rocket Boosters":{"note":"","data":["81268D3E 0001"],"options":null},"Super Jump Springs":{"note":"","data":["81268D3A 0001"],"options":null},"Throw Newspapers Backwards":{"note":"","data":["81268D4A 0001"],"options":null},"Throw Newspapers Forwards":{"note":"","data":["81268D46 0001"],"options":null},"Turbo Mode":{"note":"","data":["81268D36 0001"],"options":null}},"AC9F7DA7-A8C029D8-C:45":{"Activate\\Auto Abort Disable":{"note":"","data":["800F4078 0001"],"options":null},"Activate\\Cones to Mines":{"note":"","data":["800F3F88 0001"],"options":null},"Activate\\Disable Car 2 Car Control":{"note":"","data":["800F4050 0001"],"options":null},"Activate\\Resurrect in Place":{"note":"","data":["800F4080 0001"],"options":null},"Activate\\Stop Timer":{"note":"","data":["800F4090 0001"],"options":null},"Activate\\Upside Down Mode":{"note":"","data":["800F4061 0001"],"options":null},"Always Place 1st":{"note":"","data":["80101339 0000"],"options":null},"Car":{"note":"","data":["D00F40A5 0020","800D9EC1 00??","800D9F64 00??","800DA078 00??","800DA321 00??"],"options":{"F1 Car":"0A","Hot Rod":"09","Taxi":"08"}},"Car Type":{"note":"It gets you from 0-150 in the the time it takes the F1 racer to. Don't use the F1 racer and only hold until you reach 150 or the game will freeze.","data":["800F40B1 00??"],"options":{"Fat Car":"02","Flat Car":"01","Giant Car":"03","Invisible Car":"0A","Invisible Car (Can See Wheels)":"CD","Normal Car":"00","Paper-Thin Cars":"66","Screen-Talled Cars":"6E","Super-Sky Car":"BB","Super-Sky Car #2":"DD","Super-Tiny Car":"FF","Super-Tiny Car #2":"44"}},"Edge Boost":{"note":"by pressing R you will get a small speed boost that pushes you ahead.","data":["D00F40A5 0010","81101331 FFFF"],"options":null},"Gravity":{"note":"","data":["800F3D91 00??"],"options":{"1 Weight":"02","2 Weights":"03","A Balloon \u0026 2 Weights":"00","Normal":"01"}},"Have Two Special Cars":{"note":"You receive the Hotrod and Taxi with this code, but you may have to go through the cars from the \"Beginning\" past the \"Extreme\" for them to appear.","data":["810CAC82 FFFF","810CAC98 FFFF","810CACAE FFFF","810CACC4 FFFF","810CACDA FFFF","810CACF0 FFFF"],"options":null},"Press F9 For Track Select":{"note":"With this code, press F9 when on the track selction screen and press A to select that track!","data":["88100050 00??"],"options":{"Track 1":"00","Track 2":"01","Track 3":"02","Track 4":"03","Track 5":"04","Track 6":"05","Track 7":"06"}}},"ADA815BE-6028622F-C:4A":{"Lower Left Character\\Coin Options":{"note":"","data":["800F2769 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D580A 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800F276D 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["800F2799 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D584E 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800F279D 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Mini Game\\Max 99 Coins":{"note":"","data":["800F2C0C 0063"],"options":null},"Mini Game\\Unlimited 99 lives":{"note":"","data":["800F2C03 0063"],"options":null},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["800F2709 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D5782 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800F270D 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["800F2739 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D57C6 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800F273D 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Widescreen":{"note":"","data":["8101D522 3FE3","8101DD1E 3FE3","D10F8046 3FAA","810F8046 3FE3","8104BB40 0801","8104BB42 7ADD","8104BB44 C602","8104BB46 0004","8105EB74 3C1B","8105EB76 3FAB","8105EB78 449B","8105EB7A 0000","8105EB7C 4600","8105EB7E 1082","8105EB80 8E06","8105EB82 0008","8105EB84 0801","8105EB86 2ED2","8105EB88 4405","8105EB8A 1000","81024C38 0801","81024C3A 7AE3","81024C3C C602","81024C3E 0024","8105EB8C 3C1B","8105EB8E 800D","8105EB90 8F7B","8105EB92 75CC","8105EB94 101B","8105EB96 0004","8105EB98 2400","8105EB9C 3C1B","8105EB9E 3FAB","8105EBA0 449B","8105EBA2 0000","8105EBA4 4600","8105EBA6 1082","8105EBA8 4405","8105EBAA 1000","8105EBAC 0800","8105EBAE 9310","8105EBB0 8E06","8105EBB2 0028"],"options":null}},"ADB9498B-DAF28F55-C:45":{"Level Select\\Proving Ground-Tightrope":{"note":"Do Not use this with Level Select The Pit-Starlight. Only use One Level Select Option At A Time","data":["8014BD9F 00??"],"options":{"Basic Training":"01","Bomb Shelter":"0B","Bottleneck":"10","Boxed Set":"06","Cathedral":"04","Crossroads":"02","Dire Straight":"07","Earth Temple":"0D","Fall Out":"05","Fire Temple":"0E","Grim Retreat":"03","Mystic":"0F","Prey":"08","Proving Grounds":"00","Tempered":"0C","Tightrope":"11","Warehouse":"09","Water Temple":"0A"}},"Level Select\\The Pit-Starlight":{"note":"Do Not use this with Level Select Proving Ground-Tightrope. Only use One Level Select Option At A Time","data":["8014BD9F 00??"],"options":{"Ampatheater":"16","Breakdown":"19","Bunker":"15","Courtyard":"22","Crypts":"18","Defcon 5":"1F","Fathom":"1D","Fire Walker":"17","Hopeless":"1B","Leap Of Faith":"13","Matrix":"1C","Retaliation":"1A","Spirit Temple":"20","Starlight":"23","Stronghold":"21","The Pedestal":"1E","The Pit":"12","Wicked Dance":"14"}},"Player 1\\Have All\\Medals":{"note":"","data":["810FCB4A FFFF","810FCB4C FFFF","810FCB4E FFFF","800FCB50 0003"],"options":null},"Player 1\\Have All\\Mini Game Icons":{"note":"","data":["800FCB17 0024"],"options":null},"Player 1\\Infinite Ammo":{"note":"","data":["80336535 0063","80336537 0063","80336539 0063","80692B95 0063","80692B97 0063","80692B99 0063","80692B9B 0063","80692B9D 0063","80692B9F 0063","80692BA1 0063"],"options":null},"Player 1\\Infinite\\Cerebral Bores":{"note":"","data":["8033653B 00FF"],"options":null},"Player 1\\Infinite\\Health":{"note":"","data":["81336526 6400","80692B86 0064"],"options":null},"Player 1\\Infinite\\Metal Claws":{"note":"","data":["80336541 00FF"],"options":null},"Player 1\\Infinite\\Proximity Mines":{"note":"","data":["8033653D 00FF"],"options":null},"Player 1\\Infinite\\Sentry Guns":{"note":"","data":["8033653F 00FF"],"options":null},"Player 1\\Infinite\\Time":{"note":"","data":["811407F4 47AF","811407F6 C4B1"],"options":null},"Player 1\\Play As":{"note":"","data":["80140358 00??"],"options":{"Adon":"05","Bastile":"0B","Blind One":"08","Death Guard":"0A","Drone":"02","Elite Guard":"07","Fireborn":"03","Juggernaut":"09","Lord Of The Dead":"06","Mantid":"01","Mites":"12","Monkey":"13","Pur-Lin":"0F","Raptor":"11","Soldier":"04","Symbiont":"10","Syra":"0C","Tail Set":"0E","Turok":"00"}},"Player 1\\Start With Weapon":{"note":"","data":["803366B0 00??"],"options":{"Assault Rifle":"05","Boomerang":"01","Cerebral Bore":"12","Chest Burster":"0F","Emaciator":"0D","Flaregun":"09","Freeze Gun":"08","Grenade Launcher":"0A","Inflator":"0E","Iron Claw":"14","Mag 60":"03","Mini Gun":"06","Mite Bite":"11","Napalm Gel":"0C","PFM Mine":"13","Plasma Rifle":"07","Raptor Claw":"10","Scorpion Launcher":"0B","Sentry Turret":"15","Shotgun":"04","Tek Crossbow":"02","Warhammer":"00"}}},"AE4992C9-9253B253-C:50":{"Access All Secret NASCAR Legends":{"note":"This will give you access to,Alan Kulwicki,Cale Yarborough,Bobby Allison,Davey Allison,Richard Petty,Benny Parsons","data":["50000602 0000","810DF400 0101"],"options":null},"Laps To Race":{"note":"","data":["81044B7E 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7Laps":"07","8 Laps":"08","9 Laps":"09"}}},"AE5B9465-C54D6576-C:50":{"Infinite Options\\Health Commando":{"note":"","data":["810B5364 0080"],"options":null},"Infinite Options\\Money GDI":{"note":"","data":["810C55B6 FFFF"],"options":null},"Infinite Options\\Money NOD":{"note":"","data":["810C575E FFFF"],"options":null},"Infinite Options\\Power GDI":{"note":"","data":["810C55D6 FFFF"],"options":null},"Infinite Options\\Power NOD":{"note":"","data":["810C577E FFFF"],"options":null},"Level Select":{"note":"Select Replay Mission, Press L To Display All Missions,And Press R To Select Your Team You can now press R+L+Up To Win A Battle","data":["810901AA 0001"],"options":null}},"AE82687A-9A3F388D-C:45":{"Always First Place":{"note":"","data":["810BA6DA 0000"],"options":null},"Sixty Frames":{"note":"Too fast.","data":["800B0147 0001"],"options":null}},"AE90DBEB-79B89123-C:50":{"Infinite Dinars":{"note":"","data":["800B6663 00E8","800B6662 00E8"],"options":null},"Infinite Health \u0026 Max Health":{"note":"","data":["810CFF5E 03E7","810CFF62 03E7"],"options":null},"Infinite Magic":{"note":"","data":["810B6BEA 0063","810B6BD2 0063","810B6C02 0063","810B6C1A 0063"],"options":null},"Press L to Levitate":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D017D8F5 0020","810CFFB4 44CB"],"options":null}},"AEBCDD54-15FF834A-C:50":{"Extra Bonuses":{"note":"","data":["810EB9EA 270F"],"options":null},"Fake Max Spin Bar?":{"note":"","data":["800EB9C3 0009"],"options":null},"Infinite\\Crate Attempts":{"note":"","data":["800A9C9B 0007"],"options":null},"Infinite\\Gold Pickups":{"note":"","data":["802EB9E8 0064"],"options":null},"Infinite\\Health":{"note":"","data":["800EB9C7 0009"],"options":null}},"AEBE463E-CC71464B-C:45":{"Always 1st":{"note":"","data":["8013FCE0 0001"],"options":null},"Freeze All Lap Timers":{"note":"","data":["8013FCA1 0001","8013FCA5 0001","8013FCA9 0001"],"options":null},"Freeze Overall Timer":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8013FC95 0001"],"options":null},"Laps Of Race":{"note":"","data":["8013FC8E 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","Never Ending Laps":"06"}},"Level Select":{"note":"","data":["8013FF9B 00??"],"options":{"Bikini Island":"01","Canyon Rush":"00","China Town":"02","China Town Jam":"04","Neo Arena":"03","Neo Speed Way":"05"}},"Music Modifier":{"note":"","data":["80109BDC 00??"],"options":{"Music Off":"00","Music On":"FF"}},"No Damage\\Player 1":{"note":"","data":["50000402 0000","8113FFD8 0000"],"options":null},"No Damage\\Player 2":{"note":"","data":["50000402 0000","81142078 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["8013FF95 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Play As\\Player 2":{"note":"","data":["8013FF96 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Unlock Hidden Tracks \u0026 Cars":{"note":"","data":["8008F29C 0001"],"options":null}},"AEEF2F45-F97E30F1-C:45":{"Low Time":{"note":"","data":["800BA390 0001"],"options":null},"Max Attack Power-Fighters Arena":{"note":"","data":["801FBF6E 00C7"],"options":null},"Max Health Power-Fighters Arena":{"note":"","data":["801FBF6F 00C7"],"options":null},"Max Recovery-Fighters Arena":{"note":"","data":["801FBF70 00C7"],"options":null},"P1 Always Lose Judging":{"note":"","data":["801F727A 0000"],"options":null},"P1 Always Win Judging":{"note":"","data":["801F727A 00FF"],"options":null},"P2 Always Lose Judging":{"note":"","data":["801F53AE 0000"],"options":null},"P2 Always Win Judging":{"note":"","data":["801F53AE 00FF"],"options":null}},"AF7C97CF-24755D18-C:00":{"Infinite 9 Credits":{"note":"","data":["80091A0B 0009"],"options":null}},"AF8679B6-5E1011BF-C:4A":{"Freeze Round Timer":{"note":"","data":["8009D4B4 0000"],"options":null},"Player 1\\Infinite Health":{"note":"","data":["81105026 03E8"],"options":null},"Player 1\\Max Tech Points":{"note":"","data":["811071A0 000F","811071A2 423F","811071A4 000F","811071A6 423F","811071A8 0000","811071AA 0000","811071AC 000F","811071AE 423F"],"options":null},"Player 2\\Infinite Health":{"note":"","data":["8111B3BE 03E8"],"options":null},"Player 2\\Max Tech Points":{"note":"","data":["8111D538 000F","8111D53A 423F","8111D53C 000F","8111D53E 423F","8111D540 0000","8111D542 0000","8111D544 000F","8111D546 423F"],"options":null},"{Unlock All Extras }":{"note":"","data":["8009D48F 00FF"],"options":null}},"B00903C9-3916C146-C:4A":{"Always 1st":{"note":"","data":["8013CC10 0001"],"options":null},"Freeze All Lap Timers":{"note":"","data":["8013CBD1 0001","8013CBD5 0001","8013CBD9 0001"],"options":null},"Freeze Overall Timer":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8013CBC5 0001"],"options":null},"Laps Of Race":{"note":"","data":["8013CBBE 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","Never Ending Laps":"06"}},"Level Select":{"note":"For this cheat to work,as soon as you put the cheat on you must turn it back off,if not you wont beable to quit a Race or even finish one.","data":["8013CECB 00??"],"options":{"Bikini Island":"01","Canyon Rush":"00","China Town":"02","China Town Jam":"04","Neo Arena":"03","Neo Speed Way":"05"}},"Music Modifier":{"note":"","data":["80106B7C 00??"],"options":{"Music Off":"00","Music On":"FF"}},"No Damage\\Player 1":{"note":"","data":["50000402 0000","8113CF08 0000"],"options":null},"No Damage\\Player 2":{"note":"","data":["50000402 0000","8113EF98 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["8013CEC5 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Play As\\Player 2":{"note":"","data":["8013CEC6 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Unlock All Tracks and Vehicles":{"note":"","data":["8008D0AC 0001"],"options":null}},"B044B569-373C1985-C:50":{"Always Have Wallet Size":{"note":"","data":["80118472 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C64F5 0010","81119736 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["801192B9 00FF","8011972F 00??"],"options":{"Off":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C64F5 0000","801197E3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["80023414 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["80118456 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["80118457 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["80118458 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["80118459 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023D6DF 0020","8023D6E5 0033"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F12C8 0005","801EDD08 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["80118472 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["80118473 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["80118471 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111846C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["81118474 30FF","81118476 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["80118448 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011844E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["80118454 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011844C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["80118446 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["80118450 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["80118445 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["80118444 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["80118447 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011844A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011844D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["80118451 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["80118452 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["80118449 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011844F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["80118455 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["80118453 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011844B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011845F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["50000B01 0000","80118478 0007","50000501 0000","8011848F 0009","80118497 0009","80118499 0009","8011849C 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["80118464 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011845E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011845D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["80118462 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011845C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118400 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118409 0008","8011840A 0001","8011840C 0001","80118403 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011846A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111979C 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["801197A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["801197A5 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C64F5 0020","811D8AE0 40CB","D01C64F5 0000","811D92F2 000D","80118440 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["801197D9 00??"],"options":{"English":"00","French":"02","German":"01"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011849F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["801184A1 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["811183FE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["801D851B ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C64F5 0020","811D92F2 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C64F5 0020","811D8AE0 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C64F5 0010","801183D7 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["811183DC ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011845A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011845B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["80118440 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011840E 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["811195F2 0000","811195F4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119765 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119765 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119765 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119765 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}},"Widescreen":{"note":"Originally by Darkludx","data":["81025044 1000","81025046 0023","81092778 3C07","8109277A 3FE3"],"options":null}},"B088FBB4-441E4B1D-C:50":{"Access\\All Lures":{"note":"Codes To Be Used With Save Slot 1","data":["8019A1A9 0003","8119A1AA FFFF"],"options":null},"Access\\All Poles 2":{"note":"Codes To Be Used With Slot 1","data":["8019A1AC 0007"],"options":null},"Access\\Extra Boat 2":{"note":"Codes To Be Used With Slot 1","data":["8019A1AD 0001"],"options":null},"All Lakes Available":{"note":"","data":["80119800 0001"],"options":null},"Easy Win Current Tournament":{"note":"","data":["8011980F 0001"],"options":null},"Extra $300":{"note":"","data":["8011980B 0001"],"options":null},"Fish Are More Active":{"note":"","data":["80119807 0001"],"options":null},"Large Fish":{"note":"","data":["80119806 0001"],"options":null},"More fish in Lakes":{"note":"","data":["8011980D 0001"],"options":null},"No Penalties During Tournamet":{"note":"","data":["80119808 0001"],"options":null},"No Snags While Fishing":{"note":"","data":["80119809 0001"],"options":null},"Super Lure":{"note":"","data":["8011980E 0001"],"options":null},"Unbreakable Line":{"note":"","data":["80119805 0001"],"options":null}},"B19AD999-7E585118-C:45":{"Have\\Alpine Challenge Track":{"note":"","data":["801256DF 0001"],"options":null},"Have\\Aztec Valley Track":{"note":"","data":["801256BF 0001"],"options":null},"Have\\Death Trap Track":{"note":"","data":["801256FF 0001"],"options":null},"Infinite Missiles (Upon Pickup)":{"note":"","data":["D0164BBF 0001","801A6054 0009"],"options":null}},"B2055FBD-0BAB4E0C-C:50":{"Always Have Wallet Size":{"note":"","data":["801184B2 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C6535 0010","81119776 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["801192F9 00FF","8011976F 00??"],"options":{"Off":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C6535 0000","80119823 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["80023454 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["80118496 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["80118497 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["80118498 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["80118499 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023D71F 0020","8023D725 0033"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1308 0005","801EDD48 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801184B2 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801184B3 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801184B1 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811184AC 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811184B4 30FF","811184B6 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["80118488 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011848E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["80118494 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011848C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["80118486 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["80118490 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["80118485 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["80118484 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["80118487 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011848A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011848D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["80118491 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["80118492 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["80118489 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011848F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["80118495 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["80118493 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011848B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011849F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["50000B01 0000","801184B8 0007","50000501 0000","801184CF 0009","801184D7 0009","801184D9 0009","801184DC 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801184A4 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011849E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011849D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801184A2 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011849C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118440 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118449 0008","8011844A 0001","8011844C 0001","80118443 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801184AA 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["811197DC 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["801197E1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["801197E5 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C6535 0020","811D8B20 40CB","D01C6535 0000","811D9332 000D","80118480 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119819 00??"],"options":{"English":"00","French":"02","German":"01"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["801184DF 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["801184E1 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111843E 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["811197D8 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C6535 0020","811D9332 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C6535 0020","811D8B20 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C6535 0010","80118417 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111841C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011849A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011849B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["80118480 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011844E 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119632 0000","81119634 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}},"Widescreen":{"note":"Originally by Darkludx","data":["81025044 1000","81025046 0023","81092778 3C07","8109277A 3FE3"],"options":null}},"B20F73B6-2975FC34-C:45":{"Enemies Fight Themselves":{"note":"","data":["8005EE9C 0020"],"options":null},"Have\\All Weapons \u0026 Ammo":{"note":"","data":["8115D06E 0001","8116368E 0001"],"options":null},"Have\\Invisible Soldier":{"note":"you are Invisible to most enimies who just can not dectect or see you.","data":["8115D052 0001"],"options":null},"Have\\Large Mode":{"note":"Do not use with Mini Mode only use one at a time","data":["811636AE 0001"],"options":null},"Have\\Mini Mode":{"note":"Do not use with Big Mode only use one at a time","data":["8115D06A 0001"],"options":null},"Infinite\\Continues":{"note":"","data":["8115D062 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8135C516 0600"],"options":null},"Move Faster":{"note":"","data":["800B9705 00FF","800B9749 00FF"],"options":null},"Play Level":{"note":"","data":["81172C0A 0001","810B51AE 00??"],"options":{"Bed":"0B","Bridge":"02","Cashier":"0D","Castle":"07","Desk":"0A","Dinner":"01","Freezer":"04","Fridge":"03","Graveyard":"06","Insidewall":"05","Pinball":"11","Pool":"10","Revenge":"09","Rockets":"0F","Tanbase":"08","Town":"0C","Train":"0E"}},"Play as":{"note":"","data":["81164372 00??"],"options":{"Big Green One":"07","Hail Mendheimicus":"0C","Mini Soldier":"0D","Mystery Women":"0B","Plastro":"09","Vikki":"08"}}},"B210DF19-98B58D1A-C:50":{"Access\\All Guns":{"note":"","data":["8015E0CF 0001"],"options":null},"Access\\Max Ammo":{"note":"","data":["801646EF 0001"],"options":null},"Enable Cheat Menu":{"note":"Enable before you enter in game and you will find the cheat menu when you press the Start Button","data":["8003F36F 0003","8004719F 0003"],"options":null},"Enable Level Select Menu":{"note":"This must be used with Enable Cheat Menu and enabled before you enter in game and you will find the level select menu replaces the cheat menu when you press the Start Button","data":["810AF0BA DC38"],"options":null},"Have\\Debug Mode":{"note":"When this code is activated, a display of numbers will show on the screen as the players move around","data":["8015E417 0001"],"options":null},"Have\\Large Mode":{"note":"Do not use with Mini Mode only use one at a time","data":["8016470F 0001"],"options":null},"Have\\Mini Mode":{"note":"Do not use with Large Mode only use one at a time","data":["8015E0C9 0001"],"options":null},"Infinite\\Continues":{"note":"","data":["8015E0C3 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8016471F 0001"],"options":null},"Invisible Soldier":{"note":"you are Invisible to most enimies who just can not dectect or see you.","data":["8015E0B3 0001"],"options":null},"Play As":{"note":"Here you can choose who you would like to play as. But Do not use this with any other play as option..","data":["811653D2 00??"],"options":{"Plastro":"09","The Big Green One":"07","Vikki":"08"}}},"B2242748-FFBD61DA-C:45":{"(Everything Unlocked)\\Save File 1":{"note":"This Unlocks All Levels and Cheat Menu Items","data":["50002902 0000","810699EE ????"],"options":{"Clear Save Slot":"0000","Unlocked":"FFFF"}},"(Everything Unlocked)\\Save File 2":{"note":"This Unlocks All Levels and Cheat Menu Items","data":["50002902 0000","8106992E ????"],"options":{"Clear Save Slot":"0000","Unlocked":"FFFF"}},"(Everything Unlocked)\\Save File 3":{"note":"This Unlocks All Levels and Cheat Menu Items","data":["50002902 0000","81069A4E ????"],"options":{"Clear Save Slot":"0000","Unlocked":"FFFF"}},"(Everything Unlocked)\\Save File 4":{"note":"This Unlocks All Levels and Cheat Menu Items","data":["50002902 0000","8106998E ????"],"options":{"Clear Save Slot":"0000","Unlocked":"FFFF"}},"Have All\\64 Characters In Multi Player":{"note":"Enables all Characters selectable to play as in Multi-Player","data":["8002B197 0040"],"options":null},"Have All\\Objectives Complete":{"note":"","data":["80036FD3 0001"],"options":null},"Infinite\\Ammo (All Levels)":{"note":"","data":["80079E3B 0001"],"options":null},"Infinite\\Health (All levels)":{"note":"","data":["8100C0F4 0801","8100C0F6 8090","8100C0F8 AFA4","8100C0FA 0000","81060240 0004","81060242 7600","81060244 3C02","81060246 8008","81060248 8C42","8106024A 9EE0","8106024C 3401","8106024E 3F80","81060250 A441","81060252 00DC","81060254 0800","81060256 303F"],"options":null}},"B30ED978-3003C9F9-C:45":{"Cool Camera":{"note":"","data":["800E523E 0000"],"options":null},"Expert Mode":{"note":"","data":["800E5ED9 0000","812C4B48 0000","812C4B4C 0000"],"options":null},"Have Boost From Start":{"note":"","data":["D02C4DAC 003F","802C4925 0050"],"options":null},"Hunk O' Junk":{"note":"","data":["802C4B3F 0040"],"options":null},"Infinite Lives":{"note":"","data":["800E5ED9 0005"],"options":null},"Max Grand Prix Points":{"note":"","data":["812C492A FFFF"],"options":null},"Max Shield":{"note":"","data":["812C4B4C 4326"],"options":null},"One Lap To Race":{"note":"","data":["D02C4BC9 0000","812C4BC8 0002","D02C4BCB 0001","812C4BCA 0002"],"options":null},"Player 1\\Car Color Modifier":{"note":"","data":["802C4BED 00??"],"options":{"1st Color":"00","2nd Color":"01","3rd Color":"02","4th Color":"03","Hidden Color":"05"}},"Player 1\\Character Modifier":{"note":"","data":["800E5EE1 00??"],"options":{"Antonio Guster":"0E","Baba":"07","Beastman":"15","Billy":"1B","Bio Rex":"19","Black Shadow":"0F","Blood Falcon":"1D","Captain Falcon":"00","Dr. Clash":"17","Dr. Stewart":"01","Draq":"1A","Gomar + Shioh":"09","Jack Levin":"11","James McCloud":"0C","Jody Summer":"04","John Tanaka":"14","Kate Alen":"0A","Leon":"0D","Michael Chain":"10","Mighty Gazelle":"05","Mr. EAD":"06","Mrs. Arrow":"13","Octoman":"08","Perfect Captain Falcon":"1E","Pico":"02","Roger Buster":"0B","Samurai Goroh":"03","Silver Neelsen":"18","Super Arrow":"12","The Skull":"1C","Zoda":"16"}},"Player 1\\Infinite Shield":{"note":"","data":["812C4B48 4326"],"options":null},"Player 1\\Invisible Car":{"note":"Vs. Mode Only","data":["802C4CCB 0000"],"options":null},"Player 2\\Car Color Modifier":{"note":"","data":["802C4F95 00??"],"options":{"1st Color":"00","2nd Color":"01","3rd Color":"02","4th Color":"03","Hidden Color":"05"}},"Player 2\\Character Modifier":{"note":"","data":["802C4F90 00??"],"options":{"Antonio Guster":"0E","Baba":"07","Beastman":"15","Billy":"1B","Bio Rex":"19","Black Shadow":"0F","Blood Falcon":"1D","Captain Falcon":"00","Dr. Clash":"17","Dr. Stewart":"01","Draq":"1A","Gomar + Shioh":"09","Jack Levin":"11","James McCloud":"0C","Jody Summer":"04","John Tanaka":"14","Kate Alen":"0A","Leon":"0D","Michael Chain":"10","Mighty Gazelle":"05","Mr. EAD":"06","Mrs. Arrow":"13","Octoman":"08","Perfect Captain Falcon":"1E","Pico":"02","Roger Buster":"0B","Samurai Goroh":"03","Silver Neelsen":"18","Super Arrow":"12","The Skull":"1C","Zoda":"16"}},"Player 2\\Infinite Shield":{"note":"","data":["812C4EF0 4326"],"options":null},"Player 3\\Car Color Modifier":{"note":"","data":["802C533D 00??"],"options":{"1st Color":"00","2nd Color":"01","3rd Color":"02","4th Color":"03","Hidden Color":"05"}},"Player 3\\Character Modifier":{"note":"","data":["802C5338 00??"],"options":{"Antonio Guster":"0E","Baba":"07","Beastman":"15","Billy":"1B","Bio Rex":"19","Black Shadow":"0F","Blood Falcon":"1D","Captain Falcon":"00","Dr. Clash":"17","Dr. Stewart":"01","Draq":"1A","Gomar + Shioh":"09","Jack Levin":"11","James McCloud":"0C","Jody Summer":"04","John Tanaka":"14","Kate Alen":"0A","Leon":"0D","Michael Chain":"10","Mighty Gazelle":"05","Mr. EAD":"06","Mrs. Arrow":"13","Octoman":"08","Perfect Captain Falcon":"1E","Pico":"02","Roger Buster":"0B","Samurai Goroh":"03","Silver Neelsen":"18","Super Arrow":"12","The Skull":"1C","Zoda":"16"}},"Player 3\\Infinite Shield":{"note":"","data":["812C5298 4326"],"options":null},"Player 4\\Car Color Modifier":{"note":"","data":["802C56E5 00??"],"options":{"1st Color":"00","2nd Color":"01","3rd Color":"02","4th Color":"03","Hidden Color":"05"}},"Player 4\\Character Modifier":{"note":"","data":["802C56E0 00??"],"options":{"Antonio Guster":"0E","Baba":"07","Beastman":"15","Billy":"1B","Bio Rex":"19","Black Shadow":"0F","Blood Falcon":"1D","Captain Falcon":"00","Dr. Clash":"17","Dr. Stewart":"01","Draq":"1A","Gomar + Shioh":"09","Jack Levin":"11","James McCloud":"0C","Jody Summer":"04","John Tanaka":"14","Kate Alen":"0A","Leon":"0D","Michael Chain":"10","Mighty Gazelle":"05","Mr. EAD":"06","Mrs. Arrow":"13","Octoman":"08","Perfect Captain Falcon":"1E","Pico":"02","Roger Buster":"0B","Samurai Goroh":"03","Silver Neelsen":"18","Super Arrow":"12","The Skull":"1C","Zoda":"16"}},"Player 4\\Infinite Shield":{"note":"","data":["812C5640 4326"],"options":null},"Show 30 Cars Out Of 1 Position":{"note":"","data":["800E5FC7 001D"],"options":null},"Super Ultimate Mega Fast Mode":{"note":"","data":["812C4984 2222"],"options":null},"Time Always 00.00.00/1st Place":{"note":"","data":["802C4BC0 0000","802C4BC2 0001"],"options":null},"Track Modifier":{"note":"","data":["800F8517 00??"],"options":{"Big Blue":"04","Big Blue 2":"0A","Big Hand":"17","Devils Forest":"03","Devils Forest 2":"08","Devils Forest 3":"13","Fire Field":"0C","Mute City":"00","Mute City 2":"11","Port Town":"05","Port Town 2":"16","Rainbow Road":"12","Red Canyon":"0F","Sand Ocean":"02","Sand Ocean 2":"15","Sector Alpha":"06","Sector Beta":"0E","Silence":"01","Silence 2":"0D","Space Plant":"14","White Land":"0B","White Land 2":"10"}},"Unlock Everything":{"note":"","data":["800CD3C8 0001"],"options":null},"Widescreen":{"note":"","data":["8106D164 0803","8106D166 522C","810D48B0 3C1B","810D48B2 3F40","810D48B4 449B","810D48B6 9000","810D48B8 0000","810D48BA 0000","810D48BC 0801","810D48BE B45B","810D48C0 4612","810D48C2 3182","D11418A0 3F99","811418A0 3FCC"],"options":null}},"B323E37C-BBC35EC4-C:00":{"Have Infinite Max Credits":{"note":"","data":["802C9FE1 0099"],"options":null}},"B3402554-7340C004-C:45":{"Car Upgrades\\'63 Muscle Car":{"note":"","data":["8015056F 0005"],"options":null},"Car Upgrades\\All-Terrain Vehicle":{"note":"","data":["8015057F 0004"],"options":null},"Car Upgrades\\Devastator":{"note":"","data":["80150577 0005"],"options":null},"Car Upgrades\\Italia P69":{"note":"","data":["8015057B 0005"],"options":null},"Car Upgrades\\La Bomba":{"note":"","data":["80150573 0005"],"options":null},"Car Upgrades\\Police Car":{"note":"","data":["80150587 0004"],"options":null},"Car Upgrades\\School Bus":{"note":"","data":["80150583 0004"],"options":null},"Infinite Time":{"note":"","data":["8015097D 0095"],"options":null},"Play Level Modifier":{"note":"","data":["80150993 00??"],"options":{"Appalachia":"0C","Arizona":"07","Beverly Hills":"04","Chicago":"0A","Cruise The USA":"0E","Death Valley":"06","Golden Gate Park":"00","Grand Canyon":"08","Indiana":"0B","Iowa":"09","LA Freeway":"05","Redwood Forest":"03","San Francisco":"01","US 101":"02","Washington DC":"0D"}},"Player 1\\Always First Place":{"note":"","data":["8015025B 0001"],"options":null},"Player 1\\Always Have Fastest Car":{"note":"","data":["8015024A 0001"],"options":null},"Player 1\\Gearbox Type Modifier":{"note":"","data":["80150243 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 1\\Lights \u0026 Sirens For Police Car \u0026 School Bus":{"note":"","data":["8115056A 0001","8114E3BA 0001"],"options":null},"Player 2\\Always First Place":{"note":"","data":["801505F7 0001"],"options":null},"Player 2\\Always Have Fastest Car":{"note":"","data":["801505E6 0001"],"options":null},"Player 2\\Gearbox Type Modifier":{"note":"","data":["801505DF 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 2\\Lights \u0026 Sirens For Police Car \u0026 School Bus":{"note":"","data":["81150906 0001","8114E3D2 0001"],"options":null},"Stop Elapsed Time And No Traffic":{"note":"","data":["80150979 0000"],"options":null}},"B35FEBB0-7427B204-C:46":{"Earn Spirits Faster":{"note":"","data":["8007D3AD 0000"],"options":null},"Have All Elements":{"note":"","data":["8107D39C 3232","8107D39E 3232"],"options":null},"Makes your HP 999-999":{"note":"","data":["8107D37C 03E7","8107D37E 03E7"],"options":null},"Makes your MP 999-999":{"note":"","data":["8107D380 03E7","8107D382 03E7"],"options":null},"No Random Battles":{"note":"","data":["8008DE6C 0000","8008DE6E 0000"],"options":null},"Set Agility to 999-999":{"note":"","data":["8107D384 03E7"],"options":null},"Set Defence to 999-999":{"note":"","data":["8107D386 03E7"],"options":null}},"B3D451C6-E1CB58E2-C:4A":{"Decrease Fodder":{"note":"","data":["81180BB4 03E7"],"options":null},"Decrease Material":{"note":"","data":["8118A2F0 03E7"],"options":null},"Max Money":{"note":"","data":["811FDA9C 000F","811FDA9E 423F"],"options":null}},"B443EB08-4DB31193-C:45":{"All Equipment Upgrades":{"note":"","data":["801ED89D 0023","811ED8EA 201B","801ED87C 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D038127B 0000","801ED832 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801ED8B2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801ED8B3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801ED8B4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801ED8B5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801ED8B6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801ED8B7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801ED8A5 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801ED8AB 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801ED8B1 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Fight Demo Majora's Mask":{"note":"With this code,load the game \u0026 put the cheat on. then press start to apear in the Demo mode.","data":["801688D8 0020"],"options":null},"Fog\\Blue":{"note":"","data":["801642C8 0020"],"options":null},"Fog\\Pink":{"note":"","data":["801642CC 0020"],"options":null},"Fog\\Yellow":{"note":"","data":["801642D0 0020"],"options":null},"Have\\All Masks":{"note":"","data":["801ED8B8 003E","801ED8B9 0038","801ED8BA 0047","801ED8BB 0045","801ED8BC 0040","801ED8BD 0032","801ED8BE 003A","801ED8BF 0046","801ED8C0 0039","801ED8C1 0042","801ED8C2 0048","801ED8C3 0033","801ED8C4 003C","801ED8C5 003D","801ED8C6 0037","801ED8C7 003F","801ED8C8 0036","801ED8C9 0034","801ED8CA 0043","801ED8CB 0041","801ED8CC 003B","801ED8CD 0044","801ED8CE 0049","801ED8CF 0035"],"options":null},"Have\\All Quest Status Items":{"note":"","data":["801ED8ED 0005","811ED8EE F7CF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801ED8A2 0002"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801ED8A3 0003"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801ED8A4 0004"],"options":null},"Have\\Bombchu":{"note":"","data":["801ED8A7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801ED8A6 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801ED8A9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801ED8A8 0008"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801ED8B0 0010"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801ED8A1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801ED8AF 000F"],"options":null},"Have\\Item Modifier":{"note":"","data":["801ED8B0 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\Lens of Truth":{"note":"","data":["801ED8AE 000E"],"options":null},"Have\\Magic Beans":{"note":"","data":["801ED8AA 000A"],"options":null},"Have\\Ocarina of Time":{"note":"","data":["801ED8A0 0000"],"options":null},"Have\\Pictograph":{"note":"","data":["801ED8AD 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801ED8AC 000C"],"options":null},"Infinite\\Health":{"note":"","data":["811ED866 0140"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811ED864 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"","data":["801ED8D1 0063","50000501 0000","801ED8D6 0063","50000201 0000","801ED8DC 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801ED869 0060","811ED870 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811ED86A 03E7"],"options":null},"Maximum Visibility":{"note":"","data":["801642D8 0020"],"options":null},"Play As":{"note":"","data":["801ED850 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D038127B 0020","8139A558 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You have been warned.","data":["801ED87C 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F88A0 0008","811ED846 FFFD","D01F88A0 0004","811ED846 0000","D01F88A0 0002","811ED846 FFFE"],"options":null},"Use C-Buttons Anywhere":{"note":"This code allows you to use C-Button Items where you normally can't use them.","data":["811F1748 0000","811F174A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["D03E4CFA 0000","803FD555 0001","813FD55A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"B44CAB74-07029A29-C:50":{"For More Time Press D-pad up":{"note":"","data":["D00EA380 0008","8115F0D2 1724","D00EA380 0008","8115F0DA 003C"],"options":null},"Infinite Options\\Freezing Breath":{"note":"","data":["8122CDE8 42C8"],"options":null},"Infinite Options\\Health":{"note":"","data":["8122CDD4 42C8"],"options":null},"Infinite Options\\Laser Eye":{"note":"","data":["8122CDE4 42C8"],"options":null},"Infinite Options\\Running Boosts":{"note":"","data":["8122CDDC 42C8"],"options":null},"Infinite Options\\X-Ray Vision":{"note":"","data":["8122CDE0 42C8"],"options":null},"Level Select":{"note":"","data":["D00EA380 0020","8117A378 0013","D00EA380 0020","8117A388 000F","81144727 0063"],"options":null}},"B54CE881-BCCB6126-C:45":{"Hole In One\\Hole 01":{"note":"","data":["800FF713 0000"],"options":null},"Hole In One\\Hole 02":{"note":"","data":["800FF715 0000"],"options":null},"Hole In One\\Hole 03":{"note":"","data":["800FF717 0000"],"options":null},"Hole In One\\Hole 04":{"note":"","data":["800FF719 0000"],"options":null},"Hole In One\\Hole 05":{"note":"","data":["800FF71B 0000"],"options":null},"Hole In One\\Hole 06":{"note":"","data":["800FF71D 0000"],"options":null},"Hole In One\\Hole 07":{"note":"","data":["800FF71F 0000"],"options":null},"Hole In One\\Hole 08":{"note":"","data":["800FF721 0000"],"options":null},"Hole In One\\Hole 09":{"note":"","data":["800FF723 0000"],"options":null},"Hole In One\\Hole 10":{"note":"","data":["800FF725 0000"],"options":null},"Hole In One\\Hole 11":{"note":"","data":["800FF727 0000"],"options":null},"Hole In One\\Hole 12":{"note":"","data":["800FF729 0000"],"options":null},"Hole In One\\Hole 13":{"note":"","data":["800FF72B 0000"],"options":null},"Hole In One\\Hole 14":{"note":"","data":["800FF72D 0000"],"options":null},"Hole In One\\Hole 15":{"note":"","data":["800FF72F 0000"],"options":null},"Hole In One\\Hole 16":{"note":"","data":["800FF731 0000"],"options":null},"Hole In One\\Hole 17":{"note":"","data":["800FF733 0000"],"options":null},"Hole In One\\Hole 18":{"note":"","data":["800FF735 0000"],"options":null}},"B58988E9-B1FC4BE8-C:50":{"Always 1st":{"note":"","data":["812C4DC6 0001"],"options":null},"Have All\\Races":{"note":"","data":["812B5DC4 0101","812B5DC6 0101","812B5DC8 0101","812B5DCA 0101","812B5DCC 0101","812B5DCE 0101","812B5DD0 0101"],"options":null},"Have All\\Ships":{"note":"","data":["812B5DD2 0101","812B5DD4 0101","812B5DD6 0101","812B5DD8 0101","812B5DDA 0101","812B5DDC 0101","812B5DDE 0101"],"options":null},"Infinite\\Boosts\\Player 1":{"note":"","data":["812C4DCC 4190"],"options":null},"Infinite\\Boosts\\Player 2":{"note":"","data":["812C50FC 4190"],"options":null},"Infinite\\Time":{"note":"","data":["812B49C0 42C8"],"options":null}},"B6524461-ED6D04B1-C:50":{"Infinite Health\\Player 1":{"note":"","data":["80225E9D 00FA"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["80225E9F 00FA"],"options":null},"Infinite Time":{"note":"","data":["80225EA5 003C"],"options":null},"Win Once To Win\\Player 1":{"note":"","data":["80225E95 0001"],"options":null},"Win Once To Win\\Player 2":{"note":"","data":["80225E97 0001"],"options":null}},"B6951A94-63C849AF-C:4A":{"Have All Items":{"note":"","data":["50000501 0000","80389C4A 0001","50000301 0000","80389C51 0001","80389C5A 0001","80389C5B 0001","80389C5D 0001","50000E01 0000","80389C60 0001"],"options":null},"Have\\Exp Points":{"note":"","data":["80389C49 0063"],"options":null},"Have\\Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C3F 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C45 0001","81389C46 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C3E 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C49 0063"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C48 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the GS button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C90 ????","89389C92 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CED 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C88 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C88 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C3D 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C42 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"B6BC0FB0-E3812198-C:4A":{"All Levels\\Infinite\\Energy":{"note":"","data":["800D5A9B 00FF"],"options":null},"All Levels\\Infinite\\Max Credits":{"note":"","data":["80075DDC 00FF"],"options":null},"All Levels\\Infinite\\Time":{"note":"","data":["800D5A97 0063"],"options":null},"All Levels\\Unlock All\\Levels - Options Menu":{"note":"","data":["80075DD6 FFFF","80075DD7 FFFF"],"options":null},"All Levels\\Unlock All\\Option Menu Items":{"note":"","data":["80075DD8 FFFF","80075DD9 FFFF"],"options":null},"Level\\0-0\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["8010BB0C 0000"],"options":null},"Level\\0-0\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8010BB2B 0001"],"options":null},"Level\\1-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801657DC 0000"],"options":null},"Level\\1-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801657FB 0001"],"options":null},"Level\\1-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCF9C 0000"],"options":null},"Level\\1-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCFBB 0001"],"options":null},"Level\\1-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801126EC 0000"],"options":null},"Level\\1-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8011270B 0001"],"options":null},"Level\\2-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BD29C 0000"],"options":null},"Level\\2-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801BD2BB 0001"],"options":null},"Level\\2-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B911C 0000"],"options":null},"Level\\2-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B913B 0001"],"options":null},"Level\\2-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7CEC 0000"],"options":null},"Level\\2-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7D0B 0001"],"options":null},"Level\\3-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801588EC 0000"],"options":null},"Level\\3-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8015890B 0001"],"options":null},"Level\\3-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B936C 0000"],"options":null},"Level\\3-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B938B 0001"],"options":null},"Level\\3-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801013CC 0000"],"options":null},"Level\\3-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["81100E08 C350"],"options":null}},"B703EB23-28AAE53A-C:4A":{"Infinite\\Lives":{"note":"","data":["800A37C8 0009"],"options":null},"Infinite\\Specials":{"note":"","data":["800A37C9 0003"],"options":null},"Max\\Combo":{"note":"","data":["810A37C4 7FFF"],"options":null},"Max\\Lower Level":{"note":"","data":["800A37D8 0003"],"options":null},"Max\\Score":{"note":"","data":["800A37A8 03E7","800A37A9 03E7"],"options":null},"Max\\Upper Level":{"note":"","data":["800A37D9 0063"],"options":null},"Play As":{"note":"","data":["800A37CC 00??"],"options":{"Character 1":"00","Character 2":"01","Character 3":"02"}},"Status Modifier":{"note":"","data":["800A37CA 00??"],"options":{"High":"01","Low":"03","Mid":"02"}}},"B73AB6F6-296267DD-C:45":{"All Levels\\Infinite\\Energy":{"note":"","data":["800D5A9B 00FF"],"options":null},"All Levels\\Infinite\\Max Credits":{"note":"","data":["80075DDC 00FF"],"options":null},"All Levels\\Infinite\\Time":{"note":"","data":["800D5A97 0063"],"options":null},"All Levels\\Unlock All\\Levels - Options Menu":{"note":"","data":["80075DD6 FFFF","80075DD7 FFFF"],"options":null},"All Levels\\Unlock All\\Option Menu Items":{"note":"","data":["80075DD8 FFFF","80075DD9 FFFF"],"options":null},"Level\\0-0\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time and only use for that specific level Cheat","data":["8010BB0C 0000"],"options":null},"Level\\0-0\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8010BB2B 0001"],"options":null},"Level\\1-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801657DC 0000"],"options":null},"Level\\1-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801657FB 0001"],"options":null},"Level\\1-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCF9C 0000"],"options":null},"Level\\1-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCFBB 0001"],"options":null},"Level\\1-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801126EC 0000"],"options":null},"Level\\1-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8011270B 0001"],"options":null},"Level\\2-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BD29C 0000"],"options":null},"Level\\2-1\\Invincible":{"note":"","data":["801BD2BB 0001"],"options":null},"Level\\2-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B911C 0000"],"options":null},"Level\\2-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B913B 0001"],"options":null},"Level\\2-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7CEC 0000"],"options":null},"Level\\2-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7D0B 0001"],"options":null},"Level\\3-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801588EC 0000"],"options":null},"Level\\3-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8015890B 0001"],"options":null},"Level\\3-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B936C 0000"],"options":null},"Level\\3-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B938B 0001"],"options":null},"Level\\3-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801013CC 0000"],"options":null},"Level\\3-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["81100E08 C350"],"options":null},"Widescreen":{"note":"","data":["81062CCC 3FE3"],"options":null}},"B7CF2136-FA0AA715-C:50":{"Access All In-Game Cheats":{"note":"In Set-Up Menu","data":["810C48F8 0100"],"options":null},"Access Midway Track":{"note":"","data":["810C4890 03E7"],"options":null},"Activate All In-Game Cheats":{"note":"","data":["50000E02 0000","810C48A4 FFFF"],"options":null},"All Keys,Cars \u0026 Cans":{"note":"","data":["50000E02 0000","810C4574 FFFF"],"options":null},"Always 1st":{"note":"","data":["80115499 0000"],"options":null},"Best Stunt Points":{"note":"On Track","data":["8110B438 03E7"],"options":null},"Easy Difficulty":{"note":"","data":["8010FFAA 0000"],"options":null},"Laps To Race":{"note":"","data":["811088D0 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Max \u0026 Best Score":{"note":"On Stunt Track","data":["50000502 0000","810C4702 FFFF"],"options":null},"Max Points In Total":{"note":"","data":["810E235A 03E7"],"options":null},"No\\Checkpoints Extended Time":{"note":"","data":["8010FF47 0000"],"options":null},"No\\Wind":{"note":"","data":["80116E98 0000"],"options":null},"Number Of Drones In Race":{"note":"","data":["810E1B88 00??"],"options":{"1 Drone":"01","2 Drones":"02","3 Drones":"03","4 Drones":"04","5 Drones":"05","6 Drones":"06","7 Drones":"07","8 Drones":"08","9 Drones":"09"}}},"B7F40BCF-553556A5-C:45":{"Have Spells\\Ball Bearing":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA67C 0006"],"options":null},"Have Spells\\Balloon":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA7BC 0006"],"options":null},"Have Spells\\Bowling Ball":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA5FC 0006"],"options":null},"Have Spells\\Boxing Glove":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA8BC 000E"],"options":null},"Have Spells\\Bungee":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA77C 000E"],"options":null},"Have Spells\\Fat Glover":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA97C 001E"],"options":null},"Have Spells\\First Aid":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA93C 001E"],"options":null},"Have Spells\\Gauntlet":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA87C 001E"],"options":null},"Have Spells\\Glass Cutter":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA8FC 000E"],"options":null},"Have Spells\\Possess":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA83C 0006"],"options":null},"Have Spells\\Rubber Ball":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["801DA5BC 0006"],"options":null},"Have Spells\\Speed-Up":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA6FC 000E"],"options":null},"Have Spells\\Sucker Ball":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA63C 000E"],"options":null},"Have Spells\\Super-Slam":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA7FC 0016"],"options":null},"Have Spells\\Teleport":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA73C 000E"],"options":null},"Have Spells\\Yo-Yo":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA6BC 0016"],"options":null},"Infinite\\Max Health":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["8027069B 0006","8027069D 0006","802881CB 0006"],"options":null},"Infinite\\Max Lives":{"note":"","data":["80288127 00FF","80270697 00FF"],"options":null},"Infinite\\Max Magical\\Ball Energy":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["802706A3 00FF","80288313 00FF"],"options":null},"Infinite\\Max Magical\\Spell Energy":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["802706A1 00FF","8028826F 00FF"],"options":null},"Infinite\\Max Rank Bonus":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["802706FD 00FF","802883B7 00FF"],"options":null}},"B8F0BD03-4479189E-C:50":{"Access All Tracks In Match Mode":{"note":"","data":["50000602 0000","810A9080 0001"],"options":null},"Access all Gold Trophies":{"note":"Championshp \u0026 Match Mode","data":["50000602 0000","810A9078 0000"],"options":null},"Always 1st":{"note":"","data":["800A9107 0000"],"options":null},"Infinite Time":{"note":"","data":["8009498F 003C"],"options":null}},"B9A9ECA2-17AAE48E-C:45":{"Always Place 1st":{"note":"","data":["80152906 0000"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 1":{"note":"","data":["8113A110 FFFF"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 2":{"note":"","data":["8113A170 FFFF"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 4":{"note":"","data":["8113A230 FFFF"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 5":{"note":"","data":["8113A290 FFFF"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 6":{"note":"","data":["8113A2F0 FFFF"],"options":null},"Infinate Ammo\\All Players In Battle":{"note":"","data":["80152B9D 0050","80152F55 0050","8015330D 0050","801536C5 0050"],"options":null},"Max Score\\Stunt Mode":{"note":"","data":["8115204E 7FFF"],"options":null},"Speed Activator":{"note":"","data":["D0037AA4 0020","8114A298 ????"],"options":{"146 mph":"4333","170 mph":"4350","210 mph":"4380","270 mph":"4393"}},"Start On Lap Modifier":{"note":"","data":["D014AA38 0000","8014AA38 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Track Modifier":{"note":"","data":["8014978C 00??"],"options":{"Track 1":"00","Track 2":"01","Track 3":"02","Track 4":"03"}},"Unlock All Cheats":{"note":"","data":["50000B02 0000","8111648C 0101"],"options":null}},"B9AF8CC6-DEC9F19F-C:50":{"Access All Levels":{"note":"","data":["8020860E 00FF","80208610 00FF"],"options":null},"Extended Tongue":{"note":"","data":["8133185E FFFF"],"options":null},"Have 99 Crowns":{"note":"","data":["80251857 0063"],"options":null},"Have All Levels Completed":{"note":"","data":["80208612 0019","80208613 0019","80208614 0015","80208615 0018","80208616 0017","80208617 0017"],"options":null},"Infinite Health":{"note":"","data":["80174DF3 000A"],"options":null},"Level Select":{"note":"","data":["8029097B 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06"}}},"BA6C293A-9FAFA338-C:46":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2552 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE03F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","80202535 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE095 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FC9C5 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFDAD 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802025E5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801D9EFD 0001"],"options":null}},"BA780BA0-0F21DB34-C:45":{"Have All Medals":{"note":"For Expert \u0026 Normal Modes","data":["50000802 0000","81178870 7777"],"options":null},"Infinite Boost\\Player 2":{"note":"","data":["8113CB6C 0000","8113CB6E 0000","8113FA4C 0000","8113FA4E 0000"],"options":null},"Infinite Boost\\Player 3":{"note":"","data":["8113D04C 0000","8113D04E 0000","8113FF2C 0000","8113FF2E 0000"],"options":null},"Infinite Boost\\Player 4":{"note":"","data":["8113D52C 0000","8113D52E 0000","8114040C 0000","8114040E 0000"],"options":null},"Infinite Dual Blue Lasers\\Player 2":{"note":"","data":["80161AAF 0002"],"options":null},"Infinite Dual Blue Lasers\\Player 3":{"note":"","data":["80161AB3 0002"],"options":null},"Infinite Dual Blue Lasers\\Player 4":{"note":"","data":["80161AB7 0002"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["8013CB17 00FF","8013F9F7 00FF"],"options":null},"Infinite Health\\Player 3":{"note":"","data":["8013CFF7 00FF","8013FED7 00FF"],"options":null},"Infinite Health\\Player 4":{"note":"","data":["8013D4D7 00FF","801403B7 00FF"],"options":null},"Infinite Smart Bombs\\Player 2":{"note":"","data":["80177DA7 0004"],"options":null},"Infinite Smart Bombs\\Player 3":{"note":"","data":["80177DAB 0004"],"options":null},"Infinite Smart Bombs\\Player 4":{"note":"","data":["80177DAF 0004"],"options":null},"Infinite\\Armor\\Falco":{"note":"","data":["801778B7 00FF"],"options":null},"Infinite\\Armor\\Peppy":{"note":"","data":["801778BF 00FF"],"options":null},"Infinite\\Armor\\Slippy":{"note":"","data":["801778BB 00FF"],"options":null},"Infinite\\Dual Blue Lasers":{"note":"","data":["80161AAB 0002"],"options":null},"Infinite\\Energy\\Player 1":{"note":"For Solo \u0026 Multi Player","data":["8013C637 00FF","8013F517 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["80161AA1 0009"],"options":null},"Level Select":{"note":"","data":["80178237 00??"],"options":{"Aquas":"0D","Area 6":"03","Bolse":"11","Corneria":"00","Corneria (Multi)":"14","Fortuna":"0E","Glitch":"04","Katina":"10","Macbeth":"0B","Meteo":"01","Sector X":"02","Sector Y":"05","Sector Z":"12","Solar":"07","Titania":"0C","Training Mode Level":"0A","Venom 1":"06","Venom 2":"09","Venom With Starwolf":"13","Zoness":"08"}},"Loads O' Hits":{"note":"","data":["80161A9B 00FF"],"options":null},"Unlimited\\Boost":{"note":"","data":["8113C68C 0000","8113C68E 0000","8113F56C 0000","8113F56E 0000"],"options":null},"Unlimited\\Smart Bombs":{"note":"","data":["80177DA3 0004"],"options":null},"Widescreen":{"note":"","data":["810031A2 3FE3"],"options":null}},"BADDF714-A1FF1B80-C:45":{"Bomb Select":{"note":"","data":["8024A3A1 00??"],"options":{"Blue Remote Bomb":"05","Clear All Special Bombs.":"00","Crazy Bomb":"1D","Invisible Mine Bomb":"07","Jelly Bomb":"03","Power Bomb":"02","Red Beem Bomb":"06","Shock Wave Bomb":"04"}},"Bomberman Speed":{"note":"","data":["8024A3A0 00??"],"options":{"Fast":"0E","Normal":"08","Slow":"04","Turbo":"10"}},"Have\\Infinite\\Kick":{"note":"","data":["8024A3A6 0002"],"options":null},"Have\\Max Bombs":{"note":"","data":["8024A39F 00FF"],"options":null},"Have\\Max Fire":{"note":"","data":["8024A39E 00FF"],"options":null},"Infinite\\Health Hearts":{"note":"","data":["8024A3AE 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["802E1CE7 00FF"],"options":null},"Infinite\\Timer":{"note":"","data":["800FDD72 002A"],"options":null},"Invincible":{"note":"Enemies \u0026 Bomb Blasts cant harm you.But if you walk \u0026 keep laying Bombs it will most likly freeze.so try to avoid constant bombing while walking.Turn cheat to off to go back to normal.","data":["8024A3A8 00??"],"options":{"Off":"00","On":"01"}},"Walk through\\Blocks":{"note":"Walk through Blocks like they are not there.Turn cheat to off to go back to normal.","data":["8024A3A5 00??"],"options":{"Off":"00","On":"01"}},"Walk through\\Bombs":{"note":"Walk through Bombs like they are not there.Turn cheat to off to go back to normal.","data":["8024A3A6 00??"],"options":{"Off":"00","On":"01"}}},"BB30B1A5-FCF712CE-C:45":{"Enable Chasm Freestyle":{"note":"","data":["81071834 0001"],"options":null},"Enable Jim Jam Freestyle":{"note":"","data":["81071838 0001"],"options":null},"Enable Moon Freestyle":{"note":"","data":["8107183C 0001"],"options":null},"Enable Tabletop Freestyle":{"note":"","data":["81071832 0001"],"options":null},"Extra Points":{"note":"","data":["800711E7 00FF"],"options":null}},"BBC99D32-117DAA80-C:45":{"Have All\\Boards":{"note":"","data":["81082A04 0003","81082A06 FFFF"],"options":null},"Have All\\Characters":{"note":"","data":["810829F8 07FF"],"options":null},"Have All\\Difficulties":{"note":"","data":["810829F0 0700"],"options":null},"Have All\\Tracks":{"note":"","data":["810829FC BFFE"],"options":null},"Low Timer":{"note":"","data":["801495FF 0000","80149601 0000"],"options":null},"Max\\50000 Stunt Points":{"note":"","data":["810829B8 C350"],"options":null},"[Audio Fix]":{"note":"","data":["81051840 AD99"],"options":null}},"BCB1F89F-060752A2-C:4A":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D51F0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112CD2E 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800EAFE8 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D51D0 0001","50001701 0000","800D51D8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D5460 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D545F 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D51C9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D51CA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D51CB 0003"],"options":null}},"BCFACCAA-B814D8EF-C:45":{"Player 1 Max Score (Casting Game)":{"note":"","data":["8107A412 FFFF"],"options":null},"Player 2 Max Score (Casting Game)":{"note":"","data":["8107A416 FFFF"],"options":null}},"BD636D6A-5D1F54BA-C:45":{"Away Team scores":{"note":"","data":["800478BB 00??"],"options":{"0 Goals":"00","25 Goals":"19","50 Goals":"32","99 Goals":"63"}},"Home Team scores":{"note":"","data":["800478BF 00??"],"options":{"0 Goals":"00","25 Goals":"19","50 Goals":"32","99 Goals":"63"}},"Open Cup Classic Mode":{"note":"","data":["8003CC6F 0001"],"options":null}},"BD8E206D-98C35E1C-C:4A":{"Day":{"note":"","data":["80136FBF 00??"],"options":{"Friday 12th":"0C","Friday 19th":"13","Friday 26th":"1A","Friday 5th":"05","Monday 15th":"0F","Monday 1st":"01","Monday 22nd":"16","Monday 29th":"1D","Monday 8th":"08","Saturday 13th":"0D","Saturday 27th":"1B","Saturday 30th":"14","Saturday 6th":"06","Sunday 14th":"0E","Sunday 21st":"15","Sunday 28th":"1C","Sunday 7th":"07","Thursday 11th":"0B","Thursday 18th":"12","Thursday 25th":"19","Thursday 4th":"04","Tuesday 16th":"10","Tuesday 23rd":"17","Tuesday 2nd":"02","Tuesday 30th":"1E","Tuesday 9th":"09","Wednesday 10th":"0A","Wednesday 17th":"11","Wednesday 24th":"18","Wednesday 31st":"1F","Wednesday 3rd":"03"}},"Hours":{"note":"","data":["80136FBE 00??"],"options":{"00 AM":"00","00 PM":"0C","01 AM":"01","01 PM":"0D","02 AM":"02","02 PM":"0E","03 AM":"03","03 PM":"0F","04 AM":"04","04 PM":"10","05 AM":"05","05 PM":"11","06 AM":"06","06 PM":"12","07 AM":"07","07 PM":"13","08 AM":"08","08 PM":"14","09 AM":"09","09 PM":"15","10 AM":"0A","10 PM":"16","11 AM":"0B","11 PM":"17"}},"Item Select":{"note":"","data":["81126EE8 ????"],"options":{"100 Bag":"2103","1000 Bag":"2100","10000 Bag":"2101","30000 Bag":"2102","Alarm Clock":"1DB3","Blue NES Game":"1D42","CD Player":"1DAC","Fish Tank (Fish Included!)":"1CA6","Flat Shell":"2514","Grandfather Clock":"1DA0","Grey NES Game":"1D2F","JukeBox":"1D50","Lamp":"1EA1","Light Blue NES Game":"1D37","Nook's Shirt":"2410","Orange":"2804","Orange NES Game":"1D2B","Pet Cage":"1C00","Pointy Shell":"2515","Purple NES Game":"1D3E","Record Player":"1D4C","Red NES Game":"1D33","Round Snowman Table":"1EAB","Snowman Bed":"1EAF","Snowman Fridge":"1EA5","Snowman Seat":"1EB0","Stereo":"1DA9","Stereo Kinda Thing":"1DA6","Stereo NES Colour":"1D47","Tall Red Cupboard":"1011","Yellow NES Game":"1D3A"}},"Max Cash":{"note":"","data":["813BC34C FFFF"],"options":null},"Minutes":{"note":"","data":["80136FBD 00??"],"options":{"00":"00","05":"05","10":"0A","15":"0F","20":"14","25":"19","30":"1E","35":"23","40":"28","45":"2D","50":"32","55":"37","59":"3B"}},"Month":{"note":"","data":["80136FC1 00??"],"options":{"April":"04","Aug":"08","Dec":"0C","Feb":"02","Jan":"01","July":"07","June":"06","March":"03","May":"05","Nov":"0B","Oct":"0A","Sept":"09"}},"Time Passes":{"note":"","data":["80136FD2 00??"],"options":{"Hours \u0026 Mins Fast":"10","Hours \u0026 Mins Medium":"05","Mins Like Seconds":"01","Time Normal":"00","Time Zooms By":"FF"}},"Widescreen":{"note":"","data":["810CB180 3C07","810CB182 3FE3"],"options":null}},"BDA8F143-B1AF2D62-C:45":{"Multi\\Agony\\Have All\\Weapons\\Player 1":{"note":"","data":["801832B7 0001","801832BB 0001","801832BF 0001","801832C3 0001","801832C7 0001","801832CB 0001","801832CF 0001","801832D3 0001","801832D7 0001","801832DB 0001"],"options":null},"Multi\\Agony\\Have All\\Weapons\\Player 2":{"note":"","data":["8018361B 0001","8018361F 0001","80183623 0001","80183627 0001","8018362B 0001","8018362F 0001","80183633 0001","80183637 0001","8018363B 0001","8018363F 0001"],"options":null},"Multi\\Agony\\Infinite\\Ammo\\Player 1":{"note":"","data":["801832DF 0063","801832E3 0063","801832E7 0063","801832EB 0063","801832EF 0063","801832F3 0063"],"options":null},"Multi\\Agony\\Infinite\\Ammo\\Player 2":{"note":"","data":["80183643 0063","80183647 0063","8018364B 0063","8018364F 0063","80183653 0063","80183657 0063"],"options":null},"Multi\\Cold Steel\\Have All\\Weapons\\Player 1":{"note":"","data":["8017B577 0001","8017B57B 0001","8017B57F 0001","8017B583 0001","8017B587 0001","8017B58B 0001","8017B58F 0001","8017B593 0001","8017B597 0001","8017B59B 0001"],"options":null},"Multi\\Cold Steel\\Have All\\Weapons\\Player 2":{"note":"","data":["8017B8DB 0001","8017B8DF 0001","8017B8E3 0001","8017B8E7 0001","8017B8EB 0001","8017B8EF 0001","8017B8F3 0001","8017B8F7 0001","8017B8FB 0001","8017B8FF 0001"],"options":null},"Multi\\Cold Steel\\Infinite\\Ammo\\Player 1":{"note":"","data":["8017B59F 0063","8017B5A3 0063","8017B5A7 0063","8017B5AB 0063","8017B5AF 0063","8017B5B3 0063"],"options":null},"Multi\\Cold Steel\\Infinite\\Ammo\\Player 2":{"note":"","data":["8017B903 0063","8017B907 0063","8017B90B 0063","8017B90F 0063","8017B913 0063","8017B917 0063"],"options":null},"Multi\\Corridors\\Have All\\Weapons\\Player 1":{"note":"","data":["8017D1C7 0001","8017D1CB 0001","8017D1CF 0001","8017D1D3 0001","8017D1D7 0001","8017D1DB 0001","8017D1DF 0001","8017D1E3 0001","8017D1E7 0001","8017D1EB 0001"],"options":null},"Multi\\Corridors\\Have All\\Weapons\\Player 2":{"note":"","data":["8017D52B 0001","8017D52F 0001","8017D533 0001","8017D537 0001","8017D53B 0001","8017D53F 0001","8017D543 0001","8017D547 0001","8017D54B 0001","8017D54F 0001"],"options":null},"Multi\\Corridors\\Infinite\\Ammo\\Player 1":{"note":"","data":["8017D1E7 0063","8017D1F3 0063","8017D1F7 0063","8017D1FB 0063","8017D1FF 0063","8017D203 0063"],"options":null},"Multi\\Corridors\\Infinite\\Ammo\\Player 2":{"note":"","data":["8017D553 0063","8017D557 0063","8017D55B 0063","8017D55F 0063","8017D567 0063"],"options":null},"Multi\\Dying Halls\\Have All\\Weapons\\Player 1":{"note":"","data":["801BF937 0001","801BF93B 0001","801BF93F 0001","801BF943 0001","801BF947 0001","801BF94B 0001","801BF94F 0001","801BF953 0001","801BF957 0001","801BF95B 0001"],"options":null},"Multi\\Dying Halls\\Have All\\Weapons\\Player 2":{"note":"","data":["801BFC9B 0001","801BFC9F 0001","801BFCA3 0001","801BFCA7 0001","801BFCAB 0001","801BFCAF 0001","801BFCB3 0001","801BFCB7 0001","801BFCBB 0001","801BFCBF 0001"],"options":null},"Multi\\Dying Halls\\Infinite\\Ammo\\Player 1":{"note":"","data":["801BF95F 0063","801BF963 0063","801BF967 0063","801BF96B 0063","801BF96F 0063","801BF973 0063"],"options":null},"Multi\\Dying Halls\\Infinite\\Ammo\\Player 2":{"note":"","data":["801BFCC3 0063","801BFCC7 0063","801BFCCB 0063","801BFCCF 0063","801BFCD3 0063","801BFCD7 0063"],"options":null},"Multi\\Empty Space\\Have All\\Weapons\\Player 1":{"note":"","data":["80179B27 0001","80179B2B 0001","80179B2F 0001","80179B33 0001","80179B37 0001","80179B3B 0001","80179B3F 0001","80179B43 0001","80179B47 0001","80179B4B 0001"],"options":null},"Multi\\Empty Space\\Have All\\Weapons\\Player 2":{"note":"","data":["80179E8B 0001","80179E8F 0001","80179E93 0001","80179E97 0001","80179E9B 0001","80179E9F 0001","80179EA3 0001","80179EA7 0001","80179EAB 0001","80179EAF 0001"],"options":null},"Multi\\Empty Space\\Infinite\\Ammo\\Player 1":{"note":"","data":["80179B4F 0063","80179B53 0063","80179B57 0063","80179B5B 0063","80179B5F 0063","80179B63 0063"],"options":null},"Multi\\Empty Space\\Infinite\\Ammo\\Player 2":{"note":"","data":["80179EB3 0063","80179EB7 0063","80179EBB 0063","80179EBF 0063","80179EC3 0063","80179EC7 0063"],"options":null},"Multi\\Fortress\\Have All\\Weapons\\Player 1":{"note":"","data":["8017D617 0001","8017D61B 0001","8017D61F 0001","8017D623 0001","8017D627 0001","8017D62B 0001","8017D62F 0001","8017D633 0001","8017D637 0001","8017D63B 0001"],"options":null},"Multi\\Fortress\\Have All\\Weapons\\Player 2":{"note":"","data":["8017D97B 0001","8017D97F 0001","8017D983 0001","8017D987 0001","8017D98B 0001","8017D98F 0001","8017D993 0001","8017D997 0001","8017D99B 0001","8017D99F 0001"],"options":null},"Multi\\Fortress\\Infinite\\Ammo\\Player 1":{"note":"","data":["8017D63F 0063","8017D643 0063","8017D647 0063","8017D64B 0063","8017D64F 0063","8017D653 0063"],"options":null},"Multi\\Fortress\\Infinite\\Ammo\\Player 2":{"note":"","data":["8017D9A3 0063","8017D9A7 0063","8017D9AB 0063","8017D9AF 0063","8017D9B3 0063","8017D9B7 0063"],"options":null},"Multi\\Mad Dash\\Have All\\Weapons\\Player 1":{"note":"","data":["801AE9A7 0001","801AE9AB 0001","801AE9AF 0001","801AE9B3 0001","801AE9B7 0001","801AE9BB 0001","801AE9BF 0001","801AE9C3 0001","801AE9C7 0001","801AE9CB 0001"],"options":null},"Multi\\Mad Dash\\Have All\\Weapons\\Player 2":{"note":"","data":["801AED0B 0001","801AED0F 0001","801AED13 0001","801AED17 0001","801AED1B 0001","801AED1F 0001","801AED23 0001","801AED27 0001","801AED2B 0001","801AED2F 0001"],"options":null},"Multi\\Mad Dash\\Infinite\\Ammo\\Player 1":{"note":"","data":["801AE9CF 0063","801AE9D3 0063","801AE9D7 0063","801AE9DB 0063","801AE9DF 0063","801AE9E3 0063"],"options":null},"Multi\\Mad Dash\\Infinite\\Ammo\\Player 2":{"note":"","data":["801AED33 0063","801AED37 0063","801AED3B 0063","801AED3F 0063","801AED43 0063","801AED47 0063"],"options":null},"Multi\\Overflow\\Have All\\Weapons\\Player 1":{"note":"","data":["80197907 0001","8019790B 0001","8019790F 0001","80197913 0001","80197917 0001","8019791B 0001","8019791F 0001","80197923 0001","80197927 0001","8019792B 0001"],"options":null},"Multi\\Overflow\\Have All\\Weapons\\Player 2":{"note":"","data":["80197C6B 0001","80197C6F 0001","80197C73 0001","80197C77 0001","80197C7B 0001","80197C7F 0001","80197C83 0001","80197C87 0001","80197C8B 0001","80197C8F 0001"],"options":null},"Multi\\Overflow\\Infinite\\Ammo\\Player 1":{"note":"","data":["8019792F 0063","80197933 0063","80197937 0063","8019793B 0063","8019793F 0063","80197943 0063"],"options":null},"Multi\\Overflow\\Infinite\\Ammo\\Player 2":{"note":"","data":["80197C93 0063","80197C97 0063","80197C9B 0063","80197C9F 0063","80197CA3 0063","80197CA7 0063"],"options":null},"Multi\\Twists\\Have All\\Weapons\\Player 1":{"note":"","data":["801ABE47 0001","801ABE4B 0001","801ABE4F 0001","801ABE53 0001","801ABE57 0001","801ABE5B 0001","801ABE5F 0001","801ABE63 0001","801ABE67 0001","801ABE6B 0001"],"options":null},"Multi\\Twists\\Have All\\Weapons\\Player 2":{"note":"","data":["801AC1AB 0001","801AC1AF 0001","801AC1B3 0001","801AC1B7 0001","801AC1BB 0001","801AC1BF 0001","801AC1C3 0001","801AC1C7 0001","801AC1CB 0001","801AC1CF 0001"],"options":null},"Multi\\Twists\\Infinite\\Ammo\\Player 1":{"note":"","data":["801ABE6F 0063","801ABE73 0063","801ABE77 0063","801ABE7B 0063","801ABE7F 0063","801ABE83 0063"],"options":null},"Multi\\Twists\\Infinite\\Ammo\\Player 2":{"note":"","data":["801AC1D3 0063","801AC1D7 0063","801AC1DB 0063","801AC1DF 0063","801AC1E3 0063","801AC1E7 0063"],"options":null},"Multi\\War Room\\Have All\\Weapons\\Player 1":{"note":"","data":["801A2E57 0001","801A2E5B 0001","801A2E5F 0001","801A2E63 0001","801A2E67 0001","801A2E6B 0001","801A2E6F 0001","801A2E73 0001","801A2E77 0001","801A2E7B 0001"],"options":null},"Multi\\War Room\\Have All\\Weapons\\Player 2":{"note":"","data":["801A31BB 0001","801A31BF 0001","801A31C3 0001","801A31C7 0001","801A31CB 0001","801A31CF 0001","801A31D3 0001","801A31D7 0001","801A31DB 0001","801A31DF 0001"],"options":null},"Multi\\War Room\\Infinite\\Ammo\\Player 1":{"note":"","data":["801A2E7F 0063","801A2E83 0063","801A2E87 0063","801A2E8B 0063","801A2E8F 0063","801A2E93 0063"],"options":null},"Multi\\War Room\\Infinite\\Ammo\\Player 2":{"note":"","data":["801A31E3 0063","801A31E7 0063","801A31EB 0063","801A31EF 0063","801A31F3 0063","801A31F7 0063"],"options":null},"The Ultimate":{"note":"The Ultimate Gives you on Solo Play Infinite Health, Infinite Armor, All Guns, and Infinite Ammo On all Levels","data":["8104AD2C 0800","8104AD2E 0018","81000060 8E30","81000062 0068","81000064 241B","81000066 03E7","81000068 AE1B","8100006A 0030","8100006C AC9B","8100006E 0204","81000070 A219","81000072 004B","81000074 A219","81000076 004C","81000078 1000","8100007A 0005","8100007C A219","8100007E 0050","50000604 0000","81000090 A219","50000604 0004","81000092 0054","50000504 0000","810000A8 AE1B","50000504 0004","810000AA 006C","810000BC 0801","810000BE 2B4D","810000C0 AE1B","810000C2 0080"],"options":null}},"BDF9766D-BD068D70-C:45":{"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Can't Be Counted Out":{"note":"","data":["D0296E4D 0029","81296ECE 0384"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Can't Be Pinned":{"note":"","data":["D0296E4D 0029","81296F5A FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Infinite Health":{"note":"","data":["D0296E4D 0029","81296FD0 0000","D0296E4D 0029","81296FD2 0000"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Instant Recovery":{"note":"","data":["D0296E4D 0029","8129703A FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Invincible":{"note":"","data":["D0296E4D 0029","8129702E FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Super Speed":{"note":"","data":["D0296E4D 0029","81297032 FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Super Stamina":{"note":"","data":["D0296E4D 0029","81297036 FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Super Strength":{"note":"","data":["D0296E4D 0029","8129702A FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Can't Be Counted Out":{"note":"","data":["D0296E4D 0029","8129816E 0384"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Can't Be Pinned":{"note":"","data":["D0296E4D 0029","812981FA FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Infinite Health":{"note":"","data":["D0296E4D 0029","81298270 0000","D0296E4D 0029","81298272 0000"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Instant Recovery":{"note":"","data":["D0296E4D 0029","812982DA FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Invincible":{"note":"","data":["D0296E4D 0029","812982CE FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Super Speed":{"note":"","data":["D0296E4D 0029","812982D2 FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Super Stamina":{"note":"","data":["D0296E4D 0029","812982D6 FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Super Strength":{"note":"","data":["D0296E4D 0029","812982CA FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Can't Be Counted Out":{"note":"","data":["D0296C3D 0029","81296CBE 0384"],"options":null},"3 Way Dance Mode\\Player 1\\Can't Be Pinned":{"note":"","data":["D0296C3D 0029","81296D4A FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Infinite Health":{"note":"","data":["D0296C3D 0029","81296DC0 0000","D0296C3D 0029","81296DC2 0000"],"options":null},"3 Way Dance Mode\\Player 1\\Instant Recovery":{"note":"","data":["D0296C3D 0029","81296E2A FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Invincible":{"note":"","data":["D0296C3D 0029","81296E1E FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Super Speed":{"note":"","data":["D0296C3D 0029","81296E22 FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Super Stamina":{"note":"","data":["D0296C3D 0029","81296E26 FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Super Strength":{"note":"","data":["D0296C3D 0029","81296E1A FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Can't Be Counted Out":{"note":"","data":["D0296C3D 0029","81297F5E 0384"],"options":null},"3 Way Dance Mode\\Player 2\\Can't Be Pinned":{"note":"","data":["D0296C3D 0029","81297FEA FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Infinite Health":{"note":"","data":["D0296C3D 0029","81298060 0000","D0296C3D 0029","81298062 0000"],"options":null},"3 Way Dance Mode\\Player 2\\Instant Recovery":{"note":"","data":["D0296C3D 0029","812980CA FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Invincible":{"note":"","data":["D0296C3D 0029","812980BE FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Super Speed":{"note":"","data":["D0296C3D 0029","812980C2 FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Super Stamina":{"note":"","data":["D0296C3D 0029","812980C6 FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Super Strength":{"note":"","data":["D0296C3D 0029","812980BA FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Can't Be Counted Out":{"note":"","data":["D0296C3D 0029","812991FE 0384"],"options":null},"3 Way Dance Mode\\Player 3\\Can't Be Pinned":{"note":"","data":["D0296C3D 0029","8129928A FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Infinite Health":{"note":"","data":["D0296C3D 0029","81299300 0000","D0296C3D 0029","81299302 0000"],"options":null},"3 Way Dance Mode\\Player 3\\Instant Recovery":{"note":"","data":["D0296C3D 0029","8129936A FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Invincible":{"note":"","data":["D0296C3D 0029","8129935E FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Super Speed":{"note":"","data":["D0296C3D 0029","81299362 FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Super Stamina":{"note":"","data":["D0296C3D 0029","81299366 FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Super Strength":{"note":"","data":["D0296C3D 0029","8129935A FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Can't Be Counted Out":{"note":"","data":["D029A98D 0029","8129AA0E 0384"],"options":null},"All Tag Team Modes\\Player 1\\Can't Be Pinned":{"note":"","data":["D029A98D 0029","8129AA9A FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Infinite Health":{"note":"","data":["D029A98D 0029","8129AB10 0000","D029A98D 0029","8129AB12 0000"],"options":null},"All Tag Team Modes\\Player 1\\Instant Recovery":{"note":"","data":["D029A98D 0029","8129AB7A FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Invincible":{"note":"","data":["D029A98D 0029","8129AB6E FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Super Speed":{"note":"","data":["D029A98D 0029","8129AB72 FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Super Stamina":{"note":"","data":["D029A98D 0029","8129AB76 FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Super Strength":{"note":"","data":["D029A98D 0029","8129AB6A FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Can't Be Counted Out":{"note":"","data":["D029A98D 0029","8129BCAE 0384"],"options":null},"All Tag Team Modes\\Player 2\\Can't Be Pinned":{"note":"","data":["D029A98D 0029","8129BD3A FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Infinite Health":{"note":"","data":["D029A98D 0029","8129BDB0 0000","D029A98D 0029","8129BDB2 0000"],"options":null},"All Tag Team Modes\\Player 2\\Instant Recovery":{"note":"","data":["D029A98D 0029","8129BE1A FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Invincible":{"note":"","data":["D029A98D 0029","8129BE0E FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Super Speed":{"note":"","data":["D029A98D 0029","8129BE12 FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Super Stamina":{"note":"","data":["D029A98D 0029","8129BE16 FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Super Strength":{"note":"","data":["D029A98D 0029","8129BE0A FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Can't Be Counted Out":{"note":"","data":["D029A98D 0029","8129CF4E 0384"],"options":null},"All Tag Team Modes\\Player 3\\Can't Be Pinned":{"note":"","data":["D029A98D 0029","8129CFDA FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Infinite Health":{"note":"","data":["D029A98D 0029","8129D050 0000","D029A98D 0029","8129D052 0000"],"options":null},"All Tag Team Modes\\Player 3\\Instant Recovery":{"note":"","data":["D029A98D 0029","8129D0BA FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Invincible":{"note":"","data":["D029A98D 0029","8129D0AE FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Super Speed":{"note":"","data":["D029A98D 0029","8129D0B2 FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Super Stamina":{"note":"","data":["D029A98D 0029","8129D0B6 FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Super Strength":{"note":"","data":["D029A98D 0029","8129D0AA FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Can't Be Counted Out":{"note":"","data":["D029A98D 0029","8129E1EE 0384"],"options":null},"All Tag Team Modes\\Player 4\\Can't Be Pinned":{"note":"","data":["D029A98D 0029","8129E27A FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Infinite Health":{"note":"","data":["D029A98D 0029","8129E2F0 0000","D029A98D 0029","8129E2F2 0000"],"options":null},"All Tag Team Modes\\Player 4\\Instant Recovery":{"note":"","data":["D029A98D 0029","8129E35A FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Invincible":{"note":"","data":["D029A98D 0029","8129E34E FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Super Speed":{"note":"","data":["D029A98D 0029","8129E352 FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Super Stamina":{"note":"","data":["D029A98D 0029","8129E356 FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Super Strength":{"note":"","data":["D029A98D 0029","8129E34A FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Can't Be Counted Out":{"note":"","data":["D029A66D 0029","8129A6EE 0384"],"options":null},"Battle Royal Mode\\Player 1\\Can't Be Pinned":{"note":"","data":["D029A66D 0029","8129A77A FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Infinite Health":{"note":"","data":["D029A66D 0029","8129A7F0 0000","D029A66D 0029","8129A7F2 0000"],"options":null},"Battle Royal Mode\\Player 1\\Instant Recovery":{"note":"","data":["D029A66D 0029","8129A85A FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Invincible":{"note":"","data":["D029A66D 0029","8129A84E FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Super Speed":{"note":"","data":["D029A66D 0029","8129A852 FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Super Stamina":{"note":"","data":["D029A66D 0029","8129A856 FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Super Strength":{"note":"","data":["D029A66D 0029","8129A84A FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Can't Be Counted Out":{"note":"","data":["D029A66D 0029","8129B98E 0384"],"options":null},"Battle Royal Mode\\Player 2\\Can't Be Pinned":{"note":"","data":["D029A66D 0029","8129BA1A FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Infinite Health":{"note":"","data":["D029A66D 0029","8129BA90 0000","D029A66D 0029","8129BA92 0000"],"options":null},"Battle Royal Mode\\Player 2\\Instant Recovery":{"note":"","data":["D029A66D 0029","8129BAFA FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Invincible":{"note":"","data":["D029A66D 0029","8129BAEE FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Super Speed":{"note":"","data":["D029A66D 0029","8129BAF2 FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Super Stamina":{"note":"","data":["D029A66D 0029","8129BAF6 FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Super Strength":{"note":"","data":["D029A66D 0029","8129BAEA FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Can't Be Counted Out":{"note":"","data":["D029A66D 0029","8129CC2E 0384"],"options":null},"Battle Royal Mode\\Player 3\\Can't Be Pinned":{"note":"","data":["D029A66D 0029","8129CCBA FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Infinite Health":{"note":"","data":["D029A66D 0029","8129CD30 0000","D029A66D 0029","8129CD32 0000"],"options":null},"Battle Royal Mode\\Player 3\\Instant Recovery":{"note":"","data":["D029A66D 0029","8129CD9A FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Invincible":{"note":"","data":["D029A66D 0029","8129CD8E FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Super Speed":{"note":"","data":["D029A66D 0029","8129CD92 FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Super Stamina":{"note":"","data":["D029A66D 0029","8129CD96 FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Super Strength":{"note":"","data":["D029A66D 0029","8129CD8A FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Can't Be Counted Out":{"note":"","data":["D029A66D 0029","8129DECE 0384"],"options":null},"Battle Royal Mode\\Player 4\\Can't Be Pinned":{"note":"","data":["D029A66D 0029","8129DF5A FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Infinite Health":{"note":"","data":["D029A66D 0029","8129DFD0 0000","D029A66D 0029","8129DFD2 0000"],"options":null},"Battle Royal Mode\\Player 4\\Instant Recovery":{"note":"","data":["D029A66D 0029","8129E03A FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Invincible":{"note":"","data":["D029A66D 0029","8129E02E FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Super Speed":{"note":"","data":["D029A66D 0029","8129E032 FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Super Stamina":{"note":"","data":["D029A66D 0029","8129E036 FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Super Strength":{"note":"","data":["D029A66D 0029","8129E02A FFFF"],"options":null},"Character Modifier\\Player 1":{"note":"","data":["80122773 00??"],"options":{"Beulah":"1C","Cyrus the Virus":"0D","Excel":"36","Gertner":"15","H Slash":"2A","J Styles":"30","Jeff Jones":"19","Louie":"2E","Mack Daddy":"0F","Mad Goat":"1D","Nurse":"1F","Santoro":"25","Skull":"29","Sound Guy":"27","Taz":"32","The Sheik":"28","Tommy Rich":"22","Trainer":"33"}},"Character Modifier\\Player 2":{"note":"","data":["80122783 00??"],"options":{"Beulah":"1C","Cyrus the Virus":"0D","Excel":"36","Gertner":"15","H Slash":"2A","J Styles":"30","Jeff Jones":"19","Louie":"2E","Mack Daddy":"0F","Mad Goat":"1D","Nurse":"1F","Santoro":"25","Skull":"29","Sound Guy":"27","Taz":"32","The Sheik":"28","Tommy Rich":"22","Trainer":"33"}},"Create A Wrestler\\Infinite Attribute Points":{"note":"","data":["8115DD52 0000"],"options":null},"Create A Wrestler\\Infinite Move %":{"note":"","data":["80131600 0024"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Can't Be Counted Out":{"note":"","data":["D029A87D 0029","8129A8FE 0384"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Can't Be Pinned":{"note":"","data":["D029A87D 0029","8129A98A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Infinite Health":{"note":"","data":["D029A87D 0029","8129AA00 0000","D029A87D 0029","8129AA02 0000"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Instant Recovery":{"note":"","data":["D029A87D 0029","8129AA6A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Invincible":{"note":"","data":["D029A87D 0029","8129AA5E FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Super Speed":{"note":"","data":["D029A87D 0029","8129AA62 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Super Stamina":{"note":"","data":["D029A87D 0029","8129AA66 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Super Strength":{"note":"","data":["D029A87D 0029","8129AA5A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Can't Be Counted Out":{"note":"","data":["D029A87D 0029","8129BB9E 0384"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Can't Be Pinned":{"note":"","data":["D029A87D 0029","8129BC2A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Infinite Health":{"note":"","data":["D029A87D 0029","8129BCA0 0000","D029A87D 0029","8129BCA2 0000"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Instant Recovery":{"note":"","data":["D029A87D 0029","8129BD0A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Invincible":{"note":"","data":["D029A87D 0029","8129BCFE FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Super Speed":{"note":"","data":["D029A87D 0029","8129BD02 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Super Stamina":{"note":"","data":["D029A87D 0029","8129BD06 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Super Strength":{"note":"","data":["D029A87D 0029","8129BCFA FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Can't Be Counted Out":{"note":"","data":["D029A87D 0029","8129CE3E 0384"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Can't Be Pinned":{"note":"","data":["D029A87D 0029","8129CECA FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Infinite Health":{"note":"","data":["D029A87D 0029","8129CF40 0000","D029A87D 0029","8129CF42 0000"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Instant Recovery":{"note":"","data":["D029A87D 0029","8129CFAA FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Invincible":{"note":"","data":["D029A87D 0029","8129CF9E FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Super Speed":{"note":"","data":["D029A87D 0029","8129CFA2 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Super Stamina":{"note":"","data":["D029A87D 0029","8129CFA6 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Super Strength":{"note":"","data":["D029A87D 0029","8129CF9A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Can't Be Counted Out":{"note":"","data":["D029A87D 0029","8129E0DE 0384"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Can't Be Pinned":{"note":"","data":["D029A87D 0029","8129E16A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Infinite Health":{"note":"","data":["D029A87D 0029","8129E1E0 0000","D029A87D 0029","8129E1E2 0000"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Instant Recovery":{"note":"","data":["D029A87D 0029","8129E24A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Invincible":{"note":"","data":["D029A87D 0029","8129E23E FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Super Speed":{"note":"","data":["D029A87D 0029","8129E242 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Super Stamina":{"note":"","data":["D029A87D 0029","8129E246 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Super Strength":{"note":"","data":["D029A87D 0029","8129E23A FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Can't Be Counted Out":{"note":"","data":["D02931FD 0029","8129327E 0384"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Can't Be Pinned":{"note":"","data":["D02931FD 0029","8129330A FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Infinite Health":{"note":"","data":["D02931FD 0029","81293380 0000","D02931FD 0029","81293382 0000"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Instant Recovery":{"note":"","data":["D02931FD 0029","812933EA FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Invincible":{"note":"","data":["D02931FD 0029","812933DE FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Super Speed":{"note":"","data":["D02931FD 0029","812933E2 FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Super Stamina":{"note":"","data":["D02931FD 0029","812933E6 FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Super Strength":{"note":"","data":["D02931FD 0029","812933DA FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Can't Be Counted Out":{"note":"","data":["D02931FD 0029","8129451E 0384"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Can't Be Pinned":{"note":"","data":["D02931FD 0029","812945AA FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Infinite Health":{"note":"","data":["D02931FD 0029","81294620 0000","D02931FD 0029","81294622 0000"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Instant Recovery":{"note":"","data":["D02931FD 0029","8129468A FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Invincible":{"note":"","data":["D02931FD 0029","8129467E FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Super Speed":{"note":"","data":["D02931FD 0029","81294682 FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Super Stamina":{"note":"","data":["D02931FD 0029","81294686 FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Super Strength":{"note":"","data":["D02931FD 0029","8129467A FFFF"],"options":null}},"BE5973E0-89B0EDB8-C:45":{"100.000 Sponsor Credits \u0026 950 Championship Points In Support Van":{"note":"You Also Have Access To All Cars, Tracks \u0026 Extra Features","data":["80030D82 00F3"],"options":null},"Always 1st":{"note":"","data":["810318E2 0001"],"options":null},"Infinite Time \u0026 Always Place 1st":{"note":"Championship Mode Only.","data":["810318EE 0001"],"options":null},"Max Sponsor Credits":{"note":"","data":["81033816 270F"],"options":null},"Max Sponsor Points \u0026 Extra Cars \u0026 Tracks":{"note":"This code gives you all tracks and cars. once you activate this code, You must make an internal save (Native) in options \u0026 then load that internal save, \u0026 go to Drivers Board to pick your car, Then to Race to pick your track","data":["81033816 270F"],"options":null},"No Cones Hit":{"note":"In ARSG Rally School","data":["81031CEA 0000"],"options":null},"No Damage Or Failures":{"note":"","data":["81030D76 0001"],"options":null},"No Navigator":{"note":"","data":["80032677 0000"],"options":null}},"BE76EDFF-20452D09-C:45":{"Away Team\\Infinite Time Outs":{"note":"","data":["8004C62E 0003"],"options":null},"Away Team\\No Time Outs":{"note":"","data":["8004C62E 0000"],"options":null},"Home Team\\Infinite Time Outs":{"note":"","data":["8004C0B6 0003"],"options":null},"Home Team\\No Time Outs":{"note":"","data":["8004C0B6 0000"],"options":null},"Infinite\\Character Creation Points":{"note":"","data":["81072F30 015E"],"options":null},"Infinite\\Time to Choose Play":{"note":"","data":["81080152 0028"],"options":null},"Max\\Accuracy":{"note":"","data":["8106FDB8 0064"],"options":null},"Max\\Catch":{"note":"","data":["8106FDC2 0064"],"options":null},"Max\\Endurance":{"note":"","data":["8106FDC4 0064"],"options":null},"Max\\Hands":{"note":"","data":["8106FDBE 0064"],"options":null},"Max\\Range":{"note":"","data":["8106FDBA 0064"],"options":null},"Max\\Scramble":{"note":"","data":["8106FDBC 0064"],"options":null},"Max\\Speed":{"note":"","data":["8106FDC0 0064"],"options":null}},"BEBAB677-51B0B5E4-C:50":{"100.000 Sponsor Credits \u0026 950 Championship Points In Support Van":{"note":"You Also Have Access To All Cars, Tracks \u0026 Extra Features","data":["80031BB3 00F3"],"options":null},"Always 1st":{"note":"","data":["80032713 0001"],"options":null},"Freeze Timer":{"note":"","data":["8003271F 0000"],"options":null},"Infinite Cash":{"note":"","data":["803D004E 4000"],"options":null},"Max Sponsor Credits":{"note":"","data":["803D27E2 0010","803D27E4 0001"],"options":null},"No Cones Hit":{"note":"In ARSG Rally School","data":["80032743 0000","80032B1B 0000"],"options":null},"No Damage Or Failures":{"note":"","data":["80031BA7 0001"],"options":null},"No Navigator":{"note":"","data":["80032677 0000"],"options":null}},"BFA526B4-0691E430-C:45":{"All 52 Gold Gems Collected":{"note":"","data":["80171B10 0003","80171B11 007E","80171B12 00FF","80171B13 00EF","80171B14 00FF","80171B15 007F","80171B16 00FF","80171B17 00FC"],"options":null},"All Stages \u0026 Chapters Unlocked":{"note":"","data":["80171B18 003B"],"options":null},"Infinite Health\\Marina":{"note":"","data":["81057458 03E8"],"options":null},"Infinite Health\\Teran":{"note":"","data":["810F4270 03E8"],"options":null},"Infinite\\Max Red Gems":{"note":"","data":["81178136 270F"],"options":null},"Level Select":{"note":"To access this anytime during game, press L+R+Z to enable the menu. Press D-Pad Up / Down to move through the menu, D-Pad Left / Right to change level digits and then press Start to enter level. Don not do this whhile in pause mode (Start Button Pause) or the game will freeze.","data":["D10BE538 2030","800BE4F1 0004"],"options":null}},"BFE23884-EF48EAAF-C:45":{"All Levels Open":{"note":"","data":["50002001 0000","803F7DE0 0001"],"options":null},"Always\\Raining":{"note":"","data":["803F2D6F 0005"],"options":null},"Always\\Snowing":{"note":"","data":["803F2D6D 0005"],"options":null},"Debug Mode":{"note":"","data":["803F642F 0001"],"options":null},"Have All\\Power Cells":{"note":"","data":["803F2D3D 000F"],"options":null},"Have All\\Secret Mini Game":{"note":"","data":["803F643D 0001"],"options":null},"High Score":{"note":"","data":["813F2D30 007F","813F2D32 FFFF"],"options":null},"Infinite Health\\Ship\\in Asteroids Level":{"note":"","data":["803E4CDB 0003"],"options":null},"Infinite\\Ability\\Fox":{"note":"","data":["811DF8F4 0400"],"options":null},"Infinite\\Ability\\Heli-Rabbit":{"note":"","data":["811DF14C 0400"],"options":null},"Infinite\\Ability\\Husky":{"note":"","data":["811DED78 0400"],"options":null},"Infinite\\Ability\\Mouse":{"note":"","data":["811DFCC8 0400"],"options":null},"Infinite\\Ability\\Penguin":{"note":"","data":["811E009C 0400"],"options":null},"Infinite\\Ability\\Rabbit":{"note":"","data":["811DE5D0 0400"],"options":null},"Infinite\\Ability\\Racing Dog":{"note":"","data":["811DF14C 0400"],"options":null},"Infinite\\Ability\\Racing Fox":{"note":"","data":["811DF8F4 0082"],"options":null},"Infinite\\Ability\\Ram":{"note":"","data":["811DE5D0 0400"],"options":null},"Infinite\\Ability\\Sheep":{"note":"","data":["811DE9A0 0400"],"options":null},"Infinite\\Ability\\Springy Thing":{"note":"","data":["811DF14C 0400"],"options":null},"Infinite\\Ability\\Walrus":{"note":"","data":["811DE5D0 0400"],"options":null},"Infinite\\Boost\\Fox":{"note":"","data":["811DF8F0 0400"],"options":null},"Infinite\\Boost\\Mouse":{"note":"","data":["811DFCC4 0400"],"options":null},"Infinite\\Boost\\Racing Dog":{"note":"","data":["811DF148 0400"],"options":null},"Infinite\\Boost\\Racing Fox":{"note":"","data":["811DF8F0 0400"],"options":null},"Infinite\\Boost\\Walrus":{"note":"","data":["811DED74 0400"],"options":null},"Infinite\\Energy\\Dog":{"note":"","data":["811DFF04 0082"],"options":null},"Infinite\\Energy\\EVO (Chip)":{"note":"","data":["801DE065 0082"],"options":null},"Infinite\\Energy\\Evo\\In Bonus Level 4":{"note":"","data":["801DEFB5 0082"],"options":null},"Infinite\\Energy\\Evo\\in Bonus Level 1 \u0026 Final Level":{"note":"","data":["801DE439 0082"],"options":null},"Infinite\\Energy\\Fox":{"note":"","data":["811DF75C 0082"],"options":null},"Infinite\\Energy\\Heli-Rabbit":{"note":"","data":["811DEFB4 0082"],"options":null},"Infinite\\Energy\\Mouse,Hyena":{"note":"","data":["801DFB31 0082"],"options":null},"Infinite\\Energy\\Normal Penguin":{"note":"","data":["811DFF04 0082"],"options":null},"Infinite\\Energy\\Normal Rabbit":{"note":"","data":["811DE438 0082"],"options":null},"Infinite\\Energy\\Racing Dog":{"note":"","data":["811DEFB4 0082"],"options":null},"Infinite\\Energy\\Racing Fox":{"note":"","data":["811DF7FC 0082"],"options":null},"Infinite\\Energy\\Ram":{"note":"","data":["811DE438 0082"],"options":null},"Infinite\\Energy\\Sheep":{"note":"","data":["811DEBE0 0082"],"options":null},"Infinite\\Energy\\Snow Husky":{"note":"","data":["811DFF04 0082"],"options":null},"Infinite\\Energy\\Springy Thing":{"note":"","data":["811DEFB4 0082"],"options":null}},"BFF7B1C2-AEBF148E-C:4A":{"Infinite\\Bells":{"note":"","data":["800F38C3 00??"],"options":{"99 Bells":"63","No Bells":"00"}},"Infinite\\Energy":{"note":"","data":["800FB897 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["800F38C5 000A"],"options":null}},"C00CA948-8E60D34B-C:45":{"Max Or No Score\\Player 1":{"note":"","data":["81104772 ????"],"options":{"Max Score":"FFFF","No Score":"0000"}},"Max Or No Score\\Player 2":{"note":"","data":["81104776 ????"],"options":{"Max Score":"FFFF","No Score":"0000"}},"Max Or No Score\\Player 3":{"note":"","data":["8110477A ????"],"options":{"Max Score":"FFFF","No Score":"0000"}},"Max Or No Score\\Player 4":{"note":"","data":["8110477E ????"],"options":{"Max Score":"FFFF","No Score":"0000"}}},"C0C85046-61051B05-C:49":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2712 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE03F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802026F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE255 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FCB85 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFF6D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802027A5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DA0BD 0001"],"options":null}},"C0F6DB17-80E0D532-C:44":{"Enable Cheat Select":{"note":"","data":["80115933 00??"],"options":{"All Weapons With Fast Run":"42","All Weapons With Infinite Ammo":"06","Fast run":"40","Have All Weapons":"02","Infinite Ammo":"04","Infinite Ammo With Fast Run":"44","Invincible":"01","Invincible With All Weapons And Fast Run":"43","Invincible With All Weapons and Ammo and Fast Run":"47","Invincible With Fast Run":"41","Invincible With Infinite Ammo and All Weapons":"07"}},"Enable In-Game Cheat Menu \u0026 Level Select":{"note":"","data":["81115936 014F"],"options":null},"Sound Select\\Music Volume":{"note":"","data":["80115944 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"Sound Select\\SFX Volume":{"note":"","data":["80115945 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"[Press L For Levitate]":{"note":"","data":["D10F7550 0020","816FE35C 43D5"],"options":null}},"C151AD61-280FFF22-C:45":{"Have 99 Coins":{"note":"","data":["810BB55E 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C7EC2 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BB54C 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BB556 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BB55A 0009"],"options":null}},"C16C421B-A21580F7-C:45":{"Have All\\Levels and Bonus Stages Unlocked":{"note":"Press start in Gyro's Lab and then resume game to see all open","data":["801D72CC 00FF","801D72CD 00FF","801D72CE 00FF","801D72CF 00FF","801D72D3 00FF"],"options":null},"Have All\\Time Attack \u0026 Toy Hunting Comnpleated (All Levels)":{"note":"Press start in Gyro's Lab and then resume game to see all open","data":["801D72D8 00FF","801D72D9 00FF","801D72DA 00FF","801D72DB 00FF","801D72DC 00FF","801D72DD 00FF","801D72DE 00FF","801D72DF 00FF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["801D72AE 0063"],"options":null},"Infinite\\99 Stars":{"note":"","data":["801D72AF 0063"],"options":null},"Infinite\\Time\\Gladstones Time Attack":{"note":"","data":["801D72A7 00FF"],"options":null},"Infinite\\Time\\Nephews Toy Hunting":{"note":"","data":["801D72A3 0063"],"options":null},"Instant\\Carrier Box [Moon Walk] (Press L)":{"note":"Press and hold the L Button and you will run floating of any ledge slowing drifting down. If you keep pressing the A Button while Holding L it will act as a Moon Jump.","data":["D00CB2A1 0020","801C939F 0001"],"options":null},"Instant\\Hyperactive State [Invincible] (Press C-Right)":{"note":"","data":["D00CB2A1 0001","801CE616 0001"],"options":null},"Instant\\Rage Attack (Press C-Left)":{"note":"","data":["D00CB2A1 0002","801CE5BD 0001"],"options":null},"Widescreen":{"note":"","data":["81094100 2402","81094102 0190","81094124 2402","81094126 00E0","8107EFB4 03E0","8107EFB6 0008","8107EFB8 2402","8107EFBA 0001"],"options":null}},"C1D702BD-6D416547-C:4A":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D55E0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112CF0E 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800EB470 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D55C0 0001","50001701 0000","800D55C8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D5850 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D5889 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D55B9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D55BA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D55BB 0003"],"options":null}},"C2751D1A-F8C19BFF-C:50":{"Access Everything\\Start New Game":{"note":"","data":["50000502 0002","80204F3B 0013","50000502 0002","80204F42 0009","50000402 0002","80204F43 000A","80204F4B 000D","81204F4C 0E0F","81204F4E 0101","81204F5A 0100"],"options":null},"Have All Snowboards":{"note":"","data":["80204F3C 0001","81204F3E 0101","81204F40 0101"],"options":null},"Infinite Tools Options":{"note":"","data":["80206404 00??"],"options":{"Fan":"04","Frying Pan":"01","Ghost":"02","Invisible":"06","Rat Face":"08","Rock":"07","Rocket":"05","Super Ghost":"03","Super Rat Face":"09","Wings":"0A"}},"Infinite Weapons Options":{"note":"","data":["80206402 00??","80206403 0009"],"options":{"Bomb":"05","Freeze Shot":"03","Parachute":"02","Slap Stick":"01","Snowman":"04","Whirlwind":"06"}},"Max Coins":{"note":"","data":["8120639E 270F"],"options":null},"Max Money(Story Mode)":{"note":"","data":["81204EB0 0098","81204EB2 967F"],"options":null},"Open Extra Characters":{"note":"","data":["81204F4E 0101","80204F50 0001"],"options":null},"Trick Game 300 Points":{"note":"","data":["812065D2 012C"],"options":null}},"C29FF9E4-264BFE7D-C:45":{"Boris\\1-Hit Death":{"note":"","data":["D01543D5 0044","811543D4 0001"],"options":null},"Boris\\Infinite\\Health":{"note":"","data":["811543D4 0044"],"options":null},"Boris\\Infinite\\Lives":{"note":"","data":["811543D0 0063"],"options":null},"Boris\\Infinite\\Special":{"note":"","data":["811543DC 0044"],"options":null},"Boris\\Max Score":{"note":"","data":["81154404 000F","81154406 423F"],"options":null},"Curtis\\1-Hit Death":{"note":"","data":["D01541B9 0044","811541B8 0001"],"options":null},"Curtis\\Infinite\\Health":{"note":"","data":["811541B8 0044"],"options":null},"Curtis\\Infinite\\Lives":{"note":"","data":["811541B4 0063"],"options":null},"Curtis\\Infinite\\Special":{"note":"","data":["811541C0 0044"],"options":null},"Curtis\\Max Score":{"note":"","data":["811541E8 000F","811541EA 423F"],"options":null},"George\\1-Hit Death":{"note":"","data":["D015480D 0044","8115480C 0001"],"options":null},"George\\Infinite\\Health":{"note":"","data":["8115480C 0044"],"options":null},"George\\Infinite\\Lives":{"note":"","data":["81154808 0063"],"options":null},"George\\Infinite\\Special":{"note":"","data":["81154814 0044"],"options":null},"George\\Max Score":{"note":"","data":["8115483C 000F","8115483E 423F"],"options":null},"Infinite Time to Choose A Character":{"note":"","data":["8118CF9A 06CB"],"options":null},"Lizzie\\1-Hit Death":{"note":"","data":["D0154A29 0044","81154A28 0001"],"options":null},"Lizzie\\Infinite\\Health":{"note":"","data":["81154A28 0044"],"options":null},"Lizzie\\Infinite\\Lives":{"note":"","data":["81154A24 0063"],"options":null},"Lizzie\\Infinite\\Special":{"note":"","data":["81154A30 0044"],"options":null},"Lizzie\\Max Score":{"note":"","data":["81154A58 000F","81154A5A 423F"],"options":null},"Myukus Codes\\1-Hit Death":{"note":"","data":["D0154E61 0044","81154E60 0001"],"options":null},"Myukus Codes\\Infinite\\Health":{"note":"","data":["81154E60 0044"],"options":null},"Myukus Codes\\Infinite\\Lives":{"note":"","data":["81154E5C 0063"],"options":null},"Myukus Codes\\Infinite\\Special":{"note":"","data":["81154E68 0044"],"options":null},"Myukus Codes\\Max Score":{"note":"","data":["81154E90 000F","81154E92 423F"],"options":null},"Ralph\\1-Hit Death":{"note":"","data":["D0154C45 0044","81154C44 0001"],"options":null},"Ralph\\Infinite\\Health":{"note":"","data":["81154C44 0044"],"options":null},"Ralph\\Infinite\\Lives":{"note":"","data":["81154C40 0063"],"options":null},"Ralph\\Infinite\\Special":{"note":"","data":["81154C4C 0044"],"options":null},"Ralph\\Max Score":{"note":"","data":["81154C74 000F","81154C76 423F"],"options":null},"Ruby\\1-Hit Death":{"note":"","data":["D01545F1 0044","811545F0 0001"],"options":null},"Ruby\\Infinite\\Health":{"note":"","data":["811545F0 0044"],"options":null},"Ruby\\Infinite\\Lives":{"note":"","data":["811545EC 0063"],"options":null},"Ruby\\Infinite\\Special":{"note":"","data":["811545F8 0044"],"options":null},"Ruby\\Max Score":{"note":"","data":["81154620 000F","81154622 423F"],"options":null},"Unlock Cheat Menu":{"note":"","data":["810D5710 0001"],"options":null}},"C2E9AA9A-475D70AA-C:45":{"Beta Bottles Revenge Mode":{"note":"Bottles Revenge is a Beta mode from Banjo Tooie that the RWP team recently uncovered after an extraordinary amount of effort. Bottles the Spirit transforms into Bottles the Devil and posses enemies nearby and allows a second player hooked up to Pad 2 to play as that Posses character to try to foil Banjos Plans. As player one goes about its business, player two uses every enemy nearby to try to nab Banjo and take away some life. This mode is incredible, and you can control almost every enemy in the game: slot machines, flying creatures, uggers, zubbas...and this is just the beginning. (Congrats Rare Witch Project)","data":["8012B3F2 0001","800810C1 0002"],"options":null},"Disable LoD":{"note":"Makes nests and musical notes fully HD in addition to the stairs in Mayahem Temple leading to Targitzan's area.","data":null,"options":null},"Fly At Anytime":{"note":"","data":["81120010 240E","81120012 0001","81120014 2400","D1081084 0400","81120014 A08E","81120016 0605"],"options":null},"HD Shadows and Banjo Models":{"note":"Uses main models of Banjo,Kazooie,Mumbo and Clockwork Kazooie as their dynamic shadows and forces Banjo models (normal and dragon) to always use best LoD in order to avoid a glitch that would happen without that.","data":["D1117DEA 062B","81117DEA 062A","D1117DEE 0839","81117DEE 0838","D003F428 0080","810A62A4 0C14","D003F428 0080","810A62A6 0000","81500000 2404","81500002 0853","81500004 1464","81500006 000A","81500008 0000","8150000A 0000","8150000C 2404","8150000E 0010","81500010 1144","81500012 0004","81500014 0000","81500016 0000","81500018 2402","8150001A 062A","8150001C 1000","8150001E 0014","81500020 0000","81500022 0000","81500024 2402","81500026 0838","81500028 1000","8150002A 0011","8150002C 0000","8150002E 0000","81500030 2404","81500032 0855","81500034 1464","81500036 0004","81500038 0000","8150003A 0000","8150003C 2402","8150003E 061C","81500040 1000","81500042 000B","81500044 0000","81500046 0000","81500048 2404","8150004A 080A","8150004C 1464","8150004E 0004","81500050 0000","81500052 0000","81500054 2402","81500056 060E","81500058 1000","8150005A 0005","8150005C 0000","8150005E 0000","81500060 2404","81500062 062E","81500064 1464","81500066 0002","81500068 0000","8150006A 0000","8150006C 2402","8150006E 083A","81500070 0040","81500072 2025","81500074 0803","81500076 59D3","81500078 0000","8150007A 0000"],"options":null},"Have Most of the Game Finished":{"note":"Start a new game,when you appear in Spiral Mountain press Top D-Pad. Go to the menu and you will notice all eggs, all moves are available. All the jiggies have been collected. Simply Save and Restart.","data":["5000AC01 0000","80290000 00FF","8029002B 007F","80290063 00FB","80290073 005F","D1081084 0800","8112C770 8029","D1081084 0800","8112C772 0000"],"options":null},"Have\\All Moves":{"note":"Press Top D-pad,Do not use with Have\\All Moves \u0026 Dragon Kazooie Or Have\\Dragon Kazooie","data":["D1081084 0800","8112C770 8029","D1081084 0800","8112C772 0000","81290018 FFFF","8129001A FFFF","8129001C FFFF","8129001E FFFF"],"options":null},"Have\\All Moves \u0026 Dragon Kazooie":{"note":"Press Top D-pad,Do not use with either Have all Moves,Or Have Dragon Kazooie","data":["D1081084 0800","8112C770 8029","D1081084 0800","8112C772 0000","81290018 FFFF","8129001A FFFF","8129001C FFFF","8129001E FFFF","81290078 FFFF","8129007A FFFF"],"options":null},"Have\\Dragon Kazooie":{"note":"Press Top D-pad,Do not use with Have All Modes Or Have All Moves \u0026 Dragon Kazooie","data":["D1081084 0800","8112C770 8029","D1081084 0800","8112C772 0000","81290078 FFFF","8129007A FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["8112B052 42C8"],"options":null},"Infinite\\Eggs, Feathers, All Items":{"note":"","data":["810D1A60 3442","810D1A62 03E7"],"options":null},"Infinite\\Energy\\Banjo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B65F 000A","8011B660 000A"],"options":null},"Infinite\\Energy\\Banjo and Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B644 0A0A"],"options":null},"Infinite\\Energy\\Bee":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B653 000A","8011B654 000A"],"options":null},"Infinite\\Energy\\Detonator":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B66E 0A0A"],"options":null},"Infinite\\Energy\\Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B662 0A0A"],"options":null},"Infinite\\Energy\\Mumbo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B668 0A0A"],"options":null},"Infinite\\Energy\\Snowball":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B647 0005"],"options":null},"Infinite\\Energy\\Stony":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B659 000A","8011B65A 000A"],"options":null},"Infinite\\Energy\\Submarine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B665 000A","8011B666 000A"],"options":null},"Infinite\\Energy\\T-Rex Baby":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B67F 000A","8011B680 000A"],"options":null},"Infinite\\Energy\\Washing Machine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B656 0A0A"],"options":null},"Instant Warp\\Options\\Cauldron Keep":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Cauldron Keep":"015D","Colosseum kickball arena":"0180","Crazy Castle Stockade Jump the hoops multi":"017C","Crazy Castle Stockade balloon burst multi":"017B","Dodgems":"0186","Grunty Industries packing game":"017D","Gun chamber":"0160","Gun room still":"016A","The gatehouse":"015E","Tower of Tragedy Quiz":"015F"}},"Instant Warp\\Options\\Cloud Cuckoo Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Central cavern":"013A","Cloud Cuckoo Land 1":"0136","Cloud Cuckoo Land 2":"0161","Humba wumba's wigwam":"0140","Inside the cheesewedge":"0138","Inside the pot o gold":"013D","Inside the trashcan":"0137","Mingy jongo's skull":"013F","Mumbo's skull":"013E","Trash can mini":"0185","Zubba's nest":"0139","Zubba's nest multi":"0188"}},"Instant Warp\\Options\\Glitter Gulch Mine":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Canary cave":"00DB","Chuffy's cab":"00D0","Crushing shed":"00CB","Flooded caves":"00CC","Fuel depot":"00CA","Generator caverns":"00D3","Gloomy caverns":"00D2","Humba":"00E9","Inside chuffy's boiler boss":"00D1","Mine":"00C7","Mumbo's hut":"00D9","Mumbo's skull":"0171","Ordnance Storage entrance":"0163","Ordnance Storage game":"0164","Ordnance Storage game Multi":"0165","Ordnance storage":"00DC","Power hut":"00D4","Power hut basement":"00CF","Prospectors hut":"00D8","Testing":"0170","Toxic gas cave":"00DA","Train station":"00D7","Water storage":"00CD","Water supply pipe":"0126","Waterfall cavern":"00CE","Wumba's wigwam":"00D5"}},"Instant Warp\\Options\\Grunty Industries":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Basement":"010F","Basement \"repair depot":"0110","Basement \"waste disposal\"":"0111","Elevator shaft":"0105","Floor 2":"0106","Floor 2 \"electromagnet chamber\"":"0107","Floor 3":"0108","Floor 3 \"boiler plant\"":"0109","Floor 3 \"packing room\"":"010A","Floor 4":"010B","Floor 4 \"cable room\"":"010C","Floor 4 \"clinkers cavern\"":"0162","Floor 4 \"quality control\"":"010D","Floor 5":"010E","Inside":"0101","Mumbo's skull":"0172","Outside":"0100","Sewer entrance":"0187","Train station":"0102","Trash compactor":"0104","Water supply pipe":"0125","Workers quarters":"0103"}},"Instant Warp\\Options\\Hailfire Peaks":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Boggy's igloo":"0131","Chilli billi":"012B","Chilly willy":"012C","Colosseum kickball stadium lobby":"012D","Ice train station":"012A","Icicle grotto":"0132","Icy side":"0128","Icy side still":"0168","Inside the volcano":"0133","Lava side":"0127","Lava train station":"0129"}},"Instant Warp\\Options\\Isle O Hags":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Cliff top":"0155","Cliff top Mumbo's skull":"0156","Heggy's egg shed":"0150","Jiggywiggy's temple":"0151","Pine Grove":"0154","Plateau":"0152","Plateau \"Honey B's Hive\"":"0153","Quagmire":"015C","Wooded Hollow":"014F","inside another digger tunnel":"015B","wasteland":"015A"}},"Instant Warp\\Options\\Jinjo Village":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Black Jinjo's House":"0146","Blue Jinjo's House":"0148","Bottles house":"0143","Brown Jinjo's House":"014A","Green Jinjo's House":"0145","Jinjo Village":"0142","King Jingalings throne room":"0144","Orange Jinjo's House":"014B","Purple Jinjo's House":"014C","Red Jinjo's House":"014D","White Jinjo's House":"014E","Yellow Jinjo's House":"0147"}},"Instant Warp\\Options\\Jolly Roger's Lagoon":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Ancient Swimming Baths":"00F4","Atlantis":"01A8","Blubber's wave race hire":"00FF","Electric Eels lair":"00F6","Inside the big fish":"00F8","Jolly Roger's Lagoon":"01A7","Jolly's":"00ED","Pawno's emporium":"00EE","Seabottom":"01A9","Seaweed Sanctum":"00F7","mumbo's skull":"00EF","sea bottom cavern":"0181","submarine multi":"0182","temple of the fishes":"00FA"}},"Instant Warp\\Options\\Mayahem Temple":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Code chamber":"00BC","Humba's Wigwam":"00B6","Inside Targitzans Temple":"0178","Jade Snake Grove":"00C4","Kickball Arena":"00C9","Mayan Kickball Arena":"017F","Multi":"0166","Mumbo's skull":"00B7","Prison Compound":"00B9","Still":"0167","Targitzan Temple Lobby":"0179","Targitzan's Slighty Sacred Temple":"0177","Targitzan's Temple Boss":"017A","The Temple":"00B8","Treasure Chamber":"00C5"}},"Instant Warp\\Options\\Not sure":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Bottles house":"0143","Bottles house still":"0169","HAG Inside":"018A","HAG1 Final Boss":"019A","Humba Wumba's wigwam 1":"0135","Humba Wumba's wigwam 2":"0157","Inside Chuffy's wagon":"0121","Inside the digger tunnel":"0141","Jingalings Zombified Palace":"019B","Lord woo fak fak":"00FC","Mr Patch":"00F9","Mumbo's Skull":"0134","Smuggler cavern":"01A6"}},"Instant Warp\\Options\\Spiral Mountain":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Banjo's house":"0173","Behind The Waterfall":"00AE","Grunty's Old Lair":"00AD","Top Of Castle":"00AF"}},"Instant Warp\\Options\\Terrydacty Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Bonfire caverns":"011B","Chompa's belly multi":"0183","Humba's Wigwam":"011E","Inside chompa's belly":"0123","Inside the mountain":"0116","Oogle boogles cave":"0115","River passage":"0117","Stomping plains":"011A","Styracosaurus family cave":"0118","Terry's nest":"0113","Terrydacty Land":"0112","Train station":"0114","Unga bunga's cave":"0119"}},"Instant Warp\\Options\\Witchy World":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Balloon burst game":"00E4","Cave of horrors":"00EA","Crazy castle lobby":"00E2","Crazy castle pump room":"00E3","Crazy castle stockade":"00E1","Crazy castle stockade \"sop\"":"013B","Dodgem challenge \"1 vs 1\"":"00DE","Dodgem challenge \"2 vs 1\"":"00DF","Dodgem challenge \"3 vs 1\"":"00E0","Dodgem dome lobby":"00DD","Haunted cavern":"00EB","Hoop hurry game":"00E5","Mumbo's skull":"0176","Saucer of Peril":"0124","Star spinner":"00E6","Star spinner \"sop\"":"013C","The inferno":"00E7","Train station":"00EC","Witcy World":"00D6"}},"Monsters dont Hurt Banjo":{"note":"","data":["50002430 0000","80132EF5 0000","50002430 0000","80132EF6 0000","50002430 0000","80132EF7 0000","50002430 0000","80132EF8 0000","50002430 0000","80132EF9 0000"],"options":null},"Multi-Player\\Everyone Infinite All Eggs Multiplayer":{"note":"All blaster modes specifically.[ Thanks retroben, awesome work on this!]","data":["810EA078 0C04","810EA07A 8040","81120100 3C08","81120102 8008","81120104 8108","81120106 4288","81120108 1100","8112010A 0010","8112010C 0000","8112010E 0000","81120110 3C08","81120112 8008","81120114 8D08","81120116 4288","81120118 0008","8112011A 4200","8112011C 0008","8112011E 4202","81120120 0008","81120122 4080","81120124 3C04","81120126 8000","81120128 0104","8112012A 4020","8112012C 3C04","8112012E 2406","81120130 2484","81120132 0064","81120134 AD04","81120136 31C4","81120138 3C04","8112013A 2408","8112013C 2484","8112013E FFFE","81120140 AD04","81120142 31CC","81120144 3C04","81120146 8013","81120148 8C84","8112014A 2DC4","8112014C 0802","8112014E 2098","81120150 0000","81120152 0000"],"options":null},"Multi-Player\\Infinite Health\\Player 1":{"note":"","data":["80135531 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 2":{"note":"","data":["80135535 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 3":{"note":"","data":["80135539 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 4":{"note":"","data":["8013553D 0064"],"options":null},"Play As":{"note":"To use this cheat, put the cheat on, then press L as you walk through a door to become that chosen character. Do not try to use the following character in Banjos house or anywhere as small or you will get stuck and wont be able to continue. Snowball Washing machine Submarine Golden Goliath Truck T-rex baby and T-rex daddy","data":["D0081085 0020","8012704C 00??"],"options":{"Banjo":"0A","Banjo and Kazooie":"01","Bee":"06","Detonator":"0F","Golden Goliath":"0E","Kazooie":"0B","Mumbo":"0D","Snowball":"02","Stony":"08","Submarine":"0C","T-rex baby":"12","T-rex daddy":"13","Truck":"10","Washing machine":"07"}},"Realistic tunnel entrance portals":{"note":"","data":["810F70D4 0C10","810F70D6 4000","81410000 3C0E","81410002 8008","81410004 81CE","81410006 7AD0","81410008 11C0","8141000A 0015","8141000C 0000","8141000E 0000","81410010 3C0E","81410012 8008","81410014 8DCE","81410016 7AD0","81410018 000E","8141001A 7200","8141001C 000E","8141001E 7202","81410020 000E","81410022 7080","81410024 3C05","81410026 8000","81410028 01C5","8141002A 7020","8141002C 2405","8141002E 1000","81410030 A5C5","81410032 0EE4","81410034 A5C5","81410036 0F7C","81410038 A5C5","8141003A 0FA4","8141003C 0005","8141003E 2C00","81410040 34A5","81410042 003E","81410044 ADC5","81410046 0F18","81410048 2402","8141004A 000E","8141004C 00A2","8141004E 2823","81410050 ADC5","81410052 0F50","81410054 2402","81410056 0029","81410058 00A2","8141005A 2823","8141005C ADC5","8141005E 0FF4","81410060 2405","81410062 000E","81410064 0802","81410066 79C7","81410068 0000","8141006A 0000"],"options":null},"Shock Spring At Anytime":{"note":"Press Top D-pad,Do not use with Have\\All Moves Or Have\\Dragon Kazooie","data":["81120018 240E","8112001A 0001","8112001C 2400","D1081084 0800","8112001C A08E","8112001E 0606"],"options":null},"Sixty Frames - fps1":{"note":"","data":["D003F428 0080","810145EC 0C10","D003F428 0080","810145EE 0000","81400000 3C0E","81400002 8009","81400004 81CA","81400006 8C58","81400008 1140","8140000A 0003","8140000C 3C0E","8140000E 8013","81400010 1000","81400012 0005","81400014 0000","81400016 0000","81400018 3C0E","8140001A 8008","8140001C 81CE","8140001E 5B20","81400020 51C0","81400022 0004","81400024 3C0E","81400026 8013","81400028 3C0A","8140002A 8013","8140002C 1000","8140002E 0043","81400030 814A","81400032 C767","81400034 85CE","81400036 8608","81400038 240A","8140003A 016F","8140003C 114E","8140003E 0042","81400040 240A","81400042 0170","81400044 114E","81400046 0040","81400048 240A","8140004A 00C7","8140004C 114E","8140004E 005B","81400050 240A","81400052 00CB","81400054 114E","81400056 0059","81400058 240A","8140005A 01A7","8140005C 114E","8140005E 008E","81400060 240A","81400062 0107","81400064 114E","81400066 0055","81400068 240A","8140006A 0112","8140006C 114E","8140006E 009D","81400070 240A","81400072 0116","81400074 114E","81400076 000F","81400078 240A","8140007A 0128","8140007C 114E","8140007E 008C","81400080 240A","81400082 0101","81400084 114E","81400086 004D","81400088 240A","8140008A 0136","8140008C 114E","8140008E 009C","81400090 240A","81400092 013D","81400094 114E","81400096 0049","81400098 240A","8140009A 0161","8140009C 114E","8140009E 0057","814000A0 240A","814000A2 015F","814000A4 554E","814000A6 000F","814000A8 3C0E","814000AA 8012","814000AC 1000","814000AE 0008","814000B0 3C0E","814000B2 8008","814000B4 3C0E","814000B6 8013","814000B8 81CE","814000BA A9AC","814000BC 240A","814000BE 0002"],"options":null},"Sixty Frames - fps2":{"note":"","data":["814000C0 554E","814000C2 0070","814000C4 3C0E","814000C6 8008","814000C8 1000","814000CA 0069","814000CC 3C0E","814000CE 8008","814000D0 81CE","814000D2 63E0","814000D4 11C0","814000D6 0019","814000D8 240A","814000DA 0001","814000DC 1000","814000DE 0017","814000E0 240A","814000E2 0002","814000E4 81CE","814000E6 7096","814000E8 240A","814000EA 0007","814000EC 554E","814000EE 0013","814000F0 240A","814000F2 0001","814000F4 3C0E","814000F6 8013","814000F8 8DCE","814000FA 5490","814000FC 11C0","814000FE 000F","81400100 240A","81400102 0001","81400104 8DCE","81400106 01A0","81400108 85CE","8140010A 0018","8140010C 240A","8140010E 0357","81400110 154E","81400112 000A","81400114 240A","81400116 0001","81400118 3C0E","8140011A 8013","8140011C 8DCE","8140011E 5490","81400120 ADC0","81400122 0A0C","81400124 ADC0","81400126 0A14","81400128 ADC0","8140012A 0A20","8140012C ADC0","8140012E 0A24","81400130 ADC0","81400132 0A2C","81400134 ADC0","81400136 0A38","81400138 240A","8140013A 0001","8140013C 3C0E","8140013E 8008","81400140 0800","81400142 BCA4","81400144 A1CA","81400146 913F","81400148 3C0E","8140014A 8008","8140014C 81CA","8140014E 6AF8","81400150 5140","81400152 FFFA","81400154 240A","81400156 0001","81400158 8DCE","8140015A 6AF8","8140015C 000E","8140015E 7200","81400160 000E","81400162 7202","81400164 000E","81400166 7080","81400168 3C0A","8140016A 8000","8140016C 01CA","8140016E 7020","81400170 340A","81400172 C040","81400174 A5CA","81400176 15DA","81400178 340A","8140017A 4110","8140017C A5CA","8140017E 15E2","81400180 A5CA","81400182 163E","81400184 340A","81400186 BCF5"],"options":null},"Sixty Frames - fps3":{"note":"","data":["81400188 A5CA","8140018A 15EA","8140018C 340A","8140018E C28F","81400190 A5CA","81400192 15F2","81400194 A5CA","81400196 164E","81400198 340A","8140019A 42C8","8140019C A5CA","8140019E 162E","814001A0 A5CA","814001A2 168A","814001A4 340A","814001A6 4040","814001A8 A5CA","814001AA 1636","814001AC 340A","814001AE 3CF5","814001B0 A5CA","814001B2 1646","814001B4 1000","814001B6 FFE1","814001B8 240A","814001BA 0001","814001BC 3C0E","814001BE 8013","814001C0 81CE","814001C2 A9AC","814001C4 240A","814001C6 0002","814001C8 154E","814001CA 000C","814001CC 3C0E","814001CE 8009","814001D0 81CA","814001D2 9D78","814001D4 1140","814001D6 0009","814001D8 8DCE","814001DA 9D78","814001DC 000E","814001DE 7200","814001E0 000E","814001E2 7202","814001E4 000E","814001E6 7080","814001E8 3C0A","814001EA 8000","814001EC 01CA","814001EE 7020","814001F0 3C0A","814001F2 3E4C","814001F4 354A","814001F6 CCCD","814001F8 ADCA","814001FA 0F6C","814001FC 3C0E","814001FE 8008","81400200 81CA","81400202 6948","81400204 5140","81400206 FFB7","81400208 3C0E","8140020A 8012","8140020C 8DCE","8140020E 6948","81400210 000E","81400212 7200","81400214 000E","81400216 7202","81400218 000E","8140021A 7080","8140021C 3C0A","8140021E 8000","81400220 01CA","81400222 7020","81400224 340A","81400226 C070","81400228 A5CA","8140022A 132E","8140022C 340A","8140022E 4130","81400230 A5CA","81400232 1336","81400234 A5CA","81400236 1392","81400238 340A","8140023A BCF5","8140023C A5CA","8140023E 133E","81400240 340A","81400242 C28F","81400244 A5CA","81400246 1346","81400248 A5CA","8140024A 13A2","8140024C 340A","8140024E 4070"],"options":null},"Sixty Frames - fps4":{"note":"","data":["81400250 A5CA","81400252 138A","81400254 340A","81400256 3CF5","81400258 A5CA","8140025A 139A","8140025C 340A","8140025E 435E","81400260 A5CA","81400262 1382","81400264 A5CA","81400266 13DE","81400268 1000","8140026A FFB4","8140026C 240A","8140026E 0001","81400270 81CA","81400272 7978","81400274 5540","81400276 FFB1","81400278 240A","8140027A 0002","8140027C 1000","8140027E FFCF","81400280 240A","81400282 0001","81400284 81CA","81400286 68E8","81400288 5540","8140028A FFAC","8140028C 240A","8140028E 0002","81400290 1000","81400292 FFAA","81400294 240A","81400296 0001","81400298 3C0E","8140029A 8008","8140029C 81CE","8140029E 2B48","814002A0 11C0","814002A2 FFD6","814002A4 0000","814002A6 0000","814002A8 15C0","814002AA FFC4","814002AC 0000","814002AE 0000","814002B0 3C0E","814002B2 8012","814002B4 81CE","814002B6 7096","814002B8 240A","814002BA 0002","814002BC 114E","814002BE FFBF","814002C0 240A","814002C2 000D","814002C4 154E","814002C6 FFCD","814002C8 0000","814002CA 0000","814002CC 3C0E","814002CE 8008","814002D0 81CE","814002D2 6568","814002D4 11C0","814002D6 FFC9","814002D8 0000","814002DA 0000","814002DC 15C0","814002DE FFB7","814002E0 0000","814002E2 0000"],"options":null},"Sixty Frames - fps5":{"note":"","data":["814002E4 3C0E","814002E6 8013","814002E8 85CE","814002EA 59C8","814002EC 240A","814002EE 0057","814002F0 514E","814002F2 FF92","814002F4 240A","814002F6 0002","814002F8 1000","814002FA FFB0","814002FC 0000","814002FE 0000","81400300 3C0E","81400302 8013","81400304 81CE","81400306 A9AC","81400308 240A","8140030A 0002","8140030C 154E","8140030E FFBB","81400310 0000","81400312 0000","81400314 3C0E","81400316 8012","81400318 81CE","8140031A 7096","8140031C 240A","8140031E 000D","81400320 154E","81400322 FFAB","81400324 3C0E","81400326 8009","81400328 81CA","8140032A 9D78","8140032C 5140","8140032E FF83","81400330 240A","81400332 0001","81400334 1000","81400336 FF81","81400338 240A","8140033A 0002"],"options":null}},"C34304AC-2D79C021-C:45":{"Infinite Lives":{"note":"","data":["8010BCFF 0009"],"options":null},"Invincible":{"note":"","data":["8009F742 0001"],"options":null},"Level Select":{"note":"","data":["D009A913 0000","8009A913 00??"],"options":{"Level 1 - Shaolin Temple - China":"00","Level 2 - Wind Realm":"01","Level 3 - Earth Realm":"02","Level 4 - Water Realm":"03","Level 5 - Fire Ream":"04","Level 6 - Prison":"05","Level 7 - Bridge":"06","Level 8 - Fortress":"07"}},"Max Experience":{"note":"","data":["8111200E FC9A"],"options":null},"Widescreen":{"note":"Minor Clipping Issues","data":["8101B95A C355","8101BA6E 4355","8101AEE6 FF2A","8101AEDE 00D6","8105CC42 FF5E","8105CC14 0004","8105CC16 2080","8105CC18 241B","8105CC1A 0300","8105CC1C 009B","8105CC1E 001B","8105CC20 0000","8105CC22 9012","8105D81C 0003","8105D81E 1880","8105D820 241B","8105D822 0300","8105D824 007B","8105D826 001B","8105D828 0000","8105D82A 9012","8105D84A FF5F","810743E6 FF40","8107455E FF40","8107463E FF40","8107445E FF96","810745D6 FF96","810744C6 FF40","81074874 0003","81074876 1880","81074878 241B","8107487A 0300","8107487C 007B","8107487E 001B","81074880 0000","81074882 8812","810748B6 FF38","81074AEA FF39","81074A78 0004","81074A7A 2080","81074A7C 241B","81074A7E 0300","81074A84 009B","81074A86 001B","81074A88 0000","81074A8A A812","8101B68A FF2B","8101B6F2 00D5","81064366 FF2B","810643AA 00D5","810643E2 00D5","81064432 FF2B","8109F69C FFFF","8109F69E FFCB","8109F6A6 0079","8109F6B6 007A"],"options":null}},"C3B6DE9D-65D2DE76-C:50":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118DA00 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118DA02 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118DA04 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118DA06 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["50000402 0000","8018EE50 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["8016609D 00??","801660CA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["8016617D 00??","801661AA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["8016625D 00??","8016628A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["8016633D 00??","8016636A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["8016641D 00??","8016644A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["801664FD 00??","8016652A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818EF2F 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F6A55 0020","810F6B08 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F6A65 0020","810F78E0 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F6A75 0020","810F86B8 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F6A85 0020","810F9490 4000"],"options":null}},"C3CD76FF-9B9DCBDE-C:44":{"Freeze Enemies":{"note":"","data":["8008EE3B 0012"],"options":null},"Gore Mode":{"note":"","data":["8008EE37 0012"],"options":null},"Infinite\\Lives":{"note":"","data":["8008EE33 0012"],"options":null},"Infinite\\Primery Weapons":{"note":"","data":["8008EE30 0012"],"options":null},"Infinite\\Secondary Weapons":{"note":"","data":["8008EE31 0012"],"options":null},"Infinite\\Solaris":{"note":"Solaris are included in code","data":["8008EE3D 0012"],"options":null},"Infinite\\Titans":{"note":"Titans are included in code","data":["8008EE3C 0012"],"options":null},"Infinite\\Weapon Energy":{"note":"","data":["8008EE32 0012"],"options":null},"Invulnerability":{"note":"","data":["8008EE35 0012"],"options":null},"Level Select":{"note":"Accesses all Missions \u0026 Battle mode","data":["8008EE3E 0012"],"options":null},"One Shot Enemies":{"note":"","data":["8008EE3A 0012"],"options":null},"Psychedelic Mode":{"note":"","data":["8008EE39 0012"],"options":null},"Stealth Mode":{"note":"","data":["8008EE34 0012"],"options":null},"Turbo Mode":{"note":"","data":["8008EE38 0012"],"options":null},"Wireframe Mode":{"note":"","data":["8008EE36 0012"],"options":null}},"C3E7E29E-5D7251CC-C:50":{"99 Points Player 1":{"note":"","data":["8010C33F 0063"],"options":null},"Access All\\Cars \u0026 Tracks":{"note":"","data":["8104ADF6 0001"],"options":null},"Access All\\Cups":{"note":"","data":["8005444B 0003","8005442D 0000","8005442E 0000","8005442F 0000","80054477 0003","80054459 0000","8005445A 0000","8005445B 0000","800544A3 0003","80054485 0000","80054486 0000","80054487 0000"],"options":null},"Always 1st":{"note":"","data":["811157AE 0001","811157B6 0000","8110C33E 03E7"],"options":null},"Drones Have No Weapons":{"note":"","data":["8111CECE 0000"],"options":null},"Infinite Continues":{"note":"","data":["8110C332 0006"],"options":null},"Infinite Weapons\\Player 1":{"note":"","data":["81115798 0000","8111579A 00??","8111579E 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 2":{"note":"","data":["81117C60 0000","81117C62 00??","81117C66 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 3":{"note":"","data":["8111A128 0000","8111A12A 00??","8111A12E 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 4":{"note":"","data":["8111C5F0 0000","8111C5F2 00??","8111C5F6 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Laps To Race":{"note":"","data":["8107DD1E 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Number Of Drones In The Race":{"note":"","data":["8110FFF6 00??"],"options":{"1 Drone":"01","2 Drones":"02","3 Drones":"03","4 Drones":"04","5 Drones":"05","6 Drones":"06","7 Drones":"07","8 Drones":"08","9 Drones":"09"}}},"C3F19159-65D2BC5A-C:50":{"Number Of Goals Player 1":{"note":"","data":["80119043 00??"],"options":{"1 Goal":"01","10 Goals":"0A","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08","9 Goals":"09"}},"Number Of Goals Player 2":{"note":"","data":["80119047 00??"],"options":{"1 Goal":"01","10 Goals":"0A","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08","9 Goals":"09"}}},"C43E23A7-40B1681A-C:45":{"Infinite\\Balls":{"note":"","data":["800ABFB7 0000"],"options":null},"Infinite\\Character Creation Points":{"note":"","data":["800E2C31 00B0"],"options":null},"Infinite\\Outs":{"note":"","data":["800ABFBB 0000"],"options":null},"Infinite\\Strikes":{"note":"","data":["800ABFB9 0000"],"options":null},"Max\\Character Creation Accuracy":{"note":"","data":["810E2BF0 4170"],"options":null},"Max\\Character Creation Arm Strength":{"note":"","data":["810E2C20 4170"],"options":null},"Max\\Character Creation Bunting":{"note":"","data":["810E2C0C 4170"],"options":null},"Max\\Character Creation Clutch":{"note":"","data":["810E2BF4 4170"],"options":null},"Max\\Character Creation Clutch 2":{"note":"","data":["810E2C28 4170"],"options":null},"Max\\Character Creation Contact":{"note":"","data":["810E2BFC 4170"],"options":null},"Max\\Character Creation Defense":{"note":"","data":["810E2C1C 4170"],"options":null},"Max\\Character Creation Power":{"note":"","data":["810E2C00 4170"],"options":null},"Max\\Character Creation Speed":{"note":"","data":["810E2C18 4170"],"options":null},"Max\\Character Creation Streak":{"note":"","data":["810E2C24 4170"],"options":null},"Max\\Character Creation VS LHB":{"note":"","data":["810E2C10 4170"],"options":null},"Max\\Character Creation VS RHB":{"note":"","data":["810E2C14 4170"],"options":null},"Max\\Character Creation VS. LHP":{"note":"","data":["810E2C04 4170"],"options":null},"Max\\Character Creation VS. RHP":{"note":"","data":["810E2C08 4170"],"options":null}},"C49ADCA2-F1501B62-C:45":{"Always Have\\99 points":{"note":"","data":["8015FD09 0063"],"options":null},"Always first position":{"note":"","data":["80162A80 0001"],"options":null},"Only race one lap":{"note":"","data":["8015FC35 0001"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D01A10B5 0010","81162F28 4077","D01A10B5 0010","81162F30 4077"],"options":null}},"C5674160-0F5F453C-C:50":{"Lower Left Character\\Coin Options":{"note":"","data":["810D1002 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDAED 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800D1006 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["810D103A 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDB39 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800D103E 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["810D0F92 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDA55 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800D0F96 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["810D0FCA 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDAA1 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800D0FCE 00??"],"options":{"0 Stars":"00","99 Stars":"64"}}},"C71353BE-AA09A6EE-C:50":{"Always Normal Spirit\\Player 1":{"note":"","data":["801671F5 0032"],"options":null},"Always Normal Spirit\\Player 2":{"note":"","data":["80167689 0032"],"options":null},"Always Normal Spirit\\Player 3":{"note":"","data":["80167B1D 0032"],"options":null},"Always Normal Spirit\\Player 4":{"note":"","data":["80167FB1 0032"],"options":null},"Always Special\\Player 1":{"note":"","data":["80167235 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["801676C9 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["80167B5D 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["80167FF1 0004"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 1":{"note":"","data":["801671F4 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 2":{"note":"","data":["80167688 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 3":{"note":"","data":["80167B1C 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 4":{"note":"","data":["80167FB0 0064"],"options":null},"Have All Characters":{"note":"","data":["8109ED5A FFFF"],"options":null},"Infinite Create-A-Wrestler Attribute Points":{"note":"","data":["8011A81B 001E"],"options":null},"Max Attributes":{"note":"","data":["8011A811 0032","8011A813 0032","8011A815 0032","8011A817 0032","8011A819 0032"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["801671F5 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["80167689 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["80167B1D 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["80167FB1 00FF"],"options":null},"No Spirit\\Player 1":{"note":"","data":["801671F5 0000"],"options":null},"No Spirit\\Player 2":{"note":"","data":["80167689 0000"],"options":null},"No Spirit\\Player 3":{"note":"","data":["80167B1D 0000"],"options":null},"No Spirit\\Player 4":{"note":"","data":["80167FB1 0000"],"options":null},"Specials Don't Run Out":{"note":"","data":["8112AD94 2400"],"options":null},"Timer Is Always 00:00":{"note":"","data":["8016F0AF 0000"],"options":null},"Ultimate Codes\\Player 1":{"note":"","data":["801671F4 0064"],"options":null},"Ultimate Codes\\Player 2":{"note":"","data":["80167688 0064"],"options":null},"Ultimate Codes\\Player 3":{"note":"","data":["80167B1C 0064"],"options":null},"Ultimate Codes\\Player 4":{"note":"","data":["80167FB0 0064"],"options":null},"Weapon Select\\Player 1":{"note":"","data":["81167236 0300","81166D90 ????","81166D92 0000","80166E50 0000"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 2":{"note":"","data":["811676CA 0300","81166DC0 ????","80166DC2 0001","80166E51 0001"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 3":{"note":"","data":["81167B5E 0300","81166DF0 ????","80166DF2 0002","80166E52 0002"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 4":{"note":"","data":["81167FF2 0300","81166E18 ????","81166E1A 0003","80166E53 0003"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}}},"C7C98F8E-42145DDE-C:45":{"Allways 1st":{"note":"","data":["8111D7EA 0000"],"options":null},"Have All\\Cars \u0026 Cups\\Player 1":{"note":"","data":["81124A0A FFFF"],"options":null},"Have All\\Cars \u0026 Cups\\Player 2":{"note":"","data":["81124B4A FFFF"],"options":null},"Have All\\Special Cars\\Player 1":{"note":"","data":["81124A04 FFFF","81124A06 FFFF","81124A0A FFFF"],"options":null},"Have All\\Special Cars\\Player 2":{"note":"","data":["81124B44 FFFF","81124B46 FFFF","81124B4A FFFF"],"options":null},"Have All\\Tracks":{"note":"","data":["81124A0E FFFF"],"options":null},"Infinite Turbos\\Player 1":{"note":"","data":["80118CFC 000A"],"options":null},"Infinite Turbos\\Player 2":{"note":"","data":["80119478 000A"],"options":null},"Max Tournament Points":{"note":"","data":["81124A16 00FF"],"options":null},"Press L For Time Is Always 0:00:00\\Player 1":{"note":"","data":["D0137FE5 0020","810F3900 0000","D0137FE5 0020","810F3902 0000"],"options":null},"Press L For Time Is Always 0:00:00\\Player 2":{"note":"","data":["D0137FED 0020","810F3900 0000","D0137FED 0020","810F3902 0000"],"options":null},"Start On Lap Modifier\\Player 1":{"note":"","data":["D0118AA8 0000","80118AA8 00??"],"options":{"1st":"00","2nd":"01","3rd":"02","4th":"03"}},"Start On Lap Modifier\\Player 2":{"note":"","data":["D0119224 0000","80119224 00??"],"options":{"1st":"00","2nd":"01","3rd":"02","4th":"03"}}},"C83CEB83-FDC56219-C:50":{"Always 1st":{"note":"","data":["8022CC16 0001"],"options":null},"Class Select":{"note":"This code is useful because you can play Class AA without having to beat a level!\u0026 then once any edit is done while the game is running","data":["8021C297 00??"],"options":{"1 Play":"04","2 Play":"05","3 Play":"06","4 Play":"07","Class AA":"03","Class B":"01","Class C":"00"}},"Super Speed":{"note":"This is Turbo fast,So to slow it down a little more keep the B button pressed down","data":["81228FA8 4800"],"options":null}},"C851961C-78FCAAFA-C:45":{"Choose Vehicle":{"note":"Make your Choice \u0026 then Press GS To Activate,But do not use with any other Press GS Cheat Codes.","data":["883626A7 00??"],"options":{"Birdman":"06","Cannonball":"03","Gyrocopter":"02","Hang Glider":"00","Jumble Hopper":"05","Rocket Belt":"01","Skydiving":"04"}},"Fly As Gray Plane In USA Level":{"note":"Press GS To Activate,But do not use with any other Press GS Cheat Codes.","data":["89362748 0008","813627B0 3F30","8024CDF5 006E"],"options":null},"Fly As Yellow Plane In USA Level":{"note":"Press GS To Activate,But do not use with any other Press GS Cheat Codes.","data":["89362748 0009","813627B0 3EE0","8024CDF5 006E"],"options":null},"Have Perfect Score in all Class \u0026 Level's":{"note":"With these codes, if you want them to save, you have to play a level, and lose and just choose quit after it tallies up your score. Also dont keep the code active once you save the level at 100%, turn the code off and continue with the other levels!","data":["8036427D 0064","803642AD 0064","803642DD 0064","80364911 0064","80364A61 0064","80364941 0064","80364A91 0064","80364971 0064","80364AC1 0064","80364FA5 0064","803650F5 0064","80365245 0064","80364FD5 0064","80365125 0064","80365275 0064","80365005 0064","80365155 0064","803652A5 0064","80365639 0064","80365789 0064","803658D9 0064","80365669 0064","803657B9 0064","80365909 0064","80365699 0064","803657E9 0064","80365939 0064","8036430D 0019","8036445D 0019","803645AD 0019","803646FD 0019","8036433D 0064","8036436D 0064","803649A1 0019","80364AF1 0019","80364C41 0019","80364D91 0019","803649D1 0064","80364A01 0064","80365035 0019","80365185 0019","803652D5 0019","80365425 0019","80365065 0064","80365095 0064"],"options":null},"Infinite Fuel\\Gyrocopter":{"note":"","data":["80362821 0081"],"options":null},"Infinite Fuel\\Rocket Belt":{"note":"","data":["80362841 0081"],"options":null},"Time Always 00'00'10":{"note":"This Cheat code is for All Events","data":["80362750 0001"],"options":null}},"C8BB4DD9-CC5F430B-C:45":{"Have All Elements":{"note":"","data":["8107BAA4 3232","8107BAA6 3232"],"options":null},"Infinite Health":{"note":"","data":["8107BA84 01F4","8107BA86 01F4"],"options":null},"Infinite Magic Points":{"note":"","data":["8107BA88 01F4","8107BA8A 01F4"],"options":null},"Super Agility":{"note":"","data":["8107BA8E 01F4"],"options":null},"Super Defense":{"note":"","data":["8107BA8C 01F4"],"options":null}},"C8DC65EB-3D8C8904-C:45":{"Always 1st":{"note":"","data":["812C4C96 0001"],"options":null},"Have All\\Boats":{"note":"","data":["812B5CA2 0101","812B5CA4 0101","812B5CA6 0101","812B5CA8 0101","812B5CAA 0101","812B5CAC 0101","812B5CAE 0101"],"options":null},"Have All\\Races":{"note":"","data":["812B5C94 0101","812B5C96 0101","812B5C98 0101","812B5C9A 0101","812B5C9C 0101","812B5C9E 0101","812B5CA0 0101"],"options":null},"Hydro Speedway":{"note":"","data":["802B5C94 00??"],"options":{"Unlocked \u0026 Completed":"03","Unlocked \u0026 Not Completed":"01"}},"Infinite\\Boosts\\Player 1":{"note":"","data":["812C4C9C 4190"],"options":null},"Infinite\\Boosts\\Player 2":{"note":"","data":["812C4FCC 4190"],"options":null},"Infinite\\Time":{"note":"","data":["812B4890 42C8"],"options":null}},"C9176D39-EA4779D1-C:50":{"Beta Bottles Revenge Mode":{"note":"Bottles Revenge is a Beta mode from Banjo Tooie that the RWP team recently uncovered after an extraordinary amount of effort. Bottles the Spirit transforms into Bottles the Devil and posses enemies nearby and allows a second player hooked up to Pad 2 to play as that Posses character to try to foil Banjos Plans. As player one goes about its business, player two uses every enemy nearby to try to nab Banjo and take away some life. This mode is incredible, and you can control almost every enemy in the game: slot machines, flying creatures, uggers, zubbas...and this is just the beginning. (Congrats Rare Witch Project)","data":["80130402 0001","8008B4D1 0002"],"options":null},"Have\\All Moves":{"note":"Press Top D-pad,Do not use with Have\\All Moves \u0026 Dragon Kazooie Or Have\\Dragon Kazooie","data":["D1083F08 0800","811314F0 8029","D1083F08 0800","811314F2 0000","81290018 FFFF","8129001A FFFF","8129001C FFFF","8129001E FFFF"],"options":null},"Have\\All Moves \u0026 Dragon Kazooie":{"note":"Press Top D-pad,Do not use with Have\\All Moves Or Have\\Dragon Kazooie","data":["D1083F08 0800","811314F0 8029","D1083F08 0800","811314F2 0000","81290018 FFFF","8129001A FFFF","8129001C FFFF","8129001E FFFF","81290078 FFFF","8129007A FFFF"],"options":null},"Have\\Dragon Kazooie":{"note":"","data":["D1083F08 0800","811314F0 8029","D1083F08 0800","811314F2 0000","81290078 FFFF","8129007A FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["8112FFD2 42C8"],"options":null},"Infinite\\Energy\\Banjo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207AF 000A","801207B0 000A"],"options":null},"Infinite\\Energy\\Banjo and Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0A0A","81120794 0A0A"],"options":null},"Infinite\\Energy\\Bee":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207A3 000A","801207A4 000A"],"options":null},"Infinite\\Energy\\Detonator":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","811207BE 0A0A"],"options":null},"Infinite\\Energy\\Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","811207B2 0A0A"],"options":null},"Infinite\\Energy\\Mumbo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","811207B8 0A0A"],"options":null},"Infinite\\Energy\\Snowball":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","80120797 0005"],"options":null},"Infinite\\Energy\\Stony":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207A9 000A","8011B65A 000A"],"options":null},"Infinite\\Energy\\Submarine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207B5 000A","801207B6 000A"],"options":null},"Infinite\\Energy\\T-Rex Baby":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207CF 000A","801207D0 000A"],"options":null},"Infinite\\Energy\\Washing Machine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","811207A6 0A0A"],"options":null},"Instant Warp\\Options\\Cauldron Keep":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Cauldron Keep":"015D","Colosseum kickball arena":"0180","Crazy Castle Stockade Jump the hoops multi":"017C","Crazy Castle Stockade balloon burst multi":"017B","Dodgems":"0186","Grunty Industries packing game":"017D","Gun chamber":"0160","Gun room still":"016A","The gatehouse":"015E","Tower of Tragedy Quiz":"015F"}},"Instant Warp\\Options\\Cloud Cuckoo Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Central cavern":"013A","Cloud Cuckoo Land 1":"0136","Cloud Cuckoo Land 2":"0161","Humba wumba's wigwam":"0140","Inside the cheesewedge":"0138","Inside the pot o gold":"013D","Inside the trashcan":"0137","Mingy jongo's skull":"013F","Mumbo's skull":"013E","Trash can mini":"0185","Zubba's nest":"0139","Zubba's nest multi":"0188"}},"Instant Warp\\Options\\Glitter Gulch Mine":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Canary cave":"00DB","Chuffy's cab":"00D0","Crushing shed":"00CB","Flooded caves":"00CC","Fuel depot":"00CA","Generator caverns":"00D3","Gloomy caverns":"00D2","Humba":"00E9","Inside chuffy's boiler boss":"00D1","Mine":"00C7","Mumbo's hut":"00D9","Mumbo's skull":"0171","Ordnance Storage entrance":"0163","Ordnance Storage game":"0164","Ordnance Storage game Multi":"0165","Ordnance storage":"00DC","Power hut":"00D4","Power hut basement":"00CF","Prospectors hut":"00D8","Testing":"0170","Toxic gas cave":"00DA","Train station":"00D7","Water storage":"00CD","Water supply pipe":"0126","Waterfall cavern":"00CE","Wumba's wigwam":"00D5"}},"Instant Warp\\Options\\Grunty Industries":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Basement":"010F","Basement \"repair depot":"0110","Basement \"waste disposal\"":"0111","Elevator shaft":"0105","Floor 2":"0106","Floor 2 \"electromagnet chamber\"":"0107","Floor 3":"0108","Floor 3 \"boiler plant\"":"0109","Floor 3 \"packing room\"":"010A","Floor 4":"010B","Floor 4 \"cable room\"":"010C","Floor 4 \"clinkers cavern\"":"0162","Floor 4 \"quality control\"":"010D","Floor 5":"010E","Inside":"0101","Mumbo's skull":"0172","Outside":"0100","Sewer entrance":"0187","Train station":"0102","Trash compactor":"0104","Water supply pipe":"0125","Workers quarters":"0103"}},"Instant Warp\\Options\\Hailfire Peaks":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Boggy's igloo":"0131","Chilli billi":"012B","Chilly willy":"012C","Colosseum kickball stadium lobby":"012D","Ice train station":"012A","Icicle grotto":"0132","Icy side":"0128","Icy side still":"0168","Inside the volcano":"0133","Lava side":"0127","Lava train station":"0129"}},"Instant Warp\\Options\\Isle O Hags":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Cliff top":"0155","Cliff top Mumbo's skull":"0156","Heggy's egg shed":"0150","Jiggywiggy's temple":"0151","Pine Grove":"0154","Plateau":"0152","Plateau \"Honey B's Hive\"":"0153","Quagmire":"015C","Wooded Hollow":"014F","inside another digger tunnel":"015B","wasteland":"015A"}},"Instant Warp\\Options\\Jinjo Village":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Black Jinjo's House":"0146","Blue Jinjo's House":"0148","Bottles house":"0143","Brown Jinjo's House":"014A","Green Jinjo's House":"0145","Jinjo Village":"0142","King Jingalings throne room":"0144","Orange Jinjo's House":"014B","Purple Jinjo's House":"014C","Red Jinjo's House":"014D","White Jinjo's House":"014E","Yellow Jinjo's House":"0147"}},"Instant Warp\\Options\\Jolly Roger's Lagoon":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Ancient Swimming Baths":"00F4","Atlantis":"01A8","Blubber's wave race hire":"00FF","Electric Eels lair":"00F6","Inside the big fish":"00F8","Jolly Roger's Lagoon":"01A7","Jolly's":"00ED","Pawno's emporium":"00EE","Seabottom":"01A9","Seaweed Sanctum":"00F7","mumbo's skull":"00EF","sea bottom cavern":"0181","submarine multi":"0182","temple of the fishes":"00FA"}},"Instant Warp\\Options\\Mayahem Temple":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Code chamber":"00BC","Humba's Wigwam":"00B6","Inside Targitzans Temple":"0178","Jade Snake Grove":"00C4","Kickball Arena":"00C9","Mayan Kickball Arena":"017F","Multi":"0166","Mumbo's skull":"00B7","Prison Compound":"00B9","Still":"0167","Targitzan Temple Lobby":"0179","Targitzan's Slighty Sacred Temple":"0177","Targitzan's Temple Boss":"017A","The Temple":"00B8","Treasure Chamber":"00C5"}},"Instant Warp\\Options\\Not sure":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Bottles house":"0143","Bottles house still":"0169","HAG Inside":"018A","HAG1 Final Boss":"019A","Humba Wumba's wigwam 1":"0135","Humba Wumba's wigwam 2":"0157","Inside Chuffy's wagon":"0121","Inside the digger tunnel":"0141","Jingalings Zombified Palace":"019B","Lord woo fak fak":"00FC","Mr Patch":"00F9","Mumbo's Skull":"0134","Smuggler cavern":"01A6"}},"Instant Warp\\Options\\Spiral Mountain":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Banjo's house":"0173","Behind The Waterfall":"00AE","Grunty's Old Lair":"00AD","Top Of Castle":"00AF"}},"Instant Warp\\Options\\Terrydacty Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Bonfire caverns":"011B","Chompa's belly multi":"0183","Humba's Wigwam":"011E","Inside chompa's belly":"0123","Inside the mountain":"0116","Oogle boogles cave":"0115","River passage":"0117","Stomping plains":"011A","Styracosaurus family cave":"0118","Terry's nest":"0113","Terrydacty Land":"0112","Train station":"0114","Unga bunga's cave":"0119"}},"Instant Warp\\Options\\Witchy World":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Balloon burst game":"00E4","Cave of horrors":"00EA","Crazy castle lobby":"00E2","Crazy castle pump room":"00E3","Crazy castle stockade":"00E1","Crazy castle stockade \"sop\"":"013B","Dodgem challenge \"1 vs 1\"":"00DE","Dodgem challenge \"2 vs 1\"":"00DF","Dodgem challenge \"3 vs 1\"":"00E0","Dodgem dome lobby":"00DD","Haunted cavern":"00EB","Hoop hurry game":"00E5","Mumbo's skull":"0176","Saucer of Peril":"0124","Star spinner":"00E6","Star spinner \"sop\"":"013C","The inferno":"00E7","Train station":"00EC","Witcy World":"00D6"}},"Multi-Player\\Infinite Health\\Player 1":{"note":"","data":["8013A541 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 2":{"note":"","data":["8013A545 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 3":{"note":"","data":["8013A549 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 4":{"note":"","data":["8013A54D 0064"],"options":null},"Play As":{"note":"To use this cheat, put the cheat on, then press L as you walk through a door to become that chosen character","data":["D008B494 0020","8012BFAC 00??"],"options":{"Banjo":"0A","Banjo and Kazooie":"01","Bee":"06","Detonator":"0F","Golden Goliath":"0E","Kazooie":"0B","Mumbo":"0D","Snowball":"02","Stony":"08","Submarine":"0C","T-rex baby":"12","T-rex daddy":"13","Truck":"10","Washing machine":"07"}}},"C9C3A987-5810344C-C:4A":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118A080 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118A082 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118A084 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118A086 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["8018B4D8 00??","8018B4D9 00??","8018B4DA 00??","8018B4DB 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["8016271D 00??","8016274A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["801627FD 00??","8016282A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["801628DD 00??","8016290A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["801629BD 00??","801629EA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["80162A9D 00??","80162ACA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["80162B7D 00??","80162BAA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818B5BF 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F61B5 0020","810F6268 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F61C5 0020","810F7040 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F61D5 0020","810F7E18 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F61E5 0020","810F8BF0 4000"],"options":null},"Sixty Frames":{"note":"Single player only for now.","data":["80000FC3 0000","800014AF 0001"],"options":null}},"CA12B547-71FA4EE4-C:45":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2212 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE51F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80382CB7 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","802020F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801DDC55 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801FC5C5 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801EF96D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","80202225 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801D9ABD 0001"],"options":null},"Widescreen":{"note":"","data":["8101C7A0 0801","8101C7A2 0F84","81043E10 3C1B","81043E12 3F40","81043E14 449B","81043E16 2000","81043E18 0800","81043E1A 71EA","81043E1C 4604","81043E1E 4202","D10A80A6 A113","810B0518 4300"],"options":null}},"CA1BB86F-41CCA5C5-C:4A":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D55E0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112CF2E 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800EB470 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D55C0 0001","50001701 0000","800D55C8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D5850 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D5889 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D55B9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D55BA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D55BB 0003"],"options":null}},"CA2A7444-71DAB71C-C:50":{"Always Place 1st":{"note":"","data":["80152D61 0000"],"options":null},"Have All\\Cars":{"note":"","data":["50001504 0000","800AAD4B 0001"],"options":null},"Have All\\Tracks":{"note":"","data":["8116A0EC FFFF"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D01354BF 0010","8112CE6C 43CB"],"options":null}},"CB93DB97-7F5C63D5-C:46":{"Have 99 coins":{"note":"","data":["810BBBDE 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C8542 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BBBCC 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BBBD6 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BBBDA 0009"],"options":null}},"CBFE69C7-F2C0AB2A-C:45":{"Access Level Select":{"note":"On the main menu Scroll down to make CHEATS visible to go into Level Select.For in-Game Cheats,Pause gameplay.","data":["810DD21C 8001"],"options":null},"Have\\All TARZAN Letters":{"note":"","data":["800DD225 00FF"],"options":null},"Have\\Coins Collected 100%":{"note":"","data":["800DD257 0064"],"options":null},"Have\\Full Portrait":{"note":"","data":["800DD224 00FF"],"options":null},"Have\\Level \u0026 Tokens Completed 100%":{"note":"","data":["800DD22F 0000","800DD230 0001","800DD231 0000"],"options":null},"Infinite\\Bonus Timer":{"note":"This is For All Timers on Bonus Levels","data":["801735FE 0025"],"options":null},"Infinite\\Green Weapon":{"note":"","data":["81192096 0063"],"options":null},"Infinite\\Health":{"note":"","data":["811921C0 0120"],"options":null},"Infinite\\Lives":{"note":"","data":["800DD252 00??"],"options":{"3 Lives":"03","99 Lives":"63"}},"Infinite\\Purple Weapon":{"note":"","data":["8119209A 0063"],"options":null},"Infinite\\Red Weapon":{"note":"","data":["81192098 0063"],"options":null},"Press GS For\\Sabor Attacks\\Sabor 1 Hit Kill":{"note":"","data":["8924A23E 0001"],"options":null}},"CCEB3858-26952D97-C:50":{"Have 99 Coins":{"note":"","data":["810BB4FE 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C7E62 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BB4EC 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BB4F6 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BB4FA 0009"],"options":null}},"CCEDB696-D3883DB4-C:4A":{"All Items":{"note":"","data":["50002402 0202","810EC7E0 0001","50004601 0000","800EC861 0003"],"options":null},"Item Modifier Codes\\Position 01":{"note":"","data":["800EC7E0 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 02":{"note":"","data":["800EC7E1 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 03":{"note":"","data":["800EC7E2 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 04":{"note":"","data":["800EC7E3 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 05":{"note":"","data":["800EC7E4 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 06":{"note":"","data":["800EC7E5 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 07":{"note":"","data":["800EC7E6 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 08":{"note":"","data":["800EC7E7 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 09":{"note":"","data":["800EC7E8 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 10":{"note":"","data":["800EC7E9 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 11":{"note":"","data":["800EC7EA 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 12":{"note":"","data":["800EC7EB 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 13":{"note":"","data":["800EC7EC 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 14":{"note":"","data":["800EC7ED 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 15":{"note":"","data":["800EC7EE 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 16":{"note":"","data":["800EC7EF 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 17":{"note":"","data":["800EC7F0 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 18":{"note":"","data":["800EC7F1 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 19":{"note":"","data":["800EC7F2 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 20":{"note":"","data":["800EC7F3 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 21":{"note":"","data":["800EC7F4 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 22":{"note":"","data":["800EC7F5 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 23":{"note":"","data":["800EC7F6 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 24":{"note":"","data":["800EC7F7 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 25":{"note":"","data":["800EC7F8 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 26":{"note":"","data":["800EC7F9 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 27":{"note":"","data":["800EC7FA 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 28":{"note":"","data":["800EC7FB 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 29":{"note":"","data":["800EC7FC 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 30":{"note":"","data":["800EC7FD 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 31":{"note":"","data":["800EC7FE 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 32":{"note":"","data":["800EC7FF 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 33":{"note":"","data":["800EC800 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 34":{"note":"","data":["800EC801 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 35":{"note":"","data":["800EC802 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 36":{"note":"","data":["800EC803 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 37":{"note":"","data":["800EC804 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 38":{"note":"","data":["800EC805 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 39":{"note":"","data":["800EC806 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 40":{"note":"","data":["800EC807 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 41":{"note":"","data":["800EC808 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 42":{"note":"","data":["800EC809 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 43":{"note":"","data":["800EC80A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 44":{"note":"","data":["800EC80B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 45":{"note":"","data":["800EC80C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 46":{"note":"","data":["800EC80D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 47":{"note":"","data":["800EC80E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 48":{"note":"","data":["800EC80F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}}},"CD538CE4-618AFCF9-C:45":{"Have 6 Carrots":{"note":"","data":["80164519 007E"],"options":null},"Have All\\Collectibles\\Stage 1":{"note":"","data":["80164510 0014"],"options":null},"Have All\\Collectibles\\Stage 2":{"note":"","data":["80164511 0014"],"options":null},"Have All\\Collectibles\\Stage 3":{"note":"","data":["80164512 0014"],"options":null},"Have All\\Collectibles\\Stage 4":{"note":"","data":["80164513 0014"],"options":null},"Have All\\Collectibles\\Stage 5":{"note":"","data":["80164514 0014"],"options":null},"Have All\\Collectibles\\Stage 6":{"note":"","data":["80164515 0014"],"options":null},"Have All\\Costumes":{"note":"","data":["8016451A 00FE"],"options":null},"Have All\\Levels":{"note":"","data":["80164508 003F"],"options":null},"Infinite Health":{"note":"","data":["8018BA7D 000F"],"options":null},"Max Collectable Items":{"note":"","data":["80164501 0014"],"options":null},"Press L To levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D018BAB5 0020","8118B9E0 4200"],"options":null}},"CD5BEC0F-86FD1008-C:45":{"Extra Characters":{"note":"","data":["8113A488 1000","8113A48A 07FF","8113A48C 2000","8113A48E 3FFF"],"options":null},"Infinite Creation Points":{"note":"","data":["80136245 0000"],"options":null}},"CD7559AC-B26CF5AE-C:45":{"16:9 Widescreen":{"note":"For 16:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["8127683C 4334","81276840 4334","81274B74 3FE6"],"options":null},"21:9 Widescreen":{"note":"For 21:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["8127683C 4334","81276840 4334","81274B74 4019"],"options":null},"Access All Moves":{"note":"","data":["8037C3A0 0001","8037C3A1 007F","8037C3A2 00FF","8037C3A3 00FF"],"options":null},"Character Select":{"note":"When Mumbo transforms you hold:C-Up for the Termite,C-Right for the Pumpkin,C-Down for the Walrus,C-Left for the Crocc,R for the Bumble Bee,L for the Washing Machine,Press nothing to turn into Banjo","data":["D0281251 0008","8037C2D3 0002","D0281251 0001","8037C2D3 0003","D0281251 0004","8037C2D3 0004","D0281251 0002","8037C2D3 0005","D0281251 0010","8037C2D3 0006","D0281251 0020","8037C2D3 0007"],"options":null},"Do Shock Spring Jump From Anywhere":{"note":"Press A Button. Do not use with Take Off And Fly From Anywhere","data":["8037C1D2 0002"],"options":null},"Game 100% Complete":{"note":"","data":["8137C3A0 001F","50000302 0000","8137C3A2 FFFF","50000602 0000","813832C0 FFFF","81383FCA 0064","81383FDC 0064","50000802 0000","813832F0 FFFF","81385FA0 0063","81385FC4 0063","81385FF0 0064","50000602 0000","81385FF2 6464","50001002 0000","813831A8 FFFF","813831B0 FF7F","813831B2 FFB0","813831B4 3DA6","813831B6 F264","813831C6 FF7F"],"options":null},"Have Zero Time all Levels":{"note":"","data":["50000B04 0000","81386004 3000"],"options":null},"Infinite\\Air":{"note":"","data":["813851AE 0E10"],"options":null},"Infinite\\Always Have All Jinjos":{"note":"","data":["80385F7B 00FF"],"options":null},"Infinite\\Eggs":{"note":"","data":["80385F67 00FF"],"options":null},"Infinite\\Gold Feathers":{"note":"","data":["80385F73 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["803851A3 0008"],"options":null},"Infinite\\Jiggies":{"note":"","data":["80385FCB 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["80385F8B 00FF"],"options":null},"Infinite\\Mumbo Tokens":{"note":"","data":["80385FC6 00FF","80385FA2 00FF"],"options":null},"Infinite\\Notes":{"note":"Just collect one Note to Have 255 Notes in all Worlds.","data":["80385FF2 00FF","80385F62 0001"],"options":null},"Infinite\\Red Feathers":{"note":"","data":["80385F6F 00FF"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0281251 0020","8137C4BC 43E0"],"options":null},"Secret Items":{"note":"","data":["81283400 ????"],"options":{"Have All Collected":"FFFF","Have None":"0000"}},"Take Off And Fly From Anywhere":{"note":"Press A Button. Do not use with Do Shock Spring Jump From Anywhere","data":["8037C1D1 0002"],"options":null}},"CEA8B54F-7F21D503-C:45":{"Always Berserk Mode":{"note":"","data":["801BF9AF 00FF"],"options":null},"Always Drop\\Player 1":{"note":"","data":["801BF9BB 00??"],"options":{"Bar":"00","Big Water":"06","Bomb":"0A","Corner":"02","Down Bar":"05","Down Square":"04","Fireball":"0B","Medium Water":"07","Small Water":"08","Smallest Water":"09","Square":"03","T":"01"}},"Always Drop\\Player 2":{"note":"","data":["801F013B 00??"],"options":{"Bar":"00","Big Water":"06","Bomb":"0A","Corner":"02","Down Bar":"05","Down Square":"04","Fireball":"0B","Medium Water":"07","Small Water":"08","Smallest Water":"09","Square":"03","T":"01"}},"Always Empty Drain":{"note":"","data":["801BF991 0000","811BF992 0000","811BF994 0000"],"options":null},"Infinite Ducks":{"note":"","data":["801BF94B 0009"],"options":null},"Infinite Lakes":{"note":"","data":["811BF93E 0009"],"options":null},"Mega Score":{"note":"","data":["801BF958 00FF","801EED04 00FF"],"options":null},"Practice Lessons Open":{"note":"","data":["810B0BAA 0008"],"options":null},"Stop Level Timer":{"note":"","data":["801BF9B2 00FF"],"options":null}},"CEA8B54F-7F21D503-C:50":{"Always Empty Drain":{"note":"","data":["801BF991 0000","811BF992 0000","811BF994 0000"],"options":null},"Bezerk Mode":{"note":"","data":["801BF9AF 00FF"],"options":null},"Stop Level Timer":{"note":"","data":["801BF9B2 00FF"],"options":null}},"CEDCDE1E-513A0502-C:50":{"Access Another World":{"note":"This is for Puzzle Mode","data":["8116D100 0001"],"options":null},"Bubble Pointer 1P V CPU":{"note":"","data":["8017E1FD 0001"],"options":null},"Bubble Pointer Puzzle":{"note":"","data":["801807CD 0001"],"options":null},"Infinite Credit":{"note":"","data":["80120171 00FF"],"options":null},"Max Points Aid":{"note":"","data":["81170E4A 25C2"],"options":null}},"CF8957AD-96D57EA9-C:45":{"Infinite\\Health":{"note":"For Overhead \u0026 Driving Levels","data":["81064DF0 42C8"],"options":null},"Unlock All\\Characters":{"note":"","data":["50000C01 0000","8006252D 0001"],"options":null},"Unlock All\\Levels":{"note":"","data":["50000301 0000","80062508 0001","50000801 0000","8006250C 0001","50000801 0000","80062516 0001","50000A01 0000","8006251F 0001"],"options":null}},"D0151AB0-FE5CA14B-C:45":{"Have All Weapons":{"note":"","data":["8120A8F6 FFFF"],"options":null},"Infinite\\Ammo (All Weapons)":{"note":"","data":["81261A40 A05B"],"options":null},"Infinite\\Armor":{"note":"","data":["8020A987 0064"],"options":null},"Infinite\\Experience":{"note":"","data":["8020A967 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["8020A965 0064"],"options":null},"Max\\Acro":{"note":"","data":["8020A96F 0007"],"options":null},"Max\\Attack":{"note":"","data":["8020A96B 0007"],"options":null},"Max\\Power":{"note":"","data":["8020A971 0007"],"options":null},"Max\\Speed":{"note":"","data":["8020A96D 0007"],"options":null},"Max\\Vitality":{"note":"","data":["8020A969 0007"],"options":null}},"D09BA538-1C1A5489-C:50":{"Car Select":{"note":"","data":["D00F5900 0000","800F5900 00??"],"options":{"Chevrolet Camaro":"03","Chrysler Jeep Jeepster (Prototype)":"08","Default":"00","Dodge Viper":"04","Donkey In Glass Box":"0E","Ferrari F40":"07","Hotdog":"0A","Hummer H1":"05","Jeep Wrangler":"02","McLaren F1":"09","Mitsubishi Eclipse":"01","Nintendo 64 Logo":"0C","Nintendo Power Car":"0B","Porsche 911 Turbo":"06","Taco":"0D"}},"Infinite\\Max Acceleration\\Player 1":{"note":"","data":["800F590D 0005"],"options":null},"Infinite\\Max Acceleration\\Player 2":{"note":"","data":["800F5AF9 0005"],"options":null},"Infinite\\Max Acceleration\\Player 3":{"note":"","data":["800F5CE5 0005"],"options":null},"Infinite\\Max Acceleration\\Player 4":{"note":"","data":["800F5ED1 0005"],"options":null},"Infinite\\Max Handling\\Player 1":{"note":"","data":["800F590C 0005"],"options":null},"Infinite\\Max Handling\\Player 2":{"note":"","data":["800F5AF8 0005"],"options":null},"Infinite\\Max Handling\\Player 3":{"note":"","data":["800F5CE4 0005"],"options":null},"Infinite\\Max Handling\\Player 4":{"note":"","data":["800F5ED0 0005"],"options":null},"Infinite\\Max Money\\Player 1":{"note":"","data":["800F5905 000F"],"options":null},"Infinite\\Max Money\\Player 2":{"note":"","data":["800F5AF1 000F"],"options":null},"Infinite\\Max Money\\Player 3":{"note":"","data":["800F5CDD 000F"],"options":null},"Infinite\\Max Money\\Player 4":{"note":"","data":["800F5EC9 000F"],"options":null},"Infinite\\Max Top Speed\\Player 1":{"note":"","data":["800F590E 0005"],"options":null},"Infinite\\Max Top Speed\\Player 2":{"note":"","data":["800F5AFA 0005"],"options":null},"Infinite\\Max Top Speed\\Player 3":{"note":"","data":["800F5CE6 0005"],"options":null},"Infinite\\Max Top Speed\\Player 4":{"note":"","data":["800F5ED2 0005"],"options":null},"Infinite\\Nitro\\Player 1":{"note":"","data":["800F590F 0009"],"options":null},"Infinite\\Nitro\\Player 2":{"note":"","data":["800F5AFB 0009"],"options":null},"Laps 2 Race":{"note":"","data":["80118E20 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"[Press F9]\\All Cars (All Modes)":{"note":"","data":["880EA08B 000E","88102A71 000E"],"options":null},"[Press F9]\\Jump To Season 6":{"note":"","data":["881023A8 0005"],"options":null}},"D124DBB7-7C9FF5E5-C:00":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["811744B8 FFFF","811744BA FFFF","811744BE 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FEC8 270F"],"options":null}},"D1A78A07-52A3DD3E-C:50":{"Access Secret Characters\\Bengal The Tiger":{"note":"","data":["800B4DB2 0011"],"options":null},"Access Secret Characters\\Festus":{"note":"","data":["800B0DC3 0001"],"options":null},"Access Secret Characters\\Kimmi \u0026 Cindy":{"note":"","data":["800B0DAA 0011"],"options":null},"Access Secret Characters\\Mark":{"note":"","data":["800B0DB7 0012"],"options":null},"Access Secret Characters\\Marvin The Alien":{"note":"","data":["800B0DC7 0001"],"options":null},"Access Secret Characters\\Robert \u0026 Delvis":{"note":"","data":["800B0DBA 0011"],"options":null},"Access Secret Characters\\Starr \u0026 Traci":{"note":"","data":["800B0DBE 0011"],"options":null},"Access Secret Characters\\Twfan \u0026 Eagamer":{"note":"","data":["800B0DAE 0011"],"options":null},"Infinite \u0026 Max Power-Ups":{"note":"","data":["800B4612 00F0","50000801 0000","800B4600 00FF"],"options":null}},"D1F7D8AB-293B0446-C:45":{"Extra Lives":{"note":"Not to be used with CLassic Mode, or it will freeze","data":["8007F90E 0063"],"options":null},"Extra Points":{"note":"Not to be used with CLassic Mode, or it will freeze","data":["8107F8FE FFFF"],"options":null},"Infinite Armageddon":{"note":"Not to be used with CLassic Mode, or it will freeze","data":["8107F892 0001"],"options":null},"Infinite Items On Pickup":{"note":"Not to be used with CLassic Mode, or it will freeze","data":["8107F8A2 270F"],"options":null},"Infinite Lives (Classic Asteroids)":{"note":"","data":["8007F90F 0009"],"options":null},"Unlock Classic Asteroids":{"note":"","data":["8106DF5A 0001"],"options":null}},"D25C1211-13EEBF67-C:44":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["8116FA44 FFFF","8116FA46 FFFF","8116FA4A 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FC1C 270F"],"options":null}},"D2BE2F14-38453788-C:45":{"0% in Move List":{"note":"","data":["81135620 0000"],"options":null},"Enable Everything":{"note":"","data":["8112E21C F000","8112E21E 09FF","8112E220 FFFF","8112E222 FFFF"],"options":null},"Infinite Creation Points":{"note":"","data":["80161313 0000"],"options":null},"Max\\Charisma":{"note":"","data":["8014E3EC 000A"],"options":null},"Max\\Mat Skills":{"note":"","data":["8014E3ED 000A"],"options":null},"Max\\Recovery":{"note":"","data":["8014E3EB 000A"],"options":null},"Max\\Speed":{"note":"","data":["8014E3EA 000A"],"options":null},"Max\\Strength":{"note":"","data":["8014E3E8 000A"],"options":null},"Max\\Toughness":{"note":"","data":["8014E3E9 000A"],"options":null}},"D3F97D49-6924135B-C:50":{"Infinite Eggs":{"note":"This is for All Yoshis All levels","data":["80285078 0006"],"options":null},"Infinite\\Health":{"note":"This is for All Yoshis All levels","data":["50000804 0000","800F954F 0008"],"options":null},"Infinite\\Lives":{"note":"This is for All Yoshis All levels","data":["800F958F 00FF"],"options":null}},"D43DA81F-021E1E19-C:45":{"Always Have Wallet Size":{"note":"","data":["8011A832 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C8675 0010","8111BAF6 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011B679 00FF","8011BAEF 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C8675 0000","8011BBA3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["800257D4 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011A816 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011A817 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011A818 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011A819 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023E9AF 0020","8023E9B5 0033"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F3688 0005","801F3848 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["8011A832 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011A833 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011A831 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A82C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A834 30FF","8111A836 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011A808 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011A80E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011A814 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011A80C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011A806 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011A810 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011A805 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011A804 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011A807 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011A80A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011A80D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011A811 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011A812 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011A809 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011A80F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011A815 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011A813 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011A80B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011A81F 0009"],"options":null},"Infinite\\Big Keys,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011A838 0007","8011A839 0007","8011A83A 0007","8011A83B 0007","8011A83C 0007","8011A83D 0007","8011A83E 0007","8011A83F 0007","8011A840 0007","8011A841 0007","8011A842 0007","8011A84F 0009","8011A850 0009","8011A851 0009","8011A852 0009","8011A853 0009","8011A859 0009","8011A85C 0009","8011A857 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011A824 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011A81E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011A81D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011A822 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011A81C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111A7C0 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011A7C9 0008","8011A7CA 0001","8011A7CC 0001","8011A7C3 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011A82A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111BB5C 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011BB61 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011BB65 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C8675 0020","811DAC50 40CB","D01C8675 0000","811DB472 000D","8011A800 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011A85F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011A861 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111A7BE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111BB58 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C8675 0020","811DB472 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C8675 0020","811DAC50 40CB"],"options":null},"Press L+R For FMV Select":{"note":"Hold down `L+R' after the Nintendo logo is spinning to see your favourite FMV","data":["D01C8675 0030","8011A793 00A0","D01C8675 0030","8011A79B ????"],"options":{"anondorf FMV":"F600","ire FMV":"F50F","lanet Making FMV":"F400","nding":"F80E","ore Triforce FMV":"F700","riforce FMV":"F200"}},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C8675 0010","8011A797 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111A79C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011A81A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011A81B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011A800 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011A7CE 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111B9B2 0000","8111B9B4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}},"Widescreen":{"note":"Originally by Darkludx","data":["81024A18 1000","81024A1A 0023","810920D8 3C07","810920DA 3FE3"],"options":null}},"D43DA81F-021E1E19-C:4A":{"Always Have Wallet Size":{"note":"","data":["8011A832 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C8675 0010","8111BAF6 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011B679 00FF","8011BAEF 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C8675 0000","8011BBA3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest 01).","data":["800257D4 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011A816 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011A817 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011A818 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011A819 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801D8D8A 0006","801F23C8 0001","801EEE48 0001"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.If you Use Black Gauntlets,They are as strong as the Golden Gauntlets. This code also gives you the Silver Scale and the Golden Scale and unlimited rupees.","data":["8011A832 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011A833 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011A831 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A82C 7777"],"options":null},"Have\\All Quest/Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A834 30FF","8111A836 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011A808 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011A80E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011A814 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011A80C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011A806 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011A810 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011A805 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011A804 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011A807 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011A80A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011A80D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011A811 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011A812 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011A809 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011A80F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011A815 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011A813 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011A80B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011A81F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011A838 0007","8011A839 0007","8011A83A 0007","8011A83B 0007","8011A83C 0007","8011A83D 0007","8011A83E 0007","8011A83F 0007","8011A840 0007","8011A841 0007","8011A842 0007","8011A84F 0009","8011A850 0009","8011A851 0009","8011A852 0009","8011A853 0009","8011A859 0009","8011A85C 0009","8011A857 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011A824 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011A81E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011A81D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011A822 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011A81C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111A7C0 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011A7C9 0008","8011A7CA 0001","8011A7CC 0001","8011A7C3 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011A82A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111BB5C 0001"],"options":null},"Infinite\\Timers\\All other Timers":{"note":"This cheat works on all Race Timers.Under Water with iron Boots etc.","data":["8011BB61 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011BB65 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C8675 0020","811DAC50 40CB","D01C8675 0000","811DB472 000D","8011A800 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011A85F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011A861 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111A7BE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111BB58 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C8675 0020","811DB472 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C8675 0020","811DAC50 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C8675 0010","8011A797 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111A79C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011A81A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011A81B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011A800 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011A7CE 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111B9B2 0000","8111B9B4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"D48944D1-B0D93A0E-C:4A":{"Enable All Courses":{"note":"","data":["8112A61E FFFF"],"options":null},"Have All Characters":{"note":"","data":["50000D02 0001","810BC834 0000"],"options":null},"Max Gold Mario Badges Player 1":{"note":"","data":["800BF87B 0063"],"options":null},"No Wind":{"note":"","data":["800B45F1 0000","800B45F3 0000"],"options":null},"Unlimited\\Power Hits\\Player 1":{"note":"","data":["801B0DF8 0004"],"options":null},"Unlimited\\Power Hits\\Player 2":{"note":"","data":["801B0EB0 0004"],"options":null},"Unlimited\\Power Hits\\Player 3":{"note":"","data":["801B0F68 0004"],"options":null},"Unlimited\\Power Hits\\Player 4":{"note":"","data":["801B1020 0004"],"options":null},"Zero Strokes Taken":{"note":"","data":["801B0313 0000"],"options":null}},"D52FE29D-8EA6A759-C:00":{"Infinite 9 Credits":{"note":"","data":["80279C8F 0009"],"options":null}},"D543BCD6-2BA5E256-C:50":{"Access All Rune Stones":{"note":"","data":["50000302 0000","810AE6D6 07FF"],"options":null},"Access All Window Shards":{"note":"","data":["50000302 0000","810AE6C6 07FF"],"options":null},"Access Skill Level 99":{"note":"And Get A Familiar","data":["800FD38A FFFF"],"options":null},"Always Max Turbo Attack":{"note":"","data":["810FD4AE FF64"],"options":null},"Get All Stuff":{"note":"Opens Up New Levels Etc,","data":["50001410 0000","810C5DA6 FFFF"],"options":null},"Infinite Use Of Items":{"note":"On Pick-Ups Only","data":["50001310 0000","800C5EC6 FFFF"],"options":null},"New Player Name":{"note":"","data":["810FD36C 4249","810FD36E 5443","810FD370 4820","810FD372 3639"],"options":null},"Start With Big Familiar":{"note":"Do not use this with Small Familiar Code","data":["810FD512 0202"],"options":null},"Start With Small Familiar":{"note":"Do not use this with Big Familiar Code","data":["810FD512 0102"],"options":null}},"D571C883-822D3FCF-C:50":{"Have All\\Keys":{"note":"This will give you the Grey \u0026 Red,Green \u0026 Gold Keys","data":["800BE268 00FF","800BE26D 00FF","800BE26E 00FF"],"options":null},"Have All\\Music Notes":{"note":"This will give you all 10 Music Notes","data":["50000A01 0000","800BE3A0 0001"],"options":null},"Infinite\\Health":{"note":"","data":["800BE2A7 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["800BE293 0009"],"options":null},"Max Money":{"note":"","data":["810BE296 03E7"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D017E975 0020","810DBD88 44CB"],"options":null}},"D5898CAF-6007B65B-C:50":{"All Multiplayer Characters":{"note":"","data":["8015C8E1 000F","8015C8E2 00FF","8015C8E3 00FF"],"options":null},"C4 Detector":{"note":"Slot 3","data":["80157C98 0001"],"options":null},"C4 Explosives":{"note":"Slot 1","data":["80157C93 0001"],"options":null},"Card Key":{"note":"Slot 3","data":["80157C9A 0001"],"options":null},"Flash Light":{"note":"Slot 2","data":["80157C95 0001"],"options":null},"Infinite\\Ammo and No Reloads":{"note":"","data":["80157C9B 0078","80157C94 0078","80157C90 0063","80179F6F 001E","80157C91 0063","80179F83 0008"],"options":null},"Infinite\\Health":{"note":"","data":["80179F8B 0064"],"options":null},"Key":{"note":"Slot 2","data":["80157C99 0001"],"options":null},"Max Power Mode":{"note":"","data":["8015C8E7 0001"],"options":null},"Sudden death \u0026 trial modes unlocked":{"note":"","data":["8015C8E0 00A0"],"options":null},"Time is always 00:20:38":{"note":"","data":["8010D342 0078"],"options":null},"Walk Through Walls/Objects":{"note":"Press Z Button And Joystick Forward Dont Stand Too Close To Wall/Object","data":["D0139BC4 0020","8117964C 43C7"],"options":null},"Weapon modifier":{"note":"","data":["80179F78 00??"],"options":{"Handgun":"00","Handgun w/ silencer":"14","Rocket launcher":"03","Shotgun":"02","Submachine gun":"01"}}},"D5B2339C-CABCCAED-C:50":{"Have\\Max Bonus":{"note":"","data":["810EC2CA 270F"],"options":null},"Have\\[All Guns \u0026 Infinite Ammo]":{"note":"Press C Left to receive all Guns","data":["81102C0A 0001","50000B04 0000","810EBF66 03E8"],"options":null},"Have\\[All Keys]":{"note":"","data":["810EBF60 0001","800EBF61 0001","810EBF62 0001"],"options":null},"Have\\[High Score]":{"note":"","data":["810EBF4E FFFF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["810EC2D2 03E7"],"options":null},"Infinite\\Health":{"note":"If you fall into Water just turn off the Infinite Health \u0026 put back on when you restrat.","data":["810EBF58 42D8"],"options":null},"Level Select":{"note":"","data":["81103D82 00??"],"options":{"Boss Mission Destroy Carrier Level":"10","Mission 1 Shock Strike":"01","Mission 10 Scramble Pylon":"0A","Mission 11 Herding Research":"0B","Mission 12 The Extractor":"0C","Mission 13 Nuke Tower":"0D","Mission 14 Mucus Storage":"0E","Mission 15 Depot Attack":"0F","Mission 16 Sterilization":"11","Mission 17 Scorpion Killer":"12","Mission 18 Core Nuke":"13","Mission 19 Gate Keeper":"14","Mission 2 Radar Run":"02","Mission 3 Return Fire":"03","Mission 4 The Sonar Tower":"04","Mission 5 Big Blips":"05","Mission 6 Short Fuse":"06","Mission 7 Outpost":"07","Mission 8 Sewer":"08","Mission 9 Clean Up":"09","Queen Mission":"15"}},"Level Select Menu":{"note":"","data":["811022CA 0EF0"],"options":null}},"D614E5BF-A76DBCC1-C:50":{"Access Level Select":{"note":"On the main menu Scroll down to make CHEATS visible to go into Level Select.For in-Game Cheats,Pause gameplay.","data":["810DD47C 8001"],"options":null},"Have\\All TARZAN Letters":{"note":"","data":["800DD485 00FF"],"options":null},"Have\\Coins Collected 100%":{"note":"","data":["800DD4B7 0064"],"options":null},"Have\\Full Portrait":{"note":"","data":["800DD484 00FF"],"options":null},"Have\\Level \u0026 Tokens Completed 100%":{"note":"","data":["800DD48F 0000","800DD490 0001","800DD491 0000"],"options":null},"Infinite\\Bonus Timer":{"note":"This is For All Timers on Bonus Levels","data":["8017373E 0025"],"options":null},"Infinite\\Green Weapon":{"note":"","data":["811921D6 0063"],"options":null},"Infinite\\Health":{"note":"","data":["81192300 0120"],"options":null},"Infinite\\Lives":{"note":"","data":["800DD4B2 00??"],"options":{"3 Lives":"03","99 Lives":"63"}},"Infinite\\Purple Weapon":{"note":"","data":["811921DA 0063"],"options":null},"Infinite\\Red Weapon":{"note":"","data":["811921D8 0063"],"options":null},"Press GS For\\Sabor Attacks\\Sabor 1 Hit Kill":{"note":"","data":["8924A49E 0001"],"options":null}},"D666593B-D7A25C07-C:4A":{"Buster Parts Slot Select\\Slot 01":{"note":"","data":["8020CED3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 02":{"note":"","data":["8020CED4 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 03":{"note":"","data":["8020CED5 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 04":{"note":"","data":["8020CED6 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 05":{"note":"","data":["8020CED7 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 06":{"note":"","data":["8020CED8 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 07":{"note":"","data":["8020CED9 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 08":{"note":"","data":["8020CEDA 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 09":{"note":"","data":["8020CEDB 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 10":{"note":"","data":["8020CEDC 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 11":{"note":"","data":["8020CEDD 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 12":{"note":"","data":["8020CEDE 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 13":{"note":"","data":["8020CEDF 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 14":{"note":"","data":["8020CEE0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 15":{"note":"","data":["8020CEE1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 16":{"note":"","data":["8020CEE2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 17":{"note":"","data":["8020CEE3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 18":{"note":"","data":["8020CEE4 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 19":{"note":"","data":["8020CEE5 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 20":{"note":"","data":["8020CEE6 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 21":{"note":"","data":["8020CEE7 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 22":{"note":"","data":["8020CEE8 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 23":{"note":"","data":["8020CEE9 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 24":{"note":"","data":["8020CEEA 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 25":{"note":"","data":["8020CEEB 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 26":{"note":"","data":["8020CEEC 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 27":{"note":"","data":["8020CEED 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 28":{"note":"","data":["8020CEEE 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 29":{"note":"","data":["8020CEEF 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 30":{"note":"","data":["8020CEF0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 31":{"note":"","data":["8020CEF1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 32":{"note":"","data":["8020CEF2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 33":{"note":"","data":["8020CEF3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 01":{"note":"","data":["8020CED0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 02":{"note":"","data":["8020CED1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 03":{"note":"","data":["8020CED2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Freeze Timer at 00:00":{"note":"","data":["811C44C4 0000","811C44C6 0000"],"options":null},"Have All\\Normal Items":{"note":"","data":["8120D720 FFFF","8120D722 FFFF","8120D724 FFFF","8120D726 FFFF"],"options":null},"Have All\\Special Items":{"note":"","data":["8120D71C FFFF","8120D71E FFFF"],"options":null},"Have All\\Special Weapons":{"note":"These are Equiped With Roll","data":["8120D710 FFFF"],"options":null},"Infinite\\Ammo":{"note":"","data":["8120CF8A 0080","8120CF92 0010","8120CF9A 0708","8120CFA2 0018","8120CFAA 0010","8120CFB2 0708","8120CFBA 0020","8120CFC2 0020","8120CFCA 0020","8120CFD2 0018","8120CFDA 012C","8120CFE2 0258"],"options":null},"Infinite\\Health":{"note":"","data":["8120CAEE 0050"],"options":null},"Infinite\\Max Zenny":{"note":"","data":["811C44D4 0098","811C44D6 967F"],"options":null},"Rapid Fire":{"note":"","data":["8020CF83 0002"],"options":null}},"D692CC5E-EC58D072-C:50":{"Have All\\Cups Select":{"note":"","data":["50002C02 0000","800CCF11 00??"],"options":{"Bronze Cup":"02","Gold Cup":"00","None (Default)":"04","Silver Cup":"01"}},"Have All\\Points":{"note":"","data":["810D8FE0 03E7"],"options":null},"Have All\\RB Medals":{"note":"","data":["810D8FF0 03E7"],"options":null},"Infinite\\Credits":{"note":"","data":["800BDFA5 0005"],"options":null},"Infinite\\Timer":{"note":"","data":["810D9088 44E9"],"options":null},"Infinite\\Turbos":{"note":"To enable this just select On or Off and when you press Z you will use your Turbos accordantly. Warning you can only have Infinite if you have some turbo level to begin with","data":["D00F2D16 0020","800CD091 00??"],"options":{"Off":"00","On":"08"}},"Laps To Race":{"note":"Here you can select how many laps you prefer.to race","data":["800C8909 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","7 Laps":"07","8 Laps":"08","9 Laps":"09","Laps":"06"}},"[Cheat Menu]":{"note":"Press Pause to access cheats.","data":["800CD089 00FF","800CD08A 00FF","800CD08B 00FF"],"options":null},"[Press F9]\\Enable All Courses":{"note":"","data":["890CCEF2 0B00","890CCEF4 0B00","890CCEF6 0B00"],"options":null},"[Press F9]\\Extra Characters":{"note":"","data":["890C642F 01FF"],"options":null},"[Press F9]\\Progress 100%":{"note":"","data":["50000801 0000","880CCF00 0003","50000801 0000","880CCF01 00FF"],"options":null}},"D6FBA4A8-6326AA2C-C:4A":{"Don't Hurt Mario\\Monsters":{"note":"","data":["A031D9E7 0001"],"options":null},"Funny Mario Options\\Limbo Mario":{"note":"Only Use This Code On Its Own,Do not use with any other Funny Mario Options.","data":["8031DC0C 00C0"],"options":null},"Funny Mario Options\\Mario's Cap\\Off \u0026 in His Hand":{"note":"Here you can Choose Options with Mario with His Cap off \u0026 in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["8031D9C7 00??"],"options":{"Cap In Hand":"20","Flying Mario Cap In Hand":"28","Invisible Mario Cap In Hand":"22","Invisible Metal Mario Cap In Hand":"26","Metal Mario Cap In Hand":"24"}},"Funny Mario Options\\Mario's Cap\\On \u0026 An Extra in His Hand":{"note":"Here you can Choose Options with Mario with His Cap on \u0026 An Extra in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["8031D9C7 00??"],"options":{"Cap In Hand":"30","Flying Mario Cap In Hand":"38","Invisible Mario Cap In Hand":"32","Invisible Metal Mario Cap In Hand":"36","Metal Mario Cap In Hand":"34"}},"Funny Mario Options\\Ostrich Mario":{"note":"Only Use This Code On Its Own,Do not use with any other Funny Mario Options.","data":["8031DC0C 0070"],"options":null},"Funny Mario Options\\Runs Backwards":{"note":"Only Use This Code On Its Own,Do not use with any other Funny Mario Options.","data":["8031DC0E 0080"],"options":null},"Have All\\175 Stars":{"note":"I have Managed to put a Have 175 Stars Option in for you,once the Code is activated, you will see it as a new option in Save Slot A.","data":["80203F0B 00FF","50000D02 0000","81203F0C FFFF"],"options":null},"Have All\\Maxed Out Coin Records For All Levels":{"note":"","data":["80203F25 00FF","50000702 0000","81203F26 FFFF"],"options":null},"Have\\Level Select":{"note":"","data":["8030CCBC 0001"],"options":null},"Infinite\\Energy \u0026 Breath":{"note":"","data":["8031DA6E 0008"],"options":null},"Infinite\\Lives":{"note":"","data":["8031DA6D 0064"],"options":null},"Mario's Cap\\Off Options":{"note":"Here you can Choose Options with Mario without His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["8031D9C7 00??"],"options":{"Flying Mario":"08","Invisible Flying Mario":"0A","Invisible Mario":"02","Invisible Metal Flying Mario":"0F","Mario No Cap":"01","Metal Flying Mario":"0D","Metal Mario":"04"}},"Mario's Cap\\On Options":{"note":"Here you can Choose Options with Mario with His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["8031D9C7 00??"],"options":{"Flying Mario":"19","Invisible Mario":"12","Invisible Metal Mario":"16","Metal Mario":"15"}},"Press GS For 255 Coins":{"note":"Press GS Once on a Level To Get that amount of Coins","data":["8931DA68 00FF"],"options":null}},"D715CC70-271CF5D6-C:50":{"Difficulty Select":{"note":"","data":["80336953 00??"],"options":{"Easy":"01","Hard":"03","Medium":"02","Very Easy":"00","Very hard":"04"}},"Easy Fatality Select":{"note":"","data":["8033584F 00??"],"options":{"Always Off":"00","Always On":"01"}},"Enable Cheat Menu":{"note":"","data":["80336973 0001"],"options":null},"Fatalities Select":{"note":"","data":["8033695C 00??"],"options":{"Off":"00","On":"01"}},"Infinite Max Continues":{"note":"","data":["80336963 0005"],"options":null},"Infinite Time":{"note":"","data":["8033F6FB 0064"],"options":null},"Level Select":{"note":"","data":["80335C27 00??"],"options":{"Ahau Kin":"04","Anubis":"02","Kabuki":"06","Off":"00","Pagan":"01","Voodoo":"05","Warhead":"03"}},"Music Select":{"note":"","data":["80336954 00??"],"options":{"Off":"00","On":"01"}},"Play As":{"note":"","data":["800EAF87 00??"],"options":{"Ahau Kin":"06","Anubis":"07","CY-5":"08","Exor":"0B","Grox":"0A","Kabuki Jo":"04","Maximus":"09","Pagan":"03","Tak":"01","Vallah":"05","Voodoo":"02","Warhead":"00"}},"Press D-Pad\\Left to Play As Grox":{"note":"Press D-Pad Left at the character Select screen to Replace Maximus with Grox. Do not use with the Play As Cheat","data":["D033C263 0004","800EAF87 000A"],"options":null},"Press D-Pad\\Right to Play As Exor":{"note":"Press D-Pad Right at the character Select screen to Replace Maximus with Exor. Do not use with the Play As Cheat","data":["D033C263 0008","800EAF87 000B"],"options":null},"Skill Select\\Player 1":{"note":"Max Skill makes the player more Skillful while easier to hurt where as Weak Skill is Non Skillful yet harder to harm.","data":["80335C1D 00??"],"options":{"Max Skill":"80","Weak Skill":"00"}},"Skill Select\\Player 2":{"note":"Max Skill makes the player more Skillful while easier to hurt where as Weak Skill is Non Skillful yet harder to harm.","data":["80335C20 00??"],"options":{"Max Skill":"80","Weak Skill":"00"}}},"D741CD80-ACA9B912-C:45":{"Car Select":{"note":"","data":["D00F50C0 0000","800F50C0 00??"],"options":{"Chevrolet Camaro":"03","Chrysler Jeep Jeepster (Prototype)":"08","Default":"00","Dodge Viper":"04","Donkey In Glass Box":"0E","Ferrari F40":"07","Hotdog":"0A","Hummer H1":"05","Jeep Wrangler":"02","McLaren F1":"09","Mitsubishi Eclipse":"01","Nintendo 64 Logo":"0C","Nintendo Power Car":"0B","Porsche 911 Turbo":"06","Taco":"0D"}},"Infinite\\Max Acceleration\\Player 1":{"note":"","data":["800F50CD 0005"],"options":null},"Infinite\\Max Acceleration\\Player 2":{"note":"","data":["800F52B9 0005"],"options":null},"Infinite\\Max Acceleration\\Player 3":{"note":"","data":["800F54A5 0005"],"options":null},"Infinite\\Max Acceleration\\Player 4":{"note":"","data":["800F5691 0005"],"options":null},"Infinite\\Max Handling\\Player 1":{"note":"","data":["800F50CC 0005"],"options":null},"Infinite\\Max Handling\\Player 2":{"note":"","data":["800F52B8 0005"],"options":null},"Infinite\\Max Handling\\Player 3":{"note":"","data":["800F54A4 0005"],"options":null},"Infinite\\Max Handling\\Player 4":{"note":"","data":["800F5690 0005"],"options":null},"Infinite\\Max Money\\Player 1":{"note":"","data":["800F50C5 000F"],"options":null},"Infinite\\Max Money\\Player 2":{"note":"","data":["800F52B1 000F"],"options":null},"Infinite\\Max Money\\Player 3":{"note":"","data":["800F549D 000F"],"options":null},"Infinite\\Max Money\\Player 4":{"note":"","data":["800F5689 000F"],"options":null},"Infinite\\Max Top Speed\\Player 1":{"note":"","data":["800F50CE 0005"],"options":null},"Infinite\\Max Top Speed\\Player 2":{"note":"","data":["800F52BA 0005"],"options":null},"Infinite\\Max Top Speed\\Player 3":{"note":"","data":["800F54A6 0005"],"options":null},"Infinite\\Max Top Speed\\Player 4":{"note":"","data":["800F5692 0005"],"options":null},"Infinite\\Nitro\\Player 1":{"note":"","data":["800F50CF 0009"],"options":null},"Infinite\\Nitro\\Player 2":{"note":"","data":["800F52BB 0009"],"options":null},"Laps 2 Race":{"note":"","data":["801186A0 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"[Press F9]\\All Cars (All Modes)":{"note":"","data":["880E990B 000E","881022F1 000E"],"options":null},"[Press F9]\\Jump To Season 6":{"note":"","data":["881022E8 0005"],"options":null}},"D7C762B6-F83D9642-C:4A":{"Have\\Max Bonus":{"note":"","data":["810EB4BA 270F"],"options":null},"Have\\[All Guns \u0026 Infinite Ammo]":{"note":"Press C Left to receive all Guns","data":["81101DFA 0001","50000B04 0000","810EB156 03E7"],"options":null},"Have\\[All Keys]":{"note":"","data":["810EB150 0101","800EB152 0001"],"options":null},"Have\\[High Score]":{"note":"","data":["810EB13E FFFF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["810EB4C0 0005"],"options":null},"Infinite\\Health":{"note":"If you fall into Water just turn off the Infinite Health \u0026 put back on after.","data":["810EB148 42D8"],"options":null},"Level Select":{"note":"","data":["8110FE32 00??"],"options":{"Boss Mission Destroy Carrier Level":"10","Mission 1 Shock Strike":"01","Mission 10 Scramble Pylon":"0A","Mission 11 Herding Research":"0B","Mission 12 The Extractor":"0C","Mission 13 Nuke Tower":"0D","Mission 14 Mucus Storage":"0E","Mission 15 Depot Attack":"0F","Mission 16 Sterilization":"11","Mission 17 Scorpion Killer":"12","Mission 18 Core Nuke":"13","Mission 19 Gate Keeper":"14","Mission 2 Radar Run":"02","Mission 3 Return Fire":"03","Mission 4 The Sonar Tower":"04","Mission 5 Big Blips":"05","Mission 6 Short Fuse":"06","Mission 7 Outpost":"07","Mission 8 Sewer":"08","Mission 9 Clean Up":"09","Queen Mission":"15"}},"Level Select Menu":{"note":"","data":["8110D1EA BF60"],"options":null}},"D81963C7-4271A3AA-C:45":{"Access All Levels":{"note":"","data":["801FC5E6 00FF","801FC5E8 00FF"],"options":null},"Extended Tongue":{"note":"","data":["81323382 FFFF"],"options":null},"Have 99 Crowns":{"note":"","data":["8024337B 0063"],"options":null},"Have All Levels Completed":{"note":"","data":["801FC5EA 0019","801FC5EB 0019","801FC5EC 0015","801FC5ED 0018","801FC5EE 0017","801FC5EF 0017"],"options":null},"Infinite Health":{"note":"","data":["80164923 000A"],"options":null},"Level Select":{"note":"","data":["80297A7B 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06"}}},"D83045C8-F29D3A36-C:50":{"Always 1st":{"note":"","data":["8013F040 0001"],"options":null},"Freeze All Timers":{"note":"","data":["8013F001 0000","8013F005 0000","8013F00A 0000"],"options":null},"Freeze Overall Timer":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8013EFF5 0001"],"options":null},"Language Select":{"note":"","data":["8008CF93 00??"],"options":{"English":"00","French":"01","German":"02"}},"Laps Of Race":{"note":"","data":["8013EFEF 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","Never Ending Laps":"06"}},"Level Select":{"note":"For this cheat to work,as soon as you put the cheat on you must turn it back off,if not you wont beable to quit a Race or even finish one.","data":["8013F2FB 00??"],"options":{"Bikini Island":"01","Canyon Rush":"00","China Town":"02","China Town Jam":"04","Neo Arena":"03","Neo Speed Way":"05"}},"Music Modifier":{"note":"","data":["800F715F 00??"],"options":{"Music Off":"00","Music On":"FF"}},"No Damage\\Player 1":{"note":"","data":["50000402 0000","8113F338 0000"],"options":null},"No Damage\\Player 2":{"note":"","data":["50000402 0000","811413D8 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["8013F2F5 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Play As\\Player 2":{"note":"","data":["8013F2F6 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Unlock Hidden Tracks \u0026 Cars":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8009127C 0001"],"options":null}},"D84EEA84-45B2F1B4-C:50":{"All Items":{"note":"","data":["50002402 0202","810ED130 0001","50004601 0000","800ED1B1 0003"],"options":null},"Item Modifier Codes\\Position 01":{"note":"","data":["800ED130 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 02":{"note":"","data":["800ED131 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 03":{"note":"","data":["800ED132 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 04":{"note":"","data":["800ED133 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 05":{"note":"","data":["800ED134 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 06":{"note":"","data":["800ED135 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 07":{"note":"","data":["800ED136 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 08":{"note":"","data":["800ED137 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 09":{"note":"","data":["800ED138 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 10":{"note":"","data":["800ED139 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 11":{"note":"","data":["800ED13A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 12":{"note":"","data":["800ED13B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 13":{"note":"","data":["800ED13C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 14":{"note":"","data":["800ED13D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 15":{"note":"","data":["800ED13E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 16":{"note":"","data":["800ED13F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 17":{"note":"","data":["800ED140 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 18":{"note":"","data":["800ED141 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 19":{"note":"","data":["800ED142 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 20":{"note":"","data":["800ED143 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 21":{"note":"","data":["800ED144 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 22":{"note":"","data":["800ED145 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 23":{"note":"","data":["800ED146 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 24":{"note":"","data":["800ED147 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 25":{"note":"","data":["800ED148 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 26":{"note":"","data":["800ED149 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 27":{"note":"","data":["800ED14A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 28":{"note":"","data":["800ED14B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 29":{"note":"","data":["800ED14C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 30":{"note":"","data":["800ED14D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 31":{"note":"","data":["800ED14E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 32":{"note":"","data":["800ED14F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 33":{"note":"","data":["800ED150 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 34":{"note":"","data":["800ED151 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 35":{"note":"","data":["800ED152 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 36":{"note":"","data":["800ED153 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 37":{"note":"","data":["800ED154 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 38":{"note":"","data":["800ED155 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 39":{"note":"","data":["800ED156 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 40":{"note":"","data":["800ED157 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 41":{"note":"","data":["800ED158 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 42":{"note":"","data":["800ED159 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 43":{"note":"","data":["800ED15A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 44":{"note":"","data":["800ED15B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 45":{"note":"","data":["800ED15C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 46":{"note":"","data":["800ED15D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 47":{"note":"","data":["800ED15E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 48":{"note":"","data":["800ED15F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}}},"D85C4E29-88E276AF-C:50":{"Extra Gems":{"note":"","data":["D0165241 0000","80165241 004B"],"options":null},"Full\\Bomb Power":{"note":"","data":["8016523F 0003"],"options":null},"Full\\Fire Power":{"note":"","data":["80165240 0008"],"options":null},"Infinite\\Health":{"note":"","data":["80165244 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["80165243 0009"],"options":null},"Max\\Bombs":{"note":"","data":["8016523F 0008"],"options":null},"Max\\Explosion":{"note":"","data":["80165240 0008"],"options":null},"Max\\Score":{"note":"","data":["80177608 FFFF"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D005A465 0020","81154178 41CB","D005A465 0020","D0154154 0000","80154154 0040"],"options":null}},"D889EB0F-277614F0-C:45":{"Unlock All ? Blocks":{"note":"","data":["50001C04 0000","8014FECB 0001"],"options":null},"Unlock All Power Blocks":{"note":"","data":["50000604 0000","8014FE0B 0001","50000704 0000","8014FE43 0001","50000804 0000","8014FE6F 0001","50000404 0000","8014FE93 0001","50000704 0000","8014FEAF 0001","8014FE2B 0001","8014FE2F 0001","8014FE63 0001"],"options":null},"Unlock All Warps":{"note":"","data":["8014FF3B 000F"],"options":null}},"D889EB0F-277614F0-C:4A":{"Unlock All ? Blocks":{"note":"","data":["50001C04 0000","8014FECB 0001"],"options":null},"Unlock All Power Blocks":{"note":"","data":["50000604 0000","8014FE0B 0001","50000704 0000","8014FE43 0001","50000804 0000","8014FE6F 0001","50000404 0000","8014FE93 0001","50000704 0000","8014FEAF 0001","8014FE2B 0001","8014FE2F 0001","8014FE63 0001"],"options":null},"Unlock All Warps":{"note":"","data":["8014FF3B 000F"],"options":null}},"D89E0E55-B17AA99A-C:50":{"Infinite Flight Time":{"note":"","data":["801A3F1F 0064"],"options":null},"Infinite Lives":{"note":"","data":["801A3E83 0063"],"options":null},"Infinite Mega Fuel":{"note":"","data":["801A3EEB 0064"],"options":null},"Infinite Shots":{"note":"","data":["801A3EB7 0064"],"options":null}},"D9EDD54D-6BB8E274-C:50":{"The Away Team Has Max Score":{"note":"","data":["81080082 FFFF"],"options":null},"The Home Team Has Max Score":{"note":"","data":["8107972A FFFF"],"options":null}},"D9F75C12-A8859B59-C:45":{"Infinite Time":{"note":"","data":["8114C298 000A"],"options":null},"Pick Your Kombat Zone":{"note":"","data":["81257544 00??"],"options":{"Armory":"14","Bell Tower":"07","Bridge":"05","Courtyard":"02","Dead Pool":"11","Graveyard":"09","Hidden Portal":"10","Jade's Desert":"0E","Kahn's Kave":"0D","Kahn's Tower":"04","Kombat Temple":"08","Lair":"18","Living Forest":"15","Lost Bridge":"0F","Pit":"03","Pit 2":"1A","Pit 3":"0A","Pit Bottom":"1C","Portal":"17","River Kombat":"0B","Rooftop":"13","Scorpion's Lair":"0C","Soul Chamber":"06","Star Bridge":"1B","Street":"01","Subway":"00","Tomb":"19","Tower":"16","Wasteland":"12"}},"Player 1\\Aggressor Energy Bar":{"note":"","data":["801698E1 0030"],"options":null},"Player 1\\Energy is":{"note":"","data":["8016984D 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 1\\Infinite Run":{"note":"","data":["81169854 0030"],"options":null},"Player 1\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B5225 0020","81169874 5100","D02B5225 0020","8116987C 5100"],"options":null},"Player 1\\Play As":{"note":"","data":["8016983D 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Player 2\\Aggressor Energy Bar":{"note":"","data":["801698E3 0030"],"options":null},"Player 2\\Energy is":{"note":"","data":["80169B21 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 2\\Infinite Run":{"note":"","data":["81169B28 0030"],"options":null},"Player 2\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B522D 0020","81169876 5100","D02B522D 0020","8116987E 5100"],"options":null},"Player 2\\Play As":{"note":"","data":["80169AE1 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Unlock Secret":{"note":"","data":["80169EE1 0004"],"options":null}},"DBF4EA9D-333E82C0-C:45":{"1 Lap Race":{"note":"","data":["D0122288 0000","80122288 0009"],"options":null},"999 Trick Game Pts":{"note":"","data":["81122040 03E7"],"options":null},"Access Gold Medals":{"note":"","data":["50000602 0000","810ECA22 0101"],"options":null},"Enable Sinobin":{"note":"","data":["8110AE5E 0100"],"options":null},"Infinite\\Cash":{"note":"","data":["801222EA C350"],"options":null},"Infinite\\Lucky Dip":{"note":"\"Lucky Dip is Infinite Usage Of What Ever You Get From Each Red Box\"","data":["80122294 0003"],"options":null},"Infinite\\Tools Options":{"note":"","data":["80122295 00??"],"options":{"Board":"06","Fan":"01","Ghost":"02","Mouse":"05","Pan":"03","Rock":"04"}},"No Frameskip":{"note":"Multiplayer is now smoother at 30fps.","data":["800DEED4 0000"],"options":null},"No Frameskip (ASM)":{"note":"","data":["80099324 0024","81099326 0000"],"options":null}},"DC36626A-3F3770CB-C:50":{"Cheat Menu\\All Weapons Enabled":{"note":"","data":["801CCC59 0001","801CCCC5 0001","801CDD25 0001","801CDE21 0001","801CDEB5 0001","801CDEB7 0001","801CDEE9 0001","801CE819 0001","801CE821 0001","801CE88D 0001","801CF9D5 0001"],"options":null},"Cheat Menu\\Cheat Menu Enabled":{"note":"","data":["800CF7D8 0001"],"options":null},"Cheat Menu\\Have All Game Type \u0026 Other":{"note":"","data":["810E1A3E 0FFF"],"options":null},"Cheat Menu\\Have All Weapons":{"note":"","data":["811CE810 FFFF"],"options":null},"Enable Debug Menu":{"note":"","data":["800DFCD0 0001"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810A21B4 A65B"],"options":null},"Invincibility":{"note":"","data":["800DF203 0001"],"options":null},"Time Always 00:00":{"note":"","data":["801A1D06 0000"],"options":null}},"DCB6EAFA-C6BBCFA3-C:4A":{"Always Berserk Mode":{"note":"","data":["801ACA6F 00FF"],"options":null},"Always Drop\\Player 1":{"note":"","data":["801ACA7B 00??"],"options":{"Bar":"00","Big Water":"06","Bomb":"0A","Corner":"02","Down Bar":"05","Down Square":"04","Fireball":"0B","Medium Water":"07","Small Water":"08","Smallest Water":"09","Square":"03","T":"01"}},"Always Drop\\Player 2":{"note":"","data":["801DD1FB 00??"],"options":{"Bar":"00","Big Water":"06","Bomb":"0A","Corner":"02","Down Bar":"05","Down Square":"04","Fireball":"0B","Medium Water":"07","Small Water":"08","Smallest Water":"09","Square":"03","T":"01"}},"Always Empty Drain":{"note":"","data":["801ACA51 0000","811ACA52 0000","811ACA54 0000"],"options":null},"Infinite Ducks":{"note":"","data":["801ACA0B 0009"],"options":null},"Infinite Lakes":{"note":"","data":["811AC9FE 0009"],"options":null},"Mega Score":{"note":"","data":["801ACA18 00FF","801DBDC4 00FF"],"options":null},"Practice Lessons Open":{"note":"","data":["810C3AEA 0008"],"options":null},"Stop Level Timer":{"note":"","data":["801ACA72 00FF"],"options":null}},"DCBC50D1-09FD1AA3-C:45":{"Debug Mode":{"note":"Press A or Start to enable the currently selected option. Pressing Start when in control of the player will also open the watch menu and close the debug menu.","data":["80036FCB 0001"],"options":null},"Everything Unlocked\\Save File 1":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","810699EE FFFF"],"options":null},"Everything Unlocked\\Save File 2":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8106992E FFFF"],"options":null},"Everything Unlocked\\Save File 3":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","81069A4E FFFF"],"options":null},"Everything Unlocked\\Save File 4":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8106998E FFFF"],"options":null},"Have All\\64 Characters In Multi Player":{"note":"Enables all Characters selectable to play as in Multi-Player","data":["8002B197 0040"],"options":null},"Have All\\Objectives Complete":{"note":"","data":["80036FD3 0001"],"options":null},"Have\\Infinite 00:00 Time (All Levels)":{"note":"","data":["8004837E 0000","8004838E 0000","80048396 0000","80079A22 0000","80079F26 0000"],"options":null},"Infinite\\Ammo (All Levels)":{"note":"","data":["80079E3B 0001"],"options":null},"Infinite\\Health (All levels)":{"note":"","data":["8100C0F4 0801","8100C0F6 8090","8100C0F8 AFA4","8100C0FA 0000","81060240 0004","81060242 7600","81060244 3C02","81060246 8008","81060248 8C42","8106024A 9EE0","8106024C 3401","8106024E 3F80","81060250 A441","81060252 00DC","81060254 0800","81060256 303F"],"options":null},"Mod Section\\Custom Weapon Grouping":{"note":"golden gun fun should replace slappers only! appears in the multi weapons. No weapons or ammunition crates appear inside the level. All players must rely on is their unarmed \"slapping\" skills.","data":["80048673 0013","81048678 3FC0","80048677 00D0","8004867F 000D","80048683 000A","8004868B 0013","81048690 3FC0","8004868F 00D0","80048697 000D","8004869B 000A","800486A3 0019","810486A8 3FC0","800486A7 00D3","800486AF 0006","800486B3 0003","800486BB 0019","810486C0 3FC0","800486BF 00D3","800486C7 0006","800486CB 0003","800486D3 0013","810486D8 3FC0","800486D7 00D0","800486DF 000D","800486E3 000A","800486EB 0013","810486F0 3FC0","800486EF 00D0","800486F7 000D","800486FB 000A","80048703 0019","81048708 3FC0","80048707 00D3","8004870F 0006","80048713 0003","8004871B 0019","81048720 3FC0","8004871F 00D3","80048727 0006","8004872B 0003","812AEA50 476F","812AEA52 6C64","812AEA54 656E","812AEA56 2047","812AEA58 756E","812AEA5A 2046","812AEA5C 756E","802AEA5E 0000"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 1\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811E6554 45E4","811E6558 43D5","811E655C C5A7","811E657C 801C","811E657E 6774","811E5164 45E4","811E5168 C383","811E516C 4492","811E518C 801C","811E518E D574","811E78C0 45AD","811E78C4 C383","811E78C8 4440","811E78E8 801C","811E78EA E464","811E4D18 45D0","811E4D1C 4307","811E4D20 C4FB","811E4D40 801C","811E4D42 75EC","811E6738 45CD","811E673C C383","811E6740 43F4","811E6760 801C","811E6762 A0DC","811E5450 45C2","811E5454 4356","811E5458 C598","811E5478 801C","811E547A 6A74","811E5240 4608","811E5244 4307","811E5248 43DC","811E5268 801C","811E526A 962C","811E691C 4606","811E6920 4321","811E6924 449D","811E6944 801C","811E6946 CBEC","801ED447 008A","801ED4DB 008B","801ED56F 008C","801ED603 008D","801ED697 008E","801ED72B 008F","801ED7BF 007D","801ED853 007E","801ED443 002A","801ED4D7 002A","801ED56B 002A","801ED5FF 002A","801ED693 002A","801ED727 002A","801ED7BB 002A","801ED84F 002A","801ED449 0000","801ED4DD 0000","801ED571 0000","801ED605 0000","801ED699 0000","801ED72D 0000","801ED7C1 0000","801ED855 0000","801ED44D 0000","801ED4E1 0000","801ED575 0000","801ED609 0000","801ED69D 0000","801ED731 0000","801ED7C5 0000","801ED859 0000","801EB743 002A","801EB745 0068","811EB746 277F","811EB748 1000","811EB74A 0262","811EB7C2 0190","801EB7C5 0000","811EB7C6 0258"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 2\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811EB7C8 0000","811EB7CC FFFF","811EB7CE FFFF","811EB7D2 0000","801EB7D5 0000","801EB7DB 0000","811EB7E2 0000","801EB7E7 0000","801EB843 002A","801EB845 0068","811EB846 2780","811EB848 1000","811EB84A 0262","811EB8C2 0190","801EB8C5 0000","811EB8C6 0258","811EB8C8 0000","811EB8CC FFFF","811EB8CE FFFF","811EB8D2 0000","801EB8D5 0000","801EB8DB 0000","811EB8E2 0000","801EB8E7 0000","801EB943 002A","801EB945 0068","811EB946 2791","811EB948 1000","811EB94A 0262","811EB9C2 0190","801EB9C5 0000","811EB9C6 0258","811EB9C8 0000","811EB9CC FFFF","811EB9CE FFFF","811EB9D2 0000","801EB9D5 0000","801EB9DB 0000","811EB9E2 0000","801EB9E7 0000","801EBA43 002A","801EBA45 0068","811EBA46 2792","811EBA48 1000","811EBA4A 0262","811EBAC2 0190","801EBAC5 0000","811EBAC6 0258","811EBAC8 0000","811EBACC FFFF","811EBACE FFFF","811EBAD2 0000","801EBAD5 0000","801EBADB 0000","811EBAE2 0000","801EBAE7 0000","801EBB45 00A0","801EBC45 00A0","801EBD45 00A0","801EBE45 00A0","801EBB47 0075","801EBC47 0076","801EBD47 0077","801EBE47 0078","801EBBE7 0001","801EBCE7 0001","801EBDE7 0001","801EBEE7 0001","801EC247 0071","801ECD47 0072","801ECE47 0074","801ECF47 006C","801ED047 0079","801ED147 0083","D01EBFC5 005A","801EBFC5 0000","D11EBFC6 0000","811EBFC6 F333","D11EBFC8 03E8","811EBFC8 0000"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 3\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["D11EBFCA 0000","811EBFCA F0C4","D11EBFCE 4CCC","811EBFCE 000A","D11EBFD2 4CCC","811EBFD2 000A","D11EBFD4 0003","811EBFD4 0000","D11EBFD6 0000","811EBFD6 02C4","801EBFD9 0004","801EBFDB 0000","811EBFE2 0384","801EBFE7 0004","801EBF45 009E","801EBF47 0084","801EBF48 0010","801EC2D9 0000","801EC447 0085","801EC547 0086","811EA6B6 2743","811EA73E 0114","811EA7F2 0115","811EA8A6 00A3","811EA92E 009D","811EA9E2 00A4","811EAA96 00DA","811EAB1E 00DB","811EABD2 00DF","811EAC86 0130","811EAD0E 008D","811EADC2 012E","811EAE76 0111","811EAEFE 2740","811EAFB2 2741","811EB066 00A0","811EB0EE 009E","811EB1A2 009F","811EB256 274F","811EB2DE 2750","811EB392 0117","811EB446 0131","811EB4CE 008E","811EB582 0132","811EB636 00A1","811EB6BE 0119","811EA62E 00FA","801ED3DF 0000","801ED2DF 0001","D0024337 0007","80024337 001F"],"options":null},"Mod Section\\Gain Access To\\Aztec Level Without Beating Secret Agent Or 00 Agent":{"note":"","data":["8002A8FB 001A"],"options":null},"Mod Section\\Gain Access To\\Egyptian Level Without Beating Secret Agent Or 00 Agent":{"note":"","data":["8002A8FB 001C"],"options":null},"Mod Section\\Have Cradle in multiplayer":{"note":"Puts the cradle graphic in the levels screen where the facility normally is in the multiplayer levels screen.Warning it doesn't allow you to enter the multiplayer levels screen,it should automatically Have\\selected cradle, which cannot be changed from the multiplayer menus","data":["8002B11D 0092","8002B11F 0093","8002B127 0029","8002B123 0008","802ADC8D 0052","802ADC8E 0041","802ADC8F 0044","802ADC90 004C","802ADC91 0045"],"options":null},"Mod Section\\Replace Cradle with Citadell hidden level":{"note":"","data":["8002A8F7 0029","8104468A 8970","81044690 3F44","81044692 BDEA","81044694 3F80","81044696 0000","81044698 4219","8104469A D89D","80069F80 00C4"],"options":null},"Mod Section\\Secret Island on Dam Level":{"note":"For the above code to work,Get to the 2nd guard tower \u0026 go down the ladder on the left hand side \u0026 to the end of the Dock, Press L \u0026 GS and you will be transfered in the water. Just keep walking straight \u0026 you will get to it. Obviously you can't actually climb ladders or anything, you will simply walkthrough anything on that Part, if you want to walk back to the Dock, when you come near it click the cheat back on \u0026 keep pressing L \u0026 GS untill you are back on it.","data":["D0064F31 0020","800D33ED 0050","880D33ED 0000"],"options":null},"Mod Section\\Walk through doors, objects":{"note":"","data":["800364CB 00??"],"options":{"Off":"01","On":"00"}},"Mod Section\\Weak Enemies":{"note":"","data":["8002CE48 0048"],"options":null}},"DCCF2134-9DD63578-C:50":{"Infinite Character Creation Points":{"note":"","data":["8017BB17 000A"],"options":null},"Left vs Right Side":{"note":"","data":["8017BB16 0005"],"options":null},"Max Score In Mini Games":{"note":"","data":["81116230 05F5","81116232 E0FF"],"options":null},"Maximum\\Back,Front,Left \u0026 Right Move":{"note":"","data":["8117BB14 000A"],"options":null},"Maximum\\Serve Smash":{"note":"","data":["8117BB0E 0A0A"],"options":null},"Maximum\\Stroke Spin":{"note":"","data":["8117BB12 0A0A"],"options":null},"Maximum\\Volley Lob":{"note":"","data":["8117BB10 0A0A"],"options":null},"Practice\\Balls Always Zero":{"note":"","data":["8011684F 0000"],"options":null},"Practice\\Time Always Zero":{"note":"","data":["8111684A 0000"],"options":null},"Scoreboard\\Max games bottom":{"note":"","data":["8011698F 0009"],"options":null},"Scoreboard\\Max games top":{"note":"","data":["8011698B 0009"],"options":null},"Scoreboard\\Max sets bottom":{"note":"","data":["80116987 0009"],"options":null},"Scoreboard\\Max sets top":{"note":"","data":["80116983 0009"],"options":null}},"DD26FDA1-CB4A6BE3-C:55":{"Bonus Stage Character Modifier (Training Mode)":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["8018F913 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Give Kirby A Wierd Blow-Up":{"note":"","data":["8025E898 000A"],"options":null},"Have All Characters":{"note":"","data":["810A5078 0FF0"],"options":null},"Jump off to win":{"note":"","data":["810A5282 0000"],"options":null},"P1 Press Down On D-Pad To Make Items Appear In Random Spots":{"note":"","data":["D109F6E4 0400","8118D7E2 0001"],"options":null},"Story Mode\\Always Get Pacifist (60,000 Points)":{"note":"","data":["810A52AE 0000"],"options":null},"Story Mode\\Infinite Time":{"note":"","data":["810A526E 43CB"],"options":null},"Story Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code could also result freezing at the end of the Level.","data":["800A527B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 1\\Infinite Lives":{"note":"","data":["800A5283 0004"],"options":null},"Story Mode\\Player 1\\Kirby B Button Move\\Congo Jungle":{"note":"","data":["8027120F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Fighting Polygon Team":{"note":"","data":["80262E5F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["8026924F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Kirby's Dreamland":{"note":"","data":["8026E27F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Master Hand Stage":{"note":"","data":["8027238F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Metal Mario Stage":{"note":"","data":["80263CD7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Peach's Castle":{"note":"","data":["802644DF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Planet Zebes":{"note":"","data":["802706E7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Saffron City":{"note":"","data":["802741D7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["80271837 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["8026958F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Low % Health":{"note":"","data":["810A52C6 0000"],"options":null},"Story Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A52EF 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 2\\Infinite Lives":{"note":"","data":["800A52F7 0004"],"options":null},"Story Mode\\Player 2\\Low % Health":{"note":"","data":["810A533A 0000"],"options":null},"Story Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A5363 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 3\\Infinite Lives":{"note":"","data":["800A536B 0004"],"options":null},"Story Mode\\Player 3\\Low % Health":{"note":"","data":["810A53AE 0000"],"options":null},"Story Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A53D7 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 4\\Infinite Lives":{"note":"","data":["800A53DF 0004"],"options":null},"Story Mode\\Player 4\\Low % Health":{"note":"","data":["810A5422 0000"],"options":null},"Story Mode\\Skip Straight To Master Hand":{"note":"","data":["800A5227 000D"],"options":null},"VS. Mode\\Have Mushroom Kindom":{"note":"","data":["800A5077 00FF"],"options":null},"VS. Mode\\Infinite Time":{"note":"","data":["810A545E 43CB"],"options":null},"VS. Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A546B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["8026412F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["8026C6C7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["8026E9F7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Low % Health":{"note":"","data":["810A54B6 0000"],"options":null},"VS. Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A54DF 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 2\\Low % Health":{"note":"","data":["810A552A 0000"],"options":null},"VS. Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A5553 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 3\\Low % Health":{"note":"","data":["810A559E 0000"],"options":null},"VS. Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A55C7 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 4\\Low % Health":{"note":"","data":["810A5612 0000"],"options":null}},"DD318CE2-B73798BA-C:45":{"Always On First Shot":{"note":"","data":["811DA47A 0001"],"options":null},"Club Type\\Irons Mods":{"note":"","data":["8012A473 00??"],"options":{"Cavity":"00","Conventional":"01"}},"Club Type\\Sand Wedge Mods":{"note":"","data":["8012A474 00??"],"options":{"58 Degrees":"00","60 Degrees":"01","62 Degrees":"02"}},"Club Type\\Woods Mods":{"note":"","data":["8012A472 00??"],"options":{"Metal Wood":"01","Persimmon":"02","Titan":"00"}},"Max Power":{"note":"","data":["8012A431 FFFF"],"options":null},"Max Putt":{"note":"","data":["8012A435 FFFF"],"options":null},"Max Recover":{"note":"","data":["8012A437 FFFF"],"options":null},"Max Technique":{"note":"","data":["8012A433 FFFF"],"options":null},"Select Club":{"note":"","data":["801DA496 00??"],"options":{"1I":"05","1W":"00","2I":"06","2W":"01","3I":"07","3W":"02","4I":"08","4W":"03","5I":"09","5W":"04","6I":"0A","7I":"0B","8I":"0C","9I":"0D","AW":"0F","PW":"0E","Putter":"11","SW":"10"}}},"DDD93C85-DAE381E8-C:45":{"Infinite\\Lives":{"note":"","data":["800A3648 0009"],"options":null},"Infinite\\Specials":{"note":"","data":["800A3649 0003"],"options":null},"Max\\Combo":{"note":"","data":["810A3644 7FFF"],"options":null},"Max\\Lower Level":{"note":"","data":["800A3658 0003"],"options":null},"Max\\Score":{"note":"","data":["800A3628 0063","800A3629 0063"],"options":null},"Max\\Upper Level":{"note":"","data":["800A3659 0063"],"options":null},"Play As":{"note":"","data":["800A364C 00??"],"options":{"Character 1":"00","Character 2":"01","Character 3":"02"}},"Status Modifier":{"note":"","data":["800A364A 00??"],"options":{"High":"01","Low":"03","Mid":"02"}},"Widescreen":{"note":"Clearing Issues Near Edges of Screen","data":["810754EC 3FE3"],"options":null}},"DDF460CC-3CA634C0-C:45":{"All levels Complete":{"note":"","data":["50004002 0000","810A2218 0001"],"options":null},"Carrington Institute\\Have 255 targets destroyed":{"note":"","data":["810B1E34 00FF"],"options":null},"Carrington Institute\\Have 999 points in Firing Range":{"note":"","data":["810B1E32 03E7"],"options":null},"Carrington Institute\\Have Infinite time in Firing Range":{"note":"","data":["810B1E2E 004D"],"options":null},"Have All\\Weapons\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80207F10 0007","801EEF10 0007","801D5F10 0007"],"options":null},"Have All\\Weapons\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80209B80 0007","801F0B80 0007","801D7B80 0007"],"options":null},"Infinite Ammo\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8020769F 00FF","801EE69F 00FF","801D569F 00FF","80206EFB 00FF","801EDEFB 00FF","801D4EFB 00FF"],"options":null},"Infinite Ammo\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8020930F 00FF","801F030F 00FF","801D730F 00FF","80208B6B 00FF","801EFB6B 00FF","801D6B6B 00FF"],"options":null},"Infinite Health\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8120677C 3F80","811ED77C 3F80","811D477C 3F80"],"options":null},"Infinite Health\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["812083EC 3F80","811EF3EC 3F80","811D63EC 3F80"],"options":null},"Infinite Shield\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81206790 3F80","811E4950 3F80","811CB950 3F80"],"options":null},"Infinite Shield\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["811FF5C0 3F80","811E65C0 3F80","811CD5C0 3F80"],"options":null},"Multi\\Press B To Levitate\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7E4 0040","811BB720 40F2","D009C7E4 0040","801BB6D3 0000"],"options":null},"Multi\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7EC 0040","811BD390 40F2","D009C7EC 0040","801BD343 0000"],"options":null},"Multi\\Press B To Levitate\\Player 3":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7F4 0040","811BF000 40F2","D009C7F4 0040","801BEFB3 0000"],"options":null},"Multi\\Press B To Levitate\\Player 4":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7FC 0040","811C0C70 40F2","D009C7FC 0040","801C0C23 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7E4 0040","81206720 40F2","D009C7E4 0040","802066D3 0000","D009C7E4 0040","811ED720 40F2","D009C7E4 0040","801ED6D3 0000","D009C7E4 0040","811D4720 40F2","D009C7E4 0040","801D46D3 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7EC 0040","81208390 40F2","D009C7EC 0040","80208343 0000","D009C7EC 0040","811EF390 40F2","D009C7EC 0040","801EF343 0000","D009C7EC 0040","811D6390 40F2","D009C7EC 0040","801D6343 0000"],"options":null},"The Ultimate All In One":{"note":"The Ultimate All In One activate's solo missions, give all medals on solo missions, activate cheats, activate cinemas, and who knows what else. I just don't have the time to identify these codes. I know that some of this is creditted to Zap2. I don't have the time to cut those codes out.","data":["800884F3 0001","8008850E 0001","80088575 0001","50000302 0000","80088572 0001","8008858C 0001","8008858D 0001","800885A6 0001","800885A9 0001","800885C0 0001","800885DA 0001","800885DC 0001","800885F4 0001","800885F5 0001","8008860E 0001","80088610 0001","80088612 0001","80088628 0001","50000501 0000","80088642 0001","50000501 0000","8008865C 0001","50000501 0000","80088676 0001","50000501 0000","80088690 0001","50000501 0000","800886AA 0001","50000501 0000","800886C4 0001","50000501 0000","800886DE 0001","50000501 0000","800886F8 0001","50000501 0000","80088712 0001","50000501 0000","8008872C 0001","50000501 0000","80088746 0001","50000501 0000","80088760 0001","50000501 0000","8008877A 0001","50000501 0000","80088794 0001","50000501 0000","800887AE 0001","800A2219 0001","50003E02 0000","800A221D 0001","50000B01 0000","800ACCC9 0001","50000901 0000","800ACCD5 0001","50000401 0000","800ACCDF 0001","50000301 0000","800ACCE4 0001","800ACCE8 0001","800ACCE9 0001","800ACCEB 0001","800ACCEC 0001","50000901 0000","800ACCEE 0001","800ACCF8 0001","50002101 0000","800ACCFA 0001","800ACD12 0001","800ACD15 0001","800ACD16 0001","800ACDEA 0001","800ACD3A 0001"],"options":null}},"DEB78BBA-52F6BD9D-C:45":{"Away Team\\Scores 0":{"note":"","data":["8005FA47 0000"],"options":null},"Away Team\\Scores 50":{"note":"","data":["8005FA47 0032"],"options":null},"Enable\\All Stadiums":{"note":"","data":["50000801 0000","8004A7F0 00FF"],"options":null},"Enable\\All Teams":{"note":"","data":["50000E01 0000","8004ADD0 00FF"],"options":null},"Home Team\\Scores 0":{"note":"","data":["8005CF87 0000"],"options":null},"Home Team\\Scores 50":{"note":"","data":["8005CF87 0032"],"options":null},"Infinite\\Time Outs Away Team":{"note":"","data":["8005FA49 0003"],"options":null},"Infinite\\Time Outs Home Team":{"note":"","data":["8005CF89 0003"],"options":null},"No Time-Outs\\Away Team":{"note":"","data":["8005FA49 0000"],"options":null},"No Time-Outs\\Home Team":{"note":"","data":["8005CF89 0000"],"options":null},"Press L For First Down\\Player 1":{"note":"","data":["D0066F2D 0020","810612E0 0001"],"options":null},"Press L For First Down\\Player 2":{"note":"","data":["D0066F35 0020","810612E0 0001"],"options":null},"Press L For First Down\\Player 3":{"note":"","data":["D0066F3D 0020","810612E0 0001"],"options":null},"Press L For First Down\\Player 4":{"note":"","data":["D0066F45 0020","810612E0 0001"],"options":null},"Press L For More Time To Choose Play\\Player 1":{"note":"","data":["D0066F2D 0020","80061245 0028"],"options":null},"Press L For More Time To Choose Play\\Player 2":{"note":"","data":["D0066F35 0020","80061245 0028"],"options":null},"Press L For More Time To Choose Play\\Player 3":{"note":"","data":["D0066F3D 0020","80061245 0028"],"options":null},"Press L For More Time To Choose Play\\Player 4":{"note":"","data":["D0066F45 0020","80061245 0028"],"options":null},"Press R For Fourth Down\\Player 1":{"note":"","data":["D0066F2D 0010","810612E0 0004"],"options":null},"Press R For Fourth Down\\Player 2":{"note":"","data":["D0066F35 0010","810612E0 0004"],"options":null},"Press R For Fourth Down\\Player 3":{"note":"","data":["D0066F3D 0010","810612E0 0004"],"options":null},"Press R For Fourth Down\\Player 4":{"note":"","data":["D0066F45 0010","810612E0 0004"],"options":null}},"DED0DD9A-E78225A7-C:50":{"Always 1st \u0026 final time 00:00.00":{"note":"All Levels","data":["50000301 0000","801CE959 0000"],"options":null},"Difficulty Select":{"note":"","data":["8007C1C0 00??"],"options":{"Amateur":"00","Intermediate":"01","Mirror Mode":"03","Professional":"02"}},"Frantic Finale\\Colorado\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801BDB3B 00FF"],"options":null},"Frantic Finale\\Colorado\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7432 0063"],"options":null},"Frantic Finale\\Hawaii\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B75BB 00FF"],"options":null},"Frantic Finale\\Hawaii\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7B12 0063"],"options":null},"Frantic Finale\\Oregon\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801BABEB 00FF"],"options":null},"Frantic Finale\\Oregon\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B44E2 0063"],"options":null},"Frantic Finale\\Texas\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801BB38B 00FF"],"options":null},"Frantic Finale\\Texas\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B4C82 0063"],"options":null},"Freewayphobia\\Chicago\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B758B 00FF"],"options":null},"Freewayphobia\\Chicago\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7AE2 0063"],"options":null},"Freewayphobia\\Dakota\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B159B 00FF"],"options":null},"Freewayphobia\\Dakota\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B2CB2 0063"],"options":null},"Freewayphobia\\New York\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B4A5B 00FF"],"options":null},"Freewayphobia\\New York\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B4FB2 0063"],"options":null},"Freewayphobia\\Seattle\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B417B 00FF"],"options":null},"Freewayphobia\\Seattle\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B5892 0063"],"options":null},"Level Select":{"note":"","data":["801AD159 00??"],"options":{"Contest":"07","Frantic Finale":"04","Freewayphobia":"02","Motor Way Mania":"01","Options":"08","Practice":"06","Time Trial":"05","Traffic Troubles":"00","Vitory Vehicles":"03"}},"Motor Way Mania\\Alaska\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B280B 00FF"],"options":null},"Motor Way Mania\\Alaska\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B3F22 0063"],"options":null},"Motor Way Mania\\Las Vegas\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B6E9B 00FF"],"options":null},"Motor Way Mania\\Las Vegas\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B85B2 0063"],"options":null},"Motor Way Mania\\Los Angeles\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B207B 00FF"],"options":null},"Motor Way Mania\\Los Angeles\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B3792 0063"],"options":null},"Motor Way Mania\\Philadelphia\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B7DEB 00FF"],"options":null},"Motor Way Mania\\Philadelphia\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B9502 0063"],"options":null},"Play As":{"note":"","data":["800D33D1 00??"],"options":{"Daisy Duck":"01","Dewey":"07","Donald Duck":"05","Goofy":"02","Huey":"06","Louie":"08","Lugwig Von Drake":"09","Mickey Mouse":"00","Minnie Mouse":"04","Pete":"03"}},"Re-name Characters\\Daisy\\Letter 1":{"note":"","data":["801E39CE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 2":{"note":"","data":["801E39CF 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 3":{"note":"","data":["801E39D0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 4":{"note":"","data":["801E39D1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 5":{"note":"","data":["801E39D2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 1":{"note":"","data":["801E39E4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 2":{"note":"","data":["801E39E5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 3":{"note":"","data":["801E39E6 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 4":{"note":"","data":["801E39E7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 5":{"note":"","data":["801E39E8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 1":{"note":"","data":["801E39C7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 2":{"note":"","data":["801E39C8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 3":{"note":"","data":["801E39C9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 4":{"note":"","data":["801E39CA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 5":{"note":"","data":["801E39CB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 6":{"note":"","data":["801E39CC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 1":{"note":"","data":["801E39D4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 2":{"note":"","data":["801E39D5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 3":{"note":"","data":["801E39D6 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 4":{"note":"","data":["801E39D7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 5":{"note":"","data":["801E39D8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 1":{"note":"","data":["801E39DF 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 2":{"note":"","data":["801E39E0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 3":{"note":"","data":["801E39E1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 4":{"note":"","data":["801E39E2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 1":{"note":"","data":["801E39EA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 2":{"note":"","data":["801E39EB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 3":{"note":"","data":["801E39EC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 4":{"note":"","data":["801E39ED 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 5":{"note":"","data":["801E39EE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 1":{"note":"","data":["801E39F0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 2":{"note":"","data":["801E39F1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 3":{"note":"","data":["801E39F2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 4":{"note":"","data":["801E39F3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 5":{"note":"","data":["801E39F4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 6":{"note":"","data":["801E39F5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 1":{"note":"","data":["801E39B9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 2":{"note":"","data":["801E39BA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 3":{"note":"","data":["801E39BB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 4":{"note":"","data":["801E39BC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 5":{"note":"","data":["801E39BD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 6":{"note":"","data":["801E39BE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 1":{"note":"","data":["801E39C0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 2":{"note":"","data":["801E39C1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 3":{"note":"","data":["801E39C2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 4":{"note":"","data":["801E39C3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 5":{"note":"","data":["801E39C4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 6":{"note":"","data":["801E39C5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 1":{"note":"","data":["801E39DA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 2":{"note":"","data":["801E39DB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 3":{"note":"","data":["801E39DC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 4":{"note":"","data":["801E39DD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Traffic Troubles\\Grand Canyon\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B8CCB 00FF"],"options":null},"Traffic Troubles\\Grand Canyon\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B8CF2 0063"],"options":null},"Traffic Troubles\\Indianapolis\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B430B 00FF"],"options":null},"Traffic Troubles\\Indianapolis\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B4332 0063"],"options":null},"Traffic Troubles\\New Mexico\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B58DB 00FF"],"options":null},"Traffic Troubles\\New Mexico\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B5902 0063"],"options":null},"Traffic Troubles\\San Fransisco\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B75DB 00FF"],"options":null},"Traffic Troubles\\San Fransisco\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7602 0063"],"options":null},"Unlock Everything":{"note":"This will unlock all characters, tracks, mirror mode, all in-game cheats, postcards, pluto's collar and give you all Trophies for every track and difficulties. To have this cheat save to mempak, enable it and then go into the Options Menu and disable the cheat. Go to the Wide-Screen Settings and Change it to Wide-Screen [16.9] and then the B button to get back to Wide-Screen Settings, now go back into Wide-Screen [16.9] and change it back to Normal [4.3].and press the B button until you come back to the main Options Menu.Close the game and load it again to see everything saved to the Mempak and unlocked.","data":["800D3478 008F","800D3479 0094","800D347A 0003","800D347C 0001","800D347F 0080","50000502 0000","800D3480 0009","50000502 0000","800D3481 0024","800D348A 0015","800D348B 007F","800D348C 0001","800D348D 00FF","800D348E 0004","800D348F 0022"],"options":null},"Victory Vehicles\\Everglades\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B516B 00FF"],"options":null},"Victory Vehicles\\Everglades\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B56C2 0063"],"options":null},"Victory Vehicles\\Malibu\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B6BFB 00FF"],"options":null},"Victory Vehicles\\Malibu\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7152 0063"],"options":null},"Victory Vehicles\\Washington DC\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801BCBAB 00FF"],"options":null},"Victory Vehicles\\Washington DC\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801BD102 0063"],"options":null},"Victory Vehicles\\Yellowstone\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B2A0B 00FF"],"options":null},"Victory Vehicles\\Yellowstone\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B2F62 0063"],"options":null}},"DEE584A2-0F161187-C:45":{"Have All\\Cars":{"note":"","data":["50000C01 0000","80097A18 0001"],"options":null},"Have All\\Difficulty Levels":{"note":"","data":["80097A17 0003"],"options":null},"Have All\\Tracks":{"note":"","data":["50000C01 0000","80095CC8 0001"],"options":null},"Infinite Health\\Player 1\\Alpine Ridge":{"note":"","data":["D02BA164 0080","802BA173 00EB"],"options":null},"Infinite Health\\Player 1\\Aztec Ruins":{"note":"","data":["D01FC428 0080","801FC437 00BE"],"options":null},"Infinite Health\\Player 1\\Bayou Run":{"note":"","data":["D02862BC 0080","802862CB 00EB"],"options":null},"Infinite Health\\Player 1\\Destruction Junction":{"note":"","data":["D029A9B0 0080","8029A9BF 00E1"],"options":null},"Infinite Health\\Player 1\\Ground Zero":{"note":"","data":["D01F64C8 0080","801F64D7 00BE"],"options":null},"Infinite Health\\Player 1\\Junkyard":{"note":"","data":["D0205B7C 0080","80205B8B 00BE"],"options":null},"Infinite Health\\Player 1\\Metro Challenge":{"note":"","data":["D02EDB18 0080","802EDB27 00E1"],"options":null},"Infinite Health\\Player 1\\Midnyte Rumble":{"note":"","data":["D030CC0C 0080","8030CC1B 00EB"],"options":null},"Infinite Health\\Player 1\\Seascape Sprint":{"note":"","data":["D02D4C24 0080","802D4C33 00E1"],"options":null},"Infinite Health\\Player 1\\Sunset Canyon":{"note":"","data":["D0303EA8 0080","80303EB7 00EB"],"options":null},"Infinite Health\\Player 1\\Terminal Impact":{"note":"","data":["D02B5F2D 0080","802B56B3 00E1"],"options":null},"Infinite Health\\Player 1\\Urban Mayhem":{"note":"","data":["D0203F10 0080","80203F1F 00C8"],"options":null},"Infinite Health\\Player 2\\Alpine Ridge":{"note":"","data":["D02C8BD0 0080","802C8BDF 00B4"],"options":null},"Infinite Health\\Player 2\\Aztec Ruins":{"note":"","data":["D0217C50 0080","80217C5F 00A0"],"options":null},"Infinite Health\\Player 2\\Bayou Run":{"note":"","data":["D0295190 0080","8029519F 00B4"],"options":null},"Infinite Health\\Player 2\\Destruction Junction":{"note":"","data":["D02B61D0 0080","802B61DF 00B4"],"options":null},"Infinite Health\\Player 2\\Ground Zero":{"note":"","data":["D0211D10 0080","80211D1F 00A0"],"options":null},"Infinite Health\\Player 2\\Junkyard":{"note":"","data":["D0215050 0080","8021505F 00A0"],"options":null},"Infinite Health\\Player 2\\Metro Challenge":{"note":"","data":["D02FCC10 0080","802FCC1F 00B4"],"options":null},"Infinite Health\\Player 2\\Midnyte Rumble":{"note":"","data":["D032ADD0 0080","8032ADDF 00B4"],"options":null},"Infinite Health\\Player 2\\Seascape Sprint":{"note":"","data":["D02E2D50 0080","802E2D5F 00E1"],"options":null},"Infinite Health\\Player 2\\Sunset Canyon":{"note":"","data":["D0312810 0080","8031281F 00B4"],"options":null},"Infinite Health\\Player 2\\Terminal Impact":{"note":"","data":["D02C4550 0080","802C455F 00E1"],"options":null},"Infinite Health\\Player 2\\Urban Mayhem":{"note":"","data":["D0235E50 0080","80235E5F 00A0"],"options":null},"Max Bonus Points\\01: Seascape Sprint":{"note":"","data":["812D4C3E 03E7"],"options":null},"Max Bonus Points\\02: Metro Challenge":{"note":"","data":["812EDB32 03E7"],"options":null},"Max Bonus Points\\03: Junkyard":{"note":"","data":["81205B9A 03E7"],"options":null},"Max Bonus Points\\04: Terminal Impact":{"note":"","data":["812B56BE 03E7"],"options":null},"Max Bonus Points\\05: Destruction Junction":{"note":"","data":["8129A9CA 03E7"],"options":null},"Max Bonus Points\\06: Aztec Ruins":{"note":"","data":["81095D36 03E7"],"options":null},"Max Collisions Points\\01: Seascape Sprint":{"note":"","data":["812D4C3A 03E7"],"options":null},"Max Collisions Points\\02: Metro Challenge":{"note":"","data":["812EDB2E 03E7"],"options":null},"Max Collisions Points\\03: Junkyard":{"note":"","data":["81205B92 03E7"],"options":null},"Max Collisions Points\\04: Terminal Impact":{"note":"","data":["812B56BA 03E7"],"options":null},"Max Collisions Points\\05: Destruction Junction":{"note":"","data":["8129A9C6 03E7"],"options":null},"Max Collisions Points\\06: Aztec Ruins":{"note":"","data":["81095D06 03E7"],"options":null},"Max Points Aid":{"note":"","data":["8111EF4E 03E7"],"options":null}},"DEE596AB-AF3B7AE7-C:45":{"Always Special\\Player 1":{"note":"","data":["800F9D35 0008"],"options":null},"Always Special\\Player 2":{"note":"","data":["800FA0E5 0008"],"options":null},"Always Special\\Player 3":{"note":"","data":["800FA495 0008"],"options":null},"Always Special\\Player 4":{"note":"","data":["800FA845 0008"],"options":null},"Character Select\\Player 1":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890F9D36 0240","890F9D60 42B4","8107E8B2 ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 2":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA0E6 0240","890FA110 42B4","8107E8B6 ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 3":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA496 0240","890FA4C0 42B4","8107E8BA ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 4":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA846 0240","890FA870 42B4","8107E8BE ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Extra Characters \u0026 Modes":{"note":"","data":["8107F07C FFFF"],"options":null},"Get Title Belt In 1-Match":{"note":"","data":["80038AAB 0008"],"options":null},"Infinite Time":{"note":"","data":["800FAF87 0000"],"options":null},"Infinite Time Out Of Ring":{"note":"","data":["800FACE8 0014"],"options":null},"Spirit Select\\Player 1":{"note":"","data":["800F9D25 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 2":{"note":"","data":["800FA0D5 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 3":{"note":"","data":["800FA485 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 4":{"note":"","data":["800FA835 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Ultimate Code\\Player 1":{"note":"","data":["800F9D24 0064"],"options":null},"Ultimate Code\\Player 2":{"note":"","data":["800FA0D4 0064"],"options":null},"Ultimate Code\\Player 3":{"note":"","data":["800FA484 0064"],"options":null},"Ultimate Code\\Player 4":{"note":"","data":["800FA834 0064"],"options":null},"Weapon Select\\Player 1":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800F9D31 0003","800F98E1 00??","800F98E2 0000","800F99A0 0000"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 2":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA0E1 0003","800F9911 00??","800F9912 0001","800F99A1 0001"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 3":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA491 0003","800F9941 00??","800F9942 0002","800F99A2 0002"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 4":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA841 0003","800F9971 00??","800F9972 0003","800F99A3 0003"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}}},"DF331A18-5FD4E044-C:45":{"1 Lap Race":{"note":"Do not put this on with Total Number of Laps Code","data":["810495AE 0001"],"options":null},"Beat Championship Mode Easily":{"note":"","data":["80223E3B 0255"],"options":null},"Both Players Can Be Dale E":{"note":"","data":["80046538 0003"],"options":null},"Have CPU Control Car Player 1":{"note":"","data":["D0092985 0020","8015CC5C 0001","D0092985 0010","8015CC5C 0000"],"options":null},"Infinite Fuel\\Player 1":{"note":"","data":["81220502 3E80"],"options":null},"Infinite Fuel\\Player 2":{"note":"","data":["81230472 3E80"],"options":null},"Maximum\\Acceleration":{"note":"","data":["800C7113 0000"],"options":null},"Maximum\\Pit Distance":{"note":"","data":["800C7110 0000"],"options":null},"Maximum\\Top Speed":{"note":"","data":["800C7111 0000"],"options":null},"Race Forever":{"note":"","data":["810465AE FDE8"],"options":null},"Total Number Of Laps":{"note":"","data":["80046553 00??"],"options":{"1 lap":"01","2 lap":"02","3 lap":"03","4 lap":"04","5 lap":"05","6 lap":"06","7 lap":"07","8 lap":"08","9 lap":"09"}}},"DF574191-9EB5123D-C:45":{"Have 231 Marbles":{"note":"","data":["D00E9FF3 0000","800E9FF3 03E7"],"options":null},"Have All Gold Udders":{"note":"","data":["50002802 0000","810C625A 0101"],"options":null},"Infinite Banana Peel Ammo":{"note":"","data":["810C6976 03E7"],"options":null},"Infinite Blaster Ammo":{"note":"","data":["810C6916 03E7"],"options":null},"Infinite Boomerang Knives Ammo":{"note":"","data":["810C6A1E 03E7"],"options":null},"Infinite Cleaver Ammo":{"note":"","data":["800C6A1F 00FA"],"options":null},"Infinite Egg Chucker Ammo":{"note":"","data":["800C69BF 00FA"],"options":null},"Infinite Green Slimer Ammo":{"note":"","data":["810C69A6 03E7"],"options":null},"Infinite Health":{"note":"","data":["800C690F 0064"],"options":null},"Infinite Laser Ammo":{"note":"","data":["800C6917 00FA"],"options":null},"Infinite Lives":{"note":"","data":["800C6913 0063"],"options":null},"Infinite Mushroom Ammo":{"note":"","data":["810C6E36 03E7"],"options":null},"Infinite Music Gun Ammo":{"note":"","data":["810C6A06 03E7"],"options":null},"Infinite Rocket Launcher Ammo":{"note":"","data":["810C6946 03E7"],"options":null},"Infinite Shotgun Ammo":{"note":"","data":["810C69EE 03E7"],"options":null}},"DF6FF0F4-29D14238-C:4A":{"Bomb Select":{"note":"","data":["8024A3A1 00??"],"options":{"Blue Remote Bomb":"05","Clear All Special Bombs.":"00","Crazy Bomb":"1D","Invisible Mine Bomb":"07","Jelly Bomb":"03","Power Bomb":"02","Red Beem Bomb":"06","Shock Wave Bomb":"04"}},"Bomberman Speed":{"note":"","data":["8024A3A0 00??"],"options":{"Fast":"0E","Normal":"08","Slow":"04","Turbo":"10"}},"Have\\Infinite\\Kick":{"note":"","data":["8024A3A6 0002"],"options":null},"Have\\Max Bombs":{"note":"","data":["8024A39F 00FF"],"options":null},"Have\\Max Fire":{"note":"","data":["8024A39E 00FF"],"options":null},"Infinite\\Health Hearts":{"note":"","data":["8024A3AE 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["802E1CE7 00FF"],"options":null},"Infinite\\Timer":{"note":"","data":["800FDD72 002A"],"options":null},"Invincible":{"note":"Enemies \u0026 Bomb Blasts cant harm you.But if you walk \u0026 keep laying Bombs it will most likly freeze.so try to avoid constant bombing while walking.Turn cheat to off to go back to normal.","data":["8024A3A8 00??"],"options":{"Off":"00","On":"01"}},"Walk through\\Blocks":{"note":"Walk through Blocks like they are not there.Turn cheat to off to go back to normal.","data":["8024A3A5 00??"],"options":{"Off":"00","On":"01"}},"Walk through\\Bombs":{"note":"Walk through Bombs like they are not there.Turn cheat to off to go back to normal.","data":["8024A3A6 00??"],"options":{"Off":"00","On":"01"}}},"DF98B95D-58840978-C:4A":{"Freeze Timer":{"note":"","data":["811C84C4 012C"],"options":null},"Level 01\\Invincible":{"note":"","data":["D112D33A 0001","811E4B38 000A","D1147DEA 0001","811E4B38 000A"],"options":null},"Level 01\\Press R For Supa Attack":{"note":"","data":["D112D33A 0001","811E4B3C 01F4","D1147DEA 0001","811E4B3C 01F4"],"options":null},"Level 02\\Invincible":{"note":"","data":["D112D33A 0002","811E1DB8 000A","D1147DEA 0002","811E1DB8 000A"],"options":null},"Level 02\\Press R For Supa Attack":{"note":"","data":["D112D33A 0002","811E1DBC 01F4","D1147DEA 0002","811E1DBC 01F4"],"options":null},"Level 03\\Invincible":{"note":"","data":["D112D33A 0003","811E4D38 000A","D1147DEA 0003","811E4D38 000A"],"options":null},"Level 03\\Press R For Supa Attack":{"note":"","data":["D112D33A 0003","811E4D3C 01F4","D1147DEA 0003","811E4D3C 01F4"],"options":null},"Level 04\\Invincible":{"note":"","data":["D112D33A 0004","811E11B8 000A","D1147DEA 0004","811E11B8 000A"],"options":null},"Level 04\\Press R For Supa Attack":{"note":"","data":["D112D33A 0004","811E11BC 01F4","D1147DEA 0004","811E11BC 01F4"],"options":null},"Level 05\\Invincible":{"note":"","data":["D112D33A 0005","811E3638 000A","D1147DEA 0005","811E3638 000A"],"options":null},"Level 05\\Press R For Supa Attack":{"note":"","data":["D112D33A 0005","811E363C 01F4","D1147DEA 0005","811E363C 01F4"],"options":null},"Level 06\\Invincible":{"note":"","data":["D112D33A 0006","811E4EB8 000A","D1147DEA 0006","811E4EB8 000A"],"options":null},"Level 06\\Press R For Supa Attack":{"note":"","data":["D112D33A 0006","811E4EBC 01F4","D1147DEA 0006","811E4EBC 01F4"],"options":null},"Level 07\\Invincible":{"note":"","data":["D112D33A 0007","811E5D38 000A","D1147DEA 0007","811E5D38 000A"],"options":null},"Level 07\\Press R For Supa Attack":{"note":"","data":["D112D33A 0007","811E5D3C 01F4","D1147DEA 0007","811E5D3C 01F4"],"options":null},"Level 08\\Invincible":{"note":"","data":["D112D33A 0008","811E2838 000A","D1147DEA 0008","811E2838 000A"],"options":null},"Level 08\\Press R For Supa Attack":{"note":"","data":["D112D33A 0008","811E283C 01F4","D1147DEA 0008","811E283C 01F4"],"options":null},"Level 09\\Invincible":{"note":"","data":["D112D33A 0009","811EB3B8 000A","D1147DEA 0009","811EB3B8 000A"],"options":null},"Level 09\\Press R For Supa Attack":{"note":"","data":["D112D33A 0009","811EB3BC 01F4","D1147DEA 0009","811EB3BC 01F4"],"options":null},"Level 10\\Invincible":{"note":"","data":["D112D33A 000A","811E5438 000A","D1147DEA 000A","811E5438 000A"],"options":null},"Level 10\\Press R For Supa Attack":{"note":"","data":["D112D33A 000A","811E543C 01F4","D1147DEA 000A","811E543C 01F4"],"options":null},"Level 11\\Invincible":{"note":"","data":["D112D33A 000B","811E1EB8 000A","D1147DEA 000B","811E1EB8 000A"],"options":null},"Level 11\\Press R For Supa Attack":{"note":"","data":["D112D33A 000B","811E1EBC 01F4","D1147DEA 000B","811E1EBC 01F4"],"options":null},"Level 12\\Invincible":{"note":"","data":["D112D33A 000C","811FA6B8 000A","D1147DEA 000C","811FA6B8 000A"],"options":null},"Level 12\\Press R For Supa Attack":{"note":"","data":["D112D33A 000C","811FA6BC 01F4","D1147DEA 000C","811FA6BC 01F4"],"options":null},"Level 13\\Invincible":{"note":"","data":["D112D33A 000D","811EAE38 000A","D1147DEA 000D","811EAE38 000A"],"options":null},"Level 13\\Press R For Supa Attack":{"note":"","data":["D112D33A 000D","811EAE3C 01F4","D1147DEA 000D","811EAE3C 01F4"],"options":null},"Level 14\\Invincible":{"note":"","data":["D112D33A 000E","811E2EB8 000A","D1147DEA 000E","811E2EB8 000A"],"options":null},"Level 14\\Press R For Supa Attack":{"note":"","data":["D112D33A 000E","811E2EBC 01F4","D1147DEA 000E","811E2EBC 01F4"],"options":null},"Level 15\\Invincible":{"note":"","data":["D112D33A 000F","811E2738 000A","D1147DEA 000F","811E2738 000A"],"options":null},"Level 15\\Press R For Supa Attack":{"note":"","data":["D112D33A 000F","811E273C 01F4","D1147DEA 000F","811E273C 01F4"],"options":null},"Level 16\\Invincible":{"note":"","data":["D112D33A 0010","811E53B8 000A","D1147DEA 0010","811E53B8 000A"],"options":null},"Level 16\\Press R For Supa Attack":{"note":"","data":["D112D33A 0010","811E538C 01F4","D1147DEA 0010","811E538C 01F4"],"options":null},"Level 17\\Invincible":{"note":"","data":["D112D33A 0011","811E2738 000A","D1147DEA 0011","811E2738 000A"],"options":null},"Level 17\\Press R For Supa Attack":{"note":"","data":["D112D33A 0011","811E273C 01F4","D1147DEA 0011","811E273C 01F4"],"options":null},"Level 18\\Invincible":{"note":"","data":["D112D33A 0012","811E1CB8 000A","D1147DEA 0012","811E1CB8 000A"],"options":null},"Level 18\\Press R For Supa Attack":{"note":"","data":["D112D33A 0012","811E1CBC 01F4","D1147DEA 0012","811E1CBC 01F4"],"options":null},"Level 19\\Invincible":{"note":"","data":["D112D33A 0013","811E4438 000A","D1147DEA 0013","811E4438 000A"],"options":null},"Level 19\\Press R For Supa Attack":{"note":"","data":["D112D33A 0013","811E443C 01F4","D1147DEA 0013","811E443C 01F4"],"options":null},"Level 20\\Invincible":{"note":"","data":["D112D33A 0014","811F7238 000A","D1147DEA 0014","811F7238 000A"],"options":null},"Level 20\\Press R For Supa Attack":{"note":"","data":["D112D33A 0014","811F723C 01F4","D1147DEA 0014","811F723C 01F4"],"options":null},"Level 21\\Invincible":{"note":"","data":["D112D33A 0015","811E49B8 000A","D1147DEA 0015","811E49B8 000A"],"options":null},"Level 21\\Press R For Supa Attack":{"note":"","data":["D112D33A 0015","811E49BC 01F4","D1147DEA 0015","811E49BC 01F4"],"options":null},"Level 22\\Invincible":{"note":"","data":["D112D33A 0016","811E40B8 000A","D1147DEA 0016","811E40B8 000A"],"options":null},"Level 22\\Press R For Supa Attack":{"note":"","data":["D112D33A 0016","811E40BC 01F4","D1147DEA 0016","811E40BC 01F4"],"options":null},"Level 23\\Invincible":{"note":"","data":["D112D33A 0017","811E9C38 000A","D1147DEA 0017","811E9C38 000A"],"options":null},"Level 23\\Press R For Supa Attack":{"note":"","data":["D112D33A 0017","811E9C3C 01F4","D1147DEA 0017","811E9C3C 01F4"],"options":null},"Level 24\\Invincible":{"note":"","data":["D112D33A 0018","811E2938 000A","D1147DEA 0018","811E2938 000A"],"options":null},"Level 24\\Press R For Supa Attack":{"note":"","data":["D112D33A 0018","811E293C 01F4","D1147DEA 0018","811E293C 01F4"],"options":null},"Level 25\\Invincible":{"note":"","data":["D112D33A 0019","811E4D38 000A","D1147DEA 0019","811E4D38 000A"],"options":null},"Level 25\\Press R For Supa Attack":{"note":"","data":["D112D33A 0019","811E4D3C 01F4","D1147DEA 0019","811E4D3C 01F4"],"options":null},"Level 26\\Invincible":{"note":"","data":["D112D33A 001A","811EFFB8 000A","D1147DEA 001A","811EFFB8 000A"],"options":null},"Level 26\\Press R For Supa Attack":{"note":"","data":["D112D33A 001A","811EFFBC 01F4","D1147DEA 001A","811EFFBC 01F4"],"options":null},"Level 27\\Invincible":{"note":"","data":["D112D33A 001B","811E2B38 000A","D1147DEA 001B","811E2B38 000A"],"options":null},"Level 27\\Press R For Supa Attack":{"note":"","data":["D112D33A 001B","811E2B3C 01F4","D1147DEA 001B","811E2B3C 01F4"],"options":null},"Level 28\\Invincible":{"note":"","data":["D112D33A 001C","811E25B8 000A","D1147DEA 001C","811E25B8 000A"],"options":null},"Level 28\\Press R For Supa Attack":{"note":"","data":["D112D33A 001C","811E25BC 01F4","D1147DEA 001C","811E25BC 01F4"],"options":null},"Level 29\\Invincible":{"note":"","data":["D112D33A 001D","811E1EB8 000A","D1147DEA 001D","811E1EB8 000A"],"options":null},"Level 29\\Press R For Supa Attack":{"note":"","data":["D112D33A 001D","811E1EBC 01F4","D1147DEA 001D","811E1EBC 01F4"],"options":null},"Level 30\\Invincible":{"note":"","data":["D112D33A 001E","811E38B8 000A","D1147DEA 001E","811E38B8 000A"],"options":null},"Level 30\\Press R For Supa Attack":{"note":"","data":["D112D33A 001E","811E38BC 01F4","D1147DEA 001E","811E38BC 01F4"],"options":null},"Level 31\\Invincible":{"note":"","data":["D112D33A 001F","811F5638 000A","D1147DEA 001F","811F5638 000A"],"options":null},"Level 31\\Press R For Supa Attack":{"note":"","data":["D112D33A 001F","811F563C 01F4","D1147DEA 001F","811F563C 01F4"],"options":null},"Level 32\\Invincible":{"note":"","data":["D112D33A 0020","811E4238 000A","D1147DEA 0020","811E4238 000A"],"options":null},"Level 32\\Press R For Supa Attack":{"note":"","data":["D112D33A 0020","811E423C 01F4","D1147DEA 0020","811E423C 01F4"],"options":null},"Level 33\\Invincible":{"note":"","data":["D112D33A 0021","811E4EB8 000A","D1147DEA 0021","811E4EB8 000A"],"options":null},"Level 33\\Press R For Supa Attack":{"note":"","data":["D112D33A 0021","811E4EBC 01F4","D1147DEA 0021","811E4EBC 01F4"],"options":null},"Level 34\\Invincible":{"note":"","data":["D112D33A 0022","811E16B8 000A","D1147DEA 0022","811E16B8 000A"],"options":null},"Level 34\\Press R For Supa Attack":{"note":"","data":["D112D33A 0022","811E16BC 01F4","D1147DEA 0022","811E16BC 01F4"],"options":null},"Level 35\\Invincible":{"note":"","data":["D112D33A 0023","811FABB8 000A","D1147DEA 0023","811FABB8 000A"],"options":null},"Level 35\\Press R For Supa Attack":{"note":"","data":["D112D33A 0023","811FABBC 01F4","D1147DEA 0023","811FABBC 01F4"],"options":null},"Level 36\\Invincible":{"note":"","data":["D112D33A 0024","811EA738 000A","D1147DEA 0024","811EA738 000A"],"options":null},"Level 36\\Press R For Supa Attack":{"note":"","data":["D112D33A 0024","811EA73C 01F4","D1147DEA 0024","811EA73C 01F4"],"options":null},"Level 37\\Invincible":{"note":"","data":["D112D33A 0025","811FC638 000A","D1147DEA 0025","811FC638 000A"],"options":null},"Level 37\\Press R For Supa Attack":{"note":"","data":["D112D33A 0025","811FC63C 01F4","D1147DEA 0025","811FC63C 01F4"],"options":null},"Level 38\\Invincible":{"note":"","data":["D112D33A 0026","811EEBC8 000A","D1147DEA 0026","811EEBC8 000A"],"options":null},"Level 38\\Press R For Supa Attack":{"note":"","data":["D112D33A 0026","811EEBCC 01F4","D1147DEA 0026","811EEBCC 01F4"],"options":null},"Level 39\\Invincible":{"note":"","data":["D112D33A 0027","811F50B8 000A","D1147DEA 0027","811F50B8 000A"],"options":null},"Level 39\\Press R For Supa Attack":{"note":"","data":["D112D33A 0027","811F50BC 01F4","D1147DEA 0027","811F50BC 01F4"],"options":null},"Level 40\\Invincible":{"note":"","data":["D112D33A 0028","811E2038 000A","D1147DEA 0028","811E2038 000A"],"options":null},"Level 40\\Press R For Supa Attack":{"note":"","data":["D112D33A 0028","811E203C 01F4","D1147DEA 0028","811E203C 01F4"],"options":null},"Level 41\\Invincible":{"note":"","data":["D112D33A 0029","811F02B8 000A","D1147DEA 0029","811F02B8 000A"],"options":null},"Level 41\\Press R For Supa Attack":{"note":"","data":["D112D33A 0029","811F02BC 01F4","D1147DEA 0029","811F02BC 01F4"],"options":null},"Level 42\\Invincible":{"note":"","data":["D112D33A 002A","811FD7B8 000A","D1147DEA 002A","811FD7B8 000A"],"options":null},"Level 42\\Press R For Supa Attack":{"note":"","data":["D112D33A 002A","811FD7BC 01F4","D1147DEA 002A","811FD7BC 01F4"],"options":null},"Level 43\\Invincible":{"note":"","data":["D112D33A 002B","811E97B8 000A","D1147DEA 002B","811E97B8 000A"],"options":null},"Level 43\\Press R For Supa Attack":{"note":"","data":["D112D33A 002B","811E97BC 01F4","D1147DEA 002B","811E97BC 01F4"],"options":null},"Level 44\\Invincible":{"note":"","data":["D112D33A 002C","811E4538 000A","D1147DEA 002C","811E4538 000A"],"options":null},"Level 44\\Press R For Supa Attack":{"note":"","data":["D112D33A 002C","811E453C 01F4","D1147DEA 002C","811E453C 01F4"],"options":null}},"DFD784AD-AE426603-C:50":{"Game Win Select\\Player 1":{"note":"","data":["801BAEB1 00??"],"options":{"0 Games Won":"00","1 Game Won":"01","2 Games Won":"02","3 Games Won":"03","4 Games Won":"04","5 Games Won":"05","For Game Set \u0026 Match":"06"}},"Game Win Select\\Player 2":{"note":"","data":["801BAEB2 00??"],"options":{"0 Games Won":"00","1 Game Won":"01","2 Games Won":"02","3 Games Won":"03","4 Games Won":"04","5 Games Won":"05","For Game Set \u0026 Match":"06"}},"Play As\\Player 1":{"note":"","data":["800BE351 00??"],"options":{"Amanda Coetzer":"02","Conchita Martinez":"04","Gustavo Kuerten":"07","Jana Novotna":"03","Jonas Bjorkman":"08","Leon Rodez":"05","Mark Philippoussis":"09","Michael Chang":"06","Randy Powell":"0A","Richard Krajicek":"0B","Vanessa Child":"01","Zoe Taylor":"00"}},"Play As\\Player 2":{"note":"","data":["800BE352 00??"],"options":{"Amanda Coetzer":"02","Conchita Martinez":"04","Gustavo Kuerten":"07","Jana Novotna":"03","Jonas Bjorkman":"08","Leon Rodez":"05","Mark Philippoussis":"09","Michael Chang":"06","Randy Powell":"0A","Richard Krajicek":"0B","Vanessa Child":"01","Zoe Taylor":"00"}},"Points Select\\Player 1":{"note":"","data":["801C6160 00??"],"options":{"0 Points":"00","15 Points":"15","30 Points":"30","40 Points":"40"}},"Points Select\\Player 2":{"note":"","data":["801C6161 00??"],"options":{"0 Points":"00","15 Points":"15","30 Points":"30","40 Points":"40"}}},"DFE61153-D76118E6-C:45":{"Championship Mode\\Cannot Spin Out":{"note":"","data":["803CDD93 0000"],"options":null},"Championship Mode\\Disable Left Lane Traffic":{"note":"","data":["8033C95B 0001"],"options":null},"Championship Mode\\Disable Right Lane Traffic":{"note":"","data":["8033C95F 0001"],"options":null},"Championship Mode\\Max Points Per Race":{"note":"","data":["813BFBFE FFFF"],"options":null},"Championship Mode\\Max Points To Next Level":{"note":"","data":["813BFBFC FFFF"],"options":null},"Championship Mode\\Max Total Points":{"note":"","data":["813BFBFA FFFF"],"options":null},"Championship Mode\\Unlimited Nitro\\Player 1":{"note":"","data":["803C75E7 0003"],"options":null},"Championship Mode\\Unlimited Nitro\\Player 2":{"note":"","data":["803C7823 0003"],"options":null},"Championship Mode\\Unlimited Nitro\\Player 3":{"note":"","data":["803C716F 0003"],"options":null},"Dancing Girl Always On":{"note":"","data":["803BEE73 0001","803C21CF 0054"],"options":null},"Have All\\Car Upgrades":{"note":"","data":["803BEE42 0005"],"options":null},"Have All\\Cars":{"note":"","data":["813BEE78 1FFF"],"options":null},"Player 1\\Always Place 1st":{"note":"","data":["803CE023 0001"],"options":null},"Player 1\\Car/Transmission Modifier":{"note":"","data":["803BEE40 00??"],"options":{"ATV (Auto":"04","ATV (Manual)":"05","Banzai GTV (Auto)":"0A","Banzai GTV (Manual)":"0B","Bulldog (Auto)":"1A","Bulldog (Manual)":"1B","Conductor (Auto)":"24","Conductor (Manual)":"25","El Nino (Auto)":"10","El Nino (Manual)":"11","Enforcer (Auto)":"1C","Enforcer (Manual)":"1D","Exec (Auto)":"22","Exec (Manual)":"23","Grass Hopper (Auto)":"18","Grass Hopper (Manual)":"19","Howler (Auto)":"30","Howler (Manual)":"31","Kamikaze (Auto)":"02","Kamikaze (Manual)":"03","Monsta (Auto)":"2E","Monsta (Manual)":"2F","NY Taxi (Auto)":"1E","NY Taxi (Manual)":"1F","Orca (Auto)":"0E","Orca (manual)":"0F","Rhino 4x4 (Auto)":"12","Rhino 4x4 (Manual)":"13","Road King (Auto)":"16","Road King (Manual)":"17","Rocket (Auto)":"2A","Rocket (Manual)":"2B","Sardine Extreme (Auto)":"14","Sardine Extreme (Manual)":"15","Scarab (Auto)":"06","Scarab (Manual)":"07","School Bus (Auto)":"20","School Bus (Manual)":"21","Serpent (Auto)":"00","Serpent (Manual)":"01","Speed Demon (Auto)":"26","Speed Demon (Manual)":"27","Stallion P6 (Auto)":"08","Stallion P6 (Manual)":"09","The Surgeon (Auto)":"2C","The Surgeon (Manual)":"2D","Tommy (Auto)":"28","Tommy (Manual)":"29","Zombie (Auto)":"0C","Zombie (Manual)":"0D"}},"Player 1\\Stop Elapsed Time":{"note":"","data":["813C7678 3C80"],"options":null},"Player 2\\Always Place 1st":{"note":"","data":["803CE4FB 0001"],"options":null},"Player 2\\Car/Transmission Modifier":{"note":"","data":["803BEE48 00??"],"options":{"ATV (Auto":"04","ATV (Manual)":"05","Banzai GTV (Auto)":"0A","Banzai GTV (Manual)":"0B","Bulldog (Auto)":"1A","Bulldog (Manual)":"1B","Conductor (Auto)":"24","Conductor (Manual)":"25","El Nino (Auto)":"10","El Nino (Manual)":"11","Enforcer (Auto)":"1C","Enforcer (Manual)":"1D","Exec (Auto)":"22","Exec (Manual)":"23","Grass Hopper (Auto)":"18","Grass Hopper (Manual)":"19","Howler (Auto)":"30","Howler (Manual)":"31","Kamikaze (Auto)":"02","Kamikaze (Manual)":"03","Monsta (Auto)":"2E","Monsta (Manual)":"2F","NY Taxi (Auto)":"1E","NY Taxi (Manual)":"1F","Orca (Auto)":"0E","Orca (manual)":"0F","Rhino 4x4 (Auto)":"12","Rhino 4x4 (Manual)":"13","Road King (Auto)":"16","Road King (Manual)":"17","Rocket (Auto)":"2A","Rocket (Manual)":"2B","Sardine Extreme (Auto)":"14","Sardine Extreme (Manual)":"15","Scarab (Auto)":"06","Scarab (Manual)":"07","School Bus (Auto)":"20","School Bus (Manual)":"21","Serpent (Auto)":"00","Serpent (Manual)":"01","Speed Demon (Auto)":"26","Speed Demon (Manual)":"27","Stallion P6 (Auto)":"08","Stallion P6 (Manual)":"09","The Surgeon (Auto)":"2C","The Surgeon (Manual)":"2D","Tommy (Auto)":"28","Tommy (Manual)":"29","Zombie (Auto)":"0C","Zombie (Manual)":"0D"}},"Player 2\\Stop Elapsed Time":{"note":"","data":["813C78B4 3C80"],"options":null},"Player 3\\Always Place 1st":{"note":"","data":["803CDB4B 0001"],"options":null},"Player 3\\Car/Transmission Modifier":{"note":"","data":["803BEE50 00??"],"options":{"ATV (Auto":"04","ATV (Manual)":"05","Banzai GTV (Auto)":"0A","Banzai GTV (Manual)":"0B","Bulldog (Auto)":"1A","Bulldog (Manual)":"1B","Conductor (Auto)":"24","Conductor (Manual)":"25","El Nino (Auto)":"10","El Nino (Manual)":"11","Enforcer (Auto)":"1C","Enforcer (Manual)":"1D","Exec (Auto)":"22","Exec (Manual)":"23","Grass Hopper (Auto)":"18","Grass Hopper (Manual)":"19","Howler (Auto)":"30","Howler (Manual)":"31","Kamikaze (Auto)":"02","Kamikaze (Manual)":"03","Monsta (Auto)":"2E","Monsta (Manual)":"2F","NY Taxi (Auto)":"1E","NY Taxi (Manual)":"1F","Orca (Auto)":"0E","Orca (manual)":"0F","Rhino 4x4 (Auto)":"12","Rhino 4x4 (Manual)":"13","Road King (Auto)":"16","Road King (Manual)":"17","Rocket (Auto)":"2A","Rocket (Manual)":"2B","Sardine Extreme (Auto)":"14","Sardine Extreme (Manual)":"15","Scarab (Auto)":"06","Scarab (Manual)":"07","School Bus (Auto)":"20","School Bus (Manual)":"21","Serpent (Auto)":"00","Serpent (Manual)":"01","Speed Demon (Auto)":"26","Speed Demon (Manual)":"27","Stallion P6 (Auto)":"08","Stallion P6 (Manual)":"09","The Surgeon (Auto)":"2C","The Surgeon (Manual)":"2D","Tommy (Auto)":"28","Tommy (Manual)":"29","Zombie (Auto)":"0C","Zombie (Manual)":"0D"}},"Player 4\\Always Place 1st":{"note":"","data":["803CD673 0001"],"options":null},"Player 4\\Car/Transmission Modifier":{"note":"","data":["803BEE58 00??"],"options":{"ATV (Auto":"04","ATV (Manual)":"05","Banzai GTV (Auto)":"0A","Banzai GTV (Manual)":"0B","Bulldog (Auto)":"1A","Bulldog (Manual)":"1B","Conductor (Auto)":"24","Conductor (Manual)":"25","El Nino (Auto)":"10","El Nino (Manual)":"11","Enforcer (Auto)":"1C","Enforcer (Manual)":"1D","Exec (Auto)":"22","Exec (Manual)":"23","Grass Hopper (Auto)":"18","Grass Hopper (Manual)":"19","Howler (Auto)":"30","Howler (Manual)":"31","Kamikaze (Auto)":"02","Kamikaze (Manual)":"03","Monsta (Auto)":"2E","Monsta (Manual)":"2F","NY Taxi (Auto)":"1E","NY Taxi (Manual)":"1F","Orca (Auto)":"0E","Orca (manual)":"0F","Rhino 4x4 (Auto)":"12","Rhino 4x4 (Manual)":"13","Road King (Auto)":"16","Road King (Manual)":"17","Rocket (Auto)":"2A","Rocket (Manual)":"2B","Sardine Extreme (Auto)":"14","Sardine Extreme (Manual)":"15","Scarab (Auto)":"06","Scarab (Manual)":"07","School Bus (Auto)":"20","School Bus (Manual)":"21","Serpent (Auto)":"00","Serpent (Manual)":"01","Speed Demon (Auto)":"26","Speed Demon (Manual)":"27","Stallion P6 (Auto)":"08","Stallion P6 (Manual)":"09","The Surgeon (Auto)":"2C","The Surgeon (Manual)":"2D","Tommy (Auto)":"28","Tommy (Manual)":"29","Zombie (Auto)":"0C","Zombie (Manual)":"0D"}},"Time Counts Down Faster":{"note":"","data":["813D0D3E 0000"],"options":null}},"DFF227D9-0D4D8169-C:44":{"Always Have\\50 pieces of corn":{"note":"","data":["801E2761 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E2750 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["811E274E 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E2762 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E2755 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E2760 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D008FFA1 0010","811E26C6 1000","D008FFA1 0010","811E26D6 1000"],"options":null},"No Music":{"note":"","data":["801DD906 0000"],"options":null},"Start with Berry Weapon":{"note":"","data":["801E2757 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Subtitles On":{"note":"","data":["801DDB7B 00??"],"options":{"Off":"00","On":"01"}},"Unlock All Levels":{"note":"","data":["81099E30 000F"],"options":null}},"E0044E9E-CD659D0D-C:4A":{},"E0144180-650B78C9-C:45":{"Andrew Reynolds\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA7E 00FF"],"options":null},"Andrew Reynolds\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA80 00FF"],"options":null},"Andrew Reynolds\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA7B 00FF"],"options":null},"Andrew Reynolds\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA78 00FF"],"options":null},"Bob Burnquist\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA1A 00FF"],"options":null},"Bob Burnquist\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA1C 00FF"],"options":null},"Bob Burnquist\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA17 00FF"],"options":null},"Bob Burnquist\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA14 00FF"],"options":null},"Bucky Lasek\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA42 00FF"],"options":null},"Bucky Lasek\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA44 00FF"],"options":null},"Bucky Lasek\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA3F 00FF"],"options":null},"Bucky Lasek\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA3C 00FF"],"options":null},"Chad Muska\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA56 00FF"],"options":null},"Chad Muska\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA58 00FF"],"options":null},"Chad Muska\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA53 00FF"],"options":null},"Chad Muska\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA50 00FF"],"options":null},"Elissa Steamer\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEABA 00FF"],"options":null},"Elissa Steamer\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEABC 00FF"],"options":null},"Elissa Steamer\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEAB7 00FF"],"options":null},"Elissa Steamer\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEAB4 00FF"],"options":null},"Geoff Rowley\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA2E 00FF"],"options":null},"Geoff Rowley\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA30 00FF"],"options":null},"Geoff Rowley\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA2B 00FF"],"options":null},"Geoff Rowley\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA28 00FF"],"options":null},"Jamie Thomas\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEAA6 00FF"],"options":null},"Jamie Thomas\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEAA8 00FF"],"options":null},"Jamie Thomas\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEAA3 00FF"],"options":null},"Jamie Thomas\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEAA0 00FF"],"options":null},"Kareem Campbell\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA6A 00FF"],"options":null},"Kareem Campbell\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA6C 00FF"],"options":null},"Kareem Campbell\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA67 00FF"],"options":null},"Kareem Campbell\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA64 00FF"],"options":null},"Officer Dick\\Have\\All\\Gold Medal\\Burnside":{"note":"","data":["800DEACE 00FF"],"options":null},"Officer Dick\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEAD0 00FF"],"options":null},"Officer Dick\\Have\\All\\Gold Medal\\Skate Park":{"note":"","data":["800DEACB 00FF"],"options":null},"Officer Dick\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEAC8 00FF"],"options":null},"Player 1\\Have\\Perfect Balance":{"note":"","data":["800DE843 0001"],"options":null},"Player 1\\Play As":{"note":"","data":["800D0FD4 00??"],"options":{"Andrew Reynolds":"06","Bob Burnquist":"01","Bucky Lasek":"03","Chad Muska":"04","Elissa Steamer":"09","Geoff Rowley":"02","Jamie Thomas":"08","Kareem Campbell":"05","Officer Dick":"0A","Rune Glifberg":"07","Tony Hawk":"00"}},"Player 1\\Super Max\\Air":{"note":"","data":["800D62DE FFFF"],"options":null},"Player 1\\Super Max\\Balance":{"note":"","data":["800D62DF FFFF"],"options":null},"Player 1\\Super Max\\Ollie":{"note":"","data":["800D62DC FFFF"],"options":null},"Player 1\\Super Max\\Speed":{"note":"","data":["800D62DD FFFF"],"options":null},"Player 1\\Super Max\\Turning":{"note":"","data":["800D62E0 FFFF"],"options":null},"Player 2\\Play As":{"note":"","data":["800D0FD5 00??"],"options":{"Andrew Reynolds":"06","Bob Burnquist":"01","Bucky Lasek":"03","Chad Muska":"04","Elissa Steamer":"09","Geoff Rowley":"02","Jamie Thomas":"08","Kareem Campbell":"05","Officer Dick":"0A","Rune Glifberg":"07","Tony Hawk":"00"}},"Player 2\\Super Max\\Air":{"note":"","data":["800D62E3 FFFF"],"options":null},"Player 2\\Super Max\\Balance":{"note":"","data":["800D62E4 FFFF"],"options":null},"Player 2\\Super Max\\Ollie":{"note":"","data":["800D62E1 FFFF"],"options":null},"Player 2\\Super Max\\Speed":{"note":"","data":["800D62E2 FFFF"],"options":null},"Player 2\\Super Max\\Turning":{"note":"","data":["800D62E5 FFFF"],"options":null},"Rune Glifberg\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA92 00FF"],"options":null},"Rune Glifberg\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA94 00FF"],"options":null},"Rune Glifberg\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA8F 00FF"],"options":null},"Rune Glifberg\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA8C 00FF"],"options":null},"Tony Hawk\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA06 00FF"],"options":null},"Tony Hawk\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA08 00FF"],"options":null},"Tony Hawk\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA03 00FF"],"options":null},"Tony Hawk\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA00 00FF"],"options":null}},"E0B92B94-80E87CBD-C:50":{"Access All Nuke Pieces 1-6":{"note":"Enter the In-game inventory option, and press L Button","data":["D00FC701 0020","50000601 0000","802FC99C 0030"],"options":null},"Access In-Game Cheat Menu":{"note":"","data":["8112167C FFFF","8112167E FFFF"],"options":null}},"E0B92B94-B9A7E025-C:45":{"Access In-Game Cheat Menu":{"note":"","data":["8112167C FFFF","8112167E FFFF"],"options":null}},"E0C4F72F-769E1506-C:50":{"Have Mouse Card\\Night Tail":{"note":"","data":["800A2865 0001"],"options":null},"Have Mouse Card\\The Adventure Begins":{"note":"","data":["800A2864 0001"],"options":null},"Infinite Lives":{"note":"","data":["810A2886 0009"],"options":null},"Max Honey Pots":{"note":"","data":["810A288A 03E7"],"options":null}},"E13AE2DC-4FB65CE8-C:4A":{"Have All Elements":{"note":"","data":["8107A9F4 3232","8107A9F6 3232"],"options":null},"Infinite Health":{"note":"","data":["8107A9D4 01F4","8107A9D6 01F4"],"options":null},"Infinite Magic Points":{"note":"","data":["8107A9D8 01F4","8107A9DA 01F4"],"options":null},"Super Agility":{"note":"","data":["8107A9DE 01F4"],"options":null},"Super Defense":{"note":"","data":["8107A9DC 01F4"],"options":null}},"E185E291-4E50766D-C:45":{"Game Win Select\\Player 1":{"note":"","data":["801BBFA1 00??"],"options":{"0 Games Won":"00","1 Game Won":"01","2 Games Won":"02","3 Games Won":"03","4 Games Won":"04","5 Games Won":"05","For Game Set \u0026 Match":"06"}},"Game Win Select\\Player 2":{"note":"","data":["801BBFA2 00??"],"options":{"0 Games Won":"00","1 Game Won":"01","2 Games Won":"02","3 Games Won":"03","4 Games Won":"04","5 Games Won":"05","For Game Set \u0026 Match":"06"}},"Play As\\Player 1":{"note":"","data":["800BFFA5 00??"],"options":{"Amanda Coetzer":"02","Conchita Martinez":"04","Gustavo Kuerten":"07","Jana Novotna":"03","Jonas Bjorkman":"08","Leon Rodez":"05","Mark Philippoussis":"09","Michael Chang":"06","Randy Powell":"0A","Richard Krajicek":"0B","Vanessa Child":"01","Zoe Taylor":"00"}},"Play As\\Player 2":{"note":"","data":["800BFFA6 00??"],"options":{"Amanda Coetzer":"02","Conchita Martinez":"04","Gustavo Kuerten":"07","Jana Novotna":"03","Jonas Bjorkman":"08","Leon Rodez":"05","Mark Philippoussis":"09","Michael Chang":"06","Randy Powell":"0A","Richard Krajicek":"0B","Vanessa Child":"01","Zoe Taylor":"00"}},"Points Select\\Player 1":{"note":"","data":["801C7260 00??"],"options":{"0 Points":"00","15 Points":"15","30 Points":"30","40 Points":"40"}},"Points Select\\Player 2":{"note":"","data":["801C7261 00??"],"options":{"0 Points":"00","15 Points":"15","30 Points":"30","40 Points":"40"}}},"E1EF93F7-14908B0B-C:44":{"Max Score":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null},"Press L Button for Max Gauge\\Player 1":{"note":"","data":["D00B5661 0020","811D2602 0098"],"options":null},"Press L Button for Max Gauge\\Player 2":{"note":"","data":["D00B5667 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}}},"E2D37CF0-F57E4EAE-C:50":{"Away Team Scores":{"note":"","data":["8011A9BF 00??"],"options":{"0 Goal":"00","1 Goal":"01","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08"}},"Home Team Scores":{"note":"","data":["80119F2B 00??"],"options":{"0 Goal":"00","1 Goal":"01","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08"}},"Infinite player creation points":{"note":"","data":["801AC581 003C"],"options":null}},"E328B4FA-004A28E1-C:50":{"Always Have\\guide line on":{"note":"","data":["80056CCC 0082"],"options":null},"Next Bubble Select\\Player 1":{"note":"","data":["800ECE19 00??"],"options":{"Black":"08","Blue":"03","Green":"02","No Bubble":"00","Orange":"05","Purple":"06","Red":"01","White":"07","Yellow":"04"}},"Next Bubble Select\\Player 2":{"note":"","data":["800ECF09 00??"],"options":{"Black":"08","Blue":"03","Green":"02","No Bubble":"00","Orange":"05","Purple":"06","Red":"01","White":"07","Yellow":"04"}},"Play As Select\\Player 1":{"note":"","data":["800E3250 00??"],"options":{"1 of the two Ballons":"13","Blue Gnome":"12","Bubbloon":"00","Dragoon":"08","Gnome":"09","Jack":"06","Luna":"05","Marina":"03","Monkey":"10","Musashi":"04","Prettio":"02","SSB":"07","Twinkie":"01","Water under ballons":"14","furby? (looks like 2 balloons)":"11"}},"Play As Select\\Player 2":{"note":"","data":["800E3258 00??"],"options":{"1 of the two Ballons":"13","Blue Gnome":"12","Bubbloon":"00","Dragoon":"08","Gnome":"09","Jack":"06","Luna":"05","Marina":"03","Monkey":"10","Musashi":"04","Prettio":"02","SSB":"07","Twinkie":"01","Water under ballons":"14","furby? (looks like 2 balloons)":"11"}},"Pointer always active":{"note":"","data":["D0056FA0 0002","80056FA0 0082"],"options":null},"Press GS to Reset Player 2 score to 0":{"note":"","data":["8809D9C0 0000","8809D9C2 0000"],"options":null}},"E340A49C-74318D41-C:4A":{"Carry 20 Bombs At A Time":{"note":"","data":["800AEE0F 0014"],"options":null},"Have\\Pumped up Red Remote Bombs":{"note":"","data":["802AC653 0004"],"options":null},"Infinite\\Credits":{"note":"","data":["802AB85B 0009"],"options":null},"Infinite\\Energy\\Player 1":{"note":"","data":["800AEE07 0002"],"options":null},"Infinite\\Energy\\Player 2":{"note":"","data":["800AEECF 0002"],"options":null},"Infinite\\Energy\\Player 3":{"note":"","data":["800AEF97 0002"],"options":null},"Infinite\\Energy\\Player 4":{"note":"","data":["800AF05F 0002"],"options":null},"Infinite\\Gems":{"note":"","data":["802AB85F 0063"],"options":null},"Infinite\\Lives":{"note":"","data":["802AB857 0063"],"options":null},"Infinite\\Time":{"note":"","data":["802AB873 0001"],"options":null},"Invincible\\Player 1":{"note":"","data":["800AEE01 0001"],"options":null}},"E3AB4ED0-83040DD2-C:45":{"Away Team\\Infinite Time Outs":{"note":"","data":["80054ED6 0003"],"options":null},"Away Team\\No Time Outs Away":{"note":"","data":["80054ED6 0000"],"options":null},"Home Team\\Infinite Time Outs":{"note":"","data":["80054956 0003"],"options":null},"Home Team\\No Time Outs":{"note":"","data":["80054956 0000"],"options":null},"Infinite Creation Points":{"note":"","data":["8107B36E 03E7"],"options":null},"Infinite Time To Choose Play":{"note":"","data":["81081448 2800"],"options":null},"Max Acc":{"note":"","data":["8007526D 0064"],"options":null},"Max Cat":{"note":"","data":["8007527B 0063"],"options":null},"Max Clu":{"note":"","data":["80075275 0063"],"options":null},"Max End":{"note":"","data":["8007527D 0063"],"options":null},"Max Hnd":{"note":"","data":["80075279 0063"],"options":null},"Max Rcg":{"note":"","data":["80075273 0063"],"options":null},"Max Rng":{"note":"","data":["8007526F 0063"],"options":null},"Max Scr":{"note":"","data":["80075271 0063"],"options":null},"Max Spd":{"note":"","data":["80075277 0063"],"options":null}},"E3BD221D-3C0834D3-C:50":{"Have All Items\\What a night for a knight":{"note":"","data":["811BA010 0101","811BA012 0101","811BA014 0101","811BA016 0101","811BA018 0101"],"options":null},"Infinite Courage":{"note":"","data":["810BB096 0007"],"options":null}},"E3D6A795-2A1C5D3C-C:50":{"Big Options\\Big Gloves Mode":{"note":"","data":["800F407D 0001"],"options":null},"Big Options\\Big Head Mode":{"note":"","data":["800F407C 0001"],"options":null},"Empty Punch Meter\\Player 1":{"note":"","data":["8106B9E8 0000","8106B9EA 0000"],"options":null},"Empty Punch Meter\\Player 2":{"note":"","data":["8016BAF0 0000","8016BAF2 0000"],"options":null},"Full Punch Meter\\Player 1":{"note":"","data":["8106B9E8 0000","8106B9EA 0BB2"],"options":null},"Full Punch Meter\\Player 2":{"note":"","data":["8106B9E8 0000","8106B9EA 0BB2"],"options":null},"Have Full\\Power Bar":{"note":"","data":["810637AE 0064"],"options":null},"Have Full\\Speed Bar":{"note":"","data":["810637B2 0064"],"options":null},"Have Full\\Stamina Bar":{"note":"","data":["810637B6 0064"],"options":null},"Infinite Boxer Creation Points":{"note":"","data":["810637AA 0064"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["8106B974 42C8","8106B9DE 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["8106BAE4 42C8","8106BAE6 0000"],"options":null},"No Health\\Player 1":{"note":"","data":["8106B9DC 0000","8106B9DE 0000"],"options":null},"No Health\\Player 2":{"note":"","data":["8106BAE4 0000","8106BAE6 0000"],"options":null}},"E402430D-D2FCFC9D-C:45":{"16:9 Widescreen":{"note":"For 16:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81066246 3FE3","81066396 3FE3","810663FE 3FE3","8107037A 3740","81126714 3FE3"],"options":null},"21:9 Widescreen":{"note":"For 21:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81066246 4018","81066396 4018","810663FE 4018","8107037A 370F","81126714 4018"],"options":null},"Alt Sixty Frames":{"note":"A friend informed me this didn't freeze","data":["80079E7A 0003"],"options":null},"Boss Cannot Move\\Dino":{"note":"","data":["811E0444 44A0"],"options":null},"Boss Cannot Move\\Octo":{"note":"","data":["811E0BAC 44A0"],"options":null},"Enable All Cheats":{"note":"Go into Options \u0026 then Magic Codes. Then Code list to turn off \u0026 on what you want.","data":["810E031C FFFF","810E031E FFFF"],"options":null},"Have All\\50 Bananas\\Ancient Lake":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3A1D 0032"],"options":null},"Have All\\50 Bananas\\Boulder Canyon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E693D 0032"],"options":null},"Have All\\50 Bananas\\Crescent Island":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E417D 0032"],"options":null},"Have All\\50 Bananas\\Darkmoon Caverns":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E645D 0032"],"options":null},"Have All\\50 Bananas\\Everfrost Peak":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E56AD 0032"],"options":null},"Have All\\50 Bananas\\Fossil Canyon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E6EBD 0032"],"options":null},"Have All\\50 Bananas\\Frosty Village":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E669D 0032"],"options":null},"Have All\\50 Bananas\\Greenwood Village":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E51FD 0032"],"options":null},"Have All\\50 Bananas\\Haunted Woods":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E516D 0032"],"options":null},"Have All\\50 Bananas\\Hot Top Volcano":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4D7D 0032"],"options":null},"Have All\\50 Bananas\\Jungle Falls":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4C1D 0032"],"options":null},"Have All\\50 Bananas\\Pirate Lagoon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E30AD 0032"],"options":null},"Have All\\50 Bananas\\Snowball Valley":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E514D 0032"],"options":null},"Have All\\50 Bananas\\Spacedust Alley":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E6C9D 0032"],"options":null},"Have All\\50 Bananas\\Spaceport Alpha":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E43BD 0032"],"options":null},"Have All\\50 Bananas\\Star City":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E5EDD 0032"],"options":null},"Have All\\50 Bananas\\Treasure Caves":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3E6D 0032"],"options":null},"Have All\\50 Bananas\\Walrus Cove":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E51CD 0032"],"options":null},"Have All\\50 Bananas\\Whale Bay":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E424D 0032"],"options":null},"Have All\\50 Bananas\\Windwill Plains":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801EA30D 0032"],"options":null},"Have All\\99 Balloons":{"note":"","data":["810E058A FFFF","801FD3DD 0063"],"options":null},"Have All\\Amulets":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FD1D6 FFFF"],"options":null},"Have All\\Keys":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FD1C8 FFFF"],"options":null},"Have All\\Levels Completely Finished":{"note":"","data":["50000904 0000","801FD2E7 00FF","801FD30F 00FF","801FD317 00FF","50000404 0000","801FD31F 00FF","801FD33F 00FF","50000804 0000","801FD343 00FF"],"options":null},"Have All\\Silver Coins\\Ancient Lake":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E3BFA 0008"],"options":null},"Have All\\Silver Coins\\Boulder Canyon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E6B1A 0008"],"options":null},"Have All\\Silver Coins\\Crescent Island":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E435A 0008"],"options":null},"Have All\\Silver Coins\\Everfrost Peak":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E588A 0008"],"options":null},"Have All\\Silver Coins\\Fossil Canyon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E709A 0008"],"options":null},"Have All\\Silver Coins\\Frosty Village":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E687A 0008"],"options":null},"Have All\\Silver Coins\\Greenwood Village":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E53DA 0008"],"options":null},"Have All\\Silver Coins\\Haunted Woods":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E534A 0008"],"options":null},"Have All\\Silver Coins\\Hot Top Volcano":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4F5A 0008"],"options":null},"Have All\\Silver Coins\\Jungle Falls":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E588A 0008"],"options":null},"Have All\\Silver Coins\\Pirate Lagoon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E328A 0008"],"options":null},"Have All\\Silver Coins\\Snowball Valley":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E532A 0008"],"options":null},"Have All\\Silver Coins\\Treasure Caves":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E404A 0008"],"options":null},"Have All\\Silver Coins\\Walrus Cove":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E53AA 0008"],"options":null},"Have All\\Silver Coins\\Whale Bay":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E442A 0008"],"options":null},"Have All\\Silver Coins\\Windmill Plains":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801EA4EA 0008"],"options":null},"Have All\\The pieces of the TT thing":{"note":"","data":["801FD1D6 0004"],"options":null},"Have All\\Trophies":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FC9DE FFFF"],"options":null},"Infinite\\Power Ups\\Ancient Lake":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E717B 0010"],"options":null},"Infinite\\Power Ups\\Boulder Canyon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E949B 0010"],"options":null},"Infinite\\Power Ups\\Crescent Island":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E78DB 0010"],"options":null},"Infinite\\Power Ups\\Darkmoon Caverns":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E9DFB 0010"],"options":null},"Infinite\\Power Ups\\Everfrost Peak":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E8E6B 0010"],"options":null},"Infinite\\Power Ups\\Fossil Canyon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801EA61B 0010"],"options":null},"Infinite\\Power Ups\\Frosty Village":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E9DF6 0010"],"options":null},"Infinite\\Power Ups\\Greenwood Village":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E895B 0010"],"options":null},"Infinite\\Power Ups\\Haunted Woods":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E88CB 0010"],"options":null},"Infinite\\Power Ups\\Hot Top Volcano":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E4ECB 0010"],"options":null},"Infinite\\Power Ups\\Jungle Falls":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E4D0B 0010"],"options":null},"Infinite\\Power Ups\\Pirate Lagoon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E5C06 0010"],"options":null},"Infinite\\Power Ups\\Snowball Valley":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E88AB 0010"],"options":null},"Infinite\\Power Ups\\Space Dust Alley":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E979B 0010"],"options":null},"Infinite\\Power Ups\\Spaceport Alpha":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E6EBB 0010"],"options":null},"Infinite\\Power Ups\\Starcity":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E963B 0010"],"options":null},"Infinite\\Power Ups\\Treasure Cove":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E75CB 0010"],"options":null},"Infinite\\Power Ups\\Walrus Cove":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E892B 0010"],"options":null},"Infinite\\Power Ups\\Whale Bay":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E6DAB 0010"],"options":null},"Infinite\\Power Ups\\Windmill Plains":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801ECE0B 0010"],"options":null},"Sixty Frames":{"note":"May freeze at some points,physics can get wonky with slopes on both codes.","data":["80079E7B 0003"],"options":null}},"E436467A-82DE8F9B-C:45":{"Always Place 1st":{"note":"","data":["8012955F 0001"],"options":null},"Driver Modifier (Champsionship Mode)":{"note":"","data":["812CBEC6 00??"],"options":{"Billy Boat #11":"02","Buddy Lazier #91":"04","Buzz Calkins #12":"08","Davey Hamilton #9":"05","Eddie Cheever Jr.#51":"03","Greg Ray #2":"01","Jeff Ward #21":"10","John Hollansworth Jr. #42":"13","Johnny Unser #92":"0E","Kenny Brack #14":"09","Mark Dismore #28":"0C","Robbie Buyl #22":"0A","Robby McGehee #55":"12","Robby Unser #81":"0F","Roberto Guerrero #50":"0D","Sam Schmidt #99":"06","Scott Goodyear #4":"00","Scott Sharp #8":"07","Stephan Gregoire #7":"11","Tyce Carison #20":"0B"}},"Max Exp (Gold Cup - All Classes Unlocked)":{"note":"With the 'Max Exp' codes for the Gold Cup, start a new file and leave it and go back to it again.","data":["81033918 7FFF","8103391A FFFF"],"options":null},"Unlock\\Formula Cars Part 1":{"note":"","data":["810230F0 0000","810230F2 0000","810230F4 0000","810230F6 0000"],"options":null},"Unlock\\Gold Cup 1st Upgrade":{"note":"","data":["81023100 0000","81023102 0000"],"options":null},"Unlock\\Gold Cup 2nd Upgrade":{"note":"","data":["81023104 0000","81023106 0000"],"options":null},"Unlock\\Sprint Car Class":{"note":"","data":["810230EE 0000","810230EC 0000"],"options":null}},"E43C9765-05B1C1BE-C:4A":{"Max HP":{"note":"","data":["812D71F8 03E7"],"options":null},"Max MP":{"note":"","data":["812D71FA 03E7"],"options":null},"Max Money":{"note":"","data":["811A70E9 0001","811A70EA 869F"],"options":null}},"E4906679-9F243F05-C:50":{"Max Score":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null},"Press L Button for Max Gauge\\Player 1":{"note":"","data":["D00B4171 0020","811D2602 0098"],"options":null},"Press L Button for Max Gauge\\Player 2":{"note":"","data":["D00B4177 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}}},"E4B08007-A602FF33-C:50":{"Carrington Institute\\Have 255 targets destroyed":{"note":"","data":["810AD714 00FF"],"options":null},"Carrington Institute\\Have 999 points in Firing Range":{"note":"","data":["810AD712 03E7"],"options":null},"Carrington Institute\\Have Infinite time in Firing Range":{"note":"","data":["810AD70E 004D"],"options":null},"Have All\\Levels Complete \u0026 All Challenges":{"note":"Have All levels Complete on Solo Missions, \u0026 Acces all Challenges \u0026 CO-OP Levels","data":["50003C02 0000","800A27C1 0001","50001E1A 0000","80088A0D 0001","50001E1A 0000","80088A0E 0001","50001E1A 0000","80088A0F 0001","50001E1A 0000","80088A10 0001"],"options":null},"Have All\\Weapons\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["802037F0 0007","801EA7F0 0007","801D17F0 0007"],"options":null},"Have All\\Weapons\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80205460 0007","801EC460 0007","801D3460 0007"],"options":null},"Infinite\\Ammo\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80202F7F 00FF","801E9F7F 00FF","801D0F7F 00FF","802027DB 00FF","801E97DB 00FF","801D07DB 00FF"],"options":null},"Infinite\\Ammo\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80204BEF 00FF","801EBBEF 00FF","801D2BEF 00FF","8020444B 00FF","801EB44B 00FF","801D244B 00FF"],"options":null},"Infinite\\Health\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8120205C 3F80","811E905C 3F80","811D005C 3F80"],"options":null},"Infinite\\Health\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81203CCC 3F80","811EACCC 3F80","811D1CCC 3F80"],"options":null},"Infinite\\Shield\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81202070 3F80","811E9070 3F80","811D0070 3F80"],"options":null},"Infinite\\Shield\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81203CE0 3F80","811EACE0 3F80","811D1CE0 3F80"],"options":null},"Press B To Levitate\\Single \u0026 Co-Op\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D00980C4 0040","81202000 40F2","D00980C4 0040","80201FB3 0000","D00980C4 0040","811E9000 40F2","D00980C4 0040","801E8FB3 0000","D00980C4 0040","811D0000 40F2","D00980C4 0040","801CFFB3 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D1099FB6 4000","81203C70 40F2","D1099FB6 4000","81203C23 0000","D1099FB6 4000","811EAC70 40F2","D1099FB6 4000","811EAC23 0000","D1099FB6 4000","811D1C70 40F2","D1099FB6 4000","811D1C23 0000"],"options":null}},"E616B5BC-C9658B88-C:45":{"Fast Sixty":{"note":"Too fast.","data":["800FF71F 0001","800FF7B7 0001","800FF84F 0001"],"options":null},"Have All\\Cups Select":{"note":"","data":["50002C02 0000","800CCE11 00??"],"options":{"Bronze Cup":"02","Gold Cup":"00","None (Default)":"04","Silver Cup":"01"}},"Have All\\Points":{"note":"","data":["810D8EE0 03E7"],"options":null},"Have All\\RB Medals":{"note":"","data":["810D8EF0 03E7"],"options":null},"Infinite\\Credits":{"note":"","data":["800BDEA5 0005"],"options":null},"Infinite\\Timer":{"note":"","data":["810D8F88 44E9"],"options":null},"Infinite\\Turbos":{"note":"To enable this just select On or Off and when you press Z you will use your Turbos accordantly. Warning you can only have Infinite if you have some turbo level to begin with","data":["D00F2C16 0020","800CCF91 00??"],"options":{"Off":"00","On":"08"}},"Laps To Race":{"note":"Here you can select how many laps you prefer.to race","data":["800C8809 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","7 Laps":"07","8 Laps":"08","9 Laps":"09","Laps":"06"}},"[Cheat Menu]":{"note":"Press Pause to access cheats.","data":["800CCF89 00FF","800CCF8A 00FF","800CCF8B 00FF"],"options":null},"[Press F9]\\Enable All Courses":{"note":"","data":["890CCDF2 0B00","890CCDF4 0B00","890CCDF6 0B00"],"options":null},"[Press F9]\\Extra Characters":{"note":"","data":["890C632F 01FF"],"options":null},"[Press F9]\\Progress 100%":{"note":"","data":["50000801 0000","880CCE00 0003","50000801 0000","880CCE01 00FF"],"options":null}},"E6419BC5-69011DE3-C:45":{"Always Have Retreat \u0026 Elem Pedra Opened":{"note":"Do not put this on until in-game or the game will freeze.","data":["D01A1C72 0000","811A1C72 0003"],"options":null},"Day Always 00":{"note":"","data":["811F106C 0000"],"options":null},"Finish All Levels":{"note":"","data":["81196A86 5454","81196A88 5140","81196A8A 4555","81196A8C 9514","81196A8E 5515"],"options":null},"Hour Always":{"note":"","data":["80196A2D 00??"],"options":{"(0 Hour - 24:00 PM - Midnight)":"00","(01:00 AM)":"01","(02:00 AM)":"02","(03:00 AM)":"03","(04:00 AM)":"04","(05:00 AM)":"05","(06:00 AM)":"06","(07:00 AM)":"07","(08:00 AM)":"08","(09:00 AM)":"09","(10:00 AM)":"0A","(11:00 AM)":"0B","(12:00 PM - Noon)":"0C","(13:00 - 1 PM)":"0D","(14:00 - 2 PM)":"0E","(15:00 - 3 PM)":"0F","(16:00 - 4 PM)":"10","(17:00 - 5 PM)":"11","(18:00 - 6 PM)":"12","(19:00 - 7 PM)":"13","(20:00 - 8 PM)":"14","(21:00 - 9 PM)":"15","(22:00 - 10 PM)":"16","(23:00 - 11 PM)":"17"}},"Infinite Goth":{"note":"","data":["81196A6E FFFF"],"options":null},"Magnus\\Infinite HP":{"note":"","data":["81193C10 03E7"],"options":null},"Magnus\\Level 99":{"note":"","data":["80193C0B 0063"],"options":null},"Magnus\\Max Agi":{"note":"","data":["81193C1C 03E7"],"options":null},"Magnus\\Max Dex":{"note":"","data":["81193C1E 03E7"],"options":null},"Magnus\\Max HP":{"note":"","data":["81193C0E 03E7"],"options":null},"Magnus\\Max Int":{"note":"","data":["81193C18 03E7"],"options":null},"Magnus\\Max Mem":{"note":"","data":["81193C1A 03E7"],"options":null},"Magnus\\Max Str":{"note":"","data":["81193C14 03E7"],"options":null},"Magnus\\Max Vit":{"note":"","data":["81193C16 03E7"],"options":null},"Max Goth":{"note":"","data":["81196A6C 0098","81196A6E 967F"],"options":null},"Open All Paths":{"note":"","data":["81196A80 01FF","81196A82 677F","81196A84 FCFF"],"options":null}},"E688A5B8-B14B3F18-C:50":{"Have All\\Boards":{"note":"","data":["81082B24 0003","81082B26 FFFF"],"options":null},"Have All\\Characters":{"note":"","data":["81082B18 07FF"],"options":null},"Have All\\Difficulties":{"note":"","data":["81082B10 0700"],"options":null},"Have All\\Tracks":{"note":"","data":["81082B1C BFFE"],"options":null},"Low Timer":{"note":"","data":["80082A04 0000","80182A06 0000"],"options":null},"Max\\50000 Stunt Points":{"note":"","data":["81082AD8 C350"],"options":null},"[Audio Fix]":{"note":"","data":["81051840 AD99"],"options":null}},"E68A000E-639166DD-C:50":{"Access All Remote Controls\\Red Remotes":{"note":"Opens Gate 4 And The Lions Mouth","data":["50000E01 0000","800C513E 0007"],"options":null},"All Silver \u0026 Gold Gold Remotes":{"note":"Opens Gate 3,2,1","data":["810C5164 0FFF","810C5166 FFFF","810C5168 01E0","810C516A 007F"],"options":null},"Fully Charged Gex":{"note":"Press L Button Once When On One Of The Specific Levels, For Circuit Central Levels Only","data":["D00AAAB9 0020","81163CDE 32FF"],"options":null},"Hover \u0026 Fly Mode":{"note":"Press And Hold L Button + A Button","data":["D10BED04 0020","8114ECA2 0010","D10BED04 0010"],"options":null},"Infinite Air Codes\\Pain In The Asteroids":{"note":"","data":["D00BED05 0004","8133CBEE 012B"],"options":null},"Infinite Air Codes\\Umpire Strikes Out":{"note":"","data":["D00BED05 0004","8136608E 012B"],"options":null},"Infinite Health":{"note":"","data":["800C50CB 0063"],"options":null},"Infinite Lives":{"note":"","data":["810C50C6 0063"],"options":null}},"E6A95A4F-BAD2EA23-C:45":{"Have\\Max Gold":{"note":"","data":["50000401 0000","80277335 00FF"],"options":null},"Have\\Max Total XP":{"note":"","data":["50000401 0000","80278BAD 00FF"],"options":null},"Have\\Max Total XP Remaning to Start":{"note":"This will give you 16777215 Total XP Remaning to start with and after your 1st batle will allow you to buy your Max Stats","data":["50000401 0000","80278BB1 00FF"],"options":null},"Infinite\\99 Health Potions":{"note":"Do Not put this cheat on until you have collected your 1st Health Potion from the 1st Cheat or you will not be able to get into the Sub menu and Continue the game.","data":["802785CB 0063"],"options":null},"Infinite\\Max Health":{"note":"","data":["80278B98 001E"],"options":null},"Lagfix High Rez":{"note":"","data":["800D7F16 000D"],"options":null},"Lagfix Lo Res":{"note":"Game natively runs 60fps already,just needed that extra push.","data":["800E5392 000D"],"options":null}},"E73C7C4F-AF93B838-C:4A":{"Flashing Invincible":{"note":"This cheat Makes you Flash But you cant be harmed,Once out of danger Turn the cheat off to stop the flashing.also do not put this on if you have already been hurt or you will stay on the floor.","data":["800AB5C7 000A"],"options":null},"Have\\Fire Bombs":{"note":"","data":["800AB59B 0003"],"options":null},"Have\\Kick Bombs Anytime":{"note":"","data":["800AB5A3 0003"],"options":null},"Have\\Max Fire Level":{"note":"","data":["800AB593 0003"],"options":null},"Infinite\\Bombs":{"note":"","data":["800AB5B8 0003"],"options":null},"Infinite\\Continue Time":{"note":"","data":["810B3B36 0090"],"options":null},"Infinite\\Health":{"note":"","data":["800AB5BF 0005"],"options":null},"Infinite\\Money":{"note":"","data":["810A9BB2 FFFF"],"options":null}},"E7D20193-C1158E93-C:50":{"A Few Extra Cars":{"note":"","data":["811270AA FFFF"],"options":null},"Access All Cars":{"note":"","data":["811270A4 FFFF","811270A6 FFFF"],"options":null},"Allways 1st":{"note":"","data":["8111B14A 0000"],"options":null},"Bonus Tracks":{"note":"","data":["811270AE FFFF"],"options":null},"Infinite Turbos":{"note":"","data":["8111B39C 0800"],"options":null},"Max Tournament Points":{"note":"","data":["811270B6 03E7"],"options":null},"Mirror Mode":{"note":"","data":["801270CE 0001"],"options":null},"Race At Night":{"note":"","data":["801270CF 0080"],"options":null}},"E86415A6-98395B53-C:50":{"Have Infinite\\99 Blue Ammo":{"note":"","data":["800CEA16 0063"],"options":null},"Have Infinite\\99 Blue Power (1UP)":{"note":"","data":["800CEA2A 0063"],"options":null},"Have Infinite\\99 Engery Pickups":{"note":"","data":["800CEA0C 0063"],"options":null},"Have Infinite\\99 Gas":{"note":"","data":["800CEA3E 0063"],"options":null},"Have Infinite\\99 Grenades":{"note":"","data":["800CEA34 003F"],"options":null},"Have Infinite\\99 Yellow Ammo":{"note":"","data":["800CEA20 0063"],"options":null},"Have\\All Magic":{"note":"","data":["800CEB48 0010","800CEB4D 0000","800CEB57 0001","800CEB61 0002","800CEB6B 0003","800CEB75 0005","800CEB7F 0006","800CEB89 0008","800CEB93 0009","800CEB9D 000B","800CEBA7 000E","800CEBB1 000F","800CEBBB 0010","800CEBC5 0011","800CEBCF 000A","800CEBD9 000C","800CEBE3 000D"],"options":null},"Have\\Magic On Level 4":{"note":"","data":["810C8CDD FFFF","810C8CDE FFFF","810C8CDF FFFF","810C8CE0 FFFF","810C8CE1 FFFF","810C8CE2 FFFF"],"options":null},"Have\\Max Armour Level":{"note":"","data":["800C8D00 0064"],"options":null},"Have\\Max Experience Level":{"note":"","data":["800C8CFC 00FF"],"options":null},"Have\\Max Spirit Level":{"note":"","data":["800C8D04 0064"],"options":null},"Have\\Max Weapon Level":{"note":"","data":["800C8D02 0064"],"options":null},"Have\\Weapons On Max Upgrade":{"note":"","data":["800C8CAC 0009","800C8CB4 0009","800C8CBC 0009","800C8CC4 0009"],"options":null},"Infinite Air Under Water":{"note":"","data":["800C8BE4 0069"],"options":null},"Infinite Max\\999 Lives":{"note":"","data":["810C8CF8 03E8"],"options":null},"Infinite Max\\Fire Ammo":{"note":"","data":["800C8CB3 0066"],"options":null},"Infinite Max\\Fusion Ammo":{"note":"","data":["800C8CC3 0066"],"options":null},"Infinite Max\\Health":{"note":"","data":["800C8AD9 0066"],"options":null},"Infinite Max\\Ionic Ammo":{"note":"","data":["800C8CBB 0066"],"options":null},"Infinite Max\\Light Ammo":{"note":"","data":["800C8CAB 0066"],"options":null},"Infinite Max\\Mana":{"note":"","data":["800C8CFF 0066"],"options":null},"Infinite Throwing Weapon Ammo":{"note":"","data":["800CF57D 0063"],"options":null},"Play As Select":{"note":"","data":["800FCEC5 00??"],"options":{"Ike Hawkings (Corporal)":"00","Julia Chase (Cartographer)":"02","Karma (The Ex-Deviant)":"03","Max Havok (Chief Enginer)":"04","Mr Bodybolt (7th Passenger)":"06","Solaar (Archbishop)":"05","Sophia Hawkings (Stowaway)":"01"}},"Press A For Bionic Jump":{"note":"This will make you jump to a great height","data":["D00C8BCA 0080","810C8AE8 ????"],"options":{"Max Jump":"0800","Medium Jump":"0250"}}},"E896092B-DC244D4E-C:45":{"Player 1\\Infinite Free Spins":{"note":"","data":["800B999B 0001"],"options":null},"Player 1\\Max Cash":{"note":"","data":["810B9990 FFFF"],"options":null},"Player 1\\No Cash":{"note":"","data":["810B9992 0000"],"options":null},"Player 2\\Infinite Free Spins":{"note":"","data":["800B9AAF 0001"],"options":null},"Player 2\\Max Cash":{"note":"","data":["810B9AA4 FFFF"],"options":null},"Player 2\\No Cash":{"note":"","data":["810B9AA6 0000"],"options":null},"Player 3\\Infinite Free Spins":{"note":"","data":["800B9BC3 0001"],"options":null},"Player 3\\Max Cash":{"note":"","data":["810B9BB8 FFFF"],"options":null},"Player 3\\No Cash":{"note":"","data":["810B9BB8 0000"],"options":null}},"E8C95AFC-35D121DA-C:45":{"99 Gems":{"note":"","data":["80305449 0063","80648FA9 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000302 0000","81305868 0063","50000304 0000","81305872 0063","5000020E 0000","81305882 0063","50000302 0000","816493C8 0063","50000304 0000","816493D2 0063","5000020E 0000","816493E2 0063","80648F65 0000","806493D1 0063"],"options":null},"Infinite\\Health":{"note":"","data":["80305446 0064","80648FA6 0064"],"options":null},"Infinite\\Lives":{"note":"","data":["80648FAB 0009"],"options":null},"Infinite\\Oxygen":{"note":"","data":["806495BD 0000"],"options":null}},"E8C95AFC-35D121DA-C:50":{"99 Gems":{"note":"","data":["80305449 0063","80648FA9 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000302 0000","81305868 0063","50000304 0000","81305872 0063","5000020E 0000","81305882 0063","50000302 0000","816493C8 0063","50000304 0000","816493D2 0063","5000020E 0000","816493E2 0063","80648F65 0000","806493D1 0063"],"options":null},"Infinite\\Health":{"note":"","data":["80305446 0064","80648FA6 0064"],"options":null},"Infinite\\Lives":{"note":"","data":["80648FAB 0009"],"options":null},"Infinite\\Oxygen":{"note":"","data":["806495BD 0000"],"options":null}},"E8E5B179-44AA30E8-C:45":{"Freeze Timer":{"note":"","data":["80163ABF 000A"],"options":null},"Infinite 99 Lives":{"note":"","data":["80163AC7 0063"],"options":null},"Infinite Lives (Retro Frogger)":{"note":"","data":["8025AC2F 0005"],"options":null}},"E8FC8EA1-9F738391-C:45":{"Always Hole In One":{"note":"","data":["8115E1D6 0000"],"options":null},"Big Head":{"note":"","data":["810AE840 401F"],"options":null},"Change Looks Of Liltiger":{"note":"","data":["800B0BC4 0011"],"options":null},"Character Unlock\\Bengal The Tiger":{"note":"","data":["800B0BC2 0010"],"options":null},"Character Unlock\\Bobby":{"note":"","data":["800B0BC6 0001"],"options":null},"Character Unlock\\Cindy":{"note":"","data":["800B0BBA 0001"],"options":null},"Character Unlock\\Festus":{"note":"","data":["800B0BD3 0001"],"options":null},"Character Unlock\\Kimmi":{"note":"","data":["800B0BBA 0010"],"options":null},"Character Unlock\\Mark":{"note":"","data":["800B0BC7 0012"],"options":null},"Character Unlock\\Marvin The Alien":{"note":"","data":["800B0BD7 0001"],"options":null},"Character Unlock\\Robert \u0026 Delvis":{"note":"","data":["800B0BCA 0011"],"options":null},"Character Unlock\\Starr":{"note":"","data":["800B0BCE 0010"],"options":null},"Character Unlock\\Traci (Leopard Costume)":{"note":"","data":["800B0BCE 0011"],"options":null},"Character Unlock\\Twfan \u0026 Eagamer":{"note":"","data":["800B0BBE 0011"],"options":null},"Inventory\\Max Accuracy \u0026 Skipper":{"note":"","data":["800B4410 00FF"],"options":null},"Inventory\\Max Distance \u0026 Wind Cutter":{"note":"","data":["800B4412 00FF"],"options":null},"Inventory\\Max Mystery":{"note":"","data":["800B4420 00F0"],"options":null},"Inventory\\Max No Bounce \u0026 Tee Up":{"note":"","data":["800B4411 00FF"],"options":null},"Inventory\\Max Spinner \u0026 Burrow":{"note":"","data":["800B4413 00FF"],"options":null}},"E9219533-13FBAFBD-C:45":{"Championship Mode\\Infinite Money":{"note":"","data":["810F81CA FFFF"],"options":null},"Championship Mode\\Max Dexterity":{"note":"","data":["810F81D8 447A","810F81DA 0000"],"options":null},"Championship Mode\\Max Endurance":{"note":"","data":["810F81D4 447A","810F81D6 0000"],"options":null},"Championship Mode\\Max Experience":{"note":"","data":["810F81DC 447A","810F81DE 0000"],"options":null},"Championship Mode\\Max Money":{"note":"","data":["810F81C8 7FFF","810F81CA FFFF"],"options":null},"Championship Mode\\Max Stamina":{"note":"","data":["810F81D0 447A","810F81D2 0000"],"options":null},"Championship Mode\\Max Strength":{"note":"","data":["810F81CC 447A","810F81CE 0000"],"options":null},"Championship Mode\\Top Rank":{"note":"","data":["810F81BA 000A"],"options":null},"Enable Extra Characters":{"note":"","data":["80101E6F 0003","80101E73 0003","80101E77 0003","80101E7B 0003","80101E7F 0003","80101E83 0003","80101E87 0003"],"options":null},"Infinite\\Health\\Player 1":{"note":"Do not use this with No Health","data":["810FF6B6 0064"],"options":null},"Infinite\\Health\\Player 2":{"note":"Do not use this with No Health","data":["81100316 0064"],"options":null},"Infinite\\Stamina\\Player 1":{"note":"Do not use this with No Stamina","data":["810FF6BA 0064"],"options":null},"Infinite\\Stamina\\Player 2":{"note":"Do not use this with No Stamina","data":["8110031A 0064"],"options":null},"Infinite\\Time":{"note":"","data":["810FE352 0E10"],"options":null},"Max RUMBLE\\Player 1":{"note":"Do not use this with Never RUMBLE","data":["810FF6C2 0090"],"options":null},"Max RUMBLE\\Player 2":{"note":"Do not use this with Never RUMBLE","data":["81100322 0090"],"options":null},"Never RUMBLE\\Player 1":{"note":"Do not use this with Max RUMBLE","data":["810FF6C2 0000"],"options":null},"Never RUMBLE\\Player 2":{"note":"Do not use this with Max RUMBLE","data":["81100322 0000"],"options":null},"No Health\\Player 1":{"note":"Do not use this with Infinite Health","data":["810FF6B6 0000"],"options":null},"No Health\\Player 2":{"note":"Do not use this with Infinite Health","data":["81100316 0000"],"options":null},"No Stamina\\Player 1":{"note":"Do not use this with Infinite Stamina","data":["810FF6BA 0000"],"options":null},"No Stamina\\Player 2":{"note":"Do not use this with Infinite Stamina","data":["8110031A 0000"],"options":null},"Win 1 Fight to Complete Arcade Mode":{"note":"","data":["80101F0B 000B"],"options":null}},"E97955C6-BC338D38-C:50":{"All Equipment Upgrades":{"note":"","data":["801E6BBD 0023","811E6C0A 201B","801E6B9C 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03DDFDB 0000","801E6B52 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801E6BD2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801E6BD3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801E6BD4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801E6BD5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801E6BD6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801E6BD7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801E6BC5 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801E6BCB 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801E6BD1 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Have Item Modifier":{"note":"","data":["801E6BD0 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\All Masks":{"note":"","data":["811E6BD8 3E39","811E6BDA 4745","811E6BDC 4032","811E6BDE 3A46","811E6BE0 3842","811E6BE2 4833","811E6BE4 3C3D","811E6BE6 373F","811E6BE8 3634","811E6BEA 4341","811E6BEC 3B44","811E6BEE 4935"],"options":null},"Have\\Bombchu":{"note":"","data":["801E6BC7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801E6BC6 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801E6BC9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801E6BC8 0008"],"options":null},"Have\\Fire Arrow":{"note":"","data":["801E6BC2 0002"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801E6BD0 0010"],"options":null},"Have\\Have\\Ocarina of Time":{"note":"","data":["801E6BC0 0000"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801E6BC1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801E6BCF 000F"],"options":null},"Have\\Ice Arrow":{"note":"","data":["801E6BC3 0003"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801E6BCE 000E"],"options":null},"Have\\Light Arrow":{"note":"","data":["801E6BC4 0004"],"options":null},"Have\\Magic Beans":{"note":"","data":["801E6BCA 000A"],"options":null},"Have\\Pictograph":{"note":"","data":["801E6BCD 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801E6BCC 000C"],"options":null},"Have\\QuestStatus Items":{"note":"","data":["801E6C0D 0005","811E6C0E F7CF"],"options":null},"Infinite\\Health":{"note":"","data":["811E6B86 03E7"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811E6B84 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"This is Infinite use of Bombs,Bombchus,Deku Sticks,Deku Nuts,Magic Beans,\u0026 Powder Kegs. But you must also put it's Have on to work.","data":["801E6BF1 0063","801E6BF6 0063","801E6BF7 0063","801E6BF8 0063","801E6BF9 0063","801E6BFA 0063","801E6BFC 0063","801E6BFB 0063","801E6BFD 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801E6B89 0060","811E6B90 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811E6B8A 03E7"],"options":null},"Play As":{"note":"","data":["801E6B70 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03DDFDB 0020","813F72B8 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You Have\\been warned.","data":["801E6B9C 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F2D56 0008","811E6B66 FFFD","D01F2D56 0004","811E6B66 0000","D01F2D56 0002","811E6B66 FFFE"],"options":null},"Use all C Buttons":{"note":"","data":["811EAA68 0000","811EAA6A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["803DDFDA 0000","803F6835 0001","813F683A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"EA06F8C3-07C2DEED-C:46":{"Character Select":{"note":"","data":["80075F52 00??"],"options":{"Big Head.":"04","Flame Grilled":"08","Normal":"00","Play as Deadwing.":"01"}},"Have All\\Cheats: Book of Shadows":{"note":"","data":["81075F4E 0FFF"],"options":null},"Have All\\Dark Souls Collected":{"note":"","data":["80075F49 0078"],"options":null},"Have All\\Gads \u0026 The Poign":{"note":"","data":["80030E57 000F"],"options":null},"Have All\\Items":{"note":"","data":["50001B20 0000","80030613 000B"],"options":null},"Have All\\L-Eclipser":{"note":"You will not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50000320 0000","80030973 000B"],"options":null},"Have All\\Levels Unlocked":{"note":"","data":["5000101C 0000","80030A0E 0001"],"options":null},"Infinite\\0.9mm Ammo":{"note":"","data":["81075B3A 0190"],"options":null},"Infinite\\Accumulators":{"note":"","data":["800306D7 0005"],"options":null},"Infinite\\Cadeaux'":{"note":"","data":["81075B36 03E7"],"options":null},"Infinite\\Max Health/Air/Shadow Charge \u0026 Voodoo Power":{"note":"","data":["50000604 0000","81075B16 2710"],"options":null},"Infinite\\Prisms":{"note":"","data":["80030957 0003"],"options":null},"Infinite\\Retractors":{"note":"","data":["800308B7 0003"],"options":null},"Infinite\\Shotgun Shells":{"note":"","data":["80075B2F 0063"],"options":null},"Infinite\\Violator Ammo":{"note":"","data":["81075B32 03E7"],"options":null},"Press L To Levitate":{"note":"Press the L-Button to rise and let go and press again in stages to come back down.","data":["D0059097 0020","80075578 0041"],"options":null},"[Ammo Always Displayed On Screen]":{"note":"","data":["50000408 0000","80075ACD 0007"],"options":null},"[Health Meter Displayed On Screen]":{"note":"","data":["81075B10 0000","81075B12 00FF"],"options":null}},"EA71056A-E4214847-C:45":{"Have All Cars":{"note":"","data":["50000D01 0000","80191298 001F"],"options":null},"Have All Characters \u0026 Levels":{"note":"","data":["81181572 01C0"],"options":null},"Level Select":{"note":"","data":["80190150 00??"],"options":{"Aircraft Graveyard":"04","Canyonlands":"09","Casino City":"08","Ghost Town":"05","Hoover Dam":"06","Oil Fields":"03","Sand Factory":"02","Secret Base":"01","Ski Resorts":"0A","Super Dreamland 64":"00","Valley Farms":"07"}},"Play As\\Player 1":{"note":"","data":["80186AE0 00??"],"options":{"\"Y\" The Alien":"0C","Beezwax":"09","Boogie":"08","Chassey Blue":"00","Convoy":"05","Dave":"04","Houston 3":"07","John Torque":"03","Loki":"06","Molo":"0A","Sheila":"02","Sid Burn":"0B","Slick Clyde":"01"}},"Play As\\Player 2":{"note":"","data":["80186AE1 00??"],"options":{"\"Y\" The Alien":"0C","Beezwax":"09","Boogie":"08","Chassey Blue":"00","Convoy":"05","Dave":"04","Houston 3":"07","John Torque":"03","Loki":"06","Molo":"0A","Sheila":"02","Sid Burn":"0B","Slick Clyde":"01"}}},"EAB7B429-BAC92C57-C:45":{"Have All Characters":{"note":"","data":["5000125C 0000","810EC938 0000","5000125C 0000","810EC93A 0003"],"options":null},"Infinite\\Money":{"note":"","data":["810EC932 FFFF"],"options":null},"Infinite\\Time":{"note":"","data":["810E7596 0E10"],"options":null},"Player 1\\Health":{"note":"","data":["810D9F78 0000","810D9F7A 00??"],"options":{"Infinite":"64","No Health":"00"}},"Player 1\\RUMBLE":{"note":"","data":["810D9F84 0000","810D9F86 00??"],"options":{"Max":"30","Never Rumble":"00"}},"Player 1\\Stamina":{"note":"","data":["810D9F7C 0000","810D9F7E 00??"],"options":{"Infinite":"64","No Stamina":"00"}},"Player 2\\Health":{"note":"","data":["810DA790 0000","810DA792 00??"],"options":{"Infinite":"64","No Health":"00"}},"Player 2\\RUMBLE":{"note":"","data":["810DA7A0 0000","810DA7A2 00??"],"options":{"Max":"30","Never Rumble":"00"}},"Player 2\\Stamina":{"note":"","data":["810DA794 0000","810DA796 00??"],"options":{"Infinite":"64","No Stamina":"00"}},"Sudden Death Mode\\Player 1":{"note":"","data":["D00E7596 03D7","810DAF78 0000","810D9F7A 0001"],"options":null},"Sudden Death Mode\\Player 2":{"note":"","data":["D00E7596 03D7","810DA790 0000","810DA792 0001"],"options":null}},"EAE6ACE2-020B4384-C:50":{"2X Secondary Weapons":{"note":"","data":["8104C62A 0080"],"options":null},"Access All Platinium Medals":{"note":"","data":["50001301 0000","8004C63D 0004"],"options":null},"Accuracy 100%":{"note":"","data":["8105C896 0064","8105C89A 0064"],"options":null},"Advanced Weapons,Shields \u0026 Extra Ships":{"note":"","data":["8104C636 00FF"],"options":null},"Always Pass Mission":{"note":"","data":["8105C88E 0001"],"options":null},"Bonus Collected":{"note":"Where Bonus Are Available","data":["8005C89F 0002"],"options":null},"Completion Time 0:00":{"note":"","data":["8105C892 0000"],"options":null},"Enemies Destroyed 756":{"note":"","data":["8005C89D 03E7"],"options":null},"Friendly Saves 756":{"note":"","data":["8005C89E 03E7"],"options":null},"Infinite Lives":{"note":"","data":["80067553 03E7"],"options":null},"Level Select":{"note":"","data":["8004C650 0013"],"options":null},"Lives Remaining 756":{"note":"","data":["8005C8A0 03E7"],"options":null}},"EB38F792-190EA246-C:45":{"Away Team\\Infinite Time-Outs":{"note":"","data":["800738E7 0003"],"options":null},"Away Team\\No Time-Outs":{"note":"","data":["800738E7 0000"],"options":null},"Have 99 Tokens":{"note":"","data":["8115F9F0 0063"],"options":null},"Have All\\Cards":{"note":"","data":["50007802 0000","8115F9F2 FFFF"],"options":null},"Have All\\Cheats":{"note":"","data":["50000402 0000","81070788 FFFF"],"options":null},"Have All\\Levels Completed":{"note":"","data":["50001902 0000","8115FB2C FFFF"],"options":null},"Have All\\Stadiums":{"note":"","data":["50000802 0000","81061850 FFFF"],"options":null},"Have All\\Teams":{"note":"","data":["50001102 0000","810C1628 FFFF"],"options":null},"Home Team\\Infinite Time-Outs":{"note":"","data":["80071617 0003"],"options":null},"Home Team\\No Time-Outs":{"note":"","data":["80071617 0000"],"options":null}},"EBA949DC-39BAECBD-C:49":{"Access All Levels":{"note":"","data":["8008A9D6 0001","8008A9EA 0001","8008AA12 0001","8008AA62 0001","8008AA76 0001","8008AA8A 0001","8008AA9E 0001","8008AAB2 0001","8008AAC6 0011","8008AADA 0021","8008AAEE 0001","8008AB16 0011","8008AB2A 0041","8008AB3E 0021","8008AB52 0081","8008AB66 0001","8008AB7A 0081","8008AB8E 0001","8008ABB6 0001","8008ABDE 0001","8008ABF2 0011","8008AC06 0021","8008AC56 0001","8008AF3A 0001","8008AF4E 0001","8008AF62 0001","8008AF76 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81094150 0063","81094152 0063","81094154 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A9297 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810866C2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810864C4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80094305 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A92B5 00??","800A92C5 00??","800A92D5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"EBEEA8DB-F2ECB23C-C:45":{"Infinite Shot Clock":{"note":"","data":["801378DF 0016"],"options":null},"Infinite Turbo\\Team 1\\Player 1":{"note":"","data":["8115B512 FF00"],"options":null},"Infinite Turbo\\Team 1\\Player 2":{"note":"","data":["8115B516 FF00"],"options":null},"Infinite Turbo\\Team 2\\Player 1":{"note":"","data":["8115B50A FF00"],"options":null},"Infinite Turbo\\Team 2\\Player 2":{"note":"","data":["8115B50E FF00"],"options":null},"Infinite Violation Clock":{"note":"","data":["8013783B 005D"],"options":null},"Team 1 Score Select":{"note":"","data":["80137117 00??"],"options":{"00":"00","150":"96"}},"Team 2 Score Select":{"note":"","data":["80137113 00??"],"options":{"00":"00","150":"96"}}},"EBFE2397-FF74DA34-C:45":{"Always Have Rapid Shot":{"note":"This is a constant fire without a break as long as you keep pressing A","data":["800B51AB 0009"],"options":null},"Infinite\\Lives":{"note":"","data":["800B51DD 0063"],"options":null},"Infinite\\Points":{"note":"","data":["810B51E2 FFFF"],"options":null},"Infinite\\Shields":{"note":"","data":["810B51B6 0001"],"options":null},"Secondary Weapon Select":{"note":"B Button Weapon infinite ammo","data":["800B519F 00??"],"options":{"Diagonal Burst":"20","Horizontal Left":"0C","Horizontal Right":"0D","Swarm Missiles":"1A","Vertical Burst":"06"}},"[Unlock All Modes}":{"note":"Enable this as so as you load the game.This Unlocks Classic and Maniacle Mode. To get to Classic Mode you pr ess Right on Player 1. To get to Maniacle Mode, go to Options and press Left on Normal Mode. This can be disabled once saved to mempak.","data":["80070217 0003"],"options":null}},"EC0F690D-32A7438C-C:4A":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C18E2 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803A7DAF 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["8036D1C7 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","80201035 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","801DCB95 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","801FB505 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","801EE8ED 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","80201165 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","801D89FD 0001"],"options":null}},"EC417312-EB31DE5F-C:4A":{"All Equipment Upgrades":{"note":"","data":["801EF4CD 0023","811EF51A 201B"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D01FB9E1 0000","801EF462 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Have All\\Masks":{"note":"","data":["801EF4E8 005A","801EF4E9 0055","801EF4EA 0063","801EF4EB 0061","801EF4EC 005C","801EF4ED 004E","801EF4EE 0056","801EF4EF 0062","801EF4F0 0054","801EF4F1 005E","801EF4F2 0064","801EF4F3 004F","801EF4F4 0058","801EF4F5 0059","801EF4F6 0053","801EF4F7 005B","801EF4F8 0052","801EF4F9 0050","801EF4FA 005F","801EF4FB 005D","801EF4FC 0057","801EF4FD 0060","801EF4FE 0065","801EF4FF 0051"],"options":null},"Have All\\Quest Status Items":{"note":"","data":["801EF51D 0005","811EF51E F7CF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801EF4D2 0002"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801EF4D3 0003"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801EF4D4 0004"],"options":null},"Have\\Bombchu":{"note":"","data":["801EF4D7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801EF4D6 0006"],"options":null},"Have\\Bottle Modifier\\1":{"note":"","data":["801EF4E2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\2":{"note":"","data":["801EF4E3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\3":{"note":"","data":["801EF4E4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\4":{"note":"","data":["801EF4E5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\5":{"note":"","data":["801EF4E6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\6":{"note":"","data":["801EF4E7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Deku Nuts":{"note":"","data":["801EF4D9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801EF4D8 0008"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801EF4E0 0010"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801EF4D1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801EF4DF 000F"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801EF4DE 000E"],"options":null},"Have\\Magic Beans":{"note":"","data":["801EF4DA 000A"],"options":null},"Have\\Ocarina of Time":{"note":"","data":["801EF4D0 0000"],"options":null},"Have\\Pictograph":{"note":"","data":["801EF4DD 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801EF4DC 000C"],"options":null},"Infinite\\Arrows":{"note":"","data":["801EF501 0063"],"options":null},"Infinite\\Bombchus":{"note":"","data":["801EF507 0063"],"options":null},"Infinite\\Bombs":{"note":"","data":["801EF506 0063"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801EF509 0063"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801EF508 0063"],"options":null},"Infinite\\Health":{"note":"","data":["811EF496 0140"],"options":null},"Infinite\\Hearts Options":{"note":"","data":["811EF494 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Magic Beans":{"note":"","data":["801EF50A 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801EF499 0060","811EF4A0 0101"],"options":null},"Infinite\\Powder Kegs":{"note":"","data":["801EF50C 0063"],"options":null},"Infinite\\Rupees":{"note":"","data":["811EF49A 03E7"],"options":null},"Play As":{"note":"","data":["801EF480 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03E6D0B 0020","81400008 40CB"],"options":null},"Replace Sword With":{"note":"","data":["801EF4AC 00??"],"options":{"Deity Link's Sword":"10","Fire Arrow w/ Bow":"02","Hero's Bow":"00","Ice Arrow w/ Bow":"03","Light Arrow w/ Bow":"04"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01FBA40 0008","811EF476 FFFD","D01FBA40 0004","811EF476 0000","D01FBA40 0002","811EF476 FFFE"],"options":null},"Warp Modifier":{"note":"Put this code on and press the start button and it will now take where you wanted to go, turn it back off after you have got there.","data":["D05EC55A 0000","803FF545 0001","813FF54A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"EC58EABF-AD7C7169-C:45":{"Chunky\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FCB0C 0064"],"options":null},"Chunky\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FCB16 0064"],"options":null},"Chunky\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FCB14 0064"],"options":null},"Chunky\\All Golden Bananas\\DK Isle":{"note":"","data":["817FCB18 0064"],"options":null},"Chunky\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FCB0E 0064"],"options":null},"Chunky\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FCB12 0064"],"options":null},"Chunky\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FCB10 0064"],"options":null},"Chunky\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FCB0A 0064"],"options":null},"Chunky\\Infinite Coins":{"note":"","data":["817FCACE 03E7"],"options":null},"Chunky\\Infinite Musical Instrument":{"note":"","data":["817FCAD0 000A"],"options":null},"Diddy\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC9F2 0064"],"options":null},"Diddy\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC9FC 0064"],"options":null},"Diddy\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC9FA 0064"],"options":null},"Diddy\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC9FE 0064"],"options":null},"Diddy\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC9F4 0064"],"options":null},"Diddy\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FC9F8 0064"],"options":null},"Diddy\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC9F6 0064"],"options":null},"Diddy\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC9F0 0064"],"options":null},"Diddy\\Infinite Coins":{"note":"","data":["817FC9B4 03E7"],"options":null},"Diddy\\Infinite Musical Instrument":{"note":"","data":["817FC9B6 000A"],"options":null},"Donkey Kong\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC994 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC99E 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC99C 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC9A0 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC996 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC998 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC992 03E7"],"options":null},"Donkey Kong\\Has Moves":{"note":"","data":["817FC950 0103"],"options":null},"Donkey Kong\\Have Weapon":{"note":"","data":["817FC952 0103"],"options":null},"Donkey Kong\\Infinite Ammo":{"note":"","data":["807FCC45 0096"],"options":null},"Donkey Kong\\Infinite Bananas\\Angry Aztec":{"note":"","data":["817FC95C 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Creepy Castle":{"note":"","data":["817FC966 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Crystal Caves":{"note":"","data":["817FC964 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\FactoryLevel":{"note":"","data":["817FC95E 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Fungi Forest":{"note":"","data":["817FC962 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Galleon Level":{"note":"","data":["817FC9BE 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Jungle Japes":{"note":"","data":["817FC95A 03E7"],"options":null},"Donkey Kong\\Infinite Coins":{"note":"","data":["817FC956 03E7"],"options":null},"Donkey Kong\\Infinite Musical Instrument":{"note":"","data":["817FC954 0103","817FC958 00FF"],"options":null},"Free Pass (Access All Areas)":{"note":"This is exactly what it says, You can walk through Any Locked Door,Gate, Or Area. Have Fun.","data":["8066D226 0001","8066D321 0001"],"options":null},"Infinite\\Camera Film":{"note":"","data":["807FCC49 0005"],"options":null},"Infinite\\Crystal Coconuts":{"note":"","data":["807FCB87 0096"],"options":null},"Infinite\\Health":{"note":"","data":["817FCC4C 041F"],"options":null},"Infinite\\Orange Bombs":{"note":"","data":["807FCC41 0096"],"options":null},"Lanky\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FCA50 0064"],"options":null},"Lanky\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FCA5A 0064"],"options":null},"Lanky\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FCA58 0064"],"options":null},"Lanky\\All Golden Bananas\\DK Isle":{"note":"","data":["817FCA5C 0064"],"options":null},"Lanky\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FCA52 0064"],"options":null},"Lanky\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FCA56 0064"],"options":null},"Lanky\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FCA54 0064"],"options":null},"Lanky\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FCA4E 0064"],"options":null},"Lanky\\Infinite Coins":{"note":"","data":["817FCA12 03E7"],"options":null},"Lanky\\Infinite Musical Instrument":{"note":"","data":["817FCA14 000A"],"options":null},"Tiny\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FCAAE 0064"],"options":null},"Tiny\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FCAA8 0064"],"options":null},"Tiny\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FCAB6 0064"],"options":null},"Tiny\\All Golden Bananas\\DK Isle":{"note":"","data":["817FCABA 0064"],"options":null},"Tiny\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FCAB0 0064"],"options":null},"Tiny\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FCAB4 0064"],"options":null},"Tiny\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FCAB2 0064"],"options":null},"Tiny\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FCAAC 0064"],"options":null},"Tiny\\Infinite Coins":{"note":"","data":["817FCA70 03E7"],"options":null},"Tiny\\Infinite Musical Instrument":{"note":"","data":["817FCA72 000A"],"options":null}},"EC7011B7-7616D72B-C:45":{"Always Have Wallet Size":{"note":"","data":["8011A672 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C84B5 0010","8111B936 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011B4B9 00FF","8011B92F 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C84B5 0000","8011B9E3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest 01).","data":["80025614 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011A656 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011A657 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011A658 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011A659 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023E80F 0020","8023E815 0033"],"options":null},"Dark Link\\Play As Dark Link":{"note":"","data":["D01C84B5 0020","811DAB60 801E","D01C84B5 0020","811F2C24 801D","D01C84B5 0020","811F2C26 AA30","D01C84B5 0020","811CA0E4 801E","D01C84B5 0020","811CA0E6 4B60","D01C84B5 0020","811E4B60 0000","D01C84B5 0020","811E4B62 02FF","D01C84B5 0020","811DAA30 0033","D01C84B5 0020","811DAA32 0901","D01C84B5 0020","811DAB62 27E0","D01C84B5 0020","811E4C90 8009","D01C84B5 0020","811E4C92 7740","D01C84B5 0020","811C8710 801E","D01C84B5 0020","811C8712 4B60"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F2208 0005","801EEC88 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["8011A672 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011A673 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011A671 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A66C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A674 30FF","8111A676 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011A648 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011A64E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011A654 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011A64C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011A646 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011A650 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011A645 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011A644 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011A647 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011A64A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011A64D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011A651 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011A652 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011A649 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011A64F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011A655 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011A653 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011A64B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011A65F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011A678 0007","8011A679 0007","8011A67A 0007","8011A67B 0007","8011A67C 0007","8011A67D 0007","8011A67E 0007","8011A67F 0007","8011A680 0007","8011A681 0007","8011A682 0007","8011A68F 0009","8011A690 0009","8011A691 0009","8011A692 0009","8011A693 0009","8011A699 0009","8011A69C 0009","8011A697 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011A664 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011A65E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011A65D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011A662 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011A65C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111A600 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011A609 0008","8011A60A 0001","8011A60C 0001","8011A603 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011A66A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111B99C 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011B9A5 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C84B5 0020","811DAA90 40CB","D01C84B5 0000","811DB2B2 000D","8011A640 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011A69F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011A6A1 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111A5FE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111B998 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L+R For FMV Select":{"note":"Hold down `L+R' after the Nintendo logo is spinning to see your favourite FMV","data":["D01C84B5 0030","8111A5D2 00A0","D01C84B5 0030","8111A5DA ????"],"options":{"Ending":"FFF8","Fire FMV":"FFF5","Ganondorf FMV":"FFF6","More Triforce FMV":"FFF7","Planet Making FMV":"FFF4","Triforce FMV":"FFF2","fire FMV":"FFF1"}},"Press L\\For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C84B5 0020","811DB2B2 000D"],"options":null},"Press L\\To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C84B5 0020","811DAA90 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C84B5 0010","8011A5D7 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111A5DC ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011A65A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011A65B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011A640 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011A60E 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111B7F2 0000","8111B7F4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}},"Widescreen":{"note":"Originally by Darkludx","data":["81024A18 1000","81024A1A 0023","810920D8 3C07","810920DA 3FE3"],"options":null}},"EC7011B7-7616D72B-C:4A":{"Always Have Wallet Size":{"note":"","data":["8011A672 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C84B5 0010","8111B936 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011B4B9 00FF","8011B92F 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C84B5 0000","8011B9E3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest 01).","data":["80025614 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011A656 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011A657 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011A658 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011A659 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801D8BCA 0006","801F2208 0001","801EEC88 0001"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.If you Use Black Gauntlets,They are as strong as the Golden Gauntlets. This code also gives you the Silver Scale and the Golden Scale and unlimited rupees.","data":["8011A672 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011A673 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011A671 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A66C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A674 30FF","8111A676 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011A648 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011A64E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011A654 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011A64C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011A646 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011A650 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011A645 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011A644 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011A647 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011A64A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011A64D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011A651 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011A652 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011A649 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011A64F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011A655 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011A653 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011A64B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011A65F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011A678 0007","8011A679 0007","8011A67A 0007","8011A67B 0007","8011A67C 0007","8011A67D 0007","8011A67E 0007","8011A67F 0007","8011A680 0007","8011A681 0007","8011A682 0007","8011A68F 0009","8011A690 0009","8011A691 0009","8011A692 0009","8011A693 0009","8011A699 0009","8011A69C 0009","8011A697 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011A664 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011A65E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011A65D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011A662 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011A65C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111A600 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011A609 0008","8011A60A 0001","8011A60C 0001","8011A603 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011A66A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111B99C 0001"],"options":null},"Infinite\\Timers\\All other Timers":{"note":"This cheat works on all Race Timers.Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011B9A5 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C84B5 0020","811DAA90 40CB","D01C84B5 0000","811DB2B2 000D","8011A640 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011A69F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011A6A1 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111A5FE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111B998 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C84B5 0020","811DB2B2 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C84B5 0020","811DAA90 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C84B5 0010","8011A5D7 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111A5DC ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011A65A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011A65B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011A640 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011A60E 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111B7F2 0000","8111B7F4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"ECBD95DD-1FAB637D-C:0":{},"ED567D0F-38B08915-C:4A":{"Widescreen":{"note":"Boards in 4:3.","data":["8101FB1A 3FE3","810538D4 080C","810538D6 0074","810538D8 3C1B","810538DA 3FAB","813001D0 449B","813001D2 6000","813001D4 460C","813001D6 0002","813001D8 4606","813001DA 0002","813001DC 0801","813001DE 4E37","813001E0 2400"],"options":null}},"ED98957E-8242DCAC-C:45":{"All Bosses 1 Hit Deaths":{"note":"","data":["811BE482 0000"],"options":null},"Enable\\Max Power Mode":{"note":"","data":["8015D417 0001"],"options":null},"Flashlight Mod":{"note":"","data":["80179448 00??"],"options":{"Off":"00","On":"01"}},"Have All\\Weapons,Items \u0026 Infinite Ammo\\Player 1":{"note":"","data":["8017AA9F 001E","8017AAB3 0008","8017AAB7 0009","801587C4 0009","8015D417 0001","801587C0 000C","801587C1 0060","801587C3 0001","50000601 0000","801587C5 0001","801587CB 0004","801587CD 000C"],"options":null},"Have Trial Mode Unlocked":{"note":"","data":["8110DCEE 0004"],"options":null},"Have\\All Characters In Multi":{"note":"","data":["8115D412 FFFF","8115D410 0003","8015D411 0003"],"options":null},"Infinite Health":{"note":"","data":["8017AABB 0064"],"options":null},"Start with Weapon\\Player 1":{"note":"","data":["8017AAA8 00??"],"options":{"Cool Rocket Launcher With Infinite Ammo":"09","HandGun":"00","Invisible Gun 1 With Infinite Ammo":"06","Invisible Gun 2 With Infinite Ammo":"07","M16 With Infinite Ammo":"04","Machinegun":"01","New Cooler Handgun":"05","Odd Inviso ShotGun With Infinite Ammo":"08","Rocket Launcher":"03","Shotgun":"02","Silenced Handgun":"14"}},"Time is Always 00:00:00":{"note":"","data":["8110DD62 0000"],"options":null}},"EDD6E031-68136013-C:45":{"Always Place 1st":{"note":"","data":["80112589 0000"],"options":null},"Best Points\\In Stunt Mode\\Player 1":{"note":"","data":["8010C068 00FF"],"options":null},"Best Points\\In Stunt Mode\\Player 2":{"note":"","data":["8010C069 00FF"],"options":null},"Car Select\\Player 1":{"note":"","data":["803CB362 00??"],"options":{"4x4":"0F","Bandit":"05","Compact":"01","Concept":"0B","Coupe":"06","Cruiser":"0D","Exotic":"07","Formula":"12","Hot Rod":"11","Mobster":"03","Mtn Dew":"15","Muscle Car":"02","Pickup":"00","Prototype":"13","Rocket":"14","Sedan":"04","Sportster":"09","Stallion":"0E","Subcompact":"0A","Taxi":"10","Van":"08"}},"Car Select\\Player 2":{"note":"","data":["803CB363 00??"],"options":{"4x4":"0F","Bandit":"05","Compact":"01","Concept":"0B","Coupe":"06","Cruiser":"0D","Exotic":"07","Formula":"12","Hot Rod":"11","Mobster":"03","Mtn Dew":"15","Muscle Car":"02","Pickup":"00","Prototype":"13","Rocket":"14","Sedan":"04","Sportster":"09","Stallion":"0E","Subcompact":"0A","Taxi":"10","Van":"08"}},"Cruiser Front Tire Size\\Player 1":{"note":"","data":["800C0AF9 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Cruiser Rear Tire Size\\Player 1":{"note":"","data":["800C0C01 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Formula Front Tire Size\\Player 1":{"note":"","data":["800C0B0D 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Formula Rear Tire Size\\Player 1":{"note":"","data":["800C0C15 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Front Pickup Tire Size\\Player 1":{"note":"","data":["800C0AC5 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Have All Keys Found\\Alcatraz\\Normal":{"note":"","data":["810C1DC4 FFFF"],"options":null},"Have All Keys Found\\Hawaii\\Normal":{"note":"","data":["810C1DC0 FFFF"],"options":null},"Have All Keys Found\\Las Vegas Normal":{"note":"","data":["810C1DBC FFFF"],"options":null},"Have All Keys Found\\Los Angeles\\Normal":{"note":"","data":["810C1DC6 FFFF"],"options":null},"Have All Keys Found\\New York-Downtown\\Normal":{"note":"","data":["810C1DBE FFFF"],"options":null},"Have All Keys Found\\New York-Uptown\\Normal":{"note":"","data":["810C1DC2 FFFF"],"options":null},"Have All Keys Found\\Seattle\\Normal":{"note":"","data":["810C1DC8 FFFF"],"options":null},"Have\\All Keys \u0026 Cans\\Midway Track":{"note":"","data":["810C1DD0 FFFF"],"options":null},"Have\\All Keys \u0026 Cans\\Stunt Track":{"note":"","data":["810C1DD2 FFFF"],"options":null},"Have\\Extra Cars":{"note":"","data":["50000902 0000","810C1DBC FFFF"],"options":null},"Have\\Game Timer Off":{"note":"","data":["800D9E88 0001"],"options":null},"Have\\Midway Track":{"note":"","data":["800E7D19 0001"],"options":null},"Have\\Stunts All Tracks":{"note":"","data":["8010C200 0001"],"options":null},"Hot Rod Front Tire Size\\Player 1":{"note":"","data":["800C0B09 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Hot Rod Rear Tire Size\\Player 1":{"note":"","data":["800C0C11 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Misc\\Auto Abort Disable":{"note":"","data":["8010C168 0001"],"options":null},"Misc\\Brakes Off":{"note":"","data":["80125C64 0001"],"options":null},"Misc\\Car Collisions Off":{"note":"","data":["8011249A 0001"],"options":null},"Misc\\Car Mines On":{"note":"","data":["8010C167 0001"],"options":null},"Misc\\Cone Mines On":{"note":"","data":["8010C166 0001"],"options":null},"Misc\\Damage Off":{"note":"","data":["8011CDB0 0001"],"options":null},"Misc\\Difficulty Mod":{"note":"","data":["8010C211 00??"],"options":{"Easy":"01","Extremely Hard":"05","Hard":"03","Medium":"02","Very Easy":"00","Very Hard":"04"}},"Misc\\Drones In Race":{"note":"","data":["800D5761 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07"}},"Misc\\Have All Cars In Pipe":{"note":"","data":["810C1DCE FFFF"],"options":null},"Misc\\Heavy Gravity":{"note":"","data":["800E7D22 0002"],"options":null},"Misc\\Heavy Mass":{"note":"","data":["8010C179 0001"],"options":null},"Misc\\Inside-Out Car On":{"note":"","data":["801174E0 0001"],"options":null},"Misc\\Invincible":{"note":"","data":["80119634 0001"],"options":null},"Misc\\Invisible Cars":{"note":"","data":["8010C170 0001"],"options":null},"Misc\\Invisible Tracks":{"note":"","data":["8010C178 0001"],"options":null},"Misc\\Jovian Gravity":{"note":"","data":["800E7D22 0003"],"options":null},"Misc\\Killer Rats On":{"note":"","data":["8010C17C 0001"],"options":null},"Misc\\Laps to Race":{"note":"","data":["8010C0E3 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Misc\\Large Frame":{"note":"","data":["8010C43C 0003"],"options":null},"Misc\\Levitation":{"note":"","data":["8010C254 0001"],"options":null},"Misc\\Light Gravity":{"note":"","data":["800E7D22 0000"],"options":null},"Misc\\Massive Mass":{"note":"","data":["8010C179 0002"],"options":null},"Misc\\New York Cabs":{"note":"","data":["800D9E89 0001"],"options":null},"Misc\\Resurrect In Place":{"note":"","data":["8010C210 0001"],"options":null},"Misc\\Suicide Mode Humans On":{"note":"","data":["80119628 0002"],"options":null},"Misc\\Suicide Mode On":{"note":"","data":["80119628 0001"],"options":null},"Misc\\Super Speed":{"note":"","data":["80111950 0001"],"options":null},"Misc\\Super Tires":{"note":"","data":["8010D3A6 0002"],"options":null},"Misc\\Upside Down Mode":{"note":"","data":["800D0171 0001"],"options":null},"Misc\\Your Car Is Invisible":{"note":"","data":["801127A1 0001"],"options":null},"Mt. Dew Front Tire Size\\Player 1":{"note":"","data":["800C0B19 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Mt. Dew Rear Tire Size\\Player 1":{"note":"","data":["800C0C21 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Pickup Front Tire Size\\Player 2":{"note":"","data":["800C0B1D 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Press GS Activate Cheat Menu":{"note":"","data":["880C2132 0001"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D00D0193 0010","810F58DC 44CB","D00D0193 0010","810F5938 44CB"],"options":null},"Press R to Shrink Car":{"note":"","data":["D00D0193 0010","8010C43C 0001"],"options":null},"Prototype Front Tire Size\\Player 1":{"note":"","data":["800C0B11 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Prototype Rear Tire Size\\Player 1":{"note":"","data":["800C0C19 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Rear Pickup Tire Size\\Player 1":{"note":"","data":["800C0BCD 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Rear Tire Size\\Player 2":{"note":"","data":["800C0C25 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Rocket Front Tire Size\\Player 1":{"note":"","data":["800C0B15 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Rocket Rear Tire Size\\Player 1":{"note":"","data":["800C0C1D 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Total Points\\In Stunt Mode\\Player 1":{"note":"","data":["8010C075 00FF"],"options":null},"Total Points\\In Stunt Mode\\Player 2":{"note":"","data":["8010C077 00FF"],"options":null},"Track Modifier":{"note":"","data":["8010C3F0 00??"],"options":{"Alcatraz":"04","Crash":"08","Half Pipe":"07","Hawaii":"02","Las Vegas":"00","Los Angeles":"05","Midway":"0A","New York Downtown":"01","New York Uptown":"03","Pipe":"09","Seattle":"06","Stunt":"0B"}},"Unlock All Cheats":{"note":"","data":["50000E02 0000","810C20E8 0101"],"options":null},"Van Front Tire Size\\Player 1":{"note":"","data":["800C0AE5 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Van Rear Tire Size\\Player 1":{"note":"","data":["800C0BED 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}}},"EDF419A8-BF1904CC-C:45":{"Access All\\Cars":{"note":"","data":["8002CFF7 000B"],"options":null},"Access All\\Difficulties":{"note":"","data":["8002CFFB 0004"],"options":null},"Access All\\Multiplayer Levels":{"note":"","data":["50000901 0000","8002D000 0001"],"options":null},"Access All\\Tracks":{"note":"","data":["8002CFF3 0006"],"options":null},"Access In-Game Cheats":{"note":"","data":["50001301 0000","8002D008 0001"],"options":null},"Damage Select":{"note":"","data":["8002CD93 00??"],"options":{"Double":"02","Half":"01","Normal":"00","Triple":"03"}},"Health Select":{"note":"","data":["8002CD7F 00??"],"options":{"Bad Only":"02","Good Only":"01","Normal":"00","Off":"03"}},"Infinite Continues":{"note":"","data":["8002CC57 0064"],"options":null},"Low Timer":{"note":"","data":["81025DD4 1040"],"options":null},"Power-Up Select":{"note":"","data":["8002CD7B 00??"],"options":{"?":"05","Health":"06","Invincible":"07","Mines":"01","Nitros":"04","Normal":"00","Off":"08","Rockets":"02","Stealer":"03"}},"Radar":{"note":"","data":["8002CD8F 00??"],"options":{"Off":"01","On":"00"}},"Speed units\\Kph or Mph":{"note":"","data":["81025E68 ????"],"options":{"Kph":"0100","Mph":"0001"}},"View Mode Select?":{"note":"","data":["8002CD8B 00??"],"options":{"Fisheye":"03","Flip":"02","Fog":"01","Normal":"00"}},"Widescreen":{"note":"","data":["D1178BF6 3F00","81178BF6 3F2B","D1178C16 3F00","81178C16 3F2B"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\01 Coventry Cove":{"note":"","data":["80363DD3 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\02 Mount Mayhem":{"note":"","data":["80351E9B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\03 Inferno Isle":{"note":"","data":["80364633 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\04 Sunset Sands":{"note":"","data":["8033C91B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\05 Metro Madness":{"note":"","data":["8035E61B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\06 Wicked Woods":{"note":"","data":["80357F33 0064"],"options":null}},"EE4A0E33-8FD588C9-C:50":{"Always Have\\99 points":{"note":"","data":["80161EC1 0063"],"options":null},"Always first position":{"note":"","data":["801608D8 0001"],"options":null},"Only race one lap":{"note":"","data":["80161DF5 0001"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D01A3095 0010","811650E8 4077","D01A3095 0010","811650F0 4077"],"options":null}},"EE802DC4-690BD57D-C:4A":{"Bike Modifier\\Player 1":{"note":"","data":["8016BDF7 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 2":{"note":"","data":["8016BE43 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 3":{"note":"","data":["8016BE8F 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 4":{"note":"","data":["8016BEDB 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Infinite Primary Weapon\\Player 1":{"note":"","data":["801677B5 00C8"],"options":null},"Infinite Primary Weapon\\Player 2":{"note":"","data":["80167F25 00C8"],"options":null},"Infinite Primary Weapon\\Player 3":{"note":"","data":["80168695 00C8"],"options":null},"Infinite Primary Weapon\\Player 4":{"note":"","data":["80168E05 00C8"],"options":null},"Infinite Shields\\Player 1":{"note":"","data":["801677AD 00C8"],"options":null},"Infinite Shields\\Player 2":{"note":"","data":["80167F1D 00C8"],"options":null},"Infinite Shields\\Player 3":{"note":"","data":["8016868D 00C8"],"options":null},"Infinite Shields\\Player 4":{"note":"","data":["80168DFD 00C8"],"options":null},"Infinite Turbos\\Player 1":{"note":"","data":["80167783 0003","80167787 0003"],"options":null},"Infinite Turbos\\Player 2":{"note":"","data":["80167EF3 0003","80167EF7 0003"],"options":null},"Infinite Turbos\\Player 3":{"note":"","data":["80168663 0003","80168667 0003"],"options":null},"Infinite Turbos\\Player 4":{"note":"","data":["80168DD3 0003","80168DD7 0003"],"options":null},"Mode Select":{"note":"","data":["8009A11F 00??"],"options":{"Anti-Gravity":"08","Anti-Gravity \u0026 Fish Eye Lens":"0A","Boulder":"01","Boulder \u0026 Fish Eye Lens":"03","Boulder \u0026 Wireframe":"11","Fish Eye Lens":"02","Ghost Mode":"40","Magnify":"04","Stealth Mode":"20","Ugly Mode":"80","Wireframe":"10"}},"{All Tracks and Bonus Cars Unlocked}":{"note":"","data":["80198520 0008","50000264 0000","8016B903 0001","50000264 0000","8016BA2F 0001","50000564 0000","8016BB5B 0001","8016BDBB 0001","50000404 0000","8016BDC3 0001","80162B8B 0003","8016BDD3 0003"],"options":null}},"F00F2D4E-340FAAF4-C:45":{"Freeze Time at 02:00":{"note":"","data":["811C479E 1C40"],"options":null},"Have All Groups Completed":{"note":"This gives you all Cups for all Groups.","data":["50002801 0000","801C48DC 0002"],"options":null},"Have Everything Unlocked":{"note":"This will unlock Cars, Races, Missions and the in-built Cheat Menu. This will also replace all the Zombies with Dinosaurs. To access Cheat menu options: Pause Game: Use Control Stick, to scroll the Cheat Menu. Press A, to activate Cheats","data":["801C49BD 000F"],"options":null},"Have Infinite\\Free Repairs":{"note":"","data":["8109DEC4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Frozen Opponents":{"note":"","data":["8109DF24 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Grip-O-Matic Tires":{"note":"","data":["8109E05C ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Hot Rod":{"note":"","data":["8109DE64 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Invunerability":{"note":"","data":["8109DEAC ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Mega Turbo":{"note":"","data":["8109DE4C ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Mine Dropping Ability":{"note":"","data":["8009E119 ????"],"options":{"Off":"0000","On":"0064"}},"Have Infinite\\Turbo":{"note":"","data":["8109DE34 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Turbo Nitrous":{"note":"","data":["8109DE7C ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Underwater Ability":{"note":"","data":["8109DEF4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Max Credits":{"note":"This is also Infinite until disabled","data":["811C481B FFFF"],"options":null},"Max Kills":{"note":"This will automatically Clear the stage if enabled and go back to the stage menu","data":["8109AC46 012C"],"options":null}},"F034001A-AE47ED06-C:45":{},"F03C24CA-C5237BCC-C:45":{"Aquadome\\Player 1\\Cant be Stunned":{"note":"","data":["801F1E3B 0000"],"options":null},"Aquadome\\Player 1\\Full Super Bar":{"note":"","data":["811F1E3A 0200"],"options":null},"Aquadome\\Player 1\\Infinite Energy":{"note":"","data":["801F1E33 00AA"],"options":null},"Aquadome\\Player 1\\No Energy":{"note":"","data":["801F1E33 0000"],"options":null},"Aquadome\\Player 2\\Cant be Stunned":{"note":"","data":["801F52CB 0000"],"options":null},"Aquadome\\Player 2\\Full Super Bar":{"note":"","data":["811F52DA 0200"],"options":null},"Aquadome\\Player 2\\Infinite Energy":{"note":"","data":["801F52D3 00AA"],"options":null},"Aquadome\\Player 2\\No Energy":{"note":"","data":["801F52D3 0000"],"options":null},"Backwash Bay\\Player 1\\Cant be Stunned":{"note":"","data":["801F258B 0000"],"options":null},"Backwash Bay\\Player 1\\Full Super Bar":{"note":"","data":["811F259A 0200"],"options":null},"Backwash Bay\\Player 1\\Infinite Energy":{"note":"","data":["801F2593 00AA"],"options":null},"Backwash Bay\\Player 1\\No Energy":{"note":"","data":["801F2593 0000"],"options":null},"Backwash Bay\\Player 2\\Cant be Stunned":{"note":"","data":["801F5A2B 0000"],"options":null},"Backwash Bay\\Player 2\\Full Super Bar":{"note":"","data":["811F5A3A 0200"],"options":null},"Backwash Bay\\Player 2\\Infinite Energy":{"note":"","data":["801F5A33 00AA"],"options":null},"Backwash Bay\\Player 2\\No Energy":{"note":"","data":["801F5A33 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Cant be Stunned":{"note":"","data":["801F2FDB 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Full Super Bar":{"note":"","data":["811F2FEA 0200"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Infinite Energy":{"note":"","data":["801F2FE3 00AA"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\No Energy":{"note":"","data":["801F2FE3 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Cant be Stunned":{"note":"","data":["801F647B 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Full Super Bar":{"note":"","data":["811F648A 0200"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Infinite Energy":{"note":"","data":["801F6483 00AA"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\No Energy":{"note":"","data":["801F6483 0000"],"options":null},"Candy Factory\\Player 1\\Cant be Stunned":{"note":"","data":["801F270B 0000"],"options":null},"Candy Factory\\Player 1\\Full Super Bar":{"note":"","data":["811F271A 0200"],"options":null},"Candy Factory\\Player 1\\Infinite Energy":{"note":"","data":["801F2713 00AA"],"options":null},"Candy Factory\\Player 1\\No Energy":{"note":"","data":["801F2713 0000"],"options":null},"Candy Factory\\Player 2\\Cant be Stunned":{"note":"","data":["801F5BAB 0000"],"options":null},"Candy Factory\\Player 2\\Full Super Bar":{"note":"","data":["811F5BBA 0200"],"options":null},"Candy Factory\\Player 2\\Infinite Energy":{"note":"","data":["801F5BB3 00AA"],"options":null},"Candy Factory\\Player 2\\No Energy":{"note":"","data":["801F5BB3 0000"],"options":null},"Clayribbean Cruise\\Player 1\\Cant be Stunned":{"note":"","data":["801F24FB 0000"],"options":null},"Clayribbean Cruise\\Player 1\\Full Super Bar":{"note":"","data":["811F250A 0200"],"options":null},"Clayribbean Cruise\\Player 1\\Infinite Energy":{"note":"","data":["801F2503 00AA"],"options":null},"Clayribbean Cruise\\Player 1\\No Energy":{"note":"","data":["801F2503 0000"],"options":null},"Clayribbean Cruise\\Player 2\\Cant be Stunned":{"note":"","data":["801F599B 0000"],"options":null},"Clayribbean Cruise\\Player 2\\Full Super Bar":{"note":"","data":["811F59AA 0200"],"options":null},"Clayribbean Cruise\\Player 2\\Infinite Energy":{"note":"","data":["801F59A3 00AA"],"options":null},"Clayribbean Cruise\\Player 2\\No Energy":{"note":"","data":["801F59A3 0000"],"options":null},"Extra Characters/Secret Options":{"note":"","data":["801A2B41 000F"],"options":null},"Freezing Fortress\\Player 1\\Cant be Stunned":{"note":"","data":["801F239B 0000"],"options":null},"Freezing Fortress\\Player 1\\Full Super Bar":{"note":"","data":["811F23AA 0200"],"options":null},"Freezing Fortress\\Player 1\\Infinite Energy":{"note":"","data":["801F23A3 00AA"],"options":null},"Freezing Fortress\\Player 1\\No Energy":{"note":"","data":["801F23A3 0000"],"options":null},"Freezing Fortress\\Player 2\\Cant be Stunned":{"note":"","data":["801F583B 0000"],"options":null},"Freezing Fortress\\Player 2\\Full Super Bar":{"note":"","data":["811F584A 0200"],"options":null},"Freezing Fortress\\Player 2\\Infinite Energy":{"note":"","data":["801F5843 00AA"],"options":null},"Freezing Fortress\\Player 2\\No Energy":{"note":"","data":["801F5843 0000"],"options":null},"Ghastly Graveyard\\Player 1\\Cant be Stunned":{"note":"","data":["801F262B 0000"],"options":null},"Ghastly Graveyard\\Player 1\\Full Super Bar":{"note":"","data":["811F263A 0200"],"options":null},"Ghastly Graveyard\\Player 1\\Infinite Energy":{"note":"","data":["801F2633 00AA"],"options":null},"Ghastly Graveyard\\Player 1\\No Energy":{"note":"","data":["801F2633 0000"],"options":null},"Ghastly Graveyard\\Player 2\\Cant be Stunned":{"note":"","data":["801F5ACB 0000"],"options":null},"Ghastly Graveyard\\Player 2\\Full Super Bar":{"note":"","data":["811F5ADA 0200"],"options":null},"Ghastly Graveyard\\Player 2\\Infinite Energy":{"note":"","data":["801F5AD3 00AA"],"options":null},"Ghastly Graveyard\\Player 2\\No Energy":{"note":"","data":["801F5AD3 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 1\\Cant be Stunned":{"note":"","data":["801F244B 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 1\\Full Super Bar":{"note":"","data":["811F245A 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 1\\Infinite Energy":{"note":"","data":["801F2453 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 1\\No Energy":{"note":"","data":["801F2453 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 2\\Cant be Stunned":{"note":"","data":["801F58EB 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 2\\Full Super Bar":{"note":"","data":["811F58FA 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 2\\Infinite Energy":{"note":"","data":["801F58F3 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 2\\No Energy":{"note":"","data":["801F58F3 0000"],"options":null},"Infinite Time To Choose Your Fighter":{"note":"","data":["81200BEC 03A7"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 1\\Cant be Stunned":{"note":"","data":["801F3BBB 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 1\\Full Super Bar":{"note":"","data":["811F3BCA 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 1\\Infinite Energy":{"note":"","data":["801F3BC3 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 1\\No Energy":{"note":"","data":["801F3BC3 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 2\\Cant be Stunned":{"note":"","data":["801F705B 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 2\\Full Super Bar":{"note":"","data":["811F706A 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 2\\Infinite Energy":{"note":"","data":["801F7063 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 2\\No Energy":{"note":"","data":["801F7063 0000"],"options":null},"Kooky Courtyard\\Player 1\\Cant be Stunned":{"note":"","data":["801F280B 0000"],"options":null},"Kooky Courtyard\\Player 1\\Full Super Bar":{"note":"","data":["811F281A 0200"],"options":null},"Kooky Courtyard\\Player 1\\Infinite Energy":{"note":"","data":["801F2813 00AA"],"options":null},"Kooky Courtyard\\Player 1\\No Energy":{"note":"","data":["801F2813 0000"],"options":null},"Kooky Courtyard\\Player 2\\Cant be Stunned":{"note":"","data":["801F5CAB 0000"],"options":null},"Kooky Courtyard\\Player 2\\Full Super Bar":{"note":"","data":["811F5CBA 0200"],"options":null},"Kooky Courtyard\\Player 2\\Infinite Energy":{"note":"","data":["801F5CB3 00AA"],"options":null},"Kooky Courtyard\\Player 2\\No Energy":{"note":"","data":["801F5CB3 0000"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 1\\Cant be Stunned":{"note":"","data":["801F233B 0000"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 1\\Full Super Bar":{"note":"","data":["811F234A 0200"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 1\\Infinite Energy":{"note":"","data":["801F2343 00AA"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 1\\No Energy":{"note":"","data":["801F2343 0000"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 2\\Cant be Stunned":{"note":"","data":["801F57DB 0000"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 2\\Full Super Bar":{"note":"","data":["811F57EA 0200"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 2\\Infinite Energy":{"note":"","data":["801F57E3 00AA"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 2\\No Energy":{"note":"","data":["801F57E3 0000"],"options":null},"Player 1 Character Modifier":{"note":"","data":["801A2B2F 00??"],"options":{"Blob":"01","Bonker":"02","Boogerman":"03","Dr. Kiln":"04","Earthworm Jim":"05","Houngan":"08","Icky Bod Clay":"09","Kung Pow":"0A","Sumo Santa":"0D","T-Hoppy":"0F","Taffy":"0E"}},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 1\\Cant be Stunned":{"note":"","data":["801F1B0B 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 1\\Full Super Bar":{"note":"","data":["811F1B1A 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 1\\Infinite Energy":{"note":"","data":["801F1B13 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 1\\No Energy":{"note":"","data":["801F1B13 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 2\\Cant be Stunned":{"note":"","data":["801F4FAB 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 2\\Full Super Bar":{"note":"","data":["811F4FBA 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 2\\Infinite Energy":{"note":"","data":["801F4FB3 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 2\\No Energy":{"note":"","data":["801F4FB3 0000"],"options":null},"Rubbage Reef\\Player 1\\Cant be Stunned":{"note":"","data":["801F241B 0000"],"options":null},"Rubbage Reef\\Player 1\\Full Super Bar":{"note":"","data":["811F242A 0200"],"options":null},"Rubbage Reef\\Player 1\\Infinite Energy":{"note":"","data":["801F2423 00AA"],"options":null},"Rubbage Reef\\Player 1\\No Energy":{"note":"","data":["801F2423 0000"],"options":null},"Rubbage Reef\\Player 2\\Cant be Stunned":{"note":"","data":["801F58BB 0000"],"options":null},"Rubbage Reef\\Player 2\\Full Super Bar":{"note":"","data":["811F58CA 0200"],"options":null},"Rubbage Reef\\Player 2\\Infinite Energy":{"note":"","data":["801F58C3 00AA"],"options":null},"Rubbage Reef\\Player 2\\No Energy":{"note":"","data":["801F58C3 0000"],"options":null},"Rubbage Room\\Player 1\\Cant be Stunned":{"note":"","data":["801F464B 0000"],"options":null},"Rubbage Room\\Player 1\\Full Super Bar":{"note":"","data":["811F465A 0200"],"options":null},"Rubbage Room\\Player 1\\Infinite Energy":{"note":"","data":["801F4653 00AA"],"options":null},"Rubbage Room\\Player 1\\No Energy":{"note":"","data":["801F4653 0000"],"options":null},"Rubbage Room\\Player 2\\Cant be Stunned":{"note":"","data":["801F7AEB 0000"],"options":null},"Rubbage Room\\Player 2\\Full Super Bar":{"note":"","data":["811F7AFA 0200"],"options":null},"Rubbage Room\\Player 2\\Infinite Energy":{"note":"","data":["801F7AF3 00AA"],"options":null},"Rubbage Room\\Player 2\\No Energy":{"note":"","data":["801F7AF3 0000"],"options":null},"Santa's Toy Factory\\Player 1\\Cant be Stunned":{"note":"","data":["801F2C3B 0000"],"options":null},"Santa's Toy Factory\\Player 1\\Full Super Bar":{"note":"","data":["811F2C4A 0200"],"options":null},"Santa's Toy Factory\\Player 1\\Infinite Energy":{"note":"","data":["801F2C43 00AA"],"options":null},"Santa's Toy Factory\\Player 1\\No Energy":{"note":"","data":["801F2C43 0000"],"options":null},"Santa's Toy Factory\\Player 2\\Cant be Stunned":{"note":"","data":["801F60DB 0000"],"options":null},"Santa's Toy Factory\\Player 2\\Full Super Bar":{"note":"","data":["811F60EA 0200"],"options":null},"Santa's Toy Factory\\Player 2\\Infinite Energy":{"note":"","data":["801F60E3 00AA"],"options":null},"Santa's Toy Factory\\Player 2\\No Energy":{"note":"","data":["801F60E3 0000"],"options":null},"Stage Modifier":{"note":"","data":["801A2B2B 00??"],"options":{"Aquadome":"19","Backwash Bay":"16","Boogerhenge":"15","Camp Claynaveral":"02","Candy Factory":"00","Claynaveral Hangar":"01","Clayribbean Cruise":"11","Fiery Furnace":"0F","Freezing Fortress":"08","Ghastly Graveyard":"05","Grotto Gulch":"0A","Happy Harry's Hut":"07","Kiln's Hideout":"0E","Kiln's Laboratory":"0D","Kooky Courtyard":"13","Mudville Mansion":"04","Outhouse":"03","Refuse Room":"09","Research Room":"10","Rubbage Reef":"0C","Rubbage Room":"0B","Santa's Toy Factory":"14","Santa's Workship":"12","Spooky Spire":"06","Tribal Tower":"18","Tureen Toilet":"17"}},"Tribal Tower\\Player 1\\Cant be Stunned":{"note":"","data":["801F1BAB 0000"],"options":null},"Tribal Tower\\Player 1\\Full Super Bar":{"note":"","data":["811F1BBA 0200"],"options":null},"Tribal Tower\\Player 1\\Infinite Energy":{"note":"","data":["801F1BB3 00AA"],"options":null},"Tribal Tower\\Player 1\\No Energy":{"note":"","data":["801F1BB3 0000"],"options":null},"Tribal Tower\\Player 2\\Cant be Stunned":{"note":"","data":["801F504B 0000"],"options":null},"Tribal Tower\\Player 2\\Full Super Bar":{"note":"","data":["811F505A 0200"],"options":null},"Tribal Tower\\Player 2\\Infinite Energy":{"note":"","data":["801F5053 00AA"],"options":null},"Tribal Tower\\Player 2\\No Energy":{"note":"","data":["801F5053 0000"],"options":null}},"F050746C-247B820B-C:45":{"Access\\All Bikes \u0026 Tracks":{"note":"","data":["800A77D5 0063"],"options":null},"Access\\Infinite \u0026 All Weapons":{"note":"","data":["50000E02 0000","811B8D7A 0505"],"options":null},"Always 1st":{"note":"","data":["810D7856 0000"],"options":null},"Always Have\\Max Cash":{"note":"","data":["810D6A7A FFFF"],"options":null},"Always Have\\Weapon":{"note":"","data":["801C00B3 00??"],"options":{"Bace":"0C","Banana":"09","Bat":"04","Billie Club":"05","Cattle Prod":"0A","Chain":"0E","Fists":"01","Monkey Wrench":"08","Nunchuk":"0D","Pool Cue":"07","Sledge Hammer":"06","Spiked Club":"02","Taser":"0B","Tiring Iron":"03"}},"Infinite\\Damage":{"note":"","data":["801C0D17 0002"],"options":null},"Infinite\\Health\\To Bike":{"note":"","data":["811B8A38 42F0","811B8A3C 42F0"],"options":null},"Infinite\\Health\\To Character":{"note":"","data":["811BFE10 4489","811BFE12 8000"],"options":null}},"F1850C35-ACE07912-C:45":{"Always Place 1st":{"note":"","data":["802083F1 0001"],"options":null},"Infinite\\Lives":{"note":"","data":["800BAFD2 0009"],"options":null},"Infinite\\Specials On Pickup":{"note":"","data":["80208401 0005"],"options":null}},"F255D6F1-B65D6728-C:4A":{"Access All Boards \u0026 Characters":{"note":"","data":["800500C1 000C"],"options":null},"All Street Work Levels Unlocked":{"note":"","data":["50007801 0000","80050170 00??"],"options":{"Courses unlocked":"01","Courses unlocked with A rank":"05","Courses unlocked with B rank":"04","Courses unlocked with C rank":"03","Courses unlocked with S rank":"06"}},"Class Score Select":{"note":"","data":["8016609E 00??"],"options":{"Class A":"64","Class B":"40","Class C":"20","Class S":"FF"}},"Coin Perfect Select":{"note":"this is for Coin Mode to get Perfect Coin Collection Score straight away when you enter the level","data":["801660B3 00??"],"options":{"Giant House Level 1":"6E","Giant House Level 2":"77","Giant House Level 3":"72","Green Park Level 1":"14","Green park Level 2":"1A","Green park Level 3":"2B","Lost Forest Level 1":"4A","Lost Forest Level 2":"59","Lost Forest Level 3":"80","Snow Festival 64 Levels 1 2 \u0026 3":"7D","Sunset Island Level 1":"6F","Sunset Island Level 2":"74","Sunset Island Level 3":"81"}},"Infinite Time\\Attack Time Time 000000":{"note":"","data":["811137EA 0000"],"options":null},"Infinite Time\\Street Work \u0026 Coin":{"note":"","data":["801137E9 0028"],"options":null},"Infinite Time\\Time Attack":{"note":"","data":["801137EB 0000"],"options":null},"Infinite Turbo\\Player 1":{"note":"","data":["80166019 0009"],"options":null},"Infinite Turbo\\Player2":{"note":"","data":["80167991 0009"],"options":null},"Maxed Out Turbo Bar":{"note":"","data":["811656E8 429F","80166017 0051"],"options":null},"Options\\Camera Type Modifier":{"note":"","data":["810500A6 00??"],"options":{"Roll Off Far":"05","Roll Off Mid":"04","Roll Off Near":"03","Roll On Far":"02","Roll On Mid":"01","Roll On Near":"00"}},"Options\\DJ Function Modifier":{"note":"","data":["810500AC 00??"],"options":{"DJ Function Off":"00","DJ Function On":"01"}},"Options\\Music Modifier":{"note":"","data":["800500A9 00??"],"options":{"BGM Off":"00","BGM On":"FF"}},"Options\\Sound Effects Modifier":{"note":"","data":["810500AA 00??"],"options":{"SE Off":"00","SE On":"FF"}}},"F2A653CB-60633B3B-C:45":{"Found All Letters":{"note":"","data":["810ACBA2 000C"],"options":null},"Have No Letters":{"note":"Keep you kid busy for hours!!!","data":["810ACBA2 0000"],"options":null},"Infinite Strikes":{"note":"","data":["810A760A 0000"],"options":null}},"F35D5335-B7667CB7-C:45":{"Have All Items":{"note":"","data":["50000501 0000","80389C4A 0001","50000301 0000","80389C51 0001","80389C5A 0001","80389C5B 0001","80389C5D 0001","50000E01 0000","80389C60 0001"],"options":null},"Have Exp Points":{"note":"","data":["80389C49 0063"],"options":null},"Have Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C3F 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C45 0001","81389C46 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C3E 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C49 0063"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C48 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the F9 button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C90 ????","89389C92 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CED 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C88 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C88 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C3D 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C42 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"F35D5F95-8AFE3D69-C:45":{"Have All Items":{"note":"","data":["50000501 0000","80389C4A 0001","50000301 0000","80389C51 0001","80389C5A 0001","80389C5B 0001","80389C5D 0001","50000E01 0000","80389C60 0001"],"options":null},"Have Exp Points":{"note":"","data":["80389C49 0063"],"options":null},"Have Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C3F 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C45 0001","81389C46 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C3E 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C49 0063"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C48 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the GS button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C90 ????","89389C92 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CED 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C88 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C88 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C3D 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C42 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"F3C5BF9B-160F33E2-C:45":{"All Masks":{"note":"Press GS To Activate All Masks","data":["891F1210 8780"],"options":null},"Have All\\Crates":{"note":"","data":["810C70F8 7FFF","810C70FA FFFF","810C70FC FFFF","810C70FE FFFF","810C7100 FFFF","800C7102 00FF"],"options":null},"Have All\\Levels":{"note":"","data":["811F1200 FFFF","811F1202 FFFF","811F1201 03E7","811F1203 03E7"],"options":null},"Have All\\Pirate Cages":{"note":"","data":["801F1142 0050","811F11F0 FFFF","811F11F2 FFFF","811F11F4 FFFF","811F11F6 FFFF","811F11F8 00FF","811F11FA FFFF"],"options":null},"Have All\\Yellow Lums":{"note":"","data":["50006401 0000","800C7108 00FF","50001901 0000","800C70BD 00FF","811F1182 0005","50005702 0000","811F1188 FFFF"],"options":null},"Infinite\\Oxygen":{"note":"","data":["810F4B90 4396"],"options":null},"Open Map":{"note":"","data":["810C70F0 FFFF","810C70F2 FFFF"],"options":null},"Start with Full Health":{"note":"","data":["811BC64C 001E"],"options":null},"Widescreen":{"note":"","data":["81099E10 2402","81099E12 0190","81099E34 2402","81099E36 00E0","81089BC4 03E0","81089BC6 0008","81089BC8 2402","81089BCA 0001"],"options":null}},"F3DD35BA-4152E075-C:45":{"Widescreen":{"note":"","data":["81091DFC 3C07","81091DFE 3FE3","8102499C 2402"],"options":null}},"F41B6343-C10661E6-C:50":{"Away Team Scores":{"note":"","data":["801A9579 00??"],"options":{"0 Goal":"00","1 Goal":"01","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08"}},"Home Team Scores":{"note":"","data":["801A86FD 00??"],"options":{"0 Goal":"00","1 Goal":"01","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08"}},"Infinite player creation points":{"note":"","data":["D03E0CF2 0001","803E0CF2 0063"],"options":null}},"F43B45BA-2F0E9B6F-C:4A":{},"F478D8B3-9716DD6D-C:50":{"Cheat Select":{"note":"","data":["8109ACBE ????"],"options":{"All Of The Above":"0FFF","All Pick-Ups Are Grapple":"0040","All Pick-Ups Are Green":"0010","All Pick-Ups Are Red":"0004","All Pick-Ups Are Yellow":"0008","Maintain Speed Off Track":"0001","No Chassis":"0400","No Driver":"0800","No Wheels":"0200","Pick-Ups Are Maximum":"0080","Reversed Rocket Racer Run Track":"0020","Rocket Cars":"0002","Turbo Mode":"0100"}},"Have All Tracks and Building Pieces":{"note":"","data":["812576D4 FFFF","812576D6 FFFF"],"options":null}},"F4CBE92C-B392ED12-C:50":{"999 Kills":{"note":"","data":["80163BFF 0040","80163C01 0040"],"options":null},"Have All Medals":{"note":"","data":["50001801 0000","8017A9D8 0006"],"options":null},"Infinite\\Armor\\Falco":{"note":"","data":["80174187 00FF"],"options":null},"Infinite\\Armor\\Peppy":{"note":"","data":["8017418F 00FF"],"options":null},"Infinite\\Armor\\Slippy":{"note":"","data":["8017418B 00FF"],"options":null},"Infinite\\Dual Blue Lasers":{"note":"","data":["81163C13 0002"],"options":null},"Infinite\\Energy (Except Fox))":{"note":"","data":["80179A27 00FF","80179A23 00FF","80179A1F 00FF"],"options":null},"Infinite\\Hyper Laser":{"note":"","data":["81163C13 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["80163C09 0063"],"options":null},"Level Select":{"note":"","data":["8017A39F 00??"],"options":{"Aquas":"0D","Area 6":"03","Bolse":"11","Corneria":"00","Corneria (Multi)":"14","Fortuna":"0E","Glitch":"04","Katina":"10","Macbeth":"0B","Meteo":"01","Sector X":"02","Sector Y":"05","Sector Z":"12","Solar":"07","Titania":"0C","Training Mode Level":"0A","Venom 1":"06","Venom 2":"09","Venom With Starwolf":"13","Zoness":"08"}},"Loads O' Hits":{"note":"","data":["80163C03 00FF"],"options":null},"Unlimited\\Boost\\Player 1":{"note":"","data":["8113E6FC 0000","8113E6FE 0000","811415DC 0000","811415DE 0000"],"options":null},"Unlimited\\Smart Bombs":{"note":"","data":["80179F0B 0063"],"options":null}},"F5237301-99E3EE93-C:50":{"1000 Garibs":{"note":"","data":["80291297 0064"],"options":null},"All levels unlocked":{"note":"At the main menu, where it says: Start, practice, options, \u0026 time trial, hold D-pad up, then the glove, playing-with-the-ball icon, will jump down into the lower left corner of the screen, then press the A button, and a level select screen will be available with all ordinary and boss levels, etc. available","data":["80298CFD 00A0"],"options":null},"Cheat Modifier\\1":{"note":"","data":["80298CFE 00??"],"options":{"Big ball":"02","Both of the above":"03","Low gravity":"01"}},"Cheat Modifier\\2":{"note":"","data":["80298CFF 00??"],"options":{"All of the above":"7B","Call ball":"02","Control ball":"20","Infinite energy":"40","Locate caribs":"01","Power ball":"10","Unlimited lives":"08"}},"Have Spell\\Death Spell":{"note":"","data":["812912A8 03E8"],"options":null},"Have Spell\\Enlarge Spell":{"note":"","data":["812912B4 03E8"],"options":null},"Have Spell\\Speed Up Spell":{"note":"","data":["812912B8 03E8"],"options":null},"Have Spell\\Sticky Fingers Spell":{"note":"","data":["812912B2 03E8"],"options":null},"Infinite\\99 Lives":{"note":"","data":["8029129B 0063"],"options":null},"Infinite\\Energy":{"note":"","data":["8029129F 0003"],"options":null},"Super Jump":{"note":"","data":["D02AFA14 0080","801EE771 0013"],"options":null},"[100% Complete]\\Save Slot 1":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBA37 0007","50000801 0000","801EBA28 00FF"],"options":null},"[100% Complete]\\Save Slot 2":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBA53 0007","50000801 0000","801EBA44 00FF"],"options":null},"[100% Complete]\\Save Slot 3":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBA6F 0007","50000801 0000","801EBA60 00FF"],"options":null},"[100% Complete]\\Save Slot 4":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBA8B 0007","50000801 0000","801EBA7C 00FF"],"options":null},"[100% Complete]\\Save Slot 5":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBAA7 0007","50000801 0000","801EBA98 00FF"],"options":null},"[100% Complete]\\Save Slot 6":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBAC3 0007","50000801 0000","801EBAB4 00FF"],"options":null}},"F5360FBE-2BF1691D-C:50":{"Access\\Always have Big Laser":{"note":"Use only one of these codes at a time!","data":["802F706F FFFF"],"options":null},"Access\\Enemy Health Modifer attach Activator":{"note":"Use only one of these codes at a time!","data":["812F7062 03E8"],"options":null},"Access\\Full Energy for Lazer":{"note":"Use only one of these codes at a time!","data":["812F706E 0064"],"options":null},"Access\\Gold Helmet":{"note":"Use only one of these codes at a time!","data":["8015D2F7 0003"],"options":null},"Access\\Infinite Health":{"note":"Use only one of these codes at a time!","data":["802F706A 0999"],"options":null},"Access\\Infinite Impact Oil":{"note":"Use only one of these codes at a time!","data":["812F706A 0154"],"options":null},"Access\\Infinite Ryo Impact Fighting":{"note":"Use only one of these codes at a time!","data":["812F7066 0005"],"options":null},"Access\\Infinite Ryo Impact Running":{"note":"Use only one of these codes at a time!","data":["812F70EA 270F"],"options":null},"Access\\Infy Ryo":{"note":"Use only one of these codes at a time!","data":["802F7667 0999"],"options":null},"Access\\Japanese Sombrero":{"note":"Use only one of these codes at a time!","data":["8015D2F7 0001"],"options":null},"Access\\Metal Helmet":{"note":"Use only one of these codes at a time!","data":["8015D2F7 0002"],"options":null},"Access\\Move Lock":{"note":"","data":["8116AE6A 0000","8120D84A 0000"],"options":null},"Access\\Mystical Ninja Skating team":{"note":"","data":["8120D620 4E20","8120DEF4 4E20","8116AE78 4E20"],"options":null},"Access\\Skating Team V2":{"note":"","data":["8120D620 4E20","8120DEF4 4E20","8116AE78 4E20","8116AE6A 0001","8120D84A 0001"],"options":null},"Have\\Bazooka":{"note":"","data":["8015D3CB 0001"],"options":null},"Have\\Blue Item":{"note":"","data":["8015D422 0001"],"options":null},"Have\\Blue Sausage":{"note":"","data":["8015D417 0001"],"options":null},"Have\\Brown Item":{"note":"","data":["8015D402 0001"],"options":null},"Have\\Brown Round Item":{"note":"","data":["8015D40F 0001"],"options":null},"Have\\Chain Pipe":{"note":"","data":["8015D3BF 0002"],"options":null},"Have\\Ebisumaru":{"note":"","data":["8015D3A3 0001"],"options":null},"Have\\Fire Cracker Bomb":{"note":"","data":["8015D3C4 0001"],"options":null},"Have\\Flute":{"note":"","data":["8015D3DB 0001"],"options":null},"Have\\Gold Item":{"note":"","data":["8015D41C 0001"],"options":null},"Have\\Gold Key":{"note":"","data":["8015D412 0001"],"options":null},"Have\\Kunai of Severe Cold":{"note":"","data":["8015D3D4 0001"],"options":null},"Have\\Magic Flying":{"note":"","data":["8015D3F4 0001"],"options":null},"Have\\Magic Mermaid":{"note":"","data":["8015D3FB 0001"],"options":null},"Have\\Magic Mini Ebisu":{"note":"","data":["8015D3F2 0001"],"options":null},"Have\\Magic Sudden Impact":{"note":"","data":["8015D3EC 0001"],"options":null},"Have\\Meat Saw Hammer":{"note":"","data":["8015D3C0 0001"],"options":null},"Have\\Medal of Flames":{"note":"","data":["8015D3DF 0001"],"options":null},"Have\\Pink Item":{"note":"","data":["8015D41B 0001"],"options":null},"Have\\Sasuke Character":{"note":"","data":["8015D3A4 0001"],"options":null},"Have\\Shell":{"note":"","data":["8015D3FC 0001"],"options":null},"Have\\Yae Character":{"note":"","data":["8015D3AB 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8015D2E7 0028"],"options":null},"Infinite\\Lives":{"note":"","data":["8015D2EF 000A"],"options":null},"Infinite\\Ryo":{"note":"","data":["8015D2EA 0010"],"options":null},"Keep Blue Fish":{"note":"","data":["8015D303 0003","50000404 0000","8015D2F3 0003"],"options":null}},"F5363349-DBF9D21B-C:45":{"Have Extra Characters (Gouriki \u0026 Reiji)":{"note":"","data":["8009E3DF 00FF"],"options":null},"Player 1\\Character Modifier":{"note":"","data":["80105001 00??"],"options":{"Azami":"00","Gouriki":"08","Hikari":"0B","Invisible Fighter":"0C","Kai":"03","Kaoru":"07","Kengon":"05","Kyeya":"06","Miki":"02","Reiji":"09","Sakai":"04","Serina":"01","Yami":"0A"}},"Player 1\\Infinite Energy":{"note":"","data":["81105026 03E8"],"options":null},"Player 1\\Needs 1 Round to Win":{"note":"","data":["D009E3F4 0000","8009E3F4 0001"],"options":null},"Player 1\\Never Wins":{"note":"","data":["8009E3F4 0000"],"options":null},"Player 1\\No Energy":{"note":"","data":["81105026 0000"],"options":null},"Player 2\\Character Modifier":{"note":"","data":["8011B399 00??"],"options":{"Azami":"00","Gouriki":"08","Hikari":"0B","Invisible Fighter":"0C","Kai":"03","Kaoru":"07","Kengon":"05","Kyeya":"06","Miki":"02","Reiji":"09","Sakai":"04","Serina":"01","Yami":"0A"}},"Player 2\\Infinite Energy":{"note":"","data":["8111B3BE 03E8"],"options":null},"Player 2\\Needs 1 Round to Win":{"note":"","data":["D009E3F5 0000","8009E3F5 0001"],"options":null},"Player 2\\No Energy":{"note":"","data":["8111B3BE 0000"],"options":null},"Player 2\\P2 Never Wins":{"note":"","data":["8009E3F5 0000"],"options":null}},"F568D51E-7E49BA1E-C:45":{"Carry 20 Bombs At A Time":{"note":"","data":["800AEE0F 0014"],"options":null},"Have\\Pumped up Red Remote Bombs":{"note":"","data":["802AC653 0004"],"options":null},"Infinite\\Credits":{"note":"","data":["802AC62B 0009"],"options":null},"Infinite\\Energy\\Player 1":{"note":"","data":["800AEE07 0002"],"options":null},"Infinite\\Energy\\Player 2":{"note":"","data":["800AEECF 0002"],"options":null},"Infinite\\Energy\\Player 3":{"note":"","data":["800AEF97 0002"],"options":null},"Infinite\\Energy\\Player 4":{"note":"","data":["800AF05F 0002"],"options":null},"Infinite\\Gems":{"note":"","data":["802AC62F 0063"],"options":null},"Infinite\\Lives":{"note":"","data":["802AC627 0063"],"options":null},"Infinite\\Time":{"note":"","data":["802AC643 0001"],"options":null},"Invincible\\Player 1":{"note":"","data":["800AEE01 0001"],"options":null},"Widescreen":{"note":"Narrows Sprites","data":["812B0288 C255","812B0290 43BA","81233BB2 C0F0","D1049DA6 0062","81049DA6 0071","D1049DA6 0050","81049DA6 0064","D1049D9A E148","81049D98 3F15","D1049D9A E148","81049E2E 00CB","D1049D9A E148","81049E20 3F15","D1049D9A E148","81049DAC 4228","D1049D9A E148","81049E34 4228","D10469A4 356C","81046976 0000","D10469A4 356C","810470D2 008C","D10469A4 356C","810470EE 00B4","812A53F8 1969","81242652 0555","812A0782 00A0","812A0796 0420","812428E2 0555","8124286E 0007","812A076A 010B","812A0766 002C","81241F0E 0555","812A07E2 00A0","812A07F6 01FA","812A080A 02BA","812A081E 037A","812A0832 0438","812421BA 0555","812421DA 0007","812A079E 002C","812A07A2 0033","812A07A6 003A","812A07AA 0082","812A07AE 00B2","812A07B2 00E2","812A07B6 0112","81228F4C 080A","81228F4E 9198","812A4660 C644","812A4662 0010","812A4664 3C04","812A4666 3F40","812A4668 4484","812A466A 3000","812A466C 4606","812A466E 5282","812A4670 4606","812A4672 2102","812A4674 3C04","812A4676 4220","812A4678 4484","812A467A 3000","812A467C 4606","812A467E 5280","812A4680 4606","812A4682 2100","812A4684 0808","812A4686 A3D5","812A4688 4406","812A468A 2000"],"options":null}},"F5C5866D-052713D9-C:45":{"All Characters\\Have Max\\Acceleration\\Player 1":{"note":"","data":["50000C0A 0000","80197FF6 0064"],"options":null},"All Characters\\Have Max\\Acceleration\\Player 2":{"note":"","data":["5000120A 0000","801980AA 0064"],"options":null},"All Characters\\Have Max\\Armor\\Player 1":{"note":"","data":["5000120A 0000","80197FF8 0064"],"options":null},"All Characters\\Have Max\\Armor\\Player 2":{"note":"","data":["5000120A 0000","801980AC 0064"],"options":null},"All Characters\\Have Max\\Attributes\\Player 1":{"note":"","data":["5000120A 0000","81197FF6 6464","5000120A 0000","81197FF8 6464"],"options":null},"All Characters\\Have Max\\Attributes\\Player 2":{"note":"","data":["5000120A 0000","811980AA 6464","5000120A 0000","811980AC 6464"],"options":null},"All Characters\\Have Max\\Speed\\Player 1":{"note":"","data":["5000120A 0000","80197FF7 0064"],"options":null},"All Characters\\Have Max\\Speed\\Player 2":{"note":"","data":["5000120A 0000","801980AB 0064"],"options":null},"All Characters\\Have Max\\Target Avoidance\\Player 1":{"note":"","data":["5000120A 0000","80197FF9 0064"],"options":null},"All Characters\\Have Max\\Target Avoidance\\Player 2":{"note":"","data":["5000120A 0000","801980AD 0064"],"options":null},"All Quests Complete\\Player 1":{"note":"","data":["5000120A 0000","81197FF0 01FF"],"options":null},"All Quests Complete\\Player 2":{"note":"","data":["5000120A 0000","811980A4 01FF"],"options":null}},"F611F4BA-C584135C-C:4A":{},"F63B89CE-4582D57D-C:49":{"Always Have\\50 pieces of corn":{"note":"","data":["801E2761 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E2750 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["811E274E 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E2762 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E2755 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E2760 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D008FFA1 0010","811E26C6 1000","D008FFA1 0010","811E26D6 1000"],"options":null},"No Music":{"note":"","data":["801DD906 0000"],"options":null},"Start with Berry Weapon":{"note":"","data":["801E2757 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Subtitles On":{"note":"","data":["801DDB7B 00??"],"options":{"Off":"00","On":"01"}},"Unlock All Levels":{"note":"","data":["81099E30 000F"],"options":null}},"F7F52DB8-2195E636-C:4A":{},"F7FE28F6-C3F2ACC3-C:45":{"Cheat Menu":{"note":"","data":["80336593 0001"],"options":null},"Infinite Credits":{"note":"","data":["81336582 0005","8133658E 0004"],"options":null},"Unlimited Time":{"note":"","data":["8033F31B 0063"],"options":null}},"F82DD377-8C3FB347-C:58":{"100.000 Sponsor Credits \u0026 950 Championship Points In Support Van":{"note":"You Also Have Access To All Cars, Tracks \u0026 Extra Features","data":["80031433 00F3"],"options":null},"Always 1st":{"note":"","data":["80031F93 0001"],"options":null},"Freeze Timer":{"note":"","data":["80031F9F 0000"],"options":null},"Infinite Cash":{"note":"","data":["803A418E 4000"],"options":null},"Max Sponsor Credits":{"note":"","data":["803A6702 0010","803A6704 0001"],"options":null},"No Cones Hit":{"note":"In ARSG Rally School","data":["80031FC3 0000","8003239B 0000"],"options":null},"No Damage Or Failures":{"note":"","data":["80031427 0001"],"options":null},"No Navigator":{"note":"","data":["80031EF7 0000"],"options":null}},"F908CA4C-36464327-C:45":{"Player 1\\1-Hit Death":{"note":"","data":["D01D3484 0078","801D3484 0001"],"options":null},"Player 1\\Fast\\Jump Walk":{"note":"","data":["801D347C 0001"],"options":null},"Player 1\\Fast\\Punch Kick":{"note":"","data":["801D347E 0010"],"options":null},"Player 1\\Fight Gargos Immediately":{"note":"","data":["8012834B 000A"],"options":null},"Player 1\\Fulgore\\Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3478 0020","801D3479 0090","801D34C5 0092","801D3527 005E"],"options":null},"Player 1\\Fulgore\\Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3478 0023","801D3479 00F0","801D34C5 0080","801D3527 00AF"],"options":null},"Player 1\\Infinite Energy":{"note":"","data":["801D3484 0069"],"options":null},"Player 1\\Play As":{"note":"","data":["802C8CB8 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 1\\Slow Jump Walk":{"note":"","data":["801D347D 0050"],"options":null},"Player 1\\Spinal Always Has All Skulls":{"note":"","data":["801D3523 0006"],"options":null},"Player 1\\Undefeated Players Scroll By Quickly":{"note":"","data":["802C8CE8 0007"],"options":null},"Player 1\\Untouchable":{"note":"","data":["801D34D4 000A"],"options":null},"Player 1\\Wins Score":{"note":"","data":["8012830A 00FF"],"options":null},"Player 2\\Fast\\Jump Walk":{"note":"","data":["801D357C 0001"],"options":null},"Player 2\\Fast\\Punch Kick":{"note":"","data":["801D357E 0010"],"options":null},"Player 2\\Fulgore Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3578 0020","801D3579 0090","801D35C5 0092","801D3527 005E"],"options":null},"Player 2\\Fulgore Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3578 0023","801D3579 00F0","801D35C5 0080","801D3527 00AF"],"options":null},"Player 2\\Infinite Energy":{"note":"","data":["801D3584 0078"],"options":null},"Player 2\\Play As":{"note":"","data":["8004EA9D 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 2\\Slow\\Jump Walk":{"note":"","data":["801D357D 0050"],"options":null},"Player 2\\Slow\\Punch Kick":{"note":"","data":["801D357F 0050"],"options":null},"Player 2\\Spinal Always Has All Skulls":{"note":"","data":["801D3623 0006"],"options":null},"Player 2\\Untouchable":{"note":"","data":["801D34D5 000A"],"options":null},"Unlock All Options":{"note":"","data":["8012834C 0006"],"options":null}},"F9D411E3-7CB29BC0-C:45":{"Always Low Temp":{"note":"","data":["810E4F98 0000","810E4F9A 0000"],"options":null},"Auto-Pilot Always On Turbo (Original Excitebike Mode)":{"note":"","data":["810E3142 19AA"],"options":null},"Earthquake Mode":{"note":"","data":["810D7010 3AD0"],"options":null},"Fast\\Movement (Drones)":{"note":"","data":["800D9D55 00A0"],"options":null},"Fast\\Movement (Player)":{"note":"","data":["800D9D65 00AF"],"options":null},"Max Stunt Points":{"note":"","data":["810E4D18 0098","810E4D1A 967F"],"options":null},"No\\Collision Drivers":{"note":"","data":["800D9D34 0040"],"options":null},"No\\Overheating":{"note":"","data":["800CA984 00C3"],"options":null},"Power Turbo":{"note":"","data":["800CA99C 0040","800CA99D 00E0"],"options":null},"Slow\\Movement (Drones)":{"note":"","data":["800D9D55 0060"],"options":null},"Slow\\Movement (Player)":{"note":"","data":["800D9D65 0060"],"options":null},"Steering Control":{"note":"","data":["800C9E50 0040"],"options":null},"Super Speed For All":{"note":"","data":["800CA9A0 0040","800CA9A1 0070"],"options":null},"Unlock\\Difficulties \u0026 All Special Tracks":{"note":"","data":["810F2D50 FFFF"],"options":null},"Unlock\\Silver \u0026 Gold Cup":{"note":"","data":["810F2D4E 0003"],"options":null}},"FA5A3DFF-B4C9CDB9-C:45":{"Aquadome\\Player 1\\Cant be Stunned":{"note":"","data":["80193D1F 0000"],"options":null},"Aquadome\\Player 1\\Full Super Bar":{"note":"","data":["81193D2E 0200"],"options":null},"Aquadome\\Player 1\\Infinite Health":{"note":"","data":["80193D27 00AA"],"options":null},"Aquadome\\Player 1\\No Health":{"note":"","data":["80193D27 0000"],"options":null},"Aquadome\\Player 2\\Cant be Stunned":{"note":"","data":["8019720F 0000"],"options":null},"Aquadome\\Player 2\\Full Super Bar":{"note":"","data":["8119721E 0200"],"options":null},"Aquadome\\Player 2\\Infinite Health":{"note":"","data":["80197217 00AA"],"options":null},"Aquadome\\Player 2\\No Health":{"note":"","data":["80197217 0000"],"options":null},"Backwash Bay\\Player 1\\Cant be Stunned":{"note":"","data":["8019447F 0000"],"options":null},"Backwash Bay\\Player 1\\Full Super Bar":{"note":"","data":["8119448E 0200"],"options":null},"Backwash Bay\\Player 1\\Infinite Health":{"note":"","data":["80194487 00AA"],"options":null},"Backwash Bay\\Player 1\\No Health":{"note":"","data":["80194487 0000"],"options":null},"Backwash Bay\\Player 2\\Cant be Stunned":{"note":"","data":["8019796F 0000"],"options":null},"Backwash Bay\\Player 2\\Full Super Bar":{"note":"","data":["8119797E 0200"],"options":null},"Backwash Bay\\Player 2\\Infinite Health":{"note":"","data":["80197977 00AA"],"options":null},"Backwash Bay\\Player 2\\No Health":{"note":"","data":["80197977 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Cant be Stunned":{"note":"","data":["80194ECF 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Full Super Bar":{"note":"","data":["81194EDE 0200"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Infinite Health":{"note":"","data":["80194ED7 00AA"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\No Health":{"note":"","data":["80194ED7 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Cant be Stunned":{"note":"","data":["801983BF 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Full Super Bar":{"note":"","data":["811983CE 0200"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Infinite Health":{"note":"","data":["801983C7 00AA"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\No Health":{"note":"","data":["801983C7 0000"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 1\\Cant be Stunned":{"note":"","data":["8019422F 0000"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 1\\Full Super Bar":{"note":"","data":["8119423E 0200"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 1\\Infinite Health":{"note":"","data":["80194237 00AA"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 1\\No Health":{"note":"","data":["80194237 0000"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 2\\Cant be Stunned":{"note":"","data":["8019771F 0000"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 2\\Full Super Bar":{"note":"","data":["8119772E 0200"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 2\\Infinite Health":{"note":"","data":["80197727 00AA"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 2\\No Health":{"note":"","data":["80197727 0000"],"options":null},"Candy Factory\\Player 1\\Cant be Stunned":{"note":"","data":["801945FF 0000"],"options":null},"Candy Factory\\Player 1\\Full Super Bar":{"note":"","data":["8119460E 0200"],"options":null},"Candy Factory\\Player 1\\Infinite Health":{"note":"","data":["80194607 00AA"],"options":null},"Candy Factory\\Player 1\\No Health":{"note":"","data":["80194607 0000"],"options":null},"Candy Factory\\Player 2\\Cant be Stunned":{"note":"","data":["80197AEF 0000"],"options":null},"Candy Factory\\Player 2\\Full Super Bar":{"note":"","data":["81197AFE 0200"],"options":null},"Candy Factory\\Player 2\\Infinite Health":{"note":"","data":["80197AF7 00AA"],"options":null},"Candy Factory\\Player 2\\No Health":{"note":"","data":["80197AF7 0000"],"options":null},"Clayribbean Cruise\\Player 1\\Cant be Stunned":{"note":"","data":["80193F3F 0000"],"options":null},"Clayribbean Cruise\\Player 1\\Full Super Bar":{"note":"","data":["81193F4E 0200"],"options":null},"Clayribbean Cruise\\Player 1\\Infinite Health":{"note":"","data":["80193F47 00AA"],"options":null},"Clayribbean Cruise\\Player 1\\No Health":{"note":"","data":["80193F47 0000"],"options":null},"Clayribbean Cruise\\Player 2\\Cant be Stunned":{"note":"","data":["8019742F 0000"],"options":null},"Clayribbean Cruise\\Player 2\\Full Super Bar":{"note":"","data":["8119743E 0200"],"options":null},"Clayribbean Cruise\\Player 2\\Infinite Health":{"note":"","data":["80197437 00AA"],"options":null},"Clayribbean Cruise\\Player 2\\No Health":{"note":"","data":["80197437 0000"],"options":null},"Dog House\\Player 1\\Cant be Stunned":{"note":"","data":["8019653F 0000"],"options":null},"Dog House\\Player 1\\Full Super Bar":{"note":"","data":["8119654E 0200"],"options":null},"Dog House\\Player 1\\Infinite Health":{"note":"","data":["80196547 00AA"],"options":null},"Dog House\\Player 1\\No Health":{"note":"","data":["80196547 0000"],"options":null},"Dog House\\Player 2\\Cant be Stunned":{"note":"","data":["80199A2F 0000"],"options":null},"Dog House\\Player 2\\Full Super Bar":{"note":"","data":["81199A3E 0200"],"options":null},"Dog House\\Player 2\\Infinite Health":{"note":"","data":["80199A37 00AA"],"options":null},"Dog House\\Player 2\\No Health":{"note":"","data":["80199A37 0000"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 1\\Cant be Stunned":{"note":"","data":["80195AAF 0000"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 1\\Full Super Bar":{"note":"","data":["81195ABE 0200"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 1\\Infinite Health":{"note":"","data":["80195AB7 00AA"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 1\\No Health":{"note":"","data":["80195AB7 0000"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 2\\Cant be Stunned":{"note":"","data":["80198F9F 0000"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 2\\Full Super Bar":{"note":"","data":["81198FAE 0200"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 2\\Infinite Health":{"note":"","data":["80198FA7 00AA"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 2\\No Health":{"note":"","data":["80198FA7 0000"],"options":null},"Freezing Fortress\\Player 1\\Cant be Stunned":{"note":"","data":["8019428F 0000"],"options":null},"Freezing Fortress\\Player 1\\Full Super Bar":{"note":"","data":["8119429E 0200"],"options":null},"Freezing Fortress\\Player 1\\Infinite Health":{"note":"","data":["80194297 00AA"],"options":null},"Freezing Fortress\\Player 1\\No Health":{"note":"","data":["80194297 0000"],"options":null},"Freezing Fortress\\Player 2\\Cant be Stunned":{"note":"","data":["8019777F 0000"],"options":null},"Freezing Fortress\\Player 2\\Full Super Bar":{"note":"","data":["8119778E 0200"],"options":null},"Freezing Fortress\\Player 2\\Infinite Health":{"note":"","data":["80197787 00AA"],"options":null},"Freezing Fortress\\Player 2\\No Health":{"note":"","data":["80197787 0000"],"options":null},"Ghastly Graveyard\\Player 1\\Cant be Stunned":{"note":"","data":["8019451F 0000"],"options":null},"Ghastly Graveyard\\Player 1\\Full Super Bar":{"note":"","data":["8119452E 0200"],"options":null},"Ghastly Graveyard\\Player 1\\Infinite Health":{"note":"","data":["80194527 00AA"],"options":null},"Ghastly Graveyard\\Player 1\\No Health":{"note":"","data":["80194527 0000"],"options":null},"Ghastly Graveyard\\Player 2\\Cant be Stunned":{"note":"","data":["80197A0F 0000"],"options":null},"Ghastly Graveyard\\Player 2\\Full Super Bar":{"note":"","data":["81197A1E 0200"],"options":null},"Ghastly Graveyard\\Player 2\\Infinite Health":{"note":"","data":["80197A17 00AA"],"options":null},"Ghastly Graveyard\\Player 2\\No Health":{"note":"","data":["80197A17 0000"],"options":null},"Kooky Courtyard\\Player 1\\Cant be Stunned":{"note":"","data":["801946FF 0000"],"options":null},"Kooky Courtyard\\Player 1\\Full Super Bar":{"note":"","data":["8119470E 0200"],"options":null},"Kooky Courtyard\\Player 1\\Infinite Health":{"note":"","data":["80194707 00AA"],"options":null},"Kooky Courtyard\\Player 1\\No Health":{"note":"","data":["80194707 0000"],"options":null},"Kooky Courtyard\\Player 2\\Cant be Stunned":{"note":"","data":["80197BEF 0000"],"options":null},"Kooky Courtyard\\Player 2\\Full Super Bar":{"note":"","data":["81197BFE 0200"],"options":null},"Kooky Courtyard\\Player 2\\Infinite Health":{"note":"","data":["80197BF7 00AA"],"options":null},"Kooky Courtyard\\Player 2\\No Health":{"note":"","data":["80197BF7 0000"],"options":null},"Other Codes\\Debug Mode":{"note":"With this code, Press C-Up \u0026 C-Down to pick your stage.","data":["810AA1A6 0001"],"options":null},"Other Codes\\Difficulty Modifier":{"note":"","data":["810AE40A 00??"],"options":{"Cookie":"00","Dude":"03","Easy":"01","Normal":"02","Psycho":"04"}},"Other Codes\\Have Booger Man":{"note":"","data":["810AA12A 0001"],"options":null},"Other Codes\\Have Earth Worm Jim":{"note":"","data":["810AA0E2 0001"],"options":null},"Other Codes\\Have High Five":{"note":"","data":["810AA0BE 0001"],"options":null},"Other Codes\\Have Sumo Santa":{"note":"","data":["810AA106 0001"],"options":null},"Other Codes\\Health Meters Modifier":{"note":"","data":["800AE5EF 00??"],"options":{"Off":"00","On":"01"}},"Other Codes\\Portraits Modifier":{"note":"","data":["800AE613 00??"],"options":{"Off":"00","On":"01"}},"Other Codes\\Spillits Modifier":{"note":"","data":["800AE447 00??"],"options":{"Normal":"00","Psycho":"01"}},"Other Codes\\Stun Meters Modifier":{"note":"","data":["800AE5FB 00??"],"options":{"Off":"00","On":"01"}},"Other Codes\\Super Meters Modifier":{"note":"","data":["800AE607 00??"],"options":{"Off":"00","On":"01"}},"Other Codes\\Throws \u0026 Holds Modifier":{"note":"","data":["800AE42F 00??"],"options":{"Off":"01","On":"00"}},"Other Codes\\Time Limit Modifier":{"note":"","data":["800AE423 00??"],"options":{"Off":"01","On":"00"}},"Other Codes\\VS. Arena Select Modifier":{"note":"","data":["800AE43B 00??"],"options":{"Normal":"01","Random":"00"}},"Rubbage Reef Code\\Player 1\\Cant be Stunned":{"note":"","data":["8019430F 0000"],"options":null},"Rubbage Reef Code\\Player 1\\Full Super Bar":{"note":"","data":["8119431E 0200"],"options":null},"Rubbage Reef Code\\Player 1\\Infinite Health":{"note":"","data":["80194317 00AA"],"options":null},"Rubbage Reef Code\\Player 1\\No Health":{"note":"","data":["80194317 0000"],"options":null},"Rubbage Reef Code\\Player 2\\Cant be Stunned":{"note":"","data":["801977FF 0000"],"options":null},"Rubbage Reef Code\\Player 2\\Full Super Bar":{"note":"","data":["8119780E 0200"],"options":null},"Rubbage Reef Code\\Player 2\\Infinite Health":{"note":"","data":["80197807 00AA"],"options":null},"Rubbage Reef Code\\Player 2\\No Health":{"note":"","data":["80197807 0000"],"options":null},"Santa's Toy Factory\\Player 1\\Cant be Stunned":{"note":"","data":["80194B2F 0000"],"options":null},"Santa's Toy Factory\\Player 1\\Full Super Bar":{"note":"","data":["81194B3E 0200"],"options":null},"Santa's Toy Factory\\Player 1\\Infinite Health":{"note":"","data":["80194B37 00AA"],"options":null},"Santa's Toy Factory\\Player 1\\No Health":{"note":"","data":["80194B37 0000"],"options":null},"Santa's Toy Factory\\Player 2\\Cant be Stunned":{"note":"","data":["8019801F 0000"],"options":null},"Santa's Toy Factory\\Player 2\\Full Super Bar":{"note":"","data":["8119802E 0200"],"options":null},"Santa's Toy Factory\\Player 2\\Infinite Health":{"note":"","data":["80198027 00AA"],"options":null},"Santa's Toy Factory\\Player 2\\No Health":{"note":"","data":["80198027 0000"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 1\\Cant be Stunned":{"note":"","data":["801939FF 0000"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 1\\Full Super Bar":{"note":"","data":["81193A0E 0200"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 1\\Infinite Health":{"note":"","data":["80193A07 00AA"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 1\\No Health":{"note":"","data":["80193A07 0000"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 2\\Cant be Stunned":{"note":"","data":["80196EEF 0000"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 2\\Full Super Bar":{"note":"","data":["81196EFE 0200"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 2\\Infinite Health":{"note":"","data":["80196EF7 00AA"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 2\\No Health":{"note":"","data":["80196EF7 0000"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 1\\Cant be Stunned":{"note":"","data":["8019433F 0000"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 1\\Full Super Bar":{"note":"","data":["8119434E 0200"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 1\\Infinite Health":{"note":"","data":["80194347 00AA"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 1\\No Health":{"note":"","data":["80194347 0000"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 2\\Cant be Stunned":{"note":"","data":["8019782F 0000"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 2\\Full Super Bar":{"note":"","data":["8119783E 0200"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 2\\Infinite Health":{"note":"","data":["80197837 00AA"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 2\\No Health":{"note":"","data":["80197837 0000"],"options":null},"Tribal Tower\\Player 1\\Cant be Stunned":{"note":"","data":["80193A9F 0000"],"options":null},"Tribal Tower\\Player 1\\Full Super Bar":{"note":"","data":["81193AAE 0200"],"options":null},"Tribal Tower\\Player 1\\Infinite Health":{"note":"","data":["80193AA7 00AA"],"options":null},"Tribal Tower\\Player 1\\No Health":{"note":"","data":["80193AA7 0000"],"options":null},"Tribal Tower\\Player 2\\Cant be Stunned":{"note":"","data":["80196F8F 0000"],"options":null},"Tribal Tower\\Player 2\\Full Super Bar":{"note":"","data":["81196F9E 0200"],"options":null},"Tribal Tower\\Player 2\\Infinite Health":{"note":"","data":["80196F97 00AA"],"options":null},"Tribal Tower\\Player 2\\No Health":{"note":"","data":["80196F97 0000"],"options":null},"VS. Mode\\Player 1\\Cant be Stunned":{"note":"","data":["8019195F 0000"],"options":null},"VS. Mode\\Player 1\\Full Super Bar":{"note":"","data":["8119916E 0200"],"options":null},"VS. Mode\\Player 1\\Infinite Health":{"note":"","data":["80199167 00AA"],"options":null},"VS. Mode\\Player 1\\No Health":{"note":"","data":["80199167 0000"],"options":null},"VS. Mode\\Player 2\\Cant be Stunned":{"note":"","data":["80194E4F 0000"],"options":null},"VS. Mode\\Player 2\\Full Super Bar":{"note":"","data":["81194E5E 0200"],"options":null},"VS. Mode\\Player 2\\Infinite Health":{"note":"","data":["80194E57 00AA"],"options":null},"VS. Mode\\Player 2\\No Health":{"note":"","data":["80194E57 0000"],"options":null}},"FA8C4571-BBE7F9C0-C:45":{"Always 1st \u0026 final time 00:00.00":{"note":"All Levels","data":["50000301 0000","801CE609 0000"],"options":null},"Difficulty Select":{"note":"","data":["8007BF00 00??"],"options":{"Amateur":"00","Intermediate":"01","Mirror Mode":"03","Professional":"02"}},"Frantic Finale\\Colorado\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019185B 0063"],"options":null},"Frantic Finale\\Colorado\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191882 0063"],"options":null},"Frantic Finale\\Hawaii\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["80191F3B 0063"],"options":null},"Frantic Finale\\Hawaii\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191F62 0063"],"options":null},"Frantic Finale\\Oregon\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018E90B 0063"],"options":null},"Frantic Finale\\Oregon\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E932 0063"],"options":null},"Frantic Finale\\Texas\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018F0AB 0063"],"options":null},"Frantic Finale\\Texas\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018F0D2 0063"],"options":null},"Freewayphobia\\Chicago\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["80191F0B 0063"],"options":null},"Freewayphobia\\Chicago\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191F32 0063"],"options":null},"Freewayphobia\\Dakota\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018D0DB 0063"],"options":null},"Freewayphobia\\Dakota\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018D102 0063"],"options":null},"Freewayphobia\\New York\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018F3DB 0063"],"options":null},"Freewayphobia\\New York\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018F402 0063"],"options":null},"Freewayphobia\\Seattle\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018FCBB 0063"],"options":null},"Freewayphobia\\Seattle\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FCE2 0063"],"options":null},"Level Select":{"note":"","data":["801875A9 00??"],"options":{"Contest":"07","Frantic Finale":"04","Freewayphobia":"02","Motor Way Mania":"01","Options":"08","Practice":"06","Time Trial":"05","Traffic Troubles":"00","Vitory Vehicles":"03"}},"Motor Way Mania\\Alaska\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018E34B 0063"],"options":null},"Motor Way Mania\\Alaska\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E372 0063"],"options":null},"Motor Way Mania\\Las Vegas\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801929DB 0063"],"options":null},"Motor Way Mania\\Las Vegas\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80192A02 0063"],"options":null},"Motor Way Mania\\Los Angeles\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018DBBB 0063"],"options":null},"Motor Way Mania\\Los Angeles\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018DBE2 0063"],"options":null},"Motor Way Mania\\Philadelphia\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019385B 0063"],"options":null},"Motor Way Mania\\Philadelphia\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80193882 0063"],"options":null},"Play As":{"note":"","data":["800D3081 00??"],"options":{"Daisy Duck":"01","Dewey":"07","Donald Duck":"05","Goofy":"02","Huey":"06","Louie":"08","Lugwig Von Drake":"09","Mickey Mouse":"00","Minnie Mouse":"04","Pete":"03"}},"Re-name Characters\\Daisy\\Letter 1":{"note":"","data":["801BE5A6 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 2":{"note":"","data":["801BE5A7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 3":{"note":"","data":["801BE5A8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 4":{"note":"","data":["801BE5A9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 5":{"note":"","data":["801BE5AA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 1":{"note":"","data":["801BE5BC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 2":{"note":"","data":["801BE5BD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 3":{"note":"","data":["801BE5BE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 4":{"note":"","data":["801BE5BF 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 5":{"note":"","data":["801BE5C0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 1":{"note":"","data":["801BE59F 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 2":{"note":"","data":["801BE5A0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 3":{"note":"","data":["801BE5A1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 4":{"note":"","data":["801BE5A2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 5":{"note":"","data":["801BE5A3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 6":{"note":"","data":["801BE5A4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 1":{"note":"","data":["801BE5AC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 2":{"note":"","data":["801BE5AD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 3":{"note":"","data":["801BE5AE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 4":{"note":"","data":["801BE5AF 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 5":{"note":"","data":["801BE5B0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 1":{"note":"","data":["801BE5B7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 2":{"note":"","data":["801BE5B8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 3":{"note":"","data":["801BE5B9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 4":{"note":"","data":["801BE5BA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 1":{"note":"","data":["801BE5C2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 2":{"note":"","data":["801BE5C3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 3":{"note":"","data":["801BE5C4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 4":{"note":"","data":["801BE5C5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 5":{"note":"","data":["801BE5C6 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 1":{"note":"","data":["801BE5C8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 2":{"note":"","data":["801BE5C9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 3":{"note":"","data":["801BE5CA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 4":{"note":"","data":["801BE5CB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 5":{"note":"","data":["801BE5CC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 6":{"note":"","data":["801BE5CD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 1":{"note":"","data":["801BE591 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 2":{"note":"","data":["801BE592 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 3":{"note":"","data":["801BE593 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 4":{"note":"","data":["801BE594 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 5":{"note":"","data":["801BE595 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 6":{"note":"","data":["801BE596 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 1":{"note":"","data":["801BE598 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 2":{"note":"","data":["801BE599 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 3":{"note":"","data":["801BE59A 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 4":{"note":"","data":["801BE59B 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 5":{"note":"","data":["801BE59C 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 6":{"note":"","data":["801BE59D 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 1":{"note":"","data":["801BE5B2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 2":{"note":"","data":["801BE5B3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 3":{"note":"","data":["801BE5B4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 4":{"note":"","data":["801BE5B5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Traffic Troubles\\Grand Canyon\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019311B 0063"],"options":null},"Traffic Troubles\\Grand Canyon\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80193142 0063"],"options":null},"Traffic Troubles\\Indianapolis\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018E75B 0063"],"options":null},"Traffic Troubles\\Indianapolis\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E782 0063"],"options":null},"Traffic Troubles\\New Mexico\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018FD2B 0063"],"options":null},"Traffic Troubles\\New Mexico\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FD52 0063"],"options":null},"Traffic Troubles\\San Fransisco\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["80191A2B 0063"],"options":null},"Traffic Troubles\\San Fransisco\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191A52 0063"],"options":null},"Unlock Everything":{"note":"This will unlock all characters, tracks, mirror mode, all in-game cheats, postcards, pluto's collar and give you all Trophies for every track and difficulties. To have this cheat save to mempak, enable it and then go into the Options Menu and disable the cheat. Go to the Wide-Screen Settings and Change it to Wide-Screen [16.9] and then the B button to get back to Wide-Screen Settings, now go back into Wide-Screen [16.9] and change it back to Normal [4.3].and press the B button until you come back to the main Options Menu.Close the game and load it again to see everything saved to the Mempak and unlocked.","data":["800D3128 008F","800D3129 0094","800D312A 0003","800D312C 0001","800D312F 0080","50000502 0000","800D3130 0009","50000502 0000","800D3131 0024","800D313A 0015","800D313B 007F","800D313C 0001","800D313D 00FF","800D313E 0004","800D313F 0022"],"options":null},"Victory Vehicles\\Everglades\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018FAEB 0063"],"options":null},"Victory Vehicles\\Everglades\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FB12 0063"],"options":null},"Victory Vehicles\\Malibu\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019157B 0063"],"options":null},"Victory Vehicles\\Malibu\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801915A2 0063"],"options":null},"Victory Vehicles\\Washington DC\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019752B 0063"],"options":null},"Victory Vehicles\\Washington DC\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80197552 0063"],"options":null},"Victory Vehicles\\Yellowstone\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018D38B 0063"],"options":null},"Victory Vehicles\\Yellowstone\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018D3B2 0063"],"options":null}},"FB3C48D0-8D28F69F-C:50":{"Level Select":{"note":"","data":["80046333 00??"],"options":{"Level 1":"01","Level 10":"0A","Level 11":"0B","Level 12":"0C","Level 13":"0D","Level 14":"0E","Level 15":"0F","Level 16":"10","Level 17":"11","Level 18":"12","Level 19":"13","Level 2":"02","Level 20":"14","Level 21":"15","Level 22":"16","Level 23":"17","Level 24":"18","Level 25":"19","Level 3":"03","Level 4":"04","Level 5":"05","Level 6":"06","Level 7":"07","Level 8":"08","Level 9":"09"}},"Stop Timer From Counting Down (All Levels)":{"note":"","data":["8101D4E0 2400"],"options":null}},"FBB9F1FA-6BF88689-C:45":{"Infinite\\Atoms":{"note":"","data":["81159286 FFFF"],"options":null},"Infinite\\Lives":{"note":"","data":["80026A67 0063"],"options":null},"Infinite\\Quarks":{"note":"","data":["81159282 FFFF"],"options":null}},"FC70E272-08FFE7AA-C:50":{"0 Enemies To Kill In Big Celebration Parade":{"note":"","data":["803E4DBB 0000"],"options":null},"All levels open":{"note":"","data":["50002001 0000","803F7ED0 0001"],"options":null},"Always Raining":{"note":"","data":["803F2E5F 0005"],"options":null},"Always Snowing":{"note":"","data":["803F2E5D 0005"],"options":null},"Always in 2nd Camera Angle":{"note":"","data":["803F2B89 0001"],"options":null},"Debug Mode":{"note":"","data":["803F651F 0001"],"options":null},"Enable Secret Mini Game":{"note":"","data":["803F652D 0001"],"options":null},"Great Score":{"note":"","data":["813F2E22 03E7"],"options":null},"High Score In Evo's Escape":{"note":"","data":["813E4DDA 7FFF"],"options":null},"Infinite Health\\2 Mouse,Hyena":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DFB51 0080"],"options":null},"Infinite Health\\A. Desert Rat, Vulture, Box, Kang":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DEFD5 0080"],"options":null},"Infinite Health\\Bunny, Racing Turtle":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DF3A9 0080"],"options":null},"Infinite Health\\Cool Cod":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E4039 0080"],"options":null},"Infinite Health\\Desert Fox":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E161D 0080"],"options":null},"Infinite Health\\EVO":{"note":"","data":["801DE085 0080"],"options":null},"Infinite Health\\Elephant":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DE82D 0080"],"options":null},"Infinite Health\\Fox, Pen, Husky, Tortoise Tank":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DFF25 0080"],"options":null},"Infinite Health\\King Rat":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E19F1 0080"],"options":null},"Infinite Health\\Lion, Camel":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E02F9 0080"],"options":null},"Infinite Health\\Rocket Dog":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DEC01 0080"],"options":null},"Infinite Health\\Rocket Husky":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E1DC5 0080"],"options":null},"Infinite Health\\Spit Dog, Bear, King Pen, FB EVO":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DE459 0080"],"options":null},"Infinite Skill\\A\\King Penguin":{"note":"Only Use Infinite Skill A Codes For Animals You Need","data":["801DE5EC 0004"],"options":null},"Infinite Skill\\A\\King Rat":{"note":"Only Use Infinite Skill A Codes For Animals You Need","data":["801E1B84 0004"],"options":null},"Infinite Skill\\A\\Power Mouse":{"note":"Only Use Infinite Skill A Codes For Animals You Need","data":["801DFCE4 0004"],"options":null},"Infinite Skill\\A\\Rocket Dog":{"note":"Only Use Infinite Skill A Codes For Animals You Need","data":["801E3A24 0004"],"options":null},"Infinite Skill\\B\\Armed Desert Rat":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DF16C 0004"],"options":null},"Infinite Skill\\B\\Bear":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DE5F0 0004"],"options":null},"Infinite Skill\\B\\Boxing Kangeroo":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DF16C 0004"],"options":null},"Infinite Skill\\B\\Bunny, Racing Turtle":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DF540 0004"],"options":null},"Infinite Skill\\B\\Desert Fox":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E17B4 0004"],"options":null},"Infinite Skill\\B\\Hyena":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DF914 0004"],"options":null},"Infinite Skill\\B\\Lion":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E0490 0004"],"options":null},"Infinite Skill\\B\\Power Pen, Husky, Fox, Tort Tank":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E00BC 0004"],"options":null},"Infinite Skill\\B\\Rocket Dog":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E3A28 0004"],"options":null},"Infinite Skill\\B\\Rocket Husky":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E1F5C 0004"],"options":null},"Title Screen":{"note":"Press the Pause Button to takes you to Title Screen","data":["803F6799 0000"],"options":null}},"FC74D475-9A0278AB-C:45":{"1 Win Needed\\Player 1":{"note":"","data":["D00BAD0F 0000","800BAD0F 0001"],"options":null},"1 Win Needed\\Player 2":{"note":"","data":["D00BB04F 0000","800BB04F 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["810BACDC 42C8"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["810BB01C 42C8"],"options":null},"Infinite Time":{"note":"","data":["810E69AC 42F0"],"options":null},"Max Chemical X\\Player 1":{"note":"","data":["800BAD28 0003"],"options":null},"Max Chemical X\\Player 2":{"note":"","data":["800BB068 0003"],"options":null},"Never Win\\Player 1":{"note":"","data":["800BAD0F 0000"],"options":null},"Never Win\\Player 2":{"note":"","data":["800BB04F 0000"],"options":null},"No Chemical X\\Player 1":{"note":"","data":["800BAD28 0000"],"options":null},"No Chemical X\\Player 2":{"note":"","data":["800BB068 0000"],"options":null},"No Health\\Player 1":{"note":"","data":["810BACDC 0000"],"options":null},"No Health\\Player 2":{"note":"","data":["810BB01C 0000"],"options":null}},"FC7797BF-4A95E83C-C:50":{"Access All Bonus Cars":{"note":"","data":["50000302 0000","80098583 0001","50000302 0000","8009858B 0001"],"options":null},"Always 1st Place":{"note":"","data":["810A5F30 0001"],"options":null},"Infinite Time":{"note":"","data":["810CE72E 03E7"],"options":null},"Max Points":{"note":"","data":["810CE702 010A"],"options":null},"Speedometer Select":{"note":"","data":["810CE7C2 00??"],"options":{"KM/H":"00","MPH":"01"}},"Start On Lap Modifier":{"note":"","data":["D00A5F35 0000","810A5F34 00??"],"options":{"Lap 1":"01","Lap 2":"02","Lap 3":"03","Lap 4":"04","Lap 5":"06","Lap 6":"06","Last Lap from Start":"07","Normal":"00"}},"Track Direction Unlocked (All Levels)":{"note":"","data":["800A4131 0003"],"options":null}},"FCBCCB21-72903C6B-C:45":{"Ebisumaru\\Automatically Complete Ebisumaru's Training":{"note":"","data":["803B52F4 0008"],"options":null},"Ebisumaru\\Have\\Magic Mini Ebisu":{"note":"","data":["8015C6F3 0001"],"options":null},"Ebisumaru\\Have\\Meat Saw Hammer":{"note":"","data":["8015C6C3 0001"],"options":null},"Ebisumaru\\Have\\Windup Camera":{"note":"","data":["8015C6D3 0001"],"options":null},"Ebisumaru\\Saw Hammer Modifier":{"note":"","data":["8015C6B3 00??"],"options":{"Gold Saw Hammer":"02","Normal Saw Hammer":"00","Silver Saw Hammer":"01"}},"Goemon\\D-Pad Left To Charge Laser":{"note":"","data":["D00C7D3A 0002","802F706F 0064"],"options":null},"Goemon\\D-Pad Up To Refill Oil":{"note":"","data":["D0067D3A 0008","812F706A 03E7"],"options":null},"Goemon\\Have\\Chain Pipe":{"note":"","data":["8015C6BF 0002"],"options":null},"Goemon\\Have\\Magic Sudden Impact":{"note":"","data":["8015C6EF 0001"],"options":null},"Goemon\\Have\\Medal of Flames":{"note":"","data":["8015C6DF 0001"],"options":null},"Goemon\\Maximum Money":{"note":"","data":["812F70EA 03E7"],"options":null},"Goemon\\Pipe Modifier":{"note":"","data":["8015C6AF 00??"],"options":{"Gold Pipe":"02","Normal Pipe":"00","Silver Pipe":"01"}},"Goemon\\Robot Boss' Has No Health":{"note":"","data":["812F7062 0000"],"options":null},"Have\\Blue Fish":{"note":"","data":["8015C723 0001"],"options":null},"Have\\Blue Sausage":{"note":"","data":["8015C717 0001"],"options":null},"Have\\Brown Item":{"note":"","data":["8015C703 0001"],"options":null},"Have\\Brown Round Item":{"note":"","data":["8015C70F 0001"],"options":null},"Have\\Gold Fish":{"note":"","data":["8015C71F 0001"],"options":null},"Have\\Gold Key":{"note":"","data":["8015C713 0001"],"options":null},"Have\\Pink Fish":{"note":"","data":["8015C71B 0001"],"options":null},"Have\\Silver Fortune Doll":{"note":"","data":["8015C707 0001"],"options":null},"Have\\Triton Shell":{"note":"","data":["8015C6FF 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8015C5E7 0028"],"options":null},"Infinite\\Lives":{"note":"","data":["8015C5EF 0009"],"options":null},"Infinite\\Money":{"note":"","data":["8115C5EA 270F"],"options":null},"Max Heart Containers":{"note":"","data":["8015C5E3 0027"],"options":null},"Play As":{"note":"","data":["8015C5DF 00??"],"options":{"Ebisumaru":"01","Goemon":"00","Sasuke":"02","Yae":"03"}},"Press\\L To Levitate":{"note":"","data":["D00C7D3B 0020","8116A044 4000"],"options":null},"Press\\R To Use Chargeable Weapon":{"note":"","data":["D00C7D3B 0010","8120C896 005D"],"options":null},"Sasuke\\Have\\Fire Cracker Bomb":{"note":"","data":["8015C6C7 0001"],"options":null},"Sasuke\\Have\\Kunai of Severe Cold":{"note":"","data":["8015C6D7 0001"],"options":null},"Sasuke\\Have\\Magic Flying":{"note":"","data":["8015C6F7 0001"],"options":null},"Sasuke\\Kunai Modifier":{"note":"","data":["8015C6B7 00??"],"options":{"2 Kunai's":"01","Gold Kunai":"02","Normal Kunai":"00"}},"Widescreen":{"note":"Some Textboxes Too Small","data":["81017F2A 3FE3"],"options":null},"Yae\\Have\\Bazooka":{"note":"","data":["8015C6DB 0001"],"options":null},"Yae\\Have\\Flute":{"note":"","data":["8015C6CB 0001"],"options":null},"Yae\\Have\\Magic Mermaid":{"note":"","data":["8015C6FB 0001"],"options":null},"Yae\\Katana Modifier":{"note":"","data":["8015C6BB 00??"],"options":{"Gold Katana":"02","Normal Katana":"00","Silver Katana":"01"}}},"FCE0D799-65316C54-C:45":{"Infinite\\Armor\\Player 1":{"note":"","data":["8011D467 0064"],"options":null},"Infinite\\Armor\\Player 2":{"note":"","data":["8011D46B 0064"],"options":null},"Infinite\\Bombs\\Player 1":{"note":"","data":["8011D46F 0003"],"options":null},"Infinite\\Bombs\\Player 2":{"note":"","data":["8011D473 0003"],"options":null},"Level 11 Vulcan Cannon\\Player 1":{"note":"","data":["801239B3 000A"],"options":null},"Level 11 Vulcan Cannon\\Player 2":{"note":"","data":["801239D3 000A"],"options":null},"Press L For Rapid Fire Select\\Player 1":{"note":"","data":["D011BE01 0020","8011D497 00??"],"options":{"On Flak":"14","On Nuke \u0026 Laser":"28"}},"Press L For Rapid Fire Select\\Player 2":{"note":"","data":["D011BE09 0020","8011D49B 00??"],"options":{"On Flak":"14","On Nuke \u0026 Laser":"28"}}},"FD73F775-9724755A-C:50":{"Enable All Cheats":{"note":"Go into Options \u0026 then Magic Codes. Then Code list to turn off \u0026 on what you want.","data":["800DFE2C 001F","50000301 0000","800DFE2D 00FF"],"options":null},"Fifty Frames":{"note":"Identical location to the NTSC address","data":["80079A2B 0003"],"options":null},"Have All\\50 Balloons":{"note":"","data":["8020807D 0032"],"options":null},"Have All\\Control Drumstick \u0026 Adventure Two mode unlocked":{"note":"","data":["801264DC 0003","801264DF 0003","801264F2 0003","801264F3 0008"],"options":null},"Have All\\Keys":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80207E69 001F"],"options":null},"Have All\\None-Adventure tracks completed":{"note":"","data":["50001204 0000","80207F87 0007","50000904 0000","80207FDF 0007","80207E68 0007","80207E6A 0007","80207E6B 0007","80207E6C 000F","80207E6D 00FF"],"options":null},"Have All\\T.T. Amulets":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80207E77 0004"],"options":null},"Have All\\T.T. time trial races beaten":{"note":"","data":["80207E76 0004"],"options":null},"Have All\\Trophies":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80207E6E 0007","80207E6F 00FF"],"options":null},"Have All\\Trophy Adventure races unlocked":{"note":"","data":["50000502 0000","8020807E 0007"],"options":null},"Widescreen":{"note":"","data":["81066006 3FE3","81066156 3FE3","810661BE 3FE3","81126204 3FCE"],"options":null}},"FDA245D2-A74A3D47-C:45":{"All Tracks Unlocked":{"note":"","data":["8019436E 0008","50000264 0000","80167747 0001","50000264 0000","80167873 0001","50000564 0000","8016799F 0001"],"options":null},"Bike Modifier\\Player 1":{"note":"","data":["80167C3F 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 2":{"note":"","data":["80167C8B 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 3":{"note":"","data":["80167CD7 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 4":{"note":"","data":["80167D23 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Extra Bikes Unlocked":{"note":"","data":["80167C13 0001","80167C17 0003"],"options":null},"Extra Levels Unlocked":{"note":"","data":["80167C0B 0001","80167C0F 0001"],"options":null},"Infinite Primary Weapon\\Player 1":{"note":"","data":["801635FD 00C8"],"options":null},"Infinite Primary Weapon\\Player 2":{"note":"","data":["80163D6D 00C8"],"options":null},"Infinite Primary Weapon\\Player 3":{"note":"","data":["801644DD 00C8"],"options":null},"Infinite Primary Weapon\\Player 4":{"note":"","data":["80164C4D 00C8"],"options":null},"Infinite Shields\\Player 1":{"note":"","data":["801635F5 00C8"],"options":null},"Infinite Shields\\Player 2":{"note":"","data":["80163D65 00C8"],"options":null},"Infinite Shields\\Player 3":{"note":"","data":["801644D5 00C8"],"options":null},"Infinite Shields\\Player 4":{"note":"","data":["80164C45 00C8"],"options":null},"Infinite Turbos\\Player 1":{"note":"","data":["801635CB 0003","801635CF 0003"],"options":null},"Infinite Turbos\\Player 2":{"note":"","data":["80163D3B 0003","80163D3F 0003"],"options":null},"Infinite Turbos\\Player 3":{"note":"","data":["801644AB 0003","801644AF 0003"],"options":null},"Infinite Turbos\\Player 4":{"note":"","data":["80164C1B 0003","80164C1F 0003"],"options":null},"Mode Select":{"note":"","data":["80095F6F 00??"],"options":{"Anti-Gravity":"08","Anti-Gravity \u0026 Fish Eye Lens":"0A","Boulder":"01","Boulder \u0026 Fish Eye Lens":"03","Boulder \u0026 Wireframe":"11","Fish Eye Lens":"02","Ghost Mode":"40","Magnify":"04","Stealth Mode":"20","Ugly Mode":"80","Wireframe":"10"}}},"FE94E570-E4873A9C-C:44":{"Have 1 Star\\Abdul":{"note":"","data":["80307333 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["8030732F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80307332 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80307331 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80307334 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80307330 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["8030732E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80307335 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80307336 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["80209881 0000","802047A3 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802047A7 0000","8020B749 0000"],"options":null},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EF57B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0209737 0000","80209737 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020B5FF 0000","8020B5FF 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810ADADC 3F80"],"options":null}},"FEE97010-4E94A9A0-C:50":{"Access All\\Cars,Tracks \u0026 Golg Trophies":{"note":"","data":["50000402 0000","81043AA0 FFFF"],"options":null},"Access All\\Platinum Trophies":{"note":"","data":["8102F70C FFFF","8102F70E FFFF"],"options":null},"Access\\Galage '88 UFO Car":{"note":"","data":["810E2C20 0028"],"options":null},"Always 1st":{"note":"","data":["810569B4 0001"],"options":null},"Always Engine Class S":{"note":"","data":["81043AB0 0000"],"options":null},"Easy Mode":{"note":"","data":["81057B10 0001"],"options":null},"Easy Win":{"note":"","data":["810569BA 0007"],"options":null},"Freeze Lap Timer":{"note":"Select Car Attack, And You'll Have All The Cars At Your Disposal For A Quick Spin !!","data":["810569DE 014D"],"options":null},"Infinite Time":{"note":"","data":["811280B2 0C00"],"options":null},"Laps to Race":{"note":"Here you can choose how many laps are in the race, 1-9. Do not use with Option 7-9.","data":["8111CA16 00??"],"options":{"1 Lap to Race":"01","2 Laps to Race":"02","3 Laps to Race":"03","4 Laps to Race":"04","5 Laps to Race":"05","6 Laps to Race":"06","7 Laps to Race":"07","8 Laps to Race":"08","9 Laps to Race":"09"}},"Ultra 64":{"note":"Pick any car, beat stage 8: RR Extreme Extra and the UFO car is yours to drive!","data":["8113DDBA 0018"],"options":null}},"FF14C1DA-167FDE92-C:45":{"In-Game Cheats\\Access Cheat menu":{"note":"","data":["50000504 0000","80100778 0001"],"options":null},"In-Game Cheats\\Enable\\All Items":{"note":"To access simply pause in game play \u0026 then unpause.","data":["8010075C 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Invincibility":{"note":"","data":["802A9C88 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Monsters":{"note":"","data":["802A9DFB 00??"],"options":{"Are Active":"00","Are Gone":"01"}},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A4FF6 0064","812A503E 0064","812A504E 00C8","812A5038 1900","812A5008 04B0","812A503A 0640","812A4FD8 0960","812A503C 0190"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Keys":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A4FF3 000F"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A5067 0001","50000E02 0000","812A4FAC 03E7"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Infinite Health (All Levels)":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on Single-Player, Co-Operative and DUKEMATCH, All Levels.","data":["8024C747 0064","802A4FA9 0064"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5382 0064","812A53CA 0064","812A53DA 00C8","812A53C4 1900","812A5394 04B0","812A53C6 0640","812A5364 0960","812A53C8 0190"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A53F3 0001","50000E02 0000","812A5338 03E7"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on DUKEMATCH, All Levels.","data":["8024AE2F 0064","802A5335 0064"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A570E 0064","812A5756 0064","812A5766 00C8","812A5750 1900","812A5720 04B0","812A5752 0640","812A56F0 0960","812A5754 0190"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A577F 0001","50000E02 0000","812A56C4 03E7"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 4 on DUKEMATCH, All Levels.","data":["8024A98B 0064","802A56C1 0064"],"options":null},"Single-Player (All Levels)\\Have All\\Items \u0026 Infinite Use on all levels":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of. Just press D-Pad Up or D-Pad Down to enable.","data":["812A4C4C 0960","812A4C6A 0064","812A4C7C 04B0","812A4CAC 1900","812A4CAE 0640","812A4CB0 0190","812A4CB2 0064","812A4CC2 00C8"],"options":null},"Single-Player (All Levels)\\Have All\\Keys":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A4C67 000F"],"options":null},"Single-Player (All Levels)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000B01 0000","802A4CD9 0001","50000C02 0000","812A4C20 03E7"],"options":null},"Single-Player (All Levels)\\Have Infinite Health (All Levels)":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels and does what it says on the tin. Infinite health for player 1, All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["80246683 0064","8026DE7B 0064","802A4C1D 0064"],"options":null}},"FF2F2FB4-D161149A-C:45":{"Always Place 1st":{"note":"","data":["8015025B 0001"],"options":null},"Car Upgrades\\'63 Muscle Car":{"note":"","data":["8015065F 0005"],"options":null},"Car Upgrades\\All-Terrain Vehicle":{"note":"","data":["8015066F 0004"],"options":null},"Car Upgrades\\Devastator":{"note":"","data":["80150667 0005"],"options":null},"Car Upgrades\\Italia P69":{"note":"","data":["8015066B 0005"],"options":null},"Car Upgrades\\La Bomba":{"note":"","data":["80150663 0005"],"options":null},"Car Upgrades\\Police Car":{"note":"","data":["80150677 0004"],"options":null},"Car Upgrades\\School Bus":{"note":"","data":["80150673 0004"],"options":null},"Infinite Time":{"note":"","data":["80150A6D 0045"],"options":null},"Play Level Modifier":{"note":"","data":["80150A83 00??"],"options":{"Appalachia":"0C","Arizona":"07","Beverly Hills":"04","Chicago":"0A","Cruise The USA":"0E","Death Valley":"06","Golden Gate Park":"00","Grand Canyon":"08","Indiana":"0B","Iowa":"09","LA Freeway":"05","Redwood Forest":"03","San Francisco":"01","US 101":"02","Washington DC":"0D"}},"Player 1\\Always First Place":{"note":"","data":["8015034B 0001"],"options":null},"Player 1\\Always Have Fastest Car":{"note":"","data":["8015033A 000C"],"options":null},"Player 1\\Gearbox Type Modifier":{"note":"","data":["80150333 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 1\\Lights \u0026 Sirens For Police Car \u0026 School Bus":{"note":"","data":["8115065A 0001","8114E4AA 0001"],"options":null},"Player 2\\Always First Place":{"note":"","data":["801506E7 0001"],"options":null},"Player 2\\Always Have Fastest Car":{"note":"","data":["801506D6 000C"],"options":null},"Player 2\\Gearbox Type Modifier":{"note":"","data":["801506CF 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 2\\Lights \u0026 Sirens For Police Car \u0026 School Bus":{"note":"","data":["811509F6 0001","8114E4C2 0001"],"options":null},"Stop Elapsed Time And No Traffic":{"note":"","data":["80150A69 0000"],"options":null},"Unlimited Time":{"note":"","data":["80150A68 0095","8015097D 0095"],"options":null}}} \ No newline at end of file +{"001A3BD0-AFB3DE1A-C:46":{"Access Level Select":{"note":"On the main menu Scroll down to make CHEATS visible to go into Level Select.For in-Game Cheats,Pause gameplay.","data":["810DD50C 8001"],"options":null},"Have\\All TARZAN Letters":{"note":"","data":["800DD515 00FF"],"options":null},"Have\\Coins Collected 100%":{"note":"","data":["800DD547 0064"],"options":null},"Have\\Full Portrait":{"note":"","data":["800DD514 00FF"],"options":null},"Have\\Level \u0026 Tokens Completed 100%":{"note":"","data":["800DD51F 0000","800DD520 0001","800DD521 0000"],"options":null},"Infinite\\Bonus Timer":{"note":"This is For All Timers on Bonus Levels","data":["801736DE 0025"],"options":null},"Infinite\\Green Weapon":{"note":"","data":["811921F6 0063"],"options":null},"Infinite\\Health":{"note":"","data":["81192320 0120"],"options":null},"Infinite\\Lives":{"note":"","data":["800DD542 00??"],"options":{"3 Lives":"03","99 Lives":"63"}},"Infinite\\Purple Weapon":{"note":"","data":["811921FA 0063"],"options":null},"Infinite\\Red Weapon":{"note":"","data":["811921F8 0063"],"options":null},"Press GS For\\Sabor Attacks\\Sabor 1 Hit Kill":{"note":"","data":["8924A23E 0001"],"options":null}},"0198A651-FC219D84-C:50":{"Team on the left of score board has 0 goals":{"note":"","data":["800375C7 0000"],"options":null},"Team on the left of score board has 15 goals":{"note":"","data":["800375C7 000F"],"options":null},"Team on the right of score board has 0 goals":{"note":"","data":["800375C3 0000"],"options":null},"Team on the right of score board has 15 goals":{"note":"","data":["800375C3 000F"],"options":null}},"02B1538F-C94B88D0-C:45":{"Found All Numbers":{"note":"","data":["810ACFB2 000C"],"options":null},"Have No Numbers":{"note":"Keep you kid busy for hours!!!","data":["810ACFB2 0000"],"options":null},"Infinite Strikes":{"note":"","data":["810A7A76 0000"],"options":null}},"02D8366A-6CABEF9C-C:50":{"Access All Bikes \u0026 Tracks":{"note":"","data":["810A7D16 0063"],"options":null},"Access All Weapons For All Modes":{"note":"","data":["50000E02 0000","811B9EFA 0505"],"options":null},"Always 1st":{"note":"","data":["810D7D96 0000"],"options":null},"Infinite Damage":{"note":"","data":["801C1257 0002"],"options":null},"Infinite Health\\To Bike":{"note":"","data":["811B9BB8 4270"],"options":null},"Infinite Health\\To Character":{"note":"","data":["811C0F90 4489"],"options":null},"Max Cash":{"note":"","data":["810D6FBA FFFF"],"options":null},"No Music Elsewhere":{"note":"","data":["810D61AA 0000"],"options":null},"No Music In Game":{"note":"","data":["810D61AE 0000"],"options":null}},"0304C48E-AC4001B8-C:45":{"Max Score":{"note":"","data":["81158440 05F5","81158442 E0FF"],"options":null},"Play As/Player 1":{"note":"","data":["801514F3 00??"],"options":{"Atomicat":"06","Bob Cat":"04","Hai Jinx":"00","Manx":"02","Muffy Dupont":"03","Pearl":"07","Smokey":"05","Sparky":"01"}},"Play As/Player 2":{"note":"","data":["80151503 00??"],"options":{"Atomicat":"06","Bob Cat":"04","Hai Jinx":"00","Manx":"02","Muffy Dupont":"03","Pearl":"07","Smokey":"05","Sparky":"01"}},"Play As/Player 3":{"note":"","data":["80151513 00??"],"options":{"Atomicat":"06","Bob Cat":"04","Hai Jinx":"00","Manx":"02","Muffy Dupont":"03","Pearl":"07","Smokey":"05","Sparky":"01"}},"Play As/Player 4":{"note":"","data":["80151523 00??"],"options":{"Atomicat":"06","Bob Cat":"04","Hai Jinx":"00","Manx":"02","Muffy Dupont":"03","Pearl":"07","Smokey":"05","Sparky":"01"}}},"033F4C13-319EE7A7-C:45":{"Fail Objectives To Complete Them":{"note":"","data":["810315B8 2402","810315BA 0011"],"options":null},"Go Solo In Multiplayer":{"note":"","data":["D00E0778 0042","801002B7 0001"],"options":null},"Have\\All\\Gadgets":{"note":"","data":["80112F6D 0001"],"options":null},"Have\\All\\Guns On All Levels":{"note":"Once you pick up a Gun You will have all weapons","data":["8105F224 0810","8105F226 0000","8105F228 2442","8105F22A 0001","81400000 3C02","81400002 0100","81400004 2442","81400006 0063","81400008 AE82","8140000A 0288","8140000C AE82","8140000E 0298","81400010 AE82","81400012 02A0","81400014 AE82","81400016 02A8","81400018 AE82","8140001A 02B0","8140001C AE82","8140001E 02C0","81400020 AE82","81400022 02C8","81400024 AE82","81400026 02D0","81400028 AE82","8140002A 02D8","8140002C AE82","8140002E 02E8","81400030 AE82","81400032 02F0","81400034 AE82","81400036 02F8","81400038 AE82","8140003A 0300","8140003C AE82","8140003E 0308","81400040 AE82","81400042 0310","81400044 AE82","81400046 0320","81400048 AE82","8140004A 0330","8140004C AE82","8140004E 0338","81400050 AE82","81400052 0350","81400054 AE82","81400056 0358","81400058 AE82","8140005A 0360","8140005C AE82","8140005E 0370","81400060 AE82","81400062 0378","81400064 AE82","81400066 0380","81400068 AE82","8140006A 0388","8140006C AE82","8140006E 0340","81400070 AE82","81400072 0348","81400074 AE82","81400076 0350","81400078 0801","8140007A 7C8C","8140007C A077","8140007E 01FC"],"options":null},"Have\\All\\Levels Unlocked":{"note":"For Single Player Mode Only","data":["81102EE6 0021"],"options":null},"Have\\All\\Skins + Everyone is Evil":{"note":"","data":["50005C0C 0000","800BF687 0081"],"options":null},"Have\\Tons Of Nightvision":{"note":"For Battery Only","data":["81064C82 1500"],"options":null},"Infinite\\Ammo On All Levels":{"note":"","data":["810648DC 2400"],"options":null},"Infinite\\Ammo On Clip":{"note":"","data":["810649AC 2400"],"options":null},"Infinite\\Time":{"note":"Underground Uprising","data":["8138EE3A 19B8"],"options":null},"Invincibility On All levels":{"note":"","data":["81112F68 0101"],"options":null},"Level select":{"note":"","data":["803B0E5F 0009"],"options":null},"Play Crate Yard Level":{"note":"","data":["80102EDF 0008"],"options":null},"Skip Intro":{"note":"","data":["D03B0E5F 0004","803B0E5F 0009"],"options":null},"Stop Bond From Going Downhill on Cold Reception":{"note":"Press L to Stop, \u0026 R to Go","data":["D10E0778 0020","803A8466 0001","D10E0778 0010","803A8466 0000"],"options":null},"Time Taken Clock At 0:00":{"note":"","data":["80102F02 0000"],"options":null}},"03571182-892FD06D-C:45":{"Infinite\\Continues":{"note":"","data":["8114738C 0009"],"options":null},"Infinite\\Dirt Rollout Rampage\\Player 1":{"note":"","data":["8017DFEB 0002"],"options":null},"Instant\\Win\\Barrier Ball\\Player 1":{"note":"","data":["8016EA97 0005"],"options":null},"Instant\\Win\\Pichu's Power Plant\\Player 1":{"note":"","data":["8016D64F 0050"],"options":null},"Instant\\Win\\Topsy Turvy\\Player 1":{"note":"","data":["80176887 0005"],"options":null},"Max Score":{"note":"","data":["D117F812 03E7","8117F812 03E7"],"options":null},"One Hit KO":{"note":"To Win you must get at least one hit or just return your pokemon.","data":["8014576F 0000","801457C7 0000","8014581F 0000"],"options":null},"Press R To Reset Time":{"note":"Press R To Reset Time","data":["801CE066 0010","81183ACC 0063"],"options":null},"Press R+L to KO Opponents":{"note":"Press R+L Activate","data":["D10CE066 0030","80145767 0000","D10CE066 0030","801457C7 0000","D10CE066 0030","8014576F 0000","D10CE066 0030","8014581F 0000"],"options":null},"Press Z\\for Max HP\\1st Pokemon":{"note":"This will give them Max HP when they are not in use. Just call a Pokemon out and he will then have Max HP. When your Pokemon faints, just press Z again and it will revive itIn Battle Only,Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","8114528E 00FF","D112B554 2000","81145290 00FF"],"options":null},"Press Z\\for Max HP\\2nd Pokemon\\Player 1":{"note":"This will give them Max HP when they are not in use. Just call a Pokemon out and he will then have Max HP. When your Pokemon faints, just press Z again and it will revive itIn Battle Only,Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","811452E6 00FF","D112B554 2000","811452E8 00FF"],"options":null},"Press Z\\for Max HP\\3rd Pokemon\\Player 1":{"note":"This will give them Max HP when they are not in use. Just call a Pokemon out and he will then have Max HP. When your Pokemon faints, just press Z again and it will revive itIn Battle Only,Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","8114533E 00FF","D112B554 2000","81145340 00FF"],"options":null},"Press Z\\for Max L.\\1st Pokemon\\Player 1":{"note":"Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","81145284 0063"],"options":null},"Press Z\\for Max L.\\2nd Pokemon\\Player 1":{"note":"Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","811452DC 0063"],"options":null},"Press Z\\for Max L.\\3rd Pokemon\\Player 1":{"note":"Do not use with anyother Press Z Cheat Code.","data":["D112B554 2000","81145334 0063"],"options":null}},"036897CE-E0D4FA54-C:45":{"All Items":{"note":"","data":["50002402 0202","810EC350 0001","50004601 0000","800EC3D1 0003"],"options":null},"Item Modifier Codes\\Position 01":{"note":"","data":["800EC350 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 02":{"note":"","data":["800EC351 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 03":{"note":"","data":["800EC352 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 04":{"note":"","data":["800EC353 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 05":{"note":"","data":["800EC354 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 06":{"note":"","data":["800EC355 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 07":{"note":"","data":["800EC356 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 08":{"note":"","data":["800EC357 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 09":{"note":"","data":["800EC358 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 10":{"note":"","data":["800EC359 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 11":{"note":"","data":["800EC35A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 12":{"note":"","data":["800EC35B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 13":{"note":"","data":["800EC35C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 14":{"note":"","data":["800EC35D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 15":{"note":"","data":["800EC35E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 16":{"note":"","data":["800EC35F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 17":{"note":"","data":["800EC360 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 18":{"note":"","data":["800EC361 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 19":{"note":"","data":["800EC362 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 20":{"note":"","data":["800EC363 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 21":{"note":"","data":["800EC364 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 22":{"note":"","data":["800EC365 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 23":{"note":"","data":["800EC366 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 24":{"note":"","data":["800EC367 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 25":{"note":"","data":["800EC368 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 26":{"note":"","data":["800EC369 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 27":{"note":"","data":["800EC36A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 28":{"note":"","data":["800EC36B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 29":{"note":"","data":["800EC36C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 30":{"note":"","data":["800EC36D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 31":{"note":"","data":["800EC36E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 32":{"note":"","data":["800EC36F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 33":{"note":"","data":["800EC370 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 34":{"note":"","data":["800EC371 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 35":{"note":"","data":["800EC372 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 36":{"note":"","data":["800EC373 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 37":{"note":"","data":["800EC374 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 38":{"note":"","data":["800EC375 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 39":{"note":"","data":["800EC376 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 40":{"note":"","data":["800EC377 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 41":{"note":"","data":["800EC378 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 42":{"note":"","data":["800EC379 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 43":{"note":"","data":["800EC37A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 44":{"note":"","data":["800EC37B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 45":{"note":"","data":["800EC37C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 46":{"note":"","data":["800EC37D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 47":{"note":"","data":["800EC37E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 48":{"note":"","data":["800EC37F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}}},"0375CF67-56A93FAA-C:4A":{"Always Have Retreat \u0026 Elem Pedra Opened":{"note":"Do not put this on until in-game or the game will freeze.","data":["D01A1312 0000","811A1312 0003"],"options":null},"Day Always 00":{"note":"","data":["811F008C 0000"],"options":null},"Finish All Levels":{"note":"","data":["81196126 5454","81196128 5140","8119612A 4555","8119612C 9514","8119612E 5515"],"options":null},"Hour Always":{"note":"","data":["801960CD 00??"],"options":{"(0 Hour - 24:00 PM - Midnight)":"00","(01:00 AM)":"01","(02:00 AM)":"02","(03:00 AM)":"03","(04:00 AM)":"04","(05:00 AM)":"05","(06:00 AM)":"06","(07:00 AM)":"07","(08:00 AM)":"08","(09:00 AM)":"09","(10:00 AM)":"0A","(11:00 AM)":"0B","(12:00 PM - Noon)":"0C","(13:00 - 1 PM)":"0D","(14:00 - 2 PM)":"0E","(15:00 - 3 PM)":"0F","(16:00 - 4 PM)":"10","(17:00 - 5 PM)":"11","(18:00 - 6 PM)":"12","(19:00 - 7 PM)":"13","(20:00 - 8 PM)":"14","(21:00 - 9 PM)":"15","(22:00 - 10 PM)":"16","(23:00 - 11 PM)":"17"}},"Infinite Goth":{"note":"","data":["8119610E FFFF"],"options":null},"Magnus\\Infinite HP":{"note":"","data":["811932B0 03E7"],"options":null},"Magnus\\Level 99":{"note":"","data":["801932AB 0063"],"options":null},"Magnus\\Max Agi":{"note":"","data":["811932BC 03E7"],"options":null},"Magnus\\Max Dex":{"note":"","data":["811932BE 3E77"],"options":null},"Magnus\\Max HP":{"note":"","data":["811932AE 03E7"],"options":null},"Magnus\\Max Int":{"note":"","data":["811932B8 03E7"],"options":null},"Magnus\\Max Mem":{"note":"","data":["811932BA 03E7"],"options":null},"Magnus\\Max Str":{"note":"","data":["811932B4 03E7"],"options":null},"Magnus\\Max Vit":{"note":"","data":["811932B6 03E7"],"options":null},"Max Goth":{"note":"","data":["8119610C 0098","8119610E 967F"],"options":null},"Open All Paths":{"note":"","data":["81196120 01FF","81196122 677F","81196124 FCFF"],"options":null}},"0414CA61-2E57B8AA-C:50":{"Everything Unlocked\\Save File 1":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8105892E FFFF"],"options":null},"Everything Unlocked\\Save File 2":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8105886E FFFF"],"options":null},"Everything Unlocked\\Save File 3":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8105898E FFFF"],"options":null},"Everything Unlocked\\Save File 4":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","810588CE FFFF"],"options":null},"In-Built Cheat Menu":{"note":"This code gives you all Cheats in Menu","data":["50002001 0000","800585A0 0001"],"options":null},"Infinite\\Ammo (All Levels)":{"note":"","data":["8006894B 0001"],"options":null},"Mod Section\\Cradle in multiplayer":{"note":"Puts the cradle graphic in the levels screen where the facility normally is in the multiplayer levels screen.Warning it doesn't allow you to enter the multiplayer levels screen,it should automatically Have\\selected cradle, which cannot be changed from the multiplayer menus","data":["8002666D 0092","8002666F 0093","80026677 0029","80026673 0008","803230C5 0052","803230C6 0041","803230C7 0044","803230C8 004C","803230C9 0045"],"options":null},"Mod Section\\Enemies Do Nothing":{"note":"","data":["80027E54 00FF"],"options":null},"Mod Section\\Enemy Options":{"note":"\"These Codes Are very very cool but in most places pointless ! But great fun, try then. But remember to deactivate them before coming to the end of the level, otherwise, there will be nothing/no one, to meet or do (:\"","data":["80032142 00??"],"options":{"Enemies Check Around Themselves":"FF","Enemies Come After You":"01","Enemies Move Around \u0026 Check":"97"}},"Mod Section\\Facility Back Zone In Multiplayer\\Part 1\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811E6554 45E4","811E6558 43D5","811E655C C5A7","811E657C 801C","811E657E 6774","811E5164 45E4","811E5168 C383","811E516C 4492","811E518C 801C","811E518E D574","811E78C0 45AD","811E78C4 C383","811E78C8 4440","811E78E8 801C","811E78EA E464","811E4D18 45D0","811E4D1C 4307","811E4D20 C4FB","811E4D40 801C","811E4D42 75EC","811E6738 45CD","811E673C C383","811E6740 43F4","811E6760 801C","811E6762 A0DC","811E5450 45C2","811E5454 4356","811E5458 C598","811E5478 801C","811E547A 6A74","811E5240 4608","811E5244 4307","811E5248 43DC","811E5268 801C","811E526A 962C","811E691C 4606","811E6920 4321","811E6924 449D","811E6944 801C","811E6946 CBEC","801ED447 008A","801ED4DB 008B","801ED56F 008C","801ED603 008D","801ED697 008E","801ED72B 008F","801ED7BF 007D","801ED853 007E","801ED443 002A","801ED4D7 002A","801ED56B 002A","801ED5FF 002A","801ED693 002A","801ED727 002A","801ED7BB 002A","801ED84F 002A","801ED449 0000","801ED4DD 0000","801ED571 0000","801ED605 0000","801ED699 0000","801ED72D 0000","801ED7C1 0000","801ED855 0000","801ED44D 0000","801ED4E1 0000","801ED575 0000","801ED609 0000","801ED69D 0000","801ED731 0000","801ED7C5 0000","801ED859 0000","801EB743 002A","801EB745 0068","811EB746 277F","811EB748 1000","811EB74A 0262","811EB7C2 0190","801EB7C5 0000","811EB7C6 0258"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 2\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811EB7C8 0000","811EB7CC FFFF","811EB7CE FFFF","811EB7D2 0000","801EB7D5 0000","801EB7DB 0000","811EB7E2 0000","801EB7E7 0000","801EB843 002A","801EB845 0068","811EB846 2780","811EB848 1000","811EB84A 0262","811EB8C2 0190","801EB8C5 0000","811EB8C6 0258","811EB8C8 0000","811EB8CC FFFF","811EB8CE FFFF","811EB8D2 0000","801EB8D5 0000","801EB8DB 0000","811EB8E2 0000","801EB8E7 0000","801EB943 002A","801EB945 0068","811EB946 2791","811EB948 1000","811EB94A 0262","811EB9C2 0190","801EB9C5 0000","811EB9C6 0258","811EB9C8 0000","811EB9CC FFFF","811EB9CE FFFF","811EB9D2 0000","801EB9D5 0000","801EB9DB 0000","811EB9E2 0000","801EB9E7 0000","801EBA43 002A","801EBA45 0068","811EBA46 2792","811EBA48 1000","811EBA4A 0262","811EBAC2 0190","801EBAC5 0000","811EBAC6 0258","811EBAC8 0000","811EBACC FFFF","811EBACE FFFF","811EBAD2 0000","801EBAD5 0000","801EBADB 0000","811EBAE2 0000","801EBAE7 0000","801EBB45 00A0","801EBC45 00A0","801EBD45 00A0","801EBE45 00A0","801EBB47 0075","801EBC47 0076","801EBD47 0077","801EBE47 0078","801EBBE7 0001","801EBCE7 0001","801EBDE7 0001","801EBEE7 0001","801EC247 0071","801ECD47 0072","801ECE47 0074","801ECF47 006C","801ED047 0079","801ED147 0083","D01EBFC5 005A","801EBFC5 0000","D11EBFC6 0000","811EBFC6 F333","D11EBFC8 03E8","811EBFC8 0000"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 3\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["D11EBFCA 0000","811EBFCA F0C4","D11EBFCE 4CCC","811EBFCE 000A","D11EBFD2 4CCC","811EBFD2 000A","D11EBFD4 0003","811EBFD4 0000","D11EBFD6 0000","811EBFD6 02C4","801EBFD9 0004","801EBFDB 0000","811EBFE2 0384","801EBFE7 0004","801EBF45 009E","801EBF47 0084","801EBF48 0010","801EC2D9 0000","801EC447 0085","801EC547 0086","811EA6B6 2743","811EA73E 0114","811EA7F2 0115","811EA8A6 00A3","811EA92E 009D","811EA9E2 00A4","811EAA96 00DA","811EAB1E 00DB","811EABD2 00DF","811EAC86 0130","811EAD0E 008D","811EADC2 012E","811EAE76 0111","811EAEFE 2740","811EAFB2 2741","811EB066 00A0","811EB0EE 009E","811EB1A2 009F","811EB256 274F","811EB2DE 2750","811EB392 0117","811EB446 0131","811EB4CE 008E","811EB582 0132","811EB636 00A1","811EB6BE 0119","811EA62E 00FA","801ED3DF 0000","801ED2DF 0001","D0024337 0007","80024337 001F"],"options":null},"Mod Section\\Freeze Unfreeze enemies":{"note":"Press C-Up To Freeze \u0026 C-Down To Unfreeze.","data":["D00572D1 0008","80027E5C 000F","D00572D1 0004","80027E5C 0000"],"options":null},"Mod Section\\Replace Cradle with Citadell hidden level":{"note":"","data":["80025E47 0029","8103DB6A D9B4","8103DB70 3F44","8103DB72 BDEA","8103DB74 3F80","8103DB76 0000","8103DB78 4219","8103DB7A D89D","81058EC0 C470"],"options":null},"Mod Section\\Secret Island on Dam Level":{"note":"For the above code to work,Get to the 2nd guard tower \u0026 go down the ladder on the left hand side \u0026 to the end of the Dock, Press L \u0026 GS and you will be transfered in the water. Just keep walking straight \u0026 you will get to it. Obviously you can't actually climb ladders or anything, you will simply walkthrough anything on that Part, if you want to walk back to the Dock, when you come near it click the cheat back on \u0026 keep pressing L \u0026 GS untill you are back on it.","data":["D004C2D1 0020","800BA78D 0050","880BA78D 0000"],"options":null}},"04DAF07F-0D18E688-C:45":{"Cheat Menu\\All Weapons Enabled":{"note":"","data":["801CC8B9 0001","801CC925 0001","801CD985 0001","801CDA81 0001","801CDB15 0001","801CDB17 0001","801CDB49 0001","801CE479 0001","801CE481 0001","801CE4ED 0001","801CF635 0001"],"options":null},"Cheat Menu\\Cheat Menu Enabled":{"note":"","data":["801CE4E8 0001"],"options":null},"Cheat Menu\\Have All Game Type \u0026 Other":{"note":"","data":["810E16BE FFFF"],"options":null},"Cheat Menu\\Have All Weapons":{"note":"","data":["811CE470 FFFF"],"options":null},"Enable Debug Menu":{"note":"","data":["800DF990 0001"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810A1E74 A65B"],"options":null},"Invincibility":{"note":"","data":["800DEEC3 0001"],"options":null},"Time Always 00:00":{"note":"","data":["801A19C6 0000"],"options":null}},"0549765A-93B9D042-C:4A":{"Have 6 Carrots":{"note":"","data":["80160659 007E"],"options":null},"Have All\\Collectibles\\Stage 1":{"note":"","data":["80160650 0014"],"options":null},"Have All\\Collectibles\\Stage 2":{"note":"","data":["80160651 0014"],"options":null},"Have All\\Collectibles\\Stage 3":{"note":"","data":["80160652 0014"],"options":null},"Have All\\Collectibles\\Stage 4":{"note":"","data":["80160653 0014"],"options":null},"Have All\\Collectibles\\Stage 5":{"note":"","data":["80160654 0014"],"options":null},"Have All\\Collectibles\\Stage 6":{"note":"","data":["80160655 0014"],"options":null},"Have All\\Costumes":{"note":"","data":["8016065A 00FE"],"options":null},"Have All\\Levels":{"note":"","data":["80160648 003F"],"options":null},"Infinite Health":{"note":"","data":["80187BBD 000F"],"options":null},"Max Collectable Items":{"note":"","data":["80160641 0014"],"options":null},"Press L To levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0187BF5 0020","81187B20 4200"],"options":null}},"0553AE9D-EAD8E0C1-C:45":{"1 Hit to Kill Opponent\\Player 1":{"note":"","data":["D10B6354 42C8","810B6354 4080"],"options":null},"1 Hit to Kill Opponent\\Player 2":{"note":"","data":["D10B6170 42C8","810B6170 4080"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["810B6170 42C8"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["810B6354 42C8"],"options":null},"Opponent Has No Energy\\Player 1":{"note":"","data":["810B6354 C080"],"options":null},"Opponent Has No Energy\\Player 2":{"note":"","data":["810B6170 C080"],"options":null},"Player 1 Never Wins":{"note":"","data":["800C0C03 0000"],"options":null},"Player 2 Never Wins":{"note":"","data":["800C0C05 0000"],"options":null},"Unlock Titan Difficulty Level":{"note":"","data":["810BF752 0001"],"options":null}},"056EAB63-C215FCD5-C:4A":{"Infinite\\Energy\\Player 1":{"note":"","data":["81224DC4 00FF"],"options":null},"Infinite\\Energy\\Player 2":{"note":"","data":["81224DC6 00FF"],"options":null},"Infinite\\Time":{"note":"","data":["81224DCC 00FF"],"options":null},"Never Wins\\Player 1":{"note":"","data":["80224DB5 0000"],"options":null},"Never Wins\\Player 2":{"note":"","data":["80224DB7 0000"],"options":null}},"0578F24F-9175BF17-C:4A":{"Car Select":{"note":"","data":["D00F5180 0000","800F5180 00??"],"options":{"Chevrolet Camaro":"03","Chrysler Jeep Jeepster (Prototype)":"08","Default":"00","Dodge Viper":"04","Donkey In Glass Box":"0E","Ferrari F40":"07","Hotdog":"0A","Hummer H1":"05","Jeep Wrangler":"02","McLaren F1":"09","Mitsubishi Eclipse":"01","Nintendo 64 Logo":"0C","Nintendo Power Car":"0B","Porsche 911 Turbo":"06","Taco":"0D"}},"Infinite\\Max Acceleration\\Player 1":{"note":"","data":["800F518D 0005"],"options":null},"Infinite\\Max Acceleration\\Player 2":{"note":"","data":["800F5379 0005"],"options":null},"Infinite\\Max Acceleration\\Player 3":{"note":"","data":["800F5565 0005"],"options":null},"Infinite\\Max Acceleration\\Player 4":{"note":"","data":["800F5751 0005"],"options":null},"Infinite\\Max Handling\\Player 1":{"note":"","data":["800F518C 0005"],"options":null},"Infinite\\Max Handling\\Player 2":{"note":"","data":["800F5378 0005"],"options":null},"Infinite\\Max Handling\\Player 3":{"note":"","data":["800F5564 0005"],"options":null},"Infinite\\Max Handling\\Player 4":{"note":"","data":["800F5750 0005"],"options":null},"Infinite\\Max Money\\Player 1":{"note":"","data":["800F5185 000F"],"options":null},"Infinite\\Max Money\\Player 2":{"note":"","data":["800F5371 000F"],"options":null},"Infinite\\Max Money\\Player 3":{"note":"","data":["800F555D 000F"],"options":null},"Infinite\\Max Money\\Player 4":{"note":"","data":["800F5749 000F"],"options":null},"Infinite\\Max Top Speed\\Player 1":{"note":"","data":["800F518E 0005"],"options":null},"Infinite\\Max Top Speed\\Player 2":{"note":"","data":["800F537A 0005"],"options":null},"Infinite\\Max Top Speed\\Player 3":{"note":"","data":["800F5566 0005"],"options":null},"Infinite\\Max Top Speed\\Player 4":{"note":"","data":["800F5752 0005"],"options":null},"Infinite\\Nitro\\Player 1":{"note":"","data":["800F518F 0009"],"options":null},"Infinite\\Nitro\\Player 2":{"note":"","data":["800F537B 0009"],"options":null},"Infinite\\Nitro\\Player 3":{"note":"","data":["800F5567 0009"],"options":null},"Infinite\\Nitro\\Player 4":{"note":"","data":["800F5753 0009"],"options":null},"Laps 2 Race":{"note":"","data":["80118760 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"[Press F9]\\All Cars (All Modes)":{"note":"","data":["880E99CB 000E","881023B1 000E"],"options":null},"[Press F9]\\Jump To Season 6":{"note":"","data":["881023A8 0005"],"options":null}},"0684FBFB-5D3EA8A5-C:45":{"All levels complete":{"note":"","data":["800D13C4 000C","800D13C5 000A","800D13C6 000A","800D13C7 000A","800D13C8 000A","800D13C9 000A"],"options":null},"Infinite\\\u0026 Max Minerals":{"note":"","data":["50000C04 0000","810B1D46 FFFF","50000C04 0000","810B1D44 3B9A","50000C04 0000","810B1D46 C9FF"],"options":null},"Infinite\\\u0026 Max Vespene Gas":{"note":"","data":["50000C04 0000","810B1D76 FFFF","50000D04 0000","810B1D74 3B9A","50000D04 0000","810B1D76 C9FF"],"options":null}},"07861842-A12EBC9F-C:45":{"Always Low Temp":{"note":"","data":["810E4F98 0000","810E4F9A 0000"],"options":null},"Auto-Pilot Always On Turbo (Original Excitebike Mode)":{"note":"","data":["810E3142 19AA"],"options":null},"Earthquake Mode":{"note":"","data":["810D7010 3AD0"],"options":null},"Fast\\Movement (Drones)":{"note":"","data":["800D9D55 00A0"],"options":null},"Fast\\Movement (Player)":{"note":"","data":["800D9D65 00AF"],"options":null},"Max Stunt Points":{"note":"","data":["810E4D18 0098","810E4D1A 967F"],"options":null},"No\\Collision Drivers":{"note":"","data":["800D9D34 0040"],"options":null},"No\\Overheating":{"note":"","data":["800CA984 00C3"],"options":null},"Power Turbo":{"note":"","data":["800CA99C 0040","800CA99D 00E0"],"options":null},"Sixty Frames":{"note":"Use Glide64 while hoping for full speed.","data":["800CDD6F 0000"],"options":null},"Slow\\Movement (Drones)":{"note":"","data":["800D9D55 0060"],"options":null},"Slow\\Movement (Player)":{"note":"","data":["800D9D65 0060"],"options":null},"Steering Control":{"note":"","data":["800C9E50 0040"],"options":null},"Super Speed For All":{"note":"","data":["800CA9A0 0040","800CA9A1 0070"],"options":null},"Unlock\\Difficulties \u0026 All Special Tracks":{"note":"","data":["810F2D50 FFFF"],"options":null},"Unlock\\Silver \u0026 Gold Cup":{"note":"","data":["810F2D4E 0003"],"options":null}},"079501B9-AB0232AB-C:4A":{"All Equipment Registered":{"note":"","data":["50001402 0000","810F40D8 FFFF"],"options":null},"All Equipment Unhighlighted":{"note":"","data":["50001402 0000","810F4100 FFFF"],"options":null},"All Equipment Unlocked":{"note":"","data":["50001402 0000","810F40B0 FFFF"],"options":null},"All Help Notes Available For Player 1":{"note":"","data":["50000602 0000","810F409C FFFF"],"options":null},"All Stuff Available For Player 1":{"note":"This modifies your save file. That will make all the multiplayer stages available, as well as unlocking every part. The actual breakdown is:","data":["50003802 0000","810F4230 FFFF"],"options":null},"Side Invincible\\Player 1":{"note":"","data":["811FC00C 447A"],"options":null},"Side Invincible\\Player 2":{"note":"","data":["811FC034 447A"],"options":null}},"07A69D01-9A7D41A1-C:50":{"Have 6 Carrots":{"note":"","data":["80164519 007E"],"options":null},"Have All\\Collectibles\\Stage 1":{"note":"","data":["80164510 0014"],"options":null},"Have All\\Collectibles\\Stage 2":{"note":"","data":["80164511 0014"],"options":null},"Have All\\Collectibles\\Stage 3":{"note":"","data":["80164512 0014"],"options":null},"Have All\\Collectibles\\Stage 4":{"note":"","data":["80164513 0014"],"options":null},"Have All\\Collectibles\\Stage 5":{"note":"","data":["80164514 0014"],"options":null},"Have All\\Collectibles\\Stage 6":{"note":"","data":["80164515 0014"],"options":null},"Have All\\Costumes":{"note":"","data":["8016451A 00FE"],"options":null},"Have All\\Levels":{"note":"","data":["80164508 003F"],"options":null},"Infinite Health":{"note":"","data":["8018BA7D 000F"],"options":null},"Max Collectable Items":{"note":"","data":["80164501 0014"],"options":null},"Press L To levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D018BAB5 0020","8118B9E0 4200"],"options":null}},"07C1866E-5775CCDE-C:50":{"Max Constructor Points":{"note":"","data":["8103A8F8 03E7"],"options":null},"Max Driver Points":{"note":"","data":["8103A8F6 03E7"],"options":null}},"07F3B276-EC8F3D39-C:45":{"Have All\\Races":{"note":"","data":["81088756 FFFF"],"options":null},"Have All\\Tracks":{"note":"","data":["8108875A FFFF"],"options":null},"Infinite Credits":{"note":"","data":["8008D659 0063"],"options":null},"Unlock All Characters \u0026 Extra Cheats":{"note":"","data":["81088750 FFFF","81088752 FFFF"],"options":null}},"08123595-0510F1DE-C:45":{"1-Hit Death\\Player 1":{"note":"","data":["D01502AA 0064","811502AA 0100"],"options":null},"1-Hit Death\\Player 2":{"note":"","data":["D0152926 0064","81152926 0100"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["811502AA 6400"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["811502AA 6400"],"options":null},"Infinite Jetpack\\Player 1":{"note":"","data":["811502B2 3200"],"options":null},"Infinite Jetpack\\Player 2":{"note":"","data":["8115292E 3200"],"options":null},"Infinite Shield\\Player 1":{"note":"","data":["811502AE 6400"],"options":null},"Infinite Shield\\Player 2":{"note":"","data":["8115292A 6400"],"options":null},"Needs 1 Match to Win\\Player 1":{"note":"","data":["D015029B 0000","8015029B 0001"],"options":null},"Needs 1 Match to Win\\Player 2":{"note":"","data":["D0152917 0000","80152917 0001"],"options":null},"Never Wins\\Player 1":{"note":"","data":["8015029B 0000"],"options":null},"Never Wins\\Player 2":{"note":"","data":["80152917 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["801ABB2B 00??"],"options":{"ChainSaw":"0D","Mutilator":"0C","PainMaster":"0B","She-Freak":"0A"}}},"0894909C-DAD4D82D-C:45":{"Big\\Glove Mode":{"note":"","data":["800F401D 0001"],"options":null},"Big\\Head Mode":{"note":"","data":["800F401C 0001"],"options":null},"Infinite\\Creation Points":{"note":"","data":["81063742 0064"],"options":null},"Player 1\\Character Modifier":{"note":"","data":["800EC6F3 00??"],"options":{"Alameda":"23","Ali":"00","Ang":"2B","Argnello":"13","Barclay":"32","Bazzel":"44","Botti":"2D","Bristov":"2C","Bunch":"3F","Butterbean":"07","Carr":"0E","Coallier":"49","Created Boxer":"1A","Creater Boxer":"1B","De La Hoya":"08","Dempsey":"1C","Dexter":"42","Di Ricco":"36","Duran":"0B","Eckhardt":"27","Eklund":"46","F. Sandoval":"2A","Frazier":"01","Garrett":"31","Giolito":"30","Greenberg":"3B","Hagler":"0A","Hasson":"22","Holmes":"02","Holyfield":"03","Hopra":"26","Hsu":"43","IUppa":"1E","K. Orr":"1D","Kelley":"17","Lajoie":"3A","Leonard":"09","Lewis":"04","Lupidi":"34","M. Broadhurst":"38","Manfredy":"16","Mayweather":"15","Moskey":"11","O'Grady":"14","Parker":"28","Perone":"3D","Philippine":"37","Pole":"21","Pryor":"12","Quartey":"0D","Quinn":"3C","Random":"19","Reid":"10","Romero":"18","Ruiz":"29","S. Broadhurst":"20","S. Orr":"2E","S. Sandoval":"1F","Scott":"25","Spinks":"06","St. Aubyn":"40","Tallarico":"47","Thompson":"45","Tool":"3E","Tua":"05","Vargas":"0F","W. Aguitar":"35","Wahlberg":"24","Weaver":"39","Wells":"41","Whitaker":"0C","Wynne":"33","Zarifes":"2F","de Leon":"48"}},"Player 1\\Infinite\\Health":{"note":"","data":["8106B974 42C8","8106B976 0000"],"options":null},"Player 1\\Max\\Power":{"note":"","data":["8106B980 0000","8106B982 0BB2"],"options":null},"Player 1\\No Health":{"note":"","data":["8106B974 0000","8106B976 0000"],"options":null},"Player 1\\No Power":{"note":"","data":["8106B980 0000","8106B982 0000"],"options":null},"Player 1\\Power Punch After 1st Punch":{"note":"","data":["8006B983 0064"],"options":null},"Player 2\\Character Modifier":{"note":"","data":["800EC6F7 00??"],"options":{"Alameda":"23","Ali":"00","Ang":"2B","Argnello":"13","Barclay":"32","Bazzel":"44","Botti":"2D","Bristov":"2C","Bunch":"3F","Butterbean":"07","Carr":"0E","Coallier":"49","Created Boxer":"1A","Creater Boxer":"1B","De La Hoya":"08","Dempsey":"1C","Dexter":"42","Di Ricco":"36","Duran":"0B","Eckhardt":"27","Eklund":"46","F. Sandoval":"2A","Frazier":"01","Garrett":"31","Giolito":"30","Greenberg":"3B","Hagler":"0A","Hasson":"22","Holmes":"02","Holyfield":"03","Hopra":"26","Hsu":"43","IUppa":"1E","K. Orr":"1D","Kelley":"17","Lajoie":"3A","Leonard":"09","Lewis":"04","Lupidi":"34","M. Broadhurst":"38","Manfredy":"16","Mayweather":"15","Moskey":"11","O'Grady":"14","Parker":"28","Perone":"3D","Philippine":"37","Pole":"21","Pryor":"12","Quartey":"0D","Quinn":"3C","Random":"19","Reid":"10","Romero":"18","Ruiz":"29","S. Broadhurst":"20","S. Orr":"2E","S. Sandoval":"1F","Scott":"25","Spinks":"06","St. Aubyn":"40","Tallarico":"47","Thompson":"45","Tool":"3E","Tua":"05","Vargas":"0F","W. Aguitar":"35","Wahlberg":"24","Weaver":"39","Wells":"41","Whitaker":"0C","Wynne":"33","Zarifes":"2F","de Leon":"48"}},"Player 2\\Infinite\\Health":{"note":"","data":["8106BA7C 42C8","8106BA7E 0000"],"options":null},"Player 2\\Max\\Power":{"note":"","data":["8106BA88 0000","8106BA8A 0BB2"],"options":null},"Player 2\\No Health":{"note":"","data":["8106BA7C 0000","8106BA7E 0000"],"options":null},"Player 2\\No Power":{"note":"","data":["8106BA88 0000","8106BA8A 0000"],"options":null},"Player 2\\Power Punch After 1st Punch":{"note":"","data":["8006BA8B 0064"],"options":null},"Ring Modifier":{"note":"","data":["800EC703 00??"],"options":{"Caesars Palace":"01","Ecko Sports Arena":"02","Great Western Forum":"00","International Arena":"03","Knockout Kings Arena":"08","Local 440":"04","Roppongi Palace":"06","The Colosseum":"05","Wembley Arena":"07"}},"Stop Timer":{"note":"","data":["81067546 001C"],"options":null}},"08D49262-03763D39-C:00":{"God Mode":{"note":"","data":["80774EB7 00??"],"options":{"Off":"00","On":"01"}}},"08FFA4B7-01F453B6-C:45":{"All Boards Complete":{"note":"","data":["50001802 0000","810B3578 0001"],"options":null},"Always 1st/Low Time":{"note":"","data":["81350C02 0000","80350C17 0063"],"options":null},"Free Ride Complete\\Stage 1-Boarder":{"note":"","data":["800B357A 0001"],"options":null},"Free Ride Complete\\Stage 1-Skier":{"note":"","data":["800B3578 0001"],"options":null},"Free Ride Complete\\Stage 2-Boarder":{"note":"","data":["800B3586 0001"],"options":null},"Free Ride Complete\\Stage 2-Skier":{"note":"","data":["800B3584 0001"],"options":null},"Free Ride Complete\\Stage 3-Boarder":{"note":"","data":["800B3592 0001"],"options":null},"Free Ride Complete\\Stage 3-Skier":{"note":"","data":["800B3590 0001"],"options":null},"Free Ride Complete\\Stage 4-Boarder":{"note":"","data":["800B359E 0001"],"options":null},"Free Ride Complete\\Stage 4-Skier":{"note":"","data":["800B359C 0001"],"options":null},"Giant Slalom Complete\\Stage 1-Boarder":{"note":"","data":["800B3582 0001"],"options":null},"Giant Slalom Complete\\Stage 1-Skier":{"note":"","data":["800B3580 0001"],"options":null},"Giant Slalom Complete\\Stage 2-Boarder":{"note":"","data":["800B358E 0001"],"options":null},"Giant Slalom Complete\\Stage 2-Skier":{"note":"","data":["800B358C 0001"],"options":null},"Giant Slalom Complete\\Stage 3-Boarder":{"note":"","data":["800B359A 0001"],"options":null},"Giant Slalom Complete\\Stage 3-Skier":{"note":"","data":["800B3598 0001"],"options":null},"Giant Slalom Complete\\Stage 4-Boarder":{"note":"","data":["800B35A6 0001"],"options":null},"Giant Slalom Complete\\Stage 4-Skier":{"note":"","data":["800B35A4 0001"],"options":null},"Infinite Stamina":{"note":"","data":["8034F798 0012"],"options":null},"Lagfix":{"note":"Smoother 30fps only.","data":["8012CF52 000D"],"options":null},"Slalom Complete\\Stage 1-Boarder":{"note":"","data":["800B357E 0001"],"options":null},"Slalom Complete\\Stage 1-Skier":{"note":"","data":["800B357C 0001"],"options":null},"Slalom Complete\\Stage 2-Boarder":{"note":"","data":["800B358A 0001"],"options":null},"Slalom Complete\\Stage 2-Skier":{"note":"","data":["800B3588 0001"],"options":null},"Slalom Complete\\Stage 3-Boarder":{"note":"","data":["800B3596 0001"],"options":null},"Slalom Complete\\Stage 3-Skier":{"note":"","data":["800B3594 0001"],"options":null},"Slalom Complete\\Stage 4-Boarder":{"note":"","data":["800B35A2 0001"],"options":null},"Slalom Complete\\Stage 4-Skier":{"note":"","data":["800B35A0 0001"],"options":null}},"09465AC3-F8CB501B-C:50":{"Always Have Wallet Size":{"note":"","data":["801189FA 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C6A7D 0010","81119CBE 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["80119841 00FF","80119CB7 00??"],"options":{"Off":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C6A7D 0000","80119D6B 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["8002399C 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801189DE 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801189DF 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801189E0 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801189E1 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1850 0005","801EE290 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801189FA 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801189FB 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801189F9 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189F4 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189FC 30FF","811189FE FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801189D0 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801189D6 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801189DC 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["801189D4 0009"],"options":null},"Have\\Bombs":{"note":"","data":["801189CE 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["801189D8 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["801189CD 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["801189CC 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["801189CF 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["801189D2 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["801189D5 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["801189D9 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["801189DA 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["801189D1 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["801189D7 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["801189DD 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["801189DB 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["801189D3 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["801189E7 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["50000B01 0000","80118A00 0007","50000501 0000","80118A17 0009","80118A1F 0009","80118A21 0009","80118A24 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801189EC 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["801189E6 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801189E5 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801189EA 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801189E4 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118988 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118991 0008","80118992 0001","80118994 0001","8011898B 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801189F2 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["81119D24 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["80119D29 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["80119D2D 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D011BB37 0020","811D9410 40CB","D011BB37 0000","811D9C32 000D","801189C8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119D61 00??"],"options":{"English":"00","French":"02","German":"01"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["80118A27 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["80118A29 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["81118986 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["81119D20 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D011BB37 0020","811D9C32 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D011BB37 0020","811D9410 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C6A7D 0010","8011895F 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["81118964 ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["801189E2 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["801189E3 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["801189C8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["80118996 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119B7A 0000","81119B7C 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"096A40EA-8ABE0A10-C:45":{"Cheat Select":{"note":"","data":["8109ACBE ????"],"options":{"All Of The Above":"0FFF","All Pick-Ups Are Grapple":"0040","All Pick-Ups Are Green":"0010","All Pick-Ups Are Red":"0004","All Pick-Ups Are Yellow":"0008","Maintain Speed Off Track":"0001","No Chassis":"0400","No Driver":"0800","No Wheels":"0200","Pick-Ups Are Maximum":"0080","Reversed Rocket Racer Run Track":"0020","Rocket Cars":"0002","Turbo Mode":"0100"}},"Have All Tracks and Building Pieces":{"note":"","data":["812576D4 FFFF","812576D6 FFFF"],"options":null}},"09CC4801-E42EE491-C:4A":{"Infinite Fuel\\Gyrocopter":{"note":"","data":["80355211 0081"],"options":null},"Infinite Fuel\\Rocket Belt":{"note":"","data":["80355231 0081"],"options":null},"Infinite Photos":{"note":"","data":["81342F5E 0000"],"options":null},"Music Volume Select":{"note":"","data":["8025C454 00??"],"options":{"Max Volume":"04","Medium Volume":"02","No Music":"00"}},"Time Always 00'00'10":{"note":"This Cheat code is for All Events","data":["80355140 0001"],"options":null}},"09D53E16-3AB268B9-C:45":{"Almost Always Hit A Home Run":{"note":"","data":["80195714 0001"],"options":null},"Away Team\\Score 0":{"note":"Do not use with Away Team Scors 30","data":["801606B5 0000"],"options":null},"Away Team\\Score 30":{"note":"Do not use with Away Team Scors 30","data":["801606B5 001E"],"options":null},"Fast Game":{"note":"","data":["80195729 0001"],"options":null},"Home Team\\Score 0":{"note":"Do not use with Home Team Scors 30","data":["801606B7 0000"],"options":null},"Home Team\\Score 30":{"note":"Do not use with Home Team Scors 0","data":["801606B7 001E"],"options":null},"Increased Gravity":{"note":"","data":["80195727 0001"],"options":null},"Infinite\\Balls":{"note":"","data":["801606D0 0000"],"options":null},"Infinite\\Strikes":{"note":"","data":["801606D1 0000"],"options":null},"Low Gravity":{"note":"","data":["80195726 0001"],"options":null},"Slow Game":{"note":"","data":["8019572A 0001"],"options":null},"Stadium Modifier":{"note":"","data":["800DE7E5 00??"],"options":{"3 Rivers Stadium":"16","3com Park at Candle Stick Park":"06","Baltimore":"05","Bank One Ballpark":"03","Bush Stadium":"15","Cinergy Field":"12","Comiskey Park":"07","Coors Field":"08","Devil's Thumb Stadium":"1E","Dodger Stadium":"0F","Edison Into Field":"00","Fenway Park":"0A","Hubert Humphrey Metrodome":"1A","Jacobs Field":"0B","Kauffman Stadium":"0D","Milwaukee County Stadium":"04","Oakland Alameda Country Stadium":"10","Olympics Stadium":"09","Proplayer Stadium":"0C","Qualcomm Stadium at Jack Murphy Field":"11","Shea Stadium":"13","Skydome":"14","The Astrodome":"02","The Ball Park At Arlington":"01","The Kingdom":"0E","Tiger Stadium":"17","Tropicane Field":"18","Turner Field":"19","Veterans Stadium":"1B","Wrigley Field":"1C","Yankee Stadium":"1D"}}},"0A1667C7-293346A6-C:50":{"1 Win To Win\\Player 1":{"note":"","data":["D00C0983 0000","800C0983 0001"],"options":null},"1-Hit Death to Player 1\\Player 2":{"note":"","data":["D10B5EF0 42C8","810B5EF0 4080"],"options":null},"1-Hit Death to Player 2\\Player 1":{"note":"","data":["D10B60D4 42C8","810B60D4 4080"],"options":null},"Fight Forest Team":{"note":"Select Hardest Difficulty + Quest Mode","data":["810BF482 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["810B5EF0 42C8"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["810B60D4 42C8"],"options":null},"Invisibility\\Player 1":{"note":"","data":["810BF3A2 0001"],"options":null},"Join River Team":{"note":"Select Quest Mode","data":["810BF482 0001"],"options":null},"Needs 1 Win To Win\\Player 2":{"note":"","data":["D00C0985 0000","800C0985 0001"],"options":null},"P1 Never Wins\\Player 2":{"note":"","data":["800C0983 0000"],"options":null},"P2 Never Wins\\Player 1":{"note":"","data":["800C0985 0000"],"options":null},"Player 1 Has No Energy\\Player 2":{"note":"","data":["810B5EF0 C080"],"options":null},"Player 2 Has No Energy\\Player 1":{"note":"","data":["810B60D4 C080"],"options":null},"Unlock Titan Difficulty Level":{"note":"","data":["810BF4D2 0001"],"options":null}},"0A5D8F83-98C5371A-C:50":{"All Equipment Upgrades":{"note":"","data":["801E6F5D 0023","811E6FAA 201B","801E6F3C 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03DE37B 0000","801E6EF2 00??"],"options":{"Beneaf the Graveyard":"02","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Green Blobs":"71","Inside The Royal Palace of the Deku Kingdom 1":"4E","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House":"00","Outside Magic Hag's Potion Shop":"08","Outside The Royal Palace of the Deku Kingdom":"4A","Outside Tourist Information Southern Swamp":"06","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Waterfall Sothern Swamp":"7F"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801E6F72 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801E6F73 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801E6F74 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801E6F75 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801E6F76 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801E6F77 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801E6F65 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801E6F6B 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801E6F71 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Have Item Modifier":{"note":"","data":["801E6F70 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\All Masks":{"note":"","data":["811E6F78 3E39","811E6F7A 4745","811E6F7C 4032","811E6F7E 3A46","811E6F80 3842","811E6F82 4833","811E6F84 3C3D","811E6F86 373F","811E6F88 3634","811E6F8A 4341","811E6F8C 3B44","811E6F8E 4935"],"options":null},"Have\\Bombchu":{"note":"","data":["801E6F67 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801E6F66 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801E6F69 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801E6F68 0008"],"options":null},"Have\\Fire Arrow":{"note":"","data":["801E6F62 0002"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801E6F70 0010"],"options":null},"Have\\Have\\Ocarina of Time":{"note":"","data":["801E6F60 0000"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801E6F61 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801E6F6F 000F"],"options":null},"Have\\Ice Arrow":{"note":"","data":["801E6F63 0003"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801E6F6E 000E"],"options":null},"Have\\Light Arrow":{"note":"","data":["801E6F64 0004"],"options":null},"Have\\Magic Beans":{"note":"","data":["801E6F6A 000A"],"options":null},"Have\\Pictograph":{"note":"","data":["801E6F6D 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801E6F6C 000C"],"options":null},"Have\\QuestStatus Items":{"note":"","data":["801E6FAD 0005","811E6FAE F7CF"],"options":null},"Infinite\\Health":{"note":"","data":["811E6F26 03E7"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811E6F24 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"This is Infinite use of Bombs,Bombchus,Deku Sticks,Deku Nuts,Magic Beans,\u0026 Powder Kegs. But you must also put it's Have on to work.","data":["801E6F91 0063","50000801 0000","801E6F96 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801E6F29 0060","811E6F30 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811E6F2A 03E7"],"options":null},"Play As":{"note":"","data":["801E6F10 00??"],"options":{"- Fierce Deity Link":"00","Deku Link":"03","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03DE37B 0020","813F7658 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You have been warned.","data":["801E6F3C 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F30F6 0008","811E6F06 FFFD","D01F30F6 0004","811E6F06 0000","D01F30F6 0002","811E6F06 FFFE"],"options":null},"Use all C Buttons":{"note":"","data":["811EAE08 0000","811EAE0A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["803DE37A 0000","803F6BD5 0001","813F6BDA ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"0AA0055B-7637DF65-C:50":{"Infinite Time\\Basketball Gym":{"note":"","data":["8029F901 0042"],"options":null},"Infinite Time\\Cecil's Flying Toys":{"note":"","data":["802A5575 0042"],"options":null},"Infinite Time\\Flight Test Range":{"note":"","data":["802BA3A9 0042"],"options":null},"Infinite Time\\Slippery Slide":{"note":"","data":["802A7E8D 0042"],"options":null},"Infinite\\Atoms":{"note":"","data":["80159667 00C8"],"options":null},"Infinite\\Health":{"note":"","data":["80026DE3 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["80026DE7 0063"],"options":null},"Infinite\\Quarks":{"note":"","data":["80159663 00C8"],"options":null},"Tennis CPU Can't Score":{"note":"","data":["801D7B4B 0000"],"options":null}},"0AC61D39-ABFA03A6-C:50":{"Access all items In Inventory":{"note":"","data":["8111F8BE 1FFF"],"options":null},"Tickets\\Gold":{"note":"","data":["8111F8C8 FFFF"],"options":null},"Tickets\\Red":{"note":"","data":["8111F8C6 FFFF"],"options":null}},"0ADAECA7-B17F9795-C:45":{"Always Have Retreat \u0026 Elem Pedra Opened":{"note":"Do not put this on until in-game or the game will freeze.","data":["D01A1C92 0000","811A1C92 0003"],"options":null},"Day Always 00":{"note":"","data":["811F108C 0000"],"options":null},"Finish All Levels":{"note":"","data":["81196AA6 5454","81196AA8 5140","81196AAA 4555","81196AAC 9514","81196AAE 5515"],"options":null},"Hour Always":{"note":"","data":["80196A4D 00??"],"options":{"(0 Hour - 24:00 PM - Midnight)":"00","(01:00 AM)":"01","(02:00 AM)":"02","(03:00 AM)":"03","(04:00 AM)":"04","(05:00 AM)":"05","(06:00 AM)":"06","(07:00 AM)":"07","(08:00 AM)":"08","(09:00 AM)":"09","(10:00 AM)":"0A","(11:00 AM)":"0B","(12:00 PM - Noon)":"0C","(13:00 - 1 PM)":"0D","(14:00 - 2 PM)":"0E","(15:00 - 3 PM)":"0F","(16:00 - 4 PM)":"10","(17:00 - 5 PM)":"11","(18:00 - 6 PM)":"12","(19:00 - 7 PM)":"13","(20:00 - 8 PM)":"14","(21:00 - 9 PM)":"15","(22:00 - 10 PM)":"16","(23:00 - 11 PM)":"17"}},"Infinite Goth":{"note":"","data":["81196A8E FFFF"],"options":null},"Magnus\\Infinite HP":{"note":"","data":["81193C30 03E7"],"options":null},"Magnus\\Level 99":{"note":"","data":["80193C2B 0063"],"options":null},"Magnus\\Max Agi":{"note":"","data":["81193C3C 03E7"],"options":null},"Magnus\\Max Dex":{"note":"","data":["81193C3E 03E7"],"options":null},"Magnus\\Max HP":{"note":"","data":["81193C2E 03E7"],"options":null},"Magnus\\Max Int":{"note":"","data":["81193C38 03E7"],"options":null},"Magnus\\Max Mem":{"note":"","data":["81193C3A 03E7"],"options":null},"Magnus\\Max Str":{"note":"","data":["81193C34 03E7"],"options":null},"Magnus\\Max Vit":{"note":"","data":["81193C36 03E7"],"options":null},"Max Goth":{"note":"","data":["81196A8C 0098","81196A8E 967F"],"options":null},"Open All Paths":{"note":"","data":["81196AA0 01FF","81196AA2 677F","81196AA4 FCFF"],"options":null}},"0B58B8CD-B7B291D2-C:50":{"Have Alien Artifact":{"note":"","data":["8004DC8F 0001"],"options":null},"Infinite Ammo All Weapons":{"note":"","data":["50001102 0000","81048176 8000"],"options":null},"Infinite\\Fuel":{"note":"","data":["8004E46C 0050"],"options":null},"Infinite\\Greece":{"note":"","data":["81052B48 0098","81052B4A 967F"],"options":null},"Infinite\\Health":{"note":"","data":["8004DD1C 0002"],"options":null},"Item Modifier":{"note":"","data":["8004DC7F ????"],"options":{"All Items":"FFFF","Crank":"0040","Hangar Key":"0400","Heirglyph Map Piece":"0100","Howitzer Shells":"0002","Nothing":"0000","Windmill Cog":"0080"}},"Level Select":{"note":"","data":["80047FC3 00??"],"options":{"America":"03","Comet":"05","Greece":"01","Java":"02","Siberia":"04"}},"No Humans Killed":{"note":"","data":["8104819A 0000"],"options":null},"Press L To Wall Over Water, Climb Hills":{"note":"","data":["D0047609 0020","8104DD02 0808"],"options":null},"Weapon Select\\1st Position":{"note":"","data":["80048168 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\2nd Position":{"note":"","data":["80048169 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\3rd Position":{"note":"","data":["8004816A 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\4th Position":{"note":"","data":["8004816B 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\5th Position":{"note":"","data":["8004816C 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\6th Position":{"note":"","data":["8004816D 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\7th Position":{"note":"","data":["8004816E 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\8th Position":{"note":"","data":["8004816F 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}}},"0B6B4DDB-9671E682-C:45":{"Cheats Enabled Modifier":{"note":"","data":["8008F840 ????"],"options":{"Anyway (Race Circuits Backwards)":"0400","Big Wheels (Big Foot Cars)":"0040","Car Radio (Remote Control Cars)":"0100","Chopper (Top Down View)":"0200","Easy Money (You Get 1":"0008","Extra Resolution (Able To Change Resolution In Options Screen)":"0800","Fast Bucks (You Get 250":"0004","Skywalker (Hover Cars)":"0080","Smurfing (High Pitched Voices)":"0020","Trophies (Second And Third Championships Wins)":"0010"}},"Have\\Access All Trophies":{"note":"Also gives you all extra features in quick race \u0026 Trophy mode","data":["800BA9EB 0007","800BABFF 0007"],"options":null},"Have\\Always 1st":{"note":"","data":["800C1ED1 0001","800C1ED3 0001"],"options":null},"Have\\Easy Win":{"note":"Right After Start,Go, Quit Race, And you Have Won","data":["800BABFD 000A"],"options":null},"Have\\Infinite Max Cash":{"note":"","data":["810BABF4 3AFF","810BABF6 F454"],"options":null},"Have\\Infinite Supply Of Super Tires":{"note":"For All Cars","data":["5000220C 0000","810BACA8 0F0F","5000220C 0000","810BACAA 0F0F"],"options":null},"Have\\Lots Of Seasons":{"note":"","data":["810BABFA 03E7"],"options":null},"Have\\Max Race Points":{"note":"","data":["800BAC0E 00FF"],"options":null},"Have\\Max Upgrade":{"note":"For All Cars","data":["5000220C 0200","810BACA6 0270"],"options":null},"Race Options\\Laps To Race Select":{"note":"","data":["800A4599 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Race Options\\Race Direction Select":{"note":"","data":["800A4551 00??"],"options":{"Mirrored Normal":"02","Mirrored Reverse":"03","Normal":"00","Reverse":"01"}},"Race Options\\Track Select":{"note":"","data":["8008F9AD 00??"],"options":{"Area 51":"04","Chateau":"07","Docklands":"08","Lumber Mill":"03","Oilfields":"05","Rocket Base":"00","Ski Resort":"02","Temple":"01","Titus Park":"09","Tudor Village":"06"}},"Race Options\\View Select":{"note":"Select your View and then at start of Race press C-Up Button","data":["D00C20B1 0000","800C20C1 00??"],"options":{"Behind View":"01","Distant Behind View":"0B","Further Behind View":"02","Helicopter View":"FF","Inside Car":"00"}},"Special Category\\A Car [Mind Star 600]":{"note":"","data":["810BADDE 3D70","810BADE0 0F0F","810BADE2 0F0F"],"options":null},"Special Category\\B Car [Vertige Stallion]":{"note":"","data":["800BAD66 2378","810BAD68 0F0F","810BAD6A 0F0F"],"options":null},"Special Category\\C Car [Mind Star 200R]":{"note":"","data":["810BACD6 0A78","810BACD8 0F0F","810BACDA 0F0F"],"options":null}},"0B93051B-603D81F9-C:45":{"All 52 Gold Gems Collected":{"note":"","data":["8016F540 0003","8016F541 007E","8016F542 00FF","8016F543 00EF","8016F544 00FF","8016F545 007F","8016F546 00FF","8016F547 00FC"],"options":null},"All Stages \u0026 Chapters Unlocked":{"note":"","data":["8016F548 003B"],"options":null},"Infinite Health\\Marina":{"note":"","data":["810ED0E0 03E8"],"options":null},"Infinite Health\\Teran":{"note":"","data":["810F1D60 03E8"],"options":null},"Infinite\\Max Red Gems":{"note":"","data":["81175B66 270F"],"options":null},"Level Select":{"note":"To access this anytime during game, press L+R+Z to enable the menu. Press D-Pad Up / Down to move through the menu, D-Pad Left / Right to change level digits and then press Start to enter level. Don not do this whhile in pause mode (Start Button Pause) or the game will freeze.","data":["D10BC4E8 2030","800BC4E1 0004"],"options":null}},"0C02B3C5-9E2511B8-C:45":{"Widescreen":{"note":"","data":["8100F8C2 4036","8101E426 4036"],"options":null}},"0C41F9C2-01717A0D-C:46":{"Have 1 Star\\Abdul":{"note":"","data":["80307433 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["8030742F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80307432 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80307431 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80307434 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80307430 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["8030742E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80307435 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80307436 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["80209981 0000","802048A3 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802048A7 0000","8020B849 0000"],"options":null},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EF67B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0209837 0000","80209837 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020B6FF 0000","8020B6FF 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810ADBDC 3F80"],"options":null}},"0C581C7A-3D6E20E4-C:4A":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D51D0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112CD0E 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800EAFC8 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D51B0 0001","50001701 0000","800D51B8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D5440 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D547B 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D51A9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D51AA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D51AB 0003"],"options":null}},"0C5EE085-A167DD3E-C:45":{"Activate Cheat":{"note":"","data":["810A63C6 F5FF"],"options":null},"Arabian Flights\\Infinite Time":{"note":"","data":["810A593E FFFF"],"options":null},"Arabian Flights\\Max Tickets":{"note":"","data":["810A5930 FFFF","810A5932 FFFF","810A5934 FFFF","810A5936 FFFF","810A5938 FFFF","810A593A FFFF","810A593C FFFF"],"options":null},"Clowney Island\\Infinite Time":{"note":"","data":["810A590E FFFF"],"options":null},"Clowney Island\\Max Tickets":{"note":"","data":["810A5900 FFFF","810A5902 FFFF","810A5904 FFFF","810A5906 FFFF","810A5908 FFFF","810A590A FFFF","810A590C FFFF"],"options":null},"Food Fright\\Infinite Time":{"note":"","data":["810A595E FFFF"],"options":null},"Food Fright\\Max Tickets":{"note":"","data":["810A5950 FFFF","810A5952 FFFF","810A5954 FFFF","810A5956 FFFF","810A5958 FFFF","810A595A FFFF","810A595C FFFF"],"options":null},"Have All\\Machine Parts":{"note":"","data":["810A5960 FFFF"],"options":null},"Have All\\Vechicles":{"note":"","data":["810A5968 FFFF"],"options":null},"Infinite\\Max Health":{"note":"","data":["8109F702 000C","8109F706 000C"],"options":null},"Max\\Ticket Switches":{"note":"","data":["810A59A2 00C8"],"options":null},"Max\\Tinker Toys":{"note":"","data":["810A599E 270F"],"options":null},"Mine Blowing\\Infinite Time":{"note":"","data":["810A592E FFFF"],"options":null},"Mine Blowing\\Max Tickets":{"note":"","data":["810A5920 FFFF","810A5922 FFFF","810A5924 FFFF","810A5926 FFFF","810A5928 FFFF","810A592A FFFF","810A592C FFFF"],"options":null},"Paint Misbehaving\\Infinite Time":{"note":"","data":["810A591E FFFF"],"options":null},"Paint Misbehaving\\Max Tickets":{"note":"","data":["810A5910 FFFF","810A5912 FFFF","810A5914 FFFF","810A5916 FFFF","810A5918 FFFF","810A591A FFFF","810A591C FFFF"],"options":null},"Pyramid Scheme\\Infinite Time":{"note":"","data":["810A594E FFFF"],"options":null},"Pyramid Scheme\\Max Tickets":{"note":"","data":["810A5940 FFFF","810A5942 FFFF","810A5944 FFFF","810A5946 FFFF","810A5948 FFFF","810A594A FFFF","810A594C FFFF"],"options":null},"Whoopie World\\Infinite Time":{"note":"","data":["810A58FE FFFF"],"options":null},"Whoopie World\\Max Tickets":{"note":"","data":["810A58F0 FFFF","810A58F2 FFFF","810A58F4 FFFF","810A58F6 FFFF","810A58F8 FFFF","810A58FA FFFF","810A58FC FFFF"],"options":null}},"0C814EC4-58FE5CA8-C:45":{"Infinite Health":{"note":"","data":["81086BCA 0038","800BAF97 0007"],"options":null}},"0CAD17E6-71A5B797-C:50":{"All Tanx \u0026 All Campaigns":{"note":"","data":["50001370 0000","81120546 FFFF","50001370 0000","8112054A FFFF"],"options":null},"All Weapons \u0026 Invulnerable":{"note":"","data":["81121420 0101"],"options":null},"Infinite Edge Power":{"note":"","data":["811A8D20 000A","8111AD08 000A","811AC1E4 000A","811ACB7E 000A","811AAEB4 000A","811AE378 000A","811AD514 000A","811AA51C 000A"],"options":null},"Infinite Tank Credits":{"note":"","data":["8124AB3E 03E7"],"options":null},"Inincibility":{"note":"","data":["81121420 0100"],"options":null},"Level Select":{"note":"","data":["811150B8 0001"],"options":null},"Score Aid":{"note":"","data":["8124A152 FC9A"],"options":null}},"0CB81686-5FD85A81-C:45":{"Away Team\\Always Has The Ball":{"note":"","data":["810590A8 0001","810590AA 0000"],"options":null},"Enable\\Stadium\\4th And Incas":{"note":"","data":["800591A0 00FF"],"options":null},"Enable\\Stadium\\Alpha Blitz":{"note":"","data":["8005919E 00FF"],"options":null},"Enable\\Stadium\\Cosmodome":{"note":"","data":["800591A2 00FF"],"options":null},"Enable\\Stadium\\Dodge City":{"note":"","data":["80059198 00FF"],"options":null},"Enable\\Stadium\\EA Sports":{"note":"","data":["800591A3 00FF"],"options":null},"Enable\\Stadium\\Gridiron":{"note":"","data":["8005919D 00FF"],"options":null},"Enable\\Stadium\\Maddenstein":{"note":"","data":["800591A1 00FF"],"options":null},"Enable\\Stadium\\New Orleans":{"note":"","data":["800591A6 00FF"],"options":null},"Enable\\Stadium\\Nile High":{"note":"","data":["8005919F 00FF"],"options":null},"Enable\\Stadium\\Salvage Field":{"note":"","data":["8005919C 00FF"],"options":null},"Enable\\Stadium\\San Diego":{"note":"","data":["800591A7 00FF"],"options":null},"Enable\\Stadium\\Tampa Bay":{"note":"","data":["800591A5 00FF"],"options":null},"Enable\\Stadium\\Tib Bros":{"note":"","data":["8005919A 00FF"],"options":null},"Enable\\Stadium\\Tiberium":{"note":"","data":["8005919B 00FF"],"options":null},"Enable\\Stadium\\Tiburon":{"note":"","data":["800591A4 00FF"],"options":null},"Enable\\Stadium\\Xmas Rush":{"note":"","data":["80059199 00FF"],"options":null},"Enable\\Team\\All 60's":{"note":"","data":["800598CC 00FF"],"options":null},"Enable\\Team\\All 70's":{"note":"","data":["800598CD 00FF"],"options":null},"Enable\\Team\\All 80's":{"note":"","data":["800598CE 00FF"],"options":null},"Enable\\Team\\All 90's":{"note":"","data":["800598CF 00FF"],"options":null},"Enable\\Team\\Clows":{"note":"","data":["800598D7 00FF"],"options":null},"Enable\\Team\\Comets":{"note":"","data":["800598DF 00FF"],"options":null},"Enable\\Team\\EA Sports":{"note":"","data":["800598D3 00FF"],"options":null},"Enable\\Team\\Industrials":{"note":"","data":["800598DA 00FF"],"options":null},"Enable\\Team\\Junkyard Dogs":{"note":"","data":["800598D9 00FF"],"options":null},"Enable\\Team\\Madden 1999":{"note":"","data":["800598D0 00FF"],"options":null},"Enable\\Team\\Madden Millenium":{"note":"","data":["800598D1 00FF"],"options":null},"Enable\\Team\\Marshalls":{"note":"","data":["800598D5 00FF"],"options":null},"Enable\\Team\\Monsters":{"note":"","data":["800598DE 00FF"],"options":null},"Enable\\Team\\Mummies":{"note":"","data":["800598DC 00FF"],"options":null},"Enable\\Team\\NFL Millenium":{"note":"","data":["800598D2 00FF"],"options":null},"Enable\\Team\\Praetorians":{"note":"","data":["800598D8 00FF"],"options":null},"Enable\\Team\\Sugarbuzz":{"note":"","data":["800598DB 00FF"],"options":null},"Enable\\Team\\Tiburon":{"note":"","data":["800598D4 00FF"],"options":null},"Enable\\Team\\Toymakers":{"note":"","data":["800598D6 00FF"],"options":null},"Enable\\Team\\Vipers":{"note":"","data":["800598DD 00FF"],"options":null},"Have All Secret Codes In Menu":{"note":"","data":["81070788 FFFF","8107078A FFFF","8107078C FFFF","8107078E FFFF"],"options":null},"Home Team\\Always Has The Ball":{"note":"","data":["810590A8 0000","810590AA 0001"],"options":null},"Infinite\\Time-Outs Away Team":{"note":"","data":["8006FE6F 0003"],"options":null},"Infinite\\Time-Outs Home Team":{"note":"","data":["8006CE7F 0003"],"options":null},"Level 1\\200 Yards Of Total Offense Or More":{"note":"","data":["800707C1 0040"],"options":null},"Level 1\\3 Tackles Or More By One Player":{"note":"","data":["800707B7 0040"],"options":null},"Level 1\\Complete A 20 Yard Run Or Longer":{"note":"","data":["800707B1 0040"],"options":null},"Level 1\\Complete A 30 Yard Pass Or Longer":{"note":"","data":["800707B0 0040"],"options":null},"Level 1\\Create A Player And use Him In A Game":{"note":"","data":["800707BA 0040"],"options":null},"Level 1\\Defeat Green Bay In Snow At Lambeau Field":{"note":"","data":["800707B8 0040"],"options":null},"Level 1\\Defeat San Francisco In Rain At 3COM Park":{"note":"","data":["800707B9 0040"],"options":null},"Level 1\\Have A Minimium Of Three Players ON Team Catch One Pass":{"note":"","data":["800707C3 0040"],"options":null},"Level 1\\Hold Your Oppnent to 7 Points Or Less In a Game":{"note":"","data":["800707B3 0040"],"options":null},"Level 1\\Intercept At Least One Pass":{"note":"","data":["800707BF 0040"],"options":null},"Level 1\\Kick A 40 Yard Field Goal Or Longer":{"note":"","data":["800707B5 0040"],"options":null},"Level 1\\Kick A 40 Yard Punt Or Longer":{"note":"","data":["800707B6 0040"],"options":null},"Level 1\\Play A Exhibition Game In A QTR Length Other Than 5 Minutes":{"note":"","data":["800707BB 0040"],"options":null},"Level 1\\Play And Win One Game of The Tournment":{"note":"","data":["800707C2 0040"],"options":null},"Level 1\\Play a Exhibition Game In A Stadium Other Than The Default One":{"note":"","data":["800707BE 0040"],"options":null},"Level 1\\QB Passes For Two TDS Or More":{"note":"","data":["800707BC 0040"],"options":null},"Level 1\\Recover At Least One Fumble":{"note":"","data":["800707C0 0040"],"options":null},"Level 1\\Sack The Opposing QB":{"note":"","data":["800707BD 0040"],"options":null},"Level 1\\Score 21 Points Or More With A QTR Length Of 6 Minutes Or Less":{"note":"","data":["800707B2 0040"],"options":null},"Level 1\\Throw 0 Interceptions In A Game":{"note":"","data":["800707B4 0040"],"options":null},"Level 2\\100 Recption Yards Or Greater By One Player":{"note":"","data":["800707C6 0040"],"options":null},"Level 2\\100 Yards Of Rushing Or Greater By One Player":{"note":"","data":["800707C5 0040"],"options":null},"Level 2\\2 TDS Or More By One Receiver":{"note":"","data":["800707D7 0040"],"options":null},"Level 2\\3 Field Goals Or More By One Player":{"note":"","data":["800707C8 0040"],"options":null},"Level 2\\6 Receptions Or Greater By One Player":{"note":"","data":["800707CE 0040"],"options":null},"Level 2\\Commit No Fumbles In A Game":{"note":"","data":["800707D2 0040"],"options":null},"Level 2\\Complete a 60 Yard Pass Or Longer":{"note":"","data":["800707D4 0040"],"options":null},"Level 2\\Do Not Allow Your QB To Be Sacked In A Game":{"note":"","data":["800707D3 0040"],"options":null},"Level 2\\Have A RB Who Rushes For 3 TDS Or More":{"note":"","data":["800707CF 0040"],"options":null},"Level 2\\Hold Opposing Team To 150 Yards Total Offense Or Less":{"note":"","data":["800707D0 0040"],"options":null},"Level 2\\Play And Win A Pro Bowl Game As The AFC Team":{"note":"","data":["800707D6 0040"],"options":null},"Level 2\\Play And Win A Pro Bowl Game As The NFC Team":{"note":"","data":["800707D5 0040"],"options":null},"Level 2\\Play And Win One Franchise Mode Game":{"note":"","data":["800707CA 0040"],"options":null},"Level 2\\Play And Win One Season Mode Game With Modified Divisions":{"note":"","data":["800707CC 0040"],"options":null},"Level 2\\Play And Win One Season Mode Game Without Modified Divisions":{"note":"","data":["800707CB 0040"],"options":null},"Level 2\\Play And Win Two Games In A Tournment With The Same Team":{"note":"","data":["800707CD 0040"],"options":null},"Level 2\\QB Passes 300 Yards Or More":{"note":"","data":["800707C7 0040"],"options":null},"Level 2\\QB Passes For 4 TDS Or More":{"note":"","data":["800707C9 0040"],"options":null},"Level 2\\QB Rushes For One Rushing TD Or More":{"note":"","data":["800707D1 0040"],"options":null},"Level 2\\Score 40 Points Or More Within A Quarter Length Of 6 Minutes Or Less":{"note":"","data":["800707C4 0040"],"options":null},"Level 3\\150 Reception Yards Or Greater By One Player":{"note":"","data":["800707D9 0040"],"options":null},"Level 3\\150 Yards Rushing Or Greater By One Player":{"note":"","data":["800707D8 0040"],"options":null},"Level 3\\2 Interceptions Or More By One Player":{"note":"","data":["800707DC 0040"],"options":null},"Level 3\\3 Knockdowns Or More By One PLayer":{"note":"","data":["800707DF 0040"],"options":null},"Level 3\\3 Sacks Or More By One Player":{"note":"","data":["800707DB 0040"],"options":null},"Level 3\\3 Tips Or More By One Player":{"note":"","data":["800707E0 0040"],"options":null},"Level 3\\400 Yards Of Total Defense Or More":{"note":"","data":["800707EA 0040"],"options":null},"Level 3\\5 Successful Field Goals Or More By One Player":{"note":"","data":["800707DE 0040"],"options":null},"Level 3\\8 Tackles Or More By One Player":{"note":"","data":["800707E9 0040"],"options":null},"Level 3\\Break 2 Different All-Time Records Or More In A Game":{"note":"","data":["800707E7 0040"],"options":null},"Level 3\\Commit No Penalties In A Game":{"note":"","data":["800707E6 0040"],"options":null},"Level 3\\Complete A 50 Yard Run Or Longer":{"note":"","data":["800707E5 0040"],"options":null},"Level 3\\Have A RB Rush For Over 100 Yards And 50 Yards Receiving":{"note":"","data":["800707EB 0040"],"options":null},"Level 3\\Play And Win A Superbowl In Franchise Mode":{"note":"","data":["800707E1 0040"],"options":null},"Level 3\\Play And Win A Superbowl In Season Mode":{"note":"","data":["800707E2 0040"],"options":null},"Level 3\\Play And Win An 8 Team Tournament":{"note":"","data":["800707E4 0040"],"options":null},"Level 3\\QB Who Passes For 400 Yards Or More":{"note":"","data":["800707DA 0040"],"options":null},"Level 3\\Recover 2 Fumbles Or More":{"note":"","data":["800707DD 0040"],"options":null},"Level 3\\Score 55 Points Or Greater":{"note":"","data":["800707E8 0040"],"options":null},"Level 3\\Successfully Kick 8 Extra Points Or More":{"note":"","data":["800707E3 0040"],"options":null},"Level 4\\200 Receptions Yards Or Greater By One Player":{"note":"","data":["800707ED 0040"],"options":null},"Level 4\\200 Yards Rushing Or Greater By One Player":{"note":"","data":["800707EC 0040"],"options":null},"Level 4\\25 Completions Or More By One QB":{"note":"","data":["800707F2 0040"],"options":null},"Level 4\\40 First Downs Or More":{"note":"","data":["800707FE 0040"],"options":null},"Level 4\\6 Successful Two Point Conversions Or More":{"note":"","data":["800707F1 0040"],"options":null},"Level 4\\650 Yards Of Total Offense Or More By One Team":{"note":"","data":["800707F9 0040"],"options":null},"Level 4\\7 Sacks Or More By One Player":{"note":"","data":["800707F8 0040"],"options":null},"Level 4\\Go Undefeated And Win A Superbowl In One Franchise Mode Season By Playing Every Game":{"note":"","data":["800707F3 0040"],"options":null},"Level 4\\Go Undefeated And Win A Superbowl In One Season Mode Season By Playing Every Game":{"note":"","data":["800707F4 0040"],"options":null},"Level 4\\Have A Minimum Of 7 Members Of Your Team Catch At Least 1 Pass":{"note":"","data":["800707F6 0040"],"options":null},"Level 4\\Have One Reciever With 150 RAC Yards Or Greater":{"note":"","data":["800707FA 0040"],"options":null},"Level 4\\Kick A Punt Of 55 Yards Or More":{"note":"","data":["800707FF 0040"],"options":null},"Level 4\\QB Who Passes For 500 Yards Or More":{"note":"","data":["800707EE 0040"],"options":null},"Level 4\\QB Who Rushes For 75 Yards Or More":{"note":"","data":["800707F5 0040"],"options":null},"Level 4\\Return A Punt For A Touchdown":{"note":"","data":["800707EF 0040"],"options":null},"Level 4\\Return An Interception For A Touchdown":{"note":"","data":["800707F0 0040"],"options":null},"Level 4\\Rush For 100 Yards Or More With 2 Different Running Backs":{"note":"","data":["800707FC 0040"],"options":null},"Level 4\\Rush The Ball 40 Time Or More With A QTR Length Of 6 Minutes Or Less":{"note":"","data":["800707FB 0040"],"options":null},"Level 4\\Win A 16 Team Tournament":{"note":"","data":["800707F7 0040"],"options":null},"Level 4\\Win By A Margin Of 50 Points Or More":{"note":"","data":["800707FD 0040"],"options":null},"Level 5\\200 Kick Return Yards Or Greater By One Player":{"note":"","data":["80070809 0040"],"options":null},"Level 5\\200 Punt Return Yards Or Greater By One Player":{"note":"","data":["80070806 0040"],"options":null},"Level 5\\250 Yards Rushing Or Greater By One Player":{"note":"","data":["80070813 0040"],"options":null},"Level 5\\3 Receivers With 100 Yards Or More Recieving":{"note":"","data":["80070805 0040"],"options":null},"Level 5\\Break 4 Different All-Time Records Or More In A Game":{"note":"","data":["8007080D 0040"],"options":null},"Level 5\\Complete A Run Play Of 80 Yards Or More":{"note":"","data":["8007080A 0040"],"options":null},"Level 5\\Convert 10 4th Down Conversions Or More":{"note":"","data":["8007080B 0040"],"options":null},"Level 5\\Convert To 3RD Down Conversions Or More":{"note":"","data":["80070812 0040"],"options":null},"Level 5\\Have A QB With A 100 Passing PCT While Throwing A Minimum Of 5 Passes":{"note":"","data":["8007080F 0040"],"options":null},"Level 5\\Have A QB With A Pass AVG Of 30 Yards Or Greater While Throwing At Least 5 Passes":{"note":"","data":["80070801 0040"],"options":null},"Level 5\\Have A RB With A Rushing AVG Of 20 Yards Or Greater While Rushing At least 3 Times":{"note":"","data":["80070804 0040"],"options":null},"Level 5\\Pass For 200 Yards Or More With 2 QBS":{"note":"","data":["80070803 0040"],"options":null},"Level 5\\Play And Win A Minimum Of Four Superbowls With The Same Team In Franchise Mode":{"note":"","data":["80070810 0040"],"options":null},"Level 5\\QB Rushes For 3 Touchdowns Or More":{"note":"","data":["80070807 0040"],"options":null},"Level 5\\QB With A Minimum Of 150 Yards Passing And 100 Yards Rushing":{"note":"","data":["8007080C 0040"],"options":null},"Level 5\\RB With A Minimum Of 100 Yards Receiving And 100 Yards Rushing":{"note":"","data":["80070811 0040"],"options":null},"Level 5\\Return A Kickoff For A Touchdown":{"note":"","data":["80070800 0040"],"options":null},"Level 5\\Score 80 Points Or Greater":{"note":"","data":["80070808 0040"],"options":null},"Level 5\\Shut Out Opposing Team With A QTR Length Of 5 Minutes":{"note":"","data":["80070802 0040"],"options":null},"Level 5\\Successfully Kick A FG Of 55 Yards Or More":{"note":"","data":["8007080E 0040"],"options":null},"No Time-Outs\\Away Team":{"note":"","data":["8006EF6F 0000"],"options":null},"No Time-Outs\\Home Team":{"note":"","data":["8006EC7F 0000"],"options":null},"Particle Illusions\\A":{"note":"","data":["8005F19B 00FE"],"options":null},"Particle Illusions\\B":{"note":"","data":["8005F199 0002"],"options":null},"Players\\Evil Crystal":{"note":"","data":["8005F183 000F"],"options":null},"Players\\Generic Black \u0026 White":{"note":"","data":["8005F233 0058"],"options":null},"Players\\Hallow":{"note":"","data":["8005F233 0047"],"options":null},"Players\\Jagged":{"note":"","data":["8005F180 0080"],"options":null},"Players\\Pixel":{"note":"","data":["8005F18D 0001"],"options":null},"Players\\Polygon":{"note":"","data":["8005F183 0001"],"options":null},"Players\\Super Red":{"note":"","data":["8005F43E 0002"],"options":null},"Press GS For More Time To Choose Play":{"note":"","data":["890723E6 0024"],"options":null},"Press L For First Down\\Player 1":{"note":"","data":["D00753DD 0020","81071B18 0001"],"options":null},"Press L For First Down\\Player 2":{"note":"","data":["D00753E5 0020","81071B18 0001"],"options":null},"Press L For First Down\\Player 3":{"note":"","data":["D00753ED 0020","81071B18 0001"],"options":null},"Press L For First Down\\Player 4":{"note":"","data":["D00753F5 0020","81071B18 0001"],"options":null},"Press R For Fourth Down\\Player 1":{"note":"","data":["D00753DD 0010","81071B18 0004"],"options":null},"Press R For Fourth Down\\Player 2":{"note":"","data":["D00753E5 0010","81071B18 0004"],"options":null},"Press R For Fourth Down\\Player 3":{"note":"","data":["D00753ED 0010","81071B18 0004"],"options":null},"Press R For Fourth Down\\Player 4":{"note":"","data":["D00753F5 0010","81071B18 0004"],"options":null},"Uniforms\\Bare":{"note":"","data":["8005F188 008F"],"options":null},"Uniforms\\Future":{"note":"","data":["8005F207 0033"],"options":null},"Uniforms\\Ghetto":{"note":"","data":["8005F188 001F"],"options":null}},"0CEBC4C7-0C9CE932-C:4A":{"Gun 4-Way Shot":{"note":"","data":["801279B3 0004"],"options":null},"Infinite Fuel":{"note":"","data":["811279B6 FFFF"],"options":null},"Infinite Shield":{"note":"","data":["81127958 0264"],"options":null},"Infinite Weapon\\1st Position":{"note":"","data":["811276CA 03E7"],"options":null},"Infinite Weapon\\2nd Position":{"note":"","data":["811276CE 03E7"],"options":null},"Infinite Weapon\\3rd Position":{"note":"","data":["811276D2 03E7"],"options":null},"Infinite Weapon\\4th Position":{"note":"","data":["811276D6 03E7"],"options":null},"Infinite Weapon\\5th Position":{"note":"","data":["811276DA 03E7"],"options":null},"Max Score":{"note":"","data":["811276B6 FFFF"],"options":null},"Stage Select On":{"note":"","data":["81127706 0001"],"options":null},"Weapon Modifier\\Gun Weapon":{"note":"","data":["801279B3 00??"],"options":{"2-Way Shot":"02","3-Way Shot":"03","4-Way Shot":"04","No Weapon":"00","Normal Shot":"01"}},"Weapon Modifier\\Rockets\\Slot 1":{"note":"","data":["801276C9 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\Rockets\\Slot 2":{"note":"","data":["801276CD 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\Rockets\\Slot 3":{"note":"","data":["801276D1 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}}},"0D93BA11-683868A6-C:50":{"Access all crystals":{"note":"","data":["50000701 0000","800D6EC0 0001","50001701 0000","800D6EC8 0007"],"options":null},"Access all difficulty levels":{"note":"100 yard hop, bumper crop bump \u0026 checkerboard chase","data":["50000301 0000","800D6E69 0003"],"options":null},"Access all enemy info":{"note":"","data":["50005101 0000","800D6F10 0002"],"options":null},"All Levels completed":{"note":"You must still beat boss's to continue onto next level","data":["50002B01 0000","800D6EE0 0002"],"options":null},"All Save Slots 100% Completed\\Save slot 1":{"note":"","data":["800ECD18 0064"],"options":null},"All Save Slots 100% Completed\\Save slot 2":{"note":"","data":["800ECD70 0064"],"options":null},"All Save Slots 100% Completed\\Save slot 3":{"note":"","data":["800ECDC8 0064"],"options":null},"Infinite Max Health":{"note":"","data":["800D718F 0006","800D7151 00C0"],"options":null},"Infinite Max Lives":{"note":"","data":["800D714F 0064"],"options":null},"Kirkby can fly unlimited":{"note":"","data":["8012EADF 00F0"],"options":null}},"0DD4ABAB-B5A2A91E-C:45":{"Infinite Max DK Tokens":{"note":"","data":["803A8FD5 0063"],"options":null},"Infinite Max Health":{"note":"","data":["807B6760 0008","807B675F 0003"],"options":null}},"0DE2CE36-D41D29E6-C:4A":{"Infinite\\Max Body Stats":{"note":"","data":["81181788 270F","811817C8 0063","50000C02 0000","81181790 270F","50000502 0000","811817C0 270F","50000602 0000","811817E8 270F","50000602 0000","811817F6 270F"],"options":null},"Infinite\\Max Health":{"note":"","data":["81181780 270F","81181782 270F"],"options":null},"Infinite\\Weapons \u0026 Items":{"note":"Do not put this on until in game. This gives you all Weapons, Items and Keys and infinite use of.","data":["50002508 0000","80181B48 0063","50000808 0000","80181C70 0063"],"options":null},"Level 999":{"note":"","data":["811817C8 270F"],"options":null},"Level and Battle Select":{"note":"The level and battle select screen can be accessed by pressing A at the main menu","data":["801CFB94 0005"],"options":null},"Press L To Levitate":{"note":"","data":["D005D8D1 0020","8124C710 3FCB"],"options":null}},"0E31EDF0-C37249D5-C:50":{"Away Team scores 0 Goals":{"note":"","data":["801AF437 0000"],"options":null},"Away Team scores 25 Goals":{"note":"","data":["801AF437 0019"],"options":null},"Home Team scores 0 Goals":{"note":"","data":["801AF433 0000"],"options":null},"Home Team scores 25 Goals":{"note":"","data":["801AF433 0019"],"options":null}},"0E652C21-F19AD3DE-C:4A":{"Unlock All Jurassic World Dinosaurs":{"note":"","data":["8114237C 0101","8114237E 0101","80142380 0001"],"options":null},"Unlock All Planet Mars Characters":{"note":"","data":["81142384 0101","81142386 0101","80142388 0001"],"options":null},"Unlock All Sea World Animals":{"note":"","data":["81142374 0101","81142376 0101","80142378 0001"],"options":null}},"0EC158F5-FB3E6896-C45":{},"0EC158F5-FB3E6896-C:45":{"Buster Parts Slot Select\\Slot 01":{"note":"","data":["80204E03 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 02":{"note":"","data":["80204E04 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 03":{"note":"","data":["80204E05 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 04":{"note":"","data":["80204E06 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 05":{"note":"","data":["80204E07 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 06":{"note":"","data":["80204E08 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 07":{"note":"","data":["80204E09 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 08":{"note":"","data":["80204E0A 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 09":{"note":"","data":["80204E0B 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 10":{"note":"","data":["80204E0C 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 11":{"note":"","data":["80204E0D 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 12":{"note":"","data":["80204E0E 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 13":{"note":"","data":["80204E0F 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 14":{"note":"","data":["80204E10 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 15":{"note":"","data":["80204E11 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 16":{"note":"","data":["80204E12 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 17":{"note":"","data":["80204E13 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 18":{"note":"","data":["80204E14 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 19":{"note":"","data":["80204E15 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 20":{"note":"","data":["80204E16 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 21":{"note":"","data":["80204E17 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 22":{"note":"","data":["80204E18 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 23":{"note":"","data":["80204E19 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 24":{"note":"","data":["80204E1A 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 25":{"note":"","data":["80204E1B 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 26":{"note":"","data":["80204E1C 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 27":{"note":"","data":["80204E1D 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 28":{"note":"","data":["80204E1E 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 29":{"note":"","data":["80204E1F 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 30":{"note":"","data":["80204E20 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 31":{"note":"","data":["80204E21 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 32":{"note":"","data":["80204E22 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 33":{"note":"","data":["80204E23 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 01":{"note":"","data":["80204E00 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 02":{"note":"","data":["80204E01 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 03":{"note":"","data":["80204E02 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Freeze Timer at 00:00":{"note":"","data":["811BC3F4 0000","811BC3F6 0000"],"options":null},"Have\\All Special Weapons":{"note":"With this code, Roll is the one that has to equip the weapons before you can use them.","data":["81205640 FFFF"],"options":null},"Have\\Normal Items":{"note":"","data":["81205650 FFFF","81205652 FFFF","81205654 FFFF","81205656 FFFF"],"options":null},"Have\\Special Items":{"note":"","data":["8120564C FFFF","8120564E FFFF"],"options":null},"Infinite\\Ammo":{"note":"","data":["81204EBA 0080","81204EC2 0010","81204ECA 0708","81204ED2 0018","81204EDA 0010","81204EE2 0708","81204EEA 0020","81204EF2 0020","81204EFA 0020","81204F02 0018","81204F0A 012C","81204F12 0258"],"options":null},"Infinite\\Health":{"note":"","data":["81204A1E 0050"],"options":null},"Infinite\\Zenny":{"note":"","data":["811BC404 0098","811BC406 967F"],"options":null},"Rapid Fire":{"note":"","data":["80204EB3 0002"],"options":null}},"0F1FA987-BFC1AFA6-C:45":{"99 Points Player 1":{"note":"","data":["8010C1EF 0063"],"options":null},"Access All\\Cars \u0026 Tracks":{"note":"","data":["8104ACA6 0001"],"options":null},"Access All\\Cups":{"note":"","data":["800542F3 0003","800542D5 0000","800542D6 0000","800542D7 0000","8005431F 0003","80054301 0000","80054302 0000","80054303 0000","8005434B 0003","8005432D 0000","8005432E 0000","8005432F 0000"],"options":null},"Always 1st":{"note":"","data":["8111565E 0001","81115666 0000","8110C1EE 03E7"],"options":null},"Drones Have No Weapons":{"note":"","data":["8111CD7E 0000"],"options":null},"Infinite Continues":{"note":"","data":["8110C1E2 0006"],"options":null},"Infinite Weapons\\Player 1":{"note":"","data":["81115648 0000","8111564A 00??","8111564E 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 2":{"note":"","data":["81117B10 0000","81117B12 00??","81117B16 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 3":{"note":"","data":["81119FD8 0000","81119FDA 00??","81119FDE 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 4":{"note":"","data":["8111C4A0 0000","8111C4A2 00??","8111C4A6 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Laps To Race":{"note":"","data":["8107DBCE 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Number Of Drones In The Race":{"note":"","data":["8110FEA6 00??"],"options":{"1 Drone":"01","2 Drones":"02","3 Drones":"03","4 Drones":"04","5 Drones":"05","6 Drones":"06","7 Drones":"07","8 Drones":"08","9 Drones":"09"}}},"0F743195-D8A6DB95-C:50":{"Access\\All Guns \u0026 Infinite Ammo":{"note":"","data":["81207AB4 007F","81207AB6 FFFF","81207B84 03E7","50000A02 0000","81207B70 03E7"],"options":null},"Access\\All Items":{"note":"Press L Button Where Items Are available","data":["D0209D85 0020","81207B8C 007F"],"options":null},"Infinite\\Armour":{"note":"","data":["81207B44 0001","81207B46 03E7"],"options":null},"Infinite\\Health":{"note":"","data":["81207B24 03E7"],"options":null},"Level Select":{"note":"","data":["811C6B4E 0001"],"options":null},"Max\\Attributes":{"note":"","data":["50000502 0000","81207B28 0007"],"options":null},"Max\\Experience":{"note":"","data":["81207B26 03E7"],"options":null}},"102888BF-434888CA-C:45":{"Have All\\Keys":{"note":"","data":["50000410 0000","8017E130 0063","50000410 0000","8017E138 0063"],"options":null},"Have All\\Moves":{"note":"","data":["50005306 0000","81183CE0 0100","50005306 0000","81183CE2 00FF"],"options":null},"Have All\\Moves At Skill Level 250":{"note":"","data":["50000E06 0000","80188F63 00FA","50001306 0000","80188FBD 00FA","50003006 0000","80189047 00FA"],"options":null},"Infinite\\Max Body Stats":{"note":"","data":["8117DC48 270F","8117DC88 0063","50000C02 0000","8117DC50 270F","50000502 0000","8117DC80 270F","50000602 0000","8117DCA8 270F","50000602 0000","8117DCB6 270F"],"options":null},"Infinite\\Max Health":{"note":"","data":["8117DC40 270F","8117DC42 270F"],"options":null},"Infinite\\Refresh Items":{"note":"","data":["50000D10 0000","8017E008 0063","50000C10 0000","8017E010 0063"],"options":null},"Infinite\\Weapons \u0026 Items":{"note":"","data":["50000610 0000","8017E0D0 0063","50000610 0000","8017E0D8 0063"],"options":null},"Level 999":{"note":"","data":["8117DC88 270F"],"options":null},"Level and Battle Select":{"note":"The level and battle select screen can be accessed by pressing A at the main menu","data":["801CC8C4 0005"],"options":null},"Press L To Levitate":{"note":"","data":["D005CE51 0020","8124A0B0 3FCB"],"options":null}},"112051D2-68BEF8AC-C:45":{"Have\\Max Gold":{"note":"","data":["50000401 0000","80277335 00FF"],"options":null},"Have\\Max Total XP":{"note":"","data":["50000401 0000","80278BAD 00FF"],"options":null},"Have\\Max Total XP Remaning to Start":{"note":"This will give you 16777215 Total XP Remaning to start with and after your 1st batle will allow you to buy your Max Stats","data":["50000401 0000","80278BB1 00FF"],"options":null},"Infinite\\99 Health Potions":{"note":"Do Not put this cheat on until you have collected your 1st Health Potion from the 1st Cheat or you will not be able to get into the Sub menu and Continue the game.","data":["802785CB 0063"],"options":null},"Infinite\\Max Health":{"note":"","data":["80278B98 001E"],"options":null}},"11223344-55667788-C:45":{},"1145443D-11610EDB-C:50":{"Extra Characters":{"note":"","data":["8007FA98 0001"],"options":null},"Fight With Bunny Slippers On":{"note":"","data":["81138914 0100"],"options":null},"Infinite Health Player 1":{"note":"","data":["8008B287 0064"],"options":null},"Infinite Health Player 2":{"note":"","data":["8008AEFF 0064"],"options":null},"Infinite\\Continues":{"note":"","data":["8015183B 0006"],"options":null},"Infinite\\Time":{"note":"","data":["8113C5BA 0B9E"],"options":null},"Infinite\\Time To Choose Character":{"note":"","data":["D0137ABE 0001","81137ABE 02A2"],"options":null},"Ned The Janitor":{"note":"","data":["8013C281 0001"],"options":null},"One Hit Death\\Player 1":{"note":"","data":["D008B287 0064","8008B287 0001"],"options":null},"One Hit Death\\Player 2":{"note":"","data":["D008AEFF 0064","8008AEFF 0001"],"options":null},"Play As Options\\Player 1":{"note":"","data":["8113C6E2 ????"],"options":{"AL-Rashid":"33FC","Big Guy with spikes and a skull staff":"34C4","Dregan":"358C","Executioner":"3334","Hellnight":"353C","Koyasha":"33AC","Lord Deimos":"335C","Monk dude with sword":"3514","Mordoskull":"344C","Namira":"449C","Pojo The Chicken":"3564","Ragnar":"33C4","Takeshi":"3424","Taria":"33D4","War Mech":"35B4","Xiao Lang":"3474"}},"Play As Options\\Player 2":{"note":"","data":["8113C6DE ????"],"options":{"AL-Rashid":"33FC","Big Guy with spikes and a skull staff":"34C4","Dregan":"358C","Executioner":"3334","Hellnight":"353C","Koyasha":"33AC","Lord Deimos":"335C","Monk dude with sword":"3514","Mordoskull":"344C","Namira":"449C","Pojo The Chicken":"3564","Ragnar":"33C4","Takeshi":"3424","Taria":"33D4","War Mech":"35B4","Xiao Lang":"3474"}}},"1185EC85-4B5A7731-C:50":{"Access\\All Levels \u0026 Superbikes":{"note":"","data":["50000304 0000","80183A0F 0001"],"options":null},"Access\\All Secret Characters":{"note":"This code is Fantastic, You have 12 characters to choose from to you race without any bike, just on foot","data":["50000C04 0000","80183A27 0001"],"options":null},"Access\\All Tracks":{"note":"","data":["50000BD8 0000","80182FC7 0001","50000CD8 0000","80182EF3 0001","50000CD8 0000","80182EF7 0001","50000CD8 0000","80182EFB 0001","50000CD8 0000","80182EFF 0001","50000CD8 0000","80182F03 0001","50000CD8 0000","80182F07 0001"],"options":null},"Infinite Lasers\\Player 1":{"note":"","data":["80170BD9 00C8"],"options":null},"Infinite Lasers\\Player 2":{"note":"","data":["80171241 00C8"],"options":null},"Infinite Lasers\\Player 3":{"note":"","data":["801718A9 00C8"],"options":null},"Infinite Lasers\\Player 4":{"note":"","data":["80171F11 00C8"],"options":null},"Infinite Nitros\\Player 1":{"note":"","data":["80170BA3 0004","80170BA7 0004"],"options":null},"Infinite Nitros\\Player 2":{"note":"","data":["8017120B 0004","8017120F 0004"],"options":null},"Infinite Nitros\\Player 3":{"note":"","data":["80171873 0004","80171877 0004"],"options":null},"Infinite Nitros\\Player 4":{"note":"","data":["80171EDB 0004","80171EDF 0004"],"options":null},"Infinite Shield\\Player 1":{"note":"","data":["80170BCD 00C8"],"options":null},"Infinite Shield\\Player 2":{"note":"","data":["80171235 00C8"],"options":null},"Infinite Shield\\Player 3":{"note":"","data":["8017189D 00C8"],"options":null},"Infinite Shield\\Player 4":{"note":"","data":["80171F05 00C8"],"options":null},"[Screen Hud Clear]":{"note":"If you are using a Plugin other then Jabos 1.5 and can not see through the Thick Hud on the Screen. then Let the game load 1st before Putting this code on,Or it will give an error and Freeze","data":["80092C6B 0004"],"options":null}},"11936D8C-6F2C4B43-C:50":{"Chunky\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FCA4C 0064"],"options":null},"Chunky\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FCA56 0064"],"options":null},"Chunky\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FCA54 0064"],"options":null},"Chunky\\All Golden Bananas\\DK Isle":{"note":"","data":["817FCA58 0064"],"options":null},"Chunky\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FCA4E 0064"],"options":null},"Chunky\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FCA52 0064"],"options":null},"Chunky\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FCA50 0064"],"options":null},"Chunky\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FCA4A 0064"],"options":null},"Chunky\\Infinite Coins":{"note":"","data":["817FCA0E 03E7"],"options":null},"Chunky\\Infinite Musical Instrument":{"note":"","data":["817FCA10 000A"],"options":null},"Diddy\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC932 0064"],"options":null},"Diddy\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC93C 0064"],"options":null},"Diddy\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC93A 0064"],"options":null},"Diddy\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC93E 0064"],"options":null},"Diddy\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC934 0064"],"options":null},"Diddy\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FC938 0064"],"options":null},"Diddy\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC936 0064"],"options":null},"Diddy\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC930 0064"],"options":null},"Diddy\\Infinite Coins":{"note":"","data":["817FC8F4 03E7"],"options":null},"Diddy\\Infinite Musical Instrument":{"note":"","data":["817FC8F6 000A"],"options":null},"Donkey Kong\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC8D4 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC8DE 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC8DC 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC8E0 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC8D6 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC8D8 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC8D2 03E7"],"options":null},"Donkey Kong\\Has Moves":{"note":"","data":["817FC890 0103"],"options":null},"Donkey Kong\\Have Weapon":{"note":"","data":["817FC892 0103"],"options":null},"Donkey Kong\\Infinite Ammo":{"note":"","data":["807FCB85 0096"],"options":null},"Donkey Kong\\Infinite Bananas\\Angry Aztec":{"note":"","data":["817FC89C 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Creepy Castle":{"note":"","data":["817FC8A6 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Crystal Caves":{"note":"","data":["817FC8A4 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\FactoryLevel":{"note":"","data":["817FC89E 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Fungi Forest":{"note":"","data":["817FC8A2 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Galleon Level":{"note":"","data":["817FC8FE 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Jungle Japes":{"note":"","data":["817FC89A 03E7"],"options":null},"Donkey Kong\\Infinite Coins":{"note":"","data":["817FC896 03E7"],"options":null},"Donkey Kong\\Infinite Musical Instrument":{"note":"","data":["817FC894 0103","817FC898 00FF"],"options":null},"Free Pass (Access All Areas)":{"note":"This is exactly what it says, You can walk through Any Locked Door,Gate, Or Area. Have Fun.","data":["8066D167 0001","8066D262 0001"],"options":null},"Infinite\\Camera Film":{"note":"","data":["807FCB89 0005"],"options":null},"Infinite\\Crystal Coconuts":{"note":"","data":["817FCB86 03E7"],"options":null},"Infinite\\Health":{"note":"","data":["817FCB8C 041F"],"options":null},"Infinite\\Orange Bombs":{"note":"","data":["807FCB81 0096"],"options":null},"Lanky\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC990 0064"],"options":null},"Lanky\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC99A 0064"],"options":null},"Lanky\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC998 0064"],"options":null},"Lanky\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC99C 0064"],"options":null},"Lanky\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC992 0064"],"options":null},"Lanky\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FC996 0064"],"options":null},"Lanky\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC994 0064"],"options":null},"Lanky\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC98E 0064"],"options":null},"Lanky\\Infinite Coins":{"note":"","data":["817FC952 03E7"],"options":null},"Lanky\\Infinite Musical Instrument":{"note":"","data":["817FC954 000A"],"options":null},"Tiny\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC9EE 0064"],"options":null},"Tiny\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC9E8 0064"],"options":null},"Tiny\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC9F6 0064"],"options":null},"Tiny\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC9FA 0064"],"options":null},"Tiny\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC9F0 0064"],"options":null},"Tiny\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FC9F4 0064"],"options":null},"Tiny\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC9F2 0064"],"options":null},"Tiny\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC9EC 0064"],"options":null},"Tiny\\Infinite Coins":{"note":"","data":["817FC9B0 03E7"],"options":null},"Tiny\\Infinite Musical Instrument":{"note":"","data":["817FC9B2 000A"],"options":null}},"12737DA5-23969159-C:4A":{"Always Normal Spirit\\Player 1":{"note":"","data":["8015D075 0032"],"options":null},"Always Normal Spirit\\Player 2":{"note":"","data":["8015D509 0032"],"options":null},"Always Normal Spirit\\Player 3":{"note":"","data":["8015D99D 0032"],"options":null},"Always Normal Spirit\\Player 4":{"note":"","data":["8015DE31 0032"],"options":null},"Always Special\\Player 1":{"note":"","data":["8015D0B5 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["8015D549 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["8015D9DD 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["8015DE71 0004"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 1":{"note":"","data":["8015D074 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 2":{"note":"","data":["8015D508 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 3":{"note":"","data":["8015D99C 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 4":{"note":"","data":["8015DE30 0064"],"options":null},"Have All Characters":{"note":"","data":["81094BDA FFFF"],"options":null},"Infinite Create-A-Wrestler Attribute Points":{"note":"","data":["8011069B 001E"],"options":null},"Max Attributes":{"note":"","data":["80110691 0032","80110693 0032","80110695 0032","80110697 0032","80110699 0032"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["8015D075 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["8015D509 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["8015D99D 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["8015DE31 00FF"],"options":null},"No Spirit\\Player 1":{"note":"","data":["8015D075 0000"],"options":null},"No Spirit\\Player 2":{"note":"","data":["8015D509 0000"],"options":null},"No Spirit\\Player 3":{"note":"","data":["8015D99D 0000"],"options":null},"No Spirit\\Player 4":{"note":"","data":["8015DE31 0000"],"options":null},"Specials Don't Run Out":{"note":"","data":["81120C14 2400"],"options":null},"Timer Is Always 00:00":{"note":"","data":["80164F2F 0000"],"options":null},"Ultimate Codes\\Player 1":{"note":"","data":["8015D074 0064"],"options":null},"Ultimate Codes\\Player 2":{"note":"","data":["8015D508 0064"],"options":null},"Ultimate Codes\\Player 3":{"note":"","data":["8015D99C 0064"],"options":null},"Ultimate Codes\\Player 4":{"note":"","data":["8015DE30 0064"],"options":null},"Weapon Select\\Player 1":{"note":"","data":["8115D0B6 0300","8115CC10 ????","8115CC12 0000","8015CCD0 0000"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 2":{"note":"","data":["8115D54A 0300","8115CC40 ????","8015CC42 0001","8015CCD1 0001"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 3":{"note":"","data":["8115D9DE 0300","8115CC70 ????","8015CC72 0002","8015CCD2 0002"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 4":{"note":"","data":["8115DE72 0300","8115CC98 ????","8115CC9A 0003","8015CCD3 0003"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}}},"132D2732-C70E9118-C:45":{"Always 1st\\Player 1":{"note":"This code doesn't record the win on the Time Trial Gold Challenge or the Weapons Gold Challenge.","data":["8109BC68 0001"],"options":null},"Freeze Checkpoint Timer":{"note":"","data":["810CDE92 0BCC"],"options":null},"Infinite Auto Pilot\\AG Systems\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BCE47 005B"],"options":null},"Infinite Auto Pilot\\Auricom\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC1E7 005B"],"options":null},"Infinite Auto Pilot\\Direx\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC817 005C"],"options":null},"Infinite Auto Pilot\\Feisar 1\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["811BC4FE 005B"],"options":null},"Infinite Auto Pilot\\Piranah\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC817 0060"],"options":null},"Weapon Select\\AG Systems":{"note":"","data":["811BCE3E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Auricom":{"note":"","data":["811BC1DE ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Direx":{"note":"","data":["811BC80E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Feisar 1":{"note":"","data":["811BC4F6 ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Piranah":{"note":"","data":["811BCB2E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"[In-Game Cheat Unlock]\\Cyclone Weapon":{"note":"","data":["80094F7E 00??"],"options":{"Off":"00","On":"01"}},"[In-Game Cheat Unlock]\\Infinite Ammo\\Player 1":{"note":"","data":["80091C24 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Ammo\\Player 2":{"note":"","data":["80093340 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Shield Energy\\Player 1":{"note":"","data":["80091C26 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Shield Energy\\Player 2":{"note":"","data":["80093342 0001"],"options":null},"[In-Game Cheat Unlock]\\[Ultimate Unlock All]":{"note":"This Unlocks All Levels, Tracks, Velocitar and Super Combo, Piranha 2 Ship, Cyclone Weapons Power Up and all 28 Gold Awards unlocked","data":["80091C25 0001","80091C2C 0020"],"options":null},"[Infinite Sheild]":{"note":"This cheat enabled fixes Av's popping up and spoiling you racing,it also gives you Infinite Sheild on all Cars,Tracks and Modes","data":["5000030C 0000","8109BCE2 0000","8109BD12 0000"],"options":null}},"13836389-265B3C76-C:45":{"Background\\Coloured Madden":{"note":"","data":["810596E0 0003"],"options":null},"Background\\Gray Madden":{"note":"","data":["810596E0 0000"],"options":null},"Background\\Green \u0026 Black Madden":{"note":"","data":["810596E0 0002"],"options":null},"Background\\Pink \u0026 Purple Madden":{"note":"","data":["810596E0 0004"],"options":null},"Background\\Pink Madden":{"note":"","data":["810596E0 0001"],"options":null},"Background\\Pinker Madden":{"note":"","data":["810596E0 0006"],"options":null},"Enable\\All Stadiums":{"note":"","data":["50000901 0000","80073510 00FF"],"options":null},"Enable\\All Teams":{"note":"","data":["50000901 0000","80073CF8 00FF"],"options":null},"Infinite\\Time Outs Away Team":{"note":"","data":["80084EE3 0003"],"options":null},"Infinite\\Time Outs Home Team":{"note":"","data":["80082D97 0003"],"options":null},"Invisible Players":{"note":"","data":["800545A0 0000","800545A0 0001","800545A0 0002","800545A0 0003"],"options":null},"No Time-Outs\\Away Team":{"note":"","data":["80084EE3 0000"],"options":null},"No Time-Outs\\Home Team":{"note":"","data":["80082D97 0000"],"options":null},"Sixty Frames":{"note":"Animations still choppy,especially the title screen.","data":["8007130D 0001"],"options":null}},"142A17AA-13028D96-C:50":{"Freeze Enemies":{"note":"","data":["8008EE3B 0012"],"options":null},"Gore Mode":{"note":"","data":["8008EE37 0012"],"options":null},"Infinite\\Lives":{"note":"","data":["8008EE33 0012"],"options":null},"Infinite\\Primery Weapons":{"note":"","data":["8008EE30 0012"],"options":null},"Infinite\\Secondary Weapons":{"note":"","data":["8008EE31 0012"],"options":null},"Infinite\\Solaris":{"note":"Solaris are included in code","data":["8008EE3D 0012"],"options":null},"Infinite\\Titans":{"note":"Titans are included in code","data":["8008EE3C 0012"],"options":null},"Infinite\\Weapon Energy":{"note":"","data":["8008EE32 0012"],"options":null},"Invulnerability":{"note":"","data":["8008EE35 0012"],"options":null},"Level Select":{"note":"Accesses all Missions \u0026 Battle mode","data":["8008EE3E 0012"],"options":null},"One Shot Enemies":{"note":"","data":["8008EE3A 0012"],"options":null},"Psychedelic Mode":{"note":"","data":["8008EE39 0012"],"options":null},"Stealth Mode":{"note":"","data":["8008EE34 0012"],"options":null},"Turbo Mode":{"note":"","data":["8008EE38 0012"],"options":null},"Wireframe Mode":{"note":"","data":["8008EE36 0012"],"options":null}},"147E0EDB-36C5B12C-C:4A":{"(Press GS)\\To Kill Enemy":{"note":"Don't Press GS after the Enemy is killed, only during the fight! and only use on Press GS Cheat at a time","data":["891F2454 0000","891F2456 0000","891F2458 0000","891F245A 0000"],"options":null},"(Press GS)\\To Refill Health":{"note":"Don't Press GS after the Enemy is killed, only during the fight!","data":["891F0F18 42C8","891F0F1A 0000"],"options":null},"(Press L)\\ For One Hit Kill":{"note":"Don't Press L after the Enemy is killed, only during the fight!","data":["D0149DD5 0020","811F2458 0000","D0149DD5 0020","811F245A 0000"],"options":null},"(Press R)\\For Level Warp":{"note":"Press Reset and enjoy!","data":["D00D5115 0015","800D5115 00??"],"options":{"Credits 1":"18","Credits 2":"19","Credits 3":"1A","Level 01":"2B","Level 02":"2F","Level 03":"33","Level 04":"37","Level 05":"3B","Level 06":"3D","Level 07":"40","Level 08":"43","Level 09":"46","Level 10":"49","Level 11":"4C","Level 12":"4F","Level 12.5":"51","Level 13":"53"}},"Secret Beta 2 Player Test Mode":{"note":"Press Reset and enjoy! Secret 2 Player Test Mode? The Second Player doesn't move ;(","data":["D00D5115 0015","800D5115 0055"],"options":null}},"151F79F4-8EEDC8E5-C:50":{"Access All Characters":{"note":"","data":["81193CA4 3F00","50000602 0000","81193C98 1F1F"],"options":null},"All Quests Completed":{"note":"","data":["80193CA4 003F","50000C01 0000","80193C98 001F"],"options":null},"Max Stats All Characters":{"note":"","data":["50000B24 0000","811896EC 1414","50000B24 0000","811896EE 1400"],"options":null}},"155B7CDF-F0DA7325-C:55":{"Beta Bottles Revenge Mode":{"note":"Bottles Revenge is a Beta mode from Banjo Tooie that the RWP team recently uncovered after an extraordinary amount of effort. Bottles the Spirit transforms into Bottles the Devil and posses enemies nearby and allows a second player hooked up to Pad 2 to play as that Posses character to try to foil Banjos Plans. As player one goes about its business, player two uses every enemy nearby to try to nab Banjo and take away some life. This mode is incredible, and you can control almost every enemy in the game: slot machines, flying creatures, uggers, zubbas...and this is just the beginning. (Congrats Rare Witch Project)","data":["80130172 0001","8008B4D1 0002"],"options":null},"Infinite\\Air":{"note":"","data":["8112FDC2 42C8"],"options":null},"Infinite\\Energy\\Banjo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","8012059F 000A","801205A0 000A"],"options":null},"Infinite\\Energy\\Banjo and Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","81120584 0A0A"],"options":null},"Infinite\\Energy\\Bee":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","80120593 000A","80120594 000A"],"options":null},"Infinite\\Energy\\Detonator":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","811205AE 0A0A"],"options":null},"Infinite\\Energy\\Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","811205A2 0A0A"],"options":null},"Infinite\\Energy\\Mumbo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","811205A8 0A0A"],"options":null},"Infinite\\Energy\\Snowball":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","80120587 0005"],"options":null},"Infinite\\Energy\\Stony":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","80120599 000A","8011B44A 000A"],"options":null},"Infinite\\Energy\\Submarine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","801205A5 000A","801205A6 000A"],"options":null},"Infinite\\Energy\\T-Rex Baby":{"note":"","data":["8011FFA9 0063","801205BF 000A","801205C0 000A"],"options":null},"Infinite\\Energy\\Washing Machine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011FFA9 0063","81120596 0A0A"],"options":null},"Instant Warp\\Options\\Cauldron Keep":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Cauldron Keep":"015D","Colosseum kickball arena":"0180","Crazy Castle Stockade Jump the hoops multi":"017C","Crazy Castle Stockade balloon burst multi":"017B","Dodgems":"0186","Grunty Industries packing game":"017D","Gun chamber":"0160","Gun room still":"016A","The gatehouse":"015E","Tower of Tragedy Quiz":"015F"}},"Instant Warp\\Options\\Cloud Cuckoo Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Central cavern":"013A","Cloud Cuckoo Land 1":"0136","Cloud Cuckoo Land 2":"0161","Humba wumba's wigwam":"0140","Inside the cheesewedge":"0138","Inside the pot o gold":"013D","Inside the trashcan":"0137","Mingy jongo's skull":"013F","Mumbo's skull":"013E","Trash can mini":"0185","Zubba's nest":"0139","Zubba's nest multi":"0188"}},"Instant Warp\\Options\\Glitter Gulch Mine":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Canary cave":"00DB","Chuffy's cab":"00D0","Crushing shed":"00CB","Flooded caves":"00CC","Fuel depot":"00CA","Generator caverns":"00D3","Gloomy caverns":"00D2","Humba":"00E9","Inside chuffy's boiler boss":"00D1","Mine":"00C7","Mumbo's hut":"00D9","Mumbo's skull":"0171","Ordnance Storage entrance":"0163","Ordnance Storage game":"0164","Ordnance Storage game Multi":"0165","Ordnance storage":"00DC","Power hut":"00D4","Power hut basement":"00CF","Prospectors hut":"00D8","Testing":"0170","Toxic gas cave":"00DA","Train station":"00D7","Water storage":"00CD","Water supply pipe":"0126","Waterfall cavern":"00CE","Wumba's wigwam":"00D5"}},"Instant Warp\\Options\\Grunty Industries":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Basement":"010F","Basement \"repair depot":"0110","Basement \"waste disposal\"":"0111","Elevator shaft":"0105","Floor 2":"0106","Floor 2 \"electromagnet chamber\"":"0107","Floor 3":"0108","Floor 3 \"boiler plant\"":"0109","Floor 3 \"packing room\"":"010A","Floor 4":"010B","Floor 4 \"cable room\"":"010C","Floor 4 \"clinkers cavern\"":"0162","Floor 4 \"quality control\"":"010D","Floor 5":"010E","Inside":"0101","Mumbo's skull":"0172","Outside":"0100","Sewer entrance":"0187","Train station":"0102","Trash compactor":"0104","Water supply pipe":"0125","Workers quarters":"0103"}},"Instant Warp\\Options\\Hailfire Peaks":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Boggy's igloo":"0131","Chilli billi":"012B","Chilly willy":"012C","Colosseum kickball stadium lobby":"012D","Ice train station":"012A","Icicle grotto":"0132","Icy side":"0128","Icy side still":"0168","Inside the volcano":"0133","Lava side":"0127","Lava train station":"0129"}},"Instant Warp\\Options\\Isle O Hags":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Cliff top":"0155","Cliff top Mumbo's skull":"0156","Heggy's egg shed":"0150","Jiggywiggy's temple":"0151","Pine Grove":"0154","Plateau":"0152","Plateau \"Honey B's Hive\"":"0153","Quagmire":"015C","Wooded Hollow":"014F","inside another digger tunnel":"015B","wasteland":"015A"}},"Instant Warp\\Options\\Jinjo Village":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Black Jinjo's House":"0146","Blue Jinjo's House":"0148","Bottles house":"0143","Brown Jinjo's House":"014A","Green Jinjo's House":"0145","Jinjo Village":"0142","King Jingalings throne room":"0144","Orange Jinjo's House":"014B","Purple Jinjo's House":"014C","Red Jinjo's House":"014D","White Jinjo's House":"014E","Yellow Jinjo's House":"0147"}},"Instant Warp\\Options\\Jolly Roger's Lagoon":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Ancient Swimming Baths":"00F4","Atlantis":"01A8","Blubber's wave race hire":"00FF","Electric Eels lair":"00F6","Inside the big fish":"00F8","Jolly Roger's Lagoon":"01A7","Jolly's":"00ED","Pawno's emporium":"00EE","Seabottom":"01A9","Seaweed Sanctum":"00F7","mumbo's skull":"00EF","sea bottom cavern":"0181","submarine multi":"0182","temple of the fishes":"00FA"}},"Instant Warp\\Options\\Mayahem Temple":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Code chamber":"00BC","Humba's Wigwam":"00B6","Inside Targitzans Temple":"0178","Jade Snake Grove":"00C4","Kickball Arena":"00C9","Mayan Kickball Arena":"017F","Multi":"0166","Mumbo's skull":"00B7","Prison Compound":"00B9","Still":"0167","Targitzan Temple Lobby":"0179","Targitzan's Slighty Sacred Temple":"0177","Targitzan's Temple Boss":"017A","The Temple":"00B8","Treasure Chamber":"00C5"}},"Instant Warp\\Options\\Not sure":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8012C390 ????","8012C393 0001"],"options":{"Bottles house":"0143","Bottles house still":"0169","HAG Inside":"018A","HAG1 Final Boss":"019A","Humba Wumba's wigwam 1":"0135","Humba Wumba's wigwam 2":"0157","Inside Chuffy's wagon":"0121","Inside the digger tunnel":"0141","Jingalings Zombified Palace":"019B","Lord woo fak fak":"00FC","Mr Patch":"00F9","Mumbo's Skull":"0134","Smuggler cavern":"01A6"}},"Instant Warp\\Options\\Spiral Mountain":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Banjo's house":"0173","Behind The Waterfall":"00AE","Grunty's Old Lair":"00AD","Top Of Castle":"00AF"}},"Instant Warp\\Options\\Terrydacty Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Bonfire caverns":"011B","Chompa's belly multi":"0183","Humba's Wigwam":"011E","Inside chompa's belly":"0123","Inside the mountain":"0116","Oogle boogles cave":"0115","River passage":"0117","Stomping plains":"011A","Styracosaurus family cave":"0118","Terry's nest":"0113","Terrydacty Land":"0112","Train station":"0114","Unga bunga's cave":"0119"}},"Instant Warp\\Options\\Witchy World":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B284 0000","8112C390 ????","8012C393 0001"],"options":{"Balloon burst game":"00E4","Cave of horrors":"00EA","Crazy castle lobby":"00E2","Crazy castle pump room":"00E3","Crazy castle stockade":"00E1","Crazy castle stockade \"sop\"":"013B","Dodgem challenge \"1 vs 1\"":"00DE","Dodgem challenge \"2 vs 1\"":"00DF","Dodgem challenge \"3 vs 1\"":"00E0","Dodgem dome lobby":"00DD","Haunted cavern":"00EB","Hoop hurry game":"00E5","Mumbo's skull":"0176","Saucer of Peril":"0124","Star spinner":"00E6","Star spinner \"sop\"":"013C","The inferno":"00E7","Train station":"00EC","Witcy World":"00D6"}},"Multi-Player\\Everyone Infinite All Eggs Multiplayer":{"note":"All blaster modes specifically.[ Thanks retroben, awesome work on this!]","data":["810F0BA8 0C04","810F0BAA 8580","81121600 3C08","81121602 8009","81121604 8108","81121606 E5C0","81121608 1100","8112160A 0010","8112160C 0000","8112160E 0000","81121610 3C08","81121612 8009","81121614 8D08","81121616 E5C0","81121618 0008","8112161A 4200","8112161C 0008","8112161E 4202","81121620 0008","81121622 4080","81121624 3C04","81121626 8000","81121628 0104","8112162A 4020","8112162C 3C04","8112162E 2406","81121630 2484","81121632 0064","81121634 AD04","81121636 31C4","81121638 3C04","8112163A 2408","8112163C 2484","8112163E FFFE","81121640 AD04","81121642 31CC","81121644 3C04","81121646 8013","81121648 8C84","8112164A 7B44","8112164C 0802","8112164E 4912","81121650 0000","81121652 0000"],"options":null},"Multi-Player\\Infinite Health\\Player 1":{"note":"","data":["8013A2B1 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 2":{"note":"","data":["8013A2B5 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 3":{"note":"","data":["8013A2B9 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 4":{"note":"","data":["8013A2BD 0064"],"options":null},"Play As":{"note":"To use this cheat, put the cheat on, then press L as you walk through a door to become that chosen character","data":["D108B284 0000","8012BD9C 00??"],"options":{"Banjo":"0A","Banjo and Kazooie":"01","Bee":"06","Detonator":"0F","Golden Goliath":"0E","Kazooie":"0B","Mumbo":"0D","Snowball":"02","Stony":"08","Submarine":"0C","T-rex baby":"12","T-rex daddy":"13","Truck":"10","Washing machine":"07"}}},"16931D74-65DC6D34-C:50":{"Debug Mode":{"note":"","data":["8006C4E3 0001"],"options":null},"Have\\All Keys":{"note":"","data":["80164229 000F"],"options":null},"Have\\All Weapons":{"note":"","data":["8016422B 007F"],"options":null},"Have\\Quad Damage":{"note":"","data":["811641BC 42C8"],"options":null},"Have\\Ring of Shadows":{"note":"","data":["81164228 ????"],"options":{"Off":"0000","On":"42C8"}},"Infinite\\Ammo":{"note":"","data":["50000402 0000","8016426D 0064","50000402 0000","8116426C 03E7"],"options":null},"Infinite\\Armor":{"note":"","data":["81164184 42C8"],"options":null},"Infinite\\Bio Suit":{"note":"","data":["811641C0 42C8"],"options":null},"Infinite\\Health":{"note":"","data":["81164170 42C8"],"options":null},"Multi\\Have All Weapons\\Player 1":{"note":"","data":["80166B8B 007F"],"options":null},"Multi\\Have All Weapons\\Player 2":{"note":"","data":["80166E5B 007F"],"options":null},"Multi\\Infinite Ammo\\Player 1":{"note":"","data":["50000402 0000","81166BCC 03E7"],"options":null},"Multi\\Infinite Ammo\\Player 2":{"note":"","data":["50000402 0000","81166E9C 03E7"],"options":null},"Multi\\Infinite Armor\\Player 1":{"note":"","data":["81166AE4 42C8"],"options":null},"Multi\\Infinite Armor\\Player 2":{"note":"","data":["81166DB4 42C8"],"options":null},"Multi\\Infinite Bio Suit\\Player 1":{"note":"","data":["81166B20 42C8"],"options":null},"Multi\\Infinite Bio Suit\\Player 2":{"note":"","data":["81166DF0 42C8"],"options":null},"Multi\\Infinite Health\\Player 1":{"note":"","data":["81166AD0 42C8"],"options":null},"Multi\\Infinite Health\\Player 2":{"note":"","data":["81166DA0 42C8"],"options":null},"Rapid Fire":{"note":"","data":["D00CB220 0020","801641AD 0001"],"options":null}},"1938525C-586E9656-C:45":{"Have All Dots":{"note":"","data":["8111D55E 03E7"],"options":null},"Infinite\\Health":{"note":"","data":["8111D55C 003C"],"options":null},"Infinite\\Lives":{"note":"","data":["8010A3D7 0009"],"options":null},"Max Score":{"note":"","data":["8111EF14 E0FF","8111EF16 05F5"],"options":null}},"19AB29AF-C71BCD28-C:50":{"Access\\All Star Spirits":{"note":"Disable this code as soon as you have reached level 8, or everything will be removed again","data":["8110E01E 0007"],"options":null},"Access\\Infinite Coins":{"note":"","data":["8110DD9C 03E7"],"options":null},"Access\\Infinite Star Spirits":{"note":"","data":["8010E020 0007"],"options":null},"Access\\Level 99":{"note":"","data":["8010DD99 0063"],"options":null},"Access\\Max Badge Points":{"note":"","data":["8010DD98 00??"],"options":{"127 Badge Points":"7F","60 Badge Points":"3C"}},"Access\\Max Star Energy":{"note":"","data":["8010E01E 0007"],"options":null},"Access\\Max Star Pieces":{"note":"","data":["8010DD9F 0063"],"options":null},"Access\\Max Star Points":{"note":"You will level up, everytime you get a Star point","data":["8010DDA0 0063"],"options":null},"Access\\Ultra Rank":{"note":"This will give you Goombario,Kooper,Bombette,Parakarry,Bow Watt, Sushie \u0026 Lakilester","data":["50000C08 0000","8010DDAD 0002","50000C08 0000","8010DDED 0002"],"options":null},"Access\\all members in your party":{"note":"","data":["50000C08 0000","8010DDAC 0001"],"options":null},"Infinite \u0026 Max HP + FP":{"note":"Do not enable this code before you have made a save, when a new game is started up.","data":["50000601 0000","8010DD91 0063"],"options":null},"Press L Button For Moon Jump":{"note":"","data":["D0071337 0020","8010DAF4 0043"],"options":null}},"19F55D46-73A27B34-C:45":{"Infinite Time":{"note":"","data":["8114C298 000A"],"options":null},"Pick Your Kombat Zone":{"note":"","data":["81257544 00??"],"options":{"Armory":"14","Bell Tower":"07","Bridge":"05","Courtyard":"02","Dead Pool":"11","Graveyard":"09","Hidden Portal":"10","Jade's Desert":"0E","Kahn's Kave":"0D","Kahn's Tower":"04","Kombat Temple":"08","Lair":"18","Living Forest":"15","Lost Bridge":"0F","Pit":"03","Pit 2":"1A","Pit 3":"0A","Pit Bottom":"1C","Portal":"17","River Kombat":"0B","Rooftop":"13","Scorpion's Lair":"0C","Soul Chamber":"06","Star Bridge":"1B","Street":"01","Subway":"00","Tomb":"19","Tower":"16","Wasteland":"12"}},"Player 1\\Aggressor Energy Bar":{"note":"","data":["801698E1 0030"],"options":null},"Player 1\\Energy is":{"note":"","data":["8016984D 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 1\\Infinite Run":{"note":"","data":["81169854 0030"],"options":null},"Player 1\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B5225 0020","81169874 5100","D02B5225 0020","8116987C 5100"],"options":null},"Player 1\\Play As":{"note":"","data":["8016983D 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Player 2\\Aggressor Energy Bar":{"note":"","data":["801698E3 0030"],"options":null},"Player 2\\Energy is":{"note":"","data":["80169B21 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 2\\Infinite Run":{"note":"","data":["81169B28 0030"],"options":null},"Player 2\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B522D 0020","81169876 5100","D02B522D 0020","8116987E 5100"],"options":null},"Player 2\\Play As":{"note":"","data":["80169AE1 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Unlock Secret":{"note":"","data":["80169EE1 0004"],"options":null}},"1A122D43-C17DAF0F-C:45":{"Have All Pikachus Magnemites":{"note":"","data":["801183BC 0000","801183BD 0000","801183BE 0000"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 1":{"note":"","data":["81285A18 03E7"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 2":{"note":"","data":["81286438 03E7"],"options":null},"Pokemon\\Inf Spells\\Player 1":{"note":"","data":["810AE580 FFFF","810AE582 FFFF","810AE5D4 FFFF","810AE5D6 FFFF","810AE628 FFFF","810AE62A FFFF"],"options":null},"Pokemon\\Inf Spells\\Player 2":{"note":"","data":["810AE79C FFFF","810AE79E FFFF","810AE7F0 FFFF","810AE7F2 FFFF","810AE844 FFFF","810AE846 FFFF"],"options":null},"Pokemon\\Max HP\\Player 1":{"note":"","data":["810AE586 03E7","810AE5DA 03E7","810AE62E 03E7"],"options":null},"Pokemon\\Max HP\\Player 2":{"note":"","data":["810AE7A2 03E7","810AE7F6 03E7","810AE84A 03E7"],"options":null},"Ultimate Code":{"note":"what's so ultimate about this code is it raises your Pokemon to its full potential. Even at Level 100, most Pokemon still have a way to go to raise their stats to the max. But with this code, you can instantly boost any Pokemon to its greatest potential!!!","data":["81171F3C FF01","81171F3E FF01","81171F40 FF01","81171F42 FF01","81171F44 FF01"],"options":null}},"1A7F70B5-00B7B9FD-C:45":{"Andrew Rynolds\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDFD8 00FF","50001001 0000","800EDFE8 00FF"],"options":null},"Andrew Rynolds\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE014 00FF"],"options":null},"Bam Margera\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE348 00FF","50001001 0000","800EE358 00FF"],"options":null},"Bam Margera\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE384 00FF"],"options":null},"Bucky Lasek\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDD44 00FF","50001001 0000","800EDD54 00FF"],"options":null},"Bucky Lasek\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDD80 00FF"],"options":null},"Chad Muska\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDEFC 00FF","50001001 0000","800EDF0C 00FF"],"options":null},"Chad Muska\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDF38 00FF"],"options":null},"Elissa Steamer\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE190 00FF","50001001 0000","800EE1A0 00FF"],"options":null},"Elissa Steamer\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE1CC 00FF"],"options":null},"Eric Koston\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDC68 00FF","50001001 0000","800EDC78 00FF"],"options":null},"Eric Koston\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDCA4 00FF"],"options":null},"Geoff Rowley\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE0B4 00FF","50001001 0000","800EE0C4 00FF"],"options":null},"Geoff Rowley\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE0F0 00FF"],"options":null},"Infinite Stat Upgrades \u0026 Deck Boards to Buy":{"note":"This allows you to ugrade you stats in Upgrades to the Max \u0026 Also to open the Boards in Decks For All Characters.","data":["800ED8F9 00FF","800ED905 00FF","800EDD45 00FF","800EDD51 00FF","800EDFE5 00FF","800EDFD9 00FF","800ED9D5 00FF","800ED9E1 00FF","800EDAB1 00FF","800EDABD 00FF","800EDB8D 00FF","800EDB99 00FF","800EDC69 00FF","800EDC75 00FF","800EDE21 00FF","800EDE2D 00FF","800EDEFD 00FF","800EDF09 00FF","800EE0B5 00FF","800EE0C1 00FF","800EE191 00FF","800EE19D 00FF","800EE26D 00FF","800EE279 00FF","800EE349 00FF","800EE355 00FF","800EE425 00FF","800EE431 00FF","800EE501 00FF","800EE50D 00FF","800EE5DD 00FF","800EE5E9 00FF","800EE6B9 00FF","800EE6C5 00FF","800EE795 00FF","800EE7A1 00FF"],"options":null},"Jamie Thomas\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE26C 00FF","50001001 0000","800EE27C 00FF"],"options":null},"Jamie Thomas\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE2A8 00FF"],"options":null},"Kareem Campbell\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDAB0 00FF","50001001 0000","800EDAC0 00FF"],"options":null},"Kareem Campbell\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDAEC 00FF"],"options":null},"Officer Dick\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE6B8 00FF","50001001 0000","800EE6C8 00FF"],"options":null},"Officer Dick\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE6F4 00FF"],"options":null},"Play As":{"note":"","data":["800E9D69 00??"],"options":{"Andrew Rynolds":"08","Bam Margera":"0C","Bucky Lasek":"05","Chad Muska":"07","Elissa Steamer":"0A","Eric Koston":"04","Geoff Rowley":"09","Jamie Thomas":"0B","Kareem Campbell":"02","Officer Dick":"10","Rodney Mullen":"06","Rune Glifberg":"03","Skater A":"0D","Skater B":"0E","Skater C":"0F","Steve Caballero":"01","Tony Hawk":"00","Wolverine":"11"}},"Play On Level":{"note":"This allows you to play on a level even if it isnt already open just choose \u0026 tick choose foundary or what ever level \u0026 play the one you selected","data":["800ED58F 00??"],"options":{"Airport":"04","Canada":"06","Custom":"09","Downhill":"08","Foundary":"00","Los Angeles":"01","Rio De Janeiro":"02","Skater Island":"05","Suburbia":"03","Tokyo":"07"}},"Rodney Mullen\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDE20 00FF","50001001 0000","800EDE30 00FF"],"options":null},"Rodney Mullen\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDE5C 00FF"],"options":null},"Rune Glifberg\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EDB8C 00FF","50001001 0000","800EDB9C 00FF"],"options":null},"Rune Glifberg\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDBC8 00FF"],"options":null},"Skater A\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE424 00FF","50001001 0000","800EE434 00FF"],"options":null},"Skater A\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE460 00FF"],"options":null},"Skater B\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE500 00FF","50001001 0000","800EE510 00FF"],"options":null},"Skater B\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE53C 00FF"],"options":null},"Skater C\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE5DC 00FF","50001001 0000","800EE5EC 00FF"],"options":null},"Skater C\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE618 00FF"],"options":null},"Steve Caballero\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800ED9D4 00FF","50001001 0000","800ED9E4 00FF"],"options":null},"Steve Caballero\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EDA10 00FF"],"options":null},"Timer Starts Off At 20 Mins":{"note":"","data":["800E9D64 FFFF"],"options":null},"Tony Hawk\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800ED8F8 00FF","50001001 0000","800ED908 00FF"],"options":null},"Tony Hawk\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800ED934 00FF"],"options":null},"Wolverine\\All Levels Open,Gold Medals \u0026 Goals Completed":{"note":"","data":["800EE794 00FF","50001001 0000","800EE7A4 00FF"],"options":null},"Wolverine\\Have all 5of5 Stat Points \u0026 All Decks":{"note":"","data":["50000F04 0000","800EE7D0 00FF"],"options":null}},"1AA05AD5-46F52D80-C:50":{"Choose Vehicle":{"note":"Make your Choice \u0026 then Press GS To Activate,But do not use with any other Press GS Cheat Codes.","data":["88366807 00??"],"options":{"Birdman":"06","Cannonball":"03","Gyrocopter":"02","Hang Glider":"00","Jumble Hopper":"05","Rocket Belt":"01","Skydiving":"04"}},"Infinite Fuel\\Gyrocopter":{"note":"","data":["80366989 0081"],"options":null},"Infinite Fuel\\Rocket Belt":{"note":"","data":["803669A9 0081"],"options":null},"Infinite Photos":{"note":"","data":["813545EE 0000"],"options":null},"Music Volume Select":{"note":"","data":["80250FA4 00??"],"options":{"Default Volume":"3F","Max Volume":"80","No Music":"00"}},"Time Always 00'00'10":{"note":"This Cheat code is for All Events","data":["803668B8 0001"],"options":null},"[Perfect Score] (All Class \u0026 Level's)":{"note":"To make these codes save to Game-Pak; just pick a level and lose, choose Next then Quit. Enable Disable Perfect Score then save and disable before using the Extra Games Perfect Score Cheat.","data":["50000330 0000","803683ED 0064","50000330 0000","80368A81 0064","50000330 0000","80368BD1 0064","50000330 0000","80369115 0064","50000330 0000","80369265 0064","50000330 0000","803693B5 0064","50000330 0000","803697A9 0064","50000330 0000","803698F9 0064","50000330 0000","80369A49 0064"],"options":null},"[Perfect Score] Extra Games (All Class \u0026 Level's)":{"note":"To make these codes save to Game-Pak; just pick a level and lose, choose Next then Quit. Enable Disable Perfect Score then save and disable before using the Extra Games Perfect Score Cheat.","data":["8036847D 0019","803685CD 0019","8036871D 0019","8036886D 0019","803684AD 0064","803684DD 0064","80368B11 0019","80368C61 0019","80368DB1 0019","80368F01 0019","80368B41 0064","80368B71 0064","803691A5 0019","803692F5 0019","80369445 0019","80369595 0019","803691D5 0064","80369205 0064"],"options":null}},"1B598BF1-ECA29B45-C:45":{"99 Accuracy":{"note":"","data":["80130B80 0063"],"options":null},"99 Bonus":{"note":"","data":["80130B87 0063"],"options":null},"Always Have\\F-15J Eagle":{"note":"","data":["8027CCEC 0010"],"options":null},"Always Have\\X-29A A.T.D.":{"note":"","data":["8027CCED 0020"],"options":null},"Extra Planes":{"note":"","data":["8127CCEC FFFF"],"options":null},"Extra Points":{"note":"","data":["D027A20C 0000","8027A20C 00FF"],"options":null},"Gun Select":{"note":"","data":["8027E023 00??"],"options":{"22mm":"0B","22mm BB Shot":"0A","Air Mines":"02","Chaff":"00","Fire":"14","Fire Arrow":"21","Fire Wave":"17","Fireball":"0D","Hunai Shot":"0C","Jammings":"01","Mahibishi":"03","Ninja Glitch":"16","Ninjabeam":"28","Phoenix":"1F","Rocket":"1E","Sabre":"0E","Star":"20","Tomahawk":"15"}},"Infinite\\99 Lives":{"note":"","data":["80348B98 0063"],"options":null},"Infinite\\Armor":{"note":"","data":["8127CFF4 44A0","8127CFF8 44A0"],"options":null},"Infinite\\Chaffs":{"note":"","data":["8027E017 000A"],"options":null},"Infinite\\Gun":{"note":"","data":["8027E110 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8027CFF5 00C8","8027CFF9 00C8"],"options":null},"Infinite\\Special Weapons":{"note":"","data":["8027E4D2 0002"],"options":null},"Rocket Squad":{"note":"","data":["8027E107 0001"],"options":null},"Tomahawk Squad":{"note":"","data":["8027E109 0001"],"options":null},"Ultra Fast Missile Recharge":{"note":"","data":["8027E300 0001"],"options":null}},"1CC06338-87388926-C:45":{"Enable All Characters":{"note":"","data":["8031B242 0000","8031B243 0004"],"options":null},"Have Max\\Powerups":{"note":"","data":["801CAE23 0002"],"options":null},"Have Max\\Weapon Power-Up":{"note":"","data":["801CAE27 0002"],"options":null},"Infinite\\Bullets":{"note":"For Henry","data":["801D3DA3 0006"],"options":null},"Infinite\\Gold":{"note":"","data":["811CAB42 2710"],"options":null},"Infinite\\Health":{"note":"","data":["811CAB3A 2710"],"options":null},"Infinite\\Health Young Henry":{"note":"","data":["D11C87F6 0010","813A5360 2800"],"options":null},"Infinite\\Items\\Crest Half A":{"note":"","data":["801CAB5B 000A"],"options":null},"Infinite\\Items\\Crest Half B":{"note":"","data":["801CAB5C 000A"],"options":null},"Infinite\\Items\\Cure Ampoule":{"note":"","data":["801CAB4E 000A"],"options":null},"Infinite\\Items\\Healing Kit":{"note":"","data":["801CAB4C 000A"],"options":null},"Infinite\\Items\\Magical Nitro":{"note":"","data":["801CAB55 000A"],"options":null},"Infinite\\Items\\Mandragora":{"note":"","data":["801CAB56 000A"],"options":null},"Infinite\\Items\\Moon Card":{"note":"","data":["801CAB58 000A"],"options":null},"Infinite\\Items\\Oldrey's Diary":{"note":"","data":["801CAB5A 000A"],"options":null},"Infinite\\Items\\Powerup":{"note":"","data":["801CAB4F 000A"],"options":null},"Infinite\\Items\\Purifying":{"note":"","data":["801CAB4D 000A"],"options":null},"Infinite\\Items\\Red Jewels":{"note":"","data":["801CAB44 0068"],"options":null},"Infinite\\Items\\Roast Beef":{"note":"","data":["801CAB4B 000A"],"options":null},"Infinite\\Items\\Roast Chicken":{"note":"","data":["801CAB4A 000A"],"options":null},"Infinite\\Items\\Rose Brooch":{"note":"","data":["801CAB5D 000A"],"options":null},"Infinite\\Items\\Sun Card":{"note":"","data":["801CAB57 000A"],"options":null},"Infinite\\Items\\The Contract":{"note":"","data":["801CAB54 000A"],"options":null},"Infinite\\Items\\Throwing Weapons":{"note":"","data":["801CAB45 0064"],"options":null},"Infinite\\Items\\Winch Lever":{"note":"","data":["801CAB59 000A"],"options":null},"Infinite\\Keys\\Archives":{"note":"","data":["801CAB5E 000A"],"options":null},"Infinite\\Keys\\Art Tower 1":{"note":"","data":["801CAB6A 000A"],"options":null},"Infinite\\Keys\\Art Tower 2":{"note":"","data":["801CAB6B 000A"],"options":null},"Infinite\\Keys\\Chamber":{"note":"","data":["801CAB63 000A"],"options":null},"Infinite\\Keys\\Clocktower A":{"note":"","data":["801CAB6F 000A"],"options":null},"Infinite\\Keys\\Clocktower B":{"note":"","data":["801CAB70 000A"],"options":null},"Infinite\\Keys\\Clocktower C":{"note":"","data":["801CAB68 000A"],"options":null},"Infinite\\Keys\\Clocktower D":{"note":"","data":["801CAB69 000A"],"options":null},"Infinite\\Keys\\Clocktower E":{"note":"","data":["801CAB6E 000A"],"options":null},"Infinite\\Keys\\Control Room":{"note":"","data":["801CAB6C 000A"],"options":null},"Infinite\\Keys\\Copper":{"note":"","data":["801CAB62 000A"],"options":null},"Infinite\\Keys\\Deck":{"note":"","data":["801CAB65 000A"],"options":null},"Infinite\\Keys\\Execution":{"note":"","data":["801CAB64 000A"],"options":null},"Infinite\\Keys\\Garden":{"note":"","data":["801CAB61 000A"],"options":null},"Infinite\\Keys\\Left Tower":{"note":"","data":["801CAB5F 000A"],"options":null},"Infinite\\Keys\\Rose Garden":{"note":"","data":["801CAB66 000A"],"options":null},"Infinite\\Keys\\Storeroom":{"note":"","data":["801CAB60 000A"],"options":null},"Infinite\\Keys\\Thorn":{"note":"","data":["801CAB67 000A"],"options":null},"Infinite\\Keys\\Wall":{"note":"","data":["801CAB6D 000A"],"options":null},"Infinite\\Specials\\Special 1":{"note":"","data":["801CAB47 000A"],"options":null},"Infinite\\Specials\\Special 2":{"note":"","data":["801CAB48 000A"],"options":null},"Infinite\\Specials\\Special 3":{"note":"","data":["801CAB49 000A"],"options":null},"Rapid Fire Gun (Henry-Hold B)":{"note":"For Henry, Hold B","data":["811C87F6 0040","801D3DA3 0006"],"options":null},"Selection Options\\Cut Scene Select":{"note":"With this code, you must use the appropiate level mod before you attemp to run these cut scenes. Not doing so will ruin the cut scene as the graphics will be glitched.","data":["801CAE93 0009","801CAE8B 00??"],"options":{"\"I Smell Poison\" From Underground Waterway":"08","(?)":"22","Actrise Appears Again Before Fight With Carrie":"56","Actrise Appears Again With Cousin Fernandes Before Fight With Carrie":"54","Actrise Appears In Castle Center":"52","Actrise Defeated By Carrie":"57","Ada":"30","Bleeding Statue":"12","Bull Awakens":"17","Castel Destruction":"27","Castle Destruction":"29","Castle Drawbridge Closes And Ortega Appears":"46","Castle Drawbridge Lowers":"03","Castle Gate Closes In Villa Upon Entering Villa":"09","Castle Keep Destructs":"1E","Character Enters Castle":"04","Character In Boat On Foggy Lake":"10","Cornell And Henry Part In Garden":"49","Cornell Meets Henry In Garden":"48","Cosmic Lights":"13","Cousin Fernandes Is Destroyed":"55","Death Is Destroyed":"45","Death(Grim Reaper)":"44","Explosion At Wall In Arena":"14","Explosion At Wall In Castle That Leads To Hidden Room":"15","Finds Hidden Path In Villa Basement":"35","Gate Opens In Forest Of Silence":"1A","Harpie":"38","Harpie Destroyed":"39","Lever \u0026 Gear In Castle":"37","Malus And Reinhardt On Horse":"2B","Malus Appears Again In Upstairs Room Of Castle":"16","Malus Appears For The First Time":"0E","Malus Is Saved By Reinhardt":"2A","Malus Leaves Garden":"0F","Malus On Flying Horse Outside Castle Keep":"1F","Meet Renon For The Last Time In Castle Keep.":"1B","Monster Dracula Appears":"51","One Of The Working Gears Cut Scenes":"19","Renon Appears For First Time":"0B","Rosa In Garden":"25","Rosa Returns":"2E","Scrolling Text About Castle And Henry":"31","Seal Removed From Wall In Arena":"11","Space Warp":"28","Spider People In Tunnel":"24","Thirsty Man":"47","This Cut Scene Runs Cut Scene 27 And 2E":"1C","Vampire In Basement":"33","Vampire In Main Entrance Hall Of Villa":"06","Vampire In Villa Basement Destroyed":"34","Village Vampire In Upstairs Villa":"0D","Vincent The Vampire":"18"}},"Selection Options\\Day Select For Adult Henry":{"note":"","data":["801CAB1F 00??"],"options":{"0 Days":"07","1 Day":"06","2 Days":"05","3 Days":"04","4 Days":"03","5 Days":"02","6 Days":"01","7 Days":"00"}},"Selection Options\\Level Select\\Inter":{"note":"","data":["801CAE7B 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Level Select\\Main":{"note":"","data":["801CAE79 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Status Select":{"note":"","data":["801CAB84 00??"],"options":{"Instant Death":"FF","Never Get Poisoned or Vamped":"00","Normal":"01","Poison":"08","Vamp":"04","Vamped \u0026 Poisoned":"0C"}},"Selection Options\\Weapon Select":{"note":"","data":["801CAB3F 00??"],"options":{"Axe":"04","Cross":"03","Knife":"01","Nothing":"00","Potion":"02"}},"Selection Options\\[Press F9 For Wolfman Can Use Weapons]":{"note":"For Cornell","data":["881CAB37 00??"],"options":{"No (Default)":"04","Yes":"02"}},"Stop Timer Input":{"note":"","data":["811CAB22 0001"],"options":null}},"1D4136F3-AF63EEA9-C:45":{"Always Have Wallet Size":{"note":"","data":["801189DA 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C681D 0010","81119C9E 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["80119821 00FF","80119C97 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,\u0026 then press reset (F1) you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D011BB71 0000","80119D4B 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["8002397C 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801189BE 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801189BF 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801189C0 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801189C1 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1A68 0005","801EE508 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801189DA 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801189DB 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801189D9 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189D4 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189DC 30FF","811189DE FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801189B0 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801189B6 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801189BC 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["801189B4 0009"],"options":null},"Have\\Bombs":{"note":"","data":["801189AE 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["801189B8 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["801189AD 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["801189AC 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["801189AF 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["801189B2 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["801189B5 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["801189B9 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["801189BA 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["801189B1 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["801189B7 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["801189BD 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["801189BB 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["801189B3 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["801189C7 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["801189E0 0007","801189E1 0007","801189E2 0007","801189E3 0007","801189E4 0007","801189E5 0007","801189E6 0007","801189E7 0007","801189E8 0007","801189E9 0007","801189EA 0007","801189F7 0009","801189F8 0009","801189F9 0009","801189FA 0009","801189FB 0009","80118A01 0009","80118A04 0009","801189FF 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801189CC 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["801189C6 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801189C5 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801189CA 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801189C4 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118968 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118971 0008","80118972 0001","80118974 0001","8011896B 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801189D2 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["81119D04 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["80119D0D 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D011BB11 0020","811D93D0 40CB","D011BB11 0000","811D9BF2 000D","801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119D41 00??"],"options":{"English":"00","French":"02","German":"01"}},"Level Select":{"note":"","data":["D01C6E35 0000","8111893A ????"],"options":{"?":"006C","Below The Phantom Gannon Boss":"000C","Dodongo's Cavern":"0004","Gerudo Training Ground":"0008","Inside Jabu-Jabu's Belly":"0027","Inside the Deku Tree":"0000","Lakeside Laboratory":"0042","Royal Family's Tomb":"002C","Shoadow Temple":"0036","Temple Of Time":"0052","Water Temple":"0010"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["80118A07 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["80118A09 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["81118966 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["81119D00 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L\\For Infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D011BB11 0020","811D9BF2 000D"],"options":null},"Press L\\To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D011BB11 0020","811D93D0 40CB"],"options":null},"Time of Day Modifier":{"note":"","data":["81118944 ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["801189C2 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["801189C3 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["80118976 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119B5A 0000","81119B5C 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"1D4136F3-AF63EEA9-C:50":{"Always Have Wallet Size":{"note":"","data":["801189DA 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C681D 0010","81119C9E 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["80119821 00FF","80119C97 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,\u0026 then press reset (F1) you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D011BB71 0000","80119D4B 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["8002397C 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801189BE 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801189BF 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801189C0 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801189C1 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1A68 0005","801EE508 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801189DA 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801189DB 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801189D9 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189D4 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["801189DD 00??","801189DE 00??","801189DF 00??"],"options":{"Off":"00","On":"FF"}},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801189B0 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801189B6 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801189BC 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["801189B4 0009"],"options":null},"Have\\Bombs":{"note":"","data":["801189AE 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["801189B8 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["801189AD 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["801189AC 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["801189AF 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["801189B2 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["801189B5 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["801189B9 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["801189BA 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["801189B1 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["801189B7 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["801189BD 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["801189BB 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["801189B3 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Have\\Status Heart Containers":{"note":"","data":["801189DC 00??"],"options":{"Off":"00","On":"30"}},"Infinite\\Arrows":{"note":"","data":["801189C7 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["801189E0 0007","801189E1 0007","801189E2 0007","801189E3 0007","801189E4 0007","801189E5 0007","801189E6 0007","801189E7 0007","801189E8 0007","801189E9 0007","801189EA 0007","801189F7 0009","801189F8 0009","801189F9 0009","801189FA 0009","801189FB 0009","80118A01 0009","80118A04 0009","801189FF 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801189CC 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["801189C6 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801189C5 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801189CA 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801189C4 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118968 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118971 0008","80118972 0001","80118974 0001","8011896B 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801189D2 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["81119D04 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["80119D0D 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D011BB11 0020","811D93D0 40CB","D011BB11 0000","811D9BF2 000D","801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119D41 00??"],"options":{"English":"00","French":"02","German":"01"}},"Level Select":{"note":"","data":["D01C6E35 0000","8111893A ????"],"options":{"?":"006C","Below The Phantom Gannon Boss":"000C","Dodongo's Cavern":"0004","Gerudo Training Ground":"0008","Inside Jabu-Jabu's Belly":"0027","Inside the Deku Tree":"0000","Lakeside Laboratory":"0042","Royal Family's Tomb":"002C","Shoadow Temple":"0036","Temple Of Time":"0052","Water Temple":"0010"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["80118A07 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["80118A09 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["81118966 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["81119D00 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L\\For Infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D011BB11 0020","811D9BF2 000D"],"options":null},"Press L\\To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D011BB11 0020","811D93D0 40CB"],"options":null},"Time of Day Modifier":{"note":"","data":["81118944 ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["801189C2 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["801189C3 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["80118976 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119B5A 0000","81119B5C 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"1E0E96E8-4E28826B-C:45":{"Level Select":{"note":"","data":["80046353 00??"],"options":{"Level 1":"01","Level 10":"0A","Level 11":"0B","Level 12":"0C","Level 13":"0D","Level 14":"0E","Level 15":"0F","Level 16":"10","Level 17":"11","Level 18":"12","Level 19":"13","Level 2":"02","Level 20":"14","Level 21":"15","Level 22":"16","Level 23":"17","Level 24":"18","Level 25":"19","Level 3":"03","Level 4":"04","Level 5":"05","Level 6":"06","Level 7":"07","Level 8":"08","Level 9":"09"}},"Stop Timer From Counting Down (All Levels)":{"note":"","data":["8101D4FC 2400"],"options":null}},"1E12883D-D3B92718-C:46":{"In-Game Cheats\\Access Cheat menu":{"note":"","data":["50000504 0000","80100D98 0001"],"options":null},"In-Game Cheats\\Enable\\All Items":{"note":"To access simply pause in game play \u0026 then unpause.","data":["80100D7C 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Invincibility":{"note":"","data":["802AAFE8 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Monsters":{"note":"","data":["802AB15B 00??"],"options":{"Are Active":"00","Are Gone":"01"}},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A6356 0064","812A639E 0064","812A63AE 00C8","812A6398 1900","812A6368 04B0","812A639A 0640","812A6338 0960","812A639C 0190"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Keys":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A6353 000F"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A63C7 0001","50000E02 0000","812A630C 03E7"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Infinite Health (All Levels)":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on Single-Player, Co-Operative and DUKEMATCH, All Levels.","data":["8024D25F 0064","802A6309 0064"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A66E2 0064","812A672A 0064","812A673A 00C8","812A6724 1900","812A66F4 04B0","812A6726 0640","812A66C4 0960","812A6728 0190"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A6753 0001","50000E02 0000","812A6698 03E7"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on DUKEMATCH, All Levels.","data":["8024C18F 0064","802A6695 0064"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A6A6E 0064","812A6AB6 0064","812A6AC6 00C8","812A6AB0 1900","812A6A80 04B0","812A6AB2 0640","812A6A50 0960","812A6AB4 0190"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A6ADF 0001","50000E02 0000","812A6A24 03E7"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 4 on DUKEMATCH, All Levels.","data":["8024BCEB 0064","802A6A21 0064"],"options":null},"Single-Player (All Levels)\\Have All\\Items \u0026 Infinite Use on all levels":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5FCA 0064","812A6012 0064","812A6022 00C8","812A600C 1900","812A600E 0640","812A5FDC 04B0","812A5FAC 0960","812A6010 0190"],"options":null},"Single-Player (All Levels)\\Have All\\Keys":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5FC7 000F"],"options":null},"Single-Player (All Levels)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000C01 0000","802A603B 0001","50000C02 0000","812A5F7E 03E7"],"options":null},"Single-Player (All Levels)\\Have Infinite Health (All Levels)":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels and does what it says on the tin. Infinite health for player 1, All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802479DB 0064","8026F1DB 0064","802A5F7D 0064"],"options":null}},"1EA26214-E790900F-C:50":{"All Characters":{"note":"","data":["50000301 0000","8010EB51 00FF"],"options":null},"All Levels Completed":{"note":"Unlocks Frag Fest \u0026 Time Trial","data":["50000601 0000","8010EB7D 00FF"],"options":null},"Deaths Modifier":{"note":"","data":["8110EB76 ????"],"options":{"10":"000A","100":"0064","1600":"0640","20":"0014","200":"00C8","30":"001E","40":"0028","400":"0190","50":"0032","800":"0320","Infinite":"03E7"}},"Have All\\Medals":{"note":"Unlocks the In-Game Cheat Menu.Only works with a Controller-Pak","data":["8010EB50 0003","50000601 0000","8010EB4A 00FF"],"options":null},"Have All\\Mini Game Icons":{"note":"Only works with a Controller-Pak","data":["8010EB17 0024"],"options":null},"Infinite Ammo All Guns\\Player 1":{"note":"","data":["50000302 0000","80336535 0063","50000702 0000","80692B95 0063"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["80336527 0064","80692B86 0064"],"options":null},"Infinite Lives\\Player 1":{"note":"","data":["8033637E 0064"],"options":null},"Total Kills Modifier":{"note":"","data":["8110EB6E ????"],"options":{"10":"000A","100":"0064","1600":"0640","20":"0014","200":"00C8","30":"001E","40":"0028","400":"0190","50":"0032","800":"0320","Infinite":"03E7"}},"Wins Modifier":{"note":"","data":["8110EB72 ????"],"options":{"10":"000A","100":"0064","1600":"0640","20":"0014","200":"00C8","30":"001E","40":"0028","400":"0190","50":"0032","800":"0320","Infinite":"03E7"}}},"1FA056E0-A4B9946A-C:4A":{"All Bosses 1 Hit Deaths":{"note":"","data":["811BE182 0000"],"options":null},"Enable\\Max Power Mode":{"note":"","data":["8015D117 0001"],"options":null},"Flashlight Mod":{"note":"","data":["80179148 00??"],"options":{"Off":"00","On":"01"}},"Have All Characters In Multi":{"note":"","data":["8115D112 FFFF","8115D110 0003","8015D111 0003"],"options":null},"Have\\All\\Weapons,Items \u0026 Infinite Ammo\\Player 1":{"note":"","data":["8017A79F 001E","8017A7B3 0008","8017A7B7 0009","801584C4 0009","8015D117 0001","801584C0 000C","801584C1 0060","801584C3 0001","50000601 0000","801584C5 0001","801584CB 0009","801584CD 000C"],"options":null},"Infinite Health":{"note":"","data":["8017A7BB 0064"],"options":null},"Start with Weapon\\Player 1":{"note":"","data":["8017A7A8 00??"],"options":{"Cool Rocket Launcher With Infinite Ammo":"09","HandGun":"00","Invisible Gun 1 With Infinite Ammo":"06","Invisible Gun 2 With Infinite Ammo":"07","M16 With Infinite Ammo":"04","Machinegun":"01","New Cooler Handgun":"05","Odd Inviso ShotGun With Infinite Ammo":"08","Rocket Launcher":"03","Shotgun":"02","Silenced Handgun":"14"}},"Time is Always 00:00:00":{"note":"","data":["8110DA62 0000"],"options":null}},"1FB5D932-3BA9481B-C:45":{"Don't Take Any Damage":{"note":"","data":["8104A260 2400"],"options":null},"Enable Cheat Select":{"note":"","data":["80115933 00??"],"options":{"All Weapons With Fast Run":"42","All Weapons With Infinite Ammo":"06","Fast run":"40","Have All Weapons":"02","Infinite Ammo":"04","Infinite Ammo With Fast Run":"44","Invincible":"01","Invincible With All Weapons And Fast Run":"43","Invincible With All Weapons and Ammo and Fast Run":"47","Invincible With Fast Run":"41","Invincible With Infinite Ammo and All Weapons":"07"}},"Enable In-Game Cheat Menu \u0026 Level Select":{"note":"","data":["81115936 014F"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810496D0 2400"],"options":null},"Sixty Hack":{"note":"","data":["800F8697 0001","800F87CF 0001","800F8907 0001"],"options":null},"Sound Select\\Music Volume":{"note":"","data":["80115944 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"Sound Select\\SFX Volume":{"note":"","data":["80115945 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"[Press L For Levitate]":{"note":"","data":["D10F7550 0020","816FE35C 43D5"],"options":null}},"1FBAF161-2C1C54F1-C:41":{"Enable All Levels \u0026 Boarders":{"note":"","data":["80255089 00FF","8025508B 0005","81255096 FCFF","80255098 0007"],"options":null},"Have All\\Contest First Place Done":{"note":"","data":["80244098 0007"],"options":null},"Have All\\Match Levels Completed":{"note":"","data":["8025508A 0005"],"options":null},"Have All\\Trick Attacks Done":{"note":"","data":["81255096 FCFF"],"options":null},"Infinite Damage All Players \u0026 Levels":{"note":"","data":["803F4C3D 0000"],"options":null},"Infinite Lives \u0026 Continues":{"note":"","data":["8026B1CB 0003"],"options":null},"Open Level Character Select":{"note":"With these codes, you have to press the buttons listed below when you are viewing a certain boarders stats. Highlight Akari Hayami's stats, and then hold down the C-Left button and then press the A button to be the Crystal Boarder. Highlight Kensuke Kimachi's stats, and then hold down the C-Up button and then press the A button to be the Metal Boarder. Hightlight Rob Haywood's stats, and then hold down the C-Right button and then press the A button to be the Panda Boarder","data":["8125508A 00??"],"options":{"Easy \u0026 Normal Level":"02","Easy Level":"01","Easy Normal \u0026 Hard Levels":"03","Easy Normal Hard Levels \u0026 Crystal \u0026 Metal Boarders":"05","Easy Normal Hard Levels \u0026 Crystal Boarder":"04"}},"Play As":{"note":"","data":["800200E7 00??"],"options":{"Akari Hayami":"02","Dion Blaster":"00","Gold Boarder":"06","Kensuke Kimachi":"01","Panda Boarder":"07","Ricky Winterborn":"03","Rob Haywood":"04","Silver Boarder":"05"}},"Stop Timer\\Contest\\Air Make":{"note":"","data":["80319CCA 00C5"],"options":null},"Stop Timer\\Contest\\Crystal Lake":{"note":"","data":["8029C1EA 00C5"],"options":null},"Stop Timer\\Contest\\Crystal Peak":{"note":"","data":["802A89AA 00C5"],"options":null},"Stop Timer\\Contest\\Golden Forest":{"note":"","data":["802A6E4A 00C5"],"options":null},"Stop Timer\\Contest\\Half Pipe":{"note":"","data":["802F530A 00C5"],"options":null},"Stop Timer\\Time Attack\\Air Make":{"note":"","data":["8031AB5A 0000"],"options":null},"Stop Timer\\Time Attack\\Crystal Lake":{"note":"","data":["802A593A 0000"],"options":null},"Stop Timer\\Time Attack\\Crystal Peak":{"note":"","data":["802B2CDA 0000"],"options":null},"Stop Timer\\Time Attack\\Deadly Fall":{"note":"","data":["802CF67A 0000"],"options":null},"Stop Timer\\Time Attack\\Dragon Cave":{"note":"","data":["802C148A 0000"],"options":null},"Stop Timer\\Time Attack\\Golden Forrest":{"note":"","data":["802B146A 0000"],"options":null},"Stop Timer\\Time Attack\\Half Pipe":{"note":"","data":["802F649A 0000"],"options":null},"Stop Timer\\Time Attack\\Mountain Village":{"note":"","data":["802CBA6A 0000"],"options":null},"Stop Timer\\Trick Attack\\Air Make":{"note":"","data":["8031ABCA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Crystal Lake":{"note":"","data":["8029F77A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Crystal Peak":{"note":"","data":["802AC9FA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Deadly Fall":{"note":"","data":["802C8F1A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Dragon Cave":{"note":"","data":["802BAE4A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Golden Forrest":{"note":"","data":["802AB06A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Half Pipe":{"note":"","data":["802F650A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Mountain Village":{"note":"","data":["802C51EA 00C5"],"options":null},"Widescreen":{"note":"","data":["810F8FE8 240E","810F8FEA 01AB"],"options":null}},"1FC21532-0B6466D4-C:45":{"Gold Tickets\\Player 1":{"note":"","data":["D00BE8C1 0000","8111F7F8 03E7"],"options":null},"Gold Tickets\\Player 2":{"note":"","data":["D00BE8C1 0001","8111F7F8 03E7"],"options":null},"Gold Tickets\\Player 3":{"note":"","data":["D00BE8C1 0002","8111F7F8 03E7"],"options":null},"Gold Tickets\\Player 4":{"note":"","data":["D00BE8C1 0003","8111F7F8 03E7"],"options":null},"Red Tickets\\Player 1":{"note":"","data":["D00BE8C1 0000","8111F7F6 03E7"],"options":null},"Red Tickets\\Player 2":{"note":"","data":["D00BE8C1 0001","8111F7F6 03E7"],"options":null},"Red Tickets\\Player 3":{"note":"","data":["D00BE8C1 0002","8111F7F6 03E7"],"options":null},"Red Tickets\\Player 4":{"note":"","data":["D00BE8C1 0003","8111F7F6 03E7"],"options":null}},"202A8EE4-83F88B89-C:50":{"Always Low Temp\\Player One":{"note":"","data":["810E4668 0000","810E466A 0000"],"options":null},"Always Low Temp\\Player Two":{"note":"","data":["810E4E48 0000","810E4E4A 0000"],"options":null},"In Game Cheat Select\\1":{"note":"","data":["800CDA4A 00??"],"options":{"All stunts":"02","Beat this":"10","Developers team photo":"08","Invincible mode":"04","Small head mode":"20","Transparent riders":"01"}},"In Game Cheat Select\\2":{"note":"","data":["800CDA4B 00??"],"options":{"Big head mode":"01","Debug mode":"04","Down hill mode":"08","Invisible riders":"20","Mirror mode":"02","Night mode":"40","Odd colour mode":"80","Stunt bonus":"10"}},"In-Game cheat modifer":{"note":"","data":["810CDA4A ????"],"options":{"All stunts":"0200","Beat this":"1000","Big head mode":"0001","Debug mode":"0004","Developers team photo":"0800","Down hill mode":"0008","Invincible mode":"0400","Invisible riders":"0020","Mirror mode":"0002","Night mode":"0040","Odd colour mode":"0080","Small head mode":"2000","Stunt bonus":"0010","Transparent riders":"0100"}},"Infinite Time":{"note":"","data":["810F0E36 1770"],"options":null},"Max Score Stunt Mode\\Player One":{"note":"","data":["810E43E8 0098","810E43EA 967F"],"options":null},"Max Score Stunt Mode\\Player Two":{"note":"","data":["810E4BC8 0098","810E4BCA 967F"],"options":null},"Start On Lap":{"note":"","data":["D00E4681 0000","800E4681 00??"],"options":{"Lap 1":"01","Lap 2":"02","Lap 3":"03","Lap 4":"04"}},"Unlock Original Excitebike":{"note":"Press L+R at track selection to Access Soccer,Hill Climb \u0026 Excite 3D","data":["D00F6605 0030","810F2420 FF07"],"options":null}},"204489C1-1286CF2B-C:45":{"Infinite\\99 Dark Knight Discus":{"note":"","data":["802086FE 0063"],"options":null},"Infinite\\99 Lives":{"note":"","data":["802086F1 0063"],"options":null},"Infinite\\Health":{"note":"","data":["802086F2 0064"],"options":null},"Infinite\\Max Charge \u0026 Magnetic Nun Chaku":{"note":"","data":["802086B9 0064"],"options":null},"Press F9 to Have\\Key":{"note":"","data":["88208524 0020"],"options":null},"Suit Select":{"note":"","data":["802086F4 00??"],"options":{"Defensive":"02","Nimble":"03","Offensive":"01","Standard":"00"}},"Weapon Select":{"note":"","data":["802086F7 00??"],"options":{"Dark Knight Discus":"01","Dark Knight Staff":"02","Magnetic Nun Chaku":"03","Standard":"00"}}},"204EC022-B119D185-C:45":{"Andrew Reynolds\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDBE 00FF"],"options":null},"Andrew Reynolds\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDC0 00FF"],"options":null},"Andrew Reynolds\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDBB 00FF"],"options":null},"Andrew Reynolds\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDB8 00FF"],"options":null},"Bob Burnquist\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD5A 00FF"],"options":null},"Bob Burnquist\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD5C 00FF"],"options":null},"Bob Burnquist\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD57 00FF"],"options":null},"Bob Burnquist\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD54 00FF"],"options":null},"Bucky Lasek\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD82 00FF"],"options":null},"Bucky Lasek\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD84 00FF"],"options":null},"Bucky Lasek\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD7F 00FF"],"options":null},"Bucky Lasek\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD7C 00FF"],"options":null},"Chad Muska\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD96 00FF"],"options":null},"Chad Muska\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD98 00FF"],"options":null},"Chad Muska\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD93 00FF"],"options":null},"Chad Muska\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD90 00FF"],"options":null},"Elissa Steamer\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDFA 00FF"],"options":null},"Elissa Steamer\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDFC 00FF"],"options":null},"Elissa Steamer\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDF7 00FF"],"options":null},"Elissa Steamer\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDF4 00FF"],"options":null},"Geoff Rowley\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD6E 00FF"],"options":null},"Geoff Rowley\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD70 00FF"],"options":null},"Geoff Rowley\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD6B 00FF"],"options":null},"Geoff Rowley\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD68 00FF"],"options":null},"Have All Tracks":{"note":"","data":["813D6E42 FFFF","813D4FFA FFFF","813D5D62 FFFF","813D84E2 FFFF","813D4FCA FFFF","813D5F2A FFFF","813D8C52 FFFF","813D5602 FFFF","813D6D3A FFFF"],"options":null},"Jamie Thomas\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDE6 00FF"],"options":null},"Jamie Thomas\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDE8 00FF"],"options":null},"Jamie Thomas\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDE3 00FF"],"options":null},"Jamie Thomas\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDE0 00FF"],"options":null},"Kareem Campbell\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDAA 00FF"],"options":null},"Kareem Campbell\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDAC 00FF"],"options":null},"Kareem Campbell\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDA7 00FF"],"options":null},"Kareem Campbell\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDA4 00FF"],"options":null},"Officer Dick\\Have All\\Gold Medal\\Burnside":{"note":"","data":["800DDE0E 00FF"],"options":null},"Officer Dick\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDE10 00FF"],"options":null},"Officer Dick\\Have All\\Gold Medal\\Skate Park":{"note":"","data":["800DDE0B 00FF"],"options":null},"Officer Dick\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDE08 00FF"],"options":null},"Player 1\\Have\\ Perfect Balance":{"note":"","data":["800DDB83 0001"],"options":null},"Player 1\\Max Points\\Burnside":{"note":"","data":["813D8C52 FFFF"],"options":null},"Player 1\\Max Points\\Downhill Jam":{"note":"","data":["813D5F2A FFFF"],"options":null},"Player 1\\Max Points\\Downtown Chicago":{"note":"","data":["813D4FCA FFFF"],"options":null},"Player 1\\Max Points\\Roswell New Mexico":{"note":"","data":["813D6D3A FFFF"],"options":null},"Player 1\\Max Points\\Street":{"note":"","data":["813D5602 FFFF"],"options":null},"Player 1\\Max Points\\The Mall":{"note":"","data":["813D5D62 FFFF"],"options":null},"Player 1\\Max Points\\The School":{"note":"","data":["813D4FFA FFFF"],"options":null},"Player 1\\Max Points\\The Skate Park":{"note":"","data":["813D84E2 FFFF"],"options":null},"Player 1\\Max Points\\The Warehouse":{"note":"","data":["813D6E42 FFFF"],"options":null},"Player 1\\Max Trick Score\\Burnside":{"note":"","data":["813D8C52 FFFF"],"options":null},"Player 1\\Max Trick Score\\Downhill Jam":{"note":"","data":["813D5F2A FFFF"],"options":null},"Player 1\\Max Trick Score\\Downtown":{"note":"","data":["813D4FCA FFFF"],"options":null},"Player 1\\Max Trick Score\\Roswell":{"note":"","data":["813D6D3A FFFF"],"options":null},"Player 1\\Max Trick Score\\The Mall":{"note":"","data":["813D5D62 FFFF"],"options":null},"Player 1\\Max Trick Score\\The School":{"note":"","data":["813D4FFA FFFF"],"options":null},"Player 1\\Max Trick Score\\The Skate Park Course":{"note":"","data":["813D84E2 FFFF"],"options":null},"Player 1\\Max Trick Score\\The Streets":{"note":"","data":["813D5602 FFFF"],"options":null},"Player 1\\Play As":{"note":"","data":["800D03D4 00??"],"options":{"Andrew Reynolds":"06","Bob Burnquist":"01","Bucky Lasek":"03","Chad Muska":"04","Elissa Steamer":"09","Geoff Rowley":"02","Jamie Thomas":"08","Kareem Campbell":"05","Officer Dick":"0A","Rune Glifberg":"07","Tony Hawk":"00"}},"Player 1\\Super Max\\Air":{"note":"","data":["800D561E FFFF"],"options":null},"Player 1\\Super Max\\Balance":{"note":"","data":["800D561F FFFF"],"options":null},"Player 1\\Super Max\\Ollie":{"note":"","data":["800D561C FFFF"],"options":null},"Player 1\\Super Max\\Speed":{"note":"","data":["800D561D FFFF"],"options":null},"Player 1\\Super Max\\Turning":{"note":"","data":["800D5620 FFFF"],"options":null},"Player 1\\Tony Hawk\\Full Special All Levels":{"note":"","data":["D00C0223 0000","813D6576 02EE","D00C0223 0001","813D4728 02EE","D00C0223 0002","813D5496 02EE","D00C0223 0003","813D7C16 02EE","D00C0223 0004","813D467E 02EE","D00C0223 0005","813D565E 02EE","D00C0223 0006","813D8386 02EE","D00C0223 0007","813D4D36 02EE","D00C0223 0008","813D646E 02EE"],"options":null},"Player 2\\Play As":{"note":"","data":["800D03D5 00??"],"options":{"Andrew Reynolds":"06","Bob Burnquist":"01","Bucky Lasek":"03","Chad Muska":"04","Elissa Steamer":"09","Geoff Rowley":"02","Jamie Thomas":"08","Kareem Campbell":"05","Officer Dick":"0A","Rune Glifberg":"07","Tony Hawk":"00"}},"Player 2\\Super Max\\Air":{"note":"","data":["800D5623 FFFF"],"options":null},"Player 2\\Super Max\\Balance":{"note":"","data":["800D5624 FFFF"],"options":null},"Player 2\\Super Max\\Ollie":{"note":"","data":["800D5621 FFFF"],"options":null},"Player 2\\Super Max\\Speed":{"note":"","data":["800D5622 FFFF"],"options":null},"Player 2\\Super Max\\Turning":{"note":"","data":["800D5625 FFFF"],"options":null},"Rune Glifberg\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDDD2 00FF"],"options":null},"Rune Glifberg\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDDD4 00FF"],"options":null},"Rune Glifberg\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDDCF 00FF"],"options":null},"Rune Glifberg\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDDCC 00FF"],"options":null},"Tony Hawk\\Have All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DDD46 00FF"],"options":null},"Tony Hawk\\Have All\\Gold Medal\\Roswell":{"note":"","data":["800DDD48 00FF"],"options":null},"Tony Hawk\\Have All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DDD43 00FF"],"options":null},"Tony Hawk\\Have All\\Tapes":{"note":"","data":["50000901 0000","800DDD40 00FF"],"options":null}},"20B53662-7B61899F-C:50":{"Have Cheats Menu":{"note":"","data":["800D77D6 01FF"],"options":null},"Infinite Balls":{"note":"","data":["802FD21F 0064"],"options":null},"Infinite Credits":{"note":"","data":["802FD215 0064"],"options":null},"Infinite Energy":{"note":"","data":["802FD209 0064"],"options":null},"Infinite Sponge Darts":{"note":"","data":["802FD223 0064"],"options":null},"Infinite Suckers":{"note":"","data":["802FD222 0064"],"options":null},"Start with 9999 Monster Score":{"note":"","data":["812FD20E 270F"],"options":null}},"214CAD94-BE1A3B24-C:45":{"Gun 4-Way Shot":{"note":"","data":["80129723 0004"],"options":null},"Infinite Fuel":{"note":"","data":["81129726 FFFF"],"options":null},"Infinite Shield":{"note":"","data":["811296C8 03E8"],"options":null},"Infinite Weapon\\1st Position":{"note":"","data":["8012943B 0063"],"options":null},"Infinite Weapon\\2nd Position":{"note":"","data":["8012943F 0063"],"options":null},"Infinite Weapon\\3rd Position":{"note":"","data":["80129443 0063"],"options":null},"Infinite Weapon\\4th Position":{"note":"","data":["80129447 0063"],"options":null},"Infinite Weapon\\5th Position":{"note":"","data":["8012944B 0063"],"options":null},"Max Score":{"note":"","data":["81129426 FFFF"],"options":null},"Score Attack Mode":{"note":"","data":["81129472 0001"],"options":null},"Stage Select On":{"note":"","data":["81129476 0001"],"options":null},"Weapon Modifier\\1st Position":{"note":"Must to be used with the Infinite Weapon Codes","data":["80129439 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\2nd Position":{"note":"Must to be used with the Infinite Weapon Codes","data":["8012943D 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\3rd Position":{"note":"Must to be used with the Infinite Weapon Codes","data":["801294F1 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\Gun Weapon":{"note":"","data":["80129723 00??"],"options":{"2-Way Shot":"02","3-Way Shot":"03","4-Way Shot":"04","No Weapon":"00","Normal Shot":"01"}}},"2153143F-992D6351-C:45":{"Press L + C-Down For Cheat Screen":{"note":"","data":["D01101B3 0024","8103BFE0 0000","D01101B3 0024","8103BFE2 0000"],"options":null}},"21548CA9-9059F32C-C:00":{"Everything Unlocked":{"note":"Have All Grand Prix Levels Open And Completed","data":["8008270F 00FF","8108277A 0FFF"],"options":null},"Regional Class\\Max Grip":{"note":"Do not enable until you are at the Region Class Selection menu. Disbale before restarting.","data":["800B2529 003D","800BC529 003D","800C6529 003D"],"options":null},"Regional Class\\Max Motor":{"note":"Do not enable until you are at the Region Class Selection menu. Disbale before restarting.","data":["800C6481 003D","800BC481 003D","800B2481 003D"],"options":null},"Regional Class\\Max Turbo":{"note":"Do not enable until you are at the Region Class Selection menu. Disbale before restarting.","data":["800B25D1 003D","800BC5D1 003D","800C65D1 003D"],"options":null},"World Challenge\\Max Grip":{"note":"Do not enable until you are at the World Challenge Selection menu. Disbale before restarting.","data":["800B28B1 003D","800BC8B1 003D","800C68B1 003D"],"options":null},"World Challenge\\Max Motor":{"note":"Do not enable until you are at the World Challenge Selection menu. Disbale before restarting.","data":["800B2809 003D","800BC809 003D","800C6809 003D"],"options":null},"World Challenge\\Max Turbo":{"note":"Do not enable until you are at the World Challenge Selection menu. Disbale before restarting.","data":["800B2959 003D","800BC959 003D","800C6959 003D"],"options":null},"World Class\\Max Grip":{"note":"Do not enable until you are at the World Class Selection menu. Disbale before restarting.","data":["800B2861 003D","800BC861 003D","800C6861 003D"],"options":null},"World Class\\Max Motor":{"note":"Do not enable until you are at the World Class Selection menu. Disbale before restarting.","data":["800B27B9 003D","800BC7B9 003D","800C67B9 003D"],"options":null},"World Class\\Max Turbo":{"note":"Do not enable until you are at the World Class Selection menu. Disbale before restarting.","data":["800B2909 003D","800BC909 003D","800C6909 003D"],"options":null},"[Player 1]\\Infinite\\Lives":{"note":"","data":["800827BB 0006"],"options":null},"[Player 1]\\Infinite\\Turbo":{"note":"","data":["80195CF3 00FF"],"options":null},"[Player 1]\\Press R to Come In 1st":{"note":"Do not press this until you have finished the race and came in at whatever position. Then Press R Button to then Come In 1st","data":["D0093671 0010","801460A3 0000"],"options":null}},"219191C1-33183C61-C:50":{"1-Hit Death":{"note":"","data":["81137E7C 4136"],"options":null},"Extra Shields":{"note":"","data":["81137E7C 4316"],"options":null},"Have\\99\\Bonus Collected":{"note":"","data":["80130B87 0063"],"options":null},"Have\\99\\Kills":{"note":"","data":["80130B85 0063"],"options":null},"Have\\99\\Saves":{"note":"","data":["80130B86 0063"],"options":null},"Have\\Medals For\\Ambush at Mos Eisley":{"note":"","data":["88130B1C 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Assault on Kile II":{"note":"","data":["88130B23 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Battle Above Taloraan":{"note":"","data":["88130B26 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Battle of Hoth":{"note":"","data":["88130B2E 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Beggar's Canyon":{"note":"","data":["88130B2C 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Blockade on Chandrila":{"note":"","data":["88130B28 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Defection At Corellia":{"note":"","data":["88130B1F 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Escape From Fest":{"note":"","data":["88130B27 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Imperial Construction Yard":{"note":"","data":["88130B22 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Liberation V":{"note":"","data":["88130B20 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Moff Seerdon's Revenge":{"note":"","data":["88130B2A 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Prisons on Kessel":{"note":"","data":["88130B25 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Raid on Sullust":{"note":"","data":["88130B29 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Rendezvou on Bankhesh":{"note":"","data":["88130B1D 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\Rescue on Kessel":{"note":"","data":["88130B24 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\The Battle of Calamari":{"note":"","data":["88130B2B 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\The Death Star Trench Run":{"note":"","data":["88130B2D 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\The Jade Moon":{"note":"","data":["88130B21 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Have\\Medals For\\The Search For The Noonnah":{"note":"","data":["88130B1E 00??"],"options":{"Bronze Medal":"01","Gold Medal":"03","None":"00","Silver Medal":"02"}},"Infinite\\Infinite Health":{"note":"","data":["81137E7C 4316"],"options":null},"Infinite\\Infinite Lives":{"note":"","data":["80130B10 0008"],"options":null},"Infinite\\Infinite Secondary Weapons":{"note":"","data":["8010CA32 0008"],"options":null}},"2256ECDA-71AB1B9C-C:50":{"Access All Levels":{"note":"","data":["8008AA56 0001","8008AD3A 0001","8008A862 0001","8008A876 0001","8008A88A 0001","8008A89E 0001","8008A8B2 0001","8008A8C6 0011","8008A8DA 0021","8008AD4E 0001","8008A916 0011","8008A92A 0041","8008A93E 0021","8008A966 0001","8008A98E 0001","8008AD62 0001","8008A9DE 0001","8008A9F2 0011","8008AA06 0021","8008AD76 0001","8008A7D6 0001","8008A7EA 0001","8008A812 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81093F50 0063","81093F52 0063","81093F54 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A9097 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810864C2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810864C4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80094105 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A90B5 00??","800A90C5 00??","800A90D5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"22E9623F-B60E52AD-C:50":{"1 Win to Win\\Player 1":{"note":"","data":["D020A84F 0000","8020A84F 0001"],"options":null},"1 Win to Win\\Player 2":{"note":"","data":["D020A84F 0000","8020A84F 0010"],"options":null},"Infinite\\Health\\Player 1":{"note":"","data":["80209D81 00C8"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["81209780 0190"],"options":null},"Infinite\\Money":{"note":"","data":["8121106C 2704"],"options":null},"Infinite\\Special\\Player 1":{"note":"","data":["81209484 0190"],"options":null},"Infinite\\Special\\Player 2":{"note":"","data":["8120B1B0 0190"],"options":null}},"2337D8E8-6B8E7CEC-C:45":{"Infinite\\Eggs Once You Get One":{"note":"This is for All Yoshis All levels","data":["8103E89C 2400"],"options":null},"Infinite\\Health":{"note":"This is for All Yoshis All levels","data":["8102B780 2400"],"options":null},"Infinite\\Lives":{"note":"This is for All Yoshis All levels","data":["800F8DF7 00FF"],"options":null}},"23749578-80DC58FD-C:45":{"1 Lap to Race":{"note":"","data":["800438B3 0009","D021FBAB 0000","8021FBAB 0008","D022359B 0000","8022359B 0008"],"options":null},"Max Gear Ratios":{"note":"","data":["810C9E90 7F1E","810C9E82 707F"],"options":null},"Total Laps to Race Modifier":{"note":"","data":["800438B3 00??"],"options":{"1 lap":"01","2 lap":"02","3 lap":"03","4 lap":"04","5 lap":"05","6 lap":"06","7 lap":"07","8 lap":"08","9 lap":"09"}}},"237E73B4-D63B6B37-C:45":{"Flashing Invincible":{"note":"This cheat Makes you Flash But you cant be harmed,Once out of danger Turn the cheat off to stop the flashing.also do not put this on if you have already been hurt or you will stay on the floor.","data":["800AD767 000A"],"options":null},"Have\\Fire Bombs":{"note":"","data":["800AD73B 0003"],"options":null},"Have\\Kick Bombs Anytime":{"note":"","data":["800AC743 0003"],"options":null},"Have\\Max Fire Level":{"note":"","data":["800AD733 0003"],"options":null},"Infinite\\Bombs":{"note":"","data":["800AD758 0003"],"options":null},"Infinite\\Continue Time":{"note":"","data":["810B5CD6 0090"],"options":null},"Infinite\\Health":{"note":"","data":["800AD75F 0005"],"options":null},"Infinite\\Money":{"note":"","data":["810ABD52 FFFF"],"options":null}},"2388984C-DA7B3CC5-C:45":{"Level Select\\Proving Ground-Tightrope":{"note":"Do Not use this with Level Select The Pit-Starlight. Only use One Level Select Option At A Time","data":["8014BD9F 00??"],"options":{"Basic Training":"01","Bomb Shelter":"0B","Bottleneck":"10","Boxed Set":"06","Cathedral":"04","Crossroads":"02","Dire Straight":"07","Earth Temple":"0D","Fall Out":"05","Fire Temple":"0E","Grim Retreat":"03","Mystic":"0F","Prey":"08","Proving Grounds":"00","Tempered":"0C","Tightrope":"11","Warehouse":"09","Water Temple":"0A"}},"Level Select\\The Pit-Starlight":{"note":"Do Not use this with Level Select Proving Ground-Tightrope. Only use One Level Select Option At A Time","data":["8014BD9F 00??"],"options":{"Ampatheater":"16","Breakdown":"19","Bunker":"15","Courtyard":"22","Crypts":"18","Defcon 5":"1F","Fathom":"1D","Fire Walker":"17","Hopeless":"1B","Leap Of Faith":"13","Matrix":"1C","Retaliation":"1A","Spirit Temple":"20","Starlight":"23","Stronghold":"21","The Pedestal":"1E","The Pit":"12","Wicked Dance":"14"}},"Player 1\\Have All\\Medals":{"note":"","data":["810FCB4A FFFF","810FCB4C FFFF","810FCB4E FFFF","800FCB50 0003"],"options":null},"Player 1\\Have All\\Mini Game Icons":{"note":"","data":["800FCB17 0024"],"options":null},"Player 1\\Infinite Ammo":{"note":"","data":["80336535 0063","80336537 0063","80336539 0063","80692B95 0063","80692B97 0063","80692B99 0063","80692B9B 0063","80692B9D 0063","80692B9F 0063","80692BA1 0063"],"options":null},"Player 1\\Infinite\\Cerebral Bores":{"note":"","data":["8033653B 00FF"],"options":null},"Player 1\\Infinite\\Health":{"note":"","data":["81336526 6400","80692B86 0064"],"options":null},"Player 1\\Infinite\\Metal Claws":{"note":"","data":["80336541 00FF"],"options":null},"Player 1\\Infinite\\Proximity Mines":{"note":"","data":["8033653D 00FF"],"options":null},"Player 1\\Infinite\\Sentry Guns":{"note":"","data":["8033653F 00FF"],"options":null},"Player 1\\Infinite\\Time":{"note":"","data":["811407F4 47AF","811407F6 C4B1"],"options":null},"Player 1\\Play As":{"note":"","data":["80140358 00??"],"options":{"Adon":"05","Bastile":"0B","Blind One":"08","Death Guard":"0A","Drone":"02","Elite Guard":"07","Fireborn":"03","Juggernaut":"09","Lord Of The Dead":"06","Mantid":"01","Mites":"12","Monkey":"13","Pur-Lin":"0F","Raptor":"11","Soldier":"04","Symbiont":"10","Syra":"0C","Tail Set":"0E","Turok":"00"}},"Player 1\\Start With Weapon":{"note":"","data":["803366B0 00??"],"options":{"Assault Rifle":"05","Boomerang":"01","Cerebral Bore":"12","Chest Burster":"0F","Emaciator":"0D","Flaregun":"09","Freeze Gun":"08","Grenade Launcher":"0A","Inflator":"0E","Iron Claw":"14","Mag 60":"03","Mini Gun":"06","Mite Bite":"11","Napalm Gel":"0C","PFM Mine":"13","Plasma Rifle":"07","Raptor Claw":"10","Scorpion Launcher":"0B","Sentry Turret":"15","Shotgun":"04","Tek Crossbow":"02","Warhammer":"00"}}},"2483F22B-136E025E-C:55":{"999 Kills":{"note":"","data":["80163B03 00FF"],"options":null},"Have All Medals":{"note":"For Expert \u0026 Normal Modes","data":["50000802 0000","8017A9D9 7777"],"options":null},"Infinite\\Armor\\Falco":{"note":"","data":["80174187 00FF"],"options":null},"Infinite\\Armor\\Peppy":{"note":"","data":["8017418F 00FF"],"options":null},"Infinite\\Armor\\Slippy":{"note":"","data":["8017418B 00FF"],"options":null},"Infinite\\Dual Blue Lasers":{"note":"","data":["80163C13 0002"],"options":null},"Infinite\\Energy":{"note":"","data":["80141587 00FF","8013E6A7 00FF"],"options":null},"Infinite\\Hyper Laser":{"note":"","data":["80163B13 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["80163B09 0063"],"options":null},"Level Select":{"note":"","data":["8017A29F 00??"],"options":{"Aquas":"0D","Area 6":"03","Bolse":"11","Corneria":"00","Corneria (Multi)":"14","Fortuna":"0E","Glitch":"04","Katina":"10","Macbeth":"0B","Meteo":"01","Sector X":"02","Sector Y":"05","Sector Z":"12","Solar":"07","Titania":"0C","Training Mode Level":"0A","Venom 1":"06","Venom 2":"09","Venom With Starwolf":"13","Zoness":"08"}},"Loads O' Hits":{"note":"","data":["80163B03 00FF"],"options":null},"Unlimited\\Boost":{"note":"","data":["8113E6FC 0000","8113E6FE 0000","811415DC 0000","811415DE 0000","8013E7FD 0000","801416DD 0000"],"options":null},"Unlimited\\Smart Bombs":{"note":"","data":["80179E0B 0063"],"options":null}},"2500267E-2A7EC3CE-C:45":{"All Modes\\Always Have 1st Place":{"note":"","data":["81056444 0001"],"options":null},"All Modes\\Infinite Time":{"note":"","data":["811269CA 0700"],"options":null},"All Modes\\Press R Button For Turbo":{"note":"","data":["D103E1EA 0010","8105641A 0800"],"options":null},"Grand Prix Mode\\2 Tier Cars":{"note":"","data":["80119BB0 0039"],"options":null},"Grand Prix Mode\\All Cars Have Perfect Stats":{"note":"","data":["50008002 0000","8102F314 05DC"],"options":null},"Grand Prix Mode\\Car Modifier":{"note":"","data":["8113CF5A 00??"],"options":{"00-Agent":"19","13th Racing Kid":"0E","Age Solo Supernova":"12","Assoluto Infinito":"11","Atomic Purple":"13","Blinky":"1B","Caddy Car":"1E","Crazy Canuck":"1D","Dig Racing Team":"0C","Digipen Racing":"10","Extreme Green":"14","F/A Racing":"00","Galaga RT Carrot":"07","Galaga RT Prid's":"06","Galaga' 88":"1A","Lizard Nightmare":"16","Micro Mouse Mappy":"0D","PAC Racing":"02","Pooka":"1F","RT Blue Mappy":"05","RT Bosconian":"08","RT Nebulasray":"09","RT Pink Mappy":"04","RT Ryukyu":"01","RT Solvalou":"03","RT Xevious Green":"0B","RT Xevious Red":"0A","Red Shirt Rage":"1C","Screamin' Eagle":"17","Terrazi Terrific":"15","Ultra 64 (Full Stats)":"18","White Angel":"0F"}},"Grand Prix Mode\\Enlarge Cars":{"note":"","data":["81119758 3FC0","811197AC 3FC0","81119800 3FC0"],"options":null},"Grand Prix Mode\\Laps to Race":{"note":"","data":["8111B32E ????"],"options":{"lap":"0101","laps":"0909"}},"Grand Prix Mode\\Microscopic Cars":{"note":"","data":["80119758 003D","801197AC 003D","80119800 003D"],"options":null},"Grand Prix Mode\\Press GS For Overhead View":{"note":"","data":["8811AB0F 0002"],"options":null},"Grand Prix Mode\\Shrink Cars":{"note":"","data":["80119758 003E","801197AC 003E","80119800 003E"],"options":null},"Grand Prix Mode\\Track Modifier":{"note":"","data":["8113CF6A 00??"],"options":{"Renegade Expert":"08","Renegade Intermediate":"05","Renegade Novice":"02","Revolution Expert":"07","Revolution Intermediate":"04","Revolution Novice":"01","Ridge Racer Expert":"06","Ridge Racer Extreme":"09","Ridge Racer Intermediate":"03","Ridge Racer Novice":"00"}},"Grand Prix Mode\\Unlock\\All Cars":{"note":"","data":["8102F19C FFFF","8102F19E FFFF"],"options":null},"Grand Prix Mode\\Unlock\\All Engine Classes All Levels":{"note":"","data":["50001E08 0000","8102FAB0 0004","50001E08 0000","8102FAB2 0403"],"options":null},"Grand Prix Mode\\Unlock\\All Tracks \u0026 Trophies":{"note":"","data":["81043530 FFFF","81043532 FFFF"],"options":null}},"255018DF-57D6AE3A-C:45":{"Access All In-Game Cheats":{"note":"Pause Gameplay To Access","data":["81152946 000F","81152956 FFFF"],"options":null},"Access All Navigation Cards":{"note":"","data":["8015298B 0005"],"options":null},"Access Secret Worlds":{"note":"","data":["81152946 0064"],"options":null},"Infinite Lives":{"note":"","data":["8015299F 0063"],"options":null},"Max \u0026 Total Gold":{"note":"","data":["8015293B 0063","80152AFF 0063"],"options":null}},"2577C7D4-D18FAAAE-C:50":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118D920 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118D922 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118D924 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118D926 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["50000402 0000","8018ED70 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["80165FBD 00??","80165FEA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["8016609D 00??","801660CA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["8016617D 00??","801661AA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["8016625D 00??","8016628A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["8016633D 00??","8016636A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["8016641D 00??","8016644A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818EE4F 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F6975 0020","810F6A28 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F6985 0020","810F7800 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F6995 0020","810F85D8 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F69A5 0020","810F93B0 4000"],"options":null}},"259F7F84-7C9EED26-C:50":{"Infinite\\99 Dark Knight Discus":{"note":"","data":["801D7F4A 0063"],"options":null},"Infinite\\99 Lives":{"note":"","data":["801D7F3E 0064"],"options":null},"Infinite\\Health":{"note":"","data":["801D7F3D 0064"],"options":null},"Infinite\\Max Charge \u0026 Magnetic Nun Chaku":{"note":"","data":["801D7F06 0064"],"options":null},"Press F9 to Have\\Key":{"note":"","data":["881D7D70 0020"],"options":null},"Suit Select":{"note":"","data":["801D7F40 00??"],"options":{"Defensive":"02","Nimble":"03","Offensive":"01","Standard":"00"}},"Weapon Select":{"note":"","data":["801D7F43 00??"],"options":{"Dark Knight Discus":"01","Dark Knight Staff":"02","Magnetic Nun Chuku":"03","Standard":"00"}}},"26035CF8-802B9135-C:45":{"Access All Levels":{"note":"","data":["8008A5C6 0001","8008A5DA 0001","8008A602 0001","8008A652 0001","8008A666 0001","8008A67A 0001","8008A68E 0001","8008A6A2 0001","8008A6B6 0011","8008A6CA 0021","8008A6DE 0001","8008A706 0011","8008A71A 0041","8008A72E 0021","8008A742 0081","8008A756 0001","8008A76A 0081","8008A77E 0001","8008A7A6 0001","8008A7CE 0001","8008A7E2 0011","8008A7F6 0021","8008A846 0001","8008AB2A 0001","8008AB3E 0001","8008AB52 0001","8008AB66 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81093D40 0063","81093D42 0063","81093D44 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A8EA7 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810862B2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810862B4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80093EF5 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A8EA5 00??","800A8EB5 00??","800A8EC5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"264D7E5C-18874622-C:45":{"All Levels\\Dash Becomes Shorter \u0026 Wider":{"note":"","data":["800BA025 FFFF"],"options":null},"All Levels\\Infinite\\Lives":{"note":"","data":["800E05CB 0064"],"options":null},"All Levels\\Infinite\\Missiles":{"note":"","data":["800E1265 00FF"],"options":null},"All Levels\\Large Mutant Enemies":{"note":"","data":["800BB62B FFFF"],"options":null},"All Levels\\No Clipping\\Off":{"note":"","data":["81111E67 0001"],"options":null},"All Levels\\No Clipping\\On":{"note":"","data":["81111E67 0000"],"options":null},"All Levels\\See Through\\Everything Except Specific Things":{"note":"","data":["800BC665 FFFF"],"options":null},"All Levels\\See Through\\Some Walls":{"note":"","data":["800BC625 FFFF"],"options":null},"All Levels\\Time Always 0:00:02":{"note":"","data":["810E04E8 4000"],"options":null},"All Levels\\Visibililty\\Maximum":{"note":"","data":["800BA62B FFFF"],"options":null},"All Levels\\Visibililty\\Minimum":{"note":"","data":["800BA66B FFFF"],"options":null},"All Stages\\Infinite Health":{"note":"","data":["81072D0C 2400"],"options":null},"All Stages\\Infinite\\Disruptor Ammo":{"note":"","data":["81073F04 2400"],"options":null},"All Stages\\Infinite\\Flame Ammo":{"note":"","data":["81073720 2400"],"options":null},"All Stages\\Infinite\\Jet Pack":{"note":"","data":["81076AAC 2400","81076C58 2400","81076B48 2400"],"options":null},"All Stages\\Infinite\\Pulse Ammo":{"note":"","data":["81074204 2400"],"options":null},"All Stages\\Infinite\\Seeker Ammo":{"note":"","data":["81073A94 2400"],"options":null},"All Stages\\Infinite\\Stunner Ammo":{"note":"","data":["81073BD4 2400"],"options":null},"All Stages\\Invincible":{"note":"","data":["8107A770 2400"],"options":null},"All Stages\\Lasers Never Overheat":{"note":"","data":["81073948 2400"],"options":null},"All Stages\\Upper Lasers":{"note":"Don't Use With Never Overheat Code","data":["81073944 3C06","81073946 4EFF"],"options":null},"Press GS For Pink Cheat Debug Screen":{"note":"","data":["890D017F 0001"],"options":null}},"2655BB70-667D9925-C:45":{"Have\\All Magic":{"note":"","data":["800CE9C8 0010","800CE9CD 0000","800CE9D7 0001","800CE9E1 0002","800CE9EB 0003","800CE9F5 0005","800CE9FF 0006","800CEA09 0008","800CEA13 0009","800CEA1D 000B","800CEA27 000E","800CEA31 000F","800CEA3B 0010","800CEA45 0011","800CEA4F 000A","800CEA59 000C","800CEA63 000D"],"options":null},"Have\\Magic On Level 4":{"note":"","data":["810C8B5D FFFF","810C8B5E FFFF","810C8B5F FFFF","810C8B60 FFFF","810C8B61 FFFF","810C8B62 FFFF"],"options":null},"Have\\Max Armour Level":{"note":"","data":["800C8B80 0064"],"options":null},"Have\\Max Experience Level":{"note":"","data":["800C8B7C 00FF"],"options":null},"Have\\Max Spirit Level":{"note":"","data":["800C8B84 0064"],"options":null},"Have\\Max Weapon Level":{"note":"","data":["800C8B82 0064"],"options":null},"Have\\Weapons On Max Upgrade":{"note":"","data":["50000408 0000","800C8B2C 0009"],"options":null},"Infinite Air Under Water":{"note":"","data":["800C8A64 0069"],"options":null},"Infinite Max\\999 Lives":{"note":"","data":["810C8B78 03E8"],"options":null},"Infinite Max\\Fire Ammo":{"note":"","data":["800C8B33 0066"],"options":null},"Infinite Max\\Fusion Ammo":{"note":"","data":["800C8B43 0066"],"options":null},"Infinite Max\\Health":{"note":"","data":["800C8959 0066"],"options":null},"Infinite Max\\Ionic Ammo":{"note":"","data":["800C8B3B 0066"],"options":null},"Infinite Max\\Light Ammo":{"note":"","data":["800C8B2B 0066"],"options":null},"Infinite Max\\Mana":{"note":"","data":["800C8B7F 0066"],"options":null},"Matts":{"note":"","data":["D00C8A4A 0080","810C8963 0100"],"options":null},"Play As Select":{"note":"","data":["800FCD45 00??"],"options":{"Ike Hawkings (Corporal)":"00","Julia Chase (Cartographer)":"02","Karma (The Ex-Deviant)":"03","Max Havok (Chief Enginer)":"04","Mr Bodybolt (7th Passenger)":"06","Solaar (Archbishop)":"05","Sophia Hawkings (Stowaway)":"01"}},"Press A For Bionic Jump":{"note":"This will make you jump to a great height","data":["D00C8A4A 0080","810C8968 ????"],"options":{"Max Jump":"0800","Medium Jump":"0250"}}},"26809B20-39A516A4-C:4A":{"Access All Boards \u0026 Characters":{"note":"","data":["800500C1 000C"],"options":null},"All Street Work Levels Unlocked":{"note":"","data":["50007801 0000","80050170 00??"],"options":{"Courses unlocked":"01","Courses unlocked with A rank":"05","Courses unlocked with B rank":"04","Courses unlocked with C rank":"03","Courses unlocked with S rank":"06"}},"Class Score Select":{"note":"","data":["8016609E 00??"],"options":{"Class A":"64","Class B":"40","Class C":"20","Class S":"FF"}},"Coin Perfect Select":{"note":"this is for Coin Mode to get Perfect Coin Collection Score straight away when you enter the level","data":["801660B3 00??"],"options":{"Giant House Level 1":"6E","Giant House Level 2":"77","Giant House Level 3":"72","Green Park Level 1":"14","Green park Level 2":"1A","Green park Level 3":"2B","Lost Forest Level 1":"4A","Lost Forest Level 2":"59","Lost Forest Level 3":"80","Snow Festival 64 Levels 1 2 \u0026 3":"7D","Sunset Island Level 1":"6F","Sunset Island Level 2":"74","Sunset Island Level 3":"81"}},"Infinite Time\\Attack Time Time 000000":{"note":"","data":["811137EA 0000"],"options":null},"Infinite Time\\Street Work \u0026 Coin":{"note":"","data":["801137E9 0028"],"options":null},"Infinite Time\\Time Attack":{"note":"","data":["801137EB 0000"],"options":null},"Infinite Turbo\\Player 1":{"note":"","data":["80166019 0009"],"options":null},"Infinite Turbo\\Player2":{"note":"","data":["80167991 0009"],"options":null},"Maxed Out Turbo Bar":{"note":"","data":["811656E8 429F","80166017 0051"],"options":null},"Options\\Camera Type Modifier":{"note":"","data":["810500A6 00??"],"options":{"Roll Off Far":"05","Roll Off Mid":"04","Roll Off Near":"03","Roll On Far":"02","Roll On Mid":"01","Roll On Near":"00"}},"Options\\DJ Function Modifier":{"note":"","data":["810500AC 00??"],"options":{"DJ Function Off":"00","DJ Function On":"01"}},"Options\\Music Modifier":{"note":"","data":["800500A9 00??"],"options":{"BGM Off":"00","BGM On":"FF"}},"Options\\Sound Effects Modifier":{"note":"","data":["810500AA 00??"],"options":{"SE Off":"00","SE On":"FF"}}},"26CD0F54-53EBEFE0-C:4A":{"Have\\Max Car Strength":{"note":"This has Graphical Issues when used.....","data":["A0165C21 00FF"],"options":null},"Have\\Max Car Upgrade":{"note":"","data":["80165BF8 00FF","80165BF9 00FF","80165BFA 00FF","80165BFB 005F"],"options":null},"Have\\Max Gear Box Upgrades":{"note":"","data":["80165C00 00FF","80165C01 00FF","80165C02 007F"],"options":null},"Have\\Max Roof Upgrades":{"note":"","data":["81165C2A FFFF"],"options":null},"Have\\Max Steering Upgrades":{"note":"","data":["80165C1A 006F","80165C1B 000F"],"options":null},"Have\\Max Tyre Tred Upgrades":{"note":"","data":["80165C10 00FF"],"options":null},"Have\\Max Weapons Upgrades":{"note":"","data":["81165C32 FFFF","80165C33 00FF"],"options":null},"Have\\Max Wheel Parts Upgrades":{"note":"","data":["80165C0A 00FF","80165C0B 007F"],"options":null},"Infinite\\Blue Pointa":{"note":"","data":["801F92A7 0009"],"options":null},"Infinite\\Red Weapons Use":{"note":"","data":["801F92A5 0009"],"options":null},"Sound Select\\Music Mod":{"note":"","data":["8014A558 00??"],"options":{"High":"10","Medium":"0A","Off":"00"}},"Sound Select\\SFX Mod":{"note":"","data":["8014A559 00??"],"options":{"High":"10","Medium":"0A","Off":"00"}},"Sound Select\\Sound Mod":{"note":"","data":["8014A55A 00??"],"options":{"Mono":"01","Stereo":"00"}},"{Always First With 1 Lap to Race}":{"note":"","data":["800F7A31 0003"],"options":null},"{Unlocked All Stages}":{"note":"","data":["801672EB 000F"],"options":null},"{Weapon Select}":{"note":"","data":["801F92A1 00??"],"options":{"100 Ton Weight":"0E","Blue Lazer Cloud":"10","Bolt Launcher":"0F","Cannon":"08","Crafy Mine":"0B","Freeze Bombs":"09","Hypno Spinning Birds":"0D","Invincible":"02","Iron Beam Drop":"07","Lightening Cloud Attack":"0A","Nothing":"00","Red Spinning Fish?":"03","Rocket Launcher (Hangs?)":"0C","Smoke Bomb":"05","Turbo Boost":"01","Tyre Buster Tacks":"06","Wind Attack":"04"}}},"277B129D-DD3879FF-C:50":{"Earn Spirits Faster":{"note":"","data":["8007C25D 0000"],"options":null},"Have All Elements":{"note":"","data":["8107C24C 3232","8107C24E 3232"],"options":null},"Makes your HP 999-999":{"note":"","data":["8107C22C 03E7","8107C22E 03E7"],"options":null},"Makes your MP 999-999":{"note":"","data":["8107C230 03E7","8107C232 03E7"],"options":null},"No Random Battles":{"note":"","data":["8108CD1C 0000","8108CD1E 0000"],"options":null},"Set Agility to 999-999":{"note":"","data":["8107C234 03E7"],"options":null},"Set Defence to 999-999":{"note":"","data":["8107C236 03E7"],"options":null}},"27A3831D-B505A533-C:45":{"Always Have Wallet Size":{"note":"","data":["801189DA 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C681D 0010","81119C9E 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["80119821 00FF","80119C97 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,\u0026 then press reset (F1) you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D011BB71 0000","80119D4B 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["8002397C 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801189BE 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801189BF 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801189C0 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801189C1 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1A68 0005","801EE508 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801189DA 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801189DB 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801189D9 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189D4 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811189DC 30FF","811189DE FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801189B0 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801189B6 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801189BC 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["801189B4 0009"],"options":null},"Have\\Bombs":{"note":"","data":["801189AE 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["801189B8 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["801189AD 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["801189AC 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["801189AF 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["801189B2 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["801189B5 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["801189B9 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["801189BA 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["801189B1 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["801189B7 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["801189BD 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["801189BB 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["801189B3 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["801189C7 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["801189E0 0007","801189E1 0007","801189E2 0007","801189E3 0007","801189E4 0007","801189E5 0007","801189E6 0007","801189E7 0007","801189E8 0007","801189E9 0007","801189EA 0007","801189F7 0009","801189F8 0009","801189F9 0009","801189FA 0009","801189FB 0009","80118A01 0009","80118A04 0009","801189FF 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801189CC 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["801189C6 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801189C5 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801189CA 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801189C4 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118968 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118971 0008","80118972 0001","80118974 0001","8011896B 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801189D2 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["81119D04 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["80119D0D 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D011BB11 0020","811D93D0 40CB","D011BB11 0000","811D9BF2 000D","801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119D41 00??"],"options":{"English":"00","French":"02","German":"01"}},"Level Select":{"note":"","data":["D01C6E35 0000","8111893A ????"],"options":{"?":"006C","Below The Phantom Gannon Boss":"000C","Dodongo's Cavern":"0004","Gerudo Training Ground":"0008","Inside Jabu-Jabu's Belly":"0027","Inside the Deku Tree":"0000","Lakeside Laboratory":"0042","Royal Family's Tomb":"002C","Shoadow Temple":"0036","Temple Of Time":"0052","Water Temple":"0010"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["80118A07 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["80118A09 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["81118966 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["81119D00 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L\\For Infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D011BB11 0020","811D9BF2 000D"],"options":null},"Press L\\To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D011BB11 0020","811D93D0 40CB"],"options":null},"Time of Day Modifier":{"note":"","data":["81118944 ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["801189C2 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["801189C3 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["801189A8 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["80118976 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119B5A 0000","81119B5C 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119CCD 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"27C425D0-8C2D99C1-C:50":{"Access All Boards \u0026 Characters":{"note":"","data":["80050071 000C"],"options":null},"All Street Work Levels Unlocked":{"note":"","data":["50007801 0000","80050120 00??"],"options":{"Courses unlocked":"01","Courses unlocked with A rank":"05","Courses unlocked with B rank":"04","Courses unlocked with C rank":"03","Courses unlocked with S rank":"06"}},"Class Score Select":{"note":"","data":["8016609E 00??"],"options":{"Class A":"64","Class B":"40","Class C":"20","Class S":"FF"}},"Coin Perfect Select":{"note":"this is for Coin Mode to get Perfect Coin Collection Score straight away when you enter the level","data":["801660B3 00??"],"options":{"Giant House Level 1":"6E","Giant House Level 2":"77","Giant House Level 3":"72","Green Park Level 1":"14","Green park Level 2":"1A","Green park Level 3":"2B","Lost Forest Level 1":"4A","Lost Forest Level 2":"59","Lost Forest Level 3":"80","Snow Festival 64 Levels 1 2 \u0026 3":"7D","Sunset Island Level 1":"6F","Sunset Island Level 2":"74","Sunset Island Level 3":"81"}},"Infinite Time\\Attack Time Time 000000":{"note":"","data":["8110FA0A 0000"],"options":null},"Infinite Time\\Street Work \u0026 Coin":{"note":"","data":["8010FA09 0028"],"options":null},"Infinite Time\\Time Attack":{"note":"","data":["8010FA0B 0000"],"options":null},"Infinite Turbo\\Player 1":{"note":"","data":["80166019 0009"],"options":null},"Infinite Turbo\\Player2":{"note":"","data":["80167991 0009"],"options":null},"Maxed Out Turbo Bar":{"note":"","data":["811656E8 429F","80166017 0051"],"options":null},"Options\\Camera Type Modifier":{"note":"","data":["81050056 00??"],"options":{"Roll Off Far":"05","Roll Off Mid":"04","Roll Off Near":"03","Roll On Far":"02","Roll On Mid":"01","Roll On Near":"00"}},"Options\\DJ Function Modifier":{"note":"","data":["8105005C 00??"],"options":{"DJ Function Off":"00","DJ Function On":"01"}},"Options\\Music Modifier":{"note":"","data":["80050059 00??"],"options":{"BGM Off":"00","BGM On":"FF"}},"Options\\Sound Effects Modifier":{"note":"","data":["8105005A 00??"],"options":{"SE Off":"00","SE On":"FF"}}},"27C985A8-ED7CE5C6-C:00":{"Buster Parts Slot Select\\Slot 01":{"note":"","data":["8020B293 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 02":{"note":"","data":["8020B294 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 03":{"note":"","data":["8020B295 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 04":{"note":"","data":["8020B296 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 05":{"note":"","data":["8020B297 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 06":{"note":"","data":["8020B298 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 07":{"note":"","data":["8020B299 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 08":{"note":"","data":["8020B29A 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 09":{"note":"","data":["8020B29B 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 10":{"note":"","data":["8020B29C 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 11":{"note":"","data":["8020B29D 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 12":{"note":"","data":["8020B29E 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 13":{"note":"","data":["8020B29F 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 14":{"note":"","data":["8020B2A0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 15":{"note":"","data":["8020B2A1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 16":{"note":"","data":["8020B2A2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 17":{"note":"","data":["8020B2A3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 18":{"note":"","data":["8020B2A4 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 19":{"note":"","data":["8020B2A5 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 20":{"note":"","data":["8020B2A6 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 21":{"note":"","data":["8020B2A7 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 22":{"note":"","data":["8020B2A8 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 23":{"note":"","data":["8020B2A9 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 24":{"note":"","data":["8020B2AA 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 25":{"note":"","data":["8020B2AB 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 26":{"note":"","data":["8020B2AC 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 27":{"note":"","data":["8020B2AD 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 28":{"note":"","data":["8020B2AE 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 29":{"note":"","data":["8020B2AF 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 30":{"note":"","data":["8020B2B0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 31":{"note":"","data":["8020B2B1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 32":{"note":"","data":["8020B2B2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 33":{"note":"","data":["8020B2B3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 01":{"note":"","data":["8020B290 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 02":{"note":"","data":["8020B291 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 03":{"note":"","data":["8020B292 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Freeze Timer at 00:00":{"note":"","data":["811C0E3C 0000","811C0E3E 0000"],"options":null},"Have All\\Normal Items":{"note":"","data":["8120BAE0 FFFF","8120BAE2 FFFF","8120BAE4 FFFF","8120BAE6 FFFF"],"options":null},"Have All\\Special Items":{"note":"","data":["8120BADC FFFF","8120BADE FFFF"],"options":null},"Have All\\Special Weapons":{"note":"These are Equiped With Roll","data":["8120BAD0 FFFF"],"options":null},"Infinite\\Ammo":{"note":"","data":["8120B34A 0080","8120B352 0010","8120B35A 0708","8120B362 0018","8120B36A 0010","8120B372 0708","8120B37A 0020","8120B382 0020","8120B38A 0020","8120B392 0018","8120B39A 012C","8120B3A2 0258"],"options":null},"Infinite\\Health":{"note":"","data":["8120AEAE 0050"],"options":null},"Infinite\\Max Zenny":{"note":"","data":["811C0E4C 0098","811C0E4E 967F"],"options":null},"Rapid Fire":{"note":"","data":["8020B343 0002"],"options":null}},"2829657E-A0621877-C:45":{"Board Select":{"note":"","data":["800ED5C3 00??"],"options":{"Bowser's Magma Mountain":"06","DK's Jungle Adventure":"00","Eternal Star":"07","Explaination Map":"08","Luigi's Engine Room":"04","Mario's Rainbow Castle":"05","Mini Game Stadium":"09","Peach's Birthday Cake":"01","Wario's Battle Canyon":"03","Yoshi's Tropical Island":"02"}},"Lower Left Character\\Coin Options":{"note":"","data":["800F3318 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D635B 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800F331C 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["800F3348 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D639F 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800F334C 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Mini Game Island\\99 Coins":{"note":"","data":["800F37C4 0063"],"options":null},"Mini Game Island\\Always Clear Level":{"note":"","data":["800F32BB 0063"],"options":null},"Mini Game Island\\Press GS For 99 Lives":{"note":"","data":["880F37BB 0063"],"options":null},"Mini Game Island\\World Level Select":{"note":"Select where you want to go then Enable the cheat. as soon as you enter turn the cheat back off so you can move on to the next level and not the same place.","data":["810F32C4 ????"],"options":{"1-1 Coin Block Blitz":"0001","1-2 Coin Block Bash":"0002","1-3 Coin Shower Flower":"0003","1-4 Paddle Battle":"0004","2-1 Memory Match":"0006","2-2 Ground Pound":"0007","2-3 Limbo Dance":"0008","2-4 Magical Mushroom":"0009","2-5 Piranha's Pursuit":"000A","3-1 Crazy Cutter":"0018","3-2 Buried Treasure":"0019","3-3 Desrt Dash":"001A","3-4 Tug O' War":"001B","3-5 Teetering Towers":"001C","9-1 Hammer Drop":"004A","9-2 Slot Car Derby":"004B","9-3 Shell Game":"004C","9-4 Knock Block Tower":"004D","9-5 Platform Peril":"004E","Goal Space - Final Goal":"004F","Save and Return Space 1":"0005","Save and Return Space 2":"001D","Save and Return Space 3":"0029","Save and Return Space 4":"0049","Start Save and Return Space":"0000","World 4-1 to 4-3 - Entrance":"001E","World 4-4 Entrance":"0028","World 6-1 to 6-6 Castle Entrance":"002A","World 8-6 to 8-1 Castle Entrance 2":"0048"}},"Mini Game\\Max 99 Coins":{"note":"","data":["800F3770 0063"],"options":null},"Mini Game\\Unlimited 99 lives":{"note":"","data":["800F3767 0063"],"options":null},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["800F32B8 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D62D3 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800F32BC 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["800F32E8 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D6317 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800F32EC 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Widescreen":{"note":"","data":["8101D5F2 3FE3","8101DA8A 3FE3","D10F8BF6 3FAA","810F8BF6 3FE3","8104BCC0 0801","8104BCC2 7BEA","8104BCC4 C602","8104BCC6 0004","8105EFA8 3C1B","8105EFAA 3FAB","8105EFAC 449B","8105EFAE 0000","8105EFB0 4600","8105EFB2 1082","8105EFB4 8E06","8105EFB6 0008","8105EFB8 0801","8105EFBA 2F32","8105EFBC 4405","8105EFBE 1000","81024D08 0801","81024D0A 7BF0","81024D0C C602","81024D0E 0024","8105EFC0 3C1B","8105EFC2 800E","8105EFC4 8F7B","8105EFC6 811C","8105EFC8 101B","8105EFCA 0004","8105EFCC 2400","8105EFD0 3C1B","8105EFD2 3FAB","8105EFD4 449B","8105EFD6 0000","8105EFD8 4600","8105EFDA 1082","8105EFDC 4405","8105EFDE 1000","8105EFE0 0800","8105EFE2 9344","8105EFE4 8E06","8105EFE6 0028"],"options":null}},"2857674D-CC4337DA-C:45":{"Brightness Modifier":{"note":"","data":["810B96EC ????"],"options":{"Very Dark":"8000","Very Well Lit Up":"7FFF"}},"Ignatius\\Infinite Health\\[Level 01]Chelsea":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802EC6E6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 02]Spitafields":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["803215FE 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 03]Thames Tunnel":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031AB6E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 04]Sewer Snake":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80255E46 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 05]India Docks":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80321546 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 06]Highgate Cemetery":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031B2E6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 07]Hampstead Heath":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["803218B6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 08]Queenhite Docks":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80320C1E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 09]City":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80328256 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 10]Smithfield":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8030B05E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 11]Snowman":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80251496 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 12]Regent's":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80315326 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 13]London Zoo":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031E00E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 14]St. Marilebone":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031CD4E 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 15]Bloomsbury":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8032C4F6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 16]Pimlico":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031F9CE 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 17]Jose Manuel":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8025F196 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 18]Westminister":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802F4ECE 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 19]Westminister II":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802F5DE6 0010"],"options":null},"Ignatius\\Infinite Health\\[Level 20]The Roofs":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802848FE 0010"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000D02 0000","800A4BAF 0009"],"options":null},"Infinite\\Berzerkers":{"note":"","data":["810A4BBE 0009"],"options":null},"Infinite\\Chaos":{"note":"","data":["810A4BC4 0009"],"options":null},"Infinite\\Dynamite":{"note":"","data":["810A4BB6 0009"],"options":null},"Infinite\\Fire Bombs":{"note":"","data":["810A4BBA 0009"],"options":null},"Infinite\\Flash":{"note":"","data":["810A4BB8 0009"],"options":null},"Infinite\\Freeze Spell":{"note":"","data":["810A4BB4 0009"],"options":null},"Infinite\\Gun":{"note":"","data":["810A4BC6 0009"],"options":null},"Infinite\\Healing":{"note":"","data":["810A4BC2 0009"],"options":null},"Infinite\\Lives":{"note":"","data":["800A4B53 0009"],"options":null},"Infinite\\Multi-Gun":{"note":"","data":["810A4BBC 0009"],"options":null},"Infinite\\Proximity Mines":{"note":"","data":["810A4BB0 0009"],"options":null},"Infinite\\Repulsive Smoke":{"note":"","data":["810A4BB2 0009"],"options":null},"Infinite\\Spider Cards":{"note":"","data":["810A4BAE 0009"],"options":null},"Infinite\\Super Healing":{"note":"","data":["810A4BC0 0009"],"options":null},"Lagfix":{"note":"Makes it stay at 60fps more,set CounterFactor/CountPerOp to 1.","data":["810C24B2 041A"],"options":null},"Level Select":{"note":"","data":["D00978B1 0000","810978B0 00??"],"options":{"Bloomsbury":"0E","Chelsea":"00","City":"08","Hampstead Heath":"06","Highgate Cemetery":"05","India Docks":"04","Jose Manuel":"10","London Zoo":"0C","Map":"14","Pimlico":"0F","Queenhite Docks":"07","Regent's":"0B","Sewer Snake":"03","Smithfield":"09","Snowman":"0A","Spitafields":"01","St. Marilebone":"0D","Thames Tunnel":"02","The Roofs":"13","Westminister":"11","Westminister II":"12"}},"Nadia\\Infinite Health\\[Level 01]Chelsea":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802EB6D6 000C"],"options":null},"Nadia\\Infinite Health\\[Level 02]Spitafield":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80320116 000C"],"options":null},"Nadia\\Infinite Health\\[Level 03]Thames Tunnel":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80319AC6 000C"],"options":null},"Nadia\\Infinite Health\\[Level 04]Sewer Snake":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80254926 000C"],"options":null},"Nadia\\Infinite Health\\[Level 05]India Docks":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["803202CE 000C"],"options":null},"Nadia\\Infinite Health\\[Level 06]Highgate Cemetary":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031A58E 000C"],"options":null},"Nadia\\Infinite Health\\[Level 07]Hampstead Heath":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["803203D6 000C"],"options":null},"Nadia\\Infinite Health\\[Level 08]Queenhite Dock's":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031FB7E 000C"],"options":null},"Nadia\\Infinite Health\\[Level 09]City":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80326A36 000C"],"options":null},"Nadia\\Infinite Health\\[Level 10]Smithfield":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8030A0CE 000C"],"options":null},"Nadia\\Infinite Health\\[Level 11]Snowman":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80250036 000C"],"options":null},"Nadia\\Infinite Health\\[Level 12]Regent's Canal":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80313E36 000C"],"options":null},"Nadia\\Infinite Health\\[Level 13]London Zoo":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031CB66 000C"],"options":null},"Nadia\\Infinite Health\\[Level 14]St. Marilebone":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031B686 000C"],"options":null},"Nadia\\Infinite Health\\[Level 15]Bloomsbury":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8032B256 000C"],"options":null},"Nadia\\Infinite Health\\[Level 16]Pimlico":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8031E4B6 000C"],"options":null},"Nadia\\Infinite Health\\[Level 17]Jose Manuel":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["8025DA0E 000C"],"options":null},"Nadia\\Infinite Health\\[Level 18]Westminister":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802F360E 000C"],"options":null},"Nadia\\Infinite Health\\[Level 19]Westminister II":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["802F4C76 000C"],"options":null},"Nadia\\Infinite Health\\[Level 20]The Roofs":{"note":"Only use one Infinite Health cheat at a time or the game will freeze or suffer from sever GFX Errors.","data":["80282DB6 000C"],"options":null}},"28784622-FFB22985-C:45":{"1 Down Per Possession":{"note":"","data":["800785D2 0004"],"options":null},"Always 1st Down":{"note":"","data":["800785D2 0001"],"options":null},"Infinite Player Creation Pts":{"note":"","data":["8107A0F2 00C8"],"options":null}},"28D5562D-E4D5AE50-C:4A":{"Presss F9 to Refresh Timer to 80":{"note":"When time is running low, just press F9 to refresh the timer back to 80.","data":["890760CA 0400"],"options":null},"Silence Shouting Commentator":{"note":"This shuts off the Shouting Commentary, giving you the much much needed silence.","data":["80076171 0001"],"options":null}},"2952369C-B6E4C3A8-C:50":{"Infinite Health Stadium \u0026 Gym Leader Castle":{"note":"","data":["801DD22D 0030"],"options":null},"Mini Games\\Player 1\\Clear Cut Challenge gets perfect score":{"note":"","data":["801744C3 0063"],"options":null},"Mini Games\\Player 1\\Delibird Delivery Perfect Score":{"note":"","data":["801AC2CC 0063"],"options":null},"Mini Games\\Player 1\\Egg Emergency perfect score":{"note":"","data":["80191C3F 0064"],"options":null},"Mini Games\\Player 1\\Furret Frolic Perfect Score":{"note":"","data":["801E9623 0063"],"options":null},"Mini Games\\Player 1\\Gutsy Golbat has 99 Hearts":{"note":"","data":["D017711F 0001","8017711F 0063"],"options":null},"Mini Games\\Player 1\\Roll Out Rampage Always in 1st Place":{"note":"","data":["80103179 0001"],"options":null},"Mini Games\\Player 1\\Streaming Stampede Perfect Score":{"note":"","data":["8018138B 0063"],"options":null},"Mini Games\\Player 1\\Topsy Turvy":{"note":"Immediatly wins","data":["D01769E7 0001","801769E7 0005"],"options":null},"Mini Games\\Player 2\\Gutsy Golbat has 99 hearts":{"note":"","data":["D017714B 0001","8017714B 0063"],"options":null},"Mini Games\\Player 3\\Gutsy Golbat has 99 hearts":{"note":"","data":["D0177177 0001","80177177 0063"],"options":null},"Mini Games\\Player 4\\Gutsy Golbat has 99 hearts":{"note":"","data":["D01771A3 0001","801771A3 0063"],"options":null}},"29A045CE-ABA9060E-C:46":{"Always 1st":{"note":"","data":["812C56A6 0001"],"options":null},"Have All\\Races":{"note":"","data":["50000702 0000","812B66A4 0101"],"options":null},"Have All\\Ships":{"note":"","data":["50000702 0000","812B66B2 0101"],"options":null},"Infinite\\Boosts\\Player 1":{"note":"","data":["812C56AC 4190"],"options":null},"Infinite\\Boosts\\Player 2":{"note":"","data":["812C59DC 4190"],"options":null},"Infinite\\Time":{"note":"","data":["812B52A0 42C8"],"options":null}},"29CE7692-71C58579-C:50":{"Activate Cheat Menu":{"note":"","data":["80053F78 0001"],"options":null},"Away Team Score":{"note":"","data":["8012BC2D 00??"],"options":{"Max Score":"FF","No Score":"00"}},"Home Team Scores":{"note":"","data":["8012BC2C 00??"],"options":{"Max Score":"FF","No Score":"00"}}},"2A49018D-D0034A02-C:50":{"Access All Tracks":{"note":"","data":["810B88DA 0001"],"options":null},"Always 1st":{"note":"","data":["800BB1F7 0001"],"options":null},"Always Turbo Level 1":{"note":"In Easy Mode","data":["810B4070 3100","810BBD30 0000"],"options":null},"Always Win Head 2 Head":{"note":"","data":["810BD590 0008"],"options":null},"Infinite 99 Lives":{"note":"","data":["800BB1C2 0064"],"options":null},"One Lap To Race":{"note":"","data":["810B88DE 0101"],"options":null}},"2A6B1820-6ABCF466-C:45":{"Activate\\Auto Abort Disable":{"note":"","data":["800F4078 0001"],"options":null},"Activate\\Cones to Mines":{"note":"","data":["800F3F88 0001"],"options":null},"Activate\\Disable Car 2 Car Control":{"note":"","data":["800F4050 0001"],"options":null},"Activate\\Resurrect in Place":{"note":"","data":["800F4080 0001"],"options":null},"Activate\\Stop Timer":{"note":"","data":["800F4090 0001"],"options":null},"Activate\\Upside Down Mode":{"note":"","data":["800F4061 0001"],"options":null},"Always Place 1st":{"note":"","data":["80101339 0000"],"options":null},"Car":{"note":"","data":["D00F40A5 0020","800D9EC1 00??","800D9F64 00??","800DA078 00??","800DA321 00??"],"options":{"F1 Car":"0A","Hot Rod":"09","Taxi":"08"}},"Car Type":{"note":"It gets you from 0-150 in the the time it takes the F1 racer to. Don't use the F1 racer and only hold until you reach 150 or the game will freeze.","data":["800F40B1 00??"],"options":{"Fat Car":"02","Flat Car":"01","Giant Car":"03","Invisible Car":"0A","Invisible Car (Can See Wheels)":"CD","Normal Car":"00","Paper-Thin Cars":"66","Screen-Talled Cars":"6E","Super-Sky Car":"BB","Super-Sky Car #2":"DD","Super-Tiny Car":"FF","Super-Tiny Car #2":"44"}},"Edge Boost":{"note":"by pressing R you will get a small speed boost that pushes you ahead.","data":["D00F40A5 0010","81101331 FFFF"],"options":null},"Gravity":{"note":"","data":["800F3D91 00??"],"options":{"1 Weight":"02","2 Weights":"03","A Balloon \u0026 2 Weights":"00","Normal":"01"}},"Have Two Special Cars":{"note":"You receive the Hotrod and Taxi with this code, but you may have to go through the cars from the \"Beginning\" past the \"Extreme\" for them to appear.","data":["810CAC82 FFFF","810CAC98 FFFF","810CACAE FFFF","810CACC4 FFFF","810CACDA FFFF","810CACF0 FFFF"],"options":null},"Press GS For Track Select":{"note":"With this code, press GS when on the track selction screen and press A to select that track!","data":["88100050 00??"],"options":{"Track 1":"00","Track 2":"01","Track 3":"02","Track 4":"03","Track 5":"04","Track 6":"05","Track 7":"06"}}},"2AF9B65C-85E2A2D7-C:45":{"Always Place 1st":{"note":"","data":["800A960F 0000"],"options":null},"Infinite Time":{"note":"","data":["80094E97 0064"],"options":null},"Low Course Time":{"note":"","data":["8009483B 0000"],"options":null}},"2B38AEC0-6350B810-C:46":{"Always Have\\50 pieces of corn":{"note":"","data":["801E27C1 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E27B0 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["811E27AE 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E27C2 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E27B5 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E27C0 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D0090001 0010","811E2726 1000","D0090001 0010","811E2736 1000"],"options":null},"No Music":{"note":"","data":["801DD966 0000"],"options":null},"Start with Berry Weapon":{"note":"","data":["801E27B7 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Subtitles On":{"note":"","data":["801DDBDB 00??"],"options":{"Off":"00","On":"01"}},"Unlock All Levels":{"note":"","data":["81099E90 000F"],"options":null}},"2B4F4EFB-43C511FE-C:50":{"Always Have Weapon Options\\Player 1":{"note":"","data":["810E2DD4 00??"],"options":{"Anvil":"79","Bee hive":"6D","Bird bath":"04","Blue Swordfish":"63","Bouy":"29","Broom":"08","Chair":"0B","Champagne":"0C","Chicken":"0E","Club":"03","Crate":"0F","Deck chair":"14","Egg":"16","Fish":"1A","Frying Pan":"1E","Gardeners Fork":"1D","Mallet":"2A","Milk Bottle":"2D","Mooses head":"78","NCube knife":"09","NCube missiles":"0A","Plank":"39","Rolling Pin":"41","Saucepan":"64","Spade":"46","Spanner":"4E","Stick":"55","Stool":"6B","Tennis Racket":"48","Watermelon":"2B","Wooden Chair":"1F","Wooden Spoon":"65"}},"Always Have Weapon Options\\Player 2":{"note":"","data":["810E30AC 00??"],"options":{"Anvil":"79","Bee hive":"6D","Bird bath":"04","Blue Swordfish":"63","Bouy":"29","Broom":"08","Chair":"0B","Champagne":"0C","Chicken":"0E","Club":"03","Crate":"0F","Deck chair":"14","Egg":"16","Fish":"1A","Frying Pan":"1E","Gardeners Fork":"1D","Mallet":"2A","Milk Bottle":"2D","Mooses head":"78","NCube knife":"09","NCube missiles":"0A","Plank":"39","Rolling Pin":"41","Saucepan":"64","Spade":"46","Spanner":"4E","Stick":"55","Stool":"6B","Tennis Racket":"48","Watermelon":"2B","Wooden Chair":"1F","Wooden Spoon":"65"}},"Infinite Health":{"note":"","data":["800E2BDD 00C8"],"options":null},"Infinite time":{"note":"","data":["800FF18E 00F0"],"options":null},"No music":{"note":"","data":["800B7718 0000"],"options":null},"One Hit To Kill\\Player 1":{"note":"This Will Give Player 1 A One Hit Kill Over Player 2","data":["800E2EB4 0080"],"options":null},"One Hit To Kill\\Player 2":{"note":"This Will Give Player 2 A One Hit Kill Over Player 1","data":["800E2BDC 0080"],"options":null},"Open All Versus Arenas":{"note":"","data":["800E4934 00FF","800E4935 00FF"],"options":null},"[Unlock All Characters]":{"note":"This Gives you all Characters to choose from plus fixes A freeze on the Charecter Select Menu by having it on","data":["800E4933 00FF"],"options":null}},"2B6FA7C0-09A71225-C:45":{"Aquadome Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE013 0000"],"options":null},"Aquadome Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F14A3 0000"],"options":null},"Aquadome Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE012 0200"],"options":null},"Aquadome Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F14B2 0200"],"options":null},"Aquadome Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE00B 00AA"],"options":null},"Aquadome Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F14AB 00AA"],"options":null},"Aquadome Stage\\No Energy\\Player 1":{"note":"","data":["801EE00B 0000"],"options":null},"Aquadome Stage\\No Energy\\Player 2":{"note":"","data":["801F14AB 0000"],"options":null},"Backwash Bay Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE763 0000"],"options":null},"Backwash Bay Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1C03 0000"],"options":null},"Backwash Bay Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE772 0200"],"options":null},"Backwash Bay Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1C12 0200"],"options":null},"Backwash Bay Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE76B 00AA"],"options":null},"Backwash Bay Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1C0B 00AA"],"options":null},"Backwash Bay Stage\\No Energy\\Player 1":{"note":"","data":["801EE76B 0000"],"options":null},"Backwash Bay Stage\\No Energy\\Player 2":{"note":"","data":["801F1C0B 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EF1B3 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F2653 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EF1C2 0200"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F2662 0200"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EF1BB 00AA"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F265B 00AA"],"options":null},"Boogerhenge, Tureen Toilet Stage\\No Energy\\Player 1":{"note":"","data":["801EF1BB 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\No Energy\\Player 2":{"note":"","data":["801F265B 0000"],"options":null},"Candy Factory Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE8E3 0000"],"options":null},"Candy Factory Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1D83 0000"],"options":null},"Candy Factory Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE8F2 0200"],"options":null},"Candy Factory Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1D92 0200"],"options":null},"Candy Factory Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE8EB 00AA"],"options":null},"Candy Factory Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1D8B 00AA"],"options":null},"Candy Factory Stage\\No Energy\\Player 1":{"note":"","data":["801EE8EB 0000"],"options":null},"Candy Factory Stage\\No Energy\\Player 2":{"note":"","data":["801F1D8B 0000"],"options":null},"Clayribbean Cruise Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE6D3 0000"],"options":null},"Clayribbean Cruise Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1B73 0000"],"options":null},"Clayribbean Cruise Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE6E2 0200"],"options":null},"Clayribbean Cruise Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1B82 0200"],"options":null},"Clayribbean Cruise Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE6DB 00AA"],"options":null},"Clayribbean Cruise Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1B7B 00AA"],"options":null},"Clayribbean Cruise Stage\\No Energy\\Player 1":{"note":"","data":["801EE6DB 0000"],"options":null},"Clayribbean Cruise Stage\\No Energy\\Player 2":{"note":"","data":["801F1B7B 0000"],"options":null},"Extra Characters and Secret Options":{"note":"","data":["8019ED41 000F"],"options":null},"Freezing Fortress Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE573 0000"],"options":null},"Freezing Fortress Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1A13 0000"],"options":null},"Freezing Fortress Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE582 0200"],"options":null},"Freezing Fortress Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1A22 0200"],"options":null},"Freezing Fortress Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE57B 00AA"],"options":null},"Freezing Fortress Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1A1B 00AA"],"options":null},"Freezing Fortress Stage\\No Energy\\Player 1":{"note":"","data":["801EE57B 0000"],"options":null},"Freezing Fortress Stage\\No Energy\\Player 2":{"note":"","data":["801F1A1B 0000"],"options":null},"Ghastly Graveyard Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE803 0000"],"options":null},"Ghastly Graveyard Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1CA3 0000"],"options":null},"Ghastly Graveyard Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE812 0200"],"options":null},"Ghastly Graveyard Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1CB2 0200"],"options":null},"Ghastly Graveyard Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE80B 00AA"],"options":null},"Ghastly Graveyard Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1CAB 00AA"],"options":null},"Ghastly Graveyard Stage\\No Energy\\Player 1":{"note":"","data":["801EE80B 0000"],"options":null},"Ghastly Graveyard Stage\\No Energy\\Player 2":{"note":"","data":["801F1CAB 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE623 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1AC3 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE632 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1AD2 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE62B 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1ACB 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\No Energy\\Player 1":{"note":"","data":["801EE62B 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\No Energy\\Player 2":{"note":"","data":["801F1ACB 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EFD93 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F3233 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EFDA2 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F3242 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EFD9B 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F323B 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\No Energy\\Player 1":{"note":"","data":["801EFD9B 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\No Energy\\Player 2":{"note":"","data":["801F323B 0000"],"options":null},"Kooky Courtyard Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE9E3 0000"],"options":null},"Kooky Courtyard Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1E83 0000"],"options":null},"Kooky Courtyard Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE9F2 0200"],"options":null},"Kooky Courtyard Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1E92 0200"],"options":null},"Kooky Courtyard Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE9EB 00AA"],"options":null},"Kooky Courtyard Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1E8B 00AA"],"options":null},"Kooky Courtyard Stage\\No Energy\\Player 1":{"note":"","data":["801EE9EB 0000"],"options":null},"Kooky Courtyard Stage\\No Energy\\Player 2":{"note":"","data":["801F1E8B 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Can't be Stunned\\Player 1":{"note":"","data":["801EE513 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Can't be Stunned\\Player 2":{"note":"","data":["801F19B3 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Full Super Bar\\Player 1":{"note":"","data":["811EE522 0200"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Full Super Bar\\Player 2":{"note":"","data":["811F19C2 0200"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Infinite Energy\\Player 1":{"note":"","data":["801EE51B 00AA"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Infinite Energy\\Player 2":{"note":"","data":["801F19BB 00AA"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\No Energy\\Player 1":{"note":"","data":["801EE51B 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\No Energy\\Player 2":{"note":"","data":["801F19BB 0000"],"options":null},"Play As\\Player1":{"note":"","data":["8019ED2F 00??"],"options":{"Bad Mr. Frosty":"00","Blob":"01","Bonker":"02","Boogerman":"03","Dr. Kiln":"04","Earthworm Jim":"05","Houngan":"08","Icky Bod Clay":"09","Kung Pow":"0A","Sumo Santa":"0D","T-Hoppy":"0F","Taffy":"0E"}},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Can't be Stunned\\Player 1":{"note":"","data":["801EDCE3 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Can't be Stunned\\Player 2":{"note":"","data":["801F1183 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Full Super Bar\\Player 1":{"note":"","data":["811EDCF2 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Full Super Bar\\Player 2":{"note":"","data":["811F1192 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Infinite Energy\\Player 1":{"note":"","data":["801EDCEB 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Infinite Energy\\Player 2":{"note":"","data":["801F118B 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\No Energy\\Player 1":{"note":"","data":["801EDCEB 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\No Energy\\Player 2":{"note":"","data":["801F118B 0000"],"options":null},"Rubbage Reef Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EE5F3 0000"],"options":null},"Rubbage Reef Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1A93 0000"],"options":null},"Rubbage Reef Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EE602 0200"],"options":null},"Rubbage Reef Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1AA2 0200"],"options":null},"Rubbage Reef Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EE5FB 00AA"],"options":null},"Rubbage Reef Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F1A9B 00AA"],"options":null},"Rubbage Reef Stage\\No Energy\\Player 1":{"note":"","data":["801EE5FB 0000"],"options":null},"Rubbage Reef Stage\\No Energy\\Player 2":{"note":"","data":["801F1A9B 0000"],"options":null},"Rubbage Room Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F0823 0000"],"options":null},"Rubbage Room Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F3CC3 0000"],"options":null},"Rubbage Room Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F0832 0200"],"options":null},"Rubbage Room Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F3CD2 0200"],"options":null},"Rubbage Room Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F082B 00AA"],"options":null},"Rubbage Room Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F3CCB 00AA"],"options":null},"Rubbage Room Stage\\No Energy\\Player 1":{"note":"","data":["801F082B 0000"],"options":null},"Rubbage Room Stage\\No Energy\\Player 2":{"note":"","data":["801F3CCB 0000"],"options":null},"Santa's Toy Factory Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EEE13 0000"],"options":null},"Santa's Toy Factory Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F22B3 0000"],"options":null},"Santa's Toy Factory Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EEE22 0200"],"options":null},"Santa's Toy Factory Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F22C2 0200"],"options":null},"Santa's Toy Factory Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EEE1B 00AA"],"options":null},"Santa's Toy Factory Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F22BB 00AA"],"options":null},"Santa's Toy Factory Stage\\No Energy\\Player 1":{"note":"","data":["801EEE1B 0000"],"options":null},"Santa's Toy Factory Stage\\No Energy\\Player 2":{"note":"","data":["801F22BB 0000"],"options":null},"Stage Select":{"note":"","data":["8019ED2B 00??"],"options":{"Aquadome":"19","Backwash Bay":"16","Boogerhenge":"15","Camp Claynaveral":"02","Candy Factory":"00","Claynaveral Hangar":"01","Clayribbean Cruise":"11","Fiery Furnace":"0F","Freezing Fortress":"08","Ghastly Graveyard":"05","Grotto Gulch":"0A","Happy Harry's Hut":"07","Kiln's Hideout":"0E","Kiln's Laboratory":"0D","Kooky Courtyard":"13","Mudville Mansion":"04","Outhouse":"03","Refuse Room":"09","Research Room":"10","Rubbage Reef":"0C","Rubbage Room":"0B","Santa's Toy Factory":"14","Santa's Workship":"12","Spooky Spire":"06","Tribal Tower":"18","Tureen Toilet":"17"}},"Tribal Tower Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801EDD83 0000"],"options":null},"Tribal Tower Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801F1223 0000"],"options":null},"Tribal Tower Stage\\Full Super Bar\\Player 1":{"note":"","data":["811EDD92 0200"],"options":null},"Tribal Tower Stage\\Full Super Bar\\Player 2":{"note":"","data":["811F1232 0200"],"options":null},"Tribal Tower Stage\\Infinite Energy\\Player 1":{"note":"","data":["801EDD8B 00AA"],"options":null},"Tribal Tower Stage\\Infinite Energy\\Player 2":{"note":"","data":["801F122B 00AA"],"options":null},"Tribal Tower Stage\\No Energy\\Player 1":{"note":"","data":["801EDD8B 0000"],"options":null},"Tribal Tower Stage\\No Energy\\Player 2":{"note":"","data":["801F122B 0000"],"options":null}},"2BC1FCF2-7B9A0DF4-C:58":{"All Items":{"note":"","data":["50002402 0202","810ED130 0001","50004601 0000","800ED1B1 0003"],"options":null},"Item Modifier Codes\\Position 01":{"note":"","data":["800ED130 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 02":{"note":"","data":["800ED131 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 03":{"note":"","data":["800ED132 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 04":{"note":"","data":["800ED133 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 05":{"note":"","data":["800ED134 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 06":{"note":"","data":["800ED135 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 07":{"note":"","data":["800ED136 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 08":{"note":"","data":["800ED137 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 09":{"note":"","data":["800ED138 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 10":{"note":"","data":["800ED139 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 11":{"note":"","data":["800ED13A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 12":{"note":"","data":["800ED13B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 13":{"note":"","data":["800ED13C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 14":{"note":"","data":["800ED13D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 15":{"note":"","data":["800ED13E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 16":{"note":"","data":["800ED13F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 17":{"note":"","data":["800ED140 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 18":{"note":"","data":["800ED141 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 19":{"note":"","data":["800ED142 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 20":{"note":"","data":["800ED143 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 21":{"note":"","data":["800ED144 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 22":{"note":"","data":["800ED145 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 23":{"note":"","data":["800ED146 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 24":{"note":"","data":["800ED147 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 25":{"note":"","data":["800ED148 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 26":{"note":"","data":["800ED149 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 27":{"note":"","data":["800ED14A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 28":{"note":"","data":["800ED14B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 29":{"note":"","data":["800ED14C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 30":{"note":"","data":["800ED14D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 31":{"note":"","data":["800ED14E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 32":{"note":"","data":["800ED14F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 33":{"note":"","data":["800ED150 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 34":{"note":"","data":["800ED151 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 35":{"note":"","data":["800ED152 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 36":{"note":"","data":["800ED153 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 37":{"note":"","data":["800ED154 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 38":{"note":"","data":["800ED155 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 39":{"note":"","data":["800ED156 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 40":{"note":"","data":["800ED157 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 41":{"note":"","data":["800ED158 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 42":{"note":"","data":["800ED159 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 43":{"note":"","data":["800ED15A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 44":{"note":"","data":["800ED15B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 45":{"note":"","data":["800ED15C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 46":{"note":"","data":["800ED15D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 47":{"note":"","data":["800ED15E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 48":{"note":"","data":["800ED15F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}}},"2BCCF9C4-403D9F6F-C:4A":{"Always 1st":{"note":"","data":["802133B6 0001"],"options":null},"Always Win Race Heats":{"note":"","data":["802133B6 0001","80377B60 0001","8021455F 0001","80381424 0001"],"options":null},"Class Select":{"note":"This code is useful because you can play Class AA without having to beat a level!","data":["80206857 00??"],"options":{"1 Play":"04","2 Play":"05","3 Play":"06","4 Play":"07","Class AA":"03","Class B":"01","Class C":"00"}},"Super Speed":{"note":"This is Turbo fast,So to slow it down a little more keep the B button pressed down","data":["81213568 4800"],"options":null}},"2C739EAC-9EF77726-C:50":{"Always Have\\BFG":{"note":"","data":["8006338B 0001"],"options":null},"Always Have\\Bio Suite":{"note":"","data":["80063333 00??"],"options":{"Off":"00","On":"FF"}},"Always Have\\Chain Gun":{"note":"","data":["8006337F 0001"],"options":null},"Always Have\\Chainsaw":{"note":"","data":["8006336B 0001"],"options":null},"Always Have\\Double Shotgun":{"note":"","data":["8006337B 0001"],"options":null},"Always Have\\Gun":{"note":"","data":["80063373 0001"],"options":null},"Always Have\\Have Laser Weapon":{"note":"","data":["8006338D 0001"],"options":null},"Always Have\\Have Rocket Launcher":{"note":"","data":["80063381 0001"],"options":null},"Always Have\\Missile Ammo":{"note":"","data":["8006339F 0064"],"options":null},"Always Have\\Missile Launcher":{"note":"","data":["80063383 0001"],"options":null},"Always Have\\Plasma Rifle":{"note":"","data":["80063387 0001"],"options":null},"Always Have\\Shotgun":{"note":"","data":["80063377 0001"],"options":null},"Enable Cheat Menu":{"note":"","data":["8005AA23 0001"],"options":null},"Have All\\Keys":{"note":"","data":["50000504 0000","810634DE FFFF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000A04 0000","8106350A 0001"],"options":null},"Infinite\\Ammo All Weapons":{"note":"","data":["50000404 0000","81063532 013C"],"options":null},"Infinite\\Armor":{"note":"","data":["800634BF 00FF"],"options":null},"Invincible":{"note":"","data":["8006355B 0002"],"options":null},"Invincible And Map Markers":{"note":"","data":["800633BB 0006"],"options":null},"Rapid Fire":{"note":"","data":["810633EA 0B94"],"options":null},"Turn Map Markers On":{"note":"","data":["800633BB 0004"],"options":null},"[Max Brightness]":{"note":"Enable this cheat on rom load to have Max Brightness (internal) and then put Jabo d3d8 on 160% Max for a extra brightness Boost.","data":["8005AA18 0064"],"options":null}},"2DC4FFCC-C8FF5A21-C:50":{"Have\\Max Gold":{"note":"","data":["50000401 0000","80277AA5 00FF"],"options":null},"Have\\Max Total XP":{"note":"","data":["50000401 0000","8027931D 00FF"],"options":null},"Have\\Max Total XP Remaning to Start":{"note":"This will give you 16777215 Total XP Remaning to start with and after your 1st batle will allow you to buy your Max Stats","data":["50000401 0000","80279321 00FF"],"options":null},"Infinite\\99 Health Potions":{"note":"Do Not put this cheat on until you have collected your 1st Health Potion from the 1st Cheat or you will not be able to get into the Sub menu and Continue the game.","data":["8027876B 0063"],"options":null},"Infinite\\Max Health":{"note":"","data":["80279308 001E"],"options":null}},"2E0E7749-B8B49D59-C:58":{"Access In-Game Cheat Menu":{"note":"","data":["8113568C FFFF","8113568E FFFF"],"options":null}},"2E359339-3FA5EDA6-C:50":{"Clear Mission Selector":{"note":"","data":["8112976C 00??"],"options":{"1":"01","2":"02","3":"03","4":"04","5":"05","6":"06","7":"07","8":"08"}},"Gun 4-Way Shot":{"note":"","data":["80129A13 0004"],"options":null},"Infinite Fuel":{"note":"","data":["81129A16 FFFF"],"options":null},"Infinite Shield":{"note":"","data":["811299B8 03E8"],"options":null},"Infinite Weapon\\1st Position":{"note":"","data":["8012972B 0063"],"options":null},"Infinite Weapon\\2nd Position":{"note":"","data":["8012972F 0063"],"options":null},"Infinite Weapon\\3rd Position":{"note":"","data":["80129733 0063"],"options":null},"Infinite Weapon\\4th Position":{"note":"","data":["80129737 0063"],"options":null},"Infinite Weapon\\5th Position":{"note":"","data":["8012973B 0063"],"options":null},"Max Score":{"note":"","data":["81129716 FFFF"],"options":null},"Opens All 5 Item Slots":{"note":"","data":["8012974B 0005"],"options":null},"Option On":{"note":"","data":["8112976A 0001"],"options":null},"Score Attack Mode":{"note":"","data":["81129762 0001"],"options":null},"Stage Select On":{"note":"","data":["81129766 0001"],"options":null},"Texture Mode":{"note":"","data":["81129774 0001"],"options":null},"Weapon Modifier\\1st Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["80129729 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\2nd Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["8012972D 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\3rd Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["801297E1 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\4th Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["801297E5 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\5th Position":{"note":"Must to be used with the Infinite Weapon Codes \u0026 the open all 5 item slot code.","data":["801297E9 00??"],"options":{"AAM":"02","AGAM":"03","AGM":"01","Cluster":"06","Dummy":"04","H-Cluster":"07","H-Plasma":"08","Nothing":"00","Rocket":"05"}},"Weapon Modifier\\Gun Weapon":{"note":"","data":["80129A13 00??"],"options":{"2-Way Shot":"02","3-Way Shot":"03","4-Way Shot":"04","No Weapon":"00","Normal Shot":"01"}}},"2E955ECD-F3000884-C:45":{"Bowl A Perfect Game":{"note":"","data":["5000090C 0000","800AC9F0 000A","800ACA5E 000A"],"options":null}},"2F493DD0-2E64DFD9-C:45":{"Have\\All Guns In Chest":{"note":"","data":["50000E04 0100","810E8EF4 05FF"],"options":null},"Have\\All Main Items In Chest":{"note":"If you want items that are not listed in the Chest, then just use the Have Item On Slot Select code to have what you desire.","data":["810E8F2C 17FF","810E8F30 1EFF","810E8F34 1FFF","810E8F38 23FF","50000404 0100","810E8F3C 25FF","810E8F4C 2AFF","810E8F50 2BFF","50000304 0100","810E8F54 2EFF","50000F04 0100","810E8F60 32FF","810E8F9C 43FF","50000504 0100","810E8FA0 47FF","50000404 0100","810E8FB4 53FF","50000C04 0100","810E8FC4 58FF"],"options":null},"Have\\Fine Condition Always":{"note":"","data":["810E13E4 0000"],"options":null},"Have\\Item On Slot Select\\Slot 01":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EC8 00??","800E8EC9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 02":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ECC 00??","800E8ECD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 03":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED0 00??","800E8ED1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 04":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED4 00??","800E8ED5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 05":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED8 00??","800E8ED9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 06":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EDC 00??","800E8EDD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 07":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE0 00??","800E8EE1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 08":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE4 00??","800E8EE5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 09":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE8 00??","800E8EE9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 10":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EEC 00??","800E8EED 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Infinite\\Health":{"note":"","data":["810E1322 00C8"],"options":null},"Infinite\\Time":{"note":"","data":["800E8CBF 0010"],"options":null},"Play As":{"note":"This allows you to select what character you wish to play as. Just slect on load and select as normal at the menu and when in game you will be the character of your choice","data":["810E1138 ????"],"options":{"Ada (can crash the game)":"0E80","Cheryl":"0F80","Claire Original":"0380","Claire as Biker":"0980","Claire without jacket":"0780","Claires body Leons outfit":"0B80","Hunk (can crash the game)":"0C80","Leon Original":"0280","Leon Wounded":"0680","Leon as Biker":"0A80","Leon as Stars":"0880","To Fu":"0D80"}},"Play Extra Mission":{"note":"This allows you to select what extra mission you wish to play. Just slect on load and carry on as normal at the menu and when in game you will be the character of your choice Do not use at the same time as [Resident Evil 2 Mode]","data":["810E10EE 00??"],"options":{"The 4th Survior":"48","To-Fu":"49"}},"Quick Chest Access":{"note":"With this code, all you have to do to access the chest, is hold L and Press Start.","data":["D1014FA4 1020","8012BFA8 0001"],"options":null},"Quick Save Access":{"note":"(1 Anytime, anywhere, press Z and B at the same time. You'll get the standard typewriter text: \"It's an old typewriter. You can save your progress with this.\" Note that you must, of course, have an ink ribbon to save. 2) Choose \"Yes\" and you'll be able to save normally. Instead of the location name, your save file will say \"Scenario 1st\" or \"Scenario 2nd.\" 3) When you load your save file, you'll have to skip through the intro, but when the game loads up you'll be exactly where you saved!","data":["D1014FA4 6000","810E8928 8007","D1014FA4 6000","810E892A 4110"],"options":null},"[Biohazard 2 Mode]":{"note":"Note: With this enabled the game will become Bio Hazard 2, the Japanese version of Resident Evil 2! This means all text (except the text in files) is in Japanese, and all cinemas have Japanese subtitles. Note that the title screen will still say Resident Evil 2 Do not use at the same time as Play Extra Mission","data":["D10E10EE 00??","810E10EE 0000"],"options":{"Off":"00","On":"40"}},"[Saves Always 0]":{"note":"No matter how many saves you do ithis makes the game think you Have\\not saved.","data":["810E8B50 0000"],"options":null}},"2F57C9F7-F1E29CA6-C:4A":{"Have All Keys":{"note":"","data":["800C3177 0003"],"options":null},"Infinite 99 Credits":{"note":"","data":["800C30CB 0063"],"options":null},"Infinite Max Lives":{"note":"","data":["800B04D7 0004"],"options":null}},"2F7009DD-FC3BAC53-C:50":{"Diffuculty Modifier":{"note":"","data":["801195DF 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Gems":{"note":"","data":["80128F07 00FF"],"options":null},"Have All\\Level Keys":{"note":"","data":["50000604 0000","80128DE3 0007","80128DFB 001F","80128E1B 00FF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000B04 0000","80128DB7 0001","80128D33 0001"],"options":null},"Have Cheat Menu":{"note":"","data":["811195F0 FFFF","811195F2 FFFF"],"options":null},"Have\\Backpack":{"note":"","data":["80128CEB 0001","80128D2B 0001"],"options":null},"Infinite\\Air":{"note":"","data":["801290E0 0063","801E869A 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128D63 00FF","80128D73 00FF","80128D7F 00FF","50000504 0000","80128D83 00FF","80128F0B 00FF","80128F07 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128D96 5B23","80128DD7 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C1634 1E61","812A25A4 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["80128D7F 00FF"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114F8CA F803","81128D4E 0003","81128D52 0003","81128D56 0003","81128D5A 0003","81128D5E 0003","81128D62 0003","81128D66 0005"],"options":null}},"2F700DCD-176CC5C9-C:45":{"Diffuculty Modifier":{"note":"","data":["8011972F 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Level Keys":{"note":"","data":["50000604 0000","80128E83 0007","80128E9B 001F","80128EBB 00FF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000B04 0000","80128E47 0001","80128E73 0001"],"options":null},"Have\\Backpack":{"note":"","data":["80128E3B 0001","80128E7B 0001"],"options":null},"Have\\Cheat Menu":{"note":"","data":["81119690 FFFF","81119692 FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["81129180 AAE1","811E873A F1FF"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128E03 00FF","80128E13 00FF","80128E1F 00FF","50000504 0000","80128E23 00FF","80128FAB 00FF","80128FA7 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128E36 5B23","80128E77 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C16D4 1E61","812A2644 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["8005E7D9 0098","8105E7F0 2400","8005E7FD 0083"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114FA1A F803","81128E9E 0003","81128EA2 0003","81128EA6 0003","81128EAA 0003","81128EAE 0003","81128EB2 0003","81128EB6 0005"],"options":null}},"2F700DCD-176CC5C9-C:50":{"Diffuculty Modifier":{"note":"","data":["8011967F 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Gems":{"note":"","data":["80128FA7 00FF"],"options":null},"Have All\\Level Keys":{"note":"","data":["50000604 0000","80128E83 0007","80128E9B 001F","80128EBB 00FF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000B04 0000","80128E57 0001","80128DD3 0001"],"options":null},"Have Cheat Menu":{"note":"","data":["81119690 FFFF","81119692 FFFF"],"options":null},"Have\\Backpack":{"note":"","data":["80128D8B 0001","80128DCB 0001"],"options":null},"Infinite\\Air":{"note":"","data":["80129180 0063","801E873A 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128E03 00FF","80128E13 00FF","80128E1F 00FF","50000504 0000","80128E23 00FF","80128FAB 00FF","80128FA7 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128E36 5B23","80128E77 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C16D4 1E61","812A2644 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["80128E1F 00FF"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114F96A F803","81128DEE 0003","81128DF2 0003","81128DF6 0003","81128DFA 0003","81128DFE 0003","81128E02 0003","81128E06 0005"],"options":null}},"2F70F10D-5C4187FF-C:45":{"Diffuculty Modifier":{"note":"","data":["801195DF 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Level Keys":{"note":"","data":["50000604 0000","80128D33 0007","80128D4B 001F","80128D6B 00FF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000B04 0000","80128CF7 0001","80128D23 0001"],"options":null},"Have\\Backpack":{"note":"","data":["80128CEB 0001","80128D2B 0001"],"options":null},"Have\\Cheat Menu":{"note":"","data":["81119540 FFFF","81119542 FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["81129030 AAE1","811E85EA F1FF"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128CB3 00FF","80128CC3 00FF","80128CCF 00FF","50000504 0000","80128CD3 00FF","80128E5B 00FF","80128E57 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128CE6 5B23","80128D27 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C1584 1E61","812A24F4 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["8005E689 0098","8105E6A0 2400","8005E6AD 0083"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114F8CA F803","50000604 0000","81128D4E 0003","81128D66 0005"],"options":null},"Sixty Frames":{"note":"","data":["8000A13F 0001","8000A2FF 0001","8000A68F 0001"],"options":null},"Widescreen":{"note":"","data":["8103851E 43D5"],"options":null}},"30C7AC50-7704072D-C:45":{"Access All\\Chapters, Scenes,\u0026 Multi-Player Characters":{"note":"","data":["50000401 0000","800E9D01 00FF"],"options":null},"Access All\\Characters \u0026 Weapons In Multi Race":{"note":"","data":["810E9D02 ??FF"],"options":{"All Characters \u0026 Baseball bat":"FF","All Characters \u0026 Bones":"F3","All Characters \u0026 Frying Pan":"FB"}},"Conkers Speed Select":{"note":"","data":["810CC318 ????"],"options":{"Fast Conker":"3FF0","Normal Conker":"3F80","Slow Conker":"3F00","Super Fast Conker":"4030"}},"Infinite\\Accuracy Count Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game","data":["800E0B67 0001"],"options":null},"Infinite\\Bags In Heist":{"note":"","data":["800E0BE4 00FF"],"options":null},"Infinite\\Bombs":{"note":"","data":["802055CA 0030"],"options":null},"Infinite\\Head Shot Count Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game,Once you pick up a Gun a shoot once, you will 100%.","data":["800E0B6B 03E7"],"options":null},"Infinite\\Health\\Player 1":{"note":"","data":["800CC49A 0006"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["800CC7C6 270F"],"options":null},"Infinite\\Health\\Player 3":{"note":"","data":["800CCAF2 270F"],"options":null},"Infinite\\Health\\Player 4":{"note":"","data":["800CCE1E 270F"],"options":null},"Infinite\\Lives Player 1":{"note":"","data":["800D2144 0064"],"options":null},"Infinite\\Max Kills Player 1":{"note":"","data":["800E0B47 03E7"],"options":null},"Infinite\\Oxygen":{"note":"","data":["800CC382 0001"],"options":null},"Infinite\\Pots of cash":{"note":"","data":["810D214A FFFF"],"options":null},"Infinite\\Time In Multi":{"note":"","data":["8108FD7A 7500"],"options":null},"Matrix Mode (Anywhere)":{"note":"Press R to activate and then Right-C to exit.","data":["D1042A14 0010","800BEA0C 0001","D1042A14 0010","810BE574 D202","D1042A14 0001","800BEA0C 0000","D1042A14 0001","810BE574 0000"],"options":null},"Play as Option 1":{"note":"Here you can choose who you want to play as, but only one option at a time. Shadow will not be visible, except when playing as Conker.","data":["800D213F 00??"],"options":{"Army Captain":"25","Bald Caveman":"0C","Caveman":"0D","Combat Squirrel":"04","Conker":"05","Conker the Bat":"24","Dinosaur (Cannot move)":"09","Enemy Bat":"23","Female Villager":"1D","Female Villager (with hood and glasses)":"1F","Female Zombie":"22","Gregg":"27","Male Villager":"11","Male Villager (with cap and glasses and moustache)":"1C","Male Villager (with cap and glasses)":"1A","Male Villager (with cap and moustache)":"1B","Male Villager (with cap)":"19","Male Villager (with glasses and moustache)":"14","Male Villager (with glasses)":"12","Male Villager (with hat and glasses and moustache)":"18","Male Villager (with hat and glasses)":"16","Male Villager (with hat and moustache)":"17","Male Villager (with hat)":"15","Male Villager (with moustache)":"13","Male Zombie":"21","Mohican Caveman":"0E","Neo Conker":"10","Skeleton Gregg":"28","Spikey Caveman":"0F","Tank Vehicle (Cannot move)":"08","Tedi":"03","Tedi Boss":"26","Uga":"0B","Wessle":"01","Wessle (Black outfit)":"02"}},"Press L To Levitate\\Player 1":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042A15 0020","810CC2F0 41CB"],"options":null},"Press L To Levitate\\Player 2":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042A1D 0020","810CC61C 41CB"],"options":null},"Press L To Levitate\\Player 3":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042A25 0020","810CC948 41CB"],"options":null},"Press L To Levitate\\Player 4":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042A2D 0020","810CCC74 41CB"],"options":null},"Wait Animation Trigger":{"note":"","data":["800CC5C8 00??"],"options":{"Default at most":"00","Wait animations disabled":"02"}},"Weapon Select In Multi (On Pick Up)":{"note":"Select what Weapon you would like in Multi Player and then on a Weapon Pickup you will have the weapon of your choice.to change for another just Enable the one of your choice to have that instead.(you must have a weapon already to change for the next.","data":["80180873 00??"],"options":{"Buck Shot":"08","Gas Mask":"13","High Powred Riffle With Scope":"0A","Long Pistol with Sight":"06","Nothing":"02","Riffle":"05","Rocket Launcher":"07","Sword":"01","Throwing Knives":"04","Two Automatic Machine Guns":"0C","Yellow Chain-Ssaw":"03"}}},"315C7466-3A453265-C:4A":{"Infinite\\99 Credits":{"note":"","data":["80085B03 0063"],"options":null},"Infinite\\Lives":{"note":"","data":["800A0CE8 0009"],"options":null},"Infinite\\Specials":{"note":"","data":["800A0CE9 0003"],"options":null},"Max\\Combo":{"note":"","data":["810A0CE4 7FFF"],"options":null},"Max\\Lower Level":{"note":"","data":["800A0CF8 0003"],"options":null},"Max\\Score":{"note":"","data":["800A0CD8 03E7","800A0CD9 03E7"],"options":null},"Max\\Upper Level":{"note":"","data":["800A0CF9 0063"],"options":null},"Play As":{"note":"","data":["800A0CEC 00??"],"options":{"Character 1":"00","Character 2":"01","Character 3":"02"}},"Status Modifier":{"note":"","data":["800A0CEA 00??"],"options":{"High":"01","Low":"03","Mid":"02"}}},"319093EC-0FC209EF-C:45":{"1 Player\\Always Place 1st":{"note":"","data":["80103C57 0000"],"options":null},"1 Player\\Max\\Acceleration":{"note":"","data":["8012C49F 000A"],"options":null},"1 Player\\Max\\Shocks":{"note":"","data":["8012C4A7 000A"],"options":null},"1 Player\\Max\\Speed":{"note":"","data":["8012C4A3 000A"],"options":null},"1 Player\\Max\\Tires":{"note":"","data":["8012C4AB 000A"],"options":null},"Multi and 1 Player\\Infinite Turbos\\Player 1":{"note":"Can be used in 1 Player and Multiplayer Modes for Player 1","data":["81103EBA 03E7"],"options":null},"Multi and 1 Player\\Infinite Turbos\\Player 2":{"note":"Multiplayer Mode Only for Player 2","data":["811041AE 03E7"],"options":null},"Multi and 1 Player\\Max Crash Helmets\\Player 1":{"note":"Can be used in 1 Player and Multiplayer Modes for Player 1","data":["80103EB3 0064"],"options":null},"Multi and 1 Player\\Max Crash Helmets\\Player 2":{"note":"Multiplayer Mode Only for Player 2","data":["801041A7 0064"],"options":null}},"3261D479-ED0DBC25-C:45":{"Away Team Scores 0":{"note":"","data":["8012A4EA 0000"],"options":null},"Away Team Scores 150":{"note":"","data":["8012A4EA 0096"],"options":null},"Big Head Mode":{"note":"","data":["81098E88 0100"],"options":null},"Final Four Stadium":{"note":"","data":["80098E98 0089"],"options":null},"GS Button For 1-Second Shot Clock":{"note":"","data":["8912A4BC 3FC0"],"options":null},"Home Team Scores 0":{"note":"","data":["8012A4D2 0000"],"options":null},"Home Team Scores 150":{"note":"","data":["8012A4D2 0096"],"options":null},"Infinite Shot Clock":{"note":"","data":["8112A4BC 4210"],"options":null},"Infinite Time Outs Away":{"note":"","data":["8012A4EC 0006"],"options":null},"Infinite Time Outs Home":{"note":"","data":["8012A4D4 0006"],"options":null},"No Fans In Crowd":{"note":"","data":["810CA520 0454"],"options":null},"No Time Outs Away":{"note":"","data":["8012A4EC 0000"],"options":null},"No Time Outs Home":{"note":"","data":["8012A4D4 0000"],"options":null},"Partially Invisible Players":{"note":"","data":["81098E84 0100"],"options":null},"Programmers Team":{"note":"","data":["81097088 0100"],"options":null},"Shot Clock Disabled":{"note":"","data":["8109707C 0000"],"options":null},"Trail Follows The Ball":{"note":"","data":["810B4600 4100"],"options":null},"Z-Axis Stadium":{"note":"","data":["80098E98 0088"],"options":null}},"32CA974B-B2C29C50-C:46":{"Cheat Menu\\All Weapons Enabled":{"note":"","data":["801D8B19 0001","801D8B85 0001","801D9BE5 0001","801D9CE1 0001","801D9D75 0001","801D9D77 0001","801D9DA9 0001","801DA6D9 0001","801DA6E1 0001","801DA74D 0001","801DB895 0001"],"options":null},"Cheat Menu\\Cheat Menu Enabled":{"note":"","data":["801DA748 0001"],"options":null},"Cheat Menu\\Have All Game Type \u0026 Other":{"note":"","data":["810E1B5E 0FFF"],"options":null},"Cheat Menu\\Have All Weapons":{"note":"","data":["811DA6D0 FFFF"],"options":null},"Enable Debug Menu":{"note":"","data":["800DFCF0 0001"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810A21D4 A65B"],"options":null},"Invincibility":{"note":"","data":["800DF223 0001"],"options":null}},"32EFC7CB-C3EA3F20-C:45":{"Infinite Lives P1":{"note":"","data":["800CE0F3 0003"],"options":null},"Infinite Lives P2":{"note":"","data":["800CE0F7 0003"],"options":null},"Infinite Pistol Ammo":{"note":"","data":["8106006C 2400"],"options":null},"Infinite Rocket Launcher Ammo":{"note":"","data":["81060130 2400"],"options":null},"Infinite Shotgun Ammo":{"note":"","data":["810601D8 2400"],"options":null}},"33BE8CD6-EC186912-C:45":{"Character Creation\\Max\\Aerial":{"note":"","data":["80319675 0009"],"options":null},"Character Creation\\Max\\Brawling":{"note":"","data":["8031F5B5 0009"],"options":null},"Character Creation\\Max\\Dirtiness":{"note":"","data":["80321575 0009"],"options":null},"Character Creation\\Max\\Impact":{"note":"","data":["803121B5 0009"],"options":null},"Character Creation\\Max\\Mat Ability":{"note":"","data":["8031B635 0009"],"options":null},"Character Creation\\Max\\Quickness":{"note":"","data":["803176B5 0009"],"options":null},"Character Creation\\Max\\Speed":{"note":"","data":["803156F5 0009"],"options":null},"Character Creation\\Max\\Strength":{"note":"","data":["802F16F5 0009"],"options":null},"Character Creation\\Max\\Submission":{"note":"","data":["8031D5F5 0009"],"options":null},"Enable Cheat":{"note":"","data":["800B115B 00??"],"options":{"All Wrestlers":"80","Momentum Meter":"08","Play As Same Wrestler":"20","Stamina Meter":"04","Super Created Wrestlers":"02"}},"Freeze Timer":{"note":"","data":["810B3242 D300"],"options":null},"Infinite Stamina\\Player 1":{"note":"","data":["810E3998 0478"],"options":null},"Infinite Stamina\\Player 2":{"note":"","data":["810E3B34 03ED"],"options":null},"Meter Select\\Player 1":{"note":"","data":["800E399D 00??"],"options":{"Empty Meter Bar":"00","Full Meter Bar":"60"}},"Meter Select\\Player 2":{"note":"","data":["800AD80D 00??"],"options":{"Empty Meter Bar":"00","Full Meter Bar":"60"}}},"36281F23-009756CF-C:45":{"Infinite\\Balls":{"note":"","data":["8021AC47 0000"],"options":null},"Infinite\\Creation Points":{"note":"","data":["81059408 420C"],"options":null},"Infinite\\Strikes":{"note":"","data":["8021AC48 0000"],"options":null},"Inning Selection":{"note":"","data":["8021AC42 00??"],"options":{"2nd Inning":"02","3rd Inning":"03","4th Inning":"04","5th Inning":"05","6th Inning":"06","7th Inning":"07","8th Inning":"08","9th Inning":"09"}},"Max\\Arm Strength":{"note":"","data":["8105C5F8 4120"],"options":null},"Max\\Batting":{"note":"","data":["8105D6D8 4120"],"options":null},"Max\\Clutch":{"note":"","data":["8105BB98 4120"],"options":null},"Max\\Control":{"note":"","data":["8105B760 4120"],"options":null},"Max\\Defense":{"note":"","data":["8105CA60 4120"],"options":null},"Max\\Durability":{"note":"","data":["8105C098 4120"],"options":null},"Max\\Pitch Speed":{"note":"","data":["8105AE90 4120"],"options":null},"Max\\Power":{"note":"","data":["8105D270 4120"],"options":null},"Max\\Speed":{"note":"","data":["8105CE68 4120"],"options":null},"Max\\Stamina":{"note":"","data":["8105B2F8 4120"],"options":null}},"36F1C74B-F2029939-C:50":{"Always Win Judge's Decision\\Player 1":{"note":"","data":["8020B777 FFFF","802098AF 0000"],"options":null},"Always Win Judge's Decision\\Player 2":{"note":"","data":["802098AF FFFF","8020B777 0000"],"options":null},"Enable Boro":{"note":"","data":["80307349 0001"],"options":null},"Have 1 Star\\Abdul":{"note":"","data":["80307353 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["8030734F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80307352 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80307351 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80307354 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80307350 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["8030734E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80307355 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80307356 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["802098A1 0000","802047C3 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802047C7 0000","8020B769 0000"],"options":null},"Level Select":{"note":"","data":["8022A84C 00??"],"options":{"Blue Hell Mountain":"0C","Coliseum":"04","Desert":"01","Fire Mountain":"00","Highlands":"02","Hong Kong":"03","Joker's Room":"0B","Jungle":"05","Ninja Room":"06","Observation":"09","Palace":"0D","Pasture":"0A","Suspension Bridge":"07"}},"Play As\\Player 1":{"note":"","data":["802EF622 00??"],"options":{"Abdul":"05","Bob":"01","Boro":"08","Joker":"0B","Leon":"04","Meiling":"03","Ninja":"06","No Clue":"0D","Pierre":"02","Ryuji":"00","The Master":"0C","Tomahawk":"07","Ushi":"0A","Valerie":"09"}},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EF67B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0209757 0000","80209757 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020B61F 0000","8020B61F 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810ADBDC 3F80"],"options":null}},"36FA35EB-E85E2E36-C:45":{"Always On Fire Team 2\\Player 2":{"note":"","data":["800EC0CF 00??"],"options":{"Always On":"01","Never On":"00"}},"Fire Team 1\\Player 1":{"note":"","data":["800EC0CB 00??"],"options":{"Always On":"01","Never On":"00"}},"Infinite Turbo\\Player 1":{"note":"","data":["810EC12C 42C8","810EC12E 0000"],"options":null},"Infinite Turbo\\Player 2":{"note":"","data":["81DEC164 42C8","81DEC166 0000"],"options":null}},"373F5889-9A6CA80A-C:50":{"Access All\\Chapters, Scenes,\u0026 Multi-Player Characters":{"note":"","data":["50002401 0000","800EA120 00FF"],"options":null},"Access All\\Characters \u0026 Weapons In Multi Race":{"note":"","data":["810EA122 ??FF"],"options":{"All Characters \u0026 Baseball bat":"FF","All Characters \u0026 Bones":"F3","All Characters \u0026 Frying Pan":"FB"}},"Infinite\\Accuracy Count Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game,Once you pick up a Gun a shoot once, you will 100%.","data":["800E0F87 0001"],"options":null},"Infinite\\Bags In Heist":{"note":"","data":["800E1004 00FF"],"options":null},"Infinite\\Bombs":{"note":"","data":["802059EA 0030"],"options":null},"Infinite\\Head Shot Count Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game","data":["800E0F8B 0064"],"options":null},"Infinite\\Health\\Player 1":{"note":"","data":["800CC8BA 0006"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["800CCBE6 270F"],"options":null},"Infinite\\Health\\Player 3":{"note":"","data":["800CCF12 270F"],"options":null},"Infinite\\Health\\Player 4":{"note":"","data":["800CD23E 270F"],"options":null},"Infinite\\Lives Player 1":{"note":"","data":["800D2564 0063"],"options":null},"Infinite\\Max Kills Player 1":{"note":"MULTI ONLY. Only put this code on once you are in the game","data":["800E0F67 03E7"],"options":null},"Infinite\\Oxygen":{"note":"","data":["800CC7A2 0001"],"options":null},"Infinite\\Pots of cash":{"note":"","data":["810D256A FFFF"],"options":null},"Infinite\\Time In Multi":{"note":"","data":["8109019A 7500"],"options":null},"Play as":{"note":"Here you can choose who you want to play as, but only one option at a time. Shadow will not be visible, except when playing as Conker.","data":["800D255F 00??"],"options":{"Army Captain":"25","Bald Caveman":"0C","Caveman":"0D","Combat Squirrel":"04","Conker":"05","Conker the Bat":"24","Dinosaur (Cannot move)":"09","Enemy Bat":"23","Female Villager":"1D","Female Villager (with hood and glasses)":"1F","Female Zombie":"22","Gregg":"27","Male Villager":"11","Male Villager (with cap and glasses and moustache)":"1C","Male Villager (with cap and glasses)":"1A","Male Villager (with cap and moustache)":"1B","Male Villager (with cap)":"19","Male Villager (with glasses and moustache)":"14","Male Villager (with glasses)":"12","Male Villager (with hat and glasses and moustache)":"18","Male Villager (with hat and glasses)":"16","Male Villager (with hat and moustache)":"17","Male Villager (with hat)":"15","Male Villager (with moustache)":"13","Male Zombie":"21","Mohican Caveman":"0E","Neo Conker":"10","Skeleton Gregg":"28","Spikey Caveman":"0F","Tank Vehicle (Cannot move)":"08","Tedi":"03","Tedi Boss":"26","Uga":"0B","Wessle":"01","Wessle (Black outfit)":"02"}},"Press L To Levitate\\Player 1":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042DA5 0020","810CC710 41CB"],"options":null},"Press L To Levitate\\Player 2":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042DAE 0020","810CCA3C 41CB"],"options":null},"Press L To Levitate\\Player 3":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042DB5 0020","810CCD68 41CB"],"options":null},"Press L To Levitate\\Player 4":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D0042DBE 0020","810CD094 41CB"],"options":null},"Wait Animation Trigger":{"note":"","data":["800CC9E8 00??"],"options":{"Default at most":"00","Wait animations disabled":"02"}},"Weapon Select In Multi (On Pick Up)":{"note":"Select what Weapon you would like in Multi Player and then on a Weapon Pickup you will have the weapon of your choice.to change for another just Enable the one of your choice to have that instead.(you must have a weapon already to change for the next.","data":["80180C4B 00??"],"options":{"Buck Shot":"08","Gas Mask":"13","High Powred Riffle With Scope":"0A","Long Pistol with Sight":"06","Nothing":"02","Riffle":"05","Rocket Launcher":"07","Sword":"01","Throwing Knives":"04","Two Automatic Machine Guns":"0C","Yellow Chain-Ssaw":"03"}}},"37FA8F16-5F824D37-C:44":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["811784E0 FFFF","811784E2 FFFF","811784E6 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FCBC 270F"],"options":null}},"39119872-07722E9F-C:45":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2212 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE51F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80382CB7 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","802020F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801DDC55 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801FC5C5 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801EF96D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","80202225 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801D9ABD 0001"],"options":null}},"3918834A-15B50C29-C:45":{"Freeze Timer":{"note":"","data":["800CE4EE 0077"],"options":null},"Have All Charcters \u0026 Levels Unlocked":{"note":"","data":["50000740 0000","800CB951 0001","50000304 0000","800CB945 0001","50000304 0000","800CB985 0001","50000304 0000","800CB9C5 0001","50000304 0000","800CBA05 0001","50000304 0000","800CBA45 0001","50000304 0000","800CBA85 0001"],"options":null},"Max\\Combos Landed":{"note":"","data":["810CE4AA 03E7","810CE4AE 03E7"],"options":null},"Max\\Tricks Landed":{"note":"","data":["810CE4A6 03E7","810CE4A2 03E7"],"options":null},"Max\\Wheels Collected":{"note":"","data":["800CE513 00??"],"options":{"0 Wheels":"00","30 Wheels":"1E","40 Wheels":"28"}},"Zero Crash Counts":{"note":"","data":["800CE49F 0000"],"options":null}},"392A0C42-B790E77D-C:45":{"All Missions Unlocked":{"note":"","data":["810C1F10 000B"],"options":null},"Infinite Ammo":{"note":"","data":["8103A180 2400"],"options":null},"Infinite Health":{"note":"","data":["8105518A 2400"],"options":null}},"399B9B81-D533AD11-C:4A":{"Access\\All Secret Characters":{"note":"","data":["50000C04 0000","80183D6F 0001"],"options":null},"Access\\All Superbikes":{"note":"","data":["50000304 0000","80183D6F 0001"],"options":null},"Access\\All Tracks":{"note":"","data":["50000BD8 0000","80183327 0001"],"options":null},"Always 1st":{"note":"","data":["80171063 0001"],"options":null},"Infinite\\Nitros":{"note":"","data":["81170F02 0003","81170F06 0003"],"options":null},"Infinite\\Shield":{"note":"","data":["81170F2C 42C8"],"options":null},"Max Points":{"note":"","data":["80183DD3 0064"],"options":null},"[Screen Hud Clear]":{"note":"This Fixes the Problem on all Plugins that have Hud covering the Screen.Let the game load 1st before Putting this code on,Or it will give an error and Freeze","data":["80092D1B 0004"],"options":null}},"3A089BBC-54AB2C06-C:0":{"Infinite Health":{"note":"","data":["800794CB 0009"],"options":null}},"3A089BBC-54AB2C06-C:00":{"Infinite Health":{"note":"","data":["800794CB 0009"],"options":null}},"3A4760B5-2D74D410-C:45":{"Character Select":{"note":"","data":["80075F52 00??"],"options":{"Big Head.":"04","Flame Grilled":"08","Normal":"00","Play as Deadwing.":"01"}},"Have All\\Cheats: Book of Shadows":{"note":"","data":["81075F4E 0FFF"],"options":null},"Have All\\Dark Souls Collected":{"note":"","data":["80075F49 0078"],"options":null},"Have All\\Gads \u0026 The Poign":{"note":"","data":["80030E57 000F"],"options":null},"Have All\\Items":{"note":"Youll not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50001B20 0000","80030613 000B"],"options":null},"Have All\\L-Eclipser":{"note":"You will not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50000320 0000","80030973 000B"],"options":null},"Have All\\Levels Unlocked":{"note":"","data":["5000101C 0000","80030A0E 0001"],"options":null},"Infinite\\0.9mm Ammo":{"note":"","data":["81075B3A 0190"],"options":null},"Infinite\\Accumulators":{"note":"","data":["800306D7 0005"],"options":null},"Infinite\\Cadeaux'":{"note":"","data":["81075B36 03E7"],"options":null},"Infinite\\Max Health/Air/Shadow Charge \u0026 Voodoo Power":{"note":"","data":["50000604 0000","81075B16 2710"],"options":null},"Infinite\\Prisms":{"note":"","data":["80030957 0003"],"options":null},"Infinite\\Retractors":{"note":"","data":["800308B7 0003"],"options":null},"Infinite\\Shotgun Shells":{"note":"","data":["80075B2F 0063"],"options":null},"Infinite\\Violator Ammo":{"note":"","data":["81075B32 03E7"],"options":null},"Press L To Levitate":{"note":"Press the L-Button to rise and let go and press again in stages to come back down.","data":["D0059097 0020","80075578 0041"],"options":null},"[Ammo Always Displayed On Screen]":{"note":"","data":["50000408 0000","80075ACD 0007"],"options":null},"[Health Meter Displayed On Screen]":{"note":"","data":["81075B10 0000","81075B12 00FF"],"options":null}},"3A6C42B5-1ACADA1B-C:4A":{"Have All\\Characters Available":{"note":"","data":["8105DEB8 FFFF"],"options":null},"Have All\\Courts Available":{"note":"","data":["8105DEBC FFFF"],"options":null},"Score\\Player 1":{"note":"","data":["8014B1DA 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}},"Score\\Player 2":{"note":"","data":["8014B1DB 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}}},"3B941695-F90A5EEB-C:50":{"Access\\All Gadgets and Items":{"note":"","data":["801147DD 0001"],"options":null},"Access\\All Guns and Weapons":{"note":"This also comes with Ammo","data":["801147DC 0001"],"options":null},"Access\\All Levels \u0026 Difficulties":{"note":"","data":["81103B66 0021","50000D01 0000","80118F38 0001"],"options":null},"Infinite\\Oxygen":{"note":"","data":["800E25E4 0004"],"options":null},"Infinite\\Time":{"note":"","data":["81103B82 0000"],"options":null},"Invincible":{"note":"","data":["811147D8 0101"],"options":null},"Multi Player\\Access All Arenas":{"note":"","data":["801147EB 0001","811147EC 0101","801147EE 0001"],"options":null},"Multi Player\\Access All Evil Skins":{"note":"","data":["50005C0C 0000","800C0167 0081"],"options":null},"Multi Player\\Access All Scenarios":{"note":"","data":["801147EF 0001","811147F0 0101"],"options":null},"Multi Player\\Access All Weapon Modes":{"note":"","data":["811147F2 0101","801147F4 0001"],"options":null},"Multi Player\\Access Evil Q":{"note":"","data":["800C06EF 0081"],"options":null},"Multi Player\\Access Good Q":{"note":"","data":["800C06EF 0001"],"options":null},"Multi Player\\Invincible":{"note":"","data":["811147D8 0101"],"options":null}},"3BA7CDDC-464E52A0-C:4A":{"Widescreen":{"note":"","data":["8102D204 2407","8102D206 018A"],"options":null}},"3C059038-C8BF2182-C:45":{"Enable All\\Cars":{"note":"","data":["80140D1F 003F"],"options":null},"Enable All\\Expert Times":{"note":"","data":["80140D1C 0031"],"options":null},"Enable All\\Tracks":{"note":"","data":["80140D1A 0070"],"options":null},"Unlock Champ":{"note":"","data":["80140D28 0001"],"options":null},"Unlock Cheat Menu":{"note":"","data":["D11B1F14 0000","811B1F14 00FF","811D530A 04FF","D11B1F14 00FF","811B0270 FF03"],"options":null}},"3C1FDABE-02A4E0BA-C:45":{"Single \u0026 VS Mode\\Infinite Misses\\Player 1":{"note":"","data":["80112F9F 0003"],"options":null},"Single \u0026 VS Mode\\Infinite Misses\\Player 2":{"note":"","data":["80116207 0003"],"options":null},"Single \u0026 VS Modes\\Secret Cheat Menu":{"note":"","data":["8011265F 00AD"],"options":null},"Single Player Stage Select":{"note":"","data":["810E12DC 0001"],"options":null}},"3CC77150-21CDB987-C:50":{"Don't Take Any Damage":{"note":"","data":["8104A260 2400"],"options":null},"Enable Cheat Select":{"note":"","data":["80115933 00??"],"options":{"All Weapons With Fast Run":"42","All Weapons With Infinite Ammo":"06","Fast run":"40","Have All Weapons":"02","Infinite Ammo":"04","Infinite Ammo With Fast Run":"44","Invincible":"01","Invincible With All Weapons And Fast Run":"43","Invincible With All Weapons and Ammo and Fast Run":"47","Invincible With Fast Run":"41","Invincible With Infinite Ammo and All Weapons":"07"}},"Enable In-Game Cheat Menu \u0026 Level Select":{"note":"","data":["81115936 014F"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810496D0 2400"],"options":null},"Sound Select\\Music Volume":{"note":"","data":["80115944 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"Sound Select\\SFX Volume":{"note":"","data":["80115945 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"[Press L For Levitate]":{"note":"","data":["D10F7550 0020","816FE35C 43D5"],"options":null}},"3CECBCB8-6126BF07-C:50":{"Big Score":{"note":"","data":["81164E58 8181","81164E5A 8181"],"options":null},"Instant 450kmh Boost":{"note":"Press Trigger Button","data":["D10A1F50 2000","8119D334 005A"],"options":null},"No Checkpoint time":{"note":"","data":["81164E1C 0001"],"options":null}},"3DF17480-193DED5A-C:50":{"Have All\\Levels and Bonus Stages Unlocked":{"note":"Press start in Gyro's Lab and then resume game to see all open","data":["801D6F4C 00FF","801D6F4D 00FF","801D6F4E 00FF","801D6F4F 00FF","801D6F53 00FF"],"options":null},"Have All\\Time Attack \u0026 Toy Hunting Comnpleated (All Levels)":{"note":"Press start in Gyro's Lab and then resume game to see all open","data":["801D6F58 00FF","801D6F59 00FF","801D6F5A 00FF","801D6F5B 00FF","801D6F5C 00FF","801D6F5D 00FF","801D6F5E 00FF","801D6F5F 00FF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["801D6F2E 0063"],"options":null},"Infinite\\99 Stars":{"note":"","data":["801D6F2F 0063"],"options":null},"Infinite\\Time\\Gladstones Time Attack":{"note":"","data":["801D6F27 00FF"],"options":null},"Infinite\\Time\\Nephews Toy Hunting":{"note":"","data":["801D6F23 0063"],"options":null},"Instant\\Carrier Box [Moon Walk] (Press L)":{"note":"Press and hold the L Button and you will run floating of any ledge slowing drifting down. If you keep pressing the A Button while Holding L it will act as a Moon Jump.","data":["D00CAFD1 0020","801C901F 0001"],"options":null},"Instant\\Hyperactive State [Invincible] (Press C-Right)":{"note":"","data":["D00CAFD1 0001","801CE296 0001"],"options":null},"Instant\\Rage Attack (Press C-Left)":{"note":"","data":["D00CAFD1 0002","801CE23D 0001"],"options":null}},"3E198D9E-F2E1267E-C:45":{"99 Total Houses":{"note":"","data":["8106A56A 0063"],"options":null},"Big Newspapers":{"note":"","data":["81268B5A 0001"],"options":null},"Enable Level Select":{"note":"Also accesses All Bonus Levels","data":["8006A5F7 0001"],"options":null},"Infinite Health":{"note":"","data":["8006A5D2 0064"],"options":null},"Infinite Newspapers":{"note":"","data":["81268B12 0001"],"options":null},"Invincibility":{"note":"","data":["812688FE 0001"],"options":null},"Rocket Boosters":{"note":"","data":["81268B3E 0001"],"options":null},"Super Jump Springs":{"note":"","data":["81268B3A 0001"],"options":null},"Turbo Mode":{"note":"","data":["81268B36 0001"],"options":null}},"3E5055B6-2E92DA52-C:45":{"16:9 Widescreen":{"note":"For 16:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81150146 8E39","81150148 3FE3","D10DC532 0001","81150148 4063","D10DC532 0002","81150148 3F63","810946BA 3FE3","810947EE 3FE3"],"options":null},"21:9 Widescreen":{"note":"For 21:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81150146 E38E","81150148 4018","D10DC532 0001","81150148 4098","D10DC532 0002","81150148 3F98","810946BA 4018","810947EE 4018"],"options":null},"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118D8C0 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118D8C2 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118D8C4 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118D8C6 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["50000401 0000","8018ED10 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["80165F5D 00??","80165F8A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["8016603D 00??","8016606A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["8016611D 00??","8016614A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["801661FD 00??","8016622A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["801662DD 00??","8016630A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["801663BD 00??","801663EA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818EDEF 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F6915 0020","810F69C8 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F6925 0020","810F77A0 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F6935 0020","810F8578 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F6945 0020","810F9350 4000"],"options":null},"Sixty Frames (1P Mode)":{"note":"","data":["80000FE3 0000","800014CF 0001"],"options":null},"WIP 60 FPS hack":{"note":"","data":["81001890 2419","81001892 0001","81001894 2419","81001896 0001","80000FE3 0000","800014CF 0001","81001C90 240A","81001C92 0001","81001C94 240A","81001C96 0001","81001A38 2409","81001A3A 0001","81001A3C 2409","81001A3E 0001","80122CBB 001C"],"options":null}},"3EDC7E12-E26C1CC9-C:45":{"Extra Flies":{"note":"","data":["D00A54DF 0000","800A54DF 0032"],"options":null},"Infinite Health":{"note":"","data":["800A54D9 0004"],"options":null},"Sixty Frames":{"note":"Changes an ASM value,too fast.","data":["80031D27 0001"],"options":null},"Start With 50 Remotes":{"note":"","data":["D00A54EB 0000","800A54EB 0032"],"options":null}},"40DFEDA0-3AA09CB2-C:50":{"Infinite Max\\Armour":{"note":"","data":["80145E79 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Max\\Health":{"note":"","data":["81145E6C 4316"],"options":null},"Infinite Max\\Lives (Credits)":{"note":"","data":["8012920B 0009"],"options":null},"Infinite Max\\Sword Use (Press Z)":{"note":"Press The Z Button on your controller to use the infinite Sword Flame effect","data":["80145E81 00??"],"options":{"Off":"00","On":"D0"}},"Level Select":{"note":"","data":["801249B3 00??"],"options":{"01 (Incarceration)":"00","02 (The Dead Shall Rise)":"01","03 (Crush Your Enemies)":"02","04 (Infestation)":"03","05 (The Law of Disorder)":"04","06 (The Abyss)":"05","07 (Darrc Pilgrimage)":"06","08 (Ultimate Sacrifice)":"07","09 (The Dragon Sword)":"08"}},"Setting Options\\Sound\\Format":{"note":"","data":["800FD428 00??"],"options":{"Mono":"00","Stereo":"FF"}},"Setting Options\\Sound\\Game FX":{"note":"","data":["800FD41F 00??"],"options":{"Low":"19","Max":"64","Middle":"32","Off":"00"}},"Setting Options\\Sound\\Music Volume":{"note":"","data":["800FD423 00??"],"options":{"Low":"19","Max":"64","Middle":"32","Off":"00"}},"Setting Options\\Vibration Option":{"note":"","data":["80129202 00??"],"options":{"Off":"00","On":"FF"}},"[Character Select]":{"note":"","data":["800F84F3 00??"],"options":{"Aisha":"02","Cutter":"00","Gouranga":"03","Kailan":"01"}},"[Have 999999 Score]":{"note":"","data":["811458C4 000F","811458C6 423F"],"options":null},"[Press Z for Levitate]":{"note":"","data":["D00DDF88 0020","8014665D 00EF"],"options":null}},"41380792-A167E045-C:45":{"Have All\\Divisions Complete":{"note":"","data":["8008323F 00FF"],"options":null},"Have All\\Sleds Unlocked":{"note":"","data":["8108324E FFFF"],"options":null},"Have All\\Tracks Unlocked":{"note":"","data":["81083252 03FF"],"options":null},"Have\\Max Race Points":{"note":"","data":["8108321E FFFF"],"options":null},"Have\\Max Wrenches (All Sleds)":{"note":"This will give you 100 Wrench Points for all Sledges to boost your stats","data":["50000C01 0000","80083168 0064","50000201 0000","80083177 0064","50000206 0000","8008317C 0064","50000206 0000","80083186 0064","50000301 0000","80083190 0064"],"options":null},"[Continue Tournament]":{"note":"This will allow you to Continue Tournament with All Tracks \u0026 Divisions Unlocked","data":["80083247 00FF"],"options":null}},"4147B091-63251060-C:45":{"All Levels\\Dash Becomes Shorter \u0026 Wider":{"note":"","data":["800BA025 FFFF"],"options":null},"All Levels\\Infinite\\Lives":{"note":"","data":["800E05CB 0064"],"options":null},"All Levels\\Infinite\\Missiles":{"note":"","data":["800E1265 00FF"],"options":null},"All Levels\\Large Mutant Enemies":{"note":"","data":["800BB62B FFFF"],"options":null},"All Levels\\No Clipping\\Off":{"note":"","data":["81111E67 0001"],"options":null},"All Levels\\No Clipping\\On":{"note":"","data":["81111E67 0000"],"options":null},"All Levels\\See Through\\Everything Except Specific Things":{"note":"","data":["800BC665 FFFF"],"options":null},"All Levels\\See Through\\Some Walls":{"note":"","data":["800BC625 FFFF"],"options":null},"All Levels\\Time Always 0:00:02":{"note":"","data":["810E04E8 4000"],"options":null},"All Levels\\Visibililty\\Maximum":{"note":"","data":["800BA62B FFFF"],"options":null},"All Levels\\Visibililty\\Minimum":{"note":"","data":["800BA66B FFFF"],"options":null},"All Stages\\Infinite Health":{"note":"","data":["81072D0C 2400"],"options":null},"All Stages\\Infinite\\Disruptor Ammo":{"note":"","data":["81073F04 2400"],"options":null},"All Stages\\Infinite\\Flame Ammo":{"note":"","data":["81073720 2400"],"options":null},"All Stages\\Infinite\\Jet Pack":{"note":"","data":["81076AAC 2400","81076C58 2400","81076B48 2400"],"options":null},"All Stages\\Infinite\\Pulse Ammo":{"note":"","data":["81074204 2400"],"options":null},"All Stages\\Infinite\\Seeker Ammo":{"note":"","data":["81073A94 2400"],"options":null},"All Stages\\Infinite\\Stunner Ammo":{"note":"","data":["81073BD4 2400"],"options":null},"All Stages\\Invincible":{"note":"","data":["8107A770 2400"],"options":null},"All Stages\\Lasers Never Overheat":{"note":"","data":["81073948 2400"],"options":null},"All Stages\\Upper Lasers":{"note":"Don't Use With Never Overheat Code","data":["81073944 3C06","81073946 4EFF"],"options":null},"Press GS For Pink Cheat Debug Screen":{"note":"","data":["890D01BF 0001"],"options":null}},"417DD4F4-1B482FE2-C:45":{"1 Round To Win Player 1":{"note":"","data":["D01050F3 0000","801050F3 0001"],"options":null},"99 Wins Player 1":{"note":"","data":["800FE27F 0063"],"options":null},"Big Head Mode":{"note":"","data":["80048CB5 0001"],"options":null},"Infinite\\Credits":{"note":"","data":["800493BF 00FF"],"options":null},"Infinite\\Health Player 1":{"note":"","data":["810FE0D8 0001","810FE0DA 0000"],"options":null},"Infinite\\Health Player 2":{"note":"","data":["81126F54 0001","81126F56 0000"],"options":null},"Infinite\\Time":{"note":"","data":["8010511B 0063"],"options":null},"Play\\As Goro Player 1":{"note":"","data":["800FE293 000F"],"options":null},"Play\\As Noob Saibot Player 1":{"note":"","data":["800FE293 0011"],"options":null}},"418BDA98-248A0F58-C:50":{"All 52 Gold Gems Collected":{"note":"","data":["80163640 0003","80163641 007E","80163642 00FF","80163643 00EF","80163644 00FF","80163645 007F","80163646 00FF","80163647 00FC"],"options":null},"All Stages \u0026 Chapters Unlocked":{"note":"","data":["80163648 003B"],"options":null},"Infinite\\Health\\Marina":{"note":"","data":["810E1120 03E8"],"options":null},"Infinite\\Health\\Teran":{"note":"","data":["810E5DA0 03E8"],"options":null},"Infinite\\Max Red Gems":{"note":"","data":["81169C66 270F"],"options":null},"Level Select":{"note":"To access this anytime during game, press L+R+Z to enable the menu. Press D-Pad Up / Down to move through the menu, D-Pad Left / Right to change level digits and then press Start to enter level. Don not do this whhile in pause mode (Start Button Pause) or the game will freeze.","data":["D10B0878 2030","800B0871 0004"],"options":null}},"41B25DC4-1B726786-C:45":{"Access All Bonus Cars":{"note":"","data":["50000302 0000","800985C3 0001","50000302 0000","800985CB 0001"],"options":null},"Always 1st Place":{"note":"","data":["810A5F70 0001"],"options":null},"Infinite Time":{"note":"","data":["810CE76E 03E7"],"options":null},"Max Points":{"note":"","data":["800CE743 FFFF"],"options":null},"Speedometer Select":{"note":"","data":["800CE803 00??"],"options":{"KM/H":"00","MPH":"01"}},"Start On Lap Modifier":{"note":"","data":["D00A5F75 0000","810A5F74 00??"],"options":{"Lap 1":"01","Lap 2":"02","Lap 3":"03","Lap 4":"04","Lap 5":"06","Lap 6":"06","Last Lap from Start":"07","Normal":"00"}},"Track Direction Unlocked (All Levels)":{"note":"","data":["800A4171 0003"],"options":null}},"41F2B98F-B458B466-C:45":{"All levels Complete":{"note":"","data":["50004002 0000","810A2218 0001"],"options":null},"Carrington Institute\\Have 255 targets destroyed":{"note":"","data":["810B1E34 00FF"],"options":null},"Carrington Institute\\Have 999 points in Firing Range":{"note":"","data":["810B1E32 03E7"],"options":null},"Carrington Institute\\Have Infinite time in Firing Range":{"note":"","data":["810B1E2E 004D"],"options":null},"Have All\\Weapons\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80207F10 0007","801EEF10 0007","801D5F10 0007"],"options":null},"Have All\\Weapons\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80209B80 0007","801F0B80 0007","801D7B80 0007"],"options":null},"Infinite Ammo\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8020769F 00FF","801EE69F 00FF","801D569F 00FF","80206EFB 00FF","801EDEFB 00FF","801D4EFB 00FF"],"options":null},"Infinite Ammo\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8020930F 00FF","801F030F 00FF","801D730F 00FF","80208B6B 00FF","801EFB6B 00FF","801D6B6B 00FF"],"options":null},"Infinite Health\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8120677C 3F80","811ED77C 3F80","811D477C 3F80"],"options":null},"Infinite Health\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["812083EC 3F80","811EF3EC 3F80","811D63EC 3F80"],"options":null},"Infinite Shield\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81206790 3F80","811E4950 3F80","811CB950 3F80"],"options":null},"Infinite Shield\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["811FF5C0 3F80","811E65C0 3F80","811CD5C0 3F80"],"options":null},"Multi\\Press B To Levitate\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7E4 0040","811BB720 40F2","D009C7E4 0040","801BB6D3 0000"],"options":null},"Multi\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7EC 0040","811BD390 40F2","D009C7EC 0040","801BD343 0000"],"options":null},"Multi\\Press B To Levitate\\Player 3":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7F4 0040","811BF000 40F2","D009C7F4 0040","801BEFB3 0000"],"options":null},"Multi\\Press B To Levitate\\Player 4":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7FC 0040","811C0C70 40F2","D009C7FC 0040","801C0C23 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7E4 0040","81206720 40F2","D009C7E4 0040","802066D3 0000","D009C7E4 0040","811ED720 40F2","D009C7E4 0040","801ED6D3 0000","D009C7E4 0040","811D4720 40F2","D009C7E4 0040","801D46D3 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7EC 0040","81208390 40F2","D009C7EC 0040","80208343 0000","D009C7EC 0040","811EF390 40F2","D009C7EC 0040","801EF343 0000","D009C7EC 0040","811D6390 40F2","D009C7EC 0040","801D6343 0000"],"options":null},"The Ultimate All In One":{"note":"The Ultimate All In One activate's solo missions, give all medals on solo missions, activate cheats, activate cinemas, and who knows what else. I just don't have the time to identify these codes. I know that some of this is creditted to Zap2. I don't have the time to cut those codes out.","data":["800884F3 0001","8008850E 0001","80088575 0001","50000302 0000","80088572 0001","8008858C 0001","8008858D 0001","800885A6 0001","800885A9 0001","800885C0 0001","800885DA 0001","800885DC 0001","800885F4 0001","800885F5 0001","8008860E 0001","80088610 0001","80088612 0001","80088628 0001","50000501 0000","80088642 0001","50000501 0000","8008865C 0001","50000501 0000","80088676 0001","50000501 0000","80088690 0001","50000501 0000","800886AA 0001","50000501 0000","800886C4 0001","50000501 0000","800886DE 0001","50000501 0000","800886F8 0001","50000501 0000","80088712 0001","50000501 0000","8008872C 0001","50000501 0000","80088746 0001","50000501 0000","80088760 0001","50000501 0000","8008877A 0001","50000501 0000","80088794 0001","50000501 0000","800887AE 0001","800A2219 0001","50003E02 0000","800A221D 0001","50000B01 0000","800ACCC9 0001","50000901 0000","800ACCD5 0001","50000401 0000","800ACCDF 0001","50000301 0000","800ACCE4 0001","800ACCE8 0001","800ACCE9 0001","800ACCEB 0001","800ACCEC 0001","50000901 0000","800ACCEE 0001","800ACCF8 0001","50002101 0000","800ACCFA 0001","800ACD12 0001","800ACD15 0001","800ACD16 0001","800ACDEA 0001","800ACD3A 0001"],"options":null}},"4222D89F-AFE0B637-C:45":{"Always Gets Bubbles\\Player 1":{"note":"","data":["800ECE59 0007"],"options":null},"Always Gets Bubbles\\Player 2":{"note":"","data":["800ECF49 0007"],"options":null},"Always Gets Bubbles\\Player 3":{"note":"","data":["801588B1 0007"],"options":null},"Always Gets Bubbles\\Player 4":{"note":"","data":["801589A1 0007"],"options":null},"Ceiling Never Drops\\Player 1":{"note":"","data":["810ECDEE 0000"],"options":null},"Ceiling Never Drops\\Player 2":{"note":"","data":["810ECEDE 0000"],"options":null},"Ceiling Never Drops\\Player 3":{"note":"","data":["81158846 0000"],"options":null},"Ceiling Never Drops\\Player 4":{"note":"","data":["81158974 0000"],"options":null},"Infinite Time To Set Pieces\\Player 1":{"note":"","data":["810ECE2C 0000"],"options":null},"Infinite Time To Set Pieces\\Player 2":{"note":"","data":["810ECF1C 0000"],"options":null},"Infinite Time To Set Pieces\\Player 3":{"note":"","data":["81158884 0000"],"options":null},"Infinite Time To Set Pieces\\Player 4":{"note":"","data":["81158936 0000"],"options":null},"Never Gets Bubbles\\Player 1":{"note":"","data":["800ECE59 0000"],"options":null},"Never Gets Bubbles\\Player 2":{"note":"","data":["800ECF49 0000"],"options":null},"Never Gets Bubbles\\Player 3":{"note":"","data":["801588B1 0000"],"options":null},"Never Gets Bubbles\\Player 4":{"note":"","data":["801589A1 0000"],"options":null}},"423E96F4-CE88F05B-C:45":{"Always Have\\BFG 9000":{"note":"","data":["8006338B 0001"],"options":null},"Always Have\\Bio Suite":{"note":"","data":["80063333 00??"],"options":{"Off":"00","On":"FF"}},"Always Have\\Chain Gun":{"note":"","data":["8006337F 0001"],"options":null},"Always Have\\Chainsaw":{"note":"","data":["8006336B 0001"],"options":null},"Always Have\\Double Shotgun":{"note":"","data":["8006337B 0001"],"options":null},"Always Have\\Gun":{"note":"","data":["80063373 0001"],"options":null},"Always Have\\Have Rocket Launcher":{"note":"","data":["80063381 0001"],"options":null},"Always Have\\Laser Weapon":{"note":"","data":["8006338F FFFF"],"options":null},"Always Have\\Missile Launcher":{"note":"","data":["80063383 0001"],"options":null},"Always Have\\Plasma Rifle":{"note":"","data":["80063387 0001"],"options":null},"Always Have\\Shotgun":{"note":"","data":["80063377 0001"],"options":null},"Berserk Mode":{"note":"","data":["8006332B 00FF"],"options":null},"Enable Cheat Menu":{"note":"","data":["8005A883 0001"],"options":null},"Have All Keys":{"note":"","data":["8006333F 0001","80063343 0001","80063344 0001","80063353 0001","8006334F 0001","80063348 0001"],"options":null},"Infinite\\Ammo All Weapons":{"note":"","data":["80063393 00FF","80063397 00FF","8006339B 00FF","8006339F 00FF"],"options":null},"Infinite\\Armor":{"note":"","data":["8006331F 00FF"],"options":null},"Invincible":{"note":"","data":["800633BB 0002"],"options":null},"Invincible And Map Markers":{"note":"","data":["800633BB 0006"],"options":null},"Rapid Fire":{"note":"","data":["810633EA 0B94"],"options":null},"Turn Map Markers On":{"note":"","data":["800633BB 0004"],"options":null},"[Max Brightness]":{"note":"Enable this cheat on rom load to have Max Brightness (internal) and then put Jabo d3d8 on 160% Max for a extra brightness Boost.","data":["8005A878 0064"],"options":null}},"4248BA87-99BE605D-C:00":{"Always Have 0 kcal (Player 1)":{"note":"","data":["812FFBF2 0000"],"options":null},"Infinite 9 Credits":{"note":"","data":["802D9DDF 0009"],"options":null},"Player 2 has High kcal":{"note":"","data":["812FFC4E FFFF","812FFC4F FFFF"],"options":null}},"4252A5AD-AE6FBF4E-C:45":{"Infinite Coins P1":{"note":"","data":["8119ADEE 03E7"],"options":null},"Infinite Gold P1":{"note":"","data":["81088286 03E7"],"options":null},"Infinite Gold P2":{"note":"","data":["8119ADEE 03E7"],"options":null},"Infinite Health P1":{"note":"","data":["80088284 0003"],"options":null},"Infinite Health P2":{"note":"","data":["81088290 03E7"],"options":null},"Infinite Lives P1":{"note":"","data":["80088283 0003"],"options":null},"Infinite Lives P2":{"note":"","data":["8008828D 0003"],"options":null},"Open All Levels":{"note":"","data":["50002D02 0000","810882AA 0303"],"options":null}},"42CF5EA3-9A1334DF-C:50":{"All levels complete":{"note":"","data":["800D1364 000C","50000501 0000","800D1365 000A"],"options":null},"Infinite Vespene gas,minerals \u0026 Most missions":{"note":"","data":["50003202 0000","800B1D96 00FF"],"options":null}},"4446FDD6-E3788208-C:45":{"Extra Gems":{"note":"","data":["D0165241 0000","80165241 004B"],"options":null},"Full\\Bomb Power":{"note":"","data":["8016523F 0003"],"options":null},"Full\\Fire Power":{"note":"","data":["80165240 0003"],"options":null},"Infinite\\Health":{"note":"","data":["80165244 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["80165243 0009"],"options":null},"Lagfix":{"note":"For consistent 60fps.","data":["8004A822 000D"],"options":null},"Max\\Bombs":{"note":"","data":["8016523F 0008"],"options":null},"Max\\Explosion":{"note":"","data":["80165240 0008"],"options":null},"Max\\Score":{"note":"","data":["80177608 FFFF"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D005A455 0020","81154178 41CB","D005A455 0020","D0154154 0000","80154154 0040"],"options":null},"Widescreen":{"note":"","data":["81036E94 3C07","81036E96 3FE3"],"options":null}},"44995484-20A5FC5E-C:4A":{"99 Points":{"note":"","data":["801D8E13 0063"],"options":null},"Always First Place":{"note":"","data":["801D040F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801D06F3 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801D06CE 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801D0537 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801D0B5A 0005","801D0DFA 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801D053F 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800E84C3 0007"],"options":null},"Super Speed":{"note":"","data":["801D0537 0005","D0161DC1 0010","801D0537 0020"],"options":null}},"46039FB4-0337822C-C:45":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D6BE0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112E7DE 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800ECA18 0064"],"options":null},"Game 100% Complete\\Save Slot 2":{"note":"","data":["800ECA70 0064"],"options":null},"Game 100% Complete\\Save Slot 3":{"note":"","data":["800ECAC8 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D6BC0 0001","50001701 0000","800D6BC8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D6E50 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D714F 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D6BB9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D6BBA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D6BBB 0003"],"options":null},"Widescreen":{"note":"","data":["8101B0E0 0801","8101B0E2 0344","81040D10 3C1B","81040D12 3F40","81040D14 449B","81040D16 2000","81040D18 0800","81040D1A 6C3A","81040D1C 4604","81040D1E 4202"],"options":null}},"46A3F7AF-0F7591D0-C:45":{"Always Place 1st\\Player 1":{"note":"","data":["81065174 0000"],"options":null},"Infinite\\Continues":{"note":"","data":["8107F850 00FF"],"options":null},"Infinite\\Nitros\\Player 1":{"note":"","data":["800BE7FD 00FF"],"options":null},"Infinite\\Time":{"note":"","data":["810802D4 4296"],"options":null},"Unlock All Cars":{"note":"","data":["8104F10E FFFF"],"options":null}},"49088A11-6494957E-C:45":{"Access In-Game Cheat Menu":{"note":"","data":["8111AADC FFFF","8111AADE FFFF"],"options":null},"Player 1\\99 Gems":{"note":"","data":["812FC4C8 0063","806FE2F8 0063"],"options":null},"Player 1\\Have All\\Keys,Nuke,Evrything":{"note":"Only enable once in game or it will freeze before you get into the start menu","data":["802FC602 0030","802FC60C 0030","802FC616 0030","802FC620 0030","50000601 0000","802FC634 0030","50000501 0000","802FC648 0030","50000401 0000","802FC65C 0030","50000601 0000","802FC99C 0030","802FC4E0 0033","802FC4E5 0033","802FC4EA 0033","802FC594 0033","802FC530 0033","802FC53A 0033","802FC53B 0033","802FC5B0 0033","802FC5B1 0033","802FC5B2 0033","802FC5B3 0033","806FE432 0030","806FE43C 0030","806FE446 0030","806FE450 0030","50000601 0000","806FE464 0030","50000501 0000","806FE478 0030","50000501 0000","806FE48C 0030","50000601 0000","806FE4CC 0030","806FE310 0033","806FE315 0033","806FE31A 0033","806FE360 0033","806FE36A 0033","806FE36B 0033","806FE3C4 0033","50000401 0000","806FE3E0 0033","50000601 0000","8059D61A 0001","50000D01 0000","8059D620 0001","50000401 0000","8059D62E 0001"],"options":null},"Player 1\\Have All\\Weapons":{"note":"","data":["D12FC912 0000","812FC912 0101","D12FC914 0000","812FC914 0101","D12FC916 0000","812FC916 0101","D12FC918 0000","812FC918 0101","D12FC91A 0000","812FC91A 0101","D12FC91C 0000","812FC91C 0101","D12FC91E 0000","812FC91E 0101","D12FC920 0000","812FC920 0101","D12FC922 0000","812FC922 0101","D12FC924 0000","812FC924 0101","D12FC926 0000","812FC926 0101","D12FC928 0000","812FC928 0101","D12FC92A 0000","812FC92A 0101","D12FC92C 0000","812FC92C 0101","D12FC92E 0000","812FC92E 0101","D12FC930 0000","812FC930 0101","D12FC932 0000","812FC932 0101","806FE742 0001","806FE743 0001","806FE744 0001","806FE745 0001","806FE746 0001","806FE747 0001","806FE748 0001","806FE749 0001","806FE74A 0001","806FE74B 0001","806FE74C 0001","806FE74D 0001","806FE74E 0001","806FE74F 0001","806FE750 0001","806FE751 0001","806FE752 0001","806FE753 0001","806FE754 0001","806FE756 0001","806FE757 0001","806FE758 0001","806FE759 0001","806FE75A 0001","806FE75B 0001","806FE75C 0001","806FE75E 0001","806FE75F 0001","806FE760 0001","806FE761 0001","806FE762 0001","806FE763 0001","806FE764 0001"],"options":null},"Player 1\\Infinite\\Ammo":{"note":"","data":["802FC499 0000","50000302 0000","812FC8D4 0063","812FC8DE 0063","812FC8E2 0063","50000A02 0000","812FC8E6 0063","50000302 0000","816FE704 0063","816FE70E 0063","816FE712 0063","50000802 0000","816FE716 0063","816FE72C 0063","816FE730 0063"],"options":null},"Player 1\\Infinite\\Health":{"note":"","data":["812FC4C6 0064","816FE2F6 6400"],"options":null},"Player 2\\99 Gems":{"note":"","data":["812F7240 0063"],"options":null},"Player 2\\Infinite\\Ammo":{"note":"","data":["50000602 0000","812F767C 0063","812F764C 013C","812F764E 013C","50000302 0000","812F7654 013C","812F7660 013C","812F7664 013C","812F766A 013C","812F766C 013C","812F7674 013C","812F7678 013C","8159D5DC 013C","8159D5DE 013C","8159D5E4 013C","8159D5E8 013C","8159D5EA 013C","8159D5F0 013C","8159D5F4 013C","8159D5FA 013C","8159D5FC 013C","8159D604 013C","8159D608 013C","50000602 0000","8159D60C 013C"],"options":null},"Player 2\\Infinite\\Health":{"note":"","data":["812F723E 0064","8059D1CE 0064"],"options":null},"Sixty Frames":{"note":"","data":["80087CE7 0001","80087D6B 0001","80087E3B 0001","80087F37 0001","80087FBB 0001"],"options":null}},"492B9DE8-C6CCC81C-C:50":{"Have 231 Marbles":{"note":"","data":["D00EBE53 0000","800EBE53 03E7"],"options":null},"Have All Gold Udders":{"note":"","data":["50002802 0000","810C80BA 0101"],"options":null},"Infinite\\Ammo\\Banana Peel Bomb":{"note":"","data":["810C6976 0064"],"options":null},"Infinite\\Ammo\\Blaster":{"note":"","data":["810C6916 0064"],"options":null},"Infinite\\Ammo\\Boomerang Knives":{"note":"","data":["810C691E 0064"],"options":null},"Infinite\\Ammo\\Butcher Knife Gun":{"note":"","data":["800C887F 0064"],"options":null},"Infinite\\Ammo\\Chickens":{"note":"","data":["810C69BE 0064"],"options":null},"Infinite\\Ammo\\Green Slimer":{"note":"","data":["810C69A6 0064"],"options":null},"Infinite\\Ammo\\Laser":{"note":"","data":["810C698E 0064"],"options":null},"Infinite\\Ammo\\Lepricon Gun":{"note":"","data":["800C8897 0064"],"options":null},"Infinite\\Ammo\\Mushrooms":{"note":"","data":["810C6936 0064"],"options":null},"Infinite\\Ammo\\Music Gun":{"note":"","data":["810C6906 0064"],"options":null},"Infinite\\Ammo\\Pistol":{"note":"","data":["800C8777 0064"],"options":null},"Infinite\\Ammo\\Rocket Launcher":{"note":"","data":["810C6946 0064"],"options":null},"Infinite\\Ammo\\Shotgun":{"note":"","data":["810C69EE 0064"],"options":null},"Infinite\\Ammo\\Sniper Chicken":{"note":"","data":["800C881F 0064"],"options":null},"Infinite\\Health":{"note":"","data":["800C876F 0064"],"options":null},"Infinite\\Lives":{"note":"","data":["800C8773 0064"],"options":null}},"492F4B61-04E5146A-C:45":{"99 Points":{"note":"","data":["801CB343 0063"],"options":null},"Always First Place":{"note":"","data":["801C293F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801C2C03 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801C2BFE 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801C2A67 0005","8013FC91 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801C308A 0005","801C392D 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801C2A6F 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800DA9D3 0007"],"options":null},"Open\\Course Option":{"note":"This works in all modes except for Championship Mode.","data":["800DA9D3 00??"],"options":{"Dolphin Park":"00","Drake Lake":"03","Glacier Coast":"07","Marian Fortress":"04","Port Blue":"05","Southern Island":"08","Sunny Beach":"01","Sunset Bay":"02","Twilight City":"06"}},"Open\\Difficulty Option":{"note":"","data":["801CB260 00??"],"options":{"Dolphin":"10","Dolphin \u0026 Expert":"12","Dolphin \u0026 Hard":"11","Dolphin Hard \u0026 Expert":"13","Expert":"02","Hard":"01","Hard \u0026 Expert":"03"}},"Open\\Level Option":{"note":"","data":["801CB26B 00??"],"options":{"Above \u0026 Drake Lake":"03","All Above \u0026 Glacier Coast":"16","All Above \u0026 Marine Fortress":"04","All Above \u0026 Port Blue":"05","All Above \u0026 Southern Island":"06","All Above \u0026 Twilight City":"0D","Sunset Bay":"02"}},"Super Speed":{"note":"","data":["801C2A67 0005","D01CE659 0010","801C2A67 0020"],"options":null}},"4998DDBB-F7B7AEBC-C:45":{"Agility":{"note":"","data":["800A973D 0001"],"options":null},"Auto Win Scenario":{"note":"","data":["800A9741 0001"],"options":null},"Debug Menu":{"note":"","data":["800A9740 0001"],"options":null},"Double MPG":{"note":"","data":["800A9735 0001"],"options":null},"Infinite\\Ammo":{"note":"","data":["800A9731 0001"],"options":null},"Infinite\\Attempts":{"note":"","data":["800A9732 0001"],"options":null},"Infinite\\Chaingun":{"note":"","data":["800A9737 0001"],"options":null},"Infinite\\Fuel":{"note":"","data":["800A9733 0001"],"options":null},"Infinite\\Lives":{"note":"","data":["800A5DF0 0009"],"options":null},"Infinite\\Missiles":{"note":"","data":["800A9739 0001"],"options":null},"Infinite\\Rockets":{"note":"","data":["800A9738 0001"],"options":null},"Infinite\\Wingtips":{"note":"","data":["800A973A 0001"],"options":null},"Invulnerability":{"note":"","data":["800A9730 0001"],"options":null},"Level Skip":{"note":"","data":["800A973F 0001"],"options":null},"Max Armor Increased 50%":{"note":"","data":["800A973C 0001"],"options":null},"Overhead View":{"note":"","data":["800A973E 0001"],"options":null},"Play Mission\\1":{"note":"","data":["800A5DF1 0000"],"options":null},"Play Mission\\2":{"note":"","data":["800A5DF1 0001"],"options":null},"Play Mission\\3":{"note":"","data":["800A5DF1 0002"],"options":null},"Play Mission\\4":{"note":"","data":["800A5DF1 0003"],"options":null},"Play Mission\\5":{"note":"","data":["800A5DF1 0004"],"options":null},"Play Mission\\6":{"note":"","data":["800A5DF1 0005"],"options":null},"Quad Damage":{"note":"","data":["800A9736 0001"],"options":null},"Stealth Mode":{"note":"","data":["800A9734 0001"],"options":null},"Wingtips Do Double Damage":{"note":"","data":["800A973B 0001"],"options":null}},"49E46C2D-7B1A110C-C:4A":{"Have 1 Star\\Abdul":{"note":"","data":["80306A13 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["80306A0F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80306A12 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80306A11 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80306A14 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80306A10 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["80306A0E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80306A15 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80306A16 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["80208F61 0000","80203E83 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["80203E87 0000","8020AE29 0000"],"options":null},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EED3B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0208E17 0000","80208E17 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020ACDF 0000","8020ACDF 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810AD29C 3F80"],"options":null}},"4A997C74-E2087F99-C:50":{"Extreme Mode":{"note":"","data":["8111D332 0003"],"options":null},"Infinite Armour\\Player One":{"note":"","data":["8011D65F 0064"],"options":null},"Infinite Armour\\Player Two":{"note":"","data":["8011D663 0064"],"options":null},"Infinite Bombs\\Player One":{"note":"","data":["8011D667 0003"],"options":null},"Infinite Bombs\\Player Two":{"note":"","data":["8011D66B 0003"],"options":null},"Level 11 Vulcan Cannon\\Player One":{"note":"","data":["80123BAB 000A"],"options":null},"Level 11 Vulcan Cannon\\Player Two":{"note":"","data":["80123BCB 000A"],"options":null},"Level Select":{"note":"","data":["81123E16 000C"],"options":null},"Max Score":{"note":"","data":["81123B82 FC9A"],"options":null}},"4BCDFF47-AAA3AF8F-C:45":{"Have All Items":{"note":"","data":["50000501 0000","80389C4A 0001","50000301 0000","80389C51 0001","80389C5A 0001","80389C5B 0001","80389C5D 0001","50000E01 0000","80389C60 0001"],"options":null},"Have Exp Points":{"note":"","data":["80389C49 0063"],"options":null},"Have Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C3F 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C45 0001","81389C46 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C3E 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C49 0063"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C48 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the GS button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C90 ????","89389C92 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CED 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C88 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C88 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C3D 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C42 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"4C261323-4F295E1A-C:44":{"Access Level Select":{"note":"On the main menu Scroll down to make CHEATS visible to go into Level Select.For in-Game Cheats,Pause gameplay.","data":["810DD50C 8001"],"options":null},"Have\\All TARZAN Letters":{"note":"","data":["800DD515 00FF"],"options":null},"Have\\Coins Collected 100%":{"note":"","data":["800DD547 0064"],"options":null},"Have\\Full Portrait":{"note":"","data":["800DD514 00FF"],"options":null},"Have\\Level \u0026 Tokens Completed 100%":{"note":"","data":["800DD51F 0000","800DD520 0001","800DD521 0000"],"options":null},"Infinite\\Bonus Timer":{"note":"This is For All Timers on Bonus Levels","data":["801736DE 0025"],"options":null},"Infinite\\Green Weapon":{"note":"","data":["811921F6 0063"],"options":null},"Infinite\\Health":{"note":"","data":["81192320 0120"],"options":null},"Infinite\\Lives":{"note":"","data":["800DD542 00??"],"options":{"3 Lives":"03","99 Lives":"63"}},"Infinite\\Purple Weapon":{"note":"","data":["811921FA 0063"],"options":null},"Infinite\\Red Weapon":{"note":"","data":["811921F8 0063"],"options":null},"Press GS For\\Sabor Attacks\\Sabor 1 Hit Kill":{"note":"","data":["8924A23E 0001"],"options":null}},"4C52BBB2-CEAB0F6B-C:45":{"Always Play Level Modifier":{"note":"","data":["800B254C 00??"],"options":{"Mission 1-Plastic Pandemonium":"00","Mission 10-The Melting Pot":"09","Mission 11-River Rapids Riot":"0A","Mission 12-Nighttime Teddy":"0B","Mission 13-Demolition Time":"0C","Mission 14-Pick Up The Pieces":"0D","Mission 15-Have An Ice Day":"0E","Mission 16-Plastro's Revenge":"0F","Mission 17-Bug Hunt: Chew Chew Bug-B-Q":"10","Mission 18-Bug Hunt: Crispy Critters":"11","Mission 19-Flag-Nab-It: Fort Frenzy":"12","Mission 2-Going Car-razy":"01","Mission 20-Flag-Nab-it: Freezer Burn":"13","Mission 21-Food Fight: Picnic Panic":"14","Mission 22-Food Fight: Cherry Surprise":"15","Mission 23-Rescue: Don't Feed The Crabs":"16","Mission 24-Rescue: Tide Pool Terror":"17","Mission 3-The Train That Could":"02","Mission 4-Tan Terror-Tory":"03","Mission 5-Bug Bath":"04","Mission 6-Uninvited Guests":"05","Mission 7-Ants In The Pants":"06","Mission 8-Saucer Attack":"07","Mission 9-The Heat is On":"08"}},"Co-Pilot Modifier":{"note":"","data":["800B245C 00??"],"options":{"Lt. Dave Parker \"Rawhide\"":"02","Lt. Felicity Wannamaker \"Bombshell\"":"03","Lt. James Marshall \"Woodstock\"":"00","Lt. John Lawless \"Hardcore\"":"01","Sergeant Hawk \"Sarge\" (Hidden Character)":"04"}},"Helicopter Modifier":{"note":"","data":["800B2534 00??"],"options":{"Apache (Hidden)":"04","Chinook (Hidden)":"02","Huey":"01","Super Stallion (Hidden)":"03"}},"Start On Play Level Modifier":{"note":"","data":["D00B254C 0000","800B254C 00??"],"options":{"Mission 1-Plastic Pandemonium":"00","Mission 10-The Melting Pot":"09","Mission 11-River Rapids Riot":"0A","Mission 12-Nighttime Teddy":"0B","Mission 13-Demolition Time":"0C","Mission 14-Pick Up The Pieces":"0D","Mission 15-Have An Ice Day":"0E","Mission 16-Plastro's Revenge":"0F","Mission 17-Bug Hunt: Chew Chew Bug-B-Q":"10","Mission 18-Bug Hunt: Crispy Critters":"11","Mission 19-Flag-Nab-It: Fort Frenzy":"12","Mission 2-Going Car-razy":"01","Mission 20-Flag-Nab-it: Freezer Burn":"13","Mission 21-Food Fight: Picnic Panic":"14","Mission 22-Food Fight: Cherry Surprise":"15","Mission 23-Rescue: Don't Feed The Crabs":"16","Mission 24-Rescue: Tide Pool Terror":"17","Mission 3-The Train That Could":"02","Mission 4-Tan Terror-Tory":"03","Mission 5-Bug Bath":"04","Mission 6-Uninvited Guests":"05","Mission 7-Ants In The Pants":"06","Mission 8-Saucer Attack":"07","Mission 9-The Heat is On":"08"}},"Unlock All Planes":{"note":"","data":["810B252A 0105"],"options":null}},"4D3ADFDA-7598FCAE-C:50":{"Infinite Energy\\Player 1":{"note":"","data":["80254A76 001E","8025CCF6 001E"],"options":null},"Infinite Energy\\Player 2":{"note":"","data":["80257B86 001E","80260846 001E"],"options":null},"Infinite Energy\\Player 3":{"note":"","data":["8025ACA6 001E","802637A6 001E"],"options":null},"Infinite Energy\\Player 4":{"note":"","data":["8025E0E6 001E","80266B76 001E"],"options":null}},"4D3E622E-9B828B4E-C:4A":{"Always 1st Place":{"note":"","data":["802C4BC2 0001"],"options":null},"Have Boost From Start":{"note":"","data":["D02C4DAC 003F","802C4925 0050"],"options":null},"Infinite Lives":{"note":"","data":["800E5AA9 0005"],"options":null},"Player 1\\Infinite Shield":{"note":"","data":["812C4B48 4336","812C4B4C 4336"],"options":null},"Time Always 00.00.00 1st Place":{"note":"","data":["802C4BC0 0000","802C4BC2 0001"],"options":null},"Unlock Everything":{"note":"","data":["800CD428 0001"],"options":null}},"4D486681-AB7D9245-C:50":{"Access All Levels":{"note":"Must be used with Access Wampa Stompa","data":["810DE2EA 0004"],"options":null},"Access In-Game Cheat Menu":{"note":"Pause gameplay and pink text will appear in top screen. scroll with multiple buttons and select with 'A'","data":["D10DDE2E 0001","810D3F32 0001","D10DDE14 0002","810D3F32 0001","D10E28D4 0011","810D3F32 0001","D10E28D4 0011","810D3F32 0001"],"options":null},"Access Wampa Stompa":{"note":"Important To Get All Codes To Work! Select empty file \"Wampa Stompa\" will now be your playername.","data":["8118D4E8 2057","8118D4EA 616D","8118D4EC 7061","8118D4EE 2020","8118D4F0 5374","8118D4F2 6F6D","8118D4F4 7061"],"options":null},"Extra Jump Power":{"note":"","data":["810E2220 3F92"],"options":null},"Freeze Timer":{"note":"","data":["810E2230 4018"],"options":null},"Max Challenge Points":{"note":"","data":["8118F370 000F"],"options":null}},"4D79D316-E8501B33-C:45":{"Bonus Menu Games\\Infinite Time\\Escape Race 100 \u0026 200\\Player 1":{"note":"","data":["811BD3B6 000A"],"options":null},"Bonus Menu Games\\Infinite Time\\Escape Race 100 \u0026 200\\Player 2":{"note":"","data":["811BD3BA 000A"],"options":null},"Bonus Menu Games\\Max\\Points\\Disc Hunter\\Player 1":{"note":"","data":["801BD3E9 00FF"],"options":null},"Bonus Menu Games\\Max\\Points\\Disc Hunter\\Player 2":{"note":"","data":["801BD3EB 00FF"],"options":null},"Bonus Menu Games\\Max\\Wins\\Sunset \u0026 Sunrise Showdown\\Player 1":{"note":"","data":["801BC25F 00FF"],"options":null},"Choose Stage\\VS. Mode":{"note":"","data":["800ED6CF 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06","Stage 8 (Hidden Stage)":"07","Stage 9 (Hidden Stage)":"08","Stage A (Hidden Stage)":"09"}},"Infinite\\Health\\Player 1":{"note":"","data":["8112CD46 270F"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["8114D2C6 270F"],"options":null},"Infinite\\Stun Meter\\Player 1":{"note":"","data":["8012CD49 00FF"],"options":null},"Infinite\\Stun Meter\\Player 2":{"note":"","data":["8014D2C9 00FF"],"options":null},"Infinite\\Time":{"note":"","data":["80102A94 000A"],"options":null},"Play As\\Player 1":{"note":"","data":["801BE2A4 00??"],"options":{"Airazor":"03","Cheetor":"02","Megatron":"04","Optimus Primal":"00","Rattrap":"01","Tarantulas":"05","Terrorsaur":"07","Waspinator":"06"}},"Play As\\Player 2":{"note":"","data":["801BE2A5 00??"],"options":{"Airazor":"03","Cheetor":"02","Megatron":"04","Optimus Primal":"00","Rattrap":"01","Tarantulas":"05","Terrorsaur":"07","Waspinator":"06"}}},"4DD7ED54-74F9287D-C:45":{"All Levels\\Dash Becomes Shorter \u0026 Wider":{"note":"","data":["800BA025 FFFF"],"options":null},"All Levels\\Infinite\\Lives":{"note":"","data":["800E05CB 0064"],"options":null},"All Levels\\Infinite\\Missiles":{"note":"","data":["800E1265 00FF"],"options":null},"All Levels\\Large Mutant Enemies":{"note":"","data":["800BB62B FFFF"],"options":null},"All Levels\\No Clipping\\Off":{"note":"","data":["81111E67 0001"],"options":null},"All Levels\\No Clipping\\On":{"note":"","data":["81111E67 0000"],"options":null},"All Levels\\See Through\\Everything Except Specific Things":{"note":"","data":["800BC665 FFFF"],"options":null},"All Levels\\See Through\\Some Walls":{"note":"","data":["800BC625 FFFF"],"options":null},"All Levels\\Time Always 0:00:02":{"note":"","data":["810E04E8 4000"],"options":null},"All Levels\\Visibililty\\Maximum":{"note":"","data":["800BA62B FFFF"],"options":null},"All Levels\\Visibililty\\Minimum":{"note":"","data":["800BA66B FFFF"],"options":null},"All Stages\\Infinite Health":{"note":"","data":["81072D0C 2400"],"options":null},"All Stages\\Infinite\\Disruptor Ammo":{"note":"","data":["81073F04 2400"],"options":null},"All Stages\\Infinite\\Flame Ammo":{"note":"","data":["81073720 2400"],"options":null},"All Stages\\Infinite\\Jet Pack":{"note":"","data":["81076AAC 2400","81076C58 2400","81076B48 2400"],"options":null},"All Stages\\Infinite\\Pulse Ammo":{"note":"","data":["81074204 2400"],"options":null},"All Stages\\Infinite\\Seeker Ammo":{"note":"","data":["81073A94 2400"],"options":null},"All Stages\\Infinite\\Stunner Ammo":{"note":"","data":["81073BD4 2400"],"options":null},"All Stages\\Invincible":{"note":"","data":["8107A770 2400"],"options":null},"All Stages\\Lasers Never Overheat":{"note":"","data":["81073948 2400"],"options":null},"All Stages\\Upper Lasers":{"note":"Don't Use With Never Overheat Code","data":["81073944 3C06","81073946 4EFF"],"options":null},"Press F9 For Pink Cheat Debug Screen":{"note":"","data":["890D098B 0001"],"options":null}},"4E4A7643-A37439D7-C:45":{"Aiming Sites Always Available":{"note":"","data":["812F0922 0004"],"options":null},"Always Your Turn\\Player 1":{"note":"","data":["802EF798 0000"],"options":null},"Always Your Turn\\Player 2":{"note":"","data":["802EF798 0001"],"options":null},"Ball\\Always In Hand":{"note":"","data":["802EF79C 0002"],"options":null},"Foul Score Options\\Player 1":{"note":"","data":["812EF784 ????"],"options":{"Max Fouls":"FFFF","Zero Fouls":"0000"}},"Foul Score Options\\Player 2":{"note":"","data":["812EF786 ????"],"options":{"Max Fouls":"FFFF","Zero Fouls":"0000"}},"Max Ratings\\Player 1":{"note":"","data":["81062C6A FFFF"],"options":null},"Max Ratings\\Player 2":{"note":"","data":["81062CEE FFFF"],"options":null},"Wins Options\\Player 1":{"note":"","data":["812EF780 ????"],"options":{"Max Points":"FFFF","Zero Points":"0000"}},"Wins Options\\Player 2":{"note":"","data":["812EF782 ????"],"options":{"Max Points":"FFFF","Zero Points":"0000"}}},"4E4B0640-1B49BCFB-C:45":{"2 Player Championship Mode":{"note":"This lets player 2 play with you in championship mode so if you have a friend that you want to tag team up with in tag team championship now you can.","data":["810A755E 0002"],"options":null},"Always Special\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF9E 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2F6 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["D015A5D1 0015","8015B64E 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["D015A5D1 0015","8015B9A6 0004"],"options":null},"Auto-Pin\\Player 1":{"note":"Do not use with Cant Pin","data":["8016CE23 0003"],"options":null},"Auto-Pin\\Player 2":{"note":"Do not use with Cant Pin","data":["8016CE17 0003"],"options":null},"Auto-Pin\\Player 3":{"note":"Do not use with Cant Pin","data":["8016CE2F 0003"],"options":null},"Auto-Pin\\Player 4":{"note":"Do not use with Cant Pin","data":["8016CE3B 0003"],"options":null},"CPU To Human Control\\Player 1":{"note":"","data":["8015AF99 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 2":{"note":"","data":["8015B2F1 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 3":{"note":"","data":["8015B649 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 4":{"note":"","data":["8015B9A1 00??"],"options":{"CPU":"18","Human":"17"}},"Can't Pin\\Player 1":{"note":"Do not use with Auto Pin","data":["8016CE23 0004"],"options":null},"Can't Pin\\Player 2":{"note":"Do not use with Auto Pin","data":["8016CE17 0004"],"options":null},"Can't Pin\\Player 3":{"note":"Do not use with Auto Pin","data":["8016CE2F 0004"],"options":null},"Can't Pin\\Player 4":{"note":"Do not use with Auto Pin","data":["8016CE3B 0004"],"options":null},"Cannot Be Grabbed\\Player 1":{"note":"","data":["D115AEC6 0052","8115AEC6 0001","D115AEC6 00A1","8115AEC6 00C1"],"options":null},"Cannot Be Knocked Down\\Player 1":{"note":"","data":["D115AEC6 0031","8115AEC6 0001"],"options":null},"Cannot Be Punched\\Player 1":{"note":"","data":["D115AEC6 002D","8115AEC6 0001","D115AEC6 0035","8115AEC6 00C1"],"options":null},"Clock At 00:00":{"note":"","data":["8115AB1E 0000","810A99F2 0000"],"options":null},"Hacked Moves\\Capture Tazzplex":{"note":"Replaces: Capture Suplex P1 grabs P2's feet like a capture suplex, then lets go \u0026 does a Tazzplex.","data":["D106B454 3689","D106B456 0021","8106B460 00BC","D106B454 3689","D106B456 0021","8106B462 A5E2","D106B514 368A","D106B516 0021","8106B520 00BC","D106B514 368A","D106B516 0021","8106B522 B6BE"],"options":null},"Hacked Moves\\Dominator into HHH Facebuster":{"note":"Replaces: Dominator","data":["D106B454 3810","D106B456 005C","8106B560 011A","D106B454 3810","D106B456 005C","8106B562 A256","D106B514 3811","D106B516 005C","8106B520 011A","D106B514 3811","D106B516 005C","8106B522 ACB0","D106B454 3810","D106B456 0075","8115AF52 0000"],"options":null},"Hacked Moves\\Dragon Screw Stunner":{"note":"Dragon Screw 02 P1 does a Dragon Screw then picks up P2 (still holding his leg) and spins him around and gives him a Stone Cold Stunner","data":["D106B454 3749","D106B456 0094","8106B460 00E9","D106B454 3749","D106B456 0094","8106B462 B9BE","D106B514 374A","D106B516 0094","8106B520 00E9","D106B514 374A","D106B516 0094"],"options":null},"Hacked Moves\\Dragon Screw Suplex":{"note":"Replaces: Double Dragon Screw 02 P1 does a Dragon screw then picks then up (still holding their feet) and does a capture suplex.","data":["D106B454 3749","D106B456 007C","8106B460 00AD","D106B454 3749","D106B456 007C","8106B462 DB2A","D106B514 374A","D106B516 007C","8106B520 00AD","D106B514 374A","D106B516 007C","8106B522 EAE0","D106B454 3749","D106B456 00A5","8115AF52 0000","D106B514 374A","D106B516 00A5","8115B2AA 0000"],"options":null},"Hacked Moves\\Morality Check to Back of head":{"note":"Replaces: Back Clothesline P1 is immediately backed up and does the Morality Check to P2 in the back of the head (misses by a little)","data":["D106B454 3892","D106B456 0000","8106B460 00B3","D106B454 3892","D106B456 0000","8106B462 194C"],"options":null},"Hacked Moves\\Running Rock Bottom":{"note":"Replaces: Farooq Spinebuster P2 runs into P1 and P1 delivers a RockBottom to P2.","data":["D106B454 3A80","D106B456 0000","8106B460 00C1","D106B454 3A80","D106B456 0000","8106B462 F7A2","D106B514 3A81","D106B516 0000","8106B520 00C2","D106B514 3A81","D106B516 0000","8106B522 1210"],"options":null},"Hacked Moves\\Running Tazplex":{"note":"Replaces: Underhook Belly to Belly P2 runs into P1 and P1 does a Tazplex to P2.","data":["D106B454 3A7A","D106B456 0000","8106B460 00BC","D106B454 3A7A","D106B456 0000","8106B462 A51E","D106B514 3A7B","D106B516 0000","8106B520 00BC","D106B514 3A7B","D106B516 0000","8106B522 B5FA"],"options":null},"Have All\\Characters,Costumes \u0026 Moves":{"note":"","data":["50000B02 0000","810BEE40 FFFF"],"options":null},"Infinite\\Money\\Championship Mode":{"note":"For Championship Mode","data":["8109940A FFFF"],"options":null},"Infinite\\Money\\Smackdown Mall Shop":{"note":"For Smackdown Mall Shop","data":["8114FAD6 FFFF"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF5F 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2B7 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["D015A5D1 0015","8015B60F 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["D015A5D1 0015","8015B967 00FF"],"options":null},"Novalty\\Truck In The Crowd":{"note":"","data":["81050110 0747","81050112 0748","81050114 0749","81050116 074A","81050118 074B","81050124 0A4B","81050126 0A43","81050128 0A4B","8105012A 0A43","8105012C 0A43","8105012E 0A43","8105011A 074C","8105011C 074D","81050130 0A43","8105011E 074E","81050132 0A43","81050120 0746","81050134 0A4B","81050122 0743","81050136 0A4B","D1064880 2000","8115AFB0 42EE","D1064880 2000","8115B308 42EE"],"options":null},"Play As\\Player 1\\Option 1":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 1\\Option 2":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 1\\Option 3":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 2\\Option 1":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 2\\Option 2":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 2\\Option 3":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 3\\Option 1":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 3\\Option 2":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 3\\Option 3":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 4\\Option 1":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 4\\Option 2":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 4\\Option 3":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Replace Raw War with\\BACKYARD ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105010E 0F76","8105010C 0F76","810482E8 002F","81050150 2CFD","810528F4 33FF","810528F6 33FF","81050152 2DC7","81050114 04F4","81050116 04F5","8105011E 04F3","81050128 07FF","8105012A 07FF","81050132 07FF","81079F48 400C","81079F5C 3F00","81079F70 3FFF","8107A024 4010","8107A038 3F00","8107A04C 4020","8107A060 3F84","8107A394 4012","8107A3A8 3F00","8107A3BC 4030","8107A3D0 3F84","8105042C 0949","81050436 07FF","81050438 07FF","8105043A 07FF","8105043C 0000","8105043E 07FF","81050440 0949","81050442 0949","81050430 0F76","81050128 07FF","8105012A 07FF","8105012C 0000","8105012E 07FF","81050130 07FF","81050132 07FF","81050134 0000","81050136 08F9","81050196 2CFD","81050194 09EF","81050192 0000","81050190 09EF","8116C49E 0019","8116C4B8 0004","8116C4DC C2E1","8116C4E0 42B4","810500FE 2D2D","81050100 2D2D","81050102 2D2D","81050400 2DC7","81050402 2DC7","81050404 2DC7","81050406 2DC7","81050408 2DC7","8105040A 2DC7","8105040C 2DC7","8105040E 2DC7","50001002 0000","810501B8 0000","50000402 0000","810501E0 0000","50000902 0000","81050262 0000","50001402 0000","81050290 0000","50002C02 0000","810502EC 0000","8107941C 3FE0","81079428 3FFF","810500EC 06FE","810500EE 06FD","810500F8 07FF","810500FA 0997","81050110 06FC","81050112 06FB","8105011A 06FF","8105011C 06FA","81052CF0 2CC9","81052CF4 2D1B","81052CD0 2CD1","81052CD4 0963","81052C84 2CBF","81052C8A 0961","81052CB8 2CC4","81052CBC 2DD7","81052CC8 2CD1","81052CCC 2CFB","81052C78 2CBC","81052C80 2D31","81052CF8 2CC1","81052D00 2DD7"],"options":null},"Replace Raw War with\\BACKYARD WEAK":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0E88","8105042E 2D0D","81050430 2D0D","81050432 2D0D","81050434 2D0D","81050436 07FD","8105043A 2CFB","8105043C 2D0D","8105043E 2D0D","81050440 2D0D","81050442 2D0D","810500E8 2D0D","8105010E 2D0D","8105010C 2D0D","81050150 2D0D","81050196 2CFB","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81050136 2CFB","81050400 2D0D","81050402 2D0D","81050404 2D0D","81050406 2D0D","81050408 2D0D","8105040A 2D0D","8105040C 2D0D","8105040E 2D0D","810528F4 2D0D","810528F6 2D0D","81052CE8 2CC9","81052CEC 2D2D"],"options":null},"Replace Raw War with\\BARBEDWIRE ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 2CFB","8105042E 2CFB","81050430 2CFB","81050432 2CFB","81050434 2CFB","81050436 2CFB","81050438 2CFB","8105043A 2CFB","8105043C 2CFB","8105043E 2CFB","81050440 2CFB","81050442 2CFB","810500E8 2CFB","8105010E 2CFB","8105010C 2CFB","81050150 2CFB","81050196 2CFB","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81050136 2CFB","810528F4 DDDD","810528F6 DDDD","81052CE8 2CCA","81052CEC 2CFB","81050400 2CFB","81050402 2CFB","81050404 2CFB","81050406 2CFB","81050408 2CFB","8105040A 2CFB","8105040C 2CFB","8105040E 2CFB"],"options":null},"Replace Raw War with\\BARBEDWIRE ROPES":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050110 04F3","81050112 04F4","81050114 04F5","81050116 04F3","81050118 04F4","8105011A 04F5","8105011C 04F3","8105011E 04F4","81050120 04F5","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81079D90 3F6C","81079D94 3F48","81079DA4 3D10","81079DB8 3F71","81079E6C 3F6C","81079E80 3D10","81079E90 3F47","81079F48 3F6C","81079F4C BF4C","81079F5C 3D10","81079F70 3F71","8107A024 3F6C","8107A028 3F28","8107A038 3D10","8107A04C 3F71","8107A100 3F6C","8107A114 3D10","8107A124 3F23","8107A1DC 3F6C","8107A1E0 BF2A","8107A1F0 3D10","8107A204 3F71","8107A2B8 3F6C","8107A2BC 3F02","8107A2CC 3D10","8107A2E0 3F71","8107A394 3F6C","8107A3A8 3D10","8107A3B8 3F00","8107A470 3F6C","8107A474 BF02","8107A484 3D10","8107A498 3F71","81050144 0569","81050154 07F7","810528F4 0C01","810528F6 0555","81050140 04F4","81050150 2CFB","8107A628 3F60","8107A63C 3D10","8107A64C 3F52","8107A650 BF80","8107A8BC 3F56","8107A8C4 BA00","8107A8D0 3D10","8107A8DC 3C5A","8107A8E0 3F30","8107A8E4 BF80","8107ADE4 3F56","8107ADEC BA00","8107ADF8 3D10","8107AE04 3C5A","8107AE08 3F0E","8107AE0C BF80","8107AB7C 3F00","D115AF56 2EB2","8115AEC6 0017","D115B2AE 2EB2","8115B21E 0017","D115B606 2EB2","8115B570 0017","D115B95E 2EB2","8115B8CE 0017","81052922 FFFF","81052924 FFFF","81052926 FFFF"],"options":null},"Replace Raw War with\\BARBEDWIRE SQUARE\\Part 1":{"note":"Both Parts must be on for this Press the C Left Button to make your opponent bleed,These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050110 04F3","81050112 04F4","81050114 04F5","81050116 04F3","81050118 04F4","8105011A 04F5","8105011C 04F3","8105011E 04F4","81050120 04F5","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81079D90 3F6C","81079D94 3F48","81079DA4 3D10","81079DB8 3F71","81079E6C 3F6C","81079E80 3D10","81079E90 3F47","81079F48 3F6C","81079F4C BF4C","81079F5C 3D10","81079F70 3F71","8107A024 3F6C","8107A028 3F28","8107A038 3D10","8107A04C 3F71","8107A100 3F6C","8107A114 3D10","8107A124 3F23","8107A1DC 3F6C","8107A1E0 BF2A","8107A1F0 3D10","8107A204 3F71","8107A2B8 3F6C","8107A2BC 3F02","8107A2CC 3D10","8107A2E0 3F71","8107A394 3F6C","8107A3A8 3D10","8107A3B8 3F00","8107A470 3F6C","8107A474 BF02","8107A484 3D10","8107A498 3F71","81050144 0569","81050154 07F7","810528F4 0C01","810528F6 0555","81050140 04F4","81050150 2CFB","8107A628 3F60","8107A63C 3D10","8107A64C 3F52","8107A650 BF80","8107A8BC 3F56","8107A8C4 BA00","8107A8D0 3D10","8107A8DC 3C5A","8107A8E0 3F30","8107A8E4 BF80","8107ADE4 3F56","8107ADEC BA00","8107ADF8 3D10","8107AE04 3C5A","8107AE08 3F0E","8107AE0C BF80","8107AB7C 3F00","D115AF56 2EB2","8115AEC6 0017","D115B2AE 2EB2","8115B21E 0017","D115B606 2EB2","8115B570 0017","D115B95E 2EB2","8115B8CE 0017","81052922 FFFF","81052924 FFFF","81052926 FFFF","8116C330 0000","8116C332 000A","8116C334 0000","8116C336 000A","8116C378 42B4"],"options":null},"Replace Raw War with\\BARBEDWIRE SQUARE\\Part 2":{"note":"Both Parts must be on for this Press the C Left Button to make your opponent bleed,These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8116C382 0000","8116C38C FFFF","81052C9C 0672","81052CA4 2CFB","D1064880 0002","8115B21E 002F","D1064886 0002","8115AEC6 002F","8116C3E4 0000","8116C3E6 000C","8116C3E8 0000","8116C3EA 000C","8116C428 C3D4","8116C440 FFFF","81052CB2 2CC2","81052CB4 0805","81052CB6 2CFB","D1064880 2000","8116C3E6 001F","D1064880 2000","8116C3EA 001F","D1064880 2000","81005592 3F81","D1005592 3F81","8116C3E6 001F","D1064880 2000","81005592 3F81","D1005592 3F81","8116C3EA 001F","D1064886 2000","8116C3E6 001F","D1064886 2000","8116C3E6 001F","D1064886 2000","81005592 3F81","D1005592 3F81","8116C3EA 001F","81052CF8 04F4","81052D00 2CFB","8116C3E4 0000","8116C3E6 0015","8116C3E8 0000","8116C3EA 0015","8116C428 0000","8116C42A 0000","8116C42C 43EB","8116C42E 0000","8116C430 C3A6","8116C432 0000","8116C436 0400","8116C43A 0000","8116C43E 0000","8116C440 FFFF","8116C442 0000","810855A8 3F00","81085684 3F00","81085750 3F00","8108583C 3F00","81050100 2CFB","8105010E 2CFB"],"options":null},"Replace Raw War with\\DUDLEY ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 21A7","8105042E 2D0D","81050432 2D0D","81050436 21A7","8105043E 2D0D","81050440 0000","81050442 0000","810500E8 2D0D","8105010C 2CFD","8105010E 2CFD","81050150 2D29","81050152 2CFB","81050400 09EF","81050402 09EF","81050404 0000","81050406 0000","81050408 0000","8105040A 0000","8105040C 09EF","8105040E 09EF","81050188 04F6","8105018A 04F7","8105018C 04F8","8105018E 04F9","81050190 09EF","81050192 0000","81050194 09EF","81050196 2D0D","810528F4 6666","810528F6 6666","81052CE8 2CC2","81052CEC 2D0D","81052D1C 2CD3","81052D1E 2CD4","81052D20 2CD5","81052D22 2CD6","81052D24 2CFD","81052D26 2CFD","81052D28 2CFB","81052D2A 2CFB","81050124 2CFD","81050126 2CFD","81050128 2CFD","8105012A 2CFD","8105012C 2CFD","8105012E 2CFD","81050130 2CFD","81050132 2CFD","81050134 2CFD","81050136 2CFD","81050154 2CFB","811533F8 002E"],"options":null},"Replace Raw War with\\FLAME ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105010E 0EFE","8105010C 0EFE","810528F4 2508","810528F6 2508","81050430 2401","81050430 2401","81050404 2401","81050406 2401","81050408 2401","81050409 2401","8105040A 2401","8105040C 2401","810500E8 2401"],"options":null},"Replace Raw War with\\FLAMING TURNBUCKLES":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8116C334 FFFF","8116C336 001F","8116C374 C350","8116C376 FFF3","8116C378 4377","8116C37A 2689","8116C37C C380","8116C37E 0406","8116C382 0D14","8116C386 0FCC","8116C38A 07DC","8116C38C FFFF","8116C38E FDE3","8116C3E8 FFFF","8116C3EA 001F","8116C428 C360","8116C42C 4370","8116C430 4376","8116C436 0D14","8116C43A 0FCC","8116C43E 07DC","8116C442 F9C4","8116C49C FFFF","8116C49E 001F","8116C4DC 4360","8116C4E0 4370","8116C4E4 4380","8116C4EA 0CD0","8116C4EE 0136","8116C4F2 04EE","8116C4F6 F601","8116C550 FFFF","8116C552 001F","8116C590 434F","8116C594 4370","8116C598 C36C","8116C59E 0E70","8116C5A2 0F58","8116C5A6 0814","8116C5AA F1E6"],"options":null},"Replace Raw War with\\GREENWICH STREET ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050430 2DC5","81050436 0000","81050438 0000","8105043A 0000","8105043E 0000","810504E8 0EFE","8105010E 2DC5","8105010C 2DC5","81050196 2CFD","81050136 0FB6","81050134 0FC6","81050132 0FB6","81050130 0FC6","8105012E 0FB6","8105012C 0FC6","8105012A 0FB6","81050128 0FC6","81050126 0FB6","81050124 0FC6","81050440 0000","81050442 0000","50002C02 0000","81050378 0000","50002C02 0000","810502EC 0000","50001402 0000","81050290 0000","50000902 0000","81050262 0000","50000402 0000","810501CE 0000","50001002 0000","810501B8 0000","50000402 0000","810501E0 0000","8105042C 2D0D","81050430 0000","81050150 24F0"],"options":null},"Replace Raw War with\\HHH ARNEA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105040E 24EF","8105040C 24EF","8105040A 24EF","81050408 24EF","81050406 24EF","81050404 24EF","81050402 24EF","81050400 24EF","81050436 24E9","81050440 24E9","81050442 24E9","8105043E 24EF","8105042E 24EF","8105043C 24EF","8105042C 24E9","8105010E 24E9","8105010C 24E9","81050196 24E9","8105042E 24EF","81050432 24EF","810500F8 24EF","810500FA 24EF","810500FC 24EF","810500FC 24EF","81050100 24EF","81050100 24EF","81052CE8 2CCA","81052CEC 24EF","81050150 24E9","81050152 24E9","81050154 24E9","810528F4 24E9","810528F6 24E9"],"options":null},"Replace Raw War with\\HOSPITAL ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0949","8105042E 283F","81050428 0949","81050430 0949","81050430 0949","81050436 096B","81050438 0993","8105043A 096B","8105043E 283F","81050440 283F","81050442 283F","810504E8 0949","81050150 283F","81050196 283F","81050400 283F","81050402 283F","81050404 283F","81050406 283F","81050408 283F","8105040A 283F","8105040C 283F","8105040E 283F","810500F8 283F","810500FA 283F","810500FC 283F","810500FE 283F","81050100 283F","81050100 283F","81052CE8 2CCA","81052CEC 283F","8105010E 283F","8105010C 283F","81050124 0949","81050126 0949","81050128 0949","8105012A 0949","8105012C 0949","8105012E 0949","81050130 0949","81050132 0949","81050134 0949","81050136 0949","810500E8 0949","810528F4 0000","81052CE0 2CC9"],"options":null},"Replace Raw War with\\KANE ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0A61","8105042E 0A61","81050428 2B6C","81050430 2B6C","81050430 2B6C","81050436 2B57","81050438 2B57","8105043A 2B57","8105043E 0A61","81050440 2B57","81050442 2B57","810500E8 1B1E","8105010E 2D37","8105010C 209F","81050194 0955","81050196 2B57","81050400 2699","81050402 2699","81050404 2699","81050406 2699","81050408 2699","8105040A 2699","8105040C 2699","8105040E 2699"],"options":null},"Replace Raw War with\\REMOVE RING":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050150 0000","81050152 0000","81050154 0000","810500E8 0000","810855A8 3F00","81085684 3F00","81085750 3F00","8108583C 3F00","81079C08 3F00","81079C14 3F00","81079B10 3F00"],"options":null},"Replace Raw War with\\SHIMMER ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 1932","8105042E 1932","81050430 1932","81050434 1932","81050432 1932","81050436 1932","81050438 1932","8105043A 1932","8105043E 1932","81050440 1932","81050442 1932","81050150 1932","81050152 1932","81050154 1932","81050190 1932","81050192 1932","81050194 1932","81050196 1932","81050124 1932","81050126 1932","81050128 1932","8105012A 1932","8105012C 1932","8105012E 1932","81050130 1932","81050132 1932","81050134 1932","81050136 1932","810500E8 1932","8105010E 1932","8105010C 1932"],"options":null},"Replace Raw War with\\SPACE SHIP ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 094D","8105042E 0953","81050430 0953","81050432 0F0E","81050434 0953","81050436 0F0E","81050438 0899","8105043C 0953","8105043E 0899","81050440 0963","81050442 0963","81050400 0953","81050402 0953","81050404 0953","81050406 0953","81050408 0953","8105040A 0953","8105040C 0953","8105040E 0953","810500E8 0A75","810528F4 7223","810528F6 0119","81050150 0963","81050152 0963","81050190 0953","81050192 0953","81050194 0953","81050196 0963","8105010E 0F0E","8105010C 0F0E","81050124 0F10","81050126 0F10","81050128 0F10","8105012A 0F10","8105012C 0F10","8105012E 0F10","81050130 0F10","81050132 0F10","81050134 0F10","81050136 0F10","810500F8 0963","810500FA 0963","810500FC 0963","810500FE 0963","81050100 0963","81050102 0963","81052CE8 2CCA","81052CEC 0963"],"options":null},"Replace Raw War with\\TOKYO DOME":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["810528F4 7223","810528F6 0119","81050124 0100","81050126 0100","81050128 0100","8105012A 0100","8105012C 0100","8105012E 0100","81050130 0100","81050132 0100","81050134 0100","81050136 0100","8105010E 0999","81050400 03A5","81050402 0385","81050404 0385","81050406 0385","81050408 0385","8105040A 03A5","8105040C 03A5","8105040E 043F","81050430 043F","8105042C 03A5","81050430 21A5","81050432 0100","81050434 0000","81050436 2CFB","81050438 0899","8105043C 03AF","81050440 03AF","81050442 03A5","810500E8 24C3","81050444 0100","81050190 09EF","81050192 0000","81050194 09EF","81050196 2CFD"],"options":null},"Tables\\IN RING TABLE\\Part 1":{"note":"To Make the Table look broken Keep the Z Button press down, To make player stand on the Table, Stand next to it \u0026 Keep C-Right Pressed Down.Put all Parts on Together for this Cheat to work","data":["81052CF0 06E1","81052CF4 09F1","81052CF8 06E2","81052D00 09F1","81052D0C 06E3","81052D0E 06E4","81052D10 09EF","81052D12 09EF","81052D14 06E5","81052D16 06E6","81052D18 09EF","81052D1A 09EF","D1064880 0001","8115AFB0 432C","D1064880 0001","8115B308 432C","D1064880 2000","8115AFB0 42B4","D1064880 2000","8115B308 42B4","8116C330 0000","8116C332 0014","8116C334 0000","8116C336 0014","8116C374 4210","8116C376 C0B1","8116C378 432F","8116C37A 51DC","8116C37C 4210","8116C37E 92F1","8116C382 0800","8116C386 05A0","8116C38A 0800","8116C38C FFFF","8116C38E F3BC","8116C3E4 0000","8116C3E6 0015","8116C3E8 0000","8116C3EA 0015","8116C428 4210","8116C42A C0B1","8116C42C 432F","8116C42E 51DC","8116C430 4210","8116C432 92F1","8116C436 0800","8116C43A 05A0","8116C43E 0800","8116C440 FFFF","8116C442 F3BC","D1064880 2000","8116C378 42E0"],"options":null},"Tables\\IN RING TABLE\\Part 2":{"note":"To Make the Table look broken Keep the Z Button press down, To make player stand on the Table, Stand next to it \u0026 Keep C-Right Pressed Down.Put all Parts on Together for this Cheat to work","data":["D1064880 2000","8116C382 07E0","D1064880 2000","8116C38A 0680","D1064880 2000","8116C42C 42E0","D1064880 2000","8116C436 0820","D1064880 2000","8116C43E 0980","8116C498 0000","8116C49A 0017","8116C49C 0000","8116C49E 0017","8116C4DC 4210","8116C4DE C0B1","8116C4E0 432A","8116C4E2 51DC","8116C4E4 4210","8116C4E6 92F1","8116C4EA 0800","8116C4EE 05A0","8116C4F2 0800","8116C4F4 FFFF","8116C4F6 F3BC","8116C54C 0000","8116C54E 0018","8116C550 0000","8116C552 0018","8116C590 4210","8116C592 C0B1","8116C594 432A","8116C596 51DC","8116C598 4210","8116C59A 92F1","8116C59E 0800","8116C5A2 05A0","8116C5A6 0800","8116C5A8 FFFF","8116C5AA F3BC","D1064880 2000","8116C4E0 42E0","D1064880 2000","8116C4EA 07E0","D1064880 2000","8116C4F2 0680","D1064880 2000","8116C594 42E0","D1064880 2000","8116C59E 0820","D1064880 2000","8116C5A6 0980"],"options":null},"Tables\\MOVABLE TABLES\\Part 1":{"note":"You must use both parts for this cheat to work","data":["81052C24 06E1","81052C26 06E3","81052C2C 09F1","81052C2E 09EF","81052C30 06E2","81052C32 06E5","81052C38 09F1","81052C3A 09EF","81052C48 06E4","81052C4A 06E6","81052C50 09EF","81052C52 09EF","8116C3E4 0000","8116C3E6 0001","8116C3E8 0000","8116C3EA 0001","8116C498 0000","8116C49A 0003","8116C49C 0000","8116C49E 0003","8116C330 0000","8116C332 0000","8116C334 0000","8116C336 0000","D116C556 0000","8116C33A 0000","D116C33A 0000","8116C3EE 0000","D116C3EE 0000","8116C4A2 0000","D116C556 0001","8116C33A 0001","D116C33A 0001","8116C3EE 0001","D116C3EE 0001","8116C4A2 0001","D116C556 0002","8116C33A 0002","D116C33A 0002","8116C3EE 0002","D116C3EE 0002","8116C4A2 0002","D116C556 0003","8116C33A 0003","D116C33A 0003","8116C3EE 0003","D116C3EE 0003","8116C4A2 0003","D116C556 FFFF","8116C33A FFFF","D116C33A FFFF","8116C3EE FFFF","D116C3EE FFFF","8116C4A2 FFFF","D216C556 FFFF","81079B10 3F80","D1064886 2000","81079B10 3F81","D106488C 2000","81079B10 3F81","D1064892 2000","81079B10 3F81"],"options":null},"Tables\\MOVABLE TABLES\\Part 2":{"note":"You must use both parts for this cheat to work","data":["D116C33A FFFF","8116C382 0000","D116C382 0000","8116C386 0000","D116C386 0000","8116C38A 0000","D116C38A 0000","8116C38E 0000","D116C38E 0000","8116C436 0000","D116C436 0000","8116C43A 0000","D116C43A 0000","8116C43E 0000","D116C43E 0000","8116C442 0000","D116C442 0000","8116C4EA 0000","D116C4EA 0000","8116C4EE 0000","D116C4EE 0000","8116C4F2 0000","D116C4F2 0000","8116C4F6 0000","D116C594 42B4","D116C556 FFFF","8116C378 4335","D116C378 4335","8116C42C 4335","D116C42C 4335","8116C4E0 4335","D116C594 3DC7","D116C556 FFFF","8116C378 42B0","D116C378 42B0","8116C42C 42B0","D116C42C 42B0","8116C4E0 42B0","D1064880 2000","81079B10 3F81","D1079B10 3F81","D116C594 42B4","D116C556 FFFF","8116C378 42F0","D116C378 42F0","8116C42C 42F0","D116C42C 42F0","8116C4E0 42F0","D1079B10 3F81","8116C38A 0F00","D116C38A 0F00","8116C43E 0100","D116C594 3C93","8116C378 42B0","81052D18 0000","81052D1A 0000","D116C54C 0000","8116C54E 0018","D116C550 0000","8116C552 0018"],"options":null},"Tables\\Sabu Table":{"note":"Breakable/Fixable/Rebreakable/Refixable press Z to break, C-right + Cdown to fix","data":["8116C49A 000C","8116C49E 000C","8116C4DC 43CC","8116C4E0 42E6","8116C4E4 C2C5","8116C4EE 0800","8116C602 000C","8116C606 000C","8116C648 42E6","8116C644 43CC","8116C64C C314","81052C54 06E3","81052C5C 09EF","8116C6F8 43CC","8116C6FC 42F0","8116C700 C2F1","8116C70A 0400","8116C428 43CC","8116C430 C2D0","8116C42C 42F0","8116C43A 0C00","8116C6B6 0004","8116C6BA 0004","8116C3E6 0004","8116C3EA 0004","D1064880 2000","81005592 3F81","D1005592 3F81","8116C4EA 0F00","D1005592 3F81","8116C652 0100","D1005592 3F81","8116C4E0 4240","D1005592 3F81","8116C648 4240","D1064880 0005","81005CD4 3F83","D1005CD4 3F83","8116C4EA 0000","D1005CD4 3F83","8116C652 0000","D1005CD4 3F83","8116C4E0 42E6","D1005CD4 3F83","8116C648 42E6","D1005CD4 3F83","D1064880 2000","81005CD4 0000"],"options":null},"Ultimate Code\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF5E 0064"],"options":null},"Ultimate Code\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2B6 0064"],"options":null},"Ultimate Code\\Player 3":{"note":"","data":["D015A5D1 0015","8015B60E 0064"],"options":null},"Ultimate Code\\Player 4":{"note":"","data":["D015A5D1 0015","8015B964 0064"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B490 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B490 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B4A4 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B47C 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8106B4A4 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B47C 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B468 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B468 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B510 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B510 3DFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B564 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B53C 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B564 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B53C 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B528 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B528 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B610 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B610 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B624 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5FC 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B624 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5FC 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5E8 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5E8 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6D0 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6D0 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6E4 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6BC 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8006B6E4 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6BC 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6A8 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6A8 3FFF"],"options":null},"Z LADDER":{"note":"Press Z for the ladder to appear, sometimes there is an invisable ladder","data":["D1064880 2000","8116C768 0000","D1064880 2000","8116C76A 0019","D1064880 2000","8116C76C 0000","D1064880 2000","8116C76E 0019","D1064880 2000","8116C788 8104"],"options":null}},"4E69B487-FE18E290-C:45":{"Team 1 Scores 150 pts":{"note":"","data":["800A6689 0096"],"options":null},"Team 2 Scores 150 pts":{"note":"","data":["800A668B 0096"],"options":null}},"4EAA3D0E-74757C24-C:4A":{"Don't Hurt Mario\\Monsters":{"note":"","data":["A0339E27 0001"],"options":null},"Funny Mario Options\\Mario's Cap\\Off \u0026 in His Hand":{"note":"Here you can Choose Options with Mario with His Cap off \u0026 in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["80339E07 00??"],"options":{"Cap In Hand":"20","Flying Mario Cap In Hand":"28","Invisible Mario Cap In Hand":"22","Invisible Metal Mario Cap In Hand":"26","Metal Mario Cap In Hand":"24"}},"Funny Mario Options\\Mario's Cap\\On \u0026 An Extra in His Hand":{"note":"Here you can Choose Options with Mario with His Cap on \u0026 An Extra in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["80339E07 00??"],"options":{"Cap In Hand":"30","Flying Mario Cap In Hand":"38","Invisible Mario Cap In Hand":"32","Invisible Metal Mario Cap In Hand":"36","Metal Mario Cap In Hand":"34"}},"Have All\\175 Stars":{"note":"I have managed to put a have 175 Stars Option in for you,once the Code is activated, you will see it as a new option in Save Slot A.","data":["80207B0B 00FF","50000D02 0000","81207B0C FFFF"],"options":null},"Have All\\Maxed Out Coin Records For All Levels":{"note":"","data":["80207B25 00FF","81207B26 FFFF","81207B28 FFFF","81207B2A FFFF","81207B2C FFFF","81207B2E FFFF","81207B30 FFFF","81207B32 FFFF"],"options":null},"Have\\Debug Mode":{"note":"","data":["8032C658 00??"],"options":{"Off":"00","On":"01"}},"Have\\Level Select":{"note":"","data":["8032C64C 0001"],"options":null},"Infinite\\Energy \u0026 Breath":{"note":"","data":["80339EAE 0008"],"options":null},"Infinite\\Lives":{"note":"","data":["80339EAD 0064"],"options":null},"Mario's Cap\\Off Options":{"note":"Here you can Choose Options with Mario without His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["80339E07 00??"],"options":{"Flying Mario":"08","Invisible Flying Mario":"0A","Invisible Mario":"02","Invisible Metal Flying Mario":"0F","Mario No Cap":"01","Metal Flying Mario":"0D","Metal Mario":"04"}},"Mario's Cap\\On Options":{"note":"Here you can Choose Options with Mario with His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["80339E07 00??"],"options":{"Flying Mario":"19","Invisible Mario":"12","Invisible Metal Mario":"16","Metal Mario":"15"}},"Press GS for 255 Coins":{"note":"","data":["89339EA8 00FF"],"options":null},"Press L To Levitate":{"note":"Press L to levitate \u0026 Let go to land","data":["D0339C31 0020","81339E4C 4220","D0339E4D 0020","81339E0C 0300","D0339E4D 0020","81339E0E 0880"],"options":null}},"4F1E88F7-4A5A3F96-C:4A":{"Max HP":{"note":"","data":["812D71F8 03E7"],"options":null},"Max MP":{"note":"","data":["812D71FA 03E7"],"options":null},"Max Money":{"note":"","data":["811A70E9 0001","811A70EA 869F"],"options":null}},"4F48B0FD-8E7173F4-C:45":{"All Levels\\Infinite\\Energy":{"note":"","data":["800D5A9B 00FF"],"options":null},"All Levels\\Infinite\\Max Credits":{"note":"","data":["80075DDC 00FF"],"options":null},"All Levels\\Infinite\\Time":{"note":"","data":["800D5A97 0063"],"options":null},"All Levels\\Unlock All\\Levels - Options Menu":{"note":"","data":["80075DD6 FFFF","80075DD7 FFFF"],"options":null},"All Levels\\Unlock All\\Option Menu Items":{"note":"","data":["80075DD8 FFFF","80075DD9 FFFF"],"options":null},"Level\\0-0\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time and only use for that specific level Cheat","data":["8010BB0C 0000"],"options":null},"Level\\0-0\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8010BB2B 0001"],"options":null},"Level\\1-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801657DC 0000"],"options":null},"Level\\1-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801657FB 0001"],"options":null},"Level\\1-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCF9C 0000"],"options":null},"Level\\1-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCFBB 0001"],"options":null},"Level\\1-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801126EC 0000"],"options":null},"Level\\1-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8011270B 0001"],"options":null},"Level\\2-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BD29C 0000"],"options":null},"Level\\2-1\\Invincible":{"note":"","data":["801BD2BB 0001"],"options":null},"Level\\2-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B911C 0000"],"options":null},"Level\\2-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B913B 0001"],"options":null},"Level\\2-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7CEC 0000"],"options":null},"Level\\2-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7D0B 0001"],"options":null},"Level\\3-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801588EC 0000"],"options":null},"Level\\3-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8015890B 0001"],"options":null},"Level\\3-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B936C 0000"],"options":null},"Level\\3-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B938B 0001"],"options":null},"Level\\3-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801013CC 0000"],"options":null},"Level\\3-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["81100E08 C350"],"options":null}},"4F8AFC3A-F7912DF2-C:50":{"Have All Races":{"note":"","data":["81088756 FFFF"],"options":null},"Have All Tracks":{"note":"","data":["8108875A FFFF"],"options":null},"Infinite Credits":{"note":"","data":["8008D659 0005"],"options":null},"Unlock All Characters \u0026 Extra Cheats":{"note":"","data":["81088750 FFFF","81088752 FFFF"],"options":null}},"4FF5976F-ACF559D8-C:50":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2712 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE02F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802026F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE255 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FCB85 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFF6D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802027A5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DA0BD 0001"],"options":null}},"5001CF4F-F30CB3BD-C:45":{"Have All\\Characters Available":{"note":"","data":["810653C8 FFFF"],"options":null},"Have All\\Courts Available":{"note":"","data":["810653CC FFFF"],"options":null},"Press C-Down Easy Win Ring Shot - Time,Balls,Points":{"note":"Do Not use with Game Option","data":["D0066985 0004","80153527 0082","D0066985 0004","80153523 0082"],"options":null},"Press C-Down For Easy Win Ring Shot - Game":{"note":"Do Not use with Time,Balls,Points Option","data":["D0066985 0004","8015350B 0082"],"options":null},"Score\\Player 1":{"note":"","data":["8015344A 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}},"Score\\Player 2":{"note":"","data":["8015344B 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}},"Widescreen":{"note":"","data":["81033CA6 3FE4"],"options":null}},"503EA760-E1300E96-C:50":{"Access Options\\All Car Upgrades":{"note":"","data":["50000704 0000","801505DF 0003"],"options":null},"Access Options\\All Tracks":{"note":"","data":["80150602 001F","80150603 00FF"],"options":null},"Always Place 1st":{"note":"","data":["801502CB 0001"],"options":null},"Unlimited Time":{"note":"","data":["801509ED 0045"],"options":null}},"5129B6DA-9DEF3C8C-C:45":{"Dig-Dug\\Infinite\\Credits":{"note":"","data":["800FE67E 0063"],"options":null},"Dig-Dug\\Infinite\\Lives\\Player 1":{"note":"","data":["800FE709 0002"],"options":null},"Dig-Dug\\Infinite\\Lives\\Player 2":{"note":"","data":["800FE76B 0004"],"options":null},"Dig-Dug\\Score\\Player 1":{"note":"","data":["810FE704 9999"],"options":null},"Dig-Dug\\Score\\Player 2":{"note":"","data":["810FE768 9999"],"options":null},"Galaga\\Infinite\\Credits":{"note":"","data":["800D76A4 0063"],"options":null},"Galaga\\Infinite\\Lives\\Both Players":{"note":"","data":["800D7510 0002"],"options":null},"Galaxian\\Infinite\\Credits":{"note":"","data":["800CD3D0 0063"],"options":null},"Galaxian\\Infinite\\Lives":{"note":"","data":["800CD3AD 0003"],"options":null},"Galaxian\\Score\\Player 1":{"note":"","data":["810BCE7C 9999"],"options":null},"Galaxian\\Score\\Player 2":{"note":"","data":["810BC780 9999"],"options":null},"Ms Pac-Man\\Eat All Ghosts All The Time":{"note":"","data":["810BC100 0000","810BC102 0000","810BC12C 0000","810BC12E 0000","810BC158 0000","810BC15A 0000","810BC184 0000","810BC186 0000"],"options":null},"Ms Pac-Man\\High Score Modifier":{"note":"","data":["810BC1F8 9999"],"options":null},"Ms Pac-Man\\Infinite\\Credits":{"note":"","data":["800BBE4B 0063"],"options":null},"Ms Pac-Man\\Infinite\\Lives\\Player 2":{"note":"","data":["800BBE27 0004"],"options":null},"Ms Pac-Man\\Infinite\\Lives\\Player P1":{"note":"","data":["800BBE23 0004"],"options":null},"Ms Pac-Man\\Score Modifier\\Player 1":{"note":"","data":["810BC7E8 9999"],"options":null},"Ms Pac-Man\\Score\\Player 2":{"note":"","data":["810BC7EC 9999"],"options":null},"Pac-Man\\Eat All Ghosts All The Time":{"note":"","data":["810A8760 0000","810A8762 0000","810A878C 0000","810A878E 0000","810A87B8 0000","810A87BA 0000","810A87E4 0000","810A87E6 0000"],"options":null},"Pac-Man\\High Score":{"note":"","data":["810A86F8 9999"],"options":null},"Pac-Man\\Infinite\\Credits":{"note":"","data":["800A8817 0063"],"options":null},"Pac-Man\\Infinite\\Lives\\Player 1":{"note":"","data":["800BBE23 0004"],"options":null},"Pac-Man\\Infinite\\Lives\\Player 2":{"note":"","data":["800BBE27 0004"],"options":null},"Pac-Man\\Score\\Player 1":{"note":"","data":["810A86F0 9999"],"options":null},"Pac-Man\\Score\\Player 2":{"note":"","data":["810A86F4 9999"],"options":null},"Pole Position\\Infinite Time":{"note":"","data":["8010A243 0063"],"options":null},"Pole Position\\Score":{"note":"","data":["81107BF8 9999"],"options":null}},"514B6900-B4B19881-C:4A":{"Beta Bottles Revenge Mode":{"note":"Bottles Revenge is a Beta mode from Banjo Tooie that the RWP team recently uncovered after an extraordinary amount of effort. Bottles the Spirit transforms into Bottles the Devil and posses enemies nearby and allows a second player hooked up to Pad 2 to play as that Posses character to try to foil Banjos Plans. As player one goes about its business, player two uses every enemy nearby to try to nab Banjo and take away some life. This mode is incredible, and you can control almost every enemy in the game: slot machines, flying creatures, uggers, zubbas...and this is just the beginning. (Congrats Rare Witch Project)","data":["801255C2 0001","80080881 0002"],"options":null},"Infinite\\Air":{"note":"","data":["80125222 42C8"],"options":null},"Infinite\\Energy\\Banjo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","8011591F 000A","80115920 000A"],"options":null},"Infinite\\Energy\\Banjo and Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","81115A04 0A0A"],"options":null},"Infinite\\Energy\\Bee":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","80115913 000A","80115914 000A"],"options":null},"Infinite\\Energy\\Detonator":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","8111592E 0A0A"],"options":null},"Infinite\\Energy\\Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","81115922 0A0A"],"options":null},"Infinite\\Energy\\Mumbo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","81115928 0A0A"],"options":null},"Infinite\\Energy\\Snowball":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","80115907 0005"],"options":null},"Infinite\\Energy\\Stony":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","80115919 000A","8011591A 000A"],"options":null},"Infinite\\Energy\\Submarine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","80115925 000A","80115926 000A"],"options":null},"Infinite\\Energy\\T-Rex Baby":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","8011593F 000A","80115940 000A"],"options":null},"Infinite\\Energy\\Washing Machine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["80115329 0063","81115916 0A0A"],"options":null},"Instant Warp\\Options\\Cauldron Keep":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"5D Cauldron Keep":"01","5E The gatehouse":"01","5F Tower of Tragedy Quiz":"01","60 Gun chamber":"01","6A Gun room still":"01","7B Crazy Castle Stockade balloon burst multi":"01","7C Crazy Castle Stockade Jump the hoops multi":"01","7D Grunty Industries packing game":"01","80 Colosseum kickball arena":"01","86 Dodgems":"01"}},"Instant Warp\\Options\\Cloud Cuckoo Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"36 Cloud Cuckoo Land 1":"01","37 Inside the trashcan":"01","38 Inside the cheesewedge":"01","39 Zubba's nest":"01","3A Central cavern":"01","3D Inside the pot o gold":"01","3E Mumbo's skull":"01","3F Mingy jongo's skull":"01","40 Humba wumba's wigwam":"01","61 Cloud Cuckoo Land 2":"01","85 Trash can mini":"01","88 Zubba's nest multi":"01"}},"Instant Warp\\Options\\Glitter Gulch Mine":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"26 Water supply pipe":"01","63 Ordnance Storage entrance":"01","64 Ordnance Storage game":"01","65 Ordnance Storage game Multi":"01","6F Testing":"01","70 Testing":"01","71 Mumbo's skull":"01","C7 Mine":"00","CA Fuel depot":"00","CB Crushing shed":"00","CC Flooded caves":"00","CD Water storage":"00","CE Waterfall cavern":"00","CF Power hut basement":"00","D0 Chuffy's cab":"00","D1 Inside chuffy's boiler boss":"00","D2 Gloomy caverns":"00","D3 Generator caverns":"00","D4 Power hut":"00","D5 Wumba's wigwam":"00","D7 Train station":"00","D8 Prospectors hut":"00","D9 Mumbo's hut":"00","DA Toxic gas cave":"00","DB Canary cave":"00","DC Ordnance storage":"00","E9 Humba":"00"}},"Instant Warp\\Options\\Grunty Industries":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"00 Outside":"01","01 Inside":"01","02 Train station":"01","03 Workers quarters":"01","04 Trash compactor":"01","05 Elevator shaft":"01","06 Floor 2":"01","07 Floor 2 \"electromagnet chamber\"":"01","08 Floor 3":"01","09 Floor 3 \"boiler plant\"":"01","0A Floor 3 \"packing room\"":"01","0B Floor 4":"01","0C Floor 4 \"cable room\"":"01","0D Floor 4 \"quality control\"":"01","0E Floor 5":"01","0F Basement":"01","10 Basement \"repair depot":"01","11 Basement \"waste disposal\"":"01","25 Water supply pipe":"01","62 Floor 4 \"clinkers cavern\"":"01","72 Mumbo's skull":"01","87 Sewer entrance":"01"}},"Instant Warp\\Options\\Hailfire Peaks":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"27 Lava side":"01","28 Icy side":"01","29 Lava train station":"01","2A Ice train station":"01","2B Chilli billi":"01","2C Chilly willy":"01","2D Colosseum kickball stadium lobby":"01","31 Boggy's igloo":"01","32 Icicle grotto":"01","33 Inside the volcano":"01","68 Icy side still":"01"}},"Instant Warp\\Options\\Isle O Hags":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"4F Wooded Hollow":"01","50 Heggy's egg shed":"01","51 Jiggywiggy's temple":"01","52 Plateau":"01","53 Plateau \"Honey B's Hive\"":"01","54 Pine Grove":"01","55 Cliff top":"01","56 Cliff top Mumbo's skull":"01","5A wasteland":"01","5B inside another digger tunnel":"01","5C Quagmire":"01"}},"Instant Warp\\Options\\Jinjo Village":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"42 Jinjo Village":"01","43 Bottles house":"01","44 King Jingalings throne room":"01","45 Green Jinjo's House":"01","46 Black Jinjo's House":"01","47 Yellow Jinjo's House":"01","48 Blue Jinjo's House":"01","4A Brown Jinjo's House":"01","4B Orange Jinjo's House":"01","4C Purple Jinjo's House":"01","4D Red Jinjo's House":"01","4E White Jinjo's House":"01"}},"Instant Warp\\Options\\Jolly Roger's Lagoon":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"81 sea bottom cavern":"01","82 submarine multi":"01","A7 Jolly Roger's Lagoon":"01","A8 Atlantis":"01","A9 Seabottom":"01","ED Jolly's":"00","EE Pawno's emporium":"00","EF mumbo's skull":"00","F4 Ancient Swimming Baths":"00","F6 Electric Eels lair":"00","F7 Seaweed Sanctum":"00","F8 Inside the big fish":"00","FA temple of the fishes":"00","FF Blubber's wave race hire":"00"}},"Instant Warp\\Options\\Mayahem Temple":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"66 Multi":"01","67 Still":"01","77 Targitzan's Slighty Sacred Temple":"01","78 Inside Targitzans Temple":"01","79 Targitzan Temple Lobby":"01","7A Targitzan's Temple Boss":"01","7F Mayan Kickball Arena":"01","B6 Humba's Wigwam":"00","B7 Mumbo's skull":"00","B8 The Temple":"00","B9 Prison Compound":"00","BC Code chamber":"00","C4 Jade Snake Grove":"00","C5 Treasure Chamber":"00","C6 Kickball Arena":"00","C8 Kickball Arena":"00","C9 Kickball Arena":"00"}},"Instant Warp\\Options\\Not sure":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"21 Inside Chuffy's wagon":"01","34 Mumbo's Skull":"01","35 Humba Wumba's wigwam 1":"01","41 Inside the digger tunnel":"01","43 Bottles house":"01","57 Humba Wumba's wigwam 2":"01","69 Bottles house still":"01","8A HAG Inside":"01","9A HAG1 Final Boss":"01","9B Jingalings Zombified Palace":"01","A6 Smuggler cavern":"01","F9 Mr Patch":"00","FC Lord woo fak fak":"00"}},"Instant Warp\\Options\\Spiral Mountain":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"73 Banjo's house":"01","AD Grunty's Old Lair":"00","AE Behind The Waterfall":"00","AF Top Of Castle":"00"}},"Instant Warp\\Options\\Terrydacty Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"12 Terrydacty Land":"01","13 Terry's nest":"01","14 Train station":"01","15 Oogle boogles cave":"01","16 Inside the mountain":"01","17 River passage":"01","18 Styracosaurus family cave":"01","19 Unga bunga's cave":"01","1A Stomping plains":"01","1B Bonfire caverns":"01","1E Humba's Wigwam":"01","23 Inside chompa's belly":"01","83 Chompa's belly multi":"01"}},"Instant Warp\\Options\\Witchy World":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D1080844 0000","811217F0 00??","801217F3 0001"],"options":{"24 Saucer of Peril":"01","3B Crazy castle stockade \"sop\"":"01","3C Star spinner \"sop\"":"01","76 Mumbo's skull":"01","D6 Witcy World":"00","DD Dodgem dome lobby":"00","DE Dodgem challenge \"1 vs 1\"":"00","DF Dodgem challenge \"2 vs 1\"":"00","E0 Dodgem challenge \"3 vs 1\"":"00","E1 Crazy castle stockade":"00","E2 Crazy castle lobby":"00","E3 Crazy castle pump room":"00","E4 Balloon burst game":"00","E5 Hoop hurry game":"00","E6 Star spinner":"00","E7 The inferno":"00","EA Cave of horrors":"00","EB Haunted cavern":"00","EC Train station":"00"}},"Multi-Player\\Everyone Infinite All Eggs Multiplayer":{"note":"All blaster modes specifically.[ Thanks retroben, awesome work on this!]","data":["810E5F38 0C04","810E5F3A 5A80","81116A00 3C08","81116A02 8008","81116A04 8108","81116A06 3970","81116A08 1100","81116A0A 0010","81116A0C 0000","81116A0E 0000","81116A10 3C08","81116A12 8008","81116A14 8D08","81116A16 3970","81116A18 0008","81116A1A 4200","81116A1C 0008","81116A1E 4202","81116A20 0008","81116A22 4080","81116A24 3C04","81116A26 8000","81116A28 0104","81116A2A 4020","81116A2C 3C04","81116A2E 2406","81116A30 2484","81116A32 0064","81116A34 AD04","81116A36 31C4","81116A38 3C04","81116A3A 2408","81116A3C 2484","81116A3E FFFE","81116A40 AD04","81116A42 31CC","81116A44 3C04","81116A46 8013","81116A48 8C84","81116A4A CF94","81116A4C 0802","81116A4E 1DFE","81116A50 0000","81116A52 0000"],"options":null},"Multi-Player\\Infinite Health\\Player 1":{"note":"","data":["8012F701 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 2":{"note":"","data":["8012F705 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 3":{"note":"","data":["8012F709 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 4":{"note":"","data":["8012F70D 0064"],"options":null},"Play As":{"note":"To use this cheat, put the cheat on, then press L as you walk through a door to become that chosen character","data":["D0080845 0020","801211FC 00??"],"options":{"Banjo":"0A","Banjo and Kazooie":"01","Bee":"06","Detonator":"0F","Golden Goliath":"0E","Kazooie":"0B","Mumbo":"0D","Snowball":"02","Stony":"08","Submarine":"0C","T-rex baby":"12","T-rex daddy":"13","Truck":"10","Washing machine":"07"}}},"5168D520-CA5FCD0D-C:4A":{"Have Zero Time all Levels":{"note":"","data":["50000B04 0000","81386B44 3000"],"options":null},"Infinite\\Air":{"note":"","data":["81386ACE 0E10"],"options":null},"Infinite\\Always Have All Jinjos":{"note":"","data":["80386ABB 00FF"],"options":null},"Infinite\\Eggs":{"note":"","data":["80386AA7 00FF"],"options":null},"Infinite\\Gold Feathers":{"note":"","data":["80386AB3 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["80386AC3 0008","80386AC7 0008"],"options":null},"Infinite\\Jiggies":{"note":"","data":["80386B0B 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["80386ACB 00FF"],"options":null},"Infinite\\Mumbo Tokens":{"note":"","data":["80386B07 00FF"],"options":null},"Infinite\\Notes":{"note":"Just collect one Note to Have 255 Notes in all Worlds.","data":["80386B32 00FF","80386AA2 0001"],"options":null},"Infinite\\Red Feathers":{"note":"","data":["80386AAF 00FF"],"options":null}},"519EA4E1-EB7584E8-C:4A":{"Have All\\Boards":{"note":"","data":["8108C9C4 0003","8108C9C6 FFFF"],"options":null},"Have All\\Characters":{"note":"","data":["8108C9B8 07FF"],"options":null},"Have All\\Difficulties":{"note":"","data":["8108C9B0 0700"],"options":null},"Have All\\Tracks":{"note":"","data":["8108C9BC BFFE"],"options":null},"Low Timer":{"note":"","data":["8008C8A4 0000","8008C8A6 0000"],"options":null},"Max\\50000 Stunt Points":{"note":"","data":["8108C978 C350"],"options":null},"exhalatio audio hack":{"note":"","data":["81052760 AD99"],"options":null}},"51D29418-D5B46AE3-C:50":{"Access All In-Game Cheats":{"note":"","data":["81118E9A 0001"],"options":null},"Activate All In-Game Cheats":{"note":"","data":["50000D02 0000","81118E82 0101"],"options":null},"All Silver \u0026 Gold Coins (Circuit - Using C/P)":{"note":"Circuit Mode - Using Controller Pack","data":["50000660 0000","811C542C FFFF"],"options":null},"All Silver \u0026 Gold Coins (Single Race + Practice Mode)":{"note":"Single, Practice \u0026 Circuit Mode","data":["50000660 0000","8116375C FFFF"],"options":null},"All Silver \u0026 Gold Coins (Stunt Mode)":{"note":"Stunt Mode","data":["50000440 0000","81163BBC FFFF"],"options":null},"Always 1st":{"note":"","data":["80177D4E 0000"],"options":null},"Easy Difficulty level":{"note":"","data":["80177A3C 0000"],"options":null},"Extended Time In Battle \u0026 Stunt Mode To 2.05 Hours":{"note":"","data":["811633BA 457C","811636EE 4514"],"options":null},"Laps To Race":{"note":"","data":["81177A18 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Max Points Stunt Mode":{"note":"","data":["81177A55 3AFF","81177A57 F3FA"],"options":null},"Max Race Points":{"note":"","data":["8117CE22 03E7"],"options":null},"Number Of Drones In Race":{"note":"","data":["81163240 00??"],"options":{"1 Drone":"01","2 Drones":"02","3 Drones":"03","4 Drones":"04","5 Drones":"05","6 Drones":"06","7 Drones":"07","8 Drones":"08","9 Drones":"09"}},"Stunt Wings All Modes":{"note":"Where Wings Are Available Press D-Pad Up On Wing Select","data":["D017055A 0004","50000C02 0000","811139D0 0202"],"options":null},"Stunt Wings Circuit Mode":{"note":"Press D-Pad Up On Wing Select","data":["D017055A 0004","50000C02 0000","801756A1 0202"],"options":null}},"52F78805-8B8FCAB7-C:45":{"Always Win Judge's Decision\\Player 1":{"note":"","data":["8020B777 FFFF","802098AF 0000"],"options":null},"Always Win Judge's Decision\\Player 2":{"note":"","data":["802098AF FFFF","8020B777 0000"],"options":null},"Enable Boro":{"note":"","data":["80307349 0001"],"options":null},"Have 1 Star\\Abdul":{"note":"","data":["80307353 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["8030734F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80307352 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80307351 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80307354 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80307350 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["8030734E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80307355 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80307356 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["802098A1 0000","802047C3 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802047C7 0000","8020B769 0000"],"options":null},"Level Select":{"note":"","data":["8022A84C 00??"],"options":{"Blue Hell Mountain":"0C","Coliseum":"04","Desert":"01","Fire Mountain":"00","Highlands":"02","Hong Kong":"03","Joker's Room":"0B","Jungle":"05","Ninja Room":"06","Observation":"09","Palace":"0D","Pasture":"0A","Suspension Bridge":"07"}},"Play As\\Player 1":{"note":"","data":["802EF622 00??"],"options":{"Abdul":"05","Bob":"01","Boro":"08","Joker":"0B","Leon":"04","Meiling":"03","Ninja":"06","No Clue":"0D","Pierre":"02","Ryuji":"00","The Master":"0C","Tomahawk":"07","Ushi":"0A","Valerie":"09"}},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EF67B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0209757 0000","80209757 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020B61F 0000","8020B61F 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810ADBDC 3F80"],"options":null}},"5306CF45-CBC49250-C:45":{"Car Upgrades\\'63 Muscle Car":{"note":"","data":["8015053F 0005"],"options":null},"Car Upgrades\\All-Terrain Vehicle":{"note":"","data":["8015054F 0004"],"options":null},"Car Upgrades\\Devastator":{"note":"","data":["80150547 0005"],"options":null},"Car Upgrades\\Italia P69":{"note":"","data":["8015054B 0005"],"options":null},"Car Upgrades\\La Bomba":{"note":"","data":["80150543 0005"],"options":null},"Car Upgrades\\Police Car":{"note":"","data":["80150557 0004"],"options":null},"Car Upgrades\\School Bus":{"note":"","data":["80150553 0004"],"options":null},"Infinite Time":{"note":"","data":["8015094D 0095"],"options":null},"Play Level Modifier":{"note":"","data":["80150963 00??"],"options":{"Appalachia":"0C","Arizona":"07","Beverly Hills":"04","Chicago":"0A","Cruise The USA":"0E","Death Valley":"06","Golden Gate Park":"00","Grand Canyon":"08","Indiana":"0B","Iowa":"09","LA Freeway":"05","Redwood Forest":"03","San Francisco":"01","US 101":"02","Washington DC":"0D"}},"Player 1\\Always First Place":{"note":"","data":["8015022B 0001"],"options":null},"Player 1\\Always Have Fastest Car":{"note":"","data":["8015021A 0001"],"options":null},"Player 1\\Gearbox Type Modifier":{"note":"","data":["80150213 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 1\\Lights \u0026 Sirens For Police Car \u0026 School Bus P1":{"note":"","data":["8115053A 0001","8114E38A 0001"],"options":null},"Player 2\\Always First Place":{"note":"","data":["801505C7 0001"],"options":null},"Player 2\\Always Have Fastest Car":{"note":"","data":["801505B6 0001"],"options":null},"Player 2\\Gearbox Type Modifier":{"note":"","data":["801505AF 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 2\\Lights \u0026 Sirens For Police Car \u0026 School Bus P2":{"note":"","data":["811508D6 0001","8114E3A2 0001"],"options":null},"Stop Elapsed Time And No Traffic":{"note":"","data":["80150949 0000"],"options":null}},"5326696F-FE9A99C3-C:45":{"Have Alien Artifact":{"note":"","data":["8004DC5F 0001"],"options":null},"Infinite Ammo All Weapons":{"note":"","data":["50001102 0000","81048146 8000"],"options":null},"Infinite\\Greece":{"note":"","data":["81052B18 0098","81052B1A 967F"],"options":null},"Infinite\\Health":{"note":"","data":["810DDCEC 0258"],"options":null},"Item Modifier":{"note":"","data":["8004DC4F ????"],"options":{"All Items":"FFFF","Crank":"0040","Hangar Key":"0400","Heirglyph Map Piece":"0100","Howitzer Shells":"0002","Nothing":"0000","Windmill Cog":"0080"}},"Level Select":{"note":"","data":["80047F93 00??"],"options":{"America":"03","Comet":"05","Greece":"01","Java":"02","Siberia":"04"}},"No Humans Killed":{"note":"","data":["8104816A 0000"],"options":null},"Press L To Walk Over Water, Climb Hills":{"note":"","data":["D00475D9 0020","8104DCD2 0808"],"options":null},"Sixty Frames WIP":{"note":"Too fast but looks nice I guess.","data":["8001B48F 0004","8001B497 0004","8001B49F 0004","8001B4A7 0004","8001B4AF 0004"],"options":null},"Weapon Select\\1st Position":{"note":"","data":["80048138 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\2nd Position":{"note":"","data":["80048139 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\3rd Position":{"note":"","data":["8004813A 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\4th Position":{"note":"","data":["8004813B 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\5th Position":{"note":"","data":["8004813C 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\6th Position":{"note":"","data":["8004813D 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\7th Position":{"note":"","data":["8004813E 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}},"Weapon Select\\8th Position":{"note":"","data":["8004813F 00??"],"options":{"Arme 2":"0D","Fragcannon":"10","Fuel":"01","Grenades":"09","Lazer Missiles":"11","Machine Gun":"05","Nothing":"00","Pistol":"02","Plasma Bombs":"13","Resonator":"12","Rifle":"04","Rocket Launcher":"06","Shotgun":"03","Sun Shield":"08","TNT":"07","Tri-Spinner":"0A","Vehicle Weapon 1":"0B","Vehicle Weapon 2":"0C","Waffe 2":"0E"}}},"5354631C-03A2DEF0-C:45":{"All Equipment Upgrades":{"note":"","data":["801EF6DD 0023","811EF72A 201B","801EF6BC 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03E6B3B 0000","801EF672 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801EF6F2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801EF6F3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801EF6F4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801EF6F5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801EF6F6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801EF6F7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801EF6E5 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801EF6EB 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801EF6F1 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Fight Demo Majora's Mask":{"note":"With this code,load the game \u0026 put the cheat on. then press start to apear in the Demo mode.","data":["8016A718 0020"],"options":null},"Fog\\Blue":{"note":"","data":["80166108 0020"],"options":null},"Fog\\Pink":{"note":"","data":["8016610C 0020"],"options":null},"Fog\\Yellow":{"note":"","data":["80166110 0020"],"options":null},"Have\\All Masks":{"note":"","data":["801EF6F8 003E","801EF6F9 0038","801EF6FA 0047","801EF6FB 0045","801EF6FC 0040","801EF6FD 0032","801EF6FE 003A","801EF6FF 0046","801EF700 0039","801EF701 0042","801EF702 0048","801EF703 0033","801EF704 003C","801EF705 003D","801EF706 0037","801EF707 003F","801EF708 0036","801EF709 0034","801EF70A 0043","801EF70B 0041","801EF70C 003B","801EF70D 0044","801EF70E 0049","801EF70F 0035"],"options":null},"Have\\All Quest Status Items":{"note":"","data":["801EF72D 0005","811EF72E F7CF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801EF6E2 0002"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801EF6E3 0003"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801EF6E4 0004"],"options":null},"Have\\Bombchu":{"note":"","data":["801EF6E7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801EF6E6 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801EF6E9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801EF6E8 0008"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801EF6F0 0010"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801EF6E1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801EF6EF 000F"],"options":null},"Have\\Item Modifier":{"note":"","data":["801EF6F0 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\Lens of Truth":{"note":"","data":["801EF6EE 000E"],"options":null},"Have\\Magic Beans":{"note":"","data":["801EF6EA 000A"],"options":null},"Have\\Ocarina of Time":{"note":"","data":["801EF6E0 0000"],"options":null},"Have\\Pictograph":{"note":"","data":["801EF6ED 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801EF6EC 000C"],"options":null},"Infinite\\Health":{"note":"","data":["811EF6A6 0140"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811EF6A4 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"","data":["801EF711 0063","801EF716 0063","801EF717 0063","801EF718 0063","801EF719 0063","801EF71A 0063","801EF71C 0063","801EF71D 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801EF6A9 0060","811EF6B0 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811EF6AA 03E7"],"options":null},"Maximum Visibility":{"note":"","data":["80166118 0020"],"options":null},"Play As":{"note":"","data":["801EF690 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03E6B3B 0020","813FFE18 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You have been warned.","data":["801EF6BC 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01FB876 0008","811EF686 FFFD","D01FB876 0004","811EF686 0000","D01FB876 0002","811EF686 FFFE"],"options":null},"Use C-Buttons Anywhere":{"note":"This code allows you to use C-Button Items where you normally can't use them.","data":["811F3588 0000","811F358A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["D03E6B3A 0000","803FF395 0001","813FF39A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}},"Widescreen":{"note":"","data":["8113F834 3C07","8113F836 3FE3"],"options":null}},"535DF3E2-609789F1-C:4A":{"99 Points":{"note":"","data":["801CC273 0063"],"options":null},"Always First Place":{"note":"","data":["801C386F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801C3B53 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801C3B2E 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801C3997 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801C3FBA 0005","801C425A 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801C399F 0000"],"options":null},"Super Speed":{"note":"","data":["801C3997 0005","D0155221 0010","801C3997 0020"],"options":null}},"53D440E7-7519B011-C:45":{"Alt Sixty Frames":{"note":"A friend informed me this didn't freeze.","data":["80079A2A 0003"],"options":null},"Boss Cannot Move\\Dino":{"note":"","data":["811DFCF4 44A0"],"options":null},"Boss Cannot Move\\Octo":{"note":"","data":["811E045C 44A0"],"options":null},"Enable All Cheats":{"note":"Go into Options \u0026 then Magic Codes. Then Code list to turn off \u0026 on what you want.","data":["50000401 0000","810DFD9C FFFF"],"options":null},"Have All\\50 Bananas\\Ancient Lake":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E32CD 0032"],"options":null},"Have All\\50 Bananas\\Boulder Canyon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E61ED 0032"],"options":null},"Have All\\50 Bananas\\Crescent Island":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3A2D 0032"],"options":null},"Have All\\50 Bananas\\Darkmoon Caverns":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E5D0D 0032"],"options":null},"Have All\\50 Bananas\\Everfrost Peak":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4F5D 0032"],"options":null},"Have All\\50 Bananas\\Fossil Canyon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E676D 0032"],"options":null},"Have All\\50 Bananas\\Frosty Village":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E5F4D 0032"],"options":null},"Have All\\50 Bananas\\Greenwood Village":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4AAD 0032"],"options":null},"Have All\\50 Bananas\\Haunted Woods":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4A1D 0032"],"options":null},"Have All\\50 Bananas\\Hot Top Volcano":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E462D 0032"],"options":null},"Have All\\50 Bananas\\Jungle Falls":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E44CD 0032"],"options":null},"Have All\\50 Bananas\\Pirate Lagoon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E295D 0032"],"options":null},"Have All\\50 Bananas\\Snowball Valley":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E49FD 0032"],"options":null},"Have All\\50 Bananas\\Spacedust Alley":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E654D 0032"],"options":null},"Have All\\50 Bananas\\Spaceport Alpha":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3C6D 0032"],"options":null},"Have All\\50 Bananas\\Star City":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E578D 0032"],"options":null},"Have All\\50 Bananas\\Treasure Caves":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E371D 0032"],"options":null},"Have All\\50 Bananas\\Walrus Cove":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4A7D 0032"],"options":null},"Have All\\50 Bananas\\Whale Bay":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3AFD 0032"],"options":null},"Have All\\50 Bananas\\Windwill Plains":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E9BBD 0032"],"options":null},"Have All\\99 Balloons":{"note":"","data":["810DFD9A FFFF","801FCBED 0063"],"options":null},"Have All\\Amulets":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FC9E6 FFFF"],"options":null},"Have All\\Keys":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FC9D8 FFFF"],"options":null},"Have All\\Levels Completely Finished":{"note":"","data":["50000904 0000","801FCAF7 00FF","801FCB1F 00FF","801FCB27 00FF","50000404 0000","801FCB2F 00FF","801FCB4F 00FF","50000804 0000","801FCB53 00FF"],"options":null},"Have All\\Silver Coins\\Ancient Lake":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E34AA 0008"],"options":null},"Have All\\Silver Coins\\Boulder Canyon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E63CA 0008"],"options":null},"Have All\\Silver Coins\\Crescent Island":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E3C0A 0008"],"options":null},"Have All\\Silver Coins\\Everfrost Peak":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E513A 0008"],"options":null},"Have All\\Silver Coins\\Fossil Canyon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E694A 0008"],"options":null},"Have All\\Silver Coins\\Frosty Village":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E612A 0008"],"options":null},"Have All\\Silver Coins\\Greenwood Village":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4C8A 0008"],"options":null},"Have All\\Silver Coins\\Haunted Woods":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4BFA 0008"],"options":null},"Have All\\Silver Coins\\Hot Top Volcano":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E480A 0008"],"options":null},"Have All\\Silver Coins\\Jungle Falls":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E513A 0008"],"options":null},"Have All\\Silver Coins\\Pirate Lagoon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E2B3A 0008"],"options":null},"Have All\\Silver Coins\\Snowball Valley":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4BDA 0008"],"options":null},"Have All\\Silver Coins\\Treasure Caves":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E38FA 0008"],"options":null},"Have All\\Silver Coins\\Walrus Cove":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4C5A 0008"],"options":null},"Have All\\Silver Coins\\Whale Bay":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E3CDA 0008"],"options":null},"Have All\\Silver Coins\\Windmill Plains":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E9D9A 0008"],"options":null},"Have All\\The pieces of the TT thing":{"note":"","data":["801FC9E6 0004"],"options":null},"Have All\\Trophies":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FC9DE FFFF"],"options":null},"Infinite\\Power Ups\\Ancient Lake":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E6A2B 0010"],"options":null},"Infinite\\Power Ups\\Boulder Canyon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E8D4B 0010"],"options":null},"Infinite\\Power Ups\\Crescent Island":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E718B 0010"],"options":null},"Infinite\\Power Ups\\Darkmoon Caverns":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E96AB 0010"],"options":null},"Infinite\\Power Ups\\Everfrost Peak":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E871B 0010"],"options":null},"Infinite\\Power Ups\\Fossil Canyon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E9ECB 0010"],"options":null},"Infinite\\Power Ups\\Frosty Village":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E96A6 0010"],"options":null},"Infinite\\Power Ups\\Greenwood Village":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E820B 0010"],"options":null},"Infinite\\Power Ups\\Haunted Woods":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E817B 0010"],"options":null},"Infinite\\Power Ups\\Hot Top Volcano":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E477B 0010"],"options":null},"Infinite\\Power Ups\\Jungle Falls":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E45BB 0010"],"options":null},"Infinite\\Power Ups\\Pirate Lagoon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E54B6 0010"],"options":null},"Infinite\\Power Ups\\Snowball Valley":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E815B 0010"],"options":null},"Infinite\\Power Ups\\Space Dust Alley":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E904B 0010"],"options":null},"Infinite\\Power Ups\\Spaceport Alpha":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E676B 0010"],"options":null},"Infinite\\Power Ups\\Starcity":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E8EEB 0010"],"options":null},"Infinite\\Power Ups\\Treasure Cove":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E6E7B 0010"],"options":null},"Infinite\\Power Ups\\Walrus Cove":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E81DB 0010"],"options":null},"Infinite\\Power Ups\\Whale Bay":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E665B 0010"],"options":null},"Infinite\\Power Ups\\Windmill Plains":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801EC6BB 0010"],"options":null},"Sixty Frames":{"note":"May freeze at some points,physics can get wonky with slopes on both codes","data":["80079A2B 0003"],"options":null},"Widescreen":{"note":"","data":["81066006 3FE3","81066156 3FE3","810661BE 3FE3","81126174 3FE3"],"options":null}},"53ED2DC4-06258002-C:50":{"Always 1st":{"note":"","data":["80121C8C 0001","80125489 0001"],"options":null},"Enable In-Game cheat Menu \u0026 Cheats":{"note":"Here you can Activate the IN-Built Cheats Menu. At the Front Screen Just Press C-Button Right.This will open up All Tracks \u0026 Characters In Free Play \u0026 Time Attack. Also In A Race, Press The Start/Pause button to Access the In-Cheat-Menu Option.You can also choose how many Pod's Racers are in the Race \u0026 also how many Laps are in the Race in Free Play \u0026 Time Attack","data":["810A0D27 000A","810A0D2A FFFF"],"options":null},"Have All Tracks Completed":{"note":"","data":["8111CB0A FFFF","8111CB0C 3FFF","8111CB0E 3FFF","8111CB10 3FFF","8111CB12 00FF"],"options":null},"Infinite Truguts":{"note":"","data":["8111CB1A FFFF","8111CB18 7FFF"],"options":null},"No Damage":{"note":"If when Racing Your Pod Over heats \u0026 bursts into flames Press \"R\" \u0026 you will Repair the Damage.","data":["800AA5D7 0001"],"options":null},"Unlock All Tracks \u0026 Characters":{"note":"When using Unlock All Tracks \u0026 Characters For can to pick \u0026 choose what ever you want to play As \u0026 where ;)","data":["8011CB08 00FF","8011CB09 00FF","8011CB0B 00FF","8111CB08 FFFF","8111C80A FFFF","8011CB14 007D","8111CB16 FFFF"],"options":null}},"54310E7D-6B5430D8-C:50":{"Always 1st\\Player 1":{"note":"","data":["810A9248 0001"],"options":null},"Freeze Checkpoint Timer":{"note":"","data":["810CE1D2 BCCC"],"options":null},"Infinite Auto Pilot\\AG Systems\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BCE47 005B"],"options":null},"Infinite Auto Pilot\\Auricom\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC1E7 005B"],"options":null},"Infinite Auto Pilot\\Direx\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC817 005B"],"options":null},"Infinite Auto Pilot\\Feisar 1\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["811BC4FE 005B"],"options":null},"Infinite Auto Pilot\\Piranah\\Player 1":{"note":"Use with Weapon Select, Press B Button to never run out. Unselect to run out.","data":["801BC817 005B"],"options":null},"Weapon Select\\AG Systems":{"note":"","data":["811BC1DE ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Auricom":{"note":"","data":["811BCE3E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Direx":{"note":"","data":["811BC80E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Feisar 1":{"note":"","data":["811BC4F6 ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"Weapon Select\\Piranah":{"note":"","data":["811BC80E ????"],"options":{"3 Missiles":"0101","Ag Systems Special":"1212","Auricom Special":"1010","Auto Pilot":"0707","Big Mine":"0E0E","Direx Special":"1111","Electrical Impulse":"0505","Energy Up":"0606","Feisar Special":"0F0F","Homing Missile":"0202","Mines":"0303","No Weapon":"0000","Piranha Special":"1313","Quake Disrupter":"0C0C","Shield":"0808","Single Missile":"0D0D","Speed Boost":"0909"}},"[In-Game Cheat Unlock]\\Cyclone Weapon":{"note":"","data":["800924C4 00??"],"options":{"Off":"00","On":"01"}},"[In-Game Cheat Unlock]\\Infinite Ammo\\Player 1":{"note":"","data":["80091254 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Ammo\\Player 2":{"note":"","data":["80092970 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Shield Energy\\Player 1":{"note":"","data":["80091256 0001"],"options":null},"[In-Game Cheat Unlock]\\Infinite Shield Energy\\Player 2":{"note":"","data":["80092972 0001"],"options":null},"[In-Game Cheat Unlock]\\[Ultimate Unlock All]":{"note":"This Unlocks All Levels, Tracks, Velocitar and Super Combo, Piranha 2 Ship, Cyclone Weapons Power Up and all 28 Gold Awards unlocked","data":["80091255 0001","8009125C 0020"],"options":null}},"55D4C4CE-7753C78A-C:45":{"Add\\Building":{"note":"","data":["8006A1C0 0001"],"options":null},"Add\\Satellite":{"note":"","data":["8006A1C3 0001"],"options":null},"Have\\All\\Levels Unlocked \u0026 Completed For Americans":{"note":"","data":["8006A1F0 0011"],"options":null},"Have\\All\\Levels Unlocked \u0026 Completed For Black Dogs":{"note":"","data":["8006A1F3 000A"],"options":null},"Have\\All\\Levels Unlocked \u0026 Completed For Soviets":{"note":"","data":["8006A1F1 0008"],"options":null},"Have\\All\\Missions Open And Complete For Americans":{"note":"","data":["8006A1EC 0011"],"options":null},"Have\\All\\Missions Open And Complete For Black Dogs":{"note":"","data":["8006A1EF 000A"],"options":null},"Have\\All\\Missions Open And Complete For Soviets":{"note":"","data":["8006A1ED 0008"],"options":null},"Infinite\\Ammo":{"note":"","data":["8006A1C1 0001"],"options":null},"Infinite\\Armor":{"note":"","data":["8006A1C2 0001"],"options":null},"Infinite\\Pilots":{"note":"","data":["811FBCCE FFFF"],"options":null},"Infinite\\Scrap Collected":{"note":"","data":["811FBCC6 FFFF"],"options":null},"Infinite\\Ship Health":{"note":"","data":["811DF6DE 0BA9"],"options":null},"Infinite\\Shots For Sniper Rifle":{"note":"","data":["811DA682 0003"],"options":null},"Infinite\\Weapons":{"note":"","data":["811DF6EA 04B0"],"options":null},"Level Select":{"note":"","data":["8006A1F5 0001"],"options":null},"Max\\Pilot Limits":{"note":"","data":["811FBCD2 FFFF"],"options":null},"Max\\Scrap Limit":{"note":"","data":["811FBCCA FFFF"],"options":null}},"569433AD-F7E13561-C:45":{"Infinite Health":{"note":"","data":["81086BCA 0038","800BAF97 0007"],"options":null}},"5753720D-2A8A884D-C:44":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C24D2 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE02F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802024B5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE015 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FC945 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFD2D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","80202565 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801D9E7D 0001"],"options":null}},"57BFF74D-DE747743-C:50":{"In-Game Cheats\\Access Cheat menu":{"note":"","data":["50000504 0000","80101308 0001"],"options":null},"In-Game Cheats\\Enable\\All Items":{"note":"To access simply pause in game play \u0026 then unpause.","data":["801012EC 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Invincibility":{"note":"","data":["802AA818 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Monsters":{"note":"","data":["802AA98B 00??"],"options":{"Are Active":"00","Are Gone":"01"}},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5E06 0064","812A5E4E 0064","812A5E5E 00C8","812A5E48 1900","812A5E18 04B0","812A5E4A 0640","812A5DE8 0960","812A5E4C 0190"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Keys":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5E03 000F"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A5E77 0001","50000F02 0000","812A5DBA 03E7"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Infinite Health (All Levels)":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on Single-Player, Co-Operative and DUKEMATCH, All Levels.","data":["8024D557 0064","802A5DB9 0064"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A6192 0064","812A61DA 0064","812A61EA 00C8","812A61D4 1900","812A61A4 04B0","812A61D6 0640","812A6174 0960","812A61D8 0190"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A6203 0001","50000E02 0000","812A6148 03E7"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on DUKEMATCH, All Levels.","data":["8024BC3F 0064","802A6145 0064"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A651E 0064","812A6566 0064","812A6576 00C8","812A6560 1900","812A6530 04B0","812A6562 0640","812A6500 0960","812A6564 0190"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A658F 0001","50000E02 0000","812A64D4 03E7"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 4 on DUKEMATCH, All Levels.","data":["8024B79B 0064","802A64D1 0064"],"options":null},"Single-Player (All Levels)\\Have All\\Items \u0026 Infinite Use on all levels":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5A7A 0064","812A5AC2 0064","812A5AD2 00C8","812A5ABC 1900","812A5ABE 0640","812A5A8C 04B0","812A5A5C 0960","812A5AC0 0190"],"options":null},"Single-Player (All Levels)\\Have All\\Keys":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5A77 000F"],"options":null},"Single-Player (All Levels)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A5AEB 0001","50000A02 0000","812A5A30 03E7"],"options":null},"Single-Player (All Levels)\\Have Infinite Health (All Levels)":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels and does what it says on the tin. Infinite health for player 1, All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["80247493 0064","8026EC8B 0064","802A5A2D 0064"],"options":null}},"580162EC-E3108BF1-C:58":{"Freeze Timer at 04:59":{"note":"Do not enable until count down to race is finished","data":["811BDB9E 3A70"],"options":null},"Have All Groups Completed":{"note":"This gives you all Cups for all Groups.","data":["50002801 0000","801BDCDC 0002"],"options":null},"Have Everything Unlocked":{"note":"Pause Game: Use Control Stick, to scroll the Cheat Menu. Press A, to activate Cheats. This will unlock everything and also be replacing all the Zombies with Pre-Historic Dinosaurs.","data":["801BDDBD 000F"],"options":null},"Have Infinite\\Free Repairs":{"note":"","data":["81097844 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Frozen Opponents":{"note":"","data":["810978A4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Grip-O-Matic Tires":{"note":"","data":["810979DC ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Hot Rod":{"note":"","data":["810977E4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Invunerability":{"note":"","data":["8109782C ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Mega Turbo":{"note":"","data":["810977CC ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Mine Dropping Ability":{"note":"","data":["81097A98 ????"],"options":{"Off":"0000","On":"0064"}},"Have Infinite\\Turbo":{"note":"","data":["810977B4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Turbo Nitrous":{"note":"","data":["810977FC ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Underwater Ability":{"note":"","data":["81097874 ????"],"options":{"Off":"0000","On":"0BBB"}},"Max Credits":{"note":"This is also Infinite until disabled","data":["811BDC1B FFFF"],"options":null},"Max Kills":{"note":"This will automatically Clear the stage if enabled and go back to the stage menu","data":["81094596 01F4"],"options":null}},"58FD3F25-D92EAA8D-C:50":{"Enable All Levels \u0026 Boarders":{"note":"","data":["80250AB9 00FF","80250ABB 0005","81250AC6 FCFF","80250AC8 0007"],"options":null},"Infinite Damage All Players and Levels":{"note":"","data":["803F4C01 0000"],"options":null},"Play As":{"note":"","data":["8001A0E7 00??"],"options":{"Akari Hayami":"02","Dion Blaster":"00","Gold Boarder":"06","Kensuke Kimachi":"01","Panda Boarder":"07","Ricky Winterborn":"03","Rob Haywood":"04","Silver Boarder":"05"}},"Prees L For Infinite Lives \u0026 Continues":{"note":"Whenever you've lost a life, Press L.Do not press L when on the main menu or during the intro Only use this feature in Match Race","data":["D00556A9 0020","8026B14B 0003"],"options":null},"Stop Timer\\Contest\\Air Make":{"note":"","data":["80319BBA 00C5"],"options":null},"Stop Timer\\Contest\\Crystal Lake":{"note":"","data":["8029C0DA 00C5"],"options":null},"Stop Timer\\Contest\\Crystal Peak":{"note":"","data":["802A889A 00C5"],"options":null},"Stop Timer\\Contest\\Golden Forest":{"note":"","data":["802A6D3A 00C5"],"options":null},"Stop Timer\\Contest\\Half Pipe":{"note":"","data":["802F51FA 00C5"],"options":null},"Stop Timer\\Time Attack\\Air Make":{"note":"","data":["8031AA4A 0000"],"options":null},"Stop Timer\\Time Attack\\Crystal Lake":{"note":"","data":["802A582A 0000"],"options":null},"Stop Timer\\Time Attack\\Crystal Peak":{"note":"","data":["802B2BCA 0000"],"options":null},"Stop Timer\\Time Attack\\Deadly Fall":{"note":"","data":["802CF56A 0000"],"options":null},"Stop Timer\\Time Attack\\Dragon Cave":{"note":"","data":["802C137A 0000"],"options":null},"Stop Timer\\Time Attack\\Golden Forrest":{"note":"","data":["802B135A 0000"],"options":null},"Stop Timer\\Time Attack\\Half Pipe":{"note":"","data":["802F638A 0000"],"options":null},"Stop Timer\\Time Attack\\Mountain Village":{"note":"","data":["802CB95A 0000"],"options":null},"Stop Timer\\Trick Attack\\Air Make":{"note":"","data":["8031AABA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Crystal Lake":{"note":"","data":["8029F66A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Crystal Peak":{"note":"","data":["802AC8EA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Deadly Fall":{"note":"","data":["802C8E0A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Dragon Cave":{"note":"","data":["802BAD3A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Golden Forrest":{"note":"","data":["802AAF5A 00C5"],"options":null},"Stop Timer\\Trick Attack\\Half Pipe":{"note":"","data":["802F63FA 00C5"],"options":null},"Stop Timer\\Trick Attack\\Mountain Village":{"note":"","data":["802C50DA 00C5"],"options":null}},"591A806E-A5E6921D-C:45":{},"596E145B-F7D9879F-C:50":{"Enable All Cheats":{"note":"Go into Options \u0026 then Magic Codes. Then Code list to turn off \u0026 on what you want.","data":["800E03AC 001F","50000301 0000","800E03AD 00FF"],"options":null},"Fifty Frames":{"note":"Identical location to the NTSC address","data":["80079E7B 0003"],"options":null},"Have All\\50 Balloons":{"note":"","data":["8020807D 0032"],"options":null},"Have All\\Control Drumstick \u0026 Adventure Two mode unlocked":{"note":"","data":["80126CCC 0003","80126CCF 0003","80126CE2 0003","80126CE3 0008"],"options":null},"Have All\\Keys":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80208659 001F"],"options":null},"Have All\\None-Adventure tracks completed":{"note":"","data":["50001204 0000","80208777 0007","50000904 0000","802087CF 0007","80208658 0007","8020865A 0007","8020865B 0007","8020865C 000F","8020865D 00FF"],"options":null},"Have All\\T.T. Amulets":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80208667 0004"],"options":null},"Have All\\T.T. time trial races beaten":{"note":"","data":["80208666 0004"],"options":null},"Have All\\Trophies":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["8020865E 0007","8020865F 00FF"],"options":null},"Have All\\Trophy Adventure races unlocked":{"note":"","data":["50000502 0000","8020886E 0007"],"options":null},"Widescreen":{"note":"","data":["81066246 3FE3","81066396 3FE3","810663FE 3FE3","8107037A 3740","811267A4 3FCE"],"options":null}},"5A160336-BC7B37B0-C:50":{"All Levels \u0026 Stages Unlocked":{"note":"","data":["50001804 0000","8008E5CF 0001"],"options":null},"Have All Gold Cards":{"note":"","data":["8008E575 00FF","8108E576 FFFF","8108E578 FFFF","8108E57A FFFF","8108E57C FFFF"],"options":null},"Infinite Red Pumped-Up Bombs":{"note":"","data":["802AC643 0004"],"options":null},"Infinite\\Credits":{"note":"","data":["802AC61B 0063"],"options":null},"Infinite\\Gems":{"note":"","data":["802AC61F 0063"],"options":null},"Infinite\\Lives":{"note":"","data":["802AC617 0063"],"options":null},"Infinite\\Time":{"note":"","data":["802AC633 0000"],"options":null}},"5A9D3859-97AAE710-C:45":{"Anger metre always full":{"note":"","data":["800D5978 00FF","800D5666 00FF"],"options":null},"Crunched Players":{"note":"","data":["810DBA6C 3F00"],"options":null},"Difficulty Mod":{"note":"","data":["80120639 00??"],"options":{"Easy":"01","Hard":"03","Medium":"02","Very Easy":"00"}},"Extra Teams":{"note":"","data":["80115A0C 0001"],"options":null},"Get In Fights Constantly":{"note":"","data":["800CF766 0020"],"options":null},"Players\\Head Size":{"note":"","data":["81118A2C ????"],"options":{"Normal Size":"3F80","Very Large":"4080","Very Small":"3F00"}},"Players\\Height Size":{"note":"","data":["81120688 ????"],"options":{"Giants":"4080","Large":"3FC0","Midgets":"3F00","Normal Size":"3F80"}},"Team 1\\Score pts":{"note":"","data":["8011C061 00??"],"options":{"30 Points":"1E","50 Points":"23","75 Points":"4B","99 Points":"63","Zero Points":"00"}},"Team 2\\Score pts":{"note":"","data":["8011F571 ????"],"options":{"0 Points":"2305","5 Points":"4B07","9 Points":"6309","ero Points":"0000"}}},"5AC383E1-D712E387-C:45":{"Double Frames":{"note":"Sadly only 30fps when playing but at least its not the SLOW 15fps rate","data":["8002ADAB 0001"],"options":null},"Infinite\\Money\\Player 1":{"note":"","data":["81324B46 270F"],"options":null},"Infinite\\Money\\Player 2":{"note":"","data":["81324B5A 270F"],"options":null},"Infinite\\Money\\Player 3":{"note":"","data":["81324B6E 270F"],"options":null},"Infinite\\Money\\Player 4":{"note":"","data":["81324B82 270F"],"options":null},"[Language Select]":{"note":"To use this load the game then enable this cheat and Reset (F1) you will now be on your chosen Language and Relative Local Language Board and Money.","data":["D009675F 0001","80096758 00??"],"options":{"American":"00","British":"01","France":"02","German":"03"}}},"5C1B5FBD-7E961634-C:46":{"Access In-Game Cheat Menu":{"note":"To Access Pause Game Play. This gives you access to In-game Cheats like God Mode,Level Select,All Items Etc","data":["81137DB6 07FF","80137E93 0005"],"options":null},"Boots Of Speed Select\\Player 1":{"note":"","data":["8113F538 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113F6D4 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113F870 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113FA0C ????"],"options":{"Off":"0000","On":"03FF"}},"Have All\\Armour":{"note":"","data":["8013F651 0019","8013F655 0014","8013F659 0014","8013F65D 0014"],"options":null},"Have All\\Items And Artifacts\\Player 1":{"note":"","data":["8013F651 0019","8013F655 0014","8013F659 0014","8013F65D 0014","8013F661 0001","8013F663 00FF","8013F665 0002","8013F667 00FF","8013F669 0003","8013F66B 00FF","8013F66D 0004","8013F66F 00FF","8013F671 0006","8013F673 00FF","8013F675 0007","8013F677 00FF","8013F679 0008","8013F67B 00FF","8013F67D 0009","8013F67F 00FF","8013F681 000A","8013F683 00FF","8013F685 000B","8013F687 00FF","8013F689 000C","8013F68B 00FF","8013F68D 000D","8013F68F 00FF","8013F691 000E","8013F693 00FF","8013F695 000F","8013F697 00FF","8013F699 0010","8013F69B 00FF","8013F69D 0011","8013F69F 00FF","8013F6A1 0012","8013F6A3 00FF","8013F6A5 0013","8013F6A7 00FF","8013F6A9 0014","8013F6AB 00FF","8013F6AD 0015","8013F6AF 00FF","8013F6B1 0016","8013F6B3 00FF","8013F6B5 0017","8013F6B7 00FF","8013F6B9 0018","8013F6BB 00FF","8013F6BD 0019","8013F6BF 00FF","8013F6C1 001A","8013F6C3 00FF","8013F6C5 001B","8013F6C7 00FF","8013F6C9 001C","8013F6CB 00FF","8013F6CD 001D","8013F6CF 00FF","8013F6D1 001E","8013F6D3 00FF","8013F6D5 001F","8013F6D7 00FF","8013F6D9 0020","8013F6DB 00FF","8013F6E9 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113F6FC 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113F6D8 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113F874 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113FA10 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013F715 00FF","8013F717 00FF","8013F719 00FF","8013F71B 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013F6F1 00FF","8013F6F3 00FF","8013F6F5 00FF","8013F6F7 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013F88D 00FF","8013F88F 00FF","8013F891 00FF","8013F893 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013FA29 00FF","8013FA2B 00FF","8013FA2D 00FF","8013FA2F 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013F71D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013F2E9 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013F485 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013F621 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013F71F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013F2EB 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013F487 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013F623 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113F52C ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113F6C8 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113F864 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113FA00 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113F6EC FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113F2B8 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113F454 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113F5F0 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8113F533 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113F6CE ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113F86A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113FA06 ????"],"options":{"Off":"0000","On":"03FF"}}},"5C9191D6-B30AC306-C:4A":{"99 Points":{"note":"","data":["801D8E13 0063"],"options":null},"Always First Place":{"note":"","data":["801D040F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801D06F3 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801D06CE 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801D0537 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801D0B5A 0005","801D0DFA 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801D053F 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800E84C3 0007"],"options":null},"Super Speed":{"note":"","data":["801D0537 0005","D0161DC1 0010","801D0537 0020"],"options":null}},"5CD4150B-470CC2F1-C:45":{"Access\\All Secret Characters":{"note":"This code is Fantastic, You have 12 characters to choose from to you race without any bike, just on foot","data":["50000C04 0000","801839CF 0001"],"options":null},"Access\\All Superbikes":{"note":"","data":["50000304 0000","801839CF 0001"],"options":null},"Access\\All Tracks":{"note":"","data":["50000BD8 0000","80182F87 0001"],"options":null},"Infinite Lasers\\Player 1":{"note":"","data":["80170B99 00C8"],"options":null},"Infinite Lasers\\Player 2":{"note":"","data":["80171241 00C8"],"options":null},"Infinite Lasers\\Player 3":{"note":"","data":["80171869 00C8"],"options":null},"Infinite Lasers\\Player 4":{"note":"","data":["80171ED1 00C8"],"options":null},"Infinite Nitros\\Player 2":{"note":"","data":["801711CB 0004","801711CF 0004"],"options":null},"Infinite Nitros\\Player 3":{"note":"","data":["80171833 0004","80171837 0004"],"options":null},"Infinite Nitros\\Player 4":{"note":"","data":["80171E9B 0004","80171E9F 0004"],"options":null},"Infinite Shield\\Player 2":{"note":"","data":["801711F5 00C8"],"options":null},"Infinite Shield\\Player 3":{"note":"","data":["8017185D 00C8"],"options":null},"Infinite Shield\\Player 4":{"note":"","data":["80171EC5 00C8"],"options":null},"Infinite\\Nitros\\Player 1":{"note":"","data":["80170B63 0004","80170B67 0004"],"options":null},"Infinite\\Shield\\Player 1":{"note":"","data":["80170B8D 00C8"],"options":null},"[Screen Hud Clear]":{"note":"If you are using a Plugin other then Jabos and can not see through the Thick Hud then Let the game load 1st before Putting this code on,Or it will give an error and Freeze","data":["80092B8B 0004"],"options":null}},"5D40ED2C-10D6ABCF-C:00":{"Infinite Max Health":{"note":"","data":["8011249D 00A0"],"options":null},"Infinite Max Lives":{"note":"","data":["801124B4 0009"],"options":null},"Infinite Max Shield":{"note":"","data":["801124A3 00A0"],"options":null}},"5E547A4D-90E60795-C:45":{"Character Creation\\Max\\Accuracy":{"note":"","data":["81115A20 4170"],"options":null},"Character Creation\\Max\\Arm Str.":{"note":"","data":["81115A4C 4170"],"options":null},"Character Creation\\Max\\Bunting":{"note":"","data":["81115A38 4170"],"options":null},"Character Creation\\Max\\Clutch":{"note":"","data":["81115A54 4170"],"options":null},"Character Creation\\Max\\Contact":{"note":"","data":["81115A28 4170"],"options":null},"Character Creation\\Max\\Defense":{"note":"","data":["81115A48 4170"],"options":null},"Character Creation\\Max\\Power":{"note":"","data":["81115A2C 4170"],"options":null},"Character Creation\\Max\\Speed":{"note":"","data":["81115A44 4170"],"options":null},"Character Creation\\Max\\Stamina":{"note":"","data":["81115A24 4170"],"options":null},"Character Creation\\Max\\Streak":{"note":"","data":["81115A50 4170"],"options":null},"Character Creation\\Max\\VS LHB":{"note":"","data":["81115A3C 4170"],"options":null},"Character Creation\\Max\\VS LHP":{"note":"","data":["81115A30 4170"],"options":null},"Character Creation\\Max\\VS RHB":{"note":"","data":["81115A40 4170"],"options":null},"Character Creation\\Max\\VS RHP":{"note":"","data":["81115A34 4170"],"options":null},"Infinite\\Balls":{"note":"","data":["8006E4DF 0000"],"options":null},"Infinite\\Character Creation Points":{"note":"","data":["81103350 4170"],"options":null},"Infinite\\Outs":{"note":"","data":["8006E4E3 0000"],"options":null},"Infinite\\Pitch Type Creation Points":{"note":"","data":["811039BC 4170","811039C0 4170"],"options":null},"Infinite\\Strikes":{"note":"","data":["8006E4E1 0000"],"options":null}},"5F25B0EE-6227C1DB-C:45":{"Away Team\\Infinite Time Outs":{"note":"","data":["81135098 0700"],"options":null},"Away Team\\No Time Outs":{"note":"","data":["81135098 0000"],"options":null},"Home Team\\Infinite Time Outs":{"note":"","data":["811344D0 0700"],"options":null},"Home Team\\No Time Outs":{"note":"","data":["811344D0 0000"],"options":null},"Infinite Shot Clock":{"note":"","data":["811318F2 05A0"],"options":null},"Jump Shooting":{"note":"","data":["8017B7AD 0064"],"options":null},"Max Inside Scoring":{"note":"","data":["8017B7AC 0064"],"options":null},"Max\\3 Pointers":{"note":"","data":["8017B7AE 0064"],"options":null},"Max\\Blocking":{"note":"","data":["8017B7B2 0064"],"options":null},"Max\\Def. Awareness":{"note":"","data":["8017B7B3 0064"],"options":null},"Max\\Def. Rebounds":{"note":"","data":["8017B7B6 0064"],"options":null},"Max\\Dribbling":{"note":"","data":["8017B7BC 0064"],"options":null},"Max\\Dunking":{"note":"","data":["8017B7B0 0064"],"options":null},"Max\\Endurance":{"note":"","data":["8017B7BD 0064"],"options":null},"Max\\Free Throws":{"note":"","data":["8017B7AF 0064"],"options":null},"Max\\Jumping":{"note":"","data":["8017B7B7 0064"],"options":null},"Max\\Off. Awareness":{"note":"","data":["8017B7BA 0064"],"options":null},"Max\\Off. Rebounds":{"note":"","data":["8017B7B5 0064"],"options":null},"Max\\Passing":{"note":"","data":["8017B7B9 0064"],"options":null},"Max\\Quickness":{"note":"","data":["8017B7B4 0064"],"options":null},"Max\\Shooting Range":{"note":"","data":["8017B7BE 0064"],"options":null},"Max\\Speed":{"note":"","data":["8017B7BB 0064"],"options":null},"Max\\Stealing":{"note":"","data":["8017B7B1 0064"],"options":null},"Max\\Strength":{"note":"","data":["8017B7B8 0064"],"options":null}},"5F3F49C6-0DC714B0-C:50":{"Access All\\Bikes":{"note":"","data":["8107F6EE FFFF"],"options":null},"Access All\\Tracks":{"note":"","data":["8107F6F0 00FF","8107F6F2 FFFF"],"options":null},"Infinite\\Nitro":{"note":"","data":["810BA540 4296"],"options":null},"Infinite\\Nitro Always On":{"note":"","data":["810BA52C 0010"],"options":null},"Laps 2 Race":{"note":"","data":["800F36B8 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}}},"5F6A04E2-D4FA070D-C:53":{"Access All Levels":{"note":"","data":["8008A9D6 0001","8008A9EA 0001","8008AA12 0001","8008AA62 0001","8008AA76 0001","8008AA8A 0001","8008AA9E 0001","8008AAB2 0001","8008AAC6 0011","8008AADA 0021","8008AAEE 0001","8008AB16 0011","8008AB2A 0041","8008AB3E 0021","8008AB52 0081","8008AB66 0001","8008AB7A 0081","8008AB8E 0001","8008ABB6 0001","8008ABDE 0001","8008ABF2 0011","8008AC06 0021","8008AC56 0001","8008AF3A 0001","8008AF4E 0001","8008AF62 0001","8008AF76 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81094150 0063","81094152 0063","81094154 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A9297 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810866C2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810864C4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80094305 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A92B5 00??","800A92C5 00??","800A92D5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"5FD7CDA0-D9BB51AD-C:50":{"1 Lap To Race":{"note":"","data":["D01226C8 0000","801226C8 0009"],"options":null},"Access Everything":{"note":"\"Have All Characters,Cups,Courses,\u0026Boards\"","data":["810B3160 0100","810B3164 0F00"],"options":null},"Infinite Cash":{"note":"","data":["8112272A 03E7"],"options":null},"Infinite Tools Options":{"note":"","data":["801226D5 00??"],"options":{"Board":"06","Fan":"01","Ghost":"02","Mouse":"05","Pan":"03","Rock":"04"}},"Infinite Weapons\\Lucky Dip":{"note":"\"Lucky Dip is Infinite Usage Of What Ever You Get From Each Red Box\"","data":["801226D4 0003"],"options":null}},"60460680-305F0E72-C:50":{"Access All In-Game Cheats":{"note":"Pause Gameplay To Access","data":["81157E46 000F","81157E56 FFFF"],"options":null},"Access All Navigation Cards":{"note":"","data":["80157E9B 0005"],"options":null},"Access Secret Worlds":{"note":"","data":["81152946 0064"],"options":null},"Infinite Lives":{"note":"","data":["81157EAE 0063"],"options":null},"Max \u0026 Total Gold":{"note":"","data":["80157E4B 0063","80157E4F 0063"],"options":null}},"60C437E5-A2251EE3-C:50":{"Character Select":{"note":"","data":["80075F52 00??"],"options":{"Big Head.":"04","Flame Grilled":"08","Normal":"00","Play as Deadwing.":"01"}},"Have All\\Cheats: Book of Shadows":{"note":"","data":["81075F4E 0FFF"],"options":null},"Have All\\Dark Souls Collected":{"note":"","data":["80075F49 0078"],"options":null},"Have All\\Gads \u0026 The Poign":{"note":"","data":["80030E57 000F"],"options":null},"Have All\\Items":{"note":"Youll not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50001B20 0000","80030613 000B"],"options":null},"Have All\\L-Eclipser":{"note":"You will not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50000320 0000","80030973 000B"],"options":null},"Have All\\Levels Unlocked":{"note":"","data":["5000101C 0000","80030A0E 0001"],"options":null},"Infinite\\0.9mm Ammo":{"note":"","data":["81075B3A 0190"],"options":null},"Infinite\\Accumulators":{"note":"","data":["800306D7 0005"],"options":null},"Infinite\\Cadeaux'":{"note":"","data":["81075B36 03E7"],"options":null},"Infinite\\Max Health/Air/Shadow Charge \u0026 Voodoo Power":{"note":"","data":["50000604 0000","81075B16 2710"],"options":null},"Infinite\\Prisms":{"note":"","data":["80030957 0003"],"options":null},"Infinite\\Retractors":{"note":"","data":["800308B7 0003"],"options":null},"Infinite\\Shotgun Shells":{"note":"","data":["80075B2F 0063"],"options":null},"Infinite\\Violator Ammo":{"note":"","data":["81075B32 03E7"],"options":null},"Press L To Levitate":{"note":"Press the L-Button to rise and let go and press again in stages to come back down.","data":["D0059097 0020","80075578 0041"],"options":null},"[Ammo Always Displayed On Screen]":{"note":"","data":["50000408 0000","80075ACD 0007"],"options":null},"[Health Meter Displayed On Screen]":{"note":"","data":["81075B10 0000","81075B12 00FF"],"options":null}},"60D5E10B-8BEDED46-C:50":{"All Masks":{"note":"Press GS To Activate All Masks","data":["891F1110 8780"],"options":null},"Have All\\Crates":{"note":"","data":["810C6FE8 7FFF","50000602 0000","810C6FEA FFFF","800C6FF2 00FF"],"options":null},"Have All\\Yellow Lums":{"note":"","data":["50006401 0000","800C6FF8 00FF","50001901 0000","800C6FAD 00FF","811F1072 0005","50005702 0000","811F1078 FFFF"],"options":null},"Infinite\\Max Health":{"note":"","data":["811BC54C 001E"],"options":null},"Infinite\\Oxygen":{"note":"","data":["810F4A80 4396"],"options":null},"Open Options\\Open all cages":{"note":"","data":["801F1032 0050","50000602 0000","811F10E0 FFFF"],"options":null},"Open Options\\levels \u0026 Map":{"note":"","data":["50000801 0000","801F1101 00FF"],"options":null}},"61D116B0-FA24D60C-C:50":{"Access The Rock Alcatraz bonus level":{"note":"Press C-right, on any level, at the track selection screen","data":["D00F4174 0002","80100120 0006"],"options":null},"All\\Keys \u0026 Cars":{"note":"","data":["50000E16 0000","810CAD52 FFFF"],"options":null},"All\\Keys \u0026 Cars Circuits":{"note":"","data":["8105696E FFFF","8105699A FFFF","50000404 0000","81056910 FFFF"],"options":null},"Always 1st":{"note":"","data":["80101409 0000"],"options":null},"Automatic Transmission":{"note":"","data":["800C8100 0001"],"options":null},"Big Back Wheels":{"note":"","data":["800DA03C 0002"],"options":null},"Big Front Wheels":{"note":"","data":["800DA02C 0002"],"options":null},"Difficulty Very Easy":{"note":"","data":["810D9F7A 0002"],"options":null},"Gravity Modifier":{"note":"","data":["800F3E61 00??"],"options":{"Ballon \u0026 Two Weights":"00","One Weight":"01","Two Weights":"02"}},"Laps To Race":{"note":"","data":["800E7411 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Max Race Points":{"note":"","data":["810DACCA 03E7"],"options":null},"No\\Auto Abort":{"note":"","data":["800F4140 0001"],"options":null},"No\\Car Collisions":{"note":"","data":["800F4120 0001"],"options":null},"Resurrect In Place":{"note":"","data":["800F4150 0001"],"options":null},"Stop Timer":{"note":"","data":["800F4160 0001"],"options":null}},"61F5B152-046122AB-C:4A":{"Always 1st":{"note":"","data":["8011C25D 0001"],"options":null},"Have All Characters":{"note":"","data":["801170E2 007D","811170E4 FFFF"],"options":null},"Have All Tracks Completed":{"note":"","data":["811170DA FFFF","811170DC 3FFF","811170DE 3FFF","811170E0 3FFF","811170E2 00FF"],"options":null},"No Damage":{"note":"","data":["800A8047 0001"],"options":null},"Unlock All Tracks":{"note":"","data":["801170D8 00FF","801170D9 00FF","801170DA 00FF","801170DB 00FF","811170D8 FFFF"],"options":null}},"62269B3D-FE11B1E8-C:45":{"Always Place 1st":{"note":"","data":["8131C70E 0000"],"options":null},"Extra Cars \u0026 Tracks":{"note":"","data":["50000201 0000","8032690C 00FF","8032690F 00FF","813243CC FFFF"],"options":null},"Have 1-6 Level Points":{"note":"","data":["50000602 0000","8032685F 0064"],"options":null},"Only Race 1 Lap Championship Mode":{"note":"","data":["8031EBDB 0002"],"options":null}},"62E957D0-7FC15A5D-C:50":{"All Golf Courses Unlocked":{"note":"","data":["80130FED 0001"],"options":null},"Always On 1st Stroke":{"note":"","data":["801B74F3 0000"],"options":null},"Infinite Power Shots":{"note":"","data":["801B74F8 0042"],"options":null},"Unlock all Characters and Birdy Badges":{"note":"Unlocks Metal Mario, Maple, Luigi, Sonny, Wario, Harry, Bowser, Yoshi, Mario and DK","data":["50006C01 0000","801304A4 0001","50000901 0000","80130518 0001","50000901 0000","80130521 0001"],"options":null},"Weather Select":{"note":"","data":["800BACAB 00??"],"options":{"Always Rains":"01","Never Rains":"00"}},"Wind Speed Select":{"note":"","data":["800BACA1 00??"],"options":{"0 MPH":"00","20 MPH":"14"}}},"62F6BE95-F102D6D6-C:50":{"99 Accuracy":{"note":"","data":["80131530 0063"],"options":null},"99 Bonus":{"note":"","data":["80131537 0063"],"options":null},"All Boss Attack levels unlocked":{"note":"Unlocks all planes in death match","data":["80355701 003F"],"options":null},"Always Have\\F-15J Eagle":{"note":"","data":["8027D69C 0010"],"options":null},"Always Have\\X-29A A.T.D.":{"note":"","data":["8027D69D 0020"],"options":null},"Extra Planes":{"note":"","data":["8127D69C FFFF"],"options":null},"F-15J Eagle \u0026 X-29A A.T.D. planes unlocked":{"note":"","data":["8035575C 00??"],"options":{"Both of the above planes":"3F","F-15J Eagle":"10","X-29A A.T.D.":"20"}},"Gun Select":{"note":"","data":["8027E9D3 00??"],"options":{"22mm":"0B","22mm BB Shot":"0A","Air Mines":"02","Chaff":"00","Fire":"14","Fire Arrow":"21","Fire Wave":"17","Fireball":"0D","Hunai Shot":"0C","Jammings":"01","Mahibishi":"03","Ninja Glitch":"16","Ninjabeam":"28","Phoenix":"1F","Rocket":"1E","Sabre":"0E","Star":"20","Tomahawk":"15"}},"Infinite\\99 Lives":{"note":"","data":["80355748 0063"],"options":null},"Infinite\\Armor":{"note":"","data":["8127D9A4 44A0","8127D9A8 44A0"],"options":null},"Infinite\\Chaffs":{"note":"","data":["8027E9C7 000A"],"options":null},"Infinite\\Gun":{"note":"","data":["8027EAC0 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8027D9A5 00C8","8027D9A9 00C8"],"options":null},"Infinite\\Special Weapons":{"note":"","data":["8027EE82 0002"],"options":null},"Stage Select screen unlocked":{"note":"Hold L + R at the Game Mode screen and it will unlock every single level in the game; from Tokyo to Space. Do not hold L + R on any other screen, as this may cause game to freeze","data":["D0281691 0030","8027D5C0 000A","D0281691 0030","8027D5DA 000A"],"options":null}},"630AA37D-896BD7DB-C:50":{"Have All\\Cars":{"note":"","data":["50000C01 0000","8009B7D8 0001"],"options":null},"Have All\\Difficulty Levels":{"note":"","data":["8009B7D7 0003"],"options":null},"Have All\\Tracks":{"note":"","data":["50000C01 0000","80099498 0001"],"options":null},"Max\\Checkpoint Bonus":{"note":"","data":["812E013E 03E7"],"options":null},"Max\\Collisions Points":{"note":"","data":["812E013A 03E7"],"options":null},"Max\\Points Aid":{"note":"","data":["8112A3CE 03E7"],"options":null},"Solo Mode\\Infinite Health\\Alpine Ridge":{"note":"","data":["D02C5224 0080","802C5233 00E1"],"options":null},"Solo Mode\\Infinite Health\\Bayou Run":{"note":"","data":["D029137C 0080","8029138B 00E1"],"options":null},"Solo Mode\\Infinite Health\\Destruction Junction":{"note":"","data":["D02A5EB0 0080","802A5EBF 00E1"],"options":null},"Solo Mode\\Infinite Health\\Metro Challenge":{"note":"","data":["D02F9018 0080","802F9027 00E1"],"options":null},"Solo Mode\\Infinite Health\\Midnyte Rumble":{"note":"","data":["D0317C0B 0080","80317C1A 00E1"],"options":null},"Solo Mode\\Infinite Health\\Seascape Sprint":{"note":"","data":["D02E0124 0080","802E0133 00E1"],"options":null},"Solo Mode\\Infinite Health\\Sunset Canyon":{"note":"","data":["D030EF68 0080","8030EF77 00E1"],"options":null},"Solo Mode\\Infinite Health\\Terminal Impact":{"note":"","data":["D02C0FA3 0080","802C0FB2 00E1"],"options":null}},"635A2BFF-8B022326-C:45":{"16:9 Widescreen":{"note":"Menu Misalignments. For 16:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81325034 3C07","81325036 3FE3","8127D6A0 1000","8127D6D4 1000"],"options":null},"21:9 Widescreen":{"note":"Menu Misalignments. For 21:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81325034 3C07","81325036 4018","8127D6A0 1000","8127D6D4 1000"],"options":null},"Don't Hurt Mario\\Falling":{"note":"","data":["8033B22C 00E8","8133B178 FFFF"],"options":null},"Don't Hurt Mario\\Monsters":{"note":"","data":["A033B197 0001"],"options":null},"Funny Mario Options\\Mario Walks On Lava":{"note":"","data":["81250900 1000"],"options":null},"Funny Mario Options\\Mario Walks On Sand":{"note":"","data":["81255490 1000","8125572C 1000","8125572E 0031"],"options":null},"Funny Mario Options\\Mario Walks On Water":{"note":"","data":["81381764 0800","81381766 0024","81000090 3C04","81000092 8034","81000094 8484","81000096 B1E6","81000098 4484","8100009A 3000","810000A0 4680","810000A2 3120","810000A4 4604","810000A6 903C","810000AC 4500","810000AE 0002","810000B4 4600","810000B6 2486","810000B8 080E","810000BA 05DB","810000BC E712"],"options":null},"Funny Mario Options\\Mario's Cap\\Off \u0026 in His Hand":{"note":"Here you can Choose Options with Mario with His Cap off \u0026 in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["8033B177 00??"],"options":{"Cap In Hand":"20","Flying Mario Cap In Hand":"28","Invisible Mario Cap In Hand":"22","Invisible Metal Mario Cap In Hand":"26","Metal Mario Cap In Hand":"24"}},"Funny Mario Options\\Mario's Cap\\On \u0026 An Extra in His Hand":{"note":"Here you can Choose Options with Mario with His Cap on \u0026 An Extra in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["8033B177 00??"],"options":{"Cap In Hand":"30","Flying Mario Cap In Hand":"38","Invisible Mario Cap In Hand":"32","Invisible Metal Mario Cap In Hand":"36","Metal Mario Cap In Hand":"34"}},"Have\\Level Select":{"note":"","data":["A032D58C 0001"],"options":null},"Have\\Turbo Running Speed":{"note":"","data":["8033B1C3 00FF"],"options":null},"Infinite\\Energy \u0026 Breath":{"note":"","data":["8033B21E 0008"],"options":null},"Infinite\\Lives":{"note":"","data":["8033B21D 0064"],"options":null},"Level Select":{"note":"Select a Level. Jump Into a Painting. Press A at the Stars Collected Screen. As Stats are fading hold L, and you'll jump to the level you've selected.","data":["D033AFA1 0020","A032DDF9 00??"],"options":{"Big Boo's Haunt":"04","Bob omb Battlefield":"09","Bowser In The Dark World":"11","Bowser In The Dark World Boss":"1E","Bowser In The Fire Sea":"13","Bowser In The Fire Sea Boss":"21","Bowser In The Sky":"15","Bowser In The Sky Boss":"22","Castle Courtyard":"1A","Cavern Of The Metal Cap":"1C","Cool Cool Mountain":"05","Dire Dire Docks":"17","Hazy Maze Cave":"07","Intro":"01","Jolly Roger Bay":"0C","Lethal Lava Land":"16","Mushroom Castle":"06","Mushroom Castle Field":"10","Rainbow Ride":"0F","Shifting Sand Land":"08","Snowman's Land":"0A","Tall Tall Mountain":"24","The End":"19","The Princess's Secret Slide":"1B","The Secret Aquarium":"14","Tick tock Clock":"0E","Tiny Huge World":"0D","Tower Of The Wing Cap":"1D","Vanish Cap Under The Moat":"12","Wet Dry World":"0B","Whomp's Fortress":"18","Wing Mario Over The Rainbow":"1F"}},"Mario's Cap\\Off Options":{"note":"Here you can Choose Options with Mario without His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["8033B177 00??"],"options":{"Flying Mario":"08","Invisible Flying Mario":"0A","Invisible Mario":"02","Invisible Metal Flying Mario":"0F","Mario No Cap":"01","Metal Flying Mario":"0D","Metal Mario":"04"}},"Mario's Cap\\On Options":{"note":"Here you can Choose Options with Mario with His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["8033B177 00??"],"options":{"Flying Mario":"19","Invisible Mario":"12","Invisible Metal Mario":"16","Metal Mario":"15"}},"Press GS For 255 Coins":{"note":"","data":["8933B218 00FF"],"options":null},"Press L To Levitate":{"note":"Press L to levitate \u0026 Let go to land","data":["D033AFA1 0020","8133B1BC 4220","D033AFA1 0020","8133B17C 0300","D033AFA1 0020","8133B17E 0880"],"options":null},"[Slot A Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80207723 0001","8020770B 00C7","50001101 0000","8020770C 00FF"],"options":null},"[Slot A Codes]\\Have All\\Key doors unlocked (and mote empty)":{"note":"","data":["8020770A 007E"],"options":null},"[Slot A Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80207725 0064"],"options":null},"[Slot B Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80207793 0001","8020777B 00C7","50001101 0000","8020777C 00FF"],"options":null},"[Slot B Codes]\\Have All\\Key doors unlocked (and mote empty)":{"note":"","data":["8020777A 007E"],"options":null},"[Slot B Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80207795 0064"],"options":null},"[Slot C Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80207803 0001","802077EB 00C7","50001101 0000","802077EC 00FF"],"options":null},"[Slot C Codes]\\Have All\\Key doors unlocked (and mote empty)":{"note":"","data":["802077EA 007E"],"options":null},"[Slot C Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80207805 0064"],"options":null},"[Slot D Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80207873 0001","8020785B 00C7","50001101 0000","8020785C 00FF"],"options":null},"[Slot D Codes]\\Have All\\Key doors unlocked (and mote empty)":{"note":"","data":["8020785A 007E"],"options":null},"[Slot D Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80207875 0064"],"options":null}},"636E6B19-E57DDC5F-C:50":{"Access\\All Cars":{"note":"","data":["8015EC13 003F"],"options":null},"Access\\All Tracks":{"note":"","data":["8015EC0E 0070"],"options":null},"Access\\Championship,World,Expert":{"note":"","data":["8015EC1C 0001"],"options":null},"Access\\Expert Times":{"note":"","data":["8015EC10 0031"],"options":null},"Access\\In-Game Cheat Menu":{"note":"On The Title Screen, Hold Z Button \u0026 Push L Button","data":["811CFE09 00FF","811F31FF 04FF","811CE165 FF03"],"options":null}},"63E7391C-E6CCEA33-C:45":{"Always Have Weapon Options\\Player 1":{"note":"","data":["810E2994 00??"],"options":{"Anvil":"79","Bee hive":"6D","Bird bath":"04","Blue Swordfish":"63","Bouy":"29","Broom":"08","Chair":"0B","Champagne":"0C","Chicken":"0E","Club":"03","Crate":"0F","Deck chair":"14","Egg":"16","Fish":"1A","Frying Pan":"1E","Gardeners Fork":"1D","Mallet":"2A","Milk Bottle":"2D","Mooses head":"78","NCube knife":"09","NCube missiles":"0A","Plank":"39","Rolling Pin":"41","Saucepan":"64","Spade":"46","Spanner":"4E","Stick":"55","Stool":"6B","Tennis Racket":"48","Watermelon":"2B","Wooden Chair":"1F","Wooden Spoon":"65"}},"Always Have Weapon Options\\Player 2":{"note":"","data":["810E2C6C 00??"],"options":{"Anvil":"79","Bee hive":"6D","Bird bath":"04","Blue Swordfish":"63","Bouy":"29","Broom":"08","Chair":"0B","Champagne":"0C","Chicken":"0E","Club":"03","Crate":"0F","Deck chair":"14","Egg":"16","Fish":"1A","Frying Pan":"1E","Gardeners Fork":"1D","Mallet":"2A","Milk Bottle":"2D","Mooses head":"78","NCube knife":"09","NCube missiles":"0A","Plank":"39","Rolling Pin":"41","Saucepan":"64","Spade":"46","Spanner":"4E","Stick":"55","Stool":"6B","Tennis Racket":"48","Watermelon":"2B","Wooden Chair":"1F","Wooden Spoon":"65"}},"Infinite Health\\Player 1":{"note":"","data":["810E279C 42C8"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["810E2A74 42C8"],"options":null},"Infinite Time":{"note":"","data":["810FED4C 42F0"],"options":null},"One Hit To Kill\\Player 1":{"note":"","data":["810E2A74 3F80"],"options":null},"One Hit To Kill\\Player 2":{"note":"","data":["810E2D4C 3F80"],"options":null},"Open All Versus Arenas":{"note":"","data":["810E44F4 03FF"],"options":null},"Unlock All Characters":{"note":"This Gives you all Characters to choose from plus fixes A freeze on the Charecter Select Menu by having it on","data":["810E44F2 00FF"],"options":null}},"641D3A7F-86820466-C:50":{"Difficulty Select Options":{"note":"","data":["811C5C1C ????"],"options":{"Hard":"0101","Normal":"0100","Ultimate":"0102"}},"Have All\\Keys":{"note":"","data":["50000410 0000","80181B20 0063","50000410 0000","80181B28 0063"],"options":null},"Have All\\Moves":{"note":"","data":["50005306 0000","811876D0 0100","50005306 0000","811876D2 00FF"],"options":null},"Have All\\Moves At Skill Level 250":{"note":"","data":["50000E06 0000","8018C953 00FA","50001306 0000","8018C9AD 00FA","50003006 0000","8018CA37 00FA"],"options":null},"Infinite\\Max Body Stats":{"note":"","data":["81181638 270F","81181678 0063","50000C02 0000","81181640 270F","50000502 0000","81181670 270F","50000602 0000","81181698 270F","50000602 0000","811816A6 270F"],"options":null},"Infinite\\Max Health":{"note":"","data":["81181630 270F","81181632 270F"],"options":null},"Infinite\\Refresh Items":{"note":"","data":["50000E10 0000","801819F8 0063","50000D10 0000","80181A00 0063"],"options":null},"Infinite\\Weapons \u0026 Items":{"note":"","data":["50000610 0000","80181AD0 0063","50000610 0000","80181AD8 0063"],"options":null},"Level 999":{"note":"","data":["81181678 270F"],"options":null},"Level and Battle Select":{"note":"The level and battle select screen can be accessed by pressing A at the main menu","data":["801D74A4 0005"],"options":null},"Play As":{"note":"","data":["811C5CF6 00??"],"options":{"Alien":"03","President Weller":"02","The real Mr Diaz Baddie":"01"}},"Press L To Levitate":{"note":"","data":["D00CCE25 0020","812558F0 3FCB"],"options":null},"[Have Full Power and Max Combos]":{"note":"Gives you full power and Max Combos in fights","data":["811C6052 03FC"],"options":null},"[Unlock all Code Key Doors]":{"note":"Code Key always Re-newed and Matching all Doors","data":["801C5C16 00FF"],"options":null}},"6420535A-50028062-C:45":{"Access All Levels":{"note":"","data":["8020850E 00FF","80208510 00FF"],"options":null},"Extended Tongue":{"note":"","data":["8133176E FFFF"],"options":null},"Have 99 Crowns":{"note":"","data":["80251767 0063"],"options":null},"Have All Levels Completed":{"note":"","data":["80208512 0019","80208513 0019","80208514 0015","80208515 0018","80208516 0017","80208517 0017"],"options":null},"Infinite Health":{"note":"","data":["80174CF3 000A"],"options":null},"Level Select":{"note":"","data":["8029087B 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06"}}},"64F1B7CA-71A23755-C:50":{"Have\\All Items":{"note":"","data":["50000501 0000","80389C4E 0001","50000301 0000","80389C55 0001","80389C5E 0001","80389C5F 0001","80389C61 0001","50000E01 0000","80389C64 0001"],"options":null},"Have\\Exp Points":{"note":"","data":["80389C4D 0063"],"options":null},"Have\\Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C33 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C49 0001","81389C4A 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C42 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C4D 0064"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C4C 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the GS button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C94 ????","89389C91 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CF1 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C8C 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C8C 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C41 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C46 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"650EFA96-30DDF9A7-C:50":{"Always Place 1st\\Player 1":{"note":"","data":["801BFF4F 0000"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801C020E 00FF"],"options":null},"Lap Timer Below 0'00'10\\Player 1":{"note":"","data":["811C00E6 0000"],"options":null},"Lap Timer Below 0'00'10\\Player 2":{"note":"","data":["811C045E 0000"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801C0077 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801C069A 0005","801C093A 0005"],"options":null},"Misses Don't Count\\Player 1":{"note":"","data":["801C007F 0000"],"options":null},"Misses Don't Count\\Player 2":{"note":"","data":["811C03F6 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800D8003 0007"],"options":null},"Set\\Speed Size":{"note":"","data":["801C0077 00??"],"options":{"Fast":"0F","Medium":"0A","Slow":"01"}},"Set\\Wave Size":{"note":"","data":["800E6B90 00??"],"options":{"Medium":"19","Oh My God":"FF","Rough":"64","Smooth":"00"}}},"65234451-EBD3346F-C:4A":{"Drive Through Anything\\Ballista":{"note":"","data":["803F8BF8 0001"],"options":null},"Drive Through Anything\\Dump Truck":{"note":"","data":["813EEBE8 0101"],"options":null},"Drive Through Anything\\Police Car":{"note":"","data":["813F8FD8 0101"],"options":null},"Drive Through Anything\\Red Car":{"note":"","data":["813FC658 0101"],"options":null},"Drive Through Anything\\Red, White, \u0026 Blue Car":{"note":"","data":["813EEFC8 0101"],"options":null},"Drive Through Anything\\Skyfall":{"note":"","data":["813EE438 0101"],"options":null},"Drive Through Anything\\Van":{"note":"","data":["813F93A8 0101"],"options":null},"Infinite\\Boosts Buggy Vehicle":{"note":"","data":["803EE491 0064"],"options":null},"Infinite\\Hydraulics Sidesweeper":{"note":"","data":["803EDCE1 0063"],"options":null},"Infinite\\Missiles Motor Bike":{"note":"","data":["803F8C53 0063"],"options":null},"J-Bomb Floats Through Anything":{"note":"","data":["803F7C5A 0001"],"options":null},"Rapid Fire\\Ballista":{"note":"","data":["803F8C5D 0000"],"options":null},"Rapid Fire\\Sideswipe":{"note":"","data":["803EDCE6 0000"],"options":null},"Sidesweep\\Can Go Through Anything":{"note":"","data":["803EDCE2 FFFF"],"options":null},"Sideswipe\\Can Go In Water":{"note":"","data":["803EDCE2 0063"],"options":null}},"65EEE53A-ED7D733C-C:45":{"Have All Spirits":{"note":"","data":["8010F51E 0007"],"options":null},"Have hammer\\Level 1":{"note":"Do not use with other level hammer cheats","data":["8010F291 0000"],"options":null},"Have hammer\\Level 2":{"note":"Do not use with other level hammer cheats","data":["8010F291 0001"],"options":null},"Have hammer\\Level 3":{"note":"Do not use with other level hammer cheats","data":["8010F291 0002"],"options":null},"Have jump boots\\Level 1":{"note":"Do not use with other level jump boots cheats","data":["8010F290 0000"],"options":null},"Have jump boots\\Level 2":{"note":"Do not use with other level jump boots cheats","data":["8010F290 0001"],"options":null},"Have jump boots\\Level 3":{"note":"Do not use with other level jump boots cheats","data":["8010F290 0002"],"options":null},"Have member\\Bombette":{"note":"","data":["8010F2BC 0001"],"options":null},"Have member\\Bow":{"note":"","data":["8010F2EC 0001"],"options":null},"Have member\\Goomario":{"note":"","data":["8010F2AC 0001"],"options":null},"Have member\\Kooper":{"note":"","data":["8010F2B4 0001"],"options":null},"Have member\\Lakitu":{"note":"","data":["8010F2E4 0001"],"options":null},"Have member\\Parrakary":{"note":"","data":["8010F2C4 0001"],"options":null},"Have member\\Sushie":{"note":"","data":["8010F2DC 0001"],"options":null},"Have member\\Watt":{"note":"","data":["8010F2D4 0001"],"options":null},"Have\\Attack item":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Dusty Hammer":"0086","Fire Flower":"0800","Pebble":"0085","Shooting Star":"0083","Snowman Doll":"0081","Thunder Bolt":"0084","Thunder Rage":"0082"}},"Have\\Defense item":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Mushroom":"008A","Repel Gel":"0097","Stone Cap":"0088","Volt Shroom":"008B"}},"Have\\Enemy Stats item":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Dizzy Dial":"009A","Fright Jar":"0098","POW Block":"0090","Sleep Sheep":"008F","Stop Watch":"0092"}},"Have\\Recovery Items Option 1":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Apple":"0094","Apple Pie":"00B1","Big Cookie":"00C0","Bland Meal":"00BD","Blue Berry":"009E","Boiled Egg":"00D8","Bubble Berry":"00A1","Cake Mix":"00AA","Coco Pop":"00CF","Deluxe Feast":"00BE","Dried Fruit":"00A8","Dried Pasta":"00A7","Dried Shroom":"008D","Egg":"005F","Electro Pop":"00CC","Fire Pop":"00CD","Fried Egg":"00C9","Fried Shroom":"00B6","Frozen Fries":"00D4","Goomnut":"00A5","Healthy Juice":"00BC","Honey Candy":"00CB","Honey Shroom":"00CA","Honey Super":"00C4"}},"Have\\Recovery Items Option 2":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Honey Syrup":"00A4","Honey Ultra":"00B2","Hot Shroom":"00B9","Iced Potato":"00AF","Jammin' Jelly":"00A2","Jelly Pop":"00D1","Jelly Shroom":"00DA","Jelly Super":"00C6","Jelly Ultra":"00B4","KooPasta":"00B5","Kooky Cookie":"00D3","Koopa Leaf":"00A6","Koopa Tea":"00C3","Lemon":"009C","Lemon Candy":"00D0","Life Shroom":"0095","Lime":"009D","Lime Candy":"0C0E","Maple Shroom":"00D7","Maple Super":"00C5","Maple Syrup":"00A3","Maple Ultra":"00B3","Melon":"00AD","Mistake":"00C2","Mushroom":"008A"}},"Have\\Recovery Items Option 3":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Nutty Cake":"00D6","Potato Salad":"00D5","Red Berry":"009F","Shroom Cake":"00B7","Shroom Steak":"00B8","Spaghetti":"00C7","Special Shake":"00BF","Spicy Soup":"00B0","Stinky Herb":"00AE","Strange Leaf":"00A9","Super Shroom":"008C","Super Soda":"009B","Sweet Shroom":"00BA","Tasty Tonic":"0089","Ultra Shroom":"008E","Whacka's Bump":"0093","Yellow Berry":"00A0","Yoshi Cookie":"00D9","Yummy Meal":"00BB"}},"Have\\Special Items Option 1":{"note":"Only use One Have item Option at one time.","data":["8110F444 ????"],"options":{"Bucket":"0031","Calculator":"0030","Cook Book":"0029","Crystal Berry":"001E","Diamond Stone":"0017","Dictonary":"0024","Diploma":"000E","First Degree Card":"000A","Fourth Degree Card":"000D","Frying Pan":"0023","Hammer":"0004","Jade Raven":"002A","Kooper's Shell":"0019","Magical Bean":"0058","Magical Seed Brown-Orange":"002E","Magical Seed Green":"002D","Magical Seed Red":"002B","Mailbag":"0069","Melody":"0068","Scarf":"0032","Second Degree Card":"000B","Star Stone":"006C","Third Degree Card":"000C","Toy Train":"0021","Volcano Vase":"005B"}},"Have\\Special Items Options 1":{"note":"Only use One Have item Option at one time","data":["8110F444 ????"],"options":{"Artifact":"0053","Boo's Portrait":"001D","Bucket":"0131","Diploma":"010E","Dolly":"0156","Fertile Soil":"0159","Fortress Key":"0110","Golden Jar":"0118","Jade Raven":"012A","Jump":"0101","Kooper's Shell":"0119","Letter":"0150","Lunar Stone":"0115","Lyrics":"0067","Magical Bean":"0158","Magical Seed Blue":"012D","Magical Seed Purple":"012C","Miracle Water":"015A","Mystery Note":"0125","Record":"0122","Ultra Stone":"010F","Volcano Vase":"015B","Water Stone":"0157"}},"Infinite\\FP":{"note":"","data":["8010F295 0063","8010F296 0063"],"options":null},"Infinite\\HP":{"note":"","data":["8010F292 0063","8010F293 0063"],"options":null},"Infinite\\Star Power":{"note":"","data":["8010F520 0007","8010F521 0007"],"options":null},"Lots Of Coins":{"note":"","data":["8110F29C 03E7"],"options":null},"Max\\Badge Points":{"note":"","data":["8010F298 00??"],"options":{"127 Badge Points":"7F","60 Badge Points":"3C"}},"Max\\Level":{"note":"","data":["8010F299 0063"],"options":null},"Max\\Star Pieces":{"note":"","data":["8010F29F 0063"],"options":null},"Max\\Star Points":{"note":"","data":["8010F2A0 0063"],"options":null},"No Star Points (0)":{"note":"If emulator hangs at level up, enable this cheat and don't disable it whatsoever!","data":["8010F2A0 0000"],"options":null},"Upgrade member\\Level 1\\Bombette":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2BD 0001"],"options":null},"Upgrade member\\Level 1\\Bow":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2ED 0001"],"options":null},"Upgrade member\\Level 1\\Goomario":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2AD 0001"],"options":null},"Upgrade member\\Level 1\\Kooper":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2B5 0001"],"options":null},"Upgrade member\\Level 1\\Lakitu":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2E5 0001"],"options":null},"Upgrade member\\Level 1\\Parrakary":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2C5 0001"],"options":null},"Upgrade member\\Level 1\\Sushie":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2DD 0001"],"options":null},"Upgrade member\\Level 1\\Watt":{"note":"Do not use with level 2 upgrade cheats","data":["8010F2D5 0001"],"options":null},"Upgrade member\\Level 2\\Bombette":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2BD 0002"],"options":null},"Upgrade member\\Level 2\\Bow":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2ED 0002"],"options":null},"Upgrade member\\Level 2\\Goomario":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2AD 0002"],"options":null},"Upgrade member\\Level 2\\Kooper":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2B5 0002"],"options":null},"Upgrade member\\Level 2\\Lakitu":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2E5 0002"],"options":null},"Upgrade member\\Level 2\\Parrakary":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2C5 0002"],"options":null},"Upgrade member\\Level 2\\Sushie":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2DD 0002"],"options":null},"Upgrade member\\Level 2\\Watt":{"note":"Do not use with level 1 upgrade cheats","data":["8010F2D5 0002"],"options":null},"Widescreen":{"note":"","data":["8102D574 2407","8102D576 018A"],"options":null}},"661B45F3-9ED6266D-C:50":{"Anger metre always full":{"note":"","data":["800D9B38 00FF","800D9826 00FF"],"options":null},"Crunched Players":{"note":"","data":["800DFC2D 003F"],"options":null},"Difficulty Mod":{"note":"","data":["801247F9 00??"],"options":{"Easy":"01","Hard":"03","Medium":"02","Very Easy":"00"}},"Extra Teams":{"note":"","data":["80115A0C 0001"],"options":null},"Get In Fights Constantly":{"note":"","data":["800D3926 0020"],"options":null},"Max Score\\Team 1":{"note":"","data":["80120221 00??"],"options":{"30 Points":"1E","50 Points":"23","75 Points":"4B","99 Points":"63","Zero Points":"00"}},"Max Score\\Team 2":{"note":"","data":["80123731 00??"],"options":{"30 Points":"1E","50 Points":"23","75 Points":"4B","99 Points":"63","Zero Points":"00"}},"Players\\Head Size":{"note":"","data":["8111CBEC ????"],"options":{"Normal Size":"3F80","Very Large":"4080","Very Small":"3F00"}},"Players\\Height Size":{"note":"","data":["81124848 ????"],"options":{"Giants":"4080","Large":"3FC0","Midgets":"3F00","Normal Size":"3F80"}}},"664BA3D4-678A80B7-C:45":{"Enable All Courses":{"note":"","data":["81130CEE FFFF"],"options":null},"Have All Characters":{"note":"","data":["50000E02 0001","810C28E4 0000"],"options":null},"Max Gold Mario Badges Player 1":{"note":"","data":["800C545B 0063"],"options":null},"No Wind":{"note":"","data":["810BA9F1 0000","800BA9F3 0000"],"options":null},"Unlimited\\Power Hits\\Player 1":{"note":"","data":["801B71F8 0004"],"options":null},"Unlimited\\Power Hits\\Player 2":{"note":"","data":["801B72B0 0004"],"options":null},"Unlimited\\Power Hits\\Player 3":{"note":"","data":["801B7368 0004"],"options":null},"Unlimited\\Power Hits\\Player 4":{"note":"","data":["801B7420 0004"],"options":null},"Widescreen":{"note":"","data":["8102F29A 3FE3","D12020F6 3FAA","812020F6 3FE3"],"options":null},"Zero Strokes Taken":{"note":"","data":["801B71F3 0000"],"options":null}},"66572080-28E348E1-C:4A":{"Infinite Hp":{"note":"","data":["802016A7 0000"],"options":null},"Infinite Sp":{"note":"","data":["802016AB 005A"],"options":null},"Infinite Time":{"note":"","data":["80260BDE 0000"],"options":null},"Play As":{"note":"","data":["801B9D5C 00??"],"options":{"1st BOSS":"08","DAITARN 3":"02","DANCOUGAR":"03","DUNBINE":"05","FINAL BOSS":"00","R1":"01","SHINING GUNDAM":"04","VOLTES V":"07","WALKER GALLIER":"06"}},"Player 2 Health Mod":{"note":"","data":["80206AF7 00??"],"options":{"Infinite Health":"00","Instant Death":"C8"}}},"665FD963-B5CC6612-C:44":{"Diffuculty Modifier":{"note":"","data":["8011956F 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Gems":{"note":"","data":["80128E97 00FF"],"options":null},"Have\\All Level Keys":{"note":"","data":["50000604 0000","80128D73 0007","80128D8B 001F","80128DAB 00FF"],"options":null},"Have\\All Weapons":{"note":"","data":["50000B04 0000","80128D47 0001","80128D33 0001"],"options":null},"Have\\Backpack":{"note":"","data":["80128C7B 0001","80128CBB 0001"],"options":null},"Infinite\\Air":{"note":"","data":["80129070 0063","801E862A 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000404 0000","80128CF3 00FF","80128D03 00FF","80128D0F 00FF","50000504 0000","80128D13 00FF","80128E9B 00FF","80128E97 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["81128D26 5B23","80128D67 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C15C4 1E61","812A2534 1E61"],"options":null},"Infinite\\Lives":{"note":"","data":["80128E9B 00FF"],"options":null},"Open All Portals":{"note":"Press L to Access Map","data":["8114F85A F803","81128CDE 0003","81128CE2 0003","81128CE6 0003","81128CEA 0003","81128CEE 0003","81128CF2 0003","81128CF6 0005"],"options":null}},"66751A57-54A29D6E-C:4A":{"Boots Of Speed Select\\Player 1":{"note":"","data":["8113D5E8 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113D784 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113D920 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113DABC ????"],"options":{"Off":"0000","On":"03FF"}},"Enable Cheat Menu":{"note":"","data":["801370C7 0005","81136FEA FFFF"],"options":null},"Have All\\Armour":{"note":"","data":["8013D541 0019","8013D545 0014","8013D549 0014","8013D54D 0014"],"options":null},"Have All\\Items And Artifacts":{"note":"","data":["8013D551 0001","8013D553 00FF","8013D555 0002","8013D557 00FF","8013D559 0003","8013D55B 00FF","8013D55D 0004","8013D55F 00FF","8013D561 0005","8013D563 00FF","8013D565 0006","8013D567 00FF","8013D569 0007","8013D56B 00FF","8013D56D 0008","8013D56F 00FF","8013D571 0009","8013D573 00FF","8013D575 000A","8013D577 00FF","8013D579 000B","8013D57B 00FF","8013D57D 000C","8013D57F 00FF","8013D581 000D","8013D583 00FF","8013D585 000E","8013D587 00FF","8013D589 000F","8013D58B 00FF","8013D58D 0010","8013D58F 00FF","8013D591 0011","8013D593 00FF","8013D595 0012","8013D597 00FF","8013D599 0013","8013D59B 00FF","8013D59D 0014","8013D59F 00FF","8013D5A1 0015","8013D5A3 00FF","8013D5A5 0016","8013D5A7 00FF","8013D5A9 0017","8013D5AB 00FF","8013D5AD 0018","8013D5AF 00FF","8013D5B1 0019","8013D5B3 00FF","8013D5B5 001B","8013D5B7 00FF","8013D5B9 001C","8013D5BB 00FF","8013D5BD 001D","8013D5BF 00FF","8013D5C1 001E","8013D5C3 00FF","8013D5C5 001F","8013D5C7 00FF","8013D5C9 0020","8013D5CB 00FF","8013D5D9 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113D5EC 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113D788 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113D924 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113DAC0 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013D605 00FF","8013D607 00FF","8013D609 00FF","8013D60B 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013D7A1 00FF","8013D7A3 00FF","8013D7A5 00FF","8013D7A7 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013D93D 00FF","8013D93F 00FF","8013D941 00FF","8013D943 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013DAD9 00FF","8013DADB 00FF","8013DADD 00FF","8013DADF 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013D60D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013D7A9 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013D945 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013DAE1 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013D60F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013D7AB 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013D947 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013DAE3 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113D5DC ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113D778 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113D914 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113DAB0 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113D5DC FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113D778 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113D914 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113DAB0 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8013D5E3 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113D77E ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113D91A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113DAB6 ????"],"options":{"Off":"0000","On":"03FF"}}},"66A24BEC-2EADD94F-C:45":{"Widescreen":{"note":"UI Partially Fixed. Also has Shorter Draw Distance.","data":["810007DC 3FE3","D10C1E6A 0D60","810C1E66 FE00","D10C1E6A 0D60","810C1E7A 0200","8103A51C C0AA"],"options":null}},"66CF0FFE-AD697F9C-C:50":{"Infinite Lives":{"note":"","data":["810CE462 03E7"],"options":null},"Infinite health":{"note":"","data":["810C8B0E 03E7"],"options":null},"Level Select":{"note":"Scroll With C-Left \u0026 C-Right Level Select Available, At The Player Select Top Screen","data":["810A590E 0001"],"options":null},"Score Aid":{"note":"","data":["810CD912 29AA"],"options":null}},"673D099B-A4C808DE-C:45":{"Always Full Special\\Boris":{"note":"","data":["811543DC 0044"],"options":null},"Always Full Special\\Curtis":{"note":"","data":["811541C0 0044"],"options":null},"Always Full Special\\George":{"note":"","data":["81154814 0044"],"options":null},"Always Full Special\\Lizzie":{"note":"","data":["81154A30 0044"],"options":null},"Always Full Special\\Myukus":{"note":"","data":["81554E68 0044"],"options":null},"Always Full Special\\Ralph":{"note":"","data":["81154C4C 0044"],"options":null},"Always Full Special\\Ruby":{"note":"","data":["811545F8 0044"],"options":null},"Enable George":{"note":"","data":["8118CF92 0000"],"options":null},"Enable\\Lizzie":{"note":"","data":["8118CF94 0000"],"options":null},"Enable\\Myukus":{"note":"","data":["8118CF98 0000"],"options":null},"Enable\\Ralph":{"note":"","data":["8118CF96 0000"],"options":null},"Infinite Health\\George":{"note":"","data":["8115480C 0044"],"options":null},"Infinite Health\\Lizzie":{"note":"","data":["81154A28 0044"],"options":null},"Infinite Health\\Ralph":{"note":"","data":["81154C44 0044"],"options":null},"Infinite Lives\\George":{"note":"","data":["81154808 0063"],"options":null},"Infinite Lives\\Lizzie":{"note":"","data":["81154A24 0063"],"options":null},"Infinite Lives\\Ralph":{"note":"","data":["81154C40 0063"],"options":null},"Infinite\\Health\\Boris":{"note":"","data":["811543D4 0044"],"options":null},"Infinite\\Health\\Curtis":{"note":"","data":["811541B8 0044"],"options":null},"Infinite\\Health\\Myukus":{"note":"","data":["81154E60 0044"],"options":null},"Infinite\\Health\\Ruby":{"note":"","data":["811545F0 0044"],"options":null},"Infinite\\Lives\\Boris":{"note":"","data":["811543D0 0063"],"options":null},"Infinite\\Lives\\Curtis":{"note":"","data":["811541B4 0063"],"options":null},"Infinite\\Lives\\Myukus":{"note":"","data":["81154EFC 0063"],"options":null},"Infinite\\Lives\\Ruby":{"note":"","data":["811545EC 0063"],"options":null}},"67D20729-F696774C-C:4A":{"Bonus Stage Character Modifier (Training Mode)":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["8018D193 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Give Kirby A Wierd Blow-Up":{"note":"","data":["8025C118 000A"],"options":null},"Have All Characters":{"note":"","data":["810A28F8 0FF0"],"options":null},"P1 Press Down On D-Pad To Make Items Appear In Random Spots":{"note":"","data":["D109CF64 0400","8118B062 0001"],"options":null},"Story Mode\\Always Get Pacifist (60,000 Points)":{"note":"","data":["810A2B2E 0000"],"options":null},"Story Mode\\Infinite Time":{"note":"","data":["810A2AEE 43CB"],"options":null},"Story Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code could also result freezing at the end of the Level.","data":["800A2AFB 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 1\\Infinite Lives":{"note":"","data":["800A2B03 0004"],"options":null},"Story Mode\\Player 1\\Kirby B Button Move\\Congo Jungle":{"note":"","data":["8026EA8F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Fighting Polygon Team":{"note":"","data":["802606DF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["80266ACF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Kirby's Dreamland":{"note":"","data":["8026BAFF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Master Hand Stage":{"note":"","data":["8026FC0F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Metal Mario Stage":{"note":"","data":["80261557 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Peach's Castle":{"note":"","data":["80261D5F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Planet Zebes":{"note":"","data":["8026DF67 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Saffron City":{"note":"","data":["80271A57 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["8026F0B7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["80266E0F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Low % Health":{"note":"","data":["810A2B46 0000"],"options":null},"Story Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2B6F 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 2\\Infinite Lives":{"note":"","data":["800A2B77 0004"],"options":null},"Story Mode\\Player 2\\Low % Health":{"note":"","data":["810A2BBA 0000"],"options":null},"Story Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2BE3 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 3\\Infinite Lives":{"note":"","data":["800A2BEB 0004"],"options":null},"Story Mode\\Player 3\\Low % Health":{"note":"","data":["810A2C2E 0000"],"options":null},"Story Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2C57 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 4\\Infinite Lives":{"note":"","data":["800A2C5F 0004"],"options":null},"Story Mode\\Player 4\\Low % Health":{"note":"","data":["810A2CA2 0000"],"options":null},"Story Mode\\Skip Straight To Master Hand":{"note":"","data":["800A2AA7 000D"],"options":null},"VS. Mode\\Have Mushroom Kindom":{"note":"","data":["800A28F7 00FF"],"options":null},"VS. Mode\\Infinite Time":{"note":"","data":["810A2CDE 43CB"],"options":null},"VS. Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2CEB 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["802619AF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["80269F47 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["8026C277 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Low % Health":{"note":"","data":["810A2D36 0000"],"options":null},"VS. Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2D5F 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 2\\Low % Health":{"note":"","data":["810A2DAA 0000"],"options":null},"VS. Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2DD3 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 3\\Low % Health":{"note":"","data":["810A2E1E 0000"],"options":null},"VS. Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A2E47 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 4\\Low % Health":{"note":"","data":["810A2E92 0000"],"options":null},"Widescreen":{"note":"Minor Menu Misalignments","data":["8103BC94 3FE3","8110AE98 3C07","8110AE9A 3FE8","810CEE44 3C07","810CEE46 3FE8"],"options":null}},"67D21868-C5424061-C:50":{"Infinite Energy\\Player 1":{"note":"","data":["800ACB89 00??"],"options":{"Max":"40","None":"00"}},"Infinite Energy\\Player 2":{"note":"","data":["800ACC79 00??"],"options":{"Max":"3F","None":"00"}},"Infinite Match Time":{"note":"","data":["800ABC33 0000"],"options":null},"Super Attacks\\Player 1":{"note":"","data":["800ACB8D 00??"],"options":{"3":"03","None":"00"}},"Super Attacks\\Player 2":{"note":"","data":["800ACC7D 00??"],"options":{"3":"03","None":"00"}},"Unlock Extras":{"note":"","data":["800ACD55 00FF","800ACD57 00FF"],"options":null}},"67FF12CC-76BF0212-C:4A":{"Extra Gems":{"note":"","data":["D016523B 0000","8016523B 004B"],"options":null},"Full\\Bomb Power":{"note":"","data":["80165239 0003"],"options":null},"Full\\Fire Power":{"note":"","data":["8016523A 0003"],"options":null},"Infinite\\Health":{"note":"","data":["8016523E 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["8016523D 0009"],"options":null},"Max\\Bombs":{"note":"","data":["80165239 0008"],"options":null},"Max\\Explosion":{"note":"","data":["8016523A 0008"],"options":null},"Max\\Score":{"note":"","data":["80177601 00FF","80177602 00FF"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D005A2F5 0020","81154178 41CB","D005A2F5 0020","D0154154 0000","80154154 0040"],"options":null},"Widescreen":{"note":"","data":["81036CE4 3C07","81036CE8 3FE3"],"options":null}},"68D7A1DE-0079834A-C:50":{"Access\\All Characters":{"note":"","data":["80208910 FFFF"],"options":null},"Access\\All Floyd Awards":{"note":"only enable One character at a time when using this code","data":["50000501 0000","80208908 0005"],"options":null},"All Single Player Levels Unlocked":{"note":"All Charcters","data":["80208AA0 00FF","80208AA1 00FF","80208B16 00FF","80208B17 00FF","80208B8C 00FF","80208B8D 00FF"],"options":null},"Infinite Continues":{"note":"","data":["800A34F1 0063"],"options":null},"Juno\\Access\\All Keys":{"note":"","data":["81208B18 FFF7"],"options":null},"Juno\\Access\\All Objects":{"note":"","data":["81208B1A FFFF"],"options":null},"Juno\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["80208ABC 00FF","80208ABD 00FF"],"options":null},"Juno\\All Single Player Levels Unlocked":{"note":"","data":["80208B16 00FF","80208B17 00FF"],"options":null},"Juno\\Full \u0026 Max Health":{"note":"","data":["80208AB5 000C","80208AB2 0040"],"options":null},"Juno\\Infinite\\Max Ammo All Guns":{"note":"","data":["50000302 0000","81208AC6 03E7","50000802 0000","81208ACC 03E7","50000402 0000","81208ADC 03E7"],"options":null},"Juno\\Infinite\\Mizar Tokens":{"note":"","data":["81208AC4 03E7"],"options":null},"Juno\\Max Blue \u0026 White Heads":{"note":"","data":["81208ABA 03E7","81208AB8 03E7"],"options":null},"Lupus\\Access\\All Keys":{"note":"","data":["81208B8E FF70"],"options":null},"Lupus\\Access\\All Objects":{"note":"","data":["81208B90 FFFF"],"options":null},"Lupus\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["80208B32 00FF","80208B33 00FF"],"options":null},"Lupus\\All Single Player Levels Unlocked":{"note":"","data":["80208B8C 00FF","80208B8D 00FF"],"options":null},"Lupus\\Full \u0026 Max Health":{"note":"","data":["80208B2B 000C","80208B28 0040"],"options":null},"Lupus\\Infinite\\Max Ammo All Guns":{"note":"","data":["50000302 0000","81208B3C 03E7","50000802 0000","81208B42 03E7","50000402 0000","81208B52 03E7"],"options":null},"Lupus\\Infinite\\Mizar Tokens":{"note":"","data":["81208B3A 03E7"],"options":null},"Lupus\\Max\\Blue \u0026 White Heads":{"note":"","data":["81208B30 03E7","81208B2E 03E7"],"options":null},"Tribals\\Gold Wood\\Have All Tribals":{"note":"","data":["802088E4 000F"],"options":null},"Tribals\\Gold Wood\\Have No Tribals Remaining":{"note":"","data":["802088E6 0000"],"options":null},"Tribals\\Gold Wood\\No Tribals Killed":{"note":"","data":["802088E5 0000"],"options":null},"Vela\\Access\\All Keys":{"note":"","data":["81208AA2 FF70"],"options":null},"Vela\\Access\\All Objects":{"note":"","data":["81208AA4 FFFF"],"options":null},"Vela\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["80208A46 00FF","80208A47 00FF"],"options":null},"Vela\\All Single Player Levels Unlocked":{"note":"","data":["80208AA0 00FF","80208AA1 00FF"],"options":null},"Vela\\Full \u0026 Max Health":{"note":"","data":["80208A3F 000C","80208A3C 0040"],"options":null},"Vela\\Infinite\\Max Ammo All Guns":{"note":"","data":["50000302 0000","81208A50 03E7","50000802 0000","81208A56 03E7","50000402 0000","81208A66 03E7"],"options":null},"Vela\\Infinite\\Mizar Tokens":{"note":"","data":["81208A4E 03E7"],"options":null},"Vela\\Max\\Blue \u0026 White Heads":{"note":"","data":["81208A44 03E7","81208A42 03E7"],"options":null},"[Resolution Fix]":{"note":"","data":["800FE6F2 0003","800FE6DE 0003","800FEDEA 00D0"],"options":null}},"68E8A875-0CE7A486-C:50":{"Always Special\\Player 1":{"note":"","data":["800F9D35 0008"],"options":null},"Always Special\\Player 2":{"note":"","data":["800FA0E5 0008"],"options":null},"Always Special\\Player 3":{"note":"","data":["800FA495 0008"],"options":null},"Always Special\\Player 4":{"note":"","data":["800FA845 0008"],"options":null},"Character Select\\Player 1":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890F9D36 0240","890F9D60 42B4","8107E8B2 ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 2":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA0E6 0240","890FA110 42B4","8107E8B6 ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 3":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA496 0240","890FA4C0 42B4","8107E8BA ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 4":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA846 0240","890FA870 42B4","8107E8BE ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Extra Characters \u0026 Modes":{"note":"","data":["8107F07C FFFF"],"options":null},"Get Title Belt In 1-Match":{"note":"","data":["80038AAB 0008"],"options":null},"Infinite Time":{"note":"","data":["800FAF87 0000"],"options":null},"Infinite Time Out Of Ring":{"note":"","data":["800FACE8 0014"],"options":null},"Spirit Select\\Player 1":{"note":"","data":["800F9D25 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 2":{"note":"","data":["800FA0D5 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 3":{"note":"","data":["800FA485 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 4":{"note":"","data":["800FA835 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Ultimate Code\\Player 1":{"note":"","data":["800F9D24 0064"],"options":null},"Ultimate Code\\Player 2":{"note":"","data":["800FA0D4 0064"],"options":null},"Ultimate Code\\Player 3":{"note":"","data":["800FA484 0064"],"options":null},"Ultimate Code\\Player 4":{"note":"","data":["800FA834 0064"],"options":null},"Weapon Select\\Player 1":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800F9D31 0003","800F98E1 00??","800F98E2 0000","800F99A0 0000"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 2":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA0E1 0003","800F9911 00??","800F9912 0001","800F99A1 0001"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 3":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA491 0003","800F9941 00??","800F9942 0002","800F99A2 0002"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 4":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA841 0003","800F9971 00??","800F9972 0003","800F99A3 0003"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}}},"68FCF726-49658CBC-C:50":{"Have All Extras Open":{"note":"This Code opens all extra stages in VS Battles,Team Battle 1P, Team Battles VS,Tag Battle and Practice Modes. Extra Male and Female Body in Create A Fighter Character and Have Extra Characters (Gouriki \u0026 Reiji)","data":["8009E31F 00FF"],"options":null},"Music Modifier":{"note":"","data":["8009E21E 00??"],"options":{"Monaural":"01","Music Off":"02","Stereo":"00"}},"Player 1\\Character Modifier":{"note":"This Allows you to play as any Character you choose in any Mode","data":["80105001 00??"],"options":{"Azami":"00","Gouriki":"08","Hikari":"0B","Invisible Fighter":"0C","Kai":"03","Kaoru":"07","Kengon":"05","Kyeya":"06","Miki":"02","Reiji":"09","Sakai":"04","Serina":"01","Yami":"0A"}},"Player 1\\Infinite Energy":{"note":"","data":["81105026 03E8"],"options":null},"Player 1\\Need 1 Round to Win":{"note":"","data":["D009E334 0000","8009E334 0001"],"options":null},"Player 1\\Player 2 Has No Energy":{"note":"Press C-Button Up and Player 2 will lose All Health resulting in a Instant K.O.","data":["D0044461 0008","8111B3BE 0000"],"options":null},"Player 1\\Player 2 Never Wins":{"note":"","data":["8009E3F5 0000"],"options":null},"Player 2\\Character Modifier":{"note":"This Allows you to play as any Character you choose in any Mode","data":["8011B399 00??"],"options":{"Azami":"00","Gouriki":"08","Hikari":"0B","Invisible Fighter":"0C","Kai":"03","Kaoru":"07","Kengon":"05","Kyeya":"06","Miki":"02","Reiji":"09","Sakai":"04","Serina":"01","Yami":"0A"}},"Player 2\\Infinite Energy":{"note":"","data":["8111B3BE 03E8"],"options":null},"Player 2\\Need 1 Round to Win":{"note":"","data":["D009E335 0000","8009E335 0001"],"options":null},"Player 2\\Player 1 Has No Energy":{"note":"Press C-Button Up and Player 1 will lose All Health resulting in a Instant K.O.","data":["D0044467 0008","81105026 0000"],"options":null},"Player 2\\Player 1 Never Wins":{"note":"","data":["8009E3F4 0000"],"options":null}},"69256460-B9A3F586-C:45":{"Max Money\\Player 1":{"note":"","data":["81058122 FFFF"],"options":null},"Max Money\\Player 2":{"note":"","data":["81058124 FFFF"],"options":null},"Max Money\\Player 3":{"note":"","data":["81058126 FFFF"],"options":null}},"693BA2AE-B7F14E9F-C:45":{"Always Have Wallet Size":{"note":"","data":["8011AD22 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C8B65 0010","8111BFE6 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset,","data":["8011BB69 00FF","8011BFDF 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C8D75 0000","8011C093 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["80025CC4 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011AD06 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011AD07 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011AD08 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011AD09 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023EFBF 0020","8023EFC5 0033"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F3D38 0005","801F3EF8 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["8011AD22 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011AD23 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011AD21 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111AD1C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111AD24 30FF","8111AD26 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011ACF8 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011ACFE 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011AD04 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011ACFC 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011ACF6 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011AD00 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011ACF5 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011ACF4 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011ACF7 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011ACFA 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011ACFD 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011AD01 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011AD02 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011ACF9 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011ACFF 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011AD05 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011AD03 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011ACFB 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011AD0F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011AD28 0007","8011AD29 0007","8011AD2A 0007","8011AD2B 0007","8011AD2C 0007","8011AD2D 0007","8011AD2E 0007","8011AD2F 0007","8011AD30 0007","8011AD31 0007","8011AD32 0007","8011AD3F 0009","8011AD40 0009","8011AD41 0009","8011AD42 0009","8011AD43 0009","8011AD49 0009","8011AD4C 0009","8011AD47 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011AD14 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011AD0E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011AD0D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011AD12 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011AD0C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111ACB0 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011ACB9 0008","8011ACBA 0001","8011ACBC 0001","8011ACB3 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011AD1A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111C04C 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011C211 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011C215 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C8D75 0020","811DB350 40CB","D01C8D75 0000","811DBB72 000D","8011ACF0 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011AD4F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011AD51 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111ACAE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111C048 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C8D75 0020","811DBB72 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C8D75 0020","811DB350 40CB"],"options":null},"Press L+R For FMV Select":{"note":"Hold down `L+R' after the Nintendo logo is spinning to see your favourite FMV","data":["D01C8D75 0030","8011AC83 00A0","D01C8D75 0030","8011AC8B ????"],"options":{"anondorf FMV":"F600","ire FMV":"F50F","lanet Making FMV":"F400","nding":"F80E","ore Triforce FMV":"F700","riforce FMV":"F200"}},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C8D75 0010","8011AC87 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111AC8C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011AD0A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011AD0B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011ACF0 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011ACBE 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111BEA2 0000","8111BEA4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}},"Widescreen":{"note":"","data":["81025188 2402","81092718 3C07","8109271A 3FE3"],"options":null}},"693BA2AE-B7F14E9F-C:4A":{"Always Have Wallet Size":{"note":"","data":["8011AD22 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C8B65 0010","8111BFE6 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011BB69 00FF","8011BFDF 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C8D75 0000","8011C093 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest 01).","data":["80025CC4 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011AD06 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011AD07 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011AD08 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011AD09 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801D927A 0006","801F28B8 0001","801EF338 0001"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.If you Use Black Gauntlets,They are as strong as the Golden Gauntlets. This code also gives you the Silver Scale and the Golden Scale and unlimited rupees.","data":["8011AD22 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011AD23 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011AD21 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111AD1C 7777"],"options":null},"Have\\All Quest/Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111AD24 30FF","8111AD26 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011ACF8 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011ACFE 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011AD04 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011ACFC 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011ACF6 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011AD00 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011ACF5 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011ACF4 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011ACF7 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011ACFA 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011ACFD 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011AD01 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011AD02 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011ACF9 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011ACFF 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011AD05 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011AD03 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011ACFB 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011AD0F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011AD28 0007","8011AD29 0007","8011AD2A 0007","8011AD2B 0007","8011AD2C 0007","8011AD2D 0007","8011AD2E 0007","8011AD2F 0007","8011AD30 0007","8011AD31 0007","8011AD32 0007","8011AD3F 0009","8011AD40 0009","8011AD41 0009","8011AD42 0009","8011AD43 0009","8011AD49 0009","8011AD4C 0009","8011AD47 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011AD14 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011AD0E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011AD0D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011AD12 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011AD0C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111ACB0 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011ACB9 0008","8011ACBA 0001","8011ACBC 0001","8011ACB3 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011AD1A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111C04C 0001"],"options":null},"Infinite\\Timers\\All other Timers":{"note":"This cheat works on all Race Timers.Under Water with iron Boots etc.","data":["8011C051 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011C055 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C8D75 0020","811DB350 40CB","D01C8D75 0000","811DBB72 000D","8011ACF0 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011AD4F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011AD51 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111ACAE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111C048 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C8D75 0020","811DBB72 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C8D75 0020","811DB350 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C8D75 0010","8011AC87 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111AC8C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011AD0A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011AD0B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011ACF0 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011ACBE 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111BEA2 0000","8111BEA4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011C015 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"69458B9E-FC95F936-C:4A":{"Have All\\Cups Select":{"note":"","data":["50002C02 0000","800CD611 00??"],"options":{"Bronze Cup":"02","Gold Cup":"00","None (Default)":"04","Silver Cup":"01"}},"Have All\\Points":{"note":"","data":["810D96E0 03E7"],"options":null},"Have All\\RB Medals":{"note":"","data":["810D96F0 03E7"],"options":null},"Infinite\\Credits":{"note":"","data":["800BE145 0005"],"options":null},"Infinite\\Timer":{"note":"","data":["810D9788 44E9"],"options":null},"Infinite\\Turbos":{"note":"Only turn this on ingame or it will freeze the game","data":["D00F3456 0020","800CD791 00??"],"options":{"Off":"00","On":"08"}},"Laps To Race":{"note":"Here you can select what Turbo feature you prefer.","data":["800C9009 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","7 Laps":"07","8 Laps":"08","9 Laps":"09","Laps":"06"}},"[Cheat Menu]":{"note":"Press Pause to access cheats.","data":["800CD789 00FF","800CD78A 00FF","800CD78B 00FF"],"options":null},"[Press F9]\\Enable All Courses":{"note":"","data":["890CD5F2 0B00","890CD5F4 0B00","890CD5F6 0B00"],"options":null},"[Press F9]\\Extra Characters":{"note":"","data":["890C6ADF 01FF"],"options":null},"[Press F9]\\Progress 100%":{"note":"","data":["50000801 0000","880CD600 0003","50000801 0000","880CD601 00FF"],"options":null}},"69AE0438-2C63F3F3-C:4A":{"All Equipment Upgrades":{"note":"","data":["801EF77D 0023","811EF7CA 201B"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D01FBC91 0000","801EF712 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Have All\\Masks":{"note":"","data":["801EF798 005A","801EF799 0055","801EF79A 0063","801EF79B 0061","801EF79C 005C","801EF79D 004E","801EF79E 0056","801EF79F 0062","801EF7A0 0054","801EF7A1 005E","801EF7A2 0064","801EF7A3 004F","801EF7A4 0058","801EF7A5 0059","801EF7A6 0053","801EF7A7 005B","801EF7A8 0052","801EF7A9 0050","801EF7AA 005F","801EF7AB 005D","801EF7AC 0057","801EF7AD 0060","801EF7AE 0065","801EF7AF 0051"],"options":null},"Have All\\Quest Status Items":{"note":"","data":["801EF7CD 0005","811EF7CE F7CF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801EF782 0002"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801EF783 0003"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801EF784 0004"],"options":null},"Have\\Bombchu":{"note":"","data":["801EF787 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801EF786 0006"],"options":null},"Have\\Bottle Modifier\\1":{"note":"","data":["801EF792 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\2":{"note":"","data":["801EF793 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\3":{"note":"","data":["801EF794 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\4":{"note":"","data":["801EF795 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\5":{"note":"","data":["801EF796 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\6":{"note":"","data":["801EF797 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Deku Nuts":{"note":"","data":["801EF789 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801EF788 0008"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801EF790 0010"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801EF781 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801EF78F 000F"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801EF78E 000E"],"options":null},"Have\\Magic Beans":{"note":"","data":["801EF78A 000A"],"options":null},"Have\\Ocarina of Time":{"note":"","data":["801EF780 0000"],"options":null},"Have\\Pictograph":{"note":"","data":["801EF78D 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801EF78C 000C"],"options":null},"Infinite\\Arrows":{"note":"","data":["801EF7B1 0063"],"options":null},"Infinite\\Bombchus":{"note":"","data":["801EF7B7 0063"],"options":null},"Infinite\\Bombs":{"note":"","data":["801EF7B6 0063"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801EF7B9 0063"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801EF7B8 0063"],"options":null},"Infinite\\Health":{"note":"","data":["811EF746 0140"],"options":null},"Infinite\\Hearts Options":{"note":"","data":["811EF744 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Magic Beans":{"note":"","data":["801EF7BA 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801EF749 0060","811EF750 0101"],"options":null},"Infinite\\Powder Kegs":{"note":"","data":["801EF7BC 0063"],"options":null},"Infinite\\Rupees":{"note":"","data":["811EF74A 03E7"],"options":null},"Play As":{"note":"","data":["801EF730 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03E6FCB 0020","814002C8 40CB"],"options":null},"Replace Sword With":{"note":"","data":["801EF75C 00??"],"options":{"Deity Link's Sword":"10","Fire Arrow w/ Bow":"02","Hero's Bow":"00","Ice Arrow w/ Bow":"03","Light Arrow w/ Bow":"04"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01FBC96 0008","811EF726 FFFD","D01FBC96 0004","811EF726 0000","D01FBC96 0002","811EF726 FFFE"],"options":null},"Warp Modifier":{"note":"Put this code on and press the start button and it will now take where you wanted to go, turn it back off after you have got there.","data":["D03E6FCA 0000","803FF805 0001","813FF80A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"6A121930-665CC274-C:45":{"Away Team\\Infinite Time-Outs":{"note":"Do not use this with the No Time Out's Cheat","data":["8013C2D7 0009","80140863 0009"],"options":null},"Away Team\\No Time-Outs":{"note":"Do not use this with the Infinite Time Out's Cheat","data":["8013C2D7 0000","80140863 0000"],"options":null},"Away Team\\Scores":{"note":"","data":["8013C2B3 00??"],"options":{"10 Points":"0A","100 Points":"64","20 Points":"14","200 Points":"C8","250 Points":"FA","40 Points":"28","60 Points":"3C","80 Points":"50","No Points":"00"}},"Create A Player\\Max 3 Point":{"note":"","data":["8013FF99 0063"],"options":null},"Create A Player\\Max Ball Control":{"note":"","data":["8013FFA1 0063"],"options":null},"Create A Player\\Max Block":{"note":"","data":["8013FF9D 0063"],"options":null},"Create A Player\\Max Field Goal":{"note":"","data":["8013FF98 0063"],"options":null},"Create A Player\\Max Free Throw":{"note":"","data":["8013FF9A 0063"],"options":null},"Create A Player\\Max Power":{"note":"","data":["8013FFA2 0063"],"options":null},"Create A Player\\Max Rebound":{"note":"","data":["8013FF9C 0063"],"options":null},"Create A Player\\Max Speed":{"note":"","data":["8013FF9F 0063"],"options":null},"Create A Player\\Max Steal":{"note":"","data":["8013FF9E 0063"],"options":null},"Home Team\\Infinite Time-Outs":{"note":"Do not use this with the No Time Out's Cheat","data":["8013C2D6 0009","80140862 0009"],"options":null},"Home Team\\No Time-Outs":{"note":"Do not use this with the Infinite Time Out's Cheat","data":["8013C2D6 0000","80140862 0000"],"options":null},"Home Team\\Scores":{"note":"","data":["8013C2B1 00??"],"options":{"10 Points":"0A","100 Points":"64","20 Points":"14","200 Points":"C8","250 Points":"FA","40 Points":"28","60 Points":"3C","80 Points":"50","No Points":"00"}},"No Shot Clock":{"note":"","data":["81140E1E FFFF"],"options":null},"Options\\27 Time Out Limit":{"note":"","data":["8013D867 00??"],"options":{"No":"01","Yes":"00"}},"Options\\3 Second Violation":{"note":"","data":["80144994 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\5 Second Violation":{"note":"","data":["80144993 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\Back Court":{"note":"","data":["80144996 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}},"Options\\Camera View":{"note":"","data":["8013D86A 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\FT. Penalty Situations":{"note":"","data":["80144999 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}},"Options\\Foul Out":{"note":"","data":["80144995 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}},"Options\\Goal Tending":{"note":"","data":["80144998 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}},"Options\\Level":{"note":"","data":["8013D864 00??"],"options":{"Enjoy":"00","Exciting":"01","Super Challenge":"02"}},"Options\\Out Of Bounds":{"note":"","data":["80144990 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\Player Display":{"note":"","data":["8013D869 00??"],"options":{"Name":"00","None":"02","Number":"01"}},"Options\\Quarter Length":{"note":"","data":["8013D865 00??"],"options":{"12:00":"03","3:00":"00","5:00":"01","8:00":"02"}},"Options\\Replay":{"note":"","data":["8013D868 00??"],"options":{"No":"01","Yes":"00"}},"Options\\Second Violation":{"note":"","data":["80144992 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\Shot Clock Violation":{"note":"","data":["80144991 00??"],"options":{"1":"00","10":"09","2":"01","3":"02","4":"03","5":"04","6":"05","7":"06","8":"07","9":"08"}},"Options\\Stamina":{"note":"","data":["8013D866 00??"],"options":{"Off":"01","On":"00"}},"Options\\Traveling":{"note":"","data":["80144997 00??"],"options":{"2":"00","4":"01","6":"02","No":"03"}}},"6A162FF2-2093704C-C:50":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["811659D4 FFFF","811659D6 FFFF","811659DA 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FB5C 270F"],"options":null}},"6AA4DDE7-E3E2F4E7-C:45":{"All Batteries Have Bad Aim":{"note":"","data":["800A1F7C 0001"],"options":null},"All Batteries Have Hellfire":{"note":"","data":["800A34A2 0001"],"options":null},"All Battletanx Are Invincible":{"note":"","data":["8009843D 0001"],"options":null},"Area 51\\Mines Are Invisible":{"note":"","data":["802D5ACB 00CC"],"options":null},"Area 51\\Mines Are Toxic Waste":{"note":"","data":["802D5ACB 007C"],"options":null},"Area 51\\Shock Wave Weapons":{"note":"","data":["802D5A7D 00AF"],"options":null},"Area 51\\Turn Ammo Pickup Picture To Flamer Picture":{"note":"","data":["802D5AAF 00AC"],"options":null},"Area 51\\Turn Nuke Into Toxic Waste Nuke":{"note":"","data":["802D5A7B 007C"],"options":null},"Auto Lose All Queen Lord Levels":{"note":"","data":["800A6746 0001"],"options":null},"Auto Win All Queen Lord Levels":{"note":"","data":["800A6745 0001"],"options":null},"Buildings Fall Fast":{"note":"","data":["80091BBC 0001"],"options":null},"Buildings Implode Instead Of Explode, And Remain Afire":{"note":"","data":["8009298E 0001"],"options":null},"Can't Pick Up Queen Lords":{"note":"","data":["8008A2F0 0001"],"options":null},"Frogs":{"note":"","data":["80135775 0001"],"options":null},"Full Control Of Tank In Bonus,Extra Side Player In Battlelord Multi!":{"note":"","data":["800971EE 0001"],"options":null},"Have All Levels":{"note":"","data":["80135767 0001"],"options":null},"Have Storm Ravens Gang":{"note":"","data":["80135773 0001"],"options":null},"Hurl Mode":{"note":"","data":["8013576B 0001"],"options":null},"In Campaign 3 Enemy Tanks May Join You":{"note":"","data":["802D9AAC 0000","802DB3D4 0000","802DCCFC 0000"],"options":null},"Invincible":{"note":"","data":["80135763 0001"],"options":null},"Invisible":{"note":"","data":["8013576A 0001"],"options":null},"Laser Fire Invisible":{"note":"","data":["800846ED 0001"],"options":null},"MultiPlayer\\Player 2\\One Hit And You Bite It":{"note":"","data":["802D9AC7 0001"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 1\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AD7EE FFFF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 1\\Infinite Secondary Weapons In Battlelord":{"note":"","data":["802D8609 00FF","802D860B 00FF","802D860D 00FF","802D860F 00FF","802D8611 00FF","802D8615 00FF","802D8617 00FF","802D8619 00FF","802D861B 00FF","802D861D 00FF","802D861F 00FF","802D8621 00FF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 2\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AE186 FFFF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 2\\Infinite Secondary Weapons In Battlelord":{"note":"","data":["802D9F31 00FF","802D9F33 00FF","802D9F35 00FF","802D9F37 00FF","802D9F39 00FF","802D9F3D 00FF","802D9F3F 00FF","802D9F41 00FF","802D9F43 00FF","802D9F45 00FF","802D9F47 00FF","802D9F49 00FF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 3\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AEB1E FFFF"],"options":null},"Multiplayer\\Balltlelord Mode\\Player 4\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AF4B6 FFFF"],"options":null},"Multiplayer\\Deathmatch, Frenzy \u0026 Convoy Modes\\Player 1\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AD322 FFFF"],"options":null},"Multiplayer\\Deathmatch, Frenzy \u0026 Convoy Modes\\Player 2\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811ADCBA FFFF"],"options":null},"Multiplayer\\Deathmatch, Frenzy \u0026 Convoy Modes\\Player 3\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AE652 FFFF"],"options":null},"Multiplayer\\Deathmatch, Frenzy \u0026 Convoy Modes\\Player 4\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AEFEA FFFF"],"options":null},"Multiplayer\\Hold 'Em Mode\\Player 1\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AD7EE FFFF"],"options":null},"Multiplayer\\Hold 'Em Mode\\Player 2\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AE186 FFFF"],"options":null},"Multiplayer\\Hold 'Em Mode\\Player 3\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AEB1E FFFF"],"options":null},"Multiplayer\\Hold 'Em Mode\\Player 4\\All Special Weapons \u0026 Infinite Ammo":{"note":"","data":["50000E02 0000","811AF4B6 FFFF"],"options":null},"Multiplayer\\Plater 1\\One Hit And You Bite It":{"note":"","data":["802D819F 0001"],"options":null},"Multiplayer\\Player 1\\Always Has Cloaked On":{"note":"","data":["802D818D 0001"],"options":null},"Multiplayer\\Player 1\\Always Have Radar":{"note":"","data":["802D8195 0080"],"options":null},"Multiplayer\\Player 1\\Goalith Tank On Tracks Body Modifier":{"note":"","data":["802D86A3 00??"],"options":{"Big Tank":"02","Motor Tank":"01","Normal Tank":"00"}},"Multiplayer\\Player 1\\Infinite Ammo":{"note":"","data":["802D8603 00FF"],"options":null},"Multiplayer\\Player 1\\Main Weapon":{"note":"","data":["802D85EB 00??"],"options":{"?":"09","Big Tank Shells":"03","Cloaking":"0F","Gernades":"07","Gun Buddies":"0D","Health":"10","Laser":"05","Mines":"0C","Motor Tank Shells":"02","Normal Tank Shells":"01","Nothing":"00","Nuclear Lasers":"0A","Nuke":"06","Remote Rockets":"0B","Rockets":"04","Smoke Screen":"0E"}},"Multiplayer\\Player 1\\Secondary Weapon":{"note":"","data":["802D85F7 00??"],"options":{"?":"09","Big Tank Shells":"03","Cloaking":"0F","Gernades":"07","Gun Buddies":"0D","Health":"10","Laser":"05","Mines":"0C","Motor Tank Shells":"02","Normal Tank Shells":"01","Nothing":"00","Nuclear Lasers":"0A","Nuke":"06","Remote Rockets":"0B","Rockets":"04","Smoke Screen":"0E"}},"Multiplayer\\Player 1\\Tank Body Modifier":{"note":"","data":["802D819B 00??"],"options":{"Big Tank":"02","Motor Tank":"01","Normal Tank":"00"}},"Multiplayer\\Player 1\\Tank Turret Always On (Use Right/Left C Button)":{"note":"","data":["802DE7FB 0011","802DE7FF 0002"],"options":null},"Multiplayer\\Player 1\\Your Goalith Tank On Tracks Always Has Cloaked On":{"note":"","data":["802D8695 0001"],"options":null},"Multiplayer\\Player 1\\Your Goalith Tank On Tracks Always Has Radar":{"note":"","data":["802D869D 0080"],"options":null},"Multiplayer\\Player 2\\Always Has Cloaked On":{"note":"","data":["802D9AB5 0001"],"options":null},"Multiplayer\\Player 2\\Always Have Radar":{"note":"","data":["802D9ABD 0080"],"options":null},"Multiplayer\\Player 2\\Goalith Tank On Tracks Body Modifier":{"note":"","data":["802D9FCB 00??"],"options":{"Big Tank":"02","Motor Tank":"01","Normal Tank":"00"}},"Multiplayer\\Player 2\\Infinite Ammo":{"note":"","data":["802D9F2B 00FF"],"options":null},"Multiplayer\\Player 2\\Main Weapon":{"note":"","data":["802D9F13 00??"],"options":{"?":"09","Big Tank Shells":"03","Cloaking":"0F","Gernades":"07","Gun Buddies":"0D","Health":"10","Laser":"05","Mines":"0C","Motor Tank Shells":"02","Normal Tank Shells":"01","Nothing":"00","Nuclear Lasers":"0A","Nuke":"06","Remote Rockets":"0B","Rockets":"04","Smoke Screen":"0E"}},"Multiplayer\\Player 2\\Secondary Weapon":{"note":"","data":["802D9F1F 00??"],"options":{"?":"09","Big Tank Shells":"03","Cloaking":"0F","Gernades":"07","Gun Buddies":"0D","Health":"10","Laser":"05","Mines":"0C","Motor Tank Shells":"02","Normal Tank Shells":"01","Nothing":"00","Nuclear Lasers":"0A","Nuke":"06","Remote Rockets":"0B","Rockets":"04","Smoke Screen":"0E"}},"Multiplayer\\Player 2\\Tank Body Modifier":{"note":"","data":["802D9AC3 00??"],"options":{"Big Tank":"02","Motor Tank":"01","Normal Tank":"00"}},"Multiplayer\\Player 2\\Tank Turret Always On":{"note":"","data":["802DEB43 0011","802DEB47 0002"],"options":null},"Multiplayer\\Player 2\\Your Goalith Tank On Tracks Always Has Cloaked On":{"note":"","data":["802D9FBD 0001"],"options":null},"Multiplayer\\Player 2\\Your Goalith Tank On Tracks Always Has Radar":{"note":"","data":["802D9FC5 0080"],"options":null},"Multiplayer\\Player 3\\Tank Turret Always On":{"note":"","data":["802DEE8B 0011","802DEE8F 0002"],"options":null},"Multiplayer\\Player 4\\Tank Turret Always On":{"note":"","data":["802DF1D3 0011","802DF1D7 0002"],"options":null},"Nuke Blast Leaves Air Yellow":{"note":"","data":["800F3333 0001"],"options":null},"Nuke Blast Pink":{"note":"","data":["8008055F 0001"],"options":null},"Regenerated Allied Tanks Are Indestrucible In Campaign":{"note":"","data":["8009FB2A 0001"],"options":null},"Run Story":{"note":"","data":["80135770 0001"],"options":null},"Shoot Through Walls":{"note":"","data":["8008E529 0001"],"options":null},"Slow Battle Tanks":{"note":"","data":["8009A56A 0001"],"options":null},"Start With All Weapons":{"note":"","data":["80135765 0001"],"options":null},"Toads":{"note":"","data":["80135776 0001"],"options":null},"Trippy":{"note":"","data":["80135771 0001"],"options":null},"Unlimited Ammo":{"note":"","data":["80135760 0001"],"options":null},"Unlimited Lives":{"note":"","data":["80135772 0001"],"options":null}},"6AECEC4F-F0924814-C:50":{"All Equipment Upgrades":{"note":"","data":["801E54ED 0023","811E553A 201B","801E54CC 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03DC90B 0000","801E5482 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801E5502 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801E5503 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801E5504 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801E5505 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801E5506 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801E5507 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801E54F5 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801E54FB 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801E5501 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Have Item Modifier":{"note":"","data":["801E5500 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\All Masks":{"note":"","data":["811E5508 3E39","811E550A 4745","811E550C 4032","811E550E 3A46","811E5510 3842","811E5512 4833","811E5514 3C3D","811E5516 373F","811E5518 3634","811E551A 4341","811E551C 3B44","811E551E 4935"],"options":null},"Have\\Bombchu":{"note":"","data":["801E54F7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801E54F6 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801E54F9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801E54F8 0008"],"options":null},"Have\\Fire Arrow":{"note":"","data":["801E54F2 0002"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801E5500 0010"],"options":null},"Have\\Have\\Ocarina of Time":{"note":"","data":["801E54F0 0000"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801E54F1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801E54FF 000F"],"options":null},"Have\\Ice Arrow":{"note":"","data":["801E54F3 0003"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801E54FE 000E"],"options":null},"Have\\Light Arrow":{"note":"","data":["801E54F4 0004"],"options":null},"Have\\Magic Beans":{"note":"","data":["801E54FA 000A"],"options":null},"Have\\Pictograph":{"note":"","data":["801E54FD 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801E54FC 000C"],"options":null},"Have\\QuestStatus Items":{"note":"","data":["801E553D 0005","811E553E F7CF"],"options":null},"Infinite\\Health":{"note":"","data":["811E54B6 03E7"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811E54B4 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"This is Infinite use of Bombs,Bombchus,Deku Sticks,Deku Nuts,Magic Beans,\u0026 Powder Kegs. But you must also put it's Have on to work.","data":["801E5521 0063","50000801 0000","801E5526 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801E54B9 0060","811E54C0 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811E54BA 03E7"],"options":null},"Play As":{"note":"","data":["801E54A0 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0378ECB 0020","813921A8 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You Have\\been warned.","data":["801E54CC 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F0496 0008","811E5496 FFFD","D01F0496 0004","811E5496 0000","D01F0496 0002","811E5496 FFFE"],"options":null},"Use all C Buttons":{"note":"","data":["811E9398 0000","811E939A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["803DC90A 0000","803F5165 0001","813F516A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"6B45223F-F00E5C56-C:45":{"Crunched Players":{"note":"","data":["810EA078 3F00"],"options":null},"Extra Teams":{"note":"","data":["800C7205 0001"],"options":null},"Get In Fights Constantly":{"note":"","data":["800A442E 0020"],"options":null},"Players\\Head Size":{"note":"","data":["810EA070 ????"],"options":{"Normal Size":"3F80","Very Large":"4080","Very Small":"3F00"}},"Players\\Height Size":{"note":"","data":["810EA074 ????"],"options":{"Giants":"4080","Large":"3FC0","Midgets":"3F00","Normal Size":"3F80"}},"Team 1\\Score pts":{"note":"","data":["800E6AB1 00??"],"options":{"30 Points":"1E","50 Points":"23","75 Points":"4B","99 Points":"63","Zero Points":"00"}},"Team 2\\Score pts":{"note":"","data":["800E9F8D ????"],"options":{"0 Points":"2305","5 Points":"4B07","9 Points":"6309","ero Points":"0000"}}},"6B700750-29D621FE-C:45":{"1 Win to Win\\Player 1":{"note":"","data":["D0138B47 0000","80138B47 0001"],"options":null},"1 Win to Win\\Player 2":{"note":"","data":["D0138B43 0000","80138B43 0001"],"options":null},"Extra Characters":{"note":"","data":["8007F9F8 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["8008B1E7 0064"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["8008AE5F 0064"],"options":null},"Infinite Time":{"note":"","data":["81138B2A 0708"],"options":null},"Infinite Time To Choose Character":{"note":"","data":["D01340F6 0001","811340F6 0260"],"options":null},"No Health\\Player 1":{"note":"","data":["8008B1E7 0000"],"options":null},"No Health\\Player 2":{"note":"","data":["8008AE5F 0000"],"options":null},"P2/CPU Never Wins":{"note":"","data":["80138B43 0000"],"options":null},"R Button Health Restore\\Player 1":{"note":"","data":["D007CD2B 0010","8008B1E7 0064"],"options":null},"Sudden Death Mode\\Player 1":{"note":"","data":["D1138B2A 0120","8008B1E7 0001"],"options":null},"Sudden Death Mode\\Player 2":{"note":"","data":["D1138B2A 0120","8008AE5F 0001"],"options":null},"Z Trigger Deathblow\\Player 1":{"note":"","data":["D007CD2A 0020","8008AE5F 0000"],"options":null}},"6BFF4758-E5FF5D5E-C:4A":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118B2D0 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118B2D2 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118B2D4 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118B2D6 0003"],"options":null},"Have Bonus Mode and All Gold Cups":{"note":"","data":["8018C728 00??","8018C729 00??","8018C72A 00??","8018C72B 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["80163655 00??","80163682 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["80163735 00??","80163762 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["80163815 00??","80163842 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["801638F5 00??","80163922 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["801639D5 00??","80163A02 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["80163AB5 00??","80163AE2 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818C80F 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F73C5 0020","810F7478 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F73D5 0020","810F8250 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F73E5 0020","810F9028 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F73F5 0020","810F9E00 4000"],"options":null}},"6C2C6C49-9BE5CA66-C:45":{"Extra Bonuses":{"note":"","data":["810EBA6A 270F"],"options":null},"Fake Max Spin Bar?":{"note":"","data":["800EBA43 0009"],"options":null},"Infinite\\Crate Attempts":{"note":"","data":["800A9D1B 0007"],"options":null},"Infinite\\Gold Pickups":{"note":"","data":["802EB9E8 0064"],"options":null},"Infinite\\Health":{"note":"","data":["800EBA47 0009"],"options":null}},"6C45B60C-DCE50E30-C:4A":{"Access All Boards \u0026 Characters":{"note":"","data":["800500C1 000C"],"options":null},"All Street Work Levels Unlocked":{"note":"","data":["50007801 0000","80050170 00??"],"options":{"Courses unlocked":"01","Courses unlocked with A rank":"05","Courses unlocked with B rank":"04","Courses unlocked with C rank":"03","Courses unlocked with S rank":"06"}},"Class Score Select":{"note":"","data":["8016609E 00??"],"options":{"Class A":"64","Class B":"40","Class C":"20","Class S":"FF"}},"Coin Perfect Select":{"note":"this is for Coin Mode to get Perfect Coin Collection Score straight away when you enter the level","data":["801660B3 00??"],"options":{"Giant House Level 1":"6E","Giant House Level 2":"77","Giant House Level 3":"72","Green Park Level 1":"14","Green park Level 2":"1A","Green park Level 3":"2B","Lost Forest Level 1":"4A","Lost Forest Level 2":"59","Lost Forest Level 3":"80","Snow Festival 64 Levels 1 2 \u0026 3":"7D","Sunset Island Level 1":"6F","Sunset Island Level 2":"74","Sunset Island Level 3":"81"}},"Infinite Time\\Attack Time Time 000000":{"note":"","data":["811137EA 0000"],"options":null},"Infinite Time\\Street Work \u0026 Coin":{"note":"","data":["801137E9 0028"],"options":null},"Infinite Time\\Time Attack":{"note":"","data":["801137EB 0000"],"options":null},"Infinite Turbo\\Player 1":{"note":"","data":["80166019 0009"],"options":null},"Infinite Turbo\\Player2":{"note":"","data":["80167991 0009"],"options":null},"Maxed Out Turbo Bar":{"note":"","data":["811656E8 429F","80166017 0051"],"options":null},"Options\\Camera Type Modifier":{"note":"","data":["810500A6 00??"],"options":{"Roll Off Far":"05","Roll Off Mid":"04","Roll Off Near":"03","Roll On Far":"02","Roll On Mid":"01","Roll On Near":"00"}},"Options\\DJ Function Modifier":{"note":"","data":["810500AC 00??"],"options":{"DJ Function Off":"00","DJ Function On":"01"}},"Options\\Music Modifier":{"note":"","data":["800500A9 00??"],"options":{"BGM Off":"00","BGM On":"FF"}},"Options\\Sound Effects Modifier":{"note":"","data":["810500AA 00??"],"options":{"SE Off":"00","SE On":"FF"}}},"6D8DF08E-D008C3CF-C:50":{"2 Player Championship Mode":{"note":"This lets player 2 play with you in championship mode so if you have a friend that you want to tag team up with in tag team championship now you can.","data":["810A755E 0002"],"options":null},"Always Special\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF9E 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2F6 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["D015A5D1 0015","8015B64E 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["D015A5D1 0015","8015B9A6 0004"],"options":null},"Auto-Pin\\Player 1":{"note":"Do not use with Cant Pin","data":["8016CE23 0003"],"options":null},"Auto-Pin\\Player 2":{"note":"Do not use with Cant Pin","data":["8016CE17 0003"],"options":null},"Auto-Pin\\Player 3":{"note":"Do not use with Cant Pin","data":["8016CE2F 0003"],"options":null},"Auto-Pin\\Player 4":{"note":"Do not use with Cant Pin","data":["8016CE3B 0003"],"options":null},"CPU To Human Control\\Player 1":{"note":"","data":["8015AF99 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 2":{"note":"","data":["8015B2F1 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 3":{"note":"","data":["8015B649 00??"],"options":{"CPU":"18","Human":"17"}},"CPU To Human Control\\Player 4":{"note":"","data":["8015B9A1 00??"],"options":{"CPU":"18","Human":"17"}},"Can't Pin\\Player 1":{"note":"Do not use with Auto Pin","data":["8016CE23 0004"],"options":null},"Can't Pin\\Player 2":{"note":"Do not use with Auto Pin","data":["8016CE17 0004"],"options":null},"Can't Pin\\Player 3":{"note":"Do not use with Auto Pin","data":["8016CE2F 0004"],"options":null},"Can't Pin\\Player 4":{"note":"Do not use with Auto Pin","data":["8016CE3B 0004"],"options":null},"Cannot Be Grabbed\\Player 1":{"note":"","data":["D115AEC6 0052","8115AEC6 0001","D115AEC6 00A1","8115AEC6 00C1"],"options":null},"Cannot Be Knocked Down\\Player 1":{"note":"","data":["D115AEC6 0031","8115AEC6 0001"],"options":null},"Cannot Be Punched\\Player 1":{"note":"","data":["D115AEC6 002D","8115AEC6 0001","D115AEC6 0035","8115AEC6 00C1"],"options":null},"Clock At 00:00":{"note":"","data":["8115AB1E 0000","810A99F2 0000"],"options":null},"Hacked Moves\\Capture Tazzplex":{"note":"Replaces: Capture Suplex P1 grabs P2's feet like a capture suplex, then lets go \u0026 does a Tazzplex.","data":["D106B454 3689","D106B456 0021","8106B460 00BC","D106B454 3689","D106B456 0021","8106B462 A5E2","D106B514 368A","D106B516 0021","8106B520 00BC","D106B514 368A","D106B516 0021","8106B522 B6BE"],"options":null},"Hacked Moves\\Dominator into HHH Facebuster":{"note":"Replaces: Dominator","data":["D106B454 3810","D106B456 005C","8106B560 011A","D106B454 3810","D106B456 005C","8106B562 A256","D106B514 3811","D106B516 005C","8106B520 011A","D106B514 3811","D106B516 005C","8106B522 ACB0","D106B454 3810","D106B456 0075","8115AF52 0000"],"options":null},"Hacked Moves\\Dragon Screw Stunner":{"note":"Dragon Screw 02 P1 does a Dragon Screw then picks up P2 (still holding his leg) and spins him around and gives him a Stone Cold Stunner","data":["D106B454 3749","D106B456 0094","8106B460 00E9","D106B454 3749","D106B456 0094","8106B462 B9BE","D106B514 374A","D106B516 0094","8106B520 00E9","D106B514 374A","D106B516 0094"],"options":null},"Hacked Moves\\Dragon Screw Suplex":{"note":"Replaces: Double Dragon Screw 02 P1 does a Dragon screw then picks then up (still holding their feet) and does a capture suplex.","data":["D106B454 3749","D106B456 007C","8106B460 00AD","D106B454 3749","D106B456 007C","8106B462 DB2A","D106B514 374A","D106B516 007C","8106B520 00AD","D106B514 374A","D106B516 007C","8106B522 EAE0","D106B454 3749","D106B456 00A5","8115AF52 0000","D106B514 374A","D106B516 00A5","8115B2AA 0000"],"options":null},"Hacked Moves\\Morality Check to Back of head":{"note":"Replaces: Back Clothesline P1 is immediately backed up and does the Morality Check to P2 in the back of the head (misses by a little)","data":["D106B454 3892","D106B456 0000","8106B460 00B3","D106B454 3892","D106B456 0000","8106B462 194C"],"options":null},"Hacked Moves\\Running Rock Bottom":{"note":"Replaces: Farooq Spinebuster P2 runs into P1 and P1 delivers a RockBottom to P2.","data":["D106B454 3A80","D106B456 0000","8106B460 00C1","D106B454 3A80","D106B456 0000","8106B462 F7A2","D106B514 3A81","D106B516 0000","8106B520 00C2","D106B514 3A81","D106B516 0000","8106B522 1210"],"options":null},"Hacked Moves\\Running Tazplex":{"note":"Replaces: Underhook Belly to Belly P2 runs into P1 and P1 does a Tazplex to P2.","data":["D106B454 3A7A","D106B456 0000","8106B460 00BC","D106B454 3A7A","D106B456 0000","8106B462 A51E","D106B514 3A7B","D106B516 0000","8106B520 00BC","D106B514 3A7B","D106B516 0000","8106B522 B5FA"],"options":null},"Have All\\Characters,Costumes, \u0026 Moves":{"note":"","data":["50000B02 0000","810BEE40 FFFF"],"options":null},"Infinite\\Money\\Championship Mode":{"note":"For Championship Mode","data":["8109940A FFFF"],"options":null},"Infinite\\Money\\Smackdown Mall Shop":{"note":"For Smackdown Mall Shop","data":["8114FAD6 FFFF"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF5F 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2B7 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["D015A5D1 0015","8015B60F 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["D015A5D1 0015","8015B967 00FF"],"options":null},"Novalty\\Truck In The Crowd":{"note":"","data":["81050110 0747","81050112 0748","81050114 0749","81050116 074A","81050118 074B","81050124 0A4B","81050126 0A43","81050128 0A4B","8105012A 0A43","8105012C 0A43","8105012E 0A43","8105011A 074C","8105011C 074D","81050130 0A43","8105011E 074E","81050132 0A43","81050120 0746","81050134 0A4B","81050122 0743","81050136 0A4B","D1064880 2000","8115AFB0 42EE","D1064880 2000","8115B308 42EE"],"options":null},"Play As\\Player 1\\Option 1":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 1\\Option 2":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 1\\Option 3":{"note":"Do not use this with anyother Play As Player 1 Option, only use one option at a time","data":["810AAAD0 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 2\\Option 1":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 2\\Option 2":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 2\\Option 3":{"note":"Do not use this with anyother Play As Player 2 Option, only use one option at a time","data":["810AAADC ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 3\\Option 1":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 3\\Option 2":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 3\\Option 3":{"note":"Do not use this with anyother Play As Player 3 Option, only use one option at a time","data":["810AAAE8 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Play As\\Player 4\\Option 1":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Angle":"0302","Benoit":"0201","Cactus":"0007","D`Lo":"0306","GodFather":"0305","Guerrero":"0204","HBK":"0009","HHH":"0101","Jericho":"0301","Kane":"0004","Malenko":"0202","Mankind":"0006","Mick":"0008","Mr. Ass":"0103","Richards":"0005","Road Dogg":"0104","Rock":"0001","SCSA":"0002","Saturn":"0203","Shamrock":"0308","Tazz":"0303","Test":"0304","Undertaker":"0003","Venis":"0307","X-Pac":"0102"}},"Play As\\Player 4\\Option 2":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Al":"0601","Albert":"0508","Andre":"0606","Blackman":"0602","Bossman":"0507","Bradshaw":"0502","Buchanan":"0607","Buh Buh":"0504","Bulldog":"0603","Christian":"0405","Chyna":"0701","Crash":"0506","D-Von":"0503","Edge":"0404","Faarooq":"0501","Hardcore":"0505","Henry":"0604","Jeff":"0407","Matt":"0406","Rikishi":"0401","Rios":"0608","Scotty":"0403","Sexay":"0402","Taka":"0609","Viscera":"0605"}},"Play As\\Player 4\\Option 3":{"note":"Do not use this with anyother Play As Player 4 Option, only use one option at a time","data":["810AAAF4 ????"],"options":{"Debra":"0704","Hebner":"0903","Ho":"0805","Jacqueline":"0801","Jim Ross":"0904","Kat":"0803","Linda":"0802","Lita":"0706","Moola":"0804","Shane":"0902","Stephanie":"0702","Tori":"0703","Trish":"0705","Vince":"0901"}},"Replace Raw War with\\BACKYARD ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105010E 0F76","8105010C 0F76","810482E8 002F","81050150 2CFD","810528F4 33FF","810528F6 33FF","81050152 2DC7","81050114 04F4","81050116 04F5","8105011E 04F3","81050128 07FF","8105012A 07FF","81050132 07FF","81079F48 400C","81079F5C 3F00","81079F70 3FFF","8107A024 4010","8107A038 3F00","8107A04C 4020","8107A060 3F84","8107A394 4012","8107A3A8 3F00","8107A3BC 4030","8107A3D0 3F84","8105042C 0949","81050436 07FF","81050438 07FF","8105043A 07FF","8105043C 0000","8105043E 07FF","81050440 0949","81050442 0949","81050430 0F76","81050128 07FF","8105012A 07FF","8105012C 0000","8105012E 07FF","81050130 07FF","81050132 07FF","81050134 0000","81050136 08F9","81050196 2CFD","81050194 09EF","81050192 0000","81050190 09EF","8116C49E 0019","8116C4B8 0004","8116C4DC C2E1","8116C4E0 42B4","810500FE 2D2D","81050100 2D2D","81050102 2D2D","81050400 2DC7","81050402 2DC7","81050404 2DC7","81050406 2DC7","81050408 2DC7","8105040A 2DC7","8105040C 2DC7","8105040E 2DC7","50001002 0000","810501B8 0000","50000402 0000","810501E0 0000","50000902 0000","81050262 0000","50001402 0000","81050290 0000","50002C02 0000","810502EC 0000","8107941C 3FE0","81079428 3FFF","810500EC 06FE","810500EE 06FD","810500F8 07FF","810500FA 0997","81050110 06FC","81050112 06FB","8105011A 06FF","8105011C 06FA","81052CF0 2CC9","81052CF4 2D1B","81052CD0 2CD1","81052CD4 0963","81052C84 2CBF","81052C8A 0961","81052CB8 2CC4","81052CBC 2DD7","81052CC8 2CD1","81052CCC 2CFB","81052C78 2CBC","81052C80 2D31","81052CF8 2CC1","81052D00 2DD7"],"options":null},"Replace Raw War with\\BACKYARD WEAK":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0E88","8105042E 2D0D","81050430 2D0D","81050432 2D0D","81050434 2D0D","81050436 07FD","8105043A 2CFB","8105043C 2D0D","8105043E 2D0D","81050440 2D0D","81050442 2D0D","810500E8 2D0D","8105010E 2D0D","8105010C 2D0D","81050150 2D0D","81050196 2CFB","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81050136 2CFB","81050400 2D0D","81050402 2D0D","81050404 2D0D","81050406 2D0D","81050408 2D0D","8105040A 2D0D","8105040C 2D0D","8105040E 2D0D","810528F4 2D0D","810528F6 2D0D","81052CE8 2CC9","81052CEC 2D2D"],"options":null},"Replace Raw War with\\BARBEDWIRE ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 2CFB","8105042E 2CFB","81050430 2CFB","81050432 2CFB","81050434 2CFB","81050436 2CFB","81050438 2CFB","8105043A 2CFB","8105043C 2CFB","8105043E 2CFB","81050440 2CFB","81050442 2CFB","810500E8 2CFB","8105010E 2CFB","8105010C 2CFB","81050150 2CFB","81050196 2CFB","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81050136 2CFB","810528F4 DDDD","810528F6 DDDD","81052CE8 2CCA","81052CEC 2CFB","81050400 2CFB","81050402 2CFB","81050404 2CFB","81050406 2CFB","81050408 2CFB","8105040A 2CFB","8105040C 2CFB","8105040E 2CFB"],"options":null},"Replace Raw War with\\BARBEDWIRE ROPES":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050110 04F3","81050112 04F4","81050114 04F5","81050116 04F3","81050118 04F4","8105011A 04F5","8105011C 04F3","8105011E 04F4","81050120 04F5","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81079D90 3F6C","81079D94 3F48","81079DA4 3D10","81079DB8 3F71","81079E6C 3F6C","81079E80 3D10","81079E90 3F47","81079F48 3F6C","81079F4C BF4C","81079F5C 3D10","81079F70 3F71","8107A024 3F6C","8107A028 3F28","8107A038 3D10","8107A04C 3F71","8107A100 3F6C","8107A114 3D10","8107A124 3F23","8107A1DC 3F6C","8107A1E0 BF2A","8107A1F0 3D10","8107A204 3F71","8107A2B8 3F6C","8107A2BC 3F02","8107A2CC 3D10","8107A2E0 3F71","8107A394 3F6C","8107A3A8 3D10","8107A3B8 3F00","8107A470 3F6C","8107A474 BF02","8107A484 3D10","8107A498 3F71","81050144 0569","81050154 07F7","810528F4 0C01","810528F6 0555","81050140 04F4","81050150 2CFB","8107A628 3F60","8107A63C 3D10","8107A64C 3F52","8107A650 BF80","8107A8BC 3F56","8107A8C4 BA00","8107A8D0 3D10","8107A8DC 3C5A","8107A8E0 3F30","8107A8E4 BF80","8107ADE4 3F56","8107ADEC BA00","8107ADF8 3D10","8107AE04 3C5A","8107AE08 3F0E","8107AE0C BF80","8107AB7C 3F00","D115AF56 2EB2","8115AEC6 0017","D115B2AE 2EB2","8115B21E 0017","D115B606 2EB2","8115B570 0017","D115B95E 2EB2","8115B8CE 0017","81052922 FFFF","81052924 FFFF","81052926 FFFF"],"options":null},"Replace Raw War with\\BARBEDWIRE SQUARE\\Part 1":{"note":"Both Parts must be on for this Press the C Left Button to make your opponent bleed,These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050110 04F3","81050112 04F4","81050114 04F5","81050116 04F3","81050118 04F4","8105011A 04F5","8105011C 04F3","8105011E 04F4","81050120 04F5","81050124 2CFB","81050126 2CFB","81050128 2CFB","8105012A 2CFB","8105012C 2CFB","8105012E 2CFB","81050130 2CFB","81050132 2CFB","81050134 2CFB","81079D90 3F6C","81079D94 3F48","81079DA4 3D10","81079DB8 3F71","81079E6C 3F6C","81079E80 3D10","81079E90 3F47","81079F48 3F6C","81079F4C BF4C","81079F5C 3D10","81079F70 3F71","8107A024 3F6C","8107A028 3F28","8107A038 3D10","8107A04C 3F71","8107A100 3F6C","8107A114 3D10","8107A124 3F23","8107A1DC 3F6C","8107A1E0 BF2A","8107A1F0 3D10","8107A204 3F71","8107A2B8 3F6C","8107A2BC 3F02","8107A2CC 3D10","8107A2E0 3F71","8107A394 3F6C","8107A3A8 3D10","8107A3B8 3F00","8107A470 3F6C","8107A474 BF02","8107A484 3D10","8107A498 3F71","81050144 0569","81050154 07F7","810528F4 0C01","810528F6 0555","81050140 04F4","81050150 2CFB","8107A628 3F60","8107A63C 3D10","8107A64C 3F52","8107A650 BF80","8107A8BC 3F56","8107A8C4 BA00","8107A8D0 3D10","8107A8DC 3C5A","8107A8E0 3F30","8107A8E4 BF80","8107ADE4 3F56","8107ADEC BA00","8107ADF8 3D10","8107AE04 3C5A","8107AE08 3F0E","8107AE0C BF80","8107AB7C 3F00","D115AF56 2EB2","8115AEC6 0017","D115B2AE 2EB2","8115B21E 0017","D115B606 2EB2","8115B570 0017","D115B95E 2EB2","8115B8CE 0017","81052922 FFFF","81052924 FFFF","81052926 FFFF","8116C330 0000","8116C332 000A","8116C334 0000","8116C336 000A","8116C378 42B4"],"options":null},"Replace Raw War with\\BARBEDWIRE SQUARE\\Part 2":{"note":"Both Parts must be on for this Press the C Left Button to make your opponent bleed,These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8116C382 0000","8116C38C FFFF","81052C9C 0672","81052CA4 2CFB","D1064880 0002","8115B21E 002F","D1064886 0002","8115AEC6 002F","8116C3E4 0000","8116C3E6 000C","8116C3E8 0000","8116C3EA 000C","8116C428 C3D4","8116C440 FFFF","81052CB2 2CC2","81052CB4 0805","81052CB6 2CFB","D1064880 2000","8116C3E6 001F","D1064880 2000","8116C3EA 001F","D1064880 2000","81005592 3F81","D1005592 3F81","8116C3E6 001F","D1064880 2000","81005592 3F81","D1005592 3F81","8116C3EA 001F","D1064886 2000","8116C3E6 001F","D1064886 2000","8116C3E6 001F","D1064886 2000","81005592 3F81","D1005592 3F81","8116C3EA 001F","81052CF8 04F4","81052D00 2CFB","8116C3E4 0000","8116C3E6 0015","8116C3E8 0000","8116C3EA 0015","8116C428 0000","8116C42A 0000","8116C42C 43EB","8116C42E 0000","8116C430 C3A6","8116C432 0000","8116C436 0400","8116C43A 0000","8116C43E 0000","8116C440 FFFF","8116C442 0000","810855A8 3F00","81085684 3F00","81085750 3F00","8108583C 3F00","81050100 2CFB","8105010E 2CFB"],"options":null},"Replace Raw War with\\DUDLEY ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 21A7","8105042E 2D0D","81050432 2D0D","81050436 21A7","8105043E 2D0D","81050440 0000","81050442 0000","810500E8 2D0D","8105010C 2CFD","8105010E 2CFD","81050150 2D29","81050152 2CFB","81050400 09EF","81050402 09EF","81050404 0000","81050406 0000","81050408 0000","8105040A 0000","8105040C 09EF","8105040E 09EF","81050188 04F6","8105018A 04F7","8105018C 04F8","8105018E 04F9","81050190 09EF","81050192 0000","81050194 09EF","81050196 2D0D","810528F4 6666","810528F6 6666","81052CE8 2CC2","81052CEC 2D0D","81052D1C 2CD3","81052D1E 2CD4","81052D20 2CD5","81052D22 2CD6","81052D24 2CFD","81052D26 2CFD","81052D28 2CFB","81052D2A 2CFB","81050124 2CFD","81050126 2CFD","81050128 2CFD","8105012A 2CFD","8105012C 2CFD","8105012E 2CFD","81050130 2CFD","81050132 2CFD","81050134 2CFD","81050136 2CFD","81050154 2CFB","811533F8 002E"],"options":null},"Replace Raw War with\\FLAME ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105010E 0EFE","8105010C 0EFE","810528F4 2508","810528F6 2508","81050430 2401","81050430 2401","81050404 2401","81050406 2401","81050408 2401","81050409 2401","8105040A 2401","8105040C 2401","810500E8 2401"],"options":null},"Replace Raw War with\\FLAMING TURNBUCKLES":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8116C334 FFFF","8116C336 001F","8116C374 C350","8116C376 FFF3","8116C378 4377","8116C37A 2689","8116C37C C380","8116C37E 0406","8116C382 0D14","8116C386 0FCC","8116C38A 07DC","8116C38C FFFF","8116C38E FDE3","8116C3E8 FFFF","8116C3EA 001F","8116C428 C360","8116C42C 4370","8116C430 4376","8116C436 0D14","8116C43A 0FCC","8116C43E 07DC","8116C442 F9C4","8116C49C FFFF","8116C49E 001F","8116C4DC 4360","8116C4E0 4370","8116C4E4 4380","8116C4EA 0CD0","8116C4EE 0136","8116C4F2 04EE","8116C4F6 F601","8116C550 FFFF","8116C552 001F","8116C590 434F","8116C594 4370","8116C598 C36C","8116C59E 0E70","8116C5A2 0F58","8116C5A6 0814","8116C5AA F1E6"],"options":null},"Replace Raw War with\\GREENWICH STREET ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050430 2DC5","81050436 0000","81050438 0000","8105043A 0000","8105043E 0000","810504E8 0EFE","8105010E 2DC5","8105010C 2DC5","81050196 2CFD","81050136 0FB6","81050134 0FC6","81050132 0FB6","81050130 0FC6","8105012E 0FB6","8105012C 0FC6","8105012A 0FB6","81050128 0FC6","81050126 0FB6","81050124 0FC6","81050440 0000","81050442 0000","50002C02 0000","81050378 0000","50002C02 0000","810502EC 0000","50001402 0000","81050290 0000","50000902 0000","81050262 0000","50000402 0000","810501CE 0000","50001002 0000","810501B8 0000","50000402 0000","810501E0 0000","8105042C 2D0D","81050430 0000","81050150 24F0"],"options":null},"Replace Raw War with\\HHH ARNEA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105040E 24EF","8105040C 24EF","8105040A 24EF","81050408 24EF","81050406 24EF","81050404 24EF","81050402 24EF","81050400 24EF","81050436 24E9","81050440 24E9","81050442 24E9","8105043E 24EF","8105042E 24EF","8105043C 24EF","8105042C 24E9","8105010E 24E9","8105010C 24E9","81050196 24E9","8105042E 24EF","81050432 24EF","810500F8 24EF","810500FA 24EF","810500FC 24EF","810500FC 24EF","81050100 24EF","81050100 24EF","81052CE8 2CCA","81052CEC 24EF","81050150 24E9","81050152 24E9","81050154 24E9","810528F4 24E9","810528F6 24E9"],"options":null},"Replace Raw War with\\HOSPITAL ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0949","8105042E 283F","81050428 0949","81050430 0949","81050430 0949","81050436 096B","81050438 0993","8105043A 096B","8105043E 283F","81050440 283F","81050442 283F","810504E8 0949","81050150 283F","81050196 283F","81050400 283F","81050402 283F","81050404 283F","81050406 283F","81050408 283F","8105040A 283F","8105040C 283F","8105040E 283F","810500F8 283F","810500FA 283F","810500FC 283F","810500FE 283F","81050100 283F","81050100 283F","81052CE8 2CCA","81052CEC 283F","8105010E 283F","8105010C 283F","81050124 0949","81050126 0949","81050128 0949","8105012A 0949","8105012C 0949","8105012E 0949","81050130 0949","81050132 0949","81050134 0949","81050136 0949","810500E8 0949","810528F4 0000","81052CE0 2CC9"],"options":null},"Replace Raw War with\\KANE ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 0A61","8105042E 0A61","81050428 2B6C","81050430 2B6C","81050430 2B6C","81050436 2B57","81050438 2B57","8105043A 2B57","8105043E 0A61","81050440 2B57","81050442 2B57","810500E8 1B1E","8105010E 2D37","8105010C 209F","81050194 0955","81050196 2B57","81050400 2699","81050402 2699","81050404 2699","81050406 2699","81050408 2699","8105040A 2699","8105040C 2699","8105040E 2699"],"options":null},"Replace Raw War with\\REMOVE RING":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["81050150 0000","81050152 0000","81050154 0000","810500E8 0000","810855A8 3F00","81085684 3F00","81085750 3F00","8108583C 3F00","81079C08 3F00","81079C14 3F00","81079B10 3F00"],"options":null},"Replace Raw War with\\SHIMMER ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 1932","8105042E 1932","81050430 1932","81050434 1932","81050432 1932","81050436 1932","81050438 1932","8105043A 1932","8105043E 1932","81050440 1932","81050442 1932","81050150 1932","81050152 1932","81050154 1932","81050190 1932","81050192 1932","81050194 1932","81050196 1932","81050124 1932","81050126 1932","81050128 1932","8105012A 1932","8105012C 1932","8105012E 1932","81050130 1932","81050132 1932","81050134 1932","81050136 1932","810500E8 1932","8105010E 1932","8105010C 1932"],"options":null},"Replace Raw War with\\SPACE SHIP ARENA":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["8105042C 094D","8105042E 0953","81050430 0953","81050432 0F0E","81050434 0953","81050436 0F0E","81050438 0899","8105043C 0953","8105043E 0899","81050440 0963","81050442 0963","81050400 0953","81050402 0953","81050404 0953","81050406 0953","81050408 0953","8105040A 0953","8105040C 0953","8105040E 0953","810500E8 0A75","810528F4 7223","810528F6 0119","81050150 0963","81050152 0963","81050190 0953","81050192 0953","81050194 0953","81050196 0963","8105010E 0F0E","8105010C 0F0E","81050124 0F10","81050126 0F10","81050128 0F10","8105012A 0F10","8105012C 0F10","8105012E 0F10","81050130 0F10","81050132 0F10","81050134 0F10","81050136 0F10","810500F8 0963","810500FA 0963","810500FC 0963","810500FE 0963","81050100 0963","81050102 0963","81052CE8 2CCA","81052CEC 0963"],"options":null},"Replace Raw War with\\TOKYO DOME":{"note":"These Replace Raw War Arena With what ever coice you make. Only use 1 option at a time.","data":["810528F4 7223","810528F6 0119","81050124 0100","81050126 0100","81050128 0100","8105012A 0100","8105012C 0100","8105012E 0100","81050130 0100","81050132 0100","81050134 0100","81050136 0100","8105010E 0999","81050400 03A5","81050402 0385","81050404 0385","81050406 0385","81050408 0385","8105040A 03A5","8105040C 03A5","8105040E 043F","81050430 043F","8105042C 03A5","81050430 21A5","81050432 0100","81050434 0000","81050436 2CFB","81050438 0899","8105043C 03AF","81050440 03AF","81050442 03A5","810500E8 24C3","81050444 0100","81050190 09EF","81050192 0000","81050194 09EF","81050196 2CFD"],"options":null},"Tables\\IN RING TABLE\\Part 1":{"note":"To Make the Table look broken Keep the Z Button press down, To make player stand on the Table, Stand next to it \u0026 Keep C-Right Pressed Down.Put all Parts on Together for this Cheat to work","data":["81052CF0 06E1","81052CF4 09F1","81052CF8 06E2","81052D00 09F1","81052D0C 06E3","81052D0E 06E4","81052D10 09EF","81052D12 09EF","81052D14 06E5","81052D16 06E6","81052D18 09EF","81052D1A 09EF","D1064880 0001","8115AFB0 432C","D1064880 0001","8115B308 432C","D1064880 2000","8115AFB0 42B4","D1064880 2000","8115B308 42B4","8116C330 0000","8116C332 0014","8116C334 0000","8116C336 0014","8116C374 4210","8116C376 C0B1","8116C378 432F","8116C37A 51DC","8116C37C 4210","8116C37E 92F1","8116C382 0800","8116C386 05A0","8116C38A 0800","8116C38C FFFF","8116C38E F3BC","8116C3E4 0000","8116C3E6 0015","8116C3E8 0000","8116C3EA 0015","8116C428 4210","8116C42A C0B1","8116C42C 432F","8116C42E 51DC","8116C430 4210","8116C432 92F1","8116C436 0800","8116C43A 05A0","8116C43E 0800","8116C440 FFFF","8116C442 F3BC","D1064880 2000","8116C378 42E0"],"options":null},"Tables\\IN RING TABLE\\Part 2":{"note":"To Make the Table look broken Keep the Z Button press down, To make player stand on the Table, Stand next to it \u0026 Keep C-Right Pressed Down.Put all Parts on Together for this Cheat to work","data":["D1064880 2000","8116C382 07E0","D1064880 2000","8116C38A 0680","D1064880 2000","8116C42C 42E0","D1064880 2000","8116C436 0820","D1064880 2000","8116C43E 0980","8116C498 0000","8116C49A 0017","8116C49C 0000","8116C49E 0017","8116C4DC 4210","8116C4DE C0B1","8116C4E0 432A","8116C4E2 51DC","8116C4E4 4210","8116C4E6 92F1","8116C4EA 0800","8116C4EE 05A0","8116C4F2 0800","8116C4F4 FFFF","8116C4F6 F3BC","8116C54C 0000","8116C54E 0018","8116C550 0000","8116C552 0018","8116C590 4210","8116C592 C0B1","8116C594 432A","8116C596 51DC","8116C598 4210","8116C59A 92F1","8116C59E 0800","8116C5A2 05A0","8116C5A6 0800","8116C5A8 FFFF","8116C5AA F3BC","D1064880 2000","8116C4E0 42E0","D1064880 2000","8116C4EA 07E0","D1064880 2000","8116C4F2 0680","D1064880 2000","8116C594 42E0","D1064880 2000","8116C59E 0820","D1064880 2000","8116C5A6 0980"],"options":null},"Tables\\MOVABLE TABLES\\Part 1":{"note":"You must use both parts for this cheat to work","data":["81052C24 06E1","81052C26 06E3","81052C2C 09F1","81052C2E 09EF","81052C30 06E2","81052C32 06E5","81052C38 09F1","81052C3A 09EF","81052C48 06E4","81052C4A 06E6","81052C50 09EF","81052C52 09EF","8116C3E4 0000","8116C3E6 0001","8116C3E8 0000","8116C3EA 0001","8116C498 0000","8116C49A 0003","8116C49C 0000","8116C49E 0003","8116C330 0000","8116C332 0000","8116C334 0000","8116C336 0000","D116C556 0000","8116C33A 0000","D116C33A 0000","8116C3EE 0000","D116C3EE 0000","8116C4A2 0000","D116C556 0001","8116C33A 0001","D116C33A 0001","8116C3EE 0001","D116C3EE 0001","8116C4A2 0001","D116C556 0002","8116C33A 0002","D116C33A 0002","8116C3EE 0002","D116C3EE 0002","8116C4A2 0002","D116C556 0003","8116C33A 0003","D116C33A 0003","8116C3EE 0003","D116C3EE 0003","8116C4A2 0003","D116C556 FFFF","8116C33A FFFF","D116C33A FFFF","8116C3EE FFFF","D116C3EE FFFF","8116C4A2 FFFF","D216C556 FFFF","81079B10 3F80","D1064886 2000","81079B10 3F81","D106488C 2000","81079B10 3F81","D1064892 2000","81079B10 3F81"],"options":null},"Tables\\MOVABLE TABLES\\Part 2":{"note":"You must use both parts for this cheat to work","data":["D116C33A FFFF","8116C382 0000","D116C382 0000","8116C386 0000","D116C386 0000","8116C38A 0000","D116C38A 0000","8116C38E 0000","D116C38E 0000","8116C436 0000","D116C436 0000","8116C43A 0000","D116C43A 0000","8116C43E 0000","D116C43E 0000","8116C442 0000","D116C442 0000","8116C4EA 0000","D116C4EA 0000","8116C4EE 0000","D116C4EE 0000","8116C4F2 0000","D116C4F2 0000","8116C4F6 0000","D116C594 42B4","D116C556 FFFF","8116C378 4335","D116C378 4335","8116C42C 4335","D116C42C 4335","8116C4E0 4335","D116C594 3DC7","D116C556 FFFF","8116C378 42B0","D116C378 42B0","8116C42C 42B0","D116C42C 42B0","8116C4E0 42B0","D1064880 2000","81079B10 3F81","D1079B10 3F81","D116C594 42B4","D116C556 FFFF","8116C378 42F0","D116C378 42F0","8116C42C 42F0","D116C42C 42F0","8116C4E0 42F0","D1079B10 3F81","8116C38A 0F00","D116C38A 0F00","8116C43E 0100","D116C594 3C93","8116C378 42B0","81052D18 0000","81052D1A 0000","D116C54C 0000","8116C54E 0018","D116C550 0000","8116C552 0018"],"options":null},"Tables\\Sabu Table":{"note":"Breakable/Fixable/Rebreakable/Refixable press Z to break, C-right + Cdown to fix","data":["8116C49A 000C","8116C49E 000C","8116C4DC 43CC","8116C4E0 42E6","8116C4E4 C2C5","8116C4EE 0800","8116C602 000C","8116C606 000C","8116C648 42E6","8116C644 43CC","8116C64C C314","81052C54 06E3","81052C5C 09EF","8116C6F8 43CC","8116C6FC 42F0","8116C700 C2F1","8116C70A 0400","8116C428 43CC","8116C430 C2D0","8116C42C 42F0","8116C43A 0C00","8116C6B6 0004","8116C6BA 0004","8116C3E6 0004","8116C3EA 0004","D1064880 2000","81005592 3F81","D1005592 3F81","8116C4EA 0F00","D1005592 3F81","8116C652 0100","D1005592 3F81","8116C4E0 4240","D1005592 3F81","8116C648 4240","D1064880 0005","81005CD4 3F83","D1005CD4 3F83","8116C4EA 0000","D1005CD4 3F83","8116C652 0000","D1005CD4 3F83","8116C4E0 42E6","D1005CD4 3F83","8116C648 42E6","D1005CD4 3F83","D1064880 2000","81005CD4 0000"],"options":null},"Ultimate Code\\Player 1":{"note":"","data":["D015A5D1 0015","8015AF5E 0064"],"options":null},"Ultimate Code\\Player 2":{"note":"","data":["D015A5D1 0015","8015B2B6 0064"],"options":null},"Ultimate Code\\Player 3":{"note":"","data":["D015A5D1 0015","8015B60E 0064"],"options":null},"Ultimate Code\\Player 4":{"note":"","data":["D015A5D1 0015","8015B964 0064"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B490 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B490 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B4A4 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B47C 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8106B4A4 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B47C 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B468 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 1\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8106B468 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B510 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B510 3DFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B564 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B53C 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B564 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B53C 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B528 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 2\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 2 Option, only use one option at a time","data":["8006B528 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B610 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B610 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B624 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5FC 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B624 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5FC 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5E8 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 3\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 3 Option, only use one option at a time","data":["8006B5E8 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Bulgy wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6D0 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Flat wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6D0 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Giant wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6E4 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Short wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6BC 3E80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Small wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 1 Option, only use one option at a time","data":["8006B6E4 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Tall wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6BC 3FFF"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Thin wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6A8 3D80"],"options":null},"Wrestler Size \u0026 Shape\\Player 4\\Wide wrestler":{"note":"Do not use this with anyother Size \u0026 Shape Player 4 Option, only use one option at a time","data":["8006B6A8 3FFF"],"options":null},"Z LADDER":{"note":"Press Z for the ladder to appear, sometimes there is an invisable ladder","data":["D1064880 2000","8116C768 0000","D1064880 2000","8116C76A 0019","D1064880 2000","8116C76C 0000","D1064880 2000","8116C76E 0019","D1064880 2000","8116C788 8104"],"options":null}},"6D9D1FE4-84D10BEA-C:4A":{"Freeze Timer":{"note":"","data":["810BCBD6 0BB8"],"options":null},"Goal Select Player 1":{"note":"","data":["810B637C 00??"],"options":{"10 Goals":"0A","20 Goals":"14","25 Goals":"19","50 Goals":"32","99 Goals":"63","No Goals":"00"}},"Infinite 99 Credits":{"note":"","data":["800B3961 0063"],"options":null},"Other Team Scores no Goals":{"note":"Disable to allow Other team to score","data":["810B6694 0000"],"options":null}},"6DFDCDC3-4DE701C8-C:45":{"Activate Cheat Menu":{"note":"","data":["80053F38 0001"],"options":null},"Away Team Goals":{"note":"","data":["8012BBBD 00??"],"options":{"Max Score":"FF","No Score":"00"}},"Home Team Goals":{"note":"","data":["8012BBBC 00??"],"options":{"Max Score":"FF","No Score":"00"}}},"70B0260E-6716D04C-C:4A":{"Always Shoot 3-Way":{"note":"","data":["800FD19A 0002"],"options":null},"Always Shoot 5-Way":{"note":"","data":["800FD198 0200"],"options":null},"Always Shoot Rapid Fire":{"note":"","data":["800FD19A 1000"],"options":null},"Have Rune Stones":{"note":"","data":["8104EFC6 1FFF"],"options":null},"Have Window Schards":{"note":"","data":["8104EFCA 000F"],"options":null},"Infinite\\Item On Pickup":{"note":"","data":["50010100 0000","810C5BF6 FFFF"],"options":null},"Infinite\\Keys On Pickup":{"note":"","data":["800C5C97 0006"],"options":null},"Infinite\\Max Health":{"note":"","data":["810C5C54 0000","810C5C56 270F","810C5C64 0000","810C5C66 270F"],"options":null},"Infinite\\Money":{"note":"","data":["810C5CF6 FFFF"],"options":null},"Infinite\\Special Weapons":{"note":"","data":["800C5FF7 0009","800C5D37 0009","800C5D67 0009","800C5DE7 0009","800C5EB7 0009"],"options":null},"Infinite\\Turbo":{"note":"","data":["800FD30F 0064"],"options":null},"Level 99":{"note":"","data":["810C5C44 0000","810C5C46 0063"],"options":null},"Max Armour":{"note":"","data":["810C5C34 0000","810C5C36 FFFF"],"options":null},"Max Magic":{"note":"","data":["810C5C24 0000","810C5C26 FFFF"],"options":null},"Max Speed":{"note":"","data":["810C5C14 0000","810C5C16 FFFF"],"options":null},"Max Strength":{"note":"","data":["810C5C04 0000","810C5C06 FFFF"],"options":null}},"7188F445-84410A68-C:4A":{"Can Skip End Credits":{"note":"","data":["8015627F 0001"],"options":null},"Endless Mode":{"note":"","data":["800854CD 0000"],"options":null},"Maximum Dance Gauge\\Player 1":{"note":"","data":["810854DC 03E8"],"options":null},"Maximum Dance Gauge\\Player 2":{"note":"","data":["81085514 03E8"],"options":null},"Maximum Song Score\\Player 1":{"note":"","data":["8108A260 3B9A","8108A262 C9FF"],"options":null},"Maximum Song Score\\Player 2":{"note":"","data":["8108A264 3B9A","8108A266 C9FF"],"options":null},"Maximum Total Score\\Player 1":{"note":"","data":["810854E0 3B9A","810854E2 C9FF"],"options":null},"Maximum Total Score\\Player 2":{"note":"","data":["81085518 3B9A","8101551A C9FF"],"options":null},"Results\\0 Boo Steps\\Player 1":{"note":"","data":["8108A22A 0000"],"options":null},"Results\\0 Boo Steps\\Player 2":{"note":"","data":["8108A242 0000"],"options":null},"Results\\0 Good Steps\\Player 1":{"note":"","data":["8108A226 0000"],"options":null},"Results\\0 Good Steps\\Player 2":{"note":"","data":["8108A23E 0000"],"options":null},"Results\\0 Miss Steps\\Player 1":{"note":"","data":["8108A22E 0000"],"options":null},"Results\\0 Miss Steps\\Player 2":{"note":"","data":["8108A246 0000"],"options":null},"Results\\999 Great Steps\\Player 1":{"note":"","data":["8108A222 03E7"],"options":null},"Results\\999 Great Steps\\Player 2":{"note":"","data":["8108A23A 03E7"],"options":null},"Results\\999 Perfect Steps\\Player 1":{"note":"","data":["8108A21E 03E7"],"options":null},"Results\\999 Perfect Steps\\Player 2":{"note":"","data":["8108A236 03E7"],"options":null},"Unlock All Puzzles":{"note":"","data":["50001902 0000","81156228 FFFF"],"options":null},"Unlock All Songs":{"note":"","data":["8015621D 00FF","8115621E FFFF"],"options":null}},"72611D7D-9919BDD2-C:58":{"Access All\\Cars":{"note":"","data":["8002CC07 000B"],"options":null},"Access All\\Difficulties":{"note":"","data":["8002CC0B 0004"],"options":null},"Access All\\Multiplayer Levels":{"note":"","data":["50000901 0000","8002CC10 0001"],"options":null},"Access All\\Tracks":{"note":"","data":["8002CC03 0006"],"options":null},"Access In-Game Cheats":{"note":"","data":["50001301 0000","8002CC18 0001"],"options":null},"Damage Select":{"note":"","data":["8002C9A3 00??"],"options":{"Double":"02","Half":"01","Normal":"00","Triple":"03"}},"Health Select":{"note":"","data":["8002C98F 00??"],"options":{"Bad Only":"02","Good Only":"01","Normal":"00","Off":"03"}},"Infinite Continues":{"note":"","data":["8002C867 0064"],"options":null},"Low Timer":{"note":"","data":["810259E4 3001"],"options":null},"Power-Up Select":{"note":"","data":["8002C98B 00??"],"options":{"?":"05","Health":"06","Invincible":"07","Mines":"01","Nitros":"04","Normal":"00","Off":"08","Rockets":"02","Stealer":"03"}},"Radar":{"note":"","data":["8002C99F 00??"],"options":{"Off":"01","On":"00"}},"Speed units\\Kph or Mph":{"note":"","data":["81025A78 ????"],"options":{"Kph":"0100","Mph":"0001"}},"View Mode Select?":{"note":"","data":["8002C99B 00??"],"options":{"Fisheye":"03","Flip":"02","Fog":"01","Normal":"00"}},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\01 Coventry Cove":{"note":"","data":["803653CB 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\02 Mount Mayhem":{"note":"","data":["80355DB3 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\03 Inferno Isle":{"note":"","data":["80366323 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\04 Sunset Sands":{"note":"","data":["80345A93 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\05 Metro Madness":{"note":"","data":["8035FF5B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\06 Wicked Woods":{"note":"","data":["80359043 0064"],"options":null}},"729B5E32-B728D980-C:45":{"Always Shoot 3-Way":{"note":"","data":["800FD19A 0002"],"options":null},"Always Shoot 5-Way":{"note":"","data":["800FD198 0200"],"options":null},"Always Shoot Rapid Fire":{"note":"","data":["800FD19A 1000"],"options":null},"Have Rune Stones":{"note":"","data":["8104EFC6 1FFF"],"options":null},"Have Window Schards":{"note":"","data":["8104EFCA 000F"],"options":null},"Infinite\\Item On Pickup":{"note":"","data":["50010100 0000","810C5BF6 FFFF"],"options":null},"Infinite\\Keys On Pickup":{"note":"","data":["800C5C97 0006"],"options":null},"Infinite\\Max Health":{"note":"","data":["810C5C54 0000","810C5C56 270F","810C5C64 0000","810C5C66 270F"],"options":null},"Infinite\\Money":{"note":"","data":["810C5CF6 FFFF"],"options":null},"Infinite\\Special Weapons":{"note":"","data":["800C5FF7 0009","800C5D37 0009","800C5D67 0009","800C5DE7 0009","800C5EB7 0009"],"options":null},"Infinite\\Turbo":{"note":"","data":["800FD30F 0064"],"options":null},"Level 99":{"note":"","data":["810C5C44 0000","810C5C46 0063"],"options":null},"Max Armour":{"note":"","data":["810C5C34 0000","810C5C36 FFFF"],"options":null},"Max Magic":{"note":"","data":["810C5C24 0000","810C5C26 FFFF"],"options":null},"Max Speed":{"note":"","data":["810C5C14 0000","810C5C16 FFFF"],"options":null},"Max Strength":{"note":"","data":["810C5C04 0000","810C5C06 FFFF"],"options":null}},"72F70398-6556A98B-C:45":{"Always 1st":{"note":"","data":["81118FEC 0001"],"options":null},"Enable In-Game cheat Menu \u0026 Cheats":{"note":"Here you can Activate the IN-Built Cheats Menu. At the Front Screen Just Press C-Button Right.This will open up All Tracks \u0026 Characters In Free Play \u0026 Time Attack. Also In A Race, Press The Start/Pause button to Access the In-Cheat-Menu Option.You can also choose how many Pod's Racers are in the Race \u0026 also how many Laps are in the Race in Free Play \u0026 Time Attack","data":["8009B7D7 0001","8109B7DA FFFF"],"options":null},"Have All Tracks Completed":{"note":"","data":["81113E6A FFFF","81113E6C 3FFF","81113E6E 3FFF","81113E70 3FFF","81113E72 00FF"],"options":null},"Infinite Truguts":{"note":"","data":["81113E7A FFFF","81113E78 7FFF"],"options":null},"No Damage":{"note":"If when Racing Your Pod Over heats \u0026 bursts into flames Press \"R\" \u0026 you will Repair the Damage.","data":["800A52D7 0001"],"options":null},"Unlock All Tracks \u0026 Characters":{"note":"When using Unlock All Tracks \u0026 Characters For can to pick \u0026 choose what ever you want to play As \u0026 where ;)","data":["80113E68 00FF","80113E69 00FF","80113E6A 00FF","80113E6B 00FF","81113E68 FFFF","81113E6A FFFF","80113E74 007D","81113E76 FFFF"],"options":null},"Widescreen":{"note":"Narrow Sprites Widths","data":["81085FC4 2405","81085FC6 01A2","81085FFE 3F25","81011F40 240F","81011F42 00F0","81011FDC 2484","81011FDE 0035","81011FE0 1000","8103D508 0802","8103D50A A0AC","810A82B0 4487","810A82B2 7000","810A82B4 3C1B","810A82B6 3F40","810A82B8 449B","810A82BA 0000","810A82BC 0000","810A82BE 0000","810A82C0 4600","810A82C2 7382","810A82C4 0005","810A82C6 0883","810A82C8 0005","810A82CA 2843","810A82CC 00A1","810A82CE 2821","810A82D0 0800","810A82D2 F544","810A82D4 24A5","810A82D6 0028","8100A726 41D5","8100A768 2405","8100A76A FFCB","8100A5D2 41D5","8100A614 2405","8100A616 FFCB","8100A79A 41D5","8100A7D8 2405","8100A7DA FFCB","8101A690 2405","8101A692 FFCB","8101A6A2 3F2A","81057EEC 2405","81057EEE FFCB","81057EFE 43D5"],"options":null}},"73036F3B-CE0D69E9-C:50":{"Choose A Costume\\Player 1":{"note":"","data":["8104A612 00??"],"options":{"First":"01","Normal":"00","Second":"02","Third":"03"}},"Choose A Costume\\Player 2":{"note":"","data":["8104A616 00??"],"options":{"First":"01","Normal":"00","Second":"02","Third":"03"}},"Enable Restart Match option":{"note":"","data":["800494BB 0002"],"options":null},"Infinite Run\\Player 1":{"note":"","data":["811050FC 0001","811050FE 0000"],"options":null},"Infinite Run\\Player 2":{"note":"","data":["811051B0 0001","811051B2 0000"],"options":null},"Infinite Time":{"note":"","data":["8110524A 0063"],"options":null},"Play As\\Player 1":{"note":"","data":["800FE3C3 00??"],"options":{"Fujin":"05","Goro":"0F","Jarek":"0C","Jax":"0D","Johnny Cage":"0E","Kai":"0B","Liu Kang":"03","Noob Saibot":"11","Quan Chi":"08","Raiden":"01","Reiko":"07","Reptile":"0A","Scorpion":"00","Shinnok":"06","Sonya":"02","Sub-Zero":"04","Tanya":"09"}},"Play As\\Player 2":{"note":"","data":["80126FBF 00??"],"options":{"Fujin":"05","Goro":"0F","Jarek":"0C","Jax":"0D","Johnny Cage":"0E","Kai":"0B","Liu Kang":"03","Noob Saibot":"11","Quan Chi":"08","Raiden":"01","Reiko":"07","Reptile":"0A","Scorpion":"00","Shinnok":"06","Sonya":"02","Sub-Zero":"04","Tanya":"09"}},"Unlimited Energy\\Player 1":{"note":"","data":["810FE208 0001","810FE20A 0000"],"options":null},"Unlimited Energy\\Player 2":{"note":"","data":["81127084 0001","81127086 0000"],"options":null}},"733FCCB1-444892F9-C:50":{"Access All Moves":{"note":"","data":["8037CD70 0001","8037CD71 007F","8037CD72 00FF","8037CD73 00FF"],"options":null},"Do Anywhere Option\\Take off anywhere":{"note":"Press A","data":["D0285734 0080","8037CBA1 0001"],"options":null},"Have\\All Jinjos":{"note":"","data":["8038695B 00FF"],"options":null},"Have\\Blubbers Gold":{"note":"","data":["80386973 00FF"],"options":null},"Have\\Chimpys Oranges":{"note":"","data":["80386977 00FF"],"options":null},"Have\\Eyries Caterpillars":{"note":"","data":["8038699B 00FF"],"options":null},"Have\\Nabnuts Acorns":{"note":"","data":["8038699F 00FF"],"options":null},"Have\\Present Option\\Blue":{"note":"","data":["80386993 00FF"],"options":null},"Have\\Present Option\\Green":{"note":"","data":["8038698F 00FF"],"options":null},"Have\\Present Option\\Red":{"note":"","data":["80386997 00FF"],"options":null},"Have\\Running Shoes":{"note":"","data":["8137CA88 5019"],"options":null},"Have\\Zero Time all Levels":{"note":"","data":["50000B04 0000","813869E4 3000"],"options":null},"Infinite\\255 Eggs":{"note":"","data":["80386947 00FF"],"options":null},"Infinite\\255 Gold Feathers":{"note":"","data":["80386953 00FF"],"options":null},"Infinite\\255 Jigsaws":{"note":"","data":["803869AB 00FF"],"options":null},"Infinite\\255 Notes":{"note":"","data":["80386943 00FF"],"options":null},"Infinite\\255 Red Feathers":{"note":"","data":["8038694F 00FF"],"options":null},"Infinite\\8 Skulls":{"note":"","data":["803869A7 0008"],"options":null},"Infinite\\Air":{"note":"","data":["8038696E 000B"],"options":null},"Infinite\\Health":{"note":"","data":["80386963 0008","80386965 0001"],"options":null},"Infinite\\Lives":{"note":"","data":["8038696B 0009"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0285735 0020","8137CE8C 43E0"],"options":null},"Yumblies Counter\\Banjo":{"note":"","data":["8038697B 00FF"],"options":null},"Yumblies Counter\\Mr Vile":{"note":"","data":["8038697C 00FF"],"options":null}},"7365D8F8-9ED9326F-C:4A":{"Decrease Fodder":{"note":"","data":["81180E44 03E7"],"options":null},"Decrease Material":{"note":"","data":["8118A580 03E7"],"options":null},"Max Money":{"note":"","data":["811FDD2C 000F","811FDD2E 423F"],"options":null}},"736657F6-3C88A702-C:4A":{"Decrease Fodder":{"note":"","data":["81180E44 03E7"],"options":null},"Decrease Material":{"note":"","data":["8118A580 03E7"],"options":null},"Max Money":{"note":"","data":["811FDD2E 423F","811FDD2E 423F"],"options":null}},"736AE6AF-4117E9C7-C:4A":{"Always 1st \u0026 final time 00:00.00":{"note":"All Levels","data":["50000301 0000","801CE6E9 0000"],"options":null},"Difficulty Select":{"note":"","data":["8007C000 00??"],"options":{"Amateur":"00","Intermediate":"01","Mirror Mode":"03","Professional":"02"}},"Frantic Finale\\Colorado\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191992 0063"],"options":null},"Frantic Finale\\Hawaii\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80192072 0063"],"options":null},"Frantic Finale\\Oregon\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018EA42 0063"],"options":null},"Frantic Finale\\Texas\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018F1E2 0063"],"options":null},"Freewayphobia\\Chicago\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80192042 0063"],"options":null},"Freewayphobia\\Dakota\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018D212 0063"],"options":null},"Freewayphobia\\New York\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018F512 0063"],"options":null},"Freewayphobia\\Seattle\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FDF2 0063"],"options":null},"Level Select":{"note":"","data":["801876B9 00??"],"options":{"Contest":"07","Frantic Finale":"04","Freewayphobia":"02","Motor Way Mania":"01","Options":"08","Practice":"06","Time Trial":"05","Traffic Troubles":"00","Vitory Vehicles":"03"}},"Motor Way Mania\\Alaska\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E482 0063"],"options":null},"Motor Way Mania\\Las Vegas\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80192B12 0063"],"options":null},"Motor Way Mania\\Los Angeles\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018DCF2 0063"],"options":null},"Motor Way Mania\\Philadelphia\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80193992 0063"],"options":null},"Play As":{"note":"","data":["800D3161 00??"],"options":{"Daisy Duck":"01","Dewey":"07","Donald Duck":"05","Goofy":"02","Huey":"06","Louie":"08","Lugwig Von Drake":"09","Mickey Mouse":"00","Minnie Mouse":"04","Pete":"03"}},"Traffic Troubles\\Grand Canyon\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80193252 0063"],"options":null},"Traffic Troubles\\Indianapolis\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E892 0063"],"options":null},"Traffic Troubles\\New Mexico\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FD52 0063"],"options":null},"Traffic Troubles\\San Fransisco\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191B62 0063"],"options":null},"Unlock Everything":{"note":"This will unlock all characters, tracks, mirror mode, all in-game cheats, postcards, pluto's collar and give you all Trophies for every track and difficulties. To have this cheat save to mempak, enable it and then go into the Options Menu and disable the cheat. Go to the Wide-Screen Settings and Change it to Wide-Screen [16.9] and then the B button to get back to Wide-Screen Settings, now go back into Wide-Screen [16.9] and change it back to Normal [4.3].and press the B button until you come back to the main Options Menu.Close the game and load it again to see everything saved to the Mempak and unlocked.","data":["800D3208 008F","800D3209 0094","800D320A 0003","800D320C 0001","800D320F 0080","50000502 0000","800D3210 0009","50000502 0000","800D3211 0024","800D321A 0015","800D321B 007F","800D321C 0001","800D321D 00FF","800D321E 0004","800D321F 0022"],"options":null},"Victory Vehicles\\Everglades\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FC22 0063"],"options":null},"Victory Vehicles\\Malibu\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801916B2 0063"],"options":null},"Victory Vehicles\\Washington DC\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80197662 0063"],"options":null},"Victory Vehicles\\Yellowstone\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018D4C2 0063"],"options":null}},"73A88E3D-3AC5C571-C:45":{"Arcade Mode\\Car Modifier":{"note":"","data":["802818B3 00??"],"options":{"Hyundai Coupe EVO 2":"08","Mitsubishi Lancer Evolution V":"00","Nissan Almera Kit Car":"03","Proton WIRA":"07","Seat Cordoba WRC":"04","Skoda Octavia":"05","Subaru Impreza WRC":"01","Toyota Corolla WRC":"02","VW Golf GTI MK IV":"06"}},"Championship Mode\\Australia\\Infinite Damage\\Front End":{"note":"","data":["80178FA0 003E"],"options":null},"Championship Mode\\Australia\\Infinite Damage\\Left Side":{"note":"","data":["80178FA4 0040"],"options":null},"Championship Mode\\Australia\\Infinite Damage\\Right Side":{"note":"","data":["80178FA8 0040"],"options":null},"Championship Mode\\Australia\\Infinite Damage\\Tires":{"note":"","data":["80178FAC 0040"],"options":null},"Championship Mode\\Australia\\Start On 3rd Lap":{"note":"","data":["D0178F6F 0001","80178F6F 0003"],"options":null},"Championship Mode\\Brazil\\Infinite Damage\\Front End":{"note":"","data":["801748E0 0040"],"options":null},"Championship Mode\\Brazil\\Infinite Damage\\Left Side":{"note":"","data":["801748E4 0040"],"options":null},"Championship Mode\\Brazil\\Infinite Damage\\Right Side":{"note":"","data":["801748E8 0040"],"options":null},"Championship Mode\\Brazil\\Infinite Damage\\Tires":{"note":"","data":["801748EC 0040"],"options":null},"Championship Mode\\Brazil\\Start On 3rd Lap":{"note":"","data":["D01748AF 0001","801748AF 0003"],"options":null},"Championship Mode\\Canada\\Infinite Damage\\Front End":{"note":"","data":["8017CFA0 0040"],"options":null},"Championship Mode\\Canada\\Infinite Damage\\Left Side":{"note":"","data":["8017CFA4 0040"],"options":null},"Championship Mode\\Canada\\Infinite Damage\\Right Side":{"note":"","data":["8017CFA8 0040"],"options":null},"Championship Mode\\Canada\\Infinite Damage\\Tires":{"note":"","data":["8017CFAC 0040"],"options":null},"Championship Mode\\Canada\\Start On 3rd Lap":{"note":"","data":["D017CF6F 0001","8017CF6F 0003"],"options":null},"Championship Mode\\France\\Infinite Damage\\Front End":{"note":"","data":["80172490 0040"],"options":null},"Championship Mode\\France\\Infinite Damage\\Left Side":{"note":"","data":["80172494 0040"],"options":null},"Championship Mode\\France\\Infinite Damage\\Right Side":{"note":"","data":["80172498 0040"],"options":null},"Championship Mode\\France\\Infinite Damage\\Tires":{"note":"","data":["8017249C 0040"],"options":null},"Championship Mode\\France\\Start On 3rd Lap":{"note":"","data":["D017245F 0001","8017245F 0003"],"options":null},"Championship Mode\\Germany\\Infinite Damage\\Front End":{"note":"","data":["8017DFA0 0040"],"options":null},"Championship Mode\\Germany\\Infinite Damage\\Left Side":{"note":"","data":["8017DFA4 0040"],"options":null},"Championship Mode\\Germany\\Infinite Damage\\Right Side":{"note":"","data":["8017DFA8 0040"],"options":null},"Championship Mode\\Germany\\Infinite Damage\\Tires":{"note":"","data":["8017DFAC 0040"],"options":null},"Championship Mode\\Germany\\Start On 3rd Lap":{"note":"","data":["D017DF6F 0001","8017DF6F 0003"],"options":null},"Championship Mode\\Great Britain\\Infinite Damage\\Front End":{"note":"","data":["801766C0 0040"],"options":null},"Championship Mode\\Great Britain\\Infinite Damage\\Left Side":{"note":"","data":["801766C4 0040"],"options":null},"Championship Mode\\Great Britain\\Infinite Damage\\Right Side":{"note":"","data":["801766C8 0040"],"options":null},"Championship Mode\\Great Britain\\Infinite Damage\\Tires":{"note":"","data":["801766CC 0040"],"options":null},"Championship Mode\\Great Britain\\Start On 3rd Lap":{"note":"","data":["D017668F 0001","8017668F 0003"],"options":null},"Championship Mode\\Have 255 Race Points":{"note":"","data":["80101D1A 00FF"],"options":null},"Championship Mode\\Italy\\Infinite Damage\\Front End":{"note":"","data":["8017E500 0040"],"options":null},"Championship Mode\\Italy\\Infinite Damage\\Left Side":{"note":"","data":["8017E504 0040"],"options":null},"Championship Mode\\Italy\\Infinite Damage\\Right Side":{"note":"","data":["8017E508 0040"],"options":null},"Championship Mode\\Italy\\Infinite Damage\\Tires":{"note":"","data":["8017E50C 0040"],"options":null},"Championship Mode\\Italy\\Start On 3rd Lap":{"note":"","data":["D017E4CF 0001","8017E4CF 0003"],"options":null},"Championship Mode\\Spain\\Infinite Damage\\Front End":{"note":"","data":["801870F0 0040"],"options":null},"Championship Mode\\Spain\\Infinite Damage\\Left Side":{"note":"","data":["801870F4 0040"],"options":null},"Championship Mode\\Spain\\Infinite Damage\\Right Side":{"note":"","data":["801870F8 0040"],"options":null},"Championship Mode\\Spain\\Infinite Damage\\Tires":{"note":"","data":["801870FC 0040"],"options":null},"Championship Mode\\Spain\\Start On 3rd Lap":{"note":"","data":["D01870BF 0001","801870BF 0003"],"options":null},"Championship Mode\\USA\\Infinite Damage\\Front End":{"note":"","data":["8017EFA0 0040"],"options":null},"Championship Mode\\USA\\Infinite Damage\\Left Side":{"note":"","data":["8017EFA4 0040"],"options":null},"Championship Mode\\USA\\Infinite Damage\\Right Side":{"note":"","data":["8017EFA8 0040"],"options":null},"Championship Mode\\USA\\Infinite Damage\\Tires":{"note":"","data":["8017EFAC 0040"],"options":null},"Championship Mode\\USA\\Start On 3rd Lap":{"note":"","data":["D017EF6F 0001","8017EF6F 0003"],"options":null},"Easy Courses\\Australia\\Always Low Lap Timer":{"note":"","data":["81178F90 0000","81178F92 0000"],"options":null},"Easy Courses\\Australia\\Have 1st":{"note":"","data":["80178F87 0000"],"options":null},"Easy Courses\\Great Britian\\Always Low Lap Timer":{"note":"","data":["811766B0 0000","811766B2 0000"],"options":null},"Easy Courses\\Great Britian\\Have 1st":{"note":"","data":["801766A7 0000"],"options":null},"Easy Courses\\Spain\\Always Low Lap Timer":{"note":"","data":["811870E0 0000","811870E2 0000"],"options":null},"Easy Courses\\Spain\\Have 1st":{"note":"","data":["801870D7 0000"],"options":null},"Expert Courses\\Canada\\Always Low Lap Timer":{"note":"","data":["8117CF90 0000","8117CF92 0000"],"options":null},"Expert Courses\\Canada\\Have 1st":{"note":"","data":["8017CF87 0000"],"options":null},"Expert Courses\\Germany\\Always Low Lap Timer":{"note":"","data":["8117DF90 0000","8117DF92 0000"],"options":null},"Expert Courses\\Germany\\Have 1st":{"note":"","data":["8017DF87 0000"],"options":null},"Expert Courses\\USA\\Always Low Lap Timer":{"note":"","data":["8117EF90 0000","8117EF92 0000"],"options":null},"Expert Courses\\USA\\Have 1st":{"note":"","data":["8017EF87 0000"],"options":null},"Infinite Time":{"note":"","data":["81104998 49F2"],"options":null},"Medium Courses\\Brazil\\Always Low Lap Timer":{"note":"","data":["811748D0 0000","811748D2 0000"],"options":null},"Medium Courses\\Brazil\\Have 1st":{"note":"","data":["801748C7 0000"],"options":null},"Medium Courses\\France\\Always Low Lap Timer":{"note":"","data":["81172480 0000","81172482 0000"],"options":null},"Medium Courses\\France\\Have 1st":{"note":"","data":["80172477 0000"],"options":null},"Medium Courses\\Italy\\Always Low Lap Timer":{"note":"","data":["8117E4D0 0000","8117E4D2 0000"],"options":null},"Medium Courses\\Italy\\Have 1st":{"note":"","data":["8017E4E7 0000"],"options":null}},"73ABB1FB-9CCA6093-C:45":{"Always 1st":{"note":"","data":["8022AD06 0001"],"options":null},"Class Select":{"note":"This code is useful because you can play Class AA without having to beat a level!","data":["8021E1A7 00??"],"options":{"1 Play":"04","2 Play":"05","3 Play":"06","4 Play":"07","Class AA":"03","Class B":"01","Class C":"00"}},"Super Speed":{"note":"This is Turbo fast,So to slow it down a little more keep the B button pressed down","data":["8122AEB8 4800"],"options":null}},"7433D9D7-2C4322D0-C:50":{"Have All\\Weapons and Infinite Max Ammo\\Level 01":{"note":"","data":["50000904 0000","802A46AB 0001","50000604 0000","812A46CE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 02":{"note":"","data":["50000904 0000","8028A47B 0001","50000604 0000","8128A49E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 03":{"note":"","data":["50000904 0000","8027223B 0001","50000604 0000","8127225E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 04":{"note":"","data":["50000904 0000","8026A70B 0001","50000604 0000","8126A72E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 05":{"note":"","data":["50000904 0000","8028812B 0001","50000604 0000","8128814E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 06":{"note":"","data":["50000904 0000","8027DA0B 0001","50000604 0000","8127DA2E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 07":{"note":"","data":["50000904 0000","802811CB 0001","50000604 0000","812811EE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 08":{"note":"","data":["50000904 0000","8027C45B 0001","50000604 0000","8127C47E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 09":{"note":"","data":["50000904 0000","80247C7B 0001","50000604 0000","81247C9E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 10":{"note":"","data":["50000904 0000","80276C4B 0001","50000604 0000","81276C6E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 11":{"note":"","data":["50000904 0000","80278AFB 0001","50000604 0000","81278B1E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 12":{"note":"","data":["50000904 0000","8028F69B 0001","50000604 0000","8128F6BE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 13":{"note":"","data":["50000904 0000","80278A4B 0001","50000604 0000","81278A6E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 14":{"note":"","data":["50000904 0000","802807DB 0001","50000604 0000","812807FE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 15":{"note":"","data":["50000904 0000","8027636B 0001","50000604 0000","8127638E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 16":{"note":"","data":["50000904 0000","8028B7FB 0001","50000604 0000","8128B81E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 17":{"note":"","data":["50000904 0000","8027278B 0001","50000604 0000","812727AE 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 18":{"note":"","data":["50000904 0000","8026594B 0001","50000604 0000","8126596E 03E7"],"options":null},"Have All\\Weapons and Infinite Max Ammo\\Level 19":{"note":"","data":["50000904 0000","8024A28B 0001","50000604 0000","8124A2AE 03E7"],"options":null},"Invincible":{"note":"","data":["8002E618 0000"],"options":null},"Status Bar Always On":{"note":"","data":["8008E4CF 0001"],"options":null}},"7435C9BB-39763CF4-C:4A":{"Sixty Frames":{"note":"","data":["80079D3B 0003"],"options":null},"Widescreen":{"note":"","data":["810660D6 3FE3","81066226 3FE3","8106628E 3FE3","81127C04 3FE3"],"options":null}},"74E87A70-6293AED4-C:50":{"Cheats Enabled Modifier":{"note":"","data":["8108F8F0 ????"],"options":{"Anyway (Race Circuits Backwards)":"0400","Big Wheels (Big Foot Cars)":"0040","Car Radio (Remote Control Cars)":"0100","Chopper (Top Down View)":"0200","Easy Money (You Get 1":"0008","Extra Resolution (Able To Change Resolution In Options Screen)":"0800","Fast Bucks (You Get 250":"0004","Skywalker (Hover Cars)":"0080","Smurfing (High Pitched Voices)":"0020","Trophies (Second And Third Championships Wins)":"0010"}},"Have\\Access All Trophies":{"note":"Also gives you all extra features in quick race \u0026 Trophy mode","data":["800BAA9B 0007","800BACAF 0007"],"options":null},"Have\\Always 1st":{"note":"","data":["800C1F81 0001","800C1F83 0001"],"options":null},"Have\\Easy Win":{"note":"Right After Start,Go, Quit Race, And you Have Won","data":["800BACAD 000A"],"options":null},"Have\\Infinite Supply Of Super Tires":{"note":"For All Cars","data":["5000220C 0000","810BAD58 0F0F","5000220C 0000","810BAD5A 0F0F"],"options":null},"Have\\Lots Of Seasons":{"note":"","data":["810BACAA 03E7"],"options":null},"Have\\Max Cash":{"note":"","data":["810BACA4 3AFF","810BACA6 F454"],"options":null},"Have\\Max Race Points":{"note":"","data":["800BACBE 00FF"],"options":null},"Have\\Max Upgrade":{"note":"For All Cars","data":["5000220C 0200","810BAD56 0270"],"options":null},"Race Options\\Laps To Race Select":{"note":"","data":["800A4649 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Race Options\\Race Direction Select":{"note":"","data":["800A4601 00??"],"options":{"Mirrored Normal":"02","Mirrored Reverse":"03","Normal":"00","Reverse":"01"}},"Race Options\\Track Select":{"note":"","data":["8008FA5D 00??"],"options":{"Area 51":"04","Chateau":"07","Docklands":"08","Lumber Mill":"03","Oilfields":"05","Rocket Base":"00","Ski Resort":"02","Temple":"01","Titus Park":"09","Tudor Village":"06"}},"Race Options\\View Select":{"note":"Select your View and then at start of Race press C-Up Button","data":["D00C2171 0000","800C2171 00??"],"options":{"Behind View":"01","Distant Behind View":"0B","Further Behind View":"02","Helicopter View":"FF","Inside Car":"00"}},"Special Category\\A Car [Mind Star 600]":{"note":"","data":["810BAE8E 3D70","810BAE90 0F0F","810BAE92 0F0F"],"options":null},"Special Category\\B Car [Vertige Stallion]":{"note":"","data":["810BAE16 2378","810BAE18 0F0F","810BAE1A 0F0F"],"options":null},"Special Category\\C Car [Mind Star 200R]":{"note":"","data":["810BAD86 0A78","810BAD88 0F0F","810BAD8A 0F0F"],"options":null}},"75A4E247-6008963D-C:45":{"Brandon Gang":{"note":"","data":["80125AB6 0001"],"options":null},"Cassandra Gang":{"note":"","data":["80125AB5 0001"],"options":null},"Edge Hits Everything":{"note":"","data":["80071AF0 0043"],"options":null},"Enable Models":{"note":"","data":["80125AB3 0001"],"options":null},"Infinite Tank Bucks":{"note":"","data":["80236A9F 0064"],"options":null},"Invulnerability":{"note":"","data":["80125AB0 0001"],"options":null},"Level Select":{"note":"","data":["80117F49 0001"],"options":null},"Mini-Tanks 1":{"note":"","data":["80125AB8 0001"],"options":null},"Mini-Tanks 2":{"note":"","data":["80125AB9 0001"],"options":null},"Mini-Tanks 3":{"note":"","data":["80125AB9 0001"],"options":null},"Mini-Tanks 4":{"note":"","data":["80125ABB 0001"],"options":null},"Mini-Tanks 5":{"note":"","data":["80125ABC 0001"],"options":null},"Rapid Fire":{"note":"","data":["8008E7F0 0001"],"options":null},"Secret Level":{"note":"","data":["80125AB2 0001"],"options":null},"Start With All Weapons":{"note":"","data":["80125AB1 0001"],"options":null}},"75B61647-7ADABF78-C:45":{"Max Score":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null},"Press L Button for Max Gauge\\Player 1":{"note":"","data":["D00B49D1 0020","811D2602 0098"],"options":null},"Press L Button for Max Gauge\\Player 2":{"note":"","data":["D00B49D7 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}}},"75FA0E14-C9B3D105-C:44":{"Earn Spirits Faster":{"note":"","data":["8007D66D 0000"],"options":null},"Have All Elements":{"note":"","data":["8107D65C 3232","8107D65E 3232"],"options":null},"Makes your HP 999-999":{"note":"","data":["8107D63C 03E7","8107D63E 03E7"],"options":null},"Makes your MP 999-999":{"note":"","data":["8107D640 03E7","8107D642 03E7"],"options":null},"No Random Battles":{"note":"","data":["8008E12C 0000","8008E12E 0000"],"options":null},"Set Agility to 999-999":{"note":"","data":["8107D644 03E7"],"options":null},"Set Defence to 999-999":{"note":"","data":["8107D646 03E7"],"options":null}},"769147F3-2033C10E-C:45":{"Always Have Equipped\\Player 1":{"note":"","data":["8039B144 00??","8039B147 00??","8039B149 0009"],"options":{"Boomerang":"04","Bullets":"07","Magnet":"01","Seeker":"05","Shield":"08","Stinger":"03","Stopper":"06","Turbo":"00"}},"Always Have Equipped\\Player 2":{"note":"","data":["8039B3E4 00??","8039B3E7 00??","8039B3E9 0009"],"options":{"Boomerang":"04","Bullets":"07","Magnet":"01","Seeker":"05","Shield":"08","Stinger":"03","Stopper":"06","Turbo":"00"}},"Always Have Equipped\\Player 3":{"note":"","data":["8039B684 00??","8039B687 00??","8039B689 0009"],"options":{"Boomerang":"04","Bullets":"07","Magnet":"01","Seeker":"05","Shield":"08","Stinger":"03","Stopper":"06","Turbo":"00"}},"Always Have Equipped\\Player 4":{"note":"","data":["8039B924 00??","8039B927 00??","8039B929 0009"],"options":{"Boomerang":"04","Bullets":"07","Magnet":"01","Seeker":"05","Shield":"08","Stinger":"03","Stopper":"06","Turbo":"00"}},"Game Speed":{"note":"","data":["802C9339 00??"],"options":{"Advanced":"02","Default":"01","Master":"03","Novice":"00"}},"Have All\\Cars":{"note":"","data":["50000402 0000","803DF94B 0001"],"options":null},"Have All\\Cups,Tracks \u0026 Challenges":{"note":"","data":["50000302 0000","802CB4A9 0001","50000402 0000","803DD109 0001"],"options":null},"Infinite Credits":{"note":"","data":["80388C1D 0009"],"options":null},"Max Score Points":{"note":"","data":["8139AFB6 03E7"],"options":null},"Sixty Frames (odd again)":{"note":"Too fast like the other one,tis' a shame.","data":["802ADD4B 0001","802ADD7B 0001"],"options":null}},"776646F6-06B9AC2B-C:50":{"Boost From Start":{"note":"","data":["D02C4DA0 003F","802C4925 0050"],"options":null},"Infinite Lives":{"note":"","data":["800D8729 0005"],"options":null},"Infinite Shield":{"note":"","data":["812C4B48 4326","812C4B4C 4326"],"options":null},"Time Always 00.00.00/1st Place":{"note":"","data":["812C4BC0 0000","812C4BC2 0001"],"options":null},"Unlock Everything":{"note":"","data":["810C01E8 0100"],"options":null}},"782A9075-E552631D-C:44":{"Have 99 coins":{"note":"","data":["810BBBDE 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C8542 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BBBCC 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BBBD6 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BBBDA 0009"],"options":null}},"7928FE93-135A30CB-C:45":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118D8C0 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118D8C2 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118D8C4 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118D8C6 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["50000401 0000","8018ED10 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\1-2 player Mode\\Player 1":{"note":"","data":["80165F5D 00??","80165F8A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\1-2 player Mode\\Player 2":{"note":"","data":["8016603D 00??","8016606A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["8016611D 00??","8016614A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["801661FD 00??","8016622A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["801662DD 00??","8016630A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["801663BD 00??","801663EA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818EDEF 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F6915 0020","810F69C8 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F6925 0020","810F77A0 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F6935 0020","810F8578 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F6945 0020","810F9350 4000"],"options":null}},"7A65FDEC-50296300-C:45":{"All 64 Characters In Multi Player":{"note":"","data":["8002B197 0040"],"options":null},"All Objectives Complete":{"note":"","data":["80036FD3 0001"],"options":null},"Always Have\\00:00 Time (All Levels)":{"note":"","data":["8004837E 0000","8004838E 0000","80048396 0000","80079A22 0000","80079F26 0000"],"options":null},"Bulletproof Bond":{"note":"","data":["8002CE44 0030"],"options":null},"Cradle in multiplayer":{"note":"Puts the cradle graphic in the levels screen where the facility normally is in the multiplayer levels screen.Warning it doesn't allow you to enter the multiplayer levels screen,it should automatically Have\\selected cradle, which cannot be changed from the multiplayer menus","data":["8002B11D 0092","8002B11F 0093","8002B127 0029","8002B123 0008","802ADC8D 0052","802ADC8E 0041","802ADC8F 0044","802ADC90 004C","802ADC91 0045"],"options":null},"Custom Weapon Grouping":{"note":"golden gun fun should replace slappers only! appears in the multi weapons.","data":["80048673 0013","81048678 3FC0","80048677 00D0","8004867F 000D","80048683 000A","8004868B 0013","81048690 3FC0","8004868F 00D0","80048697 000D","8004869B 000A","800486A3 0019","810486A8 3FC0","800486A7 00D3","800486AF 0006","800486B3 0003","800486BB 0019","810486C0 3FC0","800486BF 00D3","800486C7 0006","800486CB 0003","800486D3 0013","810486D8 3FC0","800486D7 00D0","800486DF 000D","800486E3 000A","800486EB 0013","810486F0 3FC0","800486EF 00D0","800486F7 000D","800486FB 000A","80048703 0019","81048708 3FC0","80048707 00D3","8004870F 0006","80048713 0003","8004871B 0019","81048720 3FC0","8004871F 00D3","80048727 0006","8004872B 0003","812AEA50 476F","812AEA52 6C64","812AEA54 656E","812AEA56 2047","812AEA58 756E","812AEA5A 2046","812AEA5C 756E","802AEA5E 0000"],"options":null},"Enable All Levels":{"note":"","data":["80036FB7 0001"],"options":null},"Enable All Levels \u0026 In-Built Cheat Menu":{"note":"","data":["8006992E FFFF","80069930 FFFF","80069967 FFFF","8006996C FFFF","80069971 FFFF","80069976 FFFF","8006997B FFFF","8006992F FFFF","80069965 FFFF","8006996A FFFF","8006996F FFFF","80069974 FFFF","80069979 FFFF"],"options":null},"Facility Back Zone In Multiplayer\\Part 1\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811E6554 45E4","811E6558 43D5","811E655C C5A7","811E657C 801C","811E657E 6774","811E5164 45E4","811E5168 C383","811E516C 4492","811E518C 801C","811E518E D574","811E78C0 45AD","811E78C4 C383","811E78C8 4440","811E78E8 801C","811E78EA E464","811E4D18 45D0","811E4D1C 4307","811E4D20 C4FB","811E4D40 801C","811E4D42 75EC","811E6738 45CD","811E673C C383","811E6740 43F4","811E6760 801C","811E6762 A0DC","811E5450 45C2","811E5454 4356","811E5458 C598","811E5478 801C","811E547A 6A74","811E5240 4608","811E5244 4307","811E5248 43DC","811E5268 801C","811E526A 962C","811E691C 4606","811E6920 4321","811E6924 449D","811E6944 801C","811E6946 CBEC","801ED447 008A","801ED4DB 008B","801ED56F 008C","801ED603 008D","801ED697 008E","801ED72B 008F","801ED7BF 007D","801ED853 007E","801ED443 002A","801ED4D7 002A","801ED56B 002A","801ED5FF 002A","801ED693 002A","801ED727 002A","801ED7BB 002A","801ED84F 002A","801ED449 0000","801ED4DD 0000","801ED571 0000","801ED605 0000","801ED699 0000","801ED72D 0000","801ED7C1 0000","801ED855 0000","801ED44D 0000","801ED4E1 0000","801ED575 0000","801ED609 0000","801ED69D 0000","801ED731 0000","801ED7C5 0000","801ED859 0000","801EB743 002A","801EB745 0068","811EB746 277F","811EB748 1000","811EB74A 0262","811EB7C2 0190","801EB7C5 0000","811EB7C6 0258"],"options":null},"Facility Back Zone In Multiplayer\\Part 2\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811EB7C8 0000","811EB7CC FFFF","811EB7CE FFFF","811EB7D2 0000","801EB7D5 0000","801EB7DB 0000","811EB7E2 0000","801EB7E7 0000","801EB843 002A","801EB845 0068","811EB846 2780","811EB848 1000","811EB84A 0262","811EB8C2 0190","801EB8C5 0000","811EB8C6 0258","811EB8C8 0000","811EB8CC FFFF","811EB8CE FFFF","811EB8D2 0000","801EB8D5 0000","801EB8DB 0000","811EB8E2 0000","801EB8E7 0000","801EB943 002A","801EB945 0068","811EB946 2791","811EB948 1000","811EB94A 0262","811EB9C2 0190","801EB9C5 0000","811EB9C6 0258","811EB9C8 0000","811EB9CC FFFF","811EB9CE FFFF","811EB9D2 0000","801EB9D5 0000","801EB9DB 0000","811EB9E2 0000","801EB9E7 0000","801EBA43 002A","801EBA45 0068","811EBA46 2792","811EBA48 1000","811EBA4A 0262","811EBAC2 0190","801EBAC5 0000","811EBAC6 0258","811EBAC8 0000","811EBACC FFFF","811EBACE FFFF","811EBAD2 0000","801EBAD5 0000","801EBADB 0000","811EBAE2 0000","801EBAE7 0000","801EBB45 00A0","801EBC45 00A0","801EBD45 00A0","801EBE45 00A0","801EBB47 0075","801EBC47 0076","801EBD47 0077","801EBE47 0078","801EBBE7 0001","801EBCE7 0001","801EBDE7 0001","801EBEE7 0001","801EC247 0071","801ECD47 0072","801ECE47 0074","801ECF47 006C","801ED047 0079","801ED147 0083","D01EBFC5 005A","801EBFC5 0000","D11EBFC6 0000","811EBFC6 F333","D11EBFC8 03E8","811EBFC8 0000"],"options":null},"Facility Back Zone In Multiplayer\\Part 3\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["D11EBFCA 0000","811EBFCA F0C4","D11EBFCE 4CCC","811EBFCE 000A","D11EBFD2 4CCC","811EBFD2 000A","D11EBFD4 0003","811EBFD4 0000","D11EBFD6 0000","811EBFD6 02C4","801EBFD9 0004","801EBFDB 0000","811EBFE2 0384","801EBFE7 0004","801EBF45 009E","801EBF47 0084","801EBF48 0010","801EC2D9 0000","801EC447 0085","801EC547 0086","811EA6B6 2743","811EA73E 0114","811EA7F2 0115","811EA8A6 00A3","811EA92E 009D","811EA9E2 00A4","811EAA96 00DA","811EAB1E 00DB","811EABD2 00DF","811EAC86 0130","811EAD0E 008D","811EADC2 012E","811EAE76 0111","811EAEFE 2740","811EAFB2 2741","811EB066 00A0","811EB0EE 009E","811EB1A2 009F","811EB256 274F","811EB2DE 2750","811EB392 0117","811EB446 0131","811EB4CE 008E","811EB582 0132","811EB636 00A1","811EB6BE 0119","811EA62E 00FA","801ED3DF 0000","801ED2DF 0001","D0024337 0007","80024337 001F"],"options":null},"Gain Access\\To Aztec Level Without Beating Secret Agent Or 00 Agent":{"note":"","data":["8002A8FB 001A"],"options":null},"Gain Access\\To Egyptian Level Without Beating Secret Agent Or 00 Agent":{"note":"","data":["8002A8FB 001C"],"options":null},"Infinite Ammo (All Levels)":{"note":"","data":["80079E3B 0001"],"options":null},"Infinite Health Player 1 (all levels)":{"note":"","data":["8100C0F4 0801","8100C0F6 8090","8100C0F8 AFA4","8100C0FA 0000","81060240 0004","81060242 7600","81060244 3C02","81060246 8008","81060248 8C42","8106024A 9EE0","8106024C 3401","8106024E 3F80","81060250 A441","81060252 00DC","81060254 0800","81060256 303F"],"options":null},"Replace Cradle with Citadell hidden level":{"note":"","data":["8002A8F7 0029","8104468A 8970","81044690 3F44","81044692 BDEA","81044694 3F80","81044696 0000","81044698 4219","8104469A D89D","80069F80 00C4"],"options":null},"Secret Island on Dam Level":{"note":"For the above code to work,Get to the 2nd guard tower \u0026 go down the ladder on the left hand side \u0026 to the end of the Dock, Press L \u0026 GS and you will be transfered in the water. Just keep walking straight \u0026 you will get to it. Obviously you can't actually climb ladders or anything, you will simply walkthrough anything on that Part, if you want to walk back to the Dock, when you come near it click the cheat back on \u0026 keep pressing L \u0026 GS untill you are back on it.","data":["D0064F31 0020","800D33ED 0050","880D33ED 0000"],"options":null},"Walk through doors, objects":{"note":"","data":["800364CB 00??"],"options":{"Off":"01","On":"00"}},"Weak Enemies":{"note":"","data":["8002CE48 0048"],"options":null}},"7AA65B36-FDCEE5AD-C:4A":{"Always Have\\BFG 9000":{"note":"","data":["80063B4B 0001"],"options":null},"Always Have\\Bio Suite":{"note":"","data":["80063AF3 00??"],"options":{"Off":"00","On":"FF"}},"Always Have\\Chain Gun":{"note":"","data":["80063B3F 0001"],"options":null},"Always Have\\Chainsaw":{"note":"","data":["80063B2B 0001"],"options":null},"Always Have\\Double Shotgun":{"note":"","data":["80063B3B 0001"],"options":null},"Always Have\\Gun":{"note":"","data":["80063B33 0001"],"options":null},"Always Have\\Have Rocket Launcher":{"note":"","data":["80063B41 0001"],"options":null},"Always Have\\Laser Weapon":{"note":"","data":["80063B4D 0001"],"options":null},"Always Have\\Missile Launcher":{"note":"","data":["80063B43 0001"],"options":null},"Always Have\\Plasma Rifle":{"note":"","data":["80063B47 0001"],"options":null},"Always Have\\Rapid Fire":{"note":"","data":["81063BAA 0B94"],"options":null},"Always Have\\Shotgun":{"note":"","data":["80063B37 0001"],"options":null},"Berserk Mode":{"note":"","data":["80063AEB 00FF"],"options":null},"Enable Cheat Menu":{"note":"","data":["8005B043 0001"],"options":null},"Have All\\Keys":{"note":"","data":["50000504 0000","81063AFE FFFF"],"options":null},"Have All\\Weapons":{"note":"","data":["50000A04 0000","81063B2A 0001"],"options":null},"Infinite\\Ammo All Weapons":{"note":"","data":["50000404 0000","81063B52 013C"],"options":null},"Infinite\\Armor":{"note":"","data":["80063ADF 00FF"],"options":null},"Invincible":{"note":"","data":["80063B7B 0002"],"options":null},"Invincible And Map Markers":{"note":"","data":["80063B7B 0006"],"options":null},"Turn Map Markers On":{"note":"","data":["80063B7B 0004"],"options":null},"[Max Brightness]":{"note":"Enable this cheat on rom load to have Max Brightness (internal) and then put Jabo d3d8 on 160% Max for a extra brightness Boost.","data":["8005B598 0064"],"options":null}},"7BB18D40-83138559-C:55":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2CD2 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE51F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80382CB7 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","80202BB5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","801DE715 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","801FD085 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","801F042D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","80202CE5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00488A1 0020","801DA57D 0001"],"options":null}},"7C3829D9-6E8247CE-C:45":{"Lower Left Character\\Coin Options":{"note":"","data":["810D1182 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDC6D 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800D1186 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["810D11BA 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDCB9 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800D11BE 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["810D1112 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDBD5 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800D1116 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["810D114A 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDC21 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800D114E 00??"],"options":{"0 Stars":"00","99 Stars":"64"}}},"7C647C25-D9D901E6-C:45":{"Ballista Can Drive Through Anything":{"note":"","data":["803F8A68 0001"],"options":null},"Found All\\RDUS":{"note":"","data":["8036E9CC C350"],"options":null},"Found All\\Scientists":{"note":"","data":["80364AD0 003F"],"options":null},"Found All\\Survivors":{"note":"","data":["8036E9C9 00FF"],"options":null},"Infinite Time":{"note":"","data":["D0315610 0000","81315610 0000","D0315612 0001","81315612 0000"],"options":null},"Infinite\\Boosts Buggy Vehicle":{"note":"","data":["803EE301 0064"],"options":null},"Infinite\\Hydraulics Sidesweeper":{"note":"","data":["803EDB51 0063"],"options":null},"Infinite\\Missiles Motor Bike":{"note":"","data":["803F8AC3 0063"],"options":null}},"7C647E65-1948D305-C:45":{"Ballista Can Drive Through Anything":{"note":"","data":["803F8B17 0001"],"options":null},"Found All\\RDUS":{"note":"","data":["8036EA7C C350"],"options":null},"Found All\\Scientists":{"note":"","data":["80364B80 003F"],"options":null},"Found All\\Survivors":{"note":"","data":["8036EA70 00FF"],"options":null},"Infinite Time":{"note":"","data":["D03156C0 0000","813156C0 0000","D03156C2 0001","813156C2 0000"],"options":null},"Infinite\\Boosts Buggy Vehicle":{"note":"","data":["803EE3B0 0064"],"options":null},"Infinite\\Hydraulics Sidesweeper":{"note":"","data":["803EDC00 0063"],"options":null},"Infinite\\Missiles Motor Bike":{"note":"","data":["803F8B72 0063"],"options":null}},"7C64E6DB-55B924DB-C:50":{"Ballista Can Drive Through Anything":{"note":"","data":["803F8A68 0001"],"options":null},"Found All RDUS":{"note":"","data":["8036E9CC C350"],"options":null},"Found All Scientists":{"note":"","data":["80364AD0 003F"],"options":null},"Found All Survivors":{"note":"","data":["8036E9C9 00FF"],"options":null},"Infinite Boosts Buggy Vehicle":{"note":"","data":["803EE301 0064"],"options":null},"Infinite Hydraulics Sidesweeper":{"note":"","data":["803EDB51 0063"],"options":null},"Infinite Missiles Motor Bike":{"note":"","data":["803F8AC3 0063"],"options":null}},"7CD08B12-1153FF89-C:45":{"Can Walk When The Game Is Paused":{"note":"","data":["810AB9B6 0001"],"options":null},"Have All\\Keys":{"note":"This will give you the Grey \u0026 Red,Green \u0026 Gold Keys","data":["800BD0B8 00FF","800BD0BE 00FF","800BD0BD 00FF"],"options":null},"Have All\\Music Notes":{"note":"This will give you all 10 Music Notes","data":["50000A01 0000","800BD1F0 0001"],"options":null},"Infinite\\Health":{"note":"","data":["800BD0F7 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["800BD0E3 0009"],"options":null},"Max Money":{"note":"","data":["810BD0E6 03E7"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D017DBC5 0020","810DAFD8 44CB"],"options":null}},"7DE11F53-74872F9D-C:45":{"99 Points":{"note":"","data":["801CB0A3 0063"],"options":null},"Always First Place":{"note":"","data":["801C269F 0000"],"options":null},"Infinite Course Out Time":{"note":"","data":["801C2983 00FF"],"options":null},"Infinite Time Stunt Mode":{"note":"","data":["801C295E 00FF"],"options":null},"Maximum Power\\Player 1":{"note":"","data":["801C27C7 0005"],"options":null},"Maximum Power\\Player 2":{"note":"","data":["801C2DEA 0005","801C308A 0005"],"options":null},"Misses Don't Count":{"note":"","data":["801C27CF 0000"],"options":null},"Only Play Glacier Coast":{"note":"","data":["800DA753 0007"],"options":null},"Open\\Course Option":{"note":"This works in all modes except for Championship Mode.","data":["801CAFEB 00??"],"options":{"Dolphin Park":"00","Drake Lake":"03","Glacier Coast":"07","Marian Fortress":"04","Port Blue":"05","Southern Island":"08","Sunny Beach":"01","Sunset Bay":"02","Twilight City":"06"}},"Open\\Difficulty Option":{"note":"","data":["801CAFE0 00??"],"options":{"Dolphin":"10","Dolphin \u0026 Expert":"12","Dolphin \u0026 Hard":"11","Dolphin Hard \u0026 Expert":"13","Expert":"02","Hard":"01","Hard \u0026 Expert":"03"}},"Open\\Level Option":{"note":"","data":["800DA753 00??"],"options":{"Above \u0026 Drake Lake":"03","All Above \u0026 Glacier Coast":"16","All Above \u0026 Marine Fortress":"04","All Above \u0026 Port Blue":"05","All Above \u0026 Southern Island":"06","All Above \u0026 Twilight City":"0D","Sunset Bay":"02"}},"Super Speed":{"note":"","data":["801C27C7 0005","D0154051 0010","801C27C7 0020"],"options":null},"Widescreen":{"note":"","data":["810699FA 3FE3","811E11F2 3FE3","811EF3F2 3FE3","811F07E6 3FE3","D12C58C2 4204","812C58C6 3FAA","D12C5896 8C50","812C5890 3C07","D12C5896 8C50","812C5892 3FAA"],"options":null}},"7EAE2488-9D40A35A-C:4A":{"Have All Guns In Chest":{"note":"","data":["50000E04 0100","810E5474 05FF"],"options":null},"Have All Main Items In Chest":{"note":"If you want items that are not listed in the Chest, then just use the Have Item On Slot Select code to have what you desire.","data":["810E54AC 17FF","810E54B0 1EFF","810E54B4 1FFF","810E54B8 23FF","50000404 0100","810E54BC 25FF","810E54CC 2AFF","810E54D0 2BFF","50000304 0100","810E54D4 2EFF","50000F04 0100","810E54E0 32FF","810E551C 43FF","50000504 0100","810E5520 47FF","50000404 0100","810E5534 53FF","50000C04 0100","810E5544 58FF"],"options":null},"Have\\Fine Condition Always":{"note":"","data":["810DD964 0000"],"options":null},"Have\\Item On Slot Select\\Slot 01":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5448 00??","800E5449 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 02":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E544C 00??","800E544D 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 03":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5450 00??","800E5451 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 04":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5454 00??","800E5455 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 05":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5458 00??","800E5459 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 06":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E545C 5D??","800E545D 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 07":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5460 00??","800E5461 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 08":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5464 00??","800E5465 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 09":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E5468 00??","800E5469 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 10":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E546C 00??","800E546D 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Infinite\\Health":{"note":"","data":["810DD8A2 00C8"],"options":null},"Infinite\\Time":{"note":"","data":["800E8CBF 0010"],"options":null},"Play As":{"note":"This allows you to select what character you wish to play as. Just slect on load and select as normal at the menu and when in game you will be the character of your choice","data":["810DD6B8 ????"],"options":{"Ada (can crash the game)":"0E80","Cheryl":"0F80","Claire Original":"0380","Claire as Biker":"0980","Claire without jacket":"0780","Claires body Leons outfit":"0B80","Hunk (can crash the game)":"0C80","Leon Original":"0280","Leon Wounded":"0680","Leon as Biker":"0A80","Leon as Stars":"0880","To Fu":"0D80"}},"Play Extra Mission":{"note":"This allows you to select what extra mission you wish to play. Just slect on load and carry on as normal at the menu and when in game you will be the character of your choice Do not use at the same time as [Resident Evil 2 Mode]","data":["810DD66E 00??"],"options":{"The 4th Survior":"48","To-Fu":"49"}},"Quick Chest Access":{"note":"With this code, all you Have\\to do to access the chest, is hold L and C-Down","data":["D10DBE8C 0005","810E4EA8 8007","D10DBE8C 0005","810E4EAA 0814"],"options":null},"Quick Save Access":{"note":"(1 Anytime, anywhere, press Z and C-Down at the same time. You'll get the standard typewriter text: \"It's an old typewriter. You can save your progress with this.\" Note that you must, of course, Have\\an ink ribbon to save. 2) Choose \"Yes\" and you'll be able to save normally. Instead of the location name, your save file will say \"Scenario 1st\" or \"Scenario 2nd.\" 3) When you load your save file, you'll Have\\to skip through the intro, but when the game loads up you'll be exactly where you saved!","data":["D10DBE8C 0044","810E4EA8 8007","D10DBE8C 0044","810E4EAA 06B0"],"options":null},"[Resident Evil 2 Mode]":{"note":"Note: With this enabled the game will become Resident Evil 2, the English version of Biohazard 2! This means all text (except the text in files) is in Japanese, and all cinemas Have\\English subtitles. Note that the title screen will still say Biohazard 2 Do not use at the same time as Play Extra Mission","data":["810DD66E 00??"],"options":{"Off":"00","On":"40"}},"[Saves Always 0]":{"note":"No matter how many saves you do ithis makes the game think you Have\\not saved.","data":["800E50D1 0000"],"options":null}},"7ECBE939-3C331795-C:45":{"Have all Cheats":{"note":"Go into the Cheats From the main Menu \u0026 put on the Ones you want","data":["810CD226 01FF"],"options":null}},"7ED67CD4-B4415E6D-C:50":{"Access Demitron Character":{"note":"","data":["80049AA4 0001"],"options":null},"Access Sonork Character":{"note":"","data":["80049AA0 0001"],"options":null},"Infinite Health\\All Levels\\Player 1":{"note":"","data":["812716E0 0190","8127BDB8 0190","8127E478 0190","81292EE8 0190","81293768 0190","81297538 0190","812ACCC8 0190","812B1CE8 0190","812B7BE8 0190","8138AEE0 0190"],"options":null},"Infinite Health\\All Levels\\Player 2":{"note":"","data":["81271FB8 0190","8127B158 0190","8127E820 0190","81293B48 0190","81294390 0190","812980B8 0190","812AD608 0190","812B2D08 0190","812B67D8 0190","8138A898 0190"],"options":null},"Music Modifier":{"note":"","data":["80081812 00??"],"options":{"Music Off":"00","Volume Low":"2A","Volume Max":"7F","Volume Medium":"55"}},"Press GS For 2 Rounds Won\\Player 1":{"note":"","data":["880B6491 0002"],"options":null},"Press GS For 2 Rounds Won\\Player 2":{"note":"","data":["880B64A3 0002"],"options":null}},"7EE0E8BB-49E411AA-C:50":{"Access AT-ST Level":{"note":"","data":["81130B38 1250"],"options":null},"Access\\69 Buick Electra":{"note":"Replaces The V-Wing","data":["81130B3A 000E"],"options":null},"Accesses\\All Levels,Ships \u0026 Advanced Weapons":{"note":"","data":["80130B3B 00FF"],"options":null},"Accuracy 100%":{"note":"","data":["80130B5F 0063"],"options":null},"Always Pass Mission":{"note":"","data":["80130AF4 0001"],"options":null},"Bonus Collected 756":{"note":"","data":["80130B67 03E7"],"options":null},"Completion Time 0:00":{"note":"","data":["80130B85 3FCB"],"options":null},"Enemies Destroyed 756":{"note":"","data":["81130B64 03E7"],"options":null},"Friendly Saves 756":{"note":"","data":["80130B66 03E7"],"options":null},"Infinite Lives":{"note":"This Also accesses advanced Shields \u0026 Radar","data":["81130B38 01C0"],"options":null},"Infinite Secondary Weapon":{"note":"","data":["8010CA02 0063","80130B23 00??"],"options":{"Bombs":"04","Cluster Missiles":"07","Ion Cannon":"01","Missiles":"02","Proton Bombs":"05","Seeker Cluster Missiles":"09","Seeker Missiles":"03","Seeker Torpedos":"08"}},"Invincibility":{"note":"This Also Accesses All Levels And Makes All Crafts Available","data":["80130B2D 00FF"],"options":null}},"7F3CEB77-8981030A-C:45":{"Infinite Dinars":{"note":"","data":["800B6043 00E8","800B6042 00E8"],"options":null},"Infinite Health":{"note":"","data":["810CF93E 03E7","810CF942 03E7"],"options":null},"Infinite Magic":{"note":"","data":["810B65CA 0063","810B65B2 0063","810B65E2 0063","810B65FA 0063"],"options":null},"Press L for 1 Hit Kill Punch":{"note":"Press The L Button \u0026 Hold B \u0026 Then Let Go to Kill Enimies,Rocks,Tents etc with One Punch.","data":["D0103383 0020","800D9BCE 0000"],"options":null},"Press L to Levitate":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D017D2D5 0020","810CF994 44CB"],"options":null}},"7F43E701-536328D1-C:50":{"Always Place 1st":{"note":"","data":["8031EC0F 0000"],"options":null},"Extra Cars \u0026 Tracks":{"note":"","data":["8032690F 00FF","8032690C 00FF","8032690D 00FF"],"options":null},"Have 1-6 Level Points":{"note":"","data":["8032685F 0064","80326861 0064","80326863 0064","80326865 0064","80326867 0064","80326869 0064"],"options":null},"Only Race 1 Lap Championship Mode":{"note":"","data":["8031EBDB 0002"],"options":null}},"7F9345D3-841ECADE-C:50":{"Always Have\\Most Powerful Weapon":{"note":"","data":["80088ED9 0003"],"options":null},"Fifty Frames":{"note":"Too fast,needs pacing code.","data":["80088E34 0001"],"options":null},"Fifty Frames (ASM)":{"note":"Still too fast.","data":["810012C4 240B","810012C6 0001"],"options":null},"Play As\\Player 1":{"note":"","data":["80088E02 00??"],"options":{"Ebisumaru":"01","Goemon":"00","Sasuke":"02","Yae":"03"}},"Unlimited Gate Opener Things":{"note":"","data":["80088EC6 0099"],"options":null},"Unlimited Health\\Player 1":{"note":"","data":["80088ED4 0004"],"options":null},"Unlimited Shield\\Player 1":{"note":"","data":["80088ED5 0004","8015D3C4 0001"],"options":null}},"8066D58A-C3DECAC1-C:45":{"Always On First Shot":{"note":"","data":["811DA47A 0001"],"options":null},"Club Type\\Irons Mods":{"note":"","data":["8012A473 00??"],"options":{"Cavity":"00","Conventional":"01"}},"Club Type\\Sand Wedge Mods":{"note":"","data":["8012A474 00??"],"options":{"58 Degrees":"00","60 Degrees":"01","62 Degrees":"02"}},"Club Type\\Woods Mods":{"note":"","data":["8012A472 00??"],"options":{"Metal Wood":"01","Persimmon":"02","Titan":"00"}},"Max Power":{"note":"","data":["8012A431 FFFF"],"options":null},"Max Putt":{"note":"","data":["8012A435 FFFF"],"options":null},"Max Recover":{"note":"","data":["8012A437 FFFF"],"options":null},"Max Technique":{"note":"","data":["8012A433 FFFF"],"options":null},"Select Club":{"note":"","data":["801DA496 00??"],"options":{"1I":"05","1W":"00","2I":"06","2W":"01","3I":"07","3W":"02","4I":"08","4W":"03","5I":"09","5W":"04","6I":"0A","7I":"0B","8I":"0C","9I":"0D","AW":"0F","PW":"0E","Putter":"11","SW":"10"}}},"80C8564A-929C65AB-C:4A":{"Max Score":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null},"Press L Button for Max Gauge\\Player 1":{"note":"","data":["D00B2791 0020","811D2602 0098"],"options":null},"Press L Button for Max Gauge\\Player 2":{"note":"","data":["D00B2797 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}}},"80F41131-384645F6-C:4A":{"Always 1st":{"note":"","data":["8013CD60 0001"],"options":null},"Freeze All Lap Timers":{"note":"","data":["8013CD21 0001","8013CD25 0001","8013CD29 0001"],"options":null},"Freeze Overall Timer":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8013CD15 0001"],"options":null},"Laps Of Race":{"note":"","data":["8013CD0E 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","Never Ending Laps":"06"}},"Level Select":{"note":"For this cheat to work,as soon as you put the cheat on you must turn it back off,if not you wont beable to quit a Race or even finish one.","data":["8013D01B 00??"],"options":{"Bikini Island":"01","Canyon Rush":"00","China Town":"02","China Town Jam":"04","Neo Arena":"03","Neo Speed Way":"05"}},"Music Modifier":{"note":"","data":["80106CCC 00??"],"options":{"Music Off":"00","Music On":"FF"}},"No Damage\\Player 1":{"note":"","data":["50000402 0000","8113D058 0000"],"options":null},"No Damage\\Player 2":{"note":"","data":["50000402 0000","8113F0E8 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["8013D015 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Play As\\Player 2":{"note":"","data":["8013D016 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Unlock All Tracks and Vehicles":{"note":"","data":["8008D1FC 0001"],"options":null}},"810729F6-E03FCFC1-C:45":{"Away Team\\Full Court Dunks":{"note":"","data":["81182E4E 0004","8118305A 0004","81183266 0004","81183472 0004","8118367E 0004"],"options":null},"Away Team\\Giant Players":{"note":"","data":["81182DF6 0032","81182DFE 003C","81183002 0032","8118300A 003C","8118320E 0032","81183216 003C","8118341A 0032","81183422 003C","81183626 0032","8118362E 003C"],"options":null},"Away Team\\Scores 0":{"note":"","data":["81160FFE 0000"],"options":null},"Away Team\\Scores 150":{"note":"","data":["81160FFE 0096"],"options":null},"Away Team\\Tiny Players":{"note":"","data":["81182DF6 0011","81182DFE 0014","81183002 0011","8118300A 0014","8118320E 0011","81183216 0014","8118341A 0011","81183422 0014","81183626 0011","8118362E 0014"],"options":null},"Creation Points (L / R)":{"note":"","data":["D0061269 0020","8117E008 0200","D0061269 0010","8117E008 0000"],"options":null},"Home Team\\Full Court Dunks":{"note":"","data":["81182412 0004","8118261E 0004","8118282A 0004","81182A36 0004","81182C42 0004"],"options":null},"Home Team\\Giant Players":{"note":"","data":["811823BA 0032","811823C2 003C","811825C6 0032","811825CE 003C","811827D2 0032","811827DA 003C","811829DE 0032","811829E6 003C","81182BEA 0032","81182BF2 003C"],"options":null},"Home Team\\Scores 0":{"note":"","data":["81160FFA 0000"],"options":null},"Home Team\\Scores 150":{"note":"","data":["81160FFA 0096"],"options":null},"Home Team\\Tiny Players":{"note":"","data":["811823BA 0011","811823C2 0014","811825C6 0011","811825CE 0014","811827D2 0011","811827DA 0014","811829DE 0011","811829E6 0014","81182BEA 0011","81182BF2 0014"],"options":null},"Infinite\\Time Outs\\Away":{"note":"","data":["800D5C9B 0007"],"options":null},"Infinite\\Time Outs\\Home":{"note":"","data":["800D5C75 0007"],"options":null},"No Time Outs\\Away":{"note":"","data":["800D5C9B 0000"],"options":null},"No Time Outs\\Home":{"note":"","data":["800D5C7F 0000"],"options":null}},"812289D0-C2E53296-C:50":{"1 Player\\Always Place 1st":{"note":"","data":["80103CD7 0000"],"options":null},"1 Player\\Max\\Acceleration":{"note":"","data":["8012C51F 000A"],"options":null},"1 Player\\Max\\Shocks":{"note":"","data":["8012C527 000A"],"options":null},"1 Player\\Max\\Speed":{"note":"","data":["8012C523 000A"],"options":null},"1 Player\\Max\\Tires":{"note":"","data":["8012C52B 000A"],"options":null},"Multi and 1 Player\\Infinite Turbos\\Player 1":{"note":"Can be used in 1 Player and Multiplayer Modes for Player 1","data":["81103F3A 03E7"],"options":null},"Multi and 1 Player\\Infinite Turbos\\Player 2":{"note":"Multiplayer Mode Only for Player 2","data":["8110422E 03E7"],"options":null},"Multi and 1 Player\\Max Crash Helmets\\Player 1":{"note":"Can be used in 1 Player and Multiplayer Modes for Player 1","data":["80103F33 0064"],"options":null},"Multi and 1 Player\\Max Crash Helmets\\Player 2":{"note":"Multiplayer Mode Only for Player 2","data":["80104227 0064"],"options":null}},"817D286A-EF417416-C:53":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2712 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE03F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802026F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE255 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FCB85 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFF6D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802027A5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DA0BD 0001"],"options":null}},"82380387-DFC744D9-C:50":{"Widescreen":{"note":"Boards in 4:3.","data":["8101FBBA 3FE3","81052D3C 080C","81052D3E 0074","81052D40 3C1B","81052D42 3FAB","813001D0 449B","813001D2 6000","813001D4 460C","813001D6 0002","813001D8 4606","813001DA 0002","813001DC 0801","813001DE 4B51","813001E0 2400"],"options":null}},"82B3248B-E73E244D-C:45":{"Always Play On\\2D Board":{"note":"","data":["800E7257 0001"],"options":null},"Always Play On\\3D Board":{"note":"","data":["800E7257 0000"],"options":null},"Debug Mode":{"note":"","data":["810E6290 0001"],"options":null},"Player 1 Controls\\Both Sides In 2-Player":{"note":"This is only for Human VS. Human Game","data":["8012C508 0000"],"options":null},"Time Always Counts Down\\On Black Players Side":{"note":"","data":["8012C67D 0001"],"options":null},"Time Always Counts Down\\On White Players Side":{"note":"","data":["8012C67D 0000"],"options":null}},"82DC04FD-CF2D82F4-C:45":{"Always Have\\50 pieces of corn":{"note":"","data":["801E1A39 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E1A28 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["801E1A26 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E1A3A 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E1A2D 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E1A38 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D008F2C1 0010","801E199E 0001","D008F2C1 0010","801E19AE 0001"],"options":null},"Start with Berry Weapon":{"note":"","data":["811E1A2E 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Unlock All Levels":{"note":"","data":["81099150 000F"],"options":null}},"82EFDC30-806A2461-C:45":{"Away Team Scores 50":{"note":"","data":["801F6407 0032","802004C0 0032"],"options":null},"Home Team Scores 50":{"note":"","data":["801F6406 0032","802004BF 0032"],"options":null}},"839F3AD5-406D15FA-C:50":{"Have All\\Characters Available":{"note":"","data":["810657A0 FFFF"],"options":null},"Have All\\Courts Available":{"note":"","data":["810657A4 FFFF"],"options":null},"Score\\Player 1":{"note":"","data":["80152DFA 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}},"Score\\Player 2":{"note":"","data":["80152DFB 00??"],"options":{"0":"00","15":"01","30":"02","40":"03"}}},"83F33AA9-A901D40D-C:45":{"Infinite Time":{"note":"","data":["8114C3D8 000A"],"options":null},"Pick Your Kombat Zone":{"note":"","data":["81257684 00??"],"options":{"Armory":"14","Bell Tower":"07","Bridge":"05","Courtyard":"02","Dead Pool":"11","Graveyard":"09","Hidden Portal":"10","Jade's Desert":"0E","Kahn's Kave":"0D","Kahn's Tower":"04","Kombat Temple":"08","Lair":"18","Living Forest":"15","Lost Bridge":"0F","Pit":"03","Pit 2":"1A","Pit 3":"0A","Pit Bottom":"1C","Portal":"17","River Kombat":"0B","Rooftop":"13","Scorpion's Lair":"0C","Soul Chamber":"06","Star Bridge":"1B","Street":"01","Subway":"00","Tomb":"19","Tower":"16","Wasteland":"12"}},"Player 1\\Aggressor Energy Bar":{"note":"","data":["80169A21 0030"],"options":null},"Player 1\\Energy is":{"note":"","data":["8016998D 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 1\\Infinite Run":{"note":"","data":["81169854 0030"],"options":null},"Player 1\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B5365 0020","811699B4 5100","D02B5365 0020","811699BC 5100"],"options":null},"Player 1\\Play As":{"note":"","data":["8016997D 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Player 2\\Aggressor Energy Bar":{"note":"","data":["80169A23 0030"],"options":null},"Player 2\\Energy is":{"note":"","data":["80169C61 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 2\\Infinite Run":{"note":"","data":["81169C68 0030"],"options":null},"Player 2\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B536D 0020","811699B6 5100","D02B536D 0020","811699BE 5100"],"options":null},"Player 2\\Play As":{"note":"","data":["80169C21 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Unlock Secret":{"note":"","data":["8016A021 0004"],"options":null}},"83F3931E-CB72223D-C:50":{"Access\\All Cars \u0026 Upgrades":{"note":"","data":["813BED58 1FFF","803BED22 0005"],"options":null},"Access\\Florida \u0026 Moon Tracks":{"note":"This is for Championship Mode Only","data":["813BF2A4 0101"],"options":null},"Always 1st\\Player 1":{"note":"","data":["803CDF03 0001"],"options":null},"Always 1st\\Player 2":{"note":"","data":["803CE3DB 0001"],"options":null},"Always 1st\\Player 3":{"note":"","data":["803CDA2B 0001"],"options":null},"Always 1st\\Player 4":{"note":"","data":["803CD553 0001"],"options":null},"Cannot Spin Out":{"note":"","data":["803CDC73 0000"],"options":null},"Dancing Girl Always On":{"note":"","data":["803BED53 0001","803C20AF 0054"],"options":null},"Disable\\Left Lane Traffic":{"note":"This is for Championship Mode Only","data":["8033C83B 0001"],"options":null},"Disable\\Right Lane Traffic":{"note":"This is for Championship Mode Only","data":["8033C83F 0001"],"options":null},"Infinite Time":{"note":"","data":["813D0C1C 4296"],"options":null},"Max Power Level,\u0026 Paint Job / Two Tone":{"note":"","data":["813BEDA2 0512"],"options":null},"Max\\Championship Points":{"note":"","data":["813BFB4E 270F"],"options":null},"Max\\Trick points":{"note":"","data":["803BF21F 0063"],"options":null},"Stop Elapsed Time\\Player 1":{"note":"","data":["813C7558 3C80"],"options":null},"Stop Elapsed Time\\Player 2":{"note":"","data":["813C7794 3C80"],"options":null},"Unlimited Nitro Player 4":{"note":"Press C-Button Down For Boost, This Code is for Championship Mode Only","data":["803C728B 0003"],"options":null},"Unlimited Nitro\\Player 1":{"note":"Press C-Button Down For Boost, This Code is for Championship Mode Only","data":["803C74C7 0003"],"options":null},"Unlimited Nitro\\Player 2":{"note":"Press C-Button Down For Boost, This Code is for Championship Mode Only","data":["803C7703 0003"],"options":null},"Unlimited Nitro\\Player 3":{"note":"Press C-Button Down For Boost, This Code is for Championship Mode Only","data":["803C704F 0064"],"options":null},"Unlocked Pro \u0026 Master difficulty level":{"note":"","data":["803BEDD5 0003"],"options":null}},"84077275-57315B9C-C:50":{"All Pokemon Level 100\\Player 1":{"note":"","data":["50000654 0000","800AE654 0064"],"options":null},"All Pokmon Have Max Hp":{"note":"","data":["81285AE8 0096"],"options":null},"Catch\\Mew on GB Tower":{"note":"","data":["80171E17 0015"],"options":null},"Catch\\Mewtwo on GB Tower":{"note":"","data":["80171E17 0083"],"options":null},"Clefairy Says\\Extended Life Bar\\Player 1":{"note":"","data":["8118F43A 0049"],"options":null},"Clefairy Says\\Extended Life Bar\\Player 2":{"note":"","data":["8118F5FA 0049"],"options":null},"Clefairy Says\\Extended Life Bar\\Player 3":{"note":"","data":["8118F7BA 0049"],"options":null},"Clefairy Says\\Extended Life Bar\\Player 4":{"note":"","data":["8118F97A 0049"],"options":null},"Clefairy Says\\Infinite Health\\Player 1":{"note":"","data":["8118F438 0064"],"options":null},"Clefairy Says\\Infinite Health\\Player 2":{"note":"","data":["8118F5F8 0064"],"options":null},"Clefairy Says\\Infinite Health\\Player 3":{"note":"","data":["8118F7B8 0064"],"options":null},"Clefairy Says\\Infinite Health\\Player 4":{"note":"","data":["8118F978 0064"],"options":null},"Game Difficulty":{"note":"","data":["D312FC40 FD70","D312FC40 A528","8112FC40 00??"],"options":{"Easy":"02","Extra Hard":"0F","Hard":"00","Normal":"01"}},"Gym Leader Castle\\Blaine":{"note":"","data":["80286B69 00A1"],"options":null},"Gym Leader Castle\\Brock":{"note":"","data":["80287539 00A1"],"options":null},"Gym Leader Castle\\Elite Four \u0026 Rival":{"note":"","data":["80286859 00A1"],"options":null},"Gym Leader Castle\\Erika":{"note":"","data":["80286BA9 00A1"],"options":null},"Gym Leader Castle\\Giovani":{"note":"","data":["80287169 00A1"],"options":null},"Gym Leader Castle\\Koga":{"note":"","data":["80287519 00A1"],"options":null},"Gym Leader Castle\\Misty":{"note":"","data":["80287E79 00A1"],"options":null},"Gym Leader Castle\\Sabrina":{"note":"","data":["802870A9 00A1"],"options":null},"Gym Leader Castle\\Surge":{"note":"","data":["80286BD9 00A1"],"options":null},"Infinite Attacks All Pokemon\\Player 1":{"note":"","data":["50000654 0000","810AE650 6363","50000654 0000","810AE652 6363"],"options":null},"Infinite Attacks All Pokemon\\Player 2":{"note":"","data":["50000654 0000","810AE86C FFFF","50000654 0000","810AE86E FFFF"],"options":null},"Infinite Attacks All Pokemon\\Player 3":{"note":"","data":["50000654 0000","810AE86C FFFF","50000654 0000","810AE86E FFFF"],"options":null},"Infinite Attacks All Pokemon\\Player 4":{"note":"","data":["50000654 0000","810AEA88 FFFF","50000654 0000","810AEA8A FFFF"],"options":null},"Infinite Health against Mew Two":{"note":"","data":["810AE632 FFFF","812823E8 FFFF"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["810AE686 03E7","810AE6AA 03E7","810AE6DA 03E7","810AE6FE 03E7"],"options":null},"Infinite Health\\Stadium\\Free Battle":{"note":"","data":["80287D79 0064"],"options":null},"Infinite Health\\Stadium\\Mewto":{"note":"","data":["802825B9 0064"],"options":null},"Infinite Health\\Stadium\\Petit Cup":{"note":"","data":["80286C29 0064"],"options":null},"Infinite Health\\Stadium\\Pica Cup":{"note":"","data":["80284659 0064"],"options":null},"Infinite Health\\Stadium\\Poke Cup":{"note":"","data":["80285399 0064"],"options":null},"Infinite Health\\Stadium\\Prime Cup":{"note":"","data":["80285FE9 0064"],"options":null},"Infinite cash":{"note":"","data":["81172186 9999"],"options":null},"Infinite coins for coin case":{"note":"","data":["801723E3 0099"],"options":null},"Pokemon beach stop code":{"note":"","data":["D00488A1 0020","80202BB5 0001"],"options":null},"Rock Harden\\Infinite Armour\\Player 1":{"note":"","data":["81193B78 0190"],"options":null},"Rock Harden\\Infinite Armour\\Player 2":{"note":"","data":["81193E2C 0190"],"options":null},"Rock Harden\\Infinite Armour\\Player 3":{"note":"","data":["811940E0 0190"],"options":null},"Rock Harden\\Infinite Armour\\Player 4":{"note":"","data":["81194394 0190"],"options":null}},"8473D0C1-23120666-C:4A":{"All Equipment Upgrades":{"note":"","data":["801ED88D 0023","811ED8DA 201B","801ED86C 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03E4CAB 0000","801ED822 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Event Item\\Modifier 1":{"note":"","data":["801ED895 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801ED89B 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801ED8A1 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Have Bottle\\Modifier 1":{"note":"","data":["801ED8A2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 2":{"note":"","data":["801ED8A3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 3":{"note":"","data":["801ED8A4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 4":{"note":"","data":["801ED8A5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 5":{"note":"","data":["801ED8A6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Bottle\\Modifier 6":{"note":"","data":["801ED8A7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have Item Modifier":{"note":"","data":["801ED8A0 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\All Masks":{"note":"","data":["811ED8A8 3E39","811ED8AA 4745","811ED8AC 4032","811ED8AE 3A46","811ED8B0 3842","811ED8B2 4833","811ED8B4 3C3D","811ED8B6 373F","811ED8B8 3634","811ED8BA 4341","811ED8BC 3B44","811ED8BE 4935"],"options":null},"Have\\Bombchu":{"note":"","data":["801ED897 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801ED896 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801ED899 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801ED898 0008"],"options":null},"Have\\Fire Arrow":{"note":"","data":["801ED892 0002"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801ED8A0 0010"],"options":null},"Have\\Have\\Ocarina of Time":{"note":"","data":["801ED890 0000"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801ED891 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801ED89F 000F"],"options":null},"Have\\Ice Arrow":{"note":"","data":["801ED893 0003"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801ED89E 000E"],"options":null},"Have\\Light Arrow":{"note":"","data":["801ED894 0004"],"options":null},"Have\\Magic Beans":{"note":"","data":["801ED89A 000A"],"options":null},"Have\\Pictograph":{"note":"","data":["801ED89D 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801ED89C 000C"],"options":null},"Have\\QuestStatus Items":{"note":"","data":["801ED8DD 0005","811ED8DE F7CF"],"options":null},"Infinite\\Health":{"note":"","data":["811ED856 03E7"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811ED854 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"This is Infinite use of Bombs,Bombchus,Deku Sticks,Deku Nuts,Magic Beans,\u0026 Powder Kegs. But you must also put it's Have on to work.","data":["801ED8C1 0063","50000801 0000","801ED8C6 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801ED859 0060","811ED860 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811ED85A 03E7"],"options":null},"Play As":{"note":"","data":["801ED840 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You have been warned.","data":["801ED86C 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F8836 0008","811ED836 FFFD","D01F8836 0004","811ED836 0000","D01F8836 0002","811ED836 FFFE"],"options":null},"Use all C Buttons":{"note":"","data":["811F1738 0000","811F173A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["803E4CAA 0000","803FD505 0001","813FD50A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}},"Widescreen":{"note":"","data":["81143CA4 3C07","81143CA6 3FE3"],"options":null}},"84D5FD75-BBFD3CDF-C:44":{"Character Select":{"note":"","data":["80075F02 00??"],"options":{"Big Head.":"04","Flame Grilled":"08","Normal":"00","Play as Deadwing.":"01"}},"Have All\\Cheats: Book of Shadows":{"note":"","data":["81075EFE 0FFF"],"options":null},"Have All\\Dark Souls Collected":{"note":"","data":["80075EF9 0078"],"options":null},"Have All\\Gads \u0026 The Poign":{"note":"","data":["80030E57 000F"],"options":null},"Have All\\Items":{"note":"Youll not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50001B20 0000","80030613 000B"],"options":null},"Have All\\L-Eclipser":{"note":"You will not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50000320 0000","80030973 000B"],"options":null},"Have All\\Levels Unlocked":{"note":"","data":["5000101C 0000","80030A0E 0001"],"options":null},"Infinite\\0.9mm Ammo":{"note":"","data":["81075AEA 0190"],"options":null},"Infinite\\Accumulators":{"note":"","data":["800306D7 0005"],"options":null},"Infinite\\Cadeaux'":{"note":"","data":["81075AE6 03E7"],"options":null},"Infinite\\Max Health,Air,Shadow Charge \u0026 Voodoo Power":{"note":"","data":["50000604 0000","81075AC6 2710"],"options":null},"Infinite\\Prisms":{"note":"","data":["80030957 0003"],"options":null},"Infinite\\Retractors":{"note":"","data":["800308B7 0003"],"options":null},"Infinite\\Shotgun Shells":{"note":"","data":["80075ADF 0063"],"options":null},"Infinite\\Violator Ammo":{"note":"","data":["81075AE2 03E7"],"options":null},"Press L To Levitate":{"note":"Press the L-Button to rise and let go and press again in stages to come back down.","data":["D0058EE5 0020","80075528 0041"],"options":null},"[Ammo Always Displayed On Screen]":{"note":"","data":["50000408 0000","80075A7D 0007"],"options":null},"[Health Meter Displayed On Screen]":{"note":"","data":["81075B10 0000","81075B12 00FF"],"options":null}},"84EAB557-C88A190F-C:50":{"10x Points Multiplier":{"note":"","data":["800EAD8F 0001"],"options":null},"Access In-Game Cheat Menu":{"note":"","data":["50001104 0000","800E9E98 0001"],"options":null},"Access\\Officer Dick":{"note":"","data":["800E9E9C 0001","800F093B 0001"],"options":null},"Access\\Spider-Man":{"note":"","data":["800E9E98 0001","800F0C5B 0001"],"options":null},"All Gaps":{"note":"","data":["50000A0C 0000","810E9D84 FFFF","50000A0C 0000","810E9D86 FFFF","50000A0C 0000","810E9D8A FFFF","50000402 0000","810E9DF4 FFFF"],"options":null},"Always Special":{"note":"","data":["800E9EAC 0001","800E9EAE 0001"],"options":null},"Hoffmann Factory \u0026 Skate heaven Unlocked":{"note":"","data":["800EA18B 003F"],"options":null},"Infinite Time":{"note":"","data":["800E886A 0001"],"options":null},"Level Goals 100%":{"note":"All standard players,Officer Dick \u0026 Spider-Man, Use together with","data":["50000EE4 0000","810E8900 FFFF","50000EE4 0000","810E8902 FFFF","50000EE4 0000","810E8904 FFFF","50000EE4 0000","810E8906 FFFF","50000EE4 0000","810E8908 FFFF","50000EE4 0000","810E890A FFFF","50000EE4 0000","810E890C FFFF","50000EE4 0000","810E890E FFFF","50000EE4 0000","810E8920 FFFF"],"options":null},"Levels Goals 100% All Custom Players":{"note":"","data":["50000802 0000","810E9494 FFFF","50000802 0000","810E9578 FFFF","50000802 0000","810E965C FFFF","50000802 0000","810E9740 FFFF"],"options":null},"Max Cash":{"note":"All standard players,Officer Dick \u0026 Spider-Man","data":["50000EE4 0000","810E88F8 000A","50000EE4 0000","810E88FA 2B1F","50000EE4 0000","810E88FC 000A","50000EE4 0000","810E88FE 2B1F"],"options":null},"Max Cash For All Custom Players":{"note":"","data":["500004E4 0000","810E948C 000A","500004E4 0000","810E948E 2B1F","500004E4 0000","810E9490 000A","500004E4 0000","810E9492 2B1F"],"options":null},"Moon Psysics":{"note":"","data":["800E9ECE 0001"],"options":null},"Perfect Balance":{"note":"","data":["800E9EAA 0010"],"options":null}},"84FC04FF-B1253CE9-C:4A":{"1 Lap Race":{"note":"","data":["D01215A8 0000","801215A8 0009"],"options":null},"999 Trick Game Pts":{"note":"Press the A Button to stop Count,or it will continue to grow without stoping.","data":["81121360 03E7"],"options":null},"Access Gold Medals":{"note":"","data":["50006002 0000","810EBD42 0101"],"options":null},"Enable Sinobin":{"note":"","data":["8110A17E 0100"],"options":null},"Infinite\\Cash":{"note":"","data":["8012160A C350"],"options":null},"Infinite\\Lucky Dip":{"note":"\"Lucky Dip is Infinite Usage Of What Ever You Get From Each Red Box\"","data":["801215B4 0003"],"options":null},"Infinite\\Tools Options":{"note":"","data":["801215B5 00??"],"options":{"Board":"06","Fan":"01","Ghost":"02","Mouse":"05","Pan":"03","Rock":"04"}}},"85AE781A-C756F05D-C:45":{"Have\\Max Bonus":{"note":"","data":["810E964A 270F"],"options":null},"Have\\[All Guns \u0026 Infinite Ammo]":{"note":"Press C Left to receive all Guns","data":["810FFF8A 0001","50000B04 0000","810E92E6 03E8"],"options":null},"Have\\[All Keys]":{"note":"","data":["810E92E0 0101","800E92E2 0001"],"options":null},"Have\\[High Score]":{"note":"","data":["810E92CE FFFF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["810E9650 0005"],"options":null},"Infinite\\Health":{"note":"If you fall into Water just turn off the Infinite Health \u0026 put back on after.","data":["810E92D8 42D8"],"options":null},"Level Select":{"note":"","data":["810FFF92 00??"],"options":{"Boss Mission Destroy Carrier Level":"10","Mission 1 Shock Strike":"01","Mission 10 Scramble Pylon":"0A","Mission 11 Herding Research":"0B","Mission 12 The Extractor":"0C","Mission 13 Nuke Tower":"0D","Mission 14 Mucus Storage":"0E","Mission 15 Depot Attack":"0F","Mission 16 Sterilization":"11","Mission 17 Scorpion Killer":"12","Mission 18 Core Nuke":"13","Mission 19 Gate Keeper":"14","Mission 2 Radar Run":"02","Mission 3 Return Fire":"03","Mission 4 The Sonar Tower":"04","Mission 5 Big Blips":"05","Mission 6 Short Fuse":"06","Mission 7 Outpost":"07","Mission 8 Sewer":"08","Mission 9 Clean Up":"09","Queen Mission":"15"}},"Level Select Menu":{"note":"","data":["810FE5AA D320"],"options":null}},"85C18B16-DF9622AF-C:4A":{"Infinite Health Player1":{"note":"","data":["801A57B5 00CF"],"options":null},"Infinite Max Stats Creation Points":{"note":"Player 1","data":["801C200F 0064"],"options":null},"Max Stats":{"note":"Player 1","data":["801CA5D0 0064","801CA5D1 0064","801CA5D2 0064","801CA5D3 0064","801CA5D4 0064","801CA5D5 0064","801CA5D6 0064","801CA5D7 0064","801CA5D8 0064"],"options":null}},"862C0657-8DFD896D-C:45":{"(Multi-player)\\Have All\\Weapons and items\\Player 1":{"note":"","data":["8133BA4E FFFE"],"options":null},"(Multi-player)\\Have All\\Weapons and items\\Player 2":{"note":"","data":["8133BC0A FFFE"],"options":null},"(Multi-player)\\Have All\\Weapons and items\\Player 3":{"note":"","data":["8133BDC6 FFFE"],"options":null},"(Multi-player)\\Have All\\Weapons and items\\Player 4":{"note":"","data":["8133BF82 FFFE"],"options":null},"(Multi-player)\\Max Kills\\Player 1":{"note":"","data":["8033B9BC FFFF"],"options":null},"(Multi-player)\\Max Kills\\Player 2":{"note":"","data":["8033BB78 FFFF"],"options":null},"Access\\All Guns":{"note":"","data":["8015969F 0001"],"options":null},"Access\\Max Ammo":{"note":"","data":["8015FCBF 0001"],"options":null},"Can't Fail Missions":{"note":"","data":["810A04FA ED40"],"options":null},"Enable\\Cheat Menu":{"note":"Enable before you enter in game and you will find the cheat menu when you press the Start Button","data":["8003E22F 0003","8004609F 0003"],"options":null},"Enable\\Debug Mode":{"note":"When this code is activated, a display of numbers will show on the screen as the players move around","data":["801599E7 0001"],"options":null},"Enable\\Level Select Menu":{"note":"This must be used with Enable Cheat Menu and enabled before you enter in game and you will find the level select menu replaces the cheat menu when you press the Start Button","data":["810AA696 9214"],"options":null},"Enemies Don't Recongnize You Easily":{"note":"","data":["8005742D 0001"],"options":null},"Have\\Invisible Soldier":{"note":"you are Invisible to most enimies who just can not dectect or see you.","data":["80159683 0001"],"options":null},"Have\\Large Mode":{"note":"Do not use with Mini Mode only use one at a time","data":["8015FCDF 0001"],"options":null},"Have\\Less Enemies In Levels":{"note":"Do not use with No Enemies In Levels, only use one at a time","data":["80056688 0020"],"options":null},"Have\\Mini Mode":{"note":"Do not use with Large Mode only use one at a time","data":["80159699 0001"],"options":null},"Have\\No Enemies In Levels":{"note":"Do not use with Less Enemies In Levels, only use one at a time","data":["80056D4C 0020"],"options":null},"Improved Gun Handling":{"note":"","data":["8009C014 003E"],"options":null},"Infinite\\Continues":{"note":"","data":["80159693 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8015FCEF 0001"],"options":null},"Play As":{"note":"Here you can choose who you would like to play as. But Do not use this with any other play as option..","data":["801609A3 00??"],"options":{"Plastro":"09","The Big Green One":"07","Vikki":"08"}}},"870611BA-D8B1226C-C:00":{"God Mode":{"note":"","data":["80774EB7 00??"],"options":{"Off":"00","On":"01"}}},"8979169C-F189F6A0-C:4A":{"Infinite\\99 Lives":{"note":"","data":["8023648D 0063"],"options":null},"Infinite\\99 R Button Bombs":{"note":"","data":["8024BD89 0063"],"options":null},"Infinite\\Shield":{"note":"","data":["80250971 00??"],"options":{"Off":"00","On":"01"}},"Infinite\\Speed":{"note":"","data":["8024B6BC 00??"],"options":{"Fast":"03","Medium":"02","Normal":"00","Slow":"01","Warp Drive":"07"}},"Infinite\\Stream Laser":{"note":"","data":["80236CD0 00??"],"options":{"2 Stream Laser":"00","4 Stream Laser":"01","6 Stream Laser":"02"}},"Max Score":{"note":"","data":["80249F91 00FF"],"options":null},"Unlock Ramsie Mini-Game":{"note":"","data":["801FF43E 0001"],"options":null}},"89A579F1-667E97EF-C:45":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["811659C4 FFFF","811659C6 FFFF","811659CA 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FB5C 270F"],"options":null},"Sixty Frames":{"note":"Seems Turok 3 doesn't use 20fps.","data":["8008590B 0001","800859D7 0001"],"options":null}},"89FED774-CAAFE21B-C:45":{"Have All Artifacts":{"note":"","data":["800C56BF 0063","800C56C3 0063","800C56C7 0063"],"options":null},"Infinite Health":{"note":"","data":["800C56BB 0005"],"options":null},"Infinite Lives":{"note":"","data":["800C56B7 0005"],"options":null},"Sixty Frames":{"note":"Change ASM value,too fast.","data":["8003B8FB 0001"],"options":null}},"8A6009B6-94ACE150-C:45":{"Access\\All Characters":{"note":"","data":["801E6040 FFFF"],"options":null},"Access\\All Floyd Awards":{"note":"only enable One character at a time when using this code","data":["50000501 0000","801E6038 0005"],"options":null},"Juno\\Access\\All Keys":{"note":"","data":["811E6248 FFF7"],"options":null},"Juno\\Access\\All Objects":{"note":"","data":["811E624A FFFF"],"options":null},"Juno\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["801E61EC 00FF","801E61ED 00FF"],"options":null},"Juno\\Full \u0026 Max Health":{"note":"","data":["801BF976 0040","801E61E5 000C","801E61E2 0040"],"options":null},"Juno\\Infinite Continues":{"note":"","data":["800A3281 0002"],"options":null},"Juno\\Infinite\\Max Ammo All Weapons":{"note":"","data":["50000302 0000","811E61F6 03E7","50000802 0000","811E61FC 03E7","50000402 0000","811E620C 03E7"],"options":null},"Juno\\Infinite\\Mizar Tokens":{"note":"","data":["811E61F4 03E7"],"options":null},"Juno\\Max Blue \u0026 White Heads":{"note":"","data":["811E61EA 03E7","811E61E8 03E7"],"options":null},"Lupus\\Access\\All Keys":{"note":"","data":["811E62BE FF70"],"options":null},"Lupus\\Access\\All Objects":{"note":"","data":["811E62C0 FFFF"],"options":null},"Lupus\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["801E6262 00FF","801E6263 00FF"],"options":null},"Lupus\\Full \u0026 Max Health":{"note":"","data":["801BF9EC 0040","801E625B 000C","801E6258 0040"],"options":null},"Lupus\\Infinite\\Max Ammo All Weapons":{"note":"","data":["50000302 0000","811E626C 03E7","50000802 0000","811E6272 03E7","50000402 0000","811E6282 03E7"],"options":null},"Lupus\\Infinite\\Mizar Tokens":{"note":"","data":["811E626A 03E7"],"options":null},"Lupus\\Max\\Blue \u0026 White Heads":{"note":"","data":["811E6260 03E7","811E625E 03E7"],"options":null},"Tribals\\Gold Wood\\Have All Tribals":{"note":"","data":["801E6014 000F"],"options":null},"Tribals\\Gold Wood\\Have No Tribals Remaining":{"note":"","data":["801E6016 0000"],"options":null},"Tribals\\Gold Wood\\No Tribals Killed":{"note":"","data":["801E6015 0000"],"options":null},"Vela\\Access\\All Keys":{"note":"","data":["811E61D2 FF70"],"options":null},"Vela\\Access\\All Objects":{"note":"","data":["811E61D4 FFFF"],"options":null},"Vela\\Access\\All Weapons":{"note":"Do not put this code on until you collect one Extra Weapon then you will Have\\all ready to use","data":["801E6176 00FF","801E6177 00FF"],"options":null},"Vela\\Full \u0026 Max Health":{"note":"","data":["801E616F 000C","801E616C 0040"],"options":null},"Vela\\Infinite\\Max Ammo All Weapons":{"note":"","data":["50000302 0000","811E6180 03E7","50000802 0000","811E6186 03E7","50000402 0000","811E6196 03E7"],"options":null},"Vela\\Infinite\\Mizar Tokens":{"note":"","data":["811E617E 03E7"],"options":null},"Vela\\Max\\Blue \u0026 White Heads":{"note":"","data":["811E6174 03E7","811E6172 03E7"],"options":null},"Wide Screen Always Off":{"note":"","data":["800FECA8 0000"],"options":null}},"8A86F073-CD45E54B-C:45":{"Computer\\Always Gets Bubbles":{"note":"","data":["80173601 0006"],"options":null},"Computer\\Never Gets Bubbles":{"note":"","data":["80173601 0000"],"options":null},"Infinite Credits":{"note":"","data":["80120171 0005"],"options":null},"Player 1\\Always Gets Bubbles":{"note":"","data":["80171131 0006"],"options":null},"Player 1\\Infinite Time To Set Pieces":{"note":"","data":["8117AAFC 0000"],"options":null},"Player 1\\Never Gets Bubbles":{"note":"","data":["80171131 0000"],"options":null},"Player 1\\Screen Never Fills Over Time":{"note":"","data":["80171125 000A"],"options":null}},"8A97A197-272DF6C1-C:50":{"Double MPG":{"note":"","data":["800ADB69 0001"],"options":null},"Infinite Attempts":{"note":"","data":["800ADB66 0001"],"options":null},"Invincibility":{"note":"Makes you also fly without any fuel","data":["800ADB64 0001"],"options":null},"Level \u0026 Scenario Select":{"note":"","data":["800ACE5C 000B"],"options":null},"No Quad Damage":{"note":"","data":["800ADB6B 0001"],"options":null},"infinite Ammo For All Guns":{"note":"","data":["800ADB65 0001"],"options":null}},"8BD4A334-1E138B05-C:50":{"Have Max Rumble":{"note":"","data":["810D8E96 00??","810E61B8 00??"],"options":{"Max":"30","Never Rumble":"00"}},"Infinite\\Cash":{"note":"","data":["810EB852 FC9A"],"options":null},"Infinite\\Health":{"note":"","data":["810D8E8A 00??","810E6522 00??"],"options":{"Infinite":"64","No Health":"00"}},"Infinite\\Stamina":{"note":"","data":["810D8E8E 00??","810E6526 00??"],"options":{"Infinite":"64","No Stamina":"00"}},"Infinite\\Time":{"note":"","data":["810E6486 0E10"],"options":null}},"8C138BE0-95700E46-C:45":{"All Lakes Unlocked":{"note":"","data":["80111F00 0001"],"options":null},"Catch Bigger Fish":{"note":"","data":["80111F06 0001"],"options":null},"Easier to Catch Fish":{"note":"","data":["80111F0E 0001"],"options":null},"Extra Cash":{"note":"","data":["80111F0B 0001"],"options":null},"Line Never Breaks":{"note":"","data":["80111F05 0001"],"options":null},"No Penalties in Tounament":{"note":"","data":["80111F08 0001"],"options":null}},"8C3D1192-BEF172E1-C:50":{"Infinite Time":{"note":"","data":["8114C2FC 000A"],"options":null},"Pick Your Kombat Zone":{"note":"","data":["812575A4 00??"],"options":{"Armory":"14","Bell Tower":"07","Bridge":"05","Courtyard":"02","Dead Pool":"11","Graveyard":"09","Hidden Portal":"10","Jade's Desert":"0E","Kahn's Kave":"0D","Kahn's Tower":"04","Kombat Temple":"08","Lair":"18","Living Forest":"15","Lost Bridge":"0F","Pit":"03","Pit 2":"1A","Pit 3":"0A","Pit Bottom":"1C","Portal":"17","River Kombat":"0B","Rooftop":"13","Scorpion's Lair":"0C","Soul Chamber":"06","Star Bridge":"1B","Street":"01","Subway":"00","Tomb":"19","Tower":"16","Wasteland":"12"}},"Player 1\\Aggressor Energy Bar":{"note":"","data":["80169941 0030"],"options":null},"Player 1\\Energy is":{"note":"","data":["801698AD 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 1\\Infinite Run":{"note":"","data":["811698B4 0030"],"options":null},"Player 1\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B5285 0020","811698D4 5100","D02B5285 0020","811698DC 5100"],"options":null},"Player 1\\Play As":{"note":"","data":["8016989D 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Player 2\\Aggressor Energy Bar":{"note":"","data":["80169943 0030"],"options":null},"Player 2\\Energy is":{"note":"","data":["80169B81 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 2\\Infinite Run":{"note":"","data":["81169B88 0030"],"options":null},"Player 2\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B528D 0020","811698D6 5100","D02B528D 0020","811698DE 5100"],"options":null},"Player 2\\Play As":{"note":"","data":["80169B41 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Unlock Secret":{"note":"","data":["80169F41 0004"],"options":null}},"8D2BAE98-D73725BF-C:45":{"Infinite Stamina":{"note":"","data":["81138400 447A","81138404 447A"],"options":null},"Press [START] To Reset Timer":{"note":"","data":["81137886 0000"],"options":null}},"8E6E01FF-CCB4F948-C:45":{"GS Button For 40 Gems":{"note":"","data":["8829018F 0028"],"options":null},"Infinite\\Action Modifier":{"note":"","data":["802901E3 00??"],"options":{"Beach Ball Spell":"0A","Big Glover Spell":"04","Call Ball Spell":"0E","Death Spell":"01","Enemy Ball Spell":"07","Freeze Enemy Spell":"00","Frog Spell":"02","Green Ball Spell":"0C","Helicopter Spell":"06","Hovering Ball Spell":"0B","Purple Bouncy Ball Spell":"08","Super Call Ball Spell":"0D","Tiny Black/Grey Ball Spell":"09","Tree Spell":"05","Walk On Walls Spell":"03"}},"Infinite\\Activate Cheat\\Modifier 1":{"note":"","data":["81297BEC ????"],"options":{"All Of The Above":"0380","Level Select":"0080","Open Levels":"0200","Open Portals":"0100"}},"Infinite\\Activate Cheat\\Modifier 2":{"note":"","data":["81297BEE ????"],"options":{"All Of The Above":"024A","Big Ball":"0200","Call Ball (Press L)":"0002","Infinite Energy":"0040","Infinite Lives":"0008"}},"Infinite\\Double Jumps":{"note":"","data":["8028FC07 0000"],"options":null},"Infinite\\Health":{"note":"","data":["8029018F 0028"],"options":null},"Infinite\\Lives":{"note":"","data":["80290193 000A"],"options":null},"Press L To Levitate":{"note":"","data":["D02AE905 0020","81290334 43E0"],"options":null}},"8E9692B3-4264BB2A-C:50":{"Aquadome Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F799B 0000"],"options":null},"Aquadome Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FAE2B 0000"],"options":null},"Aquadome Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F799A 0200"],"options":null},"Aquadome Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FAE3A 0200"],"options":null},"Aquadome Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7993 00AA"],"options":null},"Aquadome Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FAE33 00AA"],"options":null},"Aquadome Stage\\No Energy\\Player 1":{"note":"","data":["801F7993 0000"],"options":null},"Aquadome Stage\\No Energy\\Player 2":{"note":"","data":["801FAE33 0000"],"options":null},"Backwash Bay Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F80EB 0000"],"options":null},"Backwash Bay Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB58B 0000"],"options":null},"Backwash Bay Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F80FA 0200"],"options":null},"Backwash Bay Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB59A 0200"],"options":null},"Backwash Bay Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F80F3 00AA"],"options":null},"Backwash Bay Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB593 00AA"],"options":null},"Backwash Bay Stage\\No Energy\\Player 1":{"note":"","data":["801F80F3 0000"],"options":null},"Backwash Bay Stage\\No Energy\\Player 2":{"note":"","data":["801FB593 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F8B3B 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FBFDB 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F8B4A 0200"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FBFEA 0200"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8B43 00AA"],"options":null},"Boogerhenge, Tureen Toilet Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FBFE3 00AA"],"options":null},"Boogerhenge, Tureen Toilet Stage\\No Energy\\Player 1":{"note":"","data":["801F8B43 0000"],"options":null},"Boogerhenge, Tureen Toilet Stage\\No Energy\\Player 2":{"note":"","data":["801FBFE3 0000"],"options":null},"Candy Factory Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F826B 0000"],"options":null},"Candy Factory Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB70B 0000"],"options":null},"Candy Factory Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F827A 0200"],"options":null},"Candy Factory Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB71A 0200"],"options":null},"Candy Factory Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8273 00AA"],"options":null},"Candy Factory Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB713 00AA"],"options":null},"Candy Factory Stage\\No Energy\\Player 1":{"note":"","data":["801F8273 0000"],"options":null},"Candy Factory Stage\\No Energy\\Player 2":{"note":"","data":["801FB713 0000"],"options":null},"Clayribbean Cruise Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F805B 0000"],"options":null},"Clayribbean Cruise Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB4FB 0000"],"options":null},"Clayribbean Cruise Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F806A 0200"],"options":null},"Clayribbean Cruise Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB50A 0200"],"options":null},"Clayribbean Cruise Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8063 00AA"],"options":null},"Clayribbean Cruise Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB503 00AA"],"options":null},"Clayribbean Cruise Stage\\No Energy\\Player 1":{"note":"","data":["801F8063 0000"],"options":null},"Clayribbean Cruise Stage\\No Energy\\Player 2":{"note":"","data":["801FB503 0000"],"options":null},"Extra Characters and Secret Options":{"note":"","data":["801A86A1 000F"],"options":null},"Freezing Fortress Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F7EFB 0000"],"options":null},"Freezing Fortress Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB39B 0000"],"options":null},"Freezing Fortress Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F7F0A 0200"],"options":null},"Freezing Fortress Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB3AA 0200"],"options":null},"Freezing Fortress Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7F03 00AA"],"options":null},"Freezing Fortress Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB3A3 00AA"],"options":null},"Freezing Fortress Stage\\No Energy\\Player 1":{"note":"","data":["801F7F03 0000"],"options":null},"Freezing Fortress Stage\\No Energy\\Player 2":{"note":"","data":["801FB3A3 0000"],"options":null},"Ghastly Graveyard Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F818B 0000"],"options":null},"Ghastly Graveyard Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB62B 0000"],"options":null},"Ghastly Graveyard Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F819A 0200"],"options":null},"Ghastly Graveyard Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB63A 0200"],"options":null},"Ghastly Graveyard Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8193 00AA"],"options":null},"Ghastly Graveyard Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB633 00AA"],"options":null},"Ghastly Graveyard Stage\\No Energy\\Player 1":{"note":"","data":["801F8193 0000"],"options":null},"Ghastly Graveyard Stage\\No Energy\\Player 2":{"note":"","data":["801FB633 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F7FAB 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB44B 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F7FBA 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB45A 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7FB3 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB453 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\No Energy\\Player 1":{"note":"","data":["801F7FB3 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion Stage\\No Energy\\Player 2":{"note":"","data":["801FB453 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F971B 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FCBBB 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F972A 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FCBCA 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F9723 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FCBC3 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\No Energy\\Player 1":{"note":"","data":["801F9723 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room Stage\\No Energy\\Player 2":{"note":"","data":["801FCBC3 0000"],"options":null},"Kooky Courtyard Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F836B 0000"],"options":null},"Kooky Courtyard Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB80B 0000"],"options":null},"Kooky Courtyard Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F837A 0200"],"options":null},"Kooky Courtyard Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB81A 0200"],"options":null},"Kooky Courtyard Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F8373 00AA"],"options":null},"Kooky Courtyard Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB813 00AA"],"options":null},"Kooky Courtyard Stage\\No Energy\\Player 1":{"note":"","data":["801F8373 0000"],"options":null},"Kooky Courtyard Stage\\No Energy\\Player 2":{"note":"","data":["801FB813 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Can't be Stunned\\Player 1":{"note":"","data":["801F7E9B 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Can't be Stunned\\Player 2":{"note":"","data":["801FB33B 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Full Super Bar\\Player 1":{"note":"","data":["811F7EAA 0200"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Full Super Bar\\Player 2":{"note":"","data":["811FB34A 0200"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Infinite Energy\\Player 1":{"note":"","data":["801F7EA3 00AA"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\Infinite Energy\\Player 2":{"note":"","data":["801FB343 00AA"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\No Energy\\Player 1":{"note":"","data":["801F7EA3 0000"],"options":null},"Outhouse, Claynaveral Hanger, Camp Claynaveral Stages\\No Energy\\Player 2":{"note":"","data":["801FB343 0000"],"options":null},"Play As\\Player1":{"note":"","data":["801A868F 00??"],"options":{"Bad Mr. Frosty":"00","Blob":"01","Bonker":"02","Boogerman":"03","Dr. Kiln":"04","Earthworm Jim":"05","Houngan":"08","Icky Bod Clay":"09","Kung Pow":"0A","Sumo Santa":"0D","T-Hoppy":"0F","Taffy":"0E"}},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Can't be Stunned\\Player 1":{"note":"","data":["801F766B 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Can't be Stunned\\Player 2":{"note":"","data":["801FAB0B 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Full Super Bar\\Player 1":{"note":"","data":["811F767A 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Full Super Bar\\Player 2":{"note":"","data":["811FAB1A 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Infinite Energy\\Player 1":{"note":"","data":["801F7673 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\Infinite Energy\\Player 2":{"note":"","data":["801FAB13 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\No Energy\\Player 1":{"note":"","data":["801F7673 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Workship Stages\\No Energy\\Player 2":{"note":"","data":["801FAB13 0000"],"options":null},"Rubbage Reef Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F7F7B 0000"],"options":null},"Rubbage Reef Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FB41B 0000"],"options":null},"Rubbage Reef Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F7F8A 0200"],"options":null},"Rubbage Reef Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FB42A 0200"],"options":null},"Rubbage Reef Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7F83 00AA"],"options":null},"Rubbage Reef Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FB423 00AA"],"options":null},"Rubbage Reef Stage\\No Energy\\Player 1":{"note":"","data":["801F7F83 0000"],"options":null},"Rubbage Reef Stage\\No Energy\\Player 2":{"note":"","data":["801FB423 0000"],"options":null},"Rubbage Room Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801FA1AB 0000"],"options":null},"Rubbage Room Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FD64B 0000"],"options":null},"Rubbage Room Stage\\Full Super Bar\\Player 1":{"note":"","data":["811FA1BA 0200"],"options":null},"Rubbage Room Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FD65A 0200"],"options":null},"Rubbage Room Stage\\Infinite Energy\\Player 1":{"note":"","data":["801FA1B3 00AA"],"options":null},"Rubbage Room Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FD653 00AA"],"options":null},"Rubbage Room Stage\\No Energy\\Player 1":{"note":"","data":["801FA1B3 0000"],"options":null},"Rubbage Room Stage\\No Energy\\Player 2":{"note":"","data":["801FD653 0000"],"options":null},"Santa's Toy Factory Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F879B 0000"],"options":null},"Santa's Toy Factory Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FBC3B 0000"],"options":null},"Santa's Toy Factory Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F87AA 0200"],"options":null},"Santa's Toy Factory Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FBC4A 0200"],"options":null},"Santa's Toy Factory Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F87A3 00AA"],"options":null},"Santa's Toy Factory Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FBC43 00AA"],"options":null},"Santa's Toy Factory Stage\\No Energy\\Player 1":{"note":"","data":["801F87A3 0000"],"options":null},"Santa's Toy Factory Stage\\No Energy\\Player 2":{"note":"","data":["801FBC43 0000"],"options":null},"Stage Select":{"note":"","data":["801A868B 00??"],"options":{"Aquadome":"19","Backwash Bay":"16","Boogerhenge":"15","Camp Claynaveral":"02","Candy Factory":"00","Claynaveral Hangar":"01","Clayribbean Cruise":"11","Fiery Furnace":"0F","Freezing Fortress":"08","Ghastly Graveyard":"05","Grotto Gulch":"0A","Happy Harry's Hut":"07","Kiln's Hideout":"0E","Kiln's Laboratory":"0D","Kooky Courtyard":"13","Mudville Mansion":"04","Outhouse":"03","Refuse Room":"09","Research Room":"10","Rubbage Reef":"0C","Rubbage Room":"0B","Santa's Toy Factory":"14","Santa's Workship":"12","Spooky Spire":"06","Tribal Tower":"18","Tureen Toilet":"17"}},"Tribal Tower Stage\\Can't be Stunned\\Player 1":{"note":"","data":["801F770B 0000"],"options":null},"Tribal Tower Stage\\Can't be Stunned\\Player 2":{"note":"","data":["801FABAB 0000"],"options":null},"Tribal Tower Stage\\Full Super Bar\\Player 1":{"note":"","data":["811F771A 0200"],"options":null},"Tribal Tower Stage\\Full Super Bar\\Player 2":{"note":"","data":["811FABBA 0200"],"options":null},"Tribal Tower Stage\\Infinite Energy\\Player 1":{"note":"","data":["801F7713 00AA"],"options":null},"Tribal Tower Stage\\Infinite Energy\\Player 2":{"note":"","data":["801FABB3 00AA"],"options":null},"Tribal Tower Stage\\No Energy\\Player 1":{"note":"","data":["801F7713 0000"],"options":null},"Tribal Tower Stage\\No Energy\\Player 2":{"note":"","data":["801FABB3 0000"],"options":null}},"8E9D834E-1E8B29A9-C:50":{"All Tracks Unlocked":{"note":"","data":["80095F6E 0008","50000264 0000","80169347 0001","50000264 0000","80169473 0001","50000564 0000","8016959F 0001"],"options":null},"Bike Modifier\\Player 1":{"note":"","data":["8016983F 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 2":{"note":"","data":["8016988B 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 3":{"note":"","data":["801698D7 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 4":{"note":"","data":["80169923 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Extra Bikes Unlocked":{"note":"","data":["80167C13 0001","80167C17 0003"],"options":null},"Extra Levels Unlocked":{"note":"","data":["8016980B 0001","8016980F 0001"],"options":null},"Infinite Primary Weapon\\Player 1":{"note":"","data":["801651FD 00C8"],"options":null},"Infinite Primary Weapon\\Player 2":{"note":"","data":["8016596D 00C8"],"options":null},"Infinite Primary Weapon\\Player 3":{"note":"","data":["801660DD 00C8"],"options":null},"Infinite Primary Weapon\\Player 4":{"note":"","data":["8016684D 00C8"],"options":null},"Infinite Shields\\Player 1":{"note":"","data":["801651F5 00C8"],"options":null},"Infinite Shields\\Player 2":{"note":"","data":["80165965 00C8"],"options":null},"Infinite Shields\\Player 3":{"note":"","data":["801660D5 00C8"],"options":null},"Infinite Shields\\Player 4":{"note":"","data":["80166845 00C8"],"options":null},"Infinite Turbos\\Player 1":{"note":"","data":["801651CB 0003","801651CF 0003"],"options":null},"Infinite Turbos\\Player 2":{"note":"","data":["8016593B 0003","8016593F 0003"],"options":null},"Infinite Turbos\\Player 3":{"note":"","data":["801660AB 0003","801660AF 0003"],"options":null},"Infinite Turbos\\Player 4":{"note":"","data":["8016681B 0003","8016681F 0003"],"options":null},"Mode Select":{"note":"","data":["80097687 00??"],"options":{"Anti-Gravity":"08","Anti-Gravity \u0026 Fish Eye Lens":"0A","Boulder":"01","Boulder \u0026 Fish Eye Lens":"03","Boulder \u0026 Wireframe":"11","Fish Eye Lens":"02","Ghost Mode":"40","Magnify":"04","Stealth Mode":"20","Ugly Mode":"80","Wireframe":"10"}}},"8ECC02F0-7F8BDE81-C:45":{"Access All\\Bikes":{"note":"","data":["810FBCBE FFFF"],"options":null},"Access All\\Tracks":{"note":"","data":["810FBCC2 FFFF"],"options":null},"Infinite\\Nitro":{"note":"","data":["810B8E4C 42C8"],"options":null},"Infinite\\Nitro Always On":{"note":"","data":["810BB5A4 8004"],"options":null},"Laps 2 Race":{"note":"","data":["8016FC88 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}}},"8F0CC36D-C738259E-C:45":{"Day":{"note":"","data":["80136FBF 00??"],"options":{"Friday 12th":"0C","Friday 19th":"13","Friday 26th":"1A","Friday 5th":"05","Monday 15th":"0F","Monday 1st":"01","Monday 22nd":"16","Monday 29th":"1D","Monday 8th":"08","Saturday 13th":"0D","Saturday 27th":"1B","Saturday 30th":"14","Saturday 6th":"06","Sunday 14th":"0E","Sunday 21st":"15","Sunday 28th":"1C","Sunday 7th":"07","Thursday 11th":"0B","Thursday 18th":"12","Thursday 25th":"19","Thursday 4th":"04","Tuesday 16th":"10","Tuesday 23rd":"17","Tuesday 2nd":"02","Tuesday 30th":"1E","Tuesday 9th":"09","Wednesday 10th":"0A","Wednesday 17th":"11","Wednesday 24th":"18","Wednesday 31st":"1F","Wednesday 3rd":"03"}},"Hours":{"note":"","data":["80136FBE 00??"],"options":{"00 AM":"00","00 PM":"0C","01 AM":"01","01 PM":"0D","02 AM":"02","02 PM":"0E","03 AM":"03","03 PM":"0F","04 AM":"04","04 PM":"10","05 AM":"05","05 PM":"11","06 AM":"06","06 PM":"12","07 AM":"07","07 PM":"13","08 AM":"08","08 PM":"14","09 AM":"09","09 PM":"15","10 AM":"0A","10 PM":"16","11 AM":"0B","11 PM":"17"}},"Item Select":{"note":"","data":["81126EE8 ????"],"options":{"100 Bag":"2103","1000 Bag":"2100","10000 Bag":"2101","30000 Bag":"2102","Alarm Clock":"1DB3","Blue NES Game":"1D42","CD Player":"1DAC","Fish Tank (Fish Included!)":"1CA6","Flat Shell":"2514","Grandfather Clock":"1DA0","Grey NES Game":"1D2F","JukeBox":"1D50","Lamp":"1EA1","Light Blue NES Game":"1D37","Nook's Shirt":"2410","Orange":"2804","Orange NES Game":"1D2B","Pet Cage":"1C00","Pointy Shell":"2515","Purple NES Game":"1D3E","Record Player":"1D4C","Red NES Game":"1D33","Round Snowman Table":"1EAB","Snowman Bed":"1EAF","Snowman Fridge":"1EA5","Snowman Seat":"1EB0","Stereo":"1DA9","Stereo Kinda Thing":"1DA6","Stereo NES Colour":"1D47","Tall Red Cupboard":"1011","Yellow NES Game":"1D3A"}},"Max Cash":{"note":"","data":["813BC34C FFFF"],"options":null},"Minutes":{"note":"","data":["80136FBD 00??"],"options":{"00":"00","05":"05","10":"0A","15":"0F","20":"14","25":"19","30":"1E","35":"23","40":"28","45":"2D","50":"32","55":"37","59":"3B"}},"Month":{"note":"","data":["80136FC1 00??"],"options":{"April":"04","Aug":"08","Dec":"0C","Feb":"02","Jan":"01","July":"07","June":"06","March":"03","May":"05","Nov":"0B","Oct":"0A","Sept":"09"}},"Time Passes":{"note":"","data":["80136FD2 00??"],"options":{"Hours \u0026 Mins Fast":"10","Hours \u0026 Mins Medium":"05","Mins Like Seconds":"01","Time Normal":"00","Time Zooms By":"FF"}}},"8F12C096-45DC17E1-C:50":{"All enemies killed":{"note":"","data":["801E244E 0000","801E244F 0000"],"options":null},"Always Have\\50 pieces of corn":{"note":"","data":["801E2461 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E2450 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["D01E244E 0000","801E244E 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E2462 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E2455 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E2460 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D008FCE1 0010","801E23C6 0001","D008FCE1 0010","801E23D6 0001"],"options":null},"Start with Berry Weapon":{"note":"","data":["801E2457 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Unlock All Levels":{"note":"","data":["81099B70 000F"],"options":null}},"8F50B845-D729D22F-C:44":{"Infinite Attempts":{"note":"","data":["800ADA96 0001"],"options":null},"Invincibility":{"note":"Makes you also fly without any fuel","data":["800ADA92 0001"],"options":null},"Level \u0026 Scenario Select":{"note":"","data":["800ACD8C 000E"],"options":null},"infinite Ammo For All Guns":{"note":"","data":["800ADA91 0001"],"options":null}},"906C3F77-CE495EA1-C:45":{"255 Scarabs":{"note":"","data":["805C396D 00FF"],"options":null},"All Items":{"note":"","data":["805C4DBC FFFF"],"options":null},"All Spells":{"note":"","data":["805C4DBE 00BF","805C4DBF 00FF"],"options":null},"Disable Blur Filter":{"note":"","data":["81097E6C 0000","81097E6E 3242","81097E9C 0000","81097E9E 3242"],"options":null},"Disable Environment Updates":{"note":"","data":["81013E14 3C04","81013E16 0001"],"options":null},"Disable Unused Options Menu":{"note":"","data":["8008C853 003C","8008C857 003F"],"options":null},"Food Bags":{"note":"","data":["805C4DBF 00??"],"options":{"Large Food Bag":"80","Medium Food Bag":"40","Small Food Bag":"20"}},"Force Best Player Model":{"note":"","data":["81035B9C 081F","81035B9E C000","81035BA0 0000","81035BA2 0000","817F0000 3C02","817F0002 805C","817F0004 8C42","817F0006 1568","817F0008 1040","817F000A 0003","817F000C 0000","817F000E 0000","817F0010 2409","817F0012 0001","817F0014 A049","817F0016 00AD","817F0018 81C9","817F001A 00AD","817F001C 0800","817F001E D6E9","817F0020 0019","817F0022 10C0"],"options":null},"Get the Cape Claw Cage Key":{"note":"","data":["805C4C51 0001"],"options":null},"Infinite Health":{"note":"","data":["805C3971 007C","805C3965 007C"],"options":null},"Infinite Magic":{"note":"","data":["815C3968 0019","815C3974 0019"],"options":null},"Item Pickup Bug Fix":{"note":"","data":["814F92E2 05B1"],"options":null},"Lanterns":{"note":"","data":["805C4DCF 00??"],"options":{"Firefly Lantern":"01"}},"Levitate (Press L)":{"note":"","data":["814EA390 0802","814EA392 6C2D","814EA394 8FBC","814EA396 0030","8109B0B4 8FBF","8109B0B6 0034","8109B0B8 3C04","8109B0BA 800A","8109B0BC 8484","8109B0BE 7DC0","8109B0C0 2405","8109B0C2 0020","8109B0C4 14A4","8109B0C6 0003","8109B0C8 8606","8109B0CA 0010","8109B0CC 00C5","8109B0CE 3022","8109B0D0 A606","8109B0D2 0010","8109B0D4 0813","8109B0D6 A8E6","8109B0D8 0000","8109B0DA 0000"],"options":null},"Mushroom Bags":{"note":"","data":["805C4DC0 00??"],"options":{"Large Mushroom Bag":"38","Medium Mushroom Bag":"18"}},"Play as Fox":{"note":"You'll need to restart the level or save/load","data":["805C3C5B 0000","805C3C67 0000"],"options":null},"Play as Krystal":{"note":"You'll need to restart the level or save/load","data":["805C3C5B 0001","805C3C67 0001"],"options":null},"Primary Spells":{"note":"","data":["805C4DBE 00??"],"options":{"Dinosaur Eye":"20","Disguise Spell":"05","Illusion Spell":"04","Portal Spell":"80","Projectile Spell":"08","Shield":"10"}},"Replace Fox's Model with Sabre's":{"note":"","data":["81035B9C 081F","81035B9E C000","817F0000 2409","817F0002 0002","817F0004 0800","817F0006 D6E9","817F0008 A1C9","817F000A 00AD"],"options":null},"Secondary Spells":{"note":"","data":["805C4DBF 00??"],"options":{"Ice Blast Spell":"03","Mindread":"06","Mindread Spell":"02","Wizard Randorn (behaves like Projectile)":"04","Wizard Randorn (unique behavior)":"05"}},"Show Hidden Options Menu":{"note":"","data":["8008C857 0041"],"options":null},"Spawn Past the GuardClaw in the Mammoth Area near Swapstone Hollow (File 3)":{"note":"","data":["816DFBA4 C5D4","816DFBA6 0000","816DFBA8 C496","816DFBAA 0000","816DFBAC 44E5","816DFBAE 0000"],"options":null},"Teleport Tricky to Player (Press D-Pad Down)":{"note":"","data":["814FD888 0802","814FD88A 6C37","8109B0DC 3C02","8109B0DE 800A","8109B0E0 8442","8109B0E2 7DC0","8109B0E4 2403","8109B0E6 0400","8109B0E8 1443","8109B0EA 0007","8109B0EC 8E5C","8109B0EE 00E4","8109B0F0 8F82","8109B0F2 000C","8109B0F4 8F83","8109B0F6 0010","8109B0F8 8F9C","8109B0FA 0014","8109B0FC AE42","8109B0FE 0000","8109B100 AE43","8109B102 0004","8109B104 AE5C","8109B106 0008","8109B108 8E45","8109B10A 0000","8109B10C 0813","8109B10E F624","8109B110 8E46","8109B112 0008"],"options":null},"Ultra Widescreen (21:9)":{"note":"","data":["810BCE30 4017","810BCE32 AE14"],"options":null},"Walk Through Walls / Levitate":{"note":"L plus Dpad Up to disable clipping, L plus Dpad Down to re-enable clipping, L to levitate","data":["81012144 081F","81012146 C400","81012148 0000","8101214A 0000","817F1000 3C18","817F1002 805C","817F1004 8F18","817F1006 1568","817F1008 1300","817F100A 001E","817F100C 0000","817F100E 0000","817F1010 3C02","817F1012 800D","817F1014 8042","817F1016 D3F5","817F1018 2408","817F101A 0020","817F101C 1448","817F101E 0019","817F1020 0000","817F1022 0000","817F1024 3C08","817F1026 807F","817F1028 8102","817F102A 10F0","817F102C 1040","817F102E 0003","817F1030 0000","817F1032 0000","817F1034 2402","817F1036 00A4","817F1038 A302","817F103A 00FB","817F103C 3C08","817F103E 807F","817F1040 8102","817F1042 10F1","817F1044 5440","817F1046 0003","817F1048 A100","817F104A 10F1","817F104C 1000","817F104E 0005","817F1050 0000","817F1052 0000","817F1054 2402","817F1056 00AF","817F1058 A302","817F105A 00FB","817F105C 1000","817F105E 0009","817F1060 0000","817F1062 0000","817F1064 3C08","817F1066 807F","817F1068 8102","817F106A 10F0","817F106C 1040","817F106E 0005","817F1070 0000","817F1072 0000","817F1074 3C18","817F1076 805C","817F1078 8F18","817F107A 1568","817F107C 3C02","817F107E 4000","817F1080 AF02","817F1082 0028","817F1084 8E78","817F1086 0000","817F1088 0800","817F108A 4853","817F108C 8E02","817F108E 0000","D00CD3F4 0008","817F10F0 0100","D00CD3F4 0004","817F10F0 0001"],"options":null},"Widescreen (16:9)":{"note":"","data":["810BCE30 3FE3","810BCE32 D70A"],"options":null}},"90A59003-31089864-C:45":{"Always Normal Spirit\\Player 1":{"note":"","data":["801671F5 0032"],"options":null},"Always Normal Spirit\\Player 2":{"note":"","data":["80167689 0032"],"options":null},"Always Normal Spirit\\Player 3":{"note":"","data":["80167B1D 0032"],"options":null},"Always Normal Spirit\\Player 4":{"note":"","data":["80167FB1 0032"],"options":null},"Always Special\\Player 1":{"note":"","data":["80167235 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["801676C9 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["80167B5D 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["80167FF1 0004"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 1":{"note":"","data":["801671F4 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 2":{"note":"","data":["80167688 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 3":{"note":"","data":["80167B1C 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 4":{"note":"","data":["80167FB0 0064"],"options":null},"Have All Characters":{"note":"","data":["8109ED5A FFFF"],"options":null},"Infinite Create-A-Wrestler Attribute Points":{"note":"","data":["8011A81B 001E"],"options":null},"Max Attributes":{"note":"","data":["50000502 0000","8011A811 0032"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["801671F5 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["80167689 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["80167B1D 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["80167FB1 00FF"],"options":null},"No Spirit\\Player 1":{"note":"","data":["801671F5 0000"],"options":null},"No Spirit\\Player 2":{"note":"","data":["80167689 0000"],"options":null},"No Spirit\\Player 3":{"note":"","data":["80167B1D 0000"],"options":null},"No Spirit\\Player 4":{"note":"","data":["80167FB1 0000"],"options":null},"Specials Don't Run Out":{"note":"","data":["8112AD94 2400"],"options":null},"Timer Is Always 00:00":{"note":"","data":["8016F0AF 0000"],"options":null},"Ultimate Codes\\Player 1":{"note":"","data":["801671F4 0064"],"options":null},"Ultimate Codes\\Player 2":{"note":"","data":["80167688 0064"],"options":null},"Ultimate Codes\\Player 3":{"note":"","data":["80167B1C 0064"],"options":null},"Ultimate Codes\\Player 4":{"note":"","data":["80167FB0 0064"],"options":null},"Weapon Select\\Player 1":{"note":"","data":["81167236 0300","81166D90 ????","81166D92 0000","80166E50 0000"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 2":{"note":"","data":["811676CA 0300","81166DC0 ????","80166DC2 0001","80166E51 0001"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 3":{"note":"","data":["81167B5E 0300","81166DF0 ????","80166DF2 0002","80166E52 0002"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 4":{"note":"","data":["81167FF2 0300","81166E18 ????","81166E1A 0003","80166E53 0003"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}}},"90AF8D2C-E1AC1B37-C:00":{"Freeze Timer":{"note":"","data":["80161E95 0000"],"options":null},"Infinite 9 Credits":{"note":"","data":["8009F0DB 0009"],"options":null},"Infinite Lives":{"note":"","data":["800A1059 0001"],"options":null},"Infinite Max Energy":{"note":"This give you the most engery to jump really high","data":["800A1067 000F","800A106B 000F"],"options":null}},"90F5D9B3-9D0EDCF0-C:45":{"Have All Pikachus Magnemites":{"note":"","data":["801183BC 0000","801183BD 0000","801183BE 0000"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 1":{"note":"","data":["81285A18 03E7"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 2":{"note":"","data":["81286438 03E7"],"options":null},"Pokemon\\Inf Spells\\Player 1":{"note":"","data":["810AE580 FFFF","810AE582 FFFF","810AE5D4 FFFF","810AE5D6 FFFF","810AE628 FFFF","810AE62A FFFF"],"options":null},"Pokemon\\Inf Spells\\Player 2":{"note":"","data":["810AE79C FFFF","810AE79E FFFF","810AE7F0 FFFF","810AE7F2 FFFF","810AE844 FFFF","810AE846 FFFF"],"options":null},"Pokemon\\Max HP\\Player 1":{"note":"","data":["810AE586 03E7","810AE5DA 03E7","810AE62E 03E7"],"options":null},"Pokemon\\Max HP\\Player 2":{"note":"","data":["810AE7A2 03E7","810AE7F6 03E7","810AE84A 03E7"],"options":null},"Ultimate Code":{"note":"what's so ultimate about this code is it raises your Pokemon to its full potential. Even at Level 100, most Pokemon still have a way to go to raise their stats to the max. But with this code, you can instantly boost any Pokemon to its greatest potential!!!","data":["81171F3C FF01","81171F3E FF01","81171F40 FF01","81171F42 FF01","81171F44 FF01"],"options":null},"Widescreen":{"note":"","data":["81011E6C 240F","81011E6E 00F0","81011E70 240E","81011E72 01AB"],"options":null}},"91691C3D-F4AC5B4D-C:4A":{"Infinite\\Health\\Player 1":{"note":"","data":["8112A576 270F"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["8114AAF6 270F"],"options":null},"Infinite\\Stun Meter\\Player 1":{"note":"","data":["8012A579 00FF"],"options":null},"Infinite\\Stun Meter\\Player 2":{"note":"","data":["8014AAF9 00FF"],"options":null},"Play As\\Player 1":{"note":"","data":["801BBA54 00??"],"options":{"Airazor":"03","Cheetor":"02","Megatron":"04","Optimus Primal":"00","Rattrap":"01","Tarantulas":"05","Terrorsaur":"07","Waspinator":"06"}},"Play As\\Player 2":{"note":"","data":["801BBA55 00??"],"options":{"Airazor":"03","Cheetor":"02","Megatron":"04","Optimus Primal":"00","Rattrap":"01","Tarantulas":"05","Terrorsaur":"07","Waspinator":"06"}}},"916AE6B8-8817AB22-C:4A":{"Diffuculty Modifier":{"note":"","data":["8011252F 00??"],"options":{"Easy":"00","Hard":"02","Normal":"01"}},"Have All\\Gems":{"note":"","data":["8012FF07 00FF"],"options":null},"Have All\\Level Keys":{"note":"","data":["8012FDE3 0007","8012FDE7 0007","8012FDEB 0007","8012FDEF 0007","8012FDF3 0007","8012FDF7 0007","8012FDFB 0007"],"options":null},"Have All\\Weapons":{"note":"","data":["8012FDA7 0001","8012FDAB 0001","8012FDAF 0001","8012FDB3 0001","8012FDB7 0001","8012FDBB 0001","8012FDBF 0001","8012FDC3 0001","8012FDC7 0001","8012FDCB 0001","8012FDCF 0001","8012FDD3 0001"],"options":null},"Have\\Backpack":{"note":"","data":["8012FD9B 0001","8012FDDB 0001"],"options":null},"Have\\Cheat Menu":{"note":"","data":["811205F0 FFFF","811205F2 FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["81129030 AAE1","811E85EA F1FF"],"options":null},"Infinite\\Ammo":{"note":"","data":["8012FD7F 00FF","8012FD93 00FF","8012FD83 00FF","8012FD63 00FF","8012FD8B 00FF","8012FD67 00FF","8012FD8F 00FF","8012FD6B 00FF"],"options":null},"Infinite\\Body Armor":{"note":"","data":["8112FD96 5B23","8012FDD7 0001"],"options":null},"Infinite\\Health":{"note":"","data":["812C15F4 013C"],"options":null},"Infinite\\Lives":{"note":"","data":["8012FF0B 00FF"],"options":null}},"916B8B5B-780B85A4-C:45":{"Bonus Stage Character Modifier (Training Mode)":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["8018F1D3 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Enable Item Switch Menu (All Modes)":{"note":"Go into Vs Mode \u0026 then Vs Options \u0026 then Press Up On the D-Pad Or Analogue Stick \u0026 then click the A Button to enter the Item Switch Menu. This Cheat Works For All Modes","data":["811348E2 0004"],"options":null},"Give Kirby A Wierd Blow-Up":{"note":"","data":["8025E158 000A"],"options":null},"Have All Characters":{"note":"","data":["810A4938 0FF0"],"options":null},"P1 Press Down On D-Pad To Make Items Appear In Random Spots":{"note":"","data":["D109EFA4 0400","8118D0A2 0001"],"options":null},"Story Mode\\Always Get Pacifist (60,000 Points)":{"note":"","data":["810A4B6E 0000"],"options":null},"Story Mode\\Infinite Time":{"note":"","data":["810A4B2E 43CB"],"options":null},"Story Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code could also result freezing at the end of the Level.","data":["800A4B3B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 1\\Infinite Lives":{"note":"","data":["800A4B43 0004"],"options":null},"Story Mode\\Player 1\\Kirby B Button Move\\Congo Jungle":{"note":"","data":["80270ACF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Fighting Polygon Team":{"note":"","data":["8026271F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["80268B0F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Kirby's Dreamland":{"note":"","data":["8026DB3F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Master Hand Stage":{"note":"","data":["80271C4F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Metal Mario Stage":{"note":"","data":["80263597 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Peach's Castle":{"note":"","data":["80263D9F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Planet Zebes":{"note":"","data":["8026FFA7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Saffron City":{"note":"","data":["80273A97 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["802710F7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["80268E4F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Low % Health":{"note":"","data":["810A4B86 0000"],"options":null},"Story Mode\\Player 1\\Stage Select":{"note":"","data":["D1045188 0010","800A4AE7 00??"],"options":{"Bonus Stage 1":"03","Bonus Stage 2":"07","Bonus Stage 3 (Race To The Finish)":"0B","Final Stage (Vs Master Hand)":"0D","Stage 1 (Vs Link)":"00","Stage 10 (Fighting Polygon Team vs30)":"0C","Stage 2 (Vs Yoshi Team vs 18)":"01","Stage 3 (Vs Fox McCloud)":"02","Stage 4 (Freezes?)":"04","Stage 5 (Vs Pikachu)":"05","Stage 6 (Freezes?)":"06","Stage 7 (Vs Kirby Team vs8)":"08","Stage 8 (Vs Samus Aran)":"09","Stage 9 (Vs Metal Mario)":"0A"}},"Story Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4BAF 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 2\\Infinite Lives":{"note":"","data":["800A4BB7 0004"],"options":null},"Story Mode\\Player 2\\Low % Health":{"note":"","data":["810A4BFA 0000"],"options":null},"Story Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4C23 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 3\\Infinite Lives":{"note":"","data":["800A4C2B 0004"],"options":null},"Story Mode\\Player 3\\Low % Health":{"note":"","data":["810A4C6E 0000"],"options":null},"Story Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4C97 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 4\\Infinite Lives":{"note":"","data":["800A4C9F 0004"],"options":null},"Story Mode\\Player 4\\Low % Health":{"note":"","data":["810A4CE2 0000"],"options":null},"Story Mode\\Skip Straight To Master Hand":{"note":"","data":["800A4AE7 000D"],"options":null},"VS. Mode\\Have Mushroom Kindom":{"note":"","data":["800A4937 00FF"],"options":null},"VS. Mode\\Infinite Time":{"note":"","data":["810A4D1E 43CB"],"options":null},"VS. Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4D2B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["802639EF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["8026BF87 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["8026E2B7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Low % Health":{"note":"","data":["810A4D76 0000"],"options":null},"VS. Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4D9F 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 2\\Low % Health":{"note":"","data":["810A4DEA 0000"],"options":null},"VS. Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4E13 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 3\\Low % Health":{"note":"","data":["810A4E5E 0000"],"options":null},"VS. Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A4E87 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 4\\Low % Health":{"note":"","data":["810A4ED2 0000"],"options":null},"Widescreen":{"note":"Minor Menu Misalignments","data":["8103B884 3FE3","8110D288 3C07","8110D28A 3FE8","810D0F64 3C07","810D0F66 3FE8"],"options":null}},"918E2D60-F865683E-C:50":{"Access\\All Cars":{"note":"","data":["50000402 0000","813DFC6A 0001"],"options":null},"Access\\All Challenges":{"note":"","data":["50000502 0000","813DD428 0001"],"options":null},"Access\\All Cups":{"note":"","data":["50000302 0000","812CB7C8 0001"],"options":null},"Always 1st":{"note":"","data":["813E00E8 0001"],"options":null},"Infinite\\Boomerang's":{"note":"","data":["8039B464 0004","8039B467 0004","8039B469 0009"],"options":null},"Infinite\\Bullet's":{"note":"","data":["8039B464 0007","8039B467 0007","8039B469 0009"],"options":null},"Infinite\\CREDITS":{"note":"","data":["80388F3D 0003"],"options":null},"Infinite\\Magnet's":{"note":"","data":["8039B464 0001","8039B467 0001","8039B469 0009"],"options":null},"Infinite\\Seeker's":{"note":"","data":["8039B464 0005","8039B467 0005","8039B469 0009"],"options":null},"Infinite\\Shield's":{"note":"","data":["8039B464 0008","8039B467 0008","8039B469 0009"],"options":null},"Infinite\\Stinger's":{"note":"","data":["8039B464 0003","8039B467 0003","8039B469 0009"],"options":null},"Infinite\\Stopper's":{"note":"","data":["8039B464 0006","8039B467 0006","8039B469 0009"],"options":null},"Infinite\\Turbo's":{"note":"","data":["8039B464 0000","8039B467 0000","8039B469 0009"],"options":null},"Laps To Race":{"note":"","data":["813BBD5C 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Psycho Weapons":{"note":"","data":["8039B469 0003","802B85A3 0003"],"options":null}},"91B66D42-16AC4E46-C:44":{"Have Cheats Menu":{"note":"Go into the Cheats From the main Menu \u0026 put on the Ones you want","data":["810CF716 01FF"],"options":null},"Infinite Balls":{"note":"","data":["802FD21F 0064"],"options":null},"Infinite Credits":{"note":"","data":["802FD215 0064"],"options":null},"Infinite Energy":{"note":"","data":["802FD209 0064"],"options":null},"Infinite Sponge Darts":{"note":"","data":["802FD223 0064"],"options":null},"Infinite Suckers":{"note":"","data":["802FD222 0064"],"options":null},"Start with 9999 Monster Score":{"note":"","data":["812FD20E 270F"],"options":null}},"93053075-261E0F43-C:50":{"All Players On 1st Shot":{"note":"","data":["813013DA 0000"],"options":null}},"930C29EA-939245BF-C:45":{"All Gold Medals":{"note":"","data":["50000502 0000","81259130 0101"],"options":null},"Infinite\\Tools Options":{"note":"","data":["8025A624 00??"],"options":{"Fan":"04","Frying Pan":"01","Ghost":"02","Invisible":"06","Rat Face":"08","Rock":"07","Rocket":"05","Super Ghost":"03","Super Rat Face":"09","Wings":"0A"}},"Infinite\\Trick Game 300 Points":{"note":"","data":["8125A7F2 012C"],"options":null},"Infinite\\Weapons Options":{"note":"","data":["8025A622 00??","8025A623 0009"],"options":{"Bomb":"05","Freeze Shot":"03","Parachute":"02","Slap Stick":"01","Snowman":"04","Whirlwind":"06"}},"Max Coins":{"note":"","data":["8125A5BE 270F","8025A5BF 00C8"],"options":null},"No Frame Skip MP":{"note":"Makes it run at 30fps instead of 15fps.","data":["8009AFD7 0000"],"options":null},"Open Extra Characters \u0026 Snowboards":{"note":"Battle Mode Only","data":["8125916E 0101","80259170 0001","8025915C 0001","8125915E 0101","81259160 0101"],"options":null}},"931AEF3F-EF196B90-C:4A":{"Infinite\\Armor\\Player 1":{"note":"","data":["8011D4DF 0064"],"options":null},"Infinite\\Armor\\Player 2":{"note":"","data":["8011D4E3 0064"],"options":null},"Infinite\\Bombs\\Player 1":{"note":"","data":["8011D4E7 0003"],"options":null},"Infinite\\Bombs\\Player 2":{"note":"","data":["8011D4EB 0003"],"options":null},"Level 11 Vulcan Cannon\\Player 1":{"note":"","data":["80123A2B 000A"],"options":null},"Level 11 Vulcan Cannon\\Player 2":{"note":"","data":["80123BCB 000A"],"options":null},"Press L For Rapid Fire Select\\Player 1":{"note":"","data":["D011BDF1 0020","8011D50F 00??"],"options":{"On Flak":"14","On Nuke \u0026 Laser":"28"}},"Press L For Rapid Fire Select\\Player 2":{"note":"","data":["D011BDF9 0020","8011D513 00??"],"options":{"On Flak":"14","On Nuke \u0026 Laser":"28"}}},"93945F48-5C0F2E30-C:50":{"Bonus Stage Character Modifier (Training Mode)":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["80197A33 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Give Kirby A Wierd Blow-Up":{"note":"","data":["802669B8 000A"],"options":null},"Have All Characters":{"note":"","data":["810AD198 0FF0"],"options":null},"Jump off to win":{"note":"","data":["810AD3A2 0000"],"options":null},"P1 Press Down On D-Pad To Make Items Appear In Random Spots":{"note":"","data":["D10A7804 0400","81195902 0001"],"options":null},"Story Mode\\Always Get Pacifist (60,000 Points)":{"note":"","data":["810AD3CE 0000"],"options":null},"Story Mode\\Infinite Time":{"note":"","data":["810AD38E 43CB"],"options":null},"Story Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code could also result freezing at the end of the Level.","data":["800AD39B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 1\\Infinite Lives":{"note":"","data":["800AD3A3 0004"],"options":null},"Story Mode\\Player 1\\Kirby B Button Move\\Congo Jungle":{"note":"","data":["8027932F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Fighting Polygon Team":{"note":"","data":["8026AF7F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["8027136F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Kirby's Dreamland":{"note":"","data":["8027639F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Master Hand Stage":{"note":"","data":["8027A4AF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Metal Mario Stage":{"note":"","data":["8026BDF7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Peach's Castle":{"note":"","data":["8026C5FF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Planet Zebes":{"note":"","data":["80278807 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Saffron City":{"note":"","data":["8027C2F7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["80279957 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["802716AF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Low % Health":{"note":"","data":["810AD3E6 0000"],"options":null},"Story Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD40F 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 2\\Infinite Lives":{"note":"","data":["800AD417 0004"],"options":null},"Story Mode\\Player 2\\Low % Health":{"note":"","data":["810AD45A 0000"],"options":null},"Story Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD483 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 3\\Infinite Lives":{"note":"","data":["800AD48B 0004"],"options":null},"Story Mode\\Player 3\\Low % Health":{"note":"","data":["810AD4CE 0000"],"options":null},"Story Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD4F7 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 4\\Infinite Lives":{"note":"","data":["800AD4FF 0004"],"options":null},"Story Mode\\Player 4\\Low % Health":{"note":"","data":["810AD542 0000"],"options":null},"Story Mode\\Skip Straight To Master Hand":{"note":"","data":["800AD347 000D"],"options":null},"VS. Mode\\Have Mushroom Kindom":{"note":"","data":["800AD197 00FF"],"options":null},"VS. Mode\\Infinite Time":{"note":"","data":["810AD57E 43CB"],"options":null},"VS. Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD58B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["8026C24F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["802747E7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["80276B17 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Low % Health":{"note":"","data":["810AD5D6 0000"],"options":null},"VS. Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD5FF 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 2\\Low % Health":{"note":"","data":["810AD64A 0000"],"options":null},"VS. Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD673 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 3\\Low % Health":{"note":"","data":["810AD6BE 0000"],"options":null},"VS. Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800AD6E7 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 4\\Low % Health":{"note":"","data":["810AD732 0000"],"options":null}},"93EB3F7E-81675E44-C:44":{"Access All Levels":{"note":"","data":["8008A9D6 0001","8008A9EA 0001","8008AA12 0001","8008AA62 0001","8008AA76 0001","8008AA8A 0001","8008AA9E 0001","8008AAB2 0001","8008AAC6 0011","8008AADA 0021","8008AAEE 0001","8008AB16 0011","8008AB2A 0041","8008AB3E 0021","8008AB52 0081","8008AB66 0001","8008AB7A 0081","8008AB8E 0001","8008ABB6 0001","8008ABDE 0001","8008ABF2 0011","8008AC06 0021","8008AC56 0001","8008AF3A 0001","8008AF4E 0001","8008AF62 0001","8008AF76 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81094150 0063","81094152 0063","81094154 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A9297 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810866C2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810864C4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80094305 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A92B5 00??","800A92C5 00??","800A92D5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"944FAFC4-B288266A-C:00":{"Infinite Health":{"note":"","data":["812128D0 42C8","812128D2 0000"],"options":null},"Infinite Heat Vision":{"note":"","data":["812128E0 42C8","812128E2 0000"],"options":null},"Infinite Ice Breath":{"note":"","data":["812128E4 42C8","812128E6 0000"],"options":null},"Infinite Speed Boost":{"note":"","data":["812128D8 42C8","812128DA 0000"],"options":null},"Infinite Timer\\Level 2":{"note":"","data":["8119B927 003B","8119B92B 0009"],"options":null},"Infinite X-Ray":{"note":"","data":["812128F0 42C8","812128F2 0000"],"options":null}},"94807E6B-60CC62E4-C:4A":{"1P Mode\\Stage Select":{"note":"","data":["D0162FEB 0001","80162FEB 00??"],"options":{"Car-kun Arle game":"0E","Car-kun Schezo game":"09","Satan Arle game":"0D","Satan Schezo game":"08"}},"Endless Mode\\Player Level 99 Player 1":{"note":"","data":["801632E7 0063"],"options":null},"Endless Mode\\Player Level 99 Player 2":{"note":"","data":["801632EB 0063"],"options":null},"Instant 7th Step of Chain\\Player 1":{"note":"","data":["D0163A2B 0001","80163A2B 0007"],"options":null},"Instant 7th Step of Chain\\Player 2":{"note":"","data":["D0163E5B 0001","80163E5B 0007"],"options":null},"Maximum Score\\Player 1":{"note":"","data":["811632CC 05F5","811632CE E0FF"],"options":null},"Maximum Score\\Player 2":{"note":"","data":["811632D0 05F5","811632D2 E0FF"],"options":null},"Mode Total Continues 0":{"note":"","data":["801632AF 0000","801632C7 0000"],"options":null},"Nazo Puyo Mode\\All Practice Stages Cleared 4":{"note":"","data":["50000402 0000","811631E8 FFFF"],"options":null},"No Warning Icons\\Player 1":{"note":"","data":["80164EA3 0000"],"options":null},"No Warning Icons\\Player 2":{"note":"","data":["80164EA7 0000"],"options":null},"Options Complete Demo Viewer":{"note":"","data":["8016320B 0007","8116320C FFFF","8116320E FFFF"],"options":null}},"95286EB4-B76AD58F-C:45":{"100% Efficiency":{"note":"","data":["80092E4B 0064"],"options":null},"100% Leadership":{"note":"","data":["80092E47 0064"],"options":null},"GDI\\Instant\\Air Strike":{"note":"","data":["800962A4 0032","800C4E50 00FF"],"options":null},"GDI\\Instant\\Build Aircraft":{"note":"","data":["810C4F12 FFFF"],"options":null},"GDI\\Instant\\Build Buildings":{"note":"","data":["810C4F1E FFFF"],"options":null},"GDI\\Instant\\Build Units":{"note":"","data":["810C4F16 FFFF"],"options":null},"GDI\\Instant\\Build Vehicles":{"note":"","data":["810C4F1A FFFF"],"options":null},"GDI\\Instant\\Ion Cannon":{"note":"","data":["800962A5 0033","800C4E30 00FF"],"options":null},"GDI\\Instant\\Nuclear Strike":{"note":"","data":["800962A6 0034","800C4E70 00FF"],"options":null},"GDI\\Max Cash":{"note":"","data":["810C4F06 FFFF","810C4F08 0001"],"options":null},"GDI\\Max Power":{"note":"","data":["810C4F26 FFFF","810C4F28 0001"],"options":null},"GDI\\Maximum Buildings Lost":{"note":"","data":["80092E5F 00C8"],"options":null},"GDI\\Maximum Killed":{"note":"","data":["80092E53 00C8"],"options":null},"GDI\\Mission 4\\Infinite Health APC #1":{"note":"","data":["800ABFB1 00C8"],"options":null},"GDI\\Mission 4\\Infinite Health APC #2":{"note":"","data":["800AC03D 00C8"],"options":null},"GDI\\Mission 4\\Infinite Health Hum-Vee":{"note":"","data":["800ABE99 0096"],"options":null},"GDI\\Mission 6\\Infinite Health Commando":{"note":"","data":["800B56CD 0050"],"options":null},"GDI\\Mission 6\\Infinite Health Transportational Helicopter":{"note":"","data":["800BFC95 005A"],"options":null},"GDI\\No Buildings Lost":{"note":"","data":["80092E5F 0000"],"options":null},"GDI\\None Killed":{"note":"","data":["80092E53 0000"],"options":null},"Max Total Score":{"note":"","data":["81092E42 FFFF"],"options":null},"NOD\\Instant\\Air Strike":{"note":"","data":["800962A4 0032","800C4FF8 00FF"],"options":null},"NOD\\Instant\\Build Aircraft":{"note":"","data":["810C50BA FFFF"],"options":null},"NOD\\Instant\\Build Buildings":{"note":"","data":["810C50C6 FFFF"],"options":null},"NOD\\Instant\\Build Units":{"note":"","data":["810C50BE FFFF"],"options":null},"NOD\\Instant\\Build Vehicles":{"note":"","data":["810C50C2 FFFF"],"options":null},"NOD\\Instant\\Ion Cannon":{"note":"","data":["800962A5 0033","800C4FD8 00FF"],"options":null},"NOD\\Instant\\Nuclear Strike":{"note":"","data":["800962A6 0034","800C5018 00FF"],"options":null},"NOD\\Max Cash":{"note":"","data":["810C50AE FFFF","810C50B0 0001"],"options":null},"NOD\\Max Power":{"note":"","data":["810C50CE FFFF","810C50D0 0001"],"options":null},"NOD\\Maximum Buildings Lost":{"note":"","data":["80092E5B 00C8"],"options":null},"NOD\\Maximum Killed":{"note":"","data":["80092E4F 00C8"],"options":null},"NOD\\No Buildings Lost":{"note":"","data":["80092E5B 0000"],"options":null},"NOD\\None Killed":{"note":"","data":["80092E4F 0000"],"options":null},"Time Spent On Mission":{"note":"","data":["80092E3B 00??"],"options":{"Max Time":"FF","No Time":"00"}},"Tons Of Ending Credits":{"note":"","data":["81092E3C 0FFF","81092E3E FFFF"],"options":null}},"95B2B30B-2B6415C1-C:50":{"Boots Of Speed Select\\Player 1":{"note":"","data":["8113F128 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113F2C4 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113F460 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113F5FC ????"],"options":{"Off":"0000","On":"03FF"}},"Enable Cheat Menu":{"note":"","data":["80137D33 0005","81137C56 07FF"],"options":null},"Have All\\Armour":{"note":"","data":["8013F081 0019","8013F085 0014","8013F089 0014","8013F08D 0014"],"options":null},"Have All\\Items And Artifacts\\Player 1":{"note":"","data":["8013F091 0001","8013F093 00FF","8013F095 0002","8013F097 00FF","8013F099 0003","8013F09B 00FF","8013F09D 0004","8013F09F 00FF","8013F0A1 0005","8013F0A3 00FF","8013F0A5 0006","8013F0A7 00FF","8013F0A9 0007","8013F0AB 00FF","8013F0AD 0008","8013F0AF 00FF","8013F0B1 0009","8013F0B3 00FF","8013F0B5 000A","8013F0B7 00FF","8013F0B9 000B","8013F0BB 00FF","8013F0BD 000C","8013F0BF 00FF","8013F0C1 000D","8013F0C3 00FF","8013F0C5 000E","8013F0C7 00FF","8013F0C9 000F","8013F0CB 00FF","8013F0CD 0010","8013F0CF 00FF","8013F0D1 0011","8013F0D3 00FF","8013F0D5 0012","8013F0D7 00FF","8013F0D9 0013","8013F0DB 00FF","8013F0DD 0014","8013F0DF 00FF","8013F0E1 0015","8013F0E3 00FF","8013F0E5 0016","8013F0E7 00FF","8013F0E9 0017","8013F0EB 00FF","8013F0ED 0018","8013F0EF 00FF","8013F0F1 0019","8013F0F3 00FF","8013F0F5 001B","8013F0F7 00FF","8013F0F9 001C","8013F0FB 00FF","8013F0FD 001D","8013F0FF 00FF","8013F101 001E","8013F103 00FF","8013F105 001F","8013F107 00FF","8013F109 0020","8013F10B 00FF","8013F119 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113F12C 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113F2C8 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113F464 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113F600 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013F145 00FF","8013F147 00FF","8013F149 00FF","8013F14B 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013F2E1 00FF","8013F2E3 00FF","8013F2E5 00FF","8013F2E7 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013F47D 00FF","8013F47F 00FF","8013F481 00FF","8013F483 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013F619 00FF","8013F61B 00FF","8013F61D 00FF","8013F61F 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013F14D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013F2E9 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013F485 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013F621 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013F14F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013F2EB 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013F487 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013F623 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113F11C ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113F2B8 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113F454 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113F5F0 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113F11C FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113F2B8 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113F454 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113F5F0 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8013F123 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113F2BE ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113F45A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113F5F6 ????"],"options":{"Off":"0000","On":"03FF"}}},"964ADD0B-B29213DB-C:4A":{"Access All In-Game Cheats":{"note":"Pause Gameplay To Access","data":["81157E46 000F","81157E56 FFFF"],"options":null},"Access All Navigation Cards":{"note":"","data":["80157E9B 0005"],"options":null},"Access Secret Worlds":{"note":"","data":["81152946 0064"],"options":null},"Infinite Lives":{"note":"","data":["81157EAE 0063"],"options":null},"Max \u0026 Total Gold":{"note":"","data":["80157E4B 0063","80157E4F 0063"],"options":null}},"96747EB4-104BB243-C:4A":{"All levels Complete":{"note":"This activate's solo missions, give all medals on solo missions, activate cheats, activate cinemas, and who knows what else. I just don't Have\\the time to identify these codes. I know that some of this is creditted to Zap2. I don't Have\\the time to cut those codes out.","data":["50003201 0000","800A2940 0001","50003201 0000","800A2972 0001","50003201 0000","800A29A4 0001"],"options":null},"Have All Weapons\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80206B60 0007","801EDB60 0007","801D4B60 0007"],"options":null},"Have All Weapons\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["802087D0 0007","801EF7D0 0007","801D67D0 0007"],"options":null},"Infinite Ammo\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["802062EF 00FF","801ED2EF 00FF","801D42EF 00FF","80205B4B 00FF","801ECB4B 00FF","801D3B4B 00FF"],"options":null},"Infinite Ammo\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80207F5F 00FF","801EEF5F 00FF","801D5F5F 00FF","802077BB 00FF","801EE7BB 00FF","801D57BB 00FF"],"options":null},"Infinite Health\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["812053CC 3F80","811EC3CC 3F80","811D33CC 3F80"],"options":null},"Infinite Health\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8120703C 3F80","811EE03C 3F80","811D503C 3F80"],"options":null},"Infinite Shield\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["812053E0 3F80","811E35A0 3F80","811CA5A0 3F80"],"options":null},"Infinite Shield\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["811FE210 3F80","811E5210 3F80","811CC210 3F80"],"options":null}},"979B263E-F8470004-C:50":{"Access Gargos Character":{"note":"","data":["80127DC8 0001"],"options":null},"Access In-Game Cheats":{"note":"","data":["801283DC 0006"],"options":null},"Fast Kick \u0026 Punch":{"note":"","data":["801D357E 0010"],"options":null},"Infinite Health":{"note":"","data":["801D3584 0078"],"options":null},"Invincible":{"note":"","data":["801D35D4 000A"],"options":null},"Max Blood":{"note":"","data":["80127D5D 0003"],"options":null},"No Time Limit":{"note":"","data":["80127D5B 0001"],"options":null}},"98DF9DFC-6606C189-C:45":{"Belongings\\Slot 01":{"note":"","data":["80189084 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 02":{"note":"","data":["80189085 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 03":{"note":"","data":["80189086 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 04":{"note":"","data":["80189087 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 05":{"note":"","data":["80189088 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 06":{"note":"","data":["80189089 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 07":{"note":"","data":["8018908A 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Belongings\\Slot 08":{"note":"","data":["8018908B 00??"],"options":{"??":"37","???":"35","Berry Of Full Moon Plant":"22","Big Fish":"27","Blue Egg Shaped Device":"36","Blue Feather":"0A","Blue Plant":"06","Blue Rock":"2F","Boulder":"02","Cabbages":"0F","Cake":"07","Candy":"2C","Chicken":"33","Chocolate":"2D","Chocolate Bar Picture":"38","Cookie":"09","Corn":"11","Cotton Candy":"29","Dumpling":"28","Edible Herbs":"24","Eggplant":"12","Eggs":"14","Fish":"26","Fodder":"39","Fried Octopus":"2A","Gold Milk":"18","Green Bag":"3C","Green Box":"21","High Quality Wool":"1A","Iron-Ore":"2E","L Size Milk":"17","Lumber":"03","M Size Milk":"16","Medicinal Herbs":"23","Milk":"15","Moondrop Plant":"04","Moonlight Stone":"31","Mushrooms":"1F","Nothing":"00","Pie":"08","Pink Liquid In A Bottle":"0B","Pink-Cat-Mint Plant":"05","Poisonous Mushroom":"20","Pontata Root":"32","Potatoes":"0E","Purple Bag":"3F","Rare Metal":"30","Red Bag":"3D","Red Box":"0C","Roasted Corn":"2B","Sheared Wool":"19","Small Fish":"25","Strawberries":"13","Tan Bag":"3B","Tomatoes":"10","Tropical Fruit":"1D","Turnips":"0D","Very Berry Fruit":"1C","Walnuts":"1E","Weeds":"01","White Bag":"3A","Wild Grapes":"1B","Yellow Bag":"3E"}},"Have\\All Pics":{"note":"","data":["8118905A FFFF"],"options":null},"Have\\Max Shipped In Bin!":{"note":"","data":["8023738A FFFF"],"options":null},"Have\\Win Dog Races":{"note":"","data":["801886B0 00FF"],"options":null},"Infinite\\Cake Card Points":{"note":"","data":["80181B10 0063"],"options":null},"Infinite\\Chicken Feed":{"note":"","data":["80237411 005C"],"options":null},"Infinite\\Flower Card Points":{"note":"","data":["802373F0 0063"],"options":null},"Infinite\\Fodder Spout (Sheep And Cows)":{"note":"","data":["81180714 0063"],"options":null},"Infinite\\Horse Stamina":{"note":"","data":["802F5015 0002"],"options":null},"Infinite\\Lumber":{"note":"","data":["81189E50 03E7"],"options":null},"Infinite\\Medals For Horse \u0026 Dog Races":{"note":"","data":["81189B06 270F","81205206 270F"],"options":null},"Infinite\\Money":{"note":"","data":["811FD60E FFFF"],"options":null},"Infinite\\Stamina":{"note":"","data":["80189060 00FF"],"options":null},"Infinite\\Watering Can Uses":{"note":"","data":["8016FBCD 0004"],"options":null},"Item\\Slot 01":{"note":"","data":["8018908E 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 02":{"note":"","data":["8018908F 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 03":{"note":"","data":["80189090 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 04":{"note":"","data":["80189091 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 05":{"note":"","data":["80189092 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 06":{"note":"","data":["80189093 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 07":{"note":"","data":["80189094 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 08":{"note":"","data":["80189095 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 09":{"note":"","data":["80189096 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 10":{"note":"","data":["80189097 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 11":{"note":"","data":["80189098 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 12":{"note":"","data":["80189099 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 13":{"note":"","data":["8018909A 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 14":{"note":"","data":["8018909B 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 15":{"note":"","data":["8018909C 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 16":{"note":"","data":["8018909D 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 17":{"note":"","data":["8018909E 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 18":{"note":"","data":["8018909F 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 19":{"note":"","data":["801890A0 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 20":{"note":"","data":["801890A1 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 21":{"note":"","data":["801890A2 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 22":{"note":"","data":["801890A3 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 23":{"note":"","data":["801890A4 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Item\\Slot 24":{"note":"","data":["801890A5 00??"],"options":{"??":"08","Book From Library":"09","Broken Music Box":"04","Cake Card":"03","Dog Race Ticket":"0F","Embroidered Hankerchief":"11","Empty Metal Bag":"0D","Flower Bath Crystals":"14","Flower Card":"02","GoodLuck Charm":"0C","Hand - Knit Socks":"12","Horse Race Ticket":"0E","Lucky Bracelet":"13","Marble":"0B","Nothing":"00","Ocarina":"01","Old Wine":"06","Potpourri":"10","Scroll To Bury":"0A","Stamina Carrot":"15"}},"Make\\Ann Love You":{"note":"","data":["801C3F93 00FF"],"options":null},"Make\\Elli Love You":{"note":"","data":["801C3F92 00FF"],"options":null},"Make\\Karen Love You":{"note":"","data":["801C3F94 00FF"],"options":null},"Make\\Maria Love You":{"note":"","data":["801C3F90 00FF"],"options":null},"Make\\Popuri Love You":{"note":"","data":["801C3F91 00FF"],"options":null},"Tool\\Slot 01":{"note":"","data":["80189075 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 02":{"note":"","data":["80189076 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 03":{"note":"","data":["80189077 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 04":{"note":"","data":["80189078 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 05":{"note":"","data":["80189079 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 06":{"note":"","data":["8018907A 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 07":{"note":"","data":["8018907B 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}},"Tool\\Slot 08":{"note":"","data":["8018907C 00??"],"options":{"??":"1E","Axe":"03","Ball No Picture":"15","Bell":"07","Bird Feed":"14","Blue Feather":"1C","Blue Mist Seeds":"13","Boulder No Picture":"20","Brush":"08","Cabbage Seeds":"0C","Clippers":"09","Corn Seeds":"0E","Eggplant Seeds":"0F","Empty Bottle":"1D","Feeding Bottle":"16","Fishing Pole":"18","Grass Seeds":"1B","Hammer":"04","Hoe":"02","Medicine For Cows":"1A","Milker":"06","Miracle Potion":"19","Moon Drop Grass Seeds":"11","Nothing":"00","Pink-Cat-Mint Seeds":"12","Potato Seeds":"0B","Sickle":"01","Strawberry Seeds":"10","Tomato Seeds":"0D","Turnip Seeds":"0A","Watering Can":"05","Weeds No Picture":"1F"}}},"98F9F2D0-03D9F09C-C:50":{"Foul score will stay at 0":{"note":"","data":["802EF725 0000"],"options":null},"Have 5 games won":{"note":"","data":["802EF721 0005"],"options":null},"Pot 1 to win Set points to 25 in straight pool":{"note":"","data":["802EF71D 0019"],"options":null},"Score 0 points in shark skins":{"note":"","data":["802EF723 0000"],"options":null}},"99150E18-1266E6A5-C:45":{"1 Million Points":{"note":"","data":["8119054C 000F","8119054E 4240"],"options":null},"Access In-Game Cheat Menu":{"note":"","data":["50001104 0000","800E9DD8 0001"],"options":null},"All Complete\\Bob Burnquist":{"note":"","data":["810E8924 FFFF","810E8926 FFFF","810E8928 FFFF","810E892A FFFF","810E892C FFFF","810E892E FFFF","810E8930 FFFF","810E8932 FFFF"],"options":null},"All Complete\\Tony Hawk":{"note":"","data":["810E8840 FFFF","810E8842 FFFF","810E8844 FFFF","810E8846 FFFF","810E8848 FFFF","810E884A FFFF","810E884C FFFF","810E884E FFFF"],"options":null},"All Gaps\\Hanger":{"note":"","data":["800E9CC5 00FF","810E9CC6 FFFF"],"options":null},"All Gaps\\Marseille":{"note":"","data":["810E9CDC FFFF","810E9CDE FFFF","800E9CE3 000F"],"options":null},"All Gaps\\Philadelphia":{"note":"","data":["810E9D0C FFFF","810E9D0E FFFF","810E9D12 0FFF"],"options":null},"All Gaps\\School II":{"note":"","data":["810E9CD0 FFFF","810E9CD2 FFFF","810E9CD6 0FFF"],"options":null},"All Gaps\\Skatestreet":{"note":"","data":["810E9D00 FFFF","810E9D02 FFFF","800E9D07 000F"],"options":null},"All Gaps\\Venice Beach":{"note":"","data":["810E9CF4 FFFF","810E9CF6 FFFF","810E9CFA 0FFF"],"options":null},"All Tricks Available\\Custom Player 1":{"note":"","data":["810E9454 FFFF","810E9456 FFFF","810E9458 FFFF","810E945A FFFF","810E945C FFFF","810E945E FFFF"],"options":null},"All Tricks Available\\Custom Player 2":{"note":"","data":["810E9538 FFFF","810E953A FFFF","810E953C FFFF","810E953E FFFF","810E9540 FFFF","810E9542 FFFF"],"options":null},"All Tricks Available\\Custom Player 3":{"note":"","data":["810E961C FFFF","810E961E FFFF","810E9620 FFFF","810E9622 FFFF","810E9624 FFFF","810E9626 FFFF"],"options":null},"All Tricks Available\\Custom Player 4":{"note":"","data":["810E9700 FFFF","810E9702 FFFF","810E9704 FFFF","810E9706 FFFF","810E9708 FFFF","810E970A FFFF"],"options":null},"Always Special On Cheat":{"note":"","data":["800E9DEC 0001"],"options":null},"Infinte Time":{"note":"","data":["810E87AA 0000"],"options":null},"Max Cash\\Andrew Reynolds":{"note":"","data":["810E903C 000F","810E903E 423F","810E9040 000F","810E9042 423F"],"options":null},"Max Cash\\Bob Burnquist":{"note":"","data":["810E891C 000F","810E891E 423F","810E8920 000F","810E8922 423F"],"options":null},"Max Cash\\Bucky Lasek":{"note":"","data":["810E8D90 000F","810E8D92 423F","810E8D94 000F","810E8D96 423F"],"options":null},"Max Cash\\Chad Muska":{"note":"","data":["810E8F58 000F","810E8F5A 423F","810E8F5C 000F","810E8F5E 423F"],"options":null},"Max Cash\\Custom Player 1":{"note":"","data":["810E93CC 000F","810E93CE 423F","810E93D0 000F","810E93D2 423F"],"options":null},"Max Cash\\Custom Player 2":{"note":"","data":["810E94B0 000F","810E94B2 423F","810E94B4 000F","810E94B6 423F"],"options":null},"Max Cash\\Custom Player 3":{"note":"","data":["810E9594 000F","810E9596 423F","810E9598 000F","810E959A 423F"],"options":null},"Max Cash\\Custom Player 4":{"note":"","data":["810E9678 000F","810E967A 423F","810E967C 000F","810E967E 423F"],"options":null},"Max Cash\\Elissa Steamer":{"note":"","data":["810E9204 000F","810E9206 423F","810E9208 000F","810E920A 423F"],"options":null},"Max Cash\\Eric Koston":{"note":"","data":["810E8CAC 000F","810E8CAE 423F","810E8CB0 000F","810E8CB2 423F"],"options":null},"Max Cash\\Geoff Rowley":{"note":"","data":["810E9120 000F","810E9122 423F","810E9124 000F","810E9126 423F"],"options":null},"Max Cash\\Jamie Thomas":{"note":"","data":["810E92E8 000F","810E92EA 423F","810E92EC 000F","810E92EE 423F"],"options":null},"Max Cash\\Kareem Campbell":{"note":"","data":["810E8AE4 000F","810E8AE6 423F","810E8AE8 000F","810E8AEA 423F"],"options":null},"Max Cash\\Officer Dick":{"note":"","data":["810E975C 000F","810E975E 423F","810E9760 000F","810E9762 423F"],"options":null},"Max Cash\\Rodney Mullen":{"note":"","data":["810E8E74 000F","810E8E76 423F","810E8E78 000F","810E8E7A 423F"],"options":null},"Max Cash\\Rune Glifberg":{"note":"","data":["810E8BC8 000F","810E8BCA 423F","810E8BCC 000F","810E8BCE 423F"],"options":null},"Max Cash\\Steve Caballero":{"note":"","data":["810E8A00 000F","810E8A02 423F","810E8A04 000F","810E8A06 423F"],"options":null},"Perfect Balance Cheat":{"note":"","data":["800E9DE8 0001"],"options":null},"Tricks Available\\Andrew Reynolds":{"note":"","data":["810E90C4 FFFF","810E90C6 FFFF","810E90C8 FFFF","810E90CA FFFF","810E90CC FFFF","810E90CE FFFF"],"options":null},"Tricks Available\\Bob Burnquist":{"note":"","data":["810E89A4 FFFF","810E89A6 FFFF","810E89A8 FFFF","810E89AA FFFF","810E89AC FFFF","810E89AE FFFF"],"options":null},"Tricks Available\\Chad Muska":{"note":"","data":["810E8FE0 FFFF","810E8FE2 FFFF","810E8FE4 FFFF","810E8FE6 FFFF","810E8FE8 FFFF","810E8FEA FFFF"],"options":null},"Tricks Available\\Elissa Steamer":{"note":"","data":["810E928C FFFF","810E928E FFFF","810E9290 FFFF","810E9292 FFFF","810E9294 FFFF","810E9296 FFFF"],"options":null},"Tricks Available\\Eric Koston":{"note":"","data":["810E8D34 FFFF","810E8D36 FFFF","810E8D38 FFFF","810E8D3A FFFF","810E8D3C FFFF","810E8D3E FFFF"],"options":null},"Tricks Available\\Geoff Rowley":{"note":"","data":["810E91A8 FFFF","810E91AA FFFF","810E91AC FFFF","810E91AE FFFF","810E91B0 FFFF","810E91B2 FFFF"],"options":null},"Tricks Available\\Jamie Thomas":{"note":"","data":["810E9370 FFFF","810E9372 FFFF","810E9374 FFFF","810E9376 FFFF","810E9378 FFFF","810E937A FFFF"],"options":null},"Tricks Available\\Kareem Campbell":{"note":"","data":["810E8B6C FFFF","810E8B6E FFFF","810E8B70 FFFF","810E8B72 FFFF","810E8B74 FFFF","810E8B76 FFFF"],"options":null},"Tricks Available\\Officer Dick":{"note":"","data":["810E97E4 FFFF","810E97E6 FFFF","810E97E8 FFFF","810E97EA FFFF","810E97EC FFFF","810E97EE FFFF"],"options":null},"Tricks Available\\Rodney Mullen":{"note":"","data":["810E8EFC FFFF","810E8EFE FFFF","810E8F00 FFFF","810E8F02 FFFF","810E8F04 FFFF","810E8F06 FFFF"],"options":null},"Tricks Available\\Rune Glifberg":{"note":"","data":["810E8C50 FFFF","810E8C52 FFFF","810E8C54 FFFF","810E8C56 FFFF","810E8C58 FFFF","810E8C5A FFFF"],"options":null},"Tricks Available\\Spider Man":{"note":"","data":["810E99AC FFFF","810E99AE FFFF","810E99B0 FFFF","810E99B2 FFFF","810E99B4 FFFF","810E99B6 FFFF"],"options":null},"Tricks Available\\Steve Caballero":{"note":"","data":["810E8A88 FFFF","810E8A8A FFFF","810E8A8C FFFF","810E8A8E FFFF","810E8A90 FFFF","810E8A92 FFFF"],"options":null},"Tricks Available\\Tony Hawk":{"note":"","data":["810E88C0 FFFF","810E88C2 FFFF","810E88C4 FFFF","810E88C6 FFFF","810E88C8 FFFF","810E88CA FFFF"],"options":null},"Unlock Hoffman Factory \u0026 Skate Heaven":{"note":"","data":["800EA0CB 003F"],"options":null},"Unlock\\Officer Dick":{"note":"","data":["800E9DDC 0001","800F087B 0001"],"options":null},"Unlock\\Spider Man":{"note":"","data":["800E9DD8 0001","800F0B9B 0001"],"options":null}},"99179359-2FE7EBC3-C:50":{"Access All\\Bonus Coins":{"note":"","data":["50000F02 0000","810A6124 0007"],"options":null},"Access All\\Paw Coins":{"note":"","data":["50000F02 0000","810A60E8 03FF"],"options":null},"Access All\\Special Remote Controls":{"note":"","data":["810A60E4 FFFF","810A60E6 FFFF"],"options":null},"Access All\\ordinary Remote Controls":{"note":"","data":["50000F01 0000","800A60A8 000F"],"options":null},"Crazy Tail":{"note":"","data":["8110955E 0001"],"options":null},"Infinite\\Health":{"note":"","data":["810A60C8 0005"],"options":null},"Infinite\\Lives":{"note":"","data":["810A60C6 0064"],"options":null}},"9AB3B50A-BC666105-C:44":{"Access In-Game Cheat Menu":{"note":"To Access Pause Game Play. This gives you access to In-game Cheats like God Mode,Level Select,All Items Etc","data":["81137CD6 07FF","80137DB3 0005"],"options":null},"Boots Of Speed Select\\Player 1":{"note":"","data":["8113F538 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113F6D4 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113F870 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113FA0C ????"],"options":{"Off":"0000","On":"03FF"}},"Have All\\Armour":{"note":"","data":["8013F491 0019","8013F495 0014","8013F499 0014","8013F49D 0014"],"options":null},"Have All\\Items And Artifacts\\Player 1":{"note":"","data":["8013F4A1 0001","8013F4A3 00FF","8013F4A5 0002","8013F4A7 00FF","8013F4A9 0003","8013F4AB 00FF","8013F4AD 0004","8013F4AF 00FF","8013F4B1 0005","8013F4B3 00FF","8013F4B5 0006","8013F4B7 00FF","8013F4B9 0007","8013F4BB 00FF","8013F4BD 0008","8013F4BF 00FF","8013F4C1 0009","8013F4C3 00FF","8013F4C5 000A","8013F4C7 00FF","8013F4C9 000B","8013F4CB 00FF","8013F4CD 000C","8013F4CF 00FF","8013F4D1 000D","8013F4D3 00FF","8013F4D5 000E","8013F4D7 00FF","8013F4D9 0010","8013F4DB 00FF","8013F4DD 0011","8013F4DF 00FF","8013F4E1 0012","8013F4E3 00FF","8013F4E5 0013","8013F4E7 00FF","8013F4E9 0014","8013F4EB 00FF","8013F4ED 0015","8013F4EF 00FF","8013F4F1 0016","8013F4F3 00FF","8013F4F5 0017","8013F4F7 00FF","8013F4F9 0018","8013F4FB 00FF","8013F4FD 0019","8013F4FF 00FF","8013F501 001A","8013F503 00FF","8013F505 001B","8013F507 00FF","8013F509 001C","8013F50B 00FF","8013F50D 001D","8013F50F 00FF","8013F511 001E","8013F513 00FF","8013F515 001F","8013F517 00FF","8013F519 0020","8013F51B 00FF","8013F529 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113F53C 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113F6D8 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113F874 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113FA10 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013F555 00FF","8013F557 00FF","8013F559 00FF","8013F55B 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013F6F1 00FF","8013F6F3 00FF","8013F6F5 00FF","8013F6F7 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013F88D 00FF","8013F88F 00FF","8013F891 00FF","8013F893 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013FA29 00FF","8013FA2B 00FF","8013FA2D 00FF","8013FA2F 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013F55D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013F2E9 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013F485 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013F621 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013F55F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013F2EB 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013F487 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013F623 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113F52C ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113F6C8 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113F864 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113FA00 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113F52C FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113F2B8 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113F454 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113F5F0 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8113F533 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113F6CE ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113F86A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113FA06 ????"],"options":{"Off":"0000","On":"03FF"}}},"9B500E8E-E90550B3-C:50":{"Have All Guns In Chest":{"note":"","data":["50000E04 0100","810E59F4 05FF"],"options":null},"Have All Main Items In Chest":{"note":"If you want items that are not listed in the Chest, then just use the Have Item On Slot Select code to have what you desire.","data":["810E5A2C 17FF","810E5A30 1EFF","810E5A34 1FFF","810E5A38 23FF","50000404 0100","810E5A3C 25FF","810E5A4C 2AFF","810E5A50 2BFF","50000304 0100","810E5A54 2EFF","50000F04 0100","810E5A60 32FF","810E5A9C 43FF","50000504 0100","810E5AA0 47FF","50000404 0100","810E5AB4 53FF","50000C04 0100","810E5AC4 58FF"],"options":null},"Have\\Fine Condition Always":{"note":"","data":["810DDEE4 0000"],"options":null},"Have\\Item On Slot Select\\Slot 01":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59C8 00??","800E59C9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 02":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59CC 00??","800E59CD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 03":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59D0 00??","800E59D1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 04":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59D4 00??","800E59D5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 05":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59D8 00??","800E59D9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 06":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59DC 00??","800E59DD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 07":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59E0 00??","800E59E1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 08":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59E4 00??","800E59E5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 09":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59E8 00??","800E59E9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 10":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E59EC 00??","800E59ED 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Infinite\\Health":{"note":"","data":["810DDE22 00C8"],"options":null},"Infinite\\Time":{"note":"","data":["800E57BF 0010"],"options":null},"Play As":{"note":"This allows you to select what character you wish to play as. Just slect on load and select as normal at the menu and when in game you will be the character of your choice","data":["810DDC38 ????"],"options":{"Ada (can crash the game)":"0E80","Cheryl":"0F80","Claire Original":"0380","Claire as Biker":"0980","Claire without jacket":"0780","Claires body Leons outfit":"0B80","Hunk (can crash the game)":"0C80","Leon Original":"0280","Leon Wounded":"0680","Leon as Biker":"0A80","Leon as Stars":"0880","To Fu":"0D80"}},"Play Extra Mission":{"note":"This allows you to select what extra mission you wish to play. Just slect on load and carry on as normal at the menu and when in game you will be the character of your choice Do not use at the same time as [Resident Evil 2 Mode]","data":["810DDBEE 00??"],"options":{"The 4th Survior":"48","To-Fu":"49"}},"Quick Chest Access":{"note":"With this code, all you have to do to access the chest, is hold L and Press Start.","data":["D1014FA4 0020","81122598 0100"],"options":null},"Quick Save Access":{"note":"(1 Anytime, anywhere, press Z and B at the same time. You'll get the standard typewriter text: \"It's an old typewriter. You can save your progress with this.\" Note that you must, of course, have an ink ribbon to save. 2) Choose \"Yes\" and you'll be able to save normally. Instead of the location name, your save file will say \"Scenario 1st\" or \"Scenario 2nd.\" 3) When you load your save file, you'll have to skip through the intro, but when the game loads up you'll be exactly where you saved!","data":["D1014FA4 6000","810E5428 8007","D1014FA4 6000","810E542A 0E30"],"options":null},"[Saves Always 0]":{"note":"No matter how many saves you do ithis makes the game think you Have\\not saved.","data":["810E8B50 0000"],"options":null}},"9C40016E-63BFFE91-C:4A":{"All Bonus Buildings":{"note":"","data":["8123D22A 0007","8123D21C 000F","81155BF8 03FF","81157A6C 0004"],"options":null},"Infinite Money":{"note":"","data":["8123D190 05F5","8123D192 E0FF"],"options":null},"Unlock All Scenarios":{"note":"","data":["810DD938 FFFF"],"options":null}},"9C663069-80F24A80-C:50":{"Lower Left Character\\Coin Options":{"note":"","data":["800FFB09 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800DDD1A 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800FFB0C 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["800FFB39 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800DDD5E 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800FFB3C 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Mini Game\\Max 99 Coins":{"note":"","data":["800FFF61 0063"],"options":null},"Mini Game\\Unlimited 99 lives":{"note":"","data":["800FFF58 0063"],"options":null},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["800FFAA9 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800DDC92 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800FFAAC 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["800FFAD9 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800DDCD6 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800FFADC 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Widescreen":{"note":"","data":["8101E3D2 3FE3","8101EBE6 3FE3","D1105E52 3FAA","81105E52 3FE3","8104DDEC 0801","8104DDEE 86D1","8104DDF0 C602","8104DDF2 0004","81061B44 3C1B","81061B46 3FAB","81061B48 449B","81061B4A 0000","81061B4C 4600","81061B4E 1082","81061B50 8E06","81061B52 0008","81061B54 0801","81061B56 377D","81061B58 4405","81061B5A 1000","81025D68 0801","81025D6A 86D7","81025D6C C602","81025D6E 0024","81061B5C 3C1B","81061B5E 800E","81061B60 8F7B","81061B62 FADC","81061B64 101B","81061B66 0004","81061B68 2400","81061B6C 3C1B","81061B6E 3FAB","81061B70 449B","81061B72 0000","81061B74 4600","81061B76 1082","81061B78 4405","81061B7A 1000","81061B7C 0800","81061B7E 975C","81061B80 8E06","81061B82 0028"],"options":null}},"9C7318D2-24AE0DC1-C:4A":{"Access All\\Cars":{"note":"","data":["8002CA97 000B"],"options":null},"Access All\\Difficulties":{"note":"","data":["8002CA9B 0004"],"options":null},"Access All\\Multiplayer Levels":{"note":"","data":["50000901 0000","8002CAA0 0001"],"options":null},"Access All\\Tracks":{"note":"","data":["8002CA93 0006"],"options":null},"Access In-Game Cheats":{"note":"","data":["50001301 0000","8002CAA8 0001"],"options":null},"Damage Select":{"note":"","data":["8002C833 00??"],"options":{"Double":"02","Half":"01","Normal":"00","Triple":"03"}},"Health Select":{"note":"","data":["8002C81F 00??"],"options":{"Bad Only":"02","Good Only":"01","Normal":"00","Off":"03"}},"Infinite Continues":{"note":"","data":["8002C6F7 0064"],"options":null},"Low Timer":{"note":"","data":["81025874 3001"],"options":null},"Power-Up Select":{"note":"","data":["8002C81B 00??"],"options":{"?":"05","Health":"06","Invincible":"07","Mines":"01","Nitros":"04","Normal":"00","Off":"08","Rockets":"02","Stealer":"03"}},"Radar":{"note":"","data":["8002C82F 00??"],"options":{"Off":"01","On":"00"}},"Speed units\\Kph or Mph":{"note":"","data":["81025908 ????"],"options":{"Kph":"0100","Mph":"0001"}},"View Mode Select?":{"note":"","data":["8002C82B 00??"],"options":{"Fisheye":"03","Flip":"02","Fog":"01","Normal":"00"}},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\01 Coventry Cove":{"note":"","data":["8036B243 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\02 Mount Mayhem":{"note":"","data":["80351283 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\03 Inferno Isle":{"note":"","data":["80364153 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\04 Sunset Sands":{"note":"","data":["8034242B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\05 Metro Madness":{"note":"","data":["8035CAFB 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\06 Wicked Woods":{"note":"","data":["80354A33 0064"],"options":null}},"9C8FB2FA-9B84A09B-C:45":{"Have All Pikachus Magnemites":{"note":"","data":["801183BC 0000","801183BD 0000","801183BE 0000"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 1":{"note":"","data":["81285A18 03E7"],"options":null},"Inf HP\\In Battle All Pokemon\\Player 2":{"note":"","data":["81286438 03E7"],"options":null},"Pokemon\\Inf Spells\\Player 1":{"note":"","data":["810AE580 FFFF","810AE582 FFFF","810AE5D4 FFFF","810AE5D6 FFFF","810AE628 FFFF","810AE62A FFFF"],"options":null},"Pokemon\\Inf Spells\\Player 2":{"note":"","data":["810AE79C FFFF","810AE79E FFFF","810AE7F0 FFFF","810AE7F2 FFFF","810AE844 FFFF","810AE846 FFFF"],"options":null},"Pokemon\\Max HP\\Player 1":{"note":"","data":["810AE586 03E7","810AE5DA 03E7","810AE62E 03E7"],"options":null},"Pokemon\\Max HP\\Player 2":{"note":"","data":["810AE7A2 03E7","810AE7F6 03E7","810AE84A 03E7"],"options":null},"Ultimate Code":{"note":"what's so ultimate about this code is it raises your Pokemon to its full potential. Even at Level 100, most Pokemon still have a way to go to raise their stats to the max. But with this code, you can instantly boost any Pokemon to its greatest potential!!!","data":["81171F3C FF01","81171F3E FF01","81171F40 FF01","81171F42 FF01","81171F44 FF01"],"options":null}},"9C961069-F5EA488D-C:4A":{"Player 1 Health":{"note":"If you select the Low option, It will give your opponent an easy win over over you","data":["8110CF68 ????"],"options":{"Low":"4220","Max":"0000"}},"Player 2 Health":{"note":"If you select the Low option, It will give your opponent an easy win over over you","data":["8110CF6C ????"],"options":{"Low":"4220","Max":"0000"}}},"9CAB6AEA-87C61C00-C:45":{"Boots Of Speed Select\\Player 1":{"note":"","data":["8113DB58 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 2":{"note":"","data":["8113DCF4 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 3":{"note":"","data":["8113DE90 ????"],"options":{"Off":"0000","On":"03FF"}},"Boots Of Speed Select\\Player 4":{"note":"","data":["8113E02C ????"],"options":{"Off":"0000","On":"03FF"}},"Enable Cheat Menu":{"note":"","data":["80136773 0005","81136696 FFFF"],"options":null},"Have All\\Armour":{"note":"","data":["8013DAB1 0019","8013DAB5 0014","8013DAB9 0014","8013DABD 0014"],"options":null},"Have All\\Items And Artifacts":{"note":"","data":["8013DAC1 0001","8013DAC3 00FF","8013DAC5 0002","8013DAC7 00FF","8013DAC9 0003","8013DACB 00FF","8013DACD 0004","8013DACF 00FF","8013DAD1 0005","8013DAD3 00FF","8013DAD5 0006","8013DAD7 00FF","8013DAD9 0007","8013DADB 00FF","8013DADD 0008","8013DADF 00FF","8013DAE1 0009","8013DAE3 00FF","8013DAE5 000A","8013DAE7 00FF","8013DAE9 000B","8013DAEB 00FF","8013DAED 000C","8013DAEF 00FF","8013DAF1 000D","8013DAF3 00FF","8013DAF5 000E","8013DAF7 00FF","8013DAF9 000F","8013DAFB 00FF","8013DAFD 0010","8013DAFF 00FF","8013DB01 0011","8013DB03 00FF","8013DB05 0012","8013DB07 00FF","8013DB09 0013","8013DB0B 00FF","8013DB0D 0014","8013DB0F 00FF","8013DB11 0015","8013DB13 00FF","8013DB15 0016","8013DB17 00FF","8013DB19 0017","8013DB1B 00FF","8013DB1D 0018","8013DB1F 00FF","8013DB21 0019","8013DB23 00FF","8013DB25 001B","8013DB27 00FF","8013DB29 001C","8013DB2B 00FF","8013DB2D 001D","8013DB2F 00FF","8013DB31 001E","8013DB33 00FF","8013DB35 001F","8013DB37 00FF","8013DB39 0020","8013DB3B 00FF","8013DB49 0020"],"options":null},"Have All\\Keys\\Player 1":{"note":"","data":["8113DB5C 07FF"],"options":null},"Have All\\Keys\\Player 2":{"note":"","data":["8113DCF8 07FF"],"options":null},"Have All\\Keys\\Player 3":{"note":"","data":["8113DE94 07FF"],"options":null},"Have All\\Keys\\Player 4":{"note":"","data":["8113E030 07FF"],"options":null},"Have All\\Weapons\\Player 1":{"note":"","data":["8013DB75 00FF","8013DB79 00FF","8013DB7B 00FF","8013DB77 00FF"],"options":null},"Have All\\Weapons\\Player 2":{"note":"","data":["8013DD11 00FF","8013DD13 00FF","8013DD15 00FF","8013DD17 00FF"],"options":null},"Have All\\Weapons\\Player 3":{"note":"","data":["8013DEAD 00FF","8013DEAF 00FF","8013DEB1 00FF","8013DEB3 00FF"],"options":null},"Have All\\Weapons\\Player 4":{"note":"","data":["8013E049 00FF","8013E04B 00FF","8013E04D 00FF","8013E04F 00FF"],"options":null},"Have Infinite\\Blue Mana\\Player 1":{"note":"","data":["8013DB7D 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 2":{"note":"","data":["8013DD19 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 3":{"note":"","data":["8013DEB5 00CF"],"options":null},"Have Infinite\\Blue Mana\\Player 4":{"note":"","data":["8013E051 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 1":{"note":"","data":["8013DB7F 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 2":{"note":"","data":["8013DD1B 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 3":{"note":"","data":["8013DEB7 00CF"],"options":null},"Have Infinite\\Green Mana\\Player 4":{"note":"","data":["8013E053 00CF"],"options":null},"Icon Of The Defender Select\\Player 1":{"note":"Do not use with Invincibillity Cheat","data":["8113DB4C ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 2":{"note":"Do not use with Invincibillity Cheat","data":["8113DCE8 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 3":{"note":"Do not use with Invincibillity Cheat","data":["8113DE84 ????"],"options":{"Off":"0000","On":"03FF"}},"Icon Of The Defender Select\\Player 4":{"note":"Do not use with Invincibillity Cheat","data":["8113E020 ????"],"options":{"Off":"0000","On":"03FF"}},"Invincibility\\Player 1":{"note":"","data":["8113DB4C FFFF"],"options":null},"Invincibility\\Player 2":{"note":"","data":["8113DCE8 FFFF"],"options":null},"Invincibility\\Player 3":{"note":"","data":["8113DE84 FFFF"],"options":null},"Invincibility\\Player 4":{"note":"","data":["8113E020 FFFF"],"options":null},"Wings Of Wraith Select\\Player 1":{"note":"","data":["8113DB53 ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 2":{"note":"","data":["8113DCEE ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 3":{"note":"","data":["8113DE8A ????"],"options":{"Off":"0000","On":"03FF"}},"Wings Of Wraith Select\\Player 4":{"note":"","data":["8113E026 ????"],"options":{"Off":"0000","On":"03FF"}}},"9CCE5B1D-6351E283-C:00":{"Invaders\\Have Infinite 99 Credits":{"note":"","data":["802C40AB 0099"],"options":null},"Invaders\\Have Infinite Max Lives":{"note":"","data":["802C41BF 0008"],"options":null}},"9CE02E22-206EF1B0-C:4A":{"1 Lap To Race":{"note":"In Single and Chapionship Modes use the Laps In Race Cheat or use the in game setting to choose how many laps you want per race and them use this cheat and amount of Laps to have only have 1 left if needed.","data":["80098A5D 00??"],"options":{"12 of 12 Laps":"0C","15 of 15 Laps":"0F","18 of 18 Laps":"12","21 of 21 Laps":"15","24 of 24 Laps":"18","27 of 27 Laps":"1B","3 of 3 Laps":"03","30 of 30 Laps":"1E","6 of 6 Laps":"06","9 of 9 Laps":"09"}},"Always 1st Place":{"note":"","data":["81098A58 0001"],"options":null},"Car Select":{"note":"","data":["800C50B1 00??"],"options":{"Car 1":"00","Car 10":"09","Car 11":"0A","Car 12":"0B","Car 13":"0C","Car 14":"0D","Car 15":"0E","Car 16":"0F","Car 17":"10","Car 18":"11","Car 2":"01","Car 3":"02","Car 4":"03","Car 5":"04","Car 6":"05","Car 7":"06","Car 8":"07","Car 9":"08"}},"Freeze\\Lap Timer":{"note":"Single and Chapionship Race Modes","data":["800967E5 0000","800967E7 0000"],"options":null},"Freeze\\Pit Timer":{"note":"Single and Chapionship Race Modes","data":["800968A5 0000","800968A7 0000"],"options":null},"Freeze\\Timer Challenge Timer":{"note":"Timer Challenge","data":["800C4F87 0050"],"options":null},"Laps\\In Race\\Chapionship Race Mode":{"note":"","data":["800C4ED3 00??"],"options":{"12 Laps In Race":"0C","15 Laps In Race":"0F","18 Laps In Race":"12","21 Laps In Race":"15","24 Laps In Race":"18","27 Laps In Race":"1B","3 Laps In Race":"03","30 Laps In Race":"1E","6 Laps In Race":"06","9 Laps In Race":"09"}},"Laps\\In Race\\Single Race Mode":{"note":"","data":["800C4ED1 00??"],"options":{"12 Laps In Race":"0C","15 Laps In Race":"0F","18 Laps In Race":"12","21 Laps In Race":"15","24 Laps In Race":"18","27 Laps In Race":"1B","3 Laps In Race":"03","30 Laps In Race":"1E","6 Laps In Race":"06","9 Laps In Race":"09"}},"Pit Stops\\Championship":{"note":"","data":["800C4F13 00??"],"options":{"Off":"00","On":"01"}},"Pit Stops\\Single Race Mode":{"note":"","data":["800C4F11 00??"],"options":{"Off":"00","On":"01"}},"Track Direction\\Championship":{"note":"","data":["800C4EF3 00??"],"options":{"Normal":"00","Reverse":"01"}},"Weather\\Championship":{"note":"","data":["800C4F33 00??"],"options":{"Dry":"00","Night":"03","Wet":"01"}},"Weather\\Single Race Mode":{"note":"","data":["800C4F31 00??"],"options":{"Dry":"00","Night":"03","Wet":"01"}}},"9D7E3C4B-E60F4A6C-C:4A":{"Have All Weapons":{"note":"","data":["811ED1E2 FFFF"],"options":null},"Infinite\\Ammo (All Weapons)":{"note":"","data":["8125E330 A05B"],"options":null},"Infinite\\Armor":{"note":"","data":["801ED273 0064"],"options":null},"Infinite\\Experience":{"note":"","data":["801ED253 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["801ED251 0064"],"options":null},"Max\\Acro":{"note":"","data":["801ED25B 0007"],"options":null},"Max\\Attack":{"note":"","data":["801ED257 0007"],"options":null},"Max\\Power":{"note":"","data":["801ED25D 0007"],"options":null},"Max\\Speed":{"note":"","data":["801ED259 0007"],"options":null},"Max\\Vitality":{"note":"","data":["801ED255 0007"],"options":null}},"9E330C01-8C0314BA-C:45":{"Enable Battle Mode And Levels":{"note":"","data":["8008ED6E 0012"],"options":null},"GS Button For 255 Spare0 Missiles":{"note":"","data":["8814E648 00FF"],"options":null},"Gore Mode":{"note":"","data":["8008ED67 0012"],"options":null},"Infinite Lives":{"note":"","data":["8004013C 0005"],"options":null},"Infinite Shields":{"note":"","data":["D014E5E2 0011","8114E5E0 1000"],"options":null},"Lagfix":{"note":"","data":["80028E22 000D"],"options":null},"Sixty Frames":{"note":"","data":["800233C3 0001"],"options":null}},"9E8FCDFA-49F5652B-C:45":{"Player 1\\1-Hit Death":{"note":"","data":["D01D3484 0078","801D3484 0001"],"options":null},"Player 1\\Fast\\Jump Walk":{"note":"","data":["801D347C 0001"],"options":null},"Player 1\\Fast\\Punch Kick":{"note":"","data":["801D347E 0010"],"options":null},"Player 1\\Fight Gargos Immediately":{"note":"","data":["8012834B 000A"],"options":null},"Player 1\\Fulgore\\Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3478 0020","801D3479 0090","801D34C5 0092","801D3527 005E"],"options":null},"Player 1\\Fulgore\\Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3478 0023","801D3479 00F0","801D34C5 0080","801D3527 00AF"],"options":null},"Player 1\\Infinite Energy":{"note":"","data":["801D3484 0069"],"options":null},"Player 1\\Play As":{"note":"","data":["802C8CB8 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 1\\Slow Jump Walk":{"note":"","data":["801D347D 0050"],"options":null},"Player 1\\Spinal Always Has All Skulls":{"note":"","data":["801D3523 0006"],"options":null},"Player 1\\Undefeated Players Scroll By Quickly":{"note":"","data":["802C8CE8 0007"],"options":null},"Player 1\\Untouchable":{"note":"","data":["801D34D4 000A"],"options":null},"Player 1\\Wins Score":{"note":"","data":["8012830A 00FF"],"options":null},"Player 2\\Fast\\Jump Walk":{"note":"","data":["801D357C 0001"],"options":null},"Player 2\\Fast\\Punch Kick":{"note":"","data":["801D357E 0010"],"options":null},"Player 2\\Fulgore Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3578 0020","801D3579 0090","801D35C5 0092","801D3527 005E"],"options":null},"Player 2\\Fulgore Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3578 0023","801D3579 00F0","801D35C5 0080","801D3527 00AF"],"options":null},"Player 2\\Infinite Energy":{"note":"","data":["801D3584 0078"],"options":null},"Player 2\\Play As":{"note":"","data":["8004EA9D 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 2\\Slow\\Jump Walk":{"note":"","data":["801D357D 0050"],"options":null},"Player 2\\Slow\\Punch Kick":{"note":"","data":["801D357F 0050"],"options":null},"Player 2\\Spinal Always Has All Skulls":{"note":"","data":["801D3623 0006"],"options":null},"Player 2\\Untouchable":{"note":"","data":["801D34D5 000A"],"options":null},"Unlock All Options":{"note":"","data":["8012834C 0006"],"options":null}},"9E8FE2BA-8B270770-C:45":{"Always 60fps":{"note":"Intro with N logo is at 60fps now! Why is it a pointer address?!?","data":["D029571F 0002","8029571F 0001"],"options":null},"Player 1\\1-Hit Death":{"note":"","data":["D01D3484 0078","801D3484 0001"],"options":null},"Player 1\\Fast\\Jump Walk":{"note":"","data":["801D347C 0001"],"options":null},"Player 1\\Fast\\Punch Kick":{"note":"","data":["801D347E 0010"],"options":null},"Player 1\\Fight Gargos Immediately":{"note":"","data":["8012834B 000A"],"options":null},"Player 1\\Fulgore\\Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3478 0020","801D3479 0090","801D34C5 0092","801D3527 005E"],"options":null},"Player 1\\Fulgore\\Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3478 0023","801D3479 00F0","801D34C5 0080","801D3527 00AF"],"options":null},"Player 1\\Infinite Energy":{"note":"","data":["801D3484 0069"],"options":null},"Player 1\\Play As":{"note":"","data":["802C8CB8 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 1\\Slow Jump Walk":{"note":"","data":["801D347D 0050"],"options":null},"Player 1\\Spinal Always Has All Skulls":{"note":"","data":["801D3523 0006"],"options":null},"Player 1\\Undefeated Players Scroll By Quickly":{"note":"","data":["802C8CE8 0007"],"options":null},"Player 1\\Untouchable":{"note":"","data":["801D34D4 000A"],"options":null},"Player 1\\Wins Score":{"note":"","data":["8012830A 00FF"],"options":null},"Player 2\\Fast\\Jump Walk":{"note":"","data":["801D357C 0001"],"options":null},"Player 2\\Fast\\Punch Kick":{"note":"","data":["801D357E 0010"],"options":null},"Player 2\\Fulgore Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3578 0020","801D3579 0090","801D35C5 0092","801D3527 005E"],"options":null},"Player 2\\Fulgore Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3578 0023","801D3579 00F0","801D35C5 0080","801D3527 00AF"],"options":null},"Player 2\\Infinite Energy":{"note":"","data":["801D3584 0078"],"options":null},"Player 2\\Play As":{"note":"","data":["8004EA9D 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 2\\Slow\\Jump Walk":{"note":"","data":["801D357D 0050"],"options":null},"Player 2\\Slow\\Punch Kick":{"note":"","data":["801D357F 0050"],"options":null},"Player 2\\Spinal Always Has All Skulls":{"note":"","data":["801D3623 0006"],"options":null},"Player 2\\Untouchable":{"note":"","data":["801D34D5 000A"],"options":null},"Unlock All Options":{"note":"","data":["8012834C 0006"],"options":null}},"9EA95858-AF72B618-C:45":{"Infinite Coins Main Menu":{"note":"","data":["810F8CD2 FFFF"],"options":null},"Lower Left Char\\Item On Pick-Up":{"note":"","data":["800FD341 00??"],"options":{"Boo Bell":"07","Bowser Bomb":"03","Bowser Suit":"08","Dueling Glove":"04","Golden Mushroom":"06","Magic Lamp":"09","Mushroom":"00","Plunder Chest":"02","Skeleton Key":"01","Warp Block":"05"}},"Lower Left Char\\Rolls 10":{"note":"","data":["800DF55D 000A"],"options":null},"Lower Right Char\\Item On Pick-Up":{"note":"","data":["800FD375 00??"],"options":{"Boo Bell":"07","Bowser Bomb":"03","Bowser Suit":"08","Dueling Glove":"04","Golden Mushroom":"06","Magic Lamp":"09","Mushroom":"00","Plunder Chest":"02","Skeleton Key":"01","Warp Block":"05"}},"Lower Right Char\\Rolls 10":{"note":"","data":["800DF5A9 000A"],"options":null},"Upper Left Char\\Item On Pick-Up":{"note":"","data":["800FD2D9 00??"],"options":{"Boo Bell":"07","Bowser Bomb":"03","Bowser Suit":"08","Dueling Glove":"04","Golden Mushroom":"06","Magic Lamp":"09","Mushroom":"00","Plunder Chest":"02","Skeleton Key":"01","Warp Block":"05"}},"Upper Left Char\\Rolls 10":{"note":"","data":["800DF4C5 000A"],"options":null},"Upper Right Char\\Item On Pick-Up":{"note":"","data":["800DF30D 00??"],"options":{"Boo Bell":"07","Bowser Bomb":"03","Bowser Suit":"08","Dueling Glove":"04","Golden Mushroom":"06","Magic Lamp":"09","Mushroom":"00","Plunder Chest":"02","Skeleton Key":"01","Warp Block":"05"}},"Upper Right Char\\Rolls 10":{"note":"","data":["800DF511 000A"],"options":null},"Widescreen":{"note":"Boards in 4:3.","data":["8102045A 3FE3","81053554 0801","81053556 DFD4","81053558 3C1B","8105355A 3FAB","81077F50 449B","81077F52 6000","81077F54 460C","81077F56 0002","81077F58 4606","81077F5A 0002","81077F5C 0801","81077F5E 4D57","81077F60 0000","81077F62 0000"],"options":null}},"9F1ECAF0-EEC48A0E-C:4A":{"Infinite Energy\\Player 1":{"note":"","data":["800AC339 00??"],"options":{"Max":"40","None":"00"}},"Infinite Energy\\Player 2":{"note":"","data":["800AC429 00??"],"options":{"Max":"3F","None":"00"}},"Infinite Match Time":{"note":"","data":["800AB433 0000"],"options":null},"Super Attacks\\Player 1":{"note":"","data":["800AC33D 00??"],"options":{"3":"03","None":"00"}},"Super Attacks\\Player 2":{"note":"","data":["800AC42D 00??"],"options":{"3":"03","None":"00"}},"Unlock Extras":{"note":"","data":["800ACA05 00FF","800ACA07 00FF"],"options":null}},"9F5BF79C-D2FE08A0-C:45":{"Debug Mode":{"note":"","data":["8006C4C2 0001"],"options":null},"Have\\All Keys":{"note":"","data":["801639E9 000F"],"options":null},"Have\\All Weapons":{"note":"","data":["801639EB 007F"],"options":null},"Have\\Quad Damage":{"note":"","data":["8116397C 42C8"],"options":null},"Have\\Ring of Shadows":{"note":"","data":["811639E8 ????"],"options":{"Off":"0000","On":"42C8"}},"Infinite\\Ammo":{"note":"","data":["50000402 0000","80163A2D 0064","50000402 0000","81163A2C 03E7"],"options":null},"Infinite\\Armor":{"note":"","data":["81163944 42C8"],"options":null},"Infinite\\Bio Suit":{"note":"","data":["81163980 42C8"],"options":null},"Infinite\\Health":{"note":"","data":["81163930 42C8"],"options":null},"Multi\\Have All Weapons\\Player 1":{"note":"","data":["8016634B 007F"],"options":null},"Multi\\Have All Weapons\\Player 2":{"note":"","data":["8016661B 007F"],"options":null},"Multi\\Infinite Ammo\\Player 1":{"note":"","data":["50000402 0000","8116638C 03E7"],"options":null},"Multi\\Infinite Ammo\\Player 2":{"note":"","data":["50000402 0000","8116665C 03E7"],"options":null},"Multi\\Infinite Armor\\Player 1":{"note":"","data":["811662A4 42C8"],"options":null},"Multi\\Infinite Armor\\Player 2":{"note":"","data":["81166574 42C8"],"options":null},"Multi\\Infinite Bio Suit\\Player 1":{"note":"","data":["811662E0 42C8"],"options":null},"Multi\\Infinite Bio Suit\\Player 2":{"note":"","data":["811665B0 42C8"],"options":null},"Multi\\Infinite Health\\Player 1":{"note":"","data":["81166290 42C8"],"options":null},"Multi\\Infinite Health\\Player 2":{"note":"","data":["81166560 42C8"],"options":null},"Rapid Fire":{"note":"","data":["D00CA9E0 0020","8016396D 0001"],"options":null}},"9F8926A5-0587B409-C:50":{"10x Trick Multiplier":{"note":"","data":["800D60FE 0001"],"options":null},"Access All gold medals":{"note":"Also opens San Francisco \u0026 Downtown Minneapolis","data":["50000C14 0000","800DEA03 00FF","50000C14 0000","800DEA06 00FF","50000C14 0000","800DEA08 00FF"],"options":null},"Access all Levels,tapes,boards \u0026 Officer Dick":{"note":"","data":["50000C14 0000","800DE9FC 001E"],"options":null},"Max\\Air":{"note":"","data":["800D62DC 00FF"],"options":null},"Max\\Balance":{"note":"","data":["800D62DF 00FF"],"options":null},"Max\\Speed":{"note":"","data":["800DE83A 0001"],"options":null},"Max\\Turning":{"note":"","data":["800D6220 00FF"],"options":null}},"9FD375F8-45F32DC8-C:50":{"Access All Ticket Switches \u0026 Vehicles":{"note":"","data":["800A5E1F 0001","50002004 0000","810A5D70 FFFF"],"options":null},"Activate All In-Game Cheats":{"note":"With this code on, all rocket's abilities are now max","data":["810A6846 F5FF"],"options":null},"Infinite \u0026 Max Health":{"note":"","data":["8109FB82 000C","8109FB84 000A"],"options":null}},"9FE6162D-E97E4037-C:4A":{"All 52 Gold Gems Collected":{"note":"","data":["8016EA30 0003","8016EA31 007E","8016EA32 00FF","8016EA33 00EF","8016EA34 00FF","8016EA35 007F","8016EA36 00FF","8016EA37 00FC"],"options":null},"All Stages \u0026 Chapters Unlocked":{"note":"","data":["8016EA38 003B"],"options":null},"Infinite\\Health\\Marina":{"note":"","data":["810ECAD0 03E8"],"options":null},"Infinite\\Health\\Teran":{"note":"","data":["810F1750 03E8"],"options":null},"Infinite\\Max Red Gems":{"note":"","data":["81175056 270F"],"options":null},"Level Select":{"note":"To access this anytime during game, press L+R+Z to enable the menu. Press D-Pad Up / Down to move through the menu, D-Pad Left / Right to change level digits and then press Start to enter level. Don not do this whhile in pause mode (Start Button Pause) or the game will freeze.","data":["D10BC208 2030","800BC201 0004"],"options":null}},"9FF69D4F-195F0059-C:50":{"Easy Difficulty level":{"note":"","data":["800AD243 0000"],"options":null},"Fast Run":{"note":"","data":["8009B14F 0003"],"options":null},"Infinite Lives":{"note":"","data":["8109B0EE 03E7","810AD24E 03E7"],"options":null},"Level select":{"note":"Set Up In Menu","data":["81076FB6 6F74"],"options":null},"Rapid fire":{"note":"","data":["8009B15F 0003"],"options":null},"Speed level 1 Slow":{"note":"","data":["800AD247 0000"],"options":null}},"A03CF036-BCC1C5D2-C:50":{"Don't Hurt Mario\\Falling":{"note":"Press L to levitate \u0026 Let go to land","data":["8036CF6C 00E8","8136CEB8 FFFF"],"options":null},"Don't Hurt Mario\\Monsters":{"note":"","data":["80309457 0001"],"options":null},"Funny Mario Options\\Mario Walks On Water":{"note":"","data":["802A6204 0800","802A6206 0024","81000090 3C04","81000092 8034","81000094 8484","81000096 B1E6","81000098 4484","8100009A 3000","810000A0 4680","810000A2 3120","810000A4 4604","810000A6 903C","810000AC 4500","810000AE 0002","810000B4 4600","810000B6 2486","810000B8 080E","810000BA 05DB","810000BC E712"],"options":null},"Funny Mario Options\\Mario's Cap\\Off \u0026 in His Hand":{"note":"Here you can Choose Options with Mario with His Cap off \u0026 in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["80309437 00??"],"options":{"Cap In Hand":"20","Flying Mario Cap In Hand":"28","Invisible Mario Cap In Hand":"22","Invisible Metal Mario Cap In Hand":"26","Metal Mario Cap In Hand":"24"}},"Funny Mario Options\\Mario's Cap\\On \u0026 An Extra in His Hand":{"note":"Here you can Choose Options with Mario with His Cap on \u0026 An Extra in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["80309437 00??"],"options":{"Cap In Hand":"30","Flying Mario Cap In Hand":"38","Invisible Mario Cap In Hand":"32","Invisible Metal Mario Cap In Hand":"36","Metal Mario Cap In Hand":"34"}},"Have\\Debug Mode":{"note":"","data":["A02F9748 00??"],"options":{"Off":"00","On":"01"}},"Have\\Level Select":{"note":"","data":["A02F973C 0001"],"options":null},"Infinite\\Energy \u0026 Breath":{"note":"","data":["803094DE 0008"],"options":null},"Infinite\\Lives":{"note":"","data":["803094DD 0064"],"options":null},"Mario's Cap\\Off Options":{"note":"Here you can Choose Options with Mario without His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["80309437 00??"],"options":{"Flying Mario":"08","Invisible Flying Mario":"0A","Invisible Mario":"02","Invisible Metal Flying Mario":"0F","Mario No Cap":"01","Metal Flying Mario":"0D","Metal Mario":"04"}},"Mario's Cap\\On Options":{"note":"Here you can Choose Options with Mario with His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["80309437 00??"],"options":{"Flying Mario":"19","Invisible Mario":"12","Invisible Metal Mario":"16","Metal Mario":"15"}},"Press GS For 255 Coins":{"note":"","data":["893094D8 00FF"],"options":null},"[Slot A Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80202F23 0001","80202F0B 00C7","50001101 0000","80202F0C 00FF"],"options":null},"[Slot A Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80202F25 0064"],"options":null},"[Slot A Codes]\\Have All\\key doors unlocked (and mote empty)":{"note":"","data":["80202F0A 007E"],"options":null},"[Slot B Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80202F93 0001","80202F7B 00C7","50001101 0000","80202F7C 00FF"],"options":null},"[Slot B Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80202F95 0064"],"options":null},"[Slot B Codes]\\Have All\\key doors unlocked (and mote empty)":{"note":"","data":["80202F7A 007E"],"options":null},"[Slot C Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80203003 0001","80202FEB 00C7","50001101 0000","80202FEC 00FF"],"options":null},"[Slot C Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80203005 0064"],"options":null},"[Slot C Codes]\\Have All\\key doors unlocked (and mote empty)":{"note":"","data":["80202FEA 007E"],"options":null},"[Slot D Codes]\\Have All\\120 Stars":{"note":"Have\\120 Stars,once the Code is activated, you will see it as a new option in Save Slot A.This will Have\\the Cannon open already to get upto Yoshi on the Roof. but make sure to save the game after collecting Red Coins and turn this code off before saving. you will now Have\\it all saved to mempak","data":["80203073 0001","8020305B 00C7","50001101 0000","8020305C 00FF"],"options":null},"[Slot D Codes]\\Have All\\Max 100 Coin Records For All Levels":{"note":"","data":["50000F01 0000","80203075 0064"],"options":null},"[Slot D Codes]\\Have All\\key doors unlocked (and mote empty)":{"note":"","data":["8020305A 007E"],"options":null}},"A08D0F77-6F82E38C-C:45":{"(Tap L Twice) To Skip Intro":{"note":"On game start up, as soon as you see the N64 Logo, Tap the L Button twice letting go eachtime.","data":["D00A6289 0020","800A679F 0024"],"options":null},"Access Multiplayer mode setup menu":{"note":"Enables bypassing the lock by pressing Left on the D-Pad to access character select on the only locked map in Deathmatch: Temple.","data":["D00D1054 0001","800D0B60 0002"],"options":null},"Bypass locked menu":{"note":"","data":["800D0BD3 00??"],"options":{"Chapters":"02","Options":"01"}},"Enable Unused Cheats\\BAPHOMETSVAN":{"note":"Unlock cavemen in multiplayer.","data":["800DE623 0080"],"options":null},"Enable Unused Cheats\\BEEFCURTAINS":{"note":"Unlock zombies in multiplayer.","data":["800DE622 0001"],"options":null},"Enable Unused Cheats\\BEELZEBUBSBUM":{"note":"\"Hitler\" Easter egg.","data":["800DE623 0004"],"options":null},"Enable Unused Cheats\\BILLYMILLROUNDABOUT":{"note":"Unlock Gregg in multiplayer.","data":["800DE621 0002"],"options":null},"Enable Unused Cheats\\BOVRILBULLETHOLE":{"note":"Conker with caveman afro.","data":["800DE622 0002"],"options":null},"Enable Unused Cheats\\DRACULASTEABAGS":{"note":"Conker with caveman mohawk.","data":["800DE622 0004"],"options":null},"Enable Unused Cheats\\DUTCHOVENS":{"note":"Conker with caveman spiky hair.","data":["800DE622 0008"],"options":null},"Enable Unused Cheats\\EASTEREGGSRUS":{"note":"Unlock Neo Conker in multiplayer.","data":["800DE623 0010"],"options":null},"Enable Unused Cheats\\KOJACKSROLLNECK":{"note":"1 Player Multiplayer Resolution Option.","data":["800DE622 0010"],"options":null},"Enable Unused Cheats\\NUTBINGCOEDS":{"note":"Unlock weasel guard in multiplayer.","data":["800DE623 0040"],"options":null},"Enable Unused Cheats\\RUSTYSHERIFFSBADGE":{"note":"Unlock Squirrel Sergeant and Tediz Leader in multiplayer.","data":["800DE621 0001"],"options":null},"Enable Unused Cheats\\SPUNKJOCKEY":{"note":"Slow motion kills with katana/chainsaw.","data":["800DE623 0008"],"options":null},"Enable Unused Cheats\\WELDERSBENCH":{"note":"Unlock all chapters.","data":["800DE622 0080"],"options":null},"Enable Unused Cheats\\WELLYTOP":{"note":"Unlock Conker in multiplayer.","data":["800DE623 0020"],"options":null},"Infinite 99 Lives":{"note":"","data":["800B9B84 0063"],"options":null},"Infinite 99999 Cash":{"note":"","data":["810B9B88 270F"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["800BCFD7 0006"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["800B42CE 0006"],"options":null},"Infinite Health\\Player 3":{"note":"","data":["800B45F2 0006"],"options":null},"Infinite Health\\Player 4":{"note":"","data":["800B4916 0006"],"options":null},"Infinite Oxygen":{"note":"","data":["810B3E9A 0000"],"options":null},"Infinite Time in Multi":{"note":"","data":["810770DA 8C9E"],"options":null},"Map Warp":{"note":"","data":["800A679F 00??"],"options":{"Barn Boys interior - devoid of entities":"01","Barn boys outside, had a funny bug where Conker would hold money forever. Missing a lot of assets.":"0C","Bats tower. Lighting is different(?) Cannot do much since you spawn without the ability to swim underwater. Had a weird bug where all the cutscenes played.":"0B","Battery water helmet room? Can't tell as you can't swim, and you raise up into a warp that crashes the game.":"17","Beach multiplayer, You can fall off and die by exiting the turrets":"2B","Big, big guy boss fight. Map seems to be the same as final.":"0A","Black void":"05","Bluff cutscene area, devoid of anything":"37","Bugga the Knuts arena. Doesn't have much in it. Is the hole normally there?":"14","Bull boss fight - room has all the targets placed all in the middle, and lacks any other objects":"00","Bunker multiplayer, Teddiz symbols changed again":"34","CRASH":"3E","CRASHES GAME":"12","Capture the flag multiplayer. Teddiz symbol was changed.":"30","Causality Dept. Devoid of anything.":"2F","Cheese test room. Lacks textures":"0D","D-Day beach - lacks assets":"04","Don weasel cutscene map":"38","Dupe of above":"20","Experiment boss map, devoid of anything":"23","Fangy Test room.":"0F","First room inside the Tediz base. Devoid of Teddiz":"1B","First room where you encounter Rodent. Devoid of anything, really.":"1C","Fish test room":"03","Great Mighty Poo fight, devoid of anything":"35","Haybot/water raising room. Dying will play all the cutscenes but will crash. Enabling the expansion pack shows weird broken red eye textures":"10","Heist multiplayer map":"1A","Inside Wasps' hive. Devoid of anything.":"27","Inside the Poo Mountain cabin. Can't do much since there's no triggers/ability to escape.":"2C","Inside the Windmill?":"15","Lava race/mugged":"32","Matrix scene, devoid of anything":"36","Mrs catfish, lacks assets":"07","Multiplayer race":"33","N64 Chainsaw cutscene":"21","Outside the bank":"39","Panther King's throne":"18","Rock Solid. Devoid of anything":"31","Room after the bluff. No dinosaurs are present":"19","Second room of Matrix bank":"3A","Spooky Mansion inside":"3C","Spooky mansion outside, devoid of anything":"41","Tank test room":"16","Tanks multiplayer map. Seems to be an asset dump for weird villager sprites.":"24","Teddiz base toxic waste room. Is filled with water for unknown reasons":"28","Teddiz base turret room. Teddiz logo is different, as the turret sprite when using is is displaced (needs console proof this is a graphical error)":"26","Test room. Purpose unknown.":"1F","Uga Buga - cutscene where the caveman gets squashed":"02","Uga Bugga test room":"2A","Uga buga baby dinosaur room. Devoid of anything, and has some missing textures.":"43","Uga buga slime room, has some assets":"42","Upper floor of Teddiz Base UV and scripting issues. Devoid of almost anything":"1E","War plane crash area. Devoid of almost anything":"13","Windy at night":"3B","Windy, Ms bee is not present":"06","another test map":"25","dinosaur multiplayer":"3F","dying first time/meeting Gregg":"22","final boss arena. Exiting will lead you into the vault where you can moonjump and find the Alien in the Matrix vault.":"40","strange maze room. Has a switch, and a random grate.":"11","training":"29","training key room. Can't do much in here.":"2E"}},"Press L To Levitate\\Player 1":{"note":"","data":["D00D1055 0020","810B3E08 4200"],"options":null},"Restore Unused Title Screen":{"note":"Pressing Up on the D-Pad enables a semi-working version of a title screen","data":["D00D1054 0008","800D0D18 0002"],"options":null},"Start with Infinite 9 Granades or Bombs":{"note":"This works for all Players, including player 1 in story mode.","data":["800B9B70 0009"],"options":null}},"A150743E-CF2522CD-C:45":{"Have 99 Coins":{"note":"","data":["810BB10E 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C7A72 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BB0FC 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BB106 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BB10A 0009"],"options":null}},"A1B64A61-D014940B-C:50":{"Access All\\Cars":{"note":"","data":["8002CFF7 000B"],"options":null},"Access All\\Difficulties":{"note":"","data":["8002CFFB 0004"],"options":null},"Access All\\Multiplayer Levels":{"note":"","data":["50000901 0000","8002D000 0001"],"options":null},"Access All\\Tracks":{"note":"","data":["8002CFF3 0006"],"options":null},"Access In-Game Cheats":{"note":"","data":["50001301 0000","8002D008 0001"],"options":null},"Damage Select":{"note":"","data":["8002CD93 00??"],"options":{"Double":"02","Half":"01","Normal":"00","Triple":"03"}},"Health Select":{"note":"","data":["8002CD7F 00??"],"options":{"Bad Only":"02","Good Only":"01","Normal":"00","Off":"03"}},"Infinite Continues":{"note":"","data":["8002CC57 0064"],"options":null},"Low Timer":{"note":"","data":["81025DD4 3001"],"options":null},"Power-Up Select":{"note":"","data":["8002CD7B 00??"],"options":{"?":"05","Health":"06","Invincible":"07","Mines":"01","Nitros":"04","Normal":"00","Off":"08","Rockets":"02","Stealer":"03"}},"Radar":{"note":"","data":["8002CD8F 00??"],"options":{"Off":"01","On":"00"}},"Speed units\\Kph or Mph":{"note":"","data":["81025E68 ????"],"options":{"Kph":"0100","Mph":"0001"}},"View Mode Select?":{"note":"","data":["8002CD8B 00??"],"options":{"Fisheye":"03","Flip":"02","Fog":"01","Normal":"00"}},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\01 Coventry Cove":{"note":"","data":["8036A97B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\02 Mount Mayhem":{"note":"","data":["8034C65B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\03 Inferno Isle":{"note":"","data":["80364A53 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\04 Sunset Sands":{"note":"","data":["8033B4AB 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\05 Metro Madness":{"note":"","data":["8035E9E3 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\06 Wicked Woods":{"note":"","data":["80358E5B 0064"],"options":null}},"A1F51C25-16D61291-C:00":{"God Mode":{"note":"","data":["80774EB7 00??"],"options":{"Off":"00","On":"01"}}},"A24F4CF1-A82327BA-C:4A":{"Debug Mode":{"note":"","data":["80036FFB 0001"],"options":null},"Everything Unlocked\\Save File 1":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","81069A2E FFFF"],"options":null},"Everything Unlocked\\Save File 2":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8106996E FFFF"],"options":null},"Everything Unlocked\\Save File 3":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","81069A8E FFFF"],"options":null},"Everything Unlocked\\Save File 4":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","810699CE FFFF"],"options":null},"Have All Objectives Complete":{"note":"","data":["80037003 0001"],"options":null},"Infinite Ammo (All Levels)":{"note":"","data":["80079EAB 0001"],"options":null}},"A273AB56-DA33DB9A-C:45":{"In-Game Cheats\\Access Cheat menu":{"note":"","data":["50000504 0000","801012D8 0001"],"options":null},"In-Game Cheats\\Enable\\All Items":{"note":"To access simply pause in game play \u0026 then unpause.","data":["801012BC 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Invincibility":{"note":"","data":["802AAA68 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Monsters":{"note":"","data":["802AABDB 00??"],"options":{"Are Active":"00","Are Gone":"01"}},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5DD6 0064","812A5E1E 0064","812A5E2E 00C8","812A5E18 1900","812A5E1A 0640","812A5DE8 04B0","812A5DE8 0960","812A5DB8 0960"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Keys":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5DD3 000F"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000E01 0000","802A5E46 0001","50000E02 0000","812A5D8C 03E7"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Infinite Health (All Levels)":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on Single-Player, Co-Operative and DUKEMATCH, All Levels.","data":["8024CCE7 0064","802A5D89 0064"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A6162 0064","812A61AA 0064","812A61BA 00C8","812A61A4 1900","812A61A6 0640","812A6174 04B0","812A6174 0960","812A6144 0960"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000E01 0000","802A61D2 0001","50000E02 0000","812A6118 03E7"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on DUKEMATCH, All Levels.","data":["8024D073 0064","802A6115 0064"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A64EE 0064","812A6536 0064","812A6546 00C8","812A6530 1900","812A6532 0640","812A6500 04B0","812A6500 0960","812A64D0 0960"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000E01 0000","802A655E 0001","50000E02 0000","812A64A4 03E7"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 4 on DUKEMATCH, All Levels.","data":["8024D3FF 0064","802A64A1 0064"],"options":null},"Single-Player (All Levels)\\Have All\\Items \u0026 Infinite Use on all levels":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5A4A 0064","812A5A92 0064","812A5AA2 00C8","812A5A8C 1900","812A5A8E 0640","812A5A5C 04B0","812A5A5C 0960","812A5A2C 0960"],"options":null},"Single-Player (All Levels)\\Have All\\Keys":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A5A47 000F"],"options":null},"Single-Player (All Levels)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000E01 0000","802A5ABA 0001","50000E02 0000","812A5A00 03E7"],"options":null},"Single-Player (All Levels)\\Have Infinite Health (All Levels)":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels and does what it says on the tin. Infinite health for player 1, All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["80247463 0064","8026EC5B 0064","802A59FD 0064"],"options":null}},"A292524F-3D6C2A49-C:45":{"Away Team\\Score":{"note":"","data":["8129195C ????"],"options":{"0 Points":"5008","00 Points":"C802","50 Points":"FA02","o Points":"0000"}},"Away Team\\Time Outs":{"note":"","data":["80291958 00??"],"options":{"Infinite":"07","None":"00"}},"Create A Player Codes\\Max 3 Point":{"note":"","data":["802C5EFC 0063"],"options":null},"Create A Player Codes\\Max Capaility":{"note":"","data":["802C5F02 0063"],"options":null},"Create A Player Codes\\Max Defensive":{"note":"","data":["802C5EFF 0063"],"options":null},"Create A Player Codes\\Max Free Throw":{"note":"","data":["802C5EFD 0063"],"options":null},"Create A Player Codes\\Max Offensive":{"note":"","data":["802C5EFE 0063"],"options":null},"Create A Player Codes\\Max Rebound":{"note":"","data":["802C5F00 0063"],"options":null},"Create A Player Codes\\Max Shooting":{"note":"","data":["802C5EFB 0063"],"options":null},"Create A Player Codes\\Max Techinque":{"note":"","data":["802C5F01 0063"],"options":null},"Home Team\\Score":{"note":"","data":["81290378 ????"],"options":{"0 Points":"5008","00 Points":"C802","50 Points":"FA02","o Points":"0000"}},"Home Team\\Time Outs Home":{"note":"","data":["80290374 00??"],"options":{"Infinite":"07","None":"00"}},"No Shot Clock":{"note":"","data":["812010C4 43FF"],"options":null}},"A2C54BE7-6719CBB2-C:50":{"Enable All Characters":{"note":"","data":["D02E4062 0000","802E4063 0004"],"options":null},"Have Max\\Powerups":{"note":"","data":["801CC2F3 0002"],"options":null},"Have Max\\Weapon Power-Up":{"note":"","data":["801CC2F7 0002"],"options":null},"Infinite\\Bullets":{"note":"For Henry","data":["801D5273 0006"],"options":null},"Infinite\\Gold":{"note":"","data":["811CC012 2710"],"options":null},"Infinite\\Health":{"note":"","data":["811CC00A 2710"],"options":null},"Infinite\\Health Young Henry":{"note":"","data":["D1191616 0010","8136E180 2800"],"options":null},"Infinite\\Items\\Crest Half A":{"note":"","data":["801CC02B 000A"],"options":null},"Infinite\\Items\\Crest Half B":{"note":"","data":["801CC02C 000A"],"options":null},"Infinite\\Items\\Cure Ampoule":{"note":"","data":["801CC01E 000A"],"options":null},"Infinite\\Items\\Healing Kit":{"note":"","data":["801CC01C 000A"],"options":null},"Infinite\\Items\\Magical Nitro":{"note":"","data":["801CC025 000A"],"options":null},"Infinite\\Items\\Mandragora":{"note":"","data":["801CC026 000A"],"options":null},"Infinite\\Items\\Moon Card":{"note":"","data":["801CC028 000A"],"options":null},"Infinite\\Items\\Oldrey's Diary":{"note":"","data":["801CC02A 000A"],"options":null},"Infinite\\Items\\Powerup":{"note":"","data":["801CC01F 000A"],"options":null},"Infinite\\Items\\Purifying":{"note":"","data":["801CC01D 000A"],"options":null},"Infinite\\Items\\Red Jewels":{"note":"","data":["801CC014 0068"],"options":null},"Infinite\\Items\\Roast Beef":{"note":"","data":["801CC01B 000A"],"options":null},"Infinite\\Items\\Roast Chicken":{"note":"","data":["801CC01A 000A"],"options":null},"Infinite\\Items\\Rose Brooch":{"note":"","data":["801CC02D 000A"],"options":null},"Infinite\\Items\\Sun Card":{"note":"","data":["801CC027 000A"],"options":null},"Infinite\\Items\\The Contract":{"note":"","data":["801CC024 000A"],"options":null},"Infinite\\Items\\Throwing Weapons":{"note":"","data":["801CC015 0064"],"options":null},"Infinite\\Items\\Winch Lever":{"note":"","data":["801CC029 000A"],"options":null},"Infinite\\Keys\\Archives":{"note":"","data":["801CC02E 000A"],"options":null},"Infinite\\Keys\\Art Tower 1":{"note":"","data":["801CC03A 000A"],"options":null},"Infinite\\Keys\\Art Tower 2":{"note":"","data":["801CC03B 000A"],"options":null},"Infinite\\Keys\\Chamber":{"note":"","data":["801CC033 000A"],"options":null},"Infinite\\Keys\\Clocktower A":{"note":"","data":["801CC03F 000A"],"options":null},"Infinite\\Keys\\Clocktower B":{"note":"","data":["801CC040 000A"],"options":null},"Infinite\\Keys\\Clocktower C":{"note":"","data":["801CC038 000A"],"options":null},"Infinite\\Keys\\Clocktower D":{"note":"","data":["801CC039 000A"],"options":null},"Infinite\\Keys\\Clocktower E":{"note":"","data":["801CC03E 000A"],"options":null},"Infinite\\Keys\\Control Room":{"note":"","data":["801CC03C 000A"],"options":null},"Infinite\\Keys\\Copper":{"note":"","data":["801CC032 000A"],"options":null},"Infinite\\Keys\\Deck":{"note":"","data":["801CC035 000A"],"options":null},"Infinite\\Keys\\Execution":{"note":"","data":["801CC034 000A"],"options":null},"Infinite\\Keys\\Garden":{"note":"","data":["801CC031 000A"],"options":null},"Infinite\\Keys\\Left Tower":{"note":"","data":["801CC02F 000A"],"options":null},"Infinite\\Keys\\Rose Garden":{"note":"","data":["801CC01A 000A"],"options":null},"Infinite\\Keys\\Storeroom":{"note":"","data":["801CC030 000A"],"options":null},"Infinite\\Keys\\Thorn":{"note":"","data":["801CC037 000A"],"options":null},"Infinite\\Keys\\Wall":{"note":"","data":["801CC03D 000A"],"options":null},"Infinite\\Specials\\Special 1":{"note":"","data":["801CC017 000A"],"options":null},"Infinite\\Specials\\Special 2":{"note":"","data":["801CC018 000A"],"options":null},"Infinite\\Specials\\Special 3":{"note":"","data":["801CC019 000A"],"options":null},"Rapid Fire Gun (Henry-Hold B)":{"note":"For Henry, Hold B","data":["811C9CC6 0040","801D5273 0006"],"options":null},"Selection Options\\Cut Scene Select":{"note":"With this code, you must use the appropiate level mod before you attemp to run these cut scenes. Not doing so will ruin the cut scene as the graphics will be glitched.","data":["801CC363 0009","801CC35B 00??"],"options":{"\"I Smell Poison\" From Underground Waterway":"08","(?)":"22","Actrise Appears Again Before Fight With Carrie":"56","Actrise Appears Again With Cousin Fernandes Before Fight With Carrie":"54","Actrise Appears In Castle Center":"52","Actrise Defeated By Carrie":"57","Ada":"30","Bleeding Statue":"12","Bull Awakens":"17","Castel Destruction":"27","Castle Destruction":"29","Castle Drawbridge Closes And Ortega Appears":"46","Castle Drawbridge Lowers":"03","Castle Gate Closes In Villa Upon Entering Villa":"09","Castle Keep Destructs":"1E","Character Enters Castle":"04","Character In Boat On Foggy Lake":"10","Cornell And Henry Part In Garden":"49","Cornell Meets Henry In Garden":"48","Cosmic Lights":"13","Cousin Fernandes Is Destroyed":"55","Death Is Destroyed":"45","Death(Grim Reaper)":"44","Explosion At Wall In Arena":"14","Explosion At Wall In Castle That Leads To Hidden Room":"15","Finds Hidden Path In Villa Basement":"35","Gate Opens In Forest Of Silence":"1A","Harpie":"38","Harpie Destroyed":"39","Lever \u0026 Gear In Castle":"37","Malus And Reinhardt On Horse":"2B","Malus Appears Again In Upstairs Room Of Castle":"16","Malus Appears For The First Time":"0E","Malus Is Saved By Reinhardt":"2A","Malus Leaves Garden":"0F","Malus On Flying Horse Outside Castle Keep":"1F","Meet Renon For The Last Time In Castle Keep.":"1B","Monster Dracula Appears":"51","One Of The Working Gears Cut Scenes":"19","Renon Appears For First Time":"0B","Rosa In Garden":"25","Rosa Returns":"2E","Scrolling Text About Castle And Henry":"31","Seal Removed From Wall In Arena":"11","Space Warp":"28","Spider People In Tunnel":"24","Thirsty Man":"47","This Cut Scene Runs Cut Scene 27 And 2E":"1C","Vampire In Basement":"33","Vampire In Main Entrance Hall Of Villa":"06","Vampire In Villa Basement Destroyed":"34","Village Vampire In Upstairs Villa":"0D","Vincent The Vampire":"18"}},"Selection Options\\Day Select For Adult Henry":{"note":"","data":["801CBFEF 00??"],"options":{"0 Days":"07","1 Day":"06","2 Days":"05","3 Days":"04","4 Days":"03","5 Days":"02","6 Days":"01","7 Days":"00"}},"Selection Options\\Level Select\\Inter":{"note":"","data":["801CC34B 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Level Select\\Main":{"note":"","data":["801CC349 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Status Select":{"note":"","data":["801CC054 00??"],"options":{"Instant Death":"FF","Never Get Poisoned or Vamped":"00","Normal":"01","Poison":"08","Vamp":"04","Vamped \u0026 Poisoned":"0C"}},"Selection Options\\Weapon Select":{"note":"","data":["801CC00F 00??"],"options":{"Axe":"04","Cross":"03","Knife":"01","Nothing":"00","Potion":"02"}},"Selection Options\\[Press F9 For Wolfman Can Use Weapons]":{"note":"For Cornell","data":["881CC007 00??"],"options":{"No (Default)":"04","Yes":"02"}},"Stop Timer Input":{"note":"","data":["811CBFF2 0001"],"options":null}},"A2E8F35B-C9DC87D9-C:45":{"Fly Through 1st \u0026 Last Ring Only To Complete Challenge":{"note":"","data":["801442E9 0063"],"options":null},"Infinite Freezing Breath":{"note":"","data":["8122CDE8 42C8"],"options":null},"Infinite Health":{"note":"","data":["8122CDD4 42C8"],"options":null},"Infinite Laser Eye":{"note":"","data":["8122CDE4 42C8"],"options":null},"Infinite Running Boosts":{"note":"","data":["8122CDDC 42C8"],"options":null},"Infinite X-Ray Vision":{"note":"","data":["8122CDE0 42C8"],"options":null},"Widescreen":{"note":"","data":["810DE77C 3FE3","810DE77E 8E39","810DE780 401B","810DE782 26CB","810DE784 3F63","810DE786 8E39","810DE788 4063","810DE78A 8E39","810DE78C 3FE3","810DE78E 8E39","810DE790 3FE3","810DE792 8E39","810DE794 4063","810DE796 8E39","810DE798 3FE3","810DE79A 8E39","810B1C0E 3FE3","810B1C12 8E39","8107A940 241B","8107A942 0001","8107A944 A5DB","8107A946 A328","8107A948 240E","8107A94A 0001"],"options":null}},"A3A044B5-6DB1BF5E-C:0":{"Collect One Item For Portal":{"note":"","data":["802E4E47 00??"],"options":{"Level 1":"03","Level 2":"0E","Level 3":"0C","Level 4":"0D"}},"Freeze Timer":{"note":"","data":["802E4D5F 0000"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["802E4E4A 0027"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802E4EA2 0027"],"options":null},"Infinite Health\\Player 3":{"note":"","data":["802E4EFA 0027"],"options":null},"Infinite Health\\Player 4":{"note":"","data":["802E4F52 0027"],"options":null},"Paly As":{"note":"","data":["802E4E4C 00??"],"options":{"Blue Back Bee":"22","Blue Helic":"02","Blue Rocket":"12","Blue Stealth":"32","Green Back Bee":"21","Green Helic":"01","Green Rocket":"11","Green Stealth":"31","Red Back Bee":"20","Red Helic":"00","Red Rocket":"10","Red Stealth":"30","Yellow Back Bee":"23","Yellow Helic":"03","Yellow Rocket":"13","Yellow Stealth":"33"}}},"A3A044B5-6DB1BF5E-C:00":{"Collect One Item For Portal":{"note":"","data":["802E4E47 00??"],"options":{"Level 1":"03","Level 2":"0E","Level 3":"0C","Level 4":"0D"}},"Freeze Timer":{"note":"","data":["802E4D5F 0000"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["802E4E4A 0027"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802E4EA2 0027"],"options":null},"Infinite Health\\Player 3":{"note":"","data":["802E4EFA 0027"],"options":null},"Infinite Health\\Player 4":{"note":"","data":["802E4F52 0027"],"options":null},"Paly As":{"note":"","data":["802E4E4C 00??"],"options":{"Blue Back Bee":"22","Blue Helic":"02","Blue Rocket":"12","Blue Stealth":"32","Green Back Bee":"21","Green Helic":"01","Green Rocket":"11","Green Stealth":"31","Red Back Bee":"20","Red Helic":"00","Red Rocket":"10","Red Stealth":"30","Yellow Back Bee":"23","Yellow Helic":"03","Yellow Rocket":"13","Yellow Stealth":"33"}}},"A3F6876A-DB943BD5-C:4A":{"Infinite 9 Credits\\Player 1":{"note":"","data":["801D7B38 0009"],"options":null},"Infinite 9 Credits\\Player 2":{"note":"","data":["801D7B3C 0009"],"options":null},"Press Z Button for Max Gauge\\Player 1":{"note":"","data":["D00B1CE0 0020","811D2602 0098"],"options":null},"Press Z Button for Max Gauge\\Player 2":{"note":"","data":["D00B1CE6 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Max Score]":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null}},"A47D4AD4-8BFA81F9-C:45":{"Infinite Air":{"note":"","data":["8128FB74 FF00"],"options":null},"Infinite Max Lives":{"note":"","data":["80290E5F 000A"],"options":null}},"A47D4AD4-F5B0C6CB-C:45":{"Infinite Air":{"note":"","data":["8128FB74 FF00"],"options":null},"Infinite Max Lives":{"note":"","data":["80290E5F 000A"],"options":null}},"A4A52B58-23759841-C:45":{"Access Demitron Character":{"note":"","data":["80049DF4 0001"],"options":null},"Access Sonork Character":{"note":"","data":["80049DF0 0001"],"options":null},"Infinite Health\\All Levels\\Player 1":{"note":"","data":["81028988 0800","8102898A 0018","81000060 3C1B","81000062 8008","81000064 8F7B","81000066 0228","8100006C 03E0","8100006E 0008","81000070 A761","81000072 0070"],"options":null},"Music Modifier":{"note":"","data":["800816B2 00??"],"options":{"Music Off":"00","Volume Low":"2A","Volume Max":"7F","Volume Medium":"55"}},"Press GS For 2 Rounds Won\\Player 1":{"note":"","data":["890B6330 0002"],"options":null},"Press GS For 2 Rounds Won\\Player 2":{"note":"","data":["890B6342 0002"],"options":null}},"A4BF9306-BF0CDFD1-C:45":{"16:9 Widescreen":{"note":"For 16:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81277A0C 4334","81277A10 4334","81275D24 3FE6"],"options":null},"21:9 Widescreen":{"note":"For 21:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81277A0C 4334","81277A10 4334","81275D24 4019"],"options":null},"Access All Moves":{"note":"","data":["8037C3A0 0001","8037C3A1 007F","8037C3A2 00FF","8037C3A3 00FF"],"options":null},"Better Special Fix pt1":{"note":"","data":["D3371E60 0000","81326930 0811","D3371E60 0000","81326932 DA00","D3371E60 0000","81326934 0000","D3371E60 0000","81326936 0000","81476800 8459","81476802 0002","81476804 2413","81476806 0367","81476808 1279","8147680A 0056","8147680C 2413","8147680E 03BF","81476810 1279","81476812 001E","81476814 2413","81476816 03C0","81476818 1279","8147681A 001F","8147681C 2413","8147681E 034F","81476820 1279","81476822 0017","81476824 2413","81476826 0006","81476828 1279","8147682A 001E","8147682C 2413","8147682E 0120","81476830 1279","81476832 001F","81476834 2413","81476836 0142","81476838 1279","8147683A 0023","8147683C 2413","8147683E 0123","81476840 1279","81476842 0026","81476844 2413","81476846 0350","81476848 1279","8147684A 002A","8147684C 2413","8147684E 0375","81476850 1279","81476852 002B","81476854 2413","81476856 034E","81476858 1279","8147685A 0042","8147685C 2413","8147685E 0118","81476860 1279","81476862 002A","81476864 2413","81476866 0143","81476868 1279","8147686A 002D","8147686C 2413","8147686E 0069","81476870 1279","81476872 0031","81476874 0000","81476876 0000","81476878 1000","8147687A 003D","8147687C 0000","8147687E 0000","81476880 3C19","81476882 0104","81476884 1000","81476886 0039","81476888 2739","8147688A 0602","8147688C 3C19","8147688E 0106","81476890 1000","81476892 0036","81476894 2739","81476896 0903","81476898 3C19","8147689A 0208","8147689C 1000","8147689E 0033","814768A0 2739","814768A2 0C04","814768A4 3C19","814768A6 0103","814768A8 1000","814768AA 0030","814768AC 2739","814768AE 0505","814768B0 8C59","814768B2 000C","814768B4 2413","814768B6 4100","814768B8 A733","814768BA FE2A","814768BC A733","814768BE 03D6","814768C0 1000","814768C2 002B","814768C4 0000","814768C6 0000","814768C8 8C59","814768CA 000C","814768CC 2413","814768CE 402C","814768D0 A733","814768D2 00BE","814768D4 1000","814768D6 0026","814768D8 0000","814768DA 0000","814768DC 8C59","814768DE 000C","814768E0 2413","814768E2 42B4","814768E4 A733","814768E6 013E","814768E8 A733","814768EA 029E","814768EC 1000","814768EE 0020","814768F0 0000","814768F2 0000","814768F4 3C19","814768F6 0105","814768F8 1000","814768FA 001C","814768FC 2739","814768FE 0604","81476900 3C19","81476902 0107","81476904 1000","81476906 0019","81476908 2739","8147690A 0903","8147690C 8C59","8147690E 000C","81476910 2413","81476912 0018"],"options":null},"Better Special Fix pt2":{"note":"","data":["81476914 A733","81476916 036A","81476918 1000","8147691A 0015","8147691C 0000","8147691E 0000","81476920 2413","81476922 3FD0","81476924 A453","81476926 0480","81476928 2413","8147692A 3FC9","8147692C A453","8147692E 0488","81476930 1000","81476932 000F","81476934 0000","81476936 0000","81476938 8C59","8147693A 000C","8147693C 3C13","8147693E 0812","81476940 2673","81476942 DA80","81476944 AF33","81476946 00AC","81476948 AF20","8147694A 00B0","8147694C 2413","8147694E C120","81476950 A733","81476952 023A","81476954 2413","81476956 447A","81476958 A733","8147695A 0272","8147695C 1000","8147695E 0004","81476960 0000","81476962 0000","81476964 3C19","81476966 0105","81476968 2739","8147696A 0704","8147696C AE19","8147696E 0084","81476970 8E59","81476972 0000","81476974 8E13","81476976 0014","81476978 080C","8147697A 9A4E","8147697C 0000","8147697E 0000","81476A00 8D08","81476A02 0000","81476A04 0008","81476A06 4602","81476A08 2401","81476A0A 0080","81476A0C 5428","81476A0E 0009","81476A10 8FA2","81476A12 0044","81476A14 8FA8","81476A16 004C","81476A18 8D09","81476A1A 0000","81476A1C 8D22","81476A1E 0014","81476A20 8E01","81476A22 0018","81476A24 8C21","81476A26 002C","81476A28 2421","81476A2A 00B4","81476A2C 0020","81476A2E 0008","81476A30 0000","81476A32 0000","81476A34 8FA8","81476A36 004C","81476A38 8E01","81476A3A 0018","81476A3C 8C21","81476A3E 002C","81476A40 2421","81476A42 00C4","81476A44 0020","81476A46 0008","81476A48 0000","81476A4A 0000"],"options":null},"Character Select":{"note":"When Mumbo transforms you hold:C-Up for the Termite,C-Right for the Pumpkin,C-Down for the Walrus,C-Left for the Crocc,R for the Bumble Bee,L for the Washing Machine,Press nothing to turn into Banjo","data":["D0281251 0008","8037C2D3 0002","D0281251 0001","8037C2D3 0003","D0281251 0004","8037C2D3 0004","D0281251 0002","8037C2D3 0005","D0281251 0010","8037C2D3 0006","D0281251 0020","8037C2D3 0007"],"options":null},"Concert Timer Fix":{"note":"","data":["D3371E60 0000","81307D68 0811","D3371E60 0000","81307D6A DAB1","D3371E60 0000","81307D6C 0000","D3371E60 0000","81307D6E 0000","81476AC4 3C01","81476AC6 8038","81476AC8 8021","81476ACA 35D7","81476ACC 240A","81476ACE 001E","81476AD0 1541","81476AD2 0011","81476AD4 0000","81476AD6 0000","81476AD8 3C01","81476ADA 8038","81476ADC 8421","81476ADE E8F0","81476AE0 240A","81476AE2 426A","81476AE4 002A","81476AE6 082A","81476AE8 1420","81476AEA 000B","81476AEC 0000","81476AEE 0000","81476AF0 3C01","81476AF2 8038","81476AF4 8421","81476AF6 E8F0","81476AF8 240A","81476AFA 428A","81476AFC 002A","81476AFE 082A","81476B00 1020","81476B02 0005","81476B04 0000","81476B06 0000","81476B08 0062","81476B0A 5023","81476B0C 2401","81476B0E 0000","81476B10 1000","81476B12 0003","81476B14 0000","81476B16 0000","81476B18 0062","81476B1A 5023","81476B1C 0144","81476B1E 082A","81476B20 080C","81476B22 1F5C","81476B24 0000","81476B26 0000"],"options":null},"Do Shock Spring Jump From Anywhere":{"note":"Press A Button. Do not use with Take Off And Fly From Anywhere","data":["8037C1D2 0002"],"options":null},"Dynamic Sixty Frames":{"note":"","data":["D3371E60 0000","81246F6C 0C11","D3371E60 0000","81246F6E DA93","81476A4C 3C0F","81476A4E 8027","81476A50 8DEF","81476A52 6E40","81476A54 55E0","81476A56 0008","81476A58 0000","81476A5A 0000","81476A5C 3C0F","81476A5E 8038","81476A60 8DEF","81476A62 E8E4","81476A64 240E","81476A66 0008","81476A68 11CF","81476A6A 0003","81476A6C 240E","81476A6E 0009","81476A70 55CF","81476A72 0005","81476A74 3C0E","81476A76 8038","81476A78 3C0F","81476A7A 8038","81476A7C 8DEF","81476A7E 4484","81476A80 1000","81476A82 000C","81476A84 0000","81476A86 0000","81476A88 3C0E","81476A8A 8028","81476A8C 85CE","81476A8E 1BD8","81476A90 240F","81476A92 0090","81476A94 51CF","81476A96 0007","81476A98 240F","81476A9A 0002","81476A9C 3C0E","81476A9E 8038","81476AA0 85CE","81476AA2 35D6","81476AA4 240F","81476AA6 0007","81476AA8 51CF","81476AAA 0002","81476AAC 240F","81476AAE 0001","81476AB0 240F","81476AB2 0001","81476AB4 3C0E","81476AB6 8028","81476AB8 A1CF","81476ABA 08DF","81476ABC 0809","81476ABE 9630","81476AC0 0000","81476AC2 0000"],"options":null},"Egg Gravity Fix":{"note":"","data":["D3371E60 0000","81353C16 C72B"],"options":null},"Game 100% Complete":{"note":"","data":["8137C3A0 001F","50000302 0000","8137C3A2 FFFF","50000602 0000","813832C0 FFFF","81383FCA 0064","81383FDC 0064","50000802 0000","813832F0 FFFF","81385FA0 0063","81385FC4 0063","81385FF0 0064","50000602 0000","81385FF2 6464","50001002 0000","813831A8 FFFF","813831B0 FF7F","813831B2 FFB0","813831B4 3DA6","813831B6 F264","813831C6 FF7F"],"options":null},"Global Fix":{"note":"","data":["D3371E60 0000","812C685A 4110","D3371E60 0000","812C689A 4170","D3371E60 0000","81376230 3F43","D3371E60 0000","812CB042 3F40","D3371E60 0000","812CBE32 3C75","D3371E60 0000","812CBF7E 40C0","D3371E60 0000","812CC05E 4060","D3371E60 0000","812D128E 4000","D3371E60 0000","812D12DA 4009","D3371E60 0000","812E0CD2 4020","D3371E60 0000","812E1496 4019","D3371E60 0000","812E2A36 4220","D3371E60 0000","812E2A46 C220","D3371E60 0000","81343984 1000","D3371E60 0000","8135ADBA 4110","D3371E60 0000","81379788 3FB1","D3371E60 0000","8135B796 4008","D3371E60 0000","8135DE52 40A8","D3371E60 0000","8135EBC6 414C","D3371E60 0000","8135E042 4100","D3371E60 0000","8135E096 4020","D3371E60 0000","81379900 40DB","D3371E60 0000","8135EE9E 40A8","D3371E60 0000","8135F45A 4022","D3371E60 0000","8135F9DA 4020","D3371E60 0000","8135FA2A 4020","D3371E60 0000","813799D0 3F9C"],"options":null},"Gravity Fix":{"note":"","data":["D3371E60 0000","8132C5BC 3C04","D3371E60 0000","8132C5BE C155","D3371E60 0000","8132C5C0 4484","D3371E60 0000","8132C5C2 4000","D3371E60 0000","8132C5C4 0000","D3371E60 0000","8132C5C6 0000"],"options":null},"HD Bear":{"note":"","data":["D3371E60 0000","812986B2 034E","D3371E60 0000","812986BA 034E","D3371E60 0000","81338BA4 4480","D3371E60 0000","81338BA6 0000","D3371E60 0000","81338BB6 803E"],"options":null},"Have Zero Time all Levels":{"note":"","data":["50000B04 0000","81386004 3000"],"options":null},"Infinite\\Air":{"note":"","data":["81385F8E 0E10"],"options":null},"Infinite\\Always Have All Jinjos":{"note":"","data":["80385F7B 00FF"],"options":null},"Infinite\\Eggs":{"note":"","data":["80385F67 00FF"],"options":null},"Infinite\\Gold Feathers":{"note":"","data":["80385F73 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["80385F83 0008","80385F87 0008"],"options":null},"Infinite\\Jiggies":{"note":"","data":["80385FCB 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["80385F8B 00FF"],"options":null},"Infinite\\Mumbo Tokens":{"note":"","data":["80385FC6 00FF","80385FA2 00FF"],"options":null},"Infinite\\Notes":{"note":"Just collect one Note to Have 255 Notes in all Worlds.","data":["80385FF2 00FF","80385F62 0001"],"options":null},"Infinite\\Red Feathers":{"note":"","data":["80385F6F 00FF"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0281251 0020","8137C4BC 43E0"],"options":null},"Secret Items":{"note":"","data":["81283400 ????"],"options":{"Have All Collected":"FFFF","Have None":"0000"}},"Swim Fix":{"note":"","data":["D3371E60 0000","812A788A 40A0","D3371E60 0000","812A78D2 4425","81375654 4049","81375658 3FC6","8137565C 40B3"],"options":null},"Take Off And Fly From Anywhere":{"note":"Press A Button. Do not use with Do Shock Spring Jump From Anywhere","data":["8037C1D1 0002"],"options":null}},"A4F2F521-F0EB168E-C:4A":{"Access All Levels":{"note":"","data":["80200B66 00FF"],"options":null},"Extended Tongue":{"note":"","data":["8132790E FFFF"],"options":null},"Have 99 Carrots":{"note":"With all Carrots collected. You will be allowed into mini-games and secret areas","data":["80200B2F 0063"],"options":null},"Have 99 Crowns":{"note":"","data":["8024790B 0063"],"options":null},"Have All Levels Completed":{"note":"","data":["80200B6A 0019","80200B6B 0019","80200B6C 0015","80200B6D 0018","80200B6E 0017","80200B6F 0017"],"options":null},"Infinite Health":{"note":"","data":["80168E73 000A"],"options":null},"Level Select":{"note":"When you press Pause in-game and Stage Quit yo will go to the Stage Screen this cheat lets you choose what Stage you would like to go to but make sure you turn the cheat off and press A to continue to that stage.","data":["8029BF7B 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06"}}},"A5533106-B9F25E5B-C:4A":{"Enable All Characters":{"note":"","data":["D02E4082 0000","802E4083 0004"],"options":null},"Hard Mode Selected In A New Game":{"note":"With this code, you will not see the hard level status until you save and restart the game file. No special items are required to access this feature with this code turned on.","data":["8032630F 0002"],"options":null},"Have Max\\Powerups":{"note":"","data":["801CC7D3 0002"],"options":null},"Have Max\\Weapon Power-Up":{"note":"","data":["801CC7D7 0002"],"options":null},"Infinite\\Bullets":{"note":"For Henry","data":["801D5753 0006"],"options":null},"Infinite\\Gold":{"note":"","data":["811CC4F2 2710"],"options":null},"Infinite\\Health":{"note":"","data":["811CC4EA 2710"],"options":null},"Infinite\\Health Young Henry":{"note":"","data":["D11CA1A6 0010","813A6D10 2800"],"options":null},"Infinite\\Items\\Crest Half A":{"note":"","data":["801CC50B 000A"],"options":null},"Infinite\\Items\\Crest Half B":{"note":"","data":["801CC50C 000A"],"options":null},"Infinite\\Items\\Cure Ampoule":{"note":"","data":["801CC4FE 000A"],"options":null},"Infinite\\Items\\Healing Kit":{"note":"","data":["801CC4FC 000A"],"options":null},"Infinite\\Items\\Magical Nitro":{"note":"","data":["801CC505 000A"],"options":null},"Infinite\\Items\\Mandragora":{"note":"","data":["801CC506 000A"],"options":null},"Infinite\\Items\\Moon Card":{"note":"","data":["801CC508 000A"],"options":null},"Infinite\\Items\\Oldrey's Diary":{"note":"","data":["801CC50A 000A"],"options":null},"Infinite\\Items\\Powerup":{"note":"","data":["801CC4FF 000A"],"options":null},"Infinite\\Items\\Purifying":{"note":"","data":["801CC4FD 000A"],"options":null},"Infinite\\Items\\Red Jewels on Pick-Up":{"note":"","data":["801CC4F5 0068"],"options":null},"Infinite\\Items\\Roast Beef":{"note":"","data":["801CC4FB 000A"],"options":null},"Infinite\\Items\\Roast Chicken":{"note":"","data":["801CC4FA 000A"],"options":null},"Infinite\\Items\\Rose Brooch":{"note":"","data":["801CC50D 000A"],"options":null},"Infinite\\Items\\Sun Card":{"note":"","data":["801CC507 000A"],"options":null},"Infinite\\Items\\The Contract":{"note":"","data":["801CC504 000A"],"options":null},"Infinite\\Items\\Throwing Weapons":{"note":"","data":["801CC4F5 0064"],"options":null},"Infinite\\Items\\Winch Lever":{"note":"","data":["801CC509 000A"],"options":null},"Infinite\\Keys\\Archives":{"note":"","data":["801CC50E 000A"],"options":null},"Infinite\\Keys\\Art Tower 1":{"note":"","data":["801CC51A 000A"],"options":null},"Infinite\\Keys\\Art Tower 2":{"note":"","data":["801CC51B 000A"],"options":null},"Infinite\\Keys\\Chamber":{"note":"","data":["801CC513 000A"],"options":null},"Infinite\\Keys\\Clocktower A":{"note":"","data":["801CC51F 000A"],"options":null},"Infinite\\Keys\\Clocktower B":{"note":"","data":["801CC520 000A"],"options":null},"Infinite\\Keys\\Clocktower C":{"note":"","data":["801CC518 000A"],"options":null},"Infinite\\Keys\\Clocktower D":{"note":"","data":["801CC519 000A"],"options":null},"Infinite\\Keys\\Clocktower E":{"note":"","data":["801CC51E 000A"],"options":null},"Infinite\\Keys\\Control Room":{"note":"","data":["801CC51C 000A"],"options":null},"Infinite\\Keys\\Copper":{"note":"","data":["801CC512 000A"],"options":null},"Infinite\\Keys\\Deck":{"note":"","data":["801CC515 000A"],"options":null},"Infinite\\Keys\\Execution":{"note":"","data":["801CC514 000A"],"options":null},"Infinite\\Keys\\Garden":{"note":"","data":["801CC511 000A"],"options":null},"Infinite\\Keys\\Left Tower":{"note":"","data":["801CC50F 000A"],"options":null},"Infinite\\Keys\\Rose Garden":{"note":"","data":["801CC516 000A"],"options":null},"Infinite\\Keys\\Storeroom":{"note":"","data":["801CC510 000A"],"options":null},"Infinite\\Keys\\Thorn":{"note":"","data":["801CC517 000A"],"options":null},"Infinite\\Keys\\Wall":{"note":"","data":["801CC51D 000A"],"options":null},"Infinite\\Specials\\Special 1":{"note":"","data":["801CC4F7 000A"],"options":null},"Infinite\\Specials\\Special 2":{"note":"","data":["801CC4F8 000A"],"options":null},"Infinite\\Specials\\Special 3":{"note":"","data":["801CC4F9 000A"],"options":null},"Rapid Fire Gun (Henry-Hold B)":{"note":"For Henry, Hold B","data":["811CA1A6 0040","801D5753 0006"],"options":null},"Selection Options\\Cut Scene Select":{"note":"With this code, you must use the appropiate level mod before you attemp to run these cut scenes. Not doing so will ruin the cut scene as the graphics will be glitched.","data":["801CC843 0009","801CC83B 00??"],"options":{"\"I Smell Poison\" From Underground Waterway":"08","(?)":"22","Actrise Appears Again Before Fight With Carrie":"56","Actrise Appears Again With Cousin Fernandes Before Fight With Carrie":"54","Actrise Appears In Castle Center":"52","Actrise Defeated By Carrie":"57","Ada":"30","Bleeding Statue":"12","Bull Awakens":"17","Castel Destruction":"27","Castle Destruction":"29","Castle Drawbridge Closes And Ortega Appears":"46","Castle Drawbridge Lowers":"03","Castle Gate Closes In Villa Upon Entering Villa":"09","Castle Keep Destructs":"1E","Character Enters Castle":"04","Character In Boat On Foggy Lake":"10","Cornell And Henry Part In Garden":"49","Cornell Meets Henry In Garden":"48","Cosmic Lights":"13","Cousin Fernandes Is Destroyed":"55","Death Is Destroyed":"45","Death(Grim Reaper)":"44","Explosion At Wall In Arena":"14","Explosion At Wall In Castle That Leads To Hidden Room":"15","Finds Hidden Path In Villa Basement":"35","Gate Opens In Forest Of Silence":"1A","Harpie":"38","Harpie Destroyed":"39","Lever \u0026 Gear In Castle":"37","Malus And Reinhardt On Horse":"2B","Malus Appears Again In Upstairs Room Of Castle":"16","Malus Appears For The First Time":"0E","Malus Is Saved By Reinhardt":"2A","Malus Leaves Garden":"0F","Malus On Flying Horse Outside Castle Keep":"1F","Meet Renon For The Last Time In Castle Keep.":"1B","Monster Dracula Appears":"51","One Of The Working Gears Cut Scenes":"19","Renon Appears For First Time":"0B","Rosa In Garden":"25","Rosa Returns":"2E","Scrolling Text About Castle And Henry":"31","Seal Removed From Wall In Arena":"11","Space Warp":"28","Spider People In Tunnel":"24","Thirsty Man":"47","This Cut Scene Runs Cut Scene 27 And 2E":"1C","Vampire In Basement":"33","Vampire In Main Entrance Hall Of Villa":"06","Vampire In Villa Basement Destroyed":"34","Village Vampire In Upstairs Villa":"0D","Vincent The Vampire":"18"}},"Selection Options\\Day Select For Adult Henry":{"note":"","data":["801CC4CF 00??"],"options":{"0 Days":"07","1 Day":"06","2 Days":"05","3 Days":"04","4 Days":"03","5 Days":"02","6 Days":"01","7 Days":"00"}},"Selection Options\\Level Select\\Inter":{"note":"","data":["801CC82B 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Level Select\\Main":{"note":"","data":["801CC829 00??"],"options":{"Another Free Fall. Forest Where Girl Runs In Opening":"2D","Art Tower":"26","Black Room(?)":"2E","Castle Center":"19","Castle Keep":"15","Castle Wall":"02","Cave Of Spiderwomen":"13","Clock Tower":"29","Countryside Where Carrie's Mom Is Buried.(Fall Through Ground)":"2B","Dual Tower":"27","Fall From Sky Ouside Of Castlevania Opening":"2C","Falls Into Space(?)":"16","Final Battle Site":"18","Foggy Lake":"12","Forest Of Silence":"00","Left Tower":"01","Outer Wall":"2A","Room Of Clocks":"1B","Tower Of Execution":"20","Tower Of Ruins":"24","Tower Of Science":"22","Tower Of Sorcery":"1D","Tunnel":"07","Underground Waterway":"08","Villa":"1A"}},"Selection Options\\Status Select":{"note":"","data":["801CC534 00??"],"options":{"Instant Death":"FF","Never Get Poisoned or Vamped":"00","Normal":"01","Poison":"08","Vamp":"04","Vamped \u0026 Poisoned":"0C"}},"Selection Options\\Weapon Select":{"note":"","data":["801CC4EF 00??"],"options":{"Axe":"04","Cross":"03","Knife":"01","Nothing":"00","Potion":"02"}},"Selection Options\\[Press F9 For Wolfman Can Use Weapons]":{"note":"For Cornell","data":["881CC4E7 00??"],"options":{"No (Default)":"04","Yes":"02"}},"Stop Timer Input":{"note":"","data":["811CC4D2 0001"],"options":null}},"A60ED171-3D85D06E-C:45":{"Have All Characters In Viewer":{"note":"","data":["810ECD80 FFFF","810ECD82 FFFF"],"options":null},"Infinite\\Health":{"note":"","data":["800F5F26 0001"],"options":null},"Infinite\\Webbing":{"note":"","data":["800F5F53 0001"],"options":null},"Unlocked\\All Costumes":{"note":"","data":["810ECD7E FFFF"],"options":null},"Unlocked\\All Levels":{"note":"","data":["810ECD74 0105","810ECDB0 FFFF"],"options":null}},"A62230C3-F0834488-C:45":{"Infinite Time":{"note":"","data":["D0226724 0000","81226724 003C"],"options":null},"Lagfix":{"note":"fixes horrendous load-times,still 30fps","data":["8002E692 000D"],"options":null},"Only Play One Round":{"note":"","data":["D0226791 0000","81226718 0001"],"options":null},"Player 1\\1 Win To Win":{"note":"","data":["D0226715 0000","80226715 0001"],"options":null},"Player 1\\Infinite Energy":{"note":"","data":["D022671C 0000","8122671C 00FA"],"options":null},"Player 1\\Infinite Time To Continue":{"note":"","data":["802267CB 0009","803CF2A1 0009"],"options":null},"Player 1\\Never Wins":{"note":"","data":["D0226715 0001","80226715 0000"],"options":null},"Player 1\\No Energy":{"note":"","data":["D022671C 0000","8122671C 0000"],"options":null},"Player 2\\1 Win To Win":{"note":"","data":["D0226717 0000","80226717 0001"],"options":null},"Player 2\\Infinite Energy":{"note":"","data":["D022671E 0000","8122671E 00FA"],"options":null},"Player 2\\Lifebar Flashes Red":{"note":"","data":["D022672E 0000","8122672E 00CF"],"options":null},"Player 2\\Never Wins":{"note":"","data":["D0226717 0001","80226717 0000"],"options":null},"Player 2\\No Energy":{"note":"","data":["D022671E 0000","8122671E 0000"],"options":null}},"A7941528-61F1199D-C:4A":{"All Gold Medals":{"note":"","data":["50000502 0000","81259130 0101"],"options":null},"Infinite\\Tools Options":{"note":"","data":["8025A624 00??"],"options":{"Fan":"04","Frying Pan":"01","Ghost":"02","Invisible":"06","Rat Face":"08","Rock":"07","Rocket":"05","Super Ghost":"03","Super Rat Face":"09","Wings":"0A"}},"Infinite\\Trick Game 300 Points":{"note":"","data":["8125A7F2 012C"],"options":null},"Infinite\\Weapons Options":{"note":"","data":["8025A622 00??","8025A623 0009"],"options":{"Bomb":"05","Freeze Shot":"03","Parachute":"02","Slap Stick":"01","Snowman":"04","Whirlwind":"06"}},"Max Coins":{"note":"","data":["8125A5BE 270F","8025A5BF 00C8"],"options":null},"Open Extra Characters \u0026 Snowboards":{"note":"Battle Mode Only","data":["8125916E 0101","80259170 0001","8025915C 0001","8125915E 0101","81259160 0101"],"options":null}},"A7D015F8-2289AA43-C:45":{"Have All Medals":{"note":"For Expert \u0026 Normal Modes","data":["50000802 0000","8116E6E0 7777"],"options":null},"Infinite\\Armor\\Falco":{"note":"","data":["8016D727 00FF"],"options":null},"Infinite\\Armor\\Peppy":{"note":"","data":["8016D72F 00FF"],"options":null},"Infinite\\Armor\\Slippy":{"note":"","data":["8016D72B 00FF"],"options":null},"Infinite\\Dual Blue Lasers":{"note":"","data":["8015791B 0002"],"options":null},"Infinite\\Energy":{"note":"","data":["8013AB27 00FF","80137C47 00FF"],"options":null},"Infinite\\Hyper Laser":{"note":"","data":["8015791B 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["80157911 0009"],"options":null},"Level Select":{"note":"","data":["D016E0A7 0000","8016E0A7 00??"],"options":{"Aquas":"0D","Area 6":"03","Bolse":"11","Corneria":"00","Corneria (Multi)":"14","Fortuna":"0E","Glitch":"04","Katina":"10","Macbeth":"0B","Meteo":"01","Sector X":"02","Sector Y":"05","Sector Z":"12","Solar":"07","Titania":"0C","Training Mode Level":"0A","Venom 1":"06","Venom 2":"09","Venom With Starwolf":"13","Zoness":"08"}},"Loads O' Hits":{"note":"","data":["8015790B 00FF"],"options":null},"Unlimited\\Boost":{"note":"","data":["81137C9C 0000","81137C9E 0000","8113AB7C 0000","8113AB7E 0000"],"options":null},"Unlimited\\Smart Bombs":{"note":"","data":["8016DC13 0004"],"options":null},"Widescreen":{"note":"","data":["810031A2 3FE3"],"options":null}},"A8275140-B9B056E8-C:4A":{"Have All\\Characters":{"note":"","data":["50000702 0000","801B361B 0001"],"options":null},"Have All\\Key Items":{"note":"","data":["50001602 0000","811B3714 0101"],"options":null},"Have All\\Normal Items":{"note":"","data":["50000902 0000","811B3700 6363"],"options":null},"Have All\\Weapons":{"note":"","data":["50000702 0000","811B3678 0101"],"options":null},"Infinite\\Air":{"note":"","data":["8121D4FA 04B0"],"options":null},"Infinite\\HP (All Characters)":{"note":"","data":["50000602 0000","801B361C 000A"],"options":null},"[Can Leave Town]":{"note":"Start a new game, and immediately leave town without talking to anyone.","data":["811B362A FFFF"],"options":null},"[Press L To Levitate":{"note":"Jump first, then hold L-Button while in mid-air.","data":["D0082915 0020","812456F4 418E","D0082915 0020","812456F6 38E2"],"options":null}},"A83E101A-E937B69D-C:45":{"Always Have\\BFG 9000":{"note":"","data":["800632DB 0001"],"options":null},"Always Have\\Bio Suite":{"note":"","data":["80063283 00??"],"options":{"Off":"00","On":"FF"}},"Always Have\\Chain Gun":{"note":"","data":["800632CF 0001"],"options":null},"Always Have\\Chainsaw":{"note":"","data":["800632BB 0001"],"options":null},"Always Have\\Double Shotgun":{"note":"","data":["800632CB 0001"],"options":null},"Always Have\\Gun":{"note":"","data":["800632C3 0001"],"options":null},"Always Have\\Have Rocket Launcher":{"note":"","data":["800632D1 0001"],"options":null},"Always Have\\Laser Weapon":{"note":"","data":["800632DD 0001"],"options":null},"Always Have\\Missile Launcher":{"note":"","data":["800632D3 0001"],"options":null},"Always Have\\Plasma Rifle":{"note":"","data":["800632D7 0001"],"options":null},"Always Have\\Shotgun":{"note":"","data":["800632C7 0001"],"options":null},"Berserk Mode":{"note":"","data":["8006327B 00FF"],"options":null},"Enable Cheat Menu":{"note":"","data":["8005A7D3 0001"],"options":null},"Have All\\Keys":{"note":"","data":["50000504 0000","8106328E FFFF"],"options":null},"Have All\\Secret Pentagram Items":{"note":"","data":["800632A7 0007"],"options":null},"Have All\\Weapons":{"note":"","data":["50000A04 0000","810632BA 0001"],"options":null},"Infinite\\Ammo All Weapons":{"note":"","data":["50000404 0000","810632E2 013C"],"options":null},"Infinite\\Armor":{"note":"","data":["8006326F 00FF"],"options":null},"Invincible":{"note":"","data":["8006330B 0002"],"options":null},"Invincible And Map Markers":{"note":"","data":["8006330B 0006"],"options":null},"Rapid Fire":{"note":"","data":["8106333A 0B94"],"options":null},"Turn Map Markers On":{"note":"","data":["8006330B 0004"],"options":null},"[Max Brightness]":{"note":"Enable this cheat on rom load to have Max Brightness (internal) and then put Jabo d3d8 on 160% Max for a extra brightness Boost.","data":["8005A7C8 0064"],"options":null}},"A92D52E5-1D26B655-C:45":{"1 Win to Win\\Player 1":{"note":"","data":["D020C27F 0000","8020C27F 0001"],"options":null},"1 Win to Win\\Player 2":{"note":"","data":["D020C27F 0000","8020C27F 0010"],"options":null},"Infinite\\Health\\Player 1":{"note":"","data":["8020B7B1 00C8"],"options":null},"Infinite\\Health\\Player 2":{"note":"","data":["8020BC0D 00C8"],"options":null},"Infinite\\Money":{"note":"","data":["8121106C 2704"],"options":null},"Infinite\\Special\\Player 1":{"note":"","data":["8120AEB4 0190"],"options":null},"Infinite\\Special\\Player 2":{"note":"","data":["8120B1B0 0190"],"options":null}},"AA18B1A5-07DB6AEB-C:45":{"Have\\All Guns In Chest":{"note":"","data":["50000E04 0100","810E8EF4 05FF"],"options":null},"Have\\All Main Items In Chest":{"note":"If you want items that are not listed in the Chest, then just use the Have Item On Slot Select code to have what you desire.","data":["810E8F2C 17FF","810E8F30 1EFF","810E8F34 1FFF","810E8F38 23FF","50000404 0100","810E8F3C 25FF","810E8F4C 2AFF","810E8F50 2BFF","50000304 0100","810E8F54 2EFF","50000F04 0100","810E8F60 32FF","810E8F9C 43FF","50000504 0100","810E8FA0 47FF","50000404 0100","810E8FB4 53FF","50000C04 0100","810E8FC4 58FF"],"options":null},"Have\\Fine Condition Always":{"note":"","data":["810E13E4 0000"],"options":null},"Have\\Item On Slot Select\\Slot 01":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EC8 00??","800E8EC9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 02":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ECC 00??","800E8ECD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 03":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED0 00??","800E8ED1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 04":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED4 00??","800E8ED5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 05":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8ED8 00??","800E8ED9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 06":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EDC 00??","800E8EDD 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 07":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE0 00??","800E8EE1 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 08":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE4 00??","800E8EE5 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 09":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EE8 00??","800E8EE9 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Have\\Item On Slot Select\\Slot 10":{"note":"This will give you the item of your choice and will be infinite on that chosen slot","data":["800E8EEC 00??","800E8EED 00FF"],"options":{"Acid Rounds":"1A","Base Vaccine":"51","Bishop Plug":"3B","Blue Card Key":"35","Blue Herb":"28","Blue Stone":"38","Blue Stone (?)":"39","Bomb\u0026Detonator":"42","Bow Gun Bolts":"1D","Bowgun Claire":"0C","C. Panel Key (red)":"5D","C. Panel Key (yellow)":"5E","Cabin Key":"58","Chemical AC-W24":"25","Chemical FR-W09":"24","Chief's Diary":"78","Chris's Diary":"68","Club Key":"86","Colt S.A.A. Claire":"0D","Cord":"56","Crank":"43","Custom Handgun Hunk":"04","Custom Magnum Hunk":"06","Custom Shotgun Hunk":"08","Desk Key":"84","Detonator":"40","Diamond Key":"83","Down Key":"89","Eagle Medal":"48","Eagle Stone":"3A","Film":"57","Film (?)":"46","Film A":"73","Film B":"74","Film C":"75","Film D":"7B","First Aid Spray":"23","Flame Rounds":"19","Flamethrower Leon":"10","Fuel":"17","Fuse Case":"4D","G-Virus":"52","G. Cogwheel":"4A","Gatling Gun Claire":"12","Green Herb":"26","Grenade Launcher (Acid Rounds) Claire":"0B","Grenade Launcher (Flame Rounds) Claire":"0A","Grenade Launcher Claire":"09","Grenade Rounds":"18","Hand Gun Parts":"20","Handgun Bullets":"14","Handgun Different Ada":"03","Handgun Hunk":"02","Heart Key":"85","Ink Ribbon":"1E","Jaguar Stone":"37","Joint N Plug":"55","Joint S Plug":"54","King Plug":"3E","Knife Hunk":"01","Knight Plug":"3D","Lab Card Key":"61","Lab Security Manual":"7D","Lighter":"2F","Lock Pick":"30","Locker Key":"8B","MO Disk":"60","Machine Gun ???":"13","Machine Gun Bullets":"1B","Magnum Bullets":"16","Magnum Hunk":"05","Magnum Parts":"21","Mail to Chris":"69","Mail to the Chief":"6D","Mail to the Chief (?)":"6E","Main Fuse":"4C","Manhole Opener":"4B","Master Key":"62","Memo to Leon":"6A","Mixed Herb (?)":"2E","Mixed Herb (Blue\u0026Green)":"2B","Mixed Herb (Green)":"29","Mixed Herb (Red\u0026Green)":"2A","No Item":"81","Nothing":"00","Operation Report 1":"6C","Operation Report 2":"71","P-Epsilon Report":"7E","P. Room Key":"5F","Patrol Report":"76","Picture":"31","Plastic Bomb":"41","Platform Key":"63","Police Memorandum":"6B","Precinct Key (?)":"5B","Precinct Key (blue)":"59","Precinct Key (green)":"5C","Precinct Key (red)":"5A","Red Card Key":"34","Red Herb":"27","Red Jewel":"33","Rocket Launcher Claire":"11","Rook Plug":"3C","Rookie Files":"7F","Rookie Files (?)":"80","S. Shot Bullets":"1C","Secretary's Diary A":"6F","Secretary's Diary B":"70","Serpent Stone":"36","Sewer Manager Diary":"79","Sewer Manager Fax":"7A","Shotgun Hunk":"07","Shotgun Parts":"22","Shotgun Shells":"15","Small Key":"1F","Spade Key":"82","Spark Shot Claire":"0E","Special Key":"53","Square Crank":"88","Sub Machine Gun Leon":"0F","Unicorn Medal":"47","Up Key":"8A","User Registration":"72","Vaccine":"4E","Vaccine Cart.":"4F","Vaccine Synthesis":"7C","Valve Handle":"32","Virgin Heart":"87","W. Box Key":"3F","Watchman's Diary":"77","Wolf Medal":"49"}},"Infinite\\Health":{"note":"","data":["810E1322 00C8"],"options":null},"Infinite\\Time":{"note":"","data":["800E8CBF 0010"],"options":null},"Play As":{"note":"This allows you to select what character you wish to play as. Just slect on load and select as normal at the menu and when in game you will be the character of your choice","data":["810E1138 ????"],"options":{"Ada (can crash the game)":"0E80","Cheryl":"0F80","Claire Original":"0380","Claire as Biker":"0980","Claire without jacket":"0780","Claires body Leons outfit":"0B80","Hunk (can crash the game)":"0C80","Leon Original":"0280","Leon Wounded":"0680","Leon as Biker":"0A80","Leon as Stars":"0880","To Fu":"0D80"}},"Play Extra Mission":{"note":"This allows you to select what extra mission you wish to play. Just slect on load and carry on as normal at the menu and when in game you will be the character of your choice Do not use at the same time as [Resident Evil 2 Mode]","data":["810E10EE 00??"],"options":{"The 4th Survior":"48","To-Fu":"49"}},"Quick Chest Access":{"note":"With this code, all you have to do to access the chest, is hold L and Press Start.","data":["D1014FA4 1020","8012BFA8 0001"],"options":null},"Quick Save Access":{"note":"(1 Anytime, anywhere, press Z and B at the same time. You'll get the standard typewriter text: \"It's an old typewriter. You can save your progress with this.\" Note that you must, of course, have an ink ribbon to save. 2) Choose \"Yes\" and you'll be able to save normally. Instead of the location name, your save file will say \"Scenario 1st\" or \"Scenario 2nd.\" 3) When you load your save file, you'll have to skip through the intro, but when the game loads up you'll be exactly where you saved!","data":["D1014FA4 6000","810E8928 8007","D1014FA4 6000","810E892A 4110"],"options":null},"[Biohazard 2 Mode]":{"note":"Note: With this enabled the game will become Bio Hazard 2, the Japanese version of Resident Evil 2! This means all text (except the text in files) is in Japanese, and all cinemas have Japanese subtitles. Note that the title screen will still say Resident Evil 2 Do not use at the same time as Play Extra Mission","data":["D10E10EE 00??","810E10EE 0000"],"options":{"Off":"00","On":"40"}},"[Saves Always 0]":{"note":"No matter how many saves you do ithis makes the game think you Have\\not saved.","data":["810E8B50 0000"],"options":null}},"AA7B0658-9C96937B-C:50":{"Character Creation\\Max\\Aerial":{"note":"","data":["80326C35 0009"],"options":null},"Character Creation\\Max\\Brawling":{"note":"","data":["8032CB75 0009"],"options":null},"Character Creation\\Max\\Dirtiness":{"note":"","data":["8032EB35 0009"],"options":null},"Character Creation\\Max\\Impact":{"note":"","data":["80320375 0009"],"options":null},"Character Creation\\Max\\Mat Ability":{"note":"","data":["80328BF5 0009"],"options":null},"Character Creation\\Max\\Quickness":{"note":"","data":["80324C75 0009"],"options":null},"Character Creation\\Max\\Speed":{"note":"","data":["80322CB5 0009"],"options":null},"Character Creation\\Max\\Strength":{"note":"","data":["80308D35 0009"],"options":null},"Character Creation\\Max\\Submission":{"note":"","data":["8032ABB5 0009"],"options":null},"Enable Cheat":{"note":"","data":["800B6F5B 00??"],"options":{"All Wrestlers":"80","Momentum Meter":"08","Play As Same Wrestler":"20","Stamina Meter":"04","Super Created Wrestlers":"02"}},"Freeze Timer":{"note":"","data":["800B7E02 D300"],"options":null},"Infinite Stamina\\Player 1":{"note":"","data":["810E9798 0478"],"options":null},"Infinite Stamina\\Player 2":{"note":"","data":["810E9934 03ED"],"options":null},"Meter Select\\Player 1":{"note":"","data":["800E979D 00??"],"options":{"Empty Meter Bar":"00","Full Meter Bar":"60"}},"Meter Select\\Player 2":{"note":"","data":["800E993D 00??"],"options":{"Empty Meter Bar":"00","Full Meter Bar":"60"}}},"AB7C101D-EC58C8B0-C:50":{"Infinite Health\\Player One":{"note":"","data":["811507FA 6400"],"options":null},"Infinite Health\\Player Two":{"note":"","data":["81152E76 6400"],"options":null},"Infinite Jet Pack\\Player One":{"note":"","data":["81150802 3200"],"options":null},"Infinite Jet Pack\\Player Two":{"note":"","data":["81152E7E 3200"],"options":null},"Infinite Shields\\Player One":{"note":"","data":["811507FE 6400"],"options":null},"Infinite Shields\\Player Two":{"note":"","data":["81152E7A 6400"],"options":null},"Player 1 Easily Defeated\\Player Two":{"note":"","data":["811507FA 0100","811507FE 0100"],"options":null},"Player 2 Easily Defeated\\Player One":{"note":"","data":["81152E76 0100","81152E7A 0100"],"options":null},"Shields Always Active\\Player One":{"note":"","data":["8015080A 0022"],"options":null},"Shields Always Active\\Player Two":{"note":"","data":["80152E86 0022"],"options":null},"Smoke Trail\\Player One":{"note":"","data":["80150804 0001"],"options":null},"Smoke Trail\\Player Two":{"note":"","data":["80152E80 0001"],"options":null}},"ABA51D09-C668BAD9-C:58":{"Character Select":{"note":"","data":["801D535F 00??"],"options":{"Ruff (Boy) (Default)":"00","Tumble (Girl)":"01"}},"Enable Cheat Menu":{"note":"","data":["801D5355 0001"],"options":null},"Have All Levels Completed":{"note":"","data":["50000202 0000","81207D6C FFFF"],"options":null},"Have\\All 40 Winks Collected":{"note":"Combined with Have All Levels Completed cheat will open the door for Have All 40 Winks","data":["50000602 0000","81207D60 FFFF"],"options":null},"Have\\All Dreamkeys Collected":{"note":"","data":["50000802 0000","81207D70 FFFF"],"options":null},"Infinite\\40 Cogs":{"note":"Disable when on Boss Modes as it can cause hanging!","data":["811D2A82 0028"],"options":null},"Infinite\\50 Health ZZZ's":{"note":"","data":["811D2A84 0032"],"options":null},"Infinite\\99 Lives":{"note":"Disable when on Boss Modes as it can cause hanging!","data":["801D2A87 0063"],"options":null},"Infinite\\99 Moons":{"note":"","data":["801D2A81 0063"],"options":null},"Infinite\\99 Tokens":{"note":"Disable when on Boss Modes as it can cause hanging!","data":["801D2A8D 0063"],"options":null},"Infinite\\Max Air":{"note":"","data":["811D2AA0 07C6","811DA2F6 07C1"],"options":null},"Setting Options\\Controller Select":{"note":"","data":["801D5362 00??"],"options":{"Preset 1 (Normal)":"00","Preset 2":"01","Preset 3":"02"}},"Setting Options\\Difficulty Select":{"note":"","data":["801D534F 00??"],"options":{"Easy":"00","Hard":"02","Medium":"01"}},"Setting Options\\GFX Quality Select":{"note":"","data":["801D5354 00??"],"options":{"HighCol":"02","Medium":"01","Normal":"00"}},"Setting Options\\Langauge Select":{"note":"","data":["801D21AC 00??"],"options":{"English":"00","Italian":"02","Spanish":"01"}},"Setting Options\\Music Volume Select":{"note":"","data":["801D5351 00??"],"options":{"Max":"07","Normal":"05","Off":"00"}},"Setting Options\\Rumble Pak Strength Select":{"note":"","data":["801D5353 00??"],"options":{"Max":"07","Middle":"05","Off (Normal)":"00"}},"Setting Options\\SFX Volume Select":{"note":"","data":["801D5350 00??"],"options":{"Max":"07","Normal":"05","Off":"00"}},"test health":{"note":"","data":["801D2A85 0032"],"options":null}},"AC16400E-CF5D071A-C:45":{"Always Place 1st":{"note":"","data":["80151C01 0000"],"options":null},"Have All Cars":{"note":"","data":["50001504 0000","800AAE5B 0001"],"options":null},"Have All Tracks":{"note":"","data":["81168F8C FFFF"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D013435F 0010","8112BD0C 43CB"],"options":null}},"AC8E4B32-E7B47326-C:45":{"Infinite Lives":{"note":"","data":["8009B1AF 0009"],"options":null},"Level Select In Setup Menu":{"note":"","data":["81076FF6 6F8C"],"options":null},"Max Score":{"note":"","data":["8009B1AA 00FF"],"options":null}},"AC976B38-C3A9C97A-C:50":{"99 Total Houses":{"note":"","data":["8106A61A 0063"],"options":null},"Big Newspapers":{"note":"","data":["81268D5A 0001"],"options":null},"Infinite Newspapers":{"note":"","data":["81268D12 0001"],"options":null},"Invincibility":{"note":"","data":["81268D1A 0001"],"options":null},"Level Select":{"note":"Also accesses All Bonus Levels","data":["8006A6A7 0001"],"options":null},"Rocket Boosters":{"note":"","data":["81268D3E 0001"],"options":null},"Super Jump Springs":{"note":"","data":["81268D3A 0001"],"options":null},"Throw Newspapers Backwards":{"note":"","data":["81268D4A 0001"],"options":null},"Throw Newspapers Forwards":{"note":"","data":["81268D46 0001"],"options":null},"Turbo Mode":{"note":"","data":["81268D36 0001"],"options":null}},"AC9F7DA7-A8C029D8-C:45":{"Activate\\Auto Abort Disable":{"note":"","data":["800F4078 0001"],"options":null},"Activate\\Cones to Mines":{"note":"","data":["800F3F88 0001"],"options":null},"Activate\\Disable Car 2 Car Control":{"note":"","data":["800F4050 0001"],"options":null},"Activate\\Resurrect in Place":{"note":"","data":["800F4080 0001"],"options":null},"Activate\\Stop Timer":{"note":"","data":["800F4090 0001"],"options":null},"Activate\\Upside Down Mode":{"note":"","data":["800F4061 0001"],"options":null},"Always Place 1st":{"note":"","data":["80101339 0000"],"options":null},"Car":{"note":"","data":["D00F40A5 0020","800D9EC1 00??","800D9F64 00??","800DA078 00??","800DA321 00??"],"options":{"F1 Car":"0A","Hot Rod":"09","Taxi":"08"}},"Car Type":{"note":"It gets you from 0-150 in the the time it takes the F1 racer to. Don't use the F1 racer and only hold until you reach 150 or the game will freeze.","data":["800F40B1 00??"],"options":{"Fat Car":"02","Flat Car":"01","Giant Car":"03","Invisible Car":"0A","Invisible Car (Can See Wheels)":"CD","Normal Car":"00","Paper-Thin Cars":"66","Screen-Talled Cars":"6E","Super-Sky Car":"BB","Super-Sky Car #2":"DD","Super-Tiny Car":"FF","Super-Tiny Car #2":"44"}},"Edge Boost":{"note":"by pressing R you will get a small speed boost that pushes you ahead.","data":["D00F40A5 0010","81101331 FFFF"],"options":null},"Gravity":{"note":"","data":["800F3D91 00??"],"options":{"1 Weight":"02","2 Weights":"03","A Balloon \u0026 2 Weights":"00","Normal":"01"}},"Have Two Special Cars":{"note":"You receive the Hotrod and Taxi with this code, but you may have to go through the cars from the \"Beginning\" past the \"Extreme\" for them to appear.","data":["810CAC82 FFFF","810CAC98 FFFF","810CACAE FFFF","810CACC4 FFFF","810CACDA FFFF","810CACF0 FFFF"],"options":null},"Press F9 For Track Select":{"note":"With this code, press F9 when on the track selction screen and press A to select that track!","data":["88100050 00??"],"options":{"Track 1":"00","Track 2":"01","Track 3":"02","Track 4":"03","Track 5":"04","Track 6":"05","Track 7":"06"}}},"ADA815BE-6028622F-C:4A":{"Lower Left Character\\Coin Options":{"note":"","data":["800F2769 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D580A 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800F276D 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["800F2799 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D584E 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800F279D 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Mini Game\\Max 99 Coins":{"note":"","data":["800F2C0C 0063"],"options":null},"Mini Game\\Unlimited 99 lives":{"note":"","data":["800F2C03 0063"],"options":null},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["800F2709 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D5782 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800F270D 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["800F2739 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800D57C6 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800F273D 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Widescreen":{"note":"","data":["8101D522 3FE3","8101DD1E 3FE3","D10F8046 3FAA","810F8046 3FE3","8104BB40 0801","8104BB42 7ADD","8104BB44 C602","8104BB46 0004","8105EB74 3C1B","8105EB76 3FAB","8105EB78 449B","8105EB7A 0000","8105EB7C 4600","8105EB7E 1082","8105EB80 8E06","8105EB82 0008","8105EB84 0801","8105EB86 2ED2","8105EB88 4405","8105EB8A 1000","81024C38 0801","81024C3A 7AE3","81024C3C C602","81024C3E 0024","8105EB8C 3C1B","8105EB8E 800D","8105EB90 8F7B","8105EB92 75CC","8105EB94 101B","8105EB96 0004","8105EB98 2400","8105EB9C 3C1B","8105EB9E 3FAB","8105EBA0 449B","8105EBA2 0000","8105EBA4 4600","8105EBA6 1082","8105EBA8 4405","8105EBAA 1000","8105EBAC 0800","8105EBAE 9310","8105EBB0 8E06","8105EBB2 0028"],"options":null}},"ADB9498B-DAF28F55-C:45":{"Level Select\\Proving Ground-Tightrope":{"note":"Do Not use this with Level Select The Pit-Starlight. Only use One Level Select Option At A Time","data":["8014BD9F 00??"],"options":{"Basic Training":"01","Bomb Shelter":"0B","Bottleneck":"10","Boxed Set":"06","Cathedral":"04","Crossroads":"02","Dire Straight":"07","Earth Temple":"0D","Fall Out":"05","Fire Temple":"0E","Grim Retreat":"03","Mystic":"0F","Prey":"08","Proving Grounds":"00","Tempered":"0C","Tightrope":"11","Warehouse":"09","Water Temple":"0A"}},"Level Select\\The Pit-Starlight":{"note":"Do Not use this with Level Select Proving Ground-Tightrope. Only use One Level Select Option At A Time","data":["8014BD9F 00??"],"options":{"Ampatheater":"16","Breakdown":"19","Bunker":"15","Courtyard":"22","Crypts":"18","Defcon 5":"1F","Fathom":"1D","Fire Walker":"17","Hopeless":"1B","Leap Of Faith":"13","Matrix":"1C","Retaliation":"1A","Spirit Temple":"20","Starlight":"23","Stronghold":"21","The Pedestal":"1E","The Pit":"12","Wicked Dance":"14"}},"Player 1\\Have All\\Medals":{"note":"","data":["810FCB4A FFFF","810FCB4C FFFF","810FCB4E FFFF","800FCB50 0003"],"options":null},"Player 1\\Have All\\Mini Game Icons":{"note":"","data":["800FCB17 0024"],"options":null},"Player 1\\Infinite Ammo":{"note":"","data":["80336535 0063","80336537 0063","80336539 0063","80692B95 0063","80692B97 0063","80692B99 0063","80692B9B 0063","80692B9D 0063","80692B9F 0063","80692BA1 0063"],"options":null},"Player 1\\Infinite\\Cerebral Bores":{"note":"","data":["8033653B 00FF"],"options":null},"Player 1\\Infinite\\Health":{"note":"","data":["81336526 6400","80692B86 0064"],"options":null},"Player 1\\Infinite\\Metal Claws":{"note":"","data":["80336541 00FF"],"options":null},"Player 1\\Infinite\\Proximity Mines":{"note":"","data":["8033653D 00FF"],"options":null},"Player 1\\Infinite\\Sentry Guns":{"note":"","data":["8033653F 00FF"],"options":null},"Player 1\\Infinite\\Time":{"note":"","data":["811407F4 47AF","811407F6 C4B1"],"options":null},"Player 1\\Play As":{"note":"","data":["80140358 00??"],"options":{"Adon":"05","Bastile":"0B","Blind One":"08","Death Guard":"0A","Drone":"02","Elite Guard":"07","Fireborn":"03","Juggernaut":"09","Lord Of The Dead":"06","Mantid":"01","Mites":"12","Monkey":"13","Pur-Lin":"0F","Raptor":"11","Soldier":"04","Symbiont":"10","Syra":"0C","Tail Set":"0E","Turok":"00"}},"Player 1\\Start With Weapon":{"note":"","data":["803366B0 00??"],"options":{"Assault Rifle":"05","Boomerang":"01","Cerebral Bore":"12","Chest Burster":"0F","Emaciator":"0D","Flaregun":"09","Freeze Gun":"08","Grenade Launcher":"0A","Inflator":"0E","Iron Claw":"14","Mag 60":"03","Mini Gun":"06","Mite Bite":"11","Napalm Gel":"0C","PFM Mine":"13","Plasma Rifle":"07","Raptor Claw":"10","Scorpion Launcher":"0B","Sentry Turret":"15","Shotgun":"04","Tek Crossbow":"02","Warhammer":"00"}}},"AE4992C9-9253B253-C:50":{"Access All Secret NASCAR Legends":{"note":"This will give you access to,Alan Kulwicki,Cale Yarborough,Bobby Allison,Davey Allison,Richard Petty,Benny Parsons","data":["50000602 0000","810DF400 0101"],"options":null},"Laps To Race":{"note":"","data":["81044B7E 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7Laps":"07","8 Laps":"08","9 Laps":"09"}}},"AE5B9465-C54D6576-C:50":{"Infinite Options\\Health Commando":{"note":"","data":["810B5364 0080"],"options":null},"Infinite Options\\Money GDI":{"note":"","data":["810C55B6 FFFF"],"options":null},"Infinite Options\\Money NOD":{"note":"","data":["810C575E FFFF"],"options":null},"Infinite Options\\Power GDI":{"note":"","data":["810C55D6 FFFF"],"options":null},"Infinite Options\\Power NOD":{"note":"","data":["810C577E FFFF"],"options":null},"Level Select":{"note":"Select Replay Mission, Press L To Display All Missions,And Press R To Select Your Team You can now press R+L+Up To Win A Battle","data":["810901AA 0001"],"options":null}},"AE82687A-9A3F388D-C:45":{"Always First Place":{"note":"","data":["810BA6DA 0000"],"options":null},"Sixty Frames":{"note":"Too fast.","data":["800B0147 0001"],"options":null}},"AE90DBEB-79B89123-C:50":{"Infinite Dinars":{"note":"","data":["800B6663 00E8","800B6662 00E8"],"options":null},"Infinite Health \u0026 Max Health":{"note":"","data":["810CFF5E 03E7","810CFF62 03E7"],"options":null},"Infinite Magic":{"note":"","data":["810B6BEA 0063","810B6BD2 0063","810B6C02 0063","810B6C1A 0063"],"options":null},"Press L to Levitate":{"note":"Press L Button to Levitate \u0026 Let go to come back down","data":["D017D8F5 0020","810CFFB4 44CB"],"options":null}},"AEBCDD54-15FF834A-C:50":{"Extra Bonuses":{"note":"","data":["810EB9EA 270F"],"options":null},"Fake Max Spin Bar?":{"note":"","data":["800EB9C3 0009"],"options":null},"Infinite\\Crate Attempts":{"note":"","data":["800A9C9B 0007"],"options":null},"Infinite\\Gold Pickups":{"note":"","data":["802EB9E8 0064"],"options":null},"Infinite\\Health":{"note":"","data":["800EB9C7 0009"],"options":null}},"AEBE463E-CC71464B-C:45":{"Always 1st":{"note":"","data":["8013FCE0 0001"],"options":null},"Freeze All Lap Timers":{"note":"","data":["8013FCA1 0001","8013FCA5 0001","8013FCA9 0001"],"options":null},"Freeze Overall Timer":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8013FC95 0001"],"options":null},"Laps Of Race":{"note":"","data":["8013FC8E 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","Never Ending Laps":"06"}},"Level Select":{"note":"","data":["8013FF9B 00??"],"options":{"Bikini Island":"01","Canyon Rush":"00","China Town":"02","China Town Jam":"04","Neo Arena":"03","Neo Speed Way":"05"}},"Music Modifier":{"note":"","data":["80109BDC 00??"],"options":{"Music Off":"00","Music On":"FF"}},"No Damage\\Player 1":{"note":"","data":["50000402 0000","8113FFD8 0000"],"options":null},"No Damage\\Player 2":{"note":"","data":["50000402 0000","81142078 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["8013FF95 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Play As\\Player 2":{"note":"","data":["8013FF96 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Unlock Hidden Tracks \u0026 Cars":{"note":"","data":["8008F29C 0001"],"options":null}},"AEEF2F45-F97E30F1-C:45":{"Low Time":{"note":"","data":["800BA390 0001"],"options":null},"Max Attack Power-Fighters Arena":{"note":"","data":["801FBF6E 00C7"],"options":null},"Max Health Power-Fighters Arena":{"note":"","data":["801FBF6F 00C7"],"options":null},"Max Recovery-Fighters Arena":{"note":"","data":["801FBF70 00C7"],"options":null},"P1 Always Lose Judging":{"note":"","data":["801F727A 0000"],"options":null},"P1 Always Win Judging":{"note":"","data":["801F727A 00FF"],"options":null},"P2 Always Lose Judging":{"note":"","data":["801F53AE 0000"],"options":null},"P2 Always Win Judging":{"note":"","data":["801F53AE 00FF"],"options":null}},"AF7C97CF-24755D18-C:00":{"Infinite 9 Credits":{"note":"","data":["80091A0B 0009"],"options":null}},"AF8679B6-5E1011BF-C:4A":{"Freeze Round Timer":{"note":"","data":["8009D4B4 0000"],"options":null},"Player 1\\Infinite Health":{"note":"","data":["81105026 03E8"],"options":null},"Player 1\\Max Tech Points":{"note":"","data":["811071A0 000F","811071A2 423F","811071A4 000F","811071A6 423F","811071A8 0000","811071AA 0000","811071AC 000F","811071AE 423F"],"options":null},"Player 2\\Infinite Health":{"note":"","data":["8111B3BE 03E8"],"options":null},"Player 2\\Max Tech Points":{"note":"","data":["8111D538 000F","8111D53A 423F","8111D53C 000F","8111D53E 423F","8111D540 0000","8111D542 0000","8111D544 000F","8111D546 423F"],"options":null},"{Unlock All Extras }":{"note":"","data":["8009D48F 00FF"],"options":null}},"B00903C9-3916C146-C:4A":{"Always 1st":{"note":"","data":["8013CC10 0001"],"options":null},"Freeze All Lap Timers":{"note":"","data":["8013CBD1 0001","8013CBD5 0001","8013CBD9 0001"],"options":null},"Freeze Overall Timer":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8013CBC5 0001"],"options":null},"Laps Of Race":{"note":"","data":["8013CBBE 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","Never Ending Laps":"06"}},"Level Select":{"note":"For this cheat to work,as soon as you put the cheat on you must turn it back off,if not you wont beable to quit a Race or even finish one.","data":["8013CECB 00??"],"options":{"Bikini Island":"01","Canyon Rush":"00","China Town":"02","China Town Jam":"04","Neo Arena":"03","Neo Speed Way":"05"}},"Music Modifier":{"note":"","data":["80106B7C 00??"],"options":{"Music Off":"00","Music On":"FF"}},"No Damage\\Player 1":{"note":"","data":["50000402 0000","8113CF08 0000"],"options":null},"No Damage\\Player 2":{"note":"","data":["50000402 0000","8113EF98 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["8013CEC5 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Play As\\Player 2":{"note":"","data":["8013CEC6 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Unlock All Tracks and Vehicles":{"note":"","data":["8008D0AC 0001"],"options":null}},"B044B569-373C1985-C:50":{"Always Have Wallet Size":{"note":"","data":["80118472 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C64F5 0010","81119736 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["801192B9 00FF","8011972F 00??"],"options":{"Off":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C64F5 0000","801197E3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["80023414 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["80118456 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["80118457 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["80118458 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["80118459 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023D6DF 0020","8023D6E5 0033"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F12C8 0005","801EDD08 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["80118472 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["80118473 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["80118471 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111846C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["81118474 30FF","81118476 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["80118448 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011844E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["80118454 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011844C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["80118446 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["80118450 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["80118445 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["80118444 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["80118447 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011844A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011844D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["80118451 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["80118452 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["80118449 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011844F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["80118455 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["80118453 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011844B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011845F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["50000B01 0000","80118478 0007","50000501 0000","8011848F 0009","80118497 0009","80118499 0009","8011849C 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["80118464 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011845E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011845D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["80118462 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011845C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118400 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118409 0008","8011840A 0001","8011840C 0001","80118403 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011846A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111979C 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["801197A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["801197A5 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C64F5 0020","811D8AE0 40CB","D01C64F5 0000","811D92F2 000D","80118440 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["801197D9 00??"],"options":{"English":"00","French":"02","German":"01"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011849F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["801184A1 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["811183FE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["801D851B ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C64F5 0020","811D92F2 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C64F5 0020","811D8AE0 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C64F5 0010","801183D7 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["811183DC ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011845A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011845B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["80118440 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011840E 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["811195F2 0000","811195F4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119765 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119765 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119765 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["80119765 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}},"Widescreen":{"note":"Originally by Darkludx","data":["81025044 1000","81025046 0023","81092778 3C07","8109277A 3FE3"],"options":null}},"B088FBB4-441E4B1D-C:50":{"Access\\All Lures":{"note":"Codes To Be Used With Save Slot 1","data":["8019A1A9 0003","8119A1AA FFFF"],"options":null},"Access\\All Poles 2":{"note":"Codes To Be Used With Slot 1","data":["8019A1AC 0007"],"options":null},"Access\\Extra Boat 2":{"note":"Codes To Be Used With Slot 1","data":["8019A1AD 0001"],"options":null},"All Lakes Available":{"note":"","data":["80119800 0001"],"options":null},"Easy Win Current Tournament":{"note":"","data":["8011980F 0001"],"options":null},"Extra $300":{"note":"","data":["8011980B 0001"],"options":null},"Fish Are More Active":{"note":"","data":["80119807 0001"],"options":null},"Large Fish":{"note":"","data":["80119806 0001"],"options":null},"More fish in Lakes":{"note":"","data":["8011980D 0001"],"options":null},"No Penalties During Tournamet":{"note":"","data":["80119808 0001"],"options":null},"No Snags While Fishing":{"note":"","data":["80119809 0001"],"options":null},"Super Lure":{"note":"","data":["8011980E 0001"],"options":null},"Unbreakable Line":{"note":"","data":["80119805 0001"],"options":null}},"B19AD999-7E585118-C:45":{"Have\\Alpine Challenge Track":{"note":"","data":["801256DF 0001"],"options":null},"Have\\Aztec Valley Track":{"note":"","data":["801256BF 0001"],"options":null},"Have\\Death Trap Track":{"note":"","data":["801256FF 0001"],"options":null},"Infinite Missiles (Upon Pickup)":{"note":"","data":["D0164BBF 0001","801A6054 0009"],"options":null}},"B2055FBD-0BAB4E0C-C:50":{"Always Have Wallet Size":{"note":"","data":["801184B2 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C6535 0010","81119776 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["801192F9 00FF","8011976F 00??"],"options":{"Off":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C6535 0000","80119823 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["80023454 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["80118496 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["80118497 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["80118498 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["80118499 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023D71F 0020","8023D725 0033"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F1308 0005","801EDD48 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["801184B2 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["801184B3 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["801184B1 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811184AC 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["811184B4 30FF","811184B6 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["80118488 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011848E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["80118494 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011848C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["80118486 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["80118490 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["80118485 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["80118484 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["80118487 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011848A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011848D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["80118491 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["80118492 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["80118489 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011848F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["80118495 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["80118493 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011848B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011849F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["50000B01 0000","801184B8 0007","50000501 0000","801184CF 0009","801184D7 0009","801184D9 0009","801184DC 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["801184A4 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011849E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011849D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["801184A2 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011849C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["81118440 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D0118449 0008","8011844A 0001","8011844C 0001","80118443 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["801184AA 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["811197DC 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["801197E1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["801197E5 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C6535 0020","811D8B20 40CB","D01C6535 0000","811D9332 000D","80118480 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Language Select":{"note":"","data":["80119819 00??"],"options":{"English":"00","French":"02","German":"01"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["801184DF 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["801184E1 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111843E 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["811197D8 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C6535 0020","811D9332 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C6535 0020","811D8B20 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C6535 0010","80118417 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111841C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011849A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011849B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["80118480 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011844E 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["81119632 0000","81119634 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["801197A5 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}},"Widescreen":{"note":"Originally by Darkludx","data":["81025044 1000","81025046 0023","81092778 3C07","8109277A 3FE3"],"options":null}},"B20F73B6-2975FC34-C:45":{"Enemies Fight Themselves":{"note":"","data":["8005EE9C 0020"],"options":null},"Have\\All Weapons \u0026 Ammo":{"note":"","data":["8115D06E 0001","8116368E 0001"],"options":null},"Have\\Invisible Soldier":{"note":"you are Invisible to most enimies who just can not dectect or see you.","data":["8115D052 0001"],"options":null},"Have\\Large Mode":{"note":"Do not use with Mini Mode only use one at a time","data":["811636AE 0001"],"options":null},"Have\\Mini Mode":{"note":"Do not use with Big Mode only use one at a time","data":["8115D06A 0001"],"options":null},"Infinite\\Continues":{"note":"","data":["8115D062 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8135C516 0600"],"options":null},"Move Faster":{"note":"","data":["800B9705 00FF","800B9749 00FF"],"options":null},"Play Level":{"note":"","data":["81172C0A 0001","810B51AE 00??"],"options":{"Bed":"0B","Bridge":"02","Cashier":"0D","Castle":"07","Desk":"0A","Dinner":"01","Freezer":"04","Fridge":"03","Graveyard":"06","Insidewall":"05","Pinball":"11","Pool":"10","Revenge":"09","Rockets":"0F","Tanbase":"08","Town":"0C","Train":"0E"}},"Play as":{"note":"","data":["81164372 00??"],"options":{"Big Green One":"07","Hail Mendheimicus":"0C","Mini Soldier":"0D","Mystery Women":"0B","Plastro":"09","Vikki":"08"}}},"B210DF19-98B58D1A-C:50":{"Access\\All Guns":{"note":"","data":["8015E0CF 0001"],"options":null},"Access\\Max Ammo":{"note":"","data":["801646EF 0001"],"options":null},"Enable Cheat Menu":{"note":"Enable before you enter in game and you will find the cheat menu when you press the Start Button","data":["8003F36F 0003","8004719F 0003"],"options":null},"Enable Level Select Menu":{"note":"This must be used with Enable Cheat Menu and enabled before you enter in game and you will find the level select menu replaces the cheat menu when you press the Start Button","data":["810AF0BA DC38"],"options":null},"Have\\Debug Mode":{"note":"When this code is activated, a display of numbers will show on the screen as the players move around","data":["8015E417 0001"],"options":null},"Have\\Large Mode":{"note":"Do not use with Mini Mode only use one at a time","data":["8016470F 0001"],"options":null},"Have\\Mini Mode":{"note":"Do not use with Large Mode only use one at a time","data":["8015E0C9 0001"],"options":null},"Infinite\\Continues":{"note":"","data":["8015E0C3 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8016471F 0001"],"options":null},"Invisible Soldier":{"note":"you are Invisible to most enimies who just can not dectect or see you.","data":["8015E0B3 0001"],"options":null},"Play As":{"note":"Here you can choose who you would like to play as. But Do not use this with any other play as option..","data":["811653D2 00??"],"options":{"Plastro":"09","The Big Green One":"07","Vikki":"08"}}},"B2242748-FFBD61DA-C:45":{"(Everything Unlocked)\\Save File 1":{"note":"This Unlocks All Levels and Cheat Menu Items","data":["50002902 0000","810699EE ????"],"options":{"Clear Save Slot":"0000","Unlocked":"FFFF"}},"(Everything Unlocked)\\Save File 2":{"note":"This Unlocks All Levels and Cheat Menu Items","data":["50002902 0000","8106992E ????"],"options":{"Clear Save Slot":"0000","Unlocked":"FFFF"}},"(Everything Unlocked)\\Save File 3":{"note":"This Unlocks All Levels and Cheat Menu Items","data":["50002902 0000","81069A4E ????"],"options":{"Clear Save Slot":"0000","Unlocked":"FFFF"}},"(Everything Unlocked)\\Save File 4":{"note":"This Unlocks All Levels and Cheat Menu Items","data":["50002902 0000","8106998E ????"],"options":{"Clear Save Slot":"0000","Unlocked":"FFFF"}},"Have All\\64 Characters In Multi Player":{"note":"Enables all Characters selectable to play as in Multi-Player","data":["8002B197 0040"],"options":null},"Have All\\Objectives Complete":{"note":"","data":["80036FD3 0001"],"options":null},"Infinite\\Ammo (All Levels)":{"note":"","data":["80079E3B 0001"],"options":null},"Infinite\\Health (All levels)":{"note":"","data":["8100C0F4 0801","8100C0F6 8090","8100C0F8 AFA4","8100C0FA 0000","81060240 0004","81060242 7600","81060244 3C02","81060246 8008","81060248 8C42","8106024A 9EE0","8106024C 3401","8106024E 3F80","81060250 A441","81060252 00DC","81060254 0800","81060256 303F"],"options":null}},"B30ED978-3003C9F9-C:45":{"Cool Camera":{"note":"","data":["800E523E 0000"],"options":null},"Expert Mode":{"note":"","data":["800E5ED9 0000","812C4B48 0000","812C4B4C 0000"],"options":null},"Have Boost From Start":{"note":"","data":["D02C4DAC 003F","802C4925 0050"],"options":null},"Hunk O' Junk":{"note":"","data":["802C4B3F 0040"],"options":null},"Infinite Lives":{"note":"","data":["800E5ED9 0005"],"options":null},"Max Grand Prix Points":{"note":"","data":["812C492A FFFF"],"options":null},"Max Shield":{"note":"","data":["812C4B4C 4326"],"options":null},"One Lap To Race":{"note":"","data":["D02C4BC9 0000","812C4BC8 0002","D02C4BCB 0001","812C4BCA 0002"],"options":null},"Player 1\\Car Color Modifier":{"note":"","data":["802C4BED 00??"],"options":{"1st Color":"00","2nd Color":"01","3rd Color":"02","4th Color":"03","Hidden Color":"05"}},"Player 1\\Character Modifier":{"note":"","data":["800E5EE1 00??"],"options":{"Antonio Guster":"0E","Baba":"07","Beastman":"15","Billy":"1B","Bio Rex":"19","Black Shadow":"0F","Blood Falcon":"1D","Captain Falcon":"00","Dr. Clash":"17","Dr. Stewart":"01","Draq":"1A","Gomar + Shioh":"09","Jack Levin":"11","James McCloud":"0C","Jody Summer":"04","John Tanaka":"14","Kate Alen":"0A","Leon":"0D","Michael Chain":"10","Mighty Gazelle":"05","Mr. EAD":"06","Mrs. Arrow":"13","Octoman":"08","Perfect Captain Falcon":"1E","Pico":"02","Roger Buster":"0B","Samurai Goroh":"03","Silver Neelsen":"18","Super Arrow":"12","The Skull":"1C","Zoda":"16"}},"Player 1\\Infinite Shield":{"note":"","data":["812C4B48 4326"],"options":null},"Player 1\\Invisible Car":{"note":"Vs. Mode Only","data":["802C4CCB 0000"],"options":null},"Player 2\\Car Color Modifier":{"note":"","data":["802C4F95 00??"],"options":{"1st Color":"00","2nd Color":"01","3rd Color":"02","4th Color":"03","Hidden Color":"05"}},"Player 2\\Character Modifier":{"note":"","data":["802C4F90 00??"],"options":{"Antonio Guster":"0E","Baba":"07","Beastman":"15","Billy":"1B","Bio Rex":"19","Black Shadow":"0F","Blood Falcon":"1D","Captain Falcon":"00","Dr. Clash":"17","Dr. Stewart":"01","Draq":"1A","Gomar + Shioh":"09","Jack Levin":"11","James McCloud":"0C","Jody Summer":"04","John Tanaka":"14","Kate Alen":"0A","Leon":"0D","Michael Chain":"10","Mighty Gazelle":"05","Mr. EAD":"06","Mrs. Arrow":"13","Octoman":"08","Perfect Captain Falcon":"1E","Pico":"02","Roger Buster":"0B","Samurai Goroh":"03","Silver Neelsen":"18","Super Arrow":"12","The Skull":"1C","Zoda":"16"}},"Player 2\\Infinite Shield":{"note":"","data":["812C4EF0 4326"],"options":null},"Player 3\\Car Color Modifier":{"note":"","data":["802C533D 00??"],"options":{"1st Color":"00","2nd Color":"01","3rd Color":"02","4th Color":"03","Hidden Color":"05"}},"Player 3\\Character Modifier":{"note":"","data":["802C5338 00??"],"options":{"Antonio Guster":"0E","Baba":"07","Beastman":"15","Billy":"1B","Bio Rex":"19","Black Shadow":"0F","Blood Falcon":"1D","Captain Falcon":"00","Dr. Clash":"17","Dr. Stewart":"01","Draq":"1A","Gomar + Shioh":"09","Jack Levin":"11","James McCloud":"0C","Jody Summer":"04","John Tanaka":"14","Kate Alen":"0A","Leon":"0D","Michael Chain":"10","Mighty Gazelle":"05","Mr. EAD":"06","Mrs. Arrow":"13","Octoman":"08","Perfect Captain Falcon":"1E","Pico":"02","Roger Buster":"0B","Samurai Goroh":"03","Silver Neelsen":"18","Super Arrow":"12","The Skull":"1C","Zoda":"16"}},"Player 3\\Infinite Shield":{"note":"","data":["812C5298 4326"],"options":null},"Player 4\\Car Color Modifier":{"note":"","data":["802C56E5 00??"],"options":{"1st Color":"00","2nd Color":"01","3rd Color":"02","4th Color":"03","Hidden Color":"05"}},"Player 4\\Character Modifier":{"note":"","data":["802C56E0 00??"],"options":{"Antonio Guster":"0E","Baba":"07","Beastman":"15","Billy":"1B","Bio Rex":"19","Black Shadow":"0F","Blood Falcon":"1D","Captain Falcon":"00","Dr. Clash":"17","Dr. Stewart":"01","Draq":"1A","Gomar + Shioh":"09","Jack Levin":"11","James McCloud":"0C","Jody Summer":"04","John Tanaka":"14","Kate Alen":"0A","Leon":"0D","Michael Chain":"10","Mighty Gazelle":"05","Mr. EAD":"06","Mrs. Arrow":"13","Octoman":"08","Perfect Captain Falcon":"1E","Pico":"02","Roger Buster":"0B","Samurai Goroh":"03","Silver Neelsen":"18","Super Arrow":"12","The Skull":"1C","Zoda":"16"}},"Player 4\\Infinite Shield":{"note":"","data":["812C5640 4326"],"options":null},"Show 30 Cars Out Of 1 Position":{"note":"","data":["800E5FC7 001D"],"options":null},"Super Ultimate Mega Fast Mode":{"note":"","data":["812C4984 2222"],"options":null},"Time Always 00.00.00/1st Place":{"note":"","data":["802C4BC0 0000","802C4BC2 0001"],"options":null},"Track Modifier":{"note":"","data":["800F8517 00??"],"options":{"Big Blue":"04","Big Blue 2":"0A","Big Hand":"17","Devils Forest":"03","Devils Forest 2":"08","Devils Forest 3":"13","Fire Field":"0C","Mute City":"00","Mute City 2":"11","Port Town":"05","Port Town 2":"16","Rainbow Road":"12","Red Canyon":"0F","Sand Ocean":"02","Sand Ocean 2":"15","Sector Alpha":"06","Sector Beta":"0E","Silence":"01","Silence 2":"0D","Space Plant":"14","White Land":"0B","White Land 2":"10"}},"Unlock Everything":{"note":"","data":["800CD3C8 0001"],"options":null},"Widescreen":{"note":"","data":["8106D164 0803","8106D166 522C","810D48B0 3C1B","810D48B2 3F40","810D48B4 449B","810D48B6 9000","810D48B8 0000","810D48BA 0000","810D48BC 0801","810D48BE B45B","810D48C0 4612","810D48C2 3182","D11418A0 3F99","811418A0 3FCC"],"options":null}},"B323E37C-BBC35EC4-C:00":{"Have Infinite Max Credits":{"note":"","data":["802C9FE1 0099"],"options":null}},"B3402554-7340C004-C:45":{"Car Upgrades\\'63 Muscle Car":{"note":"","data":["8015056F 0005"],"options":null},"Car Upgrades\\All-Terrain Vehicle":{"note":"","data":["8015057F 0004"],"options":null},"Car Upgrades\\Devastator":{"note":"","data":["80150577 0005"],"options":null},"Car Upgrades\\Italia P69":{"note":"","data":["8015057B 0005"],"options":null},"Car Upgrades\\La Bomba":{"note":"","data":["80150573 0005"],"options":null},"Car Upgrades\\Police Car":{"note":"","data":["80150587 0004"],"options":null},"Car Upgrades\\School Bus":{"note":"","data":["80150583 0004"],"options":null},"Infinite Time":{"note":"","data":["8015097D 0095"],"options":null},"Play Level Modifier":{"note":"","data":["80150993 00??"],"options":{"Appalachia":"0C","Arizona":"07","Beverly Hills":"04","Chicago":"0A","Cruise The USA":"0E","Death Valley":"06","Golden Gate Park":"00","Grand Canyon":"08","Indiana":"0B","Iowa":"09","LA Freeway":"05","Redwood Forest":"03","San Francisco":"01","US 101":"02","Washington DC":"0D"}},"Player 1\\Always First Place":{"note":"","data":["8015025B 0001"],"options":null},"Player 1\\Always Have Fastest Car":{"note":"","data":["8015024A 0001"],"options":null},"Player 1\\Gearbox Type Modifier":{"note":"","data":["80150243 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 1\\Lights \u0026 Sirens For Police Car \u0026 School Bus":{"note":"","data":["8115056A 0001","8114E3BA 0001"],"options":null},"Player 2\\Always First Place":{"note":"","data":["801505F7 0001"],"options":null},"Player 2\\Always Have Fastest Car":{"note":"","data":["801505E6 0001"],"options":null},"Player 2\\Gearbox Type Modifier":{"note":"","data":["801505DF 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 2\\Lights \u0026 Sirens For Police Car \u0026 School Bus":{"note":"","data":["81150906 0001","8114E3D2 0001"],"options":null},"Stop Elapsed Time And No Traffic":{"note":"","data":["80150979 0000"],"options":null}},"B35FEBB0-7427B204-C:46":{"Earn Spirits Faster":{"note":"","data":["8007D3AD 0000"],"options":null},"Have All Elements":{"note":"","data":["8107D39C 3232","8107D39E 3232"],"options":null},"Makes your HP 999-999":{"note":"","data":["8107D37C 03E7","8107D37E 03E7"],"options":null},"Makes your MP 999-999":{"note":"","data":["8107D380 03E7","8107D382 03E7"],"options":null},"No Random Battles":{"note":"","data":["8008DE6C 0000","8008DE6E 0000"],"options":null},"Set Agility to 999-999":{"note":"","data":["8107D384 03E7"],"options":null},"Set Defence to 999-999":{"note":"","data":["8107D386 03E7"],"options":null}},"B3D451C6-E1CB58E2-C:4A":{"Decrease Fodder":{"note":"","data":["81180BB4 03E7"],"options":null},"Decrease Material":{"note":"","data":["8118A2F0 03E7"],"options":null},"Max Money":{"note":"","data":["811FDA9C 000F","811FDA9E 423F"],"options":null}},"B443EB08-4DB31193-C:45":{"All Equipment Upgrades":{"note":"","data":["801ED89D 0023","811ED8EA 201B","801ED87C 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D038127B 0000","801ED832 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801ED8B2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801ED8B3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801ED8B4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801ED8B5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801ED8B6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801ED8B7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801ED8A5 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801ED8AB 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801ED8B1 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Fight Demo Majora's Mask":{"note":"With this code,load the game \u0026 put the cheat on. then press start to apear in the Demo mode.","data":["801688D8 0020"],"options":null},"Fog\\Blue":{"note":"","data":["801642C8 0020"],"options":null},"Fog\\Pink":{"note":"","data":["801642CC 0020"],"options":null},"Fog\\Yellow":{"note":"","data":["801642D0 0020"],"options":null},"Have\\All Masks":{"note":"","data":["801ED8B8 003E","801ED8B9 0038","801ED8BA 0047","801ED8BB 0045","801ED8BC 0040","801ED8BD 0032","801ED8BE 003A","801ED8BF 0046","801ED8C0 0039","801ED8C1 0042","801ED8C2 0048","801ED8C3 0033","801ED8C4 003C","801ED8C5 003D","801ED8C6 0037","801ED8C7 003F","801ED8C8 0036","801ED8C9 0034","801ED8CA 0043","801ED8CB 0041","801ED8CC 003B","801ED8CD 0044","801ED8CE 0049","801ED8CF 0035"],"options":null},"Have\\All Quest Status Items":{"note":"","data":["801ED8ED 0005","811ED8EE F7CF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801ED8A2 0002"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801ED8A3 0003"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801ED8A4 0004"],"options":null},"Have\\Bombchu":{"note":"","data":["801ED8A7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801ED8A6 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801ED8A9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801ED8A8 0008"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801ED8B0 0010"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801ED8A1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801ED8AF 000F"],"options":null},"Have\\Item Modifier":{"note":"","data":["801ED8B0 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\Lens of Truth":{"note":"","data":["801ED8AE 000E"],"options":null},"Have\\Magic Beans":{"note":"","data":["801ED8AA 000A"],"options":null},"Have\\Ocarina of Time":{"note":"","data":["801ED8A0 0000"],"options":null},"Have\\Pictograph":{"note":"","data":["801ED8AD 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801ED8AC 000C"],"options":null},"Infinite\\Health":{"note":"","data":["811ED866 0140"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811ED864 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"","data":["801ED8D1 0063","50000501 0000","801ED8D6 0063","50000201 0000","801ED8DC 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801ED869 0060","811ED870 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811ED86A 03E7"],"options":null},"Maximum Visibility":{"note":"","data":["801642D8 0020"],"options":null},"Play As":{"note":"","data":["801ED850 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D038127B 0020","8139A558 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You have been warned.","data":["801ED87C 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F88A0 0008","811ED846 FFFD","D01F88A0 0004","811ED846 0000","D01F88A0 0002","811ED846 FFFE"],"options":null},"Use C-Buttons Anywhere":{"note":"This code allows you to use C-Button Items where you normally can't use them.","data":["811F1748 0000","811F174A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["D03E4CFA 0000","803FD555 0001","813FD55A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"B44CAB74-07029A29-C:50":{"For More Time Press D-pad up":{"note":"","data":["D00EA380 0008","8115F0D2 1724","D00EA380 0008","8115F0DA 003C"],"options":null},"Infinite Options\\Freezing Breath":{"note":"","data":["8122CDE8 42C8"],"options":null},"Infinite Options\\Health":{"note":"","data":["8122CDD4 42C8"],"options":null},"Infinite Options\\Laser Eye":{"note":"","data":["8122CDE4 42C8"],"options":null},"Infinite Options\\Running Boosts":{"note":"","data":["8122CDDC 42C8"],"options":null},"Infinite Options\\X-Ray Vision":{"note":"","data":["8122CDE0 42C8"],"options":null},"Level Select":{"note":"","data":["D00EA380 0020","8117A378 0013","D00EA380 0020","8117A388 000F","81144727 0063"],"options":null}},"B54CE881-BCCB6126-C:45":{"Hole In One\\Hole 01":{"note":"","data":["800FF713 0000"],"options":null},"Hole In One\\Hole 02":{"note":"","data":["800FF715 0000"],"options":null},"Hole In One\\Hole 03":{"note":"","data":["800FF717 0000"],"options":null},"Hole In One\\Hole 04":{"note":"","data":["800FF719 0000"],"options":null},"Hole In One\\Hole 05":{"note":"","data":["800FF71B 0000"],"options":null},"Hole In One\\Hole 06":{"note":"","data":["800FF71D 0000"],"options":null},"Hole In One\\Hole 07":{"note":"","data":["800FF71F 0000"],"options":null},"Hole In One\\Hole 08":{"note":"","data":["800FF721 0000"],"options":null},"Hole In One\\Hole 09":{"note":"","data":["800FF723 0000"],"options":null},"Hole In One\\Hole 10":{"note":"","data":["800FF725 0000"],"options":null},"Hole In One\\Hole 11":{"note":"","data":["800FF727 0000"],"options":null},"Hole In One\\Hole 12":{"note":"","data":["800FF729 0000"],"options":null},"Hole In One\\Hole 13":{"note":"","data":["800FF72B 0000"],"options":null},"Hole In One\\Hole 14":{"note":"","data":["800FF72D 0000"],"options":null},"Hole In One\\Hole 15":{"note":"","data":["800FF72F 0000"],"options":null},"Hole In One\\Hole 16":{"note":"","data":["800FF731 0000"],"options":null},"Hole In One\\Hole 17":{"note":"","data":["800FF733 0000"],"options":null},"Hole In One\\Hole 18":{"note":"","data":["800FF735 0000"],"options":null}},"B58988E9-B1FC4BE8-C:50":{"Always 1st":{"note":"","data":["812C4DC6 0001"],"options":null},"Have All\\Races":{"note":"","data":["812B5DC4 0101","812B5DC6 0101","812B5DC8 0101","812B5DCA 0101","812B5DCC 0101","812B5DCE 0101","812B5DD0 0101"],"options":null},"Have All\\Ships":{"note":"","data":["812B5DD2 0101","812B5DD4 0101","812B5DD6 0101","812B5DD8 0101","812B5DDA 0101","812B5DDC 0101","812B5DDE 0101"],"options":null},"Infinite\\Boosts\\Player 1":{"note":"","data":["812C4DCC 4190"],"options":null},"Infinite\\Boosts\\Player 2":{"note":"","data":["812C50FC 4190"],"options":null},"Infinite\\Time":{"note":"","data":["812B49C0 42C8"],"options":null}},"B6524461-ED6D04B1-C:50":{"Infinite Health\\Player 1":{"note":"","data":["80225E9D 00FA"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["80225E9F 00FA"],"options":null},"Infinite Time":{"note":"","data":["80225EA5 003C"],"options":null},"Win Once To Win\\Player 1":{"note":"","data":["80225E95 0001"],"options":null},"Win Once To Win\\Player 2":{"note":"","data":["80225E97 0001"],"options":null}},"B6951A94-63C849AF-C:4A":{"Have All Items":{"note":"","data":["50000501 0000","80389C4A 0001","50000301 0000","80389C51 0001","80389C5A 0001","80389C5B 0001","80389C5D 0001","50000E01 0000","80389C60 0001"],"options":null},"Have\\Exp Points":{"note":"","data":["80389C49 0063"],"options":null},"Have\\Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C3F 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C45 0001","81389C46 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C3E 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C49 0063"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C48 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the GS button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C90 ????","89389C92 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CED 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C88 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C88 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C3D 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C42 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"B6BC0FB0-E3812198-C:4A":{"All Levels\\Infinite\\Energy":{"note":"","data":["800D5A9B 00FF"],"options":null},"All Levels\\Infinite\\Max Credits":{"note":"","data":["80075DDC 00FF"],"options":null},"All Levels\\Infinite\\Time":{"note":"","data":["800D5A97 0063"],"options":null},"All Levels\\Unlock All\\Levels - Options Menu":{"note":"","data":["80075DD6 FFFF","80075DD7 FFFF"],"options":null},"All Levels\\Unlock All\\Option Menu Items":{"note":"","data":["80075DD8 FFFF","80075DD9 FFFF"],"options":null},"Level\\0-0\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["8010BB0C 0000"],"options":null},"Level\\0-0\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8010BB2B 0001"],"options":null},"Level\\1-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801657DC 0000"],"options":null},"Level\\1-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801657FB 0001"],"options":null},"Level\\1-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCF9C 0000"],"options":null},"Level\\1-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCFBB 0001"],"options":null},"Level\\1-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801126EC 0000"],"options":null},"Level\\1-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8011270B 0001"],"options":null},"Level\\2-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BD29C 0000"],"options":null},"Level\\2-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801BD2BB 0001"],"options":null},"Level\\2-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B911C 0000"],"options":null},"Level\\2-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B913B 0001"],"options":null},"Level\\2-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7CEC 0000"],"options":null},"Level\\2-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7D0B 0001"],"options":null},"Level\\3-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801588EC 0000"],"options":null},"Level\\3-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8015890B 0001"],"options":null},"Level\\3-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B936C 0000"],"options":null},"Level\\3-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B938B 0001"],"options":null},"Level\\3-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801013CC 0000"],"options":null},"Level\\3-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["81100E08 C350"],"options":null}},"B703EB23-28AAE53A-C:4A":{"Infinite\\Lives":{"note":"","data":["800A37C8 0009"],"options":null},"Infinite\\Specials":{"note":"","data":["800A37C9 0003"],"options":null},"Max\\Combo":{"note":"","data":["810A37C4 7FFF"],"options":null},"Max\\Lower Level":{"note":"","data":["800A37D8 0003"],"options":null},"Max\\Score":{"note":"","data":["800A37A8 03E7","800A37A9 03E7"],"options":null},"Max\\Upper Level":{"note":"","data":["800A37D9 0063"],"options":null},"Play As":{"note":"","data":["800A37CC 00??"],"options":{"Character 1":"00","Character 2":"01","Character 3":"02"}},"Status Modifier":{"note":"","data":["800A37CA 00??"],"options":{"High":"01","Low":"03","Mid":"02"}}},"B73AB6F6-296267DD-C:45":{"All Levels\\Infinite\\Energy":{"note":"","data":["800D5A9B 00FF"],"options":null},"All Levels\\Infinite\\Max Credits":{"note":"","data":["80075DDC 00FF"],"options":null},"All Levels\\Infinite\\Time":{"note":"","data":["800D5A97 0063"],"options":null},"All Levels\\Unlock All\\Levels - Options Menu":{"note":"","data":["80075DD6 FFFF","80075DD7 FFFF"],"options":null},"All Levels\\Unlock All\\Option Menu Items":{"note":"","data":["80075DD8 FFFF","80075DD9 FFFF"],"options":null},"Level\\0-0\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time and only use for that specific level Cheat","data":["8010BB0C 0000"],"options":null},"Level\\0-0\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8010BB2B 0001"],"options":null},"Level\\1-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801657DC 0000"],"options":null},"Level\\1-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801657FB 0001"],"options":null},"Level\\1-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCF9C 0000"],"options":null},"Level\\1-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801BCFBB 0001"],"options":null},"Level\\1-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801126EC 0000"],"options":null},"Level\\1-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8011270B 0001"],"options":null},"Level\\2-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801BD29C 0000"],"options":null},"Level\\2-1\\Invincible":{"note":"","data":["801BD2BB 0001"],"options":null},"Level\\2-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B911C 0000"],"options":null},"Level\\2-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B913B 0001"],"options":null},"Level\\2-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7CEC 0000"],"options":null},"Level\\2-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801A7D0B 0001"],"options":null},"Level\\3-1\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801588EC 0000"],"options":null},"Level\\3-1\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["8015890B 0001"],"options":null},"Level\\3-2\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801B936C 0000"],"options":null},"Level\\3-2\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["801B938B 0001"],"options":null},"Level\\3-3\\Infinite Air Jumping":{"note":"Only use one Infinite Air Jumping level Code at a time for that specific level and only use for that specific level Cheat","data":["801013CC 0000"],"options":null},"Level\\3-3\\Invincible":{"note":"Only use one Ivincible level Code at a time for that specific level and only use for that specific level Cheat","data":["81100E08 C350"],"options":null},"Widescreen":{"note":"","data":["81062CCC 3FE3"],"options":null}},"B7CF2136-FA0AA715-C:50":{"Access All In-Game Cheats":{"note":"In Set-Up Menu","data":["810C48F8 0100"],"options":null},"Access Midway Track":{"note":"","data":["810C4890 03E7"],"options":null},"Activate All In-Game Cheats":{"note":"","data":["50000E02 0000","810C48A4 FFFF"],"options":null},"All Keys,Cars \u0026 Cans":{"note":"","data":["50000E02 0000","810C4574 FFFF"],"options":null},"Always 1st":{"note":"","data":["80115499 0000"],"options":null},"Best Stunt Points":{"note":"On Track","data":["8110B438 03E7"],"options":null},"Easy Difficulty":{"note":"","data":["8010FFAA 0000"],"options":null},"Laps To Race":{"note":"","data":["811088D0 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Max \u0026 Best Score":{"note":"On Stunt Track","data":["50000502 0000","810C4702 FFFF"],"options":null},"Max Points In Total":{"note":"","data":["810E235A 03E7"],"options":null},"No\\Checkpoints Extended Time":{"note":"","data":["8010FF47 0000"],"options":null},"No\\Wind":{"note":"","data":["80116E98 0000"],"options":null},"Number Of Drones In Race":{"note":"","data":["810E1B88 00??"],"options":{"1 Drone":"01","2 Drones":"02","3 Drones":"03","4 Drones":"04","5 Drones":"05","6 Drones":"06","7 Drones":"07","8 Drones":"08","9 Drones":"09"}}},"B7F40BCF-553556A5-C:45":{"Have Spells\\Ball Bearing":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA67C 0006"],"options":null},"Have Spells\\Balloon":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA7BC 0006"],"options":null},"Have Spells\\Bowling Ball":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA5FC 0006"],"options":null},"Have Spells\\Boxing Glove":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA8BC 000E"],"options":null},"Have Spells\\Bungee":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA77C 000E"],"options":null},"Have Spells\\Fat Glover":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA97C 001E"],"options":null},"Have Spells\\First Aid":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA93C 001E"],"options":null},"Have Spells\\Gauntlet":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA87C 001E"],"options":null},"Have Spells\\Glass Cutter":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA8FC 000E"],"options":null},"Have Spells\\Possess":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA83C 0006"],"options":null},"Have Spells\\Rubber Ball":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["801DA5BC 0006"],"options":null},"Have Spells\\Speed-Up":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA6FC 000E"],"options":null},"Have Spells\\Sucker Ball":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA63C 000E"],"options":null},"Have Spells\\Super-Slam":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA7FC 0016"],"options":null},"Have Spells\\Teleport":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA73C 000E"],"options":null},"Have Spells\\Yo-Yo":{"note":"Do not enable until you have spoken to the Cooking Pot and Collected all the ingredients and your Bro has made his first Spell and fled. It is now safe to turn on this cheat.","data":["801DA6BC 0016"],"options":null},"Infinite\\Max Health":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["8027069B 0006","8027069D 0006","802881CB 0006"],"options":null},"Infinite\\Max Lives":{"note":"","data":["80288127 00FF","80270697 00FF"],"options":null},"Infinite\\Max Magical\\Ball Energy":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["802706A3 00FF","80288313 00FF"],"options":null},"Infinite\\Max Magical\\Spell Energy":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["802706A1 00FF","8028826F 00FF"],"options":null},"Infinite\\Max Rank Bonus":{"note":"Do not enable until you have spoken to the Cooking Pot and gone out side for the 1st time","data":["802706FD 00FF","802883B7 00FF"],"options":null}},"B8F0BD03-4479189E-C:50":{"Access All Tracks In Match Mode":{"note":"","data":["50000602 0000","810A9080 0001"],"options":null},"Access all Gold Trophies":{"note":"Championshp \u0026 Match Mode","data":["50000602 0000","810A9078 0000"],"options":null},"Always 1st":{"note":"","data":["800A9107 0000"],"options":null},"Infinite Time":{"note":"","data":["8009498F 003C"],"options":null}},"B9A9ECA2-17AAE48E-C:45":{"Always Place 1st":{"note":"","data":["80152906 0000"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 1":{"note":"","data":["8113A110 FFFF"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 2":{"note":"","data":["8113A170 FFFF"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 4":{"note":"","data":["8113A230 FFFF"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 5":{"note":"","data":["8113A290 FFFF"],"options":null},"Have\\All\\Gold \u0026 Silver Coins\\Track 6":{"note":"","data":["8113A2F0 FFFF"],"options":null},"Infinate Ammo\\All Players In Battle":{"note":"","data":["80152B9D 0050","80152F55 0050","8015330D 0050","801536C5 0050"],"options":null},"Max Score\\Stunt Mode":{"note":"","data":["8115204E 7FFF"],"options":null},"Speed Activator":{"note":"","data":["D0037AA4 0020","8114A298 ????"],"options":{"146 mph":"4333","170 mph":"4350","210 mph":"4380","270 mph":"4393"}},"Start On Lap Modifier":{"note":"","data":["D014AA38 0000","8014AA38 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Track Modifier":{"note":"","data":["8014978C 00??"],"options":{"Track 1":"00","Track 2":"01","Track 3":"02","Track 4":"03"}},"Unlock All Cheats":{"note":"","data":["50000B02 0000","8111648C 0101"],"options":null}},"B9AF8CC6-DEC9F19F-C:50":{"Access All Levels":{"note":"","data":["8020860E 00FF","80208610 00FF"],"options":null},"Extended Tongue":{"note":"","data":["8133185E FFFF"],"options":null},"Have 99 Crowns":{"note":"","data":["80251857 0063"],"options":null},"Have All Levels Completed":{"note":"","data":["80208612 0019","80208613 0019","80208614 0015","80208615 0018","80208616 0017","80208617 0017"],"options":null},"Infinite Health":{"note":"","data":["80174DF3 000A"],"options":null},"Level Select":{"note":"","data":["8029097B 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06"}}},"BA6C293A-9FAFA338-C:46":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2552 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE03F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","80202535 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE095 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FC9C5 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFDAD 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802025E5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801D9EFD 0001"],"options":null}},"BA780BA0-0F21DB34-C:45":{"Have All Medals":{"note":"For Expert \u0026 Normal Modes","data":["50000802 0000","81178870 7777"],"options":null},"Infinite Boost\\Player 2":{"note":"","data":["8113CB6C 0000","8113CB6E 0000","8113FA4C 0000","8113FA4E 0000"],"options":null},"Infinite Boost\\Player 3":{"note":"","data":["8113D04C 0000","8113D04E 0000","8113FF2C 0000","8113FF2E 0000"],"options":null},"Infinite Boost\\Player 4":{"note":"","data":["8113D52C 0000","8113D52E 0000","8114040C 0000","8114040E 0000"],"options":null},"Infinite Dual Blue Lasers\\Player 2":{"note":"","data":["80161AAF 0002"],"options":null},"Infinite Dual Blue Lasers\\Player 3":{"note":"","data":["80161AB3 0002"],"options":null},"Infinite Dual Blue Lasers\\Player 4":{"note":"","data":["80161AB7 0002"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["8013CB17 00FF","8013F9F7 00FF"],"options":null},"Infinite Health\\Player 3":{"note":"","data":["8013CFF7 00FF","8013FED7 00FF"],"options":null},"Infinite Health\\Player 4":{"note":"","data":["8013D4D7 00FF","801403B7 00FF"],"options":null},"Infinite Smart Bombs\\Player 2":{"note":"","data":["80177DA7 0004"],"options":null},"Infinite Smart Bombs\\Player 3":{"note":"","data":["80177DAB 0004"],"options":null},"Infinite Smart Bombs\\Player 4":{"note":"","data":["80177DAF 0004"],"options":null},"Infinite\\Armor\\Falco":{"note":"","data":["801778B7 00FF"],"options":null},"Infinite\\Armor\\Peppy":{"note":"","data":["801778BF 00FF"],"options":null},"Infinite\\Armor\\Slippy":{"note":"","data":["801778BB 00FF"],"options":null},"Infinite\\Dual Blue Lasers":{"note":"","data":["80161AAB 0002"],"options":null},"Infinite\\Energy\\Player 1":{"note":"For Solo \u0026 Multi Player","data":["8013C637 00FF","8013F517 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["80161AA1 0009"],"options":null},"Level Select":{"note":"","data":["80178237 00??"],"options":{"Aquas":"0D","Area 6":"03","Bolse":"11","Corneria":"00","Corneria (Multi)":"14","Fortuna":"0E","Glitch":"04","Katina":"10","Macbeth":"0B","Meteo":"01","Sector X":"02","Sector Y":"05","Sector Z":"12","Solar":"07","Titania":"0C","Training Mode Level":"0A","Venom 1":"06","Venom 2":"09","Venom With Starwolf":"13","Zoness":"08"}},"Loads O' Hits":{"note":"","data":["80161A9B 00FF"],"options":null},"Unlimited\\Boost":{"note":"","data":["8113C68C 0000","8113C68E 0000","8113F56C 0000","8113F56E 0000"],"options":null},"Unlimited\\Smart Bombs":{"note":"","data":["80177DA3 0004"],"options":null},"Widescreen":{"note":"","data":["810031A2 3FE3"],"options":null}},"BADDF714-A1FF1B80-C:45":{"Bomb Select":{"note":"","data":["8024A3A1 00??"],"options":{"Blue Remote Bomb":"05","Clear All Special Bombs.":"00","Crazy Bomb":"1D","Invisible Mine Bomb":"07","Jelly Bomb":"03","Power Bomb":"02","Red Beem Bomb":"06","Shock Wave Bomb":"04"}},"Bomberman Speed":{"note":"","data":["8024A3A0 00??"],"options":{"Fast":"0E","Normal":"08","Slow":"04","Turbo":"10"}},"Have\\Infinite\\Kick":{"note":"","data":["8024A3A6 0002"],"options":null},"Have\\Max Bombs":{"note":"","data":["8024A39F 00FF"],"options":null},"Have\\Max Fire":{"note":"","data":["8024A39E 00FF"],"options":null},"Infinite\\Health Hearts":{"note":"","data":["8024A3AE 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["802E1CE7 00FF"],"options":null},"Infinite\\Timer":{"note":"","data":["800FDD72 002A"],"options":null},"Invincible":{"note":"Enemies \u0026 Bomb Blasts cant harm you.But if you walk \u0026 keep laying Bombs it will most likly freeze.so try to avoid constant bombing while walking.Turn cheat to off to go back to normal.","data":["8024A3A8 00??"],"options":{"Off":"00","On":"01"}},"Walk through\\Blocks":{"note":"Walk through Blocks like they are not there.Turn cheat to off to go back to normal.","data":["8024A3A5 00??"],"options":{"Off":"00","On":"01"}},"Walk through\\Bombs":{"note":"Walk through Bombs like they are not there.Turn cheat to off to go back to normal.","data":["8024A3A6 00??"],"options":{"Off":"00","On":"01"}}},"BB30B1A5-FCF712CE-C:45":{"Enable Chasm Freestyle":{"note":"","data":["81071834 0001"],"options":null},"Enable Jim Jam Freestyle":{"note":"","data":["81071838 0001"],"options":null},"Enable Moon Freestyle":{"note":"","data":["8107183C 0001"],"options":null},"Enable Tabletop Freestyle":{"note":"","data":["81071832 0001"],"options":null},"Extra Points":{"note":"","data":["800711E7 00FF"],"options":null}},"BBC99D32-117DAA80-C:45":{"Have All\\Boards":{"note":"","data":["81082A04 0003","81082A06 FFFF"],"options":null},"Have All\\Characters":{"note":"","data":["810829F8 07FF"],"options":null},"Have All\\Difficulties":{"note":"","data":["810829F0 0700"],"options":null},"Have All\\Tracks":{"note":"","data":["810829FC BFFE"],"options":null},"Low Timer":{"note":"","data":["801495FF 0000","80149601 0000"],"options":null},"Max\\50000 Stunt Points":{"note":"","data":["810829B8 C350"],"options":null},"[Audio Fix]":{"note":"","data":["81051840 AD99"],"options":null}},"BCB1F89F-060752A2-C:4A":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D51F0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112CD2E 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800EAFE8 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D51D0 0001","50001701 0000","800D51D8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D5460 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D545F 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D51C9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D51CA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D51CB 0003"],"options":null}},"BCFACCAA-B814D8EF-C:45":{"Player 1 Max Score (Casting Game)":{"note":"","data":["8107A412 FFFF"],"options":null},"Player 2 Max Score (Casting Game)":{"note":"","data":["8107A416 FFFF"],"options":null}},"BD636D6A-5D1F54BA-C:45":{"Away Team scores":{"note":"","data":["800478BB 00??"],"options":{"0 Goals":"00","25 Goals":"19","50 Goals":"32","99 Goals":"63"}},"Home Team scores":{"note":"","data":["800478BF 00??"],"options":{"0 Goals":"00","25 Goals":"19","50 Goals":"32","99 Goals":"63"}},"Open Cup Classic Mode":{"note":"","data":["8003CC6F 0001"],"options":null}},"BD8E206D-98C35E1C-C:4A":{"Day":{"note":"","data":["80136FBF 00??"],"options":{"Friday 12th":"0C","Friday 19th":"13","Friday 26th":"1A","Friday 5th":"05","Monday 15th":"0F","Monday 1st":"01","Monday 22nd":"16","Monday 29th":"1D","Monday 8th":"08","Saturday 13th":"0D","Saturday 27th":"1B","Saturday 30th":"14","Saturday 6th":"06","Sunday 14th":"0E","Sunday 21st":"15","Sunday 28th":"1C","Sunday 7th":"07","Thursday 11th":"0B","Thursday 18th":"12","Thursday 25th":"19","Thursday 4th":"04","Tuesday 16th":"10","Tuesday 23rd":"17","Tuesday 2nd":"02","Tuesday 30th":"1E","Tuesday 9th":"09","Wednesday 10th":"0A","Wednesday 17th":"11","Wednesday 24th":"18","Wednesday 31st":"1F","Wednesday 3rd":"03"}},"Hours":{"note":"","data":["80136FBE 00??"],"options":{"00 AM":"00","00 PM":"0C","01 AM":"01","01 PM":"0D","02 AM":"02","02 PM":"0E","03 AM":"03","03 PM":"0F","04 AM":"04","04 PM":"10","05 AM":"05","05 PM":"11","06 AM":"06","06 PM":"12","07 AM":"07","07 PM":"13","08 AM":"08","08 PM":"14","09 AM":"09","09 PM":"15","10 AM":"0A","10 PM":"16","11 AM":"0B","11 PM":"17"}},"Item Select":{"note":"","data":["81126EE8 ????"],"options":{"100 Bag":"2103","1000 Bag":"2100","10000 Bag":"2101","30000 Bag":"2102","Alarm Clock":"1DB3","Blue NES Game":"1D42","CD Player":"1DAC","Fish Tank (Fish Included!)":"1CA6","Flat Shell":"2514","Grandfather Clock":"1DA0","Grey NES Game":"1D2F","JukeBox":"1D50","Lamp":"1EA1","Light Blue NES Game":"1D37","Nook's Shirt":"2410","Orange":"2804","Orange NES Game":"1D2B","Pet Cage":"1C00","Pointy Shell":"2515","Purple NES Game":"1D3E","Record Player":"1D4C","Red NES Game":"1D33","Round Snowman Table":"1EAB","Snowman Bed":"1EAF","Snowman Fridge":"1EA5","Snowman Seat":"1EB0","Stereo":"1DA9","Stereo Kinda Thing":"1DA6","Stereo NES Colour":"1D47","Tall Red Cupboard":"1011","Yellow NES Game":"1D3A"}},"Max Cash":{"note":"","data":["813BC34C FFFF"],"options":null},"Minutes":{"note":"","data":["80136FBD 00??"],"options":{"00":"00","05":"05","10":"0A","15":"0F","20":"14","25":"19","30":"1E","35":"23","40":"28","45":"2D","50":"32","55":"37","59":"3B"}},"Month":{"note":"","data":["80136FC1 00??"],"options":{"April":"04","Aug":"08","Dec":"0C","Feb":"02","Jan":"01","July":"07","June":"06","March":"03","May":"05","Nov":"0B","Oct":"0A","Sept":"09"}},"Time Passes":{"note":"","data":["80136FD2 00??"],"options":{"Hours \u0026 Mins Fast":"10","Hours \u0026 Mins Medium":"05","Mins Like Seconds":"01","Time Normal":"00","Time Zooms By":"FF"}},"Widescreen":{"note":"","data":["810CB180 3C07","810CB182 3FE3"],"options":null}},"BDA8F143-B1AF2D62-C:45":{"Multi\\Agony\\Have All\\Weapons\\Player 1":{"note":"","data":["801832B7 0001","801832BB 0001","801832BF 0001","801832C3 0001","801832C7 0001","801832CB 0001","801832CF 0001","801832D3 0001","801832D7 0001","801832DB 0001"],"options":null},"Multi\\Agony\\Have All\\Weapons\\Player 2":{"note":"","data":["8018361B 0001","8018361F 0001","80183623 0001","80183627 0001","8018362B 0001","8018362F 0001","80183633 0001","80183637 0001","8018363B 0001","8018363F 0001"],"options":null},"Multi\\Agony\\Infinite\\Ammo\\Player 1":{"note":"","data":["801832DF 0063","801832E3 0063","801832E7 0063","801832EB 0063","801832EF 0063","801832F3 0063"],"options":null},"Multi\\Agony\\Infinite\\Ammo\\Player 2":{"note":"","data":["80183643 0063","80183647 0063","8018364B 0063","8018364F 0063","80183653 0063","80183657 0063"],"options":null},"Multi\\Cold Steel\\Have All\\Weapons\\Player 1":{"note":"","data":["8017B577 0001","8017B57B 0001","8017B57F 0001","8017B583 0001","8017B587 0001","8017B58B 0001","8017B58F 0001","8017B593 0001","8017B597 0001","8017B59B 0001"],"options":null},"Multi\\Cold Steel\\Have All\\Weapons\\Player 2":{"note":"","data":["8017B8DB 0001","8017B8DF 0001","8017B8E3 0001","8017B8E7 0001","8017B8EB 0001","8017B8EF 0001","8017B8F3 0001","8017B8F7 0001","8017B8FB 0001","8017B8FF 0001"],"options":null},"Multi\\Cold Steel\\Infinite\\Ammo\\Player 1":{"note":"","data":["8017B59F 0063","8017B5A3 0063","8017B5A7 0063","8017B5AB 0063","8017B5AF 0063","8017B5B3 0063"],"options":null},"Multi\\Cold Steel\\Infinite\\Ammo\\Player 2":{"note":"","data":["8017B903 0063","8017B907 0063","8017B90B 0063","8017B90F 0063","8017B913 0063","8017B917 0063"],"options":null},"Multi\\Corridors\\Have All\\Weapons\\Player 1":{"note":"","data":["8017D1C7 0001","8017D1CB 0001","8017D1CF 0001","8017D1D3 0001","8017D1D7 0001","8017D1DB 0001","8017D1DF 0001","8017D1E3 0001","8017D1E7 0001","8017D1EB 0001"],"options":null},"Multi\\Corridors\\Have All\\Weapons\\Player 2":{"note":"","data":["8017D52B 0001","8017D52F 0001","8017D533 0001","8017D537 0001","8017D53B 0001","8017D53F 0001","8017D543 0001","8017D547 0001","8017D54B 0001","8017D54F 0001"],"options":null},"Multi\\Corridors\\Infinite\\Ammo\\Player 1":{"note":"","data":["8017D1E7 0063","8017D1F3 0063","8017D1F7 0063","8017D1FB 0063","8017D1FF 0063","8017D203 0063"],"options":null},"Multi\\Corridors\\Infinite\\Ammo\\Player 2":{"note":"","data":["8017D553 0063","8017D557 0063","8017D55B 0063","8017D55F 0063","8017D567 0063"],"options":null},"Multi\\Dying Halls\\Have All\\Weapons\\Player 1":{"note":"","data":["801BF937 0001","801BF93B 0001","801BF93F 0001","801BF943 0001","801BF947 0001","801BF94B 0001","801BF94F 0001","801BF953 0001","801BF957 0001","801BF95B 0001"],"options":null},"Multi\\Dying Halls\\Have All\\Weapons\\Player 2":{"note":"","data":["801BFC9B 0001","801BFC9F 0001","801BFCA3 0001","801BFCA7 0001","801BFCAB 0001","801BFCAF 0001","801BFCB3 0001","801BFCB7 0001","801BFCBB 0001","801BFCBF 0001"],"options":null},"Multi\\Dying Halls\\Infinite\\Ammo\\Player 1":{"note":"","data":["801BF95F 0063","801BF963 0063","801BF967 0063","801BF96B 0063","801BF96F 0063","801BF973 0063"],"options":null},"Multi\\Dying Halls\\Infinite\\Ammo\\Player 2":{"note":"","data":["801BFCC3 0063","801BFCC7 0063","801BFCCB 0063","801BFCCF 0063","801BFCD3 0063","801BFCD7 0063"],"options":null},"Multi\\Empty Space\\Have All\\Weapons\\Player 1":{"note":"","data":["80179B27 0001","80179B2B 0001","80179B2F 0001","80179B33 0001","80179B37 0001","80179B3B 0001","80179B3F 0001","80179B43 0001","80179B47 0001","80179B4B 0001"],"options":null},"Multi\\Empty Space\\Have All\\Weapons\\Player 2":{"note":"","data":["80179E8B 0001","80179E8F 0001","80179E93 0001","80179E97 0001","80179E9B 0001","80179E9F 0001","80179EA3 0001","80179EA7 0001","80179EAB 0001","80179EAF 0001"],"options":null},"Multi\\Empty Space\\Infinite\\Ammo\\Player 1":{"note":"","data":["80179B4F 0063","80179B53 0063","80179B57 0063","80179B5B 0063","80179B5F 0063","80179B63 0063"],"options":null},"Multi\\Empty Space\\Infinite\\Ammo\\Player 2":{"note":"","data":["80179EB3 0063","80179EB7 0063","80179EBB 0063","80179EBF 0063","80179EC3 0063","80179EC7 0063"],"options":null},"Multi\\Fortress\\Have All\\Weapons\\Player 1":{"note":"","data":["8017D617 0001","8017D61B 0001","8017D61F 0001","8017D623 0001","8017D627 0001","8017D62B 0001","8017D62F 0001","8017D633 0001","8017D637 0001","8017D63B 0001"],"options":null},"Multi\\Fortress\\Have All\\Weapons\\Player 2":{"note":"","data":["8017D97B 0001","8017D97F 0001","8017D983 0001","8017D987 0001","8017D98B 0001","8017D98F 0001","8017D993 0001","8017D997 0001","8017D99B 0001","8017D99F 0001"],"options":null},"Multi\\Fortress\\Infinite\\Ammo\\Player 1":{"note":"","data":["8017D63F 0063","8017D643 0063","8017D647 0063","8017D64B 0063","8017D64F 0063","8017D653 0063"],"options":null},"Multi\\Fortress\\Infinite\\Ammo\\Player 2":{"note":"","data":["8017D9A3 0063","8017D9A7 0063","8017D9AB 0063","8017D9AF 0063","8017D9B3 0063","8017D9B7 0063"],"options":null},"Multi\\Mad Dash\\Have All\\Weapons\\Player 1":{"note":"","data":["801AE9A7 0001","801AE9AB 0001","801AE9AF 0001","801AE9B3 0001","801AE9B7 0001","801AE9BB 0001","801AE9BF 0001","801AE9C3 0001","801AE9C7 0001","801AE9CB 0001"],"options":null},"Multi\\Mad Dash\\Have All\\Weapons\\Player 2":{"note":"","data":["801AED0B 0001","801AED0F 0001","801AED13 0001","801AED17 0001","801AED1B 0001","801AED1F 0001","801AED23 0001","801AED27 0001","801AED2B 0001","801AED2F 0001"],"options":null},"Multi\\Mad Dash\\Infinite\\Ammo\\Player 1":{"note":"","data":["801AE9CF 0063","801AE9D3 0063","801AE9D7 0063","801AE9DB 0063","801AE9DF 0063","801AE9E3 0063"],"options":null},"Multi\\Mad Dash\\Infinite\\Ammo\\Player 2":{"note":"","data":["801AED33 0063","801AED37 0063","801AED3B 0063","801AED3F 0063","801AED43 0063","801AED47 0063"],"options":null},"Multi\\Overflow\\Have All\\Weapons\\Player 1":{"note":"","data":["80197907 0001","8019790B 0001","8019790F 0001","80197913 0001","80197917 0001","8019791B 0001","8019791F 0001","80197923 0001","80197927 0001","8019792B 0001"],"options":null},"Multi\\Overflow\\Have All\\Weapons\\Player 2":{"note":"","data":["80197C6B 0001","80197C6F 0001","80197C73 0001","80197C77 0001","80197C7B 0001","80197C7F 0001","80197C83 0001","80197C87 0001","80197C8B 0001","80197C8F 0001"],"options":null},"Multi\\Overflow\\Infinite\\Ammo\\Player 1":{"note":"","data":["8019792F 0063","80197933 0063","80197937 0063","8019793B 0063","8019793F 0063","80197943 0063"],"options":null},"Multi\\Overflow\\Infinite\\Ammo\\Player 2":{"note":"","data":["80197C93 0063","80197C97 0063","80197C9B 0063","80197C9F 0063","80197CA3 0063","80197CA7 0063"],"options":null},"Multi\\Twists\\Have All\\Weapons\\Player 1":{"note":"","data":["801ABE47 0001","801ABE4B 0001","801ABE4F 0001","801ABE53 0001","801ABE57 0001","801ABE5B 0001","801ABE5F 0001","801ABE63 0001","801ABE67 0001","801ABE6B 0001"],"options":null},"Multi\\Twists\\Have All\\Weapons\\Player 2":{"note":"","data":["801AC1AB 0001","801AC1AF 0001","801AC1B3 0001","801AC1B7 0001","801AC1BB 0001","801AC1BF 0001","801AC1C3 0001","801AC1C7 0001","801AC1CB 0001","801AC1CF 0001"],"options":null},"Multi\\Twists\\Infinite\\Ammo\\Player 1":{"note":"","data":["801ABE6F 0063","801ABE73 0063","801ABE77 0063","801ABE7B 0063","801ABE7F 0063","801ABE83 0063"],"options":null},"Multi\\Twists\\Infinite\\Ammo\\Player 2":{"note":"","data":["801AC1D3 0063","801AC1D7 0063","801AC1DB 0063","801AC1DF 0063","801AC1E3 0063","801AC1E7 0063"],"options":null},"Multi\\War Room\\Have All\\Weapons\\Player 1":{"note":"","data":["801A2E57 0001","801A2E5B 0001","801A2E5F 0001","801A2E63 0001","801A2E67 0001","801A2E6B 0001","801A2E6F 0001","801A2E73 0001","801A2E77 0001","801A2E7B 0001"],"options":null},"Multi\\War Room\\Have All\\Weapons\\Player 2":{"note":"","data":["801A31BB 0001","801A31BF 0001","801A31C3 0001","801A31C7 0001","801A31CB 0001","801A31CF 0001","801A31D3 0001","801A31D7 0001","801A31DB 0001","801A31DF 0001"],"options":null},"Multi\\War Room\\Infinite\\Ammo\\Player 1":{"note":"","data":["801A2E7F 0063","801A2E83 0063","801A2E87 0063","801A2E8B 0063","801A2E8F 0063","801A2E93 0063"],"options":null},"Multi\\War Room\\Infinite\\Ammo\\Player 2":{"note":"","data":["801A31E3 0063","801A31E7 0063","801A31EB 0063","801A31EF 0063","801A31F3 0063","801A31F7 0063"],"options":null},"The Ultimate":{"note":"The Ultimate Gives you on Solo Play Infinite Health, Infinite Armor, All Guns, and Infinite Ammo On all Levels","data":["8104AD2C 0800","8104AD2E 0018","81000060 8E30","81000062 0068","81000064 241B","81000066 03E7","81000068 AE1B","8100006A 0030","8100006C AC9B","8100006E 0204","81000070 A219","81000072 004B","81000074 A219","81000076 004C","81000078 1000","8100007A 0005","8100007C A219","8100007E 0050","50000604 0000","81000090 A219","50000604 0004","81000092 0054","50000504 0000","810000A8 AE1B","50000504 0004","810000AA 006C","810000BC 0801","810000BE 2B4D","810000C0 AE1B","810000C2 0080"],"options":null}},"BDF9766D-BD068D70-C:45":{"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Can't Be Counted Out":{"note":"","data":["D0296E4D 0029","81296ECE 0384"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Can't Be Pinned":{"note":"","data":["D0296E4D 0029","81296F5A FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Infinite Health":{"note":"","data":["D0296E4D 0029","81296FD0 0000","D0296E4D 0029","81296FD2 0000"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Instant Recovery":{"note":"","data":["D0296E4D 0029","8129703A FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Invincible":{"note":"","data":["D0296E4D 0029","8129702E FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Super Speed":{"note":"","data":["D0296E4D 0029","81297032 FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Super Stamina":{"note":"","data":["D0296E4D 0029","81297036 FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 1\\Super Strength":{"note":"","data":["D0296E4D 0029","8129702A FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Can't Be Counted Out":{"note":"","data":["D0296E4D 0029","8129816E 0384"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Can't Be Pinned":{"note":"","data":["D0296E4D 0029","812981FA FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Infinite Health":{"note":"","data":["D0296E4D 0029","81298270 0000","D0296E4D 0029","81298272 0000"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Instant Recovery":{"note":"","data":["D0296E4D 0029","812982DA FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Invincible":{"note":"","data":["D0296E4D 0029","812982CE FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Super Speed":{"note":"","data":["D0296E4D 0029","812982D2 FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Super Stamina":{"note":"","data":["D0296E4D 0029","812982D6 FFFF"],"options":null},"1 On 2 \u0026 2 On 1 Modes\\Player 2\\Super Strength":{"note":"","data":["D0296E4D 0029","812982CA FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Can't Be Counted Out":{"note":"","data":["D0296C3D 0029","81296CBE 0384"],"options":null},"3 Way Dance Mode\\Player 1\\Can't Be Pinned":{"note":"","data":["D0296C3D 0029","81296D4A FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Infinite Health":{"note":"","data":["D0296C3D 0029","81296DC0 0000","D0296C3D 0029","81296DC2 0000"],"options":null},"3 Way Dance Mode\\Player 1\\Instant Recovery":{"note":"","data":["D0296C3D 0029","81296E2A FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Invincible":{"note":"","data":["D0296C3D 0029","81296E1E FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Super Speed":{"note":"","data":["D0296C3D 0029","81296E22 FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Super Stamina":{"note":"","data":["D0296C3D 0029","81296E26 FFFF"],"options":null},"3 Way Dance Mode\\Player 1\\Super Strength":{"note":"","data":["D0296C3D 0029","81296E1A FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Can't Be Counted Out":{"note":"","data":["D0296C3D 0029","81297F5E 0384"],"options":null},"3 Way Dance Mode\\Player 2\\Can't Be Pinned":{"note":"","data":["D0296C3D 0029","81297FEA FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Infinite Health":{"note":"","data":["D0296C3D 0029","81298060 0000","D0296C3D 0029","81298062 0000"],"options":null},"3 Way Dance Mode\\Player 2\\Instant Recovery":{"note":"","data":["D0296C3D 0029","812980CA FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Invincible":{"note":"","data":["D0296C3D 0029","812980BE FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Super Speed":{"note":"","data":["D0296C3D 0029","812980C2 FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Super Stamina":{"note":"","data":["D0296C3D 0029","812980C6 FFFF"],"options":null},"3 Way Dance Mode\\Player 2\\Super Strength":{"note":"","data":["D0296C3D 0029","812980BA FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Can't Be Counted Out":{"note":"","data":["D0296C3D 0029","812991FE 0384"],"options":null},"3 Way Dance Mode\\Player 3\\Can't Be Pinned":{"note":"","data":["D0296C3D 0029","8129928A FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Infinite Health":{"note":"","data":["D0296C3D 0029","81299300 0000","D0296C3D 0029","81299302 0000"],"options":null},"3 Way Dance Mode\\Player 3\\Instant Recovery":{"note":"","data":["D0296C3D 0029","8129936A FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Invincible":{"note":"","data":["D0296C3D 0029","8129935E FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Super Speed":{"note":"","data":["D0296C3D 0029","81299362 FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Super Stamina":{"note":"","data":["D0296C3D 0029","81299366 FFFF"],"options":null},"3 Way Dance Mode\\Player 3\\Super Strength":{"note":"","data":["D0296C3D 0029","8129935A FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Can't Be Counted Out":{"note":"","data":["D029A98D 0029","8129AA0E 0384"],"options":null},"All Tag Team Modes\\Player 1\\Can't Be Pinned":{"note":"","data":["D029A98D 0029","8129AA9A FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Infinite Health":{"note":"","data":["D029A98D 0029","8129AB10 0000","D029A98D 0029","8129AB12 0000"],"options":null},"All Tag Team Modes\\Player 1\\Instant Recovery":{"note":"","data":["D029A98D 0029","8129AB7A FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Invincible":{"note":"","data":["D029A98D 0029","8129AB6E FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Super Speed":{"note":"","data":["D029A98D 0029","8129AB72 FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Super Stamina":{"note":"","data":["D029A98D 0029","8129AB76 FFFF"],"options":null},"All Tag Team Modes\\Player 1\\Super Strength":{"note":"","data":["D029A98D 0029","8129AB6A FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Can't Be Counted Out":{"note":"","data":["D029A98D 0029","8129BCAE 0384"],"options":null},"All Tag Team Modes\\Player 2\\Can't Be Pinned":{"note":"","data":["D029A98D 0029","8129BD3A FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Infinite Health":{"note":"","data":["D029A98D 0029","8129BDB0 0000","D029A98D 0029","8129BDB2 0000"],"options":null},"All Tag Team Modes\\Player 2\\Instant Recovery":{"note":"","data":["D029A98D 0029","8129BE1A FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Invincible":{"note":"","data":["D029A98D 0029","8129BE0E FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Super Speed":{"note":"","data":["D029A98D 0029","8129BE12 FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Super Stamina":{"note":"","data":["D029A98D 0029","8129BE16 FFFF"],"options":null},"All Tag Team Modes\\Player 2\\Super Strength":{"note":"","data":["D029A98D 0029","8129BE0A FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Can't Be Counted Out":{"note":"","data":["D029A98D 0029","8129CF4E 0384"],"options":null},"All Tag Team Modes\\Player 3\\Can't Be Pinned":{"note":"","data":["D029A98D 0029","8129CFDA FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Infinite Health":{"note":"","data":["D029A98D 0029","8129D050 0000","D029A98D 0029","8129D052 0000"],"options":null},"All Tag Team Modes\\Player 3\\Instant Recovery":{"note":"","data":["D029A98D 0029","8129D0BA FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Invincible":{"note":"","data":["D029A98D 0029","8129D0AE FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Super Speed":{"note":"","data":["D029A98D 0029","8129D0B2 FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Super Stamina":{"note":"","data":["D029A98D 0029","8129D0B6 FFFF"],"options":null},"All Tag Team Modes\\Player 3\\Super Strength":{"note":"","data":["D029A98D 0029","8129D0AA FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Can't Be Counted Out":{"note":"","data":["D029A98D 0029","8129E1EE 0384"],"options":null},"All Tag Team Modes\\Player 4\\Can't Be Pinned":{"note":"","data":["D029A98D 0029","8129E27A FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Infinite Health":{"note":"","data":["D029A98D 0029","8129E2F0 0000","D029A98D 0029","8129E2F2 0000"],"options":null},"All Tag Team Modes\\Player 4\\Instant Recovery":{"note":"","data":["D029A98D 0029","8129E35A FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Invincible":{"note":"","data":["D029A98D 0029","8129E34E FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Super Speed":{"note":"","data":["D029A98D 0029","8129E352 FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Super Stamina":{"note":"","data":["D029A98D 0029","8129E356 FFFF"],"options":null},"All Tag Team Modes\\Player 4\\Super Strength":{"note":"","data":["D029A98D 0029","8129E34A FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Can't Be Counted Out":{"note":"","data":["D029A66D 0029","8129A6EE 0384"],"options":null},"Battle Royal Mode\\Player 1\\Can't Be Pinned":{"note":"","data":["D029A66D 0029","8129A77A FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Infinite Health":{"note":"","data":["D029A66D 0029","8129A7F0 0000","D029A66D 0029","8129A7F2 0000"],"options":null},"Battle Royal Mode\\Player 1\\Instant Recovery":{"note":"","data":["D029A66D 0029","8129A85A FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Invincible":{"note":"","data":["D029A66D 0029","8129A84E FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Super Speed":{"note":"","data":["D029A66D 0029","8129A852 FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Super Stamina":{"note":"","data":["D029A66D 0029","8129A856 FFFF"],"options":null},"Battle Royal Mode\\Player 1\\Super Strength":{"note":"","data":["D029A66D 0029","8129A84A FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Can't Be Counted Out":{"note":"","data":["D029A66D 0029","8129B98E 0384"],"options":null},"Battle Royal Mode\\Player 2\\Can't Be Pinned":{"note":"","data":["D029A66D 0029","8129BA1A FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Infinite Health":{"note":"","data":["D029A66D 0029","8129BA90 0000","D029A66D 0029","8129BA92 0000"],"options":null},"Battle Royal Mode\\Player 2\\Instant Recovery":{"note":"","data":["D029A66D 0029","8129BAFA FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Invincible":{"note":"","data":["D029A66D 0029","8129BAEE FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Super Speed":{"note":"","data":["D029A66D 0029","8129BAF2 FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Super Stamina":{"note":"","data":["D029A66D 0029","8129BAF6 FFFF"],"options":null},"Battle Royal Mode\\Player 2\\Super Strength":{"note":"","data":["D029A66D 0029","8129BAEA FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Can't Be Counted Out":{"note":"","data":["D029A66D 0029","8129CC2E 0384"],"options":null},"Battle Royal Mode\\Player 3\\Can't Be Pinned":{"note":"","data":["D029A66D 0029","8129CCBA FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Infinite Health":{"note":"","data":["D029A66D 0029","8129CD30 0000","D029A66D 0029","8129CD32 0000"],"options":null},"Battle Royal Mode\\Player 3\\Instant Recovery":{"note":"","data":["D029A66D 0029","8129CD9A FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Invincible":{"note":"","data":["D029A66D 0029","8129CD8E FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Super Speed":{"note":"","data":["D029A66D 0029","8129CD92 FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Super Stamina":{"note":"","data":["D029A66D 0029","8129CD96 FFFF"],"options":null},"Battle Royal Mode\\Player 3\\Super Strength":{"note":"","data":["D029A66D 0029","8129CD8A FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Can't Be Counted Out":{"note":"","data":["D029A66D 0029","8129DECE 0384"],"options":null},"Battle Royal Mode\\Player 4\\Can't Be Pinned":{"note":"","data":["D029A66D 0029","8129DF5A FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Infinite Health":{"note":"","data":["D029A66D 0029","8129DFD0 0000","D029A66D 0029","8129DFD2 0000"],"options":null},"Battle Royal Mode\\Player 4\\Instant Recovery":{"note":"","data":["D029A66D 0029","8129E03A FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Invincible":{"note":"","data":["D029A66D 0029","8129E02E FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Super Speed":{"note":"","data":["D029A66D 0029","8129E032 FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Super Stamina":{"note":"","data":["D029A66D 0029","8129E036 FFFF"],"options":null},"Battle Royal Mode\\Player 4\\Super Strength":{"note":"","data":["D029A66D 0029","8129E02A FFFF"],"options":null},"Character Modifier\\Player 1":{"note":"","data":["80122773 00??"],"options":{"Beulah":"1C","Cyrus the Virus":"0D","Excel":"36","Gertner":"15","H Slash":"2A","J Styles":"30","Jeff Jones":"19","Louie":"2E","Mack Daddy":"0F","Mad Goat":"1D","Nurse":"1F","Santoro":"25","Skull":"29","Sound Guy":"27","Taz":"32","The Sheik":"28","Tommy Rich":"22","Trainer":"33"}},"Character Modifier\\Player 2":{"note":"","data":["80122783 00??"],"options":{"Beulah":"1C","Cyrus the Virus":"0D","Excel":"36","Gertner":"15","H Slash":"2A","J Styles":"30","Jeff Jones":"19","Louie":"2E","Mack Daddy":"0F","Mad Goat":"1D","Nurse":"1F","Santoro":"25","Skull":"29","Sound Guy":"27","Taz":"32","The Sheik":"28","Tommy Rich":"22","Trainer":"33"}},"Create A Wrestler\\Infinite Attribute Points":{"note":"","data":["8115DD52 0000"],"options":null},"Create A Wrestler\\Infinite Move %":{"note":"","data":["80131600 0024"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Can't Be Counted Out":{"note":"","data":["D029A87D 0029","8129A8FE 0384"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Can't Be Pinned":{"note":"","data":["D029A87D 0029","8129A98A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Infinite Health":{"note":"","data":["D029A87D 0029","8129AA00 0000","D029A87D 0029","8129AA02 0000"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Instant Recovery":{"note":"","data":["D029A87D 0029","8129AA6A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Invincible":{"note":"","data":["D029A87D 0029","8129AA5E FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Super Speed":{"note":"","data":["D029A87D 0029","8129AA62 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Super Stamina":{"note":"","data":["D029A87D 0029","8129AA66 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 1\\Super Strength":{"note":"","data":["D029A87D 0029","8129AA5A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Can't Be Counted Out":{"note":"","data":["D029A87D 0029","8129BB9E 0384"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Can't Be Pinned":{"note":"","data":["D029A87D 0029","8129BC2A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Infinite Health":{"note":"","data":["D029A87D 0029","8129BCA0 0000","D029A87D 0029","8129BCA2 0000"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Instant Recovery":{"note":"","data":["D029A87D 0029","8129BD0A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Invincible":{"note":"","data":["D029A87D 0029","8129BCFE FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Super Speed":{"note":"","data":["D029A87D 0029","8129BD02 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Super Stamina":{"note":"","data":["D029A87D 0029","8129BD06 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 2\\Super Strength":{"note":"","data":["D029A87D 0029","8129BCFA FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Can't Be Counted Out":{"note":"","data":["D029A87D 0029","8129CE3E 0384"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Can't Be Pinned":{"note":"","data":["D029A87D 0029","8129CECA FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Infinite Health":{"note":"","data":["D029A87D 0029","8129CF40 0000","D029A87D 0029","8129CF42 0000"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Instant Recovery":{"note":"","data":["D029A87D 0029","8129CFAA FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Invincible":{"note":"","data":["D029A87D 0029","8129CF9E FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Super Speed":{"note":"","data":["D029A87D 0029","8129CFA2 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Super Stamina":{"note":"","data":["D029A87D 0029","8129CFA6 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 3\\Super Strength":{"note":"","data":["D029A87D 0029","8129CF9A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Can't Be Counted Out":{"note":"","data":["D029A87D 0029","8129E0DE 0384"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Can't Be Pinned":{"note":"","data":["D029A87D 0029","8129E16A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Infinite Health":{"note":"","data":["D029A87D 0029","8129E1E0 0000","D029A87D 0029","8129E1E2 0000"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Instant Recovery":{"note":"","data":["D029A87D 0029","8129E24A FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Invincible":{"note":"","data":["D029A87D 0029","8129E23E FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Super Speed":{"note":"","data":["D029A87D 0029","8129E242 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Super Stamina":{"note":"","data":["D029A87D 0029","8129E246 FFFF"],"options":null},"Tornado, Lumberjack, 1-On-3, 3-On-1 Modes\\Player 4\\Super Strength":{"note":"","data":["D029A87D 0029","8129E23A FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Can't Be Counted Out":{"note":"","data":["D02931FD 0029","8129327E 0384"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Can't Be Pinned":{"note":"","data":["D02931FD 0029","8129330A FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Infinite Health":{"note":"","data":["D02931FD 0029","81293380 0000","D02931FD 0029","81293382 0000"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Instant Recovery":{"note":"","data":["D02931FD 0029","812933EA FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Invincible":{"note":"","data":["D02931FD 0029","812933DE FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Super Speed":{"note":"","data":["D02931FD 0029","812933E2 FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Super Stamina":{"note":"","data":["D02931FD 0029","812933E6 FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 1\\Super Strength":{"note":"","data":["D02931FD 0029","812933DA FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Can't Be Counted Out":{"note":"","data":["D02931FD 0029","8129451E 0384"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Can't Be Pinned":{"note":"","data":["D02931FD 0029","812945AA FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Infinite Health":{"note":"","data":["D02931FD 0029","81294620 0000","D02931FD 0029","81294622 0000"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Instant Recovery":{"note":"","data":["D02931FD 0029","8129468A FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Invincible":{"note":"","data":["D02931FD 0029","8129467E FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Super Speed":{"note":"","data":["D02931FD 0029","81294682 FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Super Stamina":{"note":"","data":["D02931FD 0029","81294686 FFFF"],"options":null},"VS \u0026 Tournment Mode\\Player 2\\Super Strength":{"note":"","data":["D02931FD 0029","8129467A FFFF"],"options":null}},"BE5973E0-89B0EDB8-C:45":{"100.000 Sponsor Credits \u0026 950 Championship Points In Support Van":{"note":"You Also Have Access To All Cars, Tracks \u0026 Extra Features","data":["80030D82 00F3"],"options":null},"Always 1st":{"note":"","data":["810318E2 0001"],"options":null},"Infinite Time \u0026 Always Place 1st":{"note":"Championship Mode Only.","data":["810318EE 0001"],"options":null},"Max Sponsor Credits":{"note":"","data":["81033816 270F"],"options":null},"Max Sponsor Points \u0026 Extra Cars \u0026 Tracks":{"note":"This code gives you all tracks and cars. once you activate this code, You must make an internal save (Native) in options \u0026 then load that internal save, \u0026 go to Drivers Board to pick your car, Then to Race to pick your track","data":["81033816 270F"],"options":null},"No Cones Hit":{"note":"In ARSG Rally School","data":["81031CEA 0000"],"options":null},"No Damage Or Failures":{"note":"","data":["81030D76 0001"],"options":null},"No Navigator":{"note":"","data":["80032677 0000"],"options":null}},"BE76EDFF-20452D09-C:45":{"Away Team\\Infinite Time Outs":{"note":"","data":["8004C62E 0003"],"options":null},"Away Team\\No Time Outs":{"note":"","data":["8004C62E 0000"],"options":null},"Home Team\\Infinite Time Outs":{"note":"","data":["8004C0B6 0003"],"options":null},"Home Team\\No Time Outs":{"note":"","data":["8004C0B6 0000"],"options":null},"Infinite\\Character Creation Points":{"note":"","data":["81072F30 015E"],"options":null},"Infinite\\Time to Choose Play":{"note":"","data":["81080152 0028"],"options":null},"Max\\Accuracy":{"note":"","data":["8106FDB8 0064"],"options":null},"Max\\Catch":{"note":"","data":["8106FDC2 0064"],"options":null},"Max\\Endurance":{"note":"","data":["8106FDC4 0064"],"options":null},"Max\\Hands":{"note":"","data":["8106FDBE 0064"],"options":null},"Max\\Range":{"note":"","data":["8106FDBA 0064"],"options":null},"Max\\Scramble":{"note":"","data":["8106FDBC 0064"],"options":null},"Max\\Speed":{"note":"","data":["8106FDC0 0064"],"options":null}},"BEBAB677-51B0B5E4-C:50":{"100.000 Sponsor Credits \u0026 950 Championship Points In Support Van":{"note":"You Also Have Access To All Cars, Tracks \u0026 Extra Features","data":["80031BB3 00F3"],"options":null},"Always 1st":{"note":"","data":["80032713 0001"],"options":null},"Freeze Timer":{"note":"","data":["8003271F 0000"],"options":null},"Infinite Cash":{"note":"","data":["803D004E 4000"],"options":null},"Max Sponsor Credits":{"note":"","data":["803D27E2 0010","803D27E4 0001"],"options":null},"No Cones Hit":{"note":"In ARSG Rally School","data":["80032743 0000","80032B1B 0000"],"options":null},"No Damage Or Failures":{"note":"","data":["80031BA7 0001"],"options":null},"No Navigator":{"note":"","data":["80032677 0000"],"options":null}},"BFA526B4-0691E430-C:45":{"All 52 Gold Gems Collected":{"note":"","data":["80171B10 0003","80171B11 007E","80171B12 00FF","80171B13 00EF","80171B14 00FF","80171B15 007F","80171B16 00FF","80171B17 00FC"],"options":null},"All Stages \u0026 Chapters Unlocked":{"note":"","data":["80171B18 003B"],"options":null},"Infinite Health\\Marina":{"note":"","data":["81057458 03E8"],"options":null},"Infinite Health\\Teran":{"note":"","data":["810F4270 03E8"],"options":null},"Infinite\\Max Red Gems":{"note":"","data":["81178136 270F"],"options":null},"Level Select":{"note":"To access this anytime during game, press L+R+Z to enable the menu. Press D-Pad Up / Down to move through the menu, D-Pad Left / Right to change level digits and then press Start to enter level. Don not do this whhile in pause mode (Start Button Pause) or the game will freeze.","data":["D10BE538 2030","800BE4F1 0004"],"options":null}},"BFE23884-EF48EAAF-C:45":{"All Levels Open":{"note":"","data":["50002001 0000","803F7DE0 0001"],"options":null},"Always\\Raining":{"note":"","data":["803F2D6F 0005"],"options":null},"Always\\Snowing":{"note":"","data":["803F2D6D 0005"],"options":null},"Debug Mode":{"note":"","data":["803F642F 0001"],"options":null},"Have All\\Power Cells":{"note":"","data":["803F2D3D 000F"],"options":null},"Have All\\Secret Mini Game":{"note":"","data":["803F643D 0001"],"options":null},"High Score":{"note":"","data":["813F2D30 007F","813F2D32 FFFF"],"options":null},"Infinite Health\\Ship\\in Asteroids Level":{"note":"","data":["803E4CDB 0003"],"options":null},"Infinite\\Ability\\Fox":{"note":"","data":["811DF8F4 0400"],"options":null},"Infinite\\Ability\\Heli-Rabbit":{"note":"","data":["811DF14C 0400"],"options":null},"Infinite\\Ability\\Husky":{"note":"","data":["811DED78 0400"],"options":null},"Infinite\\Ability\\Mouse":{"note":"","data":["811DFCC8 0400"],"options":null},"Infinite\\Ability\\Penguin":{"note":"","data":["811E009C 0400"],"options":null},"Infinite\\Ability\\Rabbit":{"note":"","data":["811DE5D0 0400"],"options":null},"Infinite\\Ability\\Racing Dog":{"note":"","data":["811DF14C 0400"],"options":null},"Infinite\\Ability\\Racing Fox":{"note":"","data":["811DF8F4 0082"],"options":null},"Infinite\\Ability\\Ram":{"note":"","data":["811DE5D0 0400"],"options":null},"Infinite\\Ability\\Sheep":{"note":"","data":["811DE9A0 0400"],"options":null},"Infinite\\Ability\\Springy Thing":{"note":"","data":["811DF14C 0400"],"options":null},"Infinite\\Ability\\Walrus":{"note":"","data":["811DE5D0 0400"],"options":null},"Infinite\\Boost\\Fox":{"note":"","data":["811DF8F0 0400"],"options":null},"Infinite\\Boost\\Mouse":{"note":"","data":["811DFCC4 0400"],"options":null},"Infinite\\Boost\\Racing Dog":{"note":"","data":["811DF148 0400"],"options":null},"Infinite\\Boost\\Racing Fox":{"note":"","data":["811DF8F0 0400"],"options":null},"Infinite\\Boost\\Walrus":{"note":"","data":["811DED74 0400"],"options":null},"Infinite\\Energy\\Dog":{"note":"","data":["811DFF04 0082"],"options":null},"Infinite\\Energy\\EVO (Chip)":{"note":"","data":["801DE065 0082"],"options":null},"Infinite\\Energy\\Evo\\In Bonus Level 4":{"note":"","data":["801DEFB5 0082"],"options":null},"Infinite\\Energy\\Evo\\in Bonus Level 1 \u0026 Final Level":{"note":"","data":["801DE439 0082"],"options":null},"Infinite\\Energy\\Fox":{"note":"","data":["811DF75C 0082"],"options":null},"Infinite\\Energy\\Heli-Rabbit":{"note":"","data":["811DEFB4 0082"],"options":null},"Infinite\\Energy\\Mouse,Hyena":{"note":"","data":["801DFB31 0082"],"options":null},"Infinite\\Energy\\Normal Penguin":{"note":"","data":["811DFF04 0082"],"options":null},"Infinite\\Energy\\Normal Rabbit":{"note":"","data":["811DE438 0082"],"options":null},"Infinite\\Energy\\Racing Dog":{"note":"","data":["811DEFB4 0082"],"options":null},"Infinite\\Energy\\Racing Fox":{"note":"","data":["811DF7FC 0082"],"options":null},"Infinite\\Energy\\Ram":{"note":"","data":["811DE438 0082"],"options":null},"Infinite\\Energy\\Sheep":{"note":"","data":["811DEBE0 0082"],"options":null},"Infinite\\Energy\\Snow Husky":{"note":"","data":["811DFF04 0082"],"options":null},"Infinite\\Energy\\Springy Thing":{"note":"","data":["811DEFB4 0082"],"options":null}},"BFF7B1C2-AEBF148E-C:4A":{"Infinite\\Bells":{"note":"","data":["800F38C3 00??"],"options":{"99 Bells":"63","No Bells":"00"}},"Infinite\\Energy":{"note":"","data":["800FB897 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["800F38C5 000A"],"options":null}},"C00CA948-8E60D34B-C:45":{"Max Or No Score\\Player 1":{"note":"","data":["81104772 ????"],"options":{"Max Score":"FFFF","No Score":"0000"}},"Max Or No Score\\Player 2":{"note":"","data":["81104776 ????"],"options":{"Max Score":"FFFF","No Score":"0000"}},"Max Or No Score\\Player 3":{"note":"","data":["8110477A ????"],"options":{"Max Score":"FFFF","No Score":"0000"}},"Max Or No Score\\Player 4":{"note":"","data":["8110477E ????"],"options":{"Max Score":"FFFF","No Score":"0000"}}},"C0C85046-61051B05-C:49":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2712 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE03F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80381B97 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802026F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DE255 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801FCB85 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801EFF6D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","802027A5 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00486E1 0020","801DA0BD 0001"],"options":null}},"C0F6DB17-80E0D532-C:44":{"Enable Cheat Select":{"note":"","data":["80115933 00??"],"options":{"All Weapons With Fast Run":"42","All Weapons With Infinite Ammo":"06","Fast run":"40","Have All Weapons":"02","Infinite Ammo":"04","Infinite Ammo With Fast Run":"44","Invincible":"01","Invincible With All Weapons And Fast Run":"43","Invincible With All Weapons and Ammo and Fast Run":"47","Invincible With Fast Run":"41","Invincible With Infinite Ammo and All Weapons":"07"}},"Enable In-Game Cheat Menu \u0026 Level Select":{"note":"","data":["81115936 014F"],"options":null},"Sound Select\\Music Volume":{"note":"","data":["80115944 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"Sound Select\\SFX Volume":{"note":"","data":["80115945 00??"],"options":{"Defualt (1.5)":"BC","Low (5)":"3C","Max (2.0)":"F0","Medium (1.0)":"78","Off":"00"}},"[Press L For Levitate]":{"note":"","data":["D10F7550 0020","816FE35C 43D5"],"options":null}},"C151AD61-280FFF22-C:45":{"Have 99 Coins":{"note":"","data":["810BB55E 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C7EC2 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BB54C 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BB556 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BB55A 0009"],"options":null}},"C16C421B-A21580F7-C:45":{"Have All\\Levels and Bonus Stages Unlocked":{"note":"Press start in Gyro's Lab and then resume game to see all open","data":["801D72CC 00FF","801D72CD 00FF","801D72CE 00FF","801D72CF 00FF","801D72D3 00FF"],"options":null},"Have All\\Time Attack \u0026 Toy Hunting Comnpleated (All Levels)":{"note":"Press start in Gyro's Lab and then resume game to see all open","data":["801D72D8 00FF","801D72D9 00FF","801D72DA 00FF","801D72DB 00FF","801D72DC 00FF","801D72DD 00FF","801D72DE 00FF","801D72DF 00FF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["801D72AE 0063"],"options":null},"Infinite\\99 Stars":{"note":"","data":["801D72AF 0063"],"options":null},"Infinite\\Time\\Gladstones Time Attack":{"note":"","data":["801D72A7 00FF"],"options":null},"Infinite\\Time\\Nephews Toy Hunting":{"note":"","data":["801D72A3 0063"],"options":null},"Instant\\Carrier Box [Moon Walk] (Press L)":{"note":"Press and hold the L Button and you will run floating of any ledge slowing drifting down. If you keep pressing the A Button while Holding L it will act as a Moon Jump.","data":["D00CB2A1 0020","801C939F 0001"],"options":null},"Instant\\Hyperactive State [Invincible] (Press C-Right)":{"note":"","data":["D00CB2A1 0001","801CE616 0001"],"options":null},"Instant\\Rage Attack (Press C-Left)":{"note":"","data":["D00CB2A1 0002","801CE5BD 0001"],"options":null},"Widescreen":{"note":"","data":["81094100 2402","81094102 0190","81094124 2402","81094126 00E0","8107EFB4 03E0","8107EFB6 0008","8107EFB8 2402","8107EFBA 0001"],"options":null}},"C1D702BD-6D416547-C:4A":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D55E0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112CF0E 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800EB470 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D55C0 0001","50001701 0000","800D55C8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D5850 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D5889 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D55B9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D55BA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D55BB 0003"],"options":null}},"C2751D1A-F8C19BFF-C:50":{"Access Everything\\Start New Game":{"note":"","data":["50000502 0002","80204F3B 0013","50000502 0002","80204F42 0009","50000402 0002","80204F43 000A","80204F4B 000D","81204F4C 0E0F","81204F4E 0101","81204F5A 0100"],"options":null},"Have All Snowboards":{"note":"","data":["80204F3C 0001","81204F3E 0101","81204F40 0101"],"options":null},"Infinite Tools Options":{"note":"","data":["80206404 00??"],"options":{"Fan":"04","Frying Pan":"01","Ghost":"02","Invisible":"06","Rat Face":"08","Rock":"07","Rocket":"05","Super Ghost":"03","Super Rat Face":"09","Wings":"0A"}},"Infinite Weapons Options":{"note":"","data":["80206402 00??","80206403 0009"],"options":{"Bomb":"05","Freeze Shot":"03","Parachute":"02","Slap Stick":"01","Snowman":"04","Whirlwind":"06"}},"Max Coins":{"note":"","data":["8120639E 270F"],"options":null},"Max Money(Story Mode)":{"note":"","data":["81204EB0 0098","81204EB2 967F"],"options":null},"Open Extra Characters":{"note":"","data":["81204F4E 0101","80204F50 0001"],"options":null},"Trick Game 300 Points":{"note":"","data":["812065D2 012C"],"options":null}},"C29FF9E4-264BFE7D-C:45":{"Boris\\1-Hit Death":{"note":"","data":["D01543D5 0044","811543D4 0001"],"options":null},"Boris\\Infinite\\Health":{"note":"","data":["811543D4 0044"],"options":null},"Boris\\Infinite\\Lives":{"note":"","data":["811543D0 0063"],"options":null},"Boris\\Infinite\\Special":{"note":"","data":["811543DC 0044"],"options":null},"Boris\\Max Score":{"note":"","data":["81154404 000F","81154406 423F"],"options":null},"Curtis\\1-Hit Death":{"note":"","data":["D01541B9 0044","811541B8 0001"],"options":null},"Curtis\\Infinite\\Health":{"note":"","data":["811541B8 0044"],"options":null},"Curtis\\Infinite\\Lives":{"note":"","data":["811541B4 0063"],"options":null},"Curtis\\Infinite\\Special":{"note":"","data":["811541C0 0044"],"options":null},"Curtis\\Max Score":{"note":"","data":["811541E8 000F","811541EA 423F"],"options":null},"George\\1-Hit Death":{"note":"","data":["D015480D 0044","8115480C 0001"],"options":null},"George\\Infinite\\Health":{"note":"","data":["8115480C 0044"],"options":null},"George\\Infinite\\Lives":{"note":"","data":["81154808 0063"],"options":null},"George\\Infinite\\Special":{"note":"","data":["81154814 0044"],"options":null},"George\\Max Score":{"note":"","data":["8115483C 000F","8115483E 423F"],"options":null},"Infinite Time to Choose A Character":{"note":"","data":["8118CF9A 06CB"],"options":null},"Lizzie\\1-Hit Death":{"note":"","data":["D0154A29 0044","81154A28 0001"],"options":null},"Lizzie\\Infinite\\Health":{"note":"","data":["81154A28 0044"],"options":null},"Lizzie\\Infinite\\Lives":{"note":"","data":["81154A24 0063"],"options":null},"Lizzie\\Infinite\\Special":{"note":"","data":["81154A30 0044"],"options":null},"Lizzie\\Max Score":{"note":"","data":["81154A58 000F","81154A5A 423F"],"options":null},"Myukus Codes\\1-Hit Death":{"note":"","data":["D0154E61 0044","81154E60 0001"],"options":null},"Myukus Codes\\Infinite\\Health":{"note":"","data":["81154E60 0044"],"options":null},"Myukus Codes\\Infinite\\Lives":{"note":"","data":["81154E5C 0063"],"options":null},"Myukus Codes\\Infinite\\Special":{"note":"","data":["81154E68 0044"],"options":null},"Myukus Codes\\Max Score":{"note":"","data":["81154E90 000F","81154E92 423F"],"options":null},"Ralph\\1-Hit Death":{"note":"","data":["D0154C45 0044","81154C44 0001"],"options":null},"Ralph\\Infinite\\Health":{"note":"","data":["81154C44 0044"],"options":null},"Ralph\\Infinite\\Lives":{"note":"","data":["81154C40 0063"],"options":null},"Ralph\\Infinite\\Special":{"note":"","data":["81154C4C 0044"],"options":null},"Ralph\\Max Score":{"note":"","data":["81154C74 000F","81154C76 423F"],"options":null},"Ruby\\1-Hit Death":{"note":"","data":["D01545F1 0044","811545F0 0001"],"options":null},"Ruby\\Infinite\\Health":{"note":"","data":["811545F0 0044"],"options":null},"Ruby\\Infinite\\Lives":{"note":"","data":["811545EC 0063"],"options":null},"Ruby\\Infinite\\Special":{"note":"","data":["811545F8 0044"],"options":null},"Ruby\\Max Score":{"note":"","data":["81154620 000F","81154622 423F"],"options":null},"Unlock Cheat Menu":{"note":"","data":["810D5710 0001"],"options":null}},"C2E9AA9A-475D70AA-C:45":{"Beta Bottles Revenge Mode":{"note":"Bottles Revenge is a Beta mode from Banjo Tooie that the RWP team recently uncovered after an extraordinary amount of effort. Bottles the Spirit transforms into Bottles the Devil and posses enemies nearby and allows a second player hooked up to Pad 2 to play as that Posses character to try to foil Banjos Plans. As player one goes about its business, player two uses every enemy nearby to try to nab Banjo and take away some life. This mode is incredible, and you can control almost every enemy in the game: slot machines, flying creatures, uggers, zubbas...and this is just the beginning. (Congrats Rare Witch Project)","data":["8012B3F2 0001","800810C1 0002"],"options":null},"Fly At Anytime":{"note":"","data":["81120010 240E","81120012 0001","81120014 2400","D1081084 0400","81120014 A08E","81120016 0605"],"options":null},"HD Shadows and Banjo Models":{"note":"Uses main models of Banjo,Kazooie,Mumbo and Clockwork Kazooie as their dynamic shadows and forces Banjo models (normal and dragon) to always use best LoD in order to avoid a glitch that would happen without that.","data":["D1117DEA 062B","81117DEA 062A","D1117DEE 0839","81117DEE 0838","D003F428 0080","810A62A4 0C14","D003F428 0080","810A62A6 0000","81500000 2404","81500002 0853","81500004 1464","81500006 000A","81500008 0000","8150000A 0000","8150000C 2404","8150000E 0010","81500010 1144","81500012 0004","81500014 0000","81500016 0000","81500018 2402","8150001A 062A","8150001C 1000","8150001E 0014","81500020 0000","81500022 0000","81500024 2402","81500026 0838","81500028 1000","8150002A 0011","8150002C 0000","8150002E 0000","81500030 2404","81500032 0855","81500034 1464","81500036 0004","81500038 0000","8150003A 0000","8150003C 2402","8150003E 061C","81500040 1000","81500042 000B","81500044 0000","81500046 0000","81500048 2404","8150004A 080A","8150004C 1464","8150004E 0004","81500050 0000","81500052 0000","81500054 2402","81500056 060E","81500058 1000","8150005A 0005","8150005C 0000","8150005E 0000","81500060 2404","81500062 062E","81500064 1464","81500066 0002","81500068 0000","8150006A 0000","8150006C 2402","8150006E 083A","81500070 0040","81500072 2025","81500074 0803","81500076 59D3","81500078 0000","8150007A 0000"],"options":null},"Have Most of the Game Finished":{"note":"Start a new game,when you appear in Spiral Mountain press Top D-Pad. Go to the menu and you will notice all eggs, all moves are available. All the jiggies have been collected. Simply Save and Restart.","data":["5000AC01 0000","80290000 00FF","8029002B 007F","80290063 00FB","80290073 005F","D1081084 0800","8112C770 8029","D1081084 0800","8112C772 0000"],"options":null},"Have\\All Moves":{"note":"Press Top D-pad,Do not use with Have\\All Moves \u0026 Dragon Kazooie Or Have\\Dragon Kazooie","data":["D1081084 0800","8112C770 8029","D1081084 0800","8112C772 0000","81290018 FFFF","8129001A FFFF","8129001C FFFF","8129001E FFFF"],"options":null},"Have\\All Moves \u0026 Dragon Kazooie":{"note":"Press Top D-pad,Do not use with either Have all Moves,Or Have Dragon Kazooie","data":["D1081084 0800","8112C770 8029","D1081084 0800","8112C772 0000","81290018 FFFF","8129001A FFFF","8129001C FFFF","8129001E FFFF","81290078 FFFF","8129007A FFFF"],"options":null},"Have\\Dragon Kazooie":{"note":"Press Top D-pad,Do not use with Have All Modes Or Have All Moves \u0026 Dragon Kazooie","data":["D1081084 0800","8112C770 8029","D1081084 0800","8112C772 0000","81290078 FFFF","8129007A FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["8112B052 42C8"],"options":null},"Infinite\\Eggs, Feathers, All Items":{"note":"","data":["810D1A60 3442","810D1A62 03E7"],"options":null},"Infinite\\Energy\\Banjo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B65F 000A","8011B660 000A"],"options":null},"Infinite\\Energy\\Banjo and Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B644 0A0A"],"options":null},"Infinite\\Energy\\Bee":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B653 000A","8011B654 000A"],"options":null},"Infinite\\Energy\\Detonator":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B66E 0A0A"],"options":null},"Infinite\\Energy\\Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B662 0A0A"],"options":null},"Infinite\\Energy\\Mumbo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B668 0A0A"],"options":null},"Infinite\\Energy\\Snowball":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B647 0005"],"options":null},"Infinite\\Energy\\Stony":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B659 000A","8011B65A 000A"],"options":null},"Infinite\\Energy\\Submarine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B665 000A","8011B666 000A"],"options":null},"Infinite\\Energy\\T-Rex Baby":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8011B67F 000A","8011B680 000A"],"options":null},"Infinite\\Energy\\Washing Machine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["8011B069 0063","8111B656 0A0A"],"options":null},"Instant Warp\\Options\\Cauldron Keep":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Cauldron Keep":"015D","Colosseum kickball arena":"0180","Crazy Castle Stockade Jump the hoops multi":"017C","Crazy Castle Stockade balloon burst multi":"017B","Dodgems":"0186","Grunty Industries packing game":"017D","Gun chamber":"0160","Gun room still":"016A","The gatehouse":"015E","Tower of Tragedy Quiz":"015F"}},"Instant Warp\\Options\\Cloud Cuckoo Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Central cavern":"013A","Cloud Cuckoo Land 1":"0136","Cloud Cuckoo Land 2":"0161","Humba wumba's wigwam":"0140","Inside the cheesewedge":"0138","Inside the pot o gold":"013D","Inside the trashcan":"0137","Mingy jongo's skull":"013F","Mumbo's skull":"013E","Trash can mini":"0185","Zubba's nest":"0139","Zubba's nest multi":"0188"}},"Instant Warp\\Options\\Glitter Gulch Mine":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Canary cave":"00DB","Chuffy's cab":"00D0","Crushing shed":"00CB","Flooded caves":"00CC","Fuel depot":"00CA","Generator caverns":"00D3","Gloomy caverns":"00D2","Humba":"00E9","Inside chuffy's boiler boss":"00D1","Mine":"00C7","Mumbo's hut":"00D9","Mumbo's skull":"0171","Ordnance Storage entrance":"0163","Ordnance Storage game":"0164","Ordnance Storage game Multi":"0165","Ordnance storage":"00DC","Power hut":"00D4","Power hut basement":"00CF","Prospectors hut":"00D8","Testing":"0170","Toxic gas cave":"00DA","Train station":"00D7","Water storage":"00CD","Water supply pipe":"0126","Waterfall cavern":"00CE","Wumba's wigwam":"00D5"}},"Instant Warp\\Options\\Grunty Industries":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Basement":"010F","Basement \"repair depot":"0110","Basement \"waste disposal\"":"0111","Elevator shaft":"0105","Floor 2":"0106","Floor 2 \"electromagnet chamber\"":"0107","Floor 3":"0108","Floor 3 \"boiler plant\"":"0109","Floor 3 \"packing room\"":"010A","Floor 4":"010B","Floor 4 \"cable room\"":"010C","Floor 4 \"clinkers cavern\"":"0162","Floor 4 \"quality control\"":"010D","Floor 5":"010E","Inside":"0101","Mumbo's skull":"0172","Outside":"0100","Sewer entrance":"0187","Train station":"0102","Trash compactor":"0104","Water supply pipe":"0125","Workers quarters":"0103"}},"Instant Warp\\Options\\Hailfire Peaks":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Boggy's igloo":"0131","Chilli billi":"012B","Chilly willy":"012C","Colosseum kickball stadium lobby":"012D","Ice train station":"012A","Icicle grotto":"0132","Icy side":"0128","Icy side still":"0168","Inside the volcano":"0133","Lava side":"0127","Lava train station":"0129"}},"Instant Warp\\Options\\Isle O Hags":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Cliff top":"0155","Cliff top Mumbo's skull":"0156","Heggy's egg shed":"0150","Jiggywiggy's temple":"0151","Pine Grove":"0154","Plateau":"0152","Plateau \"Honey B's Hive\"":"0153","Quagmire":"015C","Wooded Hollow":"014F","inside another digger tunnel":"015B","wasteland":"015A"}},"Instant Warp\\Options\\Jinjo Village":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Black Jinjo's House":"0146","Blue Jinjo's House":"0148","Bottles house":"0143","Brown Jinjo's House":"014A","Green Jinjo's House":"0145","Jinjo Village":"0142","King Jingalings throne room":"0144","Orange Jinjo's House":"014B","Purple Jinjo's House":"014C","Red Jinjo's House":"014D","White Jinjo's House":"014E","Yellow Jinjo's House":"0147"}},"Instant Warp\\Options\\Jolly Roger's Lagoon":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Ancient Swimming Baths":"00F4","Atlantis":"01A8","Blubber's wave race hire":"00FF","Electric Eels lair":"00F6","Inside the big fish":"00F8","Jolly Roger's Lagoon":"01A7","Jolly's":"00ED","Pawno's emporium":"00EE","Seabottom":"01A9","Seaweed Sanctum":"00F7","mumbo's skull":"00EF","sea bottom cavern":"0181","submarine multi":"0182","temple of the fishes":"00FA"}},"Instant Warp\\Options\\Mayahem Temple":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Code chamber":"00BC","Humba's Wigwam":"00B6","Inside Targitzans Temple":"0178","Jade Snake Grove":"00C4","Kickball Arena":"00C9","Mayan Kickball Arena":"017F","Multi":"0166","Mumbo's skull":"00B7","Prison Compound":"00B9","Still":"0167","Targitzan Temple Lobby":"0179","Targitzan's Slighty Sacred Temple":"0177","Targitzan's Temple Boss":"017A","The Temple":"00B8","Treasure Chamber":"00C5"}},"Instant Warp\\Options\\Not sure":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Bottles house":"0143","Bottles house still":"0169","HAG Inside":"018A","HAG1 Final Boss":"019A","Humba Wumba's wigwam 1":"0135","Humba Wumba's wigwam 2":"0157","Inside Chuffy's wagon":"0121","Inside the digger tunnel":"0141","Jingalings Zombified Palace":"019B","Lord woo fak fak":"00FC","Mr Patch":"00F9","Mumbo's Skull":"0134","Smuggler cavern":"01A6"}},"Instant Warp\\Options\\Spiral Mountain":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Banjo's house":"0173","Behind The Waterfall":"00AE","Grunty's Old Lair":"00AD","Top Of Castle":"00AF"}},"Instant Warp\\Options\\Terrydacty Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Bonfire caverns":"011B","Chompa's belly multi":"0183","Humba's Wigwam":"011E","Inside chompa's belly":"0123","Inside the mountain":"0116","Oogle boogles cave":"0115","River passage":"0117","Stomping plains":"011A","Styracosaurus family cave":"0118","Terry's nest":"0113","Terrydacty Land":"0112","Train station":"0114","Unga bunga's cave":"0119"}},"Instant Warp\\Options\\Witchy World":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D0081084 0000","81127640 ????","80127643 0001"],"options":{"Balloon burst game":"00E4","Cave of horrors":"00EA","Crazy castle lobby":"00E2","Crazy castle pump room":"00E3","Crazy castle stockade":"00E1","Crazy castle stockade \"sop\"":"013B","Dodgem challenge \"1 vs 1\"":"00DE","Dodgem challenge \"2 vs 1\"":"00DF","Dodgem challenge \"3 vs 1\"":"00E0","Dodgem dome lobby":"00DD","Haunted cavern":"00EB","Hoop hurry game":"00E5","Mumbo's skull":"0176","Saucer of Peril":"0124","Star spinner":"00E6","Star spinner \"sop\"":"013C","The inferno":"00E7","Train station":"00EC","Witcy World":"00D6"}},"Monsters dont Hurt Banjo":{"note":"","data":["50002430 0000","80132EF5 0000","50002430 0000","80132EF6 0000","50002430 0000","80132EF7 0000","50002430 0000","80132EF8 0000","50002430 0000","80132EF9 0000"],"options":null},"Multi-Player\\Everyone Infinite All Eggs Multiplayer":{"note":"All blaster modes specifically.[ Thanks retroben, awesome work on this!]","data":["810EA078 0C04","810EA07A 8040","81120100 3C08","81120102 8008","81120104 8108","81120106 4288","81120108 1100","8112010A 0010","8112010C 0000","8112010E 0000","81120110 3C08","81120112 8008","81120114 8D08","81120116 4288","81120118 0008","8112011A 4200","8112011C 0008","8112011E 4202","81120120 0008","81120122 4080","81120124 3C04","81120126 8000","81120128 0104","8112012A 4020","8112012C 3C04","8112012E 2406","81120130 2484","81120132 0064","81120134 AD04","81120136 31C4","81120138 3C04","8112013A 2408","8112013C 2484","8112013E FFFE","81120140 AD04","81120142 31CC","81120144 3C04","81120146 8013","81120148 8C84","8112014A 2DC4","8112014C 0802","8112014E 2098","81120150 0000","81120152 0000"],"options":null},"Multi-Player\\Infinite Health\\Player 1":{"note":"","data":["80135531 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 2":{"note":"","data":["80135535 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 3":{"note":"","data":["80135539 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 4":{"note":"","data":["8013553D 0064"],"options":null},"Play As":{"note":"To use this cheat, put the cheat on, then press L as you walk through a door to become that chosen character. Do not try to use the following character in Banjos house or anywhere as small or you will get stuck and wont be able to continue. Snowball Washing machine Submarine Golden Goliath Truck T-rex baby and T-rex daddy","data":["D0081085 0020","8012704C 00??"],"options":{"Banjo":"0A","Banjo and Kazooie":"01","Bee":"06","Detonator":"0F","Golden Goliath":"0E","Kazooie":"0B","Mumbo":"0D","Snowball":"02","Stony":"08","Submarine":"0C","T-rex baby":"12","T-rex daddy":"13","Truck":"10","Washing machine":"07"}},"Realistic tunnel entrance portals":{"note":"","data":["810F70D4 0C10","810F70D6 4000","81410000 3C0E","81410002 8008","81410004 81CE","81410006 7AD0","81410008 11C0","8141000A 0015","8141000C 0000","8141000E 0000","81410010 3C0E","81410012 8008","81410014 8DCE","81410016 7AD0","81410018 000E","8141001A 7200","8141001C 000E","8141001E 7202","81410020 000E","81410022 7080","81410024 3C05","81410026 8000","81410028 01C5","8141002A 7020","8141002C 2405","8141002E 1000","81410030 A5C5","81410032 0EE4","81410034 A5C5","81410036 0F7C","81410038 A5C5","8141003A 0FA4","8141003C 0005","8141003E 2C00","81410040 34A5","81410042 003E","81410044 ADC5","81410046 0F18","81410048 2402","8141004A 000E","8141004C 00A2","8141004E 2823","81410050 ADC5","81410052 0F50","81410054 2402","81410056 0029","81410058 00A2","8141005A 2823","8141005C ADC5","8141005E 0FF4","81410060 2405","81410062 000E","81410064 0802","81410066 79C7","81410068 0000","8141006A 0000"],"options":null},"Shock Spring At Anytime":{"note":"Press Top D-pad,Do not use with Have\\All Moves Or Have\\Dragon Kazooie","data":["81120018 240E","8112001A 0001","8112001C 2400","D1081084 0800","8112001C A08E","8112001E 0606"],"options":null},"Sixty Frames - fps1":{"note":"","data":["D003F428 0080","810145EC 0C10","D003F428 0080","810145EE 0000","81400000 3C0E","81400002 8009","81400004 81CA","81400006 8C58","81400008 1140","8140000A 0003","8140000C 3C0E","8140000E 8013","81400010 1000","81400012 0005","81400014 0000","81400016 0000","81400018 3C0E","8140001A 8008","8140001C 81CE","8140001E 5B20","81400020 51C0","81400022 0004","81400024 3C0E","81400026 8013","81400028 3C0A","8140002A 8013","8140002C 1000","8140002E 0043","81400030 814A","81400032 C767","81400034 85CE","81400036 8608","81400038 240A","8140003A 016F","8140003C 114E","8140003E 0042","81400040 240A","81400042 0170","81400044 114E","81400046 0040","81400048 240A","8140004A 00C7","8140004C 114E","8140004E 005B","81400050 240A","81400052 00CB","81400054 114E","81400056 0059","81400058 240A","8140005A 01A7","8140005C 114E","8140005E 008E","81400060 240A","81400062 0107","81400064 114E","81400066 0055","81400068 240A","8140006A 0112","8140006C 114E","8140006E 009D","81400070 240A","81400072 0116","81400074 114E","81400076 000F","81400078 240A","8140007A 0128","8140007C 114E","8140007E 008C","81400080 240A","81400082 0101","81400084 114E","81400086 004D","81400088 240A","8140008A 0136","8140008C 114E","8140008E 009C","81400090 240A","81400092 013D","81400094 114E","81400096 0049","81400098 240A","8140009A 0161","8140009C 114E","8140009E 0057","814000A0 240A","814000A2 015F","814000A4 554E","814000A6 000F","814000A8 3C0E","814000AA 8012","814000AC 1000","814000AE 0008","814000B0 3C0E","814000B2 8008","814000B4 3C0E","814000B6 8013","814000B8 81CE","814000BA A9AC","814000BC 240A","814000BE 0002"],"options":null},"Sixty Frames - fps2":{"note":"","data":["814000C0 554E","814000C2 0070","814000C4 3C0E","814000C6 8008","814000C8 1000","814000CA 0069","814000CC 3C0E","814000CE 8008","814000D0 81CE","814000D2 63E0","814000D4 11C0","814000D6 0019","814000D8 240A","814000DA 0001","814000DC 1000","814000DE 0017","814000E0 240A","814000E2 0002","814000E4 81CE","814000E6 7096","814000E8 240A","814000EA 0007","814000EC 554E","814000EE 0013","814000F0 240A","814000F2 0001","814000F4 3C0E","814000F6 8013","814000F8 8DCE","814000FA 5490","814000FC 11C0","814000FE 000F","81400100 240A","81400102 0001","81400104 8DCE","81400106 01A0","81400108 85CE","8140010A 0018","8140010C 240A","8140010E 0357","81400110 154E","81400112 000A","81400114 240A","81400116 0001","81400118 3C0E","8140011A 8013","8140011C 8DCE","8140011E 5490","81400120 ADC0","81400122 0A0C","81400124 ADC0","81400126 0A14","81400128 ADC0","8140012A 0A20","8140012C ADC0","8140012E 0A24","81400130 ADC0","81400132 0A2C","81400134 ADC0","81400136 0A38","81400138 240A","8140013A 0001","8140013C 3C0E","8140013E 8008","81400140 0800","81400142 BCA4","81400144 A1CA","81400146 913F","81400148 3C0E","8140014A 8008","8140014C 81CA","8140014E 6AF8","81400150 5140","81400152 FFFA","81400154 240A","81400156 0001","81400158 8DCE","8140015A 6AF8","8140015C 000E","8140015E 7200","81400160 000E","81400162 7202","81400164 000E","81400166 7080","81400168 3C0A","8140016A 8000","8140016C 01CA","8140016E 7020","81400170 340A","81400172 C040","81400174 A5CA","81400176 15DA","81400178 340A","8140017A 4110","8140017C A5CA","8140017E 15E2","81400180 A5CA","81400182 163E","81400184 340A","81400186 BCF5"],"options":null},"Sixty Frames - fps3":{"note":"","data":["81400188 A5CA","8140018A 15EA","8140018C 340A","8140018E C28F","81400190 A5CA","81400192 15F2","81400194 A5CA","81400196 164E","81400198 340A","8140019A 42C8","8140019C A5CA","8140019E 162E","814001A0 A5CA","814001A2 168A","814001A4 340A","814001A6 4040","814001A8 A5CA","814001AA 1636","814001AC 340A","814001AE 3CF5","814001B0 A5CA","814001B2 1646","814001B4 1000","814001B6 FFE1","814001B8 240A","814001BA 0001","814001BC 3C0E","814001BE 8013","814001C0 81CE","814001C2 A9AC","814001C4 240A","814001C6 0002","814001C8 154E","814001CA 000C","814001CC 3C0E","814001CE 8009","814001D0 81CA","814001D2 9D78","814001D4 1140","814001D6 0009","814001D8 8DCE","814001DA 9D78","814001DC 000E","814001DE 7200","814001E0 000E","814001E2 7202","814001E4 000E","814001E6 7080","814001E8 3C0A","814001EA 8000","814001EC 01CA","814001EE 7020","814001F0 3C0A","814001F2 3E4C","814001F4 354A","814001F6 CCCD","814001F8 ADCA","814001FA 0F6C","814001FC 3C0E","814001FE 8008","81400200 81CA","81400202 6948","81400204 5140","81400206 FFB7","81400208 3C0E","8140020A 8012","8140020C 8DCE","8140020E 6948","81400210 000E","81400212 7200","81400214 000E","81400216 7202","81400218 000E","8140021A 7080","8140021C 3C0A","8140021E 8000","81400220 01CA","81400222 7020","81400224 340A","81400226 C070","81400228 A5CA","8140022A 132E","8140022C 340A","8140022E 4130","81400230 A5CA","81400232 1336","81400234 A5CA","81400236 1392","81400238 340A","8140023A BCF5","8140023C A5CA","8140023E 133E","81400240 340A","81400242 C28F","81400244 A5CA","81400246 1346","81400248 A5CA","8140024A 13A2","8140024C 340A","8140024E 4070"],"options":null},"Sixty Frames - fps4":{"note":"","data":["81400250 A5CA","81400252 138A","81400254 340A","81400256 3CF5","81400258 A5CA","8140025A 139A","8140025C 340A","8140025E 435E","81400260 A5CA","81400262 1382","81400264 A5CA","81400266 13DE","81400268 1000","8140026A FFB4","8140026C 240A","8140026E 0001","81400270 81CA","81400272 7978","81400274 5540","81400276 FFB1","81400278 240A","8140027A 0002","8140027C 1000","8140027E FFCF","81400280 240A","81400282 0001","81400284 81CA","81400286 68E8","81400288 5540","8140028A FFAC","8140028C 240A","8140028E 0002","81400290 1000","81400292 FFAA","81400294 240A","81400296 0001","81400298 3C0E","8140029A 8008","8140029C 81CE","8140029E 2B48","814002A0 11C0","814002A2 FFD6","814002A4 0000","814002A6 0000","814002A8 15C0","814002AA FFC4","814002AC 0000","814002AE 0000","814002B0 3C0E","814002B2 8012","814002B4 81CE","814002B6 7096","814002B8 240A","814002BA 0002","814002BC 114E","814002BE FFBF","814002C0 240A","814002C2 000D","814002C4 154E","814002C6 FFCD","814002C8 0000","814002CA 0000","814002CC 3C0E","814002CE 8008","814002D0 81CE","814002D2 6568","814002D4 11C0","814002D6 FFC9","814002D8 0000","814002DA 0000","814002DC 15C0","814002DE FFB7","814002E0 0000","814002E2 0000"],"options":null},"Sixty Frames - fps5":{"note":"","data":["814002E4 3C0E","814002E6 8013","814002E8 85CE","814002EA 59C8","814002EC 240A","814002EE 0057","814002F0 514E","814002F2 FF92","814002F4 240A","814002F6 0002","814002F8 1000","814002FA FFB0","814002FC 0000","814002FE 0000","81400300 3C0E","81400302 8013","81400304 81CE","81400306 A9AC","81400308 240A","8140030A 0002","8140030C 154E","8140030E FFBB","81400310 0000","81400312 0000","81400314 3C0E","81400316 8012","81400318 81CE","8140031A 7096","8140031C 240A","8140031E 000D","81400320 154E","81400322 FFAB","81400324 3C0E","81400326 8009","81400328 81CA","8140032A 9D78","8140032C 5140","8140032E FF83","81400330 240A","81400332 0001","81400334 1000","81400336 FF81","81400338 240A","8140033A 0002"],"options":null}},"C34304AC-2D79C021-C:45":{"Infinite Lives":{"note":"","data":["8010BCFF 0009"],"options":null},"Invincible":{"note":"","data":["8009F742 0001"],"options":null},"Level Select":{"note":"","data":["D009A913 0000","8009A913 00??"],"options":{"Level 1 - Shaolin Temple - China":"00","Level 2 - Wind Realm":"01","Level 3 - Earth Realm":"02","Level 4 - Water Realm":"03","Level 5 - Fire Ream":"04","Level 6 - Prison":"05","Level 7 - Bridge":"06","Level 8 - Fortress":"07"}},"Max Experience":{"note":"","data":["8111200E FC9A"],"options":null},"Widescreen":{"note":"Minor Clipping Issues","data":["8101B95A C355","8101BA6E 4355","8101AEE6 FF2A","8101AEDE 00D6","8105CC42 FF5E","8105CC14 0004","8105CC16 2080","8105CC18 241B","8105CC1A 0300","8105CC1C 009B","8105CC1E 001B","8105CC20 0000","8105CC22 9012","8105D81C 0003","8105D81E 1880","8105D820 241B","8105D822 0300","8105D824 007B","8105D826 001B","8105D828 0000","8105D82A 9012","8105D84A FF5F","810743E6 FF40","8107455E FF40","8107463E FF40","8107445E FF96","810745D6 FF96","810744C6 FF40","81074874 0003","81074876 1880","81074878 241B","8107487A 0300","8107487C 007B","8107487E 001B","81074880 0000","81074882 8812","810748B6 FF38","81074AEA FF39","81074A78 0004","81074A7A 2080","81074A7C 241B","81074A7E 0300","81074A84 009B","81074A86 001B","81074A88 0000","81074A8A A812","8101B68A FF2B","8101B6F2 00D5","81064366 FF2B","810643AA 00D5","810643E2 00D5","81064432 FF2B","8109F69C FFFF","8109F69E FFCB","8109F6A6 0079","8109F6B6 007A"],"options":null}},"C3B6DE9D-65D2DE76-C:50":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118DA00 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118DA02 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118DA04 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118DA06 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["50000402 0000","8018EE50 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["8016609D 00??","801660CA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["8016617D 00??","801661AA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["8016625D 00??","8016628A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["8016633D 00??","8016636A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["8016641D 00??","8016644A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["801664FD 00??","8016652A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818EF2F 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F6A55 0020","810F6B08 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F6A65 0020","810F78E0 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F6A75 0020","810F86B8 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F6A85 0020","810F9490 4000"],"options":null}},"C3CD76FF-9B9DCBDE-C:44":{"Freeze Enemies":{"note":"","data":["8008EE3B 0012"],"options":null},"Gore Mode":{"note":"","data":["8008EE37 0012"],"options":null},"Infinite\\Lives":{"note":"","data":["8008EE33 0012"],"options":null},"Infinite\\Primery Weapons":{"note":"","data":["8008EE30 0012"],"options":null},"Infinite\\Secondary Weapons":{"note":"","data":["8008EE31 0012"],"options":null},"Infinite\\Solaris":{"note":"Solaris are included in code","data":["8008EE3D 0012"],"options":null},"Infinite\\Titans":{"note":"Titans are included in code","data":["8008EE3C 0012"],"options":null},"Infinite\\Weapon Energy":{"note":"","data":["8008EE32 0012"],"options":null},"Invulnerability":{"note":"","data":["8008EE35 0012"],"options":null},"Level Select":{"note":"Accesses all Missions \u0026 Battle mode","data":["8008EE3E 0012"],"options":null},"One Shot Enemies":{"note":"","data":["8008EE3A 0012"],"options":null},"Psychedelic Mode":{"note":"","data":["8008EE39 0012"],"options":null},"Stealth Mode":{"note":"","data":["8008EE34 0012"],"options":null},"Turbo Mode":{"note":"","data":["8008EE38 0012"],"options":null},"Wireframe Mode":{"note":"","data":["8008EE36 0012"],"options":null}},"C3E7E29E-5D7251CC-C:50":{"99 Points Player 1":{"note":"","data":["8010C33F 0063"],"options":null},"Access All\\Cars \u0026 Tracks":{"note":"","data":["8104ADF6 0001"],"options":null},"Access All\\Cups":{"note":"","data":["8005444B 0003","8005442D 0000","8005442E 0000","8005442F 0000","80054477 0003","80054459 0000","8005445A 0000","8005445B 0000","800544A3 0003","80054485 0000","80054486 0000","80054487 0000"],"options":null},"Always 1st":{"note":"","data":["811157AE 0001","811157B6 0000","8110C33E 03E7"],"options":null},"Drones Have No Weapons":{"note":"","data":["8111CECE 0000"],"options":null},"Infinite Continues":{"note":"","data":["8110C332 0006"],"options":null},"Infinite Weapons\\Player 1":{"note":"","data":["81115798 0000","8111579A 00??","8111579E 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 2":{"note":"","data":["81117C60 0000","81117C62 00??","81117C66 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 3":{"note":"","data":["8111A128 0000","8111A12A 00??","8111A12E 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Infinite Weapons\\Player 4":{"note":"","data":["8111C5F0 0000","8111C5F2 00??","8111C5F6 0001"],"options":{"Beach Ball":"0B","Blue Protector":"05","Bowling Ball Mine":"07","Green Missile":"00","Lightning Bolt":"09","Multi-Orange Missiles":"02","Oil Slick":"06","Orange Missile":"01","Orange Star":"0A","The Bomb":"03","Water Balloon":"04","Yellow Protector":"08"}},"Laps To Race":{"note":"","data":["8107DD1E 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Number Of Drones In The Race":{"note":"","data":["8110FFF6 00??"],"options":{"1 Drone":"01","2 Drones":"02","3 Drones":"03","4 Drones":"04","5 Drones":"05","6 Drones":"06","7 Drones":"07","8 Drones":"08","9 Drones":"09"}}},"C3F19159-65D2BC5A-C:50":{"Number Of Goals Player 1":{"note":"","data":["80119043 00??"],"options":{"1 Goal":"01","10 Goals":"0A","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08","9 Goals":"09"}},"Number Of Goals Player 2":{"note":"","data":["80119047 00??"],"options":{"1 Goal":"01","10 Goals":"0A","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08","9 Goals":"09"}}},"C43E23A7-40B1681A-C:45":{"Infinite\\Balls":{"note":"","data":["800ABFB7 0000"],"options":null},"Infinite\\Character Creation Points":{"note":"","data":["800E2C31 00B0"],"options":null},"Infinite\\Outs":{"note":"","data":["800ABFBB 0000"],"options":null},"Infinite\\Strikes":{"note":"","data":["800ABFB9 0000"],"options":null},"Max\\Character Creation Accuracy":{"note":"","data":["810E2BF0 4170"],"options":null},"Max\\Character Creation Arm Strength":{"note":"","data":["810E2C20 4170"],"options":null},"Max\\Character Creation Bunting":{"note":"","data":["810E2C0C 4170"],"options":null},"Max\\Character Creation Clutch":{"note":"","data":["810E2BF4 4170"],"options":null},"Max\\Character Creation Clutch 2":{"note":"","data":["810E2C28 4170"],"options":null},"Max\\Character Creation Contact":{"note":"","data":["810E2BFC 4170"],"options":null},"Max\\Character Creation Defense":{"note":"","data":["810E2C1C 4170"],"options":null},"Max\\Character Creation Power":{"note":"","data":["810E2C00 4170"],"options":null},"Max\\Character Creation Speed":{"note":"","data":["810E2C18 4170"],"options":null},"Max\\Character Creation Streak":{"note":"","data":["810E2C24 4170"],"options":null},"Max\\Character Creation VS LHB":{"note":"","data":["810E2C10 4170"],"options":null},"Max\\Character Creation VS RHB":{"note":"","data":["810E2C14 4170"],"options":null},"Max\\Character Creation VS. LHP":{"note":"","data":["810E2C04 4170"],"options":null},"Max\\Character Creation VS. RHP":{"note":"","data":["810E2C08 4170"],"options":null}},"C49ADCA2-F1501B62-C:45":{"Always Have\\99 points":{"note":"","data":["8015FD09 0063"],"options":null},"Always first position":{"note":"","data":["80162A80 0001"],"options":null},"Only race one lap":{"note":"","data":["8015FC35 0001"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D01A10B5 0010","81162F28 4077","D01A10B5 0010","81162F30 4077"],"options":null}},"C5674160-0F5F453C-C:50":{"Lower Left Character\\Coin Options":{"note":"","data":["810D1002 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDAED 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Left Character\\Star Options":{"note":"","data":["800D1006 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Lower Right Character\\Coin Options":{"note":"","data":["810D103A 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Lower Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDB39 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Lower Right Character\\Star Options":{"note":"","data":["800D103E 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Left Character\\Coin Options":{"note":"If you want to have full 255 Coins,1st use the 100 Option then put on 255. this will stop the numbers from changing \u0026 spoiling the result.","data":["810D0F92 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Left Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDA55 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Left Character\\Star Options":{"note":"","data":["800D0F96 00??"],"options":{"0 Stars":"00","99 Stars":"64"}},"Top Right Character\\Coin Options":{"note":"","data":["810D0FCA 00??"],"options":{"0 Coins":"00","10 Coins":"0A","100 Coins":"64","255 Coins":"FF"}},"Top Right Character\\Dice Always":{"note":"With this option you can calculate exactly how many you need to get on the position of your choice.","data":["800CDAA1 00??"],"options":{"Rolls In 1":"01","Rolls In 10":"0A","Rolls In 2":"02","Rolls In 3":"03","Rolls In 4":"04","Rolls In 5":"05","Rolls In 6":"06","Rolls In 7":"07","Rolls In 8":"08","Rolls In 9":"09","Rolls In Random":"00"}},"Top Right Character\\Star Options":{"note":"","data":["800D0FCE 00??"],"options":{"0 Stars":"00","99 Stars":"64"}}},"C71353BE-AA09A6EE-C:50":{"Always Normal Spirit\\Player 1":{"note":"","data":["801671F5 0032"],"options":null},"Always Normal Spirit\\Player 2":{"note":"","data":["80167689 0032"],"options":null},"Always Normal Spirit\\Player 3":{"note":"","data":["80167B1D 0032"],"options":null},"Always Normal Spirit\\Player 4":{"note":"","data":["80167FB1 0032"],"options":null},"Always Special\\Player 1":{"note":"","data":["80167235 0004"],"options":null},"Always Special\\Player 2":{"note":"","data":["801676C9 0004"],"options":null},"Always Special\\Player 3":{"note":"","data":["80167B5D 0004"],"options":null},"Always Special\\Player 4":{"note":"","data":["80167FF1 0004"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 1":{"note":"","data":["801671F4 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 2":{"note":"","data":["80167688 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 3":{"note":"","data":["80167B1C 0064"],"options":null},"Easy Pins \u0026 Longer Submissions\\Player 4":{"note":"","data":["80167FB0 0064"],"options":null},"Have All Characters":{"note":"","data":["8109ED5A FFFF"],"options":null},"Infinite Create-A-Wrestler Attribute Points":{"note":"","data":["8011A81B 001E"],"options":null},"Max Attributes":{"note":"","data":["8011A811 0032","8011A813 0032","8011A815 0032","8011A817 0032","8011A819 0032"],"options":null},"Max Spirit\\Player 1":{"note":"","data":["801671F5 00FF"],"options":null},"Max Spirit\\Player 2":{"note":"","data":["80167689 00FF"],"options":null},"Max Spirit\\Player 3":{"note":"","data":["80167B1D 00FF"],"options":null},"Max Spirit\\Player 4":{"note":"","data":["80167FB1 00FF"],"options":null},"No Spirit\\Player 1":{"note":"","data":["801671F5 0000"],"options":null},"No Spirit\\Player 2":{"note":"","data":["80167689 0000"],"options":null},"No Spirit\\Player 3":{"note":"","data":["80167B1D 0000"],"options":null},"No Spirit\\Player 4":{"note":"","data":["80167FB1 0000"],"options":null},"Specials Don't Run Out":{"note":"","data":["8112AD94 2400"],"options":null},"Timer Is Always 00:00":{"note":"","data":["8016F0AF 0000"],"options":null},"Ultimate Codes\\Player 1":{"note":"","data":["801671F4 0064"],"options":null},"Ultimate Codes\\Player 2":{"note":"","data":["80167688 0064"],"options":null},"Ultimate Codes\\Player 3":{"note":"","data":["80167B1C 0064"],"options":null},"Ultimate Codes\\Player 4":{"note":"","data":["80167FB0 0064"],"options":null},"Weapon Select\\Player 1":{"note":"","data":["81167236 0300","81166D90 ????","81166D92 0000","80166E50 0000"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 2":{"note":"","data":["811676CA 0300","81166DC0 ????","80166DC2 0001","80166E51 0001"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 3":{"note":"","data":["81167B5E 0300","81166DF0 ????","80166DF2 0002","80166E52 0002"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}},"Weapon Select\\Player 4":{"note":"","data":["81167FF2 0300","81166E18 ????","81166E1A 0003","80166E53 0003"],"options":{"2x4":"0808","BaseBall Bat":"1010","Big Mallot":"0E0E","Big Purple Sheet":"0909","Black Hockey Stick":"0606","Black Microphone":"0F0F","Board":"1212","Bottle":"0707","Broom":"0000","Folding Chair":"1111","Guitar":"0303","Head":"0D0D","Night Stick":"0404","Nothing":"FFFF","Red And White Hockey Stick":"0202","Shovel":"0101","Stairs":"1313","Stick":"0C0C","Suit Case":"0B0B","Trashcan":"1414","White Jug":"0A0A"}}},"C7C98F8E-42145DDE-C:45":{"Allways 1st":{"note":"","data":["8111D7EA 0000"],"options":null},"Have All\\Cars \u0026 Cups\\Player 1":{"note":"","data":["81124A0A FFFF"],"options":null},"Have All\\Cars \u0026 Cups\\Player 2":{"note":"","data":["81124B4A FFFF"],"options":null},"Have All\\Special Cars\\Player 1":{"note":"","data":["81124A04 FFFF","81124A06 FFFF","81124A0A FFFF"],"options":null},"Have All\\Special Cars\\Player 2":{"note":"","data":["81124B44 FFFF","81124B46 FFFF","81124B4A FFFF"],"options":null},"Have All\\Tracks":{"note":"","data":["81124A0E FFFF"],"options":null},"Infinite Turbos\\Player 1":{"note":"","data":["80118CFC 000A"],"options":null},"Infinite Turbos\\Player 2":{"note":"","data":["80119478 000A"],"options":null},"Max Tournament Points":{"note":"","data":["81124A16 00FF"],"options":null},"Press L For Time Is Always 0:00:00\\Player 1":{"note":"","data":["D0137FE5 0020","810F3900 0000","D0137FE5 0020","810F3902 0000"],"options":null},"Press L For Time Is Always 0:00:00\\Player 2":{"note":"","data":["D0137FED 0020","810F3900 0000","D0137FED 0020","810F3902 0000"],"options":null},"Start On Lap Modifier\\Player 1":{"note":"","data":["D0118AA8 0000","80118AA8 00??"],"options":{"1st":"00","2nd":"01","3rd":"02","4th":"03"}},"Start On Lap Modifier\\Player 2":{"note":"","data":["D0119224 0000","80119224 00??"],"options":{"1st":"00","2nd":"01","3rd":"02","4th":"03"}}},"C83CEB83-FDC56219-C:50":{"Always 1st":{"note":"","data":["8022CC16 0001"],"options":null},"Class Select":{"note":"This code is useful because you can play Class AA without having to beat a level!\u0026 then once any edit is done while the game is running","data":["8021C297 00??"],"options":{"1 Play":"04","2 Play":"05","3 Play":"06","4 Play":"07","Class AA":"03","Class B":"01","Class C":"00"}},"Super Speed":{"note":"This is Turbo fast,So to slow it down a little more keep the B button pressed down","data":["81228FA8 4800"],"options":null}},"C851961C-78FCAAFA-C:45":{"Choose Vehicle":{"note":"Make your Choice \u0026 then Press GS To Activate,But do not use with any other Press GS Cheat Codes.","data":["883626A7 00??"],"options":{"Birdman":"06","Cannonball":"03","Gyrocopter":"02","Hang Glider":"00","Jumble Hopper":"05","Rocket Belt":"01","Skydiving":"04"}},"Fly As Gray Plane In USA Level":{"note":"Press GS To Activate,But do not use with any other Press GS Cheat Codes.","data":["89362748 0008","813627B0 3F30","8024CDF5 006E"],"options":null},"Fly As Yellow Plane In USA Level":{"note":"Press GS To Activate,But do not use with any other Press GS Cheat Codes.","data":["89362748 0009","813627B0 3EE0","8024CDF5 006E"],"options":null},"Have Perfect Score in all Class \u0026 Level's":{"note":"With these codes, if you want them to save, you have to play a level, and lose and just choose quit after it tallies up your score. Also dont keep the code active once you save the level at 100%, turn the code off and continue with the other levels!","data":["8036427D 0064","803642AD 0064","803642DD 0064","80364911 0064","80364A61 0064","80364941 0064","80364A91 0064","80364971 0064","80364AC1 0064","80364FA5 0064","803650F5 0064","80365245 0064","80364FD5 0064","80365125 0064","80365275 0064","80365005 0064","80365155 0064","803652A5 0064","80365639 0064","80365789 0064","803658D9 0064","80365669 0064","803657B9 0064","80365909 0064","80365699 0064","803657E9 0064","80365939 0064","8036430D 0019","8036445D 0019","803645AD 0019","803646FD 0019","8036433D 0064","8036436D 0064","803649A1 0019","80364AF1 0019","80364C41 0019","80364D91 0019","803649D1 0064","80364A01 0064","80365035 0019","80365185 0019","803652D5 0019","80365425 0019","80365065 0064","80365095 0064"],"options":null},"Infinite Fuel\\Gyrocopter":{"note":"","data":["80362821 0081"],"options":null},"Infinite Fuel\\Rocket Belt":{"note":"","data":["80362841 0081"],"options":null},"Time Always 00'00'10":{"note":"This Cheat code is for All Events","data":["80362750 0001"],"options":null}},"C8BB4DD9-CC5F430B-C:45":{"Have All Elements":{"note":"","data":["8107BAA4 3232","8107BAA6 3232"],"options":null},"Infinite Health":{"note":"","data":["8107BA84 01F4","8107BA86 01F4"],"options":null},"Infinite Magic Points":{"note":"","data":["8107BA88 01F4","8107BA8A 01F4"],"options":null},"Super Agility":{"note":"","data":["8107BA8E 01F4"],"options":null},"Super Defense":{"note":"","data":["8107BA8C 01F4"],"options":null}},"C8DC65EB-3D8C8904-C:45":{"Always 1st":{"note":"","data":["812C4C96 0001"],"options":null},"Have All\\Boats":{"note":"","data":["812B5CA2 0101","812B5CA4 0101","812B5CA6 0101","812B5CA8 0101","812B5CAA 0101","812B5CAC 0101","812B5CAE 0101"],"options":null},"Have All\\Races":{"note":"","data":["812B5C94 0101","812B5C96 0101","812B5C98 0101","812B5C9A 0101","812B5C9C 0101","812B5C9E 0101","812B5CA0 0101"],"options":null},"Hydro Speedway":{"note":"","data":["802B5C94 00??"],"options":{"Unlocked \u0026 Completed":"03","Unlocked \u0026 Not Completed":"01"}},"Infinite\\Boosts\\Player 1":{"note":"","data":["812C4C9C 4190"],"options":null},"Infinite\\Boosts\\Player 2":{"note":"","data":["812C4FCC 4190"],"options":null},"Infinite\\Time":{"note":"","data":["812B4890 42C8"],"options":null}},"C9176D39-EA4779D1-C:50":{"Beta Bottles Revenge Mode":{"note":"Bottles Revenge is a Beta mode from Banjo Tooie that the RWP team recently uncovered after an extraordinary amount of effort. Bottles the Spirit transforms into Bottles the Devil and posses enemies nearby and allows a second player hooked up to Pad 2 to play as that Posses character to try to foil Banjos Plans. As player one goes about its business, player two uses every enemy nearby to try to nab Banjo and take away some life. This mode is incredible, and you can control almost every enemy in the game: slot machines, flying creatures, uggers, zubbas...and this is just the beginning. (Congrats Rare Witch Project)","data":["80130402 0001","8008B4D1 0002"],"options":null},"Have\\All Moves":{"note":"Press Top D-pad,Do not use with Have\\All Moves \u0026 Dragon Kazooie Or Have\\Dragon Kazooie","data":["D1083F08 0800","811314F0 8029","D1083F08 0800","811314F2 0000","81290018 FFFF","8129001A FFFF","8129001C FFFF","8129001E FFFF"],"options":null},"Have\\All Moves \u0026 Dragon Kazooie":{"note":"Press Top D-pad,Do not use with Have\\All Moves Or Have\\Dragon Kazooie","data":["D1083F08 0800","811314F0 8029","D1083F08 0800","811314F2 0000","81290018 FFFF","8129001A FFFF","8129001C FFFF","8129001E FFFF","81290078 FFFF","8129007A FFFF"],"options":null},"Have\\Dragon Kazooie":{"note":"","data":["D1083F08 0800","811314F0 8029","D1083F08 0800","811314F2 0000","81290078 FFFF","8129007A FFFF"],"options":null},"Infinite\\Air":{"note":"","data":["8112FFD2 42C8"],"options":null},"Infinite\\Energy\\Banjo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207AF 000A","801207B0 000A"],"options":null},"Infinite\\Energy\\Banjo and Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0A0A","81120794 0A0A"],"options":null},"Infinite\\Energy\\Bee":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207A3 000A","801207A4 000A"],"options":null},"Infinite\\Energy\\Detonator":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","811207BE 0A0A"],"options":null},"Infinite\\Energy\\Kazooie":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","811207B2 0A0A"],"options":null},"Infinite\\Energy\\Mumbo":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","811207B8 0A0A"],"options":null},"Infinite\\Energy\\Snowball":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","80120797 0005"],"options":null},"Infinite\\Energy\\Stony":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207A9 000A","8011B65A 000A"],"options":null},"Infinite\\Energy\\Submarine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207B5 000A","801207B6 000A"],"options":null},"Infinite\\Energy\\T-Rex Baby":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","801207CF 000A","801207D0 000A"],"options":null},"Infinite\\Energy\\Washing Machine":{"note":"With Infinite Energy On Avoid Picking up the ! Or ? Stop Energy Honey Combs or you will be stuck.","data":["801201B9 0063","811207A6 0A0A"],"options":null},"Instant Warp\\Options\\Cauldron Keep":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Cauldron Keep":"015D","Colosseum kickball arena":"0180","Crazy Castle Stockade Jump the hoops multi":"017C","Crazy Castle Stockade balloon burst multi":"017B","Dodgems":"0186","Grunty Industries packing game":"017D","Gun chamber":"0160","Gun room still":"016A","The gatehouse":"015E","Tower of Tragedy Quiz":"015F"}},"Instant Warp\\Options\\Cloud Cuckoo Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Central cavern":"013A","Cloud Cuckoo Land 1":"0136","Cloud Cuckoo Land 2":"0161","Humba wumba's wigwam":"0140","Inside the cheesewedge":"0138","Inside the pot o gold":"013D","Inside the trashcan":"0137","Mingy jongo's skull":"013F","Mumbo's skull":"013E","Trash can mini":"0185","Zubba's nest":"0139","Zubba's nest multi":"0188"}},"Instant Warp\\Options\\Glitter Gulch Mine":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Canary cave":"00DB","Chuffy's cab":"00D0","Crushing shed":"00CB","Flooded caves":"00CC","Fuel depot":"00CA","Generator caverns":"00D3","Gloomy caverns":"00D2","Humba":"00E9","Inside chuffy's boiler boss":"00D1","Mine":"00C7","Mumbo's hut":"00D9","Mumbo's skull":"0171","Ordnance Storage entrance":"0163","Ordnance Storage game":"0164","Ordnance Storage game Multi":"0165","Ordnance storage":"00DC","Power hut":"00D4","Power hut basement":"00CF","Prospectors hut":"00D8","Testing":"0170","Toxic gas cave":"00DA","Train station":"00D7","Water storage":"00CD","Water supply pipe":"0126","Waterfall cavern":"00CE","Wumba's wigwam":"00D5"}},"Instant Warp\\Options\\Grunty Industries":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Basement":"010F","Basement \"repair depot":"0110","Basement \"waste disposal\"":"0111","Elevator shaft":"0105","Floor 2":"0106","Floor 2 \"electromagnet chamber\"":"0107","Floor 3":"0108","Floor 3 \"boiler plant\"":"0109","Floor 3 \"packing room\"":"010A","Floor 4":"010B","Floor 4 \"cable room\"":"010C","Floor 4 \"clinkers cavern\"":"0162","Floor 4 \"quality control\"":"010D","Floor 5":"010E","Inside":"0101","Mumbo's skull":"0172","Outside":"0100","Sewer entrance":"0187","Train station":"0102","Trash compactor":"0104","Water supply pipe":"0125","Workers quarters":"0103"}},"Instant Warp\\Options\\Hailfire Peaks":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Boggy's igloo":"0131","Chilli billi":"012B","Chilly willy":"012C","Colosseum kickball stadium lobby":"012D","Ice train station":"012A","Icicle grotto":"0132","Icy side":"0128","Icy side still":"0168","Inside the volcano":"0133","Lava side":"0127","Lava train station":"0129"}},"Instant Warp\\Options\\Isle O Hags":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Cliff top":"0155","Cliff top Mumbo's skull":"0156","Heggy's egg shed":"0150","Jiggywiggy's temple":"0151","Pine Grove":"0154","Plateau":"0152","Plateau \"Honey B's Hive\"":"0153","Quagmire":"015C","Wooded Hollow":"014F","inside another digger tunnel":"015B","wasteland":"015A"}},"Instant Warp\\Options\\Jinjo Village":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Black Jinjo's House":"0146","Blue Jinjo's House":"0148","Bottles house":"0143","Brown Jinjo's House":"014A","Green Jinjo's House":"0145","Jinjo Village":"0142","King Jingalings throne room":"0144","Orange Jinjo's House":"014B","Purple Jinjo's House":"014C","Red Jinjo's House":"014D","White Jinjo's House":"014E","Yellow Jinjo's House":"0147"}},"Instant Warp\\Options\\Jolly Roger's Lagoon":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Ancient Swimming Baths":"00F4","Atlantis":"01A8","Blubber's wave race hire":"00FF","Electric Eels lair":"00F6","Inside the big fish":"00F8","Jolly Roger's Lagoon":"01A7","Jolly's":"00ED","Pawno's emporium":"00EE","Seabottom":"01A9","Seaweed Sanctum":"00F7","mumbo's skull":"00EF","sea bottom cavern":"0181","submarine multi":"0182","temple of the fishes":"00FA"}},"Instant Warp\\Options\\Mayahem Temple":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Code chamber":"00BC","Humba's Wigwam":"00B6","Inside Targitzans Temple":"0178","Jade Snake Grove":"00C4","Kickball Arena":"00C9","Mayan Kickball Arena":"017F","Multi":"0166","Mumbo's skull":"00B7","Prison Compound":"00B9","Still":"0167","Targitzan Temple Lobby":"0179","Targitzan's Slighty Sacred Temple":"0177","Targitzan's Temple Boss":"017A","The Temple":"00B8","Treasure Chamber":"00C5"}},"Instant Warp\\Options\\Not sure":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Bottles house":"0143","Bottles house still":"0169","HAG Inside":"018A","HAG1 Final Boss":"019A","Humba Wumba's wigwam 1":"0135","Humba Wumba's wigwam 2":"0157","Inside Chuffy's wagon":"0121","Inside the digger tunnel":"0141","Jingalings Zombified Palace":"019B","Lord woo fak fak":"00FC","Mr Patch":"00F9","Mumbo's Skull":"0134","Smuggler cavern":"01A6"}},"Instant Warp\\Options\\Spiral Mountain":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Banjo's house":"0173","Behind The Waterfall":"00AE","Grunty's Old Lair":"00AD","Top Of Castle":"00AF"}},"Instant Warp\\Options\\Terrydacty Land":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Bonfire caverns":"011B","Chompa's belly multi":"0183","Humba's Wigwam":"011E","Inside chompa's belly":"0123","Inside the mountain":"0116","Oogle boogles cave":"0115","River passage":"0117","Stomping plains":"011A","Styracosaurus family cave":"0118","Terry's nest":"0113","Terrydacty Land":"0112","Train station":"0114","Unga bunga's cave":"0119"}},"Instant Warp\\Options\\Witchy World":{"note":"Only use one Instant Warp Option At once, Make sure the other is off before putting this one on","data":["D008B494 0000","8112C5A0 ????","8012C5A3 0001"],"options":{"Balloon burst game":"00E4","Cave of horrors":"00EA","Crazy castle lobby":"00E2","Crazy castle pump room":"00E3","Crazy castle stockade":"00E1","Crazy castle stockade \"sop\"":"013B","Dodgem challenge \"1 vs 1\"":"00DE","Dodgem challenge \"2 vs 1\"":"00DF","Dodgem challenge \"3 vs 1\"":"00E0","Dodgem dome lobby":"00DD","Haunted cavern":"00EB","Hoop hurry game":"00E5","Mumbo's skull":"0176","Saucer of Peril":"0124","Star spinner":"00E6","Star spinner \"sop\"":"013C","The inferno":"00E7","Train station":"00EC","Witcy World":"00D6"}},"Multi-Player\\Infinite Health\\Player 1":{"note":"","data":["8013A541 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 2":{"note":"","data":["8013A545 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 3":{"note":"","data":["8013A549 0064"],"options":null},"Multi-Player\\Infinite Health\\Player 4":{"note":"","data":["8013A54D 0064"],"options":null},"Play As":{"note":"To use this cheat, put the cheat on, then press L as you walk through a door to become that chosen character","data":["D008B494 0020","8012BFAC 00??"],"options":{"Banjo":"0A","Banjo and Kazooie":"01","Bee":"06","Detonator":"0F","Golden Goliath":"0E","Kazooie":"0B","Mumbo":"0D","Snowball":"02","Stony":"08","Submarine":"0C","T-rex baby":"12","T-rex daddy":"13","Truck":"10","Washing machine":"07"}}},"C9C3A987-5810344C-C:4A":{"Battle Mode\\Infinite Balloons\\Player 1":{"note":"","data":["8118A080 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 2":{"note":"","data":["8118A082 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 3":{"note":"","data":["8118A084 0003"],"options":null},"Battle Mode\\Infinite Balloons\\Player 4":{"note":"","data":["8118A086 0003"],"options":null},"Have\\Bonus Mode and All Gold Cups":{"note":"","data":["8018B4D8 00??","8018B4D9 00??","8018B4DA 00??","8018B4DB 00??"],"options":{"Off":"00","On":"FF"}},"Infinite Items\\2 player Mode\\Player 1":{"note":"","data":["8016271D 00??","8016274A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\2 player Mode\\Player 2":{"note":"","data":["801627FD 00??","8016282A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 1":{"note":"","data":["801628DD 00??","8016290A 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 2":{"note":"","data":["801629BD 00??","801629EA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 3":{"note":"","data":["80162A9D 00??","80162ACA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Infinite Items\\3-4 player Mode\\Player 4":{"note":"","data":["80162B7D 00??","80162BAA 00??"],"options":{"Banana Bunch":"02","Blue Spiny Shell":"07","Double Mushroom":"0D","Fake Item Box":"09","Ghost":"0B","Invincible Star":"0A","Lightning":"08","Single Banana":"01","Single Green Shell":"03","Single Mushroom":"0C","Single Red Shell":"05","Super Mushroom":"0F","Triple Green Shell":"04","Triple Mushroom":"0E","Triple Red Shell":"06"}},"Press GS\\For Full Debug Menu":{"note":"Press GS at the Press Start Menu to access the Debug Menu","data":["8818B5BF 0002"],"options":null},"Press L To Levitate\\Player 1":{"note":"","data":["D00F61B5 0020","810F6268 4000"],"options":null},"Press L To Levitate\\Player 2":{"note":"","data":["D00F61C5 0020","810F7040 4000"],"options":null},"Press L To Levitate\\Player 3":{"note":"","data":["D00F61D5 0020","810F7E18 4000"],"options":null},"Press L To Levitate\\Player 4":{"note":"","data":["D00F61E5 0020","810F8BF0 4000"],"options":null},"Sixty Frames":{"note":"Single player only for now.","data":["80000FC3 0000","800014AF 0001"],"options":null}},"CA12B547-71FA4EE4-C:45":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C2212 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803AE51F 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["80382CB7 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","802020F5 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801DDC55 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801FC5C5 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801EF96D 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","80202225 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00489E1 0020","801D9ABD 0001"],"options":null},"Widescreen":{"note":"","data":["8101C7A0 0801","8101C7A2 0F84","81043E10 3C1B","81043E12 3F40","81043E14 449B","81043E16 2000","81043E18 0800","81043E1A 71EA","81043E1C 4604","81043E1E 4202","D10A80A6 A113","810B0518 4300"],"options":null}},"CA1BB86F-41CCA5C5-C:4A":{"All Stages Complete":{"note":"You still have to beat the boss to continue onto the next world.","data":["50002B01 0000","800D55E0 0002"],"options":null},"Can Fly Forever":{"note":"","data":["8112CF2E 00F0"],"options":null},"Game 100% Complete\\Save Slot 1":{"note":"","data":["800EB470 0064"],"options":null},"Get All Crystals":{"note":"","data":["50000701 0000","800D55C0 0001","50001701 0000","800D55C8 0007"],"options":null},"Infinite Health":{"note":"","data":["810D5850 40C0"],"options":null},"Infinite Lives":{"note":"","data":["800D5889 0064"],"options":null},"Unlock All Difficulty Levels\\100 Yard Hop":{"note":"","data":["800D55B9 0003"],"options":null},"Unlock All Difficulty Levels\\Bumper Crop Bump":{"note":"","data":["800D55BA 0003"],"options":null},"Unlock All Difficulty Levels\\Checkerboard Chase":{"note":"","data":["800D55BB 0003"],"options":null}},"CA2A7444-71DAB71C-C:50":{"Always Place 1st":{"note":"","data":["80152D61 0000"],"options":null},"Have All\\Cars":{"note":"","data":["50001504 0000","800AAD4B 0001"],"options":null},"Have All\\Tracks":{"note":"","data":["8116A0EC FFFF"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D01354BF 0010","8112CE6C 43CB"],"options":null}},"CB93DB97-7F5C63D5-C:46":{"Have 99 coins":{"note":"","data":["810BBBDE 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C8542 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BBBCC 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BBBD6 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BBBDA 0009"],"options":null}},"CBFE69C7-F2C0AB2A-C:45":{"Access Level Select":{"note":"On the main menu Scroll down to make CHEATS visible to go into Level Select.For in-Game Cheats,Pause gameplay.","data":["810DD21C 8001"],"options":null},"Have\\All TARZAN Letters":{"note":"","data":["800DD225 00FF"],"options":null},"Have\\Coins Collected 100%":{"note":"","data":["800DD257 0064"],"options":null},"Have\\Full Portrait":{"note":"","data":["800DD224 00FF"],"options":null},"Have\\Level \u0026 Tokens Completed 100%":{"note":"","data":["800DD22F 0000","800DD230 0001","800DD231 0000"],"options":null},"Infinite\\Bonus Timer":{"note":"This is For All Timers on Bonus Levels","data":["801735FE 0025"],"options":null},"Infinite\\Green Weapon":{"note":"","data":["81192096 0063"],"options":null},"Infinite\\Health":{"note":"","data":["811921C0 0120"],"options":null},"Infinite\\Lives":{"note":"","data":["800DD252 00??"],"options":{"3 Lives":"03","99 Lives":"63"}},"Infinite\\Purple Weapon":{"note":"","data":["8119209A 0063"],"options":null},"Infinite\\Red Weapon":{"note":"","data":["81192098 0063"],"options":null},"Press GS For\\Sabor Attacks\\Sabor 1 Hit Kill":{"note":"","data":["8924A23E 0001"],"options":null}},"CCEB3858-26952D97-C:50":{"Have 99 Coins":{"note":"","data":["810BB4FE 0063"],"options":null},"Have All 5 Collectables":{"note":"","data":["801C7E62 0005"],"options":null},"Hold jump to fly":{"note":"","data":["810BB4EC 0002"],"options":null},"Infinite Battery Power":{"note":"","data":["810BB4F6 000E"],"options":null},"Infinite Lives":{"note":"","data":["800BB4FA 0009"],"options":null}},"CCEDB696-D3883DB4-C:4A":{"All Items":{"note":"","data":["50002402 0202","810EC7E0 0001","50004601 0000","800EC861 0003"],"options":null},"Item Modifier Codes\\Position 01":{"note":"","data":["800EC7E0 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 02":{"note":"","data":["800EC7E1 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 03":{"note":"","data":["800EC7E2 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 04":{"note":"","data":["800EC7E3 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 05":{"note":"","data":["800EC7E4 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 06":{"note":"","data":["800EC7E5 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 07":{"note":"","data":["800EC7E6 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 08":{"note":"","data":["800EC7E7 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 09":{"note":"","data":["800EC7E8 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 10":{"note":"","data":["800EC7E9 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 11":{"note":"","data":["800EC7EA 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 12":{"note":"","data":["800EC7EB 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 13":{"note":"","data":["800EC7EC 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 14":{"note":"","data":["800EC7ED 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 15":{"note":"","data":["800EC7EE 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 16":{"note":"","data":["800EC7EF 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 17":{"note":"","data":["800EC7F0 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 18":{"note":"","data":["800EC7F1 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 19":{"note":"","data":["800EC7F2 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 20":{"note":"","data":["800EC7F3 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 21":{"note":"","data":["800EC7F4 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 22":{"note":"","data":["800EC7F5 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 23":{"note":"","data":["800EC7F6 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 24":{"note":"","data":["800EC7F7 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 25":{"note":"","data":["800EC7F8 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 26":{"note":"","data":["800EC7F9 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 27":{"note":"","data":["800EC7FA 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 28":{"note":"","data":["800EC7FB 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 29":{"note":"","data":["800EC7FC 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 30":{"note":"","data":["800EC7FD 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 31":{"note":"","data":["800EC7FE 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 32":{"note":"","data":["800EC7FF 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 33":{"note":"","data":["800EC800 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 34":{"note":"","data":["800EC801 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 35":{"note":"","data":["800EC802 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 36":{"note":"","data":["800EC803 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 37":{"note":"","data":["800EC804 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 38":{"note":"","data":["800EC805 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 39":{"note":"","data":["800EC806 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 40":{"note":"","data":["800EC807 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 41":{"note":"","data":["800EC808 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 42":{"note":"","data":["800EC809 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 43":{"note":"","data":["800EC80A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 44":{"note":"","data":["800EC80B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 45":{"note":"","data":["800EC80C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 46":{"note":"","data":["800EC80D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 47":{"note":"","data":["800EC80E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 48":{"note":"","data":["800EC80F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}}},"CD538CE4-618AFCF9-C:45":{"Have 6 Carrots":{"note":"","data":["80164519 007E"],"options":null},"Have All\\Collectibles\\Stage 1":{"note":"","data":["80164510 0014"],"options":null},"Have All\\Collectibles\\Stage 2":{"note":"","data":["80164511 0014"],"options":null},"Have All\\Collectibles\\Stage 3":{"note":"","data":["80164512 0014"],"options":null},"Have All\\Collectibles\\Stage 4":{"note":"","data":["80164513 0014"],"options":null},"Have All\\Collectibles\\Stage 5":{"note":"","data":["80164514 0014"],"options":null},"Have All\\Collectibles\\Stage 6":{"note":"","data":["80164515 0014"],"options":null},"Have All\\Costumes":{"note":"","data":["8016451A 00FE"],"options":null},"Have All\\Levels":{"note":"","data":["80164508 003F"],"options":null},"Infinite Health":{"note":"","data":["8018BA7D 000F"],"options":null},"Max Collectable Items":{"note":"","data":["80164501 0014"],"options":null},"Press L To levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D018BAB5 0020","8118B9E0 4200"],"options":null}},"CD5BEC0F-86FD1008-C:45":{"Extra Characters":{"note":"","data":["8113A488 1000","8113A48A 07FF","8113A48C 2000","8113A48E 3FFF"],"options":null},"Infinite Creation Points":{"note":"","data":["80136245 0000"],"options":null}},"CD7559AC-B26CF5AE-C:45":{"16:9 Widescreen":{"note":"For 16:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["8127683C 4334","81276840 4334","81274B74 3FE6"],"options":null},"21:9 Widescreen":{"note":"For 21:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["8127683C 4334","81276840 4334","81274B74 4019"],"options":null},"Access All Moves":{"note":"","data":["8037C3A0 0001","8037C3A1 007F","8037C3A2 00FF","8037C3A3 00FF"],"options":null},"Character Select":{"note":"When Mumbo transforms you hold:C-Up for the Termite,C-Right for the Pumpkin,C-Down for the Walrus,C-Left for the Crocc,R for the Bumble Bee,L for the Washing Machine,Press nothing to turn into Banjo","data":["D0281251 0008","8037C2D3 0002","D0281251 0001","8037C2D3 0003","D0281251 0004","8037C2D3 0004","D0281251 0002","8037C2D3 0005","D0281251 0010","8037C2D3 0006","D0281251 0020","8037C2D3 0007"],"options":null},"Do Shock Spring Jump From Anywhere":{"note":"Press A Button. Do not use with Take Off And Fly From Anywhere","data":["8037C1D2 0002"],"options":null},"Game 100% Complete":{"note":"","data":["8137C3A0 001F","50000302 0000","8137C3A2 FFFF","50000602 0000","813832C0 FFFF","81383FCA 0064","81383FDC 0064","50000802 0000","813832F0 FFFF","81385FA0 0063","81385FC4 0063","81385FF0 0064","50000602 0000","81385FF2 6464","50001002 0000","813831A8 FFFF","813831B0 FF7F","813831B2 FFB0","813831B4 3DA6","813831B6 F264","813831C6 FF7F"],"options":null},"Have Zero Time all Levels":{"note":"","data":["50000B04 0000","81386004 3000"],"options":null},"Infinite\\Air":{"note":"","data":["813851AE 0E10"],"options":null},"Infinite\\Always Have All Jinjos":{"note":"","data":["80385F7B 00FF"],"options":null},"Infinite\\Eggs":{"note":"","data":["80385F67 00FF"],"options":null},"Infinite\\Gold Feathers":{"note":"","data":["80385F73 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["803851A3 0008"],"options":null},"Infinite\\Jiggies":{"note":"","data":["80385FCB 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["80385F8B 00FF"],"options":null},"Infinite\\Mumbo Tokens":{"note":"","data":["80385FC6 00FF","80385FA2 00FF"],"options":null},"Infinite\\Notes":{"note":"Just collect one Note to Have 255 Notes in all Worlds.","data":["80385FF2 00FF","80385F62 0001"],"options":null},"Infinite\\Red Feathers":{"note":"","data":["80385F6F 00FF"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D0281251 0020","8137C4BC 43E0"],"options":null},"Secret Items":{"note":"","data":["81283400 ????"],"options":{"Have All Collected":"FFFF","Have None":"0000"}},"Take Off And Fly From Anywhere":{"note":"Press A Button. Do not use with Do Shock Spring Jump From Anywhere","data":["8037C1D1 0002"],"options":null}},"CEA8B54F-7F21D503-C:45":{"Always Berserk Mode":{"note":"","data":["801BF9AF 00FF"],"options":null},"Always Drop\\Player 1":{"note":"","data":["801BF9BB 00??"],"options":{"Bar":"00","Big Water":"06","Bomb":"0A","Corner":"02","Down Bar":"05","Down Square":"04","Fireball":"0B","Medium Water":"07","Small Water":"08","Smallest Water":"09","Square":"03","T":"01"}},"Always Drop\\Player 2":{"note":"","data":["801F013B 00??"],"options":{"Bar":"00","Big Water":"06","Bomb":"0A","Corner":"02","Down Bar":"05","Down Square":"04","Fireball":"0B","Medium Water":"07","Small Water":"08","Smallest Water":"09","Square":"03","T":"01"}},"Always Empty Drain":{"note":"","data":["801BF991 0000","811BF992 0000","811BF994 0000"],"options":null},"Infinite Ducks":{"note":"","data":["801BF94B 0009"],"options":null},"Infinite Lakes":{"note":"","data":["811BF93E 0009"],"options":null},"Mega Score":{"note":"","data":["801BF958 00FF","801EED04 00FF"],"options":null},"Practice Lessons Open":{"note":"","data":["810B0BAA 0008"],"options":null},"Stop Level Timer":{"note":"","data":["801BF9B2 00FF"],"options":null}},"CEA8B54F-7F21D503-C:50":{"Always Empty Drain":{"note":"","data":["801BF991 0000","811BF992 0000","811BF994 0000"],"options":null},"Bezerk Mode":{"note":"","data":["801BF9AF 00FF"],"options":null},"Stop Level Timer":{"note":"","data":["801BF9B2 00FF"],"options":null}},"CEDCDE1E-513A0502-C:50":{"Access Another World":{"note":"This is for Puzzle Mode","data":["8116D100 0001"],"options":null},"Bubble Pointer 1P V CPU":{"note":"","data":["8017E1FD 0001"],"options":null},"Bubble Pointer Puzzle":{"note":"","data":["801807CD 0001"],"options":null},"Infinite Credit":{"note":"","data":["80120171 00FF"],"options":null},"Max Points Aid":{"note":"","data":["81170E4A 25C2"],"options":null}},"CF8957AD-96D57EA9-C:45":{"Infinite\\Health":{"note":"For Overhead \u0026 Driving Levels","data":["81064DF0 42C8"],"options":null},"Unlock All\\Characters":{"note":"","data":["50000C01 0000","8006252D 0001"],"options":null},"Unlock All\\Levels":{"note":"","data":["50000301 0000","80062508 0001","50000801 0000","8006250C 0001","50000801 0000","80062516 0001","50000A01 0000","8006251F 0001"],"options":null}},"D0151AB0-FE5CA14B-C:45":{"Have All Weapons":{"note":"","data":["8120A8F6 FFFF"],"options":null},"Infinite\\Ammo (All Weapons)":{"note":"","data":["81261A40 A05B"],"options":null},"Infinite\\Armor":{"note":"","data":["8020A987 0064"],"options":null},"Infinite\\Experience":{"note":"","data":["8020A967 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["8020A965 0064"],"options":null},"Max\\Acro":{"note":"","data":["8020A96F 0007"],"options":null},"Max\\Attack":{"note":"","data":["8020A96B 0007"],"options":null},"Max\\Power":{"note":"","data":["8020A971 0007"],"options":null},"Max\\Speed":{"note":"","data":["8020A96D 0007"],"options":null},"Max\\Vitality":{"note":"","data":["8020A969 0007"],"options":null}},"D09BA538-1C1A5489-C:50":{"Car Select":{"note":"","data":["D00F5900 0000","800F5900 00??"],"options":{"Chevrolet Camaro":"03","Chrysler Jeep Jeepster (Prototype)":"08","Default":"00","Dodge Viper":"04","Donkey In Glass Box":"0E","Ferrari F40":"07","Hotdog":"0A","Hummer H1":"05","Jeep Wrangler":"02","McLaren F1":"09","Mitsubishi Eclipse":"01","Nintendo 64 Logo":"0C","Nintendo Power Car":"0B","Porsche 911 Turbo":"06","Taco":"0D"}},"Infinite\\Max Acceleration\\Player 1":{"note":"","data":["800F590D 0005"],"options":null},"Infinite\\Max Acceleration\\Player 2":{"note":"","data":["800F5AF9 0005"],"options":null},"Infinite\\Max Acceleration\\Player 3":{"note":"","data":["800F5CE5 0005"],"options":null},"Infinite\\Max Acceleration\\Player 4":{"note":"","data":["800F5ED1 0005"],"options":null},"Infinite\\Max Handling\\Player 1":{"note":"","data":["800F590C 0005"],"options":null},"Infinite\\Max Handling\\Player 2":{"note":"","data":["800F5AF8 0005"],"options":null},"Infinite\\Max Handling\\Player 3":{"note":"","data":["800F5CE4 0005"],"options":null},"Infinite\\Max Handling\\Player 4":{"note":"","data":["800F5ED0 0005"],"options":null},"Infinite\\Max Money\\Player 1":{"note":"","data":["800F5905 000F"],"options":null},"Infinite\\Max Money\\Player 2":{"note":"","data":["800F5AF1 000F"],"options":null},"Infinite\\Max Money\\Player 3":{"note":"","data":["800F5CDD 000F"],"options":null},"Infinite\\Max Money\\Player 4":{"note":"","data":["800F5EC9 000F"],"options":null},"Infinite\\Max Top Speed\\Player 1":{"note":"","data":["800F590E 0005"],"options":null},"Infinite\\Max Top Speed\\Player 2":{"note":"","data":["800F5AFA 0005"],"options":null},"Infinite\\Max Top Speed\\Player 3":{"note":"","data":["800F5CE6 0005"],"options":null},"Infinite\\Max Top Speed\\Player 4":{"note":"","data":["800F5ED2 0005"],"options":null},"Infinite\\Nitro\\Player 1":{"note":"","data":["800F590F 0009"],"options":null},"Infinite\\Nitro\\Player 2":{"note":"","data":["800F5AFB 0009"],"options":null},"Laps 2 Race":{"note":"","data":["80118E20 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"[Press F9]\\All Cars (All Modes)":{"note":"","data":["880EA08B 000E","88102A71 000E"],"options":null},"[Press F9]\\Jump To Season 6":{"note":"","data":["881023A8 0005"],"options":null}},"D124DBB7-7C9FF5E5-C:00":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["811744B8 FFFF","811744BA FFFF","811744BE 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FEC8 270F"],"options":null}},"D1A78A07-52A3DD3E-C:50":{"Access Secret Characters\\Bengal The Tiger":{"note":"","data":["800B4DB2 0011"],"options":null},"Access Secret Characters\\Festus":{"note":"","data":["800B0DC3 0001"],"options":null},"Access Secret Characters\\Kimmi \u0026 Cindy":{"note":"","data":["800B0DAA 0011"],"options":null},"Access Secret Characters\\Mark":{"note":"","data":["800B0DB7 0012"],"options":null},"Access Secret Characters\\Marvin The Alien":{"note":"","data":["800B0DC7 0001"],"options":null},"Access Secret Characters\\Robert \u0026 Delvis":{"note":"","data":["800B0DBA 0011"],"options":null},"Access Secret Characters\\Starr \u0026 Traci":{"note":"","data":["800B0DBE 0011"],"options":null},"Access Secret Characters\\Twfan \u0026 Eagamer":{"note":"","data":["800B0DAE 0011"],"options":null},"Infinite \u0026 Max Power-Ups":{"note":"","data":["800B4612 00F0","50000801 0000","800B4600 00FF"],"options":null}},"D1F7D8AB-293B0446-C:45":{"Extra Lives":{"note":"Not to be used with CLassic Mode, or it will freeze","data":["8007F90E 0063"],"options":null},"Extra Points":{"note":"Not to be used with CLassic Mode, or it will freeze","data":["8107F8FE FFFF"],"options":null},"Infinite Armageddon":{"note":"Not to be used with CLassic Mode, or it will freeze","data":["8107F892 0001"],"options":null},"Infinite Items On Pickup":{"note":"Not to be used with CLassic Mode, or it will freeze","data":["8107F8A2 270F"],"options":null},"Infinite Lives (Classic Asteroids)":{"note":"","data":["8007F90F 0009"],"options":null},"Unlock Classic Asteroids":{"note":"","data":["8106DF5A 0001"],"options":null}},"D25C1211-13EEBF67-C:44":{"Active Cheat Select":{"note":"If you want to just enable All Secrets, Select Nothing and then Uncheck it.","data":["8116FA44 FFFF","8116FA46 FFFF","8116FA4A 00??"],"options":{"All Weapons":"02","All Weapons \u0026 All Keys":"0A","All Weapons \u0026 Unlimited Ammo":"06","All Weapons_Unlimited Ammo \u0026 All Keys":"0E","Have All Keys":"08","Invincibility":"01","Invincible \u0026 All Keys":"09","Invincible \u0026 All Weapons":"03","Invincible \u0026 Unlimited Ammo":"05","Invincible_All Weapons \u0026 All Keys":"0B","Invincible_All Weapons \u0026 Unlimited Ammo":"07","Invincible_All Weapons_Unlimited Ammo \u0026 All Keys":"0F","Invincible_Unlimited Ammo \u0026 All Keys":"0D","Nothing":"00","Unlimited Ammo":"04","Unlimited Ammo \u0026 All Keys":"0C"}},"Infinite 9999 Life Force Gems":{"note":"","data":["8168FC1C 270F"],"options":null}},"D2BE2F14-38453788-C:45":{"0% in Move List":{"note":"","data":["81135620 0000"],"options":null},"Enable Everything":{"note":"","data":["8112E21C F000","8112E21E 09FF","8112E220 FFFF","8112E222 FFFF"],"options":null},"Infinite Creation Points":{"note":"","data":["80161313 0000"],"options":null},"Max\\Charisma":{"note":"","data":["8014E3EC 000A"],"options":null},"Max\\Mat Skills":{"note":"","data":["8014E3ED 000A"],"options":null},"Max\\Recovery":{"note":"","data":["8014E3EB 000A"],"options":null},"Max\\Speed":{"note":"","data":["8014E3EA 000A"],"options":null},"Max\\Strength":{"note":"","data":["8014E3E8 000A"],"options":null},"Max\\Toughness":{"note":"","data":["8014E3E9 000A"],"options":null}},"D3F97D49-6924135B-C:50":{"Infinite Eggs":{"note":"This is for All Yoshis All levels","data":["80285078 0006"],"options":null},"Infinite\\Health":{"note":"This is for All Yoshis All levels","data":["50000804 0000","800F954F 0008"],"options":null},"Infinite\\Lives":{"note":"This is for All Yoshis All levels","data":["800F958F 00FF"],"options":null}},"D43DA81F-021E1E19-C:45":{"Always Have Wallet Size":{"note":"","data":["8011A832 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C8675 0010","8111BAF6 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011B679 00FF","8011BAEF 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Hyrule Field,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C8675 0000","8011BBA3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest World 01)","data":["800257D4 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011A816 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011A817 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011A818 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011A819 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023E9AF 0020","8023E9B5 0033"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F3688 0005","801F3848 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["8011A832 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011A833 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011A831 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A82C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A834 30FF","8111A836 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011A808 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011A80E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011A814 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011A80C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011A806 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011A810 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011A805 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011A804 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011A807 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011A80A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011A80D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011A811 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011A812 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011A809 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011A80F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011A815 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011A813 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011A80B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011A81F 0009"],"options":null},"Infinite\\Big Keys,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011A838 0007","8011A839 0007","8011A83A 0007","8011A83B 0007","8011A83C 0007","8011A83D 0007","8011A83E 0007","8011A83F 0007","8011A840 0007","8011A841 0007","8011A842 0007","8011A84F 0009","8011A850 0009","8011A851 0009","8011A852 0009","8011A853 0009","8011A859 0009","8011A85C 0009","8011A857 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011A824 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011A81E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011A81D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011A822 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011A81C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111A7C0 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011A7C9 0008","8011A7CA 0001","8011A7CC 0001","8011A7C3 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011A82A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111BB5C 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011BB61 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011BB65 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C8675 0020","811DAC50 40CB","D01C8675 0000","811DB472 000D","8011A800 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011A85F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011A861 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111A7BE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111BB58 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C8675 0020","811DB472 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C8675 0020","811DAC50 40CB"],"options":null},"Press L+R For FMV Select":{"note":"Hold down `L+R' after the Nintendo logo is spinning to see your favourite FMV","data":["D01C8675 0030","8011A793 00A0","D01C8675 0030","8011A79B ????"],"options":{"anondorf FMV":"F600","ire FMV":"F50F","lanet Making FMV":"F400","nding":"F80E","ore Triforce FMV":"F700","riforce FMV":"F200"}},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C8675 0010","8011A797 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111A79C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011A81A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011A81B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011A800 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011A7CE 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111B9B2 0000","8111B9B4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}},"Widescreen":{"note":"Originally by Darkludx","data":["81024A18 1000","81024A1A 0023","810920D8 3C07","810920DA 3FE3"],"options":null}},"D43DA81F-021E1E19-C:4A":{"Always Have Wallet Size":{"note":"","data":["8011A832 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C8675 0010","8111BAF6 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011B679 00FF","8011BAEF 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C8675 0000","8011BBA3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest 01).","data":["800257D4 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011A816 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011A817 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011A818 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011A819 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801D8D8A 0006","801F23C8 0001","801EEE48 0001"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.If you Use Black Gauntlets,They are as strong as the Golden Gauntlets. This code also gives you the Silver Scale and the Golden Scale and unlimited rupees.","data":["8011A832 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011A833 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011A831 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A82C 7777"],"options":null},"Have\\All Quest/Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A834 30FF","8111A836 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011A808 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011A80E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011A814 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011A80C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011A806 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011A810 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011A805 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011A804 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011A807 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011A80A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011A80D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011A811 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011A812 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011A809 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011A80F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011A815 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011A813 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011A80B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011A81F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011A838 0007","8011A839 0007","8011A83A 0007","8011A83B 0007","8011A83C 0007","8011A83D 0007","8011A83E 0007","8011A83F 0007","8011A840 0007","8011A841 0007","8011A842 0007","8011A84F 0009","8011A850 0009","8011A851 0009","8011A852 0009","8011A853 0009","8011A859 0009","8011A85C 0009","8011A857 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011A824 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011A81E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011A81D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011A822 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011A81C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111A7C0 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011A7C9 0008","8011A7CA 0001","8011A7CC 0001","8011A7C3 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011A82A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111BB5C 0001"],"options":null},"Infinite\\Timers\\All other Timers":{"note":"This cheat works on all Race Timers.Under Water with iron Boots etc.","data":["8011BB61 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011BB65 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C8675 0020","811DAC50 40CB","D01C8675 0000","811DB472 000D","8011A800 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011A85F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011A861 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111A7BE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111BB58 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C8675 0020","811DB472 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C8675 0020","811DAC50 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C8675 0010","8011A797 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111A79C ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011A81A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011A81B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011A800 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011A7CE 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111B9B2 0000","8111B9B4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011BB25 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"D48944D1-B0D93A0E-C:4A":{"Enable All Courses":{"note":"","data":["8112A61E FFFF"],"options":null},"Have All Characters":{"note":"","data":["50000D02 0001","810BC834 0000"],"options":null},"Max Gold Mario Badges Player 1":{"note":"","data":["800BF87B 0063"],"options":null},"No Wind":{"note":"","data":["800B45F1 0000","800B45F3 0000"],"options":null},"Unlimited\\Power Hits\\Player 1":{"note":"","data":["801B0DF8 0004"],"options":null},"Unlimited\\Power Hits\\Player 2":{"note":"","data":["801B0EB0 0004"],"options":null},"Unlimited\\Power Hits\\Player 3":{"note":"","data":["801B0F68 0004"],"options":null},"Unlimited\\Power Hits\\Player 4":{"note":"","data":["801B1020 0004"],"options":null},"Zero Strokes Taken":{"note":"","data":["801B0313 0000"],"options":null}},"D52FE29D-8EA6A759-C:00":{"Infinite 9 Credits":{"note":"","data":["80279C8F 0009"],"options":null}},"D543BCD6-2BA5E256-C:50":{"Access All Rune Stones":{"note":"","data":["50000302 0000","810AE6D6 07FF"],"options":null},"Access All Window Shards":{"note":"","data":["50000302 0000","810AE6C6 07FF"],"options":null},"Access Skill Level 99":{"note":"And Get A Familiar","data":["800FD38A FFFF"],"options":null},"Always Max Turbo Attack":{"note":"","data":["810FD4AE FF64"],"options":null},"Get All Stuff":{"note":"Opens Up New Levels Etc,","data":["50001410 0000","810C5DA6 FFFF"],"options":null},"Infinite Use Of Items":{"note":"On Pick-Ups Only","data":["50001310 0000","800C5EC6 FFFF"],"options":null},"New Player Name":{"note":"","data":["810FD36C 4249","810FD36E 5443","810FD370 4820","810FD372 3639"],"options":null},"Start With Big Familiar":{"note":"Do not use this with Small Familiar Code","data":["810FD512 0202"],"options":null},"Start With Small Familiar":{"note":"Do not use this with Big Familiar Code","data":["810FD512 0102"],"options":null}},"D571C883-822D3FCF-C:50":{"Have All\\Keys":{"note":"This will give you the Grey \u0026 Red,Green \u0026 Gold Keys","data":["800BE268 00FF","800BE26D 00FF","800BE26E 00FF"],"options":null},"Have All\\Music Notes":{"note":"This will give you all 10 Music Notes","data":["50000A01 0000","800BE3A0 0001"],"options":null},"Infinite\\Health":{"note":"","data":["800BE2A7 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["800BE293 0009"],"options":null},"Max Money":{"note":"","data":["810BE296 03E7"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D017E975 0020","810DBD88 44CB"],"options":null}},"D5898CAF-6007B65B-C:50":{"All Multiplayer Characters":{"note":"","data":["8015C8E1 000F","8015C8E2 00FF","8015C8E3 00FF"],"options":null},"C4 Detector":{"note":"Slot 3","data":["80157C98 0001"],"options":null},"C4 Explosives":{"note":"Slot 1","data":["80157C93 0001"],"options":null},"Card Key":{"note":"Slot 3","data":["80157C9A 0001"],"options":null},"Flash Light":{"note":"Slot 2","data":["80157C95 0001"],"options":null},"Infinite\\Ammo and No Reloads":{"note":"","data":["80157C9B 0078","80157C94 0078","80157C90 0063","80179F6F 001E","80157C91 0063","80179F83 0008"],"options":null},"Infinite\\Health":{"note":"","data":["80179F8B 0064"],"options":null},"Key":{"note":"Slot 2","data":["80157C99 0001"],"options":null},"Max Power Mode":{"note":"","data":["8015C8E7 0001"],"options":null},"Sudden death \u0026 trial modes unlocked":{"note":"","data":["8015C8E0 00A0"],"options":null},"Time is always 00:20:38":{"note":"","data":["8010D342 0078"],"options":null},"Walk Through Walls/Objects":{"note":"Press Z Button And Joystick Forward Dont Stand Too Close To Wall/Object","data":["D0139BC4 0020","8117964C 43C7"],"options":null},"Weapon modifier":{"note":"","data":["80179F78 00??"],"options":{"Handgun":"00","Handgun w/ silencer":"14","Rocket launcher":"03","Shotgun":"02","Submachine gun":"01"}}},"D5B2339C-CABCCAED-C:50":{"Have\\Max Bonus":{"note":"","data":["810EC2CA 270F"],"options":null},"Have\\[All Guns \u0026 Infinite Ammo]":{"note":"Press C Left to receive all Guns","data":["81102C0A 0001","50000B04 0000","810EBF66 03E8"],"options":null},"Have\\[All Keys]":{"note":"","data":["810EBF60 0001","800EBF61 0001","810EBF62 0001"],"options":null},"Have\\[High Score]":{"note":"","data":["810EBF4E FFFF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["810EC2D2 03E7"],"options":null},"Infinite\\Health":{"note":"If you fall into Water just turn off the Infinite Health \u0026 put back on when you restrat.","data":["810EBF58 42D8"],"options":null},"Level Select":{"note":"","data":["81103D82 00??"],"options":{"Boss Mission Destroy Carrier Level":"10","Mission 1 Shock Strike":"01","Mission 10 Scramble Pylon":"0A","Mission 11 Herding Research":"0B","Mission 12 The Extractor":"0C","Mission 13 Nuke Tower":"0D","Mission 14 Mucus Storage":"0E","Mission 15 Depot Attack":"0F","Mission 16 Sterilization":"11","Mission 17 Scorpion Killer":"12","Mission 18 Core Nuke":"13","Mission 19 Gate Keeper":"14","Mission 2 Radar Run":"02","Mission 3 Return Fire":"03","Mission 4 The Sonar Tower":"04","Mission 5 Big Blips":"05","Mission 6 Short Fuse":"06","Mission 7 Outpost":"07","Mission 8 Sewer":"08","Mission 9 Clean Up":"09","Queen Mission":"15"}},"Level Select Menu":{"note":"","data":["811022CA 0EF0"],"options":null}},"D614E5BF-A76DBCC1-C:50":{"Access Level Select":{"note":"On the main menu Scroll down to make CHEATS visible to go into Level Select.For in-Game Cheats,Pause gameplay.","data":["810DD47C 8001"],"options":null},"Have\\All TARZAN Letters":{"note":"","data":["800DD485 00FF"],"options":null},"Have\\Coins Collected 100%":{"note":"","data":["800DD4B7 0064"],"options":null},"Have\\Full Portrait":{"note":"","data":["800DD484 00FF"],"options":null},"Have\\Level \u0026 Tokens Completed 100%":{"note":"","data":["800DD48F 0000","800DD490 0001","800DD491 0000"],"options":null},"Infinite\\Bonus Timer":{"note":"This is For All Timers on Bonus Levels","data":["8017373E 0025"],"options":null},"Infinite\\Green Weapon":{"note":"","data":["811921D6 0063"],"options":null},"Infinite\\Health":{"note":"","data":["81192300 0120"],"options":null},"Infinite\\Lives":{"note":"","data":["800DD4B2 00??"],"options":{"3 Lives":"03","99 Lives":"63"}},"Infinite\\Purple Weapon":{"note":"","data":["811921DA 0063"],"options":null},"Infinite\\Red Weapon":{"note":"","data":["811921D8 0063"],"options":null},"Press GS For\\Sabor Attacks\\Sabor 1 Hit Kill":{"note":"","data":["8924A49E 0001"],"options":null}},"D666593B-D7A25C07-C:4A":{"Buster Parts Slot Select\\Slot 01":{"note":"","data":["8020CED3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 02":{"note":"","data":["8020CED4 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 03":{"note":"","data":["8020CED5 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 04":{"note":"","data":["8020CED6 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 05":{"note":"","data":["8020CED7 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 06":{"note":"","data":["8020CED8 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 07":{"note":"","data":["8020CED9 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 08":{"note":"","data":["8020CEDA 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 09":{"note":"","data":["8020CEDB 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 10":{"note":"","data":["8020CEDC 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 11":{"note":"","data":["8020CEDD 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 12":{"note":"","data":["8020CEDE 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 13":{"note":"","data":["8020CEDF 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 14":{"note":"","data":["8020CEE0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 15":{"note":"","data":["8020CEE1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 16":{"note":"","data":["8020CEE2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 17":{"note":"","data":["8020CEE3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 18":{"note":"","data":["8020CEE4 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 19":{"note":"","data":["8020CEE5 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 20":{"note":"","data":["8020CEE6 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 21":{"note":"","data":["8020CEE7 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 22":{"note":"","data":["8020CEE8 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 23":{"note":"","data":["8020CEE9 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 24":{"note":"","data":["8020CEEA 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 25":{"note":"","data":["8020CEEB 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 26":{"note":"","data":["8020CEEC 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 27":{"note":"","data":["8020CEED 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 28":{"note":"","data":["8020CEEE 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 29":{"note":"","data":["8020CEEF 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 30":{"note":"","data":["8020CEF0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 31":{"note":"","data":["8020CEF1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 32":{"note":"","data":["8020CEF2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Buster Parts Slot Select\\Slot 33":{"note":"","data":["8020CEF3 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 01":{"note":"","data":["8020CED0 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 02":{"note":"","data":["8020CED1 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Equipped Buster Parts\\Slot 03":{"note":"","data":["8020CED2 00??"],"options":{"Auto Battery":"16","Blast Unit":"09","Blaster Unit Omega":"01","Blaster Unit R":"13","Buster Max":"11","Buster Unit":"1F","Buster Unit Omega":"14","Gatlin Gun":"19","Helmet":"21","Laser":"03","Machine Gun":"1D","Nothing":"00","Omni-Unit":"1A","Omni-Unit Omega":"15","Power Blaster L":"1C","Power Blaster R":"1B","Power Raiser":"0E","Power Raiser Alpha":"0B","Power Raiser Omega":"06","Power Stream":"12","Range Booster":"0F","Range Booster Alpha":"0C","Range Booster Omega":"07","Rapid Fire":"20","Rapid Striker":"18","Sniper Range":"04","Sniper Scope":"17","Sniper Unit":"0A","Sniper Unit Omega":"02","Triple Access":"1E","Turbo Battery":"05","Turbo Charger":"10","Turbo Charger Alpha":"0D","Turbo Charger Omega":"08"}},"Freeze Timer at 00:00":{"note":"","data":["811C44C4 0000","811C44C6 0000"],"options":null},"Have All\\Normal Items":{"note":"","data":["8120D720 FFFF","8120D722 FFFF","8120D724 FFFF","8120D726 FFFF"],"options":null},"Have All\\Special Items":{"note":"","data":["8120D71C FFFF","8120D71E FFFF"],"options":null},"Have All\\Special Weapons":{"note":"These are Equiped With Roll","data":["8120D710 FFFF"],"options":null},"Infinite\\Ammo":{"note":"","data":["8120CF8A 0080","8120CF92 0010","8120CF9A 0708","8120CFA2 0018","8120CFAA 0010","8120CFB2 0708","8120CFBA 0020","8120CFC2 0020","8120CFCA 0020","8120CFD2 0018","8120CFDA 012C","8120CFE2 0258"],"options":null},"Infinite\\Health":{"note":"","data":["8120CAEE 0050"],"options":null},"Infinite\\Max Zenny":{"note":"","data":["811C44D4 0098","811C44D6 967F"],"options":null},"Rapid Fire":{"note":"","data":["8020CF83 0002"],"options":null}},"D692CC5E-EC58D072-C:50":{"Have All\\Cups Select":{"note":"","data":["50002C02 0000","800CCF11 00??"],"options":{"Bronze Cup":"02","Gold Cup":"00","None (Default)":"04","Silver Cup":"01"}},"Have All\\Points":{"note":"","data":["810D8FE0 03E7"],"options":null},"Have All\\RB Medals":{"note":"","data":["810D8FF0 03E7"],"options":null},"Infinite\\Credits":{"note":"","data":["800BDFA5 0005"],"options":null},"Infinite\\Timer":{"note":"","data":["810D9088 44E9"],"options":null},"Infinite\\Turbos":{"note":"To enable this just select On or Off and when you press Z you will use your Turbos accordantly. Warning you can only have Infinite if you have some turbo level to begin with","data":["D00F2D16 0020","800CD091 00??"],"options":{"Off":"00","On":"08"}},"Laps To Race":{"note":"Here you can select how many laps you prefer.to race","data":["800C8909 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","7 Laps":"07","8 Laps":"08","9 Laps":"09","Laps":"06"}},"[Cheat Menu]":{"note":"Press Pause to access cheats.","data":["800CD089 00FF","800CD08A 00FF","800CD08B 00FF"],"options":null},"[Press F9]\\Enable All Courses":{"note":"","data":["890CCEF2 0B00","890CCEF4 0B00","890CCEF6 0B00"],"options":null},"[Press F9]\\Extra Characters":{"note":"","data":["890C642F 01FF"],"options":null},"[Press F9]\\Progress 100%":{"note":"","data":["50000801 0000","880CCF00 0003","50000801 0000","880CCF01 00FF"],"options":null}},"D6FBA4A8-6326AA2C-C:4A":{"Don't Hurt Mario\\Monsters":{"note":"","data":["A031D9E7 0001"],"options":null},"Funny Mario Options\\Limbo Mario":{"note":"Only Use This Code On Its Own,Do not use with any other Funny Mario Options.","data":["8031DC0C 00C0"],"options":null},"Funny Mario Options\\Mario's Cap\\Off \u0026 in His Hand":{"note":"Here you can Choose Options with Mario with His Cap off \u0026 in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["8031D9C7 00??"],"options":{"Cap In Hand":"20","Flying Mario Cap In Hand":"28","Invisible Mario Cap In Hand":"22","Invisible Metal Mario Cap In Hand":"26","Metal Mario Cap In Hand":"24"}},"Funny Mario Options\\Mario's Cap\\On \u0026 An Extra in His Hand":{"note":"Here you can Choose Options with Mario with His Cap on \u0026 An Extra in His Hand,Do not use with any other Mario with/without Options,Use only one at a time","data":["8031D9C7 00??"],"options":{"Cap In Hand":"30","Flying Mario Cap In Hand":"38","Invisible Mario Cap In Hand":"32","Invisible Metal Mario Cap In Hand":"36","Metal Mario Cap In Hand":"34"}},"Funny Mario Options\\Ostrich Mario":{"note":"Only Use This Code On Its Own,Do not use with any other Funny Mario Options.","data":["8031DC0C 0070"],"options":null},"Funny Mario Options\\Runs Backwards":{"note":"Only Use This Code On Its Own,Do not use with any other Funny Mario Options.","data":["8031DC0E 0080"],"options":null},"Have All\\175 Stars":{"note":"I have Managed to put a Have 175 Stars Option in for you,once the Code is activated, you will see it as a new option in Save Slot A.","data":["80203F0B 00FF","50000D02 0000","81203F0C FFFF"],"options":null},"Have All\\Maxed Out Coin Records For All Levels":{"note":"","data":["80203F25 00FF","50000702 0000","81203F26 FFFF"],"options":null},"Have\\Level Select":{"note":"","data":["8030CCBC 0001"],"options":null},"Infinite\\Energy \u0026 Breath":{"note":"","data":["8031DA6E 0008"],"options":null},"Infinite\\Lives":{"note":"","data":["8031DA6D 0064"],"options":null},"Mario's Cap\\Off Options":{"note":"Here you can Choose Options with Mario without His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["8031D9C7 00??"],"options":{"Flying Mario":"08","Invisible Flying Mario":"0A","Invisible Mario":"02","Invisible Metal Flying Mario":"0F","Mario No Cap":"01","Metal Flying Mario":"0D","Metal Mario":"04"}},"Mario's Cap\\On Options":{"note":"Here you can Choose Options with Mario with His Cap on,Do not use with any other Mario with/without Options,Use only one at a time","data":["8031D9C7 00??"],"options":{"Flying Mario":"19","Invisible Mario":"12","Invisible Metal Mario":"16","Metal Mario":"15"}},"Press GS For 255 Coins":{"note":"Press GS Once on a Level To Get that amount of Coins","data":["8931DA68 00FF"],"options":null}},"D715CC70-271CF5D6-C:50":{"Difficulty Select":{"note":"","data":["80336953 00??"],"options":{"Easy":"01","Hard":"03","Medium":"02","Very Easy":"00","Very hard":"04"}},"Easy Fatality Select":{"note":"","data":["8033584F 00??"],"options":{"Always Off":"00","Always On":"01"}},"Enable Cheat Menu":{"note":"","data":["80336973 0001"],"options":null},"Fatalities Select":{"note":"","data":["8033695C 00??"],"options":{"Off":"00","On":"01"}},"Infinite Max Continues":{"note":"","data":["80336963 0005"],"options":null},"Infinite Time":{"note":"","data":["8033F6FB 0064"],"options":null},"Level Select":{"note":"","data":["80335C27 00??"],"options":{"Ahau Kin":"04","Anubis":"02","Kabuki":"06","Off":"00","Pagan":"01","Voodoo":"05","Warhead":"03"}},"Music Select":{"note":"","data":["80336954 00??"],"options":{"Off":"00","On":"01"}},"Play As":{"note":"","data":["800EAF87 00??"],"options":{"Ahau Kin":"06","Anubis":"07","CY-5":"08","Exor":"0B","Grox":"0A","Kabuki Jo":"04","Maximus":"09","Pagan":"03","Tak":"01","Vallah":"05","Voodoo":"02","Warhead":"00"}},"Press D-Pad\\Left to Play As Grox":{"note":"Press D-Pad Left at the character Select screen to Replace Maximus with Grox. Do not use with the Play As Cheat","data":["D033C263 0004","800EAF87 000A"],"options":null},"Press D-Pad\\Right to Play As Exor":{"note":"Press D-Pad Right at the character Select screen to Replace Maximus with Exor. Do not use with the Play As Cheat","data":["D033C263 0008","800EAF87 000B"],"options":null},"Skill Select\\Player 1":{"note":"Max Skill makes the player more Skillful while easier to hurt where as Weak Skill is Non Skillful yet harder to harm.","data":["80335C1D 00??"],"options":{"Max Skill":"80","Weak Skill":"00"}},"Skill Select\\Player 2":{"note":"Max Skill makes the player more Skillful while easier to hurt where as Weak Skill is Non Skillful yet harder to harm.","data":["80335C20 00??"],"options":{"Max Skill":"80","Weak Skill":"00"}}},"D741CD80-ACA9B912-C:45":{"Car Select":{"note":"","data":["D00F50C0 0000","800F50C0 00??"],"options":{"Chevrolet Camaro":"03","Chrysler Jeep Jeepster (Prototype)":"08","Default":"00","Dodge Viper":"04","Donkey In Glass Box":"0E","Ferrari F40":"07","Hotdog":"0A","Hummer H1":"05","Jeep Wrangler":"02","McLaren F1":"09","Mitsubishi Eclipse":"01","Nintendo 64 Logo":"0C","Nintendo Power Car":"0B","Porsche 911 Turbo":"06","Taco":"0D"}},"Infinite\\Max Acceleration\\Player 1":{"note":"","data":["800F50CD 0005"],"options":null},"Infinite\\Max Acceleration\\Player 2":{"note":"","data":["800F52B9 0005"],"options":null},"Infinite\\Max Acceleration\\Player 3":{"note":"","data":["800F54A5 0005"],"options":null},"Infinite\\Max Acceleration\\Player 4":{"note":"","data":["800F5691 0005"],"options":null},"Infinite\\Max Handling\\Player 1":{"note":"","data":["800F50CC 0005"],"options":null},"Infinite\\Max Handling\\Player 2":{"note":"","data":["800F52B8 0005"],"options":null},"Infinite\\Max Handling\\Player 3":{"note":"","data":["800F54A4 0005"],"options":null},"Infinite\\Max Handling\\Player 4":{"note":"","data":["800F5690 0005"],"options":null},"Infinite\\Max Money\\Player 1":{"note":"","data":["800F50C5 000F"],"options":null},"Infinite\\Max Money\\Player 2":{"note":"","data":["800F52B1 000F"],"options":null},"Infinite\\Max Money\\Player 3":{"note":"","data":["800F549D 000F"],"options":null},"Infinite\\Max Money\\Player 4":{"note":"","data":["800F5689 000F"],"options":null},"Infinite\\Max Top Speed\\Player 1":{"note":"","data":["800F50CE 0005"],"options":null},"Infinite\\Max Top Speed\\Player 2":{"note":"","data":["800F52BA 0005"],"options":null},"Infinite\\Max Top Speed\\Player 3":{"note":"","data":["800F54A6 0005"],"options":null},"Infinite\\Max Top Speed\\Player 4":{"note":"","data":["800F5692 0005"],"options":null},"Infinite\\Nitro\\Player 1":{"note":"","data":["800F50CF 0009"],"options":null},"Infinite\\Nitro\\Player 2":{"note":"","data":["800F52BB 0009"],"options":null},"Laps 2 Race":{"note":"","data":["801186A0 00??"],"options":{"1 Lap":"01","2 laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"[Press F9]\\All Cars (All Modes)":{"note":"","data":["880E990B 000E","881022F1 000E"],"options":null},"[Press F9]\\Jump To Season 6":{"note":"","data":["881022E8 0005"],"options":null}},"D7C762B6-F83D9642-C:4A":{"Have\\Max Bonus":{"note":"","data":["810EB4BA 270F"],"options":null},"Have\\[All Guns \u0026 Infinite Ammo]":{"note":"Press C Left to receive all Guns","data":["81101DFA 0001","50000B04 0000","810EB156 03E7"],"options":null},"Have\\[All Keys]":{"note":"","data":["810EB150 0101","800EB152 0001"],"options":null},"Have\\[High Score]":{"note":"","data":["810EB13E FFFF"],"options":null},"Infinite\\99 Lives":{"note":"","data":["810EB4C0 0005"],"options":null},"Infinite\\Health":{"note":"If you fall into Water just turn off the Infinite Health \u0026 put back on after.","data":["810EB148 42D8"],"options":null},"Level Select":{"note":"","data":["8110FE32 00??"],"options":{"Boss Mission Destroy Carrier Level":"10","Mission 1 Shock Strike":"01","Mission 10 Scramble Pylon":"0A","Mission 11 Herding Research":"0B","Mission 12 The Extractor":"0C","Mission 13 Nuke Tower":"0D","Mission 14 Mucus Storage":"0E","Mission 15 Depot Attack":"0F","Mission 16 Sterilization":"11","Mission 17 Scorpion Killer":"12","Mission 18 Core Nuke":"13","Mission 19 Gate Keeper":"14","Mission 2 Radar Run":"02","Mission 3 Return Fire":"03","Mission 4 The Sonar Tower":"04","Mission 5 Big Blips":"05","Mission 6 Short Fuse":"06","Mission 7 Outpost":"07","Mission 8 Sewer":"08","Mission 9 Clean Up":"09","Queen Mission":"15"}},"Level Select Menu":{"note":"","data":["8110D1EA BF60"],"options":null}},"D81963C7-4271A3AA-C:45":{"Access All Levels":{"note":"","data":["801FC5E6 00FF","801FC5E8 00FF"],"options":null},"Extended Tongue":{"note":"","data":["81323382 FFFF"],"options":null},"Have 99 Crowns":{"note":"","data":["8024337B 0063"],"options":null},"Have All Levels Completed":{"note":"","data":["801FC5EA 0019","801FC5EB 0019","801FC5EC 0015","801FC5ED 0018","801FC5EE 0017","801FC5EF 0017"],"options":null},"Infinite Health":{"note":"","data":["80164923 000A"],"options":null},"Level Select":{"note":"","data":["80297A7B 00??"],"options":{"Stage 1":"00","Stage 2":"01","Stage 3":"02","Stage 4":"03","Stage 5":"04","Stage 6":"05","Stage 7":"06"}}},"D83045C8-F29D3A36-C:50":{"Always 1st":{"note":"","data":["8013F040 0001"],"options":null},"Freeze All Timers":{"note":"","data":["8013F001 0000","8013F005 0000","8013F00A 0000"],"options":null},"Freeze Overall Timer":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8013EFF5 0001"],"options":null},"Language Select":{"note":"","data":["8008CF93 00??"],"options":{"English":"00","French":"01","German":"02"}},"Laps Of Race":{"note":"","data":["8013EFEF 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","Never Ending Laps":"06"}},"Level Select":{"note":"For this cheat to work,as soon as you put the cheat on you must turn it back off,if not you wont beable to quit a Race or even finish one.","data":["8013F2FB 00??"],"options":{"Bikini Island":"01","Canyon Rush":"00","China Town":"02","China Town Jam":"04","Neo Arena":"03","Neo Speed Way":"05"}},"Music Modifier":{"note":"","data":["800F715F 00??"],"options":{"Music Off":"00","Music On":"FF"}},"No Damage\\Player 1":{"note":"","data":["50000402 0000","8113F338 0000"],"options":null},"No Damage\\Player 2":{"note":"","data":["50000402 0000","811413D8 0000"],"options":null},"Play As\\Player 1":{"note":"","data":["8013F2F5 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Play As\\Player 2":{"note":"","data":["8013F2F6 00??"],"options":{"Avenger":"03","Black Lightning":"05","Dominator":"09","Hornet":"02","Interceptor":"01","N64 Control Pad":"00","Prowler":"07","Reaper":"08","Shredder":"04","Vengeance":"06"}},"Unlock Hidden Tracks \u0026 Cars":{"note":"All of the Freeze All Lap Timers must be on. These codes will Stop the others from racing against you in Grand Prix mode. To win a race in Grand Prix you must finish at least one lap in the qualify round, then complete all laps in race for first.","data":["8009127C 0001"],"options":null}},"D84EEA84-45B2F1B4-C:50":{"All Items":{"note":"","data":["50002402 0202","810ED130 0001","50004601 0000","800ED1B1 0003"],"options":null},"Item Modifier Codes\\Position 01":{"note":"","data":["800ED130 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 02":{"note":"","data":["800ED131 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 03":{"note":"","data":["800ED132 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 04":{"note":"","data":["800ED133 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 05":{"note":"","data":["800ED134 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 06":{"note":"","data":["800ED135 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 07":{"note":"","data":["800ED136 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 08":{"note":"","data":["800ED137 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 09":{"note":"","data":["800ED138 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 10":{"note":"","data":["800ED139 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 11":{"note":"","data":["800ED13A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 12":{"note":"","data":["800ED13B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 13":{"note":"","data":["800ED13C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 14":{"note":"","data":["800ED13D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 15":{"note":"","data":["800ED13E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 16":{"note":"","data":["800ED13F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 17":{"note":"","data":["800ED140 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 18":{"note":"","data":["800ED141 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 19":{"note":"","data":["800ED142 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 20":{"note":"","data":["800ED143 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 21":{"note":"","data":["800ED144 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 22":{"note":"","data":["800ED145 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 23":{"note":"","data":["800ED146 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 24":{"note":"","data":["800ED147 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 25":{"note":"","data":["800ED148 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 26":{"note":"","data":["800ED149 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 27":{"note":"","data":["800ED14A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 28":{"note":"","data":["800ED14B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 29":{"note":"","data":["800ED14C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 30":{"note":"","data":["800ED14D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 31":{"note":"","data":["800ED14E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 32":{"note":"","data":["800ED14F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 33":{"note":"","data":["800ED150 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 34":{"note":"","data":["800ED151 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 35":{"note":"","data":["800ED152 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 36":{"note":"","data":["800ED153 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 37":{"note":"","data":["800ED154 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 38":{"note":"","data":["800ED155 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 39":{"note":"","data":["800ED156 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 40":{"note":"","data":["800ED157 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 41":{"note":"","data":["800ED158 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 42":{"note":"","data":["800ED159 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 43":{"note":"","data":["800ED15A 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 44":{"note":"","data":["800ED15B 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 45":{"note":"","data":["800ED15C 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 46":{"note":"","data":["800ED15D 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 47":{"note":"","data":["800ED15E 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}},"Item Modifier Codes\\Position 48":{"note":"","data":["800ED15F 00??"],"options":{"Ancient Coin":"13","Apeman Sculpture":"10","Artwork":"3F","Bone":"2B","Bottle of Oil":"02","Bracelet":"41","Broken Lance":"46","Broken Sword":"43","Broken Violin":"28","Brooch":"3A","Burning Candle":"25","Cemetery Key":"1F","Chipped Violin":"26","Coin":"38","Crest Key":"01","Crow Bar":"2E","Cup":"3E","Dirty Slipper":"1A","Dragon Eye":"23","Dragon Flute":"24","Dragon Tears":"04","Dungeon Key":"29","Elf Statue":"12","Fairy Sculpture":"11","Fang":"22","Flint":"21","Flower":"20","Forest Nectar":"0E","Fragments of A Crest":"03","Fruit":"3C","Gauntlet":"3D","Golden Key":"0B","Hair of Giant":"2F","Iron Bar":"2D","Jewelry Box":"3B","Jezibel's Pendant":"1C","Lever":"18","Liquid Sunset":"0C","Map":"2A","Mug":"30","Nail":"39","Night Elixir":"0D","Orb":"0A","Ornate Key":"08","Pair of Slippers":"1B","Pick Axe":"14","Pixie Flute":"05","Plate":"45","Poisonous Herb":"40","Precious Stone":"42","Primitive Man Statue":"0F","Quill":"44","Rope":"1E","Rusty Key":"07","Slipper":"19","Starcrest":"2C","Stone of Thirst":"33","String-Less Violin":"27","The Blue Ring":"16","The Green Ring":"17","The Ring of The Dead":"15","The Ring of The Kingdom":"09","The Staff of Ages":"1D","Treasure":"06","Water":"31","Water W/Dragon Tears":"32"}}},"D85C4E29-88E276AF-C:50":{"Extra Gems":{"note":"","data":["D0165241 0000","80165241 004B"],"options":null},"Full\\Bomb Power":{"note":"","data":["8016523F 0003"],"options":null},"Full\\Fire Power":{"note":"","data":["80165240 0008"],"options":null},"Infinite\\Health":{"note":"","data":["80165244 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["80165243 0009"],"options":null},"Max\\Bombs":{"note":"","data":["8016523F 0008"],"options":null},"Max\\Explosion":{"note":"","data":["80165240 0008"],"options":null},"Max\\Score":{"note":"","data":["80177608 FFFF"],"options":null},"Press L to Levitate":{"note":"Press L to levitate \u0026 let go to come back down","data":["D005A465 0020","81154178 41CB","D005A465 0020","D0154154 0000","80154154 0040"],"options":null}},"D889EB0F-277614F0-C:45":{"Unlock All ? Blocks":{"note":"","data":["50001C04 0000","8014FECB 0001"],"options":null},"Unlock All Power Blocks":{"note":"","data":["50000604 0000","8014FE0B 0001","50000704 0000","8014FE43 0001","50000804 0000","8014FE6F 0001","50000404 0000","8014FE93 0001","50000704 0000","8014FEAF 0001","8014FE2B 0001","8014FE2F 0001","8014FE63 0001"],"options":null},"Unlock All Warps":{"note":"","data":["8014FF3B 000F"],"options":null}},"D889EB0F-277614F0-C:4A":{"Unlock All ? Blocks":{"note":"","data":["50001C04 0000","8014FECB 0001"],"options":null},"Unlock All Power Blocks":{"note":"","data":["50000604 0000","8014FE0B 0001","50000704 0000","8014FE43 0001","50000804 0000","8014FE6F 0001","50000404 0000","8014FE93 0001","50000704 0000","8014FEAF 0001","8014FE2B 0001","8014FE2F 0001","8014FE63 0001"],"options":null},"Unlock All Warps":{"note":"","data":["8014FF3B 000F"],"options":null}},"D89E0E55-B17AA99A-C:50":{"Infinite Flight Time":{"note":"","data":["801A3F1F 0064"],"options":null},"Infinite Lives":{"note":"","data":["801A3E83 0063"],"options":null},"Infinite Mega Fuel":{"note":"","data":["801A3EEB 0064"],"options":null},"Infinite Shots":{"note":"","data":["801A3EB7 0064"],"options":null}},"D9EDD54D-6BB8E274-C:50":{"The Away Team Has Max Score":{"note":"","data":["81080082 FFFF"],"options":null},"The Home Team Has Max Score":{"note":"","data":["8107972A FFFF"],"options":null}},"D9F75C12-A8859B59-C:45":{"Infinite Time":{"note":"","data":["8114C298 000A"],"options":null},"Pick Your Kombat Zone":{"note":"","data":["81257544 00??"],"options":{"Armory":"14","Bell Tower":"07","Bridge":"05","Courtyard":"02","Dead Pool":"11","Graveyard":"09","Hidden Portal":"10","Jade's Desert":"0E","Kahn's Kave":"0D","Kahn's Tower":"04","Kombat Temple":"08","Lair":"18","Living Forest":"15","Lost Bridge":"0F","Pit":"03","Pit 2":"1A","Pit 3":"0A","Pit Bottom":"1C","Portal":"17","River Kombat":"0B","Rooftop":"13","Scorpion's Lair":"0C","Soul Chamber":"06","Star Bridge":"1B","Street":"01","Subway":"00","Tomb":"19","Tower":"16","Wasteland":"12"}},"Player 1\\Aggressor Energy Bar":{"note":"","data":["801698E1 0030"],"options":null},"Player 1\\Energy is":{"note":"","data":["8016984D 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 1\\Infinite Run":{"note":"","data":["81169854 0030"],"options":null},"Player 1\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B5225 0020","81169874 5100","D02B5225 0020","8116987C 5100"],"options":null},"Player 1\\Play As":{"note":"","data":["8016983D 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Player 2\\Aggressor Energy Bar":{"note":"","data":["801698E3 0030"],"options":null},"Player 2\\Energy is":{"note":"","data":["80169B21 00??"],"options":{"Unlimited":"A6","Zero":"00"}},"Player 2\\Infinite Run":{"note":"","data":["81169B28 0030"],"options":null},"Player 2\\Max Aggressor":{"note":"Press L Button To Activate","data":["D02B522D 0020","81169876 5100","D02B522D 0020","8116987E 5100"],"options":null},"Player 2\\Play As":{"note":"","data":["80169AE1 00??"],"options":{"Baraka":"19","Cage":"04","Cyrax":"08","Ermac":"14","Human Smoke":"16","Jade":"10","Jax":"02","Kabal":"0A","Kano":"00","Khameleon":"1B","Kitana":"0F","Kung Lao":"09","Liu Kang":"0D","Mileena":"11","Nightwolf":"03","Noob Saibot":"17","Rain":"1A","Rayden":"18","Reptile":"13","Scorpion":"12","Sektor":"07","Shang Tsung":"0C","Sheeva":"0B","Sindel":"06","Smoke":"0E","Sonya":"01","Stryker":"05","Sub-Zero":"15"}},"Unlock Secret":{"note":"","data":["80169EE1 0004"],"options":null}},"DBF4EA9D-333E82C0-C:45":{"1 Lap Race":{"note":"","data":["D0122288 0000","80122288 0009"],"options":null},"999 Trick Game Pts":{"note":"","data":["81122040 03E7"],"options":null},"Access Gold Medals":{"note":"","data":["50000602 0000","810ECA22 0101"],"options":null},"Enable Sinobin":{"note":"","data":["8110AE5E 0100"],"options":null},"Infinite\\Cash":{"note":"","data":["801222EA C350"],"options":null},"Infinite\\Lucky Dip":{"note":"\"Lucky Dip is Infinite Usage Of What Ever You Get From Each Red Box\"","data":["80122294 0003"],"options":null},"Infinite\\Tools Options":{"note":"","data":["80122295 00??"],"options":{"Board":"06","Fan":"01","Ghost":"02","Mouse":"05","Pan":"03","Rock":"04"}},"No Frameskip":{"note":"Multiplayer is now smoother at 30fps.","data":["800DEED4 0000"],"options":null},"No Frameskip (ASM)":{"note":"","data":["80099324 0024","81099326 0000"],"options":null}},"DC36626A-3F3770CB-C:50":{"Cheat Menu\\All Weapons Enabled":{"note":"","data":["801CCC59 0001","801CCCC5 0001","801CDD25 0001","801CDE21 0001","801CDEB5 0001","801CDEB7 0001","801CDEE9 0001","801CE819 0001","801CE821 0001","801CE88D 0001","801CF9D5 0001"],"options":null},"Cheat Menu\\Cheat Menu Enabled":{"note":"","data":["800CF7D8 0001"],"options":null},"Cheat Menu\\Have All Game Type \u0026 Other":{"note":"","data":["810E1A3E 0FFF"],"options":null},"Cheat Menu\\Have All Weapons":{"note":"","data":["811CE810 FFFF"],"options":null},"Enable Debug Menu":{"note":"","data":["800DFCD0 0001"],"options":null},"Infinite Ammo (All Guns)":{"note":"","data":["810A21B4 A65B"],"options":null},"Invincibility":{"note":"","data":["800DF203 0001"],"options":null},"Time Always 00:00":{"note":"","data":["801A1D06 0000"],"options":null}},"DCB6EAFA-C6BBCFA3-C:4A":{"Always Berserk Mode":{"note":"","data":["801ACA6F 00FF"],"options":null},"Always Drop\\Player 1":{"note":"","data":["801ACA7B 00??"],"options":{"Bar":"00","Big Water":"06","Bomb":"0A","Corner":"02","Down Bar":"05","Down Square":"04","Fireball":"0B","Medium Water":"07","Small Water":"08","Smallest Water":"09","Square":"03","T":"01"}},"Always Drop\\Player 2":{"note":"","data":["801DD1FB 00??"],"options":{"Bar":"00","Big Water":"06","Bomb":"0A","Corner":"02","Down Bar":"05","Down Square":"04","Fireball":"0B","Medium Water":"07","Small Water":"08","Smallest Water":"09","Square":"03","T":"01"}},"Always Empty Drain":{"note":"","data":["801ACA51 0000","811ACA52 0000","811ACA54 0000"],"options":null},"Infinite Ducks":{"note":"","data":["801ACA0B 0009"],"options":null},"Infinite Lakes":{"note":"","data":["811AC9FE 0009"],"options":null},"Mega Score":{"note":"","data":["801ACA18 00FF","801DBDC4 00FF"],"options":null},"Practice Lessons Open":{"note":"","data":["810C3AEA 0008"],"options":null},"Stop Level Timer":{"note":"","data":["801ACA72 00FF"],"options":null}},"DCBC50D1-09FD1AA3-C:45":{"Debug Mode":{"note":"Press A or Start to enable the currently selected option. Pressing Start when in control of the player will also open the watch menu and close the debug menu.","data":["80036FCB 0001"],"options":null},"Everything Unlocked\\Save File 1":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","810699EE FFFF"],"options":null},"Everything Unlocked\\Save File 2":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8106992E FFFF"],"options":null},"Everything Unlocked\\Save File 3":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","81069A4E FFFF"],"options":null},"Everything Unlocked\\Save File 4":{"note":"This Unlocks All Levels, Stages, Characters In Multi-Player and Cheat Menu Items (Enable Invincible on Cheats Menu for Infinite Health)","data":["50002902 0000","8106998E FFFF"],"options":null},"Have All\\64 Characters In Multi Player":{"note":"Enables all Characters selectable to play as in Multi-Player","data":["8002B197 0040"],"options":null},"Have All\\Objectives Complete":{"note":"","data":["80036FD3 0001"],"options":null},"Have\\Infinite 00:00 Time (All Levels)":{"note":"","data":["8004837E 0000","8004838E 0000","80048396 0000","80079A22 0000","80079F26 0000"],"options":null},"Infinite\\Ammo (All Levels)":{"note":"","data":["80079E3B 0001"],"options":null},"Infinite\\Health (All levels)":{"note":"","data":["8100C0F4 0801","8100C0F6 8090","8100C0F8 AFA4","8100C0FA 0000","81060240 0004","81060242 7600","81060244 3C02","81060246 8008","81060248 8C42","8106024A 9EE0","8106024C 3401","8106024E 3F80","81060250 A441","81060252 00DC","81060254 0800","81060256 303F"],"options":null},"Mod Section\\Custom Weapon Grouping":{"note":"golden gun fun should replace slappers only! appears in the multi weapons. No weapons or ammunition crates appear inside the level. All players must rely on is their unarmed \"slapping\" skills.","data":["80048673 0013","81048678 3FC0","80048677 00D0","8004867F 000D","80048683 000A","8004868B 0013","81048690 3FC0","8004868F 00D0","80048697 000D","8004869B 000A","800486A3 0019","810486A8 3FC0","800486A7 00D3","800486AF 0006","800486B3 0003","800486BB 0019","810486C0 3FC0","800486BF 00D3","800486C7 0006","800486CB 0003","800486D3 0013","810486D8 3FC0","800486D7 00D0","800486DF 000D","800486E3 000A","800486EB 0013","810486F0 3FC0","800486EF 00D0","800486F7 000D","800486FB 000A","80048703 0019","81048708 3FC0","80048707 00D3","8004870F 0006","80048713 0003","8004871B 0019","81048720 3FC0","8004871F 00D3","80048727 0006","8004872B 0003","812AEA50 476F","812AEA52 6C64","812AEA54 656E","812AEA56 2047","812AEA58 756E","812AEA5A 2046","812AEA5C 756E","802AEA5E 0000"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 1\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811E6554 45E4","811E6558 43D5","811E655C C5A7","811E657C 801C","811E657E 6774","811E5164 45E4","811E5168 C383","811E516C 4492","811E518C 801C","811E518E D574","811E78C0 45AD","811E78C4 C383","811E78C8 4440","811E78E8 801C","811E78EA E464","811E4D18 45D0","811E4D1C 4307","811E4D20 C4FB","811E4D40 801C","811E4D42 75EC","811E6738 45CD","811E673C C383","811E6740 43F4","811E6760 801C","811E6762 A0DC","811E5450 45C2","811E5454 4356","811E5458 C598","811E5478 801C","811E547A 6A74","811E5240 4608","811E5244 4307","811E5248 43DC","811E5268 801C","811E526A 962C","811E691C 4606","811E6920 4321","811E6924 449D","811E6944 801C","811E6946 CBEC","801ED447 008A","801ED4DB 008B","801ED56F 008C","801ED603 008D","801ED697 008E","801ED72B 008F","801ED7BF 007D","801ED853 007E","801ED443 002A","801ED4D7 002A","801ED56B 002A","801ED5FF 002A","801ED693 002A","801ED727 002A","801ED7BB 002A","801ED84F 002A","801ED449 0000","801ED4DD 0000","801ED571 0000","801ED605 0000","801ED699 0000","801ED72D 0000","801ED7C1 0000","801ED855 0000","801ED44D 0000","801ED4E1 0000","801ED575 0000","801ED609 0000","801ED69D 0000","801ED731 0000","801ED7C5 0000","801ED859 0000","801EB743 002A","801EB745 0068","811EB746 277F","811EB748 1000","811EB74A 0262","811EB7C2 0190","801EB7C5 0000","811EB7C6 0258"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 2\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["811EB7C8 0000","811EB7CC FFFF","811EB7CE FFFF","811EB7D2 0000","801EB7D5 0000","801EB7DB 0000","811EB7E2 0000","801EB7E7 0000","801EB843 002A","801EB845 0068","811EB846 2780","811EB848 1000","811EB84A 0262","811EB8C2 0190","801EB8C5 0000","811EB8C6 0258","811EB8C8 0000","811EB8CC FFFF","811EB8CE FFFF","811EB8D2 0000","801EB8D5 0000","801EB8DB 0000","811EB8E2 0000","801EB8E7 0000","801EB943 002A","801EB945 0068","811EB946 2791","811EB948 1000","811EB94A 0262","811EB9C2 0190","801EB9C5 0000","811EB9C6 0258","811EB9C8 0000","811EB9CC FFFF","811EB9CE FFFF","811EB9D2 0000","801EB9D5 0000","801EB9DB 0000","811EB9E2 0000","801EB9E7 0000","801EBA43 002A","801EBA45 0068","811EBA46 2792","811EBA48 1000","811EBA4A 0262","811EBAC2 0190","801EBAC5 0000","811EBAC6 0258","811EBAC8 0000","811EBACC FFFF","811EBACE FFFF","811EBAD2 0000","801EBAD5 0000","801EBADB 0000","811EBAE2 0000","801EBAE7 0000","801EBB45 00A0","801EBC45 00A0","801EBD45 00A0","801EBE45 00A0","801EBB47 0075","801EBC47 0076","801EBD47 0077","801EBE47 0078","801EBBE7 0001","801EBCE7 0001","801EBDE7 0001","801EBEE7 0001","801EC247 0071","801ECD47 0072","801ECE47 0074","801ECF47 006C","801ED047 0079","801ED147 0083","D01EBFC5 005A","801EBFC5 0000","D11EBFC6 0000","811EBFC6 F333","D11EBFC8 03E8","811EBFC8 0000"],"options":null},"Mod Section\\Facility Back Zone In Multiplayer\\Part 3\\2 players":{"note":"All parts must be on for this code to work.this cheat allows you to play the Facility Back Zone In Multiplayer","data":["D11EBFCA 0000","811EBFCA F0C4","D11EBFCE 4CCC","811EBFCE 000A","D11EBFD2 4CCC","811EBFD2 000A","D11EBFD4 0003","811EBFD4 0000","D11EBFD6 0000","811EBFD6 02C4","801EBFD9 0004","801EBFDB 0000","811EBFE2 0384","801EBFE7 0004","801EBF45 009E","801EBF47 0084","801EBF48 0010","801EC2D9 0000","801EC447 0085","801EC547 0086","811EA6B6 2743","811EA73E 0114","811EA7F2 0115","811EA8A6 00A3","811EA92E 009D","811EA9E2 00A4","811EAA96 00DA","811EAB1E 00DB","811EABD2 00DF","811EAC86 0130","811EAD0E 008D","811EADC2 012E","811EAE76 0111","811EAEFE 2740","811EAFB2 2741","811EB066 00A0","811EB0EE 009E","811EB1A2 009F","811EB256 274F","811EB2DE 2750","811EB392 0117","811EB446 0131","811EB4CE 008E","811EB582 0132","811EB636 00A1","811EB6BE 0119","811EA62E 00FA","801ED3DF 0000","801ED2DF 0001","D0024337 0007","80024337 001F"],"options":null},"Mod Section\\Gain Access To\\Aztec Level Without Beating Secret Agent Or 00 Agent":{"note":"","data":["8002A8FB 001A"],"options":null},"Mod Section\\Gain Access To\\Egyptian Level Without Beating Secret Agent Or 00 Agent":{"note":"","data":["8002A8FB 001C"],"options":null},"Mod Section\\Have Cradle in multiplayer":{"note":"Puts the cradle graphic in the levels screen where the facility normally is in the multiplayer levels screen.Warning it doesn't allow you to enter the multiplayer levels screen,it should automatically Have\\selected cradle, which cannot be changed from the multiplayer menus","data":["8002B11D 0092","8002B11F 0093","8002B127 0029","8002B123 0008","802ADC8D 0052","802ADC8E 0041","802ADC8F 0044","802ADC90 004C","802ADC91 0045"],"options":null},"Mod Section\\Replace Cradle with Citadell hidden level":{"note":"","data":["8002A8F7 0029","8104468A 8970","81044690 3F44","81044692 BDEA","81044694 3F80","81044696 0000","81044698 4219","8104469A D89D","80069F80 00C4"],"options":null},"Mod Section\\Secret Island on Dam Level":{"note":"For the above code to work,Get to the 2nd guard tower \u0026 go down the ladder on the left hand side \u0026 to the end of the Dock, Press L \u0026 GS and you will be transfered in the water. Just keep walking straight \u0026 you will get to it. Obviously you can't actually climb ladders or anything, you will simply walkthrough anything on that Part, if you want to walk back to the Dock, when you come near it click the cheat back on \u0026 keep pressing L \u0026 GS untill you are back on it.","data":["D0064F31 0020","800D33ED 0050","880D33ED 0000"],"options":null},"Mod Section\\Walk through doors, objects":{"note":"","data":["800364CB 00??"],"options":{"Off":"01","On":"00"}},"Mod Section\\Weak Enemies":{"note":"","data":["8002CE48 0048"],"options":null}},"DCCF2134-9DD63578-C:50":{"Infinite Character Creation Points":{"note":"","data":["8017BB17 000A"],"options":null},"Left vs Right Side":{"note":"","data":["8017BB16 0005"],"options":null},"Max Score In Mini Games":{"note":"","data":["81116230 05F5","81116232 E0FF"],"options":null},"Maximum\\Back,Front,Left \u0026 Right Move":{"note":"","data":["8117BB14 000A"],"options":null},"Maximum\\Serve Smash":{"note":"","data":["8117BB0E 0A0A"],"options":null},"Maximum\\Stroke Spin":{"note":"","data":["8117BB12 0A0A"],"options":null},"Maximum\\Volley Lob":{"note":"","data":["8117BB10 0A0A"],"options":null},"Practice\\Balls Always Zero":{"note":"","data":["8011684F 0000"],"options":null},"Practice\\Time Always Zero":{"note":"","data":["8111684A 0000"],"options":null},"Scoreboard\\Max games bottom":{"note":"","data":["8011698F 0009"],"options":null},"Scoreboard\\Max games top":{"note":"","data":["8011698B 0009"],"options":null},"Scoreboard\\Max sets bottom":{"note":"","data":["80116987 0009"],"options":null},"Scoreboard\\Max sets top":{"note":"","data":["80116983 0009"],"options":null}},"DD26FDA1-CB4A6BE3-C:55":{"Bonus Stage Character Modifier (Training Mode)":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["8018F913 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Give Kirby A Wierd Blow-Up":{"note":"","data":["8025E898 000A"],"options":null},"Have All Characters":{"note":"","data":["810A5078 0FF0"],"options":null},"Jump off to win":{"note":"","data":["810A5282 0000"],"options":null},"P1 Press Down On D-Pad To Make Items Appear In Random Spots":{"note":"","data":["D109F6E4 0400","8118D7E2 0001"],"options":null},"Story Mode\\Always Get Pacifist (60,000 Points)":{"note":"","data":["810A52AE 0000"],"options":null},"Story Mode\\Infinite Time":{"note":"","data":["810A526E 43CB"],"options":null},"Story Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code could also result freezing at the end of the Level.","data":["800A527B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 1\\Infinite Lives":{"note":"","data":["800A5283 0004"],"options":null},"Story Mode\\Player 1\\Kirby B Button Move\\Congo Jungle":{"note":"","data":["8027120F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Fighting Polygon Team":{"note":"","data":["80262E5F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["8026924F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Kirby's Dreamland":{"note":"","data":["8026E27F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Master Hand Stage":{"note":"","data":["8027238F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Metal Mario Stage":{"note":"","data":["80263CD7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Peach's Castle":{"note":"","data":["802644DF 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Planet Zebes":{"note":"","data":["802706E7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Saffron City":{"note":"","data":["802741D7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["80271837 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["8026958F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"Story Mode\\Player 1\\Low % Health":{"note":"","data":["810A52C6 0000"],"options":null},"Story Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A52EF 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 2\\Infinite Lives":{"note":"","data":["800A52F7 0004"],"options":null},"Story Mode\\Player 2\\Low % Health":{"note":"","data":["810A533A 0000"],"options":null},"Story Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A5363 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 3\\Infinite Lives":{"note":"","data":["800A536B 0004"],"options":null},"Story Mode\\Player 3\\Low % Health":{"note":"","data":["810A53AE 0000"],"options":null},"Story Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A53D7 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"Story Mode\\Player 4\\Infinite Lives":{"note":"","data":["800A53DF 0004"],"options":null},"Story Mode\\Player 4\\Low % Health":{"note":"","data":["810A5422 0000"],"options":null},"Story Mode\\Skip Straight To Master Hand":{"note":"","data":["800A5227 000D"],"options":null},"VS. Mode\\Have Mushroom Kindom":{"note":"","data":["800A5077 00FF"],"options":null},"VS. Mode\\Infinite Time":{"note":"","data":["810A545E 43CB"],"options":null},"VS. Mode\\Player 1\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A546B 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Hyrule Castle":{"note":"","data":["8026412F 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Sector Z":{"note":"","data":["8026C6C7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Kirby B Button Move\\Yoshi's Island":{"note":"","data":["8026E9F7 00??"],"options":{"D.K. Wind-up Punch":"02","Jigglypuff Puff Punch":"0A"}},"VS. Mode\\Player 1\\Low % Health":{"note":"","data":["810A54B6 0000"],"options":null},"VS. Mode\\Player 2\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A54DF 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 2\\Low % Health":{"note":"","data":["810A552A 0000"],"options":null},"VS. Mode\\Player 3\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A5553 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 3\\Low % Health":{"note":"","data":["810A559E 0000"],"options":null},"VS. Mode\\Player 4\\Character Modifier":{"note":"Only put this on after you have alreay Chose your Character on the Main Menu,\u0026 Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.","data":["800A55C7 00??"],"options":{"C. Falcon":"07","DK":"02","Fox":"01","Giant Donkey Kong":"1A","Jigglypuff":"0A","Kirby":"08","Link":"05","Luigi":"04","Mario":"00","Master Hand":"0C","Metal Mario":"0D","Ness":"0B","Pikachu":"09","Polygon DK":"10","Polygon Kirby":"18","Polygon Link":"13","Polygon Mario":"0E","Polygon Samus":"15","Polygon Yoshi":"14","Samus":"03","Yoshi":"06"}},"VS. Mode\\Player 4\\Low % Health":{"note":"","data":["810A5612 0000"],"options":null}},"DD318CE2-B73798BA-C:45":{"Always On First Shot":{"note":"","data":["811DA47A 0001"],"options":null},"Club Type\\Irons Mods":{"note":"","data":["8012A473 00??"],"options":{"Cavity":"00","Conventional":"01"}},"Club Type\\Sand Wedge Mods":{"note":"","data":["8012A474 00??"],"options":{"58 Degrees":"00","60 Degrees":"01","62 Degrees":"02"}},"Club Type\\Woods Mods":{"note":"","data":["8012A472 00??"],"options":{"Metal Wood":"01","Persimmon":"02","Titan":"00"}},"Max Power":{"note":"","data":["8012A431 FFFF"],"options":null},"Max Putt":{"note":"","data":["8012A435 FFFF"],"options":null},"Max Recover":{"note":"","data":["8012A437 FFFF"],"options":null},"Max Technique":{"note":"","data":["8012A433 FFFF"],"options":null},"Select Club":{"note":"","data":["801DA496 00??"],"options":{"1I":"05","1W":"00","2I":"06","2W":"01","3I":"07","3W":"02","4I":"08","4W":"03","5I":"09","5W":"04","6I":"0A","7I":"0B","8I":"0C","9I":"0D","AW":"0F","PW":"0E","Putter":"11","SW":"10"}}},"DDD93C85-DAE381E8-C:45":{"Infinite\\Lives":{"note":"","data":["800A3648 0009"],"options":null},"Infinite\\Specials":{"note":"","data":["800A3649 0003"],"options":null},"Max\\Combo":{"note":"","data":["810A3644 7FFF"],"options":null},"Max\\Lower Level":{"note":"","data":["800A3658 0003"],"options":null},"Max\\Score":{"note":"","data":["800A3628 0063","800A3629 0063"],"options":null},"Max\\Upper Level":{"note":"","data":["800A3659 0063"],"options":null},"Play As":{"note":"","data":["800A364C 00??"],"options":{"Character 1":"00","Character 2":"01","Character 3":"02"}},"Status Modifier":{"note":"","data":["800A364A 00??"],"options":{"High":"01","Low":"03","Mid":"02"}},"Widescreen":{"note":"Clearing Issues Near Edges of Screen","data":["810754EC 3FE3"],"options":null}},"DDF460CC-3CA634C0-C:45":{"All levels Complete":{"note":"","data":["50004002 0000","810A2218 0001"],"options":null},"Carrington Institute\\Have 255 targets destroyed":{"note":"","data":["810B1E34 00FF"],"options":null},"Carrington Institute\\Have 999 points in Firing Range":{"note":"","data":["810B1E32 03E7"],"options":null},"Carrington Institute\\Have Infinite time in Firing Range":{"note":"","data":["810B1E2E 004D"],"options":null},"Have All\\Weapons\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80207F10 0007","801EEF10 0007","801D5F10 0007"],"options":null},"Have All\\Weapons\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80209B80 0007","801F0B80 0007","801D7B80 0007"],"options":null},"Infinite Ammo\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8020769F 00FF","801EE69F 00FF","801D569F 00FF","80206EFB 00FF","801EDEFB 00FF","801D4EFB 00FF"],"options":null},"Infinite Ammo\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8020930F 00FF","801F030F 00FF","801D730F 00FF","80208B6B 00FF","801EFB6B 00FF","801D6B6B 00FF"],"options":null},"Infinite Health\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8120677C 3F80","811ED77C 3F80","811D477C 3F80"],"options":null},"Infinite Health\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["812083EC 3F80","811EF3EC 3F80","811D63EC 3F80"],"options":null},"Infinite Shield\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81206790 3F80","811E4950 3F80","811CB950 3F80"],"options":null},"Infinite Shield\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["811FF5C0 3F80","811E65C0 3F80","811CD5C0 3F80"],"options":null},"Multi\\Press B To Levitate\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7E4 0040","811BB720 40F2","D009C7E4 0040","801BB6D3 0000"],"options":null},"Multi\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7EC 0040","811BD390 40F2","D009C7EC 0040","801BD343 0000"],"options":null},"Multi\\Press B To Levitate\\Player 3":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7F4 0040","811BF000 40F2","D009C7F4 0040","801BEFB3 0000"],"options":null},"Multi\\Press B To Levitate\\Player 4":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7FC 0040","811C0C70 40F2","D009C7FC 0040","801C0C23 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7E4 0040","81206720 40F2","D009C7E4 0040","802066D3 0000","D009C7E4 0040","811ED720 40F2","D009C7E4 0040","801ED6D3 0000","D009C7E4 0040","811D4720 40F2","D009C7E4 0040","801D46D3 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D009C7EC 0040","81208390 40F2","D009C7EC 0040","80208343 0000","D009C7EC 0040","811EF390 40F2","D009C7EC 0040","801EF343 0000","D009C7EC 0040","811D6390 40F2","D009C7EC 0040","801D6343 0000"],"options":null},"The Ultimate All In One":{"note":"The Ultimate All In One activate's solo missions, give all medals on solo missions, activate cheats, activate cinemas, and who knows what else. I just don't have the time to identify these codes. I know that some of this is creditted to Zap2. I don't have the time to cut those codes out.","data":["800884F3 0001","8008850E 0001","80088575 0001","50000302 0000","80088572 0001","8008858C 0001","8008858D 0001","800885A6 0001","800885A9 0001","800885C0 0001","800885DA 0001","800885DC 0001","800885F4 0001","800885F5 0001","8008860E 0001","80088610 0001","80088612 0001","80088628 0001","50000501 0000","80088642 0001","50000501 0000","8008865C 0001","50000501 0000","80088676 0001","50000501 0000","80088690 0001","50000501 0000","800886AA 0001","50000501 0000","800886C4 0001","50000501 0000","800886DE 0001","50000501 0000","800886F8 0001","50000501 0000","80088712 0001","50000501 0000","8008872C 0001","50000501 0000","80088746 0001","50000501 0000","80088760 0001","50000501 0000","8008877A 0001","50000501 0000","80088794 0001","50000501 0000","800887AE 0001","800A2219 0001","50003E02 0000","800A221D 0001","50000B01 0000","800ACCC9 0001","50000901 0000","800ACCD5 0001","50000401 0000","800ACCDF 0001","50000301 0000","800ACCE4 0001","800ACCE8 0001","800ACCE9 0001","800ACCEB 0001","800ACCEC 0001","50000901 0000","800ACCEE 0001","800ACCF8 0001","50002101 0000","800ACCFA 0001","800ACD12 0001","800ACD15 0001","800ACD16 0001","800ACDEA 0001","800ACD3A 0001"],"options":null}},"DEB78BBA-52F6BD9D-C:45":{"Away Team\\Scores 0":{"note":"","data":["8005FA47 0000"],"options":null},"Away Team\\Scores 50":{"note":"","data":["8005FA47 0032"],"options":null},"Enable\\All Stadiums":{"note":"","data":["50000801 0000","8004A7F0 00FF"],"options":null},"Enable\\All Teams":{"note":"","data":["50000E01 0000","8004ADD0 00FF"],"options":null},"Home Team\\Scores 0":{"note":"","data":["8005CF87 0000"],"options":null},"Home Team\\Scores 50":{"note":"","data":["8005CF87 0032"],"options":null},"Infinite\\Time Outs Away Team":{"note":"","data":["8005FA49 0003"],"options":null},"Infinite\\Time Outs Home Team":{"note":"","data":["8005CF89 0003"],"options":null},"No Time-Outs\\Away Team":{"note":"","data":["8005FA49 0000"],"options":null},"No Time-Outs\\Home Team":{"note":"","data":["8005CF89 0000"],"options":null},"Press L For First Down\\Player 1":{"note":"","data":["D0066F2D 0020","810612E0 0001"],"options":null},"Press L For First Down\\Player 2":{"note":"","data":["D0066F35 0020","810612E0 0001"],"options":null},"Press L For First Down\\Player 3":{"note":"","data":["D0066F3D 0020","810612E0 0001"],"options":null},"Press L For First Down\\Player 4":{"note":"","data":["D0066F45 0020","810612E0 0001"],"options":null},"Press L For More Time To Choose Play\\Player 1":{"note":"","data":["D0066F2D 0020","80061245 0028"],"options":null},"Press L For More Time To Choose Play\\Player 2":{"note":"","data":["D0066F35 0020","80061245 0028"],"options":null},"Press L For More Time To Choose Play\\Player 3":{"note":"","data":["D0066F3D 0020","80061245 0028"],"options":null},"Press L For More Time To Choose Play\\Player 4":{"note":"","data":["D0066F45 0020","80061245 0028"],"options":null},"Press R For Fourth Down\\Player 1":{"note":"","data":["D0066F2D 0010","810612E0 0004"],"options":null},"Press R For Fourth Down\\Player 2":{"note":"","data":["D0066F35 0010","810612E0 0004"],"options":null},"Press R For Fourth Down\\Player 3":{"note":"","data":["D0066F3D 0010","810612E0 0004"],"options":null},"Press R For Fourth Down\\Player 4":{"note":"","data":["D0066F45 0010","810612E0 0004"],"options":null}},"DED0DD9A-E78225A7-C:50":{"Always 1st \u0026 final time 00:00.00":{"note":"All Levels","data":["50000301 0000","801CE959 0000"],"options":null},"Difficulty Select":{"note":"","data":["8007C1C0 00??"],"options":{"Amateur":"00","Intermediate":"01","Mirror Mode":"03","Professional":"02"}},"Frantic Finale\\Colorado\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801BDB3B 00FF"],"options":null},"Frantic Finale\\Colorado\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7432 0063"],"options":null},"Frantic Finale\\Hawaii\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B75BB 00FF"],"options":null},"Frantic Finale\\Hawaii\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7B12 0063"],"options":null},"Frantic Finale\\Oregon\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801BABEB 00FF"],"options":null},"Frantic Finale\\Oregon\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B44E2 0063"],"options":null},"Frantic Finale\\Texas\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801BB38B 00FF"],"options":null},"Frantic Finale\\Texas\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B4C82 0063"],"options":null},"Freewayphobia\\Chicago\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B758B 00FF"],"options":null},"Freewayphobia\\Chicago\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7AE2 0063"],"options":null},"Freewayphobia\\Dakota\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B159B 00FF"],"options":null},"Freewayphobia\\Dakota\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B2CB2 0063"],"options":null},"Freewayphobia\\New York\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B4A5B 00FF"],"options":null},"Freewayphobia\\New York\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B4FB2 0063"],"options":null},"Freewayphobia\\Seattle\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B417B 00FF"],"options":null},"Freewayphobia\\Seattle\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B5892 0063"],"options":null},"Level Select":{"note":"","data":["801AD159 00??"],"options":{"Contest":"07","Frantic Finale":"04","Freewayphobia":"02","Motor Way Mania":"01","Options":"08","Practice":"06","Time Trial":"05","Traffic Troubles":"00","Vitory Vehicles":"03"}},"Motor Way Mania\\Alaska\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B280B 00FF"],"options":null},"Motor Way Mania\\Alaska\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B3F22 0063"],"options":null},"Motor Way Mania\\Las Vegas\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B6E9B 00FF"],"options":null},"Motor Way Mania\\Las Vegas\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B85B2 0063"],"options":null},"Motor Way Mania\\Los Angeles\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B207B 00FF"],"options":null},"Motor Way Mania\\Los Angeles\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B3792 0063"],"options":null},"Motor Way Mania\\Philadelphia\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B7DEB 00FF"],"options":null},"Motor Way Mania\\Philadelphia\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B9502 0063"],"options":null},"Play As":{"note":"","data":["800D33D1 00??"],"options":{"Daisy Duck":"01","Dewey":"07","Donald Duck":"05","Goofy":"02","Huey":"06","Louie":"08","Lugwig Von Drake":"09","Mickey Mouse":"00","Minnie Mouse":"04","Pete":"03"}},"Re-name Characters\\Daisy\\Letter 1":{"note":"","data":["801E39CE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 2":{"note":"","data":["801E39CF 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 3":{"note":"","data":["801E39D0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 4":{"note":"","data":["801E39D1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 5":{"note":"","data":["801E39D2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 1":{"note":"","data":["801E39E4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 2":{"note":"","data":["801E39E5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 3":{"note":"","data":["801E39E6 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 4":{"note":"","data":["801E39E7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 5":{"note":"","data":["801E39E8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 1":{"note":"","data":["801E39C7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 2":{"note":"","data":["801E39C8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 3":{"note":"","data":["801E39C9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 4":{"note":"","data":["801E39CA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 5":{"note":"","data":["801E39CB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 6":{"note":"","data":["801E39CC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 1":{"note":"","data":["801E39D4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 2":{"note":"","data":["801E39D5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 3":{"note":"","data":["801E39D6 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 4":{"note":"","data":["801E39D7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 5":{"note":"","data":["801E39D8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 1":{"note":"","data":["801E39DF 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 2":{"note":"","data":["801E39E0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 3":{"note":"","data":["801E39E1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 4":{"note":"","data":["801E39E2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 1":{"note":"","data":["801E39EA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 2":{"note":"","data":["801E39EB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 3":{"note":"","data":["801E39EC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 4":{"note":"","data":["801E39ED 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 5":{"note":"","data":["801E39EE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 1":{"note":"","data":["801E39F0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 2":{"note":"","data":["801E39F1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 3":{"note":"","data":["801E39F2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 4":{"note":"","data":["801E39F3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 5":{"note":"","data":["801E39F4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 6":{"note":"","data":["801E39F5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 1":{"note":"","data":["801E39B9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 2":{"note":"","data":["801E39BA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 3":{"note":"","data":["801E39BB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 4":{"note":"","data":["801E39BC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 5":{"note":"","data":["801E39BD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 6":{"note":"","data":["801E39BE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 1":{"note":"","data":["801E39C0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 2":{"note":"","data":["801E39C1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 3":{"note":"","data":["801E39C2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 4":{"note":"","data":["801E39C3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 5":{"note":"","data":["801E39C4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 6":{"note":"","data":["801E39C5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 1":{"note":"","data":["801E39DA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 2":{"note":"","data":["801E39DB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 3":{"note":"","data":["801E39DC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 4":{"note":"","data":["801E39DD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Traffic Troubles\\Grand Canyon\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B8CCB 00FF"],"options":null},"Traffic Troubles\\Grand Canyon\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B8CF2 0063"],"options":null},"Traffic Troubles\\Indianapolis\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B430B 00FF"],"options":null},"Traffic Troubles\\Indianapolis\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B4332 0063"],"options":null},"Traffic Troubles\\New Mexico\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B58DB 00FF"],"options":null},"Traffic Troubles\\New Mexico\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B5902 0063"],"options":null},"Traffic Troubles\\San Fransisco\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B75DB 00FF"],"options":null},"Traffic Troubles\\San Fransisco\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7602 0063"],"options":null},"Unlock Everything":{"note":"This will unlock all characters, tracks, mirror mode, all in-game cheats, postcards, pluto's collar and give you all Trophies for every track and difficulties. To have this cheat save to mempak, enable it and then go into the Options Menu and disable the cheat. Go to the Wide-Screen Settings and Change it to Wide-Screen [16.9] and then the B button to get back to Wide-Screen Settings, now go back into Wide-Screen [16.9] and change it back to Normal [4.3].and press the B button until you come back to the main Options Menu.Close the game and load it again to see everything saved to the Mempak and unlocked.","data":["800D3478 008F","800D3479 0094","800D347A 0003","800D347C 0001","800D347F 0080","50000502 0000","800D3480 0009","50000502 0000","800D3481 0024","800D348A 0015","800D348B 007F","800D348C 0001","800D348D 00FF","800D348E 0004","800D348F 0022"],"options":null},"Victory Vehicles\\Everglades\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B516B 00FF"],"options":null},"Victory Vehicles\\Everglades\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B56C2 0063"],"options":null},"Victory Vehicles\\Malibu\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B6BFB 00FF"],"options":null},"Victory Vehicles\\Malibu\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B7152 0063"],"options":null},"Victory Vehicles\\Washington DC\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801BCBAB 00FF"],"options":null},"Victory Vehicles\\Washington DC\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801BD102 0063"],"options":null},"Victory Vehicles\\Yellowstone\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801B2A0B 00FF"],"options":null},"Victory Vehicles\\Yellowstone\\Max Tokens":{"note":"Only use one One Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801B2F62 0063"],"options":null}},"DEE584A2-0F161187-C:45":{"Have All\\Cars":{"note":"","data":["50000C01 0000","80097A18 0001"],"options":null},"Have All\\Difficulty Levels":{"note":"","data":["80097A17 0003"],"options":null},"Have All\\Tracks":{"note":"","data":["50000C01 0000","80095CC8 0001"],"options":null},"Infinite Health\\Player 1\\Alpine Ridge":{"note":"","data":["D02BA164 0080","802BA173 00EB"],"options":null},"Infinite Health\\Player 1\\Aztec Ruins":{"note":"","data":["D01FC428 0080","801FC437 00BE"],"options":null},"Infinite Health\\Player 1\\Bayou Run":{"note":"","data":["D02862BC 0080","802862CB 00EB"],"options":null},"Infinite Health\\Player 1\\Destruction Junction":{"note":"","data":["D029A9B0 0080","8029A9BF 00E1"],"options":null},"Infinite Health\\Player 1\\Ground Zero":{"note":"","data":["D01F64C8 0080","801F64D7 00BE"],"options":null},"Infinite Health\\Player 1\\Junkyard":{"note":"","data":["D0205B7C 0080","80205B8B 00BE"],"options":null},"Infinite Health\\Player 1\\Metro Challenge":{"note":"","data":["D02EDB18 0080","802EDB27 00E1"],"options":null},"Infinite Health\\Player 1\\Midnyte Rumble":{"note":"","data":["D030CC0C 0080","8030CC1B 00EB"],"options":null},"Infinite Health\\Player 1\\Seascape Sprint":{"note":"","data":["D02D4C24 0080","802D4C33 00E1"],"options":null},"Infinite Health\\Player 1\\Sunset Canyon":{"note":"","data":["D0303EA8 0080","80303EB7 00EB"],"options":null},"Infinite Health\\Player 1\\Terminal Impact":{"note":"","data":["D02B5F2D 0080","802B56B3 00E1"],"options":null},"Infinite Health\\Player 1\\Urban Mayhem":{"note":"","data":["D0203F10 0080","80203F1F 00C8"],"options":null},"Infinite Health\\Player 2\\Alpine Ridge":{"note":"","data":["D02C8BD0 0080","802C8BDF 00B4"],"options":null},"Infinite Health\\Player 2\\Aztec Ruins":{"note":"","data":["D0217C50 0080","80217C5F 00A0"],"options":null},"Infinite Health\\Player 2\\Bayou Run":{"note":"","data":["D0295190 0080","8029519F 00B4"],"options":null},"Infinite Health\\Player 2\\Destruction Junction":{"note":"","data":["D02B61D0 0080","802B61DF 00B4"],"options":null},"Infinite Health\\Player 2\\Ground Zero":{"note":"","data":["D0211D10 0080","80211D1F 00A0"],"options":null},"Infinite Health\\Player 2\\Junkyard":{"note":"","data":["D0215050 0080","8021505F 00A0"],"options":null},"Infinite Health\\Player 2\\Metro Challenge":{"note":"","data":["D02FCC10 0080","802FCC1F 00B4"],"options":null},"Infinite Health\\Player 2\\Midnyte Rumble":{"note":"","data":["D032ADD0 0080","8032ADDF 00B4"],"options":null},"Infinite Health\\Player 2\\Seascape Sprint":{"note":"","data":["D02E2D50 0080","802E2D5F 00E1"],"options":null},"Infinite Health\\Player 2\\Sunset Canyon":{"note":"","data":["D0312810 0080","8031281F 00B4"],"options":null},"Infinite Health\\Player 2\\Terminal Impact":{"note":"","data":["D02C4550 0080","802C455F 00E1"],"options":null},"Infinite Health\\Player 2\\Urban Mayhem":{"note":"","data":["D0235E50 0080","80235E5F 00A0"],"options":null},"Max Bonus Points\\01: Seascape Sprint":{"note":"","data":["812D4C3E 03E7"],"options":null},"Max Bonus Points\\02: Metro Challenge":{"note":"","data":["812EDB32 03E7"],"options":null},"Max Bonus Points\\03: Junkyard":{"note":"","data":["81205B9A 03E7"],"options":null},"Max Bonus Points\\04: Terminal Impact":{"note":"","data":["812B56BE 03E7"],"options":null},"Max Bonus Points\\05: Destruction Junction":{"note":"","data":["8129A9CA 03E7"],"options":null},"Max Bonus Points\\06: Aztec Ruins":{"note":"","data":["81095D36 03E7"],"options":null},"Max Collisions Points\\01: Seascape Sprint":{"note":"","data":["812D4C3A 03E7"],"options":null},"Max Collisions Points\\02: Metro Challenge":{"note":"","data":["812EDB2E 03E7"],"options":null},"Max Collisions Points\\03: Junkyard":{"note":"","data":["81205B92 03E7"],"options":null},"Max Collisions Points\\04: Terminal Impact":{"note":"","data":["812B56BA 03E7"],"options":null},"Max Collisions Points\\05: Destruction Junction":{"note":"","data":["8129A9C6 03E7"],"options":null},"Max Collisions Points\\06: Aztec Ruins":{"note":"","data":["81095D06 03E7"],"options":null},"Max Points Aid":{"note":"","data":["8111EF4E 03E7"],"options":null}},"DEE596AB-AF3B7AE7-C:45":{"Always Special\\Player 1":{"note":"","data":["800F9D35 0008"],"options":null},"Always Special\\Player 2":{"note":"","data":["800FA0E5 0008"],"options":null},"Always Special\\Player 3":{"note":"","data":["800FA495 0008"],"options":null},"Always Special\\Player 4":{"note":"","data":["800FA845 0008"],"options":null},"Character Select\\Player 1":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890F9D36 0240","890F9D60 42B4","8107E8B2 ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 2":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA0E6 0240","890FA110 42B4","8107E8B6 ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 3":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA496 0240","890FA4C0 42B4","8107E8BA ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Character Select\\Player 4":{"note":"With this code, you will need to press the GS Button to be in the ring and have full access to getting in and out of the ring.","data":["890FA846 0240","890FA870 42B4","8107E8BE ????"],"options":{"AKI Man":"0601","Alex Wright":"010F","Barbarian":"0106","Booker T":"000B","Bret Hart":"0008","Brian Adams":"020C","Brickowski":"0704","British Bulldog":"010B","Buff Bagwell":"0205","Chavo Guerrero Jr.":"0307","Chris Benoit":"0009","Chris Jericho":"0303","Curt Hennig":"0207","Dakeken":"0703","Dean Malenko":"0306","Diamon Dallas Page":"0004","Disco Inferno":"000C","Dr. Frank":"0604","Dusty Rhodes (Manager)":"0805","Eddy Guerrero":"0302","Elizabeth (Manager)":"0901","Eric Bischoff (Manager)":"0801","Eric Bishoff":"020D","Executioner":"0603","Fit Finley":"0101","Giant":"0002","Glacier":"0401","Goldberg":"000A","Han Zomon":"0706","Hawk Hana":"0701","Hollywood Hogan":"0201","Jackreen (Manager)":"0903","James Bandenderg (Manager)":"0807","Jekel":"0605","Jim Neidhart":"010E","Jimmy Hart (Manager)":"0803","Juventud Guerrera":"0305","Kanyon":"0404","Kevin Nash":"0203","Kidman":"0503","Kimberly (Manager)":"0902","Kimchee":"0702","Konnan":"0208","La Parka":"0308","Larry Zbysko":"0107","Lex Luger":"0003","Lodi":"0507","Macho Man Randy Savage":"0202","Maya Ineaby":"0606","Meng":"0105","Mingchee":"0705","Onoo (Manager)":"0802","Psychosis":"0309","Raven":"0501","Reese":"0508","Rey Mysterio Jr.":"0304","Rick Rude (Manager)":"0804","Rick Steiner":"0005","Riggs":"0504","Roddy Piper":"0007","Saturn":"0502","Scott Hall":"0204","Scott Norton":"0209","Scott Stenier":"0206","Shogun":"0602","Sick Boy":"0506","Sister Sherri (Manager)":"0904","Stevie Ray":"0108","Sting":"0001","Ted Debisas (Manager)":"0806","Ultimo Dragon":"0301","Van Hammer":"0505","Vincent (Manager)":"0808","Woman (Manager)":"0905","Wrath":"0403","Yugi Nagata":"010D"}},"Extra Characters \u0026 Modes":{"note":"","data":["8107F07C FFFF"],"options":null},"Get Title Belt In 1-Match":{"note":"","data":["80038AAB 0008"],"options":null},"Infinite Time":{"note":"","data":["800FAF87 0000"],"options":null},"Infinite Time Out Of Ring":{"note":"","data":["800FACE8 0014"],"options":null},"Spirit Select\\Player 1":{"note":"","data":["800F9D25 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 2":{"note":"","data":["800FA0D5 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 3":{"note":"","data":["800FA485 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Spirit Select\\Player 4":{"note":"","data":["800FA835 00??"],"options":{"Have Max":"64","Have None":"00","Have Normal":"32"}},"Ultimate Code\\Player 1":{"note":"","data":["800F9D24 0064"],"options":null},"Ultimate Code\\Player 2":{"note":"","data":["800FA0D4 0064"],"options":null},"Ultimate Code\\Player 3":{"note":"","data":["800FA484 0064"],"options":null},"Ultimate Code\\Player 4":{"note":"","data":["800FA834 0064"],"options":null},"Weapon Select\\Player 1":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800F9D31 0003","800F98E1 00??","800F98E2 0000","800F99A0 0000"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 2":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA0E1 0003","800F9911 00??","800F9912 0001","800F99A1 0001"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 3":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA491 0003","800F9941 00??","800F9942 0002","800F99A2 0002"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}},"Weapon Select\\Player 4":{"note":"With these codes, they do glitch a LOT! It will glitch when you hit certain people with certain weapons a certain way, but it is RANDOM somewhat too","data":["800FA841 0003","800F9971 00??","800F9972 0003","800F99A3 0003"],"options":{"Black Baseball Bat":"04","Black Microphone":"02","Blue Microphone":"01","Mallot":"00","Nothing":"FF","Spotted Baseball Bat":"05","Steel Chair":"06","Stop Sign":"0A","Suitcase":"09","Table Piece":"07","Trash Can":"08","Trophy":"03"}}},"DF331A18-5FD4E044-C:45":{"1 Lap Race":{"note":"Do not put this on with Total Number of Laps Code","data":["810495AE 0001"],"options":null},"Beat Championship Mode Easily":{"note":"","data":["80223E3B 0255"],"options":null},"Both Players Can Be Dale E":{"note":"","data":["80046538 0003"],"options":null},"Have CPU Control Car Player 1":{"note":"","data":["D0092985 0020","8015CC5C 0001","D0092985 0010","8015CC5C 0000"],"options":null},"Infinite Fuel\\Player 1":{"note":"","data":["81220502 3E80"],"options":null},"Infinite Fuel\\Player 2":{"note":"","data":["81230472 3E80"],"options":null},"Maximum\\Acceleration":{"note":"","data":["800C7113 0000"],"options":null},"Maximum\\Pit Distance":{"note":"","data":["800C7110 0000"],"options":null},"Maximum\\Top Speed":{"note":"","data":["800C7111 0000"],"options":null},"Race Forever":{"note":"","data":["810465AE FDE8"],"options":null},"Total Number Of Laps":{"note":"","data":["80046553 00??"],"options":{"1 lap":"01","2 lap":"02","3 lap":"03","4 lap":"04","5 lap":"05","6 lap":"06","7 lap":"07","8 lap":"08","9 lap":"09"}}},"DF574191-9EB5123D-C:45":{"Have 231 Marbles":{"note":"","data":["D00E9FF3 0000","800E9FF3 03E7"],"options":null},"Have All Gold Udders":{"note":"","data":["50002802 0000","810C625A 0101"],"options":null},"Infinite Banana Peel Ammo":{"note":"","data":["810C6976 03E7"],"options":null},"Infinite Blaster Ammo":{"note":"","data":["810C6916 03E7"],"options":null},"Infinite Boomerang Knives Ammo":{"note":"","data":["810C6A1E 03E7"],"options":null},"Infinite Cleaver Ammo":{"note":"","data":["800C6A1F 00FA"],"options":null},"Infinite Egg Chucker Ammo":{"note":"","data":["800C69BF 00FA"],"options":null},"Infinite Green Slimer Ammo":{"note":"","data":["810C69A6 03E7"],"options":null},"Infinite Health":{"note":"","data":["800C690F 0064"],"options":null},"Infinite Laser Ammo":{"note":"","data":["800C6917 00FA"],"options":null},"Infinite Lives":{"note":"","data":["800C6913 0063"],"options":null},"Infinite Mushroom Ammo":{"note":"","data":["810C6E36 03E7"],"options":null},"Infinite Music Gun Ammo":{"note":"","data":["810C6A06 03E7"],"options":null},"Infinite Rocket Launcher Ammo":{"note":"","data":["810C6946 03E7"],"options":null},"Infinite Shotgun Ammo":{"note":"","data":["810C69EE 03E7"],"options":null}},"DF6FF0F4-29D14238-C:4A":{"Bomb Select":{"note":"","data":["8024A3A1 00??"],"options":{"Blue Remote Bomb":"05","Clear All Special Bombs.":"00","Crazy Bomb":"1D","Invisible Mine Bomb":"07","Jelly Bomb":"03","Power Bomb":"02","Red Beem Bomb":"06","Shock Wave Bomb":"04"}},"Bomberman Speed":{"note":"","data":["8024A3A0 00??"],"options":{"Fast":"0E","Normal":"08","Slow":"04","Turbo":"10"}},"Have\\Infinite\\Kick":{"note":"","data":["8024A3A6 0002"],"options":null},"Have\\Max Bombs":{"note":"","data":["8024A39F 00FF"],"options":null},"Have\\Max Fire":{"note":"","data":["8024A39E 00FF"],"options":null},"Infinite\\Health Hearts":{"note":"","data":["8024A3AE 00FF"],"options":null},"Infinite\\Lives":{"note":"","data":["802E1CE7 00FF"],"options":null},"Infinite\\Timer":{"note":"","data":["800FDD72 002A"],"options":null},"Invincible":{"note":"Enemies \u0026 Bomb Blasts cant harm you.But if you walk \u0026 keep laying Bombs it will most likly freeze.so try to avoid constant bombing while walking.Turn cheat to off to go back to normal.","data":["8024A3A8 00??"],"options":{"Off":"00","On":"01"}},"Walk through\\Blocks":{"note":"Walk through Blocks like they are not there.Turn cheat to off to go back to normal.","data":["8024A3A5 00??"],"options":{"Off":"00","On":"01"}},"Walk through\\Bombs":{"note":"Walk through Bombs like they are not there.Turn cheat to off to go back to normal.","data":["8024A3A6 00??"],"options":{"Off":"00","On":"01"}}},"DF98B95D-58840978-C:4A":{"Freeze Timer":{"note":"","data":["811C84C4 012C"],"options":null},"Level 01\\Invincible":{"note":"","data":["D112D33A 0001","811E4B38 000A","D1147DEA 0001","811E4B38 000A"],"options":null},"Level 01\\Press R For Supa Attack":{"note":"","data":["D112D33A 0001","811E4B3C 01F4","D1147DEA 0001","811E4B3C 01F4"],"options":null},"Level 02\\Invincible":{"note":"","data":["D112D33A 0002","811E1DB8 000A","D1147DEA 0002","811E1DB8 000A"],"options":null},"Level 02\\Press R For Supa Attack":{"note":"","data":["D112D33A 0002","811E1DBC 01F4","D1147DEA 0002","811E1DBC 01F4"],"options":null},"Level 03\\Invincible":{"note":"","data":["D112D33A 0003","811E4D38 000A","D1147DEA 0003","811E4D38 000A"],"options":null},"Level 03\\Press R For Supa Attack":{"note":"","data":["D112D33A 0003","811E4D3C 01F4","D1147DEA 0003","811E4D3C 01F4"],"options":null},"Level 04\\Invincible":{"note":"","data":["D112D33A 0004","811E11B8 000A","D1147DEA 0004","811E11B8 000A"],"options":null},"Level 04\\Press R For Supa Attack":{"note":"","data":["D112D33A 0004","811E11BC 01F4","D1147DEA 0004","811E11BC 01F4"],"options":null},"Level 05\\Invincible":{"note":"","data":["D112D33A 0005","811E3638 000A","D1147DEA 0005","811E3638 000A"],"options":null},"Level 05\\Press R For Supa Attack":{"note":"","data":["D112D33A 0005","811E363C 01F4","D1147DEA 0005","811E363C 01F4"],"options":null},"Level 06\\Invincible":{"note":"","data":["D112D33A 0006","811E4EB8 000A","D1147DEA 0006","811E4EB8 000A"],"options":null},"Level 06\\Press R For Supa Attack":{"note":"","data":["D112D33A 0006","811E4EBC 01F4","D1147DEA 0006","811E4EBC 01F4"],"options":null},"Level 07\\Invincible":{"note":"","data":["D112D33A 0007","811E5D38 000A","D1147DEA 0007","811E5D38 000A"],"options":null},"Level 07\\Press R For Supa Attack":{"note":"","data":["D112D33A 0007","811E5D3C 01F4","D1147DEA 0007","811E5D3C 01F4"],"options":null},"Level 08\\Invincible":{"note":"","data":["D112D33A 0008","811E2838 000A","D1147DEA 0008","811E2838 000A"],"options":null},"Level 08\\Press R For Supa Attack":{"note":"","data":["D112D33A 0008","811E283C 01F4","D1147DEA 0008","811E283C 01F4"],"options":null},"Level 09\\Invincible":{"note":"","data":["D112D33A 0009","811EB3B8 000A","D1147DEA 0009","811EB3B8 000A"],"options":null},"Level 09\\Press R For Supa Attack":{"note":"","data":["D112D33A 0009","811EB3BC 01F4","D1147DEA 0009","811EB3BC 01F4"],"options":null},"Level 10\\Invincible":{"note":"","data":["D112D33A 000A","811E5438 000A","D1147DEA 000A","811E5438 000A"],"options":null},"Level 10\\Press R For Supa Attack":{"note":"","data":["D112D33A 000A","811E543C 01F4","D1147DEA 000A","811E543C 01F4"],"options":null},"Level 11\\Invincible":{"note":"","data":["D112D33A 000B","811E1EB8 000A","D1147DEA 000B","811E1EB8 000A"],"options":null},"Level 11\\Press R For Supa Attack":{"note":"","data":["D112D33A 000B","811E1EBC 01F4","D1147DEA 000B","811E1EBC 01F4"],"options":null},"Level 12\\Invincible":{"note":"","data":["D112D33A 000C","811FA6B8 000A","D1147DEA 000C","811FA6B8 000A"],"options":null},"Level 12\\Press R For Supa Attack":{"note":"","data":["D112D33A 000C","811FA6BC 01F4","D1147DEA 000C","811FA6BC 01F4"],"options":null},"Level 13\\Invincible":{"note":"","data":["D112D33A 000D","811EAE38 000A","D1147DEA 000D","811EAE38 000A"],"options":null},"Level 13\\Press R For Supa Attack":{"note":"","data":["D112D33A 000D","811EAE3C 01F4","D1147DEA 000D","811EAE3C 01F4"],"options":null},"Level 14\\Invincible":{"note":"","data":["D112D33A 000E","811E2EB8 000A","D1147DEA 000E","811E2EB8 000A"],"options":null},"Level 14\\Press R For Supa Attack":{"note":"","data":["D112D33A 000E","811E2EBC 01F4","D1147DEA 000E","811E2EBC 01F4"],"options":null},"Level 15\\Invincible":{"note":"","data":["D112D33A 000F","811E2738 000A","D1147DEA 000F","811E2738 000A"],"options":null},"Level 15\\Press R For Supa Attack":{"note":"","data":["D112D33A 000F","811E273C 01F4","D1147DEA 000F","811E273C 01F4"],"options":null},"Level 16\\Invincible":{"note":"","data":["D112D33A 0010","811E53B8 000A","D1147DEA 0010","811E53B8 000A"],"options":null},"Level 16\\Press R For Supa Attack":{"note":"","data":["D112D33A 0010","811E538C 01F4","D1147DEA 0010","811E538C 01F4"],"options":null},"Level 17\\Invincible":{"note":"","data":["D112D33A 0011","811E2738 000A","D1147DEA 0011","811E2738 000A"],"options":null},"Level 17\\Press R For Supa Attack":{"note":"","data":["D112D33A 0011","811E273C 01F4","D1147DEA 0011","811E273C 01F4"],"options":null},"Level 18\\Invincible":{"note":"","data":["D112D33A 0012","811E1CB8 000A","D1147DEA 0012","811E1CB8 000A"],"options":null},"Level 18\\Press R For Supa Attack":{"note":"","data":["D112D33A 0012","811E1CBC 01F4","D1147DEA 0012","811E1CBC 01F4"],"options":null},"Level 19\\Invincible":{"note":"","data":["D112D33A 0013","811E4438 000A","D1147DEA 0013","811E4438 000A"],"options":null},"Level 19\\Press R For Supa Attack":{"note":"","data":["D112D33A 0013","811E443C 01F4","D1147DEA 0013","811E443C 01F4"],"options":null},"Level 20\\Invincible":{"note":"","data":["D112D33A 0014","811F7238 000A","D1147DEA 0014","811F7238 000A"],"options":null},"Level 20\\Press R For Supa Attack":{"note":"","data":["D112D33A 0014","811F723C 01F4","D1147DEA 0014","811F723C 01F4"],"options":null},"Level 21\\Invincible":{"note":"","data":["D112D33A 0015","811E49B8 000A","D1147DEA 0015","811E49B8 000A"],"options":null},"Level 21\\Press R For Supa Attack":{"note":"","data":["D112D33A 0015","811E49BC 01F4","D1147DEA 0015","811E49BC 01F4"],"options":null},"Level 22\\Invincible":{"note":"","data":["D112D33A 0016","811E40B8 000A","D1147DEA 0016","811E40B8 000A"],"options":null},"Level 22\\Press R For Supa Attack":{"note":"","data":["D112D33A 0016","811E40BC 01F4","D1147DEA 0016","811E40BC 01F4"],"options":null},"Level 23\\Invincible":{"note":"","data":["D112D33A 0017","811E9C38 000A","D1147DEA 0017","811E9C38 000A"],"options":null},"Level 23\\Press R For Supa Attack":{"note":"","data":["D112D33A 0017","811E9C3C 01F4","D1147DEA 0017","811E9C3C 01F4"],"options":null},"Level 24\\Invincible":{"note":"","data":["D112D33A 0018","811E2938 000A","D1147DEA 0018","811E2938 000A"],"options":null},"Level 24\\Press R For Supa Attack":{"note":"","data":["D112D33A 0018","811E293C 01F4","D1147DEA 0018","811E293C 01F4"],"options":null},"Level 25\\Invincible":{"note":"","data":["D112D33A 0019","811E4D38 000A","D1147DEA 0019","811E4D38 000A"],"options":null},"Level 25\\Press R For Supa Attack":{"note":"","data":["D112D33A 0019","811E4D3C 01F4","D1147DEA 0019","811E4D3C 01F4"],"options":null},"Level 26\\Invincible":{"note":"","data":["D112D33A 001A","811EFFB8 000A","D1147DEA 001A","811EFFB8 000A"],"options":null},"Level 26\\Press R For Supa Attack":{"note":"","data":["D112D33A 001A","811EFFBC 01F4","D1147DEA 001A","811EFFBC 01F4"],"options":null},"Level 27\\Invincible":{"note":"","data":["D112D33A 001B","811E2B38 000A","D1147DEA 001B","811E2B38 000A"],"options":null},"Level 27\\Press R For Supa Attack":{"note":"","data":["D112D33A 001B","811E2B3C 01F4","D1147DEA 001B","811E2B3C 01F4"],"options":null},"Level 28\\Invincible":{"note":"","data":["D112D33A 001C","811E25B8 000A","D1147DEA 001C","811E25B8 000A"],"options":null},"Level 28\\Press R For Supa Attack":{"note":"","data":["D112D33A 001C","811E25BC 01F4","D1147DEA 001C","811E25BC 01F4"],"options":null},"Level 29\\Invincible":{"note":"","data":["D112D33A 001D","811E1EB8 000A","D1147DEA 001D","811E1EB8 000A"],"options":null},"Level 29\\Press R For Supa Attack":{"note":"","data":["D112D33A 001D","811E1EBC 01F4","D1147DEA 001D","811E1EBC 01F4"],"options":null},"Level 30\\Invincible":{"note":"","data":["D112D33A 001E","811E38B8 000A","D1147DEA 001E","811E38B8 000A"],"options":null},"Level 30\\Press R For Supa Attack":{"note":"","data":["D112D33A 001E","811E38BC 01F4","D1147DEA 001E","811E38BC 01F4"],"options":null},"Level 31\\Invincible":{"note":"","data":["D112D33A 001F","811F5638 000A","D1147DEA 001F","811F5638 000A"],"options":null},"Level 31\\Press R For Supa Attack":{"note":"","data":["D112D33A 001F","811F563C 01F4","D1147DEA 001F","811F563C 01F4"],"options":null},"Level 32\\Invincible":{"note":"","data":["D112D33A 0020","811E4238 000A","D1147DEA 0020","811E4238 000A"],"options":null},"Level 32\\Press R For Supa Attack":{"note":"","data":["D112D33A 0020","811E423C 01F4","D1147DEA 0020","811E423C 01F4"],"options":null},"Level 33\\Invincible":{"note":"","data":["D112D33A 0021","811E4EB8 000A","D1147DEA 0021","811E4EB8 000A"],"options":null},"Level 33\\Press R For Supa Attack":{"note":"","data":["D112D33A 0021","811E4EBC 01F4","D1147DEA 0021","811E4EBC 01F4"],"options":null},"Level 34\\Invincible":{"note":"","data":["D112D33A 0022","811E16B8 000A","D1147DEA 0022","811E16B8 000A"],"options":null},"Level 34\\Press R For Supa Attack":{"note":"","data":["D112D33A 0022","811E16BC 01F4","D1147DEA 0022","811E16BC 01F4"],"options":null},"Level 35\\Invincible":{"note":"","data":["D112D33A 0023","811FABB8 000A","D1147DEA 0023","811FABB8 000A"],"options":null},"Level 35\\Press R For Supa Attack":{"note":"","data":["D112D33A 0023","811FABBC 01F4","D1147DEA 0023","811FABBC 01F4"],"options":null},"Level 36\\Invincible":{"note":"","data":["D112D33A 0024","811EA738 000A","D1147DEA 0024","811EA738 000A"],"options":null},"Level 36\\Press R For Supa Attack":{"note":"","data":["D112D33A 0024","811EA73C 01F4","D1147DEA 0024","811EA73C 01F4"],"options":null},"Level 37\\Invincible":{"note":"","data":["D112D33A 0025","811FC638 000A","D1147DEA 0025","811FC638 000A"],"options":null},"Level 37\\Press R For Supa Attack":{"note":"","data":["D112D33A 0025","811FC63C 01F4","D1147DEA 0025","811FC63C 01F4"],"options":null},"Level 38\\Invincible":{"note":"","data":["D112D33A 0026","811EEBC8 000A","D1147DEA 0026","811EEBC8 000A"],"options":null},"Level 38\\Press R For Supa Attack":{"note":"","data":["D112D33A 0026","811EEBCC 01F4","D1147DEA 0026","811EEBCC 01F4"],"options":null},"Level 39\\Invincible":{"note":"","data":["D112D33A 0027","811F50B8 000A","D1147DEA 0027","811F50B8 000A"],"options":null},"Level 39\\Press R For Supa Attack":{"note":"","data":["D112D33A 0027","811F50BC 01F4","D1147DEA 0027","811F50BC 01F4"],"options":null},"Level 40\\Invincible":{"note":"","data":["D112D33A 0028","811E2038 000A","D1147DEA 0028","811E2038 000A"],"options":null},"Level 40\\Press R For Supa Attack":{"note":"","data":["D112D33A 0028","811E203C 01F4","D1147DEA 0028","811E203C 01F4"],"options":null},"Level 41\\Invincible":{"note":"","data":["D112D33A 0029","811F02B8 000A","D1147DEA 0029","811F02B8 000A"],"options":null},"Level 41\\Press R For Supa Attack":{"note":"","data":["D112D33A 0029","811F02BC 01F4","D1147DEA 0029","811F02BC 01F4"],"options":null},"Level 42\\Invincible":{"note":"","data":["D112D33A 002A","811FD7B8 000A","D1147DEA 002A","811FD7B8 000A"],"options":null},"Level 42\\Press R For Supa Attack":{"note":"","data":["D112D33A 002A","811FD7BC 01F4","D1147DEA 002A","811FD7BC 01F4"],"options":null},"Level 43\\Invincible":{"note":"","data":["D112D33A 002B","811E97B8 000A","D1147DEA 002B","811E97B8 000A"],"options":null},"Level 43\\Press R For Supa Attack":{"note":"","data":["D112D33A 002B","811E97BC 01F4","D1147DEA 002B","811E97BC 01F4"],"options":null},"Level 44\\Invincible":{"note":"","data":["D112D33A 002C","811E4538 000A","D1147DEA 002C","811E4538 000A"],"options":null},"Level 44\\Press R For Supa Attack":{"note":"","data":["D112D33A 002C","811E453C 01F4","D1147DEA 002C","811E453C 01F4"],"options":null}},"DFD784AD-AE426603-C:50":{"Game Win Select\\Player 1":{"note":"","data":["801BAEB1 00??"],"options":{"0 Games Won":"00","1 Game Won":"01","2 Games Won":"02","3 Games Won":"03","4 Games Won":"04","5 Games Won":"05","For Game Set \u0026 Match":"06"}},"Game Win Select\\Player 2":{"note":"","data":["801BAEB2 00??"],"options":{"0 Games Won":"00","1 Game Won":"01","2 Games Won":"02","3 Games Won":"03","4 Games Won":"04","5 Games Won":"05","For Game Set \u0026 Match":"06"}},"Play As\\Player 1":{"note":"","data":["800BE351 00??"],"options":{"Amanda Coetzer":"02","Conchita Martinez":"04","Gustavo Kuerten":"07","Jana Novotna":"03","Jonas Bjorkman":"08","Leon Rodez":"05","Mark Philippoussis":"09","Michael Chang":"06","Randy Powell":"0A","Richard Krajicek":"0B","Vanessa Child":"01","Zoe Taylor":"00"}},"Play As\\Player 2":{"note":"","data":["800BE352 00??"],"options":{"Amanda Coetzer":"02","Conchita Martinez":"04","Gustavo Kuerten":"07","Jana Novotna":"03","Jonas Bjorkman":"08","Leon Rodez":"05","Mark Philippoussis":"09","Michael Chang":"06","Randy Powell":"0A","Richard Krajicek":"0B","Vanessa Child":"01","Zoe Taylor":"00"}},"Points Select\\Player 1":{"note":"","data":["801C6160 00??"],"options":{"0 Points":"00","15 Points":"15","30 Points":"30","40 Points":"40"}},"Points Select\\Player 2":{"note":"","data":["801C6161 00??"],"options":{"0 Points":"00","15 Points":"15","30 Points":"30","40 Points":"40"}}},"DFE61153-D76118E6-C:45":{"Championship Mode\\Cannot Spin Out":{"note":"","data":["803CDD93 0000"],"options":null},"Championship Mode\\Disable Left Lane Traffic":{"note":"","data":["8033C95B 0001"],"options":null},"Championship Mode\\Disable Right Lane Traffic":{"note":"","data":["8033C95F 0001"],"options":null},"Championship Mode\\Max Points Per Race":{"note":"","data":["813BFBFE FFFF"],"options":null},"Championship Mode\\Max Points To Next Level":{"note":"","data":["813BFBFC FFFF"],"options":null},"Championship Mode\\Max Total Points":{"note":"","data":["813BFBFA FFFF"],"options":null},"Championship Mode\\Unlimited Nitro\\Player 1":{"note":"","data":["803C75E7 0003"],"options":null},"Championship Mode\\Unlimited Nitro\\Player 2":{"note":"","data":["803C7823 0003"],"options":null},"Championship Mode\\Unlimited Nitro\\Player 3":{"note":"","data":["803C716F 0003"],"options":null},"Dancing Girl Always On":{"note":"","data":["803BEE73 0001","803C21CF 0054"],"options":null},"Have All\\Car Upgrades":{"note":"","data":["803BEE42 0005"],"options":null},"Have All\\Cars":{"note":"","data":["813BEE78 1FFF"],"options":null},"Player 1\\Always Place 1st":{"note":"","data":["803CE023 0001"],"options":null},"Player 1\\Car/Transmission Modifier":{"note":"","data":["803BEE40 00??"],"options":{"ATV (Auto":"04","ATV (Manual)":"05","Banzai GTV (Auto)":"0A","Banzai GTV (Manual)":"0B","Bulldog (Auto)":"1A","Bulldog (Manual)":"1B","Conductor (Auto)":"24","Conductor (Manual)":"25","El Nino (Auto)":"10","El Nino (Manual)":"11","Enforcer (Auto)":"1C","Enforcer (Manual)":"1D","Exec (Auto)":"22","Exec (Manual)":"23","Grass Hopper (Auto)":"18","Grass Hopper (Manual)":"19","Howler (Auto)":"30","Howler (Manual)":"31","Kamikaze (Auto)":"02","Kamikaze (Manual)":"03","Monsta (Auto)":"2E","Monsta (Manual)":"2F","NY Taxi (Auto)":"1E","NY Taxi (Manual)":"1F","Orca (Auto)":"0E","Orca (manual)":"0F","Rhino 4x4 (Auto)":"12","Rhino 4x4 (Manual)":"13","Road King (Auto)":"16","Road King (Manual)":"17","Rocket (Auto)":"2A","Rocket (Manual)":"2B","Sardine Extreme (Auto)":"14","Sardine Extreme (Manual)":"15","Scarab (Auto)":"06","Scarab (Manual)":"07","School Bus (Auto)":"20","School Bus (Manual)":"21","Serpent (Auto)":"00","Serpent (Manual)":"01","Speed Demon (Auto)":"26","Speed Demon (Manual)":"27","Stallion P6 (Auto)":"08","Stallion P6 (Manual)":"09","The Surgeon (Auto)":"2C","The Surgeon (Manual)":"2D","Tommy (Auto)":"28","Tommy (Manual)":"29","Zombie (Auto)":"0C","Zombie (Manual)":"0D"}},"Player 1\\Stop Elapsed Time":{"note":"","data":["813C7678 3C80"],"options":null},"Player 2\\Always Place 1st":{"note":"","data":["803CE4FB 0001"],"options":null},"Player 2\\Car/Transmission Modifier":{"note":"","data":["803BEE48 00??"],"options":{"ATV (Auto":"04","ATV (Manual)":"05","Banzai GTV (Auto)":"0A","Banzai GTV (Manual)":"0B","Bulldog (Auto)":"1A","Bulldog (Manual)":"1B","Conductor (Auto)":"24","Conductor (Manual)":"25","El Nino (Auto)":"10","El Nino (Manual)":"11","Enforcer (Auto)":"1C","Enforcer (Manual)":"1D","Exec (Auto)":"22","Exec (Manual)":"23","Grass Hopper (Auto)":"18","Grass Hopper (Manual)":"19","Howler (Auto)":"30","Howler (Manual)":"31","Kamikaze (Auto)":"02","Kamikaze (Manual)":"03","Monsta (Auto)":"2E","Monsta (Manual)":"2F","NY Taxi (Auto)":"1E","NY Taxi (Manual)":"1F","Orca (Auto)":"0E","Orca (manual)":"0F","Rhino 4x4 (Auto)":"12","Rhino 4x4 (Manual)":"13","Road King (Auto)":"16","Road King (Manual)":"17","Rocket (Auto)":"2A","Rocket (Manual)":"2B","Sardine Extreme (Auto)":"14","Sardine Extreme (Manual)":"15","Scarab (Auto)":"06","Scarab (Manual)":"07","School Bus (Auto)":"20","School Bus (Manual)":"21","Serpent (Auto)":"00","Serpent (Manual)":"01","Speed Demon (Auto)":"26","Speed Demon (Manual)":"27","Stallion P6 (Auto)":"08","Stallion P6 (Manual)":"09","The Surgeon (Auto)":"2C","The Surgeon (Manual)":"2D","Tommy (Auto)":"28","Tommy (Manual)":"29","Zombie (Auto)":"0C","Zombie (Manual)":"0D"}},"Player 2\\Stop Elapsed Time":{"note":"","data":["813C78B4 3C80"],"options":null},"Player 3\\Always Place 1st":{"note":"","data":["803CDB4B 0001"],"options":null},"Player 3\\Car/Transmission Modifier":{"note":"","data":["803BEE50 00??"],"options":{"ATV (Auto":"04","ATV (Manual)":"05","Banzai GTV (Auto)":"0A","Banzai GTV (Manual)":"0B","Bulldog (Auto)":"1A","Bulldog (Manual)":"1B","Conductor (Auto)":"24","Conductor (Manual)":"25","El Nino (Auto)":"10","El Nino (Manual)":"11","Enforcer (Auto)":"1C","Enforcer (Manual)":"1D","Exec (Auto)":"22","Exec (Manual)":"23","Grass Hopper (Auto)":"18","Grass Hopper (Manual)":"19","Howler (Auto)":"30","Howler (Manual)":"31","Kamikaze (Auto)":"02","Kamikaze (Manual)":"03","Monsta (Auto)":"2E","Monsta (Manual)":"2F","NY Taxi (Auto)":"1E","NY Taxi (Manual)":"1F","Orca (Auto)":"0E","Orca (manual)":"0F","Rhino 4x4 (Auto)":"12","Rhino 4x4 (Manual)":"13","Road King (Auto)":"16","Road King (Manual)":"17","Rocket (Auto)":"2A","Rocket (Manual)":"2B","Sardine Extreme (Auto)":"14","Sardine Extreme (Manual)":"15","Scarab (Auto)":"06","Scarab (Manual)":"07","School Bus (Auto)":"20","School Bus (Manual)":"21","Serpent (Auto)":"00","Serpent (Manual)":"01","Speed Demon (Auto)":"26","Speed Demon (Manual)":"27","Stallion P6 (Auto)":"08","Stallion P6 (Manual)":"09","The Surgeon (Auto)":"2C","The Surgeon (Manual)":"2D","Tommy (Auto)":"28","Tommy (Manual)":"29","Zombie (Auto)":"0C","Zombie (Manual)":"0D"}},"Player 4\\Always Place 1st":{"note":"","data":["803CD673 0001"],"options":null},"Player 4\\Car/Transmission Modifier":{"note":"","data":["803BEE58 00??"],"options":{"ATV (Auto":"04","ATV (Manual)":"05","Banzai GTV (Auto)":"0A","Banzai GTV (Manual)":"0B","Bulldog (Auto)":"1A","Bulldog (Manual)":"1B","Conductor (Auto)":"24","Conductor (Manual)":"25","El Nino (Auto)":"10","El Nino (Manual)":"11","Enforcer (Auto)":"1C","Enforcer (Manual)":"1D","Exec (Auto)":"22","Exec (Manual)":"23","Grass Hopper (Auto)":"18","Grass Hopper (Manual)":"19","Howler (Auto)":"30","Howler (Manual)":"31","Kamikaze (Auto)":"02","Kamikaze (Manual)":"03","Monsta (Auto)":"2E","Monsta (Manual)":"2F","NY Taxi (Auto)":"1E","NY Taxi (Manual)":"1F","Orca (Auto)":"0E","Orca (manual)":"0F","Rhino 4x4 (Auto)":"12","Rhino 4x4 (Manual)":"13","Road King (Auto)":"16","Road King (Manual)":"17","Rocket (Auto)":"2A","Rocket (Manual)":"2B","Sardine Extreme (Auto)":"14","Sardine Extreme (Manual)":"15","Scarab (Auto)":"06","Scarab (Manual)":"07","School Bus (Auto)":"20","School Bus (Manual)":"21","Serpent (Auto)":"00","Serpent (Manual)":"01","Speed Demon (Auto)":"26","Speed Demon (Manual)":"27","Stallion P6 (Auto)":"08","Stallion P6 (Manual)":"09","The Surgeon (Auto)":"2C","The Surgeon (Manual)":"2D","Tommy (Auto)":"28","Tommy (Manual)":"29","Zombie (Auto)":"0C","Zombie (Manual)":"0D"}},"Time Counts Down Faster":{"note":"","data":["813D0D3E 0000"],"options":null}},"DFF227D9-0D4D8169-C:44":{"Always Have\\50 pieces of corn":{"note":"","data":["801E2761 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E2750 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["811E274E 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E2762 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E2755 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E2760 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D008FFA1 0010","811E26C6 1000","D008FFA1 0010","811E26D6 1000"],"options":null},"No Music":{"note":"","data":["801DD906 0000"],"options":null},"Start with Berry Weapon":{"note":"","data":["801E2757 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Subtitles On":{"note":"","data":["801DDB7B 00??"],"options":{"Off":"00","On":"01"}},"Unlock All Levels":{"note":"","data":["81099E30 000F"],"options":null}},"E0044E9E-CD659D0D-C:4A":{},"E0144180-650B78C9-C:45":{"Andrew Reynolds\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA7E 00FF"],"options":null},"Andrew Reynolds\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA80 00FF"],"options":null},"Andrew Reynolds\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA7B 00FF"],"options":null},"Andrew Reynolds\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA78 00FF"],"options":null},"Bob Burnquist\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA1A 00FF"],"options":null},"Bob Burnquist\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA1C 00FF"],"options":null},"Bob Burnquist\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA17 00FF"],"options":null},"Bob Burnquist\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA14 00FF"],"options":null},"Bucky Lasek\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA42 00FF"],"options":null},"Bucky Lasek\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA44 00FF"],"options":null},"Bucky Lasek\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA3F 00FF"],"options":null},"Bucky Lasek\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA3C 00FF"],"options":null},"Chad Muska\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA56 00FF"],"options":null},"Chad Muska\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA58 00FF"],"options":null},"Chad Muska\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA53 00FF"],"options":null},"Chad Muska\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA50 00FF"],"options":null},"Elissa Steamer\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEABA 00FF"],"options":null},"Elissa Steamer\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEABC 00FF"],"options":null},"Elissa Steamer\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEAB7 00FF"],"options":null},"Elissa Steamer\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEAB4 00FF"],"options":null},"Geoff Rowley\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA2E 00FF"],"options":null},"Geoff Rowley\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA30 00FF"],"options":null},"Geoff Rowley\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA2B 00FF"],"options":null},"Geoff Rowley\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA28 00FF"],"options":null},"Jamie Thomas\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEAA6 00FF"],"options":null},"Jamie Thomas\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEAA8 00FF"],"options":null},"Jamie Thomas\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEAA3 00FF"],"options":null},"Jamie Thomas\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEAA0 00FF"],"options":null},"Kareem Campbell\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA6A 00FF"],"options":null},"Kareem Campbell\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA6C 00FF"],"options":null},"Kareem Campbell\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA67 00FF"],"options":null},"Kareem Campbell\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA64 00FF"],"options":null},"Officer Dick\\Have\\All\\Gold Medal\\Burnside":{"note":"","data":["800DEACE 00FF"],"options":null},"Officer Dick\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEAD0 00FF"],"options":null},"Officer Dick\\Have\\All\\Gold Medal\\Skate Park":{"note":"","data":["800DEACB 00FF"],"options":null},"Officer Dick\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEAC8 00FF"],"options":null},"Player 1\\Have\\Perfect Balance":{"note":"","data":["800DE843 0001"],"options":null},"Player 1\\Play As":{"note":"","data":["800D0FD4 00??"],"options":{"Andrew Reynolds":"06","Bob Burnquist":"01","Bucky Lasek":"03","Chad Muska":"04","Elissa Steamer":"09","Geoff Rowley":"02","Jamie Thomas":"08","Kareem Campbell":"05","Officer Dick":"0A","Rune Glifberg":"07","Tony Hawk":"00"}},"Player 1\\Super Max\\Air":{"note":"","data":["800D62DE FFFF"],"options":null},"Player 1\\Super Max\\Balance":{"note":"","data":["800D62DF FFFF"],"options":null},"Player 1\\Super Max\\Ollie":{"note":"","data":["800D62DC FFFF"],"options":null},"Player 1\\Super Max\\Speed":{"note":"","data":["800D62DD FFFF"],"options":null},"Player 1\\Super Max\\Turning":{"note":"","data":["800D62E0 FFFF"],"options":null},"Player 2\\Play As":{"note":"","data":["800D0FD5 00??"],"options":{"Andrew Reynolds":"06","Bob Burnquist":"01","Bucky Lasek":"03","Chad Muska":"04","Elissa Steamer":"09","Geoff Rowley":"02","Jamie Thomas":"08","Kareem Campbell":"05","Officer Dick":"0A","Rune Glifberg":"07","Tony Hawk":"00"}},"Player 2\\Super Max\\Air":{"note":"","data":["800D62E3 FFFF"],"options":null},"Player 2\\Super Max\\Balance":{"note":"","data":["800D62E4 FFFF"],"options":null},"Player 2\\Super Max\\Ollie":{"note":"","data":["800D62E1 FFFF"],"options":null},"Player 2\\Super Max\\Speed":{"note":"","data":["800D62E2 FFFF"],"options":null},"Player 2\\Super Max\\Turning":{"note":"","data":["800D62E5 FFFF"],"options":null},"Rune Glifberg\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA92 00FF"],"options":null},"Rune Glifberg\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA94 00FF"],"options":null},"Rune Glifberg\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA8F 00FF"],"options":null},"Rune Glifberg\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA8C 00FF"],"options":null},"Tony Hawk\\Have\\All\\Gold Medal\\Burnside Portland":{"note":"","data":["800DEA06 00FF"],"options":null},"Tony Hawk\\Have\\All\\Gold Medal\\Roswell":{"note":"","data":["800DEA08 00FF"],"options":null},"Tony Hawk\\Have\\All\\Gold Medal\\Skate Park Chicago":{"note":"","data":["800DEA03 00FF"],"options":null},"Tony Hawk\\Have\\All\\Tapes":{"note":"","data":["50000901 0000","800DEA00 00FF"],"options":null}},"E0B92B94-80E87CBD-C:50":{"Access All Nuke Pieces 1-6":{"note":"Enter the In-game inventory option, and press L Button","data":["D00FC701 0020","50000601 0000","802FC99C 0030"],"options":null},"Access In-Game Cheat Menu":{"note":"","data":["8112167C FFFF","8112167E FFFF"],"options":null}},"E0B92B94-B9A7E025-C:45":{"Access In-Game Cheat Menu":{"note":"","data":["8112167C FFFF","8112167E FFFF"],"options":null}},"E0C4F72F-769E1506-C:50":{"Have Mouse Card\\Night Tail":{"note":"","data":["800A2865 0001"],"options":null},"Have Mouse Card\\The Adventure Begins":{"note":"","data":["800A2864 0001"],"options":null},"Infinite Lives":{"note":"","data":["810A2886 0009"],"options":null},"Max Honey Pots":{"note":"","data":["810A288A 03E7"],"options":null}},"E13AE2DC-4FB65CE8-C:4A":{"Have All Elements":{"note":"","data":["8107A9F4 3232","8107A9F6 3232"],"options":null},"Infinite Health":{"note":"","data":["8107A9D4 01F4","8107A9D6 01F4"],"options":null},"Infinite Magic Points":{"note":"","data":["8107A9D8 01F4","8107A9DA 01F4"],"options":null},"Super Agility":{"note":"","data":["8107A9DE 01F4"],"options":null},"Super Defense":{"note":"","data":["8107A9DC 01F4"],"options":null}},"E185E291-4E50766D-C:45":{"Game Win Select\\Player 1":{"note":"","data":["801BBFA1 00??"],"options":{"0 Games Won":"00","1 Game Won":"01","2 Games Won":"02","3 Games Won":"03","4 Games Won":"04","5 Games Won":"05","For Game Set \u0026 Match":"06"}},"Game Win Select\\Player 2":{"note":"","data":["801BBFA2 00??"],"options":{"0 Games Won":"00","1 Game Won":"01","2 Games Won":"02","3 Games Won":"03","4 Games Won":"04","5 Games Won":"05","For Game Set \u0026 Match":"06"}},"Play As\\Player 1":{"note":"","data":["800BFFA5 00??"],"options":{"Amanda Coetzer":"02","Conchita Martinez":"04","Gustavo Kuerten":"07","Jana Novotna":"03","Jonas Bjorkman":"08","Leon Rodez":"05","Mark Philippoussis":"09","Michael Chang":"06","Randy Powell":"0A","Richard Krajicek":"0B","Vanessa Child":"01","Zoe Taylor":"00"}},"Play As\\Player 2":{"note":"","data":["800BFFA6 00??"],"options":{"Amanda Coetzer":"02","Conchita Martinez":"04","Gustavo Kuerten":"07","Jana Novotna":"03","Jonas Bjorkman":"08","Leon Rodez":"05","Mark Philippoussis":"09","Michael Chang":"06","Randy Powell":"0A","Richard Krajicek":"0B","Vanessa Child":"01","Zoe Taylor":"00"}},"Points Select\\Player 1":{"note":"","data":["801C7260 00??"],"options":{"0 Points":"00","15 Points":"15","30 Points":"30","40 Points":"40"}},"Points Select\\Player 2":{"note":"","data":["801C7261 00??"],"options":{"0 Points":"00","15 Points":"15","30 Points":"30","40 Points":"40"}}},"E1EF93F7-14908B0B-C:44":{"Max Score":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null},"Press L Button for Max Gauge\\Player 1":{"note":"","data":["D00B5661 0020","811D2602 0098"],"options":null},"Press L Button for Max Gauge\\Player 2":{"note":"","data":["D00B5667 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}}},"E2D37CF0-F57E4EAE-C:50":{"Away Team Scores":{"note":"","data":["8011A9BF 00??"],"options":{"0 Goal":"00","1 Goal":"01","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08"}},"Home Team Scores":{"note":"","data":["80119F2B 00??"],"options":{"0 Goal":"00","1 Goal":"01","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08"}},"Infinite player creation points":{"note":"","data":["801AC581 003C"],"options":null}},"E328B4FA-004A28E1-C:50":{"Always Have\\guide line on":{"note":"","data":["80056CCC 0082"],"options":null},"Next Bubble Select\\Player 1":{"note":"","data":["800ECE19 00??"],"options":{"Black":"08","Blue":"03","Green":"02","No Bubble":"00","Orange":"05","Purple":"06","Red":"01","White":"07","Yellow":"04"}},"Next Bubble Select\\Player 2":{"note":"","data":["800ECF09 00??"],"options":{"Black":"08","Blue":"03","Green":"02","No Bubble":"00","Orange":"05","Purple":"06","Red":"01","White":"07","Yellow":"04"}},"Play As Select\\Player 1":{"note":"","data":["800E3250 00??"],"options":{"1 of the two Ballons":"13","Blue Gnome":"12","Bubbloon":"00","Dragoon":"08","Gnome":"09","Jack":"06","Luna":"05","Marina":"03","Monkey":"10","Musashi":"04","Prettio":"02","SSB":"07","Twinkie":"01","Water under ballons":"14","furby? (looks like 2 balloons)":"11"}},"Play As Select\\Player 2":{"note":"","data":["800E3258 00??"],"options":{"1 of the two Ballons":"13","Blue Gnome":"12","Bubbloon":"00","Dragoon":"08","Gnome":"09","Jack":"06","Luna":"05","Marina":"03","Monkey":"10","Musashi":"04","Prettio":"02","SSB":"07","Twinkie":"01","Water under ballons":"14","furby? (looks like 2 balloons)":"11"}},"Pointer always active":{"note":"","data":["D0056FA0 0002","80056FA0 0082"],"options":null},"Press GS to Reset Player 2 score to 0":{"note":"","data":["8809D9C0 0000","8809D9C2 0000"],"options":null}},"E340A49C-74318D41-C:4A":{"Carry 20 Bombs At A Time":{"note":"","data":["800AEE0F 0014"],"options":null},"Have\\Pumped up Red Remote Bombs":{"note":"","data":["802AC653 0004"],"options":null},"Infinite\\Credits":{"note":"","data":["802AB85B 0009"],"options":null},"Infinite\\Energy\\Player 1":{"note":"","data":["800AEE07 0002"],"options":null},"Infinite\\Energy\\Player 2":{"note":"","data":["800AEECF 0002"],"options":null},"Infinite\\Energy\\Player 3":{"note":"","data":["800AEF97 0002"],"options":null},"Infinite\\Energy\\Player 4":{"note":"","data":["800AF05F 0002"],"options":null},"Infinite\\Gems":{"note":"","data":["802AB85F 0063"],"options":null},"Infinite\\Lives":{"note":"","data":["802AB857 0063"],"options":null},"Infinite\\Time":{"note":"","data":["802AB873 0001"],"options":null},"Invincible\\Player 1":{"note":"","data":["800AEE01 0001"],"options":null}},"E3AB4ED0-83040DD2-C:45":{"Away Team\\Infinite Time Outs":{"note":"","data":["80054ED6 0003"],"options":null},"Away Team\\No Time Outs Away":{"note":"","data":["80054ED6 0000"],"options":null},"Home Team\\Infinite Time Outs":{"note":"","data":["80054956 0003"],"options":null},"Home Team\\No Time Outs":{"note":"","data":["80054956 0000"],"options":null},"Infinite Creation Points":{"note":"","data":["8107B36E 03E7"],"options":null},"Infinite Time To Choose Play":{"note":"","data":["81081448 2800"],"options":null},"Max Acc":{"note":"","data":["8007526D 0064"],"options":null},"Max Cat":{"note":"","data":["8007527B 0063"],"options":null},"Max Clu":{"note":"","data":["80075275 0063"],"options":null},"Max End":{"note":"","data":["8007527D 0063"],"options":null},"Max Hnd":{"note":"","data":["80075279 0063"],"options":null},"Max Rcg":{"note":"","data":["80075273 0063"],"options":null},"Max Rng":{"note":"","data":["8007526F 0063"],"options":null},"Max Scr":{"note":"","data":["80075271 0063"],"options":null},"Max Spd":{"note":"","data":["80075277 0063"],"options":null}},"E3BD221D-3C0834D3-C:50":{"Have All Items\\What a night for a knight":{"note":"","data":["811BA010 0101","811BA012 0101","811BA014 0101","811BA016 0101","811BA018 0101"],"options":null},"Infinite Courage":{"note":"","data":["810BB096 0007"],"options":null}},"E3D6A795-2A1C5D3C-C:50":{"Big Options\\Big Gloves Mode":{"note":"","data":["800F407D 0001"],"options":null},"Big Options\\Big Head Mode":{"note":"","data":["800F407C 0001"],"options":null},"Empty Punch Meter\\Player 1":{"note":"","data":["8106B9E8 0000","8106B9EA 0000"],"options":null},"Empty Punch Meter\\Player 2":{"note":"","data":["8016BAF0 0000","8016BAF2 0000"],"options":null},"Full Punch Meter\\Player 1":{"note":"","data":["8106B9E8 0000","8106B9EA 0BB2"],"options":null},"Full Punch Meter\\Player 2":{"note":"","data":["8106B9E8 0000","8106B9EA 0BB2"],"options":null},"Have Full\\Power Bar":{"note":"","data":["810637AE 0064"],"options":null},"Have Full\\Speed Bar":{"note":"","data":["810637B2 0064"],"options":null},"Have Full\\Stamina Bar":{"note":"","data":["810637B6 0064"],"options":null},"Infinite Boxer Creation Points":{"note":"","data":["810637AA 0064"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["8106B974 42C8","8106B9DE 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["8106BAE4 42C8","8106BAE6 0000"],"options":null},"No Health\\Player 1":{"note":"","data":["8106B9DC 0000","8106B9DE 0000"],"options":null},"No Health\\Player 2":{"note":"","data":["8106BAE4 0000","8106BAE6 0000"],"options":null}},"E402430D-D2FCFC9D-C:45":{"16:9 Widescreen":{"note":"For 16:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81066246 3FE3","81066396 3FE3","810663FE 3FE3","8107037A 3740","81126714 3FE3"],"options":null},"21:9 Widescreen":{"note":"For 21:9 aspect ratios. Do not use with other widescreen enhancements or hacks.","data":["81066246 4018","81066396 4018","810663FE 4018","8107037A 370F","81126714 4018"],"options":null},"Alt Sixty Frames":{"note":"A friend informed me this didn't freeze","data":["80079E7A 0003"],"options":null},"Boss Cannot Move\\Dino":{"note":"","data":["811E0444 44A0"],"options":null},"Boss Cannot Move\\Octo":{"note":"","data":["811E0BAC 44A0"],"options":null},"Enable All Cheats":{"note":"Go into Options \u0026 then Magic Codes. Then Code list to turn off \u0026 on what you want.","data":["810E031C FFFF","810E031E FFFF"],"options":null},"Have All\\50 Bananas\\Ancient Lake":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3A1D 0032"],"options":null},"Have All\\50 Bananas\\Boulder Canyon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E693D 0032"],"options":null},"Have All\\50 Bananas\\Crescent Island":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E417D 0032"],"options":null},"Have All\\50 Bananas\\Darkmoon Caverns":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E645D 0032"],"options":null},"Have All\\50 Bananas\\Everfrost Peak":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E56AD 0032"],"options":null},"Have All\\50 Bananas\\Fossil Canyon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E6EBD 0032"],"options":null},"Have All\\50 Bananas\\Frosty Village":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E669D 0032"],"options":null},"Have All\\50 Bananas\\Greenwood Village":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E51FD 0032"],"options":null},"Have All\\50 Bananas\\Haunted Woods":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E516D 0032"],"options":null},"Have All\\50 Bananas\\Hot Top Volcano":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4D7D 0032"],"options":null},"Have All\\50 Bananas\\Jungle Falls":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E4C1D 0032"],"options":null},"Have All\\50 Bananas\\Pirate Lagoon":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E30AD 0032"],"options":null},"Have All\\50 Bananas\\Snowball Valley":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E514D 0032"],"options":null},"Have All\\50 Bananas\\Spacedust Alley":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E6C9D 0032"],"options":null},"Have All\\50 Bananas\\Spaceport Alpha":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E43BD 0032"],"options":null},"Have All\\50 Bananas\\Star City":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E5EDD 0032"],"options":null},"Have All\\50 Bananas\\Treasure Caves":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E3E6D 0032"],"options":null},"Have All\\50 Bananas\\Walrus Cove":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E51CD 0032"],"options":null},"Have All\\50 Bananas\\Whale Bay":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801E424D 0032"],"options":null},"Have All\\50 Bananas\\Windwill Plains":{"note":"Do not use more than 1 50 Bananas up at a time or it will cause a crash","data":["801EA30D 0032"],"options":null},"Have All\\99 Balloons":{"note":"","data":["810E058A FFFF","801FD3DD 0063"],"options":null},"Have All\\Amulets":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FD1D6 FFFF"],"options":null},"Have All\\Keys":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FD1C8 FFFF"],"options":null},"Have All\\Levels Completely Finished":{"note":"","data":["50000904 0000","801FD2E7 00FF","801FD30F 00FF","801FD317 00FF","50000404 0000","801FD31F 00FF","801FD33F 00FF","50000804 0000","801FD343 00FF"],"options":null},"Have All\\Silver Coins\\Ancient Lake":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E3BFA 0008"],"options":null},"Have All\\Silver Coins\\Boulder Canyon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E6B1A 0008"],"options":null},"Have All\\Silver Coins\\Crescent Island":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E435A 0008"],"options":null},"Have All\\Silver Coins\\Everfrost Peak":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E588A 0008"],"options":null},"Have All\\Silver Coins\\Fossil Canyon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E709A 0008"],"options":null},"Have All\\Silver Coins\\Frosty Village":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E687A 0008"],"options":null},"Have All\\Silver Coins\\Greenwood Village":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E53DA 0008"],"options":null},"Have All\\Silver Coins\\Haunted Woods":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E534A 0008"],"options":null},"Have All\\Silver Coins\\Hot Top Volcano":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E4F5A 0008"],"options":null},"Have All\\Silver Coins\\Jungle Falls":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E588A 0008"],"options":null},"Have All\\Silver Coins\\Pirate Lagoon":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E328A 0008"],"options":null},"Have All\\Silver Coins\\Snowball Valley":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E532A 0008"],"options":null},"Have All\\Silver Coins\\Treasure Caves":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E404A 0008"],"options":null},"Have All\\Silver Coins\\Walrus Cove":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E53AA 0008"],"options":null},"Have All\\Silver Coins\\Whale Bay":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801E442A 0008"],"options":null},"Have All\\Silver Coins\\Windmill Plains":{"note":"Do not use more than 1 Silver Coins up at a time or it will cause a crash","data":["801EA4EA 0008"],"options":null},"Have All\\The pieces of the TT thing":{"note":"","data":["801FD1D6 0004"],"options":null},"Have All\\Trophies":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["811FC9DE FFFF"],"options":null},"Infinite\\Power Ups\\Ancient Lake":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E717B 0010"],"options":null},"Infinite\\Power Ups\\Boulder Canyon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E949B 0010"],"options":null},"Infinite\\Power Ups\\Crescent Island":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E78DB 0010"],"options":null},"Infinite\\Power Ups\\Darkmoon Caverns":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E9DFB 0010"],"options":null},"Infinite\\Power Ups\\Everfrost Peak":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E8E6B 0010"],"options":null},"Infinite\\Power Ups\\Fossil Canyon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801EA61B 0010"],"options":null},"Infinite\\Power Ups\\Frosty Village":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E9DF6 0010"],"options":null},"Infinite\\Power Ups\\Greenwood Village":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E895B 0010"],"options":null},"Infinite\\Power Ups\\Haunted Woods":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E88CB 0010"],"options":null},"Infinite\\Power Ups\\Hot Top Volcano":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E4ECB 0010"],"options":null},"Infinite\\Power Ups\\Jungle Falls":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E4D0B 0010"],"options":null},"Infinite\\Power Ups\\Pirate Lagoon":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E5C06 0010"],"options":null},"Infinite\\Power Ups\\Snowball Valley":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E88AB 0010"],"options":null},"Infinite\\Power Ups\\Space Dust Alley":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E979B 0010"],"options":null},"Infinite\\Power Ups\\Spaceport Alpha":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E6EBB 0010"],"options":null},"Infinite\\Power Ups\\Starcity":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E963B 0010"],"options":null},"Infinite\\Power Ups\\Treasure Cove":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E75CB 0010"],"options":null},"Infinite\\Power Ups\\Walrus Cove":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E892B 0010"],"options":null},"Infinite\\Power Ups\\Whale Bay":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801E6DAB 0010"],"options":null},"Infinite\\Power Ups\\Windmill Plains":{"note":"For Track Race Only.Do not use more than 1 Infinite Power up at a time or it will cause a crash","data":["801ECE0B 0010"],"options":null},"Sixty Frames":{"note":"May freeze at some points,physics can get wonky with slopes on both codes.","data":["80079E7B 0003"],"options":null}},"E436467A-82DE8F9B-C:45":{"Always Place 1st":{"note":"","data":["8012955F 0001"],"options":null},"Driver Modifier (Champsionship Mode)":{"note":"","data":["812CBEC6 00??"],"options":{"Billy Boat #11":"02","Buddy Lazier #91":"04","Buzz Calkins #12":"08","Davey Hamilton #9":"05","Eddie Cheever Jr.#51":"03","Greg Ray #2":"01","Jeff Ward #21":"10","John Hollansworth Jr. #42":"13","Johnny Unser #92":"0E","Kenny Brack #14":"09","Mark Dismore #28":"0C","Robbie Buyl #22":"0A","Robby McGehee #55":"12","Robby Unser #81":"0F","Roberto Guerrero #50":"0D","Sam Schmidt #99":"06","Scott Goodyear #4":"00","Scott Sharp #8":"07","Stephan Gregoire #7":"11","Tyce Carison #20":"0B"}},"Max Exp (Gold Cup - All Classes Unlocked)":{"note":"With the 'Max Exp' codes for the Gold Cup, start a new file and leave it and go back to it again.","data":["81033918 7FFF","8103391A FFFF"],"options":null},"Unlock\\Formula Cars Part 1":{"note":"","data":["810230F0 0000","810230F2 0000","810230F4 0000","810230F6 0000"],"options":null},"Unlock\\Gold Cup 1st Upgrade":{"note":"","data":["81023100 0000","81023102 0000"],"options":null},"Unlock\\Gold Cup 2nd Upgrade":{"note":"","data":["81023104 0000","81023106 0000"],"options":null},"Unlock\\Sprint Car Class":{"note":"","data":["810230EE 0000","810230EC 0000"],"options":null}},"E43C9765-05B1C1BE-C:4A":{"Max HP":{"note":"","data":["812D71F8 03E7"],"options":null},"Max MP":{"note":"","data":["812D71FA 03E7"],"options":null},"Max Money":{"note":"","data":["811A70E9 0001","811A70EA 869F"],"options":null}},"E4906679-9F243F05-C:50":{"Max Score":{"note":"","data":["811D26A4 3B9A","811D26A6 C9FF"],"options":null},"Press L Button for Max Gauge\\Player 1":{"note":"","data":["D00B4171 0020","811D2602 0098"],"options":null},"Press L Button for Max Gauge\\Player 2":{"note":"","data":["D00B4177 0020","811D7A52 0098"],"options":null},"[Always Get Pieces Select]\\Player 1":{"note":"","data":["801D25F4 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}},"[Always Get Pieces Select]\\Player 2":{"note":"","data":["801D7A44 00??"],"options":{"Blue 'L'":"02","Blue 'T'":"05","Green 'Z'":"03","Orange 'L'":"01","Purple 'Z'":"04","Straight Piece":"00","Yellow Square":"06"}}},"E4B08007-A602FF33-C:50":{"Carrington Institute\\Have 255 targets destroyed":{"note":"","data":["810AD714 00FF"],"options":null},"Carrington Institute\\Have 999 points in Firing Range":{"note":"","data":["810AD712 03E7"],"options":null},"Carrington Institute\\Have Infinite time in Firing Range":{"note":"","data":["810AD70E 004D"],"options":null},"Have All\\Levels Complete \u0026 All Challenges":{"note":"Have All levels Complete on Solo Missions, \u0026 Acces all Challenges \u0026 CO-OP Levels","data":["50003C02 0000","800A27C1 0001","50001E1A 0000","80088A0D 0001","50001E1A 0000","80088A0E 0001","50001E1A 0000","80088A0F 0001","50001E1A 0000","80088A10 0001"],"options":null},"Have All\\Weapons\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["802037F0 0007","801EA7F0 0007","801D17F0 0007"],"options":null},"Have All\\Weapons\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80205460 0007","801EC460 0007","801D3460 0007"],"options":null},"Infinite\\Ammo\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80202F7F 00FF","801E9F7F 00FF","801D0F7F 00FF","802027DB 00FF","801E97DB 00FF","801D07DB 00FF"],"options":null},"Infinite\\Ammo\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["80204BEF 00FF","801EBBEF 00FF","801D2BEF 00FF","8020444B 00FF","801EB44B 00FF","801D244B 00FF"],"options":null},"Infinite\\Health\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["8120205C 3F80","811E905C 3F80","811D005C 3F80"],"options":null},"Infinite\\Health\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81203CCC 3F80","811EACCC 3F80","811D1CCC 3F80"],"options":null},"Infinite\\Shield\\Player 1":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81202070 3F80","811E9070 3F80","811D0070 3F80"],"options":null},"Infinite\\Shield\\Player 2":{"note":"This code is for all Low/High Res Solo \u0026 Multi-Player Level ;) Enjoy","data":["81203CE0 3F80","811EACE0 3F80","811D1CE0 3F80"],"options":null},"Press B To Levitate\\Single \u0026 Co-Op\\Player 1":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D00980C4 0040","81202000 40F2","D00980C4 0040","80201FB3 0000","D00980C4 0040","811E9000 40F2","D00980C4 0040","801E8FB3 0000","D00980C4 0040","811D0000 40F2","D00980C4 0040","801CFFB3 0000"],"options":null},"Single \u0026 Co-Op\\Press B To Levitate\\Player 2":{"note":"To activate the moon jump you must Hold B while in the air. You can get in the air by going down steps, or hills or by going off the edge of something","data":["D1099FB6 4000","81203C70 40F2","D1099FB6 4000","81203C23 0000","D1099FB6 4000","811EAC70 40F2","D1099FB6 4000","811EAC23 0000","D1099FB6 4000","811D1C70 40F2","D1099FB6 4000","811D1C23 0000"],"options":null}},"E616B5BC-C9658B88-C:45":{"Fast Sixty":{"note":"Too fast.","data":["800FF71F 0001","800FF7B7 0001","800FF84F 0001"],"options":null},"Have All\\Cups Select":{"note":"","data":["50002C02 0000","800CCE11 00??"],"options":{"Bronze Cup":"02","Gold Cup":"00","None (Default)":"04","Silver Cup":"01"}},"Have All\\Points":{"note":"","data":["810D8EE0 03E7"],"options":null},"Have All\\RB Medals":{"note":"","data":["810D8EF0 03E7"],"options":null},"Infinite\\Credits":{"note":"","data":["800BDEA5 0005"],"options":null},"Infinite\\Timer":{"note":"","data":["810D8F88 44E9"],"options":null},"Infinite\\Turbos":{"note":"To enable this just select On or Off and when you press Z you will use your Turbos accordantly. Warning you can only have Infinite if you have some turbo level to begin with","data":["D00F2C16 0020","800CCF91 00??"],"options":{"Off":"00","On":"08"}},"Laps To Race":{"note":"Here you can select how many laps you prefer.to race","data":["800C8809 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","7 Laps":"07","8 Laps":"08","9 Laps":"09","Laps":"06"}},"[Cheat Menu]":{"note":"Press Pause to access cheats.","data":["800CCF89 00FF","800CCF8A 00FF","800CCF8B 00FF"],"options":null},"[Press F9]\\Enable All Courses":{"note":"","data":["890CCDF2 0B00","890CCDF4 0B00","890CCDF6 0B00"],"options":null},"[Press F9]\\Extra Characters":{"note":"","data":["890C632F 01FF"],"options":null},"[Press F9]\\Progress 100%":{"note":"","data":["50000801 0000","880CCE00 0003","50000801 0000","880CCE01 00FF"],"options":null}},"E6419BC5-69011DE3-C:45":{"Always Have Retreat \u0026 Elem Pedra Opened":{"note":"Do not put this on until in-game or the game will freeze.","data":["D01A1C72 0000","811A1C72 0003"],"options":null},"Day Always 00":{"note":"","data":["811F106C 0000"],"options":null},"Finish All Levels":{"note":"","data":["81196A86 5454","81196A88 5140","81196A8A 4555","81196A8C 9514","81196A8E 5515"],"options":null},"Hour Always":{"note":"","data":["80196A2D 00??"],"options":{"(0 Hour - 24:00 PM - Midnight)":"00","(01:00 AM)":"01","(02:00 AM)":"02","(03:00 AM)":"03","(04:00 AM)":"04","(05:00 AM)":"05","(06:00 AM)":"06","(07:00 AM)":"07","(08:00 AM)":"08","(09:00 AM)":"09","(10:00 AM)":"0A","(11:00 AM)":"0B","(12:00 PM - Noon)":"0C","(13:00 - 1 PM)":"0D","(14:00 - 2 PM)":"0E","(15:00 - 3 PM)":"0F","(16:00 - 4 PM)":"10","(17:00 - 5 PM)":"11","(18:00 - 6 PM)":"12","(19:00 - 7 PM)":"13","(20:00 - 8 PM)":"14","(21:00 - 9 PM)":"15","(22:00 - 10 PM)":"16","(23:00 - 11 PM)":"17"}},"Infinite Goth":{"note":"","data":["81196A6E FFFF"],"options":null},"Magnus\\Infinite HP":{"note":"","data":["81193C10 03E7"],"options":null},"Magnus\\Level 99":{"note":"","data":["80193C0B 0063"],"options":null},"Magnus\\Max Agi":{"note":"","data":["81193C1C 03E7"],"options":null},"Magnus\\Max Dex":{"note":"","data":["81193C1E 03E7"],"options":null},"Magnus\\Max HP":{"note":"","data":["81193C0E 03E7"],"options":null},"Magnus\\Max Int":{"note":"","data":["81193C18 03E7"],"options":null},"Magnus\\Max Mem":{"note":"","data":["81193C1A 03E7"],"options":null},"Magnus\\Max Str":{"note":"","data":["81193C14 03E7"],"options":null},"Magnus\\Max Vit":{"note":"","data":["81193C16 03E7"],"options":null},"Max Goth":{"note":"","data":["81196A6C 0098","81196A6E 967F"],"options":null},"Open All Paths":{"note":"","data":["81196A80 01FF","81196A82 677F","81196A84 FCFF"],"options":null}},"E688A5B8-B14B3F18-C:50":{"Have All\\Boards":{"note":"","data":["81082B24 0003","81082B26 FFFF"],"options":null},"Have All\\Characters":{"note":"","data":["81082B18 07FF"],"options":null},"Have All\\Difficulties":{"note":"","data":["81082B10 0700"],"options":null},"Have All\\Tracks":{"note":"","data":["81082B1C BFFE"],"options":null},"Low Timer":{"note":"","data":["80082A04 0000","80182A06 0000"],"options":null},"Max\\50000 Stunt Points":{"note":"","data":["81082AD8 C350"],"options":null},"[Audio Fix]":{"note":"","data":["81051840 AD99"],"options":null}},"E68A000E-639166DD-C:50":{"Access All Remote Controls\\Red Remotes":{"note":"Opens Gate 4 And The Lions Mouth","data":["50000E01 0000","800C513E 0007"],"options":null},"All Silver \u0026 Gold Gold Remotes":{"note":"Opens Gate 3,2,1","data":["810C5164 0FFF","810C5166 FFFF","810C5168 01E0","810C516A 007F"],"options":null},"Fully Charged Gex":{"note":"Press L Button Once When On One Of The Specific Levels, For Circuit Central Levels Only","data":["D00AAAB9 0020","81163CDE 32FF"],"options":null},"Hover \u0026 Fly Mode":{"note":"Press And Hold L Button + A Button","data":["D10BED04 0020","8114ECA2 0010","D10BED04 0010"],"options":null},"Infinite Air Codes\\Pain In The Asteroids":{"note":"","data":["D00BED05 0004","8133CBEE 012B"],"options":null},"Infinite Air Codes\\Umpire Strikes Out":{"note":"","data":["D00BED05 0004","8136608E 012B"],"options":null},"Infinite Health":{"note":"","data":["800C50CB 0063"],"options":null},"Infinite Lives":{"note":"","data":["810C50C6 0063"],"options":null}},"E6A95A4F-BAD2EA23-C:45":{"Have\\Max Gold":{"note":"","data":["50000401 0000","80277335 00FF"],"options":null},"Have\\Max Total XP":{"note":"","data":["50000401 0000","80278BAD 00FF"],"options":null},"Have\\Max Total XP Remaning to Start":{"note":"This will give you 16777215 Total XP Remaning to start with and after your 1st batle will allow you to buy your Max Stats","data":["50000401 0000","80278BB1 00FF"],"options":null},"Infinite\\99 Health Potions":{"note":"Do Not put this cheat on until you have collected your 1st Health Potion from the 1st Cheat or you will not be able to get into the Sub menu and Continue the game.","data":["802785CB 0063"],"options":null},"Infinite\\Max Health":{"note":"","data":["80278B98 001E"],"options":null},"Lagfix High Rez":{"note":"","data":["800D7F16 000D"],"options":null},"Lagfix Lo Res":{"note":"Game natively runs 60fps already,just needed that extra push.","data":["800E5392 000D"],"options":null}},"E73C7C4F-AF93B838-C:4A":{"Flashing Invincible":{"note":"This cheat Makes you Flash But you cant be harmed,Once out of danger Turn the cheat off to stop the flashing.also do not put this on if you have already been hurt or you will stay on the floor.","data":["800AB5C7 000A"],"options":null},"Have\\Fire Bombs":{"note":"","data":["800AB59B 0003"],"options":null},"Have\\Kick Bombs Anytime":{"note":"","data":["800AB5A3 0003"],"options":null},"Have\\Max Fire Level":{"note":"","data":["800AB593 0003"],"options":null},"Infinite\\Bombs":{"note":"","data":["800AB5B8 0003"],"options":null},"Infinite\\Continue Time":{"note":"","data":["810B3B36 0090"],"options":null},"Infinite\\Health":{"note":"","data":["800AB5BF 0005"],"options":null},"Infinite\\Money":{"note":"","data":["810A9BB2 FFFF"],"options":null}},"E7D20193-C1158E93-C:50":{"A Few Extra Cars":{"note":"","data":["811270AA FFFF"],"options":null},"Access All Cars":{"note":"","data":["811270A4 FFFF","811270A6 FFFF"],"options":null},"Allways 1st":{"note":"","data":["8111B14A 0000"],"options":null},"Bonus Tracks":{"note":"","data":["811270AE FFFF"],"options":null},"Infinite Turbos":{"note":"","data":["8111B39C 0800"],"options":null},"Max Tournament Points":{"note":"","data":["811270B6 03E7"],"options":null},"Mirror Mode":{"note":"","data":["801270CE 0001"],"options":null},"Race At Night":{"note":"","data":["801270CF 0080"],"options":null}},"E86415A6-98395B53-C:50":{"Have Infinite\\99 Blue Ammo":{"note":"","data":["800CEA16 0063"],"options":null},"Have Infinite\\99 Blue Power (1UP)":{"note":"","data":["800CEA2A 0063"],"options":null},"Have Infinite\\99 Engery Pickups":{"note":"","data":["800CEA0C 0063"],"options":null},"Have Infinite\\99 Gas":{"note":"","data":["800CEA3E 0063"],"options":null},"Have Infinite\\99 Grenades":{"note":"","data":["800CEA34 003F"],"options":null},"Have Infinite\\99 Yellow Ammo":{"note":"","data":["800CEA20 0063"],"options":null},"Have\\All Magic":{"note":"","data":["800CEB48 0010","800CEB4D 0000","800CEB57 0001","800CEB61 0002","800CEB6B 0003","800CEB75 0005","800CEB7F 0006","800CEB89 0008","800CEB93 0009","800CEB9D 000B","800CEBA7 000E","800CEBB1 000F","800CEBBB 0010","800CEBC5 0011","800CEBCF 000A","800CEBD9 000C","800CEBE3 000D"],"options":null},"Have\\Magic On Level 4":{"note":"","data":["810C8CDD FFFF","810C8CDE FFFF","810C8CDF FFFF","810C8CE0 FFFF","810C8CE1 FFFF","810C8CE2 FFFF"],"options":null},"Have\\Max Armour Level":{"note":"","data":["800C8D00 0064"],"options":null},"Have\\Max Experience Level":{"note":"","data":["800C8CFC 00FF"],"options":null},"Have\\Max Spirit Level":{"note":"","data":["800C8D04 0064"],"options":null},"Have\\Max Weapon Level":{"note":"","data":["800C8D02 0064"],"options":null},"Have\\Weapons On Max Upgrade":{"note":"","data":["800C8CAC 0009","800C8CB4 0009","800C8CBC 0009","800C8CC4 0009"],"options":null},"Infinite Air Under Water":{"note":"","data":["800C8BE4 0069"],"options":null},"Infinite Max\\999 Lives":{"note":"","data":["810C8CF8 03E8"],"options":null},"Infinite Max\\Fire Ammo":{"note":"","data":["800C8CB3 0066"],"options":null},"Infinite Max\\Fusion Ammo":{"note":"","data":["800C8CC3 0066"],"options":null},"Infinite Max\\Health":{"note":"","data":["800C8AD9 0066"],"options":null},"Infinite Max\\Ionic Ammo":{"note":"","data":["800C8CBB 0066"],"options":null},"Infinite Max\\Light Ammo":{"note":"","data":["800C8CAB 0066"],"options":null},"Infinite Max\\Mana":{"note":"","data":["800C8CFF 0066"],"options":null},"Infinite Throwing Weapon Ammo":{"note":"","data":["800CF57D 0063"],"options":null},"Play As Select":{"note":"","data":["800FCEC5 00??"],"options":{"Ike Hawkings (Corporal)":"00","Julia Chase (Cartographer)":"02","Karma (The Ex-Deviant)":"03","Max Havok (Chief Enginer)":"04","Mr Bodybolt (7th Passenger)":"06","Solaar (Archbishop)":"05","Sophia Hawkings (Stowaway)":"01"}},"Press A For Bionic Jump":{"note":"This will make you jump to a great height","data":["D00C8BCA 0080","810C8AE8 ????"],"options":{"Max Jump":"0800","Medium Jump":"0250"}}},"E896092B-DC244D4E-C:45":{"Player 1\\Infinite Free Spins":{"note":"","data":["800B999B 0001"],"options":null},"Player 1\\Max Cash":{"note":"","data":["810B9990 FFFF"],"options":null},"Player 1\\No Cash":{"note":"","data":["810B9992 0000"],"options":null},"Player 2\\Infinite Free Spins":{"note":"","data":["800B9AAF 0001"],"options":null},"Player 2\\Max Cash":{"note":"","data":["810B9AA4 FFFF"],"options":null},"Player 2\\No Cash":{"note":"","data":["810B9AA6 0000"],"options":null},"Player 3\\Infinite Free Spins":{"note":"","data":["800B9BC3 0001"],"options":null},"Player 3\\Max Cash":{"note":"","data":["810B9BB8 FFFF"],"options":null},"Player 3\\No Cash":{"note":"","data":["810B9BB8 0000"],"options":null}},"E8C95AFC-35D121DA-C:45":{"99 Gems":{"note":"","data":["80305449 0063","80648FA9 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000302 0000","81305868 0063","50000304 0000","81305872 0063","5000020E 0000","81305882 0063","50000302 0000","816493C8 0063","50000304 0000","816493D2 0063","5000020E 0000","816493E2 0063","80648F65 0000","806493D1 0063"],"options":null},"Infinite\\Health":{"note":"","data":["80305446 0064","80648FA6 0064"],"options":null},"Infinite\\Lives":{"note":"","data":["80648FAB 0009"],"options":null},"Infinite\\Oxygen":{"note":"","data":["806495BD 0000"],"options":null}},"E8C95AFC-35D121DA-C:50":{"99 Gems":{"note":"","data":["80305449 0063","80648FA9 0063"],"options":null},"Infinite\\Ammo":{"note":"","data":["50000302 0000","81305868 0063","50000304 0000","81305872 0063","5000020E 0000","81305882 0063","50000302 0000","816493C8 0063","50000304 0000","816493D2 0063","5000020E 0000","816493E2 0063","80648F65 0000","806493D1 0063"],"options":null},"Infinite\\Health":{"note":"","data":["80305446 0064","80648FA6 0064"],"options":null},"Infinite\\Lives":{"note":"","data":["80648FAB 0009"],"options":null},"Infinite\\Oxygen":{"note":"","data":["806495BD 0000"],"options":null}},"E8E5B179-44AA30E8-C:45":{"Freeze Timer":{"note":"","data":["80163ABF 000A"],"options":null},"Infinite 99 Lives":{"note":"","data":["80163AC7 0063"],"options":null},"Infinite Lives (Retro Frogger)":{"note":"","data":["8025AC2F 0005"],"options":null}},"E8FC8EA1-9F738391-C:45":{"Always Hole In One":{"note":"","data":["8115E1D6 0000"],"options":null},"Big Head":{"note":"","data":["810AE840 401F"],"options":null},"Change Looks Of Liltiger":{"note":"","data":["800B0BC4 0011"],"options":null},"Character Unlock\\Bengal The Tiger":{"note":"","data":["800B0BC2 0010"],"options":null},"Character Unlock\\Bobby":{"note":"","data":["800B0BC6 0001"],"options":null},"Character Unlock\\Cindy":{"note":"","data":["800B0BBA 0001"],"options":null},"Character Unlock\\Festus":{"note":"","data":["800B0BD3 0001"],"options":null},"Character Unlock\\Kimmi":{"note":"","data":["800B0BBA 0010"],"options":null},"Character Unlock\\Mark":{"note":"","data":["800B0BC7 0012"],"options":null},"Character Unlock\\Marvin The Alien":{"note":"","data":["800B0BD7 0001"],"options":null},"Character Unlock\\Robert \u0026 Delvis":{"note":"","data":["800B0BCA 0011"],"options":null},"Character Unlock\\Starr":{"note":"","data":["800B0BCE 0010"],"options":null},"Character Unlock\\Traci (Leopard Costume)":{"note":"","data":["800B0BCE 0011"],"options":null},"Character Unlock\\Twfan \u0026 Eagamer":{"note":"","data":["800B0BBE 0011"],"options":null},"Inventory\\Max Accuracy \u0026 Skipper":{"note":"","data":["800B4410 00FF"],"options":null},"Inventory\\Max Distance \u0026 Wind Cutter":{"note":"","data":["800B4412 00FF"],"options":null},"Inventory\\Max Mystery":{"note":"","data":["800B4420 00F0"],"options":null},"Inventory\\Max No Bounce \u0026 Tee Up":{"note":"","data":["800B4411 00FF"],"options":null},"Inventory\\Max Spinner \u0026 Burrow":{"note":"","data":["800B4413 00FF"],"options":null}},"E9219533-13FBAFBD-C:45":{"Championship Mode\\Infinite Money":{"note":"","data":["810F81CA FFFF"],"options":null},"Championship Mode\\Max Dexterity":{"note":"","data":["810F81D8 447A","810F81DA 0000"],"options":null},"Championship Mode\\Max Endurance":{"note":"","data":["810F81D4 447A","810F81D6 0000"],"options":null},"Championship Mode\\Max Experience":{"note":"","data":["810F81DC 447A","810F81DE 0000"],"options":null},"Championship Mode\\Max Money":{"note":"","data":["810F81C8 7FFF","810F81CA FFFF"],"options":null},"Championship Mode\\Max Stamina":{"note":"","data":["810F81D0 447A","810F81D2 0000"],"options":null},"Championship Mode\\Max Strength":{"note":"","data":["810F81CC 447A","810F81CE 0000"],"options":null},"Championship Mode\\Top Rank":{"note":"","data":["810F81BA 000A"],"options":null},"Enable Extra Characters":{"note":"","data":["80101E6F 0003","80101E73 0003","80101E77 0003","80101E7B 0003","80101E7F 0003","80101E83 0003","80101E87 0003"],"options":null},"Infinite\\Health\\Player 1":{"note":"Do not use this with No Health","data":["810FF6B6 0064"],"options":null},"Infinite\\Health\\Player 2":{"note":"Do not use this with No Health","data":["81100316 0064"],"options":null},"Infinite\\Stamina\\Player 1":{"note":"Do not use this with No Stamina","data":["810FF6BA 0064"],"options":null},"Infinite\\Stamina\\Player 2":{"note":"Do not use this with No Stamina","data":["8110031A 0064"],"options":null},"Infinite\\Time":{"note":"","data":["810FE352 0E10"],"options":null},"Max RUMBLE\\Player 1":{"note":"Do not use this with Never RUMBLE","data":["810FF6C2 0090"],"options":null},"Max RUMBLE\\Player 2":{"note":"Do not use this with Never RUMBLE","data":["81100322 0090"],"options":null},"Never RUMBLE\\Player 1":{"note":"Do not use this with Max RUMBLE","data":["810FF6C2 0000"],"options":null},"Never RUMBLE\\Player 2":{"note":"Do not use this with Max RUMBLE","data":["81100322 0000"],"options":null},"No Health\\Player 1":{"note":"Do not use this with Infinite Health","data":["810FF6B6 0000"],"options":null},"No Health\\Player 2":{"note":"Do not use this with Infinite Health","data":["81100316 0000"],"options":null},"No Stamina\\Player 1":{"note":"Do not use this with Infinite Stamina","data":["810FF6BA 0000"],"options":null},"No Stamina\\Player 2":{"note":"Do not use this with Infinite Stamina","data":["8110031A 0000"],"options":null},"Win 1 Fight to Complete Arcade Mode":{"note":"","data":["80101F0B 000B"],"options":null}},"E97955C6-BC338D38-C:50":{"All Equipment Upgrades":{"note":"","data":["801E6BBD 0023","811E6C0A 201B","801E6B9C 004F"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D03DDFDB 0000","801E6B52 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Bottles\\Bottle 1 Modifier":{"note":"","data":["801E6BD2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["801E6BD3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["801E6BD4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["801E6BD5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 5 Modifier":{"note":"","data":["801E6BD6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Bottles\\Bottle 6 Modifier":{"note":"","data":["801E6BD7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Event Item\\Modifier 1":{"note":"","data":["801E6BC5 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 2":{"note":"","data":["801E6BCB 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Event Item\\Modifier 3":{"note":"","data":["801E6BD1 00??"],"options":{"Land Title Deed":"29","Letter To Kafei":"2F","Moon's Tear":"28","Mountain Title Deed":"2B","Ocean Title Deed":"2C","Pendant Of Memories":"30","Room Key":"2D","Special Delivery To Mama":"2E","Swap Title Deed":"2A"}},"Have Item Modifier":{"note":"","data":["801E6BD0 00??"],"options":{"Great Fairy's Sword":"10","Japanese Bow?":"4A","Japanese Flute?":"05","Japanese Hookshot?":"11","Japanese Item?":"0B","Japanese Scroll?":"31"}},"Have\\All Masks":{"note":"","data":["811E6BD8 3E39","811E6BDA 4745","811E6BDC 4032","811E6BDE 3A46","811E6BE0 3842","811E6BE2 4833","811E6BE4 3C3D","811E6BE6 373F","811E6BE8 3634","811E6BEA 4341","811E6BEC 3B44","811E6BEE 4935"],"options":null},"Have\\Bombchu":{"note":"","data":["801E6BC7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801E6BC6 0006"],"options":null},"Have\\Deku Nuts":{"note":"","data":["801E6BC9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801E6BC8 0008"],"options":null},"Have\\Fire Arrow":{"note":"","data":["801E6BC2 0002"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801E6BD0 0010"],"options":null},"Have\\Have\\Ocarina of Time":{"note":"","data":["801E6BC0 0000"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801E6BC1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801E6BCF 000F"],"options":null},"Have\\Ice Arrow":{"note":"","data":["801E6BC3 0003"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801E6BCE 000E"],"options":null},"Have\\Light Arrow":{"note":"","data":["801E6BC4 0004"],"options":null},"Have\\Magic Beans":{"note":"","data":["801E6BCA 000A"],"options":null},"Have\\Pictograph":{"note":"","data":["801E6BCD 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801E6BCC 000C"],"options":null},"Have\\QuestStatus Items":{"note":"","data":["801E6C0D 0005","811E6C0E F7CF"],"options":null},"Infinite\\Health":{"note":"","data":["811E6B86 03E7"],"options":null},"Infinite\\Hearts Options":{"note":"If you need to clear the Infinite Max Hearts from the screen just choose the 6 or 4 Heart Options, take off the cheat \u0026 then make a save.","data":["811E6B84 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Items":{"note":"This is Infinite use of Bombs,Bombchus,Deku Sticks,Deku Nuts,Magic Beans,\u0026 Powder Kegs. But you must also put it's Have on to work.","data":["801E6BF1 0063","801E6BF6 0063","801E6BF7 0063","801E6BF8 0063","801E6BF9 0063","801E6BFA 0063","801E6BFC 0063","801E6BFB 0063","801E6BFD 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801E6B89 0060","811E6B90 0101"],"options":null},"Infinite\\Rupees":{"note":"","data":["811E6B8A 03E7"],"options":null},"Play As":{"note":"","data":["801E6B70 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03DDFDB 0020","813F72B8 40CB"],"options":null},"Replace Sword With":{"note":"Only put the Deity Link's Sword on, if using The Play As Fierce Deity Link Code, if not it will turn Fierce Deity Link into a crazed slashing Machine. You Have\\been warned.","data":["801E6B9C 00??"],"options":{"Deity Link's Sword":"50","Fire Arrow w/ Bow":"4A","Guilded Sword":"4F","Ice Arrow w/ Bow":"4B","Kokiri Sword":"4D","Light Arrow w/ Bow":"4C","Razor Sword":"4E"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01F2D56 0008","811E6B66 FFFD","D01F2D56 0004","811E6B66 0000","D01F2D56 0002","811E6B66 FFFE"],"options":null},"Use all C Buttons":{"note":"","data":["811EAA68 0000","811EAA6A 0000"],"options":null},"Warp Modifier":{"note":"Put this code on and it will now take where you wanted to go, turn it back off or it will infinite loop entering all the time.","data":["803DDFDA 0000","803F6835 0001","813F683A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"EA06F8C3-07C2DEED-C:46":{"Character Select":{"note":"","data":["80075F52 00??"],"options":{"Big Head.":"04","Flame Grilled":"08","Normal":"00","Play as Deadwing.":"01"}},"Have All\\Cheats: Book of Shadows":{"note":"","data":["81075F4E 0FFF"],"options":null},"Have All\\Dark Souls Collected":{"note":"","data":["80075F49 0078"],"options":null},"Have All\\Gads \u0026 The Poign":{"note":"","data":["80030E57 000F"],"options":null},"Have All\\Items":{"note":"","data":["50001B20 0000","80030613 000B"],"options":null},"Have All\\L-Eclipser":{"note":"You will not miss out any part of the game for having all parts of LEclipsers with a new game","data":["50000320 0000","80030973 000B"],"options":null},"Have All\\Levels Unlocked":{"note":"","data":["5000101C 0000","80030A0E 0001"],"options":null},"Infinite\\0.9mm Ammo":{"note":"","data":["81075B3A 0190"],"options":null},"Infinite\\Accumulators":{"note":"","data":["800306D7 0005"],"options":null},"Infinite\\Cadeaux'":{"note":"","data":["81075B36 03E7"],"options":null},"Infinite\\Max Health/Air/Shadow Charge \u0026 Voodoo Power":{"note":"","data":["50000604 0000","81075B16 2710"],"options":null},"Infinite\\Prisms":{"note":"","data":["80030957 0003"],"options":null},"Infinite\\Retractors":{"note":"","data":["800308B7 0003"],"options":null},"Infinite\\Shotgun Shells":{"note":"","data":["80075B2F 0063"],"options":null},"Infinite\\Violator Ammo":{"note":"","data":["81075B32 03E7"],"options":null},"Press L To Levitate":{"note":"Press the L-Button to rise and let go and press again in stages to come back down.","data":["D0059097 0020","80075578 0041"],"options":null},"[Ammo Always Displayed On Screen]":{"note":"","data":["50000408 0000","80075ACD 0007"],"options":null},"[Health Meter Displayed On Screen]":{"note":"","data":["81075B10 0000","81075B12 00FF"],"options":null}},"EA71056A-E4214847-C:45":{"Have All Cars":{"note":"","data":["50000D01 0000","80191298 001F"],"options":null},"Have All Characters \u0026 Levels":{"note":"","data":["81181572 01C0"],"options":null},"Level Select":{"note":"","data":["80190150 00??"],"options":{"Aircraft Graveyard":"04","Canyonlands":"09","Casino City":"08","Ghost Town":"05","Hoover Dam":"06","Oil Fields":"03","Sand Factory":"02","Secret Base":"01","Ski Resorts":"0A","Super Dreamland 64":"00","Valley Farms":"07"}},"Play As\\Player 1":{"note":"","data":["80186AE0 00??"],"options":{"\"Y\" The Alien":"0C","Beezwax":"09","Boogie":"08","Chassey Blue":"00","Convoy":"05","Dave":"04","Houston 3":"07","John Torque":"03","Loki":"06","Molo":"0A","Sheila":"02","Sid Burn":"0B","Slick Clyde":"01"}},"Play As\\Player 2":{"note":"","data":["80186AE1 00??"],"options":{"\"Y\" The Alien":"0C","Beezwax":"09","Boogie":"08","Chassey Blue":"00","Convoy":"05","Dave":"04","Houston 3":"07","John Torque":"03","Loki":"06","Molo":"0A","Sheila":"02","Sid Burn":"0B","Slick Clyde":"01"}}},"EAB7B429-BAC92C57-C:45":{"Have All Characters":{"note":"","data":["5000125C 0000","810EC938 0000","5000125C 0000","810EC93A 0003"],"options":null},"Infinite\\Money":{"note":"","data":["810EC932 FFFF"],"options":null},"Infinite\\Time":{"note":"","data":["810E7596 0E10"],"options":null},"Player 1\\Health":{"note":"","data":["810D9F78 0000","810D9F7A 00??"],"options":{"Infinite":"64","No Health":"00"}},"Player 1\\RUMBLE":{"note":"","data":["810D9F84 0000","810D9F86 00??"],"options":{"Max":"30","Never Rumble":"00"}},"Player 1\\Stamina":{"note":"","data":["810D9F7C 0000","810D9F7E 00??"],"options":{"Infinite":"64","No Stamina":"00"}},"Player 2\\Health":{"note":"","data":["810DA790 0000","810DA792 00??"],"options":{"Infinite":"64","No Health":"00"}},"Player 2\\RUMBLE":{"note":"","data":["810DA7A0 0000","810DA7A2 00??"],"options":{"Max":"30","Never Rumble":"00"}},"Player 2\\Stamina":{"note":"","data":["810DA794 0000","810DA796 00??"],"options":{"Infinite":"64","No Stamina":"00"}},"Sudden Death Mode\\Player 1":{"note":"","data":["D00E7596 03D7","810DAF78 0000","810D9F7A 0001"],"options":null},"Sudden Death Mode\\Player 2":{"note":"","data":["D00E7596 03D7","810DA790 0000","810DA792 0001"],"options":null}},"EAE6ACE2-020B4384-C:50":{"2X Secondary Weapons":{"note":"","data":["8104C62A 0080"],"options":null},"Access All Platinium Medals":{"note":"","data":["50001301 0000","8004C63D 0004"],"options":null},"Accuracy 100%":{"note":"","data":["8105C896 0064","8105C89A 0064"],"options":null},"Advanced Weapons,Shields \u0026 Extra Ships":{"note":"","data":["8104C636 00FF"],"options":null},"Always Pass Mission":{"note":"","data":["8105C88E 0001"],"options":null},"Bonus Collected":{"note":"Where Bonus Are Available","data":["8005C89F 0002"],"options":null},"Completion Time 0:00":{"note":"","data":["8105C892 0000"],"options":null},"Enemies Destroyed 756":{"note":"","data":["8005C89D 03E7"],"options":null},"Friendly Saves 756":{"note":"","data":["8005C89E 03E7"],"options":null},"Infinite Lives":{"note":"","data":["80067553 03E7"],"options":null},"Level Select":{"note":"","data":["8004C650 0013"],"options":null},"Lives Remaining 756":{"note":"","data":["8005C8A0 03E7"],"options":null}},"EB38F792-190EA246-C:45":{"Away Team\\Infinite Time-Outs":{"note":"","data":["800738E7 0003"],"options":null},"Away Team\\No Time-Outs":{"note":"","data":["800738E7 0000"],"options":null},"Have 99 Tokens":{"note":"","data":["8115F9F0 0063"],"options":null},"Have All\\Cards":{"note":"","data":["50007802 0000","8115F9F2 FFFF"],"options":null},"Have All\\Cheats":{"note":"","data":["50000402 0000","81070788 FFFF"],"options":null},"Have All\\Levels Completed":{"note":"","data":["50001902 0000","8115FB2C FFFF"],"options":null},"Have All\\Stadiums":{"note":"","data":["50000802 0000","81061850 FFFF"],"options":null},"Have All\\Teams":{"note":"","data":["50001102 0000","810C1628 FFFF"],"options":null},"Home Team\\Infinite Time-Outs":{"note":"","data":["80071617 0003"],"options":null},"Home Team\\No Time-Outs":{"note":"","data":["80071617 0000"],"options":null}},"EBA949DC-39BAECBD-C:49":{"Access All Levels":{"note":"","data":["8008A9D6 0001","8008A9EA 0001","8008AA12 0001","8008AA62 0001","8008AA76 0001","8008AA8A 0001","8008AA9E 0001","8008AAB2 0001","8008AAC6 0011","8008AADA 0021","8008AAEE 0001","8008AB16 0011","8008AB2A 0041","8008AB3E 0021","8008AB52 0081","8008AB66 0001","8008AB7A 0081","8008AB8E 0001","8008ABB6 0001","8008ABDE 0001","8008ABF2 0011","8008AC06 0021","8008AC56 0001","8008AF3A 0001","8008AF4E 0001","8008AF62 0001","8008AF76 0001"],"options":null},"Freeze All Timers":{"note":"","data":["81094150 0063","81094152 0063","81094154 0063"],"options":null},"Infinite\\Ammo All Guns":{"note":"","data":["50000610 0000","800A9297 00FF"],"options":null},"Infinite\\Health":{"note":"","data":["810866C2 FFFF"],"options":null},"Invincibility":{"note":"","data":["810864C4 0101"],"options":null},"Walk Through Walls \u0026 Objects":{"note":"This will allow you to pass through anything \u0026 even walk on water.if you amerge somewhere in the ground just press the A button.","data":["80094305 00??"],"options":{"Off":"00","On":"80"}},"Weapon Select":{"note":"","data":["800A92B5 00??","800A92C5 00??","800A92D5 00??"],"options":{"9MM Hi Power":"00","Blow Dart Gun":"0B","Blow Torch":"36","Dart Hand Gun":"0C","Electrostunner":"27","Fire Extinguisher":"1F","Fists":"03","Gas Spray":"32","Mini Rocket Launcher":"2D","Silenced Pistol":"01","Spray Paint":"24","Uzi":"02"}}},"EBEEA8DB-F2ECB23C-C:45":{"Infinite Shot Clock":{"note":"","data":["801378DF 0016"],"options":null},"Infinite Turbo\\Team 1\\Player 1":{"note":"","data":["8115B512 FF00"],"options":null},"Infinite Turbo\\Team 1\\Player 2":{"note":"","data":["8115B516 FF00"],"options":null},"Infinite Turbo\\Team 2\\Player 1":{"note":"","data":["8115B50A FF00"],"options":null},"Infinite Turbo\\Team 2\\Player 2":{"note":"","data":["8115B50E FF00"],"options":null},"Infinite Violation Clock":{"note":"","data":["8013783B 005D"],"options":null},"Team 1 Score Select":{"note":"","data":["80137117 00??"],"options":{"00":"00","150":"96"}},"Team 2 Score Select":{"note":"","data":["80137113 00??"],"options":{"00":"00","150":"96"}}},"EBFE2397-FF74DA34-C:45":{"Always Have Rapid Shot":{"note":"This is a constant fire without a break as long as you keep pressing A","data":["800B51AB 0009"],"options":null},"Infinite\\Lives":{"note":"","data":["800B51DD 0063"],"options":null},"Infinite\\Points":{"note":"","data":["810B51E2 FFFF"],"options":null},"Infinite\\Shields":{"note":"","data":["810B51B6 0001"],"options":null},"Secondary Weapon Select":{"note":"B Button Weapon infinite ammo","data":["800B519F 00??"],"options":{"Diagonal Burst":"20","Horizontal Left":"0C","Horizontal Right":"0D","Swarm Missiles":"1A","Vertical Burst":"06"}},"[Unlock All Modes}":{"note":"Enable this as so as you load the game.This Unlocks Classic and Maniacle Mode. To get to Classic Mode you pr ess Right on Player 1. To get to Maniacle Mode, go to Options and press Left on Normal Mode. This can be disabled once saved to mempak.","data":["80070217 0003"],"options":null}},"EC0F690D-32A7438C-C:4A":{"Enable All Levels":{"note":"This is needed to be able to Play all Levels of the Game","data":["810C18E2 0006"],"options":null},"Have\\Apples Bombs and Flute":{"note":"","data":["803A7DAF 0004"],"options":null},"Have\\Rapid Fire Apples and Bombs":{"note":"","data":["8036D1C7 0000"],"options":null},"Press L\\To Stop On Level 1 Beach":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","80201035 0001"],"options":null},"Press L\\To Stop On Level 2 Tunnel":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","801DCB95 0001"],"options":null},"Press L\\To Stop On Level 3 Volcano":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","801FB505 0001"],"options":null},"Press L\\To Stop On Level 4 River":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","801EE8ED 0001"],"options":null},"Press L\\To Stop On Level 5 Cave":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","80201165 0001"],"options":null},"Press L\\To Stop On Level 6 Valley":{"note":"To Activate this Cheat Code, Press L To Stop \u0026 Press Start to Continue Again.","data":["D00484B1 0020","801D89FD 0001"],"options":null}},"EC417312-EB31DE5F-C:4A":{"All Equipment Upgrades":{"note":"","data":["801EF4CD 0023","811EF51A 201B"],"options":null},"Beta World 1":{"note":"Put on the code on load up,After the Nintendo logo you will be in that place of Choice.you can also choose another place \u0026 then press F1 (reset) to go to that place this is for beta interest only it will not assist you in playing the game.","data":["D01FB9E1 0000","801EF462 00??"],"options":{"?":"95","Beneaf the Graveyard":"02","Cave Portal to Last Boss Field":"74","Cave with Steaming Water":"DA","Counter Of The Tresure Chest Shop":"24","Fearful Spider House":"01","Giant Lizards in a Cave":"D9","Giant Turtle In the Temple non beta":"8A","Green Blobs":"71","Hungry Goran in the Snow":"96","Ledge in The Royal Palace of the Deku Kingdom":"4C","Mama's House non Beta":"00","Outside Magic Hag's Potion Shop":"08","Outside Tourist Information Southern Swamp":"06","Path to Romani Ranch non Beta":"38","Recieving Deku Mask non Beta":"B9","Recieving Gorans Mask non Beta":"94","Room of Miau \u0026 Tijo Zora Great Hall":"8B","Southern Swamp Mr Tingle Entry":"03","Southern Swamp Woods Of Mystery Entry":"0A","Spider Hand":"32","Statue in Stone Tower":"A2","Statue outside Gorman Track":"35","Statue outside Lair Of The Temples Boss":"36","Stone Tower non Beta":"A6","Vamps House In Ikana Canyon":"FF","Waterfall Sothern Swamp":"7F","Woodfall Temple non Beta":"2E","inside The Royal Palace of the Deku Kingdom 1":"4E","outside The Royal Palace of the Deku Kingdom":"4A"}},"Have All\\Masks":{"note":"","data":["801EF4E8 005A","801EF4E9 0055","801EF4EA 0063","801EF4EB 0061","801EF4EC 005C","801EF4ED 004E","801EF4EE 0056","801EF4EF 0062","801EF4F0 0054","801EF4F1 005E","801EF4F2 0064","801EF4F3 004F","801EF4F4 0058","801EF4F5 0059","801EF4F6 0053","801EF4F7 005B","801EF4F8 0052","801EF4F9 0050","801EF4FA 005F","801EF4FB 005D","801EF4FC 0057","801EF4FD 0060","801EF4FE 0065","801EF4FF 0051"],"options":null},"Have All\\Quest Status Items":{"note":"","data":["801EF51D 0005","811EF51E F7CF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["801EF4D2 0002"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["801EF4D3 0003"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["801EF4D4 0004"],"options":null},"Have\\Bombchu":{"note":"","data":["801EF4D7 0007"],"options":null},"Have\\Bombs":{"note":"","data":["801EF4D6 0006"],"options":null},"Have\\Bottle Modifier\\1":{"note":"","data":["801EF4E2 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\2":{"note":"","data":["801EF4E3 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\3":{"note":"","data":["801EF4E4 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\4":{"note":"","data":["801EF4E5 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\5":{"note":"","data":["801EF4E6 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Bottle Modifier\\6":{"note":"","data":["801EF4E7 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"15","Bug":"1B","Chateau Romani":"25","Deku Princess":"17","Empty Bottle":"12","Empty Japanese Bottle?":"27","Fairy":"16","Fish":"1A","Gold Dust":"22","Green Potion":"14","Hot Spring Water":"20","Japanese Bottle?":"26","Magical Mushroom":"23","Milk":"18","Milk (1/2)":"19","Poe":"1D","Red Potion":"13","Sea Horse":"24","Spring Water":"1F","Zora Egg":"21"}},"Have\\Deku Nuts":{"note":"","data":["801EF4D9 0009"],"options":null},"Have\\Deku Sticks":{"note":"","data":["801EF4D8 0008"],"options":null},"Have\\Great Fairy's Sword":{"note":"","data":["801EF4E0 0010"],"options":null},"Have\\Hero's Bow":{"note":"","data":["801EF4D1 0001"],"options":null},"Have\\Hookshot":{"note":"","data":["801EF4DF 000F"],"options":null},"Have\\Lens of Truth":{"note":"","data":["801EF4DE 000E"],"options":null},"Have\\Magic Beans":{"note":"","data":["801EF4DA 000A"],"options":null},"Have\\Ocarina of Time":{"note":"","data":["801EF4D0 0000"],"options":null},"Have\\Pictograph":{"note":"","data":["801EF4DD 000D"],"options":null},"Have\\Powder Kegs":{"note":"","data":["801EF4DC 000C"],"options":null},"Infinite\\Arrows":{"note":"","data":["801EF501 0063"],"options":null},"Infinite\\Bombchus":{"note":"","data":["801EF507 0063"],"options":null},"Infinite\\Bombs":{"note":"","data":["801EF506 0063"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["801EF509 0063"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["801EF508 0063"],"options":null},"Infinite\\Health":{"note":"","data":["811EF496 0140"],"options":null},"Infinite\\Hearts Options":{"note":"","data":["811EF494 ????"],"options":{"4 Hearts":"0043","6 Hearts":"0063","Max Hearts":"0140"}},"Infinite\\Magic Beans":{"note":"","data":["801EF50A 0063"],"options":null},"Infinite\\Max \u0026 Double Magic Meter":{"note":"","data":["801EF499 0060","811EF4A0 0101"],"options":null},"Infinite\\Powder Kegs":{"note":"","data":["801EF50C 0063"],"options":null},"Infinite\\Rupees":{"note":"","data":["811EF49A 03E7"],"options":null},"Play As":{"note":"","data":["801EF480 00??"],"options":{"Deku Link":"03","Fierce Deity Link":"00","Goron Link":"01","Normal Link":"04","Zora Link":"02"}},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D03E6D0B 0020","81400008 40CB"],"options":null},"Replace Sword With":{"note":"","data":["801EF4AC 00??"],"options":{"Deity Link's Sword":"10","Fire Arrow w/ Bow":"02","Hero's Bow":"00","Ice Arrow w/ Bow":"03","Light Arrow w/ Bow":"04"}},"Time Control":{"note":"Control the speed of time with the D-pad. Up stops the time, left enables double time, and down restores the notmal speed.","data":["D01FBA40 0008","811EF476 FFFD","D01FBA40 0004","811EF476 0000","D01FBA40 0002","811EF476 FFFE"],"options":null},"Warp Modifier":{"note":"Put this code on and press the start button and it will now take where you wanted to go, turn it back off after you have got there.","data":["D05EC55A 0000","803FF545 0001","813FF54A ????"],"options":{"Beneath the Graveyard (left entrance)":"001F","Beneath the Graveyard (right entrance)":"002F","Boat Cruise (picture taking)":"00AF","Clock Tower (w/ skull kid - silent)":"260E","Curiosity Shop":"0E00","East Clock Down":"D214","Final Boss Arena":"0015","Honey \u0026 Darlings Shop":"000E","Ikana Canyon Entrance":"0E38","Lens of Truth Cave (get it)":"1500","Magic Hags Potion Shop":"0008","Mama's House":"000B","Mayors Residence":"0010","Path to Ikana Canyon":"0078","Romani Ranch":"6214","Romani Ranch Barn":"000A","Snowhead (Path to temple - warp in)":"B214","Southern Swamp (From Ikana Canyon)":"00CF","Southern Swamp (From Owl Warp)":"00FE","Southern Swamp (From Potion Shop)":"009F","Southern Swamp (From Spider House)":"00CE","Southern Swamp (From Woods of Mystery)":"00CD","Southern Swamp (Reg Entrance)":"0030","Southern Swamp (from Deku Palace)":"006F","Southern Swamp (from Deku Place 2)":"009E","Southern Swamp (from Woodfall)":"006E","Southern Swamp (from tour house)":"004F","Stone Tower Temple (Boss Room Entrance)":"2609","Stone Tower Temple (Upside down)":"2600","Stone Tower Temple (endless fall)":"2610","Treasure Chest Shop":"2604","Treausre Chest Shop (counter)":"2605","Zora Shop":"9214"}}},"EC58EABF-AD7C7169-C:45":{"Chunky\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FCB0C 0064"],"options":null},"Chunky\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FCB16 0064"],"options":null},"Chunky\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FCB14 0064"],"options":null},"Chunky\\All Golden Bananas\\DK Isle":{"note":"","data":["817FCB18 0064"],"options":null},"Chunky\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FCB0E 0064"],"options":null},"Chunky\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FCB12 0064"],"options":null},"Chunky\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FCB10 0064"],"options":null},"Chunky\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FCB0A 0064"],"options":null},"Chunky\\Infinite Coins":{"note":"","data":["817FCACE 03E7"],"options":null},"Chunky\\Infinite Musical Instrument":{"note":"","data":["817FCAD0 000A"],"options":null},"Diddy\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC9F2 0064"],"options":null},"Diddy\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC9FC 0064"],"options":null},"Diddy\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC9FA 0064"],"options":null},"Diddy\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC9FE 0064"],"options":null},"Diddy\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC9F4 0064"],"options":null},"Diddy\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FC9F8 0064"],"options":null},"Diddy\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC9F6 0064"],"options":null},"Diddy\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC9F0 0064"],"options":null},"Diddy\\Infinite Coins":{"note":"","data":["817FC9B4 03E7"],"options":null},"Diddy\\Infinite Musical Instrument":{"note":"","data":["817FC9B6 000A"],"options":null},"Donkey Kong\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FC994 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FC99E 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FC99C 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\DK Isle":{"note":"","data":["817FC9A0 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FC996 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FC998 03E7"],"options":null},"Donkey Kong\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FC992 03E7"],"options":null},"Donkey Kong\\Has Moves":{"note":"","data":["817FC950 0103"],"options":null},"Donkey Kong\\Have Weapon":{"note":"","data":["817FC952 0103"],"options":null},"Donkey Kong\\Infinite Ammo":{"note":"","data":["807FCC45 0096"],"options":null},"Donkey Kong\\Infinite Bananas\\Angry Aztec":{"note":"","data":["817FC95C 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Creepy Castle":{"note":"","data":["817FC966 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Crystal Caves":{"note":"","data":["817FC964 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\FactoryLevel":{"note":"","data":["817FC95E 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Fungi Forest":{"note":"","data":["817FC962 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Galleon Level":{"note":"","data":["817FC9BE 03E7"],"options":null},"Donkey Kong\\Infinite Bananas\\Jungle Japes":{"note":"","data":["817FC95A 03E7"],"options":null},"Donkey Kong\\Infinite Coins":{"note":"","data":["817FC956 03E7"],"options":null},"Donkey Kong\\Infinite Musical Instrument":{"note":"","data":["817FC954 0103","817FC958 00FF"],"options":null},"Free Pass (Access All Areas)":{"note":"This is exactly what it says, You can walk through Any Locked Door,Gate, Or Area. Have Fun.","data":["8066D226 0001","8066D321 0001"],"options":null},"Infinite\\Camera Film":{"note":"","data":["807FCC49 0005"],"options":null},"Infinite\\Crystal Coconuts":{"note":"","data":["807FCB87 0096"],"options":null},"Infinite\\Health":{"note":"","data":["817FCC4C 041F"],"options":null},"Infinite\\Orange Bombs":{"note":"","data":["807FCC41 0096"],"options":null},"Lanky\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FCA50 0064"],"options":null},"Lanky\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FCA5A 0064"],"options":null},"Lanky\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FCA58 0064"],"options":null},"Lanky\\All Golden Bananas\\DK Isle":{"note":"","data":["817FCA5C 0064"],"options":null},"Lanky\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FCA52 0064"],"options":null},"Lanky\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FCA56 0064"],"options":null},"Lanky\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FCA54 0064"],"options":null},"Lanky\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FCA4E 0064"],"options":null},"Lanky\\Infinite Coins":{"note":"","data":["817FCA12 03E7"],"options":null},"Lanky\\Infinite Musical Instrument":{"note":"","data":["817FCA14 000A"],"options":null},"Tiny\\All Golden Bananas\\Angry Aztecs":{"note":"","data":["817FCAAE 0064"],"options":null},"Tiny\\All Golden Bananas\\Creepy Castle":{"note":"","data":["817FCAA8 0064"],"options":null},"Tiny\\All Golden Bananas\\Crystal Caves":{"note":"","data":["817FCAB6 0064"],"options":null},"Tiny\\All Golden Bananas\\DK Isle":{"note":"","data":["817FCABA 0064"],"options":null},"Tiny\\All Golden Bananas\\Frantic Factory":{"note":"","data":["817FCAB0 0064"],"options":null},"Tiny\\All Golden Bananas\\Fungi Forest":{"note":"","data":["817FCAB4 0064"],"options":null},"Tiny\\All Golden Bananas\\Gloomy Galleon":{"note":"","data":["817FCAB2 0064"],"options":null},"Tiny\\All Golden Bananas\\Jungle Japes":{"note":"","data":["817FCAAC 0064"],"options":null},"Tiny\\Infinite Coins":{"note":"","data":["817FCA70 03E7"],"options":null},"Tiny\\Infinite Musical Instrument":{"note":"","data":["817FCA72 000A"],"options":null}},"EC7011B7-7616D72B-C:45":{"Always Have Wallet Size":{"note":"","data":["8011A672 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C84B5 0010","8111B936 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011B4B9 00FF","8011B92F 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C84B5 0000","8011B9E3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest 01).","data":["80025614 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011A656 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011A657 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011A658 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011A659 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Dark Link\\Make Dark Link Apear In TOT":{"note":"","data":["8023E80F 0020","8023E815 0033"],"options":null},"Dark Link\\Play As Dark Link":{"note":"","data":["D01C84B5 0020","811DAB60 801E","D01C84B5 0020","811F2C24 801D","D01C84B5 0020","811F2C26 AA30","D01C84B5 0020","811CA0E4 801E","D01C84B5 0020","811CA0E6 4B60","D01C84B5 0020","811E4B60 0000","D01C84B5 0020","811E4B62 02FF","D01C84B5 0020","811DAA30 0033","D01C84B5 0020","811DAA32 0901","D01C84B5 0020","811DAB62 27E0","D01C84B5 0020","811E4C90 8009","D01C84B5 0020","811E4C92 7740","D01C84B5 0020","811C8710 801E","D01C84B5 0020","811C8712 4B60"],"options":null},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801F2208 0005","801EEC88 0005"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.","data":["8011A672 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011A673 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011A671 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A66C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A674 30FF","8111A676 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011A648 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011A64E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011A654 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011A64C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011A646 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011A650 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011A645 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011A644 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011A647 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011A64A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011A64D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011A651 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011A652 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011A649 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011A64F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011A655 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011A653 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011A64B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011A65F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011A678 0007","8011A679 0007","8011A67A 0007","8011A67B 0007","8011A67C 0007","8011A67D 0007","8011A67E 0007","8011A67F 0007","8011A680 0007","8011A681 0007","8011A682 0007","8011A68F 0009","8011A690 0009","8011A691 0009","8011A692 0009","8011A693 0009","8011A699 0009","8011A69C 0009","8011A697 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011A664 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011A65E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011A65D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011A662 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011A65C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111A600 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011A609 0008","8011A60A 0001","8011A60C 0001","8011A603 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011A66A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111B99C 0001"],"options":null},"Infinite\\Timers\\All Other Timers":{"note":"This cheat works on all Race Timers not the final Boss and Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011B9A5 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C84B5 0020","811DAA90 40CB","D01C84B5 0000","811DB2B2 000D","8011A640 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011A69F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011A6A1 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111A5FE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111B998 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L+R For FMV Select":{"note":"Hold down `L+R' after the Nintendo logo is spinning to see your favourite FMV","data":["D01C84B5 0030","8111A5D2 00A0","D01C84B5 0030","8111A5DA ????"],"options":{"Ending":"FFF8","Fire FMV":"FFF5","Ganondorf FMV":"FFF6","More Triforce FMV":"FFF7","Planet Making FMV":"FFF4","Triforce FMV":"FFF2","fire FMV":"FFF1"}},"Press L\\For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C84B5 0020","811DB2B2 000D"],"options":null},"Press L\\To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C84B5 0020","811DAA90 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C84B5 0010","8011A5D7 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111A5DC ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011A65A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011A65B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011A640 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011A60E 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111B7F2 0000","8111B7F4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}},"Widescreen":{"note":"Originally by Darkludx","data":["81024A18 1000","81024A1A 0023","810920D8 3C07","810920DA 3FE3"],"options":null}},"EC7011B7-7616D72B-C:4A":{"Always Have Wallet Size":{"note":"","data":["8011A672 00??"],"options":{"Adult Wallet (Holds 200)":"57","Giant Wallet (Holds 500)":"67","Kid Wallet (Holds 99)":"47"}},"Beta\\Appear in Strange Places (Hold R)":{"note":"If you go to an area where Link is immobile or invisible, using the \"appear in strange places\" code will almost always fix it, but you'll start somewhere outside of the Arena and in air. I recommend using the infinite step Hover boots code already supplied with PJ64 so you can float back into the arena in the event that this happens.","data":["D01C84B5 0010","8111B936 0001"],"options":null},"Beta\\Interface always off/on":{"note":"If you go to an area where the interface is accessible, this signigfies that you're not in 'beta' mode anymore. Using the \"interface always off/on\" code, you can stay in 'beta' mode regardless of what happens. This may cause more crashes in SOME areas, but it's rare and is not too severe. If you need to explore a beta area with the interface, \"use the interface always on\" portion of the code. Don't use the codes as you start the game. If you need the interface on/off at a specific time, start the game, go to the area, activate the code, keep it on until next reset.","data":["8011B4B9 00FF","8011B92F 00??"],"options":{"Off":"00","On":"01"}},"Beta\\Play Beta Quest Worlds":{"note":"Put on the code on load up,After the Nintendo logo you will be in Beta Mode,There are no icons, energy bar etc. on the screen.When you press a C-Buttton you can use an object.Here the objects for the C-Buttons:C-left: arrows, C-down: bombs, C-right: Ocarina of Time. There is also no Navi and start menu.When you go to some places the game will freeze or you can't move.","data":["D01C84B5 0000","8011B9E3 00??"],"options":{"World 01":"00","World 02":"01","World 03":"02","World 04":"03","World 05":"04","World 06":"07","World 07":"08","World 08":"16"}},"Beta\\Specific things lean":{"note":"This code will cause all items on a specific plane to lean. This is helpful for areas in which the plane causes the crash (Ex. Weird Zora's Fountain Beta Quest 01).","data":["80025614 0001"],"options":null},"Bottles\\Bottle 1 Modifier":{"note":"","data":["8011A656 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 2 Modifier":{"note":"","data":["8011A657 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 3 Modifier":{"note":"","data":["8011A658 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Bottles\\Bottle 4 Modifier":{"note":"","data":["8011A659 00??"],"options":{"Big Poe":"1E","Blue Fire":"1C","Blue Potion":"17","Bottled Fairy":"18","Bug":"1D","Empty Bottle":"14","Fish":"19","Green Potion":"16","Letter":"1B","Lon Lon Milk":"1A","Lon Lon Milk (Half)":"1F","Poe":"20","Red Potion":"15"}},"Epona\\Max Carrots\\Lon Lon Raunch":{"note":"This is For Practicing,Racing.Warning take this off before jumping the exit fence after winning Epona","data":["801D8BCA 0006","801F2208 0001","801EEC88 0001"],"options":null},"Equipment Modifier 1":{"note":"This modifies the equipment you are carrying.If you Use Black Gauntlets,They are as strong as the Golden Gauntlets. This code also gives you the Silver Scale and the Golden Scale and unlimited rupees.","data":["8011A672 00??"],"options":{"Black Gauntlets":"35","Bullet Bag (Holds 30)":"40","Bullet Bag (Holds 40)":"80","Bullet Bag (Holds 50)":"C0","Giant's Knife (Broken)":"06","Golden Scale":"04","Silver Scale":"02"}},"Equipment Modifier 2":{"note":"This modifies the equipment you are carrying.","data":["8011A673 00??"],"options":{"Bomb Bag (Holds 20)":"08","Bomb Bag (Holds 30)":"10","Bomb Bag (Holds 40)":"18","Golden Gauntlets":"30","Goron's Bracelet":"20","Silver Gauntlets":"28"}},"Have Quiver (Holds 30)":{"note":"","data":["8011A671 0001"],"options":null},"Have\\All Equipment":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A66C 7777"],"options":null},"Have\\All Quest Status Items":{"note":"This cheat causes the Goron Temple door not to open, but if you go to the very top of the mountain where the fairy is, next to her entrance is another one in to the fire temple.once inside put on the hover boots \u0026 infinite hover cheat to hover over to the ledge on the left hand side.From here you can carry on the game as normal","data":["8111A674 30FF","8111A676 FFFF"],"options":null},"Have\\Arrows\\Fire Arrow":{"note":"","data":["8011A648 0004"],"options":null},"Have\\Arrows\\Ice Arrow":{"note":"","data":["8011A64E 000C"],"options":null},"Have\\Arrows\\Light Arrow":{"note":"","data":["8011A654 0012"],"options":null},"Have\\Bombchu":{"note":"","data":["8011A64C 0009"],"options":null},"Have\\Bombs":{"note":"","data":["8011A646 0002"],"options":null},"Have\\Boomerang":{"note":"","data":["8011A650 000E"],"options":null},"Have\\Deku Nut":{"note":"","data":["8011A645 0001"],"options":null},"Have\\Deku Stick":{"note":"","data":["8011A644 0000"],"options":null},"Have\\Fairy Bow":{"note":"","data":["8011A647 0003"],"options":null},"Have\\Fairy Slingshot":{"note":"","data":["8011A64A 0006"],"options":null},"Have\\Hookshot":{"note":"","data":["8011A64D 00??"],"options":{"Hookshot":"0A","Longshot":"0B"}},"Have\\Lens of Truth":{"note":"","data":["8011A651 000F"],"options":null},"Have\\Magic Beans":{"note":"","data":["8011A652 0010"],"options":null},"Have\\Magic\\Din's Fire":{"note":"","data":["8011A649 0005"],"options":null},"Have\\Magic\\Fairie's Wind":{"note":"","data":["8011A64F 000D"],"options":null},"Have\\Magic\\Nayru's Love":{"note":"","data":["8011A655 0013"],"options":null},"Have\\Megaton Hammer":{"note":"","data":["8011A653 0011"],"options":null},"Have\\Ocarina":{"note":"","data":["8011A64B 00??"],"options":{"Fairy Ocarina":"07","Ocarina Of Time":"08"}},"Infinite\\Arrows":{"note":"","data":["8011A65F 0009"],"options":null},"Infinite\\Big Key,Small Keys,Compass,\u0026 Map":{"note":"","data":["8011A678 0007","8011A679 0007","8011A67A 0007","8011A67B 0007","8011A67C 0007","8011A67D 0007","8011A67E 0007","8011A67F 0007","8011A680 0007","8011A681 0007","8011A682 0007","8011A68F 0009","8011A690 0009","8011A691 0009","8011A692 0009","8011A693 0009","8011A699 0009","8011A69C 0009","8011A697 0009"],"options":null},"Infinite\\Bombchu's":{"note":"","data":["8011A664 0009"],"options":null},"Infinite\\Bombs":{"note":"","data":["8011A65E 0009"],"options":null},"Infinite\\Deku Nuts":{"note":"","data":["8011A65D 0009"],"options":null},"Infinite\\Deku Seeds":{"note":"","data":["8011A662 0009"],"options":null},"Infinite\\Deku Sticks":{"note":"","data":["8011A65C 0009"],"options":null},"Infinite\\Energy":{"note":"","data":["8111A600 0140"],"options":null},"Infinite\\Magic":{"note":"","data":["D011A609 0008","8011A60A 0001","8011A60C 0001","8011A603 0060"],"options":null},"Infinite\\Magic Beans":{"note":"","data":["8011A66A 0009"],"options":null},"Infinite\\Rupees":{"note":"This cheat allows you to have the max Rupees to the Wallet you currently Hold","data":["8111B99C 0001"],"options":null},"Infinite\\Timers\\All other Timers":{"note":"This cheat works on all Race Timers.Under Water with iron Boots etc.","data":["8011B9A1 0032"],"options":null},"Infinite\\Timers\\Escape From Gannons Tower":{"note":"This cheat works only on The Final Boss.","data":["8011B9A5 00B4"],"options":null},"Instant Step Hoover Boots":{"note":"Take off from Anywhere \u0026 to go higher just press L Once, this will lift you higher while walking.to come back Down Keep R pressed.Once you have enabled the code press Start \u0026 then start again.","data":["D01C84B5 0020","811DAA90 40CB","D01C84B5 0000","811DB2B2 000D","8011A640 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Goron Tunic \u0026 Hover Boots":"32","Kokiri Tunic \u0026 Hover Boots":"31","White Tunic \u0026 Hover Boots":"35","Yellow Tunic \u0026 Hover Boots":"36","Zora Tunic \u0026 Hover Boots":"33"}},"Max\\Double Defense Power":{"note":"This gives you White Border Hearts","data":["8011A69F 0014"],"options":null},"Max\\Gold Skulltulas Killed":{"note":"","data":["8011A6A1 0064"],"options":null},"Max\\Heart Containers":{"note":"","data":["8111A5FE 0140"],"options":null},"Nayru's Love is Always":{"note":"For this to work On Or off, you have to walk through a Doorway to activate the Change.","data":["8111B998 ????"],"options":{"OFF":"0000","ON":"FFFF"}},"Press L For infinite Hover Boots":{"note":"Press L For Infinite Hover Boots \u0026 Let go to land,This Only works when you have the Boots on","data":["D01C84B5 0020","811DB2B2 000D"],"options":null},"Press L To Levitate":{"note":"Press L To Levitate \u0026 Let go to land","data":["D01C84B5 0020","811DAA90 40CB"],"options":null},"Press R\\For Old Or Young Link":{"note":"To Activate this Cheat Hold The R Button when walking through a Doorway this will change you to the option on the other side, Disable this Cheat straight away after getting to the other side, in some places you might even get Access Violations. Just press ok untill you can carry on.","data":["D01C84B5 0010","8011A5D7 00??"],"options":{"Link Old":"00","Link Young":"01"}},"Time of Day Modifier":{"note":"","data":["8111A5DC ????"],"options":{"At Sunrise":"4000","At Sunset":"C000","Daylight Out":"5800","Fairly Dark":"D000","Very Bright Out":"7000"}},"Trading\\Adult Link Item":{"note":"","data":["8011A65A 00??"],"options":{"Claim Check":"37","Cojiro":"2F","Eye Drops":"36","Eyeball Frog":"35","Goron's Sword (Broken)":"33","Odd Mushroom":"30","Odd Potion":"31","Poacher's Saw":"32","Pocket Cucco":"2E","Pocket Egg":"2D","Prescription":"34"}},"Trading\\Young Link Item":{"note":"","data":["8011A65B 00??"],"options":{"Bunny Hood":"27","Chicken":"22","Gerudo Mask":"2A","Goron Mask":"28","Keaton Mask":"24","Mask of Truth":"2B","SOLD OUT":"2C","Skull Mask":"25","Spooky Mask":"26","Weird Egg":"21","Zelda's Letter":"23","Zora Mask":"29"}},"Tunic \u0026 Boot Options":{"note":"This changes what you are wearing,once you have enabled the code press Start \u0026 then start again.","data":["8011A640 00??"],"options":{"Black Tunic \u0026 Hover Boots":"34","Black Tunic \u0026 Iron Boots":"24","Black Tunic \u0026 Kokiri Boots":"14","Goron Tunic \u0026 Hover Boots":"32","Goron Tunic \u0026 Iron Boots":"22","Goron Tunic \u0026 Kokiri Boots":"12","Kokiri Tunic \u0026 Hover Boots":"31","Kokiri Tunic \u0026 Iron Boots":"21","Kokiri Tunic \u0026 Kokiri Boots":"11","White Tunic \u0026 Hover Boots":"35","White Tunic \u0026 Iron Boots":"25","White Tunic \u0026 Kokiri Boots":"15","Yellow Tunic \u0026 Hover Boots":"36","Yellow Tunic \u0026 Iron Boots":"26","Yellow Tunic \u0026 Kokiri Boots":"16","Zora Tunic \u0026 Hover Boots":"33","Zora Tunic \u0026 Iron Boots":"23","Zora Tunic \u0026 Kokiri Boots":"13"}},"Turn Giant's Knife Into Biggoron's Sword":{"note":"","data":["8011A60E 0001"],"options":null},"Use Any Item In Any House":{"note":"do not use under or in water","data":["8111B7F2 0000","8111B7F4 0000"],"options":null},"Warp Song Location\\Bolero of Fire":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Bearded Man's House":"4B","Castle Courtyard":"03","Dampe's Race":"4F","Death Mountain Crater":"F6","Dodongo's Cavern Boss":"0B","Fishing Pond":"5F","Ganon First Battle":"1F","Ganon's Castle":"FD","Ganon's Castle Room Before Ganon":"28","Ganon's Castle Tower":"1C","Goron City Lost Woods Entrance":"E3","Great Fairy Fountain":"C2","Hyrule Castle Gate":"7F","Inside Ganon's Castle":"68","Inside Ganon's Castle Room With Pillar":"2B","Inside The Deku Tree Boss":"10","Kokiri Forest":"57","Lon Lon Ranch":"2F","Lost Woods Bridge Field Entrance":"DE","Lost Woods Goron Entrance":"D6","Lost Woods River Entrance":"DA","Mido's House":"33","Outside Saria's House":"47","Saria's House":"37","Shadow Temple Boss":"14","Top of Death Mountain":"5B","Top of Ganon's Castle":"40","Top of Ganon's Tower":"BA","Water Temple Boss":"17"}},"Warp Song Location\\Minuet of Forest \u0026 Serenade of Water":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Dodongo's Cavern":"18","Inside Jabu Jabu's Belly":"15","Inside The Deku Tree":"68","Lake Hylia":"04","Sacred Forest Meadow":"00"}},"Warp Song Location\\Prelude of Light \u0026 Nocturne of Shadow":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Bazaar":"2C","Bombchu Bowling Alley":"07","Bombchu Shop":"28","Bottom of the Well":"D3","Burning Castle":"6C","Castle Courtyard":"F1","Death Mountain Trail":"64","Forest Temple":"84","Ganon Final Battle":"17","Ganon's Castle":"38","Ganon's Tower":"34","Gerudo Fortress Jail":"F8","Graveyard":"68","Great Fairy Fountain 1":"78","Great Fairy Fountain 2":"88","Grotto 01":"99","Grotto 02":"9D","Grotto 04":"A4","Grotto 05":"A8","Grotto 06":"B3","Grotto 07":"B0","Grotto 08":"B4","Grotto 09":"B8","Grotto 10":"C3","Grotto 11":"C0","Grotto 12":"C4","Grotto 13":"FC","Happy Mask Shop":"30","House of Skulltula":"50","Ice Cavern":"D8","In Front of Deku Tree":"E8","Inside Spirit Door":"4C","Kakariko Village":"14","Kakariko Windmill":"03","Lon Lon Ranch Chicken Room":"E4","Lon Lon Ranch Outside Shed":"D3","Lon Lon Ranch Shed":"D0","Lost Woods Bridge":"E0","Outside Cow Pen":"E3","Royal Family's Tomb":"74","Spirit Temple Boss":"EB","Temple of Time":"F4","Thieves' Hideout":"70","Top of Ganon's Tower":"1D","Zelda \u0026 Impa Flee":"0F"}},"Warp Song Location\\Requiem of Spirit":{"note":"For this cheat to work,You have to have the Ocarina \u0026 Songs. make your choice \u0026 Play the song of the cheat name to get where you chose.","data":["8011B965 00??"],"options":{"Death Mountain Trail":"BE","Death Mountain Trail Entrance":"92","Desert Colossus":"F1","Fire Temple":"65","Forest Temple":"69","Ganon's Castle":"3A","Ganon's Castle Inside Burning Castle":"79","Gerudo Fortress":"28","Gerudo Valley":"18","Gerudo Valley Entrance":"8E","Goron City":"C1","Goron City Entrance":"BA","Graveyard Entrance":"95","Haunted Wasteland":"30","Hyrule Castle":"38","Hyrule Field":"FD","Hyrule Market (Adult Link's)":"CF","Hyrule Market (Child Link's)":"CD","Kakariko Village Entrance":"7E","Kokiri Forest Entrance":"85","Lake Hylia":"05","Lake Hyrule Entrance":"8A","Lakeside Laboratory":"C5","Lon Lon Ranch Entrance":"FA","Lost Woods":"1E","Shooting Gallery":"6E","Top of Ganon's Castle":"C9","Zora's Domain":"08","Zora's Domain Entrance":"9E","Zora's Fountain Entrance":"A2","Zora's River Entrance":"7B"}}},"ECBD95DD-1FAB637D-C:0":{},"ED567D0F-38B08915-C:4A":{"Widescreen":{"note":"Boards in 4:3.","data":["8101FB1A 3FE3","810538D4 080C","810538D6 0074","810538D8 3C1B","810538DA 3FAB","813001D0 449B","813001D2 6000","813001D4 460C","813001D6 0002","813001D8 4606","813001DA 0002","813001DC 0801","813001DE 4E37","813001E0 2400"],"options":null}},"ED98957E-8242DCAC-C:45":{"All Bosses 1 Hit Deaths":{"note":"","data":["811BE482 0000"],"options":null},"Enable\\Max Power Mode":{"note":"","data":["8015D417 0001"],"options":null},"Flashlight Mod":{"note":"","data":["80179448 00??"],"options":{"Off":"00","On":"01"}},"Have All\\Weapons,Items \u0026 Infinite Ammo\\Player 1":{"note":"","data":["8017AA9F 001E","8017AAB3 0008","8017AAB7 0009","801587C4 0009","8015D417 0001","801587C0 000C","801587C1 0060","801587C3 0001","50000601 0000","801587C5 0001","801587CB 0004","801587CD 000C"],"options":null},"Have Trial Mode Unlocked":{"note":"","data":["8110DCEE 0004"],"options":null},"Have\\All Characters In Multi":{"note":"","data":["8115D412 FFFF","8115D410 0003","8015D411 0003"],"options":null},"Infinite Health":{"note":"","data":["8017AABB 0064"],"options":null},"Start with Weapon\\Player 1":{"note":"","data":["8017AAA8 00??"],"options":{"Cool Rocket Launcher With Infinite Ammo":"09","HandGun":"00","Invisible Gun 1 With Infinite Ammo":"06","Invisible Gun 2 With Infinite Ammo":"07","M16 With Infinite Ammo":"04","Machinegun":"01","New Cooler Handgun":"05","Odd Inviso ShotGun With Infinite Ammo":"08","Rocket Launcher":"03","Shotgun":"02","Silenced Handgun":"14"}},"Time is Always 00:00:00":{"note":"","data":["8110DD62 0000"],"options":null}},"EDD6E031-68136013-C:45":{"Always Place 1st":{"note":"","data":["80112589 0000"],"options":null},"Best Points\\In Stunt Mode\\Player 1":{"note":"","data":["8010C068 00FF"],"options":null},"Best Points\\In Stunt Mode\\Player 2":{"note":"","data":["8010C069 00FF"],"options":null},"Car Select\\Player 1":{"note":"","data":["803CB362 00??"],"options":{"4x4":"0F","Bandit":"05","Compact":"01","Concept":"0B","Coupe":"06","Cruiser":"0D","Exotic":"07","Formula":"12","Hot Rod":"11","Mobster":"03","Mtn Dew":"15","Muscle Car":"02","Pickup":"00","Prototype":"13","Rocket":"14","Sedan":"04","Sportster":"09","Stallion":"0E","Subcompact":"0A","Taxi":"10","Van":"08"}},"Car Select\\Player 2":{"note":"","data":["803CB363 00??"],"options":{"4x4":"0F","Bandit":"05","Compact":"01","Concept":"0B","Coupe":"06","Cruiser":"0D","Exotic":"07","Formula":"12","Hot Rod":"11","Mobster":"03","Mtn Dew":"15","Muscle Car":"02","Pickup":"00","Prototype":"13","Rocket":"14","Sedan":"04","Sportster":"09","Stallion":"0E","Subcompact":"0A","Taxi":"10","Van":"08"}},"Cruiser Front Tire Size\\Player 1":{"note":"","data":["800C0AF9 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Cruiser Rear Tire Size\\Player 1":{"note":"","data":["800C0C01 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Formula Front Tire Size\\Player 1":{"note":"","data":["800C0B0D 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Formula Rear Tire Size\\Player 1":{"note":"","data":["800C0C15 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Front Pickup Tire Size\\Player 1":{"note":"","data":["800C0AC5 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Have All Keys Found\\Alcatraz\\Normal":{"note":"","data":["810C1DC4 FFFF"],"options":null},"Have All Keys Found\\Hawaii\\Normal":{"note":"","data":["810C1DC0 FFFF"],"options":null},"Have All Keys Found\\Las Vegas Normal":{"note":"","data":["810C1DBC FFFF"],"options":null},"Have All Keys Found\\Los Angeles\\Normal":{"note":"","data":["810C1DC6 FFFF"],"options":null},"Have All Keys Found\\New York-Downtown\\Normal":{"note":"","data":["810C1DBE FFFF"],"options":null},"Have All Keys Found\\New York-Uptown\\Normal":{"note":"","data":["810C1DC2 FFFF"],"options":null},"Have All Keys Found\\Seattle\\Normal":{"note":"","data":["810C1DC8 FFFF"],"options":null},"Have\\All Keys \u0026 Cans\\Midway Track":{"note":"","data":["810C1DD0 FFFF"],"options":null},"Have\\All Keys \u0026 Cans\\Stunt Track":{"note":"","data":["810C1DD2 FFFF"],"options":null},"Have\\Extra Cars":{"note":"","data":["50000902 0000","810C1DBC FFFF"],"options":null},"Have\\Game Timer Off":{"note":"","data":["800D9E88 0001"],"options":null},"Have\\Midway Track":{"note":"","data":["800E7D19 0001"],"options":null},"Have\\Stunts All Tracks":{"note":"","data":["8010C200 0001"],"options":null},"Hot Rod Front Tire Size\\Player 1":{"note":"","data":["800C0B09 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Hot Rod Rear Tire Size\\Player 1":{"note":"","data":["800C0C11 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Misc\\Auto Abort Disable":{"note":"","data":["8010C168 0001"],"options":null},"Misc\\Brakes Off":{"note":"","data":["80125C64 0001"],"options":null},"Misc\\Car Collisions Off":{"note":"","data":["8011249A 0001"],"options":null},"Misc\\Car Mines On":{"note":"","data":["8010C167 0001"],"options":null},"Misc\\Cone Mines On":{"note":"","data":["8010C166 0001"],"options":null},"Misc\\Damage Off":{"note":"","data":["8011CDB0 0001"],"options":null},"Misc\\Difficulty Mod":{"note":"","data":["8010C211 00??"],"options":{"Easy":"01","Extremely Hard":"05","Hard":"03","Medium":"02","Very Easy":"00","Very Hard":"04"}},"Misc\\Drones In Race":{"note":"","data":["800D5761 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07"}},"Misc\\Have All Cars In Pipe":{"note":"","data":["810C1DCE FFFF"],"options":null},"Misc\\Heavy Gravity":{"note":"","data":["800E7D22 0002"],"options":null},"Misc\\Heavy Mass":{"note":"","data":["8010C179 0001"],"options":null},"Misc\\Inside-Out Car On":{"note":"","data":["801174E0 0001"],"options":null},"Misc\\Invincible":{"note":"","data":["80119634 0001"],"options":null},"Misc\\Invisible Cars":{"note":"","data":["8010C170 0001"],"options":null},"Misc\\Invisible Tracks":{"note":"","data":["8010C178 0001"],"options":null},"Misc\\Jovian Gravity":{"note":"","data":["800E7D22 0003"],"options":null},"Misc\\Killer Rats On":{"note":"","data":["8010C17C 0001"],"options":null},"Misc\\Laps to Race":{"note":"","data":["8010C0E3 00??"],"options":{"1 Lap":"01","2 Laps":"02","3 Laps":"03","4 Laps":"04","5 Laps":"05","6 Laps":"06","7 Laps":"07","8 Laps":"08","9 Laps":"09"}},"Misc\\Large Frame":{"note":"","data":["8010C43C 0003"],"options":null},"Misc\\Levitation":{"note":"","data":["8010C254 0001"],"options":null},"Misc\\Light Gravity":{"note":"","data":["800E7D22 0000"],"options":null},"Misc\\Massive Mass":{"note":"","data":["8010C179 0002"],"options":null},"Misc\\New York Cabs":{"note":"","data":["800D9E89 0001"],"options":null},"Misc\\Resurrect In Place":{"note":"","data":["8010C210 0001"],"options":null},"Misc\\Suicide Mode Humans On":{"note":"","data":["80119628 0002"],"options":null},"Misc\\Suicide Mode On":{"note":"","data":["80119628 0001"],"options":null},"Misc\\Super Speed":{"note":"","data":["80111950 0001"],"options":null},"Misc\\Super Tires":{"note":"","data":["8010D3A6 0002"],"options":null},"Misc\\Upside Down Mode":{"note":"","data":["800D0171 0001"],"options":null},"Misc\\Your Car Is Invisible":{"note":"","data":["801127A1 0001"],"options":null},"Mt. Dew Front Tire Size\\Player 1":{"note":"","data":["800C0B19 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Mt. Dew Rear Tire Size\\Player 1":{"note":"","data":["800C0C21 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Pickup Front Tire Size\\Player 2":{"note":"","data":["800C0B1D 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Press GS Activate Cheat Menu":{"note":"","data":["880C2132 0001"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D00D0193 0010","810F58DC 44CB","D00D0193 0010","810F5938 44CB"],"options":null},"Press R to Shrink Car":{"note":"","data":["D00D0193 0010","8010C43C 0001"],"options":null},"Prototype Front Tire Size\\Player 1":{"note":"","data":["800C0B11 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Prototype Rear Tire Size\\Player 1":{"note":"","data":["800C0C19 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Rear Pickup Tire Size\\Player 1":{"note":"","data":["800C0BCD 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Rear Tire Size\\Player 2":{"note":"","data":["800C0C25 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Rocket Front Tire Size\\Player 1":{"note":"","data":["800C0B15 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Rocket Rear Tire Size\\Player 1":{"note":"","data":["800C0C1D 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Total Points\\In Stunt Mode\\Player 1":{"note":"","data":["8010C075 00FF"],"options":null},"Total Points\\In Stunt Mode\\Player 2":{"note":"","data":["8010C077 00FF"],"options":null},"Track Modifier":{"note":"","data":["8010C3F0 00??"],"options":{"Alcatraz":"04","Crash":"08","Half Pipe":"07","Hawaii":"02","Las Vegas":"00","Los Angeles":"05","Midway":"0A","New York Downtown":"01","New York Uptown":"03","Pipe":"09","Seattle":"06","Stunt":"0B"}},"Unlock All Cheats":{"note":"","data":["50000E02 0000","810C20E8 0101"],"options":null},"Van Front Tire Size\\Player 1":{"note":"","data":["800C0AE5 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}},"Van Rear Tire Size\\Player 1":{"note":"","data":["800C0BED 00??"],"options":{"Gigantic":"FF","Medium":"01","Tiny":"00"}}},"EDF419A8-BF1904CC-C:45":{"Access All\\Cars":{"note":"","data":["8002CFF7 000B"],"options":null},"Access All\\Difficulties":{"note":"","data":["8002CFFB 0004"],"options":null},"Access All\\Multiplayer Levels":{"note":"","data":["50000901 0000","8002D000 0001"],"options":null},"Access All\\Tracks":{"note":"","data":["8002CFF3 0006"],"options":null},"Access In-Game Cheats":{"note":"","data":["50001301 0000","8002D008 0001"],"options":null},"Damage Select":{"note":"","data":["8002CD93 00??"],"options":{"Double":"02","Half":"01","Normal":"00","Triple":"03"}},"Health Select":{"note":"","data":["8002CD7F 00??"],"options":{"Bad Only":"02","Good Only":"01","Normal":"00","Off":"03"}},"Infinite Continues":{"note":"","data":["8002CC57 0064"],"options":null},"Low Timer":{"note":"","data":["81025DD4 1040"],"options":null},"Power-Up Select":{"note":"","data":["8002CD7B 00??"],"options":{"?":"05","Health":"06","Invincible":"07","Mines":"01","Nitros":"04","Normal":"00","Off":"08","Rockets":"02","Stealer":"03"}},"Radar":{"note":"","data":["8002CD8F 00??"],"options":{"Off":"01","On":"00"}},"Speed units\\Kph or Mph":{"note":"","data":["81025E68 ????"],"options":{"Kph":"0100","Mph":"0001"}},"View Mode Select?":{"note":"","data":["8002CD8B 00??"],"options":{"Fisheye":"03","Flip":"02","Fog":"01","Normal":"00"}},"Widescreen":{"note":"","data":["D1178BF6 3F00","81178BF6 3F2B","D1178C16 3F00","81178C16 3F2B"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\01 Coventry Cove":{"note":"","data":["80363DD3 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\02 Mount Mayhem":{"note":"","data":["80351E9B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\03 Inferno Isle":{"note":"","data":["80364633 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\04 Sunset Sands":{"note":"","data":["8033C91B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\05 Metro Madness":{"note":"","data":["8035E61B 0064"],"options":null},"[Chamipionship Mode Only]\\Have 100 Bonus Points\\06 Wicked Woods":{"note":"","data":["80357F33 0064"],"options":null}},"EE4A0E33-8FD588C9-C:50":{"Always Have\\99 points":{"note":"","data":["80161EC1 0063"],"options":null},"Always first position":{"note":"","data":["801608D8 0001"],"options":null},"Only race one lap":{"note":"","data":["80161DF5 0001"],"options":null},"Press R For Nitrous Boost":{"note":"","data":["D01A3095 0010","811650E8 4077","D01A3095 0010","811650F0 4077"],"options":null}},"EE802DC4-690BD57D-C:4A":{"Bike Modifier\\Player 1":{"note":"","data":["8016BDF7 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 2":{"note":"","data":["8016BE43 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 3":{"note":"","data":["8016BE8F 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 4":{"note":"","data":["8016BEDB 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Infinite Primary Weapon\\Player 1":{"note":"","data":["801677B5 00C8"],"options":null},"Infinite Primary Weapon\\Player 2":{"note":"","data":["80167F25 00C8"],"options":null},"Infinite Primary Weapon\\Player 3":{"note":"","data":["80168695 00C8"],"options":null},"Infinite Primary Weapon\\Player 4":{"note":"","data":["80168E05 00C8"],"options":null},"Infinite Shields\\Player 1":{"note":"","data":["801677AD 00C8"],"options":null},"Infinite Shields\\Player 2":{"note":"","data":["80167F1D 00C8"],"options":null},"Infinite Shields\\Player 3":{"note":"","data":["8016868D 00C8"],"options":null},"Infinite Shields\\Player 4":{"note":"","data":["80168DFD 00C8"],"options":null},"Infinite Turbos\\Player 1":{"note":"","data":["80167783 0003","80167787 0003"],"options":null},"Infinite Turbos\\Player 2":{"note":"","data":["80167EF3 0003","80167EF7 0003"],"options":null},"Infinite Turbos\\Player 3":{"note":"","data":["80168663 0003","80168667 0003"],"options":null},"Infinite Turbos\\Player 4":{"note":"","data":["80168DD3 0003","80168DD7 0003"],"options":null},"Mode Select":{"note":"","data":["8009A11F 00??"],"options":{"Anti-Gravity":"08","Anti-Gravity \u0026 Fish Eye Lens":"0A","Boulder":"01","Boulder \u0026 Fish Eye Lens":"03","Boulder \u0026 Wireframe":"11","Fish Eye Lens":"02","Ghost Mode":"40","Magnify":"04","Stealth Mode":"20","Ugly Mode":"80","Wireframe":"10"}},"{All Tracks and Bonus Cars Unlocked}":{"note":"","data":["80198520 0008","50000264 0000","8016B903 0001","50000264 0000","8016BA2F 0001","50000564 0000","8016BB5B 0001","8016BDBB 0001","50000404 0000","8016BDC3 0001","80162B8B 0003","8016BDD3 0003"],"options":null}},"F00F2D4E-340FAAF4-C:45":{"Freeze Time at 02:00":{"note":"","data":["811C479E 1C40"],"options":null},"Have All Groups Completed":{"note":"This gives you all Cups for all Groups.","data":["50002801 0000","801C48DC 0002"],"options":null},"Have Everything Unlocked":{"note":"This will unlock Cars, Races, Missions and the in-built Cheat Menu. This will also replace all the Zombies with Dinosaurs. To access Cheat menu options: Pause Game: Use Control Stick, to scroll the Cheat Menu. Press A, to activate Cheats","data":["801C49BD 000F"],"options":null},"Have Infinite\\Free Repairs":{"note":"","data":["8109DEC4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Frozen Opponents":{"note":"","data":["8109DF24 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Grip-O-Matic Tires":{"note":"","data":["8109E05C ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Hot Rod":{"note":"","data":["8109DE64 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Invunerability":{"note":"","data":["8109DEAC ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Mega Turbo":{"note":"","data":["8109DE4C ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Mine Dropping Ability":{"note":"","data":["8009E119 ????"],"options":{"Off":"0000","On":"0064"}},"Have Infinite\\Turbo":{"note":"","data":["8109DE34 ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Turbo Nitrous":{"note":"","data":["8109DE7C ????"],"options":{"Off":"0000","On":"0BBB"}},"Have Infinite\\Underwater Ability":{"note":"","data":["8109DEF4 ????"],"options":{"Off":"0000","On":"0BBB"}},"Max Credits":{"note":"This is also Infinite until disabled","data":["811C481B FFFF"],"options":null},"Max Kills":{"note":"This will automatically Clear the stage if enabled and go back to the stage menu","data":["8109AC46 012C"],"options":null}},"F034001A-AE47ED06-C:45":{},"F03C24CA-C5237BCC-C:45":{"Aquadome\\Player 1\\Cant be Stunned":{"note":"","data":["801F1E3B 0000"],"options":null},"Aquadome\\Player 1\\Full Super Bar":{"note":"","data":["811F1E3A 0200"],"options":null},"Aquadome\\Player 1\\Infinite Energy":{"note":"","data":["801F1E33 00AA"],"options":null},"Aquadome\\Player 1\\No Energy":{"note":"","data":["801F1E33 0000"],"options":null},"Aquadome\\Player 2\\Cant be Stunned":{"note":"","data":["801F52CB 0000"],"options":null},"Aquadome\\Player 2\\Full Super Bar":{"note":"","data":["811F52DA 0200"],"options":null},"Aquadome\\Player 2\\Infinite Energy":{"note":"","data":["801F52D3 00AA"],"options":null},"Aquadome\\Player 2\\No Energy":{"note":"","data":["801F52D3 0000"],"options":null},"Backwash Bay\\Player 1\\Cant be Stunned":{"note":"","data":["801F258B 0000"],"options":null},"Backwash Bay\\Player 1\\Full Super Bar":{"note":"","data":["811F259A 0200"],"options":null},"Backwash Bay\\Player 1\\Infinite Energy":{"note":"","data":["801F2593 00AA"],"options":null},"Backwash Bay\\Player 1\\No Energy":{"note":"","data":["801F2593 0000"],"options":null},"Backwash Bay\\Player 2\\Cant be Stunned":{"note":"","data":["801F5A2B 0000"],"options":null},"Backwash Bay\\Player 2\\Full Super Bar":{"note":"","data":["811F5A3A 0200"],"options":null},"Backwash Bay\\Player 2\\Infinite Energy":{"note":"","data":["801F5A33 00AA"],"options":null},"Backwash Bay\\Player 2\\No Energy":{"note":"","data":["801F5A33 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Cant be Stunned":{"note":"","data":["801F2FDB 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Full Super Bar":{"note":"","data":["811F2FEA 0200"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Infinite Energy":{"note":"","data":["801F2FE3 00AA"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\No Energy":{"note":"","data":["801F2FE3 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Cant be Stunned":{"note":"","data":["801F647B 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Full Super Bar":{"note":"","data":["811F648A 0200"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Infinite Energy":{"note":"","data":["801F6483 00AA"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\No Energy":{"note":"","data":["801F6483 0000"],"options":null},"Candy Factory\\Player 1\\Cant be Stunned":{"note":"","data":["801F270B 0000"],"options":null},"Candy Factory\\Player 1\\Full Super Bar":{"note":"","data":["811F271A 0200"],"options":null},"Candy Factory\\Player 1\\Infinite Energy":{"note":"","data":["801F2713 00AA"],"options":null},"Candy Factory\\Player 1\\No Energy":{"note":"","data":["801F2713 0000"],"options":null},"Candy Factory\\Player 2\\Cant be Stunned":{"note":"","data":["801F5BAB 0000"],"options":null},"Candy Factory\\Player 2\\Full Super Bar":{"note":"","data":["811F5BBA 0200"],"options":null},"Candy Factory\\Player 2\\Infinite Energy":{"note":"","data":["801F5BB3 00AA"],"options":null},"Candy Factory\\Player 2\\No Energy":{"note":"","data":["801F5BB3 0000"],"options":null},"Clayribbean Cruise\\Player 1\\Cant be Stunned":{"note":"","data":["801F24FB 0000"],"options":null},"Clayribbean Cruise\\Player 1\\Full Super Bar":{"note":"","data":["811F250A 0200"],"options":null},"Clayribbean Cruise\\Player 1\\Infinite Energy":{"note":"","data":["801F2503 00AA"],"options":null},"Clayribbean Cruise\\Player 1\\No Energy":{"note":"","data":["801F2503 0000"],"options":null},"Clayribbean Cruise\\Player 2\\Cant be Stunned":{"note":"","data":["801F599B 0000"],"options":null},"Clayribbean Cruise\\Player 2\\Full Super Bar":{"note":"","data":["811F59AA 0200"],"options":null},"Clayribbean Cruise\\Player 2\\Infinite Energy":{"note":"","data":["801F59A3 00AA"],"options":null},"Clayribbean Cruise\\Player 2\\No Energy":{"note":"","data":["801F59A3 0000"],"options":null},"Extra Characters/Secret Options":{"note":"","data":["801A2B41 000F"],"options":null},"Freezing Fortress\\Player 1\\Cant be Stunned":{"note":"","data":["801F239B 0000"],"options":null},"Freezing Fortress\\Player 1\\Full Super Bar":{"note":"","data":["811F23AA 0200"],"options":null},"Freezing Fortress\\Player 1\\Infinite Energy":{"note":"","data":["801F23A3 00AA"],"options":null},"Freezing Fortress\\Player 1\\No Energy":{"note":"","data":["801F23A3 0000"],"options":null},"Freezing Fortress\\Player 2\\Cant be Stunned":{"note":"","data":["801F583B 0000"],"options":null},"Freezing Fortress\\Player 2\\Full Super Bar":{"note":"","data":["811F584A 0200"],"options":null},"Freezing Fortress\\Player 2\\Infinite Energy":{"note":"","data":["801F5843 00AA"],"options":null},"Freezing Fortress\\Player 2\\No Energy":{"note":"","data":["801F5843 0000"],"options":null},"Ghastly Graveyard\\Player 1\\Cant be Stunned":{"note":"","data":["801F262B 0000"],"options":null},"Ghastly Graveyard\\Player 1\\Full Super Bar":{"note":"","data":["811F263A 0200"],"options":null},"Ghastly Graveyard\\Player 1\\Infinite Energy":{"note":"","data":["801F2633 00AA"],"options":null},"Ghastly Graveyard\\Player 1\\No Energy":{"note":"","data":["801F2633 0000"],"options":null},"Ghastly Graveyard\\Player 2\\Cant be Stunned":{"note":"","data":["801F5ACB 0000"],"options":null},"Ghastly Graveyard\\Player 2\\Full Super Bar":{"note":"","data":["811F5ADA 0200"],"options":null},"Ghastly Graveyard\\Player 2\\Infinite Energy":{"note":"","data":["801F5AD3 00AA"],"options":null},"Ghastly Graveyard\\Player 2\\No Energy":{"note":"","data":["801F5AD3 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 1\\Cant be Stunned":{"note":"","data":["801F244B 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 1\\Full Super Bar":{"note":"","data":["811F245A 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 1\\Infinite Energy":{"note":"","data":["801F2453 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 1\\No Energy":{"note":"","data":["801F2453 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 2\\Cant be Stunned":{"note":"","data":["801F58EB 0000"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 2\\Full Super Bar":{"note":"","data":["811F58FA 0200"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 2\\Infinite Energy":{"note":"","data":["801F58F3 00AA"],"options":null},"Happy Harry's Hut, Spooky Spire, Mudville Mansion\\Player 2\\No Energy":{"note":"","data":["801F58F3 0000"],"options":null},"Infinite Time To Choose Your Fighter":{"note":"","data":["81200BEC 03A7"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 1\\Cant be Stunned":{"note":"","data":["801F3BBB 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 1\\Full Super Bar":{"note":"","data":["811F3BCA 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 1\\Infinite Energy":{"note":"","data":["801F3BC3 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 1\\No Energy":{"note":"","data":["801F3BC3 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 2\\Cant be Stunned":{"note":"","data":["801F705B 0000"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 2\\Full Super Bar":{"note":"","data":["811F706A 0200"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 2\\Infinite Energy":{"note":"","data":["801F7063 00AA"],"options":null},"Kiln's Laboratory, Kiln's Hideout, Fiery Furnace, Research Room\\Player 2\\No Energy":{"note":"","data":["801F7063 0000"],"options":null},"Kooky Courtyard\\Player 1\\Cant be Stunned":{"note":"","data":["801F280B 0000"],"options":null},"Kooky Courtyard\\Player 1\\Full Super Bar":{"note":"","data":["811F281A 0200"],"options":null},"Kooky Courtyard\\Player 1\\Infinite Energy":{"note":"","data":["801F2813 00AA"],"options":null},"Kooky Courtyard\\Player 1\\No Energy":{"note":"","data":["801F2813 0000"],"options":null},"Kooky Courtyard\\Player 2\\Cant be Stunned":{"note":"","data":["801F5CAB 0000"],"options":null},"Kooky Courtyard\\Player 2\\Full Super Bar":{"note":"","data":["811F5CBA 0200"],"options":null},"Kooky Courtyard\\Player 2\\Infinite Energy":{"note":"","data":["801F5CB3 00AA"],"options":null},"Kooky Courtyard\\Player 2\\No Energy":{"note":"","data":["801F5CB3 0000"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 1\\Cant be Stunned":{"note":"","data":["801F233B 0000"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 1\\Full Super Bar":{"note":"","data":["811F234A 0200"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 1\\Infinite Energy":{"note":"","data":["801F2343 00AA"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 1\\No Energy":{"note":"","data":["801F2343 0000"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 2\\Cant be Stunned":{"note":"","data":["801F57DB 0000"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 2\\Full Super Bar":{"note":"","data":["811F57EA 0200"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 2\\Infinite Energy":{"note":"","data":["801F57E3 00AA"],"options":null},"Outhouse,Claynaveral Hangar,Camp Claynaveral\\Player 2\\No Energy":{"note":"","data":["801F57E3 0000"],"options":null},"Player 1 Character Modifier":{"note":"","data":["801A2B2F 00??"],"options":{"Blob":"01","Bonker":"02","Boogerman":"03","Dr. Kiln":"04","Earthworm Jim":"05","Houngan":"08","Icky Bod Clay":"09","Kung Pow":"0A","Sumo Santa":"0D","T-Hoppy":"0F","Taffy":"0E"}},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 1\\Cant be Stunned":{"note":"","data":["801F1B0B 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 1\\Full Super Bar":{"note":"","data":["811F1B1A 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 1\\Infinite Energy":{"note":"","data":["801F1B13 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 1\\No Energy":{"note":"","data":["801F1B13 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 2\\Cant be Stunned":{"note":"","data":["801F4FAB 0000"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 2\\Full Super Bar":{"note":"","data":["811F4FBA 0200"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 2\\Infinite Energy":{"note":"","data":["801F4FB3 00AA"],"options":null},"Refuse Room, Grotto Gulch, Santa's Worshop\\Player 2\\No Energy":{"note":"","data":["801F4FB3 0000"],"options":null},"Rubbage Reef\\Player 1\\Cant be Stunned":{"note":"","data":["801F241B 0000"],"options":null},"Rubbage Reef\\Player 1\\Full Super Bar":{"note":"","data":["811F242A 0200"],"options":null},"Rubbage Reef\\Player 1\\Infinite Energy":{"note":"","data":["801F2423 00AA"],"options":null},"Rubbage Reef\\Player 1\\No Energy":{"note":"","data":["801F2423 0000"],"options":null},"Rubbage Reef\\Player 2\\Cant be Stunned":{"note":"","data":["801F58BB 0000"],"options":null},"Rubbage Reef\\Player 2\\Full Super Bar":{"note":"","data":["811F58CA 0200"],"options":null},"Rubbage Reef\\Player 2\\Infinite Energy":{"note":"","data":["801F58C3 00AA"],"options":null},"Rubbage Reef\\Player 2\\No Energy":{"note":"","data":["801F58C3 0000"],"options":null},"Rubbage Room\\Player 1\\Cant be Stunned":{"note":"","data":["801F464B 0000"],"options":null},"Rubbage Room\\Player 1\\Full Super Bar":{"note":"","data":["811F465A 0200"],"options":null},"Rubbage Room\\Player 1\\Infinite Energy":{"note":"","data":["801F4653 00AA"],"options":null},"Rubbage Room\\Player 1\\No Energy":{"note":"","data":["801F4653 0000"],"options":null},"Rubbage Room\\Player 2\\Cant be Stunned":{"note":"","data":["801F7AEB 0000"],"options":null},"Rubbage Room\\Player 2\\Full Super Bar":{"note":"","data":["811F7AFA 0200"],"options":null},"Rubbage Room\\Player 2\\Infinite Energy":{"note":"","data":["801F7AF3 00AA"],"options":null},"Rubbage Room\\Player 2\\No Energy":{"note":"","data":["801F7AF3 0000"],"options":null},"Santa's Toy Factory\\Player 1\\Cant be Stunned":{"note":"","data":["801F2C3B 0000"],"options":null},"Santa's Toy Factory\\Player 1\\Full Super Bar":{"note":"","data":["811F2C4A 0200"],"options":null},"Santa's Toy Factory\\Player 1\\Infinite Energy":{"note":"","data":["801F2C43 00AA"],"options":null},"Santa's Toy Factory\\Player 1\\No Energy":{"note":"","data":["801F2C43 0000"],"options":null},"Santa's Toy Factory\\Player 2\\Cant be Stunned":{"note":"","data":["801F60DB 0000"],"options":null},"Santa's Toy Factory\\Player 2\\Full Super Bar":{"note":"","data":["811F60EA 0200"],"options":null},"Santa's Toy Factory\\Player 2\\Infinite Energy":{"note":"","data":["801F60E3 00AA"],"options":null},"Santa's Toy Factory\\Player 2\\No Energy":{"note":"","data":["801F60E3 0000"],"options":null},"Stage Modifier":{"note":"","data":["801A2B2B 00??"],"options":{"Aquadome":"19","Backwash Bay":"16","Boogerhenge":"15","Camp Claynaveral":"02","Candy Factory":"00","Claynaveral Hangar":"01","Clayribbean Cruise":"11","Fiery Furnace":"0F","Freezing Fortress":"08","Ghastly Graveyard":"05","Grotto Gulch":"0A","Happy Harry's Hut":"07","Kiln's Hideout":"0E","Kiln's Laboratory":"0D","Kooky Courtyard":"13","Mudville Mansion":"04","Outhouse":"03","Refuse Room":"09","Research Room":"10","Rubbage Reef":"0C","Rubbage Room":"0B","Santa's Toy Factory":"14","Santa's Workship":"12","Spooky Spire":"06","Tribal Tower":"18","Tureen Toilet":"17"}},"Tribal Tower\\Player 1\\Cant be Stunned":{"note":"","data":["801F1BAB 0000"],"options":null},"Tribal Tower\\Player 1\\Full Super Bar":{"note":"","data":["811F1BBA 0200"],"options":null},"Tribal Tower\\Player 1\\Infinite Energy":{"note":"","data":["801F1BB3 00AA"],"options":null},"Tribal Tower\\Player 1\\No Energy":{"note":"","data":["801F1BB3 0000"],"options":null},"Tribal Tower\\Player 2\\Cant be Stunned":{"note":"","data":["801F504B 0000"],"options":null},"Tribal Tower\\Player 2\\Full Super Bar":{"note":"","data":["811F505A 0200"],"options":null},"Tribal Tower\\Player 2\\Infinite Energy":{"note":"","data":["801F5053 00AA"],"options":null},"Tribal Tower\\Player 2\\No Energy":{"note":"","data":["801F5053 0000"],"options":null}},"F050746C-247B820B-C:45":{"Access\\All Bikes \u0026 Tracks":{"note":"","data":["800A77D5 0063"],"options":null},"Access\\Infinite \u0026 All Weapons":{"note":"","data":["50000E02 0000","811B8D7A 0505"],"options":null},"Always 1st":{"note":"","data":["810D7856 0000"],"options":null},"Always Have\\Max Cash":{"note":"","data":["810D6A7A FFFF"],"options":null},"Always Have\\Weapon":{"note":"","data":["801C00B3 00??"],"options":{"Bace":"0C","Banana":"09","Bat":"04","Billie Club":"05","Cattle Prod":"0A","Chain":"0E","Fists":"01","Monkey Wrench":"08","Nunchuk":"0D","Pool Cue":"07","Sledge Hammer":"06","Spiked Club":"02","Taser":"0B","Tiring Iron":"03"}},"Infinite\\Damage":{"note":"","data":["801C0D17 0002"],"options":null},"Infinite\\Health\\To Bike":{"note":"","data":["811B8A38 42F0","811B8A3C 42F0"],"options":null},"Infinite\\Health\\To Character":{"note":"","data":["811BFE10 4489","811BFE12 8000"],"options":null}},"F1850C35-ACE07912-C:45":{"Always Place 1st":{"note":"","data":["802083F1 0001"],"options":null},"Infinite\\Lives":{"note":"","data":["800BAFD2 0009"],"options":null},"Infinite\\Specials On Pickup":{"note":"","data":["80208401 0005"],"options":null}},"F255D6F1-B65D6728-C:4A":{"Access All Boards \u0026 Characters":{"note":"","data":["800500C1 000C"],"options":null},"All Street Work Levels Unlocked":{"note":"","data":["50007801 0000","80050170 00??"],"options":{"Courses unlocked":"01","Courses unlocked with A rank":"05","Courses unlocked with B rank":"04","Courses unlocked with C rank":"03","Courses unlocked with S rank":"06"}},"Class Score Select":{"note":"","data":["8016609E 00??"],"options":{"Class A":"64","Class B":"40","Class C":"20","Class S":"FF"}},"Coin Perfect Select":{"note":"this is for Coin Mode to get Perfect Coin Collection Score straight away when you enter the level","data":["801660B3 00??"],"options":{"Giant House Level 1":"6E","Giant House Level 2":"77","Giant House Level 3":"72","Green Park Level 1":"14","Green park Level 2":"1A","Green park Level 3":"2B","Lost Forest Level 1":"4A","Lost Forest Level 2":"59","Lost Forest Level 3":"80","Snow Festival 64 Levels 1 2 \u0026 3":"7D","Sunset Island Level 1":"6F","Sunset Island Level 2":"74","Sunset Island Level 3":"81"}},"Infinite Time\\Attack Time Time 000000":{"note":"","data":["811137EA 0000"],"options":null},"Infinite Time\\Street Work \u0026 Coin":{"note":"","data":["801137E9 0028"],"options":null},"Infinite Time\\Time Attack":{"note":"","data":["801137EB 0000"],"options":null},"Infinite Turbo\\Player 1":{"note":"","data":["80166019 0009"],"options":null},"Infinite Turbo\\Player2":{"note":"","data":["80167991 0009"],"options":null},"Maxed Out Turbo Bar":{"note":"","data":["811656E8 429F","80166017 0051"],"options":null},"Options\\Camera Type Modifier":{"note":"","data":["810500A6 00??"],"options":{"Roll Off Far":"05","Roll Off Mid":"04","Roll Off Near":"03","Roll On Far":"02","Roll On Mid":"01","Roll On Near":"00"}},"Options\\DJ Function Modifier":{"note":"","data":["810500AC 00??"],"options":{"DJ Function Off":"00","DJ Function On":"01"}},"Options\\Music Modifier":{"note":"","data":["800500A9 00??"],"options":{"BGM Off":"00","BGM On":"FF"}},"Options\\Sound Effects Modifier":{"note":"","data":["810500AA 00??"],"options":{"SE Off":"00","SE On":"FF"}}},"F2A653CB-60633B3B-C:45":{"Found All Letters":{"note":"","data":["810ACBA2 000C"],"options":null},"Have No Letters":{"note":"Keep you kid busy for hours!!!","data":["810ACBA2 0000"],"options":null},"Infinite Strikes":{"note":"","data":["810A760A 0000"],"options":null}},"F35D5335-B7667CB7-C:45":{"Have All Items":{"note":"","data":["50000501 0000","80389C4A 0001","50000301 0000","80389C51 0001","80389C5A 0001","80389C5B 0001","80389C5D 0001","50000E01 0000","80389C60 0001"],"options":null},"Have Exp Points":{"note":"","data":["80389C49 0063"],"options":null},"Have Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C3F 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C45 0001","81389C46 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C3E 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C49 0063"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C48 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the F9 button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C90 ????","89389C92 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CED 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C88 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C88 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C3D 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C42 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"F35D5F95-8AFE3D69-C:45":{"Have All Items":{"note":"","data":["50000501 0000","80389C4A 0001","50000301 0000","80389C51 0001","80389C5A 0001","80389C5B 0001","80389C5D 0001","50000E01 0000","80389C60 0001"],"options":null},"Have Exp Points":{"note":"","data":["80389C49 0063"],"options":null},"Have Invincibility":{"note":"","data":["80342BFE 000B"],"options":null},"Infinite\\Energy":{"note":"","data":["80389C3F 0064"],"options":null},"Infinite\\Funds":{"note":"","data":["80389C45 0001","81389C46 869F"],"options":null},"Infinite\\Health":{"note":"","data":["81389C3E 0064"],"options":null},"Infinite\\Red Jewels":{"note":"","data":["80389C49 0063"],"options":null},"Infinite\\Throwing Weapon":{"note":"","data":["81389C48 0064"],"options":null},"Level Select":{"note":"You must use this code on a saved game, because the intro to the first level will mess up the game. Now select the saved game, and hold down the GS button until the level loads. Some of the boss stages will not let you fight the boss unless you re-enter the area. Also, with the part of stage modifier, the second code modifies the part of the level that you are in, and 0000 is the level's start.","data":["89389C90 ????","89389C92 0000"],"options":{"- ??":"001D","- Castle Keep":"0015","- Clock Tower":"0017","- Duel Tower":"0013","- Fight With Death/Actrise":"0014","- Fight With Maze Boss":"001A","- Final Dracula":"0018","- Intro (Glitch)":"0016","- Room of Clocks":"001B","- Tower of Science":"0012","- Tower of Sorcery":"0011","Castle Center":"0009","Castle Wall":"0002","Forest of Silence":"0000","Garden Maze":"0006","Inside Villa":"0004","Tower of Execution":"0010","Tunnel":"0007","Underground Waterway":"0008","Villa":"0003"}},"Max Power Up":{"note":"","data":["80389CED 0002"],"options":null},"Never Get Poisoned":{"note":"","data":["81389C88 0000"],"options":null},"Open All Doors and Gates,No Bosses":{"note":"","data":["50002A02 0000","81389BD0 FFFF"],"options":null},"Press L To Levitate":{"note":"","data":["D0387D7F 0020","81350810 3FCB"],"options":null},"Status":{"note":"","data":["80389C88 00??"],"options":{"Good":"01","Good but depressed":"22","Poison":"11","Sto":"66","V+P":"1F","Vamp":"08"}},"Switch From":{"note":"This Switch From Cheat lets you switch characters on a saved game For example, if you are Reindhart and you want to be Carrie in the middle of your game save it and then enable this Cheat and press F1. when you start your saved game back up you'll be Carrie instead of Reindhart.","data":["80389C3D 00??"],"options":{"Carrie to Reindhart":"00","Reindhart to Carrie":"01"}},"Throwing Weapon Modifier":{"note":"","data":["81389C42 00??"],"options":{"Axes":"04","Cross":"03","Exploding Potions":"02","Knives":"01","Nothing":"00"}}},"F3C5BF9B-160F33E2-C:45":{"All Masks":{"note":"Press GS To Activate All Masks","data":["891F1210 8780"],"options":null},"Have All\\Crates":{"note":"","data":["810C70F8 7FFF","810C70FA FFFF","810C70FC FFFF","810C70FE FFFF","810C7100 FFFF","800C7102 00FF"],"options":null},"Have All\\Levels":{"note":"","data":["811F1200 FFFF","811F1202 FFFF","811F1201 03E7","811F1203 03E7"],"options":null},"Have All\\Pirate Cages":{"note":"","data":["801F1142 0050","811F11F0 FFFF","811F11F2 FFFF","811F11F4 FFFF","811F11F6 FFFF","811F11F8 00FF","811F11FA FFFF"],"options":null},"Have All\\Yellow Lums":{"note":"","data":["50006401 0000","800C7108 00FF","50001901 0000","800C70BD 00FF","811F1182 0005","50005702 0000","811F1188 FFFF"],"options":null},"Infinite\\Oxygen":{"note":"","data":["810F4B90 4396"],"options":null},"Open Map":{"note":"","data":["810C70F0 FFFF","810C70F2 FFFF"],"options":null},"Start with Full Health":{"note":"","data":["811BC64C 001E"],"options":null},"Widescreen":{"note":"","data":["81099E10 2402","81099E12 0190","81099E34 2402","81099E36 00E0","81089BC4 03E0","81089BC6 0008","81089BC8 2402","81089BCA 0001"],"options":null}},"F3DD35BA-4152E075-C:45":{"Widescreen":{"note":"","data":["81091DFC 3C07","81091DFE 3FE3","8102499C 2402"],"options":null}},"F41B6343-C10661E6-C:50":{"Away Team Scores":{"note":"","data":["801A9579 00??"],"options":{"0 Goal":"00","1 Goal":"01","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08"}},"Home Team Scores":{"note":"","data":["801A86FD 00??"],"options":{"0 Goal":"00","1 Goal":"01","2 Goals":"02","20 Goals":"14","3 Goals":"03","30 Goals":"1E","4 Goals":"04","40 Goals":"28","5 Goals":"05","50 Goals":"32","6 Goals":"06","7 Goals":"07","8 Goals":"08"}},"Infinite player creation points":{"note":"","data":["D03E0CF2 0001","803E0CF2 0063"],"options":null}},"F43B45BA-2F0E9B6F-C:4A":{},"F478D8B3-9716DD6D-C:50":{"Cheat Select":{"note":"","data":["8109ACBE ????"],"options":{"All Of The Above":"0FFF","All Pick-Ups Are Grapple":"0040","All Pick-Ups Are Green":"0010","All Pick-Ups Are Red":"0004","All Pick-Ups Are Yellow":"0008","Maintain Speed Off Track":"0001","No Chassis":"0400","No Driver":"0800","No Wheels":"0200","Pick-Ups Are Maximum":"0080","Reversed Rocket Racer Run Track":"0020","Rocket Cars":"0002","Turbo Mode":"0100"}},"Have All Tracks and Building Pieces":{"note":"","data":["812576D4 FFFF","812576D6 FFFF"],"options":null}},"F4CBE92C-B392ED12-C:50":{"999 Kills":{"note":"","data":["80163BFF 0040","80163C01 0040"],"options":null},"Have All Medals":{"note":"","data":["50001801 0000","8017A9D8 0006"],"options":null},"Infinite\\Armor\\Falco":{"note":"","data":["80174187 00FF"],"options":null},"Infinite\\Armor\\Peppy":{"note":"","data":["8017418F 00FF"],"options":null},"Infinite\\Armor\\Slippy":{"note":"","data":["8017418B 00FF"],"options":null},"Infinite\\Dual Blue Lasers":{"note":"","data":["81163C13 0002"],"options":null},"Infinite\\Energy (Except Fox))":{"note":"","data":["80179A27 00FF","80179A23 00FF","80179A1F 00FF"],"options":null},"Infinite\\Hyper Laser":{"note":"","data":["81163C13 0002"],"options":null},"Infinite\\Lives":{"note":"","data":["80163C09 0063"],"options":null},"Level Select":{"note":"","data":["8017A39F 00??"],"options":{"Aquas":"0D","Area 6":"03","Bolse":"11","Corneria":"00","Corneria (Multi)":"14","Fortuna":"0E","Glitch":"04","Katina":"10","Macbeth":"0B","Meteo":"01","Sector X":"02","Sector Y":"05","Sector Z":"12","Solar":"07","Titania":"0C","Training Mode Level":"0A","Venom 1":"06","Venom 2":"09","Venom With Starwolf":"13","Zoness":"08"}},"Loads O' Hits":{"note":"","data":["80163C03 00FF"],"options":null},"Unlimited\\Boost\\Player 1":{"note":"","data":["8113E6FC 0000","8113E6FE 0000","811415DC 0000","811415DE 0000"],"options":null},"Unlimited\\Smart Bombs":{"note":"","data":["80179F0B 0063"],"options":null}},"F5237301-99E3EE93-C:50":{"1000 Garibs":{"note":"","data":["80291297 0064"],"options":null},"All levels unlocked":{"note":"At the main menu, where it says: Start, practice, options, \u0026 time trial, hold D-pad up, then the glove, playing-with-the-ball icon, will jump down into the lower left corner of the screen, then press the A button, and a level select screen will be available with all ordinary and boss levels, etc. available","data":["80298CFD 00A0"],"options":null},"Cheat Modifier\\1":{"note":"","data":["80298CFE 00??"],"options":{"Big ball":"02","Both of the above":"03","Low gravity":"01"}},"Cheat Modifier\\2":{"note":"","data":["80298CFF 00??"],"options":{"All of the above":"7B","Call ball":"02","Control ball":"20","Infinite energy":"40","Locate caribs":"01","Power ball":"10","Unlimited lives":"08"}},"Have Spell\\Death Spell":{"note":"","data":["812912A8 03E8"],"options":null},"Have Spell\\Enlarge Spell":{"note":"","data":["812912B4 03E8"],"options":null},"Have Spell\\Speed Up Spell":{"note":"","data":["812912B8 03E8"],"options":null},"Have Spell\\Sticky Fingers Spell":{"note":"","data":["812912B2 03E8"],"options":null},"Infinite\\99 Lives":{"note":"","data":["8029129B 0063"],"options":null},"Infinite\\Energy":{"note":"","data":["8029129F 0003"],"options":null},"Super Jump":{"note":"","data":["D02AFA14 0080","801EE771 0013"],"options":null},"[100% Complete]\\Save Slot 1":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBA37 0007","50000801 0000","801EBA28 00FF"],"options":null},"[100% Complete]\\Save Slot 2":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBA53 0007","50000801 0000","801EBA44 00FF"],"options":null},"[100% Complete]\\Save Slot 3":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBA6F 0007","50000801 0000","801EBA60 00FF"],"options":null},"[100% Complete]\\Save Slot 4":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBA8B 0007","50000801 0000","801EBA7C 00FF"],"options":null},"[100% Complete]\\Save Slot 5":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBAA7 0007","50000801 0000","801EBA98 00FF"],"options":null},"[100% Complete]\\Save Slot 6":{"note":"All green crystals collected and Bonuslevels solved.","data":["801EBAC3 0007","50000801 0000","801EBAB4 00FF"],"options":null}},"F5360FBE-2BF1691D-C:50":{"Access\\Always have Big Laser":{"note":"Use only one of these codes at a time!","data":["802F706F FFFF"],"options":null},"Access\\Enemy Health Modifer attach Activator":{"note":"Use only one of these codes at a time!","data":["812F7062 03E8"],"options":null},"Access\\Full Energy for Lazer":{"note":"Use only one of these codes at a time!","data":["812F706E 0064"],"options":null},"Access\\Gold Helmet":{"note":"Use only one of these codes at a time!","data":["8015D2F7 0003"],"options":null},"Access\\Infinite Health":{"note":"Use only one of these codes at a time!","data":["802F706A 0999"],"options":null},"Access\\Infinite Impact Oil":{"note":"Use only one of these codes at a time!","data":["812F706A 0154"],"options":null},"Access\\Infinite Ryo Impact Fighting":{"note":"Use only one of these codes at a time!","data":["812F7066 0005"],"options":null},"Access\\Infinite Ryo Impact Running":{"note":"Use only one of these codes at a time!","data":["812F70EA 270F"],"options":null},"Access\\Infy Ryo":{"note":"Use only one of these codes at a time!","data":["802F7667 0999"],"options":null},"Access\\Japanese Sombrero":{"note":"Use only one of these codes at a time!","data":["8015D2F7 0001"],"options":null},"Access\\Metal Helmet":{"note":"Use only one of these codes at a time!","data":["8015D2F7 0002"],"options":null},"Access\\Move Lock":{"note":"","data":["8116AE6A 0000","8120D84A 0000"],"options":null},"Access\\Mystical Ninja Skating team":{"note":"","data":["8120D620 4E20","8120DEF4 4E20","8116AE78 4E20"],"options":null},"Access\\Skating Team V2":{"note":"","data":["8120D620 4E20","8120DEF4 4E20","8116AE78 4E20","8116AE6A 0001","8120D84A 0001"],"options":null},"Have\\Bazooka":{"note":"","data":["8015D3CB 0001"],"options":null},"Have\\Blue Item":{"note":"","data":["8015D422 0001"],"options":null},"Have\\Blue Sausage":{"note":"","data":["8015D417 0001"],"options":null},"Have\\Brown Item":{"note":"","data":["8015D402 0001"],"options":null},"Have\\Brown Round Item":{"note":"","data":["8015D40F 0001"],"options":null},"Have\\Chain Pipe":{"note":"","data":["8015D3BF 0002"],"options":null},"Have\\Ebisumaru":{"note":"","data":["8015D3A3 0001"],"options":null},"Have\\Fire Cracker Bomb":{"note":"","data":["8015D3C4 0001"],"options":null},"Have\\Flute":{"note":"","data":["8015D3DB 0001"],"options":null},"Have\\Gold Item":{"note":"","data":["8015D41C 0001"],"options":null},"Have\\Gold Key":{"note":"","data":["8015D412 0001"],"options":null},"Have\\Kunai of Severe Cold":{"note":"","data":["8015D3D4 0001"],"options":null},"Have\\Magic Flying":{"note":"","data":["8015D3F4 0001"],"options":null},"Have\\Magic Mermaid":{"note":"","data":["8015D3FB 0001"],"options":null},"Have\\Magic Mini Ebisu":{"note":"","data":["8015D3F2 0001"],"options":null},"Have\\Magic Sudden Impact":{"note":"","data":["8015D3EC 0001"],"options":null},"Have\\Meat Saw Hammer":{"note":"","data":["8015D3C0 0001"],"options":null},"Have\\Medal of Flames":{"note":"","data":["8015D3DF 0001"],"options":null},"Have\\Pink Item":{"note":"","data":["8015D41B 0001"],"options":null},"Have\\Sasuke Character":{"note":"","data":["8015D3A4 0001"],"options":null},"Have\\Shell":{"note":"","data":["8015D3FC 0001"],"options":null},"Have\\Yae Character":{"note":"","data":["8015D3AB 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8015D2E7 0028"],"options":null},"Infinite\\Lives":{"note":"","data":["8015D2EF 000A"],"options":null},"Infinite\\Ryo":{"note":"","data":["8015D2EA 0010"],"options":null},"Keep Blue Fish":{"note":"","data":["8015D303 0003","50000404 0000","8015D2F3 0003"],"options":null}},"F5363349-DBF9D21B-C:45":{"Have Extra Characters (Gouriki \u0026 Reiji)":{"note":"","data":["8009E3DF 00FF"],"options":null},"Player 1\\Character Modifier":{"note":"","data":["80105001 00??"],"options":{"Azami":"00","Gouriki":"08","Hikari":"0B","Invisible Fighter":"0C","Kai":"03","Kaoru":"07","Kengon":"05","Kyeya":"06","Miki":"02","Reiji":"09","Sakai":"04","Serina":"01","Yami":"0A"}},"Player 1\\Infinite Energy":{"note":"","data":["81105026 03E8"],"options":null},"Player 1\\Needs 1 Round to Win":{"note":"","data":["D009E3F4 0000","8009E3F4 0001"],"options":null},"Player 1\\Never Wins":{"note":"","data":["8009E3F4 0000"],"options":null},"Player 1\\No Energy":{"note":"","data":["81105026 0000"],"options":null},"Player 2\\Character Modifier":{"note":"","data":["8011B399 00??"],"options":{"Azami":"00","Gouriki":"08","Hikari":"0B","Invisible Fighter":"0C","Kai":"03","Kaoru":"07","Kengon":"05","Kyeya":"06","Miki":"02","Reiji":"09","Sakai":"04","Serina":"01","Yami":"0A"}},"Player 2\\Infinite Energy":{"note":"","data":["8111B3BE 03E8"],"options":null},"Player 2\\Needs 1 Round to Win":{"note":"","data":["D009E3F5 0000","8009E3F5 0001"],"options":null},"Player 2\\No Energy":{"note":"","data":["8111B3BE 0000"],"options":null},"Player 2\\P2 Never Wins":{"note":"","data":["8009E3F5 0000"],"options":null}},"F568D51E-7E49BA1E-C:45":{"Carry 20 Bombs At A Time":{"note":"","data":["800AEE0F 0014"],"options":null},"Have\\Pumped up Red Remote Bombs":{"note":"","data":["802AC653 0004"],"options":null},"Infinite\\Credits":{"note":"","data":["802AC62B 0009"],"options":null},"Infinite\\Energy\\Player 1":{"note":"","data":["800AEE07 0002"],"options":null},"Infinite\\Energy\\Player 2":{"note":"","data":["800AEECF 0002"],"options":null},"Infinite\\Energy\\Player 3":{"note":"","data":["800AEF97 0002"],"options":null},"Infinite\\Energy\\Player 4":{"note":"","data":["800AF05F 0002"],"options":null},"Infinite\\Gems":{"note":"","data":["802AC62F 0063"],"options":null},"Infinite\\Lives":{"note":"","data":["802AC627 0063"],"options":null},"Infinite\\Time":{"note":"","data":["802AC643 0001"],"options":null},"Invincible\\Player 1":{"note":"","data":["800AEE01 0001"],"options":null},"Widescreen":{"note":"Narrows Sprites","data":["812B0288 C255","812B0290 43BA","81233BB2 C0F0","D1049DA6 0062","81049DA6 0071","D1049DA6 0050","81049DA6 0064","D1049D9A E148","81049D98 3F15","D1049D9A E148","81049E2E 00CB","D1049D9A E148","81049E20 3F15","D1049D9A E148","81049DAC 4228","D1049D9A E148","81049E34 4228","D10469A4 356C","81046976 0000","D10469A4 356C","810470D2 008C","D10469A4 356C","810470EE 00B4","812A53F8 1969","81242652 0555","812A0782 00A0","812A0796 0420","812428E2 0555","8124286E 0007","812A076A 010B","812A0766 002C","81241F0E 0555","812A07E2 00A0","812A07F6 01FA","812A080A 02BA","812A081E 037A","812A0832 0438","812421BA 0555","812421DA 0007","812A079E 002C","812A07A2 0033","812A07A6 003A","812A07AA 0082","812A07AE 00B2","812A07B2 00E2","812A07B6 0112","81228F4C 080A","81228F4E 9198","812A4660 C644","812A4662 0010","812A4664 3C04","812A4666 3F40","812A4668 4484","812A466A 3000","812A466C 4606","812A466E 5282","812A4670 4606","812A4672 2102","812A4674 3C04","812A4676 4220","812A4678 4484","812A467A 3000","812A467C 4606","812A467E 5280","812A4680 4606","812A4682 2100","812A4684 0808","812A4686 A3D5","812A4688 4406","812A468A 2000"],"options":null}},"F5C5866D-052713D9-C:45":{"All Characters\\Have Max\\Acceleration\\Player 1":{"note":"","data":["50000C0A 0000","80197FF6 0064"],"options":null},"All Characters\\Have Max\\Acceleration\\Player 2":{"note":"","data":["5000120A 0000","801980AA 0064"],"options":null},"All Characters\\Have Max\\Armor\\Player 1":{"note":"","data":["5000120A 0000","80197FF8 0064"],"options":null},"All Characters\\Have Max\\Armor\\Player 2":{"note":"","data":["5000120A 0000","801980AC 0064"],"options":null},"All Characters\\Have Max\\Attributes\\Player 1":{"note":"","data":["5000120A 0000","81197FF6 6464","5000120A 0000","81197FF8 6464"],"options":null},"All Characters\\Have Max\\Attributes\\Player 2":{"note":"","data":["5000120A 0000","811980AA 6464","5000120A 0000","811980AC 6464"],"options":null},"All Characters\\Have Max\\Speed\\Player 1":{"note":"","data":["5000120A 0000","80197FF7 0064"],"options":null},"All Characters\\Have Max\\Speed\\Player 2":{"note":"","data":["5000120A 0000","801980AB 0064"],"options":null},"All Characters\\Have Max\\Target Avoidance\\Player 1":{"note":"","data":["5000120A 0000","80197FF9 0064"],"options":null},"All Characters\\Have Max\\Target Avoidance\\Player 2":{"note":"","data":["5000120A 0000","801980AD 0064"],"options":null},"All Quests Complete\\Player 1":{"note":"","data":["5000120A 0000","81197FF0 01FF"],"options":null},"All Quests Complete\\Player 2":{"note":"","data":["5000120A 0000","811980A4 01FF"],"options":null}},"F611F4BA-C584135C-C:4A":{},"F63B89CE-4582D57D-C:49":{"Always Have\\50 pieces of corn":{"note":"","data":["801E2761 0032"],"options":null},"Always Have\\Super Jump":{"note":"","data":["811E2750 0020"],"options":null},"Have All Goldberry Tokens":{"note":"","data":["811E274E 0000"],"options":null},"Have F-L-I-K":{"note":"","data":["801E2762 000F"],"options":null},"Infinite\\Health":{"note":"","data":["801E2755 0004"],"options":null},"Infinite\\Lives":{"note":"","data":["801E2760 0009"],"options":null},"Levitate":{"note":"\"Press R To Levitate \u0026 Let go to land (:\"","data":["D008FFA1 0010","811E26C6 1000","D008FFA1 0010","811E26D6 1000"],"options":null},"No Music":{"note":"","data":["801DD906 0000"],"options":null},"Start with Berry Weapon":{"note":"","data":["801E2757 00??"],"options":{"Blueberry":"01","Goldberry":"03","Homing Berry":"02","Super Berry ?":"04"}},"Subtitles On":{"note":"","data":["801DDB7B 00??"],"options":{"Off":"00","On":"01"}},"Unlock All Levels":{"note":"","data":["81099E30 000F"],"options":null}},"F7F52DB8-2195E636-C:4A":{},"F7FE28F6-C3F2ACC3-C:45":{"Cheat Menu":{"note":"","data":["80336593 0001"],"options":null},"Infinite Credits":{"note":"","data":["81336582 0005","8133658E 0004"],"options":null},"Unlimited Time":{"note":"","data":["8033F31B 0063"],"options":null}},"F82DD377-8C3FB347-C:58":{"100.000 Sponsor Credits \u0026 950 Championship Points In Support Van":{"note":"You Also Have Access To All Cars, Tracks \u0026 Extra Features","data":["80031433 00F3"],"options":null},"Always 1st":{"note":"","data":["80031F93 0001"],"options":null},"Freeze Timer":{"note":"","data":["80031F9F 0000"],"options":null},"Infinite Cash":{"note":"","data":["803A418E 4000"],"options":null},"Max Sponsor Credits":{"note":"","data":["803A6702 0010","803A6704 0001"],"options":null},"No Cones Hit":{"note":"In ARSG Rally School","data":["80031FC3 0000","8003239B 0000"],"options":null},"No Damage Or Failures":{"note":"","data":["80031427 0001"],"options":null},"No Navigator":{"note":"","data":["80031EF7 0000"],"options":null}},"F908CA4C-36464327-C:45":{"Player 1\\1-Hit Death":{"note":"","data":["D01D3484 0078","801D3484 0001"],"options":null},"Player 1\\Fast\\Jump Walk":{"note":"","data":["801D347C 0001"],"options":null},"Player 1\\Fast\\Punch Kick":{"note":"","data":["801D347E 0010"],"options":null},"Player 1\\Fight Gargos Immediately":{"note":"","data":["8012834B 000A"],"options":null},"Player 1\\Fulgore\\Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3478 0020","801D3479 0090","801D34C5 0092","801D3527 005E"],"options":null},"Player 1\\Fulgore\\Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3478 0023","801D3479 00F0","801D34C5 0080","801D3527 00AF"],"options":null},"Player 1\\Infinite Energy":{"note":"","data":["801D3484 0069"],"options":null},"Player 1\\Play As":{"note":"","data":["802C8CB8 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 1\\Slow Jump Walk":{"note":"","data":["801D347D 0050"],"options":null},"Player 1\\Spinal Always Has All Skulls":{"note":"","data":["801D3523 0006"],"options":null},"Player 1\\Undefeated Players Scroll By Quickly":{"note":"","data":["802C8CE8 0007"],"options":null},"Player 1\\Untouchable":{"note":"","data":["801D34D4 000A"],"options":null},"Player 1\\Wins Score":{"note":"","data":["8012830A 00FF"],"options":null},"Player 2\\Fast\\Jump Walk":{"note":"","data":["801D357C 0001"],"options":null},"Player 2\\Fast\\Punch Kick":{"note":"","data":["801D357E 0010"],"options":null},"Player 2\\Fulgore Always Invisible":{"note":"Do not use this with Fulgore Always Visible","data":["801D3578 0020","801D3579 0090","801D35C5 0092","801D3527 005E"],"options":null},"Player 2\\Fulgore Always Visible":{"note":"Do not use this with Fulgore Always Invisible","data":["801D3578 0023","801D3579 00F0","801D35C5 0080","801D3527 00AF"],"options":null},"Player 2\\Infinite Energy":{"note":"","data":["801D3584 0078"],"options":null},"Player 2\\Play As":{"note":"","data":["8004EA9D 00??"],"options":{"Combo":"01","Fulgore":"05","Gargos":"0A","Glacius":"04","Jago":"00","Kim Wu":"06","Maya":"09","Orchid":"08","Sabrewulf":"07","Spinal":"02","Tusk":"03"}},"Player 2\\Slow\\Jump Walk":{"note":"","data":["801D357D 0050"],"options":null},"Player 2\\Slow\\Punch Kick":{"note":"","data":["801D357F 0050"],"options":null},"Player 2\\Spinal Always Has All Skulls":{"note":"","data":["801D3623 0006"],"options":null},"Player 2\\Untouchable":{"note":"","data":["801D34D5 000A"],"options":null},"Unlock All Options":{"note":"","data":["8012834C 0006"],"options":null}},"F9D411E3-7CB29BC0-C:45":{"Always Low Temp":{"note":"","data":["810E4F98 0000","810E4F9A 0000"],"options":null},"Auto-Pilot Always On Turbo (Original Excitebike Mode)":{"note":"","data":["810E3142 19AA"],"options":null},"Earthquake Mode":{"note":"","data":["810D7010 3AD0"],"options":null},"Fast\\Movement (Drones)":{"note":"","data":["800D9D55 00A0"],"options":null},"Fast\\Movement (Player)":{"note":"","data":["800D9D65 00AF"],"options":null},"Max Stunt Points":{"note":"","data":["810E4D18 0098","810E4D1A 967F"],"options":null},"No\\Collision Drivers":{"note":"","data":["800D9D34 0040"],"options":null},"No\\Overheating":{"note":"","data":["800CA984 00C3"],"options":null},"Power Turbo":{"note":"","data":["800CA99C 0040","800CA99D 00E0"],"options":null},"Slow\\Movement (Drones)":{"note":"","data":["800D9D55 0060"],"options":null},"Slow\\Movement (Player)":{"note":"","data":["800D9D65 0060"],"options":null},"Steering Control":{"note":"","data":["800C9E50 0040"],"options":null},"Super Speed For All":{"note":"","data":["800CA9A0 0040","800CA9A1 0070"],"options":null},"Unlock\\Difficulties \u0026 All Special Tracks":{"note":"","data":["810F2D50 FFFF"],"options":null},"Unlock\\Silver \u0026 Gold Cup":{"note":"","data":["810F2D4E 0003"],"options":null}},"FA5A3DFF-B4C9CDB9-C:45":{"Aquadome\\Player 1\\Cant be Stunned":{"note":"","data":["80193D1F 0000"],"options":null},"Aquadome\\Player 1\\Full Super Bar":{"note":"","data":["81193D2E 0200"],"options":null},"Aquadome\\Player 1\\Infinite Health":{"note":"","data":["80193D27 00AA"],"options":null},"Aquadome\\Player 1\\No Health":{"note":"","data":["80193D27 0000"],"options":null},"Aquadome\\Player 2\\Cant be Stunned":{"note":"","data":["8019720F 0000"],"options":null},"Aquadome\\Player 2\\Full Super Bar":{"note":"","data":["8119721E 0200"],"options":null},"Aquadome\\Player 2\\Infinite Health":{"note":"","data":["80197217 00AA"],"options":null},"Aquadome\\Player 2\\No Health":{"note":"","data":["80197217 0000"],"options":null},"Backwash Bay\\Player 1\\Cant be Stunned":{"note":"","data":["8019447F 0000"],"options":null},"Backwash Bay\\Player 1\\Full Super Bar":{"note":"","data":["8119448E 0200"],"options":null},"Backwash Bay\\Player 1\\Infinite Health":{"note":"","data":["80194487 00AA"],"options":null},"Backwash Bay\\Player 1\\No Health":{"note":"","data":["80194487 0000"],"options":null},"Backwash Bay\\Player 2\\Cant be Stunned":{"note":"","data":["8019796F 0000"],"options":null},"Backwash Bay\\Player 2\\Full Super Bar":{"note":"","data":["8119797E 0200"],"options":null},"Backwash Bay\\Player 2\\Infinite Health":{"note":"","data":["80197977 00AA"],"options":null},"Backwash Bay\\Player 2\\No Health":{"note":"","data":["80197977 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Cant be Stunned":{"note":"","data":["80194ECF 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Full Super Bar":{"note":"","data":["81194EDE 0200"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\Infinite Health":{"note":"","data":["80194ED7 00AA"],"options":null},"Boogerhenge, Tureen Toilet\\Player 1\\No Health":{"note":"","data":["80194ED7 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Cant be Stunned":{"note":"","data":["801983BF 0000"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Full Super Bar":{"note":"","data":["811983CE 0200"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\Infinite Health":{"note":"","data":["801983C7 00AA"],"options":null},"Boogerhenge, Tureen Toilet\\Player 2\\No Health":{"note":"","data":["801983C7 0000"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 1\\Cant be Stunned":{"note":"","data":["8019422F 0000"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 1\\Full Super Bar":{"note":"","data":["8119423E 0200"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 1\\Infinite Health":{"note":"","data":["80194237 00AA"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 1\\No Health":{"note":"","data":["80194237 0000"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 2\\Cant be Stunned":{"note":"","data":["8019771F 0000"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 2\\Full Super Bar":{"note":"","data":["8119772E 0200"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 2\\Infinite Health":{"note":"","data":["80197727 00AA"],"options":null},"Camp Claynaveral, ClayNaveral Hangar, OutHouse\\Player 2\\No Health":{"note":"","data":["80197727 0000"],"options":null},"Candy Factory\\Player 1\\Cant be Stunned":{"note":"","data":["801945FF 0000"],"options":null},"Candy Factory\\Player 1\\Full Super Bar":{"note":"","data":["8119460E 0200"],"options":null},"Candy Factory\\Player 1\\Infinite Health":{"note":"","data":["80194607 00AA"],"options":null},"Candy Factory\\Player 1\\No Health":{"note":"","data":["80194607 0000"],"options":null},"Candy Factory\\Player 2\\Cant be Stunned":{"note":"","data":["80197AEF 0000"],"options":null},"Candy Factory\\Player 2\\Full Super Bar":{"note":"","data":["81197AFE 0200"],"options":null},"Candy Factory\\Player 2\\Infinite Health":{"note":"","data":["80197AF7 00AA"],"options":null},"Candy Factory\\Player 2\\No Health":{"note":"","data":["80197AF7 0000"],"options":null},"Clayribbean Cruise\\Player 1\\Cant be Stunned":{"note":"","data":["80193F3F 0000"],"options":null},"Clayribbean Cruise\\Player 1\\Full Super Bar":{"note":"","data":["81193F4E 0200"],"options":null},"Clayribbean Cruise\\Player 1\\Infinite Health":{"note":"","data":["80193F47 00AA"],"options":null},"Clayribbean Cruise\\Player 1\\No Health":{"note":"","data":["80193F47 0000"],"options":null},"Clayribbean Cruise\\Player 2\\Cant be Stunned":{"note":"","data":["8019742F 0000"],"options":null},"Clayribbean Cruise\\Player 2\\Full Super Bar":{"note":"","data":["8119743E 0200"],"options":null},"Clayribbean Cruise\\Player 2\\Infinite Health":{"note":"","data":["80197437 00AA"],"options":null},"Clayribbean Cruise\\Player 2\\No Health":{"note":"","data":["80197437 0000"],"options":null},"Dog House\\Player 1\\Cant be Stunned":{"note":"","data":["8019653F 0000"],"options":null},"Dog House\\Player 1\\Full Super Bar":{"note":"","data":["8119654E 0200"],"options":null},"Dog House\\Player 1\\Infinite Health":{"note":"","data":["80196547 00AA"],"options":null},"Dog House\\Player 1\\No Health":{"note":"","data":["80196547 0000"],"options":null},"Dog House\\Player 2\\Cant be Stunned":{"note":"","data":["80199A2F 0000"],"options":null},"Dog House\\Player 2\\Full Super Bar":{"note":"","data":["81199A3E 0200"],"options":null},"Dog House\\Player 2\\Infinite Health":{"note":"","data":["80199A37 00AA"],"options":null},"Dog House\\Player 2\\No Health":{"note":"","data":["80199A37 0000"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 1\\Cant be Stunned":{"note":"","data":["80195AAF 0000"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 1\\Full Super Bar":{"note":"","data":["81195ABE 0200"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 1\\Infinite Health":{"note":"","data":["80195AB7 00AA"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 1\\No Health":{"note":"","data":["80195AB7 0000"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 2\\Cant be Stunned":{"note":"","data":["80198F9F 0000"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 2\\Full Super Bar":{"note":"","data":["81198FAE 0200"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 2\\Infinite Health":{"note":"","data":["80198FA7 00AA"],"options":null},"Dr. Kiln's Laboratory, Research Room, Kilns Hideout, Fiery Furnace\\Player 2\\No Health":{"note":"","data":["80198FA7 0000"],"options":null},"Freezing Fortress\\Player 1\\Cant be Stunned":{"note":"","data":["8019428F 0000"],"options":null},"Freezing Fortress\\Player 1\\Full Super Bar":{"note":"","data":["8119429E 0200"],"options":null},"Freezing Fortress\\Player 1\\Infinite Health":{"note":"","data":["80194297 00AA"],"options":null},"Freezing Fortress\\Player 1\\No Health":{"note":"","data":["80194297 0000"],"options":null},"Freezing Fortress\\Player 2\\Cant be Stunned":{"note":"","data":["8019777F 0000"],"options":null},"Freezing Fortress\\Player 2\\Full Super Bar":{"note":"","data":["8119778E 0200"],"options":null},"Freezing Fortress\\Player 2\\Infinite Health":{"note":"","data":["80197787 00AA"],"options":null},"Freezing Fortress\\Player 2\\No Health":{"note":"","data":["80197787 0000"],"options":null},"Ghastly Graveyard\\Player 1\\Cant be Stunned":{"note":"","data":["8019451F 0000"],"options":null},"Ghastly Graveyard\\Player 1\\Full Super Bar":{"note":"","data":["8119452E 0200"],"options":null},"Ghastly Graveyard\\Player 1\\Infinite Health":{"note":"","data":["80194527 00AA"],"options":null},"Ghastly Graveyard\\Player 1\\No Health":{"note":"","data":["80194527 0000"],"options":null},"Ghastly Graveyard\\Player 2\\Cant be Stunned":{"note":"","data":["80197A0F 0000"],"options":null},"Ghastly Graveyard\\Player 2\\Full Super Bar":{"note":"","data":["81197A1E 0200"],"options":null},"Ghastly Graveyard\\Player 2\\Infinite Health":{"note":"","data":["80197A17 00AA"],"options":null},"Ghastly Graveyard\\Player 2\\No Health":{"note":"","data":["80197A17 0000"],"options":null},"Kooky Courtyard\\Player 1\\Cant be Stunned":{"note":"","data":["801946FF 0000"],"options":null},"Kooky Courtyard\\Player 1\\Full Super Bar":{"note":"","data":["8119470E 0200"],"options":null},"Kooky Courtyard\\Player 1\\Infinite Health":{"note":"","data":["80194707 00AA"],"options":null},"Kooky Courtyard\\Player 1\\No Health":{"note":"","data":["80194707 0000"],"options":null},"Kooky Courtyard\\Player 2\\Cant be Stunned":{"note":"","data":["80197BEF 0000"],"options":null},"Kooky Courtyard\\Player 2\\Full Super Bar":{"note":"","data":["81197BFE 0200"],"options":null},"Kooky Courtyard\\Player 2\\Infinite Health":{"note":"","data":["80197BF7 00AA"],"options":null},"Kooky Courtyard\\Player 2\\No Health":{"note":"","data":["80197BF7 0000"],"options":null},"Other Codes\\Debug Mode":{"note":"With this code, Press C-Up \u0026 C-Down to pick your stage.","data":["810AA1A6 0001"],"options":null},"Other Codes\\Difficulty Modifier":{"note":"","data":["810AE40A 00??"],"options":{"Cookie":"00","Dude":"03","Easy":"01","Normal":"02","Psycho":"04"}},"Other Codes\\Have Booger Man":{"note":"","data":["810AA12A 0001"],"options":null},"Other Codes\\Have Earth Worm Jim":{"note":"","data":["810AA0E2 0001"],"options":null},"Other Codes\\Have High Five":{"note":"","data":["810AA0BE 0001"],"options":null},"Other Codes\\Have Sumo Santa":{"note":"","data":["810AA106 0001"],"options":null},"Other Codes\\Health Meters Modifier":{"note":"","data":["800AE5EF 00??"],"options":{"Off":"00","On":"01"}},"Other Codes\\Portraits Modifier":{"note":"","data":["800AE613 00??"],"options":{"Off":"00","On":"01"}},"Other Codes\\Spillits Modifier":{"note":"","data":["800AE447 00??"],"options":{"Normal":"00","Psycho":"01"}},"Other Codes\\Stun Meters Modifier":{"note":"","data":["800AE5FB 00??"],"options":{"Off":"00","On":"01"}},"Other Codes\\Super Meters Modifier":{"note":"","data":["800AE607 00??"],"options":{"Off":"00","On":"01"}},"Other Codes\\Throws \u0026 Holds Modifier":{"note":"","data":["800AE42F 00??"],"options":{"Off":"01","On":"00"}},"Other Codes\\Time Limit Modifier":{"note":"","data":["800AE423 00??"],"options":{"Off":"01","On":"00"}},"Other Codes\\VS. Arena Select Modifier":{"note":"","data":["800AE43B 00??"],"options":{"Normal":"01","Random":"00"}},"Rubbage Reef Code\\Player 1\\Cant be Stunned":{"note":"","data":["8019430F 0000"],"options":null},"Rubbage Reef Code\\Player 1\\Full Super Bar":{"note":"","data":["8119431E 0200"],"options":null},"Rubbage Reef Code\\Player 1\\Infinite Health":{"note":"","data":["80194317 00AA"],"options":null},"Rubbage Reef Code\\Player 1\\No Health":{"note":"","data":["80194317 0000"],"options":null},"Rubbage Reef Code\\Player 2\\Cant be Stunned":{"note":"","data":["801977FF 0000"],"options":null},"Rubbage Reef Code\\Player 2\\Full Super Bar":{"note":"","data":["8119780E 0200"],"options":null},"Rubbage Reef Code\\Player 2\\Infinite Health":{"note":"","data":["80197807 00AA"],"options":null},"Rubbage Reef Code\\Player 2\\No Health":{"note":"","data":["80197807 0000"],"options":null},"Santa's Toy Factory\\Player 1\\Cant be Stunned":{"note":"","data":["80194B2F 0000"],"options":null},"Santa's Toy Factory\\Player 1\\Full Super Bar":{"note":"","data":["81194B3E 0200"],"options":null},"Santa's Toy Factory\\Player 1\\Infinite Health":{"note":"","data":["80194B37 00AA"],"options":null},"Santa's Toy Factory\\Player 1\\No Health":{"note":"","data":["80194B37 0000"],"options":null},"Santa's Toy Factory\\Player 2\\Cant be Stunned":{"note":"","data":["8019801F 0000"],"options":null},"Santa's Toy Factory\\Player 2\\Full Super Bar":{"note":"","data":["8119802E 0200"],"options":null},"Santa's Toy Factory\\Player 2\\Infinite Health":{"note":"","data":["80198027 00AA"],"options":null},"Santa's Toy Factory\\Player 2\\No Health":{"note":"","data":["80198027 0000"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 1\\Cant be Stunned":{"note":"","data":["801939FF 0000"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 1\\Full Super Bar":{"note":"","data":["81193A0E 0200"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 1\\Infinite Health":{"note":"","data":["80193A07 00AA"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 1\\No Health":{"note":"","data":["80193A07 0000"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 2\\Cant be Stunned":{"note":"","data":["80196EEF 0000"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 2\\Full Super Bar":{"note":"","data":["81196EFE 0200"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 2\\Infinite Health":{"note":"","data":["80196EF7 00AA"],"options":null},"Santa's Workshop, Refuse Room, Grotto Gulch\\Player 2\\No Health":{"note":"","data":["80196EF7 0000"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 1\\Cant be Stunned":{"note":"","data":["8019433F 0000"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 1\\Full Super Bar":{"note":"","data":["8119434E 0200"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 1\\Infinite Health":{"note":"","data":["80194347 00AA"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 1\\No Health":{"note":"","data":["80194347 0000"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 2\\Cant be Stunned":{"note":"","data":["8019782F 0000"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 2\\Full Super Bar":{"note":"","data":["8119783E 0200"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 2\\Infinite Health":{"note":"","data":["80197837 00AA"],"options":null},"Spooky Spire, Happy Harry's Hut, Mudville Mansion\\Player 2\\No Health":{"note":"","data":["80197837 0000"],"options":null},"Tribal Tower\\Player 1\\Cant be Stunned":{"note":"","data":["80193A9F 0000"],"options":null},"Tribal Tower\\Player 1\\Full Super Bar":{"note":"","data":["81193AAE 0200"],"options":null},"Tribal Tower\\Player 1\\Infinite Health":{"note":"","data":["80193AA7 00AA"],"options":null},"Tribal Tower\\Player 1\\No Health":{"note":"","data":["80193AA7 0000"],"options":null},"Tribal Tower\\Player 2\\Cant be Stunned":{"note":"","data":["80196F8F 0000"],"options":null},"Tribal Tower\\Player 2\\Full Super Bar":{"note":"","data":["81196F9E 0200"],"options":null},"Tribal Tower\\Player 2\\Infinite Health":{"note":"","data":["80196F97 00AA"],"options":null},"Tribal Tower\\Player 2\\No Health":{"note":"","data":["80196F97 0000"],"options":null},"VS. Mode\\Player 1\\Cant be Stunned":{"note":"","data":["8019195F 0000"],"options":null},"VS. Mode\\Player 1\\Full Super Bar":{"note":"","data":["8119916E 0200"],"options":null},"VS. Mode\\Player 1\\Infinite Health":{"note":"","data":["80199167 00AA"],"options":null},"VS. Mode\\Player 1\\No Health":{"note":"","data":["80199167 0000"],"options":null},"VS. Mode\\Player 2\\Cant be Stunned":{"note":"","data":["80194E4F 0000"],"options":null},"VS. Mode\\Player 2\\Full Super Bar":{"note":"","data":["81194E5E 0200"],"options":null},"VS. Mode\\Player 2\\Infinite Health":{"note":"","data":["80194E57 00AA"],"options":null},"VS. Mode\\Player 2\\No Health":{"note":"","data":["80194E57 0000"],"options":null}},"FA8C4571-BBE7F9C0-C:45":{"Always 1st \u0026 final time 00:00.00":{"note":"All Levels","data":["50000301 0000","801CE609 0000"],"options":null},"Difficulty Select":{"note":"","data":["8007BF00 00??"],"options":{"Amateur":"00","Intermediate":"01","Mirror Mode":"03","Professional":"02"}},"Frantic Finale\\Colorado\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019185B 0063"],"options":null},"Frantic Finale\\Colorado\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191882 0063"],"options":null},"Frantic Finale\\Hawaii\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["80191F3B 0063"],"options":null},"Frantic Finale\\Hawaii\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191F62 0063"],"options":null},"Frantic Finale\\Oregon\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018E90B 0063"],"options":null},"Frantic Finale\\Oregon\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E932 0063"],"options":null},"Frantic Finale\\Texas\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018F0AB 0063"],"options":null},"Frantic Finale\\Texas\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018F0D2 0063"],"options":null},"Freewayphobia\\Chicago\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["80191F0B 0063"],"options":null},"Freewayphobia\\Chicago\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191F32 0063"],"options":null},"Freewayphobia\\Dakota\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018D0DB 0063"],"options":null},"Freewayphobia\\Dakota\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018D102 0063"],"options":null},"Freewayphobia\\New York\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018F3DB 0063"],"options":null},"Freewayphobia\\New York\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018F402 0063"],"options":null},"Freewayphobia\\Seattle\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018FCBB 0063"],"options":null},"Freewayphobia\\Seattle\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FCE2 0063"],"options":null},"Level Select":{"note":"","data":["801875A9 00??"],"options":{"Contest":"07","Frantic Finale":"04","Freewayphobia":"02","Motor Way Mania":"01","Options":"08","Practice":"06","Time Trial":"05","Traffic Troubles":"00","Vitory Vehicles":"03"}},"Motor Way Mania\\Alaska\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018E34B 0063"],"options":null},"Motor Way Mania\\Alaska\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E372 0063"],"options":null},"Motor Way Mania\\Las Vegas\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["801929DB 0063"],"options":null},"Motor Way Mania\\Las Vegas\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80192A02 0063"],"options":null},"Motor Way Mania\\Los Angeles\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018DBBB 0063"],"options":null},"Motor Way Mania\\Los Angeles\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018DBE2 0063"],"options":null},"Motor Way Mania\\Philadelphia\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019385B 0063"],"options":null},"Motor Way Mania\\Philadelphia\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80193882 0063"],"options":null},"Play As":{"note":"","data":["800D3081 00??"],"options":{"Daisy Duck":"01","Dewey":"07","Donald Duck":"05","Goofy":"02","Huey":"06","Louie":"08","Lugwig Von Drake":"09","Mickey Mouse":"00","Minnie Mouse":"04","Pete":"03"}},"Re-name Characters\\Daisy\\Letter 1":{"note":"","data":["801BE5A6 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 2":{"note":"","data":["801BE5A7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 3":{"note":"","data":["801BE5A8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 4":{"note":"","data":["801BE5A9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Daisy\\Letter 5":{"note":"","data":["801BE5AA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 1":{"note":"","data":["801BE5BC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 2":{"note":"","data":["801BE5BD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 3":{"note":"","data":["801BE5BE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 4":{"note":"","data":["801BE5BF 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Dewey\\Letter 5":{"note":"","data":["801BE5C0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 1":{"note":"","data":["801BE59F 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 2":{"note":"","data":["801BE5A0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 3":{"note":"","data":["801BE5A1 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 4":{"note":"","data":["801BE5A2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 5":{"note":"","data":["801BE5A3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Donald\\Letter 6":{"note":"","data":["801BE5A4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 1":{"note":"","data":["801BE5AC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 2":{"note":"","data":["801BE5AD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 3":{"note":"","data":["801BE5AE 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 4":{"note":"","data":["801BE5AF 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Goofy\\Letter 5":{"note":"","data":["801BE5B0 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 1":{"note":"","data":["801BE5B7 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 2":{"note":"","data":["801BE5B8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 3":{"note":"","data":["801BE5B9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Huey\\Letter 4":{"note":"","data":["801BE5BA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 1":{"note":"","data":["801BE5C2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 2":{"note":"","data":["801BE5C3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 3":{"note":"","data":["801BE5C4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 4":{"note":"","data":["801BE5C5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Louie\\Letter 5":{"note":"","data":["801BE5C6 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 1":{"note":"","data":["801BE5C8 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 2":{"note":"","data":["801BE5C9 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 3":{"note":"","data":["801BE5CA 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 4":{"note":"","data":["801BE5CB 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 5":{"note":"","data":["801BE5CC 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Ludwig\\Letter 6":{"note":"","data":["801BE5CD 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 1":{"note":"","data":["801BE591 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 2":{"note":"","data":["801BE592 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 3":{"note":"","data":["801BE593 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 4":{"note":"","data":["801BE594 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 5":{"note":"","data":["801BE595 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Mickey\\Letter 6":{"note":"","data":["801BE596 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 1":{"note":"","data":["801BE598 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 2":{"note":"","data":["801BE599 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 3":{"note":"","data":["801BE59A 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 4":{"note":"","data":["801BE59B 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 5":{"note":"","data":["801BE59C 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Minnie\\Letter 6":{"note":"","data":["801BE59D 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 1":{"note":"","data":["801BE5B2 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 2":{"note":"","data":["801BE5B3 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 3":{"note":"","data":["801BE5B4 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Re-name Characters\\Pete\\Letter 4":{"note":"","data":["801BE5B5 00??"],"options":{"!":"21","\"":"22","#":"23","%":"25","\u0026":"26","'":"27","(":"28",")":"29","*":"2A","+":"2B","-":"2D",".":"2E","/":"2F","0":"30","1":"31","2":"32","3":"33","4":"34","5":"35","6":"36","7":"37","8":"38","9":"39",":":"3A",";":"3B","\u003c":"3C","\u003ccomma\u003e":"2C","\u003cdollar sign\u003e":"24","\u003cend of word\u003e":"00","\u003cspace\u003e":"20","=":"3D","\u003e":"3E","?":"3F","@":"40","A":"41","B":"42","C":"43","D":"44","E":"45","F":"46","G":"47","H":"48","I":"49","J":"4A","K":"4B","L":"4C","M":"4D","N":"4E","O":"4F","P":"50","Q":"51","R":"52","S":"53","T":"54","U":"55","V":"56","W":"57","X":"58","Y":"59","Z":"5A","`":"60","g":"67","h":"68","i":"69","j":"6A","k":"6B","l":"6C","m":"6D","n":"6E","nd \u003cas in 2nd\u003e":"62","o":"6F","p":"70","q":"71","r":"72","rd \u003cas in 3rd\u003e":"63","s":"73","st \u003cas in 1st\u003e":"61","t":"74","th \u003cas in 4th\u003e":"64","u":"75","v":"76","w":"77","x":"78","y":"79","z":"7A"}},"Traffic Troubles\\Grand Canyon\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019311B 0063"],"options":null},"Traffic Troubles\\Grand Canyon\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80193142 0063"],"options":null},"Traffic Troubles\\Indianapolis\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018E75B 0063"],"options":null},"Traffic Troubles\\Indianapolis\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018E782 0063"],"options":null},"Traffic Troubles\\New Mexico\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018FD2B 0063"],"options":null},"Traffic Troubles\\New Mexico\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FD52 0063"],"options":null},"Traffic Troubles\\San Fransisco\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["80191A2B 0063"],"options":null},"Traffic Troubles\\San Fransisco\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80191A52 0063"],"options":null},"Unlock Everything":{"note":"This will unlock all characters, tracks, mirror mode, all in-game cheats, postcards, pluto's collar and give you all Trophies for every track and difficulties. To have this cheat save to mempak, enable it and then go into the Options Menu and disable the cheat. Go to the Wide-Screen Settings and Change it to Wide-Screen [16.9] and then the B button to get back to Wide-Screen Settings, now go back into Wide-Screen [16.9] and change it back to Normal [4.3].and press the B button until you come back to the main Options Menu.Close the game and load it again to see everything saved to the Mempak and unlocked.","data":["800D3128 008F","800D3129 0094","800D312A 0003","800D312C 0001","800D312F 0080","50000502 0000","800D3130 0009","50000502 0000","800D3131 0024","800D313A 0015","800D313B 007F","800D313C 0001","800D313D 00FF","800D313E 0004","800D313F 0022"],"options":null},"Victory Vehicles\\Everglades\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018FAEB 0063"],"options":null},"Victory Vehicles\\Everglades\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018FB12 0063"],"options":null},"Victory Vehicles\\Malibu\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019157B 0063"],"options":null},"Victory Vehicles\\Malibu\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["801915A2 0063"],"options":null},"Victory Vehicles\\Washington DC\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8019752B 0063"],"options":null},"Victory Vehicles\\Washington DC\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["80197552 0063"],"options":null},"Victory Vehicles\\Yellowstone\\Always Have Shield Shell":{"note":"Only use one Always Have Shield Shell code of each Level at a time, if you enable all tracks Always Have Shield Shell on that level Or all levels and tracks it will crash.","data":["8018D38B 0063"],"options":null},"Victory Vehicles\\Yellowstone\\Max Tokens":{"note":"Only use one Max Token Track code of each Level at a time, if you enable all tracks Max Token on that level Or all levels and tracks it will crash.","data":["8018D3B2 0063"],"options":null}},"FB3C48D0-8D28F69F-C:50":{"Level Select":{"note":"","data":["80046333 00??"],"options":{"Level 1":"01","Level 10":"0A","Level 11":"0B","Level 12":"0C","Level 13":"0D","Level 14":"0E","Level 15":"0F","Level 16":"10","Level 17":"11","Level 18":"12","Level 19":"13","Level 2":"02","Level 20":"14","Level 21":"15","Level 22":"16","Level 23":"17","Level 24":"18","Level 25":"19","Level 3":"03","Level 4":"04","Level 5":"05","Level 6":"06","Level 7":"07","Level 8":"08","Level 9":"09"}},"Stop Timer From Counting Down (All Levels)":{"note":"","data":["8101D4E0 2400"],"options":null}},"FBB9F1FA-6BF88689-C:45":{"Infinite\\Atoms":{"note":"","data":["81159286 FFFF"],"options":null},"Infinite\\Lives":{"note":"","data":["80026A67 0063"],"options":null},"Infinite\\Quarks":{"note":"","data":["81159282 FFFF"],"options":null}},"FC70E272-08FFE7AA-C:50":{"0 Enemies To Kill In Big Celebration Parade":{"note":"","data":["803E4DBB 0000"],"options":null},"All levels open":{"note":"","data":["50002001 0000","803F7ED0 0001"],"options":null},"Always Raining":{"note":"","data":["803F2E5F 0005"],"options":null},"Always Snowing":{"note":"","data":["803F2E5D 0005"],"options":null},"Always in 2nd Camera Angle":{"note":"","data":["803F2B89 0001"],"options":null},"Debug Mode":{"note":"","data":["803F651F 0001"],"options":null},"Enable Secret Mini Game":{"note":"","data":["803F652D 0001"],"options":null},"Great Score":{"note":"","data":["813F2E22 03E7"],"options":null},"High Score In Evo's Escape":{"note":"","data":["813E4DDA 7FFF"],"options":null},"Infinite Health\\2 Mouse,Hyena":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DFB51 0080"],"options":null},"Infinite Health\\A. Desert Rat, Vulture, Box, Kang":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DEFD5 0080"],"options":null},"Infinite Health\\Bunny, Racing Turtle":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DF3A9 0080"],"options":null},"Infinite Health\\Cool Cod":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E4039 0080"],"options":null},"Infinite Health\\Desert Fox":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E161D 0080"],"options":null},"Infinite Health\\EVO":{"note":"","data":["801DE085 0080"],"options":null},"Infinite Health\\Elephant":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DE82D 0080"],"options":null},"Infinite Health\\Fox, Pen, Husky, Tortoise Tank":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DFF25 0080"],"options":null},"Infinite Health\\King Rat":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E19F1 0080"],"options":null},"Infinite Health\\Lion, Camel":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E02F9 0080"],"options":null},"Infinite Health\\Rocket Dog":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DEC01 0080"],"options":null},"Infinite Health\\Rocket Husky":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801E1DC5 0080"],"options":null},"Infinite Health\\Spit Dog, Bear, King Pen, FB EVO":{"note":"Only Use Infinite Health Codes For Animals You Need","data":["801DE459 0080"],"options":null},"Infinite Skill\\A\\King Penguin":{"note":"Only Use Infinite Skill A Codes For Animals You Need","data":["801DE5EC 0004"],"options":null},"Infinite Skill\\A\\King Rat":{"note":"Only Use Infinite Skill A Codes For Animals You Need","data":["801E1B84 0004"],"options":null},"Infinite Skill\\A\\Power Mouse":{"note":"Only Use Infinite Skill A Codes For Animals You Need","data":["801DFCE4 0004"],"options":null},"Infinite Skill\\A\\Rocket Dog":{"note":"Only Use Infinite Skill A Codes For Animals You Need","data":["801E3A24 0004"],"options":null},"Infinite Skill\\B\\Armed Desert Rat":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DF16C 0004"],"options":null},"Infinite Skill\\B\\Bear":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DE5F0 0004"],"options":null},"Infinite Skill\\B\\Boxing Kangeroo":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DF16C 0004"],"options":null},"Infinite Skill\\B\\Bunny, Racing Turtle":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DF540 0004"],"options":null},"Infinite Skill\\B\\Desert Fox":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E17B4 0004"],"options":null},"Infinite Skill\\B\\Hyena":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801DF914 0004"],"options":null},"Infinite Skill\\B\\Lion":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E0490 0004"],"options":null},"Infinite Skill\\B\\Power Pen, Husky, Fox, Tort Tank":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E00BC 0004"],"options":null},"Infinite Skill\\B\\Rocket Dog":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E3A28 0004"],"options":null},"Infinite Skill\\B\\Rocket Husky":{"note":"Only Use Infinite Skill B Codes For Animals You Need","data":["801E1F5C 0004"],"options":null},"Title Screen":{"note":"Press the Pause Button to takes you to Title Screen","data":["803F6799 0000"],"options":null}},"FC74D475-9A0278AB-C:45":{"1 Win Needed\\Player 1":{"note":"","data":["D00BAD0F 0000","800BAD0F 0001"],"options":null},"1 Win Needed\\Player 2":{"note":"","data":["D00BB04F 0000","800BB04F 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["810BACDC 42C8"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["810BB01C 42C8"],"options":null},"Infinite Time":{"note":"","data":["810E69AC 42F0"],"options":null},"Max Chemical X\\Player 1":{"note":"","data":["800BAD28 0003"],"options":null},"Max Chemical X\\Player 2":{"note":"","data":["800BB068 0003"],"options":null},"Never Win\\Player 1":{"note":"","data":["800BAD0F 0000"],"options":null},"Never Win\\Player 2":{"note":"","data":["800BB04F 0000"],"options":null},"No Chemical X\\Player 1":{"note":"","data":["800BAD28 0000"],"options":null},"No Chemical X\\Player 2":{"note":"","data":["800BB068 0000"],"options":null},"No Health\\Player 1":{"note":"","data":["810BACDC 0000"],"options":null},"No Health\\Player 2":{"note":"","data":["810BB01C 0000"],"options":null}},"FC7797BF-4A95E83C-C:50":{"Access All Bonus Cars":{"note":"","data":["50000302 0000","80098583 0001","50000302 0000","8009858B 0001"],"options":null},"Always 1st Place":{"note":"","data":["810A5F30 0001"],"options":null},"Infinite Time":{"note":"","data":["810CE72E 03E7"],"options":null},"Max Points":{"note":"","data":["810CE702 010A"],"options":null},"Speedometer Select":{"note":"","data":["810CE7C2 00??"],"options":{"KM/H":"00","MPH":"01"}},"Start On Lap Modifier":{"note":"","data":["D00A5F35 0000","810A5F34 00??"],"options":{"Lap 1":"01","Lap 2":"02","Lap 3":"03","Lap 4":"04","Lap 5":"06","Lap 6":"06","Last Lap from Start":"07","Normal":"00"}},"Track Direction Unlocked (All Levels)":{"note":"","data":["800A4131 0003"],"options":null}},"FCBCCB21-72903C6B-C:45":{"Ebisumaru\\Automatically Complete Ebisumaru's Training":{"note":"","data":["803B52F4 0008"],"options":null},"Ebisumaru\\Have\\Magic Mini Ebisu":{"note":"","data":["8015C6F3 0001"],"options":null},"Ebisumaru\\Have\\Meat Saw Hammer":{"note":"","data":["8015C6C3 0001"],"options":null},"Ebisumaru\\Have\\Windup Camera":{"note":"","data":["8015C6D3 0001"],"options":null},"Ebisumaru\\Saw Hammer Modifier":{"note":"","data":["8015C6B3 00??"],"options":{"Gold Saw Hammer":"02","Normal Saw Hammer":"00","Silver Saw Hammer":"01"}},"Goemon\\D-Pad Left To Charge Laser":{"note":"","data":["D00C7D3A 0002","802F706F 0064"],"options":null},"Goemon\\D-Pad Up To Refill Oil":{"note":"","data":["D0067D3A 0008","812F706A 03E7"],"options":null},"Goemon\\Have\\Chain Pipe":{"note":"","data":["8015C6BF 0002"],"options":null},"Goemon\\Have\\Magic Sudden Impact":{"note":"","data":["8015C6EF 0001"],"options":null},"Goemon\\Have\\Medal of Flames":{"note":"","data":["8015C6DF 0001"],"options":null},"Goemon\\Maximum Money":{"note":"","data":["812F70EA 03E7"],"options":null},"Goemon\\Pipe Modifier":{"note":"","data":["8015C6AF 00??"],"options":{"Gold Pipe":"02","Normal Pipe":"00","Silver Pipe":"01"}},"Goemon\\Robot Boss' Has No Health":{"note":"","data":["812F7062 0000"],"options":null},"Have\\Blue Fish":{"note":"","data":["8015C723 0001"],"options":null},"Have\\Blue Sausage":{"note":"","data":["8015C717 0001"],"options":null},"Have\\Brown Item":{"note":"","data":["8015C703 0001"],"options":null},"Have\\Brown Round Item":{"note":"","data":["8015C70F 0001"],"options":null},"Have\\Gold Fish":{"note":"","data":["8015C71F 0001"],"options":null},"Have\\Gold Key":{"note":"","data":["8015C713 0001"],"options":null},"Have\\Pink Fish":{"note":"","data":["8015C71B 0001"],"options":null},"Have\\Silver Fortune Doll":{"note":"","data":["8015C707 0001"],"options":null},"Have\\Triton Shell":{"note":"","data":["8015C6FF 0001"],"options":null},"Infinite\\Health":{"note":"","data":["8015C5E7 0028"],"options":null},"Infinite\\Lives":{"note":"","data":["8015C5EF 0009"],"options":null},"Infinite\\Money":{"note":"","data":["8115C5EA 270F"],"options":null},"Max Heart Containers":{"note":"","data":["8015C5E3 0027"],"options":null},"Play As":{"note":"","data":["8015C5DF 00??"],"options":{"Ebisumaru":"01","Goemon":"00","Sasuke":"02","Yae":"03"}},"Press\\L To Levitate":{"note":"","data":["D00C7D3B 0020","8116A044 4000"],"options":null},"Press\\R To Use Chargeable Weapon":{"note":"","data":["D00C7D3B 0010","8120C896 005D"],"options":null},"Sasuke\\Have\\Fire Cracker Bomb":{"note":"","data":["8015C6C7 0001"],"options":null},"Sasuke\\Have\\Kunai of Severe Cold":{"note":"","data":["8015C6D7 0001"],"options":null},"Sasuke\\Have\\Magic Flying":{"note":"","data":["8015C6F7 0001"],"options":null},"Sasuke\\Kunai Modifier":{"note":"","data":["8015C6B7 00??"],"options":{"2 Kunai's":"01","Gold Kunai":"02","Normal Kunai":"00"}},"Widescreen":{"note":"Some Textboxes Too Small","data":["81017F2A 3FE3"],"options":null},"Yae\\Have\\Bazooka":{"note":"","data":["8015C6DB 0001"],"options":null},"Yae\\Have\\Flute":{"note":"","data":["8015C6CB 0001"],"options":null},"Yae\\Have\\Magic Mermaid":{"note":"","data":["8015C6FB 0001"],"options":null},"Yae\\Katana Modifier":{"note":"","data":["8015C6BB 00??"],"options":{"Gold Katana":"02","Normal Katana":"00","Silver Katana":"01"}}},"FCE0D799-65316C54-C:45":{"Infinite\\Armor\\Player 1":{"note":"","data":["8011D467 0064"],"options":null},"Infinite\\Armor\\Player 2":{"note":"","data":["8011D46B 0064"],"options":null},"Infinite\\Bombs\\Player 1":{"note":"","data":["8011D46F 0003"],"options":null},"Infinite\\Bombs\\Player 2":{"note":"","data":["8011D473 0003"],"options":null},"Level 11 Vulcan Cannon\\Player 1":{"note":"","data":["801239B3 000A"],"options":null},"Level 11 Vulcan Cannon\\Player 2":{"note":"","data":["801239D3 000A"],"options":null},"Press L For Rapid Fire Select\\Player 1":{"note":"","data":["D011BE01 0020","8011D497 00??"],"options":{"On Flak":"14","On Nuke \u0026 Laser":"28"}},"Press L For Rapid Fire Select\\Player 2":{"note":"","data":["D011BE09 0020","8011D49B 00??"],"options":{"On Flak":"14","On Nuke \u0026 Laser":"28"}}},"FD73F775-9724755A-C:50":{"Enable All Cheats":{"note":"Go into Options \u0026 then Magic Codes. Then Code list to turn off \u0026 on what you want.","data":["800DFE2C 001F","50000301 0000","800DFE2D 00FF"],"options":null},"Fifty Frames":{"note":"Identical location to the NTSC address","data":["80079A2B 0003"],"options":null},"Have All\\50 Balloons":{"note":"","data":["8020807D 0032"],"options":null},"Have All\\Control Drumstick \u0026 Adventure Two mode unlocked":{"note":"","data":["801264DC 0003","801264DF 0003","801264F2 0003","801264F3 0008"],"options":null},"Have All\\Keys":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80207E69 001F"],"options":null},"Have All\\None-Adventure tracks completed":{"note":"","data":["50001204 0000","80207F87 0007","50000904 0000","80207FDF 0007","80207E68 0007","80207E6A 0007","80207E6B 0007","80207E6C 000F","80207E6D 00FF"],"options":null},"Have All\\T.T. Amulets":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80207E77 0004"],"options":null},"Have All\\T.T. time trial races beaten":{"note":"","data":["80207E76 0004"],"options":null},"Have All\\Trophies":{"note":"Only put this code on once you are inside the lobby to choose a gate,or it will crash the game.","data":["80207E6E 0007","80207E6F 00FF"],"options":null},"Have All\\Trophy Adventure races unlocked":{"note":"","data":["50000502 0000","8020807E 0007"],"options":null},"Widescreen":{"note":"","data":["81066006 3FE3","81066156 3FE3","810661BE 3FE3","81126204 3FCE"],"options":null}},"FDA245D2-A74A3D47-C:45":{"All Tracks Unlocked":{"note":"","data":["8019436E 0008","50000264 0000","80167747 0001","50000264 0000","80167873 0001","50000564 0000","8016799F 0001"],"options":null},"Bike Modifier\\Player 1":{"note":"","data":["80167C3F 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 2":{"note":"","data":["80167C8B 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 3":{"note":"","data":["80167CD7 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Bike Modifier\\Player 4":{"note":"","data":["80167D23 00??"],"options":{"Apollyon":"07","Grimace":"03","Jolt":"05","Khan":"02","Main":"06","Mooga":"04","Neon":"09","Rana":"01","Raze":"00","Roach":"08"}},"Extra Bikes Unlocked":{"note":"","data":["80167C13 0001","80167C17 0003"],"options":null},"Extra Levels Unlocked":{"note":"","data":["80167C0B 0001","80167C0F 0001"],"options":null},"Infinite Primary Weapon\\Player 1":{"note":"","data":["801635FD 00C8"],"options":null},"Infinite Primary Weapon\\Player 2":{"note":"","data":["80163D6D 00C8"],"options":null},"Infinite Primary Weapon\\Player 3":{"note":"","data":["801644DD 00C8"],"options":null},"Infinite Primary Weapon\\Player 4":{"note":"","data":["80164C4D 00C8"],"options":null},"Infinite Shields\\Player 1":{"note":"","data":["801635F5 00C8"],"options":null},"Infinite Shields\\Player 2":{"note":"","data":["80163D65 00C8"],"options":null},"Infinite Shields\\Player 3":{"note":"","data":["801644D5 00C8"],"options":null},"Infinite Shields\\Player 4":{"note":"","data":["80164C45 00C8"],"options":null},"Infinite Turbos\\Player 1":{"note":"","data":["801635CB 0003","801635CF 0003"],"options":null},"Infinite Turbos\\Player 2":{"note":"","data":["80163D3B 0003","80163D3F 0003"],"options":null},"Infinite Turbos\\Player 3":{"note":"","data":["801644AB 0003","801644AF 0003"],"options":null},"Infinite Turbos\\Player 4":{"note":"","data":["80164C1B 0003","80164C1F 0003"],"options":null},"Mode Select":{"note":"","data":["80095F6F 00??"],"options":{"Anti-Gravity":"08","Anti-Gravity \u0026 Fish Eye Lens":"0A","Boulder":"01","Boulder \u0026 Fish Eye Lens":"03","Boulder \u0026 Wireframe":"11","Fish Eye Lens":"02","Ghost Mode":"40","Magnify":"04","Stealth Mode":"20","Ugly Mode":"80","Wireframe":"10"}}},"FE94E570-E4873A9C-C:44":{"Have 1 Star\\Abdul":{"note":"","data":["80307333 0001"],"options":null},"Have 1 Star\\Bob":{"note":"","data":["8030732F 0001"],"options":null},"Have 1 Star\\Leon":{"note":"","data":["80307332 0001"],"options":null},"Have 1 Star\\Meiling":{"note":"","data":["80307331 0001"],"options":null},"Have 1 Star\\Ninja":{"note":"","data":["80307334 0001"],"options":null},"Have 1 Star\\Pierre":{"note":"","data":["80307330 0001"],"options":null},"Have 1 Star\\Ryuji":{"note":"","data":["8030732E 0001"],"options":null},"Have 1 Star\\Tomahawk":{"note":"","data":["80307335 0001"],"options":null},"Have 1 Star\\Valerie":{"note":"","data":["80307336 0001"],"options":null},"Infinite Health\\Player 1":{"note":"","data":["80209881 0000","802047A3 0000"],"options":null},"Infinite Health\\Player 2":{"note":"","data":["802047A7 0000","8020B749 0000"],"options":null},"Start on stage 100 on Survival to get Joker":{"note":"","data":["802EF57B 0063"],"options":null},"Start with Stars Modifier\\Player 1":{"note":"","data":["D0209737 0000","80209737 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Start with Stars Modifier\\Player 2":{"note":"","data":["D020B5FF 0000","8020B5FF 00??"],"options":{"Max Stars":"06","No Stars":"00"}},"Stop timer for Fastest to get Robot":{"note":"","data":["810ADADC 3F80"],"options":null}},"FEE97010-4E94A9A0-C:50":{"Access All\\Cars,Tracks \u0026 Golg Trophies":{"note":"","data":["50000402 0000","81043AA0 FFFF"],"options":null},"Access All\\Platinum Trophies":{"note":"","data":["8102F70C FFFF","8102F70E FFFF"],"options":null},"Access\\Galage '88 UFO Car":{"note":"","data":["810E2C20 0028"],"options":null},"Always 1st":{"note":"","data":["810569B4 0001"],"options":null},"Always Engine Class S":{"note":"","data":["81043AB0 0000"],"options":null},"Easy Mode":{"note":"","data":["81057B10 0001"],"options":null},"Easy Win":{"note":"","data":["810569BA 0007"],"options":null},"Freeze Lap Timer":{"note":"Select Car Attack, And You'll Have All The Cars At Your Disposal For A Quick Spin !!","data":["810569DE 014D"],"options":null},"Infinite Time":{"note":"","data":["811280B2 0C00"],"options":null},"Laps to Race":{"note":"Here you can choose how many laps are in the race, 1-9. Do not use with Option 7-9.","data":["8111CA16 00??"],"options":{"1 Lap to Race":"01","2 Laps to Race":"02","3 Laps to Race":"03","4 Laps to Race":"04","5 Laps to Race":"05","6 Laps to Race":"06","7 Laps to Race":"07","8 Laps to Race":"08","9 Laps to Race":"09"}},"Ultra 64":{"note":"Pick any car, beat stage 8: RR Extreme Extra and the UFO car is yours to drive!","data":["8113DDBA 0018"],"options":null}},"FF14C1DA-167FDE92-C:45":{"In-Game Cheats\\Access Cheat menu":{"note":"","data":["50000504 0000","80100778 0001"],"options":null},"In-Game Cheats\\Enable\\All Items":{"note":"To access simply pause in game play \u0026 then unpause.","data":["8010075C 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Invincibility":{"note":"","data":["802A9C88 00??"],"options":{"Off":"00","On":"01"}},"In-Game Cheats\\Enable\\Monsters":{"note":"","data":["802A9DFB 00??"],"options":{"Are Active":"00","Are Gone":"01"}},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A4FF6 0064","812A503E 0064","812A504E 00C8","812A5038 1900","812A5008 04B0","812A503A 0640","812A4FD8 0960","812A503C 0190"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Keys":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A4FF3 000F"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A5067 0001","50000E02 0000","812A4FAC 03E7"],"options":null},"Multi-Player (All Levels)\\Player 2 (Multi-Player \u0026 Co-Operative)\\Infinite Health (All Levels)":{"note":"This is for Multi-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on Single-Player, Co-Operative and DUKEMATCH, All Levels.","data":["8024C747 0064","802A4FA9 0064"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A5382 0064","812A53CA 0064","812A53DA 00C8","812A53C4 1900","812A5394 04B0","812A53C6 0640","812A5364 0960","812A53C8 0190"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A53F3 0001","50000E02 0000","812A5338 03E7"],"options":null},"Multi-Player (All Levels)\\Player 3 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 2 on DUKEMATCH, All Levels.","data":["8024AE2F 0064","802A5335 0064"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Items \u0026 Infinite Use":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of on all levls. Just press D-Pad Up or D-Pad Down to enable.","data":["812A570E 0064","812A5756 0064","812A5766 00C8","812A5750 1900","812A5720 04B0","812A5752 0640","812A56F0 0960","812A5754 0190"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother. It gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000D01 0000","802A577F 0001","50000E02 0000","812A56C4 03E7"],"options":null},"Multi-Player (All Levels)\\Player 4 (DUKEMATCH)\\Infinite Health (All Levels)":{"note":"This is for DUKEMATCH that allows up to 4 players to VS eachother, and does what it says on the tin. Infinite health for player 4 on DUKEMATCH, All Levels.","data":["8024A98B 0064","802A56C1 0064"],"options":null},"Single-Player (All Levels)\\Have All\\Items \u0026 Infinite Use on all levels":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother and gives you Boots,Vitamin X, Night Vision Googles, Holoduke, Portable Medikit, Protective Boots, Armor, Jet Pack \u0026 Scuba Gear and infinite use of. Just press D-Pad Up or D-Pad Down to enable.","data":["812A4C4C 0960","812A4C6A 0064","812A4C7C 04B0","812A4CAC 1900","812A4CAE 0640","812A4CB0 0190","812A4CB2 0064","812A4CC2 00C8"],"options":null},"Single-Player (All Levels)\\Have All\\Keys":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["802A4C67 000F"],"options":null},"Single-Player (All Levels)\\Have All\\Weapons \u0026 Infinite Ammo":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother, and gives you Boots, Pistol, Shotgun, SMG, Grenade Launcher, Pipe Bombs, Shrinker, Expander, Missile Launcher, Plasma Cannon \u0026 Laser Trip Bomb and infinite use of on all levels. Just press D-Pad Left or D-Pad Right to enable.","data":["50000B01 0000","802A4CD9 0001","50000C02 0000","812A4C20 03E7"],"options":null},"Single-Player (All Levels)\\Have Infinite Health (All Levels)":{"note":"This is for Single-Player \u0026 Co-Operative and works on All Levels and does what it says on the tin. Infinite health for player 1, All Levels. This also includes DUKEMATCH that allows up to 4 players to VS eachother.","data":["80246683 0064","8026DE7B 0064","802A4C1D 0064"],"options":null}},"FF2F2FB4-D161149A-C:45":{"Always Place 1st":{"note":"","data":["8015025B 0001"],"options":null},"Car Upgrades\\'63 Muscle Car":{"note":"","data":["8015065F 0005"],"options":null},"Car Upgrades\\All-Terrain Vehicle":{"note":"","data":["8015066F 0004"],"options":null},"Car Upgrades\\Devastator":{"note":"","data":["80150667 0005"],"options":null},"Car Upgrades\\Italia P69":{"note":"","data":["8015066B 0005"],"options":null},"Car Upgrades\\La Bomba":{"note":"","data":["80150663 0005"],"options":null},"Car Upgrades\\Police Car":{"note":"","data":["80150677 0004"],"options":null},"Car Upgrades\\School Bus":{"note":"","data":["80150673 0004"],"options":null},"Infinite Time":{"note":"","data":["80150A6D 0045"],"options":null},"Play Level Modifier":{"note":"","data":["80150A83 00??"],"options":{"Appalachia":"0C","Arizona":"07","Beverly Hills":"04","Chicago":"0A","Cruise The USA":"0E","Death Valley":"06","Golden Gate Park":"00","Grand Canyon":"08","Indiana":"0B","Iowa":"09","LA Freeway":"05","Redwood Forest":"03","San Francisco":"01","US 101":"02","Washington DC":"0D"}},"Player 1\\Always First Place":{"note":"","data":["8015034B 0001"],"options":null},"Player 1\\Always Have Fastest Car":{"note":"","data":["8015033A 000C"],"options":null},"Player 1\\Gearbox Type Modifier":{"note":"","data":["80150333 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 1\\Lights \u0026 Sirens For Police Car \u0026 School Bus":{"note":"","data":["8115065A 0001","8114E4AA 0001"],"options":null},"Player 2\\Always First Place":{"note":"","data":["801506E7 0001"],"options":null},"Player 2\\Always Have Fastest Car":{"note":"","data":["801506D6 000C"],"options":null},"Player 2\\Gearbox Type Modifier":{"note":"","data":["801506CF 00??"],"options":{"Automatic":"00","Manual":"01"}},"Player 2\\Lights \u0026 Sirens For Police Car \u0026 School Bus":{"note":"","data":["811509F6 0001","8114E4C2 0001"],"options":null},"Stop Elapsed Time And No Traffic":{"note":"","data":["80150A69 0000"],"options":null},"Unlimited Time":{"note":"","data":["80150A68 0095","8015097D 0095"],"options":null}}} \ No newline at end of file From 5857da0404872189f5e26645141c6ed91f015bfe Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 5 Jul 2025 09:25:31 +0200 Subject: [PATCH 0492/1117] add cheats enabled var --- src/cheats.rs | 2 ++ src/device.rs | 1 + src/device/vi.rs | 4 +++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/cheats.rs b/src/cheats.rs index 0fe876d..d661e90 100644 --- a/src/cheats.rs +++ b/src/cheats.rs @@ -12,6 +12,7 @@ pub struct DecodedCheat { pub struct Cheats { pub cheats: Vec>, pub boot: bool, + pub enabled: bool, } pub fn init( @@ -69,6 +70,7 @@ pub fn init( } if !device.cheats.cheats.is_empty() { + device.cheats.enabled = true; ui::audio::play_cheat_event(&device.ui); } } diff --git a/src/device.rs b/src/device.rs index 19c4d2e..371e171 100644 --- a/src/device.rs +++ b/src/device.rs @@ -506,6 +506,7 @@ impl Device { cheats: cheats::Cheats { cheats: vec![], boot: true, + enabled: false, }, } } diff --git a/src/device/vi.rs b/src/device/vi.rs index a0fad2f..d0f8599 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -134,7 +134,9 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } pub fn vertical_interrupt_event(device: &mut device::Device) { - cheats::execute_cheats(device, device.cheats.cheats.clone()); + if device.cheats.enabled { + cheats::execute_cheats(device, device.cheats.cheats.clone()); + } let mut speed_limiter_toggled = ui::video::check_callback(device); if device.netplay.is_some() { From 16732d3d3cda47984768cfe14a619cf993f81f1c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 5 Jul 2025 09:31:03 +0200 Subject: [PATCH 0493/1117] use is_multiple_of (#468) --- src/device/rsp_su_instructions.rs | 16 ++++++++-------- src/device/vi.rs | 2 +- src/netplay.rs | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index 3302004..5694b2f 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -709,7 +709,7 @@ pub fn lsv(device: &mut device::Device, opcode: u32) { let mut element = velement(opcode); - if element % 2 == 0 { + if element.is_multiple_of(2) { modify_vpr16( &mut device.rsp.cpu.vpr[rt(opcode) as usize], element / 2, @@ -736,7 +736,7 @@ pub fn llv(device: &mut device::Device, opcode: u32) { let mut element = velement(opcode); - if element % 4 == 0 { + if element.is_multiple_of(4) { let mut value = 0; for i in 0..4 { value |= (device.rsp.mem[((address + i) & 0xFFF) as usize] as u32) << (8 * (3 - i)); @@ -766,7 +766,7 @@ pub fn ldv(device: &mut device::Device, opcode: u32) { let mut element = velement(opcode); - if element % 8 == 0 { + if element.is_multiple_of(8) { let mut value = 0; for i in 0..8 { value |= (device.rsp.mem[((address + i) & 0xFFF) as usize] as u64) << (8 * (7 - i)); @@ -796,7 +796,7 @@ pub fn lqv(device: &mut device::Device, opcode: u32) { let mut element = velement(opcode); - if element == 0 && address % 16 == 0 { + if element == 0 && address.is_multiple_of(16) { let mut value = 0; for i in 0..16 { value |= (device.rsp.mem[((address + i) & 0xFFF) as usize] as u128) << (8 * (15 - i)); @@ -975,7 +975,7 @@ pub fn ssv(device: &mut device::Device, opcode: u32) { let mut element = velement(opcode); - if element % 2 == 0 { + if element.is_multiple_of(2) { let start = (address & 0xFFF) as usize; device.rsp.mem[start..start + 2].copy_from_slice( &get_vpr16(device.rsp.cpu.vpr[rt(opcode) as usize], element / 2).to_be_bytes(), @@ -997,7 +997,7 @@ pub fn slv(device: &mut device::Device, opcode: u32) { let mut element = velement(opcode); - if element % 4 == 0 { + if element.is_multiple_of(4) { let start = (address & 0xFFF) as usize; device.rsp.mem[start..start + 4].copy_from_slice( &get_vpr32(device.rsp.cpu.vpr[rt(opcode) as usize], element / 4).to_be_bytes(), @@ -1019,7 +1019,7 @@ pub fn sdv(device: &mut device::Device, opcode: u32) { let mut element = velement(opcode); - if element % 8 == 0 { + if element.is_multiple_of(8) { let start = (address & 0xFFF) as usize; device.rsp.mem[start..start + 8].copy_from_slice( &get_vpr64(device.rsp.cpu.vpr[rt(opcode) as usize], element / 8).to_be_bytes(), @@ -1041,7 +1041,7 @@ pub fn sqv(device: &mut device::Device, opcode: u32) { let mut element = velement(opcode); - if element == 0 && address % 16 == 0 { + if element == 0 && address.is_multiple_of(16) { let start = (address & 0xFFF) as usize; device.rsp.mem[start..start + 16] .copy_from_slice(&get_vpr128(device.rsp.cpu.vpr[rt(opcode) as usize]).to_be_bytes()); diff --git a/src/device/vi.rs b/src/device/vi.rs index d0f8599..603fc09 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -148,7 +148,7 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { } device.vi.vi_counter += 1; - if device.vi.vi_counter % device.vi.limit_freq == 0 && device.vi.enable_speed_limiter { + if device.vi.vi_counter.is_multiple_of(device.vi.limit_freq) && device.vi.enable_speed_limiter { speed_limiter(device, speed_limiter_toggled); } ui::video::update_screen(); diff --git a/src/netplay.rs b/src/netplay.rs index fd01b1c..2b6fa19 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -113,7 +113,7 @@ pub fn receive_save(netplay: &mut Netplay, save_type: &str, save_data: &mut Vec< pub fn send_sync_check(device: &mut device::Device) { let netplay = device.netplay.as_mut().unwrap(); - if netplay.vi_counter % 600 == 0 { + if netplay.vi_counter.is_multiple_of(600) { let mut request: Vec = [UDP_SYNC_DATA].to_vec(); request.extend_from_slice(&(netplay.vi_counter).to_be_bytes()); From e4b7e291ddd76e0f669b8be953b7381d979322af Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 5 Jul 2025 17:52:29 +0200 Subject: [PATCH 0494/1117] update socket2 (#469) --- Cargo.lock | 24 +++++++++++++++++------- Cargo.toml | 2 +- src/netplay.rs | 2 +- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 533b138..654a470 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -704,9 +704,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.28" +version = "1.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ad45f4f74e4e20eaa392913b7b33a7091c87e59628f4dd27888205ad888843c" +checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362" dependencies = [ "jobserver", "libc", @@ -1960,7 +1960,7 @@ dependencies = [ "sha2", "slint", "slint-build", - "socket2", + "socket2 0.6.0", "spin_sleep", "tokio", "tokio-tungstenite", @@ -2240,7 +2240,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2", + "socket2 0.5.10", "tokio", "tower-service", "tracing", @@ -4103,7 +4103,7 @@ dependencies = [ "quinn-udp", "rustc-hash 2.1.1", "rustls", - "socket2", + "socket2 0.5.10", "thiserror 2.0.12", "tokio", "tracing", @@ -4140,7 +4140,7 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2", + "socket2 0.5.10", "tracing", "windows-sys 0.59.0", ] @@ -5007,6 +5007,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + [[package]] name = "softbuffer" version = "0.4.6" @@ -5416,7 +5426,7 @@ dependencies = [ "pin-project-lite", "signal-hook-registry", "slab", - "socket2", + "socket2 0.5.10", "tokio-macros", "tracing", "windows-sys 0.52.0", diff --git a/Cargo.toml b/Cargo.toml index 81e77cc..a0bcdcb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,7 +28,7 @@ mimalloc = "0.1" regex = "1.11" tokio-tungstenite = "0.27" futures = "0.3" -socket2 = "0.5" +socket2 = { version = "0.6", features = ["all"] } rand_chacha = "0.9" fatfs = "0.3" semver = "1.0" diff --git a/src/netplay.rs b/src/netplay.rs index 2b6fa19..ec77418 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -252,7 +252,7 @@ pub fn init(peer_addr: std::net::SocketAddr, player_number: u8) -> Netplay { udp_socket = std::net::UdpSocket::bind((std::net::Ipv4Addr::UNSPECIFIED, 0)) .expect("couldn't bind to address"); socket2::SockRef::from(&udp_socket) - .set_tos(CS4 << 2) + .set_tos_v4(CS4 << 2) .unwrap(); } else { udp_socket = std::net::UdpSocket::bind((std::net::Ipv6Addr::UNSPECIFIED, 0)) From ef4f93d6f0c88a0becc21e211ff394c42a9c37f0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 5 Jul 2025 18:14:18 +0200 Subject: [PATCH 0495/1117] bump to 1.0.20 (#470) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 654a470..d3a1941 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1932,7 +1932,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.0.19" +version = "1.0.20" dependencies = [ "ab_glyph", "bindgen 0.72.0", diff --git a/Cargo.toml b/Cargo.toml index a0bcdcb..02d12a4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.19" +version = "1.0.20" edition = "2024" rust-version = "1.88" From 6d85358f2b725321d6942a94559f3ae49218fc3c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 5 Jul 2025 21:25:41 +0200 Subject: [PATCH 0496/1117] re-order destruction of UI elements (#471) * re-order destruction of UI elements * more --- src/device.rs | 8 ++++---- src/main.rs | 18 ++++++++---------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/device.rs b/src/device.rs index 371e171..07feea7 100644 --- a/src/device.rs +++ b/src/device.rs @@ -58,8 +58,8 @@ pub fn run_game(device: &mut Device, rom_contents: Vec, game_settings: ui::g // rdram pointer is shared with parallel-rdp rdram::init(device); - ui::audio::init(&mut device.ui, device.ai.freq); ui::video::init(device); + ui::audio::init(&mut device.ui, device.ai.freq); ui::input::init(&mut device.ui); mi::init(device); @@ -81,10 +81,10 @@ pub fn run_game(device: &mut Device, rom_contents: Vec, game_settings: ui::g cpu::run(device); - ui::input::close(&mut device.ui); - ui::video::close(&device.ui); - ui::audio::close(&mut device.ui); ui::storage::write_saves(device); + ui::input::close(&mut device.ui); + ui::audio::close(&mut device.ui); + ui::video::close(&device.ui); } fn set_rng() -> rand_chacha::ChaCha8Rng { diff --git a/src/main.rs b/src/main.rs index 877a64c..3b6ea94 100644 --- a/src/main.rs +++ b/src/main.rs @@ -107,6 +107,14 @@ async fn main() { } return; } + if args.configure_input_profile.is_some() { + ui::input::configure_input_profile( + &mut ui, + args.configure_input_profile.unwrap(), + args.use_dinput, + ); + return; + } if args.assign_controller.is_some() { if args.port.is_none() { println!("Must specify port number"); @@ -117,7 +125,6 @@ async fn main() { args.assign_controller.unwrap(), args.port.unwrap(), ); - return; } if args.bind_input_profile.is_some() { if args.port.is_none() { @@ -129,15 +136,6 @@ async fn main() { args.bind_input_profile.unwrap(), args.port.unwrap(), ); - return; - } - if args.configure_input_profile.is_some() { - ui::input::configure_input_profile( - &mut ui, - args.configure_input_profile.unwrap(), - args.use_dinput, - ); - return; } } else if args.game.is_some() { let file_path = std::path::Path::new(args.game.as_ref().unwrap()); From 75457c5f7aae75a6c27c148c562f70afb12b9dbc Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 5 Jul 2025 22:06:47 +0200 Subject: [PATCH 0497/1117] codegen-units = 16 --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 02d12a4..5ad06b7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,6 +43,6 @@ slint-build = "1.12" cc = { version = "1.2", features = ["parallel"] } [profile.release] -codegen-units = 1 +codegen-units = 16 strip = true panic = "abort" From 6d43191c56fd39e9f06e3f1976154f3046c70fc2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 6 Jul 2025 07:28:34 +0200 Subject: [PATCH 0498/1117] cleanup release args --- Cargo.toml | 2 -- 1 file changed, 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 5ad06b7..1d9eb2a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,6 +43,4 @@ slint-build = "1.12" cc = { version = "1.2", features = ["parallel"] } [profile.release] -codegen-units = 16 -strip = true panic = "abort" From 8ab31b0c284ed6630bcd79abde912f60c210d59b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 6 Jul 2025 10:44:05 +0200 Subject: [PATCH 0499/1117] Use Clang (#473) --- .cargo/config.toml | 4 ++++ .github/workflows/build.yml | 14 +++++++++++++ .github/workflows/lint.yml | 5 +++++ build.rs | 41 ++++++++----------------------------- 4 files changed, 31 insertions(+), 33 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 40eddf6..af86330 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -3,3 +3,7 @@ rustflags = ["-C", "target-cpu=x86-64-v3"] [target.'cfg(target_arch = "aarch64")'] rustflags = ["-C", "target-cpu=cortex-a76"] + +[env] +CC = "clang" +CXX = "clang++" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 257e76d..92c386d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,6 +10,7 @@ on: env: CARGO_TERM_COLOR: always + LLVM_VERSION: "20.1" jobs: build-linux: @@ -44,6 +45,10 @@ jobs: libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \ libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev version: ${{ matrix.target }}-1.0 + - name: Install LLVM and Clang + uses: KyleMayes/install-llvm-action@v2 + with: + version: "${{ env.LLVM_VERSION }}" - name: Build run: | cargo build --release -v --target=${{ matrix.target }} @@ -75,11 +80,19 @@ jobs: with: target: ${{ matrix.target }} rustflags: "" + - name: Install LLVM and Clang + uses: KyleMayes/install-llvm-action@v2 + with: + version: "${{ env.LLVM_VERSION }}" - name: Build run: | cargo build --release -v --target=${{ matrix.target }} mkdir output cp target/${{ matrix.target }}/release/gopher64.exe output/gopher64-${{ matrix.arch }}.exe + env: + CC: clang-cl + CXX: clang-cl + AR: llvm-lib - name: Upload file uses: actions/upload-artifact@v4 with: @@ -87,6 +100,7 @@ jobs: path: output/gopher64-${{ matrix.arch }}.exe build-macos: + if: false runs-on: macos-15 strategy: fail-fast: false diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 96182d3..50bc48f 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -11,6 +11,7 @@ permissions: env: CARGO_TERM_COLOR: always + LLVM_VERSION: "20.1" jobs: lint-linux: @@ -34,6 +35,10 @@ jobs: libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \ libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev version: lint-1.0 + - name: Install LLVM and Clang + uses: KyleMayes/install-llvm-action@v2 + with: + version: "${{ env.LLVM_VERSION }}" - name: Rustfmt Check uses: actions-rust-lang/rustfmt@v1 - name: Lint diff --git a/build.rs b/build.rs index 80dca07..0176572 100644 --- a/build.rs +++ b/build.rs @@ -62,46 +62,21 @@ fn main() { let os = std::env::var("CARGO_CFG_TARGET_OS").unwrap(); let arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap(); - let env = std::env::var("CARGO_CFG_TARGET_ENV").unwrap(); + if arch == "x86_64" { + build.flag("-march=x86-64-v3"); + } else if arch == "aarch64" { + build.flag("-march=armv8.2-a"); + simd_build.flag("-march=armv8.2-a"); + } else { + panic!("unknown arch") + } if os == "windows" { - if arch == "x86_64" { - if env == "msvc" { - build.flag("/arch:AVX2"); - } else if env == "gnu" { - build.flag("-march=x86-64-v3"); - } else { - panic!("unknown env") - } - } else if arch == "aarch64" { - if env == "msvc" { - build.flag("/arch:armv8.2"); - simd_build.flag("/arch:armv8.2"); - } else if env == "gnu" { - build.flag("-march=armv8.2-a"); - simd_build.flag("-march=armv8.2-a"); - } else { - panic!("unknown env") - } - } else { - panic!("unknown arch") - } build.flag("-DVK_USE_PLATFORM_WIN32_KHR"); winresource::WindowsResource::new() .set_icon("data/icon.ico") .compile() .unwrap(); - } else if os == "linux" || os == "macos" { - if arch == "x86_64" { - build.flag("-march=x86-64-v3"); - } else if arch == "aarch64" { - build.flag("-march=armv8.2-a"); - simd_build.flag("-march=armv8.2-a"); - } else { - panic!("unknown arch") - } - } else { - panic!("unknown OS") } build.compile("parallel-rdp"); From d42e145b1fec0677178debafc02328af546919e1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 6 Jul 2025 11:02:50 +0200 Subject: [PATCH 0500/1117] rename rdp build --- build.rs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/build.rs b/build.rs index 0176572..26ffa77 100644 --- a/build.rs +++ b/build.rs @@ -6,11 +6,10 @@ fn main() { slint_build::compile_with_config("src/ui/gui/appwindow.slint", slint_config).unwrap(); let mut simd_build = cc::Build::new(); - let mut build = cc::Build::new(); - build + let mut rdp_build = cc::Build::new(); + rdp_build .cpp(true) .warnings(false) - .std("c++17") .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/command_ring.cpp") .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/rdp_device.cpp") .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/rdp_dump_write.cpp") @@ -63,15 +62,15 @@ fn main() { let os = std::env::var("CARGO_CFG_TARGET_OS").unwrap(); let arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap(); if arch == "x86_64" { - build.flag("-march=x86-64-v3"); + rdp_build.flag("-march=x86-64-v3"); } else if arch == "aarch64" { - build.flag("-march=armv8.2-a"); + rdp_build.flag("-march=armv8.2-a"); simd_build.flag("-march=armv8.2-a"); } else { panic!("unknown arch") } if os == "windows" { - build.flag("-DVK_USE_PLATFORM_WIN32_KHR"); + rdp_build.flag("-DVK_USE_PLATFORM_WIN32_KHR"); winresource::WindowsResource::new() .set_icon("data/icon.ico") @@ -79,7 +78,7 @@ fn main() { .unwrap(); } - build.compile("parallel-rdp"); + rdp_build.compile("parallel-rdp"); let out_path = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap()); From e37633ecbddd35836c9871dfec8e52a69b231d1c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 6 Jul 2025 13:18:56 +0200 Subject: [PATCH 0501/1117] LTO2 (#474) * LTO2 * more --- .cargo/config.toml | 6 ++++++ Cargo.toml | 1 + build.rs | 7 +++++++ 3 files changed, 14 insertions(+) diff --git a/.cargo/config.toml b/.cargo/config.toml index af86330..0fad2f4 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,3 +1,9 @@ +[target.'cfg(not(target_os = "windows"))'] +rustflags = ["-C", "linker=clang", "-C", "link-arg=-fuse-ld=lld"] + +[target.'cfg(target_os = "windows")'] +rustflags = ["-C", "linker=lld-link", "-C", "link-arg=-fuse-ld=lld-link"] + [target.'cfg(target_arch = "x86_64")'] rustflags = ["-C", "target-cpu=x86-64-v3"] diff --git a/Cargo.toml b/Cargo.toml index 1d9eb2a..863b59f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -44,3 +44,4 @@ cc = { version = "1.2", features = ["parallel"] } [profile.release] panic = "abort" +lto = true diff --git a/build.rs b/build.rs index 26ffa77..739867b 100644 --- a/build.rs +++ b/build.rs @@ -61,6 +61,7 @@ fn main() { let os = std::env::var("CARGO_CFG_TARGET_OS").unwrap(); let arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap(); + let profile = std::env::var("PROFILE").unwrap(); if arch == "x86_64" { rdp_build.flag("-march=x86-64-v3"); } else if arch == "aarch64" { @@ -78,6 +79,9 @@ fn main() { .unwrap(); } + if profile == "release" { + rdp_build.flag("-flto"); + } rdp_build.compile("parallel-rdp"); let out_path = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap()); @@ -153,6 +157,9 @@ fn main() { simd_build.file("src/compat/aarch64.c"); simd_build.file(std::env::temp_dir().join("bindgen").join("extern.c")); simd_build.include("."); + if profile == "release" { + simd_build.flag("-flto"); + } simd_build.compile("simd"); } From e99a2360703cf54fbd52146c4020ddd4cd3049ff Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 6 Jul 2025 14:36:52 +0200 Subject: [PATCH 0502/1117] use thin lto (#475) --- Cargo.toml | 2 +- build.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 863b59f..f0a879f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -44,4 +44,4 @@ cc = { version = "1.2", features = ["parallel"] } [profile.release] panic = "abort" -lto = true +lto = "thin" diff --git a/build.rs b/build.rs index 739867b..95de9fd 100644 --- a/build.rs +++ b/build.rs @@ -80,7 +80,7 @@ fn main() { } if profile == "release" { - rdp_build.flag("-flto"); + rdp_build.flag("-flto=thin"); } rdp_build.compile("parallel-rdp"); @@ -158,7 +158,7 @@ fn main() { simd_build.file(std::env::temp_dir().join("bindgen").join("extern.c")); simd_build.include("."); if profile == "release" { - simd_build.flag("-flto"); + simd_build.flag("-flto=thin"); } simd_build.compile("simd"); } From e578d6083d0368765d3d6e6993b0b16ee3608851 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 6 Jul 2025 15:57:15 +0200 Subject: [PATCH 0503/1117] Don't use wgpu --- Cargo.lock | 658 +++++++++++++++++------------------------------------ Cargo.toml | 2 +- 2 files changed, 207 insertions(+), 453 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d3a1941..0147616 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -97,7 +97,7 @@ dependencies = [ "log", "ndk", "ndk-context", - "ndk-sys 0.6.0+11769913", + "ndk-sys", "num_enum", "thiserror 1.0.69", ] @@ -217,15 +217,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" -[[package]] -name = "ash" -version = "0.38.0+1.3.281" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" -dependencies = [ - "libloading", -] - [[package]] name = "ashpd" version = "0.11.0" @@ -258,9 +249,9 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16c74e56284d2188cabb6ad99603d1ace887a5d7e7b695d01b728155ed9ed427" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" dependencies = [ "concurrent-queue", "event-listener-strategy", @@ -504,21 +495,6 @@ dependencies = [ "syn", ] -[[package]] -name = "bit-set" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" -dependencies = [ - "bit-vec", -] - -[[package]] -name = "bit-vec" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" - [[package]] name = "bit_field" version = "0.10.2" @@ -546,12 +522,6 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - [[package]] name = "block-buffer" version = "0.10.4" @@ -581,9 +551,9 @@ dependencies = [ [[package]] name = "blocking" -version = "1.6.1" +version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" dependencies = [ "async-channel", "async-task", @@ -690,13 +660,26 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "calloop" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10929724661d1c43856fd87c7a127ae944ec55579134fb485e4136fb6a46fdcb" +dependencies = [ + "bitflags 2.9.1", + "polling", + "rustix 0.38.44", + "slab", + "tracing", +] + [[package]] name = "calloop-wayland-source" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" dependencies = [ - "calloop", + "calloop 0.13.0", "rustix 0.38.44", "wayland-backend", "wayland-client", @@ -883,16 +866,6 @@ dependencies = [ "termcolor", ] -[[package]] -name = "codespan-reporting" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width", -] - [[package]] name = "color_quant" version = "1.1.0" @@ -1316,15 +1289,6 @@ dependencies = [ "libloading", ] -[[package]] -name = "document-features" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" -dependencies = [ - "litrs", -] - [[package]] name = "downcast-rs" version = "1.2.1" @@ -1337,6 +1301,46 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" +[[package]] +name = "drm" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" +dependencies = [ + "bitflags 2.9.1", + "bytemuck", + "drm-ffi", + "drm-fourcc", + "libc", + "rustix 0.38.44", +] + +[[package]] +name = "drm-ffi" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8e41459d99a9b529845f6d2c909eb9adf3b6d2f82635ae40be8de0601726e8b" +dependencies = [ + "drm-sys", + "rustix 0.38.44", +] + +[[package]] +name = "drm-fourcc" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" + +[[package]] +name = "drm-sys" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bafb66c8dbc944d69e15cfcc661df7e703beffbaec8bd63151368b06c5f9858c" +dependencies = [ + "libc", + "linux-raw-sys 0.6.5", +] + [[package]] name = "dwrote" version = "0.11.3" @@ -1540,7 +1544,6 @@ dependencies = [ "unicode-segmentation", "wasm-bindgen", "web-sys", - "wgpu", ] [[package]] @@ -1772,6 +1775,28 @@ dependencies = [ "slab", ] +[[package]] +name = "gbm" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce852e998d3ca5e4a97014fb31c940dc5ef344ec7d364984525fd11e8a547e6a" +dependencies = [ + "bitflags 2.9.1", + "drm", + "drm-fourcc", + "gbm-sys", + "libc", +] + +[[package]] +name = "gbm-sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c13a5f2acc785d8fb6bf6b7ab6bfb0ef5dad4f4d97e8e70bb8e470722312f76f" +dependencies = [ + "libc", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -1991,57 +2016,6 @@ dependencies = [ "web-time", ] -[[package]] -name = "gpu-alloc" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" -dependencies = [ - "bitflags 2.9.1", - "gpu-alloc-types", -] - -[[package]] -name = "gpu-alloc-types" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" -dependencies = [ - "bitflags 2.9.1", -] - -[[package]] -name = "gpu-allocator" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" -dependencies = [ - "log", - "presser", - "thiserror 1.0.69", - "windows 0.58.0", -] - -[[package]] -name = "gpu-descriptor" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" -dependencies = [ - "bitflags 2.9.1", - "gpu-descriptor-types", - "hashbrown 0.15.4", -] - -[[package]] -name = "gpu-descriptor-types" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" -dependencies = [ - "bitflags 2.9.1", -] - [[package]] name = "h2" version = "0.4.11" @@ -2118,6 +2092,12 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + [[package]] name = "hermit-abi" version = "0.5.2" @@ -2130,12 +2110,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "hexf-parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" - [[package]] name = "hmac" version = "0.12.1" @@ -2246,6 +2220,25 @@ dependencies = [ "tracing", ] +[[package]] +name = "i-slint-backend-linuxkms" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7245ddc95cd0ae039b8dbb53449eb94110b24cbd47a32082970a25ad31b77f8d" +dependencies = [ + "calloop 0.14.2", + "drm", + "gbm", + "glutin", + "i-slint-common", + "i-slint-core", + "i-slint-renderer-femtovg", + "input", + "nix", + "raw-window-handle", + "xkbcommon", +] + [[package]] name = "i-slint-backend-selector" version = "1.12.1" @@ -2253,6 +2246,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50166eb0f0f63ffa514069cdad5465d1d4c711c57dbd495f16f0a4ee14b82e46" dependencies = [ "cfg-if", + "i-slint-backend-linuxkms", "i-slint-backend-winit", "i-slint-common", "i-slint-core", @@ -2330,7 +2324,7 @@ dependencies = [ "resvg", "rowan", "smol_str 0.3.2", - "strum 0.27.1", + "strum", "typed-index-collections", "url", ] @@ -2368,7 +2362,7 @@ dependencies = [ "scoped-tls-hkt", "scopeguard", "slab", - "strum 0.27.1", + "strum", "sys-locale", "unicode-linebreak", "unicode-script", @@ -2417,7 +2411,6 @@ dependencies = [ "unicode-segmentation", "wasm-bindgen", "web-sys", - "wgpu", "winapi", ] @@ -2452,7 +2445,7 @@ dependencies = [ "softbuffer", "unicode-segmentation", "vtable", - "windows 0.61.3", + "windows", ] [[package]] @@ -2467,7 +2460,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.61.2", + "windows-core", ] [[package]] @@ -2650,6 +2643,25 @@ dependencies = [ "generic-array", ] +[[package]] +name = "input" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" +dependencies = [ + "bitflags 2.9.1", + "input-sys", + "libc", + "log", + "udev", +] + +[[package]] +name = "input-sys" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd4f5b4d1c00331c5245163aacfe5f20be75b564c7112d45893d4ae038119eb0" + [[package]] name = "integer-sqrt" version = "0.1.5" @@ -2670,6 +2682,17 @@ dependencies = [ "syn", ] +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "io-uring" version = "0.7.8" @@ -2814,17 +2837,6 @@ dependencies = [ "unicode-segmentation", ] -[[package]] -name = "khronos-egl" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" -dependencies = [ - "libc", - "libloading", - "pkg-config", -] - [[package]] name = "khronos_api" version = "3.1.0" @@ -2926,6 +2938,16 @@ dependencies = [ "redox_syscall 0.5.13", ] +[[package]] +name = "libudev-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" +dependencies = [ + "libc", + "pkg-config", +] + [[package]] name = "libz-rs-sys" version = "0.5.1" @@ -2965,6 +2987,12 @@ version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" +[[package]] +name = "linux-raw-sys" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7" + [[package]] name = "linux-raw-sys" version = "0.9.4" @@ -2977,12 +3005,6 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" -[[package]] -name = "litrs" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" - [[package]] name = "lock_api" version = "0.4.13" @@ -3070,15 +3092,6 @@ dependencies = [ "byteorder", ] -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - [[package]] name = "maybe-rayon" version = "0.1.1" @@ -3113,21 +3126,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "metal" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" -dependencies = [ - "bitflags 2.9.1", - "block", - "core-graphics-types 0.1.3", - "foreign-types", - "log", - "objc", - "paste", -] - [[package]] name = "mimalloc" version = "0.1.47" @@ -3189,28 +3187,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "naga" -version = "24.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e380993072e52eef724eddfcde0ed013b0c023c3f0417336ed041aa9f076994e" -dependencies = [ - "arrayvec", - "bit-set", - "bitflags 2.9.1", - "cfg_aliases", - "codespan-reporting", - "hexf-parse", - "indexmap", - "log", - "rustc-hash 1.1.0", - "spirv", - "strum 0.26.3", - "termcolor", - "thiserror 2.0.12", - "unicode-xid", -] - [[package]] name = "ndk" version = "0.9.0" @@ -3220,7 +3196,7 @@ dependencies = [ "bitflags 2.9.1", "jni-sys", "log", - "ndk-sys 0.6.0+11769913", + "ndk-sys", "num_enum", "raw-window-handle", "thiserror 1.0.69", @@ -3232,15 +3208,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" -[[package]] -name = "ndk-sys" -version = "0.5.0+25.2.9519653" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" -dependencies = [ - "jni-sys", -] - [[package]] name = "ndk-sys" version = "0.6.0+11769913" @@ -3370,15 +3337,6 @@ dependencies = [ "syn", ] -[[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-sys" version = "0.3.5" @@ -3763,15 +3721,6 @@ dependencies = [ "libredox", ] -[[package]] -name = "ordered-float" -version = "4.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" -dependencies = [ - "num-traits", -] - [[package]] name = "ordered-stream" version = "0.2.0" @@ -3939,7 +3888,7 @@ checksum = "b53a684391ad002dd6a596ceb6c74fd004fdce75f4be2e3f615068abbea5fd50" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi", + "hermit-abi 0.5.2", "pin-project-lite", "rustix 1.0.7", "tracing", @@ -3998,12 +3947,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "presser" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" - [[package]] name = "prettyplease" version = "0.2.35" @@ -4219,12 +4162,6 @@ dependencies = [ "getrandom 0.3.3", ] -[[package]] -name = "range-alloc" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" - [[package]] name = "rav1e" version = "0.7.1" @@ -4380,12 +4317,6 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" -[[package]] -name = "renderdoc-sys" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" - [[package]] name = "reqwest" version = "0.12.22" @@ -4470,9 +4401,9 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.50" +version = "0.8.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" +checksum = "a457e416a0f90d246a4c3288bd7a25b2304ca727f253f95be383dd17af56be8f" dependencies = [ "bytemuck", ] @@ -4875,7 +4806,7 @@ dependencies = [ "bitflags 2.9.1", "lazy_static", "skia-bindings", - "windows 0.61.3", + "windows", ] [[package]] @@ -4949,7 +4880,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ "bitflags 2.9.1", - "calloop", + "calloop 0.13.0", "calloop-wayland-source", "cursor-icon", "libc", @@ -5084,15 +5015,6 @@ dependencies = [ "lock_api", ] -[[package]] -name = "spirv" -version = "0.3.0+sdk-1.3.268.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" -dependencies = [ - "bitflags 2.9.1", -] - [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -5120,35 +5042,13 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "strum" -version = "0.26.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" -dependencies = [ - "strum_macros 0.26.4", -] - [[package]] name = "strum" version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32" dependencies = [ - "strum_macros 0.27.1", -] - -[[package]] -name = "strum_macros" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "rustversion", - "syn", + "strum_macros", ] [[package]] @@ -5570,6 +5470,7 @@ version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -5649,6 +5550,18 @@ version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +[[package]] +name = "udev" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af4e37e9ea4401fc841ff54b9ddfc9be1079b1e89434c1a6a865dd68980f7e9f" +dependencies = [ + "io-lifetimes", + "libc", + "libudev-sys", + "pkg-config", +] + [[package]] name = "uds_windows" version = "1.1.0" @@ -5714,12 +5627,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" -[[package]] -name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - [[package]] name = "unicode-xid" version = "0.2.6" @@ -6096,115 +6003,6 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" -[[package]] -name = "wgpu" -version = "24.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b0b3436f0729f6cdf2e6e9201f3d39dc95813fad61d826c1ed07918b4539353" -dependencies = [ - "arrayvec", - "bitflags 2.9.1", - "cfg_aliases", - "document-features", - "js-sys", - "log", - "naga", - "parking_lot", - "profiling", - "raw-window-handle", - "smallvec", - "static_assertions", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "wgpu-core", - "wgpu-hal", - "wgpu-types", -] - -[[package]] -name = "wgpu-core" -version = "24.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f0aa306497a238d169b9dc70659105b4a096859a34894544ca81719242e1499" -dependencies = [ - "arrayvec", - "bit-vec", - "bitflags 2.9.1", - "cfg_aliases", - "document-features", - "indexmap", - "log", - "naga", - "once_cell", - "parking_lot", - "profiling", - "raw-window-handle", - "rustc-hash 1.1.0", - "smallvec", - "thiserror 2.0.12", - "wgpu-hal", - "wgpu-types", -] - -[[package]] -name = "wgpu-hal" -version = "24.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f112f464674ca69f3533248508ee30cb84c67cf06c25ff6800685f5e0294e259" -dependencies = [ - "android_system_properties", - "arrayvec", - "ash", - "bit-set", - "bitflags 2.9.1", - "block", - "bytemuck", - "cfg_aliases", - "core-graphics-types 0.1.3", - "glow", - "glutin_wgl_sys", - "gpu-alloc", - "gpu-allocator", - "gpu-descriptor", - "js-sys", - "khronos-egl", - "libc", - "libloading", - "log", - "metal", - "naga", - "ndk-sys 0.5.0+25.2.9519653", - "objc", - "once_cell", - "ordered-float", - "parking_lot", - "profiling", - "range-alloc", - "raw-window-handle", - "renderdoc-sys", - "rustc-hash 1.1.0", - "smallvec", - "thiserror 2.0.12", - "wasm-bindgen", - "web-sys", - "wgpu-types", - "windows 0.58.0", - "windows-core 0.58.0", -] - -[[package]] -name = "wgpu-types" -version = "24.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50ac044c0e76c03a0378e7786ac505d010a873665e2d51383dcff8dd227dc69c" -dependencies = [ - "bitflags 2.9.1", - "js-sys", - "log", - "web-sys", -] - [[package]] name = "winapi" version = "0.3.9" @@ -6236,16 +6034,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" -dependencies = [ - "windows-core 0.58.0", - "windows-targets 0.52.6", -] - [[package]] name = "windows" version = "0.61.3" @@ -6253,7 +6041,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ "windows-collections", - "windows-core 0.61.2", + "windows-core", "windows-future", "windows-link", "windows-numerics", @@ -6265,20 +6053,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" dependencies = [ - "windows-core 0.61.2", -] - -[[package]] -name = "windows-core" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" -dependencies = [ - "windows-implement 0.58.0", - "windows-interface 0.58.0", - "windows-result 0.2.0", - "windows-strings 0.1.0", - "windows-targets 0.52.6", + "windows-core", ] [[package]] @@ -6287,11 +6062,11 @@ version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-implement 0.60.0", - "windows-interface 0.59.1", + "windows-implement", + "windows-interface", "windows-link", - "windows-result 0.3.4", - "windows-strings 0.4.2", + "windows-result", + "windows-strings", ] [[package]] @@ -6300,22 +6075,11 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ - "windows-core 0.61.2", + "windows-core", "windows-link", "windows-threading", ] -[[package]] -name = "windows-implement" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "windows-implement" version = "0.60.0" @@ -6327,17 +6091,6 @@ dependencies = [ "syn", ] -[[package]] -name = "windows-interface" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "windows-interface" version = "0.59.1" @@ -6361,19 +6114,10 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ - "windows-core 0.61.2", + "windows-core", "windows-link", ] -[[package]] -name = "windows-result" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-result" version = "0.3.4" @@ -6383,16 +6127,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-strings" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" -dependencies = [ - "windows-result 0.2.0", - "windows-targets 0.52.6", -] - [[package]] name = "windows-strings" version = "0.4.2" @@ -6411,6 +6145,15 @@ dependencies = [ "windows-targets 0.42.2", ] +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + [[package]] name = "windows-sys" version = "0.52.0" @@ -6701,7 +6444,7 @@ dependencies = [ "bitflags 2.9.1", "block2 0.5.1", "bytemuck", - "calloop", + "calloop 0.13.0", "cfg_aliases", "concurrent-queue", "core-foundation 0.9.4", @@ -6842,6 +6585,17 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b" +[[package]] +name = "xkbcommon" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d66ca9352cbd4eecbbc40871d8a11b4ac8107cfc528a6e14d7c19c69d0e1ac9" +dependencies = [ + "libc", + "memmap2", + "xkeysym", +] + [[package]] name = "xkbcommon-dl" version = "0.4.2" diff --git a/Cargo.toml b/Cargo.toml index f0a879f..2b95db2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,7 @@ chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde-big-array = "0.5" -slint = { version = "1.12", default-features = false, features = ["compat-1-2", "std", "backend-winit", "renderer-femtovg-wgpu"] } +slint = { version = "1.12", default-features = false, features = ["compat-1-2", "std", "backend-winit", "renderer-femtovg"] } open = "5.3" sha2 = "0.10" ab_glyph = "0.2" From 5dcfd72b1820d594db73d975791849c0574b0f34 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 6 Jul 2025 20:07:31 +0200 Subject: [PATCH 0504/1117] bump to 1.0.21 (#477) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0147616..ef35557 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1957,7 +1957,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.0.20" +version = "1.0.21" dependencies = [ "ab_glyph", "bindgen 0.72.0", diff --git a/Cargo.toml b/Cargo.toml index 2b95db2..6d39b57 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.20" +version = "1.0.21" edition = "2024" rust-version = "1.88" From 6c977dbe5e4e33f7292e984247f0518d88297f82 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 7 Jul 2025 14:38:36 +0200 Subject: [PATCH 0505/1117] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b4c777c..78dbb1a 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Windows: https://github.com/gopher64/gopher64/releases/latest/download/gopher64-windows-x86_64.exe -Linux: https://github.com/gopher64/gopher64/releases/latest/download/gopher64-linux-x86_64 +Linux: https://flathub.org/apps/io.github.gopher64.gopher64 ## wiki From a5ddea353a600a3fc21b70f943ce6d0ed453d736 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 9 Jul 2025 10:19:44 +0200 Subject: [PATCH 0506/1117] print sdl errors (#478) --- src/ui/video.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/ui/video.rs b/src/ui/video.rs index 33cec88..da01f01 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -37,10 +37,18 @@ pub fn init(device: &mut device::Device) { sdl3_sys::video::SDL_CreateWindow(title.as_ptr(), window_width, window_height, flags) }; if device.ui.video.window.is_null() { - panic!("Could not create window"); + panic!("Could not create window: {}", unsafe { + std::ffi::CStr::from_ptr(sdl3_sys::error::SDL_GetError()) + .to_str() + .unwrap() + }); } if !unsafe { sdl3_sys::video::SDL_ShowWindow(device.ui.video.window) } { - panic!("Could not show window"); + panic!("Could not show window: {}", unsafe { + std::ffi::CStr::from_ptr(sdl3_sys::error::SDL_GetError()) + .to_str() + .unwrap() + }); } unsafe { sdl3_sys::everything::SDL_HideCursor(); From 82f1965f26981305d99b94987c7798487d278fad Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 9 Jul 2025 10:31:20 +0200 Subject: [PATCH 0507/1117] avoid syncing RDP too much (#479) --- parallel-rdp/interface.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 39c2351..529f849 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -58,6 +58,8 @@ typedef struct int cmd_cur; int cmd_ptr; uint32_t region; + uint64_t vi_counter; + uint64_t last_sync; } RDP_DEVICE; static SDL_Window *window; @@ -435,6 +437,7 @@ void rdp_update_screen() render_frame(device); wsi->end_frame(); wsi->begin_frame(); + rdp_device.vi_counter += 1; } CALL_BACK rdp_check_callback() @@ -542,7 +545,11 @@ uint64_t rdp_process_commands() break; } case RDP::Op::SyncFull: - processor->wait_for_timeline(processor->signal_timeline()); + if (rdp_device.last_sync != rdp_device.vi_counter) + { + processor->wait_for_timeline(processor->signal_timeline()); + rdp_device.last_sync = rdp_device.vi_counter; + } interrupt_timer = rdp_device.region; if (interrupt_timer == 0) interrupt_timer = 5000; From f10c591047a9e2a11d1de32494f55c3581724ea6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 9 Jul 2025 10:38:39 +0200 Subject: [PATCH 0508/1117] init rdp device --- parallel-rdp/interface.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 529f849..1490eab 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -227,6 +227,8 @@ void rdp_new_processor(GFX_INFO _gfx_info) void rdp_init(void *_window, GFX_INFO _gfx_info) { + memset(&rdp_device, 0, sizeof(RDP_DEVICE)); + window = (SDL_Window *)_window; bool result = SDL_AddEventWatch(sdl_event_filter, nullptr); if (!result) From b67247f935fc9942b5b85568cde4ff35950fb521 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 9 Jul 2025 19:55:24 +0200 Subject: [PATCH 0509/1117] Sync sdl window to prevent fullscreen issues (#481) --- parallel-rdp/interface.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 1490eab..dadc6ab 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -230,6 +230,7 @@ void rdp_init(void *_window, GFX_INFO _gfx_info) memset(&rdp_device, 0, sizeof(RDP_DEVICE)); window = (SDL_Window *)_window; + SDL_SyncWindow(window); bool result = SDL_AddEventWatch(sdl_event_filter, nullptr); if (!result) { From 9bf43a16b4dcb5a59902e90a22d8447884a252bf Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 9 Jul 2025 22:07:38 +0200 Subject: [PATCH 0510/1117] Move SDL_PumpEvents (#482) * Move SDL_PumpEvents * more --- parallel-rdp/wsi_platform.cpp | 1 - src/ui/input.rs | 2 ++ src/ui/vru.rs | 4 +--- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/parallel-rdp/wsi_platform.cpp b/parallel-rdp/wsi_platform.cpp index e991187..a543b80 100644 --- a/parallel-rdp/wsi_platform.cpp +++ b/parallel-rdp/wsi_platform.cpp @@ -56,7 +56,6 @@ bool SDL_WSIPlatform::alive(Vulkan::WSI &wsi) void SDL_WSIPlatform::poll_input() { - SDL_PumpEvents(); } void SDL_WSIPlatform::poll_input_async(Granite::InputTrackerHandler *handler) diff --git a/src/ui/input.rs b/src/ui/input.rs index a42d78a..a7b2b7b 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -363,6 +363,8 @@ pub fn get_controller_paths(game_ui: &ui::Ui) -> Vec> { } pub fn get(ui: &ui::Ui, channel: usize) -> InputData { + unsafe { sdl3_sys::events::SDL_PumpEvents() }; + let profile_name = ui.config.input.input_profile_binding[channel].clone(); let profile = ui.config.input.input_profiles.get(&profile_name).unwrap(); let mut keys = 0; diff --git a/src/ui/vru.rs b/src/ui/vru.rs index 5cfc8cc..50a93ce 100644 --- a/src/ui/vru.rs +++ b/src/ui/vru.rs @@ -1,5 +1,3 @@ -use crate::ui; - pub fn prompt_for_match( words: &[String], window_notifier: &tokio::sync::mpsc::Sender>>, @@ -13,7 +11,7 @@ pub fn prompt_for_match( while result.is_err() { result = word_index_receiver.try_recv(); std::thread::sleep(std::time::Duration::from_secs_f64(1.0 / 60.0)); - ui::video::update_screen(); // so the OS doesn't complain about the game window being frozen + unsafe { sdl3_sys::events::SDL_PumpEvents() }; // so the OS doesn't complain about the game window being frozen } for (i, v) in words.iter().enumerate() { if *v == *result.as_ref().unwrap() { From eb97b96dafbdbea88948c5d2bfc59a1cbb581cdb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Jul 2025 12:48:44 +0200 Subject: [PATCH 0511/1117] Bump zip from 4.2.0 to 4.3.0 (#483) Bumps [zip](https://github.com/zip-rs/zip2) from 4.2.0 to 4.3.0. - [Release notes](https://github.com/zip-rs/zip2/releases) - [Changelog](https://github.com/zip-rs/zip2/blob/master/CHANGELOG.md) - [Commits](https://github.com/zip-rs/zip2/compare/v4.2.0...v4.3.0) --- updated-dependencies: - dependency-name: zip dependency-version: 4.3.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 33 ++++++++++++++++++--------------- Cargo.toml | 2 +- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ef35557..b691e5e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -629,21 +629,11 @@ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "bzip2" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ecfb22d906f800d4fe833b6282cf4dc1c298f5057ca0b5445e5c209735ca47" +checksum = "bea8dcd42434048e4f7a304411d9273a411f647446c1234a65ce0554923f4cff" dependencies = [ - "bzip2-sys", -] - -[[package]] -name = "bzip2-sys" -version = "0.1.13+1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" -dependencies = [ - "cc", - "pkg-config", + "libbz2-rs-sys", ] [[package]] @@ -2865,6 +2855,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" +[[package]] +name = "libbz2-rs-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "775bf80d5878ab7c2b1080b5351a48b2f737d9f6f8b383574eebcc22be0dfccb" + [[package]] name = "libc" version = "0.2.174" @@ -3938,6 +3934,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +[[package]] +name = "ppmd-rust" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c834641d8ad1b348c9ee86dec3b9840d805acd5f24daa5f90c788951a52ff59b" + [[package]] name = "ppv-lite86" version = "0.2.21" @@ -6808,9 +6810,9 @@ dependencies = [ [[package]] name = "zip" -version = "4.2.0" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ab361742de920c5535880f89bbd611ee62002bf11341d16a5f057bb8ba6899" +checksum = "9aed4ac33e8eb078c89e6cbb1d5c4c7703ec6d299fc3e7c3695af8f8b423468b" dependencies = [ "aes", "arbitrary", @@ -6825,6 +6827,7 @@ dependencies = [ "liblzma", "memchr", "pbkdf2", + "ppmd-rust", "sha1", "time", "zeroize", diff --git a/Cargo.toml b/Cargo.toml index 6d39b57..9ace25f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ rust-version = "1.88" [dependencies] dirs = "6.0" -zip = "4.2" +zip = "4.3" governor = "0.10" sevenz-rust2 = { version = "0.16", default-features = false } chrono = "0.4" From ff43f59f74b019b1009c5a26507ac337dd0c9708 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 10 Jul 2025 14:38:28 +0200 Subject: [PATCH 0512/1117] fix compile warning (#485) * fix compile warning * more --- build.rs | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/build.rs b/build.rs index 95de9fd..1b67a33 100644 --- a/build.rs +++ b/build.rs @@ -6,10 +6,15 @@ fn main() { slint_build::compile_with_config("src/ui/gui/appwindow.slint", slint_config).unwrap(); let mut simd_build = cc::Build::new(); + let mut volk_build = cc::Build::new(); + volk_build + .include("parallel-rdp/parallel-rdp-standalone/vulkan-headers/include") + .file("parallel-rdp/parallel-rdp-standalone/volk/volk.c"); let mut rdp_build = cc::Build::new(); rdp_build .cpp(true) - .warnings(false) + .flag("-Wno-unused-parameter") + .flag("-Wno-missing-field-initializers") .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/command_ring.cpp") .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/rdp_device.cpp") .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/rdp_dump_write.cpp") @@ -46,7 +51,6 @@ fn main() { .file("parallel-rdp/parallel-rdp-standalone/util/timeline_trace_file.cpp") .file("parallel-rdp/parallel-rdp-standalone/util/environment.cpp") .file("parallel-rdp/parallel-rdp-standalone/util/thread_name.cpp") - .file("parallel-rdp/parallel-rdp-standalone/volk/volk.c") .file("parallel-rdp/interface.cpp") .file("parallel-rdp/wsi_platform.cpp") .include("parallel-rdp/parallel-rdp-standalone/parallel-rdp") @@ -62,15 +66,19 @@ fn main() { let os = std::env::var("CARGO_CFG_TARGET_OS").unwrap(); let arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap(); let profile = std::env::var("PROFILE").unwrap(); - if arch == "x86_64" { - rdp_build.flag("-march=x86-64-v3"); + let opt_flag = if arch == "x86_64" { + "-march=x86-64-v3" } else if arch == "aarch64" { - rdp_build.flag("-march=armv8.2-a"); - simd_build.flag("-march=armv8.2-a"); + "-march=armv8.2-a" } else { panic!("unknown arch") - } + }; + volk_build.flag(opt_flag); + rdp_build.flag(opt_flag); + simd_build.flag(opt_flag); + if os == "windows" { + volk_build.flag("-DVK_USE_PLATFORM_WIN32_KHR"); rdp_build.flag("-DVK_USE_PLATFORM_WIN32_KHR"); winresource::WindowsResource::new() @@ -80,8 +88,11 @@ fn main() { } if profile == "release" { + volk_build.flag("-flto=thin"); rdp_build.flag("-flto=thin"); + simd_build.flag("-flto=thin"); } + volk_build.compile("volk"); rdp_build.compile("parallel-rdp"); let out_path = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap()); @@ -157,9 +168,6 @@ fn main() { simd_build.file("src/compat/aarch64.c"); simd_build.file(std::env::temp_dir().join("bindgen").join("extern.c")); simd_build.include("."); - if profile == "release" { - simd_build.flag("-flto=thin"); - } simd_build.compile("simd"); } From c13d354201afd69e220805b8fcaeb370de8c2a82 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 10 Jul 2025 18:13:16 +0200 Subject: [PATCH 0513/1117] savestate speed improvements (#486) * savestate speed improvements * more --- src/savestates.rs | 4 ++-- src/ui/storage.rs | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/savestates.rs b/src/savestates.rs index 1675ab7..e26b703 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -192,8 +192,8 @@ pub fn load_savestate(device: &mut device::Device) { } } - ui::audio::close(&mut device.ui); - ui::audio::init(&mut device.ui, device.ai.freq); + ui::audio::close_game_audio(&mut device.ui); + ui::audio::init_game_audio(&mut device.ui, device.ai.freq); ui::video::load_state(device, rdp_state.as_ptr()); println!( "Savestate loaded from {}", diff --git a/src/ui/storage.rs b/src/ui/storage.rs index 961523c..ce7f00a 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -341,7 +341,8 @@ pub fn compress_file(data: &[(&[u8], &str)]) -> Vec { .start_file( item.1, zip::write::SimpleFileOptions::default() - .compression_method(zip::CompressionMethod::Zstd), + .compression_method(zip::CompressionMethod::Zstd) + .compression_level(Some(1)), ) .unwrap(); writer.write_all(item.0).unwrap(); From cea405ea30ed4d28264736c9be6bff40d3d7ac14 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 11 Jul 2025 21:14:18 +0200 Subject: [PATCH 0514/1117] bump to 1.1.0 (#489) --- Cargo.lock | 50 +++++++++++++++++++++++++------------------------- Cargo.toml | 2 +- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b691e5e..9c249a0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -769,9 +769,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.40" +version = "4.5.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40b6887a1d8685cebccf115538db5c0efe625ccac9696ad45c409d96566e910f" +checksum = "be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9" dependencies = [ "clap_builder", "clap_derive", @@ -779,9 +779,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.40" +version = "4.5.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c66c08ce9f0c698cbce5c0279d0bb6ac936d8674174fe48f736533b964f59e" +checksum = "707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d" dependencies = [ "anstream", "anstyle", @@ -791,9 +791,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.40" +version = "4.5.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c7947ae4cc3d851207c1adb5b5e260ff0cca11446b1d6d1423788e442257ce" +checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" dependencies = [ "heck", "proc-macro2", @@ -1947,7 +1947,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.0.21" +version = "1.1.0" dependencies = [ "ab_glyph", "bindgen 0.72.0", @@ -2188,9 +2188,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc2fdfdbff08affe55bb779f33b053aa1fe5dd5b54c257343c17edfa55711bdb" +checksum = "7f66d5bd4c6f02bf0542fad85d626775bab9258cf795a4256dcaf3161114d1df" dependencies = [ "base64", "bytes", @@ -4503,9 +4503,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.28" +version = "0.23.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" +checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" dependencies = [ "once_cell", "ring", @@ -4527,9 +4527,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.3" +version = "0.103.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" +checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" dependencies = [ "ring", "rustls-pki-types", @@ -6488,9 +6488,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" +checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" dependencies = [ "memchr", ] @@ -6619,9 +6619,9 @@ checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] name = "xml-rs" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62ce76d9b56901b19a74f19431b0d8b3bc7ca4ad685a746dfd78ca8f4fc6bda" +checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" [[package]] name = "xmlwriter" @@ -6655,9 +6655,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.7.1" +version = "5.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3a7c7cee313d044fca3f48fa782cb750c79e4ca76ba7bc7718cd4024cdf6f68" +checksum = "597f45e98bc7e6f0988276012797855613cd8269e23b5be62cc4e5d28b7e515d" dependencies = [ "async-broadcast", "async-executor", @@ -6689,9 +6689,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.7.1" +version = "5.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17e7e5eec1550f747e71a058df81a9a83813ba0f6a95f39c4e218bdc7ba366a" +checksum = "e5c8e4e14dcdd9d97a98b189cd1220f30e8394ad271e8c987da84f73693862c2" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6907,9 +6907,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.5.3" +version = "5.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d30786f75e393ee63a21de4f9074d4c038d52c5b1bb4471f955db249f9dffb1" +checksum = "d91b3680bb339216abd84714172b5138a4edac677e641ef17e1d8cb1b3ca6e6f" dependencies = [ "endi", "enumflags2", @@ -6922,9 +6922,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.5.3" +version = "5.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75fda702cd42d735ccd48117b1630432219c0e9616bf6cb0f8350844ee4d9580" +checksum = "3a8c68501be459a8dbfffbe5d792acdd23b4959940fc87785fb013b32edbc208" dependencies = [ "proc-macro-crate", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index 9ace25f..d81cc6e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.0.21" +version = "1.1.0" edition = "2024" rust-version = "1.88" From b96c9e4cdcdb17769cbc59b1d02d5670ba7afc72 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 11 Jul 2025 21:28:53 +0200 Subject: [PATCH 0515/1117] bump to 1.1.1 (#490) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9c249a0..4c663e5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1947,7 +1947,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.0" +version = "1.1.1" dependencies = [ "ab_glyph", "bindgen 0.72.0", diff --git a/Cargo.toml b/Cargo.toml index d81cc6e..f65c1dd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.0" +version = "1.1.1" edition = "2024" rust-version = "1.88" From 03fbe658f2298e3d526e5b93b42626a0206567e6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 12 Jul 2025 15:01:59 +0200 Subject: [PATCH 0516/1117] Update netplay server url (#491) --- src/ui/netplay.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 39a472a..9d6e49b 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -116,7 +116,7 @@ impl NetplayPages for NetplayJoin { } fn populate_server_names(weak: slint::Weak) { - let task = reqwest::get("https://m64p.s3.amazonaws.com/servers.json"); + let task = reqwest::get("https://gopher64.bacoosta.com/servers-gopher64.json"); tokio::spawn(async move { let mut local_servers: Vec<(String, String)> = vec![]; From a46e4f505b849e2b96fb8d73e4e46eb336f45c9e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 13 Jul 2025 16:09:38 +0200 Subject: [PATCH 0517/1117] re-enable mac build --- .cargo/config.toml | 2 +- .github/workflows/build.yml | 1 - build.rs | 14 +++++++++----- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 0fad2f4..17b0dea 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,4 +1,4 @@ -[target.'cfg(not(target_os = "windows"))'] +[target.'cfg(target_os = "linux")'] rustflags = ["-C", "linker=clang", "-C", "link-arg=-fuse-ld=lld"] [target.'cfg(target_os = "windows")'] diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 92c386d..56f85f1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -100,7 +100,6 @@ jobs: path: output/gopher64-${{ matrix.arch }}.exe build-macos: - if: false runs-on: macos-15 strategy: fail-fast: false diff --git a/build.rs b/build.rs index 1b67a33..42b73fe 100644 --- a/build.rs +++ b/build.rs @@ -8,11 +8,13 @@ fn main() { let mut simd_build = cc::Build::new(); let mut volk_build = cc::Build::new(); volk_build + .std("c17") .include("parallel-rdp/parallel-rdp-standalone/vulkan-headers/include") .file("parallel-rdp/parallel-rdp-standalone/volk/volk.c"); let mut rdp_build = cc::Build::new(); rdp_build .cpp(true) + .std("c++17") .flag("-Wno-unused-parameter") .flag("-Wno-missing-field-initializers") .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/command_ring.cpp") @@ -73,6 +75,7 @@ fn main() { } else { panic!("unknown arch") }; + volk_build.flag(opt_flag); rdp_build.flag(opt_flag); simd_build.flag(opt_flag); @@ -164,11 +167,12 @@ fn main() { .write_to_file(out_path.join("simd_bindings.rs")) .expect("Couldn't write bindings!"); - simd_build.flag("-DSSE2NEON_SUPPRESS_WARNINGS"); - simd_build.file("src/compat/aarch64.c"); - simd_build.file(std::env::temp_dir().join("bindgen").join("extern.c")); - simd_build.include("."); - simd_build.compile("simd"); + simd_build + .flag("-DSSE2NEON_SUPPRESS_WARNINGS") + .file("src/compat/aarch64.c") + .file(std::env::temp_dir().join("bindgen").join("extern.c")) + .include(".") + .compile("simd"); } let git_output = std::process::Command::new("git") From 1d1e3829e442fc288979ba1036b9c9a7f0d6ede6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 14 Jul 2025 10:42:29 +0200 Subject: [PATCH 0518/1117] Update icon --- build.rs | 2 +- data/gopher64.png | Bin 168229 -> 0 bytes data/gopher64.svg | 1 - data/icon.ico | Bin 99353 -> 0 bytes data/icon/generate.sh | 6 ++++++ data/icon/gopher64.png | Bin 0 -> 1212889 bytes data/icon/gopher64_128x128.png | Bin 0 -> 22290 bytes data/icon/gopher64_256x256.png | Bin 0 -> 65598 bytes data/icon/gopher64_512x512.png | Bin 0 -> 249083 bytes data/icon/icon.ico | Bin 0 -> 65368 bytes src/ui/gui/appwindow.slint | 2 +- src/ui/netplay.rs | 2 +- 12 files changed, 9 insertions(+), 4 deletions(-) delete mode 100644 data/gopher64.png delete mode 100644 data/gopher64.svg delete mode 100644 data/icon.ico create mode 100755 data/icon/generate.sh create mode 100644 data/icon/gopher64.png create mode 100644 data/icon/gopher64_128x128.png create mode 100644 data/icon/gopher64_256x256.png create mode 100644 data/icon/gopher64_512x512.png create mode 100644 data/icon/icon.ico diff --git a/build.rs b/build.rs index 42b73fe..814212f 100644 --- a/build.rs +++ b/build.rs @@ -85,7 +85,7 @@ fn main() { rdp_build.flag("-DVK_USE_PLATFORM_WIN32_KHR"); winresource::WindowsResource::new() - .set_icon("data/icon.ico") + .set_icon("data/icon/icon.ico") .compile() .unwrap(); } diff --git a/data/gopher64.png b/data/gopher64.png deleted file mode 100644 index 0b141ae0c3bc8be5def9cc1eb705f1f5d90ceef6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168229 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%0D}&aRHq`XTwD>ItJs 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 z zL0X?||K0mOx^veUdz?%&0k%ySpFZ@~3s*xsAQC2T*gkcAfrjGj z(yXe+Co;^2+Ni$&ha3O(=Z}V{RA7Zf;92-U;zpkpnUis8`VqyP%`c4cTiaX$EwlU4kF&JJFx8T6c#=o~Sc1yM4>waI z4O<#ot+Ir#K6lx9$5sMsqZWxBZ-n80{@|ysz3whls;XUSC$#HB_o$=kB8apm54!9; z478_4$gfJ|)Cj<+Xiy)e>VRtGZ6OG>wRlq1w zu=l}mYD|pBa~3d}m^4xrx^kEm72hLc;Na1S+^a&>MU@kf36YCFl+8t=3+1{f3eMSi z%}#YbOKiesySM|gbVGBPA5Gq@_js4cld{R69)^}qE=Yd`a%lb(AX_g9*oj*I0d1y~_q_6UCM zQ$N}I?*DmYtW)#Jv#_jSH2}zIMzLwPdsGqarTlM>=7|wjF)Zcr*RCn@z1Rwrw`+CtrsB>~5Y$Si zUXL6d7?8w`+G>Yp>P;xwow zQXwOqW@q~b3R`5V{+ty>oJcluk4<3Mxa+)~VBvZbbq>i+%#Cj|)#-OxEODTKFuD1f z25Hk;y&Z`ZnfoSVb8)`PENEtg)xByK#rkMintRCIFHrZRF7R_0H6u})z2p`BH%I-` zj=Bb`Mbw_I%`QmOo!<_-5_BkxA!8I!B5v&6AO|)wGpSE702drmGn!j0I!2F#01~52 z@I>H)*pYsM3pZhg?Tqh_54#fOeKxfIaQQ(rD+Ca#-Yx=Z6Qc|B_$d2UAm2VxxaX2FeKoZf8?OoXPpU zFq9!4B<%C_Kv;e6k2b&UKkwK)()MaFP!L)8HlRfd+OK-n@P}V`{8QH~=umsgS{p(U zn5xX1Q(ZLNSLydpUtas*i;i71KMbq^iMusLAzszLHtw z)RfZEq)W{zSm`iI81Z z1Y)19?AS2!^8<6vde)rv=P`#YVTqMDN8$hnUT*0Uc}f)q>I<31$mRpL{ZMyos1U?6 zP$0SIE8RCyrX<8muSrCxLnb0pWl?38O6`h`%}@OBfjb_V@G8s|Lj<*KEzO^6FFAGi zIVUVyJuut~+LP_TDw%3$?%e9Uq1u2Cf=3VmS}IRjJNWL)SO3lbY-t4*L!qisQeyFH zmCt?U+vlEh#;ad`v9_luVgN}ha>V<9GIl;>=7pe88%U?k>N0v7wt*epX~c&%ou?GT zNPSY9P2~#NR<41hAyNRWUlP9DKiF2nF#}(sd!W3NuN<<3?aNaa)@Y?)@2ZZ%?Cd6`CD(_z%`$Qg`-@<($>?C@&EE^tDq_do*nv@zI)4d4g%j}A%Iyc74Pm{_RXKa^KYNK{`qGwW(nFF ziG~_aQwF|7cFgB z6Cy8Im$-!p;we|!t+BCAE?CHf&9_ri8g~AXqR^nLjwx$3{pk ztdf(51@M|ye*d&3kL+)K zSR}MI)OdVK20>F}wG|2llZ5rrtwuyZAWIURh-HOMx5mSLHDy&5C`X6CV*A$|S6#4L zr2~+9UNG`tXV(Lw0#R@N3ihk8?HPjFG(!&Duwuu8bYa-Xs_30Zxw z%fy^YmqbXCNR@>IIAqM;9h||T*@^!VbQ+H{fi@>GB`{FTzOp}iMJLX#Qw;5<;-%n~ zjWM>n%!WecrK(&{6t|U~uC(0((@lTs;^dmEl6IF?)->wA0w$_RyWQGy4{Im}ETrTK zS?V&fA;ia=k}u=ss$+W@Q3pcOzB6SCm@-K z$m5(S$~?*f0fB+4PTKo!*t2WX@EMm3tv=H;RYH>~(dfE`zD(`}CI~}3cqXuRa?72Q z_xw^v9<7+BR#>82Vd3^|K#BpoVe(iISazDG2W@eHwzbFalhZ!-{+G+5F%7ksEHX330qQv)xWrK z)kC`*KfQg*^Bp7%2>af)UHjhpj*oul%O9LGNE+skta2>1OI~$V#6m1ZDKVj{+G-o0 zY&4Y&A|lnPF$Jl+n~b`NmJ5_uB}+BB)R*7gq$AAbQDBueUA8#Eujg(k*X5cmU? zS9`oImE!w@=3n0hP#L($Xyt$l^c0bH6 zYusq8pXBSP*Y$E~DU}_fhA7!cho!^BS10!xTg=tFh@qpilVd@3wp4u5%!kY$IEs>v0|1CYAt{8(aG(cwj9vGQsV(=+J?Wys#jD5=q(d$_ zXkmxByk=2Lo^mw^JN2FSO+IkF-SLngG+=z;3JFXsW5o(frh%^Ice$JaD@umM_bd18 zY=7j+jo02e+9uztd1BEHcyLbR$*0cyz2jG|pVKd$=0rH|*LdZSx1g_9^9ayDxdV-Z zMTH?ibgMUuf}{=Z_vJm8uYYv^-4AbL<68wAC=_0;_KRz;|GYBEP~x-ST7RR-6bQdzK?BoMHezRvDj zI@|6K6;{-rzpy%g1;pm}yT(dY0n!9jNJJubl^7MFh+{RQROMN10A(Au=j3GPh>8!o z!6`oI?k1H{<8SeRa}r|_xk@1J+9JgX%0Q5LKdO_v51MQH5HEJB(~DQDQmnxecDQQDXU9VoT6%GT<+kF z5e|6NH#juE-!?)!*$P^na6BBV)Vvp;vi#W>J?Y!G-+bk@_if)ow#`&w_WfUP9DCz` z-uT8#j(Oju467zC%{|I`;g&#p^t;kF-M)B9(+#g$V@m1h(CrYV5kb{^;$pYqJR^e2>HjX$Z?oNrwM~ z34oj`6wO5HW}{HRh!P?6E8hMo^Ns6veCe7UJ13=rns&59Iy?{OoiO)>Coei~-kdOO zP1*74fLT2>Fu&igKuD|wLV{7{RIlLJL)lF|3s_k@5*#z9`VY@L_Vr)5f2v+%V?{kj zn@y$q$xnazDNj868JC`kb|XgoMDa}oAIdz*N{h~7paNKdSQiuy7rGdei)5*CI#AqT zO5Gw;p0Y|vLvx0Xdr~}-s%?+7?!Un{nxZ7op`%aY+91LpgQ?xPmz4BTXrs_s*4XX} zGI7=+AkMs3cr$BK$n1`ykdc8VD?yY}rz~xsMq^3pmZ+ksacWzXJc zrm;t6?e7+-ql5G~TtW-;6u&fWuess4>CTF9Q9Kfxm;yA;tMm^Wu4tJeI0U&gsRW3V=e~?KGqyrX2r{j0_GnSYb(wA=t`K?>YFHs~)|3 za}b2aV;NYAbIx6P+`{40q_uuQwW^Ia?H`!iw{oz5z^fQQU;~gc8-al&r_C|-N-4O4 z2*PSDxGupZYlq)-(aL}Q;dZDGh!PPj8#7jKzT0Vh7is>d!qIY86HpolQ4}yEh3)72G$} zfAoo}+53Ab1*}M^awD;!6?fP|Ng8rB2F7#1sLM%Kq!>k-H4X92UJ;X>uC7v$v3r&b zhe#EY$XzOafcyd-Qi(;`%w=fZP)%b3qG;B-CG4II`S42j8YHERJ7!jC+Oz!Gbw>c; zn+#^Cv-c{K3nEWKc$}c4hqxq!D1Jq0PFje+it(_{U7?; zhu{B3LLJd@NN+tpZlAr1=T$_J9C|AQY7H?_lzTN^`>ZS*zn`<$D@C{D5Ql*`Z{g6f zPliI(!1T$;L%~BgTWPBrD_UEz#-F>KBp@PaSuXA_gih#F5C$qj0Bg#ieZ!t%iNpS9 zA6r{eFIJ7ZCa(w2(45XSbIB0tuEUOQlSi+T)$QUx)AB4Y+i~W_xF?N1lypl;^N$y~ z%B)wBC>~a?*?=^1^1t)^@HkOwC89eZvLa9zqaqX~jd0VDC4bX^o`XKNGvz=hIQnUb zNIR3ZG3oWsfwqCltOqrFRunrW__c3+>&hQqc`d3HC@Y1IL)n0qFOffg`U=BgOPQ4r zCjgtiM*5(+y3anWp^3Au zjWU!()qp@zXs!j^#j~tz2~BFW!!3Kmt#^amS+^3bN2(0?Y{8^TVq&c@7X8VoXv`Xj zXjt_Ok%p1WixLz>BJQG`KCiOnl0!K5Sj3$D8pmA_i0n#w_~Gu2uGPWDik=R!p?%BFaDtLMMa` z0birrt%xYHPV^4bo(4-3u94q;3L+AKC~Sq3qt%5+$JGvxvrhY#0><07cjAK|{#UwO^DKoMs$bh@3%O)C?`F%w0^-J~zrOF*J8pmAqc?1L>noqL5L-Lj9>QeDBLXw2DhZLO zxM(IeWW!Div|#1MZ`;4&imCg5x--E{`Z95s zF;JYqTcfNXhMa0+Lt8`T=u-z5uB>mmD>%5<32Dwp5@LL>dSH^jf6u00J~A@6V(Hu8 z_4-Sm`1Dn4*ZI`}pb2V-wnzZ-*bG#bpHkoQAhC0LGz1G0QRjsv={!%j$P@=RDZyIS zR>&tW@&4|aE8p_nn{{$6PC1P%Eyf)nSuoV+3L^}Pe zPwHECtXg+7a3;O$G{iq6Wi?xEvEndMKj(O1 zZyJ|scu9+iGfMf3#h#}5H6=Ky`*QO0^j<(oXhnGkj)bD9upAt|Isoo>)zy{WmADKNlinr`tiU7q!$VhZ$T8x`TA_;?u|Iglg$6IzB zb>iQuKIeuP=e;-cCP!&T(#XouvXXPaIb&>-O!fkcS>VSmVHd;h52a@45HAk-dNo{h4s@xqUiTSADCys``{F;`kiT z4+?a9D_$<1_t6_Zv*YpIRP&$;iag+?rB|QV_s)w~2UbEO3?*SL_9(9oBw{Q&pj09v z7$6k2mF4SAt&gM?oA)Rp-yl_ls*_B-d`#u+H%U%)$GIi=i#nZuo>w~RFW{=$4 zJotnhpWuL*S;+%j%ozkAreJ2*ZS{@kjbHShf$?o89{s!=I%+JFyNZ$^tRxa!{!?tf zDbf9%N&s;jF)}tM%|axCGQlt`Y#3C{qi6PCfcXnLJ^XRS3c!s}9t7#meW7 z9oso;x4!fh-~S8OY&hc_zgB@Xfu^EK8baYNbcB*hSR3CqTN|UsDOMPWlE$&(BtB{` zO$G9aR;IuQ6owjB-*n-M`}fZN?QN43uYQ6yz;jM`(^5RED!6x8cO7rg{tpN1h!rFrDB z#uImGTZF(?wKlly1utgfLE2DLy5mqncp1W;nVYvFWMX4BQmFbKdz`wEW&4~trOS;# zw&F7Nw|p|PFJ+%lTqvQuL!DCdd2MTVTlGYw=@9^RW~Q6~NMveG2UxV`-k?)^3}cTJ z3zj1H@1%^y#LFU>SQY52dhELH>;e@4w*m=5Vvx;vmvk+xlUHUxyM@&GvfE)$Qh-$L z>`4`OwTO++fxrEfsFw_{vS;_PkKFKCcx1rhOj%UaVxTYlxmRo(_GDhH3)Z3>X z#;K=f_dn1+yiaGXCqis2F+i3=nmIN3*v;cFdTamc%W7krCwAXD|M<5sIZMX4(WAsN zCjoRC?d&J4tKdqi0-KS#ie?*> zYp#Gl+TRGT99v<$IwXKJHJpp0J%a!*@`iDIQbK=ld1dvcVE1u%d9tdc$gG^YO30fc z2&0HDIN44-plWq6CUrxji}dt&~9 zFVXBwNXEd1Mh4G)VRhv;k&xXYDe#Q!*OVePUfT-L)a*P|qCi0LIM#f_#_4t)BO9@k z!off+wcMA*#89Tlj$!PCN{bXjnGL$$e78rl63j+%-zdYhvK%$4xKjhjj))ew%{$w! z+21<#AWeVlo?^h8&zD8+n$O##O}$fxe&@Q-Utz;eZ{!#wq7_P`?d~R(XjiDm#4I9) z2#IqT<+~OsWN-^&?xaFkat^bKWq#?$VPxZ(Mlx zQJ!o2Ie}4TkRuITf8S+zxEeu3kT!J9p#Q6{I^%tR`_w|K#@rOA0kN5H2fy*#e|h<37p+}WMc9UWtCZEK z0$N+P0&El(U?OU@q;0j269Jm`h$8W>fT|1p<5m!eoN{2>_4Qi@w!T!`GYF@wESr7s zt9tT8XjmW=N@eBxWoNyZ+zwo9HQlw}B}j_^nwXr13dj(mQwj^JRXo$>Jh@vaAX*$z zrlVihtj={COT=D%{f^;waG)wIeBW{#c25P=xvKom?s1l?dN+S^D2Cw@xQr9opmUL{YB80+{M{$NOg?k0b^rpwvSE7PwOg11B_W~MXesJ<3hp}_?*54> zPC=xsBL2u~uYVb$FkEF*m%|N+wh@xSoQiMTSdWn}b>;jJ^l;?0wD6&z^kdtL@#pX})ckm5j1PtS)~sslyyf3MR4) z7_uQ)?aJYSO&1NUyNZW4vZ2N=7~-k{uqBur|I4%T~z5K_YfaAQGgMaKP-+$+MRd9-{<;W!toP>DHkidC~Zv zeEm2@qL&HQuT*wCzTAZH4jB?yR^!fGNk~Ohbot7mOW&zvr7>kH!wZjpQw}~sWJnFEYP~vm{)?$^ zl)?}Zv!=|rbx*116ajSdXR3Abx!FTInn!jwCicwjd3@x& zYXK%SVY$Bi%ynZw-8f^{?0X8+p$BF_h=kHhV+f*T0H}Ht5NSKC8*kl);SHDe zt+~Kd#}%-4X712qjl)k5uU=id;Cg>}HCOwHJ!q(~ijdN7cigI!JsC^4pcBq6ras)a z?!1Llha$JKDE@Y0FWiOuBTLM=Q6oUrV-*V(4S(v|jo;cm`Ot2y_*UFymrzryeC&pg zzw+f5yyjKcSvzki8{|bZD@h??|FY5A@Nh6cr|c6*ROc3g(E$&dxw)DY8ZcL%+&3Ta z^onJxtPrbpBE&d{T;Cg9eL?fcF6L(6=BwuRKG5EMzcoHoNdr=;t=(Q-b3Vj^tkW4v z07F;Y!wYm}0T?(<6^ei*wy0heQ?b9C-2s)?>*B06m+KfKVlP zeRtop>kD7Gh5Q)ZyZc^4S~HFxyLvU*z%i-Q8|DHcP%uPIt+sqqOc@eWVA7aE5s7k@ zVBic_0+Ggh=+XknREPT3URGaysclZpA9C=@sgUQXaAbCG?O@H{c=p)l7gop4VXi>~)us*SgX!b7>hive-fH|l zKvXTDkT!DLtjIJz-YrYlUWo%f0KkGwef@d!Pk)QrvmnmBnO*pr=mNPxN`B6_L!B=| zQ*?PB{qid}zwd8%&b2)sp~5H$8JcaifAu&2>f#G7UNv6P(8iOIs4OX}@#=kptJh5* zI!w{^#aL*BZJ|osT4w=82D2@@q-jGV+VB+BJCgj=?#;UbL26BiQ?N3Ro;F5^0P+$1to>BN`Z}GNi&%2V5o}l zz))q`cofbhYG?c>$G<4ki};i{rL%0|ZbICJU!vLox4gc=;WMvZaqdf*s(`{>`YHy1 zqCwiOjci_Z>5r^`)z1&T=z3XG571PrMvNC)2_-}eEBpJec+uKd{>-Y&f3iM)0U0Rf z!2uvlrZ%?TAKyR~U$q4d;#(cFe>84ej-pX_-unvOxf|cYHDo+q!J1sv@LT#h;oBM4U+&i;|VLDocxIp7;jlW?SqD zSpy65hR%PfH@c0)Dm>+CC>#VW(#o2W@+5V#Zm|DO4Z=Ky=w)g-DRvD0ji! zNoiRS(yQLI?xcaK*y)K_yA%@X4BGKSN9t%36`q$MEG>B+k?~>z09l-mh*+r`Qz++v zOXJ$5?U%!=WOmWa3uu4E@Z>YTI;&p+wAQ&O%J+ye$ zW$lQz&jkLmHKx`Nkq%bgy@ZIg7{sw$E_9D0`JqH$QUXFqi^0U1{N!$_XCeSiXwx5D zyW+feZhqOXj9vdGyK;F;+AU9X-*RZpT7OJN4e6Mxj6?p=A{aik#$@AzCKc`Bm`JXa|>+&L51C= z7Jw2RoodwUJkrMyVR#2lHIB{BlVN})-U24WtwWF515d(ZAtqu`t!=xczV)RdBIFDA zwWg1qc>HE*H9;otirZsVxk;y1vo$d_<%m6cL;zuAuvWsVw6_>oD(>#Vtw6;KqZUh= z|FX0ubmur)`mrpfTR=UetYT@~VcmpN@1$B%z9vF3E{by8Gmml$&$9I=A~tLD5Nln^ zfC{wY@lef!W~NZdikzHn#H+vP+1G7csk}ePEwIe97&ydUrLB3}oHMlnxM0bJUUctY zM^(vcFlyz)ANj|**^ujg6!8ZxXeGVpnzd{DbuLseX=2;Cq}4|$vp@`ERg~b5ttaC{ z8X1d@C3m3&qZJyIpqb>MWO!@V;@ZWyZb4yc!=u|?GqmpF>3t7Z2bb4ZZZ}?^Y6~rsIgRj%q<3SVKx9ZHfz5!a80t^TR56nzyWt3AK zqo@LkBk2UB%lqgTU$y0Zho6{l)QAIeH^_TDG1vI-AN0P^(BS-m}`EYDhYb=(O#bcOulaEh?gZ=fIrvyH9GB`ZlxNyt32esX=lDQ!kxX)CFso9YsiV4g(F zk!F`>Q`E<3`4xy=li!wHU;?sq z(-lN?N6GQoRmQ)xB$eZlm`SKI!lqrAboSFFy+{YYTcQXlyN}B7EB8IH^XA*`nQfsGD55Z@x$feK4&$^J`e$BkDRUF~Ky?pqgXq)Y(`;gpOUWpZS6 zS&g?`k`f4#QrZ$%7J-C|E89p)jCY+gX&bGp_WtF;ziCKR9 z(A@gvLqip7-M*OG=RVy!)RP9=MTxjGcEaOks&E zilh~6PMn;bnO&eHpbJPrzM&OEbp>+zv}Q>+JHn+Re5pw@l#!OVbf#5WaW_t0;Ql>H zqlh;^`=g<5BE$%x@D}Pf++w zV}n&lvbW^|3GlJ$b|8rF09iatM?6TqJP3=@E}2btEE_h1*;AUfu%piGesPZmC4R1g zzx2Lqy0bOj-%A=+-ithRqS$lJ^`Sc853e9~c$0G6 zzc3ZqKRF4o=rDI%6?u`FLb-@1Lao{b)h4Ns#N}u_T!prk*G2IrPxn8RSTV-DrUaug zpk(~MRp%<1I9i3PJS*W{c$gB(>p4uMF1iO%Ag!Ogdi_ObR)dfLVNq2UR<2k7>LWLN z^Ok$z*YY<}CvCNWUAgHTuUa9suEqd%YObM5Eqk9n zMcfU36q7Mow{-{GrosBiRqrv&wzsDbPe1bcxqClJhjwYTGIHU|E6Y}q1UWx|ZX1$0 zyvIjQOtzX$2ilx>n*y~euUJ+U(OhVy?97x8;!@#%myvg_w}nE=YRYN4C7+kHiKHc; zvQJVw1TC~7Dtrlh%^5sd-r#KNw)N4oFXek)IT@h&r=4O79Tc3;=#WUB9Z^ItV8ZCI zkJS1yIyE{u6Es6`bPHfv^LnNwMRw9e)T^qHs-2ynbms*5VK0&4<;msrDvvz6?~6Cy zMwRHa$6bsnA-1#K@Ru;W>YjN(g8#ER`)f*h~`i99WV38>*N(4iUK%(2-Gz6^}z^}Y~(_lTc@RY>G)gz|q`PK)2_v7<(Z5USf zG+%>?46a%;ux_FFma*6 ztd@cR{X-+yyw4kb!PL&LpSl{&?;+A~D8^ zxnQ9gkaKtJG-;x2;U&Y;)$p|-?~?%{FtMFGCbsPaRKCKj4DK=u6yqI4F5oxZ@aa=0 zXW1B0N0?D?>$hJqzP7GmR6*x}byg1*m!i1;TmJ z7i}HXzR^J)beBj={2! zH+;?&Lz}OJ23#`uW!+3cpc@(9fAARG;fIR`N(#m3kU!M#i^S+Ad%~CNX#SyQzw}Dw zwAQKOck2jsXAluX$fB6jY)ir1x&xOa4@w09<%{f89E$bj7;7hgD0?M~j(hbl74^x? zbcKp2G4s{Yx3~KO@Cnb z?I0DAuvz25%dZ$d>!l#WkR{E9W|x~oV7hPrF(f;f&Rke9zO2??WoUe$pNq{&X-U~} z)k00ZQu!j$r1+&IEh9p=r|N`&mWh+4Q*04wW)Y+t4=xPDVx{y(pykKFr6MtT7#-c0 zVE0Y}&oSZ7#&u0uIiFPP%2QU53RVyIR}3pu$tnq;%$RG1C#C~pXUGs2q}g+iMQ~@= z_T;c;+EZng=0fB60Z}8UD*14MBy)#^h4;JE%9R^F{`mukPq1e|1h!CtLe;+c%8?BN z)N(Oogi3HgN!eQdn?^kV6rSggjAyL1I{IIVW&cAabzyWgtgqaH+90V_aMt`KKQ5F& zkYwU}BLa$cEtw&fbj`5$voGD~`Jsgev7)MMxnd3_&K%BqoiUyW6X)N{%tfL5RfCYrI~d7_MG8C+M1s7M@bI@<%F<9y3C zhv6Y??D*=$?H@b&;Af|vyVnLyC9n4+<%?GUFy5hqCqMnU8_8pG@LU-Tu~@gww6_Df(O?%Fj)V0C^zu<%aIHtIFg=hfz$?G+;xuvoR4u90XN5tC`@ z!k#DT#4cga0@k2%?j_^b|8Q-^3!v5wM2TM9O~j?o2}HBA^M{U{0H+j2APCm495U=q zLkirg`&{>M(_KS)C}Cn&Mot8qsPHFfM3oK`B6 zt&X6(M1P`8u2Klv-9M&l{W>^-)w;4Ee(Yo~p)y*c3phy6^bBszfUBu=!+k@hZ-6w6{Bo0FrqceWh5QFgQyFr6_dRc*L@7cLXsTV+kxg&OOtNHr#$;dBVME~2Qe_bI& zsn~Rzy|wWz@cTrAE-N5{IJv+LrGTPPN9@-@5U_2jT(Z9U=8K15tr9Du+uKZ~cK?G< zfAZ5e!&E@xJVoN^BS=^q8W}rlyA@S-t~1nV%h9PuD+qnBx-cizs#o!iRjaWo>7r># zB$XIqL|E$8p-V1V^O7IyTXz*yqq~3E8KEY0Lb*RhjRbM$;~&WE-G6L;c7Z8pd|mZu z<9I)8LWdc)-nr^JhH!}lQ7)Lerm{Kf%J)vUeiS-X&<^7*?_zbm%s}%4REjsVX=&@c zY|Ofg+^nipq9jn+LBWz5kt{-xa-L~E`s?1Dx_L>32pPsIg* z*fYuDx{T6UPzBPSCGML!$*k^PU85i+V@T$X$-*>|0a1EYUe`_&KrofNAAI_*ho6A& zxq!@$6G+IHZ|ys8Rjnlu^a?neZB#yWC?D?b09B}ZL(7T%?zRm*Yx|FrVr?=~1w<>u z<1{?(4p5^Ei>9UE&BT~QS(Pj-#QUKatzR`pVp*U{(KSe7{15;2Kc6^0MQjTEmk1!U z?(ECFS|u{FBn_;bnw%c&hYhBi^NrDgDzi9}SA~j-iY69>fmlEE&RDndCGQ@&;B8zT zQQIUSl255;R^A7tz`#)Yl>pkgXKxs`kvY6jmEnF~KU%Y*$!3aX-%XZpXW_Ygr<0cU zl4h2C1Op0KJtC0o)6?Q`9kz-{&JyCvGkxU68s0-w$?H*zwzD)tX7;;?Nx4otKr=B$alWK+E;u`ATLDNzriW(s19%bXudd4tn+ zkUVh<0?N{w3ucak5XU^|pqJ#EtC|SFr#^jSW1(q?qf>4uNIj!(ymWQNxa-HML#-(V zG(BW<##)V_#AaZOl;hiW3nly~`!6JooTb%rwZF1rlL)18hcuTDh&V;UCDLZ~(vUb|^<%^KBE3Cbiw zt!6M*^#+Xs;XsW^;G9^T6GNn41QZg}=5@=jd*|w_eyqOY1<-&rh*@%mFmeP_+Q-i4 z4nWbDonvzRKKRgnMwmK<29YBLwqa>=DPwT&D`4v z6u89mSU8=dSzfVr(*U{&$c|hoitYhQGc_)~J6Xw)e9gVxV|#2VRZ>#EQ!Pk0t{x)h zIEH~Uv!ltm;NZkO8)OW!)ZKF#$1sZrX#7eZ`g9lFC^v%2B`O2gwB4!)VnQN=po-x$6DkVDC>FZI5l?b<%9~b>UH|&k*S>FH&1GarwUI75XfC*3x08>qurgxjVJq16+=0mLjT8)LTB-Ti?&Bpw~P-~3?&)|0ZeGL z?X!m)1kOZ-OdQ5Cx=E~$C>TO57e=~AOo);ec1R0`kQ&nP8|F_mxJ z{?NX|M~ug$P6Kc{iN5-x(eXM&GU|EBC@qcDl69bPqK{0)?;9cwqkSq(!>O6*tf zxqrv)-+B~Y4KT^xYJ`#ntIv3W-|uT=Q4o80DLhDp38D%nOK6J_(fXC6*S&GowLdwq z?iwavwMB6IgdJUqIu!lZU=8cnxH=GB%codcl#&0KNi&~Zm}~0~F7t+0Ky1cUI7+G2nkHbGW9m;BCrL!J z@k{CdoQ7p}Dy#BaE?zM@B&tR=g8yJ$XoesEr*Ed)CdibpVgLB*k#*}`Tp)?OloU`l zFa#R{tzF52S=}$06|e{`mHnKFQ$v8NQl-v*l~UbUdl&HC zoW4W4Oa%Re)UsFc#@4IbzlhL9OwrC*C)!&}!X*$n3UN1Yfmj(}qBsms#Oy&3c6)wA zq)KE14bELtfB8Af5Qao>n>+-iig)uZ_wLzu1fIz`L@5Z$UVZu2i@_{xp~|W*+C#3ddR^K*l1uQyy%G@|{$BqUtdQOL*u!cuPpBY?~!JDzPUGz~a8001!5 z$J^J9iP(rZvk_j3;~#%YIcm&mN{;KgY9&j9>)rEYhNp``{F006m8*o&EDfe*5Ng+& z7j06H4AisVl)j%m%vK;P+7}(hjiNEJ#Jqq+bR zQi{-PHyD!9@|Y*O2(UJ~!SJ$*+snyg}|5L+2rZ)$_u znj>;s^C0KdL9wHxitiawZ>ov?GvWSIt)r)ACuUo7O{>Ix6<$8zZ(32^I^MT>xLU8M zNDxXWFhCTZQvtWd6j*!FhWfc{D-Y}oiJ?RcfwF+U^p*SH_uhASZne1!v7Lk$+rM(v z=+-U!AK2lkwWNS3VZ)2wyz+&wXX;m7P+dsQVl!iv)7mowkgr7zFCoCmxO;#MxJDQso9%=5^9%*SblUNg`_4H^= zuX5bFT(rU^TneACg{+d2sRi+l#q$(}nl!XK4$knV4hWHE>e+$Lr>PSLK^4rPv(}D) z_5$&CzbZo;A)Y?mc*!|K%I@Hf3!o;IFa#!=ZiEW~7y>ZJCc@L17ZH`d*-dzok|Cqo zoNk{w7!pnul7;cL!We%;xlTUOM36N;)j^IQP11QSAsYTirEUjD$I z!(f7n5Qu~--hB`4*t_q*nP;qmL~#;bYf06xIqSu5nwy@SduA7u#oEzL;~OsiKH`en z`Pg!Xk?x4}UeRU0c3a-jTbX3c!9z!%-Fpare2-~Vt+{Z^a*xmi88uO~n;!F-M>rk6 zXN!Q^EUjqQg_SL&^K(am8W&fd=lS3dO8?LG#f$sf3H_3!nJYhX4gZb+p^lOYBVOLH zOf#bV5n?XM*sbrGl2k#ks%Nhqs8>wOYUEf>q$;BF)c*NU4aIk+mz9)|JkKr!3xOeW zwh?)0nQ3Luk&I*>L0xENvSIu9zWT-ssKj+6E{XgbZ@zD4W}f=IIO@HEU<|+b+;LB- z9i0SnNma!bl_kn7?M&6AP$jMoWK7ny7eW1dPycGd%E195K-IEet&FT~9NnW#B<}74 zB@1Jqrt zb<19~ZPm)*O0-!?8RJp4FFa#txORA^4JM9|JJHEgC-1uN(KEMh1Ofo5wLU>592nbn z!Bwxjch4V)4FjQ7=f2qV4XT}`2uf<%=#|nz7iL)w{1fJ?QIkl)=CLPtPfku5XYE4@ zs3>_ppSNjLL|CC5LjA7uNxA=`k6kCfgrK#{=Ps{zEhm>xv+JzO&^`a973-aG-^(?C zF5?g@N}Y%`8#3;B0I0N8-8)Q?Y}9xcTRVmKlDnemFBGeeu$H#0>>D5U_MHldBdaxc zHnH>2>`Yq*OmyQal@#xc5QvDT8$rtwku&j=bg0rv1C|1)w#6CawT)wy#|{TD?siN-RW0tm@3Hs3 z>osuUHQmj=M2HTN+p}}Wja8_r3{=O@x(FJQWRIpwsRa3zO1-id-b;rmfq9Xm{yq0U zVcXW!yqFoN2v!aG+tv(7C<>p|h+E&KI9icL5X!c#*oZ8@DM?iFsWexo4A5+q1w{CK z7R}%>(35G(YO1OWHf8*27-t^EkRlG_?EeV8eI~*Mg-*DB+cb&iX z?B&BXGAcm}0u91YLMCVEMU24#u=ZPls&#iD$6;+*Nrx)Db-e$vLz4uf38@;hcw7u2}7MkIL@w>dj1gaMax3q~&Bi%!%5~;GsvK1Pe&w z2<@bTO{;6G1}m@ti;zJi!OEJ{qk%bIxEN+%tgz1F;4XkIeJRT_n^$ZdtPmuoxX!uDx1tNtl>)oyp@4`hRRF2CVbb>h6bXx^ zI3$6s3@tac0o722JfdR_{cnH2^QMPSaE)Nt639Xjy!yJnPyLsRe(&Yyp1)#1s5yuE zdD9Mz4H!Z$bh#mAQWBw%0_DK@=PE_|C;_DGn{eZJ4R9Xpacew2aPY|F^d#66R~wnI zwJ>-10FwdPku7#(gRp$vX!FNi0m}FTqa?ES@0h-)Z&apcEV0hUbuOMVOAK0 zP_%I>&Cou%Zw_RPGGzlP6v&03M6(Nax)Ev`6ThogT-x7`Q6q<}*&;l77&eTo`m$3* z1d%)Md|0hB3#T~F4E5E_r5i>RqAXDhQ<3*=r3^t4KxF*y3|0S!NC~P%WKf_?s$Tzq zKQg8w#5yCD-}=wu0Evq>HOeLJ*Mq z10o`2ao<(PMlT0QU%<9>$e^}d1{JH6w=7yEoQ!Q+j5uL-MFAcAYP(%z1tk?+2|DD zbPA|0T|kDnrJUll0WOoFmya~2p;{@Asn!6~37EBbjZx{bkkS-cb-LshKLY?Pu@X}_f5e6h8L^#kV49z8Jn+~v zFa#H~*I9g9tY7Y(xx5f1JfAP(IU)gcOR7lh)ffe!RaOb6paYP}~ z!q%UtsH%?kd%mI6y_|@Mn$7m{Qxk9jXcO912Gi8xr=>BcDwW}7gR3?`+KXJ^o_4bH zVQ&hFmpoWO%BnC*eHQ(#nTe^VZvEnyZxk4)(`=Lo)?#GPJAdPd4c#eN1mLuz)Z+NW zpO-9~a*baCp_hTxZuv9;uZtGk%Uhrfqn4n2F9X%J{H@aOnTPo&L`5E>WhE3!qDTuq zZTzVDf8F+X$wpCTKr?mZYE*(+!Md^P##Qx`yXM$16s$y~#QfBOg;NXR$~wX*U`wYp z4gq9=Rv;&4!j_;$4x5yTpY)Z*lk>SDBAuU=g&8axg4)Qx-<@xH=D9rw_Ut=E9+So{ zL;yt3SyvyeQ($8a$8j3OY@>wxcRW;}7&@8|jj<*TA$)C2pON%3X_FT6#T+#SN-tCh8<}b&hOg^D#PX z3{Dk*4`NYoe){;#vk!QO9y)Yv`hka@BhOuw6d(SH-MX&6ajb4d)i^&mO$$uo`If-g z5?EB8GW;yNs#A1Dow+IVIcwV4nL9p*&oH!JgOiMBE@P365;Arf9R>CF1kMah$~p=? zq~aSrm4YSKmT#oyPc#x zflp1`{9!!xjs9Tf@gs95W?IZpSdb8@vOsa=*`ou#v0zdq<@gqjjK0;0JTv?w6D_j~ zN{=J+=NT z&Fvs{zF7KJkpyELq48970@#SKvSK$WsF*t^HiFQZXS^g(+;~(zESvy!x!FwnM1G3JA)1F`Ig*FGcpoh{tjJIKYX! zAVvYGSjy}R0RWihkL_uWn&^N@38B!1o0kps znVE)AjJ%1+g6@B2V&N6*JtBobO=qD|Kn7#x8sVwgg|kNcfmCkgoTCa;-?Qb8cA}WR zfeL(b#vT!(2p4AN?|bZN7?;LQ=z4!ZX+q$-@a{{pX zl8kw7K`k=eIkch)Rf)i+#sN0|RZSYzDT(cBr}jVH3Ic^4Shb>m`6@{4^&Km@Bo!eO zh6~Lj&(0rwq&mK7+14vq1!}sEK)#7eP-0S6@)zb$%sq2=d-o&$!bG3v+iDd6L#CT_ z@2*L3bc+fBfLOuCm9+~t4z6h~;XC zmJG%0EAwNPnRfV2Qikj1Qc-f{zvXK0VL9nYAoT;FNCXw2bJEA8?)=cD%`BRX73(Vg zRM4WLau%TxN_YG+o&$L?)KQtH?Jip;kqm%>6k^4mv7-NsmHiJrH$xol;gc#E+Oco; z*mQftGUGz#CNq|_nL*Cmve~wWPKDUa@%88td1V@t0nsxT~-@W~UW%U^w zDie!F%3ukNr`2^Vw!(^wLR~Rou4S7xj(d_|ef9#o!UcZQXseAMHvtA?BkB1&3!JF0EiiwfR^>qCEJ!g^z5{<^N>`44D->c z)%JK$lV{ge$1=;8rsO4j0*FtNJSE98Bj>a)rFFzNc=`lZlo-v zN)RBrO_P>Nx!)tHK-5v9jt`v~vNS6&{ue)Y(_=f2`-7D*6tUsJaPY#5hW^V{+b&x^ zFe^>V#41D(#EvNWDl}hs-s7{dKH%t&iI2|*Z3{BVeh`FE@hhXt2V?BwL^~EH_BT!* zBCx6Yqi1e+=Fvh%wMy_qnO`{i#KNw7`PhEXhVVpdJ~dCwK7F_M!c`u;%zbuoW7CfW zu)+iR*0$%5?3jJ}PCmB33PHuFg5W#6!73i}?a$84w}kyDQXZ+>t+m&mzp`RzK@B0% zc6%H4q(Eh{0C4${%nf;d;JdTjh*BsX(sI9dVwA0*4V*^GFNTtLJL*f=efEV&Pf#L=CGb_}jDPg2`$4SG`05R9 zhVrearrvPbYC~;FxMv;^5Rox};=u8FtIkN-VR%AT13*U;dZ+l{kF?=8TS`PK#732P zdTQ6>Q-P3SauL{Lg+bSj)ICNR!W}x7i1pl~BAUqm>x38sFdlh^pdzAyh*|@9DiQ0C zfXC8p>b}>~61AT!2Umd4ID3O%521Z^zw!F3`hMh!v(FtHgD3Oa6o#i(!Rn4T-MUZN zP{LT#s$+nWH55-jxNr&<-o6t}Q3nH^aT}{(U}#|Vs@2fwJ{2V*!u&RKKMlT!dF3eD@zigk3ba>dqlp$I_;tcjG< zf{vY4m3k}Qof%5v7sUcWku~fnDW@<$>6g5X>-kvO;4vl$KG_NlNSRioa@hh7txB zbuYDPOmidpIewCnj+&**F2O=OyIO|PGe2eequC$I3Qvp6{E!2>=@M~}UKL;wT(V_o ze7JIKw&nIX+_pMAbN4f+PR@s;b*N~vX_eNV#(&1%qjT+0y(pSniM3VMGzfXZ?C6Gr zKdNAWVKj>GOP17AQ#m@`q5D&0m|A|Jac3L#Htdl0~G|ae)aN|W6R<# zegY7-=NpH2hfO8ck#+0Mz=%~SQ*+|r{4=-7!Dnl&c^HJg2ZXH7tw+@m+lBdO9;&R| z;)9e0Fp+Hq3WRh|0<-b<9BnNV%mjsKyot+VL-CGJHuGYi2w>LnVZR`T5l_<6Idg;pSro=Mx?-rladqvH z=0K#zlxtj+1 z>#*%8Gjn_5K=bGxD}movS+?bTn7-D`;f3e!v(G(Tot;u&r5d3mAokY<0nCK(_~Wg^ zFEHyaf;0&g1vh6-HjnKLZF_jji-`Tko_pt?`j$6&q-H{`7;$E76ty$vC`1sS>E37N zPR)gE7{W+w+XPpiw{ob$^Fa{l;puuR=s=57Wao(H2ECx!QZZ)%Z6?D{9jqlLOA0T3?&eld=wMc*POfZ>kpm;oHe#8h*aj<_SPMzu0MNOzLTk>H3Z{(Fnnre;nZwve2m)w zB#DyVIUR(uQ7i3U#Eau^P8$luo|twwy`%HqxTrgOKg&~`(JxNBFw_fj{WvKT0d6k`L= zJG^h=1Hbftj+~tKj9E2UHEP-fcd46@3RzOlP(en`?r2AH_?G5NWxht|rmBYgormW3 zPX(M@;{#{dsaIaSJvtU3cdd{#k32a)GplL_hR6B`*UvwFYirl-X8IHv6V^Zw6%PD}46<}(v4T_(~wfG(l)J#FW($0D9S!rCFLWz`E zji|AtR-0Q__#b@rrN8_AXP>dI)eP{tuiW{%H@)YdKm85z2bn9HFs$cwtKGMk{`G4t zK(NKeI7@Se0_*?x-~7V|cI>S9UX6L}@;YFho~OhhA~o^cFWLmn{g)w{B-V<;D8sVe z^2GF97|n02VQOu#cEuGhfCkVI3MJOoLi5nU#(c}~tBwwjwx9WG>ygiUvq#y8ush*0 zu|rkrUq1EFKc2e%W9F&51{x>1N>#6|yYKY&KU&q6cqD8H1}55T zj)S(CYSeL)$m?sYM!Yh``LdkIX!_f66nYq)HO0s&Rn?)T#{Pmc=s% zXO$o+2Ja-hg7oRt_}Jzs)qq^Qt43R=8nLmdYb8h(9&^Pn7-RJqCCdEU@fgm%z_JQa z2!smLMqB*(w_LdLuit&?CEF^dVh$WS`QD%WrC<5Y56v}&d=j_-6#pj5z`u?Rpo~;K zoumoaBl!MJU;o-CKl?9!wF=c*4J(&b6(LxOiP!>JA=-(zl9g5x$V`*PsL}SOLRr{D z<@j`P%hMAePa^kUK!Lz++p_+gZChZ27*e1;f4Fh-V9?UOdcDsNXllPv4Y?xZd8#Hl zd{T0tB+ERM7^JLBBG2AO&)nbFo@JlK7zPVqJqyoM@{O_wYbdi)2te#zz{DVr=&oH8 zC+33au3>W02e5eId1K4_ja9&fYVXB!sqp2rOqM&?Yd1jx$5x^cXG;u4hk`Lu0lbxb z?B2*C4oJRGUP=@MKza2g1fFJ04GB}h(W!rxwWm0Ol=<74H_Aib4x)_IoIFI!X*~)k z5mX?9HUGuuuYucUB!NPenRu=l+_~eFlIPHla&F-SL$3YbKlqEE{K;QAaWdpeEs6(#j!+c;Z`1$#$}*hw`4-_MIor1W?Z>~+YJ_01 zYO57H*$59!R1QygQ`261!Hex!fTF&dfYG!W9o>%Nz!8WQq^c}RAvnD0vB~Eq0%H(+ z$`Z&!h!kStcq+J2OlUKW&jiD?m<>Z~y3XeAgk7Vf11(hBzhbXoXu_EM2Y8A|L( z+L5vFQ*H@GQAxCHw>(o$QRI|1w_8dXVoD|jDFnx=rTvogSM=A7O&m%{6%fPUeDdU} z1?v%kI3^8>)g2kA`yeL6kL{Z~wO|dbq`)XId?FPx^SKkRXPcg-Y=xWCw$-+a4&W%j z!Kg@T6&&1qk5XQ^AWKxqzu8Dt%n-m^05+`*|Ku$fTyim_g&+HD1e{} z8#J0no|~IlFn(pI-#38508GR=T1kTHPz+6?&q`2M06wA@9rNUPAHtcWavZY(u^JJ} zHd3g1hMzt>|H$4c_FP<2cjq=V#Kx7?OSUWvtcVN$nZCT3Y|hP32e{AiDoS<}y?DHPii8Rt@lqb99LA7pt#CPa81uP0J5^Iv(@*+I$5h`icE$*uuVn%*_g&Kl_AE+?6ck#Vw{c+m<^c_%&ahHJ3O3%(Lkkb?nesi4ARR$7 zcyyp*NDb4WQ;h?snugr1qy_k&=tPR>B*BI8A&@MF+BKb3qQF9IE;f;SRRm$QkRv+i zQewi5Iuy2IgDI+9m7?P#6$${m5Mq4T|NS>#a=|(i2JPxV-`8)s>)k){3w!rXbG0ur z=zjiS`QKss_WF_xwo0wP{+icbA*~r$R;8BcsX23SN)Jua!Bcw1hA{(%dH@T%kP0rk zy&HcbB@$M6@2>6nJ12gT(y+$+z>*${hV!AU4Ajbwqv_6 z6wI7z968WzNv)sj6^bpAv{S@o*ncUfa(5MESD@R>B#L%E^6Zt8y-Xz#8@^@7^h6^h z7vV=;ixr`L;dx_ghALJ-alA1%y3|`pm;96mXT=PWOzDB^^JqD9f7$6!OWw>f2ii3A z|91*bai(ecaBaCpxeB$&CyMPTNRa|ZS!#=W3%aF`XrVqz$SmfsS)YPzMpj~og$&iJ zuexL{R2)-Qa_dFsTlS_04u?=BFhyqm8tVun{T0Im&`cwI{NSW#5-gKt(gfrK+G(f= znc!fZ5`#F?zC2wfMFW288qg&zv4^ozsI8y> z(I0*7d#^M+3kWfY#TX!HzW(Zwmz+J?wxRXh1barSEKp^Q_Cajhn(2T66;&Y>5>@Mh z6*_%XA>^Xkg2`4q_MbgI{}1;Zv}8ya6e|%7gu$EMaP81=4K|E|sxulV_smWnlTZiy z`aI()nMkXQX(nd*Q81mHPMfC44KfE!BgUVo&IQ0rfV+`~K|Ixzn;to)>_uBZ?%o@~ z`23nnH!vWSUMNBt1+A1(WSL(1^d&r&Qi%%02XLKmKew)n$o;g4z5|qYteG^&qQz21 zWzRJzNnH3T%e51JrTPBlljeU)rCzS8sGt=2SEzQ zq^x4))fcW_Ht1XNDBC!XZ+>)Q-^r%W9C-;ux;a#JY@kxDu;b_t@0tyeXo5Md5^;4d zyn-sMNUKSV3e*T#KyDYOq$?V!$wX?1;#o|vybustU1*Ct`zupE3e!WG*Sn?ci*fuf zI7>lQ1kE70Zrj*9E?Z^8mTIfo=ihPr-9PgSzco7xHlAvHMcVhc4Cp?9Ij|G~21t8& ztp8IV`siQ&@$dEbS5<@GL4?3OR;kRRY^(U5gy(%{ltMej~xt) zIE`9tT3vh5wlNz>*_pBBPR2{g zE(5UAwrB+HK~N5rN#uvG-n4low?j`MmA=a7zx=h|{GC6ysDonx^SqbCcTFnmVGmX$ z3-#gp`05o43r%7c)vAyG^_CZ$Ggu8ZsQSiG_4b`JKl_i5{QSosU9i3Z89~LTXHU-m z*=+}(JPFjW5YoA-SFk(0)F5EJdMyNPVK-}CO5Z8>8j zY&-4(*>EyAxj$%#@0-4wiNet3RJqtvKcRm_xT;9Ag|SFEL8KcbXG<9dY$F3DgD*dL zWUftMWta$&gCvyeFIu*G$P1J-vJG-XoDy`V5t@9;1mr=-ztl+=szFBMLTj;CSP} zWZPqQbXk;pnuuBj6e25!`X(1zpS$x}cx(vP=>hTPQ-(UDWhbgtkE)TGcp?}SP%CT;o^%;o1B5HrB7J85UJiRf$56#0CK>EE=d9AJeVM|M{1Le|gJcm|Aqz zj2bA2)LOe?^YWj5&wF5P7A%BQhZasA2|`<``4!)bnw?odopD7dOK{mg+3r)El?p#( z|0gI&$uRGqkZ(RZL5|3s!a`7`YL#Dq`I*oR^v{xc7x+)b@$W+I9WR&UThc*TGt87JS@W_nddMKKu?VlbaLw_F;7>mLY@5A`5mIrE^>IkLnAgWwKlazOzh(d+ zxu3}i71cwh7L>G`(ze9ZfuzcQR1nChs#0LXH(s*(qK(zCZJ`2ItKM(@-#^*;>^|}l z#RH>^3i7>~a=Ko+P*RG^bf5jB$0lz2`mKg5Adi@#l^qlHoA%-7KfUYw|M>oYylbj~ zDphIY`o4RPv_E$Lr^JhQyTXSc|+Q=7Agd1=Ba8FtV(K`6m=iZ91nl# zlTUo?&LeHEDLZ8$h^})`(m>w-zISZgvIe#ZW<;SO!sfC43p1xA#6YdaCbrSc_KqmF zGR*EZXV5e<&j{#3h*?>X2o(iL)nmE+@#A|Y0%H{J$O%fSHqdRG`z}9Yq#asGT2#ih zHB)eRmZ`DU)HO%0KiTPB^6DzaQq%Z)n3(Zt(u+c*u+vCcwI$nqjsMNU&{zW~1uE&w zlrSwSY`)~lAx@gtijqgUd}ZrD9iZeOhbX@AB@&*+Q;pL|WkM+TIHp{u=n{bg(RE|h z7hkjjp}MnHBkXS7T4?JR?m20}3_uM)3Q?7+rz=N&f+*QG@bEKJHrf8pX`<2TY^+@= zAS!CY;0IrQ#-oRhe&8=3oN95+BLRnG6iUwT%(2^uVrZb^uNbT(b{Q0Db_~LEN83%y z@%eC4@$<(Zs>rYN{EAQj5{O+ffcIX#&NqPwlZfY=J$ny+@ON$qZ66aUOk|7p?Z~C? zvQ*eX$gWC-soeav+jc#3)cDLA`W64NL-Viu;O+1D!~6g4nNa($&r0#BoBu!NMz^S=4msh!6f zRi-EkvXVkQ*0m#jAYwJd=8?VA)9sMrE_O*wN~EHsZP5X?|MiWReC?qlKlP{g9hj-s zJo2n1B>^Y*962pORr-A0Fz!R*HAD(kfr9CoQ||+R)ZD=b^`ulJW|FK^PdSB(H|+}Nuh~A0f+=(LXGjr-l=={&KM607v@=^ zuu3D#ytiDsE)>=H_ODE%I(2&LXnv0=%dd`7#UWLFGqNkQ6iVOBk-HnUykbO|(>=Bl0AN4C2J()e<=LM4=LWKdoQ zIE@j?f{aCpfdFT`+_vG>+m>H;<_JQGqdgM{%s4dJ_~*Ni!c-z+AV6UttH)~0YDtK( z`)K3vWZPp-Zk@~=^Q1u}lmtXX9zgB3oVU8~M_<3`#s?1k^q=3cXI5&SCj{Z4rdkJyMjQ~QHHqJYDOh;zD_`=7PyFu2vuf>D zn^gb;GqWmG6rqCD7-b?4gLuN(LM z&_|y5^-t}+XSXQVedEG0b0#DZDM%WPpLpMEUiYe3BWM8_prrSs#cDqoa;ZNUjWTwT22w-v1&IuCe3(p6I&1XS$BupAFYnqv-|q7i2!u(a+t(9`BNv}BQmq&ZkfxSK#F%M@ zkL;Uqt))aqh&#O$3DAwwI;JT>LeWnxZC<{n|D*4^;8m9gJ{H<71y?5*S|9kYzx|#c z`M~3kPq9BJBoYP6=$Oav5sA=arRLX$w%_!sSAFI0|MtSmx3$`>Ftid-(1utj*r*6e zXaGQ!gmCb9@Q43$;Mcyo|BFxCTlV7C1LiYNhJSS1@n8JRGw=D>qd$GaV>jG-Y}YX* zQ}umT!y!Y}Le<6eBY=oyq5ax7U-Ub_`U}kM_|^)60!-STZ=X2Om~VnGIM`=kG{0Wr z1zB#AqOsEMjQ!(_+bPFLJ3(BGGK3VuKASzq8sB()l08yVKuFaEw=#y_e)Z-)B5@3@ zc*jREEgH9>=i8;7OIPmmOpZ|&1nCk>q%!H1mRn4koT6$m3n%=#SIyacV#>qB+V5nfy9!JRW9acr+I9fB*GooJc}V1z1bht1EucKhIx-W^UwV0cfNVk8nb1!p1CgAzL{4KE5rguKq3%`!ZLIr2=3lB z`JpfE{`rqR_5Qzk>c4#S$zT76r~c||`@Z(j%~mEgraugu73v8TCTa}PRpI+m7}Y!TDJZj**ZkMkNpL6eFh_7Zkn(uz_slQQYj zcX|mN>eQ-A3rGjzw75lL&b(N@xZXg*O=Eqpziho)>+BtcR2c*nHvf3*u_JTp!&(Li zR&>pXS-Grgl>lYK_wSybZmNMTO0vvfAll!A8n9ewwYzwg6;{b`sw6PLt(S`?{$ zmnJRy;@}SZPk-wR_K7e3&Ks}&KX1PFgKxU-f4%O7?|RXCMk8oh+k%E9!YW1pVR)YL zeM1Cm5m*7(uxC6r9*9L_*zMw)Am@dxYGrg;{X_rre~hnQBQ`*E6zDWK5^c3k?wOuC zVFOev6~FE$`y#2!c)av9+m}pS2}HgCJ#?U?%y=irp&%Ak7?|S=_OtgMbYU=*01}55 zRQ0u2u3popfeQ(-*fK7oBZ?7xMtdmTXrQdNOPTVzD8^|)WwNBSUC-knjF8*NEzeOZ z6_bzATO3P+oLJ~+v?89*j+B*knWj+o*=ckzJvyf>`|0T9cZ56iyaze{*KOM{iGA~x zn}!CARf0GT08ljskMEzk>9JG3SBEOpKy<9mTUYf%iB*}g=Sbt3V{;W_5{HVMHBGil z1adBz6k13>*`Ijj`2)jE&o}oxJ@xY+dGJuvulk-cl2D8w^+;a4eUyyAt(EvJi3o=$ zTemzpW4sDLltu{9Xxnrt!`MammZKc^hV%R<04ksc+mWI0XRp}s@pru7#TO7@QR$y< z(9eC~*MIMi{>FM$TFf8iyE%0mzT{K9#)4q^%5@i9fAQGbYQ10kYUuOrwOd#H^6Soe z?F%bcUus7Ct+k;b()|clot-~h;!xOzYyqnvD7)C7F47CB3lR}9I|4~)x2{`%;d$pF zT;Ry%Fm4t>=O@}H4>hNnYPB}tdrT>NFLsS6UFtdX-=P+i5lXVaH31J1KlF{>{J_+c z$C|#U?g&@ixwXaUvg#XOxJ4{S@V)mwFm>)yWtm`B9noT|zq6^+>4EZu0Cf09bV<>4 zX_qzF0rR>qbxz=7mr9~mMUQ&2jF@9bVVa`TfL^;=skV?)2#c-gEFhxmj0SL8^F~ey zh#dmE<#EYbaB9=y!ZQZ1Ie$b0Q5F}GQAj}=ko@CqyXOJ{LlG!!-GmoxSqAn(7y`{S zgL|HuBo{lHW3l57vvb;<#+p9D2cM(_{hnb7NP_8%+_JnZ7ixgPfVp~b!nsRY>pU_nSq9+ z7L6CI@IL(VZSTFTPc$IU1jhf34}SQzJ0FDacc8EDN&MeEDF7_rxc$o4{^V6}fA6`k zzH;S-Yx>uZ_Vt;oH!k~`OD_4vOD_4rYgVlrx7LOdGK2vksE|9_byj2s&P>2@bXFxH zfrJ8yEhyY-R#wlm9D)+}#MDzEm_E{&J{2~aN_L>HA0UuAf0VebIg-iaPQ6$12Q7b_g!=5xtnT@maSIl zi}#%TjZf@oiK&w3mc4?k$ogf~7oR-_8(qjsi0%s`<30G?%(r$;*9_apEP;T?l$z43 zKym}qGlCQ)&ob~S-yKc35LqJl-r-a2r}qal0eODAJuk3ez*J1LWuMx;4_wd4qe7KS z)KmW5rm_{-iAf1WstCX|uzc&L3*U6ntKN6XE8a3ZJl+a}(3_^(+%;QQ|LQBwfAyu6 z;o*k08ip0MzOit6rNjZi<5j8}lC&vk2gVOTq!72qr~n{_3~43a(~EaFh+*5|PR&~Y<01B=g3gq|Hi@okWNRd9SOt#9n>(QzE_Dp-uDpl1Pd#Xs) z_kQ5IGit^nGBnArrV?3GwyU8XKb3CjcS#9U`F80tTW1nVCaaAt@%0YXq9et9jys;@ zD!UOZ$5%@LdCw;0WJU}I7JDgXdI=)Wg&`_`ojO#~(~<#BJ?Sk05=wCwS4beiOV3+= z@tGqMs&k@IxDd|LRQ{Wr4$g!iW0etFd)9bm-AGMENz`Y4__>oikIq&|b9?bQ$emkG z;&w&UwgfAO`6pj-7C}SxOr8JkmV>|h#V6RSc;L_wlL#3@_N`Z}uKGzVX$7pRfNaCs zkKKA=Ht;G=Wr0Ms#Tm15y(kTOiTrG)!q_?;#LXVFn!e#>H{5^d`#<*BPknaJm!6t2 z#;}sKb!>J2%dfczVGCrVhLul27YO-XlM0Ge2RKrV2tY+CRI$bk*9KM!HH8Eqh$3um z7{>c9+4kRFw(V7y()jqa^_qcD+mZ;m@l$~fDGVeCL`<-9UGT%N8~wF+o>S*Au2LX? zl3yh@oh>BWoDOG?FU-!V)mo)mt#}Tpb{N~_JC;b0c+F-4U-g=}2!A+CLPDxcJRgRC zd;6Xl>k~mV6sK^L+5i`yQ@{3{<;{>RC!8jM`duhBUwOIpP8NLS<+an9G6$NPgNBQx zUaP108zJ2TS~96qk(4^h?vxMdj~!b;z3L?`=mf=vM1s6XDZR!Z$H6lb>PpjIEh^I0 z>2rs8UVCW)?vDaQ7P735-+KKl5`);AE4QLM2d|vicSh6EiI}5UAw%Z&Cr;hAbH*@8nP8xv3jtv$eE0R6 zM|@AyRijapx{*moW2xIdyLQl;=Kd?BCDUbB?&2VBqBW;u@%#$T&rJSsoC^OZzj>gJ zj(3~f=up38@RAY;8u7PWb*Yr<@@mBH3)y-c(Uuk5If1=XtYUN>@Kms_wsm{3SjIqz$bzH>)P>*kV=*W+~be&J4 zk@2#tMIwJ#qIl?3BiBY!VyIdT22ACrUb6kJo%c4I#uyFN`@=6jc+r`)D>e+w2Vhn! zQuoaJUbgx6rydEULKFy`azF%x9RA6dpT1xN1O*97fGC@)@qN#PmSC0KeJTnsgc?6sJ*;bn#;)Hm-n7yX1S-m2 z)iZ-tf4Jfg_+Gu%ta=Nc-#*!FgqE1a-Oxz@R7b}K*<*yrEmPHSZnC*B8?>4r>g($x zrD(SWIeVF0jPVGvQbIjR;DpQ@S>Hj8tsoqlhAJ!xD-2N}_EUErnYW%_Ar%FQvnUJN zdchfeZ@hSY%UU5a&bOT+2o_mBQ^zDw=eT!3mQKFdE4lGYY+_0$J=TD;szYZ%9r%?Z zZG34IUSO{=mQNlpg&{H(hpVhNOW&62q9F8qGX|B3E||9Ew9@l}ii_C7P;NX)LTPUp zslMgPEo!ZU(i(Fu_Wiq`I(5?%hpV1PFrmohn+BH;_`=LYY`h(NXLlT&u9}KQF+N?X z6xmE>3?WiYT8RP6)YR5BXAZyV;`Ko&tT0B8&UhdE$H$M)dp-k}ENd%lzwE3PZ@hF= zgOJoj%TfV=J+pU0KKQx)({0Z;YSXysk!^^UdWm!nRst0}MlnH4l=$X2?L>(PYS84? z#cL~n{ezcWa8^Zyz%^97MmzlFU;W_6K6yK;L+nDwC8w20waR=O{w>l{h^yE%?O2aJ zGH3N3rvM^cm{?V7ZClf~e#{>q(!pBb`z`VUm}vV^SdDK7>$G~1&RAC6I#NAznOW1X zgZ-^a-%P#I9;lGdc6vHg3nd~Y(&!@I)#J-S`D@yU)CR%yspjmQgklU;YgKWkX5BrH zQa+d*WGF`_gDeC~4%l`w26b;o#gdRh4bg+UXK&eg%9!-7J$L;J!T!KYw~P-Nw^69X zlI$5Lmpv79s;sp)Wh*Y&es)a7B1<7zsNHxh^;VUVY@M>`+fTWWkj3(gRdHTx=#t{w z7Rq-4GXk`ei$|3%p^I60cA6f(r&CR#!YDAq;x9U!D^Rh`cU-k;#c0J^FFEugB4#v& zKK$i^(Q8{~E-HH(+W}R+@H$E_-4d3y^%!j`GII|BH2!#S4!7se(thM7-EU`j~HKqfqcsD;b@n>J#oehKcf8aO%_MdM? zrN&C6*^_{5yH0n0zf)<+l@_VC8?@+fd+0=AssP#(M@%@^U*lCnl`W$K+g1*ry=G|J z>iQYu{)RDc&8S(qOqUOYqXX^HfnaE$IX2K78)}XZH&zX_S5YAb1U_P|MB~|BI0mzr=QB|i4kD7mLg4-*2p2RS*Z3&skS}!xgI#hK~G=I$KBee7^tL`H$an z*z@|JcCdo0&m1KPF)4u!-}vy!WAoxs9CL-7Sw^R&a)g*7FiaMTrZwlUtN+kdYb6L( zp%jwu{oObAef{x?isz{il-gF$UtRmJFF(Uj%LNW1IDauiOyv82`OPCAzjw;>`l66f zP$HZ0rBp-_Ba&s>Z4wGREQ^PnI<5dIsj`q7l8O;n(45lhA^GFiUi{80Mu7&%N4>rf zG=J?kKeX?_5qJhjOhOmcNdDE*^IDTV7IUvYMQRqQ4Q5Y}LdXl)3S0K1?$ffWH{M@e zGhACg(zj`(Z`1PrO=JD*NBY+e)yD_?;Yy{?_#Sym5E77vmJXg=aJ90sDnr2rtH)Qx z)wxB(0Cavfn4N7cEU1QF)%QoogxQg4w)Gn0msm7JMxV}L-zaMA&A0g*J5D`$>^R6H zFyati$)5f9L+_~_T9TQ#!5_4Ep7v99a_Z6Eq3|B%#aTl{vDO&Z~o$F-t zx=%gq?TgGkhtblfc^jzi1$9lO@j{od?_F9}={HLM>q3cKWPsgaR=R6fk|CnnEF;OJ zSX1lT_LAni;&f4Tp6WXkzjS)Z9SW6P4;KHPj-wie6$%OFy)WH5vP?x7P>H#oK*iHf zeCxSAlMBWevElXGmkrkql!?gqyl0P0-SPDCs_`|Bs_BNN1Nl?rM&(FCeIg4A+m?Uu z>MiGNsDuHjkYSo`)9-)w@k3K$3_=ct!iEjs^`dnzKYtK`C_rQrS5PwCfd5^8fj=>A#hn$=^XF(iPML9htckJjFM%^3nKs#dM>&4bU)e)z^`2^AKj z%AsoAc)#-63s)`|jpBz9yEs}(?9p`F{K_Yvz2UA&W0*mrCi2^jGy;uTaI%+EYL`~N z#^PN7ateUMiAp%tphI(YE6b|v*NhL;`m6TBHLEMFQ0GtS{N&iMUA<}3)TVHqHCQuNn1tg0jlEs>dAgDh3w?5qX##6^V9~|AT0g$-cZGP(e&RjR>hZ=iN zCggWo)R6(iOJvdd|BCz+@oW_ojMKLQieX#wtz%_s?qjZeFAKJ!x$N11D8r&$mI~EU zX7anKXGz=Bmlt=8PFfD2XKaVE6gM&21Wy8U_J9utN&;obkG^8dXYboTxxh>TK=FO7 zs-F4eou}S>#lpp_*faX7^OxWC%)By@lBrbhdg|n3`=>8kUtbW3O_>X(Rh_> z5Vqca$?A{azW<3sP0y%NBERy9+jqa@f)y{_x@;~KA+M!!(Z=d8y>8nteSD|YDp9D! zgb->J#6G4&{`F7oK6-Ngr(V8(s3J`Z0x_vXPDO4IY`UM5&RJpl@)M`v1h%ChQ7hHz z=f1W7ufDSLjP+w1RxBIqtB38@&J(kDKRMY9+~o@Pw}1T?E;;u?4I5yM)v@nRzQ4rO zbrD5FYFo2*VVaq(TbJ?G9WEq7860)CSQG{GAthNx$S}>7hi6}ndjzoZKry-sUn;-uAGjnavuefa=a`>Sg&_(C;z2(yN%{GTd zj8LMLrtGsoDdhv3eM+$l5EXwe)OQcYvN)$2)#|lawkLO1w(e%iDldSCzqMIAu-%uayA@nw`JL^r~_ZsK|K}e;nuJ7HH=Qs(<4`(OQn1?c8 z(#?|;Fed*+b5KyeT?}R>+I^zE5QeO2D1U^yapT&7{=QfUxspj*3$5wNuo0@LsaC5a z<1#l3XYnYkV30ro2w;KG#TYUQ&#&IGH+=UW-u*v5^6-W=^}qkQYqyV87lL_JCAFQ) zDr&m(OCSM29)J3dllMF~>w5rLBZ0>X7!Kd}iZjRSzI8fK5|^lJ>h@FN{5iAo3KLQI zTv}i+PO~IFNr|gO+MXy8lyN)BDtE3&&)efj^!4{R7tT-xN z-US(v?nQS`9oL*Zzm&P8rDL!<`|B=TR8{l7SDm+V9BMi8;emn-)FY4o<-wzO?Va!x zXN=WexP8!C6$UA@XKuXz$eziCirbaRt^2sXT$IyPO<@9&wk^H+;Gm__< zyPlf*%w2n`o@bfC8iE+XFTL)Z?OW>-a1df*)4UAC5yY-2=AN=b_|Kg5gjW$(@ zl&oc_8UYJDs6k>m4(gE8NqgOf4+$Fuvl6i?)Pj^Dtbyo@&s~1@hJJ`=s{N)~_bR^c zgW16P5Pkc*t{Wd8gl#KGVZQg7e|BvZc@Q~0wmmliX)6pRQDTYmypNEIXi5SvXMIVP z%+rS#L^!%&CAu$Ox1G6>J%)xcPgDS5V~*;fF;tPt(R{feA{K48v!h-$+482$kTLJrAt!e&Rk1*OOf!NA5+o7|6MXr zjzeaf_dGR-Gal!`|ZyUw!a|Z#<}>Xmv+zb1OJ+c9E%FRaF8FRt@{#f7K?ayAKr#35fsdragO3 zv}z^$4-n@GXj*We0+|6>od>&_zh3py1U6zGwd!5R7ePj za!3@$EpSjV3eFfyUm>{o*brq_w6t%}G0$kVLQo-rv0^t3Ret{mF5kE+uq|Qd>dKII zFf!Ks!5_Kktg*qz?|xLN4=#vt))nA;GHKZ#m)wcHN_*m%N?XY~j9gqgnSb3|B?o4t z^Ol}E*ajhTK34_^%-hb~2xtaAF^I#NQ?}6zgEq76U%7&$O|4e4Cqd3&2Lf1Du^`{0 zqf_R;e(bT|{JZ;(O$JwAI`Wr4a`~oyTCi;;>kf8HH%y|nt-@j~k@$MU%}1X+w%~h~ zTtHiAoT5_k^!=}U!AKo~$g@1d7mD32(n|rw7aV{)8B1>ACz!ai(5%1yqCmDYC3_-J zAg7dQk1|icp13M4NWOf^9PTfnz8;xM8=kvuA;JQgLJE8}_a{~$y6bbXCsQo?PlH`_ z%KgZVB|E)^Zsmm$v8t$sVe3a`^0)65oo-u$oSqjcT9fvq2t8#!p%cl$E%?Q zoE3xN&)j)nV!;}?+y9)+Pr6!4DLD!h4Wo)6Y`*Q{m1nN0SRqvs^*xWCJ>K~1uRka3 zIrD#oowwnO&l>r`>oy=1QRlVbj6N+$NJ&-62zhkd)3ZPRkthD!r}o@`Fl6Eii!fPc zC@UGu3_@&C>LdUms)dDE)gx<+GFQDX?l}3*4}J50eBr6R(_F7qYYdRK!uF->^v~aW z$r&4AMai&8_>xzz`tqlL<8OZZ|Ge@ImmQjWdTxG}hya_3Bar<2y( zQk*ZJC%e)+6oM{0!Ug>M{K&GbotcfB;<;OS3B9V$feI=)*-gH2&SNM2m&&s*(xTGA z>498I%}bKbYw=k}eFc$m8p5-rtb_=%Q=igBs>&o<0&yUG#_H-%yz(59Kpj(rp=h~C zTg@MTdGC`Gyn0#X+OtMQ+({aH6@SNp`ENWvQ6&#Rf^5q6*U~n*b})p1w(!~!@B6P@ zr#5s*TtLS2{^71;ckh|^*;8Q>RV&uYkH2Kgxo1`p5F!870HQiJ zGQ4Hu2H30(D5-?)i4!&m!Z57#4H-c=Jt1UN-M&95ASBM=%2Wrw{AlY(|K!g5_e~j7 zS+$D)=!Y*kdt_iCYy+XOs_OO+kwHyy2(={>P{)AvqKQSQL4AZU^C_y&x7G46QAGwpjbE0@qp5XcWN$OawMJT z9=AHT*eJ@H7m~?Yd9>S*mw_pOaKDwaS(fHVayZ%rK)K+}rmVGmU zHOY{>?XV~&mTFNB5#a1_SxI0d5Ps|BYc{PkVga=Pv7yO@_FsPO@kYo>VMrvPwuCGD z^ygl=y;^H43>ZoZ3Y6SYo-@&AQGi1Bd8VnKx##E)efXhY_@}48^;|QwT=U5DLS+Rz zt&9j9ZRja68TL#g;4eQp`M!_b|68AW@|4s~)%bP)@I3wLSN6U0Prmi8Kl|4EKmOp4 ze`3em{_Kt~-gD5eRS0UT=5N08g`NAJMV|*WJZ`fWfNZ?Xzt>T}c3~g{5VfZcOJhdZ zq}v`DaOhAuC96FC)!E!C*=YBL<(}PBLF{W1x$=j)al@*WD+ZwfVBl0Pz&7R@lZS0P z5WugZabh>w(1nH)BRb?o7&<3cmEfiGO+Mi1A4fMLl)A)wb>HU$o|>XRV&MqzsO%{*h9J zTdGm8#moq0YoSd3MR!+XW*No2F8XAVTbFTF-30jQr-bE}a?h>{LA!rQUMp{2HeY8r z=+2-WF`?x~v!uj?G=U`0Q+ZK6Q(nGA2J%aPsaxj4$aXEWOex9!6u+*@64|&d@2mXW z>n`y90M@xR8d6fXckB88aL18vJu~yd%>yslIueEiSS5HB@19*#x9&XU823}3!&?2VU?BM2bQ z!=9s^d{A_@3<4Q}Atv_CT;PBHo)bU(=a2o+N1pibEhip1C{r!pN|m|d86Q*=ROiF$ z(FMBqQ2Q_LIP#vqe&}cZddFSQ%$Z8f7$RjM^*r`!wK?=XxO@J~_a6J&Bc~oaN((e# z!J!qfIe2LPfBo-|%{CZ*KcI=*K-ql#$4Cxn(8745Q7xk=qIB?0^2iHA-IQ_o$Ryq>^Z8G#Z+$Ov#RAH#npD z#~mUeV=0>LM)X9Z5PwTZjxu^3+EcGVF1APueeKLffP$f_ux)9*{?c`?xOml)g4 zbuky6;k7bOH0Y0S-uHL!JO2k>G=Ad~Cl|ycwnlhf_!GD6dFl4$9zp@g#bqLO0h+ps zp!nEVK~QRU*CV_)|LIHEiftwggt7!|HWtB_uS;3LqwiH z*^zc|qvTXXfwRIoDsKHKUa^Beju!ui|lAWUdiTF0@Y0v`7`x0P;NlbDzHh`oDkTN8a$FD=%WTsg2*i z2j;J(p>Mx~<#&8nfIQo71jqKdSU8ksjkNH{#SR*`&aFR6-Uk4P&-(1~@Y$maWQd#( z2?$^qzVQ65AWE)-CHP8a;mDqLFxL!1WBk5apS#M>p>8E2%bqIN^)GKa_&cB8(Gbsg zXteA*Uo!r4*PPXAhYjNyv{~V9yaRw_gEs<>3HMQ`0WtZ(4d2-J*r6HE_aLM!KxAGZ zfqn1Gw_Ln#a6VKuVCP~J4Mk>1(EI2w8jVa2Dt<_KPlgXsI_{kqR$Y}#C(oFPm9~?j zNlTbcrg8ai-AZ5Vcg^MOY&L7==LGBL2d$(AO%#`MO{h~$B;Pv*w505^(!K*6VabcR zB&t_QVQ%@cs#U2O{Os$`9q5Nzj_ml96iiUhryCzV{tpkFy!M=x*Pk_P+YX9|S21@! zJ$J{>Q*~n`cH&7@C<00jrJX5HbaK;@aNC;tb=yZYkQf1~@6mm`PJQLkW1gu63bLvy zO{?pN`R878hHo0G3RsZy{f&OonBl}Mbmmb)ShfQBj|00jqDM~1`tsfTa- z%BPP_93_tL1NirF4ZsrV?fEGxCH;#RB2jzlL@;#}R4|8iRH3ncjV#V+>j8`^ffOwmzkc$! zKmGKA`kv8tKo_6Y_gines3OvaG6doYIK~u-KAUc9q{_UCF?8>o}-~S-k%w(9HL)zj7!G1G<8m5r)=(7_)?NazGrz*-ce|x|1Q1Y(x;J> ziXlRVx91Y4jnG2n36aLju|txk<5n_W*+1RWVhD?}rSu+^R9jed^m=4)m?#b}TQpQH zX`s8%ylLg?vsb+1nl;+C8kqt)n;;L+mg*mW`Kco__J^+BSg*9LP-qm4xiDyaU)`O`FtU4JF$YCfB~ntrBlG4fHu#1AXr+vWV|%GNk2r2~?$<6!})+-z}>qh)tP#M+-9#0XzkkZv(8wHu%&>g z7lNk`?>PS8=US)s1s0*&zW#n=i~_3G5@0JvU@CgUtZa#VRmYDwZxfEO^=c&N>NI9XO2;$Yp)Wl-L2XpUPumFi_Pi`T@{Ry!WJ9jjHoCrvoM{h!ndS>PG9XU0~Rf*<8|sB_nfW-z}?qJqCfN6 z3s$co2?=Ty#4*qI3_pEj;V-`W^wnpLy!@OI31BRdsPWAmPtAShk%_A3sq^!R4}TMv z$E1Ur89axjEon>js;#5vt?##1Ssl{`d;Vkl=fC>UkqRmzKuEA+tu+YW`=V`w1Eki# z-DwOaWhi_TTy}2%_()U2Py!#;K-^A4MDUsrK9Gj>Qd0301PG}zAl8I|j*Tq5{)+0g z=lTOfjSwwqhqkREES9ZhYwhZh_RqX#;8(9d^PHi6lJ>sGZw^|g$YfRV(y94(pcy>B zRA_jP*t2k+wcTzV*~JtnTkXC8vqhyd<2w;uoCKkaO)Z=%gT{cmqLtdhUm0YP6nhjN%4~PM*Piv$mu&fO*KGT}*Ps3Vm#uu+<&`rxhAT!F)~%dB?~KMfudn>Z8#cdo+onF> z%z?$L&K}rx;GsLoFcKZ8m*VyBO$IE+2YLv#LLp?@Gbe-NdqJKsA&IVA(&OB!h(9Y} z8R8Kh*f(=X%$fMwLw{Jo)JDjVJG{+D6!JNhqpe#pi0xC`5@A zhAq`Ats9>>_Q6j-Iv)@*Dg1U@UUNnN`>xzDABF*eTokOhQB=4+K=c1t<_`*ga+Ss}QS5A#YY_l1&%HZ^%kz+)T~h>gBx8M=TN{LUm@<=_ zjYHKvB{7sJAHnssQx@ifh_e319ZNZ4&Ti9RiQ8fOhhBX4m+s$t$BrpeO?)hb6wEZ; z*5CWW&X4?;D_?QJ_-F5(BsQK1`QD@ZTVHzU=nubWZ6gddoh3~g5uHXxp7qg2iK>I| zBG$a-!qtC%(}9x47PTs#*f(FY{-(!H&NKkBN*ZnW z8}p4Pj=c4SW50IIxo-{g!^fa)A4D+GWrDFahnp0JfCQopY7Y#yFFvFG zx@}v|8yO3Y%yHYOtXWoFKeX;u;6@8g4J(GKY-*k#a&ti}sd}(V3>!Xs&s}TIzG7f> zG_g*3e)IS5F=>HjN)rK4lKDeVa$_3CCn18(1Yax+h~|+~gd?3VRZHlWM^A-9hKZGx zgh;J~o7axL^hH+y8noLdp17m=>|Hf(DY(^Y3qn9E)rx1l|DU=4j<@W%>O}GHTDA8% zH}&nD)vXT7t!PP>WEtCX!Z>1Mg2{OX7{WXTcre4jz`&5^_jt^}z`S8d#$b{$CO9Wa zR+g1RcdOMo-Fy4Sb5Gd2*82TXRXd%1&b=+kF!ho8o^y8Xs#R61R;smDIpaU8#u2`J z3_tt9XJ$H4!>9#yQ`xmG{*Ujvu}Rud7`5tYK4&Di>VN5zkt>vmWI@a?efa3X=`@a^ z5~;GXfRrGTrr-9~{ja%ld%M>IX}DvcW}>n&7k<(HYFc@rzGTx&sOE>OA@sGjl$AvQ z%_P*Syj=J0sx-g4Dgywa`ubYu23ncTOdTj!tUO=A{pRI~Y=z_i!>g4)e1#}T1rQ&a zNC3emqU%QWC%^utu`yU-LaHoqhXINxitc#;ia>S0ZuTSho%)_P>{}D3B4UY%GzI^~ z-Dl>yVuBFjgdPnWAb0jqa$155!*#yVU8I+78GXZ5o77t07XU&}(|>&Ec-NA`il|k! zKs&KlZy$Nf^^-`gO94%A?n9VfN1DE8H`(vI`O@Eh=S@HJuD!2+b-eSE_Q>cm zv;*7IB+*`~iPa?0w8Pw4yRLoR70I`~aqX|X`--2s?dk&?C)=jmgJo+VaiZMeq|5Di zw6kVRnj@->UW*rdqCS||r6G=aY5MH*4}4Zwln9Vv39M>X;a{+eNIMZtXhYvn*bf#k>78n+ZSbywYR~*>f zTo$n|0j^}HQ&hGzdt0Wvu0Rze)NIg4A3Xi>C#OtgAVx{RF1QS~$9s2;{m9o`r8Z4D zqzbL@PRe3114YZ}d}Tp0Bh7$ZbQ$6DjTBgHK8pSYd#Thcw;@@8nP2HFaEM+Le8ercUAk>tdth5AiCVmbtF7MSV8GE*Fu!QX6I}O#e&+G1w_Uqs>o__{Mknybi4AYuy=9@Bo@_0h zTxg$LOc#1-yJwX!8kKEnjs$U@yJ>)! z=z?oAUBG22C+06cH-CCbIZ{#x3`2w@isG-i6icF(1S1F%NAAWkz&Iv>FtPmC=(-QlUFCE*v<+{mcG~T4q1{nyDicq4e8tx8O0YXf@ z%LFY1LLz+U73;6uIr7xWu0+Hj0ETd(mE8UG`K!L_QW0;kx1f$B*K8hr=XG2D^zJiC zCKD|n10wYuQuq)Q4I zQM-8jaZcM}Ott3$0$66fPyi&XY}hPY`>7{p1%^lnY@G0&=>FX!S2P}NJ=%$A)Hc=# zG}07`*771GB~WBcBW{pJP{gC@Z-4C6Up{!w#1T{gi&QqRGym@Gmyf6{yPy*l0+ezq z6=me2Kpz!C${<>jHnHQ#Q+#nSePMtskR@;{MzGdBa-nO@$TFYdl5QyVc;OuCj z!~=r1TaaJN@d9y{`j=450mM>LkgpT-Xj#9S_iQ1rSKtcBOO0wvm7L z?(2T|e?AC|5=0P@y4-6LHOxb&<{v*ZPw`0LQr0vZfBESA$Dh4_!+5-XU31rl(Op~C zT(*5|@1~Jm>*94|W|S4MjvrWcOhAI1$f=~8Mw?%AgR+^bw0e zMlAvuWYYNyo#W3(Pyti$86W1s7(^2wQ{$Bx2TydLJif#cv#`?;h@lDJdCm464U;4z zLQ3uiF9HK;x2K{Y5F3tT2*pkF@h4jU{S$|oiKr(UDVY@M_rK-Rn>J4_SyJvAVGsqw z4*}|J_W8&K@C(f#ZkYf1_oqMp>|ES5aH$qFQc7X0bZO5{^NU}9TTI$fjZ}O#P(RF} zR)gY9Q=s4_DqfZ;YtPQZbIRKqINzbhs*yqat7pFD!zkcImOiito8=39nko!H%h`d# zYOaF14|+amy=dTK*1eQ5f&nDHLU2}sIupwQeB3;=xgmX7Ux;La;Q{^gS&`_fEf z#93j<-?y$r93?750%g@003brR&`K{XrH9Y7p)(+`;fW?~Ul;G&HnD%}+ADXCU%6v! z*ZRiBQPW^+l~Psb`=bOA{pwe3{U4t>+Ug=A=Tpsw&7o6^kDZ*obJuuF9i3Gu+KN3} z8gIX0%O8FIv@{GLAWok$b?5fPWpnfnd_MiN-%RT6w9hV+&>-d)rYUU0 zOg02Ex8&k%x>vnDlx^?ey`S89_2r|ZlMsIa$N(MwpP^)ejfPGyM(E3%p#d)jsZv=D zEuMT*m!{Piz`IFg$^Hj-LF7ae6|aF2KKaD-bk{`AzlInJ0gaCG+i%(l7lQ||iX*W$ z?WIZ2MZZQdG1M@fTkQV&-#k0lMjR`IiENV4EtkjNcju)&tHOwsfneryXh0N5j)r3^ z2CRZ$jfrsoq1pfWiGxBhDHK8^;;vCjC8qReKJcomx2#!AtgxD*z?n^5iNqHsun#?) zTv4U~g?CEge_@$CN){+yp#p_dxQt*|V(|u-Tu&SH^yM*tI#NlM=c?{j=1kowROr_L zG@peUo#o;-L78XP{66%(vi_xg|Mr*i>b{bZ{9eGSC;?QOE{8#?1SG&{!~V?sZhG+0 zr_RlphDn|M1mq3$>TYUhWO^=vn3X^<3W}f#@M2FF&ZW&rF@2Q8Gg6Q&$ktz0c2l%?(>OH%+RN&7>QD7!CmugNA2rBbPAnFqBk~jPx_-l`>85Jb3MeplAdhZe$!hvf6E=a+lhdLl_cCie{r)ODz7a36{&7^ zXN_OyIs^*{SodHRVAZkl0+kv<&ISXY_g^O;RrgyZcSVV?*If!<;(k@&G8wK|V>Qs$ zJgZm5z__23hL()sMX^kc4 zt>N=MIJdcQ{b7FV2E3;|krJ4}Mmdh6Mhp`z_VoGFy^lUH{h$Bp;CKAi{qOyad%o*` zKlCe~IQH4+TGOp)vJrjlYxYDWmRMDRL`Y%GV@DSkQUd!l0hS1$)XF96N51aWJAqWm zI2A-0Z1}`<@1qZ%R^!ehC3D5d{w;n*Zls{ne}hn(kohlD!2!YhS184b=kNc*?9>@G ztfciQ`juh>Ux8*T;=g7>Vb&oL@#3jx?aVQ7RPukSf>RRh91nHLmjocuNcon!2lgR8>hx6Kj{-EvSbvicCBj-TlJ+hweSpAR?drS(8NGee0&T zT(PO0A~EXJOY$Hnyt9rdWoh4(NEKqW0alHA|NUbJzjS!sL`Id>qzX$y1hPHewY~Y% z@4q<)C8SDBMH586t5#SSt=1n*ukg5Jl zp-#r4CAf%%`USxIc2|AZ!-;&D{}9ktgs7H744(Cjp4N%~+1Cn?rR6Lc4Tia=zJyZB zP+b&Di*=NIUN`Nf@;z_5<}I&Ur@bVy&hL?e>#b&NL;-&@Y7T!c&p@5eClRSJFtLrA z6vw7#>DaXW)R!;(>fb!~9sm8ocmL-7-}{G8OfS*SEn{Q_8j%_jCgx)o+Nb7w%#nbE zKp+N$ZO^9fxpDV3my9BDu6zPO85GecpO|~{OgE0$Wi~C{CRPZ$oI1?yhavu4Mp_=n$eMGO)WRfxxKAFnR?olNT04g#Po5kM3-{^q{rKmNi= z(_jWc48kBG6mk3Cf76xMY?)kkijY70B@lzSFndGg%xqTG$8daYHXnP4Hx}g-G%o zzm!rTPYXjf2$x2U0*!QGxh`w6f;lo2N5;hQvc+>}I)8HS$^Y`eNvG z78){(ezMB*r=nt^aZE>^xbN(-7h$4{+iw5DrA+bZI3sKCLSOBPq$alT<((AX3En9$Ka!T(6372Zr6MaAdR*fvkDsyC?I6n6) zfAd638$_%SApu!ZB_i8RKk(*l-}#!WmlIJVTou;(=tix~tMxT%O0FhQE(NbbIHkg$ zi$p}1RSf+&?A+Ar4p)cw;Hd(1#qa_31d*t)am&&JfIbaCD}O7sYYHKon@kj}RY>{) zEOwOZy~VjApBks6kkzhPWs6av%U4j`VKdzv)Ncbv@9AB>+k$ zliCp6mmthGCNZ36uJVked;rS|19uA}86gOPNZFVu;y8*3@znfOSC*9wz>cAa;Lyp% z$V7%kz|Oj4goV)2-s>;lbk{W-ky=sX(n}a26GvY@+Pe49Oe2caF$S$m3g}o@PQ|Gt zLui516(_LxEl-r?)gw_-Vp&>v`U{`83E*xe^A^4g1O5+W2~q$o%i>WUZ9ZFWCle6a z*22PbUy5Xz+(i#m8*DUi2HgW;S+dDr-aEZ)jlV`rp&(HjY4H1BcS$5JM3A8d3L;IC zrL?=OFd#ON(TUN2db0JwFB~_GhB!|%AQib{=lHkYdP%BQC?%1S6y{8}s(`>dD+4MH z1K8-f3;c5*eD>I!ZN$#u$P+_iNxR9lmosI3rT=*~=|qF{u)*R$p1+Eb)|R=Lg<= z;Hz)llJ-(RLD^Nz?#2xwm7bME5^H;^39BWffI>w{90L@EilZ{lp%mf|3c@X43ZoP$ zQz{k!)WEspGk^KuxqDw+I^80e#z-8+F^RFNNGuz|H{EgNx;3gwAhAr=0Hj?pe{tWr z6Z0|(2t%2CeoCqgv-%SX7aW&oZt%p0R>&WPYaG+L=f8aN(9?(-{t&A+8utH`(vJ*W z9d^EBDY#9MGA+FDsGK_rYA7)y*yF2Yub(c4`2vikCd^~UmcRJIJVo%j8YxJvm7A^^ zzkSczP7(n^Y89lyVyV5ftd?M`A)08cIlY8m`>SV`Y@|Y}5mZE#to_crwp==it{Np$ zp9v(`{z+Xzs369$f_>16*sk_|@$27x>z>KDEfDs{ z5>yyn@Z>27T$PenFK)&Q#=tsYdNCT`^Av$K2WmruL(+Gb^ zU-L2nh$#n!o{WM)z4 zm!;EzCPp;|vASEk*kOqK=68A~0VzOm*NAAi?1>3tVt#JA`xAfs=$f&SD|f6paLL*O zJJ#*l*jzhmqDUdV1KXPKxM|0qe(@A>!zhF;5n^MGUr7G?;nV;6O?x1zs`yi6(j0qh zmSTtn!((JtAw!np_GQ3b7sE;Gxi5Tr$Nv3|ID(}9GKE`dhX!4c5Ey}+lUyjDQ?;~_D#3%OcE7JLmq~(fZhs30sWMO z1PV?`V~s|B@1KtUkLKWyK0`WQXE#ciq$17EP~?zxqENbs6_QsTKcWXLtV&nAz0>>D*0J$K7B>B za`<8h7L2yVP5UN)<{NMLk>7pPO2Zfzc%y(2^O^IVbvpJl@4T$j(UwR%?aeKB&b2xx z7FtKA+ec>?PhRMry^zc-=wjQXNdz^PKt`Fo1D?wkK@h0*`E@80#938gD7AWFKDl>p z`rc=!M;h3&HokKE+5@}S-Ehge{TuMDcV71Bu?x?h=pr%%R)P|7gTL_1^sDwxe%0Q! z9qU9qMV{oLR;)m#Qu{b2&E+^x+B7p6Q?(Iyx}hpi6YJEmr;k1H=;gP*MkN^Wi2=Po^Q{Qs(&P18!+wQ(6C{Y6V2njEL`haqjNt z7K{NPO61a3CJA4A#kx0LyQ$N$)?KTs{ye9*+!Y}L4AIE=+Rr|<@UbV(D(o%WaCm{2 z7o4A`eDhtqwl&Q{V!@In{_*~vA^b}Lc(Ef@ZHPppvHsKJGr#>0hlNHBD-^;B)Q}oh zo3!O^cW(NTw_M##la$H$ab_Evsx+rg(#kh@FP7WsPgK zi6MmuQfFWCa&Kvj;aQc5^%LZ5$7uMy0AU$2UrqDD)IeTJ1yPv3@WX%*+cLXcWvSto zK?%tCF69oU1mtnQtESz3Y?_GNsqHIC{!4uf;?fS6NmYfUlh|*2-R1Wmoc`b^PU#4R zm0^M|GyVL>4(`}A@va-kM^YN)(JhmWtFQqu3bvM(I>|z}bGEhk!t}y(Q;W}?ZXKTL zoSU(WElPVaz+{LRM8S!Ky~*CmMhqr_LO4C zbh?aBXb6`elO)gFefQ3*ZXO$tAzgP*&S0@?h&cAjmi|2oph*1(RLBvAiAP!|pKibK zaAZ=YIAs3G=A|UMmDDCb=>$>|wnRPH4}JdJT!JXFBu2@jJCpsu>n>dv@p2+6EdEqU zZJKnJTdKr@u@PQQ^bbG#!d!RcvJIWfcdmc%#0(pfly+@xzV*P)ZmL4=K#KzD@~4-Y zvwQVNnpRB1JbE(ug}-=aKBYKHA(1n95-E`+J?!7Zzy9s79yex5({Np}QUM=I)1`gW z>8CLl;4@`7Om_`k&Bc#$JN-Vo*(6gDduyrOKnXweNrQBfLENpP_!U*bBJjBcHk1NW zK^AtpKuKVAkD?;~^evYRIYViDg^{hy3|7G|f>kK+t&7~%*@A`HBl1*O^%cw&5dtt# zu?6*SewWtPTIHsppZ~^NA3rwzq+Fn;_IlX`$CUG1q$P?A#Nlrk_2%bnIMrdY-x+18oqqF+^-#;IR-h ztRpS{l#MKi*iZ}un5D!%a%}057a!lXp}B5sY+-3BRb$!RWB?P>ix-wZ{NT|ac;lX? zq}B(R6&SS-6%Ko$xQB9{K;Cvoq-2nt>pK(;Dttb1>@rq09dBR*yuk#aQ?C5OY55Q zZMSUs$m7#(B?d`qzvk7K>{(CCy%b>Pmy_{$rtC8jivj2xR!e&$b~J#@Yo zH)4o;g9#v2wKP7i|Mh!sIk0KXyiJwWIOVivmMgQT6%jW7R&+tG2!Gj+{q#0dAXX?v z`rG$t`0FbD{{Iz@QKkNssu?ZI$K?=!3dbH42xk3$2=xV zCT^0dyPi_P1VmB%#iwVl-#PxqD>o-LRb>`CL_{nE zt6~*IV0HAx%PZM|4*{%bvORL&XZGK4)A+;$(1p6tuoVQWSH9%TO{;=W{gqY4H#JDf z07%JzqSaJnd z58QR-`mw0hO9F>xKssr6skI0ts76h5^nCO`K6iXMN&ofh);~L~kDN+PY{X*Y`jHRZ zv4;{>7!oiDYOGo?i4Q^Zqfuvq6heflPV{qseDL8H7UCwekh@Db+jlD6pZUfE@4oud z#WaP15$<#Q8AzwX%vUG2dRXF?sUj{{ieiW?7{XoZ^nzif(4`ChDhmV}j6thAkF1k= zGfA^bmHTvo!fbg7l}I%tk}q?_+zoVq9A6RgivSJK0Q!BoF0N?d-hr3R5}5{n`RLNm{rQs%U64`n#Ge2m zSQ1tkQsczsl(eHs8|^N&;%0mICi9M~w*C9J9Qd~9F;5Y*<~ zU0ehxK&-4_MdXzZ5J1XK71B=9I5?fYFxBm)jV5t~R8^AvwxZ1S)i-J)EKZ+%@ySOK zu?8!7dD#khe{qO+F^liK=e6&q8VU|wCEc^wesJs|@|)N+mZwh4J@q+O5yy!$!CI}t z`sQ*?*zfS5zySm$Fc@M!{_y$xjx0uzKwW+j1vKr^HT&0p&GkFGiB*Ej&aJ9MQMc9W z_Ig%HReFj2Z=ZSk>C?+!ePHcnn>YN;mcT-27LjN=TcfeL_L!@J0?Rs&1_3RO7&E79SKS`USk zY6`MK+_l~Bd((lZUR?acPrkr$GbB?KK)Dh9!$apT-E!pLf88|(om7c~>>ivQ0&azH zV}dAyf_1#x)U+Ube65B^NC%VUc`TT&(iqL-*~!@%GWt1~e&P zXO%__lUIh7I)STH`fn)XGRh7>fZVY~03#q`W83ZX_x~L)Oi`m5d;wGowtWweH;WY} z7Nq2Y^~6ZCr_l>jbAR&1lRb?hh^hf8z$zL?`aNHL*~SrVC8@iwlocQmEA3W`#3&?c z#2>t8_8-4|@~&&v{F}FK|D}%}Yg>v~70j`H+kwpu*k#L2BQqWO-A_IJ^>^-LjS`5s zAYJF1?3{l{mEzy|`(q#a(iziWRuM5^4qO~*C%xsW#;<Poh~ z`ozuLP^LhZVr%Fs=55sWmfM*!hl3!p`^GB_sA#ANFBTj3E#$_C{O5r~trczxW22f% z{+FT?O1b6IDH}>>N`1-T%8d+~(2Tbg8E0O3Wkx&*)|yUUVxiEB7Qn4Bu)gf#!tI94 zlopUcB?XO8@}IuxmZwk8KJ?TwHx)<$B1B-3X7l$xacswib>IKi9n@X6V4|3`7n;++ zQT(Znw?A2jrAA$I&*_EELuaNwclgXBhZc^Vp-!j46mg_P z0(U|J1?P60U@=ox6=DTUgd+>|%YXO6E&JEsws+lutz(lTs)|HZz<|FQ(2_8?A!>}f z5t(}su>?d>WKPX2J@o8MS0ZEhxzlp+?2C^cnfjL3UUtR0s3)mqGG!Mo$2g6Vg)=Xn zIQZlhH{Xh+JQcp$OH<{FXi&=o`Wp>BuIex;I~8#Py(q<2`Rs!qYrptdV}zAcB7(9K z6HHEW{BcQP-xpXifdtK^9?vb!{^kAWpPuPO#*mmaO2{%1(w=_RZ5zMlz>aomg<-^< z2!mnTopzEWfHkps?0EanA3XG}Z{G7mui5jN=UWfGm_&|Cs9v(Zap(TEkj_N2`OF#q zuYdjcn_jbj-^TIOCJH9<`G+i+C1M4Q;P*ds`gcD0Jev`MS`dtqleSdTuI}8P{?@;G z{qD)Jc?gU;<4+)#Wht$nvSd%FQlq%XSLGv?%eh+dRyM<_8!W z!v4>gdU>olfe%vakb#u&l&ZU+I@Fa*l>y{05dtdqwLS!}0L*}JhD^=rH^}#k(l1S# z>njzj*H@%anXMvU#%x&~iG>hsM`+6=|K|7H`3=AEsZ*!P#KCZ`%8W#!U;XRHc5QFG z{lMl<(k4+t6nJ<@Gl9xcq76=)THIdG@&8ME2{lYVIJJv@xUb^;3T+-d)oBR~TU8}yAbRrX(*HC2_z%48 zx@$Mb?ke&kXA3))Oxip4(0zNayFR7{kk&0hC4}Un7JLxtuSk4uAqTbGCpuB45R<=S zotnq*`_!37K0m7Z@a!}q+=0@KQdIPf?G>15sslYo;z;awS775krAjVdrwpOFXeQ)!k`CEer`Vu%QQ$K%ipM3 zKFU1zwFFg_R%MTBc|&cNxgfA|xfnTmMd_!gr&L~YrNjXGnQr#`YCvBd!LFIn!plWA z@bZbaW`CVb75M&FfFlI2pn|67^v3{!4=ZF=Sk|_cSMQ$quit+2cmLMC%iR&fDJg^) zqHHkNrGNhik8S(muexD&h{IQ)sFk7@1tl z?_9s>?N@G_Ug$hfD6EVCCsVXUfEh!+Xs$!U87%>cio|s9G zO;3O7>GKD6j(_#lTW;Dl)`+xgg@h6D-`#iUBM+RXcn!1Nv+>wB-f`tkdnVh`J9vCL zO*n-m>NFdq%rNn(+4TSW_!B?iFRu`>s-JNh5z! zT3l!LEA5gX2Z~?mP(NGc~uyV;**bl>EIXtN~OEZrqM~`CXGhXxM?&a zP?Q=rqO1xQhLVU;h*hg9BGm4rtzNp=?Jl%MQXVn!-#s>cdPy6RT1r)ob0-kNH{P}H zmR;lB#H#ZPc38(zx83db5&}%bcRw@x?hY&vQhL4$x1T6*Kv zS1-xful>c5Kl=31?|RSW-~YOO-EJZjff5J+N{LuTSktJ9Ke_wlul~(b9gLYsEuaup zQZRuiWj5(Ae)o;ODU)8SG`DtLvK3G*?cuVVda+x)%xCHok`+N1 zM4blkfIe!M)$6O>hjPP#tq!stz5CUxVi|BFSVmT;z>tR)s{2~ACk8m-0h z5=tJ%Q3T?Z<^UluEXR&g2Vp)GAh23tyPVqh+`RiI-gn^_KlrRrlOe3^E)X{jJ~oy7 z`0wBU2S4`ez3aGbiPR-$b_ut zBkw%0@4$}nQInos=-v0+GBwsVj4DQ7oTZOEd}{aR@n$2M>$Wy*Os?9q{=m+4S8Unx z<)ddlcJI-4)HpWX{-?*zefMiGC7Y1DY{bv1GZe6eN_+X}m!I0c_W+0?IqP!+EmQxx z<;hoJP@T$NuNCx$mg;^~5D5W@m`092{=hSz_>;KP;kc;@bx7JhEZAPu=&TuuB4ZSZ zh)u0ct)!yXYGOq!Qng|!O(m5GWQ;bVhCDaD{KZ4Fk!e5)ln|6CO48)I%f`O<4VOu3 z;hajzxe^N*U21nUp_tA2#m-+oe0<%weCHeYJb%9Tm!El(qXt1)(-gdJZ2aW%+IRfI zmkyqv`|)qQ?)zSMW!hU7B_buOKxElMp^zw!Kl#u1`M+gif-pvVR>W`|P-aqG5K<8ZU%_Y==!Z>I-iZr0s(m)>J!miS+I>H9e zzYkgX3f#WJMerjnICrkV6jq>Q{dShhFa0-yg}K#Calwj4^P0y+D^Lw7tN~Bq-2_+D z{3=SefrCU)?W~_53|1aj)f)vR(luF|6oGsu5V9!|Tlu%|yy3|C_MiOIF&T+Lmc{KL zibnYHqYFRvhfn_Y_usy8wB1VqK$ywNUj?XWenWgToHSOBTuGug$ZbU_8)8&`W&UQZk z#F>=n;e%7}y=BMRSjACy&*WT~0Fg>$^xWYm7w6tMxo#3{OS7Brvh4eCoLO<9U-CIo z79#82eq3IJ7oT|WiI4p;cb0`C?rCBYu^_7!YCD);N<>rVVnps(#w&SDAW6)*#b})R)redO~2zE+y4DKUX_aNQEb!#qQoWUiatBf;A!^> zxbk!bxpxcok;*|0*5q*UH5D$VAQvo3RC_SG=-?_DI#x$D6#t4bCBqT*6%b+v-w7O4 zt<`i>PwI=0t6Q{oR0JsMdB963RrSLMHD|M1k~qTGmrDPAk3RXUkC80%{XnK6q{PC+ zViir$fBxp%UYwf0=iwzDG482=g{&EEeCn~8pZ?I}zy96VO+>v!gca_xUl81NV(wmU zMG3FH_f26U3VsZk+oB}}C`ut#y9{hx%kNpY{ash?JU!R?^wG2b^xV0pPApB&#J!{e zL>vjAEyADn;m$n1D*Y-CuiItzqStJ{0_)bjehBR6c>Bx)1e z>Hws&X@tM!wo8e+pZxOF)co?v+4lPFV`-WNnuY!2lV@pr?)=#o4o%+j8fZ7)r5Y5j zJixy8NU*qL5NJ+xn+<3*xPP-+ks0*qTVufHHu?_RZ7)I zQ$i?iG#@+J{h2>}{A|lMV{&<974B|PDX&umKMc{ahPv^OoK#`C3#^L;H}bDrRb)+KGxF4ukfhtt~-i>HoDt zZ0nk>Fn~%Gs@X?{(*LNUX_p=pb-tXhRFwdrVxSq=>@qu=_T*L~C6Cl0;<9syJsq{>P#qx6w`j&58l|LOhLN9d+d z=Wyfxhk}^ZCF3o$U&3kxBavo$osxPbQ{i&Fh=LN;p7zM-<_-Mq>vq5Q%H4;~wH`b> zb?@=H$B!?bor-M|vjH1%S?m-_P*MX`fq>M+rmbeV3uXZ1ah@mvKK#gO#pc}`o2goL zq(V7WogCp0y!whxntt}dsq=FwZ;x0-$Yw&FBmGXlBHKIj{Nwv?el-(FC7@J6SzfI+ zT(`tk83h+7f8{&S5jzE<6#VoT|Mt0${}pZ!4oX&uAZvN@%SXCTop@%fX~ssIqobo^ zqtW^avwpm}wrR#=6OZT@pPTyG4?cEi%EnD2E_#`iz$64luOqiyKk~cZbJzN)(L$mu zCg7VNX00t{7&CCMRA@JRCI^2H)qusyG~glkOsb=nZj+SS(Olu^FBvC8*jsg76Hs?) zO7?6p%&RFEQ8iDxQ<&Zo1IUKb*Lpqtec-zp2~(aOALOlNVIQlH*%;XSDoTbHL6)Ro znF{(1RoGG;qrccra|N!7$@#C&-v(rq(yqm|TgHC-U%&R-e&aJ|&o@oenStQE_h_W~ z`~P@q9Pv+n{pH4zRb?e5>tl6Qh>8LLg|TR%SIW+(vx&&(MhP%s*;Sw_NTf?KZQs!R zs(9<|JGReUlRkWI<_j;*JafFe*lH4yG0G%L1QP3Gz?hVn#GMv6?qW>D6s02Fu0DBu z@oR6`Ji?N~TNIRtt!!w}x7~4NVtd+L7OY3^dsdiF1&EmC!m%T**~Q6qYoRvBB`*j{ zzJB>OUN!RctMXL*Gf3Jg%z2nw3$SS<9eVT=fBxbZ{|-u)*eH&ivmbft#3L^(z3;Xy z*X-VCyD1>7DhkO+1gV0-$^y6>0-!>y#4#*${K-eoJ$Jqnn@H8TYaJju5~u&_ov&Rp zHu9wx=TBWoPMw=QKi4`t+dVVanq6uyv~9POBo>J!GO=N(M9PL(8LAQ~rv|CQ^i2Hm z7ZyMM{5;f2#KcU75l3cx)T|$;t!qaoCYp~uKYL~|8EF^+yM$*9Qc`QkcGBw(jQ#!( zzH#^3(FN%#BNA5P+!wmf2Xo-OR{4P6qE0m`36qs?mG;!I5&ImPYmxm4Hl1^qr|@_~YZVix#JsEBzPS874fqL_Gi#5=%tFW8C=I6KB5nx4tm9 z)Z{2tFst>PKrGwjr{90|kAC&OBN;DOBZop|uFHA3g>iDULUzneo86}O_z{hm5K*8#q*&T0Eg~rVhqBu#D zRCN0&|CevrvuPBm&8-Pa1ZBfydvO9AMUs+B5fgAWz%NWtQHpN=<{#a2?e$2PpqcoR z1#0z^jMbHj_+LVq!jz&|Ef;k%+*eY-5RWa)FFgDYe|Yxcdze_khV`K{%YXF6^Ha0! z-P^~0<^5MqXlj{7qs6w36l^XOG7S? z@|w|T$NKTZF13ft&f!j{eWae(D&g;C$t2bw!Z~bK6%_?k zIEq}FPi3d*Ig1surmwqs?eBfhS6#ZUxg;WF**SfBx=K{o67^fHEXr$6eEJu)Ec8^? zsQ6u#vb1y6#||v?ozZ4HM&Vu#yQRPRAcOd?fr=LE*2udB22go6;CHI|RH{}xq28Qg z0V!oo3XvssxqwQYmZUKq*!h6x15}(9iU#y8v9SKmhnJH4mNgyZ2g=Vk!lB(OM*Xv1 zJyos+J6nwi3MJ}F?`vef1^U>k0%m zvl@E|#0yzc*IOuM5rrzhvO<;FSR$JW^=yPx7%C8}3Zs{A8M$K9m1p;NKY#q}7Y@&! zIA@@dF~pXXp`4I1`P^n9)Zb?d(pFDe9oaGxky`a;)yVBmt3q+R0ZL#7g!B+Vtem9D z^s(c6uDeyy@p%#aGFF8zP(4c5Ek#BAFH?UlqLLSg{8twW9rRjNB1FoK6Gxu=^56YQ z>-e)2H$^EX`^354AAIikOq%X+&%Mn|51cVVM75WflWm134M+Pgp=?I7#If z|K`h$HS%4z?^y0xAcYb5na*r0Y4?z*LJTMZ$4rWl$q#DW zAQ=V>B?AC(*_<3o7$@~Bpy8(XkQtCN`*m=Q@O~0*+f&Jp&57}%LPfOp6Xwy!&UECL z{_5V}{Z#X=>vz5PwfkOoVExvyD3Na0vKK(}oDBm4@+-8sW?Ax{vqco{r%Ey2> zwF_Ak`0Ab`km{U8XhEXSa>n$%Tp)kh>B3+bQ53~}HyK)HM5ijH)s-qBLpv??>DEbu zYndnL-T+==02;PUVTKDL{XnnS0W2~HM{}I)Uya(4E5XU5{VGRoBZG=(042H2|L8^+ zq@k}c1IWl+T|W+wgj6iz25gd!{=|px`(J;5#F!DKM8QVI&4f+tnmGNXZ@uwbZ`(ilwd|Cc3!&Y<~QuW{#D}>qp)2_8WJfJG(~U`xrk+=ux%92KEN5QH0g3zH^r7DLAd9p?;z6h0%U8=7D1 zF#Qy49ocSE_EskE%j-P5d>%M}h$Q#tAqT4Ui0tQ_r3X>nxGw(cn|FWL*Ie`3%f?kZ zT^mD*S^e3A1G~8PIW;cP<|=j+7Nc&BGs&*BzbD2s$92T!sio|C5Kivs26Kq3`*!bu|_p_(YKm5Yd?4r@cP{c%P2`Xp^|Ll7% zxp{lDV}%O3*UAha>=6yDP9XrW;k!ZeP1$Jt0-;k}A}e#Fb3=pwJdo z=7;hR-u6+%=v;skcdUvCrqOEmP9J&l#3P@-aQLw8E*NHERSQ@W5>;cEo}V$l`uESa z(=HPfh9wnc!_;V!+N9l9<(LeyOXWi(1S4>n)HGP<$tT}*KMCLuu`={^nC0?jXr7Z; zKtcvlL?aCv8{su$G%?0&M$DQKvvxEZZ<_H&bF{(D$i&87Bqt)&wYJxzcA6~r>_WG< z*tT=+ba6SIYuTliwz`@ofEXylu-8+FT;m!50Fcy4L_t(YKq(2VyN24OpC@b7h?q1@ zC&%dhckcOt_uO>dC1Xk2P7#5WRal(|0q06yVNvQxL%GIa4M0(#R{eYgxhq`0)`6q? zxB+)oQraI`d!(YMGMH-rD9g}{_ZL2J?YF=7 zl5Uz>q()hM6lnq>5Q$4+Uz(5t0OjxHCz^jJ?-)V=$fPOGw-(PVv|CGtg;+>P#rvd! z$g)PH@#%%+;Ns##$L1eCY}quFtrd!ue(v3uylO|>O(ok`+6RQk!0L|_$avs%ftXth z(YU!`!}bH$@4Nnv%{wn?G@8&3L?BXViNaK9wab!|TLsPBTjBzp2t?Gd#7lD*jy?DA z(MRuJI(@<0l86GT&=jm}&}{0u30gN{Hm{Ahu5Dhjetg&Zk!@?nHjRy}8*5C) zrfH&P#1X^z7=w(1h*urNi$?w+KsiL8XQ4OF%;tS4N-XV-Cuf6i6NMXxLyefgj>4%~;$~?2k-~Ycp_mB5YMUAF2 zaC=KDNUV%=`t$F<;@jSMiA`KaNh0U(@Bab34{T$utKIev3A$)o!0=wKs&$OwDa<7)@|GzH6y5nO#rBet}?)&(Pvbp1QdJp zhXIo!Uhbq9PQ7^IsRzzI_gHs!ipg>mxm(p3jYO&4)#*h!KHolae&O)c^10ci#dadp zAXqqW88?yeH{<};4T?ZQ&Ik`7my3^GI%V&`uA~AHRkfhhM0TX1>n5;iGTOGjxno0f z_oj*6>qjqHJHBONd~Mtui{jXL??=^CRV=0I2)yesTv@JO^7dPagJmhi8Zt3CpFAdJ zGT;Uww$>!di;2v%y2lqTJbUWG<0sD?IyHa#T(7mjHi?KB#zaO45GJCOfz%pGd#}BI z(=UA6>u$YrLy~kXpu|SgAa(XLfEt7xP@z;Oh>f}UnC&ybhuCF5_)S6u0$JZ-5T~;v ztelklSG@7a%Xvc>K<&}o(2{joB2R-EfNJJXACv%82=D+CkoqHnBGD`|fY5UvY?Y50 zd|7grnhF@Ow4o})CATS7%~^K+(CZt|&SFDNCvjy|Qh;#BC=CJX<(6=>RRNabLy!|E z1@S1$g+=|rKm7bh@4jH-hCdH*j`<|1)iF;0!`EH;eQ(^CO4nLz080icB#x0dD+2uK zXn9aMZ>&h;rRU+ZLcl^W5EeBsZOc>33#TtEEwv0O8*hiOq6P#diNP}+{r`Rb=;3os zGTI>dxp(irVN2Z2uUAo2lzyP{i~4^9vIn38Cvap+Ktw_+npzS>jq%CJotJFgch$B% zm#^QlZDf3my??1V0thI4))5zLMS%0dC*-7oRgrYk<)zl_%<<_X&z(DZsCD*~beBhB zAYuY{Q(Elc++y#@)bf$3`D0VdGfT;GS5i>|F)@*nGMJQ9;8Hn>!h1Q0V`1*LMlY5z zpezuD2&o8QiPL67)=uJ*4e=$L;(c4z?B6nR>H3MClj9plN5`TlW@gVqx~YnFr^o<_ zy6fJ2ysY=u*Mcn|n{y}d!=Ih_EOPKZ(*$8rA`v5O1SE(+M8r%cf`J+Devo;-CD$?LY9=s|4*-QU*(i%_&IMt09xM z`#q<-TEy`33tHL|)c3qdVRH#KR4*t81g~lbA=7t^KKb809kAb4T`H1x-wfp=EHeNu zN_t@!{ThJhFgXLLzeH11{@3UK>Yg)EH103i6#*2aD%w!_w{PG7 z1Mj*lmL%1bgjiG8k_#C2Xxn$uY+*`l9iE1< zs;DYSs;c0|NW6B#x@|kwZ{4w zx!L6l)AQ437N@6{rq3ts7E3pdjA7gIBhoV`boNEQ@nrM=z;B%S8Z9dXZ_mk;}c_1 z91%dUNG;No5_K6ERK(@~R0C4SPF!b!j(fh7O}fLh5I-#na*R|Y9cgt^YuOlBQrC69OFbJPEEp(%u@z0FW`OFxbAa3;?PEVnL}2Zr{TPP%TB5(41Zk zaq%s&`AS=LoY|fE1ieqaP0))(ni~zj0wq(7vK0@9#1yi?Ik@EIg1cGZ|5}P#%GSq|KXQTtB(K2_wK%76ZdQ|JJiWX{jg}wBX!wl zsDM!cGZgTrqN)m2v9O{FQZ{kiFpZIDbksDP6vf6ECRT-5nk|wL84?O!wx5#`=wzQlosZtqFQM< zY|;`<^7H0WQ#lbl4)1ZGiv|>1A^}`bq9qnD8?quq4HJaatJn&_U1evOqNK|&URb#M z$dS)J{=zc{=ND#UP@~aQ5ZSc*=36fL%^!N({*7rXQBq63Ysp}vD!eNds?uf@kv_17 z0Zmas+eCk?f}27&>7nVOA`q}J?C5F(xka|1Qq&Hto&oelSP{w$uD=}#zy`Rf%n|F( z005^YBZwy#%>a-wPw#S+orcs4eZyB)0e2$r*HMedFPcML2TLEf3Aj*T`27gsa$6w; z*DB=$csZrAdK&bZ`jVXis?rG4LOcG^Kl;p{fA)-t$BC>zHv@Sezh3&@Th{;lH{P&y zExM@{z#z#IYIrk$_PL_St;7JrKN{qsf}Il}N*N5qb8S67y>MZvs|iOSAy^gztJ3`N zW2Zm*=J#+K@Dj3VooKqlcbLKbk^%|EGC3iaY%!Pb9KC+Wy6d(~?q9!d%gESB6tS@oO_3xl!j_domYVD-JLJqgP^#UVb|qG--7v~P{FGy{xS(u*ifouK*mxeaFKuz7$GW)ktHL$`lO34 z=*+qnBg7GnbbIvt)VWVR^TOwzIDF`ZUfMBHW5h~&+m)OD$4|ZSstr*)5ix93NZlbM z)kOklKhz7qRJZ-ZxCM zT{>~Y2cVTeC^7)bKjb^CNcx5`fbe+WKvV3T3#fE%MqbWxX_FK?wJ?A`r2K4#+yA=XqNT6z=-=h&L0GM0)aebYDvC!PUF?g zJd`u{f+Zm56bfgXp>PTm8&Zx^%k#@}e71e~+~UEr3uk6Ki_4OL0A^7jIEt)7{e-Ld+1tNr*b;> zV$`Ra@S23D`jm6u0#V4MA^&9Pekx5ep^zusQ3w(;%8?MeTONf%O`jv8D11`6*?eg- zNR`AW#T*;N^NZ;N$B%#X(P!>^WNLmsR@K+vu>JRc>a9B`rJK65aOxxF2!Is^Z29OEkg(~x( z`0)aH3h!l-V?e$t5CfQ2xvpj)lp^{Dj(R18&6R*qGnZ*rN0@UVn5aa}DT@dz^;q~@ zdv-BQ7+H1kxDhB*xeK>kBBW4^z$CWufB)ItzxxkIh$q-3?-D2xv9M~dOIL1-e(_tc zd*kJ6x=A8Jh7v#_46*{rH9#-Bt_C{4Bg>}+p%oz6zW zg~SKq(ZAq2kB; zUE&Rx$by{7J2$9iLn(N1_j_bOeMB7~h6HR14y1lHnf&KJXJv1`qp2aqC8xoLy3D3G{J149)T z!fKQVUX~ZoQ=iPRqflbg+di=&(#B)Q&;HKc4?pna)Sv(Cd#>Lw-qp-(UEyJUgDs9H z^s9w$8GcvEe;9hnfZu2F4>f}@0hFh@Ac$)5SrP2uUQ+SCgqAC=k|Wd$Nrm1jpywU+ zF#!K4HvyH}4we-lznZB|BO3^1#w9b7n>{K-T4?31VXgXhwTczh*H>3cf=Xy1oCTL; zh;l7|CS1=1YAJhdwVFBwi26<>07u-N|6~IM8T*xgxbHVU{7lcTF-C~#|WhK&;W!%wALCkyzi*^oiRLQoc~Di)fWM!Ipm?%mqF z?$U{ycC9WNQ(LFz)k{C?7KQ;BEEVfzIOXF$J-X}i252T-Nb zueGb|n(?IH{h~wyW4V#Kw0%L*$v_MkQ8{ETN=BKdnA4RsnAa6xQlB6&HrO;d5s{5y z(q7}t{L<#FQB#nzvKFXFX)Lt^$wRr2aZw;=*flTp`@Rj4ti51SvkqAknJJ=HM9yhw zwr}!oL%mgTfT5sPhZNQYAg76G?vEDMGuHr$ro=EF3c&mAx-yX-0Hc;!dY$aK+P10R z5L9~oPdyWARdDj$wCQLqH78)@zkyXrg_~?b?;F$~0o|->3(_UB~mQ;&h=P^VV*pdU+)ikG)_;3N=DeN^#1OC*I-pB1$?D zs3aB_NLUCn$bza$oFWt%8{u{1WA1>Qkv7Prz{>{$U-eS8D{S8Qvx(s?Ob0498v@~P`_L`)vIR! zrT&N0>7kY?^x@8Gnk;l*JPpn|d__t>6GcYt3p*F8B|V^4Dkzo}D}=@!1?$_yfn^e4 zg%!#%XvB>D%|i!&><{ifb9Ovxy8DD7MC53^aGLb4yKK#W{@Me#?;A~QA}+t1vnJ&u z&HgD<8j~XTyTI@e(Q2MLAo6BpfFj)?@#U=BxHi-g@b}>o;$>WNflQk($(^ z+a*inoQ&AfF(Kp54YIuy=qhE7JURdDcekjJfRgtbDj%u3AHqhb;z}2)d*PflOtey* zQZwPmr47@f+*540|3FN$Y1ERtgl3X2DDrQj-0% zAIpxMp`{>%hEJI?mjUj$Mja(7u(#?dr}oWi|Jx-7Fo-y;iu$eWg;F}%$b>5&5f;3F zGECu$31|QV$laMyJHjfE3z<20RmdLr$=y){xg=f$G(C>fx`4>29Mj#1itPb-fO=R;L^TY4D^1E-} zV9-mfb6J-xE(j`t0@Wg7KKy|XigHJ04fT5_Z~|3B@v_MAnYoz@Ry86bf>E+gz%MDs z8NtdZi<6 z7kAE3Iu}+H4*!aJLdK=Sy!5vh=F$^IkD8i!xg%(4Ipn!~G}!MYZ?=~DxNRD&AtnwW5sJ75)_3?k_{6000FwGZ(R|?}R=@0f8FOm}x$JYVJq=*Qf7(qGuYT zOd@0zY=o4ENW@YE{f0ZX{a^3cbIGK3tc4JhRVXP3`ZMT2INR!4f~L&jiyWZzmqH{6 zoZ*L6o71huV>1igG!&kcb+nvL=L)58Z$A?;oFP#8EG`@4kJOO zNov_Fchj@;>C}-3!l|q@AnTVK#a(j+<--N^c?5vd_q!yZ{pk8w{-My8s z+dF#azI8Y4*s^c!nl&^^oF<&~(1Q;{BS%NIE_GyKo-%Crs2=3wjOeY_k*(|*pSN7_ zyYavJ5Cy2yv_hW2!V-n6!9Z+bEHx62EU`PH$d^&So&E*gLchGW8GLI z?6aaQRn&h==vHn$U`DmeLZ?)yknx{fZmWo?1z1Zn3X#GqRBX=A0p%uRXt~AJF@WKv zOrTc4lEOwLM=ZRB(J_F46$l_x9|J&O!J(;_zySKEwz7D+BXiBxUum)&ioXmVpjsJl zeJ_P=n*EwF`CN1xGeIU* zRrsB(E>&A%_2zw(Kl`=&?z}8Y5_XB=*mszVM}4IPc3I{u?(sebPyji|SAdI#LflI1 zv6<<)1yva#=VFP{bh|iVcg2?>W}-y9Vk1?K$X;mCfBE>qGZ!p~_pTfHvG?C}{=(uD zC#Ih|e&OVW&QixwcxERpI}5xQ0!ef1bb0gHoz67UH}{FVX-MiI0D#gU=%p2?X<$pfZb0r`8B zg@Y)$+(cxlVX2W)lybP?G5}I1efwrb!)BzsYE=UDEs=VyN=eDEZdg0gU>2wkWh;u_ zy7=ko+TPU1E4yj%eqAAeM zm0v93e!g`BKIV~ib*NPAe^43160%PE7(fmj0cu^K5loY#PM3f2@9+NYj~weIV^Jgk ziF3LX1`ClU32&Le4}Q(w?|jY9rs<`rfP{k^J@V_MDr;99V`)B7Si&I#&oPdie5Xbz zfjK+3aPEAkBMl-V3bDc2OT?-mLsN^rsReuamNgNzdls?KSd;$jk=YO5f0`Q6cpR-? z*F1B+)k%eji2_X}sLxHr89F<>Q)L1mtd`WKU^_BucWtNZ_m02e@{O68nQ+79k5g|K3c_m%sD9#BBbbK|1rRc?AOfkZ8Evc`i+nbyf}M|Y zwPWx!`0>|!;%WAOAzrI|Sk?Ddzt~1$cjtqrvT#q~q$6*lJV%781L!MJR$u^H#DMT` zwsQq=M#|zOP|*v>HR6M10@yhN08k#vKv0U9TsQhM8r9FwinFF5DhzK(y;|_{=b4$d z_8EfM6{HA{qPbgGzTf&~36!V%B2b~=(Vi`PK<@yVb7?0)h!kj$VdX!(=kcHW(Bsq7 z<53JHtHjRPh7?R{g;?d?w{H4(@7jCCdT#f`sv07f8dISRtNsWfle}_qAP}2;G+{`J z;x}JPB+on5_y+ICyE-IzE%*zg;<)kn>80QO`zNm3v*8Ikg5#3rOdnnE?DsJCI0y=M2=otJO8 zeb?3l8`rOE7$)tZmyq?+1v!=_BqS6QiIN2*SV$SjO%`=7fEm4B1?ee0se4u-c@8;> z(wvvw$kRWC&oNr4qDlaR6cAEliBoDM)Ue*WE^`g?i(QZn>lSyA;V>`$fGNN(aYP%| zj2S8emJO#aR1HN6)$hNZ_2mA^PZhH2b$h$NgHl65v&X@wg0y;Xp6AP*=qi9xfL zMK2C4gPvt1EMuB=b4wZj4lWV7gn?kDaqHa209Fae;M%$1P}JG9SiyI#E+rvFTp%glLsg(8L_i7^mS!i#>G}DYg`V_cVTMnY?`+nFiRXIJFMZ^( zljmEvT)tt`hOsAJTs%G3>xxEfpd?@-g}Z`ELEgV8TP7heDO6Zeg(mT6vTGY|+PCJe zD>mJ-ZOf$-lg)@NbrRT+F`rmTiSsj_V7qpKYS|i;T>xsR{|d{Tzpi1Gvx%!^0L71# zzd_lL8thv6S++xM?->gPB7l@cp%$Z-;)Ei}&Vh@2x3b*srwSu0;6NS38mOpe>TG1g z#Aw4%mV~r;7+xJ@?QdG^`IEs?C#_1h8pBv_7B-NtL&mz?)D?UZkW2Q|-%tgnq2*$@ z!fK9*a-{1r#tou`r;CK-0#!-M^c@>Z*-*UB2P^jhnVK#yQeNJ6%daOlp;wG~~)J zp6caC7(x9DChvlg*;AMD6s%&qhFX19hx|YVos*!?S{v z8&*xqQR1%=?(=0Ywwiq(zyQi6Lzj&5`W&U}#v5ZzA74ggQFIjp2a4fJeO)@GJfrhL z0>;W(N`GG^yG_|1=9p=LLZYu~sn22i{vv2Xs6H5}G_bKyt1!cw>4F7M00M~SKk!xI zAHMTfz2156D4~AkWFTk)mH-IIvc^rOq}TYL_dNP*fAQGV)R<|;1nb-sUFrfRRb^{& z&5q{3e&@dTT)m+|-L7S3KrO>+2$m0L042mJj--t8e&3Z&cPLOKmvTVWrqoL8LMv@` zw3{Yf3js42Bv6fvF|0jnPR#LxM;9JBbn3;Ko(+Z^f~dlhVO3TYg3nLsgUdh)wX6w% z?#Kl8?c%SxX7a1A*mT3DZR_I^t2W^!B_za*l&n#(FqniwBC_gwB9Pm{q7>=&VA*Iz zWC*iWtv8qshOrXC*`VAZx`vEQ0Fkn|(`{k}L?aco7NUlX8e=GmQjL3pL^zI&Xje_N z8fsiq2J-;#dP9y6$>iwB_(%jwK_;|arn4*d9^B;0B2}P#&hk~l&X6IsD4wl67(x(I z3ZyYd@FM9ix9Sl;$?@0FVG8U?q*A4PNu5gXjOjM{I2c8r$8Fey z71_UtB2|&TDlQd=dC`L4Kn751GVH(1NhJf`g&vl0c4ZA9J9HT&QxDSs%DZQ%ES|II zmoh<=JNON(Qkb4<_u)aE5|BlFlnK4h8x)`oxH3%QQzxM1#-@wIfGkrH^^L_n4j)KC z$_bPS7&DF27t){qyD$FPC(b0c85;sYT(T8$+f!lDvv&8U<`2GU@7LeDd7_bYRADKi zG|L?nM40lV<)l!25=YlR7_dGJQ%Qu|iJe>SEwwwXcG|PVAf*`Y9(zTsWK6tZ&2#5E z_q=%S@x#-zi=r@O*pR4?S<9B$eYGF}hJ@8Ztbn@{YwcB+HePqthBxlpa>M$KYfO|H z>2gamCawS?B>}`yCl`j03zkKZtuR(94Y^w5A{oH2--;at0z+O7@fTPU$N(0q1Oq4o z3acPdlO)>dVL3?`lBAosIHf4HG&7$(eRAQ^qjS%mUYcF#bd?mWU748d{>OiH$JbuF zFR>OJEXJ!BP%2VYE`cgQO3YA@9UF-!N1N;~MkdNc@|EVKp8=Fz5OO#Q0oFNGTGPt# z!Guqm`4JU3N)Y|}o&77~{(yceJ7_gnQzjHc7(jiSnmOotk&dK1e^h@4P!xwM3}Dq7 zK;_X;>R*ES;u)iB(S>0SbqpO&p6fS%I2zIthX|r=Q63nyJb4EgIwwO*!7nZ2tl>nz zppy7@8I(d**+8j5MlAp7eNX)2pFeu~Y%^*!!Ko5h**P*2EELu{%wO_Q#gp2T|vxEf~S79rZ zSn2enousWK>86sVATzhCIb$8yj zb6c9WEt5ix79ku^GIT3=L1dJQ5H3Y<0s-5Jk!WJHNuZGEU-NcqXS)AKhuhv0Bk!}g z3CaX2OXat^?M8(zG^DcNf`=-K0v7r;kuYE?SFP*jBGeJ&)0%%9fSmn2fCwsuH^O{) zf9OFBAj?^jwdZ$SZUQP}>Puq)`O_L<_$BcG0>Jso_m^7Pe-KoC?>V#!$Ho44FPUa+ zV1Ro97R$Y4scjdMBuyk$OEzXu6cHkx@9J}>mhU?<_4v`*={e~s zM@$Uo-Ay*J8`dS?@vh6i{pRb|jWyfSO_+>ip##H*UodfdVoZfFa<>iCC+K6DY>rHf zL?G*K8!k0HL>#N`l1hr6@|)gR?`2)>uTV#0{LlHym&AYXWR<^Hd^$)4ECe158BD>o z?4rw%r6~g$kVi@mgkFCx0!cLg@&7AhU0E2$5DlQepCRy8032MQx}vLYw%D=~s1!?7 z?su5@UqTT=CgNt~KB&f}q|JFySaw!g?@w9*X?3iq=EWi(8i3Y8CMq!W%%DGNcyS5; z?K2Pl)<>V4n;Vash9E+Yg0qv#iNsox)Ly=028uJn2qzW^i~M< z@?)^}kg_Ogswzoy!d`PZz3IT_uim%ws!i)BVG<;5PV%hJ4m1a1(RnMMvC4;k-crDj z8nq)k@%OKk?32-MD>AS39Y@(1w%>36HCw^#kc44OmF|c0mwyIkJ-@ zBV)}bY4A$A7~4`6yUXut=$=sAahb>5s=LVBS4h}b6kKde0)2^a)-{%?CIf}tBKY+c zR{(gp_+Mq#&@GBo#yYrfb%I-&=Oyv3HFj+Y=%c1A!wL&Kzx7 zNSAu)?0k26q1$e!iGnC%QsT(TyC6h>vRUZxv*)_^A3gu%vBiZ}0wN}2a)E3vC4kR% zm-+X@8ckItHO=ncop|ka8{c)+wpVZ3wkD1ePJ7%^g~Cv#gVjw)g^Yv)+~M}ZuT&X$ znS}Q!a3&OugaH;3Nol#O^X+7z+iQ1iYTeC0F+n3%6LG3EwWN=oTDb8Qes zk+E(wFj9d@g|%ZhZBD-XJ^Q}nmYXIbTBbx0?%fKyZJ4P+ndzvsw{lG&QwiN48%Mfs ze5_&E-G^LM7*;n&1G#fSC=bVSVTY=U|7DdORYY^2+M?eRq<}sH89;xJgS5#4^&g;_ z41;*k$ZE)D9tQxZ$9gXEH3d*+0KfnfP|g4@lKKxXgLpudmG#ZmFx`SU%Yik3J`RJY zs*40o$xTa^tgWn*2F8%<0SK`#HKVJ-6I2aUdmmCtl17PX6@f440Yu)jlNd6>jj7q> z|NZor{=bhOpPwH$4JIT?ETk;NFbV}(2&ajx8P#{aYU_90we!a9O=!0x&I?6Y;v|&| zi@oWk<;A65FBK&wjnpN8h9MPZjmcP|&u zBI}SOyPqvU=o0vWdOcn2*rjfFsnhLPwU$)bfT2d&#w;8~a~<>anbt#x&pmN;ae4_> z)i4?Mf?wF|l6G0C_vSm-|H#)|f78Yt9bQg^{b{<(DoZHFe)a`tRg1@Rm&Db*#(=s@ zknP9_uN@gNOu_e@U(zg>jIC}cUI@>9z)DGwa!oHE$0~dS^A^g1ec`$PtJS@kp<6CI zmtGsh#0pq<(e!E9lGIQ_ppO9*0vOyu_o^5`a9pW_^X2e>TFt1mq=P4EkYdpf?8PEq zg^UKUiip(@a9%l}X14k@qa4Hliof>%R9|xJ?}OY4(*b-{kg!W*KrwNwBVRmt^5;K# z-@T8tfzil-NR(7H@*!ZPL=el?CL1TryI!^Z+wa_U&Gx2BGP{^eFSX~FTCJ{%kO2!j z*CO&KmCVLy$MV7R_MXG%o_cX^X1Pa*$hdpeHC*9B0K2Qx0aY*y*_2_^##ryb<@~Oj zw!D4+?)~dFM2apiSxT*vJ0l2LN{V4yxvOBIWD1$v3kBVAAQHXg(!b|3dLPpEAndf@ zx*~A*5*Srl?qZ?aoo{#AZQB!7iIl)Aa}`PP=6%;**JSBx$9k#R1qDi$HzH$0724J}lbJmf!70G`mZ)J& zG|j}wD3L0qgzOykB4z(#Z++hazH1TEmEX^QD~X1gO}>7+6{zJ(aIdZu8A%Y&zQPP3 zXvYLlVDw?_at4seil{IE|L#|U0aRWuB3*G(2JEPTO=gxA%^JEGC~Fk60*xNbw89Un z;?*yzQ`zd4s;0?&(N-vZ*Nv81DYTZ89(dv>qihyh=6`+Z$^Z7TC(fLTO%#(6IO0km zjabzk4yz!wcH0_y=dD{_ch%-e?%Fg-EHmQFYmC%b51xbgtc5YA31p(lt;f zm(qdBFu>7#N1r;qbkFnWpF6%Vw=6`FVHe`9#0JYiGCQ^`SBPPG}(G^>Lhmnr32@orR1oJDjwH( z9b`mQ2pkbcF#hz3goL=s_EaKskTnYr}7W3yj+{_N?QUZSxv%;ek=n8k_tc}SN}GL(`gJ=09C-PicK zJ2t=j@*S5>Ze;3p&`n@TjpwLAdMWC$ezK@;Q8G>kWJ^~xj8*4+wWYRpW*BsTh#(>Q zoB=^?ES~jJ#u*V>})p` z7&gSJF42R6l*Qj5uMm>1M9ubVZ(sj|cinXR)?F!e+9p*JcF8x9$>q7Bv|#M4QK70r znRApO7o(xXGSQ6Jj>K>ooJjmpe05QV@>@r)%08Wy=LkBUlf=9zl~d6Q52!@1*AWx- z7d3+ii~qv}hKr(ptCsYuWhDlHA!4OJQ-g~MU=K!~!FW}107OH5gI^90sJ>g8;*0Q? z>D$b8*-b7IqzVIYC`N_&wv~8*&w!clwYoJL@RPdE`lOP;M03lVd!hp0v zMicXy=T7|k#~--=k;K|Y967gI00Lqb=SOIjV1=y8WRq^ZbnTn2-f-RKvB_rAQhMS{ za_^z(M-E+>Zm|*>Mj-tZ?mhH|V+Au*m2C=0Z*oKOnj0rR@TyB*f60ywQPiVO7nUFb zhAJydmVkvqL`F6^z_Env6s2z-tJ6`Eyoy=``X;;j_DZUoBc>pq@`6H?g#U#Il&Wd> z?0l;`-|4lxNn)YG3ge>Ll^809$#9$~ot~G6kIz1K8=g(+zLlb7dpyc92-8%ZOK&{t9C*o=lX8Z;6DL#aDJH6gPCT(Hw0w zfmGbs5!@*Ir@ka-=O+7nbCtTSpXH!ZXtqu2mZd2E*Q#hm5C&=L)jd_m09L<4`x(G$ zG=No7|N3?u5|VQoAyCNb7zES;1HfPnz#ofy39N2iUwWx$^<`;wHKo8RGFhE9d-U@4 zlmfX}-Q`WruTH%zPnn@rQQU7UF#srlV5eOX!h(&Z4=pMiud>=otadbNE-b|#dgO`! z{)sOiI%q&~91%#=I9d~fQ=eQKB4R{sgLT*Xc;B|k+2!6-N9S9;2$7B9L_nu-GQ65C z014O#)UqUkxU**$zw@@u-*C;I1Dn=HiZ-=Uwh%b?5%rWN+`Ctj@~H6dkl8HD5G5+# z#{g<)c<}D3EiPM8E;W1I*`&gYUAxfg&UZT9uBHOj$eodT&su;1j^czcwS*^6FFx|Z zxff0?&b37mJ4aph(ftA!;6~!17PcJ=)4lqd#<#usz}H@OV6uTFZY3^NEL_Ui;1cGC zQxME^YFU|r;@6x-Kvbb7!gw658EF_2>z#?c_iY$G<*yV)^*#nr5!{DQaInM<&$OS} zEQ&;%%IobUV}y&*3YBwJr_yK@*wsLszw}Zx0IL01Y_;}F@yC!YO$#=^&}8kMz=dJw z!QonCLAzMGdeN)xOU~<8te3M7?;(&8x>u+KiwjnU$E&pEU`6ex(Y3t<-HmdVw)#;7Fk#~N089cn|!-?9X_3+}Ts z-CWqy3JQgt+(%vVnW&awWPZ?W4z7?*t@Ep~q{by&Vi3fn!mVC1*Gd*Tz2%Oio*QI7Z*`2ly*~!dRHId_rLz? z_g-=BhS9i#Wff7EIzmI%AfQhvE-JHu0EDxYfH}n(CWZ=>$Tnh{935>&kwC~@nuUVG zTG<^`NG?^O$SNz)xI*0ukE$91bD%3kAN7b)mJLeOKbx1LC_DhPp>PlAakZtd*?Jx@ zsNL{8D_k&6sIM6bt1^I!;-fw`fPl=vSpedtF#w=%?)xj1W`2+mPqkw&u>laUihE-& zs$9e^-WrUSrMh81R)Noav9tgE9?X)mt{%dYcZ~a|xB(01HT687h17Ws#EgbEkDt^3 z`S8Pk_J!w99*c;gC?c?eAgm#Ca_&eYo)m`rwlYXqAS9{6rco0+cbM1TxasS!+jZOK zt)r2)sokZv5mIG$>Ji+5e3G6(CNildd?u8nGe^p*c(R%eH$bW@HByLkDsiCj$myDD zKq)IhqZHEV&_XAfUG8++HW5`sMC_D73n(;VCZk& z?_;CcCB5#}2SvoH5VncsxO3H2&2N6)HSf9n%Jrjh%Pgmwkjs$`mI4wK_CuJk;-`FH zXQ3nRn+Bzo1z@#Nq-&ZZqYc9ZA%A^PnEk+2hERqA4m-qKmF35Y0)?haD4jPRm{+lr znx?hxN#B<2Lkg{YDz(}Nz1AYv>X|?tCihc-VGO`MQX*qh)>wgOq@5y0h_W zQNCTJoKgH(mVdO!REp@V`CnBQffBd@!_s`=eCLCYKKd75Jap_uqiDtkFrli;>=RH* zGZjbGQEvhS)MUDBk9osQTi>*I^MNgEw@!=*I?I}frVvA-0qvv!VHk=J$_^InL7TE5 zU1rf3uVg9oLV+B)aZ*@bwk8F&yLPdiEOdIyU7M)Fl1s6pBucCzkzt{zlj@m8`^=g4 zv!^Z`KD{)%ELMbw4HJQd!vwp)Fy}wz&g2zHV6BbE(;IJWe8cSr-m>qC^-W%;wrUEA zh*Zf!xvwX+s`UhA)5p_QWk02VbAS*SE8h~>wpg!F;>muN~bg3B&AfGo+1cF za32}qGJR^sYD?~ZWd>XvUXWob^4%(CXz=q=rHnIsswo*RaH~V}%e~o7((b0IRT4vC z0+m1n!<-^s>gn;>^zqYkPoJDWJ=I?5T2*EuVrB?H;^cmx(nJ&_AcjC$g`}s@?&Laq z$E!De(`^Ut*uG~h(q+?1)iOv`86@!euqcpmszK2{{L58R=fdppjNsTj>1b>wnkJ5# zAgg2voGnT*Ct`s}519H;K}Co#kc{LTD7z$-LS7T!c>NhbRaWX>n25yKUmO%QoJ!Z}Pyd@k=J-@e#0EYtvMr;>BBnRf6~n>T|utrK<}x zP22%{#rL1`xr4{uvZ4c^5Q$LWq@^XxXHAh^X5hZFAY6{8q67vnE#urmdv+=5rXVoE zh$@jV0Agb9TFkWM$c6UfCl`;Ln?E;~v=je~C=+k9940~aBLx{2OG2rI^ejcay?dj# z+`jEyS6_4GmaP$`9dy-Qd`847xwBP;&=(Lhm*@(!mYqw5Q=@!Nh@{cru|_-+H<(g| zDojW$g1`_1O{og>ePUKoUM{ay-JZ)mJ}a#aJN~VXtvK`{VxPw}^(?TqLYdZ0(@%W(!DpX2DBX6-BEb@l3U59FJdO1~ATougo( z5hr$rkYgf$oK4~aC;(X7oSE;OxzJkff?-^83oNNuCReO#r2g5{r!Xj!RV zXnBx|Fwpq3+F$$SITW`=d1F-(#{aWQ>R+s~S_V+p<_cv{n+g}1QLGc9RZuhm<^O1b z0U&b&E%)W!(OyD%NpF=Vj>=!kgm4HCpsL6>=!KPlEQri-+jiCQ?paC^4NR%RT8luH z5U&cgsyL5&}=*VI#z3=GBKY!%uN1j}~ zFw=xKOoN!M`h*0ItSBi2#LiYup+P|^A}UO>c7!k4+&r*r-3^znyK(pUzD=WR$D<|- zR4l|=6%}{imug@DK}hz*4jJVJGN@}uo=t1PtQORkTr()J0=TP(0Ygsh2)zoT3k%(I zb1iE*5$YtE@9DWEdv?BebZY6u?9!RJ-a=cuRzWZt5t9qN2)N^pcRlQG>k$BVVQ(su zCZ=ik>}|Z^rk(G+X7|;bwvI45+)khbHcG0h9MqU>U_`6mVg(B3$pKu}Y|^+v<8d?+ zH;7eXS;^fl=_SgSwu=eb#u*GsD3w%+ImhXX_#V_k^+8z_s)*>CGnKy4RTx0{REVDL z1AY)Nt9twriDXT)j+;5}Pc8i7J`G|3aP%d7$lMoe*!n*k4=C)!Y@=qrmHh;?@KWhh zu)JtKRMbt}iVUFKc-8JX?DeAX;>k{_`UDrAQcf&6;aWQ^ivSn1N{g2YzGA^ zL%prcn?5S!z&jZ^2J18m1|lM21F&UY=<&I^-ievsiRtAtv+WZX+DE5bXJdC-Or&^4Mu(gY^ivf12x{rY#@xc81r_G}m(Nu`@`OEP~O zA`;RPd?Q|BoycCR>*Nd>En*5VpM((HH@@nfcHrm)vttb1dbwV2EhRZ z7E%vUg_#V7JljoLWJ-NXN3r&xlgQ!SR(ia+GKg`KwP>ov)hwjFbstm}D!kb4rON6&^aFY*sd`ykj8cO}#G147OZOZ-`Kf1* zJb7^b+ng?8z!RlV`klGJl3GGm||lhL(DEAh%%vI89FAWx0#R zuAN=BQ}f+Zvz;>+S|=}b&n+f1i@jFcb}Uo~Y}l}I=e$twG3D}lssc6)j~$iP%!88z zU{((_$d(`TYbu`+Y41@*E)-TUc-giV-BmYuB z6Y}TI?jVo=%d8{KXf!q>Q4EM*|2*)Of}Kw7A6!M^Lp4Aa66XlJ+yhixvNC zr{|&?spGu``L){M07{pC&%G9FK`p*qD+HBW)4(pX%o(dFTGRt-HhBT+`u9-*OwsR? zH)!5!ehZi3Ww7~B(!|nYI~C`X4(F|(xd>;1k%ELo4Mh>fX;070w;nit=JN+%eEiVD znRBq+7+_;StRNM5(-otrACN!e^_Q7sm?lodb#Bc9g{ZR#GSrY7#)v^P#(0y)n(_FE z86SzpN1|qI8m!Gm)QG%rBdXSFYBdo_61&`!rEa>^we3#2+|zEV-9&q-_EJp+A^AtJyMNfgmYBOZyOm<`B!=MW`in#yX+ zP~um_?Hsgh4|#0!wL(jMwO7&q3SwYA^+)}#E3{Sv%*9eatUQGJQm3-y4|92RXs1O6 z;KXG=1T6-FAwx2CW6n9jE2IJRmy2Zpb+2fM_NqLsml+D%5$^s-Eo1s{31TR8grG3h zwo_NT5F$_on@|T=AM(|%edTnj=w~!w7U3kJ!dmAUO@VHL#g0{wyL2f?(2n$bksk2J zqadh?Q4n*i4Y52uzx3$Iv!6YD;)x@3$Im3~MTSJgOp&;3sg9Tyfg*40)@-f_P#E%| z0!+@xLqsZB1ez#RR9uQ2&0OEaPgJebERnxP&RKw*&>nmo2nuGP$W#$rgFLraA7|na zQN8WNO{J(hbD4#vDL5IMpi6g--gw3Ouex&k%{z8(8DB#x30etR@ljReG$dsxz8n98baQ4K@`OTYMC zj`6098Wo&V2Xt}qbXkh0M3oXq+$%uoUQQE3Gyq+x?SQi^rFxF|g9b1F0GjW|K@4Dp zuB(+-p-8@jQnN&>qr8Ds5sJ|zwJlua;te#K^@EXpQ!hn33RLh5%r%XHP=&dz<92R{ zA&zt?o2#-C@~lyz(A3gGJGIK*+Me;c0aKshj*}(~5FwJ3=a)Orou9k^*zt!BojrUi znYlpHGaw=ZVrDPjE0Od6blOICN?wqJiL>|%%FJ;Z^q=Cq6o`foD9Wu*MMw1TQYN{V z2h=AZy5@_%(t!-Rb7N7l5K&MXHFe82zG~0dt1sJr>m|GQZ{D~rjtEJIdMQ$X-LsW_boELQf7j5wegs^g3jw481uQVy zuqGb(6=b_iC@Am(=V_FmwY&C7K`K7fAr-L#u`p?41Y0)7`*)9Dzi-1$J9k{QWz&}C zM9h+Mn$WVJ*zAh#0fZ*stR*pQ2&Hvk3xU1)4gd+WjznfOYQ#~@lzL~JjII`ZDF!y2 z&1n96!7kpFNDcijavA{6;7{U>BMuQ&3C=|* zvVx^f@61B$`SY_+ojmva$%PYB?diF6xlNK92!jl>Hxm(sP_xYax5P4wz8qoJa!Jwg z4bHx4wk0%Z7$Jj#hA%|n#M(KFWG$=9gX#h#EGUU$OswG@TSoTn9J_Y+=4*Fs+P7ij zrsinVKq&2@V@X97FvhPFQ=dkzxA@CpuP@s!1iF}u3s+ZD2wLvZZ%|xX7Ui;R!_{}>47rjaUaS=~V+Elx+EQDHz-hz%O{Rw1Z+2+kG^`m1sk*R1iJw)&j%-6UP^^^z1K z1~3YDS&N3N4@z>GH;Dw8)f>ze2&Yo2tYnBI#0u^tcD~a)v$$|%#V%o6SG!6g5F%D#g8EC;eU6Ke z$|9fc^6F^**PlBVG*?iN;9ZEEKhFXI%p4gsV`@fGY>Z3k5m-wJvFjwGx-v|Z(LO9* zjqD%jM~0DZSi!f|v)q+nD*Ro6g_U~OA+__LFGlnSPVu`Q^~TjpsVj1P7p3?AB9&6 zDWs_{T}`#I>;SGTk@ffI#n{Ts3>#;*2NaGh3RGFyf)i_(d%bqgWqKe(EIzZlV;Vt< z1_Ms|58O52j)o&jz`4l#r8GnlMa--ME7VQwVz)cn>YiU}ot#@fd13L)g~ju8-RZ?- zVJU4bOE=LZCABV>C}rMVAcwWVKAj!)1i9Z+0{>G+6~yTY#vqDmq^ToKS~D808IRUY zG&W5(Hm@DuzJ6lo+KKIx6C1|H)-)T2l9@ zd(uhNrkaX4-%An#feAz$85n~&qDI6c4IXWp@kTs8Y9>dUYeu7WV~w?A(Yle*HKQZr zjgj%VF%rkIF)_J3Xb?(8#UfGXY?NnE4h}&1%nw15A%v_Lw%|}QXk(7GkU+%{B4dm} z({Lj)#xRip0%Zb}+?_BvqV^HzOpdM%r!PW2SOchhELAM-5zVrUl&WRRUO1>KaHiVh zk#Y+cRkSKHmD;S(kog9-tIbHWa5ynxzX>Qj{HI0YIPWF0M{U&e}kSV2j0_aw1USy2!iSFtLY zMZ4A~vQpOrtxj~!ZO=|0fE{i8|I7QbCC71HK|pqO-+N+W=5_x6Cnru_BZy zXKVgFY}>XW-VkpSxuLu18jeLMlTMmoZr*Yd^4m_xZ z=1<}bV|wF98z?Zt5Fu`Dt!%$$829alw;SBI+u!%wU-x^bH4?#t{g*ynVLXL^hp(Ls z`DdQQfV+asVe!E%c6K9KPN_Id$4hXI<}8N5OMVbUjuN`Lp#&GJ`vf?0Q`G>twY)JK z>6!W!{|tea9OdVra%O`i7>&ZCP0-V~kzaPe4wgeNAl64AhRG|9R~H{^y^6KOSFSkG)?Mg9u2t zBM-mtGSz1Wn21#;xsgV073oS)9{y;ik-lIDc)$+0^T7|D-rH@%8?;k9`&45utnF^) z8Uf)8n%x3wr%>y$LNaiqXH!$R!R=D}j(jtE9Oj6bx7}pvTNnZa+L8BBG=tWg(^MyI z2)Enz>vsF=zWuswx2+!~P5l;~Zi)yHP)2gmFk?t zG6O$tzDU-;U6m(sbI+3Y7yTknlu&L?fHMRSie%qxVgE zQO9*b)-UY+KJ2!Grbc2EfPIH$A6lr2cg5XL!JIV9XHH zhh~(uIWBhAyw1I@51bIK0`-mORj$r!#cOcge5%6h*rQOjGrVIvPnbPoTW){$ zLwPBINm#vPT!bH@ga=QSe{THrxZUu+;otYa{`J?df4;u{dBE4>@%R$&yESveHlEYy z!!y9GSUu=7(SrD2HbxBx-()c&L)b8qz|5n_?E~$ttdbX}h*HOSb_2dASG*l*p)A3c zFbJU?K=(iZ#C_Z7w!!@lzi#*Y?bm(VZgP4a?tBvt@`Vj;@zo)p+V942+iuab0`UShT((o7PR^UDvV`RUOEV5XuxXpp=ZioB=J~Qa-Bm@RXXk+?m+&Q#w zaMVF&B}FdBPy_`T=Jh_BVb{vcY?8_bvshP?eYyUAzrp?f>%VE+AN$w7|9*V^{(3wf z`-5QL+je5y`ew|nyX{=s4m+~ORg>PWg>5QG0#P;q@{6BiJ1A&uNn|r?YDYn1sFIEn z7Ss736urN33pgLrhJ?6p+kV@&`)&Jm>%%*Je5Y%CAZ#~`VVBQt2iYQ6}aXjP`M*y)8 z#M26%=D4}%bo%7jA$XU+u=+ z9X2A^U_-#Y-5`Jn$gVFSuL?vFPy}9+q%=S?W#i@5diu&LSiVjEG62Bd3=p9l_DTQ% zdppa{Z<0mPz#HC(_C5;OnhJynw+*)q?zh|h_UqRTZyRo1>F?0T{dWMswnw7H54gkV zpjmPALcdsxrWxn{cGh#&QMVj!^rQwAZ1z&owf;P%G?r5O5?#LxGYsDxdb_oG_*viI zK_+lu?z{U?c#Z?Ql?9(|__J{UCB6?T*!K_nkq32)S0d?1T)R0OiPnK>$S9RHq7&>@ z;8r0$^bmYIxqo(Z9=&J+JPs$(G0{R?0|5;!TpAC|3!e0{nt+W*G|8`_OHj+ zV~2f*4e>z$Z44Y*Z~%K>Y`Gbn`xy+-&a_et{Fab}JQbd#p0Y25(k0P)_C#Ary2)fU z@+>X%IR<1ZZwN%R)AqF?Aj0i-+cx~QZTH)Dzu^sU8}igp-}v;{VMFmyc%}tGdc}IQ z6QQ==zVW?Z=%|wE`o3F5_m`35F0|p~pfqE@VUV`Z2}v!JvI3rEdf6Ko4Mb7*2|4>5 zy^n?qf|%-$=IGru3uGEZ4eM-U@C;taVaJfWc251$Qjd@(ZCz6gx_)_H%Sb*C(HrHe zOJQWXDE1AeYb9t&h()ZRdURUUOcZ6UQ$DCeXII+P?+xKb@aw+)>#y6s--+-+u+#qa zpx?j0zV^rd079g8r|EXHQwYGyrZ133Ir~$U1&2!L`PD84>=vF{nYa^eGP=$_QD6Q_ zx{?SG+Cj~?h6Vv4ZX42u`-a=?2DfdyZMRz=&uQD10ox@yuoLXWhYJB)VEsGu6_~aQ z-b8%$EEwm>8r;a+#N+>6c6u_qB-LsRwI*X3X{O`}nwV7B9fmXqHWkqv(j4dcSg=^% z{cB>czk5UgPIh{im6SWCMbOs-#>u(_w##2=h0xi6R+F4pKFbB37M0l@!YcC4l<5-F zh0Ho&!lxQ6))Xall2IZp(9Q)}Jk&oDe?{mg=L789286H?0lnHv~Y$U$@)scDrqGL)`kF0+f+@u4vzp0CCeLc4%lyY6BuOXGf>#ZQ~s9 z!)f8N>e*K9dz|-61g%Z9cUw#HjclG+&${+pUNp!G%CtPw#gEt>m-r`W`9vUO9ScJz z9smIDN~Xg7_ua^q=n4_2m~#o+>5D5Y3oo((1{D=R-U~Iut!zA#wVv{@E)XmtAFJUz zU&bcNkVurUnvvx`GbzW@172UqxdQ$(FWn&k;Blrlkbs>*aYw-04Y!_u+wX|5?Q|!A z9dO@wBHH(T->KP&$73g=9r~p#)HhDZCI_T_7bIj=4ifYMD+Gca`3bRYJ)m}(J>q`D z+wG1U0^|v|5mFSN|3f6cF8E?G4wuH|1nrg+3J{?Ixj&O;dTjle41BJmgQ9Juh<@- zhrrqrEI$S6RZsjSm*2-DwL&m&{ zNWyMJOQ$}S$i8BQSSNb(uZ8@3KV=RPH$vH#%ZH>HH>Pi8$G)wO42gV;oIa*re%qfV zv%DSuTR#a^iy@}b(4qEipN?*1`Lf={AT5=jXAqiiS-)v;v{8SdQQEIv7)-Wzh#6@0 zJmWH##Kd`u{+8L`Y4x0S+-oA2*Ta%u2cQu^NSa#eWFk~>g#snvPMJ_Ey{Ee2DMQ^o zI@-f92(JnOb3dhKIvQwMM5*R@?SwY2-n3hPX_7c++~j-;=4BQ7ZZvuz|B^*kO@a85 zOf24Z0J^Cv)Mh>Fe&u`{r66oppgYdU2W?o7hr49!XK@%xBFO&dUUvV{K6*h(jZ94+ zDX}H_D2?$tlzO5W$BoV9k>>$GKzy@$n;(#?d>UmfeN47IQZL*(E<_~JAOoUp&x5SjVb7hXXdF+D z56a;uae=^h2B}3y!?G7$=a5ZJu0$Diro$pfDADl8as@vF2!<{q338}PhrSH7Tt?FR zQci&!Bq@D}{}C{6S>K8T0K8Uopz;tp1?Q@E5=;%Uu{e==RwW1h1OfnFn*k#m@J#oO zJkTdf%yB@1J_IcTErrKof3pfxrEOddsW-loMY0%^*ut$*7&Hig)xFVD-v%-TE-s> zyKg{||8yM}NMrt;fjJ8(<=4>1l-3D_>s2fQnTNp$>dW9&PA{J{BI0dl{>r@7Qiw|X zFSP$q-}1P6Lrx@H#o8_BT7+O0CwA-25LAD7-+`ks(Q@GnL7|?C62UtC?1P(iuBl>E zkt;oq!&O;^h{S=%ly9{=?V7Ik&o+$NCOpEYIkkd}9t~NrLhd}**yG8xh|q~>(iW&V z>@@=ZboG7#d?eQ1M4I*$MR%!LhU!iW8r zmXCzuHPjyhF~{A(WuKqU^i}9A5h8lFl?-TdRrSRntQXIN|0Dig;x5XzW@8Gpe_skdTAY?Ya&D9Fs479n|4js? z8CSf&V;JCt?sKRZ*^jff{DS}QsWuXwmy1g>jSHumRsM0Apw#}{%%tIEgo^BtM^J_5 zAdqyPH24#?52QI|KnWdhMz^6nsn5j-sWPpAspT-UHbB~Uf;hFVnfdgoGkvP6Z`LD{ zW+<*rvivNVMp=JNUS|W4SUw#X5TeH;c^`dV5SN$P0E#~jH`}M2r8-g3Xuo$!M+54h zZmJl2nJhrdFiMN65Oh5@$q4&kjQxbAA9;Fjf(18u5wx4)D-&acfPzl|A_8;%b+NnQ z3M!UcmO_X@7omUV?q{Y00@!eK2_}V@3kzJeVmnCrxhSR?(NfV)ILuStk;H3Z@|jp_ zs-i3HkN)8p{;*h}l9tdJln=TLVN+p2+#K3d1ew@|qa@G66FMZfTdk{$fh*?1p%XK$ zAr&$G+?5Ksp8$Y;S$FTnzzyx7g(EFgR{e(vMvBUcPYC^VGmJS@0%S#MBj}YC?l?5_ z#78(MqLTiLf<6D6Q+H!8<5g{MTh-=Vk5(VBOv0HJI%)xh*Sw-NiUio^+Gvtw@_L+f zz3aZs&v^|fgPAcu)lCgd1W=qK?+SYZers^HpNh=B;-`I9ES}YA>Priv5oK{AT;7ma zB0AOn#x%#UTMlNxw(S+{{sjBj6&yiPQTL3=44ubVXsu~K0OHA7S05n0l{bw<<~&V) zSPFbI98#t#(X#-W`UM|j6(p6O-@>V{@4|9uVOaP?!?F={*b(yr#6w_?;z2h(noMzu zC7$S$VAIM_wm9_g4+{bS+Gqz#Fvn8b{%&_oWpm8oq5#Zc!6$x+ZYh0>DFU-dk>47! z_BC{7Yp&0?G=3c_p!6oDLW4%#5;;*{F{yUQG}Y(g7+;909n3jDSv=H4_n(4rLDJIv z)y1t=dz8f4RDz04sHYSA1itSHcxMV1%ZDeT(ftT2TSOS`df#w`zkvZqa>g}Pf$>4gh^;OuLaqerwPHw>N?78#Qx-j#8H#T|7|gzP z*`LJffL*x0S}+_3y#OzB`!12vW;%Tc{$bIpjZrO%X*5S&H>7rG7=n_22&1Ycv_L1A zYfw1%c@_=rN6pnX*{}n~iNu1qJp@5f{g4fihN!H@*h@X*Dra5h#in5S=!)&ZmZ7@n zxf-LS28lImFO3&Nfc-42>;I*c#|4FAsOkf@MpS^h- ztn{trxZEjd`joGmU`}UuhRYA5F808riZgPP;|I{Kk}kUqkD^kFX;xZzA}QB^WgPiK zzRnV$svjUQQf;WIcLK*~&y*tEU^PkYTYWFA^`s&eLe6paBdw-h{^WrC)d8zlT(76&uMa^1h z$wH$q{3~eK>Nx07`VuE003Uy!9H|l+|8`LNxMl4t3P+JmgnczUL5d9C1?okX4KmJa zXLhTSnveM^<1{Zs+*pb=wr;cDv!NaW%7Np(7Lq>__@Qn?Xdj);K9H1J{x!;g%S$ti~Tmh9)hS>B`p2w2gD;bgo&^ zGqipoOyCRqGL~749WS8d<==KuJn>Kgvzqv}3yxk%(b!i1a;R1&y`%V=w4=HO7JPi6 z6O|>4uIF!vw1aq(ao{yC+VuM0qL^>x;ta)P!jTl^+g=2sX+*?`LhkZ2UEDmIvH~T~gxd@6H@JlQsqgVcpe|Kza!6U6O>P?LLZjlX z!RhFZh>)ezGDLsSyXwsyImQN+CD(=4$;Vt*)9ol>-cb3Jk3TBty{_(iK^LGDLJYhQ zARBjd3t2jIkO@COgebmEwT?JjAOpg33DG!Bl#`iRvm$QIOgi@0B`74Ym26TVB9xWs#sX-g&Gjiv4g~Mza%=R|N!Ru@v{yj2s2NTR55=@W z{29(y)<#Jyh#R*$8x!F)N0au!8jaGya2PYbN@COlqx9DL zr*y00QZ+Xq%P+*J={rgd66u*T^C`?Jq4`I{pyOH#2d9CWtm139a$aU>*CDV-R)5S2 zA7Y!*;r|9v=&tw`c1x0}GUlll*>?x(bT!rM9Ea3KABT*3!QG2C z(3DjZNnWFI4%{5TtlCw;@Dziq5Rlo$px(Gv*l3TuK>RyLRiFMqqrkV>#X~$Ar~%MD zVigGywWOZ>XB6#14-}}aqdL&o@n`l2tu98Uxci2w2rZY)-7Q?y*a?YZQKi*4>Oz() zhxqt9a1nJN;-W)D0BFLOitKV2nNith?-mJ4O$V_9-1$=#m0jN^c_N1o)ZJ<5y0y~J zy>I}$g_ErAiD#3T)6SB^HV_ipcU6{Vj zbYb&3*~d-h&nq`4jVbp>2L{!Ec8UOkz4b1D@3;?gwj-QI%_tVR?GOqG!LtkG!> zGHE42zxu`$B{{9PEiS!P7?ZXkNQVeg`3&8hXZXIK6=*@bUMqs)M+t|#ZisfEN;PI# zEqej1kg&7i@hGw4R15l6oToRaqheU{PqP5Yf?9pyFNLQvJ@{*vKNcn&kkxbmqj`%@ zz#eB_-%^w*m2pm`-T{+Ztv4fgwnMInq1wQtQ(eya?O-bc7X0o}8&H&iDCqtJO#)w< zasQKdkLJkE0v|h(+KV}-Dyk`nTnz+AmcWmCDG90A80ZV@d-IbIo++A6cg8Sm?(i}1 zgu?cOA5jKi<|m%et7QHf+g$Xa1I8h^Br(%#6@Dkn*z8mW`r|>dEql^M04{~|NPL0m z>0`jOV9=N`N0c_#3ZLnG*>08 zJ{7y<#BR4YW@tOZ;hC360;EZSbV|a?#fl?Ymrz0?JJK5jf@zBey2UE44c#148y<^R zL?6h~$0aa`x;xNaAjSTj4Ept9lT1EJZ?1r<@r>@=ze(BNu4_h4i(RN%r#K~a-w#F1 z)!41s_q$JO7x{c_ljdLr!nPtyRc0zQaX@AE4%iTd+)~Zi9kOHnA9^I4F=_I0-vv^k zT}Jp?iJO#`+XY7WBl(Q94Jg|kU^ii9ouD6z`W3A5_czo^J~64Ve%oB=^NJkk(983Gid`!=9KFaELW5MZtl{2TyA zNnuIDgJR&*2-FZS2fSDGW67qbK#@HWuP+0fmP?q(Q^Qx<3ZZj zHr@$I{np>tLg|u+He?N6xnyqIB)Y^^vC9}Pv_2-W3O?2!b)j6&PLj-6Ig{B30k#Ko zq*S8?Ln2W4u}G^)O21iccr>?T{-WLS{X{&UgkX)zF0AmX3;98aeJKyTCaAx;=hRgR z;T(uWjvsGt35E8T4GHM!#oo7 z4PE2rgo=$}vV)hiGAMdE1cY%())<0wUvD#d+J0Yv($cIO#T9??t>7&gA`k-Yut6A+ zo9_eYu3vT$Vf5ysVCH-u@U;{%NIWwk-i1*Y=%_NsH0pa;xmdtiz4haZC!Komr;wJ> z2NLWi&q`>Ho`z81FX7KMVd*BzkO{>k7_IVcl6VxS4JVYzy`JKW-O`0{uNKchcC_E- zRdjVeOXwOy?vKX=pkDW7etw1<>A5;C${?TYGf*yo(IuXALMOH|P$4^kM+`xd!xaq4 zCH+8B99;gpZo6pub5eL4xX)maGB- z?XHR-#K;GRySWB%I8ArYIhjAej3D209Tzblbna*AkHWo~B8{_h(@opqd1WUjL`GiB$!LclP0~I;AebDLeBc1)d+%Y7ft7 ze_G&+l)V08gDAzU$!I0bvI5%EyF1vd!o3=yURd8uRe5&=J+j!n-@jtg=BAXmod{c~ zcVq>{%gQGQErShOoO9kwOwPLDXgQF%pS?7%+;jl&R)J-vm zx4u-{jgZ7uH6u&kpiQi1Vl!QcH1S+M0+vwwP&HSB)dA`Xu+~6;!?S<}iUA{M{4iN2 z`sQxczbMGiL>ZHc8gW@Q=(xm!HRTK*=cxq zSam2f_80P@2Q&&XM*X1r&MDFCN~`9JOg-u4x@T6EwAd8t+pvcXSu7KPV28r1gKkEF zIVGZE>!{+qx^~J5%|{zyWq;5<58L)fY10PFUG<@0+&%&TxOdCIJvDD1X%R{Cf08VN zx(DvgTfn-aQ&x;w-7?@t`BDBa`oe2lRUdsDMC_vtqO3f9$Q=gZ zf|dTA^i{X5Hel**P$C)n5xSB8UbajHMQlKo|AZMp6SU2N+fLz4PKNexoe)hFswKOf z*^@A;#O#lSKMQ@^sb*)rfw&JK`zVw@5fAtg*4aJ;XvqeSVU%&)+GROdQMZGzTI+%4 z4T>ycpB+HC!ijA5Fam&8c_pSR1iV0GPlGZVG0Gmxv~})m*m|mT+?C8e0Myd}B!-1g z=i@nxL&8KXU+7O9*#I5~wHBDvlpX%6;Qug%t4`mrOeMm`OC&N>x3 z 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 z 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 z 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
      =CI{ZKUzYnR72bVxR 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⁢OfiI>yP8v5>!-V>~H8xC>F3Q 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�Lh(AP)O6RW;0oOt)u5wfYGcZSqQs{rwo#0 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 literal 0 HcmV?d00001 diff --git a/data/icon/gopher64_128x128.png b/data/icon/gopher64_128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..4f49fb7c9b2df05d09804ab1e3b0bd90e6c706ab GIT binary patch literal 22290 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 literal 0 HcmV?d00001 diff --git a/data/icon/gopher64_256x256.png b/data/icon/gopher64_256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..4484310cbb99c02c010a5297b36bbe261d2e267d GIT binary patch literal 65598 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 MMdd_lg$x4!55d96L;wH) literal 0 HcmV?d00001 diff --git a/data/icon/gopher64_512x512.png b/data/icon/gopher64_512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1ff358f79a6152895ac72252ad1c1e4036b67d GIT binary patch literal 249083 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

      *SS9b%2c5NQjf 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 OhWEeQ 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 literal 0 HcmV?d00001 diff --git a/data/icon/icon.ico b/data/icon/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6dbf280b2412ac202f7cc9d74f855c2aaea69380 GIT binary patch literal 65368 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

      `I1I@1i`3PVQ;w&h<$k8X*o)w0MQvyu_ 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 FV1j#!h(weak: slint::Weak) { - let task = reqwest::get("https://gopher64.bacoosta.com/servers-gopher64.json"); + let task = reqwest::get("https://cdn.gopher64.com/servers-gopher64.json"); tokio::spawn(async move { let mut local_servers: Vec<(String, String)> = vec![]; From 7109d28223e498d7332516d1821ca689c741139e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 15 Jul 2025 15:28:34 +0200 Subject: [PATCH 0519/1117] update c standard (#507) * update c standard * more * more --- build.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build.rs b/build.rs index 814212f..637c6f9 100644 --- a/build.rs +++ b/build.rs @@ -14,7 +14,7 @@ fn main() { let mut rdp_build = cc::Build::new(); rdp_build .cpp(true) - .std("c++17") + .std("c++23") .flag("-Wno-unused-parameter") .flag("-Wno-missing-field-initializers") .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/command_ring.cpp") @@ -168,6 +168,8 @@ fn main() { .expect("Couldn't write bindings!"); simd_build + .std("c17") + .flag("-D_POSIX_C_SOURCE=200112L") .flag("-DSSE2NEON_SUPPRESS_WARNINGS") .file("src/compat/aarch64.c") .file(std::env::temp_dir().join("bindgen").join("extern.c")) From abc39e74ef85f9de7519ac7dbb998a30a3cbb36c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 15 Jul 2025 20:05:46 +0200 Subject: [PATCH 0520/1117] Remember ROM dir (#508) * Remember ROM dir * more * more * more * more * more --- src/ui/cheats.rs | 16 ++++++++++---- src/ui/config.rs | 2 ++ src/ui/gui.rs | 34 +++++++++++++++++++++++----- src/ui/gui/appwindow.slint | 7 +++--- src/ui/gui/cheat_page.slint | 7 +++--- src/ui/gui/netplay_create.slint | 7 +++--- src/ui/gui/netplay_join.slint | 7 +++--- src/ui/gui/netplay_page.slint | 1 + src/ui/gui/settings_page.slint | 1 + src/ui/netplay.rs | 39 +++++++++++++++++++++++++-------- 10 files changed, 91 insertions(+), 30 deletions(-) diff --git a/src/ui/cheats.rs b/src/ui/cheats.rs index 26a970f..b55c491 100644 --- a/src/ui/cheats.rs +++ b/src/ui/cheats.rs @@ -15,10 +15,18 @@ pub type Cheats = std::collections::BTreeMap 0, }; app.set_resolution(combobox_value); + + if let Some(rom_dir_str) = config.rom_dir.to_str() { + app.set_rom_dir(rom_dir_str.into()); + } } fn update_input_profiles(weak: &slint::Weak, config: &ui::config::Config) { @@ -351,6 +357,7 @@ pub fn run_rom( .unwrap(); let mut device = device::Device::new(); + device.ui.config.rom_dir = file_path.parent().unwrap().to_path_buf(); for i in 0..4 { if gb_paths.rom[i].is_some() && gb_paths.ram[i].is_some() { @@ -390,16 +397,31 @@ pub fn run_rom( vru_window_notifier.try_send(None).unwrap(); } - weak.upgrade_in_event_loop(move |handle| handle.set_game_running(false)) - .unwrap(); + let rom_dir = device.ui.config.rom_dir.clone(); + weak.upgrade_in_event_loop(move |handle| { + if let Some(rom_dir_str) = rom_dir.to_str() { + handle.set_rom_dir(rom_dir_str.into()); + } + handle.set_game_running(false); + }) + .unwrap(); }) .unwrap(); } fn open_rom(app: &AppWindow) { - let select_rom = rfd::AsyncFileDialog::new() - .set_title("Select ROM") - .pick_file(); + let rom_dir = app.get_rom_dir(); + let select_rom = if !rom_dir.is_empty() + && let Ok(exists) = std::fs::exists(&rom_dir) + && exists + { + rfd::AsyncFileDialog::new().set_directory(rom_dir) + } else { + rfd::AsyncFileDialog::new() + } + .set_title("Select ROM") + .add_filter("ROM files", &N64_EXTENSIONS) + .pick_file(); let mut select_gb_rom = [None, None, None, None]; let mut select_gb_ram = [None, None, None, None]; @@ -408,11 +430,13 @@ fn open_rom(app: &AppWindow) { select_gb_rom[i] = Some( rfd::AsyncFileDialog::new() .set_title(format!("GB ROM P{}", i + 1)) + .add_filter("GB ROM files", &["gb", "gbc"]) .pick_file(), ); select_gb_ram[i] = Some( rfd::AsyncFileDialog::new() .set_title(format!("GB RAM P{}", i + 1)) + .add_filter("GB RAM files", &["sav", "ram"]) .pick_file(), ); } diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 3d40a21..7c24360 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -29,7 +29,7 @@ export component AppWindow inherits Window { callback join_session_button_clicked; callback netplay_discord_button_clicked; callback netplay_feedback_button_clicked; - callback cheats_select_rom_clicked; + callback cheats_select_rom_clicked(string); callback cheats_clear_clicked; callback cheat_toggled(string, string, string, bool); in property version <=> AboutData.version; @@ -41,6 +41,7 @@ export component AppWindow inherits Window { in-out property overclock_n64_cpu <=> SettingsData.overclock_n64_cpu; in-out property disable_expansion_pak <=> SettingsData.disable_expansion_pak; in-out property resolution <=> SettingsData.resolution; + in-out property rom_dir <=> SettingsData.rom_dir; in-out property emulate_vru <=> ControllerData.emulate_vru; in-out property controller_enabled <=> ControllerData.controller_enabled; in-out property transferpak <=> ControllerData.transferpak; @@ -102,8 +103,8 @@ export component AppWindow inherits Window { } } if(side-bar.current-item == 3): Cheats { - cheats_select_rom_clicked => { - cheats_select_rom_clicked(); + cheats_select_rom_clicked(rom_dir) => { + cheats_select_rom_clicked(rom_dir); } cheats_clear_clicked => { cheats_clear_clicked(); diff --git a/src/ui/gui/cheat_page.slint b/src/ui/gui/cheat_page.slint index f3cf02e..6918af5 100644 --- a/src/ui/gui/cheat_page.slint +++ b/src/ui/gui/cheat_page.slint @@ -3,6 +3,7 @@ import { ListView, HorizontalBox, VerticalBox, Button, GroupBox, CheckBox } from "std-widgets.slint"; import { Page } from "page.slint"; +import { SettingsData } from "settings_page.slint"; export global CheatsData { in-out property cheat_game_name; @@ -12,7 +13,7 @@ export global CheatsData { export component Cheats inherits Page { title: @tr("Cheats"); - callback cheats_select_rom_clicked; + callback cheats_select_rom_clicked(string); callback cheats_clear_clicked; callback cheat_toggled(string, string, string, bool); @@ -23,13 +24,13 @@ export component Cheats inherits Page { if CheatsData.cheat_game_name == "": Button { text: @tr("Select ROM"); clicked => { - cheats_select_rom_clicked(); + cheats_select_rom_clicked(SettingsData.rom_dir); } } if CheatsData.cheat_game_name != "": Button { text: CheatsData.cheat_game_name; clicked => { - cheats_select_rom_clicked(); + cheats_select_rom_clicked(SettingsData.rom_dir); } } Rectangle { diff --git a/src/ui/gui/netplay_create.slint b/src/ui/gui/netplay_create.slint index ebee874..7bea0a2 100644 --- a/src/ui/gui/netplay_create.slint +++ b/src/ui/gui/netplay_create.slint @@ -12,8 +12,9 @@ export component NetplayCreate inherits Window { in-out property pending_session <=> NetplayData.pending_session; in-out property rom_path <=> NetplayData.rom_path; in-out property peer_addr <=> NetplayData.peer_addr; + in-out property rom_dir <=> NetplayData.rom_dir; callback get_ping(string); - callback select_rom; + callback select_rom(string); callback create_session(string, string, string, string, string, string, string); VerticalBox { @@ -83,13 +84,13 @@ export component NetplayCreate inherits Window { if NetplayData.game_name == "": Button { text: @tr("Select ROM"); clicked => { - select_rom(); + select_rom(NetplayData.rom_dir); } } if NetplayData.game_name != "": Button { text: NetplayData.game_name; clicked => { - select_rom(); + select_rom(NetplayData.rom_dir); } } diff --git a/src/ui/gui/netplay_join.slint b/src/ui/gui/netplay_join.slint index 507f1c1..c372416 100644 --- a/src/ui/gui/netplay_join.slint +++ b/src/ui/gui/netplay_join.slint @@ -15,9 +15,10 @@ export component NetplayJoin inherits Window { in-out property peer_addr <=> NetplayData.peer_addr; in-out property pending_session <=> NetplayData.pending_session; in-out property rom_path <=> NetplayData.rom_path; + in-out property rom_dir <=> NetplayData.rom_dir; callback get_ping(string); callback refresh_session(string); - callback select_rom; + callback select_rom(string); callback join_session(string, string, string, int); VerticalBox { @@ -104,13 +105,13 @@ export component NetplayJoin inherits Window { if NetplayData.game_name == "": Button { text: @tr("Select ROM"); clicked => { - select_rom(); + select_rom(NetplayData.rom_dir); } } if NetplayData.game_name != "": Button { text: NetplayData.game_name; clicked => { - select_rom(); + select_rom(NetplayData.rom_dir); } } diff --git a/src/ui/gui/netplay_page.slint b/src/ui/gui/netplay_page.slint index 6467977..32ae732 100644 --- a/src/ui/gui/netplay_page.slint +++ b/src/ui/gui/netplay_page.slint @@ -20,6 +20,7 @@ export global NetplayData { in-out property <[[StandardListViewItem]]> sessions; in-out property <[int]> ports; in-out property current_session: -1; + in-out property rom_dir; } export component Netplay inherits Page { diff --git a/src/ui/gui/settings_page.slint b/src/ui/gui/settings_page.slint index 49b091b..c798244 100644 --- a/src/ui/gui/settings_page.slint +++ b/src/ui/gui/settings_page.slint @@ -12,6 +12,7 @@ export global SettingsData { in-out property overclock_n64_cpu; in-out property disable_expansion_pak; in-out property resolution; + in-out property rom_dir; } export component Settings inherits Page { diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index c9fe34d..0b67bc7 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -173,10 +173,21 @@ fn populate_server_names(weak: slin }); } -fn select_rom(weak: slint::Weak) { - let select_rom = rfd::AsyncFileDialog::new() - .set_title("Select ROM") - .pick_file(); +fn select_rom( + weak: slint::Weak, + rom_dir: slint::SharedString, +) { + let select_rom = if !rom_dir.is_empty() + && let Ok(exists) = std::fs::exists(&rom_dir) + && exists + { + rfd::AsyncFileDialog::new().set_directory(rom_dir) + } else { + rfd::AsyncFileDialog::new() + } + .set_title("Select ROM") + .add_filter("ROM files", &ui::gui::N64_EXTENSIONS) + .pick_file(); tokio::spawn(async move { if let Some(file) = select_rom.await { if let Some(rom_contents) = device::get_rom_contents(file.path()) { @@ -252,6 +263,7 @@ fn update_ping( pub fn setup_create_window( create_window: &NetplayCreate, game_settings: GameSettings, + rom_dir: slint::SharedString, weak_app: slint::Weak, ) { let (netplay_read_sender, netplay_read_receiver): ( @@ -264,14 +276,15 @@ pub fn setup_create_window( tokio::sync::broadcast::Receiver>, ) = tokio::sync::broadcast::channel(5); + create_window.set_rom_dir(rom_dir); populate_server_names(create_window.as_weak()); let weak = create_window.as_weak(); create_window.on_get_ping(move |server_url| { update_ping(weak.clone(), server_url.to_string()); }); let weak = create_window.as_weak(); - create_window.on_select_rom(move || { - select_rom(weak.clone()); + create_window.on_select_rom(move |rom_dir| { + select_rom(weak.clone(), rom_dir); }); let weak = create_window.as_weak(); @@ -937,6 +950,7 @@ fn setup_wait_window( pub fn setup_join_window( join_window: &NetplayJoin, fullscreen: bool, + rom_dir: slint::SharedString, weak_app: slint::Weak, ) { let (netplay_read_sender, netplay_read_receiver): ( @@ -949,6 +963,7 @@ pub fn setup_join_window( tokio::sync::broadcast::Receiver>, ) = tokio::sync::broadcast::channel(5); + join_window.set_rom_dir(rom_dir); populate_server_names(join_window.as_weak()); let weak = join_window.as_weak(); join_window.on_get_ping(move |server_url| { @@ -959,8 +974,8 @@ pub fn setup_join_window( .unwrap(); }); let weak = join_window.as_weak(); - join_window.on_select_rom(move || { - select_rom(weak.clone()); + join_window.on_select_rom(move |rom_dir| { + select_rom(weak.clone(), rom_dir); }); let sender = netplay_write_sender.clone(); @@ -1019,6 +1034,7 @@ pub fn netplay_window(app: &AppWindow, controller_paths: &[Option]) { disable_expansion_pak: handle.get_disable_expansion_pak(), cheats: std::collections::HashMap::new(), // not used here }, + handle.get_rom_dir(), weak_app, ); }) @@ -1035,7 +1051,12 @@ pub fn netplay_window(app: &AppWindow, controller_paths: &[Option]) { .upgrade_in_event_loop(move |handle| { let join_window = NetplayJoin::new().unwrap(); save_settings(&handle, &controller_paths); - setup_join_window(&join_window, handle.get_fullscreen(), weak_app); + setup_join_window( + &join_window, + handle.get_fullscreen(), + handle.get_rom_dir(), + weak_app, + ); }) .unwrap(); }); From 3e95059ec79aad4c9b630b531035c9face25bba3 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 15 Jul 2025 20:43:31 +0200 Subject: [PATCH 0521/1117] add pause hotkey (#509) --- parallel-rdp/interface.cpp | 8 ++++++++ parallel-rdp/interface.hpp | 1 + src/ui/video.rs | 7 ++++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index dadc6ab..cef0062 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -151,6 +151,7 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { if (event->type == SDL_EVENT_WINDOW_CLOSE_REQUESTED) { + callback.paused = false; callback.emu_running = false; } else if (event->type == SDL_EVENT_WINDOW_RESIZED && callback.emu_running) @@ -174,6 +175,12 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) callback.enable_speedlimiter = !callback.enable_speedlimiter; } break; + case SDL_SCANCODE_P: + if (event->key.mod & SDL_KMOD_ALT) + { + callback.paused = !callback.paused; + } + break; case SDL_SCANCODE_ESCAPE: if (gfx_info.fullscreen) callback.emu_running = false; @@ -281,6 +288,7 @@ void rdp_init(void *_window, GFX_INFO _gfx_info) callback.emu_running = true; callback.enable_speedlimiter = true; + callback.paused = false; crop_letterbox = false; } diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index cba7e75..b26933a 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -33,6 +33,7 @@ extern "C" bool enable_speedlimiter; bool lower_volume; bool raise_volume; + bool paused; } CALL_BACK; void rdp_init(void *_window, GFX_INFO _gfx_info); diff --git a/src/ui/video.rs b/src/ui/video.rs index da01f01..ef2a8fc 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -124,7 +124,7 @@ pub fn load_state(device: &mut device::Device, rdp_state: *const u8) { pub fn check_callback(device: &mut device::Device) -> bool { let mut speed_limiter_toggled = false; - let callback = unsafe { rdp_check_callback() }; + let mut callback = unsafe { rdp_check_callback() }; device.cpu.running = callback.emu_running; if device.netplay.is_none() { if callback.save_state { @@ -136,6 +136,11 @@ pub fn check_callback(device: &mut device::Device) -> bool { speed_limiter_toggled = true; device.vi.enable_speed_limiter = callback.enable_speedlimiter; } + while callback.paused { + std::thread::sleep(std::time::Duration::from_secs_f64(1.0 / 60.0)); + unsafe { sdl3_sys::events::SDL_PumpEvents() }; + callback = unsafe { rdp_check_callback() }; + } } if callback.lower_volume { From e4dd5c2dee060da546f554be1c37d62269fdf2cf Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 16 Jul 2025 12:13:12 +0200 Subject: [PATCH 0522/1117] Fix crash in wrestlemania (#510) --- src/device/cart/sram.rs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/device/cart/sram.rs b/src/device/cart/sram.rs index a58986b..11ff7e0 100644 --- a/src/device/cart/sram.rs +++ b/src/device/cart/sram.rs @@ -151,7 +151,14 @@ fn dma_read_sram(device: &mut device::Device, mut cart_addr: u32, mut dram_addr: format_sram(device); while i < dram_addr + length { - device.ui.storage.saves.sram.data[j as usize] = *device + *device + .ui + .storage + .saves + .sram + .data + .get_mut(j as usize) + .unwrap_or(&mut 0) = *device .rdram .mem .get(i as usize ^ device.byte_swap) @@ -217,7 +224,14 @@ fn dma_write_sram( .rdram .mem .get_mut(i as usize ^ device.byte_swap) - .unwrap_or(&mut 0) = device.ui.storage.saves.sram.data[j as usize]; + .unwrap_or(&mut 0) = *device + .ui + .storage + .saves + .sram + .data + .get(j as usize) + .unwrap_or(&0); i += 1; j += 1; } From 022190384a291c1c04348ff4efa3ad5887d57209 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 16 Jul 2025 15:42:54 +0200 Subject: [PATCH 0523/1117] Add support for custom netplay server url (#511) * Add support for custom netplay server url * more * more * more * more * more * more * more * more * more * more --- src/ui/gui/appwindow.slint | 1 + src/ui/gui/netplay_create.slint | 16 ++++++++-- src/ui/gui/netplay_join.slint | 14 +++++++-- src/ui/gui/netplay_page.slint | 22 ++++++++++++- src/ui/netplay.rs | 56 +++++++++++++++++++++++++++++++-- 5 files changed, 102 insertions(+), 7 deletions(-) diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 7c24360..6718b99 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -14,6 +14,7 @@ export { VruDialog } from "vru_dialog.slint"; export { NetplayCreate } from "netplay_create.slint"; export { NetplayJoin } from "netplay_join.slint"; export { NetplayWait } from "netplay_wait.slint"; +export { CustomNetplayServer } from "netplay_page.slint"; export component AppWindow inherits Window { callback wiki_button_clicked; diff --git a/src/ui/gui/netplay_create.slint b/src/ui/gui/netplay_create.slint index 7bea0a2..7fa4a64 100644 --- a/src/ui/gui/netplay_create.slint +++ b/src/ui/gui/netplay_create.slint @@ -5,6 +5,7 @@ export component NetplayCreate inherits Window { title: @tr("Netplay: Create Session"); in-out property server_names <=> NetplayData.server_names; in-out property server_urls <=> NetplayData.server_urls; + in-out property custom_server_url <=> NetplayData.custom_server_url; in-out property ping <=> NetplayData.ping; in-out property game_name <=> NetplayData.game_name; in-out property game_hash <=> NetplayData.game_hash; @@ -14,6 +15,7 @@ export component NetplayCreate inherits Window { in-out property peer_addr <=> NetplayData.peer_addr; in-out property rom_dir <=> NetplayData.rom_dir; callback get_ping(string); + callback get_custom_url(); callback select_rom(string); callback create_session(string, string, string, string, string, string, string); @@ -69,7 +71,11 @@ export component NetplayCreate inherits Window { model: NetplayData.server_names; selected => { if (self.current-index >= 0) { - get_ping(NetplayData.server_urls[self.current-index]); + if (self.current-value == "Custom") { + get_custom_url(); + } else { + get_ping(NetplayData.server_urls[self.current-index]); + } } } } @@ -102,12 +108,18 @@ export component NetplayCreate inherits Window { Rectangle { } Button { + property server_url; text: @tr("Create Session"); enabled: NetplayData.session_name != "" && NetplayData.player_name != "" && NetplayData.game_name != "" && !NetplayData.pending_session; clicked => { NetplayData.pending_session = true; + if (server.current-value == "Custom") { + server_url = "ws://" + NetplayData.custom_server_url; + } else { + server_url = NetplayData.server_urls[server.current-index]; + } create_session( - NetplayData.server_urls[server.current-index], + server_url, NetplayData.session_name, NetplayData.player_name, NetplayData.game_name, diff --git a/src/ui/gui/netplay_join.slint b/src/ui/gui/netplay_join.slint index c372416..d7fd8a4 100644 --- a/src/ui/gui/netplay_join.slint +++ b/src/ui/gui/netplay_join.slint @@ -5,6 +5,7 @@ export component NetplayJoin inherits Window { title: @tr("Netplay: Join Session"); in-out property server_names <=> NetplayData.server_names; in-out property server_urls <=> NetplayData.server_urls; + in-out property custom_server_url <=> NetplayData.custom_server_url; in-out property ping <=> NetplayData.ping; in-out property sessions <=> NetplayData.sessions; in-out property current_session <=> NetplayData.current_session; @@ -17,6 +18,7 @@ export component NetplayJoin inherits Window { in-out property rom_path <=> NetplayData.rom_path; in-out property rom_dir <=> NetplayData.rom_dir; callback get_ping(string); + callback get_custom_url(); callback refresh_session(string); callback select_rom(string); callback join_session(string, string, string, int); @@ -46,7 +48,11 @@ export component NetplayJoin inherits Window { model: NetplayData.server_names; selected => { if (self.current-index >= 0) { - get_ping(NetplayData.server_urls[self.current-index]); + if (self.current-value == "Custom") { + get_custom_url(); + } else { + get_ping(NetplayData.server_urls[self.current-index]); + } } } } @@ -89,7 +95,11 @@ export component NetplayJoin inherits Window { Button { text: @tr("Refresh Session List"); clicked => { - refresh_session(NetplayData.server_urls[server.current-index]); + if (server.current-value == "Custom") { + refresh_session("ws://" + NetplayData.custom_server_url); + } else { + refresh_session(NetplayData.server_urls[server.current-index]); + } } } } diff --git a/src/ui/gui/netplay_page.slint b/src/ui/gui/netplay_page.slint index 32ae732..b742a25 100644 --- a/src/ui/gui/netplay_page.slint +++ b/src/ui/gui/netplay_page.slint @@ -1,7 +1,7 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { VerticalBox, HorizontalBox, Button } from "std-widgets.slint"; +import { StandardButton, VerticalBox, HorizontalBox, Button, LineEdit } from "std-widgets.slint"; import { Page } from "page.slint"; export global NetplayData { @@ -21,6 +21,7 @@ export global NetplayData { in-out property <[int]> ports; in-out property current_session: -1; in-out property rom_dir; + in-out property custom_server_url; } export component Netplay inherits Page { @@ -74,3 +75,22 @@ export component Netplay inherits Page { } } } + +export component CustomNetplayServer inherits Dialog { + in-out property custom_server_url <=> NetplayData.custom_server_url; + title: @tr("Custom Netplay Server"); + preferred-width: 400px; + callback ok_clicked(string); + server_url := LineEdit { + text: NetplayData.custom_server_url; + placeholder-text: "example.com:45000"; + } + + StandardButton { + kind: ok; + clicked => { + NetplayData.custom_server_url = server_url.text; + ok_clicked(NetplayData.custom_server_url); + } + } +} diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 0b67bc7..d9ad9f9 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -1,8 +1,8 @@ use crate::device; use crate::ui; use crate::ui::gui::{ - AppWindow, ErrorDialog, GameSettings, GbPaths, NetplayCreate, NetplayDevice, NetplayJoin, - NetplayWait, VruChannel, run_rom, save_settings, + AppWindow, CustomNetplayServer, ErrorDialog, GameSettings, GbPaths, NetplayCreate, + NetplayDevice, NetplayJoin, NetplayWait, VruChannel, run_rom, save_settings, }; use futures::{SinkExt, StreamExt}; use sha2::{Digest, Sha256}; @@ -56,6 +56,8 @@ trait NetplayPages { fn refresh_sessions(&self, _server: slint::SharedString) { // Default implementation does nothing } + fn invoke_get_ping(&self, server_url: slint::SharedString); + fn set_custom_server_url(&self, server_url: slint::SharedString); } impl NetplayPages for NetplayCreate { @@ -83,6 +85,12 @@ impl NetplayPages for NetplayCreate { fn set_peer_addr(&self, peer_addr: slint::SharedString) { self.set_peer_addr(peer_addr); } + fn invoke_get_ping(&self, server_url: slint::SharedString) { + self.invoke_get_ping(server_url); + } + fn set_custom_server_url(&self, server_url: slint::SharedString) { + self.set_custom_server_url(server_url); + } } impl NetplayPages for NetplayJoin { @@ -113,6 +121,12 @@ impl NetplayPages for NetplayJoin { fn set_peer_addr(&self, peer_addr: slint::SharedString) { self.set_peer_addr(peer_addr); } + fn invoke_get_ping(&self, server_url: slint::SharedString) { + self.invoke_get_ping(server_url); + } + fn set_custom_server_url(&self, server_url: slint::SharedString) { + self.set_custom_server_url(server_url); + } } fn populate_server_names(weak: slint::Weak) { @@ -159,6 +173,7 @@ fn populate_server_names(weak: slin server_names.push(server.0.into()); server_urls.push(server.1.into()); } + server_names.push("Custom".into()); update_ping(weak2, server_urls.row_data(0).unwrap().into()); handle.refresh_sessions(server_urls.row_data(0).unwrap()); let server_names_model: std::rc::Rc> = @@ -260,6 +275,25 @@ fn update_ping( }); } +fn show_custom_url_dialog( + weak: slint::Weak, + server_url: slint::SharedString, +) { + let url_dialog = CustomNetplayServer::new().unwrap(); + url_dialog.set_custom_server_url(server_url); + let weak_dialog = url_dialog.as_weak(); + url_dialog.on_ok_clicked(move |server_url| { + weak.upgrade_in_event_loop(move |handle| { + handle.set_custom_server_url(server_url.clone()); + let prefix: slint::SharedString = "ws://".into(); + handle.invoke_get_ping(prefix + &server_url); + }) + .unwrap(); + weak_dialog.unwrap().window().hide().unwrap(); + }); + url_dialog.show().unwrap(); +} + pub fn setup_create_window( create_window: &NetplayCreate, game_settings: GameSettings, @@ -283,6 +317,15 @@ pub fn setup_create_window( update_ping(weak.clone(), server_url.to_string()); }); let weak = create_window.as_weak(); + create_window.on_get_custom_url(move || { + let weak2 = weak.clone(); + weak.upgrade_in_event_loop(move |handle| { + handle.set_ping("Ping: Unknown".into()); + show_custom_url_dialog(weak2, handle.get_custom_server_url()); + }) + .unwrap(); + }); + let weak = create_window.as_weak(); create_window.on_select_rom(move |rom_dir| { select_rom(weak.clone(), rom_dir); }); @@ -974,6 +1017,15 @@ pub fn setup_join_window( .unwrap(); }); let weak = join_window.as_weak(); + join_window.on_get_custom_url(move || { + let weak2 = weak.clone(); + weak.upgrade_in_event_loop(move |handle| { + handle.set_ping("Ping: Unknown".into()); + show_custom_url_dialog(weak2, handle.get_custom_server_url()); + }) + .unwrap(); + }); + let weak = join_window.as_weak(); join_window.on_select_rom(move |rom_dir| { select_rom(weak.clone(), rom_dir); }); From ac09be4202658c3ab0f620e7abf180e8ac2dfe43 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 17 Jul 2025 15:22:21 +0200 Subject: [PATCH 0524/1117] Increase axis movement requirement when configuring controller (#514) --- src/ui/input.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/ui/input.rs b/src/ui/input.rs index a7b2b7b..fdcd9d6 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -611,7 +611,9 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_GAMEPAD_AXIS_MOTION) { let axis_value = unsafe { event.gaxis.value }; let axis = unsafe { event.gaxis.axis }; - if !open_controllers.is_empty() && axis_value.saturating_abs() > i16::MAX / 2 { + if !open_controllers.is_empty() + && axis_value.saturating_abs() > (i16::MAX as i32 * 3 / 4) as i16 + { let result = ui::config::InputControllerAxis { enabled: true, id: axis as i32, @@ -647,7 +649,9 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { { let axis_value = unsafe { event.jaxis.value }; let axis = unsafe { event.jaxis.axis }; - if !open_joysticks.is_empty() && axis_value.saturating_abs() > i16::MAX / 2 { + if !open_joysticks.is_empty() + && axis_value.saturating_abs() > (i16::MAX as i32 * 3 / 4) as i16 + { let result = ui::config::InputControllerAxis { enabled: true, id: axis as i32, From d7f1c8415a6142acc60634d04bffc65dfbad922e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 19 Jul 2025 15:51:23 +0200 Subject: [PATCH 0525/1117] disable cargo dependabot --- .github/dependabot.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 13b4ef5..75774d2 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -4,7 +4,7 @@ updates: directory: "/" schedule: interval: "daily" - - package-ecosystem: "cargo" - directory: "/" - schedule: - interval: "daily" +# - package-ecosystem: "cargo" +# directory: "/" +# schedule: +# interval: "daily" From fff376db5e2d0cf041d1b31f10664c33e69b2728 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 19 Jul 2025 15:51:57 +0200 Subject: [PATCH 0526/1117] cargo update --- Cargo.lock | 121 ++++++++++++++++++++++++----------------------------- 1 file changed, 55 insertions(+), 66 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4c663e5..c06850c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "ab_glyph" -version = "0.2.30" +version = "0.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0f4f6fbdc5ee39f2ede9f5f3ec79477271a6d6a2baff22310d51736bda6cea" +checksum = "e074464580a518d16a7126262fffaaa47af89d4099d4cb403f8ed938ba12ee7d" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -232,6 +232,9 @@ dependencies = [ "serde_repr", "tokio", "url", + "wayland-backend", + "wayland-client", + "wayland-protocols", "zbus", ] @@ -286,7 +289,7 @@ dependencies = [ "futures-lite", "parking", "polling", - "rustix 1.0.7", + "rustix 1.0.8", "slab", "tracing", "windows-sys 0.59.0", @@ -318,7 +321,7 @@ dependencies = [ "cfg-if", "event-listener", "futures-lite", - "rustix 1.0.7", + "rustix 1.0.8", "tracing", ] @@ -345,7 +348,7 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 1.0.7", + "rustix 1.0.8", "signal-hook-registry", "slab", "windows-sys 0.59.0", @@ -677,9 +680,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.29" +version = "1.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362" +checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" dependencies = [ "jobserver", "libc", @@ -809,9 +812,9 @@ checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" [[package]] name = "clipboard-win" -version = "5.4.0" +version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" +checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4" dependencies = [ "error-code", ] @@ -1040,9 +1043,9 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] @@ -1237,18 +1240,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" -[[package]] -name = "dispatch2" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a0d569e003ff27784e0e14e4a594048698e0c0f0b66cabcb51511be55a7caa0" -dependencies = [ - "bitflags 2.9.1", - "block2 0.6.1", - "libc", - "objc2 0.6.1", -] - [[package]] name = "dispatch2" version = "0.3.0" @@ -1256,6 +1247,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ "bitflags 2.9.1", + "block2 0.6.1", + "libc", "objc2 0.6.1", ] @@ -1888,7 +1881,7 @@ dependencies = [ "bitflags 2.9.1", "cfg_aliases", "cgl", - "dispatch2 0.3.0", + "dispatch2", "glutin_egl_sys", "glutin_glx_sys", "glutin_wgl_sys", @@ -2925,9 +2918,9 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1580801010e535496706ba011c15f8532df6b42297d2e471fec38ceadd8c0638" +checksum = "4488594b9328dee448adb906d8b126d9b7deb7cf5c22161ee591610bb1be83c0" dependencies = [ "bitflags 2.9.1", "libc", @@ -3081,12 +3074,9 @@ dependencies = [ [[package]] name = "lzma-rust2" -version = "0.2.2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e004a649120b31c06728257815826e075f638502ba49a9677c3c112e324e044d" -dependencies = [ - "byteorder", -] +checksum = "ecaa2bc9f1bd284be221d0770bbc9b92a438fdf422ba45211f6c6bf157ebb932" [[package]] name = "maybe-rayon" @@ -3106,9 +3096,9 @@ checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "memmap2" -version = "0.9.5" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" +checksum = "483758ad303d734cec05e5c12b41d7e93e6a6390c5e9dae6bdeb7c1259012d28" dependencies = [ "libc", ] @@ -3458,7 +3448,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" dependencies = [ "bitflags 2.9.1", - "dispatch2 0.3.0", + "dispatch2", "objc2 0.6.1", ] @@ -3469,7 +3459,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" dependencies = [ "bitflags 2.9.1", - "dispatch2 0.3.0", + "dispatch2", "objc2 0.6.1", "objc2-core-foundation", "objc2-io-surface", @@ -3878,17 +3868,16 @@ dependencies = [ [[package]] name = "polling" -version = "3.8.0" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b53a684391ad002dd6a596ceb6c74fd004fdce75f4be2e3f615068abbea5fd50" +checksum = "8ee9b2fa7a4517d2c91ff5bc6c297a427a96749d15f98fcdbb22c05571a4d4b7" dependencies = [ "cfg-if", "concurrent-queue", "hermit-abi 0.5.2", "pin-project-lite", - "rustix 1.0.7", - "tracing", - "windows-sys 0.59.0", + "rustix 1.0.8", + "windows-sys 0.60.2", ] [[package]] @@ -4379,13 +4368,13 @@ dependencies = [ [[package]] name = "rfd" -version = "0.15.3" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80c844748fdc82aae252ee4594a89b6e7ebef1063de7951545564cbc4e57075d" +checksum = "ef2bee61e6cffa4635c72d7d81a84294e28f0930db0ddcb0f66d10244674ebed" dependencies = [ "ashpd", "block2 0.6.1", - "dispatch2 0.2.0", + "dispatch2", "js-sys", "log", "objc2 0.6.1", @@ -4403,9 +4392,9 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.51" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a457e416a0f90d246a4c3288bd7a25b2304ca727f253f95be383dd17af56be8f" +checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" dependencies = [ "bytemuck", ] @@ -4490,15 +4479,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ "bitflags 2.9.1", "errno", "libc", "linux-raw-sys 0.9.4", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -4608,15 +4597,15 @@ dependencies = [ [[package]] name = "sdl3-src" -version = "3.2.16" +version = "3.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5b5d192485408fa251477ea1dfb4778d864efaec72f730ce3a753deaffb27bb" +checksum = "c9b802554a6d768330a2c9cd30849811676da53bda1b5bb78dfd3a402ca6b55f" [[package]] name = "sdl3-sys" -version = "0.5.2+SDL3-3.2.16" +version = "0.5.3+SDL3-3.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0a31799d7cbd36f2b187c32a56975fbdd371c200a91b01d4ed0faf0012bcf9c" +checksum = "573534f614334b7bb6f7bceae86448764fcdcafe92d75482092810cc664ece8c" dependencies = [ "cmake", "rpkg-config", @@ -4660,9 +4649,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" dependencies = [ "itoa", "memchr", @@ -4704,9 +4693,9 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.16.0" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5375315e26d60d20f13d74c5bb0b6b627d334b68aa63f0d6d33d828af499d8d2" +checksum = "5c12bd2c6a1f413f516836e80c1f541116f9b17ccbab2540f655ceeb58f5592c" dependencies = [ "byteorder", "crc32fast", @@ -5161,7 +5150,7 @@ dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", - "rustix 1.0.7", + "rustix 1.0.8", "windows-sys 0.59.0", ] @@ -5992,9 +5981,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8782dd5a41a24eed3a4f40b606249b3e236ca61adf1f25ea4d45c73de122b502" +checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" dependencies = [ "rustls-pki-types", ] @@ -6497,9 +6486,9 @@ dependencies = [ [[package]] name = "winresource" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a179ac8923651ff1d15efbee760b4dd3679fd85fa5a8b2bb1109b7248f80e30f" +checksum = "edcacf11b6f48dd21b9ba002f991bdd5de29b2da8cc2800412f4b80f677e4957" dependencies = [ "toml", "version_check", @@ -6578,7 +6567,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af3a19837351dc82ba89f8a125e22a3c475f05aba604acc023d62b2739ae2909" dependencies = [ "libc", - "rustix 1.0.7", + "rustix 1.0.8", ] [[package]] @@ -6655,9 +6644,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.8.0" +version = "5.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597f45e98bc7e6f0988276012797855613cd8269e23b5be62cc4e5d28b7e515d" +checksum = "4bb4f9a464286d42851d18a605f7193b8febaf5b0919d71c6399b7b26e5b0aad" dependencies = [ "async-broadcast", "async-executor", @@ -6689,9 +6678,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.8.0" +version = "5.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c8e4e14dcdd9d97a98b189cd1220f30e8394ad271e8c987da84f73693862c2" +checksum = "ef9859f68ee0c4ee2e8cde84737c78e3f4c54f946f2a38645d0d4c7a95327659" dependencies = [ "proc-macro-crate", "proc-macro2", From d4e8933352f26559323be565ffb654f70fc954a7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 19 Jul 2025 16:31:58 +0200 Subject: [PATCH 0527/1117] Use rust-lld on Windows (#518) --- .cargo/config.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 17b0dea..a8366c3 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -2,7 +2,7 @@ rustflags = ["-C", "linker=clang", "-C", "link-arg=-fuse-ld=lld"] [target.'cfg(target_os = "windows")'] -rustflags = ["-C", "linker=lld-link", "-C", "link-arg=-fuse-ld=lld-link"] +linker = "rust-lld" [target.'cfg(target_arch = "x86_64")'] rustflags = ["-C", "target-cpu=x86-64-v3"] From 7361a9bd5ce787e30cb2e31257a253100dc948b8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 19 Jul 2025 16:45:27 +0200 Subject: [PATCH 0528/1117] remove unneeded flag (#519) --- .cargo/config.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index a8366c3..40c9ac4 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,5 +1,5 @@ [target.'cfg(target_os = "linux")'] -rustflags = ["-C", "linker=clang", "-C", "link-arg=-fuse-ld=lld"] +rustflags = ["-C", "link-arg=-fuse-ld=lld"] [target.'cfg(target_os = "windows")'] linker = "rust-lld" From c5da2a795fee925edf978c2e706c7ae4d1719b9f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 19 Jul 2025 18:30:17 +0200 Subject: [PATCH 0529/1117] use specific llvm version (#520) * use specific llvm version * more * more * more * more --- .github/workflows/build.yml | 17 ++++++++++++++--- .github/workflows/lint.yml | 6 ++++-- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 56f85f1..a1a7955 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,7 +10,6 @@ on: env: CARGO_TERM_COLOR: always - LLVM_VERSION: "20.1" jobs: build-linux: @@ -22,9 +21,11 @@ jobs: - os: ubuntu-24.04 target: x86_64-unknown-linux-gnu arch: linux-x86_64 + llvm: X64 - os: ubuntu-24.04-arm target: aarch64-unknown-linux-gnu arch: linux-aarch64 + llvm: ARM64 steps: - uses: actions/checkout@v4 with: @@ -33,6 +34,8 @@ jobs: with: target: ${{ matrix.target }} rustflags: "" + - name: Set LLVM_VERSION + run: echo "LLVM_VERSION=$(rustc --version --verbose | grep "LLVM version" | cut -d':' -f2 | xargs)" >> $GITHUB_ENV - name: Install SDL Dependencies # https://wiki.libsdl.org/SDL3/README-linux#build-dependencies uses: awalsh128/cache-apt-pkgs-action@v1 @@ -48,7 +51,8 @@ jobs: - name: Install LLVM and Clang uses: KyleMayes/install-llvm-action@v2 with: - version: "${{ env.LLVM_VERSION }}" + version: ${{ env.LLVM_VERSION }} + force-url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-Linux-${{ matrix.llvm }}.tar.xz - name: Build run: | cargo build --release -v --target=${{ matrix.target }} @@ -69,9 +73,11 @@ jobs: - os: windows-2025 target: x86_64-pc-windows-msvc arch: windows-x86_64 + llvm: win64 #- os: windows-11-arm # target: aarch64-pc-windows-msvc # arch: windows-aarch64 + # llvm: woa64 steps: - uses: actions/checkout@v4 with: @@ -80,10 +86,15 @@ jobs: with: target: ${{ matrix.target }} rustflags: "" + - name: Set LLVM_VERSION + run: | + $llvm_version = rustc --version --verbose | Select-String "LLVM version" | ForEach-Object { $_.Line.Split(":")[1].Trim() } + echo "LLVM_VERSION=$llvm_version" >> $env:GITHUB_ENV - name: Install LLVM and Clang uses: KyleMayes/install-llvm-action@v2 with: - version: "${{ env.LLVM_VERSION }}" + version: ${{ env.LLVM_VERSION }} + force-url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-${{ matrix.llvm }}.exe - name: Build run: | cargo build --release -v --target=${{ matrix.target }} diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 50bc48f..c873dc9 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -11,7 +11,6 @@ permissions: env: CARGO_TERM_COLOR: always - LLVM_VERSION: "20.1" jobs: lint-linux: @@ -23,6 +22,8 @@ jobs: - uses: actions-rust-lang/setup-rust-toolchain@v1 with: components: clippy, rustfmt + - name: Set LLVM_VERSION + run: echo "LLVM_VERSION=$(rustc --version --verbose | grep "LLVM version" | cut -d':' -f2 | xargs)" >> $GITHUB_ENV - name: Install SDL Dependencies # https://wiki.libsdl.org/SDL3/README-linux#build-dependencies uses: awalsh128/cache-apt-pkgs-action@v1 @@ -38,7 +39,8 @@ jobs: - name: Install LLVM and Clang uses: KyleMayes/install-llvm-action@v2 with: - version: "${{ env.LLVM_VERSION }}" + version: ${{ env.LLVM_VERSION }} + force-url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-Linux-X64.tar.xz - name: Rustfmt Check uses: actions-rust-lang/rustfmt@v1 - name: Lint From 41b1fd05becf4bae063aad9f181b377fabc65008 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 20 Jul 2025 07:51:00 +0200 Subject: [PATCH 0530/1117] build without clang-cl on Windows (#521) --- .github/workflows/build.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a1a7955..9c5b04c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -101,8 +101,6 @@ jobs: mkdir output cp target/${{ matrix.target }}/release/gopher64.exe output/gopher64-${{ matrix.arch }}.exe env: - CC: clang-cl - CXX: clang-cl AR: llvm-lib - name: Upload file uses: actions/upload-artifact@v4 From 8010a6211ccdc7aa5aa5d8b512d0f5b38c7ef759 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 20 Jul 2025 08:16:04 +0200 Subject: [PATCH 0531/1117] Use default AR on windows (#522) * Use default AR on windows * use llvm-ar * more --- .cargo/config.toml | 1 + .github/workflows/build.yml | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 40c9ac4..7a6f5d3 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -13,3 +13,4 @@ rustflags = ["-C", "target-cpu=cortex-a76"] [env] CC = "clang" CXX = "clang++" +AR = "llvm-ar" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9c5b04c..dd2900c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -100,8 +100,6 @@ jobs: cargo build --release -v --target=${{ matrix.target }} mkdir output cp target/${{ matrix.target }}/release/gopher64.exe output/gopher64-${{ matrix.arch }}.exe - env: - AR: llvm-lib - name: Upload file uses: actions/upload-artifact@v4 with: @@ -131,6 +129,8 @@ jobs: cargo build --release -v --target=${{ matrix.target }} mkdir output cp target/${{ matrix.target }}/release/gopher64 output/gopher64-${{ matrix.arch }} + env: + AR: ar - name: Upload file uses: actions/upload-artifact@v4 with: From 328e1730a0aeff37e5bec10ff4e05c5e71b1afca Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 20 Jul 2025 09:55:36 +0200 Subject: [PATCH 0532/1117] Update parallel-rdp (#523) --- .gitmodules | 3 ++- build.rs | 1 + parallel-rdp/parallel-rdp-standalone | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 208959e..c1193b6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,4 @@ [submodule "parallel-rdp/parallel-rdp-standalone"] path = parallel-rdp/parallel-rdp-standalone - url = https://github.com/Themaister/parallel-rdp-standalone.git + url = https://github.com/gopher64/parallel-rdp-standalone.git + branch = gopher64 diff --git a/build.rs b/build.rs index 637c6f9..9a326f9 100644 --- a/build.rs +++ b/build.rs @@ -36,6 +36,7 @@ fn main() { .file("parallel-rdp/parallel-rdp-standalone/vulkan/image.cpp") .file("parallel-rdp/parallel-rdp-standalone/vulkan/indirect_layout.cpp") .file("parallel-rdp/parallel-rdp-standalone/vulkan/memory_allocator.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/pipeline_cache.cpp") .file("parallel-rdp/parallel-rdp-standalone/vulkan/pipeline_event.cpp") .file("parallel-rdp/parallel-rdp-standalone/vulkan/query_pool.cpp") .file("parallel-rdp/parallel-rdp-standalone/vulkan/render_pass.cpp") diff --git a/parallel-rdp/parallel-rdp-standalone b/parallel-rdp/parallel-rdp-standalone index 388d70f..3bff34d 160000 --- a/parallel-rdp/parallel-rdp-standalone +++ b/parallel-rdp/parallel-rdp-standalone @@ -1 +1 @@ -Subproject commit 388d70f5835b352d841d9d9e5a08c5de01470f41 +Subproject commit 3bff34d83552f19ea4e3c69d724d571a766bf4f6 From f2e8bc63567a9e885e001fde1d2be267a339e988 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 20 Jul 2025 19:30:53 +0200 Subject: [PATCH 0533/1117] data access fixes --- src/device/cart/sc64.rs | 69 ++++++++++++++++++++----------------- src/device/rdram.rs | 6 ++-- src/device/rsp_interface.rs | 2 +- src/device/si.rs | 2 +- 4 files changed, 42 insertions(+), 37 deletions(-) diff --git a/src/device/cart/sc64.rs b/src/device/cart/sc64.rs index b50a033..12b7a86 100644 --- a/src/device/cart/sc64.rs +++ b/src/device/cart/sc64.rs @@ -155,24 +155,26 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u let mut i = 0; while i < length { - if offset + i < device.ui.storage.saves.sdcard.data.len() { - let data = u32::from_be_bytes( - device.ui.storage.saves.sdcard.data - [(offset + i)..(offset + i + 4)] - .try_into() - .unwrap(), - ); + let data = u32::from_be_bytes( + device + .ui + .storage + .saves + .sdcard + .data + .get((offset + i)..(offset + i + 4)) + .unwrap_or(&[0; 4]) + .try_into() + .unwrap_or_default(), + ); - device::memory::data_write( - device, - address + i as u64, - data, - 0xFFFFFFFF, - false, - ); - } else { - panic!("sd card read out of bounds") - } + device::memory::data_write( + device, + address + i as u64, + data, + 0xFFFFFFFF, + false, + ); i += 4; } } @@ -187,19 +189,22 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u let mut i = 0; while i < length { - if offset + i < device.ui.storage.saves.sdcard.data.len() { - let data = device::memory::data_read( - device, - address + i as u64, - device::memory::AccessSize::Word, - false, - ) - .to_be_bytes(); - device.ui.storage.saves.sdcard.data[(offset + i)..(offset + i + 4)] - .copy_from_slice(&data); - } else { - panic!("sd card write out of bounds") - } + let data = device::memory::data_read( + device, + address + i as u64, + device::memory::AccessSize::Word, + false, + ) + .to_be_bytes(); + device + .ui + .storage + .saves + .sdcard + .data + .get_mut((offset + i)..(offset + i + 4)) + .unwrap_or(&mut [0; 4]) + .copy_from_slice(&data); i += 4; } device.ui.storage.saves.sdcard.written = true; @@ -309,7 +314,7 @@ pub fn dma_read( let mut j = cart_addr; while i < dram_addr + length { - buffer[j as usize] = *device + *buffer.get_mut(j as usize).unwrap_or(&mut 0) = *device .rdram .mem .get(i as usize ^ device.byte_swap) @@ -344,7 +349,7 @@ pub fn dma_write( .rdram .mem .get_mut(i as usize ^ device.byte_swap) - .unwrap_or(&mut 0) = buffer[j as usize]; + .unwrap_or(&mut 0) = *buffer.get(j as usize).unwrap_or(&0); i += 1; j += 1; } diff --git a/src/device/rdram.rs b/src/device/rdram.rs index b40c31a..956c57e 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -33,7 +33,7 @@ pub fn read_mem_fast( .rdram .mem .get(masked_address..masked_address + 4) - .unwrap_or_default() + .unwrap_or(&[0; 4]) .try_into() .unwrap_or_default(), ) @@ -55,7 +55,7 @@ pub fn read_mem( .rdram .mem .get(masked_address..masked_address + 4) - .unwrap_or_default() + .unwrap_or(&[0; 4]) .try_into() .unwrap_or_default(), ) @@ -67,7 +67,7 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 .rdram .mem .get(address as usize..(address + 4) as usize) - .unwrap_or_default() + .unwrap_or(&[0; 4]) .try_into() .unwrap_or_default(), ); diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index 468db54..083580a 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -180,7 +180,7 @@ fn do_dma(device: &mut device::Device, dma: RspDma) { .rdram .mem .get(dram_addr as usize..dram_addr as usize + 4) - .unwrap_or_default() + .unwrap_or(&[0; 4]) .try_into() .unwrap_or_default(), ); diff --git a/src/device/si.rs b/src/device/si.rs index 5cef137..017958a 100644 --- a/src/device/si.rs +++ b/src/device/si.rs @@ -90,7 +90,7 @@ fn copy_pif_rdram(device: &mut device::Device) { .rdram .mem .get(dram_addr + i..dram_addr + i + 4) - .unwrap_or_default() + .unwrap_or(&[0; 4]) .try_into() .unwrap_or_default(), ); From 98b5d6506e2e7d710828343a66287538c88d48c2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 20 Jul 2025 23:12:01 +0200 Subject: [PATCH 0534/1117] add spacing in settings --- src/ui/gui/settings_page.slint | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ui/gui/settings_page.slint b/src/ui/gui/settings_page.slint index c798244..d2259d2 100644 --- a/src/ui/gui/settings_page.slint +++ b/src/ui/gui/settings_page.slint @@ -80,7 +80,9 @@ export component Settings inherits Page { } } - Rectangle { } + Rectangle { + height: 20px; + } HorizontalBox { alignment: start; From cd2b5b4e9282367395cf967f31a0cd41540f2de7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 25 Jul 2025 07:00:45 +0200 Subject: [PATCH 0535/1117] error checking for netplay ui channels (#527) * error checking for netplay ui channels * more --- src/device/cart/rom.rs | 9 +- src/ui/netplay.rs | 588 ++++++++++++++++++++++------------------- 2 files changed, 317 insertions(+), 280 deletions(-) diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 7841e6b..d5753e4 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -50,9 +50,7 @@ pub fn read_mem( } pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { - if device.cart.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] != 0 - && device.cart.sc64.cfg[device::cart::sc64::SC64_BOOTLOADER_SWITCH as usize] == 0 - { + if device.cart.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] != 0 { let masked_address = address as usize & CART_MASK; let mut data = read_cart_word(device, masked_address); device::memory::masked_write_32(&mut data, value, mask); @@ -82,9 +80,7 @@ pub fn dma_read( mut dram_addr: u32, length: u32, ) -> u64 { - if device.cart.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] != 0 - && device.cart.sc64.cfg[device::cart::sc64::SC64_BOOTLOADER_SWITCH as usize] == 0 - { + if device.cart.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] != 0 { dram_addr &= device::rdram::RDRAM_MASK as u32; cart_addr &= CART_MASK as u32; @@ -193,7 +189,6 @@ fn set_cic(device: &mut device::Device) { "53C0088FB777870D0AF32F0251E964030E2E8B72E830C26042FD191169508C05" => { device.cart.cic_seed = 0xdd; // CicNus5167 device.cart.sc64.cfg[device::cart::sc64::SC64_ROM_WRITE_ENABLE as usize] = 1; - device.cart.sc64.cfg[device::cart::sc64::SC64_BOOTLOADER_SWITCH as usize] = 0; } _ => { device.cart.cic_seed = 0x3F; // CicNus6102 diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index d9ad9f9..e5c754b 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -399,13 +399,26 @@ fn manage_websocket( } }); tokio::spawn(async move { - while let Ok(Some(response)) = netplay_write_receiver.recv().await { - write - .send(Message::Binary(Bytes::from( - serde_json::to_vec(&response).unwrap(), - ))) - .await - .unwrap(); + loop { + match netplay_write_receiver.recv().await { + Ok(Some(response)) => { + write + .send(Message::Binary(Bytes::from( + serde_json::to_vec(&response).unwrap(), + ))) + .await + .unwrap(); + } + Ok(None) => { + break; + } + Err(tokio::sync::broadcast::error::RecvError::Lagged(_)) => { + panic!("netplay_write_receiver lagged"); + } + Err(tokio::sync::broadcast::error::RecvError::Closed) => { + break; + } + } } write.close().await.unwrap(); }); @@ -457,74 +470,81 @@ fn update_sessions( netplay_write_sender.send(Some(request_rooms)).unwrap(); - if let Ok(Ok(message)) = tokio::time::timeout( + match tokio::time::timeout( std::time::Duration::from_secs(2), netplay_read_receiver.recv(), ) .await { - if message.accept.unwrap() == 0 { - if let Some(rooms) = message.rooms { - weak.upgrade_in_event_loop(move |handle| { - let sessions_vec = slint::VecModel::default(); - let ports_vec = slint::VecModel::default(); - for room in rooms { - let session_vec = slint::VecModel::default(); - session_vec.push(slint::StandardListViewItem::from( - slint::SharedString::from(room.room_name.unwrap()), - )); - session_vec.push(slint::StandardListViewItem::from( - slint::SharedString::from(room.game_name.unwrap()), - )); - session_vec.push(slint::StandardListViewItem::from( - slint::SharedString::from(if room.protected.unwrap() { - "True" - } else { - "False" - }), - )); - session_vec.push(slint::StandardListViewItem::from( - slint::SharedString::from( - if room.features.unwrap_or_default().contains_key("cheats") { + Ok(Ok(message)) => { + if message.accept.unwrap() == 0 { + if let Some(rooms) = message.rooms { + weak.upgrade_in_event_loop(move |handle| { + let sessions_vec = slint::VecModel::default(); + let ports_vec = slint::VecModel::default(); + for room in rooms { + let session_vec = slint::VecModel::default(); + session_vec.push(slint::StandardListViewItem::from( + slint::SharedString::from(room.room_name.unwrap()), + )); + session_vec.push(slint::StandardListViewItem::from( + slint::SharedString::from(room.game_name.unwrap()), + )); + session_vec.push(slint::StandardListViewItem::from( + slint::SharedString::from(if room.protected.unwrap() { "True" } else { "False" - }, - ), - )); - let session_model: std::rc::Rc< - slint::VecModel, - > = std::rc::Rc::new(session_vec); - sessions_vec.push(slint::ModelRc::from(session_model)); - ports_vec.push(room.port.unwrap()); - } - let rooms_model: std::rc::Rc< - slint::VecModel>, - > = std::rc::Rc::new(sessions_vec); - let ports_model: std::rc::Rc> = - std::rc::Rc::new(ports_vec); - handle.set_sessions(slint::ModelRc::from(rooms_model)); - handle.set_ports(slint::ModelRc::from(ports_model)); - handle.set_current_session(-1); - }) - .unwrap(); + }), + )); + session_vec.push(slint::StandardListViewItem::from( + slint::SharedString::from( + if room.features.unwrap_or_default().contains_key("cheats") + { + "True" + } else { + "False" + }, + ), + )); + let session_model: std::rc::Rc< + slint::VecModel, + > = std::rc::Rc::new(session_vec); + sessions_vec.push(slint::ModelRc::from(session_model)); + ports_vec.push(room.port.unwrap()); + } + let rooms_model: std::rc::Rc< + slint::VecModel>, + > = std::rc::Rc::new(sessions_vec); + let ports_model: std::rc::Rc> = + std::rc::Rc::new(ports_vec); + handle.set_sessions(slint::ModelRc::from(rooms_model)); + handle.set_ports(slint::ModelRc::from(ports_model)); + handle.set_current_session(-1); + }) + .unwrap(); + } else { + weak.upgrade_in_event_loop(move |handle| { + clear_sessions(&handle, None); + }) + .unwrap(); + } } else { weak.upgrade_in_event_loop(move |handle| { - clear_sessions(&handle, None); + clear_sessions(&handle, message.message); }) .unwrap(); } - } else { + } + Ok(Err(err)) => { + panic!("netplay_read_receiver error: {err}"); + } + Err(_) => { weak.upgrade_in_event_loop(move |handle| { - clear_sessions(&handle, message.message); + clear_sessions(&handle, Some("Server did not respond".to_string())); }) .unwrap(); } - } else { - weak.upgrade_in_event_loop(move |handle| { - clear_sessions(&handle, Some("Server did not respond".to_string())); - }) - .unwrap(); } }); } @@ -584,71 +604,77 @@ fn create_session( netplay_write_sender.send(Some(create_room)).unwrap(); - if let Ok(Ok(message)) = tokio::time::timeout( + match tokio::time::timeout( std::time::Duration::from_secs(2), netplay_read_receiver.recv(), ) .await { - if message.accept.unwrap() == 0 { - weak.upgrade_in_event_loop(move |handle| { - let session = message.room.as_ref().unwrap(); - let features_default = "false".to_string(); - let cheats_default = "{}".to_string(); - let overclock = session - .features - .as_ref() - .unwrap() - .get("overclock") - .unwrap_or(&features_default); - let disable_expansion_pak = session - .features - .as_ref() - .unwrap() - .get("disable_expansion_pak") - .unwrap_or(&features_default); - let cheats = session - .features - .as_ref() - .unwrap() - .get("cheats") - .unwrap_or(&cheats_default); - setup_wait_window( - netplay_write_sender, - netplay_read_receiver, - session.room_name.as_ref().unwrap().into(), - session.game_name.as_ref().unwrap().into(), - handle.get_rom_path(), - message.player_name.as_ref().unwrap().into(), - session.port.unwrap(), - true, - GameSettings { - fullscreen: game_settings.fullscreen, - overclock: overclock.parse().unwrap(), - disable_expansion_pak: disable_expansion_pak.parse().unwrap(), - cheats: serde_json::from_str(cheats).unwrap(), - }, - handle.get_peer_addr(), - weak_app, - ); - handle.window().hide().unwrap(); - }) - .unwrap(); - } else { + Ok(Ok(message)) => { + if message.accept.unwrap() == 0 { + weak.upgrade_in_event_loop(move |handle| { + let session = message.room.as_ref().unwrap(); + let features_default = "false".to_string(); + let cheats_default = "{}".to_string(); + let overclock = session + .features + .as_ref() + .unwrap() + .get("overclock") + .unwrap_or(&features_default); + let disable_expansion_pak = session + .features + .as_ref() + .unwrap() + .get("disable_expansion_pak") + .unwrap_or(&features_default); + let cheats = session + .features + .as_ref() + .unwrap() + .get("cheats") + .unwrap_or(&cheats_default); + setup_wait_window( + netplay_write_sender, + netplay_read_receiver, + session.room_name.as_ref().unwrap().into(), + session.game_name.as_ref().unwrap().into(), + handle.get_rom_path(), + message.player_name.as_ref().unwrap().into(), + session.port.unwrap(), + true, + GameSettings { + fullscreen: game_settings.fullscreen, + overclock: overclock.parse().unwrap(), + disable_expansion_pak: disable_expansion_pak.parse().unwrap(), + cheats: serde_json::from_str(cheats).unwrap(), + }, + handle.get_peer_addr(), + weak_app, + ); + handle.window().hide().unwrap(); + }) + .unwrap(); + } else { + weak.upgrade_in_event_loop(move |handle| { + handle.set_pending_session(false); + if let Some(message) = message.message { + show_netplay_error(message); + } + }) + .unwrap(); + } + } + Ok(Err(err)) => { + panic!("netplay_read_receiver error: {err}"); + } + Err(_) => { weak.upgrade_in_event_loop(move |handle| { handle.set_pending_session(false); - if let Some(message) = message.message { - show_netplay_error(message); - } + show_netplay_error("Server did not respond".to_string()); }) .unwrap(); } - } else { - weak.upgrade_in_event_loop(move |handle| { - handle.set_pending_session(false); - show_netplay_error("Server did not respond".to_string()); - }) - .unwrap(); } }); } @@ -692,71 +718,77 @@ fn join_session( netplay_write_sender.send(Some(join_room)).unwrap(); - if let Ok(Ok(message)) = tokio::time::timeout( + match tokio::time::timeout( std::time::Duration::from_secs(2), netplay_read_receiver.recv(), ) .await { - if message.accept.unwrap() == 0 { - weak.upgrade_in_event_loop(move |handle| { - let session = message.room.as_ref().unwrap(); - let features_default = "false".to_string(); - let cheats_default = "{}".to_string(); - let overclock = session - .features - .as_ref() - .unwrap() - .get("overclock") - .unwrap_or(&features_default); - let disable_expansion_pak = session - .features - .as_ref() - .unwrap() - .get("disable_expansion_pak") - .unwrap_or(&features_default); - let cheats = session - .features - .as_ref() - .unwrap() - .get("cheats") - .unwrap_or(&cheats_default); - setup_wait_window( - netplay_write_sender, - netplay_read_receiver, - session.room_name.as_ref().unwrap().into(), - session.game_name.as_ref().unwrap().into(), - handle.get_rom_path(), - message.player_name.as_ref().unwrap().into(), - session.port.unwrap(), - false, - GameSettings { - fullscreen, - overclock: overclock.parse().unwrap(), - disable_expansion_pak: disable_expansion_pak.parse().unwrap(), - cheats: serde_json::from_str(cheats).unwrap(), - }, - handle.get_peer_addr(), - weak_app, - ); - handle.window().hide().unwrap(); - }) - .unwrap(); - } else { + Ok(Ok(message)) => { + if message.accept.unwrap() == 0 { + weak.upgrade_in_event_loop(move |handle| { + let session = message.room.as_ref().unwrap(); + let features_default = "false".to_string(); + let cheats_default = "{}".to_string(); + let overclock = session + .features + .as_ref() + .unwrap() + .get("overclock") + .unwrap_or(&features_default); + let disable_expansion_pak = session + .features + .as_ref() + .unwrap() + .get("disable_expansion_pak") + .unwrap_or(&features_default); + let cheats = session + .features + .as_ref() + .unwrap() + .get("cheats") + .unwrap_or(&cheats_default); + setup_wait_window( + netplay_write_sender, + netplay_read_receiver, + session.room_name.as_ref().unwrap().into(), + session.game_name.as_ref().unwrap().into(), + handle.get_rom_path(), + message.player_name.as_ref().unwrap().into(), + session.port.unwrap(), + false, + GameSettings { + fullscreen, + overclock: overclock.parse().unwrap(), + disable_expansion_pak: disable_expansion_pak.parse().unwrap(), + cheats: serde_json::from_str(cheats).unwrap(), + }, + handle.get_peer_addr(), + weak_app, + ); + handle.window().hide().unwrap(); + }) + .unwrap(); + } else { + weak.upgrade_in_event_loop(move |handle| { + handle.set_pending_session(false); + if let Some(message) = message.message { + show_netplay_error(message); + } + }) + .unwrap(); + } + } + Ok(Err(err)) => { + panic!("netplay_read_receiver error: {err}"); + } + Err(_) => { weak.upgrade_in_event_loop(move |handle| { handle.set_pending_session(false); - if let Some(message) = message.message { - show_netplay_error(message); - } + show_netplay_error("Server did not respond".to_string()); }) .unwrap(); } - } else { - weak.upgrade_in_event_loop(move |handle| { - handle.set_pending_session(false); - show_netplay_error("Server did not respond".to_string()); - }) - .unwrap(); } }); } @@ -867,121 +899,131 @@ fn setup_wait_window( let weak = wait.as_weak(); tokio::spawn(async move { - while let Ok(response) = netplay_read_receiver.recv().await { - match response.message_type.as_str() { - "reply_motd" => { - let request_players = NetplayMessage { - message_type: "request_players".to_string(), - player_name: None, - client_sha: None, - netplay_version: None, - player_names: None, - emulator: None, - rooms: None, - accept: None, - message: None, - auth_time: None, - auth: None, - room: Some(NetplayRoom { - room_name: None, - password: None, - game_name: None, - md5: None, - protected: None, - port: Some(port), - features: None, - buffer_target: None, - }), - }; - netplay_write_sender.send(Some(request_players)).unwrap(); + loop { + match netplay_read_receiver.recv().await { + Ok(response) => match response.message_type.as_str() { + "reply_motd" => { + let request_players = NetplayMessage { + message_type: "request_players".to_string(), + player_name: None, + client_sha: None, + netplay_version: None, + player_names: None, + emulator: None, + rooms: None, + accept: None, + message: None, + auth_time: None, + auth: None, + room: Some(NetplayRoom { + room_name: None, + password: None, + game_name: None, + md5: None, + protected: None, + port: Some(port), + features: None, + buffer_target: None, + }), + }; + netplay_write_sender.send(Some(request_players)).unwrap(); - weak.upgrade_in_event_loop(move |handle| { - #[allow(clippy::regex_creation_in_loops)] - let re = regex::Regex::new(r"<[^>]*>").unwrap(); - let motd = re - .replace_all(response.message.unwrap().as_str(), "") - .into_owned(); - handle.set_motd(motd.into()); - }) - .unwrap(); - } - "reply_players" => { - weak.upgrade_in_event_loop(move |handle| { - if let Some(player_names) = response.player_names { - let players_vec: slint::VecModel = - slint::VecModel::default(); - for player in player_names { - players_vec.push(player.into()); - } - let players_model: std::rc::Rc> = - std::rc::Rc::new(players_vec); - handle.set_players(slint::ModelRc::from(players_model)); - } - }) - .unwrap(); - } - "reply_chat_message" => { - weak.upgrade_in_event_loop(move |handle| { - let mut chat_text = handle.get_chat_text(); - chat_text.push_str(&format!("{}\n", response.message.unwrap())); - handle.set_chat_text(chat_text); - }) - .unwrap(); - } - "reply_begin_game" => { - if response.accept.unwrap() == 0 { weak.upgrade_in_event_loop(move |handle| { - handle.window().hide().unwrap(); - let _ = netplay_write_sender.send(None); - - let mut player_number = 4; - let players = handle.get_players(); - for (i, player) in players.iter().enumerate() { - if player == local_player { - player_number = i; - } - } - if player_number > 3 { - panic!("Could not determine player number"); - } - - run_rom( - GbPaths { - rom: [None, None, None, None], - ram: [None, None, None, None], - }, - handle.get_rom_path().as_str().into(), - GameSettings { - fullscreen: game_settings.fullscreen, - overclock: game_settings.overclock, - disable_expansion_pak: game_settings.disable_expansion_pak, - cheats: game_settings.cheats, - }, - VruChannel { - vru_window_notifier: None, - vru_word_receiver: None, - }, - Some(NetplayDevice { - peer_addr: socket_addr, - player_number: player_number as u8, - }), - weak_app, - ); + #[allow(clippy::regex_creation_in_loops)] + let re = regex::Regex::new(r"<[^>]*>").unwrap(); + let motd = re + .replace_all(response.message.unwrap().as_str(), "") + .into_owned(); + handle.set_motd(motd.into()); }) .unwrap(); - return; - } else { + } + "reply_players" => { weak.upgrade_in_event_loop(move |handle| { - handle.set_can_start(can_start); - if let Some(message) = response.message { - show_netplay_error(message); + if let Some(player_names) = response.player_names { + let players_vec: slint::VecModel = + slint::VecModel::default(); + for player in player_names { + players_vec.push(player.into()); + } + let players_model: std::rc::Rc< + slint::VecModel, + > = std::rc::Rc::new(players_vec); + handle.set_players(slint::ModelRc::from(players_model)); } }) .unwrap(); } + "reply_chat_message" => { + weak.upgrade_in_event_loop(move |handle| { + let mut chat_text = handle.get_chat_text(); + chat_text.push_str(&format!("{}\n", response.message.unwrap())); + handle.set_chat_text(chat_text); + }) + .unwrap(); + } + "reply_begin_game" => { + if response.accept.unwrap() == 0 { + weak.upgrade_in_event_loop(move |handle| { + handle.window().hide().unwrap(); + let _ = netplay_write_sender.send(None); + + let mut player_number = 4; + let players = handle.get_players(); + for (i, player) in players.iter().enumerate() { + if player == local_player { + player_number = i; + } + } + if player_number > 3 { + panic!("Could not determine player number"); + } + + run_rom( + GbPaths { + rom: [None, None, None, None], + ram: [None, None, None, None], + }, + handle.get_rom_path().as_str().into(), + GameSettings { + fullscreen: game_settings.fullscreen, + overclock: game_settings.overclock, + disable_expansion_pak: game_settings.disable_expansion_pak, + cheats: game_settings.cheats, + }, + VruChannel { + vru_window_notifier: None, + vru_word_receiver: None, + }, + Some(NetplayDevice { + peer_addr: socket_addr, + player_number: player_number as u8, + }), + weak_app, + ); + }) + .unwrap(); + return; + } else { + weak.upgrade_in_event_loop(move |handle| { + handle.set_can_start(can_start); + if let Some(message) = response.message { + show_netplay_error(message); + } + }) + .unwrap(); + } + } + _ => { + println!("Unknown netplay message type: {}", response.message_type); + } + }, + + Err(tokio::sync::broadcast::error::RecvError::Lagged(_)) => { + panic!("netplay_read_receiver lagged"); } - _ => { - println!("Unknown netplay message type: {}", response.message_type); + Err(tokio::sync::broadcast::error::RecvError::Closed) => { + break; // exit the loop if the receiver is closed } } } From 712dc10c65d94f7662b5204b9bff343a0b7c3dbc Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 25 Jul 2025 07:20:50 +0200 Subject: [PATCH 0536/1117] cleanup netplay error checking --- src/ui/netplay.rs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index e5c754b..905137e 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -412,11 +412,8 @@ fn manage_websocket( Ok(None) => { break; } - Err(tokio::sync::broadcast::error::RecvError::Lagged(_)) => { - panic!("netplay_write_receiver lagged"); - } - Err(tokio::sync::broadcast::error::RecvError::Closed) => { - break; + Err(err) => { + panic!("netplay_write_receiver error: {err}"); } } } @@ -1018,7 +1015,6 @@ fn setup_wait_window( println!("Unknown netplay message type: {}", response.message_type); } }, - Err(tokio::sync::broadcast::error::RecvError::Lagged(_)) => { panic!("netplay_read_receiver lagged"); } From b6de872d7812a1ba7aad9c3b2299b97b83055d4b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 25 Jul 2025 11:45:11 +0200 Subject: [PATCH 0537/1117] Sign code using SignPath (#525) * Sign code using SignPath * more * more * more * more * more * use release-signing --- .github/workflows/build.yml | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index dd2900c..1afa9f6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -5,6 +5,8 @@ permissions: on: push: branches: ["main"] + tags: + - "v*" pull_request: branches: ["main"] @@ -100,11 +102,23 @@ jobs: cargo build --release -v --target=${{ matrix.target }} mkdir output cp target/${{ matrix.target }}/release/gopher64.exe output/gopher64-${{ matrix.arch }}.exe - - name: Upload file + - name: Upload unsigned artifact + id: upload-unsigned-artifact uses: actions/upload-artifact@v4 with: name: gopher64-${{ matrix.arch }} path: output/gopher64-${{ matrix.arch }}.exe + - name: SignPath + if: ${{ github.ref_type == 'tag' }} + uses: signpath/github-action-submit-signing-request@v1.1 + with: + api-token: "${{ secrets.SIGNPATH_API_TOKEN }}" + organization-id: "${{ secrets.SIGNPATH_ORG_ID }}" + project-slug: "gopher64" + artifact-configuration-slug: "gopher64-${{ matrix.arch }}" + signing-policy-slug: "release-signing" + github-artifact-id: "${{ steps.upload-unsigned-artifact.outputs.artifact-id }}" + wait-for-completion: true build-macos: runs-on: macos-15 From 85583343918d14f89b6016aab8a58d7eb12a496f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 25 Jul 2025 16:23:46 +0200 Subject: [PATCH 0538/1117] Add code signing policy --- README.md | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 78dbb1a..185a257 100644 --- a/README.md +++ b/README.md @@ -17,10 +17,6 @@ https://discord.gg/9RGXq8W8JQ Keys are mapped according to [these defaults](https://github.com/gopher64/gopher64/wiki/Default-Keyboard-Setup). Xbox-style controllers also have a [default mapping applied](https://github.com/gopher64/gopher64/wiki/Default-Gamepad-Setup). -You can create your mappings by running `./gopher64 --configure-input-profile my_profile`. You then bind that profile to a port: `./gopher64 --bind-input-profile my_profile --port 1` - -To use a controller (for example, an Xbox controller), run `./gopher64 --list-controllers` to get a list of attached controllers, and then assign it by doing `./gopher64 --assign-controller --port 1` - ## netplay Gopher64 supports netplay (online play with others). It has a few public netplay servers. If you are interested in running a public netplay server, please let me know (open an issue or discussion or contact me on Discord). You can also run the server (https://github.com/gopher64/gopher64-netplay-server) yourself on a LAN. @@ -37,12 +33,6 @@ If you want to run the flatpak from the command line, you need to add the `--fil flatpak run --filesystem=host:ro io.github.gopher64.gopher64 /path/to/rom.z64 ``` -## goals - -1. Performance. I want to be able to use this emulator on my laptop. -2. Easy to use. -3. Easy to work on. Dynamic recompilers perform well, but they are very hard to read and understand. This emulator will only have interpreters for the CPU and RSP. Additionally, it is completely written in Rust (besides Parallel-RDP), a modern programming language with a growing user base. I've tried to avoid the use of macros, which can reduce some repetitiveness in the code but also reduce readability. - ## building and usage 1. Linux only: install the SDL3 dependencies: https://wiki.libsdl.org/SDL3/README-linux#build-dependencies @@ -59,3 +49,9 @@ I am very open to contributions! Please contact me via a GitHub issue or Discord ## license Gopher64 is licensed under the GPLv3 license. Many portions of gopher64 have been adapted from mupen64plus and/or ares. The license for mupen64plus can be found here: https://github.com/mupen64plus/mupen64plus-core/blob/master/LICENSES. The license for ares can be found here: https://github.com/ares-emulator/ares/blob/master/LICENSE. + +## privacy and code signing policy + +Free code signing for the Windows release is provided by [SignPath.io](https://about.signpath.io), certificate by [SignPath Foundation](https://signpath.org). + +During online netplay sessions, the server logs your IP address and basic session information (game title and session name) for operational purposes. No additional personal data is collected or stored. From d7f656cd6a78459f30757cdd9e4f3b618c923408 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 25 Jul 2025 21:26:54 +0200 Subject: [PATCH 0539/1117] update cargo packages --- Cargo.lock | 88 ++++++++++++++++++++++++++---------------------------- Cargo.toml | 2 +- 2 files changed, 44 insertions(+), 46 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c06850c..e5f9389 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -226,7 +226,7 @@ dependencies = [ "enumflags2", "futures-channel", "futures-util", - "rand 0.9.1", + "rand 0.9.2", "raw-window-handle", "serde", "serde_repr", @@ -278,9 +278,9 @@ dependencies = [ [[package]] name = "async-io" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1237c0ae75a0f3765f58910ff9cdd0a12eeb39ab2f4c7de23262f337f0aacbb3" +checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca" dependencies = [ "async-lock", "cfg-if", @@ -291,8 +291,7 @@ dependencies = [ "polling", "rustix 1.0.8", "slab", - "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -308,9 +307,9 @@ dependencies = [ [[package]] name = "async-process" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde3f4e40e6021d7acffc90095cbd6dc54cb593903d1de5832f435eb274b85dc" +checksum = "65daa13722ad51e6ab1a1b9c01299142bc75135b337923cfa10e79bbbd669f00" dependencies = [ "async-channel", "async-io", @@ -322,7 +321,6 @@ dependencies = [ "event-listener", "futures-lite", "rustix 1.0.8", - "tracing", ] [[package]] @@ -338,9 +336,9 @@ dependencies = [ [[package]] name = "async-signal" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7605a4e50d4b06df3898d5a70bf5fde51ed9059b0434b73105193bc27acce0d" +checksum = "f567af260ef69e1d52c2b560ce0ea230763e6fbb9214a85d768760a920e3e3c1" dependencies = [ "async-io", "async-lock", @@ -351,7 +349,7 @@ dependencies = [ "rustix 1.0.8", "signal-hook-registry", "slab", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -603,9 +601,9 @@ dependencies = [ [[package]] name = "bytemuck_derive" -version = "1.9.3" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1" +checksum = "441473f2b4b0459a68628c744bc61d23e730fb00128b841d30fa4bb3972257e4" dependencies = [ "proc-macro2", "quote", @@ -1993,7 +1991,7 @@ dependencies = [ "parking_lot", "portable-atomic", "quanta", - "rand 0.9.1", + "rand 0.9.2", "smallvec", "spinning_top", "web-time", @@ -2181,9 +2179,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f66d5bd4c6f02bf0542fad85d626775bab9258cf795a4256dcaf3161114d1df" +checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" dependencies = [ "base64", "bytes", @@ -2197,7 +2195,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.5.10", + "socket2 0.6.0", "tokio", "tower-service", "tracing", @@ -2678,9 +2676,9 @@ dependencies = [ [[package]] name = "io-uring" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" +checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" dependencies = [ "bitflags 2.9.1", "cfg-if", @@ -2828,11 +2826,12 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] name = "kurbo" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1077d333efea6170d9ccb96d3c3026f300ca0773da4938cc4c811daa6df68b0c" +checksum = "c62026ae44756f8a599ba21140f350303d4f08dcdcc71b5ad9c9bb8128c13c62" dependencies = [ "arrayvec", + "euclid", "smallvec", ] @@ -2924,7 +2923,7 @@ checksum = "4488594b9328dee448adb906d8b126d9b7deb7cf5c22161ee591610bb1be83c0" dependencies = [ "bitflags 2.9.1", "libc", - "redox_syscall 0.5.13", + "redox_syscall 0.5.15", ] [[package]] @@ -3074,9 +3073,9 @@ dependencies = [ [[package]] name = "lzma-rust2" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecaa2bc9f1bd284be221d0770bbc9b92a438fdf422ba45211f6c6bf157ebb932" +checksum = "900106b40381855c6acce992ac062513da7fa4acdb0a9324201da616d4812953" [[package]] name = "maybe-rayon" @@ -3719,9 +3718,9 @@ dependencies = [ [[package]] name = "owned_ttf_parser" -version = "0.25.0" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4" +checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b" dependencies = [ "ttf-parser 0.25.1", ] @@ -3750,7 +3749,7 @@ checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.13", + "redox_syscall 0.5.15", "smallvec", "windows-targets 0.52.6", ] @@ -3897,9 +3896,9 @@ dependencies = [ [[package]] name = "postcard" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c1de96e20f51df24ca73cafcc4690e044854d803259db27a00a461cb3b9d17a" +checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" dependencies = [ "cobs", "embedded-io 0.4.0", @@ -3940,9 +3939,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.35" +version = "0.2.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061c1221631e079b26479d25bbf2275bfe5917ae8419cd7e34f13bfc2aa7539a" +checksum = "ff24dfcda44452b9816fff4cd4227e1bb73ff5a2f1bc1105aa92fb8565ce44d2" dependencies = [ "proc-macro2", "syn", @@ -4053,7 +4052,7 @@ dependencies = [ "bytes", "getrandom 0.3.3", "lru-slab", - "rand 0.9.1", + "rand 0.9.2", "ring", "rustc-hash 2.1.1", "rustls", @@ -4107,9 +4106,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", @@ -4261,9 +4260,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.13" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" +checksum = "7e8af0dde094006011e6a740d4879319439489813bd0bcdc7d821beaeeff48ec" dependencies = [ "bitflags 2.9.1", ] @@ -4693,9 +4692,9 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.16.2" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c12bd2c6a1f413f516836e80c1f541116f9b17ccbab2540f655ceeb58f5592c" +checksum = "b4f9cf03fd1a56301a078ffb13856eeca76514626d78d059ecc598998194679e" dependencies = [ "byteorder", "crc32fast", @@ -4958,7 +4957,7 @@ dependencies = [ "objc2-foundation 0.2.2", "objc2-quartz-core 0.2.2", "raw-window-handle", - "redox_syscall 0.5.13", + "redox_syscall 0.5.15", "rustix 0.38.44", "tiny-xlib", "wasm-bindgen", @@ -5035,23 +5034,22 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "strum" -version = "0.27.1" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" dependencies = [ "strum_macros", ] [[package]] name = "strum_macros" -version = "0.27.1" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77a8c5abcaf0f9ce05d62342b7d298c346515365c36b673df4ebe3ced01fde8" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" dependencies = [ "heck", "proc-macro2", "quote", - "rustversion", "syn", ] @@ -5519,7 +5517,7 @@ dependencies = [ "http", "httparse", "log", - "rand 0.9.1", + "rand 0.9.2", "sha1", "thiserror 2.0.12", "utf-8", diff --git a/Cargo.toml b/Cargo.toml index f65c1dd..5f495e4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ rust-version = "1.88" dirs = "6.0" zip = "4.3" governor = "0.10" -sevenz-rust2 = { version = "0.16", default-features = false } +sevenz-rust2 = { version = "0.17", default-features = false } chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" From 20749cf036e85e919ba35082c9e82f8748121af6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 25 Jul 2025 21:45:52 +0200 Subject: [PATCH 0540/1117] bump to 1.1.2 (#528) --- .github/workflows/build.yml | 1 - Cargo.lock | 2 +- Cargo.toml | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1afa9f6..1a14248 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -118,7 +118,6 @@ jobs: artifact-configuration-slug: "gopher64-${{ matrix.arch }}" signing-policy-slug: "release-signing" github-artifact-id: "${{ steps.upload-unsigned-artifact.outputs.artifact-id }}" - wait-for-completion: true build-macos: runs-on: macos-15 diff --git a/Cargo.lock b/Cargo.lock index e5f9389..916c68a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1938,7 +1938,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.1" +version = "1.1.2" dependencies = [ "ab_glyph", "bindgen 0.72.0", diff --git a/Cargo.toml b/Cargo.toml index 5f495e4..e0dc5bc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.1" +version = "1.1.2" edition = "2024" rust-version = "1.88" From 6e652c7dbd4cf02a2578d90ce1dfa6cb8d40ecb8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Jul 2025 08:50:59 +0200 Subject: [PATCH 0541/1117] Bump signpath/github-action-submit-signing-request from 1.1 to 1.2 (#529) Bumps [signpath/github-action-submit-signing-request](https://github.com/signpath/github-action-submit-signing-request) from 1.1 to 1.2. - [Commits](https://github.com/signpath/github-action-submit-signing-request/compare/v1.1...v1.2) --- updated-dependencies: - dependency-name: signpath/github-action-submit-signing-request dependency-version: '1.2' dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1a14248..fae5a68 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -110,7 +110,7 @@ jobs: path: output/gopher64-${{ matrix.arch }}.exe - name: SignPath if: ${{ github.ref_type == 'tag' }} - uses: signpath/github-action-submit-signing-request@v1.1 + uses: signpath/github-action-submit-signing-request@v1.2 with: api-token: "${{ secrets.SIGNPATH_API_TOKEN }}" organization-id: "${{ secrets.SIGNPATH_ORG_ID }}" From a2d23c2f415c7d2bb28ebfe5279d88025f131d9c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 29 Jul 2025 23:02:07 +0200 Subject: [PATCH 0542/1117] Fix crash in netplay windows (#530) * Fix crash in netplay windows * more --- src/ui/netplay.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 905137e..c86f89f 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -412,8 +412,11 @@ fn manage_websocket( Ok(None) => { break; } - Err(err) => { - panic!("netplay_write_receiver error: {err}"); + Err(tokio::sync::broadcast::error::RecvError::Lagged(_)) => { + panic!("netplay_write_receiver lagged"); + } + Err(tokio::sync::broadcast::error::RecvError::Closed) => { + break; // exit the loop if the receiver is closed } } } From 73354246f32021fdf8e53574594877060171ffed Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 3 Aug 2025 09:25:57 +0200 Subject: [PATCH 0543/1117] netplay dispatcher (#532) * netplay dispatcher * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more --- README.md | 2 +- src/ui/gui/appwindow.slint | 1 + src/ui/gui/netplay_create.slint | 16 +- src/ui/gui/netplay_join.slint | 52 ++- src/ui/gui/netplay_page.slint | 4 +- src/ui/gui/netplay_wait.slint | 7 + src/ui/netplay.rs | 604 +++++++++++++++++++------------- 7 files changed, 397 insertions(+), 289 deletions(-) diff --git a/README.md b/README.md index 185a257..12c9ff7 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Keys are mapped according to [these defaults](https://github.com/gopher64/gopher ## netplay -Gopher64 supports netplay (online play with others). It has a few public netplay servers. If you are interested in running a public netplay server, please let me know (open an issue or discussion or contact me on Discord). You can also run the server (https://github.com/gopher64/gopher64-netplay-server) yourself on a LAN. +Gopher64 supports netplay (online play with others) via cloud hosted servers. You can also run the server (https://github.com/gopher64/gopher64-netplay-server) yourself on a LAN. ## portable mode diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 6718b99..94ab723 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -15,6 +15,7 @@ export { NetplayCreate } from "netplay_create.slint"; export { NetplayJoin } from "netplay_join.slint"; export { NetplayWait } from "netplay_wait.slint"; export { CustomNetplayServer } from "netplay_page.slint"; +export { DispatcherDialog } from "netplay_create.slint"; export component AppWindow inherits Window { callback wiki_button_clicked; diff --git a/src/ui/gui/netplay_create.slint b/src/ui/gui/netplay_create.slint index 7fa4a64..bfc92f7 100644 --- a/src/ui/gui/netplay_create.slint +++ b/src/ui/gui/netplay_create.slint @@ -6,7 +6,6 @@ export component NetplayCreate inherits Window { in-out property server_names <=> NetplayData.server_names; in-out property server_urls <=> NetplayData.server_urls; in-out property custom_server_url <=> NetplayData.custom_server_url; - in-out property ping <=> NetplayData.ping; in-out property game_name <=> NetplayData.game_name; in-out property game_hash <=> NetplayData.game_hash; in-out property game_cheats <=> NetplayData.game_cheats; @@ -14,7 +13,6 @@ export component NetplayCreate inherits Window { in-out property rom_path <=> NetplayData.rom_path; in-out property peer_addr <=> NetplayData.peer_addr; in-out property rom_dir <=> NetplayData.rom_dir; - callback get_ping(string); callback get_custom_url(); callback select_rom(string); callback create_session(string, string, string, string, string, string, string); @@ -73,17 +71,10 @@ export component NetplayCreate inherits Window { if (self.current-index >= 0) { if (self.current-value == "Custom") { get_custom_url(); - } else { - get_ping(NetplayData.server_urls[self.current-index]); } } } } - - Text { - vertical-alignment: center; - text: NetplayData.ping; - } } } @@ -130,3 +121,10 @@ export component NetplayCreate inherits Window { } } } + +export component DispatcherDialog inherits Dialog { + title: @tr("Creating Server"); + Text { + text: "Creating server, please wait...This may take about 30 seconds."; + } +} diff --git a/src/ui/gui/netplay_join.slint b/src/ui/gui/netplay_join.slint index d7fd8a4..cf62c93 100644 --- a/src/ui/gui/netplay_join.slint +++ b/src/ui/gui/netplay_join.slint @@ -6,22 +6,21 @@ export component NetplayJoin inherits Window { in-out property server_names <=> NetplayData.server_names; in-out property server_urls <=> NetplayData.server_urls; in-out property custom_server_url <=> NetplayData.custom_server_url; - in-out property ping <=> NetplayData.ping; in-out property sessions <=> NetplayData.sessions; in-out property current_session <=> NetplayData.current_session; - in-out property ports <=> NetplayData.ports; + in-out property room_urls <=> NetplayData.room_urls; in-out property game_name <=> NetplayData.game_name; in-out property game_hash <=> NetplayData.game_hash; in-out property game_cheats <=> NetplayData.game_cheats; in-out property peer_addr <=> NetplayData.peer_addr; in-out property pending_session <=> NetplayData.pending_session; + in-out property pending_refresh <=> NetplayData.pending_refresh; in-out property rom_path <=> NetplayData.rom_path; in-out property rom_dir <=> NetplayData.rom_dir; - callback get_ping(string); - callback get_custom_url(); - callback refresh_session(string); + callback refresh_session(); callback select_rom(string); - callback join_session(string, string, string, int); + callback join_session(string, string, string, string, string); + preferred-width: 700px; VerticalBox { HorizontalBox { @@ -40,26 +39,14 @@ export component NetplayJoin inherits Window { VerticalBox { Text { - text: @tr("Server:"); + text: @tr("Custom Server URL (optional):"); } - HorizontalBox { - server := ComboBox { - model: NetplayData.server_names; - selected => { - if (self.current-index >= 0) { - if (self.current-value == "Custom") { - get_custom_url(); - } else { - get_ping(NetplayData.server_urls[self.current-index]); - } - } - } - } - - Text { - vertical-alignment: center; - text: NetplayData.ping; + LineEdit { + placeholder-text: @tr("example.com:45000"); + text: NetplayData.custom_server_url; + edited(text) => { + NetplayData.custom_server_url = text; } } } @@ -71,12 +58,13 @@ export component NetplayJoin inherits Window { vertical-alignment: center; } if NetplayData.sessions.length == 0: Text { - text: @tr("No sessions available. Please refresh or try a different server."); + text: @tr("No sessions available. Please refresh to check again."); horizontal-alignment: center; vertical-alignment: center; } StandardTableView { columns: [ + { title: "Server" }, { title: "Session Name" }, { title: "Game Name" }, { title: "Password" }, @@ -93,13 +81,14 @@ export component NetplayJoin inherits Window { Rectangle { } Button { + enabled: !NetplayData.pending_refresh; text: @tr("Refresh Session List"); clicked => { - if (server.current-value == "Custom") { - refresh_session("ws://" + NetplayData.custom_server_url); - } else { - refresh_session(NetplayData.server_urls[server.current-index]); - } + NetplayData.pending_refresh = true; + NetplayData.current_session = -1; + NetplayData.sessions = []; + NetplayData.room_urls = []; + refresh_session(); } } } @@ -134,7 +123,8 @@ export component NetplayJoin inherits Window { NetplayData.player_name, NetplayData.game_hash, NetplayData.password, - NetplayData.ports[NetplayData.current_session]); + NetplayData.room_urls[NetplayData.current_session], + NetplayData.sessions[NetplayData.current_session][1].text); } } } diff --git a/src/ui/gui/netplay_page.slint b/src/ui/gui/netplay_page.slint index b742a25..d767f79 100644 --- a/src/ui/gui/netplay_page.slint +++ b/src/ui/gui/netplay_page.slint @@ -7,7 +7,6 @@ import { Page } from "page.slint"; export global NetplayData { in-out property <[string]> server_names; in-out property <[string]> server_urls; - in-out property ping: "Ping: Unknown"; in-out property player_name; in-out property game_name; in-out property game_hash; @@ -16,9 +15,10 @@ export global NetplayData { in-out property password; in-out property peer_addr; in-out property pending_session; + in-out property pending_refresh; in-out property session_name; in-out property <[[StandardListViewItem]]> sessions; - in-out property <[int]> ports; + in-out property <[string]> room_urls; in-out property current_session: -1; in-out property rom_dir; in-out property custom_server_url; diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint index c0d6912..18dcff2 100644 --- a/src/ui/gui/netplay_wait.slint +++ b/src/ui/gui/netplay_wait.slint @@ -7,6 +7,7 @@ export global NetplayWaitData { in-out property port; in-out property can_start; in-out property chat_text; + in-out property ping; } export component NetplayWait inherits Window { @@ -21,6 +22,7 @@ export component NetplayWait inherits Window { in-out property port <=> NetplayWaitData.port; in-out property can_start <=> NetplayWaitData.can_start; in-out property chat_text <=> NetplayWaitData.chat_text; + in-out property ping <=> NetplayWaitData.ping; callback send_chat_message(string); callback begin_game; @@ -37,6 +39,11 @@ export component NetplayWait inherits Window { horizontal-alignment: center; } + Text { + text: @tr("Ping: ") + NetplayWaitData.ping; + horizontal-alignment: center; + } + GridBox { Row { Text { diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index c86f89f..d3c2525 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -1,8 +1,8 @@ use crate::device; use crate::ui; use crate::ui::gui::{ - AppWindow, CustomNetplayServer, ErrorDialog, GameSettings, GbPaths, NetplayCreate, - NetplayDevice, NetplayJoin, NetplayWait, VruChannel, run_rom, save_settings, + AppWindow, CustomNetplayServer, DispatcherDialog, ErrorDialog, GameSettings, GbPaths, + NetplayCreate, NetplayDevice, NetplayJoin, NetplayWait, VruChannel, run_rom, save_settings, }; use futures::{SinkExt, StreamExt}; use sha2::{Digest, Sha256}; @@ -47,17 +47,14 @@ pub struct NetplayMessage { trait NetplayPages { fn set_server_names(&self, names: slint::ModelRc); fn set_server_urls(&self, urls: slint::ModelRc); - fn set_ping(&self, ping: slint::SharedString); fn set_game_name(&self, game_name: slint::SharedString); fn set_game_hash(&self, game_hash: slint::SharedString); fn set_game_cheats(&self, game_cheats: slint::SharedString); fn set_rom_path(&self, rom_path: slint::SharedString); fn set_peer_addr(&self, peer_addr: slint::SharedString); - fn refresh_sessions(&self, _server: slint::SharedString) { + fn refresh_sessions(&self) { // Default implementation does nothing } - fn invoke_get_ping(&self, server_url: slint::SharedString); - fn set_custom_server_url(&self, server_url: slint::SharedString); } impl NetplayPages for NetplayCreate { @@ -67,9 +64,6 @@ impl NetplayPages for NetplayCreate { fn set_server_urls(&self, urls: slint::ModelRc) { self.set_server_urls(urls); } - fn set_ping(&self, ping: slint::SharedString) { - self.set_ping(ping); - } fn set_game_name(&self, game_name: slint::SharedString) { self.set_game_name(game_name); } @@ -85,12 +79,6 @@ impl NetplayPages for NetplayCreate { fn set_peer_addr(&self, peer_addr: slint::SharedString) { self.set_peer_addr(peer_addr); } - fn invoke_get_ping(&self, server_url: slint::SharedString) { - self.invoke_get_ping(server_url); - } - fn set_custom_server_url(&self, server_url: slint::SharedString) { - self.set_custom_server_url(server_url); - } } impl NetplayPages for NetplayJoin { @@ -100,11 +88,8 @@ impl NetplayPages for NetplayJoin { fn set_server_urls(&self, urls: slint::ModelRc) { self.set_server_urls(urls); } - fn set_ping(&self, ping: slint::SharedString) { - self.set_ping(ping); - } - fn refresh_sessions(&self, server: slint::SharedString) { - self.invoke_refresh_session(server); + fn refresh_sessions(&self) { + self.invoke_refresh_session(); } fn set_game_name(&self, game_name: slint::SharedString) { self.set_game_name(game_name); @@ -121,16 +106,13 @@ impl NetplayPages for NetplayJoin { fn set_peer_addr(&self, peer_addr: slint::SharedString) { self.set_peer_addr(peer_addr); } - fn invoke_get_ping(&self, server_url: slint::SharedString) { - self.invoke_get_ping(server_url); - } - fn set_custom_server_url(&self, server_url: slint::SharedString) { - self.set_custom_server_url(server_url); - } } fn populate_server_names(weak: slint::Weak) { - let task = reqwest::get("https://cdn.gopher64.com/servers-gopher64.json"); + let task = reqwest::Client::new() + .get("https://dispatch.gopher64.com/getRegions") + .header("netplay-id", EMU_NAME) + .send(); tokio::spawn(async move { let mut local_servers: Vec<(String, String)> = vec![]; @@ -158,10 +140,9 @@ fn populate_server_names(weak: slin } let response = task.await; - if let Ok(response) = response { - let servers: std::collections::HashMap = response.json().await.unwrap(); - - let weak2 = weak.clone(); + if let Ok(response) = response + && let Ok(servers) = response.json::>().await + { weak.upgrade_in_event_loop(move |handle| { let server_names: slint::VecModel = slint::VecModel::default(); let server_urls: slint::VecModel = slint::VecModel::default(); @@ -170,12 +151,11 @@ fn populate_server_names(weak: slin server_urls.push(local_server.1.into()); } for server in servers { - server_names.push(server.0.into()); - server_urls.push(server.1.into()); + server_names.push(server.clone().into()); + server_urls.push(format!("dispatcher:{server}").into()); } server_names.push("Custom".into()); - update_ping(weak2, server_urls.row_data(0).unwrap().into()); - handle.refresh_sessions(server_urls.row_data(0).unwrap()); + handle.refresh_sessions(); let server_names_model: std::rc::Rc> = std::rc::Rc::new(server_names); let server_urls_model: std::rc::Rc> = @@ -245,48 +225,13 @@ fn select_rom( }); } -fn update_ping( - weak: slint::Weak, - server_url: String, -) { - weak.upgrade_in_event_loop(move |handle| { - handle.set_ping("Ping: Unknown".into()); - }) - .unwrap(); - tokio::spawn(async move { - if let Ok(Ok((mut sock, _response))) = tokio::time::timeout( - std::time::Duration::from_secs(1), - tokio_tungstenite::connect_async(server_url), - ) - .await - { - sock.send(Message::Ping(Vec::new().into())).await.unwrap(); - let start = std::time::Instant::now(); - - if let Some(Ok(_response)) = sock.next().await { - let elapsed = start.elapsed(); - weak.upgrade_in_event_loop(move |handle| { - handle.set_ping(format!("Ping: {:.0} ms", elapsed.as_millis()).into()); - }) - .unwrap(); - } - sock.close(None).await.unwrap(); - } - }); -} - -fn show_custom_url_dialog( - weak: slint::Weak, - server_url: slint::SharedString, -) { +fn show_custom_url_dialog(weak: slint::Weak, server_url: slint::SharedString) { let url_dialog = CustomNetplayServer::new().unwrap(); url_dialog.set_custom_server_url(server_url); let weak_dialog = url_dialog.as_weak(); url_dialog.on_ok_clicked(move |server_url| { weak.upgrade_in_event_loop(move |handle| { handle.set_custom_server_url(server_url.clone()); - let prefix: slint::SharedString = "ws://".into(); - handle.invoke_get_ping(prefix + &server_url); }) .unwrap(); weak_dialog.unwrap().window().hide().unwrap(); @@ -313,14 +258,9 @@ pub fn setup_create_window( create_window.set_rom_dir(rom_dir); populate_server_names(create_window.as_weak()); let weak = create_window.as_weak(); - create_window.on_get_ping(move |server_url| { - update_ping(weak.clone(), server_url.to_string()); - }); - let weak = create_window.as_weak(); create_window.on_get_custom_url(move || { let weak2 = weak.clone(); weak.upgrade_in_event_loop(move |handle| { - handle.set_ping("Ping: Unknown".into()); show_custom_url_dialog(weak2, handle.get_custom_server_url()); }) .unwrap(); @@ -340,26 +280,87 @@ pub fn setup_create_window( game_cheats, password| { let _ = netplay_write_sender.send(None); // close current websocket if any - manage_websocket( - server_url.to_string(), - netplay_read_sender.clone(), - netplay_write_receiver.resubscribe(), - weak.clone(), - ); + if server_url.starts_with("dispatcher:") { + let message_dialog = DispatcherDialog::new().unwrap(); + let weak_dialog = message_dialog.as_weak(); + message_dialog.show().unwrap(); - create_session( - netplay_write_sender.clone(), - netplay_read_receiver.resubscribe(), - session_name.to_string(), - player_name.to_string(), - game_name.to_string(), - game_hash.to_string(), - game_cheats.to_string(), - password.to_string(), - game_settings.clone(), - weak_app.clone(), - weak.clone(), - ); + let task = reqwest::Client::new() + .get("https://dispatch.gopher64.com/createServer") + .query(&[("region", server_url.strip_prefix("dispatcher:").unwrap())]) + .header("netplay-id", EMU_NAME) + .send(); + let netplay_read_sender = netplay_read_sender.clone(); + let netplay_write_receiver = netplay_write_receiver.resubscribe(); + let netplay_write_sender = netplay_write_sender.clone(); + let netplay_read_receiver = netplay_read_receiver.resubscribe(); + let game_settings = game_settings.clone(); + let weak = weak.clone(); + let weak_app = weak_app.clone(); + tokio::spawn(async move { + let response = task.await; + weak_dialog + .upgrade_in_event_loop(move |handle| { + handle.window().hide().unwrap(); + }) + .unwrap(); + if let Ok(response) = response + && let Ok(server) = response + .json::>() + .await + { + let server_url = server.values().next().unwrap(); + + manage_websocket( + server_url.to_string(), + netplay_read_sender, + netplay_write_receiver, + weak.clone(), + ); + + create_session( + netplay_write_sender, + netplay_read_receiver, + session_name.to_string(), + player_name.to_string(), + game_name.to_string(), + game_hash.to_string(), + game_cheats.to_string(), + password.to_string(), + game_settings, + weak_app, + weak.clone(), + ); + } else { + weak.upgrade_in_event_loop(|handle| { + handle.set_pending_session(false); + show_netplay_error("Server could not be created".to_string()); + }) + .unwrap(); + } + }); + } else { + manage_websocket( + server_url.to_string(), + netplay_read_sender.clone(), + netplay_write_receiver.resubscribe(), + weak.clone(), + ); + + create_session( + netplay_write_sender.clone(), + netplay_read_receiver.resubscribe(), + session_name.to_string(), + player_name.to_string(), + game_name.to_string(), + game_hash.to_string(), + game_cheats.to_string(), + password.to_string(), + game_settings.clone(), + weak_app.clone(), + weak.clone(), + ); + } }, ); @@ -436,116 +437,159 @@ fn show_netplay_error(message: String) { message_dialog.show().unwrap(); } -fn clear_sessions(handle: &NetplayJoin, message: Option) { - handle.set_sessions(slint::ModelRc::default()); - handle.set_ports(slint::ModelRc::default()); - handle.set_current_session(-1); - if let Some(message) = message { - show_netplay_error(message); - } -} - -fn update_sessions( - netplay_write_sender: tokio::sync::broadcast::Sender>, - mut netplay_read_receiver: tokio::sync::broadcast::Receiver, - weak: slint::Weak, -) { +fn update_sessions(weak: slint::Weak) { + let task = reqwest::Client::new() + .get("https://dispatch.gopher64.com/getServers") + .header("netplay-id", EMU_NAME) + .send(); tokio::spawn(async move { - let now_utc = chrono::Utc::now().timestamp_millis().to_string(); - let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); - let request_rooms = NetplayMessage { - message_type: "request_get_rooms".to_string(), - player_name: None, - client_sha: None, - netplay_version: Some(NETPLAY_VERSION), - player_names: None, - emulator: Some(EMU_NAME.to_string()), - accept: None, - rooms: None, - message: None, - auth_time: Some(now_utc), - auth: Some(format!("{:x}", hasher.finalize())), - room: None, - }; - - netplay_write_sender.send(Some(request_rooms)).unwrap(); - - match tokio::time::timeout( - std::time::Duration::from_secs(2), - netplay_read_receiver.recv(), - ) - .await + let mut dispatcher_servers = std::collections::HashMap::new(); + let response = task.await; + if let Ok(response) = response + && let Ok(servers) = response + .json::>() + .await { - Ok(Ok(message)) => { - if message.accept.unwrap() == 0 { - if let Some(rooms) = message.rooms { - weak.upgrade_in_event_loop(move |handle| { - let sessions_vec = slint::VecModel::default(); - let ports_vec = slint::VecModel::default(); - for room in rooms { - let session_vec = slint::VecModel::default(); - session_vec.push(slint::StandardListViewItem::from( - slint::SharedString::from(room.room_name.unwrap()), - )); - session_vec.push(slint::StandardListViewItem::from( - slint::SharedString::from(room.game_name.unwrap()), - )); - session_vec.push(slint::StandardListViewItem::from( - slint::SharedString::from(if room.protected.unwrap() { - "True" - } else { - "False" - }), - )); - session_vec.push(slint::StandardListViewItem::from( - slint::SharedString::from( - if room.features.unwrap_or_default().contains_key("cheats") - { - "True" - } else { - "False" - }, - ), - )); - let session_model: std::rc::Rc< - slint::VecModel, - > = std::rc::Rc::new(session_vec); - sessions_vec.push(slint::ModelRc::from(session_model)); - ports_vec.push(room.port.unwrap()); - } - let rooms_model: std::rc::Rc< - slint::VecModel>, - > = std::rc::Rc::new(sessions_vec); - let ports_model: std::rc::Rc> = - std::rc::Rc::new(ports_vec); - handle.set_sessions(slint::ModelRc::from(rooms_model)); - handle.set_ports(slint::ModelRc::from(ports_model)); - handle.set_current_session(-1); - }) - .unwrap(); - } else { - weak.upgrade_in_event_loop(move |handle| { - clear_sessions(&handle, None); - }) - .unwrap(); + dispatcher_servers = servers; + } + let weak2 = weak.clone(); + weak.upgrade_in_event_loop(move |handle| { + let mut servers: std::collections::HashMap = + std::collections::HashMap::new(); + let server_names = handle.get_server_names(); + let server_urls = handle.get_server_urls(); + for (i, server_name) in server_names.iter().enumerate() { + if server_name == "Custom" { + let custom_server_url = handle.get_custom_server_url(); + if !custom_server_url.is_empty() { + servers.insert( + "Custom".to_string(), + "ws://".to_string() + &custom_server_url, + ); } + } else if let Some(url) = server_urls.row_data(i) + && url.starts_with("dispatcher:") + { + continue; } else { - weak.upgrade_in_event_loop(move |handle| { - clear_sessions(&handle, message.message); - }) - .unwrap(); + servers.insert( + server_name.to_string(), + server_urls.row_data(i).unwrap().to_string(), + ); } } - Ok(Err(err)) => { - panic!("netplay_read_receiver error: {err}"); - } - Err(_) => { - weak.upgrade_in_event_loop(move |handle| { - clear_sessions(&handle, Some("Server did not respond".to_string())); - }) - .unwrap(); - } - } + servers.extend(dispatcher_servers); + + tokio::spawn(async move { + let mut sessions = vec![]; + let mut room_urls = vec![]; + for (server_name, server_url) in servers.iter() { + if let Ok(Ok((socket, _response))) = tokio::time::timeout( + std::time::Duration::from_secs(2), + tokio_tungstenite::connect_async(server_url.clone()), + ) + .await + { + let (mut write, mut read) = socket.split(); + + let now_utc = chrono::Utc::now().timestamp_millis().to_string(); + let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); + let request_rooms = NetplayMessage { + message_type: "request_get_rooms".to_string(), + player_name: None, + client_sha: None, + netplay_version: Some(NETPLAY_VERSION), + player_names: None, + emulator: Some(EMU_NAME.to_string()), + accept: None, + rooms: None, + message: None, + auth_time: Some(now_utc), + auth: Some(format!("{:x}", hasher.finalize())), + room: None, + }; + write + .send(Message::Binary(Bytes::from( + serde_json::to_vec(&request_rooms).unwrap(), + ))) + .await + .unwrap(); + + if let Some(Ok(response)) = read.next().await { + if let Ok(message) = + serde_json::from_slice::(&response.into_data()) + { + if message.message_type == "reply_get_rooms" + && message.accept.unwrap() == 0 + && let Some(rooms) = message.rooms + { + for room in rooms { + let mut session = vec![]; + room_urls.push(server_url.into()); + + session.push(slint::StandardListViewItem::from( + slint::SharedString::from(server_name), + )); + session.push(slint::StandardListViewItem::from( + slint::SharedString::from(room.room_name.unwrap()), + )); + session.push(slint::StandardListViewItem::from( + slint::SharedString::from(room.game_name.unwrap()), + )); + session.push(slint::StandardListViewItem::from( + slint::SharedString::from(if room.protected.unwrap() { + "True" + } else { + "False" + }), + )); + session.push(slint::StandardListViewItem::from( + slint::SharedString::from( + if room + .features + .unwrap_or_default() + .contains_key("cheats") + { + "True" + } else { + "False" + }, + ), + )); + sessions.push(session); + } + } + } + } + } + } + weak2 + .upgrade_in_event_loop(move |handle| { + let sessions_vec = slint::VecModel::default(); + for session in sessions.iter() { + let session_vec = slint::VecModel::from(session.to_vec()); + let session_model: std::rc::Rc< + slint::VecModel, + > = std::rc::Rc::new(session_vec); + sessions_vec.push(slint::ModelRc::from(session_model)); + } + let rooms_model: std::rc::Rc< + slint::VecModel>, + > = std::rc::Rc::new(sessions_vec); + handle.set_sessions(slint::ModelRc::from(rooms_model)); + + let room_urls_vec = slint::VecModel::from(room_urls.to_vec()); + let room_urls_model: std::rc::Rc> = + std::rc::Rc::new(room_urls_vec); + handle.set_room_urls(slint::ModelRc::from(room_urls_model)); + + handle.set_current_session(-1); + handle.set_pending_refresh(false); + }) + .unwrap(); + }); + }) + .unwrap(); }); } @@ -611,7 +655,7 @@ fn create_session( .await { Ok(Ok(message)) => { - if message.accept.unwrap() == 0 { + if message.message_type == "reply_create_room" && message.accept.unwrap() == 0 { weak.upgrade_in_event_loop(move |handle| { let session = message.room.as_ref().unwrap(); let features_default = "false".to_string(); @@ -686,12 +730,62 @@ fn join_session( player_name: String, game_hash: String, password: String, - port: i32, + room_name: String, fullscreen: bool, weak_app: slint::Weak, weak: slint::Weak, ) { tokio::spawn(async move { + let now_utc = chrono::Utc::now().timestamp_millis().to_string(); + let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); + let request_rooms = NetplayMessage { + message_type: "request_get_rooms".to_string(), + player_name: None, + client_sha: None, + netplay_version: Some(NETPLAY_VERSION), + player_names: None, + emulator: Some(EMU_NAME.to_string()), + accept: None, + rooms: None, + message: None, + auth_time: Some(now_utc), + auth: Some(format!("{:x}", hasher.finalize())), + room: None, + }; + + netplay_write_sender.send(Some(request_rooms)).unwrap(); + + let mut port = 0; + match tokio::time::timeout( + std::time::Duration::from_secs(2), + netplay_read_receiver.recv(), + ) + .await + { + Ok(Ok(message)) => { + if message.message_type == "reply_get_rooms" + && message.accept.unwrap() == 0 + && let Some(rooms) = message.rooms + { + for room in rooms { + if room.room_name.unwrap() == room_name { + port = room.port.unwrap_or(0); + } + } + } + } + Ok(Err(err)) => { + panic!("netplay_read_receiver error: {err}"); + } + Err(_) => { + weak.upgrade_in_event_loop(move |handle| { + handle.set_pending_session(false); + show_netplay_error("Server did not respond".to_string()); + }) + .unwrap(); + } + } + let join_room = NetplayMessage { message_type: "request_join_room".to_string(), player_name: Some(player_name), @@ -725,7 +819,7 @@ fn join_session( .await { Ok(Ok(message)) => { - if message.accept.unwrap() == 0 { + if message.message_type == "reply_join_room" && message.accept.unwrap() == 0 { weak.upgrade_in_event_loop(move |handle| { let session = message.room.as_ref().unwrap(); let features_default = "false".to_string(); @@ -817,6 +911,7 @@ fn setup_wait_window( wait.set_rom_path(rom_path); wait.set_port(port); wait.set_can_start(can_start); + wait.set_ping("Unknown".into()); let sender = netplay_write_sender.clone(); wait.on_send_chat_message(move |message| { @@ -897,11 +992,44 @@ fn setup_wait_window( netplay_write_sender.send(Some(motd_message)).unwrap(); + let ping_message = NetplayMessage { + message_type: "request_ping".to_string(), + player_name: None, + client_sha: None, + netplay_version: None, + emulator: None, + accept: None, + rooms: None, + player_names: None, + message: None, + auth_time: None, + auth: None, + room: None, + }; + + netplay_write_sender + .send(Some(ping_message.clone())) + .unwrap(); + let weak = wait.as_weak(); tokio::spawn(async move { loop { match netplay_read_receiver.recv().await { Ok(response) => match response.message_type.as_str() { + "reply_ping" => { + if let Some(message) = response.message { + weak.upgrade_in_event_loop(move |handle| { + handle.set_ping((message + " ms").into()); + }) + .unwrap(); + } + let ping_message = ping_message.clone(); + let ping_writer = netplay_write_sender.clone(); + tokio::spawn(async move { + tokio::time::sleep(std::time::Duration::from_secs(5)).await; + let _ = ping_writer.send(Some(ping_message)); + }); + } "reply_motd" => { let request_players = NetplayMessage { message_type: "request_players".to_string(), @@ -1047,26 +1175,10 @@ pub fn setup_join_window( tokio::sync::broadcast::Receiver>, ) = tokio::sync::broadcast::channel(5); + join_window.set_pending_refresh(true); join_window.set_rom_dir(rom_dir); populate_server_names(join_window.as_weak()); let weak = join_window.as_weak(); - join_window.on_get_ping(move |server_url| { - update_ping(weak.clone(), server_url.to_string()); - weak.upgrade_in_event_loop(move |handle| { - handle.invoke_refresh_session(server_url); - }) - .unwrap(); - }); - let weak = join_window.as_weak(); - join_window.on_get_custom_url(move || { - let weak2 = weak.clone(); - weak.upgrade_in_event_loop(move |handle| { - handle.set_ping("Ping: Unknown".into()); - show_custom_url_dialog(weak2, handle.get_custom_server_url()); - }) - .unwrap(); - }); - let weak = join_window.as_weak(); join_window.on_select_rom(move |rom_dir| { select_rom(weak.clone(), rom_dir); }); @@ -1076,34 +1188,34 @@ pub fn setup_join_window( let _ = sender.send(None); // close current websocket if any slint::CloseRequestResponse::HideWindow }); + let weak = join_window.as_weak(); + join_window.on_refresh_session(move || { + update_sessions(weak.clone()); + }); + let weak = join_window.as_weak(); + join_window.on_join_session( + move |player_name, game_hash, password, room_url, room_name| { + let _ = netplay_write_sender.send(None); // close current websocket if any + manage_websocket( + room_url.to_string(), + netplay_read_sender.clone(), + netplay_write_receiver.resubscribe(), + weak.clone(), + ); - let weak = join_window.as_weak(); - let sender = netplay_write_sender.clone(); - let receiver = netplay_read_receiver.resubscribe(); - join_window.on_refresh_session(move |server_url| { - let _ = sender.send(None); // close current websocket if any - manage_websocket( - server_url.to_string(), - netplay_read_sender.clone(), - netplay_write_receiver.resubscribe(), - weak.clone(), - ); - update_sessions(sender.clone(), receiver.resubscribe(), weak.clone()); - }); - let weak = join_window.as_weak(); - join_window.on_join_session(move |player_name, game_hash, password, port| { - join_session( - netplay_write_sender.clone(), - netplay_read_receiver.resubscribe(), - player_name.to_string(), - game_hash.to_string(), - password.to_string(), - port, - fullscreen, - weak_app.clone(), - weak.clone(), - ); - }); + join_session( + netplay_write_sender.clone(), + netplay_read_receiver.resubscribe(), + player_name.to_string(), + game_hash.to_string(), + password.to_string(), + room_name.to_string(), + fullscreen, + weak_app.clone(), + weak.clone(), + ); + }, + ); join_window.show().unwrap(); } From 752e804101c4bbe9d88df4cbfce9494dcbee8a0f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 3 Aug 2025 09:38:23 +0200 Subject: [PATCH 0544/1117] refreshing session message --- src/ui/gui/netplay_join.slint | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/ui/gui/netplay_join.slint b/src/ui/gui/netplay_join.slint index cf62c93..840ac50 100644 --- a/src/ui/gui/netplay_join.slint +++ b/src/ui/gui/netplay_join.slint @@ -52,12 +52,17 @@ export component NetplayJoin inherits Window { } } - if NetplayData.sessions.length > 0: Text { + if NetplayData.pending_refresh: Text { + text: @tr("Refreshing session list, please wait..."); + horizontal-alignment: center; + vertical-alignment: center; + } + if !NetplayData.pending_refresh && NetplayData.sessions.length > 0: Text { text: @tr("Click on a session below to select it"); horizontal-alignment: center; vertical-alignment: center; } - if NetplayData.sessions.length == 0: Text { + if !NetplayData.pending_refresh && NetplayData.sessions.length == 0: Text { text: @tr("No sessions available. Please refresh to check again."); horizontal-alignment: center; vertical-alignment: center; From 0037c0f34461e58a09bef8cb1de1fe2318dc694e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 3 Aug 2025 11:56:12 +0200 Subject: [PATCH 0545/1117] Don't wait for signpath completion --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fae5a68..a8bc107 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -118,6 +118,7 @@ jobs: artifact-configuration-slug: "gopher64-${{ matrix.arch }}" signing-policy-slug: "release-signing" github-artifact-id: "${{ steps.upload-unsigned-artifact.outputs.artifact-id }}" + wait-for-completion: false build-macos: runs-on: macos-15 From 71f1d98132eebdb717c23be3aef62a8195831f17 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 3 Aug 2025 13:30:27 +0200 Subject: [PATCH 0546/1117] bump to 1.1.3 (#533) --- Cargo.lock | 133 +++++++++++++++++++++++++++-------------------------- Cargo.toml | 2 +- 2 files changed, 68 insertions(+), 67 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 916c68a..470ad21 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -653,13 +653,13 @@ dependencies = [ [[package]] name = "calloop" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10929724661d1c43856fd87c7a127ae944ec55579134fb485e4136fb6a46fdcb" +checksum = "cb9f6e1368bd4621d2c86baa7e37de77a938adf5221e5dd3d6133340101b309e" dependencies = [ "bitflags 2.9.1", "polling", - "rustix 0.38.44", + "rustix 1.0.8", "slab", "tracing", ] @@ -678,9 +678,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.30" +version = "1.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" +checksum = "c3a42d84bb6b69d3a8b3eaacf0d88f179e1929695e1ad012b6cf64d9caaa5fd2" dependencies = [ "jobserver", "libc", @@ -770,9 +770,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.41" +version = "4.5.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9" +checksum = "ed87a9d530bb41a67537289bafcac159cb3ee28460e0a4571123d2a778a6a882" dependencies = [ "clap_builder", "clap_derive", @@ -780,9 +780,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.41" +version = "4.5.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d" +checksum = "64f4f3f3c77c94aff3c7e9aac9a2ca1974a5adf392a8bb751e827d6d127ab966" dependencies = [ "anstream", "anstyle", @@ -1938,7 +1938,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.2" +version = "1.1.3" dependencies = [ "ab_glyph", "bindgen 0.72.0", @@ -2207,7 +2207,7 @@ version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7245ddc95cd0ae039b8dbb53449eb94110b24cbd47a32082970a25ad31b77f8d" dependencies = [ - "calloop 0.14.2", + "calloop 0.14.3", "drm", "gbm", "glutin", @@ -2876,7 +2876,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", - "windows-targets 0.53.2", + "windows-targets 0.53.3", ] [[package]] @@ -2917,13 +2917,13 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.6" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4488594b9328dee448adb906d8b126d9b7deb7cf5c22161ee591610bb1be83c0" +checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" dependencies = [ "bitflags 2.9.1", "libc", - "redox_syscall 0.5.15", + "redox_syscall 0.5.17", ] [[package]] @@ -3073,9 +3073,9 @@ dependencies = [ [[package]] name = "lzma-rust2" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900106b40381855c6acce992ac062513da7fa4acdb0a9324201da616d4812953" +checksum = "26175dd096dfaab9f4fbf577a668842ebc48374d4d06b154bffb49918e242261" [[package]] name = "maybe-rayon" @@ -3155,9 +3155,9 @@ dependencies = [ [[package]] name = "muda" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58b89bf91c19bf036347f1ab85a81c560f08c0667c8601bece664d860a600988" +checksum = "01c1738382f66ed56b3b9c8119e794a2e23148ac8ea214eda86622d4cb9d415a" dependencies = [ "crossbeam-channel", "dpi", @@ -3169,7 +3169,7 @@ dependencies = [ "once_cell", "png", "thiserror 2.0.12", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -3749,7 +3749,7 @@ checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.15", + "redox_syscall 0.5.17", "smallvec", "windows-targets 0.52.6", ] @@ -4260,18 +4260,18 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.15" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8af0dde094006011e6a740d4879319439489813bd0bcdc7d821beaeeff48ec" +checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ "bitflags 2.9.1", ] [[package]] name = "redox_users" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.16", "libredox", @@ -4438,9 +4438,9 @@ checksum = "5a2d2f3481209a6b42eec2fbb49063fb4e8d35b57023401495d4fe0f85c817f0" [[package]] name = "rustc-demangle" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" [[package]] name = "rustc-hash" @@ -4491,9 +4491,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.29" +version = "0.23.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" +checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" dependencies = [ "once_cell", "ring", @@ -4648,9 +4648,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.141" +version = "1.0.142" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" +checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7" dependencies = [ "itoa", "memchr", @@ -4692,9 +4692,9 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f9cf03fd1a56301a078ffb13856eeca76514626d78d059ecc598998194679e" +checksum = "98644326f9145490e4c194dd775a9a2ed7e84f8254415eb709a7924f52fcd7a1" dependencies = [ "byteorder", "crc32fast", @@ -4957,7 +4957,7 @@ dependencies = [ "objc2-foundation 0.2.2", "objc2-quartz-core 0.2.2", "raw-window-handle", - "redox_syscall 0.5.15", + "redox_syscall 0.5.17", "rustix 0.38.44", "tiny-xlib", "wasm-bindgen", @@ -5303,9 +5303,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.46.1" +version = "1.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" dependencies = [ "backtrace", "bytes", @@ -5315,10 +5315,10 @@ dependencies = [ "pin-project-lite", "signal-hook-registry", "slab", - "socket2 0.5.10", + "socket2 0.6.0", "tokio-macros", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -5356,9 +5356,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.15" +version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" dependencies = [ "bytes", "futures-core", @@ -5850,13 +5850,13 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe770181423e5fc79d3e2a7f4410b7799d5aab1de4372853de3c6aa13ca24121" +checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" dependencies = [ "cc", "downcast-rs", - "rustix 0.38.44", + "rustix 1.0.8", "scoped-tls", "smallvec", "wayland-sys", @@ -5864,12 +5864,12 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.10" +version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978fa7c67b0847dbd6a9f350ca2569174974cd4082737054dbb7fbb79d7d9a61" +checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" dependencies = [ "bitflags 2.9.1", - "rustix 0.38.44", + "rustix 1.0.8", "wayland-backend", "wayland-scanner", ] @@ -5887,20 +5887,20 @@ dependencies = [ [[package]] name = "wayland-cursor" -version = "0.31.10" +version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a65317158dec28d00416cb16705934070aef4f8393353d41126c54264ae0f182" +checksum = "447ccc440a881271b19e9989f75726d60faa09b95b0200a9b7eb5cc47c3eeb29" dependencies = [ - "rustix 0.38.44", + "rustix 1.0.8", "wayland-client", "xcursor", ] [[package]] name = "wayland-protocols" -version = "0.32.8" +version = "0.32.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "779075454e1e9a521794fed15886323ea0feda3f8b0fc1390f5398141310422a" +checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" dependencies = [ "bitflags 2.9.1", "wayland-backend", @@ -5910,9 +5910,9 @@ dependencies = [ [[package]] name = "wayland-protocols-plasma" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fd38cdad69b56ace413c6bcc1fbf5acc5e2ef4af9d5f8f1f9570c0c83eae175" +checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032" dependencies = [ "bitflags 2.9.1", "wayland-backend", @@ -5923,9 +5923,9 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cb6cdc73399c0e06504c437fe3cf886f25568dd5454473d565085b36d6a8bbf" +checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec" dependencies = [ "bitflags 2.9.1", "wayland-backend", @@ -5936,9 +5936,9 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.6" +version = "0.31.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484" +checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3" dependencies = [ "proc-macro2", "quick-xml", @@ -5947,9 +5947,9 @@ dependencies = [ [[package]] name = "wayland-sys" -version = "0.31.6" +version = "0.31.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbcebb399c77d5aa9fa5db874806ee7b4eba4e73650948e8f93963f128896615" +checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142" dependencies = [ "dlib", "log", @@ -6167,7 +6167,7 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.2", + "windows-targets 0.53.3", ] [[package]] @@ -6218,10 +6218,11 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.2" +version = "0.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" dependencies = [ + "windows-link", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", @@ -6423,9 +6424,9 @@ checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winit" -version = "0.30.11" +version = "0.30.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4409c10174df8779dc29a4788cac85ed84024ccbc1743b776b21a520ee1aaf4" +checksum = "c66d4b9ed69c4009f6321f762d6e61ad8a2389cd431b97cb1e146812e9e6c732" dependencies = [ "ahash", "android-activity", @@ -6885,9 +6886,9 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9e525af0a6a658e031e95f14b7f889976b74a11ba0eca5a5fc9ac8a1c43a6a" +checksum = "fc1f7e205ce79eb2da3cd71c5f55f3589785cb7c79f6a03d1c8d1491bda5d089" dependencies = [ "zune-core", ] diff --git a/Cargo.toml b/Cargo.toml index e0dc5bc..49eee74 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.2" +version = "1.1.3" edition = "2024" rust-version = "1.88" From 5aa9a65e7b4d7df7614b40231898ef99017e52df Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 4 Aug 2025 14:59:50 +0200 Subject: [PATCH 0547/1117] add support for save state slots (#534) * add support for save state slots * add log --- parallel-rdp/interface.cpp | 19 +++++++++++++++++++ parallel-rdp/interface.hpp | 1 + src/ui.rs | 2 ++ src/ui/storage.rs | 11 +++++++---- src/ui/video.rs | 10 ++++++++++ 5 files changed, 39 insertions(+), 4 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index cef0062..8bd7453 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -200,6 +200,24 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) case SDL_SCANCODE_RIGHTBRACKET: callback.raise_volume = true; break; + case SDL_SCANCODE_0: + case SDL_SCANCODE_1: + case SDL_SCANCODE_2: + case SDL_SCANCODE_3: + case SDL_SCANCODE_4: + case SDL_SCANCODE_5: + case SDL_SCANCODE_6: + case SDL_SCANCODE_7: + case SDL_SCANCODE_8: + case SDL_SCANCODE_9: + if (event->key.mod & SDL_KMOD_ALT) + { + if (event->key.scancode == SDL_SCANCODE_0) + callback.save_state_slot = 0; + else + callback.save_state_slot = event->key.scancode - SDL_SCANCODE_1 + 1; + } + break; default: break; } @@ -289,6 +307,7 @@ void rdp_init(void *_window, GFX_INFO _gfx_info) callback.emu_running = true; callback.enable_speedlimiter = true; callback.paused = false; + callback.save_state_slot = 0; crop_letterbox = false; } diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index b26933a..7c69061 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -34,6 +34,7 @@ extern "C" bool lower_volume; bool raise_volume; bool paused; + uint32_t save_state_slot; } CALL_BACK; void rdp_init(void *_window, GFX_INFO _gfx_info); diff --git a/src/ui.rs b/src/ui.rs index d529ae8..ddd4ca2 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -32,6 +32,7 @@ pub struct Storage { pub save_type: Vec, pub paths: storage::Paths, pub saves: storage::Saves, + pub save_state_slot: u32, } pub struct Video { @@ -125,6 +126,7 @@ impl Ui { joysticks, }, storage: Storage { + save_state_slot: 0, save_type: vec![], paths: storage::Paths { eep_file_path: std::path::PathBuf::new(), diff --git a/src/ui/storage.rs b/src/ui/storage.rs index ce7f00a..f91a1cb 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -199,10 +199,13 @@ pub fn init(ui: &mut ui::Ui, rom: &[u8]) { .paths .savestate_file_path .clone_from(&states_path); - ui.storage - .paths - .savestate_file_path - .push(prefix.to_owned() + "-" + &ui.game_hash + ".state"); + ui.storage.paths.savestate_file_path.push( + prefix.to_owned() + + "-" + + &ui.game_hash + + ".state" + + ui.storage.save_state_slot.to_string().as_str(), + ); } pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { diff --git a/src/ui/video.rs b/src/ui/video.rs index ef2a8fc..0594d8e 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -143,6 +143,16 @@ pub fn check_callback(device: &mut device::Device) -> bool { } } + if device.ui.storage.save_state_slot != callback.save_state_slot { + println!("Switching save state slot to {}", callback.save_state_slot); + device.ui.storage.save_state_slot = callback.save_state_slot; + device + .ui + .storage + .paths + .savestate_file_path + .set_extension("state".to_owned() + callback.save_state_slot.to_string().as_str()); + } if callback.lower_volume { ui::audio::lower_audio_volume(&mut device.ui); } else if callback.raise_volume { From 1eb15039812f9092a26a50d8c25c947a0596b32b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 5 Aug 2025 15:59:49 +0200 Subject: [PATCH 0548/1117] Onscreen drawing (#536) * onscreen messages * more * more * more * more * use sdl_ttf * more * more * more * more * test * mroe * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more --- Cargo.lock | 52 ++++++++++----- Cargo.toml | 2 +- build.rs | 5 ++ data/cheats_enabled.wav | Bin 102284 -> 0 bytes data/mempak.wav | Bin 93164 -> 0 bytes data/netplay_desync.wav | Bin 201164 -> 0 bytes data/netplay_lost_connection.wav | Bin 108044 -> 0 bytes data/netplay_p1_disconnected.wav | Bin 97484 -> 0 bytes data/netplay_p2_disconnected.wav | Bin 103244 -> 0 bytes data/netplay_p3_disconnected.wav | Bin 101804 -> 0 bytes data/netplay_p4_disconnected.wav | Bin 101804 -> 0 bytes data/rumblepak.wav | Bin 99884 -> 0 bytes data/transferpak.wav | Bin 91724 -> 0 bytes parallel-rdp/interface.cpp | 76 ++++++++++++++++++++-- parallel-rdp/interface.hpp | 3 +- src/cheats.rs | 2 +- src/device/controller.rs | 4 +- src/device/cpu.rs | 7 ++- src/netplay.rs | 18 ++---- src/savestates.rs | 26 +++++--- src/ui.rs | 27 +++----- src/ui/audio.rs | 105 ------------------------------- src/ui/input.rs | 20 +++++- src/ui/video.rs | 81 +++++++++--------------- 24 files changed, 203 insertions(+), 225 deletions(-) delete mode 100644 data/cheats_enabled.wav delete mode 100644 data/mempak.wav delete mode 100644 data/netplay_desync.wav delete mode 100644 data/netplay_lost_connection.wav delete mode 100644 data/netplay_p1_disconnected.wav delete mode 100644 data/netplay_p2_disconnected.wav delete mode 100644 data/netplay_p3_disconnected.wav delete mode 100644 data/netplay_p4_disconnected.wav delete mode 100644 data/rumblepak.wav delete mode 100644 data/transferpak.wav diff --git a/Cargo.lock b/Cargo.lock index 470ad21..12efd05 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -296,9 +296,9 @@ dependencies = [ [[package]] name = "async-lock" -version = "3.4.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" dependencies = [ "event-listener", "event-listener-strategy", @@ -1443,9 +1443,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "5.4.0" +version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" dependencies = [ "concurrent-queue", "parking", @@ -1698,9 +1698,9 @@ checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" dependencies = [ "fastrand", "futures-core", @@ -1940,7 +1940,6 @@ dependencies = [ name = "gopher64" version = "1.1.3" dependencies = [ - "ab_glyph", "bindgen 0.72.0", "cc", "chrono", @@ -1958,6 +1957,7 @@ dependencies = [ "reqwest", "rfd", "sdl3-sys", + "sdl3-ttf-sys", "semver", "serde", "serde-big-array", @@ -3867,9 +3867,9 @@ dependencies = [ [[package]] name = "polling" -version = "3.9.0" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee9b2fa7a4517d2c91ff5bc6c297a427a96749d15f98fcdbb22c05571a4d4b7" +checksum = "b5bd19146350fe804f7cb2669c851c03d69da628803dab0d98018142aaa5d829" dependencies = [ "cfg-if", "concurrent-queue", @@ -4596,21 +4596,39 @@ dependencies = [ [[package]] name = "sdl3-src" -version = "3.2.18" +version = "3.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9b802554a6d768330a2c9cd30849811676da53bda1b5bb78dfd3a402ca6b55f" +checksum = "bcf3cbc4d49f7ab594e9f5915fd7a051a327544077a8f1df83411f063df4be08" [[package]] name = "sdl3-sys" -version = "0.5.3+SDL3-3.2.18" +version = "0.5.4+SDL3-3.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "573534f614334b7bb6f7bceae86448764fcdcafe92d75482092810cc664ece8c" +checksum = "5c4f7f348dea346f67f38bc1392bf1edd9250d4c586479778e849f6ee61af2d8" dependencies = [ "cmake", "rpkg-config", "sdl3-src", ] +[[package]] +name = "sdl3-ttf-src" +version = "3.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28923d2ce72ff317d8eb7cec97ddfb8f351c330d7bcbf8c76e91332122c93b3" + +[[package]] +name = "sdl3-ttf-sys" +version = "0.2.0+SDL3-ttf-3.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1d8477496fa2b081fb8f63cf8d0a9a9ba6a7a8f2a21b87e7d13d2ab6d73582" +dependencies = [ + "cmake", + "rpkg-config", + "sdl3-sys", + "sdl3-ttf-src", +] + [[package]] name = "semver" version = "1.0.26" @@ -4733,9 +4751,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.5" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ "libc", ] @@ -6776,9 +6794,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +checksum = "bdbb9122ea75b11bf96e7492afb723e8a7fbe12c67417aa95e7e3d18144d37cd" dependencies = [ "yoke", "zerofrom", diff --git a/Cargo.toml b/Cargo.toml index 49eee74..92d97a7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,8 +18,8 @@ serde-big-array = "0.5" slint = { version = "1.12", default-features = false, features = ["compat-1-2", "std", "backend-winit", "renderer-femtovg"] } open = "5.3" sha2 = "0.10" -ab_glyph = "0.2" sdl3-sys = { version = "0.5", features = ["build-from-source-static"] } +sdl3-ttf-sys = { version = "0.2", features = ["build-static-vendored", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } rfd = { version = "0.15", default-features = false, features = ["xdg-portal", "tokio"] } tokio = {version = "1.46", features = ["rt-multi-thread", "macros"] } spin_sleep = "1.3" diff --git a/build.rs b/build.rs index 9a326f9..808c95a 100644 --- a/build.rs +++ b/build.rs @@ -64,6 +64,10 @@ fn main() { .include( std::path::PathBuf::from(std::env::var("DEP_SDL3_OUT_DIR").to_owned().unwrap()) .join("include"), + ) + .include( + std::path::PathBuf::from(std::env::var("DEP_SDL3_TTF_OUT_DIR").to_owned().unwrap()) + .join("include"), ); let os = std::env::var("CARGO_CFG_TARGET_OS").unwrap(); @@ -108,6 +112,7 @@ fn main() { .allowlist_function("rdp_set_vi_register") .allowlist_function("rdp_update_screen") .allowlist_function("rdp_process_commands") + .allowlist_function("rdp_onscreen_message") .allowlist_function("rdp_check_callback") .allowlist_function("rdp_new_processor") .allowlist_function("rdp_state_size") diff --git a/data/cheats_enabled.wav b/data/cheats_enabled.wav deleted file mode 100644 index 365ecc393c49e8b5288f16f90183be521b8b0ebc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102284 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%0DG!DICi_=X0+MBxl#H|h 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
      rlxlEs&2Y-<2S!mNqk1Ge#>tjHivgOv6pLj4?n@ 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≫U0$pQu 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�~HxVH5Fyhm&(KZ~OWdshxdKLVqsfqFxRB1$0t*SB=^PA^)o0Id;x z&IDaaGEp)W&$%!h@i~qZ94j%?K}`nRHRvA`{HG8t$m8lYd^-&-SOK39sPUj%jDb4K z!;ykcCq5iE=)>g4Z(KM+A-*M`I2asVeQ2McD~*8C z1aQ?Zl#;-=gYO2tYl7vFP*XBWQXIcYqyV_I>Z|Cb`@_`{-xOw=@qZwI}CG@K{+ghILot`wWVC`-`A zCU|B*r*LEyts5LCgJst7POv1wc?}44c0M(QnUCL^WUFAk0L8x2g?z3Mf!hP zg3d@m7o^~I2R{pbH+a6F!;pdV1RagMXu+V9QP6QHc&`V`9IP!8SEl3r|9edZORnMF z|Cc@JXB4cT;Ge-eAXsC;G6r7-9g}Q0fAF9G*PI=t47!yCovVUQUcvSV)+GC1tp|@E z>~q2L1wRXxIaqVSBk=$A5g+O-IAZ!y7XjScBF0<;qo5Q0p7?KE4c2cyzV#99@EpB+ zEoO7mjJ@j9fT%X7zGdsvD-BJ1WZb~s(Qslo;*55}M|36^!TBW&vnD6>E;-m}&N*1fs2xW%PjlWj%Bqf1CBmEr_0W){6yx4fypR$wkyPY84T$UsN;9 zoAj^LY4f^v$wUStF^7Dsa~LVtqU;rjJLGTdG^QCMXz^wXxRK_7i?$9k`sTzAJZt+i z6WLJumGPSzuAMT_tKb|H57yKLW1RlRY{7n_{xTjaUzJQUn>j%bG7=PI5z*!OtMmi- zOWrYtQ+vn}I;-r!9$Yapni!+^GX@Z?snx~~+0gq^JE*eeJYyu8YHou*Yy_E0jbR=U zSljBy;5I#xnm|4_o?(~$71fHIuIFj-)4VDq*xQGADyod722LdzcrLg{n-HXY+{8V2;O9X+j2_qw9)6j^J44G;%8aXtxgh z0C6!QoZo9_=>7b^)Dry=HIb=EZ8jx+6%`8qma5ck#1IG=#$TyndAw& zFF8Z)B~PL12yskp#0iTVN7VhwW_5}=5EOvFFk&t+7Z|GAOioem8w$KnYMYz&-ug2l zi)u=xk{h7O{S%+}Huhr=(?Yd_!{t;s?2N=p_c@+41CarfM1MohFuyel%+>T>su=ON zc2oZVCr(p;u6H!Qfg{Z%wA}!;rm|SQWTayLf7;Ns16p~+bq+&!GTc0iT4@WfpDAz? zs!u+lE6}Rhz_@F)1tqOCTz^{8N$hI&0(AyXjDBh-)ZdBBOKJc;l)J)A2S;cVT@^d) z8SFb^Cee+4%w6ItvP+l%lh4$J?xZVRb*Dp-u?IZSFuEjsbfV~8AZ~luqg*K#j@r=a zMzCpI8?GX=0TJJ8%t`id_BZ(BzNA-R*Ic4f5rHtYD{3E5^~a;%-Bu?Dj(9WSeID%{ z@6GnCcK=p1x@cz6w4(cko`SG~;ssXsyVb=22oc^oz$q{d0i&_nxl+{mw$6r4WtGE}K*yER*Aw zoya93BtQ7W7vRTy2gIo1a4_D^hw&dd8{dYf`Be4jM{&!CN;EDjeBNDslO&$b-0 zOtr?@cG^cdW`S!|*|Ep*2lx}|_NR_5&c9vpuF9@j&Io63*9x#y7CClV_Ht>&BB-{e zBjy&)&15r-B=?xi_g{La&B^*cH#;XfJ>+xiU#E8(Y$HHc~u)wNi&uWI};Cc~-oltwq=Y6v62XQ+c6p?cC)%TD`I=PeNS zeGcBa8^n&8_H?)!=^(U^v+uGDvh0BK_73O}h6oC`5US!s^aOeqcuJY@x_6O(5QoiB ztjFsR6G=Ni?EEqASHw(0gnyWx;rk6brG{ss3{ z4oeHG5dLfUZ{ZUoLW+$nHZC$ca!};5$j8ODMof;V6Hx(7;}zklp=^lTHb5G{Z=$=K zE7Y6*Hog{tukvJhvnMy}Ys$-n?>=<=IQLV)0&VaUF))8W5H94&S!>Yoy>Qk_d_C5jb47dbC7Eb2kj*y5*)cPt(o zSwF%b^1w0CHp9BbdIyBDdeRbp5%Y=cMidz@^o^QJJumkRD8AOd@4W%f9M1~(+oDf} z8K6v%U{0sFr+J2Wr+Qy|9(iIsO?_mbhVoI}uOBt;m}7_<x*H?t(^|C z+Zp?DN0H-SM_0ZQzO)lP)MHDy6L+>hFPkYfMR>1{@&O~WFjM}KC+8q z*hAbF{*n+Oow0PZMZi!q$=No<8X5~q;JvV6;YLL1$e75)$mGZkQP-n3MD2>45$TBf zHfnV7yr`y;L}bnI^5=)C8nU&Kehe);0%is*VT4!;mzU3|SGcHHaF zubRG!h;170Ose;J#McgAyL_qnMfv(?W>#*vJI#Msod~5?x;Y&#cMF)Q!X7K_TnJ~Y z6(M6oo#8_wB8v4YrbN7mP$Hs>y^kCeB}d*V_H9JvuxcUCohv{&S3uS6;V1_$mFN5b zb|wfl(ezPTCGm7LMZLO~s;rUQA=8`-lnt!&Lv84ruS(KyMhB_w@iVP{T?wJee^9~f$zvAKtr>iS&bmd26(m4qv}JgAYwMQ z80zI_7_)DH2GbXM%3Wk}DxJ!t6PSUl2F0iyRFA#j(@c|o0JZ5?>q*;P`x3`A=Vs@5 zXTaIsH9ur%=$~OX!}^D>4flc+9~o99Y)P0WjEi^@ej}`7=;@FLAjbC$&2V&y2O3c(VtD-IL)iLXRW%!Ya^S{h|}4Yg#s;5~|L%f{joaRff^DSi-I z2}}6n+?Xs?ga_Al>MOikQ+gNG=>Zo=62`R^9Jt^Ou7c0ufz*s^bP-*$QT$2;*|eq8$xdg8RC ztsku)n|;jv6#2DE*228J{B!wQUK`9p6wfTVP_IQkq;rwQdzndRYVjSVpP&H>645-) zL9TtSogwo>8-%_IjR}1kIty+wb;9q3{T5m$X6>vG1cpfH zFD{~G+cJ}x-?5fCiXPOJz0Y1?ePA-(LoTh%br5>u9IK&|t17OClV3B-O50DimA2>T z)z@u%tjn#Gy)<}oUi(&ijD5ImG>G9evidLCT3H8yJfvBgTXyk#p)j~XzM-)Dq=%^g z_&Ezt?Xgh7t%b*e_8+3)G3r+)UAKJMEa|bif6}=h*6;?uv1p0mJgEYi>w2upVoLd~}Jf_0ACI zCs30I+Lk~)7-O4eRmCS@rToHiAgFxdMzi0-19K%Afi>z$#9NPJXXufUq9=pXu}7<~ z?|@!@jb_z6Y7AV+dK!#T6=acQ{Q;B@HpI185lL9HUWA`db&3G#<|8v4{DKsa#ZR(t zxhxR8Quu6ekSYns1Xf%qb^+DOCpeHByUR{}Q#nb51* zhHNDekse_V$b+IWkSUJVt%;1>Ghj7MVLC9?ndwYj{%A^Gj{#%C``%lhn1@g<-B zbmo(mOr~5*shvFjW5a~d4~~T89|t9sPx|R&`;YcdJ(EX)f%hy`Nqzr$R@%di*4a05 zXXfV=^ejv)yijEIZ1-7|gZcxrGh(!}iJ4?QdM2C1{{)uhJL$5;ZXIDww~oLFlx08R z*z2h3h`0BLV&H>gs-uIwA;#ha>j(7R%hpYnD5;aU5^R2VP*)0-_;PML+m~KK^`KgT z;aLOjZ)M5KSSMFUL}a!ZfZM9oOg1*bxp(zqn9EI*v@kEeEDo)KQ-iCq^Lv9J&ttHba>EhC%|?qlur zoT~?=ej?qJJ)zE>C4Y)1T{ozLwf6_4kzC zsk6SMehs8;PLIkMli4Y2d3O8UXSwb2iseg%>Fzx5E&tQNI^@rcSGQ=p^(^BHR<=Ju zSJ4gXiu-I?E{(4zU9!}%{ss+hH!y>zK*JFNR$&e6zm^h~ky4~&0Y$mBG)nwNIKXWI zGi)2T3-!@~<>3`w6B>m{$N`^EuZQ35P3$t&#L7Z9myxHaJK#Z#MQnOJahNoytzeh^ z4L(&Gy%n_J0@lyA=Vo#(`P*QWjRuQ8Pi!VV6@P*k&H}6vBdmk1R_ia8)e<~5pKaOOp(UvT9Yb|wzhB1FVmg<@o@9CC*$1ifzc2-G@x4dKgN$&WcGDtrmi|Jm zqfUXXvW$L8?_jPmm!Ng%2M*~}<_SiOC2T)#CAXbB4>H?7Y^9)|2zM9nw7`fr7$m31 z>|E9Z^+y>dmTrcXFHe`E1t_U5BHv^hqU)nU=-UOVR3_qgthvd!Zg`EBMp?LYtu}1N zHE0+oq9&?r@Md|*p|J_{=of% zR(K9~h8G|TjO4fSK5jji1VzX&^bIdJ7>XU9!)hKQVFjio^gq$a2JFM`U|421=1ch) zduO1AMj`gq3p$zItO8nyliP_=^(g-WDwBO+hO`hPL=&TK6X?;0fjF_rvf2`ASr5I@ z8hG1&BOQ}!Lti}|niad$QrrzE+%W)s9gArUS!rnk-m|cN?)NGQBl-7dH^&SC81pX85*Vr%r5#Avm1^vTXBy+ z$4uZE-Jj_Jr=HIo&(&onyoH^SMY9amG)9& z^=n#H@DdNh>+1pdouBYYZ_QK-1GT`ldKWmN3{u+2Ljyx#4S&mb&HKIgnx~UD!8;O^ zytSTacTe{^_fB^ox1*>{;gLeQa6{1`cPGzB&oz+q_PAq;P84-^Pw+JMt@f`9%n!Wt zSNC6pYUP=~f?QKMqPWyt^^P`3AE1BLj%dNT?+K8K%3(_sirvDWyVSU_Bc(*o9; zIcQjFm8%a zAkJh3?wptfRZ&l9rj~$_>HzJ#4ET(5!O2+1uBU_jtu=R(PKK*UHD(8#L>e=vh^f>o zrU4a-Sw#=BDZ84xOotJ_L47q5*vzG0%2!vb!;yQ?!CVJTUQdcN6V;~Lzwk`FiF^GnHZYRmaQ`nDX8))q5ffi$ zZU-grsUBheVp>5UnrKFv)7AI#X{AuFOnz^k*2f?VevR5(sjnVXLghhPFJmzXLB+vF zyQ)&ke#I~ElD|bHFip|XI>q(t+DP@B`c~fPF9_6DRCPV{W<8X(`UJRwSC-5A)0HLK zd$4hqt3~=bLo{mZ>GD$f7wxt29UP2k?HltL_1;uK;JJd8baCScy*Tn_BH#xuH%<|n=}d&1nH-XI9^0V$8i5lf#(v}**hk2+*D27xJ!*({7TY6lu>*>rPis~U?{>2&Ib5n@*7_LH|1n{rGm zMHbT+D-WQ;$NeqcJhC z&bWw`9-j1CnsSCtCSU6%)z?HJIYEA^a>#BAF>V^8*)7ywHBM3V+2mp4k*2Fd^yT^) zx+7UujYFJvD6w1_ZzL&8^p$WmU56;Mi~UNKW1hl?OeR+t167LpiGQHv7wU8`S1T&j z`$9VezL%=myuSqq)8N-i9jG|$6;uQRV4ZR};8k0bi_Axah5CS~{wl+74glFIRNH5k zHAiV9;2t@WyC+)Ar|M~aBQt?K;+v~}q$^2{n7i_B=tdgRb>+s&7dX2=gtBRXc0mYZ zXKAv$%qWGm$OEmEcAw1PO{$(!)7Zt@`9<3Oovg$Y zv-m^$D*q7H&F>JeXuCaA$bYT*>{QPk-Ais}`|=UgU1b)rOt@t9(kC&M&A#+gBU(=O zXOjDEyUl3qxtyk|o0sK$ZGzE4XP~ZXN^d1*>09UsqZj-L#xuWbKYQP3QRufWy$a^p z*%}?Num||{^3K2-Pg|jm{fpc5y*J(?iW5*=N^j~kTS=FR_Y6pg@FOWf{$rNp;;Alj zHJu|_!XDU1IczMGWvKEDqkv`t7kn!?xZe;XwKL3Z=unR6Lx^yL*E0Oe;NeqgpMoz?nWKc`~pg9vSJ`JdWqtqCS*Z)NuU<)}y9+wSkQvCy6ITFCd5l%*A|4qIT|=h-U1Hse?~87EgF7V!&MUEXa} z=Q8vufg`>;pwm~^TF7l|gSklG4(2&V`8CV{*5V)HElow(>I?O~O?(%)1gEGqDD0-6 zu#cskzSi8WunZA5^2T2MZvA{pM@IA6|i$7*M7QqHL8dmg%;y1(rW79b-+&tbihD=y z&`6g!)^izh zqPv3e4SUiuoBqXf!x+yUAx2}3m*wv#Pb7Y}6>?SNtKP@#G}mSIRDL^Sxz$D0B1pG` z+3J`@ZYtWBZ*i_=Kl!J5T8VX>t-Qav|D|VIXz`|2J+FeZ9AB7iXwz(~!sqBMa(sbp zWd!DN(hxH)Dk8LWQa|_c@N!{awCJqOLLJg8f3JMUcefOJTKYR!e^;CQ{YcqX`z|_Tqdt3mx|ZQe2F*uMPy3D zbJE>L#1iL$K$GlAwpyVHa{a9FzPHY=QU~K?(L`gVqqe>YyTog9a}cR+Xm74W7etcv z?eDBtzYZlQI#w}%5?8Z#>amVt!i)TP&w@~m{TEz?%Zw+S^!LmDf!i3-U7L{UR`-PU zv0O{5Z#K8LCr^;;0tfi91d+c&Xw5wKr&>?wy#ndrly&1?k+TAw{kO#=X-{rD^_F-L zJHz3gChR1ApfFbL>Hi?6(xVH@X*0sV6RKyG$$DPwyD+!5IJ2I5J-oV@lzk>gw)PYj zvETXE<(75kSTE|U-1$Xk!?)R+H9UD6TlVVZ3*E*X$3okQ+;=$}#jTEh#Buiq`Ca%gSnteW+ho=jHcG9P z<^>tXu&^QKk^iyxp3zkm-y85b=k}VOkOT<53rLYFB3&ucL_|PPnxcq+D2P-+1VN<; zSO8HJ1r$-L^xmb{Kp-R`Aw9Xtt>>KgdG7qO{_9=q{rY|*cjcB-=FIH9XV1)@y`SyB z<7wzV8eJ=xRhs5)?rde*9jaA)L7g5KFMpPIUfL2n$(~ghQ8d`{x?_W?=8Y?@6&n-r zO=-uH-R8EHo-L{F$%y+zpPR1*KZ<(aKdY>hYoENYyu13DQFbm;nioAIPc0+p1wo^}!QX(ckYFTnr=@ktx<${L#zn1o{Ir`Po#G;0gg^qT<#aYK}3sXu$ zmi#~cvts(#{&}>q@L;90YR8hvawgVk^W|pJI$tj-%~>@#3urTqLT6oFT-nlxh|j#M zq!`<4Q$4a_VR>Kg-snw1Z`q$px46SVWrnbcqe&uoKjhu_N=E<|P zm7d(dUaQx9MtZf(8jN#g8LDCLWwC#Oxt(>4T#)m*Vu;W+lO7L*=7YKn1o=Cm=L;Jd z7CEy`3(MDg&gdT{^awP2csX{Ndj)J6ZKNI6zk@zsihRQMoPVdUwd*?2e7-c6`+J%q zj17ZB%q@+3${dD(u`oDNsieN3`AxI*&1GspaTdonExh&U$EZ#b%gySeqj>@2%F2Gn zsjOj{6XVsVmS*m|-A%3C=%m?xZFJGZYK2vXr~X~qHolhL##33EfFBMxXdZoYv{jb1t<&#}!;uaUo&8X{iNA5LLDt)@p?;7H+Qe0Q9x$)g`S1Em+FRDulBK-A{F{BCb=YG?-e>P8?m+}VQnx-M?v`GVontPDXy~h@pLA);{rv9(dmXZ6k8BAb-q_wV(DCupPA$e&xa3iP z%jK$B#*gy@fk~Emj@|ydMfq}d^E>)N!vOuTI^X-O?fckK9+xM_GAd!dR44Ol=)L5( z)R%p4`EOb@drIJ4{khWWj+K_6Z(s3sX|H9DX-c`F@Jh7Xw!=5BylG&qJHnn-oLXL> z##vqnj@Dl@H1b?a=qcAK)1_B!TMXu$tAVwaMfSs<_sd5|OU9U-oAy)gkMuT$Dc&BH z+Zs2QW@IjR4X<*qxJ~Y0cYaD=V|4a^1ubJEqc=Q$si2Fkn(>PHw8`P`U(`GJeZo51 zwd}ivwVYe5uOTw6X6daMdxWQ~Ls|9E7|T=2X0=V(T6MeWQu3xylSjc&lZeN*p{1XO zhH2wmUA$fVO4KTY%fF@UCx;=TPT{D>4P%-_=I6D}U+vr)wOn3OJkOu>RP$U&`<2 z+8p(%e__EzH8)~~@_KoHZCb=kOF@~%vtODP@vDD*QKa#aa>l$`trHj{S3#zsSf3>* z8Jikrhb{#^^*tq5lRgNHwqLdD!7;w=q1Cns*NdU9`PKX(*9(#F`j(X4uunxkwG+WT zR<}{gQnfMB*F!fwJ8jiWIlfqRq`bj4+VFj7n|c~6v2ilydgULf%QS~F&DdKWt{Jg{ z_{Z1Jl4%(2xuDFpPc|fkzAJ2@{88_k{$AQft#Rz{*0_v+a^kEts`aq%yLY$jrI>^9 z4??T*7w26@HpoN4e}Zq7@2Nb|Am`PSs|GJ8O^P0q(J3>-_;JdN@^d*K8lS0l!&IE} zw(nGQymMntf@fviXU1_w!_>8MCu@?&rksx`@%SILNHRp;&#hGSjI=vyoWWi`Nd3zF zj_Ct<>fAScRJuSakG^LZU(~?~LlE(#9twN+ZU|5DrKPScM@Eig3kP4GAju@+cv4&x-jI#o({G+6OdyIhA%uNJIB+}IhTG4Q&+Mp_`X(UR4w#+Fv8 z^yAVh(M4)Mb%EMl8fp8`v0H6WTpWt99yUb#s>^K+3t$KBVm)A-;tTml+dhtv zgRSACw^myl_&w;eoQZEPnF_x~EZ8T?8IP&FugMe9!?ZeZr>u8GzvSxKeKL1O+(>E| zXqva%aNBV}Ze21`bwyq_{1_VLnTQ-=?UCDPtGA`{jA?`UT*-I7sWzkAEsxCn-e^ep z*pyK=*tf#CJyaJ_DDP;)Z1)}eeEDUQEazR%2euU@O9u@D)nr)oCV9I-i_Q%;RrYGf z)gRRtLOTqn{g29HG?#6lE3NePGJ~~e^jQCQh1-o)ZOu(jl_}oC##da^{FY!;#4o|$ zq*0a{Y6mso+Z325`=xWp#M8wz$&f5x2Kuo4iZyfy7jLcK&@zRCC z4~@%|Gr{-OA;{jhL;FyFU#bEGoxg(*y|McD_Lt;hPitka6ln-q&l=`P_mRW7TWFsp zMQ(_Eb)V^7j1AzcTGhN+?;B`o=mW34D?vvfL;uilQQfa4*;V7i@>p-Ob+&U@V3}uo zXp3cxlI?$>wUwtD9L7V^>_9c;6X2q}?EA?7BJ6?ntxeVG{;lSrmNp?p{YvU1uh+ey zpAb)099pbL$iE`iti5HSaU*;%Z-&a08d93Ch2Je-wj4L_Re$v6sy`W%+e+Q|2zdtv;XB)-qNy`__fl0q>>k`g;3HrIY`&&{fk(YjgPqFv`#9Ta_=R z_e1^En#LC9;n)Q!M5O8Bz*wz|9z+JF#XtfIs=WhA`m6FxU@pI`_fllTJb4t5_5Kc( z0dR4$woz-t+%d{i!Dj!qOoR2Wf$@C?83MmmYw7dhc`-^} zD%I0Bs&}<4M9WoD?}UuVaxzppq|}x>1LM1)^uFOeV=sAku#>t0XgoQ3BmGBdvGRqX ziLwPgOJs+OTnTYY~41f3}-LJM)YiNi-LuR)Hhzw{9)V4Ia zDfUax$P!Td_rl-nB0OcgD;<#&#EU$%-IZ3#Soo4YQbro?86G27Oh8eLGmSn&iNS`v zBLhs?hAoIj->6hF<{599Wb>!kkr@vEzeC7#VlusMI%xXM^fUH8&jEkRV2VZ7n)a3q zOFnX%>^5ICr<#|T@0;se57~5Ey7d%L+KvMID--!|rXnaL&0;lwh~0o$$g+769?b9f z-zy6i2MY$~FU)_VU`@W7yXf)q>?2uYGxj0_Uyt;44-R6-()Mu4!;c z#JqoU^KyU9`##@RxVkv9tiP{TFi(9`It|Nc2gQ!;&MVDJv1_#2k_{gruYI+%rfY{Y z!a3Y=&-Q`kXVVLaaz16)YSAy-;0z_y3sdRwPuG#!0B)!0_nG-BF?B%w%PqnYKS9fGPhB&7>n>pt> zCfhy8n3NAMf)MtPn_^#im324p@SinJFzSXGhF1*V8p@G_$zePWT-GI~{l@38JJ)8z-}?!Wr*mq#`8=ak;Y4C9fl zl6#ih?Hb{*I2yQmMHR(Y9~yKKOegwx_9Kq?x*2D zFx9!
      aq`ICK+^-Ysmxv9+xnSx1y(f(t|`qn5*Co{+pId1>;;$%f?b6VJeh za$rJKC41t<#5WRe$4`rFXe#vX&%OI_?}OP77N>VfUz>I|b?D7gR|Eg0p7tNzez0i& zv;%R6B99av>v-z(^Tw-vZoQToxU>0Iy_+{~=HBg{*`i=!`2lsK@wlxfaKW^bpP5iEv2pU}Rr0E?snRF0Z%n519m^|*GWc6GkQ~Su7mN7)h5kyOs|B@l ztLIG09+TZW`*8MWInU>QlK*|7Ts*VbT0EnuW6|28DkZBu*L`iYWrkR5o?UiUaxO!D zfX9v|t`hgZk-MWe#rBPVH{sWWlK8oCD`MV&O=G6hWglRj1d4tPd@GAN&v0MbrT!C$ z_th-7mhJbbo?ptQl|SR1>YeQE>TTlf=$(LU!qa`1{QjUvYoj8aW-=|i&%wB;>{ytqROK#Mjwi? z#dV2KO-Qd~NgP<|e*C9#Z^!PA85MIXrh4qZu_xoU#MO;k6cdQr8QDEzk2}}hE#j5P z>c9()iP{#mHM%h{j*FwlMTL+rvk(~SPrDyFs@e(+6VwHsV~=}1ICX2?4eOna_iJUG ze=zO#^o#RORy*>{p?!yj9%**$!inW)p1Cma(u^x}uC>1DzT>$&{Qmd{v(md|PR*U= zxul)8EO13e+;P3+c;EJ$?XcrOMCaIBl~z|?Q?;Z@RPv?xK=iGMw_LKLueGD;X{8#n zba&OaYv)2k{r5c&3J2!yMZWn;nZvW{QuCvhhd9EnomgoHD(kD~sJXyl#*E7SA9ChqLa zvmdwKG0jst>Fq-ifyurPyjJh=^1J0*k?*Zic}m%-(xoNllKv$}OaCofX73P$8bkS`@7c9%$tnu z3=v8vT`(l?gsDG3-VNDrlFoG-+aUR z9?;Yk*Jf9J_eyuIhyjsfqyCF-5!)xOKlE)}LV0{~{L%QG@&6&ec+I%Jv3p}~#GH!l z5O)N;?i;fzYFk9H>pAx)?!)k=yyEKMN`?R38_vs)gN~byT*o$NJ?A*vJo77tIQ>NM zx_7vzSxM_cS6*ypqtq|2ZN7B!$_uxCO&xQm+SOOizI(j$k)21YoSJrS)uln#KEHY7 z_L*A;Za#f;%x&lWD_N8C?-Z{EHuP`4MWL(mSLWTeb3g^1VfWa-cK+dR7p29Vjg#U> z#p;nWoPDe_;e)c@v=iCts+i)HCfdk=&HKHltmHv)<>Glo*9r#~<`gV0*jdo6Ftcz# z(W^yo6`d@~D(>Q0>m43kp_%1@$bHw%u-0(TsF_{%w_NQb15pd2%cFV%ulE;ZFf~Rs zh^id5Ir3`672v`jLOz)XmOG{_LxCJ66>G8D1$DhD1FL(vzpJ-zStCyskH=G3_7;4L zJpQrpyc~&~!A2-s;*cDE z+iB}UvHD-Gx}p@j!!k8i)g%G5~G*wKroJIr=qW!vjGraRtnl-k~~rknpV+pYC%-`k$I zjyEk(o<+>o0xb*plH+}8#V==@9~@2{dv{)X`$t8OmONZ^Ys`h{ljh@jr_P*jaXInY zh3g}3ymS4htE(<~{~LGd()D)tCS~r(IhJdIU)IY-meK=ds`sFOTIiJi0dVD4*^G|b zj<@YoY!j^W;9e?K-Rewm*0L`&Pgbhv-QnBcOkJgxt1A(eU<(@k`^$HDUM;O! zx~ue%XLs4m@_ya|?`dR0{0KSO?)dixR)h+**>a3A0MvN9wYRme^;zo-Yd_oX_V=A- zuBeEQBOV~H`Y+B7jt2IAwyVh3FvjYzZbx3oou(9HH{}bo_nbNgF-*QA~`Y%Xw)Yn+DEi??{S`jH~v&)Jw0r1YR^LJms#eR8=5W~ z7s6-HYiMdXFL#ilwESSMzm0FH?+2g1?CavoIX|SonYQqL-Hhl*&t+atn|piB)r?Cu zFTHc==4JWX4>wlc9(3p6O~>`lR~BFK+*p72Mtak%VAjM(BeU1#^vi2im|48a6Xl)f z|0Xy@HRu89qEc?y1~lA7K-H{+nPd&~V)z!mW*Kc7fR$NCL?>rTkxEc$1HX!Iq}SlP zAR+r+eCTDhJ60WawSnsJ&;vw66(EQ09CeSDAhiP`%^k#c&OqG2bd(uqw8H=Rf%z}w z{%vX9W;p~D*`em$=4FxoMms(OR!_7fp)&}9*`U$*x8k%gT+D65&U4D$%!!)U$ z90`xU#fXYupudUCU2m(oYMC|@@yhq%8$wi(6~J~mp)Z$G;R{k^cn+5L5`!N-bTGW0 zUx7#6I7^A8F8o6OwM;}D*%-?S%S7vU$OoPUe92zOh+5yGna`WE%(X4gS=zwSED{+N zTUtgV<6Dsh*pl#tpJVgdhT7NJFWH|)?>y$Hj$8$i(CtQdJ$EIyhR?q44amtn1Nq0B zMcjq2{8#R^@SEP?{utS9zIPQm(;U^DDbC8sbkW1n&pybu5%by>$hOlB7}EpHep3Lx zfCCJ};WJi@oJ!5*0?ZxSt1-c&{<*$5io3$2POBd_s68A+)qybH{;_+FFu}>*QMZe z;lrZOi*t)hN)C8l_4@oxLYLKlwYI=G*(SXy_fc9KMjQ8-(vkNo(Ru)Rxt5sUG=F5? zY(9tG_Gy;yEVC?+fysRs@dWR}b1%v~!`v5sdV^5^J;+}<65ep%n1;aHbh~-1x!ANG zh{9J8%p8lXqz&+1X1b2(!w~rFhPV0$$Thl6d0x?F9}t)~$perH^ga0JUeRws=gvUp z*WP+};EK8QTiW}`0jsKU$mx6o_@l4jcuSnAueZi(I#Sw!{gpFvJn~DnN8IXNWw+r& zn%B!LBNk*f;Hvyz`Y)7uY)|&8luapU|v4O{)PQxcuY648|{~& zA9CRf*x&vxe5XIcx#<`+j==A;J-h|~0q^fRRQRb5hXkB)7C6hD51dz=|2kJAVrsr~ z5;F1z9Y14yu{wT6j)}*%#qhMhWF3dxiLW7|pp!WVIMWrt~HviXI}5P;W$SF0!?;6(YmNSZgA5=_1Q3pnG#5 zsNcXkcL2O5??V=bVvH?>-|HA-1Xj?pVUyAf9@d@Yv%oyMij0u)`e9@yY=FE-ht=

      }w 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

      %0LM_(K=NmqGFd2YM=yQ{eCyZ>_cau37xeC5t} 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 F{{WJYk4pdm diff --git a/data/netplay_lost_connection.wav b/data/netplay_lost_connection.wav deleted file mode 100644 index 903219a51cda68bf03311f056b7947b60da33b41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108044 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 z 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 diff --git a/data/netplay_p1_disconnected.wav b/data/netplay_p1_disconnected.wav deleted file mode 100644 index 96f512dfc9e570a003cd9b9c024b2919d7fb30dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97484 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 diff --git a/data/netplay_p2_disconnected.wav b/data/netplay_p2_disconnected.wav deleted file mode 100644 index 0a9690e23abf8310076a4a19b17fa0e8bce5a55c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103244 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 Ie@cP>051SLh5!Hn diff --git a/data/netplay_p3_disconnected.wav b/data/netplay_p3_disconnected.wav deleted file mode 100644 index 6ef2b3bc7dcfd76dc05c76fb618a0c48dc4d108c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101804 zcmZ6y1$-38`#(OjyXWq4B_RQVySua$3dP;6P>L2S?nR5WxE3i|+}$M*0tq4R$z3jY z7dcs(|4i<~@B4cFv#-nUj?W|S=b71g`uFPIy_N$l8{BD7w@EYRMrZ*55MK{Q0W#8*=;t|{li>0Uf0H*(<`Ui{x(Q>qG;<7W@9 zQ;F-ka4$T56L38NmlE(Zi_<(cbxF?@9wm#%F2>{J@VlSWZd{v`Mz|~~FW}xt57qy> z9JrSX+=>s6tGuRc6>=auPANw=WW{+7T+)u8s_{E{CS&4i`X$m+g-iI`BBOTUchV1! za{%z*XF?$sKND&Y%29Y+WSjz~C!rRZ3y~BCkDug0KxjayNn<)n@K1qdi{uh|N%0er zP(=;53FisF=^E*f;j%<}NE<|E5blde7|Hj`oC4QZ# z)71YYgV5P8--K>N7W|a<)1OE?p*^84(Md?M@f&H4NGXv@9`oh@f06#lA1Oip#JF#w zrPBXhL^CCLegqrHxXHZzoFceD^cx|Pr@5lH`T(S!5 zcQw{uf+iJMpNTH}FDK3+I!(}qU7ayQ`eL?VbT`QM0+Xz-gJmnHUr=t%2C2E;gpNT>?8tH5_MW!+e;-*^CJ)` zLA2d3zeEm5P5&Q}JtC(>pZvB@T+sKTWPQg|_c{oVnY4Vep(bE5TrY4&2dsK%}M?Z~(G zs%z>JIU({(WR^%Jkp&{K3;Fl&ptu#2@?@kS5KQ=nCd4jDYWPp2hRoBC|KIEukzRuK z1PA?`mf-pXkNmv$<10ZW(gVRNf<`o^452euW9tcq6B-gECU!?%(-N_r#Fz7XUViVy zuY*KZc|3kHf8q%WHRC79MRc5?2cfLr_7Yn}&{&4YM|?vi?q80d{klrD%de~cGJYBV zW>txnsxSvNn1>d8*W>>|_#$?b*i&LdHTXHG=D!J#`^WPruePJ9u0{#?I@OZ0(A(>LFM zSWTk)ep}$zZc>BT;cv1FF_j2T`tgnEEI}_aMl!l@Xjk)yXG>;6EF_^Fp)DCVp(-g) z^o7VXnL9x;AJ$=l%S57yPvG|^Nm(*}(heCv>Cum|eqWL38=)1E5yG=?9wp%s@i>VU zGGHmt;CEsr2$qwz2=VcVWgs?%%!csZZwbg8hz;;t19B(YMMgj{gh(vGM8fZHbQR$i z34b`8E5@bBd?DsD;R~7dH-sVbLE0gBO6EnzP1^MH=3D!OhknE$C5c859UwoyHWS1k z^B}$vnIX9o93eO*!n0E0856(wo4qCevfpNsTzSp7i8UoO`-T;S$9_E{+T^!)#Bwq< z)FS9XEIYwHqN9Y)L{^A)5K0hU5uW&|Mzn<33_=~h9U^lkHHaP&eIfJquXsp(BB2D; zNIvliS$lnlJtSFj1mna zy^%lvijUCQugQdiq&G4KqB(@?q;J0_lQ9sh;MZ@z58y{~qFaRTM6U_&$qa~GliB;F zg^Yms7X&59c>NwJnLqJD{PgkbA8E^fk(y*IWS)K*@!**dpTTdf{0KoPMl6Y6lKhB3 zEIi=~@i+b0BGE)Y;u4)9h(&B3vD5xkl1n6- z(2elI@AXunGR%Q*S6L0^3CD;&@c2h|90 zpbuG(5v(BIz8@b5x)6&>(3Mb}JQF{V%$n37rHM{4IG60{5PwO5`C$N2I3)^GycT{B z#rNHHnOxzI`Ih<2j@@D>$-9AKkz#Xm4z zXe*ULH({nT*>oVCN&P|pPUldAs2+5GW-W7yNu%e|-RVyBd8!$83mT|EssQ$ct?+da zo`DzOMR*9VfHv?qxDW1v^WXqzg~wSR3D0VTN#3_)Yj(7${5?<_LcaDZ)iz z7f$_7Pzim6p+dBv6e!_6|B-*dpW$Edx%@?b4!@EAgJE-CsjuML5-&h;Uf4G><8b0E8ra130lK+p_i}{tVPe!3hpHT6$UVWQ_bK# zD5lTQcj=iTjrg8eA?m=4qCYb`MRi42>CIFa{f16qmNFHT9lEI(R2#4dG^OrgoXZsc zL+6DtoI#igw-0*-)3+(FjEekWLkl|rddhWf)l!8i~>#bGT0;HeOa zo`H_SPBx1_#7l*?=m7Tds{t!?;BN4rv8H{G1oonD2@5!@FOm!9FL7Z_C?Dxy2|9=F@*P+ue+q4&8d4KMZ*ZTo(1!#wEAXqq4k{U(671Z4 zAr!W!KhPAo2u@QApcV{4p-={RK1gWHjTH`~*8EYd-xv71d??rs*Mo4Xi@;({e+?E> zF40Tzf6xVzK^Ph?wCBTwYVI0)4O5{x2YHGWdjr^`zIeVB`h{n>hum1UGq(fHf}i=@ zTok&BaV3N8E}RyYV9eB@W9%t3occj<@cYm_uo`WrdVyQ$8Pb49up^quwH5}##ne4s zFU0eK{8qRYtwx)`0+Gg{UX+A;!tG=px3ieqcPbGHb-|;RZg@H-eYK zfz)xV_qR}Qj2pfA8Q?Q|3w{Q}kO#=Io(_P4!X~~oT~{(fyp|#;HeYxMOpJ=2PW{5T zn6W^|^`!(!ndk%k2Q?VpgkR8H?ge@P7N8x%E6xpnmh7UY^X&x|9tRJ>Z*&@%0n{jo zYsH^HI_8V`j%Wh?1656bq1VI5a3+0J5+#}iyP#R%C_2Np6b5q>!E%f(pdM(Q53Q1pVjLe&x_Nlc;#!tXGRSt^x_4uUb@ zD!dBK)Iw?=(?irlM2kjK`BXGDoSq6i;2)tSo97GTE`S`-eL4ZvM^}Ja=*=!>Cvs0g zW4ID75mw?^hH!oOOQ0i_OZ8()AOewa9@UY0h-{#*P{|5hcPbqW;O6n~gn4Kr+Qe(Q z`TQ$A}Xl62$q4`+;qo|WG5&a0mKrmGs&-*)YiaE(h zs1brxxJ$RB%dro=o0^46k&FMrcI2M24SZYJdqNu9&f9|3^AFkDzTUo9TwP%_#iC2X zI*y{UsZzcdcaw_+D*ik#0)H~N4=SEcghOB#p(CFI=22zBd*LA7Fj8^L_{VSx{2mNO z-_w7KUIGMHAS3@5H5?^(~EqFbTaAOm)TYU(Gn7`d1+;=}Yxs+>AO z^`};f4%2n8PSz8w=sZ-5WK0$IzUv4cpcNuvIyk~lU|Br-QXYFjFj730enia$zX)}O zvy>Sg;LZuba5vNnPuY3G6(kWv82ciaMv^>wy)X{j_fObos>icjK3;lk5Q+jR!bG%Ch(KLYeXvOA$^IcsMw@64_80%d5*Gv-;Qjp& zI0pT~WwJf_?HHLT_P+NJH`qlBK^Nc1P)44uT-W``d^J2(J700<1lmijet z(bus~w!qjuA8YnDaDo~r+6jK7W1vOY%D-bLp#6LyJDzLJPUq%w3cfp~5Cw~>X*nzt zI)EKQfdF9~)}vMMpfH44A?-x(gquJB45PED|Cm6@BFY6P!y+u@&(JyQuBZ~W7S0PN zQ5N$M?h#_Cwag^o5r$CvMUNzA>Lm7Fe6Sw8F3`ZswO|{gaPSWpOd;&mdBH>`MATk# zOcY6P7X`!rgkID~m_T&~E%;pFD8HIlV5)xfC2>yfC?Cpy;^RO7f5N9@m!qB3J6wJf zC!itN(pG`7=m~X;^6>wmU4oj>AQ>G-lVN*|$UU%^xLTOb74c)B6^8NSsaNQb&>e1}nlo~EAJl~& zz9Bae`^kOKY_wZg&fQ^?g^$=GHuBA4ZwiTQ3D-)P0M1~YcccFFaBvB|g)y)kF2|nt zaQFdK^E>cbr5@-G>w(tPbZQN}OT}OhbO+s-89^(lAHiDeRdfekVG?`>FM?mOKRSX6 zqmEK-sWh;Ns-&c}02e|FjK(ts*p~hPZ-F6r<>W@);XJq)Fi?P%lmG|84Osf7!(j9; zKSk({W%dbsjJwV$IWL#U*|`F?4f~1h#z8Kb8-hKR_Chj0R9G!!^GWbo@kP$3G4bVxv#c&sm#=h2lywci@z0#4`lio^oqo*;$MO~N&%tVn*R4lqBa)_Ep z!lXAPYb5t2pQH-;Fj)g>oRk)K6|Wb$MH&e!X(|3JYATgW5+to9MyXR$TY6JmDZVJ- z#pA?fqWa?Z;%#Dw=&)#rXq#x7XtH>NxVz+%__%nZ*d%d^4@jO#*GrAEzoqA7d!%>7 z6UBdt4pYTKy7zjuvihgWZq5aErfg$L`=TcW$pv)^=j3PQz0CbCw<4!s_WYa)+5cvR zW&N7jKWku?JF9E<-khksW(8}CekfgRJ7dpqXexfGe&u=R%jLQW2hl|An_pq}ihE1L zWG&=w`AJ1L)iJeMJ3#lhE=?DtH|vXar*)lmQM%sR5Y2e?O4W9yURf^hAzvV0D_bKy zBUvvwES@h~!i=K_Qjzc-USI9!XK-e&lI_b?u{O3A*Pq+MdxQvZ1D>URriU=CMIv!$ z$sf`e(x$R@a+#u?vbO4}dYx9P|7uuk+G)`Sii5==bwbO-9)yF40TELpevOzPaW$e| zyY@+u^~Yr0Rc-b&CQX}Y~re}XHPgK1PdU4=M<>UBghaOuVOnLbH;f_afPo6!!@yzi&@}=h` z_qzD4{(VByh)*3;mwZjnO30&&8`~nC`>NLa6iCeMlcY(vD|0nZwIO)C{fwhbdyQv} z=Z%SmH~LlvpT4g?Kzm2cDJ9BGdA1}#vYDg(f~=d=s6S4G{jzD47Crw0d{1-{%$A1$v?s?$J%&Bn=eEH zGxjcPGrx;wO44MP71^p4+QItgM&3L>uuJgjkfgB25r(L3(Su`J*B%vDzfNi0`3b+* zuh%fI(T&FCO=dTJ+)UYgYqOh8n>Oj#s9%FS2?yhw$LgXQ26r_d)oGL_QC;qU>yM)7 z%(0*EfAGF4f7J5sgR9`bwHFI71YNp#Y33z#Y5e84S3Nh%ZZEjk?jiLg{h9jJpKs$o zbpG^Pnku_RVW};mVuhCiuf&g4=MDCNE}%u)N~zh|E9J6TkYtE>1t4F)k}TM^k`` zt+s*A8C79kH7^Gz=$+!zvUufn^$zVm-BNwAVXmpZWp|(uG&7`4=;zS-VRysMg|`Y9 zLVJX0f|AXB3?}VUdbe& zt2j}0%$?~=Kis@|Y2(?yPAxgr^URBLaTo7is{U{0m3!Cs-+p+%=i~NI??3zX#lY8< ziH_vhuUm4S6|Zv~@MvL2S+s6vz}E0OG48mkI?d`1t8*&uP;C8L<04mv4h~E)j?|4% zzf`=H&6L~|ji=9muY612?&^!K>2^m+%Yu#B`Cpr)a>;=oe@%Lwq)cw~*_E1}F3GuB zFu63>Ug3IG-NR?*uc3Kx8@)?3MVg?HsTXSF4UbF(0S7|PN1*7wvF~fkGUhtv*@S89-n$J^%i$!>(!n&4fp3hI{v89z3Q8{Z*;iry#L#i3(w*r=%>uvVJq@3u?>t9RLKBYO+*tDdyRbLmSU&!d0wJ!T`&f(nr zJZ0hT;(1n=T~}ds^IRr;BaT-L*X%R=YMB=_EhHk;6dD@p45=SFDKs^tTgc|%H$iiP zOhH2eUsz&H8}%187nPml2FaiFGnC7Y^W;<|IQv=C3V+KPk@-2(kTW`WO76K_bKYP1 z&5Bo-{pTvLn&^Jwe(agxd%*E%1O21qxqP5nqkn5UAIOHjiaHqkG)^6#824xVojM=u z)voWUAKYMQgG&wfHO^_;2Gjeu=1ZHcYF5$YLgU*F4<$J2Ew8g9ZcFWBF#*w=B0OOc z!J`fBWR1CNwuae(sTV(Cz;*4XtOZ2BPKSHL{Dc99cib3w5r3mU(-?$v|ar-_V&6?&zRccPt;X zIQn2%pMZ@zn|zz7C0xk=?rmRH%Q@O!WIJYywkkx>yjFGIbKDoivHS|)pf^jJD6Xp&`oX600sVv3VR_-hB0og7i@Ti~<0TV4hn?C9nO4#{ihOlDy~dPkc^o7T9TpxG)i$O< zTvXl7^%plvZlZ5?tyy?;ZSy0|t~VRhEVW6;CS#i%Zkp0;V)JLsvzuo%JKpF+oih=~ z^+8m}%ABG*8T-C?Qj}k^Qh)d~{=Me)tEcxL*L%u6>HRR^_R7mu=LcVCapmQmzEA&r zb111eB_cf~>u6rL;|Xvj7%6V1c@oe#BBa*(TIOgF<&6A3Dl;-Cd|{|E zxH{mNWs3Q_kurF+Q`AG{h0JWh>b~Q8WcON+mLwIH=N0Bm$Z4G$ohQnBl2beTede;v zrdiFiN9M4({R?gsf5eAn9#%>`E7>0C0@YY_R(xHem*puoYXp6)d0fDw!0Ex!p_9Uv zhQZLG!7ylXV6#9?U}!*wxrb?qVXdxMJwVZ4GMY|AwfJ4W&z_v>lT|IN4ppX9M7Tbd z?a4!f<<`lzXJxm`e{!{`^0@!-J?F{<2UtaMv{XD*>Qh|Oq#Jyeq##RZeE5UN zMbU9Fb!*R$lhvuJ+d843!G=bqjmI=?-E>LQD@~g=-P?3`(}Rt|5;oQPF6fDNq_`2k z#GUG_<*>PImAxvyw|X6$Y5TjlQNf?Nso4XwS7oor?wP$V%aV03 zYf?_5yuSIj^67%fg$qiG%CcOY+$VjL`6@Jxy3FK@RkHDlF!e`mh5i@gaMNz{fq;yl zbs?8Sh6j5B^2`TKkBymzmHJm&nWl|uu;RGvKgk@?UiuU~jVANAF;f5IZsOLuw^jdC z^>;-t*I8$@3s!8acvNw|;=9VRRioWEym#3&J`a6__2~V~ByoatkNi*70qrS+)?7QF zN6^8LHsOJhtD~MqXVz*M`?dDd_y={LB%G@s*l=f~>kZ=SUZ~YCOccoLhsg0Nq?#|k zTVdjlGH;phy=Mx4NxuZF&y z`P!OvFq189Q_;36vf{AwNX2=N0`0-JBS$$>x5}Irlo47HPDjnEwI)VdYi`8hke>+VGc5OJ?%=%G{HpxV1sjVtmB!f@IzublRXaR?a~8N$^q(|B{#yQ7v0r7=oY!wM z=>kxoFQ`1|K_Ie(Sa~^ zXA``0-LcjEs?Js2sQ%f_c>eIv-gds3>?%$!tU|XyCKV&9Es2+RP_|d6Yt!_|*w}J9 z;8f6@5H_qu)UsN0YEO(e)SZ&>JfVMrvVNy}#`w!ImWb&Vn=+DlDbxdX#C=ss>ek{2 zx3BQV*Dk3jZE9xg%pbnklJ>mo`quGw1C-~o>+`vmgS)n7MvSS*>mPFkM zJrZCyCh2GC7HBtVnyC*dOJ&bQm%%D_iTkh0CN5w3-mjLys9MQ;W zZSBf^rH}J|O8-0MT*`#h&R@QKp8BEk_01PQys*4Bzd!P+_SeZ7OVjVBCML%u|CegY zRoOCJUn^TzmQ?&+eT@yKRFWk!yF6VnOEq4Tty^vK29||-!b`$F1Whn^H&W)*z|@f9 zkoAE@#z)!)>YK_qMXL0xr~!Qej1nwdqSxpCvzn^Pa;+&(wstNVS=^#zQ)#qyM(Ok7 zgrdELLyAywNvYFz$KKvC)p_34vT}Ge=efcL3K_@=DXM+S){1;tqV$|(7XD;8gnkQ00x{AHP56x*;1019 z*;cHc4P@uC$?OjN1>(N24jl9V=H;{*pG--|5|6+8^ZidBXQv!aJDIlWbK-|}?;5}FnbImdyqL2xw#?GT*2J>W zt^w}J?7zZDm`Yy~|0CkExjDZY6G=i z^>)=$#Tc1Q+=EGl#po(8VNbgwE895hI_5ZPIXgO&%ZHWSE&WnFwAfo5R=Ui3&X!nK zY-h`@j@~X`MV;y?o*uquY;XRh&>oIp`bg}uZi+-ju(GjAtC8wX=yitU`fmEix?ueb zz0@#TKS5{Gb<nBIR=RZ`vgNT+^liSFkoLEW#T(FM3YY58+cnVgi~Qf7R?) zXK7y>z65m&O|ftaBb#QQY72F}V_(9~sJQA(X-w|8tg!5lS>mjr>EpjFNIjO~P5CXg zDwX~6^vmj$Ey+hdv`u=H(mlI>Ni)2rnp(QDa8JRsl5-B3_h0lEZ5HW7Gex=L4YKXZ zC7RK?J^De0{>IVfwE^ve&IHX3%r~DmIJ9>)KWlI4lJ$f1>on~Zzl+aO%fTZw2k-ek z;KaTO?s-)&D^|IhIaijalnu2Vus*VOvpu%WFAKJhwf}4nwl}f2FQ4mtQ5or3;=95Q z<6`-(f&ymKv&37Z#j+8K$I4<=T}=aRp7yCO982+0T{m4S|4?PGYP!H^lZx9yvWaJ7#a~Q}O1weo^~__GmffLjA;$A8XHypAw#?83RH+ ziQYXz0;Pm0zCo1(%IDZZN<#|^vzMkT(^jSK`+PS!|D*X+VakFpXH#}3{rG0a%a(6q zKi>XYlv9$InfoSNg7=N|1;a`YI)bW;ygNDkbrT$-GsRW1vC8GDz3LyeJq?X589}u| z2ZSCBt_(O}9%V{59k%QW93Dgk2ALb{d#F1qB4lSJ@#1z&XQ~On-z>N$zLV|;m1WMI zn9hf6!M2vR-L`kO;kK?;V`;CF=_Sprzm&}?Z|mIU%B>h(Wv`y=dEkBGyU&#iW%z3d z5(P`|%N+8hikpfK${giU^+v5n_fmgBPw69dYcQoxYaXcuRg7wq@`j>N?v*W+CW|9P zf72bQe()u@iT8W6@t1BIR0+T1ulLV|zMw7znMtBG;uLXD@dimxS!+d+s-^amo;IbM z{|rbE`Xgj%c!#LU=*_YBV(LUcir63G34CHXXli5n-7F7W9TaW(PWckuuH5G6UDbmN zhi7+{!7p`VT=M~o%paOY5C_q8RPM4 zszou)P2@VOn+NO2L2hS513){ z=Z(nbLw=LU-?~3NY0kj5N#D65&(nsSoN%`62IZUaS1I zg@;Om%6%?R)jysK>?(ADo-0`(|3SG$wMacyb3!{@zuG9X^bhP9bU5(5rIBfZVU@lG zK1TbiuAz39`kZo>97>HM5A283{0O#j=c>yp9j?8O&h{O)7uXi~Y(m*y`ziZi zJ7tfzXWJV%6t3cm!YYHOv2PRiL|6otz>buH{*8Ggz9^HcE^69fWRB7o>f-dP^a%!N zyl8A-+GrYOI%E9PpwJJ;tHut>d$ReG9Fdnf%4E_TsXkyif5SJ_lTqEG`gZjccW=)v z?1T8+f4IN8t2{@2Gr8&bTR}hS55^%5l?|8ARH#*Ajaye}ni41uxf#lbnIb<#>uMjZ zlT^=EkFWbCZbvN?`FF&}$YT)=LPndftE|#MMWw2Z_M|co*_|T13*jx8W{tGJvZCCs zY5#uw`fl7?`t1*I8@;QY_+R4u#F%%wcl{H`f7tV}XL8SE^{2!XIwL)Ad};ggf1Qn7 zF)l?#T=j7F9c(Whs~V%-trP1T>i6h(7&@BbEU|%EL8-xPaGT)gfmIfTxy*1$w^8#| zwOd(Vu~QZ=LG&6B$_M+ly8BfvsK|0Ya}05OD8Fd`VB1l8v$(h@s#sLAt~A{CcUg-4 zOZgkeQ|D7xLS^gf|2!MnSwaMSM0XeeEB!|vq-?1AUVTyXvu=suDaNd$0rLV30cS09 zEGo+bQ=u{5xXIAdkfrOb`9W!tbrVl!N~uNg9~8)2efzv;J!$SAtLaLeE6uUpG0wTc zb)e#Dr45H(b@ue~4)PVT69qYSQ4}k^BMVV%RSwda4ZK+w)G=gt=-BZ2ksE8#antH7 zuNPc@XM>c6y&F$%@}Xhd_|_4FOtrLM^+y6#k%Ob^210pr){0lBLD;(69OANNMf$wU znb*@sr=%yXeE0J8xR;w>^nQ8a)rq$Q-uL{_|9$G)v9I5~zWDCZNAzWO*3A4F#l5U8 z%HG>AI!071cR%9lQf5h({Gn=|cA1_r78*O7T&9_pQGug^pM^w+ri7dct_b|s5@x!l zKdbGmd8m>r&&qt_w#*E8LU_jB^xUcHQ*qUK+L2nGZ=YB8+!|k+TimADT)eV)V#yz+ zf^{{fd8A{26YmFB?yT0}HQnz*V<=<(5r33!kQ zPuyR1mey-s|8sq9!^4ecHa^wF(^y^qc5QdqVdEloSH%|PLfs_eXu~>1Eq-PB_`;&> zw>jx~4f7UcUrF;MzxtqhU-d5P?e-VzpB#9U^Dyd6q=s~ZVvt@qp9 z2kf#0nvr3+uA@3feoeBQ*$a~e8MoCN<1Vf|;p*c+Wrfzpr5lS;VQRt5f_(+83eyWW z6)i75QW9>p+OqA*j_a+%@>U;N2?|fw_fdpYY7Ju^!0zMFR7nb_jb(cV3Ya@?Cu-v6QdMn zkN7>vt?pNnm^mj^^l4D?$t3E1`Ma)(!SCyRh<|_gZLQbmUi|#R{j%ispm&`<3`qX& zOP8!i`D;q#wwCrajsX=)ybpB;&16{VZ>sCM2Buk-9|N`pObF-}&@6zrY_qhsG_WWv zpzvJ&#XMVw{Rmb_Nytn;zS&Ooz zWy|ax%bPlmI4T@6*XD{1RdqeLeS`Qgu!s7^w^!tSP0dUMZ@Aa;w>j@_CLVboopd9)SIXy9@t470 zveH^+{FVJQPhU8+XkW>MvSk&CzJK6!$xV41Ws?oE6zBNm$No`X-v`c{APJ`b9d$T%G;C=3y&48 zEBW49ZQE(@@96LPyVB%N^}gZq@YnLw;?J`CN`t0Q+f(1xz!;wzmzz49<1BW|w19yD zt1Pw6TaD%Vy1IBxpz682w^SpRGqtEj;5(r`XYrM}y;ZT5y_{sIU;+LxK?kI1nZwn5q!(aI+2a_#Hkxx=R)=bm2*9-dZ4f73Eh8D&P#wn(J z(~st@<}(<-R$2DrE7`o=WHt`gKhnB2A=(7pb3JP?nNmzD^GNeYbBKktTnz9891n~S zY7zW8aEh^kDwr~Qa-F(zh4XObGWR0S?y7U;TS^w?K1<*JMUxW#`SzzapE`Z|_{oqm z`%6IjiOipJj^|x1_^oJA@xkK##gY=UwPX36s_uLzW~HpRvaU*ucYu-=*A&gLO&hPC zr>UjwqWz??saL2{6oK++>2pyUH3z+A`*^xn1y*D@TR4I9fa7ub4EsUbxYC5;9fgSn z4GO0fSxOAn*s>qX4?D{%+EyR-B>IxMYQX|~(K|#JC05xWx>B z8DrjQx@0_P*rcDKQ)*kPlN6lPBjTu~ptaDC>*}++gQ~x;eB`>}JnJ}BPL&U~2iRxZ zJ@#0~TxTiX3FUD3w1%~D*M*~CDBdUeAlfULBO9bJs?ycFw6wl2rg@I>d(#}#IFs3w zWL#rxX;d3|17|2RTsJf`{Hh#tp+@v8q;FIM+epH+2JO;i=CA~mVnq54OLo5o9~ zE9SA5o&n;(-hp2NF9hWWaRJ-)Z=@essUx9uW65}XcqOWKSIuxXwSFlWp7TCE;fwZ@ z@PU2*@B@{+{PVa}OWLsXX<1M6Qi@P%E89iu{?aEUmr9qGEp|Qdq@sOdPH{prRCi97 zp}nE`Lw!}%NY!5TQZ-gxq`s)Wp|UCxWyzAyqV4oKP{Ez_{9Jk3A+djF8)j`|U10ra zjj`oh#nxLT?TQ17&KCAA3M_eRjm9ji^( zjWKLDt}#WKhnX$rXwx`@LAP8Tq70M&B7H8dU<7_T&-4*RgG1BQgZkM z-4*rEnr_-E?O5GT{Z7Ld<7Lwt)96dcn4@ ztkRZ@<^FLFZ$5nV~bC(Q?{pF%D9%ZuV7Qj2V1H=sr*&>Pv!f| zBb|#Y+k4jt4VlKWTdG02Glqx8fySHq&Dy!@Gs<#BvH~gtl)DrMFkv@z`_CFfPWk`)V9+_*s{r*{yWQ`b*9-t*8{VfIrEO z_s#L%@Vs$%sXknp=33=k?GQP_9D5wUId{9JR8FYg;VJf2)T{i;GVV0(H78hpwAjpp&AYK4v@q^7#NxfOGy3iN>H3~}tFFF|(wRNoMAS)MT)y=q^c0P4-N=(Y)lw+x@ z)4ry!&5F)-=N~Atl?2#!m5sF@vOl+9EPvoEuFUt;;>$r_#xA}lmC4u2kI37}kI7of zK1z>EZ%8wwRnh|KLTR2viVwu4GkxhX_|#x$ZmBok{cF|g%GgR>Wrxb4m2E18iZc}v z6$f0At|A-|G2PX(Vs2$x)l7G7Z<+5c#*K*}4Kj2hy^X0ODid80kC$|m2FqNsZSu~F zLPafQ7p0)6md};Fz&hB3X+_V*XA$$^W+;d4z+q%WtA#jx;-?k=jN6CL-c@ot`I-3i zbRF+EeZCS`*%-F2ef|_}Hr=T(MQ&NM0n{CHoF@CQ$mflLi|NzU zXP6BxqdxfL*DT+8Pkr~)>Ydf$?iBZ7Po_uYP4tZR4D<+Yn|qMwi)X8Mjc*h_8y3Ms z;frt_{f6TYPD2)Up=MLl@VTiBYCheFsV$O-OT_ze-^-;-q^+fil75mxeEMmGc#3$F zI31sR+9xTKsHHiQ^OA8AiDZX3M*L8;O0+<9Mx+x@6@L)NV7lFsh@}0cYo*7eJEZfZ z!=#&}KIvuIcKIm99fcR~n)Fn^(sb26(Du>jRc91>`5Rfa>@WF4MPudf${&^MmGMfb zT&$4G8(``9M_et66D?q3n1!^MzC;C33DhX64YiT#LT!WRz#pi#kjI(u34J3zL-q)t zdHa_iCae&O_;q}3{sR}!Pv&Ry4fp|^nqA_(=}xa2UTLbR=hC~@xSChwRrII~uIyBC z&uMWCx4*Z&wsyBFFzzQ&yDt3+#WCOC5b2cO81?XlJhTr0aG?OMLog zjQ1~g6JI4f!|^>N3MmNm!jT&7;d8i}YDC|lyE2EFe8$JvnS0D4CX~5A$I}z3J@6Hd z-PwTFrgu=NS~vZGowWP#5v+n$q-3hi9*sNG)w%7h2_q-`s{1Gk=S$jaG|zH7d-z6-wFzAHYbuL*mf zU4i3iGP!E@k#Ce&;`!0t)_u)=!1KX7knP2N<@Ed^9L9g(uN{rh0GHjmplI^(!}44y$TWo#1Zf`5x~8)MNLtTUi}D-1pG? zz1QrW}@w<2#KbQNCFBdeRGw6%n@VVSx?gICWGx8((X*kZR8GnweV8^p{xF!5E zp(}bSv_}i@8SAeg2Tc)P^V4y3*Daw6=y3ECEm}isDH-etwt`gH2y2gl&ZU-7Ubvh( zh9lb|MLR`#rZRGBBK|(KlRL=G;13I)2+#9JZ8y1U^uil!;zKT?7k+f4E6(7uLbvzzIG0N9+oAB-aE>`AQsDH&^Hh^weCcCs@jV@E!8)@m=LY!34_0 z{7J{q+u;}>2%~w0@CZlrEdtS0CZ=N{#evg8AvcmgfW}b&(hS`SpZm7*U-_~4`^srR z;}enVgdYSP#S89H1@sg;0sfB9dCx){&{FUipD^wT*HSNWv>}I%@Z*GbU_F(=aM(gn zcr9B;NJVE52QJ~W*Bjv=yo-w?vXB`E?7l<2a10#JARMjs8(M)v!93a`c8Rt#&*3#3 z^YMgTiaqW?sHa9^zvUe>l$l6L!ANcxKM|zUlbB0XEVT_ILk1`22Jtvjl!|69iXJeJ z=s#ct-^XKd7kffjIl4?2i`t5s(xcHHK9$3cDcTC^Lm&JEZ-ALNHuV?yJNyTHLY-k0 zwVFDF<1~KdcXPLKB;f+#7;Hs#19kW=Y?AL+Up?P)R*$yQ%SA>}Hyq{VfJwr5HpR=Z z4EH;qgi&b%WU)p+7vk{Q^=&wU^QG_^ETi{}!X7R68=ISAWXqAm&5o)>@YqB#9`jp=m~T!Y9ySBEL^2G-IMIg6vlwxsXLS! z>=MrN!TfxFzc3FRz>y<81ux$b9Hrh-yQy&0g{{M0;J?5nqK#rG4y9-DEih(m^(6^S z;d#1*$;CFj1=uM>31(qAcEH*QRmcRFQd;ULrpi;nB0S^wg95l8O%jfS@91Dr95W3? z@Fnau-0FNfmHEm%q}sy_Ud z;%bmFq?JfT{De3j`r6 zJ~h%C$Hw#(Hgg%mXS4z?!n*VljS$56>v9C#56_@$*h|@fuW)n;NZ|?49Q*`E!+Vq! zo)*ps({WUKV|Wa7foE~tiVLL(i&1;H3uWW_o4GMuB%8?<3R~ei=tK*IUw95%R|}sZ zB!cyz2(F<-^dVS)zxhILC^v-<2eH&cjJJ1C3*ia20WGmb-iH#?iYTyylnT*~Z|r zJc%e3+=4T3blGXXoLkL}$F}ewkmFdHi|7_KfmHNGIETc7L}-oUCS^Ddr6t?}j-YFp z=2q|#euP`$4%Aq1<7j4pS_yv&5cH<5W7~ZKK1TC|o!mcI;!g4HP{{ws(KSF>l5D}s zay>T2wr$(mv2AO|#*W=%d&jnVY@2Nxub)c!WB-}6|L@FfcfYF4yf^N>5s}br_lA=E zCmlnN&|WY;m}h>_!;DyHAl^cg*qIDtIrb=&)wl4s2J}LmXn*DfwCne1OZpL7z42yi zhGSQ^!zFTL_A=vCJSch@R0K z8;NEvRwpVq9p5q3Jg@Z(x{36F zQdTm@)5*+pdX)U3_YwIAKux%cbSFib5A+r@8+z%*>?USA?P;Df1DGVX8h4mGj%jiZ zl$rs|EF;P6Z5%Zp0zE%q-1HayjJ=&`^#2d5)6GmzC;^YqdUTI5+l-=9pa5>mmM4EP zXP}CC2_LYdG}9Q03QK~b=L1y!*O&@SL%gf1OcAny`9mv$uiu3(z^;2tSJDo2J1K+b zn8{qz|29g{Q?w0}23E{R_ySa5QfVVPgWMyDWC!yVikvpIwON#jV`ec>;nQNIB-4Po z2#xc6+8KHEurUbgpAfbwH2;O@0yEhB4dpjaZj$w8UPd*inIq^EW-asqf1u$QM9vv1 z-oRw)We8h=t3&!jBdXBx=0YZb9)c3JEVAkj^A_Im8B(5>23lG{KSGsu0Xy{)&1DW} z$3vIDkb4N-QfI@7ofS&*v-_A=W|+yCXN~Hxj4?=MASfqd-3%z9$I$C|2fgtArr^7; zC0CdO$VOqL4{PG9RjkIp%qlht>v&>GJh76_Ku-;TX{X@KmSz5>W$1D|>jCBy^zqB_ zv}5T)?5orC1k;{G(!Asr6nY)VKXA{8XJQc7^BR54d!_?w%`merX-dB#nhj^F(+|v3 zAmQTNJM3Ck-Nnfmuc}H|Rv>0%C!MU5%(I zGk2jecEL&Gr}+(4z)7h6R^g0QHUsGg===Uf%^Odzm%_U2YW{6U_XW6GbhkJz^JR}D_~z8HP~^ZB-HDRkdrqMk>r>|$yt3Y zbh3+~92~_=C)2^^*g;Q{_oNG3340=l`D#4J`}#;aGdRu6C_0-~!oXX?tzpu&oEUH*T>+=_R!zPHKvN0ZcJcW(Q32+nMFsC0*ENTP>-xZ_Bnybl>Y@ZvJ7Zq8S@Acfg|x0T4}`p4K$o7%DgvQK*_#= zG^SOcws4St$uoS8QnV5|#k?d5bRnYtV%m@(caVzYsX3n%p?Sy@`WMvejm_IYFMDt< z+Atw_FFWW4^Pygj*#lRJ>SPkK-v;^>TEDzRX1l_Duq%Ey15P33u`3RkFPP3aO=nQM z#4sJGgV|-~BZo{>EM{#)^M}wawm>v~N7I-$P!tzpyvTC(kq@phuSjK_kJYFEJ_CXI z5Q8=_3$a5)#t(GR6LF#tPG}_k0iTClhkp|3&8RMyrv_v>h8td*V+|pf7S4v78`c9;SoPO*w&QxCGVgTQi;ZK>R6V&NE6f z)ND>(m=~C2WcHq@*z20zaF)}I#c+|hNOqE7hNIQ#7jq3(Gl{OkneT!V_>swtQ<1EP zfceu0d#ejh(q!tP+h`QC6j9=Dti@d50fr1V8bE=X%=E=6iKpY?&$E&aBwuMQWSL}S zfXS#n*I~7CGvi2KS`g>61Kbh1V_%-b8L9xUo^fUgCKE1Acg?-PlMZ04D4eS!MsB97 zF^D{2KGG2K$hbk`%|x=7PB3jGFTF~N0gbm{W|AFjT{7M53AcqS^uIls#4H3Nn~5{H zo+dCa@g%Qk8*?4B=q!1LpOy{f=|-GAopvA+PF4Y8N2D%_s$>~fXpgzttPQ-l11j3R z37?Zk#w}VF zUonzt37?O(hDrNF-`s#yK@8puEb)~thYEcV5SoclBS=trd=a;6Jd5WLW0R4pJ zSjQy8Wp*{AX?eVtq9hA?v~Oku!U5mr!5TfF?Qss?Tv@G^oINteK ztVkAIJr0tiP<4hw5r2t(LkJLrlo`*!m=qPRk~>H*9ba}Ejnuc9FxXlGIqpVdwe zqW^V^+9*p70yiSAnm2)fuF+Q%-wEfe4YI>NV=5Dd{8W;y$TY_KZKWJtgmd(Rxd``| zhC&mOB=WV9c3zz70f778Qw!JP-B^l*Sv_maGn0ad5)z0u}<;u*a%0oOfn9` z31uwM_a?l#>ejRP{=f_(l3m@p9U@+8jhO}zWFv>dYV`wI$m|2L>XJ{~Ki~Kp7Hb-~7BD;!t zf{sQbwkJFfhQU8*3?(!TC+I6Vi!*iDxPw!*jMl}f24kgu63tA+jtgbVVzv;4X!-=7 z_Xsta6g<&a<|2G@MxkcjO(U2P=W!Q<8yU1LH|JX!keSF zSp)f7!_?>*y~4Jjr4iv7f|x;Dk~(Aqs*eK5m>&?`baKi_M8ru(XZ|7c1mF7(aL_s0 z5$LiU@?byY%4KFjWX6YxdQ-?kS`a@w8#T#$bfXO9+@7=@2{FFYX4s2k@R|BC4&x5< z%!n`&nN_qWJDN#^7my2X2yyU-d5&!0K`gq2T-S!o1r6U?*7G1JUnbOSPd z672_6^$JMu4&w9%RG>N&Zv-%{na-?*tOiCNMYqsN*mJp=M$BxW?XEzMQ_YEJLI18Pb-Nc3`-$i$0WhNUQ{5P}79{6O25^E!K5_v77_F=Tpb#lT}c(wPfMXv?}qi;j#*w8I)OQcs8@w# zpkn)%=?-6oj$kI2M?C%j-!;@lc)lc5hfCpO(Sm7)3Sm8bXwvC1^r#P0FLu!#I1_|2 zHIO%QGw|ImR&qNp7ICzF?B?V-A`3|9_HOAkH*}mqJ-Q=@;W) zBh&~*FJr#Bnfa(!!M+&C6o=OV&y0k_NkdwRo-$|P^FBn5$wDnO2h=oP#}#yj;NUZ=B+HNb}_@D;s{ zllT*cD?ude$3A8~c9;2;@IXjU@cw$DR$0e-$!4;K?!_LF;YrgRG4MH5B=6A8zE88v zSp1|ZcvDxIXxbXty(H$1f8!0z0)lD4Y$DsxOE`{NW4SpTj#+O>G1>(tjl-F{WIx>j z#Pth(x{l~k6labg?;WMLOmZ@WJ%p-G#ha*sT~UdAHj8zCWY4nb%M8K$ z9d7=MmHh)0HIr;dJvkUiY9sRwy{-JrBw7(ZOY2A@<^maQO8+@5BF`jY_4=9}*t<9# z8?jGJ)YWIvnJ!8DnH!k_a1|;;+rb@1Gui`dKLxhB#Yk{5ibgko9nR5ilcS%Ec|ZiU zNmDYPto(mR;i^6Zo?VyW<@XBR(K<#H<{A0O9&tUn^9&_^fImN zYV5gb#yGPF?P(mut~-x)J59Iat@lSKp&qG$JbVO`mJjfF%#XUa2g9;Cz(voQ-{`nE zC#q4+)aXjH8fLHqfD3QJF{d~jP*O>2bRdeFgUmFzc|0j#{Y$9K5QK25cf3i{8L1Wc8ltt_%kn%pmRg#oS1mgDFs=u4@zFZ!&;&2))>u z%sq1(c2s#d)iq?snjJBhnuI+WjnB-nWyl`*Y2DL9%=74yodyPoXNocPFe6cbo<^W{ zxr1LmtgeM7nfckPL;!*>j1{Yk%Iq4PjIJVDZos=(i<;>%5YP4hN6j196YtRXJxm`m zPId|E*FpHH#}N&7n((M4*V%lW4NsnCPBd%cDK=r~1GPYZbgq|TUUdL9Y&2%_ zx3Dueqno!5_4n3AYdUIRP6Vd^6C^2}1; z?SFAj>M;^ogbWu(hoCB+hP_q=^N_8;dRge;oCMa4FryLmDl*^Eds+^3ej0oBCswzJ zc@^{7zfs*kKy_XZ^?n2@r2sM$sIU=S4NIF9DNm{qH|9_`nW5->Mqzr;2A+#MmAzcxq14f42Y z;HNm4*XRNb2JRmVd{=^f3?$gzoCu%C=jK6lZlo0Sh-l59$!Q(KnFM>LI!mhf~i* z_9<$ZyEto4fSntob2ghT$sOTpagk&dvjF+GKG0JVzS|?>Ck5DsWC9TNMbt-4X))Rd zRg;7qd7f!Rssmx(MJF{D*`qdd8C7>0{&tel6-cHu7z2Y4*GnQx^#ek_&C~)qt4hP* zdl_QBHCrRgmBy)hh`BV2ieM?S@)Dp?4gH=L#&$igvD;W-I&qH110%&D`|PDwdIfXR zuEr!Yn0CdkeFmHsh1_`vPGT#O^{yei48weHAiT3oa2xUy)Zok{bRSNW1%$;JaN^87 zLcMzf*~>;O;AGgaf3M*)a=;U(&|#C=Uf`HWYzwlH%t8Ekgf43fxKeVw2?xp2d_AFp zXb4-ygF*oRfveA*f=+NS-$$4tzLWMyi-kvAc~&MP@HF+w5wac~KR?j%UO3kb$Lbe1 zkD^aL(s--4)n96Lw9D#0YCd(o-|rjei}RlHp79>^uJ@kwhI-F>w|Pr=4|*(~@$Q_Q z*c`<@&dqyfd5U;7&G0_(HSm}B7xriPTKE}toO)VqtJTvZ^(ge-Mq)*_138^U zJbex1p1_EB{#@iKX~EWI8E{gXaGSWzoXXwcMse5JKz0GSfX-DRoUj8-JlTMW;!M5+ zznMG3o+ELrjfT1$Wl9d@JxY?r??p7JLP$ zQZ{fwyhWHGG=)28HSl)230sAi!dUUA_+DHl#Ylm2rc_&Q4R(l6>L<4cwfkj%Shkv1@GB>+~k6m6E34`yPExsP!C+d;nL>^6q~?f{W`; z_@@2PYZwjD4?UvS(;fO~y_+!=SSuG0-m(9%5)c9qD`Nu>5a4Bjb}7rqM_;udM4oLi}?+?OqKvh)<}vi@?qTo>=GwX#sz z2L4T$@{iI`$&!=dvUFKak{!xsrHN&#Wx7SMgewy)>nsy2S;|eNoia#SpzKm2m1w0E z*g8KgW35-LN3Cw_J8NUB&AP<0Lz%CvR9ae!Sre>2+bVl+`ypFH>rMHM5XqKj4jPxW z8LH}k>re7`R0Xw}|EBl6JIK{2b6J`vIWloyLW_iF39}Qk5_2U@O`Mj{IlfHX&sZaN zP28P$dt&>fHpyo45issQr6#5A%UGIq)0OTn>C^pPwN~))8UPRB`sk2tW}cH4+zI}G zFiUhpi)xV)#LMDjv9nlTY$i?@dy5mqAhC_`f&a<)NkRIl~T`{;T|=#(^q$M8sWRAbQxoQTfpE#Q#L$kJuu zT2>l9$5v({dg4uyUrPfgy@jjNTQdeVr-JX*lXe6etje?n0(;1WqsG~R%(e+=G@6`b z=W`-|3Eaib!b0H+B2-hcp-7+*ttY>d2~Ne|%5o*YQcNL=OYQ@n)qZ8FQd$|WtXBpr zkQvHjb}YxaIc=px#ckEBg=62m}&4MJgjE;Rp{53Ybn|baHFDpM?I!1Bx_v8yR@*>-l@G( zC#H@|otL^lH7m7ITK%-LX_r%9r94e;m|Qve-{fb|8{JN?k~uGHZ}w)_#GDH5C+}%F!^KcyZm0iuY zWs72lTbb>EnAs8-Zx7~5dojN_jatHiep3+o1_|adv#nVN^R-apzOe<~x%Z53K>fwd zxtQZrM6XGd^$eleehe6mycBT%7{SW_G-{v|FD^GaK#%5rDf zDW8(h$|L3N`1dCAQ)#1=E%w8{EGzzki(6&u>3n(4POd}a zP+C3a8{pgE8{+S!?oey1E&R{CqNjLHEF`|q^(SCmAX8&L0Yf$dl?O~K4iDZ+2xM(#Creu#`ur;U*Qb5SHsmGT1n#{GaLOr zEAq%|mgWB9-g1NZ&tM+DLL6$2taF7QF4Psji20-purxmlt%L}EKjPG6ehM-~F+P}2 z=DeK1`{5(qirb6GR)_q-NqUKF$AMvT6q8xZaL~8;i;e<@Dg@`~A;9q^%|57Q?&DNl zG*_9eOcQ>Nzl}7*VwOioXr6fm&fU71ANXekxFFrRG!F0ZZ36}y2+x_%@S(~vYxdJ zR`$pru$E0^Nl8|QS$-(f<;mhZt}q!*2brI+<1}5>)~JlXw(qL9ymz#xA~YKFGK12+ zDJPTjCDWt|$*!c8Nm~<_C7g>dAHO2Lc0wL_0zFKel=v-SRzgz3$fThu&(fTk53_Q+ zf^x!gqTQmmjBluagSuTit~4bq(C%vcwac2R zRYnFIrPtQI+6}1JHEo(+0?~A<`Cm7r84#Y2sYSMcA!rg7%)c$@40kme>vi>#ri)1c zFKP>zic>g&1k+na9q{QIo3qhn?8y%2SiT}6cQ|{U41-Ved{lF8=oGTyJ@B5d0xqy0 z*?5p>3eAM|hzSMxV#00lx%}C()HcjM#ZJNePP5dtY)1BbsT{FbZIA51&JFl=$l25R z#_`Pl!S>4y zs!GI{Ki7YgKY5_z35Y9{bT)N+M#rr3*%Pwigp>WkHQrs*Tf-l!eK(i0>qO4-mn{~Y z@s*Ym$`-`w1j_*X9p|CIy+KQ%_kJAk()q$M+n#N8T58K0*wRPEVp2bxw)4Ur?k`l6 ze!Y#BPp#=6=DXmn0p4nE?;P(v?{@Di&nmYyhjD$)p6NQD)6{drYxj3i`)V!WT~g7g z3m5J&Mn$k|s*s9Yd!e{AQMM`B@?tQse@T;oDkdtWlreIMR8v|g4V3fXcT;5pZsFhA z#$YnA%s@aHJR9&L@Klf(d_Kq;v>>oi zU_f9>K;A$-U{*k~bAa=XV~FFW!{I#UeC_0%EggNKh8koWXY<;^9XsvEtVg73^o{3S z`haAA@{f#$-V(+uV~THS`o@^zzc+rL|Fdz}#mM^6t)pBKBg50f!o#aZ>Q1uvsShqRHDUp+)O%3AEFlWF9(0V zudl4{lh^dDbx(7Z$m*O?IXydVQu^$SUzu&QFT1YfINXnOYC{$ACZ~?4p0AtQMlWXO z&>L_|s);DpM2HgN#A$MCON#X`dpE~>$0bK6$7FkN+gG?GXjZHJuKk=nzkQ{3hjJ2L z3gbwn&0RuJP zXYGsL-~5RwZ5TPm4gn9fH%^>gUaxp9>DJ4(T=tIk^Y&^Em*cr}W`Gp9Jn%h!-41*b zcq{O7;F-Y9f&Bxez@q{E14aeR2&fxy*}1@R-8S25u`aV7wvDnku;;clu*Ayo_>N^P ziC`ngTMk+kyKX%y#WQ(5V#eQT-pq39Dkg_K*ZXG&Cq9fyk0=s#G$sdLO0{D9#4e7t z#P*B66cG^i^w+{)O@B`c%NrRIT|WL~;_IYp$y}0*QAow4e^QraKFzWD^BEVI%j`xI4hm@ISZVDh&%}Al z&E?`sp<>-d4$;mA(f0eY-Ky&y82_&9X)d4Zn(ImSgRHxm$r-aUwq~4w_J6IbhP$Vy z7;42fzB&Fw>PxM>aSFV>Du`+C1dsSsIw|j0R$Go*m)Ruy1$#TkVCT|+z`)l5!<_H! zEo>fZL;EuPnc{42e`9GTuNLWFTCB|rLON%M=BNen>P<~SP9<2?!$d7&N(_6-!i24)TCfS$PE^U9} zndrF@HzIPPZpGA%`5d`8ymZ*OuznHUqw2;8aaZDJC6rG1D?TpnuY_jFbJD+N-*M;j zKJzYvJ4kCSQcp28CWIRzX3EDcI^1J}tW9wq^V{n=3OR2$+XZ|GSP`(>*}$>gCRnYO z&&plp2yk^#`J|>3eI$FQ>qbsh_h0UP zIk#NRUA0^Va~8UZx2vzdKgGX8ZLRIrFByl;Nx+J!xMd)aFDm|!BIJ^aT{#Cl9-!2* z+_d(v7jg`DT({4+4X`dlwH1k4H&R)It6<8?ytG`n4W_=1sl#vd?s|bgW-&_{K5e5q z-hb6M*7wGD(mzvWwQO~vT2a;frPa^sZH)mQO9UPh;Ml&EO<}KdIee(NNR}+UtSxO; zdmpTZY2W8)A#NA3S%MHslWwYEt^m8NG9C}yV>-{@BGV6(ZsXCAuX^wW6 zOS%$v;8(xM$;lbnPh9=d>c(FEGw9dn-_D4H$fZ$Jqj$t?j{6ZG9A7`Sc=VtsBl=0) zxTLA6T{AjoU(c!N+2uA}7qSn!K6@*g9r(QRFL|_7K}hDd^Y_IA%0yd?<6}Tl;D^9l z0q-4ly9y1@80hcjJGa0oYPo&2)hmw>+kv?p&;H>q^NIW#?iO>>7^oKV&G9bw4)xXb zkN4m974=qg|LrP}{WPm=c2ie$&TscqPoVdPr1|xo_!VTLyg42HK*j%5G_{*a5wPThQG7kyeQx z_N`ki4UT@;a#FiCT>jIn!Y<}P}GWFv%XLI`S4G%h#e7=p)q44 zdq)+Cj*W~BA0ECdqGwF;gpaGdMPHs#WU z!j>!cmH~qUCk0jxyckd@V5f7V^SX0fz&a>Ie+Lx|Dims+I9*5y3P@wp1Q&f(9tx?00N zU+|Y#AE^oIOI6ag;XalpW+_sO>%{jL=A&{;7HWyLrAAO5$(Dl_)w0Lh%lh6@!on+e zp0~-#ha=H#_e+_d8YR2yR-x<4Bs6nvhyP ztG9QWVL<8g2h64AxKX2@kV`&lnF1|jO(5smz@>|vyPPcpss@$`atB=qo)CN`sAk{> z$3M16%UR1=YhT+&TOR8;d7~yzxbM7|osqQ}R zA?~!C{5cg|q1nA$Q8`OJc3&ZXu>YO!gfGz-=N}FvauPg=B2X7yLZ`MWnNAL}A-pW= zsF+#Q$UlYaf=lQq+NIypd2~EB$y258=+F)0z5EYhrg#cfbRvJ93jBppGuxKw&5U6+4AnVn`0 zv0boTvR${mwmE=gLhU;ooO78o6tzYb=WK`FG25}l(Z~7SSrcC~@uq4L^kqojV$Qz1i-pB1|^flq6k zH9B)-a=H~L9rvxxMtIT4d19g&kGzJ&#b{}Zt@s$#4WcRpcv;{K!= z$t#kpq)4g7GZy4*_Kk-V{us3uBGEbX8oX*&K#iG=DA&t+-Lu1GjNYw zW~*XfYdZ)G>#{w7vigGkw0)+nfo-j=G-}9N_5!#x`JJ3wYR(6P|9?K`}NxTu?DK<3fYE+?^#j(9&_eV90co8-*yjNtk zXgPLwoGm^e-WwMb7ZO`P{!~(_^wg}*uBom=**&wn1u6bonwhseCQ&( z#a?)aC)iWqLstTO^eNl`*BKM^ZrW5;gbz}P|F!?AzrBC8?}oRMH`){6J?|ai`{Q%_ zD*221hx*S$E1B*O^C!cTZ~~MDgK>w^Xk(~R**uEdpzPp-oMXC@8Ds>e{3p>5{l*^W z>Y=xGnxDkaL5&h1%s^MPrPxzkB0drg@g+3E6VTuNEf$oxd4`b$!zNbG`aF<5FX zO+>eIi?kWt`TA00si$;I`hosg3wgBM8w%mdxaPN#+)aKbJJC^XrX^YJ+?=-o3^I5sMHH3*$H@?16z&qFVHK)Aqth&{|BquxLY-;_~;IvYybCMGhUdH8$UlPAC zerR0Nm|D>@qH08`kw+qbL@tR6iP;|aSA5;LVKID6+t|JdRZ~8sHAMWiW>m^Nmvzc@ z#9htX+FwgsU~~p6+Cn;!Gi(F+Wo(dU%Dte>g6FqO)d}Zt~+;G?o zS8J&6{a$~N`onKmulm#c$^MuAfBhBx)&0Z$5B!pveY8s2c5NFJ zm-o#jV65#khnefm{!n=Y;bxIl?0@&d1#t#jk9!40>1gQnXNkAOz2a5eaq&^iCH0Yb zc^P~GY)UG+-y`Jq@?iOr+)(L-9{6;noRS8$_!@a0x~rM;6LjW^qSIOqz3vRm?`BD7 zpj#gy-;<}xW#usGiCf7%|e4S!Z$}2Z;jyGHGS@v0WSa?e{OCf8BwTW%7t%U8i zbr9amA8RX|+p%zYwObVVHwXiP!Zf(=<&vkeKeS$+z3#vK*NhG38m)r+a7LAMHls_{ zmCVqz*2$+6RwaH-Dw?b$U5tAdJvC}h)RX7|F?C{NV#mgY#T<=Jijt$FqnE~2P3)T7 zGUa;mndI6jTj55#J@W(nZDdcHcclND`bOKN#~5YkSTcdL2p`2+QfKsuSD_ae8pb_sFifbETK5U~9P`yzXct)8vAwTEQ^dUsFd`Eo(|3}yl4#1cXtK7$Pg z!(a&MKuUtcbb{`|eJEe`)p~h7AKWHSY5Q;|P$Bi3zp=lye~bSze(l9v@}2K*AM3y3 zpM%-ta`l`Vtld>hYUi{9dVZs?Q3LlRem2{H8-D^!fgPk3yA1I)7w%`QD~uDK33r7- z$hp^~o^ly^lKewXfF}Q=+*CQQgu;iNSeiliJqu@VixR7(VA8Y%tJ@2)rm)gV2~>W| zJ!N>1$ZN66UE~6CGvp#~4M0KSscE(M`W+`Rq zjxOyiD9^W83S*Mxu$H%`Tjyh1)!Widc_5d^-l;FY;N!rwxnfLX<|3-ip~UZZor8Z{ zjC;B_wx{G6?rr_80F- zKjlJDzpt=dw6NB5)>XFYcHVK_@ySu&vC;k;IV8hY*}m02)*gwRvELG^j8Ov63G65z zkbdJPm=NedOYkMQf7lx&034f@nEc+RyG#NkHBGOfhib32Mp|htMmwZkLamtQyXp(` zd;GJs)!Je8yQ-*DQ~^rcNUb_X zHvE<_TYM#Uk(x=NVw$)Toxz66UpQ48m95G(%#>~^SCx5~E2b$kaJqV0USYymLTRp4 zf!oD){Hma&$T#FgaxYApY;b#sK^Hm$tGoeP|6qAP{$x2S%(rr5Ot)^yd6nC8Rs6oa zaz)vRSX{(%9p6pI%{L{KQOL^EE&G-FilD5K=Ze9I8U@9=QYo=7SCW)4s%eHc2mT$^ zOhHpTd$LPrR?n*F>hEfq-8Q3t>iFau$rY2MlM)llCFI4r#>U0RHH#k~R~ud0t}&}) z`o<>4=8xZ&;7e$h_$y&zLaoGaNz+sRq)&k#!$VB89>K3D#nZ+&*56ruuC0Nxa07T- zZt|FY#5EIsil3#qav9~ElF!n@($TWb(#{%aduZ!r&t-398)qffPS%U)h1|0Ga0X6b zx?NN0E3cM%iHC&%ag68(Hr>e`WZSc~p#5t{>VYGF73`WC;Hdm%M(dn@MPCbT^?h@W zQNrl1Ki3vxlH3jR1ITyH3*Gq_A>ir0%L#o~w;qEt%CC7qJ|(ntBRqF7?!-Eb1oHaFZI3R}inH078w zS{Z^hnV=NJT3wI_;%{y!CvoRXyBO=SvPUP6|YM#^isIo`u=Oevorb8o|)O1rrvb~}HVpUwK1L&i7c zmx9>UZ8X(a*E24skgH#IM%MAnk{L;9-P4|==Au1?(I zxI=Kt8yZ(IZbDqG_-6^HlG-NEPqrnOz>IQkTBVFRaNjwaeb03-M|ZdNj`mIVZ-M*i z9wW}YK;ctMTBBmE#6RI@2=&EqxWcwYK58R3ldoas8jQ&GMwz8hFc(xjb+FP_t_NS= zCDK=^q4XI(vVP%_5F(TmeEf30C;tT;odMi2pxH633f4{p*-sjRhjSPlBHX5liE=&g zO#WaFSqA*9iF7}7vbD`KMt5VsG1{DCUNGx`X{o*_U#W05y6$W$JU$!}lGe>W;^l-$Ze zJkL0#7S8N5WZs|hIy~W3tY{tJq&4ykc@Mts5UQsN_!C}!BfUVCFdZ|pH}YipCg#p< zaItbI;(Q@_p7c$;i^*jW{>u!hhg3;CiORqbVuZb5N4x-XeN~T zC;V@{3w)(~)%;Pu?e0~s7MX)GZe|?Jn3lOW{ZeZFlq*T)lg}mHO)QZ3F1}yDV$+P56@@Bb$vRKJ&`Hgw|3fX~qUSGTi zRoVv^lLg{nkrU_QrmsT6b-skqiBIJ2awWNzTt##R=D`i)0eGG7pc3!Q?t}XF7!+kC zfo%i9R?P?9q7&M}qqre38nezsW;yAKn=$Ky{k{uY^4%m2nsN`R!ER04;lfmHr8t}%7rIUh9zO(NO_=GNc=~<3Cz`3bi~)lB=IvMI%u zvL{(fz61WijN}(d4U@Yk?@ta-ex2MX<#EdU)aq%k(uUw3r8^l_Gbd*4&+g~inbRKK zs%hRo-ub>m{$Faaeh}Gf2JS^{O`9?yq$=ACbIV!qEqTq&;=l4$g{8s^;T)cFuyCK3 zg`1cjZWc@6lsbfc+G!Xc>y7U!zxrbOp+$CO?46JWn%yS;&yKEFhDAex>LFhsn!a!j@dRE7{>iEvJ z1gp@4hyEV-S*`+?Vm4Qplen$mQk>@saZj;x>#_^jIJP+aGXA>{x)N9uN3bt@Fe|`4 z`~dc7Hj@sm!v(zGA7(8&mC95z>rutXuZ>hc`0A^gHun)R=^15%h*1C4&oX_c; z^TstHdrMZ^tZJFtGDc*`8KY3m_|rFL?9PZu-<;kneOmg*^immpu&S@K24`nyCubX3 zzO2&OH(f{FCq3)DMSY>(9Pc>aGT$lxdUdi^NnZg3ngYj>Lgrpf`zJv89ETIV0Zf`8 zHVI0Ay-^fa zyjaq?aojbo9KVJy2j)pxa8Lg52f;Nd0H>8j{BFLQ&`*%?YX?7-UxrS?FJ2N-_(8%X ztk@BpmHqrNe!I{GtMj*L5nl>!p(_{=<;4TSdPL-^SiwQkFmT3R3!Ttu_y>%SsaVez z@VyE{McWEzIxn2A+De_IKVp9IKR1{(oXP#*jI6+3IxZv#AK)1i#joHEE{jX!8wufj z0Dqio&9UIcjKeM38T>w8R?K6jvEXucR@V< zEAV)8F#D%50rEHjBwl zg?C%Q?0>R9yBg=r&H3UQ;(FyO0G7#k?>S#5{|n!J-#%0w+5Y`%Nxgw_0^E-FaK%s2 zD;evIA!Y!b3#D^5BKS4%+uL9tZUncZDi~O}5gNU^L&%FZaOn#{50eKxxprWdh={xs z5LxrH<=Ho^3+LJfkA>50C-C#$u=BVGE;nu-{skUoJlC8L;o--_=R&{X7&=1haR1_X zu=;ijH{ogY795`ySlMn^z01N0VJdDa+>J$5KgTkCIYpsXrXFio<2Cwp2pu3Z6&?s^9*ILRW=Q_$K{>>Z!RfMwksx zmtXuLz9sfuNB#vj0)8fs;g)g&+`o?Ss_=1?>%t9XD-$rD!A_h7u4_}Mjl!YZTLe8; zO}f#X0ftpKWZAjk^5y}Xa3=I6w~RL6W$eHyJ_j#?8Rl%`o_<(2abxiu;{iCkzx54z zAN1gs=qzr}?PUIh|4CPP)dcFz;TSW{Xa{c8VzA*i>&4)sR6>hV|ESN^yJ|1>gMXO+ zpzpi4viAshu6sO*o?G5W-X`9Do&s)PPGNTkPXS*!{~7o?-Sh7B)bd>QeD;3vUGV2q zP1KxL|9Rh2-*=zIUj$u+H((o$Rrjm!)Na^o+qE%TIBu*tpm#C`8uj3FGD8nSjWb2} z7&frZ3(~=6L9-?L$dk>Y;7-c~9vx8B2BV{7LErWwBH(k}&>4>tR95)NKj!!Fb@UXU>;|M3y+)22To}#E-!8l@(KhlSXYG(I903Q+B6um(PzL18rfJE z^0l~4Y;CqK_e8LO^Hp4U#wLR0eSx&&n(@)xI_%K~;G!=f4Zw$rf^WbB@)kFt)?ur{ z`)e*(?R%gdTfmfqtCj`R`)}~od5a0eP;(zmCd=64q$XXY%i2U0Ze#j++L*QQ5nLX2 zJ=Ac1vkVxC7O5L1ntlvD>bQIwP@ZWT%k#gT)(;K98@#{Gd?rK^B{T^8Mw(yWJFi>&0}V!+}Kfx@sZ zX$Yq+lTAclB>@Q03l7{A=yp3Zv&aa{AlATzqAc?77u?Uh8@$t+@bUN##oQdW4i|)2 zzZ!bKchF}9(D}v-Z3yngDGyhNn#>(&L{339dBK>jf71GC49;~Zl+iay6=*7I!bPH> zk*IaR+Wu1e;r8uP(63woGru&P5)PZQb&r3fcbmJq=Y(&jcFH)3czhe3{^|M|?TcDP zi_kRVCX|UA$uOum@*0ofl2}bUt&UPhs87^Y@ELroPtqr8oiV>o*4i28jG+JTj&E9X zy)U}{7UQ{50qnADvn-Sae&Y-rqlTMn!S3s0BDhQ8!E)FG>(>G*1PW(4@uL8A)fJqIogQ`rX` zBM8Doz6>{pgwu;=j1g+8jLavCUR0*L#Cd#aE-$$9Gq`=+LT&;#7r$H2E@V4%ick=- zV4u8Qnj`R>1bxVSRI6`lV#pqn4gkA=m^Jm5fXlf$h z?($CWsMS&7pr=jMC&184qvvDi<8GW&K)8Ec_7xzzm zQ;X`85hpr=%W%lQ-FML2(|g%F(MNC>$ZGAX{!>4#7t;UIKVWrl=#B71zo3E`Wv(zr z;g<0_>UIA|%yG}ER7)^-k*mNqjj)SZa|Z5zDgoyFW<0e9<<>dGrq}v%{QOJCGN{E) zk$t$;x|P8g(S{q^@A>>6;ee2vKTaAz=ThCsGJb#;nGZga3Ja|fJSp}PiK~b^oDa)) z&~0oct&y^%c--Ic7%a&lU~jFq?2>1RkNF+k3hpU?Rjdcj+Ehyq^m>jeXW;2tNsPd3 zafuj=ZfAnBPYIWQpr0{b+6dg>fjVFVUzWSh#;|3%3jBO9>}tw+<##{>eZ>igEzJ-e zGJrXY2t=3!RFaPiWNScSl}?>ZW$@1*&H^4{Y64)0PaCQ=Rc#aH+n)X z)R>)slam{_Xdi~t(o5qCDz^e^N6c^P?Z$jEHyB6tqIwB! zwAv5de@Q=PT*kdnjm-Q;4Sl2b4SA%nzoy^iAEeba0-$4baE*bV$KoU$Woy#K+7ch* z&GcOKzVJQq_gA;5lhpp`R9^Du_0RO3@;>(jdyZgMSj7FwZT0$n+q7H8E##|Uk(d9Cd;g zr94`QV3lf;zhioJ0=8 z=k5f2H5Z6$g-1Nr3iuCq1xa(!``D&bw^p)^wF$PhVA0lAo=S&BD}3pCiqEAImQ-7c zi5=nmgUM7=_h=D3&}&3 z4HlO*)V|Ge%JIXVV`VH>Ik$M5U&75p6qw0)nC_fk=r0FYR#}EwG&xmV$p3&Aof^Y| zoZ-m`=1N;k$6vxJsXOZ;eaTR|z!3B`YGrt2?nGTRLTzExX7++T)C}6@&&F7NkQM?g zcU!%u|1_Rrg7b=L4Ug48ZV@|~e1LBBwe|w8n*H=!=4oi!Hb4vBUazPY@SX8IawoVm z!5E+5JLjLThHE~(5ODi!;P*G$M6IS;-X97UQ(3?0FQ6{aWR3u}$Fakv@okg5Y=PV&e2miS_P)BS6px*CEz5VvSQ^lL_M zV1)trsgsO<5!V*!3Hlx5sM!&<#2ILv!{8rV09k6cTF-yWx7L^78|?q?&xJj$(`W22 zzCJv0S?P%Q6f?Ajn0|ZNq3Gs0G-FzCXp4ZsV& zYJcq51|HPSpa((Maod&EIm*7qiV2t8R*J<;w2ItBd2CT}N5m?7u)V3hy#2GSE$$re zVe1Sw^mywQ%UY#_%t@n#Ufd8kJv25}V0GsEulsvz1&!V2BCyX2FeT8Re8ryTHQ}YW zQtU2-06*P^1Kb3ryt!Yy4yqiWq^IjV2;?X3F9l&=-jnxdjt@*-eAr+dnlQ_%a zsQN5?6OLi0kr1E=2XZ096$J`k#=c^Qq1K+skLGvq4KdkLz%aNB&UssCIL1N2HU+NH zd*P8i8+F+Xt{|fS6(K}?CDn&6>N0rsU#!{IJJ$Br-IibIibumk{30Bav(PoZ1o!0o z=oP!g(_(Y+gs@o13vCD^*Hq#yuWh{?9l@oU>AdT(IV|>2>vqd9WvzT1ndAa^3T{mF zSI9Fgvu)Y-sm_>yO+k)aG*?cp0=R=h4p?k|WyydFAqwvy8-B2b!B;xOCUeDwC~>QD z(>lg62HdfnzyXfYN^|yw+QdCGb7N|y#9c9SqKZdM4ZHr^{v+Y*?k}G|&-vQv`}`ka zKTG~u7m+vSF765WopI6i+|$w@tB%XUu;E9}9-v)2+3*bm4!>P3&^x=MZ?|p)|jR-#} z1ALoj>{jkFH;F$a%!T7{JIwLJ#o}Ub!Od-ByTAo^FlxRLU@V6K|I9F^neCy_c@0mH zucQk52kOXA=;rMa_KANZIv(4g%Q=ZTB4w)voSybDf^6Vv7{ww1O`nAXm=wzC*=4{5)! ziI>n@Jjag#W(ZSGTDRJ_IlBdp41SVpU~VP%_~7$_9_K{IKKnp>2b|=Q_Imakwhz`3 zmJP}c%)igeFXfGxuMM}%v?N$s*oxTmIvWNI35a)8vo;Y{8wEUnXM9c?7#9-Rc z^*8IE-Fo=>e(&mR%I;zLYspNsi~7Mz2;G>04Gfe0%a1KWg0S zle7TuvzgLD$*cU7Loky(hBF$ZI5D|g20!w#(pgN@7l7mBT95->gYaFXRp1M<25u= z?pykq?1o`@N{r^W2{*(GhHYl3L zxEXP$+N0_(k42o1&Pq+syY1~kg-ZLaJ002fnwIlIGjgi;bAGeT^yC%^_2Wv$x?|O;)?we|3`W0_5lriN2+jP>nUOLEEXGRk_ z3gfeQF1e>c1^$w9RT~W7*-7#iIUj6_`@rpHz`0ZjA|JTcy3AOVgyi;xTxd%JT=g0PX{HK6zHc zv-CGSWi_DNQW4<0Yl>&ac9`iqku3d?xefK`m*P|DgLFaKC4S($a7UQWu&cdbM?Z_% zd7V&AT!pySi((ydov@s*%WYv8ItS0Lm2fI^g83UhmLBlrO@%+K3A~;|;dgF{**jJ! zFJ2NiNlOj0fbg4T8fPL*!;B{l!B|xXNG+tH(pE%MO)-=+HZuKcK4v*=9b+@uf5$q1 z*b(k%8c-piZ@`a$;J{&lF9XH~OmeJu9C7S-{NhNmeY5^z8EyUzQ7o4&N33tG1Fd#T zoT(d>xiS%hyIR10lPa#{y8;W`SrKW0i6dh=MK=9b<5SX`{!i}TY<)TA{KE^que84L z%l%=`n|^#2vn2DQ`xrIcXmlJ13JH#N+%v^-&4`(DmMf!Ra;_~)OaCJ+BlT&@h~$@v z)e`Q;mW-bHquMw9OYGNXk@MnOr$*)+a*Eq~U`w zifhSKpEO7|WX0!lqY3N2!+4Zjf<`^IiB1Pid&gh}DG* zZYBGGZb7AhIh6&=-&3*`?O?k=S+~CNkh!M;|?ekAhS3LFKSlux5*@} zvr^J`42ZwJ?iKFRo_XFqvZU=JrsGs*5F$O-1D|rAu1VLWchHNOJJ3~~&9@eoi<d za8VS6om@+{G;@|31I*dq-~ydP{enop+st`(J$D#7A1|32bakpRW{=i*^0k9|)=e*A z|K;-e3?W8b2yEUmpiKHpi-0TsfgQ42s%U6o=wV1e4CZ2?C!ff!V*a5|A>Mm3ys4Y$ zia-(80(LM^7z8BJ4MgPT!6)kF{^QPZ63*}}cp6&-G)hAt$vW`w5QVz|5#y~e*GusG z^ke&SNBJ*8MQNp>x$&{l0$k20<5|Og>Ag4#n5D;JOKGNoGR-&lv|hC3*>fFb0`5C@ z*fXrEc@kn_&O%K|wyd%hx8Fom(TV^*$Q0Z^I5DVl&_4ms?PF~hEm3CCG8$21ZLOQk z>kTWomSh#*`GPJPTKxXV>Yu*9>h^fo&EA)9o*#SR-IX=B%#R|&=Y1Ucqh`YCw9UYc zF7yf-4Npi9@DL9rOCWZjC3lW($pn+@l_TzZ`Tepwq~;|Yj?Ini^S$)9Vc)_ci(>XC z_DpM?bs;xB|9GJRr}H=5Wx({l9Z!9^S{0%JHHT3-6;UKWREdRrOKu6%pYBRM!O7G& zvK!8&x?_DNFisoNwZObPRzIPBm6!Vd@6fE1BLIlZ{Sj&$$dH10{_WOCY|z2pHySK>Xbl+6Y^L z1OI?n@^EG-d@0)zHM)o`!9C=vU{~3gKgSiZW7rEg_a6iw!7uDy*1}!kmh;Pmo??{P z9tfUK(i3SLVt!XjBcz5>eaVLi-mO4R>=mB@OZY}wBb`B1%tk|BpnPJ@k1Q{(J%N5d zY^NNr9Jv_VJpvXxg6y?z^$_uJ#WvE`z;@3z!0xsGVee;~W8H)p#@4p^)}5xM`~+f} zuPRjFx@JsIGRJx&tN)1mdi~?p*N>j$-5Ydg+@0(9&OGSx_|fxvZ(e^|5&b4??GjiiIrl!1#4~>}<`Tj?8WdG=v zvBTpBC3a4ElioFZDv)YFih|u4o)lj@WsbIxY{niDXB*#`TUcLNB`A`Yw0<^c7%yP0 zF3oPIK7;ki1jd!(I6rxy?ZxcUQLUtG#996@DE!v+)slJjlU5m?#t5nltMNU=lF|#H zx7uO;UMP$NQ$cOS6Acp&i-X0Ih>aR2P(pvcBY5by(i?zhdkLlu7j|+lq2a!S8Nt4U zFMK^W2$+)tK-*UqK4KQBBgG*mu$ZYT;$e=NCz%fbk$%`Dm>kACh;G@8e!352(rB#M zbHp$(U9=bK@Hg3)%t9s=`Tl4t<2plv zfiT7yBTaFpN9Lx8Jo|2bXUs4p1CQv${6|W8*vpJSjUQ68i5F^d-+T8%XkpjOJ(+Pj zRY`h~*ex+Hc5>t&U%P+$=i{vpuik6#`n|vKar@_e-`fA!92p)HlCV4F-;9l!BeVEy zU(TxhMuisVB3Fz%)!RWnCBO8&_Kxs1^=*JgN<*C2&o0_rlv{Yeph>}}{J8}u3a=M- zESy@b=EazFLByjG=|)}MF*#+M!7nz=*!*vr84 znp8^KBo>!Kr72=Dp*l{&mcX;Ug}uX+gMV@pGn@IFK1e0Ndl8FS;sE?`R%#|y55AN% zpedk^z+6T|(=4VsV*eYn3vhPg;nxCZA7)55)W_-BFUHZve#Yv?6Na*e15lwE4(0B# zVmI+25Tv(-&+wkvfaecli?C}qv1_6IFpHlgG{)Y(KQx76B^gl@^(9@LFO4^xHdHcD z__u-4V*JD4fK_}1XU6ZsHNFsx2^1JMZg7{l_VB$n;En*JMKB|P+lZh{@V>R69q{=l z!2YH)H83-@#53U`*2{EZ8Q^Iu@k{u0Sja2BF3yLefdv`K*|<+^HSPgUi@WgGfu|dd z&u;%3geTdvIEk-LoueYC_L#rkBHc=05vc|4x0%W}ne(mizVM3fdd{Qyeey5ohvxm0 z6_^p6IwJXbvL$g>+@zStag7pu@zvtH#>K^TPOv8JNj#R2l+ZS*Zt||=w<)F4R;2%t zSu%TRPVw9dd8P7y&3{(#Ytae3J{F}p8@MO9&mvkT1?TJ&WV@1#7~bx(%O^sWsG^)D ze^wT&x$wKZRHMOo)e=&h-2C!Ctj;JV_u@rHCz7|q^g%0Wl01{cUp zVCG>z`3|_4k90Gf1Eo-3h_&QGI)d&*uK|za4=RK|Ob3Fa?=3x=%G7sL0<#pW(P;V@ zQ6HSNJ6J^K0b^SntVfT4M(m@4uU|dp%U2}rl59~uzTO^_%n`4((cVsO(HEiBfuH&< zypm0EDxN4;z|&D7BE}vd)~S`;8mHvP6|<_yx0KfES-Fg-hv$ggPRmvX`Y!nhc)m-}VD>|O5uOYmtvr(d^No^8b(N3Ad1;{6=5x!0G68Bnqn~I`|xJs~zBjkAW`A79d6XYx8h!*j>L2 zRt^%}XkEZ^=cQ&-!@wgpi?MQZ^)>1@qMmR~9HSSPJ5Vd|GcrT)g|m^l6xJ(;kx ze;b3OYHS`ckNL-tEVA&I27$L|ir8Fe1vRl*>;UM2vfN7kov|h6>UI1X#wonTnM^gY zC6mpiNsUckgnjf|VXWllhv7W$5940x5&f0Rz}zy7^^s+`i^4h43hkWl^k33MiGaFm zX=W`~N8srkA_(68Cu~RZwnidmb1l0Z3_YjViQ+bDt#U#Sqvug&w5N(w*-6aTTtHB* zri@y5wJ*Jv`BQo5ZLJJdcXEm9a@P!UvN(YKS1FSB`F)X8L+zaBIar*=QWN!jkDZF7 zf|ScL1;wLn8ljZ(Ema1Q1E6x@P_61sITmP#mFg05k?!^E@Z44w5|!0$h;w|czNH6) zlMwyn83)YEd;PArs+Z6%D=X!-N-i{AH@WYFb?>%P+1tl!P!6e2b+_-9Z@5axwCqwh z%L}wK@Wt&{)4eAV)p|q?_RU1hc{gRKyk2=pOjL8+eUt~tBiq~Glkc0W^&^aGmiwDK zQQJXQQIE=X)JLi$Lmx&tB>%1C!&kpgZK=Oe4tT192W_8nk*KZq^p%zu0(E>`o~1>A zk8J@MHfw5ql&8wy>KE|OPtfPcC&>Op7dclg!<6MGXvf`y^=NhzolQLO+=C*}B1F(s zkw>Vt`M)F?9J!yAPlAQ7qs*bJQUlpl(h^`*YOw*v16*aLoc>Z=W~u=dxX!?MIGF1g z)2BJJVKR8L4l*lE8+iw~yB3OeOC%j$q{wCLdyGkH0+GfvH;gkT_{woTp!)Pw7)UQ8 zn|n*KGcAF1LooHWB6Gz4^hzpQ^!kJyc3E4_!iwpyIqVHie?_hu+5U%+5?o@k(e=S|?q4RSL)E3;I0{WzF^b#)ndbgR;(m^bo0Y8=0WXzr6deMyd4 zPyDHLl4t0rDT3@KxAjifYI2*Y&&pMA2-GlUYk}%yc@p@bOVJDUvvRmvmVCozC=qTC z(SsUJW-6<_Yqhg_fjUwB3mzgbJVmwCo4(mHqGI)4%2Qt*Fo~x^wXP$08fD)f-v89A zV14%Zyq-9vBUo%B;K}(H42O3#A9)w!f3*5t8A2ST1$~ikkLFWnk%ek1_lFScTX}{`!d1ke~s>-O=ijq@hEScsvv52s_&ZnCE3Fi zYHZ_N=qaK;i*HSLoK4l$maX(@+%Z8dOJ_<887Ml*cZq0218OWWpKU;z)yZs}u?=G@ ziu3Fc!}w^e7gb59qcL6y{7f^cnovi30hS{V)s1WgwXGH07FfVB)<~=)LzsHRJtdV2 zRN8YAX#=Zp7kZlZMH!<%)TYwspz5>|8iT)pL5d=)32ng_xKs>=t zfEwAa>U8}coeVGRGWGz`K`W2dBLR%qrGe4)HPH*4q$UPRt_J zz`Fc9^id}1HT2IYWgD_I`Xx-Asc$78Xsf`FZ3J^M7*av(w~-{NCR7wK8`ZFLIu7lM zzqAd+F=`a`jkJKJeLwUEHb8Zt7PKImQ<31+yg|j$%dl>5hg#1O__OcR3E)qBMBZR( zp>#)~D%c5Loa@A7?GjxF{O+TG8m&vO1CDAC$xzAq9eN8j49JJOHZ)^BuuAnSU;ue6$I2XE>CaAsB~?|@%w8@W;6OjIFfqjl}jeEFue z01st8*3A9T(|8PDAxpG^MnhdNAzdQN>L<0@z$SdwuVAFJVB#O7R|Vt!5g?aaK zxaG#c`#1>f^9k% zc+OS8ymUZYZ`U`0E!of5`xwmEOW+B+sCR;5f~<8!Y5#*_Q!(_=efTz zFZ4+8@HA=4lo2wM-3N)u`>zR%z-M*Z{SD$4u12*N`z`Q4MSz6ldCl0lN#d#{~4rI^YU_piOFn>vSxE(XZcuLPZBKm92mR z)o1Y0-UJIS2d3W=z-x2`Mzt((sMDZ`&=YK~%Ye^nh#lruFtDD*RiA;ot$_Y|gqjqB z6MQ-_d`p4i@~c6`qDMA?{WTHn^|QbZ`w$GbQP6C7=x7O9>C zvUWXQF|eR}(2!Y)K0lHP@nc%>VlDlh~6zaMpYhPp0BDPMs#B^^v* z5*T6bL5Fq|u6l|b-oUF@1-82uWlR9J_vTMF*&wj^o<~WtfM_$IW#6DCc~Crv#(mp? zlp(?HHylSeQh%nFgE1AamxN+OJbX==;6WB(i$B1|?PqFvh1S-=4{64?9^~bOY6A(h zErBs=2DfS=TCpy^aX=^TBUqQa1ILpKw)S8!N4wDa6gWbI2oVgy@!(VLjGSYUM=*XT zkzYJUbA6SE`b9w6wK3wL2?Mo^Y8W>;Xs1fB!4%})lPHU{ zY3zyGW3R%4uigtQYy#_rLKyVeY`88Ae>Gs^f#AX{hB{XTJ7PJ!tB%@L!JR?C5SPKL zIcf-{TGX-{>hePmf$hr}(;|GR#c+=sy1{0o9E9ugVId~8W^Lr34@Hj#u<|@$3jFB= zB9AOsc6*Ez`Dc4oMAWen*Vn|DD}g*Hl%^KaF@jMXyx%}{hhPq^gR4s-9-$OwiK_Um z4QfuIJQZ+F6XamPx8;yZ3tXKKM&gpt!KnZ~Z36XbfHQjwQn#WFMC1_!i%39^`|FgA zHVH&J<`(4iyqFY|P*H9`v$+T3GQSk!mp7!wZ&U z7v5F>St=LS4Xhk!Hy-s5!2Cj?Ru-h|f=WwCe3uK{cM?>=svw6f%oZ}%h|(xo1}xr< z=)XYBU@q8=3H49M*tGt%AQq*xpao6DSJWy9WhC%x0W2sKzlWf8jL5@ZqY(W65oIcg z`Ou5G!wb&p5Zw0zW7>-Put?!8O6MOLe&t9PRCy$fuvCm>8YPFi5=N|u+DPCJPX#Mu zDO{V2vu8ur?NS{V}ew(6@ zYY2LPM(LlUv{leQxyYMBD&=4|F63rM8;}@DCR_)tKeUaEdK#e&=0eSlxYLcXrlUMo zw5%0MMae(E34n#9Ak8vJi9*R$Se3v3uuaGQBLq2Tz?#dUgaYyxF*YoC$0Nm1j4cg! zhQX%HNRh%_9PU-o)&i`+jDGaMFKR(qbbRNZS0v=C;#U&anb2-d%9D+6(# ze{6*zJr%tG_aj<|MlAwRFDv@ShB8@E4h|*JFdO*OV^D8@st&ZX4|l0(Ei1-HI#S1@ zFn*QsYcR@}h58detx~}(L?Ly5ZJfBO6moVUr2xE$pV~S88f&;S2X}-Z6%YE{iX1rn z>K_p-O65;i#5)2l0)<_C#uEVAMn=szd{5&$f2u~Lh+CJkr9$67G`l2YO)qZ$RCRurLj+ z?ysQ<-`envzg+%4!tFoP|KGp<`&iuRPeDS8ehc*5jsNAp_kS-ldh`Fj0+6EVXRq6k zn+5OuHsyc!|KrQwPX2!Kw-Af^31}TSckrG;i~O(k{MY=i^#DV}>;JZb`DZKqum1ku z{OM5sX2iXa+CWSD+uHw0!T$&>!Dk;V%>(Q7{rn@5m;X9{o<`j5&)1(bi+}MzgnOBv z=_x<^*x%FszVwe10y+5qrEtan^6>xrzkUS0HuA#J?$2LzSeM@d{kbYAfj@m3Y4~eN z{(Sj4xBaE_AO(M}3f2R^70~!3qvUwh`I(+SZ+!eY-|@)b|E+&6^8XGc2BiGIYuTUg z{UgqeG`*;?7uL>WTnLy|{OVIGMp+0ec4{O`nCtwF752oyzT5Zw^V zbOz@tI#}*cVEyWctA-PuaBnnbW(V|e3b7aYj(LK^id=+!;#d6%G#~F_Pxv?3_K#rS zlZL&;GpH)Q@UzrmAMp}bJB*wIVT&DkQ z1qHLK-$D%7XB6UB6IPup%qK2f76!t3bQ3?sla6#apr~oCQYv96O z4sGpS(B*RiXFi4a1QbVO^1OBxPwQ4^a$$iiG7LveZR3#DQS=0W+~k322Xn@#9iDZhiQ|v5@58SOJ37ru)BVRcDs&RKF}YLOQ@sz zZG{E)HJR8A^C=7T^*o)TTTe(ksM~mTHZ;QS`Vb8R&X3xfMQ-o$`D$wCwOAlTI&?AcfW4%i(alL-AE>UU#^Rj3B$)thxtmlB z^E=%J7@+Tjf$2y+R;y@bv70&yJibe@V5eA!^N4BQ)!v8l9{HNDiPz^_s!det_*VJO zCX@`)fPVcK(ezdDieOW?FdV^-fj**{ya3i#G7O9 ze!M;R=ER$(@1}mN^X0_%L6PRD$f!-R{gO7OeaQNpzrj2Y8p1W*%iv4Y&}rDtKFPR#2CqGl8=Ldj*aRY#5jjkR7l*V5Xy$ov^L6 zEHZ7E8uR^_tC%mYYn`eA08)Wp|!0_%E++&cV#!%$k`gnP0M(jog3X9d?cc%7tyX|X=E-m78-uQ<6BSq4z`#|!V`Fxr!ghzGvrq6C$Sn5nLzdp1!w#|<~I8` zR|mZK6XE@xB9<}qG?p}%vaYfHYA^5j)A7a8Ghk9cd9c)e03!NSV2_}ULA`>e1T_e1 z8uTIXpMZU~zf2?f)5K=a)!h5(b&^iSUx^nJp2vNRa(y}T;pUqbuaaKmJ{kOQ+`S6- z;_in$s`iw6(ctyN4>P`4zbAh?@^$F9&yi%p-L$`Rq@o7i8oI(%kxH9iS!+Ai1`Y|n z8nQKHcF4ETQ^li8S1I4L!pQQ`Wv-PhUu=G`>iBAHX1uJ8H`R?sS zt@D;;u1?*Qv?{S&Qpe;!QeLNSNh_J&KmB%k_l(Jz!P#$eKIhFTm|wKReO_)(oL~Zl z+tPhwpg9OEZi02R?Yx5uiVqe;7ltN<)(E4+%7(rQHU)(Rl(xUMtT1geG?A`@=hh;O z=5pxKixIJBPrC@78@q$JL#S7OJopUYr1}kRm z7W5!}VD44&8Dk(pxJGkSgx8onpc=c zft6Ah4PrWfgWJhc%n+(1PEAjN0b?22A3n6|h`L<@rkknM5PCXufc?y^;F}?8>VtH^ zm}R|;2 zg(t?A);5kcf#ZYEh1?415;8q_f6$enhQXcisclGh(5`^1w((}c@P^;R93W$$rg7Kn zaL;ktiYgT5=U2=7B}dMDo}QZeXUeRUl$3sH3p1pwAK8;~Q}V_YuthhW``pXCrQtI+ z=^e>YjKW`+?wM@X7+aFvXHT`iwXb$G3vdUd2Nniq1r7|%bu@7_w3o2eu}%c5@l>g_ z@SbhKJO_GmE)_~v)@!OA<&EBYo-?i*Soz&{_OucYd+ zEI(E#68cI5jT6kBt@o`zEN=5+FzJ1lhKPy603gD7;SpDgtxZ=Xcj#GafKt)7$&=}7 z?yOQ2Tllqbc~N-LjiRkZ&kI)+b_Zkho5GwT+O^lc)%%OgsmpQlewfUrdNM;<2ltHo zhj$B&z}$Y=6mHJ2thHXX&bD5(gjp__tD0w-ei#QCXB&zcZewLEDb*4u3G;Y6hlmBb z2N3t`;K2~6T8IxHPc6rIS_CbW1@M(jq2_`Q`W=0op}4__KzJ;6l8#FM0J9bb6`yv- zRO3CPbW{EIInC=;00WH%@vP)H@5a=)oQZuo)P{2KB6A=$xnGt}X zdIY_iSY{A=2C>lNxanMdZYkRd(W^t*4qR_wdd?xf<-y_)~c)z8EwUh-WUfOQ%+LLB5v&_2>|V|Q{)TeAjeo{%=H_wP;1BqZxkBeqcB&HTfQH>5 z_#qt79J>MLl)*TU?1E_Sm(Vr22OaPZ=%rrt5T-bAsQb7Vz|2f#|6+fzTe(7hv-nAR zU|4~D&=I2*niJQISwJ?v1|I5>p`$SnXy8JV%j7ieGUXX-8n+v=rC$sk4b?IFrUU=l z8eC#`fv?*IouFKyqwqVpB~zy&o(=qE0O z5|CTS1;?OSn2zX-abTW^<7)9!x!2&FzRqo6wo~a;4JMN5N!uxf45HpZspTzB`A_R@ zvAdq@j|5hNfnfOLE3GcphJzP$F5-JC`#i23_i@BzHt;U;)dM5s9?w_TQ+FrNEq5jN z4c9Pty63FN;I?`%`F?o+_SW~l@rBAo-aej0;1EmuvcM(zPTi?}mTUU*e68i@&>isk zssVv;N*0v&@_Q)ExqK@SS>DSx%iGp{-2Dao@9n^SR^Y1#5Bu-(4c|Ubr28iHEzWye zAj-IsZ@zpKoE1}*?n-C*xG&dJ7tw$_JeRy3lv3ccX|G?=ri1MyKz*(>QHp^RFCH^v z5ELX!!L#rlC(<9Zcr{#&f}%xTHC277$v7RD1$L)W@MrYU%+R_hr(Q=Sb{TEI7N!w6 zU(Y3KA^z+GcypSOeTbTP=8B>=(BJ4V=;H`LwQS@{u;aiD@fVW@%Mg?rgGh(n9wTS^Syg1yd; zVnlEW$;?YCg09Cm<-4&rXoIj3IGY`mOzom_h;h^aC}CHl&X56YJ+>uIhxfoU2%Z$M z9T%r2>kSc4wFt4~>v6(=8eS|D;^z(eW!0?DMjYHmidH?!O=uoxtLKz-Fzd`B+v}T@ zbnOu$k0&atltA`6XQsxfW~GdBiWmyzU|PPbS@;!nd$qQbBm32h4`~N{L)CiFIBllP z_U=_^ay$_yyX6O3RbU1td3w7)`rhODxtZS36YlfU^|%Y_AP+0E^;HrHo^GDBr;sg{D6`1#QB zI*RiN2JvQgoD(EzD`ANig(rv7>$MxcLzI~>Neux0N7O=zFKQQc4|$$xPo0vttIrrs zYD}+`J9zuaSLkW%9kP=8iR>nF;%&W~XNg}$yrH{}N>N%n_^9VcTuS6&}gd#Lbo&%-_H_lKtDicXJbqePo9|+R7 zlK4hCnMT@Q>McE0=?5l&u0Zw{*Y5bdN(26_G*g8dhti+hsY;$&6bX*kg|a0tSidf$ z7-QAK-1g2qa)mUX&QkvMP0)YX3O$9Q~m6pVP)+sI4Ubre#Qwh^?TKJASL6k)yer)o46XHDz}~O+W*C2WPNToRZ_0ts!#Q1i)pJp<-C`OKMmiR ztBTn-M0r63aW$zs-ei3*cHghnAHGrQN-ovhl_>AM?cGe4l|sqkt{Kjc+z%U1weUo# zbD_d%)T;rxQGr#7k?Ky*MDH!8F}F|a?U^J04Zibx%9jF@`ySavxX7%*==nt-L3Y*W z$v$NqY*%F)dq4PYvjf0&k?g7A`Gpk4ddxRZvS%t)o!_fY!fD(fHcV>ZYErnHcrUeM z)_LljO0(nuNE>5ANNB$TT9WlI@g+M3~Tup6Hq5agn#p*SN9HQ13^gq;aTJo@}hu@#c6E zlmXaPRK%&%3pv2oN{?n{O4HPZMVsAEv?Yd6zN2@C^Ni~}B_W+FdMj-X5$bFrm*6fl zw0_FXkpqo{IL=!_>8oGFj%=B0zc++CY z-)KInwhU^W|PdGQH5Wpn+8p^w1pTNbMIJkn4*) z?nc5hK8XzWZg3x@f3xbQb9!ITV|N|C7Mo2j^}1cp^eFBoouj2uyR-_L0Squv#2x-K zxy>7Z-AiR(2vga-RjTgom9tJIE%&93&_-FLwWFU?SF}BPap2}xYD;qd^sTebH$>{r zoPS(h=w5so;|HyYT%MRjIk?}L%4%uvQD}2MWk2v8$g|!t^6$hJ`WG@p#tsP_XYDbI zoGr5R#ih=g9f>lZgO7d>M6-QcDrl2Gn9Q1!*HSpzSc03AKhpDzt89F#JzIe9mCqduTpnUh5YvJ9+ZhG zM&D36d4DHQ(3Mytp6G8AI{8RD==mro;)HY!)z4eJpp-9`zZ!6eyIi!jFoxb}h}NIU zcHcX#zEGLGr4QB?>Yw-~LM*$X1X{Cxjh&dtt zqb(?E;GCvmKS+UVQEA2=GQ4G?T=R>j=sV4?#HH%7{PDhMG1$DD-R(K(UQeB{S&dy> zee(CqPPQF$)f?`vtHl^ETmIG>7i>{Y!V77!4$Vfs@hOlU{-*5~;yD;JnW*Sur9Eusrp@baE^l)Zl4}UUgy69znw@Jz+6#L zHN)-Kjd8K%wHm+=Zlj!PZ`H|E;GQZAiZ-b|#ovVeGE=z4eS+F0RAKh2jIWJ$157$O zM2y;>+Cp>$XI=s+5v#ST${u+pJ&-K|zsG!_Bqu@NCrb$;>mibVDOFsbMJ*S0LM3pO zXP?rSyT$F&A9#-w>D&tHiJC2M;W+6ixj^RJ>0SdlLO2ZjDf0fom2nK^8@Vp!J(gQT zb)ucNtYExzEceE?n(yWA;aW~SKx9lCWoYga=O$*F&|5$2oa{MBuQHV~yd{F%lhg>d z5!SbQMR@9Ai$o*gaus-O(lN_Q?xH8ue=AgSak@Z-%VtJA5>bt*`YRJZAcL`+8>AqpRN^ZTghVdeCjrkc9Y?yS*zCu zt7Ltszs8fjfavH<%!CF@PjZSjMX{4dm?2DOjqz0TlvGygBgyZGF`GoTW;-$=`bw`s zK1(j44{LpV8-0;lAo*GUqpJC)jzb#@IM?QUBCve#52|f zVlZ%SbAYbg55He5VJ0ge(y${~KNcYBtUYlNv!NG?qXV^x+9~}q*_Lh&w{8QSgxZ}2 z-l07NsSnT&Y5(dI@T~uUXi1i$DuL&B6xod^uTKYy`dP4!eZekhB{iRVNUkTNNEyoV zz-S>=1AM37^kMK+G$R9`=sXXMJjKYFI3@TKh`5$O=>3hjgCLaY0a=Rt3SPseL<(^i zk#=Fg*i{F{;she4mxIr87d%-N@N6c73ET$s2@NhFJTDLh@bpX|Cc|r44|tz&FiC&a zJ_D%}inE9_#91hW6Y!7qfv#$M^yx(Sf?EPnvIYn|Bao0c;BEd2PjwzV#FN47!w}Db zNNWOS$?rsIVl(`pc6hDVLNB=-yu)}R01D3w->%FP( z_j?gi%?1iHPX8VE*GHZydR1UG>w$SK4)wuvlinIg$0KNk@kD>L+*j0~Hc&fn!M42` z{_MuUgyrB{4p_WcARaG*6UvO#Z^4(ypxr}&>PtaR#epWc247<{y%G>;lYk1ELyQ25 z`*&bc0)Q!63{>VE3A!Z#omZ zfKQzUG*A>$uK|{|w&y89IU>&&p>OlWk0cJTDCsJpDc6|VwDg(sEa*PQI-$o*h5AcdEL+RI`j3t4I ztqV{6bL3C~wcG*j#F@azmO+WkKq0jU0#1RCd;$>x9#Rr&Y5j=p$SnyiR2EkbMh*NZ z;)6)F3a~hC;0p%~9 z2m^j!2!G#Surv<1-F`qYT?ck<0a`f%J<$VqJpmFT4#->@7VF1%6ab6S135myJ$ZTq zl>0j{pPztN@SxWt@GcPjsG&z=U>R*-wZnml@Q<}m!1^9Wd45B=b^>h?kJ0!YnASe9 z{h27?UqHIX;C&-vBgW@>l(IfBXQzNXEl11;{_O70`%_>?>G<_EN?!u6Bv^kn;0ZP4 zd=vSX#p-?pmdD`qGn9A+ORk01Nk)st0I3oROwLUpI4S|{7l>ciqW!v|0n}m* zN(_y9Sm3`nC7^&39S78DBud@lC+hJfP#qnR(lfNFAD>qfHd-0yv;?f7GHMx)(U}A6 zSuK<$8u!~^4^`0*epH(Yt$z<%}@(VC{F%GP}^8=h3b%v~g|p%1MmzmT0%<7`4q& zOBG}L8tT*v*763(VF{Me9@g>=rL>~;-lFGwqL%5vt~5b}QB~N5ABj={zdC_FGo!aG zsIT%9TZxDQq~>pnQ1s_hAZ1D;*XG1!Ae|-jmmhJHh!RS$fzl{-I@+E1X>&jH4?y2c z#P`>L6s?HSYeE}6MO{0iWPY4yI?$O-aQ{opT@8r7=$|;WdnzoZG3@dT+I?4 ze7j&~A~5nwBK=UmkoMu}MT9?<+hEz0r}J!C_zo1%X4_?Aasl}6iUqF+k_ zcj!m|CSs&Yup|O$u+RdpjrV@rD~=re7)3Ao*^m7T!*|)pw;b}%MOpmlBtP~yA0-UL zb-8%?kzWbGC;8AOC6Ts__VwTjH%ga>RpB$Pk&zw=TrZD*{Ycd~pqDa`OCoSmACaaX zU+RQSO0cdx*u^*8&jNGcN2CY;9Mx9j^1oEGkg6a37zl(oJ{IjbcS6vRjltG`> z#C^qn&i0*=ayi(|FIb6N;A#iP7g(C`xelzq68f(O#(of5v<}`^#uX)D8Gf8=Y5ea0 zTn?Z87*{L)MC4AP&VFnmf%^Kfo__qF2YsiZ#{M?b(IXyw=STTb7>T*~RzZuXKY#O} zj|zZkD@4mD;x7+Z`VoOSh?HoH^>YH&iU9OQAVyvW=F88xn!)P*1hd;i^wrhTv0U?276E_1+o% z2{aq}r6gLoHdgZv!2VVFIkPmtwSN5debo0mtTz`qD)=`6`FsIxZ6D$yW+O7O}mVO6?|UoYUByO{6pAZ}<1xS|JuExZ<#M@-Ol z_^!RuR%>U#+&Ev`rmaRa*Hf5(pMvFus_T*3kIHB2fF-Y;a9`Xbl;CopBT$U0L$5)E z)kAU`*_7VHDo|)_&E~^v)`?i5zd*!sW1KEK$Xq-ZI_P{d20OD`;9iVS+krn)SC4~t zTGlM!;yjJr*I>O!y9qwx6Hown04C2eh|Kv03}1hEJnK*e*d3R_PDTS);Vm*9`|tA9 zGU_pOSK3jB0nyw|41wkJ(>a_bc7v^un2X9_S5{WPgc@12XX<0s37>d@RvF(>V7Vx! zH^dG#O?$2V(28SMI|-{=I4sk@XX%GtjXN~Le{s%qz8qqihf9_{T;Mu{eqA8YOcZx3a}c)A;oZ5=^n)V^w-V$ z1+AU-L>;EGDy2RK%WgZRi?SU2!7d;hW0m9J^c${p0E_Pku*1Jm8mXsM0(bn5I8YYs zTwP)NYf<8Tu*8M1x$Wt8t!k8y~KNPB437n&I0u52#lhE*th;g6cIgv{>vlFfzx{!_~2?$ zDv)7iNedZ74j>o7I~zl$kg;S2xNH{Sdo%eJxvoTcJ`y6dTDIbe@gFjWB&hOK0OAjW zz~pJC>QN2hVSf#5WnX$9SZQW}CBjYpM@^uLQ%)#mS@GL#u+3Kme*^{gz*RsIiqLI2 z#q4DEfY*06_%XV(L%4eU8lD%%2$jXn&})4rJOn*hcYh=3N zjIqENYn%d3x$jUK+y!5JsPs;(C4K=5hKEie-|8)uR-O^gF9l>l`~2~FCvr>X%+H#c z`6!)BE1zOYI+<`NzGQs!_?PiL6ILW1OB$47NV^K(_qeQv*(VqefW_Z>~M%3Rt@*#PJJVCxD zdjVyznD)`XL)oSt;M=G9@xpMion$qpIgIh!)(`V z8nn;1*kY{HtcjN4mI;>emN4rQ>oIG(RksG&PFpKj*IC}07n$Fh&YF&xtmf`!9*B+S z&}ZIYK5jm0PBGmAa^st*2_C2tjucw(y;ui)jZKs&S6F_9%(&$FVBXslGbC!p5B=+f z&xxO05!XNd{yyuEGTIl^81)iZuX(k(m)U9#!(VlCU2`$B$8^k;Y}5_M zrTXGIz6X@+H0Bw4%tv2<0!@EvDH)G_#t}R(@6>u}vKprr0O$Jy+7(stq$v{<$vZ$D z41|)&TDm{e6{@?V_<697Byp9*0k`@O)bp+y{sS|v(@-3&A-kcx`yEV-TcFUn9AhR4 zmL{TTmUY_rf8?T!dmDxb^$MKkPyyK1sjrwI|*!ZGW!SH47~OSnUTzJW;vL$ zjNnQ=1_qdWK*wZaR=Wo+o9bX`UB|xy{--CHG;2c{FkY-8EtJ-SJFBNu0HwG&Vu(nA zzvGx7fRQN}%A*INj&u*FY@etei0y7q-ouV29P3Rpy*2h7EAclJQKYY64g0|jJC7_4 zTz_?_DXnHUL60L8dBq8*#D?H`TxDotOgGLpC7M>74VJagqyE?0+ZG8-=n;FIJ;Hw5 zejj|vx9kV)tL&xh=WGLQZ^3M}(xRC6nTwmZn@Dgit~GoEmgX=xKX-wbeHU-#_jC2Y zF4G)}QMI5G-4|G&5$M+~o;=i;j-oJjbQFetH7(z~Qp$&*t0LF0@{55V^JTV_F4^PI)G8}qK`Clv%1)pgEw zT?0dUE#PG4fQe+8wgaavSUIUT^d)ecHsxI0HE5z%7W2geQhmc6jFahLr|JzAc@g^X zea%zMBY@a!VQvU*(f0T&V~&RIb3@Yucu77O#v5E<*>gw-!IXI&EO|vxSvB#yxvJa) zs8%_#y8Xgr(ue7BV5|3G1zZ8-S!pVdJWnpg*=hjk0dhAL@zEdgx&l44&DgCs!!tUI z=V||r-hxw#Fq|w6$11*_xI-inZX%RyfHTzt-~y`!BwHfXSk8gXbv9TD+d~OBnA?Q$ zIS*V*&{LUD#-54r2t5U~723+ED|s z2cd}37{7hg;R+#N_YU@ix>KCDiY^w8EHLLE&5gCBu+beHh4$@sn|+I|B+!;`EmbVb z%$H5~jgbajYAUS}pF*9pKNziZ5%DmJIZZ3zjeq#_U0&!?&0y-W`A|Ds&ewv{&M+}goCZGCRbbb>1N{CsQy1WZ zt6COV-doCoJMW#GGo9jPC#$KD@XYL z@wV}VySh8m3Re~6KaxXF5CbYNRJ}c2u=!Q_TIC)3Gn(zQt!ISd#iCN2D}Mi%dU}xh=b6t~2jb z!L6cyTr)lMd@GcV+BRY|RfP#>`|{s}2GSBkw6UCdm}QoAfo-O}mE*f(d;lG|IPh7Z z5Y#MaNKlWU@f3cM-GiT16IrBW{DH2|IdEvmq zKL+I%nqMe`Nakrk)qvUlk5HiR@7m~$q&C_t`z7qXigmo@kXb8Gq$^JaJ`Ze}5NR+O z|B2)%_OK@LYUi~1T5qcJgKERi-B+)uht%Edu3S`KsUEeG)|#1noc4{jNc%-Qsy)`; zvg>eN`xDGmf31RM({j`lYWiPLx2r4Ec_=syQm3H{a8iA%mf=%3wCeg6@^VKFoum|L zy*xxIZ%jaMaK5=GRXP8&t|3Y@F~g5_T3vs*n)+S$>*asRzhc180nq`KxU;#$XS)KA z2A&MuNOi^Pf$0Hj0~!WA1Ua7N_nlvqtCedF^|DJkCfWBg^9&^3E@tUtK4_9n!@+LW zQXZfMc3Wz~*sfyunzd{*ZG-Am2l;VPAxe3)>bJ`1a=8$>AN} zRg8EV@k`|Bs1eZ<-*1iyiu*IZf1*3-Ve)~G6Vp0n^v>#^(>RI-dW z&AX`YUd;J3td&^-n*z5L+7Yy_aPJ}sMWzJj1oteuzUcd+m5TK*Hm=yhV)Kf%D<)Gp zdS%hzqJIXr4L(ssD$=F!z93(rMujE^ZfBfF`RT4|u6oWEj!x9b{LZ@6vdetg^on(g zT@iXhx5+JR)*bryD8^1g_xmSbJ+w29cz^bO>z$5LP-Aa-Zz-?M>!3zW2Q`Mf}#@Q;pWgRvV_EA1we2H>F$y1tBRqro! zPFhmOc|W!KgU#*C)2T9Oq;BsvOCHLVhl#VAf=>O%=4T%TV)?zjzGDeh^gp0~u+sS- zme9^M-L=@Y!F9lO+4Ya>7C-m6R=9?_{9UKPN~?}-j)smK_FhyMZDQMN&7r32L6i|^ zn(k5c>t~cYhr<(WBwZxuby2Ub?`Eg$FuE#-eI2N9RL(nu5&xh2dft)T-*Xma_s;5^ zSvKQ*+Va#NKK4i{l>9L1x5Rb{|HQ3`MdAB>#pvQuog%-Cxc9EXySL#h!zYC=4*xa$ zMR@6VGvD2L*FNIkh=q|OqMAn6e_uala_srI%=ns#dy=XpKS=p8wPO0SjEz|{a@yuO zJz9Q}FGYI~65yb5g4y4C+Sb|e$l1&908FK%z{Engs2f|m$g3h;Fqg_8Z4>@iT4J)=P z)~=RW=A)+9Mw_vtvPyo&9^`y7ZgbhBTg(3EpXhuU)nmSSzOg95^+vC&9olc7p~}+^ zf4|Q63JgXMMskQ+S{q0f#)nqMW>y7aXJ7-nNFwjDj(kixaOmgcOu3}ejry%el>4X+ zm!}5gAu6z1@i)6nqC#R5&`?{cmjA+Rvb3Ti?^=|-Gb~lCeXJAFo4pSyxgzykC)zgJ zuG(U3{`O|*oGiB=v>&&hx1Yu`enjcJEu1m8?F{CRI%Q7+)+tBlgFbD(_>W{)@a9Q7qy+BJ}UxoqDIgs}b>4 z#NQDUBS%K9i$3!Hdd%b4GjZ$U7bPrDyqi=sc|poU*gQ|t@?m?d%Zka~nA?c@PiF5F zRIN^FQTkZvft;!gHXSg3u#_efFx@fJIo37IublrM{yzUs0m}k@r8c-JuxeoWKue$! zcn?3=At2m;oqs2PhyNYFIVgy?^ef^Qfv+6ws_eS&T;Xi!jB>1Uba$8>yY1cJ_sxfu z^DEUEw^{6#*&w|?Gp$F(wj1iEwdJkoiBD!Hrzcst0WiPTsBKXD`_?U zuGi!XW}JKt^1CdmaM|iw5EZY{;7X>Bb3T=vjc8F;Fg`LiLnos&NclYTmzHOi2CSsc zSU*?;sMa|Jh3qt2OIUut+Rxe_PzgBI9_VO+!pRoLPR9YqKF4OqFOD&eLFi=<=gM0+ zN;~`=#fedJ><{gi>GjU`94um+?Q`(68?Cir8l1FDLyc`0ky`?KoGH|9{vK7#`tVR1 z!I2mvoh5JmFFDP5?8}WJTepTh;!^TpFW9G9P8F!n;0u?AO#Yvzab9+I@9dsgb(rhJ z>GO9;YbVD)i+#jcpC4H{Vt07!x6Q&@zM1u=eAt1ou&{r_x`(w6OA6~29{%o5o zud&~Bzr}t#{hImJg^2&yrMk|!niAorJAxgh?N_YBEty2?m5h7QfE`Ls_9;8oZt|Ta z)fc{|zMekK+uGNkQJ&@-qYh&ZSIB<$HLOBYYKZ(^?g$59I%_-^iW7de-nI~11$#?I zViWrsl)-!21MRnL(-?nI*3~Gw@1jQPO6sbXAVVG)ZS*EM!oIsRM_o= zEmVcEpxdUjxT$duV;4pD ziPYalga*D0d3NPl=8GMn4Z`NU?f!P_+aKQLMs(3f(pryR|cVlbi5tXjm8P@9`iOycbW@xNU(B~0l{X}lFm$U<1z?afg zrM0P!Im)~ewV~E%8yvB{wQV31Fv0e_?J`;z#cV5V_o$(K(UM{sVw|CbqpYz5?XtRX zk1ohnpt<|inEZR(Gm=oviE&V~lYoSqz);~F}P2*NV7oOXL}a9d*`ms9GQAOVN=xW z@M&So!vBc65uF*eIDC1?AI}#)o%8JJi&r5LVISU&j{ZHSQtb4&Z{oj6OiwP7_8ZE# z*_pp&Tit=aB)zgU$uLW6;9cvv?e5`8%FjjhYOimfx2vaJZpW;|jNFV%na{HFvMkw3 z_N(m8xm(<;@)zP^FL`@|$sA-Dq%1ODvt>G}q5ksNxykv+>GaF;e;Sxv=whKGfs0t- zjP{TA>+d(gwaL-L{sxVbT=Qb{3siqzDfQ$a7O4)Tid{FDNCMsP3p;`)X_kB* zy_;>Oj%2Wg!dS0Gq;yxk6Wz}|_`ya_M6fHB?JI?p`W^aLG%Dby{VqFk1@Q%`Lr zc#%_}P7bhE{|44aV>uh1SyNL0Dw$uf4l7mIL+DEh zl7-SCd5-a(=}YR-=c5C4AFNpuqXYZ<3-4P@KFB_PSv|tn+mn*LDy>&i)z~Hx_riLG zRe3utqJNYzGAC^K%gayxdK~raRH!LDH!?kXNX+B7!wKn00V#Dp4o&?oEhXcN?0$Lm zsS4bjN`!l){`!0GNB6IJhuwbOrD~FPSGD>^d8Xx_%HEsVBJ&7!xVvR<&K{ieI_G}w zQTKb#?fjQiSp7A>sjrVdPPtP{%-q9K0->uNJ!b1x;2(kqJ=XVRf z-VCDMTlRNUA-F+i(`tTU>_lzD>v~tMgF0M|RQu_Z(1E*&k|R5`x=%~euSq#dlxdcz zu}kIiRo1=eoaB+0>t!oye`Qx3+03&&?f=-$S|?h(=$5uOwj^dRYw{Rd8|TRtBrh1S zuh}oEAq|vYQ}LmPFJr3m^Psn#^|(Su-|MUip5Yw3adLQz|a z^`m8#ITI#fAayklQXQZ(6{Z`a*N~0&<$38bdDHFapBhnY*+(34)zr&e+x(Te4ben> zOJD0eTMM+D{<8gQ8-R~mW;5H%+Yj2Nv9|L=P0No;@lP!G%;buVtJo2oM8@z7<9X1T zC*&85_S4h{SYVX7tHx-yy;jEJ4c3}&o3EJuQOZk$)oAYl&j@!l_oCcuS=BxskD2ne z!K+p;m%rZg?s0TVlq>v;kUyR!KTUaFH{?{9J7U87vT?%__9c0e(?3p4pOxjy84PDp z&kN3vQ)|l2V0z6rJ~pKJmY`8+^d@=()IC(*oadeFHs?4Y%nowC>FiHDg{k=)Uims%wJo-)DDQa4hTgG0GB=@}#!*#yyD5n(-=on(ej=|2 zr&vZ>4SMo{Y+~1T3;OCuWq&GZpJL~$nQ<{W;(y_Trkk_OktpVFF;5|v`~bzo7M4u& zJ98IvBst}&s9U!%)-*m)eo>q#v|J$HcSly`D0vNQvl@%*lpo{nobw{>VPbC7`M0It zY*Y@hyD+Slpk%%@pZa~9>E z$vf-*)?+4D_HF*j{I}j6+IqQ}#prnE`baMGBpIw@j@zjEJ@hLbm{90IP_>}oz&(C% z9JOqdEfvkpW3AVPm5(Y7F-Dpz z+78%@!S;P>zfO*~I6UqfHkleA*X-RLeH_Qw6$ zOJ9KcSUsmb)HkD`_86^?^X#rogrZl+yx-i$Qr7wlNAH3j!xiR}ZPsg+-j)um!?&`( z@&mbtE5?ONM-+M1NPQ(2@yH0Nj#QU?!D-2f|9`}6&`{RpnXDPF84H=>nfooKdZuAi z{Wqhj7Qh_iZ_&)}*~@!p4x-Ndf98(nLU@U4=rAv3&!UdGf_V#(LT7x|Sz}YE=z!EA|~+X!AzG$DFHlH;hnASL8`<8|iEOYE8yHU2K`)8f55^PhP`)!X_;s#ae0^>_c8bun%0#~G<%>HD%*5Ij$zNL3FD!arKh>Cv5lOd*FZPBFf6{s-fiB}z7oXreaOr#1IJN=wf-Hd{iGOM zSnArAG0JbVst&O|#H)tcd!nK<0&ej!`x4tIYmB+R>7_DOcA-P9$Qs$4>C$jR34J}Q z!u`I|YDFzfUn*??7qcJy#Z>m`7AP^OVxF+fvIg7s+n%GaHOv;w&e;j;HDdmgs2@(T zUbZBgJydA;RoN_?saW)ax&9CI>#vb>?4!Q`xljd6!bU?oR!K!!|9r>MtCK~r8sD?; zI0bLg)H2Sp$nw2q7Cdr)%O&%D^J8;2%L~*w>Jh1)V~p28ulYHU(<^lJ>*3*9QCs88A8vl^oZc!kE;Bsq zWp)`9ciVZ3s6(_1hE_@o6la#07Z`gOBz0VV@%+u+Z_r6G>sQnc-q(4HvTtYPraLn| zSy8zk-KFv?=U?^ICYS!g8%G6>Liz00UM zag}yHvyEp~tz`CN6c}OT_cd9Kin0)#z$OqjceQb#(!QXcYhzHphorxW24+zOY6sQR z=b1*rM?PUm!;_A&q?%(vDO5y5XC4|jb8UXMvep<&8_PO&OV69unL3#Un5?FgM%ma^ znZr7&juZ!4_+RSu)|R)(_vOQKXI8CYL~qL&!Aq2W#%l1~YoUN##r%e~c}LT1(;ibP z^9cOJ0dpVo0d@gXl*vkzd{f@ZN^TdJib--CITCu)hogpEot>o) z(nP9&bue_*Yl4spl9q$%XsmQm9uaRe<+s1FBf3xDkth6-3KlQ$e1B4_dAe5Gm+txK zu7IXOSCmPYW%}^mjZ)iv3{QUfAt9+z(yxg>C4QN>CowazZc?oew&ac}J3byr?U?>J zV`wIakGo#Fhhk+NR;~+7gIG^jvp%$ru?@5}w^g^< zh^_`uxqKjs8y(I6nwFS`Qdw#w-u4`0X|7b12|s5?+RB1f@j7b=-sP3KE2_qOOv}h53?-9bAmTeh#CL#r!;8x3 z4j2!wr3>;A<(jbt{hVNYMNPo_spZPfN7={CZDmSDafRlY$hG=T--Qa zX^C?EWp)lLN{y-NJs&1ROSG7$!tC*Y_j;nOMc;mwTn%MNiz3sHiB!ZZC#SHU8-%Jy zJ>xF=t{U+ubNA#u%#+;r^4jHX&z+u=oBeNgK+evbI=Q{` zEbe~p*6s~?L3#6X>*fBCTQ4suZ=w6Rd#!tv`+44Abd4|PYPsw3nz%LhT+b*^y8E(w zzx$%Qv1f;;eE!CKI~BHI*P|P`j`t@mRc@S+vP9I50)nAsWr4Lw>(ARX(~G{QPleA zi9Tv!s(jQXz6&-!H2!H!ReCDJGwQ|;rkSQdQ#7?jHW^2l zc9>^c?9@SsG9NRwHU6YT5@!xI{(^RsX4+$1Cuf3?tZA@IcRAKQ#`PQakMqC>z6Es_ zMZRN?s;PER@;`z0sv)64p)FMN)F%2MNvAeK8RIk%on@tP@?3}Y!G?L#UD>J>X3T#n zeMU`(3)c^)>Q^djDom=7hJQ?>Aq0^{jeBoy}GK z;0y3w@^0}igfH3CchgrGWq>TOJuddJhN9%s&Rff8Rew^it2NY_D0ZwuyXF_)Oh!Xt zkb@R>YZ`#1O#%%_#Ro%0)~t=Gruc&RyPkYd$|tLz0arUr8b*wN2tB>>@+!vHdurJa zkanWK(S?0efpOU@4U!@ad%<4ym9nH&tOs^c1>YhsWq&PLnuPy;MJDs1vP)@*j;|l% z)ClYArQA{(jc!>@<(fPWFH(tY%utwL%2TK()rJZstB5Fn;QS-W9UTXea8bS?7saB7DlNzr7GjUHjA8?G z(uBXyfI6wiXc@qx3HauE;Bc?NVS1nq)pFH+M7RymI4e&L{Enaw=Tk#}4H)7WD&%LN zZ>MuLJ(yK0$|>X(yzpiW(p>2RSF|5|_)-{F?Z9DP*ScYkC)oRx)PF%smZdI4S#=Y2 zB#)pD(b9L{w@7`>erg@{wr?f6I&r>s>QS{A`>lnw0QMt)(Bie0thU?e(b_(6x2f7* z7zx$kMa05KiPYwSEWM`Hg@HAQ-P(=XEEIWW^0Tv6R8zDT)G*mj^}eBCNQZ-tT+5vf zCW8|Mx?&8~T^cImmHtXOlb8IG@jc#e-TMu#_4} zQ&ER)g?2&}!xp_UXrFoDPAky<2E$g^X(s&u_}<%EqSge~);ZV-HhShf_|@ScNe6;? z&4Fn#0Lv{42VyopJD0u3!JPd)h?0Epvp<4auAy7u=F|pFGyx@oF~q$q=#y@G9X(%* z(42Y^_+1CV>6*CiLtOP29Q_M0xZz;$Mdf3eYLU-Cz=nc{jVt(m0wOjR-1a+gx$z)p zudsK$iaQ>RZLH#*=NLm*xXwSYli#V7zYc3j=1NDBG24mK<&Plh3&T+`fI6PbI_v~K zt2b@%0X%kJJW(V48<+{r40Fi5_l9k7fV%pm;-PzG+4_v#d-U8_U}uNW8|&zgo77 z?+RR+tKgX9Ku@R9i>0VQ8x5cD6#jV!ef$+;U@U0l^Hj~h#Gd0)dU$}|l`B~cQdy&a zo`Jt!3v&Gt_h!eZHQj5C_1q-7MtfXQ54uD4> zGjcCs72CM-6C5#%MQv8nMJ|A)qQM79` z<2ju>e}q*=&}M=`5s#Ni7pe?eP$!L=oF z#4~uA&9v=F(D~Om(^EXqUhMxn^7*GYcPMx9iZ`eu`i(LVqBSRJnq91?3_(7-9%M#J3mEL`r=%JsMqgb zz;W_$HY@(6WI-#5nZ*O=DUf$n;K~J`sut~7mj6m)>#R+=|NgYXQ2ata{%g-Yx8zQ{ zV*9;mhn9S*33n{?G6bVaN@I%ED0_7Pt&p2Vnr%{@QnnK!&Y zA7+}U+is+HGq7{v3DWt?M?VX6W)c<>ORGHN_j}F}Mr)lcU=AH(e!GNEJdOn(VZQs1 z-^a03!Ckq8PuR;d&#=sJJ{id|9?_!Vv|}b`O^4Hx&+laZO68gb2PK`>jiqgcM$211 z`wAY-Tizimq^q>B@KS=0XyR&hIFiNb>GD`+O>99}Nn!d!a8jFL5!JEE##l_nf>B-t z3#h`g^=PkZ^pJnS*eij}3ahQj|AlDz(j2Wa79*4|#5+o2OEu_^s=T8H?=aANqW*ss zo~c2939Ayd&V}Yfah@&5&(eGs;W%};wo3S$4!pAk|JB8VSE0|UV!gfi7R=ewyt52P z6kIsLkQ1ZI&3y{~sZc;rX(OR}pyRJCoWC)5Q<;N<1fm+$Gx_w@N+^miD)MWugHRi9fc z;86;$qfm>X*f4h^Se1o1hd5s`{wiJ2D?$mT7;Wm{oT4o&amFCptqhL}+5g}6O|LX1a&C+NsLioz@qBH*8`3Lv z3;aq^?zB4XT88KA@-Cs!qHs2$8c~%01d~tLToC6M{9GplR`74l57vV}v6|`+t{tx0_ggptH6un)J|4juJ z7|j1A|NjbY9HSEbB90)~q9yoW^uK5`VNt>#**Lebt@2o_%(aTKBj#Zv_9WPuB5o>7 zq*as{G?;r9ng>FIfvgKNKoIR9ym}d~r6$j%;3K2y?KZ~nMru_xWG@o`)=d%wA zMuLeetifmM7L3tWjMMhmOI=ze5F2QYHPocV#q1nVU{6&GET;-Bn26nq=v|D3X1q`M zm_Q!+So$ljRKx}1RiT=q@y>XzK=68#cukBu!9Gslk;b@q!rh(3bDrh8Uf{1^;xFIu z*A3#%<8Uy~!^ywI^ABi|dqjO_X^%gc-H-9P+xXeP@wC_Qc!oQce#0F(e@eq7QG>HttO&AF(>Boo*a5z*sMlG;GoCE>>Y%C3H2Po zMi%|~Y1FjAr?p``HK!d!3x3Aj)Q7qJ3*zeKM82m{SBo^f;rq2Ag^cqhVzf0d;uo_9 z*}^(wG?DpW&MtIfN-`!}V<%_e&3@FL(GtnTF}-0pc7`kI)*5q9)9IhHSV~)V=ex1i z=%A0IFGY<3QJ3Odc(hh(cuXi*A6#e7NdQw^61%=e-1{3X`a3b}L1x1X%uxr4UhmUi z!cz$kD^x;6Y#{V+{ITJ31wKS5BfVo?+LiBLIP*PbxC*q&IHLSaLj!Wi0j#eoQ6FV6 zT7VtMgSR5{&{8UnQb!`(B{K?hTV6)P(XqFnU#X?jR#MCIdW4P>jX(Z|>6LlL3B z;eK9VVbS~y$uJJ-Q|;y_$@|> z7-g^d`x-~S!}m*$5zA*oII@{~04w>-f2^&4C(?|ezr{*S#5}k0+E19hPxJa4{(8xI zVi@bGScMVqkW0&kbL{tAgRo~YgXi*^n9qepW%G=%u{3_F{4bP;#F$Ct72&Z>cmq)z zLTGUbB^jZ*7JzjLZ&#a#;Ir4FxC_o7h9mLod3T(ysDSWsX|90-71ol?3;HQW_MVw!V_mtx~ z;k`u^T!G&~1s7aBT3 znaP0t2)!p!wM0~k5YJfn_VQ^FAyfUC_lwFb;*-LIi%;b7Zo&A^<6gy)OkA_ApnXL2 zAgT%oFDCqd5G_@NmM+D8iFhTD|3u}Tk~~+2ZxLY^;ipjF6MZ8zwnUUuh);^SQ*e<) zy$zY;iu_Ly{|n8mV1A49h?W;tD`tBapAvl|^teQQ0&%_h_*3CUECp97;v7*?Lfo&y ztD-%G;+5zR@rvkmQJ+F+XldNt|9Z(sTO>2)vUpBJ^+HEZ=n{z|iGC697F7~NlqVt% zp-v>!sf4Cgab_(OR~C%bnYlJ`<)W5`SS5%GDk3rwmSv>P#47HSEr`1kp4iLviMtlQ zU#Pl?8V=$rg?5#QFoXt_h}Q&rOX%2%$W6pALZwesND(opu+vXtTC|XORcJ*C`xUXf z&`1+XTSCXn#s9(rgax~4GZA@+`w+2`s8{jHT7>?bP*@WEE~-cfjVPh~BwiIQAgoRN zXXP9sqWpALao~L(47)z6R$W6T14pX3Cj|n z7UN3PtJY{?sbEwIZy=8F$&-kmLYq&VOIW6OMOdon@lWk2>UNam$c6EO#R^^*I$t73 zR|#Jo%yS~*DZ>AvdX1>{Av}v{1wZ~4S1Mv?p_nFmORO(MPm1VKj2I(lHu9WM{u0lM zQ6YL+j7ZTY7Cxu&9?`C!dRthBIIggm|M|jnMvNGNVk`>PH(@0r_R3*y7u96MJ&Jx1 zQLykm!qbTnEv`zemc&>VeJ9pTA|et#Q&gxCwjtL2A_E|NR9-<}e46wArzVzL(9*(J z357DT4ii`SNnh-fI+}|!3LQ9cF7dkXyTUre)e7$*?nfxBiK`SNTJ)Z19q}c6rSKaX zNB^Y9D2^@KON>RKwI71YX zTUe3!OZ*m|PWVC>wkv$9&~FqiF2<|4c5$C#3=3^VcR|aEw#cT{#e5*FPF%5Aspasu z_=L!FiOiVDKqnIEd?1F20hcgBUk1a>&pX52z@w_Yl+&i>rn9nB5|xYU6R$8n(Q3Lt zz41hJ!$R1BA_uAUHY@-wxJCLFX6X{cC~1JSLMjc`V-oiyTH`hu@(7}d7_4A7wbCw< zD-F?45TBMsg|{?S(9W@H?MtjR!%#;$L5-Go`am-6`=z_o_xQ)qoIR!BNhzO z#_E4a7sI<5S#qb&I?^HBA_O79}u~Q00 zXJ)4Uk6cf=YM8I>@YMqecucAVJFl+6N85$!Z>VQ(GIXXgnMGTn&j*9GRh{MijQboe zrD-nT8{b^bU+w9wuC`EX>MywWv#OL|9dwEtmQX8SdD&%hNe$Q!N|z2O|4Hk$nrc;Y z>`$dX4ZF2=$}(e`T$`BfGP_Lwse`;bd_QW-4JmRrgQ~S4Tl+|#s#WHl?G3A?m-<7^ zM7`YO?4s?&vJ^cSoJKSB6?$n0yw$Z)@&F}Tej`sOfBjs4Z&)msXCGt+H69guD@(np zw*gf&Pe*ZFkCcB0c{x^Vs{bZEp_WLn{*yXg`$<10pEM>K{`0lcjo^Y7XutYyf&=MC z4V`N2a!!!O8xpkBdT%O{wAD7M<@GeFsytT8(_`R8{0VBlwV|4X%B}W?)*XxghUyX% z*%5tV7%H_f?AQ9Lg&DYh#d z3VAQ+2Ia9d&~RD1q;DgPTUa|y@It=^IWfIXnm;iyG8$3J)-W_3$xFgtsjB|R!RTM_k}k!KgicbH?aS! zNxvy;l(vSKV9~zPA4xsrMfwBms)e)=e86J%``D9Ibi)&NEKjJDv@U4Kbv5=eMku;; zT0QLj!?)6K6s+l4NhrRS0CAR!E_xGoHm@75$)%(xdSiCz{iO27C?#3CgNn!!Z3CmF z9oPI6e1nPVpf3#p=!K8d%4okz9`NC9^v7P0_bdH1`^{e&(%Geduiaw@OQPn$8^iaK z*j*SvmAb-=yBzHsLsig5^W>BIZMC=BOjo5JeoTpv8Qdj1j;Rn`r)me$0VRz#*)^6>nGBuTKiJ0voS%tO3i;b7E4IA|%+I6ib ztGITC>#Vf*gOPDbL}%>FSy;o4HnfmxNrMbOvd&hhLOO;0_$aA8Jb};IuF(J2@0wz$L1@9@g40N~+*#$Qiny^{J}?N|Ko1m@U1=rK;0zG08Q zv=mja<2Z`AVmvh?PmxKAr7mhm{O(}9>r7TNnxdgsTtPx1S5w@wAqxA0>YgXGmw&m|C#^*a}U-&*7H!O}I8q z`<*K(qMcKBs(|$`7FBr3lGJB! zbS`^B<2Y**!xeUCztGyj==@0Ktm7aA)={1IA9mEAGAAW!e!Q;_HkPL~W3PP*yQZh9 zKX!@T=h@i)VS4@+anJ{@;ep*Qx9JxHcx&s`trD{8BLOt`v z_|E&TQTyqF?@QE~YJzAP>#O7QdS8NA`OUl5Yw*qTh5OF>=KG%e?x|^@9LB1rV30Rp z8T&1j#8Qc3v-Bn4iT&u)&9wC*usvnr==2BaS4!y!x_q{>0v7QZ{L*vfl~UdK6&Ty5 zruiuJ{BD{{&4zkl6kCHX?}IK;xOp>Jq&VwT>YMDg&4hn4);5Fc%A4(F9QPg5;F?`> z4t1_{6mzt9Jar6nj-whxHr(N4xG=j>T1tWaWVD?^gV4{KY1wRk$O+CKmHBu2@zm6m zz~sgsY9=jAcp4|ie(^p#dSZ0(=#xrTyEl4s7_pIa)oWzN)`9XXG3 z=jN4j_w}6j{E`nyomAXiXqq1-~(3e7GQTxfIPn}B}kzG0@4C&1~mz)U1(oGcmMHz!G1SgYg{E8{emn3azxvW zj;>UH_|ZPW_N~=u8DNTGM%xZkUzRe7iC^kb+5C?@JDu7dRs5UAv54@fsK$D>XHU%on{roVm(1Fc**4Rhc`M^^ zMl$uaYG&5S{5rE;R;%pVsAe|EEs{6e{cXOVdR2cRRf8*k5YCIkT+edQ`jveU`j*@L zM`GEB0~!QG`#<;Z8n8NGc)$n$cK-AIB3&WQILA!;3u{SBh;gkv!a!w1VxNobxqPep zYhm6vPj~mGyegnaXQ8Zh)YnVBNga>#<)A*$+*Ibjaw$<6k)fWbC z9cKise8+j)72{Vr;6=c;fV2Lk{mwh@!^<8{A5U~VuqRMaU>S^Gf9rEgdrLp_P!syZ zO0Ha6xv3=%l{ z+jHuc)wJbU{xE-I+6qRuHd>B9N`(zA_3O;yJJ37+T3zN_=&kH+<2{Ln;}JDni-pBL zlQrKn*0GZex21@eXr-nzC{1Hs%Y~`uq<#ADQQjcl1 zxwCbEEgzO|2YZ(7nl05f)9!RMW%RFbU31NLMNpUHpz9mgkItoza`t1^g_e5ey5?5q zY?uIpqbfz!ikcq%FlJ1G{vjysW9Cn}J3L*eR&ogR>jq7eE}N3AH|>uc=bTqv zaen!}V;c4a%iq2^N$=LM&qYpL^&Jo>8@#%In>m2Wlb*yx(u>Wa0XKh2Y6hf`NwdRYaLB=cG-w6Ghue|q!=Y)HJduZN= zoJ|=wk~hbHi2gciTJ+lYU&X9^za=Ul@@#miw=2WCym|S0?;ABNFZ^IcXvB|^HKS8w zrX}?GU`YNld3$n|lZPPR^3RGNT#f%sEv$R(%kfojUB9_@x_s2k z*y~r*FVWe~alp13{z@auPMBdQL5>G2PYnY!Ki{nUN1kMlEB~3Nisu0c{U{pparWw*F1eoES9$Z@>pd=5n^C?_>Im@U4^c`xCjVr-fg1RJOL4f&6JWacv(;x- zi+4<*VpbF-BS7sXH@uWYaA_>+oAhnWYv zGmmCb>G4nd9{W1`_x76bxE9+=+KyAltCMA_`A5@T7}h@YI&CO-UZ%>&BaqsEpbqdY zl@)_PXFroIN@X71sX+0ZT*B`#W53~?<2d71OLJ^B-x>pFYp}HuH31u0o51Q#wl1+c ztVJyzQxVf5RPp_??!%*r&Zp*oG#e|vifE{%^Hvu znh~1%M{;=L-uTk-N8|sEKc289VOe~W_&c$SV)w_^j{O+BE$;U?bG$u%R=hW%_J`}SV?$5mq)Wh0n);kTz(9MN?zQqrpyHxF&juUK_uvd$Z))>b>H&8clR z7Nw{{sM62!F86g&$FlZs$Lgv$XyP2!fjjk!hVy7qPp5`uE>$Ngn4X*3QvvZe^LQ#5 z%`rD1dRYf=rY~1e#MaF^9}cRHR&}Ojp!G|uY+VLV;s{l5=25G}Va_$ZGF>vAqmp7h z>SQdYp5!6(R8|oSVA+J42AWTpUz>|s`dK`!d z!q;-bw_OM3KScfm+_z2MgjS!5mc$N_l{3+FNXAYZkwqO#73jaU(&SJstBGoJ?UkCP z-cr9MVqE1b1-D?1x4+lm-JRbp|AS|&hbph`#Jtb*w&s@3ZIY9a-9LMKR?Dn~ne8$k zQyX?mdbf1H^hIf{(n_bLq+U*)lv*dXQtIcaKc~J*t(Nvvnv~u#{YHA_jJp}jGaF_V z&3>M}G^b6@q) znMgbpN9CzP#xgKJJJ2HIjDumc`;l+E&1&)=B^lP2%V=k$M8Z$F3@7Cv48a5R@ZbEk zMOmr*%=cncbH;&|?@Xi#w~4lyn??uYex4Zi#Z;|b#p z>P$qkR!k#p?lM&{wJ{BW$-J2L>NfOWw^0Xao9S=nj>q`qL{m6AvyrAdSi?E0ob13$ z&!sn)n!e*P&D6)#z~pDjFowcrKSV8)-LP4|qkcgLV+BU{2iQs%VBoJ*CMi9X`e6DM z>Rr5}_VspnbA8})6s9g?2z3DVlB@Vy>H`C?qGXj)Kq*`^>?2e14Lji-$sUwtf67W$ z{5|M_-^t8>MSfh=z%GgsPCOa1v)X=G2?NR0)gbSjqP|hD(FZHl@8O+PQ8RsEzFod4 zzGl8$?=`q4qrFYMMZ6#L@8oaFADmw!|D$J@XSAo8r-&!n{m6aP{fqls_b_)G6ave; zi@A;NTokJHysSJAEUD`5q3-$az3zK%kGrU+wx_%22hVMfJ%334pD4pt^N#SY@m}?2 zd8_%xuto{-*%`s#s5{iZs7;rtI<$sxfre<4$bBpz2XdSY^>ytf*#9^(xzG6hp&&ov zA~)0lF2GDGaPI`uC@@B4!4E7THyuee$^r1nu1m4h60Zfj>}R+s@nj?VQZev%w2%{- zftq4Z3#jvaf%-F1#$;m#Y$g|M{FaQ!uBI;hY+|Zws$r`7|BuS1N~U0wzsX=q#yVc| zsawXA*v$c$PYd8Ge{1|2w(@u?+4P`y>ly1)aV6MT*l09r*y>9>^>ZxuBGoZ|faf}h z3YC@N;0Guw)iNK*f605`%#NdObrqDMQ{g{7q@K`TX#sw}7dVxw?2y>Wn5UCr`;U6t zyUDdICH9y|PO=F|2eHHV0hGsc@FSrQsWUdpH{G{{3X|u2kA3fbIX<@!xihsW+KT1WrfN?ZG((t= zM^LM7G^^FY>M*Jb4&(O-u3&;X1AXwBe1D}*A;UD0dV}Ao%hlED2I>~>C*$;&dR4uP z)yAkvR4{aEb+j&I{ibV+$(L=VhT#Qjy~o2RsSFckGMMUJVBhb8*s_90=}N|O1^L!T z==)lvns6^Bp=iHVIx5|fLaD4{rHWP$xJZl0avX=bbdMhK$~H!$;Fk7L#xQRzRMz5` zcH&|7D~Ith=kPb@l!>EafVwNA@nl_;&luI!lwd{2{$9wp zWVFhtobo*^$x(2oIy1tH!NQ6~EA%0w{0uy<-{9BJk*1KN90EtA1vT#~Qt!lEZlI=N#n7usjzP*!B`o~GoyKC z68xQcXbK7J++6x*DSVbC?C@=(Ch}g`4QJr)+&0`YJY+P#LWe0FzEvXgbv7I|T&Y3j zJJaCdJH6of1m5wQ{f9UFe98D1JC7%^=sg^96Pe!iJeKpA$9ca1B_%i-y|`|H$QN2b zpD{1qDnP9dLVv+|Lm1v=3I*8uVaW z9!)?jF!@Ph-&m;4Xj=Cqrd={VxLa1Yy`rpJgUh zL3vo-f#5~%Z%{1iBAfr|Nr%Mm(70s$#7H=i&Pf+->plA=X( zXkmel5Xd@#sS^*uxr)YWqWBrjPw|Lk=kFzWh3NmsTnZLP4DU4f|_{GPeY=KtvRCA*SBoa~ju|}rAGwdac(XGw z<$lG#HQ=>)_MIgB!wP02fgP#Fu4z|}UJ4(58U9^U)@{c?%?@I8&u7q2B5FGiruQj! zT!OO-{9w4=gFflPPMuJ8iqX5{H;2Iw+X)Xtpxo>z%*+|e&USkbVPS4e5F&aiywFfwh1BPo@)q2Aase}{o}!7ItGHGCi~di4eO+#a(gUhsvcu#BG;Bm>g}~!^!H$F z@dhL4kfE|XL7JoYhhg24F`NZMXALN#veFH7ks9lJ4VR>khPFg6zk`LEWQahq^o^dw ze190mn2~*)?L;Y?P>T~-sZ!D?!&k)aJN4V(h@#m2|3Y6ze6W%|>L5lyo^*ygZ%B;) zH&Fx(FLvg?MJJ~``mH}{7xYXRL+!agrDVMm*o}r{ZzM8dmGL1HIKp50 zS*?S(K!rAzjBhd$}^%rRE zso*{ZZ!@2f(MQ@S9l>(Jy~D=%4!e76tnl<6k_9jaQCh`Hkq^FZ3`fAf&4=)uH6=Ow1Ok zJf~^Dkp~!~_0u+MMOf)?rsu1%$~nXOzN&N&Zx)38{fW-vEbir!A&_-)A!=M~!h#3U z=6>+P`>`Gf19LKpYs*Ga_6zz`RP}hKEkk>=177ecbH(RG{UO{>BoWwMP(Pg+d5_4N zlwro2#6A4Y5pQElSHXMuG0Plbg*gVhT24!UftuK5X0Pt__zAr<_{KC=EVa4AzrZnW zqOGdJfLUBHw?{D7b!C(drk#Fb{vXTCBCz_SSs$1T^RSTC*xfYgS2AL)>GR%TM|xtL zlTnww!0cL{8TvE6`w^q};{H_px2Rqqv_*y5UlB&yG<_Je%sA{_Vk`{;6B`CjWD;XX zs0Dh-VXIW9T7e4RFFa=_!cQS~*n*}HS+y~4bph55x|FMd@N)3$5+CXNwNBFyU zphV2%Dmzf8Vhh&#C+nCtT-!D(2w7#BYA(x&-jcBEZy3j0Xp={*e{Ql~ihz|giP5mFW#0BQzv)I#hct~qmp&jDA6&QDRYA5_iO9(a4cFct*(JU)r5Zu~2 zjGz`ok$=PNDhu-L9PMJ0J|kljMf_7AoKzmOfM6<)Co8+2eyhn0ypXke018Sq@Hk^o zfv@8t-2%5R ziFO!`4b>nPli=H25rt1B5Ju|z)c z^!z&P^jC72+1egzZk^S-5zWtGCB1_D-Yt5k6Jw!1_cV{kc-FLKuo%JqZon&n^w&E4 zuqJtvu4GEKFm|8AqZ^EsUZpk85M8x^Nw=O))a5-BnF9otKZ&*wDu%Q9R5@aj zg`8K+H)brp1l62QVKx7dl{(DWp)#Oh6v)Dz(k3iu6Z>O5!8>lE{~O|Wr*idiWVCM4 zHvO0biWX={b){YBGCw#N&)1pxO_I-WL&TT(G#BbrAx4@v1D<^ zlFJcR-4;s{>^H%yh-6HhXS6M478}Fp+d%Xs_~wEWdz5Qf$1L!WYY_EE&SF`|@TT$D zl>x7J72Ela8aH2XpT9H9Njxjq;)2y%gX0UX|66?NF3#|t>-~&XL=WQX;;bxExckf4 z_FhKhMaE}5BUUh_Jj`MT7(+v8w^`U?UV(!6d*;t_RIIgwb9zQ!&%-`D5KFWmqHNAF zzvP)29Nk!eg6x1N=~!Un6Y(X7xWg;NM(gn0Q|OCQAcD&?XY`{kO(rvbFGf}$9$mRI z!O;(5{Iw#RzL+f9Qhu)D_XMJrr&!Boj&qMYY(rI&6L`zL*zO8iwi+Wiljvgz*7_~u za3_}kl=$)ujy(c)| zHb&V)+Qx~M2+h)&jF;iqc{}dAEInvr6)h@U_+uYExr0)8()W!2^;oRvz16hvU0OGu zc6~wK={bG5o7WZ=^z{F=cP}w_Rb?2*qd==dxfUr{sYu%oXbmD71i=^u1yRBPW1<*h z6tPjG#GnJbL>Xw9nK(k@z&J7*hz5~>B2s}E5h$0M5@IQYQmhuFMJ`eN|MueK`*7~; zoSl7NdtKh!T6?|weUAUy^{?AUw;Yp9n4dE0WHVEls$lx03Ibw|`89 z2=qW)zq1^-l)o8_<<;qgcyfMncy%rOQu6|qOOwz~rm3IGR(&W5{MaOmo4WGV(tIWg znt$BX*|*Y-FEyXqGRFr+}88oO=d37 zBK$DAEl;E5Xd9rc) z0m&;&q?>B-@6ynlx(j6h!ovG1(F`x70<&ZgD~?a2PmU7M44`!^@9oY1Vc#A#?&w)4 zAls7x|NLy`RBR~(p2s>`o<$cwyP>(o)0-alsq6R z{3Xu*CMsUv_MR!{M=MW+{EcbFkFy!S=ng(SR}ZnioL5Cp7z2Nf$M^I+)RLXa`~w|t zEhW6B%{}##WcTXi`p3?1jDtU~%+0lEOY5GAQgAP5!87Ftb!+#e zt$UM5^O+}A`biUQR>i|Q#x#+Ye^=JX%=$&~=Dl$czQu~__?oD9V%Gnn?DUms$X9x& z{X!i4cpSX6{bxJ(H5jgbIxBZZd9R5JBGAPB?LTc{)Qo?Lemv@!vxW=vO!Hr?*V>-g zSl@b9ygV;nUXUDIT>g&Ft#3Fp4xia5azibE4j@uiq?|Ztk+rYy`BN+Tyy|~R{mW(5 z=!%w0>aovGLPTeuTdUwXy`$Dc*$@#fHcz~p2-!W^HS^aylZ;($A@Mv~9k+M9Cr#Mf zvab~8riY(kS$b|RUc{jJdo$E;$~Kv?H+R1xX@o`vu|=#ljE4=ib6u1@yv1Dgs;CR~ z;P_ggP9jwYZV4O@F~smfHujwR_^~&A*pZ|@l~os4Xy*7;je8%OWa6Hr;F0LMtTO#y z_q!+U&}I?ht159_%lc#&VvSr^SIU0rs@Y?f6Z#8DKdExhilP^^UKnRTAE&>Vz57P% zH`CN_x25lwrT3p}`DiKMS&0j^U)=MUc{d-&CO_Hubw_o)Kgl*CxGm}ZecM};=*?-# z(91te=Qk(k)?ZGtzBL~FwdZ%GAJBxh)hlc%mwVHit+f?q6;uFdLOar*ho*jGTlVaU z7XRta-AIHx2wjuxCbOJipJdGCV5x#VLqG=Hm9+0doA5MPHi5u^UYa1thfy4yuiJu5c&%u=@K6C&220c5(9rz%-+MDO!l`O+X zx;uM=at}rysDjTX)&Gh=FT{C1rRS=PxX+i8pn;ep`dADxZRYoq3N8z7Y%dq~d3X8$ zvz%~YN7wnK?u}RXO+4aL7${=ANWYy{{Pth)o8u*(KAe`p4B-*_dwJG?yZJfNM3hQ?vB^G{cA9x;^QeIsjsi%xJc z9!w@5jsuUE3b*-v&=l859-fgiQN-ff#lR2yIXs7Z;^K~SK+(IR+Fg@B?v6C*mU_Y) z>Lv6HH%HCe>xc9WcSQNSD;FBpL#=vJ{oMBQQOn&Ovub=qe0VRm?3?(n9%61uI!YWi z$rya3qoM}ghBCn~#**>BEliY0O_&q#5O~Or>A5$=t(8%Dc<|UenuQZ=<6#|?Q5%Qvrd1;qdQ!CvcdhZ#&G|}rcW}s2Wt`~6zL|wzcf@?wVAces)FplNrmfnF=ir$gZ!PROJInV!e9lk+ zjN8Sw4;%^TR&co1O!E1b?8}K$UkxV2RWMEi|X{9qEG6MF;E!c}7l-`hY3(Cg6&erk5=)l(Y%A?cBx)W}mGNPpyra#G3{ z5(cVDJ@5da5DW|t(yrgqtB^w2DO#c@V`a&$BQ!s1vfV4AqA}m->5P{SjgFqD=h_9c z1FqZ)X|xd;{1{(g75HI$tnQj)eYY_-JUj1fzLOw3WQvR#%Nc2}YJcz~Z{8P3 zs&@ytDEbJaXc9Z5RvpGwG$Zkrp%pY^EaPY(WuOh3SW)bMSK6kP_U_rrSxU#_=M3e> zeq3`l&c{=>%C~oe;|Yiy(n~cc?@U`qyVP;kCbh8Q z?5NZ1%4pGO)2P*;#jKvnbY0G~Iy)K`!WHE#(qpu7uejuf*pM!mG*mA}O@)lz+zrkLGb`pnY% zOY6Th&EoN>^()iOYBugIrua{Xi%-suX5}s2FH&^r)zQYK9C#)DJvDoBb~HPmwR@J| zI3IUin;k7Zo|UvTuf=qZhRn<)XYt;#Zh`r~9ROb71p=@F4xbhQ5)eQN&jbOTqYa%&0S)iT;ZXuqKnr)Y zDS;T4P&Ks~*oqUjStYQrFBbNM!4Uy?mlIsDZ3>QvhJR(S1ss-(VS50U$ZD?89RWV! z=?Q~%P=9DcGm*erN?3!2e`T;o5|-07qfx@67>+~+G&N(9!E*(?62YfL@F<33^UQ#R z<6z)8(1-|Fio?xA7eOH5IiejJ1^NGXDQt=S|IbU|lRTUmQ!`69oT*!|*UZ&JRn#8= zYoPm#Pz~qL!Xu)E0Owx~cRRdxLn`60RUUGL5gauoh-PSPRq#otPzjF~!B+E3HGIAb z)4LSZ0S$ct%_auU+sy2kWAC zJhMe~K>eX!k%XWg1voAY$_QD*Gclw)4!KIe87SdV4RpW=cN6f1l7=|0fLCgGR|5>d z3;4jhYIs)->(a1P1tmcSHzXelcqM|ZO5m=5_t9NNjlAmNUk%*Ua5L1Lqn7-DH$2zF z5^s2J0{*a19}o!74R8;FJ$b>+50;@?`kGN0;9su zYcbpqAC-{8hy!ZK4+54Gus<|+65d0y@4=Ga&!Z=mur;K|NOL9dKH{0YhC)jC7g5$z zg6g2wXjp={i*NvGGHM-d|LYskRsx?zvVr8m)3ygUJh&r*^%2?-P#QgYkF*k%{6-zb z8+Q$gdHy14MHq{agNA2_QyA1ZRLetqgqrB*uF-cFq&M0SP9Uv7ltxrX^6!Ly5h8hh zp880i(H$4$v!h10kY-gwJu8EMt7L=1Rq^;F8B@DbqJt6%>+Kf;F zwO0v`NFP0Vik`RD)JJV2oI*$R1j3+dcqE`)d3cU&0%`@xhDT12M4@pLkQN?HmO~vt z+(w(nGAN;LXlpds3(5fEHj)ArtcTFr!!ty2#4QhJwXhztB_7^u;n9QjNV|}oLHeq$ zIrG>YR1aZ=9F}^XQo2?IPQSp7+RJisUu2hgh`^{6X*9AK=n6?adeYMx(iMa}2p5q3sH%}D`~P7-LJ=F3 zT7>mT`jG8+z#U-_viJYnkfbC1K`kSSlCVcKYGh%NY#{1-(A^vI#0#RZ7v#DgQXcUi z(F<`@4gX^BX+#6WeT3#>c&4an35^&@DMC*qxyT-KuvbK<-x`W$;rSu!>#?Co?~vs~ zdg{>$q*X|BJ$A0TM#qp%cEWZ&`itge>R^AqKij!4jnN9xH*Q&f~Em8{^?IqBGKBk8gnR z#xqL9pWib^D1kKo_l$odfCo2_zl3njYX`5Pr+x zeMODT>mUyi5+H8+fq)vjima&@eH5E1ELb{CVtKk!RXrWc`%2UUqO-KtoQtr{3|KT~pDP(Jq_IdnF zB$*zZL32VaBmD4KlHb-I&HsP+Ac1Wo%Y&p2NrR_#H1P`X*@EJ4?Bw?smREoxi&X8ua@Ge?2pr1!xe%sLB-ZsK2WY>}R zg-{vku!l0pb3wI#BOt<~-yXAv21w35J=Szk(=VbS`XO71N4t?%h-T^W6Mo|j z@}9|>K9Ia1DfW1U2zL1O(v;twx?-iPdi%2g#x`pVBY^_I6JbELqsqH}yj~sZA86g|uzQ@n> zNT3II5Dk%+@f)p?6e3OYtO`A}L>@J=W@t@?ycZ8HBL5Km(CXD=e-J$oWl>v5Ly%YG z@ypQFZ=Lb1S*#Eh5$+?su+-=U^2t#9=!fJKwSvx()FCP(Iw6aU@DO>g9z6VwiAXXK z5+T__a)Zv1KY(P$vkE{~0i7Y-Me{>6M^r|Z(lc9xO2{AZND`Wp$3~+TP#HoIBvHS; z^4~P_U^u*8LpyXty#4({2!J#g&A}r{Xr4|uZ$wFC!#y_NqxWe3NGp*{A$dXahqM{} zJjjCRhgO8hVj=tDf_EG>wDxe<0ZTo;De^VZsF6MKj1`T`Pr7 zHb`ncXoTj0N|D!!Mv7*FT14oC)|O~==r6(v{CM(+$fJn^7E zT63aRp?8gyLbeH6E+fPNbcTFc9o&(nLiPw_iSc-jh+dx6 zK9XJ}sh(9Pl7HmgAss)WQ`DJ2wEQb1ncw&Wj95pf{gFHakN7o#kf((?wYew*cvq6Z0=&FTB8I;9J z!7O}-f8*fFW~XpUm@T{)_6x^_<-#RluMjJ|fgF7={3Cqe0vUpJu;chGd=6jE9~3f# z!$LQqjqq5w1SW(3gaB{~kaz?91Qvl^2WzpX*k5>4(nMN`mBe*C5uZX_CnCv0q8Vu< z?-FZ>2%;}>ikL>M$M0ji@T-K1%qC}&nZ!oIiucDI*g{KwQoa;yb*rEu^$l@2u(mT7zZ8;BfvE51K*tSb!~ASao1vk*f;J9cYRjJcj4b~ zwS?QiiEYLH!kXfdcpB&mdF=-Vfi$oRR6w;o2_E1yIgQ{!xo`(NL<}H5kl|z$F%N%_ z^~6+oNBk9554#BJVcoGza8u|b+yg(rFySgcjo-x|;=A#8xnJC6{wP0z&*pmay?BCu z!S&~)+&d2AUvbU(d3+N-j~&RJ=cH_3W)rLDezIxoC3Z5qhx@{x!2cp0+EFBvrY!e1yN3egu zZqNg}E)=j$`CZ^DxFnE5JfN{V7!M`%9XN)|$h|m$jmC>{UpyS!3ktC&L>J;K_7cO1 zYO)@QkpsyvYAJpbyFnZ$ZV*TDal#ya2v~yOBJN-h2^?!BT;^O{J7KF3iY)*Gg@&LJ zAozDeCWxSR(QC+S!Z$$!HF7>q5+|@&ye{>CsK%EP$z;ChB6S~2##ZB_aVcRVx`QCT zP}mRhv60v|uo^pwe}wYtg>}OF;bZak;3=yS)?uUYFJP;%3G0u|Ak>extZJ%{u@6D%Eo*CBB%wv3kld| zB7$5B7;YYTj@Kpb3Fp~U%t6M?`EdWS$M`wiQ}+($3fGzs<{L5H++wB&6U0&cI<7r; zitE5X5J;>gegZcNllT{4I!Gtd$yazbwg)W5#tPs0TUZk;0Mr)p_%K0&rQjQI872TJ zahC|iH-asAZBj{$$NOOAd?UWEEMGN5}_;j2kS{RC5wn?@+P^Skl;g7mcrSN#lkQjevoh-$|H&0 z$6gRs)C{~QA0xa2C-|Ryd-k}iC0mE7aGr2I>1<4-riG)9KP#bSch*`uKCO zmz&5n;)4hyS%OameTgpABH|*x3Rtnb*mW!(oM3NpxX=i!CpO^*LCQU5li2ZGJ&4^4 zK_hG`xsL2B%w$8kYP=r4iJ!@td6CeCZ^(^ed*cg5@5!xDGU^fCA=(bWj|)k{X6%(P z6XG@$2~a6~1*u@Ipuk3gJJ<%^i|yf#b}z&8sCoDoF3sJG%@KOxDxw!Q1Je+Du{QX1 z>@j|n(vWYl8{7tLFtwc63nY+}@z`6S!-8-mO=k%MwVxOyYD8Tj|0NHR`5=hx#;jp4 zfMsAW|Ct@mhk%>xa#yU&#r9@6DJICESoE12HpS z#oT1KfEj|EY0DD)27WyMklhSXsu|Xn7$WEe9qC7IfV|uXP6(}p`rs6|l!@j|I7P;Q zq5K(el?ulbSZ{`LM=)0yjE&;jgF!+R#5EW6Wg8MdNd|w3eFRIXIb=VG%{sCS(yjr( zupKxfwC3*e&|32Snd97lAeZ-p*w7I>gGGWEY^qRO&~n4LY*xb^;bEi9tTur#e ztdjf56>=Cm$bHzI$}0FbK#ymG_1sn9jaPEFn8r{uSF!WhAYln+0dj&NUgLT^0AlG< z>;m?JPvxVb<^5CmB<#a0u=8M)FoXC{)PcH2#bOP4A7TxtWNUFRxXpr${l~eQEywFa z-)IURjhpcv#B6FPb&(oGHXxm(gzQMv740GyLUilOUlI;s>0~RiB_V~5+ciPY@xl=B zhcJ}=%=>_6+#IegGYnJ`y-6t^Aq>QJQP1(++FP6c7<;M#Kf#>fEb%>?lxzGzUV7r09syP~a2~yarAWgW(zF>mf zPq}mKKKEp18QYOt1MzMcq^yRTLUtj}04a74zDpVpeY39kTzo$ClV($D{0evjrRX$% z7T-;_7yXHkhg{jqFX9jLXN1#49jv*q6ndDi@N1wQABSBbj{}~6D|{w;(;@f-@DB*V zdtvkW`NC|@#O&pN34=jgY1p(FoZh{n5N z*90R-!P;USu-1ef{DhK~B9w89g};Q(z%H1$anSy>5xVmo@k;zNU&;9Kv@lv&3TthJ zD0qx>;nxIzXy>1S*5FTm7&s65L)v^|#Qa=*qA(9sW6ePr_zHaRSbQ8Y7W!Zvsc5np zF^KF$tsy$%Z^?$_K1_uB;LU_NY$HB{9}S)X6W^a-!haA3aD%y-0?pR~PlOqeGdvc9 zO~YCWH`vG6Rcr^=jMspH_y+I|dqm8kj^WF&9?(O02R*1hcsoplO#$^lBOw}W;udrJ zm=Vr%?iAM)S5N07_j>jw^OSkXM{p7v{w1N4m5*4VO_iv zwh(WO-^L#hi^+JRH+~E30RKXo%Aqek23rY_QCKh@gzv+L;ioVG-$~pd?!%?^8f*a` z4!sR6{u-mOp`Zk=PMTr6pscbW3hzqXz*Dgt%m+`w<_c>#jW*`)vFBN@TlSZ?E8AFlyQHF+Db6kSDmhfr(EQV!Wu8{*Te`G#cxk`VW2Jja zTb1=G`=hK^+5PgKmao>a_V?9;oabH3m{xo)7(nC_sqn?sesP&ZFG-j9$W}_5%i7BW zVO4soM5?c< ztLm-lChD8&IQ0niZq0U0U9F$)Pt9BPCUvSxuDYzMRuwAW%U?^+i4|h0_y^6>_o-+q zjQGM=Fy-#=j;B?B+mkFArSprA<&Vjkn%z5-$atH!_$U4ye2e+UeS7jX?%SEKrC&uq z7W{DidiQHhx;}G2cBkCx{NaW6;x?tT%c8A8mE)^-x!N#R)(f1$Z&3Nva+;PJB!t8) zZ6`Y>?nMjq2JtmIL!=eCDSryBb}o=B$w&AGY!y}?y9qsgo;5Mi?mez6&RfpO&P>N5 zM<1t`>y1r-FPum)uPIOGim3ONYwWDz++OWrw5{;tOWON+`le=>Zjj-ER~?^Vzx)1Kftui_ zLC&Br0WJM5d*9XnQXQ2X1veelmImgF`5-4L{lYi*r@kL!k{_r1__*fdt&g{p-y{Vj z{q-R{aY91byMnh-ZzsHc^0v;qX77zjOFw`Axic%FphxL?TSupxA0(7yDHD4)V+P>*wDhKoY16`WCn%;EmsE?>#)@ zofqA8c_&stUZdMczsRFi5t?y2v7yw^+L&yJHkftZxx>I_w zQSNoftAS~m_Y$AezJdPn0bW7zK^;Q2hh7S66VV}ZeN=k%keJmm52MG%w20~*78<prn72RUKfk&3W^7#3xWjMi zziIh;+v@}IL_$&Gj+EP9cV)aO9BKRI4#aDT+baU}2H!)0#UXt|gF>`H#{${}1o|)X z%k>%N)6gfy+uP^0_iFDH(;(A%ujhtI+S-cSqFrEu`-A;a#hjAf`5m&hqy_)n@gXhGx9Bk4NBTKs#HUsp+i|Ja@hw?A#bDAvOY-6>T-89W-jNdr_3xVT8 zBE!Z`zm>8XO zG0BvCIJti6{%?O}9Lmo#XIPES?m`hAu8uPv^l9y9_7nRr@PF<9!k_aS=;|{EA8s$_^6Gt6arUqFzwJ-$H>+M$ zEwA=-Omn0-E;+BcV&E#ppFbju$7T`VspXP*xmF#nGaD|LihY{;Uk@A`>=m*#q*mzB z5LJjYq(jKckmjL}!ivL95%Ce`hz5~dR91AeTBmAVis>F*9636)qyJ{pB<)&xmFOC` z*g7Ha;nyF@7n5(L#(&BEd?Tqz{P|aPUT42O{5~+D)0^z4JswVfpnJ6S>6hp7H%SSt zQV0B+nNz!Xe8mI%Hs&o>F8Ui{Y@)c4q?-&^(fXF&slJf`@jL zYR=F6A;p(VCs~@>XF61Fj9tZ<;5udxktRx()Rspo_o+W=FBz7Y{_^SSEA!3s+3Zv8 zooG7ZHNse+Td!f1Qh6uIA<;v!5pfBlK?1*pv%(e0Q1>ENGpF7WT3x4Vq`k2{)4sLp z3H)ShU~Fs({|kf?O{fv{A;}%t5XCL!Q}s`++_2N@yLY%>s{ispeQ@KDg`ruYi^Iah zhlhU(UlGwRvP+~cvQK1GWcSFN$d=Ki(WdC+$m3ycg0}d5H0gBC8t1^Fc`pLA* z8S^sQr7iiUPwDl(&O2km#DvLl{a;Rd;`@NPXSu)nabj${H|6iOpU(ftNbj4yGH*wr zciCXut?FXu8JCK?fz^?`)mHdC2>LhlWcZ%Qp;5;p--h#{p&?A*uYjZeJ$+A`Rv8Z) z&gq|MC#!NK+lh1BS7(J?X+2POsKizHA%Aw>#oXGtJ91{^jLM16UX}GQ<4L+Cqjy$G zZf4@;^%~<9Y`m;rtn02_ ztO-|lSDuq6%ht*^$^MW{l4gpph(gIfF@NC)OEc44Y=B&jipUS28Lke^@w=$)O>L|;6o==;=2Yed79TGP z%*p(*D>*OW#Jkq-(&CT2?D;t8PWFviw--FLJiig&HPMn>_Hopwm7n*0Y5(on&!X(( zB{thB_Y$y@Vx&5a#&pO(B4~NgslZx+&cJmcbs}a*yK5=xi0gcaIUTVpc(7lnse_)> zyi_cad?H=oJ~xjkb9SjZXo)mO6vSl@%1Hcm^XJQ-(|$S95;Lf*p;?lwvdsHggL4k$ z{Vd2Y!pvdi*K8S%zT8V}ADK^$6g?H?(dm-m^4m&p%@^HC<0jJuQ)iQ(Db1^e*9v1@ z!+4#qMx*Me)F^WmQpGTtOfppTAMp&xcpb~Q{oMUrcBjjk;vC?Na$>Fy?i{z2X~7&} z&ard(&e%6{gZQDWqw>7^kaoDpt)Gn5PeE3$s{n3$6>d!i-L z-J^q|6Qb9~)T%YMR_$7yV>(1V487^!+B9FYK{AH7*>Vg2$!d_ju^_hedZ~Bb@h|=2 zTR$s*TJ@satEtZ$J?egU#GNS*zQ*2;Yn2e3Sok3}`FhIml%^j?eZKT7qNrZ=E|5Z| zlB>vM>KzOjs$*>6Q_F96fF-zd_{Ka@_Xkz&8nMKlqsYS{pI|A@|*2@b=tR_dxaNDzL_h{ zZ_F{J^UG#hxXKUCa{e~ahyEo#DH$g9miwzhwO;yh`Z@ZA`bCCtum0Z8eWv>OdcQO7 z(no6j)en?}^1Y&5VN*<$@0DmoEr=#?rFK#f3w8KQ>}=+-JJlV{e1oeIBin%;3*WU+ zaE){WA10DZyD0jr@>K0qnaVC|wXTlW0pEgvi$R-%W&|}3HiqVh$3~uvVxyKtU5pBd z@r&6WbEMYPn3!ls1Q+ttznRxJ<#W+$&Q$rnytq8H@{aSoGs`kAduQ_PS2thmd>xZ8 z@cpTH>g6BLy2naiB)l5=s_jeJ%LgyFyr$yUylwfu;M24Wui|4Bw{)#@(YS`txQQ24x{P5!H#@~o3tOjd{N#aRO~*JoVJSe7+1&s;dT zq}sf(R8(dz^R`T>JmJV@3WaOL9V%TkTpS=BChw-|q5X?ipEcff zO%~%>!+re|ok4e4dqDG1m7w?`J0rPEPY|7_hEZF|aH1H#vr>Yk;2Y3j6R<~E1Ndgg zO5{;0@jl4~=|8d=^3jS6T4;#lPv$$rTS;ti&AfXJ@>=#W5d^?&lkSxGhP?Bs7~g2%!pOP zZ%f-m-Q>44BaCgm|Mb1)|0Hlh@XXM);lCo*M|2CTAAG>Sw(n@)$^P8}rGX~DbYrf1 zpRAZJrrMGd@M>We*V`TGcwyga>uGsb7F&{Bn2>)vm(DH8HRg9Oyj%3B=-Lgsp_P9s(h#TOFl~0SK42)L7Y#E#ht}@;&+k`($CT& zX@&Hgbhp$k9VXiZKi~KWTVqJYv)tW4##fB0sOd*ucb~uR+U$^FuPjo`+{g zghsWByb~Jk_e_&W74a#23i&`i-#9?+hc_=f_jA>!5EpcHoxBbW?6jmgy$a?rff@j{$X0;o8<1_a&oqmJ*ymEb;)+l(y%hq zITz@}MrAMUZNmw#}08O$DIzj3#O`FL{*7e`53%X1U~s=n%2^&grU z8ec7=t=1U~a}65}0}a{wDf)kPJ+!qn-PF0NpQBsUmz{toZu#&$2~TmQ%t~GKbw$R;!ld$FHqy4YVn@Xf+gkTx zVybkcs*~oh=9spNeyee-Dc7gSuQ*_7(2t=0!M%gq2D3rUgPi_3KEU+S(8q8F&YIM( zQLmFd5oO|oKq23c`@m@39h~awGTV`gNu^CnGK*)Il$M+*2`(O9_%c5`Z(V+J0abLS zD5`iyNrO^tc|pZo=(ZKvk5->@UUz?C2MEd7baI1elK8&lPw7^fNO4@*Q{6-ptkvia z>FVo`>-Xzjx)C~7+g!I@*H-sH+ey1l^8~IN`>FOQ-ze_M!{w9ZN8}9^#}soEGZdQ? zUW(6ht)jbPjBk(vPRia$=8I@*FcnLUl{S*y2eB3KCGN-I&r`CJ%huS|mk2*5CA4_e^tCA=J9%4j zN}_K*k6ZWerQ4n;(`8Fb9^dFTH2pUhF6wQfMgpvt&)F zP)1i=t!QS=ur;tts>-WcJEB|^o6S$gmJ^>yLNuH{C3Z>b$TDPZ`CH{xb+~rB)=N8C z179esr)aV?axJD!*PPabYv!rftHvugE1D>JDhd^Clv9-Rl@FDjR6|q`l#dh_;X96H z%9-jt+J?Hby7^EOhw3KlU51%nJxzr7dY>V_e?mWdPQd4Y34zlBKL>pFZ|?KluuOeH zI*$$(O{9%75e!c4iTAcwOwo6)$?*Sf9pb4jc8St+#=X1_m@{8wuIj|Y+p5}CxS zNt=^~ec1f|Zi3f`9VvdF4u1~+diTfbOy7dI60Lb=aT_!T;oU+O;NsJ1_?^sej$wWhH(#!_BkEx%V*yL50-(>zt~;e2m%Gb>y9z*b&v zFKJrxzI38xq}}Aqa69358W_>C@C$iTjkPw95jmh$=vv9gs)qApe0mGczAigM*p zjjz6^VYdFXc8+?U@-M|g#VF+ql~g0v4%EuE2h_Ke>GDKbH+c)iPo-YdS^G`fQQKX! zL9J3>R*SSc{dD6+(>EWPpUZctZ=g?IpFH2`0qcYD(6K>wzbtP*W4f-6`irCq)rV+6 zwU$3r{t(-khUUJRf2Bv{1(e2D3^#Yqe*Ep;$HvJ`Q=*f%C2oAbFQI#4+oY#SJCeSA z2uiw~G(GuRGLw8e_0hMz85i=gl78m1C0B~`O2~@ORjDjajH2&K^fH_555*7_t^KNB z>$TT=hVK=>9RGg;E(eSV80Sy>E%IsTJ;pTBG#+AIEL_bsR8N+BNnVL+QOQImei&;F zL_GZd;o$8FHq2_R7+w)y-nqO{`L43tr47x_;)%tv#TU(S@Lfn+#j}bz6_YD2TH4v# z*hf^KaGZ3_W{$F9yq(Vw!m%FsXJQzYCu$`=E6J5^lr5KM%5TVz%4f+d_5^kgEcdVW&GznUD)EZ*n&Y+2xKY1cBUhf4o}_zF3y7Au8tW#!Vsl+0$98+B z?U;3v#ZnXbBKAEd7OEHxt{q(iO6g>_bZ!R0jw)+4=X3xmsQ19+a1|Xg?lz! zRbLn8;v>kJl$_c`ULyNY$s&p5sZ=BnRCp`?l^=uaMqD~h%1I~4J1Vq_IC&HKEm>FD z-_i||H{yw6t9Z2(lRuFs%Nxu8h2^obx{7Ve`>K2Dy_$ct;kt{uMfwH?i}9T4tao?c zSl=6d9Rqd*8biE8Q$kmVmV`J$oS`7RH0)}~xqywPVaoX;e{43^O}t(?RNYVFa{W`h zFC*aB^-NX4@}mCv2hty-SQ#j)5_acthL;*4yasKb>H#H<9SDL21MH8q_)Hv!1 zb&$GGmJ_FmzhL~yFY*v|R&LuQ2YnhM81!*M|FzQ@|SU1hr1Q4=dvpcg&gd*k}Pp7^>|+=92?622wIBzOF{AvG^GE%i(4 z#m~;~!!rX563sfx@XBS?{anr9x8hsaR&o^#>)W6y)z9;4>)p|3s_!e`EZ;KUkG?(p zWd5D~#r~}CUp@~_LyYCRI?(6qD@zoU^b+bFu^)TMFJvUn0(%=lx>z)J z4RnLwW)*@=h!B1X-{CjquQ-ZC<4Kb!mR3Pul2b&fI;#h2NS)Mh#yH5-(tESdO5gha zZvrL^HY&U@PaV^u+1U4!N2@5Q?T+ez#Ow|g8dkGm#B@8 zah)sqC*AdBUh3i0Qkv2tB{^yI`{i!~;=jcOz4cAVNj#R)?8~ShKIt1W zUD=BK%|$ayuT_{Tsp=+f7#T>tlMaLS`+??~HdfcpaM&m_P4a%~^Uk-HU!JeY*WlCE zbk7j0J*4_9|17;AIU&v#O(K_Kqxt2`M`z3GE0yi7b1IDG(z1c256ltf*(Ilow-(hZ z8eG(|c)EFaSzv|KveB}@daiPQ^=FqE#^7Xt1Gq2wA5|rqCT=d(%e|FvRR`6})oxWi z)mWue$tnDl4V5{H4EZA214$g+SoDfqLiEDxU^>uH2;;rEG3;FCn%mpG)MbWWcFsA= zoEKc}+z$6wW+Pk9y%PS#CKEbps3?ctEEyyFpvYI1XzJ;+4K2M^nRt`c`-6|%FWWyX zuw797;Kjkag0BUi4&E4iGB_>xS#W0X*x*+|_P{-XWZ;c}$NmLA(+s!d_3^{iRE4Ej zTpUsM-I7$f)^@C9X;zo7zDXSthkcly^fq~Ya?9kUDRgS_C*gC}=gwb(zi~hMq&LXg zne#sHzruKPYwHxpCT;|=jQ%M(D_tlpmNu2^RJC-u#w70rzMp;n_Fdrf#FS#(tZ$)h zq>fZJmH#0P7N4OC@SQ?5JJS{77+*EH@{{Fe*`Fmp3;!u-Rbc9%&D@53^sh zuc(?GbChNfN;?=+vfes;gz@O}L? zKeunB?+u?DK6iWwIN#~MTYS&^N`065M0=-s9Wm}PvSJOn>NN3Xt zI!u?Q<`s{mP3S#DG#JP!m?5s4j#pKsm3?e})}fY$6)VbWnHLw$FW3XukQ)kK7X}n3 zm%J$rtoYArt~^s^uYToN=gf75v;IO)d>F;ib);c(OnF{qR&UZ|YHXTsnroVcn(mtR zno!MS^*t4@NR{o9Y@&}*MEsG21m5(z1zjmTom6+cnYrLN6Go3k>akfuR6*c)jrK9?G0TYeTIGl{L;39y&;sh4SmSBSB;p@V*mE>Zha(@OJ0eNbJZo~UUD-y^uSm$ba*wWc}TR%?Q^ zFSW0AbM(}ba_AfkJ_)n1@t|__l@7BKdKGkm>{;nc-3Y!2WUquY0lIda6=ki@jrMicv0sLy) zU)M{g(OuBSXnSa6>IKS=^1iZ1k_qCSFnVYM{s(Bl%h(?-yJKv1NL62ZgG$~?TZdcr zTSi-(+M+AVD$m+CS8cBT;aKCEz+B+0f-kNl&r&h;3HX*EO*TuBr<|xhs`;W#)b-Nu z)}PSd*K_)jhKGh`#?{8l#tp^{!*~5?okMd`9jl5^9aQ=#Hzj@q zk0}0BMyS@Qj;J1}5>;PR4b*egdQD&Lf4Xt{u{vL+m9j7ymea+}3VIf}ihGyID`r$& zE?ranv*1Y1noKHf*7sUp-+qq#^7?D_cRKB#%+)!fg6_pdrIdxWMpfq7M%xD29#k%` zp2p;W7oy?vCh9+Rtqk`Ktqj>ZmA0vRq*9~UChsHPBkv@CB>P8tR$L&uMXK-uUc=;6 zf3gj$pvx|rmF7_MEb}XKx;fK)z)YJ*m0T(wUEHa-qIi?}N14ic!9L2F%{<}%z@`v1 zwNLbgHc3eM&Z(39lH!TVTg&QN8|oXr>V5Prb?vkX>R9CjIVH`fhlw)Dr^Gru3>z+_ zvtsw>YMtH7mS~x5*#o(tw9d3Fbd=*c8XX_J))~5 zjpd`2jn!-6clsRdIGtU$MXxs8GBkv5wRqz%<3?kqp;8|Nxv)daYC34zt6Qn=DmuxV z$+k*&NRLTZOY2E5ORB`l;&0-*l24M3QXj~fIkNv`=Vhm5P32-my21gab-%iU>VWK) z=rq5$8n>J^`<3)AIcfGT8&TH1j4PdPo?na=+H;e$@QkKu^?zx9vA<5Fug<)X-7l|0 z;kc4LW$P`MZL=%eRF>Md*;-fnR+$~689$*CUnM#u`3_f7-xU)T>*PCN^v5+xJ&9fX zO8mFDj`%g*m;Ng96X~dJ#4YTc&=f}ZO?1kuyVxa_-E6IF+ilghK9$QWH&yniWNlw< z-)*fbGb`WNKSFex>kM$qStE~uL~I)2Ci{t&(zC_Bl7As*`b)1$8_N=88|07W*X6C{ ztz~Lys(21fiN=tL@SE`*7>86(ILCkFir7NtyW8T5b{%rob($TlW1#b{vxlp$+n=cg zqeG+lmN4pf4veJTNo*q5Q#(X&=^)88=>u7c{H-EExm@L=9;u$I-l*Q8KBxXyJx|?9 z9jex=3si?xV$}rYQN=HLBlyPhp!A01nfM{Cq~k@Yq6M^*t|wkCo+kcRoGRWc_K|dy zm?S488zdEymC{_e9twf)e{$u5{D(Y7o+{lZ?n*Wi>bm7sJ}}J&v!+@{+Gg46*orI* zDz=mrlpHJyDG1EFlarTyE*s>W&G|ETLEftTz{0#Du7oc8ulz`bpXG0h%ktD(Wjks= zRc&{!Vf^{^;4Z$HJWVwawHF179#gxh3)EYxges(VP{GtKvI~q2y$7S>&*INuMBXMC zJ?6);jE-66cDt^*mb!Ywt*fh%OXNy(mN+@*WS7e|!%Z;9nYwH_dym_}FB2AnEijj2 zCozYNq+U^dMbAZ{^in#VjuFoi9~4gz~3}(+lmc_UoS4Q)$9~5huaKeh`$M&V2;EJtO;(%UlJ$Cg;ZCOl72@|7gvbq zOVT7=rT zF5X+LD*316keP!kr;>_imNC{4Yo%q4rJdyxJil&RWA9Ym(wX5J#PnyKYrPyt39A*aRKo^+#bX`~i^Jb*> zg2Uh9JMfh-F0MOX7caz)V(qa)a1uVhAKV8;pec3JQFe~FC#ZW;ajyeaUq;|r%!xWeqkWKW5ZAVaT zVcga?@-(@Yd`8Zo)S{cBZuCZaIz0%+RrMEbqz;oAL@r(%kHiv%PW&J2O!sr=Jjavj zHr4r66;-FInpP#+-&F3jIV|-mW|uk4ZOseK6G}gng;X@M*erFeW8l`vTHDH5tQMKI zrzD~6PONf zkIV4c*uUTwjP-lW$HR587f69ow0E%0F!#X@MuQ(hi1383Ej$uVfUYp3Ar{8lCPMyb zNN+NZ_=9MQkHO@S4==H0xD%g9_>fiPHmbHrDLO%YBD09*Fm8P^E+PiPnCI&-Yi2Jo zi|jz9Q3pkNqAf6`b1L;OSxj6dMiXLkJDEkwsr}S*(H*+3_&t4&o13!oTjrD=? ztf?4}eZa@SOsZYvadIqqp4bjEYTm)f@gKrUp#jXuaba%!4xH6ln0>VXUyB`wU(i+y zS$q`Vmg@#HBHFlTxzw&EuA8pWZkt=f9Cx2`jdK=O&#%Jao3*RfP-}rjZar^3W_w+E z-afbLMAee20_fGRsl+PtZQUz1_J&m#U_7G4J)LRI&SFJuduF3M9L8AWxR)|K)12+Z zwubylf>}@){}ASp-Q|5?WM&TgfqlWgVvlg%FfX8)@IZJi!~!EWSa>EB^7Z*`FpDaR z*THN!76f6p;5WZBU@-O_u8l7f+4vIt3yg)G3b$D>QmGi9Ohl1Gs3oEuq9~Dxx<|Cd zMc7X0(ak37Qs2n}qA^TNe1M-sSrT|0?!rrmX(Ub7ChRZ^Eu3;unebae8vGvo4#o$z z6+MFA8$+p1(J)ak)PQ($J=u+#K{ci_sOHogs+?LY znnPcq+taJ5AaX4BSSaQ9^Dp=@FoiISEEbKThlT=A|(OnY`PD`jam zo*Bj5W9~Aun3;@{-OmoPaVGc0+nO@9mx10%OcEL=AJ`mx)vJ$p2 zvkyiT9pp^>Np1z#ile!kte71D42-YuS47S2MaqM>XDW`{-8!!01Fh6M^yOLYOj}V4}|6rv1arlq1nu0gNdzcl+@N>Zl zh+cE>G5C6{8_Y<|1dZ`RVk6a5G+6YE>Oh9$HsL$Bo%81%LN|N`F%`ZgR8pO(3UUOo z8CwK43!R{D8}TLN1Zt6JwJ4743n}>rHWRl&iRemf#5cl7;#c@fm@PFDABY|2O`s!j zjqD{lBf3ttA~+Bu#DM;SFE|9QfEM_1qBU6`FA=73KKv~q2U|oQCdU%#Fh6T6_mbbt z4-q7A{2FW!zM0sCJpvuM_w2tg_izDr1$rruvHSc>NLM%iL--S<;9ZC=u3iUk&pa zoG`a?1E0lT1?R96FynBO@Gt9d4|lg>jh)o*Kv&ne{g^g5I)0$n`*c2-aBOpx!{N0NG$9ps;7q+x!bgLm!7R?``?(U=$&v!bvUI&9~s- zw{RFYwh}Za@`=8fmfy^MXIn9+S#Ow6vKt#k)FWFH^&yX6fj-dNIR~S(m-5^Bj-U?A z(OFAG;f=vTp_0GAPv@O58}9;r}dzQkIxlI%?^#~Z?oftl{*49-6kt^sdo2VY^kgll{{cS(rnX_!%=C3aI; z(57|7rt%}0b!~CX8KrGA>n)2)T?%Wh%2Fy=ejQz`>hq=)f z;h}IC_~9>whQc3gN4APj5`MxQ#AcwKkP5xDc7WwLm?4I82S4#FL`3+Xo}kuclH;LI zb{pn4n}tMS1(c*Q!U-;p-wbx*v+>hHHh+%W%a*VOoEsv}Nv=p}fycw#ik|##h)W?* zBhxSe+eDUAdvSk|%sqrS*a4#U-@;kpJf8)<(DT9~egMBfm`!Am?}=OZ|KsQ?prg9B z=yMsDcyNc}ZE*c+b;@x$L@8D&YCrIlSIDW< zJgNtkKm@3Zh^4^Ts=%!PSuH06m2K;Y&AVSJf1;l-F12ljFLgX

      u(B}A>yS{QPIdHJt;8$R(TDvWc0?W9Nn_~!Fq6qrc7Bp7lY*@uWl9RGy+sU{PZsQuJ= zJjq;QhO%AhrVJwes3oW+bf#ExE)ejd+#R;`0leW>%o_!fN#rE>t^e%#MI}qVpmJmv zvJvpToe|H--n-HTc@_{+`>5-50Bl+(GM;FmgvynWO)ODDR2|WV%qPmjTP`Q6l7oor zh(GHi!&s`WP=gVr%E}mEi^9o!q@eUh9x;@-p*obc#60q=x=`%{i?365BOi$-{HcDx zG#b?I#0uh_xPuR*4i5M`K>A=gu%s1ww7K>7_Jml5Z{ED%gBC+ZTp#BOyq zF<<>G?^5>@6aOE(2T|q7jj#nh)Fm0ICqSK-9+ zh-;V?t3qypJsFG2!~>l99N3XogcUu42S6U}1MGPY*;W=EyAay74 z5PSnEl1H9IgaViN85pSw>O{2zl}I|2s^oKWCiRBCL0*GArzyAPYe2*v1fPaV3{k_t z1i=7r{+j$qegv{@hEh?vp&V0ZQ)%iN`0S?iGjcGI4SPHp$iKR3j`U1*OXrA_vY)aV z>;eynh2$T=S^h>A$=i_!Rz^f{LG49^LBB%f5+w}yxh}ApN061)rydf!fXDBIyFaDe zRR0EB!n6OQNR5!f0Yp{k>s{Q!R#aq`%hh1jkE!*D$I5DzQSzZV{*aOWU`n`1#N!su zLMwa2tJb5kh+$*^Wc-x6Ky3!A{f_7hbnt89J8UXXJyh1ojTD-wK>h`NT?njhZJ_8* ztM}Cb$dH||X4Qf0z6vS(fxPP?*fCD4CV0u8%0Wbi{mA~%y;eZZe^!^NI!J3Ub&fnt zYz2;)hBrK@Oi(7MlZpDs)|!H=!58`4U%-Wp0;;1q@avD&HA*LWfD*1osWp&q4+H0g zkyrt5vrG+F%BhtRUr$xX5#NzlxjDKR{Z&udVttTddZ*U65K=|5|fOO!dygx1BfBy5unw_677gR_-`n5 zvI$ugnEnm;JYdg&wF_6TK-)=t!f8ZxMN(EOjfhy_F{71fYGb89CGe?skd5)=6%coM zWq)vf?7)1xthOZ=kvc>fM^Rgt1zX>mII8-wXnJ_bu_Tiy~$(b1>E*5 zIa*0mN2u}gG5D~Ch|8`4bv{%*g8Wv8xRxPLB3>J)@?=Hgpkf6c?*%OD@8m+N7xfnL zbwBb4?x2?vMf4yUwF$XiZAIQtyOBQRL_(1b!1CoFLs5^}%`WDlYv;$N%kr`Ca#r-Mth zE4Vzm5&6VZ^$sG4(Q0ehw{5_6o>pHeqj9&t0i*l~wr39Xx-)LPt@;a5I1m1kAWUiA zBC3NK#fo{7RM;&mPT`(VZ(d zfv>9MP3ZV3wSu}saVhCa4SX5~HlZO-x)?azKBz2hRwC8!;A5$Rcuxg`N;$;>_JnX^ zCdm*J@czM&==F#sOhkk_2Jc~pCu|N&xB)h^7x9LqfKYpmQ(j2ep^GOKJy5Q#iJhtp z?KC2r^e1`}&meuT)fP%a)b2E-LexPHvmdALqf`PWzbCBH0;M~-87vHM)!&sv#1wS~ zp1LRT234+VR59TL#CTP*1X4H^_FgrJ9FqmNS5X%Ru z6@k8O3tK;p{Ec2ijswa!miP-6_Pjb+sYWirPwvC>nTdg<0?Akj?RO`7ye^tT8BH8p#AykN=U>?yhpBj5-7~M|JUtz zY6kHh8h@J@1aDRz{4($18rk`lmk}8JW7p+)gapNqG5I=ERcX1>85fSu;1Z1fT$(6)Ze8#8H zrkCJks!ychHJ9VueV{poU`tvHU+@$*_y^?OK%B+zmxoqVheWKzZ-_)1?7=;CBfj&9 zsEF9NE|IR@Rs+aHSZh0Md?>UskC>)(hIK213|+vxrYdKF=B}z7RQ^2GQ~c#7)kMdU}&7&Q+5@*d=)AJLWc!^sU&;_xgg2EKmZ@Azf*y!s0@jSHYJw$4$3{Z~m@6 zAqJBzP^X_uh-49-cs=@7Js{(YaIbT5KhI&!L%@Nt9;fODUWKhdn5U9Ah$wiWU|67$ zL=c2MfU}+}RdLJ4g5_ z7VyR_#qIP3%hhDH82)V?d|(Yc)gV~n@wkh{xc9Hnv0_LMp=e+)CgH{gQ6KRgd}?Ty zKY@3^Z=c5Lory`(60iK(gU~vp~@NtFS;9Ve`&GBHNN*lzZwDeD3CI zcf9`(=>7{e3zAxj?pO^(Q$OGz9;$7SbCp7$pQ$?_8>65f|8aNzr-gd>&l%_fY=nKi z1AAP6Xk!PgL@e~t4Hhy9w>1xZ4U5RjxRdvYF6XQ1@}GpiqE~Oqk;-Sh@?uiPO~m7; zT!;^PAgY{+OsgU+LloB1|i=YrB;G%9fvA?lzNkB0v~Y_6_DGw&+YgG zTXEV}L;!1Hw=1h|MF+cH3|5t%c<+S&sszYZh7yk;Z&Tp62a@+;$K%x*#4^a+Lg>6N zxeYe51k7%$5T!mt7TgC6DqEnxJ0a~)kqdTFDV*#}oJJTp)t-Pw?j)r3FI1s+5GxRq zcE!72MgAO%zt;n2Tpsus{K=W{UFE@ywL>|9+r0;FizN6Y8=|naxXUZZle$A1>#HHE zfj9}f_Yf8R&9Jwz(5Kn(OT!UqC4e{M6496ZjIQEyeDXzzHQqyV>mmEUp%f{t5xaLl zzThQt!CqD#67-*)q7dx`z!u+ycGp7`SPv4Lfmct)CwvV3ZG}&H3g>oQBfTUZEzlA9gw#)+QZscN^3k&cWLxAf8P| zO!tNyj#}~)@W!noCWD=12u?LrU5`)Q2|lI-ymVcO6XY{8mGBbBh(YjM$J7&G3`;~+ zY7g{d1FV@D)?qj#>?+{^+e9f&trl^Y7>sx%O|B2$aUNOOcIfdsNbFHWvrl0AhoJ&? z0#7{=xr~hGZ;vM)h3D=CEgy;+Su*wp{30%q6VL~`hqGD)33>#57!B{T1sPW)p3sN5 zf}cGBPg@z@Xfn>Yg=$1xunuy$0`lxeRuw|dz^R6U!Q>X|LtV&+VC{)k4XRbmz)ftx z&AxzsR)Pn+kKbvh(vYbki2nj05g*`hZo^|`;yb5MPmV*3)s{R4Ej)%(9*xS+KHNkd zoY+ESgI(~N5~9#t3lIfz^WP~SKK-k1Mu@ELg6GpIzi0>|Dlb*H)w)sH5`Io$mb z-10H78Pf0PJMe#KR7Hx2C83pjrajRpL{ZEnd6Dwu(+`VP5wYVWD{7D z{(Gm>L?6giU+^bRhL!v8CI&)Y8=!VS6h5jV&diD^ojyTtH>TPAI zGE*6?EI}`bgauh4&qvQG49qPvFmo_W8ZAwc{*{uYOes=2AkCM$N%bVNl;?fuU4Sl2 z4KL+Q@)V$lW$?E2{_TzMR+e^1`O*YAMsA?YR<0^lAc3`TcA@yZMli0;MfJu>HlU7C z-zXjCD-P3NX`ZRbG-U=cn;8ewgzdw&1s~Kvwi@ftRzRn301!OA*>>n{H)SWV+t?p$ zb#4atgi8Q5ZxCOPpTsZa=kl}prhEy}-J{LSc$P3zzvF{5*aZ-Ku8I_o_S8+0p)} z^j%RxK9if8RWox>`uMa_sgWt?QXZrPr=CdtC(V|AIrCZe*W5n~E)*q~@HUT~bSds+ z?;}*jkhxQVOc!)NPxEO)Bh7s6eVt8T&p6uD1DKGlmRpvymL8VJ=48`5V;e&sU6AG_ z-;Di-(h-|vKkrr7IL9#Cl2T9cm!iVLiG?i-`xjm~^2uOFu00Ct%_^*?mYb^Ej@HM_u#Q<)EA zCoo1ZKOR7Ix(p0eKc)VX16|7}-W)LOt&;TMN34r|hWG~fz3}_pf3yF6|3YwhEDJ~oXdk#MFe>n1V4c8$ z0VDkP`NjGU@jcptBDrT#S1gb2#c;M4OK> z@15_|cgp*5z-IN1co*sVy88R@pM4Xjr0&dIl{=xZa_M7x2lsku4VLJLj1SjaSg3iR z%QHlo=2%W!_xsHAUE%k{KQG{T;H|)xffE8c`~ULQ_{5m&8wcp>i^=RH>ZYQ2MmoQj z%`dK2&?L7ot4(J4j1B3v(y8?F=||IdW(Zj&*?;DR7HEr?mwvVdI(xg(%!sQI8@%e|#7A?ft3uj`wCD z6zfLR{&FPx-ya3>-I9~ihvnQZNGvI_FLv*ida2jQNcuaQ#ph!t?vcKmag%9?Fpr%2!0uT8=@Ev1aZR)K5SIlA)$@Ow0ccg7!@!k9}Ijb_+ z^lGUek`t09;>(p(JEbtSNyeM3VY$WmD~mLx+iZ$sw0pnzsJs|a=^=_{hO>9MY~CWa z)vVJ->V_E@)4%3=*10}gd}sIt`S17t;J?E^#V_19-O8Hx>(fOSdxv}=&vqx;juyYk zpPw@!vs3#0)Z;1bQ_iGBr}jwSmw6>8I)7ksVc7v^1@A#6gj&Ro6T&s&x-N!^#_=YT z`GmQ|{5vpT<1M=_Pc223?$$fjK0Y3w^S&efEO@`6U{UxHa0Lje0{B& zo|qaN&*b~z+6FxH&9LMe59vIDi#bV%Qak6d(vF3Lb7L|;r}a*$nKV1$_g`n? z-^8!|m7MTzQdY`>^x;{1bL|B)OCH+7o##B`Weu^PQknX^D4x-zY3;gCKn@Ku`kH>3 zE}BPK1nXk!Q){X<$$HH?)+$^2TKbvOjI`miwvITKn@JmpV-n|{Y7Z|NQy7vrC%ZJm zp0+vlU`o%F%PFT)JEt$t{5@w(eo@iGvM#vt8({J8wK=Y3@7DzkJ}bpjp76 zhm@;X?nQ9Z;MqY-0_VXt)bk6(w0f|$nWevZH?*ar@w`FN&)4Vc=IVIe5p7-VB~2^M zIWb2VD4YWam!6N|u5tUgb=(0}S1b%}u1aq4}-ppmCc% zU-Of%!L%h}y-tTvdMCeER%FVAU(J3z|N8xN#HaHg>V%DW-{yV%`>G#8KFJa5qo%}M zjGLXn+a>C^@h(<-`0MT-$O{&>i|Bm z3cgAMP6pHuSmpn>Uq|25)??;Y#sj(=;(D$!eMl|yws9S>X-X~>OwR3`wJ=>yaV70a ze3!5{Aur)sVp-Crlr?Gj8Q-&g^Y;~1FMH$|=n0c6kwchXyiFXSn`mfmdTRDq1fNu& zmA=WorM~BV1>XYeUQ0D|x{)_lGPrfY+G9c$?jF62JgmNvS9t^7W@lad?6Rbie~Zr- zJu7TdSf_Ao;j6;rqFG=EOS0W`{Oua=*(bGCo#Zj57Qa(GtDOxTyWO~H-f)ApzzEJxRGrwnqt^5*h6x)$m zN~dFf?=MUx9RdGc5qPhI83}wI44=vW62iqN@Q=H63xQI(YX~yh4J{21b(=M*SRGJI z4pt1F>h|=am$_mlnMx(b#6`#ajGFw}^XbS(>4V|p?T;@%wToyTSr}D6COo$I*T9t9 z8AUmD3cHmKbhPmJD@V!a%rgFqSgdvE^NsJ!Gp)~jUiqH(TjD<;plP5O^fPE$@Xg>y z!8?P4g8vCJ2mKL92DJ9`_c>usHe_or3gy|ZBv?V+pKSjWAJ31=-j#7JwQjOKq5Q9u zpJRR=|G7QhkiaAjNin5Y$=aXWve3WO$H97HoBbr!1LR2BtHW832>hg=sfwYKv)@4UxY0FH~thinrqM1#WZO& z`-puBez-2&ORhd2&QAo#!3L4k9Me?RF4Kl-?b=}7Slt8NH{CqlB<*u?GC!S}O9m<{ zJ)*N*SyAEi+$$OOp=XBz~+BE%J<8rfLUF7rBx6m&Y2*JMtCk3?+eiQ6hu41{5 z!NY@J2l)iG46GLL%1`k9W~patq_>MZI6b{dP4U)r{cUp>|5NaH?wzb=8P>FcDVF5k zNrt3(Ng>IrQUcTL=~PzloanrRg?mbl+b%nIdV0$VY71%>vzBWs#EbQ{A-c+7@SA5S zH7qiIF)Bun@shEs@g@*!T0;y_t*>-(+A@tz%oM`-z1#@aNngZF$VYXmQd8DSr5>ld z#1-J$?;Pvg>dbJ?aPgQl+UD8hy)6YP`_w96=Jb13h{^7NOMBNXd7y$V*YrDwlaR}sm7v-7vi`)T2IuF7P@k5$4YVw z9_5%bS|(@5GqLZ!6+~@{jEjg2UlD#I{BcCpNaf3{=-zwatCYP#bsS!ZstkS&H-7~B)1zWaS^L?5l?(`3E1pElR8?-&RM!7}hCY6f}jttrm z$Op{wd+Fn}#F$zcCTMF4p^P7ST(0c7>6l*DyLf8B+uV8CYck)Yw@qVGYo(&Jd3%-@>fQUy%9XLY~-5J6AVW|EHnAu*X=_blQ|< zN;93o6#Oe=W8+Dn-YNl&&{|7tjtGJL5;l!)Pu(D_>H;ubZT7TvTU;h*9mjGzXa8bL zw{@^*+TS{IoORsWJ=LU#@)T5dexob1D)&n`uW7HlueTU~H&w(9&9#((PoRr+mUW7? zkJSqNPZP^dbGoUDX|D0U!C>gB->-YDP0*-f4RHqM?yK_0xW-%o`-;8Fo@Q^b*N{Wm z*#%rKH<=%VwG97=gEhh0)!JO`a$T10cl}KL75!`dD*eAYPTN`dmw8Owmae#N+qM>a z^MKV#^(K6etNQ)p*UZSH5pkbK)5SGl*~ z3wsgRGhnUXc%NTpn;}JeLhxsok+*>%q8yz{zZBljtC^FL=}qsR_9Nw6^5o=0$-Po$ zrRJwy&bXD8pEDu9q;N$^1>1E;HTMdzee*;OY(FRu)TT|y5+gOcfX->IuWraT{A~<2 ztu|dXoid#;Ei_dyeKSrs{xG=prMiE#U&MR-e5{OEjUIiz_qiLfxP7$ERr;)?sCY~9 z#^S=_f|3DcqTSy)*&XBU1^(Fj^xte4a4Qvc{)W%Sp5|Sa8L+z{KJ9#bd}6F8trM)i zxUHoYU&~Rm#k|sFH;ytU8de&Nz)IB7@78_R+OS@!MEJo!;GVDrOb4*F4yDU5f8LOC zU@oD6?1ZU^fnZ_xV^vn<^Z8hCBP`T3!F+#j-7}rPK0(Lmj%un1j~G4qQ##>VZmUE&uwcv;cEa@8tfRWho~ zt+J-Fv*NGvV}kbw?DDN^*$Mei z?{)L^friTl#ZVs%r{@h#459jux`*278bvt9PvL^t8}x6~Ud&W|z=Yvo?_rPG6Xi~D zQ=VF$gPsQ7T<;s{IePL1YIpJx)rNV-mP1CnTimNzqHUqe)t%8#F$l(OMjum8(@N7h z$i^B|2NPquYg}RMZ7efvGT8L3_2YDlfHPVr9uuDPBtM9Ijk?8aW&~!JGwJ7a7#&Y@ z%xoqLllcGXS|&G;f5Dr8dbud5!WeO%_+6C6W}5MuWtvXFV#xecwvZaGUiLn8o-g~i zXkXr_tkl$BiSK_Jf3V*gM1A>OD`FmOWB-Vt$azuJx1{eWah8OB$)D1eWrgI~3rCi| zwm))B_r8{s)%)N9vE01J#2WqdUo~BX)2vJ_MISuL8|Bu!RyaD@``g0GZj|Me-M8rxYwUJE z^ybQDq5>t+J6SK+OIR!Zqgkpgr`xHE(533Wf@yS?&RBunhCiRJqV7{@5Tq6Ho zxFBxP)X_fDnsiNcZFRxAWT3`Epq;lhTQtix3xO@$jF==;a|!=#q}d?O5z@J_Od&B| zVx7ZEn&-u5>`opOzwCQy6#e<+$Jt>C?|!_!`?kxwlJ_@04*i_`HU7u@Uyo9bXR>+e zg)2%Q*!Q?vct6NF>JG9Vy`9Nt+w#YS?_z&JJtQl^U@nGNtpb?Zdpvs z)yD3UniPY&rwe|X)6X|FH=Z;W8ZD+r#=6G-20#57tywcqh~cKQ0nA}a zk1ZnqNH5%Z_EshFdCrWc$u;9szju%B_T@`Nlkh&D_I}zL9vAT_@_p3#Z9d76#C*l&6RO!jQOT3=5+H1b8qt$Q$J(2zNK!kW|FXp3uD^T8JIv_ zhA%gfOZw8wnK+i?ov2_$3Q@vdffr`+JGq(glX>1fJ$F||7@T?f3 z*{J=Xo1(WEe8J+Ut z5o|t3w3mmwZ@Y=(l}8{P}rq^xv@w2`$qaWtZmf zE%|N_13gPc><+3%R>cmGUFc@qM+JW`c8*kKQw3H(!93dcaX{tZQ{~E)A5(5w&?*0P zYa?SDO)a(@(a5{g(Y5rC!h>Ld<1)Kuyv=BnwK=C5DtAXqZ`${|G~P$jU-CiVI>Lan ziSZ_Qt5?nY-q7YK-CFvlv}aib+faL~V>l|zE4?2iU-ULEqB{Ewod!Fmqz<63^?+zhQq*ud zn>oZC6fPkzdu$kBItezG*OrHt_LfEF*`^W3dWO%sb=vBhFkurc;t4jAX~p~mTIw}+ zifjOCZ4i)VaqI{7GGswwPBPsYEfY)U(IKd-4`Lba3jCP}{N_<{ghs19rj@n6;70qX z?T-9ANHbS_B{YU#oCF?%7WgU$OcljH=5BBoxM5s3&V}jp1zX*DH_K&aL@J?aP-u`^;`{s{#bw6H=Opa;xD=hVDc2MEf z(!CCkyRTF%S3Rsv3m98&L&hzBhv%h37%z2r6H@{j@Xh{v*7DuYf;dvvCM)mtSx>ut58@4!T z<=Wt^|D-@(=n(F^cwXPy+{tIZ-$(yAf4%=P-<{SRldr)~`y5vC6dA9ylp1&zy52j^ z*c;e=?3e65&g-t}p4!p^c@k!O9$<4+d-;=hfoGUI)U^(XqCdPnqBWubUT{9EiSMhZ2AdHhvqZxDNgu`nO$Vf1CHl-!7kJ4`u~b;*`g zC!mAIvSw~BcM$tL{vq$l*PT;~M`SNg8u%kS^3=!O?}ogo{&wE`qo3A9O^t1vR4e0A zE>|?7q+%IsdsjB3Y-VX;Nt+U9@uQNYQpvW_`P#Es`IDN=k=pIX>(&+i-GlxKeiwW- z$Py6jGst*Q96|S&PdO`=-70!ou%e)GVSJGZ7+-&9Wke))uiN_<@NRndA!ko;05r9Q zm)$9I0zvJumvg=Mq{~~eFJzs#MZex0>C+T^tL}gg{x^KDTOWCvRf`$ODr^Pr4S0BZqptO*`b8S)32;gF5F1lgzw`s}km;qvQOSDiZXr8}3yhE8 z)(q8~j9Es>IN3PNAnWdGA8V>&D@xN2WujJY)QSJcHVCns-7E z{u4WmX$X5Z3Ulcn2qz|#eXuXXiYGYD{o*eO6~&t38$l3$;|IcfMKN=k!OSk8LuIxM z-~UHwD6SRvh-bxP;yQ5+{&Y_KDoP@+DG(2eWx)7$;zdqDq{;wK5`a5whZ-3H?YA&t zj2>OKUhFQWCUb?lOHL(@DbJ)$9?>=3#+0aelQZTeCC9${TI+Mh$8TZF!+L!@8FB9G znb_<^YetvcfWpG!!KG_To0py~$uAyP+^smLxNhl0+a_n0=bX}%+Rf$)&$JT^pG?~= zudOwF-dKlO%&79e6~7?voGEW~Pj~dNO)cA1w$nDyF~YUTGe!C)FI9#p!{z z#g3}8~W>CXe(;22n+ag z++=P&*Os3n92Xx#_OEF3P{X~%r!mE3q_W$451qCvwiji`%lvIY_IZvh=W4gnJ5PEm zmnu$7rfncYfC^qmcfoSXJK#W=%`Xr>iA}Xhy4{BMrYv)3YfGPBKH)wMe6rwkiwx6s z7EKEH?o*iZjDv2-++mKe6F32#$|Za-KbG4Go}m-;PwY<##txiK6i-LerNQ|1h!K}#G2%q+KiZ4HY@4BT59Mv>4fk%AKFFigx@2uyWV5(|!ddaT=7_en?m1W{tLhu*YoKaV8Ii|feHyC5 zV-2Sak*LLq##lpt!$JLNu$(o~2x1ohlFP)iT|wWv3()(~ObB=;^}tMS;qGzqTpqds zetbo~Au#i2`S*MUVV$r^I0Lls5}}EZ&Tr$(xL({x?7oRZEYpHf==VU+zM@0vh4f-N zkWQvTsV0;!b&yPM;{xe@)s0+OMcdh~(L`M_- zm3Z%2_bq2lM>V^jeYyRBqnE3zr>zt%H^Y9RE|_~Mg73MkG*%2scf}X;N}YjTY{k_< zZk2$lJB@zI9<4*uLo)>R`ijD7z80U$T|)o<6T65tu&bdv2eHemFLeb|YS^@?dgKD> zt~b&X@u;2s?2OYG$*7VX`5`D$BLMq=2&$5xL1hlw> zXs14Qup9vwLKqO_3HbWVUFJ6YKT_TYZ+M;QirDB5JqWRE8#)j8J3pY8eduUln)^}V zz#l9jhXUbrowQ-{;Q_wCmKGTq_{to_*bJRTt)~ic!`Copy;zwkb@0SFZkE<5te5jN z{dlq~VcM?+@jZUsOW2syBlUUux6CTpjk5=59mrUR>T+Zfm*hzdN#2+GA!B_`jY919 za18cX<%vo@=3MqEoHAFQj6GQnS&!+cRzUXN!m8Atd?TS8Hluvuve^h`In7eXfy!F0 z9FgbAqvbZ(oJc9BG0Xi82*q8*R?OZ_Rc`{_a9Q3WKa__nP1Fg%&di{TndV%1{s>Nc zCEt~If;D0}I$>8hA52p;6RrvM#G~*yQ^hQyi*N|##oxhxGFsD3W7R~73&kp8w6G88{6B>f{uzIWAHx61i~I|29@mH~ zWACwRFj-QQ^)QjlRb~NGADjS35z|zo6M_1jgI#JJ(KmVlZ1f^Jmd?dp72w|Tuz9l? z*$ER+1W=&EfIO{_e@9O)uc?MMZ0sOs*k_e1es9Z}XfYxH zau(Yyw!D(fMUV1LxwEpuGIG)vrT>}HH1j4p1DUzC^Y7$;&1dsZ=H_NAncFgcr3YjT z%bc3sD{o-o@e&`f%lzdLq;&AJJeLMb#okzNCvYru1M;hg=uPdX-!h?WZSD_fQ5SYC z^PTQMAD}8wcgX(8Z_{eO>uDdkMeb2)b;}Oh7-z5)I3+S#) z6*iKc2#F7bUUK|TFei-Rx^pwR6Wkk4<=WuJZ}3rIGkMFe;Vbdi!IAKuT?UKI02!Xa z zr}6!S$AW;Httu9Qm82h77Y6h1F!fW8D`kt>0%)X;Q`mT9C&$_OYzMY0`zPMH9@_vp zg)fVl3}D9lF_oCg*k;;;XE$=V8}b++MW!of<<-)2kHMYjOm) zB)g)T5{J3Gd58=`sUBd}7=pOq8FQOC%q&A3xsQ1Ywwjx4FHYni^CN^O=)a{4p{QGy z6JEfsn!qLUgnP#oaTTCXdmsa+`2+kMz6qbt-G*N6$DCC>ZdhSPVcM!6cb_BqbVNRD z5H}Bnr9^E6^%);9GYsKs^Sk+(;M?fQXK@d3x98ZAh^-GWzL@;7F^j<9&>naCkr{}s z#rtR@y_pK6LV+pS2)y8WvL)_sC+6p-1J&{d6P$^dHT-W-NUyl1zrdIf54}i4Wh(^} z$c->_*%SVwixlly1rE;5;T;1GhqImx_iLBdwa{7U zxCl;_){dHvy5M}bJ1RT-IXgRB;NJ_K7oEw@QLZ(vaF?I^H+K_vbN5X55p1m zrC4h2q5CqQmpr+1+M;jNirbGFhu>g1CquuQ!S6kVw2Z{Y zMvnOgYu$lairU){W)5cVE~7uO0l!zk)Maw;qrIK&?_@Jf-exP8!BsF2bEGDv z3XqsjFrzyKlZ^n8k%C$M%a{yK$L#n8YzRzKR{#y(QOftumrlrCfXMQpi|IJJfC7I$P^8V}ny6aL zQm(5#NGG)#cjp3HdKs)ngnh3d+TV=HnEz*4l138SCU_vzd8Nif<}p<=Q7wHiH| zF>ro-dA=3bkvR!AxZg0J`iS%cYY_u$yche27Xz;~ouGg)xDR|`7SJWVfEgR1%#lA! zlVl6fDGjKhV6OO`j8oeJm39`q8rA4Ws8#tu=K3=C=@rx|B12gXrj!BFAJRL?41~oq zY+Aev4_<>@sVH3SZP zCT5AFF@0VGIMP<&v$!n3QWgRUToaScQHXBxv8(ku{SbRPt1B}-Va^MVip~x0`_dcr z8~KLHrnJ;(Vt`UblHD_1GhH$61n*_VmnvpF+!IvLsxwcCeDDO6_e8rZVK41$X|voC zNJgLmAxXC|(OX|BlJ0wtdp@~8x>tD|-Zjb&vL^F_&4+EBNc~dVVRw9O&qU8r?*w4c zlZhDYjjcg9p<}5Zzyl9dn}Vfapj1P;hfia~$uFaqAR7t9cVmE{+DNV?g4BiB;2b2` z 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 I|4#z{2jn|k6951J diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 8bd7453..aee23e0 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -5,6 +5,7 @@ #include "spirv.hpp" #include "spirv_crt.hpp" #include +#include using namespace Vulkan; @@ -74,6 +75,12 @@ static GFX_INFO gfx_info; static const uint32_t *fragment_spirv; static size_t fragment_size; +static TTF_Font *message_font; +static std::queue messages; +static uint64_t message_timer; + +#define MESSAGE_TIME 3000 // 3 seconds + typedef struct { float SourceSize[4]; @@ -250,7 +257,23 @@ void rdp_new_processor(GFX_INFO _gfx_info) processor = new RDP::CommandProcessor(wsi->get_device(), gfx_info.RDRAM, 0, gfx_info.RDRAM_SIZE, gfx_info.RDRAM_SIZE / 2, flags); } -void rdp_init(void *_window, GFX_INFO _gfx_info) +static ImageHandle create_message_image(Vulkan::Device &device, int width, const char *message) +{ + SDL_Color fg = {255, 255, 255, 255}; + SDL_Color bg = {0, 0, 0, 0}; + SDL_Surface *surface = TTF_RenderText_LCD_Wrapped(message_font, message, 0, fg, bg, width); + ImageCreateInfo info = ImageCreateInfo::immutable_2d_image(surface->w, surface->h, VK_FORMAT_B8G8R8A8_UNORM, false); + ImageInitialData initial_data = {}; + initial_data.data = surface->pixels; + initial_data.row_length = surface->pitch / 4; + initial_data.image_height = surface->h; + + ImageHandle handle = device.create_image(info, &initial_data); + SDL_DestroySurface(surface); + return handle; +} + +void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, size_t font_size) { memset(&rdp_device, 0, sizeof(RDP_DEVICE)); @@ -287,21 +310,29 @@ void rdp_init(void *_window, GFX_INFO _gfx_info) if (!::Vulkan::Context::init_loader((PFN_vkGetInstanceProcAddr)SDL_Vulkan_GetVkGetInstanceProcAddr())) { rdp_close(); + return; } if (!wsi->init_simple(1, handles)) { rdp_close(); + return; } rdp_new_processor(gfx_info); if (!processor->device_is_supported()) { - delete processor; - delete wsi; - processor = nullptr; rdp_close(); + return; } + + message_font = TTF_OpenFontIO(SDL_IOFromConstMem(font, font_size), true, 30.0); + if (!message_font) + { + rdp_close(); + return; + } + wsi->begin_frame(); callback.emu_running = true; @@ -309,12 +340,21 @@ void rdp_init(void *_window, GFX_INFO _gfx_info) callback.paused = false; callback.save_state_slot = 0; crop_letterbox = false; + + messages = std::queue(); + message_timer = 0; } void rdp_close() { - wsi->end_frame(); + if (wsi) + wsi->end_frame(); + if (message_font) + { + TTF_CloseFont(message_font); + message_font = nullptr; + } if (processor) { delete processor; @@ -449,6 +489,25 @@ static void render_frame(Vulkan::Device &device) // The vertices are constants in the shader. // Draws fullscreen quad using oversized triangle. cmd->draw(3); + + if (!messages.empty()) + { + Vulkan::ImageHandle message_image = create_message_image(device, vp.width, messages.front().c_str()); + cmd->set_texture(0, 0, message_image->get_view(), Vulkan::StockSampler::LinearClamp); + vp.x = vp.x + (vp.width - message_image->get_width()) / 2; + vp.y = vp.y + vp.height - message_image->get_height(); + vp.height = message_image->get_height(); + vp.width = message_image->get_width(); + cmd->set_viewport(vp); + + cmd->draw(3); + + if (SDL_GetTicks() > message_timer) + { + messages.pop(); + message_timer = SDL_GetTicks() + MESSAGE_TIME; + } + } } cmd->end_render_pass(); @@ -495,6 +554,13 @@ void rdp_load_state(const uint8_t *state) memcpy(&rdp_device, state, sizeof(RDP_DEVICE)); } +void rdp_onscreen_message(const char *_message) +{ + if (messages.empty()) + message_timer = SDL_GetTicks() + MESSAGE_TIME; + messages.push(_message); +} + uint64_t rdp_process_commands() { uint64_t interrupt_timer = 0; diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 7c69061..e56e9a6 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -37,12 +37,13 @@ extern "C" uint32_t save_state_slot; } CALL_BACK; - void rdp_init(void *_window, GFX_INFO _gfx_info); + void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, size_t font_size); void rdp_close(); void rdp_set_vi_register(uint32_t reg, uint32_t value); void rdp_update_screen(); CALL_BACK rdp_check_callback(); uint64_t rdp_process_commands(); + void rdp_onscreen_message(const char *_message); void rdp_new_processor(GFX_INFO _gfx_info); size_t rdp_state_size(); void rdp_save_state(uint8_t *state); diff --git a/src/cheats.rs b/src/cheats.rs index d661e90..d81b8f9 100644 --- a/src/cheats.rs +++ b/src/cheats.rs @@ -71,7 +71,7 @@ pub fn init( if !device.cheats.cheats.is_empty() { device.cheats.enabled = true; - ui::audio::play_cheat_event(&device.ui); + ui::video::onscreen_message(&device.ui, "Cheats enabled"); } } diff --git a/src/device/controller.rs b/src/device/controller.rs index 143fcd5..ea29ae6 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -189,20 +189,22 @@ pub fn pak_switch_event(device: &mut device::Device) { write: device::controller::mempak::write, pak_type: new_pak_type, }); + ui::video::onscreen_message(&device.ui, "MemPak selected"); } else if new_pak_type == PakType::RumblePak { channel.pak_handler = Some(device::controller::PakHandler { read: device::controller::rumble::read, write: device::controller::rumble::write, pak_type: new_pak_type, }); + ui::video::onscreen_message(&device.ui, "RumblePak selected"); } else if new_pak_type == PakType::TransferPak { channel.pak_handler = Some(device::controller::PakHandler { read: device::controller::transferpak::read, write: device::controller::transferpak::write, pak_type: new_pak_type, }); + ui::video::onscreen_message(&device.ui, "TransferPak selected"); } - ui::audio::play_pak_switch(&device.ui, new_pak_type); channel.change_pak = PakType::None; } } diff --git a/src/device/cpu.rs b/src/device/cpu.rs index 57faaee..1b209dc 100644 --- a/src/device/cpu.rs +++ b/src/device/cpu.rs @@ -1,4 +1,4 @@ -use crate::{device, savestates}; +use crate::{device, savestates, ui}; #[derive(PartialEq, serde::Serialize, serde::Deserialize)] pub enum State { @@ -227,7 +227,10 @@ pub fn init(device: &mut device::Device) { device.cpu.clock_rate = if !device.cpu.overclock { 93750000 } else { - println!("Overclocking enabled, setting clock rate to 125 MHz"); + ui::video::onscreen_message( + &device.ui, + "Overclocking enabled, setting clock rate to 125 MHz", + ); 125000000 }; diff --git a/src/netplay.rs b/src/netplay.rs index ec77418..753d571 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -46,14 +46,6 @@ struct InputEvent { plugin: u8, } -pub const NETPLAY_ERROR_DESYNC: u32 = 0; -pub const NETPLAY_ERROR_LOST_CONNECTION: u32 = 1; -pub const NETPLAY_ERROR_PLAYER_DISCONNECTED: u32 = 2; -pub const NETPLAY_ERROR_PLAYER_1_DISCONNECTED: u32 = 3; -pub const NETPLAY_ERROR_PLAYER_2_DISCONNECTED: u32 = 4; -pub const NETPLAY_ERROR_PLAYER_3_DISCONNECTED: u32 = 5; -pub const NETPLAY_ERROR_PLAYER_4_DISCONNECTED: u32 = 6; - pub fn send_rtc(netplay: &mut Netplay, rtc: i64) { let mut request: Vec = [TCP_SEND_RTC].to_vec(); let size: u32 = 8; @@ -155,7 +147,7 @@ pub fn get_input(device: &mut device::Device, channel: usize) -> ui::input::Inpu .remove(&netplay.player_data[channel].count); if std::time::Instant::now() > timeout { - ui::audio::play_netplay_audio(&device.ui, NETPLAY_ERROR_LOST_CONNECTION); + ui::video::onscreen_message(&device.ui, "Lost connection to netplay server"); input = Some(InputEvent { input: 0, plugin: 0, @@ -200,15 +192,13 @@ fn process_incoming(netplay: &mut Netplay, ui: &ui::Ui) { } if current_status != netplay.status { if ((current_status & 0x1) ^ (netplay.status & 0x1)) != 0 { - ui::audio::play_netplay_audio(ui, NETPLAY_ERROR_DESYNC); + ui::video::onscreen_message(ui, "Netplay desync detected"); + ui::video::onscreen_message(ui, "Netplay desync detected"); // queue this message twice to ensure they see it } for dis in 1..5 { if ((current_status & (0x1 << dis)) ^ (netplay.status & (0x1 << dis))) != 0 { - ui::audio::play_netplay_audio( - ui, - NETPLAY_ERROR_PLAYER_DISCONNECTED + dis, - ); + ui::video::onscreen_message(ui, &format!("Player {dis} disconnected")); } } netplay.status = current_status; diff --git a/src/savestates.rs b/src/savestates.rs index e26b703..5e48295 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -87,9 +87,12 @@ pub fn create_savestate(device: &device::Device) { compressed_file, ) .unwrap(); - println!( - "Savestate created at {}", - device.ui.storage.paths.savestate_file_path.display() + ui::video::onscreen_message( + &device.ui, + &format!( + "Savestate created in slot {}", + device.ui.storage.save_state_slot + ), ); } @@ -195,12 +198,21 @@ pub fn load_savestate(device: &mut device::Device) { ui::audio::close_game_audio(&mut device.ui); ui::audio::init_game_audio(&mut device.ui, device.ai.freq); ui::video::load_state(device, rdp_state.as_ptr()); - println!( - "Savestate loaded from {}", - device.ui.storage.paths.savestate_file_path.display() + ui::video::onscreen_message( + &device.ui, + &format!( + "Savestate loaded from slot {}", + device.ui.storage.save_state_slot + ), ); } else { - println!("Failed to load savestate"); + ui::video::onscreen_message( + &device.ui, + &format!( + "Failed to load savestate from slot {}", + device.ui.storage.save_state_slot + ), + ); } } } diff --git a/src/ui.rs b/src/ui.rs index ddd4ca2..f0db863 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -16,9 +16,7 @@ pub struct Dirs { pub struct Audio { pub audio_device_spec: sdl3_sys::audio::SDL_AudioSpec, pub audio_stream: *mut sdl3_sys::audio::SDL_AudioStream, - pub event_audio_stream: *mut sdl3_sys::audio::SDL_AudioStream, pub audio_device: u32, - pub event_audio: audio::EventAudio, pub gain: f32, } @@ -56,6 +54,7 @@ impl Drop for Ui { fn drop(&mut self) { if self.with_sdl { unsafe { + sdl3_ttf_sys::ttf::TTF_Quit(); sdl3_sys::init::SDL_Quit(); } } @@ -74,6 +73,14 @@ pub fn sdl_init(flag: sdl3_sys::init::SDL_InitFlags) { } } +pub fn ttf_init() { + unsafe { + if !sdl3_ttf_sys::ttf::TTF_Init() { + panic!("Could not initialize TTF"); + } + } +} + pub fn get_dirs() -> Dirs { let exe_path = std::env::current_exe().unwrap(); let portable_dir = exe_path.parent(); @@ -169,24 +176,8 @@ impl Ui { game_id: String::new(), game_hash: String::new(), audio: Audio { - event_audio: audio::EventAudio { - mempak: include_bytes!("../data/mempak.wav").to_vec(), - rumblepak: include_bytes!("../data/rumblepak.wav").to_vec(), - transferpak: include_bytes!("../data/transferpak.wav").to_vec(), - netplay_desync: include_bytes!("../data/netplay_desync.wav").to_vec(), - netplay_lost_connection: include_bytes!("../data/netplay_lost_connection.wav") - .to_vec(), - netplay_disconnected: [ - include_bytes!("../data/netplay_p1_disconnected.wav").to_vec(), - include_bytes!("../data/netplay_p2_disconnected.wav").to_vec(), - include_bytes!("../data/netplay_p3_disconnected.wav").to_vec(), - include_bytes!("../data/netplay_p4_disconnected.wav").to_vec(), - ], - cheats_enabled: include_bytes!("../data/cheats_enabled.wav").to_vec(), - }, audio_device_spec: Default::default(), audio_stream: std::ptr::null_mut(), - event_audio_stream: std::ptr::null_mut(), audio_device: 0, gain: 1.0, }, diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 9e0caf8..7168bf3 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -1,17 +1,6 @@ use crate::device; -use crate::netplay; use crate::ui; -pub struct EventAudio { - pub mempak: Vec, - pub rumblepak: Vec, - pub transferpak: Vec, - pub netplay_desync: Vec, - pub netplay_lost_connection: Vec, - pub netplay_disconnected: [Vec; 4], - pub cheats_enabled: Vec, -} - pub fn init(ui: &mut ui::Ui, frequency: u64) { ui::sdl_init(sdl3_sys::init::SDL_INIT_AUDIO); @@ -40,24 +29,6 @@ pub fn init(ui: &mut ui::Ui, frequency: u64) { panic!("Could not get audio device format"); } - let wav_audio_spec = sdl3_sys::audio::SDL_AudioSpec { - format: sdl3_sys::audio::SDL_AUDIO_S16LE, - freq: 24000, - channels: 1, - }; - - ui.audio.event_audio_stream = unsafe { - sdl3_sys::audio::SDL_CreateAudioStream(&wav_audio_spec, &ui.audio.audio_device_spec) - }; - if !unsafe { - sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.event_audio_stream, ui.audio.gain) - && sdl3_sys::audio::SDL_BindAudioStream( - ui.audio.audio_device, - ui.audio.event_audio_stream, - ) - } { - panic!("Could not bind audio stream"); - } init_game_audio(ui, frequency); } @@ -85,10 +56,6 @@ pub fn init_game_audio(ui: &mut ui::Ui, frequency: u64) { pub fn close(ui: &mut ui::Ui) { close_game_audio(ui); unsafe { - if !ui.audio.event_audio_stream.is_null() { - sdl3_sys::audio::SDL_DestroyAudioStream(ui.audio.event_audio_stream); - ui.audio.event_audio_stream = std::ptr::null_mut(); - } sdl3_sys::audio::SDL_CloseAudioDevice(ui.audio.audio_device); ui.audio.audio_device = 0; } @@ -110,7 +77,6 @@ pub fn lower_audio_volume(ui: &mut ui::Ui) { ui.audio.gain = 0.0; } sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.audio_stream, ui.audio.gain); - sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.event_audio_stream, ui.audio.gain); } } @@ -121,77 +87,6 @@ pub fn raise_audio_volume(ui: &mut ui::Ui) { ui.audio.gain = 2.0; } sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.audio_stream, ui.audio.gain); - sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.event_audio_stream, ui.audio.gain); - } -} - -pub fn play_cheat_event(ui: &ui::Ui) { - if ui.audio.event_audio_stream.is_null() { - return; - } - let sound = &ui.audio.event_audio.cheats_enabled; - if !unsafe { - sdl3_sys::audio::SDL_PutAudioStreamData( - ui.audio.event_audio_stream, - sound.as_ptr() as *const std::ffi::c_void, - sound.len() as i32, - ) - } { - panic!("Could not play audio"); - } -} - -pub fn play_netplay_audio(ui: &ui::Ui, error: u32) { - if ui.audio.event_audio_stream.is_null() { - return; - } - let sound = match error { - netplay::NETPLAY_ERROR_DESYNC => &ui.audio.event_audio.netplay_desync, - netplay::NETPLAY_ERROR_LOST_CONNECTION => &ui.audio.event_audio.netplay_lost_connection, - netplay::NETPLAY_ERROR_PLAYER_1_DISCONNECTED => { - &ui.audio.event_audio.netplay_disconnected[0] - } - netplay::NETPLAY_ERROR_PLAYER_2_DISCONNECTED => { - &ui.audio.event_audio.netplay_disconnected[1] - } - netplay::NETPLAY_ERROR_PLAYER_3_DISCONNECTED => { - &ui.audio.event_audio.netplay_disconnected[2] - } - netplay::NETPLAY_ERROR_PLAYER_4_DISCONNECTED => { - &ui.audio.event_audio.netplay_disconnected[3] - } - _ => panic!("Invalid netplay error"), - }; - if !unsafe { - sdl3_sys::audio::SDL_PutAudioStreamData( - ui.audio.event_audio_stream, - sound.as_ptr() as *const std::ffi::c_void, - sound.len() as i32, - ) - } { - panic!("Could not play audio"); - } -} - -pub fn play_pak_switch(ui: &ui::Ui, pak: device::controller::PakType) { - if ui.audio.event_audio_stream.is_null() { - return; - } - - let sound = match pak { - device::controller::PakType::RumblePak => &ui.audio.event_audio.rumblepak, - device::controller::PakType::MemPak => &ui.audio.event_audio.mempak, - device::controller::PakType::TransferPak => &ui.audio.event_audio.transferpak, - _ => panic!("Invalid pak type"), - }; - if !unsafe { - sdl3_sys::audio::SDL_PutAudioStreamData( - ui.audio.event_audio_stream, - sound.as_ptr() as *const std::ffi::c_void, - sound.len() as i32, - ) - } { - panic!("Could not play audio"); } } diff --git a/src/ui/input.rs b/src/ui/input.rs index fdcd9d6..22950e1 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -466,6 +466,7 @@ fn close_controllers( pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { ui::sdl_init(sdl3_sys::init::SDL_INIT_VIDEO); + ui::ttf_init(); if profile == "default" { println!("Profile name cannot be default"); @@ -567,8 +568,18 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { axis: 0, }; - let font = - ab_glyph::FontRef::try_from_slice(include_bytes!("../../data/Roboto-Regular.ttf")).unwrap(); + let text_engine = unsafe { sdl3_ttf_sys::ttf::TTF_CreateRendererTextEngine(renderer) }; + let font = unsafe { + let font_bytes = include_bytes!("../../data/Roboto-Regular.ttf"); + sdl3_ttf_sys::ttf::TTF_OpenFontIO( + sdl3_sys::everything::SDL_IOFromConstMem( + font_bytes.as_ptr() as *const std::ffi::c_void, + font_bytes.len(), + ), + true, + 35.0, + ) + }; for (key, value) in key_labels.iter() { let mut event: sdl3_sys::events::SDL_Event = Default::default(); @@ -577,7 +588,8 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { ui::video::draw_text( format!("Select binding for: {key}").as_str(), renderer, - &font, + text_engine, + font, ); let mut key_set = false; @@ -671,6 +683,8 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { close_controllers(open_joysticks, open_controllers); unsafe { + sdl3_ttf_sys::ttf::TTF_CloseFont(font); + sdl3_ttf_sys::ttf::TTF_DestroyRendererTextEngine(text_engine); sdl3_sys::render::SDL_DestroyRenderer(renderer); sdl3_sys::video::SDL_DestroyWindow(window); } diff --git a/src/ui/video.rs b/src/ui/video.rs index 0594d8e..6838e5e 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -1,10 +1,10 @@ #![allow(non_snake_case)] include!(concat!(env!("OUT_DIR"), "/parallel_bindings.rs")); use crate::{device, ui}; -use ab_glyph::{Font, ScaleFont}; pub fn init(device: &mut device::Device) { ui::sdl_init(sdl3_sys::init::SDL_INIT_VIDEO); + ui::ttf_init(); let title = std::ffi::CString::new("gopher64").unwrap(); @@ -74,7 +74,15 @@ pub fn init(device: &mut device::Device) { crt: device.ui.config.video.crt, }; - unsafe { rdp_init(device.ui.video.window as *mut std::ffi::c_void, gfx_info) } + unsafe { + let font_bytes = include_bytes!("../../data/Roboto-Regular.ttf"); + rdp_init( + device.ui.video.window as *mut std::ffi::c_void, + gfx_info, + font_bytes.as_ptr() as *const std::ffi::c_void, + font_bytes.len(), + ) + } } pub fn close(ui: &ui::Ui) { @@ -144,7 +152,10 @@ pub fn check_callback(device: &mut device::Device) -> bool { } if device.ui.storage.save_state_slot != callback.save_state_slot { - println!("Switching save state slot to {}", callback.save_state_slot); + ui::video::onscreen_message( + &device.ui, + &format!("Switching savestate slot to {}", callback.save_state_slot,), + ); device.ui.storage.save_state_slot = callback.save_state_slot; device .ui @@ -171,60 +182,30 @@ pub fn process_rdp_list() -> u64 { unsafe { rdp_process_commands() } } +pub fn onscreen_message(_ui: &ui::Ui, message: &str) { + unsafe { rdp_onscreen_message(std::ffi::CString::new(message).unwrap().as_ptr()) }; +} + pub fn draw_text( text: &str, renderer: *mut sdl3_sys::render::SDL_Renderer, - font: &ab_glyph::FontRef, + text_engine: *mut sdl3_ttf_sys::ttf::TTF_TextEngine, + font: *mut sdl3_ttf_sys::ttf::TTF_Font, ) { - // Clear the canvas unsafe { - sdl3_sys::render::SDL_SetRenderDrawColor( - renderer, + let (mut w, mut h) = (0, 0); + sdl3_sys::render::SDL_GetRenderOutputSize(renderer, &mut w, &mut h); + + let ttf_text = sdl3_ttf_sys::ttf::TTF_CreateText( + text_engine, + font, + std::ffi::CString::new(text).unwrap().as_ptr(), 0, - 0, - 0, - sdl3_sys::pixels::SDL_ALPHA_OPAQUE, ); - sdl3_sys::render::SDL_RenderClear(renderer); - }; - let text_size = 40.0; - let (mut w, mut h) = (0, 0); - unsafe { sdl3_sys::render::SDL_GetRenderOutputSize(renderer, &mut w, &mut h) }; - let x_start = 20.0; - let y_start = (h / 2) as f32; - - let mut x_offset = 0.0; - for c in text.chars() { - let q_glyph_id = font.glyph_id(c); - let q_glyph = q_glyph_id.with_scale(text_size); - - if let Some(q) = font.outline_glyph(q_glyph) { - q.draw(|x, y, c| { - if c > 0.5 { - unsafe { - sdl3_sys::render::SDL_SetRenderDrawColor( - renderer, - 255, - 255, - 255, - sdl3_sys::pixels::SDL_ALPHA_OPAQUE, - ); - sdl3_sys::render::SDL_RenderPoint( - renderer, - x_start + x_offset + x as f32 - q.px_bounds().width() - + q.px_bounds().max.x, - y_start + y as f32 - q.px_bounds().height() + q.px_bounds().max.y, - ); - }; - } - }); - } - x_offset += font.as_scaled(text_size).h_advance(q_glyph_id); - } - - // Present the canvas - if !unsafe { sdl3_sys::render::SDL_RenderPresent(renderer) } { - panic!("Could not present renderer"); + sdl3_sys::everything::SDL_RenderClear(renderer); + sdl3_ttf_sys::ttf::TTF_DrawRendererText(ttf_text, 20.0, h as f32 / 2.0); + sdl3_sys::render::SDL_RenderPresent(renderer); + sdl3_ttf_sys::ttf::TTF_DestroyText(ttf_text); } } From 98c9cf142db0ea9f5f0b132d4a200d4f2995946c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 5 Aug 2025 21:40:31 +0200 Subject: [PATCH 0549/1117] slight improvment to combobox sizes --- src/ui/gui/controller_page.slint | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ui/gui/controller_page.slint b/src/ui/gui/controller_page.slint index 89cbbde..9107245 100644 --- a/src/ui/gui/controller_page.slint +++ b/src/ui/gui/controller_page.slint @@ -89,10 +89,12 @@ export component ControllerConfig inherits Page { if !ControllerData.blank_profiles: GroupBox { title: @tr("Profile"); + horizontal-stretch: 0.25; VerticalLayout { alignment: space-between; for player in [0, 1, 2, 3]: ComboBox { model: ControllerData.input_profiles; + min-width: self.preferred-width; current-index: ControllerData.selected_profile_binding[player]; selected => { ControllerData.selected_profile_binding[player] = self.current-index; @@ -103,11 +105,12 @@ export component ControllerConfig inherits Page { GroupBox { title: @tr("Controller"); + horizontal-stretch: 0.75; VerticalLayout { alignment: space-between; for player in [0, 1, 2, 3]: ComboBox { model: ControllerData.controller_names; - width: self.preferred-width; + min-width: self.preferred-width; current-index: ControllerData.selected_controller[player]; selected => { ControllerData.selected_controller[player] = self.current-index; From b1fcaa5cf40ef8a200b2b0451e91499484bf17a3 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 5 Aug 2025 21:55:41 +0200 Subject: [PATCH 0550/1117] add minimum size to combobox --- src/ui/gui/controller_page.slint | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/gui/controller_page.slint b/src/ui/gui/controller_page.slint index 9107245..3e26dff 100644 --- a/src/ui/gui/controller_page.slint +++ b/src/ui/gui/controller_page.slint @@ -94,7 +94,7 @@ export component ControllerConfig inherits Page { alignment: space-between; for player in [0, 1, 2, 3]: ComboBox { model: ControllerData.input_profiles; - min-width: self.preferred-width; + min-width: self.preferred-width > 150px ? self.preferred-width : 150px; current-index: ControllerData.selected_profile_binding[player]; selected => { ControllerData.selected_profile_binding[player] = self.current-index; @@ -110,7 +110,7 @@ export component ControllerConfig inherits Page { alignment: space-between; for player in [0, 1, 2, 3]: ComboBox { model: ControllerData.controller_names; - min-width: self.preferred-width; + min-width: self.preferred-width > 300px ? self.preferred-width : 300px; current-index: ControllerData.selected_controller[player]; selected => { ControllerData.selected_controller[player] = self.current-index; From 3c317460fd96e7719eb0d700d0098a7fc7ed0d71 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Aug 2025 08:56:09 +0200 Subject: [PATCH 0551/1117] Bump signpath/github-action-submit-signing-request from 1.2 to 1.3 (#537) Bumps [signpath/github-action-submit-signing-request](https://github.com/signpath/github-action-submit-signing-request) from 1.2 to 1.3. - [Commits](https://github.com/signpath/github-action-submit-signing-request/compare/v1.2...v1.3) --- updated-dependencies: - dependency-name: signpath/github-action-submit-signing-request dependency-version: '1.3' dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a8bc107..1d53bfe 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -110,7 +110,7 @@ jobs: path: output/gopher64-${{ matrix.arch }}.exe - name: SignPath if: ${{ github.ref_type == 'tag' }} - uses: signpath/github-action-submit-signing-request@v1.2 + uses: signpath/github-action-submit-signing-request@v1.3 with: api-token: "${{ secrets.SIGNPATH_API_TOKEN }}" organization-id: "${{ secrets.SIGNPATH_ORG_ID }}" From fc512d951717a21bf62b6ca05899e7d1265265e9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 6 Aug 2025 09:12:35 +0200 Subject: [PATCH 0552/1117] fix netplay for unknown ROMs --- src/ui/netplay.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index d3c2525..b604cfd 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -187,7 +187,7 @@ fn select_rom( if let Some(file) = select_rom.await { if let Some(rom_contents) = device::get_rom_contents(file.path()) { let hash = device::cart::rom::calculate_hash(&rom_contents); - let game_name = ui::storage::get_game_name(&rom_contents); + let mut game_name = ui::storage::get_game_name(&rom_contents); let game_crc = ui::storage::get_game_crc(&rom_contents); let cheats = ui::config::Cheats::new(); let mut parsed_cheats = "".to_string(); @@ -196,6 +196,14 @@ fn select_rom( { parsed_cheats = serde_json::to_string(game_cheats).unwrap(); } + if game_name.is_empty() { + game_name = file + .path() + .file_name() + .unwrap() + .to_string_lossy() + .to_string(); + } weak.upgrade_in_event_loop(move |handle| { handle.set_game_name(game_name.into()); From 23fdfff1ac0cb9a67b47e9b2844545df8636416e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 6 Aug 2025 12:18:40 +0200 Subject: [PATCH 0553/1117] some clippy fixes (#538) * some clippy fixes * more --- src/device/cart.rs | 10 ------ src/ui/netplay.rs | 78 +++++++++++++++++++++------------------------- 2 files changed, 36 insertions(+), 52 deletions(-) diff --git a/src/device/cart.rs b/src/device/cart.rs index 97bf09f..ba3d23d 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -21,16 +21,6 @@ const JDT_EEPROM_16K: u16 = 0xc000; /* 16k EEPROM */ const EEPROM_BLOCK_SIZE: usize = 8; pub const EEPROM_MAX_SIZE: usize = 0x800; -#[derive(serde::Serialize, serde::Deserialize)] -pub enum CicType { - CicNus6101, - CicNus6102, - CicNus6103, - CicNus6105, - CicNus6106, - CicNus5167, -} - #[derive(serde::Serialize, serde::Deserialize)] pub struct AfRtc { pub control: u16, diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index b604cfd..c331c50 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -523,50 +523,44 @@ fn update_sessions(weak: slint::Weak) { .await .unwrap(); - if let Some(Ok(response)) = read.next().await { - if let Ok(message) = + if let Some(Ok(response)) = read.next().await + && let Ok(message) = serde_json::from_slice::(&response.into_data()) - { - if message.message_type == "reply_get_rooms" - && message.accept.unwrap() == 0 - && let Some(rooms) = message.rooms - { - for room in rooms { - let mut session = vec![]; - room_urls.push(server_url.into()); + && message.message_type == "reply_get_rooms" + && message.accept.unwrap() == 0 + && let Some(rooms) = message.rooms + { + for room in rooms { + let mut session = vec![]; + room_urls.push(server_url.into()); - session.push(slint::StandardListViewItem::from( - slint::SharedString::from(server_name), - )); - session.push(slint::StandardListViewItem::from( - slint::SharedString::from(room.room_name.unwrap()), - )); - session.push(slint::StandardListViewItem::from( - slint::SharedString::from(room.game_name.unwrap()), - )); - session.push(slint::StandardListViewItem::from( - slint::SharedString::from(if room.protected.unwrap() { - "True" - } else { - "False" - }), - )); - session.push(slint::StandardListViewItem::from( - slint::SharedString::from( - if room - .features - .unwrap_or_default() - .contains_key("cheats") - { - "True" - } else { - "False" - }, - ), - )); - sessions.push(session); - } - } + session.push(slint::StandardListViewItem::from( + slint::SharedString::from(server_name), + )); + session.push(slint::StandardListViewItem::from( + slint::SharedString::from(room.room_name.unwrap()), + )); + session.push(slint::StandardListViewItem::from( + slint::SharedString::from(room.game_name.unwrap()), + )); + session.push(slint::StandardListViewItem::from( + slint::SharedString::from(if room.protected.unwrap() { + "True" + } else { + "False" + }), + )); + session.push(slint::StandardListViewItem::from( + slint::SharedString::from( + if room.features.unwrap_or_default().contains_key("cheats") + { + "True" + } else { + "False" + }, + ), + )); + sessions.push(session); } } } From f1968e3a5852c2f03960b989cde87d2ad307b0ef Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 6 Aug 2025 23:02:08 +0200 Subject: [PATCH 0554/1117] use NearestClamp for image --- parallel-rdp/interface.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index aee23e0..aebf742 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -484,7 +484,7 @@ static void render_frame(Vulkan::Device &device) cmd->push_constants(&push, 0, sizeof(push)); } - cmd->set_texture(0, 0, image->get_view(), Vulkan::StockSampler::LinearClamp); + cmd->set_texture(0, 0, image->get_view(), Vulkan::StockSampler::NearestClamp); cmd->set_viewport(vp); // The vertices are constants in the shader. // Draws fullscreen quad using oversized triangle. @@ -493,7 +493,7 @@ static void render_frame(Vulkan::Device &device) if (!messages.empty()) { Vulkan::ImageHandle message_image = create_message_image(device, vp.width, messages.front().c_str()); - cmd->set_texture(0, 0, message_image->get_view(), Vulkan::StockSampler::LinearClamp); + cmd->set_texture(0, 0, message_image->get_view(), Vulkan::StockSampler::NearestClamp); vp.x = vp.x + (vp.width - message_image->get_width()) / 2; vp.y = vp.y + vp.height - message_image->get_height(); vp.height = message_image->get_height(); From c6767c94a63a35608f2071cfebaef82ce9c9c586 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 7 Aug 2025 12:17:50 +0200 Subject: [PATCH 0555/1117] move sse2neon to submodule (#539) --- .gitmodules | 3 + build.rs | 2 +- src/compat/aarch64.c | 2 +- src/compat/sse2neon | 1 + src/compat/sse2neon/v1.8.0/sse2neon.h | 9417 ------------------------- 5 files changed, 6 insertions(+), 9419 deletions(-) create mode 160000 src/compat/sse2neon delete mode 100644 src/compat/sse2neon/v1.8.0/sse2neon.h diff --git a/.gitmodules b/.gitmodules index c1193b6..65f8baf 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,3 +2,6 @@ path = parallel-rdp/parallel-rdp-standalone url = https://github.com/gopher64/parallel-rdp-standalone.git branch = gopher64 +[submodule "src/compat/sse2neon"] + path = src/compat/sse2neon + url = https://github.com/DLTcollab/sse2neon.git diff --git a/build.rs b/build.rs index 808c95a..599da1b 100644 --- a/build.rs +++ b/build.rs @@ -128,7 +128,7 @@ fn main() { if arch == "aarch64" { let simd_bindings = bindgen::Builder::default() - .header("src/compat/sse2neon/v1.8.0/sse2neon.h") + .header("src/compat/sse2neon/sse2neon.h") .allowlist_function("_mm_setzero_si128") .allowlist_function("_mm_set_epi8") .allowlist_function("_mm_movemask_epi8") diff --git a/src/compat/aarch64.c b/src/compat/aarch64.c index fe99f6c..ff42d2e 100644 --- a/src/compat/aarch64.c +++ b/src/compat/aarch64.c @@ -1,4 +1,4 @@ -#include "src/compat/sse2neon/v1.8.0/sse2neon.h" +#include "src/compat/sse2neon/sse2neon.h" // Static wrappers diff --git a/src/compat/sse2neon b/src/compat/sse2neon new file mode 160000 index 0000000..3cf6976 --- /dev/null +++ b/src/compat/sse2neon @@ -0,0 +1 @@ +Subproject commit 3cf69760cc6fdc45a5d70f0d42a8f079489f9867 diff --git a/src/compat/sse2neon/v1.8.0/sse2neon.h b/src/compat/sse2neon/v1.8.0/sse2neon.h deleted file mode 100644 index 79b90fe..0000000 --- a/src/compat/sse2neon/v1.8.0/sse2neon.h +++ /dev/null @@ -1,9417 +0,0 @@ -#ifndef SSE2NEON_H -#define SSE2NEON_H - -/* - * sse2neon is freely redistributable under the MIT License. - * - * Copyright (c) 2015-2024 SSE2NEON Contributors. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -// This header file provides a simple API translation layer -// between SSE intrinsics to their corresponding Arm/Aarch64 NEON versions -// -// Contributors to this work are: -// John W. Ratcliff -// Brandon Rowlett -// Ken Fast -// Eric van Beurden -// Alexander Potylitsin -// Hasindu Gamaarachchi -// Jim Huang -// Mark Cheng -// Malcolm James MacLeod -// Devin Hussey (easyaspi314) -// Sebastian Pop -// Developer Ecosystem Engineering -// Danila Kutenin -// François Turban (JishinMaster) -// Pei-Hsuan Hung -// Yang-Hao Yuan -// Syoyo Fujita -// Brecht Van Lommel -// Jonathan Hue -// Cuda Chen -// Aymen Qader -// Anthony Roberts -// Sean Luchen - -/* Tunable configurations */ - -/* Enable precise implementation of math operations - * This would slow down the computation a bit, but gives consistent result with - * x86 SSE. (e.g. would solve a hole or NaN pixel in the rendering result) - */ -/* _mm_min|max_ps|ss|pd|sd */ -#ifndef SSE2NEON_PRECISE_MINMAX -#define SSE2NEON_PRECISE_MINMAX (0) -#endif -/* _mm_rcp_ps */ -#ifndef SSE2NEON_PRECISE_DIV -#define SSE2NEON_PRECISE_DIV (0) -#endif -/* _mm_sqrt_ps and _mm_rsqrt_ps */ -#ifndef SSE2NEON_PRECISE_SQRT -#define SSE2NEON_PRECISE_SQRT (0) -#endif -/* _mm_dp_pd */ -#ifndef SSE2NEON_PRECISE_DP -#define SSE2NEON_PRECISE_DP (0) -#endif - -/* Enable inclusion of windows.h on MSVC platforms - * This makes _mm_clflush functional on windows, as there is no builtin. - */ -#ifndef SSE2NEON_INCLUDE_WINDOWS_H -#define SSE2NEON_INCLUDE_WINDOWS_H (0) -#endif - -/* compiler specific definitions */ -#if defined(__GNUC__) || defined(__clang__) -#pragma push_macro("FORCE_INLINE") -#pragma push_macro("ALIGN_STRUCT") -#define FORCE_INLINE static inline __attribute__((always_inline)) -#define ALIGN_STRUCT(x) __attribute__((aligned(x))) -#define _sse2neon_likely(x) __builtin_expect(!!(x), 1) -#define _sse2neon_unlikely(x) __builtin_expect(!!(x), 0) -#elif defined(_MSC_VER) -#if _MSVC_TRADITIONAL -#error Using the traditional MSVC preprocessor is not supported! Use /Zc:preprocessor instead. -#endif -#ifndef FORCE_INLINE -#define FORCE_INLINE static inline -#endif -#ifndef ALIGN_STRUCT -#define ALIGN_STRUCT(x) __declspec(align(x)) -#endif -#define _sse2neon_likely(x) (x) -#define _sse2neon_unlikely(x) (x) -#else -#pragma message("Macro name collisions may happen with unsupported compilers.") -#endif - -#if !defined(__clang__) && defined(__GNUC__) && __GNUC__ < 10 -#warning "GCC versions earlier than 10 are not supported." -#endif - -#if defined(__OPTIMIZE__) && !defined(SSE2NEON_SUPPRESS_WARNINGS) -#warning \ - "Report any potential compiler optimization issues when using SSE2NEON. See the 'Optimization' section at https://github.com/DLTcollab/sse2neon." -#endif - -/* C language does not allow initializing a variable with a function call. */ -#ifdef __cplusplus -#define _sse2neon_const static const -#else -#define _sse2neon_const const -#endif - -#include -#include -#include -#include - -FORCE_INLINE double sse2neon_recast_u64_f64(uint64_t u64) -{ - double f64; - memcpy(&f64, &u64, sizeof(uint64_t)); - return f64; -} -FORCE_INLINE int64_t sse2neon_recast_f64_s64(double f64) -{ - int64_t i64; - memcpy(&i64, &f64, sizeof(uint64_t)); - return i64; -} - -#if defined(_WIN32) && !defined(__MINGW32__) -/* Definitions for _mm_{malloc,free} are provided by from MSVC. */ -#define SSE2NEON_ALLOC_DEFINED -#endif - -/* If using MSVC */ -#ifdef _MSC_VER -#include -#if SSE2NEON_INCLUDE_WINDOWS_H -#include -#include -#endif - -#if !defined(__cplusplus) -#error SSE2NEON only supports C++ compilation with this compiler -#endif - -#ifdef SSE2NEON_ALLOC_DEFINED -#include -#endif - -#if (defined(_M_AMD64) || defined(__x86_64__)) || \ - (defined(_M_ARM64) || defined(__arm64__)) -#define SSE2NEON_HAS_BITSCAN64 -#endif -#endif - -#if defined(__GNUC__) || defined(__clang__) -#define _sse2neon_define0(type, s, body) \ - __extension__({ \ - type _a = (s); \ - body \ - }) -#define _sse2neon_define1(type, s, body) \ - __extension__({ \ - type _a = (s); \ - body \ - }) -#define _sse2neon_define2(type, a, b, body) \ - __extension__({ \ - type _a = (a), _b = (b); \ - body \ - }) -#define _sse2neon_return(ret) (ret) -#else -#define _sse2neon_define0(type, a, body) [=](type _a) { body }(a) -#define _sse2neon_define1(type, a, body) [](type _a) { body }(a) -#define _sse2neon_define2(type, a, b, body) \ - [](type _a, type _b) { body }((a), (b)) -#define _sse2neon_return(ret) return ret -#endif - -#define _sse2neon_init(...) \ - { \ - __VA_ARGS__ \ - } - -/* Compiler barrier */ -#if defined(_MSC_VER) && !defined(__clang__) -#define SSE2NEON_BARRIER() _ReadWriteBarrier() -#else -#define SSE2NEON_BARRIER() \ - do { \ - __asm__ __volatile__("" ::: "memory"); \ - (void) 0; \ - } while (0) -#endif - -/* Memory barriers - * __atomic_thread_fence does not include a compiler barrier; instead, - * the barrier is part of __atomic_load/__atomic_store's "volatile-like" - * semantics. - */ -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) -#include -#endif - -FORCE_INLINE void _sse2neon_smp_mb(void) -{ - SSE2NEON_BARRIER(); -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ - !defined(__STDC_NO_ATOMICS__) - atomic_thread_fence(memory_order_seq_cst); -#elif defined(__GNUC__) || defined(__clang__) - __atomic_thread_fence(__ATOMIC_SEQ_CST); -#else /* MSVC */ - __dmb(_ARM64_BARRIER_ISH); -#endif -} - -/* Architecture-specific build options */ -/* FIXME: #pragma GCC push_options is only available on GCC */ -#if defined(__GNUC__) -#if defined(__arm__) && __ARM_ARCH == 7 -/* According to ARM C Language Extensions Architecture specification, - * __ARM_NEON is defined to a value indicating the Advanced SIMD (NEON) - * architecture supported. - */ -#if !defined(__ARM_NEON) || !defined(__ARM_NEON__) -#error "You must enable NEON instructions (e.g. -mfpu=neon) to use SSE2NEON." -#endif -#if !defined(__clang__) -#pragma GCC push_options -#pragma GCC target("fpu=neon") -#endif -#elif defined(__aarch64__) || defined(_M_ARM64) -#if !defined(__clang__) && !defined(_MSC_VER) -#pragma GCC push_options -#pragma GCC target("+simd") -#endif -#elif __ARM_ARCH == 8 -#if !defined(__ARM_NEON) || !defined(__ARM_NEON__) -#error \ - "You must enable NEON instructions (e.g. -mfpu=neon-fp-armv8) to use SSE2NEON." -#endif -#if !defined(__clang__) && !defined(_MSC_VER) -#pragma GCC push_options -#endif -#else -#error \ - "Unsupported target. Must be either ARMv7-A+NEON or ARMv8-A \ -(you could try setting target explicitly with -march or -mcpu)" -#endif -#endif - -#include -#if (!defined(__aarch64__) && !defined(_M_ARM64)) && (__ARM_ARCH == 8) -#if defined __has_include && __has_include() -#include -#endif -#endif - -/* Apple Silicon cache lines are double of what is commonly used by Intel, AMD - * and other Arm microarchitectures use. - * From sysctl -a on Apple M1: - * hw.cachelinesize: 128 - */ -#if defined(__APPLE__) && (defined(__aarch64__) || defined(__arm64__)) -#define SSE2NEON_CACHELINE_SIZE 128 -#else -#define SSE2NEON_CACHELINE_SIZE 64 -#endif - -/* Rounding functions require either Aarch64 instructions or libm fallback */ -#if !defined(__aarch64__) && !defined(_M_ARM64) -#include -#endif - -/* On ARMv7, some registers, such as PMUSERENR and PMCCNTR, are read-only - * or even not accessible in user mode. - * To write or access to these registers in user mode, - * we have to perform syscall instead. - */ -#if (!defined(__aarch64__) && !defined(_M_ARM64)) -#include -#endif - -/* "__has_builtin" can be used to query support for built-in functions - * provided by gcc/clang and other compilers that support it. - */ -#ifndef __has_builtin /* GCC prior to 10 or non-clang compilers */ -/* Compatibility with gcc <= 9 */ -#if defined(__GNUC__) && (__GNUC__ <= 9) -#define __has_builtin(x) HAS##x -#define HAS__builtin_popcount 1 -#define HAS__builtin_popcountll 1 - -// __builtin_shuffle introduced in GCC 4.7.0 -#if (__GNUC__ >= 5) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) -#define HAS__builtin_shuffle 1 -#else -#define HAS__builtin_shuffle 0 -#endif - -#define HAS__builtin_shufflevector 0 -#define HAS__builtin_nontemporal_store 0 -#else -#define __has_builtin(x) 0 -#endif -#endif - -/** - * MACRO for shuffle parameter for _mm_shuffle_ps(). - * Argument fp3 is a digit[0123] that represents the fp from argument "b" - * of mm_shuffle_ps that will be placed in fp3 of result. fp2 is the same - * for fp2 in result. fp1 is a digit[0123] that represents the fp from - * argument "a" of mm_shuffle_ps that will be places in fp1 of result. - * fp0 is the same for fp0 of result. - */ -#define _MM_SHUFFLE(fp3, fp2, fp1, fp0) \ - (((fp3) << 6) | ((fp2) << 4) | ((fp1) << 2) | ((fp0))) - -/** - * MACRO for shuffle parameter for _mm_shuffle_pd(). - * Argument fp1 is a digit[01] that represents the fp from argument "b" - * of mm_shuffle_pd that will be placed in fp1 of result. - * fp0 is a digit[01] that represents the fp from argument "a" of mm_shuffle_pd - * that will be placed in fp0 of result. - */ -#define _MM_SHUFFLE2(fp1, fp0) (((fp1) << 1) | (fp0)) - -#if __has_builtin(__builtin_shufflevector) -#define _sse2neon_shuffle(type, a, b, ...) \ - __builtin_shufflevector(a, b, __VA_ARGS__) -#elif __has_builtin(__builtin_shuffle) -#define _sse2neon_shuffle(type, a, b, ...) \ - __extension__({ \ - type tmp = {__VA_ARGS__}; \ - __builtin_shuffle(a, b, tmp); \ - }) -#endif - -#ifdef _sse2neon_shuffle -#define vshuffle_s16(a, b, ...) _sse2neon_shuffle(int16x4_t, a, b, __VA_ARGS__) -#define vshuffleq_s16(a, b, ...) _sse2neon_shuffle(int16x8_t, a, b, __VA_ARGS__) -#define vshuffle_s32(a, b, ...) _sse2neon_shuffle(int32x2_t, a, b, __VA_ARGS__) -#define vshuffleq_s32(a, b, ...) _sse2neon_shuffle(int32x4_t, a, b, __VA_ARGS__) -#define vshuffle_s64(a, b, ...) _sse2neon_shuffle(int64x1_t, a, b, __VA_ARGS__) -#define vshuffleq_s64(a, b, ...) _sse2neon_shuffle(int64x2_t, a, b, __VA_ARGS__) -#endif - -/* Rounding mode macros. */ -#define _MM_FROUND_TO_NEAREST_INT 0x00 -#define _MM_FROUND_TO_NEG_INF 0x01 -#define _MM_FROUND_TO_POS_INF 0x02 -#define _MM_FROUND_TO_ZERO 0x03 -#define _MM_FROUND_CUR_DIRECTION 0x04 -#define _MM_FROUND_NO_EXC 0x08 -#define _MM_FROUND_RAISE_EXC 0x00 -#define _MM_FROUND_NINT (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_RAISE_EXC) -#define _MM_FROUND_FLOOR (_MM_FROUND_TO_NEG_INF | _MM_FROUND_RAISE_EXC) -#define _MM_FROUND_CEIL (_MM_FROUND_TO_POS_INF | _MM_FROUND_RAISE_EXC) -#define _MM_FROUND_TRUNC (_MM_FROUND_TO_ZERO | _MM_FROUND_RAISE_EXC) -#define _MM_FROUND_RINT (_MM_FROUND_CUR_DIRECTION | _MM_FROUND_RAISE_EXC) -#define _MM_FROUND_NEARBYINT (_MM_FROUND_CUR_DIRECTION | _MM_FROUND_NO_EXC) -#define _MM_ROUND_NEAREST 0x0000 -#define _MM_ROUND_DOWN 0x2000 -#define _MM_ROUND_UP 0x4000 -#define _MM_ROUND_TOWARD_ZERO 0x6000 -/* Flush zero mode macros. */ -#define _MM_FLUSH_ZERO_MASK 0x8000 -#define _MM_FLUSH_ZERO_ON 0x8000 -#define _MM_FLUSH_ZERO_OFF 0x0000 -/* Denormals are zeros mode macros. */ -#define _MM_DENORMALS_ZERO_MASK 0x0040 -#define _MM_DENORMALS_ZERO_ON 0x0040 -#define _MM_DENORMALS_ZERO_OFF 0x0000 - -/* indicate immediate constant argument in a given range */ -#define __constrange(a, b) const - -/* A few intrinsics accept traditional data types like ints or floats, but - * most operate on data types that are specific to SSE. - * If a vector type ends in d, it contains doubles, and if it does not have - * a suffix, it contains floats. An integer vector type can contain any type - * of integer, from chars to shorts to unsigned long longs. - */ -typedef int64x1_t __m64; -typedef float32x4_t __m128; /* 128-bit vector containing 4 floats */ -// On ARM 32-bit architecture, the float64x2_t is not supported. -// The data type __m128d should be represented in a different way for related -// intrinsic conversion. -#if defined(__aarch64__) || defined(_M_ARM64) -typedef float64x2_t __m128d; /* 128-bit vector containing 2 doubles */ -#else -typedef float32x4_t __m128d; -#endif -typedef int64x2_t __m128i; /* 128-bit vector containing integers */ - -// Some intrinsics operate on unaligned data types. -typedef int16_t ALIGN_STRUCT(1) unaligned_int16_t; -typedef int32_t ALIGN_STRUCT(1) unaligned_int32_t; -typedef int64_t ALIGN_STRUCT(1) unaligned_int64_t; - -// __int64 is defined in the Intrinsics Guide which maps to different datatype -// in different data model -#if !(defined(_WIN32) || defined(_WIN64) || defined(__int64)) -#if (defined(__x86_64__) || defined(__i386__)) -#define __int64 long long -#else -#define __int64 int64_t -#endif -#endif - -/* type-safe casting between types */ - -#define vreinterpretq_m128_f16(x) vreinterpretq_f32_f16(x) -#define vreinterpretq_m128_f32(x) (x) -#define vreinterpretq_m128_f64(x) vreinterpretq_f32_f64(x) - -#define vreinterpretq_m128_u8(x) vreinterpretq_f32_u8(x) -#define vreinterpretq_m128_u16(x) vreinterpretq_f32_u16(x) -#define vreinterpretq_m128_u32(x) vreinterpretq_f32_u32(x) -#define vreinterpretq_m128_u64(x) vreinterpretq_f32_u64(x) - -#define vreinterpretq_m128_s8(x) vreinterpretq_f32_s8(x) -#define vreinterpretq_m128_s16(x) vreinterpretq_f32_s16(x) -#define vreinterpretq_m128_s32(x) vreinterpretq_f32_s32(x) -#define vreinterpretq_m128_s64(x) vreinterpretq_f32_s64(x) - -#define vreinterpretq_f16_m128(x) vreinterpretq_f16_f32(x) -#define vreinterpretq_f32_m128(x) (x) -#define vreinterpretq_f64_m128(x) vreinterpretq_f64_f32(x) - -#define vreinterpretq_u8_m128(x) vreinterpretq_u8_f32(x) -#define vreinterpretq_u16_m128(x) vreinterpretq_u16_f32(x) -#define vreinterpretq_u32_m128(x) vreinterpretq_u32_f32(x) -#define vreinterpretq_u64_m128(x) vreinterpretq_u64_f32(x) - -#define vreinterpretq_s8_m128(x) vreinterpretq_s8_f32(x) -#define vreinterpretq_s16_m128(x) vreinterpretq_s16_f32(x) -#define vreinterpretq_s32_m128(x) vreinterpretq_s32_f32(x) -#define vreinterpretq_s64_m128(x) vreinterpretq_s64_f32(x) - -#define vreinterpretq_m128i_s8(x) vreinterpretq_s64_s8(x) -#define vreinterpretq_m128i_s16(x) vreinterpretq_s64_s16(x) -#define vreinterpretq_m128i_s32(x) vreinterpretq_s64_s32(x) -#define vreinterpretq_m128i_s64(x) (x) - -#define vreinterpretq_m128i_u8(x) vreinterpretq_s64_u8(x) -#define vreinterpretq_m128i_u16(x) vreinterpretq_s64_u16(x) -#define vreinterpretq_m128i_u32(x) vreinterpretq_s64_u32(x) -#define vreinterpretq_m128i_u64(x) vreinterpretq_s64_u64(x) - -#define vreinterpretq_f32_m128i(x) vreinterpretq_f32_s64(x) -#define vreinterpretq_f64_m128i(x) vreinterpretq_f64_s64(x) - -#define vreinterpretq_s8_m128i(x) vreinterpretq_s8_s64(x) -#define vreinterpretq_s16_m128i(x) vreinterpretq_s16_s64(x) -#define vreinterpretq_s32_m128i(x) vreinterpretq_s32_s64(x) -#define vreinterpretq_s64_m128i(x) (x) - -#define vreinterpretq_u8_m128i(x) vreinterpretq_u8_s64(x) -#define vreinterpretq_u16_m128i(x) vreinterpretq_u16_s64(x) -#define vreinterpretq_u32_m128i(x) vreinterpretq_u32_s64(x) -#define vreinterpretq_u64_m128i(x) vreinterpretq_u64_s64(x) - -#define vreinterpret_m64_s8(x) vreinterpret_s64_s8(x) -#define vreinterpret_m64_s16(x) vreinterpret_s64_s16(x) -#define vreinterpret_m64_s32(x) vreinterpret_s64_s32(x) -#define vreinterpret_m64_s64(x) (x) - -#define vreinterpret_m64_u8(x) vreinterpret_s64_u8(x) -#define vreinterpret_m64_u16(x) vreinterpret_s64_u16(x) -#define vreinterpret_m64_u32(x) vreinterpret_s64_u32(x) -#define vreinterpret_m64_u64(x) vreinterpret_s64_u64(x) - -#define vreinterpret_m64_f16(x) vreinterpret_s64_f16(x) -#define vreinterpret_m64_f32(x) vreinterpret_s64_f32(x) -#define vreinterpret_m64_f64(x) vreinterpret_s64_f64(x) - -#define vreinterpret_u8_m64(x) vreinterpret_u8_s64(x) -#define vreinterpret_u16_m64(x) vreinterpret_u16_s64(x) -#define vreinterpret_u32_m64(x) vreinterpret_u32_s64(x) -#define vreinterpret_u64_m64(x) vreinterpret_u64_s64(x) - -#define vreinterpret_s8_m64(x) vreinterpret_s8_s64(x) -#define vreinterpret_s16_m64(x) vreinterpret_s16_s64(x) -#define vreinterpret_s32_m64(x) vreinterpret_s32_s64(x) -#define vreinterpret_s64_m64(x) (x) - -#define vreinterpret_f32_m64(x) vreinterpret_f32_s64(x) - -#if defined(__aarch64__) || defined(_M_ARM64) -#define vreinterpretq_m128d_s32(x) vreinterpretq_f64_s32(x) -#define vreinterpretq_m128d_s64(x) vreinterpretq_f64_s64(x) - -#define vreinterpretq_m128d_u64(x) vreinterpretq_f64_u64(x) - -#define vreinterpretq_m128d_f32(x) vreinterpretq_f64_f32(x) -#define vreinterpretq_m128d_f64(x) (x) - -#define vreinterpretq_s64_m128d(x) vreinterpretq_s64_f64(x) - -#define vreinterpretq_u32_m128d(x) vreinterpretq_u32_f64(x) -#define vreinterpretq_u64_m128d(x) vreinterpretq_u64_f64(x) - -#define vreinterpretq_f64_m128d(x) (x) -#define vreinterpretq_f32_m128d(x) vreinterpretq_f32_f64(x) -#else -#define vreinterpretq_m128d_s32(x) vreinterpretq_f32_s32(x) -#define vreinterpretq_m128d_s64(x) vreinterpretq_f32_s64(x) - -#define vreinterpretq_m128d_u32(x) vreinterpretq_f32_u32(x) -#define vreinterpretq_m128d_u64(x) vreinterpretq_f32_u64(x) - -#define vreinterpretq_m128d_f32(x) (x) - -#define vreinterpretq_s64_m128d(x) vreinterpretq_s64_f32(x) - -#define vreinterpretq_u32_m128d(x) vreinterpretq_u32_f32(x) -#define vreinterpretq_u64_m128d(x) vreinterpretq_u64_f32(x) - -#define vreinterpretq_f32_m128d(x) (x) -#endif - -// A struct is defined in this header file called 'SIMDVec' which can be used -// by applications which attempt to access the contents of an __m128 struct -// directly. It is important to note that accessing the __m128 struct directly -// is bad coding practice by Microsoft: @see: -// https://learn.microsoft.com/en-us/cpp/cpp/m128 -// -// However, some legacy source code may try to access the contents of an __m128 -// struct directly so the developer can use the SIMDVec as an alias for it. Any -// casting must be done manually by the developer, as you cannot cast or -// otherwise alias the base NEON data type for intrinsic operations. -// -// union intended to allow direct access to an __m128 variable using the names -// that the MSVC compiler provides. This union should really only be used when -// trying to access the members of the vector as integer values. GCC/clang -// allow native access to the float members through a simple array access -// operator (in C since 4.6, in C++ since 4.8). -// -// Ideally direct accesses to SIMD vectors should not be used since it can cause -// a performance hit. If it really is needed however, the original __m128 -// variable can be aliased with a pointer to this union and used to access -// individual components. The use of this union should be hidden behind a macro -// that is used throughout the codebase to access the members instead of always -// declaring this type of variable. -typedef union ALIGN_STRUCT(16) SIMDVec { - float m128_f32[4]; // as floats - DON'T USE. Added for convenience. - int8_t m128_i8[16]; // as signed 8-bit integers. - int16_t m128_i16[8]; // as signed 16-bit integers. - int32_t m128_i32[4]; // as signed 32-bit integers. - int64_t m128_i64[2]; // as signed 64-bit integers. - uint8_t m128_u8[16]; // as unsigned 8-bit integers. - uint16_t m128_u16[8]; // as unsigned 16-bit integers. - uint32_t m128_u32[4]; // as unsigned 32-bit integers. - uint64_t m128_u64[2]; // as unsigned 64-bit integers. -} SIMDVec; - -// casting using SIMDVec -#define vreinterpretq_nth_u64_m128i(x, n) (((SIMDVec *) &x)->m128_u64[n]) -#define vreinterpretq_nth_u32_m128i(x, n) (((SIMDVec *) &x)->m128_u32[n]) -#define vreinterpretq_nth_u8_m128i(x, n) (((SIMDVec *) &x)->m128_u8[n]) - -/* SSE macros */ -#define _MM_GET_FLUSH_ZERO_MODE _sse2neon_mm_get_flush_zero_mode -#define _MM_SET_FLUSH_ZERO_MODE _sse2neon_mm_set_flush_zero_mode -#define _MM_GET_DENORMALS_ZERO_MODE _sse2neon_mm_get_denormals_zero_mode -#define _MM_SET_DENORMALS_ZERO_MODE _sse2neon_mm_set_denormals_zero_mode - -// Function declaration -// SSE -FORCE_INLINE unsigned int _MM_GET_ROUNDING_MODE(void); -FORCE_INLINE __m128 _mm_move_ss(__m128, __m128); -FORCE_INLINE __m128 _mm_or_ps(__m128, __m128); -FORCE_INLINE __m128 _mm_set_ps1(float); -FORCE_INLINE __m128 _mm_setzero_ps(void); -// SSE2 -FORCE_INLINE __m128i _mm_and_si128(__m128i, __m128i); -FORCE_INLINE __m128i _mm_castps_si128(__m128); -FORCE_INLINE __m128i _mm_cmpeq_epi32(__m128i, __m128i); -FORCE_INLINE __m128i _mm_cvtps_epi32(__m128); -FORCE_INLINE __m128d _mm_move_sd(__m128d, __m128d); -FORCE_INLINE __m128i _mm_or_si128(__m128i, __m128i); -FORCE_INLINE __m128i _mm_set_epi32(int, int, int, int); -FORCE_INLINE __m128i _mm_set_epi64x(int64_t, int64_t); -FORCE_INLINE __m128d _mm_set_pd(double, double); -FORCE_INLINE __m128i _mm_set1_epi32(int); -FORCE_INLINE __m128i _mm_setzero_si128(void); -// SSE4.1 -FORCE_INLINE __m128d _mm_ceil_pd(__m128d); -FORCE_INLINE __m128 _mm_ceil_ps(__m128); -FORCE_INLINE __m128d _mm_floor_pd(__m128d); -FORCE_INLINE __m128 _mm_floor_ps(__m128); -FORCE_INLINE __m128d _mm_round_pd(__m128d, int); -FORCE_INLINE __m128 _mm_round_ps(__m128, int); -// SSE4.2 -FORCE_INLINE uint32_t _mm_crc32_u8(uint32_t, uint8_t); - -/* Backwards compatibility for compilers with lack of specific type support */ - -// Older gcc does not define vld1q_u8_x4 type -#if defined(__GNUC__) && !defined(__clang__) && \ - ((__GNUC__ <= 13 && defined(__arm__)) || \ - (__GNUC__ == 10 && __GNUC_MINOR__ < 3 && defined(__aarch64__)) || \ - (__GNUC__ <= 9 && defined(__aarch64__))) -FORCE_INLINE uint8x16x4_t _sse2neon_vld1q_u8_x4(const uint8_t *p) -{ - uint8x16x4_t ret; - ret.val[0] = vld1q_u8(p + 0); - ret.val[1] = vld1q_u8(p + 16); - ret.val[2] = vld1q_u8(p + 32); - ret.val[3] = vld1q_u8(p + 48); - return ret; -} -#else -// Wraps vld1q_u8_x4 -FORCE_INLINE uint8x16x4_t _sse2neon_vld1q_u8_x4(const uint8_t *p) -{ - return vld1q_u8_x4(p); -} -#endif - -#if !defined(__aarch64__) && !defined(_M_ARM64) -/* emulate vaddv u8 variant */ -FORCE_INLINE uint8_t _sse2neon_vaddv_u8(uint8x8_t v8) -{ - const uint64x1_t v1 = vpaddl_u32(vpaddl_u16(vpaddl_u8(v8))); - return vget_lane_u8(vreinterpret_u8_u64(v1), 0); -} -#else -// Wraps vaddv_u8 -FORCE_INLINE uint8_t _sse2neon_vaddv_u8(uint8x8_t v8) -{ - return vaddv_u8(v8); -} -#endif - -#if !defined(__aarch64__) && !defined(_M_ARM64) -/* emulate vaddvq u8 variant */ -FORCE_INLINE uint8_t _sse2neon_vaddvq_u8(uint8x16_t a) -{ - uint8x8_t tmp = vpadd_u8(vget_low_u8(a), vget_high_u8(a)); - uint8_t res = 0; - for (int i = 0; i < 8; ++i) - res += tmp[i]; - return res; -} -#else -// Wraps vaddvq_u8 -FORCE_INLINE uint8_t _sse2neon_vaddvq_u8(uint8x16_t a) -{ - return vaddvq_u8(a); -} -#endif - -#if !defined(__aarch64__) && !defined(_M_ARM64) -/* emulate vaddvq u16 variant */ -FORCE_INLINE uint16_t _sse2neon_vaddvq_u16(uint16x8_t a) -{ - uint32x4_t m = vpaddlq_u16(a); - uint64x2_t n = vpaddlq_u32(m); - uint64x1_t o = vget_low_u64(n) + vget_high_u64(n); - - return vget_lane_u32((uint32x2_t) o, 0); -} -#else -// Wraps vaddvq_u16 -FORCE_INLINE uint16_t _sse2neon_vaddvq_u16(uint16x8_t a) -{ - return vaddvq_u16(a); -} -#endif - -/* Function Naming Conventions - * The naming convention of SSE intrinsics is straightforward. A generic SSE - * intrinsic function is given as follows: - * _mm__ - * - * The parts of this format are given as follows: - * 1. describes the operation performed by the intrinsic - * 2. identifies the data type of the function's primary arguments - * - * This last part, , is a little complicated. It identifies the - * content of the input values, and can be set to any of the following values: - * + ps - vectors contain floats (ps stands for packed single-precision) - * + pd - vectors contain doubles (pd stands for packed double-precision) - * + epi8/epi16/epi32/epi64 - vectors contain 8-bit/16-bit/32-bit/64-bit - * signed integers - * + epu8/epu16/epu32/epu64 - vectors contain 8-bit/16-bit/32-bit/64-bit - * unsigned integers - * + si128 - unspecified 128-bit vector or 256-bit vector - * + m128/m128i/m128d - identifies input vector types when they are different - * than the type of the returned vector - * - * For example, _mm_setzero_ps. The _mm implies that the function returns - * a 128-bit vector. The _ps at the end implies that the argument vectors - * contain floats. - * - * A complete example: Byte Shuffle - pshufb (_mm_shuffle_epi8) - * // Set packed 16-bit integers. 128 bits, 8 short, per 16 bits - * __m128i v_in = _mm_setr_epi16(1, 2, 3, 4, 5, 6, 7, 8); - * // Set packed 8-bit integers - * // 128 bits, 16 chars, per 8 bits - * __m128i v_perm = _mm_setr_epi8(1, 0, 2, 3, 8, 9, 10, 11, - * 4, 5, 12, 13, 6, 7, 14, 15); - * // Shuffle packed 8-bit integers - * __m128i v_out = _mm_shuffle_epi8(v_in, v_perm); // pshufb - */ - -/* Constants for use with _mm_prefetch. */ -enum _mm_hint { - _MM_HINT_NTA = 0, /* load data to L1 and L2 cache, mark it as NTA */ - _MM_HINT_T0 = 1, /* load data to L1 and L2 cache */ - _MM_HINT_T1 = 2, /* load data to L2 cache only */ - _MM_HINT_T2 = 3, /* load data to L2 cache only, mark it as NTA */ -}; - -// The bit field mapping to the FPCR(floating-point control register) -typedef struct { - uint16_t res0; - uint8_t res1 : 6; - uint8_t bit22 : 1; - uint8_t bit23 : 1; - uint8_t bit24 : 1; - uint8_t res2 : 7; -#if defined(__aarch64__) || defined(_M_ARM64) - uint32_t res3; -#endif -} fpcr_bitfield; - -// Takes the upper 64 bits of a and places it in the low end of the result -// Takes the lower 64 bits of b and places it into the high end of the result. -FORCE_INLINE __m128 _mm_shuffle_ps_1032(__m128 a, __m128 b) -{ - float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); - float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); - return vreinterpretq_m128_f32(vcombine_f32(a32, b10)); -} - -// takes the lower two 32-bit values from a and swaps them and places in high -// end of result takes the higher two 32 bit values from b and swaps them and -// places in low end of result. -FORCE_INLINE __m128 _mm_shuffle_ps_2301(__m128 a, __m128 b) -{ - float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); - float32x2_t b23 = vrev64_f32(vget_high_f32(vreinterpretq_f32_m128(b))); - return vreinterpretq_m128_f32(vcombine_f32(a01, b23)); -} - -FORCE_INLINE __m128 _mm_shuffle_ps_0321(__m128 a, __m128 b) -{ - float32x2_t a21 = vget_high_f32( - vextq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 3)); - float32x2_t b03 = vget_low_f32( - vextq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b), 3)); - return vreinterpretq_m128_f32(vcombine_f32(a21, b03)); -} - -FORCE_INLINE __m128 _mm_shuffle_ps_2103(__m128 a, __m128 b) -{ - float32x2_t a03 = vget_low_f32( - vextq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 3)); - float32x2_t b21 = vget_high_f32( - vextq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b), 3)); - return vreinterpretq_m128_f32(vcombine_f32(a03, b21)); -} - -FORCE_INLINE __m128 _mm_shuffle_ps_1010(__m128 a, __m128 b) -{ - float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); - float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); - return vreinterpretq_m128_f32(vcombine_f32(a10, b10)); -} - -FORCE_INLINE __m128 _mm_shuffle_ps_1001(__m128 a, __m128 b) -{ - float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); - float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); - return vreinterpretq_m128_f32(vcombine_f32(a01, b10)); -} - -FORCE_INLINE __m128 _mm_shuffle_ps_0101(__m128 a, __m128 b) -{ - float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); - float32x2_t b01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(b))); - return vreinterpretq_m128_f32(vcombine_f32(a01, b01)); -} - -// keeps the low 64 bits of b in the low and puts the high 64 bits of a in the -// high -FORCE_INLINE __m128 _mm_shuffle_ps_3210(__m128 a, __m128 b) -{ - float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); - float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); - return vreinterpretq_m128_f32(vcombine_f32(a10, b32)); -} - -FORCE_INLINE __m128 _mm_shuffle_ps_0011(__m128 a, __m128 b) -{ - float32x2_t a11 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(a)), 1); - float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); - return vreinterpretq_m128_f32(vcombine_f32(a11, b00)); -} - -FORCE_INLINE __m128 _mm_shuffle_ps_0022(__m128 a, __m128 b) -{ - float32x2_t a22 = - vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(a)), 0); - float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); - return vreinterpretq_m128_f32(vcombine_f32(a22, b00)); -} - -FORCE_INLINE __m128 _mm_shuffle_ps_2200(__m128 a, __m128 b) -{ - float32x2_t a00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(a)), 0); - float32x2_t b22 = - vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(b)), 0); - return vreinterpretq_m128_f32(vcombine_f32(a00, b22)); -} - -FORCE_INLINE __m128 _mm_shuffle_ps_3202(__m128 a, __m128 b) -{ - float32_t a0 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); - float32x2_t a22 = - vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(a)), 0); - float32x2_t a02 = vset_lane_f32(a0, a22, 1); /* TODO: use vzip ?*/ - float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); - return vreinterpretq_m128_f32(vcombine_f32(a02, b32)); -} - -FORCE_INLINE __m128 _mm_shuffle_ps_1133(__m128 a, __m128 b) -{ - float32x2_t a33 = - vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(a)), 1); - float32x2_t b11 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 1); - return vreinterpretq_m128_f32(vcombine_f32(a33, b11)); -} - -FORCE_INLINE __m128 _mm_shuffle_ps_2010(__m128 a, __m128 b) -{ - float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); - float32_t b2 = vgetq_lane_f32(vreinterpretq_f32_m128(b), 2); - float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); - float32x2_t b20 = vset_lane_f32(b2, b00, 1); - return vreinterpretq_m128_f32(vcombine_f32(a10, b20)); -} - -FORCE_INLINE __m128 _mm_shuffle_ps_2001(__m128 a, __m128 b) -{ - float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); - float32_t b2 = vgetq_lane_f32(b, 2); - float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); - float32x2_t b20 = vset_lane_f32(b2, b00, 1); - return vreinterpretq_m128_f32(vcombine_f32(a01, b20)); -} - -FORCE_INLINE __m128 _mm_shuffle_ps_2032(__m128 a, __m128 b) -{ - float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); - float32_t b2 = vgetq_lane_f32(b, 2); - float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); - float32x2_t b20 = vset_lane_f32(b2, b00, 1); - return vreinterpretq_m128_f32(vcombine_f32(a32, b20)); -} - -// For MSVC, we check only if it is ARM64, as every single ARM64 processor -// supported by WoA has crypto extensions. If this changes in the future, -// this can be verified via the runtime-only method of: -// IsProcessorFeaturePresent(PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE) -#if (defined(_M_ARM64) && !defined(__clang__)) || \ - (defined(__ARM_FEATURE_CRYPTO) && \ - (defined(__aarch64__) || __has_builtin(__builtin_arm_crypto_vmullp64))) -// Wraps vmull_p64 -FORCE_INLINE uint64x2_t _sse2neon_vmull_p64(uint64x1_t _a, uint64x1_t _b) -{ - poly64_t a = vget_lane_p64(vreinterpret_p64_u64(_a), 0); - poly64_t b = vget_lane_p64(vreinterpret_p64_u64(_b), 0); -#if defined(_MSC_VER) && !defined(__clang__) - __n64 a1 = {a}, b1 = {b}; - return vreinterpretq_u64_p128(vmull_p64(a1, b1)); -#else - return vreinterpretq_u64_p128(vmull_p64(a, b)); -#endif -} -#else // ARMv7 polyfill -// ARMv7/some A64 lacks vmull_p64, but it has vmull_p8. -// -// vmull_p8 calculates 8 8-bit->16-bit polynomial multiplies, but we need a -// 64-bit->128-bit polynomial multiply. -// -// It needs some work and is somewhat slow, but it is still faster than all -// known scalar methods. -// -// Algorithm adapted to C from -// https://www.workofard.com/2017/07/ghash-for-low-end-cores/, which is adapted -// from "Fast Software Polynomial Multiplication on ARM Processors Using the -// NEON Engine" by Danilo Camara, Conrado Gouvea, Julio Lopez and Ricardo Dahab -// (https://hal.inria.fr/hal-01506572) -static uint64x2_t _sse2neon_vmull_p64(uint64x1_t _a, uint64x1_t _b) -{ - poly8x8_t a = vreinterpret_p8_u64(_a); - poly8x8_t b = vreinterpret_p8_u64(_b); - - // Masks - uint8x16_t k48_32 = vcombine_u8(vcreate_u8(0x0000ffffffffffff), - vcreate_u8(0x00000000ffffffff)); - uint8x16_t k16_00 = vcombine_u8(vcreate_u8(0x000000000000ffff), - vcreate_u8(0x0000000000000000)); - - // Do the multiplies, rotating with vext to get all combinations - uint8x16_t d = vreinterpretq_u8_p16(vmull_p8(a, b)); // D = A0 * B0 - uint8x16_t e = - vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 1))); // E = A0 * B1 - uint8x16_t f = - vreinterpretq_u8_p16(vmull_p8(vext_p8(a, a, 1), b)); // F = A1 * B0 - uint8x16_t g = - vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 2))); // G = A0 * B2 - uint8x16_t h = - vreinterpretq_u8_p16(vmull_p8(vext_p8(a, a, 2), b)); // H = A2 * B0 - uint8x16_t i = - vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 3))); // I = A0 * B3 - uint8x16_t j = - vreinterpretq_u8_p16(vmull_p8(vext_p8(a, a, 3), b)); // J = A3 * B0 - uint8x16_t k = - vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 4))); // L = A0 * B4 - - // Add cross products - uint8x16_t l = veorq_u8(e, f); // L = E + F - uint8x16_t m = veorq_u8(g, h); // M = G + H - uint8x16_t n = veorq_u8(i, j); // N = I + J - - // Interleave. Using vzip1 and vzip2 prevents Clang from emitting TBL - // instructions. -#if defined(__aarch64__) - uint8x16_t lm_p0 = vreinterpretq_u8_u64( - vzip1q_u64(vreinterpretq_u64_u8(l), vreinterpretq_u64_u8(m))); - uint8x16_t lm_p1 = vreinterpretq_u8_u64( - vzip2q_u64(vreinterpretq_u64_u8(l), vreinterpretq_u64_u8(m))); - uint8x16_t nk_p0 = vreinterpretq_u8_u64( - vzip1q_u64(vreinterpretq_u64_u8(n), vreinterpretq_u64_u8(k))); - uint8x16_t nk_p1 = vreinterpretq_u8_u64( - vzip2q_u64(vreinterpretq_u64_u8(n), vreinterpretq_u64_u8(k))); -#else - uint8x16_t lm_p0 = vcombine_u8(vget_low_u8(l), vget_low_u8(m)); - uint8x16_t lm_p1 = vcombine_u8(vget_high_u8(l), vget_high_u8(m)); - uint8x16_t nk_p0 = vcombine_u8(vget_low_u8(n), vget_low_u8(k)); - uint8x16_t nk_p1 = vcombine_u8(vget_high_u8(n), vget_high_u8(k)); -#endif - // t0 = (L) (P0 + P1) << 8 - // t1 = (M) (P2 + P3) << 16 - uint8x16_t t0t1_tmp = veorq_u8(lm_p0, lm_p1); - uint8x16_t t0t1_h = vandq_u8(lm_p1, k48_32); - uint8x16_t t0t1_l = veorq_u8(t0t1_tmp, t0t1_h); - - // t2 = (N) (P4 + P5) << 24 - // t3 = (K) (P6 + P7) << 32 - uint8x16_t t2t3_tmp = veorq_u8(nk_p0, nk_p1); - uint8x16_t t2t3_h = vandq_u8(nk_p1, k16_00); - uint8x16_t t2t3_l = veorq_u8(t2t3_tmp, t2t3_h); - - // De-interleave -#if defined(__aarch64__) - uint8x16_t t0 = vreinterpretq_u8_u64( - vuzp1q_u64(vreinterpretq_u64_u8(t0t1_l), vreinterpretq_u64_u8(t0t1_h))); - uint8x16_t t1 = vreinterpretq_u8_u64( - vuzp2q_u64(vreinterpretq_u64_u8(t0t1_l), vreinterpretq_u64_u8(t0t1_h))); - uint8x16_t t2 = vreinterpretq_u8_u64( - vuzp1q_u64(vreinterpretq_u64_u8(t2t3_l), vreinterpretq_u64_u8(t2t3_h))); - uint8x16_t t3 = vreinterpretq_u8_u64( - vuzp2q_u64(vreinterpretq_u64_u8(t2t3_l), vreinterpretq_u64_u8(t2t3_h))); -#else - uint8x16_t t1 = vcombine_u8(vget_high_u8(t0t1_l), vget_high_u8(t0t1_h)); - uint8x16_t t0 = vcombine_u8(vget_low_u8(t0t1_l), vget_low_u8(t0t1_h)); - uint8x16_t t3 = vcombine_u8(vget_high_u8(t2t3_l), vget_high_u8(t2t3_h)); - uint8x16_t t2 = vcombine_u8(vget_low_u8(t2t3_l), vget_low_u8(t2t3_h)); -#endif - // Shift the cross products - uint8x16_t t0_shift = vextq_u8(t0, t0, 15); // t0 << 8 - uint8x16_t t1_shift = vextq_u8(t1, t1, 14); // t1 << 16 - uint8x16_t t2_shift = vextq_u8(t2, t2, 13); // t2 << 24 - uint8x16_t t3_shift = vextq_u8(t3, t3, 12); // t3 << 32 - - // Accumulate the products - uint8x16_t cross1 = veorq_u8(t0_shift, t1_shift); - uint8x16_t cross2 = veorq_u8(t2_shift, t3_shift); - uint8x16_t mix = veorq_u8(d, cross1); - uint8x16_t r = veorq_u8(mix, cross2); - return vreinterpretq_u64_u8(r); -} -#endif // ARMv7 polyfill - -// C equivalent: -// __m128i _mm_shuffle_epi32_default(__m128i a, -// __constrange(0, 255) int imm) { -// __m128i ret; -// ret[0] = a[imm & 0x3]; ret[1] = a[(imm >> 2) & 0x3]; -// ret[2] = a[(imm >> 4) & 0x03]; ret[3] = a[(imm >> 6) & 0x03]; -// return ret; -// } -#define _mm_shuffle_epi32_default(a, imm) \ - vreinterpretq_m128i_s32(vsetq_lane_s32( \ - vgetq_lane_s32(vreinterpretq_s32_m128i(a), ((imm) >> 6) & 0x3), \ - vsetq_lane_s32( \ - vgetq_lane_s32(vreinterpretq_s32_m128i(a), ((imm) >> 4) & 0x3), \ - vsetq_lane_s32(vgetq_lane_s32(vreinterpretq_s32_m128i(a), \ - ((imm) >> 2) & 0x3), \ - vmovq_n_s32(vgetq_lane_s32( \ - vreinterpretq_s32_m128i(a), (imm) & (0x3))), \ - 1), \ - 2), \ - 3)) - -// Takes the upper 64 bits of a and places it in the low end of the result -// Takes the lower 64 bits of a and places it into the high end of the result. -FORCE_INLINE __m128i _mm_shuffle_epi_1032(__m128i a) -{ - int32x2_t a32 = vget_high_s32(vreinterpretq_s32_m128i(a)); - int32x2_t a10 = vget_low_s32(vreinterpretq_s32_m128i(a)); - return vreinterpretq_m128i_s32(vcombine_s32(a32, a10)); -} - -// takes the lower two 32-bit values from a and swaps them and places in low end -// of result takes the higher two 32 bit values from a and swaps them and places -// in high end of result. -FORCE_INLINE __m128i _mm_shuffle_epi_2301(__m128i a) -{ - int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); - int32x2_t a23 = vrev64_s32(vget_high_s32(vreinterpretq_s32_m128i(a))); - return vreinterpretq_m128i_s32(vcombine_s32(a01, a23)); -} - -// rotates the least significant 32 bits into the most significant 32 bits, and -// shifts the rest down -FORCE_INLINE __m128i _mm_shuffle_epi_0321(__m128i a) -{ - return vreinterpretq_m128i_s32( - vextq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(a), 1)); -} - -// rotates the most significant 32 bits into the least significant 32 bits, and -// shifts the rest up -FORCE_INLINE __m128i _mm_shuffle_epi_2103(__m128i a) -{ - return vreinterpretq_m128i_s32( - vextq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(a), 3)); -} - -// gets the lower 64 bits of a, and places it in the upper 64 bits -// gets the lower 64 bits of a and places it in the lower 64 bits -FORCE_INLINE __m128i _mm_shuffle_epi_1010(__m128i a) -{ - int32x2_t a10 = vget_low_s32(vreinterpretq_s32_m128i(a)); - return vreinterpretq_m128i_s32(vcombine_s32(a10, a10)); -} - -// gets the lower 64 bits of a, swaps the 0 and 1 elements, and places it in the -// lower 64 bits gets the lower 64 bits of a, and places it in the upper 64 bits -FORCE_INLINE __m128i _mm_shuffle_epi_1001(__m128i a) -{ - int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); - int32x2_t a10 = vget_low_s32(vreinterpretq_s32_m128i(a)); - return vreinterpretq_m128i_s32(vcombine_s32(a01, a10)); -} - -// gets the lower 64 bits of a, swaps the 0 and 1 elements and places it in the -// upper 64 bits gets the lower 64 bits of a, swaps the 0 and 1 elements, and -// places it in the lower 64 bits -FORCE_INLINE __m128i _mm_shuffle_epi_0101(__m128i a) -{ - int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); - return vreinterpretq_m128i_s32(vcombine_s32(a01, a01)); -} - -FORCE_INLINE __m128i _mm_shuffle_epi_2211(__m128i a) -{ - int32x2_t a11 = vdup_lane_s32(vget_low_s32(vreinterpretq_s32_m128i(a)), 1); - int32x2_t a22 = vdup_lane_s32(vget_high_s32(vreinterpretq_s32_m128i(a)), 0); - return vreinterpretq_m128i_s32(vcombine_s32(a11, a22)); -} - -FORCE_INLINE __m128i _mm_shuffle_epi_0122(__m128i a) -{ - int32x2_t a22 = vdup_lane_s32(vget_high_s32(vreinterpretq_s32_m128i(a)), 0); - int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); - return vreinterpretq_m128i_s32(vcombine_s32(a22, a01)); -} - -FORCE_INLINE __m128i _mm_shuffle_epi_3332(__m128i a) -{ - int32x2_t a32 = vget_high_s32(vreinterpretq_s32_m128i(a)); - int32x2_t a33 = vdup_lane_s32(vget_high_s32(vreinterpretq_s32_m128i(a)), 1); - return vreinterpretq_m128i_s32(vcombine_s32(a32, a33)); -} - -#if defined(__aarch64__) || defined(_M_ARM64) -#define _mm_shuffle_epi32_splat(a, imm) \ - vreinterpretq_m128i_s32(vdupq_laneq_s32(vreinterpretq_s32_m128i(a), (imm))) -#else -#define _mm_shuffle_epi32_splat(a, imm) \ - vreinterpretq_m128i_s32( \ - vdupq_n_s32(vgetq_lane_s32(vreinterpretq_s32_m128i(a), (imm)))) -#endif - -// NEON does not support a general purpose permute intrinsic. -// Shuffle single-precision (32-bit) floating-point elements in a using the -// control in imm8, and store the results in dst. -// -// C equivalent: -// __m128 _mm_shuffle_ps_default(__m128 a, __m128 b, -// __constrange(0, 255) int imm) { -// __m128 ret; -// ret[0] = a[imm & 0x3]; ret[1] = a[(imm >> 2) & 0x3]; -// ret[2] = b[(imm >> 4) & 0x03]; ret[3] = b[(imm >> 6) & 0x03]; -// return ret; -// } -// -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_ps -#define _mm_shuffle_ps_default(a, b, imm) \ - vreinterpretq_m128_f32(vsetq_lane_f32( \ - vgetq_lane_f32(vreinterpretq_f32_m128(b), ((imm) >> 6) & 0x3), \ - vsetq_lane_f32( \ - vgetq_lane_f32(vreinterpretq_f32_m128(b), ((imm) >> 4) & 0x3), \ - vsetq_lane_f32( \ - vgetq_lane_f32(vreinterpretq_f32_m128(a), ((imm) >> 2) & 0x3), \ - vmovq_n_f32( \ - vgetq_lane_f32(vreinterpretq_f32_m128(a), (imm) & (0x3))), \ - 1), \ - 2), \ - 3)) - -// Shuffle 16-bit integers in the low 64 bits of a using the control in imm8. -// Store the results in the low 64 bits of dst, with the high 64 bits being -// copied from a to dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shufflelo_epi16 -#define _mm_shufflelo_epi16_function(a, imm) \ - _sse2neon_define1( \ - __m128i, a, int16x8_t ret = vreinterpretq_s16_m128i(_a); \ - int16x4_t lowBits = vget_low_s16(ret); \ - ret = vsetq_lane_s16(vget_lane_s16(lowBits, (imm) & (0x3)), ret, 0); \ - ret = vsetq_lane_s16(vget_lane_s16(lowBits, ((imm) >> 2) & 0x3), ret, \ - 1); \ - ret = vsetq_lane_s16(vget_lane_s16(lowBits, ((imm) >> 4) & 0x3), ret, \ - 2); \ - ret = vsetq_lane_s16(vget_lane_s16(lowBits, ((imm) >> 6) & 0x3), ret, \ - 3); \ - _sse2neon_return(vreinterpretq_m128i_s16(ret));) - -// Shuffle 16-bit integers in the high 64 bits of a using the control in imm8. -// Store the results in the high 64 bits of dst, with the low 64 bits being -// copied from a to dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shufflehi_epi16 -#define _mm_shufflehi_epi16_function(a, imm) \ - _sse2neon_define1( \ - __m128i, a, int16x8_t ret = vreinterpretq_s16_m128i(_a); \ - int16x4_t highBits = vget_high_s16(ret); \ - ret = vsetq_lane_s16(vget_lane_s16(highBits, (imm) & (0x3)), ret, 4); \ - ret = vsetq_lane_s16(vget_lane_s16(highBits, ((imm) >> 2) & 0x3), ret, \ - 5); \ - ret = vsetq_lane_s16(vget_lane_s16(highBits, ((imm) >> 4) & 0x3), ret, \ - 6); \ - ret = vsetq_lane_s16(vget_lane_s16(highBits, ((imm) >> 6) & 0x3), ret, \ - 7); \ - _sse2neon_return(vreinterpretq_m128i_s16(ret));) - -/* MMX */ - -//_mm_empty is a no-op on arm -FORCE_INLINE void _mm_empty(void) {} - -/* SSE */ - -// Add packed single-precision (32-bit) floating-point elements in a and b, and -// store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_ps -FORCE_INLINE __m128 _mm_add_ps(__m128 a, __m128 b) -{ - return vreinterpretq_m128_f32( - vaddq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); -} - -// Add the lower single-precision (32-bit) floating-point element in a and b, -// store the result in the lower element of dst, and copy the upper 3 packed -// elements from a to the upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_ss -FORCE_INLINE __m128 _mm_add_ss(__m128 a, __m128 b) -{ - float32_t b0 = vgetq_lane_f32(vreinterpretq_f32_m128(b), 0); - float32x4_t value = vsetq_lane_f32(b0, vdupq_n_f32(0), 0); - // the upper values in the result must be the remnants of . - return vreinterpretq_m128_f32(vaddq_f32(a, value)); -} - -// Compute the bitwise AND of packed single-precision (32-bit) floating-point -// elements in a and b, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_and_ps -FORCE_INLINE __m128 _mm_and_ps(__m128 a, __m128 b) -{ - return vreinterpretq_m128_s32( - vandq_s32(vreinterpretq_s32_m128(a), vreinterpretq_s32_m128(b))); -} - -// Compute the bitwise NOT of packed single-precision (32-bit) floating-point -// elements in a and then AND with b, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_andnot_ps -FORCE_INLINE __m128 _mm_andnot_ps(__m128 a, __m128 b) -{ - return vreinterpretq_m128_s32( - vbicq_s32(vreinterpretq_s32_m128(b), - vreinterpretq_s32_m128(a))); // *NOTE* argument swap -} - -// Average packed unsigned 16-bit integers in a and b, and store the results in -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_avg_pu16 -FORCE_INLINE __m64 _mm_avg_pu16(__m64 a, __m64 b) -{ - return vreinterpret_m64_u16( - vrhadd_u16(vreinterpret_u16_m64(a), vreinterpret_u16_m64(b))); -} - -// Average packed unsigned 8-bit integers in a and b, and store the results in -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_avg_pu8 -FORCE_INLINE __m64 _mm_avg_pu8(__m64 a, __m64 b) -{ - return vreinterpret_m64_u8( - vrhadd_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))); -} - -// Compare packed single-precision (32-bit) floating-point elements in a and b -// for equality, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_ps -FORCE_INLINE __m128 _mm_cmpeq_ps(__m128 a, __m128 b) -{ - return vreinterpretq_m128_u32( - vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); -} - -// Compare the lower single-precision (32-bit) floating-point elements in a and -// b for equality, store the result in the lower element of dst, and copy the -// upper 3 packed elements from a to the upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_ss -FORCE_INLINE __m128 _mm_cmpeq_ss(__m128 a, __m128 b) -{ - return _mm_move_ss(a, _mm_cmpeq_ps(a, b)); -} - -// Compare packed single-precision (32-bit) floating-point elements in a and b -// for greater-than-or-equal, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpge_ps -FORCE_INLINE __m128 _mm_cmpge_ps(__m128 a, __m128 b) -{ - return vreinterpretq_m128_u32( - vcgeq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); -} - -// Compare the lower single-precision (32-bit) floating-point elements in a and -// b for greater-than-or-equal, store the result in the lower element of dst, -// and copy the upper 3 packed elements from a to the upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpge_ss -FORCE_INLINE __m128 _mm_cmpge_ss(__m128 a, __m128 b) -{ - return _mm_move_ss(a, _mm_cmpge_ps(a, b)); -} - -// Compare packed single-precision (32-bit) floating-point elements in a and b -// for greater-than, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_ps -FORCE_INLINE __m128 _mm_cmpgt_ps(__m128 a, __m128 b) -{ - return vreinterpretq_m128_u32( - vcgtq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); -} - -// Compare the lower single-precision (32-bit) floating-point elements in a and -// b for greater-than, store the result in the lower element of dst, and copy -// the upper 3 packed elements from a to the upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_ss -FORCE_INLINE __m128 _mm_cmpgt_ss(__m128 a, __m128 b) -{ - return _mm_move_ss(a, _mm_cmpgt_ps(a, b)); -} - -// Compare packed single-precision (32-bit) floating-point elements in a and b -// for less-than-or-equal, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmple_ps -FORCE_INLINE __m128 _mm_cmple_ps(__m128 a, __m128 b) -{ - return vreinterpretq_m128_u32( - vcleq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); -} - -// Compare the lower single-precision (32-bit) floating-point elements in a and -// b for less-than-or-equal, store the result in the lower element of dst, and -// copy the upper 3 packed elements from a to the upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmple_ss -FORCE_INLINE __m128 _mm_cmple_ss(__m128 a, __m128 b) -{ - return _mm_move_ss(a, _mm_cmple_ps(a, b)); -} - -// Compare packed single-precision (32-bit) floating-point elements in a and b -// for less-than, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_ps -FORCE_INLINE __m128 _mm_cmplt_ps(__m128 a, __m128 b) -{ - return vreinterpretq_m128_u32( - vcltq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); -} - -// Compare the lower single-precision (32-bit) floating-point elements in a and -// b for less-than, store the result in the lower element of dst, and copy the -// upper 3 packed elements from a to the upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_ss -FORCE_INLINE __m128 _mm_cmplt_ss(__m128 a, __m128 b) -{ - return _mm_move_ss(a, _mm_cmplt_ps(a, b)); -} - -// Compare packed single-precision (32-bit) floating-point elements in a and b -// for not-equal, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpneq_ps -FORCE_INLINE __m128 _mm_cmpneq_ps(__m128 a, __m128 b) -{ - return vreinterpretq_m128_u32(vmvnq_u32( - vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); -} - -// Compare the lower single-precision (32-bit) floating-point elements in a and -// b for not-equal, store the result in the lower element of dst, and copy the -// upper 3 packed elements from a to the upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpneq_ss -FORCE_INLINE __m128 _mm_cmpneq_ss(__m128 a, __m128 b) -{ - return _mm_move_ss(a, _mm_cmpneq_ps(a, b)); -} - -// Compare packed single-precision (32-bit) floating-point elements in a and b -// for not-greater-than-or-equal, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnge_ps -FORCE_INLINE __m128 _mm_cmpnge_ps(__m128 a, __m128 b) -{ - return vreinterpretq_m128_u32(vmvnq_u32( - vcgeq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); -} - -// Compare the lower single-precision (32-bit) floating-point elements in a and -// b for not-greater-than-or-equal, store the result in the lower element of -// dst, and copy the upper 3 packed elements from a to the upper elements of -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnge_ss -FORCE_INLINE __m128 _mm_cmpnge_ss(__m128 a, __m128 b) -{ - return _mm_move_ss(a, _mm_cmpnge_ps(a, b)); -} - -// Compare packed single-precision (32-bit) floating-point elements in a and b -// for not-greater-than, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpngt_ps -FORCE_INLINE __m128 _mm_cmpngt_ps(__m128 a, __m128 b) -{ - return vreinterpretq_m128_u32(vmvnq_u32( - vcgtq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); -} - -// Compare the lower single-precision (32-bit) floating-point elements in a and -// b for not-greater-than, store the result in the lower element of dst, and -// copy the upper 3 packed elements from a to the upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpngt_ss -FORCE_INLINE __m128 _mm_cmpngt_ss(__m128 a, __m128 b) -{ - return _mm_move_ss(a, _mm_cmpngt_ps(a, b)); -} - -// Compare packed single-precision (32-bit) floating-point elements in a and b -// for not-less-than-or-equal, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnle_ps -FORCE_INLINE __m128 _mm_cmpnle_ps(__m128 a, __m128 b) -{ - return vreinterpretq_m128_u32(vmvnq_u32( - vcleq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); -} - -// Compare the lower single-precision (32-bit) floating-point elements in a and -// b for not-less-than-or-equal, store the result in the lower element of dst, -// and copy the upper 3 packed elements from a to the upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnle_ss -FORCE_INLINE __m128 _mm_cmpnle_ss(__m128 a, __m128 b) -{ - return _mm_move_ss(a, _mm_cmpnle_ps(a, b)); -} - -// Compare packed single-precision (32-bit) floating-point elements in a and b -// for not-less-than, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnlt_ps -FORCE_INLINE __m128 _mm_cmpnlt_ps(__m128 a, __m128 b) -{ - return vreinterpretq_m128_u32(vmvnq_u32( - vcltq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); -} - -// Compare the lower single-precision (32-bit) floating-point elements in a and -// b for not-less-than, store the result in the lower element of dst, and copy -// the upper 3 packed elements from a to the upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnlt_ss -FORCE_INLINE __m128 _mm_cmpnlt_ss(__m128 a, __m128 b) -{ - return _mm_move_ss(a, _mm_cmpnlt_ps(a, b)); -} - -// Compare packed single-precision (32-bit) floating-point elements in a and b -// to see if neither is NaN, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpord_ps -// -// See also: -// http://stackoverflow.com/questions/8627331/what-does-ordered-unordered-comparison-mean -// http://stackoverflow.com/questions/29349621/neon-isnanval-intrinsics -FORCE_INLINE __m128 _mm_cmpord_ps(__m128 a, __m128 b) -{ - // Note: NEON does not have ordered compare builtin - // Need to compare a eq a and b eq b to check for NaN - // Do AND of results to get final - uint32x4_t ceqaa = - vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); - uint32x4_t ceqbb = - vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); - return vreinterpretq_m128_u32(vandq_u32(ceqaa, ceqbb)); -} - -// Compare the lower single-precision (32-bit) floating-point elements in a and -// b to see if neither is NaN, store the result in the lower element of dst, and -// copy the upper 3 packed elements from a to the upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpord_ss -FORCE_INLINE __m128 _mm_cmpord_ss(__m128 a, __m128 b) -{ - return _mm_move_ss(a, _mm_cmpord_ps(a, b)); -} - -// Compare packed single-precision (32-bit) floating-point elements in a and b -// to see if either is NaN, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpunord_ps -FORCE_INLINE __m128 _mm_cmpunord_ps(__m128 a, __m128 b) -{ - uint32x4_t f32a = - vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); - uint32x4_t f32b = - vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); - return vreinterpretq_m128_u32(vmvnq_u32(vandq_u32(f32a, f32b))); -} - -// Compare the lower single-precision (32-bit) floating-point elements in a and -// b to see if either is NaN, store the result in the lower element of dst, and -// copy the upper 3 packed elements from a to the upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpunord_ss -FORCE_INLINE __m128 _mm_cmpunord_ss(__m128 a, __m128 b) -{ - return _mm_move_ss(a, _mm_cmpunord_ps(a, b)); -} - -// Compare the lower single-precision (32-bit) floating-point element in a and b -// for equality, and return the boolean result (0 or 1). -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comieq_ss -FORCE_INLINE int _mm_comieq_ss(__m128 a, __m128 b) -{ - uint32x4_t a_eq_b = - vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); - return vgetq_lane_u32(a_eq_b, 0) & 0x1; -} - -// Compare the lower single-precision (32-bit) floating-point element in a and b -// for greater-than-or-equal, and return the boolean result (0 or 1). -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comige_ss -FORCE_INLINE int _mm_comige_ss(__m128 a, __m128 b) -{ - uint32x4_t a_ge_b = - vcgeq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); - return vgetq_lane_u32(a_ge_b, 0) & 0x1; -} - -// Compare the lower single-precision (32-bit) floating-point element in a and b -// for greater-than, and return the boolean result (0 or 1). -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comigt_ss -FORCE_INLINE int _mm_comigt_ss(__m128 a, __m128 b) -{ - uint32x4_t a_gt_b = - vcgtq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); - return vgetq_lane_u32(a_gt_b, 0) & 0x1; -} - -// Compare the lower single-precision (32-bit) floating-point element in a and b -// for less-than-or-equal, and return the boolean result (0 or 1). -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comile_ss -FORCE_INLINE int _mm_comile_ss(__m128 a, __m128 b) -{ - uint32x4_t a_le_b = - vcleq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); - return vgetq_lane_u32(a_le_b, 0) & 0x1; -} - -// Compare the lower single-precision (32-bit) floating-point element in a and b -// for less-than, and return the boolean result (0 or 1). -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comilt_ss -FORCE_INLINE int _mm_comilt_ss(__m128 a, __m128 b) -{ - uint32x4_t a_lt_b = - vcltq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); - return vgetq_lane_u32(a_lt_b, 0) & 0x1; -} - -// Compare the lower single-precision (32-bit) floating-point element in a and b -// for not-equal, and return the boolean result (0 or 1). -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comineq_ss -FORCE_INLINE int _mm_comineq_ss(__m128 a, __m128 b) -{ - return !_mm_comieq_ss(a, b); -} - -// Convert packed signed 32-bit integers in b to packed single-precision -// (32-bit) floating-point elements, store the results in the lower 2 elements -// of dst, and copy the upper 2 packed elements from a to the upper elements of -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvt_pi2ps -FORCE_INLINE __m128 _mm_cvt_pi2ps(__m128 a, __m64 b) -{ - return vreinterpretq_m128_f32( - vcombine_f32(vcvt_f32_s32(vreinterpret_s32_m64(b)), - vget_high_f32(vreinterpretq_f32_m128(a)))); -} - -// Convert packed single-precision (32-bit) floating-point elements in a to -// packed 32-bit integers, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvt_ps2pi -FORCE_INLINE __m64 _mm_cvt_ps2pi(__m128 a) -{ -#if (defined(__aarch64__) || defined(_M_ARM64)) || \ - defined(__ARM_FEATURE_DIRECTED_ROUNDING) - return vreinterpret_m64_s32( - vget_low_s32(vcvtnq_s32_f32(vrndiq_f32(vreinterpretq_f32_m128(a))))); -#else - return vreinterpret_m64_s32(vcvt_s32_f32(vget_low_f32( - vreinterpretq_f32_m128(_mm_round_ps(a, _MM_FROUND_CUR_DIRECTION))))); -#endif -} - -// Convert the signed 32-bit integer b to a single-precision (32-bit) -// floating-point element, store the result in the lower element of dst, and -// copy the upper 3 packed elements from a to the upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvt_si2ss -FORCE_INLINE __m128 _mm_cvt_si2ss(__m128 a, int b) -{ - return vreinterpretq_m128_f32( - vsetq_lane_f32((float) b, vreinterpretq_f32_m128(a), 0)); -} - -// Convert the lower single-precision (32-bit) floating-point element in a to a -// 32-bit integer, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvt_ss2si -FORCE_INLINE int _mm_cvt_ss2si(__m128 a) -{ -#if (defined(__aarch64__) || defined(_M_ARM64)) || \ - defined(__ARM_FEATURE_DIRECTED_ROUNDING) - return vgetq_lane_s32(vcvtnq_s32_f32(vrndiq_f32(vreinterpretq_f32_m128(a))), - 0); -#else - float32_t data = vgetq_lane_f32( - vreinterpretq_f32_m128(_mm_round_ps(a, _MM_FROUND_CUR_DIRECTION)), 0); - return (int32_t) data; -#endif -} - -// Convert packed 16-bit integers in a to packed single-precision (32-bit) -// floating-point elements, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpi16_ps -FORCE_INLINE __m128 _mm_cvtpi16_ps(__m64 a) -{ - return vreinterpretq_m128_f32( - vcvtq_f32_s32(vmovl_s16(vreinterpret_s16_m64(a)))); -} - -// Convert packed 32-bit integers in b to packed single-precision (32-bit) -// floating-point elements, store the results in the lower 2 elements of dst, -// and copy the upper 2 packed elements from a to the upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpi32_ps -FORCE_INLINE __m128 _mm_cvtpi32_ps(__m128 a, __m64 b) -{ - return vreinterpretq_m128_f32( - vcombine_f32(vcvt_f32_s32(vreinterpret_s32_m64(b)), - vget_high_f32(vreinterpretq_f32_m128(a)))); -} - -// Convert packed signed 32-bit integers in a to packed single-precision -// (32-bit) floating-point elements, store the results in the lower 2 elements -// of dst, then convert the packed signed 32-bit integers in b to -// single-precision (32-bit) floating-point element, and store the results in -// the upper 2 elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpi32x2_ps -FORCE_INLINE __m128 _mm_cvtpi32x2_ps(__m64 a, __m64 b) -{ - return vreinterpretq_m128_f32(vcvtq_f32_s32( - vcombine_s32(vreinterpret_s32_m64(a), vreinterpret_s32_m64(b)))); -} - -// Convert the lower packed 8-bit integers in a to packed single-precision -// (32-bit) floating-point elements, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpi8_ps -FORCE_INLINE __m128 _mm_cvtpi8_ps(__m64 a) -{ - return vreinterpretq_m128_f32(vcvtq_f32_s32( - vmovl_s16(vget_low_s16(vmovl_s8(vreinterpret_s8_m64(a)))))); -} - -// Convert packed single-precision (32-bit) floating-point elements in a to -// packed 16-bit integers, and store the results in dst. Note: this intrinsic -// will generate 0x7FFF, rather than 0x8000, for input values between 0x7FFF and -// 0x7FFFFFFF. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtps_pi16 -FORCE_INLINE __m64 _mm_cvtps_pi16(__m128 a) -{ - return vreinterpret_m64_s16( - vqmovn_s32(vreinterpretq_s32_m128i(_mm_cvtps_epi32(a)))); -} - -// Convert packed single-precision (32-bit) floating-point elements in a to -// packed 32-bit integers, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtps_pi32 -#define _mm_cvtps_pi32(a) _mm_cvt_ps2pi(a) - -// Convert packed single-precision (32-bit) floating-point elements in a to -// packed 8-bit integers, and store the results in lower 4 elements of dst. -// Note: this intrinsic will generate 0x7F, rather than 0x80, for input values -// between 0x7F and 0x7FFFFFFF. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtps_pi8 -FORCE_INLINE __m64 _mm_cvtps_pi8(__m128 a) -{ - return vreinterpret_m64_s8(vqmovn_s16( - vcombine_s16(vreinterpret_s16_m64(_mm_cvtps_pi16(a)), vdup_n_s16(0)))); -} - -// Convert packed unsigned 16-bit integers in a to packed single-precision -// (32-bit) floating-point elements, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpu16_ps -FORCE_INLINE __m128 _mm_cvtpu16_ps(__m64 a) -{ - return vreinterpretq_m128_f32( - vcvtq_f32_u32(vmovl_u16(vreinterpret_u16_m64(a)))); -} - -// Convert the lower packed unsigned 8-bit integers in a to packed -// single-precision (32-bit) floating-point elements, and store the results in -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpu8_ps -FORCE_INLINE __m128 _mm_cvtpu8_ps(__m64 a) -{ - return vreinterpretq_m128_f32(vcvtq_f32_u32( - vmovl_u16(vget_low_u16(vmovl_u8(vreinterpret_u8_m64(a)))))); -} - -// Convert the signed 32-bit integer b to a single-precision (32-bit) -// floating-point element, store the result in the lower element of dst, and -// copy the upper 3 packed elements from a to the upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi32_ss -#define _mm_cvtsi32_ss(a, b) _mm_cvt_si2ss(a, b) - -// Convert the signed 64-bit integer b to a single-precision (32-bit) -// floating-point element, store the result in the lower element of dst, and -// copy the upper 3 packed elements from a to the upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64_ss -FORCE_INLINE __m128 _mm_cvtsi64_ss(__m128 a, int64_t b) -{ - return vreinterpretq_m128_f32( - vsetq_lane_f32((float) b, vreinterpretq_f32_m128(a), 0)); -} - -// Copy the lower single-precision (32-bit) floating-point element of a to dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtss_f32 -FORCE_INLINE float _mm_cvtss_f32(__m128 a) -{ - return vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); -} - -// Convert the lower single-precision (32-bit) floating-point element in a to a -// 32-bit integer, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtss_si32 -#define _mm_cvtss_si32(a) _mm_cvt_ss2si(a) - -// Convert the lower single-precision (32-bit) floating-point element in a to a -// 64-bit integer, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtss_si64 -FORCE_INLINE int64_t _mm_cvtss_si64(__m128 a) -{ -#if (defined(__aarch64__) || defined(_M_ARM64)) || \ - defined(__ARM_FEATURE_DIRECTED_ROUNDING) - return (int64_t) vgetq_lane_f32(vrndiq_f32(vreinterpretq_f32_m128(a)), 0); -#else - float32_t data = vgetq_lane_f32( - vreinterpretq_f32_m128(_mm_round_ps(a, _MM_FROUND_CUR_DIRECTION)), 0); - return (int64_t) data; -#endif -} - -// Convert packed single-precision (32-bit) floating-point elements in a to -// packed 32-bit integers with truncation, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtt_ps2pi -FORCE_INLINE __m64 _mm_cvtt_ps2pi(__m128 a) -{ - return vreinterpret_m64_s32( - vget_low_s32(vcvtq_s32_f32(vreinterpretq_f32_m128(a)))); -} - -// Convert the lower single-precision (32-bit) floating-point element in a to a -// 32-bit integer with truncation, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtt_ss2si -FORCE_INLINE int _mm_cvtt_ss2si(__m128 a) -{ - return vgetq_lane_s32(vcvtq_s32_f32(vreinterpretq_f32_m128(a)), 0); -} - -// Convert packed single-precision (32-bit) floating-point elements in a to -// packed 32-bit integers with truncation, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttps_pi32 -#define _mm_cvttps_pi32(a) _mm_cvtt_ps2pi(a) - -// Convert the lower single-precision (32-bit) floating-point element in a to a -// 32-bit integer with truncation, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttss_si32 -#define _mm_cvttss_si32(a) _mm_cvtt_ss2si(a) - -// Convert the lower single-precision (32-bit) floating-point element in a to a -// 64-bit integer with truncation, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttss_si64 -FORCE_INLINE int64_t _mm_cvttss_si64(__m128 a) -{ - return (int64_t) vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); -} - -// Divide packed single-precision (32-bit) floating-point elements in a by -// packed elements in b, and store the results in dst. -// Due to ARMv7-A NEON's lack of a precise division intrinsic, we implement -// division by multiplying a by b's reciprocal before using the Newton-Raphson -// method to approximate the results. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_div_ps -FORCE_INLINE __m128 _mm_div_ps(__m128 a, __m128 b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128_f32( - vdivq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); -#else - float32x4_t recip = vrecpeq_f32(vreinterpretq_f32_m128(b)); - recip = vmulq_f32(recip, vrecpsq_f32(recip, vreinterpretq_f32_m128(b))); - // Additional Netwon-Raphson iteration for accuracy - recip = vmulq_f32(recip, vrecpsq_f32(recip, vreinterpretq_f32_m128(b))); - return vreinterpretq_m128_f32(vmulq_f32(vreinterpretq_f32_m128(a), recip)); -#endif -} - -// Divide the lower single-precision (32-bit) floating-point element in a by the -// lower single-precision (32-bit) floating-point element in b, store the result -// in the lower element of dst, and copy the upper 3 packed elements from a to -// the upper elements of dst. -// Warning: ARMv7-A does not produce the same result compared to Intel and not -// IEEE-compliant. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_div_ss -FORCE_INLINE __m128 _mm_div_ss(__m128 a, __m128 b) -{ - float32_t value = - vgetq_lane_f32(vreinterpretq_f32_m128(_mm_div_ps(a, b)), 0); - return vreinterpretq_m128_f32( - vsetq_lane_f32(value, vreinterpretq_f32_m128(a), 0)); -} - -// Extract a 16-bit integer from a, selected with imm8, and store the result in -// the lower element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_pi16 -#define _mm_extract_pi16(a, imm) \ - (int32_t) vget_lane_u16(vreinterpret_u16_m64(a), (imm)) - -// Free aligned memory that was allocated with _mm_malloc. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_free -#if !defined(SSE2NEON_ALLOC_DEFINED) -FORCE_INLINE void _mm_free(void *addr) -{ -#if defined(_WIN32) - _aligned_free(addr); -#else - free(addr); -#endif -} -#endif - -FORCE_INLINE uint64_t _sse2neon_get_fpcr(void) -{ - uint64_t value; -#if defined(_MSC_VER) && !defined(__clang__) - value = _ReadStatusReg(ARM64_FPCR); -#else - __asm__ __volatile__("mrs %0, FPCR" : "=r"(value)); /* read */ -#endif - return value; -} - -FORCE_INLINE void _sse2neon_set_fpcr(uint64_t value) -{ -#if defined(_MSC_VER) && !defined(__clang__) - _WriteStatusReg(ARM64_FPCR, value); -#else - __asm__ __volatile__("msr FPCR, %0" ::"r"(value)); /* write */ -#endif -} - -// Macro: Get the flush zero bits from the MXCSR control and status register. -// The flush zero may contain any of the following flags: _MM_FLUSH_ZERO_ON or -// _MM_FLUSH_ZERO_OFF -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_MM_GET_FLUSH_ZERO_MODE -FORCE_INLINE unsigned int _sse2neon_mm_get_flush_zero_mode(void) -{ - union { - fpcr_bitfield field; -#if defined(__aarch64__) || defined(_M_ARM64) - uint64_t value; -#else - uint32_t value; -#endif - } r; - -#if defined(__aarch64__) || defined(_M_ARM64) - r.value = _sse2neon_get_fpcr(); -#else - __asm__ __volatile__("vmrs %0, FPSCR" : "=r"(r.value)); /* read */ -#endif - - return r.field.bit24 ? _MM_FLUSH_ZERO_ON : _MM_FLUSH_ZERO_OFF; -} - -// Macro: Get the rounding mode bits from the MXCSR control and status register. -// The rounding mode may contain any of the following flags: _MM_ROUND_NEAREST, -// _MM_ROUND_DOWN, _MM_ROUND_UP, _MM_ROUND_TOWARD_ZERO -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_MM_GET_ROUNDING_MODE -FORCE_INLINE unsigned int _MM_GET_ROUNDING_MODE(void) -{ - switch (fegetround()) { - case FE_TONEAREST: - return _MM_ROUND_NEAREST; - case FE_DOWNWARD: - return _MM_ROUND_DOWN; - case FE_UPWARD: - return _MM_ROUND_UP; - case FE_TOWARDZERO: - return _MM_ROUND_TOWARD_ZERO; - default: - // fegetround() must return _MM_ROUND_NEAREST, _MM_ROUND_DOWN, - // _MM_ROUND_UP, _MM_ROUND_TOWARD_ZERO on success. all the other error - // cases we treat them as FE_TOWARDZERO (truncate). - return _MM_ROUND_TOWARD_ZERO; - } -} - -// Copy a to dst, and insert the 16-bit integer i into dst at the location -// specified by imm8. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_insert_pi16 -#define _mm_insert_pi16(a, b, imm) \ - vreinterpret_m64_s16(vset_lane_s16((b), vreinterpret_s16_m64(a), (imm))) - -// Load 128-bits (composed of 4 packed single-precision (32-bit) floating-point -// elements) from memory into dst. mem_addr must be aligned on a 16-byte -// boundary or a general-protection exception may be generated. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_ps -FORCE_INLINE __m128 _mm_load_ps(const float *p) -{ - return vreinterpretq_m128_f32(vld1q_f32(p)); -} - -// Load a single-precision (32-bit) floating-point element from memory into all -// elements of dst. -// -// dst[31:0] := MEM[mem_addr+31:mem_addr] -// dst[63:32] := MEM[mem_addr+31:mem_addr] -// dst[95:64] := MEM[mem_addr+31:mem_addr] -// dst[127:96] := MEM[mem_addr+31:mem_addr] -// -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_ps1 -#define _mm_load_ps1 _mm_load1_ps - -// Load a single-precision (32-bit) floating-point element from memory into the -// lower of dst, and zero the upper 3 elements. mem_addr does not need to be -// aligned on any particular boundary. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_ss -FORCE_INLINE __m128 _mm_load_ss(const float *p) -{ - return vreinterpretq_m128_f32(vsetq_lane_f32(*p, vdupq_n_f32(0), 0)); -} - -// Load a single-precision (32-bit) floating-point element from memory into all -// elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load1_ps -FORCE_INLINE __m128 _mm_load1_ps(const float *p) -{ - return vreinterpretq_m128_f32(vld1q_dup_f32(p)); -} - -// Load 2 single-precision (32-bit) floating-point elements from memory into the -// upper 2 elements of dst, and copy the lower 2 elements from a to dst. -// mem_addr does not need to be aligned on any particular boundary. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadh_pi -FORCE_INLINE __m128 _mm_loadh_pi(__m128 a, __m64 const *p) -{ - return vreinterpretq_m128_f32( - vcombine_f32(vget_low_f32(a), vld1_f32((const float32_t *) p))); -} - -// Load 2 single-precision (32-bit) floating-point elements from memory into the -// lower 2 elements of dst, and copy the upper 2 elements from a to dst. -// mem_addr does not need to be aligned on any particular boundary. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadl_pi -FORCE_INLINE __m128 _mm_loadl_pi(__m128 a, __m64 const *p) -{ - return vreinterpretq_m128_f32( - vcombine_f32(vld1_f32((const float32_t *) p), vget_high_f32(a))); -} - -// Load 4 single-precision (32-bit) floating-point elements from memory into dst -// in reverse order. mem_addr must be aligned on a 16-byte boundary or a -// general-protection exception may be generated. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadr_ps -FORCE_INLINE __m128 _mm_loadr_ps(const float *p) -{ - float32x4_t v = vrev64q_f32(vld1q_f32(p)); - return vreinterpretq_m128_f32(vextq_f32(v, v, 2)); -} - -// Load 128-bits (composed of 4 packed single-precision (32-bit) floating-point -// elements) from memory into dst. mem_addr does not need to be aligned on any -// particular boundary. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_ps -FORCE_INLINE __m128 _mm_loadu_ps(const float *p) -{ - // for neon, alignment doesn't matter, so _mm_load_ps and _mm_loadu_ps are - // equivalent for neon - return vreinterpretq_m128_f32(vld1q_f32(p)); -} - -// Load unaligned 16-bit integer from memory into the first element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_si16 -FORCE_INLINE __m128i _mm_loadu_si16(const void *p) -{ - return vreinterpretq_m128i_s16( - vsetq_lane_s16(*(const unaligned_int16_t *) p, vdupq_n_s16(0), 0)); -} - -// Load unaligned 64-bit integer from memory into the first element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_si64 -FORCE_INLINE __m128i _mm_loadu_si64(const void *p) -{ - return vreinterpretq_m128i_s64( - vsetq_lane_s64(*(const unaligned_int64_t *) p, vdupq_n_s64(0), 0)); -} - -// Allocate size bytes of memory, aligned to the alignment specified in align, -// and return a pointer to the allocated memory. _mm_free should be used to free -// memory that is allocated with _mm_malloc. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_malloc -#if !defined(SSE2NEON_ALLOC_DEFINED) -FORCE_INLINE void *_mm_malloc(size_t size, size_t align) -{ - void *ptr; - if (align == 1) - return malloc(size); - if (align == 2 || (sizeof(void *) == 8 && align == 4)) - align = sizeof(void *); -#if defined(_WIN32) - ptr = _aligned_malloc(size, align); - if (ptr) - return ptr; -#else - if (!posix_memalign(&ptr, align, size)) - return ptr; -#endif - return NULL; -} -#endif - -// Conditionally store 8-bit integer elements from a into memory using mask -// (elements are not stored when the highest bit is not set in the corresponding -// element) and a non-temporal memory hint. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskmove_si64 -FORCE_INLINE void _mm_maskmove_si64(__m64 a, __m64 mask, char *mem_addr) -{ - int8x8_t shr_mask = vshr_n_s8(vreinterpret_s8_m64(mask), 7); - __m128 b = _mm_load_ps((const float *) mem_addr); - int8x8_t masked = - vbsl_s8(vreinterpret_u8_s8(shr_mask), vreinterpret_s8_m64(a), - vreinterpret_s8_u64(vget_low_u64(vreinterpretq_u64_m128(b)))); - vst1_s8((int8_t *) mem_addr, masked); -} - -// Conditionally store 8-bit integer elements from a into memory using mask -// (elements are not stored when the highest bit is not set in the corresponding -// element) and a non-temporal memory hint. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_maskmovq -#define _m_maskmovq(a, mask, mem_addr) _mm_maskmove_si64(a, mask, mem_addr) - -// Compare packed signed 16-bit integers in a and b, and store packed maximum -// values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_pi16 -FORCE_INLINE __m64 _mm_max_pi16(__m64 a, __m64 b) -{ - return vreinterpret_m64_s16( - vmax_s16(vreinterpret_s16_m64(a), vreinterpret_s16_m64(b))); -} - -// Compare packed single-precision (32-bit) floating-point elements in a and b, -// and store packed maximum values in dst. dst does not follow the IEEE Standard -// for Floating-Point Arithmetic (IEEE 754) maximum value when inputs are NaN or -// signed-zero values. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_ps -FORCE_INLINE __m128 _mm_max_ps(__m128 a, __m128 b) -{ -#if SSE2NEON_PRECISE_MINMAX - float32x4_t _a = vreinterpretq_f32_m128(a); - float32x4_t _b = vreinterpretq_f32_m128(b); - return vreinterpretq_m128_f32(vbslq_f32(vcgtq_f32(_a, _b), _a, _b)); -#else - return vreinterpretq_m128_f32( - vmaxq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); -#endif -} - -// Compare packed unsigned 8-bit integers in a and b, and store packed maximum -// values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_pu8 -FORCE_INLINE __m64 _mm_max_pu8(__m64 a, __m64 b) -{ - return vreinterpret_m64_u8( - vmax_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))); -} - -// Compare the lower single-precision (32-bit) floating-point elements in a and -// b, store the maximum value in the lower element of dst, and copy the upper 3 -// packed elements from a to the upper element of dst. dst does not follow the -// IEEE Standard for Floating-Point Arithmetic (IEEE 754) maximum value when -// inputs are NaN or signed-zero values. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_ss -FORCE_INLINE __m128 _mm_max_ss(__m128 a, __m128 b) -{ - float32_t value = vgetq_lane_f32(_mm_max_ps(a, b), 0); - return vreinterpretq_m128_f32( - vsetq_lane_f32(value, vreinterpretq_f32_m128(a), 0)); -} - -// Compare packed signed 16-bit integers in a and b, and store packed minimum -// values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_pi16 -FORCE_INLINE __m64 _mm_min_pi16(__m64 a, __m64 b) -{ - return vreinterpret_m64_s16( - vmin_s16(vreinterpret_s16_m64(a), vreinterpret_s16_m64(b))); -} - -// Compare packed single-precision (32-bit) floating-point elements in a and b, -// and store packed minimum values in dst. dst does not follow the IEEE Standard -// for Floating-Point Arithmetic (IEEE 754) minimum value when inputs are NaN or -// signed-zero values. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_ps -FORCE_INLINE __m128 _mm_min_ps(__m128 a, __m128 b) -{ -#if SSE2NEON_PRECISE_MINMAX - float32x4_t _a = vreinterpretq_f32_m128(a); - float32x4_t _b = vreinterpretq_f32_m128(b); - return vreinterpretq_m128_f32(vbslq_f32(vcltq_f32(_a, _b), _a, _b)); -#else - return vreinterpretq_m128_f32( - vminq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); -#endif -} - -// Compare packed unsigned 8-bit integers in a and b, and store packed minimum -// values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_pu8 -FORCE_INLINE __m64 _mm_min_pu8(__m64 a, __m64 b) -{ - return vreinterpret_m64_u8( - vmin_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))); -} - -// Compare the lower single-precision (32-bit) floating-point elements in a and -// b, store the minimum value in the lower element of dst, and copy the upper 3 -// packed elements from a to the upper element of dst. dst does not follow the -// IEEE Standard for Floating-Point Arithmetic (IEEE 754) minimum value when -// inputs are NaN or signed-zero values. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_ss -FORCE_INLINE __m128 _mm_min_ss(__m128 a, __m128 b) -{ - float32_t value = vgetq_lane_f32(_mm_min_ps(a, b), 0); - return vreinterpretq_m128_f32( - vsetq_lane_f32(value, vreinterpretq_f32_m128(a), 0)); -} - -// Move the lower single-precision (32-bit) floating-point element from b to the -// lower element of dst, and copy the upper 3 packed elements from a to the -// upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_move_ss -FORCE_INLINE __m128 _mm_move_ss(__m128 a, __m128 b) -{ - return vreinterpretq_m128_f32( - vsetq_lane_f32(vgetq_lane_f32(vreinterpretq_f32_m128(b), 0), - vreinterpretq_f32_m128(a), 0)); -} - -// Move the upper 2 single-precision (32-bit) floating-point elements from b to -// the lower 2 elements of dst, and copy the upper 2 elements from a to the -// upper 2 elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movehl_ps -FORCE_INLINE __m128 _mm_movehl_ps(__m128 a, __m128 b) -{ -#if defined(aarch64__) - return vreinterpretq_m128_u64( - vzip2q_u64(vreinterpretq_u64_m128(b), vreinterpretq_u64_m128(a))); -#else - float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); - float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); - return vreinterpretq_m128_f32(vcombine_f32(b32, a32)); -#endif -} - -// Move the lower 2 single-precision (32-bit) floating-point elements from b to -// the upper 2 elements of dst, and copy the lower 2 elements from a to the -// lower 2 elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movelh_ps -FORCE_INLINE __m128 _mm_movelh_ps(__m128 __A, __m128 __B) -{ - float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(__A)); - float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(__B)); - return vreinterpretq_m128_f32(vcombine_f32(a10, b10)); -} - -// Create mask from the most significant bit of each 8-bit element in a, and -// store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movemask_pi8 -FORCE_INLINE int _mm_movemask_pi8(__m64 a) -{ - uint8x8_t input = vreinterpret_u8_m64(a); -#if defined(__aarch64__) || defined(_M_ARM64) - static const int8_t shift[8] = {0, 1, 2, 3, 4, 5, 6, 7}; - uint8x8_t tmp = vshr_n_u8(input, 7); - return vaddv_u8(vshl_u8(tmp, vld1_s8(shift))); -#else - // Refer the implementation of `_mm_movemask_epi8` - uint16x4_t high_bits = vreinterpret_u16_u8(vshr_n_u8(input, 7)); - uint32x2_t paired16 = - vreinterpret_u32_u16(vsra_n_u16(high_bits, high_bits, 7)); - uint8x8_t paired32 = - vreinterpret_u8_u32(vsra_n_u32(paired16, paired16, 14)); - return vget_lane_u8(paired32, 0) | ((int) vget_lane_u8(paired32, 4) << 4); -#endif -} - -// Set each bit of mask dst based on the most significant bit of the -// corresponding packed single-precision (32-bit) floating-point element in a. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movemask_ps -FORCE_INLINE int _mm_movemask_ps(__m128 a) -{ - uint32x4_t input = vreinterpretq_u32_m128(a); -#if defined(__aarch64__) || defined(_M_ARM64) - static const int32_t shift[4] = {0, 1, 2, 3}; - uint32x4_t tmp = vshrq_n_u32(input, 31); - return vaddvq_u32(vshlq_u32(tmp, vld1q_s32(shift))); -#else - // Uses the exact same method as _mm_movemask_epi8, see that for details. - // Shift out everything but the sign bits with a 32-bit unsigned shift - // right. - uint64x2_t high_bits = vreinterpretq_u64_u32(vshrq_n_u32(input, 31)); - // Merge the two pairs together with a 64-bit unsigned shift right + add. - uint8x16_t paired = - vreinterpretq_u8_u64(vsraq_n_u64(high_bits, high_bits, 31)); - // Extract the result. - return vgetq_lane_u8(paired, 0) | (vgetq_lane_u8(paired, 8) << 2); -#endif -} - -// Multiply packed single-precision (32-bit) floating-point elements in a and b, -// and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_ps -FORCE_INLINE __m128 _mm_mul_ps(__m128 a, __m128 b) -{ - return vreinterpretq_m128_f32( - vmulq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); -} - -// Multiply the lower single-precision (32-bit) floating-point element in a and -// b, store the result in the lower element of dst, and copy the upper 3 packed -// elements from a to the upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_ss -FORCE_INLINE __m128 _mm_mul_ss(__m128 a, __m128 b) -{ - return _mm_move_ss(a, _mm_mul_ps(a, b)); -} - -// Multiply the packed unsigned 16-bit integers in a and b, producing -// intermediate 32-bit integers, and store the high 16 bits of the intermediate -// integers in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mulhi_pu16 -FORCE_INLINE __m64 _mm_mulhi_pu16(__m64 a, __m64 b) -{ - return vreinterpret_m64_u16(vshrn_n_u32( - vmull_u16(vreinterpret_u16_m64(a), vreinterpret_u16_m64(b)), 16)); -} - -// Compute the bitwise OR of packed single-precision (32-bit) floating-point -// elements in a and b, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_or_ps -FORCE_INLINE __m128 _mm_or_ps(__m128 a, __m128 b) -{ - return vreinterpretq_m128_s32( - vorrq_s32(vreinterpretq_s32_m128(a), vreinterpretq_s32_m128(b))); -} - -// Average packed unsigned 8-bit integers in a and b, and store the results in -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pavgb -#define _m_pavgb(a, b) _mm_avg_pu8(a, b) - -// Average packed unsigned 16-bit integers in a and b, and store the results in -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pavgw -#define _m_pavgw(a, b) _mm_avg_pu16(a, b) - -// Extract a 16-bit integer from a, selected with imm8, and store the result in -// the lower element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pextrw -#define _m_pextrw(a, imm) _mm_extract_pi16(a, imm) - -// Copy a to dst, and insert the 16-bit integer i into dst at the location -// specified by imm8. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=m_pinsrw -#define _m_pinsrw(a, i, imm) _mm_insert_pi16(a, i, imm) - -// Compare packed signed 16-bit integers in a and b, and store packed maximum -// values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pmaxsw -#define _m_pmaxsw(a, b) _mm_max_pi16(a, b) - -// Compare packed unsigned 8-bit integers in a and b, and store packed maximum -// values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pmaxub -#define _m_pmaxub(a, b) _mm_max_pu8(a, b) - -// Compare packed signed 16-bit integers in a and b, and store packed minimum -// values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pminsw -#define _m_pminsw(a, b) _mm_min_pi16(a, b) - -// Compare packed unsigned 8-bit integers in a and b, and store packed minimum -// values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pminub -#define _m_pminub(a, b) _mm_min_pu8(a, b) - -// Create mask from the most significant bit of each 8-bit element in a, and -// store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pmovmskb -#define _m_pmovmskb(a) _mm_movemask_pi8(a) - -// Multiply the packed unsigned 16-bit integers in a and b, producing -// intermediate 32-bit integers, and store the high 16 bits of the intermediate -// integers in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pmulhuw -#define _m_pmulhuw(a, b) _mm_mulhi_pu16(a, b) - -// Fetch the line of data from memory that contains address p to a location in -// the cache hierarchy specified by the locality hint i. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_prefetch -FORCE_INLINE void _mm_prefetch(char const *p, int i) -{ - (void) i; -#if defined(_MSC_VER) && !defined(__clang__) - switch (i) { - case _MM_HINT_NTA: - __prefetch2(p, 1); - break; - case _MM_HINT_T0: - __prefetch2(p, 0); - break; - case _MM_HINT_T1: - __prefetch2(p, 2); - break; - case _MM_HINT_T2: - __prefetch2(p, 4); - break; - } -#else - switch (i) { - case _MM_HINT_NTA: - __builtin_prefetch(p, 0, 0); - break; - case _MM_HINT_T0: - __builtin_prefetch(p, 0, 3); - break; - case _MM_HINT_T1: - __builtin_prefetch(p, 0, 2); - break; - case _MM_HINT_T2: - __builtin_prefetch(p, 0, 1); - break; - } -#endif -} - -// Compute the absolute differences of packed unsigned 8-bit integers in a and -// b, then horizontally sum each consecutive 8 differences to produce four -// unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low -// 16 bits of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=m_psadbw -#define _m_psadbw(a, b) _mm_sad_pu8(a, b) - -// Shuffle 16-bit integers in a using the control in imm8, and store the results -// in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pshufw -#define _m_pshufw(a, imm) _mm_shuffle_pi16(a, imm) - -// Compute the approximate reciprocal of packed single-precision (32-bit) -// floating-point elements in a, and store the results in dst. The maximum -// relative error for this approximation is less than 1.5*2^-12. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_rcp_ps -FORCE_INLINE __m128 _mm_rcp_ps(__m128 in) -{ - float32x4_t recip = vrecpeq_f32(vreinterpretq_f32_m128(in)); - recip = vmulq_f32(recip, vrecpsq_f32(recip, vreinterpretq_f32_m128(in))); -#if SSE2NEON_PRECISE_DIV - // Additional Netwon-Raphson iteration for accuracy - recip = vmulq_f32(recip, vrecpsq_f32(recip, vreinterpretq_f32_m128(in))); -#endif - return vreinterpretq_m128_f32(recip); -} - -// Compute the approximate reciprocal of the lower single-precision (32-bit) -// floating-point element in a, store the result in the lower element of dst, -// and copy the upper 3 packed elements from a to the upper elements of dst. The -// maximum relative error for this approximation is less than 1.5*2^-12. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_rcp_ss -FORCE_INLINE __m128 _mm_rcp_ss(__m128 a) -{ - return _mm_move_ss(a, _mm_rcp_ps(a)); -} - -// Compute the approximate reciprocal square root of packed single-precision -// (32-bit) floating-point elements in a, and store the results in dst. The -// maximum relative error for this approximation is less than 1.5*2^-12. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_rsqrt_ps -FORCE_INLINE __m128 _mm_rsqrt_ps(__m128 in) -{ - float32x4_t out = vrsqrteq_f32(vreinterpretq_f32_m128(in)); - - // Generate masks for detecting whether input has any 0.0f/-0.0f - // (which becomes positive/negative infinity by IEEE-754 arithmetic rules). - const uint32x4_t pos_inf = vdupq_n_u32(0x7F800000); - const uint32x4_t neg_inf = vdupq_n_u32(0xFF800000); - const uint32x4_t has_pos_zero = - vceqq_u32(pos_inf, vreinterpretq_u32_f32(out)); - const uint32x4_t has_neg_zero = - vceqq_u32(neg_inf, vreinterpretq_u32_f32(out)); - - out = vmulq_f32( - out, vrsqrtsq_f32(vmulq_f32(vreinterpretq_f32_m128(in), out), out)); -#if SSE2NEON_PRECISE_SQRT - // Additional Netwon-Raphson iteration for accuracy - out = vmulq_f32( - out, vrsqrtsq_f32(vmulq_f32(vreinterpretq_f32_m128(in), out), out)); -#endif - - // Set output vector element to infinity/negative-infinity if - // the corresponding input vector element is 0.0f/-0.0f. - out = vbslq_f32(has_pos_zero, (float32x4_t) pos_inf, out); - out = vbslq_f32(has_neg_zero, (float32x4_t) neg_inf, out); - - return vreinterpretq_m128_f32(out); -} - -// Compute the approximate reciprocal square root of the lower single-precision -// (32-bit) floating-point element in a, store the result in the lower element -// of dst, and copy the upper 3 packed elements from a to the upper elements of -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_rsqrt_ss -FORCE_INLINE __m128 _mm_rsqrt_ss(__m128 in) -{ - return vsetq_lane_f32(vgetq_lane_f32(_mm_rsqrt_ps(in), 0), in, 0); -} - -// Compute the absolute differences of packed unsigned 8-bit integers in a and -// b, then horizontally sum each consecutive 8 differences to produce four -// unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low -// 16 bits of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sad_pu8 -FORCE_INLINE __m64 _mm_sad_pu8(__m64 a, __m64 b) -{ - uint64x1_t t = vpaddl_u32(vpaddl_u16( - vpaddl_u8(vabd_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))))); - return vreinterpret_m64_u16( - vset_lane_u16((int) vget_lane_u64(t, 0), vdup_n_u16(0), 0)); -} - -// Macro: Set the flush zero bits of the MXCSR control and status register to -// the value in unsigned 32-bit integer a. The flush zero may contain any of the -// following flags: _MM_FLUSH_ZERO_ON or _MM_FLUSH_ZERO_OFF -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_MM_SET_FLUSH_ZERO_MODE -FORCE_INLINE void _sse2neon_mm_set_flush_zero_mode(unsigned int flag) -{ - // AArch32 Advanced SIMD arithmetic always uses the Flush-to-zero setting, - // regardless of the value of the FZ bit. - union { - fpcr_bitfield field; -#if defined(__aarch64__) || defined(_M_ARM64) - uint64_t value; -#else - uint32_t value; -#endif - } r; - -#if defined(__aarch64__) || defined(_M_ARM64) - r.value = _sse2neon_get_fpcr(); -#else - __asm__ __volatile__("vmrs %0, FPSCR" : "=r"(r.value)); /* read */ -#endif - - r.field.bit24 = (flag & _MM_FLUSH_ZERO_MASK) == _MM_FLUSH_ZERO_ON; - -#if defined(__aarch64__) || defined(_M_ARM64) - _sse2neon_set_fpcr(r.value); -#else - __asm__ __volatile__("vmsr FPSCR, %0" ::"r"(r)); /* write */ -#endif -} - -// Set packed single-precision (32-bit) floating-point elements in dst with the -// supplied values. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_ps -FORCE_INLINE __m128 _mm_set_ps(float w, float z, float y, float x) -{ - float ALIGN_STRUCT(16) data[4] = {x, y, z, w}; - return vreinterpretq_m128_f32(vld1q_f32(data)); -} - -// Broadcast single-precision (32-bit) floating-point value a to all elements of -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_ps1 -FORCE_INLINE __m128 _mm_set_ps1(float _w) -{ - return vreinterpretq_m128_f32(vdupq_n_f32(_w)); -} - -// Macro: Set the rounding mode bits of the MXCSR control and status register to -// the value in unsigned 32-bit integer a. The rounding mode may contain any of -// the following flags: _MM_ROUND_NEAREST, _MM_ROUND_DOWN, _MM_ROUND_UP, -// _MM_ROUND_TOWARD_ZERO -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_MM_SET_ROUNDING_MODE -FORCE_INLINE void _MM_SET_ROUNDING_MODE(int rounding) -{ - switch (rounding) { - case _MM_ROUND_NEAREST: - rounding = FE_TONEAREST; - break; - case _MM_ROUND_DOWN: - rounding = FE_DOWNWARD; - break; - case _MM_ROUND_UP: - rounding = FE_UPWARD; - break; - case _MM_ROUND_TOWARD_ZERO: - rounding = FE_TOWARDZERO; - break; - default: - // rounding must be _MM_ROUND_NEAREST, _MM_ROUND_DOWN, _MM_ROUND_UP, - // _MM_ROUND_TOWARD_ZERO. all the other invalid values we treat them as - // FE_TOWARDZERO (truncate). - rounding = FE_TOWARDZERO; - } - fesetround(rounding); -} - -// Copy single-precision (32-bit) floating-point element a to the lower element -// of dst, and zero the upper 3 elements. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_ss -FORCE_INLINE __m128 _mm_set_ss(float a) -{ - return vreinterpretq_m128_f32(vsetq_lane_f32(a, vdupq_n_f32(0), 0)); -} - -// Broadcast single-precision (32-bit) floating-point value a to all elements of -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_ps -FORCE_INLINE __m128 _mm_set1_ps(float _w) -{ - return vreinterpretq_m128_f32(vdupq_n_f32(_w)); -} - -// Set the MXCSR control and status register with the value in unsigned 32-bit -// integer a. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setcsr -// FIXME: _mm_setcsr() implementation supports changing the rounding mode only. -FORCE_INLINE void _mm_setcsr(unsigned int a) -{ - _MM_SET_ROUNDING_MODE(a); -} - -// Get the unsigned 32-bit value of the MXCSR control and status register. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_getcsr -// FIXME: _mm_getcsr() implementation supports reading the rounding mode only. -FORCE_INLINE unsigned int _mm_getcsr(void) -{ - return _MM_GET_ROUNDING_MODE(); -} - -// Set packed single-precision (32-bit) floating-point elements in dst with the -// supplied values in reverse order. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_ps -FORCE_INLINE __m128 _mm_setr_ps(float w, float z, float y, float x) -{ - float ALIGN_STRUCT(16) data[4] = {w, z, y, x}; - return vreinterpretq_m128_f32(vld1q_f32(data)); -} - -// Return vector of type __m128 with all elements set to zero. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setzero_ps -FORCE_INLINE __m128 _mm_setzero_ps(void) -{ - return vreinterpretq_m128_f32(vdupq_n_f32(0)); -} - -// Shuffle 16-bit integers in a using the control in imm8, and store the results -// in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_pi16 -#ifdef _sse2neon_shuffle -#define _mm_shuffle_pi16(a, imm) \ - vreinterpret_m64_s16(vshuffle_s16( \ - vreinterpret_s16_m64(a), vreinterpret_s16_m64(a), (imm & 0x3), \ - ((imm >> 2) & 0x3), ((imm >> 4) & 0x3), ((imm >> 6) & 0x3))) -#else -#define _mm_shuffle_pi16(a, imm) \ - _sse2neon_define1( \ - __m64, a, int16x4_t ret; \ - ret = vmov_n_s16( \ - vget_lane_s16(vreinterpret_s16_m64(_a), (imm) & (0x3))); \ - ret = vset_lane_s16( \ - vget_lane_s16(vreinterpret_s16_m64(_a), ((imm) >> 2) & 0x3), ret, \ - 1); \ - ret = vset_lane_s16( \ - vget_lane_s16(vreinterpret_s16_m64(_a), ((imm) >> 4) & 0x3), ret, \ - 2); \ - ret = vset_lane_s16( \ - vget_lane_s16(vreinterpret_s16_m64(_a), ((imm) >> 6) & 0x3), ret, \ - 3); \ - _sse2neon_return(vreinterpret_m64_s16(ret));) -#endif - -// Perform a serializing operation on all store-to-memory instructions that were -// issued prior to this instruction. Guarantees that every store instruction -// that precedes, in program order, is globally visible before any store -// instruction which follows the fence in program order. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sfence -FORCE_INLINE void _mm_sfence(void) -{ - _sse2neon_smp_mb(); -} - -// Perform a serializing operation on all load-from-memory and store-to-memory -// instructions that were issued prior to this instruction. Guarantees that -// every memory access that precedes, in program order, the memory fence -// instruction is globally visible before any memory instruction which follows -// the fence in program order. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mfence -FORCE_INLINE void _mm_mfence(void) -{ - _sse2neon_smp_mb(); -} - -// Perform a serializing operation on all load-from-memory instructions that -// were issued prior to this instruction. Guarantees that every load instruction -// that precedes, in program order, is globally visible before any load -// instruction which follows the fence in program order. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_lfence -FORCE_INLINE void _mm_lfence(void) -{ - _sse2neon_smp_mb(); -} - -// FORCE_INLINE __m128 _mm_shuffle_ps(__m128 a, __m128 b, __constrange(0,255) -// int imm) -#ifdef _sse2neon_shuffle -#define _mm_shuffle_ps(a, b, imm) \ - __extension__({ \ - float32x4_t _input1 = vreinterpretq_f32_m128(a); \ - float32x4_t _input2 = vreinterpretq_f32_m128(b); \ - float32x4_t _shuf = \ - vshuffleq_s32(_input1, _input2, (imm) & (0x3), ((imm) >> 2) & 0x3, \ - (((imm) >> 4) & 0x3) + 4, (((imm) >> 6) & 0x3) + 4); \ - vreinterpretq_m128_f32(_shuf); \ - }) -#else // generic -#define _mm_shuffle_ps(a, b, imm) \ - _sse2neon_define2( \ - __m128, a, b, __m128 ret; switch (imm) { \ - case _MM_SHUFFLE(1, 0, 3, 2): \ - ret = _mm_shuffle_ps_1032(_a, _b); \ - break; \ - case _MM_SHUFFLE(2, 3, 0, 1): \ - ret = _mm_shuffle_ps_2301(_a, _b); \ - break; \ - case _MM_SHUFFLE(0, 3, 2, 1): \ - ret = _mm_shuffle_ps_0321(_a, _b); \ - break; \ - case _MM_SHUFFLE(2, 1, 0, 3): \ - ret = _mm_shuffle_ps_2103(_a, _b); \ - break; \ - case _MM_SHUFFLE(1, 0, 1, 0): \ - ret = _mm_movelh_ps(_a, _b); \ - break; \ - case _MM_SHUFFLE(1, 0, 0, 1): \ - ret = _mm_shuffle_ps_1001(_a, _b); \ - break; \ - case _MM_SHUFFLE(0, 1, 0, 1): \ - ret = _mm_shuffle_ps_0101(_a, _b); \ - break; \ - case _MM_SHUFFLE(3, 2, 1, 0): \ - ret = _mm_shuffle_ps_3210(_a, _b); \ - break; \ - case _MM_SHUFFLE(0, 0, 1, 1): \ - ret = _mm_shuffle_ps_0011(_a, _b); \ - break; \ - case _MM_SHUFFLE(0, 0, 2, 2): \ - ret = _mm_shuffle_ps_0022(_a, _b); \ - break; \ - case _MM_SHUFFLE(2, 2, 0, 0): \ - ret = _mm_shuffle_ps_2200(_a, _b); \ - break; \ - case _MM_SHUFFLE(3, 2, 0, 2): \ - ret = _mm_shuffle_ps_3202(_a, _b); \ - break; \ - case _MM_SHUFFLE(3, 2, 3, 2): \ - ret = _mm_movehl_ps(_b, _a); \ - break; \ - case _MM_SHUFFLE(1, 1, 3, 3): \ - ret = _mm_shuffle_ps_1133(_a, _b); \ - break; \ - case _MM_SHUFFLE(2, 0, 1, 0): \ - ret = _mm_shuffle_ps_2010(_a, _b); \ - break; \ - case _MM_SHUFFLE(2, 0, 0, 1): \ - ret = _mm_shuffle_ps_2001(_a, _b); \ - break; \ - case _MM_SHUFFLE(2, 0, 3, 2): \ - ret = _mm_shuffle_ps_2032(_a, _b); \ - break; \ - default: \ - ret = _mm_shuffle_ps_default(_a, _b, (imm)); \ - break; \ - } _sse2neon_return(ret);) -#endif - -// Compute the square root of packed single-precision (32-bit) floating-point -// elements in a, and store the results in dst. -// Due to ARMv7-A NEON's lack of a precise square root intrinsic, we implement -// square root by multiplying input in with its reciprocal square root before -// using the Newton-Raphson method to approximate the results. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sqrt_ps -FORCE_INLINE __m128 _mm_sqrt_ps(__m128 in) -{ -#if (defined(__aarch64__) || defined(_M_ARM64)) && !SSE2NEON_PRECISE_SQRT - return vreinterpretq_m128_f32(vsqrtq_f32(vreinterpretq_f32_m128(in))); -#else - float32x4_t recip = vrsqrteq_f32(vreinterpretq_f32_m128(in)); - - // Test for vrsqrteq_f32(0) -> positive infinity case. - // Change to zero, so that s * 1/sqrt(s) result is zero too. - const uint32x4_t pos_inf = vdupq_n_u32(0x7F800000); - const uint32x4_t div_by_zero = - vceqq_u32(pos_inf, vreinterpretq_u32_f32(recip)); - recip = vreinterpretq_f32_u32( - vandq_u32(vmvnq_u32(div_by_zero), vreinterpretq_u32_f32(recip))); - - recip = vmulq_f32( - vrsqrtsq_f32(vmulq_f32(recip, recip), vreinterpretq_f32_m128(in)), - recip); - // Additional Netwon-Raphson iteration for accuracy - recip = vmulq_f32( - vrsqrtsq_f32(vmulq_f32(recip, recip), vreinterpretq_f32_m128(in)), - recip); - - // sqrt(s) = s * 1/sqrt(s) - return vreinterpretq_m128_f32(vmulq_f32(vreinterpretq_f32_m128(in), recip)); -#endif -} - -// Compute the square root of the lower single-precision (32-bit) floating-point -// element in a, store the result in the lower element of dst, and copy the -// upper 3 packed elements from a to the upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sqrt_ss -FORCE_INLINE __m128 _mm_sqrt_ss(__m128 in) -{ - float32_t value = - vgetq_lane_f32(vreinterpretq_f32_m128(_mm_sqrt_ps(in)), 0); - return vreinterpretq_m128_f32( - vsetq_lane_f32(value, vreinterpretq_f32_m128(in), 0)); -} - -// Store 128-bits (composed of 4 packed single-precision (32-bit) floating-point -// elements) from a into memory. mem_addr must be aligned on a 16-byte boundary -// or a general-protection exception may be generated. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_ps -FORCE_INLINE void _mm_store_ps(float *p, __m128 a) -{ - vst1q_f32(p, vreinterpretq_f32_m128(a)); -} - -// Store the lower single-precision (32-bit) floating-point element from a into -// 4 contiguous elements in memory. mem_addr must be aligned on a 16-byte -// boundary or a general-protection exception may be generated. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_ps1 -FORCE_INLINE void _mm_store_ps1(float *p, __m128 a) -{ - float32_t a0 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); - vst1q_f32(p, vdupq_n_f32(a0)); -} - -// Store the lower single-precision (32-bit) floating-point element from a into -// memory. mem_addr does not need to be aligned on any particular boundary. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_ss -FORCE_INLINE void _mm_store_ss(float *p, __m128 a) -{ - vst1q_lane_f32(p, vreinterpretq_f32_m128(a), 0); -} - -// Store the lower single-precision (32-bit) floating-point element from a into -// 4 contiguous elements in memory. mem_addr must be aligned on a 16-byte -// boundary or a general-protection exception may be generated. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store1_ps -#define _mm_store1_ps _mm_store_ps1 - -// Store the upper 2 single-precision (32-bit) floating-point elements from a -// into memory. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeh_pi -FORCE_INLINE void _mm_storeh_pi(__m64 *p, __m128 a) -{ - *p = vreinterpret_m64_f32(vget_high_f32(a)); -} - -// Store the lower 2 single-precision (32-bit) floating-point elements from a -// into memory. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storel_pi -FORCE_INLINE void _mm_storel_pi(__m64 *p, __m128 a) -{ - *p = vreinterpret_m64_f32(vget_low_f32(a)); -} - -// Store 4 single-precision (32-bit) floating-point elements from a into memory -// in reverse order. mem_addr must be aligned on a 16-byte boundary or a -// general-protection exception may be generated. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storer_ps -FORCE_INLINE void _mm_storer_ps(float *p, __m128 a) -{ - float32x4_t tmp = vrev64q_f32(vreinterpretq_f32_m128(a)); - float32x4_t rev = vextq_f32(tmp, tmp, 2); - vst1q_f32(p, rev); -} - -// Store 128-bits (composed of 4 packed single-precision (32-bit) floating-point -// elements) from a into memory. mem_addr does not need to be aligned on any -// particular boundary. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_ps -FORCE_INLINE void _mm_storeu_ps(float *p, __m128 a) -{ - vst1q_f32(p, vreinterpretq_f32_m128(a)); -} - -// Stores 16-bits of integer data a at the address p. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_si16 -FORCE_INLINE void _mm_storeu_si16(void *p, __m128i a) -{ - vst1q_lane_s16((int16_t *) p, vreinterpretq_s16_m128i(a), 0); -} - -// Stores 64-bits of integer data a at the address p. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_si64 -FORCE_INLINE void _mm_storeu_si64(void *p, __m128i a) -{ - vst1q_lane_s64((int64_t *) p, vreinterpretq_s64_m128i(a), 0); -} - -// Store 64-bits of integer data from a into memory using a non-temporal memory -// hint. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_pi -FORCE_INLINE void _mm_stream_pi(__m64 *p, __m64 a) -{ - vst1_s64((int64_t *) p, vreinterpret_s64_m64(a)); -} - -// Store 128-bits (composed of 4 packed single-precision (32-bit) floating- -// point elements) from a into memory using a non-temporal memory hint. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_ps -FORCE_INLINE void _mm_stream_ps(float *p, __m128 a) -{ -#if __has_builtin(__builtin_nontemporal_store) - __builtin_nontemporal_store(a, (float32x4_t *) p); -#else - vst1q_f32(p, vreinterpretq_f32_m128(a)); -#endif -} - -// Subtract packed single-precision (32-bit) floating-point elements in b from -// packed single-precision (32-bit) floating-point elements in a, and store the -// results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_ps -FORCE_INLINE __m128 _mm_sub_ps(__m128 a, __m128 b) -{ - return vreinterpretq_m128_f32( - vsubq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); -} - -// Subtract the lower single-precision (32-bit) floating-point element in b from -// the lower single-precision (32-bit) floating-point element in a, store the -// result in the lower element of dst, and copy the upper 3 packed elements from -// a to the upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_ss -FORCE_INLINE __m128 _mm_sub_ss(__m128 a, __m128 b) -{ - return _mm_move_ss(a, _mm_sub_ps(a, b)); -} - -// Macro: Transpose the 4x4 matrix formed by the 4 rows of single-precision -// (32-bit) floating-point elements in row0, row1, row2, and row3, and store the -// transposed matrix in these vectors (row0 now contains column 0, etc.). -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=MM_TRANSPOSE4_PS -#define _MM_TRANSPOSE4_PS(row0, row1, row2, row3) \ - do { \ - float32x4x2_t ROW01 = vtrnq_f32(row0, row1); \ - float32x4x2_t ROW23 = vtrnq_f32(row2, row3); \ - row0 = vcombine_f32(vget_low_f32(ROW01.val[0]), \ - vget_low_f32(ROW23.val[0])); \ - row1 = vcombine_f32(vget_low_f32(ROW01.val[1]), \ - vget_low_f32(ROW23.val[1])); \ - row2 = vcombine_f32(vget_high_f32(ROW01.val[0]), \ - vget_high_f32(ROW23.val[0])); \ - row3 = vcombine_f32(vget_high_f32(ROW01.val[1]), \ - vget_high_f32(ROW23.val[1])); \ - } while (0) - -// according to the documentation, these intrinsics behave the same as the -// non-'u' versions. We'll just alias them here. -#define _mm_ucomieq_ss _mm_comieq_ss -#define _mm_ucomige_ss _mm_comige_ss -#define _mm_ucomigt_ss _mm_comigt_ss -#define _mm_ucomile_ss _mm_comile_ss -#define _mm_ucomilt_ss _mm_comilt_ss -#define _mm_ucomineq_ss _mm_comineq_ss - -// Return vector of type __m128i with undefined elements. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_undefined_si128 -FORCE_INLINE __m128i _mm_undefined_si128(void) -{ -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wuninitialized" -#endif - __m128i a; -#if defined(_MSC_VER) - a = _mm_setzero_si128(); -#endif - return a; -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic pop -#endif -} - -// Return vector of type __m128 with undefined elements. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_undefined_ps -FORCE_INLINE __m128 _mm_undefined_ps(void) -{ -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wuninitialized" -#endif - __m128 a; -#if defined(_MSC_VER) - a = _mm_setzero_ps(); -#endif - return a; -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic pop -#endif -} - -// Unpack and interleave single-precision (32-bit) floating-point elements from -// the high half a and b, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_ps -FORCE_INLINE __m128 _mm_unpackhi_ps(__m128 a, __m128 b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128_f32( - vzip2q_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); -#else - float32x2_t a1 = vget_high_f32(vreinterpretq_f32_m128(a)); - float32x2_t b1 = vget_high_f32(vreinterpretq_f32_m128(b)); - float32x2x2_t result = vzip_f32(a1, b1); - return vreinterpretq_m128_f32(vcombine_f32(result.val[0], result.val[1])); -#endif -} - -// Unpack and interleave single-precision (32-bit) floating-point elements from -// the low half of a and b, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_ps -FORCE_INLINE __m128 _mm_unpacklo_ps(__m128 a, __m128 b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128_f32( - vzip1q_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); -#else - float32x2_t a1 = vget_low_f32(vreinterpretq_f32_m128(a)); - float32x2_t b1 = vget_low_f32(vreinterpretq_f32_m128(b)); - float32x2x2_t result = vzip_f32(a1, b1); - return vreinterpretq_m128_f32(vcombine_f32(result.val[0], result.val[1])); -#endif -} - -// Compute the bitwise XOR of packed single-precision (32-bit) floating-point -// elements in a and b, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_xor_ps -FORCE_INLINE __m128 _mm_xor_ps(__m128 a, __m128 b) -{ - return vreinterpretq_m128_s32( - veorq_s32(vreinterpretq_s32_m128(a), vreinterpretq_s32_m128(b))); -} - -/* SSE2 */ - -// Add packed 16-bit integers in a and b, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_epi16 -FORCE_INLINE __m128i _mm_add_epi16(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s16( - vaddq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); -} - -// Add packed 32-bit integers in a and b, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_epi32 -FORCE_INLINE __m128i _mm_add_epi32(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s32( - vaddq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); -} - -// Add packed 64-bit integers in a and b, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_epi64 -FORCE_INLINE __m128i _mm_add_epi64(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s64( - vaddq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); -} - -// Add packed 8-bit integers in a and b, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_epi8 -FORCE_INLINE __m128i _mm_add_epi8(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s8( - vaddq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); -} - -// Add packed double-precision (64-bit) floating-point elements in a and b, and -// store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_pd -FORCE_INLINE __m128d _mm_add_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64( - vaddq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); -#else - double a0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - double a1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - double b0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double b1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); - double c[2]; - c[0] = a0 + b0; - c[1] = a1 + b1; - return vld1q_f32((float32_t *) c); -#endif -} - -// Add the lower double-precision (64-bit) floating-point element in a and b, -// store the result in the lower element of dst, and copy the upper element from -// a to the upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_sd -FORCE_INLINE __m128d _mm_add_sd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return _mm_move_sd(a, _mm_add_pd(a, b)); -#else - double a0, a1, b0; - a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double c[2]; - c[0] = a0 + b0; - c[1] = a1; - return vld1q_f32((float32_t *) c); -#endif -} - -// Add 64-bit integers a and b, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_si64 -FORCE_INLINE __m64 _mm_add_si64(__m64 a, __m64 b) -{ - return vreinterpret_m64_s64( - vadd_s64(vreinterpret_s64_m64(a), vreinterpret_s64_m64(b))); -} - -// Add packed signed 16-bit integers in a and b using saturation, and store the -// results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_adds_epi16 -FORCE_INLINE __m128i _mm_adds_epi16(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s16( - vqaddq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); -} - -// Add packed signed 8-bit integers in a and b using saturation, and store the -// results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_adds_epi8 -FORCE_INLINE __m128i _mm_adds_epi8(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s8( - vqaddq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); -} - -// Add packed unsigned 16-bit integers in a and b using saturation, and store -// the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_adds_epu16 -FORCE_INLINE __m128i _mm_adds_epu16(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u16( - vqaddq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); -} - -// Add packed unsigned 8-bit integers in a and b using saturation, and store the -// results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_adds_epu8 -FORCE_INLINE __m128i _mm_adds_epu8(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u8( - vqaddq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); -} - -// Compute the bitwise AND of packed double-precision (64-bit) floating-point -// elements in a and b, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_and_pd -FORCE_INLINE __m128d _mm_and_pd(__m128d a, __m128d b) -{ - return vreinterpretq_m128d_s64( - vandq_s64(vreinterpretq_s64_m128d(a), vreinterpretq_s64_m128d(b))); -} - -// Compute the bitwise AND of 128 bits (representing integer data) in a and b, -// and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_and_si128 -FORCE_INLINE __m128i _mm_and_si128(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s32( - vandq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); -} - -// Compute the bitwise NOT of packed double-precision (64-bit) floating-point -// elements in a and then AND with b, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_andnot_pd -FORCE_INLINE __m128d _mm_andnot_pd(__m128d a, __m128d b) -{ - // *NOTE* argument swap - return vreinterpretq_m128d_s64( - vbicq_s64(vreinterpretq_s64_m128d(b), vreinterpretq_s64_m128d(a))); -} - -// Compute the bitwise NOT of 128 bits (representing integer data) in a and then -// AND with b, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_andnot_si128 -FORCE_INLINE __m128i _mm_andnot_si128(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s32( - vbicq_s32(vreinterpretq_s32_m128i(b), - vreinterpretq_s32_m128i(a))); // *NOTE* argument swap -} - -// Average packed unsigned 16-bit integers in a and b, and store the results in -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_avg_epu16 -FORCE_INLINE __m128i _mm_avg_epu16(__m128i a, __m128i b) -{ - return (__m128i) vrhaddq_u16(vreinterpretq_u16_m128i(a), - vreinterpretq_u16_m128i(b)); -} - -// Average packed unsigned 8-bit integers in a and b, and store the results in -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_avg_epu8 -FORCE_INLINE __m128i _mm_avg_epu8(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u8( - vrhaddq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); -} - -// Shift a left by imm8 bytes while shifting in zeros, and store the results in -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_bslli_si128 -#define _mm_bslli_si128(a, imm) _mm_slli_si128(a, imm) - -// Shift a right by imm8 bytes while shifting in zeros, and store the results in -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_bsrli_si128 -#define _mm_bsrli_si128(a, imm) _mm_srli_si128(a, imm) - -// Cast vector of type __m128d to type __m128. This intrinsic is only used for -// compilation and does not generate any instructions, thus it has zero latency. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castpd_ps -FORCE_INLINE __m128 _mm_castpd_ps(__m128d a) -{ - return vreinterpretq_m128_s64(vreinterpretq_s64_m128d(a)); -} - -// Cast vector of type __m128d to type __m128i. This intrinsic is only used for -// compilation and does not generate any instructions, thus it has zero latency. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castpd_si128 -FORCE_INLINE __m128i _mm_castpd_si128(__m128d a) -{ - return vreinterpretq_m128i_s64(vreinterpretq_s64_m128d(a)); -} - -// Cast vector of type __m128 to type __m128d. This intrinsic is only used for -// compilation and does not generate any instructions, thus it has zero latency. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castps_pd -FORCE_INLINE __m128d _mm_castps_pd(__m128 a) -{ - return vreinterpretq_m128d_s32(vreinterpretq_s32_m128(a)); -} - -// Cast vector of type __m128 to type __m128i. This intrinsic is only used for -// compilation and does not generate any instructions, thus it has zero latency. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castps_si128 -FORCE_INLINE __m128i _mm_castps_si128(__m128 a) -{ - return vreinterpretq_m128i_s32(vreinterpretq_s32_m128(a)); -} - -// Cast vector of type __m128i to type __m128d. This intrinsic is only used for -// compilation and does not generate any instructions, thus it has zero latency. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castsi128_pd -FORCE_INLINE __m128d _mm_castsi128_pd(__m128i a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64(vreinterpretq_f64_m128i(a)); -#else - return vreinterpretq_m128d_f32(vreinterpretq_f32_m128i(a)); -#endif -} - -// Cast vector of type __m128i to type __m128. This intrinsic is only used for -// compilation and does not generate any instructions, thus it has zero latency. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castsi128_ps -FORCE_INLINE __m128 _mm_castsi128_ps(__m128i a) -{ - return vreinterpretq_m128_s32(vreinterpretq_s32_m128i(a)); -} - -// Invalidate and flush the cache line that contains p from all levels of the -// cache hierarchy. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_clflush -#if defined(__APPLE__) -#include -#endif -FORCE_INLINE void _mm_clflush(void const *p) -{ - (void) p; - - /* sys_icache_invalidate is supported since macOS 10.5. - * However, it does not work on non-jailbroken iOS devices, although the - * compilation is successful. - */ -#if defined(__APPLE__) - sys_icache_invalidate((void *) (uintptr_t) p, SSE2NEON_CACHELINE_SIZE); -#elif defined(__GNUC__) || defined(__clang__) - uintptr_t ptr = (uintptr_t) p; - __builtin___clear_cache((char *) ptr, - (char *) ptr + SSE2NEON_CACHELINE_SIZE); -#elif (_MSC_VER) && SSE2NEON_INCLUDE_WINDOWS_H - FlushInstructionCache(GetCurrentProcess(), p, SSE2NEON_CACHELINE_SIZE); -#endif -} - -// Compare packed 16-bit integers in a and b for equality, and store the results -// in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_epi16 -FORCE_INLINE __m128i _mm_cmpeq_epi16(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u16( - vceqq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); -} - -// Compare packed 32-bit integers in a and b for equality, and store the results -// in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_epi32 -FORCE_INLINE __m128i _mm_cmpeq_epi32(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u32( - vceqq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); -} - -// Compare packed 8-bit integers in a and b for equality, and store the results -// in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_epi8 -FORCE_INLINE __m128i _mm_cmpeq_epi8(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u8( - vceqq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); -} - -// Compare packed double-precision (64-bit) floating-point elements in a and b -// for equality, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_pd -FORCE_INLINE __m128d _mm_cmpeq_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_u64( - vceqq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); -#else - // (a == b) -> (a_lo == b_lo) && (a_hi == b_hi) - uint32x4_t cmp = - vceqq_u32(vreinterpretq_u32_m128d(a), vreinterpretq_u32_m128d(b)); - uint32x4_t swapped = vrev64q_u32(cmp); - return vreinterpretq_m128d_u32(vandq_u32(cmp, swapped)); -#endif -} - -// Compare the lower double-precision (64-bit) floating-point elements in a and -// b for equality, store the result in the lower element of dst, and copy the -// upper element from a to the upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_sd -FORCE_INLINE __m128d _mm_cmpeq_sd(__m128d a, __m128d b) -{ - return _mm_move_sd(a, _mm_cmpeq_pd(a, b)); -} - -// Compare packed double-precision (64-bit) floating-point elements in a and b -// for greater-than-or-equal, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpge_pd -FORCE_INLINE __m128d _mm_cmpge_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_u64( - vcgeq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); -#else - double a0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - double a1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - double b0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double b1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); - uint64_t d[2]; - d[0] = a0 >= b0 ? ~UINT64_C(0) : UINT64_C(0); - d[1] = a1 >= b1 ? ~UINT64_C(0) : UINT64_C(0); - - return vreinterpretq_m128d_u64(vld1q_u64(d)); -#endif -} - -// Compare the lower double-precision (64-bit) floating-point elements in a and -// b for greater-than-or-equal, store the result in the lower element of dst, -// and copy the upper element from a to the upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpge_sd -FORCE_INLINE __m128d _mm_cmpge_sd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return _mm_move_sd(a, _mm_cmpge_pd(a, b)); -#else - // expand "_mm_cmpge_pd()" to reduce unnecessary operations - double a0, b0; - a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - uint64_t a1 = vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1); - b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - uint64_t d[2]; - d[0] = a0 >= b0 ? ~UINT64_C(0) : UINT64_C(0); - d[1] = a1; - - return vreinterpretq_m128d_u64(vld1q_u64(d)); -#endif -} - -// Compare packed signed 16-bit integers in a and b for greater-than, and store -// the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_epi16 -FORCE_INLINE __m128i _mm_cmpgt_epi16(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u16( - vcgtq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); -} - -// Compare packed signed 32-bit integers in a and b for greater-than, and store -// the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_epi32 -FORCE_INLINE __m128i _mm_cmpgt_epi32(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u32( - vcgtq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); -} - -// Compare packed signed 8-bit integers in a and b for greater-than, and store -// the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_epi8 -FORCE_INLINE __m128i _mm_cmpgt_epi8(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u8( - vcgtq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); -} - -// Compare packed double-precision (64-bit) floating-point elements in a and b -// for greater-than, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_pd -FORCE_INLINE __m128d _mm_cmpgt_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_u64( - vcgtq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); -#else - double a0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - double a1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - double b0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double b1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); - uint64_t d[2]; - d[0] = a0 > b0 ? ~UINT64_C(0) : UINT64_C(0); - d[1] = a1 > b1 ? ~UINT64_C(0) : UINT64_C(0); - - return vreinterpretq_m128d_u64(vld1q_u64(d)); -#endif -} - -// Compare the lower double-precision (64-bit) floating-point elements in a and -// b for greater-than, store the result in the lower element of dst, and copy -// the upper element from a to the upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_sd -FORCE_INLINE __m128d _mm_cmpgt_sd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return _mm_move_sd(a, _mm_cmpgt_pd(a, b)); -#else - // expand "_mm_cmpge_pd()" to reduce unnecessary operations - double a0, b0; - a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - uint64_t a1 = vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1); - b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - uint64_t d[2]; - d[0] = a0 > b0 ? ~UINT64_C(0) : UINT64_C(0); - d[1] = a1; - - return vreinterpretq_m128d_u64(vld1q_u64(d)); -#endif -} - -// Compare packed double-precision (64-bit) floating-point elements in a and b -// for less-than-or-equal, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmple_pd -FORCE_INLINE __m128d _mm_cmple_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_u64( - vcleq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); -#else - double a0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - double a1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - double b0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double b1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); - uint64_t d[2]; - d[0] = a0 <= b0 ? ~UINT64_C(0) : UINT64_C(0); - d[1] = a1 <= b1 ? ~UINT64_C(0) : UINT64_C(0); - - return vreinterpretq_m128d_u64(vld1q_u64(d)); -#endif -} - -// Compare the lower double-precision (64-bit) floating-point elements in a and -// b for less-than-or-equal, store the result in the lower element of dst, and -// copy the upper element from a to the upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmple_sd -FORCE_INLINE __m128d _mm_cmple_sd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return _mm_move_sd(a, _mm_cmple_pd(a, b)); -#else - // expand "_mm_cmpge_pd()" to reduce unnecessary operations - double a0, b0; - a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - uint64_t a1 = vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1); - b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - uint64_t d[2]; - d[0] = a0 <= b0 ? ~UINT64_C(0) : UINT64_C(0); - d[1] = a1; - - return vreinterpretq_m128d_u64(vld1q_u64(d)); -#endif -} - -// Compare packed signed 16-bit integers in a and b for less-than, and store the -// results in dst. Note: This intrinsic emits the pcmpgtw instruction with the -// order of the operands switched. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_epi16 -FORCE_INLINE __m128i _mm_cmplt_epi16(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u16( - vcltq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); -} - -// Compare packed signed 32-bit integers in a and b for less-than, and store the -// results in dst. Note: This intrinsic emits the pcmpgtd instruction with the -// order of the operands switched. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_epi32 -FORCE_INLINE __m128i _mm_cmplt_epi32(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u32( - vcltq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); -} - -// Compare packed signed 8-bit integers in a and b for less-than, and store the -// results in dst. Note: This intrinsic emits the pcmpgtb instruction with the -// order of the operands switched. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_epi8 -FORCE_INLINE __m128i _mm_cmplt_epi8(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u8( - vcltq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); -} - -// Compare packed double-precision (64-bit) floating-point elements in a and b -// for less-than, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_pd -FORCE_INLINE __m128d _mm_cmplt_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_u64( - vcltq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); -#else - double a0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - double a1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - double b0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double b1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); - uint64_t d[2]; - d[0] = a0 < b0 ? ~UINT64_C(0) : UINT64_C(0); - d[1] = a1 < b1 ? ~UINT64_C(0) : UINT64_C(0); - - return vreinterpretq_m128d_u64(vld1q_u64(d)); -#endif -} - -// Compare the lower double-precision (64-bit) floating-point elements in a and -// b for less-than, store the result in the lower element of dst, and copy the -// upper element from a to the upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_sd -FORCE_INLINE __m128d _mm_cmplt_sd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return _mm_move_sd(a, _mm_cmplt_pd(a, b)); -#else - double a0, b0; - a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - uint64_t a1 = vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1); - b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - uint64_t d[2]; - d[0] = a0 < b0 ? ~UINT64_C(0) : UINT64_C(0); - d[1] = a1; - - return vreinterpretq_m128d_u64(vld1q_u64(d)); -#endif -} - -// Compare packed double-precision (64-bit) floating-point elements in a and b -// for not-equal, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpneq_pd -FORCE_INLINE __m128d _mm_cmpneq_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_s32(vmvnq_s32(vreinterpretq_s32_u64( - vceqq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))))); -#else - // (a == b) -> (a_lo == b_lo) && (a_hi == b_hi) - uint32x4_t cmp = - vceqq_u32(vreinterpretq_u32_m128d(a), vreinterpretq_u32_m128d(b)); - uint32x4_t swapped = vrev64q_u32(cmp); - return vreinterpretq_m128d_u32(vmvnq_u32(vandq_u32(cmp, swapped))); -#endif -} - -// Compare the lower double-precision (64-bit) floating-point elements in a and -// b for not-equal, store the result in the lower element of dst, and copy the -// upper element from a to the upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpneq_sd -FORCE_INLINE __m128d _mm_cmpneq_sd(__m128d a, __m128d b) -{ - return _mm_move_sd(a, _mm_cmpneq_pd(a, b)); -} - -// Compare packed double-precision (64-bit) floating-point elements in a and b -// for not-greater-than-or-equal, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnge_pd -FORCE_INLINE __m128d _mm_cmpnge_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_u64(veorq_u64( - vcgeq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b)), - vdupq_n_u64(UINT64_MAX))); -#else - double a0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - double a1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - double b0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double b1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); - uint64_t d[2]; - d[0] = !(a0 >= b0) ? ~UINT64_C(0) : UINT64_C(0); - d[1] = !(a1 >= b1) ? ~UINT64_C(0) : UINT64_C(0); - - return vreinterpretq_m128d_u64(vld1q_u64(d)); -#endif -} - -// Compare the lower double-precision (64-bit) floating-point elements in a and -// b for not-greater-than-or-equal, store the result in the lower element of -// dst, and copy the upper element from a to the upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnge_sd -FORCE_INLINE __m128d _mm_cmpnge_sd(__m128d a, __m128d b) -{ - return _mm_move_sd(a, _mm_cmpnge_pd(a, b)); -} - -// Compare packed double-precision (64-bit) floating-point elements in a and b -// for not-greater-than, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_cmpngt_pd -FORCE_INLINE __m128d _mm_cmpngt_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_u64(veorq_u64( - vcgtq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b)), - vdupq_n_u64(UINT64_MAX))); -#else - double a0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - double a1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - double b0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double b1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); - uint64_t d[2]; - d[0] = !(a0 > b0) ? ~UINT64_C(0) : UINT64_C(0); - d[1] = !(a1 > b1) ? ~UINT64_C(0) : UINT64_C(0); - - return vreinterpretq_m128d_u64(vld1q_u64(d)); -#endif -} - -// Compare the lower double-precision (64-bit) floating-point elements in a and -// b for not-greater-than, store the result in the lower element of dst, and -// copy the upper element from a to the upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpngt_sd -FORCE_INLINE __m128d _mm_cmpngt_sd(__m128d a, __m128d b) -{ - return _mm_move_sd(a, _mm_cmpngt_pd(a, b)); -} - -// Compare packed double-precision (64-bit) floating-point elements in a and b -// for not-less-than-or-equal, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnle_pd -FORCE_INLINE __m128d _mm_cmpnle_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_u64(veorq_u64( - vcleq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b)), - vdupq_n_u64(UINT64_MAX))); -#else - double a0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - double a1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - double b0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double b1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); - uint64_t d[2]; - d[0] = !(a0 <= b0) ? ~UINT64_C(0) : UINT64_C(0); - d[1] = !(a1 <= b1) ? ~UINT64_C(0) : UINT64_C(0); - - return vreinterpretq_m128d_u64(vld1q_u64(d)); -#endif -} - -// Compare the lower double-precision (64-bit) floating-point elements in a and -// b for not-less-than-or-equal, store the result in the lower element of dst, -// and copy the upper element from a to the upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnle_sd -FORCE_INLINE __m128d _mm_cmpnle_sd(__m128d a, __m128d b) -{ - return _mm_move_sd(a, _mm_cmpnle_pd(a, b)); -} - -// Compare packed double-precision (64-bit) floating-point elements in a and b -// for not-less-than, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnlt_pd -FORCE_INLINE __m128d _mm_cmpnlt_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_u64(veorq_u64( - vcltq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b)), - vdupq_n_u64(UINT64_MAX))); -#else - double a0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - double a1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - double b0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double b1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); - uint64_t d[2]; - d[0] = !(a0 < b0) ? ~UINT64_C(0) : UINT64_C(0); - d[1] = !(a1 < b1) ? ~UINT64_C(0) : UINT64_C(0); - - return vreinterpretq_m128d_u64(vld1q_u64(d)); -#endif -} - -// Compare the lower double-precision (64-bit) floating-point elements in a and -// b for not-less-than, store the result in the lower element of dst, and copy -// the upper element from a to the upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnlt_sd -FORCE_INLINE __m128d _mm_cmpnlt_sd(__m128d a, __m128d b) -{ - return _mm_move_sd(a, _mm_cmpnlt_pd(a, b)); -} - -// Compare packed double-precision (64-bit) floating-point elements in a and b -// to see if neither is NaN, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpord_pd -FORCE_INLINE __m128d _mm_cmpord_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - // Excluding NaNs, any two floating point numbers can be compared. - uint64x2_t not_nan_a = - vceqq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(a)); - uint64x2_t not_nan_b = - vceqq_f64(vreinterpretq_f64_m128d(b), vreinterpretq_f64_m128d(b)); - return vreinterpretq_m128d_u64(vandq_u64(not_nan_a, not_nan_b)); -#else - double a0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - double a1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - double b0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double b1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); - uint64_t d[2]; - d[0] = (a0 == a0 && b0 == b0) ? ~UINT64_C(0) : UINT64_C(0); - d[1] = (a1 == a1 && b1 == b1) ? ~UINT64_C(0) : UINT64_C(0); - - return vreinterpretq_m128d_u64(vld1q_u64(d)); -#endif -} - -// Compare the lower double-precision (64-bit) floating-point elements in a and -// b to see if neither is NaN, store the result in the lower element of dst, and -// copy the upper element from a to the upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpord_sd -FORCE_INLINE __m128d _mm_cmpord_sd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return _mm_move_sd(a, _mm_cmpord_pd(a, b)); -#else - double a0, b0; - a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - uint64_t a1 = vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1); - b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - uint64_t d[2]; - d[0] = (a0 == a0 && b0 == b0) ? ~UINT64_C(0) : UINT64_C(0); - d[1] = a1; - - return vreinterpretq_m128d_u64(vld1q_u64(d)); -#endif -} - -// Compare packed double-precision (64-bit) floating-point elements in a and b -// to see if either is NaN, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpunord_pd -FORCE_INLINE __m128d _mm_cmpunord_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - // Two NaNs are not equal in comparison operation. - uint64x2_t not_nan_a = - vceqq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(a)); - uint64x2_t not_nan_b = - vceqq_f64(vreinterpretq_f64_m128d(b), vreinterpretq_f64_m128d(b)); - return vreinterpretq_m128d_s32( - vmvnq_s32(vreinterpretq_s32_u64(vandq_u64(not_nan_a, not_nan_b)))); -#else - double a0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - double a1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - double b0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double b1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); - uint64_t d[2]; - d[0] = (a0 == a0 && b0 == b0) ? UINT64_C(0) : ~UINT64_C(0); - d[1] = (a1 == a1 && b1 == b1) ? UINT64_C(0) : ~UINT64_C(0); - - return vreinterpretq_m128d_u64(vld1q_u64(d)); -#endif -} - -// Compare the lower double-precision (64-bit) floating-point elements in a and -// b to see if either is NaN, store the result in the lower element of dst, and -// copy the upper element from a to the upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpunord_sd -FORCE_INLINE __m128d _mm_cmpunord_sd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return _mm_move_sd(a, _mm_cmpunord_pd(a, b)); -#else - double a0, b0; - a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - uint64_t a1 = vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1); - b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - uint64_t d[2]; - d[0] = (a0 == a0 && b0 == b0) ? UINT64_C(0) : ~UINT64_C(0); - d[1] = a1; - - return vreinterpretq_m128d_u64(vld1q_u64(d)); -#endif -} - -// Compare the lower double-precision (64-bit) floating-point element in a and b -// for greater-than-or-equal, and return the boolean result (0 or 1). -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comige_sd -FORCE_INLINE int _mm_comige_sd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vgetq_lane_u64(vcgeq_f64(a, b), 0) & 0x1; -#else - double a0, b0; - a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - return a0 >= b0; -#endif -} - -// Compare the lower double-precision (64-bit) floating-point element in a and b -// for greater-than, and return the boolean result (0 or 1). -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comigt_sd -FORCE_INLINE int _mm_comigt_sd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vgetq_lane_u64(vcgtq_f64(a, b), 0) & 0x1; -#else - double a0, b0; - a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - - return a0 > b0; -#endif -} - -// Compare the lower double-precision (64-bit) floating-point element in a and b -// for less-than-or-equal, and return the boolean result (0 or 1). -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comile_sd -FORCE_INLINE int _mm_comile_sd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vgetq_lane_u64(vcleq_f64(a, b), 0) & 0x1; -#else - double a0, b0; - a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - - return a0 <= b0; -#endif -} - -// Compare the lower double-precision (64-bit) floating-point element in a and b -// for less-than, and return the boolean result (0 or 1). -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comilt_sd -FORCE_INLINE int _mm_comilt_sd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vgetq_lane_u64(vcltq_f64(a, b), 0) & 0x1; -#else - double a0, b0; - a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - - return a0 < b0; -#endif -} - -// Compare the lower double-precision (64-bit) floating-point element in a and b -// for equality, and return the boolean result (0 or 1). -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comieq_sd -FORCE_INLINE int _mm_comieq_sd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vgetq_lane_u64(vceqq_f64(a, b), 0) & 0x1; -#else - uint32x4_t a_not_nan = - vceqq_u32(vreinterpretq_u32_m128d(a), vreinterpretq_u32_m128d(a)); - uint32x4_t b_not_nan = - vceqq_u32(vreinterpretq_u32_m128d(b), vreinterpretq_u32_m128d(b)); - uint32x4_t a_and_b_not_nan = vandq_u32(a_not_nan, b_not_nan); - uint32x4_t a_eq_b = - vceqq_u32(vreinterpretq_u32_m128d(a), vreinterpretq_u32_m128d(b)); - uint64x2_t and_results = vandq_u64(vreinterpretq_u64_u32(a_and_b_not_nan), - vreinterpretq_u64_u32(a_eq_b)); - return vgetq_lane_u64(and_results, 0) & 0x1; -#endif -} - -// Compare the lower double-precision (64-bit) floating-point element in a and b -// for not-equal, and return the boolean result (0 or 1). -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comineq_sd -FORCE_INLINE int _mm_comineq_sd(__m128d a, __m128d b) -{ - return !_mm_comieq_sd(a, b); -} - -// Convert packed signed 32-bit integers in a to packed double-precision -// (64-bit) floating-point elements, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi32_pd -FORCE_INLINE __m128d _mm_cvtepi32_pd(__m128i a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64( - vcvtq_f64_s64(vmovl_s32(vget_low_s32(vreinterpretq_s32_m128i(a))))); -#else - double a0 = (double) vgetq_lane_s32(vreinterpretq_s32_m128i(a), 0); - double a1 = (double) vgetq_lane_s32(vreinterpretq_s32_m128i(a), 1); - return _mm_set_pd(a1, a0); -#endif -} - -// Convert packed signed 32-bit integers in a to packed single-precision -// (32-bit) floating-point elements, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi32_ps -FORCE_INLINE __m128 _mm_cvtepi32_ps(__m128i a) -{ - return vreinterpretq_m128_f32(vcvtq_f32_s32(vreinterpretq_s32_m128i(a))); -} - -// Convert packed double-precision (64-bit) floating-point elements in a to -// packed 32-bit integers, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpd_epi32 -FORCE_INLINE __m128i _mm_cvtpd_epi32(__m128d a) -{ -// vrnd32xq_f64 not supported on clang -#if defined(__ARM_FEATURE_FRINT) && !defined(__clang__) - float64x2_t rounded = vrnd32xq_f64(vreinterpretq_f64_m128d(a)); - int64x2_t integers = vcvtq_s64_f64(rounded); - return vreinterpretq_m128i_s32( - vcombine_s32(vmovn_s64(integers), vdup_n_s32(0))); -#else - __m128d rnd = _mm_round_pd(a, _MM_FROUND_CUR_DIRECTION); - double d0, d1; - d0 = sse2neon_recast_u64_f64( - vgetq_lane_u64(vreinterpretq_u64_m128d(rnd), 0)); - d1 = sse2neon_recast_u64_f64( - vgetq_lane_u64(vreinterpretq_u64_m128d(rnd), 1)); - return _mm_set_epi32(0, 0, (int32_t) d1, (int32_t) d0); -#endif -} - -// Convert packed double-precision (64-bit) floating-point elements in a to -// packed 32-bit integers, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpd_pi32 -FORCE_INLINE __m64 _mm_cvtpd_pi32(__m128d a) -{ - __m128d rnd = _mm_round_pd(a, _MM_FROUND_CUR_DIRECTION); - double d0, d1; - d0 = sse2neon_recast_u64_f64( - vgetq_lane_u64(vreinterpretq_u64_m128d(rnd), 0)); - d1 = sse2neon_recast_u64_f64( - vgetq_lane_u64(vreinterpretq_u64_m128d(rnd), 1)); - int32_t ALIGN_STRUCT(16) data[2] = {(int32_t) d0, (int32_t) d1}; - return vreinterpret_m64_s32(vld1_s32(data)); -} - -// Convert packed double-precision (64-bit) floating-point elements in a to -// packed single-precision (32-bit) floating-point elements, and store the -// results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpd_ps -FORCE_INLINE __m128 _mm_cvtpd_ps(__m128d a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - float32x2_t tmp = vcvt_f32_f64(vreinterpretq_f64_m128d(a)); - return vreinterpretq_m128_f32(vcombine_f32(tmp, vdup_n_f32(0))); -#else - double a0, a1; - a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - return _mm_set_ps(0, 0, (float) a1, (float) a0); -#endif -} - -// Convert packed signed 32-bit integers in a to packed double-precision -// (64-bit) floating-point elements, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpi32_pd -FORCE_INLINE __m128d _mm_cvtpi32_pd(__m64 a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64( - vcvtq_f64_s64(vmovl_s32(vreinterpret_s32_m64(a)))); -#else - double a0 = (double) vget_lane_s32(vreinterpret_s32_m64(a), 0); - double a1 = (double) vget_lane_s32(vreinterpret_s32_m64(a), 1); - return _mm_set_pd(a1, a0); -#endif -} - -// Convert packed single-precision (32-bit) floating-point elements in a to -// packed 32-bit integers, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtps_epi32 -// *NOTE*. The default rounding mode on SSE is 'round to even', which ARMv7-A -// does not support! It is supported on ARMv8-A however. -FORCE_INLINE __m128i _mm_cvtps_epi32(__m128 a) -{ -#if defined(__ARM_FEATURE_FRINT) - return vreinterpretq_m128i_s32(vcvtq_s32_f32(vrnd32xq_f32(a))); -#elif (defined(__aarch64__) || defined(_M_ARM64)) || \ - defined(__ARM_FEATURE_DIRECTED_ROUNDING) - switch (_MM_GET_ROUNDING_MODE()) { - case _MM_ROUND_NEAREST: - return vreinterpretq_m128i_s32(vcvtnq_s32_f32(a)); - case _MM_ROUND_DOWN: - return vreinterpretq_m128i_s32(vcvtmq_s32_f32(a)); - case _MM_ROUND_UP: - return vreinterpretq_m128i_s32(vcvtpq_s32_f32(a)); - default: // _MM_ROUND_TOWARD_ZERO - return vreinterpretq_m128i_s32(vcvtq_s32_f32(a)); - } -#else - float *f = (float *) &a; - switch (_MM_GET_ROUNDING_MODE()) { - case _MM_ROUND_NEAREST: { - uint32x4_t signmask = vdupq_n_u32(0x80000000); - float32x4_t half = vbslq_f32(signmask, vreinterpretq_f32_m128(a), - vdupq_n_f32(0.5f)); /* +/- 0.5 */ - int32x4_t r_normal = vcvtq_s32_f32(vaddq_f32( - vreinterpretq_f32_m128(a), half)); /* round to integer: [a + 0.5]*/ - int32x4_t r_trunc = vcvtq_s32_f32( - vreinterpretq_f32_m128(a)); /* truncate to integer: [a] */ - int32x4_t plusone = vreinterpretq_s32_u32(vshrq_n_u32( - vreinterpretq_u32_s32(vnegq_s32(r_trunc)), 31)); /* 1 or 0 */ - int32x4_t r_even = vbicq_s32(vaddq_s32(r_trunc, plusone), - vdupq_n_s32(1)); /* ([a] + {0,1}) & ~1 */ - float32x4_t delta = vsubq_f32( - vreinterpretq_f32_m128(a), - vcvtq_f32_s32(r_trunc)); /* compute delta: delta = (a - [a]) */ - uint32x4_t is_delta_half = - vceqq_f32(delta, half); /* delta == +/- 0.5 */ - return vreinterpretq_m128i_s32( - vbslq_s32(is_delta_half, r_even, r_normal)); - } - case _MM_ROUND_DOWN: - return _mm_set_epi32(floorf(f[3]), floorf(f[2]), floorf(f[1]), - floorf(f[0])); - case _MM_ROUND_UP: - return _mm_set_epi32(ceilf(f[3]), ceilf(f[2]), ceilf(f[1]), - ceilf(f[0])); - default: // _MM_ROUND_TOWARD_ZERO - return _mm_set_epi32((int32_t) f[3], (int32_t) f[2], (int32_t) f[1], - (int32_t) f[0]); - } -#endif -} - -// Convert packed single-precision (32-bit) floating-point elements in a to -// packed double-precision (64-bit) floating-point elements, and store the -// results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtps_pd -FORCE_INLINE __m128d _mm_cvtps_pd(__m128 a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64( - vcvt_f64_f32(vget_low_f32(vreinterpretq_f32_m128(a)))); -#else - double a0 = (double) vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); - double a1 = (double) vgetq_lane_f32(vreinterpretq_f32_m128(a), 1); - return _mm_set_pd(a1, a0); -#endif -} - -// Copy the lower double-precision (64-bit) floating-point element of a to dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsd_f64 -FORCE_INLINE double _mm_cvtsd_f64(__m128d a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return (double) vgetq_lane_f64(vreinterpretq_f64_m128d(a), 0); -#else - double _a = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - return _a; -#endif -} - -// Convert the lower double-precision (64-bit) floating-point element in a to a -// 32-bit integer, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsd_si32 -FORCE_INLINE int32_t _mm_cvtsd_si32(__m128d a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return (int32_t) vgetq_lane_f64(vrndiq_f64(vreinterpretq_f64_m128d(a)), 0); -#else - __m128d rnd = _mm_round_pd(a, _MM_FROUND_CUR_DIRECTION); - double ret = sse2neon_recast_u64_f64( - vgetq_lane_u64(vreinterpretq_u64_m128d(rnd), 0)); - return (int32_t) ret; -#endif -} - -// Convert the lower double-precision (64-bit) floating-point element in a to a -// 64-bit integer, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsd_si64 -FORCE_INLINE int64_t _mm_cvtsd_si64(__m128d a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return (int64_t) vgetq_lane_f64(vrndiq_f64(vreinterpretq_f64_m128d(a)), 0); -#else - __m128d rnd = _mm_round_pd(a, _MM_FROUND_CUR_DIRECTION); - double ret = sse2neon_recast_u64_f64( - vgetq_lane_u64(vreinterpretq_u64_m128d(rnd), 0)); - return (int64_t) ret; -#endif -} - -// Convert the lower double-precision (64-bit) floating-point element in a to a -// 64-bit integer, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsd_si64x -#define _mm_cvtsd_si64x _mm_cvtsd_si64 - -// Convert the lower double-precision (64-bit) floating-point element in b to a -// single-precision (32-bit) floating-point element, store the result in the -// lower element of dst, and copy the upper 3 packed elements from a to the -// upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsd_ss -FORCE_INLINE __m128 _mm_cvtsd_ss(__m128 a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128_f32(vsetq_lane_f32( - vget_lane_f32(vcvt_f32_f64(vreinterpretq_f64_m128d(b)), 0), - vreinterpretq_f32_m128(a), 0)); -#else - double b0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - return vreinterpretq_m128_f32( - vsetq_lane_f32((float) b0, vreinterpretq_f32_m128(a), 0)); -#endif -} - -// Copy the lower 32-bit integer in a to dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi128_si32 -FORCE_INLINE int _mm_cvtsi128_si32(__m128i a) -{ - return vgetq_lane_s32(vreinterpretq_s32_m128i(a), 0); -} - -// Copy the lower 64-bit integer in a to dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi128_si64 -FORCE_INLINE int64_t _mm_cvtsi128_si64(__m128i a) -{ - return vgetq_lane_s64(vreinterpretq_s64_m128i(a), 0); -} - -// Copy the lower 64-bit integer in a to dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi128_si64x -#define _mm_cvtsi128_si64x(a) _mm_cvtsi128_si64(a) - -// Convert the signed 32-bit integer b to a double-precision (64-bit) -// floating-point element, store the result in the lower element of dst, and -// copy the upper element from a to the upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi32_sd -FORCE_INLINE __m128d _mm_cvtsi32_sd(__m128d a, int32_t b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64( - vsetq_lane_f64((double) b, vreinterpretq_f64_m128d(a), 0)); -#else - int64_t _b = sse2neon_recast_f64_s64((double) b); - return vreinterpretq_m128d_s64( - vsetq_lane_s64(_b, vreinterpretq_s64_m128d(a), 0)); -#endif -} - -// Copy the lower 64-bit integer in a to dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi128_si64x -#define _mm_cvtsi128_si64x(a) _mm_cvtsi128_si64(a) - -// Copy 32-bit integer a to the lower elements of dst, and zero the upper -// elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi32_si128 -FORCE_INLINE __m128i _mm_cvtsi32_si128(int a) -{ - return vreinterpretq_m128i_s32(vsetq_lane_s32(a, vdupq_n_s32(0), 0)); -} - -// Convert the signed 64-bit integer b to a double-precision (64-bit) -// floating-point element, store the result in the lower element of dst, and -// copy the upper element from a to the upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64_sd -FORCE_INLINE __m128d _mm_cvtsi64_sd(__m128d a, int64_t b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64( - vsetq_lane_f64((double) b, vreinterpretq_f64_m128d(a), 0)); -#else - int64_t _b = sse2neon_recast_f64_s64((double) b); - return vreinterpretq_m128d_s64( - vsetq_lane_s64(_b, vreinterpretq_s64_m128d(a), 0)); -#endif -} - -// Copy 64-bit integer a to the lower element of dst, and zero the upper -// element. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64_si128 -FORCE_INLINE __m128i _mm_cvtsi64_si128(int64_t a) -{ - return vreinterpretq_m128i_s64(vsetq_lane_s64(a, vdupq_n_s64(0), 0)); -} - -// Copy 64-bit integer a to the lower element of dst, and zero the upper -// element. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64x_si128 -#define _mm_cvtsi64x_si128(a) _mm_cvtsi64_si128(a) - -// Convert the signed 64-bit integer b to a double-precision (64-bit) -// floating-point element, store the result in the lower element of dst, and -// copy the upper element from a to the upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64x_sd -#define _mm_cvtsi64x_sd(a, b) _mm_cvtsi64_sd(a, b) - -// Convert the lower single-precision (32-bit) floating-point element in b to a -// double-precision (64-bit) floating-point element, store the result in the -// lower element of dst, and copy the upper element from a to the upper element -// of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtss_sd -FORCE_INLINE __m128d _mm_cvtss_sd(__m128d a, __m128 b) -{ - double d = (double) vgetq_lane_f32(vreinterpretq_f32_m128(b), 0); -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64( - vsetq_lane_f64(d, vreinterpretq_f64_m128d(a), 0)); -#else - return vreinterpretq_m128d_s64(vsetq_lane_s64( - sse2neon_recast_f64_s64(d), vreinterpretq_s64_m128d(a), 0)); -#endif -} - -// Convert packed double-precision (64-bit) floating-point elements in a to -// packed 32-bit integers with truncation, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttpd_epi32 -FORCE_INLINE __m128i _mm_cvttpd_epi32(__m128d a) -{ - double a0, a1; - a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - return _mm_set_epi32(0, 0, (int32_t) a1, (int32_t) a0); -} - -// Convert packed double-precision (64-bit) floating-point elements in a to -// packed 32-bit integers with truncation, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttpd_pi32 -FORCE_INLINE __m64 _mm_cvttpd_pi32(__m128d a) -{ - double a0, a1; - a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - int32_t ALIGN_STRUCT(16) data[2] = {(int32_t) a0, (int32_t) a1}; - return vreinterpret_m64_s32(vld1_s32(data)); -} - -// Convert packed single-precision (32-bit) floating-point elements in a to -// packed 32-bit integers with truncation, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttps_epi32 -FORCE_INLINE __m128i _mm_cvttps_epi32(__m128 a) -{ - return vreinterpretq_m128i_s32(vcvtq_s32_f32(vreinterpretq_f32_m128(a))); -} - -// Convert the lower double-precision (64-bit) floating-point element in a to a -// 32-bit integer with truncation, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttsd_si32 -FORCE_INLINE int32_t _mm_cvttsd_si32(__m128d a) -{ - double _a = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - return (int32_t) _a; -} - -// Convert the lower double-precision (64-bit) floating-point element in a to a -// 64-bit integer with truncation, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttsd_si64 -FORCE_INLINE int64_t _mm_cvttsd_si64(__m128d a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vgetq_lane_s64(vcvtq_s64_f64(vreinterpretq_f64_m128d(a)), 0); -#else - double _a = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - return (int64_t) _a; -#endif -} - -// Convert the lower double-precision (64-bit) floating-point element in a to a -// 64-bit integer with truncation, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttsd_si64x -#define _mm_cvttsd_si64x(a) _mm_cvttsd_si64(a) - -// Divide packed double-precision (64-bit) floating-point elements in a by -// packed elements in b, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_div_pd -FORCE_INLINE __m128d _mm_div_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64( - vdivq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); -#else - double a0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - double a1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - double b0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double b1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); - double c[2]; - c[0] = a0 / b0; - c[1] = a1 / b1; - return vld1q_f32((float32_t *) c); -#endif -} - -// Divide the lower double-precision (64-bit) floating-point element in a by the -// lower double-precision (64-bit) floating-point element in b, store the result -// in the lower element of dst, and copy the upper element from a to the upper -// element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_div_sd -FORCE_INLINE __m128d _mm_div_sd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - float64x2_t tmp = - vdivq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b)); - return vreinterpretq_m128d_f64( - vsetq_lane_f64(vgetq_lane_f64(vreinterpretq_f64_m128d(a), 1), tmp, 1)); -#else - return _mm_move_sd(a, _mm_div_pd(a, b)); -#endif -} - -// Extract a 16-bit integer from a, selected with imm8, and store the result in -// the lower element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_epi16 -// FORCE_INLINE int _mm_extract_epi16(__m128i a, __constrange(0,8) int imm) -#define _mm_extract_epi16(a, imm) \ - vgetq_lane_u16(vreinterpretq_u16_m128i(a), (imm)) - -// Copy a to dst, and insert the 16-bit integer i into dst at the location -// specified by imm8. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_insert_epi16 -// FORCE_INLINE __m128i _mm_insert_epi16(__m128i a, int b, -// __constrange(0,8) int imm) -#define _mm_insert_epi16(a, b, imm) \ - vreinterpretq_m128i_s16( \ - vsetq_lane_s16((b), vreinterpretq_s16_m128i(a), (imm))) - -// Load 128-bits (composed of 2 packed double-precision (64-bit) floating-point -// elements) from memory into dst. mem_addr must be aligned on a 16-byte -// boundary or a general-protection exception may be generated. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_pd -FORCE_INLINE __m128d _mm_load_pd(const double *p) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64(vld1q_f64(p)); -#else - const float *fp = (const float *) p; - float ALIGN_STRUCT(16) data[4] = {fp[0], fp[1], fp[2], fp[3]}; - return vreinterpretq_m128d_f32(vld1q_f32(data)); -#endif -} - -// Load a double-precision (64-bit) floating-point element from memory into both -// elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_pd1 -#define _mm_load_pd1 _mm_load1_pd - -// Load a double-precision (64-bit) floating-point element from memory into the -// lower of dst, and zero the upper element. mem_addr does not need to be -// aligned on any particular boundary. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_sd -FORCE_INLINE __m128d _mm_load_sd(const double *p) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64(vsetq_lane_f64(*p, vdupq_n_f64(0), 0)); -#else - const float *fp = (const float *) p; - float ALIGN_STRUCT(16) data[4] = {fp[0], fp[1], 0, 0}; - return vreinterpretq_m128d_f32(vld1q_f32(data)); -#endif -} - -// Load 128-bits of integer data from memory into dst. mem_addr must be aligned -// on a 16-byte boundary or a general-protection exception may be generated. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_si128 -FORCE_INLINE __m128i _mm_load_si128(const __m128i *p) -{ - return vreinterpretq_m128i_s32(vld1q_s32((const int32_t *) p)); -} - -// Load a double-precision (64-bit) floating-point element from memory into both -// elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load1_pd -FORCE_INLINE __m128d _mm_load1_pd(const double *p) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64(vld1q_dup_f64(p)); -#else - return vreinterpretq_m128d_s64(vdupq_n_s64(*(const int64_t *) p)); -#endif -} - -// Load a double-precision (64-bit) floating-point element from memory into the -// upper element of dst, and copy the lower element from a to dst. mem_addr does -// not need to be aligned on any particular boundary. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadh_pd -FORCE_INLINE __m128d _mm_loadh_pd(__m128d a, const double *p) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64( - vcombine_f64(vget_low_f64(vreinterpretq_f64_m128d(a)), vld1_f64(p))); -#else - return vreinterpretq_m128d_f32(vcombine_f32( - vget_low_f32(vreinterpretq_f32_m128d(a)), vld1_f32((const float *) p))); -#endif -} - -// Load 64-bit integer from memory into the first element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadl_epi64 -FORCE_INLINE __m128i _mm_loadl_epi64(__m128i const *p) -{ - /* Load the lower 64 bits of the value pointed to by p into the - * lower 64 bits of the result, zeroing the upper 64 bits of the result. - */ - return vreinterpretq_m128i_s32( - vcombine_s32(vld1_s32((int32_t const *) p), vcreate_s32(0))); -} - -// Load a double-precision (64-bit) floating-point element from memory into the -// lower element of dst, and copy the upper element from a to dst. mem_addr does -// not need to be aligned on any particular boundary. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadl_pd -FORCE_INLINE __m128d _mm_loadl_pd(__m128d a, const double *p) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64( - vcombine_f64(vld1_f64(p), vget_high_f64(vreinterpretq_f64_m128d(a)))); -#else - return vreinterpretq_m128d_f32( - vcombine_f32(vld1_f32((const float *) p), - vget_high_f32(vreinterpretq_f32_m128d(a)))); -#endif -} - -// Load 2 double-precision (64-bit) floating-point elements from memory into dst -// in reverse order. mem_addr must be aligned on a 16-byte boundary or a -// general-protection exception may be generated. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadr_pd -FORCE_INLINE __m128d _mm_loadr_pd(const double *p) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - float64x2_t v = vld1q_f64(p); - return vreinterpretq_m128d_f64(vextq_f64(v, v, 1)); -#else - int64x2_t v = vld1q_s64((const int64_t *) p); - return vreinterpretq_m128d_s64(vextq_s64(v, v, 1)); -#endif -} - -// Loads two double-precision from unaligned memory, floating-point values. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_pd -FORCE_INLINE __m128d _mm_loadu_pd(const double *p) -{ - return _mm_load_pd(p); -} - -// Load 128-bits of integer data from memory into dst. mem_addr does not need to -// be aligned on any particular boundary. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_si128 -FORCE_INLINE __m128i _mm_loadu_si128(const __m128i *p) -{ - return vreinterpretq_m128i_s32(vld1q_s32((const unaligned_int32_t *) p)); -} - -// Load unaligned 32-bit integer from memory into the first element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_si32 -FORCE_INLINE __m128i _mm_loadu_si32(const void *p) -{ - return vreinterpretq_m128i_s32( - vsetq_lane_s32(*(const unaligned_int32_t *) p, vdupq_n_s32(0), 0)); -} - -// Multiply packed signed 16-bit integers in a and b, producing intermediate -// signed 32-bit integers. Horizontally add adjacent pairs of intermediate -// 32-bit integers, and pack the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_madd_epi16 -FORCE_INLINE __m128i _mm_madd_epi16(__m128i a, __m128i b) -{ - int32x4_t low = vmull_s16(vget_low_s16(vreinterpretq_s16_m128i(a)), - vget_low_s16(vreinterpretq_s16_m128i(b))); -#if defined(__aarch64__) || defined(_M_ARM64) - int32x4_t high = - vmull_high_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b)); - - return vreinterpretq_m128i_s32(vpaddq_s32(low, high)); -#else - int32x4_t high = vmull_s16(vget_high_s16(vreinterpretq_s16_m128i(a)), - vget_high_s16(vreinterpretq_s16_m128i(b))); - - int32x2_t low_sum = vpadd_s32(vget_low_s32(low), vget_high_s32(low)); - int32x2_t high_sum = vpadd_s32(vget_low_s32(high), vget_high_s32(high)); - - return vreinterpretq_m128i_s32(vcombine_s32(low_sum, high_sum)); -#endif -} - -// Conditionally store 8-bit integer elements from a into memory using mask -// (elements are not stored when the highest bit is not set in the corresponding -// element) and a non-temporal memory hint. mem_addr does not need to be aligned -// on any particular boundary. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskmoveu_si128 -FORCE_INLINE void _mm_maskmoveu_si128(__m128i a, __m128i mask, char *mem_addr) -{ - int8x16_t shr_mask = vshrq_n_s8(vreinterpretq_s8_m128i(mask), 7); - __m128 b = _mm_load_ps((const float *) mem_addr); - int8x16_t masked = - vbslq_s8(vreinterpretq_u8_s8(shr_mask), vreinterpretq_s8_m128i(a), - vreinterpretq_s8_m128(b)); - vst1q_s8((int8_t *) mem_addr, masked); -} - -// Compare packed signed 16-bit integers in a and b, and store packed maximum -// values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epi16 -FORCE_INLINE __m128i _mm_max_epi16(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s16( - vmaxq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); -} - -// Compare packed unsigned 8-bit integers in a and b, and store packed maximum -// values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epu8 -FORCE_INLINE __m128i _mm_max_epu8(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u8( - vmaxq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); -} - -// Compare packed double-precision (64-bit) floating-point elements in a and b, -// and store packed maximum values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_pd -FORCE_INLINE __m128d _mm_max_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) -#if SSE2NEON_PRECISE_MINMAX - float64x2_t _a = vreinterpretq_f64_m128d(a); - float64x2_t _b = vreinterpretq_f64_m128d(b); - return vreinterpretq_m128d_f64(vbslq_f64(vcgtq_f64(_a, _b), _a, _b)); -#else - return vreinterpretq_m128d_f64( - vmaxq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); -#endif -#else - double a0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - double a1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - double b0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double b1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); - int64_t d[2]; - d[0] = a0 > b0 ? sse2neon_recast_f64_s64(a0) : sse2neon_recast_f64_s64(b0); - d[1] = a1 > b1 ? sse2neon_recast_f64_s64(a1) : sse2neon_recast_f64_s64(b1); - - return vreinterpretq_m128d_s64(vld1q_s64(d)); -#endif -} - -// Compare the lower double-precision (64-bit) floating-point elements in a and -// b, store the maximum value in the lower element of dst, and copy the upper -// element from a to the upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_sd -FORCE_INLINE __m128d _mm_max_sd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return _mm_move_sd(a, _mm_max_pd(a, b)); -#else - double a0, a1, b0; - a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double c[2] = {a0 > b0 ? a0 : b0, a1}; - return vreinterpretq_m128d_f32(vld1q_f32((float32_t *) c)); -#endif -} - -// Compare packed signed 16-bit integers in a and b, and store packed minimum -// values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_epi16 -FORCE_INLINE __m128i _mm_min_epi16(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s16( - vminq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); -} - -// Compare packed unsigned 8-bit integers in a and b, and store packed minimum -// values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_epu8 -FORCE_INLINE __m128i _mm_min_epu8(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u8( - vminq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); -} - -// Compare packed double-precision (64-bit) floating-point elements in a and b, -// and store packed minimum values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_pd -FORCE_INLINE __m128d _mm_min_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) -#if SSE2NEON_PRECISE_MINMAX - float64x2_t _a = vreinterpretq_f64_m128d(a); - float64x2_t _b = vreinterpretq_f64_m128d(b); - return vreinterpretq_m128d_f64(vbslq_f64(vcltq_f64(_a, _b), _a, _b)); -#else - return vreinterpretq_m128d_f64( - vminq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); -#endif -#else - double a0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - double a1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - double b0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double b1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); - int64_t d[2]; - d[0] = a0 < b0 ? sse2neon_recast_f64_s64(a0) : sse2neon_recast_f64_s64(b0); - d[1] = a1 < b1 ? sse2neon_recast_f64_s64(a1) : sse2neon_recast_f64_s64(b1); - return vreinterpretq_m128d_s64(vld1q_s64(d)); -#endif -} - -// Compare the lower double-precision (64-bit) floating-point elements in a and -// b, store the minimum value in the lower element of dst, and copy the upper -// element from a to the upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_sd -FORCE_INLINE __m128d _mm_min_sd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return _mm_move_sd(a, _mm_min_pd(a, b)); -#else - double a0, a1, b0; - a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double c[2] = {a0 < b0 ? a0 : b0, a1}; - return vreinterpretq_m128d_f32(vld1q_f32((float32_t *) c)); -#endif -} - -// Copy the lower 64-bit integer in a to the lower element of dst, and zero the -// upper element. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_move_epi64 -FORCE_INLINE __m128i _mm_move_epi64(__m128i a) -{ - return vreinterpretq_m128i_s64( - vsetq_lane_s64(0, vreinterpretq_s64_m128i(a), 1)); -} - -// Move the lower double-precision (64-bit) floating-point element from b to the -// lower element of dst, and copy the upper element from a to the upper element -// of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_move_sd -FORCE_INLINE __m128d _mm_move_sd(__m128d a, __m128d b) -{ - return vreinterpretq_m128d_f32( - vcombine_f32(vget_low_f32(vreinterpretq_f32_m128d(b)), - vget_high_f32(vreinterpretq_f32_m128d(a)))); -} - -// Create mask from the most significant bit of each 8-bit element in a, and -// store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movemask_epi8 -FORCE_INLINE int _mm_movemask_epi8(__m128i a) -{ - // Use increasingly wide shifts+adds to collect the sign bits - // together. - // Since the widening shifts would be rather confusing to follow in little - // endian, everything will be illustrated in big endian order instead. This - // has a different result - the bits would actually be reversed on a big - // endian machine. - - // Starting input (only half the elements are shown): - // 89 ff 1d c0 00 10 99 33 - uint8x16_t input = vreinterpretq_u8_m128i(a); - - // Shift out everything but the sign bits with an unsigned shift right. - // - // Bytes of the vector:: - // 89 ff 1d c0 00 10 99 33 - // \ \ \ \ \ \ \ \ high_bits = (uint16x4_t)(input >> 7) - // | | | | | | | | - // 01 01 00 01 00 00 01 00 - // - // Bits of first important lane(s): - // 10001001 (89) - // \______ - // | - // 00000001 (01) - uint16x8_t high_bits = vreinterpretq_u16_u8(vshrq_n_u8(input, 7)); - - // Merge the even lanes together with a 16-bit unsigned shift right + add. - // 'xx' represents garbage data which will be ignored in the final result. - // In the important bytes, the add functions like a binary OR. - // - // 01 01 00 01 00 00 01 00 - // \_ | \_ | \_ | \_ | paired16 = (uint32x4_t)(input + (input >> 7)) - // \| \| \| \| - // xx 03 xx 01 xx 00 xx 02 - // - // 00000001 00000001 (01 01) - // \_______ | - // \| - // xxxxxxxx xxxxxx11 (xx 03) - uint32x4_t paired16 = - vreinterpretq_u32_u16(vsraq_n_u16(high_bits, high_bits, 7)); - - // Repeat with a wider 32-bit shift + add. - // xx 03 xx 01 xx 00 xx 02 - // \____ | \____ | paired32 = (uint64x1_t)(paired16 + (paired16 >> - // 14)) - // \| \| - // xx xx xx 0d xx xx xx 02 - // - // 00000011 00000001 (03 01) - // \\_____ || - // '----.\|| - // xxxxxxxx xxxx1101 (xx 0d) - uint64x2_t paired32 = - vreinterpretq_u64_u32(vsraq_n_u32(paired16, paired16, 14)); - - // Last, an even wider 64-bit shift + add to get our result in the low 8 bit - // lanes. xx xx xx 0d xx xx xx 02 - // \_________ | paired64 = (uint8x8_t)(paired32 + (paired32 >> - // 28)) - // \| - // xx xx xx xx xx xx xx d2 - // - // 00001101 00000010 (0d 02) - // \ \___ | | - // '---. \| | - // xxxxxxxx 11010010 (xx d2) - uint8x16_t paired64 = - vreinterpretq_u8_u64(vsraq_n_u64(paired32, paired32, 28)); - - // Extract the low 8 bits from each 64-bit lane with 2 8-bit extracts. - // xx xx xx xx xx xx xx d2 - // || return paired64[0] - // d2 - // Note: Little endian would return the correct value 4b (01001011) instead. - return vgetq_lane_u8(paired64, 0) | ((int) vgetq_lane_u8(paired64, 8) << 8); -} - -// Set each bit of mask dst based on the most significant bit of the -// corresponding packed double-precision (64-bit) floating-point element in a. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movemask_pd -FORCE_INLINE int _mm_movemask_pd(__m128d a) -{ - uint64x2_t input = vreinterpretq_u64_m128d(a); - uint64x2_t high_bits = vshrq_n_u64(input, 63); - return (int) (vgetq_lane_u64(high_bits, 0) | - (vgetq_lane_u64(high_bits, 1) << 1)); -} - -// Copy the lower 64-bit integer in a to dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movepi64_pi64 -FORCE_INLINE __m64 _mm_movepi64_pi64(__m128i a) -{ - return vreinterpret_m64_s64(vget_low_s64(vreinterpretq_s64_m128i(a))); -} - -// Copy the 64-bit integer a to the lower element of dst, and zero the upper -// element. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movpi64_epi64 -FORCE_INLINE __m128i _mm_movpi64_epi64(__m64 a) -{ - return vreinterpretq_m128i_s64( - vcombine_s64(vreinterpret_s64_m64(a), vdup_n_s64(0))); -} - -// Multiply the low unsigned 32-bit integers from each packed 64-bit element in -// a and b, and store the unsigned 64-bit results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_epu32 -FORCE_INLINE __m128i _mm_mul_epu32(__m128i a, __m128i b) -{ - // vmull_u32 upcasts instead of masking, so we downcast. - uint32x2_t a_lo = vmovn_u64(vreinterpretq_u64_m128i(a)); - uint32x2_t b_lo = vmovn_u64(vreinterpretq_u64_m128i(b)); - return vreinterpretq_m128i_u64(vmull_u32(a_lo, b_lo)); -} - -// Multiply packed double-precision (64-bit) floating-point elements in a and b, -// and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_pd -FORCE_INLINE __m128d _mm_mul_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64( - vmulq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); -#else - double a0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - double a1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - double b0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double b1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); - double c[2]; - c[0] = a0 * b0; - c[1] = a1 * b1; - return vld1q_f32((float32_t *) c); -#endif -} - -// Multiply the lower double-precision (64-bit) floating-point element in a and -// b, store the result in the lower element of dst, and copy the upper element -// from a to the upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_mul_sd -FORCE_INLINE __m128d _mm_mul_sd(__m128d a, __m128d b) -{ - return _mm_move_sd(a, _mm_mul_pd(a, b)); -} - -// Multiply the low unsigned 32-bit integers from a and b, and store the -// unsigned 64-bit result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_su32 -FORCE_INLINE __m64 _mm_mul_su32(__m64 a, __m64 b) -{ - return vreinterpret_m64_u64(vget_low_u64( - vmull_u32(vreinterpret_u32_m64(a), vreinterpret_u32_m64(b)))); -} - -// Multiply the packed signed 16-bit integers in a and b, producing intermediate -// 32-bit integers, and store the high 16 bits of the intermediate integers in -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mulhi_epi16 -FORCE_INLINE __m128i _mm_mulhi_epi16(__m128i a, __m128i b) -{ - /* FIXME: issue with large values because of result saturation */ - // int16x8_t ret = vqdmulhq_s16(vreinterpretq_s16_m128i(a), - // vreinterpretq_s16_m128i(b)); /* =2*a*b */ return - // vreinterpretq_m128i_s16(vshrq_n_s16(ret, 1)); - int16x4_t a3210 = vget_low_s16(vreinterpretq_s16_m128i(a)); - int16x4_t b3210 = vget_low_s16(vreinterpretq_s16_m128i(b)); - int32x4_t ab3210 = vmull_s16(a3210, b3210); /* 3333222211110000 */ - int16x4_t a7654 = vget_high_s16(vreinterpretq_s16_m128i(a)); - int16x4_t b7654 = vget_high_s16(vreinterpretq_s16_m128i(b)); - int32x4_t ab7654 = vmull_s16(a7654, b7654); /* 7777666655554444 */ - uint16x8x2_t r = - vuzpq_u16(vreinterpretq_u16_s32(ab3210), vreinterpretq_u16_s32(ab7654)); - return vreinterpretq_m128i_u16(r.val[1]); -} - -// Multiply the packed unsigned 16-bit integers in a and b, producing -// intermediate 32-bit integers, and store the high 16 bits of the intermediate -// integers in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mulhi_epu16 -FORCE_INLINE __m128i _mm_mulhi_epu16(__m128i a, __m128i b) -{ - uint16x4_t a3210 = vget_low_u16(vreinterpretq_u16_m128i(a)); - uint16x4_t b3210 = vget_low_u16(vreinterpretq_u16_m128i(b)); - uint32x4_t ab3210 = vmull_u16(a3210, b3210); -#if defined(__aarch64__) || defined(_M_ARM64) - uint32x4_t ab7654 = - vmull_high_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b)); - uint16x8_t r = vuzp2q_u16(vreinterpretq_u16_u32(ab3210), - vreinterpretq_u16_u32(ab7654)); - return vreinterpretq_m128i_u16(r); -#else - uint16x4_t a7654 = vget_high_u16(vreinterpretq_u16_m128i(a)); - uint16x4_t b7654 = vget_high_u16(vreinterpretq_u16_m128i(b)); - uint32x4_t ab7654 = vmull_u16(a7654, b7654); - uint16x8x2_t r = - vuzpq_u16(vreinterpretq_u16_u32(ab3210), vreinterpretq_u16_u32(ab7654)); - return vreinterpretq_m128i_u16(r.val[1]); -#endif -} - -// Multiply the packed 16-bit integers in a and b, producing intermediate 32-bit -// integers, and store the low 16 bits of the intermediate integers in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mullo_epi16 -FORCE_INLINE __m128i _mm_mullo_epi16(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s16( - vmulq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); -} - -// Compute the bitwise OR of packed double-precision (64-bit) floating-point -// elements in a and b, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_or_pd -FORCE_INLINE __m128d _mm_or_pd(__m128d a, __m128d b) -{ - return vreinterpretq_m128d_s64( - vorrq_s64(vreinterpretq_s64_m128d(a), vreinterpretq_s64_m128d(b))); -} - -// Compute the bitwise OR of 128 bits (representing integer data) in a and b, -// and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_or_si128 -FORCE_INLINE __m128i _mm_or_si128(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s32( - vorrq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); -} - -// Convert packed signed 16-bit integers from a and b to packed 8-bit integers -// using signed saturation, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_packs_epi16 -FORCE_INLINE __m128i _mm_packs_epi16(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s8( - vcombine_s8(vqmovn_s16(vreinterpretq_s16_m128i(a)), - vqmovn_s16(vreinterpretq_s16_m128i(b)))); -} - -// Convert packed signed 32-bit integers from a and b to packed 16-bit integers -// using signed saturation, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_packs_epi32 -FORCE_INLINE __m128i _mm_packs_epi32(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s16( - vcombine_s16(vqmovn_s32(vreinterpretq_s32_m128i(a)), - vqmovn_s32(vreinterpretq_s32_m128i(b)))); -} - -// Convert packed signed 16-bit integers from a and b to packed 8-bit integers -// using unsigned saturation, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_packus_epi16 -FORCE_INLINE __m128i _mm_packus_epi16(const __m128i a, const __m128i b) -{ - return vreinterpretq_m128i_u8( - vcombine_u8(vqmovun_s16(vreinterpretq_s16_m128i(a)), - vqmovun_s16(vreinterpretq_s16_m128i(b)))); -} - -// Pause the processor. This is typically used in spin-wait loops and depending -// on the x86 processor typical values are in the 40-100 cycle range. The -// 'yield' instruction isn't a good fit because it's effectively a nop on most -// Arm cores. Experience with several databases has shown has shown an 'isb' is -// a reasonable approximation. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_pause -FORCE_INLINE void _mm_pause(void) -{ -#if defined(_MSC_VER) && !defined(__clang__) - __isb(_ARM64_BARRIER_SY); -#else - __asm__ __volatile__("isb\n"); -#endif -} - -// Compute the absolute differences of packed unsigned 8-bit integers in a and -// b, then horizontally sum each consecutive 8 differences to produce two -// unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low -// 16 bits of 64-bit elements in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sad_epu8 -FORCE_INLINE __m128i _mm_sad_epu8(__m128i a, __m128i b) -{ - uint16x8_t t = vpaddlq_u8(vabdq_u8((uint8x16_t) a, (uint8x16_t) b)); - return vreinterpretq_m128i_u64(vpaddlq_u32(vpaddlq_u16(t))); -} - -// Set packed 16-bit integers in dst with the supplied values. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_epi16 -FORCE_INLINE __m128i _mm_set_epi16(short i7, - short i6, - short i5, - short i4, - short i3, - short i2, - short i1, - short i0) -{ - int16_t ALIGN_STRUCT(16) data[8] = {i0, i1, i2, i3, i4, i5, i6, i7}; - return vreinterpretq_m128i_s16(vld1q_s16(data)); -} - -// Set packed 32-bit integers in dst with the supplied values. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_epi32 -FORCE_INLINE __m128i _mm_set_epi32(int i3, int i2, int i1, int i0) -{ - int32_t ALIGN_STRUCT(16) data[4] = {i0, i1, i2, i3}; - return vreinterpretq_m128i_s32(vld1q_s32(data)); -} - -// Set packed 64-bit integers in dst with the supplied values. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_epi64 -FORCE_INLINE __m128i _mm_set_epi64(__m64 i1, __m64 i2) -{ - return _mm_set_epi64x(vget_lane_s64(i1, 0), vget_lane_s64(i2, 0)); -} - -// Set packed 64-bit integers in dst with the supplied values. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_epi64x -FORCE_INLINE __m128i _mm_set_epi64x(int64_t i1, int64_t i2) -{ - return vreinterpretq_m128i_s64( - vcombine_s64(vcreate_s64(i2), vcreate_s64(i1))); -} - -// Set packed 8-bit integers in dst with the supplied values. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_epi8 -FORCE_INLINE __m128i _mm_set_epi8(signed char b15, - signed char b14, - signed char b13, - signed char b12, - signed char b11, - signed char b10, - signed char b9, - signed char b8, - signed char b7, - signed char b6, - signed char b5, - signed char b4, - signed char b3, - signed char b2, - signed char b1, - signed char b0) -{ - int8_t ALIGN_STRUCT(16) data[16] = { - (int8_t) b0, (int8_t) b1, (int8_t) b2, (int8_t) b3, - (int8_t) b4, (int8_t) b5, (int8_t) b6, (int8_t) b7, - (int8_t) b8, (int8_t) b9, (int8_t) b10, (int8_t) b11, - (int8_t) b12, (int8_t) b13, (int8_t) b14, (int8_t) b15}; - return (__m128i) vld1q_s8(data); -} - -// Set packed double-precision (64-bit) floating-point elements in dst with the -// supplied values. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_pd -FORCE_INLINE __m128d _mm_set_pd(double e1, double e0) -{ - double ALIGN_STRUCT(16) data[2] = {e0, e1}; -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64(vld1q_f64((float64_t *) data)); -#else - return vreinterpretq_m128d_f32(vld1q_f32((float32_t *) data)); -#endif -} - -// Broadcast double-precision (64-bit) floating-point value a to all elements of -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_pd1 -#define _mm_set_pd1 _mm_set1_pd - -// Copy double-precision (64-bit) floating-point element a to the lower element -// of dst, and zero the upper element. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_sd -FORCE_INLINE __m128d _mm_set_sd(double a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64(vsetq_lane_f64(a, vdupq_n_f64(0), 0)); -#else - return _mm_set_pd(0, a); -#endif -} - -// Broadcast 16-bit integer a to all elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_epi16 -FORCE_INLINE __m128i _mm_set1_epi16(short w) -{ - return vreinterpretq_m128i_s16(vdupq_n_s16(w)); -} - -// Broadcast 32-bit integer a to all elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_epi32 -FORCE_INLINE __m128i _mm_set1_epi32(int _i) -{ - return vreinterpretq_m128i_s32(vdupq_n_s32(_i)); -} - -// Broadcast 64-bit integer a to all elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_epi64 -FORCE_INLINE __m128i _mm_set1_epi64(__m64 _i) -{ - return vreinterpretq_m128i_s64(vdupq_lane_s64(_i, 0)); -} - -// Broadcast 64-bit integer a to all elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_epi64x -FORCE_INLINE __m128i _mm_set1_epi64x(int64_t _i) -{ - return vreinterpretq_m128i_s64(vdupq_n_s64(_i)); -} - -// Broadcast 8-bit integer a to all elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_epi8 -FORCE_INLINE __m128i _mm_set1_epi8(signed char w) -{ - return vreinterpretq_m128i_s8(vdupq_n_s8(w)); -} - -// Broadcast double-precision (64-bit) floating-point value a to all elements of -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_pd -FORCE_INLINE __m128d _mm_set1_pd(double d) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64(vdupq_n_f64(d)); -#else - int64_t _d = sse2neon_recast_f64_s64(d); - return vreinterpretq_m128d_s64(vdupq_n_s64(_d)); -#endif -} - -// Set packed 16-bit integers in dst with the supplied values in reverse order. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_epi16 -FORCE_INLINE __m128i _mm_setr_epi16(short w0, - short w1, - short w2, - short w3, - short w4, - short w5, - short w6, - short w7) -{ - int16_t ALIGN_STRUCT(16) data[8] = {w0, w1, w2, w3, w4, w5, w6, w7}; - return vreinterpretq_m128i_s16(vld1q_s16((int16_t *) data)); -} - -// Set packed 32-bit integers in dst with the supplied values in reverse order. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_epi32 -FORCE_INLINE __m128i _mm_setr_epi32(int i3, int i2, int i1, int i0) -{ - int32_t ALIGN_STRUCT(16) data[4] = {i3, i2, i1, i0}; - return vreinterpretq_m128i_s32(vld1q_s32(data)); -} - -// Set packed 64-bit integers in dst with the supplied values in reverse order. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_epi64 -FORCE_INLINE __m128i _mm_setr_epi64(__m64 e1, __m64 e0) -{ - return vreinterpretq_m128i_s64(vcombine_s64(e1, e0)); -} - -// Set packed 8-bit integers in dst with the supplied values in reverse order. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_epi8 -FORCE_INLINE __m128i _mm_setr_epi8(signed char b0, - signed char b1, - signed char b2, - signed char b3, - signed char b4, - signed char b5, - signed char b6, - signed char b7, - signed char b8, - signed char b9, - signed char b10, - signed char b11, - signed char b12, - signed char b13, - signed char b14, - signed char b15) -{ - int8_t ALIGN_STRUCT(16) data[16] = { - (int8_t) b0, (int8_t) b1, (int8_t) b2, (int8_t) b3, - (int8_t) b4, (int8_t) b5, (int8_t) b6, (int8_t) b7, - (int8_t) b8, (int8_t) b9, (int8_t) b10, (int8_t) b11, - (int8_t) b12, (int8_t) b13, (int8_t) b14, (int8_t) b15}; - return (__m128i) vld1q_s8(data); -} - -// Set packed double-precision (64-bit) floating-point elements in dst with the -// supplied values in reverse order. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_pd -FORCE_INLINE __m128d _mm_setr_pd(double e1, double e0) -{ - return _mm_set_pd(e0, e1); -} - -// Return vector of type __m128d with all elements set to zero. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setzero_pd -FORCE_INLINE __m128d _mm_setzero_pd(void) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64(vdupq_n_f64(0)); -#else - return vreinterpretq_m128d_f32(vdupq_n_f32(0)); -#endif -} - -// Return vector of type __m128i with all elements set to zero. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setzero_si128 -FORCE_INLINE __m128i _mm_setzero_si128(void) -{ - return vreinterpretq_m128i_s32(vdupq_n_s32(0)); -} - -// Shuffle 32-bit integers in a using the control in imm8, and store the results -// in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_epi32 -// FORCE_INLINE __m128i _mm_shuffle_epi32(__m128i a, -// __constrange(0,255) int imm) -#if defined(_sse2neon_shuffle) -#define _mm_shuffle_epi32(a, imm) \ - __extension__({ \ - int32x4_t _input = vreinterpretq_s32_m128i(a); \ - int32x4_t _shuf = \ - vshuffleq_s32(_input, _input, (imm) & (0x3), ((imm) >> 2) & 0x3, \ - ((imm) >> 4) & 0x3, ((imm) >> 6) & 0x3); \ - vreinterpretq_m128i_s32(_shuf); \ - }) -#else // generic -#define _mm_shuffle_epi32(a, imm) \ - _sse2neon_define1( \ - __m128i, a, __m128i ret; switch (imm) { \ - case _MM_SHUFFLE(1, 0, 3, 2): \ - ret = _mm_shuffle_epi_1032(_a); \ - break; \ - case _MM_SHUFFLE(2, 3, 0, 1): \ - ret = _mm_shuffle_epi_2301(_a); \ - break; \ - case _MM_SHUFFLE(0, 3, 2, 1): \ - ret = _mm_shuffle_epi_0321(_a); \ - break; \ - case _MM_SHUFFLE(2, 1, 0, 3): \ - ret = _mm_shuffle_epi_2103(_a); \ - break; \ - case _MM_SHUFFLE(1, 0, 1, 0): \ - ret = _mm_shuffle_epi_1010(_a); \ - break; \ - case _MM_SHUFFLE(1, 0, 0, 1): \ - ret = _mm_shuffle_epi_1001(_a); \ - break; \ - case _MM_SHUFFLE(0, 1, 0, 1): \ - ret = _mm_shuffle_epi_0101(_a); \ - break; \ - case _MM_SHUFFLE(2, 2, 1, 1): \ - ret = _mm_shuffle_epi_2211(_a); \ - break; \ - case _MM_SHUFFLE(0, 1, 2, 2): \ - ret = _mm_shuffle_epi_0122(_a); \ - break; \ - case _MM_SHUFFLE(3, 3, 3, 2): \ - ret = _mm_shuffle_epi_3332(_a); \ - break; \ - case _MM_SHUFFLE(0, 0, 0, 0): \ - ret = _mm_shuffle_epi32_splat(_a, 0); \ - break; \ - case _MM_SHUFFLE(1, 1, 1, 1): \ - ret = _mm_shuffle_epi32_splat(_a, 1); \ - break; \ - case _MM_SHUFFLE(2, 2, 2, 2): \ - ret = _mm_shuffle_epi32_splat(_a, 2); \ - break; \ - case _MM_SHUFFLE(3, 3, 3, 3): \ - ret = _mm_shuffle_epi32_splat(_a, 3); \ - break; \ - default: \ - ret = _mm_shuffle_epi32_default(_a, (imm)); \ - break; \ - } _sse2neon_return(ret);) -#endif - -// Shuffle double-precision (64-bit) floating-point elements using the control -// in imm8, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_pd -#ifdef _sse2neon_shuffle -#define _mm_shuffle_pd(a, b, imm8) \ - vreinterpretq_m128d_s64( \ - vshuffleq_s64(vreinterpretq_s64_m128d(a), vreinterpretq_s64_m128d(b), \ - imm8 & 0x1, ((imm8 & 0x2) >> 1) + 2)) -#else -#define _mm_shuffle_pd(a, b, imm8) \ - _mm_castsi128_pd(_mm_set_epi64x( \ - vgetq_lane_s64(vreinterpretq_s64_m128d(b), (imm8 & 0x2) >> 1), \ - vgetq_lane_s64(vreinterpretq_s64_m128d(a), imm8 & 0x1))) -#endif - -// FORCE_INLINE __m128i _mm_shufflehi_epi16(__m128i a, -// __constrange(0,255) int imm) -#if defined(_sse2neon_shuffle) -#define _mm_shufflehi_epi16(a, imm) \ - __extension__({ \ - int16x8_t _input = vreinterpretq_s16_m128i(a); \ - int16x8_t _shuf = \ - vshuffleq_s16(_input, _input, 0, 1, 2, 3, ((imm) & (0x3)) + 4, \ - (((imm) >> 2) & 0x3) + 4, (((imm) >> 4) & 0x3) + 4, \ - (((imm) >> 6) & 0x3) + 4); \ - vreinterpretq_m128i_s16(_shuf); \ - }) -#else // generic -#define _mm_shufflehi_epi16(a, imm) _mm_shufflehi_epi16_function((a), (imm)) -#endif - -// FORCE_INLINE __m128i _mm_shufflelo_epi16(__m128i a, -// __constrange(0,255) int imm) -#if defined(_sse2neon_shuffle) -#define _mm_shufflelo_epi16(a, imm) \ - __extension__({ \ - int16x8_t _input = vreinterpretq_s16_m128i(a); \ - int16x8_t _shuf = vshuffleq_s16( \ - _input, _input, ((imm) & (0x3)), (((imm) >> 2) & 0x3), \ - (((imm) >> 4) & 0x3), (((imm) >> 6) & 0x3), 4, 5, 6, 7); \ - vreinterpretq_m128i_s16(_shuf); \ - }) -#else // generic -#define _mm_shufflelo_epi16(a, imm) _mm_shufflelo_epi16_function((a), (imm)) -#endif - -// Shift packed 16-bit integers in a left by count while shifting in zeros, and -// store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sll_epi16 -FORCE_INLINE __m128i _mm_sll_epi16(__m128i a, __m128i count) -{ - uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); - if (_sse2neon_unlikely(c & ~15)) - return _mm_setzero_si128(); - - int16x8_t vc = vdupq_n_s16((int16_t) c); - return vreinterpretq_m128i_s16(vshlq_s16(vreinterpretq_s16_m128i(a), vc)); -} - -// Shift packed 32-bit integers in a left by count while shifting in zeros, and -// store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sll_epi32 -FORCE_INLINE __m128i _mm_sll_epi32(__m128i a, __m128i count) -{ - uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); - if (_sse2neon_unlikely(c & ~31)) - return _mm_setzero_si128(); - - int32x4_t vc = vdupq_n_s32((int32_t) c); - return vreinterpretq_m128i_s32(vshlq_s32(vreinterpretq_s32_m128i(a), vc)); -} - -// Shift packed 64-bit integers in a left by count while shifting in zeros, and -// store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sll_epi64 -FORCE_INLINE __m128i _mm_sll_epi64(__m128i a, __m128i count) -{ - uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); - if (_sse2neon_unlikely(c & ~63)) - return _mm_setzero_si128(); - - int64x2_t vc = vdupq_n_s64((int64_t) c); - return vreinterpretq_m128i_s64(vshlq_s64(vreinterpretq_s64_m128i(a), vc)); -} - -// Shift packed 16-bit integers in a left by imm8 while shifting in zeros, and -// store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_slli_epi16 -FORCE_INLINE __m128i _mm_slli_epi16(__m128i a, int imm) -{ - if (_sse2neon_unlikely(imm & ~15)) - return _mm_setzero_si128(); - return vreinterpretq_m128i_s16( - vshlq_s16(vreinterpretq_s16_m128i(a), vdupq_n_s16(imm))); -} - -// Shift packed 32-bit integers in a left by imm8 while shifting in zeros, and -// store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_slli_epi32 -FORCE_INLINE __m128i _mm_slli_epi32(__m128i a, int imm) -{ - if (_sse2neon_unlikely(imm & ~31)) - return _mm_setzero_si128(); - return vreinterpretq_m128i_s32( - vshlq_s32(vreinterpretq_s32_m128i(a), vdupq_n_s32(imm))); -} - -// Shift packed 64-bit integers in a left by imm8 while shifting in zeros, and -// store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_slli_epi64 -FORCE_INLINE __m128i _mm_slli_epi64(__m128i a, int imm) -{ - if (_sse2neon_unlikely(imm & ~63)) - return _mm_setzero_si128(); - return vreinterpretq_m128i_s64( - vshlq_s64(vreinterpretq_s64_m128i(a), vdupq_n_s64(imm))); -} - -// Shift a left by imm8 bytes while shifting in zeros, and store the results in -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_slli_si128 -#define _mm_slli_si128(a, imm) \ - _sse2neon_define1( \ - __m128i, a, int8x16_t ret; \ - if (_sse2neon_unlikely(imm == 0)) ret = vreinterpretq_s8_m128i(_a); \ - else if (_sse2neon_unlikely((imm) & ~15)) ret = vdupq_n_s8(0); \ - else ret = vextq_s8(vdupq_n_s8(0), vreinterpretq_s8_m128i(_a), \ - ((imm <= 0 || imm > 15) ? 0 : (16 - imm))); \ - _sse2neon_return(vreinterpretq_m128i_s8(ret));) - -// Compute the square root of packed double-precision (64-bit) floating-point -// elements in a, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sqrt_pd -FORCE_INLINE __m128d _mm_sqrt_pd(__m128d a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64(vsqrtq_f64(vreinterpretq_f64_m128d(a))); -#else - double a0, a1; - a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - double _a0 = sqrt(a0); - double _a1 = sqrt(a1); - return _mm_set_pd(_a1, _a0); -#endif -} - -// Compute the square root of the lower double-precision (64-bit) floating-point -// element in b, store the result in the lower element of dst, and copy the -// upper element from a to the upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sqrt_sd -FORCE_INLINE __m128d _mm_sqrt_sd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return _mm_move_sd(a, _mm_sqrt_pd(b)); -#else - double _a, _b; - _a = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - _b = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - return _mm_set_pd(_a, sqrt(_b)); -#endif -} - -// Shift packed 16-bit integers in a right by count while shifting in sign bits, -// and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sra_epi16 -FORCE_INLINE __m128i _mm_sra_epi16(__m128i a, __m128i count) -{ - int64_t c = vgetq_lane_s64(count, 0); - if (_sse2neon_unlikely(c & ~15)) - return _mm_cmplt_epi16(a, _mm_setzero_si128()); - return vreinterpretq_m128i_s16( - vshlq_s16((int16x8_t) a, vdupq_n_s16((int) -c))); -} - -// Shift packed 32-bit integers in a right by count while shifting in sign bits, -// and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sra_epi32 -FORCE_INLINE __m128i _mm_sra_epi32(__m128i a, __m128i count) -{ - int64_t c = vgetq_lane_s64(count, 0); - if (_sse2neon_unlikely(c & ~31)) - return _mm_cmplt_epi32(a, _mm_setzero_si128()); - return vreinterpretq_m128i_s32( - vshlq_s32((int32x4_t) a, vdupq_n_s32((int) -c))); -} - -// Shift packed 16-bit integers in a right by imm8 while shifting in sign -// bits, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srai_epi16 -FORCE_INLINE __m128i _mm_srai_epi16(__m128i a, int imm) -{ - const int count = (imm & ~15) ? 15 : imm; - return (__m128i) vshlq_s16((int16x8_t) a, vdupq_n_s16(-count)); -} - -// Shift packed 32-bit integers in a right by imm8 while shifting in sign bits, -// and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srai_epi32 -// FORCE_INLINE __m128i _mm_srai_epi32(__m128i a, __constrange(0,255) int imm) -#define _mm_srai_epi32(a, imm) \ - _sse2neon_define0( \ - __m128i, a, __m128i ret; if (_sse2neon_unlikely((imm) == 0)) { \ - ret = _a; \ - } else if (_sse2neon_likely(0 < (imm) && (imm) < 32)) { \ - ret = vreinterpretq_m128i_s32( \ - vshlq_s32(vreinterpretq_s32_m128i(_a), vdupq_n_s32(-(imm)))); \ - } else { \ - ret = vreinterpretq_m128i_s32( \ - vshrq_n_s32(vreinterpretq_s32_m128i(_a), 31)); \ - } _sse2neon_return(ret);) - -// Shift packed 16-bit integers in a right by count while shifting in zeros, and -// store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srl_epi16 -FORCE_INLINE __m128i _mm_srl_epi16(__m128i a, __m128i count) -{ - uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); - if (_sse2neon_unlikely(c & ~15)) - return _mm_setzero_si128(); - - int16x8_t vc = vdupq_n_s16(-(int16_t) c); - return vreinterpretq_m128i_u16(vshlq_u16(vreinterpretq_u16_m128i(a), vc)); -} - -// Shift packed 32-bit integers in a right by count while shifting in zeros, and -// store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srl_epi32 -FORCE_INLINE __m128i _mm_srl_epi32(__m128i a, __m128i count) -{ - uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); - if (_sse2neon_unlikely(c & ~31)) - return _mm_setzero_si128(); - - int32x4_t vc = vdupq_n_s32(-(int32_t) c); - return vreinterpretq_m128i_u32(vshlq_u32(vreinterpretq_u32_m128i(a), vc)); -} - -// Shift packed 64-bit integers in a right by count while shifting in zeros, and -// store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srl_epi64 -FORCE_INLINE __m128i _mm_srl_epi64(__m128i a, __m128i count) -{ - uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); - if (_sse2neon_unlikely(c & ~63)) - return _mm_setzero_si128(); - - int64x2_t vc = vdupq_n_s64(-(int64_t) c); - return vreinterpretq_m128i_u64(vshlq_u64(vreinterpretq_u64_m128i(a), vc)); -} - -// Shift packed 16-bit integers in a right by imm8 while shifting in zeros, and -// store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srli_epi16 -#define _mm_srli_epi16(a, imm) \ - _sse2neon_define0( \ - __m128i, a, __m128i ret; if (_sse2neon_unlikely((imm) & ~15)) { \ - ret = _mm_setzero_si128(); \ - } else { \ - ret = vreinterpretq_m128i_u16( \ - vshlq_u16(vreinterpretq_u16_m128i(_a), vdupq_n_s16(-(imm)))); \ - } _sse2neon_return(ret);) - -// Shift packed 32-bit integers in a right by imm8 while shifting in zeros, and -// store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srli_epi32 -// FORCE_INLINE __m128i _mm_srli_epi32(__m128i a, __constrange(0,255) int imm) -#define _mm_srli_epi32(a, imm) \ - _sse2neon_define0( \ - __m128i, a, __m128i ret; if (_sse2neon_unlikely((imm) & ~31)) { \ - ret = _mm_setzero_si128(); \ - } else { \ - ret = vreinterpretq_m128i_u32( \ - vshlq_u32(vreinterpretq_u32_m128i(_a), vdupq_n_s32(-(imm)))); \ - } _sse2neon_return(ret);) - -// Shift packed 64-bit integers in a right by imm8 while shifting in zeros, and -// store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srli_epi64 -#define _mm_srli_epi64(a, imm) \ - _sse2neon_define0( \ - __m128i, a, __m128i ret; if (_sse2neon_unlikely((imm) & ~63)) { \ - ret = _mm_setzero_si128(); \ - } else { \ - ret = vreinterpretq_m128i_u64( \ - vshlq_u64(vreinterpretq_u64_m128i(_a), vdupq_n_s64(-(imm)))); \ - } _sse2neon_return(ret);) - -// Shift a right by imm8 bytes while shifting in zeros, and store the results in -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srli_si128 -#define _mm_srli_si128(a, imm) \ - _sse2neon_define1( \ - __m128i, a, int8x16_t ret; \ - if (_sse2neon_unlikely((imm) & ~15)) ret = vdupq_n_s8(0); \ - else ret = vextq_s8(vreinterpretq_s8_m128i(_a), vdupq_n_s8(0), \ - (imm > 15 ? 0 : imm)); \ - _sse2neon_return(vreinterpretq_m128i_s8(ret));) - -// Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point -// elements) from a into memory. mem_addr must be aligned on a 16-byte boundary -// or a general-protection exception may be generated. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_pd -FORCE_INLINE void _mm_store_pd(double *mem_addr, __m128d a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - vst1q_f64((float64_t *) mem_addr, vreinterpretq_f64_m128d(a)); -#else - vst1q_f32((float32_t *) mem_addr, vreinterpretq_f32_m128d(a)); -#endif -} - -// Store the lower double-precision (64-bit) floating-point element from a into -// 2 contiguous elements in memory. mem_addr must be aligned on a 16-byte -// boundary or a general-protection exception may be generated. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_pd1 -FORCE_INLINE void _mm_store_pd1(double *mem_addr, __m128d a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - float64x1_t a_low = vget_low_f64(vreinterpretq_f64_m128d(a)); - vst1q_f64((float64_t *) mem_addr, - vreinterpretq_f64_m128d(vcombine_f64(a_low, a_low))); -#else - float32x2_t a_low = vget_low_f32(vreinterpretq_f32_m128d(a)); - vst1q_f32((float32_t *) mem_addr, - vreinterpretq_f32_m128d(vcombine_f32(a_low, a_low))); -#endif -} - -// Store the lower double-precision (64-bit) floating-point element from a into -// memory. mem_addr does not need to be aligned on any particular boundary. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_store_sd -FORCE_INLINE void _mm_store_sd(double *mem_addr, __m128d a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - vst1_f64((float64_t *) mem_addr, vget_low_f64(vreinterpretq_f64_m128d(a))); -#else - vst1_u64((uint64_t *) mem_addr, vget_low_u64(vreinterpretq_u64_m128d(a))); -#endif -} - -// Store 128-bits of integer data from a into memory. mem_addr must be aligned -// on a 16-byte boundary or a general-protection exception may be generated. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_si128 -FORCE_INLINE void _mm_store_si128(__m128i *p, __m128i a) -{ - vst1q_s32((int32_t *) p, vreinterpretq_s32_m128i(a)); -} - -// Store the lower double-precision (64-bit) floating-point element from a into -// 2 contiguous elements in memory. mem_addr must be aligned on a 16-byte -// boundary or a general-protection exception may be generated. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#expand=9,526,5601&text=_mm_store1_pd -#define _mm_store1_pd _mm_store_pd1 - -// Store the upper double-precision (64-bit) floating-point element from a into -// memory. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeh_pd -FORCE_INLINE void _mm_storeh_pd(double *mem_addr, __m128d a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - vst1_f64((float64_t *) mem_addr, vget_high_f64(vreinterpretq_f64_m128d(a))); -#else - vst1_f32((float32_t *) mem_addr, vget_high_f32(vreinterpretq_f32_m128d(a))); -#endif -} - -// Store 64-bit integer from the first element of a into memory. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storel_epi64 -FORCE_INLINE void _mm_storel_epi64(__m128i *a, __m128i b) -{ - vst1_u64((uint64_t *) a, vget_low_u64(vreinterpretq_u64_m128i(b))); -} - -// Store the lower double-precision (64-bit) floating-point element from a into -// memory. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storel_pd -FORCE_INLINE void _mm_storel_pd(double *mem_addr, __m128d a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - vst1_f64((float64_t *) mem_addr, vget_low_f64(vreinterpretq_f64_m128d(a))); -#else - vst1_f32((float32_t *) mem_addr, vget_low_f32(vreinterpretq_f32_m128d(a))); -#endif -} - -// Store 2 double-precision (64-bit) floating-point elements from a into memory -// in reverse order. mem_addr must be aligned on a 16-byte boundary or a -// general-protection exception may be generated. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storer_pd -FORCE_INLINE void _mm_storer_pd(double *mem_addr, __m128d a) -{ - float32x4_t f = vreinterpretq_f32_m128d(a); - _mm_store_pd(mem_addr, vreinterpretq_m128d_f32(vextq_f32(f, f, 2))); -} - -// Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point -// elements) from a into memory. mem_addr does not need to be aligned on any -// particular boundary. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_pd -FORCE_INLINE void _mm_storeu_pd(double *mem_addr, __m128d a) -{ - _mm_store_pd(mem_addr, a); -} - -// Store 128-bits of integer data from a into memory. mem_addr does not need to -// be aligned on any particular boundary. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_si128 -FORCE_INLINE void _mm_storeu_si128(__m128i *p, __m128i a) -{ - vst1q_s32((int32_t *) p, vreinterpretq_s32_m128i(a)); -} - -// Store 32-bit integer from the first element of a into memory. mem_addr does -// not need to be aligned on any particular boundary. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_si32 -FORCE_INLINE void _mm_storeu_si32(void *p, __m128i a) -{ - vst1q_lane_s32((int32_t *) p, vreinterpretq_s32_m128i(a), 0); -} - -// Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point -// elements) from a into memory using a non-temporal memory hint. mem_addr must -// be aligned on a 16-byte boundary or a general-protection exception may be -// generated. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_pd -FORCE_INLINE void _mm_stream_pd(double *p, __m128d a) -{ -#if __has_builtin(__builtin_nontemporal_store) - __builtin_nontemporal_store(a, (__m128d *) p); -#elif defined(__aarch64__) || defined(_M_ARM64) - vst1q_f64(p, vreinterpretq_f64_m128d(a)); -#else - vst1q_s64((int64_t *) p, vreinterpretq_s64_m128d(a)); -#endif -} - -// Store 128-bits of integer data from a into memory using a non-temporal memory -// hint. mem_addr must be aligned on a 16-byte boundary or a general-protection -// exception may be generated. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_si128 -FORCE_INLINE void _mm_stream_si128(__m128i *p, __m128i a) -{ -#if __has_builtin(__builtin_nontemporal_store) - __builtin_nontemporal_store(a, p); -#else - vst1q_s64((int64_t *) p, vreinterpretq_s64_m128i(a)); -#endif -} - -// Store 32-bit integer a into memory using a non-temporal hint to minimize -// cache pollution. If the cache line containing address mem_addr is already in -// the cache, the cache will be updated. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_si32 -FORCE_INLINE void _mm_stream_si32(int *p, int a) -{ - vst1q_lane_s32((int32_t *) p, vdupq_n_s32(a), 0); -} - -// Store 64-bit integer a into memory using a non-temporal hint to minimize -// cache pollution. If the cache line containing address mem_addr is already in -// the cache, the cache will be updated. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_si64 -FORCE_INLINE void _mm_stream_si64(__int64 *p, __int64 a) -{ - vst1_s64((int64_t *) p, vdup_n_s64((int64_t) a)); -} - -// Subtract packed 16-bit integers in b from packed 16-bit integers in a, and -// store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_epi16 -FORCE_INLINE __m128i _mm_sub_epi16(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s16( - vsubq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); -} - -// Subtract packed 32-bit integers in b from packed 32-bit integers in a, and -// store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_epi32 -FORCE_INLINE __m128i _mm_sub_epi32(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s32( - vsubq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); -} - -// Subtract packed 64-bit integers in b from packed 64-bit integers in a, and -// store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_epi64 -FORCE_INLINE __m128i _mm_sub_epi64(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s64( - vsubq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); -} - -// Subtract packed 8-bit integers in b from packed 8-bit integers in a, and -// store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_epi8 -FORCE_INLINE __m128i _mm_sub_epi8(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s8( - vsubq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); -} - -// Subtract packed double-precision (64-bit) floating-point elements in b from -// packed double-precision (64-bit) floating-point elements in a, and store the -// results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_sub_pd -FORCE_INLINE __m128d _mm_sub_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64( - vsubq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); -#else - double a0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - double a1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - double b0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double b1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); - double c[2]; - c[0] = a0 - b0; - c[1] = a1 - b1; - return vld1q_f32((float32_t *) c); -#endif -} - -// Subtract the lower double-precision (64-bit) floating-point element in b from -// the lower double-precision (64-bit) floating-point element in a, store the -// result in the lower element of dst, and copy the upper element from a to the -// upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_sd -FORCE_INLINE __m128d _mm_sub_sd(__m128d a, __m128d b) -{ - return _mm_move_sd(a, _mm_sub_pd(a, b)); -} - -// Subtract 64-bit integer b from 64-bit integer a, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_si64 -FORCE_INLINE __m64 _mm_sub_si64(__m64 a, __m64 b) -{ - return vreinterpret_m64_s64( - vsub_s64(vreinterpret_s64_m64(a), vreinterpret_s64_m64(b))); -} - -// Subtract packed signed 16-bit integers in b from packed 16-bit integers in a -// using saturation, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_subs_epi16 -FORCE_INLINE __m128i _mm_subs_epi16(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s16( - vqsubq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); -} - -// Subtract packed signed 8-bit integers in b from packed 8-bit integers in a -// using saturation, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_subs_epi8 -FORCE_INLINE __m128i _mm_subs_epi8(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s8( - vqsubq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); -} - -// Subtract packed unsigned 16-bit integers in b from packed unsigned 16-bit -// integers in a using saturation, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_subs_epu16 -FORCE_INLINE __m128i _mm_subs_epu16(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u16( - vqsubq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); -} - -// Subtract packed unsigned 8-bit integers in b from packed unsigned 8-bit -// integers in a using saturation, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_subs_epu8 -FORCE_INLINE __m128i _mm_subs_epu8(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u8( - vqsubq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); -} - -#define _mm_ucomieq_sd _mm_comieq_sd -#define _mm_ucomige_sd _mm_comige_sd -#define _mm_ucomigt_sd _mm_comigt_sd -#define _mm_ucomile_sd _mm_comile_sd -#define _mm_ucomilt_sd _mm_comilt_sd -#define _mm_ucomineq_sd _mm_comineq_sd - -// Return vector of type __m128d with undefined elements. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_undefined_pd -FORCE_INLINE __m128d _mm_undefined_pd(void) -{ -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wuninitialized" -#endif - __m128d a; -#if defined(_MSC_VER) && !defined(__clang__) - a = _mm_setzero_pd(); -#endif - return a; -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic pop -#endif -} - -// Unpack and interleave 16-bit integers from the high half of a and b, and -// store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_epi16 -FORCE_INLINE __m128i _mm_unpackhi_epi16(__m128i a, __m128i b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128i_s16( - vzip2q_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); -#else - int16x4_t a1 = vget_high_s16(vreinterpretq_s16_m128i(a)); - int16x4_t b1 = vget_high_s16(vreinterpretq_s16_m128i(b)); - int16x4x2_t result = vzip_s16(a1, b1); - return vreinterpretq_m128i_s16(vcombine_s16(result.val[0], result.val[1])); -#endif -} - -// Unpack and interleave 32-bit integers from the high half of a and b, and -// store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_epi32 -FORCE_INLINE __m128i _mm_unpackhi_epi32(__m128i a, __m128i b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128i_s32( - vzip2q_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); -#else - int32x2_t a1 = vget_high_s32(vreinterpretq_s32_m128i(a)); - int32x2_t b1 = vget_high_s32(vreinterpretq_s32_m128i(b)); - int32x2x2_t result = vzip_s32(a1, b1); - return vreinterpretq_m128i_s32(vcombine_s32(result.val[0], result.val[1])); -#endif -} - -// Unpack and interleave 64-bit integers from the high half of a and b, and -// store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_epi64 -FORCE_INLINE __m128i _mm_unpackhi_epi64(__m128i a, __m128i b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128i_s64( - vzip2q_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); -#else - int64x1_t a_h = vget_high_s64(vreinterpretq_s64_m128i(a)); - int64x1_t b_h = vget_high_s64(vreinterpretq_s64_m128i(b)); - return vreinterpretq_m128i_s64(vcombine_s64(a_h, b_h)); -#endif -} - -// Unpack and interleave 8-bit integers from the high half of a and b, and store -// the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_epi8 -FORCE_INLINE __m128i _mm_unpackhi_epi8(__m128i a, __m128i b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128i_s8( - vzip2q_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); -#else - int8x8_t a1 = - vreinterpret_s8_s16(vget_high_s16(vreinterpretq_s16_m128i(a))); - int8x8_t b1 = - vreinterpret_s8_s16(vget_high_s16(vreinterpretq_s16_m128i(b))); - int8x8x2_t result = vzip_s8(a1, b1); - return vreinterpretq_m128i_s8(vcombine_s8(result.val[0], result.val[1])); -#endif -} - -// Unpack and interleave double-precision (64-bit) floating-point elements from -// the high half of a and b, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_pd -FORCE_INLINE __m128d _mm_unpackhi_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64( - vzip2q_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); -#else - return vreinterpretq_m128d_s64( - vcombine_s64(vget_high_s64(vreinterpretq_s64_m128d(a)), - vget_high_s64(vreinterpretq_s64_m128d(b)))); -#endif -} - -// Unpack and interleave 16-bit integers from the low half of a and b, and store -// the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_epi16 -FORCE_INLINE __m128i _mm_unpacklo_epi16(__m128i a, __m128i b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128i_s16( - vzip1q_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); -#else - int16x4_t a1 = vget_low_s16(vreinterpretq_s16_m128i(a)); - int16x4_t b1 = vget_low_s16(vreinterpretq_s16_m128i(b)); - int16x4x2_t result = vzip_s16(a1, b1); - return vreinterpretq_m128i_s16(vcombine_s16(result.val[0], result.val[1])); -#endif -} - -// Unpack and interleave 32-bit integers from the low half of a and b, and store -// the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_epi32 -FORCE_INLINE __m128i _mm_unpacklo_epi32(__m128i a, __m128i b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128i_s32( - vzip1q_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); -#else - int32x2_t a1 = vget_low_s32(vreinterpretq_s32_m128i(a)); - int32x2_t b1 = vget_low_s32(vreinterpretq_s32_m128i(b)); - int32x2x2_t result = vzip_s32(a1, b1); - return vreinterpretq_m128i_s32(vcombine_s32(result.val[0], result.val[1])); -#endif -} - -// Unpack and interleave 64-bit integers from the low half of a and b, and store -// the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_epi64 -FORCE_INLINE __m128i _mm_unpacklo_epi64(__m128i a, __m128i b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128i_s64( - vzip1q_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); -#else - int64x1_t a_l = vget_low_s64(vreinterpretq_s64_m128i(a)); - int64x1_t b_l = vget_low_s64(vreinterpretq_s64_m128i(b)); - return vreinterpretq_m128i_s64(vcombine_s64(a_l, b_l)); -#endif -} - -// Unpack and interleave 8-bit integers from the low half of a and b, and store -// the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_epi8 -FORCE_INLINE __m128i _mm_unpacklo_epi8(__m128i a, __m128i b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128i_s8( - vzip1q_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); -#else - int8x8_t a1 = vreinterpret_s8_s16(vget_low_s16(vreinterpretq_s16_m128i(a))); - int8x8_t b1 = vreinterpret_s8_s16(vget_low_s16(vreinterpretq_s16_m128i(b))); - int8x8x2_t result = vzip_s8(a1, b1); - return vreinterpretq_m128i_s8(vcombine_s8(result.val[0], result.val[1])); -#endif -} - -// Unpack and interleave double-precision (64-bit) floating-point elements from -// the low half of a and b, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_pd -FORCE_INLINE __m128d _mm_unpacklo_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64( - vzip1q_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); -#else - return vreinterpretq_m128d_s64( - vcombine_s64(vget_low_s64(vreinterpretq_s64_m128d(a)), - vget_low_s64(vreinterpretq_s64_m128d(b)))); -#endif -} - -// Compute the bitwise XOR of packed double-precision (64-bit) floating-point -// elements in a and b, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_xor_pd -FORCE_INLINE __m128d _mm_xor_pd(__m128d a, __m128d b) -{ - return vreinterpretq_m128d_s64( - veorq_s64(vreinterpretq_s64_m128d(a), vreinterpretq_s64_m128d(b))); -} - -// Compute the bitwise XOR of 128 bits (representing integer data) in a and b, -// and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_xor_si128 -FORCE_INLINE __m128i _mm_xor_si128(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s32( - veorq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); -} - -/* SSE3 */ - -// Alternatively add and subtract packed double-precision (64-bit) -// floating-point elements in a to/from packed elements in b, and store the -// results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_addsub_pd -FORCE_INLINE __m128d _mm_addsub_pd(__m128d a, __m128d b) -{ - _sse2neon_const __m128d mask = _mm_set_pd(1.0f, -1.0f); -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64(vfmaq_f64(vreinterpretq_f64_m128d(a), - vreinterpretq_f64_m128d(b), - vreinterpretq_f64_m128d(mask))); -#else - return _mm_add_pd(_mm_mul_pd(b, mask), a); -#endif -} - -// Alternatively add and subtract packed single-precision (32-bit) -// floating-point elements in a to/from packed elements in b, and store the -// results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=addsub_ps -FORCE_INLINE __m128 _mm_addsub_ps(__m128 a, __m128 b) -{ - _sse2neon_const __m128 mask = _mm_setr_ps(-1.0f, 1.0f, -1.0f, 1.0f); -#if (defined(__aarch64__) || defined(_M_ARM64)) || \ - defined(__ARM_FEATURE_FMA) /* VFPv4+ */ - return vreinterpretq_m128_f32(vfmaq_f32(vreinterpretq_f32_m128(a), - vreinterpretq_f32_m128(mask), - vreinterpretq_f32_m128(b))); -#else - return _mm_add_ps(_mm_mul_ps(b, mask), a); -#endif -} - -// Horizontally add adjacent pairs of double-precision (64-bit) floating-point -// elements in a and b, and pack the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_pd -FORCE_INLINE __m128d _mm_hadd_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64( - vpaddq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); -#else - double a0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - double a1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - double b0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double b1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); - double c[] = {a0 + a1, b0 + b1}; - return vreinterpretq_m128d_u64(vld1q_u64((uint64_t *) c)); -#endif -} - -// Horizontally add adjacent pairs of single-precision (32-bit) floating-point -// elements in a and b, and pack the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_ps -FORCE_INLINE __m128 _mm_hadd_ps(__m128 a, __m128 b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128_f32( - vpaddq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); -#else - float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); - float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); - float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); - float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); - return vreinterpretq_m128_f32( - vcombine_f32(vpadd_f32(a10, a32), vpadd_f32(b10, b32))); -#endif -} - -// Horizontally subtract adjacent pairs of double-precision (64-bit) -// floating-point elements in a and b, and pack the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsub_pd -FORCE_INLINE __m128d _mm_hsub_pd(__m128d a, __m128d b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - float64x2_t _a = vreinterpretq_f64_m128d(a); - float64x2_t _b = vreinterpretq_f64_m128d(b); - return vreinterpretq_m128d_f64( - vsubq_f64(vuzp1q_f64(_a, _b), vuzp2q_f64(_a, _b))); -#else - double a0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - double a1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - double b0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double b1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); - double c[] = {a0 - a1, b0 - b1}; - return vreinterpretq_m128d_u64(vld1q_u64((uint64_t *) c)); -#endif -} - -// Horizontally subtract adjacent pairs of single-precision (32-bit) -// floating-point elements in a and b, and pack the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsub_ps -FORCE_INLINE __m128 _mm_hsub_ps(__m128 _a, __m128 _b) -{ - float32x4_t a = vreinterpretq_f32_m128(_a); - float32x4_t b = vreinterpretq_f32_m128(_b); -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128_f32( - vsubq_f32(vuzp1q_f32(a, b), vuzp2q_f32(a, b))); -#else - float32x4x2_t c = vuzpq_f32(a, b); - return vreinterpretq_m128_f32(vsubq_f32(c.val[0], c.val[1])); -#endif -} - -// Load 128-bits of integer data from unaligned memory into dst. This intrinsic -// may perform better than _mm_loadu_si128 when the data crosses a cache line -// boundary. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_lddqu_si128 -#define _mm_lddqu_si128 _mm_loadu_si128 - -// Load a double-precision (64-bit) floating-point element from memory into both -// elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loaddup_pd -#define _mm_loaddup_pd _mm_load1_pd - -// Duplicate the low double-precision (64-bit) floating-point element from a, -// and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movedup_pd -FORCE_INLINE __m128d _mm_movedup_pd(__m128d a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64( - vdupq_laneq_f64(vreinterpretq_f64_m128d(a), 0)); -#else - return vreinterpretq_m128d_u64( - vdupq_n_u64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0))); -#endif -} - -// Duplicate odd-indexed single-precision (32-bit) floating-point elements -// from a, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movehdup_ps -FORCE_INLINE __m128 _mm_movehdup_ps(__m128 a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128_f32( - vtrn2q_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a))); -#elif defined(_sse2neon_shuffle) - return vreinterpretq_m128_f32(vshuffleq_s32( - vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 1, 1, 3, 3)); -#else - float32_t a1 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 1); - float32_t a3 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 3); - float ALIGN_STRUCT(16) data[4] = {a1, a1, a3, a3}; - return vreinterpretq_m128_f32(vld1q_f32(data)); -#endif -} - -// Duplicate even-indexed single-precision (32-bit) floating-point elements -// from a, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_moveldup_ps -FORCE_INLINE __m128 _mm_moveldup_ps(__m128 a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128_f32( - vtrn1q_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a))); -#elif defined(_sse2neon_shuffle) - return vreinterpretq_m128_f32(vshuffleq_s32( - vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 0, 0, 2, 2)); -#else - float32_t a0 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); - float32_t a2 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 2); - float ALIGN_STRUCT(16) data[4] = {a0, a0, a2, a2}; - return vreinterpretq_m128_f32(vld1q_f32(data)); -#endif -} - -/* SSSE3 */ - -// Compute the absolute value of packed signed 16-bit integers in a, and store -// the unsigned results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_epi16 -FORCE_INLINE __m128i _mm_abs_epi16(__m128i a) -{ - return vreinterpretq_m128i_s16(vabsq_s16(vreinterpretq_s16_m128i(a))); -} - -// Compute the absolute value of packed signed 32-bit integers in a, and store -// the unsigned results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_epi32 -FORCE_INLINE __m128i _mm_abs_epi32(__m128i a) -{ - return vreinterpretq_m128i_s32(vabsq_s32(vreinterpretq_s32_m128i(a))); -} - -// Compute the absolute value of packed signed 8-bit integers in a, and store -// the unsigned results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_epi8 -FORCE_INLINE __m128i _mm_abs_epi8(__m128i a) -{ - return vreinterpretq_m128i_s8(vabsq_s8(vreinterpretq_s8_m128i(a))); -} - -// Compute the absolute value of packed signed 16-bit integers in a, and store -// the unsigned results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_pi16 -FORCE_INLINE __m64 _mm_abs_pi16(__m64 a) -{ - return vreinterpret_m64_s16(vabs_s16(vreinterpret_s16_m64(a))); -} - -// Compute the absolute value of packed signed 32-bit integers in a, and store -// the unsigned results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_pi32 -FORCE_INLINE __m64 _mm_abs_pi32(__m64 a) -{ - return vreinterpret_m64_s32(vabs_s32(vreinterpret_s32_m64(a))); -} - -// Compute the absolute value of packed signed 8-bit integers in a, and store -// the unsigned results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_pi8 -FORCE_INLINE __m64 _mm_abs_pi8(__m64 a) -{ - return vreinterpret_m64_s8(vabs_s8(vreinterpret_s8_m64(a))); -} - -// Concatenate 16-byte blocks in a and b into a 32-byte temporary result, shift -// the result right by imm8 bytes, and store the low 16 bytes in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_alignr_epi8 -#if defined(__GNUC__) && !defined(__clang__) -#define _mm_alignr_epi8(a, b, imm) \ - __extension__({ \ - uint8x16_t _a = vreinterpretq_u8_m128i(a); \ - uint8x16_t _b = vreinterpretq_u8_m128i(b); \ - __m128i ret; \ - if (_sse2neon_unlikely((imm) & ~31)) \ - ret = vreinterpretq_m128i_u8(vdupq_n_u8(0)); \ - else if (imm >= 16) \ - ret = _mm_srli_si128(a, imm >= 16 ? imm - 16 : 0); \ - else \ - ret = \ - vreinterpretq_m128i_u8(vextq_u8(_b, _a, imm < 16 ? imm : 0)); \ - ret; \ - }) - -#else -#define _mm_alignr_epi8(a, b, imm) \ - _sse2neon_define2( \ - __m128i, a, b, uint8x16_t __a = vreinterpretq_u8_m128i(_a); \ - uint8x16_t __b = vreinterpretq_u8_m128i(_b); __m128i ret; \ - if (_sse2neon_unlikely((imm) & ~31)) ret = \ - vreinterpretq_m128i_u8(vdupq_n_u8(0)); \ - else if (imm >= 16) ret = \ - _mm_srli_si128(_a, imm >= 16 ? imm - 16 : 0); \ - else ret = \ - vreinterpretq_m128i_u8(vextq_u8(__b, __a, imm < 16 ? imm : 0)); \ - _sse2neon_return(ret);) - -#endif - -// Concatenate 8-byte blocks in a and b into a 16-byte temporary result, shift -// the result right by imm8 bytes, and store the low 8 bytes in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_alignr_pi8 -#define _mm_alignr_pi8(a, b, imm) \ - _sse2neon_define2( \ - __m64, a, b, __m64 ret; if (_sse2neon_unlikely((imm) >= 16)) { \ - ret = vreinterpret_m64_s8(vdup_n_s8(0)); \ - } else { \ - uint8x8_t tmp_low; \ - uint8x8_t tmp_high; \ - if ((imm) >= 8) { \ - const int idx = (imm) - 8; \ - tmp_low = vreinterpret_u8_m64(_a); \ - tmp_high = vdup_n_u8(0); \ - ret = vreinterpret_m64_u8(vext_u8(tmp_low, tmp_high, idx)); \ - } else { \ - const int idx = (imm); \ - tmp_low = vreinterpret_u8_m64(_b); \ - tmp_high = vreinterpret_u8_m64(_a); \ - ret = vreinterpret_m64_u8(vext_u8(tmp_low, tmp_high, idx)); \ - } \ - } _sse2neon_return(ret);) - -// Horizontally add adjacent pairs of 16-bit integers in a and b, and pack the -// signed 16-bit results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_epi16 -FORCE_INLINE __m128i _mm_hadd_epi16(__m128i _a, __m128i _b) -{ - int16x8_t a = vreinterpretq_s16_m128i(_a); - int16x8_t b = vreinterpretq_s16_m128i(_b); -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128i_s16(vpaddq_s16(a, b)); -#else - return vreinterpretq_m128i_s16( - vcombine_s16(vpadd_s16(vget_low_s16(a), vget_high_s16(a)), - vpadd_s16(vget_low_s16(b), vget_high_s16(b)))); -#endif -} - -// Horizontally add adjacent pairs of 32-bit integers in a and b, and pack the -// signed 32-bit results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_epi32 -FORCE_INLINE __m128i _mm_hadd_epi32(__m128i _a, __m128i _b) -{ - int32x4_t a = vreinterpretq_s32_m128i(_a); - int32x4_t b = vreinterpretq_s32_m128i(_b); -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128i_s32(vpaddq_s32(a, b)); -#else - return vreinterpretq_m128i_s32( - vcombine_s32(vpadd_s32(vget_low_s32(a), vget_high_s32(a)), - vpadd_s32(vget_low_s32(b), vget_high_s32(b)))); -#endif -} - -// Horizontally add adjacent pairs of 16-bit integers in a and b, and pack the -// signed 16-bit results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_pi16 -FORCE_INLINE __m64 _mm_hadd_pi16(__m64 a, __m64 b) -{ - return vreinterpret_m64_s16( - vpadd_s16(vreinterpret_s16_m64(a), vreinterpret_s16_m64(b))); -} - -// Horizontally add adjacent pairs of 32-bit integers in a and b, and pack the -// signed 32-bit results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_pi32 -FORCE_INLINE __m64 _mm_hadd_pi32(__m64 a, __m64 b) -{ - return vreinterpret_m64_s32( - vpadd_s32(vreinterpret_s32_m64(a), vreinterpret_s32_m64(b))); -} - -// Horizontally add adjacent pairs of signed 16-bit integers in a and b using -// saturation, and pack the signed 16-bit results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadds_epi16 -FORCE_INLINE __m128i _mm_hadds_epi16(__m128i _a, __m128i _b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - int16x8_t a = vreinterpretq_s16_m128i(_a); - int16x8_t b = vreinterpretq_s16_m128i(_b); - return vreinterpretq_s64_s16( - vqaddq_s16(vuzp1q_s16(a, b), vuzp2q_s16(a, b))); -#else - int32x4_t a = vreinterpretq_s32_m128i(_a); - int32x4_t b = vreinterpretq_s32_m128i(_b); - // Interleave using vshrn/vmovn - // [a0|a2|a4|a6|b0|b2|b4|b6] - // [a1|a3|a5|a7|b1|b3|b5|b7] - int16x8_t ab0246 = vcombine_s16(vmovn_s32(a), vmovn_s32(b)); - int16x8_t ab1357 = vcombine_s16(vshrn_n_s32(a, 16), vshrn_n_s32(b, 16)); - // Saturated add - return vreinterpretq_m128i_s16(vqaddq_s16(ab0246, ab1357)); -#endif -} - -// Horizontally add adjacent pairs of signed 16-bit integers in a and b using -// saturation, and pack the signed 16-bit results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadds_pi16 -FORCE_INLINE __m64 _mm_hadds_pi16(__m64 _a, __m64 _b) -{ - int16x4_t a = vreinterpret_s16_m64(_a); - int16x4_t b = vreinterpret_s16_m64(_b); -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpret_s64_s16(vqadd_s16(vuzp1_s16(a, b), vuzp2_s16(a, b))); -#else - int16x4x2_t res = vuzp_s16(a, b); - return vreinterpret_s64_s16(vqadd_s16(res.val[0], res.val[1])); -#endif -} - -// Horizontally subtract adjacent pairs of 16-bit integers in a and b, and pack -// the signed 16-bit results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsub_epi16 -FORCE_INLINE __m128i _mm_hsub_epi16(__m128i _a, __m128i _b) -{ - int16x8_t a = vreinterpretq_s16_m128i(_a); - int16x8_t b = vreinterpretq_s16_m128i(_b); -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128i_s16( - vsubq_s16(vuzp1q_s16(a, b), vuzp2q_s16(a, b))); -#else - int16x8x2_t c = vuzpq_s16(a, b); - return vreinterpretq_m128i_s16(vsubq_s16(c.val[0], c.val[1])); -#endif -} - -// Horizontally subtract adjacent pairs of 32-bit integers in a and b, and pack -// the signed 32-bit results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsub_epi32 -FORCE_INLINE __m128i _mm_hsub_epi32(__m128i _a, __m128i _b) -{ - int32x4_t a = vreinterpretq_s32_m128i(_a); - int32x4_t b = vreinterpretq_s32_m128i(_b); -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128i_s32( - vsubq_s32(vuzp1q_s32(a, b), vuzp2q_s32(a, b))); -#else - int32x4x2_t c = vuzpq_s32(a, b); - return vreinterpretq_m128i_s32(vsubq_s32(c.val[0], c.val[1])); -#endif -} - -// Horizontally subtract adjacent pairs of 16-bit integers in a and b, and pack -// the signed 16-bit results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsub_pi16 -FORCE_INLINE __m64 _mm_hsub_pi16(__m64 _a, __m64 _b) -{ - int16x4_t a = vreinterpret_s16_m64(_a); - int16x4_t b = vreinterpret_s16_m64(_b); -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpret_m64_s16(vsub_s16(vuzp1_s16(a, b), vuzp2_s16(a, b))); -#else - int16x4x2_t c = vuzp_s16(a, b); - return vreinterpret_m64_s16(vsub_s16(c.val[0], c.val[1])); -#endif -} - -// Horizontally subtract adjacent pairs of 32-bit integers in a and b, and pack -// the signed 32-bit results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_hsub_pi32 -FORCE_INLINE __m64 _mm_hsub_pi32(__m64 _a, __m64 _b) -{ - int32x2_t a = vreinterpret_s32_m64(_a); - int32x2_t b = vreinterpret_s32_m64(_b); -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpret_m64_s32(vsub_s32(vuzp1_s32(a, b), vuzp2_s32(a, b))); -#else - int32x2x2_t c = vuzp_s32(a, b); - return vreinterpret_m64_s32(vsub_s32(c.val[0], c.val[1])); -#endif -} - -// Horizontally subtract adjacent pairs of signed 16-bit integers in a and b -// using saturation, and pack the signed 16-bit results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsubs_epi16 -FORCE_INLINE __m128i _mm_hsubs_epi16(__m128i _a, __m128i _b) -{ - int16x8_t a = vreinterpretq_s16_m128i(_a); - int16x8_t b = vreinterpretq_s16_m128i(_b); -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128i_s16( - vqsubq_s16(vuzp1q_s16(a, b), vuzp2q_s16(a, b))); -#else - int16x8x2_t c = vuzpq_s16(a, b); - return vreinterpretq_m128i_s16(vqsubq_s16(c.val[0], c.val[1])); -#endif -} - -// Horizontally subtract adjacent pairs of signed 16-bit integers in a and b -// using saturation, and pack the signed 16-bit results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsubs_pi16 -FORCE_INLINE __m64 _mm_hsubs_pi16(__m64 _a, __m64 _b) -{ - int16x4_t a = vreinterpret_s16_m64(_a); - int16x4_t b = vreinterpret_s16_m64(_b); -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpret_m64_s16(vqsub_s16(vuzp1_s16(a, b), vuzp2_s16(a, b))); -#else - int16x4x2_t c = vuzp_s16(a, b); - return vreinterpret_m64_s16(vqsub_s16(c.val[0], c.val[1])); -#endif -} - -// Vertically multiply each unsigned 8-bit integer from a with the corresponding -// signed 8-bit integer from b, producing intermediate signed 16-bit integers. -// Horizontally add adjacent pairs of intermediate signed 16-bit integers, -// and pack the saturated results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maddubs_epi16 -FORCE_INLINE __m128i _mm_maddubs_epi16(__m128i _a, __m128i _b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - uint8x16_t a = vreinterpretq_u8_m128i(_a); - int8x16_t b = vreinterpretq_s8_m128i(_b); - int16x8_t tl = vmulq_s16(vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(a))), - vmovl_s8(vget_low_s8(b))); - int16x8_t th = vmulq_s16(vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(a))), - vmovl_s8(vget_high_s8(b))); - return vreinterpretq_m128i_s16( - vqaddq_s16(vuzp1q_s16(tl, th), vuzp2q_s16(tl, th))); -#else - // This would be much simpler if x86 would choose to zero extend OR sign - // extend, not both. This could probably be optimized better. - uint16x8_t a = vreinterpretq_u16_m128i(_a); - int16x8_t b = vreinterpretq_s16_m128i(_b); - - // Zero extend a - int16x8_t a_odd = vreinterpretq_s16_u16(vshrq_n_u16(a, 8)); - int16x8_t a_even = vreinterpretq_s16_u16(vbicq_u16(a, vdupq_n_u16(0xff00))); - - // Sign extend by shifting left then shifting right. - int16x8_t b_even = vshrq_n_s16(vshlq_n_s16(b, 8), 8); - int16x8_t b_odd = vshrq_n_s16(b, 8); - - // multiply - int16x8_t prod1 = vmulq_s16(a_even, b_even); - int16x8_t prod2 = vmulq_s16(a_odd, b_odd); - - // saturated add - return vreinterpretq_m128i_s16(vqaddq_s16(prod1, prod2)); -#endif -} - -// Vertically multiply each unsigned 8-bit integer from a with the corresponding -// signed 8-bit integer from b, producing intermediate signed 16-bit integers. -// Horizontally add adjacent pairs of intermediate signed 16-bit integers, and -// pack the saturated results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maddubs_pi16 -FORCE_INLINE __m64 _mm_maddubs_pi16(__m64 _a, __m64 _b) -{ - uint16x4_t a = vreinterpret_u16_m64(_a); - int16x4_t b = vreinterpret_s16_m64(_b); - - // Zero extend a - int16x4_t a_odd = vreinterpret_s16_u16(vshr_n_u16(a, 8)); - int16x4_t a_even = vreinterpret_s16_u16(vand_u16(a, vdup_n_u16(0xff))); - - // Sign extend by shifting left then shifting right. - int16x4_t b_even = vshr_n_s16(vshl_n_s16(b, 8), 8); - int16x4_t b_odd = vshr_n_s16(b, 8); - - // multiply - int16x4_t prod1 = vmul_s16(a_even, b_even); - int16x4_t prod2 = vmul_s16(a_odd, b_odd); - - // saturated add - return vreinterpret_m64_s16(vqadd_s16(prod1, prod2)); -} - -// Multiply packed signed 16-bit integers in a and b, producing intermediate -// signed 32-bit integers. Shift right by 15 bits while rounding up, and store -// the packed 16-bit integers in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mulhrs_epi16 -FORCE_INLINE __m128i _mm_mulhrs_epi16(__m128i a, __m128i b) -{ - // Has issues due to saturation - // return vreinterpretq_m128i_s16(vqrdmulhq_s16(a, b)); - - // Multiply - int32x4_t mul_lo = vmull_s16(vget_low_s16(vreinterpretq_s16_m128i(a)), - vget_low_s16(vreinterpretq_s16_m128i(b))); - int32x4_t mul_hi = vmull_s16(vget_high_s16(vreinterpretq_s16_m128i(a)), - vget_high_s16(vreinterpretq_s16_m128i(b))); - - // Rounding narrowing shift right - // narrow = (int16_t)((mul + 16384) >> 15); - int16x4_t narrow_lo = vrshrn_n_s32(mul_lo, 15); - int16x4_t narrow_hi = vrshrn_n_s32(mul_hi, 15); - - // Join together - return vreinterpretq_m128i_s16(vcombine_s16(narrow_lo, narrow_hi)); -} - -// Multiply packed signed 16-bit integers in a and b, producing intermediate -// signed 32-bit integers. Truncate each intermediate integer to the 18 most -// significant bits, round by adding 1, and store bits [16:1] to dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mulhrs_pi16 -FORCE_INLINE __m64 _mm_mulhrs_pi16(__m64 a, __m64 b) -{ - int32x4_t mul_extend = - vmull_s16((vreinterpret_s16_m64(a)), (vreinterpret_s16_m64(b))); - - // Rounding narrowing shift right - return vreinterpret_m64_s16(vrshrn_n_s32(mul_extend, 15)); -} - -// Shuffle packed 8-bit integers in a according to shuffle control mask in the -// corresponding 8-bit element of b, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_epi8 -FORCE_INLINE __m128i _mm_shuffle_epi8(__m128i a, __m128i b) -{ - int8x16_t tbl = vreinterpretq_s8_m128i(a); // input a - uint8x16_t idx = vreinterpretq_u8_m128i(b); // input b - uint8x16_t idx_masked = - vandq_u8(idx, vdupq_n_u8(0x8F)); // avoid using meaningless bits -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128i_s8(vqtbl1q_s8(tbl, idx_masked)); -#elif defined(__GNUC__) - int8x16_t ret; - // %e and %f represent the even and odd D registers - // respectively. - __asm__ __volatile__( - "vtbl.8 %e[ret], {%e[tbl], %f[tbl]}, %e[idx]\n" - "vtbl.8 %f[ret], {%e[tbl], %f[tbl]}, %f[idx]\n" - : [ret] "=&w"(ret) - : [tbl] "w"(tbl), [idx] "w"(idx_masked)); - return vreinterpretq_m128i_s8(ret); -#else - // use this line if testing on aarch64 - int8x8x2_t a_split = {vget_low_s8(tbl), vget_high_s8(tbl)}; - return vreinterpretq_m128i_s8( - vcombine_s8(vtbl2_s8(a_split, vget_low_u8(idx_masked)), - vtbl2_s8(a_split, vget_high_u8(idx_masked)))); -#endif -} - -// Shuffle packed 8-bit integers in a according to shuffle control mask in the -// corresponding 8-bit element of b, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_pi8 -FORCE_INLINE __m64 _mm_shuffle_pi8(__m64 a, __m64 b) -{ - const int8x8_t controlMask = - vand_s8(vreinterpret_s8_m64(b), vdup_n_s8((int8_t) (0x1 << 7 | 0x07))); - int8x8_t res = vtbl1_s8(vreinterpret_s8_m64(a), controlMask); - return vreinterpret_m64_s8(res); -} - -// Negate packed 16-bit integers in a when the corresponding signed -// 16-bit integer in b is negative, and store the results in dst. -// Element in dst are zeroed out when the corresponding element -// in b is zero. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_epi16 -FORCE_INLINE __m128i _mm_sign_epi16(__m128i _a, __m128i _b) -{ - int16x8_t a = vreinterpretq_s16_m128i(_a); - int16x8_t b = vreinterpretq_s16_m128i(_b); - - // signed shift right: faster than vclt - // (b < 0) ? 0xFFFF : 0 - uint16x8_t ltMask = vreinterpretq_u16_s16(vshrq_n_s16(b, 15)); - // (b == 0) ? 0xFFFF : 0 -#if defined(__aarch64__) || defined(_M_ARM64) - int16x8_t zeroMask = vreinterpretq_s16_u16(vceqzq_s16(b)); -#else - int16x8_t zeroMask = vreinterpretq_s16_u16(vceqq_s16(b, vdupq_n_s16(0))); -#endif - - // bitwise select either a or negative 'a' (vnegq_s16(a) equals to negative - // 'a') based on ltMask - int16x8_t masked = vbslq_s16(ltMask, vnegq_s16(a), a); - // res = masked & (~zeroMask) - int16x8_t res = vbicq_s16(masked, zeroMask); - return vreinterpretq_m128i_s16(res); -} - -// Negate packed 32-bit integers in a when the corresponding signed -// 32-bit integer in b is negative, and store the results in dst. -// Element in dst are zeroed out when the corresponding element -// in b is zero. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_epi32 -FORCE_INLINE __m128i _mm_sign_epi32(__m128i _a, __m128i _b) -{ - int32x4_t a = vreinterpretq_s32_m128i(_a); - int32x4_t b = vreinterpretq_s32_m128i(_b); - - // signed shift right: faster than vclt - // (b < 0) ? 0xFFFFFFFF : 0 - uint32x4_t ltMask = vreinterpretq_u32_s32(vshrq_n_s32(b, 31)); - - // (b == 0) ? 0xFFFFFFFF : 0 -#if defined(__aarch64__) || defined(_M_ARM64) - int32x4_t zeroMask = vreinterpretq_s32_u32(vceqzq_s32(b)); -#else - int32x4_t zeroMask = vreinterpretq_s32_u32(vceqq_s32(b, vdupq_n_s32(0))); -#endif - - // bitwise select either a or negative 'a' (vnegq_s32(a) equals to negative - // 'a') based on ltMask - int32x4_t masked = vbslq_s32(ltMask, vnegq_s32(a), a); - // res = masked & (~zeroMask) - int32x4_t res = vbicq_s32(masked, zeroMask); - return vreinterpretq_m128i_s32(res); -} - -// Negate packed 8-bit integers in a when the corresponding signed -// 8-bit integer in b is negative, and store the results in dst. -// Element in dst are zeroed out when the corresponding element -// in b is zero. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_epi8 -FORCE_INLINE __m128i _mm_sign_epi8(__m128i _a, __m128i _b) -{ - int8x16_t a = vreinterpretq_s8_m128i(_a); - int8x16_t b = vreinterpretq_s8_m128i(_b); - - // signed shift right: faster than vclt - // (b < 0) ? 0xFF : 0 - uint8x16_t ltMask = vreinterpretq_u8_s8(vshrq_n_s8(b, 7)); - - // (b == 0) ? 0xFF : 0 -#if defined(__aarch64__) || defined(_M_ARM64) - int8x16_t zeroMask = vreinterpretq_s8_u8(vceqzq_s8(b)); -#else - int8x16_t zeroMask = vreinterpretq_s8_u8(vceqq_s8(b, vdupq_n_s8(0))); -#endif - - // bitwise select either a or negative 'a' (vnegq_s8(a) return negative 'a') - // based on ltMask - int8x16_t masked = vbslq_s8(ltMask, vnegq_s8(a), a); - // res = masked & (~zeroMask) - int8x16_t res = vbicq_s8(masked, zeroMask); - - return vreinterpretq_m128i_s8(res); -} - -// Negate packed 16-bit integers in a when the corresponding signed 16-bit -// integer in b is negative, and store the results in dst. Element in dst are -// zeroed out when the corresponding element in b is zero. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_pi16 -FORCE_INLINE __m64 _mm_sign_pi16(__m64 _a, __m64 _b) -{ - int16x4_t a = vreinterpret_s16_m64(_a); - int16x4_t b = vreinterpret_s16_m64(_b); - - // signed shift right: faster than vclt - // (b < 0) ? 0xFFFF : 0 - uint16x4_t ltMask = vreinterpret_u16_s16(vshr_n_s16(b, 15)); - - // (b == 0) ? 0xFFFF : 0 -#if defined(__aarch64__) || defined(_M_ARM64) - int16x4_t zeroMask = vreinterpret_s16_u16(vceqz_s16(b)); -#else - int16x4_t zeroMask = vreinterpret_s16_u16(vceq_s16(b, vdup_n_s16(0))); -#endif - - // bitwise select either a or negative 'a' (vneg_s16(a) return negative 'a') - // based on ltMask - int16x4_t masked = vbsl_s16(ltMask, vneg_s16(a), a); - // res = masked & (~zeroMask) - int16x4_t res = vbic_s16(masked, zeroMask); - - return vreinterpret_m64_s16(res); -} - -// Negate packed 32-bit integers in a when the corresponding signed 32-bit -// integer in b is negative, and store the results in dst. Element in dst are -// zeroed out when the corresponding element in b is zero. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_pi32 -FORCE_INLINE __m64 _mm_sign_pi32(__m64 _a, __m64 _b) -{ - int32x2_t a = vreinterpret_s32_m64(_a); - int32x2_t b = vreinterpret_s32_m64(_b); - - // signed shift right: faster than vclt - // (b < 0) ? 0xFFFFFFFF : 0 - uint32x2_t ltMask = vreinterpret_u32_s32(vshr_n_s32(b, 31)); - - // (b == 0) ? 0xFFFFFFFF : 0 -#if defined(__aarch64__) || defined(_M_ARM64) - int32x2_t zeroMask = vreinterpret_s32_u32(vceqz_s32(b)); -#else - int32x2_t zeroMask = vreinterpret_s32_u32(vceq_s32(b, vdup_n_s32(0))); -#endif - - // bitwise select either a or negative 'a' (vneg_s32(a) return negative 'a') - // based on ltMask - int32x2_t masked = vbsl_s32(ltMask, vneg_s32(a), a); - // res = masked & (~zeroMask) - int32x2_t res = vbic_s32(masked, zeroMask); - - return vreinterpret_m64_s32(res); -} - -// Negate packed 8-bit integers in a when the corresponding signed 8-bit integer -// in b is negative, and store the results in dst. Element in dst are zeroed out -// when the corresponding element in b is zero. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_pi8 -FORCE_INLINE __m64 _mm_sign_pi8(__m64 _a, __m64 _b) -{ - int8x8_t a = vreinterpret_s8_m64(_a); - int8x8_t b = vreinterpret_s8_m64(_b); - - // signed shift right: faster than vclt - // (b < 0) ? 0xFF : 0 - uint8x8_t ltMask = vreinterpret_u8_s8(vshr_n_s8(b, 7)); - - // (b == 0) ? 0xFF : 0 -#if defined(__aarch64__) || defined(_M_ARM64) - int8x8_t zeroMask = vreinterpret_s8_u8(vceqz_s8(b)); -#else - int8x8_t zeroMask = vreinterpret_s8_u8(vceq_s8(b, vdup_n_s8(0))); -#endif - - // bitwise select either a or negative 'a' (vneg_s8(a) return negative 'a') - // based on ltMask - int8x8_t masked = vbsl_s8(ltMask, vneg_s8(a), a); - // res = masked & (~zeroMask) - int8x8_t res = vbic_s8(masked, zeroMask); - - return vreinterpret_m64_s8(res); -} - -/* SSE4.1 */ - -// Blend packed 16-bit integers from a and b using control mask imm8, and store -// the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blend_epi16 -// FORCE_INLINE __m128i _mm_blend_epi16(__m128i a, __m128i b, -// __constrange(0,255) int imm) -#define _mm_blend_epi16(a, b, imm) \ - _sse2neon_define2( \ - __m128i, a, b, \ - const uint16_t _mask[8] = \ - _sse2neon_init(((imm) & (1 << 0)) ? (uint16_t) - 1 : 0x0, \ - ((imm) & (1 << 1)) ? (uint16_t) - 1 : 0x0, \ - ((imm) & (1 << 2)) ? (uint16_t) - 1 : 0x0, \ - ((imm) & (1 << 3)) ? (uint16_t) - 1 : 0x0, \ - ((imm) & (1 << 4)) ? (uint16_t) - 1 : 0x0, \ - ((imm) & (1 << 5)) ? (uint16_t) - 1 : 0x0, \ - ((imm) & (1 << 6)) ? (uint16_t) - 1 : 0x0, \ - ((imm) & (1 << 7)) ? (uint16_t) - 1 : 0x0); \ - uint16x8_t _mask_vec = vld1q_u16(_mask); \ - uint16x8_t __a = vreinterpretq_u16_m128i(_a); \ - uint16x8_t __b = vreinterpretq_u16_m128i(_b); _sse2neon_return( \ - vreinterpretq_m128i_u16(vbslq_u16(_mask_vec, __b, __a)));) - -// Blend packed double-precision (64-bit) floating-point elements from a and b -// using control mask imm8, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blend_pd -#define _mm_blend_pd(a, b, imm) \ - _sse2neon_define2( \ - __m128d, a, b, \ - const uint64_t _mask[2] = \ - _sse2neon_init(((imm) & (1 << 0)) ? ~UINT64_C(0) : UINT64_C(0), \ - ((imm) & (1 << 1)) ? ~UINT64_C(0) : UINT64_C(0)); \ - uint64x2_t _mask_vec = vld1q_u64(_mask); \ - uint64x2_t __a = vreinterpretq_u64_m128d(_a); \ - uint64x2_t __b = vreinterpretq_u64_m128d(_b); _sse2neon_return( \ - vreinterpretq_m128d_u64(vbslq_u64(_mask_vec, __b, __a)));) - -// Blend packed single-precision (32-bit) floating-point elements from a and b -// using mask, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blend_ps -FORCE_INLINE __m128 _mm_blend_ps(__m128 _a, __m128 _b, const char imm8) -{ - const uint32_t - ALIGN_STRUCT(16) data[4] = {((imm8) & (1 << 0)) ? UINT32_MAX : 0, - ((imm8) & (1 << 1)) ? UINT32_MAX : 0, - ((imm8) & (1 << 2)) ? UINT32_MAX : 0, - ((imm8) & (1 << 3)) ? UINT32_MAX : 0}; - uint32x4_t mask = vld1q_u32(data); - float32x4_t a = vreinterpretq_f32_m128(_a); - float32x4_t b = vreinterpretq_f32_m128(_b); - return vreinterpretq_m128_f32(vbslq_f32(mask, b, a)); -} - -// Blend packed 8-bit integers from a and b using mask, and store the results in -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blendv_epi8 -FORCE_INLINE __m128i _mm_blendv_epi8(__m128i _a, __m128i _b, __m128i _mask) -{ - // Use a signed shift right to create a mask with the sign bit - uint8x16_t mask = - vreinterpretq_u8_s8(vshrq_n_s8(vreinterpretq_s8_m128i(_mask), 7)); - uint8x16_t a = vreinterpretq_u8_m128i(_a); - uint8x16_t b = vreinterpretq_u8_m128i(_b); - return vreinterpretq_m128i_u8(vbslq_u8(mask, b, a)); -} - -// Blend packed double-precision (64-bit) floating-point elements from a and b -// using mask, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blendv_pd -FORCE_INLINE __m128d _mm_blendv_pd(__m128d _a, __m128d _b, __m128d _mask) -{ - uint64x2_t mask = - vreinterpretq_u64_s64(vshrq_n_s64(vreinterpretq_s64_m128d(_mask), 63)); -#if defined(__aarch64__) || defined(_M_ARM64) - float64x2_t a = vreinterpretq_f64_m128d(_a); - float64x2_t b = vreinterpretq_f64_m128d(_b); - return vreinterpretq_m128d_f64(vbslq_f64(mask, b, a)); -#else - uint64x2_t a = vreinterpretq_u64_m128d(_a); - uint64x2_t b = vreinterpretq_u64_m128d(_b); - return vreinterpretq_m128d_u64(vbslq_u64(mask, b, a)); -#endif -} - -// Blend packed single-precision (32-bit) floating-point elements from a and b -// using mask, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blendv_ps -FORCE_INLINE __m128 _mm_blendv_ps(__m128 _a, __m128 _b, __m128 _mask) -{ - // Use a signed shift right to create a mask with the sign bit - uint32x4_t mask = - vreinterpretq_u32_s32(vshrq_n_s32(vreinterpretq_s32_m128(_mask), 31)); - float32x4_t a = vreinterpretq_f32_m128(_a); - float32x4_t b = vreinterpretq_f32_m128(_b); - return vreinterpretq_m128_f32(vbslq_f32(mask, b, a)); -} - -// Round the packed double-precision (64-bit) floating-point elements in a up -// to an integer value, and store the results as packed double-precision -// floating-point elements in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_ceil_pd -FORCE_INLINE __m128d _mm_ceil_pd(__m128d a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64(vrndpq_f64(vreinterpretq_f64_m128d(a))); -#else - double a0, a1; - a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - return _mm_set_pd(ceil(a1), ceil(a0)); -#endif -} - -// Round the packed single-precision (32-bit) floating-point elements in a up to -// an integer value, and store the results as packed single-precision -// floating-point elements in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_ceil_ps -FORCE_INLINE __m128 _mm_ceil_ps(__m128 a) -{ -#if (defined(__aarch64__) || defined(_M_ARM64)) || \ - defined(__ARM_FEATURE_DIRECTED_ROUNDING) - return vreinterpretq_m128_f32(vrndpq_f32(vreinterpretq_f32_m128(a))); -#else - float *f = (float *) &a; - return _mm_set_ps(ceilf(f[3]), ceilf(f[2]), ceilf(f[1]), ceilf(f[0])); -#endif -} - -// Round the lower double-precision (64-bit) floating-point element in b up to -// an integer value, store the result as a double-precision floating-point -// element in the lower element of dst, and copy the upper element from a to the -// upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_ceil_sd -FORCE_INLINE __m128d _mm_ceil_sd(__m128d a, __m128d b) -{ - return _mm_move_sd(a, _mm_ceil_pd(b)); -} - -// Round the lower single-precision (32-bit) floating-point element in b up to -// an integer value, store the result as a single-precision floating-point -// element in the lower element of dst, and copy the upper 3 packed elements -// from a to the upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_ceil_ss -FORCE_INLINE __m128 _mm_ceil_ss(__m128 a, __m128 b) -{ - return _mm_move_ss(a, _mm_ceil_ps(b)); -} - -// Compare packed 64-bit integers in a and b for equality, and store the results -// in dst -FORCE_INLINE __m128i _mm_cmpeq_epi64(__m128i a, __m128i b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128i_u64( - vceqq_u64(vreinterpretq_u64_m128i(a), vreinterpretq_u64_m128i(b))); -#else - // ARMv7 lacks vceqq_u64 - // (a == b) -> (a_lo == b_lo) && (a_hi == b_hi) - uint32x4_t cmp = - vceqq_u32(vreinterpretq_u32_m128i(a), vreinterpretq_u32_m128i(b)); - uint32x4_t swapped = vrev64q_u32(cmp); - return vreinterpretq_m128i_u32(vandq_u32(cmp, swapped)); -#endif -} - -// Sign extend packed 16-bit integers in a to packed 32-bit integers, and store -// the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi16_epi32 -FORCE_INLINE __m128i _mm_cvtepi16_epi32(__m128i a) -{ - return vreinterpretq_m128i_s32( - vmovl_s16(vget_low_s16(vreinterpretq_s16_m128i(a)))); -} - -// Sign extend packed 16-bit integers in a to packed 64-bit integers, and store -// the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi16_epi64 -FORCE_INLINE __m128i _mm_cvtepi16_epi64(__m128i a) -{ - int16x8_t s16x8 = vreinterpretq_s16_m128i(a); /* xxxx xxxx xxxx 0B0A */ - int32x4_t s32x4 = vmovl_s16(vget_low_s16(s16x8)); /* 000x 000x 000B 000A */ - int64x2_t s64x2 = vmovl_s32(vget_low_s32(s32x4)); /* 0000 000B 0000 000A */ - return vreinterpretq_m128i_s64(s64x2); -} - -// Sign extend packed 32-bit integers in a to packed 64-bit integers, and store -// the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi32_epi64 -FORCE_INLINE __m128i _mm_cvtepi32_epi64(__m128i a) -{ - return vreinterpretq_m128i_s64( - vmovl_s32(vget_low_s32(vreinterpretq_s32_m128i(a)))); -} - -// Sign extend packed 8-bit integers in a to packed 16-bit integers, and store -// the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi8_epi16 -FORCE_INLINE __m128i _mm_cvtepi8_epi16(__m128i a) -{ - int8x16_t s8x16 = vreinterpretq_s8_m128i(a); /* xxxx xxxx xxxx DCBA */ - int16x8_t s16x8 = vmovl_s8(vget_low_s8(s8x16)); /* 0x0x 0x0x 0D0C 0B0A */ - return vreinterpretq_m128i_s16(s16x8); -} - -// Sign extend packed 8-bit integers in a to packed 32-bit integers, and store -// the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi8_epi32 -FORCE_INLINE __m128i _mm_cvtepi8_epi32(__m128i a) -{ - int8x16_t s8x16 = vreinterpretq_s8_m128i(a); /* xxxx xxxx xxxx DCBA */ - int16x8_t s16x8 = vmovl_s8(vget_low_s8(s8x16)); /* 0x0x 0x0x 0D0C 0B0A */ - int32x4_t s32x4 = vmovl_s16(vget_low_s16(s16x8)); /* 000D 000C 000B 000A */ - return vreinterpretq_m128i_s32(s32x4); -} - -// Sign extend packed 8-bit integers in the low 8 bytes of a to packed 64-bit -// integers, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi8_epi64 -FORCE_INLINE __m128i _mm_cvtepi8_epi64(__m128i a) -{ - int8x16_t s8x16 = vreinterpretq_s8_m128i(a); /* xxxx xxxx xxxx xxBA */ - int16x8_t s16x8 = vmovl_s8(vget_low_s8(s8x16)); /* 0x0x 0x0x 0x0x 0B0A */ - int32x4_t s32x4 = vmovl_s16(vget_low_s16(s16x8)); /* 000x 000x 000B 000A */ - int64x2_t s64x2 = vmovl_s32(vget_low_s32(s32x4)); /* 0000 000B 0000 000A */ - return vreinterpretq_m128i_s64(s64x2); -} - -// Zero extend packed unsigned 16-bit integers in a to packed 32-bit integers, -// and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu16_epi32 -FORCE_INLINE __m128i _mm_cvtepu16_epi32(__m128i a) -{ - return vreinterpretq_m128i_u32( - vmovl_u16(vget_low_u16(vreinterpretq_u16_m128i(a)))); -} - -// Zero extend packed unsigned 16-bit integers in a to packed 64-bit integers, -// and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu16_epi64 -FORCE_INLINE __m128i _mm_cvtepu16_epi64(__m128i a) -{ - uint16x8_t u16x8 = vreinterpretq_u16_m128i(a); /* xxxx xxxx xxxx 0B0A */ - uint32x4_t u32x4 = vmovl_u16(vget_low_u16(u16x8)); /* 000x 000x 000B 000A */ - uint64x2_t u64x2 = vmovl_u32(vget_low_u32(u32x4)); /* 0000 000B 0000 000A */ - return vreinterpretq_m128i_u64(u64x2); -} - -// Zero extend packed unsigned 32-bit integers in a to packed 64-bit integers, -// and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu32_epi64 -FORCE_INLINE __m128i _mm_cvtepu32_epi64(__m128i a) -{ - return vreinterpretq_m128i_u64( - vmovl_u32(vget_low_u32(vreinterpretq_u32_m128i(a)))); -} - -// Zero extend packed unsigned 8-bit integers in a to packed 16-bit integers, -// and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu8_epi16 -FORCE_INLINE __m128i _mm_cvtepu8_epi16(__m128i a) -{ - uint8x16_t u8x16 = vreinterpretq_u8_m128i(a); /* xxxx xxxx HGFE DCBA */ - uint16x8_t u16x8 = vmovl_u8(vget_low_u8(u8x16)); /* 0H0G 0F0E 0D0C 0B0A */ - return vreinterpretq_m128i_u16(u16x8); -} - -// Zero extend packed unsigned 8-bit integers in a to packed 32-bit integers, -// and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu8_epi32 -FORCE_INLINE __m128i _mm_cvtepu8_epi32(__m128i a) -{ - uint8x16_t u8x16 = vreinterpretq_u8_m128i(a); /* xxxx xxxx xxxx DCBA */ - uint16x8_t u16x8 = vmovl_u8(vget_low_u8(u8x16)); /* 0x0x 0x0x 0D0C 0B0A */ - uint32x4_t u32x4 = vmovl_u16(vget_low_u16(u16x8)); /* 000D 000C 000B 000A */ - return vreinterpretq_m128i_u32(u32x4); -} - -// Zero extend packed unsigned 8-bit integers in the low 8 bytes of a to packed -// 64-bit integers, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu8_epi64 -FORCE_INLINE __m128i _mm_cvtepu8_epi64(__m128i a) -{ - uint8x16_t u8x16 = vreinterpretq_u8_m128i(a); /* xxxx xxxx xxxx xxBA */ - uint16x8_t u16x8 = vmovl_u8(vget_low_u8(u8x16)); /* 0x0x 0x0x 0x0x 0B0A */ - uint32x4_t u32x4 = vmovl_u16(vget_low_u16(u16x8)); /* 000x 000x 000B 000A */ - uint64x2_t u64x2 = vmovl_u32(vget_low_u32(u32x4)); /* 0000 000B 0000 000A */ - return vreinterpretq_m128i_u64(u64x2); -} - -// Conditionally multiply the packed double-precision (64-bit) floating-point -// elements in a and b using the high 4 bits in imm8, sum the four products, and -// conditionally store the sum in dst using the low 4 bits of imm8. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_dp_pd -FORCE_INLINE __m128d _mm_dp_pd(__m128d a, __m128d b, const int imm) -{ - // Generate mask value from constant immediate bit value - const int64_t bit0Mask = imm & 0x01 ? UINT64_MAX : 0; - const int64_t bit1Mask = imm & 0x02 ? UINT64_MAX : 0; -#if !SSE2NEON_PRECISE_DP - const int64_t bit4Mask = imm & 0x10 ? UINT64_MAX : 0; - const int64_t bit5Mask = imm & 0x20 ? UINT64_MAX : 0; -#endif - // Conditional multiplication -#if !SSE2NEON_PRECISE_DP - __m128d mul = _mm_mul_pd(a, b); - const __m128d mulMask = - _mm_castsi128_pd(_mm_set_epi64x(bit5Mask, bit4Mask)); - __m128d tmp = _mm_and_pd(mul, mulMask); -#else -#if defined(__aarch64__) || defined(_M_ARM64) - double d0 = (imm & 0x10) ? vgetq_lane_f64(vreinterpretq_f64_m128d(a), 0) * - vgetq_lane_f64(vreinterpretq_f64_m128d(b), 0) - : 0; - double d1 = (imm & 0x20) ? vgetq_lane_f64(vreinterpretq_f64_m128d(a), 1) * - vgetq_lane_f64(vreinterpretq_f64_m128d(b), 1) - : 0; -#else - double a0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - double a1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - double b0 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); - double b1 = - sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); - double d0 = (imm & 0x10) ? a0 * b0 : 0; - double d1 = (imm & 0x20) ? a1 * b1 : 0; -#endif - __m128d tmp = _mm_set_pd(d1, d0); -#endif - // Sum the products -#if defined(__aarch64__) || defined(_M_ARM64) - double sum = vpaddd_f64(vreinterpretq_f64_m128d(tmp)); -#else - double _tmp0 = sse2neon_recast_u64_f64( - vgetq_lane_u64(vreinterpretq_u64_m128d(tmp), 0)); - double _tmp1 = sse2neon_recast_u64_f64( - vgetq_lane_u64(vreinterpretq_u64_m128d(tmp), 1)); - double sum = _tmp0 + _tmp1; -#endif - // Conditionally store the sum - const __m128d sumMask = - _mm_castsi128_pd(_mm_set_epi64x(bit1Mask, bit0Mask)); - __m128d res = _mm_and_pd(_mm_set_pd1(sum), sumMask); - return res; -} - -// Conditionally multiply the packed single-precision (32-bit) floating-point -// elements in a and b using the high 4 bits in imm8, sum the four products, -// and conditionally store the sum in dst using the low 4 bits of imm. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_dp_ps -FORCE_INLINE __m128 _mm_dp_ps(__m128 a, __m128 b, const int imm) -{ - float32x4_t elementwise_prod = _mm_mul_ps(a, b); - -#if defined(__aarch64__) || defined(_M_ARM64) - /* shortcuts */ - if (imm == 0xFF) { - return _mm_set1_ps(vaddvq_f32(elementwise_prod)); - } - - if ((imm & 0x0F) == 0x0F) { - if (!(imm & (1 << 4))) - elementwise_prod = vsetq_lane_f32(0.0f, elementwise_prod, 0); - if (!(imm & (1 << 5))) - elementwise_prod = vsetq_lane_f32(0.0f, elementwise_prod, 1); - if (!(imm & (1 << 6))) - elementwise_prod = vsetq_lane_f32(0.0f, elementwise_prod, 2); - if (!(imm & (1 << 7))) - elementwise_prod = vsetq_lane_f32(0.0f, elementwise_prod, 3); - - return _mm_set1_ps(vaddvq_f32(elementwise_prod)); - } -#endif - - float s = 0.0f; - - if (imm & (1 << 4)) - s += vgetq_lane_f32(elementwise_prod, 0); - if (imm & (1 << 5)) - s += vgetq_lane_f32(elementwise_prod, 1); - if (imm & (1 << 6)) - s += vgetq_lane_f32(elementwise_prod, 2); - if (imm & (1 << 7)) - s += vgetq_lane_f32(elementwise_prod, 3); - - const float32_t res[4] = { - (imm & 0x1) ? s : 0.0f, - (imm & 0x2) ? s : 0.0f, - (imm & 0x4) ? s : 0.0f, - (imm & 0x8) ? s : 0.0f, - }; - return vreinterpretq_m128_f32(vld1q_f32(res)); -} - -// Extract a 32-bit integer from a, selected with imm8, and store the result in -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_epi32 -// FORCE_INLINE int _mm_extract_epi32(__m128i a, __constrange(0,4) int imm) -#define _mm_extract_epi32(a, imm) \ - vgetq_lane_s32(vreinterpretq_s32_m128i(a), (imm)) - -// Extract a 64-bit integer from a, selected with imm8, and store the result in -// dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_epi64 -// FORCE_INLINE __int64 _mm_extract_epi64(__m128i a, __constrange(0,2) int imm) -#define _mm_extract_epi64(a, imm) \ - vgetq_lane_s64(vreinterpretq_s64_m128i(a), (imm)) - -// Extract an 8-bit integer from a, selected with imm8, and store the result in -// the lower element of dst. FORCE_INLINE int _mm_extract_epi8(__m128i a, -// __constrange(0,16) int imm) -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_epi8 -#define _mm_extract_epi8(a, imm) vgetq_lane_u8(vreinterpretq_u8_m128i(a), (imm)) - -// Extracts the selected single-precision (32-bit) floating-point from a. -// FORCE_INLINE int _mm_extract_ps(__m128 a, __constrange(0,4) int imm) -#define _mm_extract_ps(a, imm) vgetq_lane_s32(vreinterpretq_s32_m128(a), (imm)) - -// Round the packed double-precision (64-bit) floating-point elements in a down -// to an integer value, and store the results as packed double-precision -// floating-point elements in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_floor_pd -FORCE_INLINE __m128d _mm_floor_pd(__m128d a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128d_f64(vrndmq_f64(vreinterpretq_f64_m128d(a))); -#else - double a0, a1; - a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); - a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); - return _mm_set_pd(floor(a1), floor(a0)); -#endif -} - -// Round the packed single-precision (32-bit) floating-point elements in a down -// to an integer value, and store the results as packed single-precision -// floating-point elements in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_floor_ps -FORCE_INLINE __m128 _mm_floor_ps(__m128 a) -{ -#if (defined(__aarch64__) || defined(_M_ARM64)) || \ - defined(__ARM_FEATURE_DIRECTED_ROUNDING) - return vreinterpretq_m128_f32(vrndmq_f32(vreinterpretq_f32_m128(a))); -#else - float *f = (float *) &a; - return _mm_set_ps(floorf(f[3]), floorf(f[2]), floorf(f[1]), floorf(f[0])); -#endif -} - -// Round the lower double-precision (64-bit) floating-point element in b down to -// an integer value, store the result as a double-precision floating-point -// element in the lower element of dst, and copy the upper element from a to the -// upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_floor_sd -FORCE_INLINE __m128d _mm_floor_sd(__m128d a, __m128d b) -{ - return _mm_move_sd(a, _mm_floor_pd(b)); -} - -// Round the lower single-precision (32-bit) floating-point element in b down to -// an integer value, store the result as a single-precision floating-point -// element in the lower element of dst, and copy the upper 3 packed elements -// from a to the upper elements of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_floor_ss -FORCE_INLINE __m128 _mm_floor_ss(__m128 a, __m128 b) -{ - return _mm_move_ss(a, _mm_floor_ps(b)); -} - -// Copy a to dst, and insert the 32-bit integer i into dst at the location -// specified by imm8. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_insert_epi32 -// FORCE_INLINE __m128i _mm_insert_epi32(__m128i a, int b, -// __constrange(0,4) int imm) -#define _mm_insert_epi32(a, b, imm) \ - vreinterpretq_m128i_s32( \ - vsetq_lane_s32((b), vreinterpretq_s32_m128i(a), (imm))) - -// Copy a to dst, and insert the 64-bit integer i into dst at the location -// specified by imm8. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_insert_epi64 -// FORCE_INLINE __m128i _mm_insert_epi64(__m128i a, __int64 b, -// __constrange(0,2) int imm) -#define _mm_insert_epi64(a, b, imm) \ - vreinterpretq_m128i_s64( \ - vsetq_lane_s64((b), vreinterpretq_s64_m128i(a), (imm))) - -// Copy a to dst, and insert the lower 8-bit integer from i into dst at the -// location specified by imm8. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_insert_epi8 -// FORCE_INLINE __m128i _mm_insert_epi8(__m128i a, int b, -// __constrange(0,16) int imm) -#define _mm_insert_epi8(a, b, imm) \ - vreinterpretq_m128i_s8(vsetq_lane_s8((b), vreinterpretq_s8_m128i(a), (imm))) - -// Copy a to tmp, then insert a single-precision (32-bit) floating-point -// element from b into tmp using the control in imm8. Store tmp to dst using -// the mask in imm8 (elements are zeroed out when the corresponding bit is set). -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=insert_ps -#define _mm_insert_ps(a, b, imm8) \ - _sse2neon_define2( \ - __m128, a, b, \ - float32x4_t tmp1 = \ - vsetq_lane_f32(vgetq_lane_f32(_b, (imm8 >> 6) & 0x3), \ - vreinterpretq_f32_m128(_a), 0); \ - float32x4_t tmp2 = \ - vsetq_lane_f32(vgetq_lane_f32(tmp1, 0), \ - vreinterpretq_f32_m128(_a), ((imm8 >> 4) & 0x3)); \ - const uint32_t data[4] = \ - _sse2neon_init(((imm8) & (1 << 0)) ? UINT32_MAX : 0, \ - ((imm8) & (1 << 1)) ? UINT32_MAX : 0, \ - ((imm8) & (1 << 2)) ? UINT32_MAX : 0, \ - ((imm8) & (1 << 3)) ? UINT32_MAX : 0); \ - uint32x4_t mask = vld1q_u32(data); \ - float32x4_t all_zeros = vdupq_n_f32(0); \ - \ - _sse2neon_return(vreinterpretq_m128_f32( \ - vbslq_f32(mask, all_zeros, vreinterpretq_f32_m128(tmp2))));) - -// Compare packed signed 32-bit integers in a and b, and store packed maximum -// values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epi32 -FORCE_INLINE __m128i _mm_max_epi32(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s32( - vmaxq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); -} - -// Compare packed signed 8-bit integers in a and b, and store packed maximum -// values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epi8 -FORCE_INLINE __m128i _mm_max_epi8(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s8( - vmaxq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); -} - -// Compare packed unsigned 16-bit integers in a and b, and store packed maximum -// values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epu16 -FORCE_INLINE __m128i _mm_max_epu16(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u16( - vmaxq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); -} - -// Compare packed unsigned 32-bit integers in a and b, and store packed maximum -// values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epu32 -FORCE_INLINE __m128i _mm_max_epu32(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u32( - vmaxq_u32(vreinterpretq_u32_m128i(a), vreinterpretq_u32_m128i(b))); -} - -// Compare packed signed 32-bit integers in a and b, and store packed minimum -// values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_epi32 -FORCE_INLINE __m128i _mm_min_epi32(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s32( - vminq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); -} - -// Compare packed signed 8-bit integers in a and b, and store packed minimum -// values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_epi8 -FORCE_INLINE __m128i _mm_min_epi8(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s8( - vminq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); -} - -// Compare packed unsigned 16-bit integers in a and b, and store packed minimum -// values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_epu16 -FORCE_INLINE __m128i _mm_min_epu16(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u16( - vminq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); -} - -// Compare packed unsigned 32-bit integers in a and b, and store packed minimum -// values in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epu32 -FORCE_INLINE __m128i _mm_min_epu32(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u32( - vminq_u32(vreinterpretq_u32_m128i(a), vreinterpretq_u32_m128i(b))); -} - -// Horizontally compute the minimum amongst the packed unsigned 16-bit integers -// in a, store the minimum and index in dst, and zero the remaining bits in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_minpos_epu16 -FORCE_INLINE __m128i _mm_minpos_epu16(__m128i a) -{ - __m128i dst; - uint16_t min, idx = 0; -#if defined(__aarch64__) || defined(_M_ARM64) - // Find the minimum value - min = vminvq_u16(vreinterpretq_u16_m128i(a)); - - // Get the index of the minimum value - static const uint16_t idxv[] = {0, 1, 2, 3, 4, 5, 6, 7}; - uint16x8_t minv = vdupq_n_u16(min); - uint16x8_t cmeq = vceqq_u16(minv, vreinterpretq_u16_m128i(a)); - idx = vminvq_u16(vornq_u16(vld1q_u16(idxv), cmeq)); -#else - // Find the minimum value - __m64 tmp; - tmp = vreinterpret_m64_u16( - vmin_u16(vget_low_u16(vreinterpretq_u16_m128i(a)), - vget_high_u16(vreinterpretq_u16_m128i(a)))); - tmp = vreinterpret_m64_u16( - vpmin_u16(vreinterpret_u16_m64(tmp), vreinterpret_u16_m64(tmp))); - tmp = vreinterpret_m64_u16( - vpmin_u16(vreinterpret_u16_m64(tmp), vreinterpret_u16_m64(tmp))); - min = vget_lane_u16(vreinterpret_u16_m64(tmp), 0); - // Get the index of the minimum value - int i; - for (i = 0; i < 8; i++) { - if (min == vgetq_lane_u16(vreinterpretq_u16_m128i(a), 0)) { - idx = (uint16_t) i; - break; - } - a = _mm_srli_si128(a, 2); - } -#endif - // Generate result - dst = _mm_setzero_si128(); - dst = vreinterpretq_m128i_u16( - vsetq_lane_u16(min, vreinterpretq_u16_m128i(dst), 0)); - dst = vreinterpretq_m128i_u16( - vsetq_lane_u16(idx, vreinterpretq_u16_m128i(dst), 1)); - return dst; -} - -// Compute the sum of absolute differences (SADs) of quadruplets of unsigned -// 8-bit integers in a compared to those in b, and store the 16-bit results in -// dst. Eight SADs are performed using one quadruplet from b and eight -// quadruplets from a. One quadruplet is selected from b starting at on the -// offset specified in imm8. Eight quadruplets are formed from sequential 8-bit -// integers selected from a starting at the offset specified in imm8. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mpsadbw_epu8 -FORCE_INLINE __m128i _mm_mpsadbw_epu8(__m128i a, __m128i b, const int imm) -{ - uint8x16_t _a, _b; - - switch (imm & 0x4) { - case 0: - // do nothing - _a = vreinterpretq_u8_m128i(a); - break; - case 4: - _a = vreinterpretq_u8_u32(vextq_u32(vreinterpretq_u32_m128i(a), - vreinterpretq_u32_m128i(a), 1)); - break; - default: -#if defined(__GNUC__) || defined(__clang__) - __builtin_unreachable(); -#elif defined(_MSC_VER) - __assume(0); -#endif - break; - } - - switch (imm & 0x3) { - case 0: - _b = vreinterpretq_u8_u32( - vdupq_n_u32(vgetq_lane_u32(vreinterpretq_u32_m128i(b), 0))); - break; - case 1: - _b = vreinterpretq_u8_u32( - vdupq_n_u32(vgetq_lane_u32(vreinterpretq_u32_m128i(b), 1))); - break; - case 2: - _b = vreinterpretq_u8_u32( - vdupq_n_u32(vgetq_lane_u32(vreinterpretq_u32_m128i(b), 2))); - break; - case 3: - _b = vreinterpretq_u8_u32( - vdupq_n_u32(vgetq_lane_u32(vreinterpretq_u32_m128i(b), 3))); - break; - default: -#if defined(__GNUC__) || defined(__clang__) - __builtin_unreachable(); -#elif defined(_MSC_VER) - __assume(0); -#endif - break; - } - - int16x8_t c04, c15, c26, c37; - uint8x8_t low_b = vget_low_u8(_b); - c04 = vreinterpretq_s16_u16(vabdl_u8(vget_low_u8(_a), low_b)); - uint8x16_t _a_1 = vextq_u8(_a, _a, 1); - c15 = vreinterpretq_s16_u16(vabdl_u8(vget_low_u8(_a_1), low_b)); - uint8x16_t _a_2 = vextq_u8(_a, _a, 2); - c26 = vreinterpretq_s16_u16(vabdl_u8(vget_low_u8(_a_2), low_b)); - uint8x16_t _a_3 = vextq_u8(_a, _a, 3); - c37 = vreinterpretq_s16_u16(vabdl_u8(vget_low_u8(_a_3), low_b)); -#if defined(__aarch64__) || defined(_M_ARM64) - // |0|4|2|6| - c04 = vpaddq_s16(c04, c26); - // |1|5|3|7| - c15 = vpaddq_s16(c15, c37); - - int32x4_t trn1_c = - vtrn1q_s32(vreinterpretq_s32_s16(c04), vreinterpretq_s32_s16(c15)); - int32x4_t trn2_c = - vtrn2q_s32(vreinterpretq_s32_s16(c04), vreinterpretq_s32_s16(c15)); - return vreinterpretq_m128i_s16(vpaddq_s16(vreinterpretq_s16_s32(trn1_c), - vreinterpretq_s16_s32(trn2_c))); -#else - int16x4_t c01, c23, c45, c67; - c01 = vpadd_s16(vget_low_s16(c04), vget_low_s16(c15)); - c23 = vpadd_s16(vget_low_s16(c26), vget_low_s16(c37)); - c45 = vpadd_s16(vget_high_s16(c04), vget_high_s16(c15)); - c67 = vpadd_s16(vget_high_s16(c26), vget_high_s16(c37)); - - return vreinterpretq_m128i_s16( - vcombine_s16(vpadd_s16(c01, c23), vpadd_s16(c45, c67))); -#endif -} - -// Multiply the low signed 32-bit integers from each packed 64-bit element in -// a and b, and store the signed 64-bit results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_epi32 -FORCE_INLINE __m128i _mm_mul_epi32(__m128i a, __m128i b) -{ - // vmull_s32 upcasts instead of masking, so we downcast. - int32x2_t a_lo = vmovn_s64(vreinterpretq_s64_m128i(a)); - int32x2_t b_lo = vmovn_s64(vreinterpretq_s64_m128i(b)); - return vreinterpretq_m128i_s64(vmull_s32(a_lo, b_lo)); -} - -// Multiply the packed 32-bit integers in a and b, producing intermediate 64-bit -// integers, and store the low 32 bits of the intermediate integers in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mullo_epi32 -FORCE_INLINE __m128i _mm_mullo_epi32(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_s32( - vmulq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); -} - -// Convert packed signed 32-bit integers from a and b to packed 16-bit integers -// using unsigned saturation, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_packus_epi32 -FORCE_INLINE __m128i _mm_packus_epi32(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u16( - vcombine_u16(vqmovun_s32(vreinterpretq_s32_m128i(a)), - vqmovun_s32(vreinterpretq_s32_m128i(b)))); -} - -// Round the packed double-precision (64-bit) floating-point elements in a using -// the rounding parameter, and store the results as packed double-precision -// floating-point elements in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_round_pd -FORCE_INLINE __m128d _mm_round_pd(__m128d a, int rounding) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - switch (rounding) { - case (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC): - return vreinterpretq_m128d_f64(vrndnq_f64(vreinterpretq_f64_m128d(a))); - case (_MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC): - return _mm_floor_pd(a); - case (_MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC): - return _mm_ceil_pd(a); - case (_MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC): - return vreinterpretq_m128d_f64(vrndq_f64(vreinterpretq_f64_m128d(a))); - default: //_MM_FROUND_CUR_DIRECTION - return vreinterpretq_m128d_f64(vrndiq_f64(vreinterpretq_f64_m128d(a))); - } -#else - double *v_double = (double *) &a; - - if (rounding == (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC) || - (rounding == _MM_FROUND_CUR_DIRECTION && - _MM_GET_ROUNDING_MODE() == _MM_ROUND_NEAREST)) { - double res[2], tmp; - for (int i = 0; i < 2; i++) { - tmp = (v_double[i] < 0) ? -v_double[i] : v_double[i]; - double roundDown = floor(tmp); // Round down value - double roundUp = ceil(tmp); // Round up value - double diffDown = tmp - roundDown; - double diffUp = roundUp - tmp; - if (diffDown < diffUp) { - /* If it's closer to the round down value, then use it */ - res[i] = roundDown; - } else if (diffDown > diffUp) { - /* If it's closer to the round up value, then use it */ - res[i] = roundUp; - } else { - /* If it's equidistant between round up and round down value, - * pick the one which is an even number */ - double half = roundDown / 2; - if (half != floor(half)) { - /* If the round down value is odd, return the round up value - */ - res[i] = roundUp; - } else { - /* If the round up value is odd, return the round down value - */ - res[i] = roundDown; - } - } - res[i] = (v_double[i] < 0) ? -res[i] : res[i]; - } - return _mm_set_pd(res[1], res[0]); - } else if (rounding == (_MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC) || - (rounding == _MM_FROUND_CUR_DIRECTION && - _MM_GET_ROUNDING_MODE() == _MM_ROUND_DOWN)) { - return _mm_floor_pd(a); - } else if (rounding == (_MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC) || - (rounding == _MM_FROUND_CUR_DIRECTION && - _MM_GET_ROUNDING_MODE() == _MM_ROUND_UP)) { - return _mm_ceil_pd(a); - } - return _mm_set_pd(v_double[1] > 0 ? floor(v_double[1]) : ceil(v_double[1]), - v_double[0] > 0 ? floor(v_double[0]) : ceil(v_double[0])); -#endif -} - -// Round the packed single-precision (32-bit) floating-point elements in a using -// the rounding parameter, and store the results as packed single-precision -// floating-point elements in dst. -// software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_round_ps -FORCE_INLINE __m128 _mm_round_ps(__m128 a, int rounding) -{ -#if (defined(__aarch64__) || defined(_M_ARM64)) || \ - defined(__ARM_FEATURE_DIRECTED_ROUNDING) - switch (rounding) { - case (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC): - return vreinterpretq_m128_f32(vrndnq_f32(vreinterpretq_f32_m128(a))); - case (_MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC): - return _mm_floor_ps(a); - case (_MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC): - return _mm_ceil_ps(a); - case (_MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC): - return vreinterpretq_m128_f32(vrndq_f32(vreinterpretq_f32_m128(a))); - default: //_MM_FROUND_CUR_DIRECTION - return vreinterpretq_m128_f32(vrndiq_f32(vreinterpretq_f32_m128(a))); - } -#else - float *v_float = (float *) &a; - - if (rounding == (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC) || - (rounding == _MM_FROUND_CUR_DIRECTION && - _MM_GET_ROUNDING_MODE() == _MM_ROUND_NEAREST)) { - uint32x4_t signmask = vdupq_n_u32(0x80000000); - float32x4_t half = vbslq_f32(signmask, vreinterpretq_f32_m128(a), - vdupq_n_f32(0.5f)); /* +/- 0.5 */ - int32x4_t r_normal = vcvtq_s32_f32(vaddq_f32( - vreinterpretq_f32_m128(a), half)); /* round to integer: [a + 0.5]*/ - int32x4_t r_trunc = vcvtq_s32_f32( - vreinterpretq_f32_m128(a)); /* truncate to integer: [a] */ - int32x4_t plusone = vreinterpretq_s32_u32(vshrq_n_u32( - vreinterpretq_u32_s32(vnegq_s32(r_trunc)), 31)); /* 1 or 0 */ - int32x4_t r_even = vbicq_s32(vaddq_s32(r_trunc, plusone), - vdupq_n_s32(1)); /* ([a] + {0,1}) & ~1 */ - float32x4_t delta = vsubq_f32( - vreinterpretq_f32_m128(a), - vcvtq_f32_s32(r_trunc)); /* compute delta: delta = (a - [a]) */ - uint32x4_t is_delta_half = - vceqq_f32(delta, half); /* delta == +/- 0.5 */ - return vreinterpretq_m128_f32( - vcvtq_f32_s32(vbslq_s32(is_delta_half, r_even, r_normal))); - } else if (rounding == (_MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC) || - (rounding == _MM_FROUND_CUR_DIRECTION && - _MM_GET_ROUNDING_MODE() == _MM_ROUND_DOWN)) { - return _mm_floor_ps(a); - } else if (rounding == (_MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC) || - (rounding == _MM_FROUND_CUR_DIRECTION && - _MM_GET_ROUNDING_MODE() == _MM_ROUND_UP)) { - return _mm_ceil_ps(a); - } - return _mm_set_ps(v_float[3] > 0 ? floorf(v_float[3]) : ceilf(v_float[3]), - v_float[2] > 0 ? floorf(v_float[2]) : ceilf(v_float[2]), - v_float[1] > 0 ? floorf(v_float[1]) : ceilf(v_float[1]), - v_float[0] > 0 ? floorf(v_float[0]) : ceilf(v_float[0])); -#endif -} - -// Round the lower double-precision (64-bit) floating-point element in b using -// the rounding parameter, store the result as a double-precision floating-point -// element in the lower element of dst, and copy the upper element from a to the -// upper element of dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_round_sd -FORCE_INLINE __m128d _mm_round_sd(__m128d a, __m128d b, int rounding) -{ - return _mm_move_sd(a, _mm_round_pd(b, rounding)); -} - -// Round the lower single-precision (32-bit) floating-point element in b using -// the rounding parameter, store the result as a single-precision floating-point -// element in the lower element of dst, and copy the upper 3 packed elements -// from a to the upper elements of dst. Rounding is done according to the -// rounding[3:0] parameter, which can be one of: -// (_MM_FROUND_TO_NEAREST_INT |_MM_FROUND_NO_EXC) // round to nearest, and -// suppress exceptions -// (_MM_FROUND_TO_NEG_INF |_MM_FROUND_NO_EXC) // round down, and -// suppress exceptions -// (_MM_FROUND_TO_POS_INF |_MM_FROUND_NO_EXC) // round up, and suppress -// exceptions -// (_MM_FROUND_TO_ZERO |_MM_FROUND_NO_EXC) // truncate, and suppress -// exceptions _MM_FROUND_CUR_DIRECTION // use MXCSR.RC; see -// _MM_SET_ROUNDING_MODE -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_round_ss -FORCE_INLINE __m128 _mm_round_ss(__m128 a, __m128 b, int rounding) -{ - return _mm_move_ss(a, _mm_round_ps(b, rounding)); -} - -// Load 128-bits of integer data from memory into dst using a non-temporal -// memory hint. mem_addr must be aligned on a 16-byte boundary or a -// general-protection exception may be generated. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_load_si128 -FORCE_INLINE __m128i _mm_stream_load_si128(__m128i *p) -{ -#if __has_builtin(__builtin_nontemporal_store) - return __builtin_nontemporal_load(p); -#else - return vreinterpretq_m128i_s64(vld1q_s64((int64_t *) p)); -#endif -} - -// Compute the bitwise NOT of a and then AND with a 128-bit vector containing -// all 1's, and return 1 if the result is zero, otherwise return 0. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_test_all_ones -FORCE_INLINE int _mm_test_all_ones(__m128i a) -{ - return (uint64_t) (vgetq_lane_s64(a, 0) & vgetq_lane_s64(a, 1)) == - ~(uint64_t) 0; -} - -// Compute the bitwise AND of 128 bits (representing integer data) in a and -// mask, and return 1 if the result is zero, otherwise return 0. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_test_all_zeros -FORCE_INLINE int _mm_test_all_zeros(__m128i a, __m128i mask) -{ - int64x2_t a_and_mask = - vandq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(mask)); - return !(vgetq_lane_s64(a_and_mask, 0) | vgetq_lane_s64(a_and_mask, 1)); -} - -// Compute the bitwise AND of 128 bits (representing integer data) in a and -// mask, and set ZF to 1 if the result is zero, otherwise set ZF to 0. Compute -// the bitwise NOT of a and then AND with mask, and set CF to 1 if the result is -// zero, otherwise set CF to 0. Return 1 if both the ZF and CF values are zero, -// otherwise return 0. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_test_mix_ones_zero -// Note: Argument names may be wrong in the Intel intrinsics guide. -FORCE_INLINE int _mm_test_mix_ones_zeros(__m128i a, __m128i mask) -{ - uint64x2_t v = vreinterpretq_u64_m128i(a); - uint64x2_t m = vreinterpretq_u64_m128i(mask); - - // find ones (set-bits) and zeros (clear-bits) under clip mask - uint64x2_t ones = vandq_u64(m, v); - uint64x2_t zeros = vbicq_u64(m, v); - - // If both 128-bit variables are populated (non-zero) then return 1. - // For comparison purposes, first compact each var down to 32-bits. - uint32x2_t reduced = vpmax_u32(vqmovn_u64(ones), vqmovn_u64(zeros)); - - // if folding minimum is non-zero then both vars must be non-zero - return (vget_lane_u32(vpmin_u32(reduced, reduced), 0) != 0); -} - -// Compute the bitwise AND of 128 bits (representing integer data) in a and b, -// and set ZF to 1 if the result is zero, otherwise set ZF to 0. Compute the -// bitwise NOT of a and then AND with b, and set CF to 1 if the result is zero, -// otherwise set CF to 0. Return the CF value. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_testc_si128 -FORCE_INLINE int _mm_testc_si128(__m128i a, __m128i b) -{ - int64x2_t s64 = - vbicq_s64(vreinterpretq_s64_m128i(b), vreinterpretq_s64_m128i(a)); - return !(vgetq_lane_s64(s64, 0) | vgetq_lane_s64(s64, 1)); -} - -// Compute the bitwise AND of 128 bits (representing integer data) in a and b, -// and set ZF to 1 if the result is zero, otherwise set ZF to 0. Compute the -// bitwise NOT of a and then AND with b, and set CF to 1 if the result is zero, -// otherwise set CF to 0. Return 1 if both the ZF and CF values are zero, -// otherwise return 0. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_testnzc_si128 -#define _mm_testnzc_si128(a, b) _mm_test_mix_ones_zeros(a, b) - -// Compute the bitwise AND of 128 bits (representing integer data) in a and b, -// and set ZF to 1 if the result is zero, otherwise set ZF to 0. Compute the -// bitwise NOT of a and then AND with b, and set CF to 1 if the result is zero, -// otherwise set CF to 0. Return the ZF value. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_testz_si128 -FORCE_INLINE int _mm_testz_si128(__m128i a, __m128i b) -{ - int64x2_t s64 = - vandq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b)); - return !(vgetq_lane_s64(s64, 0) | vgetq_lane_s64(s64, 1)); -} - -/* SSE4.2 */ - -static const uint16_t ALIGN_STRUCT(16) _sse2neon_cmpestr_mask16b[8] = { - 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, -}; -static const uint8_t ALIGN_STRUCT(16) _sse2neon_cmpestr_mask8b[16] = { - 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, - 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, -}; - -/* specify the source data format */ -#define _SIDD_UBYTE_OPS 0x00 /* unsigned 8-bit characters */ -#define _SIDD_UWORD_OPS 0x01 /* unsigned 16-bit characters */ -#define _SIDD_SBYTE_OPS 0x02 /* signed 8-bit characters */ -#define _SIDD_SWORD_OPS 0x03 /* signed 16-bit characters */ - -/* specify the comparison operation */ -#define _SIDD_CMP_EQUAL_ANY 0x00 /* compare equal any: strchr */ -#define _SIDD_CMP_RANGES 0x04 /* compare ranges */ -#define _SIDD_CMP_EQUAL_EACH 0x08 /* compare equal each: strcmp */ -#define _SIDD_CMP_EQUAL_ORDERED 0x0C /* compare equal ordered */ - -/* specify the polarity */ -#define _SIDD_POSITIVE_POLARITY 0x00 -#define _SIDD_MASKED_POSITIVE_POLARITY 0x20 -#define _SIDD_NEGATIVE_POLARITY 0x10 /* negate results */ -#define _SIDD_MASKED_NEGATIVE_POLARITY \ - 0x30 /* negate results only before end of string */ - -/* specify the output selection in _mm_cmpXstri */ -#define _SIDD_LEAST_SIGNIFICANT 0x00 -#define _SIDD_MOST_SIGNIFICANT 0x40 - -/* specify the output selection in _mm_cmpXstrm */ -#define _SIDD_BIT_MASK 0x00 -#define _SIDD_UNIT_MASK 0x40 - -/* Pattern Matching for C macros. - * https://github.com/pfultz2/Cloak/wiki/C-Preprocessor-tricks,-tips,-and-idioms - */ - -/* catenate */ -#define SSE2NEON_PRIMITIVE_CAT(a, ...) a##__VA_ARGS__ -#define SSE2NEON_CAT(a, b) SSE2NEON_PRIMITIVE_CAT(a, b) - -#define SSE2NEON_IIF(c) SSE2NEON_PRIMITIVE_CAT(SSE2NEON_IIF_, c) -/* run the 2nd parameter */ -#define SSE2NEON_IIF_0(t, ...) __VA_ARGS__ -/* run the 1st parameter */ -#define SSE2NEON_IIF_1(t, ...) t - -#define SSE2NEON_COMPL(b) SSE2NEON_PRIMITIVE_CAT(SSE2NEON_COMPL_, b) -#define SSE2NEON_COMPL_0 1 -#define SSE2NEON_COMPL_1 0 - -#define SSE2NEON_DEC(x) SSE2NEON_PRIMITIVE_CAT(SSE2NEON_DEC_, x) -#define SSE2NEON_DEC_1 0 -#define SSE2NEON_DEC_2 1 -#define SSE2NEON_DEC_3 2 -#define SSE2NEON_DEC_4 3 -#define SSE2NEON_DEC_5 4 -#define SSE2NEON_DEC_6 5 -#define SSE2NEON_DEC_7 6 -#define SSE2NEON_DEC_8 7 -#define SSE2NEON_DEC_9 8 -#define SSE2NEON_DEC_10 9 -#define SSE2NEON_DEC_11 10 -#define SSE2NEON_DEC_12 11 -#define SSE2NEON_DEC_13 12 -#define SSE2NEON_DEC_14 13 -#define SSE2NEON_DEC_15 14 -#define SSE2NEON_DEC_16 15 - -/* detection */ -#define SSE2NEON_CHECK_N(x, n, ...) n -#define SSE2NEON_CHECK(...) SSE2NEON_CHECK_N(__VA_ARGS__, 0, ) -#define SSE2NEON_PROBE(x) x, 1, - -#define SSE2NEON_NOT(x) SSE2NEON_CHECK(SSE2NEON_PRIMITIVE_CAT(SSE2NEON_NOT_, x)) -#define SSE2NEON_NOT_0 SSE2NEON_PROBE(~) - -#define SSE2NEON_BOOL(x) SSE2NEON_COMPL(SSE2NEON_NOT(x)) -#define SSE2NEON_IF(c) SSE2NEON_IIF(SSE2NEON_BOOL(c)) - -#define SSE2NEON_EAT(...) -#define SSE2NEON_EXPAND(...) __VA_ARGS__ -#define SSE2NEON_WHEN(c) SSE2NEON_IF(c)(SSE2NEON_EXPAND, SSE2NEON_EAT) - -/* recursion */ -/* deferred expression */ -#define SSE2NEON_EMPTY() -#define SSE2NEON_DEFER(id) id SSE2NEON_EMPTY() -#define SSE2NEON_OBSTRUCT(...) __VA_ARGS__ SSE2NEON_DEFER(SSE2NEON_EMPTY)() -#define SSE2NEON_EXPAND(...) __VA_ARGS__ - -#define SSE2NEON_EVAL(...) \ - SSE2NEON_EVAL1(SSE2NEON_EVAL1(SSE2NEON_EVAL1(__VA_ARGS__))) -#define SSE2NEON_EVAL1(...) \ - SSE2NEON_EVAL2(SSE2NEON_EVAL2(SSE2NEON_EVAL2(__VA_ARGS__))) -#define SSE2NEON_EVAL2(...) \ - SSE2NEON_EVAL3(SSE2NEON_EVAL3(SSE2NEON_EVAL3(__VA_ARGS__))) -#define SSE2NEON_EVAL3(...) __VA_ARGS__ - -#define SSE2NEON_REPEAT(count, macro, ...) \ - SSE2NEON_WHEN(count) \ - (SSE2NEON_OBSTRUCT(SSE2NEON_REPEAT_INDIRECT)()( \ - SSE2NEON_DEC(count), macro, \ - __VA_ARGS__) SSE2NEON_OBSTRUCT(macro)(SSE2NEON_DEC(count), \ - __VA_ARGS__)) -#define SSE2NEON_REPEAT_INDIRECT() SSE2NEON_REPEAT - -#define SSE2NEON_SIZE_OF_byte 8 -#define SSE2NEON_NUMBER_OF_LANES_byte 16 -#define SSE2NEON_SIZE_OF_word 16 -#define SSE2NEON_NUMBER_OF_LANES_word 8 - -#define SSE2NEON_COMPARE_EQUAL_THEN_FILL_LANE(i, type) \ - mtx[i] = vreinterpretq_m128i_##type(vceqq_##type( \ - vdupq_n_##type(vgetq_lane_##type(vreinterpretq_##type##_m128i(b), i)), \ - vreinterpretq_##type##_m128i(a))); - -#define SSE2NEON_FILL_LANE(i, type) \ - vec_b[i] = \ - vdupq_n_##type(vgetq_lane_##type(vreinterpretq_##type##_m128i(b), i)); - -#define PCMPSTR_RANGES(a, b, mtx, data_type_prefix, type_prefix, size, \ - number_of_lanes, byte_or_word) \ - do { \ - SSE2NEON_CAT( \ - data_type_prefix, \ - SSE2NEON_CAT(size, \ - SSE2NEON_CAT(x, SSE2NEON_CAT(number_of_lanes, _t)))) \ - vec_b[number_of_lanes]; \ - __m128i mask = SSE2NEON_IIF(byte_or_word)( \ - vreinterpretq_m128i_u16(vdupq_n_u16(0xff)), \ - vreinterpretq_m128i_u32(vdupq_n_u32(0xffff))); \ - SSE2NEON_EVAL(SSE2NEON_REPEAT(number_of_lanes, SSE2NEON_FILL_LANE, \ - SSE2NEON_CAT(type_prefix, size))) \ - for (int i = 0; i < number_of_lanes; i++) { \ - mtx[i] = SSE2NEON_CAT(vreinterpretq_m128i_u, \ - size)(SSE2NEON_CAT(vbslq_u, size)( \ - SSE2NEON_CAT(vreinterpretq_u, \ - SSE2NEON_CAT(size, _m128i))(mask), \ - SSE2NEON_CAT(vcgeq_, SSE2NEON_CAT(type_prefix, size))( \ - vec_b[i], \ - SSE2NEON_CAT( \ - vreinterpretq_, \ - SSE2NEON_CAT(type_prefix, \ - SSE2NEON_CAT(size, _m128i(a))))), \ - SSE2NEON_CAT(vcleq_, SSE2NEON_CAT(type_prefix, size))( \ - vec_b[i], \ - SSE2NEON_CAT( \ - vreinterpretq_, \ - SSE2NEON_CAT(type_prefix, \ - SSE2NEON_CAT(size, _m128i(a))))))); \ - } \ - } while (0) - -#define PCMPSTR_EQ(a, b, mtx, size, number_of_lanes) \ - do { \ - SSE2NEON_EVAL(SSE2NEON_REPEAT(number_of_lanes, \ - SSE2NEON_COMPARE_EQUAL_THEN_FILL_LANE, \ - SSE2NEON_CAT(u, size))) \ - } while (0) - -#define SSE2NEON_CMP_EQUAL_ANY_IMPL(type) \ - static int _sse2neon_cmp_##type##_equal_any(__m128i a, int la, __m128i b, \ - int lb) \ - { \ - __m128i mtx[16]; \ - PCMPSTR_EQ(a, b, mtx, SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ - SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, type)); \ - return SSE2NEON_CAT( \ - _sse2neon_aggregate_equal_any_, \ - SSE2NEON_CAT( \ - SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ - SSE2NEON_CAT(x, SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, \ - type))))(la, lb, mtx); \ - } - -#define SSE2NEON_CMP_RANGES_IMPL(type, data_type, us, byte_or_word) \ - static int _sse2neon_cmp_##us##type##_ranges(__m128i a, int la, __m128i b, \ - int lb) \ - { \ - __m128i mtx[16]; \ - PCMPSTR_RANGES( \ - a, b, mtx, data_type, us, SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ - SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, type), byte_or_word); \ - return SSE2NEON_CAT( \ - _sse2neon_aggregate_ranges_, \ - SSE2NEON_CAT( \ - SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ - SSE2NEON_CAT(x, SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, \ - type))))(la, lb, mtx); \ - } - -#define SSE2NEON_CMP_EQUAL_ORDERED_IMPL(type) \ - static int _sse2neon_cmp_##type##_equal_ordered(__m128i a, int la, \ - __m128i b, int lb) \ - { \ - __m128i mtx[16]; \ - PCMPSTR_EQ(a, b, mtx, SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ - SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, type)); \ - return SSE2NEON_CAT( \ - _sse2neon_aggregate_equal_ordered_, \ - SSE2NEON_CAT( \ - SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ - SSE2NEON_CAT(x, \ - SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, type))))( \ - SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, type), la, lb, mtx); \ - } - -static int _sse2neon_aggregate_equal_any_8x16(int la, int lb, __m128i mtx[16]) -{ - int res = 0; - int m = (1 << la) - 1; - uint8x8_t vec_mask = vld1_u8(_sse2neon_cmpestr_mask8b); - uint8x8_t t_lo = vtst_u8(vdup_n_u8(m & 0xff), vec_mask); - uint8x8_t t_hi = vtst_u8(vdup_n_u8(m >> 8), vec_mask); - uint8x16_t vec = vcombine_u8(t_lo, t_hi); - for (int j = 0; j < lb; j++) { - mtx[j] = vreinterpretq_m128i_u8( - vandq_u8(vec, vreinterpretq_u8_m128i(mtx[j]))); - mtx[j] = vreinterpretq_m128i_u8( - vshrq_n_u8(vreinterpretq_u8_m128i(mtx[j]), 7)); - int tmp = _sse2neon_vaddvq_u8(vreinterpretq_u8_m128i(mtx[j])) ? 1 : 0; - res |= (tmp << j); - } - return res; -} - -static int _sse2neon_aggregate_equal_any_16x8(int la, int lb, __m128i mtx[16]) -{ - int res = 0; - int m = (1 << la) - 1; - uint16x8_t vec = - vtstq_u16(vdupq_n_u16(m), vld1q_u16(_sse2neon_cmpestr_mask16b)); - for (int j = 0; j < lb; j++) { - mtx[j] = vreinterpretq_m128i_u16( - vandq_u16(vec, vreinterpretq_u16_m128i(mtx[j]))); - mtx[j] = vreinterpretq_m128i_u16( - vshrq_n_u16(vreinterpretq_u16_m128i(mtx[j]), 15)); - int tmp = _sse2neon_vaddvq_u16(vreinterpretq_u16_m128i(mtx[j])) ? 1 : 0; - res |= (tmp << j); - } - return res; -} - -/* clang-format off */ -#define SSE2NEON_GENERATE_CMP_EQUAL_ANY(prefix) \ - prefix##IMPL(byte) \ - prefix##IMPL(word) -/* clang-format on */ - -SSE2NEON_GENERATE_CMP_EQUAL_ANY(SSE2NEON_CMP_EQUAL_ANY_) - -static int _sse2neon_aggregate_ranges_16x8(int la, int lb, __m128i mtx[16]) -{ - int res = 0; - int m = (1 << la) - 1; - uint16x8_t vec = - vtstq_u16(vdupq_n_u16(m), vld1q_u16(_sse2neon_cmpestr_mask16b)); - for (int j = 0; j < lb; j++) { - mtx[j] = vreinterpretq_m128i_u16( - vandq_u16(vec, vreinterpretq_u16_m128i(mtx[j]))); - mtx[j] = vreinterpretq_m128i_u16( - vshrq_n_u16(vreinterpretq_u16_m128i(mtx[j]), 15)); - __m128i tmp = vreinterpretq_m128i_u32( - vshrq_n_u32(vreinterpretq_u32_m128i(mtx[j]), 16)); - uint32x4_t vec_res = vandq_u32(vreinterpretq_u32_m128i(mtx[j]), - vreinterpretq_u32_m128i(tmp)); -#if defined(__aarch64__) || defined(_M_ARM64) - int t = vaddvq_u32(vec_res) ? 1 : 0; -#else - uint64x2_t sumh = vpaddlq_u32(vec_res); - int t = vgetq_lane_u64(sumh, 0) + vgetq_lane_u64(sumh, 1); -#endif - res |= (t << j); - } - return res; -} - -static int _sse2neon_aggregate_ranges_8x16(int la, int lb, __m128i mtx[16]) -{ - int res = 0; - int m = (1 << la) - 1; - uint8x8_t vec_mask = vld1_u8(_sse2neon_cmpestr_mask8b); - uint8x8_t t_lo = vtst_u8(vdup_n_u8(m & 0xff), vec_mask); - uint8x8_t t_hi = vtst_u8(vdup_n_u8(m >> 8), vec_mask); - uint8x16_t vec = vcombine_u8(t_lo, t_hi); - for (int j = 0; j < lb; j++) { - mtx[j] = vreinterpretq_m128i_u8( - vandq_u8(vec, vreinterpretq_u8_m128i(mtx[j]))); - mtx[j] = vreinterpretq_m128i_u8( - vshrq_n_u8(vreinterpretq_u8_m128i(mtx[j]), 7)); - __m128i tmp = vreinterpretq_m128i_u16( - vshrq_n_u16(vreinterpretq_u16_m128i(mtx[j]), 8)); - uint16x8_t vec_res = vandq_u16(vreinterpretq_u16_m128i(mtx[j]), - vreinterpretq_u16_m128i(tmp)); - int t = _sse2neon_vaddvq_u16(vec_res) ? 1 : 0; - res |= (t << j); - } - return res; -} - -#define SSE2NEON_CMP_RANGES_IS_BYTE 1 -#define SSE2NEON_CMP_RANGES_IS_WORD 0 - -/* clang-format off */ -#define SSE2NEON_GENERATE_CMP_RANGES(prefix) \ - prefix##IMPL(byte, uint, u, prefix##IS_BYTE) \ - prefix##IMPL(byte, int, s, prefix##IS_BYTE) \ - prefix##IMPL(word, uint, u, prefix##IS_WORD) \ - prefix##IMPL(word, int, s, prefix##IS_WORD) -/* clang-format on */ - -SSE2NEON_GENERATE_CMP_RANGES(SSE2NEON_CMP_RANGES_) - -#undef SSE2NEON_CMP_RANGES_IS_BYTE -#undef SSE2NEON_CMP_RANGES_IS_WORD - -static int _sse2neon_cmp_byte_equal_each(__m128i a, int la, __m128i b, int lb) -{ - uint8x16_t mtx = - vceqq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b)); - int m0 = (la < lb) ? 0 : ((1 << la) - (1 << lb)); - int m1 = 0x10000 - (1 << la); - int tb = 0x10000 - (1 << lb); - uint8x8_t vec_mask, vec0_lo, vec0_hi, vec1_lo, vec1_hi; - uint8x8_t tmp_lo, tmp_hi, res_lo, res_hi; - vec_mask = vld1_u8(_sse2neon_cmpestr_mask8b); - vec0_lo = vtst_u8(vdup_n_u8(m0), vec_mask); - vec0_hi = vtst_u8(vdup_n_u8(m0 >> 8), vec_mask); - vec1_lo = vtst_u8(vdup_n_u8(m1), vec_mask); - vec1_hi = vtst_u8(vdup_n_u8(m1 >> 8), vec_mask); - tmp_lo = vtst_u8(vdup_n_u8(tb), vec_mask); - tmp_hi = vtst_u8(vdup_n_u8(tb >> 8), vec_mask); - - res_lo = vbsl_u8(vec0_lo, vdup_n_u8(0), vget_low_u8(mtx)); - res_hi = vbsl_u8(vec0_hi, vdup_n_u8(0), vget_high_u8(mtx)); - res_lo = vbsl_u8(vec1_lo, tmp_lo, res_lo); - res_hi = vbsl_u8(vec1_hi, tmp_hi, res_hi); - res_lo = vand_u8(res_lo, vec_mask); - res_hi = vand_u8(res_hi, vec_mask); - - int res = _sse2neon_vaddv_u8(res_lo) + (_sse2neon_vaddv_u8(res_hi) << 8); - return res; -} - -static int _sse2neon_cmp_word_equal_each(__m128i a, int la, __m128i b, int lb) -{ - uint16x8_t mtx = - vceqq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b)); - int m0 = (la < lb) ? 0 : ((1 << la) - (1 << lb)); - int m1 = 0x100 - (1 << la); - int tb = 0x100 - (1 << lb); - uint16x8_t vec_mask = vld1q_u16(_sse2neon_cmpestr_mask16b); - uint16x8_t vec0 = vtstq_u16(vdupq_n_u16(m0), vec_mask); - uint16x8_t vec1 = vtstq_u16(vdupq_n_u16(m1), vec_mask); - uint16x8_t tmp = vtstq_u16(vdupq_n_u16(tb), vec_mask); - mtx = vbslq_u16(vec0, vdupq_n_u16(0), mtx); - mtx = vbslq_u16(vec1, tmp, mtx); - mtx = vandq_u16(mtx, vec_mask); - return _sse2neon_vaddvq_u16(mtx); -} - -#define SSE2NEON_AGGREGATE_EQUAL_ORDER_IS_UBYTE 1 -#define SSE2NEON_AGGREGATE_EQUAL_ORDER_IS_UWORD 0 - -#define SSE2NEON_AGGREGATE_EQUAL_ORDER_IMPL(size, number_of_lanes, data_type) \ - static int _sse2neon_aggregate_equal_ordered_##size##x##number_of_lanes( \ - int bound, int la, int lb, __m128i mtx[16]) \ - { \ - int res = 0; \ - int m1 = SSE2NEON_IIF(data_type)(0x10000, 0x100) - (1 << la); \ - uint##size##x8_t vec_mask = SSE2NEON_IIF(data_type)( \ - vld1_u##size(_sse2neon_cmpestr_mask##size##b), \ - vld1q_u##size(_sse2neon_cmpestr_mask##size##b)); \ - uint##size##x##number_of_lanes##_t vec1 = SSE2NEON_IIF(data_type)( \ - vcombine_u##size(vtst_u##size(vdup_n_u##size(m1), vec_mask), \ - vtst_u##size(vdup_n_u##size(m1 >> 8), vec_mask)), \ - vtstq_u##size(vdupq_n_u##size(m1), vec_mask)); \ - uint##size##x##number_of_lanes##_t vec_minusone = vdupq_n_u##size(-1); \ - uint##size##x##number_of_lanes##_t vec_zero = vdupq_n_u##size(0); \ - for (int j = 0; j < lb; j++) { \ - mtx[j] = vreinterpretq_m128i_u##size(vbslq_u##size( \ - vec1, vec_minusone, vreinterpretq_u##size##_m128i(mtx[j]))); \ - } \ - for (int j = lb; j < bound; j++) { \ - mtx[j] = vreinterpretq_m128i_u##size( \ - vbslq_u##size(vec1, vec_minusone, vec_zero)); \ - } \ - unsigned SSE2NEON_IIF(data_type)(char, short) *ptr = \ - (unsigned SSE2NEON_IIF(data_type)(char, short) *) mtx; \ - for (int i = 0; i < bound; i++) { \ - int val = 1; \ - for (int j = 0, k = i; j < bound - i && k < bound; j++, k++) \ - val &= ptr[k * bound + j]; \ - res += val << i; \ - } \ - return res; \ - } - -/* clang-format off */ -#define SSE2NEON_GENERATE_AGGREGATE_EQUAL_ORDER(prefix) \ - prefix##IMPL(8, 16, prefix##IS_UBYTE) \ - prefix##IMPL(16, 8, prefix##IS_UWORD) -/* clang-format on */ - -SSE2NEON_GENERATE_AGGREGATE_EQUAL_ORDER(SSE2NEON_AGGREGATE_EQUAL_ORDER_) - -#undef SSE2NEON_AGGREGATE_EQUAL_ORDER_IS_UBYTE -#undef SSE2NEON_AGGREGATE_EQUAL_ORDER_IS_UWORD - -/* clang-format off */ -#define SSE2NEON_GENERATE_CMP_EQUAL_ORDERED(prefix) \ - prefix##IMPL(byte) \ - prefix##IMPL(word) -/* clang-format on */ - -SSE2NEON_GENERATE_CMP_EQUAL_ORDERED(SSE2NEON_CMP_EQUAL_ORDERED_) - -#define SSE2NEON_CMPESTR_LIST \ - _(CMP_UBYTE_EQUAL_ANY, cmp_byte_equal_any) \ - _(CMP_UWORD_EQUAL_ANY, cmp_word_equal_any) \ - _(CMP_SBYTE_EQUAL_ANY, cmp_byte_equal_any) \ - _(CMP_SWORD_EQUAL_ANY, cmp_word_equal_any) \ - _(CMP_UBYTE_RANGES, cmp_ubyte_ranges) \ - _(CMP_UWORD_RANGES, cmp_uword_ranges) \ - _(CMP_SBYTE_RANGES, cmp_sbyte_ranges) \ - _(CMP_SWORD_RANGES, cmp_sword_ranges) \ - _(CMP_UBYTE_EQUAL_EACH, cmp_byte_equal_each) \ - _(CMP_UWORD_EQUAL_EACH, cmp_word_equal_each) \ - _(CMP_SBYTE_EQUAL_EACH, cmp_byte_equal_each) \ - _(CMP_SWORD_EQUAL_EACH, cmp_word_equal_each) \ - _(CMP_UBYTE_EQUAL_ORDERED, cmp_byte_equal_ordered) \ - _(CMP_UWORD_EQUAL_ORDERED, cmp_word_equal_ordered) \ - _(CMP_SBYTE_EQUAL_ORDERED, cmp_byte_equal_ordered) \ - _(CMP_SWORD_EQUAL_ORDERED, cmp_word_equal_ordered) - -enum { -#define _(name, func_suffix) name, - SSE2NEON_CMPESTR_LIST -#undef _ -}; -typedef int (*cmpestr_func_t)(__m128i a, int la, __m128i b, int lb); -static cmpestr_func_t _sse2neon_cmpfunc_table[] = { -#define _(name, func_suffix) _sse2neon_##func_suffix, - SSE2NEON_CMPESTR_LIST -#undef _ -}; - -FORCE_INLINE int _sse2neon_sido_negative(int res, int lb, int imm8, int bound) -{ - switch (imm8 & 0x30) { - case _SIDD_NEGATIVE_POLARITY: - res ^= 0xffffffff; - break; - case _SIDD_MASKED_NEGATIVE_POLARITY: - res ^= (1 << lb) - 1; - break; - default: - break; - } - - return res & ((bound == 8) ? 0xFF : 0xFFFF); -} - -FORCE_INLINE int _sse2neon_clz(unsigned int x) -{ -#if defined(_MSC_VER) && !defined(__clang__) - unsigned long cnt = 0; - if (_BitScanReverse(&cnt, x)) - return 31 - cnt; - return 32; -#else - return x != 0 ? __builtin_clz(x) : 32; -#endif -} - -FORCE_INLINE int _sse2neon_ctz(unsigned int x) -{ -#if defined(_MSC_VER) && !defined(__clang__) - unsigned long cnt = 0; - if (_BitScanForward(&cnt, x)) - return cnt; - return 32; -#else - return x != 0 ? __builtin_ctz(x) : 32; -#endif -} - -FORCE_INLINE int _sse2neon_ctzll(unsigned long long x) -{ -#ifdef _MSC_VER - unsigned long cnt; -#if defined(SSE2NEON_HAS_BITSCAN64) - if (_BitScanForward64(&cnt, x)) - return (int) (cnt); -#else - if (_BitScanForward(&cnt, (unsigned long) (x))) - return (int) cnt; - if (_BitScanForward(&cnt, (unsigned long) (x >> 32))) - return (int) (cnt + 32); -#endif /* SSE2NEON_HAS_BITSCAN64 */ - return 64; -#else /* assume GNU compatible compilers */ - return x != 0 ? __builtin_ctzll(x) : 64; -#endif -} - -#define SSE2NEON_MIN(x, y) (x) < (y) ? (x) : (y) - -#define SSE2NEON_CMPSTR_SET_UPPER(var, imm) \ - const int var = (imm & 0x01) ? 8 : 16 - -#define SSE2NEON_CMPESTRX_LEN_PAIR(a, b, la, lb) \ - int tmp1 = la ^ (la >> 31); \ - la = tmp1 - (la >> 31); \ - int tmp2 = lb ^ (lb >> 31); \ - lb = tmp2 - (lb >> 31); \ - la = SSE2NEON_MIN(la, bound); \ - lb = SSE2NEON_MIN(lb, bound) - -// Compare all pairs of character in string a and b, -// then aggregate the result. -// As the only difference of PCMPESTR* and PCMPISTR* is the way to calculate the -// length of string, we use SSE2NEON_CMP{I,E}STRX_GET_LEN to get the length of -// string a and b. -#define SSE2NEON_COMP_AGG(a, b, la, lb, imm8, IE) \ - SSE2NEON_CMPSTR_SET_UPPER(bound, imm8); \ - SSE2NEON_##IE##_LEN_PAIR(a, b, la, lb); \ - int r2 = (_sse2neon_cmpfunc_table[imm8 & 0x0f])(a, la, b, lb); \ - r2 = _sse2neon_sido_negative(r2, lb, imm8, bound) - -#define SSE2NEON_CMPSTR_GENERATE_INDEX(r2, bound, imm8) \ - return (r2 == 0) ? bound \ - : ((imm8 & 0x40) ? (31 - _sse2neon_clz(r2)) \ - : _sse2neon_ctz(r2)) - -#define SSE2NEON_CMPSTR_GENERATE_MASK(dst) \ - __m128i dst = vreinterpretq_m128i_u8(vdupq_n_u8(0)); \ - if (imm8 & 0x40) { \ - if (bound == 8) { \ - uint16x8_t tmp = vtstq_u16(vdupq_n_u16(r2), \ - vld1q_u16(_sse2neon_cmpestr_mask16b)); \ - dst = vreinterpretq_m128i_u16(vbslq_u16( \ - tmp, vdupq_n_u16(-1), vreinterpretq_u16_m128i(dst))); \ - } else { \ - uint8x16_t vec_r2 = \ - vcombine_u8(vdup_n_u8(r2), vdup_n_u8(r2 >> 8)); \ - uint8x16_t tmp = \ - vtstq_u8(vec_r2, vld1q_u8(_sse2neon_cmpestr_mask8b)); \ - dst = vreinterpretq_m128i_u8( \ - vbslq_u8(tmp, vdupq_n_u8(-1), vreinterpretq_u8_m128i(dst))); \ - } \ - } else { \ - if (bound == 16) { \ - dst = vreinterpretq_m128i_u16( \ - vsetq_lane_u16(r2 & 0xffff, vreinterpretq_u16_m128i(dst), 0)); \ - } else { \ - dst = vreinterpretq_m128i_u8( \ - vsetq_lane_u8(r2 & 0xff, vreinterpretq_u8_m128i(dst), 0)); \ - } \ - } \ - return dst - -// Compare packed strings in a and b with lengths la and lb using the control -// in imm8, and returns 1 if b did not contain a null character and the -// resulting mask was zero, and 0 otherwise. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestra -FORCE_INLINE int _mm_cmpestra(__m128i a, - int la, - __m128i b, - int lb, - const int imm8) -{ - int lb_cpy = lb; - SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPESTRX); - return !r2 & (lb_cpy > bound); -} - -// Compare packed strings in a and b with lengths la and lb using the control in -// imm8, and returns 1 if the resulting mask was non-zero, and 0 otherwise. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestrc -FORCE_INLINE int _mm_cmpestrc(__m128i a, - int la, - __m128i b, - int lb, - const int imm8) -{ - SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPESTRX); - return r2 != 0; -} - -// Compare packed strings in a and b with lengths la and lb using the control -// in imm8, and store the generated index in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestri -FORCE_INLINE int _mm_cmpestri(__m128i a, - int la, - __m128i b, - int lb, - const int imm8) -{ - SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPESTRX); - SSE2NEON_CMPSTR_GENERATE_INDEX(r2, bound, imm8); -} - -// Compare packed strings in a and b with lengths la and lb using the control -// in imm8, and store the generated mask in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestrm -FORCE_INLINE __m128i -_mm_cmpestrm(__m128i a, int la, __m128i b, int lb, const int imm8) -{ - SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPESTRX); - SSE2NEON_CMPSTR_GENERATE_MASK(dst); -} - -// Compare packed strings in a and b with lengths la and lb using the control in -// imm8, and returns bit 0 of the resulting bit mask. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestro -FORCE_INLINE int _mm_cmpestro(__m128i a, - int la, - __m128i b, - int lb, - const int imm8) -{ - SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPESTRX); - return r2 & 1; -} - -// Compare packed strings in a and b with lengths la and lb using the control in -// imm8, and returns 1 if any character in a was null, and 0 otherwise. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestrs -FORCE_INLINE int _mm_cmpestrs(__m128i a, - int la, - __m128i b, - int lb, - const int imm8) -{ - (void) a; - (void) b; - (void) lb; - SSE2NEON_CMPSTR_SET_UPPER(bound, imm8); - return la <= (bound - 1); -} - -// Compare packed strings in a and b with lengths la and lb using the control in -// imm8, and returns 1 if any character in b was null, and 0 otherwise. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestrz -FORCE_INLINE int _mm_cmpestrz(__m128i a, - int la, - __m128i b, - int lb, - const int imm8) -{ - (void) a; - (void) b; - (void) la; - SSE2NEON_CMPSTR_SET_UPPER(bound, imm8); - return lb <= (bound - 1); -} - -#define SSE2NEON_CMPISTRX_LENGTH(str, len, imm8) \ - do { \ - if (imm8 & 0x01) { \ - uint16x8_t equal_mask_##str = \ - vceqq_u16(vreinterpretq_u16_m128i(str), vdupq_n_u16(0)); \ - uint8x8_t res_##str = vshrn_n_u16(equal_mask_##str, 4); \ - uint64_t matches_##str = \ - vget_lane_u64(vreinterpret_u64_u8(res_##str), 0); \ - len = _sse2neon_ctzll(matches_##str) >> 3; \ - } else { \ - uint16x8_t equal_mask_##str = vreinterpretq_u16_u8( \ - vceqq_u8(vreinterpretq_u8_m128i(str), vdupq_n_u8(0))); \ - uint8x8_t res_##str = vshrn_n_u16(equal_mask_##str, 4); \ - uint64_t matches_##str = \ - vget_lane_u64(vreinterpret_u64_u8(res_##str), 0); \ - len = _sse2neon_ctzll(matches_##str) >> 2; \ - } \ - } while (0) - -#define SSE2NEON_CMPISTRX_LEN_PAIR(a, b, la, lb) \ - int la, lb; \ - do { \ - SSE2NEON_CMPISTRX_LENGTH(a, la, imm8); \ - SSE2NEON_CMPISTRX_LENGTH(b, lb, imm8); \ - } while (0) - -// Compare packed strings with implicit lengths in a and b using the control in -// imm8, and returns 1 if b did not contain a null character and the resulting -// mask was zero, and 0 otherwise. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistra -FORCE_INLINE int _mm_cmpistra(__m128i a, __m128i b, const int imm8) -{ - SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPISTRX); - return !r2 & (lb >= bound); -} - -// Compare packed strings with implicit lengths in a and b using the control in -// imm8, and returns 1 if the resulting mask was non-zero, and 0 otherwise. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistrc -FORCE_INLINE int _mm_cmpistrc(__m128i a, __m128i b, const int imm8) -{ - SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPISTRX); - return r2 != 0; -} - -// Compare packed strings with implicit lengths in a and b using the control in -// imm8, and store the generated index in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistri -FORCE_INLINE int _mm_cmpistri(__m128i a, __m128i b, const int imm8) -{ - SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPISTRX); - SSE2NEON_CMPSTR_GENERATE_INDEX(r2, bound, imm8); -} - -// Compare packed strings with implicit lengths in a and b using the control in -// imm8, and store the generated mask in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistrm -FORCE_INLINE __m128i _mm_cmpistrm(__m128i a, __m128i b, const int imm8) -{ - SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPISTRX); - SSE2NEON_CMPSTR_GENERATE_MASK(dst); -} - -// Compare packed strings with implicit lengths in a and b using the control in -// imm8, and returns bit 0 of the resulting bit mask. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistro -FORCE_INLINE int _mm_cmpistro(__m128i a, __m128i b, const int imm8) -{ - SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPISTRX); - return r2 & 1; -} - -// Compare packed strings with implicit lengths in a and b using the control in -// imm8, and returns 1 if any character in a was null, and 0 otherwise. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistrs -FORCE_INLINE int _mm_cmpistrs(__m128i a, __m128i b, const int imm8) -{ - (void) b; - SSE2NEON_CMPSTR_SET_UPPER(bound, imm8); - int la; - SSE2NEON_CMPISTRX_LENGTH(a, la, imm8); - return la <= (bound - 1); -} - -// Compare packed strings with implicit lengths in a and b using the control in -// imm8, and returns 1 if any character in b was null, and 0 otherwise. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistrz -FORCE_INLINE int _mm_cmpistrz(__m128i a, __m128i b, const int imm8) -{ - (void) a; - SSE2NEON_CMPSTR_SET_UPPER(bound, imm8); - int lb; - SSE2NEON_CMPISTRX_LENGTH(b, lb, imm8); - return lb <= (bound - 1); -} - -// Compares the 2 signed 64-bit integers in a and the 2 signed 64-bit integers -// in b for greater than. -FORCE_INLINE __m128i _mm_cmpgt_epi64(__m128i a, __m128i b) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - return vreinterpretq_m128i_u64( - vcgtq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); -#else - return vreinterpretq_m128i_s64(vshrq_n_s64( - vqsubq_s64(vreinterpretq_s64_m128i(b), vreinterpretq_s64_m128i(a)), - 63)); -#endif -} - -// Starting with the initial value in crc, accumulates a CRC32 value for -// unsigned 16-bit integer v, and stores the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_crc32_u16 -FORCE_INLINE uint32_t _mm_crc32_u16(uint32_t crc, uint16_t v) -{ -#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) - __asm__ __volatile__("crc32ch %w[c], %w[c], %w[v]\n\t" - : [c] "+r"(crc) - : [v] "r"(v)); -#elif ((__ARM_ARCH == 8) && defined(__ARM_FEATURE_CRC32)) || \ - (defined(_M_ARM64) && !defined(__clang__)) - crc = __crc32ch(crc, v); -#else - crc = _mm_crc32_u8(crc, v & 0xff); - crc = _mm_crc32_u8(crc, (v >> 8) & 0xff); -#endif - return crc; -} - -// Starting with the initial value in crc, accumulates a CRC32 value for -// unsigned 32-bit integer v, and stores the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_crc32_u32 -FORCE_INLINE uint32_t _mm_crc32_u32(uint32_t crc, uint32_t v) -{ -#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) - __asm__ __volatile__("crc32cw %w[c], %w[c], %w[v]\n\t" - : [c] "+r"(crc) - : [v] "r"(v)); -#elif ((__ARM_ARCH == 8) && defined(__ARM_FEATURE_CRC32)) || \ - (defined(_M_ARM64) && !defined(__clang__)) - crc = __crc32cw(crc, v); -#else - crc = _mm_crc32_u16(crc, v & 0xffff); - crc = _mm_crc32_u16(crc, (v >> 16) & 0xffff); -#endif - return crc; -} - -// Starting with the initial value in crc, accumulates a CRC32 value for -// unsigned 64-bit integer v, and stores the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_crc32_u64 -FORCE_INLINE uint64_t _mm_crc32_u64(uint64_t crc, uint64_t v) -{ -#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) - __asm__ __volatile__("crc32cx %w[c], %w[c], %x[v]\n\t" - : [c] "+r"(crc) - : [v] "r"(v)); -#elif (defined(_M_ARM64) && !defined(__clang__)) - crc = __crc32cd((uint32_t) crc, v); -#else - crc = _mm_crc32_u32((uint32_t) (crc), v & 0xffffffff); - crc = _mm_crc32_u32((uint32_t) (crc), (v >> 32) & 0xffffffff); -#endif - return crc; -} - -// Starting with the initial value in crc, accumulates a CRC32 value for -// unsigned 8-bit integer v, and stores the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_crc32_u8 -FORCE_INLINE uint32_t _mm_crc32_u8(uint32_t crc, uint8_t v) -{ -#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) - __asm__ __volatile__("crc32cb %w[c], %w[c], %w[v]\n\t" - : [c] "+r"(crc) - : [v] "r"(v)); -#elif ((__ARM_ARCH == 8) && defined(__ARM_FEATURE_CRC32)) || \ - (defined(_M_ARM64) && !defined(__clang__)) - crc = __crc32cb(crc, v); -#else - crc ^= v; -#if defined(__ARM_FEATURE_CRYPTO) - // Adapted from: https://mary.rs/lab/crc32/ - // Barrent reduction - uint64x2_t orig = - vcombine_u64(vcreate_u64((uint64_t) (crc) << 24), vcreate_u64(0x0)); - uint64x2_t tmp = orig; - - // Polynomial P(x) of CRC32C - uint64_t p = 0x105EC76F1; - // Barrett Reduction (in bit-reflected form) constant mu_{64} = \lfloor - // 2^{64} / P(x) \rfloor = 0x11f91caf6 - uint64_t mu = 0x1dea713f1; - - // Multiply by mu_{64} - tmp = _sse2neon_vmull_p64(vget_low_u64(tmp), vcreate_u64(mu)); - // Divide by 2^{64} (mask away the unnecessary bits) - tmp = - vandq_u64(tmp, vcombine_u64(vcreate_u64(0xFFFFFFFF), vcreate_u64(0x0))); - // Multiply by P(x) (shifted left by 1 for alignment reasons) - tmp = _sse2neon_vmull_p64(vget_low_u64(tmp), vcreate_u64(p)); - // Subtract original from result - tmp = veorq_u64(tmp, orig); - - // Extract the 'lower' (in bit-reflected sense) 32 bits - crc = vgetq_lane_u32(vreinterpretq_u32_u64(tmp), 1); -#else // Fall back to the generic table lookup approach - // Adapted from: https://create.stephan-brumme.com/crc32/ - // Apply half-byte comparison algorithm for the best ratio between - // performance and lookup table. - - // The lookup table just needs to store every 16th entry - // of the standard look-up table. - static const uint32_t crc32_half_byte_tbl[] = { - 0x00000000, 0x105ec76f, 0x20bd8ede, 0x30e349b1, 0x417b1dbc, 0x5125dad3, - 0x61c69362, 0x7198540d, 0x82f63b78, 0x92a8fc17, 0xa24bb5a6, 0xb21572c9, - 0xc38d26c4, 0xd3d3e1ab, 0xe330a81a, 0xf36e6f75, - }; - - crc = (crc >> 4) ^ crc32_half_byte_tbl[crc & 0x0F]; - crc = (crc >> 4) ^ crc32_half_byte_tbl[crc & 0x0F]; -#endif -#endif - return crc; -} - -/* AES */ - -#if !defined(__ARM_FEATURE_CRYPTO) && (!defined(_M_ARM64) || defined(__clang__)) -/* clang-format off */ -#define SSE2NEON_AES_SBOX(w) \ - { \ - w(0x63), w(0x7c), w(0x77), w(0x7b), w(0xf2), w(0x6b), w(0x6f), \ - w(0xc5), w(0x30), w(0x01), w(0x67), w(0x2b), w(0xfe), w(0xd7), \ - w(0xab), w(0x76), w(0xca), w(0x82), w(0xc9), w(0x7d), w(0xfa), \ - w(0x59), w(0x47), w(0xf0), w(0xad), w(0xd4), w(0xa2), w(0xaf), \ - w(0x9c), w(0xa4), w(0x72), w(0xc0), w(0xb7), w(0xfd), w(0x93), \ - w(0x26), w(0x36), w(0x3f), w(0xf7), w(0xcc), w(0x34), w(0xa5), \ - w(0xe5), w(0xf1), w(0x71), w(0xd8), w(0x31), w(0x15), w(0x04), \ - w(0xc7), w(0x23), w(0xc3), w(0x18), w(0x96), w(0x05), w(0x9a), \ - w(0x07), w(0x12), w(0x80), w(0xe2), w(0xeb), w(0x27), w(0xb2), \ - w(0x75), w(0x09), w(0x83), w(0x2c), w(0x1a), w(0x1b), w(0x6e), \ - w(0x5a), w(0xa0), w(0x52), w(0x3b), w(0xd6), w(0xb3), w(0x29), \ - w(0xe3), w(0x2f), w(0x84), w(0x53), w(0xd1), w(0x00), w(0xed), \ - w(0x20), w(0xfc), w(0xb1), w(0x5b), w(0x6a), w(0xcb), w(0xbe), \ - w(0x39), w(0x4a), w(0x4c), w(0x58), w(0xcf), w(0xd0), w(0xef), \ - w(0xaa), w(0xfb), w(0x43), w(0x4d), w(0x33), w(0x85), w(0x45), \ - w(0xf9), w(0x02), w(0x7f), w(0x50), w(0x3c), w(0x9f), w(0xa8), \ - w(0x51), w(0xa3), w(0x40), w(0x8f), w(0x92), w(0x9d), w(0x38), \ - w(0xf5), w(0xbc), w(0xb6), w(0xda), w(0x21), w(0x10), w(0xff), \ - w(0xf3), w(0xd2), w(0xcd), w(0x0c), w(0x13), w(0xec), w(0x5f), \ - w(0x97), w(0x44), w(0x17), w(0xc4), w(0xa7), w(0x7e), w(0x3d), \ - w(0x64), w(0x5d), w(0x19), w(0x73), w(0x60), w(0x81), w(0x4f), \ - w(0xdc), w(0x22), w(0x2a), w(0x90), w(0x88), w(0x46), w(0xee), \ - w(0xb8), w(0x14), w(0xde), w(0x5e), w(0x0b), w(0xdb), w(0xe0), \ - w(0x32), w(0x3a), w(0x0a), w(0x49), w(0x06), w(0x24), w(0x5c), \ - w(0xc2), w(0xd3), w(0xac), w(0x62), w(0x91), w(0x95), w(0xe4), \ - w(0x79), w(0xe7), w(0xc8), w(0x37), w(0x6d), w(0x8d), w(0xd5), \ - w(0x4e), w(0xa9), w(0x6c), w(0x56), w(0xf4), w(0xea), w(0x65), \ - w(0x7a), w(0xae), w(0x08), w(0xba), w(0x78), w(0x25), w(0x2e), \ - w(0x1c), w(0xa6), w(0xb4), w(0xc6), w(0xe8), w(0xdd), w(0x74), \ - w(0x1f), w(0x4b), w(0xbd), w(0x8b), w(0x8a), w(0x70), w(0x3e), \ - w(0xb5), w(0x66), w(0x48), w(0x03), w(0xf6), w(0x0e), w(0x61), \ - w(0x35), w(0x57), w(0xb9), w(0x86), w(0xc1), w(0x1d), w(0x9e), \ - w(0xe1), w(0xf8), w(0x98), w(0x11), w(0x69), w(0xd9), w(0x8e), \ - w(0x94), w(0x9b), w(0x1e), w(0x87), w(0xe9), w(0xce), w(0x55), \ - w(0x28), w(0xdf), w(0x8c), w(0xa1), w(0x89), w(0x0d), w(0xbf), \ - w(0xe6), w(0x42), w(0x68), w(0x41), w(0x99), w(0x2d), w(0x0f), \ - w(0xb0), w(0x54), w(0xbb), w(0x16) \ - } -#define SSE2NEON_AES_RSBOX(w) \ - { \ - w(0x52), w(0x09), w(0x6a), w(0xd5), w(0x30), w(0x36), w(0xa5), \ - w(0x38), w(0xbf), w(0x40), w(0xa3), w(0x9e), w(0x81), w(0xf3), \ - w(0xd7), w(0xfb), w(0x7c), w(0xe3), w(0x39), w(0x82), w(0x9b), \ - w(0x2f), w(0xff), w(0x87), w(0x34), w(0x8e), w(0x43), w(0x44), \ - w(0xc4), w(0xde), w(0xe9), w(0xcb), w(0x54), w(0x7b), w(0x94), \ - w(0x32), w(0xa6), w(0xc2), w(0x23), w(0x3d), w(0xee), w(0x4c), \ - w(0x95), w(0x0b), w(0x42), w(0xfa), w(0xc3), w(0x4e), w(0x08), \ - w(0x2e), w(0xa1), w(0x66), w(0x28), w(0xd9), w(0x24), w(0xb2), \ - w(0x76), w(0x5b), w(0xa2), w(0x49), w(0x6d), w(0x8b), w(0xd1), \ - w(0x25), w(0x72), w(0xf8), w(0xf6), w(0x64), w(0x86), w(0x68), \ - w(0x98), w(0x16), w(0xd4), w(0xa4), w(0x5c), w(0xcc), w(0x5d), \ - w(0x65), w(0xb6), w(0x92), w(0x6c), w(0x70), w(0x48), w(0x50), \ - w(0xfd), w(0xed), w(0xb9), w(0xda), w(0x5e), w(0x15), w(0x46), \ - w(0x57), w(0xa7), w(0x8d), w(0x9d), w(0x84), w(0x90), w(0xd8), \ - w(0xab), w(0x00), w(0x8c), w(0xbc), w(0xd3), w(0x0a), w(0xf7), \ - w(0xe4), w(0x58), w(0x05), w(0xb8), w(0xb3), w(0x45), w(0x06), \ - w(0xd0), w(0x2c), w(0x1e), w(0x8f), w(0xca), w(0x3f), w(0x0f), \ - w(0x02), w(0xc1), w(0xaf), w(0xbd), w(0x03), w(0x01), w(0x13), \ - w(0x8a), w(0x6b), w(0x3a), w(0x91), w(0x11), w(0x41), w(0x4f), \ - w(0x67), w(0xdc), w(0xea), w(0x97), w(0xf2), w(0xcf), w(0xce), \ - w(0xf0), w(0xb4), w(0xe6), w(0x73), w(0x96), w(0xac), w(0x74), \ - w(0x22), w(0xe7), w(0xad), w(0x35), w(0x85), w(0xe2), w(0xf9), \ - w(0x37), w(0xe8), w(0x1c), w(0x75), w(0xdf), w(0x6e), w(0x47), \ - w(0xf1), w(0x1a), w(0x71), w(0x1d), w(0x29), w(0xc5), w(0x89), \ - w(0x6f), w(0xb7), w(0x62), w(0x0e), w(0xaa), w(0x18), w(0xbe), \ - w(0x1b), w(0xfc), w(0x56), w(0x3e), w(0x4b), w(0xc6), w(0xd2), \ - w(0x79), w(0x20), w(0x9a), w(0xdb), w(0xc0), w(0xfe), w(0x78), \ - w(0xcd), w(0x5a), w(0xf4), w(0x1f), w(0xdd), w(0xa8), w(0x33), \ - w(0x88), w(0x07), w(0xc7), w(0x31), w(0xb1), w(0x12), w(0x10), \ - w(0x59), w(0x27), w(0x80), w(0xec), w(0x5f), w(0x60), w(0x51), \ - w(0x7f), w(0xa9), w(0x19), w(0xb5), w(0x4a), w(0x0d), w(0x2d), \ - w(0xe5), w(0x7a), w(0x9f), w(0x93), w(0xc9), w(0x9c), w(0xef), \ - w(0xa0), w(0xe0), w(0x3b), w(0x4d), w(0xae), w(0x2a), w(0xf5), \ - w(0xb0), w(0xc8), w(0xeb), w(0xbb), w(0x3c), w(0x83), w(0x53), \ - w(0x99), w(0x61), w(0x17), w(0x2b), w(0x04), w(0x7e), w(0xba), \ - w(0x77), w(0xd6), w(0x26), w(0xe1), w(0x69), w(0x14), w(0x63), \ - w(0x55), w(0x21), w(0x0c), w(0x7d) \ - } -/* clang-format on */ - -/* X Macro trick. See https://en.wikipedia.org/wiki/X_Macro */ -#define SSE2NEON_AES_H0(x) (x) -static const uint8_t _sse2neon_sbox[256] = SSE2NEON_AES_SBOX(SSE2NEON_AES_H0); -static const uint8_t _sse2neon_rsbox[256] = SSE2NEON_AES_RSBOX(SSE2NEON_AES_H0); -#undef SSE2NEON_AES_H0 - -/* x_time function and matrix multiply function */ -#if !defined(__aarch64__) && !defined(_M_ARM64) -#define SSE2NEON_XT(x) (((x) << 1) ^ ((((x) >> 7) & 1) * 0x1b)) -#define SSE2NEON_MULTIPLY(x, y) \ - (((y & 1) * x) ^ ((y >> 1 & 1) * SSE2NEON_XT(x)) ^ \ - ((y >> 2 & 1) * SSE2NEON_XT(SSE2NEON_XT(x))) ^ \ - ((y >> 3 & 1) * SSE2NEON_XT(SSE2NEON_XT(SSE2NEON_XT(x)))) ^ \ - ((y >> 4 & 1) * SSE2NEON_XT(SSE2NEON_XT(SSE2NEON_XT(SSE2NEON_XT(x)))))) -#endif - -// In the absence of crypto extensions, implement aesenc using regular NEON -// intrinsics instead. See: -// https://www.workofard.com/2017/01/accelerated-aes-for-the-arm64-linux-kernel/ -// https://www.workofard.com/2017/07/ghash-for-low-end-cores/ and -// for more information. -FORCE_INLINE __m128i _mm_aesenc_si128(__m128i a, __m128i RoundKey) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - static const uint8_t shift_rows[] = { - 0x0, 0x5, 0xa, 0xf, 0x4, 0x9, 0xe, 0x3, - 0x8, 0xd, 0x2, 0x7, 0xc, 0x1, 0x6, 0xb, - }; - static const uint8_t ror32by8[] = { - 0x1, 0x2, 0x3, 0x0, 0x5, 0x6, 0x7, 0x4, - 0x9, 0xa, 0xb, 0x8, 0xd, 0xe, 0xf, 0xc, - }; - - uint8x16_t v; - uint8x16_t w = vreinterpretq_u8_m128i(a); - - /* shift rows */ - w = vqtbl1q_u8(w, vld1q_u8(shift_rows)); - - /* sub bytes */ - // Here, we separate the whole 256-bytes table into 4 64-bytes tables, and - // look up each of the table. After each lookup, we load the next table - // which locates at the next 64-bytes. In the meantime, the index in the - // table would be smaller than it was, so the index parameters of - // `vqtbx4q_u8()` need to be added the same constant as the loaded tables. - v = vqtbl4q_u8(_sse2neon_vld1q_u8_x4(_sse2neon_sbox), w); - // 'w-0x40' equals to 'vsubq_u8(w, vdupq_n_u8(0x40))' - v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x40), w - 0x40); - v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x80), w - 0x80); - v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0xc0), w - 0xc0); - - /* mix columns */ - w = (v << 1) ^ (uint8x16_t) (((int8x16_t) v >> 7) & 0x1b); - w ^= (uint8x16_t) vrev32q_u16((uint16x8_t) v); - w ^= vqtbl1q_u8(v ^ w, vld1q_u8(ror32by8)); - - /* add round key */ - return vreinterpretq_m128i_u8(w) ^ RoundKey; - -#else /* ARMv7-A implementation for a table-based AES */ -#define SSE2NEON_AES_B2W(b0, b1, b2, b3) \ - (((uint32_t) (b3) << 24) | ((uint32_t) (b2) << 16) | \ - ((uint32_t) (b1) << 8) | (uint32_t) (b0)) -// multiplying 'x' by 2 in GF(2^8) -#define SSE2NEON_AES_F2(x) ((x << 1) ^ (((x >> 7) & 1) * 0x011b /* WPOLY */)) -// multiplying 'x' by 3 in GF(2^8) -#define SSE2NEON_AES_F3(x) (SSE2NEON_AES_F2(x) ^ x) -#define SSE2NEON_AES_U0(p) \ - SSE2NEON_AES_B2W(SSE2NEON_AES_F2(p), p, p, SSE2NEON_AES_F3(p)) -#define SSE2NEON_AES_U1(p) \ - SSE2NEON_AES_B2W(SSE2NEON_AES_F3(p), SSE2NEON_AES_F2(p), p, p) -#define SSE2NEON_AES_U2(p) \ - SSE2NEON_AES_B2W(p, SSE2NEON_AES_F3(p), SSE2NEON_AES_F2(p), p) -#define SSE2NEON_AES_U3(p) \ - SSE2NEON_AES_B2W(p, p, SSE2NEON_AES_F3(p), SSE2NEON_AES_F2(p)) - - // this generates a table containing every possible permutation of - // shift_rows() and sub_bytes() with mix_columns(). - static const uint32_t ALIGN_STRUCT(16) aes_table[4][256] = { - SSE2NEON_AES_SBOX(SSE2NEON_AES_U0), - SSE2NEON_AES_SBOX(SSE2NEON_AES_U1), - SSE2NEON_AES_SBOX(SSE2NEON_AES_U2), - SSE2NEON_AES_SBOX(SSE2NEON_AES_U3), - }; -#undef SSE2NEON_AES_B2W -#undef SSE2NEON_AES_F2 -#undef SSE2NEON_AES_F3 -#undef SSE2NEON_AES_U0 -#undef SSE2NEON_AES_U1 -#undef SSE2NEON_AES_U2 -#undef SSE2NEON_AES_U3 - - uint32_t x0 = _mm_cvtsi128_si32(a); // get a[31:0] - uint32_t x1 = - _mm_cvtsi128_si32(_mm_shuffle_epi32(a, 0x55)); // get a[63:32] - uint32_t x2 = - _mm_cvtsi128_si32(_mm_shuffle_epi32(a, 0xAA)); // get a[95:64] - uint32_t x3 = - _mm_cvtsi128_si32(_mm_shuffle_epi32(a, 0xFF)); // get a[127:96] - - // finish the modulo addition step in mix_columns() - __m128i out = _mm_set_epi32( - (aes_table[0][x3 & 0xff] ^ aes_table[1][(x0 >> 8) & 0xff] ^ - aes_table[2][(x1 >> 16) & 0xff] ^ aes_table[3][x2 >> 24]), - (aes_table[0][x2 & 0xff] ^ aes_table[1][(x3 >> 8) & 0xff] ^ - aes_table[2][(x0 >> 16) & 0xff] ^ aes_table[3][x1 >> 24]), - (aes_table[0][x1 & 0xff] ^ aes_table[1][(x2 >> 8) & 0xff] ^ - aes_table[2][(x3 >> 16) & 0xff] ^ aes_table[3][x0 >> 24]), - (aes_table[0][x0 & 0xff] ^ aes_table[1][(x1 >> 8) & 0xff] ^ - aes_table[2][(x2 >> 16) & 0xff] ^ aes_table[3][x3 >> 24])); - - return _mm_xor_si128(out, RoundKey); -#endif -} - -// Perform one round of an AES decryption flow on data (state) in a using the -// round key in RoundKey, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesdec_si128 -FORCE_INLINE __m128i _mm_aesdec_si128(__m128i a, __m128i RoundKey) -{ -#if defined(__aarch64__) - static const uint8_t inv_shift_rows[] = { - 0x0, 0xd, 0xa, 0x7, 0x4, 0x1, 0xe, 0xb, - 0x8, 0x5, 0x2, 0xf, 0xc, 0x9, 0x6, 0x3, - }; - static const uint8_t ror32by8[] = { - 0x1, 0x2, 0x3, 0x0, 0x5, 0x6, 0x7, 0x4, - 0x9, 0xa, 0xb, 0x8, 0xd, 0xe, 0xf, 0xc, - }; - - uint8x16_t v; - uint8x16_t w = vreinterpretq_u8_m128i(a); - - // inverse shift rows - w = vqtbl1q_u8(w, vld1q_u8(inv_shift_rows)); - - // inverse sub bytes - v = vqtbl4q_u8(_sse2neon_vld1q_u8_x4(_sse2neon_rsbox), w); - v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0x40), w - 0x40); - v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0x80), w - 0x80); - v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0xc0), w - 0xc0); - - // inverse mix columns - // multiplying 'v' by 4 in GF(2^8) - w = (v << 1) ^ (uint8x16_t) (((int8x16_t) v >> 7) & 0x1b); - w = (w << 1) ^ (uint8x16_t) (((int8x16_t) w >> 7) & 0x1b); - v ^= w; - v ^= (uint8x16_t) vrev32q_u16((uint16x8_t) w); - - w = (v << 1) ^ (uint8x16_t) (((int8x16_t) v >> 7) & - 0x1b); // multiplying 'v' by 2 in GF(2^8) - w ^= (uint8x16_t) vrev32q_u16((uint16x8_t) v); - w ^= vqtbl1q_u8(v ^ w, vld1q_u8(ror32by8)); - - // add round key - return vreinterpretq_m128i_u8(w) ^ RoundKey; - -#else /* ARMv7-A NEON implementation */ - /* FIXME: optimized for NEON */ - uint8_t i, e, f, g, h, v[4][4]; - uint8_t *_a = (uint8_t *) &a; - for (i = 0; i < 16; ++i) { - v[((i / 4) + (i % 4)) % 4][i % 4] = _sse2neon_rsbox[_a[i]]; - } - - // inverse mix columns - for (i = 0; i < 4; ++i) { - e = v[i][0]; - f = v[i][1]; - g = v[i][2]; - h = v[i][3]; - - v[i][0] = SSE2NEON_MULTIPLY(e, 0x0e) ^ SSE2NEON_MULTIPLY(f, 0x0b) ^ - SSE2NEON_MULTIPLY(g, 0x0d) ^ SSE2NEON_MULTIPLY(h, 0x09); - v[i][1] = SSE2NEON_MULTIPLY(e, 0x09) ^ SSE2NEON_MULTIPLY(f, 0x0e) ^ - SSE2NEON_MULTIPLY(g, 0x0b) ^ SSE2NEON_MULTIPLY(h, 0x0d); - v[i][2] = SSE2NEON_MULTIPLY(e, 0x0d) ^ SSE2NEON_MULTIPLY(f, 0x09) ^ - SSE2NEON_MULTIPLY(g, 0x0e) ^ SSE2NEON_MULTIPLY(h, 0x0b); - v[i][3] = SSE2NEON_MULTIPLY(e, 0x0b) ^ SSE2NEON_MULTIPLY(f, 0x0d) ^ - SSE2NEON_MULTIPLY(g, 0x09) ^ SSE2NEON_MULTIPLY(h, 0x0e); - } - - return vreinterpretq_m128i_u8(vld1q_u8((uint8_t *) v)) ^ RoundKey; -#endif -} - -// Perform the last round of an AES encryption flow on data (state) in a using -// the round key in RoundKey, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesenclast_si128 -FORCE_INLINE __m128i _mm_aesenclast_si128(__m128i a, __m128i RoundKey) -{ -#if defined(__aarch64__) - static const uint8_t shift_rows[] = { - 0x0, 0x5, 0xa, 0xf, 0x4, 0x9, 0xe, 0x3, - 0x8, 0xd, 0x2, 0x7, 0xc, 0x1, 0x6, 0xb, - }; - - uint8x16_t v; - uint8x16_t w = vreinterpretq_u8_m128i(a); - - // shift rows - w = vqtbl1q_u8(w, vld1q_u8(shift_rows)); - - // sub bytes - v = vqtbl4q_u8(_sse2neon_vld1q_u8_x4(_sse2neon_sbox), w); - v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x40), w - 0x40); - v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x80), w - 0x80); - v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0xc0), w - 0xc0); - - // add round key - return vreinterpretq_m128i_u8(v) ^ RoundKey; - -#else /* ARMv7-A implementation */ - uint8_t v[16] = { - _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 0)], - _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 5)], - _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 10)], - _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 15)], - _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 4)], - _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 9)], - _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 14)], - _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 3)], - _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 8)], - _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 13)], - _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 2)], - _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 7)], - _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 12)], - _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 1)], - _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 6)], - _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 11)], - }; - - return vreinterpretq_m128i_u8(vld1q_u8(v)) ^ RoundKey; -#endif -} - -// Perform the last round of an AES decryption flow on data (state) in a using -// the round key in RoundKey, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesdeclast_si128 -FORCE_INLINE __m128i _mm_aesdeclast_si128(__m128i a, __m128i RoundKey) -{ -#if defined(__aarch64__) - static const uint8_t inv_shift_rows[] = { - 0x0, 0xd, 0xa, 0x7, 0x4, 0x1, 0xe, 0xb, - 0x8, 0x5, 0x2, 0xf, 0xc, 0x9, 0x6, 0x3, - }; - - uint8x16_t v; - uint8x16_t w = vreinterpretq_u8_m128i(a); - - // inverse shift rows - w = vqtbl1q_u8(w, vld1q_u8(inv_shift_rows)); - - // inverse sub bytes - v = vqtbl4q_u8(_sse2neon_vld1q_u8_x4(_sse2neon_rsbox), w); - v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0x40), w - 0x40); - v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0x80), w - 0x80); - v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0xc0), w - 0xc0); - - // add round key - return vreinterpretq_m128i_u8(v) ^ RoundKey; - -#else /* ARMv7-A NEON implementation */ - /* FIXME: optimized for NEON */ - uint8_t v[4][4]; - uint8_t *_a = (uint8_t *) &a; - for (int i = 0; i < 16; ++i) { - v[((i / 4) + (i % 4)) % 4][i % 4] = _sse2neon_rsbox[_a[i]]; - } - - return vreinterpretq_m128i_u8(vld1q_u8((uint8_t *) v)) ^ RoundKey; -#endif -} - -// Perform the InvMixColumns transformation on a and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesimc_si128 -FORCE_INLINE __m128i _mm_aesimc_si128(__m128i a) -{ -#if defined(__aarch64__) - static const uint8_t ror32by8[] = { - 0x1, 0x2, 0x3, 0x0, 0x5, 0x6, 0x7, 0x4, - 0x9, 0xa, 0xb, 0x8, 0xd, 0xe, 0xf, 0xc, - }; - uint8x16_t v = vreinterpretq_u8_m128i(a); - uint8x16_t w; - - // multiplying 'v' by 4 in GF(2^8) - w = (v << 1) ^ (uint8x16_t) (((int8x16_t) v >> 7) & 0x1b); - w = (w << 1) ^ (uint8x16_t) (((int8x16_t) w >> 7) & 0x1b); - v ^= w; - v ^= (uint8x16_t) vrev32q_u16((uint16x8_t) w); - - // multiplying 'v' by 2 in GF(2^8) - w = (v << 1) ^ (uint8x16_t) (((int8x16_t) v >> 7) & 0x1b); - w ^= (uint8x16_t) vrev32q_u16((uint16x8_t) v); - w ^= vqtbl1q_u8(v ^ w, vld1q_u8(ror32by8)); - return vreinterpretq_m128i_u8(w); - -#else /* ARMv7-A NEON implementation */ - uint8_t i, e, f, g, h, v[4][4]; - vst1q_u8((uint8_t *) v, vreinterpretq_u8_m128i(a)); - for (i = 0; i < 4; ++i) { - e = v[i][0]; - f = v[i][1]; - g = v[i][2]; - h = v[i][3]; - - v[i][0] = SSE2NEON_MULTIPLY(e, 0x0e) ^ SSE2NEON_MULTIPLY(f, 0x0b) ^ - SSE2NEON_MULTIPLY(g, 0x0d) ^ SSE2NEON_MULTIPLY(h, 0x09); - v[i][1] = SSE2NEON_MULTIPLY(e, 0x09) ^ SSE2NEON_MULTIPLY(f, 0x0e) ^ - SSE2NEON_MULTIPLY(g, 0x0b) ^ SSE2NEON_MULTIPLY(h, 0x0d); - v[i][2] = SSE2NEON_MULTIPLY(e, 0x0d) ^ SSE2NEON_MULTIPLY(f, 0x09) ^ - SSE2NEON_MULTIPLY(g, 0x0e) ^ SSE2NEON_MULTIPLY(h, 0x0b); - v[i][3] = SSE2NEON_MULTIPLY(e, 0x0b) ^ SSE2NEON_MULTIPLY(f, 0x0d) ^ - SSE2NEON_MULTIPLY(g, 0x09) ^ SSE2NEON_MULTIPLY(h, 0x0e); - } - - return vreinterpretq_m128i_u8(vld1q_u8((uint8_t *) v)); -#endif -} - -// Assist in expanding the AES cipher key by computing steps towards generating -// a round key for encryption cipher using data from a and an 8-bit round -// constant specified in imm8, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aeskeygenassist_si128 -// -// Emits the Advanced Encryption Standard (AES) instruction aeskeygenassist. -// This instruction generates a round key for AES encryption. See -// https://kazakov.life/2017/11/01/cryptocurrency-mining-on-ios-devices/ -// for details. -FORCE_INLINE __m128i _mm_aeskeygenassist_si128(__m128i a, const int rcon) -{ -#if defined(__aarch64__) - uint8x16_t _a = vreinterpretq_u8_m128i(a); - uint8x16_t v = vqtbl4q_u8(_sse2neon_vld1q_u8_x4(_sse2neon_sbox), _a); - v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x40), _a - 0x40); - v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x80), _a - 0x80); - v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0xc0), _a - 0xc0); - - uint32x4_t v_u32 = vreinterpretq_u32_u8(v); - uint32x4_t ror_v = vorrq_u32(vshrq_n_u32(v_u32, 8), vshlq_n_u32(v_u32, 24)); - uint32x4_t ror_xor_v = veorq_u32(ror_v, vdupq_n_u32(rcon)); - - return vreinterpretq_m128i_u32(vtrn2q_u32(v_u32, ror_xor_v)); - -#else /* ARMv7-A NEON implementation */ - uint32_t X1 = _mm_cvtsi128_si32(_mm_shuffle_epi32(a, 0x55)); - uint32_t X3 = _mm_cvtsi128_si32(_mm_shuffle_epi32(a, 0xFF)); - for (int i = 0; i < 4; ++i) { - ((uint8_t *) &X1)[i] = _sse2neon_sbox[((uint8_t *) &X1)[i]]; - ((uint8_t *) &X3)[i] = _sse2neon_sbox[((uint8_t *) &X3)[i]]; - } - return _mm_set_epi32(((X3 >> 8) | (X3 << 24)) ^ rcon, X3, - ((X1 >> 8) | (X1 << 24)) ^ rcon, X1); -#endif -} -#undef SSE2NEON_AES_SBOX -#undef SSE2NEON_AES_RSBOX - -#if defined(__aarch64__) -#undef SSE2NEON_XT -#undef SSE2NEON_MULTIPLY -#endif - -#else /* __ARM_FEATURE_CRYPTO */ -// Implements equivalent of 'aesenc' by combining AESE (with an empty key) and -// AESMC and then manually applying the real key as an xor operation. This -// unfortunately means an additional xor op; the compiler should be able to -// optimize this away for repeated calls however. See -// https://blog.michaelbrase.com/2018/05/08/emulating-x86-aes-intrinsics-on-armv8-a -// for more details. -FORCE_INLINE __m128i _mm_aesenc_si128(__m128i a, __m128i b) -{ - return vreinterpretq_m128i_u8(veorq_u8( - vaesmcq_u8(vaeseq_u8(vreinterpretq_u8_m128i(a), vdupq_n_u8(0))), - vreinterpretq_u8_m128i(b))); -} - -// Perform one round of an AES decryption flow on data (state) in a using the -// round key in RoundKey, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesdec_si128 -FORCE_INLINE __m128i _mm_aesdec_si128(__m128i a, __m128i RoundKey) -{ - return vreinterpretq_m128i_u8(veorq_u8( - vaesimcq_u8(vaesdq_u8(vreinterpretq_u8_m128i(a), vdupq_n_u8(0))), - vreinterpretq_u8_m128i(RoundKey))); -} - -// Perform the last round of an AES encryption flow on data (state) in a using -// the round key in RoundKey, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesenclast_si128 -FORCE_INLINE __m128i _mm_aesenclast_si128(__m128i a, __m128i RoundKey) -{ - return _mm_xor_si128(vreinterpretq_m128i_u8(vaeseq_u8( - vreinterpretq_u8_m128i(a), vdupq_n_u8(0))), - RoundKey); -} - -// Perform the last round of an AES decryption flow on data (state) in a using -// the round key in RoundKey, and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesdeclast_si128 -FORCE_INLINE __m128i _mm_aesdeclast_si128(__m128i a, __m128i RoundKey) -{ - return vreinterpretq_m128i_u8( - veorq_u8(vaesdq_u8(vreinterpretq_u8_m128i(a), vdupq_n_u8(0)), - vreinterpretq_u8_m128i(RoundKey))); -} - -// Perform the InvMixColumns transformation on a and store the result in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesimc_si128 -FORCE_INLINE __m128i _mm_aesimc_si128(__m128i a) -{ - return vreinterpretq_m128i_u8(vaesimcq_u8(vreinterpretq_u8_m128i(a))); -} - -// Assist in expanding the AES cipher key by computing steps towards generating -// a round key for encryption cipher using data from a and an 8-bit round -// constant specified in imm8, and store the result in dst." -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aeskeygenassist_si128 -FORCE_INLINE __m128i _mm_aeskeygenassist_si128(__m128i a, const int rcon) -{ - // AESE does ShiftRows and SubBytes on A - uint8x16_t u8 = vaeseq_u8(vreinterpretq_u8_m128i(a), vdupq_n_u8(0)); - -#if !defined(_MSC_VER) || defined(__clang__) - uint8x16_t dest = { - // Undo ShiftRows step from AESE and extract X1 and X3 - u8[0x4], u8[0x1], u8[0xE], u8[0xB], // SubBytes(X1) - u8[0x1], u8[0xE], u8[0xB], u8[0x4], // ROT(SubBytes(X1)) - u8[0xC], u8[0x9], u8[0x6], u8[0x3], // SubBytes(X3) - u8[0x9], u8[0x6], u8[0x3], u8[0xC], // ROT(SubBytes(X3)) - }; - uint32x4_t r = {0, (unsigned) rcon, 0, (unsigned) rcon}; - return vreinterpretq_m128i_u8(dest) ^ vreinterpretq_m128i_u32(r); -#else - // We have to do this hack because MSVC is strictly adhering to the CPP - // standard, in particular C++03 8.5.1 sub-section 15, which states that - // unions must be initialized by their first member type. - - // As per the Windows ARM64 ABI, it is always little endian, so this works - __n128 dest{ - ((uint64_t) u8.n128_u8[0x4] << 0) | ((uint64_t) u8.n128_u8[0x1] << 8) | - ((uint64_t) u8.n128_u8[0xE] << 16) | - ((uint64_t) u8.n128_u8[0xB] << 24) | - ((uint64_t) u8.n128_u8[0x1] << 32) | - ((uint64_t) u8.n128_u8[0xE] << 40) | - ((uint64_t) u8.n128_u8[0xB] << 48) | - ((uint64_t) u8.n128_u8[0x4] << 56), - ((uint64_t) u8.n128_u8[0xC] << 0) | ((uint64_t) u8.n128_u8[0x9] << 8) | - ((uint64_t) u8.n128_u8[0x6] << 16) | - ((uint64_t) u8.n128_u8[0x3] << 24) | - ((uint64_t) u8.n128_u8[0x9] << 32) | - ((uint64_t) u8.n128_u8[0x6] << 40) | - ((uint64_t) u8.n128_u8[0x3] << 48) | - ((uint64_t) u8.n128_u8[0xC] << 56)}; - - dest.n128_u32[1] = dest.n128_u32[1] ^ rcon; - dest.n128_u32[3] = dest.n128_u32[3] ^ rcon; - - return dest; -#endif -} -#endif - -/* Others */ - -// Perform a carry-less multiplication of two 64-bit integers, selected from a -// and b according to imm8, and store the results in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_clmulepi64_si128 -FORCE_INLINE __m128i _mm_clmulepi64_si128(__m128i _a, __m128i _b, const int imm) -{ - uint64x2_t a = vreinterpretq_u64_m128i(_a); - uint64x2_t b = vreinterpretq_u64_m128i(_b); - switch (imm & 0x11) { - case 0x00: - return vreinterpretq_m128i_u64( - _sse2neon_vmull_p64(vget_low_u64(a), vget_low_u64(b))); - case 0x01: - return vreinterpretq_m128i_u64( - _sse2neon_vmull_p64(vget_high_u64(a), vget_low_u64(b))); - case 0x10: - return vreinterpretq_m128i_u64( - _sse2neon_vmull_p64(vget_low_u64(a), vget_high_u64(b))); - case 0x11: - return vreinterpretq_m128i_u64( - _sse2neon_vmull_p64(vget_high_u64(a), vget_high_u64(b))); - default: - abort(); - } -} - -FORCE_INLINE unsigned int _sse2neon_mm_get_denormals_zero_mode(void) -{ - union { - fpcr_bitfield field; -#if defined(__aarch64__) || defined(_M_ARM64) - uint64_t value; -#else - uint32_t value; -#endif - } r; - -#if defined(__aarch64__) || defined(_M_ARM64) - r.value = _sse2neon_get_fpcr(); -#else - __asm__ __volatile__("vmrs %0, FPSCR" : "=r"(r.value)); /* read */ -#endif - - return r.field.bit24 ? _MM_DENORMALS_ZERO_ON : _MM_DENORMALS_ZERO_OFF; -} - -// Count the number of bits set to 1 in unsigned 32-bit integer a, and -// return that count in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_popcnt_u32 -FORCE_INLINE int _mm_popcnt_u32(unsigned int a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) -#if __has_builtin(__builtin_popcount) - return __builtin_popcount(a); -#elif defined(_MSC_VER) - return _CountOneBits(a); -#else - return (int) vaddlv_u8(vcnt_u8(vcreate_u8((uint64_t) a))); -#endif -#else - uint32_t count = 0; - uint8x8_t input_val, count8x8_val; - uint16x4_t count16x4_val; - uint32x2_t count32x2_val; - - input_val = vld1_u8((uint8_t *) &a); - count8x8_val = vcnt_u8(input_val); - count16x4_val = vpaddl_u8(count8x8_val); - count32x2_val = vpaddl_u16(count16x4_val); - - vst1_u32(&count, count32x2_val); - return count; -#endif -} - -// Count the number of bits set to 1 in unsigned 64-bit integer a, and -// return that count in dst. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_popcnt_u64 -FORCE_INLINE int64_t _mm_popcnt_u64(uint64_t a) -{ -#if defined(__aarch64__) || defined(_M_ARM64) -#if __has_builtin(__builtin_popcountll) - return __builtin_popcountll(a); -#elif defined(_MSC_VER) - return _CountOneBits64(a); -#else - return (int64_t) vaddlv_u8(vcnt_u8(vcreate_u8(a))); -#endif -#else - uint64_t count = 0; - uint8x8_t input_val, count8x8_val; - uint16x4_t count16x4_val; - uint32x2_t count32x2_val; - uint64x1_t count64x1_val; - - input_val = vld1_u8((uint8_t *) &a); - count8x8_val = vcnt_u8(input_val); - count16x4_val = vpaddl_u8(count8x8_val); - count32x2_val = vpaddl_u16(count16x4_val); - count64x1_val = vpaddl_u32(count32x2_val); - vst1_u64(&count, count64x1_val); - return count; -#endif -} - -FORCE_INLINE void _sse2neon_mm_set_denormals_zero_mode(unsigned int flag) -{ - // AArch32 Advanced SIMD arithmetic always uses the Flush-to-zero setting, - // regardless of the value of the FZ bit. - union { - fpcr_bitfield field; -#if defined(__aarch64__) || defined(_M_ARM64) - uint64_t value; -#else - uint32_t value; -#endif - } r; - -#if defined(__aarch64__) || defined(_M_ARM64) - r.value = _sse2neon_get_fpcr(); -#else - __asm__ __volatile__("vmrs %0, FPSCR" : "=r"(r.value)); /* read */ -#endif - - r.field.bit24 = (flag & _MM_DENORMALS_ZERO_MASK) == _MM_DENORMALS_ZERO_ON; - -#if defined(__aarch64__) || defined(_M_ARM64) - _sse2neon_set_fpcr(r.value); -#else - __asm__ __volatile__("vmsr FPSCR, %0" ::"r"(r)); /* write */ -#endif -} - -// Return the current 64-bit value of the processor's time-stamp counter. -// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=rdtsc -FORCE_INLINE uint64_t _rdtsc(void) -{ -#if defined(__aarch64__) || defined(_M_ARM64) - uint64_t val; - - /* According to ARM DDI 0487F.c, from Armv8.0 to Armv8.5 inclusive, the - * system counter is at least 56 bits wide; from Armv8.6, the counter - * must be 64 bits wide. So the system counter could be less than 64 - * bits wide and it is attributed with the flag 'cap_user_time_short' - * is true. - */ -#if defined(_MSC_VER) && !defined(__clang__) - val = _ReadStatusReg(ARM64_SYSREG(3, 3, 14, 0, 2)); -#else - __asm__ __volatile__("mrs %0, cntvct_el0" : "=r"(val)); -#endif - - return val; -#else - uint32_t pmccntr, pmuseren, pmcntenset; - // Read the user mode Performance Monitoring Unit (PMU) - // User Enable Register (PMUSERENR) access permissions. - __asm__ __volatile__("mrc p15, 0, %0, c9, c14, 0" : "=r"(pmuseren)); - if (pmuseren & 1) { // Allows reading PMUSERENR for user mode code. - __asm__ __volatile__("mrc p15, 0, %0, c9, c12, 1" : "=r"(pmcntenset)); - if (pmcntenset & 0x80000000UL) { // Is it counting? - __asm__ __volatile__("mrc p15, 0, %0, c9, c13, 0" : "=r"(pmccntr)); - // The counter is set up to count every 64th cycle - return (uint64_t) (pmccntr) << 6; - } - } - - // Fallback to syscall as we can't enable PMUSERENR in user mode. - struct timeval tv; - gettimeofday(&tv, NULL); - return (uint64_t) (tv.tv_sec) * 1000000 + tv.tv_usec; -#endif -} - -#if defined(__GNUC__) || defined(__clang__) -#pragma pop_macro("ALIGN_STRUCT") -#pragma pop_macro("FORCE_INLINE") -#endif - -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC pop_options -#endif - -#endif From 9fcd2835eba781ac6e81170b434690e38d072bbb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 7 Aug 2025 13:17:39 +0200 Subject: [PATCH 0556/1117] Update to rust 1.89.0 (#540) --- Cargo.lock | 44 ++++++++++++++++++++++---------------------- Cargo.toml | 2 +- rust-toolchain.toml | 2 +- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 12efd05..3aa3489 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -125,9 +125,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.19" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" +checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" dependencies = [ "anstyle", "anstyle-parse", @@ -155,22 +155,22 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.9" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -601,9 +601,9 @@ dependencies = [ [[package]] name = "bytemuck_derive" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "441473f2b4b0459a68628c744bc61d23e730fb00128b841d30fa4bb3972257e4" +checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" dependencies = [ "proc-macro2", "quote", @@ -770,9 +770,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.42" +version = "4.5.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed87a9d530bb41a67537289bafcac159cb3ee28460e0a4571123d2a778a6a882" +checksum = "50fd97c9dc2399518aa331917ac6f274280ec5eb34e555dd291899745c48ec6f" dependencies = [ "clap_builder", "clap_derive", @@ -780,9 +780,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.42" +version = "4.5.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64f4f3f3c77c94aff3c7e9aac9a2ca1974a5adf392a8bb751e827d6d127ab966" +checksum = "c35b5830294e1fa0462034af85cc95225a4cb07092c088c55bda3147cfcd8f65" dependencies = [ "anstream", "anstyle", @@ -1976,9 +1976,9 @@ dependencies = [ [[package]] name = "governor" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cbe789d04bf14543f03c4b60cd494148aa79438c8440ae7d81a7778147745c3" +checksum = "444405bbb1a762387aa22dd569429533b54a1d8759d35d3b64cb39b0293eaa19" dependencies = [ "cfg-if", "dashmap", @@ -1999,9 +1999,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" dependencies = [ "atomic-waker", "bytes", @@ -2849,9 +2849,9 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "libbz2-rs-sys" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775bf80d5878ab7c2b1080b5351a48b2f737d9f6f8b383574eebcc22be0dfccb" +checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" @@ -6794,9 +6794,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdbb9122ea75b11bf96e7492afb723e8a7fbe12c67417aa95e7e3d18144d37cd" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ "yoke", "zerofrom", diff --git a/Cargo.toml b/Cargo.toml index 92d97a7..1863562 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "gopher64" version = "1.1.3" edition = "2024" -rust-version = "1.88" +rust-version = "1.89" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/rust-toolchain.toml b/rust-toolchain.toml index e88baf1..b67e7d5 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.88.0" +channel = "1.89.0" From 3f72700da0fa2d9d0e78c0a5890b0de23e3f7701 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 7 Aug 2025 19:21:54 +0200 Subject: [PATCH 0557/1117] bump to 1.1.4 (#541) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3aa3489..ab40e40 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1938,7 +1938,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.3" +version = "1.1.4" dependencies = [ "bindgen 0.72.0", "cc", diff --git a/Cargo.toml b/Cargo.toml index 1863562..be248d2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.3" +version = "1.1.4" edition = "2024" rust-version = "1.89" From e9664b1087deab68104601bc212d40ae1ffc88af Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Aug 2025 13:02:31 +0200 Subject: [PATCH 0558/1117] Bump actions/checkout from 4 to 5 (#545) Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 6 +++--- .github/workflows/lint.yml | 2 +- .github/workflows/sec.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1d53bfe..3afd747 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,7 +29,7 @@ jobs: arch: linux-aarch64 llvm: ARM64 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: recursive - uses: actions-rust-lang/setup-rust-toolchain@v1 @@ -81,7 +81,7 @@ jobs: # arch: windows-aarch64 # llvm: woa64 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: recursive - uses: actions-rust-lang/setup-rust-toolchain@v1 @@ -131,7 +131,7 @@ jobs: - target: aarch64-apple-darwin arch: mac-aarch64 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: recursive - uses: actions-rust-lang/setup-rust-toolchain@v1 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index c873dc9..7ed5326 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -16,7 +16,7 @@ jobs: lint-linux: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: recursive - uses: actions-rust-lang/setup-rust-toolchain@v1 diff --git a/.github/workflows/sec.yml b/.github/workflows/sec.yml index 804ef76..054330e 100644 --- a/.github/workflows/sec.yml +++ b/.github/workflows/sec.yml @@ -10,7 +10,7 @@ jobs: checks: write runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: recursive - uses: rustsec/audit-check@v2 From c8e70e6125d91f13e499c5f422497bd4ff254146 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 17 Aug 2025 20:56:02 +0200 Subject: [PATCH 0559/1117] cargo update --- Cargo.lock | 262 ++++++++++++++++++++++++++--------------------------- 1 file changed, 131 insertions(+), 131 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ab40e40..480b579 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,9 +14,9 @@ dependencies = [ [[package]] name = "ab_glyph_rasterizer" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2187590a23ab1e3df8681afdf0987c48504d80291f002fcdb651f0ef5e25169" +checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" [[package]] name = "addr2line" @@ -88,7 +88,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", - "bitflags 2.9.1", + "bitflags 2.9.2", "cc", "cesu8", "jni", @@ -175,15 +175,15 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" [[package]] name = "arbitrary" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" dependencies = [ "derive_arbitrary", ] @@ -360,9 +360,9 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.88" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", @@ -418,9 +418,9 @@ dependencies = [ [[package]] name = "avif-serialize" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ea8ef51aced2b9191c08197f55450d830876d9933f8f48a429b354f1d496b42" +checksum = "47c8fbc0f831f4519fe8b810b6a7a91410ec83031b8233f730a0480029f6a23f" dependencies = [ "arrayvec", ] @@ -462,7 +462,7 @@ version = "0.71.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "cexpr", "clang-sys", "itertools 0.13.0", @@ -482,7 +482,7 @@ version = "0.72.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f72209734318d0b619a5e0f5129918b848c416e122a3c4ce054e03cb87b726f" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "cexpr", "clang-sys", "itertools 0.13.0", @@ -510,9 +510,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "6a65b545ab31d687cff52899d4890855fec459eb6afe0da6417b8a18da87aa29" dependencies = [ "serde", ] @@ -547,7 +547,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2" dependencies = [ - "objc2 0.6.1", + "objc2 0.6.2", ] [[package]] @@ -592,9 +592,9 @@ checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" [[package]] name = "bytemuck" -version = "1.23.1" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" +checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" dependencies = [ "bytemuck_derive", ] @@ -643,7 +643,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "log", "polling", "rustix 0.38.44", @@ -657,7 +657,7 @@ version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb9f6e1368bd4621d2c86baa7e37de77a938adf5221e5dd3d6133340101b309e" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "polling", "rustix 1.0.8", "slab", @@ -678,9 +678,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.31" +version = "1.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a42d84bb6b69d3a8b3eaacf0d88f179e1929695e1ad012b6cf64d9caaa5fd2" +checksum = "3ee0f8803222ba5a7e2777dd72ca451868909b1ac410621b676adf07280e9b5f" dependencies = [ "jobserver", "libc", @@ -770,9 +770,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.43" +version = "4.5.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50fd97c9dc2399518aa331917ac6f274280ec5eb34e555dd291899745c48ec6f" +checksum = "1fc0e74a703892159f5ae7d3aac52c8e6c392f5ae5f359c70b5881d60aaac318" dependencies = [ "clap_builder", "clap_derive", @@ -780,9 +780,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.43" +version = "4.5.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c35b5830294e1fa0462034af85cc95225a4cb07092c088c55bda3147cfcd8f65" +checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8" dependencies = [ "anstream", "anstyle", @@ -792,9 +792,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.41" +version = "4.5.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" +checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6" dependencies = [ "heck", "proc-macro2", @@ -838,7 +838,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" dependencies = [ - "thiserror 2.0.12", + "thiserror 2.0.15", ] [[package]] @@ -974,7 +974,7 @@ version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "core-foundation 0.10.1", "core-graphics-types 0.2.0", "foreign-types", @@ -998,7 +998,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "core-foundation 0.10.1", "libc", ] @@ -1159,9 +1159,9 @@ dependencies = [ [[package]] name = "derive_arbitrary" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" +checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", @@ -1244,10 +1244,10 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.6.1", "libc", - "objc2 0.6.1", + "objc2 0.6.2", ] [[package]] @@ -1288,7 +1288,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "bytemuck", "drm-ffi", "drm-fourcc", @@ -1510,7 +1510,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffdf29af13b81d7562ccd57624242b2ed56edc2c83dad25f13bd74d87e7fa8d9" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "bytemuck", "fnv", "glow", @@ -1607,7 +1607,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e57e16b3fe8ff4364c0661fdaac543fb38b29ea9bc9c2f45612d90adf931d2b" dependencies = [ - "hashbrown 0.15.4", + "hashbrown 0.15.5", "rayon", "ttf-parser 0.21.1", ] @@ -1762,7 +1762,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce852e998d3ca5e4a97014fb31c940dc5ef344ec7d364984525fd11e8a547e6a" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "drm", "drm-fourcc", "gbm-sys", @@ -1854,9 +1854,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "glow" @@ -1876,7 +1876,7 @@ version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "cfg_aliases", "cgl", "dispatch2", @@ -1884,7 +1884,7 @@ dependencies = [ "glutin_glx_sys", "glutin_wgl_sys", "libloading", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit 0.3.1", "objc2-core-foundation", "objc2-foundation 0.3.1", @@ -1986,7 +1986,7 @@ dependencies = [ "futures-timer", "futures-util", "getrandom 0.3.3", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "nonzero_ext", "parking_lot", "portable-atomic", @@ -2043,9 +2043,9 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] name = "hashbrown" -version = "0.15.4" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", @@ -2317,7 +2317,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc384a0a106e7bc1aaf6fbf06d5a4d0d8e51a4bc5ff5ce36dbe559620aef4533" dependencies = [ "auto_enums", - "bitflags 2.9.1", + "bitflags 2.9.2", "cfg-if", "chrono", "clru", @@ -2412,7 +2412,7 @@ dependencies = [ "i-slint-core", "i-slint-core-macros", "lyon_path", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit 0.3.1", "objc2-core-foundation", "objc2-foundation 0.3.1", @@ -2612,7 +2612,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] @@ -2630,7 +2630,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "input-sys", "libc", "log", @@ -2680,7 +2680,7 @@ version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "cfg-if", "libc", ] @@ -2813,7 +2813,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "serde", "unicode-segmentation", ] @@ -2855,9 +2855,9 @@ checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" -version = "0.2.174" +version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[package]] name = "libfuzzer-sys" @@ -2881,9 +2881,9 @@ dependencies = [ [[package]] name = "liblzma" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0791ab7e08ccc8e0ce893f6906eb2703ed8739d8e89b57c0714e71bad09024c8" +checksum = "272b875472a046e39ff7408374a5a050b112d2142211a0f54a295c0bd1c3c757" dependencies = [ "liblzma-sys", ] @@ -2921,7 +2921,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "libc", "redox_syscall 0.5.17", ] @@ -3162,13 +3162,13 @@ dependencies = [ "crossbeam-channel", "dpi", "keyboard-types", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit 0.3.1", "objc2-core-foundation", "objc2-foundation 0.3.1", "once_cell", "png", - "thiserror 2.0.12", + "thiserror 2.0.15", "windows-sys 0.60.2", ] @@ -3178,7 +3178,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "jni-sys", "log", "ndk-sys", @@ -3214,7 +3214,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "cfg-if", "cfg_aliases", "libc", @@ -3340,9 +3340,9 @@ dependencies = [ [[package]] name = "objc2" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551" +checksum = "561f357ba7f3a2a61563a186a163d0a3a5247e1089524a3981d49adb775078bc" dependencies = [ "objc2-encode", ] @@ -3353,7 +3353,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -3369,10 +3369,10 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.6.1", "libc", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-cloud-kit 0.3.1", "objc2-core-data 0.3.1", "objc2-core-foundation", @@ -3388,7 +3388,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -3401,8 +3401,8 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17614fdcd9b411e6ff1117dfb1d0150f908ba83a7df81b1f118005fe0a8ea15d" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", + "bitflags 2.9.2", + "objc2 0.6.2", "objc2-foundation 0.3.1", ] @@ -3423,7 +3423,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -3435,8 +3435,8 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "291fbbf7d29287518e8686417cf7239c74700fd4b607623140a7d4a3c834329d" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", + "bitflags 2.9.2", + "objc2 0.6.2", "objc2-foundation 0.3.1", ] @@ -3446,9 +3446,9 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "dispatch2", - "objc2 0.6.1", + "objc2 0.6.2", ] [[package]] @@ -3457,9 +3457,9 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "dispatch2", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-core-foundation", "objc2-io-surface", ] @@ -3482,7 +3482,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79b3dc0cc4386b6ccf21c157591b34a7f44c8e75b064f85502901ab2188c007e" dependencies = [ - "objc2 0.6.1", + "objc2 0.6.2", "objc2-foundation 0.3.1", ] @@ -3510,7 +3510,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.5.1", "dispatch", "libc", @@ -3523,8 +3523,8 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", + "bitflags 2.9.2", + "objc2 0.6.2", "objc2-core-foundation", ] @@ -3534,8 +3534,8 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", + "bitflags 2.9.2", + "objc2 0.6.2", "objc2-core-foundation", ] @@ -3557,7 +3557,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -3569,8 +3569,8 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f246c183239540aab1782457b35ab2040d4259175bd1d0c58e46ada7b47a874" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", + "bitflags 2.9.2", + "objc2 0.6.2", "objc2-foundation 0.3.1", ] @@ -3580,7 +3580,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -3593,8 +3593,8 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90ffb6a0cd5f182dc964334388560b12a57f7b74b3e2dec5e2722aa2dfb2ccd5" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", + "bitflags 2.9.2", + "objc2 0.6.2", "objc2-core-foundation", "objc2-foundation 0.3.1", "objc2-metal 0.3.1", @@ -3616,7 +3616,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.5.1", "objc2 0.5.2", "objc2-cloud-kit 0.2.2", @@ -3648,7 +3648,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -3958,9 +3958,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] @@ -4037,7 +4037,7 @@ dependencies = [ "rustc-hash 2.1.1", "rustls", "socket2 0.5.10", - "thiserror 2.0.12", + "thiserror 2.0.15", "tokio", "tracing", "web-time", @@ -4058,7 +4058,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.12", + "thiserror 2.0.15", "tinyvec", "tracing", "web-time", @@ -4208,7 +4208,7 @@ version = "11.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", ] [[package]] @@ -4223,7 +4223,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40d213455a5f1dc59214213c7330e074ddf8114c9a42411eb890c767357ce135" dependencies = [ - "objc2 0.6.1", + "objc2 0.6.2", "objc2-core-foundation", "objc2-foundation 0.3.1", "objc2-quartz-core 0.3.1", @@ -4231,9 +4231,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", @@ -4241,9 +4241,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", @@ -4264,7 +4264,7 @@ version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", ] [[package]] @@ -4275,7 +4275,7 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.16", "libredox", - "thiserror 2.0.12", + "thiserror 2.0.15", ] [[package]] @@ -4309,9 +4309,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.12.22" +version = "0.12.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" +checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" dependencies = [ "base64", "bytes", @@ -4376,7 +4376,7 @@ dependencies = [ "dispatch2", "js-sys", "log", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit 0.3.1", "objc2-core-foundation", "objc2-foundation 0.3.1", @@ -4469,7 +4469,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "errno", "libc", "linux-raw-sys 0.4.15", @@ -4482,7 +4482,7 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "errno", "libc", "linux-raw-sys 0.9.4", @@ -4526,9 +4526,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rustybuzz" @@ -4536,7 +4536,7 @@ version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "bytemuck", "core_maths", "log", @@ -4811,7 +4811,7 @@ version = "0.86.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e372258f52414e04de007326fa497581617c9fa872a3225dca5e42212723c426" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "lazy_static", "skia-bindings", "windows", @@ -4819,9 +4819,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "slint" @@ -4887,7 +4887,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "calloop 0.13.0", "calloop-wayland-source", "cursor-icon", @@ -5089,9 +5089,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.104" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", @@ -5196,11 +5196,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "80d76d3f064b981389ecb4b6b7f45a0bf9fdac1d5b9204c7bd6714fecc302850" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.15", ] [[package]] @@ -5216,9 +5216,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "44d29feb33e986b6ea906bd9c3559a856983f92371b3eaa5e83782a351623de0" dependencies = [ "proc-macro2", "quote", @@ -5447,7 +5447,7 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "bytes", "futures-util", "http", @@ -5537,7 +5537,7 @@ dependencies = [ "log", "rand 0.9.2", "sha1", - "thiserror 2.0.12", + "thiserror 2.0.15", "utf-8", ] @@ -5886,7 +5886,7 @@ version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "rustix 1.0.8", "wayland-backend", "wayland-scanner", @@ -5898,7 +5898,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "cursor-icon", "wayland-backend", ] @@ -5920,7 +5920,7 @@ version = "0.32.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "wayland-backend", "wayland-client", "wayland-scanner", @@ -5932,7 +5932,7 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "wayland-backend", "wayland-client", "wayland-protocols", @@ -5945,7 +5945,7 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "wayland-backend", "wayland-client", "wayland-protocols", @@ -6449,7 +6449,7 @@ dependencies = [ "ahash", "android-activity", "atomic-waker", - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.5.1", "bytemuck", "calloop 0.13.0", @@ -6526,7 +6526,7 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", ] [[package]] @@ -6610,7 +6610,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "dlib", "log", "once_cell", From f0381a2cd1256c3d0be342868d04520b4e5cdfd0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 17 Aug 2025 21:01:23 +0200 Subject: [PATCH 0560/1117] add uppercase file extensions (#548) --- src/ui/gui.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 39a04be..781096c 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -5,7 +5,9 @@ use slint::Model; slint::include_modules!(); -pub const N64_EXTENSIONS: [&str; 5] = ["n64", "v64", "z64", "7z", "zip"]; +pub const N64_EXTENSIONS: [&str; 12] = [ + "n64", "v64", "z64", "7z", "zip", "bin", "N64", "V64", "Z64", "7Z", "ZIP", "BIN", +]; #[derive(serde::Deserialize)] struct GithubData { @@ -430,13 +432,13 @@ fn open_rom(app: &AppWindow) { select_gb_rom[i] = Some( rfd::AsyncFileDialog::new() .set_title(format!("GB ROM P{}", i + 1)) - .add_filter("GB ROM files", &["gb", "gbc"]) + .add_filter("GB ROM files", &["gb", "gbc", "GB", "GBC"]) .pick_file(), ); select_gb_ram[i] = Some( rfd::AsyncFileDialog::new() .set_title(format!("GB RAM P{}", i + 1)) - .add_filter("GB RAM files", &["sav", "ram"]) + .add_filter("GB RAM files", &["sav", "ram", "SAV", "RAM"]) .pick_file(), ); } From 8037fb426e00e6712826b999fe747b14d1446de2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 18 Aug 2025 08:44:12 +0200 Subject: [PATCH 0561/1117] UNF loader support (#526) --- src/device.rs | 1 + src/device/cart/rom.rs | 2 +- src/device/cart/sc64.rs | 129 ++++++++++++++++++- src/ui.rs | 11 ++ src/ui/config.rs | 2 + src/ui/gui.rs | 35 +++++- src/ui/gui/appwindow.slint | 1 + src/ui/gui/settings_page.slint | 12 ++ src/ui/netplay.rs | 4 + src/ui/usb.rs | 224 +++++++++++++++++++++++++++++++++ 10 files changed, 414 insertions(+), 7 deletions(-) create mode 100644 src/ui/usb.rs diff --git a/src/device.rs b/src/device.rs index 07feea7..34ba6e5 100644 --- a/src/device.rs +++ b/src/device.rs @@ -347,6 +347,7 @@ impl Device { sector: 0, buffer: vec![0; 8192], writeback_sector: vec![0; 256], + usb_buffer: vec![], }, flashram: cart::sram::Flashram { status: 0, diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index d5753e4..b7b8d5e 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -2,7 +2,7 @@ use crate::device; use crate::netplay; use sha2::{Digest, Sha256}; -const CART_MASK: usize = 0xFFFFFFF; +pub const CART_MASK: usize = 0xFFFFFFF; fn read_cart_word(device: &device::Device, address: usize) -> u32 { let mut data: [u8; 4] = [0; 4]; diff --git a/src/device/cart/sc64.rs b/src/device/cart/sc64.rs index 12b7a86..ff1a3d3 100644 --- a/src/device/cart/sc64.rs +++ b/src/device/cart/sc64.rs @@ -28,6 +28,7 @@ pub struct Sc64 { pub cfg: [u32; SC64_CFG_COUNT as usize], pub sector: u32, pub writeback_sector: Vec, + pub usb_buffer: Vec, } fn format_sdcard(device: &mut device::Device) { @@ -209,8 +210,132 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } device.ui.storage.saves.sdcard.written = true; } - 'U' | 'u' => {} // USB status, ignored - 'M' | 'm' => {} // USB read/write, ignored + 'U' => { + device.cart.sc64.regs[SC64_DATA0_REG as usize] = 0; + } + 'u' => { + // used to notify the game that there is data to read + if let Some(cart_rx) = device.ui.usb.cart_rx.as_mut() { + match cart_rx.try_recv() { + Ok(data) => { + device.cart.sc64.regs[SC64_DATA0_REG as usize] = + data.data_type & 0xFF; // read_status/type + device.cart.sc64.regs[SC64_DATA1_REG as usize] = + data.data_size & 0xFFFFFF; // length + device.cart.sc64.usb_buffer = data.data; // store the data to be read + } + Err(err) => { + match err { + tokio::sync::broadcast::error::TryRecvError::Lagged(_) => { + panic!("cart_rx lagged: {err}"); + } + _ => { + device.cart.sc64.regs[SC64_DATA0_REG as usize] = 0; // read_status/type + device.cart.sc64.regs[SC64_DATA1_REG as usize] = 0; // length + } + } + } + } + } else { + device.cart.sc64.regs[SC64_DATA0_REG as usize] = 0; // read_status/type + device.cart.sc64.regs[SC64_DATA1_REG as usize] = 0; // length + } + } + 'M' => { + // Send data from from flashcart to USB + let address = + device.cart.sc64.regs[SC64_DATA0_REG as usize] as u64 & 0x1FFFFFFF; + let length = + device.cart.sc64.regs[SC64_DATA1_REG as usize] as usize & 0xFFFFFF; + + if let Some(usb_tx) = device.ui.usb.usb_tx.as_mut() { + let mut usb_buffer = vec![0; length]; + + let mut i = 0; + + if address < device.rdram.size as u64 { + while i < length { + *usb_buffer.get_mut(i).unwrap_or(&mut 0) = *device + .rdram + .mem + .get((address as usize + i) ^ device.byte_swap) + .unwrap_or(&0); + i += 1; + } + } else if address >= device::memory::MM_CART_ROM as u64 + && address < device::memory::MM_PIF_MEM as u64 + { + while i < length { + *usb_buffer.get_mut(i).unwrap_or(&mut 0) = *device + .ui + .storage + .saves + .romsave + .data + .get( + &(((address as usize + i) + & device::cart::rom::CART_MASK) + as u32), + ) + .unwrap_or( + device + .cart + .rom + .get( + (address as usize + i) + & device::cart::rom::CART_MASK, + ) + .unwrap_or(&0), + ); + i += 1; + } + } else { + panic!("Unknown address {address:#x} for SC64 M command"); + } + + ui::usb::send_to_usb( + usb_tx, + ui::usb::UsbData { + data: usb_buffer, + data_type: device.cart.sc64.regs[SC64_DATA1_REG as usize] >> 24, + data_size: device.cart.sc64.regs[SC64_DATA1_REG as usize] + & 0xFFFFFF, + }, + ); + } + } + 'm' => { + // Receive data from USB to flashcart + let address = + device.cart.sc64.regs[SC64_DATA0_REG as usize] as u64 & 0x1FFFFFFF; + let length = device.cart.sc64.regs[SC64_DATA1_REG as usize] as usize; + + let mut i = 0; + + if address < device.rdram.size as u64 { + while i < length { + *device + .rdram + .mem + .get_mut((address as usize + i) ^ device.byte_swap) + .unwrap_or(&mut 0) = + *device.cart.sc64.usb_buffer.get(i).unwrap_or(&0); + i += 1; + } + } else if address >= device::memory::MM_CART_ROM as u64 + && address < device::memory::MM_PIF_MEM as u64 + { + while i < length { + device.ui.storage.saves.romsave.data.insert( + ((address as usize + i) & device::cart::rom::CART_MASK) as u32, + *device.cart.sc64.usb_buffer.get(i).unwrap_or(&0), + ); + i += 1; + } + } else { + panic!("Unknown address {address:#x} for SC64 m command"); + } + } 'w' => { // SD card writeback pending device.cart.sc64.regs[SC64_DATA0_REG as usize] = 0; diff --git a/src/ui.rs b/src/ui.rs index f0db863..ec90cf6 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -5,6 +5,7 @@ pub mod gui; pub mod input; pub mod netplay; pub mod storage; +pub mod usb; pub mod video; pub mod vru; @@ -38,6 +39,11 @@ pub struct Video { pub fullscreen: bool, } +pub struct Usb { + pub usb_tx: Option>, + pub cart_rx: Option>, +} + pub struct Ui { pub dirs: Dirs, pub config: config::Config, @@ -48,6 +54,7 @@ pub struct Ui { pub input: Input, pub storage: Storage, pub video: Video, + pub usb: Usb, } impl Drop for Ui { @@ -185,6 +192,10 @@ impl Ui { window: std::ptr::null_mut(), fullscreen: false, }, + usb: Usb { + usb_tx: None, + cart_rx: None, + }, dirs, with_sdl, } diff --git a/src/ui/config.rs b/src/ui/config.rs index 743d7f9..d2a3022 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -54,6 +54,7 @@ pub struct Video { pub struct Emulation { pub overclock: bool, pub disable_expansion_pak: bool, + pub usb: bool, } #[derive(serde::Serialize, serde::Deserialize)] @@ -150,6 +151,7 @@ impl Config { emulation: Emulation { overclock: false, disable_expansion_pak: false, + usb: false, }, rom_dir: std::path::PathBuf::new(), } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 781096c..8d9a312 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -64,15 +64,23 @@ fn check_latest_version(weak: slint::Weak) { }); } -fn local_game_window(app: &AppWindow, controller_paths: &[Option]) { +fn local_game_window(app: &AppWindow, controller_paths: &[Option], usb: ui::Usb) { let dirs = ui::get_dirs(); let weak = app.as_weak(); let controller_paths = controller_paths.to_owned(); app.on_open_rom_button_clicked(move || { let controller_paths = controller_paths.clone(); + let mut usb_tx = None; + if let Some(usb_tx_inner) = usb.usb_tx.as_ref() { + usb_tx = Some(usb_tx_inner.clone()); + } + let mut cart_rx = None; + if let Some(cart_rx_inner) = usb.cart_rx.as_ref() { + cart_rx = Some(cart_rx_inner.resubscribe()); + } weak.upgrade_in_event_loop(move |handle| { save_settings(&handle, &controller_paths); - open_rom(&handle) + open_rom(&handle, ui::Usb { usb_tx, cart_rx }) }) .unwrap(); }); @@ -98,6 +106,7 @@ fn settings_window(app: &AppWindow, config: &ui::config::Config) { app.set_apply_crt_shader(config.video.crt); app.set_overclock_n64_cpu(config.emulation.overclock); app.set_disable_expansion_pak(config.emulation.disable_expansion_pak); + app.set_emulate_usb(config.emulation.usb); let combobox_value = match config.video.upscale { 1 => 0, 2 => 1, @@ -232,6 +241,7 @@ pub fn save_settings(app: &AppWindow, controller_paths: &[Option]) { config.video.crt = app.get_apply_crt_shader(); config.emulation.overclock = app.get_overclock_n64_cpu(); config.emulation.disable_expansion_pak = app.get_disable_expansion_pak(); + config.emulation.usb = app.get_emulate_usb(); let upscale_values = [1, 2, 4]; config.video.upscale = upscale_values[app.get_resolution() as usize]; @@ -282,6 +292,11 @@ fn about_window(app: &AppWindow) { pub fn app_window() { let app = AppWindow::new().unwrap(); about_window(&app); + let mut usb = ui::Usb { + usb_tx: None, + cart_rx: None, + }; + let mut shutdown_tx = None; let mut controller_paths; { let game_ui = ui::Ui::new(); @@ -291,11 +306,18 @@ pub fn app_window() { controller_paths.insert(0, None); settings_window(&app, &game_ui.config); controller_window(&app, &game_ui.config, &controller_names, &controller_paths); + + if game_ui.config.emulation.usb { + (shutdown_tx, usb) = ui::usb::init(app.as_weak()); + } } - local_game_window(&app, &controller_paths); + local_game_window(&app, &controller_paths, usb); ui::netplay::netplay_window(&app, &controller_paths); ui::cheats::cheats_window(&app); app.run().unwrap(); + if let Some(shutdown_tx) = &shutdown_tx { + ui::usb::close(shutdown_tx); + } save_settings(&app, &controller_paths); } @@ -349,6 +371,7 @@ pub fn run_rom( mut game_settings: GameSettings, vru_channel: VruChannel, netplay: Option, + usb: ui::Usb, weak: slint::Weak, ) { std::thread::Builder::new() @@ -371,6 +394,9 @@ pub fn run_rom( } } + device.ui.usb.usb_tx = usb.usb_tx; + device.ui.usb.cart_rx = usb.cart_rx; + device.vru_window.window_notifier = vru_channel.vru_window_notifier; device.vru_window.word_receiver = vru_channel.vru_word_receiver; @@ -411,7 +437,7 @@ pub fn run_rom( .unwrap(); } -fn open_rom(app: &AppWindow) { +fn open_rom(app: &AppWindow, usb: ui::Usb) { let rom_dir = app.get_rom_dir(); let select_rom = if !rom_dir.is_empty() && let Ok(exists) = std::fs::exists(&rom_dir) @@ -503,6 +529,7 @@ fn open_rom(app: &AppWindow) { } }, None, + usb, weak, ); } diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 94ab723..b0e5bf1 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -43,6 +43,7 @@ export component AppWindow inherits Window { in-out property overclock_n64_cpu <=> SettingsData.overclock_n64_cpu; in-out property disable_expansion_pak <=> SettingsData.disable_expansion_pak; in-out property resolution <=> SettingsData.resolution; + in-out property emulate_usb <=> SettingsData.emulate_usb; in-out property rom_dir <=> SettingsData.rom_dir; in-out property emulate_vru <=> ControllerData.emulate_vru; in-out property controller_enabled <=> ControllerData.controller_enabled; diff --git a/src/ui/gui/settings_page.slint b/src/ui/gui/settings_page.slint index d2259d2..195a8ed 100644 --- a/src/ui/gui/settings_page.slint +++ b/src/ui/gui/settings_page.slint @@ -12,6 +12,7 @@ export global SettingsData { in-out property overclock_n64_cpu; in-out property disable_expansion_pak; in-out property resolution; + in-out property emulate_usb; in-out property rom_dir; } @@ -105,5 +106,16 @@ export component Settings inherits Page { } } } + + HorizontalBox { + alignment: start; + CheckBox { + text: @tr("Emulate UNFLoader (reload emulator after changing)"); + checked: SettingsData.emulate_usb; + toggled => { + SettingsData.emulate_usb = self.checked; + } + } + } } } diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index c331c50..bf04f80 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -1129,6 +1129,10 @@ fn setup_wait_window( peer_addr: socket_addr, player_number: player_number as u8, }), + ui::Usb { + usb_tx: None, + cart_rx: None, + }, weak_app, ); }) diff --git a/src/ui/usb.rs b/src/ui/usb.rs new file mode 100644 index 0000000..afd675b --- /dev/null +++ b/src/ui/usb.rs @@ -0,0 +1,224 @@ +use crate::ui; +use tokio::io::{AsyncReadExt, AsyncWriteExt}; + +const DATATYPE_TCPTEST: u32 = 0x07; +const DATATYPE_ROMUPLOAD: u32 = 0x08; + +#[derive(Clone, Debug)] +pub struct UsbData { + pub data: Vec, + pub data_type: u32, + pub data_size: u32, +} + +fn respond_to_handshake(usb_tx: &tokio::sync::broadcast::Sender, data: Vec) { + if let Ok(data) = String::from_utf8(data) + && data == "N64" + { + ui::usb::send_to_usb( + usb_tx, + ui::usb::UsbData { + data: [b'N', b'6', b'4'].to_vec(), + data_type: DATATYPE_TCPTEST, + data_size: 3, + }, + ); + } +} + +fn upload_rom( + weak: slint::Weak, + rom: Vec, + usb_tx: &tokio::sync::broadcast::Sender, + cart_rx: &tokio::sync::broadcast::Receiver, +) { + let weak_clone = weak.clone(); + let usb_tx = usb_tx.clone(); + let cart_rx = cart_rx.resubscribe(); + + weak.upgrade_in_event_loop(move |handle| { + let dir = std::env::temp_dir(); + let rom_path = dir.join("rom_upload.bin"); + std::fs::write(rom_path.clone(), rom).unwrap(); + + ui::gui::run_rom( + ui::gui::GbPaths { + rom: [None, None, None, None], + ram: [None, None, None, None], + }, + rom_path, + ui::gui::GameSettings { + fullscreen: handle.get_fullscreen(), + overclock: handle.get_overclock_n64_cpu(), + disable_expansion_pak: handle.get_disable_expansion_pak(), + cheats: std::collections::HashMap::new(), // will be filled in later + }, + ui::gui::VruChannel { + vru_window_notifier: None, + vru_word_receiver: None, + }, + None, + ui::Usb { + usb_tx: Some(usb_tx), + cart_rx: Some(cart_rx), + }, + weak_clone, + ); + }) + .unwrap(); +} + +async fn handle_connection( + conn: tokio::net::TcpStream, + mut shutdown_rx: tokio::sync::watch::Receiver<()>, + mut usb_rx: tokio::sync::broadcast::Receiver, + usb_tx: tokio::sync::broadcast::Sender, + cart_tx: tokio::sync::broadcast::Sender, + cart_rx: tokio::sync::broadcast::Receiver, + weak: slint::Weak, +) { + let (mut incoming, mut outgoing) = conn.into_split(); + + let mut shutdown_rx_clone = shutdown_rx.clone(); + tokio::spawn(async move { + loop { + tokio::select! { + data = usb_rx.recv() => { + match data { + Ok(data) => { + let mut output: Vec = vec![]; + output.extend_from_slice(&data.data_type.to_be_bytes()); + output.extend_from_slice(&data.data_size.to_be_bytes()); + output.extend_from_slice(&data.data); + if outgoing.write_all(&output).await.is_err() { + break; + } + } + Err(tokio::sync::broadcast::error::RecvError::Lagged(_)) => { + panic!("usb_rx lagged"); + } + Err(tokio::sync::broadcast::error::RecvError::Closed) => { + break; + } + } + } + _ = shutdown_rx_clone.changed() => { + break; + } + } + } + }); + + let mut incoming_buffer = vec![0u8; 4096]; + let mut data_type: Option = None; + let mut data_size: Option = None; + let mut usb_buffer: Vec = vec![]; + loop { + tokio::select! { + result = incoming.read(&mut incoming_buffer) => { + match result { + Ok(0) => { + break; + } + Ok(n) => { + usb_buffer.extend_from_slice(&incoming_buffer[0..n]); + if data_type.is_none() { + if usb_buffer.len() < 4 { + continue; + } else { + data_type = Some(u32::from_be_bytes(usb_buffer[0..4].try_into().unwrap())); + usb_buffer.drain(0..4); + } + } + if data_type.is_some() && data_size.is_none() { + if usb_buffer.len() < 4 { + continue; + } else { + data_size = Some(u32::from_be_bytes(usb_buffer[0..4].try_into().unwrap())); + usb_buffer.drain(0..4); + } + } + if let Some(d_type) = data_type && let Some(d_size) = data_size { + let length = d_size as usize; + if usb_buffer.len() >= length { + let usb_data = UsbData { + data: usb_buffer[0..length].to_vec(), + data_type: d_type, + data_size: d_size, + }; + usb_buffer.drain(0..length); + if usb_data.data_type == DATATYPE_TCPTEST { + respond_to_handshake(&usb_tx,usb_data.data); + } else if usb_data.data_type == DATATYPE_ROMUPLOAD { + upload_rom(weak.clone(), usb_data.data,&usb_tx,&cart_rx); + } else { + cart_tx.send(usb_data).unwrap(); + } + data_type = None; + data_size = None; + } + } + } + Err(_e) => { + break; + } + } + } + _ = shutdown_rx.changed() => { + break; + } + } + } +} + +pub fn init( + weak: slint::Weak, +) -> (Option>, ui::Usb) { + let (shutdown_tx, mut shutdown_rx) = tokio::sync::watch::channel(()); + let (usb_tx, usb_rx): ( + tokio::sync::broadcast::Sender, + tokio::sync::broadcast::Receiver, + ) = tokio::sync::broadcast::channel(1024); + let (cart_tx, cart_rx): ( + tokio::sync::broadcast::Sender, + tokio::sync::broadcast::Receiver, + ) = tokio::sync::broadcast::channel(1024); + + let usb_tx_clone = usb_tx.clone(); + let cart_rx_clone = cart_rx.resubscribe(); + tokio::spawn(async move { + let listener = tokio::net::TcpListener::bind("localhost:64000") + .await + .unwrap(); + + loop { + tokio::select! { + res = listener.accept() => { + if let Ok((c,_)) = res { + handle_connection(c,shutdown_rx.clone(),usb_rx.resubscribe(),usb_tx.clone(),cart_tx.clone(),cart_rx.resubscribe(),weak.clone()).await; + } else { + break; + } + } + _ = shutdown_rx.changed() => { + break; + } + } + } + }); + ( + Some(shutdown_tx), + ui::Usb { + usb_tx: Some(usb_tx_clone), + cart_rx: Some(cart_rx_clone), + }, + ) +} + +pub fn close(shutdown_tx: &tokio::sync::watch::Sender<()>) { + let _ = shutdown_tx.send(()); +} + +pub fn send_to_usb(usb_tx: &tokio::sync::broadcast::Sender, buffer: UsbData) { + usb_tx.send(buffer).unwrap(); +} From 4476d476de9f51107cb9e4699555e1b879ea8019 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 18 Aug 2025 10:42:29 +0200 Subject: [PATCH 0562/1117] add frame advance (#549) --- parallel-rdp/interface.cpp | 4 ++++ parallel-rdp/interface.hpp | 1 + src/ui/video.rs | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index aebf742..a04e12c 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -207,6 +207,9 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) case SDL_SCANCODE_RIGHTBRACKET: callback.raise_volume = true; break; + case SDL_SCANCODE_SLASH: + callback.frame_advance = true; + break; case SDL_SCANCODE_0: case SDL_SCANCODE_1: case SDL_SCANCODE_2: @@ -536,6 +539,7 @@ CALL_BACK rdp_check_callback() callback.load_state = false; callback.lower_volume = false; callback.raise_volume = false; + callback.frame_advance = false; return return_value; } diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index e56e9a6..4e81ec5 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -34,6 +34,7 @@ extern "C" bool lower_volume; bool raise_volume; bool paused; + bool frame_advance; uint32_t save_state_slot; } CALL_BACK; diff --git a/src/ui/video.rs b/src/ui/video.rs index 6838e5e..2998c74 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -144,7 +144,7 @@ pub fn check_callback(device: &mut device::Device) -> bool { speed_limiter_toggled = true; device.vi.enable_speed_limiter = callback.enable_speedlimiter; } - while callback.paused { + while callback.paused && !callback.frame_advance { std::thread::sleep(std::time::Duration::from_secs_f64(1.0 / 60.0)); unsafe { sdl3_sys::events::SDL_PumpEvents() }; callback = unsafe { rdp_check_callback() }; From 6ad1a31e3498638b5c746303fff99b62fc1a2585 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 20 Aug 2025 09:15:41 +0200 Subject: [PATCH 0563/1117] correct joystick hat diagonal input (#551) --- src/ui/input.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/ui/input.rs b/src/ui/input.rs index 22950e1..6839562 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -225,8 +225,9 @@ fn set_buttons_from_joystick( let profile_joystick_hat = profile.joystick_hat[i]; if profile_joystick_hat.enabled - && unsafe { sdl3_sys::joystick::SDL_GetJoystickHat(joystick, profile_joystick_hat.id) } - == profile_joystick_hat.direction + && (unsafe { sdl3_sys::joystick::SDL_GetJoystickHat(joystick, profile_joystick_hat.id) } + & profile_joystick_hat.direction) + != 0 { *keys |= 1 << i; } @@ -326,8 +327,9 @@ fn change_paks( pressed = unsafe { sdl3_sys::joystick::SDL_GetJoystickButton(joystick, joystick_button.id) }; } else if joystick_hat.enabled && !joystick.is_null() { - pressed = unsafe { sdl3_sys::joystick::SDL_GetJoystickHat(joystick, joystick_hat.id) } - == joystick_hat.direction; + pressed = (unsafe { sdl3_sys::joystick::SDL_GetJoystickHat(joystick, joystick_hat.id) } + & joystick_hat.direction) + != 0; } else if key.enabled { pressed = unsafe { *keyboard_state.offset(key.id as isize) }; } From 658dede9e9cf8bbe8eeb073450e845da8291ba55 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 20 Aug 2025 10:26:26 +0200 Subject: [PATCH 0564/1117] use dependabot to update rust (#552) --- .github/dependabot.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 75774d2..4cef5c4 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -3,7 +3,11 @@ updates: - package-ecosystem: "github-actions" directory: "/" schedule: - interval: "daily" + interval: "weekly" + - package-ecosystem: "rust-toolchain" + directory: "/" + schedule: + interval: "weekly" # - package-ecosystem: "cargo" # directory: "/" # schedule: From 26022fff72d14801b83be4f86351cce209905dc8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 21 Aug 2025 15:03:50 +0200 Subject: [PATCH 0565/1117] cargo update --- Cargo.lock | 88 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 45 insertions(+), 43 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 480b579..f9b3034 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -714,9 +714,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] name = "cfg_aliases" @@ -838,7 +838,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" dependencies = [ - "thiserror 2.0.15", + "thiserror 2.0.16", ] [[package]] @@ -1138,9 +1138,9 @@ checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" [[package]] name = "data-url" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" +checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" [[package]] name = "deflate64" @@ -1539,14 +1539,14 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.25" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" dependencies = [ "cfg-if", "libc", "libredox", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -1641,9 +1641,9 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] @@ -2142,19 +2142,21 @@ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "hyper" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" dependencies = [ + "atomic-waker", "bytes", "futures-channel", - "futures-util", + "futures-core", "h2", "http", "http-body", "httparse", "itoa", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", @@ -2541,9 +2543,9 @@ dependencies = [ [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -3168,7 +3170,7 @@ dependencies = [ "objc2-foundation 0.3.1", "once_cell", "png", - "thiserror 2.0.15", + "thiserror 2.0.16", "windows-sys 0.60.2", ] @@ -3778,9 +3780,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pico-args" @@ -3939,9 +3941,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.36" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff24dfcda44452b9816fff4cd4227e1bb73ff5a2f1bc1105aa92fb8565ce44d2" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", "syn", @@ -4037,7 +4039,7 @@ dependencies = [ "rustc-hash 2.1.1", "rustls", "socket2 0.5.10", - "thiserror 2.0.15", + "thiserror 2.0.16", "tokio", "tracing", "web-time", @@ -4058,7 +4060,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.15", + "thiserror 2.0.16", "tinyvec", "tracing", "web-time", @@ -4275,7 +4277,7 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.16", "libredox", - "thiserror 2.0.15", + "thiserror 2.0.16", ] [[package]] @@ -4666,9 +4668,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.142" +version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7" +checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" dependencies = [ "itoa", "memchr", @@ -5159,15 +5161,15 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" -version = "3.20.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e" dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", "rustix 1.0.8", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -5196,11 +5198,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.15" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d76d3f064b981389ecb4b6b7f45a0bf9fdac1d5b9204c7bd6714fecc302850" +checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" dependencies = [ - "thiserror-impl 2.0.15", + "thiserror-impl 2.0.16", ] [[package]] @@ -5216,9 +5218,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.15" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d29feb33e986b6ea906bd9c3559a856983f92371b3eaa5e83782a351623de0" +checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" dependencies = [ "proc-macro2", "quote", @@ -5306,9 +5308,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -5537,7 +5539,7 @@ dependencies = [ "log", "rand 0.9.2", "sha1", - "thiserror 2.0.15", + "thiserror 2.0.16", "utf-8", ] @@ -5654,9 +5656,9 @@ checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" [[package]] name = "url" -version = "2.5.4" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "ec961601b32b6f5d14ae8dabd35ff2ff2e2c6cb4c0e6641845ff105abe96d958" dependencies = [ "form_urlencoded", "idna", @@ -6028,11 +6030,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -6816,9 +6818,9 @@ dependencies = [ [[package]] name = "zip" -version = "4.3.0" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aed4ac33e8eb078c89e6cbb1d5c4c7703ec6d299fc3e7c3695af8f8b423468b" +checksum = "d5649b9d3f6261c498410f5a25c95c4a7b0f4b84143a403fafa4e33a66178817" dependencies = [ "aes", "arbitrary", From 4857b868970ae326978c3eb1afde9e8a2617001a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 21 Aug 2025 15:22:19 +0200 Subject: [PATCH 0566/1117] bump to 1.1.5 (#553) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f9b3034..158c5c2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1938,7 +1938,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.4" +version = "1.1.5" dependencies = [ "bindgen 0.72.0", "cc", diff --git a/Cargo.toml b/Cargo.toml index be248d2..9b3bfe5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.4" +version = "1.1.5" edition = "2024" rust-version = "1.89" From db335e24d215f29ab1da5521685845b7aa638391 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 22 Aug 2025 07:59:28 +0200 Subject: [PATCH 0567/1117] render frame before speed limiter (#555) --- src/device/vi.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index 603fc09..4df0917 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -134,6 +134,8 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } pub fn vertical_interrupt_event(device: &mut device::Device) { + ui::video::update_screen(); + if device.cheats.enabled { cheats::execute_cheats(device, device.cheats.cheats.clone()); } @@ -151,7 +153,6 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { if device.vi.vi_counter.is_multiple_of(device.vi.limit_freq) && device.vi.enable_speed_limiter { speed_limiter(device, speed_limiter_toggled); } - ui::video::update_screen(); /* let vis = if device.cart.pal { 50 } else { 60 }; From 0a42152bcb36e63d8a0f6f1ff807fc1ab75c4a89 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 22 Aug 2025 22:42:09 +0200 Subject: [PATCH 0568/1117] move cheats --- src/device/vi.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index 4df0917..568f2c8 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -136,9 +136,6 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u pub fn vertical_interrupt_event(device: &mut device::Device) { ui::video::update_screen(); - if device.cheats.enabled { - cheats::execute_cheats(device, device.cheats.cheats.clone()); - } let mut speed_limiter_toggled = ui::video::check_callback(device); if device.netplay.is_some() { @@ -154,6 +151,10 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { speed_limiter(device, speed_limiter_toggled); } + if device.cheats.enabled { + cheats::execute_cheats(device, device.cheats.cheats.clone()); + } + /* let vis = if device.cart.pal { 50 } else { 60 }; if device.vi.vi_counter % vis == 0 { From 96af33c434bb210135d73e40b899bd1ee281c601 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 23 Aug 2025 08:54:47 +0200 Subject: [PATCH 0569/1117] Split render frame and update screen, move pause loop (#556) * split render and update screen functions * move pause loop --- build.rs | 1 + parallel-rdp/interface.cpp | 8 ++++++-- parallel-rdp/interface.hpp | 1 + src/device/vi.rs | 12 +++++++++--- src/ui/video.rs | 28 +++++++++++++++++++--------- 5 files changed, 36 insertions(+), 14 deletions(-) diff --git a/build.rs b/build.rs index 599da1b..78ef6dd 100644 --- a/build.rs +++ b/build.rs @@ -111,6 +111,7 @@ fn main() { .allowlist_function("rdp_close") .allowlist_function("rdp_set_vi_register") .allowlist_function("rdp_update_screen") + .allowlist_function("rdp_render_frame") .allowlist_function("rdp_process_commands") .allowlist_function("rdp_onscreen_message") .allowlist_function("rdp_check_callback") diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index a04e12c..6580b77 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -523,13 +523,17 @@ void rdp_set_vi_register(uint32_t reg, uint32_t value) processor->set_vi_register(RDP::VIRegister(reg), value); } -void rdp_update_screen() +void rdp_render_frame() { auto &device = wsi->get_device(); render_frame(device); + rdp_device.vi_counter += 1; +} + +void rdp_update_screen() +{ wsi->end_frame(); wsi->begin_frame(); - rdp_device.vi_counter += 1; } CALL_BACK rdp_check_callback() diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 4e81ec5..ad9421f 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -42,6 +42,7 @@ extern "C" void rdp_close(); void rdp_set_vi_register(uint32_t reg, uint32_t value); void rdp_update_screen(); + void rdp_render_frame(); CALL_BACK rdp_check_callback(); uint64_t rdp_process_commands(); void rdp_onscreen_message(const char *_message); diff --git a/src/device/vi.rs b/src/device/vi.rs index 568f2c8..e117c34 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -134,9 +134,9 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } pub fn vertical_interrupt_event(device: &mut device::Device) { - ui::video::update_screen(); + ui::video::render_frame(); - let mut speed_limiter_toggled = ui::video::check_callback(device); + let (mut speed_limiter_toggled, paused) = ui::video::check_callback(device); if device.netplay.is_some() { netplay::send_sync_check(device); @@ -146,11 +146,17 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { } } - device.vi.vi_counter += 1; if device.vi.vi_counter.is_multiple_of(device.vi.limit_freq) && device.vi.enable_speed_limiter { speed_limiter(device, speed_limiter_toggled); } + ui::video::update_screen(); + device.vi.vi_counter += 1; + + if device.netplay.is_none() && paused { + ui::video::pause_loop(); + } + if device.cheats.enabled { cheats::execute_cheats(device, device.cheats.cheats.clone()); } diff --git a/src/ui/video.rs b/src/ui/video.rs index 2998c74..0f316aa 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -93,10 +93,13 @@ pub fn close(ui: &ui::Ui) { } pub fn update_screen() { - // when the window is closed, running is set to false unsafe { rdp_update_screen() } } +pub fn render_frame() { + unsafe { rdp_render_frame() } +} + pub fn state_size() -> usize { unsafe { rdp_state_size() } } @@ -130,9 +133,21 @@ pub fn load_state(device: &mut device::Device, rdp_state: *const u8) { } } -pub fn check_callback(device: &mut device::Device) -> bool { +pub fn pause_loop() { + let mut paused = true; + let mut frame_advance = false; + while paused && !frame_advance { + std::thread::sleep(std::time::Duration::from_secs_f64(1.0 / 60.0)); + unsafe { sdl3_sys::events::SDL_PumpEvents() }; + let callback = unsafe { rdp_check_callback() }; + paused = callback.paused; + frame_advance = callback.frame_advance; + } +} + +pub fn check_callback(device: &mut device::Device) -> (bool, bool) { let mut speed_limiter_toggled = false; - let mut callback = unsafe { rdp_check_callback() }; + let callback = unsafe { rdp_check_callback() }; device.cpu.running = callback.emu_running; if device.netplay.is_none() { if callback.save_state { @@ -144,11 +159,6 @@ pub fn check_callback(device: &mut device::Device) -> bool { speed_limiter_toggled = true; device.vi.enable_speed_limiter = callback.enable_speedlimiter; } - while callback.paused && !callback.frame_advance { - std::thread::sleep(std::time::Duration::from_secs_f64(1.0 / 60.0)); - unsafe { sdl3_sys::events::SDL_PumpEvents() }; - callback = unsafe { rdp_check_callback() }; - } } if device.ui.storage.save_state_slot != callback.save_state_slot { @@ -169,7 +179,7 @@ pub fn check_callback(device: &mut device::Device) -> bool { } else if callback.raise_volume { ui::audio::raise_audio_volume(&mut device.ui); } - speed_limiter_toggled + (speed_limiter_toggled, callback.paused) } pub fn set_register(reg: u32, value: u32) { From 90be2130c1696f6d34967b7518377f3630cfc440 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 23 Aug 2025 09:36:47 +0200 Subject: [PATCH 0570/1117] move cheats back --- src/device/vi.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index e117c34..392b600 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -134,6 +134,10 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } pub fn vertical_interrupt_event(device: &mut device::Device) { + if device.cheats.enabled { + cheats::execute_cheats(device, device.cheats.cheats.clone()); + } + ui::video::render_frame(); let (mut speed_limiter_toggled, paused) = ui::video::check_callback(device); @@ -157,10 +161,6 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { ui::video::pause_loop(); } - if device.cheats.enabled { - cheats::execute_cheats(device, device.cheats.cheats.clone()); - } - /* let vis = if device.cart.pal { 50 } else { 60 }; if device.vi.vi_counter % vis == 0 { From 879965024530d7b1afd9e44ca67f7ef44405e86e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 23 Aug 2025 15:36:03 +0200 Subject: [PATCH 0571/1117] add deadzone option (#554) * add deadzone option * add deadzone calc * more --- src/main.rs | 12 +++++- src/ui/config.rs | 1 + src/ui/gui.rs | 9 +++- src/ui/gui/input_profile.slint | 25 ++++++++++- src/ui/input.rs | 77 +++++++++++++++++++++++++--------- 5 files changed, 101 insertions(+), 23 deletions(-) diff --git a/src/main.rs b/src/main.rs index 3b6ea94..015659c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -22,15 +22,22 @@ struct Args { short, long, value_name = "PROFILE_NAME", - help = "Create a new input profile (keyboard/gamepad mappings)." + help = "Create a new input profile (keyboard/gamepad mappings)" )] configure_input_profile: Option, #[arg( short, long, - help = "Use DirectInput when configuring a new input profile." + help = "Use DirectInput when configuring a new input profile" )] use_dinput: bool, + #[arg( + short, + long, + value_name = "DEADZONE_PERCENTAGE", + help = "Used along with --configure-input-profile to set the deadzone for analog sticks" + )] + deadzone: Option, #[arg( short, long, @@ -112,6 +119,7 @@ async fn main() { &mut ui, args.configure_input_profile.unwrap(), args.use_dinput, + args.deadzone.unwrap_or(ui::input::DEADZONE_DEFAULT), ); return; } diff --git a/src/ui/config.rs b/src/ui/config.rs index d2a3022..133a7ba 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -29,6 +29,7 @@ pub struct InputProfile { pub joystick_hat: [InputJoystickHat; ui::input::PROFILE_SIZE], pub joystick_axis: [InputControllerAxis; ui::input::PROFILE_SIZE], pub dinput: bool, + pub deadzone: i32, } #[derive(serde::Serialize, serde::Deserialize)] diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 8d9a312..93aaddb 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -211,6 +211,7 @@ fn controller_window( let weak_app = app.as_weak(); app.on_input_profile_button_clicked(move || { let dialog = InputProfileDialog::new().unwrap(); + dialog.set_deadzone(ui::input::DEADZONE_DEFAULT); let weak_dialog = dialog.as_weak(); let weak_app = weak_app.clone(); dialog.on_profile_creation_button_clicked(move || { @@ -220,10 +221,16 @@ fn controller_window( handle.hide().unwrap(); let profile_name = handle.get_profile_name().into(); let dinput = handle.get_dinput(); + let deadzone = handle.get_deadzone(); tokio::spawn(async move { let mut game_ui = ui::Ui::new(); - ui::input::configure_input_profile(&mut game_ui, profile_name, dinput); + ui::input::configure_input_profile( + &mut game_ui, + profile_name, + dinput, + deadzone, + ); update_input_profiles(&weak_app, &game_ui.config); }); }) diff --git a/src/ui/gui/input_profile.slint b/src/ui/gui/input_profile.slint index 17d6b1e..a5c43d6 100644 --- a/src/ui/gui/input_profile.slint +++ b/src/ui/gui/input_profile.slint @@ -1,8 +1,9 @@ -import { StandardButton, HorizontalBox, VerticalBox, Button, LineEdit, CheckBox } from "std-widgets.slint"; +import { StandardButton, HorizontalBox, VerticalBox, Button, LineEdit, CheckBox, Slider } from "std-widgets.slint"; export global InputProfileData { in-out property dinput; in-out property profile_name; + in-out property deadzone; } export component InputProfileDialog inherits Window { @@ -10,6 +11,7 @@ export component InputProfileDialog inherits Window { callback profile_creation_button_clicked; in-out property dinput <=> InputProfileData.dinput; in-out property profile_name <=> InputProfileData.profile_name; + in-out property deadzone <=> InputProfileData.deadzone; VerticalBox { HorizontalBox { LineEdit { @@ -21,6 +23,27 @@ export component InputProfileDialog inherits Window { } } + HorizontalBox { + alignment: center; + Text { + text: @tr("Deadzone Percentage"); + vertical-alignment: center; + } + + Slider { + min-width: 160px; + value: InputProfileData.deadzone; + changed(value) => { + InputProfileData.deadzone = value; + } + } + + Text { + text: InputProfileData.deadzone + "%"; + vertical-alignment: center; + } + } + HorizontalBox { alignment: center; CheckBox { diff --git a/src/ui/input.rs b/src/ui/input.rs index 6839562..cdeda53 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -28,6 +28,8 @@ const Y_AXIS_SHIFT: usize = 24; const MAX_AXIS_VALUE: f64 = 85.0; +pub const DEADZONE_DEFAULT: i32 = 5; + pub struct Controllers { pub rumble: bool, pub game_controller: *mut sdl3_sys::gamepad::SDL_Gamepad, @@ -56,6 +58,7 @@ fn bound_axis(x: &mut f64, y: &mut f64) { fn set_axis_from_joystick( profile: &ui::config::InputProfile, joystick: *mut sdl3_sys::joystick::SDL_Joystick, + deadzone: u16, ) -> (f64, f64) { let mut x = 0.0; let mut y = 0.0; @@ -63,32 +66,48 @@ fn set_axis_from_joystick( let axis_position = unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_LEFT].id) }; - if axis_position as isize * profile.joystick_axis[AXIS_LEFT].axis as isize > 0 { - x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; + if axis_position.unsigned_abs() > deadzone + && axis_position as isize * profile.joystick_axis[AXIS_LEFT].axis as isize > 0 + { + x = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX as u16 - deadzone) as f64; + x *= profile.joystick_axis[AXIS_LEFT].axis as f64; } } if profile.joystick_axis[AXIS_RIGHT].enabled { let axis_position = unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_RIGHT].id) }; - if axis_position as isize * profile.joystick_axis[AXIS_RIGHT].axis as isize > 0 { - x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; + if axis_position.unsigned_abs() > deadzone + && axis_position as isize * profile.joystick_axis[AXIS_RIGHT].axis as isize > 0 + { + x = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX as u16 - deadzone) as f64; + x *= profile.joystick_axis[AXIS_RIGHT].axis as f64; } } if profile.joystick_axis[AXIS_DOWN].enabled { let axis_position = unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_DOWN].id) }; - if axis_position as isize * profile.joystick_axis[AXIS_DOWN].axis as isize > 0 { - y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); + if axis_position.unsigned_abs() > deadzone + && axis_position as isize * profile.joystick_axis[AXIS_DOWN].axis as isize > 0 + { + y = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX as u16 - deadzone) as f64; + y *= (profile.joystick_axis[AXIS_DOWN].axis as f64).neg(); } } if profile.joystick_axis[AXIS_UP].enabled { let axis_position = unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_UP].id) }; - if axis_position as isize * profile.joystick_axis[AXIS_UP].axis as isize > 0 { - y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); + if axis_position.unsigned_abs() > deadzone + && axis_position as isize * profile.joystick_axis[AXIS_UP].axis as isize > 0 + { + y = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX as u16 - deadzone) as f64; + y *= (profile.joystick_axis[AXIS_UP].axis as f64).neg(); } } (x, y) @@ -130,6 +149,7 @@ fn get_button_from_i32(button: i32) -> sdl3_sys::gamepad::SDL_GamepadButton { fn set_axis_from_controller( profile: &ui::config::InputProfile, controller: *mut sdl3_sys::gamepad::SDL_Gamepad, + deadzone: u16, ) -> (f64, f64) { let mut x = 0.0; let mut y = 0.0; @@ -140,8 +160,12 @@ fn set_axis_from_controller( get_axis_from_i32(profile.controller_axis[AXIS_LEFT].id), ) }; - if axis_position as isize * profile.controller_axis[AXIS_LEFT].axis as isize > 0 { - x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; + if axis_position.unsigned_abs() > deadzone + && axis_position as isize * profile.controller_axis[AXIS_LEFT].axis as isize > 0 + { + x = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX as u16 - deadzone) as f64; + x *= profile.controller_axis[AXIS_LEFT].axis as f64; } } if profile.controller_axis[AXIS_RIGHT].enabled { @@ -151,8 +175,12 @@ fn set_axis_from_controller( get_axis_from_i32(profile.controller_axis[AXIS_RIGHT].id), ) }; - if axis_position as isize * profile.controller_axis[AXIS_RIGHT].axis as isize > 0 { - x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; + if axis_position.unsigned_abs() > deadzone + && axis_position as isize * profile.controller_axis[AXIS_RIGHT].axis as isize > 0 + { + x = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX as u16 - deadzone) as f64; + x *= profile.controller_axis[AXIS_RIGHT].axis as f64; } } if profile.controller_axis[AXIS_DOWN].enabled { @@ -162,8 +190,12 @@ fn set_axis_from_controller( get_axis_from_i32(profile.controller_axis[AXIS_DOWN].id), ) }; - if axis_position as isize * profile.controller_axis[AXIS_DOWN].axis as isize > 0 { - y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); + if axis_position.unsigned_abs() > deadzone + && axis_position as isize * profile.controller_axis[AXIS_DOWN].axis as isize > 0 + { + y = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX as u16 - deadzone) as f64; + y *= (profile.controller_axis[AXIS_DOWN].axis as f64).neg(); } } if profile.controller_axis[AXIS_UP].enabled { @@ -173,8 +205,12 @@ fn set_axis_from_controller( get_axis_from_i32(profile.controller_axis[AXIS_UP].id), ) }; - if axis_position as isize * profile.controller_axis[AXIS_UP].axis as isize > 0 { - y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); + if axis_position.unsigned_abs() > deadzone + && axis_position as isize * profile.controller_axis[AXIS_UP].axis as isize > 0 + { + y = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX as u16 - deadzone) as f64; + y *= (profile.controller_axis[AXIS_UP].axis as f64).neg(); } } (x, y) @@ -408,10 +444,11 @@ pub fn get(ui: &ui::Ui, channel: usize) -> InputData { (x, y) = set_axis_from_keys(profile, ui.input.keyboard_state); } + let deadzone = (i16::MAX as i32 * profile.deadzone / 100) as u16; if !controller.is_null() { - (x, y) = set_axis_from_controller(profile, controller) + (x, y) = set_axis_from_controller(profile, controller, deadzone) } else if !joystick.is_null() { - (x, y) = set_axis_from_joystick(profile, joystick) + (x, y) = set_axis_from_joystick(profile, joystick, deadzone) } bound_axis(&mut x, &mut y); @@ -466,7 +503,7 @@ fn close_controllers( } } -pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { +pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, deadzone: i32) { ui::sdl_init(sdl3_sys::init::SDL_INIT_VIDEO); ui::ttf_init(); @@ -699,6 +736,7 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { joystick_hat: new_joystick_hat, joystick_axis: new_joystick_axis, dinput, + deadzone, }; ui.config.input.input_profiles.insert(profile, new_profile); } @@ -899,6 +937,7 @@ pub fn get_default_profile() -> ui::config::InputProfile { axis: 0, }; PROFILE_SIZE], dinput: false, + deadzone: DEADZONE_DEFAULT, } } From c52b680753c716cd3485402b9a5f9e82c60bbdf6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 23 Aug 2025 22:52:04 +0200 Subject: [PATCH 0572/1117] use saturating abs for deadzone (#557) --- src/ui/input.rs | 54 ++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/ui/input.rs b/src/ui/input.rs index cdeda53..76a9e4e 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -58,7 +58,7 @@ fn bound_axis(x: &mut f64, y: &mut f64) { fn set_axis_from_joystick( profile: &ui::config::InputProfile, joystick: *mut sdl3_sys::joystick::SDL_Joystick, - deadzone: u16, + deadzone: i16, ) -> (f64, f64) { let mut x = 0.0; let mut y = 0.0; @@ -66,11 +66,11 @@ fn set_axis_from_joystick( let axis_position = unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_LEFT].id) }; - if axis_position.unsigned_abs() > deadzone + if axis_position.saturating_abs() > deadzone && axis_position as isize * profile.joystick_axis[AXIS_LEFT].axis as isize > 0 { - x = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX as u16 - deadzone) as f64; + x = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX - deadzone) as f64; x *= profile.joystick_axis[AXIS_LEFT].axis as f64; } } @@ -78,11 +78,11 @@ fn set_axis_from_joystick( let axis_position = unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_RIGHT].id) }; - if axis_position.unsigned_abs() > deadzone + if axis_position.saturating_abs() > deadzone && axis_position as isize * profile.joystick_axis[AXIS_RIGHT].axis as isize > 0 { - x = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX as u16 - deadzone) as f64; + x = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX - deadzone) as f64; x *= profile.joystick_axis[AXIS_RIGHT].axis as f64; } } @@ -90,11 +90,11 @@ fn set_axis_from_joystick( let axis_position = unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_DOWN].id) }; - if axis_position.unsigned_abs() > deadzone + if axis_position.saturating_abs() > deadzone && axis_position as isize * profile.joystick_axis[AXIS_DOWN].axis as isize > 0 { - y = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX as u16 - deadzone) as f64; + y = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX - deadzone) as f64; y *= (profile.joystick_axis[AXIS_DOWN].axis as f64).neg(); } } @@ -102,11 +102,11 @@ fn set_axis_from_joystick( let axis_position = unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_UP].id) }; - if axis_position.unsigned_abs() > deadzone + if axis_position.saturating_abs() > deadzone && axis_position as isize * profile.joystick_axis[AXIS_UP].axis as isize > 0 { - y = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX as u16 - deadzone) as f64; + y = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX - deadzone) as f64; y *= (profile.joystick_axis[AXIS_UP].axis as f64).neg(); } } @@ -149,7 +149,7 @@ fn get_button_from_i32(button: i32) -> sdl3_sys::gamepad::SDL_GamepadButton { fn set_axis_from_controller( profile: &ui::config::InputProfile, controller: *mut sdl3_sys::gamepad::SDL_Gamepad, - deadzone: u16, + deadzone: i16, ) -> (f64, f64) { let mut x = 0.0; let mut y = 0.0; @@ -160,11 +160,11 @@ fn set_axis_from_controller( get_axis_from_i32(profile.controller_axis[AXIS_LEFT].id), ) }; - if axis_position.unsigned_abs() > deadzone + if axis_position.saturating_abs() > deadzone && axis_position as isize * profile.controller_axis[AXIS_LEFT].axis as isize > 0 { - x = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX as u16 - deadzone) as f64; + x = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX - deadzone) as f64; x *= profile.controller_axis[AXIS_LEFT].axis as f64; } } @@ -175,11 +175,11 @@ fn set_axis_from_controller( get_axis_from_i32(profile.controller_axis[AXIS_RIGHT].id), ) }; - if axis_position.unsigned_abs() > deadzone + if axis_position.saturating_abs() > deadzone && axis_position as isize * profile.controller_axis[AXIS_RIGHT].axis as isize > 0 { - x = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX as u16 - deadzone) as f64; + x = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX - deadzone) as f64; x *= profile.controller_axis[AXIS_RIGHT].axis as f64; } } @@ -190,11 +190,11 @@ fn set_axis_from_controller( get_axis_from_i32(profile.controller_axis[AXIS_DOWN].id), ) }; - if axis_position.unsigned_abs() > deadzone + if axis_position.saturating_abs() > deadzone && axis_position as isize * profile.controller_axis[AXIS_DOWN].axis as isize > 0 { - y = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX as u16 - deadzone) as f64; + y = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX - deadzone) as f64; y *= (profile.controller_axis[AXIS_DOWN].axis as f64).neg(); } } @@ -205,11 +205,11 @@ fn set_axis_from_controller( get_axis_from_i32(profile.controller_axis[AXIS_UP].id), ) }; - if axis_position.unsigned_abs() > deadzone + if axis_position.saturating_abs() > deadzone && axis_position as isize * profile.controller_axis[AXIS_UP].axis as isize > 0 { - y = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX as u16 - deadzone) as f64; + y = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX - deadzone) as f64; y *= (profile.controller_axis[AXIS_UP].axis as f64).neg(); } } @@ -444,7 +444,7 @@ pub fn get(ui: &ui::Ui, channel: usize) -> InputData { (x, y) = set_axis_from_keys(profile, ui.input.keyboard_state); } - let deadzone = (i16::MAX as i32 * profile.deadzone / 100) as u16; + let deadzone = (i16::MAX as i32 * profile.deadzone / 100) as i16; if !controller.is_null() { (x, y) = set_axis_from_controller(profile, controller, deadzone) } else if !joystick.is_null() { From cccb079d639efcdb6a78ae38bcc3b2d267d7bd60 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 24 Aug 2025 00:05:03 +0200 Subject: [PATCH 0573/1117] cleanup deadzone code (#558) --- src/ui/input.rs | 93 +++++++++++++++++++++---------------------------- 1 file changed, 39 insertions(+), 54 deletions(-) diff --git a/src/ui/input.rs b/src/ui/input.rs index 76a9e4e..f6d061f 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -42,7 +42,7 @@ pub struct InputData { } fn bound_axis(x: &mut f64, y: &mut f64) { - let radius = 95.0; // this is roughly the maxium diagonal distance of the controller + let radius = f64::sqrt(70.0 * 70.0 + 70.0 * 70.0); // this is roughly the maxium diagonal distance of the controller // Calculate the distance from the origin (0, 0) let distance = f64::sqrt((*x) * (*x) + (*y) * (*y)); @@ -55,10 +55,27 @@ fn bound_axis(x: &mut f64, y: &mut f64) { } } +fn apply_deadzone(x: &mut f64, y: &mut f64, deadzone: i32) { + let axis_deadzone = MAX_AXIS_VALUE * (deadzone as f64 / 100.0); + + // Calculate the distance from the origin (0, 0) + let distance = f64::sqrt((*x) * (*x) + (*y) * (*y)); + + if distance <= axis_deadzone { + *x = 0.0; + *y = 0.0; + return; + } + + let new_distance = + (distance - axis_deadzone) * MAX_AXIS_VALUE / (MAX_AXIS_VALUE - axis_deadzone); + *x = *x / distance * new_distance; + *y = *y / distance * new_distance; +} + fn set_axis_from_joystick( profile: &ui::config::InputProfile, joystick: *mut sdl3_sys::joystick::SDL_Joystick, - deadzone: i16, ) -> (f64, f64) { let mut x = 0.0; let mut y = 0.0; @@ -66,48 +83,32 @@ fn set_axis_from_joystick( let axis_position = unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_LEFT].id) }; - if axis_position.saturating_abs() > deadzone - && axis_position as isize * profile.joystick_axis[AXIS_LEFT].axis as isize > 0 - { - x = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX - deadzone) as f64; - x *= profile.joystick_axis[AXIS_LEFT].axis as f64; + if axis_position as isize * profile.joystick_axis[AXIS_LEFT].axis as isize > 0 { + x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; } } if profile.joystick_axis[AXIS_RIGHT].enabled { let axis_position = unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_RIGHT].id) }; - if axis_position.saturating_abs() > deadzone - && axis_position as isize * profile.joystick_axis[AXIS_RIGHT].axis as isize > 0 - { - x = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX - deadzone) as f64; - x *= profile.joystick_axis[AXIS_RIGHT].axis as f64; + if axis_position as isize * profile.joystick_axis[AXIS_RIGHT].axis as isize > 0 { + x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; } } if profile.joystick_axis[AXIS_DOWN].enabled { let axis_position = unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_DOWN].id) }; - if axis_position.saturating_abs() > deadzone - && axis_position as isize * profile.joystick_axis[AXIS_DOWN].axis as isize > 0 - { - y = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX - deadzone) as f64; - y *= (profile.joystick_axis[AXIS_DOWN].axis as f64).neg(); + if axis_position as isize * profile.joystick_axis[AXIS_DOWN].axis as isize > 0 { + y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); } } if profile.joystick_axis[AXIS_UP].enabled { let axis_position = unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_UP].id) }; - if axis_position.saturating_abs() > deadzone - && axis_position as isize * profile.joystick_axis[AXIS_UP].axis as isize > 0 - { - y = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX - deadzone) as f64; - y *= (profile.joystick_axis[AXIS_UP].axis as f64).neg(); + if axis_position as isize * profile.joystick_axis[AXIS_UP].axis as isize > 0 { + y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); } } (x, y) @@ -149,7 +150,6 @@ fn get_button_from_i32(button: i32) -> sdl3_sys::gamepad::SDL_GamepadButton { fn set_axis_from_controller( profile: &ui::config::InputProfile, controller: *mut sdl3_sys::gamepad::SDL_Gamepad, - deadzone: i16, ) -> (f64, f64) { let mut x = 0.0; let mut y = 0.0; @@ -160,12 +160,8 @@ fn set_axis_from_controller( get_axis_from_i32(profile.controller_axis[AXIS_LEFT].id), ) }; - if axis_position.saturating_abs() > deadzone - && axis_position as isize * profile.controller_axis[AXIS_LEFT].axis as isize > 0 - { - x = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX - deadzone) as f64; - x *= profile.controller_axis[AXIS_LEFT].axis as f64; + if axis_position as isize * profile.controller_axis[AXIS_LEFT].axis as isize > 0 { + x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; } } if profile.controller_axis[AXIS_RIGHT].enabled { @@ -175,12 +171,8 @@ fn set_axis_from_controller( get_axis_from_i32(profile.controller_axis[AXIS_RIGHT].id), ) }; - if axis_position.saturating_abs() > deadzone - && axis_position as isize * profile.controller_axis[AXIS_RIGHT].axis as isize > 0 - { - x = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX - deadzone) as f64; - x *= profile.controller_axis[AXIS_RIGHT].axis as f64; + if axis_position as isize * profile.controller_axis[AXIS_RIGHT].axis as isize > 0 { + x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; } } if profile.controller_axis[AXIS_DOWN].enabled { @@ -190,12 +182,8 @@ fn set_axis_from_controller( get_axis_from_i32(profile.controller_axis[AXIS_DOWN].id), ) }; - if axis_position.saturating_abs() > deadzone - && axis_position as isize * profile.controller_axis[AXIS_DOWN].axis as isize > 0 - { - y = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX - deadzone) as f64; - y *= (profile.controller_axis[AXIS_DOWN].axis as f64).neg(); + if axis_position as isize * profile.controller_axis[AXIS_DOWN].axis as isize > 0 { + y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); } } if profile.controller_axis[AXIS_UP].enabled { @@ -205,12 +193,8 @@ fn set_axis_from_controller( get_axis_from_i32(profile.controller_axis[AXIS_UP].id), ) }; - if axis_position.saturating_abs() > deadzone - && axis_position as isize * profile.controller_axis[AXIS_UP].axis as isize > 0 - { - y = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX - deadzone) as f64; - y *= (profile.controller_axis[AXIS_UP].axis as f64).neg(); + if axis_position as isize * profile.controller_axis[AXIS_UP].axis as isize > 0 { + y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); } } (x, y) @@ -444,11 +428,12 @@ pub fn get(ui: &ui::Ui, channel: usize) -> InputData { (x, y) = set_axis_from_keys(profile, ui.input.keyboard_state); } - let deadzone = (i16::MAX as i32 * profile.deadzone / 100) as i16; if !controller.is_null() { - (x, y) = set_axis_from_controller(profile, controller, deadzone) + (x, y) = set_axis_from_controller(profile, controller); + apply_deadzone(&mut x, &mut y, profile.deadzone); } else if !joystick.is_null() { - (x, y) = set_axis_from_joystick(profile, joystick, deadzone) + (x, y) = set_axis_from_joystick(profile, joystick); + apply_deadzone(&mut x, &mut y, profile.deadzone); } bound_axis(&mut x, &mut y); From 2127705e7bcb08801d731a990465212e999988ca Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 24 Aug 2025 07:29:07 +0200 Subject: [PATCH 0574/1117] set deadzon max to 99 --- src/ui/gui/input_profile.slint | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ui/gui/input_profile.slint b/src/ui/gui/input_profile.slint index a5c43d6..941867d 100644 --- a/src/ui/gui/input_profile.slint +++ b/src/ui/gui/input_profile.slint @@ -32,6 +32,7 @@ export component InputProfileDialog inherits Window { Slider { min-width: 160px; + maximum: 99; value: InputProfileData.deadzone; changed(value) => { InputProfileData.deadzone = value; From b3297f82b227dee04af925ed15b0d436beb9c8f1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 24 Aug 2025 10:58:01 +0200 Subject: [PATCH 0575/1117] cargo update --- Cargo.lock | 144 ++++++++++++++++++++++++++--------------------------- 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 158c5c2..d16f906 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -88,7 +88,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", - "bitflags 2.9.2", + "bitflags 2.9.3", "cc", "cesu8", "jni", @@ -462,7 +462,7 @@ version = "0.71.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "cexpr", "clang-sys", "itertools 0.13.0", @@ -482,7 +482,7 @@ version = "0.72.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f72209734318d0b619a5e0f5129918b848c416e122a3c4ce054e03cb87b726f" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "cexpr", "clang-sys", "itertools 0.13.0", @@ -510,9 +510,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.2" +version = "2.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a65b545ab31d687cff52899d4890855fec459eb6afe0da6417b8a18da87aa29" +checksum = "34efbcccd345379ca2868b2b2c9d3782e9cc58ba87bc7d79d5b53d9c9ae6f25d" dependencies = [ "serde", ] @@ -643,7 +643,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "log", "polling", "rustix 0.38.44", @@ -657,7 +657,7 @@ version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb9f6e1368bd4621d2c86baa7e37de77a938adf5221e5dd3d6133340101b309e" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "polling", "rustix 1.0.8", "slab", @@ -678,9 +678,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.33" +version = "1.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ee0f8803222ba5a7e2777dd72ca451868909b1ac410621b676adf07280e9b5f" +checksum = "42bc4aea80032b7bf409b0bc7ccad88853858911b7713a8062fdc0623867bedc" dependencies = [ "jobserver", "libc", @@ -974,7 +974,7 @@ version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "core-foundation 0.10.1", "core-graphics-types 0.2.0", "foreign-types", @@ -998,7 +998,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "core-foundation 0.10.1", "libc", ] @@ -1244,7 +1244,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "block2 0.6.1", "libc", "objc2 0.6.2", @@ -1288,7 +1288,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "bytemuck", "drm-ffi", "drm-fourcc", @@ -1324,9 +1324,9 @@ dependencies = [ [[package]] name = "dwrote" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe1f192fcce01590bd8d839aca53ce0d11d803bf291b2a6c4ad925a8f0024be" +checksum = "20c93d234bac0cdd0e2ac08bc8a5133f8df2169e95b262dfcea5e5cb7855672f" dependencies = [ "lazy_static", "libc", @@ -1510,7 +1510,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffdf29af13b81d7562ccd57624242b2ed56edc2c83dad25f13bd74d87e7fa8d9" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "bytemuck", "fnv", "glow", @@ -1762,7 +1762,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce852e998d3ca5e4a97014fb31c940dc5ef344ec7d364984525fd11e8a547e6a" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "drm", "drm-fourcc", "gbm-sys", @@ -1876,7 +1876,7 @@ version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "cfg_aliases", "cgl", "dispatch2", @@ -2319,7 +2319,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc384a0a106e7bc1aaf6fbf06d5a4d0d8e51a4bc5ff5ce36dbe559620aef4533" dependencies = [ "auto_enums", - "bitflags 2.9.2", + "bitflags 2.9.3", "cfg-if", "chrono", "clru", @@ -2609,9 +2609,9 @@ checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" [[package]] name = "indexmap" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" +checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" dependencies = [ "equivalent", "hashbrown 0.15.5", @@ -2632,7 +2632,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "input-sys", "libc", "log", @@ -2678,11 +2678,11 @@ dependencies = [ [[package]] name = "io-uring" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" +checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "cfg-if", "libc", ] @@ -2785,9 +2785,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ "getrandom 0.3.3", "libc", @@ -2815,7 +2815,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "serde", "unicode-segmentation", ] @@ -2923,7 +2923,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "libc", "redox_syscall 0.5.17", ] @@ -3097,9 +3097,9 @@ checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "memmap2" -version = "0.9.7" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "483758ad303d734cec05e5c12b41d7e93e6a6390c5e9dae6bdeb7c1259012d28" +checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" dependencies = [ "libc", ] @@ -3180,7 +3180,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "jni-sys", "log", "ndk-sys", @@ -3216,7 +3216,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "cfg-if", "cfg_aliases", "libc", @@ -3355,7 +3355,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -3371,7 +3371,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "block2 0.6.1", "libc", "objc2 0.6.2", @@ -3390,7 +3390,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -3403,7 +3403,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17614fdcd9b411e6ff1117dfb1d0150f908ba83a7df81b1f118005fe0a8ea15d" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "objc2 0.6.2", "objc2-foundation 0.3.1", ] @@ -3425,7 +3425,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -3437,7 +3437,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "291fbbf7d29287518e8686417cf7239c74700fd4b607623140a7d4a3c834329d" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "objc2 0.6.2", "objc2-foundation 0.3.1", ] @@ -3448,7 +3448,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "dispatch2", "objc2 0.6.2", ] @@ -3459,7 +3459,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "dispatch2", "objc2 0.6.2", "objc2-core-foundation", @@ -3512,7 +3512,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "block2 0.5.1", "dispatch", "libc", @@ -3525,7 +3525,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "objc2 0.6.2", "objc2-core-foundation", ] @@ -3536,7 +3536,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "objc2 0.6.2", "objc2-core-foundation", ] @@ -3559,7 +3559,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -3571,7 +3571,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f246c183239540aab1782457b35ab2040d4259175bd1d0c58e46ada7b47a874" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "objc2 0.6.2", "objc2-foundation 0.3.1", ] @@ -3582,7 +3582,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -3595,7 +3595,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90ffb6a0cd5f182dc964334388560b12a57f7b74b3e2dec5e2722aa2dfb2ccd5" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "objc2 0.6.2", "objc2-core-foundation", "objc2-foundation 0.3.1", @@ -3618,7 +3618,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "block2 0.5.1", "objc2 0.5.2", "objc2-cloud-kit 0.2.2", @@ -3650,7 +3650,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -4210,7 +4210,7 @@ version = "11.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", ] [[package]] @@ -4266,7 +4266,7 @@ version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", ] [[package]] @@ -4471,7 +4471,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "errno", "libc", "linux-raw-sys 0.4.15", @@ -4484,7 +4484,7 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "errno", "libc", "linux-raw-sys 0.9.4", @@ -4538,7 +4538,7 @@ version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "bytemuck", "core_maths", "log", @@ -4813,7 +4813,7 @@ version = "0.86.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e372258f52414e04de007326fa497581617c9fa872a3225dca5e42212723c426" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "lazy_static", "skia-bindings", "windows", @@ -4889,7 +4889,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "calloop 0.13.0", "calloop-wayland-source", "cursor-icon", @@ -5449,7 +5449,7 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "bytes", "futures-util", "http", @@ -5656,9 +5656,9 @@ checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" [[package]] name = "url" -version = "2.5.5" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec961601b32b6f5d14ae8dabd35ff2ff2e2c6cb4c0e6641845ff105abe96d958" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", @@ -5888,7 +5888,7 @@ version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "rustix 1.0.8", "wayland-backend", "wayland-scanner", @@ -5900,7 +5900,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "cursor-icon", "wayland-backend", ] @@ -5922,7 +5922,7 @@ version = "0.32.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "wayland-backend", "wayland-client", "wayland-scanner", @@ -5934,7 +5934,7 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "wayland-backend", "wayland-client", "wayland-protocols", @@ -5947,7 +5947,7 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "wayland-backend", "wayland-client", "wayland-protocols", @@ -6451,7 +6451,7 @@ dependencies = [ "ahash", "android-activity", "atomic-waker", - "bitflags 2.9.2", + "bitflags 2.9.3", "block2 0.5.1", "bytemuck", "calloop 0.13.0", @@ -6496,9 +6496,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.12" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] @@ -6528,7 +6528,7 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", ] [[package]] @@ -6612,7 +6612,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.3", "dlib", "log", "once_cell", @@ -6818,9 +6818,9 @@ dependencies = [ [[package]] name = "zip" -version = "4.4.0" +version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5649b9d3f6261c498410f5a25c95c4a7b0f4b84143a403fafa4e33a66178817" +checksum = "8835eb39822904d39cb19465de1159e05d371973f0c6df3a365ad50565ddc8b9" dependencies = [ "aes", "arbitrary", From 8acf3b9de88251ce57f16116517a06d853493041 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 24 Aug 2025 10:58:58 +0200 Subject: [PATCH 0576/1117] bump to 1.1.6 --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d16f906..4919574 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1938,7 +1938,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.5" +version = "1.1.6" dependencies = [ "bindgen 0.72.0", "cc", diff --git a/Cargo.toml b/Cargo.toml index 9b3bfe5..8001468 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.5" +version = "1.1.6" edition = "2024" rust-version = "1.89" From 4fa1a8ad396a1eec09d1314b4269f9bd70723ec6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 5 Sep 2025 09:32:17 +0200 Subject: [PATCH 0577/1117] remove redundant get_rooms netplay call (#563) * remove redundant get_rooms netplay call * unwrap --- src/ui/gui/netplay_join.slint | 6 ++- src/ui/gui/netplay_page.slint | 1 + src/ui/netplay.rs | 70 ++++++++--------------------------- 3 files changed, 20 insertions(+), 57 deletions(-) diff --git a/src/ui/gui/netplay_join.slint b/src/ui/gui/netplay_join.slint index 840ac50..5106c24 100644 --- a/src/ui/gui/netplay_join.slint +++ b/src/ui/gui/netplay_join.slint @@ -9,6 +9,7 @@ export component NetplayJoin inherits Window { in-out property sessions <=> NetplayData.sessions; in-out property current_session <=> NetplayData.current_session; in-out property room_urls <=> NetplayData.room_urls; + in-out property room_ports <=> NetplayData.room_ports; in-out property game_name <=> NetplayData.game_name; in-out property game_hash <=> NetplayData.game_hash; in-out property game_cheats <=> NetplayData.game_cheats; @@ -19,7 +20,7 @@ export component NetplayJoin inherits Window { in-out property rom_dir <=> NetplayData.rom_dir; callback refresh_session(); callback select_rom(string); - callback join_session(string, string, string, string, string); + callback join_session(string, string, string, string, int); preferred-width: 700px; VerticalBox { @@ -93,6 +94,7 @@ export component NetplayJoin inherits Window { NetplayData.current_session = -1; NetplayData.sessions = []; NetplayData.room_urls = []; + NetplayData.room_ports = []; refresh_session(); } } @@ -129,7 +131,7 @@ export component NetplayJoin inherits Window { NetplayData.game_hash, NetplayData.password, NetplayData.room_urls[NetplayData.current_session], - NetplayData.sessions[NetplayData.current_session][1].text); + NetplayData.room_ports[NetplayData.current_session]); } } } diff --git a/src/ui/gui/netplay_page.slint b/src/ui/gui/netplay_page.slint index d767f79..fb28dd4 100644 --- a/src/ui/gui/netplay_page.slint +++ b/src/ui/gui/netplay_page.slint @@ -19,6 +19,7 @@ export global NetplayData { in-out property session_name; in-out property <[[StandardListViewItem]]> sessions; in-out property <[string]> room_urls; + in-out property <[int]> room_ports; in-out property current_session: -1; in-out property rom_dir; in-out property custom_server_url; diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index bf04f80..be11bb6 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -491,6 +491,7 @@ fn update_sessions(weak: slint::Weak) { tokio::spawn(async move { let mut sessions = vec![]; let mut room_urls = vec![]; + let mut room_ports = vec![]; for (server_name, server_url) in servers.iter() { if let Ok(Ok((socket, _response))) = tokio::time::timeout( std::time::Duration::from_secs(2), @@ -533,6 +534,7 @@ fn update_sessions(weak: slint::Weak) { for room in rooms { let mut session = vec![]; room_urls.push(server_url.into()); + room_ports.push(room.port.unwrap()); session.push(slint::StandardListViewItem::from( slint::SharedString::from(server_name), @@ -585,6 +587,11 @@ fn update_sessions(weak: slint::Weak) { std::rc::Rc::new(room_urls_vec); handle.set_room_urls(slint::ModelRc::from(room_urls_model)); + let room_ports_vec = slint::VecModel::from(room_ports.to_vec()); + let room_ports_model: std::rc::Rc> = + std::rc::Rc::new(room_ports_vec); + handle.set_room_ports(slint::ModelRc::from(room_ports_model)); + handle.set_current_session(-1); handle.set_pending_refresh(false); }) @@ -732,7 +739,7 @@ fn join_session( player_name: String, game_hash: String, password: String, - room_name: String, + room_port: i32, fullscreen: bool, weak_app: slint::Weak, weak: slint::Weak, @@ -740,73 +747,26 @@ fn join_session( tokio::spawn(async move { let now_utc = chrono::Utc::now().timestamp_millis().to_string(); let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); - let request_rooms = NetplayMessage { - message_type: "request_get_rooms".to_string(), - player_name: None, - client_sha: None, - netplay_version: Some(NETPLAY_VERSION), - player_names: None, - emulator: Some(EMU_NAME.to_string()), - accept: None, - rooms: None, - message: None, - auth_time: Some(now_utc), - auth: Some(format!("{:x}", hasher.finalize())), - room: None, - }; - - netplay_write_sender.send(Some(request_rooms)).unwrap(); - - let mut port = 0; - match tokio::time::timeout( - std::time::Duration::from_secs(2), - netplay_read_receiver.recv(), - ) - .await - { - Ok(Ok(message)) => { - if message.message_type == "reply_get_rooms" - && message.accept.unwrap() == 0 - && let Some(rooms) = message.rooms - { - for room in rooms { - if room.room_name.unwrap() == room_name { - port = room.port.unwrap_or(0); - } - } - } - } - Ok(Err(err)) => { - panic!("netplay_read_receiver error: {err}"); - } - Err(_) => { - weak.upgrade_in_event_loop(move |handle| { - handle.set_pending_session(false); - show_netplay_error("Server did not respond".to_string()); - }) - .unwrap(); - } - } let join_room = NetplayMessage { message_type: "request_join_room".to_string(), player_name: Some(player_name), client_sha: Some(env!("GIT_HASH").to_string()), - netplay_version: None, - emulator: None, + netplay_version: Some(NETPLAY_VERSION), + emulator: Some(EMU_NAME.to_string()), accept: None, message: None, rooms: None, - auth_time: None, player_names: None, - auth: None, + auth_time: Some(now_utc), + auth: Some(format!("{:x}", hasher.finalize())), room: Some(NetplayRoom { room_name: None, password: Some(password), game_name: None, md5: Some(game_hash), protected: None, - port: Some(port), + port: Some(room_port), features: None, buffer_target: None, }), @@ -1200,7 +1160,7 @@ pub fn setup_join_window( }); let weak = join_window.as_weak(); join_window.on_join_session( - move |player_name, game_hash, password, room_url, room_name| { + move |player_name, game_hash, password, room_url, room_port| { let _ = netplay_write_sender.send(None); // close current websocket if any manage_websocket( room_url.to_string(), @@ -1215,7 +1175,7 @@ pub fn setup_join_window( player_name.to_string(), game_hash.to_string(), password.to_string(), - room_name.to_string(), + room_port, fullscreen, weak_app.clone(), weak.clone(), From 380d196ae75c518f86640b777dbad9a119974eed Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 5 Sep 2025 10:54:03 +0200 Subject: [PATCH 0578/1117] cargo update --- Cargo.lock | 687 ++++++++++++++++++++++++++++++++--------------------- Cargo.toml | 2 +- 2 files changed, 417 insertions(+), 272 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4919574..70f16be 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -88,7 +88,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", - "bitflags 2.9.3", + "bitflags 2.9.4", "cc", "cesu8", "jni", @@ -264,9 +264,9 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" +checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" dependencies = [ "async-task", "concurrent-queue", @@ -458,31 +458,11 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.71.1" +version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" +checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.9.3", - "cexpr", - "clang-sys", - "itertools 0.13.0", - "log", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "rustc-hash 2.1.1", - "shlex", - "syn", -] - -[[package]] -name = "bindgen" -version = "0.72.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f72209734318d0b619a5e0f5129918b848c416e122a3c4ce054e03cb87b726f" -dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "cexpr", "clang-sys", "itertools 0.13.0", @@ -498,9 +478,9 @@ dependencies = [ [[package]] name = "bit_field" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" +checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" [[package]] name = "bitflags" @@ -510,9 +490,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.3" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34efbcccd345379ca2868b2b2c9d3782e9cc58ba87bc7d79d5b53d9c9ae6f25d" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" dependencies = [ "serde", ] @@ -643,7 +623,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "log", "polling", "rustix 0.38.44", @@ -657,7 +637,7 @@ version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb9f6e1368bd4621d2c86baa7e37de77a938adf5221e5dd3d6133340101b309e" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "polling", "rustix 1.0.8", "slab", @@ -678,10 +658,11 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.34" +version = "1.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42bc4aea80032b7bf409b0bc7ccad88853858911b7713a8062fdc0623867bedc" +checksum = "590f9024a68a8c40351881787f1934dc11afd69090f5edb6831464694d836ea3" dependencies = [ + "find-msvc-tools", "jobserver", "libc", "shlex", @@ -744,7 +725,7 @@ dependencies = [ "js-sys", "num-traits", "wasm-bindgen", - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -770,9 +751,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.45" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc0e74a703892159f5ae7d3aac52c8e6c392f5ae5f359c70b5881d60aaac318" +checksum = "7eac00902d9d136acd712710d71823fb8ac8004ca445a89e73a41d45aa712931" dependencies = [ "clap_builder", "clap_derive", @@ -780,9 +761,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.44" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8" +checksum = "2ad9bbf750e73b5884fb8a211a9424a1906c1e156724260fdae972f31d70e1d6" dependencies = [ "anstream", "anstyle", @@ -792,9 +773,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.45" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6" +checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" dependencies = [ "heck", "proc-macro2", @@ -974,7 +955,7 @@ version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "core-foundation 0.10.1", "core-graphics-types 0.2.0", "foreign-types", @@ -998,7 +979,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "core-foundation 0.10.1", "libc", ] @@ -1150,9 +1131,9 @@ checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b" [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" dependencies = [ "powerfmt", ] @@ -1229,7 +1210,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.60.2", + "windows-sys 0.61.0", ] [[package]] @@ -1244,7 +1225,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "block2 0.6.1", "libc", "objc2 0.6.2", @@ -1288,7 +1269,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "bytemuck", "drm-ffi", "drm-fourcc", @@ -1495,6 +1476,26 @@ dependencies = [ "log", ] +[[package]] +name = "fax" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab" +dependencies = [ + "fax_derive", +] + +[[package]] +name = "fax_derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "fdeflate" version = "0.3.7" @@ -1506,11 +1507,11 @@ dependencies = [ [[package]] name = "femtovg" -version = "0.14.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf29af13b81d7562ccd57624242b2ed56edc2c83dad25f13bd74d87e7fa8d9" +checksum = "c66a4045686ce22a7e99a1e9ec3b5c86f43cdedf678a699f544f10af286da893" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "bytemuck", "fnv", "glow", @@ -1549,6 +1550,12 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e178e4fba8a2726903f6ba98a6d221e76f9c12c650d5dc0e6afdc50677b49650" + [[package]] name = "flate2" version = "1.1.2" @@ -1762,7 +1769,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce852e998d3ca5e4a97014fb31c940dc5ef344ec7d364984525fd11e8a547e6a" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "drm", "drm-fourcc", "gbm-sys", @@ -1790,12 +1797,12 @@ dependencies = [ [[package]] name = "gethostname" -version = "0.4.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +checksum = "fc257fdb4038301ce4b9cd1b3b51704509692bb3ff716a410cbd07925d9dae55" dependencies = [ - "libc", - "windows-targets 0.48.5", + "rustix 1.0.8", + "windows-targets 0.52.6", ] [[package]] @@ -1821,7 +1828,7 @@ dependencies = [ "js-sys", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasi 0.14.3+wasi-0.2.4", "wasm-bindgen", ] @@ -1876,7 +1883,7 @@ version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "cfg_aliases", "cgl", "dispatch2", @@ -1940,7 +1947,7 @@ dependencies = [ name = "gopher64" version = "1.1.6" dependencies = [ - "bindgen 0.72.0", + "bindgen", "cc", "chrono", "clap", @@ -1966,7 +1973,7 @@ dependencies = [ "sha2", "slint", "slint-build", - "socket2 0.6.0", + "socket2", "spin_sleep", "tokio", "tokio-tungstenite", @@ -2197,7 +2204,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.0", + "socket2", "tokio", "tower-service", "tracing", @@ -2205,9 +2212,9 @@ dependencies = [ [[package]] name = "i-slint-backend-linuxkms" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7245ddc95cd0ae039b8dbb53449eb94110b24cbd47a32082970a25ad31b77f8d" +checksum = "71be087e70819bfbb598303c49d0c6e646c8646ffc6412f79743cf2ab005e04a" dependencies = [ "calloop 0.14.3", "drm", @@ -2224,9 +2231,9 @@ dependencies = [ [[package]] name = "i-slint-backend-selector" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50166eb0f0f63ffa514069cdad5465d1d4c711c57dbd495f16f0a4ee14b82e46" +checksum = "f0b01661ccd53dca69e46a4df72b2a0e4a438b704090bda56aedaeed34ed5f03" dependencies = [ "cfg-if", "i-slint-backend-linuxkms", @@ -2238,9 +2245,9 @@ dependencies = [ [[package]] name = "i-slint-backend-winit" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c3b5697d3fbbc7ae0fcba4592c76f39d13a25fad055064a31855f2234fd82ba" +checksum = "0db496e9bc24b8d86229660ef3be3dfaab9095fd0adaeaf68640d0cb5aeb6a6f" dependencies = [ "cfg-if", "cfg_aliases", @@ -2262,6 +2269,7 @@ dependencies = [ "scoped-tls-hkt", "scopeguard", "softbuffer", + "strum", "vtable", "wasm-bindgen", "web-sys", @@ -2271,9 +2279,9 @@ dependencies = [ [[package]] name = "i-slint-common" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c400c33bd6bc68397adefa1be2abaf77cdd90c216ad88b1be2ebdb0003ea996" +checksum = "7e6843e1be6b40519087c03d07127a71f686f451418d13998dfbe684d3a88793" dependencies = [ "cfg-if", "derive_more", @@ -2284,9 +2292,9 @@ dependencies = [ [[package]] name = "i-slint-compiler" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1eafbcc08babe8bb24967193a7796c0e26170d0a6cdf09236cc2fdb63dded502" +checksum = "fc172dcb37ec9e86b6c53a35c85400e8c03e0337c036859de3b60b5073813412" dependencies = [ "by_address", "codemap", @@ -2314,12 +2322,12 @@ dependencies = [ [[package]] name = "i-slint-core" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc384a0a106e7bc1aaf6fbf06d5a4d0d8e51a4bc5ff5ce36dbe559620aef4533" +checksum = "1cff7e0169ff084b0f779cc9c735378e84289df9868cd0738cde44aaeb5259c3" dependencies = [ "auto_enums", - "bitflags 2.9.3", + "bitflags 2.9.4", "cfg-if", "chrono", "clru", @@ -2358,9 +2366,9 @@ dependencies = [ [[package]] name = "i-slint-core-macros" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81504739c60f11af98f80f287624379514923888ecdf37e0bc43c5dc1cadafa5" +checksum = "f98aaa9b8e6470b0b49510c4602d4fc03895d9f1f101fbaa364a0deb267b4152" dependencies = [ "quote", "serde_json", @@ -2369,9 +2377,9 @@ dependencies = [ [[package]] name = "i-slint-renderer-femtovg" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "754f4a057294c77897b0a4a9795131e2442f494e02feccbcd09bd041270f789a" +checksum = "7c92bb97f1a594d97dc7fcde5647d6f25b49b464c08f793f1745bbf9dfed7281" dependencies = [ "cfg-if", "const-field-offset", @@ -2399,9 +2407,9 @@ dependencies = [ [[package]] name = "i-slint-renderer-skia" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "687126d7e82d447e15bc2666053f7653fa562e11dc6a9799e6dd0186a7927142" +checksum = "79778395aaf83451f931420467c019b6cce648835ee13b99e873922ad4d2f2af" dependencies = [ "bytemuck", "cfg-if", @@ -2428,7 +2436,10 @@ dependencies = [ "softbuffer", "unicode-segmentation", "vtable", - "windows", + "windows 0.58.0", + "windows 0.61.3", + "windows-core 0.58.0", + "windows-core 0.61.2", ] [[package]] @@ -2443,7 +2454,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core", + "windows-core 0.61.2", ] [[package]] @@ -2564,9 +2575,9 @@ dependencies = [ [[package]] name = "image" -version = "0.25.6" +version = "0.25.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" +checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7" dependencies = [ "bytemuck", "byteorder-lite", @@ -2574,8 +2585,9 @@ dependencies = [ "exr", "gif", "image-webp", + "moxcms", "num-traits", - "png", + "png 0.18.0", "qoi", "ravif", "rayon", @@ -2587,9 +2599,9 @@ dependencies = [ [[package]] name = "image-webp" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6970fe7a5300b4b42e62c52efa0187540a5bef546c60edaf554ef595d2e6f0b" +checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" dependencies = [ "byteorder-lite", "quick-error", @@ -2632,7 +2644,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "input-sys", "libc", "log", @@ -2682,7 +2694,7 @@ version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "cfg-if", "libc", ] @@ -2793,17 +2805,11 @@ dependencies = [ "libc", ] -[[package]] -name = "jpeg-decoder" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" - [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738" dependencies = [ "once_cell", "wasm-bindgen", @@ -2815,7 +2821,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "serde", "unicode-segmentation", ] @@ -2883,9 +2889,9 @@ dependencies = [ [[package]] name = "liblzma" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "272b875472a046e39ff7408374a5a050b112d2142211a0f54a295c0bd1c3c757" +checksum = "10bf66f4598dc77ff96677c8e763655494f00ff9c1cf79e2eb5bb07bc31f807d" dependencies = [ "liblzma-sys", ] @@ -2909,9 +2915,9 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libmimalloc-sys" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88cd67e9de251c1781dbe2f641a1a3ad66eaae831b8a2c38fbdc5ddae16d4d" +checksum = "667f4fec20f29dfc6bc7357c582d91796c169ad7e2fce709468aefeb2c099870" dependencies = [ "cc", "libc", @@ -2923,7 +2929,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "libc", "redox_syscall 0.5.17", ] @@ -2940,9 +2946,9 @@ dependencies = [ [[package]] name = "libz-rs-sys" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "172a788537a2221661b480fee8dc5f96c580eb34fa88764d3205dc356c7e4221" +checksum = "840db8cf39d9ec4dd794376f38acc40d0fc65eec2a8f484f7fd375b84602becd" dependencies = [ "zlib-rs", ] @@ -3007,9 +3013,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "loop9" @@ -3022,9 +3028,9 @@ dependencies = [ [[package]] name = "lru" -version = "0.12.5" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +checksum = "86ea4e65087ff52f3862caff188d489f1fab49a0cb09e01b2e3f1a617b10aaed" [[package]] name = "lru-slab" @@ -3075,9 +3081,9 @@ dependencies = [ [[package]] name = "lzma-rust2" -version = "0.6.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26175dd096dfaab9f4fbf577a668842ebc48374d4d06b154bffb49918e242261" +checksum = "f60b8ad6122c05a4d5e23db8eab1ced778e252b3e29c5e96b4a965fc72476277" [[package]] name = "maybe-rayon" @@ -3115,9 +3121,9 @@ dependencies = [ [[package]] name = "mimalloc" -version = "0.1.47" +version = "0.1.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1791cbe101e95af5764f06f20f6760521f7158f69dbf9d6baf941ee1bf6bc40" +checksum = "e1ee66a4b64c74f4ef288bcbb9192ad9c3feaad75193129ac8509af543894fd8" dependencies = [ "libmimalloc-sys", ] @@ -3155,6 +3161,16 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "moxcms" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd32fa8935aeadb8a8a6b6b351e40225570a37c43de67690383d87ef170cd08" +dependencies = [ + "num-traits", + "pxfm", +] + [[package]] name = "muda" version = "0.17.1" @@ -3169,7 +3185,7 @@ dependencies = [ "objc2-core-foundation", "objc2-foundation 0.3.1", "once_cell", - "png", + "png 0.17.16", "thiserror 2.0.16", "windows-sys 0.60.2", ] @@ -3180,7 +3196,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "jni-sys", "log", "ndk-sys", @@ -3216,7 +3232,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "cfg-if", "cfg_aliases", "libc", @@ -3355,7 +3371,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -3371,7 +3387,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "block2 0.6.1", "libc", "objc2 0.6.2", @@ -3390,7 +3406,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -3403,7 +3419,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17614fdcd9b411e6ff1117dfb1d0150f908ba83a7df81b1f118005fe0a8ea15d" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "objc2 0.6.2", "objc2-foundation 0.3.1", ] @@ -3425,7 +3441,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -3437,7 +3453,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "291fbbf7d29287518e8686417cf7239c74700fd4b607623140a7d4a3c834329d" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "objc2 0.6.2", "objc2-foundation 0.3.1", ] @@ -3448,7 +3464,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "dispatch2", "objc2 0.6.2", ] @@ -3459,7 +3475,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "dispatch2", "objc2 0.6.2", "objc2-core-foundation", @@ -3512,7 +3528,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "block2 0.5.1", "dispatch", "libc", @@ -3525,7 +3541,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "objc2 0.6.2", "objc2-core-foundation", ] @@ -3536,7 +3552,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "objc2 0.6.2", "objc2-core-foundation", ] @@ -3559,7 +3575,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -3571,7 +3587,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f246c183239540aab1782457b35ab2040d4259175bd1d0c58e46ada7b47a874" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "objc2 0.6.2", "objc2-foundation 0.3.1", ] @@ -3582,7 +3598,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -3595,7 +3611,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90ffb6a0cd5f182dc964334388560b12a57f7b74b3e2dec5e2722aa2dfb2ccd5" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "objc2 0.6.2", "objc2-core-foundation", "objc2-foundation 0.3.1", @@ -3618,7 +3634,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "block2 0.5.1", "objc2 0.5.2", "objc2-cloud-kit 0.2.2", @@ -3650,7 +3666,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -3858,6 +3874,19 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "png" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" +dependencies = [ + "bitflags 2.9.4", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + [[package]] name = "polib" version = "0.2.0" @@ -3911,9 +3940,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" dependencies = [ "zerovec", ] @@ -3955,7 +3984,7 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ - "toml_edit", + "toml_edit 0.22.27", ] [[package]] @@ -3986,6 +4015,15 @@ dependencies = [ "syn", ] +[[package]] +name = "pxfm" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "376f733579ac4d3b9fbf0afca99bf8f6b698d541118affca554d0b86f73c2470" +dependencies = [ + "num-traits", +] + [[package]] name = "qoi" version = "0.4.1" @@ -4027,9 +4065,9 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", "cfg_aliases", @@ -4038,7 +4076,7 @@ dependencies = [ "quinn-udp", "rustc-hash 2.1.1", "rustls", - "socket2 0.5.10", + "socket2", "thiserror 2.0.16", "tokio", "tracing", @@ -4047,9 +4085,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.12" +version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ "bytes", "getrandom 0.3.3", @@ -4068,16 +4106,16 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.13" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.5.10", + "socket2", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -4206,11 +4244,11 @@ dependencies = [ [[package]] name = "raw-cpuid" -version = "11.5.0" +version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" +checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", ] [[package]] @@ -4266,7 +4304,7 @@ version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", ] [[package]] @@ -4282,9 +4320,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.1" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" dependencies = [ "aho-corasick", "memchr", @@ -4294,9 +4332,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" dependencies = [ "aho-corasick", "memchr", @@ -4305,9 +4343,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] name = "reqwest" @@ -4471,7 +4509,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "errno", "libc", "linux-raw-sys 0.4.15", @@ -4484,7 +4522,7 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "errno", "libc", "linux-raw-sys 0.9.4", @@ -4538,7 +4576,7 @@ version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "bytemuck", "core_maths", "log", @@ -4598,15 +4636,15 @@ dependencies = [ [[package]] name = "sdl3-src" -version = "3.2.20" +version = "3.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcf3cbc4d49f7ab594e9f5915fd7a051a327544077a8f1df83411f063df4be08" +checksum = "8447739fe8a492670e2f8c60bf821bb0f4260bd05019e4333ed483602a5cfe75" [[package]] name = "sdl3-sys" -version = "0.5.4+SDL3-3.2.20" +version = "0.5.5+SDL3-3.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c4f7f348dea346f67f38bc1392bf1edd9250d4c586479778e849f6ee61af2d8" +checksum = "488b4c68d9c0a450087a8b7c9dc6921483354127b0e60033d2d9b8f6a281331b" dependencies = [ "cmake", "rpkg-config", @@ -4712,9 +4750,9 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.17.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98644326f9145490e4c194dd775a9a2ed7e84f8254415eb709a7924f52fcd7a1" +checksum = "b8f3cc2b52a3f98e75e6a1884e40fc986bf5f1966274aec869a4e6a0a5f72292" dependencies = [ "byteorder", "crc32fast", @@ -4792,15 +4830,16 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "skia-bindings" -version = "0.86.1" +version = "0.87.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bf215f640b53293844d441e93448b437ca4937595f60e3317fbb03d7ac6783" +checksum = "704242769235d2ffe66a2a0a3002661262fc4af08d32807c362d7b0160ee703c" dependencies = [ - "bindgen 0.71.1", + "bindgen", "cc", "flate2", "heck", "lazy_static", + "pkg-config", "regex", "serde_json", "tar", @@ -4809,14 +4848,14 @@ dependencies = [ [[package]] name = "skia-safe" -version = "0.86.1" +version = "0.87.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e372258f52414e04de007326fa497581617c9fa872a3225dca5e42212723c426" +checksum = "0f7d94f3e7537c71ad4cf132eb26e3be8c8a886ed3649c4525c089041fc312b2" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "lazy_static", "skia-bindings", - "windows", + "windows 0.61.3", ] [[package]] @@ -4827,9 +4866,9 @@ checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "slint" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c99512aff435eb85fc719bf73aff5c4a13f3d202843c326a2f50eb0377956f8" +checksum = "fc9f9e6c470104042c5511dd813592861b282ab79a11bc696322ebd736b425b9" dependencies = [ "const-field-offset", "i-slint-backend-selector", @@ -4846,21 +4885,21 @@ dependencies = [ [[package]] name = "slint-build" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f58adfef3f956cc3c124cb19154cf29b510badf2a06b3a3521c6fdb97a47a4" +checksum = "2d1852dff8f8174fafde1435ba083bfd924ca0a0a6b072d95e282336a72eb9bd" dependencies = [ "derive_more", "i-slint-compiler", "spin_on", - "toml_edit", + "toml_edit 0.23.4", ] [[package]] name = "slint-macros" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e4f639260309e13e8f8dc40ec905d57a15dc512d8d50c52ad650088cc7e1e2" +checksum = "ea8272fcbd53448e8fd00f66b1f34fe9aa355e67a2e5b51249757d7c1083df72" dependencies = [ "i-slint-compiler", "proc-macro2", @@ -4889,7 +4928,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "calloop 0.13.0", "calloop-wayland-source", "cursor-icon", @@ -4938,16 +4977,6 @@ dependencies = [ "serde", ] -[[package]] -name = "socket2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "socket2" version = "0.6.0" @@ -5229,20 +5258,23 @@ dependencies = [ [[package]] name = "tiff" -version = "0.9.1" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" +checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" dependencies = [ + "fax", "flate2", - "jpeg-decoder", + "half", + "quick-error", "weezl", + "zune-jpeg", ] [[package]] name = "time" -version = "0.3.41" +version = "0.3.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "83bde6f1ec10e72d583d91623c939f623002284ef622b87de38cfd546cbf2031" dependencies = [ "deranged", "num-conv", @@ -5253,9 +5285,9 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "tiny-skia" @@ -5268,7 +5300,7 @@ dependencies = [ "bytemuck", "cfg-if", "log", - "png", + "png 0.17.16", "tiny-skia-path", ] @@ -5335,7 +5367,7 @@ dependencies = [ "pin-project-lite", "signal-hook-registry", "slab", - "socket2 0.6.0", + "socket2", "tokio-macros", "tracing", "windows-sys 0.59.0", @@ -5395,8 +5427,8 @@ checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned", - "toml_datetime", - "toml_edit", + "toml_datetime 0.6.11", + "toml_edit 0.22.27", ] [[package]] @@ -5408,6 +5440,15 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_datetime" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" +dependencies = [ + "serde", +] + [[package]] name = "toml_edit" version = "0.22.27" @@ -5417,17 +5458,45 @@ dependencies = [ "indexmap", "serde", "serde_spanned", - "toml_datetime", + "toml_datetime 0.6.11", "toml_write", "winnow", ] +[[package]] +name = "toml_edit" +version = "0.23.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7211ff1b8f0d3adae1663b7da9ffe396eabe1ca25f0b0bee42b0da29a9ddce93" +dependencies = [ + "indexmap", + "toml_datetime 0.7.0", + "toml_parser", + "toml_writer", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b551886f449aa90d4fe2bdaa9f4a2577ad2dde302c61ecf262d80b116db95c10" +dependencies = [ + "winnow", +] + [[package]] name = "toml_write" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" +[[package]] +name = "toml_writer" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64" + [[package]] name = "tower" version = "0.5.2" @@ -5449,7 +5518,7 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "bytes", "futures-util", "http", @@ -5790,30 +5859,31 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.2+wasi-0.2.4" +version = "0.14.3+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "6a51ae83037bdd272a9e28ce236db8c07016dd0d50c27038b3f407533c030c95" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb" dependencies = [ "bumpalo", "log", @@ -5825,9 +5895,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "0ca85039a9b469b38336411d6d6ced91f3fc87109a2a27b0c197663f5144dffe" dependencies = [ "cfg-if", "js-sys", @@ -5838,9 +5908,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5848,9 +5918,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" dependencies = [ "proc-macro2", "quote", @@ -5861,9 +5931,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1" dependencies = [ "unicode-ident", ] @@ -5888,7 +5958,7 @@ version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "rustix 1.0.8", "wayland-backend", "wayland-scanner", @@ -5900,7 +5970,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "cursor-icon", "wayland-backend", ] @@ -5922,7 +5992,7 @@ version = "0.32.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "wayland-backend", "wayland-client", "wayland-scanner", @@ -5934,7 +6004,7 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "wayland-backend", "wayland-client", "wayland-protocols", @@ -5947,7 +6017,7 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "wayland-backend", "wayland-client", "wayland-protocols", @@ -5979,9 +6049,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "77e4b637749ff0d92b8fad63aa1f7cff3cbe125fd49c175cd6345e7272638b12" dependencies = [ "js-sys", "wasm-bindgen", @@ -6043,6 +6113,16 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +dependencies = [ + "windows-core 0.58.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows" version = "0.61.3" @@ -6050,9 +6130,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ "windows-collections", - "windows-core", + "windows-core 0.61.2", "windows-future", - "windows-link", + "windows-link 0.1.3", "windows-numerics", ] @@ -6062,7 +6142,20 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" dependencies = [ - "windows-core", + "windows-core 0.61.2", +] + +[[package]] +name = "windows-core" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement 0.58.0", + "windows-interface 0.58.0", + "windows-result 0.2.0", + "windows-strings 0.1.0", + "windows-targets 0.52.6", ] [[package]] @@ -6071,11 +6164,11 @@ version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-implement", - "windows-interface", - "windows-link", - "windows-result", - "windows-strings", + "windows-implement 0.60.0", + "windows-interface 0.59.1", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", ] [[package]] @@ -6084,11 +6177,22 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ - "windows-core", - "windows-link", + "windows-core 0.61.2", + "windows-link 0.1.3", "windows-threading", ] +[[package]] +name = "windows-implement" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "windows-implement" version = "0.60.0" @@ -6100,6 +6204,17 @@ dependencies = [ "syn", ] +[[package]] +name = "windows-interface" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "windows-interface" version = "0.59.1" @@ -6117,14 +6232,29 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +[[package]] +name = "windows-link" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" + [[package]] name = "windows-numerics" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ - "windows-core", - "windows-link", + "windows-core 0.61.2", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -6133,7 +6263,17 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result 0.2.0", + "windows-targets 0.52.6", ] [[package]] @@ -6142,7 +6282,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -6190,6 +6330,15 @@ dependencies = [ "windows-targets 0.53.3", ] +[[package]] +name = "windows-sys" +version = "0.61.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa" +dependencies = [ + "windows-link 0.2.0", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -6242,7 +6391,7 @@ version = "0.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" dependencies = [ - "windows-link", + "windows-link 0.1.3", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", @@ -6259,7 +6408,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" dependencies = [ - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -6451,7 +6600,7 @@ dependencies = [ "ahash", "android-activity", "atomic-waker", - "bitflags 2.9.3", + "bitflags 2.9.4", "block2 0.5.1", "bytemuck", "calloop 0.13.0", @@ -6523,13 +6672,10 @@ dependencies = [ ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.9.3", -] +checksum = "052283831dbae3d879dc7f51f3d92703a316ca49f91540417d38591826127814" [[package]] name = "writeable" @@ -6560,24 +6706,24 @@ dependencies = [ [[package]] name = "x11rb" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" +checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" dependencies = [ "as-raw-xcb-connection", "gethostname", "libc", "libloading", "once_cell", - "rustix 0.38.44", + "rustix 1.0.8", "x11rb-protocol", ] [[package]] name = "x11rb-protocol" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" +checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" [[package]] name = "xattr" @@ -6612,7 +6758,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "dlib", "log", "once_cell", @@ -6663,9 +6809,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.9.0" +version = "5.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb4f9a464286d42851d18a605f7193b8febaf5b0919d71c6399b7b26e5b0aad" +checksum = "67a073be99ace1adc48af593701c8015cd9817df372e14a1a6b0ee8f8bf043be" dependencies = [ "async-broadcast", "async-executor", @@ -6688,7 +6834,7 @@ dependencies = [ "tokio", "tracing", "uds_windows", - "windows-sys 0.59.0", + "windows-sys 0.60.2", "winnow", "zbus_macros", "zbus_names", @@ -6697,9 +6843,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.9.0" +version = "5.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef9859f68ee0c4ee2e8cde84737c78e3f4c54f946f2a38645d0d4c7a95327659" +checksum = "0e80cd713a45a49859dcb648053f63265f4f2851b6420d47a958e5697c68b131" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6818,9 +6964,9 @@ dependencies = [ [[package]] name = "zip" -version = "4.5.0" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835eb39822904d39cb19465de1159e05d371973f0c6df3a365ad50565ddc8b9" +checksum = "caa8cd6af31c3b31c6631b8f483848b91589021b28fffe50adada48d4f4d2ed1" dependencies = [ "aes", "arbitrary", @@ -6845,9 +6991,9 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626bd9fa9734751fc50d6060752170984d7053f5a39061f524cda68023d4db8a" +checksum = "2f06ae92f42f5e5c42443fd094f245eb656abf56dd7cce9b8b263236565e00f2" [[package]] name = "zopfli" @@ -6881,9 +7027,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.15+zstd.1.5.7" +version = "2.0.16+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" dependencies = [ "cc", "pkg-config", @@ -6915,9 +7061,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.6.0" +version = "5.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91b3680bb339216abd84714172b5138a4edac677e641ef17e1d8cb1b3ca6e6f" +checksum = "999dd3be73c52b1fccd109a4a81e4fcd20fab1d3599c8121b38d04e1419498db" dependencies = [ "endi", "enumflags2", @@ -6930,9 +7076,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.6.0" +version = "5.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a8c68501be459a8dbfffbe5d792acdd23b4959940fc87785fb013b32edbc208" +checksum = "6643fd0b26a46d226bd90d3f07c1b5321fe9bb7f04673cb37ac6d6883885b68e" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6943,14 +7089,13 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "3.2.0" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34" +checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599" dependencies = [ "proc-macro2", "quote", "serde", - "static_assertions", "syn", "winnow", ] diff --git a/Cargo.toml b/Cargo.toml index 8001468..68b2853 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ rust-version = "1.89" dirs = "6.0" zip = "4.3" governor = "0.10" -sevenz-rust2 = { version = "0.17", default-features = false } +sevenz-rust2 = { version = "0.18", default-features = false } chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" From 569b26a06767ae1189f1941a6457248be3d2d914 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 10 Sep 2025 13:16:57 +0200 Subject: [PATCH 0579/1117] panic on attempted use of mi repeat mode --- src/device/mi.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/device/mi.rs b/src/device/mi.rs index 82f1121..9474f3e 100644 --- a/src/device/mi.rs +++ b/src/device/mi.rs @@ -81,7 +81,8 @@ fn update_init_mode(device: &mut device::Device, w: u32) { device.mi.regs[MI_INIT_MODE_REG as usize] &= !MI_INIT_MODE } if w & MI_SET_INIT != 0 { - device.mi.regs[MI_INIT_MODE_REG as usize] |= MI_INIT_MODE + panic!("MI_SET_INIT not implemented") + //device.mi.regs[MI_INIT_MODE_REG as usize] |= MI_INIT_MODE } if w & MI_CLR_EBUS != 0 { device.mi.regs[MI_INIT_MODE_REG as usize] &= !MI_EBUS_MODE From 374b01dccf9f819ed960e853882b2eac97d44d34 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 12 Sep 2025 13:58:21 +0200 Subject: [PATCH 0580/1117] cargo update --- Cargo.lock | 250 +++++++++++++++++++++++++++-------------------------- Cargo.toml | 2 +- 2 files changed, 130 insertions(+), 122 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 70f16be..d15f7e8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -108,12 +108,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -289,7 +283,7 @@ dependencies = [ "futures-lite", "parking", "polling", - "rustix 1.0.8", + "rustix 1.1.2", "slab", "windows-sys 0.60.2", ] @@ -320,7 +314,7 @@ dependencies = [ "cfg-if", "event-listener", "futures-lite", - "rustix 1.0.8", + "rustix 1.1.2", ] [[package]] @@ -346,7 +340,7 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 1.0.8", + "rustix 1.1.2", "signal-hook-registry", "slab", "windows-sys 0.60.2", @@ -639,7 +633,7 @@ checksum = "cb9f6e1368bd4621d2c86baa7e37de77a938adf5221e5dd3d6133340101b309e" dependencies = [ "bitflags 2.9.4", "polling", - "rustix 1.0.8", + "rustix 1.1.2", "slab", "tracing", ] @@ -658,9 +652,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.35" +version = "1.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "590f9024a68a8c40351881787f1934dc11afd69090f5edb6831464694d836ea3" +checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44" dependencies = [ "find-msvc-tools", "jobserver", @@ -716,16 +710,15 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", - "windows-link 0.1.3", + "windows-link 0.2.0", ] [[package]] @@ -1020,6 +1013,21 @@ dependencies = [ "libc", ] +[[package]] +name = "crc" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + [[package]] name = "crc32fast" version = "1.5.0" @@ -1399,12 +1407,12 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.0", ] [[package]] @@ -1507,9 +1515,9 @@ dependencies = [ [[package]] name = "femtovg" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66a4045686ce22a7e99a1e9ec3b5c86f43cdedf678a699f544f10af286da893" +checksum = "deda049f5a6dc3152b23263f72c575847f6aa0ace0045299d151f36af7aca136" dependencies = [ "bitflags 2.9.4", "bytemuck", @@ -1552,9 +1560,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e178e4fba8a2726903f6ba98a6d221e76f9c12c650d5dc0e6afdc50677b49650" +checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d" [[package]] name = "flate2" @@ -1801,7 +1809,7 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc257fdb4038301ce4b9cd1b3b51704509692bb3ff716a410cbd07925d9dae55" dependencies = [ - "rustix 1.0.8", + "rustix 1.1.2", "windows-targets 0.52.6", ] @@ -1828,7 +1836,7 @@ dependencies = [ "js-sys", "libc", "r-efi", - "wasi 0.14.3+wasi-0.2.4", + "wasi 0.14.5+wasi-0.2.4", "wasm-bindgen", ] @@ -2212,9 +2220,9 @@ dependencies = [ [[package]] name = "i-slint-backend-linuxkms" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71be087e70819bfbb598303c49d0c6e646c8646ffc6412f79743cf2ab005e04a" +checksum = "efe95e5c81a08027a03535d69aa025740275b11fb613abf555441ce074001119" dependencies = [ "calloop 0.14.3", "drm", @@ -2231,9 +2239,9 @@ dependencies = [ [[package]] name = "i-slint-backend-selector" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0b01661ccd53dca69e46a4df72b2a0e4a438b704090bda56aedaeed34ed5f03" +checksum = "1b5c1525cd7a659b609600a7df79bb7d90092730d5c4de4f378f39ab9a023993" dependencies = [ "cfg-if", "i-slint-backend-linuxkms", @@ -2245,9 +2253,9 @@ dependencies = [ [[package]] name = "i-slint-backend-winit" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0db496e9bc24b8d86229660ef3be3dfaab9095fd0adaeaf68640d0cb5aeb6a6f" +checksum = "ba2a1f40bf70d4dfc5e7009673da72730ec32b4af680654975c6b39908bcd739" dependencies = [ "cfg-if", "cfg_aliases", @@ -2273,15 +2281,16 @@ dependencies = [ "vtable", "wasm-bindgen", "web-sys", + "windows 0.61.3", "winit", "zbus", ] [[package]] name = "i-slint-common" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e6843e1be6b40519087c03d07127a71f686f451418d13998dfbe684d3a88793" +checksum = "40862447fc6e177ab924f43fa2bcab4de3a10fe41596a2a2cb279c911f0ad5e9" dependencies = [ "cfg-if", "derive_more", @@ -2292,9 +2301,9 @@ dependencies = [ [[package]] name = "i-slint-compiler" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc172dcb37ec9e86b6c53a35c85400e8c03e0337c036859de3b60b5073813412" +checksum = "8e7e35548ed4f437f7fcb7c2bb11bbd0f45c8271d1900b47b688e4eed89482d0" dependencies = [ "by_address", "codemap", @@ -2322,9 +2331,9 @@ dependencies = [ [[package]] name = "i-slint-core" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cff7e0169ff084b0f779cc9c735378e84289df9868cd0738cde44aaeb5259c3" +checksum = "68d10fc4c25a22e757784acf7da950223762477329f01d73e1c9cfa0749bf51a" dependencies = [ "auto_enums", "bitflags 2.9.4", @@ -2366,9 +2375,9 @@ dependencies = [ [[package]] name = "i-slint-core-macros" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98aaa9b8e6470b0b49510c4602d4fc03895d9f1f101fbaa364a0deb267b4152" +checksum = "583ffd7589dc4e273cf25058b8f41fc8baeee40f28660b4539ee60f7ffc06c6b" dependencies = [ "quote", "serde_json", @@ -2377,9 +2386,9 @@ dependencies = [ [[package]] name = "i-slint-renderer-femtovg" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c92bb97f1a594d97dc7fcde5647d6f25b49b464c08f793f1745bbf9dfed7281" +checksum = "ab4ce7ca8b5316585f3db1ce902318c93980b09ab14aafc30846cad36da67acd" dependencies = [ "cfg-if", "const-field-offset", @@ -2407,9 +2416,9 @@ dependencies = [ [[package]] name = "i-slint-renderer-skia" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79778395aaf83451f931420467c019b6cce648835ee13b99e873922ad4d2f2af" +checksum = "0848e46481abf3155d3aca7e4a9b07be5a5d55716cd90d891293e8698a07b679" dependencies = [ "bytemuck", "cfg-if", @@ -2621,9 +2630,9 @@ checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" [[package]] name = "indexmap" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" +checksum = "206a8042aec68fa4a62e8d3f7aa4ceb508177d9324faf261e1959e495b7a1921" dependencies = [ "equivalent", "hashbrown 0.15.5", @@ -2851,9 +2860,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "lebe" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" +checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" [[package]] name = "libbz2-rs-sys" @@ -2887,26 +2896,6 @@ dependencies = [ "windows-targets 0.53.3", ] -[[package]] -name = "liblzma" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10bf66f4598dc77ff96677c8e763655494f00ff9c1cf79e2eb5bb07bc31f807d" -dependencies = [ - "liblzma-sys", -] - -[[package]] -name = "liblzma-sys" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b9596486f6d60c3bbe644c0e1be1aa6ccc472ad630fe8927b456973d7cb736" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - [[package]] name = "libm" version = "0.2.15" @@ -2991,9 +2980,9 @@ checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7" [[package]] name = "linux-raw-sys" -version = "0.9.4" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" @@ -3028,9 +3017,9 @@ dependencies = [ [[package]] name = "lru" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86ea4e65087ff52f3862caff188d489f1fab49a0cb09e01b2e3f1a617b10aaed" +checksum = "bfe949189f46fabb938b3a9a0be30fdd93fd8a09260da863399a8cf3db756ec8" [[package]] name = "lru-slab" @@ -3085,6 +3074,16 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f60b8ad6122c05a4d5e23db8eab1ced778e252b3e29c5e96b4a965fc72476277" +[[package]] +name = "lzma-rust2" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c60a23ffb90d527e23192f1246b14746e2f7f071cb84476dd879071696c18a4a" +dependencies = [ + "crc", + "sha2", +] + [[package]] name = "maybe-rayon" version = "0.1.1" @@ -3906,7 +3905,7 @@ dependencies = [ "concurrent-queue", "hermit-abi 0.5.2", "pin-project-lite", - "rustix 1.0.8", + "rustix 1.1.2", "windows-sys 0.60.2", ] @@ -4017,9 +4016,9 @@ dependencies = [ [[package]] name = "pxfm" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "376f733579ac4d3b9fbf0afca99bf8f6b698d541118affca554d0b86f73c2470" +checksum = "f55f4fedc84ed39cb7a489322318976425e42a147e2be79d8f878e2884f94e84" dependencies = [ "num-traits", ] @@ -4518,15 +4517,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.8" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ "bitflags 2.9.4", "errno", "libc", - "linux-raw-sys 0.9.4", - "windows-sys 0.60.2", + "linux-raw-sys 0.11.0", + "windows-sys 0.61.0", ] [[package]] @@ -4555,9 +4554,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.4" +version = "0.103.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" +checksum = "b5a37813727b78798e53c2bec3f5e8fe12a6d6f8389bf9ca7802add4c9905ad8" dependencies = [ "ring", "rustls-pki-types", @@ -4757,7 +4756,7 @@ dependencies = [ "byteorder", "crc32fast", "js-sys", - "lzma-rust2", + "lzma-rust2 0.10.2", "wasm-bindgen", ] @@ -4866,9 +4865,9 @@ checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "slint" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc9f9e6c470104042c5511dd813592861b282ab79a11bc696322ebd736b425b9" +checksum = "f467a64a49620e41807016dc1d519ba0ebb9d1322f734853059f93b8c3f3d2bd" dependencies = [ "const-field-offset", "i-slint-backend-selector", @@ -4885,9 +4884,9 @@ dependencies = [ [[package]] name = "slint-build" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d1852dff8f8174fafde1435ba083bfd924ca0a0a6b072d95e282336a72eb9bd" +checksum = "11ea77b3786ae4e7549f924232a9d1ce427a320729334643a3ec1a76702d00d8" dependencies = [ "derive_more", "i-slint-compiler", @@ -4897,9 +4896,9 @@ dependencies = [ [[package]] name = "slint-macros" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea8272fcbd53448e8fd00f66b1f34fe9aa355e67a2e5b51249757d7c1083df72" +checksum = "e11f55a603d8bb037f0831d4f4e91a560cfe93d93ddf2f992aa375b620f4bca3" dependencies = [ "i-slint-compiler", "proc-macro2", @@ -5038,11 +5037,11 @@ dependencies = [ [[package]] name = "spin_sleep" -version = "1.3.2" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14ac0e4b54d028c2000a13895bcd84cd02a1d63c4f78e08e4ec5ec8f53efd4b9" +checksum = "9c07347b7c0301b9adba4350bdcf09c039d0e7160922050db0439b3c6723c8ab" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.0", ] [[package]] @@ -5190,15 +5189,15 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" -version = "3.21.0" +version = "3.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e" +checksum = "84fa4d11fadde498443cca10fd3ac23c951f0dc59e080e9f4b93d4df4e4eea53" dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", - "rustix 1.0.8", - "windows-sys 0.60.2", + "rustix 1.1.2", + "windows-sys 0.61.0", ] [[package]] @@ -5671,9 +5670,9 @@ checksum = "ce61d488bcdc9bc8b5d1772c404828b17fc481c0a582b5581e95fb233aef503e" [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" [[package]] name = "unicode-linebreak" @@ -5859,9 +5858,18 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.3+wasi-0.2.4" +version = "0.14.5+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a51ae83037bdd272a9e28ce236db8c07016dd0d50c27038b3f407533c030c95" +checksum = "a4494f6290a82f5fe584817a676a34b9d6763e8d9d18204009fb31dceca98fd4" +dependencies = [ + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.0+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03fa2761397e5bd52002cd7e73110c71af2109aca4e521a9f40473fe685b0a24" dependencies = [ "wit-bindgen", ] @@ -5946,7 +5954,7 @@ checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" dependencies = [ "cc", "downcast-rs", - "rustix 1.0.8", + "rustix 1.1.2", "scoped-tls", "smallvec", "wayland-sys", @@ -5959,7 +5967,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" dependencies = [ "bitflags 2.9.4", - "rustix 1.0.8", + "rustix 1.1.2", "wayland-backend", "wayland-scanner", ] @@ -5981,7 +5989,7 @@ version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "447ccc440a881271b19e9989f75726d60faa09b95b0200a9b7eb5cc47c3eeb29" dependencies = [ - "rustix 1.0.8", + "rustix 1.1.2", "wayland-client", "xcursor", ] @@ -6100,11 +6108,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.0", ] [[package]] @@ -6673,9 +6681,9 @@ dependencies = [ [[package]] name = "wit-bindgen" -version = "0.45.0" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052283831dbae3d879dc7f51f3d92703a316ca49f91540417d38591826127814" +checksum = "5c573471f125075647d03df72e026074b7203790d41351cd6edc96f46bcccd36" [[package]] name = "writeable" @@ -6715,7 +6723,7 @@ dependencies = [ "libc", "libloading", "once_cell", - "rustix 1.0.8", + "rustix 1.1.2", "x11rb-protocol", ] @@ -6732,7 +6740,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af3a19837351dc82ba89f8a125e22a3c475f05aba604acc023d62b2739ae2909" dependencies = [ "libc", - "rustix 1.0.8", + "rustix 1.1.2", ] [[package]] @@ -6809,9 +6817,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.10.0" +version = "5.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a073be99ace1adc48af593701c8015cd9817df372e14a1a6b0ee8f8bf043be" +checksum = "2d07e46d035fb8e375b2ce63ba4e4ff90a7f73cf2ffb0138b29e1158d2eaadf7" dependencies = [ "async-broadcast", "async-executor", @@ -6843,9 +6851,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.10.0" +version = "5.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e80cd713a45a49859dcb648053f63265f4f2851b6420d47a958e5697c68b131" +checksum = "57e797a9c847ed3ccc5b6254e8bcce056494b375b511b3d6edcec0aeb4defaca" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6870,18 +6878,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", @@ -6964,9 +6972,9 @@ dependencies = [ [[package]] name = "zip" -version = "4.6.1" +version = "5.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caa8cd6af31c3b31c6631b8f483848b91589021b28fffe50adada48d4f4d2ed1" +checksum = "2f852905151ac8d4d06fdca66520a661c09730a74c6d4e2b0f27b436b382e532" dependencies = [ "aes", "arbitrary", @@ -6978,7 +6986,7 @@ dependencies = [ "getrandom 0.3.3", "hmac", "indexmap", - "liblzma", + "lzma-rust2 0.13.0", "memchr", "pbkdf2", "ppmd-rust", @@ -7052,9 +7060,9 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.4.20" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1f7e205ce79eb2da3cd71c5f55f3589785cb7c79f6a03d1c8d1491bda5d089" +checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" dependencies = [ "zune-core", ] diff --git a/Cargo.toml b/Cargo.toml index 68b2853..bb11ff0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ rust-version = "1.89" [dependencies] dirs = "6.0" -zip = "4.3" +zip = "5.1" governor = "0.10" sevenz-rust2 = { version = "0.18", default-features = false } chrono = "0.4" From f6c7e3d3c0f7663a92dc248e15fcf68c07b24ba9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 12 Sep 2025 14:16:46 +0200 Subject: [PATCH 0581/1117] use wgpu for gui --- Cargo.lock | 652 +++++++++++++++++++++++++++++++++-------------------- Cargo.toml | 2 +- 2 files changed, 412 insertions(+), 242 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d15f7e8..0cb9add 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -211,6 +211,15 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" +[[package]] +name = "ash" +version = "0.38.0+1.3.281" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" +dependencies = [ + "libloading", +] + [[package]] name = "ashpd" version = "0.11.0" @@ -470,6 +479,21 @@ dependencies = [ "syn", ] +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + [[package]] name = "bit_field" version = "0.10.3" @@ -497,6 +521,12 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + [[package]] name = "block-buffer" version = "0.10.4" @@ -625,26 +655,13 @@ dependencies = [ "thiserror 1.0.69", ] -[[package]] -name = "calloop" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb9f6e1368bd4621d2c86baa7e37de77a938adf5221e5dd3d6133340101b309e" -dependencies = [ - "bitflags 2.9.4", - "polling", - "rustix 1.1.2", - "slab", - "tracing", -] - [[package]] name = "calloop-wayland-source" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" dependencies = [ - "calloop 0.13.0", + "calloop", "rustix 0.38.44", "wayland-backend", "wayland-client", @@ -831,6 +848,17 @@ dependencies = [ "termcolor", ] +[[package]] +name = "codespan-reporting" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" +dependencies = [ + "serde", + "termcolor", + "unicode-width", +] + [[package]] name = "color_quant" version = "1.1.0" @@ -1259,6 +1287,15 @@ dependencies = [ "libloading", ] +[[package]] +name = "document-features" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" +dependencies = [ + "litrs", +] + [[package]] name = "downcast-rs" version = "1.2.1" @@ -1271,46 +1308,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" -[[package]] -name = "drm" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" -dependencies = [ - "bitflags 2.9.4", - "bytemuck", - "drm-ffi", - "drm-fourcc", - "libc", - "rustix 0.38.44", -] - -[[package]] -name = "drm-ffi" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e41459d99a9b529845f6d2c909eb9adf3b6d2f82635ae40be8de0601726e8b" -dependencies = [ - "drm-sys", - "rustix 0.38.44", -] - -[[package]] -name = "drm-fourcc" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" - -[[package]] -name = "drm-sys" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bafb66c8dbc944d69e15cfcc661df7e703beffbaec8bd63151368b06c5f9858c" -dependencies = [ - "libc", - "linux-raw-sys 0.6.5", -] - [[package]] name = "dwrote" version = "0.11.4" @@ -1534,6 +1531,7 @@ dependencies = [ "unicode-segmentation", "wasm-bindgen", "web-sys", + "wgpu", ] [[package]] @@ -1771,28 +1769,6 @@ dependencies = [ "slab", ] -[[package]] -name = "gbm" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce852e998d3ca5e4a97014fb31c940dc5ef344ec7d364984525fd11e8a547e6a" -dependencies = [ - "bitflags 2.9.4", - "drm", - "drm-fourcc", - "gbm-sys", - "libc", -] - -[[package]] -name = "gbm-sys" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c13a5f2acc785d8fb6bf6b7ab6bfb0ef5dad4f4d97e8e70bb8e470722312f76f" -dependencies = [ - "libc", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -2012,6 +1988,57 @@ dependencies = [ "web-time", ] +[[package]] +name = "gpu-alloc" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" +dependencies = [ + "bitflags 2.9.4", + "gpu-alloc-types", +] + +[[package]] +name = "gpu-alloc-types" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" +dependencies = [ + "bitflags 2.9.4", +] + +[[package]] +name = "gpu-allocator" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" +dependencies = [ + "log", + "presser", + "thiserror 1.0.69", + "windows 0.58.0", +] + +[[package]] +name = "gpu-descriptor" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" +dependencies = [ + "bitflags 2.9.4", + "gpu-descriptor-types", + "hashbrown 0.15.5", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" +dependencies = [ + "bitflags 2.9.4", +] + [[package]] name = "h2" version = "0.4.12" @@ -2039,6 +2066,7 @@ checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" dependencies = [ "cfg-if", "crunchy", + "num-traits", ] [[package]] @@ -2088,12 +2116,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - [[package]] name = "hermit-abi" version = "0.5.2" @@ -2106,6 +2128,12 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hexf-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" + [[package]] name = "hmac" version = "0.12.1" @@ -2218,25 +2246,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "i-slint-backend-linuxkms" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efe95e5c81a08027a03535d69aa025740275b11fb613abf555441ce074001119" -dependencies = [ - "calloop 0.14.3", - "drm", - "gbm", - "glutin", - "i-slint-common", - "i-slint-core", - "i-slint-renderer-femtovg", - "input", - "nix", - "raw-window-handle", - "xkbcommon", -] - [[package]] name = "i-slint-backend-selector" version = "1.13.1" @@ -2244,7 +2253,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5c1525cd7a659b609600a7df79bb7d90092730d5c4de4f378f39ab9a023993" dependencies = [ "cfg-if", - "i-slint-backend-linuxkms", "i-slint-backend-winit", "i-slint-common", "i-slint-core", @@ -2371,6 +2379,7 @@ dependencies = [ "wasm-bindgen", "web-sys", "web-time", + "wgpu", ] [[package]] @@ -2411,6 +2420,7 @@ dependencies = [ "unicode-segmentation", "wasm-bindgen", "web-sys", + "wgpu", "winapi", ] @@ -2420,17 +2430,20 @@ version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0848e46481abf3155d3aca7e4a9b07be5a5d55716cd90d891293e8698a07b679" dependencies = [ + "ash", "bytemuck", "cfg-if", "cfg_aliases", "const-field-offset", "derive_more", + "foreign-types", "glow", "glutin", "i-slint-common", "i-slint-core", "i-slint-core-macros", "lyon_path", + "metal 0.31.0", "objc2 0.6.2", "objc2-app-kit 0.3.1", "objc2-core-foundation", @@ -2443,8 +2456,10 @@ dependencies = [ "scoped-tls-hkt", "skia-safe", "softbuffer", + "spin_on", "unicode-segmentation", "vtable", + "wgpu", "windows 0.58.0", "windows 0.61.3", "windows-core 0.58.0", @@ -2647,25 +2662,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "input" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" -dependencies = [ - "bitflags 2.9.4", - "input-sys", - "libc", - "log", - "udev", -] - -[[package]] -name = "input-sys" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd4f5b4d1c00331c5245163aacfe5f20be75b564c7112d45893d4ae038119eb0" - [[package]] name = "integer-sqrt" version = "0.1.5" @@ -2686,17 +2682,6 @@ dependencies = [ "syn", ] -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi 0.3.9", - "libc", - "windows-sys 0.48.0", -] - [[package]] name = "io-uring" version = "0.7.10" @@ -2835,6 +2820,17 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "khronos-egl" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" +dependencies = [ + "libc", + "libloading", + "pkg-config", +] + [[package]] name = "khronos_api" version = "3.1.0" @@ -2923,16 +2919,6 @@ dependencies = [ "redox_syscall 0.5.17", ] -[[package]] -name = "libudev-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" -dependencies = [ - "libc", - "pkg-config", -] - [[package]] name = "libz-rs-sys" version = "0.5.2" @@ -2972,12 +2958,6 @@ version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" -[[package]] -name = "linux-raw-sys" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7" - [[package]] name = "linux-raw-sys" version = "0.11.0" @@ -2990,6 +2970,12 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +[[package]] +name = "litrs" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" + [[package]] name = "lock_api" version = "0.4.13" @@ -3084,6 +3070,15 @@ dependencies = [ "sha2", ] +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + [[package]] name = "maybe-rayon" version = "0.1.1" @@ -3118,6 +3113,36 @@ dependencies = [ "autocfg", ] +[[package]] +name = "metal" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" +dependencies = [ + "bitflags 2.9.4", + "block", + "core-graphics-types 0.1.3", + "foreign-types", + "log", + "objc", + "paste", +] + +[[package]] +name = "metal" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605" +dependencies = [ + "bitflags 2.9.4", + "block", + "core-graphics-types 0.2.0", + "foreign-types", + "log", + "objc", + "paste", +] + [[package]] name = "mimalloc" version = "0.1.48" @@ -3189,6 +3214,32 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "naga" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916cbc7cb27db60be930a4e2da243cf4bc39569195f22fd8ee419cd31d5b662c" +dependencies = [ + "arrayvec", + "bit-set", + "bitflags 2.9.4", + "cfg-if", + "cfg_aliases", + "codespan-reporting", + "half", + "hashbrown 0.15.5", + "hexf-parse", + "indexmap", + "libm", + "log", + "num-traits", + "once_cell", + "rustc-hash 1.1.0", + "spirv", + "thiserror 2.0.16", + "unicode-ident", +] + [[package]] name = "ndk" version = "0.9.0" @@ -3339,6 +3390,15 @@ dependencies = [ "syn", ] +[[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-sys" version = "0.3.5" @@ -3723,6 +3783,15 @@ dependencies = [ "libredox", ] +[[package]] +name = "ordered-float" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2c1f9f56e534ac6a9b8a4600bdf0f530fb393b5f393e7b4d03489c3cf0c3f01" +dependencies = [ + "num-traits", +] + [[package]] name = "ordered-stream" version = "0.2.0" @@ -3903,7 +3972,7 @@ checksum = "b5bd19146350fe804f7cb2669c851c03d69da628803dab0d98018142aaa5d829" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi 0.5.2", + "hermit-abi", "pin-project-lite", "rustix 1.1.2", "windows-sys 0.60.2", @@ -3924,6 +3993,15 @@ dependencies = [ "critical-section", ] +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + [[package]] name = "postcard" version = "1.1.3" @@ -3967,6 +4045,12 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "presser" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" + [[package]] name = "prettyplease" version = "0.2.37" @@ -4191,6 +4275,12 @@ dependencies = [ "getrandom 0.3.3", ] +[[package]] +name = "range-alloc" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" + [[package]] name = "rav1e" version = "0.7.1" @@ -4346,6 +4436,12 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" +[[package]] +name = "renderdoc-sys" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" + [[package]] name = "reqwest" version = "0.12.23" @@ -4928,7 +5024,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ "bitflags 2.9.4", - "calloop 0.13.0", + "calloop", "calloop-wayland-source", "cursor-icon", "libc", @@ -5053,6 +5149,15 @@ dependencies = [ "lock_api", ] +[[package]] +name = "spirv" +version = "0.3.0+sdk-1.3.268.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" +dependencies = [ + "bitflags 2.9.4", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -5547,7 +5652,6 @@ version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ - "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -5627,18 +5731,6 @@ version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" -[[package]] -name = "udev" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af4e37e9ea4401fc841ff54b9ddfc9be1079b1e89434c1a6a865dd68980f7e9f" -dependencies = [ - "io-lifetimes", - "libc", - "libudev-sys", - "pkg-config", -] - [[package]] name = "uds_windows" version = "1.1.0" @@ -5704,6 +5796,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" +[[package]] +name = "unicode-width" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" + [[package]] name = "unicode-xid" version = "0.2.6" @@ -6090,6 +6188,155 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" +[[package]] +name = "wgpu" +version = "26.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70b6ff82bbf6e9206828e1a3178e851f8c20f1c9028e74dd3a8090741ccd5798" +dependencies = [ + "arrayvec", + "bitflags 2.9.4", + "cfg-if", + "cfg_aliases", + "document-features", + "hashbrown 0.15.5", + "js-sys", + "log", + "naga", + "parking_lot", + "portable-atomic", + "profiling", + "raw-window-handle", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "26.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f62f1053bd28c2268f42916f31588f81f64796e2ff91b81293515017ca8bd9" +dependencies = [ + "arrayvec", + "bit-set", + "bit-vec", + "bitflags 2.9.4", + "cfg_aliases", + "document-features", + "hashbrown 0.15.5", + "indexmap", + "log", + "naga", + "once_cell", + "parking_lot", + "portable-atomic", + "profiling", + "raw-window-handle", + "rustc-hash 1.1.0", + "smallvec", + "thiserror 2.0.16", + "wgpu-core-deps-apple", + "wgpu-core-deps-emscripten", + "wgpu-core-deps-windows-linux-android", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core-deps-apple" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18ae5fbde6a4cbebae38358aa73fcd6e0f15c6144b67ef5dc91ded0db125dbdf" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-core-deps-emscripten" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7670e390f416006f746b4600fdd9136455e3627f5bd763abf9a65daa216dd2d" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-core-deps-windows-linux-android" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "720a5cb9d12b3d337c15ff0e24d3e97ed11490ff3f7506e7f3d98c68fa5d6f14" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-hal" +version = "26.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7df2c64ac282a91ad7662c90bc4a77d4a2135bc0b2a2da5a4d4e267afc034b9e" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set", + "bitflags 2.9.4", + "block", + "bytemuck", + "cfg-if", + "cfg_aliases", + "core-graphics-types 0.2.0", + "glow", + "glutin_wgl_sys", + "gpu-alloc", + "gpu-allocator", + "gpu-descriptor", + "hashbrown 0.15.5", + "js-sys", + "khronos-egl", + "libc", + "libloading", + "log", + "metal 0.32.0", + "naga", + "ndk-sys", + "objc", + "ordered-float", + "parking_lot", + "portable-atomic", + "portable-atomic-util", + "profiling", + "range-alloc", + "raw-window-handle", + "renderdoc-sys", + "smallvec", + "thiserror 2.0.16", + "wasm-bindgen", + "web-sys", + "wgpu-types", + "windows 0.58.0", + "windows-core 0.58.0", +] + +[[package]] +name = "wgpu-types" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca7a8d8af57c18f57d393601a1fb159ace8b2328f1b6b5f80893f7d672c9ae2" +dependencies = [ + "bitflags 2.9.4", + "bytemuck", + "js-sys", + "log", + "thiserror 2.0.16", + "web-sys", +] + [[package]] name = "winapi" version = "0.3.9" @@ -6302,15 +6549,6 @@ dependencies = [ "windows-targets 0.42.2", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" @@ -6362,21 +6600,6 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -6425,12 +6648,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -6449,12 +6666,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -6473,12 +6684,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -6509,12 +6714,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -6533,12 +6732,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -6557,12 +6750,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -6581,12 +6768,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -6611,7 +6792,7 @@ dependencies = [ "bitflags 2.9.4", "block2 0.5.1", "bytemuck", - "calloop 0.13.0", + "calloop", "cfg_aliases", "concurrent-queue", "core-foundation 0.9.4", @@ -6749,17 +6930,6 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b" -[[package]] -name = "xkbcommon" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d66ca9352cbd4eecbbc40871d8a11b4ac8107cfc528a6e14d7c19c69d0e1ac9" -dependencies = [ - "libc", - "memmap2", - "xkeysym", -] - [[package]] name = "xkbcommon-dl" version = "0.4.2" diff --git a/Cargo.toml b/Cargo.toml index bb11ff0..df17889 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,7 @@ chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde-big-array = "0.5" -slint = { version = "1.12", default-features = false, features = ["compat-1-2", "std", "backend-winit", "renderer-femtovg"] } +slint = { version = "1.12", default-features = false, features = ["compat-1-2", "std", "backend-winit", "renderer-femtovg-wgpu"] } open = "5.3" sha2 = "0.10" sdl3-sys = { version = "0.5", features = ["build-from-source-static"] } From 7b8c549e8eee04284afeb7e62f84f2b33da55428 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 15 Sep 2025 09:50:23 +0200 Subject: [PATCH 0582/1117] remove rdp sync speed hack (#567) --- parallel-rdp/interface.cpp | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 6580b77..5aa7aa0 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -59,8 +59,6 @@ typedef struct int cmd_cur; int cmd_ptr; uint32_t region; - uint64_t vi_counter; - uint64_t last_sync; } RDP_DEVICE; static SDL_Window *window; @@ -527,7 +525,6 @@ void rdp_render_frame() { auto &device = wsi->get_device(); render_frame(device); - rdp_device.vi_counter += 1; } void rdp_update_screen() @@ -649,11 +646,8 @@ uint64_t rdp_process_commands() break; } case RDP::Op::SyncFull: - if (rdp_device.last_sync != rdp_device.vi_counter) - { - processor->wait_for_timeline(processor->signal_timeline()); - rdp_device.last_sync = rdp_device.vi_counter; - } + processor->wait_for_timeline(processor->signal_timeline()); + interrupt_timer = rdp_device.region; if (interrupt_timer == 0) interrupt_timer = 5000; From 24d26d864eb52ae58919fcc6d871d81571460b71 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 15 Sep 2025 12:21:26 +0200 Subject: [PATCH 0583/1117] update parallel-rdp --- Cargo.lock | 106 +++++++++++++++++++-------- parallel-rdp/parallel-rdp-standalone | 2 +- 2 files changed, 75 insertions(+), 33 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0cb9add..1c8a156 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -281,11 +281,11 @@ dependencies = [ [[package]] name = "async-io" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" dependencies = [ - "async-lock", + "autocfg", "cfg-if", "concurrent-queue", "futures-io", @@ -294,7 +294,7 @@ dependencies = [ "polling", "rustix 1.1.2", "slab", - "windows-sys 0.60.2", + "windows-sys 0.61.0", ] [[package]] @@ -310,9 +310,9 @@ dependencies = [ [[package]] name = "async-process" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65daa13722ad51e6ab1a1b9c01299142bc75135b337923cfa10e79bbbd669f00" +checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" dependencies = [ "async-channel", "async-io", @@ -339,9 +339,9 @@ dependencies = [ [[package]] name = "async-signal" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f567af260ef69e1d52c2b560ce0ea230763e6fbb9214a85d768760a920e3e3c1" +checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" dependencies = [ "async-io", "async-lock", @@ -352,7 +352,7 @@ dependencies = [ "rustix 1.1.2", "signal-hook-registry", "slab", - "windows-sys 0.60.2", + "windows-sys 0.61.0", ] [[package]] @@ -2468,9 +2468,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.63" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -2478,7 +2478,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.61.2", + "windows-core 0.62.0", ] [[package]] @@ -2910,9 +2910,9 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ "bitflags 2.9.4", "libc", @@ -3015,9 +3015,9 @@ checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" [[package]] name = "lyon_algorithms" -version = "1.0.5" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f13c9be19d257c7d37e70608ed858e8eab4b2afcea2e3c9a622e892acbf43c08" +checksum = "f4c0829e28c4f336396f250d850c3987e16ce6db057ffe047ce0dd54aab6b647" dependencies = [ "lyon_path", "num-traits", @@ -3035,9 +3035,9 @@ dependencies = [ [[package]] name = "lyon_geom" -version = "1.0.6" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8af69edc087272df438b3ee436c4bb6d7c04aa8af665cfd398feae627dbd8570" +checksum = "ce9333c02ea4517fd31207f126124352ad59975218c114c55dbb8f9d56fd4b45" dependencies = [ "arrayvec", "euclid", @@ -3046,9 +3046,9 @@ dependencies = [ [[package]] name = "lyon_path" -version = "1.0.7" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0047f508cd7a85ad6bad9518f68cce7b1bf6b943fb71f6da0ee3bc1e8cb75f25" +checksum = "1aeca86bcfd632a15984ba029b539ffb811e0a70bf55e814ef8b0f54f506fdeb" dependencies = [ "lyon_geom", "num-traits", @@ -3966,16 +3966,16 @@ dependencies = [ [[package]] name = "polling" -version = "3.10.0" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5bd19146350fe804f7cb2669c851c03d69da628803dab0d98018142aaa5d829" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" dependencies = [ "cfg-if", "concurrent-queue", "hermit-abi", "pin-project-lite", "rustix 1.1.2", - "windows-sys 0.60.2", + "windows-sys 0.61.0", ] [[package]] @@ -4766,16 +4766,17 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] name = "serde" -version = "1.0.219" +version = "1.0.223" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "a505d71960adde88e293da5cb5eda57093379f64e61cf77bf0e6a63af07a7bac" dependencies = [ + "serde_core", "serde_derive", ] @@ -4789,10 +4790,19 @@ dependencies = [ ] [[package]] -name = "serde_derive" -version = "1.0.219" +name = "serde_core" +version = "1.0.223" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "20f57cbd357666aa7b3ac84a90b4ea328f1d4ddb6772b430caa5d9e1309bb9e9" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.223" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d428d07faf17e306e699ec1e91996e5a165ba5d6bce5b5155173e91a8a01a56" dependencies = [ "proc-macro2", "quote", @@ -4801,14 +4811,15 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.143" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "itoa", "memchr", "ryu", "serde", + "serde_core", ] [[package]] @@ -6426,6 +6437,19 @@ dependencies = [ "windows-strings 0.4.2", ] +[[package]] +name = "windows-core" +version = "0.62.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57fe7168f7de578d2d8a05b07fd61870d2e73b4020e9f49aa00da8471723497c" +dependencies = [ + "windows-implement 0.60.0", + "windows-interface 0.59.1", + "windows-link 0.2.0", + "windows-result 0.4.0", + "windows-strings 0.5.0", +] + [[package]] name = "windows-future" version = "0.2.1" @@ -6521,6 +6545,15 @@ dependencies = [ "windows-link 0.1.3", ] +[[package]] +name = "windows-result" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f" +dependencies = [ + "windows-link 0.2.0", +] + [[package]] name = "windows-strings" version = "0.1.0" @@ -6540,6 +6573,15 @@ dependencies = [ "windows-link 0.1.3", ] +[[package]] +name = "windows-strings" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda" +dependencies = [ + "windows-link 0.2.0", +] + [[package]] name = "windows-sys" version = "0.45.0" diff --git a/parallel-rdp/parallel-rdp-standalone b/parallel-rdp/parallel-rdp-standalone index 3bff34d..0f8639d 160000 --- a/parallel-rdp/parallel-rdp-standalone +++ b/parallel-rdp/parallel-rdp-standalone @@ -1 +1 @@ -Subproject commit 3bff34d83552f19ea4e3c69d724d571a766bf4f6 +Subproject commit 0f8639da632e75702a52b45638e3263ad45a2f66 From 018d8ca3e3d66c40cedfb9835a18577030289572 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 15 Sep 2025 12:28:54 +0200 Subject: [PATCH 0584/1117] fix parallel-rdp build --- build.rs | 1 + parallel-rdp/parallel-rdp-standalone | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/build.rs b/build.rs index 78ef6dd..d23c4ff 100644 --- a/build.rs +++ b/build.rs @@ -54,6 +54,7 @@ fn main() { .file("parallel-rdp/parallel-rdp-standalone/util/timeline_trace_file.cpp") .file("parallel-rdp/parallel-rdp-standalone/util/environment.cpp") .file("parallel-rdp/parallel-rdp-standalone/util/thread_name.cpp") + .file("parallel-rdp/parallel-rdp-standalone/util/slab_allocator.cpp") .file("parallel-rdp/interface.cpp") .file("parallel-rdp/wsi_platform.cpp") .include("parallel-rdp/parallel-rdp-standalone/parallel-rdp") diff --git a/parallel-rdp/parallel-rdp-standalone b/parallel-rdp/parallel-rdp-standalone index 0f8639d..ba32935 160000 --- a/parallel-rdp/parallel-rdp-standalone +++ b/parallel-rdp/parallel-rdp-standalone @@ -1 +1 @@ -Subproject commit 0f8639da632e75702a52b45638e3263ad45a2f66 +Subproject commit ba3293573dda3f4b50069c77ad0b3d77b77915b4 From daee53a6260aac18de9f991ff1ee1d74590ca40f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 15 Sep 2025 15:50:28 +0200 Subject: [PATCH 0585/1117] Optimize VU instructions (#570) --- build.rs | 1 + src/device/rsp_vu_instructions.rs | 878 +++++++++++++++--------------- 2 files changed, 432 insertions(+), 447 deletions(-) diff --git a/build.rs b/build.rs index d23c4ff..399adf9 100644 --- a/build.rs +++ b/build.rs @@ -164,6 +164,7 @@ fn main() { .allowlist_function("_mm_cmplt_epi16") .allowlist_function("_mm_subs_epu16") .allowlist_function("_mm_set1_epi32") + .allowlist_function("_mm_set1_epi16") .blocklist_type("__m128i") .blocklist_type("int64x2_t") .wrap_static_fns(true) diff --git a/src/device/rsp_vu_instructions.rs b/src/device/rsp_vu_instructions.rs index 15de7e4..5d961a9 100644 --- a/src/device/rsp_vu_instructions.rs +++ b/src/device/rsp_vu_instructions.rs @@ -38,9 +38,47 @@ fn clamp_signed_64(value: i64) -> i16 { } fn s_clip(x: i64, bits: u32) -> i64 { - let b = 1_u64 << (bits - 1); - let m = b * 2 - 1; - ((((x as u64) & m) ^ b).wrapping_sub(b)) as i64 + let mask = (1i64 << bits) - 1; + let value = x & mask; + (value << (64 - bits)) >> (64 - bits) +} + +fn compute_reciprocal(input: i32, reciprocals: &[u16]) -> u32 { + let mask = input >> 31; + let mut data = input ^ mask; + if input > -32768 { + data -= mask + } + if data == 0 { + 0x7fffffff + } else if input == -32768 { + 0xffff0000 + } else { + let shift = (data as u32).leading_zeros(); + let index = (((data as u64) << shift) & 0x7fc00000) >> 22; + let mut result = reciprocals[index as usize] as u32; + result = (0x10000 | result) << 14; + (result >> (31 - shift)) ^ mask as u32 + } +} + +fn compute_inverse_sqrt(input: i32, inverse_square_roots: &[u16]) -> u32 { + let mask = input >> 31; + let mut data = input ^ mask; + if input > -32768 { + data -= mask + } + if data == 0 { + 0x7fffffff + } else if input == -32768 { + 0xffff0000 + } else { + let shift = (data as u32).leading_zeros(); + let index = (((data as u64) << shift) & 0x7fc00000) as u32 >> 22; + let mut result = inverse_square_roots[((index & 0x1fe) | (shift & 1)) as usize] as u32; + result = (0x10000 | result) << 14; + (result >> ((31 - shift) >> 1)) ^ mask as u32 + } } fn vte(device: &device::Device, vt: u32, index: usize) -> __m128i { @@ -54,23 +92,22 @@ fn vte(device: &device::Device, vt: u32, index: usize) -> __m128i { pub fn vmulf(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let (mut lo, mut hi, mut round, mut sign1, sign2, neq, eq, neg); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - lo = _mm_mullo_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - round = _mm_cmpeq_epi16(_mm_setzero_si128(), _mm_setzero_si128()); - sign1 = _mm_srli_epi16(lo, 15); - lo = _mm_add_epi16(lo, lo); - round = _mm_slli_epi16(round, 15); - hi = _mm_mulhi_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - sign2 = _mm_srli_epi16(lo, 15); - device.rsp.cpu.accl = _mm_add_epi16(round, lo); - sign1 = _mm_add_epi16(sign1, sign2); - hi = _mm_slli_epi16(hi, 1); - neq = _mm_cmpeq_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - device.rsp.cpu.accm = _mm_add_epi16(hi, sign1); - neg = _mm_srai_epi16(device.rsp.cpu.accm, 15); + let lo = _mm_mullo_epi16(vs_reg, vte); + let hi = _mm_mulhi_epi16(vs_reg, vte); + + let sign1 = _mm_srli_epi16(lo, 15); + let lo_doubled = _mm_add_epi16(lo, lo); + let sign2 = _mm_srli_epi16(lo_doubled, 15); + + device.rsp.cpu.accl = _mm_add_epi16(_mm_set1_epi16(-32768_i16), lo_doubled); // round + lo + device.rsp.cpu.accm = _mm_add_epi16(_mm_slli_epi16(hi, 1), _mm_add_epi16(sign1, sign2)); + let neg = _mm_srai_epi16(device.rsp.cpu.accm, 15); + + let neq = _mm_cmpeq_epi16(vs_reg, vte); + let eq = _mm_and_si128(neq, neg); - eq = _mm_and_si128(neq, neg); device.rsp.cpu.acch = _mm_andnot_si128(neq, neg); device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_add_epi16(device.rsp.cpu.accm, eq); } @@ -78,25 +115,24 @@ pub fn vmulf(device: &mut device::Device, opcode: u32) { pub fn vmulu(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let (mut lo, mut hi, mut round, mut sign1, sign2, neq, neg); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - lo = _mm_mullo_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - round = _mm_cmpeq_epi16(_mm_setzero_si128(), _mm_setzero_si128()); - sign1 = _mm_srli_epi16(lo, 15); - lo = _mm_add_epi16(lo, lo); - round = _mm_slli_epi16(round, 15); - hi = _mm_mulhi_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - sign2 = _mm_srli_epi16(lo, 15); - device.rsp.cpu.accl = _mm_add_epi16(round, lo); - sign1 = _mm_add_epi16(sign1, sign2); - hi = _mm_slli_epi16(hi, 1); - neq = _mm_cmpeq_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - device.rsp.cpu.accm = _mm_add_epi16(hi, sign1); - neg = _mm_srai_epi16(device.rsp.cpu.accm, 15); + let lo = _mm_mullo_epi16(vs_reg, vte); + let hi = _mm_mulhi_epi16(vs_reg, vte); + + let sign1 = _mm_srli_epi16(lo, 15); + let lo_doubled = _mm_add_epi16(lo, lo); + let sign2 = _mm_srli_epi16(lo_doubled, 15); + + device.rsp.cpu.accl = _mm_add_epi16(_mm_set1_epi16(-32768_i16), lo_doubled); // round + lo + device.rsp.cpu.accm = _mm_add_epi16(_mm_slli_epi16(hi, 1), _mm_add_epi16(sign1, sign2)); + let neg = _mm_srai_epi16(device.rsp.cpu.accm, 15); + + let neq = _mm_cmpeq_epi16(vs_reg, vte); device.rsp.cpu.acch = _mm_andnot_si128(neq, neg); - hi = _mm_or_si128(device.rsp.cpu.accm, neg); - device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_andnot_si128(device.rsp.cpu.acch, hi); + let result = _mm_or_si128(device.rsp.cpu.accm, neg); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_andnot_si128(device.rsp.cpu.acch, result); } } @@ -105,10 +141,12 @@ pub fn vrndp(device: &mut device::Device, opcode: u32) { let acch: &mut __m128i = &mut device.rsp.cpu.acch; let accm: &mut __m128i = &mut device.rsp.cpu.accm; let accl: &mut __m128i = &mut device.rsp.cpu.accl; + let vd_reg = &mut device.rsp.cpu.vpr[vd(opcode) as usize]; + let shift_amount = vs(opcode) & 1; for n in 0..8 { let mut product = get_vpr16(vte, n) as i16 as i32; - if vs(opcode) & 1 != 0 { + if shift_amount != 0 { product <<= 16 } let mut acc = 0; @@ -125,11 +163,7 @@ pub fn vrndp(device: &mut device::Device, opcode: u32) { modify_vpr16(acch, n, (acc >> 32) as u16); modify_vpr16(accm, n, (acc >> 16) as u16); modify_vpr16(accl, n, acc as u16); - modify_vpr16( - &mut device.rsp.cpu.vpr[vd(opcode) as usize], - n, - clamp_signed_64(acc >> 16) as u16, - ); + modify_vpr16(vd_reg, n, clamp_signed_64(acc >> 16) as u16); } } @@ -138,28 +172,27 @@ pub fn vmulq(device: &mut device::Device, opcode: u32) { let acch: &mut __m128i = &mut device.rsp.cpu.acch; let accm: &mut __m128i = &mut device.rsp.cpu.accm; let accl: &mut __m128i = &mut device.rsp.cpu.accl; + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; + let vd_reg = &mut device.rsp.cpu.vpr[vd(opcode) as usize]; for n in 0..8 { - let mut product = (get_vpr16(device.rsp.cpu.vpr[vs(opcode) as usize], n) as i16 as i32) - .wrapping_mul(get_vpr16(vte, n) as i16 as i32); + let mut product = + (get_vpr16(vs_reg, n) as i16 as i32).wrapping_mul(get_vpr16(vte, n) as i16 as i32); if product < 0 { product += 31; } modify_vpr16(acch, n, (product >> 16) as u16); - modify_vpr16(accm, n, (product) as u16); + modify_vpr16(accm, n, product as u16); modify_vpr16(accl, n, 0); - modify_vpr16( - &mut device.rsp.cpu.vpr[vd(opcode) as usize], - n, - (clamp_signed_32(product >> 1) & !15) as u16, - ); + modify_vpr16(vd_reg, n, (clamp_signed_32(product >> 1) & !15) as u16); } } pub fn vmudl(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - device.rsp.cpu.accl = _mm_mulhi_epu16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + device.rsp.cpu.accl = _mm_mulhi_epu16(vs_reg, vte); device.rsp.cpu.accm = _mm_setzero_si128(); device.rsp.cpu.acch = _mm_setzero_si128(); device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; @@ -168,12 +201,12 @@ pub fn vmudl(device: &mut device::Device, opcode: u32) { pub fn vmudm(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let (sign, vta); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - device.rsp.cpu.accl = _mm_mullo_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - device.rsp.cpu.accm = _mm_mulhi_epu16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - sign = _mm_srai_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], 15); - vta = _mm_and_si128(vte, sign); + device.rsp.cpu.accl = _mm_mullo_epi16(vs_reg, vte); + device.rsp.cpu.accm = _mm_mulhi_epu16(vs_reg, vte); + let sign = _mm_srai_epi16(vs_reg, 15); + let vta = _mm_and_si128(vte, sign); device.rsp.cpu.accm = _mm_sub_epi16(device.rsp.cpu.accm, vta); device.rsp.cpu.acch = _mm_srai_epi16(device.rsp.cpu.accm, 15); device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accm; @@ -182,12 +215,12 @@ pub fn vmudm(device: &mut device::Device, opcode: u32) { pub fn vmudn(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let (sign, vsa); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - device.rsp.cpu.accl = _mm_mullo_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - device.rsp.cpu.accm = _mm_mulhi_epu16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - sign = _mm_srai_epi16(vte, 15); - vsa = _mm_and_si128(device.rsp.cpu.vpr[vs(opcode) as usize], sign); + device.rsp.cpu.accl = _mm_mullo_epi16(vs_reg, vte); + device.rsp.cpu.accm = _mm_mulhi_epu16(vs_reg, vte); + let sign = _mm_srai_epi16(vte, 15); + let vsa = _mm_and_si128(vs_reg, sign); device.rsp.cpu.accm = _mm_sub_epi16(device.rsp.cpu.accm, vsa); device.rsp.cpu.acch = _mm_srai_epi16(device.rsp.cpu.accm, 15); device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; @@ -196,81 +229,91 @@ pub fn vmudn(device: &mut device::Device, opcode: u32) { pub fn vmudh(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let (lo, hi); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { device.rsp.cpu.accl = _mm_setzero_si128(); - device.rsp.cpu.accm = _mm_mullo_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - device.rsp.cpu.acch = _mm_mulhi_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - lo = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); - hi = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); + device.rsp.cpu.accm = _mm_mullo_epi16(vs_reg, vte); + device.rsp.cpu.acch = _mm_mulhi_epi16(vs_reg, vte); + let lo = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); + let hi = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_packs_epi32(lo, hi); } } pub fn vmacf(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let (mut lo, mut md, mut hi, mut carry, mut omask); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - lo = _mm_mullo_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - hi = _mm_mulhi_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - md = _mm_slli_epi16(hi, 1); - carry = _mm_srli_epi16(lo, 15); - hi = _mm_srai_epi16(hi, 15); - md = _mm_or_si128(md, carry); - lo = _mm_slli_epi16(lo, 1); - omask = _mm_adds_epu16(device.rsp.cpu.accl, lo); - device.rsp.cpu.accl = _mm_add_epi16(device.rsp.cpu.accl, lo); - omask = _mm_cmpeq_epi16(device.rsp.cpu.accl, omask); - omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); - md = _mm_sub_epi16(md, omask); - carry = _mm_cmpeq_epi16(md, _mm_setzero_si128()); - carry = _mm_and_si128(carry, omask); - hi = _mm_sub_epi16(hi, carry); - omask = _mm_adds_epu16(device.rsp.cpu.accm, md); - device.rsp.cpu.accm = _mm_add_epi16(device.rsp.cpu.accm, md); - omask = _mm_cmpeq_epi16(device.rsp.cpu.accm, omask); - omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); - device.rsp.cpu.acch = _mm_add_epi16(device.rsp.cpu.acch, hi); - device.rsp.cpu.acch = _mm_sub_epi16(device.rsp.cpu.acch, omask); + let lo = _mm_mullo_epi16(vs_reg, vte); + let hi = _mm_mulhi_epi16(vs_reg, vte); - lo = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); - hi = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); - device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_packs_epi32(lo, hi); + let carry = _mm_srli_epi16(lo, 15); + let md = _mm_or_si128(_mm_slli_epi16(hi, 1), carry); + let lo_doubled = _mm_slli_epi16(lo, 1); + let hi_sign = _mm_srai_epi16(hi, 15); + + let accl_old = device.rsp.cpu.accl; + device.rsp.cpu.accl = _mm_add_epi16(accl_old, lo_doubled); + let overflow_l = _mm_cmpeq_epi16(_mm_adds_epu16(accl_old, lo_doubled), device.rsp.cpu.accl); + let borrow_from_l = _mm_cmpeq_epi16(overflow_l, _mm_setzero_si128()); + + let md_adjusted = _mm_sub_epi16(md, borrow_from_l); + let zero_md = _mm_cmpeq_epi16(md_adjusted, _mm_setzero_si128()); + let borrow_to_h = _mm_and_si128(zero_md, borrow_from_l); + let hi_adjusted = _mm_sub_epi16(hi_sign, borrow_to_h); + + let accm_old = device.rsp.cpu.accm; + device.rsp.cpu.accm = _mm_add_epi16(accm_old, md_adjusted); + let overflow_m = + _mm_cmpeq_epi16(_mm_adds_epu16(accm_old, md_adjusted), device.rsp.cpu.accm); + let borrow_from_m = _mm_cmpeq_epi16(overflow_m, _mm_setzero_si128()); + + device.rsp.cpu.acch = _mm_add_epi16(device.rsp.cpu.acch, hi_adjusted); + device.rsp.cpu.acch = _mm_sub_epi16(device.rsp.cpu.acch, borrow_from_m); + + let lo_packed = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); + let hi_packed = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_packs_epi32(lo_packed, hi_packed); } } pub fn vmacu(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let (mut lo, mut md, mut hi, mut carry, mut omask, mmask, hmask); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - lo = _mm_mullo_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - hi = _mm_mulhi_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - md = _mm_slli_epi16(hi, 1); - carry = _mm_srli_epi16(lo, 15); - hi = _mm_srai_epi16(hi, 15); - md = _mm_or_si128(md, carry); - lo = _mm_slli_epi16(lo, 1); - omask = _mm_adds_epu16(device.rsp.cpu.accl, lo); - device.rsp.cpu.accl = _mm_add_epi16(device.rsp.cpu.accl, lo); - omask = _mm_cmpeq_epi16(device.rsp.cpu.accl, omask); - omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); - md = _mm_sub_epi16(md, omask); - carry = _mm_cmpeq_epi16(md, _mm_setzero_si128()); - carry = _mm_and_si128(carry, omask); - hi = _mm_sub_epi16(hi, carry); - omask = _mm_adds_epu16(device.rsp.cpu.accm, md); - device.rsp.cpu.accm = _mm_add_epi16(device.rsp.cpu.accm, md); - omask = _mm_cmpeq_epi16(device.rsp.cpu.accm, omask); - omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); - device.rsp.cpu.acch = _mm_add_epi16(device.rsp.cpu.acch, hi); - device.rsp.cpu.acch = _mm_sub_epi16(device.rsp.cpu.acch, omask); + let lo = _mm_mullo_epi16(vs_reg, vte); + let hi = _mm_mulhi_epi16(vs_reg, vte); - mmask = _mm_srai_epi16(device.rsp.cpu.accm, 15); - hmask = _mm_srai_epi16(device.rsp.cpu.acch, 15); - md = _mm_or_si128(mmask, device.rsp.cpu.accm); - omask = _mm_cmpgt_epi16(device.rsp.cpu.acch, _mm_setzero_si128()); - md = _mm_andnot_si128(hmask, md); - device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_or_si128(omask, md); + let carry = _mm_srli_epi16(lo, 15); + let md = _mm_or_si128(_mm_slli_epi16(hi, 1), carry); + let lo_doubled = _mm_slli_epi16(lo, 1); + let hi_sign = _mm_srai_epi16(hi, 15); + + let accl_old = device.rsp.cpu.accl; + device.rsp.cpu.accl = _mm_add_epi16(accl_old, lo_doubled); + let overflow_l = _mm_cmpeq_epi16(_mm_adds_epu16(accl_old, lo_doubled), device.rsp.cpu.accl); + let borrow_from_l = _mm_cmpeq_epi16(overflow_l, _mm_setzero_si128()); + + let md_adjusted = _mm_sub_epi16(md, borrow_from_l); + let zero_md = _mm_cmpeq_epi16(md_adjusted, _mm_setzero_si128()); + let borrow_to_h = _mm_and_si128(zero_md, borrow_from_l); + let hi_adjusted = _mm_sub_epi16(hi_sign, borrow_to_h); + + let accm_old = device.rsp.cpu.accm; + device.rsp.cpu.accm = _mm_add_epi16(accm_old, md_adjusted); + let overflow_m = + _mm_cmpeq_epi16(_mm_adds_epu16(accm_old, md_adjusted), device.rsp.cpu.accm); + let borrow_from_m = _mm_cmpeq_epi16(overflow_m, _mm_setzero_si128()); + + device.rsp.cpu.acch = _mm_add_epi16(device.rsp.cpu.acch, hi_adjusted); + device.rsp.cpu.acch = _mm_sub_epi16(device.rsp.cpu.acch, borrow_from_m); + + let mmask = _mm_srai_epi16(device.rsp.cpu.accm, 15); + let hmask = _mm_srai_epi16(device.rsp.cpu.acch, 15); + let md_result = _mm_or_si128(mmask, device.rsp.cpu.accm); + let positive = _mm_cmpgt_epi16(device.rsp.cpu.acch, _mm_setzero_si128()); + let final_result = _mm_andnot_si128(hmask, md_result); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_or_si128(positive, final_result); } } @@ -279,10 +322,12 @@ pub fn vrndn(device: &mut device::Device, opcode: u32) { let acch: &mut __m128i = &mut device.rsp.cpu.acch; let accm: &mut __m128i = &mut device.rsp.cpu.accm; let accl: &mut __m128i = &mut device.rsp.cpu.accl; + let vd_reg = &mut device.rsp.cpu.vpr[vd(opcode) as usize]; + let shift_amount = vs(opcode) & 1; for n in 0..8 { let mut product = get_vpr16(vte, n) as i16 as i32; - if vs(opcode) & 1 != 0 { + if shift_amount != 0 { product <<= 16 } let mut acc = 0; @@ -299,17 +344,14 @@ pub fn vrndn(device: &mut device::Device, opcode: u32) { modify_vpr16(acch, n, (acc >> 32) as u16); modify_vpr16(accm, n, (acc >> 16) as u16); modify_vpr16(accl, n, acc as u16); - modify_vpr16( - &mut device.rsp.cpu.vpr[vd(opcode) as usize], - n, - clamp_signed_64(acc >> 16) as u16, - ); + modify_vpr16(vd_reg, n, clamp_signed_64(acc >> 16) as u16); } } pub fn vmacq(device: &mut device::Device, opcode: u32) { let acch: &mut __m128i = &mut device.rsp.cpu.acch; let accm: &mut __m128i = &mut device.rsp.cpu.accm; + let vd_reg = &mut device.rsp.cpu.vpr[vd(opcode) as usize]; for n in 0..8 { let mut product = ((get_vpr16(*acch, n) as i32) << 16) | (get_vpr16(*accm, n) as i32); @@ -319,126 +361,145 @@ pub fn vmacq(device: &mut device::Device, opcode: u32) { product -= 32 } modify_vpr16(acch, n, (product >> 16) as u16); - modify_vpr16(accm, n, (product) as u16); - modify_vpr16( - &mut device.rsp.cpu.vpr[vd(opcode) as usize], - n, - (clamp_signed_32(product >> 1) & !15) as u16, - ); + modify_vpr16(accm, n, product as u16); + modify_vpr16(vd_reg, n, (clamp_signed_32(product >> 1) & !15) as u16); } } pub fn vmadl(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let (mut hi, mut omask, nhi, nmd, shi, smd, cmask, cval); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - hi = _mm_mulhi_epu16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - omask = _mm_adds_epu16(device.rsp.cpu.accl, hi); - device.rsp.cpu.accl = _mm_add_epi16(device.rsp.cpu.accl, hi); - omask = _mm_cmpeq_epi16(device.rsp.cpu.accl, omask); - omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); - hi = _mm_sub_epi16(_mm_setzero_si128(), omask); - omask = _mm_adds_epu16(device.rsp.cpu.accm, hi); - device.rsp.cpu.accm = _mm_add_epi16(device.rsp.cpu.accm, hi); - omask = _mm_cmpeq_epi16(device.rsp.cpu.accm, omask); - omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); - device.rsp.cpu.acch = _mm_sub_epi16(device.rsp.cpu.acch, omask); - nhi = _mm_srai_epi16(device.rsp.cpu.acch, 15); - nmd = _mm_srai_epi16(device.rsp.cpu.accm, 15); - shi = _mm_cmpeq_epi16(nhi, device.rsp.cpu.acch); - smd = _mm_cmpeq_epi16(nhi, nmd); - cmask = _mm_and_si128(smd, shi); - cval = _mm_cmpeq_epi16(nhi, _mm_setzero_si128()); + let hi = _mm_mulhi_epu16(vs_reg, vte); + + let accl_old = device.rsp.cpu.accl; + device.rsp.cpu.accl = _mm_add_epi16(accl_old, hi); + let overflow_l = _mm_cmpeq_epi16(_mm_adds_epu16(accl_old, hi), device.rsp.cpu.accl); + let borrow = _mm_cmpeq_epi16(overflow_l, _mm_setzero_si128()); + + let accm_old = device.rsp.cpu.accm; + device.rsp.cpu.accm = _mm_sub_epi16(accm_old, borrow); + let overflow_m = _mm_cmpeq_epi16( + _mm_adds_epu16(accm_old, _mm_sub_epi16(_mm_setzero_si128(), borrow)), + device.rsp.cpu.accm, + ); + let borrow_h = _mm_cmpeq_epi16(overflow_m, _mm_setzero_si128()); + + device.rsp.cpu.acch = _mm_sub_epi16(device.rsp.cpu.acch, borrow_h); + + let nhi = _mm_srai_epi16(device.rsp.cpu.acch, 15); + let nmd = _mm_srai_epi16(device.rsp.cpu.accm, 15); + let shi = _mm_cmpeq_epi16(nhi, device.rsp.cpu.acch); + let smd = _mm_cmpeq_epi16(nhi, nmd); + let cmask = _mm_and_si128(smd, shi); + let cval = _mm_cmpeq_epi16(nhi, _mm_setzero_si128()); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_blendv_epi8(cval, device.rsp.cpu.accl, cmask); } } pub fn vmadm(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let (mut lo, mut hi, sign, vta, mut omask); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - lo = _mm_mullo_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - hi = _mm_mulhi_epu16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - sign = _mm_srai_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], 15); - vta = _mm_and_si128(vte, sign); + let lo = _mm_mullo_epi16(vs_reg, vte); + let mut hi = _mm_mulhi_epu16(vs_reg, vte); + let sign = _mm_srai_epi16(vs_reg, 15); + let vta = _mm_and_si128(vte, sign); hi = _mm_sub_epi16(hi, vta); - omask = _mm_adds_epu16(device.rsp.cpu.accl, lo); - device.rsp.cpu.accl = _mm_add_epi16(device.rsp.cpu.accl, lo); - omask = _mm_cmpeq_epi16(device.rsp.cpu.accl, omask); - omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); - hi = _mm_sub_epi16(hi, omask); - omask = _mm_adds_epu16(device.rsp.cpu.accm, hi); - device.rsp.cpu.accm = _mm_add_epi16(device.rsp.cpu.accm, hi); - omask = _mm_cmpeq_epi16(device.rsp.cpu.accm, omask); - omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); - hi = _mm_srai_epi16(hi, 15); - device.rsp.cpu.acch = _mm_add_epi16(device.rsp.cpu.acch, hi); - device.rsp.cpu.acch = _mm_sub_epi16(device.rsp.cpu.acch, omask); - lo = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); - hi = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); - device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_packs_epi32(lo, hi); + + let accl_old = device.rsp.cpu.accl; + device.rsp.cpu.accl = _mm_add_epi16(accl_old, lo); + let overflow_l = _mm_cmpeq_epi16(_mm_adds_epu16(accl_old, lo), device.rsp.cpu.accl); + let borrow = _mm_cmpeq_epi16(overflow_l, _mm_setzero_si128()); + + hi = _mm_sub_epi16(hi, borrow); + + let accm_old = device.rsp.cpu.accm; + device.rsp.cpu.accm = _mm_add_epi16(accm_old, hi); + let overflow_m = _mm_cmpeq_epi16(_mm_adds_epu16(accm_old, hi), device.rsp.cpu.accm); + let borrow_h = _mm_cmpeq_epi16(overflow_m, _mm_setzero_si128()); + + let hi_sign = _mm_srai_epi16(hi, 15); + device.rsp.cpu.acch = _mm_add_epi16(device.rsp.cpu.acch, hi_sign); + device.rsp.cpu.acch = _mm_sub_epi16(device.rsp.cpu.acch, borrow_h); + + let lo_packed = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); + let hi_packed = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_packs_epi32(lo_packed, hi_packed); } } pub fn vmadn(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let (lo, mut hi, sign, vsa, mut omask, nhi, nmd, shi, smd, cmask, cval); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - lo = _mm_mullo_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - hi = _mm_mulhi_epu16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - sign = _mm_srai_epi16(vte, 15); - vsa = _mm_and_si128(device.rsp.cpu.vpr[vs(opcode) as usize], sign); + let lo = _mm_mullo_epi16(vs_reg, vte); + let mut hi = _mm_mulhi_epu16(vs_reg, vte); + let sign = _mm_srai_epi16(vte, 15); + let vsa = _mm_and_si128(vs_reg, sign); hi = _mm_sub_epi16(hi, vsa); - omask = _mm_adds_epu16(device.rsp.cpu.accl, lo); - device.rsp.cpu.accl = _mm_add_epi16(device.rsp.cpu.accl, lo); - omask = _mm_cmpeq_epi16(device.rsp.cpu.accl, omask); - omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); - hi = _mm_sub_epi16(hi, omask); - omask = _mm_adds_epu16(device.rsp.cpu.accm, hi); - device.rsp.cpu.accm = _mm_add_epi16(device.rsp.cpu.accm, hi); - omask = _mm_cmpeq_epi16(device.rsp.cpu.accm, omask); - omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); - hi = _mm_srai_epi16(hi, 15); - device.rsp.cpu.acch = _mm_add_epi16(device.rsp.cpu.acch, hi); - device.rsp.cpu.acch = _mm_sub_epi16(device.rsp.cpu.acch, omask); - nhi = _mm_srai_epi16(device.rsp.cpu.acch, 15); - nmd = _mm_srai_epi16(device.rsp.cpu.accm, 15); - shi = _mm_cmpeq_epi16(nhi, device.rsp.cpu.acch); - smd = _mm_cmpeq_epi16(nhi, nmd); - cmask = _mm_and_si128(smd, shi); - cval = _mm_cmpeq_epi16(nhi, _mm_setzero_si128()); + + let accl_old = device.rsp.cpu.accl; + device.rsp.cpu.accl = _mm_add_epi16(accl_old, lo); + let overflow_l = _mm_cmpeq_epi16(_mm_adds_epu16(accl_old, lo), device.rsp.cpu.accl); + let borrow = _mm_cmpeq_epi16(overflow_l, _mm_setzero_si128()); + + hi = _mm_sub_epi16(hi, borrow); + + let accm_old = device.rsp.cpu.accm; + device.rsp.cpu.accm = _mm_add_epi16(accm_old, hi); + let overflow_m = _mm_cmpeq_epi16(_mm_adds_epu16(accm_old, hi), device.rsp.cpu.accm); + let borrow_h = _mm_cmpeq_epi16(overflow_m, _mm_setzero_si128()); + + let hi_sign = _mm_srai_epi16(hi, 15); + device.rsp.cpu.acch = _mm_add_epi16(device.rsp.cpu.acch, hi_sign); + device.rsp.cpu.acch = _mm_sub_epi16(device.rsp.cpu.acch, borrow_h); + + let nhi = _mm_srai_epi16(device.rsp.cpu.acch, 15); + let nmd = _mm_srai_epi16(device.rsp.cpu.accm, 15); + let shi = _mm_cmpeq_epi16(nhi, device.rsp.cpu.acch); + let smd = _mm_cmpeq_epi16(nhi, nmd); + let cmask = _mm_and_si128(smd, shi); + let cval = _mm_cmpeq_epi16(nhi, _mm_setzero_si128()); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_blendv_epi8(cval, device.rsp.cpu.accl, cmask); } } pub fn vmadh(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let (mut lo, mut hi, mut omask); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - lo = _mm_mullo_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - hi = _mm_mulhi_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - omask = _mm_adds_epu16(device.rsp.cpu.accm, lo); - device.rsp.cpu.accm = _mm_add_epi16(device.rsp.cpu.accm, lo); - omask = _mm_cmpeq_epi16(device.rsp.cpu.accm, omask); - omask = _mm_cmpeq_epi16(omask, _mm_setzero_si128()); - hi = _mm_sub_epi16(hi, omask); + let lo = _mm_mullo_epi16(vs_reg, vte); + let mut hi = _mm_mulhi_epi16(vs_reg, vte); + + let accm_old = device.rsp.cpu.accm; + device.rsp.cpu.accm = _mm_add_epi16(accm_old, lo); + let overflow = _mm_cmpeq_epi16(_mm_adds_epu16(accm_old, lo), device.rsp.cpu.accm); + let borrow = _mm_cmpeq_epi16(overflow, _mm_setzero_si128()); + + hi = _mm_sub_epi16(hi, borrow); device.rsp.cpu.acch = _mm_add_epi16(device.rsp.cpu.acch, hi); - lo = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); - hi = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); - device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_packs_epi32(lo, hi); + + let lo_packed = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); + let hi_packed = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_packs_epi32(lo_packed, hi_packed); } } pub fn vadd(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let (sum, mut min, max); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - sum = _mm_add_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + let sum = _mm_add_epi16(vs_reg, vte); device.rsp.cpu.accl = _mm_sub_epi16(sum, device.rsp.cpu.vcol); - min = _mm_min_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - max = _mm_max_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - min = _mm_subs_epi16(min, device.rsp.cpu.vcol); - device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_adds_epi16(min, max); + + let min = _mm_min_epi16(vs_reg, vte); + let max = _mm_max_epi16(vs_reg, vte); + let min_adjusted = _mm_subs_epi16(min, device.rsp.cpu.vcol); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_adds_epi16(min_adjusted, max); + device.rsp.cpu.vcol = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); } @@ -446,16 +507,16 @@ pub fn vadd(device: &mut device::Device, opcode: u32) { pub fn vsub(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let (udiff, sdiff, ov); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - udiff = _mm_sub_epi16(vte, device.rsp.cpu.vcol); - sdiff = _mm_subs_epi16(vte, device.rsp.cpu.vcol); - device.rsp.cpu.accl = _mm_sub_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], udiff); - ov = _mm_cmpgt_epi16(sdiff, udiff); - device.rsp.cpu.vpr[vd(opcode) as usize] = - _mm_subs_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], sdiff); - device.rsp.cpu.vpr[vd(opcode) as usize] = - _mm_adds_epi16(device.rsp.cpu.vpr[vd(opcode) as usize], ov); + let udiff = _mm_sub_epi16(vte, device.rsp.cpu.vcol); + let sdiff = _mm_subs_epi16(vte, device.rsp.cpu.vcol); + device.rsp.cpu.accl = _mm_sub_epi16(vs_reg, udiff); + + let ov = _mm_cmpgt_epi16(sdiff, udiff); + let sub_result = _mm_subs_epi16(vs_reg, sdiff); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_adds_epi16(sub_result, ov); + device.rsp.cpu.vcol = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); } @@ -463,38 +524,37 @@ pub fn vsub(device: &mut device::Device, opcode: u32) { pub fn vzero(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - device.rsp.cpu.accl = _mm_add_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_xor_si128( - device.rsp.cpu.vpr[vd(opcode) as usize], - device.rsp.cpu.vpr[vd(opcode) as usize], - ); + device.rsp.cpu.accl = _mm_add_epi16(vs_reg, vte); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_setzero_si128(); } } pub fn vabs(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let (vs0, slt); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - vs0 = _mm_cmpeq_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], _mm_setzero_si128()); - slt = _mm_srai_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], 15); - device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_andnot_si128(vs0, vte); - device.rsp.cpu.vpr[vd(opcode) as usize] = - _mm_xor_si128(device.rsp.cpu.vpr[vd(opcode) as usize], slt); - device.rsp.cpu.accl = _mm_sub_epi16(device.rsp.cpu.vpr[vd(opcode) as usize], slt); - device.rsp.cpu.vpr[vd(opcode) as usize] = - _mm_subs_epi16(device.rsp.cpu.vpr[vd(opcode) as usize], slt); + let vs0 = _mm_cmpeq_epi16(vs_reg, _mm_setzero_si128()); + let slt = _mm_srai_epi16(vs_reg, 15); + + let mut result = _mm_andnot_si128(vs0, vte); + result = _mm_xor_si128(result, slt); + device.rsp.cpu.accl = _mm_sub_epi16(result, slt); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_subs_epi16(result, slt); } } pub fn vaddc(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let sum; + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - sum = _mm_adds_epu16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - device.rsp.cpu.accl = _mm_add_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - device.rsp.cpu.vcol = _mm_cmpeq_epi16(sum, device.rsp.cpu.accl); - device.rsp.cpu.vcol = _mm_cmpeq_epi16(device.rsp.cpu.vcol, _mm_setzero_si128()); + let sum = _mm_adds_epu16(vs_reg, vte); + device.rsp.cpu.accl = _mm_add_epi16(vs_reg, vte); + device.rsp.cpu.vcol = _mm_cmpeq_epi16( + _mm_cmpeq_epi16(sum, device.rsp.cpu.accl), + _mm_setzero_si128(), + ); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } @@ -502,49 +562,49 @@ pub fn vaddc(device: &mut device::Device, opcode: u32) { pub fn vsubc(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let (equal, udiff, diff0); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - udiff = _mm_subs_epu16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - equal = _mm_cmpeq_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - diff0 = _mm_cmpeq_epi16(udiff, _mm_setzero_si128()); + let udiff = _mm_subs_epu16(vs_reg, vte); + let equal = _mm_cmpeq_epi16(vs_reg, vte); + let diff0 = _mm_cmpeq_epi16(udiff, _mm_setzero_si128()); + device.rsp.cpu.vcoh = _mm_cmpeq_epi16(equal, _mm_setzero_si128()); device.rsp.cpu.vcol = _mm_andnot_si128(equal, diff0); - device.rsp.cpu.accl = _mm_sub_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + device.rsp.cpu.accl = _mm_sub_epi16(vs_reg, vte); device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } pub fn vsar(device: &mut device::Device, opcode: u32) { + let vd_reg = &mut device.rsp.cpu.vpr[vd(opcode) as usize]; match ve(opcode) { 0x8 => { - device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.acch; + *vd_reg = device.rsp.cpu.acch; } 0x9 => { - device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accm; + *vd_reg = device.rsp.cpu.accm; } 0xa => { - device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; + *vd_reg = device.rsp.cpu.accl; } _ => { - device.rsp.cpu.vpr[vd(opcode) as usize] = unsafe { _mm_setzero_si128() }; + *vd_reg = unsafe { _mm_setzero_si128() }; } } } pub fn vlt(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let (mut eq, lt); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - eq = _mm_cmpeq_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - lt = _mm_cmplt_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - eq = _mm_and_si128(device.rsp.cpu.vcoh, eq); - eq = _mm_and_si128(device.rsp.cpu.vcol, eq); - device.rsp.cpu.vccl = _mm_or_si128(lt, eq); - device.rsp.cpu.accl = _mm_blendv_epi8( - vte, - device.rsp.cpu.vpr[vs(opcode) as usize], - device.rsp.cpu.vccl, - ); + let eq = _mm_cmpeq_epi16(vs_reg, vte); + let lt = _mm_cmplt_epi16(vs_reg, vte); + let eq_and_carry = + _mm_and_si128(_mm_and_si128(device.rsp.cpu.vcoh, eq), device.rsp.cpu.vcol); + + device.rsp.cpu.vccl = _mm_or_si128(lt, eq_and_carry); + device.rsp.cpu.accl = _mm_blendv_epi8(vte, vs_reg, device.rsp.cpu.vccl); + device.rsp.cpu.vcch = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); @@ -554,16 +614,13 @@ pub fn vlt(device: &mut device::Device, opcode: u32) { pub fn veq(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let eq; + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - eq = _mm_cmpeq_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + let eq = _mm_cmpeq_epi16(vs_reg, vte); device.rsp.cpu.vccl = _mm_andnot_si128(device.rsp.cpu.vcoh, eq); - device.rsp.cpu.accl = _mm_blendv_epi8( - vte, - device.rsp.cpu.vpr[vs(opcode) as usize], - device.rsp.cpu.vccl, - ); - device.rsp.cpu.vcch = _mm_setzero_si128(); //unverified + device.rsp.cpu.accl = _mm_blendv_epi8(vte, vs_reg, device.rsp.cpu.vccl); + + device.rsp.cpu.vcch = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; @@ -572,17 +629,13 @@ pub fn veq(device: &mut device::Device, opcode: u32) { pub fn vne(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let (eq, ne); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - eq = _mm_cmpeq_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - ne = _mm_cmpeq_epi16(eq, _mm_setzero_si128()); - device.rsp.cpu.vccl = _mm_and_si128(device.rsp.cpu.vcoh, eq); - device.rsp.cpu.vccl = _mm_or_si128(device.rsp.cpu.vccl, ne); - device.rsp.cpu.accl = _mm_blendv_epi8( - vte, - device.rsp.cpu.vpr[vs(opcode) as usize], - device.rsp.cpu.vccl, - ); + let eq = _mm_cmpeq_epi16(vs_reg, vte); + let ne = _mm_cmpeq_epi16(eq, _mm_setzero_si128()); + device.rsp.cpu.vccl = _mm_or_si128(_mm_and_si128(device.rsp.cpu.vcoh, eq), ne); + device.rsp.cpu.accl = _mm_blendv_epi8(vte, vs_reg, device.rsp.cpu.vccl); + device.rsp.cpu.vcch = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); @@ -592,18 +645,16 @@ pub fn vne(device: &mut device::Device, opcode: u32) { pub fn vge(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let (mut eq, gt, es); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - eq = _mm_cmpeq_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - gt = _mm_cmpgt_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - es = _mm_and_si128(device.rsp.cpu.vcoh, device.rsp.cpu.vcol); - eq = _mm_andnot_si128(es, eq); - device.rsp.cpu.vccl = _mm_or_si128(gt, eq); - device.rsp.cpu.accl = _mm_blendv_epi8( - vte, - device.rsp.cpu.vpr[vs(opcode) as usize], - device.rsp.cpu.vccl, - ); + let eq = _mm_cmpeq_epi16(vs_reg, vte); + let gt = _mm_cmpgt_epi16(vs_reg, vte); + let es = _mm_and_si128(device.rsp.cpu.vcoh, device.rsp.cpu.vcol); + let eq_filtered = _mm_andnot_si128(es, eq); + + device.rsp.cpu.vccl = _mm_or_si128(gt, eq_filtered); + device.rsp.cpu.accl = _mm_blendv_epi8(vte, vs_reg, device.rsp.cpu.vccl); + device.rsp.cpu.vcch = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); @@ -613,41 +664,31 @@ pub fn vge(device: &mut device::Device, opcode: u32) { pub fn vcl(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let ( - mut nvt, - diff, - mut ncarry, - nvce, - diff0, - mut lec1, - mut lec2, - leeq, - mut geeq, - mut le, - mut ge, - mask, - ); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - nvt = _mm_xor_si128(vte, device.rsp.cpu.vcol); + let mut nvt = _mm_xor_si128(vte, device.rsp.cpu.vcol); nvt = _mm_sub_epi16(nvt, device.rsp.cpu.vcol); - diff = _mm_sub_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], nvt); - ncarry = _mm_adds_epu16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - ncarry = _mm_cmpeq_epi16(diff, ncarry); - nvce = _mm_cmpeq_epi16(device.rsp.cpu.vce, _mm_setzero_si128()); - diff0 = _mm_cmpeq_epi16(diff, _mm_setzero_si128()); - lec1 = _mm_and_si128(diff0, ncarry); - lec1 = _mm_and_si128(nvce, lec1); - lec2 = _mm_or_si128(diff0, ncarry); - lec2 = _mm_and_si128(device.rsp.cpu.vce, lec2); - leeq = _mm_or_si128(lec1, lec2); - geeq = _mm_subs_epu16(vte, device.rsp.cpu.vpr[vs(opcode) as usize]); - geeq = _mm_cmpeq_epi16(geeq, _mm_setzero_si128()); - le = _mm_andnot_si128(device.rsp.cpu.vcoh, device.rsp.cpu.vcol); - le = _mm_blendv_epi8(device.rsp.cpu.vccl, leeq, le); - ge = _mm_or_si128(device.rsp.cpu.vcol, device.rsp.cpu.vcoh); - ge = _mm_blendv_epi8(geeq, device.rsp.cpu.vcch, ge); - mask = _mm_blendv_epi8(ge, le, device.rsp.cpu.vcol); - device.rsp.cpu.accl = _mm_blendv_epi8(device.rsp.cpu.vpr[vs(opcode) as usize], nvt, mask); + let diff = _mm_sub_epi16(vs_reg, nvt); + + let ncarry = _mm_cmpeq_epi16(diff, _mm_adds_epu16(vs_reg, vte)); + let nvce = _mm_cmpeq_epi16(device.rsp.cpu.vce, _mm_setzero_si128()); + let diff0 = _mm_cmpeq_epi16(diff, _mm_setzero_si128()); + + let lec1 = _mm_and_si128(_mm_and_si128(diff0, ncarry), nvce); + let lec2 = _mm_and_si128(_mm_or_si128(diff0, ncarry), device.rsp.cpu.vce); + let leeq = _mm_or_si128(lec1, lec2); + + let geeq = _mm_cmpeq_epi16(_mm_subs_epu16(vte, vs_reg), _mm_setzero_si128()); + + let le_sel = _mm_andnot_si128(device.rsp.cpu.vcoh, device.rsp.cpu.vcol); + let le = _mm_blendv_epi8(device.rsp.cpu.vccl, leeq, le_sel); + + let ge_sel = _mm_or_si128(device.rsp.cpu.vcol, device.rsp.cpu.vcoh); + let ge = _mm_blendv_epi8(geeq, device.rsp.cpu.vcch, ge_sel); + + let mask = _mm_blendv_epi8(ge, le, device.rsp.cpu.vcol); + device.rsp.cpu.accl = _mm_blendv_epi8(vs_reg, nvt, mask); + device.rsp.cpu.vcch = ge; device.rsp.cpu.vccl = le; device.rsp.cpu.vcoh = _mm_setzero_si128(); @@ -659,50 +700,57 @@ pub fn vcl(device: &mut device::Device, opcode: u32) { pub fn vch(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let (mut nvt, diff, diff0, vtn, mut dlez, dgez, mask); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - device.rsp.cpu.vcol = _mm_xor_si128(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - device.rsp.cpu.vcol = _mm_cmplt_epi16(device.rsp.cpu.vcol, _mm_setzero_si128()); - nvt = _mm_xor_si128(vte, device.rsp.cpu.vcol); + device.rsp.cpu.vcol = _mm_cmplt_epi16(_mm_xor_si128(vs_reg, vte), _mm_setzero_si128()); + + let mut nvt = _mm_xor_si128(vte, device.rsp.cpu.vcol); nvt = _mm_sub_epi16(nvt, device.rsp.cpu.vcol); - diff = _mm_sub_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], nvt); - diff0 = _mm_cmpeq_epi16(diff, _mm_setzero_si128()); - vtn = _mm_cmplt_epi16(vte, _mm_setzero_si128()); - dlez = _mm_cmpgt_epi16(diff, _mm_setzero_si128()); - dgez = _mm_or_si128(dlez, diff0); - dlez = _mm_cmpeq_epi16(_mm_setzero_si128(), dlez); + let diff = _mm_sub_epi16(vs_reg, nvt); + let diff0 = _mm_cmpeq_epi16(diff, _mm_setzero_si128()); + let vtn = _mm_cmplt_epi16(vte, _mm_setzero_si128()); + + let dlez = _mm_cmpeq_epi16( + _mm_setzero_si128(), + _mm_cmpgt_epi16(diff, _mm_setzero_si128()), + ); + let dgez = _mm_or_si128(_mm_cmpgt_epi16(diff, _mm_setzero_si128()), diff0); + device.rsp.cpu.vcch = _mm_blendv_epi8(dgez, vtn, device.rsp.cpu.vcol); device.rsp.cpu.vccl = _mm_blendv_epi8(vtn, dlez, device.rsp.cpu.vcol); - device.rsp.cpu.vce = _mm_cmpeq_epi16(diff, device.rsp.cpu.vcol); - device.rsp.cpu.vce = _mm_and_si128(device.rsp.cpu.vce, device.rsp.cpu.vcol); - device.rsp.cpu.vcoh = _mm_or_si128(diff0, device.rsp.cpu.vce); - device.rsp.cpu.vcoh = _mm_cmpeq_epi16(device.rsp.cpu.vcoh, _mm_setzero_si128()); - mask = _mm_blendv_epi8( + device.rsp.cpu.vce = _mm_and_si128( + _mm_cmpeq_epi16(diff, device.rsp.cpu.vcol), + device.rsp.cpu.vcol, + ); + device.rsp.cpu.vcoh = + _mm_cmpeq_epi16(_mm_or_si128(diff0, device.rsp.cpu.vce), _mm_setzero_si128()); + + let mask = _mm_blendv_epi8( device.rsp.cpu.vcch, device.rsp.cpu.vccl, device.rsp.cpu.vcol, ); - device.rsp.cpu.accl = _mm_blendv_epi8(device.rsp.cpu.vpr[vs(opcode) as usize], nvt, mask); + device.rsp.cpu.accl = _mm_blendv_epi8(vs_reg, nvt, mask); device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } pub fn vcr(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let (mut sign, mut dlez, mut dgez, nvt, mask); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - sign = _mm_xor_si128(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - sign = _mm_srai_epi16(sign, 15); - dlez = _mm_and_si128(device.rsp.cpu.vpr[vs(opcode) as usize], sign); - dlez = _mm_add_epi16(dlez, vte); + let sign = _mm_srai_epi16(_mm_xor_si128(vs_reg, vte), 15); + let dlez = _mm_add_epi16(_mm_and_si128(vs_reg, sign), vte); device.rsp.cpu.vccl = _mm_srai_epi16(dlez, 15); - dgez = _mm_or_si128(device.rsp.cpu.vpr[vs(opcode) as usize], sign); - dgez = _mm_min_epi16(dgez, vte); + + let dgez = _mm_min_epi16(_mm_or_si128(vs_reg, sign), vte); device.rsp.cpu.vcch = _mm_cmpeq_epi16(dgez, vte); - nvt = _mm_xor_si128(vte, sign); - mask = _mm_blendv_epi8(device.rsp.cpu.vcch, device.rsp.cpu.vccl, sign); - device.rsp.cpu.accl = _mm_blendv_epi8(device.rsp.cpu.vpr[vs(opcode) as usize], nvt, mask); + + let nvt = _mm_xor_si128(vte, sign); + let mask = _mm_blendv_epi8(device.rsp.cpu.vcch, device.rsp.cpu.vccl, sign); + device.rsp.cpu.accl = _mm_blendv_epi8(vs_reg, nvt, mask); device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; + device.rsp.cpu.vcol = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vce = _mm_setzero_si128(); @@ -711,12 +759,9 @@ pub fn vcr(device: &mut device::Device, opcode: u32) { pub fn vmrg(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - device.rsp.cpu.accl = _mm_blendv_epi8( - vte, - device.rsp.cpu.vpr[vs(opcode) as usize], - device.rsp.cpu.vccl, - ); + device.rsp.cpu.accl = _mm_blendv_epi8(vte, vs_reg, device.rsp.cpu.vccl); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; @@ -725,75 +770,66 @@ pub fn vmrg(device: &mut device::Device, opcode: u32) { pub fn vand(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - device.rsp.cpu.accl = _mm_and_si128(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + device.rsp.cpu.accl = _mm_and_si128(vs_reg, vte); device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } pub fn vnand(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - device.rsp.cpu.accl = _mm_and_si128(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - device.rsp.cpu.accl = _mm_xor_si128(device.rsp.cpu.accl, _mm_set1_epi32(-1)); + let and_result = _mm_and_si128(vs_reg, vte); + device.rsp.cpu.accl = _mm_xor_si128(and_result, _mm_set1_epi32(-1)); device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } pub fn vor(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - device.rsp.cpu.accl = _mm_or_si128(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + device.rsp.cpu.accl = _mm_or_si128(vs_reg, vte); device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } pub fn vnor(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - device.rsp.cpu.accl = _mm_or_si128(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - device.rsp.cpu.accl = _mm_xor_si128(device.rsp.cpu.accl, _mm_set1_epi32(-1)); + let or_result = _mm_or_si128(vs_reg, vte); + device.rsp.cpu.accl = _mm_xor_si128(or_result, _mm_set1_epi32(-1)); device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } pub fn vxor(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - device.rsp.cpu.accl = _mm_xor_si128(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + device.rsp.cpu.accl = _mm_xor_si128(vs_reg, vte); device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } pub fn vnxor(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); + let vs_reg = device.rsp.cpu.vpr[vs(opcode) as usize]; unsafe { - device.rsp.cpu.accl = _mm_xor_si128(device.rsp.cpu.vpr[vs(opcode) as usize], vte); - device.rsp.cpu.accl = _mm_xor_si128(device.rsp.cpu.accl, _mm_set1_epi32(-1)); + let xor_result = _mm_xor_si128(vs_reg, vte); + device.rsp.cpu.accl = _mm_xor_si128(xor_result, _mm_set1_epi32(-1)); device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } pub fn vrcp(device: &mut device::Device, opcode: u32) { - let mut result; let vte = vte(device, vt(opcode), ve(opcode) as usize); let input = get_vpr16(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32; - let mask = input >> 31; - let mut data = input ^ mask; - if input > -32768 { - data -= mask - } - if data == 0 { - result = 0x7fffffff - } else if input == -32768 { - result = 0xffff0000 - } else { - let shift = (data as u32).leading_zeros(); - let index = (((data as u64) << shift) & 0x7fc00000) >> 22; - result = device.rsp.cpu.reciprocals[index as usize] as u32; - result = (0x10000 | result) << 14; - result = (result >> (31 - shift)) ^ mask as u32 - } + let result = compute_reciprocal(input, &device.rsp.cpu.reciprocals); + device.rsp.cpu.divdp = false; device.rsp.cpu.divout = (result >> 16) as i16; device.rsp.cpu.accl = vte; @@ -805,7 +841,6 @@ pub fn vrcp(device: &mut device::Device, opcode: u32) { } pub fn vrcpl(device: &mut device::Device, opcode: u32) { - let mut result; let vte = vte(device, vt(opcode), ve(opcode) as usize); let input = if device.rsp.cpu.divdp { ((device.rsp.cpu.divin as i32) << 16) @@ -813,22 +848,8 @@ pub fn vrcpl(device: &mut device::Device, opcode: u32) { } else { get_vpr16(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32 }; - let mask = input >> 31; - let mut data = input ^ mask; - if input > -32768 { - data -= mask - } - if data == 0 { - result = 0x7fffffff - } else if input == -32768 { - result = 0xffff0000 - } else { - let shift = (data as u32).leading_zeros(); - let index = (((data as u64) << shift) & 0x7fc00000) >> 22; - result = device.rsp.cpu.reciprocals[index as usize] as u32; - result = (0x10000 | result) << 14; - result = (result >> (31 - shift)) ^ mask as u32 - } + let result = compute_reciprocal(input, &device.rsp.cpu.reciprocals); + device.rsp.cpu.divdp = false; device.rsp.cpu.divout = (result >> 16) as i16; device.rsp.cpu.accl = vte; @@ -841,50 +862,31 @@ pub fn vrcpl(device: &mut device::Device, opcode: u32) { pub fn vrcph(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); + let vt_reg = device.rsp.cpu.vpr[vt(opcode) as usize]; + let vd_reg = &mut device.rsp.cpu.vpr[vd(opcode) as usize]; + device.rsp.cpu.accl = vte; device.rsp.cpu.divdp = true; + device.rsp.cpu.divin = get_vpr16(vt_reg, ve(opcode) as u8) as i16; - device.rsp.cpu.divin = - get_vpr16(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16; - modify_vpr16( - &mut device.rsp.cpu.vpr[vd(opcode) as usize], - de(opcode) as u8, - device.rsp.cpu.divout as u16, - ); + modify_vpr16(vd_reg, de(opcode) as u8, device.rsp.cpu.divout as u16); } pub fn vmov(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let value = get_vpr16(vte, de(opcode) as u8); - modify_vpr16( - &mut device.rsp.cpu.vpr[vd(opcode) as usize], - de(opcode) as u8, - value, - ); + let vd_reg = &mut device.rsp.cpu.vpr[vd(opcode) as usize]; + let de_index = de(opcode) as u8; + + let value = get_vpr16(vte, de_index); + modify_vpr16(vd_reg, de_index, value); device.rsp.cpu.accl = vte; } pub fn vrsq(device: &mut device::Device, opcode: u32) { - let mut result; let vte = vte(device, vt(opcode), ve(opcode) as usize); let input = get_vpr16(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32; - let mask = input >> 31; - let mut data = input ^ mask; - if input > -32768 { - data -= mask - } - if data == 0 { - result = 0x7fffffff - } else if input == -32768 { - result = 0xffff0000 - } else { - let shift = (data as u32).leading_zeros(); - let index = (((data as u64) << shift) & 0x7fc00000) as u32 >> 22; - result = - (device.rsp.cpu.inverse_square_roots[((index & 0x1fe) | (shift & 1)) as usize]) as u32; - result = (0x10000 | result) << 14; - result = (result >> ((31 - shift) >> 1)) ^ mask as u32 - } + let result = compute_inverse_sqrt(input, &device.rsp.cpu.inverse_square_roots); + device.rsp.cpu.divdp = false; device.rsp.cpu.divout = (result >> 16) as i16; device.rsp.cpu.accl = vte; @@ -896,7 +898,6 @@ pub fn vrsq(device: &mut device::Device, opcode: u32) { } pub fn vrsql(device: &mut device::Device, opcode: u32) { - let mut result; let vte = vte(device, vt(opcode), ve(opcode) as usize); let input = if device.rsp.cpu.divdp { ((device.rsp.cpu.divin as i32) << 16) @@ -904,23 +905,8 @@ pub fn vrsql(device: &mut device::Device, opcode: u32) { } else { get_vpr16(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32 }; - let mask = input >> 31; - let mut data = input ^ mask; - if input > -32768 { - data -= mask - } - if data == 0 { - result = 0x7fffffff - } else if input == -32768 { - result = 0xffff0000 - } else { - let shift = (data as u32).leading_zeros(); - let index = (((data as u64) << shift) & 0x7fc00000) as u32 >> 22; - result = - (device.rsp.cpu.inverse_square_roots[((index & 0x1fe) | (shift & 1)) as usize]) as u32; - result = (0x10000 | result) << 14; - result = (result >> ((31 - shift) >> 1)) ^ mask as u32 - } + let result = compute_inverse_sqrt(input, &device.rsp.cpu.inverse_square_roots); + device.rsp.cpu.divdp = false; device.rsp.cpu.divout = (result >> 16) as i16; device.rsp.cpu.accl = vte; @@ -933,16 +919,14 @@ pub fn vrsql(device: &mut device::Device, opcode: u32) { pub fn vrsqh(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); + let vt_reg = device.rsp.cpu.vpr[vt(opcode) as usize]; + let vd_reg = &mut device.rsp.cpu.vpr[vd(opcode) as usize]; + device.rsp.cpu.accl = vte; device.rsp.cpu.divdp = true; + device.rsp.cpu.divin = get_vpr16(vt_reg, ve(opcode) as u8) as i16; - device.rsp.cpu.divin = - get_vpr16(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16; - modify_vpr16( - &mut device.rsp.cpu.vpr[vd(opcode) as usize], - de(opcode) as u8, - device.rsp.cpu.divout as u16, - ); + modify_vpr16(vd_reg, de(opcode) as u8, device.rsp.cpu.divout as u16); } pub fn vnop(_device: &mut device::Device, _opcode: u32) {} From 100238f1981a7c9142408bb3dbc6358d4a880114 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 15 Sep 2025 18:26:45 +0200 Subject: [PATCH 0586/1117] optimize some reads/writes (#571) --- src/device/rsp_su_instructions.rs | 181 +++++++++++++++++++++++------- 1 file changed, 138 insertions(+), 43 deletions(-) diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index 5694b2f..b6ae19c 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -304,25 +304,44 @@ pub fn lh(device: &mut device::Device, opcode: u32) { let address = device.rsp.cpu.gpr[rs(opcode) as usize].wrapping_add(imm(opcode) as i16 as i32 as u32); - let mut w = [0; 2]; - w[0] = device.rsp.mem[address as usize & 0xFFF]; - w[1] = device.rsp.mem[(address as usize + 1) & 0xFFF]; + // Optimize for aligned access when possible + let addr_masked = address as usize & 0xFFF; + let value = if addr_masked <= 0xFFE { + u16::from_be_bytes( + device.rsp.mem[addr_masked..addr_masked + 2] + .try_into() + .unwrap(), + ) + } else { + let w0 = device.rsp.mem[addr_masked]; + let w1 = device.rsp.mem[(addr_masked + 1) & 0xFFF]; + ((w0 as u16) << 8) | w1 as u16 + }; - device.rsp.cpu.gpr[rt(opcode) as usize] = - (((w[0] as u16) << 8) | w[1] as u16) as i16 as i32 as u32 + device.rsp.cpu.gpr[rt(opcode) as usize] = value as i16 as i32 as u32; } pub fn lw(device: &mut device::Device, opcode: u32) { let address = device.rsp.cpu.gpr[rs(opcode) as usize].wrapping_add(imm(opcode) as i16 as i32 as u32); - let mut w = [0; 4]; - for (i, item) in w.iter_mut().enumerate() { - *item = device.rsp.mem[(address as usize + i) & 0xFFF]; - } + // Optimize for aligned access when possible + let addr_masked = address as usize & 0xFFF; + let value = if addr_masked <= 0xFFC { + u32::from_be_bytes( + device.rsp.mem[addr_masked..addr_masked + 4] + .try_into() + .unwrap(), + ) + } else { + let mut value = 0; + for i in 0..4 { + value |= (device.rsp.mem[(address as usize + i) & 0xFFF] as u32) << (8 * (3 - i)); + } + value + }; - device.rsp.cpu.gpr[rt(opcode) as usize] = - ((w[0] as u32) << 24) | ((w[1] as u32) << 16) | ((w[2] as u32) << 8) | (w[3] as u32) + device.rsp.cpu.gpr[rt(opcode) as usize] = value; } pub fn lbu(device: &mut device::Device, opcode: u32) { @@ -336,24 +355,44 @@ pub fn lhu(device: &mut device::Device, opcode: u32) { let address = device.rsp.cpu.gpr[rs(opcode) as usize].wrapping_add(imm(opcode) as i16 as i32 as u32); - let mut w = [0; 2]; - w[0] = device.rsp.mem[address as usize & 0xFFF]; - w[1] = device.rsp.mem[(address as usize + 1) & 0xFFF]; + // Optimize for aligned access when possible + let addr_masked = address as usize & 0xFFF; + let value = if addr_masked <= 0xFFE { + u16::from_be_bytes( + device.rsp.mem[addr_masked..addr_masked + 2] + .try_into() + .unwrap(), + ) + } else { + let w0 = device.rsp.mem[addr_masked]; + let w1 = device.rsp.mem[(addr_masked + 1) & 0xFFF]; + ((w0 as u16) << 8) | w1 as u16 + }; - device.rsp.cpu.gpr[rt(opcode) as usize] = (((w[0] as u16) << 8) | w[1] as u16) as u32 + device.rsp.cpu.gpr[rt(opcode) as usize] = value as u32; } pub fn lwu(device: &mut device::Device, opcode: u32) { let address = device.rsp.cpu.gpr[rs(opcode) as usize].wrapping_add(imm(opcode) as i16 as i32 as u32); - let mut w = [0; 4]; - for (i, item) in w.iter_mut().enumerate() { - *item = device.rsp.mem[(address as usize + i) & 0xFFF]; - } + // Optimize for aligned access when possible + let addr_masked = address as usize & 0xFFF; + let value = if addr_masked <= 0xFFC { + u32::from_be_bytes( + device.rsp.mem[addr_masked..addr_masked + 4] + .try_into() + .unwrap(), + ) + } else { + let mut value = 0; + for i in 0..4 { + value |= (device.rsp.mem[(address as usize + i) & 0xFFF] as u32) << (8 * (3 - i)); + } + value + }; - device.rsp.cpu.gpr[rt(opcode) as usize] = - ((w[0] as u32) << 24) | ((w[1] as u32) << 16) | ((w[2] as u32) << 8) | (w[3] as u32) + device.rsp.cpu.gpr[rt(opcode) as usize] = value; } pub fn sb(device: &mut device::Device, opcode: u32) { @@ -367,18 +406,30 @@ pub fn sh(device: &mut device::Device, opcode: u32) { let address = device.rsp.cpu.gpr[rs(opcode) as usize].wrapping_add(imm(opcode) as i16 as i32 as u32); - device.rsp.mem[address as usize & 0xFFF] = (device.rsp.cpu.gpr[rt(opcode) as usize] >> 8) as u8; - device.rsp.mem[(address as usize + 1) & 0xFFF] = - (device.rsp.cpu.gpr[rt(opcode) as usize]) as u8; + let addr_masked = address as usize & 0xFFF; + let value = device.rsp.cpu.gpr[rt(opcode) as usize] as u16; + // Optimize for aligned access when possible + if addr_masked <= 0xFFE { + device.rsp.mem[addr_masked..addr_masked + 2].copy_from_slice(&value.to_be_bytes()); + } else { + device.rsp.mem[addr_masked] = (value >> 8) as u8; + device.rsp.mem[(addr_masked + 1) & 0xFFF] = value as u8; + } } pub fn sw(device: &mut device::Device, opcode: u32) { let address = device.rsp.cpu.gpr[rs(opcode) as usize].wrapping_add(imm(opcode) as i16 as i32 as u32); - for i in 0..4 { - device.rsp.mem[(address as usize + i) & 0xFFF] = - (device.rsp.cpu.gpr[rt(opcode) as usize] >> ((3 - i) * 8)) as u8; + let addr_masked = address as usize & 0xFFF; + let value = device.rsp.cpu.gpr[rt(opcode) as usize]; + // Optimize for aligned access when possible + if addr_masked <= 0xFFC { + device.rsp.mem[addr_masked..addr_masked + 4].copy_from_slice(&value.to_be_bytes()); + } else { + for i in 0..4 { + device.rsp.mem[(address as usize + i) & 0xFFF] = (value >> ((3 - i) * 8)) as u8; + } } } @@ -737,10 +788,21 @@ pub fn llv(device: &mut device::Device, opcode: u32) { let mut element = velement(opcode); if element.is_multiple_of(4) { - let mut value = 0; - for i in 0..4 { - value |= (device.rsp.mem[((address + i) & 0xFFF) as usize] as u32) << (8 * (3 - i)); - } + // Optimize for aligned access when possible + let addr_masked = address as usize & 0xFFF; + let value = if addr_masked <= 0xFFC { + u32::from_be_bytes( + device.rsp.mem[addr_masked..addr_masked + 4] + .try_into() + .unwrap(), + ) + } else { + let mut value = 0; + for i in 0..4 { + value |= (device.rsp.mem[(address as usize + i) & 0xFFF] as u32) << (8 * (3 - i)); + } + value + }; modify_vpr32( &mut device.rsp.cpu.vpr[rt(opcode) as usize], element / 4, @@ -767,10 +829,21 @@ pub fn ldv(device: &mut device::Device, opcode: u32) { let mut element = velement(opcode); if element.is_multiple_of(8) { - let mut value = 0; - for i in 0..8 { - value |= (device.rsp.mem[((address + i) & 0xFFF) as usize] as u64) << (8 * (7 - i)); - } + // Optimize for aligned access when possible + let addr_masked = address as usize & 0xFFF; + let value = if addr_masked <= 0xFF8 { + u64::from_be_bytes( + device.rsp.mem[addr_masked..addr_masked + 8] + .try_into() + .unwrap(), + ) + } else { + let mut value = 0; + for i in 0..8 { + value |= (device.rsp.mem[(address as usize + i) & 0xFFF] as u64) << (8 * (7 - i)); + } + value + }; modify_vpr64( &mut device.rsp.cpu.vpr[rt(opcode) as usize], element / 8, @@ -797,10 +870,21 @@ pub fn lqv(device: &mut device::Device, opcode: u32) { let mut element = velement(opcode); if element == 0 && address.is_multiple_of(16) { - let mut value = 0; - for i in 0..16 { - value |= (device.rsp.mem[((address + i) & 0xFFF) as usize] as u128) << (8 * (15 - i)); - } + // Optimize for aligned 16-byte access + let addr_masked = address as usize & 0xFFF; + let value = if addr_masked <= 0xFF0 { + u128::from_be_bytes( + device.rsp.mem[addr_masked..addr_masked + 16] + .try_into() + .unwrap(), + ) + } else { + let mut value = 0; + for i in 0..16 { + value |= (device.rsp.mem[(address as usize + i) & 0xFFF] as u128) << (8 * (15 - i)); + } + value + }; modify_vpr128(&mut device.rsp.cpu.vpr[rt(opcode) as usize], value); } else { let end = std::cmp::min(16 + element - ((address & 15) as u8), 16); @@ -823,10 +907,21 @@ pub fn lrv(device: &mut device::Device, opcode: u32) { let mut element = 16u8.wrapping_sub(((address & 15) as u8).wrapping_sub(velement(opcode))); address &= !15; if element == 0 { - let mut value = 0; - for i in 0..16 { - value |= (device.rsp.mem[((address + i) & 0xFFF) as usize] as u128) << (8 * (15 - i)); - } + // Optimize for aligned 16-byte access + let addr_masked = address as usize & 0xFFF; + let value = if addr_masked <= 0xFF0 { + u128::from_be_bytes( + device.rsp.mem[addr_masked..addr_masked + 16] + .try_into() + .unwrap(), + ) + } else { + let mut value = 0; + for i in 0..16 { + value |= (device.rsp.mem[(address as usize + i) & 0xFFF] as u128) << (8 * (15 - i)); + } + value + }; modify_vpr128(&mut device.rsp.cpu.vpr[rt(opcode) as usize], value); } else { while element < 16 { From f6d67462079a6deb44b17373a5dfe5050959a1fd Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 15 Sep 2025 18:32:25 +0200 Subject: [PATCH 0587/1117] use addr_masked --- src/device/rsp_su_instructions.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index b6ae19c..2a2311a 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -336,7 +336,7 @@ pub fn lw(device: &mut device::Device, opcode: u32) { } else { let mut value = 0; for i in 0..4 { - value |= (device.rsp.mem[(address as usize + i) & 0xFFF] as u32) << (8 * (3 - i)); + value |= (device.rsp.mem[(addr_masked + i) & 0xFFF] as u32) << (8 * (3 - i)); } value }; @@ -387,7 +387,7 @@ pub fn lwu(device: &mut device::Device, opcode: u32) { } else { let mut value = 0; for i in 0..4 { - value |= (device.rsp.mem[(address as usize + i) & 0xFFF] as u32) << (8 * (3 - i)); + value |= (device.rsp.mem[(addr_masked + i) & 0xFFF] as u32) << (8 * (3 - i)); } value }; @@ -428,7 +428,7 @@ pub fn sw(device: &mut device::Device, opcode: u32) { device.rsp.mem[addr_masked..addr_masked + 4].copy_from_slice(&value.to_be_bytes()); } else { for i in 0..4 { - device.rsp.mem[(address as usize + i) & 0xFFF] = (value >> ((3 - i) * 8)) as u8; + device.rsp.mem[(addr_masked + i) & 0xFFF] = (value >> ((3 - i) * 8)) as u8; } } } @@ -799,7 +799,7 @@ pub fn llv(device: &mut device::Device, opcode: u32) { } else { let mut value = 0; for i in 0..4 { - value |= (device.rsp.mem[(address as usize + i) & 0xFFF] as u32) << (8 * (3 - i)); + value |= (device.rsp.mem[(addr_masked + i) & 0xFFF] as u32) << (8 * (3 - i)); } value }; @@ -840,7 +840,7 @@ pub fn ldv(device: &mut device::Device, opcode: u32) { } else { let mut value = 0; for i in 0..8 { - value |= (device.rsp.mem[(address as usize + i) & 0xFFF] as u64) << (8 * (7 - i)); + value |= (device.rsp.mem[(addr_masked + i) & 0xFFF] as u64) << (8 * (7 - i)); } value }; @@ -881,7 +881,7 @@ pub fn lqv(device: &mut device::Device, opcode: u32) { } else { let mut value = 0; for i in 0..16 { - value |= (device.rsp.mem[(address as usize + i) & 0xFFF] as u128) << (8 * (15 - i)); + value |= (device.rsp.mem[(addr_masked + i) & 0xFFF] as u128) << (8 * (15 - i)); } value }; @@ -918,7 +918,7 @@ pub fn lrv(device: &mut device::Device, opcode: u32) { } else { let mut value = 0; for i in 0..16 { - value |= (device.rsp.mem[(address as usize + i) & 0xFFF] as u128) << (8 * (15 - i)); + value |= (device.rsp.mem[(addr_masked + i) & 0xFFF] as u128) << (8 * (15 - i)); } value }; From e374825d5e3bdbfaf62b9219e952cc51065f84d9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 15 Sep 2025 19:23:21 +0200 Subject: [PATCH 0588/1117] add release-with-debug profile --- Cargo.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index df17889..e4355b4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -45,3 +45,7 @@ cc = { version = "1.2", features = ["parallel"] } [profile.release] panic = "abort" lto = "thin" + +[profile.release-with-debug] +inherits = "release" +debug = true From d6e6a168145be4db1c6020e4e690ebde23a76a44 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 16 Sep 2025 10:02:07 +0200 Subject: [PATCH 0589/1117] reset device.rdp.last_status_value --- src/device/rsp_interface.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index 083580a..cf3f09d 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -464,6 +464,7 @@ fn update_sp_status(device: &mut device::Device, w: u32) { fn do_task(device: &mut device::Device) { device.rsp.cpu.sync_point = false; device.rsp.last_status_value = 0; + device.rdp.last_status_value = 0; if device.rsp.regs[SP_DMA_BUSY_REG as usize] == 1 { device.rsp.run_after_dma = true } else { From 0605967c286b0d4d0ae32a72f9d7405ce5f56b2d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 16 Sep 2025 11:39:23 +0200 Subject: [PATCH 0590/1117] modify rsp sync points --- src/device/rsp_interface.rs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index cf3f09d..34d169e 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -219,6 +219,8 @@ fn fifo_push(device: &mut device::Device, dir: DmaDir) { panic!("RSP DMA already full") } + device.rsp.cpu.sync_point = true; + if device.rsp.regs[SP_DMA_BUSY_REG as usize] != 0 { device.rsp.fifo[1].dir = dir; if dir == DmaDir::Read { @@ -276,21 +278,20 @@ pub fn read_regs( } let reg = (address & 0xFFFF) >> 2; match reg as u32 { - SP_DMA_BUSY_REG | SP_DMA_FULL_REG => { - if device.rsp.regs[reg as usize] != 0 { - device.rsp.cpu.sync_point = true; - } - device.rsp.regs[reg as usize] - } SP_STATUS_REG => { let value = device.rsp.regs[reg as usize] - & !(SP_STATUS_HALT | SP_STATUS_BROKE | SP_STATUS_INTR_BREAK); + & (SP_STATUS_SIG0 + | SP_STATUS_SIG1 + | SP_STATUS_SIG2 + | SP_STATUS_SIG3 + | SP_STATUS_SIG4 + | SP_STATUS_SIG5 + | SP_STATUS_SIG6 + | SP_STATUS_SIG7); if value == device.rsp.last_status_value && value != 0 { device.rsp.cpu.sync_point = true; } - if value & (SP_STATUS_DMA_BUSY | SP_STATUS_DMA_FULL) != 0 { - device.rsp.cpu.sync_point = true; - } + device.rsp.last_status_value = value; device.rsp.regs[reg as usize] } From a1917016105a8acfc14158b7fcd22835afd3e571 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 18 Sep 2025 22:46:22 +0200 Subject: [PATCH 0591/1117] update to rust 1.90 (#574) * update to rust 1.90 * more --- .cargo/config.toml | 2 +- Cargo.lock | 110 +++++++++++++++++++++++--------------------- Cargo.toml | 2 +- rust-toolchain.toml | 2 +- 4 files changed, 61 insertions(+), 55 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 7a6f5d3..dad6971 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,4 +1,4 @@ -[target.'cfg(target_os = "linux")'] +[target.'cfg(all(target_arch = "aarch64", target_os = "linux"))'] rustflags = ["-C", "link-arg=-fuse-ld=lld"] [target.'cfg(target_os = "windows")'] diff --git a/Cargo.lock b/Cargo.lock index 1c8a156..029fc11 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1812,7 +1812,7 @@ dependencies = [ "js-sys", "libc", "r-efi", - "wasi 0.14.5+wasi-0.2.4", + "wasi 0.14.7+wasi-0.2.4", "wasm-bindgen", ] @@ -2096,6 +2096,12 @@ dependencies = [ "rayon", ] +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" + [[package]] name = "heapless" version = "0.7.17" @@ -2224,9 +2230,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" dependencies = [ "base64", "bytes", @@ -2645,12 +2651,12 @@ checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" [[package]] name = "indexmap" -version = "2.11.1" +version = "2.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "206a8042aec68fa4a62e8d3f7aa4ceb508177d9324faf261e1959e495b7a1921" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", - "hashbrown 0.15.5", + "hashbrown 0.16.0", ] [[package]] @@ -2801,9 +2807,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.78" +version = "0.3.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738" +checksum = "852f13bec5eba4ba9afbeb93fd7c13fe56147f055939ae21c43a29a0ecb2702e" dependencies = [ "once_cell", "wasm-bindgen", @@ -4063,11 +4069,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit 0.22.27", + "toml_edit 0.23.6", ] [[package]] @@ -4650,9 +4656,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.5" +version = "0.103.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a37813727b78798e53c2bec3f5e8fe12a6d6f8389bf9ca7802add4c9905ad8" +checksum = "8572f3c2cb9934231157b45499fc41e1f58c589fdfb81a844ba873265e80f8eb" dependencies = [ "ring", "rustls-pki-types", @@ -4772,9 +4778,9 @@ checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] name = "serde" -version = "1.0.223" +version = "1.0.225" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a505d71960adde88e293da5cb5eda57093379f64e61cf77bf0e6a63af07a7bac" +checksum = "fd6c24dee235d0da097043389623fb913daddf92c76e9f5a1db88607a0bcbd1d" dependencies = [ "serde_core", "serde_derive", @@ -4791,18 +4797,18 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.223" +version = "1.0.225" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20f57cbd357666aa7b3ac84a90b4ea328f1d4ddb6772b430caa5d9e1309bb9e9" +checksum = "659356f9a0cb1e529b24c01e43ad2bdf520ec4ceaf83047b83ddcc2251f96383" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.223" +version = "1.0.225" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d428d07faf17e306e699ec1e91996e5a165ba5d6bce5b5155173e91a8a01a56" +checksum = "0ea936adf78b1f766949a4977b91d2f5595825bd6ec079aa9543ad2685fc4516" dependencies = [ "proc-macro2", "quote", @@ -4998,7 +5004,7 @@ dependencies = [ "derive_more", "i-slint-compiler", "spin_on", - "toml_edit 0.23.4", + "toml_edit 0.23.6", ] [[package]] @@ -5501,9 +5507,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.2" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +checksum = "05f63835928ca123f1bef57abbcd23bb2ba0ac9ae1235f1e65bda0d06e7786bd" dependencies = [ "rustls", "tokio", @@ -5557,11 +5563,11 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" +checksum = "32f1085dec27c2b6632b04c80b3bb1b4300d6495d1e129693bdda7d91e72eec1" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -5580,12 +5586,12 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.23.4" +version = "0.23.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7211ff1b8f0d3adae1663b7da9ffe396eabe1ca25f0b0bee42b0da29a9ddce93" +checksum = "f3effe7c0e86fdff4f69cdd2ccc1b96f933e24811c5441d44904e8683e27184b" dependencies = [ "indexmap", - "toml_datetime 0.7.0", + "toml_datetime 0.7.2", "toml_parser", "toml_writer", "winnow", @@ -5593,9 +5599,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b551886f449aa90d4fe2bdaa9f4a2577ad2dde302c61ecf262d80b116db95c10" +checksum = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627" dependencies = [ "winnow", ] @@ -5608,9 +5614,9 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "toml_writer" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64" +checksum = "d163a63c116ce562a22cda521fcc4d79152e7aba014456fb5eb442f6d6a10109" [[package]] name = "tower" @@ -5967,27 +5973,27 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.5+wasi-0.2.4" +version = "0.14.7+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4494f6290a82f5fe584817a676a34b9d6763e8d9d18204009fb31dceca98fd4" +checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" dependencies = [ "wasip2", ] [[package]] name = "wasip2" -version = "1.0.0+wasi-0.2.4" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03fa2761397e5bd52002cd7e73110c71af2109aca4e521a9f40473fe685b0a24" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.101" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b" +checksum = "ab10a69fbd0a177f5f649ad4d8d3305499c42bab9aef2f7ff592d0ec8f833819" dependencies = [ "cfg-if", "once_cell", @@ -5998,9 +6004,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.101" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb" +checksum = "0bb702423545a6007bbc368fde243ba47ca275e549c8a28617f56f6ba53b1d1c" dependencies = [ "bumpalo", "log", @@ -6012,9 +6018,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.51" +version = "0.4.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca85039a9b469b38336411d6d6ced91f3fc87109a2a27b0c197663f5144dffe" +checksum = "a0b221ff421256839509adbb55998214a70d829d3a28c69b4a6672e9d2a42f67" dependencies = [ "cfg-if", "js-sys", @@ -6025,9 +6031,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.101" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d" +checksum = "fc65f4f411d91494355917b605e1480033152658d71f722a90647f56a70c88a0" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6035,9 +6041,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.101" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" +checksum = "ffc003a991398a8ee604a401e194b6b3a39677b3173d6e74495eb51b82e99a32" dependencies = [ "proc-macro2", "quote", @@ -6048,9 +6054,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.101" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1" +checksum = "293c37f4efa430ca14db3721dfbe48d8c33308096bd44d80ebaa775ab71ba1cf" dependencies = [ "unicode-ident", ] @@ -6166,9 +6172,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.78" +version = "0.3.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e4b637749ff0d92b8fad63aa1f7cff3cbe125fd49c175cd6345e7272638b12" +checksum = "fbe734895e869dc429d78c4b433f8d17d95f8d05317440b4fad5ab2d33e596dc" dependencies = [ "js-sys", "wasm-bindgen", @@ -6904,9 +6910,9 @@ dependencies = [ [[package]] name = "wit-bindgen" -version = "0.45.1" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c573471f125075647d03df72e026074b7203790d41351cd6edc96f46bcccd36" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "writeable" diff --git a/Cargo.toml b/Cargo.toml index e4355b4..c11659e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "gopher64" version = "1.1.6" edition = "2024" -rust-version = "1.89" +rust-version = "1.90" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/rust-toolchain.toml b/rust-toolchain.toml index b67e7d5..ff100ed 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.89.0" +channel = "1.90.0" From 2b93fb8aa1e94ee77ac571b691ec6d854d425e2e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 19 Sep 2025 11:32:48 +0200 Subject: [PATCH 0592/1117] re-add framebuffer tracking (#573) --- build.rs | 1 + parallel-rdp/interface.cpp | 130 +++++++++++++++++++++++++++++++++++- parallel-rdp/interface.hpp | 1 + src/device/pi.rs | 4 ++ src/device/rdram.rs | 5 ++ src/device/rsp_interface.rs | 2 + src/device/si.rs | 3 + src/ui/video.rs | 4 ++ 8 files changed, 148 insertions(+), 2 deletions(-) diff --git a/build.rs b/build.rs index 399adf9..7b24100 100644 --- a/build.rs +++ b/build.rs @@ -117,6 +117,7 @@ fn main() { .allowlist_function("rdp_onscreen_message") .allowlist_function("rdp_check_callback") .allowlist_function("rdp_new_processor") + .allowlist_function("rdp_check_framebuffers") .allowlist_function("rdp_state_size") .allowlist_function("rdp_save_state") .allowlist_function("rdp_load_state") diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 5aa7aa0..152f1f3 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -53,12 +53,26 @@ enum vi_registers VI_REGS_COUNT }; +typedef struct +{ + uint32_t depthbuffer_address; + uint32_t framebuffer_address; + uint32_t framebuffer_y_offset; + uint32_t texture_address; + uint32_t framebuffer_pixel_size; + uint32_t framebuffer_width; + uint32_t texture_pixel_size; + uint32_t texture_width; + uint32_t framebuffer_height; +} FrameBufferInfo; + typedef struct { uint32_t cmd_data[0x00040000 >> 2]; int cmd_cur; int cmd_ptr; uint32_t region; + FrameBufferInfo frame_buffer_info; } RDP_DEVICE; static SDL_Window *window; @@ -73,6 +87,9 @@ static GFX_INFO gfx_info; static const uint32_t *fragment_spirv; static size_t fragment_size; +std::vector rdram_dirty; +uint64_t sync_signal; + static TTF_Font *message_font; static std::queue messages; static uint64_t message_timer; @@ -238,6 +255,9 @@ void rdp_new_processor(GFX_INFO _gfx_info) { gfx_info = _gfx_info; + sync_signal = 0; + rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); + if (processor) { delete processor; @@ -544,6 +564,27 @@ CALL_BACK rdp_check_callback() return return_value; } +void rdp_check_framebuffers(uint32_t address, uint32_t length) +{ + if (sync_signal) + { + address >>= 3; + length = (length + 7) >> 3; + for (uint32_t i = 0; i < length; i++) + { + if (address + i >= rdram_dirty.size()) + return; + if (rdram_dirty[address + i]) + { + processor->wait_for_timeline(sync_signal); + rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); + sync_signal = 0; + return; + } + } + } +} + size_t rdp_state_size() { return sizeof(RDP_DEVICE); @@ -551,6 +592,7 @@ size_t rdp_state_size() void rdp_save_state(uint8_t *state) { + processor->wait_for_timeline(processor->signal_timeline()); memcpy(state, &rdp_device, sizeof(RDP_DEVICE)); } @@ -566,6 +608,24 @@ void rdp_onscreen_message(const char *_message) messages.push(_message); } +uint32_t pixel_size(uint32_t pixel_type, uint32_t area) +{ + switch (pixel_type) + { + case 0: + return area / 2; + case 1: + return area; + case 2: + return area * 2; + case 3: + return area * 4; + default: + printf("Invalid pixel size: %u\n", pixel_type); + return 0; + } +} + uint64_t rdp_process_commands() { uint64_t interrupt_timer = 0; @@ -629,6 +689,69 @@ uint64_t rdp_process_commands() switch (RDP::Op(command)) { + case RDP::Op::FillZBufferTriangle: + case RDP::Op::TextureZBufferTriangle: + case RDP::Op::ShadeZBufferTriangle: + case RDP::Op::ShadeTextureZBufferTriangle: + { + uint32_t offset_address = (rdp_device.frame_buffer_info.depthbuffer_address + pixel_size(2, rdp_device.frame_buffer_info.framebuffer_y_offset * rdp_device.frame_buffer_info.framebuffer_width)) >> 3; + if (offset_address < rdram_dirty.size() && !rdram_dirty[offset_address]) + { + std::fill_n(rdram_dirty.begin() + offset_address, (pixel_size(2, rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height) + 7) >> 3, true); + } + } + case RDP::Op::FillTriangle: + case RDP::Op::TextureTriangle: + case RDP::Op::ShadeTriangle: + case RDP::Op::ShadeTextureTriangle: + case RDP::Op::TextureRectangle: + case RDP::Op::TextureRectangleFlip: + case RDP::Op::FillRectangle: + { + uint32_t offset_address = (rdp_device.frame_buffer_info.framebuffer_address + pixel_size(rdp_device.frame_buffer_info.framebuffer_pixel_size, rdp_device.frame_buffer_info.framebuffer_y_offset * rdp_device.frame_buffer_info.framebuffer_width)) >> 3; + if (offset_address < rdram_dirty.size() && !rdram_dirty[offset_address]) + { + std::fill_n(rdram_dirty.begin() + offset_address, (pixel_size(rdp_device.frame_buffer_info.framebuffer_pixel_size, rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height) + 7) >> 3, true); + } + } + break; + case RDP::Op::LoadTLut: + case RDP::Op::LoadTile: + { + uint32_t upper_left_t = (w1 & 0xFFF) >> 2; + uint32_t offset_address = (rdp_device.frame_buffer_info.texture_address + pixel_size(rdp_device.frame_buffer_info.texture_pixel_size, upper_left_t * rdp_device.frame_buffer_info.texture_width)) >> 3; + if (offset_address < rdram_dirty.size() && !rdram_dirty[offset_address]) + { + uint32_t lower_right_t = (w2 & 0xFFF) >> 2; + std::fill_n(rdram_dirty.begin() + offset_address, (pixel_size(rdp_device.frame_buffer_info.texture_pixel_size, (lower_right_t - upper_left_t) * rdp_device.frame_buffer_info.texture_width) + 7) >> 3, true); + } + } + break; + case RDP::Op::LoadBlock: + { + uint32_t upper_left_s = ((w1 >> 12) & 0xFFF) >> 2; + uint32_t upper_left_t = (w1 & 0xFFF) >> 2; + uint32_t offset_address = (rdp_device.frame_buffer_info.texture_address + pixel_size(rdp_device.frame_buffer_info.texture_pixel_size, upper_left_s + upper_left_t * rdp_device.frame_buffer_info.texture_width)) >> 3; + if (offset_address < rdram_dirty.size() && !rdram_dirty[offset_address]) + { + uint32_t lower_right_s = ((w2 >> 12) & 0xFFF) >> 2; + std::fill_n(rdram_dirty.begin() + offset_address, (pixel_size(rdp_device.frame_buffer_info.texture_pixel_size, lower_right_s - upper_left_s) + 7) >> 3, true); + } + } + break; + case RDP::Op::SetColorImage: + rdp_device.frame_buffer_info.framebuffer_address = (w2 & 0x00FFFFFF); + rdp_device.frame_buffer_info.framebuffer_pixel_size = (w1 >> 19) & 0x3; + rdp_device.frame_buffer_info.framebuffer_width = (w1 & 0x3FF) + 1; + break; + case RDP::Op::SetMaskImage: + rdp_device.frame_buffer_info.depthbuffer_address = (w2 & 0x00FFFFFF); + break; + case RDP::Op::SetTextureImage: + rdp_device.frame_buffer_info.texture_address = (w2 & 0x00FFFFFF); + rdp_device.frame_buffer_info.texture_pixel_size = (w1 >> 19) & 0x3; + rdp_device.frame_buffer_info.texture_width = (w1 & 0x3FF) + 1; + break; case RDP::Op::SetScissor: { uint32_t upper_left_x = ((w1 >> 12) & 0xFFF) >> 2; @@ -643,10 +766,13 @@ uint64_t rdp_process_commands() { rdp_device.region = 0; } - break; + + rdp_device.frame_buffer_info.framebuffer_y_offset = upper_left_y; + rdp_device.frame_buffer_info.framebuffer_height = lower_right_y - upper_left_y; } + break; case RDP::Op::SyncFull: - processor->wait_for_timeline(processor->signal_timeline()); + sync_signal = processor->signal_timeline(); interrupt_timer = rdp_device.region; if (interrupt_timer == 0) diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index ad9421f..7106406 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -47,6 +47,7 @@ extern "C" uint64_t rdp_process_commands(); void rdp_onscreen_message(const char *_message); void rdp_new_processor(GFX_INFO _gfx_info); + void rdp_check_framebuffers(uint32_t address, uint32_t length); size_t rdp_state_size(); void rdp_save_state(uint8_t *state); void rdp_load_state(const uint8_t *state); diff --git a/src/device/pi.rs b/src/device/pi.rs index f18629c..2ca4f02 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -1,4 +1,5 @@ use crate::device; +use crate::ui; use rand_chacha::rand_core::RngCore; const PI_DRAM_ADDR_REG: u32 = 0; @@ -92,6 +93,9 @@ fn dma_write(device: &mut device::Device) { length -= dram_addr & 0x7; } + // check RDP before PI writes to RDRAM + ui::video::check_framebuffers(dram_addr, length); + let cycles = (handler.write)(device, cart_addr, dram_addr, length); device::events::create_event(device, device::events::EVENT_TYPE_PI, cycles); diff --git a/src/device/rdram.rs b/src/device/rdram.rs index 956c57e..2d7e05f 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -1,4 +1,5 @@ use crate::device; +use crate::ui; use std::alloc::{Layout, alloc_zeroed}; //const RDRAM_CONFIG_REG: u32 = 0; @@ -50,6 +51,8 @@ pub fn read_mem( ); let masked_address = address as usize & RDRAM_MASK; + ui::video::check_framebuffers(masked_address as u32, 4); + u32::from_ne_bytes( device .rdram @@ -62,6 +65,8 @@ pub fn read_mem( } pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { + ui::video::check_framebuffers(address as u32, 4); + let mut data = u32::from_ne_bytes( device .rdram diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index 34d169e..64377e3 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -1,4 +1,5 @@ use crate::device; +use crate::ui; const SP_MEM_ADDR_REG: u32 = 0; const SP_DRAM_ADDR_REG: u32 = 1; @@ -146,6 +147,7 @@ fn do_dma(device: &mut device::Device, dma: RspDma) { let mut dram_addr = dma.dramaddr & 0xfffff8; let offset = dma.memaddr & 0x1000; + ui::video::check_framebuffers(dram_addr, count * (length + skip) - skip); if dma.dir == DmaDir::Read { let mut j = 0; while j < count { diff --git a/src/device/si.rs b/src/device/si.rs index 017958a..32e1b04 100644 --- a/src/device/si.rs +++ b/src/device/si.rs @@ -1,6 +1,7 @@ use rand_chacha::rand_core::RngCore; use crate::device; +use crate::ui; const SI_DRAM_ADDR_REG: u32 = 0; const SI_PIF_ADDR_RD64B_REG: u32 = 1; @@ -98,6 +99,8 @@ fn copy_pif_rdram(device: &mut device::Device) { i += 4; } } else if device.si.dma_dir == DmaDir::Read { + // check RDP before SI writes to RDRAM + ui::video::check_framebuffers(dram_addr as u32, device::pif::PIF_RAM_SIZE as u32); let mut i = 0; while i < device::pif::PIF_RAM_SIZE { let data = u32::from_be_bytes(device.pif.ram[i..i + 4].try_into().unwrap()); diff --git a/src/ui/video.rs b/src/ui/video.rs index 0f316aa..952449b 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -192,6 +192,10 @@ pub fn process_rdp_list() -> u64 { unsafe { rdp_process_commands() } } +pub fn check_framebuffers(address: u32, length: u32) { + unsafe { rdp_check_framebuffers(address, length) } +} + pub fn onscreen_message(_ui: &ui::Ui, message: &str) { unsafe { rdp_onscreen_message(std::ffi::CString::new(message).unwrap().as_ptr()) }; } From 366162e6fe3ac0851fc22630e031b3d219b8ec33 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 19 Sep 2025 12:56:07 +0200 Subject: [PATCH 0593/1117] cargo update --- Cargo.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 029fc11..0436efa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -669,9 +669,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.37" +version = "1.2.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44" +checksum = "80f41ae168f955c12fb8960b057d70d0ca153fb83182b57d86380443527be7e9" dependencies = [ "find-msvc-tools", "jobserver", @@ -1558,9 +1558,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d" +checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959" [[package]] name = "flate2" @@ -5393,9 +5393,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.43" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83bde6f1ec10e72d583d91623c939f623002284ef622b87de38cfd546cbf2031" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", "num-conv", From c712f2a288acaee26e7751b4b507a0ca0e875952 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 19 Sep 2025 12:57:05 +0200 Subject: [PATCH 0594/1117] bump to 1.1.7 --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0436efa..fedc2ed 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1929,7 +1929,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.6" +version = "1.1.7" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index c11659e..2998660 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.6" +version = "1.1.7" edition = "2024" rust-version = "1.90" From 8661e2c9b1a177fa1773ec5966d24e187961ef21 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 20 Sep 2025 08:37:55 +0200 Subject: [PATCH 0595/1117] always enable lto --- build.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/build.rs b/build.rs index 7b24100..3748c6d 100644 --- a/build.rs +++ b/build.rs @@ -73,7 +73,6 @@ fn main() { let os = std::env::var("CARGO_CFG_TARGET_OS").unwrap(); let arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap(); - let profile = std::env::var("PROFILE").unwrap(); let opt_flag = if arch == "x86_64" { "-march=x86-64-v3" } else if arch == "aarch64" { @@ -96,11 +95,10 @@ fn main() { .unwrap(); } - if profile == "release" { - volk_build.flag("-flto=thin"); - rdp_build.flag("-flto=thin"); - simd_build.flag("-flto=thin"); - } + volk_build.flag("-flto=thin"); + rdp_build.flag("-flto=thin"); + simd_build.flag("-flto=thin"); + volk_build.compile("volk"); rdp_build.compile("parallel-rdp"); From 004b603e96966fcf6521ba9adc22945b7a084973 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 20 Sep 2025 17:09:30 +0200 Subject: [PATCH 0596/1117] support basic mi repeat mode (#575) * support basic mi repeat mode * more * more --- src/device/mi.rs | 12 +++++++----- src/device/rdram.rs | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/src/device/mi.rs b/src/device/mi.rs index 9474f3e..aebc115 100644 --- a/src/device/mi.rs +++ b/src/device/mi.rs @@ -1,6 +1,6 @@ use crate::device; -const MI_INIT_MODE_REG: u32 = 0; +pub const MI_INIT_MODE_REG: u32 = 0; const MI_VERSION_REG: u32 = 1; pub const MI_INTR_REG: u32 = 2; pub const MI_INTR_MASK_REG: u32 = 3; @@ -29,7 +29,7 @@ const MI_CLR_DP: u32 = 1 << 10; const MI_SET_DP: u32 = 1 << 11; /* mode read */ -const MI_INIT_MODE: u32 = 1 << 7; +pub const MI_INIT_MODE: u32 = 1 << 7; const MI_EBUS_MODE: u32 = 1 << 8; const MI_RDRAM_MODE: u32 = 1 << 9; @@ -42,7 +42,7 @@ const MI_CLR_DP_INTR: u32 = 1 << 11; const MI_CLR_RDRAM: u32 = 1 << 12; const MI_SET_RDRAM: u32 = 1 << 13; -const MI_INIT_LENGTH_MASK: u32 = 0b1111111; +pub const MI_INIT_LENGTH_MASK: u32 = 0b1111111; #[derive(serde::Serialize, serde::Deserialize)] pub struct Mi { @@ -81,8 +81,10 @@ fn update_init_mode(device: &mut device::Device, w: u32) { device.mi.regs[MI_INIT_MODE_REG as usize] &= !MI_INIT_MODE } if w & MI_SET_INIT != 0 { - panic!("MI_SET_INIT not implemented") - //device.mi.regs[MI_INIT_MODE_REG as usize] |= MI_INIT_MODE + for i in 0..(0x3F00000 >> 16) { + device.memory.memory_map_write[i] = device::rdram::write_mem_repeat; + } + device.mi.regs[MI_INIT_MODE_REG as usize] |= MI_INIT_MODE } if w & MI_CLR_EBUS != 0 { device.mi.regs[MI_INIT_MODE_REG as usize] &= !MI_EBUS_MODE diff --git a/src/device/rdram.rs b/src/device/rdram.rs index 2d7e05f..2c2ee09 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -85,6 +85,39 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 .copy_from_slice(&data.to_ne_bytes()); } +pub fn write_mem_repeat(device: &mut device::Device, address: u64, value: u32, mask: u32) { + if mask != 0xFFFFFFFF { + panic!("RDRAM write_mem_repeat called with mask {:#x}", mask); + } + + let repeat_length = (device.mi.regs[device::mi::MI_INIT_MODE_REG as usize] + & device::mi::MI_INIT_LENGTH_MASK) + + 1; + + if !repeat_length.is_multiple_of(4) { + panic!( + "RDRAM write_mem_repeat called with non-word-aligned length {}", + repeat_length + ); + } + + ui::video::check_framebuffers(address as u32, repeat_length); + + for i in (0..repeat_length as u64).step_by(4) { + device + .rdram + .mem + .get_mut((address + i) as usize..(address + i) as usize + 4) + .unwrap_or(&mut [0; 4]) + .copy_from_slice(&value.to_ne_bytes()); + } + + device.mi.regs[device::mi::MI_INIT_MODE_REG as usize] &= !device::mi::MI_INIT_MODE; + for i in 0..(0x3F00000 >> 16) { + device.memory.memory_map_write[i] = device::rdram::write_mem; + } +} + pub fn read_regs( device: &mut device::Device, address: u64, From 9db831fdef10d5732f9b234a82fc5ab76f60ce96 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 20 Sep 2025 17:21:06 +0200 Subject: [PATCH 0597/1117] disable repeat mode on MI_CLR_INIT --- src/device/mi.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/device/mi.rs b/src/device/mi.rs index aebc115..66ed9f3 100644 --- a/src/device/mi.rs +++ b/src/device/mi.rs @@ -78,6 +78,9 @@ fn update_init_mode(device: &mut device::Device, w: u32) { device.mi.regs[MI_INIT_MODE_REG as usize] |= w & MI_INIT_LENGTH_MASK; if w & MI_CLR_INIT != 0 { + for i in 0..(0x3F00000 >> 16) { + device.memory.memory_map_write[i] = device::rdram::write_mem; + } device.mi.regs[MI_INIT_MODE_REG as usize] &= !MI_INIT_MODE } if w & MI_SET_INIT != 0 { From d1f28bb7a8777e8cd67579d06601d46fad391c24 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 21 Sep 2025 10:43:49 +0200 Subject: [PATCH 0598/1117] optimize rdp_check_framebuffers (#577) --- parallel-rdp/interface.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 152f1f3..baee8b1 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -570,17 +570,18 @@ void rdp_check_framebuffers(uint32_t address, uint32_t length) { address >>= 3; length = (length + 7) >> 3; - for (uint32_t i = 0; i < length; i++) + + if (address >= rdram_dirty.size()) + return; + + uint32_t end_addr = std::min(address + length, static_cast(rdram_dirty.size())); + + auto it = std::find(rdram_dirty.begin() + address, rdram_dirty.begin() + end_addr, true); + if (it != rdram_dirty.begin() + end_addr) { - if (address + i >= rdram_dirty.size()) - return; - if (rdram_dirty[address + i]) - { - processor->wait_for_timeline(sync_signal); - rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); - sync_signal = 0; - return; - } + processor->wait_for_timeline(sync_signal); + rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); + sync_signal = 0; } } } From fc41e26a6dbb4a86121f766bb20dcec45da82bb3 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 21 Sep 2025 13:36:13 +0200 Subject: [PATCH 0599/1117] expose 8x resolution (#578) --- parallel-rdp/interface.cpp | 5 +++++ src/ui/gui.rs | 3 ++- src/ui/gui/settings_page.slint | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index baee8b1..f9c5a0e 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -274,6 +274,11 @@ void rdp_new_processor(GFX_INFO _gfx_info) flags |= RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT; flags |= RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_4X_BIT; } + else if (gfx_info.upscale == 8) + { + flags |= RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT; + flags |= RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_8X_BIT; + } processor = new RDP::CommandProcessor(wsi->get_device(), gfx_info.RDRAM, 0, gfx_info.RDRAM_SIZE, gfx_info.RDRAM_SIZE / 2, flags); } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 93aaddb..49fa55d 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -111,6 +111,7 @@ fn settings_window(app: &AppWindow, config: &ui::config::Config) { 1 => 0, 2 => 1, 4 => 2, + 8 => 3, _ => 0, }; app.set_resolution(combobox_value); @@ -249,7 +250,7 @@ pub fn save_settings(app: &AppWindow, controller_paths: &[Option]) { config.emulation.overclock = app.get_overclock_n64_cpu(); config.emulation.disable_expansion_pak = app.get_disable_expansion_pak(); config.emulation.usb = app.get_emulate_usb(); - let upscale_values = [1, 2, 4]; + let upscale_values = [1, 2, 4, 8]; config.video.upscale = upscale_values[app.get_resolution() as usize]; config.input.emulate_vru = app.get_emulate_vru(); diff --git a/src/ui/gui/settings_page.slint b/src/ui/gui/settings_page.slint index 195a8ed..4a7b401 100644 --- a/src/ui/gui/settings_page.slint +++ b/src/ui/gui/settings_page.slint @@ -29,7 +29,7 @@ export component Settings inherits Page { } ComboBox { - model: ["1x", "2x", "4x"]; + model: ["1x", "2x", "4x", "8x"]; current-index: SettingsData.resolution; selected => { SettingsData.resolution = self.current-index; From 9037680cda046b25414ec997021226a6c5474eb8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 21 Sep 2025 16:30:11 +0200 Subject: [PATCH 0600/1117] cleanup audio code (#579) --- src/ui.rs | 4 ---- src/ui/audio.rs | 43 +++++++++---------------------------------- 2 files changed, 9 insertions(+), 38 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index ec90cf6..29aa0aa 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -15,9 +15,7 @@ pub struct Dirs { } pub struct Audio { - pub audio_device_spec: sdl3_sys::audio::SDL_AudioSpec, pub audio_stream: *mut sdl3_sys::audio::SDL_AudioStream, - pub audio_device: u32, pub gain: f32, } @@ -183,9 +181,7 @@ impl Ui { game_id: String::new(), game_hash: String::new(), audio: Audio { - audio_device_spec: Default::default(), audio_stream: std::ptr::null_mut(), - audio_device: 0, gain: 1.0, }, video: Video { diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 7168bf3..b81ad9d 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -3,32 +3,6 @@ use crate::ui; pub fn init(ui: &mut ui::Ui, frequency: u64) { ui::sdl_init(sdl3_sys::init::SDL_INIT_AUDIO); - - let device_audio_spec = sdl3_sys::audio::SDL_AudioSpec { - format: sdl3_sys::audio::SDL_AUDIO_S16LE, - freq: 48000, - channels: 2, - }; - ui.audio.audio_device = unsafe { - sdl3_sys::audio::SDL_OpenAudioDevice( - sdl3_sys::audio::SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, - &device_audio_spec, - ) - }; - if ui.audio.audio_device == 0 { - panic!("Could not open audio device"); - } - - if !unsafe { - sdl3_sys::audio::SDL_GetAudioDeviceFormat( - ui.audio.audio_device, - &mut ui.audio.audio_device_spec, - std::ptr::null_mut(), - ) - } { - panic!("Could not get audio device format"); - } - init_game_audio(ui, frequency); } @@ -40,25 +14,26 @@ pub fn init_game_audio(ui: &mut ui::Ui, frequency: u64) { }; ui.audio.audio_stream = unsafe { - sdl3_sys::audio::SDL_CreateAudioStream(&game_audio_spec, &ui.audio.audio_device_spec) + sdl3_sys::audio::SDL_OpenAudioDeviceStream( + sdl3_sys::audio::SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, + &game_audio_spec, + None, + std::ptr::null_mut(), + ) }; if ui.audio.audio_stream.is_null() { - return; + panic!("Could not create audio stream"); } if !unsafe { sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.audio_stream, ui.audio.gain) - && sdl3_sys::audio::SDL_BindAudioStream(ui.audio.audio_device, ui.audio.audio_stream) + && sdl3_sys::audio::SDL_ResumeAudioStreamDevice(ui.audio.audio_stream) } { - panic!("Could not bind audio stream"); + panic!("Could not resume audio stream"); } } pub fn close(ui: &mut ui::Ui) { close_game_audio(ui); - unsafe { - sdl3_sys::audio::SDL_CloseAudioDevice(ui.audio.audio_device); - ui.audio.audio_device = 0; - } } pub fn close_game_audio(ui: &mut ui::Ui) { From f3271cba63571d4d42c84c4c2db891af125b6f8d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 21 Sep 2025 18:36:03 +0200 Subject: [PATCH 0601/1117] more audio cleanup --- src/ui/audio.rs | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/ui/audio.rs b/src/ui/audio.rs index b81ad9d..53a85a3 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -86,20 +86,6 @@ pub fn play_audio(device: &device::Device, dram_addr: usize, length: u64) { let audio_queued = unsafe { sdl3_sys::audio::SDL_GetAudioStreamQueued(device.ui.audio.audio_stream) } as f64; let acceptable_latency = (device.ai.freq as f64 * 0.2) * 4.0; - let min_latency = (device.ai.freq as f64 * 0.02) * 4.0; - - if audio_queued < min_latency { - let silence_buffer: Vec = vec![0; min_latency as usize & !3]; - if !unsafe { - sdl3_sys::audio::SDL_PutAudioStreamData( - device.ui.audio.audio_stream, - silence_buffer.as_ptr() as *const std::ffi::c_void, - silence_buffer.len() as i32, - ) - } { - panic!("Could not play audio"); - } - } if audio_queued < acceptable_latency && !unsafe { From 116ffe984577c55db10adc31d27d70e5aa404a1c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 22 Sep 2025 09:15:41 +0200 Subject: [PATCH 0602/1117] fix clippy warning --- src/device/is_viewer.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/device/is_viewer.rs b/src/device/is_viewer.rs index 3a660bf..ef6464d 100644 --- a/src/device/is_viewer.rs +++ b/src/device/is_viewer.rs @@ -22,8 +22,8 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 let data = std::str::from_utf8( &device.cart.is_viewer_buffer[0x20_usize..(0x20 + length) as usize], ); - if data.is_ok() { - print!("{}", data.unwrap()); + if let Ok(data) = data { + print!("{}", data); } } else { let mut data = u32::from_be_bytes( From 2f25de55d7fe38169b846bcb24d416e334a66acf Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 24 Sep 2025 20:06:39 +0200 Subject: [PATCH 0603/1117] change depth buffer tracking (#580) --- parallel-rdp/interface.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index f9c5a0e..8afa799 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -64,6 +64,7 @@ typedef struct uint32_t texture_pixel_size; uint32_t texture_width; uint32_t framebuffer_height; + bool depth_buffer_enabled; } FrameBufferInfo; typedef struct @@ -699,13 +700,6 @@ uint64_t rdp_process_commands() case RDP::Op::TextureZBufferTriangle: case RDP::Op::ShadeZBufferTriangle: case RDP::Op::ShadeTextureZBufferTriangle: - { - uint32_t offset_address = (rdp_device.frame_buffer_info.depthbuffer_address + pixel_size(2, rdp_device.frame_buffer_info.framebuffer_y_offset * rdp_device.frame_buffer_info.framebuffer_width)) >> 3; - if (offset_address < rdram_dirty.size() && !rdram_dirty[offset_address]) - { - std::fill_n(rdram_dirty.begin() + offset_address, (pixel_size(2, rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height) + 7) >> 3, true); - } - } case RDP::Op::FillTriangle: case RDP::Op::TextureTriangle: case RDP::Op::ShadeTriangle: @@ -719,6 +713,15 @@ uint64_t rdp_process_commands() { std::fill_n(rdram_dirty.begin() + offset_address, (pixel_size(rdp_device.frame_buffer_info.framebuffer_pixel_size, rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height) + 7) >> 3, true); } + + if (rdp_device.frame_buffer_info.depth_buffer_enabled) + { + offset_address = (rdp_device.frame_buffer_info.depthbuffer_address + pixel_size(2, rdp_device.frame_buffer_info.framebuffer_y_offset * rdp_device.frame_buffer_info.framebuffer_width)) >> 3; + if (offset_address < rdram_dirty.size() && !rdram_dirty[offset_address]) + { + std::fill_n(rdram_dirty.begin() + offset_address, (pixel_size(2, rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height) + 7) >> 3, true); + } + } } break; case RDP::Op::LoadTLut: @@ -777,6 +780,9 @@ uint64_t rdp_process_commands() rdp_device.frame_buffer_info.framebuffer_height = lower_right_y - upper_left_y; } break; + case RDP::Op::SetOtherModes: + rdp_device.frame_buffer_info.depth_buffer_enabled = (w2 >> 5) & 1; + break; case RDP::Op::SyncFull: sync_signal = processor->signal_timeline(); From c2493b829e2bc897517f1e00b4ca9f1ce7f2939e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 24 Sep 2025 23:00:39 +0200 Subject: [PATCH 0604/1117] watch z-buffer reads as well (#581) --- parallel-rdp/interface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 8afa799..0f3c880 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -781,7 +781,7 @@ uint64_t rdp_process_commands() } break; case RDP::Op::SetOtherModes: - rdp_device.frame_buffer_info.depth_buffer_enabled = (w2 >> 5) & 1; + rdp_device.frame_buffer_info.depth_buffer_enabled = (w2 >> 4) & 3; break; case RDP::Op::SyncFull: sync_signal = processor->signal_timeline(); From cf99539f856a673253962afc0e30d1263e44b7b2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 25 Sep 2025 07:36:23 +0200 Subject: [PATCH 0605/1117] remove wgpu (#576) --- Cargo.lock | 685 ++++++++++++++++++++--------------------------------- Cargo.toml | 4 +- 2 files changed, 259 insertions(+), 430 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fedc2ed..66512a1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -169,9 +169,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.99" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "arbitrary" @@ -211,15 +211,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" -[[package]] -name = "ash" -version = "0.38.0+1.3.281" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" -dependencies = [ - "libloading", -] - [[package]] name = "ashpd" version = "0.11.0" @@ -479,21 +470,6 @@ dependencies = [ "syn", ] -[[package]] -name = "bit-set" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" -dependencies = [ - "bit-vec", -] - -[[package]] -name = "bit-vec" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" - [[package]] name = "bit_field" version = "0.10.3" @@ -521,12 +497,6 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - [[package]] name = "block-buffer" version = "0.10.4" @@ -655,13 +625,26 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "calloop" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb9f6e1368bd4621d2c86baa7e37de77a938adf5221e5dd3d6133340101b309e" +dependencies = [ + "bitflags 2.9.4", + "polling", + "rustix 1.1.2", + "slab", + "tracing", +] + [[package]] name = "calloop-wayland-source" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" dependencies = [ - "calloop", + "calloop 0.13.0", "rustix 0.38.44", "wayland-backend", "wayland-client", @@ -761,9 +744,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.47" +version = "4.5.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eac00902d9d136acd712710d71823fb8ac8004ca445a89e73a41d45aa712931" +checksum = "e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae" dependencies = [ "clap_builder", "clap_derive", @@ -771,9 +754,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.47" +version = "4.5.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ad9bbf750e73b5884fb8a211a9424a1906c1e156724260fdae972f31d70e1d6" +checksum = "c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9" dependencies = [ "anstream", "anstyle", @@ -848,17 +831,6 @@ dependencies = [ "termcolor", ] -[[package]] -name = "codespan-reporting" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" -dependencies = [ - "serde", - "termcolor", - "unicode-width", -] - [[package]] name = "color_quant" version = "1.1.0" @@ -1287,15 +1259,6 @@ dependencies = [ "libloading", ] -[[package]] -name = "document-features" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" -dependencies = [ - "litrs", -] - [[package]] name = "downcast-rs" version = "1.2.1" @@ -1308,6 +1271,46 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" +[[package]] +name = "drm" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" +dependencies = [ + "bitflags 2.9.4", + "bytemuck", + "drm-ffi", + "drm-fourcc", + "libc", + "rustix 0.38.44", +] + +[[package]] +name = "drm-ffi" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8e41459d99a9b529845f6d2c909eb9adf3b6d2f82635ae40be8de0601726e8b" +dependencies = [ + "drm-sys", + "rustix 0.38.44", +] + +[[package]] +name = "drm-fourcc" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" + +[[package]] +name = "drm-sys" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bafb66c8dbc944d69e15cfcc661df7e703beffbaec8bd63151368b06c5f9858c" +dependencies = [ + "libc", + "linux-raw-sys 0.6.5", +] + [[package]] name = "dwrote" version = "0.11.4" @@ -1531,7 +1534,6 @@ dependencies = [ "unicode-segmentation", "wasm-bindgen", "web-sys", - "wgpu", ] [[package]] @@ -1769,6 +1771,28 @@ dependencies = [ "slab", ] +[[package]] +name = "gbm" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce852e998d3ca5e4a97014fb31c940dc5ef344ec7d364984525fd11e8a547e6a" +dependencies = [ + "bitflags 2.9.4", + "drm", + "drm-fourcc", + "gbm-sys", + "libc", +] + +[[package]] +name = "gbm-sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c13a5f2acc785d8fb6bf6b7ab6bfb0ef5dad4f4d97e8e70bb8e470722312f76f" +dependencies = [ + "libc", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -1988,57 +2012,6 @@ dependencies = [ "web-time", ] -[[package]] -name = "gpu-alloc" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" -dependencies = [ - "bitflags 2.9.4", - "gpu-alloc-types", -] - -[[package]] -name = "gpu-alloc-types" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" -dependencies = [ - "bitflags 2.9.4", -] - -[[package]] -name = "gpu-allocator" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" -dependencies = [ - "log", - "presser", - "thiserror 1.0.69", - "windows 0.58.0", -] - -[[package]] -name = "gpu-descriptor" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" -dependencies = [ - "bitflags 2.9.4", - "gpu-descriptor-types", - "hashbrown 0.15.5", -] - -[[package]] -name = "gpu-descriptor-types" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" -dependencies = [ - "bitflags 2.9.4", -] - [[package]] name = "h2" version = "0.4.12" @@ -2066,7 +2039,6 @@ checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" dependencies = [ "cfg-if", "crunchy", - "num-traits", ] [[package]] @@ -2122,6 +2094,12 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + [[package]] name = "hermit-abi" version = "0.5.2" @@ -2134,12 +2112,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "hexf-parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" - [[package]] name = "hmac" version = "0.12.1" @@ -2252,6 +2224,25 @@ dependencies = [ "tracing", ] +[[package]] +name = "i-slint-backend-linuxkms" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efe95e5c81a08027a03535d69aa025740275b11fb613abf555441ce074001119" +dependencies = [ + "calloop 0.14.3", + "drm", + "gbm", + "glutin", + "i-slint-common", + "i-slint-core", + "i-slint-renderer-femtovg", + "input", + "nix", + "raw-window-handle", + "xkbcommon", +] + [[package]] name = "i-slint-backend-selector" version = "1.13.1" @@ -2259,6 +2250,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5c1525cd7a659b609600a7df79bb7d90092730d5c4de4f378f39ab9a023993" dependencies = [ "cfg-if", + "i-slint-backend-linuxkms", "i-slint-backend-winit", "i-slint-common", "i-slint-core", @@ -2385,7 +2377,6 @@ dependencies = [ "wasm-bindgen", "web-sys", "web-time", - "wgpu", ] [[package]] @@ -2426,7 +2417,6 @@ dependencies = [ "unicode-segmentation", "wasm-bindgen", "web-sys", - "wgpu", "winapi", ] @@ -2436,20 +2426,17 @@ version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0848e46481abf3155d3aca7e4a9b07be5a5d55716cd90d891293e8698a07b679" dependencies = [ - "ash", "bytemuck", "cfg-if", "cfg_aliases", "const-field-offset", "derive_more", - "foreign-types", "glow", "glutin", "i-slint-common", "i-slint-core", "i-slint-core-macros", "lyon_path", - "metal 0.31.0", "objc2 0.6.2", "objc2-app-kit 0.3.1", "objc2-core-foundation", @@ -2462,10 +2449,8 @@ dependencies = [ "scoped-tls-hkt", "skia-safe", "softbuffer", - "spin_on", "unicode-segmentation", "vtable", - "wgpu", "windows 0.58.0", "windows 0.61.3", "windows-core 0.58.0", @@ -2668,6 +2653,25 @@ dependencies = [ "generic-array", ] +[[package]] +name = "input" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" +dependencies = [ + "bitflags 2.9.4", + "input-sys", + "libc", + "log", + "udev", +] + +[[package]] +name = "input-sys" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd4f5b4d1c00331c5245163aacfe5f20be75b564c7112d45893d4ae038119eb0" + [[package]] name = "integer-sqrt" version = "0.1.5" @@ -2688,6 +2692,17 @@ dependencies = [ "syn", ] +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "io-uring" version = "0.7.10" @@ -2826,17 +2841,6 @@ dependencies = [ "unicode-segmentation", ] -[[package]] -name = "khronos-egl" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" -dependencies = [ - "libc", - "libloading", - "pkg-config", -] - [[package]] name = "khronos_api" version = "3.1.0" @@ -2925,6 +2929,16 @@ dependencies = [ "redox_syscall 0.5.17", ] +[[package]] +name = "libudev-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" +dependencies = [ + "libc", + "pkg-config", +] + [[package]] name = "libz-rs-sys" version = "0.5.2" @@ -2964,6 +2978,12 @@ version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" +[[package]] +name = "linux-raw-sys" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7" + [[package]] name = "linux-raw-sys" version = "0.11.0" @@ -2976,12 +2996,6 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" -[[package]] -name = "litrs" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" - [[package]] name = "lock_api" version = "0.4.13" @@ -3060,12 +3074,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "lzma-rust2" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60b8ad6122c05a4d5e23db8eab1ced778e252b3e29c5e96b4a965fc72476277" - [[package]] name = "lzma-rust2" version = "0.13.0" @@ -3077,13 +3085,10 @@ dependencies = [ ] [[package]] -name = "malloc_buf" -version = "0.0.6" +name = "lzma-rust2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] +checksum = "79ef85f79493b5f9baabde64dc8456092886647c5682c44ff48a54b247228dda" [[package]] name = "maybe-rayon" @@ -3119,36 +3124,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "metal" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" -dependencies = [ - "bitflags 2.9.4", - "block", - "core-graphics-types 0.1.3", - "foreign-types", - "log", - "objc", - "paste", -] - -[[package]] -name = "metal" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605" -dependencies = [ - "bitflags 2.9.4", - "block", - "core-graphics-types 0.2.0", - "foreign-types", - "log", - "objc", - "paste", -] - [[package]] name = "mimalloc" version = "0.1.48" @@ -3220,32 +3195,6 @@ dependencies = [ "windows-sys 0.60.2", ] -[[package]] -name = "naga" -version = "26.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "916cbc7cb27db60be930a4e2da243cf4bc39569195f22fd8ee419cd31d5b662c" -dependencies = [ - "arrayvec", - "bit-set", - "bitflags 2.9.4", - "cfg-if", - "cfg_aliases", - "codespan-reporting", - "half", - "hashbrown 0.15.5", - "hexf-parse", - "indexmap", - "libm", - "log", - "num-traits", - "once_cell", - "rustc-hash 1.1.0", - "spirv", - "thiserror 2.0.16", - "unicode-ident", -] - [[package]] name = "ndk" version = "0.9.0" @@ -3396,15 +3345,6 @@ dependencies = [ "syn", ] -[[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-sys" version = "0.3.5" @@ -3789,15 +3729,6 @@ dependencies = [ "libredox", ] -[[package]] -name = "ordered-float" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2c1f9f56e534ac6a9b8a4600bdf0f530fb393b5f393e7b4d03489c3cf0c3f01" -dependencies = [ - "num-traits", -] - [[package]] name = "ordered-stream" version = "0.2.0" @@ -3978,7 +3909,7 @@ checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi", + "hermit-abi 0.5.2", "pin-project-lite", "rustix 1.1.2", "windows-sys 0.61.0", @@ -3999,15 +3930,6 @@ dependencies = [ "critical-section", ] -[[package]] -name = "portable-atomic-util" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" -dependencies = [ - "portable-atomic", -] - [[package]] name = "postcard" version = "1.1.3" @@ -4051,12 +3973,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "presser" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" - [[package]] name = "prettyplease" version = "0.2.37" @@ -4106,9 +4022,9 @@ dependencies = [ [[package]] name = "pxfm" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55f4fedc84ed39cb7a489322318976425e42a147e2be79d8f878e2884f94e84" +checksum = "83f9b339b02259ada5c0f4a389b7fb472f933aa17ce176fd2ad98f28bb401fde" dependencies = [ "num-traits", ] @@ -4281,12 +4197,6 @@ dependencies = [ "getrandom 0.3.3", ] -[[package]] -name = "range-alloc" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" - [[package]] name = "rav1e" version = "0.7.1" @@ -4442,12 +4352,6 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" -[[package]] -name = "renderdoc-sys" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" - [[package]] name = "reqwest" version = "0.12.23" @@ -4632,9 +4536,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.31" +version = "0.23.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" +checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" dependencies = [ "once_cell", "ring", @@ -4862,14 +4766,13 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8f3cc2b52a3f98e75e6a1884e40fc986bf5f1966274aec869a4e6a0a5f72292" +checksum = "5635c7cedd84efe2723df4e54047252e65fde0cb273acaff91c1942ef8396844" dependencies = [ - "byteorder", "crc32fast", "js-sys", - "lzma-rust2 0.10.2", + "lzma-rust2 0.14.0", "wasm-bindgen", ] @@ -5041,7 +4944,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ "bitflags 2.9.4", - "calloop", + "calloop 0.13.0", "calloop-wayland-source", "cursor-icon", "libc", @@ -5166,15 +5069,6 @@ dependencies = [ "lock_api", ] -[[package]] -name = "spirv" -version = "0.3.0+sdk-1.3.268.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" -dependencies = [ - "bitflags 2.9.4", -] - [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -5669,6 +5563,7 @@ version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -5748,6 +5643,18 @@ version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +[[package]] +name = "udev" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af4e37e9ea4401fc841ff54b9ddfc9be1079b1e89434c1a6a865dd68980f7e9f" +dependencies = [ + "io-lifetimes", + "libc", + "libudev-sys", + "pkg-config", +] + [[package]] name = "uds_windows" version = "1.1.0" @@ -5813,12 +5720,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" -[[package]] -name = "unicode-width" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" - [[package]] name = "unicode-xid" version = "0.2.6" @@ -6205,155 +6106,6 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" -[[package]] -name = "wgpu" -version = "26.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70b6ff82bbf6e9206828e1a3178e851f8c20f1c9028e74dd3a8090741ccd5798" -dependencies = [ - "arrayvec", - "bitflags 2.9.4", - "cfg-if", - "cfg_aliases", - "document-features", - "hashbrown 0.15.5", - "js-sys", - "log", - "naga", - "parking_lot", - "portable-atomic", - "profiling", - "raw-window-handle", - "smallvec", - "static_assertions", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "wgpu-core", - "wgpu-hal", - "wgpu-types", -] - -[[package]] -name = "wgpu-core" -version = "26.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f62f1053bd28c2268f42916f31588f81f64796e2ff91b81293515017ca8bd9" -dependencies = [ - "arrayvec", - "bit-set", - "bit-vec", - "bitflags 2.9.4", - "cfg_aliases", - "document-features", - "hashbrown 0.15.5", - "indexmap", - "log", - "naga", - "once_cell", - "parking_lot", - "portable-atomic", - "profiling", - "raw-window-handle", - "rustc-hash 1.1.0", - "smallvec", - "thiserror 2.0.16", - "wgpu-core-deps-apple", - "wgpu-core-deps-emscripten", - "wgpu-core-deps-windows-linux-android", - "wgpu-hal", - "wgpu-types", -] - -[[package]] -name = "wgpu-core-deps-apple" -version = "26.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18ae5fbde6a4cbebae38358aa73fcd6e0f15c6144b67ef5dc91ded0db125dbdf" -dependencies = [ - "wgpu-hal", -] - -[[package]] -name = "wgpu-core-deps-emscripten" -version = "26.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7670e390f416006f746b4600fdd9136455e3627f5bd763abf9a65daa216dd2d" -dependencies = [ - "wgpu-hal", -] - -[[package]] -name = "wgpu-core-deps-windows-linux-android" -version = "26.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "720a5cb9d12b3d337c15ff0e24d3e97ed11490ff3f7506e7f3d98c68fa5d6f14" -dependencies = [ - "wgpu-hal", -] - -[[package]] -name = "wgpu-hal" -version = "26.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7df2c64ac282a91ad7662c90bc4a77d4a2135bc0b2a2da5a4d4e267afc034b9e" -dependencies = [ - "android_system_properties", - "arrayvec", - "ash", - "bit-set", - "bitflags 2.9.4", - "block", - "bytemuck", - "cfg-if", - "cfg_aliases", - "core-graphics-types 0.2.0", - "glow", - "glutin_wgl_sys", - "gpu-alloc", - "gpu-allocator", - "gpu-descriptor", - "hashbrown 0.15.5", - "js-sys", - "khronos-egl", - "libc", - "libloading", - "log", - "metal 0.32.0", - "naga", - "ndk-sys", - "objc", - "ordered-float", - "parking_lot", - "portable-atomic", - "portable-atomic-util", - "profiling", - "range-alloc", - "raw-window-handle", - "renderdoc-sys", - "smallvec", - "thiserror 2.0.16", - "wasm-bindgen", - "web-sys", - "wgpu-types", - "windows 0.58.0", - "windows-core 0.58.0", -] - -[[package]] -name = "wgpu-types" -version = "26.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca7a8d8af57c18f57d393601a1fb159ace8b2328f1b6b5f80893f7d672c9ae2" -dependencies = [ - "bitflags 2.9.4", - "bytemuck", - "js-sys", - "log", - "thiserror 2.0.16", - "web-sys", -] - [[package]] name = "winapi" version = "0.3.9" @@ -6597,6 +6349,15 @@ dependencies = [ "windows-targets 0.42.2", ] +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + [[package]] name = "windows-sys" version = "0.52.0" @@ -6648,6 +6409,21 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + [[package]] name = "windows-targets" version = "0.52.6" @@ -6696,6 +6472,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -6714,6 +6496,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -6732,6 +6520,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -6762,6 +6556,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -6780,6 +6580,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -6798,6 +6604,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -6816,6 +6628,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -6840,7 +6658,7 @@ dependencies = [ "bitflags 2.9.4", "block2 0.5.1", "bytemuck", - "calloop", + "calloop 0.13.0", "cfg_aliases", "concurrent-queue", "core-foundation 0.9.4", @@ -6978,6 +6796,17 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b" +[[package]] +name = "xkbcommon" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d66ca9352cbd4eecbbc40871d8a11b4ac8107cfc528a6e14d7c19c69d0e1ac9" +dependencies = [ + "libc", + "memmap2", + "xkeysym", +] + [[package]] name = "xkbcommon-dl" version = "0.4.2" diff --git a/Cargo.toml b/Cargo.toml index 2998660..31c0d33 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,12 +10,12 @@ rust-version = "1.90" dirs = "6.0" zip = "5.1" governor = "0.10" -sevenz-rust2 = { version = "0.18", default-features = false } +sevenz-rust2 = { version = "0.19", default-features = false } chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde-big-array = "0.5" -slint = { version = "1.12", default-features = false, features = ["compat-1-2", "std", "backend-winit", "renderer-femtovg-wgpu"] } +slint = { version = "1.12", default-features = false, features = ["compat-1-2", "std", "backend-winit", "renderer-femtovg"] } open = "5.3" sha2 = "0.10" sdl3-sys = { version = "0.5", features = ["build-from-source-static"] } From 431c7c2a8d5cf1758ef8ead7eda21047abfe4455 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 25 Sep 2025 13:32:23 +0200 Subject: [PATCH 0606/1117] cargo update --- Cargo.lock | 92 +++++++++++++++++++++++++++--------------------------- Cargo.toml | 2 +- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 66512a1..eff21b5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1139,9 +1139,9 @@ checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b" [[package]] name = "deranged" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" dependencies = [ "powerfmt", ] @@ -2630,9 +2630,9 @@ checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285" [[package]] name = "imgref" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" +checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" [[package]] name = "indexmap" @@ -2822,9 +2822,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.80" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852f13bec5eba4ba9afbeb93fd7c13fe56147f055939ae21c43a29a0ecb2702e" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" dependencies = [ "once_cell", "wasm-bindgen", @@ -2878,9 +2878,9 @@ checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" -version = "0.2.175" +version = "0.2.176" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" +checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" [[package]] name = "libfuzzer-sys" @@ -2894,12 +2894,12 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-targets 0.53.3", + "windows-link 0.2.0", ] [[package]] @@ -3055,9 +3055,9 @@ dependencies = [ [[package]] name = "lyon_geom" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce9333c02ea4517fd31207f126124352ad59975218c114c55dbb8f9d56fd4b45" +checksum = "4e16770d760c7848b0c1c2d209101e408207a65168109509f8483837a36cf2e7" dependencies = [ "arrayvec", "euclid", @@ -3086,9 +3086,9 @@ dependencies = [ [[package]] name = "lzma-rust2" -version = "0.14.0" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79ef85f79493b5f9baabde64dc8456092886647c5682c44ff48a54b247228dda" +checksum = "96d3176655c152883186e161a1031192759660878ac04b2f776290b4f4e770a9" [[package]] name = "maybe-rayon" @@ -4682,9 +4682,9 @@ checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] name = "serde" -version = "1.0.225" +version = "1.0.226" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6c24dee235d0da097043389623fb913daddf92c76e9f5a1db88607a0bcbd1d" +checksum = "0dca6411025b24b60bfa7ec1fe1f8e710ac09782dca409ee8237ba74b51295fd" dependencies = [ "serde_core", "serde_derive", @@ -4701,18 +4701,18 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.225" +version = "1.0.226" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "659356f9a0cb1e529b24c01e43ad2bdf520ec4ceaf83047b83ddcc2251f96383" +checksum = "ba2ba63999edb9dac981fb34b3e5c0d111a69b0924e253ed29d83f7c99e966a4" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.225" +version = "1.0.226" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea936adf78b1f766949a4977b91d2f5595825bd6ec079aa9543ad2685fc4516" +checksum = "8db53ae22f34573731bafa1db20f04027b2d25e02d8205921b569171699cdb33" dependencies = [ "proc-macro2", "quote", @@ -4766,13 +4766,13 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5635c7cedd84efe2723df4e54047252e65fde0cb273acaff91c1942ef8396844" +checksum = "7048af9cb3f23ee3315bccaeeef1da33c1b2cad63b8a26ac5b5498b6ef472902" dependencies = [ "crc32fast", "js-sys", - "lzma-rust2 0.14.0", + "lzma-rust2 0.14.2", "wasm-bindgen", ] @@ -5205,9 +5205,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" -version = "3.22.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84fa4d11fadde498443cca10fd3ac23c951f0dc59e080e9f4b93d4df4e4eea53" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", "getrandom 0.3.3", @@ -5411,9 +5411,9 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.27.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "489a59b6730eda1b0171fcfda8b121f4bee2b35cba8645ca35c5f7ba3eb736c1" +checksum = "d25a406cddcc431a75d3d9afc6a7c0f7428d4891dd973e4d54c56b46127bf857" dependencies = [ "futures-util", "log", @@ -5612,9 +5612,9 @@ dependencies = [ [[package]] name = "tungstenite" -version = "0.27.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eadc29d668c91fcc564941132e17b28a7ceb2f3ebf0b9dae3e03fd7a6748eb0d" +checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442" dependencies = [ "bytes", "data-encoding", @@ -5892,9 +5892,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab10a69fbd0a177f5f649ad4d8d3305499c42bab9aef2f7ff592d0ec8f833819" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" dependencies = [ "cfg-if", "once_cell", @@ -5905,9 +5905,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb702423545a6007bbc368fde243ba47ca275e549c8a28617f56f6ba53b1d1c" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" dependencies = [ "bumpalo", "log", @@ -5919,9 +5919,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.53" +version = "0.4.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0b221ff421256839509adbb55998214a70d829d3a28c69b4a6672e9d2a42f67" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" dependencies = [ "cfg-if", "js-sys", @@ -5932,9 +5932,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc65f4f411d91494355917b605e1480033152658d71f722a90647f56a70c88a0" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5942,9 +5942,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc003a991398a8ee604a401e194b6b3a39677b3173d6e74495eb51b82e99a32" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", @@ -5955,9 +5955,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "293c37f4efa430ca14db3721dfbe48d8c33308096bd44d80ebaa775ab71ba1cf" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" dependencies = [ "unicode-ident", ] @@ -6073,9 +6073,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.80" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbe734895e869dc429d78c4b433f8d17d95f8d05317440b4fad5ab2d33e596dc" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" dependencies = [ "js-sys", "wasm-bindgen", @@ -6782,9 +6782,9 @@ checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" [[package]] name = "xattr" -version = "1.5.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af3a19837351dc82ba89f8a125e22a3c475f05aba604acc023d62b2739ae2909" +checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", "rustix 1.1.2", diff --git a/Cargo.toml b/Cargo.toml index 31c0d33..a237d8a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,7 +26,7 @@ spin_sleep = "1.3" encoding_rs = "0.8" mimalloc = "0.1" regex = "1.11" -tokio-tungstenite = "0.27" +tokio-tungstenite = "0.28" futures = "0.3" socket2 = { version = "0.6", features = ["all"] } rand_chacha = "0.9" From e3023a902f09d4157d0caeaac17e7ad9493064a8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 25 Sep 2025 15:59:58 +0200 Subject: [PATCH 0607/1117] further depth buffer tracking tweaks (#583) --- parallel-rdp/interface.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 0f3c880..26c118e 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -781,8 +781,12 @@ uint64_t rdp_process_commands() } break; case RDP::Op::SetOtherModes: - rdp_device.frame_buffer_info.depth_buffer_enabled = (w2 >> 4) & 3; - break; + { + uint8_t cycle_type = (w1 >> 20) & 3; + uint8_t depth_read_write = (w2 >> 4) & 3; + rdp_device.frame_buffer_info.depth_buffer_enabled = ((cycle_type & 2) == 0) && (depth_read_write != 0); + } + break; case RDP::Op::SyncFull: sync_signal = processor->signal_timeline(); From 9d0516545e8a68ca0d6a6d7c79390a2997a97f8d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 25 Sep 2025 16:14:48 +0200 Subject: [PATCH 0608/1117] reorder items --- parallel-rdp/interface.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 26c118e..e01e1a6 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -696,14 +696,14 @@ uint64_t rdp_process_commands() switch (RDP::Op(command)) { - case RDP::Op::FillZBufferTriangle: - case RDP::Op::TextureZBufferTriangle: - case RDP::Op::ShadeZBufferTriangle: - case RDP::Op::ShadeTextureZBufferTriangle: case RDP::Op::FillTriangle: + case RDP::Op::FillZBufferTriangle: case RDP::Op::TextureTriangle: + case RDP::Op::TextureZBufferTriangle: case RDP::Op::ShadeTriangle: + case RDP::Op::ShadeZBufferTriangle: case RDP::Op::ShadeTextureTriangle: + case RDP::Op::ShadeTextureZBufferTriangle: case RDP::Op::TextureRectangle: case RDP::Op::TextureRectangleFlip: case RDP::Op::FillRectangle: From e23e7f33c1719d6f223c8e47af8383076a2e817f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 26 Sep 2025 07:23:48 +0200 Subject: [PATCH 0609/1117] Re-add wgpu I didn't see any evidence of crashing --- Cargo.lock | 746 ++++++++++++++++++++++++++++++++--------------------- Cargo.toml | 2 +- 2 files changed, 459 insertions(+), 289 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index eff21b5..78c7f08 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -20,9 +20,9 @@ checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" [[package]] name = "addr2line" -version = "0.24.2" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" dependencies = [ "gimli", ] @@ -211,6 +211,15 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" +[[package]] +name = "ash" +version = "0.38.0+1.3.281" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" +dependencies = [ + "libloading", +] + [[package]] name = "ashpd" version = "0.11.0" @@ -285,7 +294,7 @@ dependencies = [ "polling", "rustix 1.1.2", "slab", - "windows-sys 0.61.0", + "windows-sys 0.61.1", ] [[package]] @@ -343,7 +352,7 @@ dependencies = [ "rustix 1.1.2", "signal-hook-registry", "slab", - "windows-sys 0.61.0", + "windows-sys 0.61.1", ] [[package]] @@ -421,9 +430,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.75" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" dependencies = [ "addr2line", "cfg-if", @@ -431,7 +440,7 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-targets 0.52.6", + "windows-link 0.2.0", ] [[package]] @@ -470,6 +479,21 @@ dependencies = [ "syn", ] +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + [[package]] name = "bit_field" version = "0.10.3" @@ -497,6 +521,12 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + [[package]] name = "block-buffer" version = "0.10.4" @@ -625,26 +655,13 @@ dependencies = [ "thiserror 1.0.69", ] -[[package]] -name = "calloop" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb9f6e1368bd4621d2c86baa7e37de77a938adf5221e5dd3d6133340101b309e" -dependencies = [ - "bitflags 2.9.4", - "polling", - "rustix 1.1.2", - "slab", - "tracing", -] - [[package]] name = "calloop-wayland-source" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" dependencies = [ - "calloop 0.13.0", + "calloop", "rustix 0.38.44", "wayland-backend", "wayland-client", @@ -831,6 +848,17 @@ dependencies = [ "termcolor", ] +[[package]] +name = "codespan-reporting" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" +dependencies = [ + "serde", + "termcolor", + "unicode-width", +] + [[package]] name = "color_quant" version = "1.1.0" @@ -1218,7 +1246,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.61.0", + "windows-sys 0.61.1", ] [[package]] @@ -1259,6 +1287,15 @@ dependencies = [ "libloading", ] +[[package]] +name = "document-features" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" +dependencies = [ + "litrs", +] + [[package]] name = "downcast-rs" version = "1.2.1" @@ -1271,46 +1308,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" -[[package]] -name = "drm" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" -dependencies = [ - "bitflags 2.9.4", - "bytemuck", - "drm-ffi", - "drm-fourcc", - "libc", - "rustix 0.38.44", -] - -[[package]] -name = "drm-ffi" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e41459d99a9b529845f6d2c909eb9adf3b6d2f82635ae40be8de0601726e8b" -dependencies = [ - "drm-sys", - "rustix 0.38.44", -] - -[[package]] -name = "drm-fourcc" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" - -[[package]] -name = "drm-sys" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bafb66c8dbc944d69e15cfcc661df7e703beffbaec8bd63151368b06c5f9858c" -dependencies = [ - "libc", - "linux-raw-sys 0.6.5", -] - [[package]] name = "dwrote" version = "0.11.4" @@ -1412,7 +1409,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.0", + "windows-sys 0.61.1", ] [[package]] @@ -1534,6 +1531,7 @@ dependencies = [ "unicode-segmentation", "wasm-bindgen", "web-sys", + "wgpu", ] [[package]] @@ -1771,28 +1769,6 @@ dependencies = [ "slab", ] -[[package]] -name = "gbm" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce852e998d3ca5e4a97014fb31c940dc5ef344ec7d364984525fd11e8a547e6a" -dependencies = [ - "bitflags 2.9.4", - "drm", - "drm-fourcc", - "gbm-sys", - "libc", -] - -[[package]] -name = "gbm-sys" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c13a5f2acc785d8fb6bf6b7ab6bfb0ef5dad4f4d97e8e70bb8e470722312f76f" -dependencies = [ - "libc", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -1852,9 +1828,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.31.1" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" [[package]] name = "gl_generator" @@ -2012,6 +1988,57 @@ dependencies = [ "web-time", ] +[[package]] +name = "gpu-alloc" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" +dependencies = [ + "bitflags 2.9.4", + "gpu-alloc-types", +] + +[[package]] +name = "gpu-alloc-types" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" +dependencies = [ + "bitflags 2.9.4", +] + +[[package]] +name = "gpu-allocator" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" +dependencies = [ + "log", + "presser", + "thiserror 1.0.69", + "windows 0.58.0", +] + +[[package]] +name = "gpu-descriptor" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" +dependencies = [ + "bitflags 2.9.4", + "gpu-descriptor-types", + "hashbrown 0.15.5", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" +dependencies = [ + "bitflags 2.9.4", +] + [[package]] name = "h2" version = "0.4.12" @@ -2039,6 +2066,7 @@ checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" dependencies = [ "cfg-if", "crunchy", + "num-traits", ] [[package]] @@ -2094,12 +2122,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - [[package]] name = "hermit-abi" version = "0.5.2" @@ -2112,6 +2134,12 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hexf-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" + [[package]] name = "hmac" version = "0.12.1" @@ -2224,25 +2252,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "i-slint-backend-linuxkms" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efe95e5c81a08027a03535d69aa025740275b11fb613abf555441ce074001119" -dependencies = [ - "calloop 0.14.3", - "drm", - "gbm", - "glutin", - "i-slint-common", - "i-slint-core", - "i-slint-renderer-femtovg", - "input", - "nix", - "raw-window-handle", - "xkbcommon", -] - [[package]] name = "i-slint-backend-selector" version = "1.13.1" @@ -2250,7 +2259,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5c1525cd7a659b609600a7df79bb7d90092730d5c4de4f378f39ab9a023993" dependencies = [ "cfg-if", - "i-slint-backend-linuxkms", "i-slint-backend-winit", "i-slint-common", "i-slint-core", @@ -2377,6 +2385,7 @@ dependencies = [ "wasm-bindgen", "web-sys", "web-time", + "wgpu", ] [[package]] @@ -2417,6 +2426,7 @@ dependencies = [ "unicode-segmentation", "wasm-bindgen", "web-sys", + "wgpu", "winapi", ] @@ -2426,17 +2436,20 @@ version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0848e46481abf3155d3aca7e4a9b07be5a5d55716cd90d891293e8698a07b679" dependencies = [ + "ash", "bytemuck", "cfg-if", "cfg_aliases", "const-field-offset", "derive_more", + "foreign-types", "glow", "glutin", "i-slint-common", "i-slint-core", "i-slint-core-macros", "lyon_path", + "metal 0.31.0", "objc2 0.6.2", "objc2-app-kit 0.3.1", "objc2-core-foundation", @@ -2449,8 +2462,10 @@ dependencies = [ "scoped-tls-hkt", "skia-safe", "softbuffer", + "spin_on", "unicode-segmentation", "vtable", + "wgpu", "windows 0.58.0", "windows 0.61.3", "windows-core 0.58.0", @@ -2469,7 +2484,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.62.0", + "windows-core 0.62.1", ] [[package]] @@ -2653,25 +2668,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "input" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" -dependencies = [ - "bitflags 2.9.4", - "input-sys", - "libc", - "log", - "udev", -] - -[[package]] -name = "input-sys" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd4f5b4d1c00331c5245163aacfe5f20be75b564c7112d45893d4ae038119eb0" - [[package]] name = "integer-sqrt" version = "0.1.5" @@ -2692,17 +2688,6 @@ dependencies = [ "syn", ] -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi 0.3.9", - "libc", - "windows-sys 0.48.0", -] - [[package]] name = "io-uring" version = "0.7.10" @@ -2841,6 +2826,17 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "khronos-egl" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" +dependencies = [ + "libc", + "libloading", + "pkg-config", +] + [[package]] name = "khronos_api" version = "3.1.0" @@ -2929,16 +2925,6 @@ dependencies = [ "redox_syscall 0.5.17", ] -[[package]] -name = "libudev-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" -dependencies = [ - "libc", - "pkg-config", -] - [[package]] name = "libz-rs-sys" version = "0.5.2" @@ -2978,12 +2964,6 @@ version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" -[[package]] -name = "linux-raw-sys" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7" - [[package]] name = "linux-raw-sys" version = "0.11.0" @@ -2996,6 +2976,12 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +[[package]] +name = "litrs" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" + [[package]] name = "lock_api" version = "0.4.13" @@ -3090,6 +3076,15 @@ version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d3176655c152883186e161a1031192759660878ac04b2f776290b4f4e770a9" +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + [[package]] name = "maybe-rayon" version = "0.1.1" @@ -3102,9 +3097,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.5" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "memmap2" @@ -3124,6 +3119,36 @@ dependencies = [ "autocfg", ] +[[package]] +name = "metal" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" +dependencies = [ + "bitflags 2.9.4", + "block", + "core-graphics-types 0.1.3", + "foreign-types", + "log", + "objc", + "paste", +] + +[[package]] +name = "metal" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605" +dependencies = [ + "bitflags 2.9.4", + "block", + "core-graphics-types 0.2.0", + "foreign-types", + "log", + "objc", + "paste", +] + [[package]] name = "mimalloc" version = "0.1.48" @@ -3195,6 +3220,32 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "naga" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916cbc7cb27db60be930a4e2da243cf4bc39569195f22fd8ee419cd31d5b662c" +dependencies = [ + "arrayvec", + "bit-set", + "bitflags 2.9.4", + "cfg-if", + "cfg_aliases", + "codespan-reporting", + "half", + "hashbrown 0.15.5", + "hexf-parse", + "indexmap", + "libm", + "log", + "num-traits", + "once_cell", + "rustc-hash 1.1.0", + "spirv", + "thiserror 2.0.16", + "unicode-ident", +] + [[package]] name = "ndk" version = "0.9.0" @@ -3345,6 +3396,15 @@ dependencies = [ "syn", ] +[[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-sys" version = "0.3.5" @@ -3680,9 +3740,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.7" +version = "0.37.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" dependencies = [ "memchr", ] @@ -3729,6 +3789,15 @@ dependencies = [ "libredox", ] +[[package]] +name = "ordered-float" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2c1f9f56e534ac6a9b8a4600bdf0f530fb393b5f393e7b4d03489c3cf0c3f01" +dependencies = [ + "num-traits", +] + [[package]] name = "ordered-stream" version = "0.2.0" @@ -3909,10 +3978,10 @@ checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi 0.5.2", + "hermit-abi", "pin-project-lite", "rustix 1.1.2", - "windows-sys 0.61.0", + "windows-sys 0.61.1", ] [[package]] @@ -3930,6 +3999,15 @@ dependencies = [ "critical-section", ] +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + [[package]] name = "postcard" version = "1.1.3" @@ -3973,6 +4051,12 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "presser" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" + [[package]] name = "prettyplease" version = "0.2.37" @@ -4197,6 +4281,12 @@ dependencies = [ "getrandom 0.3.3", ] +[[package]] +name = "range-alloc" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" + [[package]] name = "rav1e" version = "0.7.1" @@ -4325,9 +4415,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.2" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" +checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c" dependencies = [ "aho-corasick", "memchr", @@ -4337,9 +4427,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" +checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad" dependencies = [ "aho-corasick", "memchr", @@ -4352,6 +4442,12 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" +[[package]] +name = "renderdoc-sys" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" + [[package]] name = "reqwest" version = "0.12.23" @@ -4531,7 +4627,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.11.0", - "windows-sys 0.61.0", + "windows-sys 0.61.1", ] [[package]] @@ -4682,9 +4778,9 @@ checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] name = "serde" -version = "1.0.226" +version = "1.0.227" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dca6411025b24b60bfa7ec1fe1f8e710ac09782dca409ee8237ba74b51295fd" +checksum = "80ece43fc6fbed4eb5392ab50c07334d3e577cbf40997ee896fe7af40bba4245" dependencies = [ "serde_core", "serde_derive", @@ -4701,18 +4797,18 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.226" +version = "1.0.227" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba2ba63999edb9dac981fb34b3e5c0d111a69b0924e253ed29d83f7c99e966a4" +checksum = "7a576275b607a2c86ea29e410193df32bc680303c82f31e275bbfcafe8b33be5" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.226" +version = "1.0.227" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8db53ae22f34573731bafa1db20f04027b2d25e02d8205921b569171699cdb33" +checksum = "51e694923b8824cf0e9b382adf0f60d4e05f348f357b38833a3fa5ed7c2ede04" dependencies = [ "proc-macro2", "quote", @@ -4944,7 +5040,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ "bitflags 2.9.4", - "calloop 0.13.0", + "calloop", "calloop-wayland-source", "cursor-icon", "libc", @@ -5057,7 +5153,7 @@ version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c07347b7c0301b9adba4350bdcf09c039d0e7160922050db0439b3c6723c8ab" dependencies = [ - "windows-sys 0.61.0", + "windows-sys 0.61.1", ] [[package]] @@ -5069,6 +5165,15 @@ dependencies = [ "lock_api", ] +[[package]] +name = "spirv" +version = "0.3.0+sdk-1.3.268.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" +dependencies = [ + "bitflags 2.9.4", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -5213,7 +5318,7 @@ dependencies = [ "getrandom 0.3.3", "once_cell", "rustix 1.1.2", - "windows-sys 0.61.0", + "windows-sys 0.61.1", ] [[package]] @@ -5563,7 +5668,6 @@ version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ - "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -5643,18 +5747,6 @@ version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" -[[package]] -name = "udev" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af4e37e9ea4401fc841ff54b9ddfc9be1079b1e89434c1a6a865dd68980f7e9f" -dependencies = [ - "io-lifetimes", - "libc", - "libudev-sys", - "pkg-config", -] - [[package]] name = "uds_windows" version = "1.1.0" @@ -5720,6 +5812,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" +[[package]] +name = "unicode-width" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" + [[package]] name = "unicode-xid" version = "0.2.6" @@ -6106,6 +6204,155 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" +[[package]] +name = "wgpu" +version = "26.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70b6ff82bbf6e9206828e1a3178e851f8c20f1c9028e74dd3a8090741ccd5798" +dependencies = [ + "arrayvec", + "bitflags 2.9.4", + "cfg-if", + "cfg_aliases", + "document-features", + "hashbrown 0.15.5", + "js-sys", + "log", + "naga", + "parking_lot", + "portable-atomic", + "profiling", + "raw-window-handle", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "26.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f62f1053bd28c2268f42916f31588f81f64796e2ff91b81293515017ca8bd9" +dependencies = [ + "arrayvec", + "bit-set", + "bit-vec", + "bitflags 2.9.4", + "cfg_aliases", + "document-features", + "hashbrown 0.15.5", + "indexmap", + "log", + "naga", + "once_cell", + "parking_lot", + "portable-atomic", + "profiling", + "raw-window-handle", + "rustc-hash 1.1.0", + "smallvec", + "thiserror 2.0.16", + "wgpu-core-deps-apple", + "wgpu-core-deps-emscripten", + "wgpu-core-deps-windows-linux-android", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core-deps-apple" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18ae5fbde6a4cbebae38358aa73fcd6e0f15c6144b67ef5dc91ded0db125dbdf" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-core-deps-emscripten" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7670e390f416006f746b4600fdd9136455e3627f5bd763abf9a65daa216dd2d" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-core-deps-windows-linux-android" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "720a5cb9d12b3d337c15ff0e24d3e97ed11490ff3f7506e7f3d98c68fa5d6f14" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-hal" +version = "26.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7df2c64ac282a91ad7662c90bc4a77d4a2135bc0b2a2da5a4d4e267afc034b9e" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set", + "bitflags 2.9.4", + "block", + "bytemuck", + "cfg-if", + "cfg_aliases", + "core-graphics-types 0.2.0", + "glow", + "glutin_wgl_sys", + "gpu-alloc", + "gpu-allocator", + "gpu-descriptor", + "hashbrown 0.15.5", + "js-sys", + "khronos-egl", + "libc", + "libloading", + "log", + "metal 0.32.0", + "naga", + "ndk-sys", + "objc", + "ordered-float", + "parking_lot", + "portable-atomic", + "portable-atomic-util", + "profiling", + "range-alloc", + "raw-window-handle", + "renderdoc-sys", + "smallvec", + "thiserror 2.0.16", + "wasm-bindgen", + "web-sys", + "wgpu-types", + "windows 0.58.0", + "windows-core 0.58.0", +] + +[[package]] +name = "wgpu-types" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca7a8d8af57c18f57d393601a1fb159ace8b2328f1b6b5f80893f7d672c9ae2" +dependencies = [ + "bitflags 2.9.4", + "bytemuck", + "js-sys", + "log", + "thiserror 2.0.16", + "web-sys", +] + [[package]] name = "winapi" version = "0.3.9" @@ -6128,7 +6375,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.0", + "windows-sys 0.61.1", ] [[package]] @@ -6188,8 +6435,8 @@ version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-implement 0.60.0", - "windows-interface 0.59.1", + "windows-implement 0.60.1", + "windows-interface 0.59.2", "windows-link 0.1.3", "windows-result 0.3.4", "windows-strings 0.4.2", @@ -6197,12 +6444,12 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.62.0" +version = "0.62.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57fe7168f7de578d2d8a05b07fd61870d2e73b4020e9f49aa00da8471723497c" +checksum = "6844ee5416b285084d3d3fffd743b925a6c9385455f64f6d4fa3031c4c2749a9" dependencies = [ - "windows-implement 0.60.0", - "windows-interface 0.59.1", + "windows-implement 0.60.1", + "windows-interface 0.59.2", "windows-link 0.2.0", "windows-result 0.4.0", "windows-strings 0.5.0", @@ -6232,9 +6479,9 @@ dependencies = [ [[package]] name = "windows-implement" -version = "0.60.0" +version = "0.60.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +checksum = "edb307e42a74fb6de9bf3a02d9712678b22399c87e6fa869d6dfcd8c1b7754e0" dependencies = [ "proc-macro2", "quote", @@ -6254,9 +6501,9 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.59.1" +version = "0.59.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +checksum = "c0abd1ddbc6964ac14db11c7213d6532ef34bd9aa042c2e5935f59d7908b46a5" dependencies = [ "proc-macro2", "quote", @@ -6349,15 +6596,6 @@ dependencies = [ "windows-targets 0.42.2", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" @@ -6382,14 +6620,14 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.3", + "windows-targets 0.53.4", ] [[package]] name = "windows-sys" -version = "0.61.0" +version = "0.61.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa" +checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f" dependencies = [ "windows-link 0.2.0", ] @@ -6409,21 +6647,6 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -6442,11 +6665,11 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.3" +version = "0.53.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +checksum = "2d42b7b7f66d2a06854650af09cfdf8713e427a439c97ad65a6375318033ac4b" dependencies = [ - "windows-link 0.1.3", + "windows-link 0.2.0", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", @@ -6472,12 +6695,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -6496,12 +6713,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -6520,12 +6731,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -6556,12 +6761,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -6580,12 +6779,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -6604,12 +6797,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -6628,12 +6815,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -6658,7 +6839,7 @@ dependencies = [ "bitflags 2.9.4", "block2 0.5.1", "bytemuck", - "calloop 0.13.0", + "calloop", "cfg_aliases", "concurrent-queue", "core-foundation 0.9.4", @@ -6796,17 +6977,6 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b" -[[package]] -name = "xkbcommon" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d66ca9352cbd4eecbbc40871d8a11b4ac8107cfc528a6e14d7c19c69d0e1ac9" -dependencies = [ - "libc", - "memmap2", - "xkeysym", -] - [[package]] name = "xkbcommon-dl" version = "0.4.2" diff --git a/Cargo.toml b/Cargo.toml index a237d8a..25e4d4c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,7 @@ chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde-big-array = "0.5" -slint = { version = "1.12", default-features = false, features = ["compat-1-2", "std", "backend-winit", "renderer-femtovg"] } +slint = { version = "1.12", default-features = false, features = ["compat-1-2", "std", "backend-winit", "renderer-femtovg-wgpu"] } open = "5.3" sha2 = "0.10" sdl3-sys = { version = "0.5", features = ["build-from-source-static"] } From 0bf70a77ea93b781d227efbc2cd9e30934a576ec Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 26 Sep 2025 18:52:27 +0200 Subject: [PATCH 0610/1117] correct load block size --- parallel-rdp/interface.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index e01e1a6..87d5c2b 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -738,12 +738,12 @@ uint64_t rdp_process_commands() break; case RDP::Op::LoadBlock: { - uint32_t upper_left_s = ((w1 >> 12) & 0xFFF) >> 2; - uint32_t upper_left_t = (w1 & 0xFFF) >> 2; + uint32_t upper_left_s = ((w1 >> 12) & 0xFFF); + uint32_t upper_left_t = (w1 & 0xFFF); uint32_t offset_address = (rdp_device.frame_buffer_info.texture_address + pixel_size(rdp_device.frame_buffer_info.texture_pixel_size, upper_left_s + upper_left_t * rdp_device.frame_buffer_info.texture_width)) >> 3; if (offset_address < rdram_dirty.size() && !rdram_dirty[offset_address]) { - uint32_t lower_right_s = ((w2 >> 12) & 0xFFF) >> 2; + uint32_t lower_right_s = ((w2 >> 12) & 0xFFF); std::fill_n(rdram_dirty.begin() + offset_address, (pixel_size(rdp_device.frame_buffer_info.texture_pixel_size, lower_right_s - upper_left_s) + 7) >> 3, true); } } From bd4aff2b2c23302293500ba1f722c8983fbaaa36 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 27 Sep 2025 21:32:27 +0200 Subject: [PATCH 0611/1117] cargo update --- Cargo.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 78c7f08..4236aea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -669,9 +669,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.38" +version = "1.2.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80f41ae168f955c12fb8960b057d70d0ca153fb83182b57d86380443527be7e9" +checksum = "e1354349954c6fc9cb0deab020f27f783cf0b604e8bb754dc4658ecf0d29c35f" dependencies = [ "find-msvc-tools", "jobserver", @@ -4778,9 +4778,9 @@ checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] name = "serde" -version = "1.0.227" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80ece43fc6fbed4eb5392ab50c07334d3e577cbf40997ee896fe7af40bba4245" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", "serde_derive", @@ -4797,18 +4797,18 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.227" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a576275b607a2c86ea29e410193df32bc680303c82f31e275bbfcafe8b33be5" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.227" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e694923b8824cf0e9b382adf0f60d4e05f348f357b38833a3fa5ed7c2ede04" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -5506,9 +5506,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.3" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f63835928ca123f1bef57abbcd23bb2ba0ac9ae1235f1e65bda0d06e7786bd" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ "rustls", "tokio", From f254bec968fb34ad65042888eff30f0005a64dfc Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 27 Sep 2025 21:33:21 +0200 Subject: [PATCH 0612/1117] bump to 1.1.8 --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4236aea..98e3d44 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1929,7 +1929,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.7" +version = "1.1.8" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index 25e4d4c..1b0741f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.7" +version = "1.1.8" edition = "2024" rust-version = "1.90" From d6d608b6746aa647a2e49adc4b5de366924a4e2d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 28 Sep 2025 09:59:02 +0200 Subject: [PATCH 0613/1117] Revert "more audio cleanup" This reverts commit f3271cba63571d4d42c84c4c2db891af125b6f8d. --- src/ui/audio.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 53a85a3..b81ad9d 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -86,6 +86,20 @@ pub fn play_audio(device: &device::Device, dram_addr: usize, length: u64) { let audio_queued = unsafe { sdl3_sys::audio::SDL_GetAudioStreamQueued(device.ui.audio.audio_stream) } as f64; let acceptable_latency = (device.ai.freq as f64 * 0.2) * 4.0; + let min_latency = (device.ai.freq as f64 * 0.02) * 4.0; + + if audio_queued < min_latency { + let silence_buffer: Vec = vec![0; min_latency as usize & !3]; + if !unsafe { + sdl3_sys::audio::SDL_PutAudioStreamData( + device.ui.audio.audio_stream, + silence_buffer.as_ptr() as *const std::ffi::c_void, + silence_buffer.len() as i32, + ) + } { + panic!("Could not play audio"); + } + } if audio_queued < acceptable_latency && !unsafe { From a0237e9f7d51846dafb2ffcd850e1e7b55f2dcd6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 28 Sep 2025 10:00:37 +0200 Subject: [PATCH 0614/1117] bump to 1.1.9 --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 98e3d44..aaa6a4f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1929,7 +1929,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.8" +version = "1.1.9" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index 1b0741f..588e2cc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.8" +version = "1.1.9" edition = "2024" rust-version = "1.90" From d3ecc37da671a85614cbf941378cec04e5dabb1b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 1 Oct 2025 10:05:03 +0200 Subject: [PATCH 0615/1117] fix compare interrupt issue (#588) --- src/device/exceptions.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/device/exceptions.rs b/src/device/exceptions.rs index 19662e6..4079d05 100644 --- a/src/device/exceptions.rs +++ b/src/device/exceptions.rs @@ -18,7 +18,6 @@ pub fn check_pending_interrupts(device: &mut device::Device) { device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = device::cop0::COP0_CAUSE_IP2; } else if device.cpu.cop0.pending_compare_interrupt { device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = device::cop0::COP0_CAUSE_IP7; - device.cpu.cop0.pending_compare_interrupt = false; } if (device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] From 20500987350ad88508a84e2230ac37ca7e23882f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 6 Oct 2025 09:02:50 +0200 Subject: [PATCH 0616/1117] fix out of bounds access (#590) --- parallel-rdp/interface.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 87d5c2b..7cca8e4 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -711,7 +711,8 @@ uint64_t rdp_process_commands() uint32_t offset_address = (rdp_device.frame_buffer_info.framebuffer_address + pixel_size(rdp_device.frame_buffer_info.framebuffer_pixel_size, rdp_device.frame_buffer_info.framebuffer_y_offset * rdp_device.frame_buffer_info.framebuffer_width)) >> 3; if (offset_address < rdram_dirty.size() && !rdram_dirty[offset_address]) { - std::fill_n(rdram_dirty.begin() + offset_address, (pixel_size(rdp_device.frame_buffer_info.framebuffer_pixel_size, rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height) + 7) >> 3, true); + uint32_t end_addr = std::min(offset_address + ((pixel_size(rdp_device.frame_buffer_info.framebuffer_pixel_size, rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height) + 7) >> 3), static_cast(rdram_dirty.size())); + std::fill(rdram_dirty.begin() + offset_address, rdram_dirty.begin() + end_addr, true); } if (rdp_device.frame_buffer_info.depth_buffer_enabled) @@ -719,7 +720,8 @@ uint64_t rdp_process_commands() offset_address = (rdp_device.frame_buffer_info.depthbuffer_address + pixel_size(2, rdp_device.frame_buffer_info.framebuffer_y_offset * rdp_device.frame_buffer_info.framebuffer_width)) >> 3; if (offset_address < rdram_dirty.size() && !rdram_dirty[offset_address]) { - std::fill_n(rdram_dirty.begin() + offset_address, (pixel_size(2, rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height) + 7) >> 3, true); + uint32_t end_addr = std::min(offset_address + ((pixel_size(2, rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height) + 7) >> 3), static_cast(rdram_dirty.size())); + std::fill(rdram_dirty.begin() + offset_address, rdram_dirty.begin() + end_addr, true); } } } @@ -732,7 +734,8 @@ uint64_t rdp_process_commands() if (offset_address < rdram_dirty.size() && !rdram_dirty[offset_address]) { uint32_t lower_right_t = (w2 & 0xFFF) >> 2; - std::fill_n(rdram_dirty.begin() + offset_address, (pixel_size(rdp_device.frame_buffer_info.texture_pixel_size, (lower_right_t - upper_left_t) * rdp_device.frame_buffer_info.texture_width) + 7) >> 3, true); + uint32_t end_addr = std::min(offset_address + ((pixel_size(rdp_device.frame_buffer_info.texture_pixel_size, (lower_right_t - upper_left_t) * rdp_device.frame_buffer_info.texture_width) + 7) >> 3), static_cast(rdram_dirty.size())); + std::fill(rdram_dirty.begin() + offset_address, rdram_dirty.begin() + end_addr, true); } } break; @@ -744,7 +747,8 @@ uint64_t rdp_process_commands() if (offset_address < rdram_dirty.size() && !rdram_dirty[offset_address]) { uint32_t lower_right_s = ((w2 >> 12) & 0xFFF); - std::fill_n(rdram_dirty.begin() + offset_address, (pixel_size(rdp_device.frame_buffer_info.texture_pixel_size, lower_right_s - upper_left_s) + 7) >> 3, true); + uint32_t end_addr = std::min(offset_address + ((pixel_size(rdp_device.frame_buffer_info.texture_pixel_size, lower_right_s - upper_left_s) + 7) >> 3), static_cast(rdram_dirty.size())); + std::fill(rdram_dirty.begin() + offset_address, rdram_dirty.begin() + end_addr, true); } } break; From 6c09176d126d23f00cceed0df1bcd283f7ad5b9c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 11 Oct 2025 19:32:35 +0200 Subject: [PATCH 0617/1117] add .srm for GB saves --- src/ui/gui.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 49fa55d..ca45260 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -472,7 +472,7 @@ fn open_rom(app: &AppWindow, usb: ui::Usb) { select_gb_ram[i] = Some( rfd::AsyncFileDialog::new() .set_title(format!("GB RAM P{}", i + 1)) - .add_filter("GB RAM files", &["sav", "ram", "SAV", "RAM"]) + .add_filter("GB RAM files", &["sav", "ram", "srm", "SAV", "RAM", "SRM"]) .pick_file(), ); } From 6de8128f5bd261377cccc68d5e64f4297d5c5075 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 12 Oct 2025 12:30:57 +0200 Subject: [PATCH 0618/1117] cargo update --- Cargo.lock | 485 ++++++++++++++++++++++++++++------------------------- Cargo.toml | 2 +- 2 files changed, 257 insertions(+), 230 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index aaa6a4f..e91b7e1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "ab_glyph" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e074464580a518d16a7126262fffaaa47af89d4099d4cb403f8ed938ba12ee7d" +checksum = "01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -119,9 +119,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.20" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -134,9 +134,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" @@ -294,7 +294,7 @@ dependencies = [ "polling", "rustix 1.1.2", "slab", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -352,7 +352,7 @@ dependencies = [ "rustix 1.1.2", "signal-hook-registry", "slab", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -440,7 +440,7 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-link 0.2.0", + "windows-link 0.2.1", ] [[package]] @@ -547,11 +547,11 @@ dependencies = [ [[package]] name = "block2" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" dependencies = [ - "objc2 0.6.2", + "objc2 0.6.3", ] [[package]] @@ -596,18 +596,18 @@ checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" [[package]] name = "bytemuck" -version = "1.23.2" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.10.1" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" +checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", @@ -669,9 +669,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.39" +version = "1.2.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1354349954c6fc9cb0deab020f27f783cf0b604e8bb754dc4658ecf0d29c35f" +checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" dependencies = [ "find-msvc-tools", "jobserver", @@ -735,7 +735,7 @@ dependencies = [ "js-sys", "num-traits", "wasm-bindgen", - "windows-link 0.2.0", + "windows-link 0.2.1", ] [[package]] @@ -829,7 +829,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" dependencies = [ - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -1161,9 +1161,9 @@ checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" [[package]] name = "deflate64" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b" +checksum = "26bf8fc351c5ed29b5c2f0cbbac1b209b74f60ecd62e675a998df72c49af5204" [[package]] name = "deranged" @@ -1246,7 +1246,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -1262,9 +1262,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ "bitflags 2.9.4", - "block2 0.6.1", + "block2 0.6.2", "libc", - "objc2 0.6.2", + "objc2 0.6.3", ] [[package]] @@ -1310,9 +1310,9 @@ checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" [[package]] name = "dwrote" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20c93d234bac0cdd0e2ac08bc8a5133f8df2169e95b262dfcea5e5cb7855672f" +checksum = "9e1b35532432acc8b19ceed096e35dfa088d3ea037fe4f3c085f1f97f33b4d02" dependencies = [ "lazy_static", "libc", @@ -1409,7 +1409,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -1558,15 +1558,15 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" [[package]] name = "flate2" -version = "1.1.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" +checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" dependencies = [ "crc32fast", "libz-rs-sys", @@ -1875,10 +1875,10 @@ dependencies = [ "glutin_glx_sys", "glutin_wgl_sys", "libloading", - "objc2 0.6.2", - "objc2-app-kit 0.3.1", + "objc2 0.6.3", + "objc2-app-kit 0.3.2", "objc2-core-foundation", - "objc2-foundation 0.3.1", + "objc2-foundation 0.3.2", "once_cell", "raw-window-handle", "wayland-sys", @@ -2060,13 +2060,14 @@ dependencies = [ [[package]] name = "half" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" +checksum = "e54c115d4f30f52c67202f079c5f9d8b49db4691f460fdb0b4c2e838261b2ba5" dependencies = [ "cfg-if", "crunchy", "num-traits", + "zerocopy", ] [[package]] @@ -2285,7 +2286,7 @@ dependencies = [ "i-slint-renderer-skia", "lyon_path", "muda", - "objc2-app-kit 0.3.1", + "objc2-app-kit 0.3.2", "pin-weak", "raw-window-handle", "scoped-tls-hkt", @@ -2450,12 +2451,12 @@ dependencies = [ "i-slint-core-macros", "lyon_path", "metal 0.31.0", - "objc2 0.6.2", - "objc2-app-kit 0.3.1", + "objc2 0.6.3", + "objc2-app-kit 0.3.2", "objc2-core-foundation", - "objc2-foundation 0.3.1", - "objc2-metal 0.3.1", - "objc2-quartz-core 0.3.1", + "objc2-foundation 0.3.2", + "objc2-metal 0.3.2", + "objc2-quartz-core 0.3.2", "pin-weak", "raw-window-handle", "raw-window-metal", @@ -2484,7 +2485,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.62.1", + "windows-core 0.62.2", ] [[package]] @@ -2874,9 +2875,9 @@ checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" -version = "0.2.176" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libfuzzer-sys" @@ -2895,7 +2896,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-link 0.2.0", + "windows-link 0.2.1", ] [[package]] @@ -2922,7 +2923,7 @@ checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ "bitflags 2.9.4", "libc", - "redox_syscall 0.5.17", + "redox_syscall 0.5.18", ] [[package]] @@ -2984,11 +2985,10 @@ checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" [[package]] name = "lock_api" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] @@ -3072,9 +3072,9 @@ dependencies = [ [[package]] name = "lzma-rust2" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d3176655c152883186e161a1031192759660878ac04b2f776290b4f4e770a9" +checksum = "e5999f9ccfee85f09b54a2205c5851f884c83e4e7ef056843ff68d7f2006cd82" [[package]] name = "malloc_buf" @@ -3193,9 +3193,9 @@ dependencies = [ [[package]] name = "moxcms" -version = "0.7.5" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd32fa8935aeadb8a8a6b6b351e40225570a37c43de67690383d87ef170cd08" +checksum = "c588e11a3082784af229e23e8e4ecf5bcc6fbe4f69101e0421ce8d79da7f0b40" dependencies = [ "num-traits", "pxfm", @@ -3210,13 +3210,13 @@ dependencies = [ "crossbeam-channel", "dpi", "keyboard-types", - "objc2 0.6.2", - "objc2-app-kit 0.3.1", + "objc2 0.6.3", + "objc2-app-kit 0.3.2", "objc2-core-foundation", - "objc2-foundation 0.3.1", + "objc2-foundation 0.3.2", "once_cell", "png 0.17.16", - "thiserror 2.0.16", + "thiserror 2.0.17", "windows-sys 0.60.2", ] @@ -3242,7 +3242,7 @@ dependencies = [ "once_cell", "rustc-hash 1.1.0", "spirv", - "thiserror 2.0.16", + "thiserror 2.0.17", "unicode-ident", ] @@ -3423,9 +3423,9 @@ dependencies = [ [[package]] name = "objc2" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "561f357ba7f3a2a61563a186a163d0a3a5247e1089524a3981d49adb775078bc" +checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" dependencies = [ "objc2-encode", ] @@ -3448,21 +3448,23 @@ dependencies = [ [[package]] name = "objc2-app-kit" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ "bitflags 2.9.4", - "block2 0.6.1", + "block2 0.6.2", "libc", - "objc2 0.6.2", - "objc2-cloud-kit 0.3.1", - "objc2-core-data 0.3.1", + "objc2 0.6.3", + "objc2-cloud-kit 0.3.2", + "objc2-core-data 0.3.2", "objc2-core-foundation", "objc2-core-graphics", - "objc2-core-image 0.3.1", - "objc2-foundation 0.3.1", - "objc2-quartz-core 0.3.1", + "objc2-core-image 0.3.2", + "objc2-core-text", + "objc2-core-video", + "objc2-foundation 0.3.2", + "objc2-quartz-core 0.3.2", ] [[package]] @@ -3480,13 +3482,13 @@ dependencies = [ [[package]] name = "objc2-cloud-kit" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17614fdcd9b411e6ff1117dfb1d0150f908ba83a7df81b1f118005fe0a8ea15d" +checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ "bitflags 2.9.4", - "objc2 0.6.2", - "objc2-foundation 0.3.1", + "objc2 0.6.3", + "objc2-foundation 0.3.2", ] [[package]] @@ -3514,35 +3516,35 @@ dependencies = [ [[package]] name = "objc2-core-data" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291fbbf7d29287518e8686417cf7239c74700fd4b607623140a7d4a3c834329d" +checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ "bitflags 2.9.4", - "objc2 0.6.2", - "objc2-foundation 0.3.1", + "objc2 0.6.3", + "objc2-foundation 0.3.2", ] [[package]] name = "objc2-core-foundation" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ "bitflags 2.9.4", "dispatch2", - "objc2 0.6.2", + "objc2 0.6.3", ] [[package]] name = "objc2-core-graphics" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ "bitflags 2.9.4", "dispatch2", - "objc2 0.6.2", + "objc2 0.6.3", "objc2-core-foundation", "objc2-io-surface", ] @@ -3561,12 +3563,12 @@ dependencies = [ [[package]] name = "objc2-core-image" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79b3dc0cc4386b6ccf21c157591b34a7f44c8e75b064f85502901ab2188c007e" +checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" dependencies = [ - "objc2 0.6.2", - "objc2-foundation 0.3.1", + "objc2 0.6.3", + "objc2-foundation 0.3.2", ] [[package]] @@ -3581,6 +3583,31 @@ dependencies = [ "objc2-foundation 0.2.2", ] +[[package]] +name = "objc2-core-text" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" +dependencies = [ + "bitflags 2.9.4", + "objc2 0.6.3", + "objc2-core-foundation", + "objc2-core-graphics", +] + +[[package]] +name = "objc2-core-video" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" +dependencies = [ + "bitflags 2.9.4", + "objc2 0.6.3", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-io-surface", +] + [[package]] name = "objc2-encode" version = "4.1.0" @@ -3602,23 +3629,23 @@ dependencies = [ [[package]] name = "objc2-foundation" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ "bitflags 2.9.4", - "objc2 0.6.2", + "objc2 0.6.3", "objc2-core-foundation", ] [[package]] name = "objc2-io-surface" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ "bitflags 2.9.4", - "objc2 0.6.2", + "objc2 0.6.3", "objc2-core-foundation", ] @@ -3648,13 +3675,13 @@ dependencies = [ [[package]] name = "objc2-metal" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f246c183239540aab1782457b35ab2040d4259175bd1d0c58e46ada7b47a874" +checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794" dependencies = [ "bitflags 2.9.4", - "objc2 0.6.2", - "objc2-foundation 0.3.1", + "objc2 0.6.3", + "objc2-foundation 0.3.2", ] [[package]] @@ -3672,15 +3699,15 @@ dependencies = [ [[package]] name = "objc2-quartz-core" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ffb6a0cd5f182dc964334388560b12a57f7b74b3e2dec5e2722aa2dfb2ccd5" +checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ "bitflags 2.9.4", - "objc2 0.6.2", + "objc2 0.6.3", "objc2-core-foundation", - "objc2-foundation 0.3.1", - "objc2-metal 0.3.1", + "objc2-foundation 0.3.2", + "objc2-metal 0.3.2", ] [[package]] @@ -3825,9 +3852,9 @@ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", @@ -3835,15 +3862,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.17", + "redox_syscall 0.5.18", "smallvec", - "windows-targets 0.52.6", + "windows-link 0.2.1", ] [[package]] @@ -3981,7 +4008,7 @@ dependencies = [ "hermit-abi", "pin-project-lite", "rustix 1.1.2", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -4073,7 +4100,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit 0.23.6", + "toml_edit 0.23.7", ] [[package]] @@ -4106,9 +4133,9 @@ dependencies = [ [[package]] name = "pxfm" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83f9b339b02259ada5c0f4a389b7fb472f933aa17ce176fd2ad98f28bb401fde" +checksum = "a3cbdf373972bf78df4d3b518d07003938e2c7d1fb5891e55f9cb6df57009d84" dependencies = [ "num-traits", ] @@ -4166,7 +4193,7 @@ dependencies = [ "rustc-hash 2.1.1", "rustls", "socket2", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", "web-time", @@ -4187,7 +4214,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.16", + "thiserror 2.0.17", "tinyvec", "tracing", "web-time", @@ -4209,9 +4236,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] @@ -4358,10 +4385,10 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40d213455a5f1dc59214213c7330e074ddf8114c9a42411eb890c767357ce135" dependencies = [ - "objc2 0.6.2", + "objc2 0.6.3", "objc2-core-foundation", - "objc2-foundation 0.3.1", - "objc2-quartz-core 0.3.1", + "objc2-foundation 0.3.2", + "objc2-quartz-core 0.3.2", ] [[package]] @@ -4395,9 +4422,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.17" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ "bitflags 2.9.4", ] @@ -4410,14 +4437,14 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.16", "libredox", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "regex" -version = "1.11.3" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c" +checksum = "4a52d8d02cacdb176ef4678de6c052efb4b3da14b78e4db683a4252762be5433" dependencies = [ "aho-corasick", "memchr", @@ -4427,9 +4454,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad" +checksum = "722166aa0d7438abbaa4d5cc2c649dac844e8c56d82fb3d33e9c34b5cd268fc6" dependencies = [ "aho-corasick", "memchr", @@ -4438,9 +4465,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" +checksum = "c3160422bbd54dd5ecfdca71e5fd59b7b8fe2b1697ab2baf64f6d05dcc66d298" [[package]] name = "renderdoc-sys" @@ -4513,14 +4540,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef2bee61e6cffa4635c72d7d81a84294e28f0930db0ddcb0f66d10244674ebed" dependencies = [ "ashpd", - "block2 0.6.1", + "block2 0.6.2", "dispatch2", "js-sys", "log", - "objc2 0.6.2", - "objc2-app-kit 0.3.1", + "objc2 0.6.3", + "objc2-app-kit 0.3.2", "objc2-core-foundation", - "objc2-foundation 0.3.1", + "objc2-foundation 0.3.2", "pollster", "raw-window-handle", "urlencoding", @@ -4627,7 +4654,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.11.0", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -4656,9 +4683,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.6" +version = "0.103.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8572f3c2cb9934231157b45499fc41e1f58c589fdfb81a844ba873265e80f8eb" +checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" dependencies = [ "ring", "rustls-pki-types", @@ -4737,15 +4764,15 @@ dependencies = [ [[package]] name = "sdl3-src" -version = "3.2.22" +version = "3.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8447739fe8a492670e2f8c60bf821bb0f4260bd05019e4333ed483602a5cfe75" +checksum = "560203d4fd508d45068ceedf0a11e264665f2bc974f9b34919f8b7fabf860bfa" [[package]] name = "sdl3-sys" -version = "0.5.5+SDL3-3.2.22" +version = "0.5.7+SDL3-3.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488b4c68d9c0a450087a8b7c9dc6921483354127b0e60033d2d9b8f6a281331b" +checksum = "1208bd508b0e6c34d16878663b2a00674755db4a6a6e4e6c60863f7c2d160884" dependencies = [ "cmake", "rpkg-config", @@ -4868,7 +4895,7 @@ checksum = "7048af9cb3f23ee3315bccaeeef1da33c1b2cad63b8a26ac5b5498b6ef472902" dependencies = [ "crc32fast", "js-sys", - "lzma-rust2 0.14.2", + "lzma-rust2 0.14.3", "wasm-bindgen", ] @@ -5003,7 +5030,7 @@ dependencies = [ "derive_more", "i-slint-compiler", "spin_on", - "toml_edit 0.23.6", + "toml_edit 0.23.7", ] [[package]] @@ -5117,7 +5144,7 @@ dependencies = [ "objc2-foundation 0.2.2", "objc2-quartz-core 0.2.2", "raw-window-handle", - "redox_syscall 0.5.17", + "redox_syscall 0.5.18", "rustix 0.38.44", "tiny-xlib", "wasm-bindgen", @@ -5153,7 +5180,7 @@ version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c07347b7c0301b9adba4350bdcf09c039d0e7160922050db0439b3c6723c8ab" dependencies = [ - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -5176,9 +5203,9 @@ dependencies = [ [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "static_assertions" @@ -5318,7 +5345,7 @@ dependencies = [ "getrandom 0.3.3", "once_cell", "rustix 1.1.2", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -5347,11 +5374,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.16", + "thiserror-impl 2.0.17", ] [[package]] @@ -5367,9 +5394,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", @@ -5562,9 +5589,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f1085dec27c2b6632b04c80b3bb1b4300d6495d1e129693bdda7d91e72eec1" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" dependencies = [ "serde_core", ] @@ -5585,12 +5612,12 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.23.6" +version = "0.23.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3effe7c0e86fdff4f69cdd2ccc1b96f933e24811c5441d44904e8683e27184b" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" dependencies = [ "indexmap", - "toml_datetime 0.7.2", + "toml_datetime 0.7.3", "toml_parser", "toml_writer", "winnow", @@ -5598,9 +5625,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" dependencies = [ "winnow", ] @@ -5613,9 +5640,9 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "toml_writer" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d163a63c116ce562a22cda521fcc4d79152e7aba014456fb5eb442f6d6a10109" +checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" [[package]] name = "tower" @@ -5727,7 +5754,7 @@ dependencies = [ "log", "rand 0.9.2", "sha1", - "thiserror 2.0.16", + "thiserror 2.0.17", "utf-8", ] @@ -5743,9 +5770,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "uds_windows" @@ -5814,9 +5841,9 @@ checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" [[package]] name = "unicode-width" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" [[package]] name = "unicode-xid" @@ -6191,9 +6218,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" +checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8" dependencies = [ "rustls-pki-types", ] @@ -6256,7 +6283,7 @@ dependencies = [ "raw-window-handle", "rustc-hash 1.1.0", "smallvec", - "thiserror 2.0.16", + "thiserror 2.0.17", "wgpu-core-deps-apple", "wgpu-core-deps-emscripten", "wgpu-core-deps-windows-linux-android", @@ -6331,7 +6358,7 @@ dependencies = [ "raw-window-handle", "renderdoc-sys", "smallvec", - "thiserror 2.0.16", + "thiserror 2.0.17", "wasm-bindgen", "web-sys", "wgpu-types", @@ -6349,7 +6376,7 @@ dependencies = [ "bytemuck", "js-sys", "log", - "thiserror 2.0.16", + "thiserror 2.0.17", "web-sys", ] @@ -6375,7 +6402,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -6435,8 +6462,8 @@ version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-implement 0.60.1", - "windows-interface 0.59.2", + "windows-implement 0.60.2", + "windows-interface 0.59.3", "windows-link 0.1.3", "windows-result 0.3.4", "windows-strings 0.4.2", @@ -6444,15 +6471,15 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.62.1" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6844ee5416b285084d3d3fffd743b925a6c9385455f64f6d4fa3031c4c2749a9" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-implement 0.60.1", - "windows-interface 0.59.2", - "windows-link 0.2.0", - "windows-result 0.4.0", - "windows-strings 0.5.0", + "windows-implement 0.60.2", + "windows-interface 0.59.3", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", ] [[package]] @@ -6479,9 +6506,9 @@ dependencies = [ [[package]] name = "windows-implement" -version = "0.60.1" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb307e42a74fb6de9bf3a02d9712678b22399c87e6fa869d6dfcd8c1b7754e0" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", @@ -6501,9 +6528,9 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.59.2" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0abd1ddbc6964ac14db11c7213d6532ef34bd9aa042c2e5935f59d7908b46a5" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", @@ -6518,9 +6545,9 @@ checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] name = "windows-link" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-numerics" @@ -6552,11 +6579,11 @@ dependencies = [ [[package]] name = "windows-result" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link 0.2.0", + "windows-link 0.2.1", ] [[package]] @@ -6580,11 +6607,11 @@ dependencies = [ [[package]] name = "windows-strings" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link 0.2.0", + "windows-link 0.2.1", ] [[package]] @@ -6620,16 +6647,16 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.4", + "windows-targets 0.53.5", ] [[package]] name = "windows-sys" -version = "0.61.1" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-link 0.2.0", + "windows-link 0.2.1", ] [[package]] @@ -6665,19 +6692,19 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.4" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d42b7b7f66d2a06854650af09cfdf8713e427a439c97ad65a6375318033ac4b" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows-link 0.2.0", - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] @@ -6703,9 +6730,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" @@ -6721,9 +6748,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" @@ -6739,9 +6766,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" @@ -6751,9 +6778,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" @@ -6769,9 +6796,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" @@ -6787,9 +6814,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" @@ -6805,9 +6832,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" @@ -6823,9 +6850,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winit" @@ -7136,9 +7163,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" dependencies = [ "zeroize_derive", ] @@ -7189,9 +7216,9 @@ dependencies = [ [[package]] name = "zip" -version = "5.1.1" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f852905151ac8d4d06fdca66520a661c09730a74c6d4e2b0f27b436b382e532" +checksum = "eb2a05c7c36fde6c09b08576c9f7fb4cda705990f73b58fe011abf7dfb24168b" dependencies = [ "aes", "arbitrary", diff --git a/Cargo.toml b/Cargo.toml index 588e2cc..f3766fb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ rust-version = "1.90" [dependencies] dirs = "6.0" -zip = "5.1" +zip = "6.0" governor = "0.10" sevenz-rust2 = { version = "0.19", default-features = false } chrono = "0.4" From 847df61526ebd363a06d99ed70b37dda3ae6c45b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 26 Oct 2025 13:33:40 +0100 Subject: [PATCH 0619/1117] Add pause between key bindings (#594) --- src/ui/input.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/ui/input.rs b/src/ui/input.rs index f6d061f..53c8175 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -702,6 +702,13 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, d } } } + ui::video::draw_text( + format!("Binding set for {key}").as_str(), + renderer, + text_engine, + font, + ); + std::thread::sleep(std::time::Duration::from_millis(200)); } close_controllers(open_joysticks, open_controllers); From fe0297690f5a2616d690bc1a8f6cfa0bdf6e2c96 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 26 Oct 2025 13:42:25 +0100 Subject: [PATCH 0620/1117] pump events during vi (#593) * pump events during vi * add var * more * more --- src/device.rs | 1 + src/device/pif.rs | 4 ++++ src/device/vi.rs | 4 ++++ src/ui/input.rs | 2 -- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/device.rs b/src/device.rs index 34ba6e5..4290f56 100644 --- a/src/device.rs +++ b/src/device.rs @@ -322,6 +322,7 @@ impl Device { pif: pif::Pif { rom: [0; 1984], ram: [0; 64], + input_gathered: false, channels: [pif::PifChannel { tx: None, tx_buf: None, diff --git a/src/device/pif.rs b/src/device/pif.rs index 2881b57..b24711c 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -8,6 +8,7 @@ pub struct Pif { #[serde(with = "serde_big_array::BigArray")] pub ram: [u8; 64], pub channels: [PifChannel; 5], + pub input_gathered: bool, } #[derive(Copy, Clone, serde::Serialize, serde::Deserialize)] @@ -95,6 +96,9 @@ fn process_channel(device: &mut device::Device, channel: usize) -> usize { } pub fn update_pif_ram(device: &mut device::Device) -> u64 { + unsafe { sdl3_sys::events::SDL_PumpEvents() }; + device.pif.input_gathered = true; + let mut active_channels = 0; for k in 0..PIF_CHANNELS_COUNT { active_channels += process_channel(device, k) diff --git a/src/device/vi.rs b/src/device/vi.rs index 392b600..8110118 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -159,6 +159,10 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { if device.netplay.is_none() && paused { ui::video::pause_loop(); + } else if !device.pif.input_gathered { + unsafe { sdl3_sys::events::SDL_PumpEvents() }; // in case the game isn't prompting for input + } else { + device.pif.input_gathered = false; } /* diff --git a/src/ui/input.rs b/src/ui/input.rs index 53c8175..957a687 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -385,8 +385,6 @@ pub fn get_controller_paths(game_ui: &ui::Ui) -> Vec> { } pub fn get(ui: &ui::Ui, channel: usize) -> InputData { - unsafe { sdl3_sys::events::SDL_PumpEvents() }; - let profile_name = ui.config.input.input_profile_binding[channel].clone(); let profile = ui.config.input.input_profiles.get(&profile_name).unwrap(); let mut keys = 0; From 726a58f854a366e62b4a594b92d57d835fb2b70f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 26 Oct 2025 13:45:56 +0100 Subject: [PATCH 0621/1117] cargo update --- Cargo.lock | 874 +++++++++++++++++++++++++++-------------------------- 1 file changed, 450 insertions(+), 424 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e91b7e1..15dd5c5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,15 +18,6 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" -[[package]] -name = "addr2line" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" -dependencies = [ - "gimli", -] - [[package]] name = "adler2" version = "2.0.1" @@ -51,7 +42,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", "version_check", "zerocopy", @@ -88,7 +79,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", - "bitflags 2.9.4", + "bitflags 2.10.0", "cc", "cesu8", "jni", @@ -407,14 +398,14 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "av1-grain" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3efb2ca85bc610acfa917b5aaa36f3fcbebed5b3182d7f877b02531c4b80c8" +checksum = "8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8" dependencies = [ "anyhow", "arrayvec", "log", - "nom", + "nom 8.0.0", "num-rational", "v_frame", ] @@ -428,21 +419,6 @@ dependencies = [ "arrayvec", ] -[[package]] -name = "backtrace" -version = "0.3.76" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-link 0.2.1", -] - [[package]] name = "base64" version = "0.22.1" @@ -465,7 +441,7 @@ version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -508,11 +484,11 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.4" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -634,9 +610,9 @@ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "bzip2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bea8dcd42434048e4f7a304411d9273a411f647446c1234a65ce0554923f4cff" +checksum = "f3a53fac24f34a81bc9954b5d6cfce0c21e18ec6959f44f56e8e90e4bb7c346c" dependencies = [ "libbz2-rs-sys", ] @@ -647,7 +623,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "log", "polling", "rustix 0.38.44", @@ -669,9 +645,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.41" +version = "1.2.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" +checksum = "739eb0f94557554b3ca9a86d2d37bebd49c5e6d0c1d2bda35ba5bdac830befc2" dependencies = [ "find-msvc-tools", "jobserver", @@ -691,7 +667,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" dependencies = [ - "nom", + "nom 7.1.3", ] [[package]] @@ -706,9 +682,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" @@ -735,7 +711,7 @@ dependencies = [ "js-sys", "num-traits", "wasm-bindgen", - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -761,9 +737,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.48" +version = "4.5.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae" +checksum = "0c2cfd7bf8a6017ddaa4e32ffe7403d547790db06bd171c1c53926faab501623" dependencies = [ "clap_builder", "clap_derive", @@ -771,9 +747,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.48" +version = "4.5.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9" +checksum = "0a4c05b9e80c5ccd3a7ef080ad7b6ba7d6fc00a985b8b157197075677c82c7a0" dependencies = [ "anstream", "anstyle", @@ -783,9 +759,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.47" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" dependencies = [ "heck", "proc-macro2", @@ -795,9 +771,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] name = "clipboard-win" @@ -976,7 +952,7 @@ version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "core-foundation 0.10.1", "core-graphics-types 0.2.0", "foreign-types", @@ -1000,23 +976,11 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "core-foundation 0.10.1", "libc", ] -[[package]] -name = "core-text" -version = "21.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a593227b66cbd4007b2a050dfdd9e1d1318311409c8d600dc82ba1b15ca9c130" -dependencies = [ - "core-foundation 0.10.1", - "core-graphics 0.24.0", - "foreign-types", - "libc", -] - [[package]] name = "core_maths" version = "0.1.1" @@ -1167,9 +1131,9 @@ checksum = "26bf8fc351c5ed29b5c2f0cbbac1b209b74f60ecd62e675a998df72c49af5204" [[package]] name = "deranged" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" dependencies = [ "powerfmt", ] @@ -1261,7 +1225,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.6.2", "libc", "objc2 0.6.3", @@ -1289,9 +1253,9 @@ dependencies = [ [[package]] name = "document-features" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" dependencies = [ "litrs", ] @@ -1308,20 +1272,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" -[[package]] -name = "dwrote" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b35532432acc8b19ceed096e35dfa088d3ea037fe4f3c085f1f97f33b4d02" -dependencies = [ - "lazy_static", - "libc", - "serde", - "serde_derive", - "winapi", - "wio", -] - [[package]] name = "either" version = "1.15.0" @@ -1512,23 +1462,21 @@ dependencies = [ [[package]] name = "femtovg" -version = "0.17.0" +version = "0.19.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deda049f5a6dc3152b23263f72c575847f6aa0ace0045299d151f36af7aca136" +checksum = "be5d925785ad33d7b0ae2b445d9f157c3ab42ff3c515fff0b46d53d4a86c43c5" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "bytemuck", "fnv", "glow", "image", "imgref", + "itertools 0.14.0", "log", - "lru", "rgb", - "rustybuzz", "slotmap", - "unicode-bidi", - "unicode-segmentation", + "ttf-parser 0.25.1", "wasm-bindgen", "web-sys", "wgpu", @@ -1564,9 +1512,9 @@ checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" [[package]] name = "flate2" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" +checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" dependencies = [ "crc32fast", "libz-rs-sys", @@ -1592,12 +1540,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] -name = "fontconfig-parser" -version = "0.5.8" +name = "foldhash" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbc773e24e02d4ddd8395fd30dc147524273a83e54e0f312d986ea30de5f5646" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "font-types" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "511e2c18a516c666d27867d2f9821f76e7d591f762e9fc41dd6cc5c90fe54b0b" dependencies = [ - "roxmltree", + "bytemuck", ] [[package]] @@ -1606,9 +1560,7 @@ version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "457e789b3d1202543297a350643cf459f836cade38934e7a4cf6a39e7cde2905" dependencies = [ - "fontconfig-parser", "log", - "memmap2", "slotmap", "tinyvec", "ttf-parser 0.25.1", @@ -1625,6 +1577,29 @@ dependencies = [ "ttf-parser 0.21.1", ] +[[package]] +name = "fontique" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff3336bc0b87fe42305047263fa60d2eabd650d29cbe62fdeb2a66c7a0a595f9" +dependencies = [ + "bytemuck", + "hashbrown 0.15.5", + "icu_locale_core", + "linebender_resource_handle", + "memmap2", + "objc2 0.6.3", + "objc2-core-foundation", + "objc2-core-text", + "objc2-foundation 0.3.2", + "read-fonts", + "roxmltree", + "smallvec", + "windows 0.58.0", + "windows-core 0.58.0", + "yeslogic-fontconfig-sys", +] + [[package]] name = "foreign-types" version = "0.5.0" @@ -1771,9 +1746,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "typenum", "version_check", @@ -1781,12 +1756,12 @@ dependencies = [ [[package]] name = "gethostname" -version = "1.0.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc257fdb4038301ce4b9cd1b3b51704509692bb3ff716a410cbd07925d9dae55" +checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" dependencies = [ "rustix 1.1.2", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -1798,21 +1773,21 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "js-sys", "libc", "r-efi", - "wasi 0.14.7+wasi-0.2.4", + "wasip2", "wasm-bindgen", ] @@ -1826,12 +1801,6 @@ dependencies = [ "weezl", ] -[[package]] -name = "gimli" -version = "0.32.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" - [[package]] name = "gl_generator" version = "0.14.0" @@ -1867,7 +1836,7 @@ version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg_aliases", "cgl", "dispatch2", @@ -1976,7 +1945,7 @@ dependencies = [ "futures-sink", "futures-timer", "futures-util", - "getrandom 0.3.3", + "getrandom 0.3.4", "hashbrown 0.15.5", "nonzero_ext", "parking_lot", @@ -1994,7 +1963,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "gpu-alloc-types", ] @@ -2004,7 +1973,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -2025,7 +1994,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "gpu-descriptor-types", "hashbrown 0.15.5", ] @@ -2036,7 +2005,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -2060,9 +2029,9 @@ dependencies = [ [[package]] name = "half" -version = "2.7.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e54c115d4f30f52c67202f079c5f9d8b49db4691f460fdb0b4c2e838261b2ba5" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ "cfg-if", "crunchy", @@ -2070,6 +2039,19 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "harfrust" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92c020db12c71d8a12a3fe7607873cade3a01a6287e29d540c8723276221b9d8" +dependencies = [ + "bitflags 2.10.0", + "bytemuck", + "core_maths", + "read-fonts", + "smallvec", +] + [[package]] name = "hash32" version = "0.2.1" @@ -2093,7 +2075,7 @@ checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", - "foldhash", + "foldhash 0.1.5", "rayon", ] @@ -2102,6 +2084,9 @@ name = "hashbrown" version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +dependencies = [ + "foldhash 0.2.0", +] [[package]] name = "heapless" @@ -2255,9 +2240,9 @@ dependencies = [ [[package]] name = "i-slint-backend-selector" -version = "1.13.1" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5c1525cd7a659b609600a7df79bb7d90092730d5c4de4f378f39ab9a023993" +checksum = "e138660c634d6bbdf98bb2d0cfa487cda28e032e133a2a2c974f1cc494198765" dependencies = [ "cfg-if", "i-slint-backend-winit", @@ -2268,9 +2253,9 @@ dependencies = [ [[package]] name = "i-slint-backend-winit" -version = "1.13.1" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba2a1f40bf70d4dfc5e7009673da72730ec32b4af680654975c6b39908bcd739" +checksum = "69bf9167fb1165942ef1f034e039645b60b07b23c0c76069cb83595f979243a4" dependencies = [ "cfg-if", "cfg_aliases", @@ -2296,29 +2281,26 @@ dependencies = [ "vtable", "wasm-bindgen", "web-sys", - "windows 0.61.3", + "windows 0.62.2", "winit", "zbus", ] [[package]] name = "i-slint-common" -version = "1.13.1" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40862447fc6e177ab924f43fa2bcab4de3a10fe41596a2a2cb279c911f0ad5e9" +checksum = "b3566194c13f8dcf6e9f41a2090c96f08cf3f59b60c91380a86c1ed72f6e7d19" dependencies = [ - "cfg-if", - "derive_more", - "fontdb", - "libloading", + "fontique", "ttf-parser 0.25.1", ] [[package]] name = "i-slint-compiler" -version = "1.13.1" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e7e35548ed4f437f7fcb7c2bb11bbd0f45c8271d1900b47b688e4eed89482d0" +checksum = "a301031f6c1da6acdd483641cc44109b34990e5edd67478eb0cbca359ab7ae3f" dependencies = [ "by_address", "codemap", @@ -2338,7 +2320,7 @@ dependencies = [ "rayon", "resvg", "rowan", - "smol_str 0.3.2", + "smol_str 0.3.4", "strum", "typed-index-collections", "url", @@ -2346,12 +2328,12 @@ dependencies = [ [[package]] name = "i-slint-core" -version = "1.13.1" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68d10fc4c25a22e757784acf7da950223762477329f01d73e1c9cfa0749bf51a" +checksum = "dc140f1218cfc4451b9e8753306c42afbcaf0386cc888e53664c1a5f5330ae19" dependencies = [ "auto_enums", - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "chrono", "clru", @@ -2368,6 +2350,7 @@ dependencies = [ "lyon_path", "num-traits", "once_cell", + "parley", "pin-project", "pin-weak", "portable-atomic", @@ -2391,9 +2374,9 @@ dependencies = [ [[package]] name = "i-slint-core-macros" -version = "1.13.1" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583ffd7589dc4e273cf25058b8f41fc8baeee40f28660b4539ee60f7ffc06c6b" +checksum = "c4c6a3975ccaa66415f5524292750e631879e69178aa97e3928d2396b790d00d" dependencies = [ "quote", "serde_json", @@ -2402,16 +2385,13 @@ dependencies = [ [[package]] name = "i-slint-renderer-femtovg" -version = "1.13.1" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab4ce7ca8b5316585f3db1ce902318c93980b09ab14aafc30846cad36da67acd" +checksum = "03d85d77f899ecb1f05c50c659a6d356fba44463686713f1f925c8be48de6afb" dependencies = [ "cfg-if", "const-field-offset", - "core-foundation 0.10.1", - "core-text", "derive_more", - "dwrote", "femtovg", "glow", "i-slint-common", @@ -2421,21 +2401,17 @@ dependencies = [ "lyon_path", "pin-weak", "rgb", - "scoped-tls-hkt", "ttf-parser 0.25.1", - "unicode-script", - "unicode-segmentation", "wasm-bindgen", "web-sys", "wgpu", - "winapi", ] [[package]] name = "i-slint-renderer-skia" -version = "1.13.1" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0848e46481abf3155d3aca7e4a9b07be5a5d55716cd90d891293e8698a07b679" +checksum = "e26ed0d42d66c457b7937d7f5ee07d2fbef3691c896a26212a69b30288844ddd" dependencies = [ "ash", "bytemuck", @@ -2460,6 +2436,7 @@ dependencies = [ "pin-weak", "raw-window-handle", "raw-window-metal", + "read-fonts", "scoped-tls-hkt", "skia-safe", "softbuffer", @@ -2468,9 +2445,10 @@ dependencies = [ "vtable", "wgpu", "windows 0.58.0", - "windows 0.61.3", + "windows 0.62.2", "windows-core 0.58.0", - "windows-core 0.61.2", + "windows-core 0.62.2", + "write-fonts", ] [[package]] @@ -2652,9 +2630,9 @@ checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" [[package]] name = "indexmap" -version = "2.11.4" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" dependencies = [ "equivalent", "hashbrown 0.16.0", @@ -2689,17 +2667,6 @@ dependencies = [ "syn", ] -[[package]] -name = "io-uring" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" -dependencies = [ - "bitflags 2.9.4", - "cfg-if", - "libc", -] - [[package]] name = "ipnet" version = "2.11.0" @@ -2737,9 +2704,9 @@ dependencies = [ [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -2802,7 +2769,7 @@ version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "libc", ] @@ -2822,7 +2789,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "serde", "unicode-segmentation", ] @@ -2856,10 +2823,15 @@ dependencies = [ ] [[package]] -name = "lazy_static" -version = "1.5.0" +name = "kurbo" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "ce9729cc38c18d86123ab736fd2e7151763ba226ac2490ec092d1dd148825e32" +dependencies = [ + "arrayvec", + "euclid", + "smallvec", +] [[package]] name = "lebe" @@ -2896,7 +2868,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -2921,7 +2893,7 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "libc", "redox_syscall 0.5.18", ] @@ -2935,6 +2907,12 @@ dependencies = [ "zlib-rs", ] +[[package]] +name = "linebender_resource_handle" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4a5ff6bcca6c4867b1c4fd4ef63e4db7436ef363e0ad7531d1558856bae64f4" + [[package]] name = "linereader" version = "0.4.0" @@ -2979,9 +2957,9 @@ checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "litrs" -version = "0.4.2" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" [[package]] name = "lock_api" @@ -3007,12 +2985,6 @@ dependencies = [ "imgref", ] -[[package]] -name = "lru" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe949189f46fabb938b3a9a0be30fdd93fd8a09260da863399a8cf3db756ec8" - [[package]] name = "lru-slab" version = "0.1.2" @@ -3103,9 +3075,9 @@ checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "memmap2" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" +checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" dependencies = [ "libc", ] @@ -3125,7 +3097,7 @@ version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block", "core-graphics-types 0.1.3", "foreign-types", @@ -3140,7 +3112,7 @@ version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block", "core-graphics-types 0.2.0", "foreign-types", @@ -3182,13 +3154,13 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" dependencies = [ "libc", - "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", + "wasi", + "windows-sys 0.61.2", ] [[package]] @@ -3222,18 +3194,18 @@ dependencies = [ [[package]] name = "naga" -version = "26.0.0" +version = "27.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "916cbc7cb27db60be930a4e2da243cf4bc39569195f22fd8ee419cd31d5b662c" +checksum = "066cf25f0e8b11ee0df221219010f213ad429855f57c494f995590c861a9a7d8" dependencies = [ "arrayvec", "bit-set", - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "cfg_aliases", "codespan-reporting", "half", - "hashbrown 0.15.5", + "hashbrown 0.16.0", "hexf-parse", "indexmap", "libm", @@ -3252,7 +3224,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "jni-sys", "log", "ndk-sys", @@ -3288,7 +3260,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "cfg_aliases", "libc", @@ -3305,6 +3277,15 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "nom" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" +dependencies = [ + "memchr", +] + [[package]] name = "nonzero_ext" version = "0.3.0" @@ -3376,9 +3357,9 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" +checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" dependencies = [ "num_enum_derive", "rustversion", @@ -3386,9 +3367,9 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" +checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -3436,7 +3417,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -3452,7 +3433,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.6.2", "libc", "objc2 0.6.3", @@ -3473,7 +3454,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -3486,7 +3467,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-foundation 0.3.2", ] @@ -3508,7 +3489,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -3520,7 +3501,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-foundation 0.3.2", ] @@ -3531,7 +3512,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "dispatch2", "objc2 0.6.3", ] @@ -3542,7 +3523,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "dispatch2", "objc2 0.6.3", "objc2-core-foundation", @@ -3589,7 +3570,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-core-foundation", "objc2-core-graphics", @@ -3601,7 +3582,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-core-foundation", "objc2-core-graphics", @@ -3620,7 +3601,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.5.1", "dispatch", "libc", @@ -3633,7 +3614,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-core-foundation", ] @@ -3644,7 +3625,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-core-foundation", ] @@ -3667,7 +3648,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -3679,7 +3660,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-foundation 0.3.2", ] @@ -3690,7 +3671,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -3703,7 +3684,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -3726,7 +3707,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.5.1", "objc2 0.5.2", "objc2-cloud-kit 0.2.2", @@ -3758,22 +3739,13 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", "objc2-foundation 0.2.2", ] -[[package]] -name = "object" -version = "0.37.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" -dependencies = [ - "memchr", -] - [[package]] name = "once_cell" version = "1.21.3" @@ -3786,9 +3758,9 @@ dependencies = [ [[package]] name = "once_cell_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "open" @@ -3818,9 +3790,9 @@ dependencies = [ [[package]] name = "ordered-float" -version = "5.0.0" +version = "5.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2c1f9f56e534ac6a9b8a4600bdf0f530fb393b5f393e7b4d03489c3cf0c3f01" +checksum = "7f4779c6901a562440c3786d08192c6fbda7c1c2060edd10006b05ee35d10f2d" dependencies = [ "num-traits", ] @@ -3870,7 +3842,21 @@ dependencies = [ "libc", "redox_syscall 0.5.18", "smallvec", - "windows-link 0.2.1", + "windows-link", +] + +[[package]] +name = "parley" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26746861bb76dbc9bcd5ed1b0b55d2fedf291100961251702a031ab2abd2ce52" +dependencies = [ + "fontique", + "harfrust", + "hashbrown 0.15.5", + "linebender_resource_handle", + "skrifa", + "swash", ] [[package]] @@ -3981,7 +3967,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "crc32fast", "fdeflate", "flate2", @@ -4105,9 +4091,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.101" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] @@ -4159,7 +4145,7 @@ dependencies = [ "libc", "once_cell", "raw-cpuid", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "web-sys", "winapi", ] @@ -4206,7 +4192,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ "bytes", - "getrandom 0.3.3", + "getrandom 0.3.4", "lru-slab", "rand 0.9.2", "ring", @@ -4305,7 +4291,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", ] [[package]] @@ -4370,7 +4356,7 @@ version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -4411,6 +4397,17 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "read-fonts" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6717cf23b488adf64b9d711329542ba34de147df262370221940dfabc2c91358" +dependencies = [ + "bytemuck", + "core_maths", + "font-types", +] + [[package]] name = "redox_syscall" version = "0.4.1" @@ -4426,7 +4423,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -4442,9 +4439,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a52d8d02cacdb176ef4678de6c052efb4b3da14b78e4db683a4252762be5433" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", @@ -4454,9 +4451,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "722166aa0d7438abbaa4d5cc2c649dac844e8c56d82fb3d33e9c34b5cd268fc6" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -4465,9 +4462,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3160422bbd54dd5ecfdca71e5fd59b7b8fe2b1697ab2baf64f6d05dcc66d298" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "renderdoc-sys" @@ -4477,9 +4474,9 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] name = "reqwest" -version = "0.12.23" +version = "0.12.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" dependencies = [ "base64", "bytes", @@ -4604,12 +4601,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a2d2f3481209a6b42eec2fbb49063fb4e8d35b57023401495d4fe0f85c817f0" -[[package]] -name = "rustc-demangle" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" - [[package]] name = "rustc-hash" version = "1.1.0" @@ -4637,7 +4628,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -4650,7 +4641,7 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.11.0", @@ -4659,9 +4650,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.32" +version = "0.23.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" +checksum = "6a9586e9ee2b4f8fab52a0048ca7334d7024eef48e2cb9407e3497bb7cab7fa7" dependencies = [ "once_cell", "ring", @@ -4704,7 +4695,7 @@ version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "bytemuck", "core_maths", "log", @@ -4770,10 +4761,11 @@ checksum = "560203d4fd508d45068ceedf0a11e264665f2bc974f9b34919f8b7fabf860bfa" [[package]] name = "sdl3-sys" -version = "0.5.7+SDL3-3.2.24" +version = "0.5.9+SDL3-3.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1208bd508b0e6c34d16878663b2a00674755db4a6a6e4e6c60863f7c2d160884" +checksum = "db1f57b04b1ff16bbab7837c0a5e06e3b78fccb410bc00920b9ee860f0f58251" dependencies = [ + "cc", "cmake", "rpkg-config", "sdl3-src", @@ -4875,6 +4867,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" +dependencies = [ + "serde_core", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -4968,32 +4969,40 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "skia-bindings" -version = "0.87.0" +version = "0.89.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "704242769235d2ffe66a2a0a3002661262fc4af08d32807c362d7b0160ee703c" +checksum = "f06b9b01a0d1189fa756bb9aec034554d52ad53f2f33d80a96e7a4ecfbd3d989" dependencies = [ "bindgen", "cc", "flate2", "heck", - "lazy_static", "pkg-config", "regex", "serde_json", "tar", - "toml", + "toml 0.9.8", ] [[package]] name = "skia-safe" -version = "0.87.0" +version = "0.89.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f7d94f3e7537c71ad4cf132eb26e3be8c8a886ed3649c4525c089041fc312b2" +checksum = "ced1fcc0fa7510f9339988f31d831e14f64f9aa771e5f93f4935431e6fe69d4c" dependencies = [ - "bitflags 2.9.4", - "lazy_static", + "bitflags 2.10.0", "skia-bindings", - "windows 0.61.3", + "windows 0.62.2", +] + +[[package]] +name = "skrifa" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c31071dedf532758ecf3fed987cdb4bd9509f900e026ab684b4ecb81ea49841" +dependencies = [ + "bytemuck", + "read-fonts", ] [[package]] @@ -5004,9 +5013,9 @@ checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "slint" -version = "1.13.1" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f467a64a49620e41807016dc1d519ba0ebb9d1322f734853059f93b8c3f3d2bd" +checksum = "9c35c4bdca2c42c69b21ceb416aa4ba76c3f54df30e9ce85dcad0742229422a6" dependencies = [ "const-field-offset", "i-slint-backend-selector", @@ -5023,9 +5032,9 @@ dependencies = [ [[package]] name = "slint-build" -version = "1.13.1" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ea77b3786ae4e7549f924232a9d1ce427a320729334643a3ec1a76702d00d8" +checksum = "e6f9e30dfc58198894a4a4fe38d126a24ed4121d11cd8564643f3b7915752adc" dependencies = [ "derive_more", "i-slint-compiler", @@ -5035,9 +5044,9 @@ dependencies = [ [[package]] name = "slint-macros" -version = "1.13.1" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e11f55a603d8bb037f0831d4f4e91a560cfe93d93ddf2f992aa375b620f4bca3" +checksum = "d6b4b4bada19852716991153ddd93bf133548ac74383a05db8df399b9003bbfe" dependencies = [ "i-slint-compiler", "proc-macro2", @@ -5066,7 +5075,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "calloop", "calloop-wayland-source", "cursor-icon", @@ -5107,22 +5116,22 @@ dependencies = [ [[package]] name = "smol_str" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9676b89cd56310a87b93dec47b11af744f34d5fc9f367b829474eec0a891350d" +checksum = "3498b0a27f93ef1402f20eefacfaa1691272ac4eca1cdc8c596cb0a245d6cbf5" dependencies = [ "borsh", - "serde", + "serde_core", ] [[package]] name = "socket2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -5198,7 +5207,7 @@ version = "0.3.0+sdk-1.3.268.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -5261,15 +5270,26 @@ version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68c7541fff44b35860c1a7a47a7cadf3e4a304c457b58f9870d9706ece028afc" dependencies = [ - "kurbo", + "kurbo 0.11.3", "siphasher", ] [[package]] -name = "syn" -version = "2.0.106" +name = "swash" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "47846491253e976bdd07d0f9cc24b7daf24720d11309302ccbbc6e6b6e53550a" +dependencies = [ + "skrifa", + "yazi", + "zeno", +] + +[[package]] +name = "syn" +version = "2.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" dependencies = [ "proc-macro2", "quote", @@ -5314,7 +5334,7 @@ dependencies = [ "cfg-expr", "heck", "pkg-config", - "toml", + "toml 0.8.23", "version-compare", ] @@ -5342,7 +5362,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", "rustix 1.1.2", "windows-sys 0.61.2", @@ -5502,29 +5522,26 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.47.1" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ - "backtrace", "bytes", - "io-uring", "libc", "mio", "pin-project-lite", "signal-hook-registry", - "slab", "socket2", "tokio-macros", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", @@ -5573,11 +5590,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", - "serde_spanned", + "serde_spanned 0.6.9", "toml_datetime 0.6.11", "toml_edit 0.22.27", ] +[[package]] +name = "toml" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" +dependencies = [ + "indexmap", + "serde_core", + "serde_spanned 1.0.3", + "toml_datetime 0.7.3", + "toml_parser", + "toml_writer", + "winnow", +] + [[package]] name = "toml_datetime" version = "0.6.11" @@ -5604,7 +5636,7 @@ checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ "indexmap", "serde", - "serde_spanned", + "serde_spanned 0.6.9", "toml_datetime 0.6.11", "toml_write", "winnow", @@ -5665,7 +5697,7 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "bytes", "futures-util", "http", @@ -5805,9 +5837,9 @@ checksum = "ce61d488bcdc9bc8b5d1772c404828b17fc481c0a582b5581e95fb233aef503e" [[package]] name = "unicode-ident" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" +checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" [[package]] name = "unicode-linebreak" @@ -5892,7 +5924,7 @@ dependencies = [ "flate2", "fontdb", "imagesize", - "kurbo", + "kurbo 0.11.3", "log", "pico-args", "roxmltree", @@ -5926,6 +5958,17 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "uuid" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + [[package]] name = "v_frame" version = "0.3.9" @@ -5997,15 +6040,6 @@ version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" -[[package]] -name = "wasi" -version = "0.14.7+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" -dependencies = [ - "wasip2", -] - [[package]] name = "wasip2" version = "1.0.1+wasi-0.2.4" @@ -6107,7 +6141,7 @@ version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "rustix 1.1.2", "wayland-backend", "wayland-scanner", @@ -6119,7 +6153,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cursor-icon", "wayland-backend", ] @@ -6141,7 +6175,7 @@ version = "0.32.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "wayland-backend", "wayland-client", "wayland-scanner", @@ -6153,7 +6187,7 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -6166,7 +6200,7 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -6233,16 +6267,16 @@ checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" [[package]] name = "wgpu" -version = "26.0.1" +version = "27.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70b6ff82bbf6e9206828e1a3178e851f8c20f1c9028e74dd3a8090741ccd5798" +checksum = "bfe68bac7cde125de7a731c3400723cadaaf1703795ad3f4805f187459cd7a77" dependencies = [ "arrayvec", - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "cfg_aliases", "document-features", - "hashbrown 0.15.5", + "hashbrown 0.16.0", "js-sys", "log", "naga", @@ -6262,17 +6296,18 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "26.0.1" +version = "27.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f62f1053bd28c2268f42916f31588f81f64796e2ff91b81293515017ca8bd9" +checksum = "27a75de515543b1897b26119f93731b385a19aea165a1ec5f0e3acecc229cae7" dependencies = [ "arrayvec", "bit-set", "bit-vec", - "bitflags 2.9.4", + "bitflags 2.10.0", + "bytemuck", "cfg_aliases", "document-features", - "hashbrown 0.15.5", + "hashbrown 0.16.0", "indexmap", "log", "naga", @@ -6293,42 +6328,42 @@ dependencies = [ [[package]] name = "wgpu-core-deps-apple" -version = "26.0.0" +version = "27.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18ae5fbde6a4cbebae38358aa73fcd6e0f15c6144b67ef5dc91ded0db125dbdf" +checksum = "0772ae958e9be0c729561d5e3fd9a19679bcdfb945b8b1a1969d9bfe8056d233" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-core-deps-emscripten" -version = "26.0.0" +version = "27.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7670e390f416006f746b4600fdd9136455e3627f5bd763abf9a65daa216dd2d" +checksum = "b06ac3444a95b0813ecfd81ddb2774b66220b264b3e2031152a4a29fda4da6b5" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-core-deps-windows-linux-android" -version = "26.0.0" +version = "27.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "720a5cb9d12b3d337c15ff0e24d3e97ed11490ff3f7506e7f3d98c68fa5d6f14" +checksum = "71197027d61a71748e4120f05a9242b2ad142e3c01f8c1b47707945a879a03c3" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-hal" -version = "26.0.4" +version = "27.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7df2c64ac282a91ad7662c90bc4a77d4a2135bc0b2a2da5a4d4e267afc034b9e" +checksum = "5b21cb61c57ee198bc4aff71aeadff4cbb80b927beb912506af9c780d64313ce" dependencies = [ "android_system_properties", "arrayvec", "ash", "bit-set", - "bitflags 2.9.4", + "bitflags 2.10.0", "block", "bytemuck", "cfg-if", @@ -6339,7 +6374,7 @@ dependencies = [ "gpu-alloc", "gpu-allocator", "gpu-descriptor", - "hashbrown 0.15.5", + "hashbrown 0.16.0", "js-sys", "khronos-egl", "libc", @@ -6349,6 +6384,7 @@ dependencies = [ "naga", "ndk-sys", "objc", + "once_cell", "ordered-float", "parking_lot", "portable-atomic", @@ -6368,11 +6404,11 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "26.0.0" +version = "27.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca7a8d8af57c18f57d393601a1fb159ace8b2328f1b6b5f80893f7d672c9ae2" +checksum = "afdcf84c395990db737f2dd91628706cb31e86d72e53482320d368e52b5da5eb" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "bytemuck", "js-sys", "log", @@ -6423,24 +6459,23 @@ dependencies = [ [[package]] name = "windows" -version = "0.61.3" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" dependencies = [ "windows-collections", - "windows-core 0.61.2", + "windows-core 0.62.2", "windows-future", - "windows-link 0.1.3", "windows-numerics", ] [[package]] name = "windows-collections" -version = "0.2.0" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" dependencies = [ - "windows-core 0.61.2", + "windows-core 0.62.2", ] [[package]] @@ -6456,19 +6491,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-core" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" -dependencies = [ - "windows-implement 0.60.2", - "windows-interface 0.59.3", - "windows-link 0.1.3", - "windows-result 0.3.4", - "windows-strings 0.4.2", -] - [[package]] name = "windows-core" version = "0.62.2" @@ -6477,19 +6499,19 @@ checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement 0.60.2", "windows-interface 0.59.3", - "windows-link 0.2.1", + "windows-link", "windows-result 0.4.1", "windows-strings 0.5.1", ] [[package]] name = "windows-future" -version = "0.2.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" dependencies = [ - "windows-core 0.61.2", - "windows-link 0.1.3", + "windows-core 0.62.2", + "windows-link", "windows-threading", ] @@ -6537,12 +6559,6 @@ dependencies = [ "syn", ] -[[package]] -name = "windows-link" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" - [[package]] name = "windows-link" version = "0.2.1" @@ -6551,12 +6567,12 @@ checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-numerics" -version = "0.2.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" dependencies = [ - "windows-core 0.61.2", - "windows-link 0.1.3", + "windows-core 0.62.2", + "windows-link", ] [[package]] @@ -6568,22 +6584,13 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-result" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" -dependencies = [ - "windows-link 0.1.3", -] - [[package]] name = "windows-result" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -6596,22 +6603,13 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-strings" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" -dependencies = [ - "windows-link 0.1.3", -] - [[package]] name = "windows-strings" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -6656,7 +6654,7 @@ version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -6696,7 +6694,7 @@ version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows-link 0.2.1", + "windows-link", "windows_aarch64_gnullvm 0.53.1", "windows_aarch64_msvc 0.53.1", "windows_i686_gnu 0.53.1", @@ -6709,11 +6707,11 @@ dependencies = [ [[package]] name = "windows-threading" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" dependencies = [ - "windows-link 0.1.3", + "windows-link", ] [[package]] @@ -6863,7 +6861,7 @@ dependencies = [ "ahash", "android-activity", "atomic-waker", - "bitflags 2.9.4", + "bitflags 2.10.0", "block2 0.5.1", "bytemuck", "calloop", @@ -6921,25 +6919,29 @@ version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edcacf11b6f48dd21b9ba002f991bdd5de29b2da8cc2800412f4b80f677e4957" dependencies = [ - "toml", + "toml 0.8.23", "version_check", ] -[[package]] -name = "wio" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" -dependencies = [ - "winapi", -] - [[package]] name = "wit-bindgen" version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +[[package]] +name = "write-fonts" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "886614b5ce857341226aa091f3c285e450683894acaaa7887f366c361efef79d" +dependencies = [ + "font-types", + "indexmap", + "kurbo 0.12.0", + "log", + "read-fonts", +] + [[package]] name = "writeable" version = "0.6.1" @@ -7010,7 +7012,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "dlib", "log", "once_cell", @@ -7035,6 +7037,23 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" +[[package]] +name = "yazi" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5" + +[[package]] +name = "yeslogic-fontconfig-sys" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503a066b4c037c440169d995b869046827dbc71263f6e8f3be6d77d4f3229dbd" +dependencies = [ + "dlib", + "once_cell", + "pkg-config", +] + [[package]] name = "yoke" version = "0.8.0" @@ -7061,9 +7080,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.11.0" +version = "5.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d07e46d035fb8e375b2ce63ba4e4ff90a7f73cf2ffb0138b29e1158d2eaadf7" +checksum = "b622b18155f7a93d1cd2dc8c01d2d6a44e08fb9ebb7b3f9e6ed101488bad6c91" dependencies = [ "async-broadcast", "async-executor", @@ -7086,7 +7105,8 @@ dependencies = [ "tokio", "tracing", "uds_windows", - "windows-sys 0.60.2", + "uuid", + "windows-sys 0.61.2", "winnow", "zbus_macros", "zbus_names", @@ -7095,9 +7115,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.11.0" +version = "5.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57e797a9c847ed3ccc5b6254e8bcce056494b375b511b3d6edcec0aeb4defaca" +checksum = "1cdb94821ca8a87ca9c298b5d1cbd80e2a8b67115d99f6e4551ac49e42b6a314" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -7120,6 +7140,12 @@ dependencies = [ "zvariant", ] +[[package]] +name = "zeno" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" + [[package]] name = "zerocopy" version = "0.8.27" @@ -7227,7 +7253,7 @@ dependencies = [ "crc32fast", "deflate64", "flate2", - "getrandom 0.3.3", + "getrandom 0.3.4", "hmac", "indexmap", "lzma-rust2 0.13.0", @@ -7313,9 +7339,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.7.0" +version = "5.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "999dd3be73c52b1fccd109a4a81e4fcd20fab1d3599c8121b38d04e1419498db" +checksum = "2be61892e4f2b1772727be11630a62664a1826b62efa43a6fe7449521cb8744c" dependencies = [ "endi", "enumflags2", @@ -7328,9 +7354,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.7.0" +version = "5.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6643fd0b26a46d226bd90d3f07c1b5321fe9bb7f04673cb37ac6d6883885b68e" +checksum = "da58575a1b2b20766513b1ec59d8e2e68db2745379f961f86650655e862d2006" dependencies = [ "proc-macro-crate", "proc-macro2", From 1deb91fc1e1df0369983232d45fc6effb75926fc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Oct 2025 06:01:31 +0100 Subject: [PATCH 0622/1117] Bump actions/upload-artifact from 4 to 5 (#596) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3afd747..afe829c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -61,7 +61,7 @@ jobs: mkdir output cp target/${{ matrix.target }}/release/gopher64 output/gopher64-${{ matrix.arch }} - name: Upload file - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: gopher64-${{ matrix.arch }} path: output/gopher64-${{ matrix.arch }} @@ -104,7 +104,7 @@ jobs: cp target/${{ matrix.target }}/release/gopher64.exe output/gopher64-${{ matrix.arch }}.exe - name: Upload unsigned artifact id: upload-unsigned-artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: gopher64-${{ matrix.arch }} path: output/gopher64-${{ matrix.arch }}.exe @@ -146,7 +146,7 @@ jobs: env: AR: ar - name: Upload file - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: gopher64-${{ matrix.arch }} path: output/gopher64-${{ matrix.arch }} From 15598564833f3e8977506aa133087cbcec5ab238 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Oct 2025 08:36:02 +0100 Subject: [PATCH 0623/1117] Bump signpath/github-action-submit-signing-request from 1.3 to 2.0 (#597) Bumps [signpath/github-action-submit-signing-request](https://github.com/signpath/github-action-submit-signing-request) from 1.3 to 2.0. - [Release notes](https://github.com/signpath/github-action-submit-signing-request/releases) - [Commits](https://github.com/signpath/github-action-submit-signing-request/compare/v1.3...v2.0) --- updated-dependencies: - dependency-name: signpath/github-action-submit-signing-request dependency-version: '2.0' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index afe829c..1877a80 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -110,7 +110,7 @@ jobs: path: output/gopher64-${{ matrix.arch }}.exe - name: SignPath if: ${{ github.ref_type == 'tag' }} - uses: signpath/github-action-submit-signing-request@v1.3 + uses: signpath/github-action-submit-signing-request@v2.0 with: api-token: "${{ secrets.SIGNPATH_API_TOKEN }}" organization-id: "${{ secrets.SIGNPATH_ORG_ID }}" From 24fc5b96388f7ce6c91cc26cbb8e04d33c383355 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 30 Oct 2025 13:59:20 +0100 Subject: [PATCH 0624/1117] update parallel-rdp --- parallel-rdp/parallel-rdp-standalone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parallel-rdp/parallel-rdp-standalone b/parallel-rdp/parallel-rdp-standalone index ba32935..091c7fe 160000 --- a/parallel-rdp/parallel-rdp-standalone +++ b/parallel-rdp/parallel-rdp-standalone @@ -1 +1 @@ -Subproject commit ba3293573dda3f4b50069c77ad0b3d77b77915b4 +Subproject commit 091c7fec1cd925eb7865606ac8c533768df32199 From 921a0d5362bb8f517de0206d6a64cf59927a20fc Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 30 Oct 2025 20:14:39 +0100 Subject: [PATCH 0625/1117] Rust 1.91 (#599) --- Cargo.lock | 167 ++++++++++++++++++++------------------------ Cargo.toml | 2 +- rust-toolchain.toml | 2 +- 3 files changed, 77 insertions(+), 94 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 15dd5c5..bbfa7f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -50,9 +50,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -737,9 +737,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.50" +version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2cfd7bf8a6017ddaa4e32ffe7403d547790db06bd171c1c53926faab501623" +checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" dependencies = [ "clap_builder", "clap_derive", @@ -747,9 +747,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.50" +version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a4c05b9e80c5ccd3a7ef080ad7b6ba7d6fc00a985b8b157197075677c82c7a0" +checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a" dependencies = [ "anstream", "anstyle", @@ -2477,9 +2477,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", "potential_utf", @@ -2490,12 +2490,13 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", + "serde", "tinystr", "writeable", "zerovec", @@ -2503,11 +2504,10 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", @@ -2518,42 +2518,38 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" dependencies = [ - "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", - "potential_utf", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" +checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" [[package]] name = "icu_provider" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", "icu_locale_core", - "stable_deref_trait", - "tinystr", "writeable", "yoke", "zerofrom", @@ -2775,9 +2771,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.81" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" dependencies = [ "once_cell", "wasm-bindgen", @@ -2951,9 +2947,9 @@ checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "litrs" @@ -3044,9 +3040,9 @@ dependencies = [ [[package]] name = "lzma-rust2" -version = "0.14.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5999f9ccfee85f09b54a2205c5851f884c83e4e7ef056843ff68d7f2006cd82" +checksum = "bd44940a607fcd1ec1722158da6bde14dfcaa8b080a130244eb8e110117af28f" [[package]] name = "malloc_buf" @@ -3165,9 +3161,9 @@ dependencies = [ [[package]] name = "moxcms" -version = "0.7.7" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c588e11a3082784af229e23e8e4ecf5bcc6fbe4f69101e0421ce8d79da7f0b40" +checksum = "0fbdd3d7436f8b5e892b8b7ea114271ff0fa00bc5acae845d53b07d498616ef6" dependencies = [ "num-traits", "pxfm", @@ -4036,9 +4032,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ "zerovec", ] @@ -4664,9 +4660,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a" dependencies = [ "web-time", "zeroize", @@ -4674,9 +4670,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.7" +version = "0.103.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" +checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" dependencies = [ "ring", "rustls-pki-types", @@ -4890,13 +4886,13 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.19.1" +version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7048af9cb3f23ee3315bccaeeef1da33c1b2cad63b8a26ac5b5498b6ef472902" +checksum = "9a0dc37cf54d88d6da2ccff560e53118682134fbdb5fdad78f7d41ea620efb3c" dependencies = [ "crc32fast", "js-sys", - "lzma-rust2 0.14.3", + "lzma-rust2 0.15.0", "wasm-bindgen", ] @@ -5497,11 +5493,12 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", + "serde_core", "zerovec", ] @@ -5837,9 +5834,9 @@ checksum = "ce61d488bcdc9bc8b5d1772c404828b17fc481c0a582b5581e95fb233aef503e" [[package]] name = "unicode-ident" -version = "1.0.20" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "unicode-linebreak" @@ -5849,9 +5846,9 @@ checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" [[package]] name = "unicode-properties" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" +checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" [[package]] name = "unicode-script" @@ -6051,9 +6048,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" +checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" dependencies = [ "cfg-if", "once_cell", @@ -6062,25 +6059,11 @@ dependencies = [ "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - [[package]] name = "wasm-bindgen-futures" -version = "0.4.54" +version = "0.4.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" +checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" dependencies = [ "cfg-if", "js-sys", @@ -6091,9 +6074,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" +checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6101,22 +6084,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" +checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" dependencies = [ + "bumpalo", "proc-macro2", "quote", "syn", - "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" dependencies = [ "unicode-ident", ] @@ -6232,9 +6215,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.81" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" +checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" dependencies = [ "js-sys", "wasm-bindgen", @@ -6944,9 +6927,9 @@ dependencies = [ [[package]] name = "writeable" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "x11-clipboard" @@ -7027,9 +7010,9 @@ checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] name = "xml-rs" -version = "0.8.27" +version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" +checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" [[package]] name = "xmlwriter" @@ -7056,11 +7039,10 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -7068,9 +7050,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", @@ -7209,9 +7191,9 @@ dependencies = [ [[package]] name = "zerotrie" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" dependencies = [ "displaydoc", "yoke", @@ -7220,10 +7202,11 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ + "serde", "yoke", "zerofrom", "zerovec-derive", @@ -7231,9 +7214,9 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", @@ -7275,9 +7258,9 @@ checksum = "2f06ae92f42f5e5c42443fd094f245eb656abf56dd7cce9b8b263236565e00f2" [[package]] name = "zopfli" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfc5ee405f504cd4984ecc6f14d02d55cfda60fa4b689434ef4102aae150cd7" +checksum = "f05cd8797d63865425ff89b5c4a48804f35ba0ce8d125800027ad6017d2b5249" dependencies = [ "bumpalo", "crc32fast", diff --git a/Cargo.toml b/Cargo.toml index f3766fb..3b9582d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "gopher64" version = "1.1.9" edition = "2024" -rust-version = "1.90" +rust-version = "1.91" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/rust-toolchain.toml b/rust-toolchain.toml index ff100ed..d72668b 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.90.0" +channel = "1.91.0" From c3f4b1151991056ecdef30d9d81ca186de3971b6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 30 Oct 2025 22:47:45 +0100 Subject: [PATCH 0626/1117] update sdl3 --- Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bbfa7f8..ec12b64 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4751,15 +4751,15 @@ dependencies = [ [[package]] name = "sdl3-src" -version = "3.2.24" +version = "3.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "560203d4fd508d45068ceedf0a11e264665f2bc974f9b34919f8b7fabf860bfa" +checksum = "043a9fa3bccac487a428f8883ef5227edf7280da52b0347897d5c9f82b7e3e52" [[package]] name = "sdl3-sys" -version = "0.5.9+SDL3-3.2.24" +version = "0.5.10+SDL3-3.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db1f57b04b1ff16bbab7837c0a5e06e3b78fccb410bc00920b9ee860f0f58251" +checksum = "c531aa18059783450bcddc82a6effc48df5f173bb46142eb421ff2cfccf53984" dependencies = [ "cc", "cmake", From 06f9c56a79eede5f58df3b0a5a53b304618b13ed Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 30 Oct 2025 22:52:34 +0100 Subject: [PATCH 0627/1117] bump to 1.1.10 --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ec12b64..061da27 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1898,7 +1898,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.9" +version = "1.1.10" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index 3b9582d..b870672 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.9" +version = "1.1.10" edition = "2024" rust-version = "1.91" From ab630cc8cb8bbff3d2057827a2d3b9594b1ea505 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 3 Nov 2025 23:07:10 +0100 Subject: [PATCH 0628/1117] Use skia backend for gui (#605) * Use skia backend for gui * more * use clang-cl * more * more --- .github/workflows/build.yml | 6 +- .github/workflows/lint.yml | 2 +- Cargo.lock | 918 ++++++++++++++++-------------------- Cargo.toml | 4 +- 4 files changed, 427 insertions(+), 503 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1877a80..127fc18 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -48,7 +48,7 @@ jobs: libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libxtst-dev \ libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \ - libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev + libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev libfreetype-dev libfontconfig-dev version: ${{ matrix.target }}-1.0 - name: Install LLVM and Clang uses: KyleMayes/install-llvm-action@v2 @@ -102,6 +102,9 @@ jobs: cargo build --release -v --target=${{ matrix.target }} mkdir output cp target/${{ matrix.target }}/release/gopher64.exe output/gopher64-${{ matrix.arch }}.exe + env: + CC: clang-cl + CXX: clang-cl - name: Upload unsigned artifact id: upload-unsigned-artifact uses: actions/upload-artifact@v5 @@ -121,6 +124,7 @@ jobs: wait-for-completion: false build-macos: + if: false runs-on: macos-15 strategy: fail-fast: false diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 7ed5326..663e046 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -34,7 +34,7 @@ jobs: libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libxtst-dev \ libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \ - libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev + libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev libfreetype-dev libfontconfig-dev version: lint-1.0 - name: Install LLVM and Clang uses: KyleMayes/install-llvm-action@v2 diff --git a/Cargo.lock b/Cargo.lock index 061da27..505cbbb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -455,21 +455,6 @@ dependencies = [ "syn", ] -[[package]] -name = "bit-set" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" -dependencies = [ - "bit-vec", -] - -[[package]] -name = "bit-vec" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" - [[package]] name = "bit_field" version = "0.10.3" @@ -497,12 +482,6 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - [[package]] name = "block-buffer" version = "0.10.4" @@ -631,23 +610,48 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "calloop" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb9f6e1368bd4621d2c86baa7e37de77a938adf5221e5dd3d6133340101b309e" +dependencies = [ + "bitflags 2.10.0", + "polling", + "rustix 1.1.2", + "slab", + "tracing", +] + [[package]] name = "calloop-wayland-source" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" dependencies = [ - "calloop", + "calloop 0.13.0", "rustix 0.38.44", "wayland-backend", "wayland-client", ] [[package]] -name = "cc" -version = "1.2.43" +name = "calloop-wayland-source" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "739eb0f94557554b3ca9a86d2d37bebd49c5e6d0c1d2bda35ba5bdac830befc2" +checksum = "138efcf0940a02ebf0cc8d1eff41a1682a46b431630f4c52450d6265876021fa" +dependencies = [ + "calloop 0.14.3", + "rustix 1.1.2", + "wayland-backend", + "wayland-client", +] + +[[package]] +name = "cc" +version = "1.2.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37521ac7aabe3d13122dc382493e20c9416f299d2ccd5b3a5340a2570cdeb0f3" dependencies = [ "find-msvc-tools", "jobserver", @@ -763,7 +767,7 @@ version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" dependencies = [ - "heck", + "heck 0.5.0", "proc-macro2", "quote", "syn", @@ -824,17 +828,6 @@ dependencies = [ "termcolor", ] -[[package]] -name = "codespan-reporting" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" -dependencies = [ - "serde", - "termcolor", - "unicode-width", -] - [[package]] name = "color_quant" version = "1.1.0" @@ -1063,6 +1056,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.21" @@ -1251,15 +1253,6 @@ dependencies = [ "libloading", ] -[[package]] -name = "document-features" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" -dependencies = [ - "litrs", -] - [[package]] name = "downcast-rs" version = "1.2.1" @@ -1272,6 +1265,79 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" +[[package]] +name = "drm" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98888c4bbd601524c11a7ed63f814b8825f420514f78e96f752c437ae9cbb5d1" +dependencies = [ + "bitflags 2.10.0", + "bytemuck", + "drm-ffi 0.8.0", + "drm-fourcc", + "rustix 0.38.44", +] + +[[package]] +name = "drm" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" +dependencies = [ + "bitflags 2.10.0", + "bytemuck", + "drm-ffi 0.9.0", + "drm-fourcc", + "libc", + "rustix 0.38.44", +] + +[[package]] +name = "drm-ffi" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97c98727e48b7ccb4f4aea8cfe881e5b07f702d17b7875991881b41af7278d53" +dependencies = [ + "drm-sys 0.7.0", + "rustix 0.38.44", +] + +[[package]] +name = "drm-ffi" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8e41459d99a9b529845f6d2c909eb9adf3b6d2f82635ae40be8de0601726e8b" +dependencies = [ + "drm-sys 0.8.0", + "rustix 0.38.44", +] + +[[package]] +name = "drm-fourcc" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" + +[[package]] +name = "drm-sys" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd39dde40b6e196c2e8763f23d119ddb1a8714534bf7d77fa97a65b0feda3986" +dependencies = [ + "libc", + "linux-raw-sys 0.6.5", +] + +[[package]] +name = "drm-sys" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bafb66c8dbc944d69e15cfcc661df7e703beffbaec8bd63151368b06c5f9858c" +dependencies = [ + "libc", + "linux-raw-sys 0.6.5", +] + [[package]] name = "either" version = "1.15.0" @@ -1460,28 +1526,6 @@ dependencies = [ "simd-adler32", ] -[[package]] -name = "femtovg" -version = "0.19.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be5d925785ad33d7b0ae2b445d9f157c3ab42ff3c515fff0b46d53d4a86c43c5" -dependencies = [ - "bitflags 2.10.0", - "bytemuck", - "fnv", - "glow", - "image", - "imgref", - "itertools 0.14.0", - "log", - "rgb", - "slotmap", - "ttf-parser 0.25.1", - "wasm-bindgen", - "web-sys", - "wgpu", -] - [[package]] name = "field-offset" version = "0.3.6" @@ -1539,12 +1583,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" -[[package]] -name = "foldhash" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" - [[package]] name = "font-types" version = "0.10.0" @@ -1957,57 +1995,6 @@ dependencies = [ "web-time", ] -[[package]] -name = "gpu-alloc" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" -dependencies = [ - "bitflags 2.10.0", - "gpu-alloc-types", -] - -[[package]] -name = "gpu-alloc-types" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" -dependencies = [ - "bitflags 2.10.0", -] - -[[package]] -name = "gpu-allocator" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" -dependencies = [ - "log", - "presser", - "thiserror 1.0.69", - "windows 0.58.0", -] - -[[package]] -name = "gpu-descriptor" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" -dependencies = [ - "bitflags 2.10.0", - "gpu-descriptor-types", - "hashbrown 0.15.5", -] - -[[package]] -name = "gpu-descriptor-types" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" -dependencies = [ - "bitflags 2.10.0", -] - [[package]] name = "h2" version = "0.4.12" @@ -2033,9 +2020,9 @@ version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ + "bytemuck", "cfg-if", "crunchy", - "num-traits", "zerocopy", ] @@ -2075,7 +2062,7 @@ checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", - "foldhash 0.1.5", + "foldhash", "rayon", ] @@ -2084,9 +2071,6 @@ name = "hashbrown" version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" -dependencies = [ - "foldhash 0.2.0", -] [[package]] name = "heapless" @@ -2102,12 +2086,24 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + [[package]] name = "heck" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + [[package]] name = "hermit-abi" version = "0.5.2" @@ -2120,12 +2116,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "hexf-parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" - [[package]] name = "hmac" version = "0.12.1" @@ -2238,6 +2228,24 @@ dependencies = [ "tracing", ] +[[package]] +name = "i-slint-backend-linuxkms" +version = "1.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8fd06c00fbdac3dd490cf5c10da7daad3820d775060a19ea277d8ab944a160b" +dependencies = [ + "calloop 0.14.3", + "drm 0.14.1", + "i-slint-common", + "i-slint-core", + "i-slint-renderer-skia", + "input", + "memmap2", + "nix", + "vulkano", + "xkbcommon", +] + [[package]] name = "i-slint-backend-selector" version = "1.14.1" @@ -2245,10 +2253,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e138660c634d6bbdf98bb2d0cfa487cda28e032e133a2a2c974f1cc494198765" dependencies = [ "cfg-if", + "i-slint-backend-linuxkms", "i-slint-backend-winit", "i-slint-common", "i-slint-core", "i-slint-core-macros", + "i-slint-renderer-skia", ] [[package]] @@ -2267,7 +2277,6 @@ dependencies = [ "i-slint-common", "i-slint-core", "i-slint-core-macros", - "i-slint-renderer-femtovg", "i-slint-renderer-skia", "lyon_path", "muda", @@ -2369,7 +2378,6 @@ dependencies = [ "wasm-bindgen", "web-sys", "web-time", - "wgpu", ] [[package]] @@ -2383,30 +2391,6 @@ dependencies = [ "syn", ] -[[package]] -name = "i-slint-renderer-femtovg" -version = "1.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03d85d77f899ecb1f05c50c659a6d356fba44463686713f1f925c8be48de6afb" -dependencies = [ - "cfg-if", - "const-field-offset", - "derive_more", - "femtovg", - "glow", - "i-slint-common", - "i-slint-core", - "i-slint-core-macros", - "imgref", - "lyon_path", - "pin-weak", - "rgb", - "ttf-parser 0.25.1", - "wasm-bindgen", - "web-sys", - "wgpu", -] - [[package]] name = "i-slint-renderer-skia" version = "1.14.1" @@ -2419,14 +2403,12 @@ dependencies = [ "cfg_aliases", "const-field-offset", "derive_more", - "foreign-types", "glow", "glutin", "i-slint-common", "i-slint-core", "i-slint-core-macros", "lyon_path", - "metal 0.31.0", "objc2 0.6.3", "objc2-app-kit 0.3.2", "objc2-core-foundation", @@ -2440,14 +2422,10 @@ dependencies = [ "scoped-tls-hkt", "skia-safe", "softbuffer", - "spin_on", "unicode-segmentation", "vtable", - "wgpu", - "windows 0.58.0", + "vulkano", "windows 0.62.2", - "windows-core 0.58.0", - "windows-core 0.62.2", "write-fonts", ] @@ -2643,6 +2621,25 @@ dependencies = [ "generic-array", ] +[[package]] +name = "input" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" +dependencies = [ + "bitflags 2.10.0", + "input-sys", + "libc", + "log", + "udev", +] + +[[package]] +name = "input-sys" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd4f5b4d1c00331c5245163aacfe5f20be75b564c7112d45893d4ae038119eb0" + [[package]] name = "integer-sqrt" version = "0.1.5" @@ -2663,6 +2660,17 @@ dependencies = [ "syn", ] +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "ipnet" version = "2.11.0" @@ -2790,17 +2798,6 @@ dependencies = [ "unicode-segmentation", ] -[[package]] -name = "khronos-egl" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" -dependencies = [ - "libc", - "libloading", - "pkg-config", -] - [[package]] name = "khronos_api" version = "3.1.0" @@ -2894,6 +2891,16 @@ dependencies = [ "redox_syscall 0.5.18", ] +[[package]] +name = "libudev-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" +dependencies = [ + "libc", + "pkg-config", +] + [[package]] name = "libz-rs-sys" version = "0.5.2" @@ -2939,6 +2946,12 @@ version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" +[[package]] +name = "linux-raw-sys" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7" + [[package]] name = "linux-raw-sys" version = "0.11.0" @@ -2951,12 +2964,6 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" -[[package]] -name = "litrs" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" - [[package]] name = "lock_api" version = "0.4.14" @@ -3040,18 +3047,9 @@ dependencies = [ [[package]] name = "lzma-rust2" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd44940a607fcd1ec1722158da6bde14dfcaa8b080a130244eb8e110117af28f" - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] +checksum = "2bd57dc1513725e598b9609a9505d6fe28ee280861e5b4d792b3db9d00b1a315" [[package]] name = "maybe-rayon" @@ -3087,36 +3085,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "metal" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" -dependencies = [ - "bitflags 2.10.0", - "block", - "core-graphics-types 0.1.3", - "foreign-types", - "log", - "objc", - "paste", -] - -[[package]] -name = "metal" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605" -dependencies = [ - "bitflags 2.10.0", - "block", - "core-graphics-types 0.2.0", - "foreign-types", - "log", - "objc", - "paste", -] - [[package]] name = "mimalloc" version = "0.1.48" @@ -3188,32 +3156,6 @@ dependencies = [ "windows-sys 0.60.2", ] -[[package]] -name = "naga" -version = "27.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "066cf25f0e8b11ee0df221219010f213ad429855f57c494f995590c861a9a7d8" -dependencies = [ - "arrayvec", - "bit-set", - "bitflags 2.10.0", - "cfg-if", - "cfg_aliases", - "codespan-reporting", - "half", - "hashbrown 0.16.0", - "hexf-parse", - "indexmap", - "libm", - "log", - "num-traits", - "once_cell", - "rustc-hash 1.1.0", - "spirv", - "thiserror 2.0.17", - "unicode-ident", -] - [[package]] name = "ndk" version = "0.9.0" @@ -3373,15 +3315,6 @@ dependencies = [ "syn", ] -[[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-sys" version = "0.3.5" @@ -3784,15 +3717,6 @@ dependencies = [ "libredox", ] -[[package]] -name = "ordered-float" -version = "5.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4779c6901a562440c3786d08192c6fbda7c1c2060edd10006b05ee35d10f2d" -dependencies = [ - "num-traits", -] - [[package]] name = "ordered-stream" version = "0.2.0" @@ -3987,7 +3911,7 @@ checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi", + "hermit-abi 0.5.2", "pin-project-lite", "rustix 1.1.2", "windows-sys 0.61.2", @@ -4008,15 +3932,6 @@ dependencies = [ "critical-section", ] -[[package]] -name = "portable-atomic-util" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" -dependencies = [ - "portable-atomic", -] - [[package]] name = "postcard" version = "1.1.3" @@ -4047,9 +3962,9 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppmd-rust" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c834641d8ad1b348c9ee86dec3b9840d805acd5f24daa5f90c788951a52ff59b" +checksum = "d558c559f0450f16f2a27a1f017ef38468c1090c9ce63c8e51366232d53717b4" [[package]] name = "ppv-lite86" @@ -4060,12 +3975,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "presser" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" - [[package]] name = "prettyplease" version = "0.2.37" @@ -4290,12 +4199,6 @@ dependencies = [ "getrandom 0.3.4", ] -[[package]] -name = "range-alloc" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" - [[package]] name = "rav1e" version = "0.7.1" @@ -4462,12 +4365,6 @@ version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" -[[package]] -name = "renderdoc-sys" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" - [[package]] name = "reqwest" version = "0.12.24" @@ -4745,7 +4642,7 @@ dependencies = [ "ab_glyph", "log", "memmap2", - "smithay-client-toolkit", + "smithay-client-toolkit 0.19.2", "tiny-skia", ] @@ -4886,13 +4783,13 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.19.2" +version = "0.19.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a0dc37cf54d88d6da2ccff560e53118682134fbdb5fdad78f7d41ea620efb3c" +checksum = "724c58ef9fa6b24f223be04638e2073411dd5da79e7b76c21bd93de8dbd753e0" dependencies = [ "crc32fast", "js-sys", - "lzma-rust2 0.15.0", + "lzma-rust2 0.15.1", "wasm-bindgen", ] @@ -4972,7 +4869,7 @@ dependencies = [ "bindgen", "cc", "flate2", - "heck", + "heck 0.5.0", "pkg-config", "regex", "serde_json", @@ -5007,6 +4904,12 @@ version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" +[[package]] +name = "slabbin" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9db491c0d4152a069911a0fbdaca959691bf0b9d7110d98a7ed1c8e59b79ab30" + [[package]] name = "slint" version = "1.14.1" @@ -5017,7 +4920,6 @@ dependencies = [ "i-slint-backend-selector", "i-slint-core", "i-slint-core-macros", - "i-slint-renderer-femtovg", "num-traits", "once_cell", "pin-weak", @@ -5072,8 +4974,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ "bitflags 2.10.0", - "calloop", - "calloop-wayland-source", + "calloop 0.13.0", + "calloop-wayland-source 0.3.0", "cursor-icon", "libc", "log", @@ -5091,13 +4993,40 @@ dependencies = [ ] [[package]] -name = "smithay-clipboard" -version = "0.7.2" +name = "smithay-client-toolkit" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc8216eec463674a0e90f29e0ae41a4db573ec5b56b1c6c1c71615d249b6d846" +checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" +dependencies = [ + "bitflags 2.10.0", + "calloop 0.14.3", + "calloop-wayland-source 0.4.1", + "cursor-icon", + "libc", + "log", + "memmap2", + "rustix 1.1.2", + "thiserror 2.0.17", + "wayland-backend", + "wayland-client", + "wayland-csd-frame", + "wayland-cursor", + "wayland-protocols", + "wayland-protocols-experimental", + "wayland-protocols-misc", + "wayland-protocols-wlr", + "wayland-scanner", + "xkeysym", +] + +[[package]] +name = "smithay-clipboard" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71704c03f739f7745053bde45fa203a46c58d25bc5c4efba1d9a60e9dba81226" dependencies = [ "libc", - "smithay-client-toolkit", + "smithay-client-toolkit 0.20.0", "wayland-backend", ] @@ -5140,6 +5069,7 @@ dependencies = [ "bytemuck", "cfg_aliases", "core-graphics 0.24.0", + "drm 0.12.0", "fastrand", "foreign-types", "js-sys", @@ -5197,15 +5127,6 @@ dependencies = [ "lock_api", ] -[[package]] -name = "spirv" -version = "0.3.0+sdk-1.3.268.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" -dependencies = [ - "bitflags 2.10.0", -] - [[package]] name = "stable_deref_trait" version = "1.2.1" @@ -5248,7 +5169,7 @@ version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" dependencies = [ - "heck", + "heck 0.5.0", "proc-macro2", "quote", "syn", @@ -5328,7 +5249,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" dependencies = [ "cfg-expr", - "heck", + "heck 0.5.0", "pkg-config", "toml 0.8.23", "version-compare", @@ -5419,6 +5340,15 @@ dependencies = [ "syn", ] +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + [[package]] name = "tiff" version = "0.10.3" @@ -5569,9 +5499,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.16" +version = "0.7.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" +checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" dependencies = [ "bytes", "futures-core", @@ -5635,7 +5565,6 @@ dependencies = [ "serde", "serde_spanned 0.6.9", "toml_datetime 0.6.11", - "toml_write", "winnow", ] @@ -5661,12 +5590,6 @@ dependencies = [ "winnow", ] -[[package]] -name = "toml_write" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" - [[package]] name = "toml_writer" version = "1.0.4" @@ -5724,6 +5647,7 @@ version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -5803,6 +5727,18 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +[[package]] +name = "udev" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af4e37e9ea4401fc841ff54b9ddfc9be1079b1e89434c1a6a865dd68980f7e9f" +dependencies = [ + "io-lifetimes", + "libc", + "libudev-sys", + "pkg-config", +] + [[package]] name = "uds_windows" version = "1.1.0" @@ -5868,12 +5804,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" -[[package]] -name = "unicode-width" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" - [[package]] name = "unicode-xid" version = "0.2.6" @@ -5979,9 +5909,9 @@ dependencies = [ [[package]] name = "version-compare" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" +checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" [[package]] name = "version_check" @@ -5989,6 +5919,15 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "vk-parse" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3859da4d7b98bec73e68fb65815d47a263819c415c90eed42b80440a02cbce8c" +dependencies = [ + "xml-rs", +] + [[package]] name = "vtable" version = "0.3.0" @@ -6012,6 +5951,35 @@ dependencies = [ "syn", ] +[[package]] +name = "vulkano" +version = "0.35.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee487adf7c13e5aa46d4d7fac6ffb8e172eb7e6472aaf815e9ade4992f8f2414" +dependencies = [ + "ash", + "bytemuck", + "crossbeam-queue", + "foldhash", + "half", + "heck 0.4.1", + "indexmap", + "libloading", + "nom 7.1.3", + "once_cell", + "parking_lot", + "proc-macro2", + "quote", + "raw-window-handle", + "raw-window-metal", + "serde", + "serde_json", + "slabbin", + "smallvec", + "thread_local", + "vk-parse", +] + [[package]] name = "walkdir" version = "2.5.0" @@ -6164,6 +6132,32 @@ dependencies = [ "wayland-scanner", ] +[[package]] +name = "wayland-protocols-experimental" +version = "20250721.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1" +dependencies = [ + "bitflags 2.10.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-misc" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dfe33d551eb8bffd03ff067a8b44bb963919157841a99957151299a6307d19c" +dependencies = [ + "bitflags 2.10.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + [[package]] name = "wayland-protocols-plasma" version = "0.3.9" @@ -6235,9 +6229,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8" +checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e" dependencies = [ "rustls-pki-types", ] @@ -6248,157 +6242,6 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" -[[package]] -name = "wgpu" -version = "27.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe68bac7cde125de7a731c3400723cadaaf1703795ad3f4805f187459cd7a77" -dependencies = [ - "arrayvec", - "bitflags 2.10.0", - "cfg-if", - "cfg_aliases", - "document-features", - "hashbrown 0.16.0", - "js-sys", - "log", - "naga", - "parking_lot", - "portable-atomic", - "profiling", - "raw-window-handle", - "smallvec", - "static_assertions", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "wgpu-core", - "wgpu-hal", - "wgpu-types", -] - -[[package]] -name = "wgpu-core" -version = "27.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27a75de515543b1897b26119f93731b385a19aea165a1ec5f0e3acecc229cae7" -dependencies = [ - "arrayvec", - "bit-set", - "bit-vec", - "bitflags 2.10.0", - "bytemuck", - "cfg_aliases", - "document-features", - "hashbrown 0.16.0", - "indexmap", - "log", - "naga", - "once_cell", - "parking_lot", - "portable-atomic", - "profiling", - "raw-window-handle", - "rustc-hash 1.1.0", - "smallvec", - "thiserror 2.0.17", - "wgpu-core-deps-apple", - "wgpu-core-deps-emscripten", - "wgpu-core-deps-windows-linux-android", - "wgpu-hal", - "wgpu-types", -] - -[[package]] -name = "wgpu-core-deps-apple" -version = "27.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0772ae958e9be0c729561d5e3fd9a19679bcdfb945b8b1a1969d9bfe8056d233" -dependencies = [ - "wgpu-hal", -] - -[[package]] -name = "wgpu-core-deps-emscripten" -version = "27.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06ac3444a95b0813ecfd81ddb2774b66220b264b3e2031152a4a29fda4da6b5" -dependencies = [ - "wgpu-hal", -] - -[[package]] -name = "wgpu-core-deps-windows-linux-android" -version = "27.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71197027d61a71748e4120f05a9242b2ad142e3c01f8c1b47707945a879a03c3" -dependencies = [ - "wgpu-hal", -] - -[[package]] -name = "wgpu-hal" -version = "27.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b21cb61c57ee198bc4aff71aeadff4cbb80b927beb912506af9c780d64313ce" -dependencies = [ - "android_system_properties", - "arrayvec", - "ash", - "bit-set", - "bitflags 2.10.0", - "block", - "bytemuck", - "cfg-if", - "cfg_aliases", - "core-graphics-types 0.2.0", - "glow", - "glutin_wgl_sys", - "gpu-alloc", - "gpu-allocator", - "gpu-descriptor", - "hashbrown 0.16.0", - "js-sys", - "khronos-egl", - "libc", - "libloading", - "log", - "metal 0.32.0", - "naga", - "ndk-sys", - "objc", - "once_cell", - "ordered-float", - "parking_lot", - "portable-atomic", - "portable-atomic-util", - "profiling", - "range-alloc", - "raw-window-handle", - "renderdoc-sys", - "smallvec", - "thiserror 2.0.17", - "wasm-bindgen", - "web-sys", - "wgpu-types", - "windows 0.58.0", - "windows-core 0.58.0", -] - -[[package]] -name = "wgpu-types" -version = "27.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afdcf84c395990db737f2dd91628706cb31e86d72e53482320d368e52b5da5eb" -dependencies = [ - "bitflags 2.10.0", - "bytemuck", - "js-sys", - "log", - "thiserror 2.0.17", - "web-sys", -] - [[package]] name = "winapi" version = "0.3.9" @@ -6604,6 +6447,15 @@ dependencies = [ "windows-targets 0.42.2", ] +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + [[package]] name = "windows-sys" version = "0.52.0" @@ -6655,6 +6507,21 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + [[package]] name = "windows-targets" version = "0.52.6" @@ -6703,6 +6570,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -6721,6 +6594,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -6739,6 +6618,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -6769,6 +6654,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -6787,6 +6678,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -6805,6 +6702,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -6823,6 +6726,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -6847,7 +6756,7 @@ dependencies = [ "bitflags 2.10.0", "block2 0.5.1", "bytemuck", - "calloop", + "calloop 0.13.0", "cfg_aliases", "concurrent-queue", "core-foundation 0.9.4", @@ -6869,7 +6778,7 @@ dependencies = [ "redox_syscall 0.4.1", "rustix 0.38.44", "sctk-adwaita", - "smithay-client-toolkit", + "smithay-client-toolkit 0.19.2", "smol_str 0.2.2", "tracing", "unicode-segmentation", @@ -6898,11 +6807,11 @@ dependencies = [ [[package]] name = "winresource" -version = "0.1.23" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edcacf11b6f48dd21b9ba002f991bdd5de29b2da8cc2800412f4b80f677e4957" +checksum = "ca6d1a5aac12a0cccc4dea310c464cae005a78eadfa72fc3bc45fe696ebfbb9d" dependencies = [ - "toml 0.8.23", + "toml 0.9.8", "version_check", ] @@ -6989,6 +6898,17 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b" +[[package]] +name = "xkbcommon" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a974f48060a14e95705c01f24ad9c3345022f4d97441b8a36beb7ed5c4a02d" +dependencies = [ + "libc", + "memmap2", + "xkeysym", +] + [[package]] name = "xkbcommon-dl" version = "0.4.2" diff --git a/Cargo.toml b/Cargo.toml index b870672..1076033 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,11 +15,11 @@ chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde-big-array = "0.5" -slint = { version = "1.12", default-features = false, features = ["compat-1-2", "std", "backend-winit", "renderer-femtovg-wgpu"] } +slint = { version = "1.12", default-features = false, features = ["compat-1-2", "std", "backend-winit", "renderer-skia-vulkan"] } open = "5.3" sha2 = "0.10" sdl3-sys = { version = "0.5", features = ["build-from-source-static"] } -sdl3-ttf-sys = { version = "0.2", features = ["build-static-vendored", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } +sdl3-ttf-sys = { version = "0.2", features = ["build-from-source-static", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } rfd = { version = "0.15", default-features = false, features = ["xdg-portal", "tokio"] } tokio = {version = "1.46", features = ["rt-multi-thread", "macros"] } spin_sleep = "1.3" From 002fbbe8a44ef02bcd2c44b435649efa34790c90 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 4 Nov 2025 08:27:32 +0100 Subject: [PATCH 0629/1117] set netplay id from environment (#606) --- build.rs | 3 +++ src/ui/netplay.rs | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/build.rs b/build.rs index 3748c6d..93a506b 100644 --- a/build.rs +++ b/build.rs @@ -193,5 +193,8 @@ fn main() { let git_hash = String::from_utf8(git_output.stdout).unwrap(); println!("cargo:rustc-env=GIT_HASH={git_hash}"); + let netplay_id = std::env::var("NETPLAY_ID").unwrap_or("gopher64".to_string()); + println!("cargo:rustc-env=NETPLAY_ID={netplay_id}"); + println!("cargo:rustc-env=N64_STACK_SIZE={}", 8 * 1024 * 1024); } diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index be11bb6..5c08867 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -111,7 +111,7 @@ impl NetplayPages for NetplayJoin { fn populate_server_names(weak: slint::Weak) { let task = reqwest::Client::new() .get("https://dispatch.gopher64.com/getRegions") - .header("netplay-id", EMU_NAME) + .header("netplay-id", env!("NETPLAY_ID")) .send(); tokio::spawn(async move { let mut local_servers: Vec<(String, String)> = vec![]; @@ -296,7 +296,7 @@ pub fn setup_create_window( let task = reqwest::Client::new() .get("https://dispatch.gopher64.com/createServer") .query(&[("region", server_url.strip_prefix("dispatcher:").unwrap())]) - .header("netplay-id", EMU_NAME) + .header("netplay-id", env!("NETPLAY_ID")) .send(); let netplay_read_sender = netplay_read_sender.clone(); let netplay_write_receiver = netplay_write_receiver.resubscribe(); @@ -448,7 +448,7 @@ fn show_netplay_error(message: String) { fn update_sessions(weak: slint::Weak) { let task = reqwest::Client::new() .get("https://dispatch.gopher64.com/getServers") - .header("netplay-id", EMU_NAME) + .header("netplay-id", env!("NETPLAY_ID")) .send(); tokio::spawn(async move { let mut dispatcher_servers = std::collections::HashMap::new(); From 181774a1def9b543f4c3a4d6ac36d1a96648e318 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 4 Nov 2025 15:38:30 +0100 Subject: [PATCH 0630/1117] pass netplay_id to workflow --- .github/workflows/build.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 127fc18..63d436d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -60,6 +60,8 @@ jobs: cargo build --release -v --target=${{ matrix.target }} mkdir output cp target/${{ matrix.target }}/release/gopher64 output/gopher64-${{ matrix.arch }} + env: + NETPLAY_ID: ${{ secrets.NETPLAY_ID }} - name: Upload file uses: actions/upload-artifact@v5 with: @@ -105,6 +107,7 @@ jobs: env: CC: clang-cl CXX: clang-cl + NETPLAY_ID: ${{ secrets.NETPLAY_ID }} - name: Upload unsigned artifact id: upload-unsigned-artifact uses: actions/upload-artifact@v5 @@ -149,6 +152,7 @@ jobs: cp target/${{ matrix.target }}/release/gopher64 output/gopher64-${{ matrix.arch }} env: AR: ar + NETPLAY_ID: ${{ secrets.NETPLAY_ID }} - name: Upload file uses: actions/upload-artifact@v5 with: From 6f6e21c718b3c55f44da4391bc9d14b48d1686a5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 5 Nov 2025 15:12:12 +0100 Subject: [PATCH 0631/1117] tweak build options --- Cargo.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 1076033..b6246ed 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -45,7 +45,10 @@ cc = { version = "1.2", features = ["parallel"] } [profile.release] panic = "abort" lto = "thin" +strip = true [profile.release-with-debug] inherits = "release" debug = true +strip = false +panic = "unwind" From 581cc0b9aabf891afb1af796a69a2a1a856859ce Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 5 Nov 2025 15:16:57 +0100 Subject: [PATCH 0632/1117] cargo update --- Cargo.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 505cbbb..1f9032f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2679,9 +2679,9 @@ checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "iri-string" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" dependencies = [ "memchr", "serde", @@ -3710,9 +3710,9 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "orbclient" -version = "0.3.48" +version = "0.3.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43" +checksum = "247ad146e19b9437f8604c21f8652423595cf710ad108af40e77d3ae6e96b827" dependencies = [ "libredox", ] @@ -4543,9 +4543,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.34" +version = "0.23.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9586e9ee2b4f8fab52a0048ca7334d7024eef48e2cb9407e3497bb7cab7fa7" +checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" dependencies = [ "once_cell", "ring", From c4057c2f210ddcdca11ca941e8cff8dc340ad88a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 5 Nov 2025 15:29:56 +0100 Subject: [PATCH 0633/1117] bump to 1.1.11 --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1f9032f..336e7e0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1936,7 +1936,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.10" +version = "1.1.11" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index b6246ed..eed40d3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.10" +version = "1.1.11" edition = "2024" rust-version = "1.91" From 79eb34d83df31721c634fd214372d76acce26f07 Mon Sep 17 00:00:00 2001 From: Adam Steinberg <43798340+AdamSteinberg1@users.noreply.github.com> Date: Sat, 8 Nov 2025 15:34:35 -0500 Subject: [PATCH 0634/1117] unsolicited main.rs refactor (#614) * main.rs refactor * remove anyhow * forgive me clippy, for I have sinned --- src/main.rs | 142 ++++++++++++++++++++++------------------------------ 1 file changed, 60 insertions(+), 82 deletions(-) diff --git a/src/main.rs b/src/main.rs index 015659c..874248f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,6 +9,7 @@ mod netplay; mod savestates; mod ui; use clap::Parser; +use std::io::Error; use ui::gui; /// N64 emulator @@ -74,112 +75,89 @@ struct Args { } #[tokio::main] -async fn main() { +async fn main() -> std::io::Result<()> { let dirs = ui::get_dirs(); - let mut result = std::fs::create_dir_all(dirs.config_dir); - if result.is_err() { - panic!("could not create config dir: {}", result.err().unwrap()) - } - result = std::fs::create_dir_all(dirs.data_dir.join("saves")); - if result.is_err() { - panic!("could not create save dir: {}", result.err().unwrap()) - } - result = std::fs::create_dir_all(dirs.data_dir.join("states")); - if result.is_err() { - panic!("could not create state dir: {}", result.err().unwrap()) - } - + std::fs::create_dir_all(dirs.config_dir)?; + std::fs::create_dir_all(dirs.data_dir.join("saves"))?; + std::fs::create_dir_all(dirs.data_dir.join("states"))?; let args = Args::parse(); - let args_as_strings: Vec = std::env::args().collect(); - let args_count = args_as_strings.len(); - if args_count > 1 && args.game.is_none() { + if let Some(game) = args.game { + let file_path = std::path::Path::new(&game); + let Some(rom_contents) = device::get_rom_contents(file_path) else { + return Err(Error::other(format!( + "Could not read ROM file: {}", + file_path.display() + ))); + }; + let handle = std::thread::Builder::new() + .name("n64".to_string()) + .stack_size(env!("N64_STACK_SIZE").parse().unwrap()) + .spawn(move || { + let mut device = device::Device::new(); + let overclock = device.ui.config.emulation.overclock; + let disable_expansion_pak = device.ui.config.emulation.disable_expansion_pak; + + let game_cheats = { + let game_crc = ui::storage::get_game_crc(&rom_contents); + let cheats = ui::config::Cheats::new(); + cheats.cheats.get(&game_crc).cloned().unwrap_or_default() + }; + device::run_game( + &mut device, + rom_contents, + ui::gui::GameSettings { + fullscreen: args.fullscreen, + overclock, + disable_expansion_pak, + cheats: game_cheats, + }, + ); + })?; + + handle.join().unwrap(); + } else if std::env::args().count() > 1 { let mut ui = ui::Ui::new(); if args.clear_input_bindings { ui::input::clear_bindings(&mut ui); - return; + return Ok(()); } - if args.port.is_some() { - let port = args.port.unwrap(); - if !(1..=4).contains(&port) { - println!("Port must be betwen 1 and 4"); - return; - } + if let Some(port) = args.port + && !(1..=4).contains(&port) + { + return Err(Error::other("Port must be between 1 and 4")); } if args.list_controllers { let controllers = ui::input::get_controller_names(&ui); for (i, controller) in controllers.iter().enumerate() { println!("Controller {i}: {controller}"); } - return; + return Ok(()); } - if args.configure_input_profile.is_some() { + if let Some(profile) = args.configure_input_profile { ui::input::configure_input_profile( &mut ui, - args.configure_input_profile.unwrap(), + profile, args.use_dinput, args.deadzone.unwrap_or(ui::input::DEADZONE_DEFAULT), ); - return; + return Ok(()); } - if args.assign_controller.is_some() { - if args.port.is_none() { - println!("Must specify port number"); - return; - } - ui::input::assign_controller( - &mut ui, - args.assign_controller.unwrap(), - args.port.unwrap(), - ); + if let Some(assign_controller) = args.assign_controller { + let Some(port) = args.port else { + return Err(Error::other("Must specify port number")); + }; + ui::input::assign_controller(&mut ui, assign_controller, port); } - if args.bind_input_profile.is_some() { - if args.port.is_none() { - println!("Must specify port number"); - return; - } - ui::input::bind_input_profile( - &mut ui, - args.bind_input_profile.unwrap(), - args.port.unwrap(), - ); - } - } else if args.game.is_some() { - let file_path = std::path::Path::new(args.game.as_ref().unwrap()); - if let Some(rom_contents) = device::get_rom_contents(file_path) { - let handle = std::thread::Builder::new() - .name("n64".to_string()) - .stack_size(env!("N64_STACK_SIZE").parse().unwrap()) - .spawn(move || { - let mut device = device::Device::new(); - let overclock = device.ui.config.emulation.overclock; - let disable_expansion_pak = device.ui.config.emulation.disable_expansion_pak; - - let game_cheats = { - let game_crc = ui::storage::get_game_crc(&rom_contents); - let cheats = ui::config::Cheats::new(); - cheats.cheats.get(&game_crc).cloned().unwrap_or_default() - }; - device::run_game( - &mut device, - rom_contents, - ui::gui::GameSettings { - fullscreen: args.fullscreen, - overclock, - disable_expansion_pak, - cheats: game_cheats, - }, - ); - }) - .unwrap(); - - handle.join().unwrap(); - } else { - println!("Could not read rom file"); - return; + if let Some(profile) = args.bind_input_profile { + let Some(port) = args.port else { + return Err(Error::other("Must specify port number")); + }; + ui::input::bind_input_profile(&mut ui, profile, port); } } else { gui::app_window(); } + Ok(()) } From 20761faf8c6014f2ab509576ddfb4e748b5f9839 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 11 Nov 2025 12:43:54 +0100 Subject: [PATCH 0635/1117] rust 1.91.1 --- Cargo.lock | 32 ++++++++++++++++---------------- Cargo.toml | 2 +- rust-toolchain.toml | 2 +- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 336e7e0..69d9e64 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -649,9 +649,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.44" +version = "1.2.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37521ac7aabe3d13122dc382493e20c9416f299d2ccd5b3a5340a2570cdeb0f3" +checksum = "35900b6c8d709fb1d854671ae27aeaa9eec2f8b01b364e1619a40da3e6fe2afe" dependencies = [ "find-msvc-tools", "jobserver", @@ -1466,9 +1466,9 @@ dependencies = [ [[package]] name = "exr" -version = "1.73.0" +version = "1.74.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83197f59927b46c04a183a619b7c29df34e63e63c7869320862268c0ef687e0" +checksum = "4300e043a56aa2cb633c01af81ca8f699a321879a7854d3896a0ba89056363be" dependencies = [ "bit_field", "half", @@ -1585,9 +1585,9 @@ checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "font-types" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "511e2c18a516c666d27867d2f9821f76e7d591f762e9fc41dd6cc5c90fe54b0b" +checksum = "39a654f404bbcbd48ea58c617c2993ee91d1cb63727a37bf2323a4edeed1b8c5" dependencies = [ "bytemuck", ] @@ -2933,9 +2933,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linked_hash_set" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae85b5be22d9843c80e5fc80e9b64c8a3b1f98f867c709956eca3efff4e92e2" +checksum = "984fb35d06508d1e69fc91050cceba9c0b748f983e6739fa2c7a9237154c52c8" dependencies = [ "linked-hash-map", ] @@ -4127,9 +4127,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.41" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" dependencies = [ "proc-macro2", ] @@ -5204,9 +5204,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.108" +version = "2.0.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" +checksum = "a99801b5bd34ede4cf3fc688c5919368fea4e4814a4664359503e6015b280aea" dependencies = [ "proc-macro2", "quote", @@ -6238,9 +6238,9 @@ dependencies = [ [[package]] name = "weezl" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" +checksum = "009936b22a61d342859b5f0ea64681cbb35a358ab548e2a44a8cf0dac2d980b8" [[package]] name = "winapi" @@ -6807,9 +6807,9 @@ dependencies = [ [[package]] name = "winresource" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6d1a5aac12a0cccc4dea310c464cae005a78eadfa72fc3bc45fe696ebfbb9d" +checksum = "f1ef04dd590e94ff7431a8eda99d5ca659e688d60e930bd0a330062acea4608f" dependencies = [ "toml 0.9.8", "version_check", diff --git a/Cargo.toml b/Cargo.toml index eed40d3..da2f250 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "gopher64" version = "1.1.11" edition = "2024" -rust-version = "1.91" +rust-version = "1.91.1" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/rust-toolchain.toml b/rust-toolchain.toml index d72668b..d6d3381 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.91.0" +channel = "1.91.1" From 64e6d75db1bfbc5fbe53af2e919c739eb19c4fff Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 21 Nov 2025 10:44:09 +0100 Subject: [PATCH 0636/1117] Update Granite (#618) * Update Granite * add file --- build.rs | 1 + parallel-rdp/parallel-rdp-standalone | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/build.rs b/build.rs index 93a506b..ad87a95 100644 --- a/build.rs +++ b/build.rs @@ -40,6 +40,7 @@ fn main() { .file("parallel-rdp/parallel-rdp-standalone/vulkan/pipeline_event.cpp") .file("parallel-rdp/parallel-rdp-standalone/vulkan/query_pool.cpp") .file("parallel-rdp/parallel-rdp-standalone/vulkan/render_pass.cpp") + .file("parallel-rdp/parallel-rdp-standalone/vulkan/rtas.cpp") .file("parallel-rdp/parallel-rdp-standalone/vulkan/sampler.cpp") .file("parallel-rdp/parallel-rdp-standalone/vulkan/semaphore.cpp") .file("parallel-rdp/parallel-rdp-standalone/vulkan/semaphore_manager.cpp") diff --git a/parallel-rdp/parallel-rdp-standalone b/parallel-rdp/parallel-rdp-standalone index 091c7fe..08b0482 160000 --- a/parallel-rdp/parallel-rdp-standalone +++ b/parallel-rdp/parallel-rdp-standalone @@ -1 +1 @@ -Subproject commit 091c7fec1cd925eb7865606ac8c533768df32199 +Subproject commit 08b048288a68f40d00dad255f9bf4e3c1935b984 From 6d40f5a12df30c5844b455f1e167db159d933754 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 21 Nov 2025 10:44:52 +0100 Subject: [PATCH 0637/1117] cargo update --- Cargo.lock | 379 +++++++++++++++++++++++++---------------------------- 1 file changed, 180 insertions(+), 199 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 69d9e64..9daacba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -57,6 +57,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "aligned" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "377e4c0ba83e4431b10df45c1d4666f178ea9c552cac93e60c3a88bf32785923" +dependencies = [ + "as-slice", +] + [[package]] name = "aligned-vec" version = "0.6.4" @@ -140,22 +149,22 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.10" +version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -202,6 +211,15 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" +[[package]] +name = "as-slice" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516" +dependencies = [ + "stable_deref_trait", +] + [[package]] name = "ash" version = "0.38.0+1.3.281" @@ -220,7 +238,7 @@ dependencies = [ "enumflags2", "futures-channel", "futures-util", - "rand 0.9.2", + "rand", "raw-window-handle", "serde", "serde_repr", @@ -396,6 +414,26 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +[[package]] +name = "av-scenechange" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f321d77c20e19b92c39e7471cf986812cbb46659d2af674adc4331ef3f18394" +dependencies = [ + "aligned", + "anyhow", + "arg_enum_proc_macro", + "arrayvec", + "log", + "num-rational", + "num-traits", + "pastey", + "rayon", + "thiserror 2.0.17", + "v_frame", + "y4m", +] + [[package]] name = "av1-grain" version = "0.2.5" @@ -478,9 +516,12 @@ dependencies = [ [[package]] name = "bitstream-io" -version = "2.6.0" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" +checksum = "60d4bd9d1db2c6bdf285e223a7fa369d5ce98ec767dec949c6ca62863ce61757" +dependencies = [ + "core2", +] [[package]] name = "block-buffer" @@ -533,9 +574,9 @@ dependencies = [ [[package]] name = "built" -version = "0.7.7" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" +checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64" [[package]] name = "bumpalo" @@ -583,9 +624,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" [[package]] name = "bzip2" @@ -649,9 +690,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.45" +version = "1.2.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35900b6c8d709fb1d854671ae27aeaa9eec2f8b01b364e1619a40da3e6fe2afe" +checksum = "cd405d82c84ff7f35739f175f67d8b9fb7687a0e84ccdc78bd3568839827cf07" dependencies = [ "find-msvc-tools", "jobserver", @@ -674,16 +715,6 @@ dependencies = [ "nom 7.1.3", ] -[[package]] -name = "cfg-expr" -version = "0.15.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" -dependencies = [ - "smallvec", - "target-lexicon", -] - [[package]] name = "cfg-if" version = "1.0.4" @@ -741,9 +772,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.51" +version = "4.5.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" +checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" dependencies = [ "clap_builder", "clap_derive", @@ -751,9 +782,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.51" +version = "4.5.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a" +checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" dependencies = [ "anstream", "anstyle", @@ -974,6 +1005,15 @@ dependencies = [ "libc", ] +[[package]] +name = "core2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" +dependencies = [ + "memchr", +] + [[package]] name = "core_maths" version = "0.1.1" @@ -1079,9 +1119,9 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-common" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "typenum", @@ -1550,9 +1590,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" +checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" [[package]] name = "flate2" @@ -1583,6 +1623,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + [[package]] name = "font-types" version = "0.10.1" @@ -1784,9 +1830,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.9" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -1839,6 +1885,16 @@ dependencies = [ "weezl", ] +[[package]] +name = "gif" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f954a9e9159ec994f73a30a12b96a702dde78f5547bcb561174597924f7d4162" +dependencies = [ + "color_quant", + "weezl", +] + [[package]] name = "gl_generator" version = "0.14.0" @@ -1950,7 +2006,7 @@ dependencies = [ "mimalloc", "open", "postcard", - "rand_chacha 0.9.0", + "rand_chacha", "regex", "reqwest", "rfd", @@ -1974,9 +2030,9 @@ dependencies = [ [[package]] name = "governor" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444405bbb1a762387aa22dd569429533b54a1d8759d35d3b64cb39b0293eaa19" +checksum = "6e23d5986fd4364c2fb7498523540618b4b8d92eec6c36a02e565f66748e2f79" dependencies = [ "cfg-if", "dashmap", @@ -1984,12 +2040,12 @@ dependencies = [ "futures-timer", "futures-util", "getrandom 0.3.4", - "hashbrown 0.15.5", + "hashbrown 0.16.1", "nonzero_ext", "parking_lot", "portable-atomic", "quanta", - "rand 0.9.2", + "rand", "smallvec", "spinning_top", "web-time", @@ -2062,15 +2118,20 @@ checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", - "foldhash", + "foldhash 0.1.5", "rayon", ] [[package]] name = "hashbrown" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.2.0", +] [[package]] name = "heapless" @@ -2167,9 +2228,9 @@ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "hyper" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" dependencies = [ "atomic-waker", "bytes", @@ -2206,9 +2267,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" +checksum = "52e9a2a24dc5c6821e71a7030e1e14b7b632acac55c40e9d2e082c621261bb56" dependencies = [ "base64", "bytes", @@ -2558,15 +2619,15 @@ dependencies = [ [[package]] name = "image" -version = "0.25.8" +version = "0.25.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7" +checksum = "e6506c6c10786659413faa717ceebcb8f70731c0a60cbae39795fdf114519c1a" dependencies = [ "bytemuck", "byteorder-lite", "color_quant", "exr", - "gif", + "gif 0.14.0", "image-webp", "moxcms", "num-traits", @@ -2576,8 +2637,8 @@ dependencies = [ "rayon", "rgb", "tiff", - "zune-core", - "zune-jpeg", + "zune-core 0.5.0", + "zune-jpeg 0.5.5", ] [[package]] @@ -2604,12 +2665,12 @@ checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" [[package]] name = "indexmap" -version = "2.12.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" +checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" dependencies = [ "equivalent", - "hashbrown 0.16.0", + "hashbrown 0.16.1", ] [[package]] @@ -2712,15 +2773,6 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.13.0" @@ -3016,9 +3068,9 @@ dependencies = [ [[package]] name = "lyon_geom" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e16770d760c7848b0c1c2d209101e408207a65168109509f8483837a36cf2e7" +checksum = "e260b6de923e6e47adfedf6243013a7a874684165a6a277594ee3906021b2343" dependencies = [ "arrayvec", "euclid", @@ -3693,9 +3745,9 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "open" -version = "5.3.2" +version = "5.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2483562e62ea94312f3576a7aca397306df7990b8d89033e18766744377ef95" +checksum = "43bb73a7fa3799b198970490a51174027ba0d4ec504b03cd08caf513d40024bc" dependencies = [ "is-wsl", "libc", @@ -3785,6 +3837,12 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "pastey" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec" + [[package]] name = "pathdiff" version = "0.2.3" @@ -3991,7 +4049,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit 0.23.7", + "toml_edit", ] [[package]] @@ -4099,7 +4157,7 @@ dependencies = [ "bytes", "getrandom 0.3.4", "lru-slab", - "rand 0.9.2", + "rand", "ring", "rustc-hash 2.1.1", "rustls", @@ -4140,35 +4198,14 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - [[package]] name = "rand" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.3", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", + "rand_chacha", + "rand_core", ] [[package]] @@ -4178,16 +4215,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.3", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.16", + "rand_core", ] [[package]] @@ -4201,19 +4229,21 @@ dependencies = [ [[package]] name = "rav1e" -version = "0.7.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" +checksum = "43b6dd56e85d9483277cde964fd1bdb0428de4fec5ebba7540995639a21cb32b" dependencies = [ + "aligned-vec", "arbitrary", "arg_enum_proc_macro", "arrayvec", + "av-scenechange", "av1-grain", "bitstream-io", "built", "cfg-if", "interpolate_name", - "itertools 0.12.1", + "itertools 0.14.0", "libc", "libfuzzer-sys", "log", @@ -4222,23 +4252,21 @@ dependencies = [ "noop_proc_macro", "num-derive", "num-traits", - "once_cell", "paste", "profiling", - "rand 0.8.5", - "rand_chacha 0.3.1", + "rand", + "rand_chacha", "simd_helpers", - "system-deps", - "thiserror 1.0.69", + "thiserror 2.0.17", "v_frame", "wasm-bindgen", ] [[package]] name = "ravif" -version = "0.11.20" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5825c26fddd16ab9f515930d49028a630efec172e903483c94796cfe31893e6b" +checksum = "ef69c1990ceef18a116855938e74793a5f7496ee907562bd0857b6ac734ab285" dependencies = [ "avif-serialize", "imgref", @@ -4412,7 +4440,7 @@ version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8928798c0a55e03c9ca6c4c6846f76377427d2c1e1f7e6de3c06ae57942df43" dependencies = [ - "gif", + "gif 0.13.3", "image-webp", "log", "pico-args", @@ -4420,7 +4448,7 @@ dependencies = [ "svgtypes", "tiny-skia", "usvg", - "zune-jpeg", + "zune-jpeg 0.4.21", ] [[package]] @@ -4751,15 +4779,6 @@ dependencies = [ "syn", ] -[[package]] -name = "serde_spanned" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" -dependencies = [ - "serde", -] - [[package]] name = "serde_spanned" version = "1.0.3" @@ -4874,7 +4893,7 @@ dependencies = [ "regex", "serde_json", "tar", - "toml 0.9.8", + "toml", ] [[package]] @@ -4937,7 +4956,7 @@ dependencies = [ "derive_more", "i-slint-compiler", "spin_on", - "toml_edit 0.23.7", + "toml_edit", ] [[package]] @@ -5242,19 +5261,6 @@ dependencies = [ "libc", ] -[[package]] -name = "system-deps" -version = "6.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" -dependencies = [ - "cfg-expr", - "heck 0.5.0", - "pkg-config", - "toml 0.8.23", - "version-compare", -] - [[package]] name = "tar" version = "0.4.44" @@ -5266,12 +5272,6 @@ dependencies = [ "xattr", ] -[[package]] -name = "target-lexicon" -version = "0.12.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" - [[package]] name = "tempfile" version = "3.23.0" @@ -5360,7 +5360,7 @@ dependencies = [ "half", "quick-error", "weezl", - "zune-jpeg", + "zune-jpeg 0.4.21", ] [[package]] @@ -5510,18 +5510,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "toml" -version = "0.8.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" -dependencies = [ - "serde", - "serde_spanned 0.6.9", - "toml_datetime 0.6.11", - "toml_edit 0.22.27", -] - [[package]] name = "toml" version = "0.9.8" @@ -5530,22 +5518,13 @@ checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" dependencies = [ "indexmap", "serde_core", - "serde_spanned 1.0.3", - "toml_datetime 0.7.3", + "serde_spanned", + "toml_datetime", "toml_parser", "toml_writer", "winnow", ] -[[package]] -name = "toml_datetime" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" -dependencies = [ - "serde", -] - [[package]] name = "toml_datetime" version = "0.7.3" @@ -5555,19 +5534,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "toml_edit" -version = "0.22.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" -dependencies = [ - "indexmap", - "serde", - "serde_spanned 0.6.9", - "toml_datetime 0.6.11", - "winnow", -] - [[package]] name = "toml_edit" version = "0.23.7" @@ -5575,7 +5541,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" dependencies = [ "indexmap", - "toml_datetime 0.7.3", + "toml_datetime", "toml_parser", "toml_writer", "winnow", @@ -5705,7 +5671,7 @@ dependencies = [ "http", "httparse", "log", - "rand 0.9.2", + "rand", "sha1", "thiserror 2.0.17", "utf-8", @@ -5907,12 +5873,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "version-compare" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" - [[package]] name = "version_check" version = "0.9.5" @@ -5960,7 +5920,7 @@ dependencies = [ "ash", "bytemuck", "crossbeam-queue", - "foldhash", + "foldhash 0.1.5", "half", "heck 0.4.1", "indexmap", @@ -6238,9 +6198,9 @@ dependencies = [ [[package]] name = "weezl" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "009936b22a61d342859b5f0ea64681cbb35a358ab548e2a44a8cf0dac2d980b8" +checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" [[package]] name = "winapi" @@ -6811,7 +6771,7 @@ version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1ef04dd590e94ff7431a8eda99d5ca659e688d60e930bd0a330062acea4608f" dependencies = [ - "toml 0.9.8", + "toml", "version_check", ] @@ -6940,6 +6900,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" +[[package]] +name = "y4m" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5a4b21e1a62b67a2970e6831bc091d7b87e119e7f9791aef9702e3bef04448" + [[package]] name = "yazi" version = "0.2.1" @@ -7050,18 +7016,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.27" +version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +checksum = "43fa6694ed34d6e57407afbccdeecfa268c470a7d2a5b0cf49ce9fcc345afb90" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.27" +version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +checksum = "c640b22cd9817fae95be82f0d2f90b11f7605f6c319d16705c459b27ac2cbc26" dependencies = [ "proc-macro2", "quote", @@ -7222,6 +7188,12 @@ version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" +[[package]] +name = "zune-core" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "111f7d9820f05fd715df3144e254d6fc02ee4088b0644c0ffd0efc9e6d9d2773" + [[package]] name = "zune-inflate" version = "0.2.54" @@ -7237,7 +7209,16 @@ version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" dependencies = [ - "zune-core", + "zune-core 0.4.12", +] + +[[package]] +name = "zune-jpeg" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc6fb7703e32e9a07fb3f757360338b3a567a5054f21b5f52a666752e333d58e" +dependencies = [ + "zune-core 0.5.0", ] [[package]] From 72f47e5aff83c4aa7cedfc044e1523a2cca82f2b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 22 Nov 2025 10:04:31 +0100 Subject: [PATCH 0638/1117] addressing hack to fix compatibility with latest libdragon (#620) --- src/device/memory.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/device/memory.rs b/src/device/memory.rs index 167c342..fecc4a2 100644 --- a/src/device/memory.rs +++ b/src/device/memory.rs @@ -62,9 +62,14 @@ pub fn masked_write_64(dst: &mut u64, value: u64, mask: u64) { pub fn translate_address( device: &mut device::Device, - address: u64, + mut address: u64, access_type: AccessType, ) -> (u64, bool, bool) { + if (address & 0xFFFFFFFF00000000) == 0x9000000000000000 { + // this is a hack to support 64-bit addresses used by some homebrew + address |= 0xA0000000; + } + if (address & 0xc0000000) != 0x80000000 { return device::tlb::get_physical_address(device, address, access_type); } From 162a6df56d1263ef11fa93e0314356d2e544b30d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 22 Nov 2025 13:40:26 +0100 Subject: [PATCH 0639/1117] move if statement for better performance --- src/device/memory.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/device/memory.rs b/src/device/memory.rs index fecc4a2..5f74ef8 100644 --- a/src/device/memory.rs +++ b/src/device/memory.rs @@ -65,13 +65,13 @@ pub fn translate_address( mut address: u64, access_type: AccessType, ) -> (u64, bool, bool) { - if (address & 0xFFFFFFFF00000000) == 0x9000000000000000 { - // this is a hack to support 64-bit addresses used by some homebrew - address |= 0xA0000000; - } - if (address & 0xc0000000) != 0x80000000 { - return device::tlb::get_physical_address(device, address, access_type); + if (address & 0xFFFFFFFF00000000) == 0x9000000000000000 { + // this is a hack to support 64-bit addresses used by some homebrew + address |= 0xA0000000; + } else { + return device::tlb::get_physical_address(device, address, access_type); + } } (address & 0x1FFFFFFF, address & 0x20000000 == 0, false) } From 1141095b65bee22b37cb85f3ee623c8e440dc706 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 22 Nov 2025 14:14:22 +0100 Subject: [PATCH 0640/1117] some code cleanup --- src/device.rs | 1 - src/device/controller/vru.rs | 1 + src/device/pif.rs | 2 -- src/device/vi.rs | 8 +++----- src/ui/video.rs | 4 ++-- src/ui/vru.rs | 3 ++- 6 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/device.rs b/src/device.rs index 4290f56..34ba6e5 100644 --- a/src/device.rs +++ b/src/device.rs @@ -322,7 +322,6 @@ impl Device { pif: pif::Pif { rom: [0; 1984], ram: [0; 64], - input_gathered: false, channels: [pif::PifChannel { tx: None, tx_buf: None, diff --git a/src/device/controller/vru.rs b/src/device/controller/vru.rs index aad48db..4026350 100644 --- a/src/device/controller/vru.rs +++ b/src/device/controller/vru.rs @@ -192,6 +192,7 @@ pub fn process(device: &mut device::Device, channel: usize) { &device.vru.words, device.vru_window.window_notifier.as_ref().unwrap(), device.vru_window.word_receiver.as_mut().unwrap(), + device.vi.frame_time, ) } else { 0x7FFF diff --git a/src/device/pif.rs b/src/device/pif.rs index b24711c..2022193 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -8,7 +8,6 @@ pub struct Pif { #[serde(with = "serde_big_array::BigArray")] pub ram: [u8; 64], pub channels: [PifChannel; 5], - pub input_gathered: bool, } #[derive(Copy, Clone, serde::Serialize, serde::Deserialize)] @@ -97,7 +96,6 @@ fn process_channel(device: &mut device::Device, channel: usize) -> usize { pub fn update_pif_ram(device: &mut device::Device) -> u64 { unsafe { sdl3_sys::events::SDL_PumpEvents() }; - device.pif.input_gathered = true; let mut active_channels = 0; for k in 0..PIF_CHANNELS_COUNT { diff --git a/src/device/vi.rs b/src/device/vi.rs index 8110118..5fceb21 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -158,13 +158,11 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { device.vi.vi_counter += 1; if device.netplay.is_none() && paused { - ui::video::pause_loop(); - } else if !device.pif.input_gathered { - unsafe { sdl3_sys::events::SDL_PumpEvents() }; // in case the game isn't prompting for input - } else { - device.pif.input_gathered = false; + ui::video::pause_loop(device.vi.frame_time); } + unsafe { sdl3_sys::events::SDL_PumpEvents() }; // in case the game isn't prompting for input + /* let vis = if device.cart.pal { 50 } else { 60 }; if device.vi.vi_counter % vis == 0 { diff --git a/src/ui/video.rs b/src/ui/video.rs index 952449b..28e3660 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -133,11 +133,11 @@ pub fn load_state(device: &mut device::Device, rdp_state: *const u8) { } } -pub fn pause_loop() { +pub fn pause_loop(frame_time: f64) { let mut paused = true; let mut frame_advance = false; while paused && !frame_advance { - std::thread::sleep(std::time::Duration::from_secs_f64(1.0 / 60.0)); + std::thread::sleep(std::time::Duration::from_secs_f64(frame_time)); unsafe { sdl3_sys::events::SDL_PumpEvents() }; let callback = unsafe { rdp_check_callback() }; paused = callback.paused; diff --git a/src/ui/vru.rs b/src/ui/vru.rs index 50a93ce..457f83f 100644 --- a/src/ui/vru.rs +++ b/src/ui/vru.rs @@ -2,6 +2,7 @@ pub fn prompt_for_match( words: &[String], window_notifier: &tokio::sync::mpsc::Sender>>, word_index_receiver: &mut tokio::sync::mpsc::Receiver, + frame_time: f64, ) -> u16 { let mut dedup_words = words.to_owned(); dedup_words.sort(); @@ -10,7 +11,7 @@ pub fn prompt_for_match( let mut result = word_index_receiver.try_recv(); while result.is_err() { result = word_index_receiver.try_recv(); - std::thread::sleep(std::time::Duration::from_secs_f64(1.0 / 60.0)); + std::thread::sleep(std::time::Duration::from_secs_f64(frame_time)); unsafe { sdl3_sys::events::SDL_PumpEvents() }; // so the OS doesn't complain about the game window being frozen } for (i, v) in words.iter().enumerate() { From f116617ac37de70bd4cbd161874ae09a99f78394 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 22 Nov 2025 14:31:08 +0100 Subject: [PATCH 0641/1117] remove redundant SDL_PumpEvents --- src/device/pif.rs | 2 -- src/device/vi.rs | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/device/pif.rs b/src/device/pif.rs index 2022193..2881b57 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -95,8 +95,6 @@ fn process_channel(device: &mut device::Device, channel: usize) -> usize { } pub fn update_pif_ram(device: &mut device::Device) -> u64 { - unsafe { sdl3_sys::events::SDL_PumpEvents() }; - let mut active_channels = 0; for k in 0..PIF_CHANNELS_COUNT { active_channels += process_channel(device, k) diff --git a/src/device/vi.rs b/src/device/vi.rs index 5fceb21..7f68f52 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -161,7 +161,7 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { ui::video::pause_loop(device.vi.frame_time); } - unsafe { sdl3_sys::events::SDL_PumpEvents() }; // in case the game isn't prompting for input + unsafe { sdl3_sys::events::SDL_PumpEvents() }; /* let vis = if device.cart.pal { 50 } else { 60 }; From c08511adc542d6f44ea6372df76d8391c6f18b01 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Nov 2025 04:24:48 +0100 Subject: [PATCH 0642/1117] Bump actions/checkout from 5 to 6 (#622) Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 6 +++--- .github/workflows/lint.yml | 2 +- .github/workflows/sec.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 63d436d..a05aac0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,7 +29,7 @@ jobs: arch: linux-aarch64 llvm: ARM64 steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: submodules: recursive - uses: actions-rust-lang/setup-rust-toolchain@v1 @@ -83,7 +83,7 @@ jobs: # arch: windows-aarch64 # llvm: woa64 steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: submodules: recursive - uses: actions-rust-lang/setup-rust-toolchain@v1 @@ -138,7 +138,7 @@ jobs: - target: aarch64-apple-darwin arch: mac-aarch64 steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: submodules: recursive - uses: actions-rust-lang/setup-rust-toolchain@v1 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 663e046..8bde72e 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -16,7 +16,7 @@ jobs: lint-linux: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: submodules: recursive - uses: actions-rust-lang/setup-rust-toolchain@v1 diff --git a/.github/workflows/sec.yml b/.github/workflows/sec.yml index 054330e..8c5d1a6 100644 --- a/.github/workflows/sec.yml +++ b/.github/workflows/sec.yml @@ -10,7 +10,7 @@ jobs: checks: write runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: submodules: recursive - uses: rustsec/audit-check@v2 From 10af59822362bbe513932fa44d6dce3f8423553d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 26 Nov 2025 16:48:39 +0100 Subject: [PATCH 0643/1117] cargo update --- Cargo.lock | 47 +++++++++++++++++++++++------------------------ Cargo.toml | 2 +- 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9daacba..f222523 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -565,9 +565,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.5.7" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce" +checksum = "d1da5ab77c1437701eeff7c88d968729e7766172279eab0676857b3d63af7a6f" dependencies = [ "cfg_aliases", ] @@ -2188,12 +2188,11 @@ dependencies = [ [[package]] name = "http" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ "bytes", - "fnv", "itoa", ] @@ -4453,9 +4452,9 @@ dependencies = [ [[package]] name = "rfd" -version = "0.15.4" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2bee61e6cffa4635c72d7d81a84294e28f0930db0ddcb0f66d10244674ebed" +checksum = "a15ad77d9e70a92437d8f74c35d99b4e4691128df018833e99f90bcd36152672" dependencies = [ "ashpd", "block2 0.6.2", @@ -4472,7 +4471,7 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -4842,9 +4841,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.6" +version = "1.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad" dependencies = [ "libc", ] @@ -5223,9 +5222,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.110" +version = "2.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a99801b5bd34ede4cf3fc688c5919368fea4e4814a4664359503e6015b280aea" +checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" dependencies = [ "proc-macro2", "quote", @@ -5579,9 +5578,9 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.6" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +checksum = "9cf146f99d442e8e68e585f5d798ccd3cad9a7835b917e09728880a862706456" dependencies = [ "bitflags 2.10.0", "bytes", @@ -5609,9 +5608,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "8eb41cbdb933e23b7929f47bb577710643157d7602ef3a2ebd3902b13ac5eda6" dependencies = [ "log", "pin-project-lite", @@ -5621,9 +5620,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", @@ -5632,9 +5631,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c" dependencies = [ "once_cell", ] @@ -7016,18 +7015,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.28" +version = "0.8.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43fa6694ed34d6e57407afbccdeecfa268c470a7d2a5b0cf49ce9fcc345afb90" +checksum = "4ea879c944afe8a2b25fef16bb4ba234f47c694565e97383b36f3a878219065c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.28" +version = "0.8.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c640b22cd9817fae95be82f0d2f90b11f7605f6c319d16705c459b27ac2cbc26" +checksum = "cf955aa904d6040f70dc8e9384444cb1030aed272ba3cb09bbc4ab9e7c1f34f5" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index da2f250..9c2de86 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ open = "5.3" sha2 = "0.10" sdl3-sys = { version = "0.5", features = ["build-from-source-static"] } sdl3-ttf-sys = { version = "0.2", features = ["build-from-source-static", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } -rfd = { version = "0.15", default-features = false, features = ["xdg-portal", "tokio"] } +rfd = { version = "0.16", default-features = false, features = ["xdg-portal", "tokio", "wayland"] } tokio = {version = "1.46", features = ["rt-multi-thread", "macros"] } spin_sleep = "1.3" encoding_rs = "0.8" From ea5bbfb2186310eb8a84845410c9b4e302565222 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 6 Dec 2025 13:42:10 +0100 Subject: [PATCH 0644/1117] only update controller assignment after user input (#629) --- src/ui/gui.rs | 12 ++++++++++-- src/ui/gui/appwindow.slint | 1 + src/ui/gui/controller_page.slint | 2 ++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index ca45260..2cbf491 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -191,6 +191,7 @@ fn controller_window( std::rc::Rc::new(controllers); app.set_controller_names(slint::ModelRc::from(controller_names_model)); + let controller_changed = slint::VecModel::default(); let selected_controllers = slint::VecModel::default(); for selected in config.input.controller_assignment.iter() { let mut found = false; @@ -204,11 +205,16 @@ fn controller_window( if !found { selected_controllers.push(0); } + controller_changed.push(false); } let selected_controllers_model: std::rc::Rc> = std::rc::Rc::new(selected_controllers); app.set_selected_controller(slint::ModelRc::from(selected_controllers_model)); + let controller_changed_model: std::rc::Rc> = + std::rc::Rc::new(controller_changed); + app.set_controller_changed(slint::ModelRc::from(controller_changed_model)); + let weak_app = app.as_weak(); app.on_input_profile_button_clicked(move || { let dialog = InputProfileDialog::new().unwrap(); @@ -269,8 +275,10 @@ pub fn save_settings(app: &AppWindow, controller_paths: &[Option]) { } for (i, selected_controller) in app.get_selected_controller().iter().enumerate() { - config.input.controller_assignment[i] = - controller_paths[selected_controller as usize].clone(); + if app.get_controller_changed().row_data(i).unwrap_or(false) { + config.input.controller_assignment[i] = + controller_paths[selected_controller as usize].clone(); + } } } diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index b0e5bf1..da387b2 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -47,6 +47,7 @@ export component AppWindow inherits Window { in-out property rom_dir <=> SettingsData.rom_dir; in-out property emulate_vru <=> ControllerData.emulate_vru; in-out property controller_enabled <=> ControllerData.controller_enabled; + in-out property controller_changed <=> ControllerData.controller_changed; in-out property transferpak <=> ControllerData.transferpak; in-out property selected_profile_binding <=> ControllerData.selected_profile_binding; in-out property input_profiles <=> ControllerData.input_profiles; diff --git a/src/ui/gui/controller_page.slint b/src/ui/gui/controller_page.slint index 3e26dff..47eb3f1 100644 --- a/src/ui/gui/controller_page.slint +++ b/src/ui/gui/controller_page.slint @@ -13,6 +13,7 @@ export global ControllerData { in-out property <[string]> input_profiles; in-out property <[string]> controller_names; in-out property <[int]> selected_controller; + in-out property <[bool]> controller_changed; in-out property blank_profiles; } @@ -114,6 +115,7 @@ export component ControllerConfig inherits Page { current-index: ControllerData.selected_controller[player]; selected => { ControllerData.selected_controller[player] = self.current-index; + ControllerData.controller_changed[player] = true; } } } From 6f8433138d8af85e7dd7ac5c9dfea89204779f8f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 10 Dec 2025 10:00:42 +0100 Subject: [PATCH 0645/1117] clippy fixes (#632) * clippy fixes * fix netplay browser --- src/device.rs | 3 +-- src/device/cart/rom.rs | 3 +-- src/device/controller.rs | 14 ++++++---- src/device/controller/rumble.rs | 9 ++++--- src/device/controller/vru.rs | 4 +-- src/device/pif.rs | 24 ++++++++--------- src/device/vi.rs | 8 +++--- src/netplay.rs | 7 +++-- src/ui/netplay.rs | 46 +++++++++++++++++---------------- 9 files changed, 62 insertions(+), 56 deletions(-) diff --git a/src/device.rs b/src/device.rs index 34ba6e5..b428126 100644 --- a/src/device.rs +++ b/src/device.rs @@ -93,8 +93,7 @@ fn set_rng() -> rand_chacha::ChaCha8Rng { fn init_rng(device: &mut Device) { let mut rng_seed = set_rng().next_u64(); - if device.netplay.is_some() { - let netplay = device.netplay.as_mut().unwrap(); + if let Some(netplay) = &mut device.netplay { if netplay.player_number == 0 { netplay::send_rng(netplay, rng_seed); } else { diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index b7b8d5e..88b5456 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -135,8 +135,7 @@ pub fn dma_write( pub fn init(device: &mut device::Device, rom_file: Vec) { let now: chrono::DateTime = chrono::Local::now(); device.cart.rtc_timestamp = now.naive_local().and_utc().timestamp(); - if device.netplay.is_some() { - let netplay = device.netplay.as_mut().unwrap(); + if let Some(netplay) = &mut device.netplay { if netplay.player_number == 0 { netplay::send_rtc(netplay, device.cart.rtc_timestamp); } else { diff --git a/src/device/controller.rs b/src/device/controller.rs index ea29ae6..c2d6a3b 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -59,9 +59,11 @@ pub fn process(device: &mut device::Device, channel: usize) { let input = if device.netplay.is_none() { ui::input::get(&device.ui, channel) } else { - if device.netplay.as_ref().unwrap().player_number as usize == channel { + if let Some(netplay) = &mut device.netplay + && netplay.player_number as usize == channel + { let local_input = ui::input::get(&device.ui, 0); - netplay::send_input(device.netplay.as_ref().unwrap(), local_input); + netplay::send_input(netplay, local_input); } netplay::get_input(device, channel) @@ -162,10 +164,12 @@ pub fn pak_switch_event(device: &mut device::Device) { for (i, channel) in device.pif.channels.iter_mut().enumerate() { if channel.change_pak != PakType::None { //stop rumble if it is on - if device.netplay.is_none() { + if let Some(netplay) = &device.netplay { + if netplay.player_number as usize == i { + device::ui::input::set_rumble(&device.ui, 0, 0); + } + } else { device::ui::input::set_rumble(&device.ui, i, 0); - } else if device.netplay.as_ref().unwrap().player_number as usize == i { - device::ui::input::set_rumble(&device.ui, 0, 0); } let new_pak_type = match channel.change_pak { diff --git a/src/device/controller/rumble.rs b/src/device/controller/rumble.rs index 2109cbb..e3bc83c 100644 --- a/src/device/controller/rumble.rs +++ b/src/device/controller/rumble.rs @@ -15,10 +15,13 @@ pub fn read(device: &mut device::Device, _channel: usize, address: u16, data: us pub fn write(device: &mut device::Device, channel: usize, address: u16, data: usize, size: usize) { if address == 0xc000 { let rumble = device.pif.ram[data + size - 1]; - if device.netplay.is_none() { + + if let Some(netplay) = &device.netplay { + if netplay.player_number as usize == channel { + device::ui::input::set_rumble(&device.ui, 0, rumble); + } + } else { device::ui::input::set_rumble(&device.ui, channel, rumble); - } else if device.netplay.as_ref().unwrap().player_number as usize == channel { - device::ui::input::set_rumble(&device.ui, 0, rumble); } } } diff --git a/src/device/controller/vru.rs b/src/device/controller/vru.rs index 4026350..468dc6c 100644 --- a/src/device/controller/vru.rs +++ b/src/device/controller/vru.rs @@ -187,10 +187,10 @@ pub fn process(device: &mut device::Device, channel: usize) { device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] = 0; } JCMD_VRU_READ => { - let index = if device.vru_window.window_notifier.is_some() { + let index = if let Some(window_notifier) = &device.vru_window.window_notifier { ui::vru::prompt_for_match( &device.vru.words, - device.vru_window.window_notifier.as_ref().unwrap(), + window_notifier, device.vru_window.word_receiver.as_mut().unwrap(), device.vi.frame_time, ) diff --git a/src/device/pif.rs b/src/device/pif.rs index 2881b57..8496c66 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -218,11 +218,11 @@ pub fn process_ram(device: &mut device::Device) { pub fn connect_pif_channels(device: &mut device::Device) { for i in 0..4 { - if device.netplay.is_none() { - if device.ui.config.input.controller_enabled[i] { + if let Some(netplay) = &device.netplay { + if netplay.player_data[i].reg_id != 0 { device.pif.channels[i].process = Some(device::controller::process); } - } else if device.netplay.as_ref().unwrap().player_data[i].reg_id != 0 { + } else if device.ui.config.input.controller_enabled[i] { device.pif.channels[i].process = Some(device::controller::process); } } @@ -268,16 +268,16 @@ pub fn init(device: &mut device::Device) { connect_pif_channels(device); for i in 0..4 { - if device.netplay.is_none() { - if device.ui.config.input.controller_enabled[i] { - if device.transferpaks[i].cart.rom.is_empty() { - device.pif.channels[i].pak_handler = Some(default_handler); - } else { - device.pif.channels[i].pak_handler = Some(tpak_handler); - } + if let Some(netplay) = &device.netplay { + if netplay.player_data[i].reg_id != 0 { + device.pif.channels[i].pak_handler = Some(default_handler); + } + } else if device.ui.config.input.controller_enabled[i] { + if device.transferpaks[i].cart.rom.is_empty() { + device.pif.channels[i].pak_handler = Some(default_handler); + } else { + device.pif.channels[i].pak_handler = Some(tpak_handler); } - } else if device.netplay.as_ref().unwrap().player_data[i].reg_id != 0 { - device.pif.channels[i].pak_handler = Some(default_handler); } } if device.ui.config.input.emulate_vru && device.netplay.is_none() { diff --git a/src/device/vi.rs b/src/device/vi.rs index 7f68f52..ed28b51 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -142,11 +142,11 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { let (mut speed_limiter_toggled, paused) = ui::video::check_callback(device); - if device.netplay.is_some() { - netplay::send_sync_check(device); - if device.vi.enable_speed_limiter == device.netplay.as_ref().unwrap().fast_forward { + if let Some(netplay) = &mut device.netplay { + netplay::send_sync_check(netplay, device.cpu.cop0.regs.as_ref()); + if device.vi.enable_speed_limiter == netplay.fast_forward { speed_limiter_toggled = true; - device.vi.enable_speed_limiter = !device.netplay.as_ref().unwrap().fast_forward; + device.vi.enable_speed_limiter = !netplay.fast_forward; } } diff --git a/src/netplay.rs b/src/netplay.rs index 753d571..589efe2 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -103,14 +103,13 @@ pub fn receive_save(netplay: &mut Netplay, save_type: &str, save_data: &mut Vec< *save_data = response; } -pub fn send_sync_check(device: &mut device::Device) { - let netplay = device.netplay.as_mut().unwrap(); +pub fn send_sync_check(netplay: &mut Netplay, regs: &[u64]) { if netplay.vi_counter.is_multiple_of(600) { let mut request: Vec = [UDP_SYNC_DATA].to_vec(); request.extend_from_slice(&(netplay.vi_counter).to_be_bytes()); - for i in 0..device::cop0::COP0_REGS_COUNT as usize { - request.extend_from_slice(&(device.cpu.cop0.regs[i] as u32).to_be_bytes()); + for item in regs.iter() { + request.extend_from_slice(&(*item as u32).to_be_bytes()); } netplay.udp_socket.send(&request).unwrap(); diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 5c08867..01e9e01 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -139,32 +139,34 @@ fn populate_server_names(weak: slin } } + let mut public_servers: Vec = vec![]; let response = task.await; if let Ok(response) = response - && let Ok(servers) = response.json::>().await + && let Ok(mut servers) = response.json::>().await { - weak.upgrade_in_event_loop(move |handle| { - let server_names: slint::VecModel = slint::VecModel::default(); - let server_urls: slint::VecModel = slint::VecModel::default(); - for local_server in local_servers { - server_names.push(local_server.0.into()); - server_urls.push(local_server.1.into()); - } - for server in servers { - server_names.push(server.clone().into()); - server_urls.push(format!("dispatcher:{server}").into()); - } - server_names.push("Custom".into()); - handle.refresh_sessions(); - let server_names_model: std::rc::Rc> = - std::rc::Rc::new(server_names); - let server_urls_model: std::rc::Rc> = - std::rc::Rc::new(server_urls); - handle.set_server_names(slint::ModelRc::from(server_names_model)); - handle.set_server_urls(slint::ModelRc::from(server_urls_model)); - }) - .unwrap(); + public_servers.append(&mut servers); } + weak.upgrade_in_event_loop(move |handle| { + let server_names: slint::VecModel = slint::VecModel::default(); + let server_urls: slint::VecModel = slint::VecModel::default(); + for local_server in local_servers { + server_names.push(local_server.0.into()); + server_urls.push(local_server.1.into()); + } + for server in public_servers { + server_names.push(server.clone().into()); + server_urls.push(format!("dispatcher:{server}").into()); + } + server_names.push("Custom".into()); + handle.refresh_sessions(); + let server_names_model: std::rc::Rc> = + std::rc::Rc::new(server_names); + let server_urls_model: std::rc::Rc> = + std::rc::Rc::new(server_urls); + handle.set_server_names(slint::ModelRc::from(server_names_model)); + handle.set_server_urls(slint::ModelRc::from(server_urls_model)); + }) + .unwrap(); }); } From 0aa5c3e63aaccc303bb6c25810995e1a2dde691e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 10 Dec 2025 12:35:22 +0100 Subject: [PATCH 0646/1117] cleanup variable --- src/ui/netplay.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 01e9e01..b43150e 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -139,13 +139,14 @@ fn populate_server_names(weak: slin } } - let mut public_servers: Vec = vec![]; let response = task.await; - if let Ok(response) = response - && let Ok(mut servers) = response.json::>().await + let public_servers = if let Ok(response) = response + && let Ok(servers) = response.json::>().await { - public_servers.append(&mut servers); - } + servers + } else { + vec![] + }; weak.upgrade_in_event_loop(move |handle| { let server_names: slint::VecModel = slint::VecModel::default(); let server_urls: slint::VecModel = slint::VecModel::default(); From c6fcfddf8cef3dc333e0db27c3833d1b8d30e8b6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 10 Dec 2025 15:12:56 +0100 Subject: [PATCH 0647/1117] some cleanup --- src/device/controller.rs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/device/controller.rs b/src/device/controller.rs index c2d6a3b..3b279ff 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -56,17 +56,14 @@ pub fn process(device: &mut device::Device, channel: usize) { } JCMD_CONTROLLER_READ => { let offset = device.pif.channels[channel].rx_buf.unwrap(); - let input = if device.netplay.is_none() { - ui::input::get(&device.ui, channel) - } else { - if let Some(netplay) = &mut device.netplay - && netplay.player_number as usize == channel - { + let input = if let Some(netplay) = &mut device.netplay { + if netplay.player_number as usize == channel { let local_input = ui::input::get(&device.ui, 0); netplay::send_input(netplay, local_input); } - netplay::get_input(device, channel) + } else { + ui::input::get(&device.ui, channel) }; device.pif.ram[offset..offset + 4].copy_from_slice(&input.data.to_ne_bytes()); From d8c6669da1df53f7dcc039fcc1625a1fcf053cde Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 11 Dec 2025 17:46:50 +0100 Subject: [PATCH 0648/1117] Update to Rust 1.92.0 (#634) --- Cargo.lock | 187 +++++++++++++++++++++++--------------------- Cargo.toml | 4 +- rust-toolchain.toml | 2 +- 3 files changed, 102 insertions(+), 91 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f222523..40fc6c3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -690,9 +690,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.47" +version = "1.2.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd405d82c84ff7f35739f175f67d8b9fb7687a0e84ccdc78bd3568839827cf07" +checksum = "90583009037521a116abf44494efecd645ba48b6622457080f080b85544e2215" dependencies = [ "find-msvc-tools", "jobserver", @@ -917,6 +917,15 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +[[package]] +name = "convert_case" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "copypasta" version = "0.10.2" @@ -1040,9 +1049,9 @@ dependencies = [ [[package]] name = "crc" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" dependencies = [ "crc-catalog", ] @@ -1193,21 +1202,23 @@ dependencies = [ [[package]] name = "derive_more" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +checksum = "10b768e943bed7bf2cab53df09f4bc34bfd217cdb57d971e769874c9a6710618" dependencies = [ "derive_more-impl", ] [[package]] name = "derive_more-impl" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +checksum = "6d286bfdaf75e988b4a78e013ecd79c581e06399ab53fbacd2d916c2f904f30b" dependencies = [ + "convert_case", "proc-macro2", "quote", + "rustc_version", "syn", "unicode-xid", ] @@ -1407,9 +1418,9 @@ dependencies = [ [[package]] name = "endi" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" +checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099" [[package]] name = "enumflags2" @@ -1887,9 +1898,9 @@ dependencies = [ [[package]] name = "gif" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f954a9e9159ec994f73a30a12b96a702dde78f5547bcb561174597924f7d4162" +checksum = "f5df2ba84018d80c213569363bdcd0c64e6933c67fe4c1d60ecf822971a3c35e" dependencies = [ "color_quant", "weezl", @@ -2266,9 +2277,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e9a2a24dc5c6821e71a7030e1e14b7b632acac55c40e9d2e082c621261bb56" +checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" dependencies = [ "base64", "bytes", @@ -2562,9 +2573,9 @@ checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" dependencies = [ "icu_collections", "icu_locale_core", @@ -2576,9 +2587,9 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[package]] name = "icu_provider" @@ -2626,7 +2637,7 @@ dependencies = [ "byteorder-lite", "color_quant", "exr", - "gif 0.14.0", + "gif 0.14.1", "image-webp", "moxcms", "num-traits", @@ -2637,7 +2648,7 @@ dependencies = [ "rgb", "tiff", "zune-core 0.5.0", - "zune-jpeg 0.5.5", + "zune-jpeg 0.5.6", ] [[package]] @@ -2830,9 +2841,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.82" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" +checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" dependencies = [ "once_cell", "wasm-bindgen", @@ -2891,9 +2902,9 @@ checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" -version = "0.2.177" +version = "0.2.178" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" [[package]] name = "libfuzzer-sys" @@ -2954,9 +2965,9 @@ dependencies = [ [[package]] name = "libz-rs-sys" -version = "0.5.2" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "840db8cf39d9ec4dd794376f38acc40d0fc65eec2a8f484f7fd375b84602becd" +checksum = "15413ef615ad868d4d65dce091cb233b229419c7c0c4bcaa746c0901c49ff39c" dependencies = [ "zlib-rs", ] @@ -3026,9 +3037,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.28" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "loop9" @@ -3098,9 +3109,9 @@ dependencies = [ [[package]] name = "lzma-rust2" -version = "0.15.1" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bd57dc1513725e598b9609a9505d6fe28ee280861e5b4d792b3db9d00b1a315" +checksum = "48172246aa7c3ea28e423295dd1ca2589a24617cc4e588bb8cfe177cb2c54d95" [[package]] name = "maybe-rayon" @@ -3169,9 +3180,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", "wasi", @@ -3180,9 +3191,9 @@ dependencies = [ [[package]] name = "moxcms" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fbdd3d7436f8b5e892b8b7ea114271ff0fa00bc5acae845d53b07d498616ef6" +checksum = "80986bbbcf925ebd3be54c26613d861255284584501595cf418320c078945608" dependencies = [ "num-traits", "pxfm", @@ -4081,9 +4092,9 @@ dependencies = [ [[package]] name = "pxfm" -version = "0.1.25" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3cbdf373972bf78df4d3b518d07003938e2c7d1fb5891e55f9cb6df57009d84" +checksum = "7186d3822593aa4393561d186d1393b3923e9d6163d3fbfd6e825e3e6cf3e6a8" dependencies = [ "num-traits", ] @@ -4394,9 +4405,9 @@ checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "reqwest" -version = "0.12.24" +version = "0.12.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" +checksum = "b6eff9328d40131d43bd911d42d79eb6a47312002a4daefc9e37f17e74a7701a" dependencies = [ "base64", "bytes", @@ -4584,9 +4595,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a" +checksum = "708c0f9d5f54ba0272468c1d306a52c495b31fa155e91bc25371e6df7996908c" dependencies = [ "web-time", "zeroize", @@ -4675,15 +4686,15 @@ dependencies = [ [[package]] name = "sdl3-src" -version = "3.2.26" +version = "3.2.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "043a9fa3bccac487a428f8883ef5227edf7280da52b0347897d5c9f82b7e3e52" +checksum = "c77e0ceda907b4b335bc34191538ba538b30bd30a90daedc575f6e347c4605c2" [[package]] name = "sdl3-sys" -version = "0.5.10+SDL3-3.2.26" +version = "0.5.11+SDL3-3.2.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c531aa18059783450bcddc82a6effc48df5f173bb46142eb421ff2cfccf53984" +checksum = "73979b5f78819ede7fb6b7534161fe70f3d7a56cc09e7e29c7b58c2b525abfa6" dependencies = [ "cc", "cmake", @@ -4801,13 +4812,13 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.19.3" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "724c58ef9fa6b24f223be04638e2073411dd5da79e7b76c21bd93de8dbd753e0" +checksum = "611081ec4fc67633b979fc0c24385de90fa60acd18126d796c8758a24294a950" dependencies = [ "crc32fast", "js-sys", - "lzma-rust2 0.15.1", + "lzma-rust2 0.15.4", "wasm-bindgen", ] @@ -4850,9 +4861,9 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" [[package]] name = "simd_helpers" @@ -4972,9 +4983,9 @@ dependencies = [ [[package]] name = "slotmap" -version = "1.0.7" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038" dependencies = [ "version_check", ] @@ -5535,9 +5546,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.23.7" +version = "0.23.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +checksum = "5d7cbc3b4b49633d57a0509303158ca50de80ae32c265093b24c414705807832" dependencies = [ "indexmap", "toml_datetime", @@ -5578,9 +5589,9 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf146f99d442e8e68e585f5d798ccd3cad9a7835b917e09728880a862706456" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ "bitflags 2.10.0", "bytes", @@ -5608,9 +5619,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.42" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eb41cbdb933e23b7929f47bb577710643157d7602ef3a2ebd3902b13ac5eda6" +checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647" dependencies = [ "log", "pin-project-lite", @@ -5678,9 +5689,9 @@ dependencies = [ [[package]] name = "typed-index-collections" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fd393dbd1e7b23e0cab7396570309b4068aa504e9dac2cd41d827583b4e9ab7" +checksum = "5318ee4ce62a4e948a33915574021a7a953d83e84fba6e25c72ffcfd7dad35ff" dependencies = [ "bincode", "serde", @@ -5753,9 +5764,9 @@ checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" [[package]] name = "unicode-script" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f" +checksum = "383ad40bb927465ec0ce7720e033cb4ca06912855fc35db31b5755d0de75b1ee" [[package]] name = "unicode-segmentation" @@ -5852,12 +5863,12 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.18.1" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" dependencies = [ "js-sys", - "serde", + "serde_core", "wasm-bindgen", ] @@ -5975,9 +5986,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" +checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" dependencies = [ "cfg-if", "once_cell", @@ -5988,9 +5999,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.55" +version = "0.4.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" +checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" dependencies = [ "cfg-if", "js-sys", @@ -6001,9 +6012,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" +checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6011,9 +6022,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" +checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" dependencies = [ "bumpalo", "proc-macro2", @@ -6024,9 +6035,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" +checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" dependencies = [ "unicode-ident", ] @@ -6168,9 +6179,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.82" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" +checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" dependencies = [ "js-sys", "wasm-bindgen", @@ -6757,18 +6768,18 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.13" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" dependencies = [ "memchr", ] [[package]] name = "winresource" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1ef04dd590e94ff7431a8eda99d5ca659e688d60e930bd0a330062acea4608f" +checksum = "6b021990998587d4438bb672b5c5f034cbc927f51b45e3807ab7323645ef4899" dependencies = [ "toml", "version_check", @@ -7015,18 +7026,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.30" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea879c944afe8a2b25fef16bb4ba234f47c694565e97383b36f3a878219065c" +checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.30" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf955aa904d6040f70dc8e9384444cb1030aed272ba3cb09bbc4ab9e7c1f34f5" +checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" dependencies = [ "proc-macro2", "quote", @@ -7137,9 +7148,9 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.5.2" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f06ae92f42f5e5c42443fd094f245eb656abf56dd7cce9b8b263236565e00f2" +checksum = "51f936044d677be1a1168fae1d03b583a285a5dd9d8cbf7b24c23aa1fc775235" [[package]] name = "zopfli" @@ -7213,9 +7224,9 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6fb7703e32e9a07fb3f757360338b3a567a5054f21b5f52a666752e333d58e" +checksum = "f520eebad972262a1dde0ec455bce4f8b298b1e5154513de58c114c4c54303e8" dependencies = [ "zune-core 0.5.0", ] diff --git a/Cargo.toml b/Cargo.toml index 9c2de86..19a4025 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "gopher64" version = "1.1.11" edition = "2024" -rust-version = "1.91.1" +rust-version = "1.92.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -10,7 +10,7 @@ rust-version = "1.91.1" dirs = "6.0" zip = "6.0" governor = "0.10" -sevenz-rust2 = { version = "0.19", default-features = false } +sevenz-rust2 = { version = "0.20", default-features = false } chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" diff --git a/rust-toolchain.toml b/rust-toolchain.toml index d6d3381..f19782d 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.91.1" +channel = "1.92.0" From 413da0178ecb061af4d2b5e887cc3f1382a4c6f1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 11 Dec 2025 17:57:59 +0100 Subject: [PATCH 0649/1117] update parallel rdp --- parallel-rdp/parallel-rdp-standalone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parallel-rdp/parallel-rdp-standalone b/parallel-rdp/parallel-rdp-standalone index 08b0482..6359a09 160000 --- a/parallel-rdp/parallel-rdp-standalone +++ b/parallel-rdp/parallel-rdp-standalone @@ -1 +1 @@ -Subproject commit 08b048288a68f40d00dad255f9bf4e3c1935b984 +Subproject commit 6359a09f3e749d31b71e706a904104eb48caceb5 From e7a21171f4476801a03bbbd2040f80d6c4214751 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 11 Dec 2025 21:48:28 +0100 Subject: [PATCH 0650/1117] fix windows build (#636) --- parallel-rdp/parallel-rdp-standalone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parallel-rdp/parallel-rdp-standalone b/parallel-rdp/parallel-rdp-standalone index 6359a09..6cbce40 160000 --- a/parallel-rdp/parallel-rdp-standalone +++ b/parallel-rdp/parallel-rdp-standalone @@ -1 +1 @@ -Subproject commit 6359a09f3e749d31b71e706a904104eb48caceb5 +Subproject commit 6cbce40582a0cc1c7460edcda863aa5bd42049d3 From 144e31c7fc304b738bb27af1cc4d27ea9b8f92a0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 11 Dec 2025 22:08:08 +0100 Subject: [PATCH 0651/1117] bump to 1.1.12 --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 40fc6c3..56a2b62 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2003,7 +2003,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.11" +version = "1.1.12" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index 19a4025..07193b9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.11" +version = "1.1.12" edition = "2024" rust-version = "1.92.0" From 38a5079acf08689f3d9b66caf223c4afcff585c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 06:36:17 +0100 Subject: [PATCH 0652/1117] Bump actions/upload-artifact from 5 to 6 (#641) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a05aac0..54b3247 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -63,7 +63,7 @@ jobs: env: NETPLAY_ID: ${{ secrets.NETPLAY_ID }} - name: Upload file - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: gopher64-${{ matrix.arch }} path: output/gopher64-${{ matrix.arch }} @@ -110,7 +110,7 @@ jobs: NETPLAY_ID: ${{ secrets.NETPLAY_ID }} - name: Upload unsigned artifact id: upload-unsigned-artifact - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: gopher64-${{ matrix.arch }} path: output/gopher64-${{ matrix.arch }}.exe @@ -154,7 +154,7 @@ jobs: AR: ar NETPLAY_ID: ${{ secrets.NETPLAY_ID }} - name: Upload file - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: gopher64-${{ matrix.arch }} path: output/gopher64-${{ matrix.arch }} From 05be960358df4adb4e95c93aa85d55fadd041eb8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 21 Dec 2025 16:23:23 +0100 Subject: [PATCH 0653/1117] cargo update --- Cargo.lock | 227 +++++++++++++++++++---------------------------------- Cargo.toml | 2 +- 2 files changed, 83 insertions(+), 146 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 56a2b62..4f25269 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -59,9 +59,9 @@ dependencies = [ [[package]] name = "aligned" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "377e4c0ba83e4431b10df45c1d4666f178ea9c552cac93e60c3a88bf32785923" +checksum = "ee4508988c62edf04abd8d92897fca0c2995d907ce1dfeaf369dac3716a40685" dependencies = [ "as-slice", ] @@ -580,9 +580,9 @@ checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64" [[package]] name = "bumpalo" -version = "3.19.0" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" [[package]] name = "by_address" @@ -690,9 +690,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.49" +version = "1.2.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90583009037521a116abf44494efecd645ba48b6622457080f080b85544e2215" +checksum = "9f50d563227a1c37cc0a263f64eca3334388c01c5e4c4861a9def205c614383c" dependencies = [ "find-msvc-tools", "jobserver", @@ -827,9 +827,9 @@ checksum = "cbd0f76e066e64fdc5631e3bb46381254deab9ef1158292f27c8c57e3bf3fe59" [[package]] name = "cmake" -version = "0.1.54" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" +checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" dependencies = [ "cc", ] @@ -950,16 +950,6 @@ dependencies = [ "libc", ] -[[package]] -name = "core-foundation" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -973,21 +963,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ "bitflags 1.3.2", - "core-foundation 0.9.4", - "core-graphics-types 0.1.3", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" -dependencies = [ - "bitflags 2.10.0", - "core-foundation 0.10.1", - "core-graphics-types 0.2.0", + "core-foundation", + "core-graphics-types", "foreign-types", "libc", ] @@ -999,18 +976,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" dependencies = [ "bitflags 1.3.2", - "core-foundation 0.9.4", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" -dependencies = [ - "bitflags 2.10.0", - "core-foundation 0.10.1", + "core-foundation", "libc", ] @@ -1049,9 +1015,9 @@ dependencies = [ [[package]] name = "crc" -version = "3.4.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" dependencies = [ "crc-catalog", ] @@ -1316,19 +1282,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" -[[package]] -name = "drm" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98888c4bbd601524c11a7ed63f814b8825f420514f78e96f752c437ae9cbb5d1" -dependencies = [ - "bitflags 2.10.0", - "bytemuck", - "drm-ffi 0.8.0", - "drm-fourcc", - "rustix 0.38.44", -] - [[package]] name = "drm" version = "0.14.1" @@ -1337,29 +1290,19 @@ checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" dependencies = [ "bitflags 2.10.0", "bytemuck", - "drm-ffi 0.9.0", + "drm-ffi", "drm-fourcc", "libc", "rustix 0.38.44", ] -[[package]] -name = "drm-ffi" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97c98727e48b7ccb4f4aea8cfe881e5b07f702d17b7875991881b41af7278d53" -dependencies = [ - "drm-sys 0.7.0", - "rustix 0.38.44", -] - [[package]] name = "drm-ffi" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8e41459d99a9b529845f6d2c909eb9adf3b6d2f82635ae40be8de0601726e8b" dependencies = [ - "drm-sys 0.8.0", + "drm-sys", "rustix 0.38.44", ] @@ -1369,16 +1312,6 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" -[[package]] -name = "drm-sys" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd39dde40b6e196c2e8763f23d119ddb1a8714534bf7d77fa97a65b0feda3986" -dependencies = [ - "libc", - "linux-raw-sys 0.6.5", -] - [[package]] name = "drm-sys" version = "0.8.0" @@ -2041,9 +1974,9 @@ dependencies = [ [[package]] name = "governor" -version = "0.10.2" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e23d5986fd4364c2fb7498523540618b4b8d92eec6c36a02e565f66748e2f79" +checksum = "9efcab3c1958580ff1f25a2a41be1668f7603d849bb63af523b208a3cc1223b8" dependencies = [ "cfg-if", "dashmap", @@ -2306,7 +2239,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8fd06c00fbdac3dd490cf5c10da7daad3820d775060a19ea277d8ab944a160b" dependencies = [ "calloop 0.14.3", - "drm 0.14.1", + "drm", "i-slint-common", "i-slint-core", "i-slint-renderer-skia", @@ -2648,7 +2581,7 @@ dependencies = [ "rgb", "tiff", "zune-core 0.5.0", - "zune-jpeg 0.5.6", + "zune-jpeg 0.5.7", ] [[package]] @@ -2803,9 +2736,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "7ee5b5339afb4c41626dde77b7a611bd4f2c202b897852b4bcf5d03eddc61010" [[package]] name = "jni" @@ -2944,13 +2877,13 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +checksum = "df15f6eac291ed1cf25865b1ee60399f57e7c227e7f51bdbd4c5270396a9ed50" dependencies = [ "bitflags 2.10.0", "libc", - "redox_syscall 0.5.18", + "redox_syscall 0.6.0", ] [[package]] @@ -3099,20 +3032,14 @@ dependencies = [ [[package]] name = "lzma-rust2" -version = "0.13.0" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c60a23ffb90d527e23192f1246b14746e2f7f071cb84476dd879071696c18a4a" +checksum = "48172246aa7c3ea28e423295dd1ca2589a24617cc4e588bb8cfe177cb2c54d95" dependencies = [ "crc", "sha2", ] -[[package]] -name = "lzma-rust2" -version = "0.15.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48172246aa7c3ea28e423295dd1ca2589a24617cc4e588bb8cfe177cb2c54d95" - [[package]] name = "maybe-rayon" version = "0.1.1" @@ -3191,9 +3118,9 @@ dependencies = [ [[package]] name = "moxcms" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80986bbbcf925ebd3be54c26613d861255284584501595cf418320c078945608" +checksum = "ac9557c559cd6fc9867e122e20d2cbefc9ca29d80d027a8e39310920ed2f0a97" dependencies = [ "num-traits", "pxfm", @@ -3993,9 +3920,9 @@ checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" [[package]] name = "portable-atomic" -version = "1.11.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" +checksum = "f59e70c4aef1e55797c2e8fd94a4f2a973fc972cfde0e0b05f683667b0cd39dd" dependencies = [ "critical-section", ] @@ -4363,6 +4290,15 @@ dependencies = [ "bitflags 2.10.0", ] +[[package]] +name = "redox_syscall" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec96166dafa0886eb81fe1c0a388bece180fbef2135f97c1e2cf8302e74b43b5" +dependencies = [ + "bitflags 2.10.0", +] + [[package]] name = "redox_users" version = "0.5.2" @@ -4405,9 +4341,9 @@ checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "reqwest" -version = "0.12.25" +version = "0.12.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6eff9328d40131d43bd911d42d79eb6a47312002a4daefc9e37f17e74a7701a" +checksum = "3b4c14b2d9afca6a60277086b0cc6a6ae0b568f6f7916c943a8cdc79f8be240f" dependencies = [ "base64", "bytes", @@ -4595,9 +4531,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.13.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "708c0f9d5f54ba0272468c1d306a52c495b31fa155e91bc25371e6df7996908c" +checksum = "21e6f2ab2928ca4291b86736a8bd920a277a399bba1589409d72154ff87c1282" dependencies = [ "web-time", "zeroize", @@ -4640,9 +4576,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "62049b2877bf12821e8f9ad256ee38fdc31db7387ec2d3b3f403024de2034aea" [[package]] name = "same-file" @@ -4791,9 +4727,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" +checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" dependencies = [ "serde_core", ] @@ -4818,7 +4754,7 @@ checksum = "611081ec4fc67633b979fc0c24385de90fa60acd18126d796c8758a24294a950" dependencies = [ "crc32fast", "js-sys", - "lzma-rust2 0.15.4", + "lzma-rust2", "wasm-bindgen", ] @@ -5090,33 +5026,33 @@ dependencies = [ [[package]] name = "softbuffer" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08" +checksum = "aac18da81ebbf05109ab275b157c22a653bb3c12cf884450179942f81bcbf6c3" dependencies = [ "as-raw-xcb-connection", "bytemuck", - "cfg_aliases", - "core-graphics 0.24.0", - "drm 0.12.0", + "drm", "fastrand", - "foreign-types", "js-sys", - "log", "memmap2", - "objc2 0.5.2", - "objc2-foundation 0.2.2", - "objc2-quartz-core 0.2.2", + "ndk", + "objc2 0.6.3", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation 0.3.2", + "objc2-quartz-core 0.3.2", "raw-window-handle", "redox_syscall 0.5.18", - "rustix 0.38.44", + "rustix 1.1.2", "tiny-xlib", + "tracing", "wasm-bindgen", "wayland-backend", "wayland-client", "wayland-sys", "web-sys", - "windows-sys 0.59.0", + "windows-sys 0.61.2", "x11rb", ] @@ -5522,9 +5458,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.9.8" +version = "0.9.10+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" +checksum = "0825052159284a1a8b4d6c0c86cbc801f2da5afd2b225fa548c72f2e74002f48" dependencies = [ "indexmap", "serde_core", @@ -5537,18 +5473,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.3" +version = "0.7.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" dependencies = [ "serde_core", ] [[package]] name = "toml_edit" -version = "0.23.9" +version = "0.23.10+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d7cbc3b4b49633d57a0509303158ca50de80ae32c265093b24c414705807832" +checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" dependencies = [ "indexmap", "toml_datetime", @@ -5559,18 +5495,18 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.0.4" +version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" dependencies = [ "winnow", ] [[package]] name = "toml_writer" -version = "1.0.4" +version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" +checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" [[package]] name = "tower" @@ -5619,9 +5555,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "log", "pin-project-lite", @@ -5642,9 +5578,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.35" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", ] @@ -6729,8 +6665,8 @@ dependencies = [ "calloop 0.13.0", "cfg_aliases", "concurrent-queue", - "core-foundation 0.9.4", - "core-graphics 0.23.2", + "core-foundation", + "core-graphics", "cursor-icon", "dpi", "js-sys", @@ -7121,9 +7057,9 @@ dependencies = [ [[package]] name = "zip" -version = "6.0.0" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb2a05c7c36fde6c09b08576c9f7fb4cda705990f73b58fe011abf7dfb24168b" +checksum = "bdd8a47718a4ee5fe78e07667cd36f3de80e7c2bfe727c7074245ffc7303c037" dependencies = [ "aes", "arbitrary", @@ -7132,10 +7068,11 @@ dependencies = [ "crc32fast", "deflate64", "flate2", + "generic-array", "getrandom 0.3.4", "hmac", "indexmap", - "lzma-rust2 0.13.0", + "lzma-rust2", "memchr", "pbkdf2", "ppmd-rust", @@ -7224,9 +7161,9 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f520eebad972262a1dde0ec455bce4f8b298b1e5154513de58c114c4c54303e8" +checksum = "51d915729b0e7d5fe35c2f294c5dc10b30207cc637920e5b59077bfa3da63f28" dependencies = [ "zune-core 0.5.0", ] diff --git a/Cargo.toml b/Cargo.toml index 07193b9..a117f38 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ rust-version = "1.92.0" [dependencies] dirs = "6.0" -zip = "6.0" +zip = "7.0" governor = "0.10" sevenz-rust2 = { version = "0.20", default-features = false } chrono = "0.4" From 7f63bf1fdeb8996f5d576f09b3a75685cdd7f91d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 22 Dec 2025 10:08:09 +0100 Subject: [PATCH 0654/1117] Update sse2neon to v1.9.0 (#642) --- src/compat/sse2neon | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compat/sse2neon b/src/compat/sse2neon index 3cf6976..8d1d9f1 160000 --- a/src/compat/sse2neon +++ b/src/compat/sse2neon @@ -1 +1 @@ -Subproject commit 3cf69760cc6fdc45a5d70f0d42a8f079489f9867 +Subproject commit 8d1d9f1cae82de66d9daea53f4f7ca30024f478b From 56d0b1b2e2b47461fa5c19550b65fa4afe9c87cd Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 2 Jan 2026 14:41:00 +0100 Subject: [PATCH 0655/1117] update sse2neon to v1.9.1 --- src/compat/sse2neon | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compat/sse2neon b/src/compat/sse2neon index 8d1d9f1..92f6de1 160000 --- a/src/compat/sse2neon +++ b/src/compat/sse2neon @@ -1 +1 @@ -Subproject commit 8d1d9f1cae82de66d9daea53f4f7ca30024f478b +Subproject commit 92f6de174717aef09033ad21568d5bb9e5470404 From 8be1ac7740ffb48bf5f2a73f08fe6182ef15e725 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 3 Jan 2026 10:07:27 +0100 Subject: [PATCH 0656/1117] update SDL crate (#648) * update SDL crate * more --- Cargo.lock | 325 +++++++++++++++++++++++++++++++++--------------- Cargo.toml | 6 +- src/ui.rs | 11 +- src/ui/input.rs | 8 +- 4 files changed, 241 insertions(+), 109 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4f25269..bc7c04e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -301,16 +301,16 @@ dependencies = [ "futures-lite", "parking", "polling", - "rustix 1.1.2", + "rustix 1.1.3", "slab", "windows-sys 0.61.2", ] [[package]] name = "async-lock" -version = "3.4.1" +version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" dependencies = [ "event-listener", "event-listener-strategy", @@ -332,7 +332,7 @@ dependencies = [ "cfg-if", "event-listener", "futures-lite", - "rustix 1.1.2", + "rustix 1.1.3", ] [[package]] @@ -358,7 +358,7 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 1.1.2", + "rustix 1.1.3", "signal-hook-registry", "slab", "windows-sys 0.61.2", @@ -457,6 +457,28 @@ dependencies = [ "arrayvec", ] +[[package]] +name = "aws-lc-rs" +version = "1.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a88aab2464f1f25453baa7a07c84c5b7684e274054ba06817f382357f77a288" +dependencies = [ + "aws-lc-sys", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45afffdee1e7c9126814751f88dddc747f41d91da16c9551a0f1e8a11e788a1" +dependencies = [ + "cc", + "cmake", + "dunce", + "fs_extra", +] + [[package]] name = "base64" version = "0.22.1" @@ -659,7 +681,7 @@ checksum = "cb9f6e1368bd4621d2c86baa7e37de77a938adf5221e5dd3d6133340101b309e" dependencies = [ "bitflags 2.10.0", "polling", - "rustix 1.1.2", + "rustix 1.1.3", "slab", "tracing", ] @@ -683,16 +705,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "138efcf0940a02ebf0cc8d1eff41a1682a46b431630f4c52450d6265876021fa" dependencies = [ "calloop 0.14.3", - "rustix 1.1.2", + "rustix 1.1.3", "wayland-backend", "wayland-client", ] [[package]] name = "cc" -version = "1.2.50" +version = "1.2.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f50d563227a1c37cc0a263f64eca3334388c01c5e4c4861a9def205c614383c" +checksum = "7a0aeaff4ff1a90589618835a598e545176939b97874f7abc7851caa0618f203" dependencies = [ "find-msvc-tools", "jobserver", @@ -950,6 +972,16 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -963,7 +995,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", "core-graphics-types", "foreign-types", "libc", @@ -976,7 +1008,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", "libc", ] @@ -1168,18 +1200,18 @@ dependencies = [ [[package]] name = "derive_more" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10b768e943bed7bf2cab53df09f4bc34bfd217cdb57d971e769874c9a6710618" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" dependencies = [ "derive_more-impl", ] [[package]] name = "derive_more-impl" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d286bfdaf75e988b4a78e013ecd79c581e06399ab53fbacd2d916c2f904f30b" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" dependencies = [ "convert_case", "proc-macro2", @@ -1322,6 +1354,12 @@ dependencies = [ "linux-raw-sys 0.6.5", ] +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + [[package]] name = "either" version = "1.15.0" @@ -1534,9 +1572,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" +checksum = "645cbb3a84e60b7531617d5ae4e57f7e27308f6445f5abf653209ea76dec8dff" [[package]] name = "flate2" @@ -1664,6 +1702,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[package]] name = "futures" version = "0.3.31" @@ -1788,7 +1832,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" dependencies = [ - "rustix 1.1.2", + "rustix 1.1.3", "windows-link", ] @@ -2205,7 +2249,6 @@ dependencies = [ "tokio", "tokio-rustls", "tower-service", - "webpki-roots", ] [[package]] @@ -2581,7 +2624,7 @@ dependencies = [ "rgb", "tiff", "zune-core 0.5.0", - "zune-jpeg 0.5.7", + "zune-jpeg 0.5.8", ] [[package]] @@ -2683,9 +2726,9 @@ checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "iri-string" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" +checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" dependencies = [ "memchr", "serde", @@ -2736,9 +2779,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee5b5339afb4c41626dde77b7a611bd4f2c202b897852b4bcf5d03eddc61010" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "jni" @@ -2877,13 +2920,13 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df15f6eac291ed1cf25865b1ee60399f57e7c227e7f51bdbd4c5270396a9ed50" +checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" dependencies = [ "bitflags 2.10.0", "libc", - "redox_syscall 0.6.0", + "redox_syscall 0.7.0", ] [[package]] @@ -2898,9 +2941,9 @@ dependencies = [ [[package]] name = "libz-rs-sys" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15413ef615ad868d4d65dce091cb233b229419c7c0c4bcaa746c0901c49ff39c" +checksum = "c10501e7805cee23da17c7790e59df2870c0d4043ec6d03f67d31e2b53e77415" dependencies = [ "zlib-rs", ] @@ -3691,6 +3734,12 @@ dependencies = [ "pathdiff", ] +[[package]] +name = "openssl-probe" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f50d9b3dabb09ecd771ad0aa242ca6894994c130308ca3d7684634df8037391" + [[package]] name = "option-ext" version = "0.2.0" @@ -3908,7 +3957,7 @@ dependencies = [ "concurrent-queue", "hermit-abi 0.5.2", "pin-project-lite", - "rustix 1.1.2", + "rustix 1.1.3", "windows-sys 0.61.2", ] @@ -3920,9 +3969,9 @@ checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" [[package]] name = "portable-atomic" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f59e70c4aef1e55797c2e8fd94a4f2a973fc972cfde0e0b05f683667b0cd39dd" +checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" dependencies = [ "critical-section", ] @@ -3991,9 +4040,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "9695f8df41bb4f3d222c95a67532365f569318332d03d5f3f67f37b20e6ebdf0" dependencies = [ "unicode-ident", ] @@ -4058,9 +4107,9 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quick-xml" -version = "0.37.5" +version = "0.38.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" +checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" dependencies = [ "memchr", ] @@ -4091,6 +4140,7 @@ version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ + "aws-lc-rs", "bytes", "getrandom 0.3.4", "lru-slab", @@ -4292,9 +4342,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec96166dafa0886eb81fe1c0a388bece180fbef2135f97c1e2cf8302e74b43b5" +checksum = "49f3fe0889e69e2ae9e41f4d6c4c0181701d00e4697b356fb1f74173a5e0ee27" dependencies = [ "bitflags 2.10.0", ] @@ -4341,9 +4391,9 @@ checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "reqwest" -version = "0.12.26" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b4c14b2d9afca6a60277086b0cc6a6ae0b568f6f7916c943a8cdc79f8be240f" +checksum = "04e9018c9d814e5f30cc16a0f03271aeab3571e609612d9fe78c1aa8d11c2f62" dependencies = [ "base64", "bytes", @@ -4364,6 +4414,7 @@ dependencies = [ "quinn", "rustls", "rustls-pki-types", + "rustls-platform-verifier", "serde", "serde_json", "serde_urlencoded", @@ -4377,7 +4428,6 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots", ] [[package]] @@ -4504,9 +4554,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ "bitflags 2.10.0", "errno", @@ -4521,14 +4571,26 @@ version = "0.23.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" dependencies = [ + "aws-lc-rs", "once_cell", - "ring", "rustls-pki-types", "rustls-webpki", "subtle", "zeroize", ] +[[package]] +name = "rustls-native-certs" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework", +] + [[package]] name = "rustls-pki-types" version = "1.13.2" @@ -4539,12 +4601,40 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-platform-verifier" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" +dependencies = [ + "core-foundation 0.10.1", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki", + "security-framework", + "security-framework-sys", + "webpki-root-certs", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + [[package]] name = "rustls-webpki" version = "0.103.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" dependencies = [ + "aws-lc-rs", "ring", "rustls-pki-types", "untrusted", @@ -4576,9 +4666,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62049b2877bf12821e8f9ad256ee38fdc31db7387ec2d3b3f403024de2034aea" +checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" [[package]] name = "same-file" @@ -4589,6 +4679,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schannel" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -4622,15 +4721,15 @@ dependencies = [ [[package]] name = "sdl3-src" -version = "3.2.28" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77e0ceda907b4b335bc34191538ba538b30bd30a90daedc575f6e347c4605c2" +checksum = "8d75184862d20bd48bdfeb7a6ee00d67c211e6a7301dc8011f7db1ed8e78fbf3" [[package]] name = "sdl3-sys" -version = "0.5.11+SDL3-3.2.28" +version = "0.6.0+SDL-3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73979b5f78819ede7fb6b7534161fe70f3d7a56cc09e7e29c7b58c2b525abfa6" +checksum = "8361b0312462d2cf9c115fcbdf9cfceceef79d53faec3b50efd6447ac903eb23" dependencies = [ "cc", "cmake", @@ -4646,9 +4745,9 @@ checksum = "f28923d2ce72ff317d8eb7cec97ddfb8f351c330d7bcbf8c76e91332122c93b3" [[package]] name = "sdl3-ttf-sys" -version = "0.2.0+SDL3-ttf-3.2.2" +version = "0.6.0+SDL-ttf-3.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1d8477496fa2b081fb8f63cf8d0a9a9ba6a7a8f2a21b87e7d13d2ab6d73582" +checksum = "c30da3dcd7e062f19350b47a532f7629c42801b801687535fd31e8ba2adfd71d" dependencies = [ "cmake", "rpkg-config", @@ -4656,6 +4755,29 @@ dependencies = [ "sdl3-ttf-src", ] +[[package]] +name = "security-framework" +version = "3.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" +dependencies = [ + "bitflags 2.10.0", + "core-foundation 0.10.1", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "semver" version = "1.0.27" @@ -4703,15 +4825,15 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.148" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "3084b546a1dd6289475996f182a22aba973866ea8e8b02c51d9f46b1336a22da" dependencies = [ "itoa", "memchr", - "ryu", "serde", "serde_core", + "zmij", ] [[package]] @@ -4748,9 +4870,9 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.20.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "611081ec4fc67633b979fc0c24385de90fa60acd18126d796c8758a24294a950" +checksum = "65126b94d6f5a6d727b1e35b0a796685a79062ceaf5fa45321315e62b65251a2" dependencies = [ "crc32fast", "js-sys", @@ -4788,10 +4910,11 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.7" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ + "errno", "libc", ] @@ -4970,7 +5093,7 @@ dependencies = [ "libc", "log", "memmap2", - "rustix 1.1.2", + "rustix 1.1.3", "thiserror 2.0.17", "wayland-backend", "wayland-client", @@ -5044,7 +5167,7 @@ dependencies = [ "objc2-quartz-core 0.3.2", "raw-window-handle", "redox_syscall 0.5.18", - "rustix 1.1.2", + "rustix 1.1.3", "tiny-xlib", "tracing", "wasm-bindgen", @@ -5169,9 +5292,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.111" +version = "2.0.112" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" +checksum = "21f182278bf2d2bcb3c88b1b08a37df029d71ce3d3ae26168e3c653b213b99d4" dependencies = [ "proc-macro2", "quote", @@ -5220,14 +5343,14 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.23.0" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" dependencies = [ "fastrand", "getrandom 0.3.4", "once_cell", - "rustix 1.1.2", + "rustix 1.1.3", "windows-sys 0.61.2", ] @@ -5980,13 +6103,13 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" +checksum = "fee64194ccd96bf648f42a65a7e589547096dfa702f7cadef84347b66ad164f9" dependencies = [ "cc", "downcast-rs", - "rustix 1.1.2", + "rustix 1.1.3", "scoped-tls", "smallvec", "wayland-sys", @@ -5994,12 +6117,12 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.11" +version = "0.31.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" +checksum = "b8e6faa537fbb6c186cb9f1d41f2f811a4120d1b57ec61f50da451a0c5122bec" dependencies = [ "bitflags 2.10.0", - "rustix 1.1.2", + "rustix 1.1.3", "wayland-backend", "wayland-scanner", ] @@ -6017,20 +6140,20 @@ dependencies = [ [[package]] name = "wayland-cursor" -version = "0.31.11" +version = "0.31.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447ccc440a881271b19e9989f75726d60faa09b95b0200a9b7eb5cc47c3eeb29" +checksum = "5864c4b5b6064b06b1e8b74ead4a98a6c45a285fe7a0e784d24735f011fdb078" dependencies = [ - "rustix 1.1.2", + "rustix 1.1.3", "wayland-client", "xcursor", ] [[package]] name = "wayland-protocols" -version = "0.32.9" +version = "0.32.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" +checksum = "baeda9ffbcfc8cd6ddaade385eaf2393bd2115a69523c735f12242353c3df4f3" dependencies = [ "bitflags 2.10.0", "wayland-backend", @@ -6053,9 +6176,9 @@ dependencies = [ [[package]] name = "wayland-protocols-misc" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dfe33d551eb8bffd03ff067a8b44bb963919157841a99957151299a6307d19c" +checksum = "791c58fdeec5406aa37169dd815327d1e47f334219b523444bc26d70ceb4c34e" dependencies = [ "bitflags 2.10.0", "wayland-backend", @@ -6066,9 +6189,9 @@ dependencies = [ [[package]] name = "wayland-protocols-plasma" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032" +checksum = "aa98634619300a535a9a97f338aed9a5ff1e01a461943e8346ff4ae26007306b" dependencies = [ "bitflags 2.10.0", "wayland-backend", @@ -6079,9 +6202,9 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec" +checksum = "e9597cdf02cf0c34cd5823786dce6b5ae8598f05c2daf5621b6e178d4f7345f3" dependencies = [ "bitflags 2.10.0", "wayland-backend", @@ -6092,9 +6215,9 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.7" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3" +checksum = "5423e94b6a63e68e439803a3e153a9252d5ead12fd853334e2ad33997e3889e3" dependencies = [ "proc-macro2", "quick-xml", @@ -6103,9 +6226,9 @@ dependencies = [ [[package]] name = "wayland-sys" -version = "0.31.7" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142" +checksum = "1e6dbfc3ac5ef974c92a2235805cc0114033018ae1290a72e474aa8b28cbbdfd" dependencies = [ "dlib", "log", @@ -6134,10 +6257,10 @@ dependencies = [ ] [[package]] -name = "webpki-roots" +name = "webpki-root-certs" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e" +checksum = "ee3e3b5f5e80bc89f30ce8d0343bf4e5f12341c51f3e26cbeecbc7c85443e85b" dependencies = [ "rustls-pki-types", ] @@ -6665,7 +6788,7 @@ dependencies = [ "calloop 0.13.0", "cfg_aliases", "concurrent-queue", - "core-foundation", + "core-foundation 0.9.4", "core-graphics", "cursor-icon", "dpi", @@ -6778,7 +6901,7 @@ dependencies = [ "libc", "libloading", "once_cell", - "rustix 1.1.2", + "rustix 1.1.3", "x11rb-protocol", ] @@ -6795,7 +6918,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", - "rustix 1.1.2", + "rustix 1.1.3", ] [[package]] @@ -7012,9 +7135,9 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.4.2" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" dependencies = [ "proc-macro2", "quote", @@ -7085,9 +7208,15 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51f936044d677be1a1168fae1d03b583a285a5dd9d8cbf7b24c23aa1fc775235" +checksum = "40990edd51aae2c2b6907af74ffb635029d5788228222c4bb811e9351c0caad3" + +[[package]] +name = "zmij" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de9211a9f64b825911bdf0240f58b7a8dac217fe260fc61f080a07f61372fbd5" [[package]] name = "zopfli" @@ -7161,9 +7290,9 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d915729b0e7d5fe35c2f294c5dc10b30207cc637920e5b59077bfa3da63f28" +checksum = "e35aee689668bf9bd6f6f3a6c60bb29ba1244b3b43adfd50edd554a371da37d5" dependencies = [ "zune-core 0.5.0", ] diff --git a/Cargo.toml b/Cargo.toml index a117f38..ff18b9e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,8 +18,8 @@ serde-big-array = "0.5" slint = { version = "1.12", default-features = false, features = ["compat-1-2", "std", "backend-winit", "renderer-skia-vulkan"] } open = "5.3" sha2 = "0.10" -sdl3-sys = { version = "0.5", features = ["build-from-source-static"] } -sdl3-ttf-sys = { version = "0.2", features = ["build-from-source-static", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } +sdl3-sys = { version = "0.6", features = ["build-from-source-static"] } +sdl3-ttf-sys = { version = "0.6", features = ["build-from-source-static", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } rfd = { version = "0.16", default-features = false, features = ["xdg-portal", "tokio", "wayland"] } tokio = {version = "1.46", features = ["rt-multi-thread", "macros"] } spin_sleep = "1.3" @@ -34,7 +34,7 @@ fatfs = "0.3" semver = "1.0" postcard = { version = "1.1", features = ["use-std"] } clap = { version = "4.5", features = ["derive"] } -reqwest = { version = "0.12", default-features = false, features = ["http2","rustls-tls","charset","json"] } +reqwest = { version = "0.13", default-features = false, features = ["http2","rustls","charset","json","query"] } [build-dependencies] winresource = "0.1" diff --git a/src/ui.rs b/src/ui.rs index 29aa0aa..da95e60 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -68,12 +68,15 @@ impl Drop for Ui { pub fn sdl_init(flag: sdl3_sys::init::SDL_InitFlags) { unsafe { - let init = sdl3_sys::init::SDL_WasInit(0); - if init & flag == 0 && !sdl3_sys::init::SDL_InitSubSystem(flag) { + if sdl3_sys::init::SDL_WasInit(flag) == 0 && !sdl3_sys::init::SDL_InitSubSystem(flag) { let err = std::ffi::CStr::from_ptr(sdl3_sys::error::SDL_GetError()) .to_str() .unwrap(); - panic!("Could not initialize SDL subsystem: {flag}, {err}"); + panic!( + "Could not initialize SDL subsystem: {}, {}", + u32::from(flag), + err + ); } } } @@ -107,7 +110,7 @@ pub fn get_dirs() -> Dirs { } impl Ui { - fn construct_ui(joysticks: Vec, with_sdl: bool) -> Ui { + fn construct_ui(joysticks: Vec, with_sdl: bool) -> Ui { let dirs = get_dirs(); Ui { diff --git a/src/ui/input.rs b/src/ui/input.rs index 957a687..82f7e3f 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -523,7 +523,7 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, d title.as_ptr(), 640, 480, - 0, + sdl3_sys::video::SDL_WindowFlags(0), &mut window, &mut renderer, ) @@ -941,7 +941,7 @@ pub fn init(ui: &mut ui::Ui) { for i in 0..4 { let controller_assignment = &ui.config.input.controller_assignment[i]; if controller_assignment.is_some() && ui.config.input.controller_enabled[i] { - let mut joystick_id = 0; + let mut joystick_id = sdl3_sys::everything::SDL_JoystickID(0); let assigned_path = controller_assignment.as_ref().unwrap(); for joystick in ui.input.joysticks.iter() { @@ -968,7 +968,7 @@ pub fn init(ui: &mut ui::Ui) { if !profile.dinput { let gamepad = unsafe { sdl3_sys::gamepad::SDL_OpenGamepad(joystick_id) }; if gamepad.is_null() { - println!("could not connect gamepad: {joystick_id}") + println!("could not connect gamepad: {}", u32::from(joystick_id)) } else { ui.input.controllers[i].game_controller = gamepad; let properties = @@ -987,7 +987,7 @@ pub fn init(ui: &mut ui::Ui) { } else { let joystick = unsafe { sdl3_sys::joystick::SDL_OpenJoystick(joystick_id) }; if joystick.is_null() { - println!("could not connect joystick: {joystick_id}") + println!("could not connect joystick: {}", u32::from(joystick_id)) } else { ui.input.controllers[i].joystick = joystick; let properties = From d48e3dc106138151ffb25743de5bdab505e239a9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 5 Jan 2026 09:54:42 +0100 Subject: [PATCH 0657/1117] update rfd --- Cargo.lock | 84 ++++++++++++++++++------------------------------------ Cargo.toml | 2 +- 2 files changed, 29 insertions(+), 57 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bc7c04e..c6329a3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -229,27 +229,6 @@ dependencies = [ "libloading", ] -[[package]] -name = "ashpd" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cbdf310d77fd3aaee6ea2093db7011dc2d35d2eb3481e5607f1f8d942ed99df" -dependencies = [ - "enumflags2", - "futures-channel", - "futures-util", - "rand", - "raw-window-handle", - "serde", - "serde_repr", - "tokio", - "url", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "zbus", -] - [[package]] name = "async-broadcast" version = "0.7.2" @@ -794,9 +773,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.53" +version = "4.5.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" +checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394" dependencies = [ "clap_builder", "clap_derive", @@ -804,9 +783,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.53" +version = "4.5.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" +checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00" dependencies = [ "anstream", "anstyle", @@ -2878,9 +2857,9 @@ checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" -version = "0.2.178" +version = "0.2.179" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" +checksum = "c5a2d376baa530d1238d133232d15e239abad80d05838b4b59354e5268af431f" [[package]] name = "libfuzzer-sys" @@ -3075,9 +3054,9 @@ dependencies = [ [[package]] name = "lzma-rust2" -version = "0.15.4" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48172246aa7c3ea28e423295dd1ca2589a24617cc4e588bb8cfe177cb2c54d95" +checksum = "c58d5ec1eaf77e4477beb8a14921fdf313527cd02686fcc181c6fe9abe4461e4" dependencies = [ "crc", "sha2", @@ -3748,10 +3727,11 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "orbclient" -version = "0.3.49" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "247ad146e19b9437f8604c21f8652423595cf710ad108af40e77d3ae6e96b827" +checksum = "52ad2c6bae700b7aa5d1cc30c59bdd3a1c180b09dbaea51e2ae2b8e1cf211fdd" dependencies = [ + "libc", "libredox", ] @@ -4449,14 +4429,14 @@ dependencies = [ [[package]] name = "rfd" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a15ad77d9e70a92437d8f74c35d99b4e4691128df018833e99f90bcd36152672" +checksum = "e22b12ea46f8320162a0aa43ae045169fe1ac89314e1861e4ce79091fce6ef11" dependencies = [ - "ashpd", "block2 0.6.2", "dispatch2", "js-sys", + "libc", "log", "objc2 0.6.3", "objc2-app-kit 0.3.2", @@ -4464,11 +4444,13 @@ dependencies = [ "objc2-foundation 0.3.2", "pollster", "raw-window-handle", - "urlencoding", "wasm-bindgen", "wasm-bindgen-futures", + "wayland-backend", + "wayland-client", + "wayland-protocols", "web-sys", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -5292,9 +5274,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.112" +version = "2.0.113" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21f182278bf2d2bcb3c88b1b08a37df029d71ce3d3ae26168e3c653b213b99d4" +checksum = "678faa00651c9eb72dd2020cbdf275d92eccb2400d568e419efdd64838145cb4" dependencies = [ "proc-macro2", "quote", @@ -5518,18 +5500,16 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.48.0" +version = "1.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" dependencies = [ "bytes", "libc", "mio", "pin-project-lite", - "signal-hook-registry", "socket2", "tokio-macros", - "tracing", "windows-sys 0.61.2", ] @@ -5568,9 +5548,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.17" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", @@ -5869,12 +5849,6 @@ dependencies = [ "serde", ] -[[package]] -name = "urlencoding" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" - [[package]] name = "usvg" version = "0.45.1" @@ -6258,9 +6232,9 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee3e3b5f5e80bc89f30ce8d0343bf4e5f12341c51f3e26cbeecbc7c85443e85b" +checksum = "36a29fc0408b113f68cf32637857ab740edfafdf460c326cd2afaa2d84cc05dc" dependencies = [ "rustls-pki-types", ] @@ -7039,7 +7013,6 @@ dependencies = [ "ordered-stream", "serde", "serde_repr", - "tokio", "tracing", "uds_windows", "uuid", @@ -7214,9 +7187,9 @@ checksum = "40990edd51aae2c2b6907af74ffb635029d5788228222c4bb811e9351c0caad3" [[package]] name = "zmij" -version = "1.0.7" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de9211a9f64b825911bdf0240f58b7a8dac217fe260fc61f080a07f61372fbd5" +checksum = "30e0d8dffbae3d840f64bda38e28391faef673a7b5a6017840f2a106c8145868" [[package]] name = "zopfli" @@ -7306,7 +7279,6 @@ dependencies = [ "endi", "enumflags2", "serde", - "url", "winnow", "zvariant_derive", "zvariant_utils", diff --git a/Cargo.toml b/Cargo.toml index ff18b9e..397cb0e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ open = "5.3" sha2 = "0.10" sdl3-sys = { version = "0.6", features = ["build-from-source-static"] } sdl3-ttf-sys = { version = "0.6", features = ["build-from-source-static", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } -rfd = { version = "0.16", default-features = false, features = ["xdg-portal", "tokio", "wayland"] } +rfd = "0.17" tokio = {version = "1.46", features = ["rt-multi-thread", "macros"] } spin_sleep = "1.3" encoding_rs = "0.8" From 431b787998a0cc113940906116d4437b0397092f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 5 Jan 2026 19:27:16 +0100 Subject: [PATCH 0658/1117] update rfd --- Cargo.lock | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c6329a3..721f13c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4429,9 +4429,9 @@ dependencies = [ [[package]] name = "rfd" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22b12ea46f8320162a0aa43ae045169fe1ac89314e1861e4ce79091fce6ef11" +checksum = "069d6129dede311430d0dcf1ded88a7affc7a342c2d8e6336043d43ed14dac17" dependencies = [ "block2 0.6.2", "dispatch2", @@ -4442,6 +4442,7 @@ dependencies = [ "objc2-app-kit 0.3.2", "objc2-core-foundation", "objc2-foundation 0.3.2", + "percent-encoding", "pollster", "raw-window-handle", "wasm-bindgen", @@ -4549,9 +4550,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.35" +version = "0.23.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" +checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" dependencies = [ "aws-lc-rs", "once_cell", @@ -7187,9 +7188,9 @@ checksum = "40990edd51aae2c2b6907af74ffb635029d5788228222c4bb811e9351c0caad3" [[package]] name = "zmij" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e0d8dffbae3d840f64bda38e28391faef673a7b5a6017840f2a106c8145868" +checksum = "dcb2c125bd7365735bebeb420ccb880265ed2d2bddcbcd49f597fdfe6bd5e577" [[package]] name = "zopfli" From bfad71f09f45d96b515df520f3f0ddd73fa5bdd6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 19 Jan 2026 13:32:06 +0100 Subject: [PATCH 0659/1117] Update parallel-rdp (#656) * Update parallel-rdp * update cargo --- Cargo.lock | 285 ++++++++++++--------------- parallel-rdp/parallel-rdp-standalone | 2 +- 2 files changed, 128 insertions(+), 159 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 721f13c..0db0394 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -178,9 +178,6 @@ name = "arbitrary" version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" -dependencies = [ - "derive_arbitrary", -] [[package]] name = "arg_enum_proc_macro" @@ -408,7 +405,7 @@ dependencies = [ "num-traits", "pastey", "rayon", - "thiserror 2.0.17", + "thiserror 2.0.18", "v_frame", "y4m", ] @@ -438,9 +435,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.15.2" +version = "1.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88aab2464f1f25453baa7a07c84c5b7684e274054ba06817f382357f77a288" +checksum = "e84ce723ab67259cfeb9877c6a639ee9eb7a27b28123abd71db7f0d5d0cc9d86" dependencies = [ "aws-lc-sys", "zeroize", @@ -448,9 +445,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.35.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45afffdee1e7c9126814751f88dddc747f41d91da16c9551a0f1e8a11e788a1" +checksum = "43a442ece363113bd4bd4c8b18977a7798dd4d3c3383f34fb61936960e8f4ad8" dependencies = [ "cc", "cmake", @@ -691,9 +688,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.51" +version = "1.2.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a0aeaff4ff1a90589618835a598e545176939b97874f7abc7851caa0618f203" +checksum = "755d2fce177175ffca841e9a06afdb2c4ab0f593d53b4dee48147dfaade85932" dependencies = [ "find-msvc-tools", "jobserver", @@ -739,9 +736,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118" dependencies = [ "iana-time-zone", "js-sys", @@ -807,9 +804,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" +checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" [[package]] name = "clipboard-win" @@ -841,7 +838,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" dependencies = [ - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -1141,9 +1138,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" +checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" [[package]] name = "data-url" @@ -1166,17 +1163,6 @@ dependencies = [ "powerfmt", ] -[[package]] -name = "derive_arbitrary" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "derive_more" version = "2.1.1" @@ -1539,31 +1525,30 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.26" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" +checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db" dependencies = [ "cfg-if", "libc", "libredox", - "windows-sys 0.60.2", ] [[package]] name = "find-msvc-tools" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645cbb3a84e60b7531617d5ae4e57f7e27308f6445f5abf653209ea76dec8dff" +checksum = "8591b0bcc8a98a64310a2fae1bb3e9b8564dd10e381e6e28010fde8e8e8568db" [[package]] name = "flate2" -version = "1.1.5" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" +checksum = "b375d6465b98090a5f25b1c7703f3859783755aa9a80433b36e0379a3ec2f369" dependencies = [ "crc32fast", - "libz-rs-sys", "miniz_oxide", + "zlib-rs", ] [[package]] @@ -1817,9 +1802,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "js-sys", @@ -2020,9 +2005,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" dependencies = [ "atomic-waker", "bytes", @@ -2355,7 +2340,7 @@ dependencies = [ "rayon", "resvg", "rowan", - "smol_str 0.3.4", + "smol_str 0.3.5", "strum", "typed-index-collections", "url", @@ -2602,8 +2587,8 @@ dependencies = [ "rayon", "rgb", "tiff", - "zune-core 0.5.0", - "zune-jpeg 0.5.8", + "zune-core 0.5.1", + "zune-jpeg 0.5.11", ] [[package]] @@ -2630,9 +2615,9 @@ checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" [[package]] name = "indexmap" -version = "2.12.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", "hashbrown 0.16.1", @@ -2796,9 +2781,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.83" +version = "0.3.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" +checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" dependencies = [ "once_cell", "wasm-bindgen", @@ -2857,9 +2842,9 @@ checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" -version = "0.2.179" +version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5a2d376baa530d1238d133232d15e239abad80d05838b4b59354e5268af431f" +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" [[package]] name = "libfuzzer-sys" @@ -2918,15 +2903,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "libz-rs-sys" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c10501e7805cee23da17c7790e59df2870c0d4043ec6d03f67d31e2b53e77415" -dependencies = [ - "zlib-rs", -] - [[package]] name = "linebender_resource_handle" version = "0.1.1" @@ -3054,9 +3030,9 @@ dependencies = [ [[package]] name = "lzma-rust2" -version = "0.15.5" +version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58d5ec1eaf77e4477beb8a14921fdf313527cd02686fcc181c6fe9abe4461e4" +checksum = "1670343e58806300d87950e3401e820b519b9384281bbabfb15e3636689ffd69" dependencies = [ "crc", "sha2", @@ -3163,7 +3139,7 @@ dependencies = [ "objc2-foundation 0.3.2", "once_cell", "png 0.17.16", - "thiserror 2.0.17", + "thiserror 2.0.18", "windows-sys 0.60.2", ] @@ -3213,7 +3189,6 @@ dependencies = [ "cfg-if", "cfg_aliases", "libc", - "memoffset", ] [[package]] @@ -4020,9 +3995,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.104" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9695f8df41bb4f3d222c95a67532365f569318332d03d5f3f67f37b20e6ebdf0" +checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7" dependencies = [ "unicode-ident", ] @@ -4108,7 +4083,7 @@ dependencies = [ "rustc-hash 2.1.1", "rustls", "socket2", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", "web-time", @@ -4130,7 +4105,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.17", + "thiserror 2.0.18", "tinyvec", "tracing", "web-time", @@ -4152,9 +4127,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.42" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a" dependencies = [ "proc-macro2", ] @@ -4187,9 +4162,9 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ "getrandom 0.3.4", ] @@ -4224,7 +4199,7 @@ dependencies = [ "rand", "rand_chacha", "simd_helpers", - "thiserror 2.0.17", + "thiserror 2.0.18", "v_frame", "wasm-bindgen", ] @@ -4335,9 +4310,9 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "libredox", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -4429,9 +4404,9 @@ dependencies = [ [[package]] name = "rfd" -version = "0.17.1" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069d6129dede311430d0dcf1ded88a7affc7a342c2d8e6336043d43ed14dac17" +checksum = "20dafead71c16a34e1ff357ddefc8afc11e7d51d6d2b9fbd07eaa48e3e540220" dependencies = [ "block2 0.6.2", "dispatch2", @@ -4471,7 +4446,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.16", + "getrandom 0.2.17", "libc", "untrusted", "windows-sys 0.52.0", @@ -4576,9 +4551,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.13.2" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e6f2ab2928ca4291b86736a8bd920a277a399bba1589409d72154ff87c1282" +checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" dependencies = [ "web-time", "zeroize", @@ -4613,9 +4588,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" -version = "0.103.8" +version = "0.103.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" +checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" dependencies = [ "aws-lc-rs", "ring", @@ -4808,9 +4783,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.148" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3084b546a1dd6289475996f182a22aba973866ea8e8b02c51d9f46b1336a22da" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", @@ -5077,7 +5052,7 @@ dependencies = [ "log", "memmap2", "rustix 1.1.3", - "thiserror 2.0.17", + "thiserror 2.0.18", "wayland-backend", "wayland-client", "wayland-csd-frame", @@ -5112,9 +5087,9 @@ dependencies = [ [[package]] name = "smol_str" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3498b0a27f93ef1402f20eefacfaa1691272ac4eca1cdc8c596cb0a245d6cbf5" +checksum = "0f7a918bd2a9951d18ee6e48f076843e8e73a9a5d22cf05bcd4b7a81bdd04e17" dependencies = [ "borsh", "serde_core", @@ -5204,12 +5179,6 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - [[package]] name = "strict-num" version = "0.1.1" @@ -5275,9 +5244,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.113" +version = "2.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678faa00651c9eb72dd2020cbdf275d92eccb2400d568e419efdd64838145cb4" +checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" dependencies = [ "proc-macro2", "quote", @@ -5363,11 +5332,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.17", + "thiserror-impl 2.0.18", ] [[package]] @@ -5383,9 +5352,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", @@ -5417,22 +5386,22 @@ dependencies = [ [[package]] name = "time" -version = "0.3.44" +version = "0.3.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +checksum = "f9e442fc33d7fdb45aa9bfeb312c095964abdf596f7567261062b2a7107aaabd" dependencies = [ "deranged", "num-conv", "powerfmt", - "serde", + "serde_core", "time-core", ] [[package]] name = "time-core" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" +checksum = "8b36ee98fd31ec7426d599183e8fe26932a8dc1fb76ddb6214d05493377d34ca" [[package]] name = "tiny-skia" @@ -5562,9 +5531,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.9.10+spec-1.1.0" +version = "0.9.11+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0825052159284a1a8b4d6c0c86cbc801f2da5afd2b225fa548c72f2e74002f48" +checksum = "f3afc9a848309fe1aaffaed6e1546a7a14de1f935dc9d89d32afd9a44bab7c46" dependencies = [ "indexmap", "serde_core", @@ -5614,9 +5583,9 @@ checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" [[package]] name = "tower" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", @@ -5723,15 +5692,15 @@ dependencies = [ "log", "rand", "sha1", - "thiserror 2.0.17", + "thiserror 2.0.18", "utf-8", ] [[package]] name = "typed-index-collections" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5318ee4ce62a4e948a33915574021a7a953d83e84fba6e25c72ffcfd7dad35ff" +checksum = "898160f1dfd383b4e92e17f0512a7d62f3c51c44937b23b6ffc3a1614a8eaccd" dependencies = [ "bincode", "serde", @@ -5840,9 +5809,9 @@ checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" [[package]] name = "url" -version = "2.5.7" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", @@ -6011,18 +5980,18 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.1+wasi-0.2.4" +version = "1.0.2+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" dependencies = [ "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.106" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" +checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" dependencies = [ "cfg-if", "once_cell", @@ -6033,11 +6002,12 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.56" +version = "0.4.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" +checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f" dependencies = [ "cfg-if", + "futures-util", "js-sys", "once_cell", "wasm-bindgen", @@ -6046,9 +6016,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.106" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" +checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6056,9 +6026,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.106" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" +checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" dependencies = [ "bumpalo", "proc-macro2", @@ -6069,9 +6039,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.106" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" +checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" dependencies = [ "unicode-ident", ] @@ -6213,9 +6183,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.83" +version = "0.3.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" +checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" dependencies = [ "js-sys", "wasm-bindgen", @@ -6811,9 +6781,9 @@ dependencies = [ [[package]] name = "winresource" -version = "0.1.28" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b021990998587d4438bb672b5c5f034cbc927f51b45e3807ab7323645ef4899" +checksum = "17cdfa8da4b111045a5e47c7c839e6c5e11c942de1309bc624393ed5d87f89c6" dependencies = [ "toml", "version_check", @@ -6821,9 +6791,9 @@ dependencies = [ [[package]] name = "wit-bindgen" -version = "0.46.0" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" [[package]] name = "write-fonts" @@ -6992,9 +6962,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.12.0" +version = "5.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b622b18155f7a93d1cd2dc8c01d2d6a44e08fb9ebb7b3f9e6ed101488bad6c91" +checksum = "17f79257df967b6779afa536788657777a0001f5b42524fcaf5038d4344df40b" dependencies = [ "async-broadcast", "async-executor", @@ -7010,8 +6980,9 @@ dependencies = [ "futures-core", "futures-lite", "hex", - "nix", + "libc", "ordered-stream", + "rustix 1.1.3", "serde", "serde_repr", "tracing", @@ -7026,9 +6997,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.12.0" +version = "5.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cdb94821ca8a87ca9c298b5d1cbd80e2a8b67115d99f6e4551ac49e42b6a314" +checksum = "aad23e2d2f91cae771c7af7a630a49e755f1eb74f8a46e9f6d5f7a146edf5a37" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -7041,12 +7012,11 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.2.0" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" +checksum = "ffd8af6d5b78619bab301ff3c560a5bd22426150253db278f164d6cf3b72c50f" dependencies = [ "serde", - "static_assertions", "winnow", "zvariant", ] @@ -7059,18 +7029,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.31" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" +checksum = "668f5168d10b9ee831de31933dc111a459c97ec93225beb307aed970d1372dfd" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.31" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" +checksum = "2c7962b26b0a8685668b671ee4b54d007a67d4eaf05fda79ac0ecf41e32270f1" dependencies = [ "proc-macro2", "quote", @@ -7154,12 +7124,11 @@ dependencies = [ [[package]] name = "zip" -version = "7.0.0" +version = "7.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdd8a47718a4ee5fe78e07667cd36f3de80e7c2bfe727c7074245ffc7303c037" +checksum = "9013f1222db8a6d680f13a7ccdc60a781199cd09c2fa4eff58e728bb181757fc" dependencies = [ "aes", - "arbitrary", "bzip2", "constant_time_eq", "crc32fast", @@ -7188,9 +7157,9 @@ checksum = "40990edd51aae2c2b6907af74ffb635029d5788228222c4bb811e9351c0caad3" [[package]] name = "zmij" -version = "1.0.11" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb2c125bd7365735bebeb420ccb880265ed2d2bddcbcd49f597fdfe6bd5e577" +checksum = "94f63c051f4fe3c1509da62131a678643c5b6fbdc9273b2b79d4378ebda003d2" [[package]] name = "zopfli" @@ -7240,9 +7209,9 @@ checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" [[package]] name = "zune-core" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "111f7d9820f05fd715df3144e254d6fc02ee4088b0644c0ffd0efc9e6d9d2773" +checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" [[package]] name = "zune-inflate" @@ -7264,18 +7233,18 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.5.8" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e35aee689668bf9bd6f6f3a6c60bb29ba1244b3b43adfd50edd554a371da37d5" +checksum = "2959ca473aae96a14ecedf501d20b3608d2825ba280d5adb57d651721885b0c2" dependencies = [ - "zune-core 0.5.0", + "zune-core 0.5.1", ] [[package]] name = "zvariant" -version = "5.8.0" +version = "5.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2be61892e4f2b1772727be11630a62664a1826b62efa43a6fe7449521cb8744c" +checksum = "68b64ef4f40c7951337ddc7023dd03528a57a3ce3408ee9da5e948bd29b232c4" dependencies = [ "endi", "enumflags2", @@ -7287,9 +7256,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.8.0" +version = "5.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da58575a1b2b20766513b1ec59d8e2e68db2745379f961f86650655e862d2006" +checksum = "484d5d975eb7afb52cc6b929c13d3719a20ad650fea4120e6310de3fc55e415c" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -7300,9 +7269,9 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "3.2.1" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599" +checksum = "f75c23a64ef8f40f13a6989991e643554d9bef1d682a281160cf0c1bc389c5e9" dependencies = [ "proc-macro2", "quote", diff --git a/parallel-rdp/parallel-rdp-standalone b/parallel-rdp/parallel-rdp-standalone index 6cbce40..c177532 160000 --- a/parallel-rdp/parallel-rdp-standalone +++ b/parallel-rdp/parallel-rdp-standalone @@ -1 +1 @@ -Subproject commit 6cbce40582a0cc1c7460edcda863aa5bd42049d3 +Subproject commit c177532a0a24767c33b386ba9aac6c4610795401 From 1aa879d759c68f0ba5cfd206643d72fdb9c1ff57 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 20 Jan 2026 10:04:19 +0100 Subject: [PATCH 0660/1117] tweak audio queue formula --- src/device/ai.rs | 3 +-- src/ui/audio.rs | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/device/ai.rs b/src/device/ai.rs index 548b289..5552c4d 100644 --- a/src/device/ai.rs +++ b/src/device/ai.rs @@ -45,11 +45,10 @@ fn get_remaining_dma_length(device: &device::Device) -> u64 { } fn get_dma_duration(device: &device::Device) -> u64 { - let samples_per_sec = device.vi.clock / (1 + device.ai.regs[AI_DACRATE_REG as usize]) as u64; let bytes_per_sample = 4; /* XXX: assume 16bit stereo - should depends on bitrate instead */ let length = (device.ai.regs[AI_LEN_REG as usize] & !7) as u64; - length * (device.cpu.clock_rate / (bytes_per_sample * samples_per_sec)) + length * (device.cpu.clock_rate / (bytes_per_sample * device.ai.freq)) } fn do_dma(device: &mut device::Device) { diff --git a/src/ui/audio.rs b/src/ui/audio.rs index b81ad9d..536e555 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -85,8 +85,8 @@ pub fn play_audio(device: &device::Device, dram_addr: usize, length: u64) { let audio_queued = unsafe { sdl3_sys::audio::SDL_GetAudioStreamQueued(device.ui.audio.audio_stream) } as f64; - let acceptable_latency = (device.ai.freq as f64 * 0.2) * 4.0; - let min_latency = (device.ai.freq as f64 * 0.02) * 4.0; + let min_latency = device.ai.freq as f64 * device.vi.frame_time * 4.0; + let acceptable_latency = min_latency * 8.0; if audio_queued < min_latency { let silence_buffer: Vec = vec![0; min_latency as usize & !3]; From c5185e60c65b286acbe4633459eb6be64c733b3b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 20 Jan 2026 13:19:14 +0100 Subject: [PATCH 0661/1117] tweak ai dma calculation --- src/device/ai.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/device/ai.rs b/src/device/ai.rs index 5552c4d..873d296 100644 --- a/src/device/ai.rs +++ b/src/device/ai.rs @@ -48,7 +48,7 @@ fn get_dma_duration(device: &device::Device) -> u64 { let bytes_per_sample = 4; /* XXX: assume 16bit stereo - should depends on bitrate instead */ let length = (device.ai.regs[AI_LEN_REG as usize] & !7) as u64; - length * (device.cpu.clock_rate / (bytes_per_sample * device.ai.freq)) + (length * device.cpu.clock_rate) / (bytes_per_sample * device.ai.freq) } fn do_dma(device: &mut device::Device) { From e1a6663bb5bcc158003ccb7ea1a05ecc43d2e4cd Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 20 Jan 2026 13:21:44 +0100 Subject: [PATCH 0662/1117] remove needless copy --- src/device/vi.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index ed28b51..850e576 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -70,10 +70,9 @@ fn set_vertical_interrupt(device: &mut device::Device) { } fn set_current_line(device: &mut device::Device) { - let delay = device.vi.delay; let next_vi = device::events::get_event(device, device::events::EVENT_TYPE_VI); if let Some(next_vi) = next_vi { - device.vi.regs[VI_CURRENT_REG as usize] = ((delay + device.vi.regs[VI_CURRENT_REG as usize] = ((device.vi.delay - (next_vi.count - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize])) / device.vi.count_per_scanline) as u32; From befbacc5b3ece19e9b5c76509576136521924ce2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 20 Jan 2026 15:31:03 +0100 Subject: [PATCH 0663/1117] remove un-needed var --- src/device/vi.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index 850e576..ad33046 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -191,8 +191,7 @@ pub fn init(device: &mut device::Device) { } fn speed_limiter(device: &mut device::Device, speed_limiter_toggled: bool) { - let result = device.vi.limiter.as_ref().unwrap().check(); - if let Err(outcome) = result { + if let Err(outcome) = device.vi.limiter.as_ref().unwrap().check() { let dur = outcome.wait_time_from(governor::clock::DefaultClock::default().now()); spin_sleep::sleep(dur); if dur < device.vi.min_wait_time { From 367c22877b45656e7bda3a5e0a9c68926b420958 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 20 Jan 2026 19:10:55 +0100 Subject: [PATCH 0664/1117] add system for micro adjustments to audio pitch --- src/ui/audio.rs | 52 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 536e555..5fb8d55 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -65,6 +65,27 @@ pub fn raise_audio_volume(ui: &mut ui::Ui) { } } +fn adjust_audio_frequency(device: &device::Device, frequency: f32) { + if !device.vi.enable_speed_limiter { + return; + } + + unsafe { + let current_ratio = + sdl3_sys::everything::SDL_GetAudioStreamFrequencyRatio(device.ui.audio.audio_stream); + sdl3_sys::everything::SDL_SetAudioStreamFrequencyRatio( + device.ui.audio.audio_stream, + (current_ratio + frequency).clamp(0.99, 1.01), + ); + /* + println!( + "Adjusted audio frequency ratio to {}", + sdl3_sys::everything::SDL_GetAudioStreamFrequencyRatio(device.ui.audio.audio_stream) + ); + */ + } +} + pub fn play_audio(device: &device::Device, dram_addr: usize, length: u64) { if device.ui.audio.audio_stream.is_null() { return; @@ -85,11 +106,11 @@ pub fn play_audio(device: &device::Device, dram_addr: usize, length: u64) { let audio_queued = unsafe { sdl3_sys::audio::SDL_GetAudioStreamQueued(device.ui.audio.audio_stream) } as f64; - let min_latency = device.ai.freq as f64 * device.vi.frame_time * 4.0; - let acceptable_latency = min_latency * 8.0; + let samples_per_frame = device.ai.freq as f64 * device.vi.frame_time * 4.0; + let max_latency = samples_per_frame * 10.0; - if audio_queued < min_latency { - let silence_buffer: Vec = vec![0; min_latency as usize & !3]; + if audio_queued < samples_per_frame { + let silence_buffer: Vec = vec![0; samples_per_frame as usize & !3]; if !unsafe { sdl3_sys::audio::SDL_PutAudioStreamData( device.ui.audio.audio_stream, @@ -99,17 +120,32 @@ pub fn play_audio(device: &device::Device, dram_addr: usize, length: u64) { } { panic!("Could not play audio"); } + /* + println!( + "Audio underrun: queued {} samples, expected at least {} samples", + audio_queued, samples_per_frame + ); + */ + adjust_audio_frequency(device, -0.0005); } - if audio_queued < acceptable_latency - && !unsafe { + if audio_queued < max_latency { + if !unsafe { sdl3_sys::audio::SDL_PutAudioStreamData( device.ui.audio.audio_stream, primary_buffer.as_ptr() as *const std::ffi::c_void, primary_buffer.len() as i32 * 2, ) + } { + panic!("Could not play audio"); } - { - panic!("Could not play audio"); + } else { + /* + println!( + "Audio overrun: queued {} samples, expected at most {} samples", + audio_queued, max_latency + ); + */ + adjust_audio_frequency(device, 0.0005); } } From 56ff2b260c3b83102d41bd081e19b091bbb5a97d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 21 Jan 2026 12:13:19 +0100 Subject: [PATCH 0665/1117] adjust audio ratios --- src/ui/audio.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 5fb8d55..da39a2b 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -75,7 +75,7 @@ fn adjust_audio_frequency(device: &device::Device, frequency: f32) { sdl3_sys::everything::SDL_GetAudioStreamFrequencyRatio(device.ui.audio.audio_stream); sdl3_sys::everything::SDL_SetAudioStreamFrequencyRatio( device.ui.audio.audio_stream, - (current_ratio + frequency).clamp(0.99, 1.01), + (current_ratio + frequency).clamp(0.995, 1.005), ); /* println!( @@ -107,7 +107,7 @@ pub fn play_audio(device: &device::Device, dram_addr: usize, length: u64) { let audio_queued = unsafe { sdl3_sys::audio::SDL_GetAudioStreamQueued(device.ui.audio.audio_stream) } as f64; let samples_per_frame = device.ai.freq as f64 * device.vi.frame_time * 4.0; - let max_latency = samples_per_frame * 10.0; + let max_latency = samples_per_frame * 8.0; if audio_queued < samples_per_frame { let silence_buffer: Vec = vec![0; samples_per_frame as usize & !3]; From ce3b12bba9fcea90c339f8e4c2fc507e440d2715 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 21 Jan 2026 19:01:50 +0100 Subject: [PATCH 0666/1117] print message for audio volume --- src/ui/audio.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ui/audio.rs b/src/ui/audio.rs index da39a2b..f916385 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -53,6 +53,7 @@ pub fn lower_audio_volume(ui: &mut ui::Ui) { } sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.audio_stream, ui.audio.gain); } + ui::video::onscreen_message(ui, &format!("Audio volume: {:.0}%", ui.audio.gain * 100.0)); } pub fn raise_audio_volume(ui: &mut ui::Ui) { @@ -63,6 +64,7 @@ pub fn raise_audio_volume(ui: &mut ui::Ui) { } sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.audio_stream, ui.audio.gain); } + ui::video::onscreen_message(ui, &format!("Audio volume: {:.0}%", ui.audio.gain * 100.0)); } fn adjust_audio_frequency(device: &device::Device, frequency: f32) { From bf01898c6f3f8212d58b3e2020de11cb60903573 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 22 Jan 2026 09:22:47 +0100 Subject: [PATCH 0667/1117] remove extra function --- src/ui/storage.rs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/ui/storage.rs b/src/ui/storage.rs index f91a1cb..5b0b06b 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -354,11 +354,6 @@ pub fn compress_file(data: &[(&[u8], &str)]) -> Vec { compressed_file } -fn write_rom_save(ui: &ui::Ui) { - let data = postcard::to_stdvec(&ui.storage.saves.romsave.data).unwrap(); - std::fs::write(ui.storage.paths.romsave_file_path.clone(), data).unwrap(); -} - fn writeback_sdcard(device: &mut device::Device) { let length; let save_data: &[u8]; @@ -422,6 +417,7 @@ pub fn write_saves(device: &mut device::Device) { fn write_save(ui: &ui::Ui, save_type: SaveTypes) { let path: &std::path::Path; let data: &Vec; + let rom_save_data: Vec; match save_type { SaveTypes::Eeprom4k | SaveTypes::Eeprom16k => { path = ui.storage.paths.eep_file_path.as_ref(); @@ -444,8 +440,9 @@ fn write_save(ui: &ui::Ui, save_type: SaveTypes) { data = ui.storage.saves.sdcard.data.as_ref(); } SaveTypes::Romsave => { - write_rom_save(ui); - return; + path = ui.storage.paths.romsave_file_path.as_ref(); + rom_save_data = postcard::to_stdvec(&ui.storage.saves.romsave.data).unwrap(); + data = rom_save_data.as_ref(); } } let result = std::fs::write(path, data); From 9775f103e0bc0ead205bc811d7848a96ebbe5989 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 22 Jan 2026 20:09:13 +0100 Subject: [PATCH 0668/1117] flush saves to disk (#658) * flush saves to disk * more * more * more * more * more * more * more * more --- Cargo.toml | 2 +- src/device.rs | 5 - src/device/cart.rs | 2 +- src/device/cart/rom.rs | 5 +- src/device/cart/sc64.rs | 6 +- src/device/cart/sram.rs | 10 +- src/device/controller/mempak.rs | 3 +- src/device/controller/vru.rs | 17 +-- src/device/events.rs | 5 +- src/main.rs | 61 ++++++----- src/ui.rs | 14 +-- src/ui/gui.rs | 183 +++++++++----------------------- src/ui/netplay.rs | 6 +- src/ui/storage.rs | 92 +++++++++++----- src/ui/usb.rs | 4 - src/ui/vru.rs | 43 +++++++- 16 files changed, 216 insertions(+), 242 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 397cb0e..d3e24bb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,7 @@ sha2 = "0.10" sdl3-sys = { version = "0.6", features = ["build-from-source-static"] } sdl3-ttf-sys = { version = "0.6", features = ["build-from-source-static", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } rfd = "0.17" -tokio = {version = "1.46", features = ["rt-multi-thread", "macros"] } +tokio = {version = "1.46", features = ["rt-multi-thread", "macros", "fs"] } spin_sleep = "1.3" encoding_rs = "0.8" mimalloc = "0.1" diff --git a/src/device.rs b/src/device.rs index b428126..293a4fe 100644 --- a/src/device.rs +++ b/src/device.rs @@ -208,7 +208,6 @@ pub struct Device { #[serde(skip, default = "set_rng")] pub rng: rand_chacha::ChaCha8Rng, pub vru: controller::vru::Vru, - pub vru_window: controller::vru::VruWindow, pub transferpaks: [controller::transferpak::TransferPak; 4], pub cheats: cheats::Cheats, } @@ -482,10 +481,6 @@ impl Device { limit_freq: 2, limit_freq_check: std::time::Instant::now(), }, - vru_window: controller::vru::VruWindow { - window_notifier: None, - word_receiver: None, - }, vru: controller::vru::Vru { status: 0, voice_state: 0, diff --git a/src/device/cart.rs b/src/device/cart.rs index ba3d23d..b6bb0f2 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -147,7 +147,7 @@ fn eeprom_write_block(device: &mut device::Device, block: usize, offset: usize, device.pif.ram[status] = 0x00; - device.ui.storage.saves.eeprom.written = true + ui::storage::schedule_save(device, ui::storage::SaveTypes::Eeprom4k); } fn time2data(device: &mut device::Device, offset: usize) { diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 88b5456..0893ad3 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -1,5 +1,6 @@ use crate::device; use crate::netplay; +use crate::ui; use sha2::{Digest, Sha256}; pub const CART_MASK: usize = 0xFFFFFFF; @@ -63,7 +64,7 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 .data .insert((masked_address + i) as u32, *item); } - device.ui.storage.saves.romsave.written = true; + ui::storage::schedule_save(device, ui::storage::SaveTypes::Romsave); } device.cart.latch = value & mask; @@ -94,7 +95,7 @@ pub fn dma_read( .unwrap_or(&0), ); } - device.ui.storage.saves.romsave.written = true; + ui::storage::schedule_save(device, ui::storage::SaveTypes::Romsave); } device::pi::calculate_cycles(device, 1, length) diff --git a/src/device/cart/sc64.rs b/src/device/cart/sc64.rs index ff1a3d3..e19f2c0 100644 --- a/src/device/cart/sc64.rs +++ b/src/device/cart/sc64.rs @@ -208,7 +208,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u .copy_from_slice(&data); i += 4; } - device.ui.storage.saves.sdcard.written = true; + ui::storage::schedule_save(device, ui::storage::SaveTypes::Sdcard); } 'U' => { device.cart.sc64.regs[SC64_DATA0_REG as usize] = 0; @@ -405,7 +405,7 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 device::memory::masked_write_32(&mut data, value, mask); device.ui.storage.saves.eeprom.data[masked_address..masked_address + 4] .copy_from_slice(&data.to_be_bytes()); - device.ui.storage.saves.eeprom.written = true + ui::storage::schedule_save(device, ui::storage::SaveTypes::Eeprom4k); } else { let masked_address = address as usize & SC64_BUFFER_MASK; let mut data = u32::from_be_bytes( @@ -429,7 +429,7 @@ pub fn dma_read( let buffer = if cart_addr & 0x2000 != 0 { device::cart::format_eeprom(device); cart_addr &= SC64_EEPROM_MASK as u32; - device.ui.storage.saves.eeprom.written = true; + ui::storage::schedule_save(device, ui::storage::SaveTypes::Eeprom4k); &mut device.ui.storage.saves.eeprom.data } else { cart_addr &= SC64_BUFFER_MASK as u32; diff --git a/src/device/cart/sram.rs b/src/device/cart/sram.rs index 11ff7e0..ef17f8c 100644 --- a/src/device/cart/sram.rs +++ b/src/device/cart/sram.rs @@ -107,7 +107,7 @@ fn write_mem_sram(device: &mut device::Device, address: u64, value: u32, mask: u device.ui.storage.saves.sram.data[masked_address..masked_address + 4] .copy_from_slice(&data.to_be_bytes()); - device.ui.storage.saves.sram.written = true + ui::storage::schedule_save(device, ui::storage::SaveTypes::Sram); } fn write_mem_flash(device: &mut device::Device, address: u64, value: u32, mask: u32) { @@ -167,7 +167,7 @@ fn dma_read_sram(device: &mut device::Device, mut cart_addr: u32, mut dram_addr: j += 1; } - device.ui.storage.saves.sram.written = true + ui::storage::schedule_save(device, ui::storage::SaveTypes::Sram); } fn dma_read_flash(device: &mut device::Device, cart_addr: u32, dram_addr: u32, length: u32) { @@ -331,12 +331,12 @@ fn flashram_command(device: &mut device::Device, command: u32) { for i in 0..128 * 128 { device.ui.storage.saves.flash.data[offset + i] = 0xFF; } - device.ui.storage.saves.flash.written = true + ui::storage::schedule_save(device, ui::storage::SaveTypes::Flash); } else if device.cart.flashram.mode == FlashramMode::ChipErase { for i in 0..FLASHRAM_SIZE { device.ui.storage.saves.flash.data[i] = 0xFF; } - device.ui.storage.saves.flash.written = true + ui::storage::schedule_save(device, ui::storage::SaveTypes::Flash); } else { panic!("Unexpected flash erase command") } @@ -356,7 +356,7 @@ fn flashram_command(device: &mut device::Device, command: u32) { for i in 0..128 { device.ui.storage.saves.flash.data[offset + i] = device.cart.flashram.page_buf[i]; } - device.ui.storage.saves.flash.written = true; + ui::storage::schedule_save(device, ui::storage::SaveTypes::Flash); /* clear program busy flag, set program success flag, transition to status mode */ device.cart.flashram.status &= !0x01; diff --git a/src/device/controller/mempak.rs b/src/device/controller/mempak.rs index 54ffa7d..55eab6d 100644 --- a/src/device/controller/mempak.rs +++ b/src/device/controller/mempak.rs @@ -1,4 +1,5 @@ use crate::device; +use crate::ui; pub const MEMPAK_SIZE: usize = 0x8000; const MPK_PAGE_SIZE: usize = 256; @@ -96,6 +97,6 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us device.ui.storage.saves.mempak.data[offset..offset + size] .copy_from_slice(&device.pif.ram[data..data + size]); - device.ui.storage.saves.mempak.written = true + ui::storage::schedule_save(device, ui::storage::SaveTypes::Mempak); } } diff --git a/src/device/controller/vru.rs b/src/device/controller/vru.rs index 468dc6c..99058ef 100644 --- a/src/device/controller/vru.rs +++ b/src/device/controller/vru.rs @@ -29,14 +29,6 @@ pub struct Vru { pub word_mappings: HashMap, } -#[derive(serde::Serialize, serde::Deserialize)] -pub struct VruWindow { - #[serde(skip)] - pub window_notifier: Option>>>, - #[serde(skip)] - pub word_receiver: Option>, -} - pub fn init(device: &mut device::Device) { reset_vru(device); create_word_mappings(device); @@ -187,13 +179,8 @@ pub fn process(device: &mut device::Device, channel: usize) { device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] = 0; } JCMD_VRU_READ => { - let index = if let Some(window_notifier) = &device.vru_window.window_notifier { - ui::vru::prompt_for_match( - &device.vru.words, - window_notifier, - device.vru_window.word_receiver.as_mut().unwrap(), - device.vi.frame_time, - ) + let index = if let Some(weak) = &device.ui.weak { + ui::vru::prompt_for_match(&device.vru.words, weak, device.vi.frame_time) } else { 0x7FFF }; diff --git a/src/device/events.rs b/src/device/events.rs index 8d85e15..6dbb9dd 100644 --- a/src/device/events.rs +++ b/src/device/events.rs @@ -1,4 +1,5 @@ use crate::device; +use crate::ui; pub const EVENT_TYPE_NONE: usize = 0; pub const EVENT_TYPE_AI: usize = 1; @@ -12,7 +13,8 @@ pub const EVENT_TYPE_SPDMA: usize = 8; pub const EVENT_TYPE_COMPARE: usize = 9; pub const EVENT_TYPE_VRU: usize = 10; pub const EVENT_TYPE_PAK: usize = 11; -pub const EVENT_TYPE_COUNT: usize = 12; +pub const EVENT_TYPE_SAVE: usize = 12; +pub const EVENT_TYPE_COUNT: usize = 13; #[derive(PartialEq, Copy, Clone, serde::Serialize, serde::Deserialize)] pub struct Event { @@ -60,6 +62,7 @@ fn get_event_handler(name: usize) -> fn(&mut device::Device) { EVENT_TYPE_COMPARE => device::cop0::compare_event, EVENT_TYPE_VRU => device::controller::vru::vru_talking_event, EVENT_TYPE_PAK => device::controller::pak_switch_event, + EVENT_TYPE_SAVE => ui::storage::save_event, _ => dummy_event, } } diff --git a/src/main.rs b/src/main.rs index 874248f..4ae3c1e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -74,8 +74,15 @@ struct Args { clear_input_bindings: bool, } -#[tokio::main] -async fn main() -> std::io::Result<()> { +fn main() -> std::io::Result<()> { + let runtime = tokio::runtime::Builder::new_multi_thread() + .enable_all() + .worker_threads(4) + .thread_name("n64") + .thread_stack_size(env!("N64_STACK_SIZE").parse().unwrap()) + .build() + .unwrap(); + let dirs = ui::get_dirs(); std::fs::create_dir_all(dirs.config_dir)?; @@ -90,32 +97,29 @@ async fn main() -> std::io::Result<()> { file_path.display() ))); }; - let handle = std::thread::Builder::new() - .name("n64".to_string()) - .stack_size(env!("N64_STACK_SIZE").parse().unwrap()) - .spawn(move || { - let mut device = device::Device::new(); - let overclock = device.ui.config.emulation.overclock; - let disable_expansion_pak = device.ui.config.emulation.disable_expansion_pak; - let game_cheats = { - let game_crc = ui::storage::get_game_crc(&rom_contents); - let cheats = ui::config::Cheats::new(); - cheats.cheats.get(&game_crc).cloned().unwrap_or_default() - }; - device::run_game( - &mut device, - rom_contents, - ui::gui::GameSettings { - fullscreen: args.fullscreen, - overclock, - disable_expansion_pak, - cheats: game_cheats, - }, - ); - })?; + let handle = runtime.spawn(async move { + let mut device = device::Device::new(); + let overclock = device.ui.config.emulation.overclock; + let disable_expansion_pak = device.ui.config.emulation.disable_expansion_pak; - handle.join().unwrap(); + let game_cheats = { + let game_crc = ui::storage::get_game_crc(&rom_contents); + let cheats = ui::config::Cheats::new(); + cheats.cheats.get(&game_crc).cloned().unwrap_or_default() + }; + device::run_game( + &mut device, + rom_contents, + ui::gui::GameSettings { + fullscreen: args.fullscreen, + overclock, + disable_expansion_pak, + cheats: game_cheats, + }, + ); + }); + runtime.block_on(handle).unwrap() } else if std::env::args().count() > 1 { let mut ui = ui::Ui::new(); @@ -157,7 +161,10 @@ async fn main() -> std::io::Result<()> { ui::input::bind_input_profile(&mut ui, profile, port); } } else { - gui::app_window(); + runtime.block_on(async { + gui::app_window(); + }); } + runtime.shutdown_timeout(std::time::Duration::from_secs(1)); Ok(()) } diff --git a/src/ui.rs b/src/ui.rs index da95e60..57721c8 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -53,6 +53,7 @@ pub struct Ui { pub storage: Storage, pub video: Video, pub usb: Usb, + pub weak: Option>, } impl Drop for Ui { @@ -156,27 +157,27 @@ impl Ui { write_to_disk: true, eeprom: storage::Save { data: Vec::new(), - written: false, + write_pending: false, }, sram: storage::Save { data: Vec::new(), - written: false, + write_pending: false, }, flash: storage::Save { data: Vec::new(), - written: false, + write_pending: false, }, mempak: storage::Save { data: Vec::new(), - written: false, + write_pending: false, }, sdcard: storage::Save { data: Vec::new(), - written: false, + write_pending: false, }, romsave: storage::RomSave { data: std::collections::HashMap::new(), - written: false, + write_pending: false, }, }, }, @@ -195,6 +196,7 @@ impl Ui { usb_tx: None, cart_rx: None, }, + weak: None, dirs, with_sdl, } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 2cbf491..e7de83e 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -24,11 +24,6 @@ pub struct GbPaths { pub ram: [Option; 4], } -pub struct VruChannel { - pub vru_window_notifier: Option>>>, - pub vru_word_receiver: Option>, -} - #[derive(Clone)] pub struct GameSettings { pub fullscreen: bool, @@ -337,120 +332,66 @@ pub fn app_window() { save_settings(&app, &controller_paths); } -fn setup_vru_word_watcher( - weak_vru: slint::Weak, - vru_word_notifier: tokio::sync::mpsc::Sender, - mut vru_window_receiver: tokio::sync::mpsc::Receiver>>, -) { - tokio::spawn(async move { - loop { - let notifier = vru_word_notifier.clone(); - let notifier_closed = vru_word_notifier.clone(); - let result = vru_window_receiver.recv().await; - if let Some(Some(words)) = result { - weak_vru - .upgrade_in_event_loop(move |_handle| { - let vru_dialog = VruDialog::new().unwrap(); - let vru_dialog_weak = vru_dialog.as_weak(); - - vru_dialog.on_vru_button_clicked(move |chosen_word| { - notifier.try_send(chosen_word.to_string()).unwrap(); - vru_dialog_weak.unwrap().window().hide().unwrap(); - }); - - vru_dialog.window().on_close_requested(move || { - notifier_closed.try_send("".to_string()).unwrap(); - slint::CloseRequestResponse::HideWindow - }); - - let words_vec = slint::VecModel::default(); - for word in words { - words_vec.push(word.into()); - } - let words_model: std::rc::Rc> = - std::rc::Rc::new(words_vec); - vru_dialog.set_words(slint::ModelRc::from(words_model)); - - vru_dialog.show().unwrap(); - }) - .unwrap(); - } else { - return; - } - } - }); -} - pub fn run_rom( gb_paths: GbPaths, file_path: std::path::PathBuf, mut game_settings: GameSettings, - vru_channel: VruChannel, netplay: Option, usb: ui::Usb, weak: slint::Weak, ) { - std::thread::Builder::new() - .name("n64".to_string()) - .stack_size(env!("N64_STACK_SIZE").parse().unwrap()) - .spawn(move || { - weak.upgrade_in_event_loop(move |handle| handle.set_game_running(true)) - .unwrap(); - - let mut device = device::Device::new(); - device.ui.config.rom_dir = file_path.parent().unwrap().to_path_buf(); - - for i in 0..4 { - if gb_paths.rom[i].is_some() && gb_paths.ram[i].is_some() { - device.transferpaks[i].cart.rom = - std::fs::read(gb_paths.rom[i].as_ref().unwrap()).unwrap(); - - device.transferpaks[i].cart.ram = - std::fs::read(gb_paths.ram[i].as_ref().unwrap()).unwrap(); - } - } - - device.ui.usb.usb_tx = usb.usb_tx; - device.ui.usb.cart_rx = usb.cart_rx; - - device.vru_window.window_notifier = vru_channel.vru_window_notifier; - device.vru_window.word_receiver = vru_channel.vru_word_receiver; - - if let Some(rom_contents) = device::get_rom_contents(file_path.as_path()) { - if let Some(netplay_device) = netplay { - device.netplay = Some(netplay::init( - netplay_device.peer_addr, - netplay_device.player_number, - )); - } else { - game_settings.cheats = { - let game_crc = ui::storage::get_game_crc(&rom_contents); - let cheats = ui::config::Cheats::new(); - cheats.cheats.get(&game_crc).cloned().unwrap_or_default() - }; - } - device::run_game(&mut device, rom_contents, game_settings); - if device.netplay.is_some() { - netplay::close(&mut device); - } - } else { - println!("Could not read rom file"); - } - - if let Some(vru_window_notifier) = device.vru_window.window_notifier { - vru_window_notifier.try_send(None).unwrap(); - } - - let rom_dir = device.ui.config.rom_dir.clone(); - weak.upgrade_in_event_loop(move |handle| { - if let Some(rom_dir_str) = rom_dir.to_str() { - handle.set_rom_dir(rom_dir_str.into()); - } - handle.set_game_running(false); - }) + tokio::spawn(async move { + weak.upgrade_in_event_loop(move |handle| handle.set_game_running(true)) .unwrap(); + + let mut device = device::Device::new(); + device.ui.config.rom_dir = file_path.parent().unwrap().to_path_buf(); + + for i in 0..4 { + if gb_paths.rom[i].is_some() && gb_paths.ram[i].is_some() { + device.transferpaks[i].cart.rom = + std::fs::read(gb_paths.rom[i].as_ref().unwrap()).unwrap(); + + device.transferpaks[i].cart.ram = + std::fs::read(gb_paths.ram[i].as_ref().unwrap()).unwrap(); + } + } + + device.ui.usb.usb_tx = usb.usb_tx; + device.ui.usb.cart_rx = usb.cart_rx; + + device.ui.weak = Some(weak.clone()); + + if let Some(rom_contents) = device::get_rom_contents(file_path.as_path()) { + if let Some(netplay_device) = netplay { + device.netplay = Some(netplay::init( + netplay_device.peer_addr, + netplay_device.player_number, + )); + } else { + game_settings.cheats = { + let game_crc = ui::storage::get_game_crc(&rom_contents); + let cheats = ui::config::Cheats::new(); + cheats.cheats.get(&game_crc).cloned().unwrap_or_default() + }; + } + device::run_game(&mut device, rom_contents, game_settings); + if device.netplay.is_some() { + netplay::close(&mut device); + } + } else { + println!("Could not read rom file"); + } + + let rom_dir = device.ui.config.rom_dir.clone(); + weak.upgrade_in_event_loop(move |handle| { + if let Some(rom_dir_str) = rom_dir.to_str() { + handle.set_rom_dir(rom_dir_str.into()); + } + handle.set_game_running(false); }) .unwrap(); + }); } fn open_rom(app: &AppWindow, usb: ui::Usb) { @@ -486,25 +427,10 @@ fn open_rom(app: &AppWindow, usb: ui::Usb) { } } - #[allow(clippy::type_complexity)] - let (vru_window_notifier, vru_window_receiver): ( - tokio::sync::mpsc::Sender>>, - tokio::sync::mpsc::Receiver>>, - ) = tokio::sync::mpsc::channel(5); - - let (vru_word_notifier, vru_word_receiver): ( - tokio::sync::mpsc::Sender, - tokio::sync::mpsc::Receiver, - ) = tokio::sync::mpsc::channel(5); - let fullscreen = app.get_fullscreen(); let overclock = app.get_overclock_n64_cpu(); - let emulate_vru = app.get_emulate_vru(); let disable_expansion_pak = app.get_disable_expansion_pak(); - if emulate_vru { - setup_vru_word_watcher(app.as_weak(), vru_word_notifier, vru_window_receiver); - } let weak = app.as_weak(); tokio::spawn(async move { if let Some(file) = select_rom.await { @@ -533,17 +459,6 @@ fn open_rom(app: &AppWindow, usb: ui::Usb) { disable_expansion_pak, cheats: std::collections::HashMap::new(), // will be filled in later }, - if emulate_vru { - VruChannel { - vru_window_notifier: Some(vru_window_notifier), - vru_word_receiver: Some(vru_word_receiver), - } - } else { - VruChannel { - vru_window_notifier: None, - vru_word_receiver: None, - } - }, None, usb, weak, diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index b43150e..f839e45 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -2,7 +2,7 @@ use crate::device; use crate::ui; use crate::ui::gui::{ AppWindow, CustomNetplayServer, DispatcherDialog, ErrorDialog, GameSettings, GbPaths, - NetplayCreate, NetplayDevice, NetplayJoin, NetplayWait, VruChannel, run_rom, save_settings, + NetplayCreate, NetplayDevice, NetplayJoin, NetplayWait, run_rom, save_settings, }; use futures::{SinkExt, StreamExt}; use sha2::{Digest, Sha256}; @@ -1084,10 +1084,6 @@ fn setup_wait_window( disable_expansion_pak: game_settings.disable_expansion_pak, cheats: game_settings.cheats, }, - VruChannel { - vru_window_notifier: None, - vru_word_receiver: None, - }, Some(NetplayDevice { peer_addr: socket_addr, player_number: player_number as u8, diff --git a/src/ui/storage.rs b/src/ui/storage.rs index 5b0b06b..dff4a09 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -28,13 +28,13 @@ pub struct Paths { #[derive(serde::Serialize, serde::Deserialize)] pub struct Save { pub data: Vec, - pub written: bool, + pub write_pending: bool, } #[derive(serde::Serialize, serde::Deserialize)] pub struct RomSave { pub data: std::collections::HashMap, - pub written: bool, + pub write_pending: bool, } #[derive(serde::Serialize, serde::Deserialize)] @@ -357,7 +357,7 @@ pub fn compress_file(data: &[(&[u8], &str)]) -> Vec { fn writeback_sdcard(device: &mut device::Device) { let length; let save_data: &[u8]; - if device.ui.storage.saves.eeprom.written { + if device.ui.storage.saves.eeprom.write_pending { if device .ui .storage @@ -369,12 +369,15 @@ fn writeback_sdcard(device: &mut device::Device) { length = 4; } save_data = device.ui.storage.saves.eeprom.data.as_ref(); - } else if device.ui.storage.saves.sram.written { + device.ui.storage.saves.eeprom.write_pending = false; + } else if device.ui.storage.saves.sram.write_pending { length = device.ui.storage.saves.sram.data.len() / 512; save_data = device.ui.storage.saves.sram.data.as_ref(); - } else if device.ui.storage.saves.flash.written { + device.ui.storage.saves.sram.write_pending = false; + } else if device.ui.storage.saves.flash.write_pending { length = device.ui.storage.saves.flash.data.len() / 512; save_data = device.ui.storage.saves.flash.data.as_ref(); + device.ui.storage.saves.flash.write_pending = false; } else { return; } @@ -384,37 +387,69 @@ fn writeback_sdcard(device: &mut device::Device) { device.ui.storage.saves.sdcard.data[offset..offset + 512] .copy_from_slice(&save_data[i * 512..(i + 1) * 512]); } - device.ui.storage.saves.sdcard.written = true; + device.ui.storage.saves.sdcard.write_pending = true; } pub fn write_saves(device: &mut device::Device) { if device.netplay.is_none() || device.netplay.as_ref().unwrap().player_number == 0 { if device.ui.storage.saves.write_to_disk { - if device.ui.storage.saves.eeprom.written { - write_save(&device.ui, SaveTypes::Eeprom16k) + if device.ui.storage.saves.eeprom.write_pending { + write_save(&mut device.ui, SaveTypes::Eeprom16k) } - if device.ui.storage.saves.sram.written { - write_save(&device.ui, SaveTypes::Sram) + if device.ui.storage.saves.sram.write_pending { + write_save(&mut device.ui, SaveTypes::Sram) } - if device.ui.storage.saves.flash.written { - write_save(&device.ui, SaveTypes::Flash) + if device.ui.storage.saves.flash.write_pending { + write_save(&mut device.ui, SaveTypes::Flash) } - if device.ui.storage.saves.romsave.written { - write_save(&device.ui, SaveTypes::Romsave) + if device.ui.storage.saves.romsave.write_pending { + write_save(&mut device.ui, SaveTypes::Romsave) } } else { writeback_sdcard(device) } - if device.ui.storage.saves.mempak.written { - write_save(&device.ui, SaveTypes::Mempak) + if device.ui.storage.saves.mempak.write_pending { + write_save(&mut device.ui, SaveTypes::Mempak) } - if device.ui.storage.saves.sdcard.written { - write_save(&device.ui, SaveTypes::Sdcard) + if device.ui.storage.saves.sdcard.write_pending { + write_save(&mut device.ui, SaveTypes::Sdcard) } } } -fn write_save(ui: &ui::Ui, save_type: SaveTypes) { +pub fn save_event(device: &mut device::Device) { + write_saves(device); +} + +pub fn schedule_save(device: &mut device::Device, save_type: SaveTypes) { + match save_type { + SaveTypes::Eeprom4k | SaveTypes::Eeprom16k => { + device.ui.storage.saves.eeprom.write_pending = true; + } + SaveTypes::Sram => { + device.ui.storage.saves.sram.write_pending = true; + } + SaveTypes::Flash => { + device.ui.storage.saves.flash.write_pending = true; + } + SaveTypes::Mempak => { + device.ui.storage.saves.mempak.write_pending = true; + } + SaveTypes::Sdcard => { + device.ui.storage.saves.sdcard.write_pending = true; + } + SaveTypes::Romsave => { + device.ui.storage.saves.romsave.write_pending = true; + } + } + device::events::create_event( + device, + device::events::EVENT_TYPE_SAVE, + device.cpu.clock_rate, // 1 second + ); +} + +fn write_save(ui: &mut ui::Ui, save_type: SaveTypes) { let path: &std::path::Path; let data: &Vec; let rom_save_data: Vec; @@ -422,35 +457,38 @@ fn write_save(ui: &ui::Ui, save_type: SaveTypes) { SaveTypes::Eeprom4k | SaveTypes::Eeprom16k => { path = ui.storage.paths.eep_file_path.as_ref(); data = ui.storage.saves.eeprom.data.as_ref(); + ui.storage.saves.eeprom.write_pending = false; } SaveTypes::Sram => { path = ui.storage.paths.sra_file_path.as_ref(); data = ui.storage.saves.sram.data.as_ref(); + ui.storage.saves.sram.write_pending = false; } SaveTypes::Flash => { path = ui.storage.paths.fla_file_path.as_ref(); data = ui.storage.saves.flash.data.as_ref(); + ui.storage.saves.flash.write_pending = false; } SaveTypes::Mempak => { path = ui.storage.paths.pak_file_path.as_ref(); data = ui.storage.saves.mempak.data.as_ref(); + ui.storage.saves.mempak.write_pending = false; } SaveTypes::Sdcard => { path = ui.storage.paths.sdcard_file_path.as_ref(); data = ui.storage.saves.sdcard.data.as_ref(); + ui.storage.saves.sdcard.write_pending = false; } SaveTypes::Romsave => { path = ui.storage.paths.romsave_file_path.as_ref(); rom_save_data = postcard::to_stdvec(&ui.storage.saves.romsave.data).unwrap(); data = rom_save_data.as_ref(); + ui.storage.saves.romsave.write_pending = false; } } - let result = std::fs::write(path, data); - if result.is_err() { - panic!( - "could not save {} {}", - path.display(), - result.err().unwrap() - ) - } + let save_data = data.clone(); + let save_path = path.to_path_buf(); + tokio::spawn(async move { + tokio::fs::write(save_path, save_data).await.unwrap(); + }); } diff --git a/src/ui/usb.rs b/src/ui/usb.rs index afd675b..d5c7db1 100644 --- a/src/ui/usb.rs +++ b/src/ui/usb.rs @@ -53,10 +53,6 @@ fn upload_rom( disable_expansion_pak: handle.get_disable_expansion_pak(), cheats: std::collections::HashMap::new(), // will be filled in later }, - ui::gui::VruChannel { - vru_window_notifier: None, - vru_word_receiver: None, - }, None, ui::Usb { usb_tx: Some(usb_tx), diff --git a/src/ui/vru.rs b/src/ui/vru.rs index 457f83f..6615450 100644 --- a/src/ui/vru.rs +++ b/src/ui/vru.rs @@ -1,16 +1,49 @@ +use crate::gui; +use slint::ComponentHandle; + pub fn prompt_for_match( words: &[String], - window_notifier: &tokio::sync::mpsc::Sender>>, - word_index_receiver: &mut tokio::sync::mpsc::Receiver, + weak_vru: &slint::Weak, frame_time: f64, ) -> u16 { let mut dedup_words = words.to_owned(); dedup_words.sort(); dedup_words.dedup(); - window_notifier.try_send(Some(dedup_words)).unwrap(); - let mut result = word_index_receiver.try_recv(); + + let (tx, mut rx) = tokio::sync::mpsc::channel(1); + + weak_vru + .upgrade_in_event_loop(move |_handle| { + let vru_dialog = gui::VruDialog::new().unwrap(); + let vru_dialog_weak = vru_dialog.as_weak(); + + let tx_clicked = tx.clone(); + + vru_dialog.on_vru_button_clicked(move |chosen_word| { + tx_clicked.try_send(chosen_word.to_string()).unwrap(); + vru_dialog_weak.unwrap().window().hide().unwrap(); + }); + + vru_dialog.window().on_close_requested(move || { + tx.try_send("".to_string()).unwrap(); + slint::CloseRequestResponse::HideWindow + }); + + let words_vec = slint::VecModel::default(); + for word in dedup_words { + words_vec.push(word.into()); + } + let words_model: std::rc::Rc> = + std::rc::Rc::new(words_vec); + vru_dialog.set_words(slint::ModelRc::from(words_model)); + + vru_dialog.show().unwrap(); + }) + .unwrap(); + + let mut result = rx.try_recv(); while result.is_err() { - result = word_index_receiver.try_recv(); + result = rx.try_recv(); std::thread::sleep(std::time::Duration::from_secs_f64(frame_time)); unsafe { sdl3_sys::events::SDL_PumpEvents() }; // so the OS doesn't complain about the game window being frozen } From e9e71a6e02cdae6acb473cc4d6b7e9fe6379638a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 22 Jan 2026 20:24:41 +0100 Subject: [PATCH 0669/1117] Update to rust 1.93.0 (#659) --- Cargo.lock | 36 ++++++++++++++++++++++-------------- Cargo.toml | 2 +- rust-toolchain.toml | 2 +- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0db0394..1907c65 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1423,9 +1423,9 @@ checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" [[package]] name = "euclid" -version = "0.22.11" +version = "0.22.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48" +checksum = "df61bf483e837f88d5c2291dcf55c67be7e676b3a51acc48db3a7b163b91ed63" dependencies = [ "num-traits", ] @@ -3690,9 +3690,9 @@ dependencies = [ [[package]] name = "openssl-probe" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f50d9b3dabb09ecd771ad0aa242ca6894994c130308ca3d7684634df8037391" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "option-ext" @@ -3995,9 +3995,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.105" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] @@ -5391,6 +5391,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9e442fc33d7fdb45aa9bfeb312c095964abdf596f7567261062b2a7107aaabd" dependencies = [ "deranged", + "js-sys", "num-conv", "powerfmt", "serde_core", @@ -5706,6 +5707,12 @@ dependencies = [ "serde", ] +[[package]] +name = "typed-path" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7922f2cdc51280d47b491af9eafc41eb0cdab85eabcb390c854412fcbf26dbe8" + [[package]] name = "typenum" version = "1.19.0" @@ -6962,9 +6969,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.13.1" +version = "5.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f79257df967b6779afa536788657777a0001f5b42524fcaf5038d4344df40b" +checksum = "1bfeff997a0aaa3eb20c4652baf788d2dfa6d2839a0ead0b3ff69ce2f9c4bdd1" dependencies = [ "async-broadcast", "async-executor", @@ -6997,9 +7004,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.13.1" +version = "5.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aad23e2d2f91cae771c7af7a630a49e755f1eb74f8a46e9f6d5f7a146edf5a37" +checksum = "0bbd5a90dbe8feee5b13def448427ae314ccd26a49cac47905cafefb9ff846f1" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -7124,9 +7131,9 @@ dependencies = [ [[package]] name = "zip" -version = "7.1.0" +version = "7.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9013f1222db8a6d680f13a7ccdc60a781199cd09c2fa4eff58e728bb181757fc" +checksum = "c42e33efc22a0650c311c2ef19115ce232583abbe80850bc8b66509ebef02de0" dependencies = [ "aes", "bzip2", @@ -7144,6 +7151,7 @@ dependencies = [ "ppmd-rust", "sha1", "time", + "typed-path", "zeroize", "zopfli", "zstd", @@ -7157,9 +7165,9 @@ checksum = "40990edd51aae2c2b6907af74ffb635029d5788228222c4bb811e9351c0caad3" [[package]] name = "zmij" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f63c051f4fe3c1509da62131a678643c5b6fbdc9273b2b79d4378ebda003d2" +checksum = "dfcd145825aace48cff44a8844de64bf75feec3080e0aa5cdbde72961ae51a65" [[package]] name = "zopfli" diff --git a/Cargo.toml b/Cargo.toml index d3e24bb..c68afb5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "gopher64" version = "1.1.12" edition = "2024" -rust-version = "1.92.0" +rust-version = "1.93.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/rust-toolchain.toml b/rust-toolchain.toml index f19782d..075062e 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.92.0" +channel = "1.93.0" From 59379225586376dea0c295140e3e1c6baf88cadc Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 22 Jan 2026 20:44:17 +0100 Subject: [PATCH 0670/1117] fix issue with emux_xdetect --- src/device/cop0.rs | 66 ++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/src/device/cop0.rs b/src/device/cop0.rs index dcc2caa..41535bd 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -179,6 +179,8 @@ pub fn reserved(device: &mut device::Device, _opcode: u32) { device::exceptions::reserved_exception(device, 0); } +pub fn emux_xdetect(_device: &mut device::Device, _opcode: u32) {} + fn get_control_registers(device: &device::Device, index: u32) -> u64 { match index { COP0_COUNT_REG => device.cpu.cop0.regs[index as usize] >> 1, @@ -261,38 +263,38 @@ pub fn add_cycles(device: &mut device::Device, cycles: u64) { pub fn map_instructions(device: &mut device::Device) { device.cpu.cop0.instrs = [ - device::cop0::mfc0, // 0 - device::cop0::dmfc0, // 1 - device::cop0::reserved, // 2 - device::cop0::reserved, // 3 - device::cop0::mtc0, // 4 - device::cop0::dmtc0, // 5 - device::cop0::reserved, // 6 - device::cop0::reserved, // 7 - device::cop0::reserved, // 8 - device::cop0::reserved, // 9 - device::cop0::reserved, // 10 - device::cop0::reserved, // 11 - device::cop0::reserved, // 12 - device::cop0::reserved, // 13 - device::cop0::reserved, // 14 - device::cop0::reserved, // 15 - device::cop0::execute_cp0, // 16 - device::cop0::reserved, // 17 - device::cop0::reserved, // 18 - device::cop0::reserved, // 19 - device::cop0::reserved, // 20 - device::cop0::reserved, // 21 - device::cop0::reserved, // 22 - device::cop0::reserved, // 23 - device::cop0::reserved, // 24 - device::cop0::reserved, // 25 - device::cop0::reserved, // 26 - device::cop0::reserved, // 27 - device::cop0::reserved, // 28 - device::cop0::reserved, // 29 - device::cop0::reserved, // 30 - device::cop0::reserved, // 31 + device::cop0::mfc0, // 0 + device::cop0::dmfc0, // 1 + device::cop0::reserved, // 2 + device::cop0::reserved, // 3 + device::cop0::mtc0, // 4 + device::cop0::dmtc0, // 5 + device::cop0::reserved, // 6 + device::cop0::reserved, // 7 + device::cop0::reserved, // 8 + device::cop0::reserved, // 9 + device::cop0::reserved, // 10 + device::cop0::reserved, // 11 + device::cop0::reserved, // 12 + device::cop0::reserved, // 13 + device::cop0::reserved, // 14 + device::cop0::reserved, // 15 + device::cop0::execute_cp0, // 16 + device::cop0::reserved, // 17 + device::cop0::reserved, // 18 + device::cop0::reserved, // 19 + device::cop0::emux_xdetect, // 20 + device::cop0::reserved, // 21 + device::cop0::reserved, // 22 + device::cop0::reserved, // 23 + device::cop0::reserved, // 24 + device::cop0::reserved, // 25 + device::cop0::reserved, // 26 + device::cop0::reserved, // 27 + device::cop0::reserved, // 28 + device::cop0::reserved, // 29 + device::cop0::reserved, // 30 + device::cop0::reserved, // 31 ]; device.cpu.cop0.instrs2 = [ From ceaf56c563fd2983b98e104a0a25c2cdba360b75 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 22 Jan 2026 21:00:26 +0100 Subject: [PATCH 0671/1117] bump to 1.1.13 --- Cargo.lock | 6 +++--- Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1907c65..b885a92 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1944,7 +1944,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.12" +version = "1.1.13" dependencies = [ "bindgen", "cc", @@ -5709,9 +5709,9 @@ dependencies = [ [[package]] name = "typed-path" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7922f2cdc51280d47b491af9eafc41eb0cdab85eabcb390c854412fcbf26dbe8" +checksum = "e43ffa54726cdc9ea78392023ffe9fe9cf9ac779e1c6fcb0d23f9862e3879d20" [[package]] name = "typenum" diff --git a/Cargo.toml b/Cargo.toml index c68afb5..8a1fa5f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.12" +version = "1.1.13" edition = "2024" rust-version = "1.93.0" From b460d557143ebb2ce69c3231e05016d5ac52f517 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 25 Jan 2026 13:35:59 +0100 Subject: [PATCH 0672/1117] use SDL_HAPTIC_INFINITY --- src/ui/input.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/input.rs b/src/ui/input.rs index 82f7e3f..dd83e53 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -309,7 +309,7 @@ pub fn set_rumble(ui: &ui::Ui, channel: usize, rumble: u8) { controller, (rumble & 1) as u16 * u16::MAX, (rumble & 1) as u16 * u16::MAX, - (rumble & 1) as u32 * 60000, + (rumble & 1) as u32 * sdl3_sys::haptic::SDL_HAPTIC_INFINITY, ) }; } else if !joystick.is_null() { @@ -318,7 +318,7 @@ pub fn set_rumble(ui: &ui::Ui, channel: usize, rumble: u8) { joystick, (rumble & 1) as u16 * u16::MAX, (rumble & 1) as u16 * u16::MAX, - (rumble & 1) as u32 * 60000, + (rumble & 1) as u32 * sdl3_sys::haptic::SDL_HAPTIC_INFINITY, ) }; } From 7f84eb2affedad3c06781ff4abdb7cfe3c84926a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 26 Jan 2026 21:44:03 +0100 Subject: [PATCH 0673/1117] add missing gamepad button types --- src/ui/input.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/ui/input.rs b/src/ui/input.rs index dd83e53..d829312 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -143,6 +143,17 @@ fn get_button_from_i32(button: i32) -> sdl3_sys::gamepad::SDL_GamepadButton { 12 => sdl3_sys::gamepad::SDL_GamepadButton::DPAD_DOWN, 13 => sdl3_sys::gamepad::SDL_GamepadButton::DPAD_LEFT, 14 => sdl3_sys::gamepad::SDL_GamepadButton::DPAD_RIGHT, + 15 => sdl3_sys::gamepad::SDL_GamepadButton::MISC1, + 16 => sdl3_sys::gamepad::SDL_GamepadButton::RIGHT_PADDLE1, + 17 => sdl3_sys::gamepad::SDL_GamepadButton::LEFT_PADDLE1, + 18 => sdl3_sys::gamepad::SDL_GamepadButton::RIGHT_PADDLE2, + 19 => sdl3_sys::gamepad::SDL_GamepadButton::LEFT_PADDLE2, + 20 => sdl3_sys::gamepad::SDL_GamepadButton::TOUCHPAD, + 21 => sdl3_sys::gamepad::SDL_GamepadButton::MISC2, + 22 => sdl3_sys::gamepad::SDL_GamepadButton::MISC3, + 23 => sdl3_sys::gamepad::SDL_GamepadButton::MISC4, + 24 => sdl3_sys::gamepad::SDL_GamepadButton::MISC5, + 25 => sdl3_sys::gamepad::SDL_GamepadButton::MISC6, _ => panic!("Invalid button"), } } From 0aab9f71e13a3aae516a825ae656d6759a8c88d9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 29 Jan 2026 21:58:06 +0100 Subject: [PATCH 0674/1117] cargo update --- Cargo.lock | 90 +++++++++++++++++++++++++++--------------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b885a92..8f34c43 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -435,9 +435,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.15.3" +version = "1.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e84ce723ab67259cfeb9877c6a639ee9eb7a27b28123abd71db7f0d5d0cc9d86" +checksum = "7b7b6141e96a8c160799cc2d5adecd5cbbe5054cb8c7c4af53da0f83bb7ad256" dependencies = [ "aws-lc-sys", "zeroize", @@ -445,9 +445,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.36.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a442ece363113bd4bd4c8b18977a7798dd4d3c3383f34fb61936960e8f4ad8" +checksum = "5c34dda4df7017c8db52132f0f8a2e0f8161649d15723ed63fc00c82d0f2081a" dependencies = [ "cc", "cmake", @@ -688,9 +688,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.53" +version = "1.2.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "755d2fce177175ffca841e9a06afdb2c4ab0f593d53b4dee48147dfaade85932" +checksum = "6354c81bbfd62d9cfa9cb3c773c2b7b2a3a482d569de977fd0e961f6e7c00583" dependencies = [ "find-msvc-tools", "jobserver", @@ -770,9 +770,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.54" +version = "4.5.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394" +checksum = "a75ca66430e33a14957acc24c5077b503e7d374151b2b4b3a10c83b4ceb4be0e" dependencies = [ "clap_builder", "clap_derive", @@ -780,9 +780,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.54" +version = "4.5.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00" +checksum = "793207c7fa6300a0608d1080b858e5fdbe713cdc1c8db9fb17777d8a13e63df0" dependencies = [ "anstream", "anstyle", @@ -792,9 +792,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.49" +version = "4.5.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -2442,9 +2442,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.64" +version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -2588,7 +2588,7 @@ dependencies = [ "rgb", "tiff", "zune-core 0.5.1", - "zune-jpeg 0.5.11", + "zune-jpeg 0.5.12", ] [[package]] @@ -2868,9 +2868,9 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libmimalloc-sys" @@ -3234,9 +3234,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" [[package]] name = "num-derive" @@ -3961,9 +3961,9 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppmd-rust" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d558c559f0450f16f2a27a1f017ef38468c1090c9ce63c8e51366232d53717b4" +checksum = "efca4c95a19a79d1c98f791f10aebd5c1363b473244630bb7dbde1dc98455a24" [[package]] name = "ppv-lite86" @@ -4127,9 +4127,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.43" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a" +checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" dependencies = [ "proc-macro2", ] @@ -4902,9 +4902,9 @@ dependencies = [ [[package]] name = "siphasher" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" +checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" [[package]] name = "skia-bindings" @@ -5097,9 +5097,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" dependencies = [ "libc", "windows-sys 0.60.2", @@ -5386,9 +5386,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.45" +version = "0.3.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9e442fc33d7fdb45aa9bfeb312c095964abdf596f7567261062b2a7107aaabd" +checksum = "9da98b7d9b7dad93488a84b8248efc35352b0b2657397d4167e7ad67e5d535e5" dependencies = [ "deranged", "js-sys", @@ -5400,9 +5400,9 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b36ee98fd31ec7426d599183e8fe26932a8dc1fb76ddb6214d05493377d34ca" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "tiny-skia" @@ -5709,9 +5709,9 @@ dependencies = [ [[package]] name = "typed-path" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e43ffa54726cdc9ea78392023ffe9fe9cf9ac779e1c6fcb0d23f9862e3879d20" +checksum = "3015e6ce46d5ad8751e4a772543a30c7511468070e98e64e20165f8f81155b64" [[package]] name = "typenum" @@ -5873,9 +5873,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" +checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f" dependencies = [ "js-sys", "serde_core", @@ -6788,9 +6788,9 @@ dependencies = [ [[package]] name = "winresource" -version = "0.1.29" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cdfa8da4b111045a5e47c7c839e6c5e11c942de1309bc624393ed5d87f89c6" +checksum = "e287ced0f21cd11f4035fe946fd3af145f068d1acb708afd248100f89ec7432d" dependencies = [ "toml", "version_check", @@ -7036,18 +7036,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.33" +version = "0.8.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668f5168d10b9ee831de31933dc111a459c97ec93225beb307aed970d1372dfd" +checksum = "dafd85c832c1b68bbb4ec0c72c7f6f4fc5179627d2bc7c26b30e4c0cc11e76cc" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.33" +version = "0.8.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c7962b26b0a8685668b671ee4b54d007a67d4eaf05fda79ac0ecf41e32270f1" +checksum = "7cb7e4e8436d9db52fbd6625dbf2f45243ab84994a72882ec8227b99e72b439a" dependencies = [ "proc-macro2", "quote", @@ -7165,9 +7165,9 @@ checksum = "40990edd51aae2c2b6907af74ffb635029d5788228222c4bb811e9351c0caad3" [[package]] name = "zmij" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfcd145825aace48cff44a8844de64bf75feec3080e0aa5cdbde72961ae51a65" +checksum = "02aae0f83f69aafc94776e879363e9771d7ecbffe2c7fbb6c14c5e00dfe88439" [[package]] name = "zopfli" @@ -7241,9 +7241,9 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.5.11" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2959ca473aae96a14ecedf501d20b3608d2825ba280d5adb57d651721885b0c2" +checksum = "410e9ecef634c709e3831c2cfdb8d9c32164fae1c67496d5b68fff728eec37fe" dependencies = [ "zune-core 0.5.1", ] From f29f4974055cd7ab97f1dd084b04fbfd9648ba15 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 29 Jan 2026 21:58:40 +0100 Subject: [PATCH 0675/1117] bump to 1.1.14 --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8f34c43..9ced2f5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1944,7 +1944,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.13" +version = "1.1.14" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index 8a1fa5f..566439c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.13" +version = "1.1.14" edition = "2024" rust-version = "1.93.0" From 22d57677cbd376cb9df78de6c1a52514c08fca3b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 3 Feb 2026 20:49:46 +0100 Subject: [PATCH 0676/1117] cargo update --- Cargo.lock | 73 +++++++++++++++++++++++++++--------------------------- 1 file changed, 36 insertions(+), 37 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9ced2f5..66365b3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -590,9 +590,9 @@ checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" [[package]] name = "bytemuck" -version = "1.24.0" +version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" dependencies = [ "bytemuck_derive", ] @@ -622,9 +622,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "bzip2" @@ -688,9 +688,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.54" +version = "1.2.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6354c81bbfd62d9cfa9cb3c773c2b7b2a3a482d569de977fd0e961f6e7c00583" +checksum = "47b26a0954ae34af09b50f0de26458fa95369a0d478d8236d3f93082b219bd29" dependencies = [ "find-msvc-tools", "jobserver", @@ -770,9 +770,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.56" +version = "4.5.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75ca66430e33a14957acc24c5077b503e7d374151b2b4b3a10c83b4ceb4be0e" +checksum = "6899ea499e3fb9305a65d5ebf6e3d2248c5fab291f300ad0a704fbe142eae31a" dependencies = [ "clap_builder", "clap_derive", @@ -780,9 +780,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.56" +version = "4.5.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793207c7fa6300a0608d1080b858e5fdbe713cdc1c8db9fb17777d8a13e63df0" +checksum = "7b12c8b680195a62a8364d16b8447b01b6c2c8f9aaf68bee653be34d4245e238" dependencies = [ "anstream", "anstyle", @@ -1112,9 +1112,9 @@ dependencies = [ [[package]] name = "ctor-lite" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f791803201ab277ace03903de1594460708d2d54df6053f2d9e82f592b19e3b" +checksum = "b29fccfdaeb0f9bd90da5759b1d0eaa2f6cfcfe90960124cfc83141ed4e111fd" [[package]] name = "cursor-icon" @@ -1536,15 +1536,15 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8591b0bcc8a98a64310a2fae1bb3e9b8564dd10e381e6e28010fde8e8e8568db" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "flate2" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b375d6465b98090a5f25b1c7703f3859783755aa9a80433b36e0379a3ec2f369" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ "crc32fast", "miniz_oxide", @@ -2217,14 +2217,13 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ "base64", "bytes", "futures-channel", - "futures-core", "futures-util", "http", "http-body", @@ -3924,9 +3923,9 @@ checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" [[package]] name = "portable-atomic" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" dependencies = [ "critical-section", ] @@ -4317,9 +4316,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.2" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", @@ -4329,9 +4328,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", @@ -4340,9 +4339,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" +checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" [[package]] name = "reqwest" @@ -4946,9 +4945,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "slabbin" @@ -7036,18 +7035,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.36" +version = "0.8.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dafd85c832c1b68bbb4ec0c72c7f6f4fc5179627d2bc7c26b30e4c0cc11e76cc" +checksum = "57cf3aa6855b23711ee9852dfc97dfaa51c45feaba5b645d0c777414d494a961" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.36" +version = "0.8.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cb7e4e8436d9db52fbd6625dbf2f45243ab84994a72882ec8227b99e72b439a" +checksum = "8a616990af1a287837c4fe6596ad77ef57948f787e46ce28e166facc0cc1cb75" dependencies = [ "proc-macro2", "quote", @@ -7159,15 +7158,15 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.5.5" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40990edd51aae2c2b6907af74ffb635029d5788228222c4bb811e9351c0caad3" +checksum = "a7948af682ccbc3342b6e9420e8c51c1fe5d7bf7756002b4a3c6cabfe96a7e3c" [[package]] name = "zmij" -version = "1.0.17" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02aae0f83f69aafc94776e879363e9771d7ecbffe2c7fbb6c14c5e00dfe88439" +checksum = "3ff05f8caa9038894637571ae6b9e29466c1f4f829d26c9b28f869a29cbe3445" [[package]] name = "zopfli" From cedb2d5c2241616408b220a8fc18d532569d8991 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 4 Feb 2026 18:05:03 +0100 Subject: [PATCH 0677/1117] update slint --- Cargo.lock | 481 +++++++++++++++++++++++++++++------------------------ Cargo.toml | 2 +- 2 files changed, 268 insertions(+), 215 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 66365b3..5b0c47f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -117,6 +117,16 @@ dependencies = [ "libc", ] +[[package]] +name = "annotate-snippets" +version = "0.12.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e4850548ff4a25a77ce3bda7241874e17fb702ea551f0cc62a2dbe052f1272" +dependencies = [ + "anstyle", + "unicode-width", +] + [[package]] name = "anstream" version = "0.6.21" @@ -217,15 +227,6 @@ dependencies = [ "stable_deref_trait", ] -[[package]] -name = "ash" -version = "0.38.0+1.3.281" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" -dependencies = [ - "libloading", -] - [[package]] name = "async-broadcast" version = "0.7.2" @@ -796,7 +797,7 @@ version = "4.5.55" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", "syn", @@ -841,22 +842,6 @@ dependencies = [ "thiserror 2.0.18", ] -[[package]] -name = "codemap" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e769b5c8c8283982a987c6e948e540254f1058d5a74b8794914d4ef5fc2a24" - -[[package]] -name = "codemap-diagnostic" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc20770be05b566a963bf91505e60412c4a2d016d1ef95c5512823bb085a8122" -dependencies = [ - "codemap", - "termcolor", -] - [[package]] name = "color_quant" version = "1.1.0" @@ -1079,15 +1064,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "crossbeam-queue" -version = "0.3.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "crossbeam-utils" version = "0.8.21" @@ -1609,12 +1585,12 @@ dependencies = [ [[package]] name = "fontique" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff3336bc0b87fe42305047263fa60d2eabd650d29cbe62fdeb2a66c7a0a595f9" +checksum = "30bbc252c93499b6d3635d692f892a637db0dbb130ce9b32bf20b28e0dcc470b" dependencies = [ "bytemuck", - "hashbrown 0.15.5", + "hashbrown 0.16.1", "icu_locale_core", "linebender_resource_handle", "memmap2", @@ -1780,6 +1756,28 @@ dependencies = [ "slab", ] +[[package]] +name = "gbm" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce852e998d3ca5e4a97014fb31c940dc5ef344ec7d364984525fd11e8a547e6a" +dependencies = [ + "bitflags 2.10.0", + "drm", + "drm-fourcc", + "gbm-sys", + "libc", +] + +[[package]] +name = "gbm-sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c13a5f2acc785d8fb6bf6b7ab6bfb0ef5dad4f4d97e8e70bb8e470722312f76f" +dependencies = [ + "libc", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -1800,6 +1798,15 @@ dependencies = [ "windows-link", ] +[[package]] +name = "getopts" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe4fbac503b8d1f88e6676011885f34b7174f46e59956bba534ba83abded4df" +dependencies = [ + "unicode-width", +] + [[package]] name = "getrandom" version = "0.2.17" @@ -1827,16 +1834,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "gif" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae047235e33e2829703574b54fdec96bfbad892062d97fed2f76022287de61b" -dependencies = [ - "color_quant", - "weezl", -] - [[package]] name = "gif" version = "0.14.1" @@ -2028,7 +2025,6 @@ version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ - "bytemuck", "cfg-if", "crunchy", "zerocopy", @@ -2099,12 +2095,6 @@ dependencies = [ "stable_deref_trait", ] -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - [[package]] name = "heck" version = "0.5.0" @@ -2138,6 +2128,12 @@ dependencies = [ "digest", ] +[[package]] +name = "htmlparser" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48ce8546b993eaf241d69ded33b1be6d205dd9857ec879d9d18bd05d3676e144" + [[package]] name = "http" version = "1.4.0" @@ -2240,27 +2236,29 @@ dependencies = [ [[package]] name = "i-slint-backend-linuxkms" -version = "1.14.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8fd06c00fbdac3dd490cf5c10da7daad3820d775060a19ea277d8ab944a160b" +checksum = "ae11a0137fe698e7910fda141902b2d0cbaa6dcb9411bdd4a39dfaa80b3fe5cd" dependencies = [ "calloop 0.14.3", "drm", + "gbm", + "glutin", "i-slint-common", "i-slint-core", "i-slint-renderer-skia", "input", "memmap2", "nix", - "vulkano", + "raw-window-handle", "xkbcommon", ] [[package]] name = "i-slint-backend-selector" -version = "1.14.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e138660c634d6bbdf98bb2d0cfa487cda28e032e133a2a2c974f1cc494198765" +checksum = "e7017b9d1ffba8aaf41d77aec58585bd1c0fb715e69daa166dde689094b24a8c" dependencies = [ "cfg-if", "i-slint-backend-linuxkms", @@ -2268,15 +2266,15 @@ dependencies = [ "i-slint-common", "i-slint-core", "i-slint-core-macros", - "i-slint-renderer-skia", ] [[package]] name = "i-slint-backend-winit" -version = "1.14.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69bf9167fb1165942ef1f034e039645b60b07b23c0c76069cb83595f979243a4" +checksum = "0671a45624e5c7bb365dcdf66bde20f97a29240d07e9fb55c0bb12d3b612bedf" dependencies = [ + "block2 0.6.2", "cfg-if", "cfg_aliases", "copypasta", @@ -2290,7 +2288,11 @@ dependencies = [ "i-slint-renderer-skia", "lyon_path", "muda", + "objc2 0.6.3", "objc2-app-kit 0.3.2", + "objc2-foundation 0.3.2", + "objc2-quartz-core 0.3.2", + "objc2-ui-kit 0.3.2", "pin-weak", "raw-window-handle", "scoped-tls-hkt", @@ -2307,9 +2309,9 @@ dependencies = [ [[package]] name = "i-slint-common" -version = "1.14.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3566194c13f8dcf6e9f41a2090c96f08cf3f59b60c91380a86c1ed72f6e7d19" +checksum = "c7df69e8ff23fd605ac12112e31844f92b83e5958235f3ec446efe79bc868e65" dependencies = [ "fontique", "ttf-parser 0.25.1", @@ -2317,13 +2319,12 @@ dependencies = [ [[package]] name = "i-slint-compiler" -version = "1.14.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a301031f6c1da6acdd483641cc44109b34990e5edd67478eb0cbca359ab7ae3f" +checksum = "b09f34ca3843cae3e92c1a8a4167680e4e4a2f72ea16bcbded9bc06271393427" dependencies = [ + "annotate-snippets", "by_address", - "codemap", - "codemap-diagnostic", "derive_more", "fontdue", "i-slint-common", @@ -2333,12 +2334,12 @@ dependencies = [ "lyon_extra", "lyon_path", "num_enum", - "polib", "proc-macro2", "quote", "rayon", "resvg", "rowan", + "rspolib", "smol_str 0.3.5", "strum", "typed-index-collections", @@ -2347,9 +2348,9 @@ dependencies = [ [[package]] name = "i-slint-core" -version = "1.14.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc140f1218cfc4451b9e8753306c42afbcaf0386cc888e53664c1a5f5330ae19" +checksum = "75363fba36ebf55a78cf99449fee8b35d3990fe02042598131242b9e19f8d604" dependencies = [ "auto_enums", "bitflags 2.10.0", @@ -2359,10 +2360,10 @@ dependencies = [ "const-field-offset", "derive_more", "euclid", + "htmlparser", "i-slint-common", "i-slint-core-macros", "image", - "integer-sqrt", "lyon_algorithms", "lyon_extra", "lyon_geom", @@ -2373,14 +2374,17 @@ dependencies = [ "pin-project", "pin-weak", "portable-atomic", + "pulldown-cmark", "raw-window-handle", "resvg", "rgb", "scoped-tls-hkt", "scopeguard", + "skrifa", "slab", "strum", "sys-locale", + "thiserror 2.0.18", "unicode-linebreak", "unicode-script", "unicode-segmentation", @@ -2392,9 +2396,9 @@ dependencies = [ [[package]] name = "i-slint-core-macros" -version = "1.14.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4c6a3975ccaa66415f5524292750e631879e69178aa97e3928d2396b790d00d" +checksum = "6f35143e83e9071e0346695ccdea2c0677575d24ed830a5fc923255d62272b4b" dependencies = [ "quote", "serde_json", @@ -2403,11 +2407,10 @@ dependencies = [ [[package]] name = "i-slint-renderer-skia" -version = "1.14.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e26ed0d42d66c457b7937d7f5ee07d2fbef3691c896a26212a69b30288844ddd" +checksum = "9acc871405ebed9625106c5537317774f39347c5e64f5133f057db3eed691b17" dependencies = [ - "ash", "bytemuck", "cfg-if", "cfg_aliases", @@ -2434,11 +2437,30 @@ dependencies = [ "softbuffer", "unicode-segmentation", "vtable", - "vulkano", "windows 0.62.2", "write-fonts", ] +[[package]] +name = "i-slint-renderer-software" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1b7573463244ff0c2c1da5c57ad82334ea16dbc591c9ac0da0263915be63f99" +dependencies = [ + "bytemuck", + "clru", + "derive_more", + "euclid", + "fontdue", + "i-slint-common", + "i-slint-core", + "integer-sqrt", + "lyon_path", + "num-traits", + "skrifa", + "zeno", +] + [[package]] name = "iana-time-zone" version = "0.1.65" @@ -2576,7 +2598,7 @@ dependencies = [ "byteorder-lite", "color_quant", "exr", - "gif 0.14.1", + "gif", "image-webp", "moxcms", "num-traits", @@ -2602,9 +2624,9 @@ dependencies = [ [[package]] name = "imagesize" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285" +checksum = "09e54e57b4c48b40f7aec75635392b12b3421fa26fe8b4332e63138ed278459c" [[package]] name = "imgref" @@ -2805,17 +2827,6 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" -[[package]] -name = "kurbo" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62026ae44756f8a599ba21140f350303d4f08dcdcc71b5ad9c9bb8128c13c62" -dependencies = [ - "arrayvec", - "euclid", - "smallvec", -] - [[package]] name = "kurbo" version = "0.12.0" @@ -2827,6 +2838,23 @@ dependencies = [ "smallvec", ] +[[package]] +name = "kurbo" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7564e90fe3c0d5771e1f0bc95322b21baaeaa0d9213fa6a0b61c99f8b17b3bfb" +dependencies = [ + "arrayvec", + "euclid", + "smallvec", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + [[package]] name = "lebe" version = "0.5.3" @@ -2908,15 +2936,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4a5ff6bcca6c4867b1c4fd4ef63e4db7436ef363e0ad7531d1558856bae64f4" -[[package]] -name = "linereader" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d921fea6860357575519aca014c6e22470585accdd543b370c404a8a72d0dd1d" -dependencies = [ - "memchr", -] - [[package]] name = "linked-hash-map" version = "0.5.6" @@ -3142,6 +3161,12 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "natord" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "308d96db8debc727c3fd9744aac51751243420e46edf401010908da7f8d5e57c" + [[package]] name = "ndk" version = "0.9.0" @@ -3233,9 +3258,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.2.0" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] name = "num-derive" @@ -3529,6 +3554,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ "bitflags 2.10.0", + "block2 0.6.2", "objc2 0.6.3", "objc2-core-foundation", ] @@ -3636,6 +3662,20 @@ dependencies = [ "objc2-user-notifications", ] +[[package]] +name = "objc2-ui-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" +dependencies = [ + "bitflags 2.10.0", + "block2 0.6.2", + "objc2 0.6.3", + "objc2-core-foundation", + "objc2-foundation 0.3.2", + "objc2-quartz-core 0.3.2", +] + [[package]] name = "objc2-uniform-type-identifiers" version = "0.2.2" @@ -3759,13 +3799,13 @@ dependencies = [ [[package]] name = "parley" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26746861bb76dbc9bcd5ed1b0b55d2fedf291100961251702a031ab2abd2ce52" +checksum = "ada5338c3a9794af7342e6f765b6e78740db37378aced034d7bf72c96b94ed94" dependencies = [ "fontique", "harfrust", - "hashbrown 0.15.5", + "hashbrown 0.16.1", "linebender_resource_handle", "skrifa", "swash", @@ -3892,15 +3932,6 @@ dependencies = [ "miniz_oxide", ] -[[package]] -name = "polib" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b393b155cf9be86249cba1b56cc81be0e6212c66d94ac0d76d37a1761f3bb1b" -dependencies = [ - "linereader", -] - [[package]] name = "polling" version = "3.11.0" @@ -3989,7 +4020,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit", + "toml_edit 0.23.10+spec-1.0.0", ] [[package]] @@ -4020,6 +4051,25 @@ dependencies = [ "syn", ] +[[package]] +name = "pulldown-cmark" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e8bbe1a966bd2f362681a44f6edce3c2310ac21e4d5067a6e7ec396297a6ea0" +dependencies = [ + "bitflags 2.10.0", + "getopts", + "memchr", + "pulldown-cmark-escape", + "unicase", +] + +[[package]] +name = "pulldown-cmark-escape" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "007d8adb5ddab6f8e3f491ac63566a7d5002cc7ed73901f72057943fa71ae1ae" + [[package]] name = "pxfm" version = "0.1.27" @@ -4386,11 +4436,11 @@ dependencies = [ [[package]] name = "resvg" -version = "0.45.1" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8928798c0a55e03c9ca6c4c6846f76377427d2c1e1f7e6de3c06ae57942df43" +checksum = "b563218631706d614e23059436526d005b50ab5f2d506b55a17eb65c5eb83419" dependencies = [ - "gif 0.13.3", + "gif", "image-webp", "log", "pico-args", @@ -4398,7 +4448,7 @@ dependencies = [ "svgtypes", "tiny-skia", "usvg", - "zune-jpeg 0.4.21", + "zune-jpeg 0.5.12", ] [[package]] @@ -4465,9 +4515,12 @@ dependencies = [ [[package]] name = "roxmltree" -version = "0.20.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" +checksum = "f1964b10c76125c36f8afe190065a4bf9a87bf324842c05701330bba9f1cacbb" +dependencies = [ + "memchr", +] [[package]] name = "rpkg-config" @@ -4475,6 +4528,19 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a2d2f3481209a6b42eec2fbb49063fb4e8d35b57023401495d4fe0f85c817f0" +[[package]] +name = "rspolib" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fda9a7796aff63a7b1b39ccc93fffaaf65e20042984b4843041a49ca4677535" +dependencies = [ + "lazy_static", + "natord", + "snafu", + "unicode-linebreak", + "unicode-width", +] + [[package]] name = "rustc-hash" version = "1.1.0" @@ -4907,14 +4973,14 @@ checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" [[package]] name = "skia-bindings" -version = "0.89.1" +version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f06b9b01a0d1189fa756bb9aec034554d52ad53f2f33d80a96e7a4ecfbd3d989" +checksum = "8f6f96e00735f14a781aac8a6870c862b8cc831df6d8e4ad77ab78e11411b9af" dependencies = [ "bindgen", "cc", "flate2", - "heck 0.5.0", + "heck", "pkg-config", "regex", "serde_json", @@ -4924,9 +4990,9 @@ dependencies = [ [[package]] name = "skia-safe" -version = "0.89.1" +version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced1fcc0fa7510f9339988f31d831e14f64f9aa771e5f93f4935431e6fe69d4c" +checksum = "6a71c01d325d40b1031dee67d251a5e0132e79e2a9ec272149a4f4a0d4b8b3be" dependencies = [ "bitflags 2.10.0", "skia-bindings", @@ -4949,22 +5015,18 @@ version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" -[[package]] -name = "slabbin" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9db491c0d4152a069911a0fbdaca959691bf0b9d7110d98a7ed1c8e59b79ab30" - [[package]] name = "slint" -version = "1.14.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c35c4bdca2c42c69b21ceb416aa4ba76c3f54df30e9ce85dcad0742229422a6" +checksum = "432c306ed799f8ffe365ba90228c5c95f1f02b41a1275ec90274beb2de9bc9b2" dependencies = [ "const-field-offset", "i-slint-backend-selector", + "i-slint-common", "i-slint-core", "i-slint-core-macros", + "i-slint-renderer-software", "num-traits", "once_cell", "pin-weak", @@ -4975,21 +5037,21 @@ dependencies = [ [[package]] name = "slint-build" -version = "1.14.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6f9e30dfc58198894a4a4fe38d126a24ed4121d11cd8564643f3b7915752adc" +checksum = "81baa6950be442989aedda43bc4318a174ebf902a50b1be4c1f8488cdfe1b023" dependencies = [ "derive_more", "i-slint-compiler", "spin_on", - "toml_edit", + "toml_edit 0.24.0+spec-1.1.0", ] [[package]] name = "slint-macros" -version = "1.14.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b4b4bada19852716991153ddd93bf133548ac74383a05db8df399b9003bbfe" +checksum = "7678ea0a654bfc0f86c1065ead013d0d4ccd59deccd05b7b339997d60d1e524c" dependencies = [ "i-slint-compiler", "proc-macro2", @@ -5094,6 +5156,27 @@ dependencies = [ "serde_core", ] +[[package]] +name = "snafu" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e84b3f4eacbf3a1ce05eac6763b4d629d60cbc94d632e4092c54ade71f1e1a2" +dependencies = [ + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "socket2" version = "0.6.2" @@ -5208,7 +5291,7 @@ version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", "syn", @@ -5222,11 +5305,11 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "svgtypes" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68c7541fff44b35860c1a7a47a7cadf3e4a304c457b58f9870d9706ece028afc" +checksum = "695b5790b3131dafa99b3bbfd25a216edb3d216dad9ca208d4657bfb8f2abc3d" dependencies = [ - "kurbo 0.11.3", + "kurbo 0.13.0", "siphasher", ] @@ -5278,7 +5361,10 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" dependencies = [ + "js-sys", "libc", + "wasm-bindgen", + "web-sys", ] [[package]] @@ -5305,15 +5391,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - [[package]] name = "text-size" version = "1.1.1" @@ -5360,15 +5437,6 @@ dependencies = [ "syn", ] -[[package]] -name = "thread_local" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" -dependencies = [ - "cfg-if", -] - [[package]] name = "tiff" version = "0.10.3" @@ -5385,9 +5453,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.46" +version = "0.3.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9da98b7d9b7dad93488a84b8248efc35352b0b2657397d4167e7ad67e5d535e5" +checksum = "f9e442fc33d7fdb45aa9bfeb312c095964abdf596f7567261062b2a7107aaabd" dependencies = [ "deranged", "js-sys", @@ -5399,9 +5467,9 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.8" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" +checksum = "8b36ee98fd31ec7426d599183e8fe26932a8dc1fb76ddb6214d05493377d34ca" [[package]] name = "tiny-skia" @@ -5558,6 +5626,18 @@ name = "toml_edit" version = "0.23.10+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" +dependencies = [ + "indexmap", + "toml_datetime", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.24.0+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c740b185920170a6d9191122cafef7010bd6270a3824594bff6784c04d7f09e" dependencies = [ "indexmap", "toml_datetime", @@ -5741,6 +5821,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "unicase" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" + [[package]] name = "unicode-bidi" version = "0.3.18" @@ -5795,6 +5881,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" +[[package]] +name = "unicode-width" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" + [[package]] name = "unicode-xid" version = "0.2.6" @@ -5827,16 +5919,16 @@ dependencies = [ [[package]] name = "usvg" -version = "0.45.1" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80be9b06fbae3b8b303400ab20778c80bbaf338f563afe567cf3c9eea17b47ef" +checksum = "e419dff010bb12512b0ae9e3d2f318dfbdf0167fde7eb05465134d4e8756076f" dependencies = [ "base64", "data-url", "flate2", "fontdb", "imagesize", - "kurbo 0.11.3", + "kurbo 0.13.0", "log", "pico-args", "roxmltree", @@ -5898,15 +5990,6 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" -[[package]] -name = "vk-parse" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3859da4d7b98bec73e68fb65815d47a263819c415c90eed42b80440a02cbce8c" -dependencies = [ - "xml-rs", -] - [[package]] name = "vtable" version = "0.3.0" @@ -5930,35 +6013,6 @@ dependencies = [ "syn", ] -[[package]] -name = "vulkano" -version = "0.35.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee487adf7c13e5aa46d4d7fac6ffb8e172eb7e6472aaf815e9ade4992f8f2414" -dependencies = [ - "ash", - "bytemuck", - "crossbeam-queue", - "foldhash 0.1.5", - "half", - "heck 0.4.1", - "indexmap", - "libloading", - "nom 7.1.3", - "once_cell", - "parking_lot", - "proc-macro2", - "quote", - "raw-window-handle", - "raw-window-metal", - "serde", - "serde_json", - "slabbin", - "smallvec", - "thread_local", - "vk-parse", -] - [[package]] name = "walkdir" version = "2.5.0" @@ -6209,9 +6263,9 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36a29fc0408b113f68cf32637857ab740edfafdf460c326cd2afaa2d84cc05dc" +checksum = "804f18a4ac2676ffb4e8b5b5fa9ae38af06df08162314f96a68d2a363e21a8ca" dependencies = [ "rustls-pki-types", ] @@ -6750,7 +6804,7 @@ dependencies = [ "objc2 0.5.2", "objc2-app-kit 0.2.2", "objc2-foundation 0.2.2", - "objc2-ui-kit", + "objc2-ui-kit 0.2.2", "orbclient", "percent-encoding", "pin-project", @@ -7130,9 +7184,9 @@ dependencies = [ [[package]] name = "zip" -version = "7.2.0" +version = "7.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42e33efc22a0650c311c2ef19115ce232583abbe80850bc8b66509ebef02de0" +checksum = "268bf6f9ceb991e07155234071501490bb41fd1e39c6a588106dad10ae2a5804" dependencies = [ "aes", "bzip2", @@ -7140,7 +7194,6 @@ dependencies = [ "crc32fast", "deflate64", "flate2", - "generic-array", "getrandom 0.3.4", "hmac", "indexmap", diff --git a/Cargo.toml b/Cargo.toml index 566439c..dd549cf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,7 @@ chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde-big-array = "0.5" -slint = { version = "1.12", default-features = false, features = ["compat-1-2", "std", "backend-winit", "renderer-skia-vulkan"] } +slint = { version = "1.15", default-features = false, features = ["compat-1-2", "std", "backend-winit", "renderer-skia"] } open = "5.3" sha2 = "0.10" sdl3-sys = { version = "0.6", features = ["build-from-source-static"] } From db40ec503479de71de6257e9ca5b6eecc49394d1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 6 Feb 2026 09:51:12 +0100 Subject: [PATCH 0678/1117] cargo update (rand) --- Cargo.lock | 231 ++++++++++++++++++++++++++++++++++++++++++----- Cargo.toml | 2 +- src/device.rs | 10 +- src/device/pi.rs | 4 +- src/device/si.rs | 5 +- 5 files changed, 217 insertions(+), 35 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5b0c47f..a42d5d4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -179,9 +179,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.100" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea" [[package]] name = "arbitrary" @@ -735,6 +735,17 @@ dependencies = [ "libc", ] +[[package]] +name = "chacha20" +version = "0.10.0-rc.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14f3c04cdd19f5ed3271e460267fb1d94b7899ae1f7bb10ac3dfc3afb749d659" +dependencies = [ + "cfg-if", + "cpufeatures", + "rand_core 0.10.0", +] + [[package]] name = "chrono" version = "0.4.43" @@ -896,9 +907,9 @@ dependencies = [ [[package]] name = "constant_time_eq" -version = "0.3.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" [[package]] name = "convert_case" @@ -1834,6 +1845,22 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi", + "rand_core 0.10.0", + "wasip2", + "wasip3", + "wasm-bindgen", +] + [[package]] name = "gif" version = "0.14.1" @@ -1955,7 +1982,7 @@ dependencies = [ "mimalloc", "open", "postcard", - "rand_chacha", + "rand 0.10.0-rc.9", "regex", "reqwest", "rfd", @@ -1994,7 +2021,7 @@ dependencies = [ "parking_lot", "portable-atomic", "quanta", - "rand", + "rand 0.9.2", "smallvec", "spinning_top", "web-time", @@ -2567,6 +2594,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + [[package]] name = "idna" version = "1.1.0" @@ -2642,6 +2675,8 @@ checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", "hashbrown 0.16.1", + "serde", + "serde_core", ] [[package]] @@ -2855,6 +2890,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + [[package]] name = "lebe" version = "0.5.3" @@ -3258,9 +3299,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" [[package]] name = "num-derive" @@ -4148,7 +4189,7 @@ dependencies = [ "bytes", "getrandom 0.3.4", "lru-slab", - "rand", + "rand 0.9.2", "ring", "rustc-hash 2.1.1", "rustls", @@ -4196,7 +4237,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha", - "rand_core", + "rand_core 0.9.5", +] + +[[package]] +name = "rand" +version = "0.10.0-rc.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8cd8be2e7e2fd2ee3e09045798e65c906682ec9f16293defc4790dd775d5a3" +dependencies = [ + "chacha20", + "getrandom 0.4.1", + "rand_core 0.10.0", ] [[package]] @@ -4206,7 +4258,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.9.5", ] [[package]] @@ -4218,6 +4270,12 @@ dependencies = [ "getrandom 0.3.4", ] +[[package]] +name = "rand_core" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c8d0fd677905edcbeedbf2edb6494d676f0e98d54d5cf9bda0b061cb8fb8aba" + [[package]] name = "rav1e" version = "0.8.1" @@ -4245,7 +4303,7 @@ dependencies = [ "num-traits", "paste", "profiling", - "rand", + "rand 0.9.2", "rand_chacha", "simd_helpers", "thiserror 2.0.18", @@ -5453,9 +5511,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.45" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9e442fc33d7fdb45aa9bfeb312c095964abdf596f7567261062b2a7107aaabd" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", "js-sys", @@ -5467,9 +5525,9 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b36ee98fd31ec7426d599183e8fe26932a8dc1fb76ddb6214d05493377d34ca" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "tiny-skia" @@ -5770,7 +5828,7 @@ dependencies = [ "http", "httparse", "log", - "rand", + "rand 0.9.2", "sha1", "thiserror 2.0.18", "utf-8", @@ -6047,6 +6105,15 @@ dependencies = [ "wit-bindgen", ] +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen", +] + [[package]] name = "wasm-bindgen" version = "0.2.108" @@ -6106,6 +6173,40 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap", + "wasm-encoder", + "wasmparser", +] + +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags 2.10.0", + "hashbrown 0.15.5", + "indexmap", + "semver", +] + [[package]] name = "wayland-backend" version = "0.3.12" @@ -6854,6 +6955,88 @@ name = "wit-bindgen" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck", + "indexmap", + "prettyplease", + "syn", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.10.0", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] [[package]] name = "write-fonts" @@ -7089,18 +7272,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.38" +version = "0.8.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57cf3aa6855b23711ee9852dfc97dfaa51c45feaba5b645d0c777414d494a961" +checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.38" +version = "0.8.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a616990af1a287837c4fe6596ad77ef57948f787e46ce28e166facc0cc1cb75" +checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" dependencies = [ "proc-macro2", "quote", @@ -7184,9 +7367,9 @@ dependencies = [ [[package]] name = "zip" -version = "7.3.0" +version = "7.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "268bf6f9ceb991e07155234071501490bb41fd1e39c6a588106dad10ae2a5804" +checksum = "cc12baa6db2b15a140161ce53d72209dacea594230798c24774139b54ecaa980" dependencies = [ "aes", "bzip2", @@ -7194,7 +7377,7 @@ dependencies = [ "crc32fast", "deflate64", "flate2", - "getrandom 0.3.4", + "getrandom 0.4.1", "hmac", "indexmap", "lzma-rust2", diff --git a/Cargo.toml b/Cargo.toml index dd549cf..8a8f8ea 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,7 +29,7 @@ regex = "1.11" tokio-tungstenite = "0.28" futures = "0.3" socket2 = { version = "0.6", features = ["all"] } -rand_chacha = "0.9" +rand = { version = "0.10.0-rc.9", features = ["chacha"] } fatfs = "0.3" semver = "1.0" postcard = { version = "1.1", features = ["use-std"] } diff --git a/src/device.rs b/src/device.rs index 293a4fe..80fd653 100644 --- a/src/device.rs +++ b/src/device.rs @@ -10,7 +10,7 @@ include!(concat!(env!("OUT_DIR"), "/simd_bindings.rs")); #[cfg(target_arch = "x86_64")] use std::arch::x86_64::*; -use rand_chacha::rand_core::{RngCore, SeedableRng}; +use rand::{Rng, SeedableRng}; use crate::{cheats, netplay, ui}; use std::{collections::HashMap, fs, io::Read}; @@ -87,8 +87,8 @@ pub fn run_game(device: &mut Device, rom_contents: Vec, game_settings: ui::g ui::video::close(&device.ui); } -fn set_rng() -> rand_chacha::ChaCha8Rng { - rand_chacha::ChaCha8Rng::from_os_rng() +fn set_rng() -> rand::rngs::ChaCha8Rng { + rand::rngs::ChaCha8Rng::try_from_rng(&mut rand::rngs::SysRng).unwrap() } fn init_rng(device: &mut Device) { @@ -100,7 +100,7 @@ fn init_rng(device: &mut Device) { rng_seed = netplay::receive_rng(netplay); } } - device.rng = rand_chacha::ChaCha8Rng::seed_from_u64(rng_seed); + device.rng = rand::rngs::ChaCha8Rng::seed_from_u64(rng_seed); } fn swap_rom(contents: Vec) -> Option> { @@ -206,7 +206,7 @@ pub struct Device { pub si: si::Si, pub ri: ri::Ri, #[serde(skip, default = "set_rng")] - pub rng: rand_chacha::ChaCha8Rng, + pub rng: rand::rngs::ChaCha8Rng, pub vru: controller::vru::Vru, pub transferpaks: [controller::transferpak::TransferPak; 4], pub cheats: cheats::Cheats, diff --git a/src/device/pi.rs b/src/device/pi.rs index 2ca4f02..c5d9a27 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -1,6 +1,6 @@ use crate::device; use crate::ui; -use rand_chacha::rand_core::RngCore; +use rand::Rng; const PI_DRAM_ADDR_REG: u32 = 0; const PI_CART_ADDR_REG: u32 = 1; @@ -169,7 +169,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } } -fn randomize_interrupt_time(rng: &mut rand_chacha::ChaCha8Rng) -> u64 { +fn randomize_interrupt_time(rng: &mut rand::rngs::ChaCha8Rng) -> u64 { rng.next_u64() % 0x10 } diff --git a/src/device/si.rs b/src/device/si.rs index 32e1b04..03e561d 100644 --- a/src/device/si.rs +++ b/src/device/si.rs @@ -1,7 +1,6 @@ -use rand_chacha::rand_core::RngCore; - use crate::device; use crate::ui; +use rand::Rng; const SI_DRAM_ADDR_REG: u32 = 0; const SI_PIF_ADDR_RD64B_REG: u32 = 1; @@ -39,7 +38,7 @@ pub fn read_regs( device.si.regs[((address & 0xFFFF) >> 2) as usize] } -fn randomize_interrupt_time(rng: &mut rand_chacha::ChaCha8Rng) -> u64 { +fn randomize_interrupt_time(rng: &mut rand::rngs::ChaCha8Rng) -> u64 { rng.next_u64() % 0x100 } From b13f37baf8d31879f2a6fe18982fb32fb069bcdb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 6 Feb 2026 09:53:09 +0100 Subject: [PATCH 0679/1117] bump to 1.1.15 --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a42d5d4..0dfd1dc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1968,7 +1968,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.14" +version = "1.1.15" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index 8a8f8ea..ea9e0e1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.14" +version = "1.1.15" edition = "2024" rust-version = "1.93.0" From b952c45e0b3b768d92262c0b1720ea0d83d5e159 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 9 Feb 2026 10:44:19 +0100 Subject: [PATCH 0680/1117] cargo update --- Cargo.lock | 47 ++++++++++++++++++++++++++++------------------- Cargo.toml | 2 +- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0dfd1dc..06022d5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -32,7 +32,7 @@ checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher", - "cpufeatures", + "cpufeatures 0.2.17", ] [[package]] @@ -737,12 +737,12 @@ dependencies = [ [[package]] name = "chacha20" -version = "0.10.0-rc.11" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14f3c04cdd19f5ed3271e460267fb1d94b7899ae1f7bb10ac3dfc3afb749d659" +checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.3.0", "rand_core 0.10.0", ] @@ -1017,6 +1017,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + [[package]] name = "crc" version = "3.3.0" @@ -1982,7 +1991,7 @@ dependencies = [ "mimalloc", "open", "postcard", - "rand 0.10.0-rc.9", + "rand 0.10.0", "regex", "reqwest", "rfd", @@ -3109,9 +3118,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.6" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "memmap2" @@ -4242,9 +4251,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.10.0-rc.9" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8cd8be2e7e2fd2ee3e09045798e65c906682ec9f16293defc4790dd775d5a3" +checksum = "bc266eb313df6c5c09c1c7b1fbe2510961e5bcd3add930c1e31f7ed9da0feff8" dependencies = [ "chacha20", "getrandom 0.4.1", @@ -4453,9 +4462,9 @@ checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" [[package]] name = "reqwest" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e9018c9d814e5f30cc16a0f03271aeab3571e609612d9fe78c1aa8d11c2f62" +checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" dependencies = [ "base64", "bytes", @@ -4747,9 +4756,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "same-file" @@ -4968,7 +4977,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest", ] @@ -4979,7 +4988,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest", ] @@ -5905,9 +5914,9 @@ checksum = "ce61d488bcdc9bc8b5d1772c404828b17fc481c0a582b5581e95fb233aef503e" [[package]] name = "unicode-ident" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +checksum = "537dd038a89878be9b64dd4bd1b260315c1bb94f4d784956b81e27a088d9a09e" [[package]] name = "unicode-linebreak" @@ -7400,9 +7409,9 @@ checksum = "a7948af682ccbc3342b6e9420e8c51c1fe5d7bf7756002b4a3c6cabfe96a7e3c" [[package]] name = "zmij" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff05f8caa9038894637571ae6b9e29466c1f4f829d26c9b28f869a29cbe3445" +checksum = "4de98dfa5d5b7fef4ee834d0073d560c9ca7b6c46a71d058c48db7960f8cfaf7" [[package]] name = "zopfli" diff --git a/Cargo.toml b/Cargo.toml index ea9e0e1..d17bed3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,7 +29,7 @@ regex = "1.11" tokio-tungstenite = "0.28" futures = "0.3" socket2 = { version = "0.6", features = ["all"] } -rand = { version = "0.10.0-rc.9", features = ["chacha"] } +rand = { version = "0.10", features = ["chacha"] } fatfs = "0.3" semver = "1.0" postcard = { version = "1.1", features = ["use-std"] } From 55170fcca302f142a270ee29b5cfbcc3ae69386d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 9 Feb 2026 12:16:10 +0100 Subject: [PATCH 0681/1117] use Xoshiro256PlusPlus (#668) --- Cargo.toml | 2 +- src/device.rs | 8 ++++---- src/device/pi.rs | 2 +- src/device/si.rs | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index d17bed3..7c576fa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,7 +29,7 @@ regex = "1.11" tokio-tungstenite = "0.28" futures = "0.3" socket2 = { version = "0.6", features = ["all"] } -rand = { version = "0.10", features = ["chacha"] } +rand = "0.10" fatfs = "0.3" semver = "1.0" postcard = { version = "1.1", features = ["use-std"] } diff --git a/src/device.rs b/src/device.rs index 80fd653..2409507 100644 --- a/src/device.rs +++ b/src/device.rs @@ -87,8 +87,8 @@ pub fn run_game(device: &mut Device, rom_contents: Vec, game_settings: ui::g ui::video::close(&device.ui); } -fn set_rng() -> rand::rngs::ChaCha8Rng { - rand::rngs::ChaCha8Rng::try_from_rng(&mut rand::rngs::SysRng).unwrap() +fn set_rng() -> rand::rngs::Xoshiro256PlusPlus { + rand::rngs::Xoshiro256PlusPlus::try_from_rng(&mut rand::rngs::SysRng).unwrap() } fn init_rng(device: &mut Device) { @@ -100,7 +100,7 @@ fn init_rng(device: &mut Device) { rng_seed = netplay::receive_rng(netplay); } } - device.rng = rand::rngs::ChaCha8Rng::seed_from_u64(rng_seed); + device.rng = rand::rngs::Xoshiro256PlusPlus::seed_from_u64(rng_seed); } fn swap_rom(contents: Vec) -> Option> { @@ -206,7 +206,7 @@ pub struct Device { pub si: si::Si, pub ri: ri::Ri, #[serde(skip, default = "set_rng")] - pub rng: rand::rngs::ChaCha8Rng, + pub rng: rand::rngs::Xoshiro256PlusPlus, pub vru: controller::vru::Vru, pub transferpaks: [controller::transferpak::TransferPak; 4], pub cheats: cheats::Cheats, diff --git a/src/device/pi.rs b/src/device/pi.rs index c5d9a27..8de8c2f 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -169,7 +169,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } } -fn randomize_interrupt_time(rng: &mut rand::rngs::ChaCha8Rng) -> u64 { +fn randomize_interrupt_time(rng: &mut rand::rngs::Xoshiro256PlusPlus) -> u64 { rng.next_u64() % 0x10 } diff --git a/src/device/si.rs b/src/device/si.rs index 03e561d..79e109f 100644 --- a/src/device/si.rs +++ b/src/device/si.rs @@ -38,7 +38,7 @@ pub fn read_regs( device.si.regs[((address & 0xFFFF) >> 2) as usize] } -fn randomize_interrupt_time(rng: &mut rand::rngs::ChaCha8Rng) -> u64 { +fn randomize_interrupt_time(rng: &mut rand::rngs::Xoshiro256PlusPlus) -> u64 { rng.next_u64() % 0x100 } From f24a5e7f0550f8ebb6ba3eac0f8fcf56770a5854 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 11 Feb 2026 16:13:36 +0100 Subject: [PATCH 0682/1117] reapply cheats when loading save state --- src/savestates.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/savestates.rs b/src/savestates.rs index 5e48295..5a13f2b 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -1,4 +1,4 @@ -use crate::{device, ui}; +use crate::{cheats, device, ui}; #[cfg(target_arch = "aarch64")] use device::__m128i; use serde::de::{Deserialize, Deserializer, SeqAccess, Visitor}; @@ -198,6 +198,11 @@ pub fn load_savestate(device: &mut device::Device) { ui::audio::close_game_audio(&mut device.ui); ui::audio::init_game_audio(&mut device.ui, device.ai.freq); ui::video::load_state(device, rdp_state.as_ptr()); + + if device.cheats.enabled { + cheats::execute_cheats(device, device.cheats.cheats.clone()); + } + ui::video::onscreen_message( &device.ui, &format!( From efbeaeab888c25c752d1531149d20cdcbe50c7be Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 12 Feb 2026 22:49:42 +0100 Subject: [PATCH 0683/1117] rust 1.93.1 --- Cargo.lock | 119 ++++++++++++++++++++++---------------------- Cargo.toml | 2 +- rust-toolchain.toml | 2 +- 3 files changed, 62 insertions(+), 61 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 06022d5..49a0389 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -427,9 +427,9 @@ dependencies = [ [[package]] name = "avif-serialize" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47c8fbc0f831f4519fe8b810b6a7a91410ec83031b8233f730a0480029f6a23f" +checksum = "375082f007bd67184fb9c0374614b29f9aaa604ec301635f72338bb65386a53d" dependencies = [ "arrayvec", ] @@ -446,9 +446,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.37.0" +version = "0.37.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c34dda4df7017c8db52132f0f8a2e0f8161649d15723ed63fc00c82d0f2081a" +checksum = "b092fe214090261288111db7a2b2c2118e5a7f30dc2569f1732c4069a6840549" dependencies = [ "cc", "cmake", @@ -782,9 +782,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.57" +version = "4.5.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6899ea499e3fb9305a65d5ebf6e3d2248c5fab291f300ad0a704fbe142eae31a" +checksum = "63be97961acde393029492ce0be7a1af7e323e6bae9511ebfac33751be5e6806" dependencies = [ "clap_builder", "clap_derive", @@ -792,9 +792,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.57" +version = "4.5.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b12c8b680195a62a8364d16b8447b01b6c2c8f9aaf68bee653be34d4245e238" +checksum = "7f13174bda5dfd69d7e947827e5af4b0f2f94a4a3ee92912fba07a66150f21e2" dependencies = [ "anstream", "anstyle", @@ -816,9 +816,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.7" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" +checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831" [[package]] name = "clipboard-win" @@ -1152,9 +1152,9 @@ checksum = "26bf8fc351c5ed29b5c2f0cbbac1b209b74f60ecd62e675a998df72c49af5204" [[package]] name = "deranged" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +checksum = "cc3dc5ad92c2e2d1c193bbbbdf2ea477cb81331de4f3103f267ca18368b988c4" dependencies = [ "powerfmt", ] @@ -2272,9 +2272,9 @@ dependencies = [ [[package]] name = "i-slint-backend-linuxkms" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae11a0137fe698e7910fda141902b2d0cbaa6dcb9411bdd4a39dfaa80b3fe5cd" +checksum = "6b8827952ecfbbf76c8cb5bc3388ca9124c34f2b4fe5dffcfe57800d2a484885" dependencies = [ "calloop 0.14.3", "drm", @@ -2292,9 +2292,9 @@ dependencies = [ [[package]] name = "i-slint-backend-selector" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7017b9d1ffba8aaf41d77aec58585bd1c0fb715e69daa166dde689094b24a8c" +checksum = "ce5a7e591a7257096e1f3da1bbb9ad6a140c307d0eee74f008a0b412fdb20dec" dependencies = [ "cfg-if", "i-slint-backend-linuxkms", @@ -2306,9 +2306,9 @@ dependencies = [ [[package]] name = "i-slint-backend-winit" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0671a45624e5c7bb365dcdf66bde20f97a29240d07e9fb55c0bb12d3b612bedf" +checksum = "bbbf4789191740f939c9563b8850379122d7b5c1ceb09f9297b50ad53e408787" dependencies = [ "block2 0.6.2", "cfg-if", @@ -2345,9 +2345,9 @@ dependencies = [ [[package]] name = "i-slint-common" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7df69e8ff23fd605ac12112e31844f92b83e5958235f3ec446efe79bc868e65" +checksum = "e7659797fd28d4df3ed275ff95bf730bdf4a88d253f07e1ee8d0032d70138c3a" dependencies = [ "fontique", "ttf-parser 0.25.1", @@ -2355,9 +2355,9 @@ dependencies = [ [[package]] name = "i-slint-compiler" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09f34ca3843cae3e92c1a8a4167680e4e4a2f72ea16bcbded9bc06271393427" +checksum = "2a6f358d0d5389869d67cd6ab6f5acf98fe31827264a696593e9687213cff682" dependencies = [ "annotate-snippets", "by_address", @@ -2384,9 +2384,9 @@ dependencies = [ [[package]] name = "i-slint-core" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75363fba36ebf55a78cf99449fee8b35d3990fe02042598131242b9e19f8d604" +checksum = "a95591ff85f8e2ff11c8d26ea8429768c2b77866e0c7e7fd49348f23ad108b5c" dependencies = [ "auto_enums", "bitflags 2.10.0", @@ -2432,9 +2432,9 @@ dependencies = [ [[package]] name = "i-slint-core-macros" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f35143e83e9071e0346695ccdea2c0677575d24ed830a5fc923255d62272b4b" +checksum = "7cc5f2f71682787dd5c6299555c0de635009eb269bbc54d6198e0d225b69fae4" dependencies = [ "quote", "serde_json", @@ -2443,9 +2443,9 @@ dependencies = [ [[package]] name = "i-slint-renderer-skia" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9acc871405ebed9625106c5537317774f39347c5e64f5133f057db3eed691b17" +checksum = "a64546232c0370f291e65fc92a4f4fc777ea78d5f48467873cb968b1de52e9ab" dependencies = [ "bytemuck", "cfg-if", @@ -2479,9 +2479,9 @@ dependencies = [ [[package]] name = "i-slint-renderer-software" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1b7573463244ff0c2c1da5c57ad82334ea16dbc591c9ac0da0263915be63f99" +checksum = "a59be6c34935c4f8e41aa67a63518d5c59219c8eeb1d07af420bed8334fa31d7" dependencies = [ "bytemuck", "clru", @@ -2919,15 +2919,15 @@ checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" -version = "0.2.180" +version = "0.2.181" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" +checksum = "459427e2af2b9c839b132acb702a1c654d95e10f8c326bfc2ad11310e458b1c5" [[package]] name = "libfuzzer-sys" -version = "0.4.10" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5037190e1f70cbeef565bd267599242926f724d3b8a9f510fd7e0b540cfa4404" +checksum = "f12a681b7dd8ce12bff52488013ba614b869148d54dd79836ab85aafdd53f08d" dependencies = [ "arbitrary", "cc", @@ -2967,7 +2967,7 @@ checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" dependencies = [ "bitflags 2.10.0", "libc", - "redox_syscall 0.7.0", + "redox_syscall 0.7.1", ] [[package]] @@ -4413,9 +4413,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f3fe0889e69e2ae9e41f4d6c4c0181701d00e4697b356fb1f74173a5e0ee27" +checksum = "35985aa610addc02e24fc232012c86fd11f14111180f902b67e2d5331f8ebf2b" dependencies = [ "bitflags 2.10.0", ] @@ -5084,9 +5084,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "slint" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "432c306ed799f8ffe365ba90228c5c95f1f02b41a1275ec90274beb2de9bc9b2" +checksum = "d25b87d458205e79efb30545cae083aec2ccb1b192c46a55ae6d54403cdacb33" dependencies = [ "const-field-offset", "i-slint-backend-selector", @@ -5104,21 +5104,22 @@ dependencies = [ [[package]] name = "slint-build" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81baa6950be442989aedda43bc4318a174ebf902a50b1be4c1f8488cdfe1b023" +checksum = "064ef470cc8ab046319db94d0727f080fbd05322d07d774eb6de607d97defb8d" dependencies = [ "derive_more", + "fontique", "i-slint-compiler", "spin_on", - "toml_edit 0.24.0+spec-1.1.0", + "toml_edit 0.24.1+spec-1.1.0", ] [[package]] name = "slint-macros" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7678ea0a654bfc0f86c1065ead013d0d4ccd59deccd05b7b339997d60d1e524c" +checksum = "5ecc09bbc42c780d5b7ed7d41f7573dfd67343e11cdac27c07b88a8f933958e6" dependencies = [ "i-slint-compiler", "proc-macro2", @@ -5393,9 +5394,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.114" +version = "2.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" +checksum = "6e614ed320ac28113fa64972c4262d5dbc89deacdfd00c34a3e4cea073243c12" dependencies = [ "proc-macro2", "quote", @@ -5447,12 +5448,12 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.24.0" +version = "3.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" +checksum = "0136791f7c95b1f6dd99f9cc786b91bb81c3800b639b3478e561ddb7be95e5f1" dependencies = [ "fastrand", - "getrandom 0.3.4", + "getrandom 0.4.1", "once_cell", "rustix 1.1.3", "windows-sys 0.61.2", @@ -5666,9 +5667,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.9.11+spec-1.1.0" +version = "0.9.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3afc9a848309fe1aaffaed6e1546a7a14de1f935dc9d89d32afd9a44bab7c46" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" dependencies = [ "indexmap", "serde_core", @@ -5702,9 +5703,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.24.0+spec-1.1.0" +version = "0.24.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c740b185920170a6d9191122cafef7010bd6270a3824594bff6784c04d7f09e" +checksum = "01f2eadbbc6b377a847be05f60791ef1058d9f696ecb51d2c07fe911d8569d8e" dependencies = [ "indexmap", "toml_datetime", @@ -5715,9 +5716,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.0.6+spec-1.1.0" +version = "1.0.8+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" +checksum = "0742ff5ff03ea7e67c8ae6c93cac239e0d9784833362da3f9a9c1da8dfefcbdc" dependencies = [ "winnow", ] @@ -5855,9 +5856,9 @@ dependencies = [ [[package]] name = "typed-path" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3015e6ce46d5ad8751e4a772543a30c7511468070e98e64e20165f8f81155b64" +checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e" [[package]] name = "typenum" @@ -7409,9 +7410,9 @@ checksum = "a7948af682ccbc3342b6e9420e8c51c1fe5d7bf7756002b4a3c6cabfe96a7e3c" [[package]] name = "zmij" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4de98dfa5d5b7fef4ee834d0073d560c9ca7b6c46a71d058c48db7960f8cfaf7" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" [[package]] name = "zopfli" diff --git a/Cargo.toml b/Cargo.toml index 7c576fa..5335cc1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "gopher64" version = "1.1.15" edition = "2024" -rust-version = "1.93.0" +rust-version = "1.93.1" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 075062e..5355133 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.93.0" +channel = "1.93.1" From 51e9b3aa55924e967a299a04c6537ba3e182b74c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 15 Feb 2026 21:41:10 +0100 Subject: [PATCH 0684/1117] cargo update --- Cargo.lock | 290 ++++++++++++++++++++++++++++++++--------------------- Cargo.toml | 6 +- 2 files changed, 180 insertions(+), 116 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 49a0389..3bc1c21 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -88,7 +88,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", - "bitflags 2.10.0", + "bitflags 2.11.0", "cc", "cesu8", "jni", @@ -253,9 +253,9 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.13.3" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" +checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a" dependencies = [ "async-task", "concurrent-queue", @@ -478,7 +478,7 @@ version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -506,9 +506,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" dependencies = [ "serde_core", ] @@ -531,6 +531,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-padding" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +dependencies = [ + "generic-array", +] + [[package]] name = "block2" version = "0.5.1" @@ -642,7 +651,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "log", "polling", "rustix 0.38.44", @@ -652,11 +661,11 @@ dependencies = [ [[package]] name = "calloop" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb9f6e1368bd4621d2c86baa7e37de77a938adf5221e5dd3d6133340101b309e" +checksum = "4dbf9978365bac10f54d1d4b04f7ce4427e51f71d61f2fe15e3fed5166474df7" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "polling", "rustix 1.1.3", "slab", @@ -681,17 +690,26 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "138efcf0940a02ebf0cc8d1eff41a1682a46b431630f4c52450d6265876021fa" dependencies = [ - "calloop 0.14.3", + "calloop 0.14.4", "rustix 1.1.3", "wayland-backend", "wayland-client", ] [[package]] -name = "cc" -version = "1.2.55" +name = "cbc" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b26a0954ae34af09b50f0de26458fa95369a0d478d8236d3f93082b219bd29" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +dependencies = [ + "cipher", +] + +[[package]] +name = "cc" +version = "1.2.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" dependencies = [ "find-msvc-tools", "jobserver", @@ -1028,9 +1046,9 @@ dependencies = [ [[package]] name = "crc" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" dependencies = [ "crc-catalog", ] @@ -1108,9 +1126,9 @@ dependencies = [ [[package]] name = "ctor-lite" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b29fccfdaeb0f9bd90da5759b1d0eaa2f6cfcfe90960124cfc83141ed4e111fd" +checksum = "e162d0c2e2068eb736b71e5597eff0b9944e6b973cd9f37b6a288ab9bf20e300" [[package]] name = "cursor-icon" @@ -1237,7 +1255,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "block2 0.6.2", "libc", "objc2 0.6.3", @@ -1281,7 +1299,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "bytemuck", "drm-ffi", "drm-fourcc", @@ -1670,9 +1688,9 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "futures" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ "futures-channel", "futures-core", @@ -1685,9 +1703,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", "futures-sink", @@ -1695,15 +1713,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-executor" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ "futures-core", "futures-task", @@ -1712,9 +1730,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-lite" @@ -1731,9 +1749,9 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", @@ -1742,15 +1760,15 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-timer" @@ -1760,9 +1778,9 @@ checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-channel", "futures-core", @@ -1772,7 +1790,6 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", - "pin-utils", "slab", ] @@ -1782,7 +1799,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce852e998d3ca5e4a97014fb31c940dc5ef344ec7d364984525fd11e8a547e6a" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "drm", "drm-fourcc", "gbm-sys", @@ -1915,7 +1932,7 @@ version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "cfg_aliases", "cgl", "dispatch2", @@ -2072,7 +2089,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92c020db12c71d8a12a3fe7607873cade3a01a6287e29d540c8723276221b9d8" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "bytemuck", "core_maths", "read-fonts", @@ -2265,9 +2282,11 @@ dependencies = [ "percent-encoding", "pin-project-lite", "socket2", + "system-configuration", "tokio", "tower-service", "tracing", + "windows-registry", ] [[package]] @@ -2276,7 +2295,7 @@ version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b8827952ecfbbf76c8cb5bc3388ca9124c34f2b4fe5dffcfe57800d2a484885" dependencies = [ - "calloop 0.14.3", + "calloop 0.14.4", "drm", "gbm", "glutin", @@ -2389,7 +2408,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a95591ff85f8e2ff11c8d26ea8429768c2b77866e0c7e7fd49348f23ad108b5c" dependencies = [ "auto_enums", - "bitflags 2.10.0", + "bitflags 2.11.0", "cfg-if", "chrono", "clru", @@ -2644,7 +2663,7 @@ dependencies = [ "image-webp", "moxcms", "num-traits", - "png 0.18.0", + "png 0.18.1", "qoi", "ravif", "rayon", @@ -2694,6 +2713,7 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ + "block-padding", "generic-array", ] @@ -2703,7 +2723,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "input-sys", "libc", "log", @@ -2860,7 +2880,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "serde", "unicode-segmentation", ] @@ -2919,9 +2939,9 @@ checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" -version = "0.2.181" +version = "0.2.182" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "459427e2af2b9c839b132acb702a1c654d95e10f8c326bfc2ad11310e458b1c5" +checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" [[package]] name = "libfuzzer-sys" @@ -2965,7 +2985,7 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "libc", "redox_syscall 0.7.1", ] @@ -3101,6 +3121,12 @@ name = "lzma-rust2" version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1670343e58806300d87950e3401e820b519b9384281bbabfb15e3636689ffd69" + +[[package]] +name = "lzma-rust2" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d673a11333485e7d8b93d62a9a5b07b22daf5e8a8655a44c1bb18aa4bf3d1524" dependencies = [ "crc", "sha2", @@ -3124,9 +3150,9 @@ checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "memmap2" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" +checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" dependencies = [ "libc", ] @@ -3223,7 +3249,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "jni-sys", "log", "ndk-sys", @@ -3259,7 +3285,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "cfg-if", "cfg_aliases", "libc", @@ -3406,7 +3432,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -3422,7 +3448,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "block2 0.6.2", "libc", "objc2 0.6.3", @@ -3443,7 +3469,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -3456,7 +3482,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "objc2 0.6.3", "objc2-foundation 0.3.2", ] @@ -3478,7 +3504,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -3490,7 +3516,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "objc2 0.6.3", "objc2-foundation 0.3.2", ] @@ -3501,7 +3527,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "dispatch2", "objc2 0.6.3", ] @@ -3512,7 +3538,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "dispatch2", "objc2 0.6.3", "objc2-core-foundation", @@ -3559,7 +3585,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "objc2 0.6.3", "objc2-core-foundation", "objc2-core-graphics", @@ -3571,7 +3597,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "objc2 0.6.3", "objc2-core-foundation", "objc2-core-graphics", @@ -3590,7 +3616,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "block2 0.5.1", "dispatch", "libc", @@ -3603,7 +3629,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "block2 0.6.2", "objc2 0.6.3", "objc2-core-foundation", @@ -3615,7 +3641,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "objc2 0.6.3", "objc2-core-foundation", ] @@ -3638,7 +3664,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -3650,7 +3676,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "objc2 0.6.3", "objc2-foundation 0.3.2", ] @@ -3661,7 +3687,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -3674,7 +3700,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "objc2 0.6.3", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -3697,7 +3723,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "block2 0.5.1", "objc2 0.5.2", "objc2-cloud-kit 0.2.2", @@ -3718,7 +3744,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "block2 0.6.2", "objc2 0.6.3", "objc2-core-foundation", @@ -3743,7 +3769,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -3971,11 +3997,11 @@ dependencies = [ [[package]] name = "png" -version = "0.18.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" +checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "crc32fast", "fdeflate", "flate2", @@ -4107,7 +4133,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e8bbe1a966bd2f362681a44f6edce3c2310ac21e4d5067a6e7ec396297a6ea0" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "getopts", "memchr", "pulldown-cmark-escape", @@ -4341,7 +4367,7 @@ version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", ] [[package]] @@ -4408,7 +4434,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", ] [[package]] @@ -4417,7 +4443,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35985aa610addc02e24fc232012c86fd11f14111180f902b67e2d5331f8ebf2b" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", ] [[package]] @@ -4635,7 +4661,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -4648,7 +4674,7 @@ version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "errno", "libc", "linux-raw-sys 0.11.0", @@ -4742,7 +4768,7 @@ version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "bytemuck", "core_maths", "log", @@ -4847,11 +4873,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.5.1" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" +checksum = "d17b898a6d6948c3a8ee4372c17cb384f90d2e6e912ef00895b14fd7ab54ec38" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -4860,9 +4886,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.15.0" +version = "2.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +checksum = "321c8673b092a9a42605034a9879d73cb79101ed5fd117bc9a597b89b4e9e61a" dependencies = [ "core-foundation-sys", "libc", @@ -4964,9 +4990,15 @@ version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65126b94d6f5a6d727b1e35b0a796685a79062ceaf5fa45321315e62b65251a2" dependencies = [ + "aes", + "bzip2", + "cbc", "crc32fast", + "getrandom 0.3.4", "js-sys", - "lzma-rust2", + "lzma-rust2 0.15.7", + "ppmd-rust", + "sha2", "wasm-bindgen", ] @@ -5061,7 +5093,7 @@ version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a71c01d325d40b1031dee67d251a5e0132e79e2a9ec272149a4f4a0d4b8b3be" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "skia-bindings", "windows 0.62.2", ] @@ -5148,7 +5180,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "calloop 0.13.0", "calloop-wayland-source 0.3.0", "cursor-icon", @@ -5173,8 +5205,8 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" dependencies = [ - "bitflags 2.10.0", - "calloop 0.14.3", + "bitflags 2.11.0", + "calloop 0.14.4", "calloop-wayland-source 0.4.1", "cursor-icon", "libc", @@ -5394,9 +5426,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.115" +version = "2.0.116" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e614ed320ac28113fa64972c4262d5dbc89deacdfd00c34a3e4cea073243c12" +checksum = "3df424c70518695237746f84cede799c9c58fcb37450d7b23716568cc8bc69cb" dependencies = [ "proc-macro2", "quote", @@ -5435,6 +5467,27 @@ dependencies = [ "web-sys", ] +[[package]] +name = "system-configuration" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" +dependencies = [ + "bitflags 2.11.0", + "core-foundation 0.9.4", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tar" version = "0.4.44" @@ -5750,7 +5803,7 @@ version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "bytes", "futures-util", "http", @@ -6032,9 +6085,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.20.0" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f" +checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb" dependencies = [ "js-sys", "serde_core", @@ -6211,7 +6264,7 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "hashbrown 0.15.5", "indexmap", "semver", @@ -6237,7 +6290,7 @@ version = "0.31.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e6faa537fbb6c186cb9f1d41f2f811a4120d1b57ec61f50da451a0c5122bec" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "rustix 1.1.3", "wayland-backend", "wayland-scanner", @@ -6249,7 +6302,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "cursor-icon", "wayland-backend", ] @@ -6271,7 +6324,7 @@ version = "0.32.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baeda9ffbcfc8cd6ddaade385eaf2393bd2115a69523c735f12242353c3df4f3" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "wayland-backend", "wayland-client", "wayland-scanner", @@ -6283,7 +6336,7 @@ version = "20250721.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -6296,7 +6349,7 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "791c58fdeec5406aa37169dd815327d1e47f334219b523444bc26d70ceb4c34e" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -6309,7 +6362,7 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa98634619300a535a9a97f338aed9a5ff1e01a461943e8346ff4ae26007306b" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -6322,7 +6375,7 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9597cdf02cf0c34cd5823786dce6b5ae8598f05c2daf5621b6e178d4f7345f3" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -6546,6 +6599,17 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" +dependencies = [ + "windows-link", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + [[package]] name = "windows-result" version = "0.2.0" @@ -6898,7 +6962,7 @@ dependencies = [ "ahash", "android-activity", "atomic-waker", - "bitflags 2.10.0", + "bitflags 2.11.0", "block2 0.5.1", "bytemuck", "calloop 0.13.0", @@ -7018,7 +7082,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.10.0", + "bitflags 2.11.0", "indexmap", "log", "serde", @@ -7142,7 +7206,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "dlib", "log", "once_cell", @@ -7377,9 +7441,9 @@ dependencies = [ [[package]] name = "zip" -version = "7.4.0" +version = "8.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc12baa6db2b15a140161ce53d72209dacea594230798c24774139b54ecaa980" +checksum = "79b32dd4ad3aca14ae109f8cce0495ac1c57f6f4f00ad459a40e582f89440d97" dependencies = [ "aes", "bzip2", @@ -7390,7 +7454,7 @@ dependencies = [ "getrandom 0.4.1", "hmac", "indexmap", - "lzma-rust2", + "lzma-rust2 0.16.1", "memchr", "pbkdf2", "ppmd-rust", diff --git a/Cargo.toml b/Cargo.toml index 5335cc1..5a35265 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,9 +8,9 @@ rust-version = "1.93.1" [dependencies] dirs = "6.0" -zip = "7.0" +zip = "8.0" governor = "0.10" -sevenz-rust2 = { version = "0.20", default-features = false } +sevenz-rust2 = "0.20" chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" @@ -34,7 +34,7 @@ fatfs = "0.3" semver = "1.0" postcard = { version = "1.1", features = ["use-std"] } clap = { version = "4.5", features = ["derive"] } -reqwest = { version = "0.13", default-features = false, features = ["http2","rustls","charset","json","query"] } +reqwest = { version = "0.13", features = ["json", "query"] } [build-dependencies] winresource = "0.1" From f8b777248a28ddc4bbd5e8e5f9cc43da3a82235e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 22 Feb 2026 08:12:10 +0100 Subject: [PATCH 0685/1117] update sdl --- Cargo.lock | 115 +++++++++++++++++++++++------------------------------ 1 file changed, 50 insertions(+), 65 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3bc1c21..82711a1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -119,11 +119,12 @@ dependencies = [ [[package]] name = "annotate-snippets" -version = "0.12.11" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e4850548ff4a25a77ce3bda7241874e17fb702ea551f0cc62a2dbe052f1272" +checksum = "c86cd1c51b95d71dde52bca69ed225008f6ff4c8cc825b08042aa1ef823e1980" dependencies = [ "anstyle", + "memchr", "unicode-width", ] @@ -179,9 +180,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.101" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "arbitrary" @@ -436,9 +437,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.15.4" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b7b6141e96a8c160799cc2d5adecd5cbbe5054cb8c7c4af53da0f83bb7ad256" +checksum = "d9a7b350e3bb1767102698302bc37256cbd48422809984b98d292c40e2579aa9" dependencies = [ "aws-lc-sys", "zeroize", @@ -588,9 +589,9 @@ checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64" [[package]] name = "bumpalo" -version = "3.19.1" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "by_address" @@ -800,9 +801,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.58" +version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63be97961acde393029492ce0be7a1af7e323e6bae9511ebfac33751be5e6806" +checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a" dependencies = [ "clap_builder", "clap_derive", @@ -810,9 +811,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.58" +version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f13174bda5dfd69d7e947827e5af4b0f2f94a4a3ee92912fba07a66150f21e2" +checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876" dependencies = [ "anstream", "anstyle", @@ -1044,21 +1045,6 @@ dependencies = [ "libc", ] -[[package]] -name = "crc" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" - [[package]] name = "crc32fast" version = "1.5.0" @@ -1170,9 +1156,9 @@ checksum = "26bf8fc351c5ed29b5c2f0cbbac1b209b74f60ecd62e675a998df72c49af5204" [[package]] name = "deranged" -version = "0.5.6" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc3dc5ad92c2e2d1c193bbbbdf2ea477cb81331de4f3103f267ca18368b988c4" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ "powerfmt", ] @@ -2866,9 +2852,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.85" +version = "0.3.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" +checksum = "c7e709f3e3d22866f9c25b3aff01af289b18422cc8b4262fb19103ee80fe513d" dependencies = [ "once_cell", "wasm-bindgen", @@ -3124,11 +3110,10 @@ checksum = "1670343e58806300d87950e3401e820b519b9384281bbabfb15e3636689ffd69" [[package]] name = "lzma-rust2" -version = "0.16.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d673a11333485e7d8b93d62a9a5b07b22daf5e8a8655a44c1bb18aa4bf3d1524" +checksum = "47bb1e988e6fb779cf720ad431242d3f03167c1b3f2b1aae7f1a94b2495b36ae" dependencies = [ - "crc", "sha2", ] @@ -4837,15 +4822,15 @@ dependencies = [ [[package]] name = "sdl3-src" -version = "3.4.0" +version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d75184862d20bd48bdfeb7a6ee00d67c211e6a7301dc8011f7db1ed8e78fbf3" +checksum = "e8cdee3a2e98fa6c01aff481da8b61594b40bf7dbc98fd0356c1e123661da3e7" [[package]] name = "sdl3-sys" -version = "0.6.0+SDL-3.4.0" +version = "0.6.1+SDL-3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8361b0312462d2cf9c115fcbdf9cfceceef79d53faec3b50efd6447ac903eb23" +checksum = "1d73fc820b0b6b9bd0557de7b799ec9da1ca4f35fcd1cb42f7ceb85e640d1477" dependencies = [ "cc", "cmake", @@ -4873,9 +4858,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.6.0" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d17b898a6d6948c3a8ee4372c17cb384f90d2e6e912ef00895b14fd7ab54ec38" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ "bitflags 2.11.0", "core-foundation 0.10.1", @@ -4886,9 +4871,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.16.0" +version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "321c8673b092a9a42605034a9879d73cb79101ed5fd117bc9a597b89b4e9e61a" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ "core-foundation-sys", "libc", @@ -5426,9 +5411,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.116" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df424c70518695237746f84cede799c9c58fcb37450d7b23716568cc8bc69cb" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -5769,9 +5754,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.0.8+spec-1.1.0" +version = "1.0.9+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0742ff5ff03ea7e67c8ae6c93cac239e0d9784833362da3f9a9c1da8dfefcbdc" +checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4" dependencies = [ "winnow", ] @@ -5968,9 +5953,9 @@ checksum = "ce61d488bcdc9bc8b5d1772c404828b17fc481c0a582b5581e95fb233aef503e" [[package]] name = "unicode-ident" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "537dd038a89878be9b64dd4bd1b260315c1bb94f4d784956b81e27a088d9a09e" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-linebreak" @@ -6179,9 +6164,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.108" +version = "0.2.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" +checksum = "ec1adf1535672f5b7824f817792b1afd731d7e843d2d04ec8f27e8cb51edd8ac" dependencies = [ "cfg-if", "once_cell", @@ -6192,9 +6177,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.58" +version = "0.4.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f" +checksum = "fe88540d1c934c4ec8e6db0afa536876c5441289d7f9f9123d4f065ac1250a6b" dependencies = [ "cfg-if", "futures-util", @@ -6206,9 +6191,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.108" +version = "0.2.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" +checksum = "19e638317c08b21663aed4d2b9a2091450548954695ff4efa75bff5fa546b3b1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6216,9 +6201,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.108" +version = "0.2.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" +checksum = "2c64760850114d03d5f65457e96fc988f11f01d38fbaa51b254e4ab5809102af" dependencies = [ "bumpalo", "proc-macro2", @@ -6229,9 +6214,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.108" +version = "0.2.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" +checksum = "60eecd4fe26177cfa3339eb00b4a36445889ba3ad37080c2429879718e20ca41" dependencies = [ "unicode-ident", ] @@ -6407,9 +6392,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.85" +version = "0.3.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" +checksum = "9d6bb20ed2d9572df8584f6dc81d68a41a625cadc6f15999d649a70ce7e3597a" dependencies = [ "js-sys", "wasm-bindgen", @@ -7441,9 +7426,9 @@ dependencies = [ [[package]] name = "zip" -version = "8.0.0" +version = "8.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79b32dd4ad3aca14ae109f8cce0495ac1c57f6f4f00ad459a40e582f89440d97" +checksum = "6e499faf5c6b97a0d086f4a8733de6d47aee2252b8127962439d8d4311a73f72" dependencies = [ "aes", "bzip2", @@ -7454,7 +7439,7 @@ dependencies = [ "getrandom 0.4.1", "hmac", "indexmap", - "lzma-rust2 0.16.1", + "lzma-rust2 0.16.2", "memchr", "pbkdf2", "ppmd-rust", @@ -7468,9 +7453,9 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.6.0" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7948af682ccbc3342b6e9420e8c51c1fe5d7bf7756002b4a3c6cabfe96a7e3c" +checksum = "c745c48e1007337ed136dc99df34128b9faa6ed542d80a1c673cf55a6d7236c8" [[package]] name = "zmij" From e750b6eed15a34481c26413dc2d17e0b731ba50e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 27 Feb 2026 19:11:00 +0100 Subject: [PATCH 0686/1117] upload unzipped artifact (#670) --- .github/workflows/build.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 54b3247..3ccce3e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -63,10 +63,11 @@ jobs: env: NETPLAY_ID: ${{ secrets.NETPLAY_ID }} - name: Upload file - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: gopher64-${{ matrix.arch }} path: output/gopher64-${{ matrix.arch }} + archive: false build-windows: runs-on: ${{ matrix.os }} @@ -110,10 +111,11 @@ jobs: NETPLAY_ID: ${{ secrets.NETPLAY_ID }} - name: Upload unsigned artifact id: upload-unsigned-artifact - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: gopher64-${{ matrix.arch }} path: output/gopher64-${{ matrix.arch }}.exe + archive: false - name: SignPath if: ${{ github.ref_type == 'tag' }} uses: signpath/github-action-submit-signing-request@v2.0 @@ -154,7 +156,8 @@ jobs: AR: ar NETPLAY_ID: ${{ secrets.NETPLAY_ID }} - name: Upload file - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: gopher64-${{ matrix.arch }} path: output/gopher64-${{ matrix.arch }} + archive: false From b4ae7db3dd163213b07d1a71d356688b35b3988f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 5 Mar 2026 20:37:50 +0100 Subject: [PATCH 0687/1117] Update to Rust 1.94.0 (#672) --- Cargo.lock | 423 +++++++++++++++++++++++--------------------- Cargo.toml | 2 +- rust-toolchain.toml | 2 +- 3 files changed, 222 insertions(+), 205 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 82711a1..d2a7571 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -119,9 +119,9 @@ dependencies = [ [[package]] name = "annotate-snippets" -version = "0.12.12" +version = "0.12.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c86cd1c51b95d71dde52bca69ed225008f6ff4c8cc825b08042aa1ef823e1980" +checksum = "74fc7650eedcb2fee505aad48491529e408f0e854c2d9f63eb86c1361b9b3f93" dependencies = [ "anstyle", "memchr", @@ -279,7 +279,7 @@ dependencies = [ "futures-lite", "parking", "polling", - "rustix 1.1.3", + "rustix 1.1.4", "slab", "windows-sys 0.61.2", ] @@ -310,7 +310,7 @@ dependencies = [ "cfg-if", "event-listener", "futures-lite", - "rustix 1.1.3", + "rustix 1.1.4", ] [[package]] @@ -336,7 +336,7 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 1.1.3", + "rustix 1.1.4", "signal-hook-registry", "slab", "windows-sys 0.61.2", @@ -376,9 +376,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "auto_enums" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c170965892137a3a9aeb000b4524aa3cc022a310e709d848b6e1cdce4ab4781" +checksum = "65398a2893f41bce5c9259f6e1a4f03fbae40637c1bdc755b4f387f48c613b03" dependencies = [ "derive_utils", "proc-macro2", @@ -437,9 +437,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.16.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9a7b350e3bb1767102698302bc37256cbd48422809984b98d292c40e2579aa9" +checksum = "94bffc006df10ac2a68c83692d734a465f8ee6c5b384d8545a636f81d858f4bf" dependencies = [ "aws-lc-sys", "zeroize", @@ -447,9 +447,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.37.1" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b092fe214090261288111db7a2b2c2118e5a7f30dc2569f1732c4069a6840549" +checksum = "4321e568ed89bb5a7d291a7f37997c2c0df89809d7b6d12062c81ddb54aa782e" dependencies = [ "cc", "cmake", @@ -556,7 +556,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" dependencies = [ - "objc2 0.6.3", + "objc2 0.6.4", ] [[package]] @@ -668,7 +668,7 @@ checksum = "4dbf9978365bac10f54d1d4b04f7ce4427e51f71d61f2fe15e3fed5166474df7" dependencies = [ "bitflags 2.11.0", "polling", - "rustix 1.1.3", + "rustix 1.1.4", "slab", "tracing", ] @@ -692,7 +692,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "138efcf0940a02ebf0cc8d1eff41a1682a46b431630f4c52450d6265876021fa" dependencies = [ "calloop 0.14.4", - "rustix 1.1.3", + "rustix 1.1.4", "wayland-backend", "wayland-client", ] @@ -767,9 +767,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.43" +version = "0.4.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" dependencies = [ "iana-time-zone", "js-sys", @@ -850,9 +850,12 @@ dependencies = [ [[package]] name = "clru" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbd0f76e066e64fdc5631e3bb46381254deab9ef1158292f27c8c57e3bf3fe59" +checksum = "197fd99cb113a8d5d9b6376f3aa817f32c1078f2343b714fff7d2ca44fdf67d5" +dependencies = [ + "hashbrown 0.16.1", +] [[package]] name = "cmake" @@ -1150,9 +1153,9 @@ checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" [[package]] name = "deflate64" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26bf8fc351c5ed29b5c2f0cbbac1b209b74f60ecd62e675a998df72c49af5204" +checksum = "807800ff3288b621186fe0a8f3392c4652068257302709c24efd918c3dffcdc2" [[package]] name = "deranged" @@ -1188,9 +1191,9 @@ dependencies = [ [[package]] name = "derive_utils" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccfae181bab5ab6c5478b2ccb69e4c68a02f8c3ec72f6616bfec9dbc599d2ee0" +checksum = "362f47930db19fe7735f527e6595e4900316b893ebf6d48ad3d31be928d57dd6" dependencies = [ "proc-macro2", "quote", @@ -1237,14 +1240,14 @@ checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" [[package]] name = "dispatch2" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ "bitflags 2.11.0", "block2 0.6.2", "libc", - "objc2 0.6.3", + "objc2 0.6.4", ] [[package]] @@ -1260,9 +1263,9 @@ dependencies = [ [[package]] name = "dlib" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +checksum = "ab8ecd87370524b461f8557c119c405552c396ed91fc0a8eec68679eab26f94a" dependencies = [ "libloading", ] @@ -1281,26 +1284,27 @@ checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" [[package]] name = "drm" -version = "0.14.1" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" +checksum = "c5b71449a23fe79542d6527ca572844b2016abf9573c49e43144d546b1735aec" dependencies = [ "bitflags 2.11.0", "bytemuck", + "bytemuck_derive", "drm-ffi", "drm-fourcc", "libc", - "rustix 0.38.44", + "rustix 1.1.4", ] [[package]] name = "drm-ffi" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e41459d99a9b529845f6d2c909eb9adf3b6d2f82635ae40be8de0601726e8b" +checksum = "51a91c9b32ac4e8105dec255e849e0d66e27d7c34d184364fb93e469db08f690" dependencies = [ "drm-sys", - "rustix 0.38.44", + "rustix 1.1.4", ] [[package]] @@ -1311,12 +1315,12 @@ checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" [[package]] name = "drm-sys" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bafb66c8dbc944d69e15cfcc661df7e703beffbaec8bd63151368b06c5f9858c" +checksum = "ecc8e1361066d91f5ffccff060a3c3be9c3ecde15be2959c1937595f7a82a9f8" dependencies = [ "libc", - "linux-raw-sys 0.6.5", + "linux-raw-sys 0.9.4", ] [[package]] @@ -1618,7 +1622,7 @@ dependencies = [ "icu_locale_core", "linebender_resource_handle", "memmap2", - "objc2 0.6.3", + "objc2 0.6.4", "objc2-core-foundation", "objc2-core-text", "objc2-foundation 0.3.2", @@ -1817,7 +1821,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" dependencies = [ - "rustix 1.1.3", + "rustix 1.1.4", "windows-link", ] @@ -1852,21 +1856,21 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi", + "r-efi 5.3.0", "wasip2", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi", + "r-efi 6.0.0", "rand_core 0.10.0", "wasip2", "wasip3", @@ -1926,7 +1930,7 @@ dependencies = [ "glutin_glx_sys", "glutin_wgl_sys", "libloading", - "objc2 0.6.3", + "objc2 0.6.4", "objc2-app-kit 0.3.2", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -2329,7 +2333,7 @@ dependencies = [ "i-slint-renderer-skia", "lyon_path", "muda", - "objc2 0.6.3", + "objc2 0.6.4", "objc2-app-kit 0.3.2", "objc2-foundation 0.3.2", "objc2-quartz-core 0.3.2", @@ -2381,7 +2385,7 @@ dependencies = [ "resvg", "rowan", "rspolib", - "smol_str 0.3.5", + "smol_str 0.3.6", "strum", "typed-index-collections", "url", @@ -2463,7 +2467,7 @@ dependencies = [ "i-slint-core", "i-slint-core-macros", "lyon_path", - "objc2 0.6.3", + "objc2 0.6.4", "objc2-app-kit 0.3.2", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -2755,9 +2759,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.11.0" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" [[package]] name = "iri-string" @@ -2852,9 +2856,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.88" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e709f3e3d22866f9c25b3aff01af289b18422cc8b4262fb19103ee80fe513d" +checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" dependencies = [ "once_cell", "wasm-bindgen", @@ -2967,13 +2971,14 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.12" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" +checksum = "1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a" dependencies = [ "bitflags 2.11.0", "libc", - "redox_syscall 0.7.1", + "plain", + "redox_syscall 0.7.3", ] [[package]] @@ -3015,15 +3020,15 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.6.5" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "linux-raw-sys" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" @@ -3102,12 +3107,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "lzma-rust2" -version = "0.15.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1670343e58806300d87950e3401e820b519b9384281bbabfb15e3636689ffd69" - [[package]] name = "lzma-rust2" version = "0.16.2" @@ -3212,7 +3211,7 @@ dependencies = [ "crossbeam-channel", "dpi", "keyboard-types", - "objc2 0.6.3", + "objc2 0.6.4", "objc2-app-kit 0.3.2", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -3404,9 +3403,9 @@ dependencies = [ [[package]] name = "objc2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" dependencies = [ "objc2-encode", ] @@ -3436,7 +3435,7 @@ dependencies = [ "bitflags 2.11.0", "block2 0.6.2", "libc", - "objc2 0.6.3", + "objc2 0.6.4", "objc2-cloud-kit 0.3.2", "objc2-core-data 0.3.2", "objc2-core-foundation", @@ -3468,7 +3467,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ "bitflags 2.11.0", - "objc2 0.6.3", + "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -3502,7 +3501,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ "bitflags 2.11.0", - "objc2 0.6.3", + "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -3514,7 +3513,7 @@ checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ "bitflags 2.11.0", "dispatch2", - "objc2 0.6.3", + "objc2 0.6.4", ] [[package]] @@ -3525,7 +3524,7 @@ checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ "bitflags 2.11.0", "dispatch2", - "objc2 0.6.3", + "objc2 0.6.4", "objc2-core-foundation", "objc2-io-surface", ] @@ -3548,7 +3547,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" dependencies = [ - "objc2 0.6.3", + "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -3571,7 +3570,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ "bitflags 2.11.0", - "objc2 0.6.3", + "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", ] @@ -3583,7 +3582,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" dependencies = [ "bitflags 2.11.0", - "objc2 0.6.3", + "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", "objc2-io-surface", @@ -3616,7 +3615,7 @@ checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ "bitflags 2.11.0", "block2 0.6.2", - "objc2 0.6.3", + "objc2 0.6.4", "objc2-core-foundation", ] @@ -3627,7 +3626,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ "bitflags 2.11.0", - "objc2 0.6.3", + "objc2 0.6.4", "objc2-core-foundation", ] @@ -3662,7 +3661,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794" dependencies = [ "bitflags 2.11.0", - "objc2 0.6.3", + "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -3686,7 +3685,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ "bitflags 2.11.0", - "objc2 0.6.3", + "objc2 0.6.4", "objc2-core-foundation", "objc2-foundation 0.3.2", "objc2-metal 0.3.2", @@ -3731,7 +3730,7 @@ checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ "bitflags 2.11.0", "block2 0.6.2", - "objc2 0.6.3", + "objc2 0.6.4", "objc2-core-foundation", "objc2-foundation 0.3.2", "objc2-quartz-core 0.3.2", @@ -3914,18 +3913,18 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" [[package]] name = "pin-project" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" dependencies = [ "proc-macro2", "quote", @@ -3934,9 +3933,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pin-utils" @@ -3952,9 +3951,9 @@ checksum = "b330c9d1b92dfe68442ca20b009c717d5f0b1e3cf4965e62f704c3c6e95a1305" [[package]] name = "piper" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" dependencies = [ "atomic-waker", "fastrand", @@ -3967,6 +3966,12 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + [[package]] name = "png" version = "0.17.16" @@ -4003,7 +4008,7 @@ dependencies = [ "concurrent-queue", "hermit-abi 0.5.2", "pin-project-lite", - "rustix 1.1.3", + "rustix 1.1.4", "windows-sys 0.61.2", ] @@ -4077,11 +4082,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.23.10+spec-1.0.0", + "toml_edit 0.25.4+spec-1.1.0", ] [[package]] @@ -4114,9 +4119,9 @@ dependencies = [ [[package]] name = "pulldown-cmark" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e8bbe1a966bd2f362681a44f6edce3c2310ac21e4d5067a6e7ec396297a6ea0" +checksum = "83c41efbf8f90ac44de7f3a868f0867851d261b56291732d0cbf7cceaaeb55a6" dependencies = [ "bitflags 2.11.0", "getopts", @@ -4133,12 +4138,9 @@ checksum = "007d8adb5ddab6f8e3f491ac63566a7d5002cc7ed73901f72057943fa71ae1ae" [[package]] name = "pxfm" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7186d3822593aa4393561d186d1393b3923e9d6163d3fbfd6e825e3e6cf3e6a8" -dependencies = [ - "num-traits", -] +checksum = "b5a041e753da8b807c9255f28de81879c78c876392ff2469cde94799b2896b9d" [[package]] name = "qoi" @@ -4172,9 +4174,9 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quick-xml" -version = "0.38.4" +version = "0.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" +checksum = "958f21e8e7ceb5a1aa7fa87fab28e7c75976e0bfe7e23ff069e0a260f894067d" dependencies = [ "memchr", ] @@ -4237,9 +4239,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.44" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] @@ -4250,6 +4252,12 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + [[package]] name = "rand" version = "0.9.2" @@ -4267,7 +4275,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc266eb313df6c5c09c1c7b1fbe2510961e5bcd3add930c1e31f7ed9da0feff8" dependencies = [ "chacha20", - "getrandom 0.4.1", + "getrandom 0.4.2", "rand_core 0.10.0", ] @@ -4367,7 +4375,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40d213455a5f1dc59214213c7330e074ddf8114c9a42411eb890c767357ce135" dependencies = [ - "objc2 0.6.3", + "objc2 0.6.4", "objc2-core-foundation", "objc2-foundation 0.3.2", "objc2-quartz-core 0.3.2", @@ -4424,9 +4432,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.7.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35985aa610addc02e24fc232012c86fd11f14111180f902b67e2d5331f8ebf2b" +checksum = "6ce70a74e890531977d37e532c34d45e9055d2409ed08ddba14529471ed0be16" dependencies = [ "bitflags 2.11.0", ] @@ -4467,9 +4475,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.9" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "reqwest" @@ -4540,7 +4548,7 @@ dependencies = [ "js-sys", "libc", "log", - "objc2 0.6.3", + "objc2 0.6.4", "objc2-app-kit 0.3.2", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -4558,9 +4566,9 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.52" +version = "0.8.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" +checksum = "47b34b781b31e5d73e9fbc8689c70551fd1ade9a19e3e28cfec8580a79290cc4" dependencies = [ "bytemuck", ] @@ -4655,22 +4663,22 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ "bitflags 2.11.0", "errno", "libc", - "linux-raw-sys 0.11.0", + "linux-raw-sys 0.12.1", "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.36" +version = "0.23.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" +checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" dependencies = [ "aws-lc-rs", "once_cell", @@ -4971,17 +4979,17 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.20.1" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65126b94d6f5a6d727b1e35b0a796685a79062ceaf5fa45321315e62b65251a2" +checksum = "29225600349ef74beda5a9fffb36ac660a24613c0bde9315d0c49be1d51e9c24" dependencies = [ "aes", "bzip2", "cbc", "crc32fast", - "getrandom 0.3.4", + "getrandom 0.4.2", "js-sys", - "lzma-rust2 0.15.7", + "lzma-rust2", "ppmd-rust", "sha2", "wasm-bindgen", @@ -5197,7 +5205,7 @@ dependencies = [ "libc", "log", "memmap2", - "rustix 1.1.3", + "rustix 1.1.4", "thiserror 2.0.18", "wayland-backend", "wayland-client", @@ -5233,9 +5241,9 @@ dependencies = [ [[package]] name = "smol_str" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f7a918bd2a9951d18ee6e48f076843e8e73a9a5d22cf05bcd4b7a81bdd04e17" +checksum = "4aaa7368fcf4852a4c2dd92df0cace6a71f2091ca0a23391ce7f3a31833f1523" dependencies = [ "borsh", "serde_core", @@ -5285,14 +5293,14 @@ dependencies = [ "js-sys", "memmap2", "ndk", - "objc2 0.6.3", + "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", "objc2-foundation 0.3.2", "objc2-quartz-core 0.3.2", "raw-window-handle", "redox_syscall 0.5.18", - "rustix 1.1.3", + "rustix 1.1.4", "tiny-xlib", "tracing", "wasm-bindgen", @@ -5486,14 +5494,14 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.25.0" +version = "3.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0136791f7c95b1f6dd99f9cc786b91bb81c3800b639b3478e561ddb7be95e5f1" +checksum = "82a72c767771b47409d2345987fda8628641887d5466101319899796367354a0" dependencies = [ "fastrand", - "getrandom 0.4.1", + "getrandom 0.4.2", "once_cell", - "rustix 1.1.3", + "rustix 1.1.4", "windows-sys 0.61.2", ] @@ -5644,9 +5652,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.49.0" +version = "1.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" +checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" dependencies = [ "bytes", "libc", @@ -5659,9 +5667,9 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" dependencies = [ "proc-macro2", "quote", @@ -5712,7 +5720,7 @@ dependencies = [ "indexmap", "serde_core", "serde_spanned", - "toml_datetime", + "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "toml_writer", "winnow", @@ -5728,15 +5736,12 @@ dependencies = [ ] [[package]] -name = "toml_edit" -version = "0.23.10+spec-1.0.0" +name = "toml_datetime" +version = "1.0.0+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" +checksum = "32c2555c699578a4f59f0cc68e5116c8d7cabbd45e1409b989d4be085b53f13e" dependencies = [ - "indexmap", - "toml_datetime", - "toml_parser", - "winnow", + "serde_core", ] [[package]] @@ -5746,12 +5751,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01f2eadbbc6b377a847be05f60791ef1058d9f696ecb51d2c07fe911d8569d8e" dependencies = [ "indexmap", - "toml_datetime", + "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "toml_writer", "winnow", ] +[[package]] +name = "toml_edit" +version = "0.25.4+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7193cbd0ce53dc966037f54351dbbcf0d5a642c7f0038c382ef9e677ce8c13f2" +dependencies = [ + "indexmap", + "toml_datetime 1.0.0+spec-1.1.0", + "toml_parser", + "winnow", +] + [[package]] name = "toml_parser" version = "1.0.9+spec-1.1.0" @@ -5918,13 +5935,13 @@ dependencies = [ [[package]] name = "uds_windows" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" +checksum = "51b70b87d15e91f553711b40df3048faf27a7a04e01e0ddc0cf9309f0af7c2ca" dependencies = [ "memoffset", "tempfile", - "winapi", + "windows-sys 0.61.2", ] [[package]] @@ -6164,9 +6181,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.111" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec1adf1535672f5b7824f817792b1afd731d7e843d2d04ec8f27e8cb51edd8ac" +checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" dependencies = [ "cfg-if", "once_cell", @@ -6177,9 +6194,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.61" +version = "0.4.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe88540d1c934c4ec8e6db0afa536876c5441289d7f9f9123d4f065ac1250a6b" +checksum = "e9c5522b3a28661442748e09d40924dfb9ca614b21c00d3fd135720e48b67db8" dependencies = [ "cfg-if", "futures-util", @@ -6191,9 +6208,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.111" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e638317c08b21663aed4d2b9a2091450548954695ff4efa75bff5fa546b3b1" +checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6201,9 +6218,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.111" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c64760850114d03d5f65457e96fc988f11f01d38fbaa51b254e4ab5809102af" +checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" dependencies = [ "bumpalo", "proc-macro2", @@ -6214,9 +6231,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.111" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60eecd4fe26177cfa3339eb00b4a36445889ba3ad37080c2429879718e20ca41" +checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" dependencies = [ "unicode-ident", ] @@ -6257,13 +6274,13 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fee64194ccd96bf648f42a65a7e589547096dfa702f7cadef84347b66ad164f9" +checksum = "eaa6143502b9a87f759cb6a649ca801a226f77740eb54f3951cba2227790afeb" dependencies = [ "cc", "downcast-rs", - "rustix 1.1.3", + "rustix 1.1.4", "scoped-tls", "smallvec", "wayland-sys", @@ -6271,12 +6288,12 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.12" +version = "0.31.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e6faa537fbb6c186cb9f1d41f2f811a4120d1b57ec61f50da451a0c5122bec" +checksum = "ab51d9f7c071abeee76007e2b742499e535148035bb835f97aaed1338cf516c3" dependencies = [ "bitflags 2.11.0", - "rustix 1.1.3", + "rustix 1.1.4", "wayland-backend", "wayland-scanner", ] @@ -6294,20 +6311,20 @@ dependencies = [ [[package]] name = "wayland-cursor" -version = "0.31.12" +version = "0.31.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5864c4b5b6064b06b1e8b74ead4a98a6c45a285fe7a0e784d24735f011fdb078" +checksum = "4b3298683470fbdc6ca40151dfc48c8f2fd4c41a26e13042f801f85002384091" dependencies = [ - "rustix 1.1.3", + "rustix 1.1.4", "wayland-client", "xcursor", ] [[package]] name = "wayland-protocols" -version = "0.32.10" +version = "0.32.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baeda9ffbcfc8cd6ddaade385eaf2393bd2115a69523c735f12242353c3df4f3" +checksum = "b23b5df31ceff1328f06ac607591d5ba360cf58f90c8fad4ac8d3a55a3c4aec7" dependencies = [ "bitflags 2.11.0", "wayland-backend", @@ -6330,9 +6347,9 @@ dependencies = [ [[package]] name = "wayland-protocols-misc" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791c58fdeec5406aa37169dd815327d1e47f334219b523444bc26d70ceb4c34e" +checksum = "429b99200febaf95d4f4e46deff6fe4382bcff3280ee16a41cf887b3c3364984" dependencies = [ "bitflags 2.11.0", "wayland-backend", @@ -6343,9 +6360,9 @@ dependencies = [ [[package]] name = "wayland-protocols-plasma" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa98634619300a535a9a97f338aed9a5ff1e01a461943e8346ff4ae26007306b" +checksum = "d392fc283a87774afc9beefcd6f931582bb97fe0e6ced0b306a62cb1d026527c" dependencies = [ "bitflags 2.11.0", "wayland-backend", @@ -6356,9 +6373,9 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9597cdf02cf0c34cd5823786dce6b5ae8598f05c2daf5621b6e178d4f7345f3" +checksum = "78248e4cc0eff8163370ba5c158630dcae1f3497a586b826eca2ef5f348d6235" dependencies = [ "bitflags 2.11.0", "wayland-backend", @@ -6369,9 +6386,9 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.8" +version = "0.31.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5423e94b6a63e68e439803a3e153a9252d5ead12fd853334e2ad33997e3889e3" +checksum = "c86287151a309799b821ca709b7345a048a2956af05957c89cb824ab919fa4e3" dependencies = [ "proc-macro2", "quick-xml", @@ -6380,9 +6397,9 @@ dependencies = [ [[package]] name = "wayland-sys" -version = "0.31.8" +version = "0.31.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6dbfc3ac5ef974c92a2235805cc0114033018ae1290a72e474aa8b28cbbdfd" +checksum = "81d2bd69b1dadd601d0e98ef2fc9339a1b1e00cec5ee7545a77b5a0f52a90394" dependencies = [ "dlib", "log", @@ -6392,9 +6409,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.88" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6bb20ed2d9572df8584f6dc81d68a41a625cadc6f15999d649a70ce7e3597a" +checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9" dependencies = [ "js-sys", "wasm-bindgen", @@ -6940,9 +6957,9 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winit" -version = "0.30.12" +version = "0.30.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66d4b9ed69c4009f6321f762d6e61ad8a2389cd431b97cb1e146812e9e6c732" +checksum = "a6755fa58a9f8350bd1e472d4c3fcc25f824ec358933bba33306d0b63df5978d" dependencies = [ "ahash", "android-activity", @@ -6992,9 +7009,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.14" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" dependencies = [ "memchr", ] @@ -7148,7 +7165,7 @@ dependencies = [ "libc", "libloading", "once_cell", - "rustix 1.1.3", + "rustix 1.1.4", "x11rb-protocol", ] @@ -7165,7 +7182,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", - "rustix 1.1.3", + "rustix 1.1.4", ] [[package]] @@ -7264,9 +7281,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.13.2" +version = "5.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfeff997a0aaa3eb20c4652baf788d2dfa6d2839a0ead0b3ff69ce2f9c4bdd1" +checksum = "ca82f95dbd3943a40a53cfded6c2d0a2ca26192011846a1810c4256ef92c60bc" dependencies = [ "async-broadcast", "async-executor", @@ -7284,7 +7301,7 @@ dependencies = [ "hex", "libc", "ordered-stream", - "rustix 1.1.3", + "rustix 1.1.4", "serde", "serde_repr", "tracing", @@ -7299,9 +7316,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.13.2" +version = "5.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bbd5a90dbe8feee5b13def448427ae314ccd26a49cac47905cafefb9ff846f1" +checksum = "897e79616e84aac4b2c46e9132a4f63b93105d54fe8c0e8f6bffc21fa8d49222" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -7331,18 +7348,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.39" +version = "0.8.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a" +checksum = "a789c6e490b576db9f7e6b6d661bcc9799f7c0ac8352f56ea20193b2681532e5" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.39" +version = "0.8.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" +checksum = "f65c489a7071a749c849713807783f70672b28094011623e200cb86dcb835953" dependencies = [ "proc-macro2", "quote", @@ -7426,9 +7443,9 @@ dependencies = [ [[package]] name = "zip" -version = "8.1.0" +version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e499faf5c6b97a0d086f4a8733de6d47aee2252b8127962439d8d4311a73f72" +checksum = "b680f2a0cd479b4cff6e1233c483fdead418106eae419dc60200ae9850f6d004" dependencies = [ "aes", "bzip2", @@ -7436,10 +7453,10 @@ dependencies = [ "crc32fast", "deflate64", "flate2", - "getrandom 0.4.1", + "getrandom 0.4.2", "hmac", "indexmap", - "lzma-rust2 0.16.2", + "lzma-rust2", "memchr", "pbkdf2", "ppmd-rust", @@ -7453,9 +7470,9 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c745c48e1007337ed136dc99df34128b9faa6ed542d80a1c673cf55a6d7236c8" +checksum = "3be3d40e40a133f9c916ee3f9f4fa2d9d63435b5fbe1bfc6d9dae0aa0ada1513" [[package]] name = "zmij" @@ -7544,9 +7561,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.9.2" +version = "5.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b64ef4f40c7951337ddc7023dd03528a57a3ce3408ee9da5e948bd29b232c4" +checksum = "5708299b21903bbe348e94729f22c49c55d04720a004aa350f1f9c122fd2540b" dependencies = [ "endi", "enumflags2", @@ -7558,9 +7575,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.9.2" +version = "5.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "484d5d975eb7afb52cc6b929c13d3719a20ad650fea4120e6310de3fc55e415c" +checksum = "5b59b012ebe9c46656f9cc08d8da8b4c726510aef12559da3e5f1bf72780752c" dependencies = [ "proc-macro-crate", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index 5a35265..b445026 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "gopher64" version = "1.1.15" edition = "2024" -rust-version = "1.93.1" +rust-version = "1.94.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 5355133..76a06e6 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.93.1" +channel = "1.94.0" From 1c6e23b7f2e9126d9433f42edc62427c1b46e187 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 5 Mar 2026 20:42:24 +0100 Subject: [PATCH 0688/1117] Update parallel-rdp --- parallel-rdp/parallel-rdp-standalone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parallel-rdp/parallel-rdp-standalone b/parallel-rdp/parallel-rdp-standalone index c177532..5f46864 160000 --- a/parallel-rdp/parallel-rdp-standalone +++ b/parallel-rdp/parallel-rdp-standalone @@ -1 +1 @@ -Subproject commit c177532a0a24767c33b386ba9aac6c4610795401 +Subproject commit 5f46864e605d6bc9cc5dba15bd6aedfd03b7bb42 From 768fcdaf7fefe9fe308ad3557d6f157d8e26bb9a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 5 Mar 2026 21:21:47 +0100 Subject: [PATCH 0689/1117] bump to v1.1.16 --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d2a7571..0cf8f26 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1984,7 +1984,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.15" +version = "1.1.16" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index b445026..bdc7771 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.15" +version = "1.1.16" edition = "2024" rust-version = "1.94.0" From acf5e08b97d8526e7f25578bdaa202557c42c200 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 10 Mar 2026 09:29:49 +0100 Subject: [PATCH 0690/1117] cargo update --- Cargo.lock | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0cf8f26..0c5e6da 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2929,9 +2929,9 @@ checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" -version = "0.2.182" +version = "0.2.183" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" +checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" [[package]] name = "libfuzzer-sys" @@ -3068,9 +3068,9 @@ checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" [[package]] name = "lyon_algorithms" -version = "1.0.16" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c0829e28c4f336396f250d850c3987e16ce6db057ffe047ce0dd54aab6b647" +checksum = "9815fac08e6fd96733a11dce4f9d15a3f338e96a2e2311ee21e1b738efc2bc0f" dependencies = [ "lyon_path", "num-traits", @@ -3078,19 +3078,19 @@ dependencies = [ [[package]] name = "lyon_extra" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ca94c7bf1e2557c2798989c43416822c12fc5dcc5e17cc3307ef0e71894a955" +checksum = "7755f08423275157ad1680aaecc9ccb7e0cc633da3240fea2d1522935cc15c72" dependencies = [ "lyon_path", - "thiserror 1.0.69", + "thiserror 2.0.18", ] [[package]] name = "lyon_geom" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e260b6de923e6e47adfedf6243013a7a874684165a6a277594ee3906021b2343" +checksum = "4336502e29e32af93cf2dad2214ed6003c17ceb5bd499df77b1de663b9042b92" dependencies = [ "arrayvec", "euclid", @@ -3099,9 +3099,9 @@ dependencies = [ [[package]] name = "lyon_path" -version = "1.0.16" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aeca86bcfd632a15984ba029b539ffb811e0a70bf55e814ef8b0f54f506fdeb" +checksum = "5c463f9c428b7fc5ec885dcd39ce4aa61e29111d0e33483f6f98c74e89d8621e" dependencies = [ "lyon_geom", "num-traits", @@ -4203,9 +4203,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.13" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" dependencies = [ "aws-lc-rs", "bytes", @@ -5272,12 +5272,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -6087,9 +6087,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.21.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb" +checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37" dependencies = [ "js-sys", "serde_core", @@ -6274,9 +6274,9 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaa6143502b9a87f759cb6a649ca801a226f77740eb54f3951cba2227790afeb" +checksum = "aa75f400b7f719bcd68b3f47cd939ba654cedeef690f486db71331eec4c6a406" dependencies = [ "cc", "downcast-rs", @@ -6397,9 +6397,9 @@ dependencies = [ [[package]] name = "wayland-sys" -version = "0.31.9" +version = "0.31.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81d2bd69b1dadd601d0e98ef2fc9339a1b1e00cec5ee7545a77b5a0f52a90394" +checksum = "374f6b70e8e0d6bf9461a32988fd553b59ff630964924dad6e4a4eb6bd538d17" dependencies = [ "dlib", "log", @@ -7348,18 +7348,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.40" +version = "0.8.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a789c6e490b576db9f7e6b6d661bcc9799f7c0ac8352f56ea20193b2681532e5" +checksum = "f2578b716f8a7a858b7f02d5bd870c14bf4ddbbcf3a4c05414ba6503640505e3" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.40" +version = "0.8.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f65c489a7071a749c849713807783f70672b28094011623e200cb86dcb835953" +checksum = "7e6cc098ea4d3bd6246687de65af3f920c430e236bee1e3bf2e441463f08a02f" dependencies = [ "proc-macro2", "quote", From fcceca5976993f8986099953315ce5d6617a0fde Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 12 Mar 2026 12:49:59 +0100 Subject: [PATCH 0691/1117] fix mac build (#676) * fix mac build * add freetype * set deployment target * test * test * more * test * more * more * more * more * test * put back * link CoreFoundation * more * more * more --- .cargo/config.toml | 4 +++- .github/workflows/build.yml | 12 ++++++++---- build.rs | 13 +++++++++++++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index dad6971..d901dc4 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,7 +1,7 @@ [target.'cfg(all(target_arch = "aarch64", target_os = "linux"))'] rustflags = ["-C", "link-arg=-fuse-ld=lld"] -[target.'cfg(target_os = "windows")'] +[target.'cfg(any(target_os = "windows", target_os = "macos"))'] linker = "rust-lld" [target.'cfg(target_arch = "x86_64")'] @@ -14,3 +14,5 @@ rustflags = ["-C", "target-cpu=cortex-a76"] CC = "clang" CXX = "clang++" AR = "llvm-ar" +MACOSX_DEPLOYMENT_TARGET = "15.0" +SDKROOT = "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3ccce3e..ccca7ef 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -129,16 +129,14 @@ jobs: wait-for-completion: false build-macos: - if: false runs-on: macos-15 strategy: fail-fast: false matrix: include: - - target: x86_64-apple-darwin - arch: mac-x86_64 - target: aarch64-apple-darwin arch: mac-aarch64 + llvm: ARM64 steps: - uses: actions/checkout@v6 with: @@ -147,13 +145,19 @@ jobs: with: target: ${{ matrix.target }} rustflags: "" + - name: Set LLVM_VERSION + run: echo "LLVM_VERSION=$(rustc --version --verbose | grep "LLVM version" | cut -d':' -f2 | xargs)" >> $GITHUB_ENV + - name: Install LLVM and Clang + uses: KyleMayes/install-llvm-action@v2 + with: + version: ${{ env.LLVM_VERSION }} + force-url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-macOS-${{ matrix.llvm }}.tar.xz - name: Build run: | cargo build --release -v --target=${{ matrix.target }} mkdir output cp target/${{ matrix.target }}/release/gopher64 output/gopher64-${{ matrix.arch }} env: - AR: ar NETPLAY_ID: ${{ secrets.NETPLAY_ID }} - name: Upload file uses: actions/upload-artifact@v7 diff --git a/build.rs b/build.rs index ad87a95..e3fbd9c 100644 --- a/build.rs +++ b/build.rs @@ -94,6 +94,19 @@ fn main() { .set_icon("data/icon/icon.ico") .compile() .unwrap(); + } else if os == "macos" { + println!("cargo:rustc-link-search=native=/opt/homebrew/opt/freetype/lib"); + println!("cargo:rustc-link-lib=freetype"); + + let output = std::process::Command::new("clang") + .args(["--print-runtime-dir"]) + .output() + .unwrap(); + + let runtime_dir = String::from_utf8_lossy(&output.stdout).trim().to_string(); + + println!("cargo:rustc-link-search=native={}", runtime_dir); + println!("cargo:rustc-link-lib=static=clang_rt.osx"); } volk_build.flag("-flto=thin"); From 73a3e6a22a42ddae64a160b9dcede6271753c3a1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 15 Mar 2026 10:49:24 +0100 Subject: [PATCH 0692/1117] Add hint for MoltenVK (#678) --- src/ui/video.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/ui/video.rs b/src/ui/video.rs index 28e3660..810ec94 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -3,6 +3,16 @@ include!(concat!(env!("OUT_DIR"), "/parallel_bindings.rs")); use crate::{device, ui}; pub fn init(device: &mut device::Device) { + #[cfg(target_os = "macos")] + unsafe { + sdl3_sys::everything::SDL_SetHint( + sdl3_sys::hints::SDL_HINT_VULKAN_LIBRARY, + std::ffi::CString::new("/opt/homebrew/lib/libvulkan.dylib") + .unwrap() + .as_ptr(), + ); + } + ui::sdl_init(sdl3_sys::init::SDL_INIT_VIDEO); ui::ttf_init(); From 6de1ef35482d3c2516d7a78dd86442210b2c68d8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 16 Mar 2026 14:55:27 +0100 Subject: [PATCH 0693/1117] change message in input profile --- src/ui/input.rs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/ui/input.rs b/src/ui/input.rs index d829312..956e144 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -711,13 +711,8 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, d } } } - ui::video::draw_text( - format!("Binding set for {key}").as_str(), - renderer, - text_engine, - font, - ); - std::thread::sleep(std::time::Duration::from_millis(200)); + ui::video::draw_text("Binding set, please wait...", renderer, text_engine, font); + std::thread::sleep(std::time::Duration::from_millis(500)); } close_controllers(open_joysticks, open_controllers); From 3e177ea4bedad810cc107c34e41cdf514c6c02dc Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 16 Mar 2026 14:58:02 +0100 Subject: [PATCH 0694/1117] move SDL_HINT_VULKAN_LIBRARY --- src/ui.rs | 10 ++++++++++ src/ui/video.rs | 10 ---------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index 57721c8..6a079db 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -69,6 +69,16 @@ impl Drop for Ui { pub fn sdl_init(flag: sdl3_sys::init::SDL_InitFlags) { unsafe { + #[cfg(target_os = "macos")] + if flag & sdl3_sys::init::SDL_INIT_VIDEO != 0 { + sdl3_sys::everything::SDL_SetHint( + sdl3_sys::hints::SDL_HINT_VULKAN_LIBRARY, + std::ffi::CString::new("/opt/homebrew/lib/libvulkan.dylib") + .unwrap() + .as_ptr(), + ); + } + if sdl3_sys::init::SDL_WasInit(flag) == 0 && !sdl3_sys::init::SDL_InitSubSystem(flag) { let err = std::ffi::CStr::from_ptr(sdl3_sys::error::SDL_GetError()) .to_str() diff --git a/src/ui/video.rs b/src/ui/video.rs index 810ec94..28e3660 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -3,16 +3,6 @@ include!(concat!(env!("OUT_DIR"), "/parallel_bindings.rs")); use crate::{device, ui}; pub fn init(device: &mut device::Device) { - #[cfg(target_os = "macos")] - unsafe { - sdl3_sys::everything::SDL_SetHint( - sdl3_sys::hints::SDL_HINT_VULKAN_LIBRARY, - std::ffi::CString::new("/opt/homebrew/lib/libvulkan.dylib") - .unwrap() - .as_ptr(), - ); - } - ui::sdl_init(sdl3_sys::init::SDL_INIT_VIDEO); ui::ttf_init(); From 8291a9333777703ada7ddb5666f8508db887196e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 17 Mar 2026 19:09:10 +0100 Subject: [PATCH 0695/1117] draw every 100ms in input profile creation --- src/ui/input.rs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/ui/input.rs b/src/ui/input.rs index 956e144..07335b8 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -618,15 +618,14 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, d let mut event: sdl3_sys::events::SDL_Event = Default::default(); while unsafe { sdl3_sys::events::SDL_PollEvent(&mut event) } {} // clear events - ui::video::draw_text( - format!("Select binding for: {key}").as_str(), - renderer, - text_engine, - font, - ); - let mut key_set = false; while !key_set { + ui::video::draw_text( + format!("Select binding for: {key}").as_str(), + renderer, + text_engine, + font, + ); std::thread::sleep(std::time::Duration::from_millis(100)); while unsafe { sdl3_sys::events::SDL_PollEvent(&mut event) } { let event_type = unsafe { event.r#type }; From c6703244b313863bf85f09170a38de42d890dedd Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 17 Mar 2026 19:15:19 +0100 Subject: [PATCH 0696/1117] better window cleanup --- src/ui/input.rs | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/src/ui/input.rs b/src/ui/input.rs index 07335b8..2f7ee7e 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -485,9 +485,13 @@ pub fn clear_bindings(ui: &mut ui::Ui) { } } -fn close_controllers( +fn close_input_profile_window( open_joysticks: Vec<*mut sdl3_sys::joystick::SDL_Joystick>, open_controllers: Vec<*mut sdl3_sys::gamepad::SDL_Gamepad>, + renderer: *mut sdl3_sys::render::SDL_Renderer, + text_engine: *mut sdl3_ttf_sys::ttf::TTF_TextEngine, + font: *mut sdl3_ttf_sys::ttf::TTF_Font, + window: *mut sdl3_sys::video::SDL_Window, ) { for joystick in open_joysticks { unsafe { sdl3_sys::joystick::SDL_CloseJoystick(joystick) } @@ -495,6 +499,13 @@ fn close_controllers( for controller in open_controllers { unsafe { sdl3_sys::gamepad::SDL_CloseGamepad(controller) } } + + unsafe { + sdl3_ttf_sys::ttf::TTF_CloseFont(font); + sdl3_ttf_sys::ttf::TTF_DestroyRendererTextEngine(text_engine); + sdl3_sys::render::SDL_DestroyRenderer(renderer); + sdl3_sys::video::SDL_DestroyWindow(window); + } } pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, deadzone: i32) { @@ -630,7 +641,14 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, d while unsafe { sdl3_sys::events::SDL_PollEvent(&mut event) } { let event_type = unsafe { event.r#type }; if event_type == u32::from(sdl3_sys::events::SDL_EVENT_WINDOW_CLOSE_REQUESTED) { - close_controllers(open_joysticks, open_controllers); + close_input_profile_window( + open_joysticks, + open_controllers, + renderer, + text_engine, + font, + window, + ); return; } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_KEY_DOWN) { if unsafe { @@ -714,14 +732,14 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, d std::thread::sleep(std::time::Duration::from_millis(500)); } - close_controllers(open_joysticks, open_controllers); - - unsafe { - sdl3_ttf_sys::ttf::TTF_CloseFont(font); - sdl3_ttf_sys::ttf::TTF_DestroyRendererTextEngine(text_engine); - sdl3_sys::render::SDL_DestroyRenderer(renderer); - sdl3_sys::video::SDL_DestroyWindow(window); - } + close_input_profile_window( + open_joysticks, + open_controllers, + renderer, + text_engine, + font, + window, + ); let new_profile = ui::config::InputProfile { keys: new_keys, From e7dfd02e173a6235435599847082066958f31ba9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 17 Mar 2026 19:38:00 +0100 Subject: [PATCH 0697/1117] cargo update --- Cargo.lock | 151 +++++++++++++++++++++++++---------------------------- Cargo.toml | 2 +- 2 files changed, 73 insertions(+), 80 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0c5e6da..f0e5120 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -130,9 +130,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.21" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" dependencies = [ "anstyle", "anstyle-parse", @@ -145,15 +145,15 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" [[package]] name = "anstyle-parse" -version = "0.2.7" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" dependencies = [ "utf8parse", ] @@ -708,9 +708,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.56" +version = "1.2.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" +checksum = "7a0dd1ca384932ff3641c8718a02769f1698e7563dc6974ffd03346116310423" dependencies = [ "find-msvc-tools", "jobserver", @@ -801,9 +801,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.60" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a" +checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" dependencies = [ "clap_builder", "clap_derive", @@ -811,9 +811,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.60" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876" +checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" dependencies = [ "anstream", "anstyle", @@ -823,9 +823,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.55" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" +checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a" dependencies = [ "heck", "proc-macro2", @@ -835,9 +835,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] name = "clipboard-win" @@ -883,9 +883,9 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "colorchoice" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "combine" @@ -2641,9 +2641,9 @@ dependencies = [ [[package]] name = "image" -version = "0.25.9" +version = "0.25.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6506c6c10786659413faa717ceebcb8f70731c0a60cbae39795fdf114519c1a" +checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" dependencies = [ "bytemuck", "byteorder-lite", @@ -2659,8 +2659,8 @@ dependencies = [ "rayon", "rgb", "tiff", - "zune-core 0.5.1", - "zune-jpeg 0.5.12", + "zune-core", + "zune-jpeg", ] [[package]] @@ -3194,9 +3194,9 @@ dependencies = [ [[package]] name = "moxcms" -version = "0.7.11" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac9557c559cd6fc9867e122e20d2cbefc9ca29d80d027a8e39310920ed2f0a97" +checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b" dependencies = [ "num-traits", "pxfm", @@ -3365,9 +3365,9 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" dependencies = [ "num_enum_derive", "rustversion", @@ -3375,9 +3375,9 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -3762,9 +3762,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" dependencies = [ "critical-section", "portable-atomic", @@ -3801,9 +3801,9 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "orbclient" -version = "0.3.50" +version = "0.3.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ad2c6bae700b7aa5d1cc30c59bdd3a1c180b09dbaea51e2ae2b8e1cf211fdd" +checksum = "59aed3b33578edcfa1bc96a321d590d31832b6ad55a26f0313362ce687e9abd6" dependencies = [ "libc", "libredox", @@ -4341,9 +4341,9 @@ dependencies = [ [[package]] name = "ravif" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef69c1990ceef18a116855938e74793a5f7496ee907562bd0857b6ac734ab285" +checksum = "e52310197d971b0f5be7fe6b57530dcd27beb35c1b013f29d66c1ad73fbbcc45" dependencies = [ "avif-serialize", "imgref", @@ -4534,7 +4534,7 @@ dependencies = [ "svgtypes", "tiny-skia", "usvg", - "zune-jpeg 0.5.12", + "zune-jpeg", ] [[package]] @@ -4790,9 +4790,9 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.28" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" dependencies = [ "windows-sys 0.61.2", ] @@ -5077,7 +5077,7 @@ dependencies = [ "regex", "serde_json", "tar", - "toml", + "toml 0.9.12+spec-1.1.0", ] [[package]] @@ -5494,9 +5494,9 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.26.0" +version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82a72c767771b47409d2345987fda8628641887d5466101319899796367354a0" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", "getrandom 0.4.2", @@ -5553,16 +5553,16 @@ dependencies = [ [[package]] name = "tiff" -version = "0.10.3" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" +checksum = "b63feaf3343d35b6ca4d50483f94843803b0f51634937cc2ec519fc32232bc52" dependencies = [ "fax", "flate2", "half", "quick-error", "weezl", - "zune-jpeg 0.4.21", + "zune-jpeg", ] [[package]] @@ -5637,9 +5637,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" dependencies = [ "tinyvec_macros", ] @@ -5688,9 +5688,9 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d25a406cddcc431a75d3d9afc6a7c0f7428d4891dd973e4d54c56b46127bf857" +checksum = "8f72a05e828585856dacd553fba484c242c46e391fb0e58917c942ee9202915c" dependencies = [ "futures-util", "log", @@ -5726,6 +5726,21 @@ dependencies = [ "winnow", ] +[[package]] +name = "toml" +version = "1.0.6+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "399b1124a3c9e16766831c6bba21e50192572cdd98706ea114f9502509686ffc" +dependencies = [ + "indexmap", + "serde_core", + "serde_spanned", + "toml_datetime 1.0.0+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow", +] + [[package]] name = "toml_datetime" version = "0.7.5+spec-1.1.0" @@ -5884,9 +5899,9 @@ dependencies = [ [[package]] name = "tungstenite" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442" +checksum = "6c01152af293afb9c7c2a57e4b559c5620b421f6d133261c60dd2d0cdb38e6b8" dependencies = [ "bytes", "data-encoding", @@ -5896,7 +5911,6 @@ dependencies = [ "rand 0.9.2", "sha1", "thiserror 2.0.18", - "utf-8", ] [[package]] @@ -5935,9 +5949,9 @@ dependencies = [ [[package]] name = "uds_windows" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b70b87d15e91f553711b40df3048faf27a7a04e01e0ddc0cf9309f0af7c2ca" +checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" dependencies = [ "memoffset", "tempfile", @@ -6067,12 +6081,6 @@ dependencies = [ "xmlwriter", ] -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -7018,11 +7026,11 @@ dependencies = [ [[package]] name = "winresource" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e287ced0f21cd11f4035fe946fd3af145f068d1acb708afd248100f89ec7432d" +checksum = "0986a8b1d586b7d3e4fe3d9ea39fb451ae22869dcea4aa109d287a374d866087" dependencies = [ - "toml", + "toml 1.0.6+spec-1.1.0", "version_check", ] @@ -7520,12 +7528,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "zune-core" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" - [[package]] name = "zune-core" version = "0.5.1" @@ -7543,20 +7545,11 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.4.21" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" +checksum = "ec5f41c76397b7da451efd19915684f727d7e1d516384ca6bd0ec43ec94de23c" dependencies = [ - "zune-core 0.4.12", -] - -[[package]] -name = "zune-jpeg" -version = "0.5.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "410e9ecef634c709e3831c2cfdb8d9c32164fae1c67496d5b68fff728eec37fe" -dependencies = [ - "zune-core 0.5.1", + "zune-core", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index bdc7771..9ecc3b8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,7 +26,7 @@ spin_sleep = "1.3" encoding_rs = "0.8" mimalloc = "0.1" regex = "1.11" -tokio-tungstenite = "0.28" +tokio-tungstenite = "0.29" futures = "0.3" socket2 = { version = "0.6", features = ["all"] } rand = "0.10" From 72df783d8cc35026acddd5940e10efbc81047b7f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 19 Mar 2026 14:06:53 +0100 Subject: [PATCH 0698/1117] Add CLI option to load a save state (#681) * Add CLI option to load a save state * more * more * more --- parallel-rdp/interface.cpp | 4 ++-- parallel-rdp/interface.hpp | 2 +- src/device.rs | 4 ++++ src/main.rs | 14 ++++++++++++++ src/savestates.rs | 8 ++++++++ src/ui/gui.rs | 2 ++ src/ui/netplay.rs | 4 ++++ src/ui/usb.rs | 1 + src/ui/video.rs | 1 + 9 files changed, 37 insertions(+), 3 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 7cca8e4..e2e0f9c 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -300,7 +300,7 @@ static ImageHandle create_message_image(Vulkan::Device &device, int width, const return handle; } -void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, size_t font_size) +void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, size_t font_size, uint32_t save_state_slot) { memset(&rdp_device, 0, sizeof(RDP_DEVICE)); @@ -365,7 +365,7 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, size_t font_s callback.emu_running = true; callback.enable_speedlimiter = true; callback.paused = false; - callback.save_state_slot = 0; + callback.save_state_slot = save_state_slot; crop_letterbox = false; messages = std::queue(); diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 7106406..57c0dad 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -38,7 +38,7 @@ extern "C" uint32_t save_state_slot; } CALL_BACK; - void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, size_t font_size); + void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, size_t font_size, uint32_t save_state_slot); void rdp_close(); void rdp_set_vi_register(uint32_t reg, uint32_t value); void rdp_update_screen(); diff --git a/src/device.rs b/src/device.rs index 2409507..f86ed3f 100644 --- a/src/device.rs +++ b/src/device.rs @@ -50,6 +50,10 @@ pub fn run_game(device: &mut Device, rom_contents: Vec, game_settings: ui::g if game_settings.disable_expansion_pak { device.rdram.size = 0x400000; } + if let Some(slot) = game_settings.load_savestate_slot { + device.ui.storage.save_state_slot = slot; + device.load_state = true; + } init_rng(device); diff --git a/src/main.rs b/src/main.rs index 4ae3c1e..ced0156 100644 --- a/src/main.rs +++ b/src/main.rs @@ -72,6 +72,13 @@ struct Args { help = "Clear all input profile bindings and controller assignments" )] clear_input_bindings: bool, + #[arg( + short = 's', + long, + value_name = "SLOT", + help = "Load savestate from slot 0-9 when starting the game" + )] + load_state: Option, } fn main() -> std::io::Result<()> { @@ -98,6 +105,12 @@ fn main() -> std::io::Result<()> { ))); }; + if let Some(slot) = args.load_state + && slot > 9 + { + return Err(Error::other("Savestate slot must be between 0 and 9")); + } + let handle = runtime.spawn(async move { let mut device = device::Device::new(); let overclock = device.ui.config.emulation.overclock; @@ -116,6 +129,7 @@ fn main() -> std::io::Result<()> { overclock, disable_expansion_pak, cheats: game_cheats, + load_savestate_slot: args.load_state, }, ); }); diff --git a/src/savestates.rs b/src/savestates.rs index 5a13f2b..41fde77 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -219,6 +219,14 @@ pub fn load_savestate(device: &mut device::Device) { ), ); } + } else { + ui::video::onscreen_message( + &device.ui, + &format!( + "Could not find savestate in slot {}", + device.ui.storage.save_state_slot + ), + ); } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index e7de83e..3358dce 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -30,6 +30,7 @@ pub struct GameSettings { pub overclock: bool, pub disable_expansion_pak: bool, pub cheats: std::collections::HashMap>, + pub load_savestate_slot: Option, } fn check_latest_version(weak: slint::Weak) { @@ -458,6 +459,7 @@ fn open_rom(app: &AppWindow, usb: ui::Usb) { overclock, disable_expansion_pak, cheats: std::collections::HashMap::new(), // will be filled in later + load_savestate_slot: None, }, None, usb, diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index f839e45..159f8f8 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -704,6 +704,7 @@ fn create_session( overclock: overclock.parse().unwrap(), disable_expansion_pak: disable_expansion_pak.parse().unwrap(), cheats: serde_json::from_str(cheats).unwrap(), + load_savestate_slot: None, }, handle.get_peer_addr(), weak_app, @@ -821,6 +822,7 @@ fn join_session( overclock: overclock.parse().unwrap(), disable_expansion_pak: disable_expansion_pak.parse().unwrap(), cheats: serde_json::from_str(cheats).unwrap(), + load_savestate_slot: None, }, handle.get_peer_addr(), weak_app, @@ -1083,6 +1085,7 @@ fn setup_wait_window( overclock: game_settings.overclock, disable_expansion_pak: game_settings.disable_expansion_pak, cheats: game_settings.cheats, + load_savestate_slot: None, }, Some(NetplayDevice { peer_addr: socket_addr, @@ -1203,6 +1206,7 @@ pub fn netplay_window(app: &AppWindow, controller_paths: &[Option]) { overclock: handle.get_overclock_n64_cpu(), disable_expansion_pak: handle.get_disable_expansion_pak(), cheats: std::collections::HashMap::new(), // not used here + load_savestate_slot: None, }, handle.get_rom_dir(), weak_app, diff --git a/src/ui/usb.rs b/src/ui/usb.rs index d5c7db1..ebeffae 100644 --- a/src/ui/usb.rs +++ b/src/ui/usb.rs @@ -52,6 +52,7 @@ fn upload_rom( overclock: handle.get_overclock_n64_cpu(), disable_expansion_pak: handle.get_disable_expansion_pak(), cheats: std::collections::HashMap::new(), // will be filled in later + load_savestate_slot: None, }, None, ui::Usb { diff --git a/src/ui/video.rs b/src/ui/video.rs index 28e3660..006700b 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -81,6 +81,7 @@ pub fn init(device: &mut device::Device) { gfx_info, font_bytes.as_ptr() as *const std::ffi::c_void, font_bytes.len(), + device.ui.storage.save_state_slot, ) } } From faadefe96e5c1e5f63784e0ebd24ff356dc83142 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 19 Mar 2026 19:17:23 +0100 Subject: [PATCH 0699/1117] format cpp code --- parallel-rdp/interface.cpp | 1295 ++++++++++++++++----------------- parallel-rdp/interface.hpp | 84 ++- parallel-rdp/wsi_platform.cpp | 90 +-- parallel-rdp/wsi_platform.hpp | 26 +- 4 files changed, 701 insertions(+), 794 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index e2e0f9c..5eaf878 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -1,9 +1,9 @@ -#include "wsi_platform.hpp" -#include "wsi.hpp" -#include "rdp_device.hpp" #include "interface.hpp" +#include "rdp_device.hpp" #include "spirv.hpp" #include "spirv_crt.hpp" +#include "wsi.hpp" +#include "wsi_platform.hpp" #include #include @@ -21,59 +21,55 @@ using namespace Vulkan; #define DP_STATUS_END_VALID 0x200 #define DP_STATUS_START_VALID 0x400 -enum dpc_registers -{ - DPC_START_REG, - DPC_END_REG, - DPC_CURRENT_REG, - DPC_STATUS_REG, - DPC_CLOCK_REG, - DPC_BUFBUSY_REG, - DPC_PIPEBUSY_REG, - DPC_TMEM_REG, - DPC_REGS_COUNT +enum dpc_registers { + DPC_START_REG, + DPC_END_REG, + DPC_CURRENT_REG, + DPC_STATUS_REG, + DPC_CLOCK_REG, + DPC_BUFBUSY_REG, + DPC_PIPEBUSY_REG, + DPC_TMEM_REG, + DPC_REGS_COUNT }; -enum vi_registers -{ - VI_STATUS_REG, - VI_ORIGIN_REG, - VI_WIDTH_REG, - VI_V_INTR_REG, - VI_CURRENT_REG, - VI_BURST_REG, - VI_V_SYNC_REG, - VI_H_SYNC_REG, - VI_LEAP_REG, - VI_H_START_REG, - VI_V_START_REG, - VI_V_BURST_REG, - VI_X_SCALE_REG, - VI_Y_SCALE_REG, - VI_REGS_COUNT +enum vi_registers { + VI_STATUS_REG, + VI_ORIGIN_REG, + VI_WIDTH_REG, + VI_V_INTR_REG, + VI_CURRENT_REG, + VI_BURST_REG, + VI_V_SYNC_REG, + VI_H_SYNC_REG, + VI_LEAP_REG, + VI_H_START_REG, + VI_V_START_REG, + VI_V_BURST_REG, + VI_X_SCALE_REG, + VI_Y_SCALE_REG, + VI_REGS_COUNT }; -typedef struct -{ - uint32_t depthbuffer_address; - uint32_t framebuffer_address; - uint32_t framebuffer_y_offset; - uint32_t texture_address; - uint32_t framebuffer_pixel_size; - uint32_t framebuffer_width; - uint32_t texture_pixel_size; - uint32_t texture_width; - uint32_t framebuffer_height; - bool depth_buffer_enabled; +typedef struct { + uint32_t depthbuffer_address; + uint32_t framebuffer_address; + uint32_t framebuffer_y_offset; + uint32_t texture_address; + uint32_t framebuffer_pixel_size; + uint32_t framebuffer_width; + uint32_t texture_pixel_size; + uint32_t texture_width; + uint32_t framebuffer_height; + bool depth_buffer_enabled; } FrameBufferInfo; -typedef struct -{ - uint32_t cmd_data[0x00040000 >> 2]; - int cmd_cur; - int cmd_ptr; - uint32_t region; - FrameBufferInfo frame_buffer_info; +typedef struct { + uint32_t cmd_data[0x00040000 >> 2]; + int cmd_cur; + int cmd_ptr; + uint32_t region; + FrameBufferInfo frame_buffer_info; } RDP_DEVICE; static SDL_Window *window; @@ -97,717 +93,648 @@ static uint64_t message_timer; #define MESSAGE_TIME 3000 // 3 seconds -typedef struct -{ - float SourceSize[4]; - float OutputSize[4]; +typedef struct { + float SourceSize[4]; + float OutputSize[4]; } Push; static const unsigned cmd_len_lut[64] = { - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 4, - 6, - 12, - 14, - 12, - 14, - 20, - 22, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 2, - 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, + 1, 1, 1, 1, 1, 1, 1, 1, 4, 6, 12, 14, 12, 14, 20, 22, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -bool sdl_event_filter(void *userdata, SDL_Event *event) -{ - if (event->type == SDL_EVENT_WINDOW_CLOSE_REQUESTED) - { - callback.paused = false; - callback.emu_running = false; - } - else if (event->type == SDL_EVENT_WINDOW_RESIZED && callback.emu_running) - { - wsi_platform->do_resize(); - } - else if (event->type == SDL_EVENT_KEY_DOWN && !event->key.repeat) - { - switch (event->key.scancode) - { - case SDL_SCANCODE_RETURN: - if (event->key.mod & SDL_KMOD_ALT) - { - gfx_info.fullscreen = !gfx_info.fullscreen; - SDL_SetWindowFullscreen(window, gfx_info.fullscreen); - } - break; - case SDL_SCANCODE_F: - if (event->key.mod & SDL_KMOD_ALT) - { - callback.enable_speedlimiter = !callback.enable_speedlimiter; - } - break; - case SDL_SCANCODE_P: - if (event->key.mod & SDL_KMOD_ALT) - { - callback.paused = !callback.paused; - } - break; - case SDL_SCANCODE_ESCAPE: - if (gfx_info.fullscreen) - callback.emu_running = false; - break; - case SDL_SCANCODE_F4: - crop_letterbox = !crop_letterbox; - break; - case SDL_SCANCODE_F5: - callback.save_state = true; - break; - case SDL_SCANCODE_F7: - callback.load_state = true; - break; - case SDL_SCANCODE_LEFTBRACKET: - callback.lower_volume = true; - break; - case SDL_SCANCODE_RIGHTBRACKET: - callback.raise_volume = true; - break; - case SDL_SCANCODE_SLASH: - callback.frame_advance = true; - break; - case SDL_SCANCODE_0: - case SDL_SCANCODE_1: - case SDL_SCANCODE_2: - case SDL_SCANCODE_3: - case SDL_SCANCODE_4: - case SDL_SCANCODE_5: - case SDL_SCANCODE_6: - case SDL_SCANCODE_7: - case SDL_SCANCODE_8: - case SDL_SCANCODE_9: - if (event->key.mod & SDL_KMOD_ALT) - { - if (event->key.scancode == SDL_SCANCODE_0) - callback.save_state_slot = 0; - else - callback.save_state_slot = event->key.scancode - SDL_SCANCODE_1 + 1; - } - break; - default: - break; - } - } +bool sdl_event_filter(void *userdata, SDL_Event *event) { + if (event->type == SDL_EVENT_WINDOW_CLOSE_REQUESTED) { + callback.paused = false; + callback.emu_running = false; + } else if (event->type == SDL_EVENT_WINDOW_RESIZED && callback.emu_running) { + wsi_platform->do_resize(); + } else if (event->type == SDL_EVENT_KEY_DOWN && !event->key.repeat) { + switch (event->key.scancode) { + case SDL_SCANCODE_RETURN: + if (event->key.mod & SDL_KMOD_ALT) { + gfx_info.fullscreen = !gfx_info.fullscreen; + SDL_SetWindowFullscreen(window, gfx_info.fullscreen); + } + break; + case SDL_SCANCODE_F: + if (event->key.mod & SDL_KMOD_ALT) { + callback.enable_speedlimiter = !callback.enable_speedlimiter; + } + break; + case SDL_SCANCODE_P: + if (event->key.mod & SDL_KMOD_ALT) { + callback.paused = !callback.paused; + } + break; + case SDL_SCANCODE_ESCAPE: + if (gfx_info.fullscreen) + callback.emu_running = false; + break; + case SDL_SCANCODE_F4: + crop_letterbox = !crop_letterbox; + break; + case SDL_SCANCODE_F5: + callback.save_state = true; + break; + case SDL_SCANCODE_F7: + callback.load_state = true; + break; + case SDL_SCANCODE_LEFTBRACKET: + callback.lower_volume = true; + break; + case SDL_SCANCODE_RIGHTBRACKET: + callback.raise_volume = true; + break; + case SDL_SCANCODE_SLASH: + callback.frame_advance = true; + break; + case SDL_SCANCODE_0: + case SDL_SCANCODE_1: + case SDL_SCANCODE_2: + case SDL_SCANCODE_3: + case SDL_SCANCODE_4: + case SDL_SCANCODE_5: + case SDL_SCANCODE_6: + case SDL_SCANCODE_7: + case SDL_SCANCODE_8: + case SDL_SCANCODE_9: + if (event->key.mod & SDL_KMOD_ALT) { + if (event->key.scancode == SDL_SCANCODE_0) + callback.save_state_slot = 0; + else + callback.save_state_slot = event->key.scancode - SDL_SCANCODE_1 + 1; + } + break; + default: + break; + } + } - return 0; + return 0; } -void rdp_new_processor(GFX_INFO _gfx_info) -{ - gfx_info = _gfx_info; +void rdp_new_processor(GFX_INFO _gfx_info) { + gfx_info = _gfx_info; - sync_signal = 0; - rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); + sync_signal = 0; + rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); - if (processor) - { - delete processor; - } - RDP::CommandProcessorFlags flags = 0; + if (processor) { + delete processor; + } + RDP::CommandProcessorFlags flags = 0; - if (gfx_info.upscale == 2) - { - flags |= RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT; - flags |= RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_2X_BIT; - } - else if (gfx_info.upscale == 4) - { - flags |= RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT; - flags |= RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_4X_BIT; - } - else if (gfx_info.upscale == 8) - { - flags |= RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT; - flags |= RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_8X_BIT; - } + if (gfx_info.upscale == 2) { + flags |= RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT; + flags |= RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_2X_BIT; + } else if (gfx_info.upscale == 4) { + flags |= RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT; + flags |= RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_4X_BIT; + } else if (gfx_info.upscale == 8) { + flags |= RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT; + flags |= RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_8X_BIT; + } - processor = new RDP::CommandProcessor(wsi->get_device(), gfx_info.RDRAM, 0, gfx_info.RDRAM_SIZE, gfx_info.RDRAM_SIZE / 2, flags); + processor = new RDP::CommandProcessor(wsi->get_device(), gfx_info.RDRAM, 0, + gfx_info.RDRAM_SIZE, + gfx_info.RDRAM_SIZE / 2, flags); } -static ImageHandle create_message_image(Vulkan::Device &device, int width, const char *message) -{ - SDL_Color fg = {255, 255, 255, 255}; - SDL_Color bg = {0, 0, 0, 0}; - SDL_Surface *surface = TTF_RenderText_LCD_Wrapped(message_font, message, 0, fg, bg, width); - ImageCreateInfo info = ImageCreateInfo::immutable_2d_image(surface->w, surface->h, VK_FORMAT_B8G8R8A8_UNORM, false); - ImageInitialData initial_data = {}; - initial_data.data = surface->pixels; - initial_data.row_length = surface->pitch / 4; - initial_data.image_height = surface->h; +static ImageHandle create_message_image(Vulkan::Device &device, int width, + const char *message) { + SDL_Color fg = {255, 255, 255, 255}; + SDL_Color bg = {0, 0, 0, 0}; + SDL_Surface *surface = + TTF_RenderText_LCD_Wrapped(message_font, message, 0, fg, bg, width); + ImageCreateInfo info = ImageCreateInfo::immutable_2d_image( + surface->w, surface->h, VK_FORMAT_B8G8R8A8_UNORM, false); + ImageInitialData initial_data = {}; + initial_data.data = surface->pixels; + initial_data.row_length = surface->pitch / 4; + initial_data.image_height = surface->h; - ImageHandle handle = device.create_image(info, &initial_data); - SDL_DestroySurface(surface); - return handle; + ImageHandle handle = device.create_image(info, &initial_data); + SDL_DestroySurface(surface); + return handle; } -void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, size_t font_size, uint32_t save_state_slot) -{ - memset(&rdp_device, 0, sizeof(RDP_DEVICE)); +void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, + size_t font_size, uint32_t save_state_slot) { + memset(&rdp_device, 0, sizeof(RDP_DEVICE)); - window = (SDL_Window *)_window; - SDL_SyncWindow(window); - bool result = SDL_AddEventWatch(sdl_event_filter, nullptr); - if (!result) - { - printf("Could not add event watch.\n"); - return; - } + window = (SDL_Window *)_window; + SDL_SyncWindow(window); + bool result = SDL_AddEventWatch(sdl_event_filter, nullptr); + if (!result) { + printf("Could not add event watch.\n"); + return; + } - gfx_info = _gfx_info; + gfx_info = _gfx_info; - if (gfx_info.crt) - { - fragment_spirv = crt_fragment_spirv; - fragment_size = sizeof(crt_fragment_spirv); - } - else - { - fragment_spirv = plain_fragment_spirv; - fragment_size = sizeof(plain_fragment_spirv); - } + if (gfx_info.crt) { + fragment_spirv = crt_fragment_spirv; + fragment_size = sizeof(crt_fragment_spirv); + } else { + fragment_spirv = plain_fragment_spirv; + fragment_size = sizeof(plain_fragment_spirv); + } - bool window_vsync = 0; - wsi = new WSI; - wsi_platform = new SDL_WSIPlatform; - wsi_platform->set_window(window); - wsi->set_platform(wsi_platform); - wsi->set_present_mode(window_vsync ? PresentMode::SyncToVBlank : PresentMode::UnlockedMaybeTear); - wsi->set_backbuffer_srgb(false); - Context::SystemHandles handles = {}; - if (!::Vulkan::Context::init_loader((PFN_vkGetInstanceProcAddr)SDL_Vulkan_GetVkGetInstanceProcAddr())) - { - rdp_close(); - return; - } - if (!wsi->init_simple(1, handles)) - { - rdp_close(); - return; - } + bool window_vsync = 0; + wsi = new WSI; + wsi_platform = new SDL_WSIPlatform; + wsi_platform->set_window(window); + wsi->set_platform(wsi_platform); + wsi->set_present_mode(window_vsync ? PresentMode::SyncToVBlank + : PresentMode::UnlockedMaybeTear); + wsi->set_backbuffer_srgb(false); + Context::SystemHandles handles = {}; + if (!::Vulkan::Context::init_loader( + (PFN_vkGetInstanceProcAddr)SDL_Vulkan_GetVkGetInstanceProcAddr())) { + rdp_close(); + return; + } + if (!wsi->init_simple(1, handles)) { + rdp_close(); + return; + } - rdp_new_processor(gfx_info); + rdp_new_processor(gfx_info); - if (!processor->device_is_supported()) - { - rdp_close(); - return; - } + if (!processor->device_is_supported()) { + rdp_close(); + return; + } - message_font = TTF_OpenFontIO(SDL_IOFromConstMem(font, font_size), true, 30.0); - if (!message_font) - { - rdp_close(); - return; - } + message_font = + TTF_OpenFontIO(SDL_IOFromConstMem(font, font_size), true, 30.0); + if (!message_font) { + rdp_close(); + return; + } - wsi->begin_frame(); + wsi->begin_frame(); - callback.emu_running = true; - callback.enable_speedlimiter = true; - callback.paused = false; - callback.save_state_slot = save_state_slot; - crop_letterbox = false; + callback.emu_running = true; + callback.enable_speedlimiter = true; + callback.paused = false; + callback.save_state_slot = save_state_slot; + crop_letterbox = false; - messages = std::queue(); - message_timer = 0; + messages = std::queue(); + message_timer = 0; } -void rdp_close() -{ - if (wsi) - wsi->end_frame(); +void rdp_close() { + if (wsi) + wsi->end_frame(); - if (message_font) - { - TTF_CloseFont(message_font); - message_font = nullptr; - } - if (processor) - { - delete processor; - processor = nullptr; - } - if (wsi) - { - delete wsi; - wsi = nullptr; - } - if (wsi_platform) - { - delete wsi_platform; - wsi_platform = nullptr; - } + if (message_font) { + TTF_CloseFont(message_font); + message_font = nullptr; + } + if (processor) { + delete processor; + processor = nullptr; + } + if (wsi) { + delete wsi; + wsi = nullptr; + } + if (wsi_platform) { + delete wsi_platform; + wsi_platform = nullptr; + } } -static void calculate_viewport(float *x, float *y, float *width, float *height, uint32_t display_height) -{ - uint32_t display_width = gfx_info.widescreen ? display_height * 16 / 9 : display_height * 4 / 3; +static void calculate_viewport(float *x, float *y, float *width, float *height, + uint32_t display_height) { + uint32_t display_width = + gfx_info.widescreen ? display_height * 16 / 9 : display_height * 4 / 3; - int w, h; - SDL_GetWindowSize(window, &w, &h); + int w, h; + SDL_GetWindowSize(window, &w, &h); - if (gfx_info.integer_scaling) - { - // Integer scaling path - int scale_x = w / display_width; - int scale_y = h / display_height; - int scale = (scale_x < scale_y) ? scale_x : scale_y; - if (scale < 1) - scale = 1; + if (gfx_info.integer_scaling) { + // Integer scaling path + int scale_x = w / display_width; + int scale_y = h / display_height; + int scale = (scale_x < scale_y) ? scale_x : scale_y; + if (scale < 1) + scale = 1; - // Calculate scaled dimensions - int scaled_width = display_width * scale; - int scaled_height = display_height * scale; + // Calculate scaled dimensions + int scaled_width = display_width * scale; + int scaled_height = display_height * scale; - *width = scaled_width; - *height = scaled_height; + *width = scaled_width; + *height = scaled_height; - // Center the viewport - int integer_x = (w - *width) / 2.0f; - int integer_y = (h - *height) / 2.0f; + // Center the viewport + int integer_x = (w - *width) / 2.0f; + int integer_y = (h - *height) / 2.0f; - *x = integer_x; - *y = integer_y; - } - else - { - // Regular scaling path - maintain aspect ratio - float scale_x = w / (float)display_width; - float scale_y = h / (float)display_height; - float scale = (scale_x < scale_y) ? scale_x : scale_y; + *x = integer_x; + *y = integer_y; + } else { + // Regular scaling path - maintain aspect ratio + float scale_x = w / (float)display_width; + float scale_y = h / (float)display_height; + float scale = (scale_x < scale_y) ? scale_x : scale_y; - *width = display_width * scale; - *height = display_height * scale; + *width = display_width * scale; + *height = display_height * scale; - // Center the viewport - *x = (w - *width) / 2.0f; - *y = (h - *height) / 2.0f; - } + // Center the viewport + *x = (w - *width) / 2.0f; + *y = (h - *height) / 2.0f; + } } -static void render_frame(Vulkan::Device &device) -{ - RDP::ScanoutOptions options = {}; - options.persist_frame_on_invalid_input = true; - options.blend_previous_frame = true; - options.upscale_deinterlacing = false; +static void render_frame(Vulkan::Device &device) { + RDP::ScanoutOptions options = {}; + options.persist_frame_on_invalid_input = true; + options.blend_previous_frame = true; + options.upscale_deinterlacing = false; - if (crop_letterbox && gfx_info.widescreen) - { - options.crop_rect.enable = true; - if (gfx_info.PAL) - { - options.crop_rect.top = 36; - options.crop_rect.bottom = 36; - } - else - { - options.crop_rect.top = 30; - options.crop_rect.bottom = 30; - } - } + if (crop_letterbox && gfx_info.widescreen) { + options.crop_rect.enable = true; + if (gfx_info.PAL) { + options.crop_rect.top = 36; + options.crop_rect.bottom = 36; + } else { + options.crop_rect.top = 30; + options.crop_rect.bottom = 30; + } + } - Vulkan::ImageHandle image = processor->scanout(options); + Vulkan::ImageHandle image = processor->scanout(options); - Vulkan::ResourceLayout vertex_layout = {}; - Vulkan::ResourceLayout fragment_layout = {}; - fragment_layout.output_mask = 1 << 0; - fragment_layout.sets[0].sampled_image_mask = 1 << 0; - if (gfx_info.crt) - fragment_layout.push_constant_size = sizeof(Push); + Vulkan::ResourceLayout vertex_layout = {}; + Vulkan::ResourceLayout fragment_layout = {}; + fragment_layout.output_mask = 1 << 0; + fragment_layout.sets[0].sampled_image_mask = 1 << 0; + if (gfx_info.crt) + fragment_layout.push_constant_size = sizeof(Push); - // This request is cached. - auto *program = device.request_program(vertex_spirv, sizeof(vertex_spirv), - fragment_spirv, fragment_size, - &vertex_layout, - &fragment_layout); + // This request is cached. + auto *program = + device.request_program(vertex_spirv, sizeof(vertex_spirv), fragment_spirv, + fragment_size, &vertex_layout, &fragment_layout); - // Blit image on screen. - auto cmd = device.request_command_buffer(); - { - auto rp = device.get_swapchain_render_pass(Vulkan::SwapchainRenderPass::ColorOnly); - cmd->begin_render_pass(rp); + // Blit image on screen. + auto cmd = device.request_command_buffer(); + { + auto rp = device.get_swapchain_render_pass( + Vulkan::SwapchainRenderPass::ColorOnly); + cmd->begin_render_pass(rp); - cmd->set_program(program); + cmd->set_program(program); - // Basic default render state. - cmd->set_opaque_state(); - cmd->set_depth_test(false, false); - cmd->set_cull_mode(VK_CULL_MODE_NONE); + // Basic default render state. + cmd->set_opaque_state(); + cmd->set_depth_test(false, false); + cmd->set_cull_mode(VK_CULL_MODE_NONE); - // If we don't have an image, we just get a cleared screen in the render pass. - if (image) - { - VkViewport vp = cmd->get_viewport(); - calculate_viewport(&vp.x, &vp.y, &vp.width, &vp.height, image->get_height() / gfx_info.upscale); + // If we don't have an image, we just get a cleared screen in the render + // pass. + if (image) { + VkViewport vp = cmd->get_viewport(); + calculate_viewport(&vp.x, &vp.y, &vp.width, &vp.height, + image->get_height() / gfx_info.upscale); - if (gfx_info.crt) - { - // Set shader parameters - Push push = { - {float(image->get_width()), float(image->get_height()), 1.0f / float(image->get_width()), 1.0f / float(image->get_height())}, - {vp.width, vp.height, 1.0f / vp.width, 1.0f / vp.height}, - }; - cmd->push_constants(&push, 0, sizeof(push)); - } + if (gfx_info.crt) { + // Set shader parameters + Push push = { + {float(image->get_width()), float(image->get_height()), + 1.0f / float(image->get_width()), + 1.0f / float(image->get_height())}, + {vp.width, vp.height, 1.0f / vp.width, 1.0f / vp.height}, + }; + cmd->push_constants(&push, 0, sizeof(push)); + } - cmd->set_texture(0, 0, image->get_view(), Vulkan::StockSampler::NearestClamp); - cmd->set_viewport(vp); - // The vertices are constants in the shader. - // Draws fullscreen quad using oversized triangle. - cmd->draw(3); + cmd->set_texture(0, 0, image->get_view(), + Vulkan::StockSampler::NearestClamp); + cmd->set_viewport(vp); + // The vertices are constants in the shader. + // Draws fullscreen quad using oversized triangle. + cmd->draw(3); - if (!messages.empty()) - { - Vulkan::ImageHandle message_image = create_message_image(device, vp.width, messages.front().c_str()); - cmd->set_texture(0, 0, message_image->get_view(), Vulkan::StockSampler::NearestClamp); - vp.x = vp.x + (vp.width - message_image->get_width()) / 2; - vp.y = vp.y + vp.height - message_image->get_height(); - vp.height = message_image->get_height(); - vp.width = message_image->get_width(); - cmd->set_viewport(vp); + if (!messages.empty()) { + Vulkan::ImageHandle message_image = + create_message_image(device, vp.width, messages.front().c_str()); + cmd->set_texture(0, 0, message_image->get_view(), + Vulkan::StockSampler::NearestClamp); + vp.x = vp.x + (vp.width - message_image->get_width()) / 2; + vp.y = vp.y + vp.height - message_image->get_height(); + vp.height = message_image->get_height(); + vp.width = message_image->get_width(); + cmd->set_viewport(vp); - cmd->draw(3); + cmd->draw(3); - if (SDL_GetTicks() > message_timer) - { - messages.pop(); - message_timer = SDL_GetTicks() + MESSAGE_TIME; - } - } - } + if (SDL_GetTicks() > message_timer) { + messages.pop(); + message_timer = SDL_GetTicks() + MESSAGE_TIME; + } + } + } - cmd->end_render_pass(); - } - device.submit(cmd); + cmd->end_render_pass(); + } + device.submit(cmd); } -void rdp_set_vi_register(uint32_t reg, uint32_t value) -{ - processor->set_vi_register(RDP::VIRegister(reg), value); +void rdp_set_vi_register(uint32_t reg, uint32_t value) { + processor->set_vi_register(RDP::VIRegister(reg), value); } -void rdp_render_frame() -{ - auto &device = wsi->get_device(); - render_frame(device); +void rdp_render_frame() { + auto &device = wsi->get_device(); + render_frame(device); } -void rdp_update_screen() -{ - wsi->end_frame(); - wsi->begin_frame(); +void rdp_update_screen() { + wsi->end_frame(); + wsi->begin_frame(); } -CALL_BACK rdp_check_callback() -{ - CALL_BACK return_value = callback; - callback.save_state = false; - callback.load_state = false; - callback.lower_volume = false; - callback.raise_volume = false; - callback.frame_advance = false; - return return_value; +CALL_BACK rdp_check_callback() { + CALL_BACK return_value = callback; + callback.save_state = false; + callback.load_state = false; + callback.lower_volume = false; + callback.raise_volume = false; + callback.frame_advance = false; + return return_value; } -void rdp_check_framebuffers(uint32_t address, uint32_t length) -{ - if (sync_signal) - { - address >>= 3; - length = (length + 7) >> 3; +void rdp_check_framebuffers(uint32_t address, uint32_t length) { + if (sync_signal) { + address >>= 3; + length = (length + 7) >> 3; - if (address >= rdram_dirty.size()) - return; + if (address >= rdram_dirty.size()) + return; - uint32_t end_addr = std::min(address + length, static_cast(rdram_dirty.size())); + uint32_t end_addr = + std::min(address + length, static_cast(rdram_dirty.size())); - auto it = std::find(rdram_dirty.begin() + address, rdram_dirty.begin() + end_addr, true); - if (it != rdram_dirty.begin() + end_addr) - { - processor->wait_for_timeline(sync_signal); - rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); - sync_signal = 0; - } - } + auto it = std::find(rdram_dirty.begin() + address, + rdram_dirty.begin() + end_addr, true); + if (it != rdram_dirty.begin() + end_addr) { + processor->wait_for_timeline(sync_signal); + rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); + sync_signal = 0; + } + } } -size_t rdp_state_size() -{ - return sizeof(RDP_DEVICE); +size_t rdp_state_size() { return sizeof(RDP_DEVICE); } + +void rdp_save_state(uint8_t *state) { + processor->wait_for_timeline(processor->signal_timeline()); + memcpy(state, &rdp_device, sizeof(RDP_DEVICE)); } -void rdp_save_state(uint8_t *state) -{ - processor->wait_for_timeline(processor->signal_timeline()); - memcpy(state, &rdp_device, sizeof(RDP_DEVICE)); +void rdp_load_state(const uint8_t *state) { + memcpy(&rdp_device, state, sizeof(RDP_DEVICE)); } -void rdp_load_state(const uint8_t *state) -{ - memcpy(&rdp_device, state, sizeof(RDP_DEVICE)); +void rdp_onscreen_message(const char *_message) { + if (messages.empty()) + message_timer = SDL_GetTicks() + MESSAGE_TIME; + messages.push(_message); } -void rdp_onscreen_message(const char *_message) -{ - if (messages.empty()) - message_timer = SDL_GetTicks() + MESSAGE_TIME; - messages.push(_message); +uint32_t pixel_size(uint32_t pixel_type, uint32_t area) { + switch (pixel_type) { + case 0: + return area / 2; + case 1: + return area; + case 2: + return area * 2; + case 3: + return area * 4; + default: + printf("Invalid pixel size: %u\n", pixel_type); + return 0; + } } -uint32_t pixel_size(uint32_t pixel_type, uint32_t area) -{ - switch (pixel_type) - { - case 0: - return area / 2; - case 1: - return area; - case 2: - return area * 2; - case 3: - return area * 4; - default: - printf("Invalid pixel size: %u\n", pixel_type); - return 0; - } -} - -uint64_t rdp_process_commands() -{ - uint64_t interrupt_timer = 0; - const uint32_t DP_CURRENT = *gfx_info.DPC_CURRENT_REG & 0x00FFFFF8; - const uint32_t DP_END = *gfx_info.DPC_END_REG & 0x00FFFFF8; - - int length = DP_END - DP_CURRENT; - if (length <= 0) - return interrupt_timer; - - length = unsigned(length) >> 3; - if ((rdp_device.cmd_ptr + length) & ~(0x0003FFFF >> 3)) - return interrupt_timer; - - uint32_t offset = DP_CURRENT; - if (*gfx_info.DPC_STATUS_REG & DP_STATUS_XBUS_DMA) - { - do - { - offset &= 0xFF8; - rdp_device.cmd_data[2 * rdp_device.cmd_ptr + 0] = SDL_Swap32BE(*reinterpret_cast(gfx_info.DMEM + offset)); - rdp_device.cmd_data[2 * rdp_device.cmd_ptr + 1] = SDL_Swap32BE(*reinterpret_cast(gfx_info.DMEM + offset + 4)); - offset += sizeof(uint64_t); - rdp_device.cmd_ptr++; - } while (--length > 0); - } - else - { - if (DP_END > 0x7ffffff || DP_CURRENT > 0x7ffffff) - { - return interrupt_timer; - } - else - { - do - { - offset &= 0xFFFFF8; - rdp_device.cmd_data[2 * rdp_device.cmd_ptr + 0] = *reinterpret_cast(gfx_info.RDRAM + offset); - rdp_device.cmd_data[2 * rdp_device.cmd_ptr + 1] = *reinterpret_cast(gfx_info.RDRAM + offset + 4); - offset += sizeof(uint64_t); - rdp_device.cmd_ptr++; - } while (--length > 0); - } - } - - while (rdp_device.cmd_cur - rdp_device.cmd_ptr < 0) - { - uint32_t w1 = rdp_device.cmd_data[2 * rdp_device.cmd_cur]; - uint32_t w2 = rdp_device.cmd_data[2 * rdp_device.cmd_cur + 1]; - uint32_t command = (w1 >> 24) & 63; - int cmd_length = cmd_len_lut[command]; - - if (rdp_device.cmd_ptr - rdp_device.cmd_cur - cmd_length < 0) - { - *gfx_info.DPC_START_REG = *gfx_info.DPC_CURRENT_REG = *gfx_info.DPC_END_REG; - return interrupt_timer; - } - - if (command >= 8) - processor->enqueue_command(cmd_length * 2, &rdp_device.cmd_data[2 * rdp_device.cmd_cur]); - - switch (RDP::Op(command)) - { - case RDP::Op::FillTriangle: - case RDP::Op::FillZBufferTriangle: - case RDP::Op::TextureTriangle: - case RDP::Op::TextureZBufferTriangle: - case RDP::Op::ShadeTriangle: - case RDP::Op::ShadeZBufferTriangle: - case RDP::Op::ShadeTextureTriangle: - case RDP::Op::ShadeTextureZBufferTriangle: - case RDP::Op::TextureRectangle: - case RDP::Op::TextureRectangleFlip: - case RDP::Op::FillRectangle: - { - uint32_t offset_address = (rdp_device.frame_buffer_info.framebuffer_address + pixel_size(rdp_device.frame_buffer_info.framebuffer_pixel_size, rdp_device.frame_buffer_info.framebuffer_y_offset * rdp_device.frame_buffer_info.framebuffer_width)) >> 3; - if (offset_address < rdram_dirty.size() && !rdram_dirty[offset_address]) - { - uint32_t end_addr = std::min(offset_address + ((pixel_size(rdp_device.frame_buffer_info.framebuffer_pixel_size, rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height) + 7) >> 3), static_cast(rdram_dirty.size())); - std::fill(rdram_dirty.begin() + offset_address, rdram_dirty.begin() + end_addr, true); - } - - if (rdp_device.frame_buffer_info.depth_buffer_enabled) - { - offset_address = (rdp_device.frame_buffer_info.depthbuffer_address + pixel_size(2, rdp_device.frame_buffer_info.framebuffer_y_offset * rdp_device.frame_buffer_info.framebuffer_width)) >> 3; - if (offset_address < rdram_dirty.size() && !rdram_dirty[offset_address]) - { - uint32_t end_addr = std::min(offset_address + ((pixel_size(2, rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height) + 7) >> 3), static_cast(rdram_dirty.size())); - std::fill(rdram_dirty.begin() + offset_address, rdram_dirty.begin() + end_addr, true); - } - } - } - break; - case RDP::Op::LoadTLut: - case RDP::Op::LoadTile: - { - uint32_t upper_left_t = (w1 & 0xFFF) >> 2; - uint32_t offset_address = (rdp_device.frame_buffer_info.texture_address + pixel_size(rdp_device.frame_buffer_info.texture_pixel_size, upper_left_t * rdp_device.frame_buffer_info.texture_width)) >> 3; - if (offset_address < rdram_dirty.size() && !rdram_dirty[offset_address]) - { - uint32_t lower_right_t = (w2 & 0xFFF) >> 2; - uint32_t end_addr = std::min(offset_address + ((pixel_size(rdp_device.frame_buffer_info.texture_pixel_size, (lower_right_t - upper_left_t) * rdp_device.frame_buffer_info.texture_width) + 7) >> 3), static_cast(rdram_dirty.size())); - std::fill(rdram_dirty.begin() + offset_address, rdram_dirty.begin() + end_addr, true); - } - } - break; - case RDP::Op::LoadBlock: - { - uint32_t upper_left_s = ((w1 >> 12) & 0xFFF); - uint32_t upper_left_t = (w1 & 0xFFF); - uint32_t offset_address = (rdp_device.frame_buffer_info.texture_address + pixel_size(rdp_device.frame_buffer_info.texture_pixel_size, upper_left_s + upper_left_t * rdp_device.frame_buffer_info.texture_width)) >> 3; - if (offset_address < rdram_dirty.size() && !rdram_dirty[offset_address]) - { - uint32_t lower_right_s = ((w2 >> 12) & 0xFFF); - uint32_t end_addr = std::min(offset_address + ((pixel_size(rdp_device.frame_buffer_info.texture_pixel_size, lower_right_s - upper_left_s) + 7) >> 3), static_cast(rdram_dirty.size())); - std::fill(rdram_dirty.begin() + offset_address, rdram_dirty.begin() + end_addr, true); - } - } - break; - case RDP::Op::SetColorImage: - rdp_device.frame_buffer_info.framebuffer_address = (w2 & 0x00FFFFFF); - rdp_device.frame_buffer_info.framebuffer_pixel_size = (w1 >> 19) & 0x3; - rdp_device.frame_buffer_info.framebuffer_width = (w1 & 0x3FF) + 1; - break; - case RDP::Op::SetMaskImage: - rdp_device.frame_buffer_info.depthbuffer_address = (w2 & 0x00FFFFFF); - break; - case RDP::Op::SetTextureImage: - rdp_device.frame_buffer_info.texture_address = (w2 & 0x00FFFFFF); - rdp_device.frame_buffer_info.texture_pixel_size = (w1 >> 19) & 0x3; - rdp_device.frame_buffer_info.texture_width = (w1 & 0x3FF) + 1; - break; - case RDP::Op::SetScissor: - { - uint32_t upper_left_x = ((w1 >> 12) & 0xFFF) >> 2; - uint32_t upper_left_y = (w1 & 0xFFF) >> 2; - uint32_t lower_right_x = ((w2 >> 12) & 0xFFF) >> 2; - uint32_t lower_right_y = (w2 & 0xFFF) >> 2; - if (lower_right_x > upper_left_x && lower_right_y > upper_left_y) - { - rdp_device.region = (lower_right_x - upper_left_x) * (lower_right_y - upper_left_y); - } - else - { - rdp_device.region = 0; - } - - rdp_device.frame_buffer_info.framebuffer_y_offset = upper_left_y; - rdp_device.frame_buffer_info.framebuffer_height = lower_right_y - upper_left_y; - } - break; - case RDP::Op::SetOtherModes: - { - uint8_t cycle_type = (w1 >> 20) & 3; - uint8_t depth_read_write = (w2 >> 4) & 3; - rdp_device.frame_buffer_info.depth_buffer_enabled = ((cycle_type & 2) == 0) && (depth_read_write != 0); - } - break; - case RDP::Op::SyncFull: - sync_signal = processor->signal_timeline(); - - interrupt_timer = rdp_device.region; - if (interrupt_timer == 0) - interrupt_timer = 5000; - break; - default: - break; - } - - rdp_device.cmd_cur += cmd_length; - } - - rdp_device.cmd_ptr = 0; - rdp_device.cmd_cur = 0; - *gfx_info.DPC_CURRENT_REG = *gfx_info.DPC_END_REG; - - return interrupt_timer; +uint64_t rdp_process_commands() { + uint64_t interrupt_timer = 0; + const uint32_t DP_CURRENT = *gfx_info.DPC_CURRENT_REG & 0x00FFFFF8; + const uint32_t DP_END = *gfx_info.DPC_END_REG & 0x00FFFFF8; + + int length = DP_END - DP_CURRENT; + if (length <= 0) + return interrupt_timer; + + length = unsigned(length) >> 3; + if ((rdp_device.cmd_ptr + length) & ~(0x0003FFFF >> 3)) + return interrupt_timer; + + uint32_t offset = DP_CURRENT; + if (*gfx_info.DPC_STATUS_REG & DP_STATUS_XBUS_DMA) { + do { + offset &= 0xFF8; + rdp_device.cmd_data[2 * rdp_device.cmd_ptr + 0] = SDL_Swap32BE( + *reinterpret_cast(gfx_info.DMEM + offset)); + rdp_device.cmd_data[2 * rdp_device.cmd_ptr + 1] = SDL_Swap32BE( + *reinterpret_cast(gfx_info.DMEM + offset + 4)); + offset += sizeof(uint64_t); + rdp_device.cmd_ptr++; + } while (--length > 0); + } else { + if (DP_END > 0x7ffffff || DP_CURRENT > 0x7ffffff) { + return interrupt_timer; + } else { + do { + offset &= 0xFFFFF8; + rdp_device.cmd_data[2 * rdp_device.cmd_ptr + 0] = + *reinterpret_cast(gfx_info.RDRAM + offset); + rdp_device.cmd_data[2 * rdp_device.cmd_ptr + 1] = + *reinterpret_cast(gfx_info.RDRAM + offset + 4); + offset += sizeof(uint64_t); + rdp_device.cmd_ptr++; + } while (--length > 0); + } + } + + while (rdp_device.cmd_cur - rdp_device.cmd_ptr < 0) { + uint32_t w1 = rdp_device.cmd_data[2 * rdp_device.cmd_cur]; + uint32_t w2 = rdp_device.cmd_data[2 * rdp_device.cmd_cur + 1]; + uint32_t command = (w1 >> 24) & 63; + int cmd_length = cmd_len_lut[command]; + + if (rdp_device.cmd_ptr - rdp_device.cmd_cur - cmd_length < 0) { + *gfx_info.DPC_START_REG = *gfx_info.DPC_CURRENT_REG = + *gfx_info.DPC_END_REG; + return interrupt_timer; + } + + if (command >= 8) + processor->enqueue_command(cmd_length * 2, + &rdp_device.cmd_data[2 * rdp_device.cmd_cur]); + + switch (RDP::Op(command)) { + case RDP::Op::FillTriangle: + case RDP::Op::FillZBufferTriangle: + case RDP::Op::TextureTriangle: + case RDP::Op::TextureZBufferTriangle: + case RDP::Op::ShadeTriangle: + case RDP::Op::ShadeZBufferTriangle: + case RDP::Op::ShadeTextureTriangle: + case RDP::Op::ShadeTextureZBufferTriangle: + case RDP::Op::TextureRectangle: + case RDP::Op::TextureRectangleFlip: + case RDP::Op::FillRectangle: { + uint32_t offset_address = + (rdp_device.frame_buffer_info.framebuffer_address + + pixel_size(rdp_device.frame_buffer_info.framebuffer_pixel_size, + rdp_device.frame_buffer_info.framebuffer_y_offset * + rdp_device.frame_buffer_info.framebuffer_width)) >> + 3; + if (offset_address < rdram_dirty.size() && !rdram_dirty[offset_address]) { + uint32_t end_addr = std::min( + offset_address + + ((pixel_size( + rdp_device.frame_buffer_info.framebuffer_pixel_size, + rdp_device.frame_buffer_info.framebuffer_width * + rdp_device.frame_buffer_info.framebuffer_height) + + 7) >> + 3), + static_cast(rdram_dirty.size())); + std::fill(rdram_dirty.begin() + offset_address, + rdram_dirty.begin() + end_addr, true); + } + + if (rdp_device.frame_buffer_info.depth_buffer_enabled) { + offset_address = + (rdp_device.frame_buffer_info.depthbuffer_address + + pixel_size(2, + rdp_device.frame_buffer_info.framebuffer_y_offset * + rdp_device.frame_buffer_info.framebuffer_width)) >> + 3; + if (offset_address < rdram_dirty.size() && + !rdram_dirty[offset_address]) { + uint32_t end_addr = std::min( + offset_address + + ((pixel_size( + 2, + rdp_device.frame_buffer_info.framebuffer_width * + rdp_device.frame_buffer_info.framebuffer_height) + + 7) >> + 3), + static_cast(rdram_dirty.size())); + std::fill(rdram_dirty.begin() + offset_address, + rdram_dirty.begin() + end_addr, true); + } + } + } break; + case RDP::Op::LoadTLut: + case RDP::Op::LoadTile: { + uint32_t upper_left_t = (w1 & 0xFFF) >> 2; + uint32_t offset_address = + (rdp_device.frame_buffer_info.texture_address + + pixel_size(rdp_device.frame_buffer_info.texture_pixel_size, + upper_left_t * + rdp_device.frame_buffer_info.texture_width)) >> + 3; + if (offset_address < rdram_dirty.size() && !rdram_dirty[offset_address]) { + uint32_t lower_right_t = (w2 & 0xFFF) >> 2; + uint32_t end_addr = std::min( + offset_address + + ((pixel_size(rdp_device.frame_buffer_info.texture_pixel_size, + (lower_right_t - upper_left_t) * + rdp_device.frame_buffer_info.texture_width) + + 7) >> + 3), + static_cast(rdram_dirty.size())); + std::fill(rdram_dirty.begin() + offset_address, + rdram_dirty.begin() + end_addr, true); + } + } break; + case RDP::Op::LoadBlock: { + uint32_t upper_left_s = ((w1 >> 12) & 0xFFF); + uint32_t upper_left_t = (w1 & 0xFFF); + uint32_t offset_address = + (rdp_device.frame_buffer_info.texture_address + + pixel_size(rdp_device.frame_buffer_info.texture_pixel_size, + upper_left_s + + upper_left_t * + rdp_device.frame_buffer_info.texture_width)) >> + 3; + if (offset_address < rdram_dirty.size() && !rdram_dirty[offset_address]) { + uint32_t lower_right_s = ((w2 >> 12) & 0xFFF); + uint32_t end_addr = std::min( + offset_address + + ((pixel_size(rdp_device.frame_buffer_info.texture_pixel_size, + lower_right_s - upper_left_s) + + 7) >> + 3), + static_cast(rdram_dirty.size())); + std::fill(rdram_dirty.begin() + offset_address, + rdram_dirty.begin() + end_addr, true); + } + } break; + case RDP::Op::SetColorImage: + rdp_device.frame_buffer_info.framebuffer_address = (w2 & 0x00FFFFFF); + rdp_device.frame_buffer_info.framebuffer_pixel_size = (w1 >> 19) & 0x3; + rdp_device.frame_buffer_info.framebuffer_width = (w1 & 0x3FF) + 1; + break; + case RDP::Op::SetMaskImage: + rdp_device.frame_buffer_info.depthbuffer_address = (w2 & 0x00FFFFFF); + break; + case RDP::Op::SetTextureImage: + rdp_device.frame_buffer_info.texture_address = (w2 & 0x00FFFFFF); + rdp_device.frame_buffer_info.texture_pixel_size = (w1 >> 19) & 0x3; + rdp_device.frame_buffer_info.texture_width = (w1 & 0x3FF) + 1; + break; + case RDP::Op::SetScissor: { + uint32_t upper_left_x = ((w1 >> 12) & 0xFFF) >> 2; + uint32_t upper_left_y = (w1 & 0xFFF) >> 2; + uint32_t lower_right_x = ((w2 >> 12) & 0xFFF) >> 2; + uint32_t lower_right_y = (w2 & 0xFFF) >> 2; + if (lower_right_x > upper_left_x && lower_right_y > upper_left_y) { + rdp_device.region = + (lower_right_x - upper_left_x) * (lower_right_y - upper_left_y); + } else { + rdp_device.region = 0; + } + + rdp_device.frame_buffer_info.framebuffer_y_offset = upper_left_y; + rdp_device.frame_buffer_info.framebuffer_height = + lower_right_y - upper_left_y; + } break; + case RDP::Op::SetOtherModes: { + uint8_t cycle_type = (w1 >> 20) & 3; + uint8_t depth_read_write = (w2 >> 4) & 3; + rdp_device.frame_buffer_info.depth_buffer_enabled = + ((cycle_type & 2) == 0) && (depth_read_write != 0); + } break; + case RDP::Op::SyncFull: + sync_signal = processor->signal_timeline(); + + interrupt_timer = rdp_device.region; + if (interrupt_timer == 0) + interrupt_timer = 5000; + break; + default: + break; + } + + rdp_device.cmd_cur += cmd_length; + } + + rdp_device.cmd_ptr = 0; + rdp_device.cmd_cur = 0; + *gfx_info.DPC_CURRENT_REG = *gfx_info.DPC_END_REG; + + return interrupt_timer; } diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 57c0dad..b27799d 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -4,53 +4,51 @@ #include #include -extern "C" -{ +extern "C" { #endif - typedef struct - { - uint8_t *RDRAM; - uint8_t *DMEM; - uint32_t RDRAM_SIZE; - uint32_t *DPC_CURRENT_REG; - uint32_t *DPC_START_REG; - uint32_t *DPC_END_REG; - uint32_t *DPC_STATUS_REG; - bool PAL; - bool widescreen; - bool fullscreen; - bool integer_scaling; - uint32_t upscale; - bool crt; - } GFX_INFO; +typedef struct { + uint8_t *RDRAM; + uint8_t *DMEM; + uint32_t RDRAM_SIZE; + uint32_t *DPC_CURRENT_REG; + uint32_t *DPC_START_REG; + uint32_t *DPC_END_REG; + uint32_t *DPC_STATUS_REG; + bool PAL; + bool widescreen; + bool fullscreen; + bool integer_scaling; + uint32_t upscale; + bool crt; +} GFX_INFO; - typedef struct - { - bool emu_running; - bool save_state; - bool load_state; - bool enable_speedlimiter; - bool lower_volume; - bool raise_volume; - bool paused; - bool frame_advance; - uint32_t save_state_slot; - } CALL_BACK; +typedef struct { + bool emu_running; + bool save_state; + bool load_state; + bool enable_speedlimiter; + bool lower_volume; + bool raise_volume; + bool paused; + bool frame_advance; + uint32_t save_state_slot; +} CALL_BACK; - void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, size_t font_size, uint32_t save_state_slot); - void rdp_close(); - void rdp_set_vi_register(uint32_t reg, uint32_t value); - void rdp_update_screen(); - void rdp_render_frame(); - CALL_BACK rdp_check_callback(); - uint64_t rdp_process_commands(); - void rdp_onscreen_message(const char *_message); - void rdp_new_processor(GFX_INFO _gfx_info); - void rdp_check_framebuffers(uint32_t address, uint32_t length); - size_t rdp_state_size(); - void rdp_save_state(uint8_t *state); - void rdp_load_state(const uint8_t *state); +void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, + size_t font_size, uint32_t save_state_slot); +void rdp_close(); +void rdp_set_vi_register(uint32_t reg, uint32_t value); +void rdp_update_screen(); +void rdp_render_frame(); +CALL_BACK rdp_check_callback(); +uint64_t rdp_process_commands(); +void rdp_onscreen_message(const char *_message); +void rdp_new_processor(GFX_INFO _gfx_info); +void rdp_check_framebuffers(uint32_t address, uint32_t length); +size_t rdp_state_size(); +void rdp_save_state(uint8_t *state); +void rdp_load_state(const uint8_t *state); #ifdef __cplusplus } diff --git a/parallel-rdp/wsi_platform.cpp b/parallel-rdp/wsi_platform.cpp index a543b80..89949eb 100644 --- a/parallel-rdp/wsi_platform.cpp +++ b/parallel-rdp/wsi_platform.cpp @@ -1,73 +1,55 @@ #include "wsi_platform.hpp" #include -VkSurfaceKHR SDL_WSIPlatform::create_surface(VkInstance instance, VkPhysicalDevice gpu) -{ - VkSurfaceKHR surface = nullptr; - bool result = SDL_Vulkan_CreateSurface(window, instance, NULL, &surface); - if (result != true) - { - printf("Error creating surface\n"); - } - return surface; +VkSurfaceKHR SDL_WSIPlatform::create_surface(VkInstance instance, + VkPhysicalDevice gpu) { + VkSurfaceKHR surface = nullptr; + bool result = SDL_Vulkan_CreateSurface(window, instance, NULL, &surface); + if (result != true) { + printf("Error creating surface\n"); + } + return surface; } -void SDL_WSIPlatform::destroy_surface(VkInstance instance, VkSurfaceKHR surface) -{ - SDL_Vulkan_DestroySurface(instance, surface, NULL); +void SDL_WSIPlatform::destroy_surface(VkInstance instance, + VkSurfaceKHR surface) { + SDL_Vulkan_DestroySurface(instance, surface, NULL); } -std::vector SDL_WSIPlatform::get_instance_extensions() -{ +std::vector SDL_WSIPlatform::get_instance_extensions() { - unsigned int extensionCount = 0; - char const *const *extensions = SDL_Vulkan_GetInstanceExtensions(&extensionCount); - if (extensions == NULL) - { - printf("Error getting instance extensions\n"); - } + unsigned int extensionCount = 0; + char const *const *extensions = + SDL_Vulkan_GetInstanceExtensions(&extensionCount); + if (extensions == NULL) { + printf("Error getting instance extensions\n"); + } - std::vector extensionNames; - for (unsigned int i = 0; i < extensionCount; ++i) - { - extensionNames.push_back(extensions[i]); - } - return extensionNames; + std::vector extensionNames; + for (unsigned int i = 0; i < extensionCount; ++i) { + extensionNames.push_back(extensions[i]); + } + return extensionNames; } -uint32_t SDL_WSIPlatform::get_surface_width() -{ - int w, h; - SDL_GetWindowSize(window, &w, &h); - return w; +uint32_t SDL_WSIPlatform::get_surface_width() { + int w, h; + SDL_GetWindowSize(window, &w, &h); + return w; } -uint32_t SDL_WSIPlatform::get_surface_height() -{ - int w, h; - SDL_GetWindowSize(window, &w, &h); - return h; +uint32_t SDL_WSIPlatform::get_surface_height() { + int w, h; + SDL_GetWindowSize(window, &w, &h); + return h; } -bool SDL_WSIPlatform::alive(Vulkan::WSI &wsi) -{ - return true; -} +bool SDL_WSIPlatform::alive(Vulkan::WSI &wsi) { return true; } -void SDL_WSIPlatform::poll_input() -{ -} +void SDL_WSIPlatform::poll_input() {} -void SDL_WSIPlatform::poll_input_async(Granite::InputTrackerHandler *handler) -{ -} +void SDL_WSIPlatform::poll_input_async(Granite::InputTrackerHandler *handler) {} -void SDL_WSIPlatform::set_window(SDL_Window *_window) -{ - window = _window; -} +void SDL_WSIPlatform::set_window(SDL_Window *_window) { window = _window; } -void SDL_WSIPlatform::do_resize() -{ - resize = true; -} +void SDL_WSIPlatform::do_resize() { resize = true; } diff --git a/parallel-rdp/wsi_platform.hpp b/parallel-rdp/wsi_platform.hpp index ddc606a..43d0af8 100644 --- a/parallel-rdp/wsi_platform.hpp +++ b/parallel-rdp/wsi_platform.hpp @@ -3,20 +3,20 @@ #include "wsi.hpp" #include -class SDL_WSIPlatform : public Vulkan::WSIPlatform -{ +class SDL_WSIPlatform : public Vulkan::WSIPlatform { public: - VkSurfaceKHR create_surface(VkInstance instance, VkPhysicalDevice gpu) override; - void destroy_surface(VkInstance instance, VkSurfaceKHR surface) override; - std::vector get_instance_extensions() override; - uint32_t get_surface_width() override; - uint32_t get_surface_height() override; - bool alive(Vulkan::WSI &wsi) override; - void poll_input() override; - void poll_input_async(Granite::InputTrackerHandler *handler) override; - void set_window(SDL_Window *_window); - void do_resize(); + VkSurfaceKHR create_surface(VkInstance instance, + VkPhysicalDevice gpu) override; + void destroy_surface(VkInstance instance, VkSurfaceKHR surface) override; + std::vector get_instance_extensions() override; + uint32_t get_surface_width() override; + uint32_t get_surface_height() override; + bool alive(Vulkan::WSI &wsi) override; + void poll_input() override; + void poll_input_async(Granite::InputTrackerHandler *handler) override; + void set_window(SDL_Window *_window); + void do_resize(); private: - SDL_Window *window; + SDL_Window *window; }; From 74b087e77e38ee94ce3c4b2a8b5fba4677aa3d86 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 20 Mar 2026 20:39:02 +0100 Subject: [PATCH 0700/1117] cargo update --- Cargo.lock | 113 +++++++++++++++++++++++++---------------------------- 1 file changed, 54 insertions(+), 59 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f0e5120..8342e7e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -437,9 +437,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.16.1" +version = "1.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94bffc006df10ac2a68c83692d734a465f8ee6c5b384d8545a636f81d858f4bf" +checksum = "a054912289d18629dc78375ba2c3726a3afe3ff71b4edba9dedfca0e3446d1fc" dependencies = [ "aws-lc-sys", "zeroize", @@ -447,9 +447,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.38.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4321e568ed89bb5a7d291a7f37997c2c0df89809d7b6d12062c81ddb54aa782e" +checksum = "1fa7e52a4c5c547c741610a2c6f123f3881e409b714cd27e6798ef020c514f0a" dependencies = [ "cc", "cmake", @@ -574,10 +574,11 @@ dependencies = [ [[package]] name = "borsh" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1da5ab77c1437701eeff7c88d968729e7766172279eab0676857b3d63af7a6f" +checksum = "cfd1e3f8955a5d7de9fab72fc8373fade9fb8a703968cb200ae3dc6cf08e185a" dependencies = [ + "bytes", "cfg_aliases", ] @@ -1284,17 +1285,16 @@ checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" [[package]] name = "drm" -version = "0.14.2" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5b71449a23fe79542d6527ca572844b2016abf9573c49e43144d546b1735aec" +checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" dependencies = [ "bitflags 2.11.0", "bytemuck", - "bytemuck_derive", "drm-ffi", "drm-fourcc", "libc", - "rustix 1.1.4", + "rustix 0.38.44", ] [[package]] @@ -1427,9 +1427,9 @@ checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" [[package]] name = "euclid" -version = "0.22.13" +version = "0.22.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df61bf483e837f88d5c2291dcf55c67be7e676b3a51acc48db3a7b163b91ed63" +checksum = "f1a05365e3b1c6d1650318537c7460c6923f1abdd272ad6842baa2b509957a06" dependencies = [ "num-traits", ] @@ -2818,9 +2818,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jni" @@ -4086,7 +4086,7 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.25.4+spec-1.1.0", + "toml_edit 0.25.5+spec-1.1.0", ] [[package]] @@ -5483,9 +5483,9 @@ dependencies = [ [[package]] name = "tar" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" +checksum = "22692a6476a21fa75fdfc11d452fda482af402c008cdbaf3476414e122040973" dependencies = [ "filetime", "libc", @@ -5723,22 +5723,22 @@ dependencies = [ "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "toml_writer", - "winnow", + "winnow 0.7.15", ] [[package]] name = "toml" -version = "1.0.6+spec-1.1.0" +version = "1.0.7+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "399b1124a3c9e16766831c6bba21e50192572cdd98706ea114f9502509686ffc" +checksum = "dd28d57d8a6f6e458bc0b8784f8fdcc4b99a437936056fa122cb234f18656a96" dependencies = [ "indexmap", "serde_core", "serde_spanned", - "toml_datetime 1.0.0+spec-1.1.0", + "toml_datetime 1.0.1+spec-1.1.0", "toml_parser", "toml_writer", - "winnow", + "winnow 1.0.0", ] [[package]] @@ -5752,9 +5752,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "1.0.0+spec-1.1.0" +version = "1.0.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32c2555c699578a4f59f0cc68e5116c8d7cabbd45e1409b989d4be085b53f13e" +checksum = "9b320e741db58cac564e26c607d3cc1fdc4a88fd36c879568c07856ed83ff3e9" dependencies = [ "serde_core", ] @@ -5769,35 +5769,35 @@ dependencies = [ "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "toml_writer", - "winnow", + "winnow 0.7.15", ] [[package]] name = "toml_edit" -version = "0.25.4+spec-1.1.0" +version = "0.25.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7193cbd0ce53dc966037f54351dbbcf0d5a642c7f0038c382ef9e677ce8c13f2" +checksum = "8ca1a40644a28bce036923f6a431df0b34236949d111cc07cb6dca830c9ef2e1" dependencies = [ "indexmap", - "toml_datetime 1.0.0+spec-1.1.0", + "toml_datetime 1.0.1+spec-1.1.0", "toml_parser", - "winnow", + "winnow 1.0.0", ] [[package]] name = "toml_parser" -version = "1.0.9+spec-1.1.0" +version = "1.0.10+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4" +checksum = "7df25b4befd31c4816df190124375d5a20c6b6921e2cad937316de3fccd63420" dependencies = [ - "winnow", + "winnow 1.0.0", ] [[package]] name = "toml_writer" -version = "1.0.6+spec-1.1.0" +version = "1.0.7+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" +checksum = "f17aaa1c6e3dc22b1da4b6bba97d066e354c7945cac2f7852d4e4e7ca7a6b56d" [[package]] name = "tower" @@ -7024,13 +7024,22 @@ dependencies = [ "memchr", ] +[[package]] +name = "winnow" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a90e88e4667264a994d34e6d1ab2d26d398dcdca8b7f52bec8668957517fc7d8" +dependencies = [ + "memchr", +] + [[package]] name = "winresource" version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0986a8b1d586b7d3e4fe3d9ea39fb451ae22869dcea4aa109d287a374d866087" dependencies = [ - "toml 1.0.6+spec-1.1.0", + "toml 1.0.7+spec-1.1.0", "version_check", ] @@ -7316,7 +7325,7 @@ dependencies = [ "uds_windows", "uuid", "windows-sys 0.61.2", - "winnow", + "winnow 0.7.15", "zbus_macros", "zbus_names", "zvariant", @@ -7344,7 +7353,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffd8af6d5b78619bab301ff3c560a5bd22426150253db278f164d6cf3b72c50f" dependencies = [ "serde", - "winnow", + "winnow 0.7.15", "zvariant", ] @@ -7356,18 +7365,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.42" +version = "0.8.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2578b716f8a7a858b7f02d5bd870c14bf4ddbbcf3a4c05414ba6503640505e3" +checksum = "efbb2a062be311f2ba113ce66f697a4dc589f85e78a4aea276200804cea0ed87" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.42" +version = "0.8.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e6cc098ea4d3bd6246687de65af3f920c430e236bee1e3bf2e441463f08a02f" +checksum = "0e8bc7269b54418e7aeeef514aa68f8690b8c0489a06b0136e5f57c4c5ccab89" dependencies = [ "proc-macro2", "quote", @@ -7400,20 +7409,6 @@ name = "zeroize" version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] [[package]] name = "zerotrie" @@ -7451,9 +7446,9 @@ dependencies = [ [[package]] name = "zip" -version = "8.2.0" +version = "8.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b680f2a0cd479b4cff6e1233c483fdead418106eae419dc60200ae9850f6d004" +checksum = "4a243cfad17427fc077f529da5a95abe4e94fd2bfdb601611870a6557cc67657" dependencies = [ "aes", "bzip2", @@ -7561,7 +7556,7 @@ dependencies = [ "endi", "enumflags2", "serde", - "winnow", + "winnow 0.7.15", "zvariant_derive", "zvariant_utils", ] @@ -7589,5 +7584,5 @@ dependencies = [ "quote", "serde", "syn", - "winnow", + "winnow 0.7.15", ] From 4a0a80b04572007fa2942d176c348508d584609b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 21 Mar 2026 10:46:18 +0100 Subject: [PATCH 0701/1117] Bump rustls-webpki in the cargo group across 1 directory (#685) Bumps the cargo group with 1 update in the / directory: [rustls-webpki](https://github.com/rustls/webpki). Updates `rustls-webpki` from 0.103.9 to 0.103.10 - [Release notes](https://github.com/rustls/webpki/releases) - [Commits](https://github.com/rustls/webpki/compare/v/0.103.9...v/0.103.10) --- updated-dependencies: - dependency-name: rustls-webpki dependency-version: 0.103.10 dependency-type: indirect dependency-group: cargo ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8342e7e..7d43188 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4739,9 +4739,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" -version = "0.103.9" +version = "0.103.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" +checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef" dependencies = [ "aws-lc-rs", "ring", From 567dd3a79d63f9c57b08250795fe1ebd5e0ed13b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 21 Mar 2026 19:57:27 +0100 Subject: [PATCH 0702/1117] Reset hotkey (#682) * Start soft reset work * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more --- parallel-rdp/interface.cpp | 4 ++++ parallel-rdp/interface.hpp | 1 + src/device.rs | 1 - src/device/cop0.rs | 14 +++++++++----- src/device/events.rs | 4 +++- src/device/exceptions.rs | 25 ++++++++++++++++++++++--- src/device/pif.rs | 15 ++++++++++++--- src/device/vi.rs | 10 ++++------ src/ui/video.rs | 12 ++++++++++++ 9 files changed, 67 insertions(+), 19 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 5eaf878..dccac14 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -141,6 +141,9 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { case SDL_SCANCODE_F7: callback.load_state = true; break; + case SDL_SCANCODE_F12: + callback.reset_game = true; + break; case SDL_SCANCODE_LEFTBRACKET: callback.lower_volume = true; break; @@ -466,6 +469,7 @@ CALL_BACK rdp_check_callback() { CALL_BACK return_value = callback; callback.save_state = false; callback.load_state = false; + callback.reset_game = false; callback.lower_volume = false; callback.raise_volume = false; callback.frame_advance = false; diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index b27799d..06125dc 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -27,6 +27,7 @@ typedef struct { bool emu_running; bool save_state; bool load_state; + bool reset_game; bool enable_speedlimiter; bool lower_volume; bool raise_volume; diff --git a/src/device.rs b/src/device.rs index f86ed3f..b9801f5 100644 --- a/src/device.rs +++ b/src/device.rs @@ -241,7 +241,6 @@ impl Device { reg_write_masks: [0; cop0::COP0_REGS_COUNT as usize], reg_latch: 0, is_event: false, - pending_compare_interrupt: false, instrs: [cop0::reserved; 32], instrs2: [cop0::reserved; 32], tlb_lut_w: vec![ diff --git a/src/device/cop0.rs b/src/device/cop0.rs index 41535bd..99c2497 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -30,13 +30,15 @@ pub const COP0_XCONTEXT_REG: u32 = 20; //const COP0_CACHEERR_REG: u32 = 27; pub const COP0_TAGLO_REG: u32 = 28; //const COP0_TAGHI_REG: u32 = 29; -const COP0_ERROREPC_REG: u32 = 30; +pub const COP0_ERROREPC_REG: u32 = 30; //const COP0_UNUSED_31: u32 = 31; pub const COP0_REGS_COUNT: u32 = 32; pub const COP0_STATUS_IE: u64 = 1 << 0; pub const COP0_STATUS_EXL: u64 = 1 << 1; pub const COP0_STATUS_ERL: u64 = 1 << 2; +pub const COP0_STATUS_SR: u64 = 1 << 20; +pub const COP0_STATUS_TS: u64 = 1 << 21; pub const COP0_STATUS_BEV: u64 = 1 << 22; pub const COP0_STATUS_FR: u64 = 1 << 26; pub const COP0_STATUS_CU1: u64 = 1 << 29; @@ -55,6 +57,7 @@ pub const COP0_CAUSE_EXCCODE_CPU: u64 = 11 << 2; pub const COP0_CAUSE_EXCCODE_TR: u64 = 13 << 2; pub const COP0_CAUSE_EXCCODE_FPE: u64 = 15 << 2; pub const COP0_CAUSE_IP2: u64 = 1 << 10; +pub const COP0_CAUSE_IP4: u64 = 1 << 12; pub const COP0_CAUSE_IP7: u64 = 1 << 15; pub const COP0_CAUSE_BD: u64 = 1 << 31; @@ -62,7 +65,7 @@ pub const COP0_CAUSE_CE1: u64 = 1 << 28; pub const COP0_CAUSE_CE2: u64 = 1 << 29; pub const COP0_CAUSE_IP_MASK: u64 = 0b00000000000000001111111100000000; -//pub const COP0_CAUSE_EXCCODE_MASK: u64 = 0x1F << 2; +pub const COP0_CAUSE_EXCCODE_MASK: u64 = 0x1F << 2; pub const COP0_CONTEXT_BADVPN2_MASK: u64 = 0b00000000011111111111111111110000; pub const COP0_XCONTEXT_BADVPN2_MASK: u64 = 0b01111111111111111111111111110000; pub const COP0_XCONTEXT_REGION_MASK: u64 = 0b110000000000000000000000000000000; @@ -101,7 +104,6 @@ pub struct Cop0 { pub tlb_lut_w: Vec, pub tlb_entries: [device::tlb::TlbEntry; 32], pub is_event: bool, - pub pending_compare_interrupt: bool, } fn mfc0(device: &mut device::Device, opcode: u32) { @@ -220,7 +222,6 @@ fn set_control_registers(device: &mut device::Device, index: u32, mut data: u64) (compare_event_diff as u64) << 1, ); device.cpu.cop0.regs[COP0_CAUSE_REG as usize] &= !COP0_CAUSE_IP7; - device.cpu.cop0.pending_compare_interrupt = false; } COP0_STATUS_REG => { if data & COP0_STATUS_FR != device.cpu.cop0.regs[index as usize] & COP0_STATUS_FR { @@ -238,7 +239,10 @@ fn set_control_registers(device: &mut device::Device, index: u32, mut data: u64) } pub fn compare_event(device: &mut device::Device) { - device.cpu.cop0.pending_compare_interrupt = true; + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] |= device::cop0::COP0_CAUSE_IP7; + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= + !device::cop0::COP0_CAUSE_EXCCODE_MASK; + device::events::create_event_at( device, device::events::EVENT_TYPE_COMPARE, diff --git a/src/device/events.rs b/src/device/events.rs index 6dbb9dd..49d853b 100644 --- a/src/device/events.rs +++ b/src/device/events.rs @@ -14,7 +14,8 @@ pub const EVENT_TYPE_COMPARE: usize = 9; pub const EVENT_TYPE_VRU: usize = 10; pub const EVENT_TYPE_PAK: usize = 11; pub const EVENT_TYPE_SAVE: usize = 12; -pub const EVENT_TYPE_COUNT: usize = 13; +pub const EVENT_TYPE_NMI: usize = 13; +pub const EVENT_TYPE_COUNT: usize = 14; #[derive(PartialEq, Copy, Clone, serde::Serialize, serde::Deserialize)] pub struct Event { @@ -63,6 +64,7 @@ fn get_event_handler(name: usize) -> fn(&mut device::Device) { EVENT_TYPE_VRU => device::controller::vru::vru_talking_event, EVENT_TYPE_PAK => device::controller::pak_switch_event, EVENT_TYPE_SAVE => ui::storage::save_event, + EVENT_TYPE_NMI => device::exceptions::reset_event, _ => dummy_event, } } diff --git a/src/device/exceptions.rs b/src/device/exceptions.rs index 4079d05..7ae8685 100644 --- a/src/device/exceptions.rs +++ b/src/device/exceptions.rs @@ -1,4 +1,5 @@ use crate::device; +use crate::ui; pub fn check_pending_interrupts(device: &mut device::Device) { if (device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] @@ -15,9 +16,9 @@ pub fn check_pending_interrupts(device: &mut device::Device) { & device.mi.regs[device::mi::MI_INTR_MASK_REG as usize] != 0 { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = device::cop0::COP0_CAUSE_IP2; - } else if device.cpu.cop0.pending_compare_interrupt { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = device::cop0::COP0_CAUSE_IP7; + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] |= device::cop0::COP0_CAUSE_IP2; + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= + !device::cop0::COP0_CAUSE_EXCCODE_MASK; } if (device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] @@ -150,6 +151,24 @@ pub fn tlb_miss_exception( exception_general(device, vector_offset) } +pub fn reset_event(device: &mut device::Device) { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= !device::cop0::COP0_CAUSE_IP4; + + device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] |= device::cop0::COP0_STATUS_ERL + | device::cop0::COP0_STATUS_SR + | device::cop0::COP0_STATUS_BEV; + device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] &= !device::cop0::COP0_STATUS_TS; + + device.cpu.cop0.regs[device::cop0::COP0_ERROREPC_REG as usize] = device.cpu.pc; + device.cpu.pc = 0xBFC00000; + device.cpu.branch_state.state = device::cpu::State::Step; + device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] = 0; + + device::pif::reset_pif(device, true); + + ui::video::onscreen_message(&device.ui, "Game reset"); +} + fn exception_general(device: &mut device::Device, vector_offset: u32) { if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_EXL == 0 diff --git a/src/device/pif.rs b/src/device/pif.rs index 8496c66..af05ef6 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -249,14 +249,23 @@ fn get_default_handler(device: &device::Device) -> device::controller::PakHandle } } -pub fn init(device: &mut device::Device) { +pub fn reset_pif(device: &mut device::Device, is_nmi_reset: bool) { if device.cart.pal { device.pif.rom = rom::PAL_PIF_ROM; } else { device.pif.rom = rom::NTSC_PIF_ROM; } - device.pif.ram[0x26] = device.cart.cic_seed; - device.pif.ram[0x27] = device.cart.cic_seed; + + let reset_type = u32::from(is_nmi_reset); + let rom_type = 0u32; + let s7 = 0u32; + let cic = u32::from(device.cart.cic_seed); + let word = (rom_type << 19) | (s7 << 18) | (reset_type << 17) | (cic << 8) | 0x3f; + device.pif.ram[0x24..0x28].copy_from_slice(&word.to_be_bytes()); +} + +pub fn init(device: &mut device::Device) { + reset_pif(device, false); let default_handler = get_default_handler(device); let tpak_handler = device::controller::PakHandler { diff --git a/src/device/vi.rs b/src/device/vi.rs index ad33046..672ab41 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -70,12 +70,10 @@ fn set_vertical_interrupt(device: &mut device::Device) { } fn set_current_line(device: &mut device::Device) { - let next_vi = device::events::get_event(device, device::events::EVENT_TYPE_VI); - if let Some(next_vi) = next_vi { - device.vi.regs[VI_CURRENT_REG as usize] = ((device.vi.delay - - (next_vi.count - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize])) - / device.vi.count_per_scanline) - as u32; + if let Some(next_vi) = device::events::get_event(device, device::events::EVENT_TYPE_VI) { + device.vi.regs[VI_CURRENT_REG as usize] = ((device.vi.delay.saturating_sub( + next_vi.count - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize], + )) / device.vi.count_per_scanline) as u32; // wrap around VI_CURRENT_REG if needed if device.vi.regs[VI_CURRENT_REG as usize] >= device.vi.regs[VI_V_SYNC_REG as usize] { diff --git a/src/ui/video.rs b/src/ui/video.rs index 006700b..1bb6a54 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -156,6 +156,18 @@ pub fn check_callback(device: &mut device::Device) -> (bool, bool) { } else if callback.load_state { device.load_state = true; } + if callback.reset_game { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] |= + device::cop0::COP0_CAUSE_IP4; + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= + !device::cop0::COP0_CAUSE_EXCCODE_MASK; + + device::events::create_event( + device, + device::events::EVENT_TYPE_NMI, + device.cpu.clock_rate, // 1 second + ); + } if device.vi.enable_speed_limiter != callback.enable_speedlimiter { speed_limiter_toggled = true; device.vi.enable_speed_limiter = callback.enable_speedlimiter; From 5da6a6c3eeeb8d1fce2c889c00f5facf9fff68b9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 24 Mar 2026 11:09:16 +0100 Subject: [PATCH 0703/1117] clippy fixes (#688) * clippy fixes * fix fmt --- src/device/cop0.rs | 8 ++++---- src/device/rsp_vu_instructions.rs | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/device/cop0.rs b/src/device/cop0.rs index 99c2497..750ea6c 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -223,10 +223,10 @@ fn set_control_registers(device: &mut device::Device, index: u32, mut data: u64) ); device.cpu.cop0.regs[COP0_CAUSE_REG as usize] &= !COP0_CAUSE_IP7; } - COP0_STATUS_REG => { - if data & COP0_STATUS_FR != device.cpu.cop0.regs[index as usize] & COP0_STATUS_FR { - device::cop1::set_fgr_registers(device, data) - } + COP0_STATUS_REG + if data & COP0_STATUS_FR != device.cpu.cop0.regs[index as usize] & COP0_STATUS_FR => + { + device::cop1::set_fgr_registers(device, data) } _ => {} } diff --git a/src/device/rsp_vu_instructions.rs b/src/device/rsp_vu_instructions.rs index 5d961a9..4333daf 100644 --- a/src/device/rsp_vu_instructions.rs +++ b/src/device/rsp_vu_instructions.rs @@ -844,7 +844,7 @@ pub fn vrcpl(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let input = if device.rsp.cpu.divdp { ((device.rsp.cpu.divin as i32) << 16) - | get_vpr16(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as u16 as i32 + | get_vpr16(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i32 } else { get_vpr16(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32 }; @@ -901,7 +901,7 @@ pub fn vrsql(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let input = if device.rsp.cpu.divdp { ((device.rsp.cpu.divin as i32) << 16) - | get_vpr16(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as u16 as i32 + | get_vpr16(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i32 } else { get_vpr16(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32 }; From 6220a566eb1f20051466ad28caf716fe4a795e18 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 24 Mar 2026 13:29:02 +0100 Subject: [PATCH 0704/1117] Enable Win ARM build (#686) * Enable Win ARM build * change ss2neon source * update sse2neon --- .github/workflows/build.yml | 8 ++++---- .gitmodules | 3 ++- src/compat/sse2neon | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ccca7ef..f9fea01 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -79,10 +79,10 @@ jobs: target: x86_64-pc-windows-msvc arch: windows-x86_64 llvm: win64 - #- os: windows-11-arm - # target: aarch64-pc-windows-msvc - # arch: windows-aarch64 - # llvm: woa64 + - os: windows-11-arm + target: aarch64-pc-windows-msvc + arch: windows-aarch64 + llvm: woa64 steps: - uses: actions/checkout@v6 with: diff --git a/.gitmodules b/.gitmodules index 65f8baf..b44af70 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,4 +4,5 @@ branch = gopher64 [submodule "src/compat/sse2neon"] path = src/compat/sse2neon - url = https://github.com/DLTcollab/sse2neon.git + url = https://github.com/gopher64/sse2neon.git + branch = gopher64 diff --git a/src/compat/sse2neon b/src/compat/sse2neon index 92f6de1..35a9ac6 160000 --- a/src/compat/sse2neon +++ b/src/compat/sse2neon @@ -1 +1 @@ -Subproject commit 92f6de174717aef09033ad21568d5bb9e5470404 +Subproject commit 35a9ac6b953b79708977b2510f7a981ad5f318b1 From 0f607e61aa3579b828fa4a3b819f60df554f248f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 24 Mar 2026 13:38:23 +0100 Subject: [PATCH 0705/1117] Use MacOS 26 (#689) --- .cargo/config.toml | 2 +- .github/workflows/build.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index d901dc4..9d37267 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -14,5 +14,5 @@ rustflags = ["-C", "target-cpu=cortex-a76"] CC = "clang" CXX = "clang++" AR = "llvm-ar" -MACOSX_DEPLOYMENT_TARGET = "15.0" +MACOSX_DEPLOYMENT_TARGET = "26.0" SDKROOT = "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f9fea01..ae2148d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -129,7 +129,7 @@ jobs: wait-for-completion: false build-macos: - runs-on: macos-15 + runs-on: macos-26 strategy: fail-fast: false matrix: From 1a4de8e911384ff4750ea6fb2b21bb02a203df15 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 24 Mar 2026 14:43:14 +0100 Subject: [PATCH 0706/1117] Don't use caching for releases --- .github/workflows/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ae2148d..5192d61 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -36,6 +36,7 @@ jobs: with: target: ${{ matrix.target }} rustflags: "" + cache: ${{ github.ref_type != 'tag' }} - name: Set LLVM_VERSION run: echo "LLVM_VERSION=$(rustc --version --verbose | grep "LLVM version" | cut -d':' -f2 | xargs)" >> $GITHUB_ENV - name: Install SDL Dependencies @@ -91,6 +92,7 @@ jobs: with: target: ${{ matrix.target }} rustflags: "" + cache: ${{ github.ref_type != 'tag' }} - name: Set LLVM_VERSION run: | $llvm_version = rustc --version --verbose | Select-String "LLVM version" | ForEach-Object { $_.Line.Split(":")[1].Trim() } @@ -145,6 +147,7 @@ jobs: with: target: ${{ matrix.target }} rustflags: "" + cache: ${{ github.ref_type != 'tag' }} - name: Set LLVM_VERSION run: echo "LLVM_VERSION=$(rustc --version --verbose | grep "LLVM version" | cut -d':' -f2 | xargs)" >> $GITHUB_ENV - name: Install LLVM and Clang From a834a4f9a41cb8440ca93bf0a0b2a9c6e7aebf57 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 24 Mar 2026 18:06:49 +0100 Subject: [PATCH 0707/1117] Eliminate macOS Vulkan hint in SDL initialization (#690) Removed macOS-specific Vulkan library hint from SDL initialization. --- src/ui.rs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index 6a079db..57721c8 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -69,16 +69,6 @@ impl Drop for Ui { pub fn sdl_init(flag: sdl3_sys::init::SDL_InitFlags) { unsafe { - #[cfg(target_os = "macos")] - if flag & sdl3_sys::init::SDL_INIT_VIDEO != 0 { - sdl3_sys::everything::SDL_SetHint( - sdl3_sys::hints::SDL_HINT_VULKAN_LIBRARY, - std::ffi::CString::new("/opt/homebrew/lib/libvulkan.dylib") - .unwrap() - .as_ptr(), - ); - } - if sdl3_sys::init::SDL_WasInit(flag) == 0 && !sdl3_sys::init::SDL_InitSubSystem(flag) { let err = std::ffi::CStr::from_ptr(sdl3_sys::error::SDL_GetError()) .to_str() From 86ce5795faeae6d2b9601df4b24f8e448e2d3ac5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 25 Mar 2026 10:56:17 +0100 Subject: [PATCH 0708/1117] fix netplay start if player 1 leaves (#691) * fix netplay start if player 1 leaves * more * more --- src/ui/netplay.rs | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 159f8f8..388d251 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -698,7 +698,6 @@ fn create_session( handle.get_rom_path(), message.player_name.as_ref().unwrap().into(), session.port.unwrap(), - true, GameSettings { fullscreen: game_settings.fullscreen, overclock: overclock.parse().unwrap(), @@ -816,7 +815,6 @@ fn join_session( handle.get_rom_path(), message.player_name.as_ref().unwrap().into(), session.port.unwrap(), - false, GameSettings { fullscreen, overclock: overclock.parse().unwrap(), @@ -863,7 +861,6 @@ fn setup_wait_window( rom_path: slint::SharedString, player_name: slint::SharedString, port: i32, - can_start: bool, game_settings: GameSettings, peer_addr: slint::SharedString, weak_app: slint::Weak, @@ -877,7 +874,6 @@ fn setup_wait_window( wait.set_game_name(game_name); wait.set_rom_path(rom_path); wait.set_port(port); - wait.set_can_start(can_start); wait.set_ping("Unknown".into()); let sender = netplay_write_sender.clone(); @@ -1034,8 +1030,15 @@ fn setup_wait_window( .unwrap(); } "reply_players" => { + let local_player = local_player.clone(); weak.upgrade_in_event_loop(move |handle| { if let Some(player_names) = response.player_names { + if local_player == player_names[0] { + handle.set_can_start(true); + } else { + handle.set_can_start(false); + } + let players_vec: slint::VecModel = slint::VecModel::default(); for player in player_names { @@ -1101,8 +1104,15 @@ fn setup_wait_window( .unwrap(); return; } else { + let local_player = local_player.clone(); weak.upgrade_in_event_loop(move |handle| { - handle.set_can_start(can_start); + if let Some(p0) = handle.get_players().row_data(0) { + if p0 == local_player { + handle.set_can_start(true); + } else { + handle.set_can_start(false); + } + } if let Some(message) = response.message { show_netplay_error(message); } From bff39ab04d52dc733c2fef5e4f1fcf300dd59cf9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 26 Mar 2026 16:28:29 +0100 Subject: [PATCH 0709/1117] Rust 1.94.1 (#692) * Rust 1.94.1 * more * more --- Cargo.lock | 231 +++++++++++++++++++++++++++++++---------- Cargo.toml | 4 +- rust-toolchain.toml | 2 +- src/device/cart/rom.rs | 6 +- src/ui/netplay.rs | 24 ++++- 5 files changed, 205 insertions(+), 62 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7d43188..a3ac2fc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -83,23 +83,21 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-activity" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" +checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd" dependencies = [ "android-properties", "bitflags 2.11.0", "cc", - "cesu8", - "jni", - "jni-sys", + "jni 0.22.4", "libc", "log", "ndk", "ndk-context", "ndk-sys", "num_enum", - "thiserror 1.0.69", + "thiserror 2.0.18", ] [[package]] @@ -532,6 +530,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-buffer" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +dependencies = [ + "hybrid-array", +] + [[package]] name = "block-padding" version = "0.3.3" @@ -785,7 +792,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "crypto-common", + "crypto-common 0.1.7", "inout", ] @@ -928,6 +935,12 @@ dependencies = [ "syn", ] +[[package]] +name = "const-oid" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" + [[package]] name = "constant_time_eq" version = "0.4.2" @@ -1114,6 +1127,15 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-common" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710" +dependencies = [ + "hybrid-array", +] + [[package]] name = "ctor-lite" version = "0.1.2" @@ -1154,9 +1176,9 @@ checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" [[package]] name = "deflate64" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "807800ff3288b621186fe0a8f3392c4652068257302709c24efd918c3dffcdc2" +checksum = "ac6b926516df9c60bfa16e107b21086399f8285a44ca9711344b9e553c5146e2" [[package]] name = "deranged" @@ -1207,11 +1229,22 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", - "crypto-common", + "block-buffer 0.10.4", + "crypto-common 0.1.7", "subtle", ] +[[package]] +name = "digest" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4850db49bf08e663084f7fb5c87d202ef91a3907271aff24a94eb97ff039153c" +dependencies = [ + "block-buffer 0.12.0", + "const-oid", + "crypto-common 0.2.1", +] + [[package]] name = "dirs" version = "6.0.0" @@ -2009,7 +2042,7 @@ dependencies = [ "serde-big-array", "serde_json", "sevenz-rust2", - "sha2", + "sha2 0.11.0", "slint", "slint-build", "socket2", @@ -2168,7 +2201,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -2216,6 +2249,15 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" +[[package]] +name = "hybrid-array" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8655f91cd07f2b9d0c24137bd650fe69617773435ee5ec83022377777ce65ef1" +dependencies = [ + "typenum", +] + [[package]] name = "hyper" version = "1.8.1" @@ -2765,9 +2807,9 @@ checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" [[package]] name = "iri-string" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" +checksum = "d8e7418f59cc01c88316161279a7f665217ae316b388e58a0d10e29f54f1e5eb" dependencies = [ "memchr", "serde", @@ -2831,7 +2873,7 @@ dependencies = [ "cesu8", "cfg-if", "combine", - "jni-sys", + "jni-sys 0.3.1", "log", "thiserror 1.0.69", "walkdir", @@ -2839,10 +2881,62 @@ dependencies = [ ] [[package]] -name = "jni-sys" -version = "0.3.0" +name = "jni" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" +checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" +dependencies = [ + "cfg-if", + "combine", + "jni-macros", + "jni-sys 0.4.1", + "log", + "simd_cesu8", + "thiserror 2.0.18", + "walkdir", + "windows-link", +] + +[[package]] +name = "jni-macros" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "simd_cesu8", + "syn", +] + +[[package]] +name = "jni-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn", +] [[package]] name = "jobserver" @@ -2971,9 +3065,9 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a" +checksum = "7ddbf48fd451246b1f8c2610bd3b4ac0cc6e149d89832867093ab69a17194f08" dependencies = [ "bitflags 2.11.0", "libc", @@ -3113,7 +3207,7 @@ version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47bb1e988e6fb779cf720ad431242d3f03167c1b3f2b1aae7f1a94b2495b36ae" dependencies = [ - "sha2", + "sha2 0.10.9", ] [[package]] @@ -3234,7 +3328,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ "bitflags 2.11.0", - "jni-sys", + "jni-sys 0.3.1", "log", "ndk-sys", "num_enum", @@ -3254,7 +3348,7 @@ version = "0.6.0+11769913" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" dependencies = [ - "jni-sys", + "jni-sys 0.3.1", ] [[package]] @@ -3318,9 +3412,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" +checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" [[package]] name = "num-derive" @@ -3895,7 +3989,7 @@ version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ - "digest", + "digest 0.10.7", "hmac", ] @@ -4086,7 +4180,7 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.25.5+spec-1.1.0", + "toml_edit 0.25.8+spec-1.1.0", ] [[package]] @@ -4119,9 +4213,9 @@ dependencies = [ [[package]] name = "pulldown-cmark" -version = "0.13.1" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c41efbf8f90ac44de7f3a868f0867851d261b56291732d0cbf7cceaaeb55a6" +checksum = "7c3a14896dfa883796f1cb410461aef38810ea05f2b2c33c5aded3649095fdad" dependencies = [ "bitflags 2.11.0", "getopts", @@ -4718,7 +4812,7 @@ checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" dependencies = [ "core-foundation 0.10.1", "core-foundation-sys", - "jni", + "jni 0.21.1", "log", "once_cell", "rustls", @@ -4958,9 +5052,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.0.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" +checksum = "876ac351060d4f882bb1032b6369eb0aef79ad9df1ea8bc404874d8cc3d0cd98" dependencies = [ "serde_core", ] @@ -4991,7 +5085,7 @@ dependencies = [ "js-sys", "lzma-rust2", "ppmd-rust", - "sha2", + "sha2 0.10.9", "wasm-bindgen", ] @@ -5003,7 +5097,7 @@ checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures 0.2.17", - "digest", + "digest 0.10.7", ] [[package]] @@ -5014,7 +5108,18 @@ checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures 0.2.17", - "digest", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "digest 0.11.2", ] [[package]] @@ -5039,6 +5144,16 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" +[[package]] +name = "simd_cesu8" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33" +dependencies = [ + "rustc_version", + "simdutf8", +] + [[package]] name = "simd_helpers" version = "0.1.0" @@ -5048,6 +5163,12 @@ dependencies = [ "quote", ] +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + [[package]] name = "simplecss" version = "0.2.2" @@ -5728,14 +5849,14 @@ dependencies = [ [[package]] name = "toml" -version = "1.0.7+spec-1.1.0" +version = "1.1.0+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd28d57d8a6f6e458bc0b8784f8fdcc4b99a437936056fa122cb234f18656a96" +checksum = "f8195ca05e4eb728f4ba94f3e3291661320af739c4e43779cbdfae82ab239fcc" dependencies = [ "indexmap", "serde_core", "serde_spanned", - "toml_datetime 1.0.1+spec-1.1.0", + "toml_datetime 1.1.0+spec-1.1.0", "toml_parser", "toml_writer", "winnow 1.0.0", @@ -5752,9 +5873,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "1.0.1+spec-1.1.0" +version = "1.1.0+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b320e741db58cac564e26c607d3cc1fdc4a88fd36c879568c07856ed83ff3e9" +checksum = "97251a7c317e03ad83774a8752a7e81fb6067740609f75ea2b585b569a59198f" dependencies = [ "serde_core", ] @@ -5774,30 +5895,30 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.5+spec-1.1.0" +version = "0.25.8+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ca1a40644a28bce036923f6a431df0b34236949d111cc07cb6dca830c9ef2e1" +checksum = "16bff38f1d86c47f9ff0647e6838d7bb362522bdf44006c7068c2b1e606f1f3c" dependencies = [ "indexmap", - "toml_datetime 1.0.1+spec-1.1.0", + "toml_datetime 1.1.0+spec-1.1.0", "toml_parser", "winnow 1.0.0", ] [[package]] name = "toml_parser" -version = "1.0.10+spec-1.1.0" +version = "1.1.0+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7df25b4befd31c4816df190124375d5a20c6b6921e2cad937316de3fccd63420" +checksum = "2334f11ee363607eb04df9b8fc8a13ca1715a72ba8662a26ac285c98aabb4011" dependencies = [ "winnow 1.0.0", ] [[package]] name = "toml_writer" -version = "1.0.7+spec-1.1.0" +version = "1.1.0+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17aaa1c6e3dc22b1da4b6bba97d066e354c7945cac2f7852d4e4e7ca7a6b56d" +checksum = "d282ade6016312faf3e41e57ebbba0c073e4056dab1232ab1cb624199648f8ed" [[package]] name = "tower" @@ -6008,9 +6129,9 @@ checksum = "383ad40bb927465ec0ce7720e033cb4ca06912855fc35db31b5755d0de75b1ee" [[package]] name = "unicode-segmentation" -version = "1.12.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +checksum = "da36089a805484bcccfffe0739803392c8298778a2d2f09febf76fac5ad9025b" [[package]] name = "unicode-vo" @@ -7039,7 +7160,7 @@ version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0986a8b1d586b7d3e4fe3d9ea39fb451ae22869dcea4aa109d287a374d866087" dependencies = [ - "toml 1.0.7+spec-1.1.0", + "toml 1.1.0+spec-1.1.0", "version_check", ] @@ -7446,9 +7567,9 @@ dependencies = [ [[package]] name = "zip" -version = "8.3.0" +version = "8.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a243cfad17427fc077f529da5a95abe4e94fd2bfdb601611870a6557cc67657" +checksum = "7756d0206d058333667493c4014f545f4b9603c4330ccd6d9b3f86dcab59f7d9" dependencies = [ "aes", "bzip2", @@ -7540,9 +7661,9 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.5.13" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec5f41c76397b7da451efd19915684f727d7e1d516384ca6bd0ec43ec94de23c" +checksum = "0b7a1c0af6e5d8d1363f4994b7a091ccf963d8b694f7da5b0b9cceb82da2c0a6" dependencies = [ "zune-core", ] diff --git a/Cargo.toml b/Cargo.toml index 9ecc3b8..dad7c63 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "gopher64" version = "1.1.16" edition = "2024" -rust-version = "1.94.0" +rust-version = "1.94.1" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -17,7 +17,7 @@ serde_json = "1.0" serde-big-array = "0.5" slint = { version = "1.15", default-features = false, features = ["compat-1-2", "std", "backend-winit", "renderer-skia"] } open = "5.3" -sha2 = "0.10" +sha2 = "0.11" sdl3-sys = { version = "0.6", features = ["build-from-source-static"] } sdl3-ttf-sys = { version = "0.6", features = ["build-from-source-static", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } rfd = "0.17" diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 76a06e6..9cf4a67 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.94.0" +channel = "1.94.1" diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 0893ad3..9c82433 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -200,5 +200,9 @@ fn set_cic(device: &mut device::Device) { pub fn calculate_hash(data: &[u8]) -> String { let mut hasher = Sha256::new(); hasher.update(data); - format!("{:X}", hasher.finalize()) + hasher + .finalize() + .iter() + .map(|b| format!("{:02X}", b)) + .collect() } diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 388d251..60bdf90 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -517,7 +517,13 @@ fn update_sessions(weak: slint::Weak) { rooms: None, message: None, auth_time: Some(now_utc), - auth: Some(format!("{:x}", hasher.finalize())), + auth: Some( + hasher + .finalize() + .iter() + .map(|b| format!("{:02x}", b)) + .collect(), + ), room: None, }; write @@ -645,7 +651,13 @@ fn create_session( rooms: None, auth_time: Some(now_utc), player_names: None, - auth: Some(format!("{:x}", hasher.finalize())), + auth: Some( + hasher + .finalize() + .iter() + .map(|b| format!("{:02x}", b)) + .collect(), + ), room: Some(NetplayRoom { room_name: Some(session_name), password: Some(password), @@ -762,7 +774,13 @@ fn join_session( rooms: None, player_names: None, auth_time: Some(now_utc), - auth: Some(format!("{:x}", hasher.finalize())), + auth: Some( + hasher + .finalize() + .iter() + .map(|b| format!("{:02x}", b)) + .collect(), + ), room: Some(NetplayRoom { room_name: None, password: Some(password), From 9b8040873d73f3fe5a8fbaad0bbd7c51542e65b6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 26 Mar 2026 17:02:52 +0100 Subject: [PATCH 0710/1117] Update parallel-rdp (#693) * Update parallel-rdp * more * more --- .gitmodules | 4 ++-- build.rs | 3 --- parallel-rdp/parallel-rdp-standalone | 2 +- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/.gitmodules b/.gitmodules index b44af70..cdf3321 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,7 +1,7 @@ [submodule "parallel-rdp/parallel-rdp-standalone"] path = parallel-rdp/parallel-rdp-standalone - url = https://github.com/gopher64/parallel-rdp-standalone.git - branch = gopher64 + url = https://github.com/Themaister/parallel-rdp-standalone.git + branch = master [submodule "src/compat/sse2neon"] path = src/compat/sse2neon url = https://github.com/gopher64/sse2neon.git diff --git a/build.rs b/build.rs index e3fbd9c..454e2d5 100644 --- a/build.rs +++ b/build.rs @@ -36,11 +36,9 @@ fn main() { .file("parallel-rdp/parallel-rdp-standalone/vulkan/image.cpp") .file("parallel-rdp/parallel-rdp-standalone/vulkan/indirect_layout.cpp") .file("parallel-rdp/parallel-rdp-standalone/vulkan/memory_allocator.cpp") - .file("parallel-rdp/parallel-rdp-standalone/vulkan/pipeline_cache.cpp") .file("parallel-rdp/parallel-rdp-standalone/vulkan/pipeline_event.cpp") .file("parallel-rdp/parallel-rdp-standalone/vulkan/query_pool.cpp") .file("parallel-rdp/parallel-rdp-standalone/vulkan/render_pass.cpp") - .file("parallel-rdp/parallel-rdp-standalone/vulkan/rtas.cpp") .file("parallel-rdp/parallel-rdp-standalone/vulkan/sampler.cpp") .file("parallel-rdp/parallel-rdp-standalone/vulkan/semaphore.cpp") .file("parallel-rdp/parallel-rdp-standalone/vulkan/semaphore_manager.cpp") @@ -55,7 +53,6 @@ fn main() { .file("parallel-rdp/parallel-rdp-standalone/util/timeline_trace_file.cpp") .file("parallel-rdp/parallel-rdp-standalone/util/environment.cpp") .file("parallel-rdp/parallel-rdp-standalone/util/thread_name.cpp") - .file("parallel-rdp/parallel-rdp-standalone/util/slab_allocator.cpp") .file("parallel-rdp/interface.cpp") .file("parallel-rdp/wsi_platform.cpp") .include("parallel-rdp/parallel-rdp-standalone/parallel-rdp") diff --git a/parallel-rdp/parallel-rdp-standalone b/parallel-rdp/parallel-rdp-standalone index 5f46864..388d70f 160000 --- a/parallel-rdp/parallel-rdp-standalone +++ b/parallel-rdp/parallel-rdp-standalone @@ -1 +1 @@ -Subproject commit 5f46864e605d6bc9cc5dba15bd6aedfd03b7bb42 +Subproject commit 388d70f5835b352d841d9d9e5a08c5de01470f41 From 46cb6738a2a5327bb12a8dbea93076e878d76e77 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 28 Mar 2026 19:24:53 +0100 Subject: [PATCH 0711/1117] Use upstream sse2neon (#694) * Use upstream sse2neon * update commit --- .gitmodules | 4 ++-- src/compat/sse2neon | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index cdf3321..1abe78c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,5 +4,5 @@ branch = master [submodule "src/compat/sse2neon"] path = src/compat/sse2neon - url = https://github.com/gopher64/sse2neon.git - branch = gopher64 + url = https://github.com/DLTcollab/sse2neon.git + branch = master diff --git a/src/compat/sse2neon b/src/compat/sse2neon index 35a9ac6..b26afbb 160000 --- a/src/compat/sse2neon +++ b/src/compat/sse2neon @@ -1 +1 @@ -Subproject commit 35a9ac6b953b79708977b2510f7a981ad5f318b1 +Subproject commit b26afbb44df55ac05320f7003a8a0eef30e465c5 From 8b770cfd18b2cd52efb1d0a50d079a6191be49ee Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 28 Mar 2026 20:00:44 +0100 Subject: [PATCH 0712/1117] Update linux deps based on SDL wiki (#695) --- .github/workflows/build.yml | 4 ++-- .github/workflows/lint.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5192d61..f02e29d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -45,10 +45,10 @@ jobs: with: packages: build-essential git make \ pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \ - libaudio-dev libjack-dev libsndio-dev libx11-dev libxext-dev \ + libaudio-dev libfribidi-dev libjack-dev libsndio-dev libx11-dev libxext-dev \ libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libxtst-dev \ libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ - libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \ + libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev libthai-dev \ libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev libfreetype-dev libfontconfig-dev version: ${{ matrix.target }}-1.0 - name: Install LLVM and Clang diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 8bde72e..380a46d 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -30,10 +30,10 @@ jobs: with: packages: build-essential git make \ pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \ - libaudio-dev libjack-dev libsndio-dev libx11-dev libxext-dev \ + libaudio-dev libfribidi-dev libjack-dev libsndio-dev libx11-dev libxext-dev \ libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libxtst-dev \ libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ - libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \ + libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev libthai-dev \ libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev libfreetype-dev libfontconfig-dev version: lint-1.0 - name: Install LLVM and Clang From 9528473f114cc66b2d6c8ed298b7d38edece2716 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 29 Mar 2026 18:54:35 +0200 Subject: [PATCH 0713/1117] use Duration for comparing time (#696) --- src/device/vi.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index 672ab41..494131d 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -201,17 +201,17 @@ fn speed_limiter(device: &mut device::Device, speed_limiter_toggled: bool) { device.vi.min_wait_time = std::time::Duration::from_secs(0); } - if std::time::Instant::now() - .duration_since(device.vi.limit_freq_check) - .as_secs_f64() - > 1.0 + if std::time::Instant::now().duration_since(device.vi.limit_freq_check) + > std::time::Duration::from_secs(1) { if !speed_limiter_toggled { - if device.vi.min_wait_time.as_secs_f64() == 0.0 && device.vi.limit_freq < MAX_LIMIT_FREQ + if device.vi.min_wait_time == std::time::Duration::from_secs(0) + && device.vi.limit_freq < MAX_LIMIT_FREQ { device.vi.limit_freq += 1; create_limiter(device); - } else if device.vi.min_wait_time.as_secs_f64() > device.vi.frame_time + } else if device.vi.min_wait_time + > std::time::Duration::from_secs_f64(device.vi.frame_time) && device.vi.limit_freq > 1 { device.vi.limit_freq -= 1; From cc538f942fe85308f06b9e6d23dd2552cd7e3193 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 30 Mar 2026 09:20:44 +0200 Subject: [PATCH 0714/1117] use limiter clock --- src/device/vi.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index 494131d..bcb939c 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -189,14 +189,15 @@ pub fn init(device: &mut device::Device) { } fn speed_limiter(device: &mut device::Device, speed_limiter_toggled: bool) { - if let Err(outcome) = device.vi.limiter.as_ref().unwrap().check() { - let dur = outcome.wait_time_from(governor::clock::DefaultClock::default().now()); + let limiter = device.vi.limiter.as_ref().unwrap(); + if let Err(outcome) = limiter.check() { + let dur = outcome.wait_time_from(limiter.clock().now()); spin_sleep::sleep(dur); if dur < device.vi.min_wait_time { device.vi.min_wait_time = dur; } - let _ = device.vi.limiter.as_ref().unwrap().check(); + let _ = limiter.check(); } else { device.vi.min_wait_time = std::time::Duration::from_secs(0); } From ad5dc8311a7de457ecf46fd263dcfde68e668778 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 31 Mar 2026 02:54:14 -0600 Subject: [PATCH 0715/1117] remove custom stack size (#698) * remove custom stack size * new command * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * config * more * more --- .cargo/config.toml | 3 + build.rs | 2 - src/device/controller/vru.rs | 6 +- src/main.rs | 139 +++++++++++++++++++++------------ src/ui.rs | 24 +++--- src/ui/gui.rs | 129 ++++++++++++++---------------- src/ui/gui/settings_page.slint | 2 +- src/ui/netplay.rs | 4 - src/ui/usb.rs | 49 +----------- src/ui/vru.rs | 51 ++++++------ 10 files changed, 187 insertions(+), 222 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 9d37267..f214a39 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -4,6 +4,9 @@ rustflags = ["-C", "link-arg=-fuse-ld=lld"] [target.'cfg(any(target_os = "windows", target_os = "macos"))'] linker = "rust-lld" +[target.'cfg(target_os = "windows")'] +rustflags = ["-C", "link-arg=/STACK:8388608"] + [target.'cfg(target_arch = "x86_64")'] rustflags = ["-C", "target-cpu=x86-64-v3"] diff --git a/build.rs b/build.rs index 454e2d5..7307a59 100644 --- a/build.rs +++ b/build.rs @@ -206,6 +206,4 @@ fn main() { let netplay_id = std::env::var("NETPLAY_ID").unwrap_or("gopher64".to_string()); println!("cargo:rustc-env=NETPLAY_ID={netplay_id}"); - - println!("cargo:rustc-env=N64_STACK_SIZE={}", 8 * 1024 * 1024); } diff --git a/src/device/controller/vru.rs b/src/device/controller/vru.rs index 99058ef..68aa98e 100644 --- a/src/device/controller/vru.rs +++ b/src/device/controller/vru.rs @@ -179,11 +179,7 @@ pub fn process(device: &mut device::Device, channel: usize) { device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] = 0; } JCMD_VRU_READ => { - let index = if let Some(weak) = &device.ui.weak { - ui::vru::prompt_for_match(&device.vru.words, weak, device.vi.frame_time) - } else { - 0x7FFF - }; + let index = ui::vru::prompt_for_match(&device.vru.words, device.vi.frame_time); let num_results = if index == 0x7FFF { 0 } else { 1 }; let data: HashMap = HashMap::from([ (0, 0x8000), diff --git a/src/main.rs b/src/main.rs index ced0156..36b139d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -18,62 +18,65 @@ use ui::gui; struct Args { game: Option, #[arg(short, long)] - fullscreen: bool, + fullscreen: Option, + #[arg(long)] + overclock: Option, + #[arg(long)] + disable_expansion_pak: Option, + #[arg(long, value_name = "CHEATS_FILE", hide = true)] + cheats: Option, + #[arg(long, value_name = "NETPLAY_PEER_ADDR", hide = true)] + netplay_peer_addr: Option, + #[arg(long, value_name = "NETPLAY_PLAYER_NUMBER", hide = true)] + netplay_player_number: Option, + #[arg(long, value_name = "GB_ROM_PATH", hide = true)] + gb_rom: Option>, + #[arg(long, value_name = "GB_RAM_PATH", hide = true)] + gb_ram: Option>, #[arg( - short, long, value_name = "PROFILE_NAME", help = "Create a new input profile (keyboard/gamepad mappings)" )] configure_input_profile: Option, + #[arg(long, help = "Use DirectInput when configuring a new input profile")] + use_dinput: Option, #[arg( - short, - long, - help = "Use DirectInput when configuring a new input profile" - )] - use_dinput: bool, - #[arg( - short, long, value_name = "DEADZONE_PERCENTAGE", help = "Used along with --configure-input-profile to set the deadzone for analog sticks" )] deadzone: Option, #[arg( - short, long, value_name = "PROFILE_NAME", help = "Must also specify --port. Used to bind a previously created profile to a port" )] bind_input_profile: Option, #[arg( - short, long, help = "Lists connected controllers which can be used in --assign-controller" )] list_controllers: bool, #[arg( - short, long, value_name = "CONTROLLER_NUMBER", help = "Must also specify --port. Used to assign a controller listed in --list-controllers to a port" )] assign_controller: Option, #[arg( - short, long, value_name = "PORT", help = "Valid values: 1-4. To be used alongside --bind-input-profile and --assign-controller" )] port: Option, #[arg( - short = 'z', + short, long, help = "Clear all input profile bindings and controller assignments" )] clear_input_bindings: bool, #[arg( - short = 's', long, value_name = "SLOT", help = "Load savestate from slot 0-9 when starting the game" @@ -81,18 +84,12 @@ struct Args { load_state: Option, } -fn main() -> std::io::Result<()> { - let runtime = tokio::runtime::Builder::new_multi_thread() - .enable_all() - .worker_threads(4) - .thread_name("n64") - .thread_stack_size(env!("N64_STACK_SIZE").parse().unwrap()) - .build() - .unwrap(); - +#[tokio::main] +async fn main() -> std::io::Result<()> { let dirs = ui::get_dirs(); std::fs::create_dir_all(dirs.config_dir)?; + std::fs::create_dir_all(dirs.cache_dir)?; std::fs::create_dir_all(dirs.data_dir.join("saves"))?; std::fs::create_dir_all(dirs.data_dir.join("states"))?; let args = Args::parse(); @@ -111,29 +108,71 @@ fn main() -> std::io::Result<()> { return Err(Error::other("Savestate slot must be between 0 and 9")); } - let handle = runtime.spawn(async move { - let mut device = device::Device::new(); - let overclock = device.ui.config.emulation.overclock; - let disable_expansion_pak = device.ui.config.emulation.disable_expansion_pak; + let mut device = device::Device::new(); + let fullscreen = args.fullscreen.unwrap_or(device.ui.config.video.fullscreen); + let overclock = args + .overclock + .unwrap_or(device.ui.config.emulation.overclock); + let disable_expansion_pak = args + .disable_expansion_pak + .unwrap_or(device.ui.config.emulation.disable_expansion_pak); + let cheats = if let Some(cheats_file) = args.cheats + && let Ok(data) = std::fs::read(cheats_file) + && let Ok(cheats) = serde_json::from_slice(&data) + { + cheats + } else { + let game_crc = ui::storage::get_game_crc(&rom_contents); + ui::config::Cheats::new() + .cheats + .get(&game_crc) + .cloned() + .unwrap_or_default() + }; - let game_cheats = { - let game_crc = ui::storage::get_game_crc(&rom_contents); - let cheats = ui::config::Cheats::new(); - cheats.cheats.get(&game_crc).cloned().unwrap_or_default() - }; - device::run_game( - &mut device, - rom_contents, - ui::gui::GameSettings { - fullscreen: args.fullscreen, - overclock, - disable_expansion_pak, - cheats: game_cheats, - load_savestate_slot: args.load_state, - }, - ); - }); - runtime.block_on(handle).unwrap() + let mut shutdown_tx = None; + + if let Some(peer_addr) = args.netplay_peer_addr + && let Some(player_number) = args.netplay_player_number + { + device.netplay = Some(netplay::init(peer_addr.parse().unwrap(), player_number)); + } else { + if let Some(gb_roms) = args.gb_rom + && let Some(gb_rams) = args.gb_ram + { + for i in 0..4 { + if let Some(gb_rom) = gb_roms.get(i) + && let Some(gb_ram) = gb_rams.get(i) + { + device.transferpaks[i].cart.rom = std::fs::read(gb_rom).unwrap(); + device.transferpaks[i].cart.ram = std::fs::read(gb_ram).unwrap(); + } + } + } + + if device.ui.config.emulation.usb { + (shutdown_tx, device.ui.usb) = ui::usb::init(); + } + } + + device::run_game( + &mut device, + rom_contents, + ui::gui::GameSettings { + fullscreen, + overclock, + disable_expansion_pak, + cheats, + load_savestate_slot: args.load_state, + }, + ); + + if device.netplay.is_some() { + netplay::close(&mut device); + } + if let Some(shutdown_tx) = &shutdown_tx { + ui::usb::close(shutdown_tx); + } } else if std::env::args().count() > 1 { let mut ui = ui::Ui::new(); @@ -157,7 +196,7 @@ fn main() -> std::io::Result<()> { ui::input::configure_input_profile( &mut ui, profile, - args.use_dinput, + args.use_dinput.unwrap_or(false), args.deadzone.unwrap_or(ui::input::DEADZONE_DEFAULT), ); return Ok(()); @@ -175,10 +214,8 @@ fn main() -> std::io::Result<()> { ui::input::bind_input_profile(&mut ui, profile, port); } } else { - runtime.block_on(async { - gui::app_window(); - }); + gui::app_window(); } - runtime.shutdown_timeout(std::time::Duration::from_secs(1)); + Ok(()) } diff --git a/src/ui.rs b/src/ui.rs index 57721c8..19ad343 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -12,6 +12,7 @@ pub mod vru; pub struct Dirs { pub config_dir: std::path::PathBuf, pub data_dir: std::path::PathBuf, + pub cache_dir: std::path::PathBuf, } pub struct Audio { @@ -53,7 +54,6 @@ pub struct Ui { pub storage: Storage, pub video: Video, pub usb: Usb, - pub weak: Option>, } impl Drop for Ui { @@ -94,19 +94,18 @@ pub fn get_dirs() -> Dirs { let exe_path = std::env::current_exe().unwrap(); let portable_dir = exe_path.parent(); let portable = portable_dir.unwrap().join("portable.txt").exists(); - let config_dir; - let data_dir; if portable { - config_dir = portable_dir.unwrap().join("portable_data").join("config"); - data_dir = portable_dir.unwrap().join("portable_data").join("data"); + Dirs { + config_dir: portable_dir.unwrap().join("portable_data").join("config"), + data_dir: portable_dir.unwrap().join("portable_data").join("data"), + cache_dir: portable_dir.unwrap().join("portable_data").join("cache"), + } } else { - config_dir = dirs::config_dir().unwrap().join("gopher64"); - data_dir = dirs::data_dir().unwrap().join("gopher64"); - }; - - Dirs { - config_dir, - data_dir, + Dirs { + config_dir: dirs::config_dir().unwrap().join("gopher64"), + data_dir: dirs::data_dir().unwrap().join("gopher64"), + cache_dir: dirs::cache_dir().unwrap().join("gopher64"), + } } } @@ -196,7 +195,6 @@ impl Ui { usb_tx: None, cart_rx: None, }, - weak: None, dirs, with_sdl, } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 3358dce..acdf369 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -1,5 +1,3 @@ -use crate::device; -use crate::netplay; use crate::ui; use slint::Model; @@ -60,23 +58,15 @@ fn check_latest_version(weak: slint::Weak) { }); } -fn local_game_window(app: &AppWindow, controller_paths: &[Option], usb: ui::Usb) { +fn local_game_window(app: &AppWindow, controller_paths: &[Option]) { let dirs = ui::get_dirs(); let weak = app.as_weak(); let controller_paths = controller_paths.to_owned(); app.on_open_rom_button_clicked(move || { let controller_paths = controller_paths.clone(); - let mut usb_tx = None; - if let Some(usb_tx_inner) = usb.usb_tx.as_ref() { - usb_tx = Some(usb_tx_inner.clone()); - } - let mut cart_rx = None; - if let Some(cart_rx_inner) = usb.cart_rx.as_ref() { - cart_rx = Some(cart_rx_inner.resubscribe()); - } weak.upgrade_in_event_loop(move |handle| { save_settings(&handle, &controller_paths); - open_rom(&handle, ui::Usb { usb_tx, cart_rx }) + open_rom(&handle) }) .unwrap(); }); @@ -222,18 +212,25 @@ fn controller_window( weak_dialog .upgrade_in_event_loop(move |handle| { handle.hide().unwrap(); - let profile_name = handle.get_profile_name().into(); + let profile_name = handle.get_profile_name(); let dinput = handle.get_dinput(); let deadzone = handle.get_deadzone(); tokio::spawn(async move { - let mut game_ui = ui::Ui::new(); - ui::input::configure_input_profile( - &mut game_ui, - profile_name, - dinput, - deadzone, - ); + std::process::Command::new(std::env::current_exe().unwrap()) + .args([ + "--configure-input-profile", + &profile_name, + "--use-dinput", + &dinput.to_string(), + "--deadzone", + &deadzone.to_string(), + ]) + .spawn() + .unwrap() + .wait() + .unwrap(); + let game_ui = ui::Ui::new(); update_input_profiles(&weak_app, &game_ui.config); }); }) @@ -304,11 +301,6 @@ fn about_window(app: &AppWindow) { pub fn app_window() { let app = AppWindow::new().unwrap(); about_window(&app); - let mut usb = ui::Usb { - usb_tx: None, - cart_rx: None, - }; - let mut shutdown_tx = None; let mut controller_paths; { let game_ui = ui::Ui::new(); @@ -318,76 +310,72 @@ pub fn app_window() { controller_paths.insert(0, None); settings_window(&app, &game_ui.config); controller_window(&app, &game_ui.config, &controller_names, &controller_paths); - - if game_ui.config.emulation.usb { - (shutdown_tx, usb) = ui::usb::init(app.as_weak()); - } } - local_game_window(&app, &controller_paths, usb); + local_game_window(&app, &controller_paths); ui::netplay::netplay_window(&app, &controller_paths); ui::cheats::cheats_window(&app); app.run().unwrap(); - if let Some(shutdown_tx) = &shutdown_tx { - ui::usb::close(shutdown_tx); - } save_settings(&app, &controller_paths); } pub fn run_rom( gb_paths: GbPaths, file_path: std::path::PathBuf, - mut game_settings: GameSettings, + game_settings: GameSettings, netplay: Option, - usb: ui::Usb, weak: slint::Weak, ) { tokio::spawn(async move { weak.upgrade_in_event_loop(move |handle| handle.set_game_running(true)) .unwrap(); - let mut device = device::Device::new(); - device.ui.config.rom_dir = file_path.parent().unwrap().to_path_buf(); + let mut command = std::process::Command::new(std::env::current_exe().unwrap()); + command.args([ + "--fullscreen", + &game_settings.fullscreen.to_string(), + "--overclock", + &game_settings.overclock.to_string(), + "--disable-expansion-pak", + &game_settings.disable_expansion_pak.to_string(), + ]); + let cheats_path = ui::get_dirs().cache_dir.join("cheats.json"); + if let Some(netplay_device) = netplay { + let f = std::fs::File::create(cheats_path.to_str().unwrap()).unwrap(); + serde_json::to_writer_pretty(f, &game_settings.cheats).unwrap(); + + command.args([ + "--netplay-peer-addr", + &netplay_device.peer_addr.to_string(), + "--netplay-player-number", + &netplay_device.player_number.to_string(), + "--cheats", + cheats_path.to_str().unwrap(), + ]); + } for i in 0..4 { if gb_paths.rom[i].is_some() && gb_paths.ram[i].is_some() { - device.transferpaks[i].cart.rom = - std::fs::read(gb_paths.rom[i].as_ref().unwrap()).unwrap(); - - device.transferpaks[i].cart.ram = - std::fs::read(gb_paths.ram[i].as_ref().unwrap()).unwrap(); + command.args([ + "--gb-rom", + gb_paths.rom[i].as_ref().unwrap().to_str().unwrap(), + "--gb-ram", + gb_paths.ram[i].as_ref().unwrap().to_str().unwrap(), + ]); } } - device.ui.usb.usb_tx = usb.usb_tx; - device.ui.usb.cart_rx = usb.cart_rx; + command + .arg(file_path.to_str().unwrap()) + .spawn() + .unwrap() + .wait() + .unwrap(); - device.ui.weak = Some(weak.clone()); + let _ = std::fs::remove_file(cheats_path.to_str().unwrap()); - if let Some(rom_contents) = device::get_rom_contents(file_path.as_path()) { - if let Some(netplay_device) = netplay { - device.netplay = Some(netplay::init( - netplay_device.peer_addr, - netplay_device.player_number, - )); - } else { - game_settings.cheats = { - let game_crc = ui::storage::get_game_crc(&rom_contents); - let cheats = ui::config::Cheats::new(); - cheats.cheats.get(&game_crc).cloned().unwrap_or_default() - }; - } - device::run_game(&mut device, rom_contents, game_settings); - if device.netplay.is_some() { - netplay::close(&mut device); - } - } else { - println!("Could not read rom file"); - } - - let rom_dir = device.ui.config.rom_dir.clone(); weak.upgrade_in_event_loop(move |handle| { - if let Some(rom_dir_str) = rom_dir.to_str() { - handle.set_rom_dir(rom_dir_str.into()); + if let Some(rom_dir) = file_path.parent().unwrap().to_str() { + handle.set_rom_dir(rom_dir.into()); } handle.set_game_running(false); }) @@ -395,7 +383,7 @@ pub fn run_rom( }); } -fn open_rom(app: &AppWindow, usb: ui::Usb) { +fn open_rom(app: &AppWindow) { let rom_dir = app.get_rom_dir(); let select_rom = if !rom_dir.is_empty() && let Ok(exists) = std::fs::exists(&rom_dir) @@ -462,7 +450,6 @@ fn open_rom(app: &AppWindow, usb: ui::Usb) { load_savestate_slot: None, }, None, - usb, weak, ); } diff --git a/src/ui/gui/settings_page.slint b/src/ui/gui/settings_page.slint index 4a7b401..d8c0617 100644 --- a/src/ui/gui/settings_page.slint +++ b/src/ui/gui/settings_page.slint @@ -110,7 +110,7 @@ export component Settings inherits Page { HorizontalBox { alignment: start; CheckBox { - text: @tr("Emulate UNFLoader (reload emulator after changing)"); + text: @tr("Emulate UNFLoader"); checked: SettingsData.emulate_usb; toggled => { SettingsData.emulate_usb = self.checked; diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 60bdf90..a09a7e4 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -1112,10 +1112,6 @@ fn setup_wait_window( peer_addr: socket_addr, player_number: player_number as u8, }), - ui::Usb { - usb_tx: None, - cart_rx: None, - }, weak_app, ); }) diff --git a/src/ui/usb.rs b/src/ui/usb.rs index ebeffae..97d71e6 100644 --- a/src/ui/usb.rs +++ b/src/ui/usb.rs @@ -26,53 +26,12 @@ fn respond_to_handshake(usb_tx: &tokio::sync::broadcast::Sender, data: } } -fn upload_rom( - weak: slint::Weak, - rom: Vec, - usb_tx: &tokio::sync::broadcast::Sender, - cart_rx: &tokio::sync::broadcast::Receiver, -) { - let weak_clone = weak.clone(); - let usb_tx = usb_tx.clone(); - let cart_rx = cart_rx.resubscribe(); - - weak.upgrade_in_event_loop(move |handle| { - let dir = std::env::temp_dir(); - let rom_path = dir.join("rom_upload.bin"); - std::fs::write(rom_path.clone(), rom).unwrap(); - - ui::gui::run_rom( - ui::gui::GbPaths { - rom: [None, None, None, None], - ram: [None, None, None, None], - }, - rom_path, - ui::gui::GameSettings { - fullscreen: handle.get_fullscreen(), - overclock: handle.get_overclock_n64_cpu(), - disable_expansion_pak: handle.get_disable_expansion_pak(), - cheats: std::collections::HashMap::new(), // will be filled in later - load_savestate_slot: None, - }, - None, - ui::Usb { - usb_tx: Some(usb_tx), - cart_rx: Some(cart_rx), - }, - weak_clone, - ); - }) - .unwrap(); -} - async fn handle_connection( conn: tokio::net::TcpStream, mut shutdown_rx: tokio::sync::watch::Receiver<()>, mut usb_rx: tokio::sync::broadcast::Receiver, usb_tx: tokio::sync::broadcast::Sender, cart_tx: tokio::sync::broadcast::Sender, - cart_rx: tokio::sync::broadcast::Receiver, - weak: slint::Weak, ) { let (mut incoming, mut outgoing) = conn.into_split(); @@ -147,7 +106,7 @@ async fn handle_connection( if usb_data.data_type == DATATYPE_TCPTEST { respond_to_handshake(&usb_tx,usb_data.data); } else if usb_data.data_type == DATATYPE_ROMUPLOAD { - upload_rom(weak.clone(), usb_data.data,&usb_tx,&cart_rx); + panic!("ROM upload not supported"); } else { cart_tx.send(usb_data).unwrap(); } @@ -168,9 +127,7 @@ async fn handle_connection( } } -pub fn init( - weak: slint::Weak, -) -> (Option>, ui::Usb) { +pub fn init() -> (Option>, ui::Usb) { let (shutdown_tx, mut shutdown_rx) = tokio::sync::watch::channel(()); let (usb_tx, usb_rx): ( tokio::sync::broadcast::Sender, @@ -192,7 +149,7 @@ pub fn init( tokio::select! { res = listener.accept() => { if let Ok((c,_)) = res { - handle_connection(c,shutdown_rx.clone(),usb_rx.resubscribe(),usb_tx.clone(),cart_tx.clone(),cart_rx.resubscribe(),weak.clone()).await; + handle_connection(c,shutdown_rx.clone(),usb_rx.resubscribe(),usb_tx.clone(),cart_tx.clone()).await; } else { break; } diff --git a/src/ui/vru.rs b/src/ui/vru.rs index 6615450..d5c14ea 100644 --- a/src/ui/vru.rs +++ b/src/ui/vru.rs @@ -1,45 +1,38 @@ use crate::gui; use slint::ComponentHandle; -pub fn prompt_for_match( - words: &[String], - weak_vru: &slint::Weak, - frame_time: f64, -) -> u16 { +pub fn prompt_for_match(words: &[String], frame_time: f64) -> u16 { let mut dedup_words = words.to_owned(); dedup_words.sort(); dedup_words.dedup(); let (tx, mut rx) = tokio::sync::mpsc::channel(1); + tokio::spawn(async move { + let vru_dialog = gui::VruDialog::new().unwrap(); + let vru_dialog_weak = vru_dialog.as_weak(); - weak_vru - .upgrade_in_event_loop(move |_handle| { - let vru_dialog = gui::VruDialog::new().unwrap(); - let vru_dialog_weak = vru_dialog.as_weak(); + let tx_clicked = tx.clone(); - let tx_clicked = tx.clone(); + vru_dialog.on_vru_button_clicked(move |chosen_word| { + tx_clicked.try_send(chosen_word.to_string()).unwrap(); + vru_dialog_weak.unwrap().window().hide().unwrap(); + }); - vru_dialog.on_vru_button_clicked(move |chosen_word| { - tx_clicked.try_send(chosen_word.to_string()).unwrap(); - vru_dialog_weak.unwrap().window().hide().unwrap(); - }); + vru_dialog.window().on_close_requested(move || { + tx.try_send("".to_string()).unwrap(); + slint::CloseRequestResponse::HideWindow + }); - vru_dialog.window().on_close_requested(move || { - tx.try_send("".to_string()).unwrap(); - slint::CloseRequestResponse::HideWindow - }); + let words_vec = slint::VecModel::default(); + for word in dedup_words { + words_vec.push(word.into()); + } + let words_model: std::rc::Rc> = + std::rc::Rc::new(words_vec); + vru_dialog.set_words(slint::ModelRc::from(words_model)); - let words_vec = slint::VecModel::default(); - for word in dedup_words { - words_vec.push(word.into()); - } - let words_model: std::rc::Rc> = - std::rc::Rc::new(words_vec); - vru_dialog.set_words(slint::ModelRc::from(words_model)); - - vru_dialog.show().unwrap(); - }) - .unwrap(); + vru_dialog.run().unwrap(); + }); let mut result = rx.try_recv(); while result.is_err() { From 5177aaab53da3ce2950c445c42e31445b8652e0a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 31 Mar 2026 11:38:36 +0200 Subject: [PATCH 0716/1117] dont pass fullscreen --- src/device.rs | 1 - src/main.rs | 7 ++++--- src/ui/gui.rs | 5 ----- src/ui/netplay.rs | 14 +------------- 4 files changed, 5 insertions(+), 22 deletions(-) diff --git a/src/device.rs b/src/device.rs index b9801f5..4c1462a 100644 --- a/src/device.rs +++ b/src/device.rs @@ -45,7 +45,6 @@ pub mod unmapped; pub mod vi; pub fn run_game(device: &mut Device, rom_contents: Vec, game_settings: ui::gui::GameSettings) { - device.ui.video.fullscreen = game_settings.fullscreen; device.cpu.overclock = game_settings.overclock; if game_settings.disable_expansion_pak { device.rdram.size = 0x400000; diff --git a/src/main.rs b/src/main.rs index 36b139d..9bae922 100644 --- a/src/main.rs +++ b/src/main.rs @@ -18,7 +18,7 @@ use ui::gui; struct Args { game: Option, #[arg(short, long)] - fullscreen: Option, + fullscreen: bool, #[arg(long)] overclock: Option, #[arg(long)] @@ -109,7 +109,9 @@ async fn main() -> std::io::Result<()> { } let mut device = device::Device::new(); - let fullscreen = args.fullscreen.unwrap_or(device.ui.config.video.fullscreen); + if args.fullscreen { + device.ui.video.fullscreen = true; + } let overclock = args .overclock .unwrap_or(device.ui.config.emulation.overclock); @@ -159,7 +161,6 @@ async fn main() -> std::io::Result<()> { &mut device, rom_contents, ui::gui::GameSettings { - fullscreen, overclock, disable_expansion_pak, cheats, diff --git a/src/ui/gui.rs b/src/ui/gui.rs index acdf369..8b83b86 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -24,7 +24,6 @@ pub struct GbPaths { #[derive(Clone)] pub struct GameSettings { - pub fullscreen: bool, pub overclock: bool, pub disable_expansion_pak: bool, pub cheats: std::collections::HashMap>, @@ -331,8 +330,6 @@ pub fn run_rom( let mut command = std::process::Command::new(std::env::current_exe().unwrap()); command.args([ - "--fullscreen", - &game_settings.fullscreen.to_string(), "--overclock", &game_settings.overclock.to_string(), "--disable-expansion-pak", @@ -416,7 +413,6 @@ fn open_rom(app: &AppWindow) { } } - let fullscreen = app.get_fullscreen(); let overclock = app.get_overclock_n64_cpu(); let disable_expansion_pak = app.get_disable_expansion_pak(); @@ -443,7 +439,6 @@ fn open_rom(app: &AppWindow) { }, file.path().to_path_buf(), GameSettings { - fullscreen, overclock, disable_expansion_pak, cheats: std::collections::HashMap::new(), // will be filled in later diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index a09a7e4..83f6c34 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -711,7 +711,6 @@ fn create_session( message.player_name.as_ref().unwrap().into(), session.port.unwrap(), GameSettings { - fullscreen: game_settings.fullscreen, overclock: overclock.parse().unwrap(), disable_expansion_pak: disable_expansion_pak.parse().unwrap(), cheats: serde_json::from_str(cheats).unwrap(), @@ -755,7 +754,6 @@ fn join_session( game_hash: String, password: String, room_port: i32, - fullscreen: bool, weak_app: slint::Weak, weak: slint::Weak, ) { @@ -834,7 +832,6 @@ fn join_session( message.player_name.as_ref().unwrap().into(), session.port.unwrap(), GameSettings { - fullscreen, overclock: overclock.parse().unwrap(), disable_expansion_pak: disable_expansion_pak.parse().unwrap(), cheats: serde_json::from_str(cheats).unwrap(), @@ -1102,7 +1099,6 @@ fn setup_wait_window( }, handle.get_rom_path().as_str().into(), GameSettings { - fullscreen: game_settings.fullscreen, overclock: game_settings.overclock, disable_expansion_pak: game_settings.disable_expansion_pak, cheats: game_settings.cheats, @@ -1153,7 +1149,6 @@ fn setup_wait_window( pub fn setup_join_window( join_window: &NetplayJoin, - fullscreen: bool, rom_dir: slint::SharedString, weak_app: slint::Weak, ) { @@ -1202,7 +1197,6 @@ pub fn setup_join_window( game_hash.to_string(), password.to_string(), room_port, - fullscreen, weak_app.clone(), weak.clone(), ); @@ -1226,7 +1220,6 @@ pub fn netplay_window(app: &AppWindow, controller_paths: &[Option]) { setup_create_window( &create_window, GameSettings { - fullscreen: handle.get_fullscreen(), overclock: handle.get_overclock_n64_cpu(), disable_expansion_pak: handle.get_disable_expansion_pak(), cheats: std::collections::HashMap::new(), // not used here @@ -1249,12 +1242,7 @@ pub fn netplay_window(app: &AppWindow, controller_paths: &[Option]) { .upgrade_in_event_loop(move |handle| { let join_window = NetplayJoin::new().unwrap(); save_settings(&handle, &controller_paths); - setup_join_window( - &join_window, - handle.get_fullscreen(), - handle.get_rom_dir(), - weak_app, - ); + setup_join_window(&join_window, handle.get_rom_dir(), weak_app); }) .unwrap(); }); From ebd22415cd52cd124fb7f484fa8ef9d8aaa230f4 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 31 Mar 2026 11:40:50 +0200 Subject: [PATCH 0717/1117] honor setting --- src/main.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main.rs b/src/main.rs index 9bae922..7aa2637 100644 --- a/src/main.rs +++ b/src/main.rs @@ -111,6 +111,8 @@ async fn main() -> std::io::Result<()> { let mut device = device::Device::new(); if args.fullscreen { device.ui.video.fullscreen = true; + } else { + device.ui.video.fullscreen = device.ui.config.video.fullscreen; } let overclock = args .overclock From 9b0b3e67a48402c220d2263dcf110a5aad037240 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 31 Mar 2026 13:58:56 +0200 Subject: [PATCH 0718/1117] change dinput arg type --- src/main.rs | 4 ++-- src/ui/gui.rs | 25 ++++++++++++------------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/main.rs b/src/main.rs index 7aa2637..b4ab2ec 100644 --- a/src/main.rs +++ b/src/main.rs @@ -40,7 +40,7 @@ struct Args { )] configure_input_profile: Option, #[arg(long, help = "Use DirectInput when configuring a new input profile")] - use_dinput: Option, + use_dinput: bool, #[arg( long, value_name = "DEADZONE_PERCENTAGE", @@ -199,7 +199,7 @@ async fn main() -> std::io::Result<()> { ui::input::configure_input_profile( &mut ui, profile, - args.use_dinput.unwrap_or(false), + args.use_dinput, args.deadzone.unwrap_or(ui::input::DEADZONE_DEFAULT), ); return Ok(()); diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 8b83b86..89239df 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -216,19 +216,18 @@ fn controller_window( let deadzone = handle.get_deadzone(); tokio::spawn(async move { - std::process::Command::new(std::env::current_exe().unwrap()) - .args([ - "--configure-input-profile", - &profile_name, - "--use-dinput", - &dinput.to_string(), - "--deadzone", - &deadzone.to_string(), - ]) - .spawn() - .unwrap() - .wait() - .unwrap(); + let mut command = + std::process::Command::new(std::env::current_exe().unwrap()); + command.args([ + "--configure-input-profile", + &profile_name, + "--deadzone", + &deadzone.to_string(), + ]); + if dinput { + command.arg("--use-dinput"); + } + command.spawn().unwrap().wait().unwrap(); let game_ui = ui::Ui::new(); update_input_profiles(&weak_app, &game_ui.config); }); From cef70faf1efbc8f00117efe26cfb5a0e968a4ffd Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 31 Mar 2026 15:02:53 +0200 Subject: [PATCH 0719/1117] move MACOSX_DEPLOYMENT_TARGET --- .cargo/config.toml | 1 - .github/workflows/build.yml | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index f214a39..2174311 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -17,5 +17,4 @@ rustflags = ["-C", "target-cpu=cortex-a76"] CC = "clang" CXX = "clang++" AR = "llvm-ar" -MACOSX_DEPLOYMENT_TARGET = "26.0" SDKROOT = "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f02e29d..c05d23c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -162,6 +162,7 @@ jobs: cp target/${{ matrix.target }}/release/gopher64 output/gopher64-${{ matrix.arch }} env: NETPLAY_ID: ${{ secrets.NETPLAY_ID }} + MACOSX_DEPLOYMENT_TARGET: "26.0" - name: Upload file uses: actions/upload-artifact@v7 with: From 11d3e52779d9d3d31781e6ca54e5ba51ceff4490 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 31 Mar 2026 11:12:06 -0600 Subject: [PATCH 0720/1117] use status vs spawn/wait (#699) --- src/ui/gui.rs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 89239df..dc66403 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -227,7 +227,7 @@ fn controller_window( if dinput { command.arg("--use-dinput"); } - command.spawn().unwrap().wait().unwrap(); + command.status().unwrap(); let game_ui = ui::Ui::new(); update_input_profiles(&weak_app, &game_ui.config); }); @@ -360,12 +360,7 @@ pub fn run_rom( } } - command - .arg(file_path.to_str().unwrap()) - .spawn() - .unwrap() - .wait() - .unwrap(); + command.arg(file_path.to_str().unwrap()).status().unwrap(); let _ = std::fs::remove_file(cheats_path.to_str().unwrap()); From de0db4b46d0678706e1b8c07486b0119e9f12394 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 31 Mar 2026 12:09:06 -0600 Subject: [PATCH 0721/1117] static link moltenvk (#700) * static link moltenvk * more * more * static freetype --- .github/workflows/build.yml | 1 + build.rs | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c05d23c..009151e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -157,6 +157,7 @@ jobs: force-url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-macOS-${{ matrix.llvm }}.tar.xz - name: Build run: | + brew install molten-vk cargo build --release -v --target=${{ matrix.target }} mkdir output cp target/${{ matrix.target }}/release/gopher64 output/gopher64-${{ matrix.arch }} diff --git a/build.rs b/build.rs index 7307a59..da36ac3 100644 --- a/build.rs +++ b/build.rs @@ -93,7 +93,7 @@ fn main() { .unwrap(); } else if os == "macos" { println!("cargo:rustc-link-search=native=/opt/homebrew/opt/freetype/lib"); - println!("cargo:rustc-link-lib=freetype"); + println!("cargo:rustc-link-lib=static=freetype"); let output = std::process::Command::new("clang") .args(["--print-runtime-dir"]) @@ -104,6 +104,9 @@ fn main() { println!("cargo:rustc-link-search=native={}", runtime_dir); println!("cargo:rustc-link-lib=static=clang_rt.osx"); + + println!("cargo:rustc-link-search=native=/opt/homebrew/opt/molten-vk/lib"); + println!("cargo:rustc-link-lib=static=MoltenVK"); } volk_build.flag("-flto=thin"); From 973f4bb28dc90296ab78933c4986b06b33a90ed7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 1 Apr 2026 12:35:46 -0600 Subject: [PATCH 0722/1117] Create MacOS bundle (#701) * Create MacOS bundle * more * more * more * Update framework link search path in build.rs * Update framework link search path in build.rs * Remove MoltenVK linking from build.rs Removed MoltenVK framework linking from build script. * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more --- .github/workflows/build.yml | 11 ++++++----- Cargo.toml | 7 +++++++ build.rs | 5 +---- data/entitlements.plist | 8 ++++++++ 4 files changed, 22 insertions(+), 9 deletions(-) create mode 100644 data/entitlements.plist diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 009151e..8c0bdd5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -157,10 +157,12 @@ jobs: force-url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-macOS-${{ matrix.llvm }}.tar.xz - name: Build run: | + cargo install cargo-bundle brew install molten-vk - cargo build --release -v --target=${{ matrix.target }} - mkdir output - cp target/${{ matrix.target }}/release/gopher64 output/gopher64-${{ matrix.arch }} + cargo bundle --release --target=${{ matrix.target }} --format osx + install_name_tool -change /opt/homebrew/opt/freetype/lib/libfreetype.6.dylib \ + @executable_path/../Frameworks/libfreetype.6.dylib target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/MacOS/gopher64 + codesign -f --entitlements data/entitlements.plist --timestamp --options runtime -s - target/${{ matrix.target }}/release/bundle/osx/Gopher64.app env: NETPLAY_ID: ${{ secrets.NETPLAY_ID }} MACOSX_DEPLOYMENT_TARGET: "26.0" @@ -168,5 +170,4 @@ jobs: uses: actions/upload-artifact@v7 with: name: gopher64-${{ matrix.arch }} - path: output/gopher64-${{ matrix.arch }} - archive: false + path: target/${{ matrix.target }}/release/bundle/osx diff --git a/Cargo.toml b/Cargo.toml index dad7c63..38a275e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -52,3 +52,10 @@ inherits = "release" debug = true strip = false panic = "unwind" + +[package.metadata.bundle] +name = "Gopher64" +identifier = "io.github.gopher64.gopher64" +category = "public.app-category.games" +icon = ["data/icon/gopher64_128x128.png","data/icon/gopher64_256x256.png","data/icon/gopher64_512x512.png"] +osx_frameworks = ["/opt/homebrew/opt/molten-vk/lib/libMoltenVK.dylib","/opt/homebrew/opt/freetype/lib/libfreetype.6.dylib"] diff --git a/build.rs b/build.rs index da36ac3..ea98211 100644 --- a/build.rs +++ b/build.rs @@ -93,7 +93,7 @@ fn main() { .unwrap(); } else if os == "macos" { println!("cargo:rustc-link-search=native=/opt/homebrew/opt/freetype/lib"); - println!("cargo:rustc-link-lib=static=freetype"); + println!("cargo:rustc-link-lib=dylib=freetype"); let output = std::process::Command::new("clang") .args(["--print-runtime-dir"]) @@ -104,9 +104,6 @@ fn main() { println!("cargo:rustc-link-search=native={}", runtime_dir); println!("cargo:rustc-link-lib=static=clang_rt.osx"); - - println!("cargo:rustc-link-search=native=/opt/homebrew/opt/molten-vk/lib"); - println!("cargo:rustc-link-lib=static=MoltenVK"); } volk_build.flag("-flto=thin"); diff --git a/data/entitlements.plist b/data/entitlements.plist new file mode 100644 index 0000000..8cc185a --- /dev/null +++ b/data/entitlements.plist @@ -0,0 +1,8 @@ + + + + + com.apple.security.cs.disable-library-validation + + + From 20b5cf3e4d3d6279f45e7014a5108788a24763ba Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 2 Apr 2026 00:19:32 -0600 Subject: [PATCH 0723/1117] Improve MacOS opt flags (#705) --- .cargo/config.toml | 5 ++++- build.rs | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 2174311..1f1025e 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -10,7 +10,10 @@ rustflags = ["-C", "link-arg=/STACK:8388608"] [target.'cfg(target_arch = "x86_64")'] rustflags = ["-C", "target-cpu=x86-64-v3"] -[target.'cfg(target_arch = "aarch64")'] +[target.'cfg(all(target_arch = "aarch64", target_os = "macos"))'] +rustflags = ["-C", "target-cpu=apple-m1"] + +[target.'cfg(all(target_arch = "aarch64", not(target_os = "macos")))'] rustflags = ["-C", "target-cpu=cortex-a76"] [env] diff --git a/build.rs b/build.rs index ea98211..1b108c0 100644 --- a/build.rs +++ b/build.rs @@ -73,7 +73,9 @@ fn main() { let arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap(); let opt_flag = if arch == "x86_64" { "-march=x86-64-v3" - } else if arch == "aarch64" { + } else if arch == "aarch64" && os == "macos" { + "-march=armv8.4-a" + } else if arch == "aarch64" && os != "macos" { "-march=armv8.2-a" } else { panic!("unknown arch") From 4bba36f0c342a935fc94593c6baf63393a13ddef Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 2 Apr 2026 06:52:16 -0600 Subject: [PATCH 0724/1117] add libpng to macos build (#706) * add libpng to macos build * more * signing * more * more * more --- .github/workflows/build.yml | 4 +++- Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8c0bdd5..b0a1ce2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -162,7 +162,9 @@ jobs: cargo bundle --release --target=${{ matrix.target }} --format osx install_name_tool -change /opt/homebrew/opt/freetype/lib/libfreetype.6.dylib \ @executable_path/../Frameworks/libfreetype.6.dylib target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/MacOS/gopher64 - codesign -f --entitlements data/entitlements.plist --timestamp --options runtime -s - target/${{ matrix.target }}/release/bundle/osx/Gopher64.app + install_name_tool -change /opt/homebrew/opt/libpng/lib/libpng16.16.dylib \ + @executable_path/../Frameworks/libpng16.16.dylib target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/Frameworks/libfreetype.6.dylib + codesign -f --entitlements data/entitlements.plist --deep --timestamp --options runtime -s - target/${{ matrix.target }}/release/bundle/osx/Gopher64.app env: NETPLAY_ID: ${{ secrets.NETPLAY_ID }} MACOSX_DEPLOYMENT_TARGET: "26.0" diff --git a/Cargo.toml b/Cargo.toml index 38a275e..8c29775 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -58,4 +58,4 @@ name = "Gopher64" identifier = "io.github.gopher64.gopher64" category = "public.app-category.games" icon = ["data/icon/gopher64_128x128.png","data/icon/gopher64_256x256.png","data/icon/gopher64_512x512.png"] -osx_frameworks = ["/opt/homebrew/opt/molten-vk/lib/libMoltenVK.dylib","/opt/homebrew/opt/freetype/lib/libfreetype.6.dylib"] +osx_frameworks = ["/opt/homebrew/opt/molten-vk/lib/libMoltenVK.dylib","/opt/homebrew/opt/freetype/lib/libfreetype.6.dylib","/opt/homebrew/opt/libpng/lib/libpng16.16.dylib"] From e72ddf73f0e9849d3c46796cb29d0ebacf393826 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 3 Apr 2026 08:00:00 -0600 Subject: [PATCH 0725/1117] use 4 worker threads (#707) --- src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index b4ab2ec..3d9a860 100644 --- a/src/main.rs +++ b/src/main.rs @@ -84,7 +84,7 @@ struct Args { load_state: Option, } -#[tokio::main] +#[tokio::main(worker_threads = 4)] async fn main() -> std::io::Result<()> { let dirs = ui::get_dirs(); From d378ae187a7ed553b71f0074e9940593174f7243 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 3 Apr 2026 08:32:40 -0600 Subject: [PATCH 0726/1117] write savestate in thread (#708) --- src/savestates.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/savestates.rs b/src/savestates.rs index 41fde77..b49e85c 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -81,12 +81,11 @@ pub fn create_savestate(device: &device::Device) { ), (&rdp_state, "rdp_state"), ]; + let save_path = device.ui.storage.paths.savestate_file_path.clone(); let compressed_file = ui::storage::compress_file(data); - std::fs::write( - device.ui.storage.paths.savestate_file_path.clone(), - compressed_file, - ) - .unwrap(); + tokio::spawn(async move { + tokio::fs::write(save_path, compressed_file).await.unwrap(); + }); ui::video::onscreen_message( &device.ui, &format!( From 5207bd4b27b450fa932d2f5af3b493da332ea493 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 4 Apr 2026 01:27:45 -0600 Subject: [PATCH 0727/1117] remove governor crate (#709) * remove governor crate * more --- Cargo.lock | 128 ----------------------------------------------- Cargo.toml | 1 - src/device.rs | 2 +- src/device/vi.rs | 57 ++++++++++++--------- 4 files changed, 34 insertions(+), 154 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a3ac2fc..26bb841 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1148,20 +1148,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" -[[package]] -name = "dashmap" -version = "6.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" -dependencies = [ - "cfg-if", - "crossbeam-utils", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", -] - [[package]] name = "data-encoding" version = "2.10.0" @@ -1793,12 +1779,6 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" -[[package]] -name = "futures-timer" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" - [[package]] name = "futures-util" version = "0.3.32" @@ -2027,7 +2007,6 @@ dependencies = [ "encoding_rs", "fatfs", "futures", - "governor", "mimalloc", "open", "postcard", @@ -2053,29 +2032,6 @@ dependencies = [ "zip", ] -[[package]] -name = "governor" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9efcab3c1958580ff1f25a2a41be1668f7603d849bb63af523b208a3cc1223b8" -dependencies = [ - "cfg-if", - "dashmap", - "futures-sink", - "futures-timer", - "futures-util", - "getrandom 0.3.4", - "hashbrown 0.16.1", - "nonzero_ext", - "parking_lot", - "portable-atomic", - "quanta", - "rand 0.9.2", - "smallvec", - "spinning_top", - "web-time", -] - [[package]] name = "h2" version = "0.4.13" @@ -3388,12 +3344,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "nonzero_ext" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" - [[package]] name = "noop_proc_macro" version = "0.3.0" @@ -3928,29 +3878,6 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" -[[package]] -name = "parking_lot" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.5.18", - "smallvec", - "windows-link", -] - [[package]] name = "parley" version = "0.7.0" @@ -4245,21 +4172,6 @@ dependencies = [ "bytemuck", ] -[[package]] -name = "quanta" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3ab5a9d756f0d97bdc89019bd2e4ea098cf9cde50ee7564dde6b81ccc8f06c7" -dependencies = [ - "crossbeam-utils", - "libc", - "once_cell", - "raw-cpuid", - "wasi", - "web-sys", - "winapi", -] - [[package]] name = "quick-error" version = "2.0.1" @@ -4448,15 +4360,6 @@ dependencies = [ "rgb", ] -[[package]] -name = "raw-cpuid" -version = "11.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" -dependencies = [ - "bitflags 2.11.0", -] - [[package]] name = "raw-window-handle" version = "0.6.2" @@ -5460,15 +5363,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "spinning_top" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96d2d1d716fb500937168cc09353ffdc7a012be8475ac7308e1bdf0e3923300" -dependencies = [ - "lock_api", -] - [[package]] name = "stable_deref_trait" version = "1.2.1" @@ -6571,22 +6465,6 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - [[package]] name = "winapi-util" version = "0.1.11" @@ -6596,12 +6474,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - [[package]] name = "windows" version = "0.58.0" diff --git a/Cargo.toml b/Cargo.toml index 8c29775..3a1fa3c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,6 @@ rust-version = "1.94.1" [dependencies] dirs = "6.0" zip = "8.0" -governor = "0.10" sevenz-rust2 = "0.20" chrono = "0.4" serde = { version = "1.0", features = ["derive"] } diff --git a/src/device.rs b/src/device.rs index 4c1462a..f784851 100644 --- a/src/device.rs +++ b/src/device.rs @@ -474,7 +474,7 @@ impl Device { delay: 0, count_per_scanline: 0, enable_speed_limiter: true, - limiter: None, + next_pace_deadline: None, vi_counter: 0, last_origin: 0, internal_frame_counter: 0, diff --git a/src/device/vi.rs b/src/device/vi.rs index bcb939c..5020e91 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -1,5 +1,4 @@ use crate::{cheats, device, netplay, ui}; -use governor::clock::Clock; const VI_STATUS_REG: u32 = 0; const VI_ORIGIN_REG: u32 = 1; @@ -24,7 +23,7 @@ pub struct Vi { pub delay: u64, pub field: u32, #[serde(skip)] - pub limiter: Option, + pub next_pace_deadline: Option, pub count_per_scanline: u64, pub enable_speed_limiter: bool, pub vi_counter: u64, @@ -50,17 +49,11 @@ pub fn set_expected_refresh_rate(device: &mut device::Device) { device.vi.count_per_scanline = device.vi.delay / (device.vi.regs[VI_V_SYNC_REG as usize] + 1) as u64; - create_limiter(device); + reset_pace_deadline(device); } -fn create_limiter(device: &mut device::Device) { - let quota = governor::Quota::with_period(std::time::Duration::from_secs_f64( - device.vi.frame_time * device.vi.limit_freq as f64, - )) - .unwrap(); - device.vi.limiter = Some(governor::RateLimiter::direct(quota)); - let _ = device.vi.limiter.as_ref().unwrap().check(); - //println!("new limit freq: {}", device.vi.limit_freq); +fn reset_pace_deadline(device: &mut device::Device) { + device.vi.next_pace_deadline = None; } fn set_vertical_interrupt(device: &mut device::Device) { @@ -188,18 +181,34 @@ pub fn init(device: &mut device::Device) { } } -fn speed_limiter(device: &mut device::Device, speed_limiter_toggled: bool) { - let limiter = device.vi.limiter.as_ref().unwrap(); - if let Err(outcome) = limiter.check() { - let dur = outcome.wait_time_from(limiter.clock().now()); - spin_sleep::sleep(dur); - if dur < device.vi.min_wait_time { - device.vi.min_wait_time = dur; - } +fn speed_limiter(device: &mut device::Device, mut speed_limiter_toggled: bool) { + let interval = + std::time::Duration::from_secs_f64(device.vi.frame_time * device.vi.limit_freq as f64); - let _ = limiter.check(); - } else { - device.vi.min_wait_time = std::time::Duration::from_secs(0); + let now = std::time::Instant::now(); + match device.vi.next_pace_deadline { + None => { + device.vi.next_pace_deadline = Some(now + interval); + speed_limiter_toggled = true; + } + Some(deadline) => { + if now < deadline { + let dur = deadline - now; + spin_sleep::sleep(dur); + if dur < device.vi.min_wait_time { + device.vi.min_wait_time = dur; + } + } else { + //println!("did not sleep"); + device.vi.min_wait_time = std::time::Duration::from_secs(0); + } + let mut next = deadline + interval; + let t = std::time::Instant::now(); + while next <= t { + next += interval; + } + device.vi.next_pace_deadline = Some(next); + } } if std::time::Instant::now().duration_since(device.vi.limit_freq_check) @@ -210,13 +219,13 @@ fn speed_limiter(device: &mut device::Device, speed_limiter_toggled: bool) { && device.vi.limit_freq < MAX_LIMIT_FREQ { device.vi.limit_freq += 1; - create_limiter(device); + reset_pace_deadline(device); } else if device.vi.min_wait_time > std::time::Duration::from_secs_f64(device.vi.frame_time) && device.vi.limit_freq > 1 { device.vi.limit_freq -= 1; - create_limiter(device); + reset_pace_deadline(device); } } From e932239a639c2ac21aafa09d6266bd5ef59c902c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 7 Apr 2026 00:59:03 -0600 Subject: [PATCH 0728/1117] RetroAchievements (#710) * retroachievements * add rc_api_info * disable hardcore * clear password after login attempt * proper check for hardcore * more set_hardcore * change checkbox * add more stubs * add more UI * add button for RA website * cleanup http callback --- .gitmodules | 3 + build.rs | 66 +++++ retroachievements/rcheevos | 1 + retroachievements/retroachievements.c | 284 ++++++++++++++++++++++ retroachievements/retroachievements.h | 23 ++ src/device.rs | 17 +- src/device/cart/rom.rs | 4 +- src/device/rdram.rs | 3 + src/device/vi.rs | 6 +- src/main.rs | 39 +++ src/retroachievements.rs | 304 ++++++++++++++++++++++++ src/savestates.rs | 9 +- src/ui/gui.rs | 15 ++ src/ui/gui/appwindow.slint | 28 ++- src/ui/gui/pages.slint | 1 + src/ui/gui/retroachievements_page.slint | 105 ++++++++ src/ui/netplay.rs | 6 +- src/ui/video.rs | 7 +- 18 files changed, 902 insertions(+), 19 deletions(-) create mode 160000 retroachievements/rcheevos create mode 100644 retroachievements/retroachievements.c create mode 100644 retroachievements/retroachievements.h create mode 100644 src/retroachievements.rs create mode 100644 src/ui/gui/retroachievements_page.slint diff --git a/.gitmodules b/.gitmodules index 1abe78c..69845f2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -6,3 +6,6 @@ path = src/compat/sse2neon url = https://github.com/DLTcollab/sse2neon.git branch = master +[submodule "retroachievements/rcheevos"] + path = retroachievements/rcheevos + url = https://github.com/RetroAchievements/rcheevos.git diff --git a/build.rs b/build.rs index 1b108c0..0fb2831 100644 --- a/build.rs +++ b/build.rs @@ -1,5 +1,6 @@ fn main() { println!("cargo::rerun-if-changed=parallel-rdp"); + println!("cargo::rerun-if-changed=retroachievements"); println!("cargo::rerun-if-changed=src/compat"); let slint_config = slint_build::CompilerConfiguration::new().with_style("cosmic".into()); @@ -69,6 +70,41 @@ fn main() { .join("include"), ); + let mut retroachievements_build = cc::Build::new(); + retroachievements_build + .flag("-Wno-unused-parameter") + .include("retroachievements/rcheevos/include") + .flag("-DRC_CLIENT_SUPPORTS_HASH") + .file("retroachievements/rcheevos/src/rc_client.c") + .file("retroachievements/rcheevos/src/rc_compat.c") + .file("retroachievements/rcheevos/src/rc_util.c") + .file("retroachievements/rcheevos/src/rcheevos/alloc.c") + .file("retroachievements/rcheevos/src/rcheevos/condition.c") + .file("retroachievements/rcheevos/src/rcheevos/condset.c") + .file("retroachievements/rcheevos/src/rcheevos/consoleinfo.c") + .file("retroachievements/rcheevos/src/rcheevos/format.c") + .file("retroachievements/rcheevos/src/rcheevos/lboard.c") + .file("retroachievements/rcheevos/src/rcheevos/memref.c") + .file("retroachievements/rcheevos/src/rcheevos/operand.c") + .file("retroachievements/rcheevos/src/rcheevos/richpresence.c") + .file("retroachievements/rcheevos/src/rcheevos/runtime.c") + .file("retroachievements/rcheevos/src/rcheevos/runtime_progress.c") + .file("retroachievements/rcheevos/src/rcheevos/trigger.c") + .file("retroachievements/rcheevos/src/rcheevos/value.c") + .file("retroachievements/rcheevos/src/rapi/rc_api_common.c") + .file("retroachievements/rcheevos/src/rapi/rc_api_info.c") + .file("retroachievements/rcheevos/src/rapi/rc_api_runtime.c") + .file("retroachievements/rcheevos/src/rapi/rc_api_user.c") + .file("retroachievements/rcheevos/src/rhash/aes.c") + .file("retroachievements/rcheevos/src/rhash/cdreader.c") + .file("retroachievements/rcheevos/src/rhash/md5.c") + .file("retroachievements/rcheevos/src/rhash/hash.c") + .file("retroachievements/rcheevos/src/rhash/hash_disc.c") + .file("retroachievements/rcheevos/src/rhash/hash_encrypted.c") + .file("retroachievements/rcheevos/src/rhash/hash_rom.c") + .file("retroachievements/rcheevos/src/rhash/hash_zip.c") + .file("retroachievements/retroachievements.c"); + let os = std::env::var("CARGO_CFG_TARGET_OS").unwrap(); let arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap(); let opt_flag = if arch == "x86_64" { @@ -84,6 +120,7 @@ fn main() { volk_build.flag(opt_flag); rdp_build.flag(opt_flag); simd_build.flag(opt_flag); + retroachievements_build.flag(opt_flag); if os == "windows" { volk_build.flag("-DVK_USE_PLATFORM_WIN32_KHR"); @@ -111,12 +148,41 @@ fn main() { volk_build.flag("-flto=thin"); rdp_build.flag("-flto=thin"); simd_build.flag("-flto=thin"); + retroachievements_build.flag("-flto=thin"); volk_build.compile("volk"); rdp_build.compile("parallel-rdp"); + retroachievements_build.compile("retroachievements"); let out_path = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap()); + let retroachievements_bindings = bindgen::Builder::default() + .header("retroachievements/retroachievements.h") + .allowlist_function("ra_init_client") + .allowlist_function("ra_shutdown_client") + .allowlist_function("ra_get_hardcore") + .allowlist_function("ra_load_game") + .allowlist_function("ra_set_dmem") + .allowlist_function("ra_do_frame") + .allowlist_function("ra_do_idle") + .allowlist_function("ra_http_callback") + .allowlist_function("ra_logout_user") + .allowlist_function("ra_login_user") + .allowlist_function("ra_login_token_user") + .allowlist_function("ra_is_user_logged_in") + .allowlist_function("ra_get_username") + .allowlist_function("ra_get_token") + .allowlist_function("ra_state_size") + .allowlist_function("ra_save_state") + .allowlist_function("ra_load_state") + .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) + .generate() + .expect("Unable to generate bindings"); + + retroachievements_bindings + .write_to_file(out_path.join("retroachievements_bindings.rs")) + .expect("Couldn't write bindings!"); + let parallel_bindings = bindgen::Builder::default() .header("parallel-rdp/interface.hpp") .allowlist_function("rdp_init") diff --git a/retroachievements/rcheevos b/retroachievements/rcheevos new file mode 160000 index 0000000..e9ca369 --- /dev/null +++ b/retroachievements/rcheevos @@ -0,0 +1 @@ +Subproject commit e9ca3694c862b61235595176dac4b22677848c93 diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c new file mode 100644 index 0000000..a272f6e --- /dev/null +++ b/retroachievements/retroachievements.c @@ -0,0 +1,284 @@ +#include "retroachievements.h" +#include "../parallel-rdp/interface.hpp" +#include +#include +#include +#include +#include + +void rust_server_call(const char *url, const char *post_data, + rc_client_server_callback_t callback, + void *callback_data); +void store_retroachievements_credentials(const char *username, + const char *token, void *userdata); + +rc_client_t *g_client = NULL; +uint8_t *g_dmem = NULL; +size_t g_dmem_size = 0; +bool g_game_loaded = false; +bool g_user_logged_in = false; +const char *g_username = NULL; +const char *g_token = NULL; + +static uint32_t read_memory(uint32_t address, uint8_t *buffer, + uint32_t num_bytes, rc_client_t *client) { + if (address + num_bytes >= g_dmem_size) + return 0; + memcpy(buffer, &g_dmem[address], num_bytes); + return num_bytes; +} + +static void server_call(const rc_api_request_t *request, + rc_client_server_callback_t callback, + void *callback_data, rc_client_t *client) { + rust_server_call(request->url, request->post_data, callback, callback_data); +} + +void ra_http_callback(const char *content, size_t content_size, int status_code, + void *callback, void *callback_data) { + // Prepare a data object to pass the HTTP response to the callback + rc_api_server_response_t server_response; + memset(&server_response, 0, sizeof(server_response)); + server_response.body = content; + server_response.body_length = content_size; + server_response.http_status_code = status_code; + + // handle non-http errors (socket timeout, no internet available, etc) + if (status_code == 0) { + // Let rc_client know the error was not catastrophic and could be retried. + // It may decide to retry or just immediately pass the error to the + // callback. To prevent possible retries, use + // RC_API_SERVER_RESPONSE_CLIENT_ERROR. + server_response.http_status_code = + RC_API_SERVER_RESPONSE_RETRYABLE_CLIENT_ERROR; + } + + ((rc_client_server_callback_t)callback)(&server_response, callback_data); +} + +static void log_message(const char *message, const rc_client_t *client) { + printf("RetroAchievements: %s\n", message); +} + +static void login_callback(int result, const char *error_message, + rc_client_t *client, void *userdata) { + // If not successful, just report the error and bail. + if (result != RC_OK) { + printf("RetroAchievements: Login failed: %s\n", error_message); + store_retroachievements_credentials(NULL, NULL, userdata); + return; + } + + // Login was successful. Capture the token for future logins so we don't have + // to store the password anywhere. + const rc_client_user_t *user = rc_client_get_user_info(client); + store_retroachievements_credentials(user->username, user->token, userdata); + + g_username = user->username; + g_token = user->token; + g_user_logged_in = true; +} + +bool ra_is_user_logged_in() { return g_user_logged_in; } + +const char *ra_get_username() { return g_username; } +const char *ra_get_token() { return g_token; } + +void ra_logout_user() { + g_user_logged_in = false; + rc_client_logout(g_client); +} + +void ra_login_user(const char *username, const char *password, void *userdata) { + // This will generate an HTTP payload and call the server_call chain above. + // Eventually, login_callback will be called to let us know if the login was + // successful. + g_user_logged_in = false; + rc_client_begin_login_with_password(g_client, username, password, + login_callback, userdata); +} + +void ra_login_token_user(const char *username, const char *token, + void *userdata) { + // This is exactly the same functionality as + // rc_client_begin_login_with_password, but uses the token captured from the + // first login instead of a password. Note that it uses the same callback. + g_user_logged_in = false; + rc_client_begin_login_with_token(g_client, username, token, login_callback, + userdata); +} + +static void load_game_callback(int result, const char *error_message, + rc_client_t *client, void *userdata) { + if (result != RC_OK) { + printf("RetroAchievements: game load failed: %s\n", error_message); + return; + } + char buffer[512]; + const rc_client_game_t *game = rc_client_get_game_info(client); + rc_client_user_game_summary_t summary; + rc_client_get_user_game_summary(client, &summary); + + snprintf(buffer, sizeof(buffer), "RA Loaded: %s", game->title); + rdp_onscreen_message(buffer); + + int hardcore_enabled = rc_client_get_hardcore_enabled(client); + snprintf(buffer, sizeof(buffer), "RA mode: %s", + hardcore_enabled ? "Hardcore" : "Softcore"); + rdp_onscreen_message(buffer); + + snprintf(buffer, sizeof(buffer), "%u/%u achievements unlocked", + summary.num_unlocked_achievements, summary.num_core_achievements); + rdp_onscreen_message(buffer); + g_game_loaded = true; +} + +void ra_load_game(const uint8_t *rom, size_t rom_size) { + if (!g_user_logged_in) + return; + + rc_client_begin_identify_and_load_game(g_client, RC_CONSOLE_NINTENDO_64, NULL, + rom, rom_size, load_game_callback, + NULL); +} + +void ra_set_dmem(uint8_t *dmem, size_t dmem_size) { + g_dmem = dmem; + g_dmem_size = dmem_size; +} + +static void achievement_triggered(const rc_client_achievement_t *achievement) { + char buffer[512]; + + snprintf(buffer, sizeof(buffer), "RA unlocked: %s", achievement->title); + rdp_onscreen_message(buffer); +} + +static void game_completed(rc_client_t *client) { + char buffer[512]; + const rc_client_game_t *game = rc_client_get_game_info(client); + + snprintf(buffer, sizeof(buffer), "RA %s: %s", + rc_client_get_hardcore_enabled(client) ? "mastered" : "completed", + game->title); + rdp_onscreen_message(buffer); +} + +static void subset_completed(const rc_client_subset_t *subset, + rc_client_t *client) { + char buffer[512]; + + snprintf(buffer, sizeof(buffer), "RA subset %s: %s", + rc_client_get_hardcore_enabled(client) ? "mastered" : "completed", + subset->title); + rdp_onscreen_message(buffer); +} + +static void event_handler(const rc_client_event_t *event, rc_client_t *client) { + switch (event->type) { + case RC_CLIENT_EVENT_ACHIEVEMENT_TRIGGERED: + achievement_triggered(event->achievement); + break; + case RC_CLIENT_EVENT_LEADERBOARD_STARTED: + break; + case RC_CLIENT_EVENT_LEADERBOARD_FAILED: + break; + case RC_CLIENT_EVENT_LEADERBOARD_SUBMITTED: + break; + case RC_CLIENT_EVENT_ACHIEVEMENT_CHALLENGE_INDICATOR_SHOW: + break; + case RC_CLIENT_EVENT_ACHIEVEMENT_CHALLENGE_INDICATOR_HIDE: + break; + case RC_CLIENT_EVENT_ACHIEVEMENT_PROGRESS_INDICATOR_SHOW: + break; + case RC_CLIENT_EVENT_ACHIEVEMENT_PROGRESS_INDICATOR_HIDE: + break; + case RC_CLIENT_EVENT_ACHIEVEMENT_PROGRESS_INDICATOR_UPDATE: + break; + case RC_CLIENT_EVENT_LEADERBOARD_TRACKER_SHOW: + break; + case RC_CLIENT_EVENT_LEADERBOARD_TRACKER_HIDE: + break; + case RC_CLIENT_EVENT_LEADERBOARD_TRACKER_UPDATE: + break; + case RC_CLIENT_EVENT_LEADERBOARD_SCOREBOARD: + break; + case RC_CLIENT_EVENT_GAME_COMPLETED: + game_completed(client); + break; + case RC_CLIENT_EVENT_SUBSET_COMPLETED: + subset_completed(event->subset, client); + break; + default: + printf("RetroAchievements: Unhandled event %d\n", event->type); + break; + } +} + +void ra_init_client(bool hardcore) { + // Create the client instance (using a global variable simplifies this + // example) + g_client = rc_client_create(read_memory, server_call); + g_game_loaded = false; + g_user_logged_in = false; + g_dmem = NULL; + g_dmem_size = 0; + + // Provide a logging function to simplify debugging + rc_client_enable_logging(g_client, RC_CLIENT_LOG_LEVEL_WARN, log_message); + + rc_client_set_event_handler(g_client, event_handler); + + rc_client_set_hardcore_enabled(g_client, hardcore); +} + +bool ra_get_hardcore() { + if (!g_user_logged_in) + return false; + return rc_client_get_hardcore_enabled(g_client); +} + +void ra_shutdown_client() { + if (g_client) { + // Release resources associated to the client instance + rc_client_destroy(g_client); + g_client = NULL; + } +} + +void ra_do_frame() { + if (!g_game_loaded) + return; + + rc_client_do_frame(g_client); +} + +void ra_do_idle() { + if (!g_game_loaded) + return; + + rc_client_idle(g_client); +} + +size_t ra_state_size() { + if (!g_game_loaded) + return 0; + + return rc_client_progress_size(g_client); +} + +void ra_save_state(uint8_t *state) { + if (!g_game_loaded) + return; + if (rc_client_serialize_progress(g_client, state) != RC_OK) { + printf("RetroAchievements: Failed to serialize progress\n"); + } +} + +void ra_load_state(const uint8_t *state) { + if (!g_game_loaded) + return; + if (rc_client_deserialize_progress(g_client, state) != RC_OK) { + printf("RetroAchievements: Failed to deserialize progress\n"); + } +} diff --git a/retroachievements/retroachievements.h b/retroachievements/retroachievements.h new file mode 100644 index 0000000..833425d --- /dev/null +++ b/retroachievements/retroachievements.h @@ -0,0 +1,23 @@ +#include +#include +#include + +void ra_init_client(bool hardcore); +void ra_shutdown_client(); +bool ra_get_hardcore(); +void ra_load_game(const uint8_t *rom, size_t rom_size); +void ra_set_dmem(uint8_t *dmem, size_t dmem_size); +void ra_do_frame(); +void ra_do_idle(); +void ra_http_callback(const char *content, size_t content_size, int status_code, + void *callback, void *callback_data); +void ra_logout_user(); +void ra_login_user(const char *username, const char *password, void *userdata); +void ra_login_token_user(const char *username, const char *token, + void *userdata); +bool ra_is_user_logged_in(); +const char *ra_get_username(); +const char *ra_get_token(); +size_t ra_state_size(); +void ra_save_state(uint8_t *state); +void ra_load_state(const uint8_t *state); diff --git a/src/device.rs b/src/device.rs index f784851..129d5bd 100644 --- a/src/device.rs +++ b/src/device.rs @@ -12,7 +12,7 @@ use std::arch::x86_64::*; use rand::{Rng, SeedableRng}; -use crate::{cheats, netplay, ui}; +use crate::{cheats, netplay, retroachievements, ui}; use std::{collections::HashMap, fs, io::Read}; pub mod ai; @@ -49,22 +49,27 @@ pub fn run_game(device: &mut Device, rom_contents: Vec, game_settings: ui::g if game_settings.disable_expansion_pak { device.rdram.size = 0x400000; } - if let Some(slot) = game_settings.load_savestate_slot { + if let Some(slot) = game_settings.load_savestate_slot + && !retroachievements::get_hardcore() + { device.ui.storage.save_state_slot = slot; device.load_state = true; } init_rng(device); - cart::rom::init(device, rom_contents); // cart needs to come before rdram + cart::rom::init(device, &rom_contents); // cart needs to come before rdram - // rdram pointer is shared with parallel-rdp + // rdram pointer is shared with parallel-rdp and retroachievements rdram::init(device); ui::video::init(device); ui::audio::init(&mut device.ui, device.ai.freq); ui::input::init(&mut device.ui); + // shows messages, needs to be after video init + retroachievements::load_game(&rom_contents, rom_contents.len()); + mi::init(device); pif::init(device); if device.ui.config.input.emulate_vru && device.netplay.is_none() { @@ -80,7 +85,9 @@ pub fn run_game(device: &mut Device, rom_contents: Vec, game_settings: ui::g ui::storage::init(&mut device.ui, &device.cart.rom); ui::storage::load_saves(&mut device.ui, &mut device.netplay); - cheats::init(device, game_settings.cheats); + if !retroachievements::get_hardcore() { + cheats::init(device, game_settings.cheats); + } cpu::run(device); diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 9c82433..375fddf 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -133,7 +133,7 @@ pub fn dma_write( device::pi::calculate_cycles(device, 1, length) } -pub fn init(device: &mut device::Device, rom_file: Vec) { +pub fn init(device: &mut device::Device, rom_file: &[u8]) { let now: chrono::DateTime = chrono::Local::now(); device.cart.rtc_timestamp = now.naive_local().and_utc().timestamp(); if let Some(netplay) = &mut device.netplay { @@ -146,7 +146,7 @@ pub fn init(device: &mut device::Device, rom_file: Vec) { device.cart.sc64.cfg[device::cart::sc64::SC64_BOOTLOADER_SWITCH as usize] = 1; - device.cart.rom = rom_file; + device.cart.rom = rom_file.to_vec(); device.cart.pal = is_system_pal(device.cart.rom[0x3E]); set_cic(device); diff --git a/src/device/rdram.rs b/src/device/rdram.rs index 2c2ee09..a66ab3b 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -1,4 +1,5 @@ use crate::device; +use crate::retroachievements; use crate::ui; use std::alloc::{Layout, alloc_zeroed}; @@ -151,6 +152,8 @@ pub fn init(device: &mut device::Device) { device.rdram.mem = unsafe { Vec::from_raw_parts(ptr, device.rdram.size as usize, device.rdram.size as usize) }; + retroachievements::set_dmem(device.rdram.mem.as_mut_ptr(), device.rdram.size as usize); + // hack, skip RDRAM initialization device .rdram diff --git a/src/device/vi.rs b/src/device/vi.rs index 5020e91..95f596b 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -1,4 +1,4 @@ -use crate::{cheats, device, netplay, ui}; +use crate::{cheats, device, netplay, retroachievements, ui}; const VI_STATUS_REG: u32 = 0; const VI_ORIGIN_REG: u32 = 1; @@ -128,6 +128,8 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { cheats::execute_cheats(device, device.cheats.cheats.clone()); } + retroachievements::do_frame(); + ui::video::render_frame(); let (mut speed_limiter_toggled, paused) = ui::video::check_callback(device); @@ -147,7 +149,7 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { ui::video::update_screen(); device.vi.vi_counter += 1; - if device.netplay.is_none() && paused { + if device.netplay.is_none() && !retroachievements::get_hardcore() && paused { ui::video::pause_loop(device.vi.frame_time); } diff --git a/src/main.rs b/src/main.rs index 3d9a860..abc8c1d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,6 +6,7 @@ static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; mod cheats; mod device; mod netplay; +mod retroachievements; mod savestates; mod ui; use clap::Parser; @@ -82,6 +83,29 @@ struct Args { help = "Load savestate from slot 0-9 when starting the game" )] load_state: Option, + #[arg( + long = "ra-username", + value_name = "USERNAME", + help = "Username for RetroAchievements" + )] + ra_username: Option, + #[arg( + long = "ra-token", + value_name = "TOKEN", + help = "Token for RetroAchievements" + )] + ra_token: Option, + #[arg( + long = "ra-password", + value_name = "PASSWORD", + help = "Password for RetroAchievements" + )] + ra_password: Option, + #[arg( + long = "ra-hardcore", + help = "Enable Hardcore mode for RetroAchievements" + )] + ra_hardcore: bool, } #[tokio::main(worker_threads = 4)] @@ -134,6 +158,7 @@ async fn main() -> std::io::Result<()> { .unwrap_or_default() }; + retroachievements::init_client(false); //args.ra_hardcore let mut shutdown_tx = None; if let Some(peer_addr) = args.netplay_peer_addr @@ -157,6 +182,17 @@ async fn main() -> std::io::Result<()> { if device.ui.config.emulation.usb { (shutdown_tx, device.ui.usb) = ui::usb::init(); } + + if let Some(username) = args.ra_username { + let (tx, rx) = tokio::sync::oneshot::channel::(); + if let Some(password) = args.ra_password { + retroachievements::login_user(username, password, tx); + } else if let Some(token) = args.ra_token { + retroachievements::login_token_user(username, token, tx); + } + + rx.await.unwrap(); + } } device::run_game( @@ -169,6 +205,7 @@ async fn main() -> std::io::Result<()> { load_savestate_slot: args.load_state, }, ); + retroachievements::shutdown_client(); if device.netplay.is_some() { netplay::close(&mut device); @@ -217,7 +254,9 @@ async fn main() -> std::io::Result<()> { ui::input::bind_input_profile(&mut ui, profile, port); } } else { + retroachievements::init_client(false); gui::app_window(); + retroachievements::shutdown_client(); } Ok(()) diff --git a/src/retroachievements.rs b/src/retroachievements.rs new file mode 100644 index 0000000..e0a4043 --- /dev/null +++ b/src/retroachievements.rs @@ -0,0 +1,304 @@ +include!(concat!(env!("OUT_DIR"), "/retroachievements_bindings.rs")); + +use crate::ui; +use slint::ComponentHandle; + +#[derive(serde::Serialize, serde::Deserialize)] +pub struct RAConfig { + pub username: String, + pub token: String, + pub enabled: bool, + pub hardcore: bool, +} + +#[unsafe(no_mangle)] +pub extern "C" fn store_retroachievements_credentials( + c_username: *const std::ffi::c_char, + c_token: *const std::ffi::c_char, + ctx: *mut std::ffi::c_void, +) { + let tx = unsafe { Box::from_raw(ctx as *mut tokio::sync::oneshot::Sender) }; + + if c_username.is_null() || c_token.is_null() { + tx.send(false).unwrap(); + return; + } + + let file_path = ui::get_dirs().config_dir.join("retroachievements.json"); + let raconfig = if let Ok(ra_config) = std::fs::read(&file_path) + && let Ok(result) = serde_json::from_slice::(ra_config.as_ref()) + { + RAConfig { + username: unsafe { std::ffi::CStr::from_ptr(c_username).to_str().unwrap() }.to_string(), + token: unsafe { std::ffi::CStr::from_ptr(c_token).to_str().unwrap() }.to_string(), + enabled: result.enabled, + hardcore: result.hardcore, + } + } else { + RAConfig { + username: unsafe { std::ffi::CStr::from_ptr(c_username).to_str().unwrap() }.to_string(), + token: unsafe { std::ffi::CStr::from_ptr(c_token).to_str().unwrap() }.to_string(), + enabled: false, + hardcore: false, + } + }; + let f = std::fs::File::create(&file_path).unwrap(); + serde_json::to_writer_pretty(f, &raconfig).unwrap(); + + tx.send(true).unwrap(); +} + +#[unsafe(no_mangle)] +pub extern "C" fn rust_server_call( + c_url: *const std::ffi::c_char, + c_post_data: *const std::ffi::c_char, + c_callback: *mut std::ffi::c_void, + c_callback_data: *mut std::ffi::c_void, +) { + let url = unsafe { std::ffi::CStr::from_ptr(c_url).to_str().unwrap() }; + let client = reqwest::Client::builder() + .user_agent(format!( + "{}/{}", + env!("CARGO_PKG_NAME"), + env!("CARGO_PKG_VERSION") + )) + .build() + .unwrap(); + let task = if !c_post_data.is_null() { + let post_data = unsafe { std::ffi::CStr::from_ptr(c_post_data).to_str().unwrap() }; + let query_string = + reqwest::Url::parse(&format!("http://nothing.com?{}", post_data)).unwrap(); + client + .post(url) + .query( + &query_string + .query_pairs() + .into_owned() + .collect::>(), + ) + .send() + } else { + client.get(url).send() + }; + let callback = c_callback.addr(); + let callback_data = c_callback_data.addr(); + tokio::spawn(async move { + let response = task.await; + match response { + Ok(response) => { + let status = response.status().as_u16() as i32; + match response.text().await { + Ok(text) => { + let c_text = std::ffi::CString::new(text).unwrap(); + unsafe { + ra_http_callback( + c_text.as_ptr(), + c_text.count_bytes(), + status, + callback as *mut std::ffi::c_void, + callback_data as *mut std::ffi::c_void, + ) + }; + } + Err(error) => { + let c_error = std::ffi::CString::new(error.to_string()).unwrap(); + unsafe { + ra_http_callback( + c_error.as_ptr(), + c_error.count_bytes(), + status, + callback as *mut std::ffi::c_void, + callback_data as *mut std::ffi::c_void, + ) + }; + } + } + } + Err(error) => { + let c_error = std::ffi::CString::new(error.to_string()).unwrap(); + unsafe { + ra_http_callback( + c_error.as_ptr(), + c_error.count_bytes(), + 0, + callback as *mut std::ffi::c_void, + callback_data as *mut std::ffi::c_void, + ) + }; + } + } + }); +} + +fn set_current_user_message(app: &ui::gui::AppWindow, rx: tokio::sync::oneshot::Receiver) { + app.set_ra_current_user_message("Logging in...".into()); + let weak_app = app.as_weak(); + tokio::spawn(async move { + rx.await.unwrap(); + weak_app + .upgrade_in_event_loop(move |handle| { + if unsafe { ra_is_user_logged_in() } { + handle.set_ra_current_user_message( + format!("Logged in as {}", handle.get_ra_username()).into(), + ); + } else { + handle.set_ra_current_user_message("Login failed".into()); + } + handle.set_ra_logging_in(false); + }) + .unwrap(); + }); +} + +pub fn ra_window(app: &ui::gui::AppWindow) { + let mut token = String::new(); + if let Ok(ra_config) = std::fs::read(ui::get_dirs().config_dir.join("retroachievements.json")) + && let Ok(result) = serde_json::from_slice::(ra_config.as_ref()) + { + app.set_ra_username(result.username.into()); + app.set_ra_enabled(result.enabled); + app.set_ra_hardcore(result.hardcore); + token = result.token; + } else { + app.set_ra_hardcore(true); + } + + if app.get_ra_enabled() && !app.get_ra_username().is_empty() { + let (tx, rx) = tokio::sync::oneshot::channel::(); + login_token_user(app.get_ra_username().to_string(), token, tx); + set_current_user_message(app, rx); + } else { + app.set_ra_current_user_message("Not currently logged in".into()); + } + + let weak_app2 = app.as_weak(); + app.on_ra_button_clicked(move |password| { + weak_app2 + .upgrade_in_event_loop(move |handle| { + let (tx, rx) = tokio::sync::oneshot::channel::(); + login_user( + handle.get_ra_username().to_string(), + password.to_string(), + tx, + ); + + set_current_user_message(&handle, rx); + }) + .unwrap(); + }); + + app.on_ra_toggled(move |enabled, hardcore| { + let file_path = ui::get_dirs().config_dir.join("retroachievements.json"); + let raconfig = if let Ok(ra_config) = std::fs::read(&file_path) + && let Ok(result) = serde_json::from_slice::(ra_config.as_ref()) + { + if !enabled { + unsafe { ra_logout_user() }; + RAConfig { + username: "".into(), + token: "".into(), + enabled, + hardcore, + } + } else { + RAConfig { + username: result.username, + token: result.token, + enabled, + hardcore, + } + } + } else { + RAConfig { + username: "".into(), + token: "".into(), + enabled, + hardcore, + } + }; + let f = std::fs::File::create(&file_path).unwrap(); + serde_json::to_writer_pretty(f, &raconfig).unwrap(); + }); + + app.on_ra_games_clicked(move || { + open::that_detached("https://retroachievements.org/system/2-nintendo-64/games").unwrap(); + }); +} + +pub fn load_game(rom: &[u8], rom_size: usize) { + unsafe { ra_load_game(rom.as_ptr(), rom_size) }; +} + +pub fn set_dmem(dmem: *mut u8, dmem_size: usize) { + unsafe { ra_set_dmem(dmem, dmem_size) }; +} + +pub fn do_frame() { + unsafe { ra_do_frame() }; +} + +pub fn do_idle() { + unsafe { ra_do_idle() }; +} + +pub fn init_client(hardcore: bool) { + unsafe { ra_init_client(hardcore) }; +} + +pub fn shutdown_client() { + unsafe { ra_shutdown_client() }; +} + +pub fn get_hardcore() -> bool { + unsafe { ra_get_hardcore() } +} + +pub fn login_user(username: String, password: String, tx: tokio::sync::oneshot::Sender) { + unsafe { + let tx_ptr = Box::into_raw(Box::new(tx)) as *mut std::ffi::c_void; + ra_login_user( + std::ffi::CString::new(username).unwrap().as_ptr(), + std::ffi::CString::new(password).unwrap().as_ptr(), + tx_ptr, + ) + }; +} + +pub fn login_token_user(username: String, token: String, tx: tokio::sync::oneshot::Sender) { + unsafe { + let tx_ptr = Box::into_raw(Box::new(tx)) as *mut std::ffi::c_void; + ra_login_token_user( + std::ffi::CString::new(username).unwrap().as_ptr(), + std::ffi::CString::new(token).unwrap().as_ptr(), + tx_ptr, + ) + }; +} + +pub fn is_user_logged_in() -> bool { + unsafe { ra_is_user_logged_in() } +} + +pub fn get_username() -> &'static str { + unsafe { + std::ffi::CStr::from_ptr(ra_get_username()) + .to_str() + .unwrap() + } +} + +pub fn get_token() -> &'static str { + unsafe { std::ffi::CStr::from_ptr(ra_get_token()).to_str().unwrap() } +} + +pub fn state_size() -> usize { + unsafe { ra_state_size() } +} + +pub fn save_state(state: *mut u8) { + unsafe { ra_save_state(state) }; +} + +pub fn load_state(state: *const u8) { + unsafe { ra_load_state(state) }; +} diff --git a/src/savestates.rs b/src/savestates.rs index b49e85c..dce97dc 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -1,4 +1,4 @@ -use crate::{cheats, device, ui}; +use crate::{cheats, device, retroachievements, ui}; #[cfg(target_arch = "aarch64")] use device::__m128i; use serde::de::{Deserialize, Deserializer, SeqAccess, Visitor}; @@ -73,6 +73,9 @@ pub fn create_savestate(device: &device::Device) { let mut rdp_state: Vec = vec![0; ui::video::state_size()]; ui::video::save_state(rdp_state.as_mut_ptr()); + let mut ra_state: Vec = vec![0; retroachievements::state_size()]; + retroachievements::save_state(ra_state.as_mut_ptr()); + let data: &[(&[u8], &str)] = &[ (&postcard::to_stdvec(device).unwrap(), "device"), ( @@ -80,6 +83,7 @@ pub fn create_savestate(device: &device::Device) { "saves", ), (&rdp_state, "rdp_state"), + (&ra_state, "ra_state"), ]; let save_path = device.ui.storage.paths.savestate_file_path.clone(); let compressed_file = ui::storage::compress_file(data); @@ -101,6 +105,7 @@ pub fn load_savestate(device: &mut device::Device) { let device_bytes = ui::storage::decompress_file(savestate, "device"); let save_bytes = ui::storage::decompress_file(savestate, "saves"); let rdp_state = ui::storage::decompress_file(savestate, "rdp_state"); + let ra_state = ui::storage::decompress_file(savestate, "ra_state"); if let Ok(state) = postcard::from_bytes::(&device_bytes) { device.ui.storage.saves = postcard::from_bytes(&save_bytes).unwrap(); @@ -198,6 +203,8 @@ pub fn load_savestate(device: &mut device::Device) { ui::audio::init_game_audio(&mut device.ui, device.ai.freq); ui::video::load_state(device, rdp_state.as_ptr()); + retroachievements::load_state(ra_state.as_ptr()); + if device.cheats.enabled { cheats::execute_cheats(device, device.cheats.cheats.clone()); } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index dc66403..ce64db5 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -1,3 +1,4 @@ +use crate::retroachievements; use crate::ui; use slint::Model; @@ -299,6 +300,7 @@ fn about_window(app: &AppWindow) { pub fn app_window() { let app = AppWindow::new().unwrap(); about_window(&app); + retroachievements::ra_window(&app); let mut controller_paths; { let game_ui = ui::Ui::new(); @@ -321,6 +323,7 @@ pub fn run_rom( file_path: std::path::PathBuf, game_settings: GameSettings, netplay: Option, + ra_hardcore: bool, weak: slint::Weak, ) { tokio::spawn(async move { @@ -347,6 +350,16 @@ pub fn run_rom( "--cheats", cheats_path.to_str().unwrap(), ]); + } else if retroachievements::is_user_logged_in() { + command.args([ + "--ra-username", + retroachievements::get_username(), + "--ra-token", + retroachievements::get_token(), + ]); + if ra_hardcore { + command.args(["--ra-hardcore"]); + } } for i in 0..4 { @@ -409,6 +422,7 @@ fn open_rom(app: &AppWindow) { let overclock = app.get_overclock_n64_cpu(); let disable_expansion_pak = app.get_disable_expansion_pak(); + let ra_hardcore = app.get_ra_hardcore(); let weak = app.as_weak(); tokio::spawn(async move { @@ -439,6 +453,7 @@ fn open_rom(app: &AppWindow) { load_savestate_slot: None, }, None, + ra_hardcore, weak, ); } diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index da387b2..000fb43 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -2,9 +2,10 @@ // SPDX-License-Identifier: MIT import { StandardButton } from "std-widgets.slint"; -import { LocalGame, ControllerConfig, Netplay, Cheats, Settings, About } from "pages.slint"; +import { LocalGame, ControllerConfig, Netplay, Cheats, RetroAchievements, Settings, About } from "pages.slint"; import { SideBar } from "side_bar.slint"; import { SettingsData } from "settings_page.slint"; +import { RAData } from "retroachievements_page.slint"; import { AboutData } from "about_page.slint"; import { ControllerData } from "controller_page.slint"; import { State } from "localgame_page.slint"; @@ -34,8 +35,17 @@ export component AppWindow inherits Window { callback cheats_select_rom_clicked(string); callback cheats_clear_clicked; callback cheat_toggled(string, string, string, bool); + callback ra_button_clicked(string); + callback ra_games_clicked; + callback ra_toggled(bool,bool); in property version <=> AboutData.version; in property has_update <=> AboutData.has_update; + in-out property ra_username <=> RAData.ra_username; + in-out property ra_password <=> RAData.ra_password; + in-out property ra_logging_in <=> RAData.ra_logging_in; + in-out property ra_current_user_message <=> RAData.current_user_message; + in-out property ra_enabled <=> RAData.enabled; + in-out property ra_hardcore <=> RAData.hardcore; in-out property integer_scaling <=> SettingsData.integer_scaling; in-out property fullscreen <=> SettingsData.fullscreen; in-out property widescreen <=> SettingsData.widescreen; @@ -71,6 +81,7 @@ export component AppWindow inherits Window { @tr("Menu" => "Controller Config"), @tr("Menu" => "Netplay"), @tr("Menu" => "Cheats"), + @tr("Menu" => "RetroAchievements"), @tr("Menu" => "Settings"), @tr("Menu" => "About") ]; @@ -117,8 +128,19 @@ export component AppWindow inherits Window { cheat_toggled(game_crc,cheat_name,option,enabled); } } - if(side-bar.current-item == 4): Settings { } - if(side-bar.current-item == 5): About { + if(side-bar.current-item == 4): RetroAchievements { + ra_button_clicked(password) => { + ra_button_clicked(password); + } + ra_toggled(enabled,hardcore) => { + ra_toggled(enabled,hardcore); + } + ra_games_clicked => { + ra_games_clicked(); + } + } + if(side-bar.current-item == 5): Settings { } + if(side-bar.current-item == 6): About { wiki_button_clicked => { wiki_button_clicked(); } diff --git a/src/ui/gui/pages.slint b/src/ui/gui/pages.slint index c4fc418..cd337fe 100644 --- a/src/ui/gui/pages.slint +++ b/src/ui/gui/pages.slint @@ -2,5 +2,6 @@ export { LocalGame } from "localgame_page.slint"; export { ControllerConfig } from "controller_page.slint"; export { Netplay } from "netplay_page.slint"; export { Cheats } from "cheat_page.slint"; +export { RetroAchievements } from "retroachievements_page.slint"; export { Settings } from "settings_page.slint"; export { About } from "about_page.slint"; diff --git a/src/ui/gui/retroachievements_page.slint b/src/ui/gui/retroachievements_page.slint new file mode 100644 index 0000000..0bbb413 --- /dev/null +++ b/src/ui/gui/retroachievements_page.slint @@ -0,0 +1,105 @@ +// Copyright © SixtyFPS GmbH +// SPDX-License-Identifier: MIT + +import { LineEdit, CheckBox, Button, HorizontalBox, VerticalBox } from "std-widgets.slint"; +import { Page } from "page.slint"; + +export global RAData { + in-out property enabled; + in-out property hardcore; + in-out property ra_logging_in; + in-out property ra_username; + in-out property ra_password; + in-out property current_user_message; +} + +export component RetroAchievements inherits Page { + callback ra_button_clicked(string); + callback ra_toggled(bool,bool); + callback ra_games_clicked; + title: @tr("RetroAchievements"); + + VerticalBox { + alignment: start; + HorizontalBox { + alignment: center; + CheckBox { + text: @tr("Enabled"); + checked: RAData.enabled; + toggled => { + RAData.enabled = self.checked; + if (!RAData.enabled) { + RAData.ra_username = ""; + username_widget.text = ""; + password_widget.text = ""; + RAData.current_user_message = "Not currently logged in"; + } + ra_toggled(RAData.enabled,RAData.hardcore); + } + } + } + HorizontalBox { + alignment: center; + CheckBox { + text: @tr("Hardcore mode (not currently supported)"); + checked: RAData.hardcore; + enabled: RAData.enabled; + toggled => { + RAData.hardcore = self.checked; + ra_toggled(RAData.enabled,RAData.hardcore); + } + } + } + HorizontalBox { + alignment: center; + Text { + text: RAData.current_user_message; + } + } + HorizontalBox { + alignment: center; + username_widget := LineEdit { + enabled: RAData.enabled; + placeholder-text: @tr("Username"); + text: RAData.ra_username; + edited(text) => { + RAData.ra_username = text; + } + + } + password_widget := LineEdit { + enabled: RAData.enabled; + input-type: password; + placeholder-text: @tr("Password"); + edited(text) => { + RAData.ra_password = text; + } + } + } + HorizontalBox { + alignment: center; + Button { + text: @tr("Login"); + enabled: RAData.enabled && !RAData.ra_logging_in && RAData.ra_username != "" && RAData.ra_password != ""; + clicked => { + RAData.ra_logging_in = true; + ra_button_clicked(RAData.ra_password); + RAData.ra_password = ""; + password_widget.text = ""; + } + } + } + Rectangle { + height: 20px; + } + HorizontalBox { + alignment: center; + Button { + text: @tr("View Supported Games"); + clicked => { + ra_games_clicked(); + } + } + } + } +} diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 83f6c34..fb70519 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -121,10 +121,9 @@ fn populate_server_names(weak: slin .unwrap(); broadcast_sock.set_broadcast(true).unwrap(); let data: [u8; 1] = [1]; - broadcast_sock + let _ = broadcast_sock .send_to(&data, (std::net::Ipv4Addr::BROADCAST, 45000)) - .await - .unwrap(); + .await; let mut buffer = [0; 1024]; if let Ok(Ok(result)) = tokio::time::timeout( std::time::Duration::from_millis(200), @@ -1108,6 +1107,7 @@ fn setup_wait_window( peer_addr: socket_addr, player_number: player_number as u8, }), + false, weak_app, ); }) diff --git a/src/ui/video.rs b/src/ui/video.rs index 1bb6a54..e763e6f 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -1,6 +1,6 @@ #![allow(non_snake_case)] include!(concat!(env!("OUT_DIR"), "/parallel_bindings.rs")); -use crate::{device, ui}; +use crate::{device, retroachievements, ui}; pub fn init(device: &mut device::Device) { ui::sdl_init(sdl3_sys::init::SDL_INIT_VIDEO); @@ -140,6 +140,7 @@ pub fn pause_loop(frame_time: f64) { while paused && !frame_advance { std::thread::sleep(std::time::Duration::from_secs_f64(frame_time)); unsafe { sdl3_sys::events::SDL_PumpEvents() }; + retroachievements::do_idle(); let callback = unsafe { rdp_check_callback() }; paused = callback.paused; frame_advance = callback.frame_advance; @@ -153,7 +154,7 @@ pub fn check_callback(device: &mut device::Device) -> (bool, bool) { if device.netplay.is_none() { if callback.save_state { device.save_state = true; - } else if callback.load_state { + } else if callback.load_state && !retroachievements::get_hardcore() { device.load_state = true; } if callback.reset_game { @@ -175,7 +176,7 @@ pub fn check_callback(device: &mut device::Device) -> (bool, bool) { } if device.ui.storage.save_state_slot != callback.save_state_slot { - ui::video::onscreen_message( + onscreen_message( &device.ui, &format!("Switching savestate slot to {}", callback.save_state_slot,), ); From 11cb242ed202e424cd05b22b3a73a2544c26e81c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 7 Apr 2026 11:31:04 -0600 Subject: [PATCH 0729/1117] sign mac bundle (#712) * sign mac bundle * xcrun * use zip * more --- .github/workflows/build.yml | 18 +++++++++++++++++- Cargo.toml | 1 + ...titlements.plist => entitlements_dev.plist} | 0 data/entitlements_prod.plist | 18 ++++++++++++++++++ 4 files changed, 36 insertions(+), 1 deletion(-) rename data/{entitlements.plist => entitlements_dev.plist} (100%) create mode 100644 data/entitlements_prod.plist diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b0a1ce2..d4dfffe 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -164,10 +164,26 @@ jobs: @executable_path/../Frameworks/libfreetype.6.dylib target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/MacOS/gopher64 install_name_tool -change /opt/homebrew/opt/libpng/lib/libpng16.16.dylib \ @executable_path/../Frameworks/libpng16.16.dylib target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/Frameworks/libfreetype.6.dylib - codesign -f --entitlements data/entitlements.plist --deep --timestamp --options runtime -s - target/${{ matrix.target }}/release/bundle/osx/Gopher64.app env: NETPLAY_ID: ${{ secrets.NETPLAY_ID }} MACOSX_DEPLOYMENT_TARGET: "26.0" + - name: Sign Bundle Dev + if: ${{ github.ref_type != 'tag' }} + run: | + codesign -f --entitlements data/entitlements_dev.plist --deep --timestamp --options runtime -s - target/${{ matrix.target }}/release/bundle/osx/Gopher64.app + - name: Import Codesign Certs + if: ${{ github.ref_type == 'tag' }} + uses: apple-actions/import-codesign-certs@v6 + with: + p12-file-base64: ${{ secrets.APPLE_CERTIFICATES_FILE_BASE64 }} + p12-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }} + - name: Sign Bundle Release + if: ${{ github.ref_type == 'tag' }} + run: | + codesign -f --entitlements data/entitlements_prod.plist --deep --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app + zip -r gopher64-${{ matrix.arch }}.zip target/${{ matrix.target }}/release/bundle/osx/Gopher64.app + xcrun notarytool submit --wait --apple-id "${{ secrets.APPLE_ID }}" --team-id "${{ secrets.APPLE_DEVELOPER_ID }}" --password "${{ secrets.APPLE_APP_PASSWORD }}" gopher64-${{ matrix.arch }}.zip + xcrun stapler staple target/${{ matrix.target }}/release/bundle/osx/Gopher64.app - name: Upload file uses: actions/upload-artifact@v7 with: diff --git a/Cargo.toml b/Cargo.toml index 3a1fa3c..78e0860 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -58,3 +58,4 @@ identifier = "io.github.gopher64.gopher64" category = "public.app-category.games" icon = ["data/icon/gopher64_128x128.png","data/icon/gopher64_256x256.png","data/icon/gopher64_512x512.png"] osx_frameworks = ["/opt/homebrew/opt/molten-vk/lib/libMoltenVK.dylib","/opt/homebrew/opt/freetype/lib/libfreetype.6.dylib","/opt/homebrew/opt/libpng/lib/libpng16.16.dylib"] +osx_minimum_system_version = "26.0" diff --git a/data/entitlements.plist b/data/entitlements_dev.plist similarity index 100% rename from data/entitlements.plist rename to data/entitlements_dev.plist diff --git a/data/entitlements_prod.plist b/data/entitlements_prod.plist new file mode 100644 index 0000000..45b3615 --- /dev/null +++ b/data/entitlements_prod.plist @@ -0,0 +1,18 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.network.client + + com.apple.security.network.server + + com.apple.security.device.usb + + com.apple.security.device.bluetooth + + com.apple.security.files.user-selected.read-only + + + From 54d82713acc66df58ba3fc74f65aa82eca4f44cb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 7 Apr 2026 11:42:07 -0600 Subject: [PATCH 0730/1117] dont check for update with flatpak (#713) --- src/ui/gui.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index ce64db5..c7edfe8 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -294,7 +294,9 @@ fn about_window(app: &AppWindow) { open::that_detached("https://github.com/gopher64/gopher64/releases/latest").unwrap(); }); app.set_version(format!("Version: {}", env!("CARGO_PKG_VERSION")).into()); - check_latest_version(app.as_weak()); + if std::env::var("FLATPAK_ID").is_err() { + check_latest_version(app.as_weak()); + } } pub fn app_window() { From 650fd270e1fd421d9ae74fdb7f837ac7459910ea Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 8 Apr 2026 01:54:08 -0600 Subject: [PATCH 0731/1117] add messages for RA leaderboards (#714) --- retroachievements/retroachievements.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index a272f6e..447d6f9 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -147,6 +147,30 @@ void ra_set_dmem(uint8_t *dmem, size_t dmem_size) { g_dmem_size = dmem_size; } +static void leaderboard_started(const rc_client_leaderboard_t *leaderboard) { + char buffer[512]; + + snprintf(buffer, sizeof(buffer), "RA leaderboard attempt started: %s", + leaderboard->title); + rdp_onscreen_message(buffer); +} + +static void leaderboard_failed(const rc_client_leaderboard_t *leaderboard) { + char buffer[512]; + + snprintf(buffer, sizeof(buffer), "RA leaderboard attempt failed: %s", + leaderboard->title); + rdp_onscreen_message(buffer); +} + +static void leaderboard_submitted(const rc_client_leaderboard_t *leaderboard) { + char buffer[512]; + + snprintf(buffer, sizeof(buffer), "RA leaderboard submitted: %s - %s", + leaderboard->title, leaderboard->tracker_value); + rdp_onscreen_message(buffer); +} + static void achievement_triggered(const rc_client_achievement_t *achievement) { char buffer[512]; @@ -180,10 +204,13 @@ static void event_handler(const rc_client_event_t *event, rc_client_t *client) { achievement_triggered(event->achievement); break; case RC_CLIENT_EVENT_LEADERBOARD_STARTED: + leaderboard_started(event->leaderboard); break; case RC_CLIENT_EVENT_LEADERBOARD_FAILED: + leaderboard_failed(event->leaderboard); break; case RC_CLIENT_EVENT_LEADERBOARD_SUBMITTED: + leaderboard_submitted(event->leaderboard); break; case RC_CLIENT_EVENT_ACHIEVEMENT_CHALLENGE_INDICATOR_SHOW: break; From 6ed53e4e9de5dbc58b3f5e539939b140a3c359da Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 8 Apr 2026 05:09:32 -0600 Subject: [PATCH 0732/1117] Upload signed windows builds (#715) * upload windows signed artifact * more * more * more * more --- .github/workflows/build.yml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d4dfffe..e3c159a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -117,10 +117,10 @@ jobs: with: name: gopher64-${{ matrix.arch }} path: output/gopher64-${{ matrix.arch }}.exe - archive: false + archive: ${{ github.ref_type == 'tag' && true || false }} - name: SignPath if: ${{ github.ref_type == 'tag' }} - uses: signpath/github-action-submit-signing-request@v2.0 + uses: signpath/github-action-submit-signing-request@v2 with: api-token: "${{ secrets.SIGNPATH_API_TOKEN }}" organization-id: "${{ secrets.SIGNPATH_ORG_ID }}" @@ -128,7 +128,17 @@ jobs: artifact-configuration-slug: "gopher64-${{ matrix.arch }}" signing-policy-slug: "release-signing" github-artifact-id: "${{ steps.upload-unsigned-artifact.outputs.artifact-id }}" - wait-for-completion: false + wait-for-completion: true + wait-for-completion-timeout-in-seconds: 3600 + output-artifact-directory: output-signed + - name: Upload signed artifact + if: ${{ github.ref_type == 'tag' }} + uses: actions/upload-artifact@v7 + with: + name: gopher64-${{ matrix.arch }} + path: output-signed/gopher64-${{ matrix.arch }}.exe + archive: false + overwrite: true build-macos: runs-on: macos-26 From 601713e1022649f53f2da9d5f8563dbcce6ca1b8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 8 Apr 2026 13:57:18 -0600 Subject: [PATCH 0733/1117] RetroAchievements hardcore support (#716) * enable hardcore mode * more --- .github/workflows/build.yml | 1 + build.rs | 9 +++++++++ src/main.rs | 6 +++++- src/ui/gui/retroachievements_page.slint | 2 +- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e3c159a..6f00f2b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,6 +12,7 @@ on: env: CARGO_TERM_COLOR: always + RA_HARDCORE: ${{ github.ref_type == 'tag' && 'true' || 'false' }} jobs: build-linux: diff --git a/build.rs b/build.rs index 0fb2831..e3e0274 100644 --- a/build.rs +++ b/build.rs @@ -272,6 +272,15 @@ fn main() { let git_hash = String::from_utf8(git_output.stdout).unwrap(); println!("cargo:rustc-env=GIT_HASH={git_hash}"); + println!("cargo:rerun-if-env-changed=NETPLAY_ID"); let netplay_id = std::env::var("NETPLAY_ID").unwrap_or("gopher64".to_string()); println!("cargo:rustc-env=NETPLAY_ID={netplay_id}"); + + println!("cargo:rerun-if-env-changed=RA_HARDCORE"); + println!("cargo:rustc-check-cfg=cfg(ra_hardcore_enabled)"); + if let Ok(ra_hardcore) = std::env::var("RA_HARDCORE") + && ra_hardcore.to_lowercase() == "true" + { + println!("cargo:rustc-cfg=ra_hardcore_enabled"); + } } diff --git a/src/main.rs b/src/main.rs index abc8c1d..5cd7a24 100644 --- a/src/main.rs +++ b/src/main.rs @@ -158,7 +158,11 @@ async fn main() -> std::io::Result<()> { .unwrap_or_default() }; - retroachievements::init_client(false); //args.ra_hardcore + if cfg!(ra_hardcore_enabled) { + retroachievements::init_client(args.ra_hardcore); + } else { + retroachievements::init_client(false); + } let mut shutdown_tx = None; if let Some(peer_addr) = args.netplay_peer_addr diff --git a/src/ui/gui/retroachievements_page.slint b/src/ui/gui/retroachievements_page.slint index 0bbb413..884abbe 100644 --- a/src/ui/gui/retroachievements_page.slint +++ b/src/ui/gui/retroachievements_page.slint @@ -41,7 +41,7 @@ export component RetroAchievements inherits Page { HorizontalBox { alignment: center; CheckBox { - text: @tr("Hardcore mode (not currently supported)"); + text: @tr("Hardcore mode"); checked: RAData.hardcore; enabled: RAData.enabled; toggled => { From 2917e662df642271af8c6b7aefa582ead6999125 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 8 Apr 2026 14:31:28 -0600 Subject: [PATCH 0734/1117] better defaults for window size (#717) --- src/ui/video.rs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/ui/video.rs b/src/ui/video.rs index e763e6f..87e867a 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -18,20 +18,25 @@ pub fn init(device: &mut device::Device) { let window_width; let window_height; + let scale = if device.ui.config.video.upscale > 1 { + device.ui.config.video.upscale as i32 + } else { + 2 + }; if device.cart.pal { window_width = if device.ui.config.video.widescreen { - 1024 + 512 * scale } else { - 768 + 384 * scale }; - window_height = 576; + window_height = 288 * scale; } else { window_width = if device.ui.config.video.widescreen { - 852 + 426 * scale } else { - 640 + 320 * scale }; - window_height = 480; + window_height = 240 * scale; } device.ui.video.window = unsafe { sdl3_sys::video::SDL_CreateWindow(title.as_ptr(), window_width, window_height, flags) From 1226052035593a57724f2bdde0c2817de58c537c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 9 Apr 2026 01:20:23 -0600 Subject: [PATCH 0735/1117] cleanup some cli options (#718) --- src/main.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 5cd7a24..8adde51 100644 --- a/src/main.rs +++ b/src/main.rs @@ -72,7 +72,6 @@ struct Args { )] port: Option, #[arg( - short, long, help = "Clear all input profile bindings and controller assignments" )] @@ -92,7 +91,8 @@ struct Args { #[arg( long = "ra-token", value_name = "TOKEN", - help = "Token for RetroAchievements" + help = "Token for RetroAchievements", + hide = true )] ra_token: Option, #[arg( From a1da6995803cf8f9b341879da70234f0d5b9d862 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 9 Apr 2026 01:37:57 -0600 Subject: [PATCH 0736/1117] add RA show profile button (#719) * add RA show profile button * lint --- src/retroachievements.rs | 8 +++++++- src/ui/gui/appwindow.slint | 5 +++++ src/ui/gui/retroachievements_page.slint | 11 +++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/retroachievements.rs b/src/retroachievements.rs index e0a4043..6954889 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -137,12 +137,14 @@ fn set_current_user_message(app: &ui::gui::AppWindow, rx: tokio::sync::oneshot:: rx.await.unwrap(); weak_app .upgrade_in_event_loop(move |handle| { - if unsafe { ra_is_user_logged_in() } { + if is_user_logged_in() { handle.set_ra_current_user_message( format!("Logged in as {}", handle.get_ra_username()).into(), ); + handle.set_ra_show_profile(true); } else { handle.set_ra_current_user_message("Login failed".into()); + handle.set_ra_show_profile(false); } handle.set_ra_logging_in(false); }) @@ -223,6 +225,10 @@ pub fn ra_window(app: &ui::gui::AppWindow) { app.on_ra_games_clicked(move || { open::that_detached("https://retroachievements.org/system/2-nintendo-64/games").unwrap(); }); + + app.on_ra_show_profile_clicked(move |username| { + open::that_detached(format!("https://retroachievements.org/user/{}", username)).unwrap(); + }); } pub fn load_game(rom: &[u8], rom_size: usize) { diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 000fb43..5e96712 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -37,12 +37,14 @@ export component AppWindow inherits Window { callback cheat_toggled(string, string, string, bool); callback ra_button_clicked(string); callback ra_games_clicked; + callback ra_show_profile_clicked(string); callback ra_toggled(bool,bool); in property version <=> AboutData.version; in property has_update <=> AboutData.has_update; in-out property ra_username <=> RAData.ra_username; in-out property ra_password <=> RAData.ra_password; in-out property ra_logging_in <=> RAData.ra_logging_in; + in-out property ra_show_profile <=> RAData.ra_show_profile; in-out property ra_current_user_message <=> RAData.current_user_message; in-out property ra_enabled <=> RAData.enabled; in-out property ra_hardcore <=> RAData.hardcore; @@ -138,6 +140,9 @@ export component AppWindow inherits Window { ra_games_clicked => { ra_games_clicked(); } + ra_show_profile_clicked(username) => { + ra_show_profile_clicked(username); + } } if(side-bar.current-item == 5): Settings { } if(side-bar.current-item == 6): About { diff --git a/src/ui/gui/retroachievements_page.slint b/src/ui/gui/retroachievements_page.slint index 884abbe..84f2640 100644 --- a/src/ui/gui/retroachievements_page.slint +++ b/src/ui/gui/retroachievements_page.slint @@ -8,6 +8,7 @@ export global RAData { in-out property enabled; in-out property hardcore; in-out property ra_logging_in; + in-out property ra_show_profile; in-out property ra_username; in-out property ra_password; in-out property current_user_message; @@ -17,6 +18,7 @@ export component RetroAchievements inherits Page { callback ra_button_clicked(string); callback ra_toggled(bool,bool); callback ra_games_clicked; + callback ra_show_profile_clicked(string); title: @tr("RetroAchievements"); VerticalBox { @@ -33,6 +35,7 @@ export component RetroAchievements inherits Page { username_widget.text = ""; password_widget.text = ""; RAData.current_user_message = "Not currently logged in"; + RAData.ra_show_profile = false; } ra_toggled(RAData.enabled,RAData.hardcore); } @@ -54,6 +57,14 @@ export component RetroAchievements inherits Page { alignment: center; Text { text: RAData.current_user_message; + vertical-alignment: center; + } + if RAData.ra_show_profile:Button { + enabled: RAData.enabled; + text: @tr("View Profile"); + clicked => { + ra_show_profile_clicked(RAData.ra_username); + } } } HorizontalBox { From d8ec09d4756718673e3ea564274ab41e53d566e9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 9 Apr 2026 03:17:57 -0600 Subject: [PATCH 0737/1117] centralize hardcore check (#720) --- src/device.rs | 4 +--- src/savestates.rs | 3 +++ src/ui/video.rs | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/device.rs b/src/device.rs index 129d5bd..f77e0bd 100644 --- a/src/device.rs +++ b/src/device.rs @@ -49,9 +49,7 @@ pub fn run_game(device: &mut Device, rom_contents: Vec, game_settings: ui::g if game_settings.disable_expansion_pak { device.rdram.size = 0x400000; } - if let Some(slot) = game_settings.load_savestate_slot - && !retroachievements::get_hardcore() - { + if let Some(slot) = game_settings.load_savestate_slot { device.ui.storage.save_state_slot = slot; device.load_state = true; } diff --git a/src/savestates.rs b/src/savestates.rs index dce97dc..83259f5 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -100,6 +100,9 @@ pub fn create_savestate(device: &device::Device) { } pub fn load_savestate(device: &mut device::Device) { + if retroachievements::get_hardcore() { + return; + } let savestate = std::fs::read(&device.ui.storage.paths.savestate_file_path); if let Ok(savestate) = &savestate { let device_bytes = ui::storage::decompress_file(savestate, "device"); diff --git a/src/ui/video.rs b/src/ui/video.rs index 87e867a..3208647 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -159,7 +159,7 @@ pub fn check_callback(device: &mut device::Device) -> (bool, bool) { if device.netplay.is_none() { if callback.save_state { device.save_state = true; - } else if callback.load_state && !retroachievements::get_hardcore() { + } else if callback.load_state { device.load_state = true; } if callback.reset_game { From 406ebba93d70cd233f60096534fd8bbc9b8879d0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 9 Apr 2026 03:31:00 -0600 Subject: [PATCH 0738/1117] run ra do_idle for VRU window (#721) --- src/ui/vru.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ui/vru.rs b/src/ui/vru.rs index d5c14ea..486a4f7 100644 --- a/src/ui/vru.rs +++ b/src/ui/vru.rs @@ -1,4 +1,5 @@ use crate::gui; +use crate::retroachievements; use slint::ComponentHandle; pub fn prompt_for_match(words: &[String], frame_time: f64) -> u16 { @@ -39,6 +40,7 @@ pub fn prompt_for_match(words: &[String], frame_time: f64) -> u16 { result = rx.try_recv(); std::thread::sleep(std::time::Duration::from_secs_f64(frame_time)); unsafe { sdl3_sys::events::SDL_PumpEvents() }; // so the OS doesn't complain about the game window being frozen + retroachievements::do_idle(); } for (i, v) in words.iter().enumerate() { if *v == *result.as_ref().unwrap() { From 914798e717bae07edaaa99f59482be0f444985db Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 9 Apr 2026 05:13:56 -0600 Subject: [PATCH 0739/1117] more descriptive git naming (#722) --- build.rs | 6 +++--- src/retroachievements.rs | 2 +- src/ui/netplay.rs | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/build.rs b/build.rs index e3e0274..27e2e55 100644 --- a/build.rs +++ b/build.rs @@ -265,12 +265,12 @@ fn main() { } let git_output = std::process::Command::new("git") - .args(["rev-parse", "HEAD"]) + .args(["describe", "--always", "--dirty"]) .output() .unwrap(); - let git_hash = String::from_utf8(git_output.stdout).unwrap(); - println!("cargo:rustc-env=GIT_HASH={git_hash}"); + let git_describe = String::from_utf8(git_output.stdout).unwrap(); + println!("cargo:rustc-env=GIT_DESCRIBE={git_describe}"); println!("cargo:rerun-if-env-changed=NETPLAY_ID"); let netplay_id = std::env::var("NETPLAY_ID").unwrap_or("gopher64".to_string()); diff --git a/src/retroachievements.rs b/src/retroachievements.rs index 6954889..c0a62f0 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -60,7 +60,7 @@ pub extern "C" fn rust_server_call( .user_agent(format!( "{}/{}", env!("CARGO_PKG_NAME"), - env!("CARGO_PKG_VERSION") + env!("GIT_DESCRIBE") )) .build() .unwrap(); diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index fb70519..dfde901 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -642,7 +642,7 @@ fn create_session( let create_room = NetplayMessage { message_type: "request_create_room".to_string(), player_name: Some(player_name), - client_sha: Some(env!("GIT_HASH").to_string()), + client_sha: Some(env!("GIT_DESCRIBE").to_string()), netplay_version: Some(NETPLAY_VERSION), emulator: Some(EMU_NAME.to_string()), accept: None, @@ -763,7 +763,7 @@ fn join_session( let join_room = NetplayMessage { message_type: "request_join_room".to_string(), player_name: Some(player_name), - client_sha: Some(env!("GIT_HASH").to_string()), + client_sha: Some(env!("GIT_DESCRIBE").to_string()), netplay_version: Some(NETPLAY_VERSION), emulator: Some(EMU_NAME.to_string()), accept: None, From f865ccfacd1c6e408a951de50572673b93f706bb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 9 Apr 2026 05:50:48 -0600 Subject: [PATCH 0740/1117] pull tags in github action (#723) * pull tags in github action * more detailed version * more --- .github/workflows/build.yml | 3 +++ src/ui/gui.rs | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6f00f2b..28e51dc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -33,6 +33,7 @@ jobs: - uses: actions/checkout@v6 with: submodules: recursive + fetch-depth: 0 - uses: actions-rust-lang/setup-rust-toolchain@v1 with: target: ${{ matrix.target }} @@ -89,6 +90,7 @@ jobs: - uses: actions/checkout@v6 with: submodules: recursive + fetch-depth: 0 - uses: actions-rust-lang/setup-rust-toolchain@v1 with: target: ${{ matrix.target }} @@ -154,6 +156,7 @@ jobs: - uses: actions/checkout@v6 with: submodules: recursive + fetch-depth: 0 - uses: actions-rust-lang/setup-rust-toolchain@v1 with: target: ${{ matrix.target }} diff --git a/src/ui/gui.rs b/src/ui/gui.rs index c7edfe8..718a293 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -293,7 +293,7 @@ fn about_window(app: &AppWindow) { app.on_newversion_button_clicked(move || { open::that_detached("https://github.com/gopher64/gopher64/releases/latest").unwrap(); }); - app.set_version(format!("Version: {}", env!("CARGO_PKG_VERSION")).into()); + app.set_version(format!("Version: {}", env!("GIT_DESCRIBE")).into()); if std::env::var("FLATPAK_ID").is_err() { check_latest_version(app.as_weak()); } From 125f79a0e64f4c720ff4ee8b5d18085a16102f7d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 9 Apr 2026 07:15:29 -0600 Subject: [PATCH 0741/1117] show message for RA progress (#724) --- retroachievements/retroachievements.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index 447d6f9..648fc55 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -178,6 +178,15 @@ static void achievement_triggered(const rc_client_achievement_t *achievement) { rdp_onscreen_message(buffer); } +static void +achievement_progress_updated(const rc_client_achievement_t *achievement) { + char buffer[512]; + + snprintf(buffer, sizeof(buffer), "RA updated: %s: %s", achievement->title, + achievement->measured_progress); + rdp_onscreen_message(buffer); +} + static void game_completed(rc_client_t *client) { char buffer[512]; const rc_client_game_t *game = rc_client_get_game_info(client); @@ -221,6 +230,7 @@ static void event_handler(const rc_client_event_t *event, rc_client_t *client) { case RC_CLIENT_EVENT_ACHIEVEMENT_PROGRESS_INDICATOR_HIDE: break; case RC_CLIENT_EVENT_ACHIEVEMENT_PROGRESS_INDICATOR_UPDATE: + achievement_progress_updated(event->achievement); break; case RC_CLIENT_EVENT_LEADERBOARD_TRACKER_SHOW: break; From 35dbd957cc67e49efe4b1b07ec086e281cd4ae62 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 9 Apr 2026 09:22:26 -0600 Subject: [PATCH 0742/1117] reduce font size a bit (#725) * reduce font size a bit * remove duplicate messages --- parallel-rdp/interface.cpp | 2 +- retroachievements/retroachievements.c | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index dccac14..a876bc2 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -272,7 +272,7 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, } message_font = - TTF_OpenFontIO(SDL_IOFromConstMem(font, font_size), true, 30.0); + TTF_OpenFontIO(SDL_IOFromConstMem(font, font_size), true, 25.0); if (!message_font) { rdp_close(); return; diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index 648fc55..2caa2fb 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -64,7 +64,6 @@ static void login_callback(int result, const char *error_message, rc_client_t *client, void *userdata) { // If not successful, just report the error and bail. if (result != RC_OK) { - printf("RetroAchievements: Login failed: %s\n", error_message); store_retroachievements_credentials(NULL, NULL, userdata); return; } @@ -111,7 +110,6 @@ void ra_login_token_user(const char *username, const char *token, static void load_game_callback(int result, const char *error_message, rc_client_t *client, void *userdata) { if (result != RC_OK) { - printf("RetroAchievements: game load failed: %s\n", error_message); return; } char buffer[512]; From 8bb3179534430f5b19c1c275d38b20ae5e85dfaf Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 9 Apr 2026 12:05:54 -0600 Subject: [PATCH 0743/1117] Improve startup messages (#726) * improve startup messages * more --- retroachievements/retroachievements.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index 2caa2fb..d512628 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -109,25 +109,25 @@ void ra_login_token_user(const char *username, const char *token, static void load_game_callback(int result, const char *error_message, rc_client_t *client, void *userdata) { + char buffer[512]; if (result != RC_OK) { + snprintf(buffer, sizeof(buffer), "RA load failed: %s", error_message); + rdp_onscreen_message(buffer); return; } - char buffer[512]; + const rc_client_game_t *game = rc_client_get_game_info(client); rc_client_user_game_summary_t summary; rc_client_get_user_game_summary(client, &summary); - snprintf(buffer, sizeof(buffer), "RA Loaded: %s", game->title); - rdp_onscreen_message(buffer); - int hardcore_enabled = rc_client_get_hardcore_enabled(client); - snprintf(buffer, sizeof(buffer), "RA mode: %s", - hardcore_enabled ? "Hardcore" : "Softcore"); - rdp_onscreen_message(buffer); - - snprintf(buffer, sizeof(buffer), "%u/%u achievements unlocked", + snprintf(buffer, sizeof(buffer), + "RA loaded: %s\nMode: %s\n%u/%u achievements unlocked", game->title, + hardcore_enabled ? "Hardcore" : "Softcore", summary.num_unlocked_achievements, summary.num_core_achievements); rdp_onscreen_message(buffer); + rdp_onscreen_message(buffer); // show it a bit longer + g_game_loaded = true; } From 9f6194d64fc2006d6891841461ee8a10a14978b1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 9 Apr 2026 23:56:18 -0600 Subject: [PATCH 0744/1117] better startup message (#727) * better startup message * more --- retroachievements/retroachievements.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index d512628..336cc9a 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -113,6 +113,7 @@ static void load_game_callback(int result, const char *error_message, if (result != RC_OK) { snprintf(buffer, sizeof(buffer), "RA load failed: %s", error_message); rdp_onscreen_message(buffer); + rdp_onscreen_message(buffer); // show it a bit longer return; } @@ -121,10 +122,18 @@ static void load_game_callback(int result, const char *error_message, rc_client_get_user_game_summary(client, &summary); int hardcore_enabled = rc_client_get_hardcore_enabled(client); - snprintf(buffer, sizeof(buffer), - "RA loaded: %s\nMode: %s\n%u/%u achievements unlocked", game->title, - hardcore_enabled ? "Hardcore" : "Softcore", - summary.num_unlocked_achievements, summary.num_core_achievements); + int message_length = + snprintf(buffer, sizeof(buffer), "RA loaded: %s\nMode: %s\n", game->title, + hardcore_enabled ? "Hardcore" : "Softcore"); + + if (summary.num_core_achievements != 0) { + snprintf(buffer + message_length, sizeof(buffer) - message_length, + "%u/%u achievements unlocked", summary.num_unlocked_achievements, + summary.num_core_achievements); + } else { + snprintf(buffer + message_length, sizeof(buffer) - message_length, + "Game has no achievements"); + } rdp_onscreen_message(buffer); rdp_onscreen_message(buffer); // show it a bit longer From 4b54ea279d88c674dd2746ad76a3097dc1fdba72 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 10 Apr 2026 20:21:12 +0200 Subject: [PATCH 0745/1117] Build on MacOS 15 (#728) --- .github/workflows/build.yml | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 28e51dc..38bbf22 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -144,7 +144,7 @@ jobs: overwrite: true build-macos: - runs-on: macos-26 + runs-on: macos-15 strategy: fail-fast: false matrix: @@ -180,7 +180,7 @@ jobs: @executable_path/../Frameworks/libpng16.16.dylib target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/Frameworks/libfreetype.6.dylib env: NETPLAY_ID: ${{ secrets.NETPLAY_ID }} - MACOSX_DEPLOYMENT_TARGET: "26.0" + MACOSX_DEPLOYMENT_TARGET: "15.0" - name: Sign Bundle Dev if: ${{ github.ref_type != 'tag' }} run: | diff --git a/Cargo.toml b/Cargo.toml index 78e0860..7dd31f3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -58,4 +58,4 @@ identifier = "io.github.gopher64.gopher64" category = "public.app-category.games" icon = ["data/icon/gopher64_128x128.png","data/icon/gopher64_256x256.png","data/icon/gopher64_512x512.png"] osx_frameworks = ["/opt/homebrew/opt/molten-vk/lib/libMoltenVK.dylib","/opt/homebrew/opt/freetype/lib/libfreetype.6.dylib","/opt/homebrew/opt/libpng/lib/libpng16.16.dylib"] -osx_minimum_system_version = "26.0" +osx_minimum_system_version = "15.0" From e4391b308998b6e191aaf3e08736989516b14d35 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 10 Apr 2026 21:51:06 +0200 Subject: [PATCH 0746/1117] add some warning messages (#729) --- src/device/vi.rs | 8 ++++++-- src/savestates.rs | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index 95f596b..4d5bdc7 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -149,8 +149,12 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { ui::video::update_screen(); device.vi.vi_counter += 1; - if device.netplay.is_none() && !retroachievements::get_hardcore() && paused { - ui::video::pause_loop(device.vi.frame_time); + if device.netplay.is_none() && paused { + if retroachievements::get_hardcore() { + ui::video::onscreen_message(&device.ui, "Cannot pause in RA hardcore mode"); + } else { + ui::video::pause_loop(device.vi.frame_time); + } } unsafe { sdl3_sys::events::SDL_PumpEvents() }; diff --git a/src/savestates.rs b/src/savestates.rs index 83259f5..71979a7 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -101,6 +101,7 @@ pub fn create_savestate(device: &device::Device) { pub fn load_savestate(device: &mut device::Device) { if retroachievements::get_hardcore() { + ui::video::onscreen_message(&device.ui, "Cannot load savestate in RA hardcore mode"); return; } let savestate = std::fs::read(&device.ui.storage.paths.savestate_file_path); From 2706f8f6a528e329bdc8e32f3612d54463740d4c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 11 Apr 2026 08:44:22 +0200 Subject: [PATCH 0747/1117] use sized savestate functions (#730) * use sized savestate functions * fix lint --- retroachievements/retroachievements.c | 10 ++++++---- retroachievements/retroachievements.h | 4 ++-- src/retroachievements.rs | 8 ++++---- src/savestates.rs | 8 ++++++-- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index 336cc9a..501f4be 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -311,18 +311,20 @@ size_t ra_state_size() { return rc_client_progress_size(g_client); } -void ra_save_state(uint8_t *state) { +void ra_save_state(uint8_t *state, size_t state_size) { if (!g_game_loaded) return; - if (rc_client_serialize_progress(g_client, state) != RC_OK) { + if (rc_client_serialize_progress_sized(g_client, state, state_size) != + RC_OK) { printf("RetroAchievements: Failed to serialize progress\n"); } } -void ra_load_state(const uint8_t *state) { +void ra_load_state(const uint8_t *state, size_t state_size) { if (!g_game_loaded) return; - if (rc_client_deserialize_progress(g_client, state) != RC_OK) { + if (rc_client_deserialize_progress_sized(g_client, state, state_size) != + RC_OK) { printf("RetroAchievements: Failed to deserialize progress\n"); } } diff --git a/retroachievements/retroachievements.h b/retroachievements/retroachievements.h index 833425d..8283043 100644 --- a/retroachievements/retroachievements.h +++ b/retroachievements/retroachievements.h @@ -19,5 +19,5 @@ bool ra_is_user_logged_in(); const char *ra_get_username(); const char *ra_get_token(); size_t ra_state_size(); -void ra_save_state(uint8_t *state); -void ra_load_state(const uint8_t *state); +void ra_save_state(uint8_t *state, size_t state_size); +void ra_load_state(const uint8_t *state, size_t state_size); diff --git a/src/retroachievements.rs b/src/retroachievements.rs index c0a62f0..3384740 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -301,10 +301,10 @@ pub fn state_size() -> usize { unsafe { ra_state_size() } } -pub fn save_state(state: *mut u8) { - unsafe { ra_save_state(state) }; +pub fn save_state(state: *mut u8, state_size: usize) { + unsafe { ra_save_state(state, state_size) }; } -pub fn load_state(state: *const u8) { - unsafe { ra_load_state(state) }; +pub fn load_state(state: *const u8, state_size: usize) { + unsafe { ra_load_state(state, state_size) }; } diff --git a/src/savestates.rs b/src/savestates.rs index 71979a7..44011b6 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -74,7 +74,7 @@ pub fn create_savestate(device: &device::Device) { ui::video::save_state(rdp_state.as_mut_ptr()); let mut ra_state: Vec = vec![0; retroachievements::state_size()]; - retroachievements::save_state(ra_state.as_mut_ptr()); + retroachievements::save_state(ra_state.as_mut_ptr(), ra_state.len()); let data: &[(&[u8], &str)] = &[ (&postcard::to_stdvec(device).unwrap(), "device"), @@ -207,7 +207,11 @@ pub fn load_savestate(device: &mut device::Device) { ui::audio::init_game_audio(&mut device.ui, device.ai.freq); ui::video::load_state(device, rdp_state.as_ptr()); - retroachievements::load_state(ra_state.as_ptr()); + if !ra_state.is_empty() { + retroachievements::load_state(ra_state.as_ptr(), ra_state.len()); + } else { + retroachievements::load_state(std::ptr::null(), 0); + } if device.cheats.enabled { cheats::execute_cheats(device, device.cheats.cheats.clone()); From 4b5c8d03a94ba3a7fc056be291f3e8d3c1873c66 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 11 Apr 2026 16:35:04 +0200 Subject: [PATCH 0748/1117] use a const pointer (#732) --- retroachievements/retroachievements.c | 4 ++-- retroachievements/retroachievements.h | 2 +- src/device/rdram.rs | 2 +- src/retroachievements.rs | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index 501f4be..f759eb2 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -13,7 +13,7 @@ void store_retroachievements_credentials(const char *username, const char *token, void *userdata); rc_client_t *g_client = NULL; -uint8_t *g_dmem = NULL; +const uint8_t *g_dmem = NULL; size_t g_dmem_size = 0; bool g_game_loaded = false; bool g_user_logged_in = false; @@ -149,7 +149,7 @@ void ra_load_game(const uint8_t *rom, size_t rom_size) { NULL); } -void ra_set_dmem(uint8_t *dmem, size_t dmem_size) { +void ra_set_dmem(const uint8_t *dmem, size_t dmem_size) { g_dmem = dmem; g_dmem_size = dmem_size; } diff --git a/retroachievements/retroachievements.h b/retroachievements/retroachievements.h index 8283043..5e27e15 100644 --- a/retroachievements/retroachievements.h +++ b/retroachievements/retroachievements.h @@ -6,7 +6,7 @@ void ra_init_client(bool hardcore); void ra_shutdown_client(); bool ra_get_hardcore(); void ra_load_game(const uint8_t *rom, size_t rom_size); -void ra_set_dmem(uint8_t *dmem, size_t dmem_size); +void ra_set_dmem(const uint8_t *dmem, size_t dmem_size); void ra_do_frame(); void ra_do_idle(); void ra_http_callback(const char *content, size_t content_size, int status_code, diff --git a/src/device/rdram.rs b/src/device/rdram.rs index a66ab3b..4947800 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -152,7 +152,7 @@ pub fn init(device: &mut device::Device) { device.rdram.mem = unsafe { Vec::from_raw_parts(ptr, device.rdram.size as usize, device.rdram.size as usize) }; - retroachievements::set_dmem(device.rdram.mem.as_mut_ptr(), device.rdram.size as usize); + retroachievements::set_dmem(device.rdram.mem.as_ptr(), device.rdram.size as usize); // hack, skip RDRAM initialization device diff --git a/src/retroachievements.rs b/src/retroachievements.rs index 3384740..74771ee 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -235,7 +235,7 @@ pub fn load_game(rom: &[u8], rom_size: usize) { unsafe { ra_load_game(rom.as_ptr(), rom_size) }; } -pub fn set_dmem(dmem: *mut u8, dmem_size: usize) { +pub fn set_dmem(dmem: *const u8, dmem_size: usize) { unsafe { ra_set_dmem(dmem, dmem_size) }; } From e8898c52fc741265b9e1c71859116053de807a0d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 12 Apr 2026 12:10:15 +0200 Subject: [PATCH 0749/1117] More RA code (#733) * implement RC_CLIENT_EVENT_SERVER_ERROR * handle more * more * more * more * more * more * more * more * more * more --- build.rs | 1 + retroachievements/retroachievements.c | 87 +++++++++++++++++++-------- retroachievements/retroachievements.h | 3 +- src/device.rs | 8 +-- src/main.rs | 3 +- src/retroachievements.rs | 19 +++++- 6 files changed, 87 insertions(+), 34 deletions(-) diff --git a/build.rs b/build.rs index 27e2e55..27fae49 100644 --- a/build.rs +++ b/build.rs @@ -159,6 +159,7 @@ fn main() { let retroachievements_bindings = bindgen::Builder::default() .header("retroachievements/retroachievements.h") .allowlist_function("ra_init_client") + .allowlist_function("ra_welcome") .allowlist_function("ra_shutdown_client") .allowlist_function("ra_get_hardcore") .allowlist_function("ra_load_game") diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index f759eb2..75dbb19 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -12,19 +12,23 @@ void rust_server_call(const char *url, const char *post_data, void store_retroachievements_credentials(const char *username, const char *token, void *userdata); -rc_client_t *g_client = NULL; -const uint8_t *g_dmem = NULL; -size_t g_dmem_size = 0; -bool g_game_loaded = false; -bool g_user_logged_in = false; -const char *g_username = NULL; -const char *g_token = NULL; +void notify_load_game(void *userdata); + +static rc_client_t *g_client = NULL; +static const uint8_t *g_dmem = NULL; +static size_t g_dmem_size = 0; +static bool g_game_loaded = false; +static bool g_user_logged_in = false; +static const char *g_username = NULL; +static const char *g_token = NULL; +static char load_game_error_message[512]; static uint32_t read_memory(uint32_t address, uint8_t *buffer, uint32_t num_bytes, rc_client_t *client) { if (address + num_bytes >= g_dmem_size) - return 0; - memcpy(buffer, &g_dmem[address], num_bytes); + memset(buffer, 0, num_bytes); + else + memcpy(buffer, &g_dmem[address], num_bytes); return num_bytes; } @@ -109,22 +113,41 @@ void ra_login_token_user(const char *username, const char *token, static void load_game_callback(int result, const char *error_message, rc_client_t *client, void *userdata) { - char buffer[512]; if (result != RC_OK) { - snprintf(buffer, sizeof(buffer), "RA load failed: %s", error_message); - rdp_onscreen_message(buffer); - rdp_onscreen_message(buffer); // show it a bit longer + rc_client_set_hardcore_enabled(client, false); + snprintf(load_game_error_message, sizeof(load_game_error_message), + "RA load failed: %s", error_message); + notify_load_game(userdata); return; } - const rc_client_game_t *game = rc_client_get_game_info(client); - rc_client_user_game_summary_t summary; - rc_client_get_user_game_summary(client, &summary); + if (!rc_client_is_processing_required(client)) { + rc_client_set_hardcore_enabled(client, false); + } - int hardcore_enabled = rc_client_get_hardcore_enabled(client); - int message_length = - snprintf(buffer, sizeof(buffer), "RA loaded: %s\nMode: %s\n", game->title, - hardcore_enabled ? "Hardcore" : "Softcore"); + g_game_loaded = true; + notify_load_game(userdata); +} + +void ra_welcome() { + if (!g_user_logged_in) + return; + + if (!g_game_loaded) { + rdp_onscreen_message(load_game_error_message); + rdp_onscreen_message(load_game_error_message); // show it a bit longer + return; + } + + char buffer[512]; + + const rc_client_game_t *game = rc_client_get_game_info(g_client); + rc_client_user_game_summary_t summary; + rc_client_get_user_game_summary(g_client, &summary); + + int message_length = snprintf( + buffer, sizeof(buffer), "RA loaded: %s\nMode: %s\n", game->title, + rc_client_get_hardcore_enabled(g_client) ? "Hardcore" : "Softcore"); if (summary.num_core_achievements != 0) { snprintf(buffer + message_length, sizeof(buffer) - message_length, @@ -136,17 +159,17 @@ static void load_game_callback(int result, const char *error_message, } rdp_onscreen_message(buffer); rdp_onscreen_message(buffer); // show it a bit longer - - g_game_loaded = true; } -void ra_load_game(const uint8_t *rom, size_t rom_size) { - if (!g_user_logged_in) +void ra_load_game(const uint8_t *rom, size_t rom_size, void *userdata) { + if (!g_user_logged_in) { + notify_load_game(userdata); return; + } rc_client_begin_identify_and_load_game(g_client, RC_CONSOLE_NINTENDO_64, NULL, rom, rom_size, load_game_callback, - NULL); + userdata); } void ra_set_dmem(const uint8_t *dmem, size_t dmem_size) { @@ -189,7 +212,7 @@ static void achievement_progress_updated(const rc_client_achievement_t *achievement) { char buffer[512]; - snprintf(buffer, sizeof(buffer), "RA updated: %s: %s", achievement->title, + snprintf(buffer, sizeof(buffer), "RA updated: %s - %s", achievement->title, achievement->measured_progress); rdp_onscreen_message(buffer); } @@ -214,6 +237,14 @@ static void subset_completed(const rc_client_subset_t *subset, rdp_onscreen_message(buffer); } +static void server_error(const rc_client_server_error_t *server_error) { + char buffer[512]; + + snprintf(buffer, sizeof(buffer), "RA server error: %s", + server_error->error_message); + rdp_onscreen_message(buffer); +} + static void event_handler(const rc_client_event_t *event, rc_client_t *client) { switch (event->type) { case RC_CLIENT_EVENT_ACHIEVEMENT_TRIGGERED: @@ -253,6 +284,9 @@ static void event_handler(const rc_client_event_t *event, rc_client_t *client) { case RC_CLIENT_EVENT_SUBSET_COMPLETED: subset_completed(event->subset, client); break; + case RC_CLIENT_EVENT_SERVER_ERROR: + server_error(event->server_error); + break; default: printf("RetroAchievements: Unhandled event %d\n", event->type); break; @@ -267,6 +301,7 @@ void ra_init_client(bool hardcore) { g_user_logged_in = false; g_dmem = NULL; g_dmem_size = 0; + memset(load_game_error_message, 0, sizeof(load_game_error_message)); // Provide a logging function to simplify debugging rc_client_enable_logging(g_client, RC_CLIENT_LOG_LEVEL_WARN, log_message); diff --git a/retroachievements/retroachievements.h b/retroachievements/retroachievements.h index 5e27e15..f7377b1 100644 --- a/retroachievements/retroachievements.h +++ b/retroachievements/retroachievements.h @@ -4,8 +4,9 @@ void ra_init_client(bool hardcore); void ra_shutdown_client(); +void ra_welcome(); bool ra_get_hardcore(); -void ra_load_game(const uint8_t *rom, size_t rom_size); +void ra_load_game(const uint8_t *rom, size_t rom_size, void *userdata); void ra_set_dmem(const uint8_t *dmem, size_t dmem_size); void ra_do_frame(); void ra_do_idle(); diff --git a/src/device.rs b/src/device.rs index f77e0bd..66db74c 100644 --- a/src/device.rs +++ b/src/device.rs @@ -44,7 +44,7 @@ pub mod tlb; pub mod unmapped; pub mod vi; -pub fn run_game(device: &mut Device, rom_contents: Vec, game_settings: ui::gui::GameSettings) { +pub fn run_game(device: &mut Device, rom_contents: &[u8], game_settings: ui::gui::GameSettings) { device.cpu.overclock = game_settings.overclock; if game_settings.disable_expansion_pak { device.rdram.size = 0x400000; @@ -56,7 +56,7 @@ pub fn run_game(device: &mut Device, rom_contents: Vec, game_settings: ui::g init_rng(device); - cart::rom::init(device, &rom_contents); // cart needs to come before rdram + cart::rom::init(device, rom_contents); // cart needs to come before rdram // rdram pointer is shared with parallel-rdp and retroachievements rdram::init(device); @@ -65,8 +65,8 @@ pub fn run_game(device: &mut Device, rom_contents: Vec, game_settings: ui::g ui::audio::init(&mut device.ui, device.ai.freq); ui::input::init(&mut device.ui); - // shows messages, needs to be after video init - retroachievements::load_game(&rom_contents, rom_contents.len()); + // must be after video init + retroachievements::welcome(); mi::init(device); pif::init(device); diff --git a/src/main.rs b/src/main.rs index 8adde51..291e2ee 100644 --- a/src/main.rs +++ b/src/main.rs @@ -199,9 +199,10 @@ async fn main() -> std::io::Result<()> { } } + retroachievements::load_game(&rom_contents, rom_contents.len()).await; device::run_game( &mut device, - rom_contents, + &rom_contents, ui::gui::GameSettings { overclock, disable_expansion_pak, diff --git a/src/retroachievements.rs b/src/retroachievements.rs index 74771ee..df88c87 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -11,6 +11,12 @@ pub struct RAConfig { pub hardcore: bool, } +#[unsafe(no_mangle)] +pub extern "C" fn notify_load_game(ctx: *mut std::ffi::c_void) { + let tx = unsafe { Box::from_raw(ctx as *mut tokio::sync::oneshot::Sender) }; + tx.send(true).unwrap(); +} + #[unsafe(no_mangle)] pub extern "C" fn store_retroachievements_credentials( c_username: *const std::ffi::c_char, @@ -231,8 +237,17 @@ pub fn ra_window(app: &ui::gui::AppWindow) { }); } -pub fn load_game(rom: &[u8], rom_size: usize) { - unsafe { ra_load_game(rom.as_ptr(), rom_size) }; +pub async fn load_game(rom: &[u8], rom_size: usize) { + let (tx, rx) = tokio::sync::oneshot::channel::(); + unsafe { + let tx_ptr = Box::into_raw(Box::new(tx)) as *mut std::ffi::c_void; + ra_load_game(rom.as_ptr(), rom_size, tx_ptr); + }; + rx.await.unwrap(); +} + +pub fn welcome() { + unsafe { ra_welcome() }; } pub fn set_dmem(dmem: *const u8, dmem_size: usize) { From 9b71d3aa0bc41caae92d820b58066ff835e49458 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 12 Apr 2026 12:33:11 +0200 Subject: [PATCH 0750/1117] print message for failed login (#736) --- retroachievements/retroachievements.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index 75dbb19..785fd60 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -68,6 +68,8 @@ static void login_callback(int result, const char *error_message, rc_client_t *client, void *userdata) { // If not successful, just report the error and bail. if (result != RC_OK) { + snprintf(load_game_error_message, sizeof(load_game_error_message), + "RA login failed: %s", error_message); store_retroachievements_credentials(NULL, NULL, userdata); return; } @@ -130,14 +132,12 @@ static void load_game_callback(int result, const char *error_message, } void ra_welcome() { - if (!g_user_logged_in) - return; - - if (!g_game_loaded) { + if (strlen(load_game_error_message) > 0) { rdp_onscreen_message(load_game_error_message); rdp_onscreen_message(load_game_error_message); // show it a bit longer - return; } + if (!g_game_loaded) + return; char buffer[512]; From 9d7db93c70022c6a45ec03275d5d248eed0ed351 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 12 Apr 2026 15:21:52 +0200 Subject: [PATCH 0751/1117] fix font clarity (#737) --- parallel-rdp/interface.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index a876bc2..9778729 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -6,6 +6,7 @@ #include "wsi_platform.hpp" #include #include +#include using namespace Vulkan; @@ -431,7 +432,7 @@ static void render_frame(Vulkan::Device &device) { create_message_image(device, vp.width, messages.front().c_str()); cmd->set_texture(0, 0, message_image->get_view(), Vulkan::StockSampler::NearestClamp); - vp.x = vp.x + (vp.width - message_image->get_width()) / 2; + vp.x = floor(vp.x + (vp.width - message_image->get_width()) / 2); vp.y = vp.y + vp.height - message_image->get_height(); vp.height = message_image->get_height(); vp.width = message_image->get_width(); From 4240a99ad57b3e150d0f56b9c0c30e280fc8aad8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 12 Apr 2026 19:00:45 +0200 Subject: [PATCH 0752/1117] cache message images (#738) --- parallel-rdp/interface.cpp | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 9778729..904db02 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -73,6 +73,11 @@ typedef struct { FrameBufferInfo frame_buffer_info; } RDP_DEVICE; +typedef struct { + std::string message; + Vulkan::ImageHandle image; +} Message; + static SDL_Window *window; static RDP::CommandProcessor *processor; static SDL_WSIPlatform *wsi_platform; @@ -89,7 +94,7 @@ std::vector rdram_dirty; uint64_t sync_signal; static TTF_Font *message_font; -static std::queue messages; +static std::queue messages; static uint64_t message_timer; #define MESSAGE_TIME 3000 // 3 seconds @@ -287,11 +292,13 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, callback.save_state_slot = save_state_slot; crop_letterbox = false; - messages = std::queue(); + messages = std::queue(); message_timer = 0; } void rdp_close() { + messages = std::queue(); + if (wsi) wsi->end_frame(); @@ -428,14 +435,17 @@ static void render_frame(Vulkan::Device &device) { cmd->draw(3); if (!messages.empty()) { - Vulkan::ImageHandle message_image = - create_message_image(device, vp.width, messages.front().c_str()); - cmd->set_texture(0, 0, message_image->get_view(), + Message *message = &messages.front(); + if (!message->image) { + message->image = + create_message_image(device, vp.width, message->message.c_str()); + } + cmd->set_texture(0, 0, message->image->get_view(), Vulkan::StockSampler::NearestClamp); - vp.x = floor(vp.x + (vp.width - message_image->get_width()) / 2); - vp.y = vp.y + vp.height - message_image->get_height(); - vp.height = message_image->get_height(); - vp.width = message_image->get_width(); + vp.x = floor(vp.x + (vp.width - message->image->get_width()) / 2); + vp.y = vp.y + vp.height - message->image->get_height(); + vp.height = message->image->get_height(); + vp.width = message->image->get_width(); cmd->set_viewport(vp); cmd->draw(3); @@ -509,10 +519,10 @@ void rdp_load_state(const uint8_t *state) { memcpy(&rdp_device, state, sizeof(RDP_DEVICE)); } -void rdp_onscreen_message(const char *_message) { +void rdp_onscreen_message(const char *message) { if (messages.empty()) message_timer = SDL_GetTicks() + MESSAGE_TIME; - messages.push(_message); + messages.push({std::string(message), Vulkan::ImageHandle()}); } uint32_t pixel_size(uint32_t pixel_type, uint32_t area) { From c4b86eb4b11a2dfb17dc7e0a704d75609446635c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 13 Apr 2026 09:16:15 +0200 Subject: [PATCH 0753/1117] challenge indicators (#739) * Add Challenge Indicators * more * more * use c++20 * shorten messages * progress * more * more * more * more --- build.rs | 2 +- data/NotoSansJP-Regular.ttf | Bin 5733060 -> 0 bytes data/Roboto-Regular.ttf | Bin 168260 -> 0 bytes data/RobotoMono-Regular.ttf | Bin 0 -> 87540 bytes parallel-rdp/interface.cpp | 85 ++++++++++++++++++++++-- parallel-rdp/interface.hpp | 6 ++ retroachievements/retroachievements.c | 38 ++++++----- retroachievements/retroachievements.h | 2 +- src/main.rs | 11 ++- src/retroachievements.rs | 13 +++- src/ui/gui.rs | 18 ++++- src/ui/gui/appwindow.slint | 7 +- src/ui/gui/retroachievements_page.slint | 19 +++++- src/ui/input.rs | 2 +- src/ui/netplay.rs | 7 +- src/ui/video.rs | 2 +- 16 files changed, 168 insertions(+), 44 deletions(-) delete mode 100644 data/NotoSansJP-Regular.ttf delete mode 100644 data/Roboto-Regular.ttf create mode 100644 data/RobotoMono-Regular.ttf diff --git a/build.rs b/build.rs index 27fae49..7b2051d 100644 --- a/build.rs +++ b/build.rs @@ -15,7 +15,7 @@ fn main() { let mut rdp_build = cc::Build::new(); rdp_build .cpp(true) - .std("c++23") + .std("c++20") .flag("-Wno-unused-parameter") .flag("-Wno-missing-field-initializers") .file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/command_ring.cpp") diff --git a/data/NotoSansJP-Regular.ttf b/data/NotoSansJP-Regular.ttf deleted file mode 100644 index b2dad730d76d876ea9e4d0c5ec89ac699512f00f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5733060 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 z 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

      mJoT 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

      >td2BO60QM1hRUQmI+(Je^r8 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

      o_l1Ii9axx< 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%0DJBE`!z!qruO|CnDa~}};PFu~yd5}O) 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
      J2RWDNU69DH9wd|fXOc<^hr_Fv4%%Dn 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 z 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≧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
      7<(IdA|2@$_;QH^VuG_&i@*Vl*cC}~g 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/Uo+_?;#-q^j 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 z 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�~ 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 z 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

        UVg6Dmz)fedgYG#;7f+Iu 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%0Ap=7LcrBHxWY9hdE5v+4}I|W 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 jt-&cgPOjbSwR5^dsy?NI*A)e*g_1`^ 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ɭ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

        vv=NU*4yezy|R9e$ySw{lohlyrHy#`Jv?{U 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

        itLk|&`U1M!dgmR6rh*Y&i|J4!uh`42hQzb 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

        r9NUq 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 z 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 z

        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%0DTYQfTU!32UhkLRG?#WlcJomXkr4zR+ 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�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

        w?V@o-6U=%$eK!`U3PX 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�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

        K1GEYYY(OG)fi3VTVN4& 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

        3GixxS@PLM=rvgj?3ENud`4 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 OeI9%Lhi`R%^8W*Eakjqz diff --git a/data/Roboto-Regular.ttf b/data/Roboto-Regular.ttf deleted file mode 100644 index ddf4bfacb396e97546364ccfeeb9c31dfaea4c25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168260 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�vX?TmF%h<4Os z#24#TDtg;c9XX}n{ocsrwa--3IfDUTR9Z|P(ye(IWDBdH%q$+>u?Pjv$XviQA4AFL zim1uv2Ib%ljSB{P9v}5EzmDg|$$rQ8%Q-i|YXWaH0xYe4aA4ToTbKk4fk0Q>CgWA^oD{>-1oSAX?a z<9xmw3pHS#p9fDQJMd=zwceYLLICd%u!7|Xf! z%{JGj4*GiPt8@obO8AWN`t#vVJik}UIAD@-BnQc6NDdcD1npqBE+=QR7H2K_VYHTD z($>}3HArBxVlW6JJR|`&nbi^?^MMJK!;=Iq>CxfM$bzZUB`XU0!8kHN#q1%_4;zOF zES%l$t;vRa9FzxB!9$BQ9gZ=8A7f;;K3mIz@ttxb^7o1nYYZrmQye9cv1Nd-TmkdB0!K10z z5Ck)I1T2mDM-OABG^2PhLrC_A4FiFkJjUYlH{f)-2@h2}aF036E{8A;I)G*a;Hng~ zeWz2RdHEIzDIP=pOcrR;#u;oG4Fo1~lhHTiBT0P> z1ZTa}V6FBP$^>Wf)nyHUk9&-iF?TF2+2y!0H*(C&bzC>Si1T%u6^HMYiloX&U;&@nNkxTlZv+Fae7&rT|J|>ffCtmUol#cY^A!h+plB$jgHSN1C3#^x^C&_O zpy6XziU%_yC8u|vv&Gq=&Hhf1Jlnz8qqReR_+=_kmgLc@v>|GVajpsY5Z~Vhux*Td zmj}b_5y-%mgU22fJ(Y>|1Vzbchui#wful~(d)&i1nnGQtL-gf=J9}FWK*1WUQNV6kqlpP)Ig?>Kn6KkL^7W&s;~*W^$DZcpwS%F`0ME7cVEzi( zX0T_hnZ+d;)DmafHoyKJ%8b$Ivp~Jr>ypp6P$}d0fxy%lYh(Y2Wo9?*33;^zD)x8r(5nEn zy!H4c#mFuy+w8#Lw1OBGRI?oAdf2hg(e>*!{Jk_t`XcJ8Icc^bFBEta68{k5F-k zibtsZ72MP_7P<95k5JmHsCa}`&h~S9i`s8d+8KfkYf)dOH2iJVl||^T-0(+Pd@`%= zL#&SpsIze{1d$JE>O9aIkw?OgXKWf)6Vn?!0<%Dd`yN&(gJiNKm6@M0z-$9kKG1iy zr%*_UTmbhx19jb}Ks%lvGm*tq3(dWN)$O%PSa;OA_&PiC5;~gMyrpo>@VUmQMR`kl z8)TB+be#Kqoo1lps}EnrJKy>pN28}L@;`Usyy-iJ|+O{TWKQv?Calv4oLyt|Nbw- zH-6(cV%yH)?YXXNI@ETo>*DG28gksalu?9DUY*T=#3%;510SBEZK`8fn9vwLQs09a zG7i{G=UtX%$ke)qN0v#9G|9(PinBAzVWgeWFiakj;q)Z8xV}tafG_g+jyZb&Ex%ckfi`TEq z@Yv<^CxAt-NIv7{US!$JESR3X$KjL~6+D<_4@H7pZEv`_F{=nBX^xcl7VIxFbm(Ek z|AwDf?`ZoR%#<03*;DN3>zdg(Jm4rO!=jA_!+;zB(!;^iK{9a}-O*?%;9dA8QVx0+20 zJB*YmjO$ua!~Dv>ChnUy)6nsXqh zVz2Azf+a(yLU`~d=1|IPnix){B6-B6@IZC@kI>W}Eetf)b{+^os3Wn(=*5^BUTpl0 zl=Rt`Rdoh_M*44w`5I%tA!L&oP_%;?0pdE+=>yc2Y5gE$YqHTeFgM98%$~!`vbgQY z%xsM@<_*en@G3sC6_{e&l9dkEH6E~zLs$N$001BWNklt_%5kYlfheTZK7(5p<&+`zXr(dTe27xynSLyPaJWD&}N z$v(VT%Z1vgb8RenEysbu==a9GmXC^>P*P#2Vy*#WQ8PFYxNptt+n#*8)tO*A`LBmE zY&uwDYE)5H+k5l6SA)^moOLG-*yMdVtV0Ow)an@p=C!*!Fcf5o;$XS2saNv1U z)S*HLkqH?dvU%SkQ?%5@2_7YwpppQxBC|Jl9-lm4%ngk`8bgarjmJ>e zrEyOGSFRPS*UAiH;<#DX1)gx{b*)^SW2OdTjNjlL&MJ>;wML6|Q-RjKk=0PeJnLKE zu@<19qn3s$4bmT?_J>$-3+b<*;w2QkihK1DPUU4hce=%MH+Q&yy2bs|8TW4<;`!4V z_irBIR3G8N&4zo+El%M18_EmEEGj~KIw7BP@k6yXHKUxLRdTb zvuCKD1VLz6EM?|?K7*=iDE<_4Vn_ld!e>1?>i(2A!;B0SI2-h27oxYZz>g&M)-zd2Jw6FVCFp!T* zxF><-*K7_R>jC>#F<{?H8uVM$8Fu+B z2DR>-EOqeJJs-)MqnSHou;1!Z9RM|n>AnwtH1oU}2hO(lkOk2P*1T8k(7DzVkk#fK z@1D9!790J6Kt^YHO*)VrKUSRay95i0$Vc(yX!V5MIY=o1K*b9JXT;7jqEX1!TCpw* z&gV0J=BIxazxXeH5ikCKAHho>c^NOg{1LqL(o1;h*M1GJy!;Bz+dc=nv{6`c18=Pb zGcV@78wP2|@Ky4IPHPR1Zg24~f9aR-tN;2}@zP5#L8RcpgZsmyDlq~TR-nB6^2>PT zrC0IlD-UtLJL9k>@D)(7yWU4yktKry^a z9b7Wj1{sPB<8ZK`3M~+0++3t7`!h8VRYx$J`=IHS`A$!&JkMKeklx*sY$TYQ=O#BE zJM5{bgHmM*LPA)DXiBgjve{rVdO&dX^x?tS>l158=wDf^$q;_M;r}(urnAL|#EnC+ z6uS0cypb`_kQa!hYWLP4YJoyyU2uSu>kWoSY6iHAEZFx$O0SP$av1i#C1#j26}oly zp)xU(i!;TUW_{Ul#w7I;XQMD=A^e*eG*l4j%^;f@NRsv}bsIj%rN{(q9+`G=pOrqE zzIFzHGgJ_e;mKLuD{^lQU3c@dRdRpr`j@p1Pqm{*sr%sWn|lhnB}oY%I!ua+JxTT` z)ysf{s<9BoW$^UMJT_=35wruxXf9dfu}7du5Qt^W1+q~M;Lr&B3dS4PXbgYNQYBcG zA@LV7Cd-v>zKt>M;vj1ufK>uH!-~S+r*f~Xi!)($VsC54z&@+4Sk_m6? z0>gY3Xd6LbQVdig+ct;LgwJUBaF6%SKD6N#DFSqH+km;&VUjrk;CME1NJDspn#Bzp zn{7PL1cF8qwT_0^0O6Kk`3Zf6U8c!pJ%F>lO_oF9nF;$GatLV|V;QkmPe5%~_qd&# zNZOk3FEuQ9q?n?mgje~3f@%;->e8aCHE0}N#)h< zd#Qn&;(qO{(cC53j+p9=%e3w<#aaH8JwqnNgUZmuz^wyRfrUhhg`VlGRdiBdaUT{j zwFzs&;y%}0Z#kC=iU*msU=?OhR3tEr!AK(TF|48d=qhoBs8Yl73+eSl3Pg=9Z{C{x ztQxhtJu(T#=di#@E|f(Q_~hRcOaLrH5r>tBhR?FqXRcnL1&AC&d)=?Q*tIPVUYl5~ zJAgkzVm;P3u@2kRAkuD6y0wk%w%J05Y-@U=yYg#sfZVbx_Hp06mMJjbRnZNlH~^{} zDmF-egwh{k!9z&@H9U8^#e?Nlym0@F2d9_u!h?r+{^nIYck>X>-@J_H??1$Ir-!(| zzJ%va53$ONxPS8q4{jderoMvb?%m>4AL3LW;bytTDvz+p9i-o);0%!+1s>j|EisLK zToh+DyQP5k4(Xcq@?jOWJCLntPDZjO7A<$=z$hG5hlJOuotF?90NHyt>NE^*a5gNg zwkxhjuo`e#YA|IL-IX{RO3X}X;@)HRsWVlpd%>zqD!SfmFJnDbr6lzkRgXcda6jPL zeus^DDms_Cc(VgRIH|#|F7bJ8Zf=ZhultxCi}42Egq9@oez?n>Ki_ z85`&4NuSr_&p&wXgzx>{@5QHl%5TM^M~_fS!TtO9BPCgq6uEa>(5)kARsiSo*%oAH zi=pdppxPFI6|1lCft)}V3xeMy+foz2u5_7nHGGW zzyx>>Mp=)~GY-WPJ|}kI1DfvcNjCg=mu10o4<6v>fBxt3wO{+Sc=5#-QDi|~3H*)s zt;>Q>`lL_7=YRg^8uNPtjAOqO$qY*(c!WiH~iarIzB{tK{6tp6;JD}YA?s89hMmf0Y^F!MhXG|sK z0nDz;8PNytS3!^alRNN7#>u{){lGJ?SMge^kKNm*gEN`i8BFcnio#+AqpbTUXP;+9mWcrnzQ~jpFZIB2qg>voVTd7uvOy?(LY4iDv7 zb~&%fvwx$7K$KYLTWfKjdoaom9=0h_w{;5@v2|~Y1mg*~N@K57%q&6xRhD=^1Js7+ z_K`6}&qwYTHL?0;=9gLT@Q`I5er)*ZMfx|{eQfmbz@8bl(XeQC9oeTid#iIT-L@?N zXZ~ysVGHYuI@qdNIWX2l4JJ+i9X-$AxydEy7Yy*sMvQrx?wc{ReBT5mp=ACy4+r)A zIKJNl@U!c0zV5=keP^HHG43?xMy>}sW<|pYHN)hkoyQab++0uehRHIch&3Y1!e&67 zpJ(sWeJW%$3#R9x&E|a1EL?BC@%nr@NNc2R?`|J3k8AYd&CLCc)+b?MB@CPF>DpUZU(pK1h!bgk zRU2OfSP4Ay{cOBpstc+tah90Q!dGhP(O@^LCIal5)**CSz4TDpuwh~0W0cd2lPJbs z)%Hl99d) zsjGX~dx%{@iDn94zh$3derBn`#*bWu-l1*Ot(*^|N$xg7+h$5bDbTiIDT3C|SQh|& z1N08kAK_GY+&gW!f75aQrs2WOj2smAv9E~B5_eA6$*$O1O>MdF$Ro{<8yp|_CEXPTkD;3j$VwPIp(|8w||b$fe^gW zhQt28Z+&aM?|kPR;~CEnmb%HXsQEjxL9i)iYeO*I?dnTbsyIt)LzG)E<^F| z^(m7)Ut91pGU|IBYs{Wq>mP+UVFU1n#~ynOwN||N;)^)e16pf%?hDW3BOmz)KK<#> z%Ah9_eSnjmVjI?dKaA_#e*BjiXni@}=S#&0Uy5(*x%+qSwI24h)5gy^u8FGx!R&XJ zb8qB+|MpU;%G)CTOMm|IJXG65e)^iRI{GXzhDvIF=>6}PxO3<3S;=lGi)_50 zNuto39MmRtu?=~I7>R#e$rD8wb!sCxDk-D`7?mm>8REVJr}KO9oTNox6AO z-1E`lVmSkN)V7;sYP}zyM+p&EpraHeaim{VU*J zc8dVFwPSz%F|?KO>@&}yHb%XB>FM_U#Qa}VOR378+rlKH%65`3qXbl^{ACpILSHH!k48H_r^H2w60lEjc)&rOn){Xia_TGW6pnUl0?2~tbb!hQkoi$SOB@)Z{u0!_kjs1GqMisOd1#&(SXRMdkr3&>NU;E zVrjY`B6wgraM;HnOBnMi&Bbw3{ACCJDKMe8wi&}Z#@LuyQm{#y1`EM67B5(QXQ6|m zoR;C`tzMf^`by?Oo)w7iW;ejWqf`bXtRUV9Na+(`Fg=I1hohrpLduKoN6oK~dGe0) zOPStXeK`}Mwb7u;yL{*8yPRFS70t<*hlCx3@F)Io_Q%A zjOXE4oTlD>NWzncQ=+plM7x~T%!G_Qlu8+>>ng)$wY=yo`&fbvnDw00=ai`hKiFZL zk<+lVSe8ZhlW;y86V5$!S?&)v1=MkBaUg8x?C@9;>XifL1_0anB1!GZ+4bAN({l}# zF>afBvSwo%LxDD>pp~@fV5|&ZaUN{wt`gal6OQX4gu{tfYuv|T_5hnFV(*e$kb&A) zaO-a6003>3&r>XPP3uu(oc3DL*3}7^UgLokgowVPP>ZMRj61U-GM21zsGS|T9eky{ zOoIsv8?u425GdFI|E?@-8w?S|zDbU49sxv{hc4DP7@(X&27&<1>oh>JL8SSZ%CL3y z+RE#>G$hr7-J2ngOC8oEBrMU^j)Cc{Yqa$-7+3X!178NHuY-NuG@y>Txn+zipeXz2 zH-F$nYUSa6@e5e%sAG z;#KO5QVN>paHO!0$^B_|q7TcjCP24aud({matAfpLwl>}se$;2wXQ%H-_~8ahgUyQ z@ao417rO(NbPu50NPG{8E<*?T2Q+bEG2~aF#y_wIAfvf$ms?s zJ%L@ih8w%baIfxgd0dc>mpHTwBwWX_FG%@15@l2k>k>P@(Q7s)?xs#!189q2cU zIUo3wYq}<&*$7wdSSLjY(`-FZlH_|du6_=vzGmcu36xa5kyEnec5Md9;IL8u!*??G7DqX3H!1NgpD7}0}X z`$2&77X!LJ%FjIr=)PZO#{J&!$uNBLdGGfb%a{CEzx3x}7VDNR;eUDvwunE+jHllD zpW=P*dmo80rzTIv& zAL1;Hj1;chgWQ@IWvvBYG+{oE0$Nhz)0j%6=i z)pp+pWWPF2-lntx2FDsvFtk^g3Nd=N%Doo53VHss-xn)TqXaVh`|2KoH~9sIdp`EX zA?dSlqw#DHW{ec)iuRI1YO6ohe=)>*_pkKP)AFb7Qm=Y=g&4sU~9iX8$c=U8?sME#%R`n z3p(-qH2`8dYr|_IfU(hwm&JocLiF@G@oNB;%qG%Q=vn$Xy@!;h>t<(}F{?^hB;bUE zSwa}zaD;wRoDT3WFkuUUSoRPLm1%AE#`S@YuJaVVSxs>wXz^_Iu(@8wl=iizHbm^H z(P`cToawp=|MUH&D*JhL8vxl;%XH4iAzZQjata8l(-{(<3tNY~-3|m};wHD$@arA+ zwaA{27E7^FFX35ks{)TSzh7fK#%oz?*MLVFp7>LU*YFHH@vQFb9?vpdvw_>ppf;f1 z2k#pX*iq97NMfK{DPxU~q0s5inrCgI;cY0Np-lJ1-wTh|66W6khN1`QmR*W2HE#9v z^3#A&1n+D=TlM#?I?RhThpn+#>%@JnwWh(QJbC9DvoY3UzCOHuUU59inuv7GtL?(rKg~ zcSv*tj2l?W6UcNO`+Nfz`^RwS@&cFj2psoHMgS7ao_;*60A&HiVfAM8U7wXBZduj^ zxbMmujjAOhAlZOMLUQx8kHozrdQoqm+3h;FI^nn;{omxd*L6skGD>2-66>T)iz`UX zLPgeVou2n)r}cUp3~f6bw%I14Tq@q@_?}pbDp*?ppGh-Nn)j2&F1~i{8gAddjc@su zZ^3)s^B(-OfA-HG2+D2iw5veZbH1Q2H&*j<1F~1KIv)j~jQ9V3K=i|axvwN!YUA055WsqX0|o|M`9zr|&A4Pj zWn*+SXVfxD(_ z?4*G$#m&loLJRb4MPksu&{L8po+-$1nALMv znQ11cijwRIwzwynPRu!^5W78uPJdY?pk1f_QF`jnrTa-Lb5qy6_?by+Zmo4lcz_8Y zF?MwC2x;-+l_~*8%A8{fj3M`|BrVdr$})}dNmDRZ&T>6#<%zMN3OTWyAh_htom+{K zOY-fZq^!e{Gz}$UlPm+1!Q?e&NR$Lp2xpMSwTpqZWDc}Wrb-Y4c54iCZ}TAL`K*Q6=k0e09e*uLh}2ppg*zl zk(4FUhF@}AmlkR#>~dj7+xrC=b?sP|tWvP#zHm*Muh4X5i;E>H>S0!$<-@IuRi=h$ z38)}epJs)ULP!E*NO;MBn9bSLbnoD1?|&5ZP`^(Ldt&Z-KG@o<8!1`<(^*)B1|SKm zPnb|9_cexPZ_TY{qKp|VY;gfoLX)ED*T&q9KreGgt!rpz%yK{&)jdc|BLJ4%OV%XT z1~yxOP?|!`5|Yw#Sbg^7e=0XmVovUVEDcoSe1NRB^!iY?_q^6rgS~u#(y&QFjKA`Z-%YGX}YBvcj1xn`kIa46HJ%46&d% zx(|3l9-(yV!#DhgGbky@q@JRYaU5l;!#|i@Y1Gy#((X3)>kMV~CY}^H?4H-^OUn2TB^G~ENG9#3xHW!3@Q&HgHZd9dHayETAC zgy5kLuzF*<N0miyp?c0pS0aa5Sg`MbGPK}6t9mFW?`^tTk%)(`*^xo*H{kx_ z6Z6sY07jhytpl?9^l~@vSXBwtRn`lcId3|Vf!Eq5#f(^<2t(3TctnK5QLLg^S;T1F zGnN1W88apKLKXLxhRlrPdH_(7_!8Xi0(=LlzJSMW9P!s*cY)VD2_)PE_2-f4Hd?!h z-ExV}cR;y<`#}I)ROHmby}A!|$q9|sV-}>$d}ZE}gw!re0ryKe$8tf+*OAi&IzI>M z0>m!;aV!^)ItvI$zFkb`mb(FMIC0_NRZ0{?0)w9mj17`83z-ys`M!GIK zpA3Y>lQ*k}bqdPVaSl!A1?e+D$p^)y6f6$Z=AaNT_1A*hS5=xeJ=@`DV)R!xOA0&x z>)PF`nTXJm*@`1_i(L=apGlFXiXVdvhxN z6Y$Z0^btJq#A7O5%}6OLb4(iL-EJp_ z)8HPkxN@pBim@8Pp2qjR_O-9Y@p#nhA@BPwZ}~=i>|-CpcYpVH<41nvNBlm1{No?T zcYMcpIBUA8w9XkFwP9Bl)NZNT*{`$Rr#OX@?PEuB3>^X>{5!)r?^lWr|YxP>}S|G?h*ubPaLx zRAEnHrcgu=3lUqR+XH3t4Gs))2U?@|)MhH~Kx|@{tj5n`USbGM2m&K1yxkLTV`p>{ zf-fm6Xf>EirKA(@$O!b?*S6FB9srk|vjcL%cox7ahRBti#YYu`VShXxPX-w@U4J-$ zZ$O@f)xg3CF?($GHUOarc=~g147I>?lb@X#(c8pgXRMixNVkStgK22Xz~?E=H}0WQ z@b_s=S<#a60KTF{jNKFax5&1QDa~W8)1*4EL68IFnC(I+FqTJ1gfCA8NP!)p_rTsws24EzQ#S3Bioxr$}V8~?6GP4U*7u4t{t5^x?X<+YHbf> zXCSvZrQYH&h`kw?gnJ3Nh#s8cb=?Ltvye7)jCHMn6_b!v=4sD=WX#5WDL&tZDjD<7 znEM=()6Fm2_nJ<_I;Sp{} z9QJ`Y=r&K&wKfmLi)_>pNHsSsB-23mSoHeElip`5g0^9O8$)fs-(#%@XA)5Wg(7>? z>;$@7n9vDxG+Oi+SYV86I5W0ulN}qcB$hh*JlGzQQu2L$JS#IJx7X^j@6%?L{4>~@ z-oyDyQ&5*aTNL~=0e@f4KJGj*L*shj&Zxajb=H=o;KLmnp0!N_(UxU#26+St<-PP1 zmR3|9SXzB+=2@Ns^RZ5A0pV;B-`6~yA;RFa{dd$#IW0c8Gq#?eaU2+`X(-xU0=;>* z#$bC6(2Sn-M1)R+V_n7GBzQ>2duN}=lqR-MSrFjXM#}0mt6zpy<?cx=xtuf=Y?) z%cvn2WzT0yCv5Qv@H*4fo5#DXZ3d^|$IqQ7Ki;?=;u*eGVEN#$Bz>mS9PH-V6IIv7 z@J5aA+ZfJ6$ujPn-KXdcn*4otSM$aC**>TEz^)ye<{`jUkrKgmG~Wx z%23@Z7hWo{aBF?}a^YDo7v^~tL3L}hxvddr`r;#8h*t^}{1W(jO4a_0WZ|BpQ=j{H znUq!!4v|SU@B@G6@8Iokf4ea8QbNi_{qD3;PeamUruOCqV+XVpaRdBQ_bw!eKPRQ4 zj7?!hl^~bPIisY-lVA;~1H>2WxUM+XRU1Ybd*>pooUz`8X;$k|8o8V#XT1-mYKNq9 zQ<~W^v2bp!c|jsz<|1q(i2Qpity^;OsV}#VLDqtN@08uN-7SjSXyZ;7)=f(2YLhd>Ws8jrPwNY=W_mY4W)%sm^Wfc@;U8qWHgEI zq{x1bhXd~2y^DMI?&0Rm=ke52PvN5<{ixsfPyGJx(f zxe3nOgn4zf9dvhnf$@#EH7(jQl z2bib&^0%adOj$kJh82lPX`^HooHYDEJ+sl&12GN2)htc)TrtpX(IAy^o%gVFp|CbG=`Yn=MieuJc&K$BI)pEc>tB= z*EX|E0sq^22RaEG5*s!uBpB$bkW6E;^`>k?2+Px-73AQHtbW6-$y(IkDS_l63@QL1 z4n&l!KJXgK(W?4(itM$jEZpv`fUk3qqn*(y_(89&x;J=9c><*e^R*6kwKBzA7Rlmk z*|>u;&6VyHhM1LgSM@LZ-j#AzW^hrqUOBOiL65&P`jx5^9S17_O`RV8y?G3bTa({O zMedEA?SL}l;lnt)XTnS?l4QxhZdJKVNau&Hli%jvuCu%i&25YTYoBF}>0CCs# z;DA^h3R?INQNofJk%`lg;Fl!@3mI9f!c>=gB4_jf+AWw(>aXKQWfuVKEce~cPC09| zN3cDVn+&Y=xgr*C$HCyO?sETfX*sSKE{9$`kYO2MwzQ4>L6OzShBO zJ-Fwl`O;26DYKk;C%GBywR?w#wq=Y!<1GHh_Ia=B<1&q)&iMStAZ5vQSbcAAt$|w? zcA_sJ32wCh$+6TKY3}5{|k*+2AMytkf-oC$482UAv%F=zYe3%UhcCvue_w>sHylu~>@7bYx)K|JHD{`yzq zAAIodW7#D=hsp7Qa|4Z&oP$6_`12swJuFuDO0r+?hih%Weh!$t>if2StFQF+Jonz_ zK|5dhp3e;sw_htSDdG|deT@C>`Wh(8N|Xz4k4YCg^5_L71SkApe!a+Az=$@!)J^JR?r5X!c8uVi_D&; z-bTaEbEL4!dl|tdTaTQ`M5RP0tT9rlKQrTa6ow>YPNQDe6}gbh%B|ReN)w$Cpwci7 z$*9K2i`R3cLt_HC%-eH2Rqb5elS%;15sGH4lIW)y*TYhVG|kvDaT;^_{abFf5qoM_c?%p-~7$r#DDgme>*NOFR|9@Y^T;LGR@wA1~ywLhg{1v zt>?(ji^-r8K!P)p0r{M}-40Jb{WSjNzxuzh9vj~Eu6N&SzOO42AyrJDs2B0W==VqjGa=^u#xNx+URkN zO?Z|2C8sQ)nK8_Cu;wa(z#uhnGFqgh0P;q!MQ2gl6KKE%&EAO7F2ozbC9u3!a-iMElHW89t}Qffi%r+w*49 ze+OSS`?L+6kP?!rL2~d=wzOws0y}_8X6=$3^ost<@;q8-Om(KVSSFZ9XPfTtkkym3 zY9eU6-F8ywK4xXs?&&G%)zM*|qP`?@jSOm1xVeF_2Xm>O0O!wU6@g$PA9+{AR8 zSdBA#aO+|1jNjn1=YG>0zx=q5`Tlyc=aG9sx>u^Ma|?QkY(KAQczC=EpvF^uW0K76 z;CY)FV6VBg9kJ)DsqL-ab7q1ftd!?E|DdeKEiLJIF?JS*hM z*-0h-&6uhRIJDlT`!&FlvH$0^Am^C@9X-zD_cN3k2pLLv=wP8~|4*TAmG#N)bvUV2 zY;Vy(o*~_z*PHvdRyk+QDj|9*NAFo1>YY=h(GTeO2rpmCY*E8;u>$-wt))YtMrCs%9=Kv_oVhEG4zrBeI-{oh7ry0<#tdM&vv;BYwL+rRyt_}=gRUi|OB@_&G6 zoZnlFWLxuHZQc0t;WXQx@9&(gz*WHP)-(2gL0*56YVxb>9`OGT}8P!@O8J_;luyaPvcmRDl;f@Ad!W>WS1!TUzYN=YtYVa zxA;aYo48KoAkBzLgp82{1F(`L|58peV)o+J4yM6)0c0}PS_hf&ds|i7)!mOu{N~am z%`0W+UTTuQE(N~>2eqmcv?Gxuw3>a7FquKEWS>NBH z$&tn=Fj*HRI6x^LYNIJz%3crPow9YMkX+IZz3JiFjp-nhRTw*x5;9p}4b%%re0g&& zDlbd=HFBRyyA~$>DvK~GkH@1+U+Zzj_3PL1j(5Brzxu1c3IO>1|MwFv7rEH)T~;a$ zuU!8qE337FSKUui@*oO0%Owrjx@9pao6DFb!iY>b9xo^6$)`T`DSYG~{S25A-uQKI z!f*cT-@q^Y!Y@os=db+AKgZX6&Fk@@4}A!4d)wQ@>o#ct@9Dd&?^l7KwIeOU#uN4~ z&+Hs!?@{Vg)902DLAn=h7v#RFuV^6&tWZmg`FWD}f{CqHXa z{@!PXtQB_#taQ=#25(5aA;Vi*4sfwa5WmVk5@8L*R)#35veHNbAX)>=(9=Tf444ra zoy|5FP*A$5XVkWU%9{Y735-oDf6f{%q(vz8;p<9?bx$A%_{`4}ffd)ANWLRudw^)- zK_=m9qoFkKSMCX=EU4}14W5Asv5BP6h?SgC8#{}LkkLA8V4^Yj^9T-8Z`f8DDO=FU z2sZ4k0!fph8R92t(r5$5yD*`Q5nn^oYpgKwqHY#huU?hIn!pNX2a33P(<}`6!DJ`Q zz?+2mkxP}qO@gUxkFw_jbz-JEh+1fp_i_`Eru9{tGV?*Rz_>(%b;`<8G?pq;@Wxf( zzyN}x!BoniWDk^VQ*fU*kb35oB8=NCQi=U&;7=wUUCXocowaO)pAsCT>5Q(OcK3VTukhA(;LF)6_)iZQ1gn0@b z5ieSJ!`c;Srof1^&pWIQ#`he#28C+!0qq2^Q)njG{B23?mh>7L$fat9k`}a$gxKz{ zdFYn1jQ7IiLr!M(|8##z_TVmKo)PsakjURRGCGSTNLo~R;mo~g9gt=Cr5@<$toy!( zt&u!mw%!c@v*)Ha3t~;vI+naH22r0ZqwIG}n2NCDWSNjM>2=V<6=+aZR0_V9q{DLf z-fw`F?ISUSafC?18Tk|#_O-6C=|r?RF=c=-Sb?0D6Wb#L6DI|Rr^V|!W1611OmfB% zgyoo1QJ|{3=VKOwcwHy*-rVv<6{5dDD)5t7KvVn8m zpDkM(y*I4uQ9$O-lf_la@LJ63n&_3zy`zwv>4_NB8rpgn)DIxsL#oeVz58dV$IsyF z-gpgP@!E!r=aK1o5N;x+yJ-Ec?!6reU4})ndgXafEPF7T192!M{fb-K=m0~ezbJXb zV$=1+&Fl(<2*mAx-d3c%0=*L@1@=cIyb5=Y8E6%kts~J5^p>zI*RXbW zg_G4ZO)Yc8j={*5P+Yb@si=IS7H3>UWjM?SxLb%$_g zIR&G&iG&W?K+c%gX##IejW}OdIj=fuKPnS7W63*JJ*Wb$*U4)-=i;7Ujo~WGq{>t~ zQ(#&#vif8&=#%z7omI&P^%Ljh^$Ai&S2ftpn>X>pKm30D&hP#%{_qd~7#UJi^N6}Q z3rL;|;d;640ba@6pmTWK!vuV7@uLSZM$g$6Y#Ft$WH!=OuX{g6?>U_8oGl-pA=7xk z{3~fM@N!d`|0*y}U+y5T`@PP&-*uIT$2lhK9P$AC;1B&bc*|S<2A+HFIb2*^;Ns%K znJZQ#m0iKwsuu)ZS$CAm#7;6`Co52ccsOVyKZW?H1d%iH~XgYtw3% z6R8JRH^wfH(2mYse1$N)1&x{D%*ibF4y(Ry@5iaJ^o>Xhgk>qy zN0bdXh2NQ6o&hxSrr-Y9U?qlF7=zEeabt3KZ+&7QI(tG3##FMWyc;kP*%!_LTJm{` zcDP42(Qn46R!}=8*vBS%%idddc>-y->D!Sl+q$w10^k_0bNs*C;zRyj-cMc%YH#lC zx+{B`@Yk7rNgC3VsJL8ESS4-x4Dt6F1Da@f^cjP(l%i^atV1%DYPJv@Q;MhCwkjxW z*L5Emid$dB$@kW*QP3wwP4vo+%uY#fhKCaoW=6=?L(oDX44w2Q#KXAY4Rd6HZIk7P zB-t8EkqI^p;DI(na(xCH8hR%28Kww=+F+aB?Wxq*_%$o2W83R`Y!1#vHX?^XO9ZgX zE>Cjbc-GfikwZfEHbL1M@W?P7%tcuj>v5gfcHXdPNM>(1VLeBm*ONW7&oxa1N>avj z&m!~MY&ZlHx`t>HDj0fw5qB&^-ww;ys{yd}&$@ijZe`xH@yaC$c8EQk7I_(o( zYl;X6#eFFH9Y-cC`pjmGtTF@iC;Nme6io)u*>jMK?w@S{HPbb1)j=LnoUjAZ29#Iz zjkK^nQSz|X33U!L44#Ph!L0M&CnvLrny z(#|8A2Z$EFWvsARdmfL+0pz)T3{KPr+jApc6JuODi0+d@=%CN`Aa=(7P@s|fH`}nc zZ9vyp_fCHHYWrXcEq{jW*;p&`Qm`JylhVAS#~>*=V=yw4#~D0AQ61TYMJ)Qc;ClfuU}vCM7oH~+_qLwutow#h#~v4-$zK}75#Pe$n7pkpMRH}MN+%i zzQfEO)@F(+W;!A5$obAQySeqL9voR8vQ|n`n-lIJH1y*=6gq<1i)iZ?(C&Q>$2)(7 zw|vu=;f-Hikng&b^7Y19LqhYcQOpmiOF5Q%Sbe$RiMqw#*mqw1UUCjBkO}{ zs<*|?fl-!W;lpkA#ZO9vFmj6hi9X%5Q8m>nibA{hZV?jj0N)$n6GpFZqX+(2U$Zi_ z`@XF8Zz-F7Hdx~&I%RP?$z+jGNmT%J@QF>3_06(xW2&F5{-QK1Pt5DKlp<@si|_S6 z{P0iX$A9AQ;ohA~8F27m%Wfo1)%^|^uLUuCMm=HFe$Nk#O5*%v&Irk!78srMyv6GYG7{8Bs74~jOcrV zG8!9FDH52~PyJt9s-;bkz2Dl7!rnOZU|S<{TrW=yozI1VS*mEs8B5tIt4SLGsC=)J zvr6PO2O}e8;8+jnkcls;*VI-@1wcR`0@ikPyN8sLfKt@mE0wevfTqlo-eU>4r~_CC zjKR(oPd@pi--A1M?%>|#rL3308eA3$@42|R@bD`44(4(|`KE;a~iV{}VsYzTDW}Z}@bMVeoIg)z3W(|rkCXE$8*{>Z<(l+xzjXu8H{m1;JC@1%|1j#x9 zCubYE%}17NU_Qp36*T8Ki5zUCXa%s9mz%e1Ya)k>;S|oO&g4uGE7oHp=z}9|Obu{B z;>mN)LI^UAhTnWC}`wK2&$P@{3K>>%9HiG^3T)Q80xK{%xk~J~pd|iW%;C^SKR1gL_Z3dyk zJ1($9)uUUO)WC6VlhuoycZ}N36yE0Rh!J9CfgzLBTR+WJifTdfTpU08)QdH_9=*7+JAj}mw= za=z)l757;IFvZV5dK^#IdndBqt>{4K0#FQP#E%wB2_(jS=K_ygyZoNuYdjP@uPqD@9MMCov7gZXi%Rz zP6B?UtfOsR{jfyD2jM_3_218B0Bwm>SN+>nmI7Ox>3)FcRoK{7)&-A(Jzn*B9|gPI zVhiW)+g0~IJt{zWmAAncgCc+F&r7GCKj_+T{S6-k_HI%9Qyii2Qap-D-MSP4u^vSuCa)+Ms(|E8>jomgs^Z7u|JUiHehus!Zp~-u7fdh ztZ?xrw^lU$TCH^$^>3thF(uQQ9|JSp8%KfJ2oOZj$0n@X-w}PoraeT1k(QkRQFcuu zYeJZlJOA(F@p1sX`upsjZaq1-iRiPZ*w*8doP`-}2F@CTs~6m|EJLQmjKBFe--e(2 zxu3%~fAcrvjcebXySTn*sQ}e`HIGS1qEGA>HJ0t3&T9 zR!?(6eL4a7-1;V^=^B_-RlKJ0djLKect`)ls5Xhd((%6|vtO)vst;Mm9!4j%X9VWV z!_i+?rqE}(-N|qw))ZSc-d1f9+1_z4vb7S==6L>ih-T4c0camUmc&j*q7M; z6|n^;vxNP4TkmH|lLv0BW43+qx{6P+)#R;K+`fGq-}im*!8_jZb`Q~;z(mkFlUC|{(Pwt`@c$m9%LzS)pdQ;NJY99$w3ob-_mnbn@MMiei6xiDv`zb4 z>naJYXj8FbX~dQ`Y7Cvxl|t%>GaB`HI+IkSN>AumY*Gn-Tk;MCD%Fs>|~uFT?;lKapZyTI72 z9qbRlFy)6&leu?KWcMOP*MmL(i3qJ$Vd}L30I~XsWtAHlgD_6IJ32abXW2+V-e85t zz0cmeBuuZKPM?r8U_k5@Y(L?U_Uj=_=7F`byO6<_GQc!lUOc*J0!C`B!=sDGwG)=l z2x%#KCrq6LXAC(bvI~RT0||Ve5|+W-kc|JoH`$B4FxGvhv1q?#m@%wUY;QH?LNOmt zP09Au+Z1K}K~m|SbPC)+eN{Kje=0OsYiW44ik(6cHe(@W@(hMrD&%Yjs4Ts;I?|Ve z{BvDbv?^>`ZUfkh=YYu={d@?2odu`sIUzekE&@8XubeB49RTetXN(PQSloMKGqD}$ zO|no;!GN4aJ@>ojo=fj3{OWFH5Vr$PDMhlMu z^9j&wb%O(t#?VZnR}9)rR_#bBU1Xcv?!_S~w%rrVjTo^Zy%cQ8_! zMP4hZMA`m!u(N4oA7y{8w@g4AaLmetja1Z_^y-)FO)7Q&OF0a-j8!QnmClf}zoJSS z9=rB^!d#WJ-_$|tv5oX;_1GKr1STmj`9BIMh)&2<#FJ6$LGHA%6Un~MI54F9jD5|Y zS!J9$!^v6r>~irF_PI*k%|2xs%7nVfpqkb?*4lA6R-hBwDjv4$v5j?L^&<-l(eBU5 zd8q7rBz9)Juu@0*wmr9zQ6JYx)7MSKt~-NULtPKDXQ4R*PNdz!-0T=Y1m%Rw~(1C29Us}rCzWf{=$xr}?1J!hs$g0fwwVVh?X zNFCGBydH_Z>y(7SW^7{z%WO|UJ{ii3JiYn#adw|F*-Od3etaOB2NSGumCvSj4+aqR z+R;0(s?2bng1CqXYm?WneN_bu&{oO1i1n^1)UJ}rZi6iCxfnp0 z>>g5U^^*a|c#R}E5mFqZSFxE%sc5(>q4BuSSG??_XE)Hf!AB8 zmrvv7Gk<_5UvC)3f0I1pv1I+y&E7_`hM`TS^Z87f`^|%LFTbfo9K!sNJ~9 zFoM^H%R6^*xN{d>ZFCxUbPD07%xKimQ%5snGY?hELG9K7s>pdoPWMpqEiCC7Ea`K& zzIz5Y_Rry3c>%e<0P1&;c}40KosZs&Nbj$M_fFI zsii*;!0=Hn@}n+<`=Q%^nZVhrZq#;Se3p&6DPGQ56kPQ)SN*Q7M^G$INH>{M2yb}9 z>+#@j7qW1_t77S%;DJx=qN8YbW~dL@;4HwKc}3c}qsX zBPPdN6CN256Z1Lei9u*zk8D~8zyr%welEFel+vkX!Inj|WdlC(#1r_|Z~az(|Mt7C zU%!s;{9Etx-~YS6`@8Nb6qCSx0?mW5YYfA9Pc3XHz88C@B6}_RjyiK|N=)wV8N6jN zZ0$Sz|6*JNTd$EFVHO<%9t^ga1tG1iP800$7t`msYOU>dJ9!73Ch4pN(IpOc5#ia| zGHc`g7qFS8)Yiy$Imhxn0ZgMs0_cPtdye&E_joYzn>RuelQ*!p69hD|#M;QhvFE|o zzB38}Lu*}E5187ryCWOnL~6ESN^TjTgK?847R01t@N1^)F3$<&zE20BcUxS><~=ed z<9&0Bioj%utc%F@G7xwajQzwjG%~Ub2;8zUBrI<^NxUDPm-(c~-}(hcAX9=h%CvvQ zeRjJqZxhPpevJLam}rqTY_AgsJn?$jnYb+`x3yVhRT=|ytH_9-k%J|NJ@e-nXam$e zwOTj_Oh+cCvP@d0;Qi{vvx6GUEXWFj)EkiDz4;~K1bi%US)-#cjz4eM~3flMJ zZRr+8wN8w&$f%F!Y1aWmeEy&>i?ww4{f2O>KF;Gmn=I{k#D zX0`^VFdCn)dY!!W1dq&X+1tjo9s2^pKG$`Pk2-yOp2lZ<%4RU;v|1IM5DRp@#`?v; z@oi{T{CxJcM<%2135Al(-dKj|!@4SA zDHm$%CVT!=*QVq_dNLgE9{eUiI3wkbQYw~oiIQK$Eu4lH22JUjE8ZaC8awjC5>8tGZ4u=Dd$K%9Ir;^dY!H%W)9<;4twu*`E zo*fl9QC+vKVYbS**t<0}sNi9)-}i?U5eznH~g! zz7+iLQ9jRu*u3|vo#X43M`2w)jH&FyT%cE)5&EF__m_?F`lyTie!d#_OJ}>^JvYXp z_~Zc>7Z-T^@f-Ny2S13%9={O+Qj)Wd%oCE7`B2pGzm%ekQc2u3aK|RSIcM>DF;IgW z7L&wvVHkjw{gDz5hl3~ZTDq+;8AxTM-HXxI#C+eIAFf~;;Zx_N>~?@fnNBP`qd~rW zenLsmASx}~xXIyfAzoI*P)KDBj9U-in(mnvkLKN{pGUySxd`TNiOCtXH70NB1*Y$# zck_H364oW}hFN(CZ#Zp0g-w#u5@dG9TI!xYYhG9`BTjIy9A@=PD(c4?8YFMhm9=5g z#^d3D{eG`T=#2H)X23#Oxx*uIFx|NGCOucKYpoSotFc&+nKc0A1So**Orpm4ny>j9 ze8uZths(>m$c51QDl$Im_~vi^CU0n-e)?&kvogDd9Z;)1H)aFD6L=S8f_5#IWiLS) zS=hv_GEy4gh5!uRo0Qlv8>>&G)6K(K*qL7{|5Rp~6_px>t;{J>f7dMDvjz~UZ*Er) z!<1j=iRO@qgtK24j1Y8$dy(&D7zRtydd_HOSW4Lwt(RS%LKB&FueHF%#AwRS z_C~$6g@?Qq zSe63l{quUk-e0r~K=#)vWl;vAfdx?3wY-ihaZ$SgUV$;tyMqd?%egexH++2%5tfv7 zZOAiW41G#TtS>jLEn}y$OVAPg{JQV^TTgXoDC-%L_4#d;VWfI%+yv|ymOezHT1YvC z;iLwzbYc71{<{?WJn1CxQugmymr1y1{647SNZ6C?>vbz>wouMq1)y)-(VOh8>#?c2 zB@QX{zEf7l6g&INEd*HoZvph+c?lvUlC!;|jT**)CS-6CZA4ZOpV2kjC22qwyG;-g zp?Ihjo!FB^Ws&(3Z)NFz{=k{#w1}!1>hmzmG#+2%D8^T&!HqCMJl`) zZ1bc{@7BEzW)LWiV8fge8nn(KS#zW38A>(#%ods@*KgxVZ{efCeaqCJSquxw{XvJ?oT`+9Hfl$oSR`x=OA8(^yK8M5Y&*1jW zPvX1&_BY`*uVplT7OlSkN|#_hg1CdT)H(J{W+}k{Fmkbbrez^`$bv9t4|XQ>-i2kl z63Q;4EEhmdTGwjOrVsGh_q)?X^zOhJ0H=fnwihHEE5L^f)K+ld9l$$K z-f0aZ;bgWCZrPj(l4l~@s|0--^Ht9FG3dATv)^AsJys8-YptQA;^e4ELLjri>hnO$ z_7C=rlxFJApeyYy&*6+)0?j!e@kb$Z zZtul8i<0}XkhjnIgILDffZh1t zX8Ri32kU--?YZ~j09YvSj>k*sU%gYnW1EnOQ=2 zX!x?2T*rN2put&`u&$$s>r5(juMUigWPT(<+eU4vrUt%Baj|TC)1;VmdC!JXV(-Zq z9admd@W*j!SZjgViixd~lK~oSnodh$-q3>&k4?y<|CwxHBDat18IXKm(TSw9*^o~d zc+q1uPA9E#kk5*VLEHnYZSvv4XoQVzWuG_7=H(uAXKf5$QUeakR0vLN*?c+;-0gNQ zXZ_iq{aO6>Z~r#-`@Q>oS;2hm+BLlQz3;`hecQKbK^;FcpKPLLmoW~8nQ;(VbpBi@ zu==W3J?>4cNY~iE{<_z_&foj(+qbc~%=eoBybg9>nE($M%f|vg!oE`1 zijF=tZ|mmuEOFPL4SQ`ii-Or-D<%$a&xBDVmWdVTtbxi{mf*DFeb5U()+?Mg~3{D55$C+WnO0qQQI!jiWqUZ3bPhDh( zuu9R--Cr9txbN+u%786|j(`XymuWZ|YX%!G#9>te`ToDID{@*UfP3r19Y1^T-Q}xW z#tnCxR4C><-ISs1Y#kk9Wd(E{u;=Cjv=Qc&6i9BGm_CQLZgsGPNCq0)^*+PeMe;`QA=g!`qr-W-E6G_dR&5%V4VY2Bz-!EqapYT*i<&_yXs2 z8ZK*oi(3X%1YhHDThtR}(~LItHEa%?q!4Dw%t)oUH?;X_=Z!K+6d}p?o7Sp>>#>nE z&qDc}?Nsp+*w|$m;AZdZ1kOcXN@S2ra@*WO{19toUxKFUq zI85xot@_2*ZmsKyGH%;9$@6xqD2ms`f8HhYbfW06dWjW`n$;gXWnB1RE6dlmgpsJu zU{d?0Gr=(fP@Daf6BGc;>8!t@zkUFYw@M`gUVVRYpj~XHGBLVL&Crf_0ltHJ=XulHXMPX=(ObR@Z~n&Dpz~*u(p_|1f=C9&si_yPhRk*9$f0i~8_e2(qSLT^A|tEl zdxwFrb`OE$am8+bP0nn}w*7*@09Og~;~tEq-~;xo)()&eqX4UoQbjHasCOhzB^6xX z?Qq;BtZk1&PN?gGiUr&X2nFjZXIUzFVugBdM`;>3`#tb;nKi#cYmc0!dQNOg7}cI7 zo0Rs!WZ&=i$XV+OQsRUTfe?D@m_ac}ATkV*624E2cw4h(p=ARDJD+FvYQ#3?@KIyv zj=gvItjGOhyN;#4TE$i+u;-1zElRHiL|Gx8yIl?O#dsQg>CaybK)c;It^!#fHW+PN9G(3>nwd}E@a8w;zxuB4!twHeU0JXw zh$B+ehLSUC6;LLwqf(@yLvB88UX}$-&BF&U(6O%7T3Wb8-WiF3NjDh)vw%T_`VPd+-tNv85J5Z3%_R5H?yGtdV>+Tgx- zsiYv+sjvjuu9I31^Jq<2Hw+My155()idUNe#RWh^4~>#BDN+`5HuD&x@W1QPSau3} z*rDfzEx8}6*kp>YE2*n}KAC#)Bz?-1+>4S@kw%9l={g4qYuA7#ldi>s^LRYs&YgSs z^mvS8`pi83_~Q=91LEODECtDp8#nyw_S&Wf)pDQSlhrAV%*G~%AcC{fe zc`2Br*$3tQnO3b1PGq}<&0?%C3wt?%1xQgmintH(#n80mI)kc=Sg>RhCep+x9S8WPs~ zYD{HYPbo3hKEev?I^=r2^CUTQP`+8=9>Np3`!EmGmE}D*lp+}(sq@8r!mMbg0NRo? z{=)1U|Lj2)Nq(-iqxv~lmtC5_r0in{VPd77vYHrBf4|yd_zt61NfS?$9Sr9Xa>M{u z{r$anVRCnJ|7K&7O(#TSfwc9Yw zWZODKu=A|Tv)ws4pvY)IQg2LcrZOc-D-UPA`B}>A%%ERV20XJgcS-lbrs+Hga{vG! z07*naRDR0D_4nzOB_6mBXf~41h-2;{w#nwTc5l8I;%%VLV?;DIjBVp~-;I6f!KJ z-2ey3l?@3r7_0_H>iW0+$i1Qyp`?W4y2>?WoY*F8|3pT+tmUR}szJB% zk(5OZLQX($tNLjVTL@56R=u$LdK&|b?Vx(U-(y`@AFvJoa2XOZ6DW(fruk1NRmTBU zK(A!}33v3uoeEeU3S2G-t?gKwp&L+qUyqizDS6J*$}wOdrPO(1?T)mR_E6$q4c$lx;U z;x&a`H_5Q*&WJ6g3`Vk9HgK?xO9?6Da~K&xyfszv0%7YO^|L3I`)w*Lt}9wUAYnzn zd=Zx~K8?@*@h7mOTX_3B{u2Ptq2neJ-38H#l-YsLoTUeA%6?}eWCpl18o|9ydr(_+ z6~`IXH-SN&QJau+N>SD-gfvu^9cpK!e1RqJaX8#TS@uZO01_Ln2)boTzE@iHOcr|4 z8hSqn*`WiqXXL!YwTlIZ^+nvJgn|XN6?D#EQ<#=4fGEa5Dq+-@<|%EN1)UktEP;}W z96zf1Xsf>8oV4B%!i@Pk!_E;%Etzvt<&@Uft?TnR)}9O%#P=4ef@!O)r_r~YH+gf$ zJBa0;Ez(bSt?7(ensY)a!?w$7L(0QP+ADyy?a>K6+ifcKZpz1t_~l@jK8$a}e+ZTV zuf(56@eg^}$;efJ>;0(fa?mBb<~6Uu&-~2KxDQnHt+EZw7*mJCr55xw6$kP6n~A$i zWD>h{NeW%^f+Q9p_FB=~6P8NJ#)L|f=S>7$C>3DC8sn};-{>1jRd@M}$=oKO(HK73 zP+Q9RcEfQXp@)JF8Li7?G0K39DryB$l={r!1X(~?j09(q579VCy&yeJfEO0yI;HFm zrV9ClIs(~oT^S2_%Y^msPjVoSpcMi%jnY`F;+H$vl^u+W{dL^FecRvv#l;1#UAyLN zSF?<;_h-@$-*=WC<}OFg)aw*PLviKlg~iVQUs*fN>CybF|NlcP{$bT&OpE>-Mu+u zZ=}{YmDU*pY4&imhJ#rORH7W3P4>cVU03n`3P3M5?BkTOKVR~G5yBE^<3Y(D5D@o3 zOQ0RVQLqV7_E5(FfTh@-{p5_%VvT3X;&o=S{utV~4OofIv@xi1B9{^-End^IIKwjK zKSid|mv07kDS(8xL!QL9dC?Uk>%=umNU~I?F z=6m1u7OV;?|{ zfQO{b@NRm4TZvv|jmCX00}SUM@t&u zo7GRfOAudOXE~%;93%}*O=GYU*rToUM)5NPuUqCX_sC9UmvP%YKX($r5ez>g< z%LWDyhF0wkRBV0v1z;7s2c)rvQ?N(i*25rqsIQh%#73ldwGvVFhJ~0Vn%G>UCYY5l zq*gR3&wDq5<&k}FDaD7yU>mFz?DyBgphe`^vk&|^W)LPH-^kRBKCm!Ql7?!gZ-$*w zF*WMeI3Q<)%tmBUiz8ApNg=Ic zk*0f$z+9BQ6Vtx9q{SJrW+RtLhupP+>Lu>oc^;qt+#lmJpZ+wy|2=QOYhIH;`8J3T z0FF{u5{osEfyW)lM5sEPbbnWZTO!D?SlOyXZm*K52m`b=B+AHn@xH6o4yF}L-lLSA z0+S7SVKiQy^pRBYH~I7`vwQ02dxuOnx_lO55Zyz;P3+4a*LHhcG@MI-?*Z^rL3PzZrr~@*%H9xP75nak6 zwTywinvr4wp?%X|qR+$~%Wn~&J-g3!R7%7>%+79GlUXN~_PJ|4PM)wvG}(fhgT0&4 z*X~wXQK|aWQ%~UyZ+HX#&A<5r7*~xu-`9Wji&33FjD-H>P>Gws;T~`eBj%`z?y? z1mmj3ORQ|F&iIKR|1rGz&2Pr7Teomr#T-1B!NdczBrP5fASU-9989YQWfrh<;%AmVW`byq;iutZAk_oQ`;=OzKyvPKn(CjO_bWv|t zG@113K_>wy=@dYy!8c9)jqD(@iLZGzvDzt^%rzc9%0c#nWwu5b!A1r=#Sj(o^;VKCd35B zf$?C2f`Ony5)}zZa8qJ}>5sO`0aRqC(9jAsLaLQk=`qR=|0}eODx}Z~5eeD-Q$=Zi z6oUmph^7rEV+;o4Ie6@`XYZN)9o}ah`r|&Vdp+M_@9`Ky6SlSGJ$rxO`#pzsxYu=G zhvrQY_p<7<&+1^7mC?QLX14%;_cZ`@fUHZcRc9uPH?}l55;M?~9AZ@T<_u<5#w2Ym zF67|DT|)qsZPbVd+lm18KncGZdZpp-toLXV_O1bCwXF`;LK#AwpiPeEW5xhuB0>*R zJZn&xC*wBsCo;kSMyuTcadZQ8S7pmB(|wxM+(E4_Kugy~hS<`|8bw{!CrP;OQv10hXx%JCsxstR8+^**?4(W0!4NZx8f(OW2&JvFeF~}qS;Jbu z4tXZM6$atfyKDw_8w|9SwM2k03xY}BK(qkS)^Md^la(QB2UlWA!fw?7meDYlH&>O# zSHPTwl^hf)1{|)X$T&|xH>FS3dd~osCajrKgejOgGMGxJ5eHbfc<=4FzkrA6*7u_Y;(UQQJzFnUg`dHUwZK_!E zg5KHp12OUK6VOzf?s@F4hN@gz(0fI3YYSs^jeV7Zmvl<9)<^?EtQ(qnf~qx)*C)On z$a`4iZW$E^)T` zZ}o@Nvs>BwU=AfuWM?4B>nCHkfm|6Q40mO<^CJJI^=(yEjoC~^3mgjul{q8zS0WBT z{jd~irRuAo;AO3^U|7*5U8B%bA^bPz2_%L3{hwI2L>*R>*L@l^$@r+ZFF z?SR%Vg{@yr1z^D5Ag^c$9fo@wMaGQ7EzF;`g zqXbet?DMxO=tr>;jqBKT-mf<)tY0e#dtDG{v}$=2!1y*0_F-Rtn~lJAtllll^(H3q ztqjc^>mhddEml8Bn73Co z85Kq$*+~zGFzMDbmUCfk9_1K?mzm>GtY#Ag7B^1`mOGT%{IvmQBTEE-vP*%Cu`}gnrf#&4oWMbu9*TJ?>s9wwL zWf;D8mgUw>Vr}!JVDnTp|KccLJ0d3QZv60RUU(D@>D+i02 zeXujei%F1JueG(QakTXhiav_=vxTw4fz?^WX2c2*$j`A*DGwyT>%WLy~V=q#P8;TX=CO;=d8TUpO_7CX_JAkM{YQ?UmBG4n5$ zdl~=$D@#4jFSz&jU_XJx<5uox!C@V$0a#d#hPJiRorP)F8RuHuBa9)v-|yAOQsnn> zJQ(AD>-jd<26B)wrNhM9y=G63?~pcY(bhNI09d#3aOu8)Np`@GfJd~Du+O!5924Hh z{*m+mE&H(n5Rri&$3$eSMTw#Bhe0KP#OT4ofz;~3SYOU$4SyFIr%a@W7n=hOX652FlM$47x_uTDVu6UnbQzwq_6PZF>%;@QOdj#;2`e2=@^0KN1xz=+yTA(Ttz%q=?eS z;zh+TtawHk;bG(7<9cEH=T>~NXMvhLjK*{xN3h)(y2E3< zPkYwvOYbWmyF-J&Fpiq?UJ6Dmt1vbPm$Z^%qqf3_>if)O^Ywg;Kf+d;@W?H)1~ zEPR9|y#WcwpmqwVWnWq{4u^yI*Eeazn!V39AlhmMx3aK*x6nwM{m@g6%A#R&)iIMg ztiiU{RcuHCt2XXif)6Bbv~&-~H1GT2wHkx^s&vQvJem^p=a}m9QUTR5Uyb>1N>+Jy zYMq57=jb%N?qf|T4ZG%9G}ai1xP^pkwhaM6zWy)#g};Dr`Ic|N&-~2KzHR{ZQGmkR ztUzy)=U+#vd=%#FO&+ng0iF?@y^X>9C|KfcSl6Qfx({OzKTHk&sGt8ZaP~U?+x%Kk z@PFMv*hlRwJPhG~)E9S~sqt-o9JeuLZ==Cq*U7l@xn#^ZDTw~lzw>ucT2Touc~FL> z&Rd7MYs$FS4=jniO%slLZOAD*<0>-U#sws_+5{wENj@Yb2b4T`qK*KUaTvi=%ns=| zCU2&;HYpa7gbilJT4!NEk^u@yP1&0>)Xbxmh(MW9RT9t4D4N3UjjnD&x$aVV>Dn`x zfh8|sUez;D3d_Uc;2U4-9j#oB!*`YLofV3i(_n;!=gBJP%}JiQ-2;>n()G~T8}!gB zhg0gxG9XO$5>kLQ2QWC1fS#+R$!o|E3Thp|d;|fu@-YA?^`LUz1$nmvb>PJpKZ9TU zm0uOsE-}9T9be}xn%05OzWmahZmk{rDDU$Prp@6zue@?E92}&ctJ?A0?J~fG&)s|3 zzdnvHW=2*S7682b+0Q8>A>(pAprrv6eC9Ks(J|R^babQz@2ZR$8nRY9kb@NzV`V8V zQ=#4a0K4Kd^h2Toid~uB2>yAkbzw)MiVs}x=wM~#$)TmT)r;0?!w7+BoDyI@TRNis z5Q*yHc`{a;dy%zPK|CZ$5ri(ax;Q=-|D1rGf)Xhc60(o8*=w$%HSyhLCIQxUzDYoU z0t*^&!!CPPpwZ^5u{)|9_?nI*g0i@~G2_iMm;HbkWx&o3-dIKqa5AH{GBJ>isV46M zdM`XRF-9n&Fsuv&>lP@c_rcT$yO@SoS5X#MS3gEDlnFx4JdW23UC)gnSv^?Iq|NEd z{OheN(>S4$Hg~%DCqmT%H2{*vXeh!&?;6_2qd8>jwXOYjaIp2u!`3>K-Kx*Qyo_0b z_PRC)9n?2zIb_{(k6!>afFt6^*+W`7A**j1IkQdXE!yxJ&smCmIaDWS=ta*zvy!N_ zx+D*YCE>kY1su1@#5VpXl?L@WY=;P?bltBKdMoP1IUnfF>#@{>vfXr?cUe31TqFR| zHA$~A#DyVDcLBoXdHZ$$`GwDku$)=S~>j(BWXuY52D` zWtvd{@UkXan|*-GUbQ~yt)ru$>Ha785C8vW;b9tj3S~xv;Y@f7ee0wRtR{zEV@M&9 zdhBZxSXXUpr1e(R=1A2K7<Fc!? zDVE-DbtbymUIY(YT|eaKnCE5p1A7n63^ZXL7H>33kRNqhx2t;*T8K@vH4e%5XM%t) z#;9_QP_<@Pby;mG1v%}4eU60QWCak*TEst9GZa7xOjm&d*-tea!R)da+9Z(mI%TPI z@{Tl}T=t;`Vfs=UYMWZRGfllguk)pK;BYC-aG9s-D``IHT2rm-szFRL7Ma9G%qx#x zkrPWMfHoNs?6*XH(E}JGe&ybvUF7{`^K@6qbn}Mf47QRgB6&3d`3%4rfPzj|=ecSd#d_5)szJ89Fzl9e{dXXJ=fF5zgmA3&@o zr5a#m-PR@LsX&e_&ss%Zl@zR#pD%}s$Ue1$RRmtPtOQ{-mTP@Mn6h`XcKhsdvzQVc zJvO6XRg~Quv#rx$gjvVk*qad~n^+KmQ97NHsVRs~- zb9#D;pZckv!mF>o>Zz9B_>JGFn`d%A+1nUWaSY^~akSg}*Z=CT{_4cQO)25@^c1_j zY}(I1|2#hOk&jGrlimd&KpzYv0Ql%fKZ<+z?xD3dJqKpSZ~yjh`~AN8&2RSfP)@+I zlb^q3A4aB01hC^hN1wl1A@dNQFW0vbP7OMrjI1mxW#qeHk z-VoS!KE2zg0GctU3B%7cdPzqx$9~&=dWvrFL5<&UOozxSvU%o*&~T0RwUHHXzvIs{ z|GllpWAwI+^PD%~VR4k$U%a)q@o3^fjn8BA+_O3AG(q8HY7?KK%=^je*L0>^W; z=e(|~Ut3I{wY4#VhS7UBdhKml!WIH&&&C@s0eFkg%|834cNUpVTNY4EoZhCOlgoTD zG5Kq);^|0(c`Tt1%e3A_0Mx<(uk!;m(8Si|_;tMri`@LH%{zI!-w(gXz=qzi<|D(^ zl?>YgQ0+k0!%#d}Fk-ayiEF=E<;49iuHjqH)X1!iY3cF$?7!{nCe~K?xx$Lc;ri0V z9^U$w$NDK=pZT-Jzt1@%nY6!`>H2u%L2K_O?zy&}+Wwrw8Z#%L&n%~{$7Wp1rO`=# z-*F9!%AYt-9Nr`<*PVHuGq^uWtSFBWpO?6U3%~t*bd_1!DX3 zz1wRv7S_?x5r{i>`|RT)?(GIrf$cRbpa*yl?FPu7z-?xSz& z_UFuJj6SjRCQGlJrg|o_gkzl>>-DXdb=*ri&HneouCHEi*?ZZ}jkqpE^%m4VqSiKh z&$iibIo4dg&&s0syyCei?yr$~yKS_$jqk42`?j8>l#q4JjB1P6jN7Uwa$2xkj;??& zael`$R%A%WXD(}e^Yts%2Jt=GZ(&D@^*};L;)eC&6}YkB)Up6+DekA09yhMwTg5mhT2dA6aiUu~)2nA+Tq_kpLE^)lSz)`-y zalQoFIa<9$?-lFCr8F*@1se}I1jf@SHRP_$Kg9w=yENM4Dj8fE-2%Dm0nG)hH-5VP4;-OIL zv)VOLnsd?vIE~I{U~7^~k1{A_mk%|S&kV_~78R|E_{0m*>~gCJqKf2d0L#Jz5y?l# zkp3}cXVpwVCM5Zqwd=k;)Y<{RRbVX*MH97`U2?XS`($=YQ{n!GbYQlFphVP&l0A~~~n@HsDl`UV~y9pRt+lm8w6@E`t<>i<~r&42!z z@a1oL3YV9w7jF?jcfdtEzb0L2!Bh52zT`{%-#_qy58xA@_=I>6Qp54_9y!aHJvutV zkN^0Oe)z*5_Ri{8zwPa4 zwW6%6fXHcw)6-L&o}OY^688H=W%NB95~@gO5(gFvi;+Fg8=o<+dLtaxbtIkx;uRSf zl(jVwv-m7y9tYwFD2d~>jRLJVWeRoSPr6rFZ(_W!9$~CW*sTdeqmwXv8k({U#rqK~ z43*Z)jTDsMK*)4gbZfiji2HAtkV(JCi%Eqt@wXPQrvC zj003}`jHKFEeZmwKO>F9pRH3ahgMnPl6F`W)RJOv*jDsLp2BSRVM+3nZ9p&T_1L6S z-@`iJ2{|pE9=`=H%%d+6yH8-|S&ArYeN&I_?#w!XeSHz;d(w`6yTU?jC4`5?{Yfb) z#)ixKjFPg8(W|rfh1n;5#M^PvDp1y8$zUwui5;4F_86r$ytoahO2R%H>tynICxwwI z2HJE$Fpsb4o-2IajA1af6x6j~T_sTI@*pX>?nfAWaL0RO2VW!DNXlZ}T0aQ$RsLr5;2%vS~*24o@O)MdiL)w{-;sOR%SL&_TyvwkE2d zExI=g<9u(m%9`U1M)}!IEuU<^kf0wKD|umm&*oiib1-xA`p))OsY&GL`1nV4@9VX$ zIII`LY9r0_+2-L|%cQJBy9(?|6G6si>!g5Yb!St@XIR!IXPMry%d+>c>m>*ky&h05&+xI|_!WHmQ=h_N$-q+>XvVL>ekwJspqgYq#b4Yfy8wE-B;D4!US#*U?qjupfOOy}6; z3+#6fu-{$cXenUG;dyGl5v$rv)RvK1&03?P%lf?*^SRHXk!Kbs%JjF4fZ8iKhlWH_ zuUI{I3=m${kxqmX=8iWvbX^=?%7e%uOIAVa#hZ^gC9(RcdS61SPoIurp0|LQLZsq(mc#ESWka&2^cst9B0YdZcu&E)_7 z_7D9a9)J9C|F_+4=ZExVStf5G>#W7%&49qj8o4D*#>GX9?91ezxMeZN&S7NSY#EM`^$`IE zV-d!89DScACP}T%G>pvL$c%BBTkzF1X69f4H1(0~UMR*Q*4}?)Y8@XRUuj?%)2!Bt zkA3W86T77Mju&2d0sr71`~&>(5C5<;GE!Rb13&NsfvuCAX&TuZk#!XrJoe1L?c2W1 zpX;;FK9Bdk?|t~}OE2T(~( z49CaE*zfl)qlqCv_PjZ;#d%_m4@R=xYh>5jhG71@28@+@2#mt!pO@0;ViWgiY)#U6 zo&n*Mk^^D!aNNUZ+xWKkADQi2CS~+<q)yVB3nJFS_lI269HJ+?EL&!MeCF*`6E6ZQOff z3b5~EsP65yTb8L2=&ZWZLnzBt7F&F-+c|U{^DTN+#~LNBrOv`Zy^`>39+Z)t7steQ zf6iInPa<|U(C|5&l`e7pjO@}lcB3l6S&ph4k7}F97MiU_f(;I4`-s>$i)+;Yt&@W- zaet5Nq}`J}pPLj}rqGG3-1$Jj6Kj0yO}+hDalTD~R0g(Eo9pKQ%=Ic@YkUUry-S0A zKFCDB;8^ob-n7O%Z-Ed&S8JWP9&a1kac$c&i?_}G2!zBYaGVELlk}0!a%Df;9@66P z5vC?yni6s}GhQdaBdj~y+RB<5+x0chHESZc1yC5rg9$k|F1HGgI48E}jV)685%;z2{yT$(BLrxB4cGZyJA=Bx$qw-unEEQ#6I1=OS?@T2?(tbTC?D9& zHiqMSltzNAW3etWuV;WJMzGCIV_Hwwy-`HQbttYU(Yrg=&e0b(j!*kpaA|rQjKx0c zkxB7USM**rysIEH;qu}P5AMB;kN(E5;`e{|H?bq&tKNDSZ+atx=oJ7L=qR8r!Bc1z zd<)Z%)jQam9<92)3z)#PU|II)E#czOk$1;nKEhfFtumN)XvpZaM@}c$AKyjFCtyB8 zUQW>)qZUGK1VRR-BlNbQ^#z=cK`bm-0Z4~!T({@%px*Ei7puGu#)_O9ay}sQ11xw2 znJ{Y<+b`|N0^#LQSP z4}RZ2^g}lmsJ16Lo0N!?^Yu&wQ`13hoLzAq#r^3HbW2 z|5|*0O)w?tKqq1}i2rP>#T6s9HYCb! z=pPpr3o2QXUTMEXHvPqINtif9ywbdU}dP885&5GG2J`d0bpv2w1@hs11MXJ@3Uk{><0naB+^-3`|~- zcyTH4w!^=j2ZzG}?|Rp}@Q?n{Kf>?*-tU2k@UuVrb9nc=-;MA5&hNxme#Kkx?6c3} zpZ?ST6Ce4=M?;5-@E^YSZz1mz)_Oo%0?1@$WlT6byTE(i^SAKc_r4eJc*i^N^FROd z_^}`RG2~^B%k>iP{;S`OKmC<&!R4WN*o0Y22uQ94FE!*{LaM;gku*8haw*L5)`W@F zns$kevCQJVr^d$-h^=i^PhN5_R1D6F2dG4bNo&HiT9zHwO#{Fg63Qm+dZ=!tPV67$ zYDqJtOUJt^leY&3#h5$hcU$}bP)czo4>oclW1Li!5k5nbUd$kL?bMS7o8-Lc&zQY8 zEsYl%2;+(4X+dpW*9Cp%S%9>4T|E>-RFynT>$q#Mo&edc3;QjR{GFwF%e&xFqBUV# zL4%_rsCN}4B7ma>NCI{97u$xsCHK-)Vy1@xuIuWJDf8hqCg<=REv}ZcwC~=B{NKF2 zyRtTkg|TGJEgKU#vfZc&TccLE7qabh%9v+;HeDHal78JMX0D6{O<_0iy%+T=Be440 zwO;g@LAm!;92ryc^!9pCi6#Z_O!MhxVQc1`bwA)C`20+0#!Asm)D`hBgd$5}!mxUX>y!5G$eO(E2- zJ2P1JNqe_mvv?>S`M%thRT>$;W4;eyZ_z*~^QD%+j;x2pf|S_Vc=ol%LN=hgHwo#O z?FeS}RrJvn`aXeJgF3t3gMmEi+m`~9iKwI16)9(M2Qrhh#akbTT4G~p0!{bN+GNk- z&fZM1xx1DA#xNf7tW@53k8@=(=6p@qG$UdV5hDRj(ye9R(!*`*QctOuDsu|8=qw+1 zzxkX)t*Z4+s9{+w!lizq2BIuU>@ob2vP!p&;jOG+O}QR5j@rs-uv1PuoqF16XStu& zx~>xe6y))ID%88ak%kg!L*MJqaUITJj`Pp9A^p6R2dD#9FWvx1K*N=a*_>!?lu~l0 za_?O{ua${x%}@PyXEHWcFZGH z$}W2^x)-4-qj>oJn(~N2KqB$?tn7@x*pNh%d0W@27AQOc3Br8q!J4qZ67oKh4IfTwbEqRn>?B99}$l1@}JtDSY-* zpTzHcgz@^zPETFjV!RQlNsrQbSy3eaCVbi886n?dO70Z0*EV&gv|Cz8L3t^{AxVCt!jx&|i z*g&h~4IkeJbUl(eV&sf0jTWT0vqcXTPbS?;a zn&57Y$SiBJTF50{uw<#5>g6R4hk_;TaDM&(f9g;DDSX#=zY8Du!2kBT0N00QE#2hV z`Y>?yI(x?W_uIzy!!V=Q6ITC)0H`13^KbKdeXaj}(=)%WDSH!1GJK8fT8|PU^~b+H zKU(r@`P$bSboP4R*Z6*Rs{J?|2owKDfAmN36<_fc?%jBLdWzk0q(JP!3ye7U9Qbo) zEU+x28)fOX2!4uClXTfqHVc4x5t{6Zmx(15*--|Jn7lv$R=&~!UUtbtWuO}%R4U&q z91t_vf<5KZ^guH`uW?AT&y!U9;s*)y=rM_;+_DsIbu}=9J=DxLYcr3Z!#K2K*H&lz z5D_@DA5dera%SR$=hQoD?aCI)-su#n%IMNAS|E}gM%7!AV7^*39s2B018TT?_b!f) zPVvGEFW{Z;{L8q1|NdYhsL$y3`L_nV@r`f9fBd)q6MXk~f0tj!x>g(=?VK^QWi`Ym zh84@wQQhJ0-MjduU-~7y=RNPiy?giOc>s*SgfIvH>;Lk=^5{KJ6x^@eErvdJ^t69_+LCNG_sLE%H~jJ z1zE6K=?-X_^g6O~YMmJ`Ft!0UzN6H9Jf%b!P>OZkdE<>#-Et!>S%42D0dh5TDQ?mh zUPax~Rb_m(YKNh!%<1ORAm*&B4qRcDTu}kore+NcPg$n$dE*e!>Z*TVHw^md#Tq3q z?5v-v4FmIna-b~w)Lj=?aLsxhnSd7ZWAn`p2<;m0MGHGSTweIk*ru|#Ai*5T=yfAA z#Ux=*78c}e2xYJt@E_*M2+2E)G-i{&C&_a&Po`a#m zl4Fh;OH%BF;FcFQzDOHYT@Q~_b6q_SsdY30YA;hkK57|u56Zc&n-v6hU&fM)Av$qA z@bq+TB9#Dm7~5~_bvhlQ+RUP>+vZNM&KTVSttP3CDcA17+{*~VQdzwOG+iYQ*!pdN zzImb7TICR)XPNhOSZO0PD>9kAv189ZNQ}4YDVy&$rgP4dCvB`_4S z3s)o@l&LsK3ROJvDa}lMBwcIg@ok}RXoHb9)t*5?(YyG`+B~rNK}0wdsY8?1C&~nm zwZ6@V-n*-9;xn*4&zr)U$~3OG`Tpk5qw|#-WLr}j3*M9!)*#!08rRheHg2}-#g^e} z`@;b2HkJT>K8Q9((qvec1*HhX6nqt^X|210r}ZLIZ)3%>Ubg|<)aPfeHJhDF;vTZYIZ`TpEL>R9AfMKm?|Z(ts8iIjDy7()r+^?ZjarvlTE4zl^ z=50yZ@n%h7CK96~4lEjB)g+vsU*JO@`VbyGc!2$WFH)t%Sn`7XeuvZ36Fl+clla=N z{aXCZzxg-tzW4oS_{Kl`XHgC-YOA!fc$zdH>*8`q<>dWyh z-|}zbxlcZaXFvI@bf10W9w7VM-~M*|H~-y#i+8>2J5lNifKhA1elPNq-}~K9;DaCh zAeabmefq8V;0Hd42d}=0kNoCuI-tZ%_$%*v7vBH=_v7)qkE8eIVOPxL3EzYHF$#80 z_yNFu*WAK`+`H65f508Yc4&*?9O{p(OdRFP1UrugQfqfKX zDkS-MFf5>~LGgf)O|QlVAudSbOz! z=J?s3l&nl&c)qx;*q;CME-e?|f(dBy+XSZ(Yrb7h# zdL!$xKR{)(v>WA27B*MP>J}n4UTy9&5^~BDqp;QP@6hH@DXV&Ac3qRYdyb-!pvRJ)B7f-GmxI$>+FF1cODOf2rBeazM?Kduwb_S7}V*OETwhIuPD z1&dn@l;i-$K-M{#o81*Ll9*nD@2}Q5tabsdPVdINWOI(v@(A*)A7qDIvmI>NLPuo& zk(gBn38~ZvDQCH}F7LzF^rrirn!id-LP(rtFAyU_G|Y`5t1pasXKQiN8iaMdlyG@M zyVCG5)-R@KF_bhmzKsD+Lw2hx0lfJ+f|bmopp)+J`oGqz)?KFP=vqUjFb~B?kkrSu zRrCHPRs1x)?(TJOcaTBYt>#rO0H%(uCS#qA-K~3AHx`>EfZMu6qaT^ZPH z>wHH538LR8d|zOY*4r9X17YLZ*s_KvXJv^R$YAxgHWC^nb)FU26#Jpol^Iq~wJu{j z5lcn_r#S>rnVhvZ9mCM|%o>c!j78HWDoFGp{;tBV++;u)psMrC?$6dk18N;OV!2$-WvIs)3a$!>+kdVNsM zbe}9)6x}@Ob^Rp>D|RhK+4}nIdkuAu%%_yo)NqB@TCs^c18P=(bo8-zDnq-s21?1t zxuEQ`)r9!N>iP~yjz?Wl*Mh_4IUYQC6)(Q189$)b|BuPLu$KDNzZD+IJa^dz3E=uv~g0U&B`6D zdy~H>8;4!bUo;xBpdCtCP}&L3E{^btXYb*2_bx%{NZ8hS0W%>jNw23n;2ASP25{be zpJZaR+I-kbeJSH^D-(}4DML!FbzFn5U!sgNRccbEKKVM<^&m!S$s{E-dp#}dQ`Psy zIyYrJdDs`!tKA#ANpelP?(^Erv)Y$=oUbgKLK@~2 z++;2mvj%Gwi&}3SF3-VCc1xD*D+de3f_7Y@Kyh9Fkt_f{rdS0-0SGbH~DVdW>4_2!EqBS=BA{&M|qc{ zJ5A2uwC{WJ$v5GD`k(&?Pmr&*Vz-mvpd~FxX_2s>AekcS&UA>Kld96R$xa|zHgq0r zJ(biKKz4C@_Z_$ce@=PyL$(_ zorD#Y!z%LFRSeZjJ?KG`JuJo<4{aEK+s_*o7;~7)(a{mm2p|9W$MIXg{V}}s(n~l$ zKgaR$F&=;XaXj_ZQ+WF6rvWtgQWb!|;<3jb!_m3wDz}dwEWw;6Wnl~)4t;bnpJH~Nj<8!whO+I$D zRzPhQI%z`nI($xrxja0+mL>apkA~^SVDSSY3uC~Zqs?jR(7?7iZCS=IIYXrP<^d^a zL!vl&NMSHCjCmv-=j^_95;Aht#Jtw3hgg-C2k*hyy-z6(3kUU}wd;spZ4+}l9!gpZ z;GZr(+BvtB*0ENN`Md0rdwwB=Lgk!>r)(S&#Yg}EAOJ~3K~xAI%sCGRzRu+swqeZl zTC3Z87%R{&t+pUh*R*Y8V3ksk7WR&QWUe|xRD-_~WB6VnP2jgT*fz=Gw$6L-UmqT+ zq?QC0eC7U{efUxvqfPFANd8NafCX|}898v;^EW15WSYVm*KK0N_UqPWAOt?a6QL)o zoM7o8K7q<6)dN21`eqEF2tFE+D@;*)ZsY)nJ)hxOIj3?96QudRX!}KE{=xj(h$Qhi zFm~5<^+2=IRN-LvANER{=g!DcuiKeX+NWkr(_qG~l!@Y&EmoU@aZtH3Bzj6 z6m65=uPFqK0dF$SvF;%#lClI8Mka_#+08P z!v0@NQBXvIa%J<|=lQ#AG}8~PUfcwhBxVW!)4;V}Rv@t}Euso1T0n@!#^TJ&s^i(_ zlQBTOj#U}Ev9@jfN0aes!K}9bm<@v0%aA>hI(x{RN!NStF70Q?csZ1VDn~jlFE7D~ zaCvz-8m$11kB?pAY&F9Ok<;rm09aK%5~vo=A$_P+cKfj3ShGLniQzx9h}zUdj6?#T zk07@+5CuiD=scB@XEdW`1GegjTc{d9uFQo5WtUx4AT zF`wc4{=KinGfxwqcyqzg-2*zG0kmr3r79Cz+&jAOgR%_DS*f6clmJp2iH~bO0oo3w zCgj~IdX<32wjR*x3hq3D1bYH_hn~#abphp_fQL+a_A1I#E?`N(KQk@EpOl;;N=HT;M4cN48QyN z;!l1lPEJmcat2aHse}E!EIVJ9#WG{~y_-TQ*5g*6+nyQgk1hMr!r0{RW{-9IcLO;6 zEYs8?3WNC?>t#PjTA(e`R6`jvx2ocTg38D0MPdG8QbWm~)ps^0w<=62OE9>zZx3!o z0BszIWdltLCA+@5Hm^^YWkGdce+e0V@ZbUVM<@9EfB)~}7k=RvZ?vAgDcEWY@WtnU z8*X%+{mFHsLg0!wJ*O`uBRJY=-Gt9wsX?xJZ(Cc3+ulv@ z9r?Bg`$r9s{iA$6TQvN(fq4@ue%-IF(ek5$ySD+cTS?<2N%nv5_}=gP8#p~ZMXe%p z-|zQGiTvQuLxOS6SvG20FpT+x#j0xmm%*OAm64u^Vm%hTm!Ud%q zCg4>V7liH|a|>o^zTn!1BM0a1l0RdCA$r>(06?S%0JkUrI%yzDv!I6@0&}Wb6D+=& z#0{=PfC%wUH0G*q1R7e^jV+`J#grJ(&j!TrX}|1nD63m2u(C_-z__RfkZj09h8QLB zR%A=Tn1`%Xr5~+sq?`$!Fy6a>q#*UzWkx2mHIO3jhSW(8SzKiN@S@D?t_6pVzaa4v2K6irU}l`3pCj{vFZ;4D!&|@V8QI)} zXYYdt4@9o7ht5(DSklgH@_;U2c*=xQ#L9xW3=z`>#i1YMtW zUasqk-ExGK^#G?nVU}hr9=pmI5_l>ngZ2o`}YSVd_k^*P~ctvo`*x$W2W$nqD-PE+e0Jyl{8UsY6fO3GKmK=Pw zMr&85kBw1h+%!U?c13DtY(l6M=23g0tKrfBMd0nq6Cv3*Tt%F&L&Emues5*~QCB)6j2GJkq+sKElE z)&lClvfqv73GDEie4RDmf|=1s*q`ic`|t{t;Gnr?V|CSD@?IZE(dK4GZ?Yy&fmsI7 z^deq{q`sR9yqJYjqpAS)@E(ofL$wz*!;`s|EKsHwF!Hdi0V8ulx5J{c^IBb{?jvnl zTeFXv2Go#)w^1hQ(rE<{-3rAhS1fBVJD^TeNLV}wHFV^ihBG>&N%l1#>3z0TK_ds4 z&Ei8vOu{}y2emfXbsaKSd6t$7v5L@GJZ!BoX{`FhX=4+mKC8TV1B*yJOlt#(tJcw3 z{AE@8yDS-NDdKObV1AsxzE2lv-XLL;mm6RxY9H}*w-Bh2I1hAfdbY3+2!LY1-tdWp zI-6M|RrY{kzroI&m4-yC;zSX%xm2YP0iRYes7B4*a9A0_l71UZKWOmtMx68L;3yu=j%G$sumN~PrF4N^;@i~=}Vc$nX|uxWQkdzpLa zsCC_h70%&|kMr|$eBbwdAO7$E=bz)^{BpacUjg~9 zwUBuP=IKotL)#F|Uy6HK+-e1=}tLrQUwmATE>%F6_#U&ZhgL5!Mg*_xDgEVXgQgVg|Z&GDrh!@y;3>m%JS`K>9)imth0wYE|N3%+8tcz(K{m5W+=CcF+ z!ww<>nuDRxak;KI91b`;JHz?enWPL?Ns+YzmsL&!z5e54u}*mQ+2`=nKmF6_z2m8; zp2EA|{ccb2TmZyCJHOY1q|vSim#XgdaBkP+i@t(^W@68QfoyYeqz@P5yr9)#pl^p1 zJ2V^n(3%}HyHgk{gAppW719+h{+#Ua(E^p=D;|CHdMS%oJ@br6IYDK%E5(*|;YKP@@-@fwNOM2jJEwZbPBZHzf|wcS!fd zv#|hb6T6Ac zGjUG;Hu)!0x)T04noc1Fozq;q7(2Ih|vbofzZG0H(1% z490C!OC1VUL(<@E4pw$uJD3Tv-0`u~w^kC}nQKwXI|b=DQ$GdJg*Nx6N$$ps2ZxZr z;VGGOo`CwC)Th(s#e60CHZtw3!5ZJ60GG2NlwX@2$~aApF$av({GKfg&eq>jq?zFs z3>M<&5_>g4|<9uR`2MYqM6+0yYwDo|)dV!Zd{TY1pqrZvg zo_h}GXJ^PcS2%-iupYu%9jZY(+pMI4Ut(2RiM+d<4$NC?$dU6r4`ct2T3+ggFtU zS(MTdYG-iTfzuvDdvwldos|e74fJB+rV8$LwIbo1q}f42Hj;r~#d91MPdZV7ac~73#8i_>v)?VS-G(G7BcGGaZEY@T=wqwh!C_Ih>R#%M-9_h^`lf4R#=|;v z?wQq5P9r#$bszKNZm{g>U7HH#DPP+Jw#C}X>atk>TSmY(@8!D6x_rXG(v9O&~$8$W`;5% zNxfYy#D$Xj+=;Z^z!{OWYr?q!r0NMf?n!+Pt2%QU(AMOTE+JjbJHHO6zw6j(7-#}90}{*Zd< zRkIQZUd?e_na{A~@{m(cVv@NveXRI)$`Bcg8&hze)!7o=F$bcUOc5lYh}6(Az5J?D zAs%cesU_rq*A$pCpJ!u$nO7MZ89(f=m+V67s}d+-r7;#r42)jFtM#&jCpIC7o&}pu1%$+-ifsp|6U3pOJWua zf-VyOre2IGYlMl)IJ^3(LHC1{IY?4P#%PB)8-FJC%(})J@Yp8sk=!E@tZB!syHwr) zTmria!`2D|51hGQn}cBkkW%0f>M_X}(qskD#6l&!FWWy;My)DYOmvMMlb-YX(8t?2 ziD~cEtQ1r}O+NNw234 zkT{-i_wjFYMxId@<~1V#=pjIf$kj8}ROwEhBWDo~k78rP22X3-C#}KbV74;4)pNAz zSS9t!Cf~D1gHLRwvd)FbkgV!&Jf53*Iu8$d9^sqXsP#rAfShn!>l2#40cv&cZMZNs3?tw*O0jejyDa4XzN9J0>kIi8hlnG zOZXP)Gu1tT(|Bh*Kzzcm{jo4TUsct=G6MY2Ip81`M#z{}IRY|=pA$p$BG6@o5+Zqi z<`3LG2sN%4~IpO5a9X$SqFT&CB2~Lhq zbUmp!9L~XQ#reI@;u9bHbzHvkD!%S(p2U}ZX~xmX1&&S=meU=;>bqT64YRG<(AOGI z--Yd~U6lvD6NnZNA0zMX060diJM50`qO}C-V&{^O(HjGl0m^7S0X>0uCmygVqeH9= zC@spywLF249-+SI0Hdoln6F32D1;D>dEbsLIzmH0^ zeAIuxPJw=#GJXrj{&5J`Ef4ZhYyryPbmh3Coh*v&g!P(R*@ z!qLew0N`kUq!t^}<=-ufzF+a>vgdqqa*Uiae*Y7n#0Ng`0hC(t^wUq{d*1!;2mq`e zn5{H$9!wcI_?Hn#6hI}D%gcSVYnm*hJ8PZQv}SZFnEjYNV21~QZ0x1TMDh7S>=J#m8E9I3$BwlFk!*z; zPn%t25DI{3Uq8l{v4kUI&O+Mk{m<+eni7EHL2O84N03xxzSumfrA>!pXS{m2lYq?v zM&k;A3H98zWZPQXe4Tx;>IY~s7%qdM$*Mr8K97Y>O;c)n3GA7Pp{&gYYlIkk+yS;O z;Ic85q6e`7FD3=w`e1GusN$i^4%|&lR14uyAcj3?VXPN6K1?EBTe*_3ZJ|WYMDHp? zcE;e$=5==(3r-3Ogvc0o#wGeyb|gtSge=AVO6qXj%LbDU^LPjVm@)6{xmqJCGMOoO z7RL8X#52IJO|NQRp3#4C!y=dW&+@(lP}bExVg@8%F+SYBlOPC=DH!Weyk{d#C-JPbxqbr$;8+G3K$hdO0|{@uq{WJ+ug zPtgn0)_JQJY_E`DH5arxIBM&2^nE5GBnu>J^Zqj!n9bLtxfUID-Z=235CYjoLop~Q zh%ot7#x*)h;ynl`yoV?mjo0FH#jOk2!(Vy`BQ!wD8aXyE!6|78a6U6``7z(+lRoE28VsuSo-L$0GZ}jX+CDHscFsI>sUt3R5Z!h zc!POt4Djen*+Ph?)J22g**8r?Yt%B6GwaCao2~zKc#y|2JPz5jcX96>c}X4$=C%G- z>golevYe}~TS{gDVVajVm)d5%8+Eg?^_4Mg>zduS)#TQ^CJ!ejmsh*$Mdz{oxx4>y z18Y#`r(Sp-AN$zH@Y1JWL~9MFC#Se`=ML`Ny^H-`>{AZwii?YL>{7zfl95pG;BznG z6TkE8Sg_*HyzPtdButsLiDb$bXDTaUM@kNoz^r_Xw48$Y z7_}@&%PBY=iM>FRz%AA=Et#SVm=>gb1mXpa#Jif)f@W4u-c-`2P9IEoQmYkPyDapN zvjs(3;H#2zEF{#8sI?~V39V(6c7j8F1MZ(6;rSOYQRxKB{xO_9b_XYqJqBjR<;4Xa zoSot9!5LD@NR+TY+G9yso=G@Y#zt5?gW7!9TG@DQtaV(p1QI(kVIZfJrIAbH{A>*; zpGQm~us0M4fN`M z9(KiA86M3uU`am5q^^h|f(e(03*;r?4R3e@e&HAX*^R8#+XA1q=fQ`4?G`7x4j|lu zuUm!0ZC`)ge?N?D_%L?uA12Os({((m-NJ2P?85-^sh$OpAH|3CUx!~eftxp(8DIB( ze^4Olb)WlMg0>#*XBe}vGfY{1yefz@2t`a6 z!!u2qdfJ-$l_{Vh4s5!ifG6g#G0S4ehk3vnbG9p!Bxfn8mu0Vo^y&DUJ-4V*6>U(S`O<5q;K~^6= zCOP!3<#xfDcM$G~3XF8c0zzbKaNyPUEdh4n z2Mf%$s20V!*=)Pv5W!4^k{G7M>2f2GN(Av|Wk(u}oifP<`6iN-u@)Buy* z((ucbgM>66(Sxmq`{zM@c8l-h>efEqH;u!7-^i*gOwWEcIyqp{d-YUtS?jAST8PaX zw7I;SjOo|yeI~6Ta`@>|8!(Lkolfvj5_#_A!9(_479wH{e+xrni1&H~<#}U?k@JGm z>IA$H5weDOm>)KR;mE!X%*{*PX;y7OjD?C}0a`u325^ zVKr?PRRT#8J+u)}ima1KEvU*fRCj;?03ZNKL_t(qz5dS3Xr*DvJFMm49_g)jlY9*( zudM)Vx?}OdXO=)s+L7;LX4^!GP}d3qUm-|%2p2>Ag0t8#wW?q)NpL3fkjx9SUIPKE z25?P*UP)8rNm;sGJw0P4fQ+-XtVlV#XQqK;b=3x>uEiEeY1UTaOD^@DfX~sgK$^tF zBQ$Z@>6|W750m<>$53MPsFxK;*F%;~BU{70E0~3$AR1vr-K{|2f}%cr{M`zn51S?K z?t9!?gIHZkqbsF^rVT}Ft`0`6s31&XcK+%Eyzu<9_~a))iHnPKWD9Fvb`Dq`4h5yH zc;srQtzrY7kSFp-JXI zui{tCSy;3w?R8*OfEOU|)VsE!mo`X5t#A2I;`vMsyOgjnVYl1i<;zQ4tgqnY&Kq!a zbc|)c$9m^3?%%(Uv$G5Q&Ts!Vo_OOEc+-p>bhdL+dG5b6e7w) zR|SRH50xo2w~>0yw;JZM%nO+Z04>QIcG`*1mqp%4D(3Y~&Fg4uM7AbOQfO$ZFZyjnA2?mSvPs8UI)Hzv9H&Ho!x|k zeIbLmzEJGjEhF_|0QPlE;Oj!T;`d$`@P$zi-RuGT$G`sNqV<0`%-6`Y=y?0v--hr1 z{{H~239uHs=TV+*o%*h6h}NMpmVkNZIjbmmz{T({J7@~{I6PvR63C>D8vJ9O@mAr< z%O-&vo;KMf&JtcTm~=CP!`Le3X*YX7njC~e`e<*%gLZf_^$i1KNM9p^h{5g=C&~21 z0ZBV-`9$x~&mCS}2r1{nuqxhZV-~9fE9&h)VadXj_{ux94rE!IGt#6W9R~vgpdw?* z0W@lJ`gvg9<-A~B*NJJhuEhf~Y)siECI5byq+9Eu_;WI5U`*+@4O_x&hQ!#w0rWQc zBD##f+w))beh(ANNkC7=dN?>6+d`h0S%S@$1uuT;)A;$H|9KD*zTq3b0pI@Z-zJ~w z3=K(%EtXciR%M@|JS#YJ; zXq$~QHWe@%shjt%0o?NbS7$gy=AsOwwNt#?z5aXRxt7GVdsoOJvtA@dUKyubPCKDzT(|Fcd;=slg2u3K-I9iAQJhTHO4I1 zubCgUjjv_#{lfs|$i|HCxAh{vq79R$w`Oi=cmzA}w3TxAs^Z)}{L7+!fy?je@Ni5U zsrT^S#_=>fU};)U;@FN! z=B5&|W>I97TeG}7d#tNnRG!$s)4?OmodM9(@Gd5?LqhA?7#q*V05cB$^3j4|%W$&& z$Sf$PP_E6s)aqd5`*X)=AQ<2u8TTWA9zM zEIY0Gs5{W!cM~>p%4JSaUBw zmM3m|(1Z3s6eT};S$12NM1UX&5ENekswy+@JrS`z*pJw8GYdqKpqd~Fu38{~%=2d{vNCfE3uMF&g!y(vjL{jcewQ+v1In=&-Vsh4@JW*J>WH{K4yk}^UMWSPg+yf z%xhkU$M$^YaHiU@CJd;Ek|wb8%v4t(+kLH17<#rAi+LKS;jwJU%m@sR{^9<=Sw#O-)J?fJEHCqCc(gwY-u{;`fS&~B~`EyqHL6yN*a z-{Gw{-oSUh^B$Nx&d<+rd3osr!|Us7TwUMb{{8!S`Q^{y{^flvDT8~%wq2v$T;sd% zy^VL?`UYNn0Q}mQ?&HD50r&3%yK`XK6(DCICA5A-Z>GFcYdL#HlLYokaN+`{g0kEL z=nS0~+#G>Y&XKUlaJjSBaje6HL>ZI|a^9hd!Ii*x0hmi#CpvkPyOT;JR26Q=XPZRT zI$gG?4(=7bZ%XKqaODZ~fl2=tw0zi93Ma4qw8;y(;*Pri|v2I}s;hWL>zmI-|XjrUx&pwn%@r;5d`eLpD%_HnYCK2G4- zM_Dv{9Ho3*559IjNu>H&Sec(RgY%~axc;QcYo~r3&$_67((Cha-X{VlfA9x?Aj$8? zinXk0$s{{D6m9TAMLb7$VG>xiI2g>4by-}JWfIk*!3~F6-Pk&s$(NMDDS@~m=Y&j) z1HIx*pi=V=m%tl(Ii|tva{H{QqXX!SvY#PU>o9ppJP05jRwpc{BymE1 zE=W8N$7}H>x!^cQ@Ohnt(&|30D(a{`awH%P)!h(WKgONpE)Ek48 zhldx8d_v&hgDinP(Bf&)fkm6rYe^g4l9j=?E5abzB&e>lg>a1qvbCnk)lD00k>1I3 z(m^~VpG_G|%)-biiPe)=!xGfDc3Bo|^&ophBGd+CNYm6>2dKMe+jgt~bsRTs0LYl+ z$?Y>vb~o;eH4H8Y|vqie9>YVVD<1ERtOIMY*k+0no0#3oITgc{gcJZS{mBM)x%Jb0OCBD zNJN3hb-ycBGQqn;U?d-saU zMP=7rfeSrHQb>P>2c3`(vXX+y1BmdyyT5OrY)nRgprt!w*wgfmQda%kRnx?IvW2n1 zMGb(f+*4COG-pK`+YU^=e=y8PRriPdEK=07)qHT13=0}pWxi%%o^@l4 zO7IS);tC>TMpgr>azayuMXfDJwXNxHn*MBF?&E$i+wegdhG`yfxhlgzv8Tu#+5fb$ zkMIDnO%c$;daTmpZTVEaRq;yH zeY$uMp?rqU5~dS}kpl4AfUKidIWHraWkaz9684lG;w&t1GA5($hpY+g)xxbhp|cI9 z`(#%E^(Z%B$U;UFY=C}5Uh?D(ZtMaHA#Bd>6z|~b_ElYd_mQLyO-MfQw>2ceoe2A3 za<6#-5(hilY^P#4UK~t`C4n;IE2BZf0aY#xPQHH3L*JP0sR-khlI9@jATEZ8f=oGN z&A5O%@?3>MUuUGHcwU8Di%9lvK}3R_PGq{={KbHL$nxWPN` zyp3zQ&Ws*SLTGK3;wO6`Y^%MMbu4qR1m*{a0mO+x*0p zDYZ-8T^o`Q5JYZXt1!2dsw&_XGz)qsFfAb3A(b;At>{NW$$L@y^+AZSVJhjMy)lsQ zA}Dn^gA;eNARpIU_fVuE(H}nZ5~f9YMXf?U=`76LlnUzcfZbBSsevK`wplJowDS}1 z@AYg&PUk4QdpK+xZfNDxkQrAUC(|fNrWlTEM1dhj}lYUaN`~|hsN^me2A#9W&0e@XRM(AX+xTZV^sqP<+&J^ zK28n^p_09e&76E{Ig8~i6VLoy3XZCHJRU24<2QZ-ufP5}zVVH>R7t@e_D%eBCh3Gl zsgL&4u&SrwO+N|7bo!cqpW$22^7)?iHJ%oj^`o%6XR&*D+MvyeNWb)ey*mZ&S&evq z)>*V4=e=Kj^%eZnKm1Q|JRVVU!TI?)mUR{RjY^5ZCrrG^VsI}W+3QZ305fB!odhYR z;GINXkmsBx=Ar|&fx%{n^v*%e+$T?1V?IPLGGo$O z8h7-Pie7gy{kYam{7`)pmZr(QbsgYHQ~I(orRr8SS^d;gZcI=muuO}TaJ_^PGFTUp z(IowU8tL1KCZLFtGG1%*^w!n{7*8cTBiI58>^dywIR@5saXR4_wn6kHM1Y(k!yw9Y z4FK^&-X@q;nlDdR4*qb)*4Va#hjNW{%Q+D@GIWH&C;qWA^_1de09MUe4mp{`){3X2 z`VP(m4_im(Jp^Af*QVjxB(<9 z+t?bZz(}&-qR0}q{ni*RDKMQ+C$U*Q8&6Zl<9;g)gK~?FHujzoFn5>iNz$Ct@Z5ww zPigkb_LTSTgBTl3%;&_(w3@rhw+DmB_67-IWDUVlKhRs}ArHVKoDE~`756iZN{PtC zKHcl%^9CO4hgC8@ycla>FOhqUo0Q#xp=|#^PzsEY7_pm)UZOEzY=99bk|@$7aipoS z$a-$Loq;j(iKmq9$Pl##rs+Q$gUvdOTuyB?0-M&?WWL4Vi|12htVW>KSWx!r78q(? zlkTa`Iw=d=PH6TpGlr$yGh+u@gJ_N9U@hzC*Dc=|iuOFGV3{$6_Cy9K z1s_KBCAOPO#)t%kI%~+JoBEELTv(oAn%2N*F#BLh`T9017d>~UIz>M?X&gys{DCOaI8(6Qc zH@BRMtZ$L?Hs8BsSj`@;m9-{Ho-KgM$9=FO*D=b*%>Y_F0igEI)D#8_yD~D4=_mHaD~Iw zV?6rd_wepFzk!!u1RlO}hL;{N?q3qt^9(9L-mQSvimf#e3yYK?)&atP7psF@&OvF9 zyqts5ifse7ma$vUL3t-E_&xylp@!0dKC%w&gR)N5Mxvll#Uz=(xv@LDGUl7tUY3KQ z8W&~lb|iGQ<53o}^(Jga00ia?@E)~aV5=|Uz3(yJf3kq{eITt^);)InJxVD!9*#l? zO2E3?;o_d$i^Ji7t0z~uxzWL|`hQ0oJ?npUk@!GY24C!hPOJZnQ5~7lG2g-J1FNU! z{X9=~Rqb`QVZpE-i#7kKOO6y%FdcGtGR8NqcCIW^H%esdl4rV-j z*f{DD!9#lJf5_i|zuTd;O~MuR`{$got~-3~YkxlKxMv_MIF&n+9H=^{=md{l6v}}XslT_P8`iX3}c6OCC1Jc-K*$LH$AnMK%ZpRa_)_w9mRd8l;L%!VPw53;G@M*9K3K68E-ffEhNk)k7XGQ zNGr&Gga*kxqxvN4mH??f7&4md z?8(B)o|7g*zzGi0Tl*bpYUJ5$Cyc*rG9eZ@qBZ#DS#8Cx6mW319EC&G!>M$y%Q}EC zW|9TBB)!JwxhRKiahB2~DJ^LV;+thHrz{e9hWNmmXQO#E%l>1H zLz%)RENNI(g~KN|hKsS~Wv5#}o-}fn#;ec1?%@W!N?-&$WGDJ1)Vc{sjjYUz<_twj za&C?xj@cdz7U&$nAz>PnAp0XkPA*<)|?r zrC}+gp>%B0VB!%X288BVlq|h9PmhnlXzO(vrVeWd{q8DPwWi6zx(xO74gS0CX)S-m ztG){xi-zxQF2#p9xsZB8+hfULSfJovhqH0qo7(E6i3lL}G7fU7?WW5siP7vCN;E7M zIEE&Qm-B3+G*acQ!L;YB1se(IHK$=FIckPzr{HWbWjeYw0c-kpcP3P{Yhbqy(t&fc z0l5wze2`5JddTIGy0T>TCT76=0&*^XUfX^v-uFiA8vBRb=NRtV(R!6Ngkh!BXNuB=wj+yOha?p3Z2u0Ui}quE_ah-@8@`Pn9(EHhKLb1dHWT zkTk5TwKjnY1|Vf+R+;JTrrd*I!N_8ka0q=-~om(x%Gp9uhsXr*~eNem}CG# zC`(ZmxU3-yJTyg=C@8{uIw1rY;Ggs2>(z$XQZEZA&Cbpa^|lQLdRMPhR^M4U7fwU+ zCjUelY5)onZX(vbZ0;AF9j;!buC(h4z#+|S%AkUf=ZgdBMeD%MelB|L!pW5)(98-` z5K&T%%Tka@YNN$eF-FK>bx%#%2OqXSuIuVbtlk=a@cr-O&A%#$$K74}v7nk_bm%fY#FT9{k^@3VACD&B>PR9eb>nA`v;L#7ihrfIGO}uys zeBqTnp1)sl|3SuX$0)muyzYQpG>l6cII&SuU-y=Qw1Q{_r5%`7q_PL7U^{jID@xvp zFDz@ugjon6kZ>S@U!-IZXUOVFEDUyKb`yq2xemja#nV5-@(|e9t(-j#ovQ$~U~u2u z21Gtf@GZa!racbz0*CqnzV)4ktK%84T!Lvq?Xth;v|zX214K9+j$Whec6*$k-$Shp zH#bLo@WF>T-drOm!n)sK-7P-UrQq*t=e?{A0l70Jso51=C9TP9-53N-iJYa$>I-Yn zN>U3I3$wPt2ejum<&Nz)IX(~F`d@NTdtehX*bzIOti5mYeRx>N$llwgI(QC3ZCqu) zZLIr`oymO^YY^{gGMpe6w?j-x6r!MEb=2AjX?*nypT}3f`c-`R;UnP3A(8TrhiCmF zk}5xLc-FJL-p2vCpQi4=>vujD0Q<9Q6YxnQ=${0`_2aT^|2`jzkMlk$0WZJ&IsBLZ z)qepZVRh{HXD&S<1qf%`f>CHk#NReRW5Ue|&EySwQASZTF}HvR13F_msY@45z=Ptx zFUdWeBGb_r2ss$(TPTTnx>%uVfK*Ne2{RxI1!&7sPGkYnJle$102pWBS>xUW7!nWL z?ggiLxms#Ah17VtKGrm{Giajs4jCiKKoJ`3ADc4T1kOK~hiU2c4a_o1Ljt@ki~GP@ zU{;&_Fz1BS!Jx&&T1+{6LuJgsKBY-Y7*gCcqo0qZ5F2x(hft8nL~*87&ge}gXv^so ziYJd^XD#TYw=8*L22~9yIb~(pH8rM;g>$)YB|!p45^i~S8Y9d6CT-#@()zBfDhq^A zeF|nT$-(HE{UVK-Z1PCg(SSW;a;8kqRvWD4q$%&|mM38Jf{VY0r$}9Zxe+ul$3PHn3Z|Qc zv<`;eD{8>;IkoQ1ds2X6|{1E8*ndbXX5KxYQ0X0@~2bp2y&RD)7hvj=b`Njwl4~E zdp|V`z@?A|D-ewmxA*XV07W6I_K^#DK_ekau zU=(eAi%30pLYJVt{G%tF|16 zk!@fhUQ)B*gduOJr4PZuQ{C^w9~+7q;AB=AuKa4=AH@F2)}aS3h5^o07oV_t{rPt$ zUUz~*OtGh+CX0QN?R7Swj`c@(mSV+szVja5c;gK`e)IvBWx>V8ecZcu4=HCneteCa z=#RX$` zPDlmF`@Mj#dG(sBHW^-|v?Ap_O4%dP4z*=aUXVx>0Ne@t-94~c{c!6N80uL9-G}v- zbZ9nk0?H0WN%DPN>`b^f0Ak^iGJ{d&J7yVpn@>M+2e=LOOHN3sYhW$wf7d;fHQbpO zbey5q`*?Ew0B?Nj2`XPA@1F;-fbt@2U9ETa`#p9$v0l5mxxun5Sl1Q1{T}POLu(C( z!;M-ku-rEb$+i7S*MsGBSbrVM$+1?F@5}Nm<*81ypD{1)&OP*`J?I<7;xC3yMte1Y zu^p{`x-Ano!c$bGIj1N&Eny#4k>&;p9v{z+`PISt6d8C{Tu*F*`bUXA_?SUA0#6J&c91URR)d z^J<3aQxog#*5cRPSe3o81O-tZEFNd7uoo;botC5Qijp&qtl<}#J3Pe4H~`WebUNKqk$sJ$wJAg&WZ*P;EVcqP&aTFKnM^k>pv+X{5yZfFOp@#LxgOI;+a`7#!A?4nQbM_!S@uGXBY17aEX5m}IEK zBTIvH>>jJM&H*|MrkOp{Ie;hPvpAj!R=K}3j4^yhS(&9>{XEH1b_MDS4gFxqk8rwl z3y5@PK9Mqdqa3e#dbq)#Vl|>n%@7LZ5LT3=x`oLIns7O&0*kgUn3rOdqYoyjw?D!* zqa;3q)EyMaSsB4B&rMDu7d24dnVk;&#WlmqUQ2qmliOWnWxdSS3iIcV;NKKFmIOfb zVH8+dnOPf_9^|mbASGv^k3h08L`&?J7bgAet?JrL3Z`QUpgINoj75r|03jL!#=%%N z#$@(u5Wxv&=_s&f_sg!cNw}>(>Fz0AC$Q=ifVFjO-?6tIz(_cI+?6y2?BHQ1qVI+lRStf`r;>2&%89A{lTWz>xCq~?W&dmsl+@*hA$@RzcH8DU0OH{BeH|d zTE&g;--i`cP76Bs8Q|9a!J2%1z+Gma?fX!)N9mJvehN)gU&6=~p9Y|PJeO{PqC-!j z9?sJgf^JwD>f{Qr5f&-6*W9=dAXvPTyDC47B`hpi8*atHpAQ|FyzZ638(c+|Q}$X+ zGHbin*+rSR9;(G@R3{2BnuUq50A~vbV@8`dy35!x6fNA1HJzq`YV-~EIwkCn^3Ulc z&%i+VJZd6+4(xpD&QydCP;716xlPc)b;;9y=Jo@@t2)KuFot5m2I;0|vi?R+vC}>P zUIWkMgYJDp;N6Y?S>0gy6*yH4*z+^jfURyLyP>s74sJ~E7+jmk2E-fQ{nj_}<{Mwf z&Gi+|_h-1ccOljS$awPj3RD(6{K6OU{EIK5ltq<~HsE0&1j}Ac;C2Ms2CmmQUVni1 z-u`PmI0IgNa750-E+Ch?}ZdD!}qOlz@Z=ZWTmLub=%l z66*x+&d8+R6{zk0T(a-$D_T28Z4dDNhdcbgfBi$Ga#$h{RyE)?O<{Im=Ln;~j{h9YA2=xjAAJ^+>KOd~N!l;uK7oe2H z$|Kmr#Qif<8ue%xK)GkO)tS_~}+`NXSZtGKRlyU!z|pvl$$j8S$CiYQ@8c5Ao+;`*Xbi{`;fhO!Q-6Sw9L~ zy$fvpBtoq|Eo94QQLX16VV^vmH72>LBx+r{Q7yOK7Sf52A=lU zul@R$@P~i+hi;}#M7X?spob{tl-iSNZ9nl{0W5+twMon@4Kn&dS*p7MA<=u$ z!f7bcEjCz8WsN~g(Pt(~`(m+{Q}L8V->juWn3ye14@Z+M`hIE52lvH+1H?HL-O_Ne z7iI_Ez-4jqJKo z7Az$@W2Ci)R{O*rjbP+m_scCf81COE1BX$toW6!P)|ygo6Lf9^R59?~)M6%i9-h7I zvZCRs1uUgFcxN(U@m#``PV68?xEC>~B!c)ogrQCAT?@ymUWTWsumTpr3&I>^y@RzW z|GaHSXUy4}oq?<2(QA8$d1!I~J>xTCYdQK^-?b-1#-K?-Q@+iF8f@bw1k|MI`NN5f z#y+dbpbaP(rqkW6I&ANhXLU%7?cSR=x3Mg29Zm_^ZgrAe+HdbC>wxYE%EIK+JG=;K zVgOm=Jq5V20SfaqG7n0#w1^=LlO01~;YDi%3Z81|B!M>q+>yO}T3f_tRu5!pV6-VT zP}h8b1t?tR=kH`+_jGl)ZD6-ppkUu(Kub&oj{d-LPZ;(O{Z`6$N+bAbq|uXG5ZLQ> zX9{Nz%$k_$>Op4Q|7=z(Io^{*`aXcL&86!5E_o1`#tDjGH9_Jv}w9nuS!0_*5 zYBB&1cbh%k;UPpt?F`(TQ4)Vfph;LKc8=R%!>(Ubw%Vyr=&)r-?ooKlyRu^hJz+3g zt=8~5DR_2Tu;B3A%acN~lTZI2^}T~K`QcwY^$p}-jK8uZzlc&FNT6eS0o!6=M- zWjHP)ywLXLI5ddT_vm#$!c<%Egb%6TCMD+)3TNk394gr7b5=|=>Gy%(Sj)yZ9pEy# z^czg7qRO{YmF>K+eQ(skLrIl$#9cI>|BW7@AT~MCrYf*PxO!rKyCqL`>zfCY+o53=kq?Z)#`hb zy{B8t+y!i$WK5g__mTZ?p2oAMdGLG=e~o&3Ttl%07(kI(J{0x$v;mJj4^dqrb}G2_ z83)suRqd9MGif;35pTcsCcgEpZ-JR{c6NsSZjZ9;ux%BOA3w&u%LjP@VF{5f8D06ce@QI-wMt|0Grz_J7K9^j$_ z2no&0WksSLm9j6=*j&E?iD~)khH1PME)7P$=`_qRIy=5 zGGLJ*O9OfZQU`GZsDaxi04;AIYT#axGGnU;wI#n@Kf%St1(s#KRcqL~U6#cOF78Pj6r$0CUFx$Duv~0UVpWgodTq5SAuCM^ zB!AYerWN;DjNro2^O~o)dCx~Bh-N1p z+!A9zO^|2Bp6zYh+-hwpE57>GuYF=z)U$>~eNsfrpM}3p_t|94G zZU9-h!zDr~@x-ijuR~>Anw)FMDU&zc=0PKVEAs)-Iy)N&WPW?fXygGvMAkzrfCZS8 zZMzStP=v#LC2PwkG zR5@W;b`Bu5HYT%?5k}_qNX`MC8$8Nb%BtZ-J%q%_`rEBLWwJsGFSX@RHl>v^S-p~t zO`U=_F{p#o^T`Sra^I{x7nW&83b8(C6@sVShztb9E_PJ{=!M8;bZ;QTAhL5pWm2%y5CZU+5;%l zg_{=U`ndqyKqJ39tLJrgcBqA}fLYl{$r%SJ0E{DCrh9sOZ0K^%fclO`NqY<}VyN_s zZky7R72pUK37DCy#)OWq%d8BB;7L37vm8E)c}v4tvlg~t#M0V2mSyJ*rQ}vD3N9d> zg#H;rVyu;EK%s?uYr!UkG{L<$P^Q63CU&NvTe^_4yxrOIc3-T)=sGAJHYens zvJ?h~1`tJ?7u(m&!!#!eZscJVI)E&@cHVULz~C2FkV}Rc(=dcPg0euGDt+|i%ueRd z4P`HKP`9vq`idtrhGdwEI`y^5TU5N-;vZ1c;zv3};JJ^fT}+4>w~-_ip~G>I)oH z1SuyyL&$BMV!dLaR55gwklmZP)=g|ei1iv5uUE}-CzlfJ2ZCRAq6vtf-doS(&UQ^( z7}QBEx@|{v8>Z;GDob&>zg<_WD-wlp+~|1?M%$X1R_nDI=Vz^L3e!n>^a#lTW1f6D zVRdOA$^-$v>mYY6x7eHH~$?0fu$BUIklRg3z!tG zU~)z#T~q#C>YlB^P{->Vy!Garc<1f6!M)?&#Rc~JJ(wlg{pRL?=U;jWuYUfa$gF3p za(Nxn{hC;F2^!ED)ET@TfPRDHlMnFTJ8xj&idR2(hUYFj9$Y5eyO)ty0?Gn105+`} zPMHA|BrE_{Braf5FtRt?++2fO1@nehH`ICnw+(H(L9Yi;J)qZXwCx6{8(KS})oUPy1A4zf+ipNy(d#w1-T>`@T94@Mh*pp2{h&>jssce+#-IT0FNYh}zY6np|jRD`LmPP(NyK4^}4KDH^`vwcs!yr<4`xe z@WS)>i~sE}@c7YV4>|lak`I3tKFde3SwG3o`*DHTyHv=LOmUK3a+?ABa}7BD6zl;$ zt=EqT_|;$g629`4uYdsT_j?c#cDtQ3G7bl`AjmGg8Z5sWe5>pLh_aU9XJwOL_5!#C zzqjNeRKivq($pdSK`1DBnu-s$6MLGjdxjCF^i{JWNHohOtr&s;y}ms(>_mjxH<$L2f*m$d9-gQnEu98q*}@{28AWtJ z!+)^_;0`kj#6gp=4vir-CB2?l6S$0YP{;kXS{*)Okx^(Kc~J%~Lk04EF$IY?+ycVZ zUPi6kJAB6fQK+v83P8*7wLld4Ne*fbQ% z{+oL&Q}+EWGA|=@EB?Ky8Es@5o<5Iamyo?7jiD)HuVJ^qaQ0psp5nDuwXx6=JLl== z?OC_`ZQjR#ol)$}u*eLtYu20vYN0$MgwB)|ae{9Q6IXdyD!6$_hwo@%FVbwEF#hdq zuB`r^-F-ge*%J4#$oR8CnlU;I&`Xr3Nxm@I-~h6P7MTy6$#Em2EAAPmY=9A(IQzB6 z+G=>-%6jUZ{kf{OP0uHXFskUeO%Pj(u6tOtKQO@E>W1j0Y5RknXRWqdY3O$TMGs^+ z5Ih<-lPFKjJxiN*FV_+3qoq}lr>805+y~zJxg)@M>fHw#VV=g|6rgqv9uk_|K;9|b zpP8A>uKpQ;PJGLU*8)pCv4c@ zV1qF;?_!J_@F@FrnBTKJ$M$o(Cr=j8)ilm9LJS+*u_qY9XFtUfVfA}BA zkX#PFmInItuvfCz>usz4{1`*a0QJbkjYG~@=LZrfx_RLTzei(oM#aV$JmQ2^J{ZJa zpXj+EAwcAVupE5ibCJ(vVCE^qGkz9Z-?D$U8F;Y}R2?ui&tMn>uNlO@ZBb$CDGsWq z42E#OOl9Fe)BBXKKu<~1j;c3N+9V%^;LZKv!6vN%K+8_lXBb-9lB%!_a;CycYrH0S1f76 z-@Wq|wyVeZ+=~l7`(nZUdxW!lVylu$0<8+bV$qOB>7!b+VMbQ=s}N9*+l>Y|b!Cuu z^i9`DZ|Kb|#2UCa9FJEre5(hv;}KgsqSg&tJ)mw!^j6X85nHY3Z3DQWb^%t!zN1QL zRc`{&a>e0r4fKwqdPsu`mSsgwE4uCV3V65esMauqUJ2kcFrLHJlMDR$|M4!q`R+Ad z{nBp&RhIT9DaWUu-P&+=>y2CAEEC^AQ89G+dzTfHrIZuj*Li#?gUcVL|Hu5FPWS>AGu)KFht(yYii&!)0 znf1a8&*N)<_GfqazyJMMSpK4tB0uTx{WOb*r-8$9K$-#k@h|d?iN*IX)PmF@+<)>< z{$srM+C!)I+lG=fZ8Ir@E|V}MD4Q2i53=qw!hNg(VBw7dwO5<=SNt+z~Ol*nJ7>T?Fz5ybmwzOuGUx744i-my^ z0UDQL2T#jLwUy~|*DxG%V1}Ft+JlZ(LfCt-GZ|A7D2t!;L7Z zmt+Z&ZE4IcZp>sd_WoUc(#%NR6CRaKBqr%2L0pXFwa^R2YOPg6Su|NVn=h}LsON-r zSx}Tkv+h=5v=%9@OBR#&T%=hsaC%t^cDofNWh|v&DFr2Gl(kGho74!sEX9G*bzQM! z`8@;J*WK!ptdtVgRX*pEi%w9pGd)Yma;Pe(D$HL($wj|M4uNQlWhu^xEqRqg90I0# zFoH3`U~IdhK!-3IE%YaAnl~HefTAyQ3i8M5O}jHsBtgKzA+ru}iwy&4lx4%{nu3}F z(;Bw`4+G9qNJhEP`@`X&Tl}}z&3K%h1ZptL!d(h=l zBn6yio0sT`Yxm8V(cDRgZQTKt7JO!Nvd;^(88GX{6hI*a?=x+{jlt%jkkb{}XM%S1uFE>`Fi&tvjn_8|&Oh(n^}mM2ky zmz>!#LVZp>i-~~Rwuu=X2M!KQD`+z{39$fFaA#^*hA!DTqFqtu2bWPs5IBQaFuhs!u)BC8yo|IKR zV=Vlvdyj&>`m@4h2O6^{+>3%IOU+=ufoa$+WM#K`qlghs)Ya$QnY@8ooK*Q?gJiL7 z34mqrakua$Z-%)I-^(DQZ_OAwiwr-yoZ+O;g|qeoYdQ|N44`#ziRJ;C?O!?D9)%D{ z8rGWbJFPc86IYlArh}ds*#hu;F}%W48p;Ft1yxpsAQ-L-D6(mZ@%-yEu&U zIO)1FBN4(SN!hbyk>H(Pn?KvNS0_QNWf3s2=&;A!PnEGNY2{r9O%m$Jy(2G@ls*PY zBOGrE%okf(t;SAIrWn!B=ZY5h zfE?cHi89!{kM-UtFTvOIwvBK}1C*i_#HsC3v=UmDHH2_VPte(H5_nQ%MAC}YcSP31 zBxTS-_pU*J@Ygj!-|b%H9F+YmJ21Z;Z}84H-^RD!eHZJx;@tFmL zE+0H_Lcj<$9HC)W^Ks`XpclO(6BPVBqEN>VzVj|V{Ndl>voEap%<~!d?c)uF`nbr142AK(z3zGW4Cdx>;016Q1ETFAjgonf{o(g#duP*MJ$Ztw z>nrT`I{}DuK`w)2Rg9RBW+K2GlsRdxJ+r_wMzm;(OmZ6}83-vVK(huMnFI-x!lh=*tsyKoxM*aCr_F0sOL~u{#F;FE3lx-h%qK2~V;e?^;N;<0t zZ;m(Pyj0c1;dsDn4`0Lo^_PE%?|$#Q!*c7VU~T#HjB7p3e&AWYe|(L*uK$l>zCJC4 zYqGX@iY2Q9u%Ct?t)C_u{&74qejcue7uW>6_S&oX%2)m|wrvw%pZ(r}t#w&tszf8* zSAf!XE7)kfcn`&So|s~HF zjdp8_JlIbgKZ2pJ#Z=1qMuDB-P$fmLdtBo~9mxFf>FXFJ<^(a#u-X zo&bPiGVL-zhcR(f21V!4;E~@y1Jy@i+npH|3jsc1K3HmH4{VDu{0wZYJ0yrUWJqav z7{~o0CL|L`y?*!(7HOKKHF1g@4}ch?VKT$Wbh3%Gb?#XUFz9n&Y+-vJk+x?~x!tzS z?+YxXsP~CUXsO?sFY3S#?@eS8;W>`w&Y6GgV{<1b9x^F2nL;#AhADVr} zzzRkPpgkXvT`+)dOyAqDzj-qT|6pT+O3;q5f{nS9)69l+zqWyMBWD_n#KtH~8ha3v z@An8yM=O|ZO|&+cVUgL{x!r0e?b^ohsrW3!{e0W1C+~_yLy&5Rz2D{UCR0N{IS<;2 zS6!MIr|yZ%b11~{ZG4)+un6yO&!72uN=RKrRzKVcxCmaugZa|OU~y77Fp4F&)9h``T|k}|1{g^JVtWpI z@Glmh>)~lkC(WxVkKCHY0nw4_T(VgTq@g6i@V<<`x5JAYW8l{782afMUbhoQFGigh z_lFo<7SBiX9_Fx4ry8T1awqwoZXqQlFTS7oneBDc2(7%;=rH*?;x&&%>I6`=_ zgYZJgs=cS}uclz?z50NP`2@hV!Au|b7eV4|1IrQ8IGj`%J?zi3;%P{((=-4w>oeQ? zT9sO=EXDhi(>`HR7DP66crIjbO2{SM+WX`0d)?6l5UzFe?>W6c4`!}eBSc_0l3Sv} z$iyw4001BWNkl_L_pu7NS zkpZDan^92|EP=&)0)&iGc38@alvk9pLn(WdyhmCV)`~4nIuC8!AY*?0}d!aC-udc4~;iE@b*98|B_kDkh88CKU#5Elmsm1zYM%Y`k zt6>K-f3WARPW1gf!9C-xUl|_!V{ezbJGpncz4zEZv}ROtl@C?{?|`Yoy ztl9oBJnM~AR^5x;YG)fb+PNt2m4!il|2*C8C*vV6f=N$~#Q`Hv{p?nko`SW(;?)vNF0qjNmIx0S`@HO9}?EI_XGhQ71*gd>9$6r zGs#5NA4FsIRl`@jI5baEnYQc0nKP=%o2WaWOJe2+PTl3`O+Bv4QWO*?)UBiS4G5;+ zBbZ2J4ha-w*=Z`gDQTjl0y4z*^WIiZGRZ`YR*y1SgfJ7V0PG#wpfY;fP(0X$hNqV^ z4!g3K6WVb!xEpW&thIJPQja3v5Cfyw7?{R7JsghK7v9?Rx`z9h)ZM^LJAkcuhD+{- z#O8QBg0d6 zN3Hed0G?r+&h+MC{g9B+P<2|L+!NUL7TGTtjH(Q`!SFSJ6zZ2d5XwH;Z$xIMF=xeB z(!6w+TTEKB1Q3Gb2$Yj`*`0+h_eN4uJ68{>nSwZ!jlcvP4+ov#vr7X@n8@28M=VA9 zV2dhnDNL3*Os0DSopG!iGUq8cE-52DDX?rz)>hdQcuQGOJDh1q7~Xya1~&`v=#~XF zhE06?OqJIilCneuPBReZVO4qYwP*XKuozB)wn+Z_Qj!7{!f>hWcrp!7$az6y8K$*< zB1P@wQt#H9guWr8_DzX%gUR++7m4VcI_W|+N*cr-wF~G?e6YK*_mTiXwKZL9DwEE#7ZJdJIyP z)k+#*K`Pog^%A#w`fom0H$oHn{b;fYt_ICwz z8H2dNEGmqojCifXS~o>s(Y~YleqB}RM!N1JjgL>zjDzop-RVE6(oik(Y$+*l>M)je8gO@$j`T;@-V`=v~&EhwTz+ z_Cl-$bQrCcY23u;lzJ0Oj$BaoXW)K?i|1ZMW#9)NY`D5+9Jh?^2rMh1=1qcFmop$2 zV7Gv`h`W>S%noYdo* z{mdqathm)9d|s8Lj%H(K21Qju26zQwLCQM`^=~WtDafxP|tyy*KnO``cE7!hr~-ta$#x3wZS5`?z}Y1pECS=lgru@`~0T;qjwK z_~u)0VOjQg@ZbS%-#Mk+wB za&2=dPEe5ofJT2pN)pR70nQwTvFo}@2%9r+<@+8E2mID={T6=ZSH6fh-uQ+p2-68E zCj|n_SnvD^;#;3)%HJ(|>o%QtBx`_i=;Ho)(N2LE7^3h>-vCucs}*rW1L_ z%ddPE|G_`{hX8&@4q!ew!PMiaRPLht(NSAdlQ7!m;$4Cd|C}Wb1dgJCm->LWK>4R!OhNZv8 zpC4?#HYX1&Shj83?4#B(F{YRY)AD#cD&qidejW?hl%&9nUNxso3oinTh7WYU<;@q< zd0l2~O?&X}86Jc4y|eeQ#-cc2QRQ%M%^O0KN;=!Q4#05RHl&jM`qf&o+wE~U97Z~E zpC_ZF2On!{y#c0!ovR^gmKG1Xl{jyJt4Rp$=X-DHwLADazIzYhcFCC^>$)OA*8Og` z6N%rtik}u3`~6;l^^RJ#ap2qc)UI9p_mkfd&-c)Pi}?R1u=a#$5%-GL=KF}?_ z8|AV8=sH)nrFm46Hgdk6{hrpqIO~JOcH+@$6Mtt7qbvI~`{y;!=xy7Ol&M%so`4Bk zM`FFvRbs{iIN{;pnR7;`j>Z)Q61Xt2rvgLP?pd+@-S-{+&MKKhXJ<+a(47L~L9bWv znJ#Hjuot%!9JbCP%g=%(iSqP34h97#&%!98=R*XvXbNHBiJ@zs2OZPz#D>GpyXcv?EQ_Bd_OsX5 z*HeuVuR~NgxPqnAbO!0E85k>K@6ps>+-d`3tlImt4hGw)ibMlTkcLNTWN`al!LxUy zdyg6rJ*im`1}Morh;0CQTI4fxU>2om;AFvZ=3ytHjs+>Op--EUX+1bok|)-?tA;ii zVwt7PlFQ`#*-w1}Pgp0dwkc(PU6(mnvCELc$f?ou-56O>nHBxj?OOOSPlu~kU&{47 z@eVynEw-U@F6w6m+z9dYYRzsu2USepm6t=V^bQ)Bv7`kf#tP8~)jIbgF)e zstRL5+kSXjQ=8?IT|=`Vi|okp%+hpzpAI}a_X!~I@6pD2S!*54d(f@DAf5Q0M(c&~ z9L)8`wr#g;TH^j0$q;e9$MbtqPK19iYxX!m-LN;wfFe6kGCX*P4Taoyc>NZc-nKqW zTAjk4ITVI;i(M{cndS`bdaP4_H9Tbb#G5%yd$NI~27ABv?ziyv+izpH+u{8D+&y2f zuCDOlh3D~whp%hB&SQ|M^?ST;@p+K7HEO6_7WB4ZT@rW$P;anpd%XDBSMcD)m+}4w z@8SFJAMo;L?%{9^?9PB(8+c>1!y^H+%Zi+KYHiS6Iu0ZsROlSm0c=jnXzpFkN_~z= zfj(`i#A<>7Ci74h@{C;1)%%{UcFl9xL>WpzCIWgx(o7R%UAL+>VArh^dc6T5%le@L zu>PTpjvYFm;|Jew_>2Gj8vp?h9=wRMo&%}4C-t(dzW)ip&NCC#>;mf8lXklu@^jDO zgAYEylP6C!gJs3N^ZNjR!{LB;-gyW6{SLqmtUYi$8RSl?kCZ$_+Ld5Bpp?2Flhqf6 zp@;QJc7~5o;VzT`eZN{OiiWf%C5wnq&mPr>Db2l)Np|9$+kfA(KXz1;fAx&BM+ z>c>&8-#Uj+>!dqy&))l;ulaE-4(?*kp1%KGzf*pBE1!Le@M#3CjhSUe^S}RlzlV$S zduXj;x9pv9KqMOuL3~D=ne+F}8-%iGkPIRaDl7_NTr`le<17fPk3uN25QZYO_mhmJFd95!EGf$~ zM=I9T=TWQ>hnJ@_kj&#-6Jnip%<>)Wwx3*~@7+G`{mLv^*0#X>zDbrSxyjky)rk+z*7PvC&)faJq zVm$!e!^1PH$CwRtbQw7?2O=SJFr#+?b0ZLDO;8Hb)DDrrTgp6?kt2QE5*eQMGKcC)G&!JERu z(t(f-(mH9=3E$6PKK?;E-MbE#%*q2pK5EaoF>H-}Yyn3GevZI0@*AE?a&?JWPslKe zy=IyBv!bj+mwN-d#4W;g(bhTEbtf&x+ij1dWf10knh2+=(-p(9iu|61K zIS|HL3J%J_2Qm7z-wJ=q!+PT`2`74T=DdLY3fN=>J1$jVn0;~>`pjwOT|LIh6Un#j z=pe9ou$yhv2-Gy7B@VQ__hDrrgJ(9hp2cy1K58gNN{chIIruE2CsCCo*4k0!{#q|t zp8|+d&n%y8Ph_`78g@3rK8m#dARm|*yU(mxgb>hONkD1=L`qNBZr z!HmEA_PcoFjW>`|!o7RvqKK&#*H;HzKK}whK9{Y90h7E`9pbSo_Nt^8(VYuI!z3(eIp%{T;vmPP?No)d5af&RxQ)=3)TbIV{t4&wxSk__R)>Y9$ z49SUc3l>$vK-U&4$ZWkhLmBThd4+dw`1k+ezlZUN8l5N8-_K<>lRW2IXmJ@Gt+meKYP#qP&YC@-zBH zV2QOazx+A;_HX|qVNwR>)>2mYXfe;b!K5iF4+w!!eFQC8$WqfOf8&5eXU=z1!p0G*LR*m`r%D=QN1k698B5$aLc ztDvlmkF0=TbLL)3Ll)Q-sOe~)GA=-D_0I-$my8;NWVhSl?CcBxaDIM{i_81CxVXS` z&pn6zevf zx0n+4nznv`grfee;>|jm4w>wab!?!pF+N*sSl88r;L7+}mFYoY@=Rf3F8<8S&Apba zF^a55n9o!fn}EoIIc2Jz`Vo$OT)+C5QChzw7WIteMZn|VSG9;8iaX1{bXf48$ zH9)PmX`qn9j88n#&k@`t_+E1L}WeYoI&n6 z9PCR<4$2AAy>pww=Ik7#6W?O1FQWIOU1tkUbgLc!c}e~}%==OFUmVY2>!vhm9=c}0 z>8VF!)6h1N_%1jek7Bi;47r>#nt8C&U_2TC7A+P8An%?o&v$s^C-bW0G`!chHYL8B zeF0Er4|eJk!+n6=$p_l8X^3q90ltke(81Vcw@``uk9%VW+mEOs@Q_hs-%}64V8I`j z`mIo+_-q=;P&G)-1`)Llg_PAD_IYg$2s^D$O%lTAnt(%3gXcMz*Uq*+n6~6>y5#2r z_YhPVl^~#7N#V}^}lB1nh*S(-HWUiDC3$gOIAw=Qa|aen^-4<9}pL#EI##OGCBzs=bT;WNqqSMV1JjgO#|u-o55YDZA&_|mWb z1N_y$`YPW0?h)_5+VJAzg!A);Q~<^XPy==g@^Y=o)KQ3hGO8<*4+B z-E(n-bS4jFuMKBsXHNET#x5t{qvC#T=adn$cDo&JZf>wF3+~;!hu{6(-^HK&$)Ehx zaJU~ww*RwAgggz*`Y4(I$6?U^D2stP58$J5z-Pr%%cmU`|NCaY{_F#-_Q7ZG5U3e- zUKjk%@B9ufFE71F+U<78l+{m5fK{^y7$E477@EJBvnWhzux(&8-*n4ToQfaASO^Kr zLS6t0>qMo}YHDp#e(~9>Fo?n!Zq5K=a^FNLz-tKL@B^-C(BbT(Fym6HC)clux8xb#6X#a=%sq0#%Bi6;YEK}IF-pHUmT$0#>p6QrW=PelRr?p6-suSwIov8EnflX@Z3zjfV9Q%!_K zi%W;?(5!XygYf$18rRp?xVgE()y*{?KYD`0%?%ER1KK9nt9AiCTOAS_nSfdWzR7=A ziFT{(p%TU_vPL9shE4B>U|4Ok6tJE$0s>7vh@*t7wFa{m8$$`6Kzv~$4}c^oBbsu; zx~{?~&l&r(6_=Nn_{@th;gwfj0rLwkja_yUWRYal9_$u&Aj-}pW(Z)|T1f6?Nlb6G z&mlL;7AG13WYUPp7(E^!qY)QRFfgg_>!yjM8Ff1hc9Al9jNw;OMswMW0>JJ~I{-^# zw;FRG1@^TSw)VVqm*!<<(lb~a#Tdrs&50IWS-qLebiej(_`|U<@=c0ntDSpOAGRLC za)QN!4xDmvw|!^H)XE;J)6~m1Yh!7HsFVn`HWURnvw3uaHPJiidKK0{tBgbqjfMFq z`>%rTI!rT3t9cuy$*g6jdvj=7<__mER zk|?v@0|^#gjhaMoWK{>b}P^#n~WqjhPk0k* zBp{B|=e~y~M1Y2V(iAvA?*kbN;>nZchh6vHHxDz75^Q7f^b?i`Q+EI)>HbrKM<_^` zL|~QpvYd@bst90FN10`Yv9l#znpEMDCfTboyQ-aWt!XZS01A@tlT{6|jfM%b9vSvp z0>)UzLGSDXuJJp=4#j@QtvV8dVoL`wd6@<}X&K>vz1J}?GBA$1f=9_^=rS-N1>J@X zR#Z3TVj;9fLP&@qodjd*F}7OOr!rVrDEqHBI6J!5s?XIRN)Qxil84%Bd{HvY3?SP( zYpo8{`tURY_$SsJy)|$rAIix0SKy3f7;eCS=ML)RZ17T~R?3vre{q1m#&pf9>M$_Q z0BKY7wAvKh{3y$nk>F00kXRYTUT=~IVcD=J>oYYER!;kC1>(?0xSiFJAfO1ipE!8{ z>KMY1vYTZ+uj?)hQ^r83gMDCZJ;suYu%qpH=8pHj{{#H(-~KJOdccF{pBFVi6#!~? zeh**x!fRNUJ!%MqJq=s7p}G%6DNo?PWMc?xa>)ga8xj{}WS{|5&VYJ@mtKAqU;OgF zjc@Ils+k~q?$@s~N;MHszh}x2C}8!)_00*Z``65Oolw zxD#q45YEy00&l(b0siW*uh0p2{-u|(?(WHc9fkr_GEkE$Bo?HSZxL#yboMelVQUq3 z>F!L(64%$)*z+D|yFGHw`0&FI@%Y0>`1U*B#>3ZN!@Ya=kh|28Wmj-K9)p6_25LIg zP=Y`(-$q$8j7wnb{biBh=HB3aydKBe2X0zJBp+lGMhNvF7^R79lXFpJpA5v3tIJ9N zO)&-6N|-G>OIX?%wZPMU*~u$~N4TU7h*LsiNIne7Fv*lSy-ET@YnzkTY+zMu#eekM z{~`Xz|Nei#4}S2zJY!D@<@%)1sGk?S@5jlmdKyFaSuw!7tOia8bCK6O001BWNklO21$q)Q65duG9^*6 zOwHJHHx;3=!+vpu{os-HB-;<3pTNH~Gj@a{qzIXk>={{7Obn$Njm#@Rq8sQdx-O^A z*?VWEAJ!#T?y3d>UNoRYAUc5Vsy=nj-nlc^`qp=mLgeJeF~0PrFChd5hFBUsn5U>t zo|{~(HT>KZX7d12R+CR>)`qD~{DaBrJwqjXpT-zPM$HpU?lf+Atas5MZ&C5 zA@cEPo4FQyYyVbbbCkk|fGc#273QR^9L5y7315taF^*V-Sz2k$uIN2MR6?hoNuCwJ z0Bk?W_v?%$x6$6GrnCCVpMoIslr0rA=PWV~Wk9r$G+!jD^sP%`O?+rEc!o>COg+lGv-WEP%-&;B+ z*CI@H1a6Q#+sa?lHY8Xq6y<` z%Zx~gfdnV*_9^f7ETUdv|LOq4zjv0dGvKM7*+gVsu{wa@y|N%gxli&s{&OU;rtwT_ z{~0|qCK+=e3uw`&suwsQNPue&*I{6EDGN~GJi{3DlUStL#m^51#2wE4EexyjqbRL*UPz`#?SaJSY=Xhmz_6 z+wJM4u9&txQ+R#8c&4wW6|Vz!n(aq0MS!xt^nUo~gNM4MWA9(bE>KGx4UJULhb?bH z$DH?I@S08ML3R@5Mx@Y5;Hew>sP_SNo|+2Ca>!uq7=QCTH^!f1^{JdYFWCmp9z?Ty zzYgV6`yK(yhhe}p&z7v*Kl2eePXeavUWsdqet(wxft4x%ien#pFV5g(Ww3giY7`fIO5hHibX>b13(Y9J19 zv+JzjTP4Iqn5Nu$hU*|dFRV@|^NchOE$q!PL9g>ahpQ$1`t$3`zgJMWmQkdEdb%## z9#h489<3&KUeHQhu#ivcb0PeHJ+rypbKb)|D^(RO9Ru6}B*pCk`dUds8(R%hJL@lR z8R2V`X0_Gt$zJ6VV-!V7?G#V`+FEd;tMU2IdMlQ*r_b=Uul)sfm*+S+Ik6%5VLzb; z!lyp*32ZhS3ox_iYNhn?L#-GimTBqywnGq71za5=>bVdG44WwDlu-R;Ia&m&hn@pji-uSx~5lYe)iO z*B~|@sk3u?p0vAHJuO%Eo2I&;EAnp}l&hM-si-=S?btl6+jSd^P-Pg0Tz_95nKht< zXZpTb?+-IztL;;-z4jV@?&p3Ezx%tt_rpV3|0)p+Kj3G$&ZgjbfA{?uwCjHHdogX- z_5^E{%{p7bR9^tT{6Uf85BjwqCUE#c{#k#xzn=f7pHp>PjoXyOL+OiO{1yEAum8G$ zJ=-QvibE$=Bnl`?wt^~#fLfY?d;o)Z8qQ+UI{BG{3*XVuE5D&?QJc~zP0J!72Z@`G z+PtQ6F3p>qC7RJG_`OfE`owdE3*j~q4F$pRG|1UY_|)?lUC|F^ zXTlh5f#6ctTl%f0)q^TZ6_@(DdM;~W#-JVS%_Apg_I{lX6P`SM4-XzZ#DjMp;N1rg z@b0_s;K73jc>44yE_Vma^Mb=PV?NBt3$tMN`#qLlK7i*F`3M=c)17z`3y<{%fc+ld7iK=;$d6a&o<99=IMYUjL4i9 zOw$3HyvsjpF`!PHl*YOw=Z#x19VVQgpJSP4paM6JkFnisu|3*$k}hkEL7123Gpc}; zHj{uqOo~mJnPJFmighDX#S4umu36ZH)#U6gERQT8r3&NQ3Tdj`+`2SueotglRc*|) zX)d)OrC@*+C(mkfv!tNwz7yH&brE@97C%d<-&;xusre9U@vH0y4L%6M7Ud$U0l_IL z&@YTRO?#&x)9oOEU=s2`J&@XfJAEFD6>%Xb>xMs1E`=>H1R(Z@b`U=+1I?Y~NU00& zH%yaL6&?RfB4G~lvs`kuu%SgCm5#LOW8K-6`(?BedtmXy7*g)@E2q`8Yz}SYq(Bc6Sdy**= zD~e|xTaZO#QbJgN{H95)cWSd32+1+!ihw&J1tmfn1_R=*lbSOFqKavxp3lsd^T4AX zA&n_r#Cwx{N&^YwMDCgHIn@tFDhI2Tg=M;}DM4d|iN~U@ab+d)xugt1GKMf82i3q? z-QPU0MU_DvV;2dNESJTdSG?{?XwC{?>Yl@YOX9|osW^}!yX0Sty|W3GegQWuoU zYlrV`XbH^4XyZ`YfL@gIJ7~mHlx9$_=8Bq zb72dP7}zUO)996DUTU%XX@hofy};q8LH4rR7)Zic&WlQViO+fQ&DJ_(EiW&{TdFi0 z3$^9DP2%PW@W{&C*lD(v*_6r^ajfjDtbMo&BEHc)n>|I))u>4=V zU3Ivo{Y;hMUMC?|Mk@R8s{CF)o75sCuSt>$4+VOaolJxn6EplPI9RS!q?l~K;Q>p< zFeLF@CG+IhK-yASDMNwxxDZKd2ie1^A`PN8B;IGaZq!sLnA%RkEd$YIeZ|1_O{))C zIRa52cu>0SRYH=<8Rr*g_~tjhhDVPd;Kr?6*lf3malkxhEG6TUpZp|l9N*H}(-j66 z06RZPI+85!S>LC(%m{(6M@2OY1O_z4l(QB988@~g&YnKT{qMeu8{3RqH%DxSAmoOO zK&oN{VkiJ*#E_Bm4AcdIfDlIBXX7BOa6Ma+v7n7q1pl?bDuFoiDH{g?ULy~_gd76m z!H@nuP&Cy*2oWi5_zWlj>GKeiSQ5w?P7{CwO5P#QdnSeC4d&@Z{Kfyb$3OcQU&FIY z;N{ou;%|KJ=W*lKZG>S2#e|p=_moj;Xwn*PWtjvXZWGAPW_9!8S}KAx6l!30=*4b_ zF^xFd93{A%=(}0cxWU9+ZAMIL~A4UCc(Pkf@5}oHYPE7_lVh#Q;$~e;BCc zJ=W(tXy4DFzTQ4htYGvUi+o+IPRm-mvyGMSky`=CjO}4aR(I&SQMP-q>LT5ef32KFzd*)xEQr1Xb>_(xKI(=|N&zkCetx?%1Q6}4JncWV#T5A*lm&%5>g z7{KeVuPyAZ`}&8)NuLJ>M{aMAVZ?AIcb1mPeT9$=<&fYyLGoJ0Zw4QN737*NP>A^7~507^oIH z(i&e>$mSohgVI3f_W*9~}Q1zzz^k8Km_Fy`7AV82JTqp3J&Depx zav+fuqY4hGr>w0uDjj2_l!D9MC7!(Z6!-4{{Xhc0zk|2mej5)TJiw!ekMQK_Q|xv- z`5v|*@cxra&cvQ_s3JE7UVJwK3Aq!O~7iv88r@n2EFW4EhjFu4yuxln|)OK%@8C zthF=%ykl79ZqN5DKJ_AlZ^+H_4l71waf1YaoZQ!Yb}}n?aez?^tki3w3JgA{LdTeB zUk_&IK-30aexl9*S2P=+j#1kE95;n0&$4VFu$M2dLFbNLsY;X3!kyHUPr<%5o60kw z14RR%eVx#}V`WGqK(K~Lr8F?GZ|7_1*s9evVrw?+nsw&o^%k}i`ZFtr*wsZ11Zb8I zG4lTBfo>amtr(yrRwuCi3th;Y)**T?E$q&D02`nig4JiW!UmcG}B^KAb`Q`FRzJlV5kO-fp> zGH4ahGOLc&-UpGQvZAAfmh?mG*n(3WAwbu$jr8q)_5%}5nXht2RwFe;2`TIAtj5Nw z*RpaeQ;^=w{s(8~OQSu?c;abIs z?r+>L@UxKRjOQfzc1|+$k%4&KAC-|^D}$z7e5puTCWe!OjSF8-R=T!z4dL}yZ0U3xN!q7oScA!rFu9_`1r>^ zj@!3y+eFfP`1-yiJ0;C^{=|N8>i6>M_OKKq_i=d!)q*hw+&tdmFaGVHpezNqjuWZw7r3tHf(nilGzeb6cC>XA*QYmP=ZvTHoS&Y>1eoY$;H%fIcMxI z_t3xR-q^@i| zui7can3{!7KxdKA6uHT45OQ7+WM9@=U>HVumZJ@I^t@I8Rz3T*NA>56?ORrd6{)3} zv`}Sz3?ujMyWI}AZ{NoM^_8!5{i5$beh~bNRu*DEOwja)!D8*svJdedpT}HXhh=>j zZ1ID9{excX>sYe>yof~fp&7700X{#9AT02Hw}lA!)Tcg)-~7%03504vHw6`&?MCFd z&8tWY9Ei+ih>43Pw2e}yOdW7gd2?YvqZ)e#%2tb-B21Qq9AmNxYN;8^oQ;8^3@`Pk z)zr<_K(|CtEwrlmU-<;iBGd6wn_P{jQ4KJOt`Uhb+4nJvG03JZ3E(DAh~nvkPO7wI zW*+hD287DRYfPb+Ek+poZJsAg%ghWe3RjvUf536-Z?T4>$@7XaQFT46rNZ1qk;!J6 zp&>=Ju!h?^Px1EKZ{u6v`WD{4cMp#qJ;CYu zDR#RZrfHJ@9 zO$U<*8Ur>@0tA&7U?$#U%%)wCml?}E@$(^!RrbVMBsG>hV> z!~!_HWLcPY>O*OtQNLGNnwDZMpu41Wld}W}QGJSCL!pW2P_Idnbtj)so~OnPm4+FO zNmP9h1jWu@O`A@C?$xp4vQ6g`uZ_NGnw8 zN+J*Y%-qN?(%cL0Q}-DM5;X>L5SCkP*Ibwd%1DUP>>0Dz6)1MUrT9f9_LM6yz%)>@ z`_(ZpCB%t6DF<#$&<@9zG{%rj60XluaG@+7Ahbap z^h~P)(vyK}+(40eiUwhQFykYOx8NXl6QVH4;ImEwpqTZAD}xQ)ht>^87B!5%=Oq5* z%HrX$pcbA)6$ZYxbb7yDVoNax8KBebHQIp6K>H|uE5_>fl1v1N^+UXTz*!QnDsi_kjWiZz3hLL{Xp=P61M# zblZo(8JH`=vv1zM$_o}c^S({qBH>DVL z0YVD2=zY<9qx(e_uVFnKZ3tx7wRWL{Nq}J@LJIC&5})?msq^IYp+=41_aRI|S;;xi zSmqgz9^AuQZ+;t*2)9m7#FmS2m?qr4`#N5E^;PqCUCX;U`yyBm$OE0wfF?AbPa8f| zYOMFlzS%J)@hq2Gb>Z5(EEA4WL<$Ap`uba-I^pEzh?sy76!hmk1ZBap>_KG$AtUDl zmcmwWG4OsL)K?mT*`C7QhAIF7P>8la5e3xD`$7;e(FU|e8J(wWbi~4 zdaQ>OfLKuT0YnQ36Oea6*|y zf;b)naX{Ah9~jV#DH;G1|z`$NN=4ay@WKgyv?$w_hvH!MA%*KaJ1PlKn`Bx z7rP6LBc%%*O!u)h#lr4z)iNv$|6EIIQYqDrlhg4LE<&$3;CoNLBF z6?UsC;6SZ@*F1`>+>cV&!bWMfByUb;lINdzVHPQaj`XyqcPZqG<0V1LmJFm zRRa%}WpU}mjY;JhEhaN|Q@A!=)?$)>Ue3iDO!j2S+}M?twn{`2Vnm&Eu`wW|cq>>n zB3z&vRsX*F#+VgvHx2!Hb@A-I1W~1j+(?R z44W)+`9Q&ff1bx^(#@M2$evYVlh0KGtfql7bFy{`>AK5nVaXHEfwJ_j)r4 zbLkuO&gajuG}tu(W4x5QAf|NF##a5?O;4hF+HLJ#%_VP__H* zpHUBvdVi&LvrsE6qy<&dha+`fq>W`%O(Nudp!GRqV6-}BY6E9{9O$xPES!gvM30i=ZqJe07JyRT-EM6=DbloW1ORtj#o%qD# z_5UkF(yL_nTxbj*|NfQn9Ae<`Jn?rV30SifbtU^DnD3jZQ^XpgW94f7q2YJZu+^dp zifrpsU)(pp6q;g58RZJ>bw1d7A8^&iLoJ}RCi3UKN~FDiwf;N?b%L!!?@w=j$1!y4 zTLCxqJk)(4#hz&#TxglE`_{}Tg{Rd+bx30;lhz@)21iyu*k7%AKY%v?*D0WsLG0I; zXCQX(52_@B?H7EWi8Y5C8YE#@Y5i7;`jR@Z8)P1U{=90Bce%pgQPqfo#NBmS?NiO8 zw0R(UMS~I=7!1q8o-Ez7<*g_@iJ}Yd(Hc+{Zn4$9`uw%dFvM5c;lzUs;P7;EPoG5Zhqs+e$}7r_g}M@D7}J5 zCG1sHWjSZIeIR1_ISO9A^Aa9EdGg}7Cd*Zb$857ty0i}oDKz>F$qkpv#v<#GVk85Ikt?tyZN zJfGpPdj>2s5*=aQAK~412>Gx(@fg-JNH2 z?G*_r4y??xL0n&N>7YXgYZbj>AqMUdg3DC#KfjpIvJOW>muaB`Z5zUu+F5T@XHTLE zsI_g++B(jkNy^eE>z8D(B5KDa&$zt2#NF5K;&*=Mx4A}H0kB@_>>2JqEC%d{`P%z2 zOurvY>xwkr^~gU=fb<7>tu@}Z{+{(Zcpm8L`+`VBUw$4^{C-s29|vIeuOoPT1(=mz zCnq=YPygxv#z}_Gw0mA=k+ekiiHquW!iQNP{#ve!fsDg2FjJ#T=Z(hB{|f(Y0$R0-^wt;+>}JL6`sm0Vo*-6)|!_60I0z#*Pke)EhCHgqa+$M8;CtJYJhA zB)$#;P8JCv=}A@_}fN-&9eEC2u?07*naRQq(W6HUU+ zNvblOAnJXf0>opuS$}v&bMxj@dA+dgP>`e{u`4R}66_x*ih}}6?N$osdhV`+Ee?3& zbHbRW#<*=#@H7l|-B>cLp@YrOQ5kRAu=y}KZCpK@Er?vudzTYJlQuiM8~&O~p4;#% zL?a5@e&7plZU}<&nrzHi4NkIZQe$KfJbe(k0dhkE zW!yvs>zNs+9_iZfa@c2PmU#*W8dUK^oafnm)+vauI>ZmQ68{<8&;@-UVFT-Xd8|6* ztH&{gYTn$AyBo8N6aPiQqT(gqJyg-KmS0YomPxgZ2)pf&{%KZ7~|P<9x(=Rkp8 z5;a2=?`-lz6?yJ$k1o3J>q9IS6GfPr>N%X%&s(242_%Zi`PlWrhwAle;8P%^$OCqM zmJ0&$x>nhCsab+boJBx4aIPJ|u7D;pIjamLU^m2uoH| zz{L}{I#ALNdm0#>&6ii}bgmCz)&mv5Jk3%w;tFuWpb{Bq5ZrlRI=@yuOsa(*F{3&= zpgf53r&@TK`i-knh5)|5wF;v>SU+N)F9!3V_d{Fujb}we8b-4&%QZ_6puX;$t)R^4 z7#YkNl6b6Jea`jo-g*;HpFZKRrR@=7N?4YRltz5=Q=dkN zgD88d6&xOv*MXM}p!HmIVSJi*;Ohh%c6p#e{h&$hkrq?f3`4+6FP`A*U;9(+&N4P* zz|qlwq}PlpYGtKa8UkArgo0W#s1{JoC}jdF_q8O0nCdNo#1EE)Sx8lCp3oSSMIPLW zwg;o==WYXvz~;Kl4wii=#0pRbg$$ws!U3pz)cF*L-BaYlImWm}o<^LX9pMlD;B9>6 z58gu#z$KxcPm?v%2dPoQJ!WfRBDLO@VWEmt@ z)2adiYPmOHUMBI|ALV%n*zI;et+;XH2F76!n;G_j_N;Wa<$=_FxeJoSI^;||u0se2 zseMiD1NjVySNaaKGQm0pZA*SI-s?#5=*bU2tUjewGZO=`u+UioI33`#OS8O^E{(cwWfeg-<1`byVUu08t{7hrc4V>Q`AZ8JkQ^2bfuB0rAfAyWxq537h)Ab(nO~*VH`)KkgzNTX^isqHr3^cX5!B+fp5xSQsAo=_VKwq>~L{$f&JyB zF-S_yD2oE^?4>k|2inom7Q-;$u%B^ydWuJn9^qpj`RZ78-_`VRR^R1oa`-~Y%NfD*cb?s(pw2;_o90pTVB*IdDhsM^7Y_+vPxYrP3?2$vLFyM z$m+rcZ*=Tk@0Dx=2w9Kn{R~saeCUe6dI$yqS zXxjM~rYprKKhIH;za>Oc&p~-D{+?vlEfRGMI|ip=mJ-Gs6Z@AygfxUs=GdgZ4M4lD zKJE9Zp0TYd>L#fV)!6n|)PE~B3=tX7(7?P1nd3EwH~Y*a0(`HluX^;NUmO1AifBAQ%f=MWz7(t=Y_2%bpI~> zAV5>swU$PwK;ePxJkJPXsaAFHM9s1bSntQVW3l;tx{_nrF}tDbO{OW^Ug;HeP3=OR z_j=A5xfawS`|0Yu@oUR_))us9RHfhwwsB7gdRNu6fS* z)K7mBY1s6`smOg(r}B_6xa5PF9O&iuoAnyW*We5Y0ePBugq=1V_7*o->Vy|x{RDpb zZ~a63Kfm*T;>~+|#8gqrfJKKkaR7x0b7C-dbHskoAp&#WfoMTl3Ipb80m1@ci;4{Z zwhp2=AWsW}kjTcUuE-Y3#Nk|SKcgytCVNv1%y?Du097Dze~dZ^xQ^e)@fVbY<;VWPH7Ip_9-8jO}e*Wii znE|Wb;#P+hAP|ngbAkAe)lxLNQu-R>dSIIOjCU*x z{?6a|&+#XJ^d}!#{OU*Xp4JNA5BhVi13$fD)7P-q*%UmlUVJ|sagC3@AJ%wPk=g&; z^ig1t{vd|9@AvorI)blPKC?`wf9=y$&JzcqS~0|ApSy@0FIh8~Y}(dIV)KlWwb&LGtuPll ziAxpGni|D^zuyBjaDy2bnDBDZ7@3t^7CvB`Z(%UDVzVMhEGbhXy3A8|e(mBwyyyzW z#A&_k3Jg@XN>KSf7qlV~OM`tjX4Ei?OwJkPWya~V_i%dp49}juhx79@91eS2oSotP z^c2go81Q;@wCz%)Z``tCydwofL359BjxCDX{M$MclkOVVd^X?RGdjJHzhs9Me2w z7>*1GBLa3i25A*coTdreaf98(9v5flI6pnZizhGQ`1lypVd@Hp0o(6)|2$oH@& zLZt#M((u)Slmg~C%cPkllMFIOYjDfbSioEWv;Wg{SWJ4zfPx2c+EAy|g*{32{RG*+ zY@nRQn+!Z@muICGPTOVg%a)F=v~sh=CRKa$WDMaVOoJvTjTWN89#nzB^;{5i zXrsjC5Ky%#uN6f>DP0S~v@+IsmVIlKwDi(Ke6q>{g{Ml+>y&GDeJuzmR*)#5P-E;W zxLGu4NPr4R>TaZfMH*`lEP)Cl0t!hJt5ViNfHu_d7BdU`9txnvHXhj+-6~g9&%s(H z^;W?7Vne`YRgpsFvqqSoja}*6i-Z@+x^d@M zjM11kl^Coa6r46dYqo}1i+`9$IlEN`N}v$UDhNIRrV=)r5m_X_#-=YVB!bUWVLXa| zunu%I>`~dDCC|<7M;a8fRfs?>!PYF?z!g+F*>}gJ3j9n2a3fNKu*98}0tXn)d}h^b zUTz9p8xvGh*=qw@%v(KFP+{;XLIFbp z)*gVU6J5u)O2kfs!n7*w^cx?<_117igvnjMY+g0dG!kr!+DlmY@FM+1U%zZbL54!B+x1~O*z z;uXeiQQ=m&meFHg+{ReTqLfGm1p6M*B>oayrO!h(V7eG6(Q46__8ntHHi~4mp^Y+| zRsF=r6f>-sWwCYMvJoI_iL5SEB}WtnHN^lbGQ<+5B2^x|RL6MLJ%247Rf~zv%11oS zJ)om3_z<{$LSZ1EDwzri}`c&Ye%(B5&u|a=~4)c_o3BbRV*qh zxSo3Nz4!3e+uub-MH~lEil{``?f1BQ_Y=5z^QN7bk%B3Lydor!WI!m;PJ9mKtX|vT zeU)IgPRhIvk*&~Ji4d-Y59Z3stPnRq&RA$d2^)OsZ+sr7Pu|0y{mH*ViU(}cfMFPs z(gG%%C&XA0YQ;hoaRU^ZkwQSO6H2a_N|uyI&36}zcB~QDa)CG*NO>*8H7EMFM-1umfZ#R7tc_Z3aVSoQ^dRPRQ&dD|0&*i z1e6r;(?9#4;Nze98HD2#WGUh_>@kD{gn*DUG95&5B^DK8xe%ej(Cla1yv|#IU?l#` zYE8pL4F-?rr67calt$dT^#b<0OQgUcZ;26eDR}VU0RZ6c-MbRDS#X#S_H64KS0a-t zCC6bvK(xA9ZD*!w;y$AEfsNgHEH-(%PZv>M`aOULG-M3toU>(>m=X{{1|iIt&ZT+l zTW=`Ah1};bz^?nH2XyuILhu1-kO6(^_71~JVnRr~CnyjbW5nTbz|Va4vp9M21kawG zULm@wGUTrswDtX38oVFzat*%vHL?zQeLw8;{l4#cKmR&V_d45x7()2+`+=_C%M0Nr z|9mtp2-+{;GoSeke)Bhf6GVigBc5X2ym_k zl2nnw493t2fm1Vi3ZyK)#>h}+Ob7v^6ddX)l-Gx!(fjp1`P4^dkm;u9rTxmzTQgb6 z`6Y5;*n2j4kWSOV*FKr*#ngK=>4Br3r!73j9@a`CiE_+dWi7hNvS-P3$&f^Lef5A+ z;C!9B+SsFOkI7;lZ|v#E4AEuLl=Pl)mkSrE7Z>Mv`t&ItKYon+_wQr3+u_->XE-}O zWq@(J#mUJDHk(nHZ#)RNefu`<-o1<4FWtswv%z+I#FhZVfMFc5*=~`BWPdh}gZURL z6LJ^^^E^_IQJpfXBqXJ1-cx+P#m_5-D-$XYs_1=E57lDVP&auJ`F@r669r^GVy3w? z4#9lF_Z`9Z7`@#ZBZqAPsFSlWTd5c`ykoGa3|IYw&`*LD zm~4{qmX_WmtH8W0T%4AEnx|gEvP(Eq{RZR|aPWn{uEFG;p*sw{XO$1%u=Os30}JtT zepCK^s|TNY{uvOudJp=H*+4~u6vU^o=F0L%OJh#v!MECQZ7=jm!N$OMOloC7`7<<^ z#h9l);X9YM4wd0#)+#=!KEOQVvXgn$3dj6%sq2wCTa*}M?h zYh=}{x8KvEN#K;hSXKq1_dwSD!^?~f2y;patoBSzIS&+#4F*UkrAT%49P_|@yI(6m zHMib#o_Q|$D&>Uec#?v!v|@sLD>HN#8y8^9%+H7_q zjA$O)3iKKCsS2#yCGY35Ys&!kbxxeq~32Ow2 zyt?;onD5X3_0VXotnwbY%~mLM%;L@~c_qgTw(kbB0nzhH&%5TSER5GmrWP^l3kAqC z*D#ByaoU4huP~>4CWL26Yn`JOKSk`rR8az`gu0kwBBi0bFSbX>`LX1sBc`-K%jQMN zUVjljJg3!a)y^R$2(Z#&>COlpn5aS}FCw)M3IvtT7n1M4hWKTipPk{&H{ZnB*(q+` zylL#${pB71uoW*9Jz2{8aE1_`m$`m+t%)G8v0B?LR9IG=6x>QO7J zMqUI7gS81YGG9~qS?q$NwsI8|GP7K10x$zKG4NVdIt8 zbsad=QoA8j=P{0!ak2)D)C$W#=cr5^8OP??JxvqNFHUiEbj-a9G?=;%OH?J4-{-U+ z@$7D8aq~Gc8)3!w(b{j6T&@6ae&5SWY3IBshJ02)b%R?y*VPiE?ZHI`w1r6-I(m_M zng`)o`npY5Cv<0J2%Uu%hdaaUqs&rBh*3vJM|k_Y_wemE-@FEZ{R#H=gQ)1AXA$td zK-lMb)n1pywBGmL&s#UvTEG0fDc?ushClB^e$><0zMp^AK{DU-+Bliqb%kRk;J^8A z|7(2V7k^16#JmA+h7m#7dz!xLJ*k2OL{uw$Lnl?T_a}Z^dC|h4nO$4rY;7P#kpy5) z24==fOoJ2??Xc$*Xc)j*BnjB0&~7tVue2DN#IjTk9O;2$mNK`rYDh|`dU&Z+O+Bcz zz)-fSdcT;*Pe=$ciI1sk@JqFnSPgp#F`_IBmU%|W>^G+XtQD>1AIIKzFb_UyTAa76 zmnd3fi-oE!X z9zJ}C)AvsC-qWX;#Kish_!z@5NSb9u8b{oD|2ed4`9#1qdN_zH?PTVS=z2C6!lGPA$DyCh_KZ zM!^Nsg~qh03U(DqkL?RaO+EGvj4@k;d)S(TPa#z?Z zXIMk<*n5u|=YgD4t)zzgkRqRCOxm!;U{c#^&WjR<bpH}4Y2`v!aySH5~XV_n&J!d z3}i-^f`-L{qCD`eo|r)8z#5g4hnA?^n8CuH3yqnVMJ}shIs{#V5=_J<+~&Ne08H~Y zvZJXrFKn3!qrL31^04b;MHx)4!4CxiYRasyof2%zcD z!OnpSbc3W6IG~ZeV4K}Vw1JnXfiz8Bel0E}MECIGrGM6pLVRCgYp2y)?Rpp!Sf$pr z`PK6-*Pc}l?ji$-_+u-hRrWMArdJ@A+*@EIX~uvuYt>iUXD3LqID*w^rg{lUJYM45HdZZ|uZYCDikEaYV2wHp5E3v|YXc9~@mkY?W9IWhNfvV7Llp2h^4?er zgL)LHvECw|YYY=Mg_&kr_yI$bkVs{=tB0_jeHA)1%o2tNTOX~q=3!Ull&9w9YNtx8 zuL31^K9SYmT5lTQt$4Xmk3?3o)Jj`$uL3B70CIcEID~yR7{5h z-o1Yx_ul?42C2o5#sPU|_1;gt@l)80gPdKk{m=Yq!983p>R-#CZcH8^7f*iYyUA;T z3}80~W^}-luxvHOKE{A4FV=?zQJ;lCxO3+voL`*b?e9JWg@SS1V6$PRqu-+`f&!^$-3_ z-2JJ~B5rO1X#<1-J$ll?2`>hTX?0;o4p+p%zM~HDfk97I{{LJV1wqEy|*Rh;`P;Bt~QS!gv z*Zq+6`+4o}#q5m$zWjb>vmZrv=Z66(f9x#;J^%pw{KXDzj|TkKZ~YcdZoR-0J0je? zc@u;BisoV-Xv$<#=8JlvvJ^+8+bMQ3vKV4ZM90a7VkYI-yt3&p{4(WrMWTOO+_{0TxrR=CRbC$yRdn z_Dpf?r}U*5&>cean54i53`;4fn{qb~Po1V0W9W2VPSmG_d-j$GcRb5hi%Ff#aY2>4 zwEK#J{eF+j-40KmKE?fa?&Imxr+E70DK0N}2oV^^4JRJU^-C$?)z@CbYp=Z~?A6#z z(A{;n05@UUMFE6#@~g}Z4G9?sVa^U4i~~<)F$3~t|k2`|6=GEPoTaCCHJ z3<>je)Bp!dHE$tq%DnRoon;ZvFl{133llOHfIZ`GPqhT}(t>l`VHfO~DF)d1wG={Z z>{oX$&GI0`&f}6m2C!yn;ygo3*$sZW%=g`g)wKhi_odP$pDGis$+4uMb73C}TIjyi z*sU%6&IkE4_6@rGtM5GxNj%+TcqEhVC?P8vGN|5ep3&!h{Jgx;dnR5@1&1*Ji8##2 z?=i}TCIzS5zUn=d;nUn*U-<2`h|!5Cq7S7{>gm4S3>xvYK?iF(=5F zrKJ{Q3@d}Bfy?E&CjZ7v3#n5|A5np7Wx;_H!^8e@t> zF^3h)FpO+r|@vENx6+K&DhkF#L ztCM|5lF9eQmdi8Yjp+p?2-HrQ&}^LaenJL(!4wpn0^YpGmBFfjjSrvI!Q_(XcGins zL1XVVK(8nPLuADEpIj9VxnDjBK5ho-7WI`8$Y{(+s-8nBcxj00YI z?KNCpp5t5JeiwN;U`$NvNHHSCfTVkk*f~k=AMaIi50DoG6rjvlmOW4>)G~nr{~2f& z@Krry1!%<#su`#g{|Xa-FAhMxWTq=FfN}wpbJY11n9flT=cv;GsQ`5fIP4-GKbrCM z>4-o7i*x+ne|QhycniR0z_0%OFX7Wa`#Ee+Zi9v+u(L=)sU$2?4!iY=P2Yd$I#I80 zRpL~q=m~1A;ytuoeUUsZrw7E?pA|@?iqk7aB8Q> z(NJRE=d%&779l~*GyAINytwC;tPj!svbS2GD|<4~_X#?H(fYofuhr^#?e|zA6^+4P zN(;hs?1Y{IIJ24{ASf9pL*xU;n!Ai$wJ04~qV;&Dp?9nVMU4bL%rTem^~!1nnM~4)Swz9LbFLaEqnrnB{|xB4AB^To&m~< z!3$5B<=B*oe{q>KT9GMU5$o_wFKy9|i0?Lpz#wm?R zX~1T)WmaDr5JJReGg?qq3JIHWix?Bj+5;rPbCeY7h+!Og+FL6^;Ma*!7>ohJ;v`|@ zCP_e-butVXHydMEfJofUB8FjPh6zZ*hmzeZ#ViH^dP^yorb&$Z+w*+u)(P(3y^G`H z8@O@fhD}YC!J!Ok3hJ@Q#cWIp%misV`*h?Gl6_v!0xaU28xp7fma?Ftm}FR)K1F1N zxy&pBPf|z|q3}%#fwqByF<{8T2!mQ6paC@%Fg8$Q`8a<=1(|Z~lGq6iG-3vC?uuNW zG8~Ff$n*;ifDa6_kE_Of?j_EC}j&@<2~$SqXva0f{!STm!GOSXP)+T7Zy_F$eZSo70gXlERIo)%$Q2^&AMm!<;tfJ+q@u+4xdVL>Xx$Jj68$!V_&v zDP8vpQil*5b2sR1Wu{V-gl*+2U*EZYM_e(P)u z6p&LDj_{>~Su0FlMEgv-x7o8Tz?1)Z%7#^7z4Dv3dXXgPvPrd@(m<_j)YG&LhM6rW z2cG$Z0u0&|ACg)1KJ&1-$=90&g`i}t`qFwe=;tiv<>?hFWY4dx?i59R(Aen&AlJ-8 zP6BETSFC*ksSTD4Pbo5ap)RJBV~esRYoV{FE2<59)S5`aNwxa$!|+J_J{5@8``45u z)L|gTXqNjMbf`^mR!P$KkNUTW`LD>2Sc1Mhrtj z)Q!5bg;Xw8j{6`n%lx`jg=t)7gffBZ9sx6!!zr-rfpQ6y1KS5ceqZGm_5kexTmpF~ z-+Klu!gigX0rM$vc!p(v3QT*{Wky&CWeT`FCp>s(!ox=q|L)IE@vr{)A-?t&FbCj^ zfA=5ZbHDJPV!Zhx!saFx8GNe>AjQGzQId6`eOpIzDtToyAin=0Aj5f;VjKCs z%l@X}iaLN$mgzhlte+zQ^K`&8&A4&n7%@m7mm@5AJU|CE2z)+8H;B{$5oCCv^>?+} z*Ms~r=#ZQmRij{KX{G8-eO?vs&~vNx!cB>hBnw6vuF#ATG)o5?7!Y5rMwTc>_-N#h zRzvt2SOMy&jPSyWsVpjpX`1lWfAeR3-}F}m`}&}O?O!HV_@iRtK2O0f=Xm(?N97{@ z1f2c;Kd0R%Wzttd2*5x2jemmAeEQQE1~$asY&XVO@+=dZoGryR@gYT<|bJ)?rj%KO4v0nR9lMcv3W=t4a^jjb#DSri79ZqhlI&YO*>`7?RHHVq%E z7TQr(smbp1!g*p*voO#C-GHvbvK=P!R!N1MyipfQIW6HF)fa58ct5|A_)Bg~|O@;!?%?-ZypU^lSDdy&^XJw0Ux?EQOq@ZbT? zPR}I8a+I~$3gMStdI>MQ@FHrhI2;bbVjbka3}otLce5Fp)tWZOVAXpUwNX*&jI5hl zih&87rk>3Uwqzj10cjA1W*}oHvhOUfyY2P}<7Pw@R;&W2Q5m=5yE%*_f=J%XI|%`c zNbLf(d&o@GYM)_Q7F=AMW53@UOZUc&n|S4wSMc)7cQB4)^Dzz47#U6WmCakSI_Wzz z+)}q*OKxFYwHC1jSs++b?++-9Je>e5BS^#Z#$m8f9xtQxjLax3lxC5TT+mT9h6{O_ zu^SjPzrTDH=n)2uHZ3aC_1=4)k?EOvrMA>zeSKZ`sIp#i5kS5bwrbvAQLjixJ!8o4 zr`{^T@6jD2m1@UKGY`Jdf|k}E+)aw!tR?hkDr2AnHvnUpDI({+v{_Quys>nhc(%NG zNYBrp7L6ccm{>7 zKRwIUyHmZd103@l2HKa^eO84`wGFg+F{^`PN29|-cwDPDn@GJ@Yi$TD7o_n_I!nHJ89#y`+a6`)#20mN4;~W!{Wo^_H~;n-{^HxfWd?rbzxez3 z#V`JCym04rgz*@a0^)dtm(qwxJe#$gK38Ywr>M2yg%?kneTM{f7dOZlGXR+-QJ!=zNehwAL#w+PUeJ8uCmX z4hP)6eH*|3d%urqntyDtwh!|E*RfWAP~7f=SOCyKFTWA|Fn-4Sy~cH4@7FzDZ$a=p zkA|NBus@E7tPOAQ$}4y98^7^CV!Pc6o3i;%!q_}$jJQh1LgYzOHD=}7B1JG9VN_&E zYp%!zJVDawd1Zzu1uo*PsFUfEG7{Kx6UaR3XHQ6xYNZq4gD22r z%v_eAS(2vn(B-0e1u%qm2$-)R_27eg7Ba{oi=y^Y)G8A}J@C|97erWc#vnkr$|O}{ zrm5037vv@5?DPx|A3Vf6@4k!s_wVDd-%BBxtYJ$jVY?l1=jE4ibadQgq#&TMWYnAtnoTVc)M&g0Dt|$lz#745sSW#!bSw z87#PH97k-Aj`({AX4j7621!^jApqm3;a>?uVyV+GFfa^KHXIpSKqsLkXB4WK^CI%6 zCcUc!O!I{O>qMXo(6dMAUp+-7V(wyMU@Y+)5dc!HXF%aCCz4wi#E?^q5u?b zip@_|ChYBdQ^zbf4{btkqf$gcP$h*sHfs+ExJ=HAJ9rxb^us6%h^y?O%^uR)*j8b{ z2}_qmhEIfX7@g#~I=^D)i|f35OYWI=Yqo`2Q*g*hFZoplYhyr017Z0yNi$KKoRa6((mXU-v$U zL_KR`U}#Z&F^hQqDd5{)o}VxCgq41=m$k31hx0HuW--(QRoH5QWXPa?w+U5-3qwlG zbf;(xY>+BGm<^^4NheX(^Ta~fsxg|Z2@ib`P>}VRb;zI%jf7ONXK{Nb%v(|uzSW1? zJi5{3fXY!5FLSjA(eM~%`t;!!LRb^lAazV+&+=}6u8c!!gBy3AElW0A29`+j=TWI= zrD}j9Ac@qaNT6d|z>N{FfNU{P%Oi*Od<9xrKviQZdRcs_O$9{61GYuj#X5Lf%Zqv8 z$*|joT>REZkF{ai7Gv6rdfLrv;97b5G@#9r$;rBmYW5TpnhNunGdk|6ga2=TO^CoAT zN&F>aK>y*#n5Xr2h8WXfJ%e}Rc?y1cVsJE`6Dt^z@ zRD@NYLjqa9Q?dYf%03UhMVbw-1*|3Uxz~Nhd|}D^^+yMMEym#WL)>EFiWy5~OPfVN zPaP5~(_e?(HP6glFEe5-IP5O)&iyxWarz#%BjMzD#Lc4t5i=4pUVrsAHjxmqAfg~q zMxqQV69Q!f6cEY2iz3X(79Lm&`-Db{Y#RU|36t0cN1{$iQ9L=NmZ)yHq?s8hrZx~L z$~14`dK4347*P=s(uh}HyNefY-^TrS?%~<#xu`M-%ThrlV4gBc0VmN{LRm61|A{~u zsF|-Tm5MqS#0u2q04y_VJ|NTudAdNEE`Vi^GVPELJIt47sPi6q+M&#ssE13`GNUdF z%Df=tin0fm1F%1@c<;%C$B!}|J_a5>9`McYEcoNEKEXHc0W$$#{CocZzwj%68z(Q{ zMcCd%MgY4rI}3vA{0`m^?fr=bz()^g<|dmrqhI>vU%;>Z+Lz1=a~K93A0G=Cn_S{( z!H|+k`xumLvOWe1W9OAr4dHL{NCn(y!Tq+0oOdFlxzb&O#9B$&Nn&y zz0rV1ovafgY9TZ3H;*(lmXR`&)~uY?+=gz#u1wjs_R&om*9+1bh-tQezmFKHST{|MgHNrGyaq8s>$A zel9L9@bKY7+`E4tj~_qAVZS$KO-jj_CdbD&@bXJ{kcI)vlI;L`{q>LI`1ly(umw@T zR++B?+#X4YmwD8J*YsxG^8b%p{`$B9Lcmu1TZc4YvmNdG*;atC*=(3$I&kpUs0>$= z)(|$E0ci*f5IPS)^*|ej0U-u#w@27+j!Y&#O%p&o#bk`Epp>N*plTmbE9U8d-EN2d z{(zh_UV7;zeBu*t;DwVD+`4s3g5X4iM6d!~8xfUVtJkanWh%W1eF}Q1i!szFdhf!v z_ooyEkfi1zTF`ltDhoqdi25AoysVOV;aG^Jn`(O?36(k)i?UQbBhRy_bU&%uK!#TI zbcx+Tu9t#8@_LQI+05}R7-w0K(%}5-TKaio_?5n)lpqn^FPQN`orQ@?XT8^(XBmRfsjd_sVbp#9$;GgFScu>Zy;XrKlVS{yvz`~B9YIJ#jbxb zbH!?PLdWa^-21MM3E6@)7YW`9tHx}de(mMkVHM87V46E~)Jh}Co@MfXW`!zqDmX=r zXJArjz=mh$`Rk;0hdzh=%nvM^)q7z!20eqwKX>Z6u8GDPgXQnN0*c1AcMLkM(>h;W z8QNf_BJym0RSc*C#WNt45vkW9&x;E>xw_x3*RC?y+P&}hsalITcLXQ>tYWp1j0x_W zOMhPKQ2IKypN28JGNvLA(>boH4BZ+O&JkJcw=Dz;3dJ+vl)zBS%F1vk~^v}atorA5JF=zrO+|y zxu$QyWLjU?&yVVbT1@%nfqyuLZpqmcBO0t3LsOQ37#wB$wgrhQ^0dSGvqyOR?pug; zj~8!_INkz@4k+^(PHql(>BS8KEt*u^OQWiiv^AIN;8m*YN3|{w$t7 zJI6P_`5hdl3{b){1Gxm08JK4V$dP4mJ_C8qOn{x(j)fMMfQLe;OXg>3SwMyF5tWQO zXCN;?E-3SYx)g*=pc+vQz_Krx_rS$j#_l}h^u2<|4-a_wV8Np&0S_KW{QIw;;a~sx zd-(cyfZ^sX{M|48V|?xxe;FrtJ_ZaMP}(4*Eud;XLdQV$dw6gFtgi*zkfL5urRrc} znV0_jl=EI|AFrCx{jaHp7zn<&I71Tqnh=5g{t~rh+&VcC-`>KIy+1#xy1^N*89o1e zjk*Y9)C0Gs`mj18SY4qEQ?oTF#r4+J2sb{+j`M8LdE~OfC3iziX6p7H+FI+TG{`lB z%e1M^`!%`uT(4!*>)tj^2m6eieZ%|MzxMMW-8YDqd5+zckXhh`s zx`85x00^LO)m>F*@4PI3SeMLws=Cpj07(uT5e(weU472JWUhSIyPo$|8sN(quQ!Ra zulhN!!)*OLt@2m-{;&JpkFV4CypOflO}c4%mAm!$1^!ho&R5}{y{VJ_{|m6VR($;U z5B>mAU861_s$0Z5fgI%^l4}D(MAZVx4s^9vVelxYlcBCTvT^tbqI6AkA)dgkpmISV zLX4CCH-Wv&XOBP-k)xD`UFstZX-eK@lMNt%S&FluT$m{(VX|qdLovuGWr~_QER0N2 zW}6G3>W0guAjZz*l#xO!fSWpNXj90_wG05_CZ!$JtnH>_;!zo&)ql1)Wz}7P+AC9P zgQJT4uq&hLmbBPM?Ts~7OBbVp>;V2FlZB%A$fY=f3a>I+QoES6>D<^jigsCPIHZ(P z5R$quT0kupPzEoaOUVLCha@W}J+Rn_M$>KC1ea1P?!WN{?%uuY*DB}1A!i#jF=Cqa zSp?cVY@BHlrc{iWA|Z1_R^gy52k;eR+Mi&zn?a4WfQ=q@6B8jq1xivUG8i#TK*cpT zjEN~ZXHe{np*wf(;NtR9-lwwItT*bKrP64OqM>gQQn;jfhcxeSd3lanpW|>?P)fmC zvWr>vER3Un0;89LHR-qwdlE5YvJ_w!`OCHg7rN-zz^J9Th)YBWDT4KW_cQZsQ(CIBkH6(y4%G=m;+t0(?i3cCfXNFm0X;*I>>$RNZm zJF7J`XoIAYHj{Kb7EuywJ*=oZ6hIBNGJ-i@YehI)b)!jW8vtb4~5uMk(Z@hC67)}gfGvWrwBE$A|7IrKpkdbA9i;xP*f-;M4j{?citfY$?7!fLKs8#DH;w; z=EM$Bnr9$&XJe8*rnb#u8gEYadWZNp5t5#5C~kPri_~Z z5Gne8Zeop1ca)-t9IcDxbI3JoEMb97S)ml6(-wr*x@b^Z783)d;hkzg=wYI3S$)m4 z@ok%|2{L|w+_F3?jpZ3f^`v%t=8W?XWmHa+)WM`;Sg;0T1W*^$y5Q>hQ#|_UZ-Mm* z?wuu^qzmkcfVu)W;LhZms9*p9AOJ~3K~%nA_OXG6M9GVlLbBeKMnISV>`>E$QUYq* zA<~3G2@MIY1q38iM9fn{Ws)gI95p&kKvEYsnwEwZB&qj0um&(9I0T)6gpkYFw zQ-l=2(;l~Wr}$_8^*wy>m%oO8|L^{HJpbSl@4mIi-810!S;WbX&pRI?oJU;P5~0!KrIz)6N%t66tzFnJ9u<*E4{C$^~(f z2?Jq{>okrdiFDF%mQW9>aicQ7_ z-R&mbAUd<{T33GH5%zR!_~;voh!!$>9j?6$E|Nmrj&|U6XYLSc6~c8JdgI~;_kN(y z&XcMw52L6Ol!G>Ko(2cp)@37q&NNNVwDrRiA{uA!7}Jsc-FcqFrXmL|xFA1XH$YNR zqdgPDVJ7G71+#SKbTmta4ExT@vfywy9J!SHNU$HeT9ZR3HH64GJG+f}o^f?`rS8Mz z>>%Rq`m9wBF)>V7Yw^!jYemaNlWTQ6gd3hddW=s${S>V=oZPyNci(*ncg}8Us%8d5 z5DfC{8QV>+bGAPp%>}UWd4&~-wU40hb~{fcHZiW0wF?$RD7pB-I)s3elM_uH1rCP; zN*;v4VT^8B4mdeE*|3O5XN4VVdUrO1XujrP?y0}M5F6RAcF&h(*$DG7bq1}a!G~ew zbWEJ@8ur7SzO%cn6@#g+VaqqkDCCPktOZUWP&%~#!hb+jO1CX!}o8k zVVad`9K*)hHNIQp+S=2o*+X2+oyX&IaOBqa;#oh}6rzhSqeFLOac#mv2F~M#;S0!j z8eAbUC4|8lk#h#I92lHkMm^YRym$U*$L+tf(L;*tBd((Wbd7mxzhH1xkMFz%V0n$# z7iE7B#wimz8n-%5Yxl%<;$if-0g99`;jtCH-fZ`|Y=l&r7$qMkx^J2CT^uE6QaZcb z0_`e}-1fZTKGM*fBn_EiCJ+DExEWL+u$mwYZntB0djFhqh%-^L7Cz$e^2VuS%|8=% z<;-cpkliWn88v*#osd4o1*9-<3?PE5YU-?nJ8B&jGpva&+7etWw9o6N zf`)6Nv>llJFmH7k2o$E_o&mevZqtB|DJgP`uT2p3rixqxdmlGzj|rgaysoW)`3Pe& zd`~~zjZ*=&B2BtKa@($hDlYfBc*|AyNw{fpL4IsHJBnZ!;|GA6i!`ArZhoGN`a_L9 zPDJ_o0XTBR>eCpLi!J8ntEKw-WP*@oLX7oC(MDe``5Hs}xJI#SDW41TMRjnh~6K-=eSgud3Y*-tvJweP2_c>r7IZ9pl#t{cyYmTVtPltV#i4J=kpv|3RP z&rp_gJo)rL;rZjg!yGeqVTaQ>;m)l+c5_2Y!0kI3^ZZmoep>~pqq&rV+!%oamfTQl zLP0_)31|u6JwiA|zz!8V1lpm}UfO+ik?W?DCx#5Mrs`UXO!+}3ea49edtb)s6MOE& zFd|(3214Kn+D&LBpkj}uO_)w+eCKy=C-K)02P{W>j_a#wa0$6roOHmPT!uz*zm6FAXTUAm@g>0=WR(0`f{&GO%Re z;sC6NghNhv^lZhG=NUiyFyohx0G(C>Npt^nm+<1* zIj&G}a=OFq(}YhyeS%+p{4>09|2DW>Nn?-t@L)`DFF6O!#cCnDUxe;?oZ&Uf(VfA*8jy8BfKuCME49sl`Qyd3}iO}f_j93PvS zUWO6)JR|7q=w+`GOmF%guhQsVCAi-7d0!=9CwGR__EH7>%ed*ks%!OCzy6=16ZZIF ze4Wqs_qo1}x4$>)q5qrT{3hOh_n{Xma}r@Z zxdfPz+<_95c@v#wbqvR5R>x>zcizci9Xe_iwP30)B3S_y6M4chH$tiF5KL2jQ6AZ~ zHagI1!K4lbIg|h+bJkgMTA&m4#8eI>oi}qQao7}<6fDWH`T@^ITB9XsG9&hhCl8gd zkrHT89Fp?*2*ao^uv{))Y+8ZYN>$d9m~)yIP(E76z;2rTIhp2&vSut-2P{`B*7Yzr zm9n$a>@d>6h%x(y6{3vEmqyYpE^_^sWx?aekMZcyBb=U|;?Dhh_~@gLu-?0mH{QGl zLc_WoR7CAgFc*sAj8@h0JD?>HBtV0>3+km5kP3LEt^%n)EMTrEHT$z*hosh;F#l>p z3K3J3Z~#_On@GCVWnGa%^aF6M4bwFHh^#FwHUiUy2RV3_vI-MPIfWZGoq_GyIL=3# zrxpdt4qTPp1#04#9mw4=h|L6@I*5WC5H=f~2x+xRF;&%KIVQH-Xk;&xM$Tk(LDfbZ zYgGX*=^?VnT1SW~WCUj_>kEXE8)9g}%YGHR%nK()+l+I~FiiF10n-#j|b{<;= zpuuTu>|JYO_Jbq6x5YW8eY_xH8ozv)+Suv zQe_=8hK%_!mRJFA(C;w1qV40tNXqmA!5I3E3!| zO%()j29~DI?;xU%eYWQ7K~U@i`6LHdDDSiA{gt4@l%gN}*L58VDIQqi^Tsjg`-~g< zj)lwE-HZCOdqb=ZEM~#O^ys$g%u@=CsDdXb%KzB**5;SVyixR?esfjFmwhiyWy z3&wH0M9zdW@i0;toS)LDBr^PgxK@p8D;(kGLbAM*O($lOI!&`XSk18qG(FgLQAwJm zqP#VAoEaL#-N1?jYKrWLL3nq>GSML+GL~`+cL)p0#P;!^br^XgyXqLRi0J{-v=c@o zGk}Wdc#xs#(~OPWL%IS&Z=jMM9&2-6ZO~?s)eb%POP!+xck+-q?yR6J~U&t4=kD;KYhc;5HmKi{Kzkcnxs~ zdqWRd6%>jd_)~NTF$I>oN}XX1)e#p>@fJWsisEk{aSf`RI0Lficx$!L7o-idkhx)+ zbc!KHzn%eGp#u%>^t825YN;`p66$d6f_>%chzof>l_g)Q*30maxz-xyFe5K30#xKB zcBiheskQc|CSp7@^1Al3SI{-Ev>{k`XyUn0CG~J=9f>nGoY0KTD*GvEJ<5tNCKy|m zl~t{%f@JS(*wk0nn4~J}+FG(Z6=RIuZLXis8$LB7mj#T96avb6iG+eyF46J}Ts{8; z7w4Z~x%?RK+;8~W!&`Xp;0$+eP1v0PL<<5c7*9d1fl)#9{ zH6iDSoF^P|LT)>tod9$P;8QTpz&HWL69gozYXPG0#4XHp9i}N7^|b|1i7i3GbUguvi>6gI^o8& z<(gXkZVkpRY)LbYZQ@5ZY9!g^{O1sngs7>JX347?IEWY}FS3^Dn!;74SXyhKN?Btdls+`Nw`9s|~QwP0dpY#BM;a@Z-j9m{_F2e8u8^uT{^!fs0JN zSSCRm0x3g^-mo^q5ZB^UtS-1Z9?j~W-mJa4x^Scw#h~Vv9)kM2zx%uR^FRBEIY#=v zZ*JPJKzDnYj`b=N=CRm#Q~2=f>U>}1pI=veJ^ugW|9<>yjy1ZM{l1&T*_#CEMb-mXDFqGHJ4W+7BWDp4Jk8n|af}-~#@+qUol#P-0$C4@qZ`Az zck)2O4}e^|h1nDTRIPQp@*(clY~e?!suzQdq6)x^YN#x65@mkU1hk z2xuylc247HvG2|mwu5KIH6G$k?i3FTs`B}afd_1pu;UR2rRfGbjzo?Qq&{vT&e1rC z%7&n@@0n6US@VW7X4l%pR})0diRiy325$hEo-sb&M1;fP&_`*FLk8ytNE9O>XTEU}w?8lEj8>}NYu-3EGR)c8figDQnUs}}7}Bk$W4m*+hFVt^f%33nK2oV*nHsrM;PGQ5Y9vzhS{x~Zz za6j1k`ckhk@r3Pa4Z=FGXthC*f-~ma!C>p7|M|RSh7RLG<2!m2uj-g>PQ&#wk-0tE!^&E9dY{F+GS3|E$fpupRJZEV&xE;H?9x;E9jp??CVzY{DZcsRqVO;+P#>7 zmc7YNww9?wT8t}%-13GYKGvb*dW^tZH&*LS3o$6bzpw52r4%1&g*GOqG+jGm^y!xF z_J!B2&~fCdVPaZ)n{Y^BBZ75DyJia1p7uR5CT)7e*3;2#Jg)Ed?+u+YK5xf|RTI6( z`potvisZhjf(-ROaXnX*nBCy~pS}q`}h|FM;cYC4~E)xZC9eDvt&_~qjT z`x&@>E8uJoobDseb`dB0fRkCy5GnKwja8k9vNp^}al*1>nHZ`O4G|YtE1tc`I2;HU z3*nPTm-y@{MeKGbVyw~n zA=iSKG(fbnPh^-Qn;1ws$>iszuyuS}XmT4SJwqU*Fk{K9qNFMUY2AQ=^{|St#~C#r zWXgpYDKKi5|3+L;>WZ>1c>eSe*7Jnhw{N2y4tVkC5q|ME1t-7xUF`O^&Tq0F{N1y5^5|N^96zia`UkxSR4EV((DacPmAWSjFUm!bdu7T zQ{X;@7XqeP%vdswL&ILu$LHOwV|svR#x$+ZlCItB5duX`0T%e>CNOcsUmh;J*3Q}} z`{56Nh}O*?Z0EP3&QUq(6lSf8*UJtmjgJE&uwkgD&b@og*Hwc#x>JaJ+o;WaAoeDNmSV|Grn!9y7PC`8h zD6MuL*YG&nfsr+FyHr-fjRpZVa$(0)Q+13xq$u2BCTGd{VSaG*)GUS4em^5uX(C)) zJjcn&4)4A99^SZj7jueu>y7)kd~t!NkDuW5YhOc*(=hfFee`m4bQo@dqPVzfmctMk zlEL8bO?X^M-8*Agj&+*>pq1>5FB2AwBiQutupBaSuGhvGmt{e&;z*7$VhX8?+A7d{ zIF&hdIJmoL9K$oeX%A^(ACVqM2XVtFh_N2mA|pli&yB^|CrAe!hYITKZf3?wT{u&= zoTY?|cw*uXZw{1QNMnHeIHRyi#laFN0HOJT(%76XimI5La|Rk=nsoip;%T1tXkbiJ zFZNi&)0kvzK2Awpj3jGGZq6%BF<~u>3(fMmZLLVdI2c`P6jAIfS8;Hb9?CNmB&6xs zLH~VjMcs1KfM*H1F45rLk{~7*vqNWrhrpf78KMUoTKaHMM`knL^YCnYpoxu3a_|5p zhG0WXKs2XTYckSi9A*kKB|%jMBvxES>>*zkhH}i3A`R+cgwBAiu{)?oFuNT#kp1okF?{Tw2eL)5BnR75}- zhr-a5=Oo2h?yKG(VGy#I8n!dpM6h+Sg?gHH2=UsXV+<|p;X2KO_o52S2;%O7 zrnUP)h5ju7`wkd!N*TLvjRm4bREMJkHh{9`{jUd^aO9>0B*$v zOpPW$FyUWWimYLNqqFo{XqRg0-BBu&7Cbb0`FKL7@@8VrLZ?h{Z$%p@>ZBCc*ftcm zlp7|yw{PLCH%~F8 zOAsCd?Hu4MaJ$s0u`7UzPTEw&&;Yjex%t{@6Iu-<=L4G1IAEIgVC*qr58mIx+3pm% ztax$t0#|&7CEo(`ZNzw6oXTO3%vq)zLh6%DjWs+<&YEz(HvyzIPu#Nndm|${Z?{p< zMqWZl2{9xDUQx>d6!+Ne@8G@DH}Up2zl*1jKE%)e?l1A-&;J@9J$(w4E1b>^xAsj0 z*ga!P(&mb(4ubjW+-YEy+>0u8=hb1sxbpML}1{gl4DIq zyb>wi3jl(yjl!YV=PWNsR8i{ztscPZbFBFiwOrxutvzn-W}KbO;I<-7gcuSo-#SA8 zBgGX&5zE{65vL2Zs}BIaja}F&E@B2k0@5jVagV|Ybrrk-g&7of08O&~>ZCv|)<}wo zp`+-mHlWs@3p;2`a}qQPNoZouS;_T zf}{6wJj@wi(8l98$>-`w9Rq7>t^PStWOJ;ALF%ryKmrrb=Xu6%w{v%=A0o9#9g9_Q zW#{40T{}mM2-6ht*=Nr|f$`4UZ{wYZ4@6v~2BL(w-+l|{=jV9z=n>w2`)$;koz2w? z=;#hn82r7_#!6S+e)A;Z_gq>Wv^dq>QX&cKits&-Tb4 zv^4bbI*!S#Qu5Smt`-~Lwvp`P4)utCu+j69D=6xBq9hF}jA_c%#pxa*!y9&@2LKh` zh(gv>=<8^?aW5K^<@+AMD1|q!HVp5juezramPdAPXdEnG=t!#}N@0+=dxv@L;?F9Byp# z@K!(`*G3T>={nz81^?EXIwIwGVQa+bu)FCqkvgbp9I+=8<#o+7+{{rS9HIql@U?wV zoO|RhU3s3QsTkF1V~yg?J*%}Nm$+`$@v#9TVP!Y-DWzTsD!PUZ_gubz^c3l_j+&;l z3F|OE?{Vt;wOUo1pS)pD*3IW870oyI_2}muGxE0M-@PW3=9xD9nB1Xdp-{$(uC@9I zt%+P#vyHsWF|6&zcN}rcdgjjNwNcgMb4t$u&_n;kn~9xqulC8Tfe(CqXfwuiY1QkU zadPUoKDQUaM&8HkZBt=Y8$rjP$@U@(KQ+#vvvTb{YtbEsCJ0kVgDZI)!-S(@LS&!z zICgG!+o}KnAOJ~3K~zx-dzt+Idu^Qt{%YQ^SxxZhf_v?Or_`JKa!=q+@^P)Rvw}5n z4Vf?okqYKn>JvjLRmC}sQ(X3)=9ISF?$}XYwy$&{xd#&qUa4)J@?}+HL7#rHI?txb zL=3J7C_oLU^?->gXnl@ld4|WIe1I3{zrdZ_1wZ)iyLj*Gw-Cc~Fh52s7YKBL5Ds7* z5Mu`Of+;mbs=}wF2I2-JII=}4B*F?NGj}A#{WLJoAj}9fBZNDM^C?Ptfs^SDF4v6b zmsfaxb%9*3Q0gtj-F+}8Vbhi%J7W-+vAMgwk#6r#l+Zx5?e!m>W`;eJCYl&>%q$YZ zgf#Eb%7W4|=IIQl`#U(j|1Q4q8$ZN)`3%n<{}P}4;^+9~FMf&_=a2CC$ukiYLlaX9 ztl=V>UTr`r+N4z4Ny)%f2G$CI5>9VF#5)h)!S^423va&tF7CYXHs<{;O!J8duZU=2 zLQIoSBh<>^7@Pxc-*23vNXq)wp^kobWXT6Mv&yl66^GE^;*5YQ4rB)MA_&41_sEq{>p4IN zlo~-{kF^1f_GoR!niFC?#Y8ivvDmfESo_u7&YK`5Lv_>wDRbU!_65j5YgJOyGYJ?7_>7kT1JFH(hU1M96D{XunJ$^2_`)UdF5V#}4PZ=^?wR z_`7LL`Sb7w{=kE;iEZ!y&JS_>_H8uYj)u?k><5zoU9>DA8o;`)>HxEmI7zc_bwxmQ zr=>WHBxtHTPpc>MAql zw37p=9dxX-t;M*dAqPa^$=HY?ZAXE9kqvM+RE%9rrbx&&cgE8cQ5!j<%N+?}8`{K$ z{eH=)rHVo7ATWkZ=kbgqdj*l=*1ejto;`bp{eF+HfBoxz4RdJ-q2T1~6c4}l4nF$mmsplX#(os3 zCf_YNFVe=??Z6pRLU9?6BQA*VMW2P9V9LoKpGu(z=Ao?1`g@y9=8S!*XB;h&RX4udwsMjZ;?M8FS?c8`KtljsrOsaxM?t!VxR_&{&6!eYoYXXgsfHdps*M`kD-gu_ zQ*y(kC=jU^13)5Jk*-(r@2fVi&G|*JxGE8#EliKx2~XyFR7aP&c}>t0!BM7onzKyp zI&aYc6eksCHKcT?-7I8|sB_o@kuawn@e?*i2%_MDWA==hz;4f(HTt}fjeZYokD;R= zwZherCg7m~l6q6UH-X^wm>V-7I1M(VzA*`FuV;LGpGZU9bZz2(W+0Hdz|ASHW{H^8 zQ3{`!tK2}vn9J(mCk#Pt1sDRo*+Q-wX~qL<(mW%^NyQ|&uEAO3;+}8%PIBubo<$Ko z;-DqZvS>U^`Eb-GPp=uOVoVHWA&f{uq=3RA5?W1}Qb0;GTB+WoUe^Ug0n?Ox3aR8p z*~^TY*`3aE-()IeSr&xU^AG00KwXj717;NDe2(W&evZ#R{wtK_6a3b9-oy{S{}88V zD_Z>z0KY(tSBNo#_yEu%qvb6lMnMiJGy=q96O}#W7>&V!WZ!HJ4H=OLAqCX307ytN zfp7qY9f;2XI>nvc8_EH_i>DWtc(I(Jv`cWfi?F+mL_6W=HX!P>SJ4ckK+`V-hDP>T5 zgn$grPuj-<`%>MgN;jf!sgx6L3Z@TF(OP%wd-57uPhd)L!aWr&C zKvB+7h(SUL1|}Oj2TcplkOoFlQ>Ibe@SMi3&**lNLuQf14RJft&C-Eq4KK3aThzrd zI_iv{XY5*W!RWX;g-wXqnB1CDa;ELpoyQ(FWr9nLbj`(QOgh#O4rk0oXrU*?tcwe^ zD!{vKewO_Abr@0aAz=2slQO>I;101x+PI!}t&Iz_9e1LQ^P-kIEO5hk@$ig{iRO)U z^Wy4G3FD}mTf&NaFPaB;^f6B>pgRF-753cWaKP#5t<6}!U7s||&tI0s8wJxe0Thwf z)$gmhAY?3@uchfmeI_q1E>J7u;d>9U+wD4Ya&ToleE1O0pI_kV`7^xp;BCYy;cz%y zd!I(9^2lLb*MgL`@1wEN?EW1NQ9HQD-D%d%Jr7NXtxFR+-dIY;vMl}_j_wh=eoJ0F zWGKei!|w*xj6WY5bTqn6Mz@R3Sy&Z1FDa=#V8}h=}6Q$UaLl)v3=g-HLXt!)Q!`Nj@*+jB)M~sd}5+EhJuVz zl6&fgXJvBHGz{TWW1%(PuQ907KJPrwE_@qf&=DhHxR;Vyh?s)oFh(bzu_DK?9q=}s zC7Nr@!xp;3VEp|S0wYZKwsFJA7=Co2W&HDj|aX^!1-slp-#G0TLfk-L0ce;5OL47+Q-Hf&RgV@z^yNL;2R zS9hwY5l}y8)jBB-W6bQ$VXGH9tB@Tz!9zfyH#EJL(y)!D`*?&qF>S3I1FY;__8J1) z5Y^)vc3L{ zHsE?jlndJdncK#sFfyf0z_gU_(M{IZU)t=sM8eRvkk+DgoWB>L<3*`YrGMUZGCTCHVs+}g)s!c_?_#(W0pW3 zX@mvzOo*t>b9sLG+IQNdS?fB|20_o(=NO|1leHphQ?WEjkoVdhTNZ0$y7s+|(K=43 z@$ty2HCo&yOPl*Y;yiqMY*+_2`xqD0QaA3*@h`g$cE82(*8jb|QzD4Nn|30wNK>Zd z;?74or-(4WTnS@y4g@X>c)38r6<)mf1kXSFDSr9kf56>a3;z3m`9pmDYcq2B7;v@!CraYYL&!oK0|?T5JkZpOoWg<2NWmT|be z685h?zeS(#6!)MQadLVKA?<}h8+V9lhZZI@j;IWzBm!(@LQ-+K7RD5U29(L38sdb; z#rI2jUxRW&BO1)X&5m5!PRY`S0c$t{L)K7Wpk~y(V&aODFVU`E0LwXIyTbbXDZrPg z`5di1!`<7!uYKz+y!&v6{d|E)3j$pshJq9-2nCI^hL|)^5D_ti0BCa;lk5$(5C{p3 zgefF&n2{?$bc(f}V=a3ypJ8o#G~B^yx`V@dK;}JKUJ6=*-NcyqaWMg<>b88n?{uszl$rNY3VHbc*- z?{wpi;5ep98iEPQ*Wy|$e*M>f9dEz=7C!#))6d0Kz7Fg3CNtl$HuW+D!114PtnVF9 z554Ty9}BiG6Mnx4Lf}_Le!h;|^;JyUm+73JH|hUU2JAnkbM&haKELSA`TMHuUlfk~ zc^rx3alY~87z>0uw{PJ;`{57KN*6|_-R$7}QYs?Dg;9S=^dK&2;WE-{d>LT!j*B?M zsyfPor$(YF3yCC@!~(B8JzfjEI7Ll$B%~CO^Rg*a5sd31|BH#lITR)xc?2k_~l5rL*97c^dhvvgKMlqCWUGT*qaauJyge(q^qco zUpeqHO3A}B7+m}qaRhc4&$%dO036Y`;`n6W9hXr?U-@zOA-`Z>>5d$`1N_h9(ckx$$`8Rle@dCGQ z-NIfSzCk;Yq>LRV35MzK9&ef%%tx;Ez=Mc=5caQjuti|0K6+&ZCf6qKYa(!~Xhods zhr&AuzfI70vzw+C2W9q#B*K6=XLxX; zNh4(w{$~zOmP2shHjG0@l$JfbF9x`2xoo$`L)bGH4fK8f6J34B8ozf7pE<}<3{%C*7OOr1`kVlu5$<=7A9ayQQd^{&Y7TZjz@DfT8b)BaCf${0BZYw@)>CoqIS$m{ zLmOkY=Y4!m;^3r~dlF?_@yIn`2kt)dndG@u^u~sD?JVcEag+*5#hkme<#g%()tTUe z2EHx3|M}*mkyYU8^t@$x{y1EcVl25J~Lpa8WUenCpB2(O$0$j>JL2T z)|zFF!-|wHQR@rr_!*|@1>)I#L_WhO&t718@f@^&2h&VIn@~uMC$$xXIO+3io0T|% z?b^y@2>HIsO(*6o)*@(=zUlOtVp&3*P+CKpCNNi|utUuYS_r63#c-YlGr(E)aXJI- z3b1BOamB0-N9da>>yxgrAqvkl%-}d9LqZrE6PO|rCFRFklPrNlbCgL8W-MS#aYAX@ z#6=qRE^U^mX`|NWA(GHZ53kXh22QV1XU8OY7NxGj4PIB&a)qlGPmmAKkeA2E%OjNa z5v~p&;hhJ2{OCvD!Pmcj8<8#%|o{$f;g&)E64(6xuO+uh(nu@;_~fo z-!(HL?Ia8uGiK~j!wFhD#Z{TXxPztM0^=0B=}oM4L9TnOyhCUc0#1N9qcDR)#}je2 znr}Nb(CkdYYW&bCCBu+xYb(hJX9jR5-(A-3KmJbqPH;$MX?`(+~% zJ`Y6vs!qkL+`Y#t`&NtvzWcr3#DfP9&|1ZuCLC6AkWSNtR;q4Dyy5pKp!KO$w+AUUE1Xm~b&*wh@)k*_+luI(C_koFI4f zQrkF1Y)ox*plvvp!{SXrgP8)m$l@aJq>kNO93?RFouWF2`{G+S%rbWtaqrT{FgeSI zh$NNV*rr1;lDXB!4xOcKOQDSJq*8Vk52Me*#p=n+qqAX5AI^D2t^GhZx}4qVryWM) z>WyQ|<8xk0!EU#6CRYyu+Pd?O)6s40zCj#|hIr_V%^9^eOp^p}lm=W}T%fgv_uhLC zr>Ccz6l_l>2LrX??%lh1cqVM+0Zl7+#is zdsr72KuzpemPLdwcVMdPri!~}UDplQZX>uiMx3I5-tLN<{N9WXAG_Y8bBa{7sNAmc z2v1!#df^TM#V{t4w>;jn_%4E!_-BJ!D%`=p~eyVmtkorkh`rm z4j*Nb+2=NqhFaK;YU@5w>MB7wfD5HD#-2uRP7?h!=2-3Tfr#Ir=8nLT_1xWt@X3Tt z!NuFXc>He?x|TM{)$Qnj-q!}&xUIdZGF(Gz1ezUt%}nd5nZy*CQV1|E)taP7&0gt-|Wh_2>$7KBP5d%!ys< zhN*0B23PzzaO+0ZWI-et}^IY3%y4ui<933|;y9Sja=rzd0^IJFPkkQ@aob)*Yx?cIntM6g)T4QmXe(3vJ z*fL><5S)#`e#GjHv~>{E@a!8}MZ$n>y@Ds5hY(PU1#hmK$qB1_DUl<}h)CB5nL3%K z3B>HvW(~5ASp8;o*T`70=`A98p92KLRa-;V=`k>)l9*dknsGQB5NTG&-Xh`}XOwjT zFIT8nPw?#1zr!a#`w2e#=>Nj+|L#Nl$)EfHyWJDC@&xnz0%^KJiWwmmK}K*Dkx9{G z_RfG9u_`n-4A(wz&#CASV1L&wBsE3fA8eXwHwAF0X!QWFh?XMQWl&lWZ{5eq?oE9B z=n0;@SP@Sv(sWlRHwcYwO__lzp-3sjYbGPxk0nSm4WW9mpO3hQpT!taazmQrJ)sb> zR0-h=X-2d)EEMEg!Ii*zu4Pov3~<@nnKl;&c;B=qC{4tm>5V3%p1aX0ihP5%!DiSqRSdc0_ z|0G!Oq>JEc-~q6olZ^ROLPJEP9p-p~+$O|$hQ=>2l{1uh2TQvGw_6Bw7jwLiL)poF z<|bH!+K{U{USmhLSXkNUkd}9^Ts!BCdz4N2dN#@6a_nwf)_P6PTk2Hxvza|pN9PD* zOdAGFOhtqcXK##8!_Tt&oTfdluCDydOhovjKl&s5Z~yC`elAD#CMV|SX-&ss?5jrX zKhOR7I$GbW9IdYt)b&;9g|Bkmeo?*gCIrE8Zix%9{}7CY*S(=%hMV-u6qUb>YjJ#I zHlZND;`h6mTfz8)Km0==08^ZN6wiyF7&hpDaZxgEn8Bt40-AE=%oW-N&E(@$qoXmz zC~)vvow;c4FdIqg3r7TVK}^xX^g%oKCJ==*jsSHh2RBBFGo~2Ps&+3!+7zWjK%7QyW+%cl}?;G!Z4d>_QxVl{M z)|9LEj2R2f&q!XRx;IImSj?v!=_ zXoG*~hkA7!v5f1kWtEh8?gu{k91>hIc7|o_P6U1b42eKhMT-=>0Hy`7Iinj%DlaL! ziU(KOSg;T`=%hMomXL{@s|FcJ=!JQ+yU=UmMK6XBNZl4myZFuBSwWpzwjT6U=jaWF zs!T_;ql2M_4EB%=+K3)-hZOnP^)yYwHf^lk{6P%~ebWt_14G?TE3kx_Fl2nJdPosF zhmOpB2msAo)+#EMbt}~BH3%a!Jiu9!_VYN1Gp94cCB?mmo&E!DG+11y98g)KwtG zGgH$&Q1B^YTuA;N;;5Kyif8C9U1f8I?*8S<&U;nJuRg!UMG|MBd)H4`ibb!V3z6Dj z40;$fwwMcBMYB(ur-FdSly*7 zNaqjouujz8(B9Ox9P}Lx%3E&E05><|rs1z^qBq3UN!s*2(lFU$V&zRHgxZEOX|X8) z03ZNKL_t(_Slz{uND)8k-c%uqSym%+LUU`#xeY?MtezIY>VYYUjyjs=h-OXQz?f<0 zjM`eOG#&`P)-y{jK6TaLs21}4;2I(Jepl{s0h{vskwA#K9)h2#!ufLx5P-i<_2Cp_gIM+vJ%^gW52 ziSF|teoCXK4T6`1O-+bw<=~9MO%V>_JPtunc(zxWF-U4+4cao{G8m%7K6AAAMC*mB z(TTK)E4cuXqMB~x-K{xG^JqPwl?Ch7ISx-h!TS6W>fs3v7aw80`UNg8KEQkL?eJgy zm%oc|eDe&zhag;l`2cDQC=>u0bE>F14cjb0wNxZM^H>kUOj$Bnp!{gEsXt|O#{h7W z`xvg!__<6lM&ZCt@f5k-LaKL=_%4?E0;OGn={73eMQ#P9O-SiXvQ;NSdD{|0Zr{QxmU?DuYx1hyS^c7fIwZ&Qbk9cQ-LnGofCvDU!NQlPiV?2?As zHmT|xo~OIGsvodG4Iu>=90lmUeers6sRw-U;J)n#*(s%AJhu%zD{&8SH78f{4yLg( z#YxD1T^*so+t9LC0M zUR+(`!w)~iC!c(R7cXA;g4KDpa^3FSzKeVJ?tv({d-n9?#8ZPqkZ~+wk4D8^w85<< z!hf2Cxt5|lA5We>#`*aAE~X~L5yPq5qV#2Ke- z*1d9v#o1>9ImjQIAq zzlC?-eHUkEXE;4Q#eTon&MGizGr>5{n}!2P_uJPM3J#|?L2E1`vSKDeijH>JZWx_0 z)&F}RFG?wH(u>DVeHc3X;~3Ae!#2b&G@y^pI4$po(_X*y2rLA|kFF zB9ED#BOlkDe%u4@wk$wwlePzZfH)cAhTDvReQ6G+E*i#7V)Q78jBYk_td7am#%b(A zrgBY#2nX&4)Br@pq~p7WLDA9bNrf~UVN?5jarU0Ar|kc1hfoXmBW-Mr6AAsh^hEQ` z^F*Wg!`(4zqv^x_9NmMi01a#K=Kc)4OB38JecKB15KJ)E!@8m%WZW?*R%4s`-ACFC znIOC{=@l_TOnz@oz$6`kmAyyVq8dO(0|LZGVMW9b8}=qe3vTOT;`qI#8CN~IyEE2@ zeOy0Tim5Zx%)L8IHH_0E{eZzYvqT5{i1T6fux?CZ8bfl9?n^jACOOwn8;{1yHK(`l zofNN4O2|HcJ$bi(7ZsQr`g7W}@z^Zcn?3k$8%DT&CtK@i5)oI63&+Q-vrS=+x)D-g z4t3)!f;NtP`~Dujr0dgoA7s7iykTo-Fpu1};DJR=xu2S9v$YU96rXZA2X315>(1;0l8?d0Ri5 zqi)<67#s5RUu!1_B1U><5MyAN5L zK%~!kigCk^w|Y0&emG1}usxSr&qzR@3Ri;@UYdk?K>G}gWOYi8d~XxH#=kagULoVNKcwq6$JrKn18^N&zP)JLFt&adE&r?J)07h26@6t*W^y zq70iXf@5C(@%j1K1-PxLqT(#<9n_Fu$V6sknVgd_LkUwRil8_N+civxX@@ZF07M`r zgft_h8BhcXC?LccrN~;^l>chyr}2M=)R8d1xY_q9@X?wUT;McRk&U|ByWGzcDs<)r zK*e&nz`8s~xjM(;{4*TRKgGqfU*PiD&+y{OU!kra;lKD7-^Bm;uinR-Z)PxmiWHuK z+cTiOK%fHx762=V3J4VhHB&&E1wlHs>O){?T%wqnYSD=#<7+p>!0KIL#Mlr}5JN!- z1tDa_xFXPsDHNobkzxT+Mx+Lyh(Ul9%@RedM<6UYd+@cfs0DcyHfJ+}IKlh*#IS;C z^E@@n8aVp>wl){d*zoKXgaJ)w6GpOrThmUkgw^X`Suew8!oi-Aq6VWj1f<&e`}XbI z_=~^zclh|@k9)&`zqn@gGKcC-8q_v$8Ly>J9lw{G`tc>7^Hxu+(6CiHf?ijQ!O|pqr0+ z0U{WU;;{T4?wpe#X};X5j+C~Z2CSk}BORaCf{c{C=#0gXG+}+qTWva;Rci()BGTjz z6KyQYLTg}bXjsZ1VA=tG9F@W#K-$5~_5hX~4 z4+LeDH5aDM(2Z@&2^PIi0e68BDN)bAKDCmVO{ zNt_~X7!IHy=VfpLnlr2UVa|ST&KYIR?!N4W<5ncJ4W228NYmxL#*BdJGz(K14&-Af(y;GI;(8RhxidBil{3Jd1xDmJ)8lHEENfs?Zz}Tm&@1o<(u#wF3zc*4#WP+CeO+Teb8Q z=@`VZqD;7;;%Fdg*6|R~b5jv+A!A_S(KhaDX&2xCa2IriYse~g%6nC1q1DlAb-+O! zcOaV>XpXoTU2`q~#;8sk3;BsCW!)SAg1M)U(tvF*YD4&^@t#@VO=H0~bqIF1_~6DM zeZRTa!yaB}F?jQL#0a1boNz@t@z}7}UA{I41!*8z(r3Lp z!H5X?|6%XVo;AzPGQVdHdw=KTSgLt06>3RHAZTMyc!;)5x5Lq4aJ0eQG!Wd|e@6dF zL=ZtZf}6%SD15;XxDf(W5>iR3tjfyFlV|+)UTeL+c!%|_eZCw@fS|*!h>Wbt%JU6- zuf2x%eV*SVmd3DEoKWmaOs5=CB@vI`)*1Ek9W?|HGCz`a$=D$fL*)4t%?iQMmU}6J z57zT4^S0~{iB(G>vIozHi5uvl`q=(GlQU%IHXbc!vR1- zMMG#k1XV*;D>Xw1kYFO#$_lG!413r*$_++U)xqYZ7F0#42mjzW#Umrnik8w`)qR`I zlahAd&>YjdH&~g)pTunx%zaVT*16sC+D#g=F-C-p{_~lg4y=$1-W_b`n~LW@Z#}Y@aD@eq1MNE{P=Hi6cXn7 zC2<@@#LNMgNYTOx$3hS+3qZ=;d~GD*Xh9LuK=Zhul&qc z@yCDqr{c1r!P>rch#XRwK8;7Ztyw)y_4+)h&+X?s97g;>lgQ5CQMTz?N$$~gEAfJu^2+#GIpL7Ec{oJ-7?$sH-IEw)M z?9cuTe&tvGXHI3EW=`)0vrE)|Xdyxx5@j9DG@uE{snod8svS8R(}k%Y9DQ=>HbJzr zRD*?qs6C1&nmTOux`mMocb-jUg<-LY4q-snX$;o=R)v=aE%57SLkk#pO2Y&+Fl(dg z)7M|u)i!P^YC(AHVEV~d52?LF+u1U`a3-pNCg&_i*nIKiL2%wwQ_T(t~z^MFGMfPA~rAJ^z01x@88EqAN>gD=jV1k^}A1bhnzF+ z-em=>u?IuL&6_t^eQU~{Q7x!pGur|f2UJx&dh`g?8s2^PUF<~Zt@oYU`0Q*I=hHM} zx7*?V{ri}v3Dd;v;YDEfA!Y`q=QJ!NG4cjnaRFw12jS}KO2$ZW3P7@ss4jr(x?;b- z!lOqgI6u2Uj1h0X`3By7_Z{55dl$EF-^R_GH@TpYxBxTHlPRb4aHy(Dzxe8NZ4HFh zl}1|*^P$B|@3ARGWb>_7_w8cu`ILO!Xe?6d`^a;sK|jVBOKDU#*oG$#^J21jObQ`6 zU7IhXJU^_cAyY5=U)%><~aM$chV7y&$*YtGpYgemi9%u^by{d%a^_dT@E z`-5GR)aaqfSGhQ;-%PEt%uFr99k`wP_JVK`%V%oEJ7M zttz(2(yzgg6y04vLx`4QIg*A{_9Fi9OdBgP4)bE%C}cFG#=CzA)m#Y5QtZsyjY3!t zw2BQ-%XZ^)JX;$3oWp-VUYmbA=XbV(mKOf)py0>1e&@lFdTfvGH~IdgA$%`}QLW5mhlo5S_xxfI2dKhK z9dp`{X2n@oerg!4&JU_I=6S0PE}0Znkv;x@-G``hx|D*L*m7P~>21th#z8k%xCpV+ukw*KZh3o+Pz z)Adl#P1bM;!emy(HRSt+gp~*(WrR4JG8TaYx8`XlYfR#GMVyCxHcRFltaaRzutVTk zSuWLzh&DI4X9%=$5QKo70!k}f$d>@Oy1&H5=|k+#9^lcv@8jXU@8I#n@8aZ>@8I2c zfZzG;e}VTtze5Q35#u8eogrY4Knr4&G)XBuc40sep#ZZ6xN+V3nkCGoDyW2EEe~YP z;vj0-5QCCxWTI_oZ9$%hKLb|8Sb(-iP7U*<_`g+}eF>#DfOrg&jA5;5=-kh)u{!Qc zHS1;AqkHjDaxU6vbGNShdfwG_z-K3TSAu85duP(BnK-f^Xw)3yNL<0vn9F31^JWUZgHaWw=deou!c~%YaN$>gN)cKxQ`TF-&Z`^*)E#hG7 z0(nwc8gL+l>z^uu;3xT+o|TIBv@XE&@Fotu#vv&2_O-SJD4i5^68Pyaf0;WYo+GDR zO3$^6K%yiP`YQ`o-u~JpPrz%8R za^QL`(A#|pLbz>R z<;9BQEZ=1eHz{qkzpH7_RXDgrgk~Wy8#@ZRx|jlZBNciuSdv1hw_j_c$p;dZwcGN0 zXk2p^I~cCSUmFCTkNO-H4Y?7acoeldXYSlLVkWa}l>C9+l+|_sDRMyT)}yF4;nY=V zF;%CM;`ub^9$FZrnXjKk3!+JQtEE&aCT39@%6d`B60WHQQ+Ppm(5;?^b*a6vMwK_<=&DXmRWFD!i&{~Nkd#1yt(a8RX&_+sQSW+lE#FCj8_OJb+mU^*C^$~0CUHc0cKY%_C|+>W)|zA_tRzpP5pZ zK38Ex90iPFgCT5!moSDER>y?}g+blz8y`B>$6_M042LFyQ&XAhlLvq>HMOx-Z4F{4 zct2J?Bzw$CF1)7^t0~=eZ_;$rfE~+4a0hNKYI5-BvMhbRmFGSho3C0@d9{#I;U9t| zYXE~XRPR%3jTKQTvy)4do?dVeL%`~a{o2IiXS{Q36W{tjJUj4W!>qQ{J%a6(-C1Q)VMW9>H7STWv&LS8FonJHAF&tnU7;i@U`(j2m|~Q@ z5X@1b>npFz9hX!p0kI)8c3apCD#}S#CkFd|g~|{n3Jc^_D{>mnMD}+3Dl7v%Gh7s?gp`T^h z3*Ia^OMVkJeQ%KX^B0FGXJfSLS`}kP3W7gT7CMqSG`f(8i?1vUQs)#Qikk>5s3?Wl@lqS8uAp^~%hN}A{OLzH zyZ<9Re(*i)&whma_r8b!;%72`<2V0Xy!g_JkRG7nF)CdEVL=ScqV-uXP=zyKXKGd4 zuC?%4+zFxBG1IKMtc^N$*9Bv7cMdj*8&EJwIdRcGRHWD>gQ1|*6^X8JBQKba3-SV7 z6=5~Uh>&ihri7*PJX_>h)J%wwf;GbRjHL{CALgc^$Rxsu)rTOfm?=gyDa@+N6mpKO zdakktk~|M!RdAEDpLbmpQEBr$ADE-R?EBshsnk4_%|J z!`;M^VI#2ER;&NN%zu4aYTT1lsZT1zKC27xtcT}GgZ>bgL_4it{pwfQ`Y*v-M1&hR zZrFimw9m6mvTrWqZ~)kL6-GRSq%a z7AsY>u?4vd3W{#+3f9qY4XAasLxZMz#~6|0Y+Z1`rz`i68=r!`O|7#7BLX4?J2+w6 zB?=grQ*AhikE+NhNmeQ3p(u*Yp=?Ya9uGUUT~~|f=jTpfFKX*}(0f`P56}((jzO1F z4+y|imJ``<>Gu4R7M=eYf5?G8gH!+T99py^`+O=E3dZ-9&P5N5M|#I zP@U>MZ0y2=@;r97W;2VwSYvIhbf%kP8FHTFVDD@kG!LnYx7%cJyZ~Kee9aZ`{oT_thRA(F10%VyaL!?=b-~?N=P|;Q%6s^`c~^O?-<|FE2gw4 zUnDX2fYrSh&t<;XG}Ut ziq@Ry>sGb%uV)sHn{qg1sWx@OP#`rYO`wBn0k6(YDKRV2*}glLAX=)qUpH(GZDb0< zl;XAZGdK$z7bZ7+M@dQdV{Bjv6F2WvDQF>5A()MMbj?TzBB6&SMz;QI=pxTwG_LQC z4Q)+bY5ws2;sY5Mv`H+D#RY<{LxaswQ{sxzXIA%5s=g+-$5Uj@wW38HLy7qLmir(D z$11i>9hW{-kJm~Xp7XvZV=K0?uS1gt_vn1k6naxLiyGhC-KRO(f9v>EM!h-@*2?ou z44L;#X$&J%HGa;0tPjtVLkRi8ItAFc_l_seN$2%yo4zf30pc(xa)nqf_-Q7CeCM_p z_t|sRI}$9IV~QEG7{a|&&F()}pr_b3BQWKOt@tUS$i1o__#1}+03ZNKL_t)oj;^lS z+}cwRQgF|BFK7|!;EwAD)gbpjjTTM!T>ACY?m%fJ~sZfMP-;Zs?NiV?zu;EkGg!+Oz0q3W#`!yLra@ zZ{Nay`r!LOx`A{f1G@eh|J&$sMLGQW;C^mxqxC?-Ij zshnp_dDquBX}*)Osw*P(LK~x?8tO`DEuaaKFUBy8S1mM_bwvoUwEJz5NEym}9uk*a z7@y4mM!H1sIIV>dQFXtdQ2~`bF3(SJ{_s;=JbH-xAAcVwpL~GxM<3zme{RNa{?@<1 z-Mi-q=^-dSMhce*p@2%|;5O%A=uNDEkP_0gQ@JXi%ViFrRuK}5cT@pSE?m|NOSWOB zro@gKW-04OW2`_9tIV|(u{Ka_h=JF^DKf_4vIUfV0rDLL9C71-HVBpt#w84axsILR z2=hFfAjYio?(C$D@@?&aS+Z$xSXL?E21WaY5f$J+3-9L|n(XJoTkRg~#VXkH%qd_2eS#^Em3CCrs;kYj)eu{;b04(+a$Y{`+ZR zWQTt48kgR^PX4Ee8+cZ={>NptKI`?Lbd#Rv8a*#-;%OE9&&sRtzu&xhjCbFCcL+a7 zDOu`gx2~z!GF-EgauOd6g|yCiq-z{c-h`}@KpjnysU1WT&RVS%DR%2bkYZygg(q3! zL_^+)%BD5J>}|}YE5;UUjgTTMo78r&TJc4?{z&$^ngTvez2MlC)o5WFz-~7i_mq`v zl29*9SUnKe%1k&_A`ZnbxwdQ>C1YFlV1{1Mo#z>qM9quN-wHmPB9bJQrm-jx_%Kk5 zglY*Zi!97a!_USAVy&CPwie$+`BbW^zqpfYn|xKX#=bzOl(AgxEqEs9i95`YblZ(h zkiZHJLgkG{>&eJfR9z5Gs#*0DGjURl$kEx(kn!l`6eo{P@r5sZ0aM-q6bDPIFCeEl zS>PL_(8LyA?v&;{Zl|fOqD?foz(Sq|`P` zPWDAMj+NM zQrKJ(L?N#0WRz>zYLh~fx6lVG+(Oveid<29wnw4#^;fvV`YeVFpqje^7@3GMkfAsm z6|o=-NEVWyEo*M63tII-r@_>-RtSiZgZWxP5;h)NePv#Y5*Sw{=qHR8SsgQ@r8C(2 z)Rpsv_gCTyC}pvIA+>@=K^#lU6s#76I`B}H&({h9xah4arW|ueWrTpG6nVa)G-aY$ z-}UQ5j_68TT|Zdu*@oh=B62{zm`Ro2FFS@I31?Lc-B9kM zYt&d;H{|+CJh(B9ddCiQO14{Y*)_&RLq2tB@P|M0#ffht~+Bx%Hwb@!61PoLvKowBCR)H{bkoeEh@v_}W*1fBmn24l#ZN;1L?mF@+{-T8~|bKoqvCsN}0Ew>9Kfc;(SG zQP?M*WKB$;)PuM(fTlkmoigzta+9o%~P2r=%E!VSp-narlm4TB`C<6cbGqPHdol3^&g!WtrT zduwT;ijLN#)R4?P&1e*m;v@}w!m{jTZIA|mJVyyYSyvzurZ^#mh&0dqcXCEuDl1^o z8yr4BQO|!#G9-e`*R~eOnTda1atK5zt4_Aov=Q8dq0QqxQN@0_#Byf2u zfA2#)xc3o$`b)rX{M-K;x9*%G#0MZc1?Un$Vb>ycOpYA+I$Jhor1=<#lY|z?S(FHE zT@W*2Emz{0X+TT}a_;5q2B4wH(IeOy@Q_f2n(~)*;Vg_%K?4#n>A5rk$Mej4g9Rw9 zp_GU`WgsT3kvZvxC82<_6y#|VCkf9}E3IRm0}|HK_v_Jx&*@sq*adaoX2FVav$4qj zHsHWI5Th{7h37BNXN*Zia1rwy3~LxdHs_p%b*cyg)bP_^{xZJtjsKh1xcdC4foEX? zo>Yf=(tjUPz&`6|o+WO4p4!@H<+UCve0~;n?xFYd*U%Syw;~MNUj^9SV#q4^&rzNF z_l+ocmhAaitiR`xH9xKR`n<*Cr^%^bd+jy6^2#gM6hI+{4f~J-FjSSlI>m|axQzT$ zSgNabgf)@=N!$)S&@T?s@7a#Ebq*y5K3#u6bIw@SI)K=f_DYos(sH3gc%2ryZ zcvDN+R!!rt8Cz7wh16T#^nk9G1<$(E;#0TA(7;X9`)yr$u`?U6y}>Esd|_%-ULZ7Q zYjld0)>A}HUF+C1^E`K3yi47+@1GMwm^iFVHahFNc1t;R1xqQbU8CK^1~aj2B*bVNiGFoY88xW)2Ew z`TwOhV~^=X`Rc2$;?d(1oSdBC)t6u4j`Z494*b3vPDevgG`hp5seo%|=j!z!>Z-38 z#{^{kT|2EgXOv~N&N(x0$LGF?qA82*TgPKxAbVk78yNLK0(wU^s71K5RQ0*#jS3BF zF}*g%^u?Ba6$VwC7Nku4)facJ-N;Z6k!4OpWA~EIPwAl3p)2f!0oF#9d99UgVqpy7 z8t39Db9A}}hVKl{G%A=w1g+&-2!@8*Xn|;5SLA8eaWk@M*ZUeae5gqhvO7;S4$o|7 z@71B;XRoJo=GJ-~UC7ghEy?5JdMBT+U00lF(bKyUK+;5tu)~38Xt42Z`9X8&| z<()8Tqw?p1Tw%pbNEkHO0IY6Wyw%F!_YTOohrCNTwGppCV^E6lx`R8hi* z0xSF)>Kk{)y7MY-3*Mw_99YAmNC>Jni@j2D8>(uIaCyF)DHS&e0V$^I$I$sqi_iWV z)wa3@c;BCFul=_9rSrRuA!yoswE1xRv)kXj63siJxIk58Tn1|lg(&k*8{I*NKA+$J zm?AQ9aH>}m`S~LnE=vkl2*a56I2#J18r**tZ3yc%);$J4FJZ_DuqM3^Za9oXk{ zp&+7^m2L4unA{j%Wrz~gQBm*Sdq8H9;83a*{$*ZQF@b;0cp&-PBT>9ETZ^DNZ;yeY zZE*5<#VYSn*I_>K&7C4FeLWv|oW(Y9MJ=7JHl)aVq%8ZzBJ-vNsbO@anXqIN6f?;_ zR-c!Cj&ggRoJ_%O>*F->T%Ef;nZsj?A%u8eQ4ty;r+~UIKr5j23P1er2l(s1{7<-f z1Nis21S@;1Dm|;9o3M3<%>sh1l**g2LGE z7YW5(Y#)^3G>$i)K_P3;Znr~787UCr#8{`Tvmqu|ba&%vyEp952MkU0v>@)BGp;Vr zITWic*k4{?xjeaN#1rSjx;jHl4CLg_sh6Dw2d`j%&J(HYtV)_>%G|NygF}%N;NB?&h^-eJ z#a?7UrC+t2#Q<)S<}P9_g$rGh=*Y^}YKNVGz-}LEY=eo>`lNx9vx@NbsI@aLoCXbt1&mFmEN zrrHl%O;wRnP~nXQL=D-@0rDiosva^ck)TCvVLt~-c6c{MY>@72WLSf6GpDlIy7 zX12H!T<8!txRNz&c^=MgUYADMfQfP_hlJk1YQ*b=E2JrGtW`w?P)7?z64fsk!&u-O zYz@)%jrV@pK7Vc16jKnDVI^)vp><^%vp%amcg!g43|K`lDDtRiAuMF1C`x|82*r-; zWe0`G$-5Xp4t0$juT&cHYN1y(5TS*5Fou2cOBtMSg(ziZ6NRqOkE~7$Q7uKyaA+wc zDasVgyF6OTBlA?Xu(m7$=*4WOy9O^^|$OE_NnNIg4$*AvSipA!JZ}h?~c^@cuhD@QpwD z8_YL9hg-YbXmQ8xL}F!Nld*?JGKVBXM#T_O6!{8>9s(&LCPa&jEWPR$_;Sxgt`{SjcCZJtV06%?E;n{ zO!T_iKBl3%^Y$3}sdz(Om-qVxufP5}UU}se+`oSxY0f6bcpBRBNp-3%ZtGA@>yX;> zNvhi?i3ELP^J!|>&+2afEO>*@BH(-;m-_R5f0a^)@eL6$5TAas#n+!C_TYIc;D>(Z z5R+mX*zu%9w5Nr19r|orCF7ywwDF;GcNV}u|K~r)oShT~41skYDv;A`udm7?uU1fw zncpy`+}ViUw%%W7WNmIaB7V`*4z)tc_25~`(hq(Z8Bo+lW{Ovndew>lT@NB!=<-Ry zUIC&Bty>kWSLSV1qFpI9JWEypB|6Ll)~>Br_xUc$mN(n&sE5;`Tdii3@JfY4ld0$B z>V4FOWy`+vMH4HK8Q+eKWv2ImyZlYq!2OytUvfe~!aN-r7+uGlst$GIJ5Q4Z?RaaR zA9wrxC5Q;8r>A&y@&K>A`Vv0(xz9<%Ar6zhFYs*dziuwIfKQGabo1s-yzs&c`1I3H zEfmMAaCF>~OCZ()Zfl~(L}$ZpEw9P}+cJ!GbEVg4p7~i-)$h|3c1^miI;QnK{59|? z#C|Lc$bzA;6NY={pBY~aQ>AsEN7A5F8w;(u&vzl4)%2ixNrHuJt_x!dt}n9cwe*K8 z3(RpFDE<377e&Xj)qhG|hG*Uv4F+YNF>XiOiEb+WYu8!_7edZ)P^{@B!mq~xTXv7? zIDh%#=9WLHs!ZSI*FWctTpOPC+EzXkx3VO+Ia@89y}{zYTXEM&73+Tf@ysyK ze;vbcMzxr~&s$Zk|9pN<)JBa4r0M#mOhf-OLyB^|9_+c@%WN?E@C-i;k_E!%UW{lJ-N?re)c}4vg>dR;+60{Tm zOfg{HU*YQX1V8xB-{9Vd-^Y7z0{`Y$e-TrDh#1d6SU_00pdLl)ij9K5aZ_Ncoc6^g z3xK2u3K=mS0pSQS-2lQ4F&u+11DLVwEB5<}fE|vH?qZ&9Am^J%`A8aL2}^AfXcs^& zfiNScn+Wj+(sTm|N1!mHHNW;3gxHXBLr#0daDvc2#hb59cAxOt>*w0 ztm~dt+T_<;Ttj4R&*|#2QU$D^n{_U&gAci0_GnC5^vMNE-@ z2USolNC7xHnsGE|35BbsPW1cNK}jhXjeZ^*gN^*U>i0(5@d|KAT5HT}<*@A)wJf+i zJH_J%pWvep{}$i>?zcb<_;>%?`}oRN?qZ%!(C{gM3xv4xd`oR)Q#LX|fHo^h=b?3v z{pC59s|#G5p5f~35@lsU5io;r1mFlnJH&JwX}*n=Z-U}68g?M;fHFfEm%GWq7FnpeeJ*sA^y#4mu z9b0ih+yoW*_pX+17!j4*)L01;WPxYKPeO>_F;DB^OfC@27U$_6@ z;R1vB_2vE0C;ph3Clf`1O4tJV+mJYH2bz%4Y9EWnQj3H%MN=I2vEVpNp>vI*aQbqd z2WFaX_>@7Z_n%r|##URIEt_T@hiGhGl503+RvnjhkDLNP6;qC^e4R3=Hk>_vj9Lp` zd+oJe$RbUl6nT(vl&mNtN{a?EFuEQd)qc2?6%B;f-+Tk5Rh*umVcN}zIoKjxS7y0g zSMzlRDuKJ~JRVtD*UO|^-INJF5E29v1WzccSJ%x|4M=Zi$Eg@$36pUJKXhr5v#gH<|7O*-~LxYLqA zU+Q&43$y2VxG3aUt_u3Q^wQ6{r$-^VxC;SA@nj6|2r4y-3DIFl~PM zumk2T!tN=n#5Vze1jC>BLToAPFxD&a;c<(fi5zQel$L1B5)4SZ zSJ7sPs7E9905x@E^a9z$*H~=SgVH;S%fxUxWI;bECB)n@8or3NEtpdij{Z=w>VAgr=e~~%*`E-jIb}|7woeO^e$6)dg~v$f2p7!`(B~z{ zT9QJRYtCHZ(%7ioN_E(UXrW5$x^Tfw_Bwxf~BmT-5(McD@z3-^u5={ zeyWbL#urXhmW=iaDcCRm?$!1L{24e*jT$SCTOq9Lp4V~$+FHyp7h|?iOP#Z8t!Rar z{nR*kl=n&eXH&|ZwM`v814NtWZT<^AkXQHL%DVOq@enwiifX~-*&{ss(JSu|rI!h+zRj;cFaVC?x>KTUHd-xIW3}l=;0iVhePbP$?mV9cr6J{klWS zH-NMQYQ+9x#kvrVb~mw`Zy?5*i?v7`CMdyNib;zxBj+Q4Cd6<9h&O?B3u(TMAVpoG zUg)OKkTMXkM^2ZBIKfdq!9V-_UF^?3#G{Wt=Ln9V001BWNklGmrCdO*^6w=0sL10h zM&Rbr&I+;1dc}@7ai7H)F;9~f_NJVf9Xrpg&dnLql(E~*j@2L8@h0~4jt60ZNFX4E zVC-O`hGl<=tIIQ-oqU2v_dmvm-}x5KPp`YL`6iH# zL9_!Qqf(HwF|oUbqTAP`p*X91RPODuvOmy*6c>beihu_|{R9#BF~t*PJVa`b5!xj{ zd!z_VDfDnak|0c(pY=Vh*c}=uG!`GY^MvlBJMyIQen8IN)*Ma~Ql8my68pT=krA;w zaU=@`p_vm%YbyQw2ixy5HgLr}Pqw!G)KC4CbH5%Ac{-%rJk+!}REygxUANBd=jFTp zILy~)i8Y_aX#K1O-K}8lP|eO?zb6HhZJQ_Ce?RoSQwZTd;Q#;UAFasyyhZA3RrvtS z^NbJ(ufP5}e(Se?lWpMB1R&z}tvfvNqo>090_zY!;@Fv9@wYABd3BL><+Q*fK@@Px zQX!#kIDkM(lL66FmIG>og;X)jS~|Cpd5aoG&=06`UEJqXZsHgOfr0g@sm|3Equ4?v zoIGWqX`yLjvGy1PD-an2uNe<)8(gBB7G>9QV(Ms9(E}>8(MDBWP7)%O!ZqcCDxt=M zu5jPaTEpOppt6D5VbF!CI;nr)zCEKfA!kAAgLG?%l)b=_zWdX7f>t zW=aWn?%u|o+qXGHHSyu~`1pnuB-dp{YdjX0W$DU38HX3=7kK#a0p57?4ZQf`i%2qN zRXv!e`I`Df@0nWWVfGt=V~F)rJB>$2Y^l0;?;ehhj*xRgS*!hA2>f2Yh^htmQWmW1 zimR*3;m^CutqsrIe!s`b$q6nmt}xFt-hJ;Ky#N0D_}q&xVxDIlA0Lksye$@ea?dFb zc5NdSQ#X>Lz zTO9a#X($3X#dPlT6BjL-;SBTw$I#Q;ODR^!ux={4)vjCG>TuxFaivOUMFyml2OGa3 z96*-V4mBA&Cj_ej!%zh41?k4mj~)t%P^k?3V`a4x$XLL>UvzDFe%hs3PEc3;vX#Vz5J=ZO@acEe=Suj$>6M+kv<< zuLnFvCHu_0s*r_C+4qyRlCM>iH8GkJme=EG<3pbx4Keb{#Sq86m{-5@=bNtWdjERZ|IfcG)IorQ6(t7PNN4li23R;Fm=wI%xR=EG4US8k&eDr=Jz z@sI|Ft|2IN&lIAuLx+Q<+uw}ppm0s?%|T98aukFi*y?8g-sccq^SnYcI`m9y4SCA; z`Ksfmjv;p)=VNFpf~lu;J{r#k&DILN&N23I7;1GyNtKb|&P53_#Kf?7b@P+mN12CJ zojB!5#!eoJj#(T$JtaI0to@th=xOca`dv78_D=TPSP?sxQoj$_lqX+ozU;PDs@WHq7)@#6T z{l+ih#h1>JrUyvVf;3gsx{P@bpZhim{-;=sSgjULTt&=A!S2q~u_ zLxQ%<%Ok2%N5Fch0D_ic>LfKeDJNm#P>e<4&Hek`1Sww zt9a{;Jzltbju1|fIlmiSD!WDI))+B}cSdAIeY8DgfiiWp`fOlWn&QX&dw z)W!{ilqZk`vGIDSf!?j3|7G87_dO6M5fw3ptvmgOdVyob^Q|H0rm5HFO>2&#UUNk2 zJi+53nRrU~2JHUa+uWqT{^NiAzpm9oK8x7#Nh;YV6(*mjZuPXH?vqrwKM8^7XASy# zmV)(ZH9D_+ej1hmKM4fE^9+E0EcNYYdH<*V%(Gta$Nip9V$W}dI)BfMC|Gq=@4nEy()`Lp%gMI6;`AI zSk@Iy)2Kn1c60COqpJt2DBM`UB5KzV5mL4VaIm%{3?0KD>YPSy6D8@Ys^n4&6*G=z zW_6*uhmT*|loQ70)P!_7+%#6SSa?S3K|v|S9!_Lzv3xDCAVgRAjM8Nj6^2RG<=%B1 zM6lum!}yye=&D-LKm7fk6{O4xr>fjcQN{)&T=X zV?vf7rW7)(Ulg{@AYv<2+IV$}jMf_F-7yfl`meNN$~lO#mO@u_>T?%}FnRkU0_s{! z;bux_nLD6&c&9U<@<4U7|>=jLry7dDsG4p|0@U6r(id-iqj= z=r$)qYql5S197rvzLbK1XvG6N$VM5HYXe9v!UUk(g;jm84APLID7je~mGjKWtkPLe zaS}CS!#qtkf9UsN7I8J@mseP7A*~T7-ACt^NFgJ~Nv@qJ=p#8rqA&nO9c9+z5G|N! zYsc03pY8tD))bv*y)v59$~p2wUr+CIm0-pyJU9(EBsX?={;F1hj%idBsp7DA{6kk| zd5g0+EL0I4Lzes8ZFcg-kVIh;bWB+gP`h?0RON>%^P(IkRgKbF(>zw~^T^y8Lq;vm z(IT8pd(Pv8K;1#2s=Y=5Ymo!8sz3ZbL>wTh?6$ubSP7}?=N50`H?mwn=%2OJidI*? zpQ4^lIS;AsIdq?>lmyfsn2TRs|AfyEJO47^_s1j!P-#s<2|ufpuJospA=3@E;P-3B+p}zh*N_cgn$@7nSh`T_+kV38@t{l3#`AjE)Y;Lo=>{5B|{P z>;U_fQXJ-fqG~E*{XShWoNV1wMd0DXpfnEU{XAx=x^dm8SRp4!XwSMVtg?q^;(1X- zvw2IM1#4Y^=)!Gl1zHp4uS>~Rx{nb+;<%#LcGj zx{V`L6H^RW3mIRmz;g=n22f@7>%K`41FKLI2vh9er%uT0z zw*TmJ)a<&nTBX^@>t}U%33b-Y^NbV%VykHDg7xwo%lTtG`s5?r`~LSq1^9)Zzl+yj z2aq14#XZ8LXO<1xC?uf3nhz9-(F7>~vgS4f5G7EUKyimO-$I;kA;eqA(_K(F0=0~F z3Anr{Xf0xzkB|j(0TGPouV7404(Rj`!cah4u0tP9OddZ9PMz6+v0>LolhhJE(J>bL{-(2z`cv?a3p8 zjI}uIBiD5?M@FeU4*EPKXW-BTfdSOAG7B|lnFrvxn?iRQ;^)1|8>98BR~31}37G-E!xg=u#ar4ja54YfoN z&4}?Ph>p?d7zj6zrq3ZwcMa%D)_nNY^Sf;%7Lp>m}))LFRsc4p9_iOk+XPBeb+B7Bf2o zc%B$BWF%{3iaa)XFDs5zMCQ)7?i%8K-0bi{z3KGMJMZB3?Hdp!!&5EthY$q5@#W{l zC)w+-huwWPmFnLGL3#-D`K-VHG?na=inD&NdI&+fMIb%xdwHDN(?0W0qyYPm$$&jn z9Q|>bu!nBsA;9rx`JSJpIJ^A}S66#nU9I@}pZ|ILJDQrlJ=l3Z(V;-F&Ymh(Eb+xo z|5~06=k0QS;A`Q)D}|I#*%ziU#Z_&}BV)1+JSwvesg*p2fg9%8Zd(bxzUDm7j^#n2v$bM#f@ezRDIT=octxgXaeKyt)L%&CVGWCc+~L%HZ4V7tHa z{8fKVy&~Bc4*huB?iq}E=~$-vTE0+Z`yOdtjl5^Z;wZYu3ezcFQ%d{$duTq`?&DODo zPN-X8%Z2p@i5CMxtjvRr zD`Gqa;UQjoHRI;d9*^#S5Btj#?61x_lv($Yy8meo-9@-|X7y{Lf8P8)(>nnb2@nIX z(S8o&@icSOOrF8zYLB{>VQkFv%y<#EW|%;tmO&A&cB$ zTCPyb9v7#Naq{V>_~G~d7N356iZ8qmeEFZW@ZfI27n`kcoTW|ImGD}V!8oB zLZ!s&?7-_H3(({Bf?rQzWCeJvNV#B&d*pbADLlf_bcP%G0*OwM+68F6K&uNoquf00 z1!qG&p>@@%1tGe%*JDKd+~IlqJTKQ_{qSp`o@ckAR@*bZA}ADbHBCDkSGv!;bLS4; zdh0D|sy|YFXq#h^Al_!$P z5z^cSO%qMElW5O@C~iSxm`R=@Vr!_aa2KBBa2PfnGf^6a6tI-VZOn14Kt_J zRav{2cW&Ll@zG7(|KtH)f9(}aQ$lHywCoCmtn4T~8J426)JPGW{Z?$mu@F7#V~oIw z)5=D!6=hvbF$Ym2n%XH=Od)cztEgU~uUvyTa8Se8-{16!18Yla~=d-Dp_+Y@VyJ9{5k%@5)3&V3lu$_mk;JOjbi*v6fQ43OR!bq; zH18p!)ds?-z=?^kS1XM}5JlB&mSOZ%dPG8&`@juQy=HFHNfkM{XDQ|(5XHZ@hPkn2 znq3{iLMM}{m6c)4gGkn4Nny5m1k8c8ut;r;1wCvwxu?O@B~c3r!nD>Jly5rq!kILP zB@jpt|F&-;#wn>%5ZjQEAkUtt_7K>Kq^kA?W}hk(J7*62X|#?9t1yZR8Z~~_Yq92o zIJ8j`!^TpsznWU2T1`tvYL^=;Wet*335NGC=9s~!3rQwW!BR306e#RHZVrTHQ<5FoJw8Rq0aL9F*AMRpj~0DY<8b zaRNT9F{jy@r9qVVwbicjH-tnVx4w9p=PXz$R)s3tf9nQN6|1ozMeWN)kFHpsvaBD* zw4?#YRZLB$%3G)ILQg)AIhk5-Py*?`5weGh{9dg76=rN;2gZKC$2=WjEd>uAJU}T0 zw{G3S?c29|=x7Lxj8Oy(`Oq6;{caH6sq9^*d4~x*Twd;xRZ%F#kzJnHbT6m^1mH+; zO3t8#heg^U|&{PDy|KP zB*m)+#5{p8A?725I0MK4O#mhkCA1c?E?jIoo^Bur3a%GkqODszuA)3AuyqZ@%FvvT zP|AWzs_Nf?LP7`=tGlTo@kthcZ<#mwk=yE6V{N(o6EV14ce*0o?tles!$ zOsI7MMZ$jF<2WAk+#mX$q%rhi6g#Ep0u1#Wmai3RSnMiIx*!fM4bzTz2M$p9@V z^$M*LvYA+$pMv01x5ZY z<{;BKi8w1}nkJwU8h~lyvxvI?f*=}n&#Ji@Uhr0HMRpBA&X*Yrdd=!l)dWa-ZdH^U zJ6?J3+Qg;G>qBqw#{_)wi(kaIzV+AF6stdu+nJn7H7nge*{l~?fg z+i#nlIZk7WY*~vH7q$Rp?x=2)%DZKKP`X)%e@t&S7N#%>qf7HmDVeQl`<>OYt_LhF zh}wcwHDH8`5x%=vO6eO%dubNpH7LA@Kvsld`(pzcM4pJPTt1yO#lWfD{mA8)` zo#68F5?}bj`?zuA25&Zr$yeIdthFMvfSeOnQ5=}UR}O#cx?9r-CA_%Ppmxz>3SXD5^wa{C-p}DRHda#W z>?`YPo-DY?7X*w^v^M1I1BBY3Sn3UeunBGngYrc;4p9z=YK7O$K<5|}P-UYbN~z!i zDv~=Ssxt9fa(Ez=jp9q6Ayt1Ssp3~!&8p;8Zu~wGF^sH`m%{$-TkUm6K$JMJoikjk_s(0vFxpc}9qYDamso3f&Z0 zjUSQ5jh$0fx7Ik^PPmQAw)71+4s(+rE&0B>4w!mif)uJas3aH%SkunC%1xhVuZ(6T zk6bIK1kO1d2Mrs@{Z_$paIHo!+NKD!mK;`~SwW+<#!ZYEOlhZlShz#9CVku7k<+!# zw<+D_0D?Fwkeg@vD#u#Kp4(IC^Q!ZMS5Eua(?&r~fK0TQauCjMXaqRT# z{Y7U?dxdsK+;prC?*XEXbHDl5^{l^dy{-b?6k)ecf<9cjr51OdU)!J* zws|h6gE#@Nj^y{x13S4olnmd`5qCjVa65raRj3wx4euG)$g0dT-l;N*Wew4_)~;8y z2Be=4MtoGWM#_k+$Zp<%F{?G)$?jV`d^qBHs|~7ZrG51K6>SgdT~oSO>MCK^v_@p) zj1&!xDIIz-k!t7W>hr0EzAdxYkO^)*r^X>Jip8lSI3Nmw&+79UH#vHew>|%!L%At$XCr0|yktI!BdC)_Bc1G`@8t|x4#V{!iz7yh+q1pU&62d z`oF~&zxYM8y2?5$1u*T+<5`N_G`a}7jECevMiP{ z5o4d%Qc5_!c>~}0#y9YXfB1)}s}!=S2iWN|oTrGl-+mka>X-i|a?bekKmT+5-tYaM zbGJkhg(PcS#2E4QuYVo)?%l(m{n?+%`}@%1$^~f=R4mILmzU>w>+Lu2JHPWgNRjbP z>%L%JuCQEO;M05eaQf&GjxzAGUwsF6??!}pA!+YbONho7?+7hO!$ojK1cXXJoRHEE z2uBEULZt~Q&ZsRQAY)y4?#gLqOdB#g&SK)ADcL))vybN!z8~^j6hfX7Du%*Z8Y^}hCu$vsq+d(PPkYu;&~bJV)_qMEK3>e9KmIOl(# zc7{&!4hXM|tcIuPbJR3VP7R*W(AE4t5WAsT_#tOwM#NT8BOwLg^85@Zj~?KMAN~N3 z9~OM&OTZU?>JIL_u;SJ&R){v*cOjI9SvsUeC7FRzMoh;*m;oeV^F~Iego1#Ely~S! ziV;8(K|?^Jz`SoMBp&aM!b?{p001BWNklOH0Mc|!#eF$UDi zV|2IMp|pyxeD$aC`@jExUU%sp$Q*c5k?@cM>sc25pS1Y$v%bdjeEvg<)k6x`r(HjP z-L@h-zXm_atp{$A{pA1IN_ziu_~%fX-1Br0w)W3MsDeWe;?r)rzq#+d|9MQ)B&-|` z2b$-(Z+4@Gi==B-ejYd~$%kxqS!u%yCeO7gB@`)!Q6WrIMujYT+HTZNrLs~P>Si0p z5HtX(4GK&?Tvg%hh_WdJZnT1s#on2MC@T^$&9cEI>FxzhG*pIXw*>?Mfts^yYM_dC zm)OQu>cW$(B!~O^=xx)@9Tw+##(pn{hLprIBy3hmuB1&dUYRa25awyZe!UWF4NUnH z{k;!z?dl3bL#1FGGgfW_d7e?$W(+_+)Fe}Q=ET5qRd?08_Dv}zNx|)5GXTX=QhQ4qgwL|7rZ4z`feDyDftS@*cQy25^ciQR6(OE0~` zs&IdUwiL!zI$&~^{blABH5B? ziV=bcPGCWSMn>W|f}w%tj1WMhzyk>eG}M5AAO-TsP$oe#ku1rM10_IWC4fd61Pc5J zq&Sw~*pmbd6OtmuX0snv_ulWEz4yvsJ@(q?-s%^dv}CXZf=zYRt?xUJz1Lpr|Ns4W zZG^FhHPwKH5N@qZ_Df#9v1$!h`|NCCEjjsNa;z<5tb5^5$*3}aErGeFKEb5&MO zsQW%4K1wO5z51FaN@ALVgj%iB;Gp-a3L1UhwE>z~_@V6l-N6WrxElBxTqkUZaU}O$ zLwS(p;BE85W=#!IlP4r^s*VTW7Ez0#1j#we>OkK=*!xYv&NP~8pF z;92So;cR!`H%;m%^+%N9Q$mLuxIpSAi25==;}gnD%j5Tw~FY2ssV8LD}0 zRO@}Hy=vZwtU@Wvu+jE*V~lrGA*ymaqo}M$T}aKs3}x!k^dM^CeWR%lM2Ds~6H1;C z0(a`~%y&5P@?JGvL(=q~+4nR)G1CZdN|f9=)vBsXZBP$Y*|)A?eQj!V#wM@TkH))% zvYn-d%s}txeb>(+L8?jZ*@|@zb#1hhcW)@8%LVJGG7PdtBNe&-Nrq~0i$8|Th@?4c z&H3JCUFl)pv};~c_WN#)R@uXfJ}csZ@BwxgHLnj%nlu8)9Y@WTi1OU&`)oskY$1gj zHc2u}w$IQ>n*53N=j&%k+AuTjuW`&%%KChCcY(>^msF{peEs~}fBRSQyTAKCPtVxf zZ@-H#ed){i{ont6eDRB4#9#fZ{{iZLBTg8t-Q{!3XC0jRj7KlNh(G+pKg6&9`ricr z{KQZE1YZ5oe@6raK3Jq_pE<3U_$UAPf5YGXjoW+GQgLl9ECf@kdKSMtQFTDhO?sKmSuQONl!aiW<${K!JLn9XIx)3A) zaYD)`q_hIGg0TW=MdlT~5w=Z57iE=@Br2-1ORA(5<+Msww2>@>lVw>XxgMfyAIxV} zH1;a2*)D4vx;{r(0Iu4Iy#!MQ;}*Sd5;D}-aYqtfw4$UNJbw8SFFqi=`ScC!x9{TO z(T)rbLtYsyr7$>gOL&#{h4pM{nFnM+UX8JqRe8T56qiP*t*j9VS$}rKRYb>@oMp1# zlLjFSqXZf`b}C7~=QsrkB~L5OywcO9wu8IW?MqtyTG+Mi z`mVRukvdQKhnzEZZHSUOFw9*c0;!6ks^%8ly-70yQckG54hD2kmZ(U;m(@w`6jMQq z3Nmt$AicI{3BAk7YvWHp`4pCA!TEfi1`Z#j@%Ua%$`9?v{w|9zKkVQCK~$^vefM|` zW8dz*n%YMM-}BI?&-?u4d)ah-p8E68%dhw9ihs~Q^FeO*u?c(p=MSUI{ru-YCrVXq z$Te=063!1geJBzmYt5kCF}Yim5Mx7#3Po3;1$6;yGeLNh-3vT9m~97!QVW(5vCl5c zf>znpgfexVRRpFav2<_QG&^c#EK9x7VS|)~< z1s=%rJR0A(x3_rr-FNZ%&wm~l7Z=k#jVwn~&v1tySfxqRJgCDIB}9i*X^<=5OzC6I z!q;AV4e!4F6mPxt7G8YuMLz)8^K1&wtc`A&JVX`h?o;Ta+9ys*?HN2CoR1vjbzQxo zf}jqxf^aZB80- zxGb`^cI~!%;8G_Lt8!b>5s3&?mIKTLYWi6s7X6nwqTmpR>?R+hg5+9jxoe>3-)~p?NIAlc^VL zb0o%*-8ozpvl=|Ia!;oiCXpt`$6ObV8YF%$N7k#o zHXT&MojMVDu&6U8D% zGl{C>)_18rL%nFvd#npmBHu6Lvq{Ex)&YFH#?irLYPa#cb#GLdV>T z-}nu0zJBUcpTrlw@H4o$xWMoI-tXa$|M-vb=9_Qfmw)+}@f*MKn|Si%HPpRpgJA?? zN?lz2I?8%+IVluV%T1J;UzqH@Bm9zg=8rxi`26}{^LLHA{FC% zG6SFa%x7?Uc^R0Hz_x9;xw*k-Kl@p{`syqA({Fqo4<9}h24-V?^{ZdSn{U2}Wm)i} zKl<1M1J=2{u z>=h_Bd?6W5Lh)~$f=<2XWs$CbWp`y~>1Qf9jg>y?u2eZnBZyo#j z2JL*to8SC8p1pH}C$9pZ|J=*CdT@i&X~VL1Aa|rL0vy&lgaMRX&=@Go1wdKu9j#!T zv>kL2&_x@-E4VXS74ZPkDu}PN3ew1t4FT6OCHeWh_m0}DgjNUMs}1sFt#@=dMaPCA`a~E+ zljB%I2p7f7$y)fzE3e?i7a!pp-#AZ!sqd9T^g)`e?}yNQo<;w=)pz@_J-GWsj~}F= z`#iV%2SFTskjD2h8|EW7VDAgG`k)QNkMqWT+=|@ip#we)U*f|&JV$x*eG`o5%Aoc9 z`q>})A@n{ba+2CQC$Y(fCPzO_M#=_ z4AMkgKV*_AtPHe9zL@S?w2kOyq2VT-XDd`vn^vt-Fqb7MbE#;!K%cCawz=h;HR!2L zV100#8eP`FcEufpTPP`oLkeUm;iA@4#R|wLcf$11q~sQ-Bv4fat74VZDoxJ5H3gts zeDy#=NhiBJ8nhWnEm!a+pKRFsIOL##IIA$H`~9U@H00#$U$KKI3sVmc9m2OV>$fN* zVu)K(?7-soK2dP$f4o_$g?;PbT#?sR|9o~npKMUO9~Q5#ukqmFC0=>_k}IW48CVM2 z@Fh8ZsA)>cpiIFITBop&oI@jl;slHxUD3JW;$p>Xuf2*dfBDN;a>3Qrm8uDarHQy+ zuyB`3%BX>}X`8vFp}V5%V6mPotjdEj4qNYx(`glji!~?Er!}HO2N=gS#V{8nhYDyz zZf?Nc4awP!Y+&xwVGv&`h@H&y=mE<`xAZsj{ivc>u#e zJioro2D-Nz)@)J2*4~8iiP21!a15G)tw=eHM3Q90zmeSO;5CllVl0}6N zPRJQk1CKa~p3Xj}rkw9xungQpFX@d1-S}#WFT!n$yxNE^Ke->#d z2RRhUfGGD;mWFiFJ>4w)L#fMC1Bp#x6)f+nI%N1Q*MZUL@qCrTM=;orzc2L$d`?1mJI-@8gTH~P+AQVw0xw12PJ;ne! zbu_NxKCzG!Z79dk2S(YK2@BCl?(%{c*-L$C|qu{SfC zD1SYhCZSj1G>h`sPzbX!hgGFTs?zq9dnU)o*n4gJo9s{N&Y<=i-}nZ8^EZDR0Py6K zpTOV$Z+;uEK7I|2JAURr{ZH`4FMbjK@PGJSy!F;Q_=o?~@8WO$t)It!-n%4F7a#s#os|G zS!!2i?E4wDZa`NCd#~vGEuKAn8-0I<2N%GnKUMJJ3mv^b0~b|F>b)^xK+?viF{L{v zl=TwG7oeViv>@eG&}3Z)hJC?OPLgP^Yo}q8Bp*WDkLV4|Rh6SzYGU2c2SUW&U*&Rk zLQW@iG6xBK04S4msae2994=U-30tlP(_LL4L6gZl`%_FhA>p@g2P(bZj)b$`j&T9^CPE3TiugKvG~ zt4IJo_gTVgubyyqRZ%WFuo!ZvYZK4{4HFs>kQQ)SK>1RX&{)7+K*|e-x+D`V=-2@& zAQHElC|5<~LP;Er7N~0juHL2I?M=~MWyO*T_IgI&t2Spda$bSn1uK*)3N2_`LE92K z8)}S^GP{FKYA|)yrUW!b${mF(dVPjddWMCrkor@gU4nT9mR0xd>_hBY`;51RHfbMF%Ds{4kpWQTe^DMPtw4PLTjmNc#DlJEU+p~S#8B{UYNu{39;iC)!x z+DZ1AtE($~<};tcpZ(bzE_}ETd--8GsLw@x1-Hrv<(z&un64ib4e&w#zGGwb{jSmT z7`gAog1s-u>?1c|KW;hjpBKEq$04=;Zb-GC_wP@qf*<&S*L^aFgDTZF8Mn0(p{ugb z!iNSQc5XOW-bqw@*dce{cR-a;HifRWyHaUc2B#|p_0ExHhBVl*F>%-yrl{%|Aqs=n z6IDLW_;W^Snl{d8cb7s!6r=>Rqt7XT&g9c3S#9$@F#9cAVH#|btw}-Mg2g!=VCGbG zo9qd*($cyqgb=^01`D>uJyQ`FsxSvGKlH z=)tr9B}>uHygb1JFKBGWjYSMQc74<*^r7f z>Eg3w4XLPdutMF|PM1CFs#TFsESC^mlmE8Dr37*XO7hU?YD=npmdM)nR)^WWw3sy=|MTTg+-}>v+z%!#a&MO=Jv4CEv^zJ1EXMDuUDW z`-dV>p5J}nN3c~+hjpLalAThK4v4r_6)IuHX9owW2HUdw0%!5BzTrI5{T3o9f7#Fgf|YF3MQj3;Xm= zSk2^3=qWUi@7ym7P#H*?HeKH^=bhNFgYk)jBAq8@sy`=0$_Jg9z4!5D<1go&5_wpY zF*M__-U9l1ZBz5rRp!K#RXgs*lM?p87>#>@)P-qUgS~Dmb0WPvt?YTAq+w|TcXQV| z7@GS*MIEnEtciV)(s#73N>sfr=j|+OeQ3N&{YJir#cN>${+xoEx0B;)_=plimhi){ z7s`7t!%|b@9oHKM-FXhh0&UL>Pw$FzAYG{pzt=Xvj`gZS(z8LLyiElYjb8 z@zz^!0RaBy-~7+;sZTz^?RG|O4d?R>e(@K75&y^k{?GB{FMk<-^hbY$ZQHP}*+VAH zsTD1|@g6x&V_C*?4anNxG36H6yJ@NPj~+epKj#hXzB^{a)Rbd*BiC|WS3G+7(3_6Y zaU-9Lv@zb%+F*ss-f;#X{Aj^+H7pwNdV8}WamRjshNo|R3vJu*(j(yYPrr!E%LYn{ zz$vTZH+C5|fY2a~9#+&_P79D05pIwKZ}m=S71+)jE-oG-(}f)Gsc7Rh`*2Y>8$1R2 z*#NSX?C!_DH&9-*8LZ)p8V`_CLC$^Pg}5tvBq6(d60Xoq)PYn1+R?T%h$Iw=m~<~{ z$fe`O7fu zE}KwSn#&#8@1w#;aITZjE zC3kFl7yCZT&`Nl)$(#9E2gel9JkaMNYxpZMV_h!5XsET~d~R5lgk@Pp6xImDm&j{I zN(*>@hTgBy`dLs2Is5x3ifzFx84EV$4XD>h`57+O7jd<3xZbY;dI0c_+BR@HVO`fS z*d7Bc+YcgF{kXqLc0_Z0feoe*1PH7y9Lvgx`}b5gIYT{9`~P5_Q&7$VrKsvVJl8oV z{O}L|F#g#;`(v+PzMK5jkAn;QarW$0MKf)4>8NJi(;aTDR8{$-yv%rbf=9E!CrnD@=3`1g75{bIiQm1{v?c@_hWGX0WK_+o+q=e9X;mOK6 zPh+%*PQr1rB>RpLVnI2na?h4;=2!>BREl6lxF2>;(N!VWYT!OHuI!KzZ zQZ(n3aCvcoQiRc$RGquz6}>WUZf>wF3qJAqHI%eWo1ryfJe@cvlyyN~iYrHZi$#<$ zf+;cfwt+HGR+&_D?{3$g*0xSq^6Dr8CgA3LJCFfPVh77I__yZ0DT?j6jP}EL=p?m- z8>`jck98?-Zy)Meo|2d+3tgL?W@8=e-B+W=sGQySa_V?KOWbE4{4;*UU-I6NeEkY*J z!A!c-#PY_ea-!oswe!@hqBcn00JVXK7h`?K=m;CTJ6?o{&}&EAo2Ipruygxp zg0QMHdYnC>ER9e!wO42tCrCTal6{|%GXGjBqDXg2S6r6+AgzKBAAX9Nw zOil|*8u$xc4ty#fLGy7RlE&2T2U~fDswmG{)_`O14!5SlJ5g@hdhYoSQL&WAAkWj} zbx>vdntiXv6^*Mai^0j?eOr^wb}PTX%RB0J^t8jGUGkZxTa)ve-kt$ZFlM zS;9B~?pxF5l{6RK{;l8FpXW5tEGbJ7Z>-po<@t#F^-$iaT8x0bZO93}j!Pq!T%~e8 zpV3=Gs~b8*Io?%SZ;jW8fasHYeW=#$eH+dQL1?tj_gJ9Sew`L^v@{DDGEQIDCYsbB zDIY@x|1lv0-FlCBlz3J}48)WW@CS{MBJLY94AF;lYl(4Bo- zSg|>*ugbsFx>;(0B{XKo;L_AhC9j}7)<%1Vv#!gAz95FEq19Ehg!j4b9osqN6_BXA zX$nD0{$4m!-oB6GRE7ebT+u8+f678`UDf-=Q_i#2_W$S~|E~amM~@!hCx7xMadUHn zT6b*cTYx)Wc=P~2@e}_(0O0Fi`zmgpT~9-NbB1Kf{>=B@!Z4HM`-l36)xJ(iZgmEs zZo9iJ?D=mxbaDJq7FBw$f(xA0g!vkc(mfcnHE%Ru`Y5%DVa*)Rvx?)$3*% zA}n4*5zAgRi!o^WY@`bC-mAPHP`3h#H1Hq|zLXcRhKCwj22_z#$K^%FnmhK}chR;R zP_0PlQ!OB&Ph;qNdwZS+qj4xM7IF4^Tmq(w*Qeg(EZMUxjziUm)yg^H^6~-?9z4LK zM~`rEafycyAK~iiN}I#UMG#YHE?8=MG*_vcTGGU-@?0jYW!3zYI8^-qNkqVcz)6IBI)UMl9G)9>U8fP#Haz4rRWU0X{J4S>-^1nsE5C-$LNe#{og%VC>!Ko~0+m733*XTPy zSV8FlKo3CW1*FqUNXrYLa)q82e!s@)$I;(9V)H(32l@x;r`@MEy^p{8ydLDSclmw| z+Yj3BJO1qZny|+|n?6dDa!S$tE;Tj(b)yJAs)F{r^*QDjN*0JGPo6k;GlIpX_@31o z$HsY7J;cfSV9%sG%v1x1TSL)Q2>ZT!GsQ3faiYC#+XOW?g(Q(S6GF4mzQ@G#3d%EM zV2<*5mT@{Z zt0=nL<&9Tl*RTa;jf6q8JD+VjF!(btH+cLROEWXqY~;ei!*t-cpJheou=;(>nfkq6kc{1iiOwA zRwcaj(o1;hrI+-eQK#v;eK$+!jViyWz_kCr9B5;qhe=^#-@`tyy)W^3wPz{X?&Gzw zgLV82@t#E`pnd?tT1url_%Z!>)bAnj9I(tpORFg6436+k)LVJ5NYyP zy=Q6ML)?AN<1>3q^^A?N_yhlz_ zENX0hcC^VsHGXtz#P>7qEmQh9-!0DKvmozW9t~_&*UI2%Ij}P^y^r^?oUMU#RMOh# zjn{h&S?rum(_jG_CUx8|kJllpYeey-VaE5o7pAC$syL3dM|_`-?Cq#%zR!9U*Zlib zeaF8m{``2ak4k!Lvf90~KR22%(6FlmYGta zC?(^)kAap)-mrX+Q9syP9`D65KJyNcFuKP6}jcfMN;UW|Wl z{O(D4lCAHPs@|WmaNlKpAsGA5vIwMc!FK|@u8}=6ruL5Od|V@e#w z?>O19fjeu7KYxckjYwL_#A(`Z?0(z*y1u@i6txzLXZu`4K)K6C_icL~j%rw1E`+sEb2H9cvlGuNtxs|7i+_Kt505zyajldbjEq$W!kGxQZs={t`Q{pL zzVS_<1D|>oc;)4Si&H~cbiGuybOQq^OW;-(C30CV!L%aL37{2(3jh}YFF?;AEW&xE z6=1n%-~viTMbk34>DpwCy#R53%rTIDJFW;Chq`V_ui4$MO7Qk z)kXu!U}ytXlW1D3S)aKZ@1xa)0NB3aeV3E1UtC zlCqwAQ{{}PpD7JnzSu6sY=+LL3XJF0(XD~57FJS5t0}M&2$dVSGg6YIVh;DFs9jH( zmgM%rq(86s2F{F}3wA?wV1yOL%`Q<#$%Jk1s>oCY7!5@v*f@IZs0dP*w zeaw*a0w{AR9d1qg4ZdYDve>CKQ_$=dwUFtMCnPc)bPf)Vrq>2ZTp9;0o^T?@yGMpefW$@5w(j5A3&aB~&$kW<#Z7@AK&QgX1?pw5ei|D3#tVwE*+h*?o2#u8R8 zuGvS$@gOyiC49@BPM%7=@70GNlvwIKb3vpLhADMP4THU`*CPgmD0dg4aPE3NmYhY+ zPU}3d)AhxMptWt&5I?5{y(!-w!d>p29o1m#ZP$X|vIB^_1S2`lrF$rm)Y@lh;^=$( zt#5q`-}w4B0R~=w{dLE;2&=vW9eDQa8Gh=ge#-GtPd@ocZ(efiW5}09T~=#5AcAzD zU`S*Vu4Gakdv81qK`CHX%vmwcEsL&Www|TQEfd4*{Qr-HQbto;l%(3=3IoX4bhZY2 zDFwY&^m;~b6?H$OZ9De!8T)pFM+tcNfUp)q+c!bIa|ZGykQ2}33$gD}zO$ z+j>Q>jIv787$m}p&Q(HG^*u8-XKg(MP7WSB2jzKhKu7kpcG((b|4PcHO(}^joLKm_ z$|+4`8TR7BC`lX=qU1|hN(Q$KCT-evc^;dCIT*P}P209Jw(~W5-LdayEcrs3d3L{a z&9EqeOr+>L3k+?J&LIsGV~BIFwH>W)!c`CAizxIl_Za1YQ;?y$xSTk{!%}S>HU~o- z_{ROv8DKQn|IGr!r~pj9ek@7&tJZuwD}%oGify~b(|5j&hnK)>uP%7uVaMqN5GqoU z@Fyx6sTXjPOcAC9nNH|9A>jg)P5`gkAYXM|PN1$eTLQQjq_hAm+*Z;W$ynKBHB28( z)nqO;%F}>{m~4&~vK>_Mn^&~GVXF-}vmg>`L*s&!FOhOW-AIlwyovLmRu86YZ5NaU zb|l)6=oUn0B-+7sL&uIzP0y)7qOPIWgxYrDznUWt7TRX{4VK+toc!($Wul;V%`?_U z`Y_`h-Kw|v}Wg!8`1eqV|>Z?%sjwOX6-V6VLL3N9~CxV_$|W^WXA zeO!I9h_m~!7X9y}|Mk3_rT1d8ewe=A2WjHI9~bv|pY{D*@8560zQ?rSd#T<{hjhOC z9>6$#VJ&y&XimB~I~g}fXxTTmi|4FRK2Ze|Zvg@!OrNeX{DsMpdW0Cp|(_+YO# zm~}kFS+mI+Wt~TwC3AI^ABFTvSon?O4P=@XC(_2^iE5%mgryW`w;8jGNWwAXb2V3c zcqoDvoW0IG*_h1hFBt|COp+l-%Hnjm3kjOX1WZbCa&L`-guR}Ta?)Ugp>R$)2Swb> z4l`EhP|0Cp;l^~vV{*DJ+Mcf7F{PpJdz%^^aUyKfJSoC&?-U}-vP_5gsMNXL&Uh58 z`aQKN0oxP@o+PSGgjTC>Nbw+9TOEhW*2KyU8B)kSull{Z9$Yq8E5>4)LqhPfEVw=I zc=OFS@x~i(_%#q#ZFTi+oCxNea6b1tY*p@a$i-24W7jPvZ`$WDi<3P|+je$4XG(MU z6YdESux8S6k{T69M+>p3NJ?I&Adqd_?{HMPbs*nOZ$7H*_kGtEV6=A9X!h%nKnmb^ zNRlhgNd#BK!5e|&qadA}p`avI&7db1?t(WVHbUvtE^*|DXyW*iU zg==VGGm#lPsXf4;pl*z8$ehU)nzmjZ)#eoVMkS>U&Q!LqPgvMf8mX3#}aGPZP@tk7RF;e!~Bjmc2v$(Z_%9aZqHK>jTLjfM8&DA0xe`j z6{oG%L;AeE=W|$Cd{*M`Z}$XDq?G)+B(;ungEw1^y%|+bQGIBQVAdh5akMSiCe|^L zhZ-Fr6qG-aL4BWc>*y%4KUZtj!Dzpu!nP(t{O%Td1+@}Ss&=i#Qpr<;L2T?Pu*I#> z4n<06<37#nx1g%X!$kZ#>~(77wh*Ga?>mYPnxkr38g;w4G}wYU?cXW;T%Af= z#z1N~MFyn1?8}Mu4l?|0J?y}b?G;D&X*!du^d2j{b_KcD!-C$O$7o;`c! zZ2Ynm^xE*LPk$1h{YyWHgp8Y;8+Si=9SKnpHf5nZ!b#WA5h6SWlu^~}|Gdm@r_0L+ zSl2RYTwOzYuX?@nq+GYAsRVvi6uqBS5gKhDp|JLzi*in$z4LY>iRz2E4EB9Pq7mkM z-YfQ-YrOmRJKzRfJ_H_IWGqG3%O*j>Fy(7HA>|eIe2qfM8~UwPZ!PC9GC;g;JFwJALurvlEhjjQ*^M(CoW|6y)1Xj7vYXev=kr;x z83zu3?;X#czJr^aXL#*J;FXtFT%9^{QuQklKt&kVr~oA$LSBK=1#)_zidP9X69G#` z>&f3U(w~tMgZGRMpwJ@R-&AB!V7w>|ZX1E$mSw`OGM6P-zM~9O^nRo<*jP%D_pF`e zY*!e$Ec&lIa=DPdufjvlOfV$_M*viTev6cL5N=UY8z>cS%4yfSG;-ow1G>3p;XQ$v zeGx;ny>@EyZj_RzHQaj;(NUSw#Qs0Bg_GB(&DSeA`_`!*km2dr1D`y3f)`$R0XNUy zxZ~XUxYV!rxhg(R1i^ROu)Ql#qz@gm^+5y5-tXGnR}bI!^S`4Iu7A_juixwD>wP!! zy)XyN4C=sZuYO{(uUZo>vmdq=QW>^CB?rqQ#dfj99HQDFehKysNWLgIQqudC?#e zyB@uv!I)~IIuON-uy~Oe)JY44(M-1{>2%o6VkeSRart-Bq-y|)l4vvxqJp+5+9KNG zvj&u@>Tusc*=%1B@H}MV-?-uCe1pC1sC_iZHx2kI@}&4-h;=h*t)kXpL5moTWf5-R z*Z=g-uy4|UH2Aq&o{JVpoxCw03n{}cc(X+hRCU|$22}NqRyS?74?BrGo5p=T;o-xF zGJV(3p=kB(s%WtTf^W>qnyTECNmYimuQ7~wC@d;b-mJ?aP0g_Jl_JWQ)|#k$G_BVL z40ceQnxHu$=@j3Z5~O^vlr#FiPYo$+EVLf@Z-Mj00LnTV0A*b~ZMy0~*LcD5cV=X5 z+*o6(?!oGh7=j?rRY&uN8S6n*4j=MNlBzgN?Zn3SOq#-)6Tlrs*S=;EJKYXMZ7?)*MpMNkH*J)r zp`J=)oN-YIb=GyC3as~=HJGOLj=ER3)tlnbxT#D-wdY|mY7LJT{*+{RLOIFM%Xr6b z8$!1LpZ*rI;8;n9zvvJ2#?*kOB zUUyh?thI*Ig$()Di)HNHu@Rv6#yk&ZnH-EnQEC|rnf(9k0KIrvldH~CLPJwl?ohQt zJr&jv7NyfRn!N!#VhWcSx_2C^M%9oU01IkkO)d|EHYz~2f7XMgsw>5Xl%3_+^?Q|+ zhii$FhC&q&mXTqtH1&){YpUEK2w-1VB?}?3_c8@e&F&v#``UWhy3~#GB9ZJD zT~gc=M-DQ(b17x1b#o@Imm9c?4Z8JRnl2=6s_czvZN$>}Tv9Wq=`&kh&#L;Dre^j0 zf^r!0)Vgbs5Fad-S%TxZc`ZHi2$H;;T~giA8SlLPwhJ#_dF7SCknM~`1BupkMXwDz z&ZxEBdl()K1E82%8X7dEzqTgLzQ(dIPNAWhJdn$@%FmuX!yo*?AK>chO4MZTx?nu{ z)N6SC_197NGftp|pkY51d%XqWgi_2BnRH!U)NVx@#zaWUJMYYBOkffQF>=>N*$Cm3hG7`4 z>Ro45cb777WR!FW7*Rs7`a_!D3{g%dDrk^l2dh<{EBU$RcHeM)dxHiR7l|@4O=(*4 zK#qYr_PtA^*@nxIdc!`u4{fzZ7M5p12c$+~c~702pGP2)Dc}utK+5u#da=5ZFoi%s zQ&f(LuBu#9KM1bWiDbwj8^DkX6chnb?WS|b&GozB4m^AaJh;kO7dX>YnyMO`+BblUj@IO}427o-o(PUhlB|g`YAto$ zc2uo@f?%dLIi8cbTjhGxUd4sO37`fffbuG<4K)BedOxG2B79Zb(G#Jfg0X?H11$gH zwt>;HoU+!_nq#A=276BZtdtUv;p>w1N@UO~STu0LqJe_F-bE}4Yn-uaz_W*%>+iL2 zV>_?b-sCKj_w z70kfPFTXr^DrND_srQb`b!u)TQiWq0+>}xZ_Sz?gnAy`z32B9msr-gzKFg-SqE;;> z50zr%rokAUp~!7w0f-8h*i@B*Z#2=62-Hc{1LY2HORmr0lbYhdCZn}B6b+4v(}$?M zl0zz?6mpx?q#V(Pfi>4mm0@a$$O2n)nbZnq2?uNAbxEEAYgSa7lFDIsRx8K>GNbl= z*oFd6#=eiSSzD{3JfUUq{#3nS;Tp_+YI<5T+a_*A?AK4!elqDaw8dIhl)~5!&AzC> zi3}ZkZj6yMDfBQ3wspNw-X!DU!-wEbc=z3R@wKmg%^R>sg=JEUdE|CklO|5=tifZ0 zfFqMo4tiA^PjixLDFqK6JizI6=?9a2-*xk?lbTeTa&mudAYjd53lSQMC-!&F-W>}) ziLA?gude!wsx6uDt^xazeZp%EUHfyU`nG4+o_)7uPSeww1&u?qnz>K+FfYlUVR>J& zE3!@5D#}RqXU)>d5tOyo^v=c{4lGUQ?4|-rI)PS8p&!f$)1k3;t~oBp>v-(A6bre$Z%$B*n`Jlmjee<-e>!6(J2tsegG!bto^qQ zL`I5mcZ|hggN}P4Oy4|TCtDW}4QjT}c~B#EQ@vzsT#fz7?t4_h$Il;;DuYgZE5yTCJxdRfwpP@#gx-J73L^}p}C5BuX97}s!rzG0t#W@IBa z2Ld9(2OG5oHFihN#h+Ju#!D&Eh*GtyrHEf$UHNmlZRemQgDMaOvvN9}{C(f|9haAv z*jtr=8+{MAZIi@%TPFhJ+8jiemzQJD;_iFDspP-)t#9M!fBxsaUN;96bHk7Q*pK1A z`mg^>JiK}^XHle#U-^|^8GCeZj{5i;f8(#?SAX?a{k!ew8!V@*I~f_**VlOU@k8`o z1u@&Ec#2zb?rmq(TCwkvkp(n#miIT=S%HZ=f&m&yZDS4Le1&}e|{xpQHBATbXWnu_M#Xs z(hSq^CV9S-KbO5_tqV_rO{0XZcCVF}buiZ(cW~WtkxrtHObeDv`CI^SI<1172`H)Y z{L=LN+n$6uM12O2t@ z6R0=rw>Lls9$peIPZ?za%A)w1o-{<4(RvMhBhUrK7_aCJ5tBdmeU+j-& z)&Kw?07*naR3ELwf8T?^3|wBE@bb$qBkSUA6K78yS4Brsbx?vZ9d~8pWS!)2A5%~0 z=9@?o0AuJ!w7e1#_7G}iwl-5rNn=9~9921{+yQiH+7e`O@5a7NUPM_6bE1OAjIEu= zAsmo`If=4D6e*0oNh4E!pENg3t=dBZx>*b@HMuuQFdylzs*j!SgzvI@? zRn@m`4d?TQ-a9TYANb)a=j4i{Z998nw%NVJN+s$jQ?un%M5RZ=LTnE_$q7*va_kL< zDMT$Llyw<=+s0mi?zM*XO&j(QWoWaeZ%S@|vgcmhK&q&(qiNNfC_TlF3RP+=u0#h7 ztV%wpD#IGSmQ>$KR9*3)J2#n=s$dy}jM};|Uac_FwZW~NENRxH2W3%9vN#2Zkg4c^ zOqAyKoR~tR^&SQ=UD#Ahg3*XgJ!=WN++~d*G`Gr9CTGr?wUo@-q)H1W2%nckv1BRs zSrs2Ph7)CQx`Prhj^MoNZ22Ieu~!tSB{zMRX%-D}FiVjV)&7&@pSVKd}jekwtj zzm12oKcY!GGq$>`;v}oG2X1+`XODZ+G-qvY=<~rWdk>?zv%pXzrkJ#6sA$S9L)F#9 zk}S@Cb&>S>G!=1IbxYCEj2P%=O?I-inV^GDZM3Uq)@|z$jwO`I#`^P9N?3|w7PMi_ z%2u~QpvE;0YdzbuqBdp{yR4;S+h+r76B})ER}jYDVGSEo45=$oImO9`XoSFl)azr< z3~5*lk*Fq}x7qc%&c~oEV;(o(OF;x;8D8ZqJXup7b;#P{AsI>V0Zki@of+WnVS}#J z^}z~zBg4N#ir5fUURooZ46m{{&r_7fIwYjI7Gxy!8u1jeKEas7fZK(gf0$H7$2=TM zjom>4tx2Q|>^{J8us~-p>AmMMXfwsBIT5T5je|YA-@@R}$a&s(jm1YA@G=zSrbJ>H zkR^GJdW9>R6&)?>coWvQ!B&_V#Vx^UG?-Pj)~x|k8{s8 z-?&`|on{#|?z`FS%@M-Nb5Gfr!6UZ;oK^WG|4y!#?JWh3t0Pca8!oF+?-X5M_2(k{ zu*A><#z0OWA7IC!uROzjtSu>_u?#ntyr5R8JCGQhS-Hczg^^1X$pE+2! zxiR*=;nXdeYDF%WsQZFMCvZQ@8G{$CUu-a$v78E0FF0= za8?(K@}G6xO1kD+7Q?6wEW<%IQ$_Ynkt!Bn!=Tzl}~0bYIe zRc~fkD)|yNsmPqHs>F&@y~vV++4&E0^Z3t^LzC5(oR`%V16`Y|Vx3*|psz`;2lglF z#EgPM$}IoPjJ@r?$ytGGDutX2@+t?Qr4($uPYSth+r&GNei1?Oc_mSTxUCI z#58w66PPJE|Hl}6t+56t1cg^0|9)23^l4%i8;J3<#^$&E{ZIy@r_|PpoFp8=!am|u zHy#j7vEsIklF=(qN~q&h&y>BQ;%xqRMx~Z15UkLwb)Oip%d+@&Fa@TCWhE-ec|mL2 z%zx9y(&=Cu79(_I!9Gka zc126;lM2|MW3^ys4SI70K^xX$D;DkWV2s~5=yL>0mj-CkYiN_)Ooz18aDQSV@^Kn@ zwTZFq zdVj1C?>t$^i3W!>Dsv)EBPt}#Vji&)lP#T6;Er`PRUm`H&|qSV@$}qfZDdhcqXcyT z52>^LWZO1>u3W`o&tXt}8uB8g1hUW2S}1&4xZkr9&hI(RTx%QTFb0!0vZ?3a3s)pt zKvcAE%OC-hvmoVVYFL=f*Bbgm;WINo$67&dF^l)q6osQva!*QmIOy4+)H&a^O%4X% z=Xf5Ry1K@g>8f6egGGB5mSq`DO3Vt<;k;pQK1i72P!OAvjJ0`mR8iRbXAP}*z;XPH z6{e*Gj7+e7oA#aZA+3~!or9P+Ua@%~bE1{ML!L>5-#L@TxA==l7`=S6E`%` z&Ak<`r(fr$*oWE&I^`agYIJAS)CGHP4PMp_m6O3Z9r?v*4x`#GzQ*y;|<*0-1wh8 zpU-&fTW{j=E*`NJcq-0^4-MOI; zA6(+`iP!X(e(9I+`lmmGo114SWyS67HNNtdui&MZUzl8G-ZZu5wa=Cbo7Tn4 zvf#XnGJD^yWw>VRMTa|d>fW&LJFc!$7z8JP7NmRyq7(LdD+Ak30s)|ej)Vk3t>t`y zgauTjf!Qk1YQxRV4c6AMtXD|s0-&ZrO1mNmB-4IeLmG_cXz}eDbeAN642F1Wti0!> zq0KV9fa1xRJ2(;0FssUUQJ%M52Y)hJJtB74+<{j#;L>qmdOnnTb9X0a?`=xB zkIM8rjB?1pU_alYB;d3Vav_ZuR0It&Kr7NxP;WLc6{LIx-~`H7NR&mKfJHd1AS524 zQu3}9soQE3U=K?@%}_;c%90JEm>E&f>sptFQ$qGE8Iab-$g14#I>aJYbRjhmHwn$+ z9j)B}dHnhX=#= z<85|+6oKZ)$)f$ZRjwcPXS^S8_IZI^&*SEnkAu(f{a+t{qxC+92T^v#(#x;Bg3AY2 z*w1HB&c4w3gMq;ow2%=C;^E%0?af)KQ{hX>WMf9F9ZaewLRPf{{BX`-bPF*u_La)u zdo{(TNbKXJ3_6L2+U=#OsRghW7)XS~X%x=L@}Gl+&g{z86k{gm{xKR7&4(l$UXX6~ zEE-KU!bn3OhiviyF<)5KI%Wmfk}a)#*!zjbVp~cXjbXKYby%~pha}#y(c9*nqTLy+ ziK9azW6D=3(-E9hNYT8ZWML9X*+^En4@=)1$|Rdc@xm-Vn>rNtr!zpc|3loIc;sHPzk@pnfO}ihl36QBSHYl6Qzksx;kgbQoVMZej@;t&0jL zDKjbB=~K33b9iW!T#r6Yg}beflnw`K@<0W-4)Pk8qN)|hyPHT|eJM$>n>HJfl&@<{ zyV7+cpN8_C0krO6U#%-DV#)q@w4!_W{_8+Sc4uzIhd zX*HBsfHX>2S!njZ^AeB@oD_Sg_f>z^-Zo`mYs1cxwhtjGf@&FqgJuj~7)x@+?1gKJH$F_g75p))CKETDc=k)8GH)Mn44hVHdthn|8K zDTOAcJji?9y`kw1R$`Qr-0D~$$<2)i?>wo3OP*`ehJvUy7Lg5UNabvcwg#&_Q*za9 zz+>tnNigmsoR5ILZEl^j_ug!6&1|ryq&6ghp){aeWmY@)zDq;b27cP05~VDAXl4o+ zir8Eo^-uQ(n}tvso7fs1u{o1?w%X@xD))KV=0;^uz9(S{+J0*9 zEqC&I&)Al-7L5AiPPkfd3Yh{kktmmtb^o=sn(l2 z1t<)b?K!dLTrN6H(-7BD-;VIn&Vpm|W@1)OyVj&#LtD5FC6ufotb_mL3U13aFcDJD zMb|M=x6UpBttFH3jFUfu3GnYHZm}IpUfo3##RRYhNZn=4rwm3yA#F-Ru{AnyG4^6M z&T675EY%PaWGQS0vIQ0E@bjdqh=804d4^Qr?lv6}aypYCw?z2IUn?TE)Fb z1s$t+*iuF*2^&@6qHcn~sD*zxt-@Zw& zUx(Bi#%r~JL02O)kTXzisP2KO&CeV}DVz^Y*)Ph(^KHlNjjSX~UQmjnxKc(UVb-oT zY#~u;f(S*?a~(YG^@8Tf?rH${srhQ>6JHm1#WJJ@?(7QvUbWtE!A``h!QTfHo{(}> zjn}?gZifx6n(Tp;OBiOb)`FytK-(LV?olD!sQ~Mekv+gzdHZPvu*&{l77!NXvmvX=z!k(hfE~;?Ae_omNYyZPS0P&ZO= zUKrknvSWz|U2D^h7hil4r_+ktZ6ANn$K20*ucqVs1z3HU-~XK`U+)XT`XG(fqw@9r zl)FbP=<_~bY~n|O(f1Xwe?f5s!d;Vv@A2cuxVX5$_0y+QqB&?*NSIR96`ZQ@EFtkd zHZJ@j#!$jdT*Tg{!_t`EH9tU4sncDUjmB~`JMeLWFKNrk89ni5m}O7TE7CMkiGSpZ z+4Ros8z>VuQy7bBQmjNqo&9rUc}9L;w8}b<>h5Z-Y-3QMhzM(dw!MOv zJ}KJvU4k2yWkJcL_dylUW%1^@gk8+(@b=$BVF~|PqR2IbM|Wk?G^y+CR$}2cGsGRI z_pg~!wR_;rcn8Np+wOg9-QRmt>BqyAg-&@hAq!!9hMp;HcNlJr7 z8Wm!O+bimUN z3K|_4aGRLt((dU#sPz3k9E_)sFJ%Jv)=}$0se5n<$aBPww}~nC#(ItWZ@j*7Pl+fB zuLb(B6x(%*O7SDhGk*T4jveXWL&azBo*mA8Sd}EC#}0SQckxV7;o?J0Zs=`pMVxk|SPT*^uqo3idDfazzVn@ga2bJglIaR$MWb+)cpMuM^EttLnsw7cnA zzhrfwK&<{r74!>E!hppJ{q9NKnWM!nuiRB_Nt(RIK=mSHP4L-d5x_oe@|9ihv>;LOgzkVkOgAeoTc>Q91 zcAty#qx}6JR!w_1v+4T?f`0>kX$q#o^a z6;p2U%9_6U|FidQzqTc5mEZUxV$QYJ-sh58d8r%KKvB5MT}@lE+BT9+yAgs%9t!)B zC#;sN77`Lhmf9AwZ2E;)+ilbKv(*ngBHj@HK!dwX(;#<2CzVCzrIO5Z+k34wBjO7` ze3yt=`<%?IE0pAvP@>9x_F0!XV@8Z`jNfP$lOin3s=`VaQ0$QA;)%AaOZ=T(SmD8; zK|vzgd8=4fs3TZi9i(wLR`*3{(ipC>0Sr!?@u0El>$O9#JmlLXT*VmG-PyeCrIxJh zC2@gL4AbG&-D29}EnL8c(zbp;RB>rp7DSDUG>b1c!fp|0y*%)hQK<)^q7Dmc5h)}b zkGCoiEA+jJi^Za3Xp9&L=PY7o(zts7utaIHx00}RUBz(|rL9~zxhgmzdemB_mLX2s z4_k@SBmhXs+0q9O>VB{XD=FVI1e(N^ieApLs?#NUj8B|b+m=zz**9h>t^K<|b52}$ zA_dfZmj9*^A|^u4XD|cjyba=lIE~NeGft-y&c_qhwBX63Cs>w*{b7~Ey`ehz|MC9JxU^`e~+)XC1?DBgHzJ+E+VhKVpu52jF-SIP1|7mcBLJlTr_gHOwu)k9`t zQz94HT<^vZjNGT1sh6Tt>| zK@k{?WtV2rT%B75bvUrHHfRrSQkG{x;nE$$tek7EUT$H}z_28L-pz3z(siCaUTK1I zw1Z{@NDox3tViRLoU@t>;KBFH{N=y%PI*74^PF+y6D<2^9fFZf_qtY?27#QGYe0+V$} zr>*wc1|K>o2~nPdHdL(^Ay!*cb76RKcAY!C2a!KekNyX0y{r>FIf=%@#ps}Q0V6_K zwq)GtG$94-v>qt=XI)ALxXN16s&aNEol-f=@XrQ*EKc~+Dq@O=Em|ttOU%Y=vI}

          i(c3S}G_s#HP=3 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 {aJt+`RG` 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 T*s=) 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�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

            H%`AJs{I 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 z%0A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

            vi$PCFNBcTGDlF8+)Q>CyLGXaBgp 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

            TA{A( z>rb;c|LHGj8LuJ}c{9ix@3w&ralfzAT=QpPwPW|~B7AB!XiSfM%@?7+VPu`tU}448 zB;u6az&4bKA#?{HGw=uwc&MZo|lSC0zF`@f|Ab%kkheFG*$_29jrhb+U_h#@nx*E{7_@z;^|9eU()$CDHhpGJAi`fa8h% zC96MFwmDo}uo2UFiYC;5QTT3Skd=<E?<_Q3*s|%E~CY64LFgHk_uo2SuQp28TW61_SW9-jBcMo$qyFu_t-4pi0Ga2jW z8oRrnYJ5yfAe?>vL5@@V1r>P&(GQbpDw=uvIfSMm=k@-KB!s_CZn>Ky76}hu7b9ij zojO{X2xDjn3z0kfYATs?Oi5^GR(1Qx!hXysH0#iA79jsDrDtB9q_FX1IsL+(G-ufi zf-twbE;&n!l6%-rSgv_>GOyZlVL>uK>fSN&xtV-UNiTs~vm5H+sw)UI^spTd@vNtw zmqm@uj&vJh12<=>fLBoppFfSThT`~duFy|db6X9ASi{AaQF~jb-=3zu5ELcUua^f# zQSq~Vzx}>fcLx%K5*;6A<(Zh8)#1&^48*$~xpuT5kJm0q6wJJ1KR{az`Q-|+XB(wh)jpqu5NuHrA&;}k@UB0Y15A>ZOBhr1w+dL(i9x8sk4J!pYk?jw zd?kP5EfO0Shs(RR#1z978>ftl|Gs(8J@C^Z%cpLauM*|9EE^hVyqxxnZ^j6sa>C(k zjmpX$Lq6DzvVnj8r@VagOUjOm`7{tDr&my*{8jl4Rm-MLe2XCQn5+5EhNTwz(N$i2 zdGZ2yO~LpNdFaW|w;L(aSi8n?NpdTe5c5B)f{{u=?^bn$eu3qk;_(Na-8S0(wo@3n zoz@1_ODtp;DSbOwkq{9gBLjzgPN8v=iWToX&pp3=@(aUbn9UphV<-JaF;E!6cd}0T za3=hqq?nPyH;*Qs85?po4-7}yfw=Zt6!gC`lhUx1xX4Ds zpU!IeK=FALd<%?vikq2)n!m;-B$Q~ROaEli$9r_QL5O@S@O!S>(!98g`38i`!pXB9 zQD4F@bVcp%Mt3816^=()CE2mAqoCOeOh51~I0D;L?cw_o4^T zS-SlmF^z{QG=_%7P7M`r(a(gvaina8A>%~9DePrD>JBRycU@Pz#5$IjcXZzMC(Dg> zUgCh8b@P63J&u%!+QYZp(DL*z+~Y?atLLah;pR!`mMNXezt?!~-eE0PZ6Z~4=V$k- zr$^grfHNfapj>{Mvmo^SA1u| zV7$Pej^7?X+QT=}m7L~IegY+FgMlxGpal} zixYR@E+^W%^G($w89h|ADH0T5q(GP9>K2Ex@}f42>D^*Ao;XGplm4)tXzefG5c)0H z*MT=paFlNLF?8~#;%ip6wX0g(xqolMQB>O8>{vCyYo2un{_Xc^*O`uY=Cu<*I($zc zNTq@{?t{)|d}1Uj?zCiG^|)Uwi7bxtOp>LMFUF<4wB1^&-OAcBN8 zxE|_6*{E#?k34kTU5G{H23^2xk=tkOdy`h*;IU~45F_vbw~YVg;g)koq+#lRtoreW6UE|kTmCusA9m)JKefDUZ>(O3=p_hi|XI2)gu|@df}6ynv<1tpq2iCRSbUTk zs*>BL^L6xVMGt}4Lq9f*%DFp8{lW^?ctPzQ4>7*>mysv=+$(SYyPg?cu_}nG?tKtz1Q_MHfKuGP|0LE2FkjwL zVWQ%Om3TDI6)j*){cCb9Noon#kpi!sDn{Ld#owLd{W{Px`h&0d_4y9!EcT1b)-@5C#~y9h zGn`v%1_*09uI zd|Uc;j`>D;&Z-*kcV(8!-_ALc`DSkwUFjJ*UZXJ6edl{&CTSV*Qe_q-hPd>&i{Rib zvrn2~+};0TtG3LulW=_5by2h+_LwdWGuFtzk*tLfZR65g;nm0~p^LuI6NQsbP`2n_ zm!F6Am=zCAt7NX7TxBhzh()+nK~{6Bl8=VG*qnhqEi28=+5^zVQi~g#@BL#lA4?$3 z9GO_Z_8uec1b;wUYNzHG|Fb2&nHB&d?Hv`}Ss!9KVY_m6s}GTdhE|Yd%pA_C#Ub)V zJBr0U@>Z+nxssB2u_^(uo{Kw;^1xrPwH&XA9Ix-1^^Ur3-Qct`gw_@`V&~mJ%IyTt zRMgtIP`TSizEg7d+L7JdG@RZs`=KfCRUh-lWNJm-yMD0FN1Vt49$_4OCBRbJTTb~# z`j}Q^%)k8dcdk_19}G^B$7lbMA?p&OIH!+&larHU;*NpS_*Xu=Qtai4fQ**KKur7G z%uySk*JadtZw7Ih51S-lMeM+;)kudpWb-4y4~!#K%v? z+ur8cv9^9EZLBCq7e&pey-Sz|DQ}CjsJ@L38-`ou6AQ!-oJl z`%J(h0wCQCE;}^&wM0ywZf?5?um#K>idjkFdHu=B&c++EeDZBU=HV*=u9POV!!Y28 z#Sfx?52N=x5n^4G*rE^b&N@#x{;V`HLf8moXbJ>!&bnVbz^{+kR`ip1T9+?}q>~ z3-<&EwVA1@A!?`#x!sw3cOZ3$Q0))}wcFk$*f8gw?B#E9)g^`zg28d|t$ z6$#aMp~?a_jmR~Z^ap-5dUY=%D>N%}cWe-c%RchK0YvRyLl;4hZHVppT<7Il{N<_J zyD8hWoYo+TN6P*DU{U|_B|$`+wYrnPE}obz5O}{H;moaPDM*h?cina4H@0C~x%2DQ z*^i^7>^5Uh3c#wf^OpPM;uA4>Q`@~=Qi_^amDbZm!v@l(oMB8C(dvE6_<8Wy$G;@m z5)Jmv({8mrkR=WPV&${weOp0^D@2@A+WjK;Q?u!BQL}^!2?@KH6yvKaML^MLZrtLv zD_^9`#D_FBnuS0M4LI=C?AvG%TDNyc4O+PZg3@F$)bdA;PH$alV6oYwfRBR-W zs?94_;#hpkn-y;+ZNL#PbJF|ZBPiY1$;lovc3t`8nSmvmM8)DL z&~0=+6BU_2Ux8U}(hN^HSiyNKT)mYD=u?n|L#C&oLkeEpbR|qjRXID|KEA z-S*fY4``D`*LZxvl#XD^b+#z;JGcP%QyW#J2CwUb zKVICSKxOb~Maz7cTC8#05_8Lv;Q_ej@q-#KI9O+cZm2=Gw;9m(3LkYiC4D6yW)gDpkp zZydmenVh`g1aI_{Z(JbP7TS{X@+mdcR01HG|C9%cA#>062Vh~lHj za#~CW1QBw6f>t|_Qi?)_3q61rgeDnUn!K%LIeGt_ld$LdzTg}Ukz~QGAW?LjO(FXz z$(4nacX%=aAaod|h+3`RD}=10>4KZ-5XUYitKr#cn@6#w9|l2D<=v40TW%B{ zE`risJAMoimVsyLC3+FO0DOT#l8{3nAh&WDit`1C=$is)NY6p?4Y>0hk+>H`uX?K= zjld>b_-=v`Hr&Icl_<~bEY%`iK0C2><%8>UMZPynbaCG(5M>076?d%@VR44$r~VUe zoIzW|Xan0V!@=?Ui;xEEWZcCb;Y!7s`EP4W!`=USHq$1t`_=Up9=G~)?T04~Y5C67 zbqC_Md$u)`{(Nr&5eX1zYwNy^K;d zK8BWg0^BK~z@s=W)8Xj-1|pcoQOf-+|zM=0dIDXG_7a{e@rR?=}((Te;9eKDo|I(QmO>-Ve!JKQm+~`j~(a4#p&k{!a@71teE5YeE{>0%iHVclud~8#EYTB|^M6?Y zbXxg;-&|+$$nzXO8b<)0A!y{F|DRojU)wEy>bC188*J zkOpoFEWLQ&4IgdBtGmpfWFrg@6Rn*G0$IldUqgG#go3>PD5A8iOD25Y7&}YOK{Z}W1)%jE=B-g3MygJ4=#_0EZTg}SNv zPribG7Y$m^L~!Uoe<&|oPLt-T;_5xSouzme(MntTE5%{%W3N$%lku9JzN5hzn}fZ5 zOWh{yo7s481NFRX4u;Y#--6usN(Z*Oihr|V^m8M%&+CLR#OZc*iIVTY#Q518{7DPd1t==GMmZH?ripXZk%(S zm-XEAq0#JQv`OKw6Us*P$~{@muidE7ix$C87WXz85gvbOJrr4z;a> zmOdbq@+!XYP#qw@i_j)bLe0305vT+)j|3WGGDlBxAzK9RZ2AJ!ii7j&0`MQAV|ES> zWKi_^bJux))1qGFho|w=SAv0|A#tnDbAn7Yv56hAvBuz+O0;Nlsw$|%g5<$JOY=7K ztO1AH)UnCQ$r#$oj^bj@N^aXs6mn0R=*i(-rgF0etT;_`tsa)*6&yEu#n~hKUaY_B zt3|}Y%~KCj{%|7+3rE!G7U>Nl8e80%23O$l?O$f3;D`@9T;({`1ja<~>9mb$E1r(j z1!?@6%kZcnXURwWZ+7dj_ZgVMhAwv9HGK#Z>g(&Oadm3%Ek4Yej$Y-NG*3AHI2(Dk zi#ChS3gshU7UG^*2kT)h7D$+mbdT}p7p0>tjEwiB&;){--T%}QG$r+GIcFtXHREWL zur5e#QbhB_zuQKQhNwiI88t-FnAz)7$YDAA`WP9JI3n$L0b|QK=jf09oDt$LDQe|t z${A_}palW4yELpWff^Y&(@y-EU|xL)VPHOl6x!sW3tC>6k@^EbcuDO0L+qiMvxy1x z5LU0Kkk=@!0Z6g2my$K=qttN-uRGU zA3$7GpI8xjE*LP5Y+eJK1=v{rCrZ7`2=$MFfy#tfB(O`~Hev9@4k;k|5LowWMKXB* zlaZv_)|~dhxI0_Vtg)4b6}S-*NJ<{Q#;W}f3HYCi+;ihPXJL~Nh*1muN@#Pbdi$27 z)OU1b5M^C)|A)c%aU6IK3Evxu(eJIBp^jfZq}CteZs4Qdo-0$X$`XE70hj_WAOBJx zZYPo&fhT@lz|{o&S=aN~c6cx=$8>I?a8hpTzv9f_$M+Vos`inUyAChhU#Fohn#_WW z@f}CGXLND*8l0z+GL7-sJEt;lxJydRiBWz8P(zgO#8FvQ>7el07pUg0KLt*0-}o#~ zR_Lk@ZOlRyb>tK#?YMC0FD_v|>VzjV`v}b=l6L*JitjS@kei;It7eF96YzLXel9BU zbwrp8ih>uaK;G77LwU4a9yiJTmy=1aas2P6TFhFwyA!_giXPD+FMqh$

            exE`+tZ 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 Y1Dtzi5D12j$N&HU07*qoM6N<$f}J6`xBvhE literal 0 HcmV?d00001 diff --git a/src/ui/input.rs b/src/ui/input.rs index 09a0733..f94f6eb 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -596,6 +596,7 @@ fn close_input_profile_window( renderer: *mut sdl3_sys::render::SDL_Renderer, text_engine: *mut sdl3_ttf_sys::ttf::TTF_TextEngine, font: *mut sdl3_ttf_sys::ttf::TTF_Font, + texture: *mut sdl3_sys::render::SDL_Texture, window: *mut sdl3_sys::video::SDL_Window, ) { for joystick in open_joysticks { @@ -606,6 +607,7 @@ fn close_input_profile_window( } unsafe { + sdl3_sys::render::SDL_DestroyTexture(texture); sdl3_ttf_sys::ttf::TTF_CloseFont(font); sdl3_ttf_sys::ttf::TTF_DestroyRendererTextEngine(text_engine); sdl3_sys::render::SDL_DestroyRenderer(renderer); @@ -726,6 +728,15 @@ pub fn configure_input_profile( initial_state: 0, }; + let image_bytes = include_bytes!("../../data/controller.png"); + let image = unsafe { + sdl3_image_sys::image::IMG_LoadPNG_IO(sdl3_sys::everything::SDL_IOFromConstMem( + image_bytes.as_ptr() as *const std::ffi::c_void, + image_bytes.len(), + )) + }; + let image_texture = unsafe { sdl3_sys::render::SDL_CreateTextureFromSurface(renderer, image) }; + unsafe { sdl3_sys::surface::SDL_DestroySurface(image) }; let text_engine = unsafe { sdl3_ttf_sys::ttf::TTF_CreateRendererTextEngine(renderer) }; let font = unsafe { let font_bytes = include_bytes!("../../data/RobotoMono-Regular.ttf"); @@ -753,6 +764,7 @@ pub fn configure_input_profile( ui::video::draw_text( format!("Select binding for: {key}").as_str(), renderer, + image_texture, text_engine, font, ); @@ -765,6 +777,7 @@ pub fn configure_input_profile( renderer, text_engine, font, + image_texture, window, ); return; @@ -869,7 +882,13 @@ pub fn configure_input_profile( } } } - ui::video::draw_text("Binding set, please wait...", renderer, text_engine, font); + ui::video::draw_text( + "Binding set, please wait...", + renderer, + image_texture, + text_engine, + font, + ); std::thread::sleep(std::time::Duration::from_millis(500)); } @@ -879,6 +898,7 @@ pub fn configure_input_profile( renderer, text_engine, font, + image_texture, window, ); diff --git a/src/ui/video.rs b/src/ui/video.rs index 165ec6b..2da072f 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -261,6 +261,7 @@ pub fn onscreen_message(message: &str, milliseconds: MESSAGE_LENGTH) { pub fn draw_text( text: &str, renderer: *mut sdl3_sys::render::SDL_Renderer, + image_texture: *mut sdl3_sys::render::SDL_Texture, text_engine: *mut sdl3_ttf_sys::ttf::TTF_TextEngine, font: *mut sdl3_ttf_sys::ttf::TTF_Font, ) { @@ -272,7 +273,18 @@ pub fn draw_text( let ttf_text = sdl3_ttf_sys::ttf::TTF_CreateText(text_engine, font, c_text.as_ptr(), 0); sdl3_sys::everything::SDL_RenderClear(renderer); - sdl3_ttf_sys::ttf::TTF_DrawRendererText(ttf_text, 20.0, h as f32 / 2.0); + let rect = sdl3_sys::rect::SDL_FRect { + x: 0.0, + y: 0.0, + w: w as f32, + h: (h - sdl3_ttf_sys::ttf::TTF_GetFontHeight(font)) as f32, + }; + sdl3_sys::render::SDL_RenderTexture(renderer, image_texture, std::ptr::null(), &rect); + sdl3_ttf_sys::ttf::TTF_DrawRendererText( + ttf_text, + 20.0, + (h - sdl3_ttf_sys::ttf::TTF_GetFontHeight(font)) as f32, + ); sdl3_sys::render::SDL_RenderPresent(renderer); sdl3_ttf_sys::ttf::TTF_DestroyText(ttf_text); } From df5fcae69b57933d6db4313b1dfa5fa10d1a6b41 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 17 May 2026 17:26:13 +0200 Subject: [PATCH 0895/1117] Remove Android SDK setup from build.yml (#905) --- .github/workflows/build.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b0e3e27..134e308 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -266,10 +266,6 @@ jobs: target: ${{ matrix.target }} rustflags: "" cache: ${{ github.ref_type != 'tag' }} - - name: Setup Android SDK - uses: android-actions/setup-android@v4 - with: - packages: build-tools;37.0.0 platforms;android-35 - name: Build run: | cargo install cargo-apk cargo-ndk From 8daa65d93e5e5adf6097ca429cb6cc808a310200 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 17 May 2026 18:14:48 +0200 Subject: [PATCH 0896/1117] only use --release for tags (#906) * only use --release for tags * more * more * more --- .github/workflows/build.yml | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 134e308..67d33a2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,6 +14,8 @@ on: env: CARGO_TERM_COLOR: always RA_HARDCORE: ${{ github.ref_type == 'tag' && 'true' || 'false' }} + BUILD_PROFILE: ${{ github.ref_type == 'tag' && 'release' || 'dev' }} + BUILD_DIR: ${{ github.ref_type == 'tag' && 'release' || 'debug' }} jobs: build-linux: @@ -67,9 +69,9 @@ jobs: matrix.llvm }}.tar.xz - name: Build run: | - cargo build --release -v --target=${{ matrix.target }} + cargo build --profile ${{ env.BUILD_PROFILE }} -v --target=${{ matrix.target }} mkdir output - cp target/${{ matrix.target }}/release/gopher64 output/gopher64-${{ matrix.arch }} + cp target/${{ matrix.target }}/${{ env.BUILD_DIR }}/gopher64 output/gopher64-${{ matrix.arch }} env: NETPLAY_ID: ${{ secrets.NETPLAY_ID }} - name: Upload file @@ -126,9 +128,9 @@ jobs: }}.exe - name: Build run: | - cargo build --release -v --target=${{ matrix.target }} + cargo build --profile ${{ env.BUILD_PROFILE }} -v --target=${{ matrix.target }} mkdir output - cp target/${{ matrix.target }}/release/gopher64.exe output/gopher64-${{ matrix.arch }}.exe + cp target/${{ matrix.target }}/${{ env.BUILD_DIR }}/gopher64.exe output/gopher64-${{ matrix.arch }}.exe env: CC: clang-cl CXX: clang-cl @@ -207,17 +209,17 @@ jobs: run: | cargo install cargo-bundle brew install molten-vk - cargo build --release --no-default-features -v --target=${{ matrix.target }} - mv target/${{ matrix.target }}/release/gopher64 target/${{ matrix.target }}/release/gopher64-cli - cargo bundle --release --target=${{ matrix.target }} --format osx - cp target/${{ matrix.target }}/release/gopher64-cli target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/MacOS/gopher64-cli + cargo build --profile ${{ env.BUILD_PROFILE }} --no-default-features -v --target=${{ matrix.target }} + mv target/${{ matrix.target }}/${{ env.BUILD_DIR }}/gopher64 target/${{ matrix.target }}/${{ env.BUILD_DIR }}/gopher64-cli + cargo bundle --profile ${{ env.BUILD_PROFILE }} --target=${{ matrix.target }} --format osx + cp target/${{ matrix.target }}/${{ env.BUILD_DIR }}/gopher64-cli target/${{ matrix.target }}/${{ env.BUILD_DIR }}/bundle/osx/Gopher64.app/Contents/MacOS/gopher64-cli env: NETPLAY_ID: ${{ secrets.NETPLAY_ID }} MACOSX_DEPLOYMENT_TARGET: "15.0" - name: Sign Bundle Dev if: ${{ github.ref_type != 'tag' }} run: | - codesign -f --entitlements data/macos/entitlements_dev.plist --deep --timestamp --options runtime -s - target/${{ matrix.target }}/release/bundle/osx/Gopher64.app + codesign -f --entitlements data/macos/entitlements_dev.plist --deep --timestamp --options runtime -s - target/${{ matrix.target }}/${{ env.BUILD_DIR }}/bundle/osx/Gopher64.app - name: Import Codesign Certs if: ${{ github.ref_type == 'tag' }} uses: apple-actions/import-codesign-certs@v7 @@ -227,24 +229,24 @@ jobs: - name: Sign Bundle Release if: ${{ github.ref_type == 'tag' }} run: | - codesign -f --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/Frameworks/libMoltenVK.dylib - codesign -f --entitlements data/macos/entitlements_child.plist --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/MacOS/gopher64-cli - codesign -f --entitlements data/macos/entitlements_prod.plist --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app - zip -r gopher64-${{ matrix.arch }}.zip target/${{ matrix.target }}/release/bundle/osx/Gopher64.app + codesign -f --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/${{ env.BUILD_DIR }}/bundle/osx/Gopher64.app/Contents/Frameworks/libMoltenVK.dylib + codesign -f --entitlements data/macos/entitlements_child.plist --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/${{ env.BUILD_DIR }}/bundle/osx/Gopher64.app/Contents/MacOS/gopher64-cli + codesign -f --entitlements data/macos/entitlements_prod.plist --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/${{ env.BUILD_DIR }}/bundle/osx/Gopher64.app + zip -r gopher64-${{ matrix.arch }}.zip target/${{ matrix.target }}/${{ env.BUILD_DIR }}/bundle/osx/Gopher64.app xcrun notarytool submit --wait --apple-id "${{ secrets.APPLE_ID }}" --team-id "${{ secrets.APPLE_DEVELOPER_ID }}" --password "${{ secrets.APPLE_APP_PASSWORD }}" gopher64-${{ matrix.arch }}.zip - xcrun stapler staple target/${{ matrix.target }}/release/bundle/osx/Gopher64.app + xcrun stapler staple target/${{ matrix.target }}/${{ env.BUILD_DIR }}/bundle/osx/Gopher64.app - name: Upload file uses: actions/upload-artifact@v7 with: name: gopher64-${{ matrix.arch }} - path: target/${{ matrix.target }}/release/bundle/osx + path: target/${{ matrix.target }}/${{ env.BUILD_DIR }}/bundle/osx - name: Setup butler if: ${{ github.ref_type == 'tag' }} uses: remarkablegames/setup-butler@v3 - name: Upload to itch.io if: ${{ github.ref_type == 'tag' }} run: | - butler push target/${{ matrix.target }}/release/bundle/osx/Gopher64.app loganmc10/gopher64:${{ matrix.arch }} --userversion ${GITHUB_REF_NAME#v} + butler push target/${{ matrix.target }}/${{ env.BUILD_DIR }}/bundle/osx/Gopher64.app loganmc10/gopher64:${{ matrix.arch }} --userversion ${GITHUB_REF_NAME#v} env: BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }} @@ -270,7 +272,7 @@ jobs: run: | cargo install cargo-apk cargo-ndk source <(cargo ndk-env --target ${{ matrix.target }}) - cargo apk build --target ${{ matrix.target }} --lib + cargo apk build --profile ${{ env.BUILD_PROFILE }} --target ${{ matrix.target }} --lib collect-artifacts: name: Collect release artifacts From 30c8aef24eb4c5ba154a2d760110539509d564ff Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 17 May 2026 18:44:21 +0200 Subject: [PATCH 0897/1117] move netplay_id (#907) --- .github/workflows/build.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 67d33a2..cea23e6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,6 +14,7 @@ on: env: CARGO_TERM_COLOR: always RA_HARDCORE: ${{ github.ref_type == 'tag' && 'true' || 'false' }} + NETPLAY_ID: ${{ github.ref_type == 'tag' && secrets.NETPLAY_ID || 'dev' }} BUILD_PROFILE: ${{ github.ref_type == 'tag' && 'release' || 'dev' }} BUILD_DIR: ${{ github.ref_type == 'tag' && 'release' || 'debug' }} @@ -72,8 +73,6 @@ jobs: cargo build --profile ${{ env.BUILD_PROFILE }} -v --target=${{ matrix.target }} mkdir output cp target/${{ matrix.target }}/${{ env.BUILD_DIR }}/gopher64 output/gopher64-${{ matrix.arch }} - env: - NETPLAY_ID: ${{ secrets.NETPLAY_ID }} - name: Upload file uses: actions/upload-artifact@v7 with: @@ -134,7 +133,6 @@ jobs: env: CC: clang-cl CXX: clang-cl - NETPLAY_ID: ${{ secrets.NETPLAY_ID }} - name: Upload unsigned artifact id: upload-unsigned-artifact uses: actions/upload-artifact@v7 @@ -214,7 +212,6 @@ jobs: cargo bundle --profile ${{ env.BUILD_PROFILE }} --target=${{ matrix.target }} --format osx cp target/${{ matrix.target }}/${{ env.BUILD_DIR }}/gopher64-cli target/${{ matrix.target }}/${{ env.BUILD_DIR }}/bundle/osx/Gopher64.app/Contents/MacOS/gopher64-cli env: - NETPLAY_ID: ${{ secrets.NETPLAY_ID }} MACOSX_DEPLOYMENT_TARGET: "15.0" - name: Sign Bundle Dev if: ${{ github.ref_type != 'tag' }} From 1538513fb77feacf8af3f08e506f602013104cca Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 17 May 2026 20:07:57 +0200 Subject: [PATCH 0898/1117] add apk icon (#908) * add apk icon * more * more * more * more --- Cargo.toml | 4 ++++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 +++++ .../res/mipmap-hdpi/ic_launcher_foreground.webp | Bin 0 -> 9630 bytes .../res/mipmap-mdpi/ic_launcher_foreground.webp | Bin 0 -> 5588 bytes .../mipmap-xhdpi/ic_launcher_foreground.webp | Bin 0 -> 14522 bytes .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin 0 -> 27264 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.webp | Bin 0 -> 47862 bytes .../res/values/ic_launcher_background.xml | 4 ++++ 8 files changed, 13 insertions(+) create mode 100644 data/android/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 data/android/res/mipmap-hdpi/ic_launcher_foreground.webp create mode 100644 data/android/res/mipmap-mdpi/ic_launcher_foreground.webp create mode 100644 data/android/res/mipmap-xhdpi/ic_launcher_foreground.webp create mode 100644 data/android/res/mipmap-xxhdpi/ic_launcher_foreground.webp create mode 100644 data/android/res/mipmap-xxxhdpi/ic_launcher_foreground.webp create mode 100644 data/android/res/values/ic_launcher_background.xml diff --git a/Cargo.toml b/Cargo.toml index 5e6ceb7..ad9eb90 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -76,6 +76,10 @@ osx_minimum_system_version = "15.0" package = "io.github.gopher64.gopher64" build_targets = ["aarch64-linux-android"] apk_name = "Gopher64" +resources = "data/android/res" + +[package.metadata.android.application] +icon = "@mipmap/ic_launcher" [package.metadata.android.sdk] min_sdk_version = 34 diff --git a/data/android/res/mipmap-anydpi-v26/ic_launcher.xml b/data/android/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..80b730f --- /dev/null +++ b/data/android/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/data/android/res/mipmap-hdpi/ic_launcher_foreground.webp b/data/android/res/mipmap-hdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..d920d3a6dbbbf544ca66638b4d524b9d31a9a070 GIT binary patch literal 9630 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 Upf$Oc*`D(WvVpvJ|GyWg0a(AK*#H0l literal 0 HcmV?d00001 diff --git a/data/android/res/mipmap-mdpi/ic_launcher_foreground.webp b/data/android/res/mipmap-mdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..ebc2f8f11f0cf1c0263d6e10ba234f00ecc069cb GIT binary patch literal 5588 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 literal 0 HcmV?d00001 diff --git a/data/android/res/mipmap-xhdpi/ic_launcher_foreground.webp b/data/android/res/mipmap-xhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..23dc9fd8a6de40e40873f5875182be842c277676 GIT binary patch literal 14522 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 literal 0 HcmV?d00001 diff --git a/data/android/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/data/android/res/mipmap-xxxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..8ee32689666ce6ff2e88ff1e28f9464d0197572c GIT binary patch literal 47862 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 + + #419567 + From 8dde32cb212b855a83b81dfbba489c3bd31e1f25 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 17 May 2026 21:53:10 +0200 Subject: [PATCH 0899/1117] fix label (#909) --- Cargo.toml | 2 +- src/lib.rs | 8 +------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index ad9eb90..49e130a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -75,11 +75,11 @@ osx_minimum_system_version = "15.0" [package.metadata.android] package = "io.github.gopher64.gopher64" build_targets = ["aarch64-linux-android"] -apk_name = "Gopher64" resources = "data/android/res" [package.metadata.android.application] icon = "@mipmap/ic_launcher" +label = "Gopher64" [package.metadata.android.sdk] min_sdk_version = 34 diff --git a/src/lib.rs b/src/lib.rs index 61213b0..54a19eb 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -320,11 +320,5 @@ pub async fn run() -> std::io::Result<()> { fn android_main(app: slint::android::AndroidApp) { slint::android::init(app).unwrap(); - // ... rest of your code ... - slint::slint! { - export component MainWindow inherits Window { - Text { text: "Hello World"; } - } - } - MainWindow::new().unwrap().run().unwrap(); + ui::gui::app_window(); } From a78393ca918d4335a4c70b7799e29b6534e72dc1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 18 May 2026 17:08:01 +0200 Subject: [PATCH 0900/1117] More basic Android stuff (#910) * enable tokio * data dirs * jni pointer * more * more * more * more * more * more * more * more --- .github/workflows/build.yml | 4 ++-- Cargo.toml | 14 +++++++++++++- src/lib.rs | 14 ++++++++++++-- src/ui.rs | 18 ++++++++++++++++++ src/ui/gui.rs | 4 ++++ src/ui/input.rs | 1 + 6 files changed, 50 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cea23e6..151c0f4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -267,9 +267,9 @@ jobs: cache: ${{ github.ref_type != 'tag' }} - name: Build run: | - cargo install cargo-apk cargo-ndk + cargo install cargo-apk2 cargo-ndk source <(cargo ndk-env --target ${{ matrix.target }}) - cargo apk build --profile ${{ env.BUILD_PROFILE }} --target ${{ matrix.target }} --lib + cargo apk2 build --profile ${{ env.BUILD_PROFILE }} --target ${{ matrix.target }} --lib collect-artifacts: name: Collect release artifacts diff --git a/Cargo.toml b/Cargo.toml index 49e130a..e256b78 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,6 @@ gui = ["dep:rfd", "dep:slint", "dep:slint-build"] crate-type = ["cdylib", "rlib"] [dependencies] -dirs = "6.0" zip = "8.0" sevenz-rust2 = "0.21" chrono = "0.4" @@ -43,6 +42,7 @@ discord-rich-presence = "1.1" [target.'cfg(not(target_os = "android"))'.dependencies] slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "unstable-winit-030", "backend-winit", "renderer-femtovg-wgpu", "accessibility"], optional = true } rfd = {version = "0.17", optional = true } +dirs = "6.0" [target.'cfg(target_os = "android")'.dependencies] slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "backend-android-activity-06", "accessibility"], optional = true } @@ -73,10 +73,22 @@ osx_frameworks = ["/opt/homebrew/opt/molten-vk/lib/libMoltenVK.dylib"] osx_minimum_system_version = "15.0" [package.metadata.android] +use_aapt2 = true package = "io.github.gopher64.gopher64" build_targets = ["aarch64-linux-android"] resources = "data/android/res" +[[package.metadata.android.application.activity]] +name = "android.app.NativeActivity" + +[[package.metadata.android.application.activity.intent_filter]] +actions = ["android.intent.action.MAIN"] +categories = ["android.intent.category.LAUNCHER"] + +[[package.metadata.android.application.activity.meta_data]] +name = "android.app.lib_name" +value = "gopher64" + [package.metadata.android.application] icon = "@mipmap/ic_launcher" label = "Gopher64" diff --git a/src/lib.rs b/src/lib.rs index 54a19eb..18503de 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -317,8 +317,18 @@ pub async fn run() -> std::io::Result<()> { #[cfg(target_os = "android")] #[unsafe(no_mangle)] -fn android_main(app: slint::android::AndroidApp) { - slint::android::init(app).unwrap(); +#[tokio::main(worker_threads = 4)] +async fn android_main(app: slint::android::AndroidApp) { + slint::android::init(app.clone()).unwrap(); + + ui::ANDROID_APP.set(app).unwrap(); + + let dirs = ui::get_dirs(); + + std::fs::create_dir_all(dirs.config_dir).unwrap(); + std::fs::create_dir_all(dirs.cache_dir).unwrap(); + std::fs::create_dir_all(dirs.data_dir.join("saves")).unwrap(); + std::fs::create_dir_all(dirs.data_dir.join("states")).unwrap(); ui::gui::app_window(); } diff --git a/src/ui.rs b/src/ui.rs index 4d8992a..b191a1b 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -15,6 +15,10 @@ pub mod video; #[cfg(feature = "gui")] pub mod vru; +#[cfg(target_os = "android")] +pub static ANDROID_APP: std::sync::OnceLock = + std::sync::OnceLock::new(); + pub static WEB_CLIENT: std::sync::LazyLock = std::sync::LazyLock::new(|| { reqwest::Client::builder() .user_agent(format!( @@ -125,6 +129,7 @@ pub fn sdl_close() { } } +#[cfg(not(target_os = "android"))] pub fn get_dirs() -> Dirs { let exe_path = std::env::current_exe().unwrap(); let portable_dir = exe_path.parent(); @@ -144,6 +149,19 @@ pub fn get_dirs() -> Dirs { } } +#[cfg(target_os = "android")] +pub fn get_dirs() -> Dirs { + if let Some(android_app) = ANDROID_APP.get() { + Dirs { + config_dir: android_app.internal_data_path().unwrap().join("config"), + data_dir: android_app.external_data_path().unwrap().join("data"), + cache_dir: android_app.internal_data_path().unwrap().join("cache"), + } + } else { + panic!("Android app not initialized"); + } +} + impl Ui { pub fn new() -> Ui { let dirs = get_dirs(); diff --git a/src/ui/gui.rs b/src/ui/gui.rs index ec2b34a..07f1d01 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -152,6 +152,7 @@ fn local_game_window(app: &AppWindow, config: &ui::config::Config) { file_dropped(app); } +#[cfg(not(target_os = "android"))] fn input_profiles(config: &ui::config::Config) -> Vec { let mut profiles = vec![]; for key in config.input.input_profiles.keys() { @@ -190,6 +191,7 @@ fn settings_window(app: &AppWindow, config: &ui::config::Config) { } } +#[cfg(not(target_os = "android"))] fn update_input_profiles(weak: &slint::Weak, config: &ui::config::Config) { let profiles = input_profiles(config); let config_bindings = config.input.input_profile_binding.clone(); @@ -235,6 +237,7 @@ fn clear_gb_paths(weak: &slint::Weak, player: i32) { .unwrap(); } +#[cfg(not(target_os = "android"))] fn controller_window(app: &AppWindow, config: &ui::config::Config) { ui::sdl_init(sdl3_sys::init::SDL_INIT_GAMEPAD); @@ -533,6 +536,7 @@ pub fn app_window() { { let config = ui::config::Config::new(); settings_window(&app, &config); + #[cfg(not(target_os = "android"))] controller_window(&app, &config); local_game_window(&app, &config); } diff --git a/src/ui/input.rs b/src/ui/input.rs index f94f6eb..76a0fd5 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -359,6 +359,7 @@ pub fn get_controller_names() -> Vec { controllers } +#[cfg(not(target_os = "android"))] #[cfg(feature = "gui")] pub fn get_controller_paths() -> Vec { let mut controller_paths: Vec = vec![]; From 41e66825d0d7bf3e0cb5a92f71bf9ac46ec69a37 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 19 May 2026 08:50:00 +0200 Subject: [PATCH 0901/1117] Update UI (#911) * rework UI * more * more * more --- build.rs | 1 + data/translations/de/LC_MESSAGES/gopher64.po | 104 +++---- data/translations/es/LC_MESSAGES/gopher64.po | 104 +++---- data/translations/fr/LC_MESSAGES/gopher64.po | 104 +++---- data/translations/gopher64.pot | 92 +++---- data/translations/ja/LC_MESSAGES/gopher64.po | 104 +++---- data/translations/nl/LC_MESSAGES/gopher64.po | 104 +++---- .../pt_BR/LC_MESSAGES/gopher64.po | 104 +++---- data/translations/ru/LC_MESSAGES/gopher64.po | 104 +++---- data/{ => ui}/RobotoMono-Regular.ttf | Bin data/{ => ui}/controller.png | Bin data/ui/icons/about.svg | 1 + data/ui/icons/achievements.svg | 1 + data/ui/icons/cheats.svg | 1 + data/ui/icons/controller.svg | 1 + data/ui/icons/local_game.svg | 1 + data/ui/icons/netplay.svg | 1 + data/ui/icons/settings.svg | 1 + src/ui/gui/appwindow.slint | 87 ++++-- src/ui/gui/controller_page.slint | 249 ++++++++++------- src/ui/gui/page.slint | 14 +- src/ui/gui/settings_page.slint | 12 + src/ui/gui/side_bar.slint | 258 +++++++++++------- src/ui/input.rs | 4 +- src/ui/video.rs | 2 +- 25 files changed, 856 insertions(+), 598 deletions(-) rename data/{ => ui}/RobotoMono-Regular.ttf (100%) rename data/{ => ui}/controller.png (100%) create mode 100644 data/ui/icons/about.svg create mode 100644 data/ui/icons/achievements.svg create mode 100644 data/ui/icons/cheats.svg create mode 100644 data/ui/icons/controller.svg create mode 100644 data/ui/icons/local_game.svg create mode 100644 data/ui/icons/netplay.svg create mode 100644 data/ui/icons/settings.svg diff --git a/build.rs b/build.rs index 550847d..4a15829 100644 --- a/build.rs +++ b/build.rs @@ -3,6 +3,7 @@ fn main() { println!("cargo::rerun-if-changed=retroachievements"); println!("cargo::rerun-if-changed=src/compat"); println!("cargo::rerun-if-changed=data/translations"); + println!("cargo::rerun-if-changed=data/ui"); #[cfg(feature = "gui")] { diff --git a/data/translations/de/LC_MESSAGES/gopher64.po b/data/translations/de/LC_MESSAGES/gopher64.po index d164013..4b5435c 100644 --- a/data/translations/de/LC_MESSAGES/gopher64.po +++ b/data/translations/de/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-14 14:53+0000\n" +"POT-Creation-Date: 2026-05-19 06:44+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: German\n" @@ -47,42 +47,42 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Spenden (über GitHub)" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:103 msgctxt "Menu" msgid "Local Game" msgstr "Lokales Spiel" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:107 msgctxt "Menu" msgid "Controller Config" msgstr "Controller-Konfiguration" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:111 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:115 msgctxt "Menu" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:119 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:123 msgctxt "Menu" msgid "Settings" msgstr "Einstellungen" -#: src/ui/gui/appwindow.slint:101 +#: src/ui/gui/appwindow.slint:127 msgctxt "Menu" msgid "About" msgstr "Über" -#: src/ui/gui/appwindow.slint:195 +#: src/ui/gui/appwindow.slint:248 msgctxt "ErrorDialog" msgid "Error" msgstr "Fehler" @@ -107,45 +107,40 @@ msgctxt "Cheats" msgid "No Cheats Available" msgstr "Keine Cheats verfügbar" -#: src/ui/gui/controller_page.slint:26 +#: src/ui/gui/controller_page.slint:80 +msgctxt "ControllerSettingsGrid" +msgid "Enabled" +msgstr "Aktiviert" + +#: src/ui/gui/controller_page.slint:93 +msgctxt "ControllerSettingsGrid" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:107 +msgctxt "ControllerSettingsGrid" +msgid "Profile" +msgstr "Profil" + +#: src/ui/gui/controller_page.slint:157 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Controller-Konfiguration" -#: src/ui/gui/controller_page.slint:37 +#: src/ui/gui/controller_page.slint:168 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Eingabeprofil konfigurieren" -#: src/ui/gui/controller_page.slint:49 +#: src/ui/gui/controller_page.slint:176 msgctxt "ControllerConfig" -msgid "Port" -msgstr "Port" +msgid "Controller Settings" +msgstr "Controller-Einstellungen" -#: src/ui/gui/controller_page.slint:60 +#: src/ui/gui/controller_page.slint:186 msgctxt "ControllerConfig" -msgid "Enabled" -msgstr "Aktiviert" - -#: src/ui/gui/controller_page.slint:73 -msgctxt "ControllerConfig" -msgid "Emulate VRU" -msgstr "VRU emulieren" - -#: src/ui/gui/controller_page.slint:87 -msgctxt "ControllerConfig" -msgid "Transfer Pak" -msgstr "Transfer Pak" - -#: src/ui/gui/controller_page.slint:101 -msgctxt "ControllerConfig" -msgid "Profile" -msgstr "Profil" - -#: src/ui/gui/controller_page.slint:117 -msgctxt "ControllerConfig" -msgid "Controller" -msgstr "Controller" +msgid "Controller Assignment" +msgstr "Controller-Zuweisung" #: src/ui/gui/input_profile.slint:10 msgctxt "InputProfileDialog" @@ -486,62 +481,75 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Unterstützte Spiele anzeigen" -#: src/ui/gui/settings_page.slint:22 +#: src/ui/gui/settings_page.slint:23 msgctxt "Settings" msgid "Settings" msgstr "Einstellungen" -#: src/ui/gui/settings_page.slint:29 +#: src/ui/gui/settings_page.slint:30 msgctxt "Settings" msgid "Resolution:" msgstr "Auflösung:" -#: src/ui/gui/settings_page.slint:45 +#: src/ui/gui/settings_page.slint:46 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAA-Herunterskalierung" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "Pixelgenaue Skalierung" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:68 msgctxt "Settings" msgid "Fullscreen" msgstr "Vollbild" -#: src/ui/gui/settings_page.slint:78 +#: src/ui/gui/settings_page.slint:79 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "16:9 (gestreckt)" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "VSync" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Apply CRT shader" msgstr "CRT-Shader anwenden" -#: src/ui/gui/settings_page.slint:115 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "N64-CPU übertakten (kann Fehler verursachen)" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Expansion Pak deaktivieren" -#: src/ui/gui/settings_page.slint:137 +#: src/ui/gui/settings_page.slint:138 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "UNFLoader emulieren" +#: src/ui/gui/settings_page.slint:149 +msgctxt "Settings" +msgid "Emulate VRU" +msgstr "VRU emulieren" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "Was möchten Sie sagen?" + +#~ msgctxt "ControllerConfig" +#~ msgid "Port" +#~ msgstr "Port" + +#~ msgctxt "ControllerConfig" +#~ msgid "Controller" +#~ msgstr "Controller" diff --git a/data/translations/es/LC_MESSAGES/gopher64.po b/data/translations/es/LC_MESSAGES/gopher64.po index a862e46..5d8cef6 100644 --- a/data/translations/es/LC_MESSAGES/gopher64.po +++ b/data/translations/es/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-14 14:53+0000\n" +"POT-Creation-Date: 2026-05-19 06:44+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: Gemini\n" "Language-Team: Spanish (Spain)\n" @@ -47,42 +47,42 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Donar (a través de GitHub)" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:103 msgctxt "Menu" msgid "Local Game" msgstr "Juego local" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:107 msgctxt "Menu" msgid "Controller Config" msgstr "Config. del mando" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:111 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:115 msgctxt "Menu" msgid "Cheats" msgstr "Trucos" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:119 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:123 msgctxt "Menu" msgid "Settings" msgstr "Ajustes" -#: src/ui/gui/appwindow.slint:101 +#: src/ui/gui/appwindow.slint:127 msgctxt "Menu" msgid "About" msgstr "Acerca de" -#: src/ui/gui/appwindow.slint:195 +#: src/ui/gui/appwindow.slint:248 msgctxt "ErrorDialog" msgid "Error" msgstr "Error" @@ -107,45 +107,40 @@ msgctxt "Cheats" msgid "No Cheats Available" msgstr "No hay trucos disponibles" -#: src/ui/gui/controller_page.slint:26 +#: src/ui/gui/controller_page.slint:80 +msgctxt "ControllerSettingsGrid" +msgid "Enabled" +msgstr "Activado" + +#: src/ui/gui/controller_page.slint:93 +msgctxt "ControllerSettingsGrid" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:107 +msgctxt "ControllerSettingsGrid" +msgid "Profile" +msgstr "Perfil" + +#: src/ui/gui/controller_page.slint:157 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Configuración del mando" -#: src/ui/gui/controller_page.slint:37 +#: src/ui/gui/controller_page.slint:168 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Configurar perfil de entrada" -#: src/ui/gui/controller_page.slint:49 +#: src/ui/gui/controller_page.slint:176 msgctxt "ControllerConfig" -msgid "Port" -msgstr "Puerto" +msgid "Controller Settings" +msgstr "Ajustes del mando" -#: src/ui/gui/controller_page.slint:60 +#: src/ui/gui/controller_page.slint:186 msgctxt "ControllerConfig" -msgid "Enabled" -msgstr "Activado" - -#: src/ui/gui/controller_page.slint:73 -msgctxt "ControllerConfig" -msgid "Emulate VRU" -msgstr "Emular VRU" - -#: src/ui/gui/controller_page.slint:87 -msgctxt "ControllerConfig" -msgid "Transfer Pak" -msgstr "Transfer Pak" - -#: src/ui/gui/controller_page.slint:101 -msgctxt "ControllerConfig" -msgid "Profile" -msgstr "Perfil" - -#: src/ui/gui/controller_page.slint:117 -msgctxt "ControllerConfig" -msgid "Controller" -msgstr "Mando" +msgid "Controller Assignment" +msgstr "Asignación del mando" #: src/ui/gui/input_profile.slint:10 msgctxt "InputProfileDialog" @@ -485,62 +480,75 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Ver juegos compatibles" -#: src/ui/gui/settings_page.slint:22 +#: src/ui/gui/settings_page.slint:23 msgctxt "Settings" msgid "Settings" msgstr "Ajustes" -#: src/ui/gui/settings_page.slint:29 +#: src/ui/gui/settings_page.slint:30 msgctxt "Settings" msgid "Resolution:" msgstr "Resolución:" -#: src/ui/gui/settings_page.slint:45 +#: src/ui/gui/settings_page.slint:46 msgctxt "Settings" msgid "SSAA downscaling" msgstr "Reducción de escala SSAA" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "Escalado por enteros" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:68 msgctxt "Settings" msgid "Fullscreen" msgstr "Pantalla completa" -#: src/ui/gui/settings_page.slint:78 +#: src/ui/gui/settings_page.slint:79 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Pantalla ancha (estirado)" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "Sincronización vertical (VSync)" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Aplicar sombreador CRT" -#: src/ui/gui/settings_page.slint:115 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Overclock CPU N64 (puede causar errores)" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Desactivar Expansion Pak" -#: src/ui/gui/settings_page.slint:137 +#: src/ui/gui/settings_page.slint:138 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Emular UNFLoader" +#: src/ui/gui/settings_page.slint:149 +msgctxt "Settings" +msgid "Emulate VRU" +msgstr "Emular VRU" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "¿Qué te gustaría decir?" + +#~ msgctxt "ControllerConfig" +#~ msgid "Port" +#~ msgstr "Puerto" + +#~ msgctxt "ControllerConfig" +#~ msgid "Controller" +#~ msgstr "Mando" diff --git a/data/translations/fr/LC_MESSAGES/gopher64.po b/data/translations/fr/LC_MESSAGES/gopher64.po index 71b7e0e..abec052 100644 --- a/data/translations/fr/LC_MESSAGES/gopher64.po +++ b/data/translations/fr/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-14 14:53+0000\n" +"POT-Creation-Date: 2026-05-19 06:44+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: French (France)\n" @@ -47,42 +47,42 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Faire un don (via GitHub)" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:103 msgctxt "Menu" msgid "Local Game" msgstr "Jeu local" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:107 msgctxt "Menu" msgid "Controller Config" msgstr "Configuration manette" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:111 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:115 msgctxt "Menu" msgid "Cheats" msgstr "Triche" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:119 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:123 msgctxt "Menu" msgid "Settings" msgstr "Paramètres" -#: src/ui/gui/appwindow.slint:101 +#: src/ui/gui/appwindow.slint:127 msgctxt "Menu" msgid "About" msgstr "À propos" -#: src/ui/gui/appwindow.slint:195 +#: src/ui/gui/appwindow.slint:248 msgctxt "ErrorDialog" msgid "Error" msgstr "Erreur" @@ -107,45 +107,40 @@ msgctxt "Cheats" msgid "No Cheats Available" msgstr "Aucune triche disponible" -#: src/ui/gui/controller_page.slint:26 +#: src/ui/gui/controller_page.slint:80 +msgctxt "ControllerSettingsGrid" +msgid "Enabled" +msgstr "Activé" + +#: src/ui/gui/controller_page.slint:93 +msgctxt "ControllerSettingsGrid" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:107 +msgctxt "ControllerSettingsGrid" +msgid "Profile" +msgstr "Profil" + +#: src/ui/gui/controller_page.slint:157 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Configuration de la manette" -#: src/ui/gui/controller_page.slint:37 +#: src/ui/gui/controller_page.slint:168 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Configurer le profil d'entrée" -#: src/ui/gui/controller_page.slint:49 +#: src/ui/gui/controller_page.slint:176 msgctxt "ControllerConfig" -msgid "Port" -msgstr "Port" +msgid "Controller Settings" +msgstr "Paramètres de la manette" -#: src/ui/gui/controller_page.slint:60 +#: src/ui/gui/controller_page.slint:186 msgctxt "ControllerConfig" -msgid "Enabled" -msgstr "Activé" - -#: src/ui/gui/controller_page.slint:73 -msgctxt "ControllerConfig" -msgid "Emulate VRU" -msgstr "Émuler le VRU" - -#: src/ui/gui/controller_page.slint:87 -msgctxt "ControllerConfig" -msgid "Transfer Pak" -msgstr "Transfer Pak" - -#: src/ui/gui/controller_page.slint:101 -msgctxt "ControllerConfig" -msgid "Profile" -msgstr "Profil" - -#: src/ui/gui/controller_page.slint:117 -msgctxt "ControllerConfig" -msgid "Controller" -msgstr "Manette" +msgid "Controller Assignment" +msgstr "Attribution de la manette" #: src/ui/gui/input_profile.slint:10 msgctxt "InputProfileDialog" @@ -488,62 +483,75 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Voir les jeux pris en charge" -#: src/ui/gui/settings_page.slint:22 +#: src/ui/gui/settings_page.slint:23 msgctxt "Settings" msgid "Settings" msgstr "Paramètres" -#: src/ui/gui/settings_page.slint:29 +#: src/ui/gui/settings_page.slint:30 msgctxt "Settings" msgid "Resolution:" msgstr "Résolution :" -#: src/ui/gui/settings_page.slint:45 +#: src/ui/gui/settings_page.slint:46 msgctxt "Settings" msgid "SSAA downscaling" msgstr "Réduction SSAA" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "Mise à l'échelle par entiers" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:68 msgctxt "Settings" msgid "Fullscreen" msgstr "Plein écran" -#: src/ui/gui/settings_page.slint:78 +#: src/ui/gui/settings_page.slint:79 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Écran large (étiré)" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "Synchro verticale" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Appliquer le filtre CRT" -#: src/ui/gui/settings_page.slint:115 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Surcharger le CPU N64 (risque de bugs)" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Désactiver l'Expansion Pak" -#: src/ui/gui/settings_page.slint:137 +#: src/ui/gui/settings_page.slint:138 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Émuler UNFLoader" +#: src/ui/gui/settings_page.slint:149 +msgctxt "Settings" +msgid "Emulate VRU" +msgstr "Émuler le VRU" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "Que souhaitez-vous dire ?" + +#~ msgctxt "ControllerConfig" +#~ msgid "Port" +#~ msgstr "Port" + +#~ msgctxt "ControllerConfig" +#~ msgid "Controller" +#~ msgstr "Manette" diff --git a/data/translations/gopher64.pot b/data/translations/gopher64.pot index 16574dd..862fb2b 100644 --- a/data/translations/gopher64.pot +++ b/data/translations/gopher64.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-05-14 14:53+0000\n" +"POT-Creation-Date: 2026-05-19 06:44+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -47,42 +47,42 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:103 msgctxt "Menu" msgid "Local Game" msgstr "" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:107 msgctxt "Menu" msgid "Controller Config" msgstr "" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:111 msgctxt "Menu" msgid "Netplay" msgstr "" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:115 msgctxt "Menu" msgid "Cheats" msgstr "" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:119 msgctxt "Menu" msgid "RetroAchievements" msgstr "" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:123 msgctxt "Menu" msgid "Settings" msgstr "" -#: src/ui/gui/appwindow.slint:101 +#: src/ui/gui/appwindow.slint:127 msgctxt "Menu" msgid "About" msgstr "" -#: src/ui/gui/appwindow.slint:195 +#: src/ui/gui/appwindow.slint:248 msgctxt "ErrorDialog" msgid "Error" msgstr "" @@ -107,44 +107,39 @@ msgctxt "Cheats" msgid "No Cheats Available" msgstr "" -#: src/ui/gui/controller_page.slint:26 +#: src/ui/gui/controller_page.slint:80 +msgctxt "ControllerSettingsGrid" +msgid "Enabled" +msgstr "" + +#: src/ui/gui/controller_page.slint:93 +msgctxt "ControllerSettingsGrid" +msgid "Transfer Pak" +msgstr "" + +#: src/ui/gui/controller_page.slint:107 +msgctxt "ControllerSettingsGrid" +msgid "Profile" +msgstr "" + +#: src/ui/gui/controller_page.slint:157 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "" -#: src/ui/gui/controller_page.slint:37 +#: src/ui/gui/controller_page.slint:168 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "" -#: src/ui/gui/controller_page.slint:49 +#: src/ui/gui/controller_page.slint:176 msgctxt "ControllerConfig" -msgid "Port" +msgid "Controller Settings" msgstr "" -#: src/ui/gui/controller_page.slint:60 +#: src/ui/gui/controller_page.slint:186 msgctxt "ControllerConfig" -msgid "Enabled" -msgstr "" - -#: src/ui/gui/controller_page.slint:73 -msgctxt "ControllerConfig" -msgid "Emulate VRU" -msgstr "" - -#: src/ui/gui/controller_page.slint:87 -msgctxt "ControllerConfig" -msgid "Transfer Pak" -msgstr "" - -#: src/ui/gui/controller_page.slint:101 -msgctxt "ControllerConfig" -msgid "Profile" -msgstr "" - -#: src/ui/gui/controller_page.slint:117 -msgctxt "ControllerConfig" -msgid "Controller" +msgid "Controller Assignment" msgstr "" #: src/ui/gui/input_profile.slint:10 @@ -483,61 +478,66 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "" -#: src/ui/gui/settings_page.slint:22 +#: src/ui/gui/settings_page.slint:23 msgctxt "Settings" msgid "Settings" msgstr "" -#: src/ui/gui/settings_page.slint:29 +#: src/ui/gui/settings_page.slint:30 msgctxt "Settings" msgid "Resolution:" msgstr "" -#: src/ui/gui/settings_page.slint:45 +#: src/ui/gui/settings_page.slint:46 msgctxt "Settings" msgid "SSAA downscaling" msgstr "" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:68 msgctxt "Settings" msgid "Fullscreen" msgstr "" -#: src/ui/gui/settings_page.slint:78 +#: src/ui/gui/settings_page.slint:79 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Apply CRT shader" msgstr "" -#: src/ui/gui/settings_page.slint:115 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "" -#: src/ui/gui/settings_page.slint:137 +#: src/ui/gui/settings_page.slint:138 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "" +#: src/ui/gui/settings_page.slint:149 +msgctxt "Settings" +msgid "Emulate VRU" +msgstr "" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" diff --git a/data/translations/ja/LC_MESSAGES/gopher64.po b/data/translations/ja/LC_MESSAGES/gopher64.po index 6ddf13b..25da6d2 100644 --- a/data/translations/ja/LC_MESSAGES/gopher64.po +++ b/data/translations/ja/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-14 14:53+0000\n" +"POT-Creation-Date: 2026-05-19 06:44+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Japanese\n" @@ -47,42 +47,42 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "GitHubで寄付" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:103 msgctxt "Menu" msgid "Local Game" msgstr "ローカルゲーム" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:107 msgctxt "Menu" msgid "Controller Config" msgstr "コントローラー設定" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:111 msgctxt "Menu" msgid "Netplay" msgstr "ネットプレイ" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:115 msgctxt "Menu" msgid "Cheats" msgstr "チート" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:119 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:123 msgctxt "Menu" msgid "Settings" msgstr "設定" -#: src/ui/gui/appwindow.slint:101 +#: src/ui/gui/appwindow.slint:127 msgctxt "Menu" msgid "About" msgstr "バージョン情報" -#: src/ui/gui/appwindow.slint:195 +#: src/ui/gui/appwindow.slint:248 msgctxt "ErrorDialog" msgid "Error" msgstr "エラー" @@ -107,45 +107,40 @@ msgctxt "Cheats" msgid "No Cheats Available" msgstr "利用できるチートはありません" -#: src/ui/gui/controller_page.slint:26 +#: src/ui/gui/controller_page.slint:80 +msgctxt "ControllerSettingsGrid" +msgid "Enabled" +msgstr "有効" + +#: src/ui/gui/controller_page.slint:93 +msgctxt "ControllerSettingsGrid" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:107 +msgctxt "ControllerSettingsGrid" +msgid "Profile" +msgstr "プロファイル" + +#: src/ui/gui/controller_page.slint:157 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "コントローラー設定" -#: src/ui/gui/controller_page.slint:37 +#: src/ui/gui/controller_page.slint:168 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "入力プロファイルを設定" -#: src/ui/gui/controller_page.slint:49 +#: src/ui/gui/controller_page.slint:176 msgctxt "ControllerConfig" -msgid "Port" -msgstr "ポート" +msgid "Controller Settings" +msgstr "コントローラー詳細設定" -#: src/ui/gui/controller_page.slint:60 +#: src/ui/gui/controller_page.slint:186 msgctxt "ControllerConfig" -msgid "Enabled" -msgstr "有効" - -#: src/ui/gui/controller_page.slint:73 -msgctxt "ControllerConfig" -msgid "Emulate VRU" -msgstr "VRUをエミュレート" - -#: src/ui/gui/controller_page.slint:87 -msgctxt "ControllerConfig" -msgid "Transfer Pak" -msgstr "Transfer Pak" - -#: src/ui/gui/controller_page.slint:101 -msgctxt "ControllerConfig" -msgid "Profile" -msgstr "プロファイル" - -#: src/ui/gui/controller_page.slint:117 -msgctxt "ControllerConfig" -msgid "Controller" -msgstr "コントローラー" +msgid "Controller Assignment" +msgstr "コントローラー割り当て" #: src/ui/gui/input_profile.slint:10 msgctxt "InputProfileDialog" @@ -485,62 +480,75 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "対応ゲームを表示" -#: src/ui/gui/settings_page.slint:22 +#: src/ui/gui/settings_page.slint:23 msgctxt "Settings" msgid "Settings" msgstr "設定" -#: src/ui/gui/settings_page.slint:29 +#: src/ui/gui/settings_page.slint:30 msgctxt "Settings" msgid "Resolution:" msgstr "解像度:" -#: src/ui/gui/settings_page.slint:45 +#: src/ui/gui/settings_page.slint:46 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAAダウンスケール" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "整数倍スケーリング" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:68 msgctxt "Settings" msgid "Fullscreen" msgstr "全画面表示" -#: src/ui/gui/settings_page.slint:78 +#: src/ui/gui/settings_page.slint:79 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "ワイド画面(伸ばす)" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "垂直同期(VSync)" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Apply CRT shader" msgstr "CRTシェーダーを適用" -#: src/ui/gui/settings_page.slint:115 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "N64のCPUをオーバークロック(不具合の原因になることがあります)" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "拡張パックを無効にする" -#: src/ui/gui/settings_page.slint:137 +#: src/ui/gui/settings_page.slint:138 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "UNFLoaderをエミュレート" +#: src/ui/gui/settings_page.slint:149 +msgctxt "Settings" +msgid "Emulate VRU" +msgstr "VRUをエミュレート" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "何と言いますか?" + +#~ msgctxt "ControllerConfig" +#~ msgid "Port" +#~ msgstr "ポート" + +#~ msgctxt "ControllerConfig" +#~ msgid "Controller" +#~ msgstr "コントローラー" diff --git a/data/translations/nl/LC_MESSAGES/gopher64.po b/data/translations/nl/LC_MESSAGES/gopher64.po index 2162354..18b0735 100644 --- a/data/translations/nl/LC_MESSAGES/gopher64.po +++ b/data/translations/nl/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-14 14:53+0000\n" +"POT-Creation-Date: 2026-05-19 06:44+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Dutch (Netherlands)\n" @@ -47,42 +47,42 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Doneren (via GitHub)" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:103 msgctxt "Menu" msgid "Local Game" msgstr "Lokaal spel" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:107 msgctxt "Menu" msgid "Controller Config" msgstr "Controllerconfiguratie" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:111 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:115 msgctxt "Menu" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:119 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:123 msgctxt "Menu" msgid "Settings" msgstr "Instellingen" -#: src/ui/gui/appwindow.slint:101 +#: src/ui/gui/appwindow.slint:127 msgctxt "Menu" msgid "About" msgstr "Over" -#: src/ui/gui/appwindow.slint:195 +#: src/ui/gui/appwindow.slint:248 msgctxt "ErrorDialog" msgid "Error" msgstr "Fout" @@ -107,45 +107,40 @@ msgctxt "Cheats" msgid "No Cheats Available" msgstr "Geen cheats beschikbaar" -#: src/ui/gui/controller_page.slint:26 +#: src/ui/gui/controller_page.slint:80 +msgctxt "ControllerSettingsGrid" +msgid "Enabled" +msgstr "Ingeschakeld" + +#: src/ui/gui/controller_page.slint:93 +msgctxt "ControllerSettingsGrid" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:107 +msgctxt "ControllerSettingsGrid" +msgid "Profile" +msgstr "Profiel" + +#: src/ui/gui/controller_page.slint:157 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Controllerconfiguratie" -#: src/ui/gui/controller_page.slint:37 +#: src/ui/gui/controller_page.slint:168 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Invoerprofiel configureren" -#: src/ui/gui/controller_page.slint:49 +#: src/ui/gui/controller_page.slint:176 msgctxt "ControllerConfig" -msgid "Port" -msgstr "Poort" +msgid "Controller Settings" +msgstr "Controllerinstellingen" -#: src/ui/gui/controller_page.slint:60 +#: src/ui/gui/controller_page.slint:186 msgctxt "ControllerConfig" -msgid "Enabled" -msgstr "Ingeschakeld" - -#: src/ui/gui/controller_page.slint:73 -msgctxt "ControllerConfig" -msgid "Emulate VRU" -msgstr "VRU emuleren" - -#: src/ui/gui/controller_page.slint:87 -msgctxt "ControllerConfig" -msgid "Transfer Pak" -msgstr "Transfer Pak" - -#: src/ui/gui/controller_page.slint:101 -msgctxt "ControllerConfig" -msgid "Profile" -msgstr "Profiel" - -#: src/ui/gui/controller_page.slint:117 -msgctxt "ControllerConfig" -msgid "Controller" -msgstr "Controller" +msgid "Controller Assignment" +msgstr "Controllertoewijzing" #: src/ui/gui/input_profile.slint:10 msgctxt "InputProfileDialog" @@ -486,62 +481,75 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Ondersteunde spellen bekijken" -#: src/ui/gui/settings_page.slint:22 +#: src/ui/gui/settings_page.slint:23 msgctxt "Settings" msgid "Settings" msgstr "Instellingen" -#: src/ui/gui/settings_page.slint:29 +#: src/ui/gui/settings_page.slint:30 msgctxt "Settings" msgid "Resolution:" msgstr "Resolutie:" -#: src/ui/gui/settings_page.slint:45 +#: src/ui/gui/settings_page.slint:46 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAA-downscaling" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "Schalen in hele getallen" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:68 msgctxt "Settings" msgid "Fullscreen" msgstr "Volledig scherm" -#: src/ui/gui/settings_page.slint:78 +#: src/ui/gui/settings_page.slint:79 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Breedbeeld (uitgerekt)" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "VSync" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Apply CRT shader" msgstr "CRT-shader toepassen" -#: src/ui/gui/settings_page.slint:115 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "N64-CPU overklokken (kan bugs veroorzaken)" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Expansion Pak uitschakelen" -#: src/ui/gui/settings_page.slint:137 +#: src/ui/gui/settings_page.slint:138 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "UNFLoader emuleren" +#: src/ui/gui/settings_page.slint:149 +msgctxt "Settings" +msgid "Emulate VRU" +msgstr "VRU emuleren" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "Wat wil je zeggen?" + +#~ msgctxt "ControllerConfig" +#~ msgid "Port" +#~ msgstr "Poort" + +#~ msgctxt "ControllerConfig" +#~ msgid "Controller" +#~ msgstr "Controller" diff --git a/data/translations/pt_BR/LC_MESSAGES/gopher64.po b/data/translations/pt_BR/LC_MESSAGES/gopher64.po index 63fd66c..37f2ba7 100644 --- a/data/translations/pt_BR/LC_MESSAGES/gopher64.po +++ b/data/translations/pt_BR/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-05-14 14:53+0000\n" +"POT-Creation-Date: 2026-05-19 06:44+0000\n" "PO-Revision-Date: 2026-05-11 18:11-3000\n" "Last-Translator: EDUARDO CARVALHO \n" "Language-Team: LANGUAGE \n" @@ -47,42 +47,42 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Doações (via GitHub)" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:103 msgctxt "Menu" msgid "Local Game" msgstr "Jogo Local" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:107 msgctxt "Menu" msgid "Controller Config" msgstr "Configurar Controle" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:111 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:115 msgctxt "Menu" msgid "Cheats" msgstr "Trapaças" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:119 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:123 msgctxt "Menu" msgid "Settings" msgstr "Configurações" -#: src/ui/gui/appwindow.slint:101 +#: src/ui/gui/appwindow.slint:127 msgctxt "Menu" msgid "About" msgstr "Sobre" -#: src/ui/gui/appwindow.slint:195 +#: src/ui/gui/appwindow.slint:248 msgctxt "ErrorDialog" msgid "Error" msgstr "Erro" @@ -107,45 +107,40 @@ msgctxt "Cheats" msgid "No Cheats Available" msgstr "Sem trapaças disponíveis" -#: src/ui/gui/controller_page.slint:26 +#: src/ui/gui/controller_page.slint:80 +msgctxt "ControllerSettingsGrid" +msgid "Enabled" +msgstr "Habilitado" + +#: src/ui/gui/controller_page.slint:93 +msgctxt "ControllerSettingsGrid" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:107 +msgctxt "ControllerSettingsGrid" +msgid "Profile" +msgstr "Perfil" + +#: src/ui/gui/controller_page.slint:157 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Configurar Controles" -#: src/ui/gui/controller_page.slint:37 +#: src/ui/gui/controller_page.slint:168 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Configurar Perfil de Controle" -#: src/ui/gui/controller_page.slint:49 +#: src/ui/gui/controller_page.slint:176 msgctxt "ControllerConfig" -msgid "Port" -msgstr "Entrada" +msgid "Controller Settings" +msgstr "Configurações do controle" -#: src/ui/gui/controller_page.slint:60 +#: src/ui/gui/controller_page.slint:186 msgctxt "ControllerConfig" -msgid "Enabled" -msgstr "Habilitado" - -#: src/ui/gui/controller_page.slint:73 -msgctxt "ControllerConfig" -msgid "Emulate VRU" -msgstr "Emular VRU" - -#: src/ui/gui/controller_page.slint:87 -msgctxt "ControllerConfig" -msgid "Transfer Pak" -msgstr "Transfer Pak" - -#: src/ui/gui/controller_page.slint:101 -msgctxt "ControllerConfig" -msgid "Profile" -msgstr "Perfil" - -#: src/ui/gui/controller_page.slint:117 -msgctxt "ControllerConfig" -msgid "Controller" -msgstr "Controle" +msgid "Controller Assignment" +msgstr "Atribuição do controle" #: src/ui/gui/input_profile.slint:10 msgctxt "InputProfileDialog" @@ -487,62 +482,75 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Ver Jogos com Suporte" -#: src/ui/gui/settings_page.slint:22 +#: src/ui/gui/settings_page.slint:23 msgctxt "Settings" msgid "Settings" msgstr "Configurações" -#: src/ui/gui/settings_page.slint:29 +#: src/ui/gui/settings_page.slint:30 msgctxt "Settings" msgid "Resolution:" msgstr "Resolução:" -#: src/ui/gui/settings_page.slint:45 +#: src/ui/gui/settings_page.slint:46 msgctxt "Settings" msgid "SSAA downscaling" msgstr "Redução de SSAA" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "Proporção Íntegra" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:68 msgctxt "Settings" msgid "Fullscreen" msgstr "Tela Cheia" -#: src/ui/gui/settings_page.slint:78 +#: src/ui/gui/settings_page.slint:79 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Widescreen (esticar)" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "VSync" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Aplicar filtro de CRT" -#: src/ui/gui/settings_page.slint:115 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Overclock da CPU do N64 (pode causar bugs)" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Desabilitar Expansion Pak" -#: src/ui/gui/settings_page.slint:137 +#: src/ui/gui/settings_page.slint:138 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Emular UNFLoader" +#: src/ui/gui/settings_page.slint:149 +msgctxt "Settings" +msgid "Emulate VRU" +msgstr "Emular VRU" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "O que você quer falar?" + +#~ msgctxt "ControllerConfig" +#~ msgid "Port" +#~ msgstr "Entrada" + +#~ msgctxt "ControllerConfig" +#~ msgid "Controller" +#~ msgstr "Controle" diff --git a/data/translations/ru/LC_MESSAGES/gopher64.po b/data/translations/ru/LC_MESSAGES/gopher64.po index 29f4f0a..4ae19f7 100644 --- a/data/translations/ru/LC_MESSAGES/gopher64.po +++ b/data/translations/ru/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-14 14:53+0000\n" +"POT-Creation-Date: 2026-05-19 06:44+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Russian\n" @@ -47,42 +47,42 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Пожертвовать (через GitHub)" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:103 msgctxt "Menu" msgid "Local Game" msgstr "Локальная игра" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:107 msgctxt "Menu" msgid "Controller Config" msgstr "Настройка контроллера" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:111 msgctxt "Menu" msgid "Netplay" msgstr "Сетевая игра" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:115 msgctxt "Menu" msgid "Cheats" msgstr "Читы" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:119 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:123 msgctxt "Menu" msgid "Settings" msgstr "Настройки" -#: src/ui/gui/appwindow.slint:101 +#: src/ui/gui/appwindow.slint:127 msgctxt "Menu" msgid "About" msgstr "О программе" -#: src/ui/gui/appwindow.slint:195 +#: src/ui/gui/appwindow.slint:248 msgctxt "ErrorDialog" msgid "Error" msgstr "Ошибка" @@ -107,45 +107,40 @@ msgctxt "Cheats" msgid "No Cheats Available" msgstr "Читы недоступны" -#: src/ui/gui/controller_page.slint:26 +#: src/ui/gui/controller_page.slint:80 +msgctxt "ControllerSettingsGrid" +msgid "Enabled" +msgstr "Включено" + +#: src/ui/gui/controller_page.slint:93 +msgctxt "ControllerSettingsGrid" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:107 +msgctxt "ControllerSettingsGrid" +msgid "Profile" +msgstr "Профиль" + +#: src/ui/gui/controller_page.slint:157 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Настройка контроллера" -#: src/ui/gui/controller_page.slint:37 +#: src/ui/gui/controller_page.slint:168 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Настроить профиль ввода" -#: src/ui/gui/controller_page.slint:49 +#: src/ui/gui/controller_page.slint:176 msgctxt "ControllerConfig" -msgid "Port" -msgstr "Порт" +msgid "Controller Settings" +msgstr "Настройки контроллера" -#: src/ui/gui/controller_page.slint:60 +#: src/ui/gui/controller_page.slint:186 msgctxt "ControllerConfig" -msgid "Enabled" -msgstr "Включено" - -#: src/ui/gui/controller_page.slint:73 -msgctxt "ControllerConfig" -msgid "Emulate VRU" -msgstr "Эмулировать VRU" - -#: src/ui/gui/controller_page.slint:87 -msgctxt "ControllerConfig" -msgid "Transfer Pak" -msgstr "Transfer Pak" - -#: src/ui/gui/controller_page.slint:101 -msgctxt "ControllerConfig" -msgid "Profile" -msgstr "Профиль" - -#: src/ui/gui/controller_page.slint:117 -msgctxt "ControllerConfig" -msgid "Controller" -msgstr "Контроллер" +msgid "Controller Assignment" +msgstr "Назначение контроллера" #: src/ui/gui/input_profile.slint:10 msgctxt "InputProfileDialog" @@ -485,62 +480,75 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Просмотреть поддерживаемые игры" -#: src/ui/gui/settings_page.slint:22 +#: src/ui/gui/settings_page.slint:23 msgctxt "Settings" msgid "Settings" msgstr "Настройки" -#: src/ui/gui/settings_page.slint:29 +#: src/ui/gui/settings_page.slint:30 msgctxt "Settings" msgid "Resolution:" msgstr "Разрешение:" -#: src/ui/gui/settings_page.slint:45 +#: src/ui/gui/settings_page.slint:46 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAA даунскейлинг" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "Целочисленное масштабирование" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:68 msgctxt "Settings" msgid "Fullscreen" msgstr "Полноэкранный режим" -#: src/ui/gui/settings_page.slint:78 +#: src/ui/gui/settings_page.slint:79 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Широкоэкранный режим (растянуто)" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "Вертикальная синхронизация" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Применить шейдер ЭЛТ" -#: src/ui/gui/settings_page.slint:115 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Разгон процессора N64 (может вызвать ошибки)" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Отключить Expansion Pak" -#: src/ui/gui/settings_page.slint:137 +#: src/ui/gui/settings_page.slint:138 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Эмулировать UNFLoader" +#: src/ui/gui/settings_page.slint:149 +msgctxt "Settings" +msgid "Emulate VRU" +msgstr "Эмулировать VRU" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "Что вы хотите сказать?" + +#~ msgctxt "ControllerConfig" +#~ msgid "Port" +#~ msgstr "Порт" + +#~ msgctxt "ControllerConfig" +#~ msgid "Controller" +#~ msgstr "Контроллер" diff --git a/data/RobotoMono-Regular.ttf b/data/ui/RobotoMono-Regular.ttf similarity index 100% rename from data/RobotoMono-Regular.ttf rename to data/ui/RobotoMono-Regular.ttf diff --git a/data/controller.png b/data/ui/controller.png similarity index 100% rename from data/controller.png rename to data/ui/controller.png diff --git a/data/ui/icons/about.svg b/data/ui/icons/about.svg new file mode 100644 index 0000000..93966a6 --- /dev/null +++ b/data/ui/icons/about.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/ui/icons/achievements.svg b/data/ui/icons/achievements.svg new file mode 100644 index 0000000..aad2e4b --- /dev/null +++ b/data/ui/icons/achievements.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/ui/icons/cheats.svg b/data/ui/icons/cheats.svg new file mode 100644 index 0000000..c03e719 --- /dev/null +++ b/data/ui/icons/cheats.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/ui/icons/controller.svg b/data/ui/icons/controller.svg new file mode 100644 index 0000000..c79c7ac --- /dev/null +++ b/data/ui/icons/controller.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/ui/icons/local_game.svg b/data/ui/icons/local_game.svg new file mode 100644 index 0000000..8a3ab49 --- /dev/null +++ b/data/ui/icons/local_game.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/ui/icons/netplay.svg b/data/ui/icons/netplay.svg new file mode 100644 index 0000000..27a99d5 --- /dev/null +++ b/data/ui/icons/netplay.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/ui/icons/settings.svg b/data/ui/icons/settings.svg new file mode 100644 index 0000000..1b5aa82 --- /dev/null +++ b/data/ui/icons/settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index b8f28d5..0b27831 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -66,8 +66,8 @@ export component AppWindow inherits Window { in-out property disable_expansion_pak <=> SettingsData.disable_expansion_pak; in-out property resolution <=> SettingsData.resolution; in-out property emulate_usb <=> SettingsData.emulate_usb; + in-out property emulate_vru <=> SettingsData.emulate_vru; in-out property rom_dir <=> SettingsData.rom_dir; - in-out property emulate_vru <=> ControllerData.emulate_vru; in-out property controller_enabled <=> ControllerData.controller_enabled; in-out property controller_changed <=> ControllerData.controller_changed; in-out property transferpak <=> ControllerData.transferpak; @@ -83,26 +83,66 @@ export component AppWindow inherits Window { in-out property cheat_game_name <=> CheatsData.cheat_game_name; in-out property cheat_game_crc <=> CheatsData.cheat_game_crc; in-out property cheats <=> CheatsData.cheats; - preferred-width: 700px; - preferred-height: 500px; + + private property is-portrait: root.width < root.height; + private property bar-thickness: 56px; + + min-width: 320px; + min-height: 240px; + preferred-width: 600px; + preferred-height: 600px; title: "Gopher64"; icon: @image-url("../../../data/icon/gopher64.png"); - HorizontalLayout { - side-bar := SideBar { - title: "Gopher64"; - model: [ - @tr("Menu" => "Local Game"), - @tr("Menu" => "Controller Config"), - @tr("Menu" => "Netplay"), - @tr("Menu" => "Cheats"), - @tr("Menu" => "RetroAchievements"), - @tr("Menu" => "Settings"), - @tr("Menu" => "About") - ]; - } + side-bar := SideBar { + portrait: root.is-portrait; + title: "Gopher64"; + model: [ + { + icon: @image-url("../../../data/ui/icons/local_game.svg"), + label: @tr("Menu" => "Local Game"), + }, + { + icon: @image-url("../../../data/ui/icons/controller.svg"), + label: @tr("Menu" => "Controller Config"), + }, + { + icon: @image-url("../../../data/ui/icons/netplay.svg"), + label: @tr("Menu" => "Netplay"), + }, + { + icon: @image-url("../../../data/ui/icons/cheats.svg"), + label: @tr("Menu" => "Cheats"), + }, + { + icon: @image-url("../../../data/ui/icons/achievements.svg"), + label: @tr("Menu" => "RetroAchievements"), + }, + { + icon: @image-url("../../../data/ui/icons/settings.svg"), + label: @tr("Menu" => "Settings"), + }, + { + icon: @image-url("../../../data/ui/icons/about.svg"), + label: @tr("Menu" => "About"), + }, + ]; + x: 0; + y: root.is-portrait ? parent.height - root.bar-thickness : 0; + width: root.is-portrait ? parent.width : root.bar-thickness; + height: root.is-portrait ? root.bar-thickness : parent.height; + } + + content-area := Rectangle { + clip: true; + x: root.is-portrait ? 0 : root.bar-thickness; + y: 0; + width: root.is-portrait ? parent.width : parent.width - root.bar-thickness; + height: root.is-portrait ? parent.height - root.bar-thickness : parent.height; if(side-bar.current-item == 0): LocalGame { + width: 100%; + height: 100%; open_rom_button_clicked => { open_rom_button_clicked(); } @@ -117,6 +157,8 @@ export component AppWindow inherits Window { } } if(side-bar.current-item == 1): ControllerConfig { + width: 100%; + height: 100%; input_profile_button_clicked => { input_profile_button_clicked(); } @@ -128,6 +170,8 @@ export component AppWindow inherits Window { } } if(side-bar.current-item == 2): Netplay { + width: 100%; + height: 100%; create_session_button_clicked => { create_session_button_clicked(); } @@ -142,6 +186,8 @@ export component AppWindow inherits Window { } } if(side-bar.current-item == 3): Cheats { + width: 100%; + height: 100%; cheats_select_rom_clicked(rom_dir) => { cheats_select_rom_clicked(rom_dir); } @@ -153,6 +199,8 @@ export component AppWindow inherits Window { } } if(side-bar.current-item == 4): RetroAchievements { + width: 100%; + height: 100%; ra_button_clicked(password) => { ra_button_clicked(password); } @@ -166,8 +214,13 @@ export component AppWindow inherits Window { ra_show_profile_clicked(); } } - if(side-bar.current-item == 5): Settings { } + if(side-bar.current-item == 5): Settings { + width: 100%; + height: 100%; + } if(side-bar.current-item == 6): About { + width: 100%; + height: 100%; wiki_button_clicked => { wiki_button_clicked(); } diff --git a/src/ui/gui/controller_page.slint b/src/ui/gui/controller_page.slint index 9a0e1a6..8708184 100644 --- a/src/ui/gui/controller_page.slint +++ b/src/ui/gui/controller_page.slint @@ -1,12 +1,11 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { Switch, ComboBox, Button, HorizontalBox, VerticalBox, GroupBox } from "std-widgets.slint"; +import { Switch, ComboBox, Button, VerticalBox, GroupBox } from "std-widgets.slint"; import { Page } from "page.slint"; import { State } from "localgame_page.slint"; export global ControllerData { - in-out property emulate_vru; in-out property <[bool]> controller_enabled; in-out property <[bool]> transferpak; in-out property <[string]> gb_rom_paths; @@ -19,9 +18,141 @@ export global ControllerData { in-out property <[bool]> controller_changed; } +component ControllerPortLabel inherits Text { + height: 32px; + width: 36px; + vertical-alignment: center; + horizontal-alignment: center; + font-weight: 600; +} + +component ControllerFieldHeader inherits Text { + height: 28px; + horizontal-alignment: left; + vertical-alignment: center; + font-size: 13px; +} + +component ControllerSettingsColumn inherits VerticalLayout { + in property title; + in property content-min-width: 0px; + spacing: 6px; + alignment: start; + horizontal-stretch: 0; + min-width: content-min-width > header.preferred-width ? content-min-width : header.preferred-width; + + header := ControllerFieldHeader { + text: root.title; + } + + @children +} + +component ControllerSettingsCell inherits HorizontalLayout { + height: 32px; + alignment: start; + + @children +} + +component ControllerSettingsGrid inherits HorizontalLayout { + callback transferpak_toggled(int, bool); + + spacing: 12px; + alignment: start; + + VerticalLayout { + spacing: 6px; + alignment: start; + horizontal-stretch: 0; + + Rectangle { + width: 36px; + height: 28px; + } + + for player[index] in [0, 1, 2, 3]: ControllerPortLabel { + text: index + 1; + } + } + + ControllerSettingsColumn { + title: @tr("ControllerSettingsGrid" => "Enabled"); + + for player[index] in [0, 1, 2, 3]: ControllerSettingsCell { + Switch { + checked: ControllerData.controller_enabled[index]; + toggled => { + ControllerData.controller_enabled[index] = self.checked; + } + } + } + } + + ControllerSettingsColumn { + title: @tr("ControllerSettingsGrid" => "Transfer Pak"); + + for player[index] in [0, 1, 2, 3]: ControllerSettingsCell { + Switch { + checked: ControllerData.transferpak[index]; + toggled => { + ControllerData.transferpak[index] = self.checked; + root.transferpak_toggled(index, self.checked); + } + } + } + } + + ControllerSettingsColumn { + title: @tr("ControllerSettingsGrid" => "Profile"); + content-min-width: 150px; + + for player[index] in [0, 1, 2, 3]: ControllerSettingsCell { + ComboBox { + horizontal-stretch: 0; + min-width: self.preferred-width > 150px ? self.preferred-width : 150px; + model: ControllerData.input_profiles; + current-index: ControllerData.selected_profile_binding[index]; + selected => { + ControllerData.selected_profile_binding[index] = self.current-index; + } + } + } + } +} + +component ControllerAssignmentGrid inherits VerticalLayout { + spacing: 6px; + alignment: start; + + for player[index] in [0, 1, 2, 3]: HorizontalLayout { + spacing: 8px; + alignment: start; + + ControllerPortLabel { + text: index + 1; + } + + HorizontalLayout { + alignment: start; + + ComboBox { + horizontal-stretch: 0; + min-width: self.preferred-width > 300px ? self.preferred-width : 300px; + model: ControllerData.controller_names; + current-index: ControllerData.selected_controller[index]; + selected => { + ControllerData.selected_controller[index] = self.current-index; + ControllerData.controller_changed[index] = true; + } + } + } + } +} + export component ControllerConfig inherits Page { callback input_profile_button_clicked; - callback transferpak_toggled(int,bool); + callback transferpak_toggled(int, bool); callback controller_window_created; title: @tr("Controller Configuration"); @@ -30,105 +161,31 @@ export component ControllerConfig inherits Page { } VerticalBox { + spacing: 8px; alignment: start; - HorizontalBox { - alignment: start; - Button { - text: @tr("Configure Input Profile"); - enabled: !State.game_running; - clicked => { - input_profile_button_clicked(); + + Button { + text: @tr("Configure Input Profile"); + enabled: !State.game_running; + clicked => { + input_profile_button_clicked(); + } + } + + GroupBox { + title: @tr("Controller Settings"); + + ControllerSettingsGrid { + transferpak_toggled(index, enabled) => { + root.transferpak_toggled(index, enabled); } } } - Rectangle { } + GroupBox { + title: @tr("Controller Assignment"); - HorizontalBox { - GroupBox { - title: @tr("Port"); - VerticalLayout { - alignment: space-between; - for player in [0, 1, 2, 3]: Text { - text: player + 1; - vertical-alignment: center; - } - } - } - - GroupBox { - title: @tr("Enabled"); - VerticalLayout { - alignment: space-between; - for player in [0, 1, 2, 3]: Switch { - checked: ControllerData.controller_enabled[player]; - toggled => { - ControllerData.controller_enabled[player] = self.checked; - } - } - } - } - - GroupBox { - title: @tr("Emulate VRU"); - VerticalLayout { - alignment: space-between; - for valid in [false, false, false, true]: Switch { - enabled: valid; - checked: valid && ControllerData.emulate_vru; - toggled => { - ControllerData.emulate_vru = self.checked; - } - } - } - } - - GroupBox { - title: @tr("Transfer Pak"); - VerticalLayout { - alignment: space-between; - for player in [0, 1, 2, 3]: Switch { - checked: ControllerData.transferpak[player]; - toggled => { - ControllerData.transferpak[player] = self.checked; - transferpak_toggled(player,self.checked); - } - } - } - } - - GroupBox { - title: @tr("Profile"); - horizontal-stretch: 0.25; - VerticalLayout { - alignment: space-between; - for player in [0, 1, 2, 3]: ComboBox { - model: ControllerData.input_profiles; - min-width: self.preferred-width > 150px ? self.preferred-width : 150px; - current-index: ControllerData.selected_profile_binding[player]; - selected => { - ControllerData.selected_profile_binding[player] = self.current-index; - } - } - } - } - - GroupBox { - title: @tr("Controller"); - horizontal-stretch: 0.75; - VerticalLayout { - alignment: space-between; - for player in [0, 1, 2, 3]: ComboBox { - model: ControllerData.controller_names; - min-width: self.preferred-width > 300px ? self.preferred-width : 300px; - current-index: ControllerData.selected_controller[player]; - selected => { - ControllerData.selected_controller[player] = self.current-index; - ControllerData.controller_changed[player] = true; - } - } - } - } + ControllerAssignmentGrid { } } } } diff --git a/src/ui/gui/page.slint b/src/ui/gui/page.slint index cb52e7d..5f031fa 100644 --- a/src/ui/gui/page.slint +++ b/src/ui/gui/page.slint @@ -1,7 +1,7 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { Switch, GridBox, ListView, ScrollView, HorizontalBox, VerticalBox, Palette } from "std-widgets.slint"; +import { ScrollView, HorizontalBox, VerticalBox } from "std-widgets.slint"; export component Page inherits VerticalBox { in property title: "title"; @@ -15,9 +15,17 @@ export component Page inherits VerticalBox { text <=> root.title; } - // Spacer Rectangle { } } - @children + ScrollView { + vertical-stretch: 1; + + VerticalBox { + padding: 8px; + alignment: start; + + @children + } + } } diff --git a/src/ui/gui/settings_page.slint b/src/ui/gui/settings_page.slint index 6b2cd6c..6168c0c 100644 --- a/src/ui/gui/settings_page.slint +++ b/src/ui/gui/settings_page.slint @@ -15,6 +15,7 @@ export global SettingsData { in-out property disable_expansion_pak; in-out property resolution; in-out property emulate_usb; + in-out property emulate_vru; in-out property rom_dir; } @@ -141,5 +142,16 @@ export component Settings inherits Page { } } } + + HorizontalBox { + alignment: start; + Switch { + text: @tr("Emulate VRU"); + checked: SettingsData.emulate_vru; + toggled => { + SettingsData.emulate_vru = self.checked; + } + } + } } } diff --git a/src/ui/gui/side_bar.slint b/src/ui/gui/side_bar.slint index 074ac96..cade454 100644 --- a/src/ui/gui/side_bar.slint +++ b/src/ui/gui/side_bar.slint @@ -1,19 +1,79 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { HorizontalBox, VerticalBox, Palette } from "std-widgets.slint"; +import { Palette } from "std-widgets.slint"; + +export struct SideBarEntry { + icon: image, + label: string, +} + +component SideBarButton inherits Rectangle { + in property selected; + in property has-focus; + in property icon; + + callback clicked <=> touch.clicked; + + width: 48px; + height: 48px; + border-radius: 8px; + + highlight := Rectangle { + width: 100%; + height: 100%; + border-radius: parent.border-radius; + background: Palette.control-background; + opacity: 0; + + animate opacity { duration: 150ms; } + } + + icon-display := Image { + source: root.icon; + width: 24px; + height: 24px; + colorize: Palette.foreground; + x: (parent.width - self.width) / 2; + y: (parent.height - self.height) / 2; + + animate colorize { duration: 150ms; } + } + + touch := TouchArea { + width: 100%; + height: 100%; + } + + states [ + selected when root.selected: { + highlight.opacity: 1; + highlight.background: Palette.accent-background; + icon-display.colorize: Palette.accent-foreground; + } + pressed when touch.pressed && !root.selected: { + highlight.opacity: 0.55; + } + hover when touch.has-hover && !root.selected: { + highlight.opacity: 0.4; + } + focused when root.has-focus && !root.selected: { + highlight.opacity: 0.4; + } + ] +} component SideBarItem inherits Rectangle { in property tab-index; in property selected; in property has-focus; - in-out property text <=> label.text; + in property icon; + in property label; - callback clicked <=> touch.clicked; + callback clicked <=> button.clicked; - min-height: l.preferred-height; accessible-role: tab; - accessible-label: root.text; + accessible-label: root.label; accessible-item-index: root.tab-index; accessible-item-selectable: true; accessible-item-selected: root.selected; @@ -21,124 +81,128 @@ component SideBarItem inherits Rectangle { self.clicked(); } - states [ - pressed when touch.pressed: { - state.opacity: 0.8; - } - hover when touch.has-hover: { - state.opacity: 0.6; - } - selected when root.selected: { - state.opacity: 1; - } - focused when root.has-focus: { - state.opacity: 0.8; - } - ] - - state := Rectangle { - opacity: 0; - background: Palette.background; - - animate opacity { duration: 150ms; } - } - - l := HorizontalBox { - y: (parent.height - self.height) / 2; - spacing: 0px; - - label := Text { - vertical-alignment: center; - accessible-role: none; - } - } - - touch := TouchArea { - width: 100%; - height: 100%; + button := SideBarButton { + icon: root.icon; + selected: root.selected; + has-focus: root.has-focus; } } export component SideBar inherits Rectangle { - in property <[string]> model: []; - in property title <=> label.text; - out property current-item: 0; - out property current-focused: fs.has-focus ? fs.focused-tab : -1; // The currently focused tab + in property <[SideBarEntry]> model: []; + in property title: "Gopher64"; + in property portrait; + in-out property current-item: 0; + out property current-focused: fs.has-focus ? fs.focused-tab : -1; - width: 180px; forward-focus: fs; Rectangle { + width: 100%; + height: 100%; background: Palette.background.darker(0.2); } - VerticalBox { - padding-left: 0px; - padding-right: 0px; - alignment: start; - - label := Text { - font-size: 16px; - horizontal-alignment: center; + fs := FocusScope { + key-pressed(event) => { + if (event.text == "\n") { + root.current-item = root.current-focused; + return accept; + } + if (root.portrait) { + if (event.text == Key.LeftArrow) { + self.focused-tab = Math.max(self.focused-tab - 1, 0); + return accept; + } + if (event.text == Key.RightArrow) { + self.focused-tab = Math.min(self.focused-tab + 1, root.model.length - 1); + return accept; + } + } else { + if (event.text == Key.UpArrow) { + self.focused-tab = Math.max(self.focused-tab - 1, 0); + return accept; + } + if (event.text == Key.DownArrow) { + self.focused-tab = Math.min(self.focused-tab + 1, root.model.length - 1); + return accept; + } + } + return reject; } - navigation := VerticalLayout { - alignment: start; - vertical-stretch: 0; - accessible-role: tab-list; - accessible-delegate-focus: root.current-focused >= 0 ? root.current-focused : root.current-item; - accessible-label: root.title; - accessible-item-count: root.model.length; - - fs := FocusScope { - key-pressed(event) => { - if (event.text == "\n") { - root.current-item = root.current-focused; - return accept; - } - if (event.text == Key.UpArrow) { - self.focused-tab = Math.max(self.focused-tab - 1, 0); - return accept; - } - if (event.text == Key.DownArrow) { - self.focused-tab = Math.min(self.focused-tab + 1, root.model.length - 1); - return accept; - } - return reject; - } - - key-released(event) => { - if (event.text == " ") { - root.current-item = root.current-focused; - return accept; - } - return reject; - } - - property focused-tab: 0; - - x: 0; - width: 0; // Do not react on clicks + key-released(event) => { + if (event.text == " ") { + root.current-item = root.current-focused; + return accept; } + return reject; + } - for item[index] in root.model: SideBarItem { + property focused-tab: 0; + + width: 0; + height: 0; + } + + // Bottom bar in portrait: icons in a row, centered vertically in the bar. + portrait-strip := HorizontalLayout { + visible: root.portrait; + width: 100%; + height: 100%; + padding: 4px; + spacing: 4px; + alignment: space-evenly; + + accessible-role: tab-list; + accessible-delegate-focus: root.current-focused >= 0 ? root.current-focused : root.current-item; + accessible-label: root.title; + accessible-item-count: root.model.length; + + for item[index] in root.model: VerticalLayout { + alignment: center; + + SideBarItem { clicked => { root.current-item = index; } tab-index: index; has-focus: index == root.current-focused; - text: item; + icon: item.icon; + label: item.label; selected: index == root.current-item; } } + } - VerticalLayout { - bottom := VerticalBox { - padding-top: 0px; - padding-bottom: 0px; + // Left rail in landscape: icons in a column, centered horizontally in the bar. + landscape-strip := VerticalLayout { + visible: !root.portrait; + width: 100%; + height: 100%; + padding: 4px; + spacing: 4px; + alignment: space-evenly; - @children + accessible-role: tab-list; + accessible-delegate-focus: root.current-focused >= 0 ? root.current-focused : root.current-item; + accessible-label: root.title; + accessible-item-count: root.model.length; + + for item[index] in root.model: HorizontalLayout { + alignment: center; + + SideBarItem { + clicked => { + root.current-item = index; + } + + tab-index: index; + has-focus: index == root.current-focused; + icon: item.icon; + label: item.label; + selected: index == root.current-item; } } } diff --git a/src/ui/input.rs b/src/ui/input.rs index 76a0fd5..327034e 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -729,7 +729,7 @@ pub fn configure_input_profile( initial_state: 0, }; - let image_bytes = include_bytes!("../../data/controller.png"); + let image_bytes = include_bytes!("../../data/ui/controller.png"); let image = unsafe { sdl3_image_sys::image::IMG_LoadPNG_IO(sdl3_sys::everything::SDL_IOFromConstMem( image_bytes.as_ptr() as *const std::ffi::c_void, @@ -740,7 +740,7 @@ pub fn configure_input_profile( unsafe { sdl3_sys::surface::SDL_DestroySurface(image) }; let text_engine = unsafe { sdl3_ttf_sys::ttf::TTF_CreateRendererTextEngine(renderer) }; let font = unsafe { - let font_bytes = include_bytes!("../../data/RobotoMono-Regular.ttf"); + let font_bytes = include_bytes!("../../data/ui/RobotoMono-Regular.ttf"); sdl3_ttf_sys::ttf::TTF_OpenFontIO( sdl3_sys::everything::SDL_IOFromConstMem( font_bytes.as_ptr() as *const std::ffi::c_void, diff --git a/src/ui/video.rs b/src/ui/video.rs index 2da072f..8b7c58e 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -102,7 +102,7 @@ pub fn init(device: &mut device::Device) { let gfx_info = build_gfx_info(device); unsafe { - let font_bytes = include_bytes!("../../data/RobotoMono-Regular.ttf"); + let font_bytes = include_bytes!("../../data/ui/RobotoMono-Regular.ttf"); rdp_init( device.ui.video.window as *mut std::ffi::c_void, gfx_info, From 9f2cfb5a9f4fd2caebe1ace55b7fe4c0fa53a6df Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 19 May 2026 09:20:08 +0200 Subject: [PATCH 0902/1117] read RA settings from CLI (#913) * read RA settings from CLI * more --- build.rs | 3 +- retroachievements/retroachievements.c | 4 -- retroachievements/retroachievements.h | 1 - src/lib.rs | 61 +++++++++++---------------- src/retroachievements.rs | 17 +------- src/ui/gui.rs | 50 ---------------------- src/ui/netplay.rs | 34 +-------------- 7 files changed, 28 insertions(+), 142 deletions(-) diff --git a/build.rs b/build.rs index 4a15829..8b0138f 100644 --- a/build.rs +++ b/build.rs @@ -180,8 +180,7 @@ fn main() { if cfg!(feature = "gui") { retroachievements_builder = retroachievements_builder .allowlist_function("ra_logout_user") - .allowlist_function("ra_get_username") - .allowlist_function("ra_get_token"); + .allowlist_function("ra_get_username"); } let retroachievements_bindings = retroachievements_builder diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index bb00cc3..62f0dc2 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -86,10 +86,6 @@ const char *ra_get_username() { const rc_client_user_t *user = rc_client_get_user_info(g_client); return user ? user->username : NULL; } -const char *ra_get_token() { - const rc_client_user_t *user = rc_client_get_user_info(g_client); - return user ? user->token : NULL; -} void ra_logout_user() { rc_client_logout(g_client); } diff --git a/retroachievements/retroachievements.h b/retroachievements/retroachievements.h index 1d8693a..a2690d8 100644 --- a/retroachievements/retroachievements.h +++ b/retroachievements/retroachievements.h @@ -18,7 +18,6 @@ void ra_login_user(const char *username, const char *password, void *userdata); void ra_login_token_user(const char *username, const char *token, void *userdata); const char *ra_get_username(); -const char *ra_get_token(); size_t ra_state_size(); void ra_save_state(uint8_t *state, size_t state_size); void ra_load_state(const uint8_t *state, size_t state_size); diff --git a/src/lib.rs b/src/lib.rs index 18503de..b25dfc8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -80,43 +80,19 @@ struct Args { help = "Username for RetroAchievements" )] ra_username: Option, - #[arg( - long = "ra-token", - value_name = "TOKEN", - help = "Token for RetroAchievements", - hide = true - )] - ra_token: Option, #[arg( long = "ra-password", value_name = "PASSWORD", help = "Password for RetroAchievements" )] ra_password: Option, - #[arg( - long = "ra-hardcore", - help = "Enable Hardcore mode for RetroAchievements" - )] - ra_hardcore: bool, - #[arg( - long = "ra-challenge", - help = "Enable Challenge Indicators for RetroAchievements" - )] - ra_challenge: bool, - #[arg( - long = "ra-leaderboard", - help = "Enable Leaderboard Trackers for RetroAchievements" - )] - ra_leaderboard: bool, - #[arg(long = "discord-rich-presence", help = "Enable Discord Rich Presence")] - discord_rich_presence: bool, } pub async fn run() -> std::io::Result<()> { let dirs = ui::get_dirs(); - std::fs::create_dir_all(dirs.config_dir)?; - std::fs::create_dir_all(dirs.cache_dir)?; + std::fs::create_dir_all(&dirs.config_dir)?; + std::fs::create_dir_all(&dirs.cache_dir)?; std::fs::create_dir_all(dirs.data_dir.join("saves"))?; std::fs::create_dir_all(dirs.data_dir.join("states"))?; @@ -176,10 +152,11 @@ pub async fn run() -> std::io::Result<()> { let mut shutdown_tx = None; let mut usb_handle = None; - if let Some(peer_addr) = args.netplay_peer_addr + let rich_presence = if let Some(peer_addr) = args.netplay_peer_addr && let Some(player_number) = args.netplay_player_number { device.netplay = Some(netplay::init(peer_addr.parse().unwrap(), player_number)); + false } else { for i in 0..4 { if device.ui.config.input.transfer_pak[i] @@ -196,29 +173,39 @@ pub async fn run() -> std::io::Result<()> { (shutdown_tx, usb_handle, device.ui.usb) = ui::usb::init(); } - if let Some(username) = args.ra_username { + let file_path = dirs.config_dir.join("retroachievements.json"); + if let ra_config = std::fs::read(&file_path).unwrap_or_default() + && let ra_config = + serde_json::from_slice::(ra_config.as_ref()) + .unwrap_or_default() + && (ra_config.enabled || args.ra_username.is_some()) + { + let username = args.ra_username.unwrap_or(ra_config.username); retroachievements::init_client( if cfg!(ra_hardcore_enabled) { - args.ra_hardcore + ra_config.hardcore } else { false }, - args.ra_challenge, - args.ra_leaderboard, + ra_config.challenge, + ra_config.leaderboard, ); let (tx, rx) = tokio::sync::oneshot::channel::(); if let Some(password) = args.ra_password { retroachievements::login_user(username, password, tx); - } else if let Some(token) = args.ra_token { - retroachievements::login_token_user(username, token, tx); + } else if !ra_config.token.is_empty() { + retroachievements::login_token_user(username, ra_config.token, tx); } else { tx.send(false).unwrap(); } rx.await.unwrap(); + ra_config.rich_presence + } else { + false } - } + }; device::run_game( &mut device, @@ -229,7 +216,7 @@ pub async fn run() -> std::io::Result<()> { cheats, load_savestate_slot: args.load_state, }, - args.discord_rich_presence, + rich_presence, ) .await; @@ -325,8 +312,8 @@ async fn android_main(app: slint::android::AndroidApp) { let dirs = ui::get_dirs(); - std::fs::create_dir_all(dirs.config_dir).unwrap(); - std::fs::create_dir_all(dirs.cache_dir).unwrap(); + std::fs::create_dir_all(&dirs.config_dir).unwrap(); + std::fs::create_dir_all(&dirs.cache_dir).unwrap(); std::fs::create_dir_all(dirs.data_dir.join("saves")).unwrap(); std::fs::create_dir_all(dirs.data_dir.join("states")).unwrap(); diff --git a/src/retroachievements.rs b/src/retroachievements.rs index 765735e..8778b2a 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -4,7 +4,7 @@ use crate::ui; use discord_rich_presence::DiscordIpc; -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(serde::Serialize, serde::Deserialize, Default)] pub struct RAConfig { pub username: String, pub token: String, @@ -266,21 +266,6 @@ pub fn get_username() -> Option { } } -#[cfg(feature = "gui")] -pub fn get_token() -> Option { - let c_token = unsafe { ra_get_token() }; - if c_token.is_null() { - None - } else { - Some( - unsafe { std::ffi::CStr::from_ptr(c_token) } - .to_str() - .unwrap() - .to_string(), - ) - } -} - pub fn state_size() -> usize { unsafe { ra_state_size() } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 07f1d01..092b8a2 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -1,4 +1,3 @@ -use crate::retroachievements; use crate::ui; use slint::Model; #[cfg(not(target_os = "android"))] @@ -21,15 +20,6 @@ pub struct NetplayDevice { pub player_number: u8, } -#[derive(Clone)] -pub struct RASettings { - pub enabled: bool, - pub hardcore: bool, - pub challenge: bool, - pub leaderboard: bool, - pub rich_presence: bool, -} - fn check_latest_version(weak: slint::Weak) { let task = ui::WEB_CLIENT .get("https://api.github.com/repos/gopher64/gopher64/releases/latest") @@ -73,13 +63,6 @@ fn run_with_path(weak: slint::Weak, path: std::path::PathBuf) { load_savestate_slot: None, }, None, - RASettings { - enabled: handle.get_ra_enabled(), - hardcore: handle.get_ra_hardcore(), - challenge: handle.get_ra_challenge(), - leaderboard: handle.get_ra_leaderboard(), - rich_presence: handle.get_ra_rich_presence(), - }, weak2, ); }) @@ -550,7 +533,6 @@ pub fn run_rom( file_path: std::path::PathBuf, game_settings: ui::GameSettings, netplay: Option, - ra_settings: RASettings, weak: slint::Weak, ) { tokio::spawn(async move { @@ -588,26 +570,6 @@ pub fn run_rom( cheats_path.to_str().unwrap(), ]); } - if ra_settings.enabled { - command.args([ - "--ra-username", - &retroachievements::get_username().unwrap_or("unknown".into()), - "--ra-token", - &retroachievements::get_token().unwrap_or("unknown".into()), - ]); - if ra_settings.hardcore { - command.args(["--ra-hardcore"]); - } - if ra_settings.challenge { - command.args(["--ra-challenge"]); - } - if ra_settings.leaderboard { - command.args(["--ra-leaderboard"]); - } - if ra_settings.rich_presence { - command.args(["--discord-rich-presence"]); - } - } let success = command .arg(file_path.to_str().unwrap()) @@ -663,11 +625,6 @@ fn open_rom(app: &AppWindow) { let overclock = app.get_overclock_n64_cpu(); let disable_expansion_pak = app.get_disable_expansion_pak(); - let ra_enabled = app.get_ra_enabled(); - let ra_hardcore = app.get_ra_hardcore(); - let ra_challenge = app.get_ra_challenge(); - let ra_leaderboard = app.get_ra_leaderboard(); - let ra_rich_presence = app.get_ra_rich_presence(); let weak = app.as_weak(); tokio::spawn(async move { @@ -681,13 +638,6 @@ fn open_rom(app: &AppWindow) { load_savestate_slot: None, }, None, - RASettings { - enabled: ra_enabled, - hardcore: ra_hardcore, - challenge: ra_challenge, - leaderboard: ra_leaderboard, - rich_presence: ra_rich_presence, - }, weak, ); } diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 113c769..5f82588 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -3,7 +3,7 @@ use crate::device; use crate::ui; use crate::ui::gui::{ AppWindow, CustomNetplayServer, DispatcherDialog, ErrorDialog, NetplayCreate, NetplayDevice, - NetplayJoin, NetplayWait, RASettings, run_rom, save_settings, + NetplayJoin, NetplayWait, run_rom, save_settings, }; use futures::{SinkExt, StreamExt}; use sha2::{Digest, Sha256}; @@ -266,7 +266,6 @@ fn show_custom_url_dialog(weak: slint::Weak, server_url: slint::S pub fn setup_create_window( create_window: &NetplayCreate, game_settings: ui::GameSettings, - ra_settings: RASettings, rom_dir: slint::SharedString, weak_app: slint::Weak, ) { @@ -326,7 +325,6 @@ pub fn setup_create_window( let game_settings = game_settings.clone(); let weak = weak.clone(); let weak_app = weak_app.clone(); - let ra_settings = ra_settings.clone(); tokio::spawn(async move { let response = task.await; weak_dialog @@ -358,7 +356,6 @@ pub fn setup_create_window( game_cheats.to_string(), password.to_string(), game_settings, - ra_settings, weak_app, weak.clone(), ); @@ -388,7 +385,6 @@ pub fn setup_create_window( game_cheats.to_string(), password.to_string(), game_settings.clone(), - ra_settings.clone(), weak_app.clone(), weak.clone(), ); @@ -640,7 +636,6 @@ fn create_session( game_cheats: String, password: String, game_settings: ui::GameSettings, - ra_settings: RASettings, weak_app: slint::Weak, weak: slint::Weak, ) { @@ -739,7 +734,6 @@ fn create_session( cheats: serde_json::from_str(cheats).unwrap(), load_savestate_slot: None, }, - ra_settings, handle.get_peer_addr(), weak_app, ); @@ -778,7 +772,6 @@ fn join_session( game_hash: String, password: String, room_port: i32, - ra_settings: RASettings, weak_app: slint::Weak, weak: slint::Weak, ) { @@ -866,7 +859,6 @@ fn join_session( cheats: serde_json::from_str(cheats).unwrap(), load_savestate_slot: None, }, - ra_settings, handle.get_peer_addr(), weak_app, ); @@ -907,7 +899,6 @@ fn setup_wait_window( player_name: slint::SharedString, port: i32, game_settings: ui::GameSettings, - ra_settings: RASettings, peer_addr: slint::SharedString, weak_app: slint::Weak, ) { @@ -1133,7 +1124,6 @@ fn setup_wait_window( peer_addr: socket_addr, player_number: player_number as u8, }), - ra_settings, weak_app, ); handle.hide().unwrap(); @@ -1177,7 +1167,6 @@ fn setup_wait_window( pub fn setup_join_window( join_window: &NetplayJoin, rom_dir: slint::SharedString, - ra_settings: RASettings, weak_app: slint::Weak, ) { let (netplay_read_sender, netplay_read_receiver): ( @@ -1229,7 +1218,6 @@ pub fn setup_join_window( game_hash.to_string(), password.to_string(), room_port, - ra_settings.clone(), weak_app.clone(), weak.clone(), ); @@ -1256,13 +1244,6 @@ pub fn netplay_window(app: &AppWindow) { cheats: std::collections::HashMap::new(), // not used here load_savestate_slot: None, }, - RASettings { - enabled: handle.get_ra_enabled(), - hardcore: handle.get_ra_hardcore(), - challenge: handle.get_ra_challenge(), - leaderboard: handle.get_ra_leaderboard(), - rich_presence: handle.get_ra_rich_presence(), - }, handle.get_rom_dir(), weak_app, ); @@ -1278,18 +1259,7 @@ pub fn netplay_window(app: &AppWindow) { .upgrade_in_event_loop(move |handle| { let join_window = NetplayJoin::new().unwrap(); save_settings(&handle); - setup_join_window( - &join_window, - handle.get_rom_dir(), - RASettings { - enabled: handle.get_ra_enabled(), - hardcore: handle.get_ra_hardcore(), - challenge: handle.get_ra_challenge(), - leaderboard: handle.get_ra_leaderboard(), - rich_presence: handle.get_ra_rich_presence(), - }, - weak_app, - ); + setup_join_window(&join_window, handle.get_rom_dir(), weak_app); }) .unwrap(); }); From e1b4039a5247589ca5a6e389e78892587932e42e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 19 May 2026 09:43:55 +0200 Subject: [PATCH 0903/1117] dont use open on android (#914) --- Cargo.toml | 2 +- src/ui/gui.rs | 39 ++++++++++++++++--------------------- src/ui/netplay.rs | 11 +++-------- src/ui/retroachievements.rs | 12 +++--------- 4 files changed, 24 insertions(+), 40 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index e256b78..8bf37f3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,6 @@ chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde-big-array = "0.5" -open = "5.3" sha2 = "0.11" sdl3-sys = { version = "0.6", features = ["build-from-source-static"] } sdl3-ttf-sys = { version = "0.6", features = ["build-static-vendored", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } @@ -43,6 +42,7 @@ discord-rich-presence = "1.1" slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "unstable-winit-030", "backend-winit", "renderer-femtovg-wgpu", "accessibility"], optional = true } rfd = {version = "0.17", optional = true } dirs = "6.0" +open = "5.3" [target.'cfg(target_os = "android")'.dependencies] slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "backend-android-activity-06", "accessibility"], optional = true } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 092b8a2..65ff13e 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -46,6 +46,16 @@ fn check_latest_version(weak: slint::Weak) { }); } +#[cfg(not(target_os = "android"))] +pub fn open_uri(path: impl AsRef) { + if let Err(e) = open::that_detached(path) { + eprintln!("Error opening path: {}", e); + } +} + +#[cfg(target_os = "android")] +pub fn open_uri(_path: impl AsRef) {} + fn run_with_path(weak: slint::Weak, path: std::path::PathBuf) { let weak2 = weak.clone(); weak.upgrade_in_event_loop(move |handle| { @@ -127,9 +137,7 @@ fn local_game_window(app: &AppWindow, config: &ui::config::Config) { let saves_path = dirs.data_dir.join("saves"); app.on_saves_folder_button_clicked(move || { - if let Err(e) = open::that_detached(saves_path.clone()) { - eprintln!("Error opening saves folder: {}", e); - } + open_uri(&saves_path); }); #[cfg(not(target_os = "android"))] file_dropped(app); @@ -474,35 +482,22 @@ pub fn save_settings(app: &AppWindow) { fn about_window(app: &AppWindow) { app.on_wiki_button_clicked(move || { - if let Err(e) = open::that_detached("https://github.com/gopher64/gopher64/wiki") { - eprintln!("Error opening wiki: {}", e); - } + open_uri("https://github.com/gopher64/gopher64/wiki"); }); app.on_discord_button_clicked(move || { - if let Err(e) = open::that_detached("https://discord.gg/9RGXq8W8JQ") { - eprintln!("Error opening Discord: {}", e); - } + open_uri("https://discord.gg/9RGXq8W8JQ"); }); app.on_patreon_button_clicked(move || { - if let Err(e) = open::that_detached("https://patreon.com/loganmc10") { - eprintln!("Error opening Patreon: {}", e); - } + open_uri("https://patreon.com/loganmc10"); }); app.on_github_sponsors_button_clicked(move || { - if let Err(e) = open::that_detached("https://github.com/sponsors/loganmc10") { - eprintln!("Error opening GitHub Sponsors: {}", e); - } + open_uri("https://github.com/sponsors/loganmc10"); }); app.on_source_code_button_clicked(move || { - if let Err(e) = open::that_detached("https://github.com/gopher64/gopher64") { - eprintln!("Error opening source code: {}", e); - } + open_uri("https://github.com/gopher64/gopher64"); }); app.on_newversion_button_clicked(move || { - if let Err(e) = open::that_detached("https://github.com/gopher64/gopher64/releases/latest") - { - eprintln!("Error opening new version: {}", e); - } + open_uri("https://github.com/gopher64/gopher64/releases/latest"); }); app.set_version(format!("Version: {}", env!("GIT_DESCRIBE")).into()); diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 5f82588..bb2ac30 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -3,7 +3,7 @@ use crate::device; use crate::ui; use crate::ui::gui::{ AppWindow, CustomNetplayServer, DispatcherDialog, ErrorDialog, NetplayCreate, NetplayDevice, - NetplayJoin, NetplayWait, run_rom, save_settings, + NetplayJoin, NetplayWait, open_uri, run_rom, save_settings, }; use futures::{SinkExt, StreamExt}; use sha2::{Digest, Sha256}; @@ -1265,14 +1265,9 @@ pub fn netplay_window(app: &AppWindow) { }); app.on_netplay_discord_button_clicked(move || { - if let Err(e) = open::that_detached("https://discord.gg/JyW6ZgBUyS") { - eprintln!("Error opening Discord: {}", e); - } + open_uri("https://discord.gg/JyW6ZgBUyS"); }); app.on_netplay_feedback_button_clicked(move || { - if let Err(e) = open::that_detached("https://github.com/gopher64/gopher64/discussions/453") - { - eprintln!("Error opening feedback: {}", e); - } + open_uri("https://github.com/gopher64/gopher64/discussions/453"); }); } diff --git a/src/ui/retroachievements.rs b/src/ui/retroachievements.rs index 81dc5c5..d383553 100644 --- a/src/ui/retroachievements.rs +++ b/src/ui/retroachievements.rs @@ -96,20 +96,14 @@ pub fn ra_window(app: &ui::gui::AppWindow) { ); app.on_ra_games_clicked(move || { - if let Err(e) = - open::that_detached("https://retroachievements.org/system/2-nintendo-64/games") - { - eprintln!("Error opening games: {}", e); - } + ui::gui::open_uri("https://retroachievements.org/system/2-nintendo-64/games"); }); app.on_ra_show_profile_clicked(move || { - if let Err(e) = open::that_detached(format!( + ui::gui::open_uri(format!( "https://retroachievements.org/user/{}", retroachievements::get_username().unwrap_or_default() - )) { - eprintln!("Error opening profile: {}", e); - } + )); }); } From 7eecfa32756ff78c63c0f6031626ce3110b351ef Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 19 May 2026 10:50:42 +0200 Subject: [PATCH 0904/1117] use robius open (#915) * use robius open * more --- Cargo.lock | 136 ++++++++++++++++++++++++------------ Cargo.toml | 2 +- src/ui/gui.rs | 12 ++-- src/ui/retroachievements.rs | 2 +- 4 files changed, 97 insertions(+), 55 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index abdb3e8..055dda8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -212,9 +212,9 @@ dependencies = [ [[package]] name = "android-build" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cac4c64175d504608cf239756339c07f6384a476f97f20a7043f92920b0b8fd" +checksum = "f9fc9904ad2ad097c3c1cfe2eacaaf0fc24710936fa9ed941cb310b7c6ed2ab7" dependencies = [ "windows-sys 0.52.0", ] @@ -735,6 +735,25 @@ dependencies = [ "hybrid-array", ] +[[package]] +name = "block-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae85a0696e7ea3b835a453750bf002770776609115e6d25c6d2ff28a8200f7e7" +dependencies = [ + "objc-sys", +] + +[[package]] +name = "block2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e58aa60e59d8dbfcc36138f5f18be5f24394d33b38b24f7fd0b1caa33095f22f" +dependencies = [ + "block-sys", + "objc2 0.5.2", +] + [[package]] name = "block2" version = "0.5.1" @@ -2248,12 +2267,12 @@ dependencies = [ "fatfs", "futures", "mimalloc", - "open", "postcard", "rand 0.10.1", "regex", "reqwest", "rfd", + "robius-open", "sdl3-image-sys", "sdl3-sys", "sdl3-ttf-sys", @@ -2874,6 +2893,16 @@ dependencies = [ "cc", ] +[[package]] +name = "icrate" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb69199826926eb864697bddd27f73d9fddcffc004f5733131e15b465e30642" +dependencies = [ + "block2 0.4.0", + "objc2 0.5.2", +] + [[package]] name = "icu_collections" version = "2.2.0" @@ -3152,25 +3181,6 @@ version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" -[[package]] -name = "is-docker" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" -dependencies = [ - "once_cell", -] - -[[package]] -name = "is-wsl" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" -dependencies = [ - "is-docker", - "once_cell", -] - [[package]] name = "is_terminal_polyfill" version = "1.70.2" @@ -3848,9 +3858,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" [[package]] name = "num-derive" @@ -4315,17 +4325,6 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" -[[package]] -name = "open" -version = "5.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fbaa89d2ddc8473c78a3adf69eea8cffa28c483b8e02a971ef31527cd0fc92c" -dependencies = [ - "is-wsl", - "libc", - "pathdiff", -] - [[package]] name = "openssl-probe" version = "0.2.1" @@ -4450,12 +4449,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec" -[[package]] -name = "pathdiff" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" - [[package]] name = "pbkdf2" version = "0.13.0" @@ -5169,6 +5162,30 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "robius-android-env" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "087fcb3061ccc432658a605cb868edd44e0efb08e7a159b486f02804a7616bef" +dependencies = [ + "jni 0.21.1", + "ndk-context", +] + +[[package]] +name = "robius-open" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "243e2abbc8c1ca8ddc283056d4675b67e452fd527c3741c5318642da37840ff3" +dependencies = [ + "cfg-if", + "icrate", + "jni 0.21.1", + "objc2 0.5.2", + "robius-android-env", + "windows 0.54.0", +] + [[package]] name = "rowan" version = "0.16.1" @@ -6141,9 +6158,9 @@ dependencies = [ [[package]] name = "tar" -version = "0.4.45" +version = "0.4.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22692a6476a21fa75fdfc11d452fda482af402c008cdbaf3476414e122040973" +checksum = "3f6221d9a6003c78398e3b239969f352578258df48c8eb051caadae0015bc840" dependencies = [ "filetime", "libc", @@ -6497,9 +6514,9 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.10" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68d6fdd9f81c2819c9a8b0e0cd91660e7746a8e6ea2ba7c6b2b057985f6bcb51" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ "bitflags 2.11.1", "bytes", @@ -7306,6 +7323,16 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "windows" +version = "0.54.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49" +dependencies = [ + "windows-core 0.54.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows" version = "0.61.3" @@ -7349,6 +7376,16 @@ dependencies = [ "windows-core 0.62.2", ] +[[package]] +name = "windows-core" +version = "0.54.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65" +dependencies = [ + "windows-result 0.1.2", + "windows-targets 0.52.6", +] + [[package]] name = "windows-core" version = "0.61.2" @@ -7462,6 +7499,15 @@ dependencies = [ "windows-strings 0.5.1", ] +[[package]] +name = "windows-result" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-result" version = "0.3.4" diff --git a/Cargo.toml b/Cargo.toml index 8bf37f3..89d0357 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,6 +19,7 @@ serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde-big-array = "0.5" sha2 = "0.11" +robius-open = { version = "0.1", default-features = false } sdl3-sys = { version = "0.6", features = ["build-from-source-static"] } sdl3-ttf-sys = { version = "0.6", features = ["build-static-vendored", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } sdl3-image-sys = { version = "0.6", features = ["build-static-vendored"] } @@ -42,7 +43,6 @@ discord-rich-presence = "1.1" slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "unstable-winit-030", "backend-winit", "renderer-femtovg-wgpu", "accessibility"], optional = true } rfd = {version = "0.17", optional = true } dirs = "6.0" -open = "5.3" [target.'cfg(target_os = "android")'.dependencies] slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "backend-android-activity-06", "accessibility"], optional = true } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 65ff13e..4751bd6 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -46,16 +46,12 @@ fn check_latest_version(weak: slint::Weak) { }); } -#[cfg(not(target_os = "android"))] -pub fn open_uri(path: impl AsRef) { - if let Err(e) = open::that_detached(path) { - eprintln!("Error opening path: {}", e); +pub fn open_uri(path: &str) { + if let Err(e) = robius_open::Uri::new(path).open() { + eprintln!("Error opening path: {:?}", e); } } -#[cfg(target_os = "android")] -pub fn open_uri(_path: impl AsRef) {} - fn run_with_path(weak: slint::Weak, path: std::path::PathBuf) { let weak2 = weak.clone(); weak.upgrade_in_event_loop(move |handle| { @@ -137,7 +133,7 @@ fn local_game_window(app: &AppWindow, config: &ui::config::Config) { let saves_path = dirs.data_dir.join("saves"); app.on_saves_folder_button_clicked(move || { - open_uri(&saves_path); + open_uri(saves_path.to_str().unwrap()); }); #[cfg(not(target_os = "android"))] file_dropped(app); diff --git a/src/ui/retroachievements.rs b/src/ui/retroachievements.rs index d383553..a410a56 100644 --- a/src/ui/retroachievements.rs +++ b/src/ui/retroachievements.rs @@ -100,7 +100,7 @@ pub fn ra_window(app: &ui::gui::AppWindow) { }); app.on_ra_show_profile_clicked(move || { - ui::gui::open_uri(format!( + ui::gui::open_uri(&format!( "https://retroachievements.org/user/{}", retroachievements::get_username().unwrap_or_default() )); From dbe67f1034f9572832d4936523c80971806e6a17 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 19 May 2026 11:50:01 +0200 Subject: [PATCH 0905/1117] More UI tweaks (#916) * More UI tweaks * more * more --- data/translations/de/LC_MESSAGES/gopher64.po | 52 ++--- data/translations/es/LC_MESSAGES/gopher64.po | 52 ++--- data/translations/fr/LC_MESSAGES/gopher64.po | 52 ++--- data/translations/gopher64.pot | 52 ++--- data/translations/ja/LC_MESSAGES/gopher64.po | 52 ++--- data/translations/nl/LC_MESSAGES/gopher64.po | 52 ++--- .../pt_BR/LC_MESSAGES/gopher64.po | 52 ++--- data/translations/ru/LC_MESSAGES/gopher64.po | 52 ++--- src/ui/gui/cheat_page.slint | 5 +- src/ui/gui/controller_page.slint | 16 +- src/ui/gui/retroachievements_page.slint | 105 +++++----- src/ui/gui/settings_page.slint | 184 ++++++++---------- 12 files changed, 349 insertions(+), 377 deletions(-) diff --git a/data/translations/de/LC_MESSAGES/gopher64.po b/data/translations/de/LC_MESSAGES/gopher64.po index 4b5435c..d18990d 100644 --- a/data/translations/de/LC_MESSAGES/gopher64.po +++ b/data/translations/de/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-19 06:44+0000\n" +"POT-Creation-Date: 2026-05-19 09:43+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: German\n" @@ -102,7 +102,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Cheats für alle ROMs löschen" -#: src/ui/gui/cheat_page.slint:86 +#: src/ui/gui/cheat_page.slint:87 msgctxt "Cheats" msgid "No Cheats Available" msgstr "Keine Cheats verfügbar" @@ -127,17 +127,17 @@ msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Controller-Konfiguration" -#: src/ui/gui/controller_page.slint:168 +#: src/ui/gui/controller_page.slint:171 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Eingabeprofil konfigurieren" -#: src/ui/gui/controller_page.slint:176 +#: src/ui/gui/controller_page.slint:180 msgctxt "ControllerConfig" msgid "Controller Settings" msgstr "Controller-Einstellungen" -#: src/ui/gui/controller_page.slint:186 +#: src/ui/gui/controller_page.slint:190 msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "Controller-Zuweisung" @@ -431,52 +431,52 @@ msgctxt "RetroAchievements" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/retroachievements_page.slint:34 +#: src/ui/gui/retroachievements_page.slint:36 msgctxt "RetroAchievements" msgid "Enabled" msgstr "Aktiviert" -#: src/ui/gui/retroachievements_page.slint:52 +#: src/ui/gui/retroachievements_page.slint:51 msgctxt "RetroAchievements" msgid "Hardcore mode" msgstr "Hardcore-Modus" -#: src/ui/gui/retroachievements_page.slint:64 +#: src/ui/gui/retroachievements_page.slint:60 msgctxt "RetroAchievements" msgid "Challenge Indicators" msgstr "Challenge Tipps" -#: src/ui/gui/retroachievements_page.slint:76 +#: src/ui/gui/retroachievements_page.slint:69 msgctxt "RetroAchievements" msgid "Leaderboard Trackers" msgstr "Bestenlisten-Tracker" -#: src/ui/gui/retroachievements_page.slint:88 +#: src/ui/gui/retroachievements_page.slint:78 msgctxt "RetroAchievements" msgid "Discord Rich Presence" msgstr "Rich Presence für Discord" -#: src/ui/gui/retroachievements_page.slint:105 +#: src/ui/gui/retroachievements_page.slint:96 msgctxt "RetroAchievements" msgid "View Profile" msgstr "Profil anzeigen" -#: src/ui/gui/retroachievements_page.slint:115 +#: src/ui/gui/retroachievements_page.slint:106 msgctxt "RetroAchievements" msgid "Username" msgstr "Benutzername" -#: src/ui/gui/retroachievements_page.slint:125 +#: src/ui/gui/retroachievements_page.slint:116 msgctxt "RetroAchievements" msgid "Password" msgstr "Passwort" -#: src/ui/gui/retroachievements_page.slint:134 +#: src/ui/gui/retroachievements_page.slint:125 msgctxt "RetroAchievements" msgid "Login" msgstr "Anmelden" -#: src/ui/gui/retroachievements_page.slint:150 +#: src/ui/gui/retroachievements_page.slint:141 msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Unterstützte Spiele anzeigen" @@ -486,57 +486,57 @@ msgctxt "Settings" msgid "Settings" msgstr "Einstellungen" -#: src/ui/gui/settings_page.slint:30 +#: src/ui/gui/settings_page.slint:34 msgctxt "Settings" msgid "Resolution:" msgstr "Auflösung:" -#: src/ui/gui/settings_page.slint:46 +#: src/ui/gui/settings_page.slint:48 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAA-Herunterskalierung" -#: src/ui/gui/settings_page.slint:57 +#: src/ui/gui/settings_page.slint:56 msgctxt "Settings" msgid "Integer Scaling" msgstr "Pixelgenaue Skalierung" -#: src/ui/gui/settings_page.slint:68 +#: src/ui/gui/settings_page.slint:64 msgctxt "Settings" msgid "Fullscreen" msgstr "Vollbild" -#: src/ui/gui/settings_page.slint:79 +#: src/ui/gui/settings_page.slint:72 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "16:9 (gestreckt)" -#: src/ui/gui/settings_page.slint:90 +#: src/ui/gui/settings_page.slint:80 msgctxt "Settings" msgid "VSync" msgstr "VSync" -#: src/ui/gui/settings_page.slint:101 +#: src/ui/gui/settings_page.slint:88 msgctxt "Settings" msgid "Apply CRT shader" msgstr "CRT-Shader anwenden" -#: src/ui/gui/settings_page.slint:116 +#: src/ui/gui/settings_page.slint:100 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "N64-CPU übertakten (kann Fehler verursachen)" -#: src/ui/gui/settings_page.slint:127 +#: src/ui/gui/settings_page.slint:108 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Expansion Pak deaktivieren" -#: src/ui/gui/settings_page.slint:138 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "UNFLoader emulieren" -#: src/ui/gui/settings_page.slint:149 +#: src/ui/gui/settings_page.slint:124 msgctxt "Settings" msgid "Emulate VRU" msgstr "VRU emulieren" diff --git a/data/translations/es/LC_MESSAGES/gopher64.po b/data/translations/es/LC_MESSAGES/gopher64.po index 5d8cef6..6e3201d 100644 --- a/data/translations/es/LC_MESSAGES/gopher64.po +++ b/data/translations/es/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-19 06:44+0000\n" +"POT-Creation-Date: 2026-05-19 09:43+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: Gemini\n" "Language-Team: Spanish (Spain)\n" @@ -102,7 +102,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Borrar trucos de todas las ROMs" -#: src/ui/gui/cheat_page.slint:86 +#: src/ui/gui/cheat_page.slint:87 msgctxt "Cheats" msgid "No Cheats Available" msgstr "No hay trucos disponibles" @@ -127,17 +127,17 @@ msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Configuración del mando" -#: src/ui/gui/controller_page.slint:168 +#: src/ui/gui/controller_page.slint:171 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Configurar perfil de entrada" -#: src/ui/gui/controller_page.slint:176 +#: src/ui/gui/controller_page.slint:180 msgctxt "ControllerConfig" msgid "Controller Settings" msgstr "Ajustes del mando" -#: src/ui/gui/controller_page.slint:186 +#: src/ui/gui/controller_page.slint:190 msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "Asignación del mando" @@ -430,52 +430,52 @@ msgctxt "RetroAchievements" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/retroachievements_page.slint:34 +#: src/ui/gui/retroachievements_page.slint:36 msgctxt "RetroAchievements" msgid "Enabled" msgstr "Activado" -#: src/ui/gui/retroachievements_page.slint:52 +#: src/ui/gui/retroachievements_page.slint:51 msgctxt "RetroAchievements" msgid "Hardcore mode" msgstr "Modo Hardcore" -#: src/ui/gui/retroachievements_page.slint:64 +#: src/ui/gui/retroachievements_page.slint:60 msgctxt "RetroAchievements" msgid "Challenge Indicators" msgstr "Indicadores de desafío" -#: src/ui/gui/retroachievements_page.slint:76 +#: src/ui/gui/retroachievements_page.slint:69 msgctxt "RetroAchievements" msgid "Leaderboard Trackers" msgstr "Indicadores de tabla de clasificación" -#: src/ui/gui/retroachievements_page.slint:88 +#: src/ui/gui/retroachievements_page.slint:78 msgctxt "RetroAchievements" msgid "Discord Rich Presence" msgstr "Rich Presence en Discord" -#: src/ui/gui/retroachievements_page.slint:105 +#: src/ui/gui/retroachievements_page.slint:96 msgctxt "RetroAchievements" msgid "View Profile" msgstr "Ver perfil" -#: src/ui/gui/retroachievements_page.slint:115 +#: src/ui/gui/retroachievements_page.slint:106 msgctxt "RetroAchievements" msgid "Username" msgstr "Usuario" -#: src/ui/gui/retroachievements_page.slint:125 +#: src/ui/gui/retroachievements_page.slint:116 msgctxt "RetroAchievements" msgid "Password" msgstr "Contraseña" -#: src/ui/gui/retroachievements_page.slint:134 +#: src/ui/gui/retroachievements_page.slint:125 msgctxt "RetroAchievements" msgid "Login" msgstr "Entrar" -#: src/ui/gui/retroachievements_page.slint:150 +#: src/ui/gui/retroachievements_page.slint:141 msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Ver juegos compatibles" @@ -485,57 +485,57 @@ msgctxt "Settings" msgid "Settings" msgstr "Ajustes" -#: src/ui/gui/settings_page.slint:30 +#: src/ui/gui/settings_page.slint:34 msgctxt "Settings" msgid "Resolution:" msgstr "Resolución:" -#: src/ui/gui/settings_page.slint:46 +#: src/ui/gui/settings_page.slint:48 msgctxt "Settings" msgid "SSAA downscaling" msgstr "Reducción de escala SSAA" -#: src/ui/gui/settings_page.slint:57 +#: src/ui/gui/settings_page.slint:56 msgctxt "Settings" msgid "Integer Scaling" msgstr "Escalado por enteros" -#: src/ui/gui/settings_page.slint:68 +#: src/ui/gui/settings_page.slint:64 msgctxt "Settings" msgid "Fullscreen" msgstr "Pantalla completa" -#: src/ui/gui/settings_page.slint:79 +#: src/ui/gui/settings_page.slint:72 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Pantalla ancha (estirado)" -#: src/ui/gui/settings_page.slint:90 +#: src/ui/gui/settings_page.slint:80 msgctxt "Settings" msgid "VSync" msgstr "Sincronización vertical (VSync)" -#: src/ui/gui/settings_page.slint:101 +#: src/ui/gui/settings_page.slint:88 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Aplicar sombreador CRT" -#: src/ui/gui/settings_page.slint:116 +#: src/ui/gui/settings_page.slint:100 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Overclock CPU N64 (puede causar errores)" -#: src/ui/gui/settings_page.slint:127 +#: src/ui/gui/settings_page.slint:108 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Desactivar Expansion Pak" -#: src/ui/gui/settings_page.slint:138 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Emular UNFLoader" -#: src/ui/gui/settings_page.slint:149 +#: src/ui/gui/settings_page.slint:124 msgctxt "Settings" msgid "Emulate VRU" msgstr "Emular VRU" diff --git a/data/translations/fr/LC_MESSAGES/gopher64.po b/data/translations/fr/LC_MESSAGES/gopher64.po index abec052..e0c1eaa 100644 --- a/data/translations/fr/LC_MESSAGES/gopher64.po +++ b/data/translations/fr/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-19 06:44+0000\n" +"POT-Creation-Date: 2026-05-19 09:43+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: French (France)\n" @@ -102,7 +102,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Effacer la triche pour toutes les ROMs" -#: src/ui/gui/cheat_page.slint:86 +#: src/ui/gui/cheat_page.slint:87 msgctxt "Cheats" msgid "No Cheats Available" msgstr "Aucune triche disponible" @@ -127,17 +127,17 @@ msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Configuration de la manette" -#: src/ui/gui/controller_page.slint:168 +#: src/ui/gui/controller_page.slint:171 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Configurer le profil d'entrée" -#: src/ui/gui/controller_page.slint:176 +#: src/ui/gui/controller_page.slint:180 msgctxt "ControllerConfig" msgid "Controller Settings" msgstr "Paramètres de la manette" -#: src/ui/gui/controller_page.slint:186 +#: src/ui/gui/controller_page.slint:190 msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "Attribution de la manette" @@ -433,52 +433,52 @@ msgctxt "RetroAchievements" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/retroachievements_page.slint:34 +#: src/ui/gui/retroachievements_page.slint:36 msgctxt "RetroAchievements" msgid "Enabled" msgstr "Activé" -#: src/ui/gui/retroachievements_page.slint:52 +#: src/ui/gui/retroachievements_page.slint:51 msgctxt "RetroAchievements" msgid "Hardcore mode" msgstr "Mode hardcore" -#: src/ui/gui/retroachievements_page.slint:64 +#: src/ui/gui/retroachievements_page.slint:60 msgctxt "RetroAchievements" msgid "Challenge Indicators" msgstr "Indicateurs de défi" -#: src/ui/gui/retroachievements_page.slint:76 +#: src/ui/gui/retroachievements_page.slint:69 msgctxt "RetroAchievements" msgid "Leaderboard Trackers" msgstr "Suivi des classements" -#: src/ui/gui/retroachievements_page.slint:88 +#: src/ui/gui/retroachievements_page.slint:78 msgctxt "RetroAchievements" msgid "Discord Rich Presence" msgstr "Rich Presence Discord" -#: src/ui/gui/retroachievements_page.slint:105 +#: src/ui/gui/retroachievements_page.slint:96 msgctxt "RetroAchievements" msgid "View Profile" msgstr "Voir le profil" -#: src/ui/gui/retroachievements_page.slint:115 +#: src/ui/gui/retroachievements_page.slint:106 msgctxt "RetroAchievements" msgid "Username" msgstr "Nom d'utilisateur" -#: src/ui/gui/retroachievements_page.slint:125 +#: src/ui/gui/retroachievements_page.slint:116 msgctxt "RetroAchievements" msgid "Password" msgstr "Mot de passe" -#: src/ui/gui/retroachievements_page.slint:134 +#: src/ui/gui/retroachievements_page.slint:125 msgctxt "RetroAchievements" msgid "Login" msgstr "Connexion" -#: src/ui/gui/retroachievements_page.slint:150 +#: src/ui/gui/retroachievements_page.slint:141 msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Voir les jeux pris en charge" @@ -488,57 +488,57 @@ msgctxt "Settings" msgid "Settings" msgstr "Paramètres" -#: src/ui/gui/settings_page.slint:30 +#: src/ui/gui/settings_page.slint:34 msgctxt "Settings" msgid "Resolution:" msgstr "Résolution :" -#: src/ui/gui/settings_page.slint:46 +#: src/ui/gui/settings_page.slint:48 msgctxt "Settings" msgid "SSAA downscaling" msgstr "Réduction SSAA" -#: src/ui/gui/settings_page.slint:57 +#: src/ui/gui/settings_page.slint:56 msgctxt "Settings" msgid "Integer Scaling" msgstr "Mise à l'échelle par entiers" -#: src/ui/gui/settings_page.slint:68 +#: src/ui/gui/settings_page.slint:64 msgctxt "Settings" msgid "Fullscreen" msgstr "Plein écran" -#: src/ui/gui/settings_page.slint:79 +#: src/ui/gui/settings_page.slint:72 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Écran large (étiré)" -#: src/ui/gui/settings_page.slint:90 +#: src/ui/gui/settings_page.slint:80 msgctxt "Settings" msgid "VSync" msgstr "Synchro verticale" -#: src/ui/gui/settings_page.slint:101 +#: src/ui/gui/settings_page.slint:88 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Appliquer le filtre CRT" -#: src/ui/gui/settings_page.slint:116 +#: src/ui/gui/settings_page.slint:100 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Surcharger le CPU N64 (risque de bugs)" -#: src/ui/gui/settings_page.slint:127 +#: src/ui/gui/settings_page.slint:108 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Désactiver l'Expansion Pak" -#: src/ui/gui/settings_page.slint:138 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Émuler UNFLoader" -#: src/ui/gui/settings_page.slint:149 +#: src/ui/gui/settings_page.slint:124 msgctxt "Settings" msgid "Emulate VRU" msgstr "Émuler le VRU" diff --git a/data/translations/gopher64.pot b/data/translations/gopher64.pot index 862fb2b..6a761c1 100644 --- a/data/translations/gopher64.pot +++ b/data/translations/gopher64.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-05-19 06:44+0000\n" +"POT-Creation-Date: 2026-05-19 09:43+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -102,7 +102,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "" -#: src/ui/gui/cheat_page.slint:86 +#: src/ui/gui/cheat_page.slint:87 msgctxt "Cheats" msgid "No Cheats Available" msgstr "" @@ -127,17 +127,17 @@ msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "" -#: src/ui/gui/controller_page.slint:168 +#: src/ui/gui/controller_page.slint:171 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "" -#: src/ui/gui/controller_page.slint:176 +#: src/ui/gui/controller_page.slint:180 msgctxt "ControllerConfig" msgid "Controller Settings" msgstr "" -#: src/ui/gui/controller_page.slint:186 +#: src/ui/gui/controller_page.slint:190 msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "" @@ -428,52 +428,52 @@ msgctxt "RetroAchievements" msgid "RetroAchievements" msgstr "" -#: src/ui/gui/retroachievements_page.slint:34 +#: src/ui/gui/retroachievements_page.slint:36 msgctxt "RetroAchievements" msgid "Enabled" msgstr "" -#: src/ui/gui/retroachievements_page.slint:52 +#: src/ui/gui/retroachievements_page.slint:51 msgctxt "RetroAchievements" msgid "Hardcore mode" msgstr "" -#: src/ui/gui/retroachievements_page.slint:64 +#: src/ui/gui/retroachievements_page.slint:60 msgctxt "RetroAchievements" msgid "Challenge Indicators" msgstr "" -#: src/ui/gui/retroachievements_page.slint:76 +#: src/ui/gui/retroachievements_page.slint:69 msgctxt "RetroAchievements" msgid "Leaderboard Trackers" msgstr "" -#: src/ui/gui/retroachievements_page.slint:88 +#: src/ui/gui/retroachievements_page.slint:78 msgctxt "RetroAchievements" msgid "Discord Rich Presence" msgstr "" -#: src/ui/gui/retroachievements_page.slint:105 +#: src/ui/gui/retroachievements_page.slint:96 msgctxt "RetroAchievements" msgid "View Profile" msgstr "" -#: src/ui/gui/retroachievements_page.slint:115 +#: src/ui/gui/retroachievements_page.slint:106 msgctxt "RetroAchievements" msgid "Username" msgstr "" -#: src/ui/gui/retroachievements_page.slint:125 +#: src/ui/gui/retroachievements_page.slint:116 msgctxt "RetroAchievements" msgid "Password" msgstr "" -#: src/ui/gui/retroachievements_page.slint:134 +#: src/ui/gui/retroachievements_page.slint:125 msgctxt "RetroAchievements" msgid "Login" msgstr "" -#: src/ui/gui/retroachievements_page.slint:150 +#: src/ui/gui/retroachievements_page.slint:141 msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "" @@ -483,57 +483,57 @@ msgctxt "Settings" msgid "Settings" msgstr "" -#: src/ui/gui/settings_page.slint:30 +#: src/ui/gui/settings_page.slint:34 msgctxt "Settings" msgid "Resolution:" msgstr "" -#: src/ui/gui/settings_page.slint:46 +#: src/ui/gui/settings_page.slint:48 msgctxt "Settings" msgid "SSAA downscaling" msgstr "" -#: src/ui/gui/settings_page.slint:57 +#: src/ui/gui/settings_page.slint:56 msgctxt "Settings" msgid "Integer Scaling" msgstr "" -#: src/ui/gui/settings_page.slint:68 +#: src/ui/gui/settings_page.slint:64 msgctxt "Settings" msgid "Fullscreen" msgstr "" -#: src/ui/gui/settings_page.slint:79 +#: src/ui/gui/settings_page.slint:72 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "" -#: src/ui/gui/settings_page.slint:90 +#: src/ui/gui/settings_page.slint:80 msgctxt "Settings" msgid "VSync" msgstr "" -#: src/ui/gui/settings_page.slint:101 +#: src/ui/gui/settings_page.slint:88 msgctxt "Settings" msgid "Apply CRT shader" msgstr "" -#: src/ui/gui/settings_page.slint:116 +#: src/ui/gui/settings_page.slint:100 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "" -#: src/ui/gui/settings_page.slint:127 +#: src/ui/gui/settings_page.slint:108 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "" -#: src/ui/gui/settings_page.slint:138 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "" -#: src/ui/gui/settings_page.slint:149 +#: src/ui/gui/settings_page.slint:124 msgctxt "Settings" msgid "Emulate VRU" msgstr "" diff --git a/data/translations/ja/LC_MESSAGES/gopher64.po b/data/translations/ja/LC_MESSAGES/gopher64.po index 25da6d2..5c63583 100644 --- a/data/translations/ja/LC_MESSAGES/gopher64.po +++ b/data/translations/ja/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-19 06:44+0000\n" +"POT-Creation-Date: 2026-05-19 09:43+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Japanese\n" @@ -102,7 +102,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "すべてのROMのチートをクリア" -#: src/ui/gui/cheat_page.slint:86 +#: src/ui/gui/cheat_page.slint:87 msgctxt "Cheats" msgid "No Cheats Available" msgstr "利用できるチートはありません" @@ -127,17 +127,17 @@ msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "コントローラー設定" -#: src/ui/gui/controller_page.slint:168 +#: src/ui/gui/controller_page.slint:171 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "入力プロファイルを設定" -#: src/ui/gui/controller_page.slint:176 +#: src/ui/gui/controller_page.slint:180 msgctxt "ControllerConfig" msgid "Controller Settings" msgstr "コントローラー詳細設定" -#: src/ui/gui/controller_page.slint:186 +#: src/ui/gui/controller_page.slint:190 msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "コントローラー割り当て" @@ -430,52 +430,52 @@ msgctxt "RetroAchievements" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/retroachievements_page.slint:34 +#: src/ui/gui/retroachievements_page.slint:36 msgctxt "RetroAchievements" msgid "Enabled" msgstr "有効" -#: src/ui/gui/retroachievements_page.slint:52 +#: src/ui/gui/retroachievements_page.slint:51 msgctxt "RetroAchievements" msgid "Hardcore mode" msgstr "ハードコアモード" -#: src/ui/gui/retroachievements_page.slint:64 +#: src/ui/gui/retroachievements_page.slint:60 msgctxt "RetroAchievements" msgid "Challenge Indicators" msgstr "チャレンジ表示" -#: src/ui/gui/retroachievements_page.slint:76 +#: src/ui/gui/retroachievements_page.slint:69 msgctxt "RetroAchievements" msgid "Leaderboard Trackers" msgstr "リーダーボード追跡" -#: src/ui/gui/retroachievements_page.slint:88 +#: src/ui/gui/retroachievements_page.slint:78 msgctxt "RetroAchievements" msgid "Discord Rich Presence" msgstr "Discord のリッチプレゼンス" -#: src/ui/gui/retroachievements_page.slint:105 +#: src/ui/gui/retroachievements_page.slint:96 msgctxt "RetroAchievements" msgid "View Profile" msgstr "プロフィールを表示" -#: src/ui/gui/retroachievements_page.slint:115 +#: src/ui/gui/retroachievements_page.slint:106 msgctxt "RetroAchievements" msgid "Username" msgstr "ユーザー名" -#: src/ui/gui/retroachievements_page.slint:125 +#: src/ui/gui/retroachievements_page.slint:116 msgctxt "RetroAchievements" msgid "Password" msgstr "パスワード" -#: src/ui/gui/retroachievements_page.slint:134 +#: src/ui/gui/retroachievements_page.slint:125 msgctxt "RetroAchievements" msgid "Login" msgstr "ログイン" -#: src/ui/gui/retroachievements_page.slint:150 +#: src/ui/gui/retroachievements_page.slint:141 msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "対応ゲームを表示" @@ -485,57 +485,57 @@ msgctxt "Settings" msgid "Settings" msgstr "設定" -#: src/ui/gui/settings_page.slint:30 +#: src/ui/gui/settings_page.slint:34 msgctxt "Settings" msgid "Resolution:" msgstr "解像度:" -#: src/ui/gui/settings_page.slint:46 +#: src/ui/gui/settings_page.slint:48 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAAダウンスケール" -#: src/ui/gui/settings_page.slint:57 +#: src/ui/gui/settings_page.slint:56 msgctxt "Settings" msgid "Integer Scaling" msgstr "整数倍スケーリング" -#: src/ui/gui/settings_page.slint:68 +#: src/ui/gui/settings_page.slint:64 msgctxt "Settings" msgid "Fullscreen" msgstr "全画面表示" -#: src/ui/gui/settings_page.slint:79 +#: src/ui/gui/settings_page.slint:72 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "ワイド画面(伸ばす)" -#: src/ui/gui/settings_page.slint:90 +#: src/ui/gui/settings_page.slint:80 msgctxt "Settings" msgid "VSync" msgstr "垂直同期(VSync)" -#: src/ui/gui/settings_page.slint:101 +#: src/ui/gui/settings_page.slint:88 msgctxt "Settings" msgid "Apply CRT shader" msgstr "CRTシェーダーを適用" -#: src/ui/gui/settings_page.slint:116 +#: src/ui/gui/settings_page.slint:100 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "N64のCPUをオーバークロック(不具合の原因になることがあります)" -#: src/ui/gui/settings_page.slint:127 +#: src/ui/gui/settings_page.slint:108 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "拡張パックを無効にする" -#: src/ui/gui/settings_page.slint:138 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "UNFLoaderをエミュレート" -#: src/ui/gui/settings_page.slint:149 +#: src/ui/gui/settings_page.slint:124 msgctxt "Settings" msgid "Emulate VRU" msgstr "VRUをエミュレート" diff --git a/data/translations/nl/LC_MESSAGES/gopher64.po b/data/translations/nl/LC_MESSAGES/gopher64.po index 18b0735..c76e5ae 100644 --- a/data/translations/nl/LC_MESSAGES/gopher64.po +++ b/data/translations/nl/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-19 06:44+0000\n" +"POT-Creation-Date: 2026-05-19 09:43+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Dutch (Netherlands)\n" @@ -102,7 +102,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Cheats wissen voor alle ROM's" -#: src/ui/gui/cheat_page.slint:86 +#: src/ui/gui/cheat_page.slint:87 msgctxt "Cheats" msgid "No Cheats Available" msgstr "Geen cheats beschikbaar" @@ -127,17 +127,17 @@ msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Controllerconfiguratie" -#: src/ui/gui/controller_page.slint:168 +#: src/ui/gui/controller_page.slint:171 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Invoerprofiel configureren" -#: src/ui/gui/controller_page.slint:176 +#: src/ui/gui/controller_page.slint:180 msgctxt "ControllerConfig" msgid "Controller Settings" msgstr "Controllerinstellingen" -#: src/ui/gui/controller_page.slint:186 +#: src/ui/gui/controller_page.slint:190 msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "Controllertoewijzing" @@ -431,52 +431,52 @@ msgctxt "RetroAchievements" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/retroachievements_page.slint:34 +#: src/ui/gui/retroachievements_page.slint:36 msgctxt "RetroAchievements" msgid "Enabled" msgstr "Ingeschakeld" -#: src/ui/gui/retroachievements_page.slint:52 +#: src/ui/gui/retroachievements_page.slint:51 msgctxt "RetroAchievements" msgid "Hardcore mode" msgstr "Hardcore-modus" -#: src/ui/gui/retroachievements_page.slint:64 +#: src/ui/gui/retroachievements_page.slint:60 msgctxt "RetroAchievements" msgid "Challenge Indicators" msgstr "Challenge-indicatoren" -#: src/ui/gui/retroachievements_page.slint:76 +#: src/ui/gui/retroachievements_page.slint:69 msgctxt "RetroAchievements" msgid "Leaderboard Trackers" msgstr "Leaderboard-trackers" -#: src/ui/gui/retroachievements_page.slint:88 +#: src/ui/gui/retroachievements_page.slint:78 msgctxt "RetroAchievements" msgid "Discord Rich Presence" msgstr "Discord Rich Presence" -#: src/ui/gui/retroachievements_page.slint:105 +#: src/ui/gui/retroachievements_page.slint:96 msgctxt "RetroAchievements" msgid "View Profile" msgstr "Profiel bekijken" -#: src/ui/gui/retroachievements_page.slint:115 +#: src/ui/gui/retroachievements_page.slint:106 msgctxt "RetroAchievements" msgid "Username" msgstr "Gebruikersnaam" -#: src/ui/gui/retroachievements_page.slint:125 +#: src/ui/gui/retroachievements_page.slint:116 msgctxt "RetroAchievements" msgid "Password" msgstr "Wachtwoord" -#: src/ui/gui/retroachievements_page.slint:134 +#: src/ui/gui/retroachievements_page.slint:125 msgctxt "RetroAchievements" msgid "Login" msgstr "Inloggen" -#: src/ui/gui/retroachievements_page.slint:150 +#: src/ui/gui/retroachievements_page.slint:141 msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Ondersteunde spellen bekijken" @@ -486,57 +486,57 @@ msgctxt "Settings" msgid "Settings" msgstr "Instellingen" -#: src/ui/gui/settings_page.slint:30 +#: src/ui/gui/settings_page.slint:34 msgctxt "Settings" msgid "Resolution:" msgstr "Resolutie:" -#: src/ui/gui/settings_page.slint:46 +#: src/ui/gui/settings_page.slint:48 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAA-downscaling" -#: src/ui/gui/settings_page.slint:57 +#: src/ui/gui/settings_page.slint:56 msgctxt "Settings" msgid "Integer Scaling" msgstr "Schalen in hele getallen" -#: src/ui/gui/settings_page.slint:68 +#: src/ui/gui/settings_page.slint:64 msgctxt "Settings" msgid "Fullscreen" msgstr "Volledig scherm" -#: src/ui/gui/settings_page.slint:79 +#: src/ui/gui/settings_page.slint:72 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Breedbeeld (uitgerekt)" -#: src/ui/gui/settings_page.slint:90 +#: src/ui/gui/settings_page.slint:80 msgctxt "Settings" msgid "VSync" msgstr "VSync" -#: src/ui/gui/settings_page.slint:101 +#: src/ui/gui/settings_page.slint:88 msgctxt "Settings" msgid "Apply CRT shader" msgstr "CRT-shader toepassen" -#: src/ui/gui/settings_page.slint:116 +#: src/ui/gui/settings_page.slint:100 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "N64-CPU overklokken (kan bugs veroorzaken)" -#: src/ui/gui/settings_page.slint:127 +#: src/ui/gui/settings_page.slint:108 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Expansion Pak uitschakelen" -#: src/ui/gui/settings_page.slint:138 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "UNFLoader emuleren" -#: src/ui/gui/settings_page.slint:149 +#: src/ui/gui/settings_page.slint:124 msgctxt "Settings" msgid "Emulate VRU" msgstr "VRU emuleren" diff --git a/data/translations/pt_BR/LC_MESSAGES/gopher64.po b/data/translations/pt_BR/LC_MESSAGES/gopher64.po index 37f2ba7..2d8d9ee 100644 --- a/data/translations/pt_BR/LC_MESSAGES/gopher64.po +++ b/data/translations/pt_BR/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-05-19 06:44+0000\n" +"POT-Creation-Date: 2026-05-19 09:43+0000\n" "PO-Revision-Date: 2026-05-11 18:11-3000\n" "Last-Translator: EDUARDO CARVALHO \n" "Language-Team: LANGUAGE \n" @@ -102,7 +102,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Limpar Trapaças para todas as ROMs" -#: src/ui/gui/cheat_page.slint:86 +#: src/ui/gui/cheat_page.slint:87 msgctxt "Cheats" msgid "No Cheats Available" msgstr "Sem trapaças disponíveis" @@ -127,17 +127,17 @@ msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Configurar Controles" -#: src/ui/gui/controller_page.slint:168 +#: src/ui/gui/controller_page.slint:171 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Configurar Perfil de Controle" -#: src/ui/gui/controller_page.slint:176 +#: src/ui/gui/controller_page.slint:180 msgctxt "ControllerConfig" msgid "Controller Settings" msgstr "Configurações do controle" -#: src/ui/gui/controller_page.slint:186 +#: src/ui/gui/controller_page.slint:190 msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "Atribuição do controle" @@ -432,52 +432,52 @@ msgctxt "RetroAchievements" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/retroachievements_page.slint:34 +#: src/ui/gui/retroachievements_page.slint:36 msgctxt "RetroAchievements" msgid "Enabled" msgstr "Habilitado" -#: src/ui/gui/retroachievements_page.slint:52 +#: src/ui/gui/retroachievements_page.slint:51 msgctxt "RetroAchievements" msgid "Hardcore mode" msgstr "Modo Hardcore" -#: src/ui/gui/retroachievements_page.slint:64 +#: src/ui/gui/retroachievements_page.slint:60 msgctxt "RetroAchievements" msgid "Challenge Indicators" msgstr "Indicadores de Desafio" -#: src/ui/gui/retroachievements_page.slint:76 +#: src/ui/gui/retroachievements_page.slint:69 msgctxt "RetroAchievements" msgid "Leaderboard Trackers" msgstr "Rastreadores de Tabela" -#: src/ui/gui/retroachievements_page.slint:88 +#: src/ui/gui/retroachievements_page.slint:78 msgctxt "RetroAchievements" msgid "Discord Rich Presence" msgstr "Rich Presence no Discord" -#: src/ui/gui/retroachievements_page.slint:105 +#: src/ui/gui/retroachievements_page.slint:96 msgctxt "RetroAchievements" msgid "View Profile" msgstr "Ver Perfil" -#: src/ui/gui/retroachievements_page.slint:115 +#: src/ui/gui/retroachievements_page.slint:106 msgctxt "RetroAchievements" msgid "Username" msgstr "Usuário" -#: src/ui/gui/retroachievements_page.slint:125 +#: src/ui/gui/retroachievements_page.slint:116 msgctxt "RetroAchievements" msgid "Password" msgstr "Senha" -#: src/ui/gui/retroachievements_page.slint:134 +#: src/ui/gui/retroachievements_page.slint:125 msgctxt "RetroAchievements" msgid "Login" msgstr "Login" -#: src/ui/gui/retroachievements_page.slint:150 +#: src/ui/gui/retroachievements_page.slint:141 msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Ver Jogos com Suporte" @@ -487,57 +487,57 @@ msgctxt "Settings" msgid "Settings" msgstr "Configurações" -#: src/ui/gui/settings_page.slint:30 +#: src/ui/gui/settings_page.slint:34 msgctxt "Settings" msgid "Resolution:" msgstr "Resolução:" -#: src/ui/gui/settings_page.slint:46 +#: src/ui/gui/settings_page.slint:48 msgctxt "Settings" msgid "SSAA downscaling" msgstr "Redução de SSAA" -#: src/ui/gui/settings_page.slint:57 +#: src/ui/gui/settings_page.slint:56 msgctxt "Settings" msgid "Integer Scaling" msgstr "Proporção Íntegra" -#: src/ui/gui/settings_page.slint:68 +#: src/ui/gui/settings_page.slint:64 msgctxt "Settings" msgid "Fullscreen" msgstr "Tela Cheia" -#: src/ui/gui/settings_page.slint:79 +#: src/ui/gui/settings_page.slint:72 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Widescreen (esticar)" -#: src/ui/gui/settings_page.slint:90 +#: src/ui/gui/settings_page.slint:80 msgctxt "Settings" msgid "VSync" msgstr "VSync" -#: src/ui/gui/settings_page.slint:101 +#: src/ui/gui/settings_page.slint:88 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Aplicar filtro de CRT" -#: src/ui/gui/settings_page.slint:116 +#: src/ui/gui/settings_page.slint:100 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Overclock da CPU do N64 (pode causar bugs)" -#: src/ui/gui/settings_page.slint:127 +#: src/ui/gui/settings_page.slint:108 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Desabilitar Expansion Pak" -#: src/ui/gui/settings_page.slint:138 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Emular UNFLoader" -#: src/ui/gui/settings_page.slint:149 +#: src/ui/gui/settings_page.slint:124 msgctxt "Settings" msgid "Emulate VRU" msgstr "Emular VRU" diff --git a/data/translations/ru/LC_MESSAGES/gopher64.po b/data/translations/ru/LC_MESSAGES/gopher64.po index 4ae19f7..b04fac7 100644 --- a/data/translations/ru/LC_MESSAGES/gopher64.po +++ b/data/translations/ru/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-19 06:44+0000\n" +"POT-Creation-Date: 2026-05-19 09:43+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Russian\n" @@ -102,7 +102,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Очистить читы для всех ROMов" -#: src/ui/gui/cheat_page.slint:86 +#: src/ui/gui/cheat_page.slint:87 msgctxt "Cheats" msgid "No Cheats Available" msgstr "Читы недоступны" @@ -127,17 +127,17 @@ msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Настройка контроллера" -#: src/ui/gui/controller_page.slint:168 +#: src/ui/gui/controller_page.slint:171 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Настроить профиль ввода" -#: src/ui/gui/controller_page.slint:176 +#: src/ui/gui/controller_page.slint:180 msgctxt "ControllerConfig" msgid "Controller Settings" msgstr "Настройки контроллера" -#: src/ui/gui/controller_page.slint:186 +#: src/ui/gui/controller_page.slint:190 msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "Назначение контроллера" @@ -430,52 +430,52 @@ msgctxt "RetroAchievements" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/retroachievements_page.slint:34 +#: src/ui/gui/retroachievements_page.slint:36 msgctxt "RetroAchievements" msgid "Enabled" msgstr "Включено" -#: src/ui/gui/retroachievements_page.slint:52 +#: src/ui/gui/retroachievements_page.slint:51 msgctxt "RetroAchievements" msgid "Hardcore mode" msgstr "Хардкорный режим" -#: src/ui/gui/retroachievements_page.slint:64 +#: src/ui/gui/retroachievements_page.slint:60 msgctxt "RetroAchievements" msgid "Challenge Indicators" msgstr "Индикаторы испытаний" -#: src/ui/gui/retroachievements_page.slint:76 +#: src/ui/gui/retroachievements_page.slint:69 msgctxt "RetroAchievements" msgid "Leaderboard Trackers" msgstr "Трекеры таблицы лидеров" -#: src/ui/gui/retroachievements_page.slint:88 +#: src/ui/gui/retroachievements_page.slint:78 msgctxt "RetroAchievements" msgid "Discord Rich Presence" msgstr "Расширенный статус Discord" -#: src/ui/gui/retroachievements_page.slint:105 +#: src/ui/gui/retroachievements_page.slint:96 msgctxt "RetroAchievements" msgid "View Profile" msgstr "Просмотреть профиль" -#: src/ui/gui/retroachievements_page.slint:115 +#: src/ui/gui/retroachievements_page.slint:106 msgctxt "RetroAchievements" msgid "Username" msgstr "Имя пользователя" -#: src/ui/gui/retroachievements_page.slint:125 +#: src/ui/gui/retroachievements_page.slint:116 msgctxt "RetroAchievements" msgid "Password" msgstr "Пароль" -#: src/ui/gui/retroachievements_page.slint:134 +#: src/ui/gui/retroachievements_page.slint:125 msgctxt "RetroAchievements" msgid "Login" msgstr "Войти" -#: src/ui/gui/retroachievements_page.slint:150 +#: src/ui/gui/retroachievements_page.slint:141 msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Просмотреть поддерживаемые игры" @@ -485,57 +485,57 @@ msgctxt "Settings" msgid "Settings" msgstr "Настройки" -#: src/ui/gui/settings_page.slint:30 +#: src/ui/gui/settings_page.slint:34 msgctxt "Settings" msgid "Resolution:" msgstr "Разрешение:" -#: src/ui/gui/settings_page.slint:46 +#: src/ui/gui/settings_page.slint:48 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAA даунскейлинг" -#: src/ui/gui/settings_page.slint:57 +#: src/ui/gui/settings_page.slint:56 msgctxt "Settings" msgid "Integer Scaling" msgstr "Целочисленное масштабирование" -#: src/ui/gui/settings_page.slint:68 +#: src/ui/gui/settings_page.slint:64 msgctxt "Settings" msgid "Fullscreen" msgstr "Полноэкранный режим" -#: src/ui/gui/settings_page.slint:79 +#: src/ui/gui/settings_page.slint:72 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Широкоэкранный режим (растянуто)" -#: src/ui/gui/settings_page.slint:90 +#: src/ui/gui/settings_page.slint:80 msgctxt "Settings" msgid "VSync" msgstr "Вертикальная синхронизация" -#: src/ui/gui/settings_page.slint:101 +#: src/ui/gui/settings_page.slint:88 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Применить шейдер ЭЛТ" -#: src/ui/gui/settings_page.slint:116 +#: src/ui/gui/settings_page.slint:100 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Разгон процессора N64 (может вызвать ошибки)" -#: src/ui/gui/settings_page.slint:127 +#: src/ui/gui/settings_page.slint:108 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Отключить Expansion Pak" -#: src/ui/gui/settings_page.slint:138 +#: src/ui/gui/settings_page.slint:116 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Эмулировать UNFLoader" -#: src/ui/gui/settings_page.slint:149 +#: src/ui/gui/settings_page.slint:124 msgctxt "Settings" msgid "Emulate VRU" msgstr "Эмулировать VRU" diff --git a/src/ui/gui/cheat_page.slint b/src/ui/gui/cheat_page.slint index 04cf9bb..fff6862 100644 --- a/src/ui/gui/cheat_page.slint +++ b/src/ui/gui/cheat_page.slint @@ -48,9 +48,10 @@ export component Cheats inherits Page { Rectangle { } if CheatsData.cheats.length > 0:ListView { - preferred-height: 500px; - preferred-width: 520px; + preferred-height: root.height; + horizontal-stretch: 1; for data in CheatsData.cheats: VerticalBox { + width: parent.width; Text { text: data.cheat_name; font-size: 16px; diff --git a/src/ui/gui/controller_page.slint b/src/ui/gui/controller_page.slint index 8708184..9a4cb6d 100644 --- a/src/ui/gui/controller_page.slint +++ b/src/ui/gui/controller_page.slint @@ -1,7 +1,7 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { Switch, ComboBox, Button, VerticalBox, GroupBox } from "std-widgets.slint"; +import { Switch, ComboBox, Button, HorizontalBox, VerticalBox, GroupBox } from "std-widgets.slint"; import { Page } from "page.slint"; import { State } from "localgame_page.slint"; @@ -164,11 +164,15 @@ export component ControllerConfig inherits Page { spacing: 8px; alignment: start; - Button { - text: @tr("Configure Input Profile"); - enabled: !State.game_running; - clicked => { - input_profile_button_clicked(); + HorizontalBox { + alignment: start; + + Button { + text: @tr("Configure Input Profile"); + enabled: !State.game_running; + clicked => { + input_profile_button_clicked(); + } } } diff --git a/src/ui/gui/retroachievements_page.slint b/src/ui/gui/retroachievements_page.slint index 4f98e13..8ca492c 100644 --- a/src/ui/gui/retroachievements_page.slint +++ b/src/ui/gui/retroachievements_page.slint @@ -29,68 +29,59 @@ export component RetroAchievements inherits Page { VerticalBox { alignment: start; HorizontalBox { - alignment: start; - Switch { - text: @tr("Enabled"); - checked: RAData.enabled; - toggled => { - RAData.enabled = self.checked; - if (!RAData.enabled) { - RAData.ra_username = ""; - username_widget.text = ""; - password_widget.text = ""; - RAData.current_user_message = RAData.not_logged_in; - RAData.ra_show_profile = false; + alignment: center; + VerticalBox { + alignment: start; + Switch { + text: @tr("Enabled"); + checked: RAData.enabled; + toggled => { + RAData.enabled = self.checked; + if (!RAData.enabled) { + RAData.ra_username = ""; + username_widget.text = ""; + password_widget.text = ""; + RAData.current_user_message = RAData.not_logged_in; + RAData.ra_show_profile = false; + } + ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard,RAData.rich_presence); } - ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard,RAData.rich_presence); } - } - } - if !RAData.ra_softcore_only:HorizontalBox { - alignment: start; - Switch { - text: @tr("Hardcore mode"); - checked: RAData.hardcore; - enabled: RAData.enabled; - toggled => { - RAData.hardcore = self.checked; - ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard,RAData.rich_presence); + if !RAData.ra_softcore_only: Switch { + text: @tr("Hardcore mode"); + checked: RAData.hardcore; + enabled: RAData.enabled; + toggled => { + RAData.hardcore = self.checked; + ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard,RAData.rich_presence); + } } - } - } - HorizontalBox { - alignment: start; - Switch { - text: @tr("Challenge Indicators"); - checked: RAData.challenge; - enabled: RAData.enabled; - toggled => { - RAData.challenge = self.checked; - ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard,RAData.rich_presence); + Switch { + text: @tr("Challenge Indicators"); + checked: RAData.challenge; + enabled: RAData.enabled; + toggled => { + RAData.challenge = self.checked; + ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard,RAData.rich_presence); + } } - } - } - HorizontalBox { - alignment: start; - Switch { - text: @tr("Leaderboard Trackers"); - checked: RAData.leaderboard; - enabled: RAData.enabled; - toggled => { - RAData.leaderboard = self.checked; - ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard,RAData.rich_presence); + Switch { + text: @tr("Leaderboard Trackers"); + checked: RAData.leaderboard; + enabled: RAData.enabled; + toggled => { + RAData.leaderboard = self.checked; + ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard,RAData.rich_presence); + } } - } - } - HorizontalBox { - alignment: start; - Switch { - text: @tr("Discord Rich Presence"); - checked: RAData.rich_presence; - enabled: RAData.enabled; - toggled => { - RAData.rich_presence = self.checked; - ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard,RAData.rich_presence); + Switch { + text: @tr("Discord Rich Presence"); + checked: RAData.rich_presence; + enabled: RAData.enabled; + toggled => { + RAData.rich_presence = self.checked; + ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard,RAData.rich_presence); + } } } } diff --git a/src/ui/gui/settings_page.slint b/src/ui/gui/settings_page.slint index 6168c0c..f0e5517 100644 --- a/src/ui/gui/settings_page.slint +++ b/src/ui/gui/settings_page.slint @@ -25,131 +25,107 @@ export component Settings inherits Page { VerticalBox { alignment: start; HorizontalBox { - alignment: start; - Text { - text: @tr("Resolution:"); - vertical-alignment: center; - } + alignment: center; + VerticalBox { + alignment: start; + HorizontalBox { + alignment: start; + Text { + text: @tr("Resolution:"); + vertical-alignment: center; + } - ComboBox { - model: ["1x", "2x", "4x", "8x"]; - current-index: SettingsData.resolution; - selected => { - SettingsData.resolution = self.current-index; + ComboBox { + model: ["1x", "2x", "4x", "8x"]; + current-index: SettingsData.resolution; + selected => { + SettingsData.resolution = self.current-index; + } + } } - } - } - HorizontalBox { - alignment: start; - Switch { - text: @tr("SSAA downscaling"); - checked: SettingsData.ssaa; - toggled => { - SettingsData.ssaa = self.checked; + Switch { + text: @tr("SSAA downscaling"); + checked: SettingsData.ssaa; + toggled => { + SettingsData.ssaa = self.checked; + } } - } - } - HorizontalBox { - alignment: start; - Switch { - text: @tr("Integer Scaling"); - checked: SettingsData.integer_scaling; - toggled => { - SettingsData.integer_scaling = self.checked; + Switch { + text: @tr("Integer Scaling"); + checked: SettingsData.integer_scaling; + toggled => { + SettingsData.integer_scaling = self.checked; + } } - } - } - HorizontalBox { - alignment: start; - Switch { - text: @tr("Fullscreen"); - checked: SettingsData.fullscreen; - toggled => { - SettingsData.fullscreen = self.checked; + Switch { + text: @tr("Fullscreen"); + checked: SettingsData.fullscreen; + toggled => { + SettingsData.fullscreen = self.checked; + } } - } - } - HorizontalBox { - alignment: start; - Switch { - text: @tr("Widescreen (stretch)"); - checked: SettingsData.widescreen; - toggled => { - SettingsData.widescreen = self.checked; + Switch { + text: @tr("Widescreen (stretch)"); + checked: SettingsData.widescreen; + toggled => { + SettingsData.widescreen = self.checked; + } } - } - } - HorizontalBox { - alignment: start; - Switch { - text: @tr("VSync"); - checked: SettingsData.vsync; - toggled => { - SettingsData.vsync = self.checked; + Switch { + text: @tr("VSync"); + checked: SettingsData.vsync; + toggled => { + SettingsData.vsync = self.checked; + } } - } - } - HorizontalBox { - alignment: start; - Switch { - text: @tr("Apply CRT shader"); - checked: SettingsData.apply_crt_shader; - toggled => { - SettingsData.apply_crt_shader = self.checked; + Switch { + text: @tr("Apply CRT shader"); + checked: SettingsData.apply_crt_shader; + toggled => { + SettingsData.apply_crt_shader = self.checked; + } } - } - } - Rectangle { - height: 20px; - } - - HorizontalBox { - alignment: start; - Switch { - text: @tr("Overclock N64 CPU (may cause bugs)"); - checked: SettingsData.overclock_n64_cpu; - toggled => { - SettingsData.overclock_n64_cpu = self.checked; + Rectangle { + height: 20px; } - } - } - HorizontalBox { - alignment: start; - Switch { - text: @tr("Disable Expansion Pak"); - checked: SettingsData.disable_expansion_pak; - toggled => { - SettingsData.disable_expansion_pak = self.checked; + Switch { + text: @tr("Overclock N64 CPU (may cause bugs)"); + checked: SettingsData.overclock_n64_cpu; + toggled => { + SettingsData.overclock_n64_cpu = self.checked; + } } - } - } - HorizontalBox { - alignment: start; - Switch { - text: @tr("Emulate UNFLoader"); - checked: SettingsData.emulate_usb; - toggled => { - SettingsData.emulate_usb = self.checked; + Switch { + text: @tr("Disable Expansion Pak"); + checked: SettingsData.disable_expansion_pak; + toggled => { + SettingsData.disable_expansion_pak = self.checked; + } } - } - } - HorizontalBox { - alignment: start; - Switch { - text: @tr("Emulate VRU"); - checked: SettingsData.emulate_vru; - toggled => { - SettingsData.emulate_vru = self.checked; + Switch { + text: @tr("Emulate UNFLoader"); + checked: SettingsData.emulate_usb; + toggled => { + SettingsData.emulate_usb = self.checked; + } + } + + Switch { + text: @tr("Emulate VRU"); + checked: SettingsData.emulate_vru; + toggled => { + SettingsData.emulate_vru = self.checked; + } } } } From be9ba1366efd8a45e6e8b3f3a3ddc997242bdfe8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 19 May 2026 14:10:25 +0200 Subject: [PATCH 0906/1117] move some android guards (#917) * move some android guards * more --- src/ui/gui.rs | 5 +---- src/ui/input.rs | 12 ++++++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 4751bd6..f521507 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -139,7 +139,6 @@ fn local_game_window(app: &AppWindow, config: &ui::config::Config) { file_dropped(app); } -#[cfg(not(target_os = "android"))] fn input_profiles(config: &ui::config::Config) -> Vec { let mut profiles = vec![]; for key in config.input.input_profiles.keys() { @@ -178,7 +177,6 @@ fn settings_window(app: &AppWindow, config: &ui::config::Config) { } } -#[cfg(not(target_os = "android"))] fn update_input_profiles(weak: &slint::Weak, config: &ui::config::Config) { let profiles = input_profiles(config); let config_bindings = config.input.input_profile_binding.clone(); @@ -224,8 +222,8 @@ fn clear_gb_paths(weak: &slint::Weak, player: i32) { .unwrap(); } -#[cfg(not(target_os = "android"))] fn controller_window(app: &AppWindow, config: &ui::config::Config) { + #[cfg(not(target_os = "android"))] ui::sdl_init(sdl3_sys::init::SDL_INIT_GAMEPAD); app.set_emulate_vru(config.input.emulate_vru); @@ -510,7 +508,6 @@ pub fn app_window() { { let config = ui::config::Config::new(); settings_window(&app, &config); - #[cfg(not(target_os = "android"))] controller_window(&app, &config); local_game_window(&app, &config); } diff --git a/src/ui/input.rs b/src/ui/input.rs index 327034e..937e73f 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -343,6 +343,7 @@ fn hotkey_pressed( pressed } +#[cfg(not(target_os = "android"))] pub fn get_controller_names() -> Vec { let mut controllers: Vec = vec![]; @@ -359,6 +360,11 @@ pub fn get_controller_names() -> Vec { controllers } +#[cfg(target_os = "android")] +pub fn get_controller_names() -> Vec { + vec!["None".into()] +} + #[cfg(not(target_os = "android"))] #[cfg(feature = "gui")] pub fn get_controller_paths() -> Vec { @@ -377,6 +383,12 @@ pub fn get_controller_paths() -> Vec { controller_paths } +#[cfg(target_os = "android")] +#[cfg(feature = "gui")] +pub fn get_controller_paths() -> Vec { + vec![String::new()] +} + fn handle_joystick_events(ui: &mut ui::Ui) { let joystick_event = unsafe { ui::video::get_joystick_event() }; if joystick_event.joystick_id != 0 { From 11a49fd687900349f29334b6e29da9f31c8b015f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 19 May 2026 15:36:48 +0200 Subject: [PATCH 0907/1117] open crate only for gui (#919) --- Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 89d0357..bceef27 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ rust-version = "1.95.0" [features] default = ["gui"] -gui = ["dep:rfd", "dep:slint", "dep:slint-build"] +gui = ["dep:rfd", "dep:slint", "dep:robius-open", "dep:slint-build"] [lib] crate-type = ["cdylib", "rlib"] @@ -19,7 +19,7 @@ serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde-big-array = "0.5" sha2 = "0.11" -robius-open = { version = "0.1", default-features = false } +robius-open = { version = "0.1", default-features = false, optional = true } sdl3-sys = { version = "0.6", features = ["build-from-source-static"] } sdl3-ttf-sys = { version = "0.6", features = ["build-static-vendored", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } sdl3-image-sys = { version = "0.6", features = ["build-static-vendored"] } From 5850c514f2931fcaf1091cc8bb92cd8b51646df6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 19 May 2026 19:30:09 +0200 Subject: [PATCH 0908/1117] Populate controller list on android (#920) * list controllers in UI for android * more * more --- Cargo.lock | 1 + Cargo.toml | 1 + src/ui.rs | 2 + src/ui/android_input.rs | 106 ++++++++++++++++++++++++++++++++++++++++ src/ui/input.rs | 14 +++++- 5 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 src/ui/android_input.rs diff --git a/Cargo.lock b/Cargo.lock index 055dda8..69247f2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2266,6 +2266,7 @@ dependencies = [ "encoding_rs", "fatfs", "futures", + "jni 0.22.4", "mimalloc", "postcard", "rand 0.10.1", diff --git a/Cargo.toml b/Cargo.toml index bceef27..d91ff64 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,6 +46,7 @@ dirs = "6.0" [target.'cfg(target_os = "android")'.dependencies] slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "backend-android-activity-06", "accessibility"], optional = true } +jni = "0.22" [build-dependencies] winresource = "0.1" diff --git a/src/ui.rs b/src/ui.rs index b191a1b..b924542 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -1,3 +1,5 @@ +#[cfg(target_os = "android")] +pub mod android_input; pub mod audio; #[cfg(feature = "gui")] pub mod cheats; diff --git a/src/ui/android_input.rs b/src/ui/android_input.rs new file mode 100644 index 0000000..44abac8 --- /dev/null +++ b/src/ui/android_input.rs @@ -0,0 +1,106 @@ +use jni::{Env, JavaVM, bind_java_type}; + +bind_java_type! { + pub AndroidInputDevice => "android.view.InputDevice", + fields { + #[allow(non_snake_case)] + static SOURCE_JOYSTICK: jint, + #[allow(non_snake_case)] + static SOURCE_GAMEPAD: jint, + }, + methods { + static fn get_device_ids() -> jint[], + static fn get_device(device_id: jint) -> AndroidInputDevice, + fn supports_source(source: jint) -> jboolean, + fn is_virtual() -> jboolean, + fn is_external() -> jboolean, + fn get_vendor_id() -> jint, + fn get_product_id() -> jint, + fn get_name() -> JString, + fn get_descriptor() -> JString, + }, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct ControllerInfo { + pub name: String, + /// Stable ID from [`InputDevice.getDescriptor`](https://developer.android.com/reference/android/view/InputDevice#getDescriptor()). + pub descriptor: String, +} + +/// Lists connected gamepads and joysticks using the Android framework. +pub fn list_controllers() -> Vec { + let Some(app) = crate::ui::ANDROID_APP.get() else { + eprintln!("Android app not initialized; cannot list controllers"); + return Vec::new(); + }; + + let vm = unsafe { JavaVM::from_raw(app.vm_as_ptr().cast()) }; + + match vm.attach_current_thread(list_controllers_on_jvm) { + Ok(controllers) => controllers, + Err(err) => { + eprintln!("JNI error while listing controllers: {err:?}"); + Vec::new() + } + } +} + +fn list_controllers_on_jvm(env: &mut Env<'_>) -> jni::errors::Result> { + let source_gamepad = AndroidInputDevice::SOURCE_GAMEPAD(env)?; + let source_joystick = AndroidInputDevice::SOURCE_JOYSTICK(env)?; + + let device_ids = AndroidInputDevice::get_device_ids(env)?; + let count = device_ids.len(env)?; + let mut ids = vec![0i32; count]; + if count > 0 { + device_ids.get_region(env, 0, &mut ids)?; + } + + let mut controllers = Vec::new(); + for device_id in ids { + let device = AndroidInputDevice::get_device(env, device_id)?; + if device.is_null() { + continue; + } + + if device.is_virtual(env)? { + continue; + } + + if !device.is_external(env)? { + continue; + } + + if !device.supports_source(env, source_gamepad & source_joystick)? { + continue; + } + + if device.get_vendor_id(env)? == 0 { + continue; + } + + if device.get_product_id(env)? == 0 { + continue; + } + + let name = if let Ok(name) = device.get_name(env) + && let Ok(name) = name.try_to_string(env) + { + name + } else { + "Unknown controller".to_string() + }; + let descriptor = if let Ok(descriptor) = device.get_descriptor(env) + && let Ok(descriptor) = descriptor.try_to_string(env) + { + descriptor + } else { + String::new() + }; + + controllers.push(ControllerInfo { name, descriptor }); + } + + Ok(controllers) +} diff --git a/src/ui/input.rs b/src/ui/input.rs index 937e73f..bd890f1 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -362,7 +362,12 @@ pub fn get_controller_names() -> Vec { #[cfg(target_os = "android")] pub fn get_controller_names() -> Vec { - vec!["None".into()] + let mut controllers: Vec = ui::android_input::list_controllers() + .into_iter() + .map(|c| c.name) + .collect(); + controllers.insert(0, "None".into()); + controllers } #[cfg(not(target_os = "android"))] @@ -386,7 +391,12 @@ pub fn get_controller_paths() -> Vec { #[cfg(target_os = "android")] #[cfg(feature = "gui")] pub fn get_controller_paths() -> Vec { - vec![String::new()] + let mut controller_paths: Vec = ui::android_input::list_controllers() + .into_iter() + .map(|c| c.descriptor) + .collect(); + controller_paths.insert(0, String::new()); + controller_paths } fn handle_joystick_events(ui: &mut ui::Ui) { From e852439b6a8d168655837fcd90cfbe9b073126ad Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 19 May 2026 21:56:36 +0200 Subject: [PATCH 0909/1117] Fix open on Android (#921) * fix open * more * more * mroe --- .github/workflows/build.yml | 4 +- Cargo.lock | 120 ++++++++---------------- Cargo.toml | 16 +--- src/lib.rs | 4 +- src/ui.rs | 2 +- src/ui/{android_input.rs => android.rs} | 75 ++++++++++++++- src/ui/gui.rs | 30 +++--- src/ui/gui/appwindow.slint | 1 + src/ui/gui/localgame_page.slint | 3 +- src/ui/input.rs | 4 +- src/ui/retroachievements.rs | 2 +- 11 files changed, 143 insertions(+), 118 deletions(-) rename src/ui/{android_input.rs => android.rs} (59%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 151c0f4..cea23e6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -267,9 +267,9 @@ jobs: cache: ${{ github.ref_type != 'tag' }} - name: Build run: | - cargo install cargo-apk2 cargo-ndk + cargo install cargo-apk cargo-ndk source <(cargo ndk-env --target ${{ matrix.target }}) - cargo apk2 build --profile ${{ env.BUILD_PROFILE }} --target ${{ matrix.target }} --lib + cargo apk build --profile ${{ env.BUILD_PROFILE }} --target ${{ matrix.target }} --lib collect-artifacts: name: Collect release artifacts diff --git a/Cargo.lock b/Cargo.lock index 69247f2..b7c2e23 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -735,25 +735,6 @@ dependencies = [ "hybrid-array", ] -[[package]] -name = "block-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae85a0696e7ea3b835a453750bf002770776609115e6d25c6d2ff28a8200f7e7" -dependencies = [ - "objc-sys", -] - -[[package]] -name = "block2" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e58aa60e59d8dbfcc36138f5f18be5f24394d33b38b24f7fd0b1caa33095f22f" -dependencies = [ - "block-sys", - "objc2 0.5.2", -] - [[package]] name = "block2" version = "0.5.1" @@ -2268,12 +2249,12 @@ dependencies = [ "futures", "jni 0.22.4", "mimalloc", + "open", "postcard", "rand 0.10.1", "regex", "reqwest", "rfd", - "robius-open", "sdl3-image-sys", "sdl3-sys", "sdl3-ttf-sys", @@ -2894,16 +2875,6 @@ dependencies = [ "cc", ] -[[package]] -name = "icrate" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb69199826926eb864697bddd27f73d9fddcffc004f5733131e15b465e30642" -dependencies = [ - "block2 0.4.0", - "objc2 0.5.2", -] - [[package]] name = "icu_collections" version = "2.2.0" @@ -3182,6 +3153,25 @@ version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" +[[package]] +name = "is-docker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" +dependencies = [ + "once_cell", +] + +[[package]] +name = "is-wsl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] + [[package]] name = "is_terminal_polyfill" version = "1.70.2" @@ -4326,6 +4316,17 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" +[[package]] +name = "open" +version = "5.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fbaa89d2ddc8473c78a3adf69eea8cffa28c483b8e02a971ef31527cd0fc92c" +dependencies = [ + "is-wsl", + "libc", + "pathdiff", +] + [[package]] name = "openssl-probe" version = "0.2.1" @@ -4450,6 +4451,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec" +[[package]] +name = "pathdiff" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" + [[package]] name = "pbkdf2" version = "0.13.0" @@ -5163,30 +5170,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "robius-android-env" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "087fcb3061ccc432658a605cb868edd44e0efb08e7a159b486f02804a7616bef" -dependencies = [ - "jni 0.21.1", - "ndk-context", -] - -[[package]] -name = "robius-open" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "243e2abbc8c1ca8ddc283056d4675b67e452fd527c3741c5318642da37840ff3" -dependencies = [ - "cfg-if", - "icrate", - "jni 0.21.1", - "objc2 0.5.2", - "robius-android-env", - "windows 0.54.0", -] - [[package]] name = "rowan" version = "0.16.1" @@ -7324,16 +7307,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "windows" -version = "0.54.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49" -dependencies = [ - "windows-core 0.54.0", - "windows-targets 0.52.6", -] - [[package]] name = "windows" version = "0.61.3" @@ -7377,16 +7350,6 @@ dependencies = [ "windows-core 0.62.2", ] -[[package]] -name = "windows-core" -version = "0.54.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65" -dependencies = [ - "windows-result 0.1.2", - "windows-targets 0.52.6", -] - [[package]] name = "windows-core" version = "0.61.2" @@ -7500,15 +7463,6 @@ dependencies = [ "windows-strings 0.5.1", ] -[[package]] -name = "windows-result" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-result" version = "0.3.4" diff --git a/Cargo.toml b/Cargo.toml index d91ff64..35f9ce3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ rust-version = "1.95.0" [features] default = ["gui"] -gui = ["dep:rfd", "dep:slint", "dep:robius-open", "dep:slint-build"] +gui = ["dep:rfd", "dep:slint", "dep:open", "dep:slint-build"] [lib] crate-type = ["cdylib", "rlib"] @@ -19,7 +19,6 @@ serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde-big-array = "0.5" sha2 = "0.11" -robius-open = { version = "0.1", default-features = false, optional = true } sdl3-sys = { version = "0.6", features = ["build-from-source-static"] } sdl3-ttf-sys = { version = "0.6", features = ["build-static-vendored", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } sdl3-image-sys = { version = "0.6", features = ["build-static-vendored"] } @@ -43,6 +42,7 @@ discord-rich-presence = "1.1" slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "unstable-winit-030", "backend-winit", "renderer-femtovg-wgpu", "accessibility"], optional = true } rfd = {version = "0.17", optional = true } dirs = "6.0" +open = { version = "5.3", optional = true } [target.'cfg(target_os = "android")'.dependencies] slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "backend-android-activity-06", "accessibility"], optional = true } @@ -74,22 +74,10 @@ osx_frameworks = ["/opt/homebrew/opt/molten-vk/lib/libMoltenVK.dylib"] osx_minimum_system_version = "15.0" [package.metadata.android] -use_aapt2 = true package = "io.github.gopher64.gopher64" build_targets = ["aarch64-linux-android"] resources = "data/android/res" -[[package.metadata.android.application.activity]] -name = "android.app.NativeActivity" - -[[package.metadata.android.application.activity.intent_filter]] -actions = ["android.intent.action.MAIN"] -categories = ["android.intent.category.LAUNCHER"] - -[[package.metadata.android.application.activity.meta_data]] -name = "android.app.lib_name" -value = "gopher64" - [package.metadata.android.application] icon = "@mipmap/ic_launcher" label = "Gopher64" diff --git a/src/lib.rs b/src/lib.rs index b25dfc8..8b0794f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -293,7 +293,7 @@ pub async fn run() -> std::io::Result<()> { #[cfg(feature = "gui")] { retroachievements::init_client(false, false, false); - ui::gui::app_window(); + ui::gui::app_window(false); retroachievements::shutdown_client(); } } @@ -317,5 +317,5 @@ async fn android_main(app: slint::android::AndroidApp) { std::fs::create_dir_all(dirs.data_dir.join("saves")).unwrap(); std::fs::create_dir_all(dirs.data_dir.join("states")).unwrap(); - ui::gui::app_window(); + ui::gui::app_window(true); } diff --git a/src/ui.rs b/src/ui.rs index b924542..2631d4a 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -1,5 +1,5 @@ #[cfg(target_os = "android")] -pub mod android_input; +pub mod android; pub mod audio; #[cfg(feature = "gui")] pub mod cheats; diff --git a/src/ui/android_input.rs b/src/ui/android.rs similarity index 59% rename from src/ui/android_input.rs rename to src/ui/android.rs index 44abac8..88d292e 100644 --- a/src/ui/android_input.rs +++ b/src/ui/android.rs @@ -1,5 +1,43 @@ +use jni::objects::JString; +use jni::refs::Global; use jni::{Env, JavaVM, bind_java_type}; +use crate::ui; + +bind_java_type! { + AndroidActivity => "android.app.Activity", + type_map = { + AndroidIntent => "android.content.Intent", + }, + methods { + fn start_activity(intent: AndroidIntent) -> (), + }, +} + +bind_java_type! { + AndroidIntent => "android.content.Intent", + type_map = { + AndroidUri => "android.net.Uri", + }, + fields { + #[allow(non_snake_case)] + static ACTION_VIEW: JString, + }, + constructors { + fn new(action: JString), + }, + methods { + fn set_data(uri: AndroidUri) -> AndroidIntent, + }, +} + +bind_java_type! { + AndroidUri => "android.net.Uri", + methods { + static fn parse(uri_string: JString) -> AndroidUri, + }, +} + bind_java_type! { pub AndroidInputDevice => "android.view.InputDevice", fields { @@ -30,7 +68,7 @@ pub struct ControllerInfo { /// Lists connected gamepads and joysticks using the Android framework. pub fn list_controllers() -> Vec { - let Some(app) = crate::ui::ANDROID_APP.get() else { + let Some(app) = ui::ANDROID_APP.get() else { eprintln!("Android app not initialized; cannot list controllers"); return Vec::new(); }; @@ -104,3 +142,38 @@ fn list_controllers_on_jvm(env: &mut Env<'_>) -> jni::errors::Result, + app: &slint::android::AndroidApp, + path: &str, +) -> jni::errors::Result<()> { + let activity_ptr = app.activity_as_ptr().cast(); + let activity = unsafe { env.as_cast_raw::>(&activity_ptr)? }; + + let uri_string = JString::from_str(env, path.to_string())?; + let uri = AndroidUri::parse(env, &uri_string)?; + + let action_view = AndroidIntent::ACTION_VIEW(env)?; + let intent = AndroidIntent::new(env, &action_view)?; + intent.set_data(env, &uri)?; + + activity.as_ref().start_activity(env, &intent)?; + Ok(()) +} diff --git a/src/ui/gui.rs b/src/ui/gui.rs index f521507..ed209cc 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -46,12 +46,18 @@ fn check_latest_version(weak: slint::Weak) { }); } -pub fn open_uri(path: &str) { - if let Err(e) = robius_open::Uri::new(path).open() { - eprintln!("Error opening path: {:?}", e); +#[cfg(not(target_os = "android"))] +pub fn open_uri(path: impl AsRef) { + if let Err(e) = open::that_detached(path) { + eprintln!("Error opening path: {}", e); } } +#[cfg(target_os = "android")] +pub fn open_uri(path: impl AsRef) { + ui::android::open_uri(path.as_ref().to_str().unwrap()) +} + fn run_with_path(weak: slint::Weak, path: std::path::PathBuf) { let weak2 = weak.clone(); weak.upgrade_in_event_loop(move |handle| { @@ -88,8 +94,6 @@ fn file_dropped(app: &AppWindow) { } fn local_game_window(app: &AppWindow, config: &ui::config::Config) { - let dirs = ui::get_dirs(); - app.set_recent_roms(slint::ModelRc::from(std::rc::Rc::new( slint::VecModel::from( config @@ -131,12 +135,15 @@ fn local_game_window(app: &AppWindow, config: &ui::config::Config) { .unwrap(); }); - let saves_path = dirs.data_dir.join("saves"); - app.on_saves_folder_button_clicked(move || { - open_uri(saves_path.to_str().unwrap()); - }); #[cfg(not(target_os = "android"))] - file_dropped(app); + { + let saves_path = ui::get_dirs().data_dir.join("saves"); + app.on_saves_folder_button_clicked(move || { + open_uri(&saves_path); + }); + + file_dropped(app); + } } fn input_profiles(config: &ui::config::Config) -> Vec { @@ -501,8 +508,9 @@ fn about_window(app: &AppWindow) { } } -pub fn app_window() { +pub fn app_window(is_android: bool) { let app = AppWindow::new().unwrap(); + app.set_is_android(is_android); about_window(&app); ui::retroachievements::ra_window(&app); { diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 0b27831..3dfc7fe 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -79,6 +79,7 @@ export component AppWindow inherits Window { in-out property controller_paths <=> ControllerData.controller_paths; in-out property selected_controller <=> ControllerData.selected_controller; in-out property game_running <=> State.game_running; + in-out property is_android <=> State.is_android; in-out property recent_roms <=> State.recent_roms; in-out property cheat_game_name <=> CheatsData.cheat_game_name; in-out property cheat_game_crc <=> CheatsData.cheat_game_crc; diff --git a/src/ui/gui/localgame_page.slint b/src/ui/gui/localgame_page.slint index 4ade531..fb7e9c5 100644 --- a/src/ui/gui/localgame_page.slint +++ b/src/ui/gui/localgame_page.slint @@ -7,6 +7,7 @@ import { AboutData, NewVersionButton } from "about_page.slint"; export global State { in-out property game_running; + in-out property is_android; in-out property <[{a:string, b:string}]> recent_roms; } @@ -30,7 +31,7 @@ export component LocalGame inherits Page { } } - HorizontalBox { + if !State.is_android:HorizontalBox { alignment: center; Button { text: @tr("Open Saves Folder"); diff --git a/src/ui/input.rs b/src/ui/input.rs index bd890f1..42563af 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -362,7 +362,7 @@ pub fn get_controller_names() -> Vec { #[cfg(target_os = "android")] pub fn get_controller_names() -> Vec { - let mut controllers: Vec = ui::android_input::list_controllers() + let mut controllers: Vec = ui::android::list_controllers() .into_iter() .map(|c| c.name) .collect(); @@ -391,7 +391,7 @@ pub fn get_controller_paths() -> Vec { #[cfg(target_os = "android")] #[cfg(feature = "gui")] pub fn get_controller_paths() -> Vec { - let mut controller_paths: Vec = ui::android_input::list_controllers() + let mut controller_paths: Vec = ui::android::list_controllers() .into_iter() .map(|c| c.descriptor) .collect(); diff --git a/src/ui/retroachievements.rs b/src/ui/retroachievements.rs index a410a56..d383553 100644 --- a/src/ui/retroachievements.rs +++ b/src/ui/retroachievements.rs @@ -100,7 +100,7 @@ pub fn ra_window(app: &ui::gui::AppWindow) { }); app.on_ra_show_profile_clicked(move || { - ui::gui::open_uri(&format!( + ui::gui::open_uri(format!( "https://retroachievements.org/user/{}", retroachievements::get_username().unwrap_or_default() )); From 28b14243570ed81616df74f4e31ebb034f42e857 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 20 May 2026 08:57:56 +0200 Subject: [PATCH 0910/1117] don't hold android app reference (#922) * don't hold android app reference * more * more --- Cargo.lock | 1 + Cargo.toml | 1 + src/lib.rs | 11 ++++++++++- src/ui.rs | 13 +++---------- src/ui/android.rs | 45 ++++++++++++++++++++++----------------------- 5 files changed, 37 insertions(+), 34 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b7c2e23..795ba1e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2249,6 +2249,7 @@ dependencies = [ "futures", "jni 0.22.4", "mimalloc", + "ndk-context", "open", "postcard", "rand 0.10.1", diff --git a/Cargo.toml b/Cargo.toml index 35f9ce3..a89ee1e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,6 +47,7 @@ open = { version = "5.3", optional = true } [target.'cfg(target_os = "android")'.dependencies] slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "backend-android-activity-06", "accessibility"], optional = true } jni = "0.22" +ndk-context = "0.1" [build-dependencies] winresource = "0.1" diff --git a/src/lib.rs b/src/lib.rs index 8b0794f..598d82c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,6 +9,9 @@ mod ui; use clap::Parser; use std::io::Error; +#[cfg(target_os = "android")] +use ui::android; + /// N64 emulator #[derive(Parser, Debug)] #[command(author, version=env!("GIT_DESCRIBE"), about, long_about = None, arg_required_else_help = if cfg!(feature = "gui") { false } else { true })] @@ -308,7 +311,13 @@ pub async fn run() -> std::io::Result<()> { async fn android_main(app: slint::android::AndroidApp) { slint::android::init(app.clone()).unwrap(); - ui::ANDROID_APP.set(app).unwrap(); + if let Err(_) = android::DIRS.set(ui::Dirs { + config_dir: app.internal_data_path().unwrap().join("config"), + data_dir: app.external_data_path().unwrap().join("data"), + cache_dir: app.internal_data_path().unwrap().join("cache"), + }) { + println!("Android dirs already set"); + } let dirs = ui::get_dirs(); diff --git a/src/ui.rs b/src/ui.rs index 2631d4a..d16065a 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -17,10 +17,6 @@ pub mod video; #[cfg(feature = "gui")] pub mod vru; -#[cfg(target_os = "android")] -pub static ANDROID_APP: std::sync::OnceLock = - std::sync::OnceLock::new(); - pub static WEB_CLIENT: std::sync::LazyLock = std::sync::LazyLock::new(|| { reqwest::Client::builder() .user_agent(format!( @@ -32,6 +28,7 @@ pub static WEB_CLIENT: std::sync::LazyLock = std::sync::LazyLoc .unwrap() }); +#[derive(Clone)] pub struct Dirs { pub config_dir: std::path::PathBuf, pub data_dir: std::path::PathBuf, @@ -153,12 +150,8 @@ pub fn get_dirs() -> Dirs { #[cfg(target_os = "android")] pub fn get_dirs() -> Dirs { - if let Some(android_app) = ANDROID_APP.get() { - Dirs { - config_dir: android_app.internal_data_path().unwrap().join("config"), - data_dir: android_app.external_data_path().unwrap().join("data"), - cache_dir: android_app.internal_data_path().unwrap().join("cache"), - } + if let Some(android_dirs) = android::DIRS.get() { + android_dirs.clone() } else { panic!("Android app not initialized"); } diff --git a/src/ui/android.rs b/src/ui/android.rs index 88d292e..9960c1b 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -3,9 +3,10 @@ use jni::refs::Global; use jni::{Env, JavaVM, bind_java_type}; use crate::ui; +pub static DIRS: std::sync::OnceLock = std::sync::OnceLock::new(); bind_java_type! { - AndroidActivity => "android.app.Activity", + AndroidContext => "android.content.Context", type_map = { AndroidIntent => "android.content.Intent", }, @@ -22,12 +23,15 @@ bind_java_type! { fields { #[allow(non_snake_case)] static ACTION_VIEW: JString, + #[allow(non_snake_case)] + static FLAG_ACTIVITY_NEW_TASK: jint, }, constructors { fn new(action: JString), }, methods { fn set_data(uri: AndroidUri) -> AndroidIntent, + fn add_flags(flags: jint) -> AndroidIntent, }, } @@ -68,12 +72,9 @@ pub struct ControllerInfo { /// Lists connected gamepads and joysticks using the Android framework. pub fn list_controllers() -> Vec { - let Some(app) = ui::ANDROID_APP.get() else { - eprintln!("Android app not initialized; cannot list controllers"); - return Vec::new(); - }; + let ctx = ndk_context::android_context(); - let vm = unsafe { JavaVM::from_raw(app.vm_as_ptr().cast()) }; + let vm = unsafe { JavaVM::from_raw(ctx.vm().cast()) }; match vm.attach_current_thread(list_controllers_on_jvm) { Ok(controllers) => controllers, @@ -145,35 +146,33 @@ fn list_controllers_on_jvm(env: &mut Env<'_>) -> jni::errors::Result, - app: &slint::android::AndroidApp, + context: *mut std::ffi::c_void, path: &str, ) -> jni::errors::Result<()> { - let activity_ptr = app.activity_as_ptr().cast(); - let activity = unsafe { env.as_cast_raw::>(&activity_ptr)? }; + let context_ptr = context.cast(); + let context = unsafe { env.as_cast_raw::>(&context_ptr)? }; let uri_string = JString::from_str(env, path.to_string())?; let uri = AndroidUri::parse(env, &uri_string)?; let action_view = AndroidIntent::ACTION_VIEW(env)?; - let intent = AndroidIntent::new(env, &action_view)?; - intent.set_data(env, &uri)?; + let flag = AndroidIntent::FLAG_ACTIVITY_NEW_TASK(env)?; + let intent = AndroidIntent::new(env, &action_view)? + .set_data(env, &uri)? + .add_flags(env, flag)?; - activity.as_ref().start_activity(env, &intent)?; + context.as_ref().start_activity(env, &intent)?; Ok(()) } From 06d0aa53bcc3f186019beff0c96584729d9e7d68 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 20 May 2026 09:14:43 +0200 Subject: [PATCH 0911/1117] enable ui dragging (#923) --- src/ui/gui/cheat_page.slint | 1 + src/ui/gui/netplay_wait.slint | 2 +- src/ui/gui/page.slint | 1 + src/ui/gui/vru_dialog.slint | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ui/gui/cheat_page.slint b/src/ui/gui/cheat_page.slint index fff6862..ef21d99 100644 --- a/src/ui/gui/cheat_page.slint +++ b/src/ui/gui/cheat_page.slint @@ -48,6 +48,7 @@ export component Cheats inherits Page { Rectangle { } if CheatsData.cheats.length > 0:ListView { + mouse-drag-pan-enabled: true; preferred-height: root.height; horizontal-stretch: 1; for data in CheatsData.cheats: VerticalBox { diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint index 946fea2..a227d50 100644 --- a/src/ui/gui/netplay_wait.slint +++ b/src/ui/gui/netplay_wait.slint @@ -1,4 +1,4 @@ -import { VerticalBox, HorizontalBox, TextEdit, ScrollView, LineEdit, Button, GridBox } from "std-widgets.slint"; +import { VerticalBox, HorizontalBox, TextEdit, LineEdit, Button, GridBox } from "std-widgets.slint"; import { NetplayData } from "netplay_page.slint"; export global NetplayWaitData { diff --git a/src/ui/gui/page.slint b/src/ui/gui/page.slint index 5f031fa..1fc548b 100644 --- a/src/ui/gui/page.slint +++ b/src/ui/gui/page.slint @@ -19,6 +19,7 @@ export component Page inherits VerticalBox { } ScrollView { + mouse-drag-pan-enabled: true; vertical-stretch: 1; VerticalBox { diff --git a/src/ui/gui/vru_dialog.slint b/src/ui/gui/vru_dialog.slint index c6ce4c9..ad6d478 100644 --- a/src/ui/gui/vru_dialog.slint +++ b/src/ui/gui/vru_dialog.slint @@ -11,6 +11,7 @@ export component VruDialog inherits Window { in-out property words <=> VruData.words; ScrollView { + mouse-drag-pan-enabled: true; VerticalBox { padding-bottom: 40px; for word[i] in words: Button { From c53ffebeceed97e56d57cf5dfed2a6d598eb8a92 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 20 May 2026 09:47:34 +0200 Subject: [PATCH 0912/1117] only show window in safe area (#924) --- src/ui/gui/appwindow.slint | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 3dfc7fe..0bf2e9d 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -87,6 +87,12 @@ export component AppWindow inherits Window { private property is-portrait: root.width < root.height; private property bar-thickness: 56px; + private property safe-left: root.safe-area-insets.left; + private property safe-top: root.safe-area-insets.top; + private property safe-right: root.safe-area-insets.right; + private property safe-bottom: root.safe-area-insets.bottom; + private property safe-width: root.width - root.safe-left - root.safe-right; + private property safe-height: root.height - root.safe-top - root.safe-bottom; min-width: 320px; min-height: 240px; @@ -128,18 +134,18 @@ export component AppWindow inherits Window { label: @tr("Menu" => "About"), }, ]; - x: 0; - y: root.is-portrait ? parent.height - root.bar-thickness : 0; - width: root.is-portrait ? parent.width : root.bar-thickness; - height: root.is-portrait ? root.bar-thickness : parent.height; + x: root.safe-left; + y: root.is-portrait ? parent.height - root.bar-thickness - root.safe-bottom : root.safe-top; + width: root.is-portrait ? root.safe-width : root.bar-thickness; + height: root.is-portrait ? root.bar-thickness : root.safe-height; } content-area := Rectangle { clip: true; - x: root.is-portrait ? 0 : root.bar-thickness; - y: 0; - width: root.is-portrait ? parent.width : parent.width - root.bar-thickness; - height: root.is-portrait ? parent.height - root.bar-thickness : parent.height; + x: root.is-portrait ? root.safe-left : root.safe-left + root.bar-thickness; + y: root.safe-top; + width: root.is-portrait ? root.safe-width : root.safe-width - root.bar-thickness; + height: root.is-portrait ? root.safe-height - root.bar-thickness : root.safe-height; if(side-bar.current-item == 0): LocalGame { width: 100%; From 2eb8a0dc1d898808ec090a684f3ef9e1165ec398 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 20 May 2026 10:34:33 +0200 Subject: [PATCH 0913/1117] move save_settings into callback (#925) --- src/ui/gui.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index ed209cc..ffc7969 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -521,8 +521,15 @@ pub fn app_window(is_android: bool) { } ui::netplay::netplay_window(&app); ui::cheats::cheats_window(&app); + + let weak_app = app.as_weak(); + app.window().on_close_requested(move || { + weak_app + .upgrade_in_event_loop(move |handle| save_settings(&handle)) + .unwrap(); + slint::CloseRequestResponse::HideWindow + }); app.run().unwrap(); - save_settings(&app); } pub fn run_rom( From 48956dc01647cea8a6d93495c7795df3687ef6a6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 20 May 2026 11:41:12 +0200 Subject: [PATCH 0914/1117] move some android guards around (#926) * move some android guards around * more --- src/device.rs | 2 +- src/lib.rs | 4 +- src/ui/android.rs | 18 +++- src/ui/cheats.rs | 148 ++++++++++++++---------------- src/ui/gui.rs | 179 +++++++++++++++++++++---------------- src/ui/gui/appwindow.slint | 2 +- src/ui/netplay.rs | 56 +++--------- 7 files changed, 204 insertions(+), 205 deletions(-) diff --git a/src/device.rs b/src/device.rs index 1abf32a..53f5b7e 100644 --- a/src/device.rs +++ b/src/device.rs @@ -149,7 +149,7 @@ fn swap_rom(contents: Vec) -> Option> { } } -pub fn get_rom_contents(file_path: &std::path::Path) -> Option> { +pub fn get_rom_contents(file_path: &std::path::PathBuf) -> Option> { let mut contents = vec![]; if file_path .extension() diff --git a/src/lib.rs b/src/lib.rs index 598d82c..78904bd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -103,8 +103,8 @@ pub async fn run() -> std::io::Result<()> { let args = Args::parse(); if let Some(game) = args.game { - let file_path = std::path::Path::new(&game); - let Some(rom_contents) = device::get_rom_contents(file_path) else { + let file_path = std::path::Path::new(&game).to_path_buf(); + let Some(rom_contents) = device::get_rom_contents(&file_path) else { return Err(Error::other(format!( "Could not read ROM file: {}", file_path.display() diff --git a/src/ui/android.rs b/src/ui/android.rs index 9960c1b..cd55ba3 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -111,7 +111,11 @@ fn list_controllers_on_jvm(env: &mut Env<'_>) -> jni::errors::Result Option { + None +} + +pub async fn select_gb_rom(_player: i32) -> Option { + None +} + +pub async fn select_gb_ram(_player: i32) -> Option { + None +} diff --git a/src/ui/cheats.rs b/src/ui/cheats.rs index a94553f..6f479a7 100644 --- a/src/ui/cheats.rs +++ b/src/ui/cheats.rs @@ -1,96 +1,84 @@ use crate::ui; use crate::ui::gui::AppWindow; -#[cfg(not(target_os = "android"))] use crate::ui::gui::ErrorDialog; -#[cfg(not(target_os = "android"))] use crate::{cheats, device}; use slint::ComponentHandle; pub fn cheats_window(app: &AppWindow) { - #[cfg(not(target_os = "android"))] - { - let weak = app.as_weak(); - app.on_cheats_select_rom_clicked(move |rom_dir| { - let select_rom = if !rom_dir.is_empty() && std::fs::exists(&rom_dir).unwrap_or(false) { - rfd::AsyncFileDialog::new().set_directory(rom_dir) - } else { - rfd::AsyncFileDialog::new() - } - .set_title("Select ROM") - .add_filter("ROM files", &ui::gui::N64_EXTENSIONS) - .pick_file(); - let weak = weak.clone(); - tokio::spawn(async move { - if let Some(file) = select_rom.await - && let Some(rom_contents) = device::get_rom_contents(file.path()) - { - let game_crc = ui::storage::get_game_crc(&rom_contents); - let game_name = ui::storage::get_game_name(&rom_contents); + let weak = app.as_weak(); + app.on_cheats_select_rom_clicked(move |rom_dir| { + let select_rom = ui::gui::select_rom(rom_dir); + let weak = weak.clone(); + tokio::spawn(async move { + if let Some(file) = select_rom.await + && let Some(rom_contents) = device::get_rom_contents(&file) + { + let game_crc = ui::storage::get_game_crc(&rom_contents); + let game_name = ui::storage::get_game_name(&rom_contents); + weak.upgrade_in_event_loop(move |handle| { + handle.set_cheat_game_name(game_name.into()); + }) + .unwrap(); + let cheats: cheats::Cheat = + serde_json::from_slice(include_bytes!("../../data/cheats.json")).unwrap(); + if let Some(cheat) = cheats.get(&game_crc) { + let cheat = cheat.clone(); weak.upgrade_in_event_loop(move |handle| { - handle.set_cheat_game_name(game_name.into()); - }) - .unwrap(); - let cheats: cheats::Cheat = - serde_json::from_slice(include_bytes!("../../data/cheats.json")).unwrap(); - if let Some(cheat) = cheats.get(&game_crc) { - let cheat = cheat.clone(); - weak.upgrade_in_event_loop(move |handle| { - let cheat_settings = ui::config::Cheats::new(); - let game_cheats = cheat_settings.cheats.get(&game_crc).cloned(); - handle.set_cheat_game_crc(game_crc.into()); - let cheats_vec = slint::VecModel::default(); - for item in cheat.iter() { - let mut cheat_enabled = false; - if let Some(game_cheat) = game_cheats.as_ref() - && game_cheat.contains_key(item.0) - { - cheat_enabled = true; - } - let options_vec = slint::VecModel::default(); - if let Some(options) = item.1.options.as_ref() { - for option in options.iter() { - let mut option_enabled = false; - if let Some(game_cheat) = game_cheats.as_ref() - && game_cheat.contains_key(item.0) - && let Some(opt) = game_cheat.get(item.0) - && let Some(opt) = opt - && opt == option.0 - { - option_enabled = true; - } - options_vec.push((option_enabled, option.0.into())); - } - } - let options = slint::ModelRc::from(std::rc::Rc::new(options_vec)); - cheats_vec.push(( - item.0.clone().into(), - cheat_enabled, - item.1.clone().note.into(), - options, - )); + let cheat_settings = ui::config::Cheats::new(); + let game_cheats = cheat_settings.cheats.get(&game_crc).cloned(); + handle.set_cheat_game_crc(game_crc.into()); + let cheats_vec = slint::VecModel::default(); + for item in cheat.iter() { + let mut cheat_enabled = false; + if let Some(game_cheat) = game_cheats.as_ref() + && game_cheat.contains_key(item.0) + { + cheat_enabled = true; } - handle.set_cheats(slint::ModelRc::from(std::rc::Rc::new(cheats_vec))); - }) - .unwrap(); - } else { - clear_cheats(&weak, false); - } - } else { - clear_cheats(&weak, true); - weak.upgrade_in_event_loop(move |_handle| { - let message_dialog = ErrorDialog::new().unwrap(); - let weak_dialog = message_dialog.as_weak(); - message_dialog.on_close_clicked(move || { - weak_dialog.unwrap().hide().unwrap(); - }); - message_dialog.set_text("Could not read ROM".into()); - message_dialog.show().unwrap(); + let options_vec = slint::VecModel::default(); + if let Some(options) = item.1.options.as_ref() { + for option in options.iter() { + let mut option_enabled = false; + if let Some(game_cheat) = game_cheats.as_ref() + && game_cheat.contains_key(item.0) + && let Some(opt) = game_cheat.get(item.0) + && let Some(opt) = opt + && opt == option.0 + { + option_enabled = true; + } + options_vec.push((option_enabled, option.0.into())); + } + } + let options = slint::ModelRc::from(std::rc::Rc::new(options_vec)); + cheats_vec.push(( + item.0.clone().into(), + cheat_enabled, + item.1.clone().note.into(), + options, + )); + } + handle.set_cheats(slint::ModelRc::from(std::rc::Rc::new(cheats_vec))); }) .unwrap(); + } else { + clear_cheats(&weak, false); } - }); + } else { + clear_cheats(&weak, true); + weak.upgrade_in_event_loop(move |_handle| { + let message_dialog = ErrorDialog::new().unwrap(); + let weak_dialog = message_dialog.as_weak(); + message_dialog.on_close_clicked(move || { + weak_dialog.unwrap().hide().unwrap(); + }); + message_dialog.set_text("Could not read ROM".into()); + message_dialog.show().unwrap(); + }) + .unwrap(); + } }); - } + }); let weak = app.as_weak(); app.on_cheats_clear_clicked(move || { diff --git a/src/ui/gui.rs b/src/ui/gui.rs index ffc7969..da541d5 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -115,17 +115,14 @@ fn local_game_window(app: &AppWindow, config: &ui::config::Config) { ), ))); - #[cfg(not(target_os = "android"))] - { - let weak = app.as_weak(); - app.on_open_rom_button_clicked(move || { - weak.upgrade_in_event_loop(move |handle| { - save_settings(&handle); - open_rom(&handle) - }) - .unwrap(); - }); - } + let weak = app.as_weak(); + app.on_open_rom_button_clicked(move || { + weak.upgrade_in_event_loop(move |handle| { + save_settings(&handle); + open_rom(&handle) + }) + .unwrap(); + }); let weak = app.as_weak(); app.on_recent_rom_button_clicked(move |rom| { @@ -216,7 +213,6 @@ fn update_input_profiles(weak: &slint::Weak, config: &ui::config::Con .unwrap(); } -#[cfg(not(target_os = "android"))] fn clear_gb_paths(weak: &slint::Weak, player: i32) { weak.upgrade_in_event_loop(move |handle| { let rom_paths = handle.get_gb_rom_paths(); @@ -376,61 +372,49 @@ fn controller_window(app: &AppWindow, config: &ui::config::Config) { dialog.show().unwrap(); }); - #[cfg(not(target_os = "android"))] - { - let weak_app2 = app.as_weak(); - app.on_transferpak_toggled(move |player, enabled| { - if enabled { - let select_gb_rom = rfd::AsyncFileDialog::new() - .set_title(format!("GB ROM P{}", player + 1)) - .add_filter("GB ROM files", &["gb", "gbc", "GB", "GBC"]) - .pick_file(); + let weak_app2 = app.as_weak(); + app.on_transferpak_toggled(move |player, enabled| { + if enabled { + let select_gb_rom = select_gb_rom(player); - let weak_app3 = weak_app2.clone(); - tokio::spawn(async move { - if let Some(gb_rom) = select_gb_rom.await { - let weak_app4 = weak_app3.clone(); - weak_app3 - .upgrade_in_event_loop(move |_handle| { - let select_gb_ram = rfd::AsyncFileDialog::new() - .set_title(format!("GB RAM P{}", player + 1)) - .add_filter( - "GB RAM files", - &["sav", "ram", "srm", "SAV", "RAM", "SRM"], - ) - .pick_file(); + let weak_app3 = weak_app2.clone(); + tokio::spawn(async move { + if let Some(gb_rom) = select_gb_rom.await { + let weak_app4 = weak_app3.clone(); + weak_app3 + .upgrade_in_event_loop(move |_handle| { + let select_gb_ram = select_gb_ram(player); - tokio::spawn(async move { - if let Some(gb_ram) = select_gb_ram.await { - weak_app4 - .upgrade_in_event_loop(move |handle| { - let rom_paths = handle.get_gb_rom_paths(); - let ram_paths = handle.get_gb_ram_paths(); - rom_paths.set_row_data( - player as usize, - gb_rom.path().to_str().unwrap().into(), - ); - ram_paths.set_row_data( - player as usize, - gb_ram.path().to_str().unwrap().into(), - ); - handle.set_gb_rom_paths(rom_paths); - handle.set_gb_ram_paths(ram_paths); - }) - .unwrap(); - } else { - clear_gb_paths(&weak_app4, player); - } - }); - }) - .unwrap(); - } else { - clear_gb_paths(&weak_app3, player); - } - }); - } - }); - } + tokio::spawn(async move { + if let Some(gb_ram) = select_gb_ram.await { + weak_app4 + .upgrade_in_event_loop(move |handle| { + let rom_paths = handle.get_gb_rom_paths(); + let ram_paths = handle.get_gb_ram_paths(); + rom_paths.set_row_data( + player as usize, + gb_rom.to_str().unwrap().into(), + ); + ram_paths.set_row_data( + player as usize, + gb_ram.to_str().unwrap().into(), + ); + handle.set_gb_rom_paths(rom_paths); + handle.set_gb_ram_paths(ram_paths); + }) + .unwrap(); + } else { + clear_gb_paths(&weak_app4, player); + } + }); + }) + .unwrap(); + } else { + clear_gb_paths(&weak_app3, player); + } + }); + } + }); } pub fn save_settings(app: &AppWindow) { @@ -614,17 +598,60 @@ pub fn run_rom( }); } -#[cfg(not(target_os = "android"))] -fn open_rom(app: &AppWindow) { - let rom_dir = app.get_rom_dir(); - let select_rom = if !rom_dir.is_empty() && std::fs::exists(&rom_dir).unwrap_or(false) { - rfd::AsyncFileDialog::new().set_directory(rom_dir) - } else { - rfd::AsyncFileDialog::new() +pub async fn select_rom(rom_dir: slint::SharedString) -> Option { + #[cfg(not(target_os = "android"))] + { + if !rom_dir.is_empty() && std::fs::exists(&rom_dir).unwrap_or(false) { + rfd::AsyncFileDialog::new().set_directory(rom_dir) + } else { + rfd::AsyncFileDialog::new() + } + .set_title("Select ROM") + .add_filter("ROM files", &N64_EXTENSIONS) + .pick_file() + .await + .map(|file| file.path().to_path_buf()) } - .set_title("Select ROM") - .add_filter("ROM files", &N64_EXTENSIONS) - .pick_file(); + #[cfg(target_os = "android")] + { + ui::android::select_rom(rom_dir).await + } +} + +pub async fn select_gb_rom(player: i32) -> Option { + #[cfg(not(target_os = "android"))] + { + rfd::AsyncFileDialog::new() + .set_title(format!("GB ROM P{}", player + 1)) + .add_filter("GB ROM files", &["gb", "gbc", "GB", "GBC"]) + .pick_file() + .await + .map(|file| file.path().to_path_buf()) + } + #[cfg(target_os = "android")] + { + ui::android::select_gb_rom(player).await + } +} + +pub async fn select_gb_ram(player: i32) -> Option { + #[cfg(not(target_os = "android"))] + { + rfd::AsyncFileDialog::new() + .set_title(format!("GB RAM P{}", player + 1)) + .add_filter("GB RAM files", &["sav", "ram", "srm", "SAV", "RAM", "SRM"]) + .pick_file() + .await + .map(|file| file.path().to_path_buf()) + } + #[cfg(target_os = "android")] + { + ui::android::select_gb_ram(player).await + } +} + +fn open_rom(app: &AppWindow) { + let select_rom = select_rom(app.get_rom_dir()); let overclock = app.get_overclock_n64_cpu(); let disable_expansion_pak = app.get_disable_expansion_pak(); @@ -633,7 +660,7 @@ fn open_rom(app: &AppWindow) { tokio::spawn(async move { if let Some(file) = select_rom.await { run_rom( - file.path().to_path_buf(), + file, ui::GameSettings { overclock, disable_expansion_pak, diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 0bf2e9d..0e32950 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -220,7 +220,7 @@ export component AppWindow inherits Window { ra_show_profile_clicked => { ra_show_profile_clicked(); } - } + } if(side-bar.current-item == 5): Settings { width: 100%; height: 100%; diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index bb2ac30..1bf4f79 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -1,4 +1,3 @@ -#[cfg(not(target_os = "android"))] use crate::device; use crate::ui; use crate::ui::gui::{ @@ -48,13 +47,9 @@ pub struct NetplayMessage { trait NetplayPages { fn set_server_names(&self, names: slint::ModelRc); fn set_server_urls(&self, urls: slint::ModelRc); - #[cfg(not(target_os = "android"))] fn set_game_name(&self, game_name: slint::SharedString); - #[cfg(not(target_os = "android"))] fn set_game_hash(&self, game_hash: slint::SharedString); - #[cfg(not(target_os = "android"))] fn set_game_cheats(&self, game_cheats: slint::SharedString); - #[cfg(not(target_os = "android"))] fn set_rom_path(&self, rom_path: slint::SharedString); fn set_peer_addr(&self, peer_addr: slint::SharedString); fn refresh_sessions(&self) { @@ -69,19 +64,15 @@ impl NetplayPages for NetplayCreate { fn set_server_urls(&self, urls: slint::ModelRc) { self.set_server_urls(urls); } - #[cfg(not(target_os = "android"))] fn set_game_name(&self, game_name: slint::SharedString) { self.set_game_name(game_name); } - #[cfg(not(target_os = "android"))] fn set_game_hash(&self, game_hash: slint::SharedString) { self.set_game_hash(game_hash); } - #[cfg(not(target_os = "android"))] fn set_game_cheats(&self, game_cheats: slint::SharedString) { self.set_game_cheats(game_cheats); } - #[cfg(not(target_os = "android"))] fn set_rom_path(&self, rom_path: slint::SharedString) { self.set_rom_path(rom_path); } @@ -100,19 +91,15 @@ impl NetplayPages for NetplayJoin { fn refresh_sessions(&self) { self.invoke_refresh_session(); } - #[cfg(not(target_os = "android"))] fn set_game_name(&self, game_name: slint::SharedString) { self.set_game_name(game_name); } - #[cfg(not(target_os = "android"))] fn set_game_hash(&self, game_hash: slint::SharedString) { self.set_game_hash(game_hash); } - #[cfg(not(target_os = "android"))] fn set_game_cheats(&self, game_cheats: slint::SharedString) { self.set_game_cheats(game_cheats); } - #[cfg(not(target_os = "android"))] fn set_rom_path(&self, rom_path: slint::SharedString) { self.set_rom_path(rom_path); } @@ -186,22 +173,14 @@ fn populate_server_names(weak: slin }); } -#[cfg(not(target_os = "android"))] fn select_rom( weak: slint::Weak, rom_dir: slint::SharedString, ) { - let select_rom = if !rom_dir.is_empty() && std::fs::exists(&rom_dir).unwrap_or(false) { - rfd::AsyncFileDialog::new().set_directory(rom_dir) - } else { - rfd::AsyncFileDialog::new() - } - .set_title("Select ROM") - .add_filter("ROM files", &ui::gui::N64_EXTENSIONS) - .pick_file(); + let select_rom = ui::gui::select_rom(rom_dir); tokio::spawn(async move { if let Some(file) = select_rom.await { - if let Some(rom_contents) = device::get_rom_contents(file.path()) { + if let Some(rom_contents) = device::get_rom_contents(&file) { let hash = device::cart::rom::calculate_hash(&rom_contents); let mut game_name = ui::storage::get_game_name(&rom_contents); let game_crc = ui::storage::get_game_crc(&rom_contents); @@ -213,19 +192,14 @@ fn select_rom( parsed_cheats = serde_json::to_string(game_cheats).unwrap(); } if game_name.is_empty() { - game_name = file - .path() - .file_name() - .unwrap() - .to_string_lossy() - .to_string(); + game_name = file.file_name().unwrap().to_string_lossy().to_string(); } weak.upgrade_in_event_loop(move |handle| { handle.set_game_name(game_name.into()); handle.set_game_hash(hash.into()); handle.set_game_cheats(parsed_cheats.into()); - handle.set_rom_path(file.path().to_str().unwrap().into()); + handle.set_rom_path(file.to_str().unwrap().into()); }) .unwrap(); } else { @@ -290,13 +264,10 @@ pub fn setup_create_window( .unwrap(); }); - #[cfg(not(target_os = "android"))] - { - let weak = create_window.as_weak(); - create_window.on_select_rom(move |rom_dir| { - select_rom(weak.clone(), rom_dir); - }); - } + let weak = create_window.as_weak(); + create_window.on_select_rom(move |rom_dir| { + select_rom(weak.clone(), rom_dir); + }); let weak = create_window.as_weak(); create_window.on_create_session( @@ -1183,13 +1154,10 @@ pub fn setup_join_window( join_window.set_rom_dir(rom_dir); populate_server_names(join_window.as_weak()); - #[cfg(not(target_os = "android"))] - { - let weak = join_window.as_weak(); - join_window.on_select_rom(move |rom_dir| { - select_rom(weak.clone(), rom_dir); - }); - } + let weak = join_window.as_weak(); + join_window.on_select_rom(move |rom_dir| { + select_rom(weak.clone(), rom_dir); + }); let sender = netplay_write_sender.clone(); join_window.window().on_close_requested(move || { From 7eb090a6221141912a7b4084bce5c906451afa52 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 20 May 2026 12:43:24 +0200 Subject: [PATCH 0915/1117] fix some popups (#927) --- src/ui/gui/input_profile.slint | 14 ++++++++++++++ src/ui/gui/netplay_create.slint | 21 ++++++++++++--------- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/ui/gui/input_profile.slint b/src/ui/gui/input_profile.slint index e0ca28f..30703e8 100644 --- a/src/ui/gui/input_profile.slint +++ b/src/ui/gui/input_profile.slint @@ -13,8 +13,13 @@ export component InputProfileDialog inherits Window { in-out property profile_name <=> InputProfileData.profile_name; in-out property deadzone <=> InputProfileData.deadzone; VerticalBox { + alignment: start; + HorizontalBox { + alignment: center; + vertical-stretch: 0; LineEdit { + vertical-stretch: 0; placeholder-text: @tr("Enter profile name to create or modify"); preferred-width: 400px; edited(text) => { @@ -24,6 +29,7 @@ export component InputProfileDialog inherits Window { } HorizontalBox { + vertical-stretch: 0; alignment: center; Text { text: @tr("Deadzone Percentage"); @@ -46,6 +52,7 @@ export component InputProfileDialog inherits Window { } HorizontalBox { + vertical-stretch: 0; alignment: center; Switch { text: @tr("Use DirectInput"); @@ -57,7 +64,10 @@ export component InputProfileDialog inherits Window { } HorizontalBox { + alignment: center; + vertical-stretch: 0; Button { + vertical-stretch: 0; text: @tr("Start Profile Creation Wizard"); enabled: InputProfileData.profile_name != "" && InputProfileData.profile_name != "default"; clicked => { @@ -65,5 +75,9 @@ export component InputProfileDialog inherits Window { } } } + + Rectangle { + vertical-stretch: 1; + } } } diff --git a/src/ui/gui/netplay_create.slint b/src/ui/gui/netplay_create.slint index da20480..92dacc0 100644 --- a/src/ui/gui/netplay_create.slint +++ b/src/ui/gui/netplay_create.slint @@ -78,16 +78,19 @@ export component NetplayCreate inherits Window { } } - if NetplayData.game_name == "": Button { - text: @tr("Select ROM"); - clicked => { - select_rom(NetplayData.rom_dir); + HorizontalBox { + alignment: center; + if NetplayData.game_name == "": Button { + text: @tr("Select ROM"); + clicked => { + select_rom(NetplayData.rom_dir); + } } - } - if NetplayData.game_name != "": Button { - text: NetplayData.game_name; - clicked => { - select_rom(NetplayData.rom_dir); + if NetplayData.game_name != "": Button { + text: NetplayData.game_name; + clicked => { + select_rom(NetplayData.rom_dir); + } } } From 01ea4c422a44bad5426474cfd53b242b3ae4e774 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 20 May 2026 16:16:17 +0200 Subject: [PATCH 0916/1117] hold a ref to AndroidApp (#928) * hold a ref to AndroidApp * more * more * more * more * more --- Cargo.lock | 1 - Cargo.toml | 1 - src/lib.rs | 9 +- src/ui.rs | 43 +++-- src/ui/android.rs | 75 ++++++--- src/ui/gui/appwindow.slint | 56 +++---- src/ui/gui/input_profile.slint | 4 + src/ui/gui/netplay_create.slint | 203 +++++++++++++----------- src/ui/gui/netplay_join.slint | 203 +++++++++++++----------- src/ui/gui/netplay_page.slint | 16 +- src/ui/gui/netplay_wait.slint | 144 +++++++++-------- src/ui/gui/retroachievements_page.slint | 2 +- src/ui/gui/side_bar.slint | 28 ++-- 13 files changed, 432 insertions(+), 353 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 795ba1e..b7c2e23 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2249,7 +2249,6 @@ dependencies = [ "futures", "jni 0.22.4", "mimalloc", - "ndk-context", "open", "postcard", "rand 0.10.1", diff --git a/Cargo.toml b/Cargo.toml index a89ee1e..35f9ce3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,7 +47,6 @@ open = { version = "5.3", optional = true } [target.'cfg(target_os = "android")'.dependencies] slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "backend-android-activity-06", "accessibility"], optional = true } jni = "0.22" -ndk-context = "0.1" [build-dependencies] winresource = "0.1" diff --git a/src/lib.rs b/src/lib.rs index 78904bd..d3fda22 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -311,13 +311,7 @@ pub async fn run() -> std::io::Result<()> { async fn android_main(app: slint::android::AndroidApp) { slint::android::init(app.clone()).unwrap(); - if let Err(_) = android::DIRS.set(ui::Dirs { - config_dir: app.internal_data_path().unwrap().join("config"), - data_dir: app.external_data_path().unwrap().join("data"), - cache_dir: app.internal_data_path().unwrap().join("cache"), - }) { - println!("Android dirs already set"); - } + *android::ANDROID_APP.lock().unwrap() = Some(app); let dirs = ui::get_dirs(); @@ -327,4 +321,5 @@ async fn android_main(app: slint::android::AndroidApp) { std::fs::create_dir_all(dirs.data_dir.join("states")).unwrap(); ui::gui::app_window(true); + *android::ANDROID_APP.lock().unwrap() = None; } diff --git a/src/ui.rs b/src/ui.rs index d16065a..70e472c 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -128,32 +128,29 @@ pub fn sdl_close() { } } -#[cfg(not(target_os = "android"))] pub fn get_dirs() -> Dirs { - let exe_path = std::env::current_exe().unwrap(); - let portable_dir = exe_path.parent(); - let portable = portable_dir.unwrap().join("portable.txt").exists(); - if portable { - Dirs { - config_dir: portable_dir.unwrap().join("portable_data").join("config"), - data_dir: portable_dir.unwrap().join("portable_data").join("data"), - cache_dir: portable_dir.unwrap().join("portable_data").join("cache"), - } - } else { - Dirs { - config_dir: dirs::config_dir().unwrap().join("gopher64"), - data_dir: dirs::data_dir().unwrap().join("gopher64"), - cache_dir: dirs::cache_dir().unwrap().join("gopher64"), + #[cfg(not(target_os = "android"))] + { + let exe_path = std::env::current_exe().unwrap(); + let portable_dir = exe_path.parent(); + let portable = portable_dir.unwrap().join("portable.txt").exists(); + if portable { + Dirs { + config_dir: portable_dir.unwrap().join("portable_data").join("config"), + data_dir: portable_dir.unwrap().join("portable_data").join("data"), + cache_dir: portable_dir.unwrap().join("portable_data").join("cache"), + } + } else { + Dirs { + config_dir: dirs::config_dir().unwrap().join("gopher64"), + data_dir: dirs::data_dir().unwrap().join("gopher64"), + cache_dir: dirs::cache_dir().unwrap().join("gopher64"), + } } } -} - -#[cfg(target_os = "android")] -pub fn get_dirs() -> Dirs { - if let Some(android_dirs) = android::DIRS.get() { - android_dirs.clone() - } else { - panic!("Android app not initialized"); + #[cfg(target_os = "android")] + { + android::get_dirs() } } diff --git a/src/ui/android.rs b/src/ui/android.rs index cd55ba3..58a525f 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -3,10 +3,12 @@ use jni::refs::Global; use jni::{Env, JavaVM, bind_java_type}; use crate::ui; -pub static DIRS: std::sync::OnceLock = std::sync::OnceLock::new(); + +pub static ANDROID_APP: std::sync::Mutex> = + std::sync::Mutex::new(None); bind_java_type! { - AndroidContext => "android.content.Context", + AndroidActivity => "android.app.Activity", type_map = { AndroidIntent => "android.content.Intent", }, @@ -72,9 +74,14 @@ pub struct ControllerInfo { /// Lists connected gamepads and joysticks using the Android framework. pub fn list_controllers() -> Vec { - let ctx = ndk_context::android_context(); - - let vm = unsafe { JavaVM::from_raw(ctx.vm().cast()) }; + let vm = if let Ok(app) = ANDROID_APP.lock() + && let Some(app) = app.as_ref() + { + unsafe { JavaVM::from_raw(app.vm_as_ptr().cast()) } + } else { + eprintln!("Android app not initialized"); + return Vec::new(); + }; match vm.attach_current_thread(list_controllers_on_jvm) { Ok(controllers) => controllers, @@ -150,35 +157,39 @@ fn list_controllers_on_jvm(env: &mut Env<'_>) -> jni::errors::Result, - context: *mut std::ffi::c_void, - path: &str, -) -> jni::errors::Result<()> { - let context_ptr = context.cast(); - let context = unsafe { env.as_cast_raw::>(&context_ptr)? }; +fn open_uri_on_jvm(env: &mut Env<'_>, path: &str) -> jni::errors::Result<()> { + if let Ok(app) = ANDROID_APP.lock() + && let Some(app) = app.as_ref() + { + let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; + let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; - let uri_string = JString::from_str(env, path.to_string())?; - let uri = AndroidUri::parse(env, &uri_string)?; + let uri_string = JString::from_str(env, path.to_string())?; + let uri = AndroidUri::parse(env, &uri_string)?; - let action_view = AndroidIntent::ACTION_VIEW(env)?; - let flag = AndroidIntent::FLAG_ACTIVITY_NEW_TASK(env)?; - let intent = AndroidIntent::new(env, &action_view)? - .set_data(env, &uri)? - .add_flags(env, flag)?; + let action_view = AndroidIntent::ACTION_VIEW(env)?; + let intent = AndroidIntent::new(env, &action_view)?.set_data(env, &uri)?; - context.as_ref().start_activity(env, &intent)?; - Ok(()) + activity.as_ref().start_activity(env, &intent)?; + Ok(()) + } else { + Err(jni::errors::Error::UninitializedJavaVM) + } } pub async fn select_rom(_rom_dir: slint::SharedString) -> Option { @@ -192,3 +203,17 @@ pub async fn select_gb_rom(_player: i32) -> Option { pub async fn select_gb_ram(_player: i32) -> Option { None } + +pub fn get_dirs() -> ui::Dirs { + if let Ok(app) = ANDROID_APP.lock() + && let Some(app) = app.as_ref() + { + ui::Dirs { + config_dir: app.internal_data_path().unwrap().join("config"), + data_dir: app.external_data_path().unwrap().join("data"), + cache_dir: app.internal_data_path().unwrap().join("cache"), + } + } else { + panic!("Android app not initialized"); + } +} diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 0e32950..e7b6ae6 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -105,34 +105,34 @@ export component AppWindow inherits Window { portrait: root.is-portrait; title: "Gopher64"; model: [ - { - icon: @image-url("../../../data/ui/icons/local_game.svg"), - label: @tr("Menu" => "Local Game"), - }, - { - icon: @image-url("../../../data/ui/icons/controller.svg"), - label: @tr("Menu" => "Controller Config"), - }, - { - icon: @image-url("../../../data/ui/icons/netplay.svg"), - label: @tr("Menu" => "Netplay"), - }, - { - icon: @image-url("../../../data/ui/icons/cheats.svg"), - label: @tr("Menu" => "Cheats"), - }, - { - icon: @image-url("../../../data/ui/icons/achievements.svg"), - label: @tr("Menu" => "RetroAchievements"), - }, - { - icon: @image-url("../../../data/ui/icons/settings.svg"), - label: @tr("Menu" => "Settings"), - }, - { - icon: @image-url("../../../data/ui/icons/about.svg"), - label: @tr("Menu" => "About"), - }, + { + icon: @image-url("../../../data/ui/icons/local_game.svg"), + label: @tr("Menu" => "Local Game"), + }, + { + icon: @image-url("../../../data/ui/icons/controller.svg"), + label: @tr("Menu" => "Controller Config"), + }, + { + icon: @image-url("../../../data/ui/icons/netplay.svg"), + label: @tr("Menu" => "Netplay"), + }, + { + icon: @image-url("../../../data/ui/icons/cheats.svg"), + label: @tr("Menu" => "Cheats"), + }, + { + icon: @image-url("../../../data/ui/icons/achievements.svg"), + label: @tr("Menu" => "RetroAchievements"), + }, + { + icon: @image-url("../../../data/ui/icons/settings.svg"), + label: @tr("Menu" => "Settings"), + }, + { + icon: @image-url("../../../data/ui/icons/about.svg"), + label: @tr("Menu" => "About"), + }, ]; x: root.safe-left; y: root.is-portrait ? parent.height - root.bar-thickness - root.safe-bottom : root.safe-top; diff --git a/src/ui/gui/input_profile.slint b/src/ui/gui/input_profile.slint index 30703e8..704b6b1 100644 --- a/src/ui/gui/input_profile.slint +++ b/src/ui/gui/input_profile.slint @@ -13,6 +13,10 @@ export component InputProfileDialog inherits Window { in-out property profile_name <=> InputProfileData.profile_name; in-out property deadzone <=> InputProfileData.deadzone; VerticalBox { + padding-left: root.safe-area-insets.left; + padding-top: root.safe-area-insets.top; + padding-right: root.safe-area-insets.right; + padding-bottom: root.safe-area-insets.bottom; alignment: start; HorizontalBox { diff --git a/src/ui/gui/netplay_create.slint b/src/ui/gui/netplay_create.slint index 92dacc0..185c94c 100644 --- a/src/ui/gui/netplay_create.slint +++ b/src/ui/gui/netplay_create.slint @@ -1,8 +1,10 @@ -import { LineEdit, HorizontalBox, VerticalBox, Button, ComboBox } from "std-widgets.slint"; +import { LineEdit, HorizontalBox, VerticalBox, Button, ComboBox, ScrollView } from "std-widgets.slint"; import { NetplayData } from "netplay_page.slint"; export component NetplayCreate inherits Window { title: @tr("Netplay: Create Session"); + preferred-width: 425px; + preferred-height: 425px; in-out property server_names <=> NetplayData.server_names; in-out property server_urls <=> NetplayData.server_urls; in-out property custom_server_url <=> NetplayData.custom_server_url; @@ -18,108 +20,121 @@ export component NetplayCreate inherits Window { callback create_session(string, string, string, string, string, string, string); VerticalBox { - HorizontalBox { + vertical-stretch: 1; + padding-left: root.safe-area-insets.left; + padding-top: root.safe-area-insets.top; + padding-right: root.safe-area-insets.right; + padding-bottom: root.safe-area-insets.bottom; + ScrollView { + mouse-drag-pan-enabled: true; + vertical-stretch: 1; VerticalBox { - Text { - text: @tr("Session Name:"); - } + alignment: start; + HorizontalBox { + VerticalBox { + Text { + text: @tr("Session Name:"); + } - LineEdit { - placeholder-text: @tr("Enter session name"); - edited(text) => { - NetplayData.session_name = text; + LineEdit { + placeholder-text: @tr("Enter session name"); + edited(text) => { + NetplayData.session_name = text; + } + } } - } - } - VerticalBox { - Text { - text: @tr("Password (Optional):"); - } + VerticalBox { + Text { + text: @tr("Password (Optional):"); + } - LineEdit { - placeholder-text: @tr("Enter session password"); - edited(text) => { - NetplayData.password = text; - } - } - } - } - - VerticalBox { - Text { - text: @tr("Player Name:"); - } - - LineEdit { - placeholder-text: @tr("Enter player name"); - edited(text) => { - NetplayData.player_name = text; - } - } - } - - VerticalBox { - Text { - text: @tr("Server:"); - } - - HorizontalBox { - server := ComboBox { - model: NetplayData.server_names; - selected => { - if (self.current-index >= 0) { - if (self.current-value == "Custom") { - get_custom_url(); + LineEdit { + placeholder-text: @tr("Enter session password"); + edited(text) => { + NetplayData.password = text; } } } } - } - } - HorizontalBox { - alignment: center; - if NetplayData.game_name == "": Button { - text: @tr("Select ROM"); - clicked => { - select_rom(NetplayData.rom_dir); + VerticalBox { + Text { + text: @tr("Player Name:"); + } + + LineEdit { + placeholder-text: @tr("Enter player name"); + edited(text) => { + NetplayData.player_name = text; + } + } } - } - if NetplayData.game_name != "": Button { - text: NetplayData.game_name; - clicked => { - select_rom(NetplayData.rom_dir); + + VerticalBox { + Text { + text: @tr("Server:"); + } + + HorizontalBox { + server := ComboBox { + model: NetplayData.server_names; + selected => { + if (self.current-index >= 0) { + if (self.current-value == "Custom") { + get_custom_url(); + } + } + } + } + } } - } - } - Rectangle { } - - if NetplayData.game_cheats != "":Text { - text: @tr("This game has cheats enabled. Cheats will be synchronized with other players."); - } - Rectangle { } - - Button { - property server_url; - text: @tr("Create Session"); - enabled: NetplayData.session_name != "" && NetplayData.player_name != "" && NetplayData.game_name != "" && !NetplayData.pending_session; - clicked => { - NetplayData.pending_session = true; - if (server.current-value == "Custom") { - server_url = "ws://" + NetplayData.custom_server_url; - } else { - server_url = NetplayData.server_urls[server.current-index]; + HorizontalBox { + alignment: center; + if NetplayData.game_name == "": Button { + text: @tr("Select ROM"); + clicked => { + select_rom(NetplayData.rom_dir); + } + } + if NetplayData.game_name != "": Button { + text: NetplayData.game_name; + clicked => { + select_rom(NetplayData.rom_dir); + } + } } - create_session( - server_url, - NetplayData.session_name, - NetplayData.player_name, - NetplayData.game_name, - NetplayData.game_hash, - NetplayData.game_cheats, - NetplayData.password); + + Rectangle { } + + if NetplayData.game_cheats != "":Text { + text: @tr("This game has cheats enabled. Cheats will be synchronized with other players."); + } + Rectangle { } + + Button { + property server_url; + text: @tr("Create Session"); + enabled: NetplayData.session_name != "" && NetplayData.player_name != "" && NetplayData.game_name != "" && !NetplayData.pending_session; + clicked => { + NetplayData.pending_session = true; + if (server.current-value == "Custom") { + server_url = "ws://" + NetplayData.custom_server_url; + } else { + server_url = NetplayData.server_urls[server.current-index]; + } + create_session( + server_url, + NetplayData.session_name, + NetplayData.player_name, + NetplayData.game_name, + NetplayData.game_hash, + NetplayData.game_cheats, + NetplayData.password); + } + } + Rectangle { } } } } @@ -127,7 +142,13 @@ export component NetplayCreate inherits Window { export component DispatcherDialog inherits Dialog { title: @tr("Creating Server"); - Text { - text: @tr("Creating server, please wait...This may take about 30 seconds."); + VerticalBox { + padding-left: root.safe-area-insets.left; + padding-top: root.safe-area-insets.top; + padding-right: root.safe-area-insets.right; + padding-bottom: root.safe-area-insets.bottom; + Text { + text: @tr("Creating server, please wait...This may take about 30 seconds."); + } } } diff --git a/src/ui/gui/netplay_join.slint b/src/ui/gui/netplay_join.slint index b73c888..6922662 100644 --- a/src/ui/gui/netplay_join.slint +++ b/src/ui/gui/netplay_join.slint @@ -1,4 +1,4 @@ -import { VerticalBox, LineEdit, StandardTableView, HorizontalBox, ComboBox, Button } from "std-widgets.slint"; +import { VerticalBox, LineEdit, StandardTableView, HorizontalBox, ComboBox, Button, ScrollView } from "std-widgets.slint"; import { NetplayData } from "netplay_page.slint"; export component NetplayJoin inherits Window { @@ -22,116 +22,129 @@ export component NetplayJoin inherits Window { callback select_rom(string); callback join_session(string, string, string, string, int); preferred-width: 700px; + preferred-height: 450px; VerticalBox { - HorizontalBox { + vertical-stretch: 1; + padding-left: root.safe-area-insets.left; + padding-top: root.safe-area-insets.top; + padding-right: root.safe-area-insets.right; + padding-bottom: root.safe-area-insets.bottom; + ScrollView { + mouse-drag-pan-enabled: true; + vertical-stretch: 1; VerticalBox { - Text { - text: @tr("Player Name (required):"); - } + alignment: start; + HorizontalBox { + VerticalBox { + Text { + text: @tr("Player Name (required):"); + } - LineEdit { - placeholder-text: @tr("Enter player name"); - edited(text) => { - NetplayData.player_name = text; + LineEdit { + placeholder-text: @tr("Enter player name"); + edited(text) => { + NetplayData.player_name = text; + } + } + } + + VerticalBox { + Text { + text: @tr("Custom Server URL (optional):"); + } + + LineEdit { + placeholder-text: "example.com:45000"; + text: NetplayData.custom_server_url; + edited(text) => { + NetplayData.custom_server_url = text; + } + } } } - } - VerticalBox { - Text { - text: @tr("Custom Server URL (optional):"); + if NetplayData.pending_refresh: Text { + text: @tr("Refreshing session list, please wait..."); + horizontal-alignment: center; + vertical-alignment: center; } - - LineEdit { - placeholder-text: "example.com:45000"; - text: NetplayData.custom_server_url; - edited(text) => { - NetplayData.custom_server_url = text; + if !NetplayData.pending_refresh && NetplayData.sessions.length > 0: Text { + text: @tr("Click on a session below to select it"); + horizontal-alignment: center; + vertical-alignment: center; + } + if !NetplayData.pending_refresh && NetplayData.sessions.length == 0: Text { + text: @tr("No sessions available. Please refresh to check again."); + horizontal-alignment: center; + vertical-alignment: center; + } + StandardTableView { + columns: [ + { title: @tr("Server") }, + { title: @tr("Session Name") }, + { title: @tr("Game Name") }, + { title: @tr("Password") }, + { title: @tr("Cheats") } + ]; + rows: NetplayData.sessions; + current-row: NetplayData.current_session; + current-row-changed(current-row) => { + NetplayData.current_session = current-row; } } - } - } - if NetplayData.pending_refresh: Text { - text: @tr("Refreshing session list, please wait..."); - horizontal-alignment: center; - vertical-alignment: center; - } - if !NetplayData.pending_refresh && NetplayData.sessions.length > 0: Text { - text: @tr("Click on a session below to select it"); - horizontal-alignment: center; - vertical-alignment: center; - } - if !NetplayData.pending_refresh && NetplayData.sessions.length == 0: Text { - text: @tr("No sessions available. Please refresh to check again."); - horizontal-alignment: center; - vertical-alignment: center; - } - StandardTableView { - columns: [ - { title: @tr("Server") }, - { title: @tr("Session Name") }, - { title: @tr("Game Name") }, - { title: @tr("Password") }, - { title: @tr("Cheats") } - ]; - rows: NetplayData.sessions; - current-row: NetplayData.current_session; - current-row-changed(current-row) => { - NetplayData.current_session = current-row; - } - } + HorizontalBox { + Rectangle { } - HorizontalBox { - Rectangle { } - - Button { - enabled: !NetplayData.pending_refresh; - text: @tr("Refresh Session List"); - clicked => { - NetplayData.pending_refresh = true; - NetplayData.current_session = -1; - NetplayData.sessions = []; - NetplayData.room_urls = []; - NetplayData.room_ports = []; - refresh_session(); + Button { + enabled: !NetplayData.pending_refresh; + text: @tr("Refresh Session List"); + clicked => { + NetplayData.pending_refresh = true; + NetplayData.current_session = -1; + NetplayData.sessions = []; + NetplayData.room_urls = []; + NetplayData.room_ports = []; + refresh_session(); + } + } } - } - } - HorizontalBox { - LineEdit { - placeholder-text: @tr("Password (if required)"); - edited(text) => { - NetplayData.password = text; - } - } + HorizontalBox { + LineEdit { + placeholder-text: @tr("Password (if required)"); + edited(text) => { + NetplayData.password = text; + } + } - if NetplayData.game_name == "": Button { - text: @tr("Select ROM"); - clicked => { - select_rom(NetplayData.rom_dir); - } - } - if NetplayData.game_name != "": Button { - text: NetplayData.game_name; - clicked => { - select_rom(NetplayData.rom_dir); - } - } + if NetplayData.game_name == "": Button { + text: @tr("Select ROM"); + clicked => { + select_rom(NetplayData.rom_dir); + } + } + if NetplayData.game_name != "": Button { + text: NetplayData.game_name; + clicked => { + select_rom(NetplayData.rom_dir); + } + } - Button { - text: @tr("Join Session"); - enabled: NetplayData.player_name != "" && NetplayData.current_session >= 0 && NetplayData.game_name != "" && !NetplayData.pending_session; - clicked => { - NetplayData.pending_session = true; - join_session( - NetplayData.player_name, - NetplayData.game_hash, - NetplayData.password, - NetplayData.room_urls[NetplayData.current_session], - NetplayData.room_ports[NetplayData.current_session]); + Button { + text: @tr("Join Session"); + enabled: NetplayData.player_name != "" && NetplayData.current_session >= 0 && NetplayData.game_name != "" && !NetplayData.pending_session; + clicked => { + NetplayData.pending_session = true; + join_session( + NetplayData.player_name, + NetplayData.game_hash, + NetplayData.password, + NetplayData.room_urls[NetplayData.current_session], + NetplayData.room_ports[NetplayData.current_session]); + } + } } } } diff --git a/src/ui/gui/netplay_page.slint b/src/ui/gui/netplay_page.slint index fb28dd4..0c33703 100644 --- a/src/ui/gui/netplay_page.slint +++ b/src/ui/gui/netplay_page.slint @@ -82,12 +82,22 @@ export component CustomNetplayServer inherits Dialog { title: @tr("Custom Netplay Server"); preferred-width: 400px; callback ok_clicked(string); - server_url := LineEdit { - text: NetplayData.custom_server_url; - placeholder-text: "example.com:45000"; + VerticalBox { + alignment: start; + vertical-stretch: 1; + padding-left: root.safe-area-insets.left; + padding-top: root.safe-area-insets.top; + padding-right: root.safe-area-insets.right; + padding-bottom: root.safe-area-insets.bottom; + server_url := LineEdit { + vertical-stretch: 0; + text: NetplayData.custom_server_url; + placeholder-text: "example.com:45000"; + } } StandardButton { + vertical-stretch: 0; kind: ok; clicked => { NetplayData.custom_server_url = server_url.text; diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint index a227d50..a39d7e0 100644 --- a/src/ui/gui/netplay_wait.slint +++ b/src/ui/gui/netplay_wait.slint @@ -1,4 +1,4 @@ -import { VerticalBox, HorizontalBox, TextEdit, LineEdit, Button, GridBox } from "std-widgets.slint"; +import { VerticalBox, HorizontalBox, TextEdit, LineEdit, Button, GridBox, ScrollView } from "std-widgets.slint"; import { NetplayData } from "netplay_page.slint"; export global NetplayWaitData { @@ -12,8 +12,8 @@ export global NetplayWaitData { export component NetplayWait inherits Window { title: @tr("Netplay: Waiting Room"); - preferred-width: 400px; - preferred-height: 400px; + preferred-width: 500px; + preferred-height: 450px; in-out property players <=> NetplayWaitData.players; in-out property session_name <=> NetplayData.session_name; in-out property game_name <=> NetplayData.game_name; @@ -27,83 +27,99 @@ export component NetplayWait inherits Window { callback begin_game; VerticalBox { - Text { - text: @tr("Session Name:") + " " + NetplayData.session_name; - font-size: 15px; - horizontal-alignment: center; - } - - Text { - text: @tr("Game Name:") + " " + NetplayData.game_name; - font-size: 15px; - horizontal-alignment: center; - } - - Text { - text: @tr("Ping:") + " " + NetplayWaitData.ping; - horizontal-alignment: center; - } - - GridBox { - Row { + vertical-stretch: 1; + padding-left: root.safe-area-insets.left; + padding-top: root.safe-area-insets.top; + padding-right: root.safe-area-insets.right; + padding-bottom: root.safe-area-insets.bottom; + ScrollView { + mouse-drag-pan-enabled: true; + vertical-stretch: 1; + VerticalBox { + alignment: start; Text { - text: @tr("Player 1:") + " " + players[0]; + text: @tr("Session Name:") + " " + NetplayData.session_name; + font-size: 15px; + horizontal-alignment: center; } Text { - text: @tr("Player 2:") + " " + players[1]; - } - } - - Row { - Text { - text: @tr("Player 3:") + " " + players[2]; + text: @tr("Game Name:") + " " + NetplayData.game_name; + font-size: 15px; + horizontal-alignment: center; } Text { - text: @tr("Player 4:") + " " + players[3]; + text: @tr("Ping:") + " " + NetplayWaitData.ping; + horizontal-alignment: center; } - } - } - TextEdit { - read-only: true; - text: NetplayWaitData.chat_text; - } + GridBox { + Row { + Text { + text: @tr("Player 1:") + " " + players[0]; + } - HorizontalBox { - chat_message := LineEdit { - placeholder-text: @tr("Enter chat message"); - key-released(event) => { - if (event.text == Key.Return && chat_message.text != "") { - send_chat_message(chat_message.text); - chat_message.text = ""; + Text { + text: @tr("Player 2:") + " " + players[1]; + } + } + + Row { + Text { + text: @tr("Player 3:") + " " + players[2]; + } + + Text { + text: @tr("Player 4:") + " " + players[3]; + } } - accept } - } - Button { - text: @tr("Send Message"); - enabled: chat_message.text != ""; - clicked => { - send_chat_message(chat_message.text); - chat_message.text = ""; + TextEdit { + read-only: true; + min-height: 120px; + text: NetplayWaitData.chat_text; } - } - } - Text { - text: NetplayWaitData.motd; - wrap: word-wrap; - } + HorizontalBox { + chat_message := LineEdit { + placeholder-text: @tr("Enter chat message"); + key-released(event) => { + if (event.text == Key.Return && chat_message.text != "") { + send_chat_message(chat_message.text); + chat_message.text = ""; + } + accept + } + } - Button { - text: @tr("Start Game"); - enabled: NetplayWaitData.can_start; - clicked => { - NetplayWaitData.can_start = false; - begin_game(); + Button { + text: @tr("Send Message"); + enabled: chat_message.text != ""; + clicked => { + send_chat_message(chat_message.text); + chat_message.text = ""; + } + } + } + + Text { + text: NetplayWaitData.motd; + wrap: word-wrap; + } + + Button { + text: @tr("Start Game"); + enabled: NetplayWaitData.can_start; + clicked => { + NetplayWaitData.can_start = false; + begin_game(); + } + } + Rectangle { + vertical-stretch: 0; + } } } } diff --git a/src/ui/gui/retroachievements_page.slint b/src/ui/gui/retroachievements_page.slint index 8ca492c..37de87d 100644 --- a/src/ui/gui/retroachievements_page.slint +++ b/src/ui/gui/retroachievements_page.slint @@ -108,7 +108,7 @@ export component RetroAchievements inherits Page { edited(text) => { RAData.ra_username = text; } - + } password_widget := LineEdit { enabled: RAData.enabled; diff --git a/src/ui/gui/side_bar.slint b/src/ui/gui/side_bar.slint index cade454..c2f9887 100644 --- a/src/ui/gui/side_bar.slint +++ b/src/ui/gui/side_bar.slint @@ -46,20 +46,20 @@ component SideBarButton inherits Rectangle { } states [ - selected when root.selected: { - highlight.opacity: 1; - highlight.background: Palette.accent-background; - icon-display.colorize: Palette.accent-foreground; - } - pressed when touch.pressed && !root.selected: { - highlight.opacity: 0.55; - } - hover when touch.has-hover && !root.selected: { - highlight.opacity: 0.4; - } - focused when root.has-focus && !root.selected: { - highlight.opacity: 0.4; - } + selected when root.selected: { + highlight.opacity: 1; + highlight.background: Palette.accent-background; + icon-display.colorize: Palette.accent-foreground; + } + pressed when touch.pressed && !root.selected: { + highlight.opacity: 0.55; + } + hover when touch.has-hover && !root.selected: { + highlight.opacity: 0.4; + } + focused when root.has-focus && !root.selected: { + highlight.opacity: 0.4; + } ] } From 7ad8bed7df225d073532a318507f7f3813d61781 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 20 May 2026 17:01:31 +0200 Subject: [PATCH 0917/1117] Netplay window adjustments (#929) * adjust netplay windows * more * more --- src/ui/gui/netplay_create.slint | 190 +++++++++++++++++--------------- src/ui/gui/netplay_join.slint | 66 ++++++----- src/ui/gui/netplay_wait.slint | 172 ++++++++++++++++------------- 3 files changed, 233 insertions(+), 195 deletions(-) diff --git a/src/ui/gui/netplay_create.slint b/src/ui/gui/netplay_create.slint index 185c94c..3498fbd 100644 --- a/src/ui/gui/netplay_create.slint +++ b/src/ui/gui/netplay_create.slint @@ -4,7 +4,7 @@ import { NetplayData } from "netplay_page.slint"; export component NetplayCreate inherits Window { title: @tr("Netplay: Create Session"); preferred-width: 425px; - preferred-height: 425px; + preferred-height: 475px; in-out property server_names <=> NetplayData.server_names; in-out property server_urls <=> NetplayData.server_urls; in-out property custom_server_url <=> NetplayData.custom_server_url; @@ -31,110 +31,122 @@ export component NetplayCreate inherits Window { VerticalBox { alignment: start; HorizontalBox { + alignment: center; VerticalBox { - Text { - text: @tr("Session Name:"); - } + alignment: start; + horizontal-stretch: 0; + HorizontalBox { + VerticalBox { + Text { + text: @tr("Session Name:"); + } - LineEdit { - placeholder-text: @tr("Enter session name"); - edited(text) => { - NetplayData.session_name = text; + LineEdit { + placeholder-text: @tr("Enter session name"); + edited(text) => { + NetplayData.session_name = text; + } + } } - } - } - VerticalBox { - Text { - text: @tr("Password (Optional):"); - } + VerticalBox { + Text { + text: @tr("Password (Optional):"); + } - LineEdit { - placeholder-text: @tr("Enter session password"); - edited(text) => { - NetplayData.password = text; - } - } - } - } - - VerticalBox { - Text { - text: @tr("Player Name:"); - } - - LineEdit { - placeholder-text: @tr("Enter player name"); - edited(text) => { - NetplayData.player_name = text; - } - } - } - - VerticalBox { - Text { - text: @tr("Server:"); - } - - HorizontalBox { - server := ComboBox { - model: NetplayData.server_names; - selected => { - if (self.current-index >= 0) { - if (self.current-value == "Custom") { - get_custom_url(); + LineEdit { + placeholder-text: @tr("Enter session password"); + edited(text) => { + NetplayData.password = text; } } } } - } - } - HorizontalBox { - alignment: center; - if NetplayData.game_name == "": Button { - text: @tr("Select ROM"); - clicked => { - select_rom(NetplayData.rom_dir); + VerticalBox { + Text { + text: @tr("Player Name:"); + } + + LineEdit { + placeholder-text: @tr("Enter player name"); + edited(text) => { + NetplayData.player_name = text; + } + } } - } - if NetplayData.game_name != "": Button { - text: NetplayData.game_name; - clicked => { - select_rom(NetplayData.rom_dir); + + VerticalBox { + Text { + text: @tr("Server:"); + } + + HorizontalBox { + server := ComboBox { + model: NetplayData.server_names; + selected => { + if (self.current-index >= 0) { + if (self.current-value == "Custom") { + get_custom_url(); + } + } + } + } + } } - } - } - Rectangle { } - - if NetplayData.game_cheats != "":Text { - text: @tr("This game has cheats enabled. Cheats will be synchronized with other players."); - } - Rectangle { } - - Button { - property server_url; - text: @tr("Create Session"); - enabled: NetplayData.session_name != "" && NetplayData.player_name != "" && NetplayData.game_name != "" && !NetplayData.pending_session; - clicked => { - NetplayData.pending_session = true; - if (server.current-value == "Custom") { - server_url = "ws://" + NetplayData.custom_server_url; - } else { - server_url = NetplayData.server_urls[server.current-index]; + HorizontalBox { + alignment: center; + if NetplayData.game_name == "": Button { + text: @tr("Select ROM"); + clicked => { + select_rom(NetplayData.rom_dir); + } + } + if NetplayData.game_name != "": Button { + text: NetplayData.game_name; + clicked => { + select_rom(NetplayData.rom_dir); + } + } } - create_session( - server_url, - NetplayData.session_name, - NetplayData.player_name, - NetplayData.game_name, - NetplayData.game_hash, - NetplayData.game_cheats, - NetplayData.password); + + Rectangle { } + + if NetplayData.game_cheats != "": Text { + text: @tr("This game has cheats enabled. Cheats will be synchronized with other players."); + horizontal-alignment: center; + wrap: word-wrap; + } + Rectangle { } + + HorizontalBox { + alignment: center; + Button { + property server_url; + text: @tr("Create Session"); + enabled: NetplayData.session_name != "" && NetplayData.player_name != "" && NetplayData.game_name != "" && !NetplayData.pending_session; + clicked => { + NetplayData.pending_session = true; + if (server.current-value == "Custom") { + server_url = "ws://" + NetplayData.custom_server_url; + } else { + server_url = NetplayData.server_urls[server.current-index]; + } + create_session( + server_url, + NetplayData.session_name, + NetplayData.player_name, + NetplayData.game_name, + NetplayData.game_hash, + NetplayData.game_cheats, + NetplayData.password); + } + } + } + Rectangle { } } } - Rectangle { } } } } diff --git a/src/ui/gui/netplay_join.slint b/src/ui/gui/netplay_join.slint index 6922662..3651f0d 100644 --- a/src/ui/gui/netplay_join.slint +++ b/src/ui/gui/netplay_join.slint @@ -22,7 +22,7 @@ export component NetplayJoin inherits Window { callback select_rom(string); callback join_session(string, string, string, string, int); preferred-width: 700px; - preferred-height: 450px; + preferred-height: 475px; VerticalBox { vertical-stretch: 1; @@ -112,37 +112,49 @@ export component NetplayJoin inherits Window { } HorizontalBox { - LineEdit { - placeholder-text: @tr("Password (if required)"); - edited(text) => { - NetplayData.password = text; + VerticalBox { + LineEdit { + horizontal-stretch: 0; + min-width: 200px; + placeholder-text: @tr("Password (if required)"); + edited(text) => { + NetplayData.password = text; + } } } - if NetplayData.game_name == "": Button { - text: @tr("Select ROM"); - clicked => { - select_rom(NetplayData.rom_dir); - } - } - if NetplayData.game_name != "": Button { - text: NetplayData.game_name; - clicked => { - select_rom(NetplayData.rom_dir); - } + Rectangle { + horizontal-stretch: 1; } - Button { - text: @tr("Join Session"); - enabled: NetplayData.player_name != "" && NetplayData.current_session >= 0 && NetplayData.game_name != "" && !NetplayData.pending_session; - clicked => { - NetplayData.pending_session = true; - join_session( - NetplayData.player_name, - NetplayData.game_hash, - NetplayData.password, - NetplayData.room_urls[NetplayData.current_session], - NetplayData.room_ports[NetplayData.current_session]); + HorizontalBox { + horizontal-stretch: 0; + alignment: end; + if NetplayData.game_name == "": Button { + text: @tr("Select ROM"); + clicked => { + select_rom(NetplayData.rom_dir); + } + } + if NetplayData.game_name != "": Button { + text: NetplayData.game_name; + clicked => { + select_rom(NetplayData.rom_dir); + } + } + + Button { + text: @tr("Join Session"); + enabled: NetplayData.player_name != "" && NetplayData.current_session >= 0 && NetplayData.game_name != "" && !NetplayData.pending_session; + clicked => { + NetplayData.pending_session = true; + join_session( + NetplayData.player_name, + NetplayData.game_hash, + NetplayData.password, + NetplayData.room_urls[NetplayData.current_session], + NetplayData.room_ports[NetplayData.current_session]); + } } } } diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint index a39d7e0..f7be149 100644 --- a/src/ui/gui/netplay_wait.slint +++ b/src/ui/gui/netplay_wait.slint @@ -13,7 +13,7 @@ export global NetplayWaitData { export component NetplayWait inherits Window { title: @tr("Netplay: Waiting Room"); preferred-width: 500px; - preferred-height: 450px; + preferred-height: 500px; in-out property players <=> NetplayWaitData.players; in-out property session_name <=> NetplayData.session_name; in-out property game_name <=> NetplayData.game_name; @@ -37,88 +37,102 @@ export component NetplayWait inherits Window { vertical-stretch: 1; VerticalBox { alignment: start; - Text { - text: @tr("Session Name:") + " " + NetplayData.session_name; - font-size: 15px; - horizontal-alignment: center; - } - - Text { - text: @tr("Game Name:") + " " + NetplayData.game_name; - font-size: 15px; - horizontal-alignment: center; - } - - Text { - text: @tr("Ping:") + " " + NetplayWaitData.ping; - horizontal-alignment: center; - } - - GridBox { - Row { - Text { - text: @tr("Player 1:") + " " + players[0]; - } - - Text { - text: @tr("Player 2:") + " " + players[1]; - } - } - - Row { - Text { - text: @tr("Player 3:") + " " + players[2]; - } - - Text { - text: @tr("Player 4:") + " " + players[3]; - } - } - } - - TextEdit { - read-only: true; - min-height: 120px; - text: NetplayWaitData.chat_text; - } - HorizontalBox { - chat_message := LineEdit { - placeholder-text: @tr("Enter chat message"); - key-released(event) => { - if (event.text == Key.Return && chat_message.text != "") { - send_chat_message(chat_message.text); - chat_message.text = ""; + alignment: center; + VerticalBox { + alignment: start; + horizontal-stretch: 0; + Text { + text: @tr("Session Name:") + " " + NetplayData.session_name; + font-size: 15px; + horizontal-alignment: center; + } + + Text { + text: @tr("Game Name:") + " " + NetplayData.game_name; + font-size: 15px; + horizontal-alignment: center; + } + + Text { + text: @tr("Ping:") + " " + NetplayWaitData.ping; + horizontal-alignment: center; + } + + HorizontalBox { + alignment: center; + GridBox { + Row { + Text { + text: @tr("Player 1:") + " " + players[0]; + } + + Text { + text: @tr("Player 2:") + " " + players[1]; + } + } + + Row { + Text { + text: @tr("Player 3:") + " " + players[2]; + } + + Text { + text: @tr("Player 4:") + " " + players[3]; + } + } } - accept + } + + TextEdit { + read-only: true; + min-height: 120px; + text: NetplayWaitData.chat_text; + } + + HorizontalBox { + chat_message := LineEdit { + placeholder-text: @tr("Enter chat message"); + key-released(event) => { + if (event.text == Key.Return && chat_message.text != "") { + send_chat_message(chat_message.text); + chat_message.text = ""; + } + accept + } + } + + Button { + text: @tr("Send Message"); + enabled: chat_message.text != ""; + clicked => { + send_chat_message(chat_message.text); + chat_message.text = ""; + } + } + } + + Text { + text: NetplayWaitData.motd; + horizontal-alignment: center; + wrap: word-wrap; + } + + HorizontalBox { + alignment: center; + Button { + text: @tr("Start Game"); + enabled: NetplayWaitData.can_start; + clicked => { + NetplayWaitData.can_start = false; + begin_game(); + } + } + } + Rectangle { + vertical-stretch: 0; } } - - Button { - text: @tr("Send Message"); - enabled: chat_message.text != ""; - clicked => { - send_chat_message(chat_message.text); - chat_message.text = ""; - } - } - } - - Text { - text: NetplayWaitData.motd; - wrap: word-wrap; - } - - Button { - text: @tr("Start Game"); - enabled: NetplayWaitData.can_start; - clicked => { - NetplayWaitData.can_start = false; - begin_game(); - } - } - Rectangle { - vertical-stretch: 0; } } } From 53b39010a020d720f61abde91b490470d299a3b5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 21 May 2026 07:57:09 +0200 Subject: [PATCH 0918/1117] no vru on android (#930) * no vru on android * more * more --- src/device/controller/vru.rs | 6 +++--- src/ui.rs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/device/controller/vru.rs b/src/device/controller/vru.rs index f7dfa95..65c2e86 100644 --- a/src/device/controller/vru.rs +++ b/src/device/controller/vru.rs @@ -1,5 +1,5 @@ use crate::device; -#[cfg(feature = "gui")] +#[cfg(all(feature = "gui", not(target_os = "android")))] use crate::ui; use std::collections::HashMap; @@ -181,9 +181,9 @@ pub fn process(device: &mut device::Device, channel: usize) { device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] = 0; } JCMD_VRU_READ => { - #[cfg(feature = "gui")] + #[cfg(all(feature = "gui", not(target_os = "android")))] let index = ui::vru::prompt_for_match(&device.vru.words, device.vi.frame_time); - #[cfg(not(feature = "gui"))] + #[cfg(any(not(feature = "gui"), target_os = "android"))] let index = 0x7FFF; let num_results = if index == 0x7FFF { 0 } else { 1 }; let data: HashMap = HashMap::from([ diff --git a/src/ui.rs b/src/ui.rs index 70e472c..30ac898 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -14,7 +14,7 @@ pub mod retroachievements; pub mod storage; pub mod usb; pub mod video; -#[cfg(feature = "gui")] +#[cfg(all(feature = "gui", not(target_os = "android")))] pub mod vru; pub static WEB_CLIENT: std::sync::LazyLock = std::sync::LazyLock::new(|| { From b865c88d99501f41ac118a5429d882931643f7f3 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 21 May 2026 18:16:12 +0200 Subject: [PATCH 0919/1117] Use Gradle (#931) * remove cargo-apk * add gradle * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * Revert "more" This reverts commit 19395aac139976c9fd1b330f56ab03ac78236dc8. * more * more * more * more * more * more * more * more * more --- .github/workflows/build.yml | 15 +- Cargo.toml | 18 -- android-project/.gitignore | 36 +++ android-project/android.toolchain.cmake | 3 + android-project/app/build.gradle.kts | 85 ++++++ android-project/app/proguard-rules.pro | 21 ++ .../app/src/main/AndroidManifest.xml | 21 ++ .../github/gopher64/gopher64/SlintActivity.kt | 14 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 0 .../mipmap-hdpi/ic_launcher_foreground.webp | Bin .../mipmap-mdpi/ic_launcher_foreground.webp | Bin .../mipmap-xhdpi/ic_launcher_foreground.webp | Bin .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin .../ic_launcher_foreground.webp | Bin .../res/values/ic_launcher_background.xml | 0 android-project/build.gradle.kts | 4 + android-project/gradle.properties | 17 ++ .../gradle/gradle-daemon-jvm.properties | 12 + android-project/gradle/libs.versions.toml | 20 ++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 45457 bytes .../gradle/wrapper/gradle-wrapper.properties | 9 + android-project/gradlew | 251 ++++++++++++++++++ android-project/gradlew.bat | 94 +++++++ android-project/settings.gradle.kts | 26 ++ 24 files changed, 623 insertions(+), 23 deletions(-) create mode 100644 android-project/.gitignore create mode 100644 android-project/android.toolchain.cmake create mode 100644 android-project/app/build.gradle.kts create mode 100644 android-project/app/proguard-rules.pro create mode 100644 android-project/app/src/main/AndroidManifest.xml create mode 100644 android-project/app/src/main/java/io/github/gopher64/gopher64/SlintActivity.kt rename {data/android => android-project/app/src/main}/res/mipmap-anydpi-v26/ic_launcher.xml (100%) rename {data/android => android-project/app/src/main}/res/mipmap-hdpi/ic_launcher_foreground.webp (100%) rename {data/android => android-project/app/src/main}/res/mipmap-mdpi/ic_launcher_foreground.webp (100%) rename {data/android => android-project/app/src/main}/res/mipmap-xhdpi/ic_launcher_foreground.webp (100%) rename {data/android => android-project/app/src/main}/res/mipmap-xxhdpi/ic_launcher_foreground.webp (100%) rename {data/android => android-project/app/src/main}/res/mipmap-xxxhdpi/ic_launcher_foreground.webp (100%) rename {data/android => android-project/app/src/main}/res/values/ic_launcher_background.xml (100%) create mode 100644 android-project/build.gradle.kts create mode 100644 android-project/gradle.properties create mode 100644 android-project/gradle/gradle-daemon-jvm.properties create mode 100644 android-project/gradle/libs.versions.toml create mode 100644 android-project/gradle/wrapper/gradle-wrapper.jar create mode 100644 android-project/gradle/wrapper/gradle-wrapper.properties create mode 100755 android-project/gradlew create mode 100644 android-project/gradlew.bat create mode 100644 android-project/settings.gradle.kts diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cea23e6..94840c4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -254,7 +254,8 @@ jobs: matrix: include: - os: ubuntu-24.04 - target: aarch64-linux-android + platform: 34 + ndk: 27.3.13750724 steps: - uses: actions/checkout@v6 with: @@ -262,14 +263,18 @@ jobs: fetch-depth: 0 - uses: actions-rust-lang/setup-rust-toolchain@v1 with: - target: ${{ matrix.target }} + target: x86_64-linux-android,aarch64-linux-android rustflags: "" cache: ${{ github.ref_type != 'tag' }} + - name: Setup Android SDK + uses: android-actions/setup-android@v4 + with: + packages: "platforms;android-${{ matrix.platform }} ndk;${{ matrix.ndk }}" - name: Build + working-directory: android-project run: | - cargo install cargo-apk cargo-ndk - source <(cargo ndk-env --target ${{ matrix.target }}) - cargo apk build --profile ${{ env.BUILD_PROFILE }} --target ${{ matrix.target }} --lib + cargo install cargo-ndk + ./gradlew assemble${{ env.BUILD_PROFILE == 'release' && 'Release' || 'Debug' }} collect-artifacts: name: Collect release artifacts diff --git a/Cargo.toml b/Cargo.toml index 35f9ce3..3f72b78 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -72,21 +72,3 @@ category = "public.app-category.games" icon = ["data/icon/gopher64_128x128.png","data/icon/gopher64_256x256.png","data/icon/gopher64_512x512.png"] osx_frameworks = ["/opt/homebrew/opt/molten-vk/lib/libMoltenVK.dylib"] osx_minimum_system_version = "15.0" - -[package.metadata.android] -package = "io.github.gopher64.gopher64" -build_targets = ["aarch64-linux-android"] -resources = "data/android/res" - -[package.metadata.android.application] -icon = "@mipmap/ic_launcher" -label = "Gopher64" - -[package.metadata.android.sdk] -min_sdk_version = 34 -target_sdk_version = 35 - -[[package.metadata.android.uses_feature]] -name = "android.hardware.vulkan.version" -required = true -version = 0x401000 diff --git a/android-project/.gitignore b/android-project/.gitignore new file mode 100644 index 0000000..016088d --- /dev/null +++ b/android-project/.gitignore @@ -0,0 +1,36 @@ +# Gradle files +.gradle/ +build/ + +app/src/main/jniLibs/ + +# Local configuration file (sdk path, etc) +local.properties + +# Log/OS Files +*.log + +# Android Studio generated files and folders +captures/ +.externalNativeBuild/ +.cxx/ +*.aab +*.apk +output-metadata.json + +# IntelliJ +*.iml +.idea/ +misc.xml +deploymentTargetDropDown.xml +render.experimental.xml + +# Keystore files +*.jks +*.keystore + +# Google Services (e.g. APIs or Firebase) +google-services.json + +# Android Profiling +*.hprof diff --git a/android-project/android.toolchain.cmake b/android-project/android.toolchain.cmake new file mode 100644 index 0000000..8f2a290 --- /dev/null +++ b/android-project/android.toolchain.cmake @@ -0,0 +1,3 @@ +set(ANDROID_PLATFORM $ENV{ANDROID_PLATFORM}) +set(ANDROID_ABI $ENV{ANDROID_ABI}) +include("$ENV{ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake") diff --git a/android-project/app/build.gradle.kts b/android-project/app/build.gradle.kts new file mode 100644 index 0000000..9001663 --- /dev/null +++ b/android-project/app/build.gradle.kts @@ -0,0 +1,85 @@ +plugins { + alias(libs.plugins.android.application) +} + +android { + namespace = "io.github.gopher64.gopher64" + compileSdk { + version = release(36) { + minorApiLevel = 1 + } + } + + ndkVersion = "27.3.13750724" + + defaultConfig { + applicationId = "io.github.gopher64.gopher64" + minSdk = 34 + targetSdk = 36 + versionCode = 1 + versionName = "1.1.20" + ndk { + abiFilters.addAll(listOf("arm64-v8a", "x86_64")) + } + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + packaging { + jniLibs { + excludes.add("lib/**/libsevenz_rust2*.so") + } + } +} + +val ndkBuild = tasks.register("ndkBuild") { + val isRelease = gradle.startParameter.taskNames.any { it.endsWith("Release", ignoreCase = true) } + workingDir = rootDir.parentFile + val toolchainPath = "$rootDir/android.toolchain.cmake" + environment("CMAKE_TOOLCHAIN_FILE", toolchainPath) + + var minSdk = android.defaultConfig.minSdk + var ndkDir = androidComponents.sdkComponents.ndkDirectory.get().asFile.absolutePath + environment("ANDROID_NDK_HOME", "$ndkDir") + environment("LIBCLANG_PATH", "$ndkDir/toolchains/llvm/prebuilt/linux-x86_64/musl/lib") + + val jniLibsFolder = layout.projectDirectory.dir("$rootDir/app/src/main/jniLibs") + project.delete(jniLibsFolder) + + commandLine( + "cargo", "ndk", + "--link-libcxx-shared", + "-P", "$minSdk", + "-t", "arm64-v8a", + "-t", "x86_64", + "-o", "$rootDir/app/src/main/jniLibs", + "build", "--lib", + "--profile", if (isRelease) "release" else "dev", + ) +} + +tasks.named("preBuild") { + dependsOn(ndkBuild) +} + +dependencies { + implementation(libs.androidx.appcompat) + implementation(libs.androidx.core.ktx) + implementation(libs.material) + testImplementation(libs.junit) + androidTestImplementation(libs.androidx.espresso.core) + androidTestImplementation(libs.androidx.junit) +} diff --git a/android-project/app/proguard-rules.pro b/android-project/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/android-project/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/android-project/app/src/main/AndroidManifest.xml b/android-project/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..4b84b02 --- /dev/null +++ b/android-project/app/src/main/AndroidManifest.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android-project/app/src/main/java/io/github/gopher64/gopher64/SlintActivity.kt b/android-project/app/src/main/java/io/github/gopher64/gopher64/SlintActivity.kt new file mode 100644 index 0000000..5889089 --- /dev/null +++ b/android-project/app/src/main/java/io/github/gopher64/gopher64/SlintActivity.kt @@ -0,0 +1,14 @@ +package io.github.gopher64.gopher64 + +import android.app.NativeActivity +import android.content.Intent + +class SlintActivity : NativeActivity() { + private external fun nativeOnActivityResult(requestCode: Int, resultCode: Int, data: Intent?) + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + + nativeOnActivityResult(requestCode, resultCode, data) + } +} diff --git a/data/android/res/mipmap-anydpi-v26/ic_launcher.xml b/android-project/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from data/android/res/mipmap-anydpi-v26/ic_launcher.xml rename to android-project/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/data/android/res/mipmap-hdpi/ic_launcher_foreground.webp b/android-project/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp similarity index 100% rename from data/android/res/mipmap-hdpi/ic_launcher_foreground.webp rename to android-project/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp diff --git a/data/android/res/mipmap-mdpi/ic_launcher_foreground.webp b/android-project/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp similarity index 100% rename from data/android/res/mipmap-mdpi/ic_launcher_foreground.webp rename to android-project/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp diff --git a/data/android/res/mipmap-xhdpi/ic_launcher_foreground.webp b/android-project/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp similarity index 100% rename from data/android/res/mipmap-xhdpi/ic_launcher_foreground.webp rename to android-project/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp diff --git a/data/android/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/android-project/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp similarity index 100% rename from data/android/res/mipmap-xxhdpi/ic_launcher_foreground.webp rename to android-project/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp diff --git a/data/android/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/android-project/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp similarity index 100% rename from data/android/res/mipmap-xxxhdpi/ic_launcher_foreground.webp rename to android-project/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp diff --git a/data/android/res/values/ic_launcher_background.xml b/android-project/app/src/main/res/values/ic_launcher_background.xml similarity index 100% rename from data/android/res/values/ic_launcher_background.xml rename to android-project/app/src/main/res/values/ic_launcher_background.xml diff --git a/android-project/build.gradle.kts b/android-project/build.gradle.kts new file mode 100644 index 0000000..3756278 --- /dev/null +++ b/android-project/build.gradle.kts @@ -0,0 +1,4 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +plugins { + alias(libs.plugins.android.application) apply false +} \ No newline at end of file diff --git a/android-project/gradle.properties b/android-project/gradle.properties new file mode 100644 index 0000000..1bc7706 --- /dev/null +++ b/android-project/gradle.properties @@ -0,0 +1,17 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. For more details, visit +# https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects +# org.gradle.parallel=true +# Kotlin code style for this project: "official" or "obsolete": +kotlin.code.style=official +# Tell Android Studio we are using AndroidX +android.useAndroidX=true diff --git a/android-project/gradle/gradle-daemon-jvm.properties b/android-project/gradle/gradle-daemon-jvm.properties new file mode 100644 index 0000000..6c1139e --- /dev/null +++ b/android-project/gradle/gradle-daemon-jvm.properties @@ -0,0 +1,12 @@ +#This file is generated by updateDaemonJvm +toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect +toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect +toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect +toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect +toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/73bcfb608d1fde9fb62e462f834a3299/redirect +toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/846ee0d876d26a26f37aa1ce8de73224/redirect +toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect +toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect +toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/9482ddec596298c84656d31d16652665/redirect +toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/39701d92e1756bb2f141eb67cd4c660e/redirect +toolchainVersion=21 diff --git a/android-project/gradle/libs.versions.toml b/android-project/gradle/libs.versions.toml new file mode 100644 index 0000000..449ccce --- /dev/null +++ b/android-project/gradle/libs.versions.toml @@ -0,0 +1,20 @@ +[versions] +agp = "9.2.1" +coreKtx = "1.18.0" +junit = "4.13.2" +junitVersion = "1.3.0" +espressoCore = "3.7.0" +appcompat = "1.7.1" +material = "1.14.0" + +[libraries] +androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } +junit = { group = "junit", name = "junit", version.ref = "junit" } +androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } +androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } +androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } +material = { group = "com.google.android.material", name = "material", version.ref = "material" } + +[plugins] +android-application = { id = "com.android.application", version.ref = "agp" } + diff --git a/android-project/gradle/wrapper/gradle-wrapper.jar b/android-project/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..8bdaf60c75ab801e22807dde59e12a8735a34077 GIT binary patch literal 45457 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 c82=K%QXLKFx%@O{wJjEi6Y56o#$)Bpeg literal 0 HcmV?d00001 diff --git a/android-project/gradle/wrapper/gradle-wrapper.properties b/android-project/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..137c436 --- /dev/null +++ b/android-project/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,9 @@ +#Thu May 21 08:40:22 CEST 2026 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionSha256Sum=2ab2958f2a1e51120c326cad6f385153bb11ee93b3c216c5fccebfdfbb7ec6cb +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/android-project/gradlew b/android-project/gradlew new file mode 100755 index 0000000..ef07e01 --- /dev/null +++ b/android-project/gradlew @@ -0,0 +1,251 @@ +#!/bin/sh + +# +# Copyright © 2015 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH="\\\"\\\"" + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/android-project/gradlew.bat b/android-project/gradlew.bat new file mode 100644 index 0000000..5eed7ee --- /dev/null +++ b/android-project/gradlew.bat @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH= + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/android-project/settings.gradle.kts b/android-project/settings.gradle.kts new file mode 100644 index 0000000..514f865 --- /dev/null +++ b/android-project/settings.gradle.kts @@ -0,0 +1,26 @@ +pluginManagement { + repositories { + google { + content { + includeGroupByRegex("com\\.android.*") + includeGroupByRegex("com\\.google.*") + includeGroupByRegex("androidx.*") + } + } + mavenCentral() + gradlePluginPortal() + } +} +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" +} +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + } +} + +rootProject.name = "Gopher64" +include(":app") From 367b8bdb5c1094a99f6be19f6eff455edb21a2d2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 21 May 2026 22:06:55 +0200 Subject: [PATCH 0920/1117] Handle intent results (#932) * Handle intent results * more * more * more * more --- .../github/gopher64/gopher64/SlintActivity.kt | 5 + src/ui/android.rs | 139 +++++++++++++++++- 2 files changed, 138 insertions(+), 6 deletions(-) diff --git a/android-project/app/src/main/java/io/github/gopher64/gopher64/SlintActivity.kt b/android-project/app/src/main/java/io/github/gopher64/gopher64/SlintActivity.kt index 5889089..dcd2891 100644 --- a/android-project/app/src/main/java/io/github/gopher64/gopher64/SlintActivity.kt +++ b/android-project/app/src/main/java/io/github/gopher64/gopher64/SlintActivity.kt @@ -4,6 +4,11 @@ import android.app.NativeActivity import android.content.Intent class SlintActivity : NativeActivity() { + companion object { + init { + System.loadLibrary("gopher64") + } + } private external fun nativeOnActivityResult(requestCode: Int, resultCode: Int, data: Intent?) override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { diff --git a/src/ui/android.rs b/src/ui/android.rs index 58a525f..3524cf7 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -1,12 +1,27 @@ -use jni::objects::JString; +use jni::objects::{JClass, JObject, JString}; use jni::refs::Global; -use jni::{Env, JavaVM, bind_java_type}; +use jni::sys::jint; +use jni::{Env, EnvUnowned, JavaVM, bind_java_type}; use crate::ui; +pub const REQUEST_SELECT_ROM: jint = 1; + pub static ANDROID_APP: std::sync::Mutex> = std::sync::Mutex::new(None); +pub static SELECT_ROM_TX: std::sync::Mutex< + Option>>, +> = std::sync::Mutex::new(None); + +bind_java_type! { + DocumentsContract => "android.provider.DocumentsContract", + fields { + #[allow(non_snake_case)] + static EXTRA_INITIAL_URI: JString, + }, +} + bind_java_type! { AndroidActivity => "android.app.Activity", type_map = { @@ -14,6 +29,11 @@ bind_java_type! { }, methods { fn start_activity(intent: AndroidIntent) -> (), + fn start_activity_for_result(intent: AndroidIntent, request_code: jint) -> (), + }, + fields { + #[allow(non_snake_case)] + static RESULT_OK: jint, }, } @@ -26,6 +46,10 @@ bind_java_type! { #[allow(non_snake_case)] static ACTION_VIEW: JString, #[allow(non_snake_case)] + static ACTION_OPEN_DOCUMENT: JString, + #[allow(non_snake_case)] + static CATEGORY_OPENABLE: JString, + #[allow(non_snake_case)] static FLAG_ACTIVITY_NEW_TASK: jint, }, constructors { @@ -33,7 +57,11 @@ bind_java_type! { }, methods { fn set_data(uri: AndroidUri) -> AndroidIntent, + fn set_type(r#type: JString) -> AndroidIntent, + fn add_category(category: JString) -> AndroidIntent, fn add_flags(flags: jint) -> AndroidIntent, + fn get_data() -> AndroidUri, + fn put_extra(extra: JString, value: JString) -> AndroidIntent, }, } @@ -41,6 +69,7 @@ bind_java_type! { AndroidUri => "android.net.Uri", methods { static fn parse(uri_string: JString) -> AndroidUri, + fn to_string() -> JString, }, } @@ -192,16 +221,61 @@ fn open_uri_on_jvm(env: &mut Env<'_>, path: &str) -> jni::errors::Result<()> { } } -pub async fn select_rom(_rom_dir: slint::SharedString) -> Option { - None +pub async fn select_rom(rom_dir: slint::SharedString) -> Option { + let vm = if let Ok(app) = ANDROID_APP.lock() + && let Some(app) = app.as_ref() + { + unsafe { JavaVM::from_raw(app.vm_as_ptr().cast()) } + } else { + eprintln!("Android app not initialized"); + return None; + }; + if let Err(err) = vm.attach_current_thread(|env| select_rom_on_jvm(env, rom_dir.to_string())) { + eprintln!("JNI error while opening URI: {err:?}"); + return None; + } + let (tx, rx) = tokio::sync::oneshot::channel::>(); + if let Ok(mut tx_lock) = SELECT_ROM_TX.lock() { + tx_lock.replace(tx); + } else { + eprintln!("Error locking SELECT_ROM_TX"); + return None; + } + rx.await.unwrap_or(None) } pub async fn select_gb_rom(_player: i32) -> Option { - None + select_rom(slint::SharedString::new()).await } pub async fn select_gb_ram(_player: i32) -> Option { - None + select_rom(slint::SharedString::new()).await +} + +fn select_rom_on_jvm(env: &mut Env<'_>, rom_dir: String) -> jni::errors::Result<()> { + if let Ok(app) = ANDROID_APP.lock() + && let Some(app) = app.as_ref() + { + let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; + let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; + + let action = AndroidIntent::ACTION_OPEN_DOCUMENT(env)?; + let category = AndroidIntent::CATEGORY_OPENABLE(env)?; + let mime_type = JString::from_str(env, "*/*")?; + let mut intent = AndroidIntent::new(env, &action)? + .set_type(env, &mime_type)? + .add_category(env, &category)?; + if !rom_dir.is_empty() { + let start_dir = JString::from_str(env, rom_dir)?; + let extra_initial_uri = DocumentsContract::EXTRA_INITIAL_URI(env)?; + intent = intent.put_extra(env, &extra_initial_uri, &start_dir)?; + } + + activity.start_activity_for_result(env, &intent, REQUEST_SELECT_ROM)?; + Ok(()) + } else { + Err(jni::errors::Error::UninitializedJavaVM) + } } pub fn get_dirs() -> ui::Dirs { @@ -217,3 +291,56 @@ pub fn get_dirs() -> ui::Dirs { panic!("Android app not initialized"); } } + +#[unsafe(no_mangle)] +pub extern "system" fn Java_io_github_gopher64_gopher64_SlintActivity_nativeOnActivityResult< + 'caller, +>( + mut unowned_env: EnvUnowned<'caller>, + _class: JClass<'caller>, + request_code: jint, + result_code: jint, + intent_data: JObject<'caller>, +) { + let outcome = unowned_env.with_env(|env| -> Result<_, jni::errors::Error> { + if result_code != AndroidActivity::RESULT_OK(env)? { + if let Ok(mut tx_lock) = SELECT_ROM_TX.lock() + && let Some(tx) = tx_lock.take() + { + let _ = tx.send(None); + } + return Ok(()); // user cancelled + } + if intent_data.is_null() { + if let Ok(mut tx_lock) = SELECT_ROM_TX.lock() + && let Some(tx) = tx_lock.take() + { + let _ = tx.send(None); + } + return Ok(()); + } + let result_intent = unsafe { env.as_cast_raw::(&intent_data)? }; + match request_code { + REQUEST_SELECT_ROM => { + let uri = result_intent.as_ref().get_data(env)?; + if uri.is_null() { + if let Ok(mut tx_lock) = SELECT_ROM_TX.lock() + && let Some(tx) = tx_lock.take() + { + let _ = tx.send(None); + } + return Ok(()); + } + let path = uri.to_string(env)?; + if let Ok(mut tx_lock) = SELECT_ROM_TX.lock() + && let Some(tx) = tx_lock.take() + { + let _ = tx.send(Some(std::path::PathBuf::from(path.to_string()))); + } + } + _ => {} + } + Ok(()) + }); + outcome.resolve::() +} From 66a74b56930e9a2d673630fd94c048f344a399d8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 22 May 2026 08:05:59 +0200 Subject: [PATCH 0921/1117] keep file permissions (#933) --- src/ui/android.rs | 80 ++++++++++++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 32 deletions(-) diff --git a/src/ui/android.rs b/src/ui/android.rs index 3524cf7..2cbdae7 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -26,10 +26,12 @@ bind_java_type! { AndroidActivity => "android.app.Activity", type_map = { AndroidIntent => "android.content.Intent", + AndroidContentResolver => "android.content.ContentResolver", }, methods { fn start_activity(intent: AndroidIntent) -> (), fn start_activity_for_result(intent: AndroidIntent, request_code: jint) -> (), + fn get_content_resolver() -> AndroidContentResolver, }, fields { #[allow(non_snake_case)] @@ -51,6 +53,8 @@ bind_java_type! { static CATEGORY_OPENABLE: JString, #[allow(non_snake_case)] static FLAG_ACTIVITY_NEW_TASK: jint, + #[allow(non_snake_case)] + static FLAG_GRANT_READ_URI_PERMISSION: jint, }, constructors { fn new(action: JString), @@ -59,12 +63,21 @@ bind_java_type! { fn set_data(uri: AndroidUri) -> AndroidIntent, fn set_type(r#type: JString) -> AndroidIntent, fn add_category(category: JString) -> AndroidIntent, - fn add_flags(flags: jint) -> AndroidIntent, fn get_data() -> AndroidUri, fn put_extra(extra: JString, value: JString) -> AndroidIntent, }, } +bind_java_type! { + AndroidContentResolver => "android.content.ContentResolver", + type_map = { + AndroidUri => "android.net.Uri", + }, + methods { + fn take_persistable_uri_permission(uri: AndroidUri, flags: jint) -> (), + }, +} + bind_java_type! { AndroidUri => "android.net.Uri", methods { @@ -303,42 +316,45 @@ pub extern "system" fn Java_io_github_gopher64_gopher64_SlintActivity_nativeOnAc intent_data: JObject<'caller>, ) { let outcome = unowned_env.with_env(|env| -> Result<_, jni::errors::Error> { - if result_code != AndroidActivity::RESULT_OK(env)? { - if let Ok(mut tx_lock) = SELECT_ROM_TX.lock() - && let Some(tx) = tx_lock.take() - { - let _ = tx.send(None); + if let Ok(mut tx_lock) = SELECT_ROM_TX.lock() + && let Some(tx) = tx_lock.take() + { + if result_code != AndroidActivity::RESULT_OK(env)? { + return Ok(()); // user cancelled } - return Ok(()); // user cancelled - } - if intent_data.is_null() { - if let Ok(mut tx_lock) = SELECT_ROM_TX.lock() - && let Some(tx) = tx_lock.take() - { - let _ = tx.send(None); + if intent_data.is_null() { + return Ok(()); } - return Ok(()); - } - let result_intent = unsafe { env.as_cast_raw::(&intent_data)? }; - match request_code { - REQUEST_SELECT_ROM => { - let uri = result_intent.as_ref().get_data(env)?; - if uri.is_null() { - if let Ok(mut tx_lock) = SELECT_ROM_TX.lock() - && let Some(tx) = tx_lock.take() - { - let _ = tx.send(None); + let result_intent = unsafe { env.as_cast_raw::(&intent_data)? }; + match request_code { + REQUEST_SELECT_ROM => { + let uri = result_intent.as_ref().get_data(env)?; + if uri.is_null() { + return Ok(()); + } + + if let Ok(app) = ANDROID_APP.lock() + && let Some(app) = app.as_ref() + { + let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; + let activity = unsafe { + env.as_cast_raw::>(&raw_activity_global)? + }; + + let content_resolver = activity.as_ref().get_content_resolver(env)?; + let take_flags = AndroidIntent::FLAG_GRANT_READ_URI_PERMISSION(env)?; + content_resolver.take_persistable_uri_permission(env, &uri, take_flags)?; + + let path = uri.to_string(env)?; + + let _ = tx.send(Some(std::path::PathBuf::from(path.to_string()))); + } else { + eprintln!("Android app not initialized"); + return Ok(()); } - return Ok(()); - } - let path = uri.to_string(env)?; - if let Ok(mut tx_lock) = SELECT_ROM_TX.lock() - && let Some(tx) = tx_lock.take() - { - let _ = tx.send(Some(std::path::PathBuf::from(path.to_string()))); } + _ => {} } - _ => {} } Ok(()) }); From 82c22dc18e4196cbd30bc06b58f982f78743e1d3 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 22 May 2026 09:43:20 +0200 Subject: [PATCH 0922/1117] check file exists on android (#934) * check file exists on android * more * more * more --- .../app/src/main/AndroidManifest.xml | 2 + src/device/controller/gbcart.rs | 3 + src/ui/android.rs | 63 +++++++++++++++++-- src/ui/gui.rs | 13 +++- 4 files changed, 73 insertions(+), 8 deletions(-) diff --git a/android-project/app/src/main/AndroidManifest.xml b/android-project/app/src/main/AndroidManifest.xml index 4b84b02..e3061a1 100644 --- a/android-project/app/src/main/AndroidManifest.xml +++ b/android-project/app/src/main/AndroidManifest.xml @@ -5,6 +5,8 @@ + + diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index 8ee0cc5..318b460 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -80,6 +80,9 @@ pub fn save( elapsed_time: i64, ram_path: &std::string::String, ) { + if cfg!(target_os = "android") { + return; + } update_rtc_regs(gb_cart, elapsed_time); if let Ok(file) = std::fs::File::create(ram_path) { diff --git a/src/ui/android.rs b/src/ui/android.rs index 2cbdae7..129864f 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -68,13 +68,22 @@ bind_java_type! { }, } +bind_java_type! { + ParcelFileDescriptor => "android.os.ParcelFileDescriptor", + methods { + fn close() -> (), + }, +} + bind_java_type! { AndroidContentResolver => "android.content.ContentResolver", type_map = { AndroidUri => "android.net.Uri", + ParcelFileDescriptor => "android.os.ParcelFileDescriptor", }, methods { fn take_persistable_uri_permission(uri: AndroidUri, flags: jint) -> (), + fn open_file_descriptor(uri: AndroidUri, mode: JString) -> ParcelFileDescriptor, }, } @@ -160,11 +169,9 @@ fn list_controllers_on_jvm(env: &mut Env<'_>) -> jni::errors::Result, path: &str) -> jni::errors::Result<()> { let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; - let uri_string = JString::from_str(env, path.to_string())?; + let uri_string = JString::from_str(env, path)?; let uri = AndroidUri::parse(env, &uri_string)?; let action_view = AndroidIntent::ACTION_VIEW(env)?; @@ -305,6 +312,50 @@ pub fn get_dirs() -> ui::Dirs { } } +pub fn rom_exists(path: &str) -> bool { + let path = path.to_string(); + + let vm = if let Ok(app) = ANDROID_APP.lock() + && let Some(app) = app.as_ref() + { + unsafe { JavaVM::from_raw(app.vm_as_ptr().cast()) } + } else { + eprintln!("Android app not initialized"); + return false; + }; + if let Err(err) = vm.attach_current_thread(|env| rom_exists_on_jvm(env, path)) { + eprintln!("JNI error while opening URI: {err:?}"); + return false; + } + true +} + +fn rom_exists_on_jvm(env: &mut Env<'_>, path: String) -> jni::errors::Result<()> { + if let Ok(app) = ANDROID_APP.lock() + && let Some(app) = app.as_ref() + { + let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; + let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; + let path = JString::from_str(env, path)?; + let mode = JString::from_str(env, "r")?; + let uri = AndroidUri::parse(env, &path)?; + + let content_resolver = activity.as_ref().get_content_resolver(env)?; + let parcel_file_descriptor = content_resolver.open_file_descriptor(env, &uri, &mode); + if let Ok(descriptor) = parcel_file_descriptor + && !descriptor.is_null() + { + descriptor.close(env)?; + return Ok(()); + } else { + return Err(jni::errors::Error::ObjectFreed); + } + } else { + eprintln!("Android app not initialized"); + return Err(jni::errors::Error::UninitializedJavaVM); + } +} + #[unsafe(no_mangle)] pub extern "system" fn Java_io_github_gopher64_gopher64_SlintActivity_nativeOnActivityResult< 'caller, diff --git a/src/ui/gui.rs b/src/ui/gui.rs index da541d5..8bb9ed9 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -1,4 +1,6 @@ use crate::ui; +#[cfg(target_os = "android")] +use crate::ui::android; use slint::Model; #[cfg(not(target_os = "android"))] use slint::winit_030::WinitWindowAccessor; @@ -93,13 +95,20 @@ fn file_dropped(app: &AppWindow) { }); } +fn rom_exists(path: &str) -> bool { + #[cfg(not(target_os = "android"))] + return std::fs::exists(path).unwrap_or(false); + #[cfg(target_os = "android")] + return android::rom_exists(path); +} + fn local_game_window(app: &AppWindow, config: &ui::config::Config) { app.set_recent_roms(slint::ModelRc::from(std::rc::Rc::new( slint::VecModel::from( config .recent_roms .iter() - .filter(|x| std::fs::exists(x).unwrap_or(false)) + .filter(|x| rom_exists(x)) .map(|x| { ( x.into(), @@ -585,7 +594,7 @@ pub fn run_rom( for rom in handle.get_recent_roms().iter() { if rom.0 != file_path.to_str().unwrap() && recent_roms.row_count() < 5 - && std::fs::exists(&rom.0).unwrap_or(false) + && rom_exists(&rom.0) { recent_roms.push(rom); } From e5c74d05aad053092b18cf535bcc129e2f36022c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 22 May 2026 12:43:37 +0200 Subject: [PATCH 0923/1117] Improve some dialogs (#935) * improve dialogs * more --- src/ui.rs | 7 ++- src/ui/android.rs | 15 +++++++ src/ui/gui.rs | 31 ++++++------- src/ui/gui/appwindow.slint | 29 ++++++++++--- src/ui/gui/input_profile.slint | 2 +- src/ui/gui/netplay_page.slint | 18 ++++---- src/ui/input.rs | 79 +++++++++++++++------------------- 7 files changed, 98 insertions(+), 83 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index 30ac898..2d6449b 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -129,6 +129,9 @@ pub fn sdl_close() { } pub fn get_dirs() -> Dirs { + #[cfg(target_os = "android")] + return android::get_dirs(); + #[cfg(not(target_os = "android"))] { let exe_path = std::env::current_exe().unwrap(); @@ -148,10 +151,6 @@ pub fn get_dirs() -> Dirs { } } } - #[cfg(target_os = "android")] - { - android::get_dirs() - } } impl Ui { diff --git a/src/ui/android.rs b/src/ui/android.rs index 129864f..7e479c0 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -312,6 +312,21 @@ pub fn get_dirs() -> ui::Dirs { } } +pub fn get_controller_names() -> Vec { + let mut controllers: Vec = list_controllers().into_iter().map(|c| c.name).collect(); + controllers.insert(0, "None".into()); + controllers +} + +pub fn get_controller_paths() -> Vec { + let mut controller_paths: Vec = list_controllers() + .into_iter() + .map(|c| c.descriptor) + .collect(); + controller_paths.insert(0, String::new()); + controller_paths +} + pub fn rom_exists(path: &str) -> bool { let path = path.to_string(); diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 8bb9ed9..71818c8 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -48,18 +48,16 @@ fn check_latest_version(weak: slint::Weak) { }); } -#[cfg(not(target_os = "android"))] pub fn open_uri(path: impl AsRef) { + #[cfg(target_os = "android")] + return ui::android::open_uri(path.as_ref().to_str().unwrap()); + + #[cfg(not(target_os = "android"))] if let Err(e) = open::that_detached(path) { eprintln!("Error opening path: {}", e); } } -#[cfg(target_os = "android")] -pub fn open_uri(path: impl AsRef) { - ui::android::open_uri(path.as_ref().to_str().unwrap()) -} - fn run_with_path(weak: slint::Weak, path: std::path::PathBuf) { let weak2 = weak.clone(); weak.upgrade_in_event_loop(move |handle| { @@ -608,6 +606,9 @@ pub fn run_rom( } pub async fn select_rom(rom_dir: slint::SharedString) -> Option { + #[cfg(target_os = "android")] + return ui::android::select_rom(rom_dir).await; + #[cfg(not(target_os = "android"))] { if !rom_dir.is_empty() && std::fs::exists(&rom_dir).unwrap_or(false) { @@ -621,13 +622,12 @@ pub async fn select_rom(rom_dir: slint::SharedString) -> Option Option { + #[cfg(target_os = "android")] + return ui::android::select_gb_rom(player).await; + #[cfg(not(target_os = "android"))] { rfd::AsyncFileDialog::new() @@ -637,13 +637,12 @@ pub async fn select_gb_rom(player: i32) -> Option { .await .map(|file| file.path().to_path_buf()) } - #[cfg(target_os = "android")] - { - ui::android::select_gb_rom(player).await - } } pub async fn select_gb_ram(player: i32) -> Option { + #[cfg(target_os = "android")] + return ui::android::select_gb_ram(player).await; + #[cfg(not(target_os = "android"))] { rfd::AsyncFileDialog::new() @@ -653,10 +652,6 @@ pub async fn select_gb_ram(player: i32) -> Option { .await .map(|file| file.path().to_path_buf()) } - #[cfg(target_os = "android")] - { - ui::android::select_gb_ram(player).await - } } fn open_rom(app: &AppWindow) { diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index e7b6ae6..856a788 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -1,7 +1,7 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { StandardButton } from "std-widgets.slint"; +import { StandardButton, VerticalBox, HorizontalBox } from "std-widgets.slint"; import { LocalGame, ControllerConfig, Netplay, Cheats, RetroAchievements, Settings, About } from "pages.slint"; import { SideBar } from "side_bar.slint"; import { SettingsData } from "settings_page.slint"; @@ -250,14 +250,29 @@ export component AppWindow inherits Window { } } -export component ErrorDialog inherits Dialog { +export component ErrorDialog inherits Window { in-out property text; title: @tr("Error"); - Text { - text: text; - } + callback close_clicked; + VerticalBox { + alignment: start; + vertical-stretch: 1; + padding-left: root.safe-area-insets.left; + padding-top: root.safe-area-insets.top; + padding-right: root.safe-area-insets.right; + padding-bottom: root.safe-area-insets.bottom; + Text { + text: text; + } - StandardButton { - kind: close; + HorizontalBox { + alignment: end; + StandardButton { + kind: close; + clicked => { + close_clicked(); + } + } + } } } diff --git a/src/ui/gui/input_profile.slint b/src/ui/gui/input_profile.slint index 704b6b1..b6eced8 100644 --- a/src/ui/gui/input_profile.slint +++ b/src/ui/gui/input_profile.slint @@ -1,4 +1,4 @@ -import { StandardButton, HorizontalBox, VerticalBox, Button, LineEdit, Switch, Slider } from "std-widgets.slint"; +import { HorizontalBox, VerticalBox, Button, LineEdit, Switch, Slider } from "std-widgets.slint"; export global InputProfileData { in-out property dinput; diff --git a/src/ui/gui/netplay_page.slint b/src/ui/gui/netplay_page.slint index 0c33703..36ebbe8 100644 --- a/src/ui/gui/netplay_page.slint +++ b/src/ui/gui/netplay_page.slint @@ -77,7 +77,7 @@ export component Netplay inherits Page { } } -export component CustomNetplayServer inherits Dialog { +export component CustomNetplayServer inherits Window { in-out property custom_server_url <=> NetplayData.custom_server_url; title: @tr("Custom Netplay Server"); preferred-width: 400px; @@ -94,14 +94,16 @@ export component CustomNetplayServer inherits Dialog { text: NetplayData.custom_server_url; placeholder-text: "example.com:45000"; } - } - StandardButton { - vertical-stretch: 0; - kind: ok; - clicked => { - NetplayData.custom_server_url = server_url.text; - ok_clicked(NetplayData.custom_server_url); + HorizontalBox { + alignment: end; + StandardButton { + kind: ok; + clicked => { + NetplayData.custom_server_url = server_url.text; + ok_clicked(NetplayData.custom_server_url); + } + } } } } diff --git a/src/ui/input.rs b/src/ui/input.rs index 42563af..3c62168 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -343,60 +343,49 @@ fn hotkey_pressed( pressed } -#[cfg(not(target_os = "android"))] pub fn get_controller_names() -> Vec { - let mut controllers: Vec = vec![]; + #[cfg(target_os = "android")] + return ui::android::get_controller_names(); - for joystick in get_joysticks().iter() { - let name = unsafe { sdl3_sys::joystick::SDL_GetJoystickNameForID(*joystick) }; - controllers.push(if name.is_null() { - "Unknown controller".to_string() - } else { - unsafe { std::ffi::CStr::from_ptr(name).to_str().unwrap() }.to_string() - }); + #[cfg(not(target_os = "android"))] + { + let mut controllers: Vec = vec![]; + + for joystick in get_joysticks().iter() { + let name = unsafe { sdl3_sys::joystick::SDL_GetJoystickNameForID(*joystick) }; + controllers.push(if name.is_null() { + "Unknown controller".to_string() + } else { + unsafe { std::ffi::CStr::from_ptr(name).to_str().unwrap() }.to_string() + }); + } + controllers.insert(0, "None".into()); + + controllers } - controllers.insert(0, "None".into()); - - controllers } -#[cfg(target_os = "android")] -pub fn get_controller_names() -> Vec { - let mut controllers: Vec = ui::android::list_controllers() - .into_iter() - .map(|c| c.name) - .collect(); - controllers.insert(0, "None".into()); - controllers -} - -#[cfg(not(target_os = "android"))] #[cfg(feature = "gui")] pub fn get_controller_paths() -> Vec { - let mut controller_paths: Vec = vec![]; + #[cfg(target_os = "android")] + return ui::android::get_controller_paths(); - for joystick in get_joysticks().iter() { - let path = unsafe { sdl3_sys::joystick::SDL_GetJoystickPathForID(*joystick) }; - controller_paths.push(if path.is_null() { - String::new() - } else { - unsafe { std::ffi::CStr::from_ptr(path).to_str().unwrap() }.to_string() - }); + #[cfg(not(target_os = "android"))] + { + let mut controller_paths: Vec = vec![]; + + for joystick in get_joysticks().iter() { + let path = unsafe { sdl3_sys::joystick::SDL_GetJoystickPathForID(*joystick) }; + controller_paths.push(if path.is_null() { + String::new() + } else { + unsafe { std::ffi::CStr::from_ptr(path).to_str().unwrap() }.to_string() + }); + } + controller_paths.insert(0, String::new()); + + controller_paths } - controller_paths.insert(0, String::new()); - - controller_paths -} - -#[cfg(target_os = "android")] -#[cfg(feature = "gui")] -pub fn get_controller_paths() -> Vec { - let mut controller_paths: Vec = ui::android::list_controllers() - .into_iter() - .map(|c| c.descriptor) - .collect(); - controller_paths.insert(0, String::new()); - controller_paths } fn handle_joystick_events(ui: &mut ui::Ui) { From 18fbd8e56cced2374b9a49218a06c9ca92fa23be Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 22 May 2026 15:50:50 +0200 Subject: [PATCH 0924/1117] Remove AndroidX usage declaration (#936) Removed AndroidX usage declaration from properties. --- android-project/gradle.properties | 2 -- 1 file changed, 2 deletions(-) diff --git a/android-project/gradle.properties b/android-project/gradle.properties index 1bc7706..2d6942d 100644 --- a/android-project/gradle.properties +++ b/android-project/gradle.properties @@ -13,5 +13,3 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 # org.gradle.parallel=true # Kotlin code style for this project: "official" or "obsolete": kotlin.code.style=official -# Tell Android Studio we are using AndroidX -android.useAndroidX=true From 3f9d62248a78901856d03a3095ccce3a176fbd85 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 22 May 2026 16:42:08 +0200 Subject: [PATCH 0925/1117] rom reading on android (#937) --- src/device.rs | 20 ++++++++++++----- src/ui/android.rs | 56 +++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 69 insertions(+), 7 deletions(-) diff --git a/src/device.rs b/src/device.rs index 53f5b7e..ae4d4d3 100644 --- a/src/device.rs +++ b/src/device.rs @@ -16,7 +16,7 @@ const N64_EXTENSIONS_UNCOMPRESSED: [&str; 8] = use rand::{Rng, SeedableRng}; use crate::{cheats, netplay, retroachievements, ui}; -use std::{collections::HashMap, fs, io::Read}; +use std::{collections::HashMap, io::Read}; pub mod ai; pub mod cache; @@ -156,7 +156,10 @@ pub fn get_rom_contents(file_path: &std::path::PathBuf) -> Option> { .unwrap_or_default() .eq_ignore_ascii_case("zip") { - let zip_file = fs::File::open(file_path).unwrap(); + #[cfg(target_os = "android")] + let zip_file = ui::android::get_file_from_uri(file_path).unwrap(); + #[cfg(not(target_os = "android"))] + let zip_file = std::fs::File::open(file_path).unwrap(); let mut archive = zip::ZipArchive::new(zip_file).unwrap(); for i in 0..archive.len() { let mut file = archive.by_index(i).unwrap(); @@ -173,8 +176,12 @@ pub fn get_rom_contents(file_path: &std::path::PathBuf) -> Option> { .unwrap_or_default() .eq_ignore_ascii_case("7z") { + #[cfg(target_os = "android")] + let sevenz_file = ui::android::get_file_from_uri(file_path).unwrap(); + #[cfg(not(target_os = "android"))] + let sevenz_file = std::fs::File::open(file_path).unwrap(); let mut archive = - sevenz_rust2::ArchiveReader::open(file_path, sevenz_rust2::Password::empty()).unwrap(); + sevenz_rust2::ArchiveReader::new(sevenz_file, sevenz_rust2::Password::empty()).unwrap(); let mut found = false; archive @@ -197,8 +204,11 @@ pub fn get_rom_contents(file_path: &std::path::PathBuf) -> Option> { ) .expect("ok"); } else { - contents = fs::read(file_path) - .unwrap_or_else(|_| panic!("Could not read ROM file: {}", file_path.display())); + #[cfg(target_os = "android")] + let mut file = ui::android::get_file_from_uri(file_path).unwrap(); + #[cfg(not(target_os = "android"))] + let mut file = std::fs::File::open(file_path).unwrap(); + file.read_to_end(&mut contents).unwrap(); } if contents.is_empty() { diff --git a/src/ui/android.rs b/src/ui/android.rs index 7e479c0..4ca22d1 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -1,9 +1,9 @@ +use crate::ui; use jni::objects::{JClass, JObject, JString}; use jni::refs::Global; use jni::sys::jint; use jni::{Env, EnvUnowned, JavaVM, bind_java_type}; - -use crate::ui; +use std::os::fd::FromRawFd; pub const REQUEST_SELECT_ROM: jint = 1; @@ -72,6 +72,7 @@ bind_java_type! { ParcelFileDescriptor => "android.os.ParcelFileDescriptor", methods { fn close() -> (), + fn detach_fd() -> jint, }, } @@ -371,6 +372,57 @@ fn rom_exists_on_jvm(env: &mut Env<'_>, path: String) -> jni::errors::Result<()> } } +pub fn get_file_from_uri(path: &std::path::PathBuf) -> Option { + let path = path.to_str().unwrap().into(); + + let vm = if let Ok(app) = ANDROID_APP.lock() + && let Some(app) = app.as_ref() + { + unsafe { JavaVM::from_raw(app.vm_as_ptr().cast()) } + } else { + eprintln!("Android app not initialized"); + return None; + }; + match vm.attach_current_thread(|env| get_file_from_uri_on_jvm(env, path)) { + Ok(file) => file, + Err(err) => { + eprintln!("JNI error while opening URI: {err:?}"); + return None; + } + } +} + +fn get_file_from_uri_on_jvm( + env: &mut Env<'_>, + path: String, +) -> jni::errors::Result> { + if let Ok(app) = ANDROID_APP.lock() + && let Some(app) = app.as_ref() + { + let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; + let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; + let path = JString::from_str(env, path)?; + let mode = JString::from_str(env, "r")?; + let uri = AndroidUri::parse(env, &path)?; + + let content_resolver = activity.as_ref().get_content_resolver(env)?; + let parcel_file_descriptor = content_resolver.open_file_descriptor(env, &uri, &mode); + if let Ok(descriptor) = parcel_file_descriptor + && !descriptor.is_null() + { + let owned_fd = unsafe { std::os::fd::OwnedFd::from_raw_fd(descriptor.detach_fd(env)?) }; + let file = std::fs::File::from(owned_fd); + descriptor.close(env)?; + return Ok(Some(file)); + } else { + return Ok(None); + } + } else { + eprintln!("Android app not initialized"); + return Err(jni::errors::Error::UninitializedJavaVM); + } +} + #[unsafe(no_mangle)] pub extern "system" fn Java_io_github_gopher64_gopher64_SlintActivity_nativeOnActivityResult< 'caller, From 6ef33204e884af3721b9c0ba5c68cb80dd6c52d2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 22 May 2026 19:49:15 +0200 Subject: [PATCH 0926/1117] remove duplicate code (#938) --- src/ui/android.rs | 156 ++++++++++++++++------------------------------ 1 file changed, 53 insertions(+), 103 deletions(-) diff --git a/src/ui/android.rs b/src/ui/android.rs index 4ca22d1..8daf7bd 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -124,23 +124,29 @@ pub struct ControllerInfo { pub descriptor: String, } -/// Lists connected gamepads and joysticks using the Android framework. -pub fn list_controllers() -> Vec { - let vm = if let Ok(app) = ANDROID_APP.lock() +fn get_vm() -> Option { + if let Ok(app) = ANDROID_APP.lock() && let Some(app) = app.as_ref() { - unsafe { JavaVM::from_raw(app.vm_as_ptr().cast()) } + Some(unsafe { JavaVM::from_raw(app.vm_as_ptr().cast()) }) + } else { + None + } +} + +/// Lists connected gamepads and joysticks using the Android framework. +pub fn list_controllers() -> Vec { + if let Some(vm) = get_vm() { + match vm.attach_current_thread(list_controllers_on_jvm) { + Ok(controllers) => controllers, + Err(err) => { + eprintln!("JNI error while listing controllers: {err:?}"); + Vec::new() + } + } } else { eprintln!("Android app not initialized"); - return Vec::new(); - }; - - match vm.attach_current_thread(list_controllers_on_jvm) { - Ok(controllers) => controllers, - Err(err) => { - eprintln!("JNI error while listing controllers: {err:?}"); - Vec::new() - } + Vec::new() } } @@ -207,18 +213,11 @@ fn list_controllers_on_jvm(env: &mut Env<'_>) -> jni::errors::Result, path: &str) -> jni::errors::Result<()> { } pub async fn select_rom(rom_dir: slint::SharedString) -> Option { - let vm = if let Ok(app) = ANDROID_APP.lock() - && let Some(app) = app.as_ref() - { - unsafe { JavaVM::from_raw(app.vm_as_ptr().cast()) } + if let Some(vm) = get_vm() { + if let Err(err) = + vm.attach_current_thread(|env| select_rom_on_jvm(env, rom_dir.to_string())) + { + eprintln!("JNI error while opening URI: {err:?}"); + return None; + } + let (tx, rx) = tokio::sync::oneshot::channel::>(); + if let Ok(mut tx_lock) = SELECT_ROM_TX.lock() { + tx_lock.replace(tx); + } else { + eprintln!("Error locking SELECT_ROM_TX"); + return None; + } + rx.await.unwrap_or(None) } else { eprintln!("Android app not initialized"); - return None; - }; - if let Err(err) = vm.attach_current_thread(|env| select_rom_on_jvm(env, rom_dir.to_string())) { - eprintln!("JNI error while opening URI: {err:?}"); - return None; + None } - let (tx, rx) = tokio::sync::oneshot::channel::>(); - if let Ok(mut tx_lock) = SELECT_ROM_TX.lock() { - tx_lock.replace(tx); - } else { - eprintln!("Error locking SELECT_ROM_TX"); - return None; - } - rx.await.unwrap_or(None) } pub async fn select_gb_rom(_player: i32) -> Option { @@ -329,66 +327,22 @@ pub fn get_controller_paths() -> Vec { } pub fn rom_exists(path: &str) -> bool { - let path = path.to_string(); - - let vm = if let Ok(app) = ANDROID_APP.lock() - && let Some(app) = app.as_ref() - { - unsafe { JavaVM::from_raw(app.vm_as_ptr().cast()) } - } else { - eprintln!("Android app not initialized"); - return false; - }; - if let Err(err) = vm.attach_current_thread(|env| rom_exists_on_jvm(env, path)) { - eprintln!("JNI error while opening URI: {err:?}"); - return false; - } - true -} - -fn rom_exists_on_jvm(env: &mut Env<'_>, path: String) -> jni::errors::Result<()> { - if let Ok(app) = ANDROID_APP.lock() - && let Some(app) = app.as_ref() - { - let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; - let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; - let path = JString::from_str(env, path)?; - let mode = JString::from_str(env, "r")?; - let uri = AndroidUri::parse(env, &path)?; - - let content_resolver = activity.as_ref().get_content_resolver(env)?; - let parcel_file_descriptor = content_resolver.open_file_descriptor(env, &uri, &mode); - if let Ok(descriptor) = parcel_file_descriptor - && !descriptor.is_null() - { - descriptor.close(env)?; - return Ok(()); - } else { - return Err(jni::errors::Error::ObjectFreed); - } - } else { - eprintln!("Android app not initialized"); - return Err(jni::errors::Error::UninitializedJavaVM); - } + get_file_from_uri(&std::path::PathBuf::from(path)).is_some() } pub fn get_file_from_uri(path: &std::path::PathBuf) -> Option { - let path = path.to_str().unwrap().into(); - - let vm = if let Ok(app) = ANDROID_APP.lock() - && let Some(app) = app.as_ref() - { - unsafe { JavaVM::from_raw(app.vm_as_ptr().cast()) } + if let Some(vm) = get_vm() { + let path = path.to_str().unwrap().into(); + match vm.attach_current_thread(|env| get_file_from_uri_on_jvm(env, path)) { + Ok(file) => file, + Err(err) => { + eprintln!("JNI error while opening URI: {err:?}"); + return None; + } + } } else { eprintln!("Android app not initialized"); - return None; - }; - match vm.attach_current_thread(|env| get_file_from_uri_on_jvm(env, path)) { - Ok(file) => file, - Err(err) => { - eprintln!("JNI error while opening URI: {err:?}"); - return None; - } + None } } @@ -436,13 +390,9 @@ pub extern "system" fn Java_io_github_gopher64_gopher64_SlintActivity_nativeOnAc let outcome = unowned_env.with_env(|env| -> Result<_, jni::errors::Error> { if let Ok(mut tx_lock) = SELECT_ROM_TX.lock() && let Some(tx) = tx_lock.take() + && result_code == AndroidActivity::RESULT_OK(env)? + && !intent_data.is_null() { - if result_code != AndroidActivity::RESULT_OK(env)? { - return Ok(()); // user cancelled - } - if intent_data.is_null() { - return Ok(()); - } let result_intent = unsafe { env.as_cast_raw::(&intent_data)? }; match request_code { REQUEST_SELECT_ROM => { From c16e927288a358e65b961655649f78115a20d80e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 23 May 2026 07:34:01 +0200 Subject: [PATCH 0927/1117] use native-tls (#940) * use native-tls * Add linker argument for aarch64 macOS target * Update linker settings in config.toml Remove linker configuration for macOS and consolidate for Windows. * Revert "Update linker settings in config.toml" This reverts commit 33c8da07bf87055762cfc5ba0a0defdd1b2e3d12. * more --- .cargo/config.toml | 5 +- Cargo.lock | 376 +++++++++++++++++++-------------------------- Cargo.toml | 2 +- 3 files changed, 167 insertions(+), 216 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 1f1025e..1fe243b 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -11,7 +11,10 @@ rustflags = ["-C", "link-arg=/STACK:8388608"] rustflags = ["-C", "target-cpu=x86-64-v3"] [target.'cfg(all(target_arch = "aarch64", target_os = "macos"))'] -rustflags = ["-C", "target-cpu=apple-m1"] +rustflags = [ + "-C", "target-cpu=apple-m1", + "-C", "link-arg=-headerpad_max_install_names" +] [target.'cfg(all(target_arch = "aarch64", not(target_os = "macos")))'] rustflags = ["-C", "target-cpu=cortex-a76"] diff --git a/Cargo.lock b/Cargo.lock index b7c2e23..c6e0d9e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -551,9 +551,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "av-scenechange" @@ -598,28 +598,6 @@ dependencies = [ "arrayvec", ] -[[package]] -name = "aws-lc-rs" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ec2f1fc3ec205783a5da9a7e6c1509cc69dedf09a1949e412c1e18469326d00" -dependencies = [ - "aws-lc-sys", - "zeroize", -] - -[[package]] -name = "aws-lc-sys" -version = "0.41.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a2f9779ce85b93ab6170dd940ad0169b5766ff848247aff13bb788b832fe3f4" -dependencies = [ - "cc", - "cmake", - "dunce", - "fs_extra", -] - [[package]] name = "base64" version = "0.22.1" @@ -778,15 +756,15 @@ dependencies = [ [[package]] name = "built" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64" +checksum = "5c0e531d93d39c34eef561e929e8a7f86d77a5af08aac4f6d6e39976c51858e9" [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "by_address" @@ -894,9 +872,9 @@ dependencies = [ [[package]] name = "cbc" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98db6aeaef0eeef2c1e3ce9a27b739218825dae116076352ac3777076aa22225" +checksum = "ce2dc9ee5f88d11e0beb842c88b33c8a5cf0d1329c4b19494af42b07dbfe8896" dependencies = [ "cipher", ] @@ -975,11 +953,11 @@ dependencies = [ [[package]] name = "cipher" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e34d8227fe1ba289043aeb13792056ff80fd6de1a9f49137a5f499de8e8c78ea" +checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" dependencies = [ - "crypto-common 0.2.1", + "crypto-common 0.2.2", "inout", ] @@ -1209,7 +1187,7 @@ dependencies = [ "bitflags 1.3.2", "core-foundation 0.9.4", "core-graphics-types 0.1.3", - "foreign-types", + "foreign-types 0.5.0", "libc", ] @@ -1341,9 +1319,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ "hybrid-array", ] @@ -1451,7 +1429,7 @@ checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ "block-buffer 0.12.0", "const-oid", - "crypto-common 0.2.1", + "crypto-common 0.2.2", "ctutils", "zeroize", ] @@ -1597,17 +1575,11 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edf234dd1594d6dd434a8fb8cada51ddbbc593e40e4a01556a0b31c62da2775b" -[[package]] -name = "dunce" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" - [[package]] name = "either" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] name = "embedded-io" @@ -1902,6 +1874,15 @@ dependencies = [ "yeslogic-fontconfig-sys", ] +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared 0.1.1", +] + [[package]] name = "foreign-types" version = "0.5.0" @@ -1909,7 +1890,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" dependencies = [ "foreign-types-macros", - "foreign-types-shared", + "foreign-types-shared 0.3.1", ] [[package]] @@ -1923,6 +1904,12 @@ dependencies = [ "syn", ] +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + [[package]] name = "foreign-types-shared" version = "0.3.1" @@ -1938,12 +1925,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fs_extra" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" - [[package]] name = "futures" version = "0.3.32" @@ -2081,10 +2062,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi", - "wasm-bindgen", ] [[package]] @@ -2094,11 +2073,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", - "js-sys", "libc", "r-efi 5.3.0", "wasip2", - "wasm-bindgen", ] [[package]] @@ -2263,7 +2240,7 @@ dependencies = [ "serde-big-array", "serde_json", "sevenz-rust2", - "sha2 0.11.0", + "sha2", "slint", "slint-build", "socket2", @@ -2542,6 +2519,22 @@ dependencies = [ "tower-service", ] +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + [[package]] name = "hyper-util" version = "0.1.20" @@ -2801,7 +2794,7 @@ dependencies = [ "clru", "const-field-offset", "derive_more", - "foreign-types", + "foreign-types 0.5.0", "glow 0.17.0", "glutin", "i-slint-common", @@ -3288,9 +3281,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.98" +version = "0.3.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" dependencies = [ "cfg-if", "futures-util", @@ -3396,9 +3389,9 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libmimalloc-sys" -version = "0.1.47" +version = "0.1.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d1eacfa31c33ec25e873c136ba5669f00f9866d0688bea7be4d3f7e43067df6" +checksum = "6a45a52f43e1c16f667ccfe4dd8c85b7f7c204fd5e3bf46c5b0db9a5c3c0b8e9" dependencies = [ "cc", ] @@ -3500,12 +3493,6 @@ dependencies = [ "imgref", ] -[[package]] -name = "lru-slab" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" - [[package]] name = "lyon_algorithms" version = "1.0.20" @@ -3549,11 +3536,11 @@ dependencies = [ [[package]] name = "lzma-rust2" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47bb1e988e6fb779cf720ad431242d3f03167c1b3f2b1aae7f1a94b2495b36ae" +checksum = "5e9ceaec84b54518262de7cf06b8b43e83c808349960f1610b21b0bfc9640f20" dependencies = [ - "sha2 0.10.9", + "sha2", ] [[package]] @@ -3608,7 +3595,7 @@ dependencies = [ "bitflags 2.11.1", "block", "core-graphics-types 0.1.3", - "foreign-types", + "foreign-types 0.5.0", "log", "objc", "paste", @@ -3623,7 +3610,7 @@ dependencies = [ "bitflags 2.11.1", "block", "core-graphics-types 0.2.0", - "foreign-types", + "foreign-types 0.5.0", "log", "objc", "paste", @@ -3631,9 +3618,9 @@ dependencies = [ [[package]] name = "mimalloc" -version = "0.1.50" +version = "0.1.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3627c4272df786b9260cabaa46aec1d59c93ede723d4c3ef646c503816b0640" +checksum = "2d4139bb28d14ad1facf21d5eb8825051b326e172d216b39f6d31df53cc97862" dependencies = [ "libmimalloc-sys", ] @@ -3726,6 +3713,23 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "native-tls" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + [[package]] name = "natord" version = "1.0.9" @@ -4327,12 +4331,59 @@ dependencies = [ "pathdiff", ] +[[package]] +name = "openssl" +version = "0.10.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a45fa2aa886c42762255da344f0a0d313e254066c46aad76f300c3d3da62d967" +dependencies = [ + "bitflags 2.11.1", + "cfg-if", + "foreign-types 0.3.2", + "libc", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "openssl-probe" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" +[[package]] +name = "openssl-src" +version = "300.6.0+3.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8e8cbfd3a4a8c8f089147fd7aaa33cf8c7450c4d09f8f80698a0cf093abeff4" +dependencies = [ + "cc", +] + +[[package]] +name = "openssl-sys" +version = "0.9.116" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28a22dc7140cda5f096e5e7724a6962ca81a7f8bfd2979f9b18c11af56318c4" +dependencies = [ + "cc", + "libc", + "openssl-src", + "pkg-config", + "vcpkg", +] + [[package]] name = "option-ext" version = "0.2.0" @@ -4713,9 +4764,9 @@ dependencies = [ [[package]] name = "pulldown-cmark" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c3a14896dfa883796f1cb410461aef38810ea05f2b2c33c5aded3649095fdad" +checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e" dependencies = [ "bitflags 2.11.1", "getopts", @@ -4761,62 +4812,6 @@ dependencies = [ "serde", ] -[[package]] -name = "quinn" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" -dependencies = [ - "bytes", - "cfg_aliases", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash 2.1.2", - "rustls", - "socket2", - "thiserror 2.0.18", - "tokio", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-proto" -version = "0.11.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" -dependencies = [ - "aws-lc-rs", - "bytes", - "getrandom 0.3.4", - "lru-slab", - "rand 0.9.4", - "ring", - "rustc-hash 2.1.2", - "rustls", - "rustls-pki-types", - "slab", - "thiserror 2.0.18", - "tinyvec", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-udp" -version = "0.5.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" -dependencies = [ - "cfg_aliases", - "libc", - "once_cell", - "socket2", - "tracing", - "windows-sys 0.60.2", -] - [[package]] name = "quote" version = "1.0.45" @@ -5078,22 +5073,21 @@ dependencies = [ "http-body-util", "hyper", "hyper-rustls", + "hyper-tls", "hyper-util", "js-sys", "log", "mime", + "native-tls", "percent-encoding", "pin-project-lite", - "quinn", - "rustls", "rustls-pki-types", - "rustls-platform-verifier", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", "tokio", - "tokio-rustls", + "tokio-native-tls", "tower", "tower-http", "tower-service", @@ -5263,7 +5257,6 @@ version = "0.23.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" dependencies = [ - "aws-lc-rs", "once_cell", "rustls-pki-types", "rustls-webpki", @@ -5271,62 +5264,21 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rustls-native-certs" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" -dependencies = [ - "openssl-probe", - "rustls-pki-types", - "schannel", - "security-framework", -] - [[package]] name = "rustls-pki-types" version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" dependencies = [ - "web-time", "zeroize", ] -[[package]] -name = "rustls-platform-verifier" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0" -dependencies = [ - "core-foundation 0.10.1", - "core-foundation-sys", - "jni 0.22.4", - "log", - "once_cell", - "rustls", - "rustls-native-certs", - "rustls-platform-verifier-android", - "rustls-webpki", - "security-framework", - "security-framework-sys", - "webpki-root-certs", - "windows-sys 0.61.2", -] - -[[package]] -name = "rustls-platform-verifier-android" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" - [[package]] name = "rustls-webpki" version = "0.103.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" dependencies = [ - "aws-lc-rs", "ring", "rustls-pki-types", "untrusted", @@ -5535,9 +5487,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ "itoa", "memchr", @@ -5592,7 +5544,7 @@ dependencies = [ "js-sys", "lzma-rust2", "ppmd-rust", - "sha2 0.11.0", + "sha2", "wasm-bindgen", ] @@ -5618,17 +5570,6 @@ dependencies = [ "digest 0.11.3", ] -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures 0.2.17", - "digest 0.10.7", -] - [[package]] name = "sha2" version = "0.11.0" @@ -6370,6 +6311,16 @@ dependencies = [ "syn", ] +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + [[package]] name = "tokio-rustls" version = "0.26.4" @@ -6801,6 +6752,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version_check" version = "0.9.5" @@ -6875,9 +6832,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" dependencies = [ "cfg-if", "once_cell", @@ -6888,9 +6845,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.71" +version = "0.4.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" +checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f" dependencies = [ "js-sys", "wasm-bindgen", @@ -6898,9 +6855,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6908,9 +6865,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" dependencies = [ "bumpalo", "proc-macro2", @@ -6921,9 +6878,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" dependencies = [ "unicode-ident", ] @@ -7099,9 +7056,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.98" +version = "0.3.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" +checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436" dependencies = [ "js-sys", "wasm-bindgen", @@ -7133,15 +7090,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "webpki-root-certs" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31141ce3fc3e300ae89b78c0dd67f9708061d1d2eda54b8209346fd6be9a92c" -dependencies = [ - "rustls-pki-types", -] - [[package]] name = "weezl" version = "0.1.12" diff --git a/Cargo.toml b/Cargo.toml index 3f72b78..a11ed3c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,7 +35,7 @@ fatfs = "0.3" semver = "1.0" postcard = { version = "1.1", features = ["use-std"] } clap = { version = "4.5", features = ["derive"] } -reqwest = { version = "0.13", features = ["json", "query"] } +reqwest = { version = "0.13", default-features = false, features = ["native-tls-vendored", "charset", "http2", "system-proxy", "json", "query"] } discord-rich-presence = "1.1" [target.'cfg(not(target_os = "android"))'.dependencies] From 6223f10fae3ba7298b5827ddc63faef47c567fcc Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 23 May 2026 09:04:23 +0200 Subject: [PATCH 0928/1117] improve jni paths (#941) --- android-project/.gitignore | 2 +- android-project/app/build.gradle.kts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/android-project/.gitignore b/android-project/.gitignore index 016088d..cca6ed6 100644 --- a/android-project/.gitignore +++ b/android-project/.gitignore @@ -2,7 +2,7 @@ .gradle/ build/ -app/src/main/jniLibs/ +jniLibs/ # Local configuration file (sdk path, etc) local.properties diff --git a/android-project/app/build.gradle.kts b/android-project/app/build.gradle.kts index 9001663..672da64 100644 --- a/android-project/app/build.gradle.kts +++ b/android-project/app/build.gradle.kts @@ -56,8 +56,8 @@ val ndkBuild = tasks.register("ndkBuild") { environment("ANDROID_NDK_HOME", "$ndkDir") environment("LIBCLANG_PATH", "$ndkDir/toolchains/llvm/prebuilt/linux-x86_64/musl/lib") - val jniLibsFolder = layout.projectDirectory.dir("$rootDir/app/src/main/jniLibs") - project.delete(jniLibsFolder) + val jniType = if (isRelease) "release" else "debug" + val jniLibsFolder = "$rootDir/app/src/$jniType/jniLibs" commandLine( "cargo", "ndk", @@ -65,7 +65,7 @@ val ndkBuild = tasks.register("ndkBuild") { "-P", "$minSdk", "-t", "arm64-v8a", "-t", "x86_64", - "-o", "$rootDir/app/src/main/jniLibs", + "-o", jniLibsFolder, "build", "--lib", "--profile", if (isRelease) "release" else "dev", ) From 43ebc37f877d276788704db2e268947af1f51765 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 23 May 2026 09:31:39 +0200 Subject: [PATCH 0929/1117] fix RA on android (#942) --- src/lib.rs | 2 -- src/ui/gui.rs | 3 +++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index d3fda22..b6b0b3c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -295,9 +295,7 @@ pub async fn run() -> std::io::Result<()> { } else { #[cfg(feature = "gui")] { - retroachievements::init_client(false, false, false); ui::gui::app_window(false); - retroachievements::shutdown_client(); } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 71818c8..bae4676 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -1,3 +1,4 @@ +use crate::retroachievements; use crate::ui; #[cfg(target_os = "android")] use crate::ui::android; @@ -500,6 +501,7 @@ fn about_window(app: &AppWindow) { } pub fn app_window(is_android: bool) { + retroachievements::init_client(false, false, false); let app = AppWindow::new().unwrap(); app.set_is_android(is_android); about_window(&app); @@ -521,6 +523,7 @@ pub fn app_window(is_android: bool) { slint::CloseRequestResponse::HideWindow }); app.run().unwrap(); + retroachievements::shutdown_client(); } pub fn run_rom( From a596e01ef20c2591bc2c1b3474dc9b8a2841fd0f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 23 May 2026 10:19:44 +0200 Subject: [PATCH 0930/1117] clean up controller detection (#943) --- src/ui/android.rs | 25 ++++--------------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/src/ui/android.rs b/src/ui/android.rs index 8daf7bd..4da8554 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -151,9 +151,6 @@ pub fn list_controllers() -> Vec { } fn list_controllers_on_jvm(env: &mut Env<'_>) -> jni::errors::Result> { - let source_gamepad = AndroidInputDevice::SOURCE_GAMEPAD(env)?; - let source_joystick = AndroidInputDevice::SOURCE_JOYSTICK(env)?; - let device_ids = AndroidInputDevice::get_device_ids(env)?; let count = device_ids.len(env)?; let mut ids = vec![0i32; count]; @@ -168,28 +165,14 @@ fn list_controllers_on_jvm(env: &mut Env<'_>) -> jni::errors::Result Date: Sat, 23 May 2026 11:36:33 +0200 Subject: [PATCH 0931/1117] remove focusscope (#945) --- src/ui/gui/side_bar.slint | 49 --------------------------------------- 1 file changed, 49 deletions(-) diff --git a/src/ui/gui/side_bar.slint b/src/ui/gui/side_bar.slint index c2f9887..5d1566c 100644 --- a/src/ui/gui/side_bar.slint +++ b/src/ui/gui/side_bar.slint @@ -93,9 +93,6 @@ export component SideBar inherits Rectangle { in property title: "Gopher64"; in property portrait; in-out property current-item: 0; - out property current-focused: fs.has-focus ? fs.focused-tab : -1; - - forward-focus: fs; Rectangle { width: 100%; @@ -103,48 +100,6 @@ export component SideBar inherits Rectangle { background: Palette.background.darker(0.2); } - fs := FocusScope { - key-pressed(event) => { - if (event.text == "\n") { - root.current-item = root.current-focused; - return accept; - } - if (root.portrait) { - if (event.text == Key.LeftArrow) { - self.focused-tab = Math.max(self.focused-tab - 1, 0); - return accept; - } - if (event.text == Key.RightArrow) { - self.focused-tab = Math.min(self.focused-tab + 1, root.model.length - 1); - return accept; - } - } else { - if (event.text == Key.UpArrow) { - self.focused-tab = Math.max(self.focused-tab - 1, 0); - return accept; - } - if (event.text == Key.DownArrow) { - self.focused-tab = Math.min(self.focused-tab + 1, root.model.length - 1); - return accept; - } - } - return reject; - } - - key-released(event) => { - if (event.text == " ") { - root.current-item = root.current-focused; - return accept; - } - return reject; - } - - property focused-tab: 0; - - width: 0; - height: 0; - } - // Bottom bar in portrait: icons in a row, centered vertically in the bar. portrait-strip := HorizontalLayout { visible: root.portrait; @@ -155,7 +110,6 @@ export component SideBar inherits Rectangle { alignment: space-evenly; accessible-role: tab-list; - accessible-delegate-focus: root.current-focused >= 0 ? root.current-focused : root.current-item; accessible-label: root.title; accessible-item-count: root.model.length; @@ -168,7 +122,6 @@ export component SideBar inherits Rectangle { } tab-index: index; - has-focus: index == root.current-focused; icon: item.icon; label: item.label; selected: index == root.current-item; @@ -186,7 +139,6 @@ export component SideBar inherits Rectangle { alignment: space-evenly; accessible-role: tab-list; - accessible-delegate-focus: root.current-focused >= 0 ? root.current-focused : root.current-item; accessible-label: root.title; accessible-item-count: root.model.length; @@ -199,7 +151,6 @@ export component SideBar inherits Rectangle { } tab-index: index; - has-focus: index == root.current-focused; icon: item.icon; label: item.label; selected: index == root.current-item; From d25d3a460aa1598eeaf0ab70cfae1911df1e3744 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 23 May 2026 15:44:14 +0200 Subject: [PATCH 0932/1117] save settings on android (#946) * save settings on android * more * more --- src/lib.rs | 29 ++++++++++++++++++++++++++--- src/ui/android.rs | 3 +++ src/ui/gui.rs | 34 ++++++++++++++++++---------------- 3 files changed, 47 insertions(+), 19 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index b6b0b3c..cbd2070 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -7,6 +7,8 @@ mod retroachievements; mod savestates; mod ui; use clap::Parser; +#[cfg(target_os = "android")] +use slint::ComponentHandle; use std::io::Error; #[cfg(target_os = "android")] @@ -295,7 +297,8 @@ pub async fn run() -> std::io::Result<()> { } else { #[cfg(feature = "gui")] { - ui::gui::app_window(false); + let app = ui::gui::AppWindow::new().unwrap(); + ui::gui::app_window(&app, false); } } @@ -307,7 +310,26 @@ pub async fn run() -> std::io::Result<()> { #[unsafe(no_mangle)] #[tokio::main(worker_threads = 4)] async fn android_main(app: slint::android::AndroidApp) { - slint::android::init(app.clone()).unwrap(); + slint::android::init_with_event_listener(app.clone(), move |event| match event { + slint::android::android_activity::PollEvent::Main(main_event) => match main_event { + slint::android::android_activity::MainEvent::TerminateWindow { .. } => { + if let Ok(weak_app_window) = android::WEAK_SLINT_WINDOW.lock() + && let Some(weak_app_window) = weak_app_window.as_ref() + { + { + weak_app_window + .upgrade_in_event_loop(move |handle| ui::gui::save_settings(&handle)) + .unwrap(); + } + } + } + _ => {} + }, + _ => {} + }) + .unwrap(); + let app_window = ui::gui::AppWindow::new().unwrap(); + *android::WEAK_SLINT_WINDOW.lock().unwrap() = Some(app_window.as_weak()); *android::ANDROID_APP.lock().unwrap() = Some(app); @@ -318,6 +340,7 @@ async fn android_main(app: slint::android::AndroidApp) { std::fs::create_dir_all(dirs.data_dir.join("saves")).unwrap(); std::fs::create_dir_all(dirs.data_dir.join("states")).unwrap(); - ui::gui::app_window(true); + ui::gui::app_window(&app_window, true); + *android::WEAK_SLINT_WINDOW.lock().unwrap() = None; *android::ANDROID_APP.lock().unwrap() = None; } diff --git a/src/ui/android.rs b/src/ui/android.rs index 4da8554..a74a466 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -14,6 +14,9 @@ pub static SELECT_ROM_TX: std::sync::Mutex< Option>>, > = std::sync::Mutex::new(None); +pub static WEAK_SLINT_WINDOW: std::sync::Mutex>> = + std::sync::Mutex::new(None); + bind_java_type! { DocumentsContract => "android.provider.DocumentsContract", fields { diff --git a/src/ui/gui.rs b/src/ui/gui.rs index bae4676..2dd8330 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -500,28 +500,30 @@ fn about_window(app: &AppWindow) { } } -pub fn app_window(is_android: bool) { +pub fn app_window(app: &AppWindow, is_android: bool) { retroachievements::init_client(false, false, false); - let app = AppWindow::new().unwrap(); app.set_is_android(is_android); - about_window(&app); - ui::retroachievements::ra_window(&app); + about_window(app); + ui::retroachievements::ra_window(app); { let config = ui::config::Config::new(); - settings_window(&app, &config); - controller_window(&app, &config); - local_game_window(&app, &config); + settings_window(app, &config); + controller_window(app, &config); + local_game_window(app, &config); } - ui::netplay::netplay_window(&app); - ui::cheats::cheats_window(&app); + ui::netplay::netplay_window(app); + ui::cheats::cheats_window(app); - let weak_app = app.as_weak(); - app.window().on_close_requested(move || { - weak_app - .upgrade_in_event_loop(move |handle| save_settings(&handle)) - .unwrap(); - slint::CloseRequestResponse::HideWindow - }); + #[cfg(not(target_os = "android"))] + { + let weak_app = app.as_weak(); + app.window().on_close_requested(move || { + weak_app + .upgrade_in_event_loop(move |handle| save_settings(&handle)) + .unwrap(); + slint::CloseRequestResponse::HideWindow + }); + } app.run().unwrap(); retroachievements::shutdown_client(); } From 00ec5547837dc2158be14fb7105cec4d5ea645b5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 23 May 2026 20:57:44 +0200 Subject: [PATCH 0933/1117] wait a little longer for broadcast response (#947) --- src/ui/netplay.rs | 70 +++++++++++++++++++++++++---------------------- 1 file changed, 38 insertions(+), 32 deletions(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 1bf4f79..e7ed8c2 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -108,44 +108,50 @@ impl NetplayPages for NetplayJoin { } } +async fn get_local_servers() -> Vec<(String, String)> { + if let Ok(broadcast_sock) = + tokio::net::UdpSocket::bind((std::net::Ipv4Addr::UNSPECIFIED, 0)).await + && broadcast_sock.set_broadcast(true).is_ok() + { + let data: [u8; 1] = [1]; + if let Err(e) = broadcast_sock + .send_to(&data, (std::net::Ipv4Addr::BROADCAST, 45000)) + .await + { + eprintln!("Error sending broadcast: {}", e); + return vec![]; + } + let mut buffer = [0; 1024]; + if let Ok(Ok(result)) = tokio::time::timeout( + std::time::Duration::from_millis(500), + broadcast_sock.recv(&mut buffer), + ) + .await + && let Ok(data) = serde_json::from_slice::>( + &buffer[..result], + ) + { + let mut local_servers = vec![]; + for server in data.iter() { + local_servers.push((server.0.into(), server.1.into())); + } + local_servers + } else { + vec![] + } + } else { + eprintln!("Error creating netplay broadcast socket"); + vec![] + } +} + fn populate_server_names(weak: slint::Weak) { let task = ui::WEB_CLIENT .get("https://dispatch.gopher64.com/getRegions") .header("netplay-id", env!("NETPLAY_ID")) .send(); tokio::spawn(async move { - let mut local_servers: Vec<(String, String)> = vec![]; - - if let Ok(broadcast_sock) = - tokio::net::UdpSocket::bind((std::net::Ipv4Addr::UNSPECIFIED, 0)).await - && broadcast_sock.set_broadcast(true).is_ok() - { - let data: [u8; 1] = [1]; - if let Err(e) = broadcast_sock - .send_to(&data, (std::net::Ipv4Addr::BROADCAST, 45000)) - .await - { - eprintln!("Error sending broadcast: {}", e); - } - let mut buffer = [0; 1024]; - if let Ok(Ok(result)) = tokio::time::timeout( - std::time::Duration::from_millis(200), - broadcast_sock.recv(&mut buffer), - ) - .await - && let Ok(data) = serde_json::from_slice::>( - &buffer[..result], - ) - { - for server in data.iter() { - local_servers.push((server.0.into(), server.1.into())); - } - } - } else { - eprintln!("Error creating netplay broadcast socket"); - } - - let response = task.await; + let (response, local_servers) = tokio::join!(task, get_local_servers()); let public_servers = if let Ok(response) = response && let Ok(servers) = response.json::>().await { From 411cb0efa75c95b9774f34a1617a4c8d2cef71f4 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 25 May 2026 11:31:33 +0200 Subject: [PATCH 0934/1117] remove dialog windows (#948) --- data/translations/de/LC_MESSAGES/gopher64.po | 241 +++--- data/translations/es/LC_MESSAGES/gopher64.po | 239 +++--- data/translations/fr/LC_MESSAGES/gopher64.po | 179 ++-- data/translations/gopher64.pot | 231 +++--- data/translations/ja/LC_MESSAGES/gopher64.po | 243 +++--- data/translations/nl/LC_MESSAGES/gopher64.po | 241 +++--- .../pt_BR/LC_MESSAGES/gopher64.po | 177 ++-- data/translations/ru/LC_MESSAGES/gopher64.po | 242 +++--- src/ui/cheats.rs | 11 +- src/ui/gui.rs | 90 +- src/ui/gui/appwindow.slint | 191 ++++- src/ui/gui/input_profile.slint | 20 +- src/ui/gui/netplay_create.slint | 296 +++---- src/ui/gui/netplay_join.slint | 245 +++--- src/ui/gui/netplay_page.slint | 39 +- src/ui/gui/netplay_wait.slint | 184 ++--- src/ui/netplay.rs | 777 ++++++++---------- 17 files changed, 1854 insertions(+), 1792 deletions(-) diff --git a/data/translations/de/LC_MESSAGES/gopher64.po b/data/translations/de/LC_MESSAGES/gopher64.po index d18990d..1a56eed 100644 --- a/data/translations/de/LC_MESSAGES/gopher64.po +++ b/data/translations/de/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-19 09:43+0000\n" +"POT-Creation-Date: 2026-05-25 08:28+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: German\n" @@ -47,46 +47,41 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Spenden (über GitHub)" -#: src/ui/gui/appwindow.slint:103 +#: src/ui/gui/appwindow.slint:151 msgctxt "Menu" msgid "Local Game" msgstr "Lokales Spiel" -#: src/ui/gui/appwindow.slint:107 +#: src/ui/gui/appwindow.slint:155 msgctxt "Menu" msgid "Controller Config" msgstr "Controller-Konfiguration" -#: src/ui/gui/appwindow.slint:111 +#: src/ui/gui/appwindow.slint:159 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:115 +#: src/ui/gui/appwindow.slint:163 msgctxt "Menu" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/appwindow.slint:119 +#: src/ui/gui/appwindow.slint:167 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:123 +#: src/ui/gui/appwindow.slint:171 msgctxt "Menu" msgid "Settings" msgstr "Einstellungen" -#: src/ui/gui/appwindow.slint:127 +#: src/ui/gui/appwindow.slint:175 msgctxt "Menu" msgid "About" msgstr "Über" -#: src/ui/gui/appwindow.slint:248 -msgctxt "ErrorDialog" -msgid "Error" -msgstr "Fehler" - #: src/ui/gui/cheat_page.slint:15 msgctxt "Cheats" msgid "Cheats" @@ -102,7 +97,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Cheats für alle ROMs löschen" -#: src/ui/gui/cheat_page.slint:87 +#: src/ui/gui/cheat_page.slint:88 msgctxt "Cheats" msgid "No Cheats Available" msgstr "Keine Cheats verfügbar" @@ -142,62 +137,67 @@ msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "Controller-Zuweisung" -#: src/ui/gui/input_profile.slint:10 +#: src/ui/gui/input_profile.slint:12 msgctxt "InputProfileDialog" msgid "Create/Modify Input Profile" msgstr "Eingabeprofil erstellen/bearbeiten" -#: src/ui/gui/input_profile.slint:18 +#: src/ui/gui/input_profile.slint:25 msgctxt "InputProfileDialog" msgid "Enter profile name to create or modify" msgstr "Profilname zum Erstellen oder Bearbeiten eingeben" -#: src/ui/gui/input_profile.slint:29 +#: src/ui/gui/input_profile.slint:38 msgctxt "InputProfileDialog" msgid "Deadzone Percentage" msgstr "Deadzone Größe in Prozent" -#: src/ui/gui/input_profile.slint:51 +#: src/ui/gui/input_profile.slint:61 msgctxt "InputProfileDialog" msgid "Use DirectInput" msgstr "DirectInput verwenden" -#: src/ui/gui/input_profile.slint:61 +#: src/ui/gui/input_profile.slint:74 msgctxt "InputProfileDialog" msgid "Start Profile Creation Wizard" msgstr "Assistent zur Profilerstellung starten" -#: src/ui/gui/localgame_page.slint:18 +#: src/ui/gui/input_profile.slint:82 +msgctxt "InputProfileDialog" +msgid "Cancel" +msgstr "Abbrechen" + +#: src/ui/gui/localgame_page.slint:19 msgctxt "LocalGame" msgid "Local Game" msgstr "Lokales Spiel" -#: src/ui/gui/localgame_page.slint:25 +#: src/ui/gui/localgame_page.slint:26 msgctxt "LocalGame" msgid "Open ROM" msgstr "ROM öffnen" -#: src/ui/gui/localgame_page.slint:36 +#: src/ui/gui/localgame_page.slint:37 msgctxt "LocalGame" msgid "Open Saves Folder" msgstr "Speicherordner öffnen" -#: src/ui/gui/localgame_page.slint:53 +#: src/ui/gui/localgame_page.slint:54 msgctxt "LocalGame" msgid "Recent ROMs" msgstr "Zuletzt verwendete ROMs" -#: src/ui/gui/netplay_create.slint:5 +#: src/ui/gui/netplay_create.slint:7 msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "Netplay: Sitzung erstellen" -#: src/ui/gui/netplay_create.slint:24 +#: src/ui/gui/netplay_create.slint:23 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "Sitzungsname:" -#: src/ui/gui/netplay_create.slint:28 +#: src/ui/gui/netplay_create.slint:27 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "Sitzungsname eingeben" @@ -212,27 +212,27 @@ msgctxt "NetplayCreate" msgid "Enter session password" msgstr "Sitzungspasswort eingeben" -#: src/ui/gui/netplay_create.slint:51 +#: src/ui/gui/netplay_create.slint:52 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "Spielername:" -#: src/ui/gui/netplay_create.slint:55 +#: src/ui/gui/netplay_create.slint:56 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "Spielername eingeben" -#: src/ui/gui/netplay_create.slint:64 +#: src/ui/gui/netplay_create.slint:66 msgctxt "NetplayCreate" msgid "Server:" msgstr "Server:" -#: src/ui/gui/netplay_create.slint:82 +#: src/ui/gui/netplay_create.slint:86 msgctxt "NetplayCreate" msgid "Select ROM" msgstr "ROM auswählen" -#: src/ui/gui/netplay_create.slint:97 +#: src/ui/gui/netplay_create.slint:102 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." @@ -240,168 +240,167 @@ msgstr "" "Für dieses Spiel sind Cheats aktiviert. Cheats werden mit anderen Spielern " "synchronisiert." -#: src/ui/gui/netplay_create.slint:103 +#: src/ui/gui/netplay_create.slint:112 msgctxt "NetplayCreate" msgid "Create Session" msgstr "Sitzung erstellen" -#: src/ui/gui/netplay_create.slint:126 -msgctxt "DispatcherDialog" -msgid "Creating Server" -msgstr "Server wird erstellt" +#: src/ui/gui/netplay_create.slint:132 +msgctxt "NetplayCreate" +msgid "Cancel" +msgstr "Abbrechen" -#: src/ui/gui/netplay_create.slint:128 -msgctxt "DispatcherDialog" -msgid "Creating server, please wait...This may take about 30 seconds." -msgstr "" -"Server wird erstellt, bitte warten … Dies kann etwa 30 Sekunden dauern." +#: src/ui/gui/netplay_create.slint:155 +msgctxt "CustomServerDialog" +msgid "Enter a custom server URL" +msgstr "Eigene Server-URL eingeben" -#: src/ui/gui/netplay_join.slint:5 +#: src/ui/gui/netplay_join.slint:7 msgctxt "NetplayJoin" msgid "Netplay: Join Session" msgstr "Netplay: Sitzung beitreten" -#: src/ui/gui/netplay_join.slint:30 +#: src/ui/gui/netplay_join.slint:18 msgctxt "NetplayJoin" msgid "Player Name (required):" msgstr "Spielername (erforderlich):" -#: src/ui/gui/netplay_join.slint:34 +#: src/ui/gui/netplay_join.slint:22 msgctxt "NetplayJoin" msgid "Enter player name" msgstr "Spielername eingeben" -#: src/ui/gui/netplay_join.slint:43 -msgctxt "NetplayJoin" -msgid "Custom Server URL (optional):" -msgstr "Eigene Server-URL (optional):" - -#: src/ui/gui/netplay_join.slint:57 -msgctxt "NetplayJoin" -msgid "Refreshing session list, please wait..." -msgstr "Sitzungsliste wird aktualisiert, bitte warten …" - -#: src/ui/gui/netplay_join.slint:62 -msgctxt "NetplayJoin" -msgid "Click on a session below to select it" -msgstr "Auf eine Sitzung klicken um diese auszuwählen" - -#: src/ui/gui/netplay_join.slint:67 -msgctxt "NetplayJoin" -msgid "No sessions available. Please refresh to check again." -msgstr "Keine Sitzungen verfügbar. Bitte aktualisieren, um erneut zu prüfen." - -#: src/ui/gui/netplay_join.slint:73 -msgctxt "NetplayJoin" -msgid "Server" -msgstr "Server" - -#: src/ui/gui/netplay_join.slint:74 -msgctxt "NetplayJoin" -msgid "Session Name" -msgstr "Sitzungsname" - -#: src/ui/gui/netplay_join.slint:75 -msgctxt "NetplayJoin" -msgid "Game Name" -msgstr "Spielname" - -#: src/ui/gui/netplay_join.slint:76 -msgctxt "NetplayJoin" -msgid "Password" -msgstr "Passwort" - -#: src/ui/gui/netplay_join.slint:77 -msgctxt "NetplayJoin" -msgid "Cheats" -msgstr "Cheats" - -#: src/ui/gui/netplay_join.slint:91 -msgctxt "NetplayJoin" -msgid "Refresh Session List" -msgstr "Sitzungsliste aktualisieren" - -#: src/ui/gui/netplay_join.slint:105 +#: src/ui/gui/netplay_join.slint:31 msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "Passwort (falls erforderlich)" -#: src/ui/gui/netplay_join.slint:112 +#: src/ui/gui/netplay_join.slint:41 +msgctxt "NetplayJoin" +msgid "Custom Server URL (optional):" +msgstr "Eigene Server-URL (optional):" + +#: src/ui/gui/netplay_join.slint:53 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "ROM auswählen" -#: src/ui/gui/netplay_join.slint:125 +#: src/ui/gui/netplay_join.slint:68 +msgctxt "NetplayJoin" +msgid "Refreshing session list, please wait..." +msgstr "Sitzungsliste wird aktualisiert, bitte warten …" + +#: src/ui/gui/netplay_join.slint:73 +msgctxt "NetplayJoin" +msgid "Click on a session below to select it" +msgstr "Auf eine Sitzung klicken um diese auszuwählen" + +#: src/ui/gui/netplay_join.slint:78 +msgctxt "NetplayJoin" +msgid "No sessions available. Please refresh to check again." +msgstr "Keine Sitzungen verfügbar. Bitte aktualisieren, um erneut zu prüfen." + +#: src/ui/gui/netplay_join.slint:84 +msgctxt "NetplayJoin" +msgid "Server" +msgstr "Server" + +#: src/ui/gui/netplay_join.slint:85 +msgctxt "NetplayJoin" +msgid "Session Name" +msgstr "Sitzungsname" + +#: src/ui/gui/netplay_join.slint:86 +msgctxt "NetplayJoin" +msgid "Game Name" +msgstr "Spielname" + +#: src/ui/gui/netplay_join.slint:87 +msgctxt "NetplayJoin" +msgid "Password" +msgstr "Passwort" + +#: src/ui/gui/netplay_join.slint:88 +msgctxt "NetplayJoin" +msgid "Cheats" +msgstr "Cheats" + +#: src/ui/gui/netplay_join.slint:102 +msgctxt "NetplayJoin" +msgid "Refresh Session List" +msgstr "Sitzungsliste aktualisieren" + +#: src/ui/gui/netplay_join.slint:119 msgctxt "NetplayJoin" msgid "Join Session" msgstr "Sitzung beitreten" -#: src/ui/gui/netplay_page.slint:33 +#: src/ui/gui/netplay_join.slint:132 +msgctxt "NetplayJoin" +msgid "Cancel" +msgstr "Abbrechen" + +#: src/ui/gui/netplay_page.slint:37 msgctxt "Netplay" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/netplay_page.slint:40 +#: src/ui/gui/netplay_page.slint:45 msgctxt "Netplay" msgid "Create Session" msgstr "Sitzung erstellen" -#: src/ui/gui/netplay_page.slint:50 +#: src/ui/gui/netplay_page.slint:56 msgctxt "Netplay" msgid "Join Session" msgstr "Sitzung beitreten" -#: src/ui/gui/netplay_page.slint:64 +#: src/ui/gui/netplay_page.slint:70 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "Netplay-Discord-Kanal" -#: src/ui/gui/netplay_page.slint:71 +#: src/ui/gui/netplay_page.slint:77 msgctxt "Netplay" msgid "Provide Feedback" msgstr "Feedback geben" -#: src/ui/gui/netplay_page.slint:82 -msgctxt "CustomNetplayServer" -msgid "Custom Netplay Server" -msgstr "Benutzerdefinierter Netplay-Server" - -#: src/ui/gui/netplay_wait.slint:14 +#: src/ui/gui/netplay_wait.slint:15 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay: Warteraum" -#: src/ui/gui/netplay_wait.slint:31 +#: src/ui/gui/netplay_wait.slint:27 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Sitzungsname:" -#: src/ui/gui/netplay_wait.slint:37 +#: src/ui/gui/netplay_wait.slint:33 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Spielname:" -#: src/ui/gui/netplay_wait.slint:43 +#: src/ui/gui/netplay_wait.slint:39 msgctxt "NetplayWait" msgid "Ping:" msgstr "Ping:" -#: src/ui/gui/netplay_wait.slint:50 +#: src/ui/gui/netplay_wait.slint:48 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Spieler 1:" -#: src/ui/gui/netplay_wait.slint:54 +#: src/ui/gui/netplay_wait.slint:52 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Spieler 2:" -#: src/ui/gui/netplay_wait.slint:60 +#: src/ui/gui/netplay_wait.slint:58 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Spieler 3:" -#: src/ui/gui/netplay_wait.slint:64 +#: src/ui/gui/netplay_wait.slint:62 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Spieler 4:" @@ -416,11 +415,16 @@ msgctxt "NetplayWait" msgid "Send Message" msgstr "Nachricht senden" -#: src/ui/gui/netplay_wait.slint:102 +#: src/ui/gui/netplay_wait.slint:105 msgctxt "NetplayWait" msgid "Start Game" msgstr "Spiel starten" +#: src/ui/gui/netplay_wait.slint:113 +msgctxt "NetplayWait" +msgid "Cancel" +msgstr "Abbrechen" + #: src/ui/gui/retroachievements_page.slint:19 msgctxt "RAData" msgid "Not currently logged in" @@ -546,6 +550,11 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "Was möchten Sie sagen?" +#~ msgctxt "NetplayCreate" +#~ msgid "Creating server, please wait...This may take about 30 seconds." +#~ msgstr "" +#~ "Server wird erstellt, bitte warten … Dies kann etwa 30 Sekunden dauern." + #~ msgctxt "ControllerConfig" #~ msgid "Port" #~ msgstr "Port" diff --git a/data/translations/es/LC_MESSAGES/gopher64.po b/data/translations/es/LC_MESSAGES/gopher64.po index 6e3201d..30cc1ab 100644 --- a/data/translations/es/LC_MESSAGES/gopher64.po +++ b/data/translations/es/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-19 09:43+0000\n" +"POT-Creation-Date: 2026-05-25 08:28+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: Gemini\n" "Language-Team: Spanish (Spain)\n" @@ -47,46 +47,41 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Donar (a través de GitHub)" -#: src/ui/gui/appwindow.slint:103 +#: src/ui/gui/appwindow.slint:151 msgctxt "Menu" msgid "Local Game" msgstr "Juego local" -#: src/ui/gui/appwindow.slint:107 +#: src/ui/gui/appwindow.slint:155 msgctxt "Menu" msgid "Controller Config" msgstr "Config. del mando" -#: src/ui/gui/appwindow.slint:111 +#: src/ui/gui/appwindow.slint:159 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:115 +#: src/ui/gui/appwindow.slint:163 msgctxt "Menu" msgid "Cheats" msgstr "Trucos" -#: src/ui/gui/appwindow.slint:119 +#: src/ui/gui/appwindow.slint:167 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:123 +#: src/ui/gui/appwindow.slint:171 msgctxt "Menu" msgid "Settings" msgstr "Ajustes" -#: src/ui/gui/appwindow.slint:127 +#: src/ui/gui/appwindow.slint:175 msgctxt "Menu" msgid "About" msgstr "Acerca de" -#: src/ui/gui/appwindow.slint:248 -msgctxt "ErrorDialog" -msgid "Error" -msgstr "Error" - #: src/ui/gui/cheat_page.slint:15 msgctxt "Cheats" msgid "Cheats" @@ -102,7 +97,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Borrar trucos de todas las ROMs" -#: src/ui/gui/cheat_page.slint:87 +#: src/ui/gui/cheat_page.slint:88 msgctxt "Cheats" msgid "No Cheats Available" msgstr "No hay trucos disponibles" @@ -142,62 +137,67 @@ msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "Asignación del mando" -#: src/ui/gui/input_profile.slint:10 +#: src/ui/gui/input_profile.slint:12 msgctxt "InputProfileDialog" msgid "Create/Modify Input Profile" msgstr "Crear/Modificar perfil de entrada" -#: src/ui/gui/input_profile.slint:18 +#: src/ui/gui/input_profile.slint:25 msgctxt "InputProfileDialog" msgid "Enter profile name to create or modify" msgstr "Introduce el nombre del perfil para crear o modificar" -#: src/ui/gui/input_profile.slint:29 +#: src/ui/gui/input_profile.slint:38 msgctxt "InputProfileDialog" msgid "Deadzone Percentage" msgstr "Porcentaje de zona muerta" -#: src/ui/gui/input_profile.slint:51 +#: src/ui/gui/input_profile.slint:61 msgctxt "InputProfileDialog" msgid "Use DirectInput" msgstr "Usar DirectInput" -#: src/ui/gui/input_profile.slint:61 +#: src/ui/gui/input_profile.slint:74 msgctxt "InputProfileDialog" msgid "Start Profile Creation Wizard" msgstr "Iniciar asistente de creación de perfil" -#: src/ui/gui/localgame_page.slint:18 +#: src/ui/gui/input_profile.slint:82 +msgctxt "InputProfileDialog" +msgid "Cancel" +msgstr "Cancelar" + +#: src/ui/gui/localgame_page.slint:19 msgctxt "LocalGame" msgid "Local Game" msgstr "Juego local" -#: src/ui/gui/localgame_page.slint:25 +#: src/ui/gui/localgame_page.slint:26 msgctxt "LocalGame" msgid "Open ROM" msgstr "Abrir ROM" -#: src/ui/gui/localgame_page.slint:36 +#: src/ui/gui/localgame_page.slint:37 msgctxt "LocalGame" msgid "Open Saves Folder" msgstr "Abrir carpeta de guardados" -#: src/ui/gui/localgame_page.slint:53 +#: src/ui/gui/localgame_page.slint:54 msgctxt "LocalGame" msgid "Recent ROMs" msgstr "ROMs recientes" -#: src/ui/gui/netplay_create.slint:5 +#: src/ui/gui/netplay_create.slint:7 msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "Netplay: Crear sesión" -#: src/ui/gui/netplay_create.slint:24 +#: src/ui/gui/netplay_create.slint:23 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "Nombre de la sesión:" -#: src/ui/gui/netplay_create.slint:28 +#: src/ui/gui/netplay_create.slint:27 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "Introduce el nombre de la sesión" @@ -212,27 +212,27 @@ msgctxt "NetplayCreate" msgid "Enter session password" msgstr "Introduce la contraseña" -#: src/ui/gui/netplay_create.slint:51 +#: src/ui/gui/netplay_create.slint:52 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "Nombre del jugador:" -#: src/ui/gui/netplay_create.slint:55 +#: src/ui/gui/netplay_create.slint:56 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "Introduce tu nombre" -#: src/ui/gui/netplay_create.slint:64 +#: src/ui/gui/netplay_create.slint:66 msgctxt "NetplayCreate" msgid "Server:" msgstr "Servidor:" -#: src/ui/gui/netplay_create.slint:82 +#: src/ui/gui/netplay_create.slint:86 msgctxt "NetplayCreate" msgid "Select ROM" msgstr "Seleccionar ROM" -#: src/ui/gui/netplay_create.slint:97 +#: src/ui/gui/netplay_create.slint:102 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." @@ -240,167 +240,167 @@ msgstr "" "Este juego tiene trucos activados. Los trucos se sincronizarán con los otros " "jugadores." -#: src/ui/gui/netplay_create.slint:103 +#: src/ui/gui/netplay_create.slint:112 msgctxt "NetplayCreate" msgid "Create Session" msgstr "Crear sesión" -#: src/ui/gui/netplay_create.slint:126 -msgctxt "DispatcherDialog" -msgid "Creating Server" -msgstr "Creando servidor" +#: src/ui/gui/netplay_create.slint:132 +msgctxt "NetplayCreate" +msgid "Cancel" +msgstr "Cancelar" -#: src/ui/gui/netplay_create.slint:128 -msgctxt "DispatcherDialog" -msgid "Creating server, please wait...This may take about 30 seconds." -msgstr "Creando servidor, espera... Puede tardar unos 30 segundos." +#: src/ui/gui/netplay_create.slint:155 +msgctxt "CustomServerDialog" +msgid "Enter a custom server URL" +msgstr "Introduce la URL de servidor personalizado" -#: src/ui/gui/netplay_join.slint:5 +#: src/ui/gui/netplay_join.slint:7 msgctxt "NetplayJoin" msgid "Netplay: Join Session" msgstr "Netplay: Unirse a la sesión" -#: src/ui/gui/netplay_join.slint:30 +#: src/ui/gui/netplay_join.slint:18 msgctxt "NetplayJoin" msgid "Player Name (required):" msgstr "Nombre de jugador (requerido):" -#: src/ui/gui/netplay_join.slint:34 +#: src/ui/gui/netplay_join.slint:22 msgctxt "NetplayJoin" msgid "Enter player name" msgstr "Introduce tu nombre" -#: src/ui/gui/netplay_join.slint:43 -msgctxt "NetplayJoin" -msgid "Custom Server URL (optional):" -msgstr "URL de servidor personalizado (opcional):" - -#: src/ui/gui/netplay_join.slint:57 -msgctxt "NetplayJoin" -msgid "Refreshing session list, please wait..." -msgstr "Actualizando lista de sesiones, espera..." - -#: src/ui/gui/netplay_join.slint:62 -msgctxt "NetplayJoin" -msgid "Click on a session below to select it" -msgstr "Pulsa una sesión para seleccionarla" - -#: src/ui/gui/netplay_join.slint:67 -msgctxt "NetplayJoin" -msgid "No sessions available. Please refresh to check again." -msgstr "No hay sesiones disponibles. Actualiza para comprobar de nuevo." - -#: src/ui/gui/netplay_join.slint:73 -msgctxt "NetplayJoin" -msgid "Server" -msgstr "Servidor" - -#: src/ui/gui/netplay_join.slint:74 -msgctxt "NetplayJoin" -msgid "Session Name" -msgstr "Nombre de la sesión" - -#: src/ui/gui/netplay_join.slint:75 -msgctxt "NetplayJoin" -msgid "Game Name" -msgstr "Nombre del juego" - -#: src/ui/gui/netplay_join.slint:76 -msgctxt "NetplayJoin" -msgid "Password" -msgstr "Contraseña" - -#: src/ui/gui/netplay_join.slint:77 -msgctxt "NetplayJoin" -msgid "Cheats" -msgstr "Trucos" - -#: src/ui/gui/netplay_join.slint:91 -msgctxt "NetplayJoin" -msgid "Refresh Session List" -msgstr "Actualizar lista" - -#: src/ui/gui/netplay_join.slint:105 +#: src/ui/gui/netplay_join.slint:31 msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "Contraseña (si es necesaria)" -#: src/ui/gui/netplay_join.slint:112 +#: src/ui/gui/netplay_join.slint:41 +msgctxt "NetplayJoin" +msgid "Custom Server URL (optional):" +msgstr "URL de servidor personalizado (opcional):" + +#: src/ui/gui/netplay_join.slint:53 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "Seleccionar ROM" -#: src/ui/gui/netplay_join.slint:125 +#: src/ui/gui/netplay_join.slint:68 +msgctxt "NetplayJoin" +msgid "Refreshing session list, please wait..." +msgstr "Actualizando lista de sesiones, espera..." + +#: src/ui/gui/netplay_join.slint:73 +msgctxt "NetplayJoin" +msgid "Click on a session below to select it" +msgstr "Pulsa una sesión para seleccionarla" + +#: src/ui/gui/netplay_join.slint:78 +msgctxt "NetplayJoin" +msgid "No sessions available. Please refresh to check again." +msgstr "No hay sesiones disponibles. Actualiza para comprobar de nuevo." + +#: src/ui/gui/netplay_join.slint:84 +msgctxt "NetplayJoin" +msgid "Server" +msgstr "Servidor" + +#: src/ui/gui/netplay_join.slint:85 +msgctxt "NetplayJoin" +msgid "Session Name" +msgstr "Nombre de la sesión" + +#: src/ui/gui/netplay_join.slint:86 +msgctxt "NetplayJoin" +msgid "Game Name" +msgstr "Nombre del juego" + +#: src/ui/gui/netplay_join.slint:87 +msgctxt "NetplayJoin" +msgid "Password" +msgstr "Contraseña" + +#: src/ui/gui/netplay_join.slint:88 +msgctxt "NetplayJoin" +msgid "Cheats" +msgstr "Trucos" + +#: src/ui/gui/netplay_join.slint:102 +msgctxt "NetplayJoin" +msgid "Refresh Session List" +msgstr "Actualizar lista" + +#: src/ui/gui/netplay_join.slint:119 msgctxt "NetplayJoin" msgid "Join Session" msgstr "Unirse a la sesión" -#: src/ui/gui/netplay_page.slint:33 +#: src/ui/gui/netplay_join.slint:132 +msgctxt "NetplayJoin" +msgid "Cancel" +msgstr "Cancelar" + +#: src/ui/gui/netplay_page.slint:37 msgctxt "Netplay" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/netplay_page.slint:40 +#: src/ui/gui/netplay_page.slint:45 msgctxt "Netplay" msgid "Create Session" msgstr "Crear sesión" -#: src/ui/gui/netplay_page.slint:50 +#: src/ui/gui/netplay_page.slint:56 msgctxt "Netplay" msgid "Join Session" msgstr "Unirse a la sesión" -#: src/ui/gui/netplay_page.slint:64 +#: src/ui/gui/netplay_page.slint:70 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "Canal de Discord de Netplay" -#: src/ui/gui/netplay_page.slint:71 +#: src/ui/gui/netplay_page.slint:77 msgctxt "Netplay" msgid "Provide Feedback" msgstr "Enviar comentarios" -#: src/ui/gui/netplay_page.slint:82 -msgctxt "CustomNetplayServer" -msgid "Custom Netplay Server" -msgstr "Servidor de Netplay personalizado" - -#: src/ui/gui/netplay_wait.slint:14 +#: src/ui/gui/netplay_wait.slint:15 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay: Sala de espera" -#: src/ui/gui/netplay_wait.slint:31 +#: src/ui/gui/netplay_wait.slint:27 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Nombre de la sesión:" -#: src/ui/gui/netplay_wait.slint:37 +#: src/ui/gui/netplay_wait.slint:33 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Nombre del juego:" -#: src/ui/gui/netplay_wait.slint:43 +#: src/ui/gui/netplay_wait.slint:39 msgctxt "NetplayWait" msgid "Ping:" msgstr "Latencia (Ping):" -#: src/ui/gui/netplay_wait.slint:50 +#: src/ui/gui/netplay_wait.slint:48 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Jugador 1:" -#: src/ui/gui/netplay_wait.slint:54 +#: src/ui/gui/netplay_wait.slint:52 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Jugador 2:" -#: src/ui/gui/netplay_wait.slint:60 +#: src/ui/gui/netplay_wait.slint:58 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Jugador 3:" -#: src/ui/gui/netplay_wait.slint:64 +#: src/ui/gui/netplay_wait.slint:62 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Jugador 4:" @@ -415,11 +415,16 @@ msgctxt "NetplayWait" msgid "Send Message" msgstr "Enviar mensaje" -#: src/ui/gui/netplay_wait.slint:102 +#: src/ui/gui/netplay_wait.slint:105 msgctxt "NetplayWait" msgid "Start Game" msgstr "Iniciar juego" +#: src/ui/gui/netplay_wait.slint:113 +msgctxt "NetplayWait" +msgid "Cancel" +msgstr "Cancelar" + #: src/ui/gui/retroachievements_page.slint:19 msgctxt "RAData" msgid "Not currently logged in" @@ -545,6 +550,10 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "¿Qué te gustaría decir?" +#~ msgctxt "NetplayCreate" +#~ msgid "Creating server, please wait...This may take about 30 seconds." +#~ msgstr "Creando servidor, espera... Puede tardar unos 30 segundos." + #~ msgctxt "ControllerConfig" #~ msgid "Port" #~ msgstr "Puerto" diff --git a/data/translations/fr/LC_MESSAGES/gopher64.po b/data/translations/fr/LC_MESSAGES/gopher64.po index e0c1eaa..389b0b0 100644 --- a/data/translations/fr/LC_MESSAGES/gopher64.po +++ b/data/translations/fr/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-19 09:43+0000\n" +"POT-Creation-Date: 2026-05-25 08:28+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: French (France)\n" @@ -47,46 +47,41 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Faire un don (via GitHub)" -#: src/ui/gui/appwindow.slint:103 +#: src/ui/gui/appwindow.slint:151 msgctxt "Menu" msgid "Local Game" msgstr "Jeu local" -#: src/ui/gui/appwindow.slint:107 +#: src/ui/gui/appwindow.slint:155 msgctxt "Menu" msgid "Controller Config" msgstr "Configuration manette" -#: src/ui/gui/appwindow.slint:111 +#: src/ui/gui/appwindow.slint:159 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:115 +#: src/ui/gui/appwindow.slint:163 msgctxt "Menu" msgid "Cheats" msgstr "Triche" -#: src/ui/gui/appwindow.slint:119 +#: src/ui/gui/appwindow.slint:167 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:123 +#: src/ui/gui/appwindow.slint:171 msgctxt "Menu" msgid "Settings" msgstr "Paramètres" -#: src/ui/gui/appwindow.slint:127 +#: src/ui/gui/appwindow.slint:175 msgctxt "Menu" msgid "About" msgstr "À propos" -#: src/ui/gui/appwindow.slint:248 -msgctxt "ErrorDialog" -msgid "Error" -msgstr "Erreur" - #: src/ui/gui/cheat_page.slint:15 msgctxt "Cheats" msgid "Cheats" @@ -102,7 +97,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Effacer la triche pour toutes les ROMs" -#: src/ui/gui/cheat_page.slint:87 +#: src/ui/gui/cheat_page.slint:88 msgctxt "Cheats" msgid "No Cheats Available" msgstr "Aucune triche disponible" @@ -142,62 +137,67 @@ msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "Attribution de la manette" -#: src/ui/gui/input_profile.slint:10 +#: src/ui/gui/input_profile.slint:12 msgctxt "InputProfileDialog" msgid "Create/Modify Input Profile" msgstr "Créer / modifier le profil d'entrée" -#: src/ui/gui/input_profile.slint:18 +#: src/ui/gui/input_profile.slint:25 msgctxt "InputProfileDialog" msgid "Enter profile name to create or modify" msgstr "Saisir le nom du profil à créer ou à modifier" -#: src/ui/gui/input_profile.slint:29 +#: src/ui/gui/input_profile.slint:38 msgctxt "InputProfileDialog" msgid "Deadzone Percentage" msgstr "Pourcentage de zone morte" -#: src/ui/gui/input_profile.slint:51 +#: src/ui/gui/input_profile.slint:61 msgctxt "InputProfileDialog" msgid "Use DirectInput" msgstr "Utiliser DirectInput" -#: src/ui/gui/input_profile.slint:61 +#: src/ui/gui/input_profile.slint:74 msgctxt "InputProfileDialog" msgid "Start Profile Creation Wizard" msgstr "Lancer l'assistant de création de profil" -#: src/ui/gui/localgame_page.slint:18 +#: src/ui/gui/input_profile.slint:82 +msgctxt "InputProfileDialog" +msgid "Cancel" +msgstr "Annuler" + +#: src/ui/gui/localgame_page.slint:19 msgctxt "LocalGame" msgid "Local Game" msgstr "Jeu local" -#: src/ui/gui/localgame_page.slint:25 +#: src/ui/gui/localgame_page.slint:26 msgctxt "LocalGame" msgid "Open ROM" msgstr "Ouvrir une ROM" -#: src/ui/gui/localgame_page.slint:36 +#: src/ui/gui/localgame_page.slint:37 msgctxt "LocalGame" msgid "Open Saves Folder" msgstr "Ouvrir le dossier des sauvegardes" -#: src/ui/gui/localgame_page.slint:53 +#: src/ui/gui/localgame_page.slint:54 msgctxt "LocalGame" msgid "Recent ROMs" msgstr "ROMs récentes" -#: src/ui/gui/netplay_create.slint:5 +#: src/ui/gui/netplay_create.slint:7 msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "Netplay : créer une session" -#: src/ui/gui/netplay_create.slint:24 +#: src/ui/gui/netplay_create.slint:23 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "Nom de la session :" -#: src/ui/gui/netplay_create.slint:28 +#: src/ui/gui/netplay_create.slint:27 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "Saisir le nom de la session" @@ -212,27 +212,27 @@ msgctxt "NetplayCreate" msgid "Enter session password" msgstr "Saisir le mot de passe de la session" -#: src/ui/gui/netplay_create.slint:51 +#: src/ui/gui/netplay_create.slint:52 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "Nom du joueur :" -#: src/ui/gui/netplay_create.slint:55 +#: src/ui/gui/netplay_create.slint:56 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "Saisir le nom du joueur" -#: src/ui/gui/netplay_create.slint:64 +#: src/ui/gui/netplay_create.slint:66 msgctxt "NetplayCreate" msgid "Server:" msgstr "Serveur :" -#: src/ui/gui/netplay_create.slint:82 +#: src/ui/gui/netplay_create.slint:86 msgctxt "NetplayCreate" msgid "Select ROM" msgstr "Sélectionner une ROM" -#: src/ui/gui/netplay_create.slint:97 +#: src/ui/gui/netplay_create.slint:102 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." @@ -240,170 +240,168 @@ msgstr "" "La triche est activée pour ce jeu. Elle sera synchronisée avec les autres " "joueurs." -#: src/ui/gui/netplay_create.slint:103 +#: src/ui/gui/netplay_create.slint:112 msgctxt "NetplayCreate" msgid "Create Session" msgstr "Créer la session" -#: src/ui/gui/netplay_create.slint:126 -msgctxt "DispatcherDialog" -msgid "Creating Server" -msgstr "Création du serveur" +#: src/ui/gui/netplay_create.slint:132 +msgctxt "NetplayCreate" +msgid "Cancel" +msgstr "Annuler" -#: src/ui/gui/netplay_create.slint:128 -msgctxt "DispatcherDialog" -msgid "Creating server, please wait...This may take about 30 seconds." -msgstr "" -"Création du serveur, veuillez patienter… Cela peut prendre environ 30 " -"secondes." +#: src/ui/gui/netplay_create.slint:155 +msgctxt "CustomServerDialog" +msgid "Enter a custom server URL" +msgstr "Saisir l'URL personnalisée du serveur" -#: src/ui/gui/netplay_join.slint:5 +#: src/ui/gui/netplay_join.slint:7 msgctxt "NetplayJoin" msgid "Netplay: Join Session" msgstr "Netplay : rejoindre une session" -#: src/ui/gui/netplay_join.slint:30 +#: src/ui/gui/netplay_join.slint:18 msgctxt "NetplayJoin" msgid "Player Name (required):" msgstr "Nom du joueur (obligatoire) :" -#: src/ui/gui/netplay_join.slint:34 +#: src/ui/gui/netplay_join.slint:22 msgctxt "NetplayJoin" msgid "Enter player name" msgstr "Saisir le nom du joueur" -#: src/ui/gui/netplay_join.slint:43 +#: src/ui/gui/netplay_join.slint:31 +msgctxt "NetplayJoin" +msgid "Password (if required)" +msgstr "Mot de passe (si requis)" + +#: src/ui/gui/netplay_join.slint:41 msgctxt "NetplayJoin" msgid "Custom Server URL (optional):" msgstr "URL personnalisée du serveur (facultatif) :" -#: src/ui/gui/netplay_join.slint:57 +#: src/ui/gui/netplay_join.slint:53 +msgctxt "NetplayJoin" +msgid "Select ROM" +msgstr "Sélectionner une ROM" + +#: src/ui/gui/netplay_join.slint:68 msgctxt "NetplayJoin" msgid "Refreshing session list, please wait..." msgstr "Actualisation de la liste des sessions, veuillez patienter…" -#: src/ui/gui/netplay_join.slint:62 +#: src/ui/gui/netplay_join.slint:73 msgctxt "NetplayJoin" msgid "Click on a session below to select it" msgstr "Cliquez sur une session ci-dessous pour la sélectionner" -#: src/ui/gui/netplay_join.slint:67 +#: src/ui/gui/netplay_join.slint:78 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." msgstr "" "Aucune session disponible. Veuillez actualiser pour vérifier à nouveau." -#: src/ui/gui/netplay_join.slint:73 +#: src/ui/gui/netplay_join.slint:84 msgctxt "NetplayJoin" msgid "Server" msgstr "Serveur" -#: src/ui/gui/netplay_join.slint:74 +#: src/ui/gui/netplay_join.slint:85 msgctxt "NetplayJoin" msgid "Session Name" msgstr "Nom de la session" -#: src/ui/gui/netplay_join.slint:75 +#: src/ui/gui/netplay_join.slint:86 msgctxt "NetplayJoin" msgid "Game Name" msgstr "Nom du jeu" -#: src/ui/gui/netplay_join.slint:76 +#: src/ui/gui/netplay_join.slint:87 msgctxt "NetplayJoin" msgid "Password" msgstr "Mot de passe" -#: src/ui/gui/netplay_join.slint:77 +#: src/ui/gui/netplay_join.slint:88 msgctxt "NetplayJoin" msgid "Cheats" msgstr "Triche" -#: src/ui/gui/netplay_join.slint:91 +#: src/ui/gui/netplay_join.slint:102 msgctxt "NetplayJoin" msgid "Refresh Session List" msgstr "Actualiser la liste" -#: src/ui/gui/netplay_join.slint:105 -msgctxt "NetplayJoin" -msgid "Password (if required)" -msgstr "Mot de passe (si requis)" - -#: src/ui/gui/netplay_join.slint:112 -msgctxt "NetplayJoin" -msgid "Select ROM" -msgstr "Sélectionner une ROM" - -#: src/ui/gui/netplay_join.slint:125 +#: src/ui/gui/netplay_join.slint:119 msgctxt "NetplayJoin" msgid "Join Session" msgstr "Rejoindre la session" -#: src/ui/gui/netplay_page.slint:33 +#: src/ui/gui/netplay_join.slint:132 +msgctxt "NetplayJoin" +msgid "Cancel" +msgstr "Annuler" + +#: src/ui/gui/netplay_page.slint:37 msgctxt "Netplay" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/netplay_page.slint:40 +#: src/ui/gui/netplay_page.slint:45 msgctxt "Netplay" msgid "Create Session" msgstr "Créer une session" -#: src/ui/gui/netplay_page.slint:50 +#: src/ui/gui/netplay_page.slint:56 msgctxt "Netplay" msgid "Join Session" msgstr "Rejoindre une session" -#: src/ui/gui/netplay_page.slint:64 +#: src/ui/gui/netplay_page.slint:70 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "Salon Discord Netplay" -#: src/ui/gui/netplay_page.slint:71 +#: src/ui/gui/netplay_page.slint:77 msgctxt "Netplay" msgid "Provide Feedback" msgstr "Donner votre avis" -#: src/ui/gui/netplay_page.slint:82 -msgctxt "CustomNetplayServer" -msgid "Custom Netplay Server" -msgstr "Serveur Netplay personnalisé" - -#: src/ui/gui/netplay_wait.slint:14 +#: src/ui/gui/netplay_wait.slint:15 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay : salle d'attente" -#: src/ui/gui/netplay_wait.slint:31 +#: src/ui/gui/netplay_wait.slint:27 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Nom de la session :" -#: src/ui/gui/netplay_wait.slint:37 +#: src/ui/gui/netplay_wait.slint:33 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Nom du jeu :" -#: src/ui/gui/netplay_wait.slint:43 +#: src/ui/gui/netplay_wait.slint:39 msgctxt "NetplayWait" msgid "Ping:" msgstr "Ping :" -#: src/ui/gui/netplay_wait.slint:50 +#: src/ui/gui/netplay_wait.slint:48 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Joueur 1 :" -#: src/ui/gui/netplay_wait.slint:54 +#: src/ui/gui/netplay_wait.slint:52 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Joueur 2 :" -#: src/ui/gui/netplay_wait.slint:60 +#: src/ui/gui/netplay_wait.slint:58 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Joueur 3 :" -#: src/ui/gui/netplay_wait.slint:64 +#: src/ui/gui/netplay_wait.slint:62 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Joueur 4 :" @@ -418,11 +416,16 @@ msgctxt "NetplayWait" msgid "Send Message" msgstr "Envoyer" -#: src/ui/gui/netplay_wait.slint:102 +#: src/ui/gui/netplay_wait.slint:105 msgctxt "NetplayWait" msgid "Start Game" msgstr "Lancer la partie" +#: src/ui/gui/netplay_wait.slint:113 +msgctxt "NetplayWait" +msgid "Cancel" +msgstr "Annuler" + #: src/ui/gui/retroachievements_page.slint:19 msgctxt "RAData" msgid "Not currently logged in" @@ -548,6 +551,12 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "Que souhaitez-vous dire ?" +#~ msgctxt "NetplayCreate" +#~ msgid "Creating server, please wait...This may take about 30 seconds." +#~ msgstr "" +#~ "Création du serveur, veuillez patienter… Cela peut prendre environ 30 " +#~ "secondes." + #~ msgctxt "ControllerConfig" #~ msgid "Port" #~ msgstr "Port" diff --git a/data/translations/gopher64.pot b/data/translations/gopher64.pot index 6a761c1..2e7d0a9 100644 --- a/data/translations/gopher64.pot +++ b/data/translations/gopher64.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-05-19 09:43+0000\n" +"POT-Creation-Date: 2026-05-25 08:28+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -47,46 +47,41 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "" -#: src/ui/gui/appwindow.slint:103 +#: src/ui/gui/appwindow.slint:151 msgctxt "Menu" msgid "Local Game" msgstr "" -#: src/ui/gui/appwindow.slint:107 +#: src/ui/gui/appwindow.slint:155 msgctxt "Menu" msgid "Controller Config" msgstr "" -#: src/ui/gui/appwindow.slint:111 +#: src/ui/gui/appwindow.slint:159 msgctxt "Menu" msgid "Netplay" msgstr "" -#: src/ui/gui/appwindow.slint:115 +#: src/ui/gui/appwindow.slint:163 msgctxt "Menu" msgid "Cheats" msgstr "" -#: src/ui/gui/appwindow.slint:119 +#: src/ui/gui/appwindow.slint:167 msgctxt "Menu" msgid "RetroAchievements" msgstr "" -#: src/ui/gui/appwindow.slint:123 +#: src/ui/gui/appwindow.slint:171 msgctxt "Menu" msgid "Settings" msgstr "" -#: src/ui/gui/appwindow.slint:127 +#: src/ui/gui/appwindow.slint:175 msgctxt "Menu" msgid "About" msgstr "" -#: src/ui/gui/appwindow.slint:248 -msgctxt "ErrorDialog" -msgid "Error" -msgstr "" - #: src/ui/gui/cheat_page.slint:15 msgctxt "Cheats" msgid "Cheats" @@ -102,7 +97,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "" -#: src/ui/gui/cheat_page.slint:87 +#: src/ui/gui/cheat_page.slint:88 msgctxt "Cheats" msgid "No Cheats Available" msgstr "" @@ -142,62 +137,67 @@ msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "" -#: src/ui/gui/input_profile.slint:10 +#: src/ui/gui/input_profile.slint:12 msgctxt "InputProfileDialog" msgid "Create/Modify Input Profile" msgstr "" -#: src/ui/gui/input_profile.slint:18 +#: src/ui/gui/input_profile.slint:25 msgctxt "InputProfileDialog" msgid "Enter profile name to create or modify" msgstr "" -#: src/ui/gui/input_profile.slint:29 +#: src/ui/gui/input_profile.slint:38 msgctxt "InputProfileDialog" msgid "Deadzone Percentage" msgstr "" -#: src/ui/gui/input_profile.slint:51 +#: src/ui/gui/input_profile.slint:61 msgctxt "InputProfileDialog" msgid "Use DirectInput" msgstr "" -#: src/ui/gui/input_profile.slint:61 +#: src/ui/gui/input_profile.slint:74 msgctxt "InputProfileDialog" msgid "Start Profile Creation Wizard" msgstr "" -#: src/ui/gui/localgame_page.slint:18 +#: src/ui/gui/input_profile.slint:82 +msgctxt "InputProfileDialog" +msgid "Cancel" +msgstr "" + +#: src/ui/gui/localgame_page.slint:19 msgctxt "LocalGame" msgid "Local Game" msgstr "" -#: src/ui/gui/localgame_page.slint:25 +#: src/ui/gui/localgame_page.slint:26 msgctxt "LocalGame" msgid "Open ROM" msgstr "" -#: src/ui/gui/localgame_page.slint:36 +#: src/ui/gui/localgame_page.slint:37 msgctxt "LocalGame" msgid "Open Saves Folder" msgstr "" -#: src/ui/gui/localgame_page.slint:53 +#: src/ui/gui/localgame_page.slint:54 msgctxt "LocalGame" msgid "Recent ROMs" msgstr "" -#: src/ui/gui/netplay_create.slint:5 +#: src/ui/gui/netplay_create.slint:7 msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "" -#: src/ui/gui/netplay_create.slint:24 +#: src/ui/gui/netplay_create.slint:23 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "" -#: src/ui/gui/netplay_create.slint:28 +#: src/ui/gui/netplay_create.slint:27 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "" @@ -212,193 +212,193 @@ msgctxt "NetplayCreate" msgid "Enter session password" msgstr "" -#: src/ui/gui/netplay_create.slint:51 +#: src/ui/gui/netplay_create.slint:52 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "" -#: src/ui/gui/netplay_create.slint:55 +#: src/ui/gui/netplay_create.slint:56 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "" -#: src/ui/gui/netplay_create.slint:64 +#: src/ui/gui/netplay_create.slint:66 msgctxt "NetplayCreate" msgid "Server:" msgstr "" -#: src/ui/gui/netplay_create.slint:82 +#: src/ui/gui/netplay_create.slint:86 msgctxt "NetplayCreate" msgid "Select ROM" msgstr "" -#: src/ui/gui/netplay_create.slint:97 +#: src/ui/gui/netplay_create.slint:102 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." msgstr "" -#: src/ui/gui/netplay_create.slint:103 +#: src/ui/gui/netplay_create.slint:112 msgctxt "NetplayCreate" msgid "Create Session" msgstr "" -#: src/ui/gui/netplay_create.slint:126 -msgctxt "DispatcherDialog" -msgid "Creating Server" +#: src/ui/gui/netplay_create.slint:132 +msgctxt "NetplayCreate" +msgid "Cancel" msgstr "" -#: src/ui/gui/netplay_create.slint:128 -msgctxt "DispatcherDialog" -msgid "Creating server, please wait...This may take about 30 seconds." +#: src/ui/gui/netplay_create.slint:155 +msgctxt "CustomServerDialog" +msgid "Enter a custom server URL" msgstr "" -#: src/ui/gui/netplay_join.slint:5 +#: src/ui/gui/netplay_join.slint:7 msgctxt "NetplayJoin" msgid "Netplay: Join Session" msgstr "" -#: src/ui/gui/netplay_join.slint:30 +#: src/ui/gui/netplay_join.slint:18 msgctxt "NetplayJoin" msgid "Player Name (required):" msgstr "" -#: src/ui/gui/netplay_join.slint:34 +#: src/ui/gui/netplay_join.slint:22 msgctxt "NetplayJoin" msgid "Enter player name" msgstr "" -#: src/ui/gui/netplay_join.slint:43 -msgctxt "NetplayJoin" -msgid "Custom Server URL (optional):" -msgstr "" - -#: src/ui/gui/netplay_join.slint:57 -msgctxt "NetplayJoin" -msgid "Refreshing session list, please wait..." -msgstr "" - -#: src/ui/gui/netplay_join.slint:62 -msgctxt "NetplayJoin" -msgid "Click on a session below to select it" -msgstr "" - -#: src/ui/gui/netplay_join.slint:67 -msgctxt "NetplayJoin" -msgid "No sessions available. Please refresh to check again." -msgstr "" - -#: src/ui/gui/netplay_join.slint:73 -msgctxt "NetplayJoin" -msgid "Server" -msgstr "" - -#: src/ui/gui/netplay_join.slint:74 -msgctxt "NetplayJoin" -msgid "Session Name" -msgstr "" - -#: src/ui/gui/netplay_join.slint:75 -msgctxt "NetplayJoin" -msgid "Game Name" -msgstr "" - -#: src/ui/gui/netplay_join.slint:76 -msgctxt "NetplayJoin" -msgid "Password" -msgstr "" - -#: src/ui/gui/netplay_join.slint:77 -msgctxt "NetplayJoin" -msgid "Cheats" -msgstr "" - -#: src/ui/gui/netplay_join.slint:91 -msgctxt "NetplayJoin" -msgid "Refresh Session List" -msgstr "" - -#: src/ui/gui/netplay_join.slint:105 +#: src/ui/gui/netplay_join.slint:31 msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "" -#: src/ui/gui/netplay_join.slint:112 +#: src/ui/gui/netplay_join.slint:41 +msgctxt "NetplayJoin" +msgid "Custom Server URL (optional):" +msgstr "" + +#: src/ui/gui/netplay_join.slint:53 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "" -#: src/ui/gui/netplay_join.slint:125 +#: src/ui/gui/netplay_join.slint:68 +msgctxt "NetplayJoin" +msgid "Refreshing session list, please wait..." +msgstr "" + +#: src/ui/gui/netplay_join.slint:73 +msgctxt "NetplayJoin" +msgid "Click on a session below to select it" +msgstr "" + +#: src/ui/gui/netplay_join.slint:78 +msgctxt "NetplayJoin" +msgid "No sessions available. Please refresh to check again." +msgstr "" + +#: src/ui/gui/netplay_join.slint:84 +msgctxt "NetplayJoin" +msgid "Server" +msgstr "" + +#: src/ui/gui/netplay_join.slint:85 +msgctxt "NetplayJoin" +msgid "Session Name" +msgstr "" + +#: src/ui/gui/netplay_join.slint:86 +msgctxt "NetplayJoin" +msgid "Game Name" +msgstr "" + +#: src/ui/gui/netplay_join.slint:87 +msgctxt "NetplayJoin" +msgid "Password" +msgstr "" + +#: src/ui/gui/netplay_join.slint:88 +msgctxt "NetplayJoin" +msgid "Cheats" +msgstr "" + +#: src/ui/gui/netplay_join.slint:102 +msgctxt "NetplayJoin" +msgid "Refresh Session List" +msgstr "" + +#: src/ui/gui/netplay_join.slint:119 msgctxt "NetplayJoin" msgid "Join Session" msgstr "" -#: src/ui/gui/netplay_page.slint:33 +#: src/ui/gui/netplay_join.slint:132 +msgctxt "NetplayJoin" +msgid "Cancel" +msgstr "" + +#: src/ui/gui/netplay_page.slint:37 msgctxt "Netplay" msgid "Netplay" msgstr "" -#: src/ui/gui/netplay_page.slint:40 +#: src/ui/gui/netplay_page.slint:45 msgctxt "Netplay" msgid "Create Session" msgstr "" -#: src/ui/gui/netplay_page.slint:50 +#: src/ui/gui/netplay_page.slint:56 msgctxt "Netplay" msgid "Join Session" msgstr "" -#: src/ui/gui/netplay_page.slint:64 +#: src/ui/gui/netplay_page.slint:70 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "" -#: src/ui/gui/netplay_page.slint:71 +#: src/ui/gui/netplay_page.slint:77 msgctxt "Netplay" msgid "Provide Feedback" msgstr "" -#: src/ui/gui/netplay_page.slint:82 -msgctxt "CustomNetplayServer" -msgid "Custom Netplay Server" -msgstr "" - -#: src/ui/gui/netplay_wait.slint:14 +#: src/ui/gui/netplay_wait.slint:15 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "" -#: src/ui/gui/netplay_wait.slint:31 +#: src/ui/gui/netplay_wait.slint:27 msgctxt "NetplayWait" msgid "Session Name:" msgstr "" -#: src/ui/gui/netplay_wait.slint:37 +#: src/ui/gui/netplay_wait.slint:33 msgctxt "NetplayWait" msgid "Game Name:" msgstr "" -#: src/ui/gui/netplay_wait.slint:43 +#: src/ui/gui/netplay_wait.slint:39 msgctxt "NetplayWait" msgid "Ping:" msgstr "" -#: src/ui/gui/netplay_wait.slint:50 +#: src/ui/gui/netplay_wait.slint:48 msgctxt "NetplayWait" msgid "Player 1:" msgstr "" -#: src/ui/gui/netplay_wait.slint:54 +#: src/ui/gui/netplay_wait.slint:52 msgctxt "NetplayWait" msgid "Player 2:" msgstr "" -#: src/ui/gui/netplay_wait.slint:60 +#: src/ui/gui/netplay_wait.slint:58 msgctxt "NetplayWait" msgid "Player 3:" msgstr "" -#: src/ui/gui/netplay_wait.slint:64 +#: src/ui/gui/netplay_wait.slint:62 msgctxt "NetplayWait" msgid "Player 4:" msgstr "" @@ -413,11 +413,16 @@ msgctxt "NetplayWait" msgid "Send Message" msgstr "" -#: src/ui/gui/netplay_wait.slint:102 +#: src/ui/gui/netplay_wait.slint:105 msgctxt "NetplayWait" msgid "Start Game" msgstr "" +#: src/ui/gui/netplay_wait.slint:113 +msgctxt "NetplayWait" +msgid "Cancel" +msgstr "" + #: src/ui/gui/retroachievements_page.slint:19 msgctxt "RAData" msgid "Not currently logged in" diff --git a/data/translations/ja/LC_MESSAGES/gopher64.po b/data/translations/ja/LC_MESSAGES/gopher64.po index 5c63583..2fdec4b 100644 --- a/data/translations/ja/LC_MESSAGES/gopher64.po +++ b/data/translations/ja/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-19 09:43+0000\n" +"POT-Creation-Date: 2026-05-25 08:28+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Japanese\n" @@ -47,46 +47,41 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "GitHubで寄付" -#: src/ui/gui/appwindow.slint:103 +#: src/ui/gui/appwindow.slint:151 msgctxt "Menu" msgid "Local Game" msgstr "ローカルゲーム" -#: src/ui/gui/appwindow.slint:107 +#: src/ui/gui/appwindow.slint:155 msgctxt "Menu" msgid "Controller Config" msgstr "コントローラー設定" -#: src/ui/gui/appwindow.slint:111 +#: src/ui/gui/appwindow.slint:159 msgctxt "Menu" msgid "Netplay" msgstr "ネットプレイ" -#: src/ui/gui/appwindow.slint:115 +#: src/ui/gui/appwindow.slint:163 msgctxt "Menu" msgid "Cheats" msgstr "チート" -#: src/ui/gui/appwindow.slint:119 +#: src/ui/gui/appwindow.slint:167 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:123 +#: src/ui/gui/appwindow.slint:171 msgctxt "Menu" msgid "Settings" msgstr "設定" -#: src/ui/gui/appwindow.slint:127 +#: src/ui/gui/appwindow.slint:175 msgctxt "Menu" msgid "About" msgstr "バージョン情報" -#: src/ui/gui/appwindow.slint:248 -msgctxt "ErrorDialog" -msgid "Error" -msgstr "エラー" - #: src/ui/gui/cheat_page.slint:15 msgctxt "Cheats" msgid "Cheats" @@ -102,7 +97,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "すべてのROMのチートをクリア" -#: src/ui/gui/cheat_page.slint:87 +#: src/ui/gui/cheat_page.slint:88 msgctxt "Cheats" msgid "No Cheats Available" msgstr "利用できるチートはありません" @@ -142,62 +137,67 @@ msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "コントローラー割り当て" -#: src/ui/gui/input_profile.slint:10 +#: src/ui/gui/input_profile.slint:12 msgctxt "InputProfileDialog" msgid "Create/Modify Input Profile" msgstr "入力プロファイルの作成/変更" -#: src/ui/gui/input_profile.slint:18 +#: src/ui/gui/input_profile.slint:25 msgctxt "InputProfileDialog" msgid "Enter profile name to create or modify" msgstr "作成または変更するプロファイル名を入力" -#: src/ui/gui/input_profile.slint:29 +#: src/ui/gui/input_profile.slint:38 msgctxt "InputProfileDialog" msgid "Deadzone Percentage" msgstr "デッドゾーン(%)" -#: src/ui/gui/input_profile.slint:51 +#: src/ui/gui/input_profile.slint:61 msgctxt "InputProfileDialog" msgid "Use DirectInput" msgstr "DirectInputを使用" -#: src/ui/gui/input_profile.slint:61 +#: src/ui/gui/input_profile.slint:74 msgctxt "InputProfileDialog" msgid "Start Profile Creation Wizard" msgstr "プロファイル作成ウィザードを開始" -#: src/ui/gui/localgame_page.slint:18 +#: src/ui/gui/input_profile.slint:82 +msgctxt "InputProfileDialog" +msgid "Cancel" +msgstr "キャンセル" + +#: src/ui/gui/localgame_page.slint:19 msgctxt "LocalGame" msgid "Local Game" msgstr "ローカルゲーム" -#: src/ui/gui/localgame_page.slint:25 +#: src/ui/gui/localgame_page.slint:26 msgctxt "LocalGame" msgid "Open ROM" msgstr "ROMを開く" -#: src/ui/gui/localgame_page.slint:36 +#: src/ui/gui/localgame_page.slint:37 msgctxt "LocalGame" msgid "Open Saves Folder" msgstr "セーブフォルダーを開く" -#: src/ui/gui/localgame_page.slint:53 +#: src/ui/gui/localgame_page.slint:54 msgctxt "LocalGame" msgid "Recent ROMs" msgstr "最近使ったROM" -#: src/ui/gui/netplay_create.slint:5 +#: src/ui/gui/netplay_create.slint:7 msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "ネットプレイ:セッション作成" -#: src/ui/gui/netplay_create.slint:24 +#: src/ui/gui/netplay_create.slint:23 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "セッション名:" -#: src/ui/gui/netplay_create.slint:28 +#: src/ui/gui/netplay_create.slint:27 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "セッション名を入力" @@ -212,195 +212,193 @@ msgctxt "NetplayCreate" msgid "Enter session password" msgstr "セッションのパスワードを入力" -#: src/ui/gui/netplay_create.slint:51 +#: src/ui/gui/netplay_create.slint:52 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "プレイヤー名:" -#: src/ui/gui/netplay_create.slint:55 +#: src/ui/gui/netplay_create.slint:56 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "プレイヤー名を入力" -#: src/ui/gui/netplay_create.slint:64 +#: src/ui/gui/netplay_create.slint:66 msgctxt "NetplayCreate" msgid "Server:" msgstr "サーバー:" -#: src/ui/gui/netplay_create.slint:82 +#: src/ui/gui/netplay_create.slint:86 msgctxt "NetplayCreate" msgid "Select ROM" msgstr "ROMを選択" -#: src/ui/gui/netplay_create.slint:97 +#: src/ui/gui/netplay_create.slint:102 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." msgstr "このゲームではチートが有効です。チートは他のプレイヤーと同期されます。" -#: src/ui/gui/netplay_create.slint:103 +#: src/ui/gui/netplay_create.slint:112 msgctxt "NetplayCreate" msgid "Create Session" msgstr "セッションを作成" -#: src/ui/gui/netplay_create.slint:126 -msgctxt "DispatcherDialog" -msgid "Creating Server" -msgstr "サーバーを作成中" +#: src/ui/gui/netplay_create.slint:132 +msgctxt "NetplayCreate" +msgid "Cancel" +msgstr "キャンセル" -#: src/ui/gui/netplay_create.slint:128 -msgctxt "DispatcherDialog" -msgid "Creating server, please wait...This may take about 30 seconds." -msgstr "" -"サーバーを作成しています。しばらくお待ちください… 最大約30秒かかることがあり" -"ます。" +#: src/ui/gui/netplay_create.slint:155 +msgctxt "CustomServerDialog" +msgid "Enter a custom server URL" +msgstr "カスタムサーバーURLを入力" -#: src/ui/gui/netplay_join.slint:5 +#: src/ui/gui/netplay_join.slint:7 msgctxt "NetplayJoin" msgid "Netplay: Join Session" msgstr "ネットプレイ:セッションに参加" -#: src/ui/gui/netplay_join.slint:30 +#: src/ui/gui/netplay_join.slint:18 msgctxt "NetplayJoin" msgid "Player Name (required):" msgstr "プレイヤー名(必須):" -#: src/ui/gui/netplay_join.slint:34 +#: src/ui/gui/netplay_join.slint:22 msgctxt "NetplayJoin" msgid "Enter player name" msgstr "プレイヤー名を入力" -#: src/ui/gui/netplay_join.slint:43 -msgctxt "NetplayJoin" -msgid "Custom Server URL (optional):" -msgstr "カスタムサーバーURL(任意):" - -#: src/ui/gui/netplay_join.slint:57 -msgctxt "NetplayJoin" -msgid "Refreshing session list, please wait..." -msgstr "セッション一覧を更新しています。しばらくお待ちください…" - -#: src/ui/gui/netplay_join.slint:62 -msgctxt "NetplayJoin" -msgid "Click on a session below to select it" -msgstr "下の一覧からセッションをクリックして選択" - -#: src/ui/gui/netplay_join.slint:67 -msgctxt "NetplayJoin" -msgid "No sessions available. Please refresh to check again." -msgstr "利用できるセッションがありません。更新して再度確認してください。" - -#: src/ui/gui/netplay_join.slint:73 -msgctxt "NetplayJoin" -msgid "Server" -msgstr "サーバー" - -#: src/ui/gui/netplay_join.slint:74 -msgctxt "NetplayJoin" -msgid "Session Name" -msgstr "セッション名" - -#: src/ui/gui/netplay_join.slint:75 -msgctxt "NetplayJoin" -msgid "Game Name" -msgstr "ゲーム名" - -#: src/ui/gui/netplay_join.slint:76 -msgctxt "NetplayJoin" -msgid "Password" -msgstr "パスワード" - -#: src/ui/gui/netplay_join.slint:77 -msgctxt "NetplayJoin" -msgid "Cheats" -msgstr "チート" - -#: src/ui/gui/netplay_join.slint:91 -msgctxt "NetplayJoin" -msgid "Refresh Session List" -msgstr "セッション一覧を更新" - -#: src/ui/gui/netplay_join.slint:105 +#: src/ui/gui/netplay_join.slint:31 msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "パスワード(必要な場合)" -#: src/ui/gui/netplay_join.slint:112 +#: src/ui/gui/netplay_join.slint:41 +msgctxt "NetplayJoin" +msgid "Custom Server URL (optional):" +msgstr "カスタムサーバーURL(任意):" + +#: src/ui/gui/netplay_join.slint:53 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "ROMを選択" -#: src/ui/gui/netplay_join.slint:125 +#: src/ui/gui/netplay_join.slint:68 +msgctxt "NetplayJoin" +msgid "Refreshing session list, please wait..." +msgstr "セッション一覧を更新しています。しばらくお待ちください…" + +#: src/ui/gui/netplay_join.slint:73 +msgctxt "NetplayJoin" +msgid "Click on a session below to select it" +msgstr "下の一覧からセッションをクリックして選択" + +#: src/ui/gui/netplay_join.slint:78 +msgctxt "NetplayJoin" +msgid "No sessions available. Please refresh to check again." +msgstr "利用できるセッションがありません。更新して再度確認してください。" + +#: src/ui/gui/netplay_join.slint:84 +msgctxt "NetplayJoin" +msgid "Server" +msgstr "サーバー" + +#: src/ui/gui/netplay_join.slint:85 +msgctxt "NetplayJoin" +msgid "Session Name" +msgstr "セッション名" + +#: src/ui/gui/netplay_join.slint:86 +msgctxt "NetplayJoin" +msgid "Game Name" +msgstr "ゲーム名" + +#: src/ui/gui/netplay_join.slint:87 +msgctxt "NetplayJoin" +msgid "Password" +msgstr "パスワード" + +#: src/ui/gui/netplay_join.slint:88 +msgctxt "NetplayJoin" +msgid "Cheats" +msgstr "チート" + +#: src/ui/gui/netplay_join.slint:102 +msgctxt "NetplayJoin" +msgid "Refresh Session List" +msgstr "セッション一覧を更新" + +#: src/ui/gui/netplay_join.slint:119 msgctxt "NetplayJoin" msgid "Join Session" msgstr "セッションに参加" -#: src/ui/gui/netplay_page.slint:33 +#: src/ui/gui/netplay_join.slint:132 +msgctxt "NetplayJoin" +msgid "Cancel" +msgstr "キャンセル" + +#: src/ui/gui/netplay_page.slint:37 msgctxt "Netplay" msgid "Netplay" msgstr "ネットプレイ" -#: src/ui/gui/netplay_page.slint:40 +#: src/ui/gui/netplay_page.slint:45 msgctxt "Netplay" msgid "Create Session" msgstr "セッションを作成" -#: src/ui/gui/netplay_page.slint:50 +#: src/ui/gui/netplay_page.slint:56 msgctxt "Netplay" msgid "Join Session" msgstr "セッションに参加" -#: src/ui/gui/netplay_page.slint:64 +#: src/ui/gui/netplay_page.slint:70 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "ネットプレイ用Discordチャンネル" -#: src/ui/gui/netplay_page.slint:71 +#: src/ui/gui/netplay_page.slint:77 msgctxt "Netplay" msgid "Provide Feedback" msgstr "フィードバックを送る" -#: src/ui/gui/netplay_page.slint:82 -msgctxt "CustomNetplayServer" -msgid "Custom Netplay Server" -msgstr "カスタムネットプレイサーバー" - -#: src/ui/gui/netplay_wait.slint:14 +#: src/ui/gui/netplay_wait.slint:15 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "ネットプレイ:待機室" -#: src/ui/gui/netplay_wait.slint:31 +#: src/ui/gui/netplay_wait.slint:27 msgctxt "NetplayWait" msgid "Session Name:" msgstr "セッション名:" -#: src/ui/gui/netplay_wait.slint:37 +#: src/ui/gui/netplay_wait.slint:33 msgctxt "NetplayWait" msgid "Game Name:" msgstr "ゲーム名:" -#: src/ui/gui/netplay_wait.slint:43 +#: src/ui/gui/netplay_wait.slint:39 msgctxt "NetplayWait" msgid "Ping:" msgstr "Ping:" -#: src/ui/gui/netplay_wait.slint:50 +#: src/ui/gui/netplay_wait.slint:48 msgctxt "NetplayWait" msgid "Player 1:" msgstr "プレイヤー1:" -#: src/ui/gui/netplay_wait.slint:54 +#: src/ui/gui/netplay_wait.slint:52 msgctxt "NetplayWait" msgid "Player 2:" msgstr "プレイヤー2:" -#: src/ui/gui/netplay_wait.slint:60 +#: src/ui/gui/netplay_wait.slint:58 msgctxt "NetplayWait" msgid "Player 3:" msgstr "プレイヤー3:" -#: src/ui/gui/netplay_wait.slint:64 +#: src/ui/gui/netplay_wait.slint:62 msgctxt "NetplayWait" msgid "Player 4:" msgstr "プレイヤー4:" @@ -415,11 +413,16 @@ msgctxt "NetplayWait" msgid "Send Message" msgstr "送信" -#: src/ui/gui/netplay_wait.slint:102 +#: src/ui/gui/netplay_wait.slint:105 msgctxt "NetplayWait" msgid "Start Game" msgstr "ゲーム開始" +#: src/ui/gui/netplay_wait.slint:113 +msgctxt "NetplayWait" +msgid "Cancel" +msgstr "キャンセル" + #: src/ui/gui/retroachievements_page.slint:19 msgctxt "RAData" msgid "Not currently logged in" @@ -545,6 +548,12 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "何と言いますか?" +#~ msgctxt "NetplayCreate" +#~ msgid "Creating server, please wait...This may take about 30 seconds." +#~ msgstr "" +#~ "サーバーを作成しています。しばらくお待ちください… 最大約30秒かかることがあ" +#~ "ります。" + #~ msgctxt "ControllerConfig" #~ msgid "Port" #~ msgstr "ポート" diff --git a/data/translations/nl/LC_MESSAGES/gopher64.po b/data/translations/nl/LC_MESSAGES/gopher64.po index c76e5ae..9d8f019 100644 --- a/data/translations/nl/LC_MESSAGES/gopher64.po +++ b/data/translations/nl/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-19 09:43+0000\n" +"POT-Creation-Date: 2026-05-25 08:28+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Dutch (Netherlands)\n" @@ -47,46 +47,41 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Doneren (via GitHub)" -#: src/ui/gui/appwindow.slint:103 +#: src/ui/gui/appwindow.slint:151 msgctxt "Menu" msgid "Local Game" msgstr "Lokaal spel" -#: src/ui/gui/appwindow.slint:107 +#: src/ui/gui/appwindow.slint:155 msgctxt "Menu" msgid "Controller Config" msgstr "Controllerconfiguratie" -#: src/ui/gui/appwindow.slint:111 +#: src/ui/gui/appwindow.slint:159 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:115 +#: src/ui/gui/appwindow.slint:163 msgctxt "Menu" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/appwindow.slint:119 +#: src/ui/gui/appwindow.slint:167 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:123 +#: src/ui/gui/appwindow.slint:171 msgctxt "Menu" msgid "Settings" msgstr "Instellingen" -#: src/ui/gui/appwindow.slint:127 +#: src/ui/gui/appwindow.slint:175 msgctxt "Menu" msgid "About" msgstr "Over" -#: src/ui/gui/appwindow.slint:248 -msgctxt "ErrorDialog" -msgid "Error" -msgstr "Fout" - #: src/ui/gui/cheat_page.slint:15 msgctxt "Cheats" msgid "Cheats" @@ -102,7 +97,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Cheats wissen voor alle ROM's" -#: src/ui/gui/cheat_page.slint:87 +#: src/ui/gui/cheat_page.slint:88 msgctxt "Cheats" msgid "No Cheats Available" msgstr "Geen cheats beschikbaar" @@ -142,62 +137,67 @@ msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "Controllertoewijzing" -#: src/ui/gui/input_profile.slint:10 +#: src/ui/gui/input_profile.slint:12 msgctxt "InputProfileDialog" msgid "Create/Modify Input Profile" msgstr "Invoerprofiel maken/wijzigen" -#: src/ui/gui/input_profile.slint:18 +#: src/ui/gui/input_profile.slint:25 msgctxt "InputProfileDialog" msgid "Enter profile name to create or modify" msgstr "Profielnaam invoeren om aan te maken of te wijzigen" -#: src/ui/gui/input_profile.slint:29 +#: src/ui/gui/input_profile.slint:38 msgctxt "InputProfileDialog" msgid "Deadzone Percentage" msgstr "Dode-zonepercentage" -#: src/ui/gui/input_profile.slint:51 +#: src/ui/gui/input_profile.slint:61 msgctxt "InputProfileDialog" msgid "Use DirectInput" msgstr "DirectInput gebruiken" -#: src/ui/gui/input_profile.slint:61 +#: src/ui/gui/input_profile.slint:74 msgctxt "InputProfileDialog" msgid "Start Profile Creation Wizard" msgstr "Wizard voor profiel maken starten" -#: src/ui/gui/localgame_page.slint:18 +#: src/ui/gui/input_profile.slint:82 +msgctxt "InputProfileDialog" +msgid "Cancel" +msgstr "Annuleren" + +#: src/ui/gui/localgame_page.slint:19 msgctxt "LocalGame" msgid "Local Game" msgstr "Lokaal spel" -#: src/ui/gui/localgame_page.slint:25 +#: src/ui/gui/localgame_page.slint:26 msgctxt "LocalGame" msgid "Open ROM" msgstr "ROM openen" -#: src/ui/gui/localgame_page.slint:36 +#: src/ui/gui/localgame_page.slint:37 msgctxt "LocalGame" msgid "Open Saves Folder" msgstr "Map met opslagen openen" -#: src/ui/gui/localgame_page.slint:53 +#: src/ui/gui/localgame_page.slint:54 msgctxt "LocalGame" msgid "Recent ROMs" msgstr "Recent gebruikte ROM's" -#: src/ui/gui/netplay_create.slint:5 +#: src/ui/gui/netplay_create.slint:7 msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "Netplay: sessie aanmaken" -#: src/ui/gui/netplay_create.slint:24 +#: src/ui/gui/netplay_create.slint:23 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "Sessienaam:" -#: src/ui/gui/netplay_create.slint:28 +#: src/ui/gui/netplay_create.slint:27 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "Sessienaam invoeren" @@ -212,27 +212,27 @@ msgctxt "NetplayCreate" msgid "Enter session password" msgstr "Sessiewachtwoord invoeren" -#: src/ui/gui/netplay_create.slint:51 +#: src/ui/gui/netplay_create.slint:52 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "Spelernaam:" -#: src/ui/gui/netplay_create.slint:55 +#: src/ui/gui/netplay_create.slint:56 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "Spelernaam invoeren" -#: src/ui/gui/netplay_create.slint:64 +#: src/ui/gui/netplay_create.slint:66 msgctxt "NetplayCreate" msgid "Server:" msgstr "Server:" -#: src/ui/gui/netplay_create.slint:82 +#: src/ui/gui/netplay_create.slint:86 msgctxt "NetplayCreate" msgid "Select ROM" msgstr "ROM selecteren" -#: src/ui/gui/netplay_create.slint:97 +#: src/ui/gui/netplay_create.slint:102 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." @@ -240,168 +240,167 @@ msgstr "" "Voor dit spel zijn cheats ingeschakeld. Cheats worden gesynchroniseerd met " "andere spelers." -#: src/ui/gui/netplay_create.slint:103 +#: src/ui/gui/netplay_create.slint:112 msgctxt "NetplayCreate" msgid "Create Session" msgstr "Sessie aanmaken" -#: src/ui/gui/netplay_create.slint:126 -msgctxt "DispatcherDialog" -msgid "Creating Server" -msgstr "Server wordt aangemaakt" +#: src/ui/gui/netplay_create.slint:132 +msgctxt "NetplayCreate" +msgid "Cancel" +msgstr "Annuleren" -#: src/ui/gui/netplay_create.slint:128 -msgctxt "DispatcherDialog" -msgid "Creating server, please wait...This may take about 30 seconds." -msgstr "" -"Server wordt aangemaakt, even geduld… Dit kan ongeveer 30 seconden duren." +#: src/ui/gui/netplay_create.slint:155 +msgctxt "CustomServerDialog" +msgid "Enter a custom server URL" +msgstr "Aangepaste server-URL invoeren" -#: src/ui/gui/netplay_join.slint:5 +#: src/ui/gui/netplay_join.slint:7 msgctxt "NetplayJoin" msgid "Netplay: Join Session" msgstr "Netplay: deelnemen aan sessie" -#: src/ui/gui/netplay_join.slint:30 +#: src/ui/gui/netplay_join.slint:18 msgctxt "NetplayJoin" msgid "Player Name (required):" msgstr "Spelernaam (verplicht):" -#: src/ui/gui/netplay_join.slint:34 +#: src/ui/gui/netplay_join.slint:22 msgctxt "NetplayJoin" msgid "Enter player name" msgstr "Spelernaam invoeren" -#: src/ui/gui/netplay_join.slint:43 -msgctxt "NetplayJoin" -msgid "Custom Server URL (optional):" -msgstr "Aangepaste server-URL (optioneel):" - -#: src/ui/gui/netplay_join.slint:57 -msgctxt "NetplayJoin" -msgid "Refreshing session list, please wait..." -msgstr "Sessielijst wordt vernieuwd, even geduld…" - -#: src/ui/gui/netplay_join.slint:62 -msgctxt "NetplayJoin" -msgid "Click on a session below to select it" -msgstr "Klik hieronder op een sessie om die te selecteren" - -#: src/ui/gui/netplay_join.slint:67 -msgctxt "NetplayJoin" -msgid "No sessions available. Please refresh to check again." -msgstr "Geen sessies beschikbaar. Vernieuw om opnieuw te controleren." - -#: src/ui/gui/netplay_join.slint:73 -msgctxt "NetplayJoin" -msgid "Server" -msgstr "Server" - -#: src/ui/gui/netplay_join.slint:74 -msgctxt "NetplayJoin" -msgid "Session Name" -msgstr "Sessienaam" - -#: src/ui/gui/netplay_join.slint:75 -msgctxt "NetplayJoin" -msgid "Game Name" -msgstr "Spelnaam" - -#: src/ui/gui/netplay_join.slint:76 -msgctxt "NetplayJoin" -msgid "Password" -msgstr "Wachtwoord" - -#: src/ui/gui/netplay_join.slint:77 -msgctxt "NetplayJoin" -msgid "Cheats" -msgstr "Cheats" - -#: src/ui/gui/netplay_join.slint:91 -msgctxt "NetplayJoin" -msgid "Refresh Session List" -msgstr "Sessielijst vernieuwen" - -#: src/ui/gui/netplay_join.slint:105 +#: src/ui/gui/netplay_join.slint:31 msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "Wachtwoord (indien vereist)" -#: src/ui/gui/netplay_join.slint:112 +#: src/ui/gui/netplay_join.slint:41 +msgctxt "NetplayJoin" +msgid "Custom Server URL (optional):" +msgstr "Aangepaste server-URL (optioneel):" + +#: src/ui/gui/netplay_join.slint:53 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "ROM selecteren" -#: src/ui/gui/netplay_join.slint:125 +#: src/ui/gui/netplay_join.slint:68 +msgctxt "NetplayJoin" +msgid "Refreshing session list, please wait..." +msgstr "Sessielijst wordt vernieuwd, even geduld…" + +#: src/ui/gui/netplay_join.slint:73 +msgctxt "NetplayJoin" +msgid "Click on a session below to select it" +msgstr "Klik hieronder op een sessie om die te selecteren" + +#: src/ui/gui/netplay_join.slint:78 +msgctxt "NetplayJoin" +msgid "No sessions available. Please refresh to check again." +msgstr "Geen sessies beschikbaar. Vernieuw om opnieuw te controleren." + +#: src/ui/gui/netplay_join.slint:84 +msgctxt "NetplayJoin" +msgid "Server" +msgstr "Server" + +#: src/ui/gui/netplay_join.slint:85 +msgctxt "NetplayJoin" +msgid "Session Name" +msgstr "Sessienaam" + +#: src/ui/gui/netplay_join.slint:86 +msgctxt "NetplayJoin" +msgid "Game Name" +msgstr "Spelnaam" + +#: src/ui/gui/netplay_join.slint:87 +msgctxt "NetplayJoin" +msgid "Password" +msgstr "Wachtwoord" + +#: src/ui/gui/netplay_join.slint:88 +msgctxt "NetplayJoin" +msgid "Cheats" +msgstr "Cheats" + +#: src/ui/gui/netplay_join.slint:102 +msgctxt "NetplayJoin" +msgid "Refresh Session List" +msgstr "Sessielijst vernieuwen" + +#: src/ui/gui/netplay_join.slint:119 msgctxt "NetplayJoin" msgid "Join Session" msgstr "Deelnemen aan sessie" -#: src/ui/gui/netplay_page.slint:33 +#: src/ui/gui/netplay_join.slint:132 +msgctxt "NetplayJoin" +msgid "Cancel" +msgstr "Annuleren" + +#: src/ui/gui/netplay_page.slint:37 msgctxt "Netplay" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/netplay_page.slint:40 +#: src/ui/gui/netplay_page.slint:45 msgctxt "Netplay" msgid "Create Session" msgstr "Sessie aanmaken" -#: src/ui/gui/netplay_page.slint:50 +#: src/ui/gui/netplay_page.slint:56 msgctxt "Netplay" msgid "Join Session" msgstr "Deelnemen aan sessie" -#: src/ui/gui/netplay_page.slint:64 +#: src/ui/gui/netplay_page.slint:70 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "Netplay-Discordkanaal" -#: src/ui/gui/netplay_page.slint:71 +#: src/ui/gui/netplay_page.slint:77 msgctxt "Netplay" msgid "Provide Feedback" msgstr "Feedback geven" -#: src/ui/gui/netplay_page.slint:82 -msgctxt "CustomNetplayServer" -msgid "Custom Netplay Server" -msgstr "Aangepaste Netplay-server" - -#: src/ui/gui/netplay_wait.slint:14 +#: src/ui/gui/netplay_wait.slint:15 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay: wachtruimte" -#: src/ui/gui/netplay_wait.slint:31 +#: src/ui/gui/netplay_wait.slint:27 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Sessienaam:" -#: src/ui/gui/netplay_wait.slint:37 +#: src/ui/gui/netplay_wait.slint:33 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Spelnaam:" -#: src/ui/gui/netplay_wait.slint:43 +#: src/ui/gui/netplay_wait.slint:39 msgctxt "NetplayWait" msgid "Ping:" msgstr "Ping:" -#: src/ui/gui/netplay_wait.slint:50 +#: src/ui/gui/netplay_wait.slint:48 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Speler 1:" -#: src/ui/gui/netplay_wait.slint:54 +#: src/ui/gui/netplay_wait.slint:52 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Speler 2:" -#: src/ui/gui/netplay_wait.slint:60 +#: src/ui/gui/netplay_wait.slint:58 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Speler 3:" -#: src/ui/gui/netplay_wait.slint:64 +#: src/ui/gui/netplay_wait.slint:62 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Speler 4:" @@ -416,11 +415,16 @@ msgctxt "NetplayWait" msgid "Send Message" msgstr "Bericht verzenden" -#: src/ui/gui/netplay_wait.slint:102 +#: src/ui/gui/netplay_wait.slint:105 msgctxt "NetplayWait" msgid "Start Game" msgstr "Spel starten" +#: src/ui/gui/netplay_wait.slint:113 +msgctxt "NetplayWait" +msgid "Cancel" +msgstr "Annuleren" + #: src/ui/gui/retroachievements_page.slint:19 msgctxt "RAData" msgid "Not currently logged in" @@ -546,6 +550,11 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "Wat wil je zeggen?" +#~ msgctxt "NetplayCreate" +#~ msgid "Creating server, please wait...This may take about 30 seconds." +#~ msgstr "" +#~ "Server wordt aangemaakt, even geduld… Dit kan ongeveer 30 seconden duren." + #~ msgctxt "ControllerConfig" #~ msgid "Port" #~ msgstr "Poort" diff --git a/data/translations/pt_BR/LC_MESSAGES/gopher64.po b/data/translations/pt_BR/LC_MESSAGES/gopher64.po index 2d8d9ee..b392f31 100644 --- a/data/translations/pt_BR/LC_MESSAGES/gopher64.po +++ b/data/translations/pt_BR/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-05-19 09:43+0000\n" +"POT-Creation-Date: 2026-05-25 08:28+0000\n" "PO-Revision-Date: 2026-05-11 18:11-3000\n" "Last-Translator: EDUARDO CARVALHO \n" "Language-Team: LANGUAGE \n" @@ -47,46 +47,41 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Doações (via GitHub)" -#: src/ui/gui/appwindow.slint:103 +#: src/ui/gui/appwindow.slint:151 msgctxt "Menu" msgid "Local Game" msgstr "Jogo Local" -#: src/ui/gui/appwindow.slint:107 +#: src/ui/gui/appwindow.slint:155 msgctxt "Menu" msgid "Controller Config" msgstr "Configurar Controle" -#: src/ui/gui/appwindow.slint:111 +#: src/ui/gui/appwindow.slint:159 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:115 +#: src/ui/gui/appwindow.slint:163 msgctxt "Menu" msgid "Cheats" msgstr "Trapaças" -#: src/ui/gui/appwindow.slint:119 +#: src/ui/gui/appwindow.slint:167 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:123 +#: src/ui/gui/appwindow.slint:171 msgctxt "Menu" msgid "Settings" msgstr "Configurações" -#: src/ui/gui/appwindow.slint:127 +#: src/ui/gui/appwindow.slint:175 msgctxt "Menu" msgid "About" msgstr "Sobre" -#: src/ui/gui/appwindow.slint:248 -msgctxt "ErrorDialog" -msgid "Error" -msgstr "Erro" - #: src/ui/gui/cheat_page.slint:15 msgctxt "Cheats" msgid "Cheats" @@ -102,7 +97,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Limpar Trapaças para todas as ROMs" -#: src/ui/gui/cheat_page.slint:87 +#: src/ui/gui/cheat_page.slint:88 msgctxt "Cheats" msgid "No Cheats Available" msgstr "Sem trapaças disponíveis" @@ -142,62 +137,67 @@ msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "Atribuição do controle" -#: src/ui/gui/input_profile.slint:10 +#: src/ui/gui/input_profile.slint:12 msgctxt "InputProfileDialog" msgid "Create/Modify Input Profile" msgstr "Criar/Modificar Perfil de Comandos" -#: src/ui/gui/input_profile.slint:18 +#: src/ui/gui/input_profile.slint:25 msgctxt "InputProfileDialog" msgid "Enter profile name to create or modify" msgstr "Insira o nome de perfil para criar ou modificar" -#: src/ui/gui/input_profile.slint:29 +#: src/ui/gui/input_profile.slint:38 msgctxt "InputProfileDialog" msgid "Deadzone Percentage" msgstr "Porcentagem de Zona-morta" -#: src/ui/gui/input_profile.slint:51 +#: src/ui/gui/input_profile.slint:61 msgctxt "InputProfileDialog" msgid "Use DirectInput" msgstr "Usar DirectInput" -#: src/ui/gui/input_profile.slint:61 +#: src/ui/gui/input_profile.slint:74 msgctxt "InputProfileDialog" msgid "Start Profile Creation Wizard" msgstr "Iniciar Assistente de Criação de Perfil" -#: src/ui/gui/localgame_page.slint:18 +#: src/ui/gui/input_profile.slint:82 +msgctxt "InputProfileDialog" +msgid "Cancel" +msgstr "Cancelar" + +#: src/ui/gui/localgame_page.slint:19 msgctxt "LocalGame" msgid "Local Game" msgstr "Jogo Local" -#: src/ui/gui/localgame_page.slint:25 +#: src/ui/gui/localgame_page.slint:26 msgctxt "LocalGame" msgid "Open ROM" msgstr "Abrir ROM" -#: src/ui/gui/localgame_page.slint:36 +#: src/ui/gui/localgame_page.slint:37 msgctxt "LocalGame" msgid "Open Saves Folder" msgstr "Abrir Partes de Saves" -#: src/ui/gui/localgame_page.slint:53 +#: src/ui/gui/localgame_page.slint:54 msgctxt "LocalGame" msgid "Recent ROMs" msgstr "ROMs Recentes" -#: src/ui/gui/netplay_create.slint:5 +#: src/ui/gui/netplay_create.slint:7 msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "Netplay: Criar Sessão" -#: src/ui/gui/netplay_create.slint:24 +#: src/ui/gui/netplay_create.slint:23 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "Nome da Sessão:" -#: src/ui/gui/netplay_create.slint:28 +#: src/ui/gui/netplay_create.slint:27 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "Insira nome da sessão:" @@ -212,27 +212,27 @@ msgctxt "NetplayCreate" msgid "Enter session password" msgstr "Insira a senha da sessão" -#: src/ui/gui/netplay_create.slint:51 +#: src/ui/gui/netplay_create.slint:52 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "Nome de Jogador:" -#: src/ui/gui/netplay_create.slint:55 +#: src/ui/gui/netplay_create.slint:56 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "Insira nome de jogador" -#: src/ui/gui/netplay_create.slint:64 +#: src/ui/gui/netplay_create.slint:66 msgctxt "NetplayCreate" msgid "Server:" msgstr "Servidor:" -#: src/ui/gui/netplay_create.slint:82 +#: src/ui/gui/netplay_create.slint:86 msgctxt "NetplayCreate" msgid "Select ROM" msgstr "Selecionar ROM" -#: src/ui/gui/netplay_create.slint:97 +#: src/ui/gui/netplay_create.slint:102 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." @@ -240,169 +240,168 @@ msgstr "" "Este jogo tem trapaças habilitadas. As trapaças serão sincronizadas com " "outros jogadores." -#: src/ui/gui/netplay_create.slint:103 +#: src/ui/gui/netplay_create.slint:112 msgctxt "NetplayCreate" msgid "Create Session" msgstr "Criar Sessão" -#: src/ui/gui/netplay_create.slint:126 -msgctxt "DispatcherDialog" -msgid "Creating Server" -msgstr "Criando Servidor" +#: src/ui/gui/netplay_create.slint:132 +msgctxt "NetplayCreate" +msgid "Cancel" +msgstr "Cancelar" -#: src/ui/gui/netplay_create.slint:128 -msgctxt "DispatcherDialog" -msgid "Creating server, please wait...This may take about 30 seconds." -msgstr "" -"Criando servidor, por favor aguarde...Isto poderá levar até 30 segundos." +#: src/ui/gui/netplay_create.slint:155 +msgctxt "CustomServerDialog" +msgid "Enter a custom server URL" +msgstr "Insira a URL personalizada do servidor" -#: src/ui/gui/netplay_join.slint:5 +#: src/ui/gui/netplay_join.slint:7 msgctxt "NetplayJoin" msgid "Netplay: Join Session" msgstr "Netplay: Entrar na sessão" -#: src/ui/gui/netplay_join.slint:30 +#: src/ui/gui/netplay_join.slint:18 msgctxt "NetplayJoin" msgid "Player Name (required):" msgstr "Nome de Jogador (obrigatório):" -#: src/ui/gui/netplay_join.slint:34 +#: src/ui/gui/netplay_join.slint:22 msgctxt "NetplayJoin" msgid "Enter player name" msgstr "Insira o nome de jogador" -#: src/ui/gui/netplay_join.slint:43 +#: src/ui/gui/netplay_join.slint:31 +msgctxt "NetplayJoin" +msgid "Password (if required)" +msgstr "Senha (caso obrigatória)" + +#: src/ui/gui/netplay_join.slint:41 msgctxt "NetplayJoin" msgid "Custom Server URL (optional):" msgstr "URL Personalizada de Servidor (opcional):" -#: src/ui/gui/netplay_join.slint:57 +#: src/ui/gui/netplay_join.slint:53 +msgctxt "NetplayJoin" +msgid "Select ROM" +msgstr "Selecionar ROM" + +#: src/ui/gui/netplay_join.slint:68 msgctxt "NetplayJoin" msgid "Refreshing session list, please wait..." msgstr "Recarregando lista de sessões, por favor aguarde..." -#: src/ui/gui/netplay_join.slint:62 +#: src/ui/gui/netplay_join.slint:73 msgctxt "NetplayJoin" msgid "Click on a session below to select it" msgstr "Clique em uma sessão abaixo para selecionar" -#: src/ui/gui/netplay_join.slint:67 +#: src/ui/gui/netplay_join.slint:78 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." msgstr "" "Sem sessões disponíveis. Por favor recarregue para verificar novamente." -#: src/ui/gui/netplay_join.slint:73 +#: src/ui/gui/netplay_join.slint:84 msgctxt "NetplayJoin" msgid "Server" msgstr "Servidor" -#: src/ui/gui/netplay_join.slint:74 +#: src/ui/gui/netplay_join.slint:85 msgctxt "NetplayJoin" msgid "Session Name" msgstr "Nome da Sessão" -#: src/ui/gui/netplay_join.slint:75 +#: src/ui/gui/netplay_join.slint:86 msgctxt "NetplayJoin" msgid "Game Name" msgstr "Nome do Jogo" -#: src/ui/gui/netplay_join.slint:76 +#: src/ui/gui/netplay_join.slint:87 msgctxt "NetplayJoin" msgid "Password" msgstr "Senha" -#: src/ui/gui/netplay_join.slint:77 +#: src/ui/gui/netplay_join.slint:88 msgctxt "NetplayJoin" msgid "Cheats" msgstr "Trapaças" -#: src/ui/gui/netplay_join.slint:91 +#: src/ui/gui/netplay_join.slint:102 msgctxt "NetplayJoin" msgid "Refresh Session List" msgstr "Recarregar Lista de Sessões" -#: src/ui/gui/netplay_join.slint:105 -msgctxt "NetplayJoin" -msgid "Password (if required)" -msgstr "Senha (caso obrigatória)" - -#: src/ui/gui/netplay_join.slint:112 -msgctxt "NetplayJoin" -msgid "Select ROM" -msgstr "Selecionar ROM" - -#: src/ui/gui/netplay_join.slint:125 +#: src/ui/gui/netplay_join.slint:119 msgctxt "NetplayJoin" msgid "Join Session" msgstr "Entrar na Sessão" -#: src/ui/gui/netplay_page.slint:33 +#: src/ui/gui/netplay_join.slint:132 +msgctxt "NetplayJoin" +msgid "Cancel" +msgstr "Cancelar" + +#: src/ui/gui/netplay_page.slint:37 msgctxt "Netplay" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/netplay_page.slint:40 +#: src/ui/gui/netplay_page.slint:45 msgctxt "Netplay" msgid "Create Session" msgstr "Criar Sessão" -#: src/ui/gui/netplay_page.slint:50 +#: src/ui/gui/netplay_page.slint:56 msgctxt "Netplay" msgid "Join Session" msgstr "Entrar na Sessão" -#: src/ui/gui/netplay_page.slint:64 +#: src/ui/gui/netplay_page.slint:70 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "Canal de Netplay do Discord" -#: src/ui/gui/netplay_page.slint:71 +#: src/ui/gui/netplay_page.slint:77 msgctxt "Netplay" msgid "Provide Feedback" msgstr "Fornecer Feedback" -#: src/ui/gui/netplay_page.slint:82 -msgctxt "CustomNetplayServer" -msgid "Custom Netplay Server" -msgstr "Servidor de Netplay Personalizado" - -#: src/ui/gui/netplay_wait.slint:14 +#: src/ui/gui/netplay_wait.slint:15 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay: Aguardando Sala" -#: src/ui/gui/netplay_wait.slint:31 +#: src/ui/gui/netplay_wait.slint:27 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Nome da Sessão:" -#: src/ui/gui/netplay_wait.slint:37 +#: src/ui/gui/netplay_wait.slint:33 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Nome do Jogo:" -#: src/ui/gui/netplay_wait.slint:43 +#: src/ui/gui/netplay_wait.slint:39 msgctxt "NetplayWait" msgid "Ping:" msgstr "Ping:" -#: src/ui/gui/netplay_wait.slint:50 +#: src/ui/gui/netplay_wait.slint:48 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Jogador 1" -#: src/ui/gui/netplay_wait.slint:54 +#: src/ui/gui/netplay_wait.slint:52 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Jogador 2:" -#: src/ui/gui/netplay_wait.slint:60 +#: src/ui/gui/netplay_wait.slint:58 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Jogador 3:" -#: src/ui/gui/netplay_wait.slint:64 +#: src/ui/gui/netplay_wait.slint:62 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Jogador 4:" @@ -417,11 +416,16 @@ msgctxt "NetplayWait" msgid "Send Message" msgstr "Enviar Mensagem" -#: src/ui/gui/netplay_wait.slint:102 +#: src/ui/gui/netplay_wait.slint:105 msgctxt "NetplayWait" msgid "Start Game" msgstr "Iniciar jogo" +#: src/ui/gui/netplay_wait.slint:113 +msgctxt "NetplayWait" +msgid "Cancel" +msgstr "Cancelar" + #: src/ui/gui/retroachievements_page.slint:19 msgctxt "RAData" msgid "Not currently logged in" @@ -547,6 +551,11 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "O que você quer falar?" +#~ msgctxt "NetplayCreate" +#~ msgid "Creating server, please wait...This may take about 30 seconds." +#~ msgstr "" +#~ "Criando servidor, por favor aguarde...Isto poderá levar até 30 segundos." + #~ msgctxt "ControllerConfig" #~ msgid "Port" #~ msgstr "Entrada" diff --git a/data/translations/ru/LC_MESSAGES/gopher64.po b/data/translations/ru/LC_MESSAGES/gopher64.po index b04fac7..338af51 100644 --- a/data/translations/ru/LC_MESSAGES/gopher64.po +++ b/data/translations/ru/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-19 09:43+0000\n" +"POT-Creation-Date: 2026-05-25 08:28+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Russian\n" @@ -47,46 +47,41 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Пожертвовать (через GitHub)" -#: src/ui/gui/appwindow.slint:103 +#: src/ui/gui/appwindow.slint:151 msgctxt "Menu" msgid "Local Game" msgstr "Локальная игра" -#: src/ui/gui/appwindow.slint:107 +#: src/ui/gui/appwindow.slint:155 msgctxt "Menu" msgid "Controller Config" msgstr "Настройка контроллера" -#: src/ui/gui/appwindow.slint:111 +#: src/ui/gui/appwindow.slint:159 msgctxt "Menu" msgid "Netplay" msgstr "Сетевая игра" -#: src/ui/gui/appwindow.slint:115 +#: src/ui/gui/appwindow.slint:163 msgctxt "Menu" msgid "Cheats" msgstr "Читы" -#: src/ui/gui/appwindow.slint:119 +#: src/ui/gui/appwindow.slint:167 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:123 +#: src/ui/gui/appwindow.slint:171 msgctxt "Menu" msgid "Settings" msgstr "Настройки" -#: src/ui/gui/appwindow.slint:127 +#: src/ui/gui/appwindow.slint:175 msgctxt "Menu" msgid "About" msgstr "О программе" -#: src/ui/gui/appwindow.slint:248 -msgctxt "ErrorDialog" -msgid "Error" -msgstr "Ошибка" - #: src/ui/gui/cheat_page.slint:15 msgctxt "Cheats" msgid "Cheats" @@ -102,7 +97,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Очистить читы для всех ROMов" -#: src/ui/gui/cheat_page.slint:87 +#: src/ui/gui/cheat_page.slint:88 msgctxt "Cheats" msgid "No Cheats Available" msgstr "Читы недоступны" @@ -142,62 +137,67 @@ msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "Назначение контроллера" -#: src/ui/gui/input_profile.slint:10 +#: src/ui/gui/input_profile.slint:12 msgctxt "InputProfileDialog" msgid "Create/Modify Input Profile" msgstr "Создать/изменить профиль ввода" -#: src/ui/gui/input_profile.slint:18 +#: src/ui/gui/input_profile.slint:25 msgctxt "InputProfileDialog" msgid "Enter profile name to create or modify" msgstr "Введите имя профиля для создания или изменения" -#: src/ui/gui/input_profile.slint:29 +#: src/ui/gui/input_profile.slint:38 msgctxt "InputProfileDialog" msgid "Deadzone Percentage" msgstr "Процент мёртвой зоны" -#: src/ui/gui/input_profile.slint:51 +#: src/ui/gui/input_profile.slint:61 msgctxt "InputProfileDialog" msgid "Use DirectInput" msgstr "Использовать DirectInput" -#: src/ui/gui/input_profile.slint:61 +#: src/ui/gui/input_profile.slint:74 msgctxt "InputProfileDialog" msgid "Start Profile Creation Wizard" msgstr "Запустить мастер создания профиля" -#: src/ui/gui/localgame_page.slint:18 +#: src/ui/gui/input_profile.slint:82 +msgctxt "InputProfileDialog" +msgid "Cancel" +msgstr "Отмена" + +#: src/ui/gui/localgame_page.slint:19 msgctxt "LocalGame" msgid "Local Game" msgstr "Локальная игра" -#: src/ui/gui/localgame_page.slint:25 +#: src/ui/gui/localgame_page.slint:26 msgctxt "LocalGame" msgid "Open ROM" msgstr "Открыть ROM" -#: src/ui/gui/localgame_page.slint:36 +#: src/ui/gui/localgame_page.slint:37 msgctxt "LocalGame" msgid "Open Saves Folder" msgstr "Открыть папку сохранений" -#: src/ui/gui/localgame_page.slint:53 +#: src/ui/gui/localgame_page.slint:54 msgctxt "LocalGame" msgid "Recent ROMs" msgstr "Недавние ROMы" -#: src/ui/gui/netplay_create.slint:5 +#: src/ui/gui/netplay_create.slint:7 msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "Сетевая игра: Создать сессию" -#: src/ui/gui/netplay_create.slint:24 +#: src/ui/gui/netplay_create.slint:23 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "Имя сессии:" -#: src/ui/gui/netplay_create.slint:28 +#: src/ui/gui/netplay_create.slint:27 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "Введите имя сессии" @@ -212,195 +212,194 @@ msgctxt "NetplayCreate" msgid "Enter session password" msgstr "Введите пароль сессии" -#: src/ui/gui/netplay_create.slint:51 +#: src/ui/gui/netplay_create.slint:52 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "Имя игрока:" -#: src/ui/gui/netplay_create.slint:55 +#: src/ui/gui/netplay_create.slint:56 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "Введите имя игрока" -#: src/ui/gui/netplay_create.slint:64 +#: src/ui/gui/netplay_create.slint:66 msgctxt "NetplayCreate" msgid "Server:" msgstr "Сервер:" -#: src/ui/gui/netplay_create.slint:82 +#: src/ui/gui/netplay_create.slint:86 msgctxt "NetplayCreate" msgid "Select ROM" msgstr "Выбрать ROM" -#: src/ui/gui/netplay_create.slint:97 +#: src/ui/gui/netplay_create.slint:102 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." msgstr "" "Для этой игры включены читы. Читы будут синхронизированы с другими игроками." -#: src/ui/gui/netplay_create.slint:103 +#: src/ui/gui/netplay_create.slint:112 msgctxt "NetplayCreate" msgid "Create Session" msgstr "Создать сессию" -#: src/ui/gui/netplay_create.slint:126 -msgctxt "DispatcherDialog" -msgid "Creating Server" -msgstr "Создание сервера" +#: src/ui/gui/netplay_create.slint:132 +msgctxt "NetplayCreate" +msgid "Cancel" +msgstr "Отмена" -#: src/ui/gui/netplay_create.slint:128 -msgctxt "DispatcherDialog" -msgid "Creating server, please wait...This may take about 30 seconds." -msgstr "" -"Создание сервера, пожалуйста, подождите... Это может занять около 30 секунд." +#: src/ui/gui/netplay_create.slint:155 +msgctxt "CustomServerDialog" +msgid "Enter a custom server URL" +msgstr "Введите URL пользовательского сервера" -#: src/ui/gui/netplay_join.slint:5 +#: src/ui/gui/netplay_join.slint:7 msgctxt "NetplayJoin" msgid "Netplay: Join Session" msgstr "Сетевая игра: Присоединиться к сессии" -#: src/ui/gui/netplay_join.slint:30 +#: src/ui/gui/netplay_join.slint:18 msgctxt "NetplayJoin" msgid "Player Name (required):" msgstr "Имя игрока (обязательно):" -#: src/ui/gui/netplay_join.slint:34 +#: src/ui/gui/netplay_join.slint:22 msgctxt "NetplayJoin" msgid "Enter player name" msgstr "Введите имя игрока" -#: src/ui/gui/netplay_join.slint:43 -msgctxt "NetplayJoin" -msgid "Custom Server URL (optional):" -msgstr "URL пользовательского сервера (необязательно):" - -#: src/ui/gui/netplay_join.slint:57 -msgctxt "NetplayJoin" -msgid "Refreshing session list, please wait..." -msgstr "Обновление списка сессий, пожалуйста, подождите..." - -#: src/ui/gui/netplay_join.slint:62 -msgctxt "NetplayJoin" -msgid "Click on a session below to select it" -msgstr "Нажмите на сессию ниже, чтобы выбрать её" - -#: src/ui/gui/netplay_join.slint:67 -msgctxt "NetplayJoin" -msgid "No sessions available. Please refresh to check again." -msgstr "Нет доступных сессий. Пожалуйста, обновите, чтобы проверить снова." - -#: src/ui/gui/netplay_join.slint:73 -msgctxt "NetplayJoin" -msgid "Server" -msgstr "Сервер" - -#: src/ui/gui/netplay_join.slint:74 -msgctxt "NetplayJoin" -msgid "Session Name" -msgstr "Имя сессии" - -#: src/ui/gui/netplay_join.slint:75 -msgctxt "NetplayJoin" -msgid "Game Name" -msgstr "Название игры" - -#: src/ui/gui/netplay_join.slint:76 -msgctxt "NetplayJoin" -msgid "Password" -msgstr "Пароль" - -#: src/ui/gui/netplay_join.slint:77 -msgctxt "NetplayJoin" -msgid "Cheats" -msgstr "Читы" - -#: src/ui/gui/netplay_join.slint:91 -msgctxt "NetplayJoin" -msgid "Refresh Session List" -msgstr "Обновить список сессий" - -#: src/ui/gui/netplay_join.slint:105 +#: src/ui/gui/netplay_join.slint:31 msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "Пароль (если требуется)" -#: src/ui/gui/netplay_join.slint:112 +#: src/ui/gui/netplay_join.slint:41 +msgctxt "NetplayJoin" +msgid "Custom Server URL (optional):" +msgstr "URL пользовательского сервера (необязательно):" + +#: src/ui/gui/netplay_join.slint:53 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "Выбрать ROM" -#: src/ui/gui/netplay_join.slint:125 +#: src/ui/gui/netplay_join.slint:68 +msgctxt "NetplayJoin" +msgid "Refreshing session list, please wait..." +msgstr "Обновление списка сессий, пожалуйста, подождите..." + +#: src/ui/gui/netplay_join.slint:73 +msgctxt "NetplayJoin" +msgid "Click on a session below to select it" +msgstr "Нажмите на сессию ниже, чтобы выбрать её" + +#: src/ui/gui/netplay_join.slint:78 +msgctxt "NetplayJoin" +msgid "No sessions available. Please refresh to check again." +msgstr "Нет доступных сессий. Пожалуйста, обновите, чтобы проверить снова." + +#: src/ui/gui/netplay_join.slint:84 +msgctxt "NetplayJoin" +msgid "Server" +msgstr "Сервер" + +#: src/ui/gui/netplay_join.slint:85 +msgctxt "NetplayJoin" +msgid "Session Name" +msgstr "Имя сессии" + +#: src/ui/gui/netplay_join.slint:86 +msgctxt "NetplayJoin" +msgid "Game Name" +msgstr "Название игры" + +#: src/ui/gui/netplay_join.slint:87 +msgctxt "NetplayJoin" +msgid "Password" +msgstr "Пароль" + +#: src/ui/gui/netplay_join.slint:88 +msgctxt "NetplayJoin" +msgid "Cheats" +msgstr "Читы" + +#: src/ui/gui/netplay_join.slint:102 +msgctxt "NetplayJoin" +msgid "Refresh Session List" +msgstr "Обновить список сессий" + +#: src/ui/gui/netplay_join.slint:119 msgctxt "NetplayJoin" msgid "Join Session" msgstr "Присоединиться к сессии" -#: src/ui/gui/netplay_page.slint:33 +#: src/ui/gui/netplay_join.slint:132 +msgctxt "NetplayJoin" +msgid "Cancel" +msgstr "Отмена" + +#: src/ui/gui/netplay_page.slint:37 msgctxt "Netplay" msgid "Netplay" msgstr "Сетевая игра" -#: src/ui/gui/netplay_page.slint:40 +#: src/ui/gui/netplay_page.slint:45 msgctxt "Netplay" msgid "Create Session" msgstr "Создать сессию" -#: src/ui/gui/netplay_page.slint:50 +#: src/ui/gui/netplay_page.slint:56 msgctxt "Netplay" msgid "Join Session" msgstr "Присоединиться к сессии" -#: src/ui/gui/netplay_page.slint:64 +#: src/ui/gui/netplay_page.slint:70 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "Канал Discord для сетевой игры" -#: src/ui/gui/netplay_page.slint:71 +#: src/ui/gui/netplay_page.slint:77 msgctxt "Netplay" msgid "Provide Feedback" msgstr "Оставить отзыв" -#: src/ui/gui/netplay_page.slint:82 -msgctxt "CustomNetplayServer" -msgid "Custom Netplay Server" -msgstr "Пользовательский сервер сетевой игры" - -#: src/ui/gui/netplay_wait.slint:14 +#: src/ui/gui/netplay_wait.slint:15 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Сетевая игра: Комната ожидания" -#: src/ui/gui/netplay_wait.slint:31 +#: src/ui/gui/netplay_wait.slint:27 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Имя сессии:" -#: src/ui/gui/netplay_wait.slint:37 +#: src/ui/gui/netplay_wait.slint:33 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Название игры:" -#: src/ui/gui/netplay_wait.slint:43 +#: src/ui/gui/netplay_wait.slint:39 msgctxt "NetplayWait" msgid "Ping:" msgstr "Пинг:" -#: src/ui/gui/netplay_wait.slint:50 +#: src/ui/gui/netplay_wait.slint:48 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Игрок 1:" -#: src/ui/gui/netplay_wait.slint:54 +#: src/ui/gui/netplay_wait.slint:52 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Игрок 2:" -#: src/ui/gui/netplay_wait.slint:60 +#: src/ui/gui/netplay_wait.slint:58 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Игрок 3:" -#: src/ui/gui/netplay_wait.slint:64 +#: src/ui/gui/netplay_wait.slint:62 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Игрок 4:" @@ -415,11 +414,16 @@ msgctxt "NetplayWait" msgid "Send Message" msgstr "Отправить сообщение" -#: src/ui/gui/netplay_wait.slint:102 +#: src/ui/gui/netplay_wait.slint:105 msgctxt "NetplayWait" msgid "Start Game" msgstr "Начать игру" +#: src/ui/gui/netplay_wait.slint:113 +msgctxt "NetplayWait" +msgid "Cancel" +msgstr "Отмена" + #: src/ui/gui/retroachievements_page.slint:19 msgctxt "RAData" msgid "Not currently logged in" @@ -545,6 +549,12 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "Что вы хотите сказать?" +#~ msgctxt "NetplayCreate" +#~ msgid "Creating server, please wait...This may take about 30 seconds." +#~ msgstr "" +#~ "Создание сервера, пожалуйста, подождите... Это может занять около 30 " +#~ "секунд." + #~ msgctxt "ControllerConfig" #~ msgid "Port" #~ msgstr "Порт" diff --git a/src/ui/cheats.rs b/src/ui/cheats.rs index 6f479a7..7b84d26 100644 --- a/src/ui/cheats.rs +++ b/src/ui/cheats.rs @@ -1,6 +1,5 @@ use crate::ui; use crate::ui::gui::AppWindow; -use crate::ui::gui::ErrorDialog; use crate::{cheats, device}; use slint::ComponentHandle; @@ -66,14 +65,8 @@ pub fn cheats_window(app: &AppWindow) { } } else { clear_cheats(&weak, true); - weak.upgrade_in_event_loop(move |_handle| { - let message_dialog = ErrorDialog::new().unwrap(); - let weak_dialog = message_dialog.as_weak(); - message_dialog.on_close_clicked(move || { - weak_dialog.unwrap().hide().unwrap(); - }); - message_dialog.set_text("Could not read ROM".into()); - message_dialog.show().unwrap(); + weak.upgrade_in_event_loop(move |handle| { + handle.invoke_show_message("Could not read ROM".into(), true); }) .unwrap(); } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 2dd8330..347b8dc 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -334,50 +334,54 @@ fn controller_window(app: &AppWindow, config: &ui::config::Config) { let weak_app = app.as_weak(); app.on_input_profile_button_clicked(move || { - let dialog = InputProfileDialog::new().unwrap(); - dialog.set_deadzone(ui::input::DEADZONE_DEFAULT); - let weak_dialog = dialog.as_weak(); - let weak_app = weak_app.clone(); - dialog.on_profile_creation_button_clicked(move || { - let weak_app = weak_app.clone(); - weak_dialog - .upgrade_in_event_loop(move |handle| { - let profile_name = handle.get_profile_name(); - let dinput = handle.get_dinput(); - let deadzone = handle.get_deadzone(); - handle.hide().unwrap(); + weak_app + .upgrade_in_event_loop(move |handle| { + handle.set_input_deadzone(ui::input::DEADZONE_DEFAULT); + handle.set_input_profile_name(String::new().into()); + handle.set_input_dinput(false); + handle.set_show_input_profile(true); + }) + .unwrap(); + }); + let weak_app = app.as_weak(); + app.on_input_profile_creation_button_clicked(move || { + let weak_app2 = weak_app.clone(); + weak_app + .upgrade_in_event_loop(move |handle| { + let profile_name = handle.get_input_profile_name(); + let dinput = handle.get_input_dinput(); + let deadzone = handle.get_input_deadzone(); + handle.set_show_input_profile(false); - tokio::spawn(async move { - let cli_path = std::env::current_exe() - .unwrap() - .parent() - .unwrap() - .join(format!("{}-cli", env!("CARGO_PKG_NAME"))); - let cmd_path = if cfg!(target_os = "macos") && cli_path.exists() { - cli_path - } else { - std::env::current_exe().unwrap() - }; - let mut command = tokio::process::Command::new(cmd_path); - command.args([ - "--configure-input-profile", - &profile_name, - "--deadzone", - &deadzone.to_string(), - ]); - if dinput { - command.arg("--use-dinput"); - } - if !command.status().await.unwrap().success() { - eprintln!("Failed to configure input profile"); - } - let config = ui::config::Config::new(); - update_input_profiles(&weak_app, &config); - }); - }) - .unwrap(); - }); - dialog.show().unwrap(); + tokio::spawn(async move { + let cli_path = std::env::current_exe() + .unwrap() + .parent() + .unwrap() + .join(format!("{}-cli", env!("CARGO_PKG_NAME"))); + let cmd_path = if cfg!(target_os = "macos") && cli_path.exists() { + cli_path + } else { + std::env::current_exe().unwrap() + }; + let mut command = tokio::process::Command::new(cmd_path); + command.args([ + "--configure-input-profile", + &profile_name, + "--deadzone", + &deadzone.to_string(), + ]); + if dinput { + command.arg("--use-dinput"); + } + if !command.status().await.unwrap().success() { + eprintln!("Failed to configure input profile"); + } + let config = ui::config::Config::new(); + update_input_profiles(&weak_app2, &config); + }); + }) + .unwrap(); }); let weak_app2 = app.as_weak(); diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 856a788..6041315 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -1,7 +1,7 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { StandardButton, VerticalBox, HorizontalBox } from "std-widgets.slint"; +import { Palette, StandardButton, VerticalBox, HorizontalBox } from "std-widgets.slint"; import { LocalGame, ControllerConfig, Netplay, Cheats, RetroAchievements, Settings, About } from "pages.slint"; import { SideBar } from "side_bar.slint"; import { SettingsData } from "settings_page.slint"; @@ -10,13 +10,12 @@ import { AboutData } from "about_page.slint"; import { ControllerData } from "controller_page.slint"; import { State } from "localgame_page.slint"; import { CheatsData } from "cheat_page.slint"; -export { InputProfileDialog } from "input_profile.slint"; +import { InputProfileDialog, InputProfileData } from "input_profile.slint"; +import { NetplayData } from "netplay_page.slint"; export { VruDialog } from "vru_dialog.slint"; -export { NetplayCreate } from "netplay_create.slint"; -export { NetplayJoin } from "netplay_join.slint"; -export { NetplayWait } from "netplay_wait.slint"; -export { CustomNetplayServer } from "netplay_page.slint"; -export { DispatcherDialog } from "netplay_create.slint"; +import { NetplayCreate, CustomServerDialog } from "netplay_create.slint"; +import { NetplayJoin } from "netplay_join.slint"; +import { NetplayWait, NetplayWaitData } from "netplay_wait.slint"; export component AppWindow inherits Window { callback wiki_button_clicked; @@ -29,11 +28,20 @@ export component AppWindow inherits Window { callback open_rom_button_clicked; callback saves_folder_button_clicked; callback input_profile_button_clicked; + callback input_profile_creation_button_clicked; callback transferpak_toggled(int,bool); callback create_session_button_clicked; callback join_session_button_clicked; callback netplay_discord_button_clicked; callback netplay_feedback_button_clicked; + callback netplay_begin_game; + callback netplay_send_chat_message(string); + callback netplay_refresh_sessions; + callback netplay_create_session(string, string, string, string, string, string, string); + callback netplay_get_custom_url; + callback netplay_select_rom(string); + callback netplay_join_session(string, string, string, string, int); + callback netplay_close; callback cheats_select_rom_clicked(string); callback cheats_clear_clicked; callback cheat_toggled(string, string, string, bool); @@ -85,6 +93,39 @@ export component AppWindow inherits Window { in-out property cheat_game_crc <=> CheatsData.cheat_game_crc; in-out property cheats <=> CheatsData.cheats; + in-out property input_deadzone <=> InputProfileData.deadzone; + in-out property input_profile_name <=> InputProfileData.profile_name; + in-out property input_dinput <=> InputProfileData.dinput; + in-out property show_input_profile <=> InputProfileData.show_input_profile; + + in-out property show_netplay_wait_room <=> NetplayData.show_wait_room; + in-out property show_netplay_create_room <=> NetplayData.show_create_room; + in-out property show_netplay_join_room <=> NetplayData.show_join_room; + + in-out property netplay_server_names <=> NetplayData.server_names; + in-out property netplay_server_urls <=> NetplayData.server_urls; + in-out property netplay_custom_server_url <=> NetplayData.custom_server_url; + in-out property netplay_game_name <=> NetplayData.game_name; + in-out property netplay_game_hash <=> NetplayData.game_hash; + in-out property netplay_game_cheats <=> NetplayData.game_cheats; + in-out property netplay_pending_session <=> NetplayData.pending_session; + in-out property netplay_rom_path <=> NetplayData.rom_path; + in-out property netplay_peer_addr <=> NetplayData.peer_addr; + in-out property netplay_room_urls <=> NetplayData.room_urls; + in-out property netplay_room_ports <=> NetplayData.room_ports; + in-out property netplay_current_session <=> NetplayData.current_session; + in-out property netplay_sessions <=> NetplayData.sessions; + in-out property netplay_pending_refresh <=> NetplayData.pending_refresh; + in-out property netplay_session_name <=> NetplayData.session_name; + in-out property netplay_port <=> NetplayWaitData.port; + in-out property netplay_ping <=> NetplayWaitData.ping; + in-out property netplay_motd <=> NetplayWaitData.motd; + in-out property netplay_can_start <=> NetplayWaitData.can_start; + in-out property netplay_players <=> NetplayWaitData.players; + in-out property netplay_chat_text <=> NetplayWaitData.chat_text; + + private property popup_message; + private property popup_has_close; private property is-portrait: root.width < root.height; private property bar-thickness: 56px; private property safe-left: root.safe-area-insets.left; @@ -96,7 +137,7 @@ export component AppWindow inherits Window { min-width: 320px; min-height: 240px; - preferred-width: 600px; + preferred-width: 800px; preferred-height: 600px; title: "Gopher64"; icon: @image-url("../../../data/icon/gopher64.png"); @@ -163,7 +204,7 @@ export component AppWindow inherits Window { recent_rom_button_clicked(rom); } } - if(side-bar.current-item == 1): ControllerConfig { + if(side-bar.current-item == 1 && !show_input_profile): ControllerConfig { width: 100%; height: 100%; input_profile_button_clicked => { @@ -176,7 +217,14 @@ export component AppWindow inherits Window { controller_window_created(); } } - if(side-bar.current-item == 2): Netplay { + if(side-bar.current-item == 1 && show_input_profile): InputProfileDialog { + width: 100%; + height: 100%; + profile_creation_button_clicked => { + input_profile_creation_button_clicked(); + } + } + if(side-bar.current-item == 2 && !show_netplay_wait_room && !show_netplay_create_room && !show_netplay_join_room): Netplay { width: 100%; height: 100%; create_session_button_clicked => { @@ -192,6 +240,51 @@ export component AppWindow inherits Window { netplay_feedback_button_clicked(); } } + if(side-bar.current-item == 2 && show_netplay_wait_room): NetplayWait { + width: 100%; + height: 100%; + send_chat_message(message) => { + netplay_send_chat_message(message); + } + begin_game => { + netplay_begin_game(); + } + close => { + netplay_close(); + } + } + if(side-bar.current-item == 2 && show_netplay_create_room && !show_netplay_wait_room): NetplayCreate { + width: 100%; + height: 100%; + get_custom_url => { + netplay_get_custom_url(); + } + select_rom(rom_dir) => { + netplay_select_rom(rom_dir); + } + create_session(a, b, c, d, e, f, g) => { + netplay_create_session(a,b,c,d,e,f,g); + } + close => { + netplay_close(); + } + } + if(side-bar.current-item == 2 && show_netplay_join_room && !show_netplay_wait_room): NetplayJoin { + width: 100%; + height: 100%; + refresh_sessions => { + netplay_refresh_sessions(); + } + select_rom(rom_dir) => { + netplay_select_rom(rom_dir); + } + join_session(a, b, c, d, e) => { + netplay_join_session(a,b,c,d,e); + } + close => { + netplay_close(); + } + } if(side-bar.current-item == 3): Cheats { width: 100%; height: 100%; @@ -247,32 +340,62 @@ export component AppWindow inherits Window { source_code_button_clicked(); } } - } -} - -export component ErrorDialog inherits Window { - in-out property text; - title: @tr("Error"); - callback close_clicked; - VerticalBox { - alignment: start; - vertical-stretch: 1; - padding-left: root.safe-area-insets.left; - padding-top: root.safe-area-insets.top; - padding-right: root.safe-area-insets.right; - padding-bottom: root.safe-area-insets.bottom; - Text { - text: text; - } - - HorizontalBox { - alignment: end; - StandardButton { - kind: close; - clicked => { - close_clicked(); + popup := PopupWindow { + close-policy: no-auto-close; + Rectangle { + height:100%; + width: 100%; + background: Palette.background; + VerticalBox { + alignment: center; + HorizontalBox{ + alignment: center; + Text { + text: popup_message; + } + } + if (popup_has_close):HorizontalBox{ + alignment: center; + StandardButton { + kind: ok; + clicked() => { + popup.close(); + } + } + } } } + x: content-area.x; + y: content-area.y; + height: content-area.height; + width: content-area.width; + } + customserverdialog := CustomServerDialog{ + x: content-area.x; + y: content-area.y; + height: content-area.height; + width: content-area.width; } } + public function show_custom_server_dialog() { + customserverdialog.show(); + } + public function show_message(message: string, has_close: bool) { + popup_message = message; + popup_has_close = has_close; + popup.show(); + } + public function close_message() { + popup.close(); + } + public function clear_netplay_data() { + NetplayData.player_name = ""; + NetplayData.game_name = ""; + NetplayData.password = ""; + NetplayData.session_name = ""; + NetplayData.custom_server_url = ""; + NetplayWaitData.chat_text = ""; + NetplayData.pending_session = false; + NetplayData.pending_refresh = false; + } } diff --git a/src/ui/gui/input_profile.slint b/src/ui/gui/input_profile.slint index b6eced8..08b676c 100644 --- a/src/ui/gui/input_profile.slint +++ b/src/ui/gui/input_profile.slint @@ -1,22 +1,20 @@ import { HorizontalBox, VerticalBox, Button, LineEdit, Switch, Slider } from "std-widgets.slint"; +import { Page } from "page.slint"; export global InputProfileData { in-out property dinput; in-out property profile_name; in-out property deadzone; + in-out property show_input_profile; } -export component InputProfileDialog inherits Window { +export component InputProfileDialog inherits Page { title: @tr("Create/Modify Input Profile"); callback profile_creation_button_clicked; in-out property dinput <=> InputProfileData.dinput; in-out property profile_name <=> InputProfileData.profile_name; in-out property deadzone <=> InputProfileData.deadzone; VerticalBox { - padding-left: root.safe-area-insets.left; - padding-top: root.safe-area-insets.top; - padding-right: root.safe-area-insets.right; - padding-bottom: root.safe-area-insets.bottom; alignment: start; HorizontalBox { @@ -25,6 +23,7 @@ export component InputProfileDialog inherits Window { LineEdit { vertical-stretch: 0; placeholder-text: @tr("Enter profile name to create or modify"); + text: InputProfileData.profile_name; preferred-width: 400px; edited(text) => { InputProfileData.profile_name = text; @@ -78,10 +77,13 @@ export component InputProfileDialog inherits Window { profile_creation_button_clicked(); } } - } - - Rectangle { - vertical-stretch: 1; + Button { + vertical-stretch: 0; + text: @tr("Cancel"); + clicked => { + InputProfileData.show_input_profile = false; + } + } } } } diff --git a/src/ui/gui/netplay_create.slint b/src/ui/gui/netplay_create.slint index 3498fbd..7e8887b 100644 --- a/src/ui/gui/netplay_create.slint +++ b/src/ui/gui/netplay_create.slint @@ -1,166 +1,182 @@ -import { LineEdit, HorizontalBox, VerticalBox, Button, ComboBox, ScrollView } from "std-widgets.slint"; +import { Palette, StandardButton, LineEdit, HorizontalBox, VerticalBox, Button, ComboBox, ScrollView } from "std-widgets.slint"; import { NetplayData } from "netplay_page.slint"; +import { SettingsData } from "settings_page.slint"; +import { Page } from "page.slint"; -export component NetplayCreate inherits Window { +export component NetplayCreate inherits Page { title: @tr("Netplay: Create Session"); - preferred-width: 425px; - preferred-height: 475px; - in-out property server_names <=> NetplayData.server_names; - in-out property server_urls <=> NetplayData.server_urls; - in-out property custom_server_url <=> NetplayData.custom_server_url; - in-out property game_name <=> NetplayData.game_name; - in-out property game_hash <=> NetplayData.game_hash; - in-out property game_cheats <=> NetplayData.game_cheats; - in-out property pending_session <=> NetplayData.pending_session; - in-out property rom_path <=> NetplayData.rom_path; - in-out property peer_addr <=> NetplayData.peer_addr; - in-out property rom_dir <=> NetplayData.rom_dir; callback get_custom_url(); callback select_rom(string); callback create_session(string, string, string, string, string, string, string); + callback close; VerticalBox { - vertical-stretch: 1; - padding-left: root.safe-area-insets.left; - padding-top: root.safe-area-insets.top; - padding-right: root.safe-area-insets.right; - padding-bottom: root.safe-area-insets.bottom; - ScrollView { - mouse-drag-pan-enabled: true; - vertical-stretch: 1; + alignment: start; + HorizontalBox { + alignment: center; VerticalBox { alignment: start; + horizontal-stretch: 0; + HorizontalBox { + VerticalBox { + Text { + text: @tr("Session Name:"); + } + + LineEdit { + placeholder-text: @tr("Enter session name"); + text: NetplayData.session_name; + edited(text) => { + NetplayData.session_name = text; + } + } + } + + VerticalBox { + Text { + text: @tr("Password (Optional):"); + } + + LineEdit { + placeholder-text: @tr("Enter session password"); + text: NetplayData.password; + edited(text) => { + NetplayData.password = text; + } + } + } + } + + VerticalBox { + Text { + text: @tr("Player Name:"); + } + + LineEdit { + placeholder-text: @tr("Enter player name"); + text: NetplayData.player_name; + edited(text) => { + NetplayData.player_name = text; + } + } + } + + VerticalBox { + Text { + text: @tr("Server:"); + } + + HorizontalBox { + server := ComboBox { + model: NetplayData.server_names; + selected => { + if (self.current-index >= 0) { + if (self.current-value == "Custom") { + get_custom_url(); + } + } + } + } + } + } + HorizontalBox { alignment: center; - VerticalBox { - alignment: start; - horizontal-stretch: 0; - HorizontalBox { - VerticalBox { - Text { - text: @tr("Session Name:"); - } - - LineEdit { - placeholder-text: @tr("Enter session name"); - edited(text) => { - NetplayData.session_name = text; - } - } - } - - VerticalBox { - Text { - text: @tr("Password (Optional):"); - } - - LineEdit { - placeholder-text: @tr("Enter session password"); - edited(text) => { - NetplayData.password = text; - } - } - } + if NetplayData.game_name == "": Button { + text: @tr("Select ROM"); + clicked => { + select_rom(SettingsData.rom_dir); } - - VerticalBox { - Text { - text: @tr("Player Name:"); - } - - LineEdit { - placeholder-text: @tr("Enter player name"); - edited(text) => { - NetplayData.player_name = text; - } - } + } + if NetplayData.game_name != "": Button { + text: NetplayData.game_name; + clicked => { + select_rom(SettingsData.rom_dir); } + } + } - VerticalBox { - Text { - text: @tr("Server:"); - } + Rectangle { } - HorizontalBox { - server := ComboBox { - model: NetplayData.server_names; - selected => { - if (self.current-index >= 0) { - if (self.current-value == "Custom") { - get_custom_url(); - } - } - } - } + if NetplayData.game_cheats != "": Text { + text: @tr("This game has cheats enabled. Cheats will be synchronized with other players."); + horizontal-alignment: center; + wrap: word-wrap; + } + Rectangle { } + + HorizontalBox { + alignment: center; + Button { + property server_url; + text: @tr("Create Session"); + enabled: NetplayData.session_name != "" && NetplayData.player_name != "" && NetplayData.game_name != "" && !NetplayData.pending_session; + clicked => { + NetplayData.pending_session = true; + if (server.current-value == "Custom") { + server_url = "ws://" + NetplayData.custom_server_url; + } else { + server_url = NetplayData.server_urls[server.current-index]; } + create_session( + server_url, + NetplayData.session_name, + NetplayData.player_name, + NetplayData.game_name, + NetplayData.game_hash, + NetplayData.game_cheats, + NetplayData.password); } - - HorizontalBox { - alignment: center; - if NetplayData.game_name == "": Button { - text: @tr("Select ROM"); - clicked => { - select_rom(NetplayData.rom_dir); - } - } - if NetplayData.game_name != "": Button { - text: NetplayData.game_name; - clicked => { - select_rom(NetplayData.rom_dir); - } - } + } + Button { + text: @tr("Cancel"); + clicked => { + close(); } + } + } + Rectangle { } + } + } + } +} - Rectangle { } - - if NetplayData.game_cheats != "": Text { - text: @tr("This game has cheats enabled. Cheats will be synchronized with other players."); - horizontal-alignment: center; - wrap: word-wrap; - } - Rectangle { } - - HorizontalBox { - alignment: center; - Button { - property server_url; - text: @tr("Create Session"); - enabled: NetplayData.session_name != "" && NetplayData.player_name != "" && NetplayData.game_name != "" && !NetplayData.pending_session; - clicked => { - NetplayData.pending_session = true; - if (server.current-value == "Custom") { - server_url = "ws://" + NetplayData.custom_server_url; - } else { - server_url = NetplayData.server_urls[server.current-index]; - } - create_session( - server_url, - NetplayData.session_name, - NetplayData.player_name, - NetplayData.game_name, - NetplayData.game_hash, - NetplayData.game_cheats, - NetplayData.password); - } - } - } - Rectangle { } +export component CustomServerDialog inherits PopupWindow { + close-policy: no-auto-close; + Rectangle { + height:100%; + width: 100%; + background: Palette.background; + VerticalBox { + alignment: center; + HorizontalBox{ + alignment: center; + Text { + text: @tr("Enter a custom server URL"); + } + } + HorizontalBox { + alignment: center; + vertical-stretch: 0; + LineEdit { + vertical-stretch: 0; + text: NetplayData.custom_server_url; + placeholder-text: "example.com:45000"; + preferred-width: 300px; + edited(text) => { + NetplayData.custom_server_url = text; + } + } + } + HorizontalBox{ + alignment: center; + StandardButton { + kind: ok; + clicked() => { + root.close(); } } } } } } - -export component DispatcherDialog inherits Dialog { - title: @tr("Creating Server"); - VerticalBox { - padding-left: root.safe-area-insets.left; - padding-top: root.safe-area-insets.top; - padding-right: root.safe-area-insets.right; - padding-bottom: root.safe-area-insets.bottom; - Text { - text: @tr("Creating server, please wait...This may take about 30 seconds."); - } - } -} diff --git a/src/ui/gui/netplay_join.slint b/src/ui/gui/netplay_join.slint index 3651f0d..bf59b08 100644 --- a/src/ui/gui/netplay_join.slint +++ b/src/ui/gui/netplay_join.slint @@ -1,162 +1,137 @@ import { VerticalBox, LineEdit, StandardTableView, HorizontalBox, ComboBox, Button, ScrollView } from "std-widgets.slint"; import { NetplayData } from "netplay_page.slint"; +import { SettingsData } from "settings_page.slint"; +import { Page } from "page.slint"; -export component NetplayJoin inherits Window { +export component NetplayJoin inherits Page { title: @tr("Netplay: Join Session"); - in-out property server_names <=> NetplayData.server_names; - in-out property server_urls <=> NetplayData.server_urls; - in-out property custom_server_url <=> NetplayData.custom_server_url; - in-out property sessions <=> NetplayData.sessions; - in-out property current_session <=> NetplayData.current_session; - in-out property room_urls <=> NetplayData.room_urls; - in-out property room_ports <=> NetplayData.room_ports; - in-out property game_name <=> NetplayData.game_name; - in-out property game_hash <=> NetplayData.game_hash; - in-out property game_cheats <=> NetplayData.game_cheats; - in-out property peer_addr <=> NetplayData.peer_addr; - in-out property pending_session <=> NetplayData.pending_session; - in-out property pending_refresh <=> NetplayData.pending_refresh; - in-out property rom_path <=> NetplayData.rom_path; - in-out property rom_dir <=> NetplayData.rom_dir; - callback refresh_session(); + callback refresh_sessions(); callback select_rom(string); callback join_session(string, string, string, string, int); - preferred-width: 700px; - preferred-height: 475px; + callback close; VerticalBox { - vertical-stretch: 1; - padding-left: root.safe-area-insets.left; - padding-top: root.safe-area-insets.top; - padding-right: root.safe-area-insets.right; - padding-bottom: root.safe-area-insets.bottom; - ScrollView { - mouse-drag-pan-enabled: true; - vertical-stretch: 1; + alignment: start; + HorizontalBox { VerticalBox { - alignment: start; - HorizontalBox { - VerticalBox { - Text { - text: @tr("Player Name (required):"); - } + Text { + text: @tr("Player Name (required):"); + } - LineEdit { - placeholder-text: @tr("Enter player name"); - edited(text) => { - NetplayData.player_name = text; - } - } - } - - VerticalBox { - Text { - text: @tr("Custom Server URL (optional):"); - } - - LineEdit { - placeholder-text: "example.com:45000"; - text: NetplayData.custom_server_url; - edited(text) => { - NetplayData.custom_server_url = text; - } - } + LineEdit { + placeholder-text: @tr("Enter player name"); + text: NetplayData.player_name; + edited(text) => { + NetplayData.player_name = text; } } - if NetplayData.pending_refresh: Text { - text: @tr("Refreshing session list, please wait..."); - horizontal-alignment: center; - vertical-alignment: center; + LineEdit { + min-width: 200px; + placeholder-text: @tr("Password (if required)"); + text: NetplayData.password; + edited(text) => { + NetplayData.password = text; + } } - if !NetplayData.pending_refresh && NetplayData.sessions.length > 0: Text { - text: @tr("Click on a session below to select it"); - horizontal-alignment: center; - vertical-alignment: center; + } + + VerticalBox { + Text { + text: @tr("Custom Server URL (optional):"); } - if !NetplayData.pending_refresh && NetplayData.sessions.length == 0: Text { - text: @tr("No sessions available. Please refresh to check again."); - horizontal-alignment: center; - vertical-alignment: center; - } - StandardTableView { - columns: [ - { title: @tr("Server") }, - { title: @tr("Session Name") }, - { title: @tr("Game Name") }, - { title: @tr("Password") }, - { title: @tr("Cheats") } - ]; - rows: NetplayData.sessions; - current-row: NetplayData.current_session; - current-row-changed(current-row) => { - NetplayData.current_session = current-row; + + LineEdit { + placeholder-text: "example.com:45000"; + text: NetplayData.custom_server_url; + edited(text) => { + NetplayData.custom_server_url = text; } } - HorizontalBox { - Rectangle { } - - Button { - enabled: !NetplayData.pending_refresh; - text: @tr("Refresh Session List"); - clicked => { - NetplayData.pending_refresh = true; - NetplayData.current_session = -1; - NetplayData.sessions = []; - NetplayData.room_urls = []; - NetplayData.room_ports = []; - refresh_session(); - } + if NetplayData.game_name == "": Button { + text: @tr("Select ROM"); + clicked => { + select_rom(SettingsData.rom_dir); } } - - HorizontalBox { - VerticalBox { - LineEdit { - horizontal-stretch: 0; - min-width: 200px; - placeholder-text: @tr("Password (if required)"); - edited(text) => { - NetplayData.password = text; - } - } + if NetplayData.game_name != "": Button { + text: NetplayData.game_name; + clicked => { + select_rom(SettingsData.rom_dir); } + } + } + } - Rectangle { - horizontal-stretch: 1; - } + if NetplayData.pending_refresh: Text { + text: @tr("Refreshing session list, please wait..."); + horizontal-alignment: center; + vertical-alignment: center; + } + if !NetplayData.pending_refresh && NetplayData.sessions.length > 0: Text { + text: @tr("Click on a session below to select it"); + horizontal-alignment: center; + vertical-alignment: center; + } + if !NetplayData.pending_refresh && NetplayData.sessions.length == 0: Text { + text: @tr("No sessions available. Please refresh to check again."); + horizontal-alignment: center; + vertical-alignment: center; + } + StandardTableView { + columns: [ + { title: @tr("Server") }, + { title: @tr("Session Name") }, + { title: @tr("Game Name") }, + { title: @tr("Password") }, + { title: @tr("Cheats") } + ]; + rows: NetplayData.sessions; + current-row: NetplayData.current_session; + current-row-changed(current-row) => { + NetplayData.current_session = current-row; + } + } - HorizontalBox { - horizontal-stretch: 0; - alignment: end; - if NetplayData.game_name == "": Button { - text: @tr("Select ROM"); - clicked => { - select_rom(NetplayData.rom_dir); - } - } - if NetplayData.game_name != "": Button { - text: NetplayData.game_name; - clicked => { - select_rom(NetplayData.rom_dir); - } - } + HorizontalBox { + Rectangle { } - Button { - text: @tr("Join Session"); - enabled: NetplayData.player_name != "" && NetplayData.current_session >= 0 && NetplayData.game_name != "" && !NetplayData.pending_session; - clicked => { - NetplayData.pending_session = true; - join_session( - NetplayData.player_name, - NetplayData.game_hash, - NetplayData.password, - NetplayData.room_urls[NetplayData.current_session], - NetplayData.room_ports[NetplayData.current_session]); - } - } - } + Button { + enabled: !NetplayData.pending_refresh; + text: @tr("Refresh Session List"); + clicked => { + NetplayData.pending_refresh = true; + NetplayData.current_session = -1; + NetplayData.sessions = []; + NetplayData.room_urls = []; + NetplayData.room_ports = []; + refresh_sessions(); + } + } + } + + HorizontalBox { + alignment: end; + Rectangle { } + + Button { + text: @tr("Join Session"); + enabled: NetplayData.player_name != "" && NetplayData.current_session >= 0 && NetplayData.game_name != "" && !NetplayData.pending_session; + clicked => { + NetplayData.pending_session = true; + join_session( + NetplayData.player_name, + NetplayData.game_hash, + NetplayData.password, + NetplayData.room_urls[NetplayData.current_session], + NetplayData.room_ports[NetplayData.current_session]); + } + } + Button { + text: @tr("Cancel"); + clicked => { + close(); } } } diff --git a/src/ui/gui/netplay_page.slint b/src/ui/gui/netplay_page.slint index 36ebbe8..5b8f140 100644 --- a/src/ui/gui/netplay_page.slint +++ b/src/ui/gui/netplay_page.slint @@ -3,6 +3,7 @@ import { StandardButton, VerticalBox, HorizontalBox, Button, LineEdit } from "std-widgets.slint"; import { Page } from "page.slint"; +import { State } from "localgame_page.slint"; export global NetplayData { in-out property <[string]> server_names; @@ -21,8 +22,11 @@ export global NetplayData { in-out property <[string]> room_urls; in-out property <[int]> room_ports; in-out property current_session: -1; - in-out property rom_dir; in-out property custom_server_url; + + in-out property show_wait_room; + in-out property show_create_room; + in-out property show_join_room; } export component Netplay inherits Page { @@ -37,6 +41,7 @@ export component Netplay inherits Page { HorizontalBox { alignment: center; Button { + enabled: !State.game_running; text: @tr("Create Session"); clicked => { create_session_button_clicked(); @@ -47,6 +52,7 @@ export component Netplay inherits Page { HorizontalBox { alignment: center; Button { + enabled: !State.game_running; text: @tr("Join Session"); clicked => { join_session_button_clicked(); @@ -76,34 +82,3 @@ export component Netplay inherits Page { } } } - -export component CustomNetplayServer inherits Window { - in-out property custom_server_url <=> NetplayData.custom_server_url; - title: @tr("Custom Netplay Server"); - preferred-width: 400px; - callback ok_clicked(string); - VerticalBox { - alignment: start; - vertical-stretch: 1; - padding-left: root.safe-area-insets.left; - padding-top: root.safe-area-insets.top; - padding-right: root.safe-area-insets.right; - padding-bottom: root.safe-area-insets.bottom; - server_url := LineEdit { - vertical-stretch: 0; - text: NetplayData.custom_server_url; - placeholder-text: "example.com:45000"; - } - - HorizontalBox { - alignment: end; - StandardButton { - kind: ok; - clicked => { - NetplayData.custom_server_url = server_url.text; - ok_clicked(NetplayData.custom_server_url); - } - } - } - } -} diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint index f7be149..defc40c 100644 --- a/src/ui/gui/netplay_wait.slint +++ b/src/ui/gui/netplay_wait.slint @@ -1,5 +1,6 @@ import { VerticalBox, HorizontalBox, TextEdit, LineEdit, Button, GridBox, ScrollView } from "std-widgets.slint"; import { NetplayData } from "netplay_page.slint"; +import { Page } from "page.slint"; export global NetplayWaitData { in-out property motd; @@ -10,127 +11,108 @@ export global NetplayWaitData { in-out property ping; } -export component NetplayWait inherits Window { +export component NetplayWait inherits Page { title: @tr("Netplay: Waiting Room"); - preferred-width: 500px; - preferred-height: 500px; - in-out property players <=> NetplayWaitData.players; - in-out property session_name <=> NetplayData.session_name; - in-out property game_name <=> NetplayData.game_name; - in-out property rom_path <=> NetplayData.rom_path; - in-out property motd <=> NetplayWaitData.motd; - in-out property port <=> NetplayWaitData.port; - in-out property can_start <=> NetplayWaitData.can_start; - in-out property chat_text <=> NetplayWaitData.chat_text; - in-out property ping <=> NetplayWaitData.ping; callback send_chat_message(string); callback begin_game; - + callback close; VerticalBox { - vertical-stretch: 1; - padding-left: root.safe-area-insets.left; - padding-top: root.safe-area-insets.top; - padding-right: root.safe-area-insets.right; - padding-bottom: root.safe-area-insets.bottom; - ScrollView { - mouse-drag-pan-enabled: true; - vertical-stretch: 1; + alignment: start; + HorizontalBox { + alignment: center; VerticalBox { alignment: start; + horizontal-stretch: 0; + Text { + text: @tr("Session Name:") + " " + NetplayData.session_name; + font-size: 15px; + horizontal-alignment: center; + } + + Text { + text: @tr("Game Name:") + " " + NetplayData.game_name; + font-size: 15px; + horizontal-alignment: center; + } + + Text { + text: @tr("Ping:") + " " + NetplayWaitData.ping; + horizontal-alignment: center; + } + HorizontalBox { alignment: center; - VerticalBox { - alignment: start; - horizontal-stretch: 0; - Text { - text: @tr("Session Name:") + " " + NetplayData.session_name; - font-size: 15px; - horizontal-alignment: center; - } + GridBox { + Row { + Text { + text: @tr("Player 1:") + " " + NetplayWaitData.players[0]; + } - Text { - text: @tr("Game Name:") + " " + NetplayData.game_name; - font-size: 15px; - horizontal-alignment: center; - } - - Text { - text: @tr("Ping:") + " " + NetplayWaitData.ping; - horizontal-alignment: center; - } - - HorizontalBox { - alignment: center; - GridBox { - Row { - Text { - text: @tr("Player 1:") + " " + players[0]; - } - - Text { - text: @tr("Player 2:") + " " + players[1]; - } - } - - Row { - Text { - text: @tr("Player 3:") + " " + players[2]; - } - - Text { - text: @tr("Player 4:") + " " + players[3]; - } - } + Text { + text: @tr("Player 2:") + " " + NetplayWaitData.players[1]; } } - TextEdit { - read-only: true; - min-height: 120px; - text: NetplayWaitData.chat_text; - } - - HorizontalBox { - chat_message := LineEdit { - placeholder-text: @tr("Enter chat message"); - key-released(event) => { - if (event.text == Key.Return && chat_message.text != "") { - send_chat_message(chat_message.text); - chat_message.text = ""; - } - accept - } + Row { + Text { + text: @tr("Player 3:") + " " + NetplayWaitData.players[2]; } - Button { - text: @tr("Send Message"); - enabled: chat_message.text != ""; - clicked => { - send_chat_message(chat_message.text); - chat_message.text = ""; - } + Text { + text: @tr("Player 4:") + " " + NetplayWaitData.players[3]; } } + } + } - Text { - text: NetplayWaitData.motd; - horizontal-alignment: center; - wrap: word-wrap; - } + TextEdit { + read-only: true; + min-height: 120px; + text: NetplayWaitData.chat_text; + } - HorizontalBox { - alignment: center; - Button { - text: @tr("Start Game"); - enabled: NetplayWaitData.can_start; - clicked => { - NetplayWaitData.can_start = false; - begin_game(); - } + HorizontalBox { + chat_message := LineEdit { + placeholder-text: @tr("Enter chat message"); + key-released(event) => { + if (event.text == Key.Return && chat_message.text != "") { + send_chat_message(chat_message.text); + chat_message.text = ""; } + accept } - Rectangle { - vertical-stretch: 0; + } + + Button { + text: @tr("Send Message"); + enabled: chat_message.text != ""; + clicked => { + send_chat_message(chat_message.text); + chat_message.text = ""; + } + } + } + + Text { + text: NetplayWaitData.motd; + horizontal-alignment: center; + wrap: word-wrap; + } + + HorizontalBox { + alignment: center; + Button { + text: @tr("Start Game"); + enabled: NetplayWaitData.can_start; + clicked => { + NetplayWaitData.can_start = false; + begin_game(); + } + } + Button { + text: @tr("Cancel"); + clicked => { + close(); } } } diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index e7ed8c2..6ff8143 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -1,9 +1,6 @@ use crate::device; use crate::ui; -use crate::ui::gui::{ - AppWindow, CustomNetplayServer, DispatcherDialog, ErrorDialog, NetplayCreate, NetplayDevice, - NetplayJoin, NetplayWait, open_uri, run_rom, save_settings, -}; +use crate::ui::gui::{AppWindow, NetplayDevice, open_uri, run_rom, save_settings}; use futures::{SinkExt, StreamExt}; use sha2::{Digest, Sha256}; use slint::{ComponentHandle, Model}; @@ -44,70 +41,6 @@ pub struct NetplayMessage { rooms: Option>, } -trait NetplayPages { - fn set_server_names(&self, names: slint::ModelRc); - fn set_server_urls(&self, urls: slint::ModelRc); - fn set_game_name(&self, game_name: slint::SharedString); - fn set_game_hash(&self, game_hash: slint::SharedString); - fn set_game_cheats(&self, game_cheats: slint::SharedString); - fn set_rom_path(&self, rom_path: slint::SharedString); - fn set_peer_addr(&self, peer_addr: slint::SharedString); - fn refresh_sessions(&self) { - // Default implementation does nothing - } -} - -impl NetplayPages for NetplayCreate { - fn set_server_names(&self, names: slint::ModelRc) { - self.set_server_names(names); - } - fn set_server_urls(&self, urls: slint::ModelRc) { - self.set_server_urls(urls); - } - fn set_game_name(&self, game_name: slint::SharedString) { - self.set_game_name(game_name); - } - fn set_game_hash(&self, game_hash: slint::SharedString) { - self.set_game_hash(game_hash); - } - fn set_game_cheats(&self, game_cheats: slint::SharedString) { - self.set_game_cheats(game_cheats); - } - fn set_rom_path(&self, rom_path: slint::SharedString) { - self.set_rom_path(rom_path); - } - fn set_peer_addr(&self, peer_addr: slint::SharedString) { - self.set_peer_addr(peer_addr); - } -} - -impl NetplayPages for NetplayJoin { - fn set_server_names(&self, names: slint::ModelRc) { - self.set_server_names(names); - } - fn set_server_urls(&self, urls: slint::ModelRc) { - self.set_server_urls(urls); - } - fn refresh_sessions(&self) { - self.invoke_refresh_session(); - } - fn set_game_name(&self, game_name: slint::SharedString) { - self.set_game_name(game_name); - } - fn set_game_hash(&self, game_hash: slint::SharedString) { - self.set_game_hash(game_hash); - } - fn set_game_cheats(&self, game_cheats: slint::SharedString) { - self.set_game_cheats(game_cheats); - } - fn set_rom_path(&self, rom_path: slint::SharedString) { - self.set_rom_path(rom_path); - } - fn set_peer_addr(&self, peer_addr: slint::SharedString) { - self.set_peer_addr(peer_addr); - } -} - async fn get_local_servers() -> Vec<(String, String)> { if let Ok(broadcast_sock) = tokio::net::UdpSocket::bind((std::net::Ipv4Addr::UNSPECIFIED, 0)).await @@ -145,7 +78,7 @@ async fn get_local_servers() -> Vec<(String, String)> { } } -fn populate_server_names(weak: slint::Weak) { +fn populate_server_names(weak: slint::Weak, refresh_sessions: bool) { let task = ui::WEB_CLIENT .get("https://dispatch.gopher64.com/getRegions") .header("netplay-id", env!("NETPLAY_ID")) @@ -171,18 +104,17 @@ fn populate_server_names(weak: slin server_urls.push(format!("dispatcher:{server}").into()); } server_names.push("Custom".into()); - handle.refresh_sessions(); - handle.set_server_names(slint::ModelRc::from(std::rc::Rc::new(server_names))); - handle.set_server_urls(slint::ModelRc::from(std::rc::Rc::new(server_urls))); + if refresh_sessions { + handle.invoke_netplay_refresh_sessions(); + } + handle.set_netplay_server_names(slint::ModelRc::from(std::rc::Rc::new(server_names))); + handle.set_netplay_server_urls(slint::ModelRc::from(std::rc::Rc::new(server_urls))); }) .unwrap(); }); } -fn select_rom( - weak: slint::Weak, - rom_dir: slint::SharedString, -) { +fn select_rom(weak: slint::Weak, rom_dir: slint::SharedString) { let select_rom = ui::gui::select_rom(rom_dir); tokio::spawn(async move { if let Some(file) = select_rom.await { @@ -202,26 +134,20 @@ fn select_rom( } weak.upgrade_in_event_loop(move |handle| { - handle.set_game_name(game_name.into()); - handle.set_game_hash(hash.into()); - handle.set_game_cheats(parsed_cheats.into()); - handle.set_rom_path(file.to_str().unwrap().into()); + handle.set_netplay_game_name(game_name.into()); + handle.set_netplay_game_hash(hash.into()); + handle.set_netplay_game_cheats(parsed_cheats.into()); + handle.set_netplay_rom_path(file.to_str().unwrap().into()); }) .unwrap(); } else { weak.upgrade_in_event_loop(move |handle| { - let message_dialog = ErrorDialog::new().unwrap(); - let weak_dialog = message_dialog.as_weak(); - message_dialog.on_close_clicked(move || { - weak_dialog.unwrap().hide().unwrap(); - }); - message_dialog.set_text("Could not read ROM".into()); - message_dialog.show().unwrap(); + handle.invoke_show_message("Could not read ROM".into(), true); - handle.set_game_name(String::new().into()); - handle.set_game_hash(String::new().into()); - handle.set_game_cheats(String::new().into()); - handle.set_rom_path(String::new().into()); + handle.set_netplay_game_name(String::new().into()); + handle.set_netplay_game_hash(String::new().into()); + handle.set_netplay_game_cheats(String::new().into()); + handle.set_netplay_rom_path(String::new().into()); }) .unwrap(); } @@ -229,54 +155,25 @@ fn select_rom( }); } -fn show_custom_url_dialog(weak: slint::Weak, server_url: slint::SharedString) { - let url_dialog = CustomNetplayServer::new().unwrap(); - url_dialog.set_custom_server_url(server_url); - let weak_dialog = url_dialog.as_weak(); - url_dialog.on_ok_clicked(move |server_url| { - weak.upgrade_in_event_loop(move |handle| { - handle.set_custom_server_url(server_url.clone()); - }) - .unwrap(); - weak_dialog.unwrap().hide().unwrap(); - }); - url_dialog.show().unwrap(); -} - -pub fn setup_create_window( - create_window: &NetplayCreate, +fn setup_create_window( + app: &AppWindow, game_settings: ui::GameSettings, - rom_dir: slint::SharedString, - weak_app: slint::Weak, + netplay_write_sender: tokio::sync::broadcast::Sender>, + netplay_read_receiver: tokio::sync::broadcast::Receiver>, + netplay_read_sender: tokio::sync::broadcast::Sender>, + netplay_write_receiver: tokio::sync::broadcast::Receiver>, ) { - let (netplay_read_sender, netplay_read_receiver): ( - tokio::sync::broadcast::Sender, - tokio::sync::broadcast::Receiver, - ) = tokio::sync::broadcast::channel(5); - - let (netplay_write_sender, netplay_write_receiver): ( - tokio::sync::broadcast::Sender>, - tokio::sync::broadcast::Receiver>, - ) = tokio::sync::broadcast::channel(5); - - create_window.set_rom_dir(rom_dir); - populate_server_names(create_window.as_weak()); - let weak = create_window.as_weak(); - create_window.on_get_custom_url(move || { - let weak2 = weak.clone(); + populate_server_names(app.as_weak(), false); + let weak = app.as_weak(); + app.on_netplay_get_custom_url(move || { weak.upgrade_in_event_loop(move |handle| { - show_custom_url_dialog(weak2, handle.get_custom_server_url()); + handle.invoke_show_custom_server_dialog(); }) .unwrap(); }); - let weak = create_window.as_weak(); - create_window.on_select_rom(move |rom_dir| { - select_rom(weak.clone(), rom_dir); - }); - - let weak = create_window.as_weak(); - create_window.on_create_session( + let weak = app.as_weak(); + app.on_netplay_create_session( move |server_url, session_name, player_name, @@ -286,10 +183,13 @@ pub fn setup_create_window( password| { let _ = netplay_write_sender.send(None); // close current websocket if any if server_url.starts_with("dispatcher:") { - let message_dialog = DispatcherDialog::new().unwrap(); - let weak_dialog = message_dialog.as_weak(); - message_dialog.show().unwrap(); - + weak.upgrade_in_event_loop(move |handle| { + handle.invoke_show_message( + "Creating server, please wait...This may take about 30 seconds.".into(), + false, + ); + }) + .unwrap(); let task = ui::WEB_CLIENT .get("https://dispatch.gopher64.com/createServer") .query(&[("region", server_url.strip_prefix("dispatcher:").unwrap())]) @@ -301,14 +201,10 @@ pub fn setup_create_window( let netplay_read_receiver = netplay_read_receiver.resubscribe(); let game_settings = game_settings.clone(); let weak = weak.clone(); - let weak_app = weak_app.clone(); + let weak_app = weak.clone(); tokio::spawn(async move { let response = task.await; - weak_dialog - .upgrade_in_event_loop(move |handle| { - handle.hide().unwrap(); - }) - .unwrap(); + if let Ok(response) = response && let Ok(server) = response .json::>() @@ -334,12 +230,11 @@ pub fn setup_create_window( password.to_string(), game_settings, weak_app, - weak.clone(), ); } else { weak.upgrade_in_event_loop(|handle| { - handle.set_pending_session(false); - show_netplay_error("Server could not be created".to_string()); + handle.set_netplay_pending_session(false); + handle.invoke_show_message("Server could not be created".into(), true); }) .unwrap(); } @@ -362,21 +257,20 @@ pub fn setup_create_window( game_cheats.to_string(), password.to_string(), game_settings.clone(), - weak_app.clone(), weak.clone(), ); } }, ); - create_window.show().unwrap(); + app.set_show_netplay_create_room(true); } -fn manage_websocket( +fn manage_websocket( server_url: String, - netplay_read_sender: tokio::sync::broadcast::Sender, + netplay_read_sender: tokio::sync::broadcast::Sender>, mut netplay_write_receiver: tokio::sync::broadcast::Receiver>, - weak: slint::Weak, + weak: slint::Weak, ) { tokio::spawn(async move { if let Ok(Ok((socket, _response))) = tokio::time::timeout( @@ -389,7 +283,7 @@ fn manage_websocket( tokio_tungstenite::MaybeTlsStream::Plain(stream) => { let addr = stream.peer_addr().unwrap().to_string(); weak.upgrade_in_event_loop(move |handle| { - handle.set_peer_addr(addr.into()); + handle.set_netplay_peer_addr(addr.into()); }) .unwrap(); } @@ -432,17 +326,7 @@ fn manage_websocket( }); } -fn show_netplay_error(message: String) { - let message_dialog = ErrorDialog::new().unwrap(); - let weak_dialog = message_dialog.as_weak(); - message_dialog.on_close_clicked(move || { - weak_dialog.unwrap().hide().unwrap(); - }); - message_dialog.set_text(message.into()); - message_dialog.show().unwrap(); -} - -fn update_sessions(weak: slint::Weak) { +fn update_sessions(weak: slint::Weak) { let task = ui::WEB_CLIENT .get("https://dispatch.gopher64.com/getServers") .header("netplay-id", env!("NETPLAY_ID")) @@ -461,11 +345,11 @@ fn update_sessions(weak: slint::Weak) { weak.upgrade_in_event_loop(move |handle| { let mut servers: std::collections::HashMap = std::collections::HashMap::new(); - let server_names = handle.get_server_names(); - let server_urls = handle.get_server_urls(); + let server_names = handle.get_netplay_server_names(); + let server_urls = handle.get_netplay_server_urls(); for (i, server_name) in server_names.iter().enumerate() { if server_name == "Custom" { - let custom_server_url = handle.get_custom_server_url(); + let custom_server_url = handle.get_netplay_custom_server_url(); if !custom_server_url.is_empty() { servers.insert( "Custom".to_string(), @@ -582,18 +466,20 @@ fn update_sessions(weak: slint::Weak) { slint::VecModel::from(session.to_vec()), ))); } - handle.set_sessions(slint::ModelRc::from(std::rc::Rc::new(sessions_vec))); + handle.set_netplay_sessions(slint::ModelRc::from(std::rc::Rc::new( + sessions_vec, + ))); - handle.set_room_urls(slint::ModelRc::from(std::rc::Rc::new( + handle.set_netplay_room_urls(slint::ModelRc::from(std::rc::Rc::new( slint::VecModel::from(room_urls.to_vec()), ))); - handle.set_room_ports(slint::ModelRc::from(std::rc::Rc::new( + handle.set_netplay_room_ports(slint::ModelRc::from(std::rc::Rc::new( slint::VecModel::from(room_ports.to_vec()), ))); - handle.set_current_session(-1); - handle.set_pending_refresh(false); + handle.set_netplay_current_session(-1); + handle.set_netplay_pending_refresh(false); }) .unwrap(); }); @@ -605,7 +491,7 @@ fn update_sessions(weak: slint::Weak) { #[allow(clippy::too_many_arguments)] fn create_session( netplay_write_sender: tokio::sync::broadcast::Sender>, - mut netplay_read_receiver: tokio::sync::broadcast::Receiver, + mut netplay_read_receiver: tokio::sync::broadcast::Receiver>, session_name: String, player_name: String, game_name: String, @@ -614,7 +500,6 @@ fn create_session( password: String, game_settings: ui::GameSettings, weak_app: slint::Weak, - weak: slint::Weak, ) { tokio::spawn(async move { let now_utc = std::time::SystemTime::now() @@ -673,84 +558,85 @@ fn create_session( ) .await { - Ok(Ok(message)) => { + Ok(Ok(Some(message))) => { if message.message_type == "reply_create_room" && message.accept.unwrap() == 0 { - weak.upgrade_in_event_loop(move |handle| { - let session = message.room.as_ref().unwrap(); - let features_default = "false".to_string(); - let cheats_default = "{}".to_string(); - let overclock = session - .features - .as_ref() - .unwrap() - .get("overclock") - .unwrap_or(&features_default); - let disable_expansion_pak = session - .features - .as_ref() - .unwrap() - .get("disable_expansion_pak") - .unwrap_or(&features_default); - let cheats = session - .features - .as_ref() - .unwrap() - .get("cheats") - .unwrap_or(&cheats_default); - setup_wait_window( - netplay_write_sender, - netplay_read_receiver, - session.room_name.as_ref().unwrap().into(), - session.game_name.as_ref().unwrap().into(), - handle.get_rom_path(), - message.player_name.as_ref().unwrap().into(), - session.port.unwrap(), - ui::GameSettings { - overclock: overclock.parse().unwrap(), - disable_expansion_pak: disable_expansion_pak.parse().unwrap(), - cheats: serde_json::from_str(cheats).unwrap(), - load_savestate_slot: None, - }, - handle.get_peer_addr(), - weak_app, - ); - handle.hide().unwrap(); - }) - .unwrap(); + weak_app + .upgrade_in_event_loop(move |handle| { + let session = message.room.as_ref().unwrap(); + let features_default = "false".to_string(); + let cheats_default = "{}".to_string(); + let overclock = session + .features + .as_ref() + .unwrap() + .get("overclock") + .unwrap_or(&features_default); + let disable_expansion_pak = session + .features + .as_ref() + .unwrap() + .get("disable_expansion_pak") + .unwrap_or(&features_default); + let cheats = session + .features + .as_ref() + .unwrap() + .get("cheats") + .unwrap_or(&cheats_default); + setup_wait_window( + netplay_write_sender, + netplay_read_receiver, + session.room_name.as_ref().unwrap().into(), + session.game_name.as_ref().unwrap().into(), + handle.get_netplay_rom_path(), + message.player_name.as_ref().unwrap().into(), + session.port.unwrap(), + ui::GameSettings { + overclock: overclock.parse().unwrap(), + disable_expansion_pak: disable_expansion_pak.parse().unwrap(), + cheats: serde_json::from_str(cheats).unwrap(), + load_savestate_slot: None, + }, + handle.get_netplay_peer_addr(), + &handle, + ); + }) + .unwrap(); } else { - weak.upgrade_in_event_loop(move |handle| { - handle.set_pending_session(false); - if let Some(message) = message.message { - show_netplay_error(message); - } - }) - .unwrap(); + weak_app + .upgrade_in_event_loop(move |handle| { + handle.set_netplay_pending_session(false); + if let Some(message) = message.message { + handle.invoke_show_message(message.into(), true); + } + }) + .unwrap(); } } + Ok(Ok(None)) => {} Ok(Err(err)) => { panic!("netplay_read_receiver error: {err}"); } Err(_) => { - weak.upgrade_in_event_loop(move |handle| { - handle.set_pending_session(false); - show_netplay_error("Server did not respond".to_string()); - }) - .unwrap(); + weak_app + .upgrade_in_event_loop(move |handle| { + handle.set_netplay_pending_session(false); + handle.invoke_show_message("Server did not respond".into(), true); + }) + .unwrap(); } } }); } -#[allow(clippy::too_many_arguments)] fn join_session( netplay_write_sender: tokio::sync::broadcast::Sender>, - mut netplay_read_receiver: tokio::sync::broadcast::Receiver, + mut netplay_read_receiver: tokio::sync::broadcast::Receiver>, player_name: String, game_hash: String, password: String, room_port: i32, weak_app: slint::Weak, - weak: slint::Weak, ) { tokio::spawn(async move { let now_utc = std::time::SystemTime::now() @@ -798,69 +684,72 @@ fn join_session( ) .await { - Ok(Ok(message)) => { + Ok(Ok(Some(message))) => { if message.message_type == "reply_join_room" && message.accept.unwrap() == 0 { - weak.upgrade_in_event_loop(move |handle| { - let session = message.room.as_ref().unwrap(); - let features_default = "false".to_string(); - let cheats_default = "{}".to_string(); - let overclock = session - .features - .as_ref() - .unwrap() - .get("overclock") - .unwrap_or(&features_default); - let disable_expansion_pak = session - .features - .as_ref() - .unwrap() - .get("disable_expansion_pak") - .unwrap_or(&features_default); - let cheats = session - .features - .as_ref() - .unwrap() - .get("cheats") - .unwrap_or(&cheats_default); - setup_wait_window( - netplay_write_sender, - netplay_read_receiver, - session.room_name.as_ref().unwrap().into(), - session.game_name.as_ref().unwrap().into(), - handle.get_rom_path(), - message.player_name.as_ref().unwrap().into(), - session.port.unwrap(), - ui::GameSettings { - overclock: overclock.parse().unwrap(), - disable_expansion_pak: disable_expansion_pak.parse().unwrap(), - cheats: serde_json::from_str(cheats).unwrap(), - load_savestate_slot: None, - }, - handle.get_peer_addr(), - weak_app, - ); - handle.hide().unwrap(); - }) - .unwrap(); + weak_app + .upgrade_in_event_loop(move |handle| { + let session = message.room.as_ref().unwrap(); + let features_default = "false".to_string(); + let cheats_default = "{}".to_string(); + let overclock = session + .features + .as_ref() + .unwrap() + .get("overclock") + .unwrap_or(&features_default); + let disable_expansion_pak = session + .features + .as_ref() + .unwrap() + .get("disable_expansion_pak") + .unwrap_or(&features_default); + let cheats = session + .features + .as_ref() + .unwrap() + .get("cheats") + .unwrap_or(&cheats_default); + setup_wait_window( + netplay_write_sender, + netplay_read_receiver, + session.room_name.as_ref().unwrap().into(), + session.game_name.as_ref().unwrap().into(), + handle.get_netplay_rom_path(), + message.player_name.as_ref().unwrap().into(), + session.port.unwrap(), + ui::GameSettings { + overclock: overclock.parse().unwrap(), + disable_expansion_pak: disable_expansion_pak.parse().unwrap(), + cheats: serde_json::from_str(cheats).unwrap(), + load_savestate_slot: None, + }, + handle.get_netplay_peer_addr(), + &handle, + ); + }) + .unwrap(); } else { - weak.upgrade_in_event_loop(move |handle| { - handle.set_pending_session(false); - if let Some(message) = message.message { - show_netplay_error(message); - } - }) - .unwrap(); + weak_app + .upgrade_in_event_loop(move |handle| { + handle.set_netplay_pending_session(false); + if let Some(message) = message.message { + handle.invoke_show_message(message.into(), true); + } + }) + .unwrap(); } } + Ok(Ok(None)) => {} Ok(Err(err)) => { panic!("netplay_read_receiver error: {err}"); } Err(_) => { - weak.upgrade_in_event_loop(move |handle| { - handle.set_pending_session(false); - show_netplay_error("Server did not respond".to_string()); - }) - .unwrap(); + weak_app + .upgrade_in_event_loop(move |handle| { + handle.set_netplay_pending_session(false); + handle.invoke_show_message("Server did not respond".into(), true); + }) + .unwrap(); } } }); @@ -869,7 +758,7 @@ fn join_session( #[allow(clippy::too_many_arguments)] fn setup_wait_window( netplay_write_sender: tokio::sync::broadcast::Sender>, - mut netplay_read_receiver: tokio::sync::broadcast::Receiver, + mut netplay_read_receiver: tokio::sync::broadcast::Receiver>, session_name: slint::SharedString, game_name: slint::SharedString, rom_path: slint::SharedString, @@ -877,21 +766,20 @@ fn setup_wait_window( port: i32, game_settings: ui::GameSettings, peer_addr: slint::SharedString, - weak_app: slint::Weak, + app: &AppWindow, ) { let local_player = player_name.clone(); let mut socket_addr: std::net::SocketAddr = peer_addr.to_string().parse().unwrap(); socket_addr.set_port(port as u16); - let wait = NetplayWait::new().unwrap(); - wait.set_session_name(session_name); - wait.set_game_name(game_name); - wait.set_rom_path(rom_path); - wait.set_port(port); - wait.set_ping("Unknown".into()); + app.set_netplay_session_name(session_name); + app.set_netplay_game_name(game_name); + app.set_netplay_rom_path(rom_path); + app.set_netplay_port(port); + app.set_netplay_ping("Unknown".into()); let sender = netplay_write_sender.clone(); - wait.on_send_chat_message(move |message| { + app.on_netplay_send_chat_message(move |message| { let send_chat = NetplayMessage { message_type: "request_chat_message".to_string(), player_name: Some(player_name.to_string()), @@ -919,7 +807,7 @@ fn setup_wait_window( }); let sender = netplay_write_sender.clone(); - wait.on_begin_game(move || { + app.on_netplay_begin_game(move || { let begin_game = NetplayMessage { message_type: "request_begin_game".to_string(), player_name: None, @@ -946,12 +834,6 @@ fn setup_wait_window( sender.send(Some(begin_game)).unwrap(); }); - let sender = netplay_write_sender.clone(); - wait.window().on_close_requested(move || { - let _ = sender.send(None); // close current websocket if any - slint::CloseRequestResponse::HideWindow - }); - let motd_message = NetplayMessage { message_type: "request_motd".to_string(), player_name: None, @@ -988,17 +870,18 @@ fn setup_wait_window( .send(Some(ping_message.clone())) .unwrap(); - let weak = wait.as_weak(); + let weak_app = app.as_weak(); tokio::spawn(async move { loop { match netplay_read_receiver.recv().await { - Ok(response) => match response.message_type.as_str() { + Ok(Some(response)) => match response.message_type.as_str() { "reply_ping" => { if let Some(message) = response.message { - weak.upgrade_in_event_loop(move |handle| { - handle.set_ping((message + " ms").into()); - }) - .unwrap(); + weak_app + .upgrade_in_event_loop(move |handle| { + handle.set_netplay_ping((message + " ms").into()); + }) + .unwrap(); } let ping_message = ping_message.clone(); let ping_writer = netplay_write_sender.clone(); @@ -1033,101 +916,111 @@ fn setup_wait_window( }; netplay_write_sender.send(Some(request_players)).unwrap(); - weak.upgrade_in_event_loop(move |handle| { - #[allow(clippy::regex_creation_in_loops)] - let re = regex::Regex::new(r"<[^>]*>").unwrap(); - let motd = re - .replace_all(response.message.unwrap().as_str(), "") - .into_owned(); - handle.set_motd(motd.into()); - }) - .unwrap(); + weak_app + .upgrade_in_event_loop(move |handle| { + #[allow(clippy::regex_creation_in_loops)] + let re = regex::Regex::new(r"<[^>]*>").unwrap(); + let motd = re + .replace_all(response.message.unwrap().as_str(), "") + .into_owned(); + handle.set_netplay_motd(motd.into()); + }) + .unwrap(); } "reply_players" => { let local_player = local_player.clone(); - weak.upgrade_in_event_loop(move |handle| { - if let Some(player_names) = response.player_names { - if local_player == player_names[0] { - handle.set_can_start(true); - } else { - handle.set_can_start(false); - } + weak_app + .upgrade_in_event_loop(move |handle| { + if let Some(player_names) = response.player_names { + if local_player == player_names[0] { + handle.set_netplay_can_start(true); + } else { + handle.set_netplay_can_start(false); + } - handle.set_players(slint::ModelRc::from(std::rc::Rc::new( - slint::VecModel::from( - player_names - .iter() - .map(|x| x.into()) - .collect::>(), - ), - ))); - } - }) - .unwrap(); + handle.set_netplay_players(slint::ModelRc::from( + std::rc::Rc::new(slint::VecModel::from( + player_names + .iter() + .map(|x| x.into()) + .collect::>(), + )), + )); + } + }) + .unwrap(); } "reply_chat_message" => { - weak.upgrade_in_event_loop(move |handle| { - let mut chat_text = handle.get_chat_text(); - chat_text.push_str(&format!("{}\n", response.message.unwrap())); - handle.set_chat_text(chat_text); - }) - .unwrap(); + weak_app + .upgrade_in_event_loop(move |handle| { + let mut chat_text = handle.get_netplay_chat_text(); + chat_text.push_str(&format!("{}\n", response.message.unwrap())); + handle.set_netplay_chat_text(chat_text); + }) + .unwrap(); } "reply_begin_game" => { if response.accept.unwrap() == 0 { - weak.upgrade_in_event_loop(move |handle| { - let _ = netplay_write_sender.send(None); + let weak_app2 = weak_app.clone(); + weak_app + .upgrade_in_event_loop(move |handle| { + let _ = netplay_write_sender.send(None); - let mut player_number = 4; - let players = handle.get_players(); - for (i, player) in players.iter().enumerate() { - if player == local_player { - player_number = i; + let mut player_number = 4; + let players = handle.get_netplay_players(); + for (i, player) in players.iter().enumerate() { + if player == local_player { + player_number = i; + } + } + if player_number > 3 { + panic!("Could not determine player number"); } - } - if player_number > 3 { - panic!("Could not determine player number"); - } - run_rom( - handle.get_rom_path().as_str().into(), - ui::GameSettings { - overclock: game_settings.overclock, - disable_expansion_pak: game_settings.disable_expansion_pak, - cheats: game_settings.cheats, - load_savestate_slot: None, - }, - Some(NetplayDevice { - peer_addr: socket_addr, - player_number: player_number as u8, - }), - weak_app, - ); - handle.hide().unwrap(); - }) - .unwrap(); + run_rom( + handle.get_netplay_rom_path().as_str().into(), + ui::GameSettings { + overclock: game_settings.overclock, + disable_expansion_pak: game_settings + .disable_expansion_pak, + cheats: game_settings.cheats, + load_savestate_slot: None, + }, + Some(NetplayDevice { + peer_addr: socket_addr, + player_number: player_number as u8, + }), + weak_app2, + ); + handle.invoke_netplay_close(); + }) + .unwrap(); return; } else { let local_player = local_player.clone(); - weak.upgrade_in_event_loop(move |handle| { - if let Some(p0) = handle.get_players().row_data(0) { - if p0 == local_player { - handle.set_can_start(true); - } else { - handle.set_can_start(false); + weak_app + .upgrade_in_event_loop(move |handle| { + if let Some(p0) = handle.get_netplay_players().row_data(0) { + if p0 == local_player { + handle.set_netplay_can_start(true); + } else { + handle.set_netplay_can_start(false); + } } - } - if let Some(message) = response.message { - show_netplay_error(message); - } - }) - .unwrap(); + if let Some(message) = response.message { + handle.invoke_show_message(message.into(), true); + } + }) + .unwrap(); } } _ => { eprintln!("Unknown netplay message type: {}", response.message_type); } }, + Ok(None) => { + break; + } Err(tokio::sync::broadcast::error::RecvError::Lagged(_)) => { panic!("netplay_read_receiver lagged"); } @@ -1137,45 +1030,28 @@ fn setup_wait_window( } } }); - - wait.show().unwrap(); + app.set_show_netplay_wait_room(true); + app.set_show_netplay_create_room(false); + app.set_show_netplay_join_room(false); + app.invoke_close_message(); } -pub fn setup_join_window( - join_window: &NetplayJoin, - rom_dir: slint::SharedString, - weak_app: slint::Weak, +fn setup_join_window( + app: &AppWindow, + netplay_write_sender: tokio::sync::broadcast::Sender>, + netplay_read_receiver: tokio::sync::broadcast::Receiver>, + netplay_read_sender: tokio::sync::broadcast::Sender>, + netplay_write_receiver: tokio::sync::broadcast::Receiver>, ) { - let (netplay_read_sender, netplay_read_receiver): ( - tokio::sync::broadcast::Sender, - tokio::sync::broadcast::Receiver, - ) = tokio::sync::broadcast::channel(5); + app.set_netplay_pending_refresh(true); + populate_server_names(app.as_weak(), true); - let (netplay_write_sender, netplay_write_receiver): ( - tokio::sync::broadcast::Sender>, - tokio::sync::broadcast::Receiver>, - ) = tokio::sync::broadcast::channel(5); - - join_window.set_pending_refresh(true); - join_window.set_rom_dir(rom_dir); - populate_server_names(join_window.as_weak()); - - let weak = join_window.as_weak(); - join_window.on_select_rom(move |rom_dir| { - select_rom(weak.clone(), rom_dir); - }); - - let sender = netplay_write_sender.clone(); - join_window.window().on_close_requested(move || { - let _ = sender.send(None); // close current websocket if any - slint::CloseRequestResponse::HideWindow - }); - let weak = join_window.as_weak(); - join_window.on_refresh_session(move || { + let weak = app.as_weak(); + app.on_netplay_refresh_sessions(move || { update_sessions(weak.clone()); }); - let weak = join_window.as_weak(); - join_window.on_join_session( + let weak = app.as_weak(); + app.on_netplay_join_session( move |player_name, game_hash, password, room_url, room_port| { let _ = netplay_write_sender.send(None); // close current websocket if any manage_websocket( @@ -1192,52 +1068,99 @@ pub fn setup_join_window( game_hash.to_string(), password.to_string(), room_port, - weak_app.clone(), weak.clone(), ); }, ); - join_window.show().unwrap(); + app.set_show_netplay_join_room(true); } pub fn netplay_window(app: &AppWindow) { - let weak_create = app.as_weak(); + let (netplay_read_sender, netplay_read_receiver): ( + tokio::sync::broadcast::Sender>, + tokio::sync::broadcast::Receiver>, + ) = tokio::sync::broadcast::channel(5); + + let (netplay_write_sender, netplay_write_receiver): ( + tokio::sync::broadcast::Sender>, + tokio::sync::broadcast::Receiver>, + ) = tokio::sync::broadcast::channel(5); + let weak_app = app.as_weak(); + let write_sender_create = netplay_write_sender.clone(); + let read_receiver_create = netplay_read_receiver.resubscribe(); + let read_sender_create = netplay_read_sender.clone(); + let write_receiver_create = netplay_write_receiver.resubscribe(); app.on_create_session_button_clicked(move || { - let weak_app = weak_app.clone(); - weak_create + let write_sender = write_sender_create.clone(); + let read_receiver = read_receiver_create.resubscribe(); + let read_sender = read_sender_create.clone(); + let write_receiver = write_receiver_create.resubscribe(); + weak_app .upgrade_in_event_loop(move |handle| { - let create_window = NetplayCreate::new().unwrap(); save_settings(&handle); setup_create_window( - &create_window, + &handle, ui::GameSettings { overclock: handle.get_overclock_n64_cpu(), disable_expansion_pak: handle.get_disable_expansion_pak(), cheats: std::collections::HashMap::new(), // not used here load_savestate_slot: None, }, - handle.get_rom_dir(), - weak_app, + write_sender, + read_receiver, + read_sender, + write_receiver, ); }) .unwrap(); }); - let weak_join = app.as_weak(); let weak_app = app.as_weak(); + let write_sender_join = netplay_write_sender.clone(); + let read_sender_join = netplay_read_sender.clone(); app.on_join_session_button_clicked(move || { - let weak_app = weak_app.clone(); - weak_join + let write_sender = write_sender_join.clone(); + let read_receiver = netplay_read_receiver.resubscribe(); + let read_sender = read_sender_join.clone(); + let write_receiver = netplay_write_receiver.resubscribe(); + weak_app .upgrade_in_event_loop(move |handle| { - let join_window = NetplayJoin::new().unwrap(); save_settings(&handle); - setup_join_window(&join_window, handle.get_rom_dir(), weak_app); + setup_join_window( + &handle, + write_sender, + read_receiver, + read_sender, + write_receiver, + ); }) .unwrap(); }); + let weak_app = app.as_weak(); + app.on_netplay_select_rom(move |rom_dir| { + select_rom(weak_app.clone(), rom_dir); + }); + + let weak_app = app.as_weak(); + let write_sender = netplay_write_sender.clone(); + let read_sender = netplay_read_sender.clone(); + app.on_netplay_close(move || { + weak_app + .upgrade_in_event_loop(move |handle| { + handle.set_show_netplay_wait_room(false); + handle.set_show_netplay_create_room(false); + handle.set_show_netplay_join_room(false); + handle.invoke_clear_netplay_data(); + handle.invoke_close_message(); + }) + .unwrap(); + let _ = write_sender.send(None); // close current websocket if any + let _ = read_sender.send(None); // close current receiver if any + }); + app.on_netplay_discord_button_clicked(move || { open_uri("https://discord.gg/JyW6ZgBUyS"); }); From 7599f71c1711d347abfed23f5c4a0092784dfddd Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 25 May 2026 19:07:56 +0200 Subject: [PATCH 0935/1117] add sdl for android --- Cargo.lock | 1 + Cargo.toml | 1 + android-project/.gitignore | 2 ++ .../app/src/main/AndroidManifest.xml | 1 + .../github/gopher64/gopher64/N64Activity.kt | 5 ++++ build.rs | 25 +++++++++++++++++++ src/ui/android.rs | 22 ++++++++++++++++ src/ui/gui.rs | 8 ++++++ 8 files changed, 65 insertions(+) create mode 100644 android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt diff --git a/Cargo.lock b/Cargo.lock index c6e0d9e..2af93b0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2233,6 +2233,7 @@ dependencies = [ "reqwest", "rfd", "sdl3-image-sys", + "sdl3-src", "sdl3-sys", "sdl3-ttf-sys", "semver", diff --git a/Cargo.toml b/Cargo.toml index a11ed3c..13b2443 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -51,6 +51,7 @@ jni = "0.22" [build-dependencies] winresource = "0.1" bindgen = "0.72" +sdl3-src = "3.4" slint-build = { version = "1.12", optional = true } cc = { version = "1.2", features = ["parallel"] } diff --git a/android-project/.gitignore b/android-project/.gitignore index cca6ed6..6edf443 100644 --- a/android-project/.gitignore +++ b/android-project/.gitignore @@ -34,3 +34,5 @@ google-services.json # Android Profiling *.hprof + +app/src/main/java/org/libsdl/app/ diff --git a/android-project/app/src/main/AndroidManifest.xml b/android-project/app/src/main/AndroidManifest.xml index e3061a1..292d668 100644 --- a/android-project/app/src/main/AndroidManifest.xml +++ b/android-project/app/src/main/AndroidManifest.xml @@ -18,6 +18,7 @@ + \ No newline at end of file diff --git a/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt b/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt new file mode 100644 index 0000000..080251b --- /dev/null +++ b/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt @@ -0,0 +1,5 @@ +package io.github.gopher64.gopher64 + +import org.libsdl.app.SDLActivity + +class N64Activity : SDLActivity() {} diff --git a/build.rs b/build.rs index 8b0138f..fba6984 100644 --- a/build.rs +++ b/build.rs @@ -306,4 +306,29 @@ fn main() { { println!("cargo:rustc-cfg=ra_hardcore_enabled"); } + if os == "android" { + copy_dir_all( + std::path::Path::new(sdl3_src::SOURCE_DIR) + .join("android-project/app/src/main/java/org/libsdl/app"), + "android-project/app/src/main/java/org/libsdl/app", + ) + .unwrap(); + } +} + +fn copy_dir_all( + src: impl AsRef, + dst: impl AsRef, +) -> std::io::Result<()> { + std::fs::create_dir_all(&dst)?; + for entry in std::fs::read_dir(src)? { + let entry = entry?; + let ty = entry.file_type()?; + if ty.is_dir() { + copy_dir_all(entry.path(), dst.as_ref().join(entry.file_name()))?; + } else { + std::fs::copy(entry.path(), dst.as_ref().join(entry.file_name()))?; + } + } + Ok(()) } diff --git a/src/ui/android.rs b/src/ui/android.rs index a74a466..4c49dc2 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -127,6 +127,28 @@ pub struct ControllerInfo { pub descriptor: String, } +pub fn configure_input_profile( + _profile_name: slint::SharedString, + _dinput: bool, + _deadzone: i32, + _weak: slint::Weak, +) { +} + +pub fn run_rom( + _file_path: std::path::PathBuf, + _game_settings: ui::GameSettings, + netplay: Option, + _weak: slint::Weak, +) { + if let Some(netplay) = netplay { + println!( + "Netplay peer addr: {} player number: {}", + netplay.peer_addr, netplay.player_number + ); + } +} + fn get_vm() -> Option { if let Ok(app) = ANDROID_APP.lock() && let Some(app) = app.as_ref() diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 347b8dc..2ab734c 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -353,6 +353,10 @@ fn controller_window(app: &AppWindow, config: &ui::config::Config) { let deadzone = handle.get_input_deadzone(); handle.set_show_input_profile(false); + #[cfg(target_os = "android")] + ui::android::configure_input_profile(profile_name, dinput, deadzone, weak_app2); + + #[cfg(not(target_os = "android"))] tokio::spawn(async move { let cli_path = std::env::current_exe() .unwrap() @@ -538,6 +542,10 @@ pub fn run_rom( netplay: Option, weak: slint::Weak, ) { + #[cfg(target_os = "android")] + ui::android::run_rom(file_path, game_settings, netplay, weak); + + #[cfg(not(target_os = "android"))] tokio::spawn(async move { weak.upgrade_in_event_loop(move |handle| handle.set_game_running(true)) .unwrap(); From 6f00e630e0b392c46b3b5507c429d3f913e6fcb1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 25 May 2026 20:37:12 +0200 Subject: [PATCH 0936/1117] fix order in activity result (#951) * fix order in activity result * more --- src/ui/android.rs | 62 ++++++++++++++++++++++------------------------- src/ui/gui.rs | 8 +++--- 2 files changed, 34 insertions(+), 36 deletions(-) diff --git a/src/ui/android.rs b/src/ui/android.rs index 4c49dc2..0b77497 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -127,19 +127,12 @@ pub struct ControllerInfo { pub descriptor: String, } -pub fn configure_input_profile( - _profile_name: slint::SharedString, - _dinput: bool, - _deadzone: i32, - _weak: slint::Weak, -) { -} +pub fn configure_input_profile(_profile_name: slint::SharedString, _dinput: bool, _deadzone: i32) {} pub fn run_rom( _file_path: std::path::PathBuf, _game_settings: ui::GameSettings, netplay: Option, - _weak: slint::Weak, ) { if let Some(netplay) = netplay { println!( @@ -396,37 +389,40 @@ pub extern "system" fn Java_io_github_gopher64_gopher64_SlintActivity_nativeOnAc intent_data: JObject<'caller>, ) { let outcome = unowned_env.with_env(|env| -> Result<_, jni::errors::Error> { - if let Ok(mut tx_lock) = SELECT_ROM_TX.lock() - && let Some(tx) = tx_lock.take() - && result_code == AndroidActivity::RESULT_OK(env)? - && !intent_data.is_null() - { - let result_intent = unsafe { env.as_cast_raw::(&intent_data)? }; + if result_code == AndroidActivity::RESULT_OK(env)? && !intent_data.is_null() { match request_code { REQUEST_SELECT_ROM => { - let uri = result_intent.as_ref().get_data(env)?; - if uri.is_null() { - return Ok(()); - } - - if let Ok(app) = ANDROID_APP.lock() - && let Some(app) = app.as_ref() + if let Ok(mut tx_lock) = SELECT_ROM_TX.lock() + && let Some(tx) = tx_lock.take() { - let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; - let activity = unsafe { - env.as_cast_raw::>(&raw_activity_global)? - }; + let result_intent = + unsafe { env.as_cast_raw::(&intent_data)? }; - let content_resolver = activity.as_ref().get_content_resolver(env)?; - let take_flags = AndroidIntent::FLAG_GRANT_READ_URI_PERMISSION(env)?; - content_resolver.take_persistable_uri_permission(env, &uri, take_flags)?; + let uri = result_intent.as_ref().get_data(env)?; + if uri.is_null() { + return Ok(()); + } - let path = uri.to_string(env)?; + if let Ok(app) = ANDROID_APP.lock() + && let Some(app) = app.as_ref() + { + let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; + let activity = unsafe { + env.as_cast_raw::>(&raw_activity_global)? + }; - let _ = tx.send(Some(std::path::PathBuf::from(path.to_string()))); - } else { - eprintln!("Android app not initialized"); - return Ok(()); + let content_resolver = activity.as_ref().get_content_resolver(env)?; + let take_flags = AndroidIntent::FLAG_GRANT_READ_URI_PERMISSION(env)?; + content_resolver + .take_persistable_uri_permission(env, &uri, take_flags)?; + + let path = uri.to_string(env)?; + + let _ = tx.send(Some(std::path::PathBuf::from(path.to_string()))); + } else { + eprintln!("Android app not initialized"); + return Ok(()); + } } } _ => {} diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 2ab734c..a1fedd1 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -345,6 +345,7 @@ fn controller_window(app: &AppWindow, config: &ui::config::Config) { }); let weak_app = app.as_weak(); app.on_input_profile_creation_button_clicked(move || { + #[cfg(not(target_os = "android"))] let weak_app2 = weak_app.clone(); weak_app .upgrade_in_event_loop(move |handle| { @@ -354,7 +355,7 @@ fn controller_window(app: &AppWindow, config: &ui::config::Config) { handle.set_show_input_profile(false); #[cfg(target_os = "android")] - ui::android::configure_input_profile(profile_name, dinput, deadzone, weak_app2); + ui::android::configure_input_profile(profile_name, dinput, deadzone); #[cfg(not(target_os = "android"))] tokio::spawn(async move { @@ -540,10 +541,11 @@ pub fn run_rom( file_path: std::path::PathBuf, game_settings: ui::GameSettings, netplay: Option, - weak: slint::Weak, + #[cfg(target_os = "android")] _weak: slint::Weak, + #[cfg(not(target_os = "android"))] weak: slint::Weak, ) { #[cfg(target_os = "android")] - ui::android::run_rom(file_path, game_settings, netplay, weak); + ui::android::run_rom(file_path, game_settings, netplay); #[cfg(not(target_os = "android"))] tokio::spawn(async move { From 60cbf59ddfe6486689e79415f680afc24e971755 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 25 May 2026 21:35:04 +0200 Subject: [PATCH 0937/1117] add intent for input profile (#952) * add intent for input profile * more * more --- src/lib.rs | 8 ++--- src/ui/android.rs | 78 ++++++++++++++++++++++++++++++++++++++++++----- src/ui/gui.rs | 2 +- 3 files changed, 75 insertions(+), 13 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index cbd2070..a519a13 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -316,11 +316,9 @@ async fn android_main(app: slint::android::AndroidApp) { if let Ok(weak_app_window) = android::WEAK_SLINT_WINDOW.lock() && let Some(weak_app_window) = weak_app_window.as_ref() { - { - weak_app_window - .upgrade_in_event_loop(move |handle| ui::gui::save_settings(&handle)) - .unwrap(); - } + weak_app_window + .upgrade_in_event_loop(move |handle| ui::gui::save_settings(&handle)) + .unwrap(); } } _ => {} diff --git a/src/ui/android.rs b/src/ui/android.rs index 0b77497..e7bcc64 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -5,7 +5,8 @@ use jni::sys::jint; use jni::{Env, EnvUnowned, JavaVM, bind_java_type}; use std::os::fd::FromRawFd; -pub const REQUEST_SELECT_ROM: jint = 1; +const REQUEST_SELECT_ROM: jint = 1; +const CONFIGURE_INPUT_PROFILE: jint = 2; pub static ANDROID_APP: std::sync::Mutex> = std::sync::Mutex::new(None); @@ -60,14 +61,27 @@ bind_java_type! { static FLAG_GRANT_READ_URI_PERMISSION: jint, }, constructors { - fn new(action: JString), + fn new(), + fn with_action(action: JString), }, methods { fn set_data(uri: AndroidUri) -> AndroidIntent, fn set_type(r#type: JString) -> AndroidIntent, fn add_category(category: JString) -> AndroidIntent, fn get_data() -> AndroidUri, - fn put_extra(extra: JString, value: JString) -> AndroidIntent, + fn put_extra_string { + sig = (extra: JString, value: JString) -> AndroidIntent, + name = "putExtra", + }, + fn put_extra_boolean { + sig = (extra: JString, value: jboolean) -> AndroidIntent, + name = "putExtra", + }, + fn put_extra_int { + sig = (extra: JString, value: jint) -> AndroidIntent, + name = "putExtra", + }, + fn set_class_name(package_name: JString, class_name: JString) -> AndroidIntent, }, } @@ -127,7 +141,49 @@ pub struct ControllerInfo { pub descriptor: String, } -pub fn configure_input_profile(_profile_name: slint::SharedString, _dinput: bool, _deadzone: i32) {} +pub fn configure_input_profile(profile_name: slint::SharedString, dinput: bool, deadzone: i32) { + if let Some(vm) = get_vm() { + if let Err(err) = vm.attach_current_thread(|env| { + start_n64_activity_on_jvm(env, profile_name.to_string(), dinput, deadzone) + }) { + eprintln!("JNI error while starting N64Activity: {err:?}"); + } + } +} + +fn start_n64_activity_on_jvm( + env: &mut Env<'_>, + profile_name: String, + dinput: bool, + deadzone: i32, +) -> jni::errors::Result<()> { + if let Ok(app) = ANDROID_APP.lock() + && let Some(app) = app.as_ref() + { + let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; + let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; + + let package_name = JString::from_str(env, "io.github.gopher64.gopher64")?; + let class_name = JString::from_str(env, "io.github.gopher64.gopher64.N64Activity")?; + + let profile_name_key = JString::from_str(env, "profile_name")?; + let profile_name_value = JString::from_str(env, profile_name)?; + let dinput_key = JString::from_str(env, "dinput")?; + let deadzone_key = JString::from_str(env, "deadzone")?; + let intent = AndroidIntent::new(env)? + .set_class_name(env, &package_name, &class_name)? + .put_extra_string(env, &profile_name_key, &profile_name_value)? + .put_extra_boolean(env, &dinput_key, dinput)? + .put_extra_int(env, &deadzone_key, deadzone)?; + + activity + .as_ref() + .start_activity_for_result(env, &intent, CONFIGURE_INPUT_PROFILE)?; + Ok(()) + } else { + Err(jni::errors::Error::UninitializedJavaVM) + } +} pub fn run_rom( _file_path: std::path::PathBuf, @@ -233,7 +289,7 @@ fn open_uri_on_jvm(env: &mut Env<'_>, path: &str) -> jni::errors::Result<()> { let uri = AndroidUri::parse(env, &uri_string)?; let action_view = AndroidIntent::ACTION_VIEW(env)?; - let intent = AndroidIntent::new(env, &action_view)?.set_data(env, &uri)?; + let intent = AndroidIntent::with_action(env, &action_view)?.set_data(env, &uri)?; activity.as_ref().start_activity(env, &intent)?; Ok(()) @@ -282,13 +338,13 @@ fn select_rom_on_jvm(env: &mut Env<'_>, rom_dir: String) -> jni::errors::Result< let action = AndroidIntent::ACTION_OPEN_DOCUMENT(env)?; let category = AndroidIntent::CATEGORY_OPENABLE(env)?; let mime_type = JString::from_str(env, "*/*")?; - let mut intent = AndroidIntent::new(env, &action)? + let mut intent = AndroidIntent::with_action(env, &action)? .set_type(env, &mime_type)? .add_category(env, &category)?; if !rom_dir.is_empty() { let start_dir = JString::from_str(env, rom_dir)?; let extra_initial_uri = DocumentsContract::EXTRA_INITIAL_URI(env)?; - intent = intent.put_extra(env, &extra_initial_uri, &start_dir)?; + intent = intent.put_extra_string(env, &extra_initial_uri, &start_dir)?; } activity.start_activity_for_result(env, &intent, REQUEST_SELECT_ROM)?; @@ -425,6 +481,14 @@ pub extern "system" fn Java_io_github_gopher64_gopher64_SlintActivity_nativeOnAc } } } + CONFIGURE_INPUT_PROFILE => { + if let Ok(weak_app_window) = WEAK_SLINT_WINDOW.lock() + && let Some(weak_app_window) = weak_app_window.as_ref() + { + let config = ui::config::Config::new(); + ui::gui::update_input_profiles(&weak_app_window, &config); + } + } _ => {} } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index a1fedd1..55d2d43 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -189,7 +189,7 @@ fn settings_window(app: &AppWindow, config: &ui::config::Config) { } } -fn update_input_profiles(weak: &slint::Weak, config: &ui::config::Config) { +pub fn update_input_profiles(weak: &slint::Weak, config: &ui::config::Config) { let profiles = input_profiles(config); let config_bindings = config.input.input_profile_binding.clone(); weak.upgrade_in_event_loop(move |handle| { From 9d7b13d4c9fe87a2e3dbbf7372e5ce6c2b91e051 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 26 May 2026 09:39:51 +0200 Subject: [PATCH 0938/1117] include sdl libs for android (#954) --- Cargo.toml | 9 ++++-- android-project/android.toolchain.cmake | 1 + android-project/app/build.gradle.kts | 29 +++++++++++++++++++ .../github/gopher64/gopher64/N64Activity.kt | 9 +++++- 4 files changed, 44 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 13b2443..d2e46a8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,9 +19,6 @@ serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde-big-array = "0.5" sha2 = "0.11" -sdl3-sys = { version = "0.6", features = ["build-from-source-static"] } -sdl3-ttf-sys = { version = "0.6", features = ["build-static-vendored", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } -sdl3-image-sys = { version = "0.6", features = ["build-static-vendored"] } tokio = {version = "1.46", features = ["rt-multi-thread", "macros", "fs", "process"] } spin_sleep = "1.3" encoding_rs = "0.8" @@ -43,10 +40,16 @@ slint = { version = "1.16", default-features = false, features = ["compat-1-2", rfd = {version = "0.17", optional = true } dirs = "6.0" open = { version = "5.3", optional = true } +sdl3-sys = { version = "0.6", features = ["build-from-source-static"] } +sdl3-ttf-sys = { version = "0.6", features = ["build-static-vendored", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } +sdl3-image-sys = { version = "0.6", features = ["build-static-vendored"] } [target.'cfg(target_os = "android")'.dependencies] slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "backend-android-activity-06", "accessibility"], optional = true } jni = "0.22" +sdl3-sys = { version = "0.6", features = ["build-from-source"] } +sdl3-ttf-sys = { version = "0.6", features = ["build-from-source", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } +sdl3-image-sys = { version = "0.6", features = ["build-from-source"] } [build-dependencies] winresource = "0.1" diff --git a/android-project/android.toolchain.cmake b/android-project/android.toolchain.cmake index 8f2a290..6a58447 100644 --- a/android-project/android.toolchain.cmake +++ b/android-project/android.toolchain.cmake @@ -1,3 +1,4 @@ set(ANDROID_PLATFORM $ENV{ANDROID_PLATFORM}) set(ANDROID_ABI $ENV{ANDROID_ABI}) +set(ANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES ON) include("$ENV{ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake") diff --git a/android-project/app/build.gradle.kts b/android-project/app/build.gradle.kts index 672da64..dedd75e 100644 --- a/android-project/app/build.gradle.kts +++ b/android-project/app/build.gradle.kts @@ -71,7 +71,36 @@ val ndkBuild = tasks.register("ndkBuild") { ) } +val sdlLibsArm64 = tasks.register("sdlLibsArm64") { + val isRelease = gradle.startParameter.taskNames.any { it.endsWith("Release", ignoreCase = true) } + val jniType = if (isRelease) "release" else "debug" + val jniLibsFolder = "$rootDir/app/src/$jniType/jniLibs/arm64-v8a" + + from("$rootDir/../target/aarch64-linux-android/$jniType") + into(jniLibsFolder) + include("libSDL*") +} + +val sdlLibsX64 = tasks.register("sdlLibsX64") { + val isRelease = gradle.startParameter.taskNames.any { it.endsWith("Release", ignoreCase = true) } + val jniType = if (isRelease) "release" else "debug" + val jniLibsFolder = "$rootDir/app/src/$jniType/jniLibs/x86_64" + + from("$rootDir/../target/x86_64-linux-android/$jniType") + into(jniLibsFolder) + include("libSDL*") +} + tasks.named("preBuild") { + dependsOn(sdlLibsArm64) + dependsOn(sdlLibsX64) +} + +tasks.named("sdlLibsArm64") { + dependsOn(ndkBuild) +} + +tasks.named("sdlLibsX64") { dependsOn(ndkBuild) } diff --git a/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt b/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt index 080251b..ec37fe0 100644 --- a/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt +++ b/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt @@ -2,4 +2,11 @@ package io.github.gopher64.gopher64 import org.libsdl.app.SDLActivity -class N64Activity : SDLActivity() {} +class N64Activity : SDLActivity() { + override fun getLibraries(): Array = arrayOf( + "SDL3", + "SDL3_ttf", + "SDL3_image", + "gopher64" + ) +} From 9c9f1a300099954109bfae27dc2236da0664af0c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 26 May 2026 15:03:00 +0200 Subject: [PATCH 0939/1117] connect to native code (#955) * connect to native code * more * more * more * more * more * more * more * more --- .../app/src/main/AndroidManifest.xml | 10 ++- .../github/gopher64/gopher64/N64Activity.kt | 30 +++++++ src/lib.rs | 81 +----------------- src/ui.rs | 84 +++++++++++++++++++ src/ui/android.rs | 53 +++++++++++- src/ui/gui.rs | 2 +- src/ui/input.rs | 12 ++- src/ui/video.rs | 6 +- 8 files changed, 189 insertions(+), 89 deletions(-) diff --git a/android-project/app/src/main/AndroidManifest.xml b/android-project/app/src/main/AndroidManifest.xml index 292d668..cb6793a 100644 --- a/android-project/app/src/main/AndroidManifest.xml +++ b/android-project/app/src/main/AndroidManifest.xml @@ -18,7 +18,15 @@ - + + + + + \ No newline at end of file diff --git a/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt b/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt index ec37fe0..2fabc26 100644 --- a/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt +++ b/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt @@ -3,10 +3,40 @@ package io.github.gopher64.gopher64 import org.libsdl.app.SDLActivity class N64Activity : SDLActivity() { + companion object { + const val CONFIGURE_INPUT_PROFILE = 2 + } + override fun getLibraries(): Array = arrayOf( "SDL3", "SDL3_ttf", "SDL3_image", "gopher64" ) + + override fun getMainFunction(): String = "gopher64_sdl_main" + + override fun getArguments(): Array { + val intent = intent ?: return super.getArguments() + val request_code = intent.getIntExtra("request_code", 0) + if (request_code == CONFIGURE_INPUT_PROFILE) { + val profile = intent.getStringExtra("profile_name") ?: return super.getArguments() + val deadzone = intent.getIntExtra("deadzone", -1) + val args = mutableListOf( + "--configure-input-profile", + profile, + ) + if (intent.getBooleanExtra("dinput", false)) { + args.add("--use-dinput") + } + if (deadzone != -1) { + args.add("--deadzone") + args.add(deadzone.toString()) + } + setResult(RESULT_OK) // so that the profiles are updated in the GUI + return args.toTypedArray() + } else { + return super.getArguments() + } + } } diff --git a/src/lib.rs b/src/lib.rs index a519a13..eb6e104 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,85 +14,6 @@ use std::io::Error; #[cfg(target_os = "android")] use ui::android; -/// N64 emulator -#[derive(Parser, Debug)] -#[command(author, version=env!("GIT_DESCRIBE"), about, long_about = None, arg_required_else_help = if cfg!(feature = "gui") { false } else { true })] -struct Args { - game: Option, - #[arg(short, long)] - fullscreen: bool, - #[arg(long)] - overclock: Option, - #[arg(long)] - disable_expansion_pak: Option, - #[arg(long, value_name = "CHEATS_FILE", hide = true)] - cheats: Option, - #[arg(long, value_name = "NETPLAY_PEER_ADDR", hide = true)] - netplay_peer_addr: Option, - #[arg(long, value_name = "NETPLAY_PLAYER_NUMBER", hide = true)] - netplay_player_number: Option, - #[arg( - long, - value_name = "PROFILE_NAME", - help = "Create a new input profile (keyboard/gamepad mappings)" - )] - configure_input_profile: Option, - #[arg(long, help = "Use DirectInput when configuring a new input profile")] - use_dinput: bool, - #[arg( - long, - value_name = "DEADZONE_PERCENTAGE", - help = "Used along with --configure-input-profile to set the deadzone for analog sticks" - )] - deadzone: Option, - #[arg( - long, - value_name = "PROFILE_NAME", - help = "Must also specify --port. Used to bind a previously created profile to a port" - )] - bind_input_profile: Option, - #[arg( - long, - help = "Lists connected controllers which can be used in --assign-controller" - )] - list_controllers: bool, - #[arg( - long, - value_name = "CONTROLLER_NUMBER", - help = "Must also specify --port. Used to assign a controller listed in --list-controllers to a port" - )] - assign_controller: Option, - #[arg( - long, - value_name = "PORT", - help = "Valid values: 1-4. To be used alongside --bind-input-profile and --assign-controller" - )] - port: Option, - #[arg( - long, - help = "Clear all input profile bindings and controller assignments" - )] - clear_input_bindings: bool, - #[arg( - long, - value_name = "SLOT", - help = "Load savestate from slot 0-9 when starting the game" - )] - load_state: Option, - #[arg( - long = "ra-username", - value_name = "USERNAME", - help = "Username for RetroAchievements" - )] - ra_username: Option, - #[arg( - long = "ra-password", - value_name = "PASSWORD", - help = "Password for RetroAchievements" - )] - ra_password: Option, -} - pub async fn run() -> std::io::Result<()> { let dirs = ui::get_dirs(); @@ -103,7 +24,7 @@ pub async fn run() -> std::io::Result<()> { ui::sdl_hints(); - let args = Args::parse(); + let args = ui::Args::parse(); if let Some(game) = args.game { let file_path = std::path::Path::new(&game).to_path_buf(); let Some(rom_contents) = device::get_rom_contents(&file_path) else { diff --git a/src/ui.rs b/src/ui.rs index 2d6449b..2bf4d42 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -16,6 +16,7 @@ pub mod usb; pub mod video; #[cfg(all(feature = "gui", not(target_os = "android")))] pub mod vru; +use clap::Parser; pub static WEB_CLIENT: std::sync::LazyLock = std::sync::LazyLock::new(|| { reqwest::Client::builder() @@ -28,6 +29,85 @@ pub static WEB_CLIENT: std::sync::LazyLock = std::sync::LazyLoc .unwrap() }); +/// N64 emulator +#[derive(Parser, Debug)] +#[command(author, version=env!("GIT_DESCRIBE"), about, long_about = None, arg_required_else_help = if cfg!(feature = "gui") { false } else { true })] +pub struct Args { + pub game: Option, + #[arg(short, long)] + pub fullscreen: bool, + #[arg(long)] + pub overclock: Option, + #[arg(long)] + pub disable_expansion_pak: Option, + #[arg(long, value_name = "CHEATS_FILE", hide = true)] + pub cheats: Option, + #[arg(long, value_name = "NETPLAY_PEER_ADDR", hide = true)] + pub netplay_peer_addr: Option, + #[arg(long, value_name = "NETPLAY_PLAYER_NUMBER", hide = true)] + pub netplay_player_number: Option, + #[arg( + long, + value_name = "PROFILE_NAME", + help = "Create a new input profile (keyboard/gamepad mappings)" + )] + pub configure_input_profile: Option, + #[arg(long, help = "Use DirectInput when configuring a new input profile")] + pub use_dinput: bool, + #[arg( + long, + value_name = "DEADZONE_PERCENTAGE", + help = "Used along with --configure-input-profile to set the deadzone for analog sticks" + )] + pub deadzone: Option, + #[arg( + long, + value_name = "PROFILE_NAME", + help = "Must also specify --port. Used to bind a previously created profile to a port" + )] + pub bind_input_profile: Option, + #[arg( + long, + help = "Lists connected controllers which can be used in --assign-controller" + )] + pub list_controllers: bool, + #[arg( + long, + value_name = "CONTROLLER_NUMBER", + help = "Must also specify --port. Used to assign a controller listed in --list-controllers to a port" + )] + pub assign_controller: Option, + #[arg( + long, + value_name = "PORT", + help = "Valid values: 1-4. To be used alongside --bind-input-profile and --assign-controller" + )] + pub port: Option, + #[arg( + long, + help = "Clear all input profile bindings and controller assignments" + )] + pub clear_input_bindings: bool, + #[arg( + long, + value_name = "SLOT", + help = "Load savestate from slot 0-9 when starting the game" + )] + pub load_state: Option, + #[arg( + long = "ra-username", + value_name = "USERNAME", + help = "Username for RetroAchievements" + )] + pub ra_username: Option, + #[arg( + long = "ra-password", + value_name = "PASSWORD", + help = "Password for RetroAchievements" + )] + pub ra_password: Option, +} + #[derive(Clone)] pub struct Dirs { pub config_dir: std::path::PathBuf, @@ -93,6 +173,10 @@ pub fn sdl_hints() { sdl3_sys::everything::SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, hint.as_ptr(), ); + sdl3_sys::everything::SDL_SetHint( + sdl3_sys::everything::SDL_HINT_ANDROID_ALLOW_RECREATE_ACTIVITY, + hint.as_ptr(), + ); } } diff --git a/src/ui/android.rs b/src/ui/android.rs index e7bcc64..5db00f6 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -1,4 +1,5 @@ use crate::ui; +use clap::Parser; use jni::objects::{JClass, JObject, JString}; use jni::refs::Global; use jni::sys::jint; @@ -141,7 +142,50 @@ pub struct ControllerInfo { pub descriptor: String, } -pub fn configure_input_profile(profile_name: slint::SharedString, dinput: bool, deadzone: i32) { +fn argv_to_strings(argc: std::ffi::c_int, argv: *mut *mut std::ffi::c_char) -> Vec { + if argc <= 0 || argv.is_null() { + return Vec::new(); + } + unsafe { + (0..argc as usize) + .map(|i| { + std::ffi::CStr::from_ptr(*argv.add(i)) + .to_string_lossy() + .into_owned() + }) + .collect() + } +} + +#[unsafe(no_mangle)] +#[tokio::main(worker_threads = 4)] +pub async extern "C" fn gopher64_sdl_main( + argc: std::ffi::c_int, + argv: *mut *mut std::ffi::c_char, +) -> std::ffi::c_int { + ui::sdl_hints(); + + let raw = argv_to_strings(argc, argv); + let args = ui::Args::try_parse_from(raw).unwrap(); + if let Some(profile) = args.configure_input_profile { + let mut config = ui::config::Config::new(); + ui::input::configure_input_profile( + &mut config, + profile, + args.use_dinput, + args.deadzone.unwrap_or(ui::input::DEADZONE_DEFAULT), + ); + + ui::sdl_close(); + } + 0 +} + +pub fn spawn_configure_input_profile( + profile_name: slint::SharedString, + dinput: bool, + deadzone: i32, +) { if let Some(vm) = get_vm() { if let Err(err) = vm.attach_current_thread(|env| { start_n64_activity_on_jvm(env, profile_name.to_string(), dinput, deadzone) @@ -166,6 +210,7 @@ fn start_n64_activity_on_jvm( let package_name = JString::from_str(env, "io.github.gopher64.gopher64")?; let class_name = JString::from_str(env, "io.github.gopher64.gopher64.N64Activity")?; + let request_code_key = JString::from_str(env, "request_code")?; let profile_name_key = JString::from_str(env, "profile_name")?; let profile_name_value = JString::from_str(env, profile_name)?; let dinput_key = JString::from_str(env, "dinput")?; @@ -174,7 +219,8 @@ fn start_n64_activity_on_jvm( .set_class_name(env, &package_name, &class_name)? .put_extra_string(env, &profile_name_key, &profile_name_value)? .put_extra_boolean(env, &dinput_key, dinput)? - .put_extra_int(env, &deadzone_key, deadzone)?; + .put_extra_int(env, &deadzone_key, deadzone)? + .put_extra_int(env, &request_code_key, CONFIGURE_INPUT_PROFILE)?; activity .as_ref() @@ -445,11 +491,12 @@ pub extern "system" fn Java_io_github_gopher64_gopher64_SlintActivity_nativeOnAc intent_data: JObject<'caller>, ) { let outcome = unowned_env.with_env(|env| -> Result<_, jni::errors::Error> { - if result_code == AndroidActivity::RESULT_OK(env)? && !intent_data.is_null() { + if result_code == AndroidActivity::RESULT_OK(env)? { match request_code { REQUEST_SELECT_ROM => { if let Ok(mut tx_lock) = SELECT_ROM_TX.lock() && let Some(tx) = tx_lock.take() + && !intent_data.is_null() { let result_intent = unsafe { env.as_cast_raw::(&intent_data)? }; diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 55d2d43..0be8640 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -355,7 +355,7 @@ fn controller_window(app: &AppWindow, config: &ui::config::Config) { handle.set_show_input_profile(false); #[cfg(target_os = "android")] - ui::android::configure_input_profile(profile_name, dinput, deadzone); + ui::android::spawn_configure_input_profile(profile_name, dinput, deadzone); #[cfg(not(target_os = "android"))] tokio::spawn(async move { diff --git a/src/ui/input.rs b/src/ui/input.rs index 3c62168..b3bb47e 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -665,12 +665,16 @@ pub fn configure_input_profile( let title = std::ffi::CString::new("configure input profile").unwrap(); let mut window: *mut sdl3_sys::video::SDL_Window = std::ptr::null_mut(); let mut renderer: *mut sdl3_sys::render::SDL_Renderer = std::ptr::null_mut(); + #[cfg(target_os = "android")] + let window_flags = sdl3_sys::video::SDL_WINDOW_FULLSCREEN; + #[cfg(not(target_os = "android"))] + let window_flags = sdl3_sys::video::SDL_WindowFlags(0); if !unsafe { sdl3_sys::render::SDL_CreateWindowAndRenderer( title.as_ptr(), 852, 480, - sdl3_sys::video::SDL_WindowFlags(0), + window_flags, &mut window, &mut renderer, ) @@ -782,7 +786,11 @@ pub fn configure_input_profile( ); let mut event: sdl3_sys::events::SDL_Event = Default::default(); while !key_set && unsafe { sdl3_sys::events::SDL_WaitEventTimeout(&mut event, 100) } { - if event.event_type() == sdl3_sys::events::SDL_EVENT_WINDOW_CLOSE_REQUESTED { + if event.event_type() == sdl3_sys::events::SDL_EVENT_WINDOW_CLOSE_REQUESTED + || (event.event_type() == sdl3_sys::events::SDL_EVENT_KEY_DOWN + && unsafe { event.key.scancode } + == sdl3_sys::scancode::SDL_SCANCODE_AC_BACK) + { close_input_profile_window( open_joysticks, open_controllers, diff --git a/src/ui/video.rs b/src/ui/video.rs index 8b7c58e..7e84432 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -280,10 +280,12 @@ pub fn draw_text( h: (h - sdl3_ttf_sys::ttf::TTF_GetFontHeight(font)) as f32, }; sdl3_sys::render::SDL_RenderTexture(renderer, image_texture, std::ptr::null(), &rect); + let (mut text_w, mut text_h) = (0, 0); + sdl3_ttf_sys::ttf::TTF_GetTextSize(ttf_text, &mut text_w, &mut text_h); sdl3_ttf_sys::ttf::TTF_DrawRendererText( ttf_text, - 20.0, - (h - sdl3_ttf_sys::ttf::TTF_GetFontHeight(font)) as f32, + (w / 2 - text_w / 2) as f32, + (h - text_h) as f32, ); sdl3_sys::render::SDL_RenderPresent(renderer); sdl3_ttf_sys::ttf::TTF_DestroyText(ttf_text); From 32f54f157b66e8b2158ca02b1d080461e4952b7b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 26 May 2026 20:09:57 +0200 Subject: [PATCH 0940/1117] Run rom android (#956) * run rom android * more * more * more * more * more * more * more * more --- android-project/app/build.gradle.kts | 1 + .../github/gopher64/gopher64/N64Activity.kt | 32 ++++ parallel-rdp/interface.cpp | 1 + src/lib.rs | 84 +++++++++- src/main.rs | 5 +- src/ui.rs | 80 --------- src/ui/android.rs | 156 +++++++++++++++--- src/ui/gui.rs | 55 +++--- 8 files changed, 287 insertions(+), 127 deletions(-) diff --git a/android-project/app/build.gradle.kts b/android-project/app/build.gradle.kts index dedd75e..a01f7fd 100644 --- a/android-project/app/build.gradle.kts +++ b/android-project/app/build.gradle.kts @@ -27,6 +27,7 @@ android { buildTypes { release { + signingConfig = signingConfigs["debug"] isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), diff --git a/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt b/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt index 2fabc26..f0231eb 100644 --- a/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt +++ b/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt @@ -1,10 +1,12 @@ package io.github.gopher64.gopher64 +import android.content.Intent import org.libsdl.app.SDLActivity class N64Activity : SDLActivity() { companion object { const val CONFIGURE_INPUT_PROFILE = 2 + const val RUN_ROM = 3 } override fun getLibraries(): Array = arrayOf( @@ -35,6 +37,36 @@ class N64Activity : SDLActivity() { } setResult(RESULT_OK) // so that the profiles are updated in the GUI return args.toTypedArray() + } else if (request_code == RUN_ROM) { + val file_path = intent.getStringExtra("file_path") ?: return super.getArguments() + val overclock = intent.getBooleanExtra("overclock", false) + val disable_expansion_pak = intent.getBooleanExtra("disable_expansion_pak", false) + val args = mutableListOf( + file_path, + "--fullscreen", + "--overclock", + overclock.toString(), + "--disable-expansion-pak", + disable_expansion_pak.toString()) + + val dataIntent = Intent() + + val netplay_peer_addr = intent.getStringExtra("netplay_peer_addr") + val cheats = intent.getStringExtra("cheats") + if (netplay_peer_addr != null && cheats != null) { + args.add("--netplay-peer-addr") + args.add(netplay_peer_addr) + args.add("--netplay-player-number") + args.add(intent.getIntExtra("netplay_player_number", 4).toString()) + args.add("--cheats") + args.add(cheats) + dataIntent.putExtra("cheats_path", cheats) + } + + dataIntent.putExtra("file_path", file_path) + + setResult(RESULT_OK, dataIntent) + return args.toTypedArray() } else { return super.getArguments() } diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 417ae57..d962666 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -168,6 +168,7 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { callback.paused = !callback.paused; } break; + case SDL_SCANCODE_AC_BACK: case SDL_SCANCODE_ESCAPE: if (gfx_info.fullscreen) { SDL_zero(user_event); diff --git a/src/lib.rs b/src/lib.rs index eb6e104..7312390 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,7 +14,86 @@ use std::io::Error; #[cfg(target_os = "android")] use ui::android; -pub async fn run() -> std::io::Result<()> { +/// N64 emulator +#[derive(Parser, Debug)] +#[command(author, version=env!("GIT_DESCRIBE"), about, long_about = None, arg_required_else_help = if cfg!(feature = "gui") { false } else { true })] +pub struct Args { + pub game: Option, + #[arg(short, long)] + pub fullscreen: bool, + #[arg(long)] + pub overclock: Option, + #[arg(long)] + pub disable_expansion_pak: Option, + #[arg(long, value_name = "CHEATS_FILE", hide = true)] + pub cheats: Option, + #[arg(long, value_name = "NETPLAY_PEER_ADDR", hide = true)] + pub netplay_peer_addr: Option, + #[arg(long, value_name = "NETPLAY_PLAYER_NUMBER", hide = true)] + pub netplay_player_number: Option, + #[arg( + long, + value_name = "PROFILE_NAME", + help = "Create a new input profile (keyboard/gamepad mappings)" + )] + pub configure_input_profile: Option, + #[arg(long, help = "Use DirectInput when configuring a new input profile")] + pub use_dinput: bool, + #[arg( + long, + value_name = "DEADZONE_PERCENTAGE", + help = "Used along with --configure-input-profile to set the deadzone for analog sticks" + )] + pub deadzone: Option, + #[arg( + long, + value_name = "PROFILE_NAME", + help = "Must also specify --port. Used to bind a previously created profile to a port" + )] + pub bind_input_profile: Option, + #[arg( + long, + help = "Lists connected controllers which can be used in --assign-controller" + )] + pub list_controllers: bool, + #[arg( + long, + value_name = "CONTROLLER_NUMBER", + help = "Must also specify --port. Used to assign a controller listed in --list-controllers to a port" + )] + pub assign_controller: Option, + #[arg( + long, + value_name = "PORT", + help = "Valid values: 1-4. To be used alongside --bind-input-profile and --assign-controller" + )] + pub port: Option, + #[arg( + long, + help = "Clear all input profile bindings and controller assignments" + )] + pub clear_input_bindings: bool, + #[arg( + long, + value_name = "SLOT", + help = "Load savestate from slot 0-9 when starting the game" + )] + pub load_state: Option, + #[arg( + long = "ra-username", + value_name = "USERNAME", + help = "Username for RetroAchievements" + )] + pub ra_username: Option, + #[arg( + long = "ra-password", + value_name = "PASSWORD", + help = "Password for RetroAchievements" + )] + pub ra_password: Option, +} + +pub async fn run(args: Args, arg_count: usize) -> std::io::Result<()> { let dirs = ui::get_dirs(); std::fs::create_dir_all(&dirs.config_dir)?; @@ -24,7 +103,6 @@ pub async fn run() -> std::io::Result<()> { ui::sdl_hints(); - let args = ui::Args::parse(); if let Some(game) = args.game { let file_path = std::path::Path::new(&game).to_path_buf(); let Some(rom_contents) = device::get_rom_contents(&file_path) else { @@ -167,7 +245,7 @@ pub async fn run() -> std::io::Result<()> { if let Some(shutdown_tx) = &shutdown_tx { ui::usb::close(shutdown_tx, usb_handle).await; } - } else if std::env::args().count() > 1 { + } else if arg_count > 1 { let mut config = ui::config::Config::new(); if let Some(profile) = args.configure_input_profile { diff --git a/src/main.rs b/src/main.rs index e275fc0..978f7ce 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,7 +3,10 @@ #[global_allocator] static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; +use clap::Parser; + #[tokio::main(worker_threads = 4)] async fn main() -> std::io::Result<()> { - gopher64::run().await + let args = gopher64::Args::parse(); + gopher64::run(args, std::env::args().count()).await } diff --git a/src/ui.rs b/src/ui.rs index 2bf4d42..87d6488 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -16,7 +16,6 @@ pub mod usb; pub mod video; #[cfg(all(feature = "gui", not(target_os = "android")))] pub mod vru; -use clap::Parser; pub static WEB_CLIENT: std::sync::LazyLock = std::sync::LazyLock::new(|| { reqwest::Client::builder() @@ -29,85 +28,6 @@ pub static WEB_CLIENT: std::sync::LazyLock = std::sync::LazyLoc .unwrap() }); -/// N64 emulator -#[derive(Parser, Debug)] -#[command(author, version=env!("GIT_DESCRIBE"), about, long_about = None, arg_required_else_help = if cfg!(feature = "gui") { false } else { true })] -pub struct Args { - pub game: Option, - #[arg(short, long)] - pub fullscreen: bool, - #[arg(long)] - pub overclock: Option, - #[arg(long)] - pub disable_expansion_pak: Option, - #[arg(long, value_name = "CHEATS_FILE", hide = true)] - pub cheats: Option, - #[arg(long, value_name = "NETPLAY_PEER_ADDR", hide = true)] - pub netplay_peer_addr: Option, - #[arg(long, value_name = "NETPLAY_PLAYER_NUMBER", hide = true)] - pub netplay_player_number: Option, - #[arg( - long, - value_name = "PROFILE_NAME", - help = "Create a new input profile (keyboard/gamepad mappings)" - )] - pub configure_input_profile: Option, - #[arg(long, help = "Use DirectInput when configuring a new input profile")] - pub use_dinput: bool, - #[arg( - long, - value_name = "DEADZONE_PERCENTAGE", - help = "Used along with --configure-input-profile to set the deadzone for analog sticks" - )] - pub deadzone: Option, - #[arg( - long, - value_name = "PROFILE_NAME", - help = "Must also specify --port. Used to bind a previously created profile to a port" - )] - pub bind_input_profile: Option, - #[arg( - long, - help = "Lists connected controllers which can be used in --assign-controller" - )] - pub list_controllers: bool, - #[arg( - long, - value_name = "CONTROLLER_NUMBER", - help = "Must also specify --port. Used to assign a controller listed in --list-controllers to a port" - )] - pub assign_controller: Option, - #[arg( - long, - value_name = "PORT", - help = "Valid values: 1-4. To be used alongside --bind-input-profile and --assign-controller" - )] - pub port: Option, - #[arg( - long, - help = "Clear all input profile bindings and controller assignments" - )] - pub clear_input_bindings: bool, - #[arg( - long, - value_name = "SLOT", - help = "Load savestate from slot 0-9 when starting the game" - )] - pub load_state: Option, - #[arg( - long = "ra-username", - value_name = "USERNAME", - help = "Username for RetroAchievements" - )] - pub ra_username: Option, - #[arg( - long = "ra-password", - value_name = "PASSWORD", - help = "Password for RetroAchievements" - )] - pub ra_password: Option, -} - #[derive(Clone)] pub struct Dirs { pub config_dir: std::path::PathBuf, diff --git a/src/ui/android.rs b/src/ui/android.rs index 5db00f6..943432a 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -1,3 +1,5 @@ +use crate::Args; +use crate::run; use crate::ui; use clap::Parser; use jni::objects::{JClass, JObject, JString}; @@ -8,6 +10,7 @@ use std::os::fd::FromRawFd; const REQUEST_SELECT_ROM: jint = 1; const CONFIGURE_INPUT_PROFILE: jint = 2; +const RUN_ROM: jint = 3; pub static ANDROID_APP: std::sync::Mutex> = std::sync::Mutex::new(None); @@ -82,6 +85,7 @@ bind_java_type! { sig = (extra: JString, value: jint) -> AndroidIntent, name = "putExtra", }, + fn get_string_extra(name: JString) -> JString, fn set_class_name(package_name: JString, class_name: JString) -> AndroidIntent, }, } @@ -111,6 +115,7 @@ bind_java_type! { methods { static fn parse(uri_string: JString) -> AndroidUri, fn to_string() -> JString, + static fn decode(path: JString) -> JString, }, } @@ -163,20 +168,11 @@ pub async extern "C" fn gopher64_sdl_main( argc: std::ffi::c_int, argv: *mut *mut std::ffi::c_char, ) -> std::ffi::c_int { - ui::sdl_hints(); - let raw = argv_to_strings(argc, argv); - let args = ui::Args::try_parse_from(raw).unwrap(); - if let Some(profile) = args.configure_input_profile { - let mut config = ui::config::Config::new(); - ui::input::configure_input_profile( - &mut config, - profile, - args.use_dinput, - args.deadzone.unwrap_or(ui::input::DEADZONE_DEFAULT), - ); - - ui::sdl_close(); + let args = Args::try_parse_from(raw).unwrap(); + if let Err(err) = run(args, argc as usize).await { + eprintln!("Error running game: {err:?}"); + return 1; } 0 } @@ -188,14 +184,14 @@ pub fn spawn_configure_input_profile( ) { if let Some(vm) = get_vm() { if let Err(err) = vm.attach_current_thread(|env| { - start_n64_activity_on_jvm(env, profile_name.to_string(), dinput, deadzone) + start_configure_input_profile_on_jvm(env, profile_name.to_string(), dinput, deadzone) }) { eprintln!("JNI error while starting N64Activity: {err:?}"); } } } -fn start_n64_activity_on_jvm( +fn start_configure_input_profile_on_jvm( env: &mut Env<'_>, profile_name: String, dinput: bool, @@ -232,15 +228,82 @@ fn start_n64_activity_on_jvm( } pub fn run_rom( - _file_path: std::path::PathBuf, - _game_settings: ui::GameSettings, + file_path: std::path::PathBuf, + game_settings: ui::GameSettings, netplay: Option, + weak: slint::Weak, ) { - if let Some(netplay) = netplay { - println!( - "Netplay peer addr: {} player number: {}", - netplay.peer_addr, netplay.player_number - ); + if let Some(vm) = get_vm() { + if let Err(err) = vm.attach_current_thread(|env| { + start_run_rom_on_jvm(env, file_path, game_settings, netplay, weak) + }) { + eprintln!("JNI error while starting N64Activity: {err:?}"); + } + } +} + +fn start_run_rom_on_jvm( + env: &mut Env<'_>, + file_path: std::path::PathBuf, + game_settings: ui::GameSettings, + netplay: Option, + weak: slint::Weak, +) -> jni::errors::Result<()> { + if let Ok(app) = ANDROID_APP.lock() + && let Some(app) = app.as_ref() + { + let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; + let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; + + let package_name = JString::from_str(env, "io.github.gopher64.gopher64")?; + let class_name = JString::from_str(env, "io.github.gopher64.gopher64.N64Activity")?; + + let file_path_key = JString::from_str(env, "file_path")?; + let file_path_value = JString::from_str(env, file_path.to_str().unwrap())?; + let overclock_key = JString::from_str(env, "overclock")?; + let disable_expansion_pak_key = JString::from_str(env, "disable_expansion_pak")?; + let request_code_key = JString::from_str(env, "request_code")?; + let mut intent = AndroidIntent::new(env)? + .set_class_name(env, &package_name, &class_name)? + .put_extra_int(env, &request_code_key, RUN_ROM)? + .put_extra_string(env, &file_path_key, &file_path_value)? + .put_extra_boolean(env, &overclock_key, game_settings.overclock)? + .put_extra_boolean( + env, + &disable_expansion_pak_key, + game_settings.disable_expansion_pak, + )?; + + if let Some(netplay) = netplay { + let netplay_peer_addr_key = JString::from_str(env, "netplay_peer_addr")?; + let netplay_player_number_key = JString::from_str(env, "netplay_player_number")?; + let netplay_peer_addr_value = JString::from_str(env, &netplay.peer_addr.to_string())?; + let cheats_key = JString::from_str(env, "cheats")?; + let cheats_path = ui::get_dirs().cache_dir.join("cheats.json"); + let cheats_value = JString::from_str(env, cheats_path.to_str().unwrap())?; + + let f = std::fs::File::create(cheats_path).unwrap(); + serde_json::to_writer_pretty(f, &game_settings.cheats).unwrap(); + + intent = intent + .put_extra_string(env, &netplay_peer_addr_key, &netplay_peer_addr_value)? + .put_extra_int( + env, + &netplay_player_number_key, + netplay.player_number as jint, + )? + .put_extra_string(env, &cheats_key, &cheats_value)?; + } + + weak.upgrade_in_event_loop(move |handle| handle.set_game_running(true)) + .unwrap(); + + activity + .as_ref() + .start_activity_for_result(env, &intent, RUN_ROM)?; + Ok(()) + } else { + Err(jni::errors::Error::UninitializedJavaVM) } } @@ -254,6 +317,27 @@ fn get_vm() -> Option { } } +pub fn decode_path(path: &str) -> String { + if let Some(vm) = get_vm() { + match vm.attach_current_thread(|env| decode_path_on_jvm(env, path)) { + Ok(decoded_path) => decoded_path, + Err(err) => { + eprintln!("JNI error while decoding path: {err:?}"); + String::new() + } + } + } else { + eprintln!("Android app not initialized"); + String::new() + } +} + +fn decode_path_on_jvm(env: &mut Env<'_>, path: &str) -> jni::errors::Result { + let path = JString::from_str(env, path)?; + let decoded_path = AndroidUri::decode(env, &path)?; + Ok(decoded_path.try_to_string(env)?) +} + /// Lists connected gamepads and joysticks using the Android framework. pub fn list_controllers() -> Vec { if let Some(vm) = get_vm() { @@ -536,6 +620,34 @@ pub extern "system" fn Java_io_github_gopher64_gopher64_SlintActivity_nativeOnAc ui::gui::update_input_profiles(&weak_app_window, &config); } } + RUN_ROM => { + let result_intent = unsafe { env.as_cast_raw::(&intent_data)? }; + + let file_path_key = JString::from_str(env, "file_path")?; + let file_path = result_intent + .as_ref() + .get_string_extra(env, &file_path_key)? + .try_to_string(env)?; + + let cheats_path_key = JString::from_str(env, "cheats_path")?; + if let Ok(cheats_path) = result_intent + .as_ref() + .get_string_extra(env, &cheats_path_key) + && let Ok(cheats_path) = cheats_path.try_to_string(env) + { + let _ = std::fs::remove_file(cheats_path); + } + if let Ok(weak_app_window) = WEAK_SLINT_WINDOW.lock() + && let Some(weak_app_window) = weak_app_window.as_ref() + { + weak_app_window + .upgrade_in_event_loop(move |handle| { + ui::gui::update_recent_roms(&handle, file_path.into()); + handle.set_game_running(false) + }) + .unwrap(); + } + } _ => {} } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 0be8640..0f702ee 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -111,7 +111,7 @@ fn local_game_window(app: &AppWindow, config: &ui::config::Config) { .map(|x| { ( x.into(), - std::path::Path::new(x) + std::path::Path::new(&decode_path(x)) .file_name() .unwrap() .to_str() @@ -541,11 +541,10 @@ pub fn run_rom( file_path: std::path::PathBuf, game_settings: ui::GameSettings, netplay: Option, - #[cfg(target_os = "android")] _weak: slint::Weak, - #[cfg(not(target_os = "android"))] weak: slint::Weak, + weak: slint::Weak, ) { #[cfg(target_os = "android")] - ui::android::run_rom(file_path, game_settings, netplay); + ui::android::run_rom(file_path, game_settings, netplay, weak); #[cfg(not(target_os = "android"))] tokio::spawn(async move { @@ -571,7 +570,7 @@ pub fn run_rom( ]); let cheats_path = ui::get_dirs().cache_dir.join("cheats.json"); if let Some(netplay_device) = netplay { - let f = std::fs::File::create(cheats_path.to_str().unwrap()).unwrap(); + let f = std::fs::File::create(&cheats_path).unwrap(); serde_json::to_writer_pretty(f, &game_settings.cheats).unwrap(); command.args([ @@ -595,28 +594,14 @@ pub fn run_rom( eprintln!("Failed to run game"); } - let _ = std::fs::remove_file(cheats_path.to_str().unwrap()); + let _ = std::fs::remove_file(cheats_path); weak.upgrade_in_event_loop(move |handle| { if let Some(rom_dir) = file_path.parent().unwrap().to_str() { handle.set_rom_dir(rom_dir.into()); } if success { - let recent_roms = slint::VecModel::default(); - recent_roms.push(( - file_path.to_str().unwrap().into(), - file_path.file_name().unwrap().to_str().unwrap().into(), - )); - - for rom in handle.get_recent_roms().iter() { - if rom.0 != file_path.to_str().unwrap() - && recent_roms.row_count() < 5 - && rom_exists(&rom.0) - { - recent_roms.push(rom); - } - } - handle.set_recent_roms(slint::ModelRc::from(std::rc::Rc::new(recent_roms))); + update_recent_roms(&handle, file_path); } handle.set_game_running(false); }) @@ -624,6 +609,34 @@ pub fn run_rom( }); } +fn decode_path(path: &str) -> String { + #[cfg(target_os = "android")] + return ui::android::decode_path(path); + #[cfg(not(target_os = "android"))] + return path.to_string(); +} + +pub fn update_recent_roms(app: &AppWindow, file_path: std::path::PathBuf) { + let recent_roms = slint::VecModel::default(); + recent_roms.push(( + file_path.to_str().unwrap().into(), + std::path::Path::new(&decode_path(file_path.to_str().unwrap())) + .file_name() + .unwrap() + .to_str() + .unwrap() + .into(), + )); + + for rom in app.get_recent_roms().iter() { + if rom.0 != file_path.to_str().unwrap() && recent_roms.row_count() < 5 && rom_exists(&rom.0) + { + recent_roms.push(rom); + } + } + app.set_recent_roms(slint::ModelRc::from(std::rc::Rc::new(recent_roms))); +} + pub async fn select_rom(rom_dir: slint::SharedString) -> Option { #[cfg(target_os = "android")] return ui::android::select_rom(rom_dir).await; From a447bc810476a4b4cdaded3691da46aad415421a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 26 May 2026 22:43:21 +0200 Subject: [PATCH 0941/1117] pass all args (#957) --- .../github/gopher64/gopher64/N64Activity.kt | 57 ++-------- src/ui/android.rs | 103 ++++++++++-------- 2 files changed, 67 insertions(+), 93 deletions(-) diff --git a/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt b/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt index f0231eb..dff3c9f 100644 --- a/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt +++ b/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt @@ -20,55 +20,18 @@ class N64Activity : SDLActivity() { override fun getArguments(): Array { val intent = intent ?: return super.getArguments() - val request_code = intent.getIntExtra("request_code", 0) - if (request_code == CONFIGURE_INPUT_PROFILE) { - val profile = intent.getStringExtra("profile_name") ?: return super.getArguments() - val deadzone = intent.getIntExtra("deadzone", -1) - val args = mutableListOf( - "--configure-input-profile", - profile, - ) - if (intent.getBooleanExtra("dinput", false)) { - args.add("--use-dinput") - } - if (deadzone != -1) { - args.add("--deadzone") - args.add(deadzone.toString()) - } - setResult(RESULT_OK) // so that the profiles are updated in the GUI - return args.toTypedArray() - } else if (request_code == RUN_ROM) { - val file_path = intent.getStringExtra("file_path") ?: return super.getArguments() - val overclock = intent.getBooleanExtra("overclock", false) - val disable_expansion_pak = intent.getBooleanExtra("disable_expansion_pak", false) - val args = mutableListOf( - file_path, - "--fullscreen", - "--overclock", - overclock.toString(), - "--disable-expansion-pak", - disable_expansion_pak.toString()) - - val dataIntent = Intent() - - val netplay_peer_addr = intent.getStringExtra("netplay_peer_addr") - val cheats = intent.getStringExtra("cheats") - if (netplay_peer_addr != null && cheats != null) { - args.add("--netplay-peer-addr") - args.add(netplay_peer_addr) - args.add("--netplay-player-number") - args.add(intent.getIntExtra("netplay_player_number", 4).toString()) - args.add("--cheats") - args.add(cheats) - dataIntent.putExtra("cheats_path", cheats) - } + val args = intent.getStringArrayExtra("args") ?: return super.getArguments() + val dataIntent = Intent() + val file_path = intent.getStringExtra("file_path") + if (file_path != null) { dataIntent.putExtra("file_path", file_path) - - setResult(RESULT_OK, dataIntent) - return args.toTypedArray() - } else { - return super.getArguments() } + val cheats_path = intent.getStringExtra("cheats_path") + if (cheats_path != null) { + dataIntent.putExtra("cheats_path", cheats_path) + } + setResult(RESULT_OK, dataIntent) + return args } } diff --git a/src/ui/android.rs b/src/ui/android.rs index 943432a..5151889 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -2,7 +2,7 @@ use crate::Args; use crate::run; use crate::ui; use clap::Parser; -use jni::objects::{JClass, JObject, JString}; +use jni::objects::{JClass, JObject, JObjectArray, JString}; use jni::refs::Global; use jni::sys::jint; use jni::{Env, EnvUnowned, JavaVM, bind_java_type}; @@ -77,12 +77,8 @@ bind_java_type! { sig = (extra: JString, value: JString) -> AndroidIntent, name = "putExtra", }, - fn put_extra_boolean { - sig = (extra: JString, value: jboolean) -> AndroidIntent, - name = "putExtra", - }, - fn put_extra_int { - sig = (extra: JString, value: jint) -> AndroidIntent, + fn put_extra_string_array { + sig = (extra: JString, value: JString[]) -> AndroidIntent, name = "putExtra", }, fn get_string_extra(name: JString) -> JString, @@ -206,17 +202,24 @@ fn start_configure_input_profile_on_jvm( let package_name = JString::from_str(env, "io.github.gopher64.gopher64")?; let class_name = JString::from_str(env, "io.github.gopher64.gopher64.N64Activity")?; - let request_code_key = JString::from_str(env, "request_code")?; - let profile_name_key = JString::from_str(env, "profile_name")?; - let profile_name_value = JString::from_str(env, profile_name)?; - let dinput_key = JString::from_str(env, "dinput")?; - let deadzone_key = JString::from_str(env, "deadzone")?; + let args_key = JString::from_str(env, "args")?; + let mut args = vec![ + JString::from_str(env, "--configure-input-profile")?, + JString::from_str(env, &profile_name)?, + JString::from_str(env, "--deadzone")?, + JString::from_str(env, &deadzone.to_string())?, + ]; + if dinput { + args.push(JString::from_str(env, "--use-dinput")?); + } + let empty_arg = JString::from_str(env, "")?; + let j_args = JObjectArray::::new(env, args.len(), empty_arg)?; + for (i, arg) in args.iter().enumerate() { + j_args.set_element(env, i, arg)?; + } let intent = AndroidIntent::new(env)? .set_class_name(env, &package_name, &class_name)? - .put_extra_string(env, &profile_name_key, &profile_name_value)? - .put_extra_boolean(env, &dinput_key, dinput)? - .put_extra_int(env, &deadzone_key, deadzone)? - .put_extra_int(env, &request_code_key, CONFIGURE_INPUT_PROFILE)?; + .put_extra_string_array(env, &args_key, &j_args)?; activity .as_ref() @@ -259,42 +262,50 @@ fn start_run_rom_on_jvm( let class_name = JString::from_str(env, "io.github.gopher64.gopher64.N64Activity")?; let file_path_key = JString::from_str(env, "file_path")?; - let file_path_value = JString::from_str(env, file_path.to_str().unwrap())?; - let overclock_key = JString::from_str(env, "overclock")?; - let disable_expansion_pak_key = JString::from_str(env, "disable_expansion_pak")?; - let request_code_key = JString::from_str(env, "request_code")?; - let mut intent = AndroidIntent::new(env)? - .set_class_name(env, &package_name, &class_name)? - .put_extra_int(env, &request_code_key, RUN_ROM)? - .put_extra_string(env, &file_path_key, &file_path_value)? - .put_extra_boolean(env, &overclock_key, game_settings.overclock)? - .put_extra_boolean( - env, - &disable_expansion_pak_key, - game_settings.disable_expansion_pak, - )?; + let file_path = file_path.to_str().unwrap(); + let cheats_path_key = JString::from_str(env, "cheats_path")?; + let cheats_path = app + .internal_data_path() + .unwrap() + .join("cache") + .join("cheats.json"); + + let args_key = JString::from_str(env, "args")?; + let mut args = vec![ + JString::from_str(env, file_path)?, + JString::from_str(env, "--fullscreen")?, + JString::from_str(env, "--overclock")?, + JString::from_str(env, &game_settings.overclock.to_string())?, + JString::from_str(env, "--disable-expansion-pak")?, + JString::from_str(env, &game_settings.disable_expansion_pak.to_string())?, + ]; if let Some(netplay) = netplay { - let netplay_peer_addr_key = JString::from_str(env, "netplay_peer_addr")?; - let netplay_player_number_key = JString::from_str(env, "netplay_player_number")?; - let netplay_peer_addr_value = JString::from_str(env, &netplay.peer_addr.to_string())?; - let cheats_key = JString::from_str(env, "cheats")?; - let cheats_path = ui::get_dirs().cache_dir.join("cheats.json"); - let cheats_value = JString::from_str(env, cheats_path.to_str().unwrap())?; + args.push(JString::from_str(env, "--netplay-peer-addr")?); + args.push(JString::from_str(env, &netplay.peer_addr.to_string())?); + args.push(JString::from_str(env, "--netplay-player-number")?); + args.push(JString::from_str(env, &netplay.player_number.to_string())?); + args.push(JString::from_str(env, "--cheats")?); + args.push(JString::from_str(env, cheats_path.to_str().unwrap())?); - let f = std::fs::File::create(cheats_path).unwrap(); + let f = std::fs::File::create(&cheats_path).unwrap(); serde_json::to_writer_pretty(f, &game_settings.cheats).unwrap(); - - intent = intent - .put_extra_string(env, &netplay_peer_addr_key, &netplay_peer_addr_value)? - .put_extra_int( - env, - &netplay_player_number_key, - netplay.player_number as jint, - )? - .put_extra_string(env, &cheats_key, &cheats_value)?; } + let empty_arg = JString::from_str(env, "")?; + let j_args = JObjectArray::::new(env, args.len(), empty_arg)?; + for (i, arg) in args.iter().enumerate() { + j_args.set_element(env, i, arg)?; + } + + let file_path_string = JString::from_str(env, file_path)?; + let cheats_path_string = JString::from_str(env, cheats_path.to_str().unwrap())?; + let intent = AndroidIntent::new(env)? + .set_class_name(env, &package_name, &class_name)? + .put_extra_string(env, &file_path_key, &file_path_string)? + .put_extra_string(env, &cheats_path_key, &cheats_path_string)? + .put_extra_string_array(env, &args_key, &j_args)?; + weak.upgrade_in_event_loop(move |handle| handle.set_game_running(true)) .unwrap(); From f80f0f5f02b23dc454c8b833702564614e6dbcf4 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 27 May 2026 10:11:48 +0200 Subject: [PATCH 0942/1117] handle pause on android (#958) --- parallel-rdp/interface.cpp | 6 ++++++ src/device/vi.rs | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index d962666..2e6329d 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -266,6 +266,12 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { joystick_event->joystick_id = event->jdevice.which; joystick_event->connected = false; SDL_RunOnMainThread(add_joystick_event, joystick_event, false); + } else if (event->type == SDL_EVENT_WILL_ENTER_BACKGROUND) { + wsi->end_frame(); + wsi->deinit_surface_and_swapchain(); + } else if (event->type == SDL_EVENT_RENDER_DEVICE_RESET) { + wsi->init_surface_swapchain(); + wsi->begin_frame(); } return 0; diff --git a/src/device/vi.rs b/src/device/vi.rs index 9cc072a..7f1ebd3 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -145,6 +145,8 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { speed_limiter(device, speed_limiter_toggled); } + unsafe { sdl3_sys::events::SDL_PumpEvents() }; + ui::video::update_screen(); device.vi.vi_counter += 1; device.vi.elapsed_time += device.vi.frame_time; @@ -160,8 +162,6 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { } } - unsafe { sdl3_sys::events::SDL_PumpEvents() }; - /* toggle vi field if in interlaced mode */ device.vi.field ^= (device.vi.regs[VI_STATUS_REG] >> 6) & 0x1; From 69e3ebcc2622961558e63fbb1dbcdfcaab794013 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 27 May 2026 12:03:36 +0200 Subject: [PATCH 0943/1117] match controllers on android (#959) * match controllers on android * more * more --- src/ui/android.rs | 7 +++---- src/ui/input.rs | 31 +++++++++++++++++++++++++++---- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/ui/android.rs b/src/ui/android.rs index 5151889..2f8afdf 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -132,7 +132,6 @@ bind_java_type! { fn get_vendor_id() -> jint, fn get_product_id() -> jint, fn get_name() -> JString, - fn get_descriptor() -> JString, }, } @@ -395,10 +394,10 @@ fn list_controllers_on_jvm(env: &mut Env<'_>) -> jni::errors::Result Date: Wed, 27 May 2026 13:17:27 +0200 Subject: [PATCH 0944/1117] Update android manifest (#960) * Update android manifest * more --- android-project/app/build.gradle.kts | 12 ++-- android-project/app/proguard-rules.pro | 63 ++++++++++++++++++- .../app/src/main/AndroidManifest.xml | 12 +++- 3 files changed, 80 insertions(+), 7 deletions(-) diff --git a/android-project/app/build.gradle.kts b/android-project/app/build.gradle.kts index a01f7fd..09ff966 100644 --- a/android-project/app/build.gradle.kts +++ b/android-project/app/build.gradle.kts @@ -2,6 +2,10 @@ plugins { alias(libs.plugins.android.application) } +kotlin { + jvmToolchain(17) +} + android { namespace = "io.github.gopher64.gopher64" compileSdk { @@ -28,17 +32,15 @@ android { buildTypes { release { signingConfig = signingConfigs["debug"] - isMinifyEnabled = false + isMinifyEnabled = true + isShrinkResources = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - } + packaging { jniLibs { excludes.add("lib/**/libsevenz_rust2*.so") diff --git a/android-project/app/proguard-rules.pro b/android-project/app/proguard-rules.pro index 481bb43..e11af23 100644 --- a/android-project/app/proguard-rules.pro +++ b/android-project/app/proguard-rules.pro @@ -18,4 +18,65 @@ # If you keep the line number information, uncomment this to # hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file +#-renamesourcefileattribute SourceFile + +-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.SDLActivity { + java.lang.String nativeGetHint(java.lang.String); # Java-side doesn't use this, so it gets minified, but C-side still tries to register it + java.lang.String clipboardGetText(); + boolean clipboardHasText(); + void clipboardSetText(java.lang.String); + int createCustomCursor(int[], int, int, int, int); + void destroyCustomCursor(int); + android.app.Activity getContext(); + boolean getManifestEnvironmentVariables(); + android.view.Surface getNativeSurface(); + void initTouch(); + boolean isAndroidTV(); + boolean isChromebook(); + boolean isDeXMode(); + boolean isTablet(); + void manualBackButton(); + int messageboxShowMessageBox(int, java.lang.String, java.lang.String, int[], int[], java.lang.String[], int[]); + void minimizeWindow(); + boolean openURL(java.lang.String); + void requestPermission(java.lang.String, int); + boolean showToast(java.lang.String, int, int, int, int); + boolean sendMessage(int, int); + boolean setActivityTitle(java.lang.String); + boolean setCustomCursor(int); + void setOrientation(int, int, boolean, java.lang.String); + boolean setRelativeMouseEnabled(boolean); + boolean setSystemCursor(int); + void setWindowStyle(boolean); + boolean shouldMinimizeOnFocusLoss(); + boolean showTextInput(int, int, int, int, int); + boolean supportsRelativeMouse(); + int openFileDescriptor(java.lang.String, java.lang.String); + boolean showFileDialog(java.lang.String[], boolean, boolean, int); + java.lang.String getPreferredLocales(); + java.lang.String formatLocale(java.util.Locale); +} + +-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.HIDDeviceManager { + void closeDevice(int); + boolean initialize(boolean, boolean); + boolean openDevice(int); + boolean readReport(int, byte[], boolean); + int writeReport(int, byte[], boolean); +} + +-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.SDLAudioManager { + void registerAudioDeviceCallback(); + void unregisterAudioDeviceCallback(); + void audioSetThreadPriority(boolean, int); +} + +-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.SDLControllerManager { + void joystickSetSensorsEnabled(int, boolean); + void pollInputDevices(); + void joystickSetLED(int, int, int, int); + void pollHapticDevices(); + void hapticRun(int, float, int); + void hapticRumble(int, float, float, int); + void hapticStop(int); +} diff --git a/android-project/app/src/main/AndroidManifest.xml b/android-project/app/src/main/AndroidManifest.xml index cb6793a..01f5b35 100644 --- a/android-project/app/src/main/AndroidManifest.xml +++ b/android-project/app/src/main/AndroidManifest.xml @@ -4,12 +4,22 @@ + + + + android:label="Gopher64" + android:hardwareAccelerated="true"> From a9f7285c0f46ca3ef408e77fb48f78c1f9f15df2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 27 May 2026 14:11:02 +0200 Subject: [PATCH 0945/1117] auto set version (#961) --- android-project/app/build.gradle.kts | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/android-project/app/build.gradle.kts b/android-project/app/build.gradle.kts index 09ff966..262343a 100644 --- a/android-project/app/build.gradle.kts +++ b/android-project/app/build.gradle.kts @@ -1,3 +1,5 @@ +import groovy.json.JsonSlurper + plugins { alias(libs.plugins.android.application) } @@ -20,8 +22,8 @@ android { applicationId = "io.github.gopher64.gopher64" minSdk = 34 targetSdk = 36 - versionCode = 1 - versionName = "1.1.20" + versionCode = semverToVersionCode(cargoPackageVersion()) + versionName = cargoPackageVersion() ndk { abiFilters.addAll(listOf("arm64-v8a", "x86_64")) } @@ -48,6 +50,26 @@ android { } } +@Suppress("UNCHECKED_CAST") +fun cargoPackageVersion(packageName: String = "gopher64"): String { + val repoRoot = rootDir.parentFile + val jsonText = providers.exec { + workingDir(repoRoot) + commandLine("cargo", "metadata", "--format-version", "1", "--no-deps") + }.standardOutput.asText.get() + + val parsedJson = JsonSlurper().parseText(jsonText) as Map + val packages = parsedJson["packages"] as List> + return packages.first { it["name"] == packageName }["version"] as String +} + +fun semverToVersionCode(version: String): Int { + val parts = version.substringBefore('-').split(".") + val (major, minor, patch) = Triple(parts[0].toInt(), parts[1].toInt(), parts[2].toInt()) + + return major * 1_000_000 + minor * 1_000 + patch +} + val ndkBuild = tasks.register("ndkBuild") { val isRelease = gradle.startParameter.taskNames.any { it.endsWith("Release", ignoreCase = true) } workingDir = rootDir.parentFile From dc6138076feccd14f18380f6cf16911b89b2058d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 27 May 2026 14:23:43 +0200 Subject: [PATCH 0946/1117] use const for unknown name (#962) --- src/ui/android.rs | 2 +- src/ui/input.rs | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/ui/android.rs b/src/ui/android.rs index 2f8afdf..f5b49d3 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -392,7 +392,7 @@ fn list_controllers_on_jvm(env: &mut Env<'_>) -> jni::errors::Result Vec { for joystick in get_joysticks().iter() { let name = unsafe { sdl3_sys::joystick::SDL_GetJoystickNameForID(*joystick) }; controllers.push(if name.is_null() { - "Unknown controller".to_string() + UNKNOWN_CONTROLLER_NAME.to_string() } else { unsafe { std::ffi::CStr::from_ptr(name).to_str().unwrap() }.to_string() }); @@ -1184,7 +1186,7 @@ pub fn init(ui: &mut ui::Ui) { { unsafe { std::ffi::CStr::from_ptr(name).to_str().unwrap() }.to_string() } else { - "Unknown controller".to_string() + UNKNOWN_CONTROLLER_NAME.to_string() }; let vendor_id = From 81a3cea9c7bf00b532a9148b4db30774a692187c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 27 May 2026 15:39:37 +0200 Subject: [PATCH 0947/1117] fix ra init on android (#963) * fix ra init on android * more * more --- retroachievements/retroachievements.c | 3 +- src/device.rs | 10 +++-- src/lib.rs | 63 ++++++++++++++------------- 3 files changed, 41 insertions(+), 35 deletions(-) diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index 62f0dc2..533fdc0 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -327,7 +327,8 @@ static void event_handler(const rc_client_event_t *event, rc_client_t *client) { void ra_init_client(bool hardcore, bool challenge, bool leaderboard) { // Create the client instance (using a global variable simplifies this // example) - g_client = rc_client_create(read_memory, server_call); + if (!g_client) + g_client = rc_client_create(read_memory, server_call); g_rdram = NULL; g_rdram_size = 0; diff --git a/src/device.rs b/src/device.rs index ae4d4d3..3727d22 100644 --- a/src/device.rs +++ b/src/device.rs @@ -51,7 +51,7 @@ pub async fn run_game( device: &mut Device, rom_contents: &[u8], game_settings: ui::GameSettings, - discord_rich_presence: bool, + ra_config: retroachievements::RAConfig, ) { device.cpu.overclock = game_settings.overclock; if game_settings.disable_expansion_pak { @@ -74,8 +74,12 @@ pub async fn run_game( ui::input::init(&mut device.ui); // must be after video init - let (discord_watch_tx, discord_handle) = - retroachievements::load_game(rom_contents, rom_contents.len(), discord_rich_presence).await; + let (discord_watch_tx, discord_handle) = if ra_config.enabled && device.netplay.is_none() { + retroachievements::load_game(rom_contents, rom_contents.len(), ra_config.rich_presence) + .await + } else { + (None, None) + }; mi::init(device); pif::init(device); diff --git a/src/lib.rs b/src/lib.rs index 7312390..39f1f1d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -156,11 +156,10 @@ pub async fn run(args: Args, arg_count: usize) -> std::io::Result<()> { let mut shutdown_tx = None; let mut usb_handle = None; - let rich_presence = if let Some(peer_addr) = args.netplay_peer_addr + if let Some(peer_addr) = args.netplay_peer_addr && let Some(player_number) = args.netplay_player_number { device.netplay = Some(netplay::init(peer_addr.parse().unwrap(), player_number)); - false } else { for i in 0..4 { if device.ui.config.input.transfer_pak[i] @@ -176,39 +175,39 @@ pub async fn run(args: Args, arg_count: usize) -> std::io::Result<()> { if device.ui.config.emulation.usb { (shutdown_tx, usb_handle, device.ui.usb) = ui::usb::init(); } + } - let file_path = dirs.config_dir.join("retroachievements.json"); - if let ra_config = std::fs::read(&file_path).unwrap_or_default() - && let ra_config = - serde_json::from_slice::(ra_config.as_ref()) - .unwrap_or_default() - && (ra_config.enabled || args.ra_username.is_some()) - { - let username = args.ra_username.unwrap_or(ra_config.username); - retroachievements::init_client( - if cfg!(ra_hardcore_enabled) { - ra_config.hardcore - } else { - false - }, - ra_config.challenge, - ra_config.leaderboard, - ); - - let (tx, rx) = tokio::sync::oneshot::channel::(); - if let Some(password) = args.ra_password { - retroachievements::login_user(username, password, tx); - } else if !ra_config.token.is_empty() { - retroachievements::login_token_user(username, ra_config.token, tx); + let file_path = dirs.config_dir.join("retroachievements.json"); + let ra_config = if let ra_config = std::fs::read(&file_path).unwrap_or_default() + && let ra_config = + serde_json::from_slice::(ra_config.as_ref()) + .unwrap_or_default() + && (ra_config.enabled || args.ra_username.is_some()) + { + let username = args.ra_username.unwrap_or(ra_config.username.clone()); + retroachievements::init_client( + if cfg!(ra_hardcore_enabled) { + ra_config.hardcore } else { - tx.send(false).unwrap(); - } + false + }, + ra_config.challenge, + ra_config.leaderboard, + ); - rx.await.unwrap(); - ra_config.rich_presence + let (tx, rx) = tokio::sync::oneshot::channel::(); + if let Some(password) = args.ra_password { + retroachievements::login_user(username, password, tx); + } else if !ra_config.token.is_empty() { + retroachievements::login_token_user(username, ra_config.token.clone(), tx); } else { - false + tx.send(false).unwrap(); } + + rx.await.unwrap(); + ra_config + } else { + retroachievements::RAConfig::default() }; device::run_game( @@ -220,10 +219,12 @@ pub async fn run(args: Args, arg_count: usize) -> std::io::Result<()> { cheats, load_savestate_slot: args.load_state, }, - rich_presence, + ra_config, ) .await; + // on Android, the client is shut down in the app_window function + #[cfg(not(target_os = "android"))] retroachievements::shutdown_client(); if device.netplay.is_some() { From 14b973ec5f04df883fb811e839f8eb4effb43dd2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 27 May 2026 18:24:25 +0200 Subject: [PATCH 0948/1117] remove event watch on close (#964) --- parallel-rdp/interface.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 2e6329d..cefb0cc 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -446,6 +446,8 @@ void rdp_close() { delete wsi_platform; wsi_platform = nullptr; } + + SDL_RemoveEventWatch(sdl_event_filter, nullptr); } static void calculate_viewport(float *x, float *y, float *width, float *height, From 9dfc42c7235490e618ff753f8257ab2b2355b225 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 27 May 2026 20:45:43 +0200 Subject: [PATCH 0949/1117] use setSustainedPerformanceMode (#965) * use setSustainedPerformanceMode * more --- .../app/src/main/AndroidManifest.xml | 1 + .../io/github/gopher64/gopher64/N64Activity.kt | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/android-project/app/src/main/AndroidManifest.xml b/android-project/app/src/main/AndroidManifest.xml index 01f5b35..1fd901b 100644 --- a/android-project/app/src/main/AndroidManifest.xml +++ b/android-project/app/src/main/AndroidManifest.xml @@ -19,6 +19,7 @@ diff --git a/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt b/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt index dff3c9f..bcd1a5c 100644 --- a/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt +++ b/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt @@ -1,12 +1,24 @@ package io.github.gopher64.gopher64 import android.content.Intent +import android.os.PowerManager +import android.content.Context +import android.os.Bundle +import android.util.Log import org.libsdl.app.SDLActivity class N64Activity : SDLActivity() { - companion object { - const val CONFIGURE_INPUT_PROFILE = 2 - const val RUN_ROM = 3 + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + val powerManager = getContext().getSystemService(Context.POWER_SERVICE) as PowerManager + + if (powerManager.isSustainedPerformanceModeSupported) { + Log.v("SDL", "Enabling sustained performance mode") + window.setSustainedPerformanceMode(true) + } else { + Log.v("SDL", "Sustained performance mode not supported") + } } override fun getLibraries(): Array = arrayOf( From 3197d415e0aa4b7caf33f79ddfa9e281de98ffbd Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 28 May 2026 11:12:40 +0200 Subject: [PATCH 0950/1117] timeout handles (#966) * timeout handles * more --- src/retroachievements.rs | 9 +++++++-- src/ui/usb.rs | 8 ++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/retroachievements.rs b/src/retroachievements.rs index 8778b2a..3f6a59f 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -181,11 +181,16 @@ pub async fn unload_game( discord_watch_tx: Option>, discord_handle: Option>, ) { - if let Some(discord_handle) = discord_handle + if let Some(mut discord_handle) = discord_handle && let Some(discord_watch_tx) = discord_watch_tx { let _ = discord_watch_tx.send(()); - discord_handle.await.unwrap(); + if tokio::time::timeout(std::time::Duration::from_secs(1), &mut discord_handle) + .await + .is_err() + { + discord_handle.abort(); + } } unsafe { ra_unload_game() }; } diff --git a/src/ui/usb.rs b/src/ui/usb.rs index 1e0a14f..9546935 100644 --- a/src/ui/usb.rs +++ b/src/ui/usb.rs @@ -179,8 +179,12 @@ pub async fn close( usb_handle: Option>, ) { let _ = shutdown_tx.send(()); - if let Some(handle) = usb_handle { - handle.await.unwrap(); + if let Some(mut handle) = usb_handle + && tokio::time::timeout(std::time::Duration::from_secs(1), &mut handle) + .await + .is_err() + { + handle.abort(); } } From cb734f8df1f245af47b6e8d7e95821ecefd8f9be Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 28 May 2026 11:21:58 +0200 Subject: [PATCH 0951/1117] fix overflow in load state (#967) * fix overflow in load state * more --- src/savestates.rs | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/savestates.rs b/src/savestates.rs index 41a91cf..a60bb43 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -124,40 +124,40 @@ pub fn load_savestate(device: &mut device::Device) { && let Ok(save_bytes) = ui::storage::decompress_file(savestate, "saves") && let Ok(rdp_state) = ui::storage::decompress_file(savestate, "rdp_state") && let Ok(ra_state) = ui::storage::decompress_file(savestate, "ra_state") - && let Ok(state) = postcard::from_bytes::(&device_bytes) + && let Ok(mut state) = postcard::from_bytes::(&device_bytes) && let Ok(saves) = postcard::from_bytes(&save_bytes) && device.rdram.size == state.rdram.size { device.ui.storage.saves = saves; - device.cpu = state.cpu; - device.pif = state.pif; + std::mem::swap(&mut device.cpu, &mut state.cpu); + std::mem::swap(&mut device.pif, &mut state.pif); let rom = device.cart.rom.clone(); - device.cart = state.cart; + std::mem::swap(&mut device.cart, &mut state.cart); device.cart.rom = rom; - device.memory = state.memory; - device.rsp = state.rsp; - device.rdp = state.rdp; + std::mem::swap(&mut device.memory, &mut state.memory); + std::mem::swap(&mut device.rsp, &mut state.rsp); + std::mem::swap(&mut device.rdp, &mut state.rdp); device.rdram.mem.clone_from(&state.rdram.mem); device.rdram.regs = state.rdram.regs; - device.mi = state.mi; - device.pi = state.pi; - device.vi = state.vi; - device.ai = state.ai; - device.si = state.si; - device.ri = state.ri; - device.vru = state.vru; - device.cheats = state.cheats; + std::mem::swap(&mut device.mi, &mut state.mi); + std::mem::swap(&mut device.pi, &mut state.pi); + std::mem::swap(&mut device.vi, &mut state.vi); + std::mem::swap(&mut device.ai, &mut state.ai); + std::mem::swap(&mut device.si, &mut state.si); + std::mem::swap(&mut device.ri, &mut state.ri); + std::mem::swap(&mut device.vru, &mut state.vru); + std::mem::swap(&mut device.cheats, &mut state.cheats); let mut tpak_rom = [vec![], vec![], vec![], vec![]]; for (i, item) in tpak_rom.iter_mut().enumerate() { *item = device.transferpaks[i].cart.rom.clone(); } - device.transferpaks = state.transferpaks; + std::mem::swap(&mut device.transferpaks, &mut state.transferpaks); for (i, item) in tpak_rom.iter().enumerate() { device.transferpaks[i].cart.rom = item.clone(); } From e0efa80f44e498ec8385b5280522219aed8c17ec Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 28 May 2026 11:56:35 +0200 Subject: [PATCH 0952/1117] Don't reload RDP processor (#968) * change rdram pointer * more * more * more * more * more * more * more --- build.rs | 1 - parallel-rdp/interface.cpp | 21 ++++++++++----------- parallel-rdp/interface.hpp | 3 +-- src/ui/video.rs | 3 +-- 4 files changed, 12 insertions(+), 16 deletions(-) diff --git a/build.rs b/build.rs index fba6984..89f3ead 100644 --- a/build.rs +++ b/build.rs @@ -202,7 +202,6 @@ fn main() { .allowlist_function("rdp_process_commands") .allowlist_function("rdp_onscreen_message") .allowlist_function("rdp_check_callback") - .allowlist_function("rdp_new_processor") .allowlist_function("rdp_check_framebuffers") .allowlist_function("rdp_state_size") .allowlist_function("rdp_save_state") diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index cefb0cc..f54d2d5 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -285,15 +285,7 @@ JoystickEvent get_joystick_event() { return joystick_event; } -void rdp_new_processor(GFX_INFO _gfx_info) { - gfx_info = _gfx_info; - - sync_signal = 0; - rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); - - if (processor) { - delete processor; - } +static void rdp_new_processor() { RDP::CommandProcessorFlags flags = 0; if (gfx_info.upscale == 2) { @@ -380,7 +372,7 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, return; } - rdp_new_processor(gfx_info); + rdp_new_processor(); if (!processor->device_is_supported()) { rdp_close(); @@ -413,6 +405,9 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, achievement_progress_indicator_image = Vulkan::ImageHandle(); fps_image = Vulkan::ImageHandle(); display_fps = false; + + sync_signal = 0; + rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); } void rdp_close() { @@ -700,7 +695,11 @@ void rdp_save_state(uint8_t *state) { memcpy(state, &rdp_device, sizeof(RDP_DEVICE)); } -void rdp_load_state(const uint8_t *state) { +void rdp_load_state(GFX_INFO _gfx_info, const uint8_t *state) { + sync_signal = 0; + rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); + + gfx_info = _gfx_info; memcpy(&rdp_device, state, sizeof(RDP_DEVICE)); } diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index d19e010..4086309 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -58,11 +58,10 @@ void rdp_render_frame(); CALL_BACK rdp_check_callback(); uint64_t rdp_process_commands(); void rdp_onscreen_message(const char *message, MESSAGE_LENGTH milliseconds); -void rdp_new_processor(GFX_INFO _gfx_info); void rdp_check_framebuffers(uint32_t address, uint32_t length); size_t rdp_state_size(); void rdp_save_state(uint8_t *state); -void rdp_load_state(const uint8_t *state); +void rdp_load_state(GFX_INFO _gfx_info, const uint8_t *state); void rdp_set_fps(uint32_t fps, uint32_t vis); JoystickEvent get_joystick_event(); diff --git a/src/ui/video.rs b/src/ui/video.rs index 7e84432..70a1c34 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -168,8 +168,7 @@ pub fn save_state(rdp_state: *mut u8) { pub fn load_state(device: &mut device::Device, rdp_state: *const u8) { let gfx_info = build_gfx_info(device); unsafe { - rdp_new_processor(gfx_info); - rdp_load_state(rdp_state); + rdp_load_state(gfx_info, rdp_state); for reg in 0..device::vi::VI_REGS_COUNT { rdp_set_vi_register(reg as u32, device.vi.regs[reg]) } From e23894c2e6de1661733f164693e9b07a574f8f18 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 28 May 2026 12:04:44 +0200 Subject: [PATCH 0953/1117] make usb handle same as discord (#969) --- src/lib.rs | 5 ++--- src/ui/usb.rs | 13 ++++++++----- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 39f1f1d..00efe19 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -243,9 +243,8 @@ pub async fn run(args: Args, arg_count: usize) -> std::io::Result<()> { } } } - if let Some(shutdown_tx) = &shutdown_tx { - ui::usb::close(shutdown_tx, usb_handle).await; - } + + ui::usb::close(shutdown_tx, usb_handle).await; } else if arg_count > 1 { let mut config = ui::config::Config::new(); diff --git a/src/ui/usb.rs b/src/ui/usb.rs index 9546935..6cf5843 100644 --- a/src/ui/usb.rs +++ b/src/ui/usb.rs @@ -175,16 +175,19 @@ pub fn init() -> ( } pub async fn close( - shutdown_tx: &tokio::sync::watch::Sender<()>, + shutdown_tx: Option>, usb_handle: Option>, ) { - let _ = shutdown_tx.send(()); if let Some(mut handle) = usb_handle - && tokio::time::timeout(std::time::Duration::from_secs(1), &mut handle) + && let Some(shutdown_tx) = shutdown_tx + { + let _ = shutdown_tx.send(()); + if tokio::time::timeout(std::time::Duration::from_secs(1), &mut handle) .await .is_err() - { - handle.abort(); + { + handle.abort(); + } } } From bb32a0a8ba43c6757c07fc0065650d62d422c22a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 28 May 2026 13:04:52 +0200 Subject: [PATCH 0954/1117] update android release settings (#970) * update android release settings * more * more * more * more --- .github/workflows/build.yml | 31 +++++++++++++++++++++++++++- android-project/.gitignore | 1 + android-project/app/build.gradle.kts | 23 ++++++++++++++++++++- 3 files changed, 53 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 94840c4..a4b818e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -270,15 +270,44 @@ jobs: uses: android-actions/setup-android@v4 with: packages: "platforms;android-${{ matrix.platform }} ndk;${{ matrix.ndk }}" + - name: Decode keystore and create jks + if: ${{ github.ref_type == 'tag' }} + working-directory: android-project + run: | + echo "${{ secrets.ANDROID_KEYSTORE }}" | base64 --decode > keystore.jks + + cat < keystore.properties + storePassword=${{ secrets.ANDROID_STORE_PASSWORD }} + keyPassword=${{ secrets.ANDROID_KEY_PASSWORD }} + keyAlias=gopher64 + storeFile=keystore.jks + EOF - name: Build working-directory: android-project run: | cargo install cargo-ndk ./gradlew assemble${{ env.BUILD_PROFILE == 'release' && 'Release' || 'Debug' }} + mkdir output + cp app/build/outputs/apk/${{ env.BUILD_DIR }}/app-${{ env.BUILD_DIR }}.apk output/Gopher64-android.apk + - name: Upload file + uses: actions/upload-artifact@v7 + with: + name: gopher64-android + path: android-project/output/Gopher64-android.apk + archive: false + - name: Setup butler + if: ${{ github.ref_type == 'tag' }} + uses: remarkablegames/setup-butler@v3 + - name: Upload to itch.io + if: ${{ github.ref_type == 'tag' }} + run: | + butler push android-project/output/Gopher64-android.apk loganmc10/gopher64:android --userversion ${GITHUB_REF_NAME#v} + env: + BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }} collect-artifacts: name: Collect release artifacts - needs: [build-linux, build-windows, build-macos] + needs: [build-linux, build-windows, build-macos, build-android] if: github.ref_type == 'tag' runs-on: ubuntu-latest permissions: diff --git a/android-project/.gitignore b/android-project/.gitignore index 6edf443..c55ef93 100644 --- a/android-project/.gitignore +++ b/android-project/.gitignore @@ -6,6 +6,7 @@ jniLibs/ # Local configuration file (sdk path, etc) local.properties +keystore.properties # Log/OS Files *.log diff --git a/android-project/app/build.gradle.kts b/android-project/app/build.gradle.kts index 262343a..ea9436c 100644 --- a/android-project/app/build.gradle.kts +++ b/android-project/app/build.gradle.kts @@ -1,4 +1,6 @@ import groovy.json.JsonSlurper +import java.util.Properties +import java.io.FileInputStream plugins { alias(libs.plugins.android.application) @@ -8,6 +10,12 @@ kotlin { jvmToolchain(17) } +val keystorePropertiesFile = rootProject.file("keystore.properties") +val keystoreProperties = Properties() +if (keystorePropertiesFile.exists()) { + keystoreProperties.load(FileInputStream(keystorePropertiesFile)) +} + android { namespace = "io.github.gopher64.gopher64" compileSdk { @@ -31,9 +39,22 @@ android { testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } + signingConfigs { + if (keystorePropertiesFile.exists()) { + create("release") { + keyAlias = keystoreProperties["keyAlias"] as String + keyPassword = keystoreProperties["keyPassword"] as String + storeFile = file(keystoreProperties["storeFile"] as String) + storePassword = keystoreProperties["storePassword"] as String + } + } + } + buildTypes { release { - signingConfig = signingConfigs["debug"] + if (keystorePropertiesFile.exists()) { + signingConfig = signingConfigs["release"] + } isMinifyEnabled = true isShrinkResources = true proguardFiles( From 5b0cc0130e0541e600a4242f5e1f7cc076f51848 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 28 May 2026 13:24:49 +0200 Subject: [PATCH 0955/1117] minSdk to 33 for android (#971) --- .github/workflows/build.yml | 2 +- android-project/app/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a4b818e..86717b7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -254,7 +254,7 @@ jobs: matrix: include: - os: ubuntu-24.04 - platform: 34 + platform: 33 ndk: 27.3.13750724 steps: - uses: actions/checkout@v6 diff --git a/android-project/app/build.gradle.kts b/android-project/app/build.gradle.kts index ea9436c..70503e8 100644 --- a/android-project/app/build.gradle.kts +++ b/android-project/app/build.gradle.kts @@ -28,7 +28,7 @@ android { defaultConfig { applicationId = "io.github.gopher64.gopher64" - minSdk = 34 + minSdk = 33 targetSdk = 36 versionCode = semverToVersionCode(cargoPackageVersion()) versionName = cargoPackageVersion() From a8dbbba6e37d0fff8c476343beed8aaf4b6d23c4 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 28 May 2026 14:58:26 +0200 Subject: [PATCH 0956/1117] update sessions async (#972) * update sessions async * more --- src/ui/netplay.rs | 191 +++++++++++++++++++++++++--------------------- 1 file changed, 106 insertions(+), 85 deletions(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 6ff8143..94bf762 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -1,7 +1,7 @@ use crate::device; use crate::ui; use crate::ui::gui::{AppWindow, NetplayDevice, open_uri, run_rom, save_settings}; -use futures::{SinkExt, StreamExt}; +use futures::{SinkExt, StreamExt, future::join_all}; use sha2::{Digest, Sha256}; use slint::{ComponentHandle, Model}; use tokio_tungstenite::tungstenite::Bytes; @@ -326,6 +326,101 @@ fn manage_websocket( }); } +async fn get_rooms_from_server( + server_name: String, + server_url: String, +) -> ( + Vec>, + Vec, + Vec, +) { + let mut sessions = vec![]; + let mut room_urls = vec![]; + let mut room_ports = vec![]; + if let Ok(Ok((socket, _response))) = tokio::time::timeout( + std::time::Duration::from_secs(2), + tokio_tungstenite::connect_async(&server_url), + ) + .await + { + let (mut write, mut read) = socket.split(); + + let now_utc = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_millis() + .to_string(); + let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); + let request_rooms = NetplayMessage { + message_type: "request_get_rooms".to_string(), + player_name: None, + client_sha: None, + netplay_version: Some(NETPLAY_VERSION), + player_names: None, + emulator: Some(EMU_NAME.to_string()), + accept: None, + rooms: None, + message: None, + auth_time: Some(now_utc), + auth: Some( + hasher + .finalize() + .iter() + .map(|b| format!("{:02x}", b)) + .collect(), + ), + room: None, + }; + write + .send(Message::Binary(Bytes::from( + serde_json::to_vec(&request_rooms).unwrap(), + ))) + .await + .unwrap(); + + if let Some(Ok(response)) = read.next().await + && let Ok(message) = serde_json::from_slice::(&response.into_data()) + && message.message_type == "reply_get_rooms" + && message.accept.unwrap() == 0 + && let Some(rooms) = message.rooms + { + for room in rooms { + let mut session = vec![]; + room_urls.push(server_url.as_str().into()); + room_ports.push(room.port.unwrap()); + + session.push(slint::StandardListViewItem::from( + slint::SharedString::from(&server_name), + )); + session.push(slint::StandardListViewItem::from( + slint::SharedString::from(room.room_name.unwrap()), + )); + session.push(slint::StandardListViewItem::from( + slint::SharedString::from(room.game_name.unwrap()), + )); + session.push(slint::StandardListViewItem::from( + slint::SharedString::from(if room.protected.unwrap() { + "True" + } else { + "False" + }), + )); + session.push(slint::StandardListViewItem::from( + slint::SharedString::from( + if room.features.unwrap_or_default().contains_key("cheats") { + "True" + } else { + "False" + }, + ), + )); + sessions.push(session); + } + } + } + (sessions, room_urls, room_ports) +} + fn update_sessions(weak: slint::Weak) { let task = ui::WEB_CLIENT .get("https://dispatch.gopher64.com/getServers") @@ -373,91 +468,17 @@ fn update_sessions(weak: slint::Weak) { let mut sessions = vec![]; let mut room_urls = vec![]; let mut room_ports = vec![]; - for (server_name, server_url) in servers.iter() { - if let Ok(Ok((socket, _response))) = tokio::time::timeout( - std::time::Duration::from_secs(2), - tokio_tungstenite::connect_async(server_url.clone()), - ) - .await - { - let (mut write, mut read) = socket.split(); - - let now_utc = std::time::SystemTime::now() - .duration_since(std::time::UNIX_EPOCH) - .unwrap() - .as_millis() - .to_string(); - let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); - let request_rooms = NetplayMessage { - message_type: "request_get_rooms".to_string(), - player_name: None, - client_sha: None, - netplay_version: Some(NETPLAY_VERSION), - player_names: None, - emulator: Some(EMU_NAME.to_string()), - accept: None, - rooms: None, - message: None, - auth_time: Some(now_utc), - auth: Some( - hasher - .finalize() - .iter() - .map(|b| format!("{:02x}", b)) - .collect(), - ), - room: None, - }; - write - .send(Message::Binary(Bytes::from( - serde_json::to_vec(&request_rooms).unwrap(), - ))) - .await - .unwrap(); - - if let Some(Ok(response)) = read.next().await - && let Ok(message) = - serde_json::from_slice::(&response.into_data()) - && message.message_type == "reply_get_rooms" - && message.accept.unwrap() == 0 - && let Some(rooms) = message.rooms - { - for room in rooms { - let mut session = vec![]; - room_urls.push(server_url.into()); - room_ports.push(room.port.unwrap()); - - session.push(slint::StandardListViewItem::from( - slint::SharedString::from(server_name), - )); - session.push(slint::StandardListViewItem::from( - slint::SharedString::from(room.room_name.unwrap()), - )); - session.push(slint::StandardListViewItem::from( - slint::SharedString::from(room.game_name.unwrap()), - )); - session.push(slint::StandardListViewItem::from( - slint::SharedString::from(if room.protected.unwrap() { - "True" - } else { - "False" - }), - )); - session.push(slint::StandardListViewItem::from( - slint::SharedString::from( - if room.features.unwrap_or_default().contains_key("cheats") - { - "True" - } else { - "False" - }, - ), - )); - sessions.push(session); - } - } - } + let server_tasks = servers.iter().map(|(server_name, server_url)| { + get_rooms_from_server(server_name.clone(), server_url.clone()) + }); + for (server_sessions, server_room_urls, server_room_ports) in + join_all(server_tasks).await + { + sessions.extend(server_sessions); + room_urls.extend(server_room_urls); + room_ports.extend(server_room_ports); } + weak2 .upgrade_in_event_loop(move |handle| { let sessions_vec = slint::VecModel::default(); From 40ab4ceb2b1fa60bb369678fa1f2a1f862f5839c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 28 May 2026 15:10:39 +0200 Subject: [PATCH 0957/1117] fix name of apk (#973) --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 86717b7..b3c7a4c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -288,12 +288,12 @@ jobs: cargo install cargo-ndk ./gradlew assemble${{ env.BUILD_PROFILE == 'release' && 'Release' || 'Debug' }} mkdir output - cp app/build/outputs/apk/${{ env.BUILD_DIR }}/app-${{ env.BUILD_DIR }}.apk output/Gopher64-android.apk + cp app/build/outputs/apk/${{ env.BUILD_DIR }}/app-${{ env.BUILD_DIR }}.apk output/gopher64-android.apk - name: Upload file uses: actions/upload-artifact@v7 with: name: gopher64-android - path: android-project/output/Gopher64-android.apk + path: android-project/output/gopher64-android.apk archive: false - name: Setup butler if: ${{ github.ref_type == 'tag' }} @@ -301,7 +301,7 @@ jobs: - name: Upload to itch.io if: ${{ github.ref_type == 'tag' }} run: | - butler push android-project/output/Gopher64-android.apk loganmc10/gopher64:android --userversion ${GITHUB_REF_NAME#v} + butler push android-project/output/gopher64-android.apk loganmc10/gopher64:android --userversion ${GITHUB_REF_NAME#v} env: BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }} From 8a8596a66b8ddb6dde27dfcff7f5e60bfc98a075 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 28 May 2026 15:25:23 +0200 Subject: [PATCH 0958/1117] clippy fixes (#974) --- src/device/cart/rom.rs | 2 +- src/device/cpu_instructions.rs | 2 +- src/ui/usb.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 94f2c1e..51389de 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -149,7 +149,7 @@ pub fn init(device: &mut device::Device, rom_file: &[u8]) { } fn is_system_pal(country: u8) -> bool { - let pal_codes: [u8; 8] = [b'D', b'F', b'I', b'P', b'S', b'U', b'X', b'Y']; + let pal_codes: [u8; 8] = *b"DFIPSUXY"; for i in pal_codes { if country == i { return true; diff --git a/src/device/cpu_instructions.rs b/src/device/cpu_instructions.rs index c8d1f41..fea35e6 100644 --- a/src/device/cpu_instructions.rs +++ b/src/device/cpu_instructions.rs @@ -763,7 +763,7 @@ pub fn cache(device: &mut device::Device, opcode: u32) { } } _ => { - panic!("unknown cache code {:#01x}", rt(opcode)) + panic!("unknown cache code {:x}", rt(opcode)) } } } diff --git a/src/ui/usb.rs b/src/ui/usb.rs index 6cf5843..9644d1b 100644 --- a/src/ui/usb.rs +++ b/src/ui/usb.rs @@ -18,7 +18,7 @@ fn respond_to_handshake(usb_tx: &tokio::sync::broadcast::Sender, data: ui::usb::send_to_usb( usb_tx, ui::usb::UsbData { - data: [b'N', b'6', b'4'].to_vec(), + data: b"N64".to_vec(), data_type: DATATYPE_TCPTEST, data_size: 3, }, From 34e55d9cb5347c64b237de9053485b1730e2a923 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 28 May 2026 15:54:42 +0200 Subject: [PATCH 0959/1117] fix small speed limiter bug (#975) * fix small speed limiter bug * more --- src/device/vi.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index 7f1ebd3..1651b02 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -141,8 +141,12 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { } } + if speed_limiter_toggled { + reset_pace_deadline(device); + } + if device.vi.vi_counter.is_multiple_of(device.vi.limit_freq) && device.vi.enable_speed_limiter { - speed_limiter(device, speed_limiter_toggled); + speed_limiter(device); } unsafe { sdl3_sys::events::SDL_PumpEvents() }; @@ -182,7 +186,8 @@ pub fn init(device: &mut device::Device) { } } -fn speed_limiter(device: &mut device::Device, mut speed_limiter_toggled: bool) { +fn speed_limiter(device: &mut device::Device) { + let mut speed_limiter_toggled = false; let interval = std::time::Duration::from_secs_f64(device.vi.frame_time * device.vi.limit_freq as f64); From 8bd4c936f80387397b40ac88a0b704f6bea7329a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 28 May 2026 20:09:08 +0200 Subject: [PATCH 0960/1117] bump rust (#976) --- Cargo.lock | 64 ++++++++++++++++++++++----------------------- Cargo.toml | 4 +-- rust-toolchain.toml | 2 +- 3 files changed, 35 insertions(+), 35 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2af93b0..fa80975 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -115,9 +115,9 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aes" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66bd29a732b644c0431c6140f370d097879203d79b80c94a6747ba0872adaef8" +checksum = "f1fc76eaeac4c9164506c466d4ffdd8ec9d0c5bf57ee97177c4d8eceb3a0e138" dependencies = [ "cipher", "cpubits", @@ -1490,9 +1490,9 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", @@ -2213,7 +2213,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.20" +version = "1.1.22" dependencies = [ "bindgen", "cc", @@ -2438,9 +2438,9 @@ checksum = "48ce8546b993eaf241d69ded33b1be6d205dd9857ec879d9d18bd05d3676e144" [[package]] name = "http" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "8be7462df143984c4598a256ef469b251d7d7f9e271135073e78fc535414f3d0" dependencies = [ "bytes", "itoa", @@ -2486,9 +2486,9 @@ dependencies = [ [[package]] name = "hyper" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +checksum = "eb92f162bf56536459fc83c79b974bb12837acfed43d6bc370a7916d0ae15ecc" dependencies = [ "atomic-waker", "bytes", @@ -3399,14 +3399,14 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" +checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" dependencies = [ "bitflags 2.11.1", "libc", "plain", - "redox_syscall 0.7.5", + "redox_syscall 0.8.0", ] [[package]] @@ -3481,9 +3481,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5" [[package]] name = "loop9" @@ -3565,9 +3565,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] name = "memmap2" @@ -3650,9 +3650,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", "wasi", @@ -4393,9 +4393,9 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "orbclient" -version = "0.3.54" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a570f6bca41d29acb2139229a7c873ec99bc9a313bd10804081d89bfac8ff329" +checksum = "5df339f526ea9a60e371768d50efc2f2508c7203290731565d1f7a6f71d21747" dependencies = [ "libc", "libredox", @@ -5005,9 +5005,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4666a1a60d8412eab19d94f6d13dcc9cea0a5ef4fdf6a5db306537413c661b1b" +checksum = "7c7591fa2c6b601dfcfe5f043f65a1c39fcdf50efefcd7f1572e538c1f4b398d" dependencies = [ "bitflags 2.11.1", ] @@ -5060,9 +5060,9 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] name = "reqwest" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62e0021ea2c22aed41653bc7e1419abb2c97e038ff2c33d0e1309e49a97deec0" +checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" dependencies = [ "base64", "bytes", @@ -5856,9 +5856,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", "windows-sys 0.61.2", @@ -6407,9 +6407,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.11+spec-1.1.0" +version = "0.25.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" +checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" dependencies = [ "indexmap", "toml_datetime 1.1.1+spec-1.1.0", @@ -8204,18 +8204,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "bce33a6288fa3f072a8c2c7d0f2fdbb90e28298f0135c1f99b96c3db2efcc60b" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "8fd425244944f4ab65ccff928e7323354c5a018c75838362fdce749dfad2ee1e" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index d2e46a8..9c54207 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "gopher64" -version = "1.1.20" +version = "1.1.22" edition = "2024" -rust-version = "1.95.0" +rust-version = "1.96.0" [features] default = ["gui"] diff --git a/rust-toolchain.toml b/rust-toolchain.toml index f25b5b1..0f87b448 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.95.0" +channel = "1.96.0" From f7ed2c5273a8e2e1f6435acff4459f24acd0ac29 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 28 May 2026 20:33:11 +0200 Subject: [PATCH 0961/1117] move itch upload (#977) --- .github/workflows/build.yml | 49 +++++++++---------------------------- 1 file changed, 12 insertions(+), 37 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b3c7a4c..2a18212 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -79,15 +79,6 @@ jobs: name: gopher64-${{ matrix.arch }} path: output/gopher64-${{ matrix.arch }} archive: false - - name: Setup butler - if: ${{ github.ref_type == 'tag' }} - uses: remarkablegames/setup-butler@v3 - - name: Upload to itch.io - if: ${{ github.ref_type == 'tag' }} - run: | - butler push output/gopher64-${{ matrix.arch }} loganmc10/gopher64:${{ matrix.arch }} --userversion ${GITHUB_REF_NAME#v} - env: - BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }} build-windows: runs-on: ${{ matrix.os }} @@ -161,16 +152,6 @@ jobs: path: output-signed/gopher64-${{ matrix.arch }}.exe archive: false overwrite: true - - name: Setup butler - if: ${{ github.ref_type == 'tag' }} - uses: remarkablegames/setup-butler@v3 - - name: Upload to itch.io - if: ${{ github.ref_type == 'tag' }} - shell: bash - run: | - butler push output-signed/gopher64-${{ matrix.arch }}.exe loganmc10/gopher64:${{ matrix.arch }} --userversion ${GITHUB_REF_NAME#v} - env: - BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }} build-macos: runs-on: macos-15 @@ -237,15 +218,6 @@ jobs: with: name: gopher64-${{ matrix.arch }} path: target/${{ matrix.target }}/${{ env.BUILD_DIR }}/bundle/osx - - name: Setup butler - if: ${{ github.ref_type == 'tag' }} - uses: remarkablegames/setup-butler@v3 - - name: Upload to itch.io - if: ${{ github.ref_type == 'tag' }} - run: | - butler push target/${{ matrix.target }}/${{ env.BUILD_DIR }}/bundle/osx/Gopher64.app loganmc10/gopher64:${{ matrix.arch }} --userversion ${GITHUB_REF_NAME#v} - env: - BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }} build-android: runs-on: ${{ matrix.os }} @@ -295,15 +267,6 @@ jobs: name: gopher64-android path: android-project/output/gopher64-android.apk archive: false - - name: Setup butler - if: ${{ github.ref_type == 'tag' }} - uses: remarkablegames/setup-butler@v3 - - name: Upload to itch.io - if: ${{ github.ref_type == 'tag' }} - run: | - butler push android-project/output/gopher64-android.apk loganmc10/gopher64:android --userversion ${GITHUB_REF_NAME#v} - env: - BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }} collect-artifacts: name: Collect release artifacts @@ -323,3 +286,15 @@ jobs: with: draft: true files: release-artifacts/* + - name: Setup butler + uses: remarkablegames/setup-butler@v3 + - name: Upload to itch.io + run: | + butler push release-artifacts/gopher64-linux-x86_64 loganmc10/gopher64:linux-x86_64 --userversion ${GITHUB_REF_NAME#v} + butler push release-artifacts/gopher64-linux-aarch64 loganmc10/gopher64:linux-aarch64 --userversion ${GITHUB_REF_NAME#v} + butler push release-artifacts/gopher64-windows-x86_64.exe loganmc10/gopher64:windows-x86_64 --userversion ${GITHUB_REF_NAME#v} + butler push release-artifacts/gopher64-windows-aarch64.exe loganmc10/gopher64:windows-aarch64 --userversion ${GITHUB_REF_NAME#v} + butler push release-artifacts/gopher64-macos-aarch64.zip loganmc10/gopher64:macos-aarch64 --userversion ${GITHUB_REF_NAME#v} + butler push release-artifacts/gopher64-android.apk loganmc10/gopher64:android --userversion ${GITHUB_REF_NAME#v} + env: + BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }} From 1df705c4f9a38f6a8596278c9cf63b9e44f26ee3 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 28 May 2026 21:17:07 +0200 Subject: [PATCH 0962/1117] fix keystore path (#978) --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2a18212..0afbdf3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -246,7 +246,7 @@ jobs: if: ${{ github.ref_type == 'tag' }} working-directory: android-project run: | - echo "${{ secrets.ANDROID_KEYSTORE }}" | base64 --decode > keystore.jks + echo "${{ secrets.ANDROID_KEYSTORE }}" | base64 --decode > app/keystore.jks cat < keystore.properties storePassword=${{ secrets.ANDROID_STORE_PASSWORD }} From a78f47ecfe5a5930865c9ac528c97072394b504a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 28 May 2026 21:53:59 +0200 Subject: [PATCH 0963/1117] fix download folder (#979) --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0afbdf3..992228f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -280,6 +280,7 @@ jobs: uses: actions/download-artifact@v8 with: skip-decompress: true + merge-multiple: true path: release-artifacts - name: Add files to release uses: softprops/action-gh-release@v3 From 0745d75c2f42306056ec77addd1c710c5b2f5e87 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 28 May 2026 22:29:10 +0200 Subject: [PATCH 0964/1117] Add Android APK download link to README (#980) --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index f5fa442..714932d 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,9 @@ Linux: * Standalone executable: [gopher64-linux-x86_64](https://github.com/gopher64/gopher64/releases/latest/download/gopher64-linux-x86_64) * Flatpak: `flatpak install flathub io.github.gopher64.gopher64` +Android: +* APK: [gopher64-android.apk](https://github.com/gopher64/gopher64/releases/latest/download/gopher64-android.apk) + ## wiki https://github.com/gopher64/gopher64/wiki From 57807f09c8ee6841f017c1459dc6253142761cf3 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 29 May 2026 07:42:41 +0200 Subject: [PATCH 0965/1117] update NDK (#981) * update NDK * Add ANDROID_NDK_ROOT environment variable --- .github/workflows/build.yml | 2 +- android-project/app/build.gradle.kts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 992228f..fff937c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -227,7 +227,7 @@ jobs: include: - os: ubuntu-24.04 platform: 33 - ndk: 27.3.13750724 + ndk: 29.0.14206865 steps: - uses: actions/checkout@v6 with: diff --git a/android-project/app/build.gradle.kts b/android-project/app/build.gradle.kts index 70503e8..636d252 100644 --- a/android-project/app/build.gradle.kts +++ b/android-project/app/build.gradle.kts @@ -24,7 +24,7 @@ android { } } - ndkVersion = "27.3.13750724" + ndkVersion = "29.0.14206865" defaultConfig { applicationId = "io.github.gopher64.gopher64" @@ -100,6 +100,7 @@ val ndkBuild = tasks.register("ndkBuild") { var minSdk = android.defaultConfig.minSdk var ndkDir = androidComponents.sdkComponents.ndkDirectory.get().asFile.absolutePath environment("ANDROID_NDK_HOME", "$ndkDir") + environment("ANDROID_NDK_ROOT", "$ndkDir") environment("LIBCLANG_PATH", "$ndkDir/toolchains/llvm/prebuilt/linux-x86_64/musl/lib") val jniType = if (isRelease) "release" else "debug" From d36ce10ab3e2998627db0bae57ca05af0776ceb6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 29 May 2026 07:57:57 +0200 Subject: [PATCH 0966/1117] remove nested listview for cheats (#982) --- src/ui/gui/cheat_page.slint | 65 +++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 35 deletions(-) diff --git a/src/ui/gui/cheat_page.slint b/src/ui/gui/cheat_page.slint index ef21d99..84f0832 100644 --- a/src/ui/gui/cheat_page.slint +++ b/src/ui/gui/cheat_page.slint @@ -47,43 +47,38 @@ export component Cheats inherits Page { Rectangle { } - if CheatsData.cheats.length > 0:ListView { - mouse-drag-pan-enabled: true; - preferred-height: root.height; - horizontal-stretch: 1; - for data in CheatsData.cheats: VerticalBox { - width: parent.width; - Text { - text: data.cheat_name; - font-size: 16px; - wrap: word-wrap; - } - - if data.notes != "":Text { - text: data.notes; - wrap: word-wrap; - } - - if data.options.length == 0: Switch { - checked: data.enabled; - toggled => { - data.enabled = self.checked; - cheat_toggled(CheatsData.cheat_game_crc,data.cheat_name,"",self.checked); - } - } - for item in data.options: CheckBox { - text: item.option; - enabled: !data.enabled || (data.enabled && item.enabled); - checked: item.enabled; - toggled => { - item.enabled = self.checked; - data.enabled = self.checked; - cheat_toggled(CheatsData.cheat_game_crc,data.cheat_name,item.option,self.checked); - } - } - Rectangle { } + for data in CheatsData.cheats: VerticalBox { + Text { + text: data.cheat_name; + font-size: 16px; + wrap: word-wrap; } + + if data.notes != "":Text { + text: data.notes; + wrap: word-wrap; + } + + if data.options.length == 0: Switch { + checked: data.enabled; + toggled => { + data.enabled = self.checked; + cheat_toggled(CheatsData.cheat_game_crc,data.cheat_name,"",self.checked); + } + } + for item in data.options: CheckBox { + text: item.option; + enabled: !data.enabled || (data.enabled && item.enabled); + checked: item.enabled; + toggled => { + item.enabled = self.checked; + data.enabled = self.checked; + cheat_toggled(CheatsData.cheat_game_crc,data.cheat_name,item.option,self.checked); + } + } + Rectangle { } } + if CheatsData.cheats.length == 0 && CheatsData.cheat_game_name != "": Text { text: @tr("No Cheats Available"); } From 7379484932daedef4a85650501a17a312e09f240 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 29 May 2026 10:06:46 +0200 Subject: [PATCH 0967/1117] add load state func for audio (#983) * add load state func for audio * more * more --- src/device/ai.rs | 3 +-- src/savestates.rs | 3 +-- src/ui/audio.rs | 21 +++++++++++++++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/device/ai.rs b/src/device/ai.rs index 6b31019..c5e606d 100644 --- a/src/device/ai.rs +++ b/src/device/ai.rs @@ -147,8 +147,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u AI_DACRATE_REG => { if device.ai.regs[reg as usize] != value & mask { device.ai.freq = device.vi.clock / (1 + (value & mask)) as u64; - ui::audio::close_game_audio(&mut device.ui); - ui::audio::init_game_audio(device) + ui::audio::update_freq(device); } device::memory::masked_write_32(&mut device.ai.regs[reg as usize], value, mask) } diff --git a/src/savestates.rs b/src/savestates.rs index a60bb43..3a18d34 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -217,8 +217,7 @@ pub fn load_savestate(device: &mut device::Device) { } } - ui::audio::close_game_audio(&mut device.ui); - ui::audio::init_game_audio(device); + ui::audio::update_freq(device); ui::video::load_state(device, rdp_state.as_ptr()); retroachievements::set_rdram(device.rdram.mem.as_ptr(), device.rdram.size as usize); diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 4141645..0ab046b 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -27,6 +27,27 @@ unsafe extern "C" fn audio_callback( } } +pub fn update_freq(device: &mut device::Device) { + let game_audio_spec = sdl3_sys::audio::SDL_AudioSpec { + format: sdl3_sys::audio::SDL_AUDIO_S16LE, + freq: device.ai.freq as i32, + channels: 2, + }; + unsafe { + sdl3_sys::audio::SDL_SetAudioStreamFormat( + device.ui.audio.audio_stream, + &game_audio_spec, + std::ptr::null(), + ); + } + + if device.ai.regs[device::ai::AI_STATUS_REG] & device::ai::AI_STATUS_BUSY != 0 { + resume_game_audio(&mut device.ui); + } else { + pause_game_audio(&mut device.ui); + } +} + pub fn init_game_audio(device: &mut device::Device) { let game_audio_spec = sdl3_sys::audio::SDL_AudioSpec { format: sdl3_sys::audio::SDL_AUDIO_S16LE, From 31420b67774604aab824f8c1a7f44eade72675ef Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 29 May 2026 15:01:45 +0200 Subject: [PATCH 0968/1117] move state compression into thread (#984) --- src/savestates.rs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/savestates.rs b/src/savestates.rs index 3a18d34..a720d52 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -80,16 +80,19 @@ pub fn create_savestate(device: &device::Device) { if let Ok(device_data) = postcard::to_stdvec(device) && let Ok(saves_data) = postcard::to_stdvec(&device.ui.storage.saves) - && let Ok(compressed_file) = ui::storage::compress_file(&[ - (&device_data, "device"), - (&saves_data, "saves"), - (&rdp_state, "rdp_state"), - (&ra_state, "ra_state"), - ]) { tokio::spawn(async move { - if let Err(e) = tokio::fs::write(save_path, compressed_file).await { - eprintln!("Error writing savestate: {}", e); + if let Ok(compressed_file) = ui::storage::compress_file(&[ + (&device_data, "device"), + (&saves_data, "saves"), + (&rdp_state, "rdp_state"), + (&ra_state, "ra_state"), + ]) { + if let Err(e) = tokio::fs::write(save_path, compressed_file).await { + eprintln!("Error writing savestate: {}", e); + } + } else { + eprintln!("Error compressing savestate"); } }); ui::video::onscreen_message( From 24e5a3fac4c5fb1b9a3c6491d3b66637f6e70ba8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 29 May 2026 16:51:27 +0200 Subject: [PATCH 0969/1117] move joystick update (#985) --- src/device/controller.rs | 4 ++-- src/ui.rs | 7 +++++++ src/ui/input.rs | 7 ++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/device/controller.rs b/src/device/controller.rs index 1fd76eb..6a761fd 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -58,12 +58,12 @@ pub fn process(device: &mut device::Device, channel: usize) { let offset = device.pif.channels[channel].rx_buf.unwrap(); let input = if let Some(netplay) = &mut device.netplay { if netplay.player_number as usize == channel { - let local_input = ui::input::get(&mut device.ui, 0); + let local_input = ui::input::get(&mut device.ui, 0, device.vi.vi_counter); netplay::send_input(netplay, local_input); } netplay::get_input(device, channel) } else { - ui::input::get(&mut device.ui, channel) + ui::input::get(&mut device.ui, channel, device.vi.vi_counter) }; device.pif.ram[offset..offset + 4].copy_from_slice(&input.data.to_ne_bytes()); diff --git a/src/ui.rs b/src/ui.rs index 87d6488..b1a14bf 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -42,6 +42,7 @@ pub struct Audio { pub struct Input { pub keyboard_state: *const bool, + pub last_polled: u64, pub controllers: [input::Controllers; 4], } @@ -97,6 +98,11 @@ pub fn sdl_hints() { sdl3_sys::everything::SDL_HINT_ANDROID_ALLOW_RECREATE_ACTIVITY, hint.as_ptr(), ); + let hint = std::ffi::CString::new("0").unwrap(); + sdl3_sys::everything::SDL_SetHint( + sdl3_sys::everything::SDL_HINT_AUTO_UPDATE_JOYSTICKS, + hint.as_ptr(), + ); } } @@ -165,6 +171,7 @@ impl Ui { let (vis_tx, vis_rx) = tokio::sync::mpsc::channel(1000); Ui { input: Input { + last_polled: 0, controllers: [ input::Controllers { game_controller: std::ptr::null_mut(), diff --git a/src/ui/input.rs b/src/ui/input.rs index 635716f..77e06ba 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -490,9 +490,14 @@ fn handle_hotkeys(keys: u32, last_key_state: u32) { } } -pub fn get(ui: &mut ui::Ui, channel: usize) -> InputData { +pub fn get(ui: &mut ui::Ui, channel: usize, vi_counter: u64) -> InputData { handle_joystick_events(ui); + if ui.input.last_polled != vi_counter { + ui.input.last_polled = vi_counter; + unsafe { sdl3_sys::joystick::SDL_UpdateJoysticks() }; + } + let profile_name = &ui.config.input.input_profile_binding[channel]; let Some(profile) = ui.config.input.input_profiles.get(profile_name) else { eprintln!("Invalid profile name: {profile_name}"); From 399b5d65e50b48c74534526848969a31af7e3896 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 30 May 2026 09:43:22 +0200 Subject: [PATCH 0970/1117] Fix MBC3 latch (#987) * Fix MBC3 latch * more --- src/device/controller/gbcart.rs | 27 +++++++-------------------- src/device/controller/transferpak.rs | 1 - 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index 318b460..2fc9871 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -19,7 +19,6 @@ pub struct GbCart { pub mbc1_mode: bool, pub ram_bank: u16, pub rom_bank: u32, - pub latch: bool, pub rtc_regs: [u8; MBC3_RTC_REGS_COUNT], pub rtc_regs_latch: [u8; MBC3_RTC_REGS_COUNT], pub last_elapsed_time: i64, @@ -255,12 +254,9 @@ fn write_mbc3( } else if address < 0x6000 { cart.ram_bank = (value & 0xf) as u16; } else if address < 0x8000 { - if cart.cart_type == CartType::MBC3RamBattRtc { - if !cart.latch && (value & 0x1) != 0 { - update_rtc_regs(cart, elapsed_time); - cart.rtc_regs_latch = cart.rtc_regs; - } - cart.latch = (value & 0x1) != 0; + if cart.cart_type == CartType::MBC3RamBattRtc && (value & 0x1) != 0 { + update_rtc_regs(cart, elapsed_time); + cart.rtc_regs_latch = cart.rtc_regs; } } else if (0xa000..0xc000).contains(&address) { if !cart.ram_enabled { @@ -284,7 +280,6 @@ fn read_mbc3( address: u16, data: usize, size: usize, - elapsed_time: i64, ) { if address < 0x4000 { let banked_address = address & 0x3FFF; @@ -309,15 +304,8 @@ fn read_mbc3( .unwrap_or(&vec![0; size]), ); } else if cart.cart_type == CartType::MBC3RamBattRtc { - if cart.latch { - for i in 0..size { - pif_ram[data + i] = cart.rtc_regs_latch[cart.ram_bank as usize - 0x8]; - } - } else { - update_rtc_regs(cart, elapsed_time); - for i in 0..size { - pif_ram[data + i] = cart.rtc_regs[cart.ram_bank as usize - 0x8]; - } + for i in 0..size { + pif_ram[data + i] = cart.rtc_regs_latch[cart.ram_bank as usize - 0x8]; } } } else { @@ -395,7 +383,6 @@ pub fn read( address: u16, data: usize, size: usize, - elapsed_time: i64, ) { if !cart.enabled { for i in 0..size { @@ -405,8 +392,8 @@ pub fn read( } match cart.cart_type { CartType::MBC1RamBatt => read_mbc1(pif_ram, cart, address, data, size), - CartType::MBC3RamBatt => read_mbc3(pif_ram, cart, address, data, size, elapsed_time), - CartType::MBC3RamBattRtc => read_mbc3(pif_ram, cart, address, data, size, elapsed_time), + CartType::MBC3RamBatt => read_mbc3(pif_ram, cart, address, data, size), + CartType::MBC3RamBattRtc => read_mbc3(pif_ram, cart, address, data, size), CartType::MBC5RamBatt => read_mbc5(pif_ram, cart, address, data, size), _ => panic!("Unsupported cart type"), } diff --git a/src/device/controller/transferpak.rs b/src/device/controller/transferpak.rs index 2505532..ce28291 100644 --- a/src/device/controller/transferpak.rs +++ b/src/device/controller/transferpak.rs @@ -58,7 +58,6 @@ pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usi 0x4000 * pak.bank + (address & 0x7fff) - 0x4000, data, size, - device.vi.elapsed_time as i64, ); } _ => { From 3fdbe9a4f7e8d2b3545555009457a8c6499afa2d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 30 May 2026 13:36:32 +0200 Subject: [PATCH 0971/1117] implement default for Ui (#989) * implement default for Ui * more --- src/device.rs | 2 +- src/device/vi.rs | 4 ++-- src/ui.rs | 16 +++++++++++----- src/ui/config.rs | 15 ++++++++++----- src/ui/input.rs | 1 + src/ui/storage.rs | 7 ++++--- 6 files changed, 29 insertions(+), 16 deletions(-) diff --git a/src/device.rs b/src/device.rs index 3727d22..612bb5f 100644 --- a/src/device.rs +++ b/src/device.rs @@ -226,7 +226,7 @@ pub fn get_rom_contents(file_path: &std::path::PathBuf) -> Option> { pub struct Device { #[serde(skip)] pub netplay: Option, - #[serde(skip, default = "ui::Ui::new")] + #[serde(skip)] pub ui: ui::Ui, pub byte_swap: usize, pub save_state: bool, diff --git a/src/device/vi.rs b/src/device/vi.rs index 1651b02..c2a620a 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -111,7 +111,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u let current_origin = device.vi.regs[reg as usize]; device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); if current_origin != device.vi.regs[reg as usize] { - let _ = device.ui.video.fps_tx.try_send(true); + let _ = device.ui.video.fps_tx.as_ref().unwrap().try_send(true); } } _ => { @@ -127,7 +127,7 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { } ui::video::render_frame(); - let _ = device.ui.video.vis_tx.try_send(true); + let _ = device.ui.video.vis_tx.as_ref().unwrap().try_send(true); retroachievements::do_frame(); diff --git a/src/ui.rs b/src/ui.rs index b1a14bf..2c3cf69 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -28,24 +28,27 @@ pub static WEB_CLIENT: std::sync::LazyLock = std::sync::LazyLoc .unwrap() }); -#[derive(Clone)] +#[derive(Default, Clone)] pub struct Dirs { pub config_dir: std::path::PathBuf, pub data_dir: std::path::PathBuf, pub cache_dir: std::path::PathBuf, } +#[derive(Default)] pub struct Audio { pub audio_stream: *mut sdl3_sys::audio::SDL_AudioStream, pub gain: f32, } +#[derive(Default)] pub struct Input { pub keyboard_state: *const bool, pub last_polled: u64, pub controllers: [input::Controllers; 4], } +#[derive(Default)] pub struct Storage { pub save_type: Vec, pub paths: storage::Paths, @@ -53,15 +56,17 @@ pub struct Storage { pub save_state_slot: u32, } +#[derive(Default)] pub struct Video { pub window: *mut sdl3_sys::video::SDL_Window, pub fullscreen: bool, - pub fps_tx: tokio::sync::mpsc::Sender, + pub fps_tx: Option>, pub fps_rx: Option>, - pub vis_tx: tokio::sync::mpsc::Sender, + pub vis_tx: Option>, pub vis_rx: Option>, } +#[derive(Default)] pub struct Usb { pub usb_tx: Option>, pub cart_rx: Option>, @@ -75,6 +80,7 @@ pub struct GameSettings { pub load_savestate_slot: Option, } +#[derive(Default)] pub struct Ui { pub dirs: Dirs, pub config: config::Config, @@ -254,9 +260,9 @@ impl Ui { video: Video { window: std::ptr::null_mut(), fullscreen: false, - fps_tx, + fps_tx: Some(fps_tx), fps_rx: Some(fps_rx), - vis_tx, + vis_tx: Some(vis_tx), vis_rx: Some(vis_rx), }, usb: Usb { diff --git a/src/ui/config.rs b/src/ui/config.rs index 2b51543..05a15c8 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -33,7 +33,7 @@ pub struct InputProfile { pub deadzone: i32, } -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Default, serde::Serialize, serde::Deserialize)] pub struct Input { pub input_profiles: std::collections::BTreeMap, pub input_profile_binding: [String; 4], @@ -45,7 +45,7 @@ pub struct Input { pub emulate_vru: bool, } -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Default, serde::Serialize, serde::Deserialize)] pub struct Video { pub upscale: u32, pub ssaa: bool, @@ -56,7 +56,7 @@ pub struct Video { pub crt: bool, } -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Default, serde::Serialize, serde::Deserialize)] pub struct Emulation { pub overclock: bool, pub disable_expansion_pak: bool, @@ -69,13 +69,15 @@ pub struct Cheats { std::collections::HashMap>>, } -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Default, serde::Serialize, serde::Deserialize)] pub struct Config { pub input: Input, pub video: Video, pub emulation: Emulation, pub rom_dir: std::path::PathBuf, pub recent_roms: Vec, + #[serde(skip)] + write_to_disk: bool, } impl Drop for Cheats { @@ -113,7 +115,9 @@ impl Cheats { impl Drop for Config { fn drop(&mut self) { - write_config(self); + if self.write_to_disk { + write_config(self); + } } } @@ -172,6 +176,7 @@ impl Config { }, rom_dir: std::path::PathBuf::new(), recent_roms: Vec::new(), + write_to_disk: true, } } } diff --git a/src/ui/input.rs b/src/ui/input.rs index 77e06ba..d1d5f6f 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -32,6 +32,7 @@ pub const DEADZONE_DEFAULT: i32 = 5; pub const UNKNOWN_CONTROLLER_NAME: &str = "Unknown controller"; +#[derive(Default)] pub struct Controllers { pub rumble: bool, pub game_controller: *mut sdl3_sys::gamepad::SDL_Gamepad, diff --git a/src/ui/storage.rs b/src/ui/storage.rs index cf87d56..07c837a 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -13,6 +13,7 @@ pub enum SaveTypes { Romsave, } +#[derive(Default)] pub struct Paths { pub eep_file_path: std::path::PathBuf, pub sra_file_path: std::path::PathBuf, @@ -25,19 +26,19 @@ pub struct Paths { // the bool indicates whether the save has been written to // if that is the case, it will be flushed to the disk when the program closes -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Default, serde::Serialize, serde::Deserialize)] pub struct Save { pub data: Vec, pub write_pending: bool, } -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Default, serde::Serialize, serde::Deserialize)] pub struct RomSave { pub data: std::collections::HashMap, pub write_pending: bool, } -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Default, serde::Serialize, serde::Deserialize)] pub struct Saves { pub eeprom: Save, pub sram: Save, From 7fc2412c9c645523b3b85562421b471e4e7f7ca0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 30 May 2026 14:26:38 +0200 Subject: [PATCH 0972/1117] move state to new thread (#990) * move state to new thread * more * more --- src/cheats.rs | 2 +- src/device.rs | 26 ++++++++++++++++ src/device/ai.rs | 2 +- src/device/cart.rs | 4 +-- src/device/cart/sc64.rs | 2 +- src/device/cart/sram.rs | 4 +-- src/device/controller/gbcart.rs | 2 +- src/device/controller/transferpak.rs | 2 +- src/device/controller/vru.rs | 2 +- src/device/cop0.rs | 2 +- src/device/cop1.rs | 2 +- src/device/cop2.rs | 2 +- src/device/cpu.rs | 6 ++-- src/device/memory.rs | 2 +- src/device/mi.rs | 2 +- src/device/pi.rs | 2 +- src/device/pif.rs | 2 +- src/device/rdp.rs | 2 +- src/device/rdram.rs | 2 +- src/device/ri.rs | 2 +- src/device/rsp_cpu.rs | 4 +-- src/device/rsp_interface.rs | 2 +- src/device/si.rs | 4 +-- src/device/vi.rs | 2 +- src/savestates.rs | 45 +++++++++++++++------------- src/ui.rs | 9 ++++++ src/ui/config.rs | 5 ++-- 27 files changed, 91 insertions(+), 52 deletions(-) diff --git a/src/cheats.rs b/src/cheats.rs index 571cb01..d053d2d 100644 --- a/src/cheats.rs +++ b/src/cheats.rs @@ -8,7 +8,7 @@ pub struct DecodedCheat { data: u16, } -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct Cheats { pub cheats: Vec>, pub boot: bool, diff --git a/src/device.rs b/src/device.rs index 612bb5f..286b6f3 100644 --- a/src/device.rs +++ b/src/device.rs @@ -256,6 +256,32 @@ pub fn zero_m128i() -> __m128i { } impl Device { + pub fn clone_without_ui(&self) -> Device { + Device { + netplay: None, + ui: ui::Ui::default(), + byte_swap: self.byte_swap, + save_state: self.save_state, + load_state: self.load_state, + cpu: self.cpu.clone(), + pif: self.pif.clone(), + cart: self.cart.clone(), + memory: self.memory.clone(), + rsp: self.rsp.clone(), + rdp: self.rdp.clone(), + rdram: self.rdram.clone(), + mi: self.mi.clone(), + pi: self.pi.clone(), + vi: self.vi.clone(), + ai: self.ai.clone(), + si: self.si.clone(), + ri: self.ri.clone(), + rng: self.rng.clone(), + vru: self.vru.clone(), + transferpaks: self.transferpaks.clone(), + cheats: self.cheats.clone(), + } + } pub fn new() -> Device { let mut byte_swap: usize = 0; let test: [u8; 4] = [1, 2, 3, 4]; diff --git a/src/device/ai.rs b/src/device/ai.rs index c5e606d..9823aad 100644 --- a/src/device/ai.rs +++ b/src/device/ai.rs @@ -11,7 +11,7 @@ pub const AI_REGS_COUNT: usize = 6; pub const AI_STATUS_BUSY: u32 = 0x40000000; const AI_STATUS_FULL: u32 = 0x80000000; -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct Ai { pub regs: [u32; AI_REGS_COUNT], pub fifo: [AiDma; 2], diff --git a/src/device/cart.rs b/src/device/cart.rs index c8db89f..9084906 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -21,7 +21,7 @@ const JDT_EEPROM_16K: u16 = 0xc000; /* 16k EEPROM */ const EEPROM_BLOCK_SIZE: usize = 8; pub const EEPROM_MAX_SIZE: usize = 0x800; -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct AfRtc { pub control: u16, } @@ -31,7 +31,7 @@ fn byte2bcd(mut n: u32) -> u8 { (((n / 10) << 4) | (n % 10)) as u8 } -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct Cart { #[serde(skip)] pub rom: Vec, diff --git a/src/device/cart/sc64.rs b/src/device/cart/sc64.rs index a66b9b6..9281dd9 100644 --- a/src/device/cart/sc64.rs +++ b/src/device/cart/sc64.rs @@ -20,7 +20,7 @@ pub const SC64_CFG_COUNT: usize = 15; const SC64_BUFFER_MASK: usize = 0x1FFF; const SC64_EEPROM_MASK: usize = 0xFFF; -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct Sc64 { pub buffer: Vec, pub regs: [u32; SC64_REGS_COUNT], diff --git a/src/device/cart/sram.rs b/src/device/cart/sram.rs index f3b2246..a2454a3 100644 --- a/src/device/cart/sram.rs +++ b/src/device/cart/sram.rs @@ -8,7 +8,7 @@ pub const MX29L1100_ID: u32 = 0x00c2001e; const MX29L0000_ID: u32 = 0x00c20000; const MX29L0001_ID: u32 = 0x00c20001; -#[derive(PartialEq, serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, serde::Serialize, serde::Deserialize)] pub enum FlashramMode { ReadArray, ReadSiliconId, @@ -18,7 +18,7 @@ pub enum FlashramMode { PageProgram, } -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct Flashram { pub status: u32, pub mode: FlashramMode, diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index 2fc9871..b7389f2 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -8,7 +8,7 @@ const MBC3_RTC_DAYS_L: usize = 3; const MBC3_RTC_DAYS_H: usize = 4; const MBC3_RTC_REGS_COUNT: usize = 5; -#[derive(Default, serde::Serialize, serde::Deserialize)] +#[derive(Default, Clone, serde::Serialize, serde::Deserialize)] pub struct GbCart { pub enabled: bool, #[serde(skip)] diff --git a/src/device/controller/transferpak.rs b/src/device/controller/transferpak.rs index ce28291..d77d88c 100644 --- a/src/device/controller/transferpak.rs +++ b/src/device/controller/transferpak.rs @@ -1,6 +1,6 @@ use crate::device; -#[derive(Default, serde::Serialize, serde::Deserialize)] +#[derive(Default, Clone, serde::Serialize, serde::Deserialize)] pub struct TransferPak { pub enabled: bool, pub reset_state: u8, diff --git a/src/device/controller/vru.rs b/src/device/controller/vru.rs index 65c2e86..9e2cf8b 100644 --- a/src/device/controller/vru.rs +++ b/src/device/controller/vru.rs @@ -18,7 +18,7 @@ const VOICE_STATUS_BUSY: u8 = 0x05; const JDT_VRU: u16 = 0x0100; /* VRU */ const CONT_FLAVOR: u16 = JDT_VRU; -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct Vru { pub status: u8, pub voice_state: u8, diff --git a/src/device/cop0.rs b/src/device/cop0.rs index 9eb4f9f..8e55e8d 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -91,7 +91,7 @@ const COP0_XCONTEXT_REG_MASK: u64 = const COP0_PARITYERR_REG_MASK: u64 = 0b00000000000000000000000011111111; const COP0_TAGLO_REG_MASK: u64 = 0b00001111111111111111111111000000; -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct Cop0 { pub reg_latch: u64, pub regs: [u64; COP0_REGS_COUNT], diff --git a/src/device/cop1.rs b/src/device/cop1.rs index 9bc6e2a..3b4dd4d 100644 --- a/src/device/cop1.rs +++ b/src/device/cop1.rs @@ -24,7 +24,7 @@ const FCR31_CAUSE_MASK: u32 = 0b00000000000000111111000000000000; const FCR31_ENABLE_MASK: u32 = 0b00000000000000000000111110000000; const FCR31_WRITE_MASK: u32 = 0b00000001100000111111111111111111; -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct Cop1 { pub fcr0: u32, pub fcr31: u32, diff --git a/src/device/cop2.rs b/src/device/cop2.rs index 0f6a884..12ff297 100644 --- a/src/device/cop2.rs +++ b/src/device/cop2.rs @@ -1,6 +1,6 @@ use crate::{device, savestates}; -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct Cop2 { #[serde(skip, default = "savestates::default_instructions")] pub instrs: [fn(&mut device::Device, u32); 32], diff --git a/src/device/cpu.rs b/src/device/cpu.rs index 46c86f0..e64c4f2 100644 --- a/src/device/cpu.rs +++ b/src/device/cpu.rs @@ -1,6 +1,6 @@ use crate::{device, savestates, ui}; -#[derive(PartialEq, serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, serde::Serialize, serde::Deserialize)] pub enum State { Step, Take, @@ -11,13 +11,13 @@ pub enum State { Exception, } -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct BranchState { pub state: State, pub pc: u64, } -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct Cpu { pub cop0: device::cop0::Cop0, pub cop1: device::cop1::Cop1, diff --git a/src/device/memory.rs b/src/device/memory.rs index 5f74ef8..7355a59 100644 --- a/src/device/memory.rs +++ b/src/device/memory.rs @@ -38,7 +38,7 @@ pub enum AccessSize { Icache = 32, } -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct Memory { #[serde(skip, default = "savestates::default_memory_read_fast")] pub fast_read: [fn(&device::Device, u64, AccessSize) -> u32; 0x2000], // fast_read is used for lookups that try to detect idle loops diff --git a/src/device/mi.rs b/src/device/mi.rs index 4373fd9..ae3cfdb 100644 --- a/src/device/mi.rs +++ b/src/device/mi.rs @@ -44,7 +44,7 @@ const MI_SET_RDRAM: u32 = 1 << 13; pub const MI_INIT_LENGTH_MASK: u32 = 0b1111111; -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct Mi { pub regs: [u32; MI_REGS_COUNT], } diff --git a/src/device/pi.rs b/src/device/pi.rs index 90a918a..4843871 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -28,7 +28,7 @@ const PI_STATUS_INTERRUPT: u32 = 1 << 3; const PI_STATUS_RESET: u32 = 1 << 0; const PI_STATUS_CLR_INTR: u32 = 1 << 1; -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct Pi { pub regs: [u32; PI_REGS_COUNT], } diff --git a/src/device/pif.rs b/src/device/pif.rs index e36fb7e..cb04b10 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -1,7 +1,7 @@ mod rom; use crate::device; -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct Pif { #[serde(with = "serde_big_array::BigArray")] pub rom: [u8; 1984], diff --git a/src/device/rdp.rs b/src/device/rdp.rs index d066ff2..de653b0 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -40,7 +40,7 @@ const DPC_CLR_PIPE_CTR: u32 = 1 << 7; const DPC_CLR_CMD_CTR: u32 = 1 << 8; const DPC_CLR_CLOCK_CTR: u32 = 1 << 9; -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct Rdp { pub regs_dpc: [u32; DPC_REGS_COUNT], pub regs_dps: [u32; DPS_REGS_COUNT], diff --git a/src/device/rdram.rs b/src/device/rdram.rs index a2e0496..b39a64e 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -17,7 +17,7 @@ pub const RDRAM_REGS_COUNT: usize = 10; pub const RDRAM_MASK: usize = 0xFFFFFF; -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct Rdram { pub mem: Vec, pub size: u32, diff --git a/src/device/ri.rs b/src/device/ri.rs index 3bc1ecf..090e301 100644 --- a/src/device/ri.rs +++ b/src/device/ri.rs @@ -10,7 +10,7 @@ pub const RI_REFRESH_REG: usize = 4; //const RI_WERROR_REG: usize = 7; pub const RI_REGS_COUNT: usize = 8; -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct Ri { pub regs: [u32; RI_REGS_COUNT], pub ram_init: bool, diff --git a/src/device/rsp_cpu.rs b/src/device/rsp_cpu.rs index 21d67f5..2ff0971 100644 --- a/src/device/rsp_cpu.rs +++ b/src/device/rsp_cpu.rs @@ -6,7 +6,7 @@ use crate::{device, savestates}; #[cfg(target_arch = "x86_64")] use std::arch::x86_64::*; -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct BranchState { pub state: device::cpu::State, pub pc: u32, @@ -25,7 +25,7 @@ pub enum InstructionType { Vu, } -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct Cpu { #[serde(with = "serde_big_array::BigArray")] pub instructions: [Instructions; 0x1000 / 4], diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index a5e0a00..1d62a69 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -76,7 +76,7 @@ pub struct RspDma { pub dramaddr: u32, } -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct Rsp { pub cpu: device::rsp_cpu::Cpu, pub regs: [u32; SP_REGS_COUNT], diff --git a/src/device/si.rs b/src/device/si.rs index d6830a5..3546018 100644 --- a/src/device/si.rs +++ b/src/device/si.rs @@ -16,14 +16,14 @@ pub const SI_STATUS_IO_BUSY: u32 = 1 << 1; //const SI_STATUS_DMA_ERROR: u32 = 1 << 3; const SI_STATUS_INTERRUPT: u32 = 1 << 12; -#[derive(PartialEq, serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, serde::Serialize, serde::Deserialize)] pub enum DmaDir { None, Write, Read, } -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct Si { pub regs: [u32; SI_REGS_COUNT], pub dma_dir: DmaDir, diff --git a/src/device/vi.rs b/src/device/vi.rs index c2a620a..2eee153 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -16,7 +16,7 @@ const VI_H_SYNC_REG: usize = 7; //const VI_Y_SCALE_REG: usize = 13; pub const VI_REGS_COUNT: usize = 14; -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct Vi { pub regs: [u32; VI_REGS_COUNT], pub clock: u64, diff --git a/src/savestates.rs b/src/savestates.rs index a720d52..b216333 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -78,10 +78,13 @@ pub fn create_savestate(device: &device::Device) { let save_path = device.ui.storage.paths.savestate_file_path.clone(); - if let Ok(device_data) = postcard::to_stdvec(device) - && let Ok(saves_data) = postcard::to_stdvec(&device.ui.storage.saves) - { - tokio::spawn(async move { + let device_clone = device.clone_without_ui(); + let save_state_slot = device.ui.storage.save_state_slot; + tokio::spawn(async move { + let mut error = false; + if let Ok(device_data) = postcard::to_stdvec(&device_clone) + && let Ok(saves_data) = postcard::to_stdvec(&device_clone.ui.storage.saves) + { if let Ok(compressed_file) = ui::storage::compress_file(&[ (&device_data, "device"), (&saves_data, "saves"), @@ -90,27 +93,27 @@ pub fn create_savestate(device: &device::Device) { ]) { if let Err(e) = tokio::fs::write(save_path, compressed_file).await { eprintln!("Error writing savestate: {}", e); + error = true; } } else { eprintln!("Error compressing savestate"); + error = true; } - }); - ui::video::onscreen_message( - &format!( - "Savestate created in slot {}", - device.ui.storage.save_state_slot - ), - ui::video::MESSAGE_LENGTH_MESSAGE_VERY_SHORT, - ); - } else { - ui::video::onscreen_message( - &format!( - "Failed to create savestate in slot {}", - device.ui.storage.save_state_slot - ), - ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, - ); - } + } else { + error = true; + } + if error { + ui::video::onscreen_message( + &format!("Failed to create savestate in slot {}", save_state_slot), + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, + ); + } else { + ui::video::onscreen_message( + &format!("Savestate created in slot {}", save_state_slot), + ui::video::MESSAGE_LENGTH_MESSAGE_VERY_SHORT, + ); + } + }); } pub fn load_savestate(device: &mut device::Device) { diff --git a/src/ui.rs b/src/ui.rs index 2c3cf69..255238a 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -41,6 +41,9 @@ pub struct Audio { pub gain: f32, } +unsafe impl Send for Audio {} +unsafe impl Sync for Audio {} + #[derive(Default)] pub struct Input { pub keyboard_state: *const bool, @@ -48,6 +51,9 @@ pub struct Input { pub controllers: [input::Controllers; 4], } +unsafe impl Send for Input {} +unsafe impl Sync for Input {} + #[derive(Default)] pub struct Storage { pub save_type: Vec, @@ -66,6 +72,9 @@ pub struct Video { pub vis_rx: Option>, } +unsafe impl Send for Video {} +unsafe impl Sync for Video {} + #[derive(Default)] pub struct Usb { pub usb_tx: Option>, diff --git a/src/ui/config.rs b/src/ui/config.rs index 05a15c8..c600a2d 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -137,8 +137,9 @@ impl Config { let file_path = dirs.config_dir.join("config.json"); let config_file = std::fs::read(file_path); if let Ok(config_file) = config_file { - let result = serde_json::from_slice(config_file.as_ref()); - if let Ok(result) = result { + let result = serde_json::from_slice::(config_file.as_ref()); + if let Ok(mut result) = result { + result.write_to_disk = true; return result; } } From 864175fae6fee0559cc8f74fa7410b2ded9ad3cf Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 30 May 2026 21:00:33 +0200 Subject: [PATCH 0973/1117] Rewind (#991) * rewind * more --- data/translations/de/LC_MESSAGES/gopher64.po | 47 +-- data/translations/es/LC_MESSAGES/gopher64.po | 47 +-- data/translations/fr/LC_MESSAGES/gopher64.po | 47 +-- data/translations/gopher64.pot | 47 +-- data/translations/ja/LC_MESSAGES/gopher64.po | 47 +-- data/translations/nl/LC_MESSAGES/gopher64.po | 47 +-- .../pt_BR/LC_MESSAGES/gopher64.po | 47 +-- data/translations/ru/LC_MESSAGES/gopher64.po | 47 +-- parallel-rdp/interface.cpp | 12 + parallel-rdp/interface.hpp | 1 + src/device.rs | 22 +- src/device/rdp.rs | 18 +- src/device/vi.rs | 10 +- src/lib.rs | 2 + src/savestates.rs | 298 ++++++++++-------- src/ui.rs | 5 + src/ui/config.rs | 2 + src/ui/gui.rs | 2 + src/ui/gui/appwindow.slint | 1 + src/ui/gui/settings_page.slint | 9 + src/ui/input.rs | 11 + src/ui/video.rs | 12 +- 22 files changed, 468 insertions(+), 313 deletions(-) diff --git a/data/translations/de/LC_MESSAGES/gopher64.po b/data/translations/de/LC_MESSAGES/gopher64.po index 1a56eed..18c0e7f 100644 --- a/data/translations/de/LC_MESSAGES/gopher64.po +++ b/data/translations/de/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-25 08:28+0000\n" +"POT-Creation-Date: 2026-05-30 16:03+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: German\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Spenden (über GitHub)" -#: src/ui/gui/appwindow.slint:151 +#: src/ui/gui/appwindow.slint:152 msgctxt "Menu" msgid "Local Game" msgstr "Lokales Spiel" -#: src/ui/gui/appwindow.slint:155 +#: src/ui/gui/appwindow.slint:156 msgctxt "Menu" msgid "Controller Config" msgstr "Controller-Konfiguration" -#: src/ui/gui/appwindow.slint:159 +#: src/ui/gui/appwindow.slint:160 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:163 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/appwindow.slint:167 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:171 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "Settings" msgstr "Einstellungen" -#: src/ui/gui/appwindow.slint:175 +#: src/ui/gui/appwindow.slint:176 msgctxt "Menu" msgid "About" msgstr "Über" @@ -97,7 +97,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Cheats für alle ROMs löschen" -#: src/ui/gui/cheat_page.slint:88 +#: src/ui/gui/cheat_page.slint:83 msgctxt "Cheats" msgid "No Cheats Available" msgstr "Keine Cheats verfügbar" @@ -485,62 +485,67 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Unterstützte Spiele anzeigen" -#: src/ui/gui/settings_page.slint:23 +#: src/ui/gui/settings_page.slint:24 msgctxt "Settings" msgid "Settings" msgstr "Einstellungen" -#: src/ui/gui/settings_page.slint:34 +#: src/ui/gui/settings_page.slint:35 msgctxt "Settings" msgid "Resolution:" msgstr "Auflösung:" -#: src/ui/gui/settings_page.slint:48 +#: src/ui/gui/settings_page.slint:49 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAA-Herunterskalierung" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "Pixelgenaue Skalierung" -#: src/ui/gui/settings_page.slint:64 +#: src/ui/gui/settings_page.slint:65 msgctxt "Settings" msgid "Fullscreen" msgstr "Vollbild" -#: src/ui/gui/settings_page.slint:72 +#: src/ui/gui/settings_page.slint:73 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "16:9 (gestreckt)" -#: src/ui/gui/settings_page.slint:80 +#: src/ui/gui/settings_page.slint:81 msgctxt "Settings" msgid "VSync" msgstr "VSync" -#: src/ui/gui/settings_page.slint:88 +#: src/ui/gui/settings_page.slint:89 msgctxt "Settings" msgid "Apply CRT shader" msgstr "CRT-Shader anwenden" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "N64-CPU übertakten (kann Fehler verursachen)" -#: src/ui/gui/settings_page.slint:108 +#: src/ui/gui/settings_page.slint:109 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Expansion Pak deaktivieren" -#: src/ui/gui/settings_page.slint:116 +#: src/ui/gui/settings_page.slint:117 +msgctxt "Settings" +msgid "Enable Rewind" +msgstr "Rewind aktivieren" + +#: src/ui/gui/settings_page.slint:125 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "UNFLoader emulieren" -#: src/ui/gui/settings_page.slint:124 +#: src/ui/gui/settings_page.slint:133 msgctxt "Settings" msgid "Emulate VRU" msgstr "VRU emulieren" diff --git a/data/translations/es/LC_MESSAGES/gopher64.po b/data/translations/es/LC_MESSAGES/gopher64.po index 30cc1ab..c975dbd 100644 --- a/data/translations/es/LC_MESSAGES/gopher64.po +++ b/data/translations/es/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-25 08:28+0000\n" +"POT-Creation-Date: 2026-05-30 16:03+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: Gemini\n" "Language-Team: Spanish (Spain)\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Donar (a través de GitHub)" -#: src/ui/gui/appwindow.slint:151 +#: src/ui/gui/appwindow.slint:152 msgctxt "Menu" msgid "Local Game" msgstr "Juego local" -#: src/ui/gui/appwindow.slint:155 +#: src/ui/gui/appwindow.slint:156 msgctxt "Menu" msgid "Controller Config" msgstr "Config. del mando" -#: src/ui/gui/appwindow.slint:159 +#: src/ui/gui/appwindow.slint:160 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:163 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "Cheats" msgstr "Trucos" -#: src/ui/gui/appwindow.slint:167 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:171 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "Settings" msgstr "Ajustes" -#: src/ui/gui/appwindow.slint:175 +#: src/ui/gui/appwindow.slint:176 msgctxt "Menu" msgid "About" msgstr "Acerca de" @@ -97,7 +97,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Borrar trucos de todas las ROMs" -#: src/ui/gui/cheat_page.slint:88 +#: src/ui/gui/cheat_page.slint:83 msgctxt "Cheats" msgid "No Cheats Available" msgstr "No hay trucos disponibles" @@ -485,62 +485,67 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Ver juegos compatibles" -#: src/ui/gui/settings_page.slint:23 +#: src/ui/gui/settings_page.slint:24 msgctxt "Settings" msgid "Settings" msgstr "Ajustes" -#: src/ui/gui/settings_page.slint:34 +#: src/ui/gui/settings_page.slint:35 msgctxt "Settings" msgid "Resolution:" msgstr "Resolución:" -#: src/ui/gui/settings_page.slint:48 +#: src/ui/gui/settings_page.slint:49 msgctxt "Settings" msgid "SSAA downscaling" msgstr "Reducción de escala SSAA" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "Escalado por enteros" -#: src/ui/gui/settings_page.slint:64 +#: src/ui/gui/settings_page.slint:65 msgctxt "Settings" msgid "Fullscreen" msgstr "Pantalla completa" -#: src/ui/gui/settings_page.slint:72 +#: src/ui/gui/settings_page.slint:73 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Pantalla ancha (estirado)" -#: src/ui/gui/settings_page.slint:80 +#: src/ui/gui/settings_page.slint:81 msgctxt "Settings" msgid "VSync" msgstr "Sincronización vertical (VSync)" -#: src/ui/gui/settings_page.slint:88 +#: src/ui/gui/settings_page.slint:89 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Aplicar sombreador CRT" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Overclock CPU N64 (puede causar errores)" -#: src/ui/gui/settings_page.slint:108 +#: src/ui/gui/settings_page.slint:109 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Desactivar Expansion Pak" -#: src/ui/gui/settings_page.slint:116 +#: src/ui/gui/settings_page.slint:117 +msgctxt "Settings" +msgid "Enable Rewind" +msgstr "Activar rebobinado" + +#: src/ui/gui/settings_page.slint:125 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Emular UNFLoader" -#: src/ui/gui/settings_page.slint:124 +#: src/ui/gui/settings_page.slint:133 msgctxt "Settings" msgid "Emulate VRU" msgstr "Emular VRU" diff --git a/data/translations/fr/LC_MESSAGES/gopher64.po b/data/translations/fr/LC_MESSAGES/gopher64.po index 389b0b0..4952a37 100644 --- a/data/translations/fr/LC_MESSAGES/gopher64.po +++ b/data/translations/fr/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-25 08:28+0000\n" +"POT-Creation-Date: 2026-05-30 16:03+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: French (France)\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Faire un don (via GitHub)" -#: src/ui/gui/appwindow.slint:151 +#: src/ui/gui/appwindow.slint:152 msgctxt "Menu" msgid "Local Game" msgstr "Jeu local" -#: src/ui/gui/appwindow.slint:155 +#: src/ui/gui/appwindow.slint:156 msgctxt "Menu" msgid "Controller Config" msgstr "Configuration manette" -#: src/ui/gui/appwindow.slint:159 +#: src/ui/gui/appwindow.slint:160 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:163 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "Cheats" msgstr "Triche" -#: src/ui/gui/appwindow.slint:167 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:171 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "Settings" msgstr "Paramètres" -#: src/ui/gui/appwindow.slint:175 +#: src/ui/gui/appwindow.slint:176 msgctxt "Menu" msgid "About" msgstr "À propos" @@ -97,7 +97,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Effacer la triche pour toutes les ROMs" -#: src/ui/gui/cheat_page.slint:88 +#: src/ui/gui/cheat_page.slint:83 msgctxt "Cheats" msgid "No Cheats Available" msgstr "Aucune triche disponible" @@ -486,62 +486,67 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Voir les jeux pris en charge" -#: src/ui/gui/settings_page.slint:23 +#: src/ui/gui/settings_page.slint:24 msgctxt "Settings" msgid "Settings" msgstr "Paramètres" -#: src/ui/gui/settings_page.slint:34 +#: src/ui/gui/settings_page.slint:35 msgctxt "Settings" msgid "Resolution:" msgstr "Résolution :" -#: src/ui/gui/settings_page.slint:48 +#: src/ui/gui/settings_page.slint:49 msgctxt "Settings" msgid "SSAA downscaling" msgstr "Réduction SSAA" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "Mise à l'échelle par entiers" -#: src/ui/gui/settings_page.slint:64 +#: src/ui/gui/settings_page.slint:65 msgctxt "Settings" msgid "Fullscreen" msgstr "Plein écran" -#: src/ui/gui/settings_page.slint:72 +#: src/ui/gui/settings_page.slint:73 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Écran large (étiré)" -#: src/ui/gui/settings_page.slint:80 +#: src/ui/gui/settings_page.slint:81 msgctxt "Settings" msgid "VSync" msgstr "Synchro verticale" -#: src/ui/gui/settings_page.slint:88 +#: src/ui/gui/settings_page.slint:89 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Appliquer le filtre CRT" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Surcharger le CPU N64 (risque de bugs)" -#: src/ui/gui/settings_page.slint:108 +#: src/ui/gui/settings_page.slint:109 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Désactiver l'Expansion Pak" -#: src/ui/gui/settings_page.slint:116 +#: src/ui/gui/settings_page.slint:117 +msgctxt "Settings" +msgid "Enable Rewind" +msgstr "Activer le rembobinage" + +#: src/ui/gui/settings_page.slint:125 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Émuler UNFLoader" -#: src/ui/gui/settings_page.slint:124 +#: src/ui/gui/settings_page.slint:133 msgctxt "Settings" msgid "Emulate VRU" msgstr "Émuler le VRU" diff --git a/data/translations/gopher64.pot b/data/translations/gopher64.pot index 2e7d0a9..fc298e6 100644 --- a/data/translations/gopher64.pot +++ b/data/translations/gopher64.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-05-25 08:28+0000\n" +"POT-Creation-Date: 2026-05-30 16:03+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "" -#: src/ui/gui/appwindow.slint:151 +#: src/ui/gui/appwindow.slint:152 msgctxt "Menu" msgid "Local Game" msgstr "" -#: src/ui/gui/appwindow.slint:155 +#: src/ui/gui/appwindow.slint:156 msgctxt "Menu" msgid "Controller Config" msgstr "" -#: src/ui/gui/appwindow.slint:159 +#: src/ui/gui/appwindow.slint:160 msgctxt "Menu" msgid "Netplay" msgstr "" -#: src/ui/gui/appwindow.slint:163 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "Cheats" msgstr "" -#: src/ui/gui/appwindow.slint:167 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "RetroAchievements" msgstr "" -#: src/ui/gui/appwindow.slint:171 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "Settings" msgstr "" -#: src/ui/gui/appwindow.slint:175 +#: src/ui/gui/appwindow.slint:176 msgctxt "Menu" msgid "About" msgstr "" @@ -97,7 +97,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "" -#: src/ui/gui/cheat_page.slint:88 +#: src/ui/gui/cheat_page.slint:83 msgctxt "Cheats" msgid "No Cheats Available" msgstr "" @@ -483,62 +483,67 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "" -#: src/ui/gui/settings_page.slint:23 +#: src/ui/gui/settings_page.slint:24 msgctxt "Settings" msgid "Settings" msgstr "" -#: src/ui/gui/settings_page.slint:34 +#: src/ui/gui/settings_page.slint:35 msgctxt "Settings" msgid "Resolution:" msgstr "" -#: src/ui/gui/settings_page.slint:48 +#: src/ui/gui/settings_page.slint:49 msgctxt "Settings" msgid "SSAA downscaling" msgstr "" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "" -#: src/ui/gui/settings_page.slint:64 +#: src/ui/gui/settings_page.slint:65 msgctxt "Settings" msgid "Fullscreen" msgstr "" -#: src/ui/gui/settings_page.slint:72 +#: src/ui/gui/settings_page.slint:73 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "" -#: src/ui/gui/settings_page.slint:80 +#: src/ui/gui/settings_page.slint:81 msgctxt "Settings" msgid "VSync" msgstr "" -#: src/ui/gui/settings_page.slint:88 +#: src/ui/gui/settings_page.slint:89 msgctxt "Settings" msgid "Apply CRT shader" msgstr "" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "" -#: src/ui/gui/settings_page.slint:108 +#: src/ui/gui/settings_page.slint:109 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "" -#: src/ui/gui/settings_page.slint:116 +#: src/ui/gui/settings_page.slint:117 +msgctxt "Settings" +msgid "Enable Rewind" +msgstr "" + +#: src/ui/gui/settings_page.slint:125 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "" -#: src/ui/gui/settings_page.slint:124 +#: src/ui/gui/settings_page.slint:133 msgctxt "Settings" msgid "Emulate VRU" msgstr "" diff --git a/data/translations/ja/LC_MESSAGES/gopher64.po b/data/translations/ja/LC_MESSAGES/gopher64.po index 2fdec4b..24c2075 100644 --- a/data/translations/ja/LC_MESSAGES/gopher64.po +++ b/data/translations/ja/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-25 08:28+0000\n" +"POT-Creation-Date: 2026-05-30 16:03+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Japanese\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "GitHubで寄付" -#: src/ui/gui/appwindow.slint:151 +#: src/ui/gui/appwindow.slint:152 msgctxt "Menu" msgid "Local Game" msgstr "ローカルゲーム" -#: src/ui/gui/appwindow.slint:155 +#: src/ui/gui/appwindow.slint:156 msgctxt "Menu" msgid "Controller Config" msgstr "コントローラー設定" -#: src/ui/gui/appwindow.slint:159 +#: src/ui/gui/appwindow.slint:160 msgctxt "Menu" msgid "Netplay" msgstr "ネットプレイ" -#: src/ui/gui/appwindow.slint:163 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "Cheats" msgstr "チート" -#: src/ui/gui/appwindow.slint:167 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:171 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "Settings" msgstr "設定" -#: src/ui/gui/appwindow.slint:175 +#: src/ui/gui/appwindow.slint:176 msgctxt "Menu" msgid "About" msgstr "バージョン情報" @@ -97,7 +97,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "すべてのROMのチートをクリア" -#: src/ui/gui/cheat_page.slint:88 +#: src/ui/gui/cheat_page.slint:83 msgctxt "Cheats" msgid "No Cheats Available" msgstr "利用できるチートはありません" @@ -483,62 +483,67 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "対応ゲームを表示" -#: src/ui/gui/settings_page.slint:23 +#: src/ui/gui/settings_page.slint:24 msgctxt "Settings" msgid "Settings" msgstr "設定" -#: src/ui/gui/settings_page.slint:34 +#: src/ui/gui/settings_page.slint:35 msgctxt "Settings" msgid "Resolution:" msgstr "解像度:" -#: src/ui/gui/settings_page.slint:48 +#: src/ui/gui/settings_page.slint:49 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAAダウンスケール" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "整数倍スケーリング" -#: src/ui/gui/settings_page.slint:64 +#: src/ui/gui/settings_page.slint:65 msgctxt "Settings" msgid "Fullscreen" msgstr "全画面表示" -#: src/ui/gui/settings_page.slint:72 +#: src/ui/gui/settings_page.slint:73 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "ワイド画面(伸ばす)" -#: src/ui/gui/settings_page.slint:80 +#: src/ui/gui/settings_page.slint:81 msgctxt "Settings" msgid "VSync" msgstr "垂直同期(VSync)" -#: src/ui/gui/settings_page.slint:88 +#: src/ui/gui/settings_page.slint:89 msgctxt "Settings" msgid "Apply CRT shader" msgstr "CRTシェーダーを適用" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "N64のCPUをオーバークロック(不具合の原因になることがあります)" -#: src/ui/gui/settings_page.slint:108 +#: src/ui/gui/settings_page.slint:109 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "拡張パックを無効にする" -#: src/ui/gui/settings_page.slint:116 +#: src/ui/gui/settings_page.slint:117 +msgctxt "Settings" +msgid "Enable Rewind" +msgstr "巻き戻しを有効にする" + +#: src/ui/gui/settings_page.slint:125 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "UNFLoaderをエミュレート" -#: src/ui/gui/settings_page.slint:124 +#: src/ui/gui/settings_page.slint:133 msgctxt "Settings" msgid "Emulate VRU" msgstr "VRUをエミュレート" diff --git a/data/translations/nl/LC_MESSAGES/gopher64.po b/data/translations/nl/LC_MESSAGES/gopher64.po index 9d8f019..17ee82d 100644 --- a/data/translations/nl/LC_MESSAGES/gopher64.po +++ b/data/translations/nl/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-25 08:28+0000\n" +"POT-Creation-Date: 2026-05-30 16:03+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Dutch (Netherlands)\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Doneren (via GitHub)" -#: src/ui/gui/appwindow.slint:151 +#: src/ui/gui/appwindow.slint:152 msgctxt "Menu" msgid "Local Game" msgstr "Lokaal spel" -#: src/ui/gui/appwindow.slint:155 +#: src/ui/gui/appwindow.slint:156 msgctxt "Menu" msgid "Controller Config" msgstr "Controllerconfiguratie" -#: src/ui/gui/appwindow.slint:159 +#: src/ui/gui/appwindow.slint:160 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:163 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/appwindow.slint:167 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:171 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "Settings" msgstr "Instellingen" -#: src/ui/gui/appwindow.slint:175 +#: src/ui/gui/appwindow.slint:176 msgctxt "Menu" msgid "About" msgstr "Over" @@ -97,7 +97,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Cheats wissen voor alle ROM's" -#: src/ui/gui/cheat_page.slint:88 +#: src/ui/gui/cheat_page.slint:83 msgctxt "Cheats" msgid "No Cheats Available" msgstr "Geen cheats beschikbaar" @@ -485,62 +485,67 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Ondersteunde spellen bekijken" -#: src/ui/gui/settings_page.slint:23 +#: src/ui/gui/settings_page.slint:24 msgctxt "Settings" msgid "Settings" msgstr "Instellingen" -#: src/ui/gui/settings_page.slint:34 +#: src/ui/gui/settings_page.slint:35 msgctxt "Settings" msgid "Resolution:" msgstr "Resolutie:" -#: src/ui/gui/settings_page.slint:48 +#: src/ui/gui/settings_page.slint:49 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAA-downscaling" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "Schalen in hele getallen" -#: src/ui/gui/settings_page.slint:64 +#: src/ui/gui/settings_page.slint:65 msgctxt "Settings" msgid "Fullscreen" msgstr "Volledig scherm" -#: src/ui/gui/settings_page.slint:72 +#: src/ui/gui/settings_page.slint:73 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Breedbeeld (uitgerekt)" -#: src/ui/gui/settings_page.slint:80 +#: src/ui/gui/settings_page.slint:81 msgctxt "Settings" msgid "VSync" msgstr "VSync" -#: src/ui/gui/settings_page.slint:88 +#: src/ui/gui/settings_page.slint:89 msgctxt "Settings" msgid "Apply CRT shader" msgstr "CRT-shader toepassen" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "N64-CPU overklokken (kan bugs veroorzaken)" -#: src/ui/gui/settings_page.slint:108 +#: src/ui/gui/settings_page.slint:109 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Expansion Pak uitschakelen" -#: src/ui/gui/settings_page.slint:116 +#: src/ui/gui/settings_page.slint:117 +msgctxt "Settings" +msgid "Enable Rewind" +msgstr "Terugspoelen inschakelen" + +#: src/ui/gui/settings_page.slint:125 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "UNFLoader emuleren" -#: src/ui/gui/settings_page.slint:124 +#: src/ui/gui/settings_page.slint:133 msgctxt "Settings" msgid "Emulate VRU" msgstr "VRU emuleren" diff --git a/data/translations/pt_BR/LC_MESSAGES/gopher64.po b/data/translations/pt_BR/LC_MESSAGES/gopher64.po index b392f31..f4188d7 100644 --- a/data/translations/pt_BR/LC_MESSAGES/gopher64.po +++ b/data/translations/pt_BR/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-05-25 08:28+0000\n" +"POT-Creation-Date: 2026-05-30 16:03+0000\n" "PO-Revision-Date: 2026-05-11 18:11-3000\n" "Last-Translator: EDUARDO CARVALHO \n" "Language-Team: LANGUAGE \n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Doações (via GitHub)" -#: src/ui/gui/appwindow.slint:151 +#: src/ui/gui/appwindow.slint:152 msgctxt "Menu" msgid "Local Game" msgstr "Jogo Local" -#: src/ui/gui/appwindow.slint:155 +#: src/ui/gui/appwindow.slint:156 msgctxt "Menu" msgid "Controller Config" msgstr "Configurar Controle" -#: src/ui/gui/appwindow.slint:159 +#: src/ui/gui/appwindow.slint:160 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:163 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "Cheats" msgstr "Trapaças" -#: src/ui/gui/appwindow.slint:167 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:171 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "Settings" msgstr "Configurações" -#: src/ui/gui/appwindow.slint:175 +#: src/ui/gui/appwindow.slint:176 msgctxt "Menu" msgid "About" msgstr "Sobre" @@ -97,7 +97,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Limpar Trapaças para todas as ROMs" -#: src/ui/gui/cheat_page.slint:88 +#: src/ui/gui/cheat_page.slint:83 msgctxt "Cheats" msgid "No Cheats Available" msgstr "Sem trapaças disponíveis" @@ -486,62 +486,67 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Ver Jogos com Suporte" -#: src/ui/gui/settings_page.slint:23 +#: src/ui/gui/settings_page.slint:24 msgctxt "Settings" msgid "Settings" msgstr "Configurações" -#: src/ui/gui/settings_page.slint:34 +#: src/ui/gui/settings_page.slint:35 msgctxt "Settings" msgid "Resolution:" msgstr "Resolução:" -#: src/ui/gui/settings_page.slint:48 +#: src/ui/gui/settings_page.slint:49 msgctxt "Settings" msgid "SSAA downscaling" msgstr "Redução de SSAA" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "Proporção Íntegra" -#: src/ui/gui/settings_page.slint:64 +#: src/ui/gui/settings_page.slint:65 msgctxt "Settings" msgid "Fullscreen" msgstr "Tela Cheia" -#: src/ui/gui/settings_page.slint:72 +#: src/ui/gui/settings_page.slint:73 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Widescreen (esticar)" -#: src/ui/gui/settings_page.slint:80 +#: src/ui/gui/settings_page.slint:81 msgctxt "Settings" msgid "VSync" msgstr "VSync" -#: src/ui/gui/settings_page.slint:88 +#: src/ui/gui/settings_page.slint:89 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Aplicar filtro de CRT" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Overclock da CPU do N64 (pode causar bugs)" -#: src/ui/gui/settings_page.slint:108 +#: src/ui/gui/settings_page.slint:109 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Desabilitar Expansion Pak" -#: src/ui/gui/settings_page.slint:116 +#: src/ui/gui/settings_page.slint:117 +msgctxt "Settings" +msgid "Enable Rewind" +msgstr "Habilitar rebobinamento" + +#: src/ui/gui/settings_page.slint:125 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Emular UNFLoader" -#: src/ui/gui/settings_page.slint:124 +#: src/ui/gui/settings_page.slint:133 msgctxt "Settings" msgid "Emulate VRU" msgstr "Emular VRU" diff --git a/data/translations/ru/LC_MESSAGES/gopher64.po b/data/translations/ru/LC_MESSAGES/gopher64.po index 338af51..d769916 100644 --- a/data/translations/ru/LC_MESSAGES/gopher64.po +++ b/data/translations/ru/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-25 08:28+0000\n" +"POT-Creation-Date: 2026-05-30 16:03+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Russian\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Пожертвовать (через GitHub)" -#: src/ui/gui/appwindow.slint:151 +#: src/ui/gui/appwindow.slint:152 msgctxt "Menu" msgid "Local Game" msgstr "Локальная игра" -#: src/ui/gui/appwindow.slint:155 +#: src/ui/gui/appwindow.slint:156 msgctxt "Menu" msgid "Controller Config" msgstr "Настройка контроллера" -#: src/ui/gui/appwindow.slint:159 +#: src/ui/gui/appwindow.slint:160 msgctxt "Menu" msgid "Netplay" msgstr "Сетевая игра" -#: src/ui/gui/appwindow.slint:163 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "Cheats" msgstr "Читы" -#: src/ui/gui/appwindow.slint:167 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:171 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "Settings" msgstr "Настройки" -#: src/ui/gui/appwindow.slint:175 +#: src/ui/gui/appwindow.slint:176 msgctxt "Menu" msgid "About" msgstr "О программе" @@ -97,7 +97,7 @@ msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Очистить читы для всех ROMов" -#: src/ui/gui/cheat_page.slint:88 +#: src/ui/gui/cheat_page.slint:83 msgctxt "Cheats" msgid "No Cheats Available" msgstr "Читы недоступны" @@ -484,62 +484,67 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Просмотреть поддерживаемые игры" -#: src/ui/gui/settings_page.slint:23 +#: src/ui/gui/settings_page.slint:24 msgctxt "Settings" msgid "Settings" msgstr "Настройки" -#: src/ui/gui/settings_page.slint:34 +#: src/ui/gui/settings_page.slint:35 msgctxt "Settings" msgid "Resolution:" msgstr "Разрешение:" -#: src/ui/gui/settings_page.slint:48 +#: src/ui/gui/settings_page.slint:49 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAA даунскейлинг" -#: src/ui/gui/settings_page.slint:56 +#: src/ui/gui/settings_page.slint:57 msgctxt "Settings" msgid "Integer Scaling" msgstr "Целочисленное масштабирование" -#: src/ui/gui/settings_page.slint:64 +#: src/ui/gui/settings_page.slint:65 msgctxt "Settings" msgid "Fullscreen" msgstr "Полноэкранный режим" -#: src/ui/gui/settings_page.slint:72 +#: src/ui/gui/settings_page.slint:73 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Широкоэкранный режим (растянуто)" -#: src/ui/gui/settings_page.slint:80 +#: src/ui/gui/settings_page.slint:81 msgctxt "Settings" msgid "VSync" msgstr "Вертикальная синхронизация" -#: src/ui/gui/settings_page.slint:88 +#: src/ui/gui/settings_page.slint:89 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Применить шейдер ЭЛТ" -#: src/ui/gui/settings_page.slint:100 +#: src/ui/gui/settings_page.slint:101 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Разгон процессора N64 (может вызвать ошибки)" -#: src/ui/gui/settings_page.slint:108 +#: src/ui/gui/settings_page.slint:109 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Отключить Expansion Pak" -#: src/ui/gui/settings_page.slint:116 +#: src/ui/gui/settings_page.slint:117 +msgctxt "Settings" +msgid "Enable Rewind" +msgstr "Включить перемотку назад" + +#: src/ui/gui/settings_page.slint:125 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Эмулировать UNFLoader" -#: src/ui/gui/settings_page.slint:124 +#: src/ui/gui/settings_page.slint:133 msgctxt "Settings" msgid "Emulate VRU" msgstr "Эмулировать VRU" diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index f54d2d5..682caf7 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -59,6 +59,7 @@ enum user_event_codes { USER_EVENT_LOAD_STATE = 2, USER_EVENT_EXIT_GAME = 3, USER_EVENT_FAST_FORWARD = 4, + USER_EVENT_LOAD_REWIND = 5, }; typedef struct { @@ -189,6 +190,12 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { user_event.user.code = USER_EVENT_SAVE_STATE; SDL_PushEvent(&user_event); break; + case SDL_SCANCODE_F6: + SDL_zero(user_event); + user_event.type = SDL_EVENT_USER; + user_event.user.code = USER_EVENT_LOAD_REWIND; + SDL_PushEvent(&user_event); + break; case SDL_SCANCODE_F7: SDL_zero(user_event); user_event.type = SDL_EVENT_USER; @@ -244,6 +251,9 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { case USER_EVENT_SAVE_STATE: callback.save_state = true; break; + case USER_EVENT_LOAD_REWIND: + callback.load_rewind = true; + break; case USER_EVENT_LOAD_STATE: callback.load_state = true; break; @@ -330,6 +340,7 @@ static ImageHandle create_message_image(Vulkan::Device &device, int width, void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, size_t font_size, uint32_t save_state_slot) { memset(&rdp_device, 0, sizeof(RDP_DEVICE)); + memset(&callback, 0, sizeof(CALL_BACK)); window = (SDL_Window *)_window; SDL_SyncWindow(window); @@ -659,6 +670,7 @@ void rdp_update_screen() { CALL_BACK rdp_check_callback() { CALL_BACK return_value = callback; callback.save_state = false; + callback.load_rewind = false; callback.load_state = false; callback.reset_game = false; callback.lower_volume = false; diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 4086309..7de41da 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -29,6 +29,7 @@ typedef struct { bool emu_running; bool save_state; bool load_state; + bool load_rewind; bool reset_game; bool enable_speedlimiter; bool lower_volume; diff --git a/src/device.rs b/src/device.rs index 286b6f3..331493b 100644 --- a/src/device.rs +++ b/src/device.rs @@ -15,7 +15,7 @@ const N64_EXTENSIONS_UNCOMPRESSED: [&str; 8] = use rand::{Rng, SeedableRng}; -use crate::{cheats, netplay, retroachievements, ui}; +use crate::{cheats, netplay, retroachievements, savestates, ui}; use std::{collections::HashMap, io::Read}; pub mod ai; @@ -59,7 +59,7 @@ pub async fn run_game( } if let Some(slot) = game_settings.load_savestate_slot { device.ui.storage.save_state_slot = slot; - device.load_state = true; + device.savestate.load_state = true; } init_rng(device); @@ -229,8 +229,7 @@ pub struct Device { #[serde(skip)] pub ui: ui::Ui, pub byte_swap: usize, - pub save_state: bool, - pub load_state: bool, + pub savestate: savestates::Savestate, pub cpu: cpu::Cpu, pub pif: pif::Pif, pub cart: cart::Cart, @@ -261,8 +260,7 @@ impl Device { netplay: None, ui: ui::Ui::default(), byte_swap: self.byte_swap, - save_state: self.save_state, - load_state: self.load_state, + savestate: self.savestate.clone(), cpu: self.cpu.clone(), pif: self.pif.clone(), cart: self.cart.clone(), @@ -294,8 +292,16 @@ impl Device { netplay: None, ui: ui::Ui::new(), byte_swap, - save_state: false, - load_state: false, + savestate: savestates::Savestate { + save_state: false, + load_state: false, + save_rewind: false, + load_rewind: false, + last_rewind_saved: 0.0, + rewind_pool: std::sync::Arc::new(std::sync::Mutex::new( + std::collections::VecDeque::new(), + )), + }, cpu: cpu::Cpu { cop0: cop0::Cop0 { regs: [0; cop0::COP0_REGS_COUNT], diff --git a/src/device/rdp.rs b/src/device/rdp.rs index de653b0..4a149cb 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -120,14 +120,20 @@ fn run_rdp(device: &mut device::Device) { device.rdp.regs_dpc[DPC_PIPEBUSY_REG] = 0xFFFFFF; if timer != 0 { - if device.save_state { + if device.savestate.save_state || device.savestate.save_rewind { // Right after full sync, good time for save state - device.save_state = false; - savestates::create_savestate(device); - } else if device.load_state { + let rewind = device.savestate.save_rewind && !device.savestate.save_state; + if rewind { + device.savestate.save_rewind = false; + } + device.savestate.save_state = false; + savestates::create_savestate(device, rewind); + } else if device.savestate.load_state || device.savestate.load_rewind { // Right after full sync, good time for save state - device.load_state = false; - savestates::load_savestate(device); + device.savestate.load_state = false; + let rewind = device.savestate.load_rewind; + device.savestate.load_rewind = false; + savestates::load_savestate(device, rewind); } device::events::create_event(device, device::events::EVENT_TYPE_DP, timer) } diff --git a/src/device/vi.rs b/src/device/vi.rs index 2eee153..664999f 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -122,6 +122,8 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } pub fn vertical_interrupt_event(device: &mut device::Device) { + device.vi.elapsed_time += device.vi.frame_time; + if device.cheats.enabled { cheats::execute_cheats(device, device.cheats.cheats.clone()); } @@ -139,6 +141,11 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { speed_limiter_toggled = true; device.vi.enable_speed_limiter = !netplay.fast_forward; } + } else if device.ui.config.emulation.rewind + && device.vi.elapsed_time - device.savestate.last_rewind_saved > 1.0 + { + device.savestate.save_rewind = true; + device.savestate.last_rewind_saved = device.vi.elapsed_time; } if speed_limiter_toggled { @@ -153,7 +160,6 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { ui::video::update_screen(); device.vi.vi_counter += 1; - device.vi.elapsed_time += device.vi.frame_time; if device.netplay.is_none() && paused { if retroachievements::get_hardcore() { @@ -162,7 +168,7 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, ); } else { - ui::video::pause_loop(device.vi.frame_time); + ui::video::pause_loop(&mut device.ui, device.vi.frame_time); } } diff --git a/src/lib.rs b/src/lib.rs index 00efe19..b263f6e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -104,6 +104,8 @@ pub async fn run(args: Args, arg_count: usize) -> std::io::Result<()> { ui::sdl_hints(); if let Some(game) = args.game { + ui::disable_auto_update_joysticks(); + let file_path = std::path::Path::new(&game).to_path_buf(); let Some(rom_contents) = device::get_rom_contents(&file_path) else { return Err(Error::other(format!( diff --git a/src/savestates.rs b/src/savestates.rs index b216333..a3e140e 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -69,7 +69,25 @@ where seq.end() } -pub fn create_savestate(device: &device::Device) { +#[derive(Clone, serde::Serialize, serde::Deserialize)] +pub struct Savestate { + pub save_state: bool, + pub load_state: bool, + pub save_rewind: bool, + pub load_rewind: bool, + pub last_rewind_saved: f64, + #[serde(skip)] + pub rewind_pool: std::sync::Arc>>, +} + +pub struct SavestateData { + device_data: Vec, + saves_data: Vec, + rdp_state: Vec, + ra_state: Vec, +} + +pub fn create_savestate(device: &mut device::Device, rewind: bool) { let mut rdp_state: Vec = vec![0; ui::video::state_size()]; ui::video::save_state(rdp_state.as_mut_ptr()); @@ -80,24 +98,39 @@ pub fn create_savestate(device: &device::Device) { let device_clone = device.clone_without_ui(); let save_state_slot = device.ui.storage.save_state_slot; + let rewind_pool = device.savestate.rewind_pool.clone(); tokio::spawn(async move { let mut error = false; if let Ok(device_data) = postcard::to_stdvec(&device_clone) && let Ok(saves_data) = postcard::to_stdvec(&device_clone.ui.storage.saves) { - if let Ok(compressed_file) = ui::storage::compress_file(&[ - (&device_data, "device"), - (&saves_data, "saves"), - (&rdp_state, "rdp_state"), - (&ra_state, "ra_state"), - ]) { - if let Err(e) = tokio::fs::write(save_path, compressed_file).await { - eprintln!("Error writing savestate: {}", e); - error = true; + if rewind { + if let Ok(mut pool) = rewind_pool.lock() { + pool.push_back(SavestateData { + device_data, + saves_data, + rdp_state, + ra_state, + }); + if pool.len() > 30 { + pool.pop_front(); + } } } else { - eprintln!("Error compressing savestate"); - error = true; + if let Ok(compressed_file) = ui::storage::compress_file(&[ + (&device_data, "device"), + (&saves_data, "saves"), + (&rdp_state, "rdp_state"), + (&ra_state, "ra_state"), + ]) { + if let Err(e) = tokio::fs::write(save_path, compressed_file).await { + eprintln!("Error writing savestate: {}", e); + error = true; + } + } else { + eprintln!("Error compressing savestate"); + error = true; + } } } else { error = true; @@ -107,7 +140,7 @@ pub fn create_savestate(device: &device::Device) { &format!("Failed to create savestate in slot {}", save_state_slot), ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, ); - } else { + } else if !rewind { ui::video::onscreen_message( &format!("Savestate created in slot {}", save_state_slot), ui::video::MESSAGE_LENGTH_MESSAGE_VERY_SHORT, @@ -116,7 +149,7 @@ pub fn create_savestate(device: &device::Device) { }); } -pub fn load_savestate(device: &mut device::Device) { +pub fn load_savestate(device: &mut device::Device, rewind: bool) { if retroachievements::get_hardcore() { ui::video::onscreen_message( "Cannot load savestate in RA hardcore mode", @@ -124,119 +157,138 @@ pub fn load_savestate(device: &mut device::Device) { ); return; } - let savestate = std::fs::read(&device.ui.storage.paths.savestate_file_path); - if let Ok(savestate) = &savestate { - if let Ok(device_bytes) = ui::storage::decompress_file(savestate, "device") - && let Ok(save_bytes) = ui::storage::decompress_file(savestate, "saves") - && let Ok(rdp_state) = ui::storage::decompress_file(savestate, "rdp_state") - && let Ok(ra_state) = ui::storage::decompress_file(savestate, "ra_state") - && let Ok(mut state) = postcard::from_bytes::(&device_bytes) - && let Ok(saves) = postcard::from_bytes(&save_bytes) - && device.rdram.size == state.rdram.size - { - device.ui.storage.saves = saves; - std::mem::swap(&mut device.cpu, &mut state.cpu); - std::mem::swap(&mut device.pif, &mut state.pif); + let state_data = if rewind { + if let Ok(mut pool) = device.savestate.rewind_pool.lock() { + pool.pop_back() + } else { + None + } + } else if let savestate = std::fs::read(&device.ui.storage.paths.savestate_file_path) + && let Ok(savestate) = &savestate + && let Ok(device_data) = ui::storage::decompress_file(savestate, "device") + && let Ok(saves_data) = ui::storage::decompress_file(savestate, "saves") + && let Ok(rdp_state) = ui::storage::decompress_file(savestate, "rdp_state") + && let Ok(ra_state) = ui::storage::decompress_file(savestate, "ra_state") + { + Some(SavestateData { + device_data, + saves_data, + rdp_state, + ra_state, + }) + } else { + None + }; + if let Some(state_data) = state_data + && let Ok(mut state) = postcard::from_bytes::(&state_data.device_data) + && let Ok(saves) = postcard::from_bytes(&state_data.saves_data) + && device.rdram.size == state.rdram.size + { + device.savestate.last_rewind_saved = state.vi.elapsed_time; - let rom = device.cart.rom.clone(); - std::mem::swap(&mut device.cart, &mut state.cart); - device.cart.rom = rom; + device.ui.storage.saves = saves; - std::mem::swap(&mut device.memory, &mut state.memory); - std::mem::swap(&mut device.rsp, &mut state.rsp); - std::mem::swap(&mut device.rdp, &mut state.rdp); + std::mem::swap(&mut device.cpu, &mut state.cpu); + std::mem::swap(&mut device.pif, &mut state.pif); - device.rdram.mem.clone_from(&state.rdram.mem); - device.rdram.regs = state.rdram.regs; + let rom = device.cart.rom.clone(); + std::mem::swap(&mut device.cart, &mut state.cart); + device.cart.rom = rom; - std::mem::swap(&mut device.mi, &mut state.mi); - std::mem::swap(&mut device.pi, &mut state.pi); - std::mem::swap(&mut device.vi, &mut state.vi); - std::mem::swap(&mut device.ai, &mut state.ai); - std::mem::swap(&mut device.si, &mut state.si); - std::mem::swap(&mut device.ri, &mut state.ri); - std::mem::swap(&mut device.vru, &mut state.vru); - std::mem::swap(&mut device.cheats, &mut state.cheats); + std::mem::swap(&mut device.memory, &mut state.memory); + std::mem::swap(&mut device.rsp, &mut state.rsp); + std::mem::swap(&mut device.rdp, &mut state.rdp); - let mut tpak_rom = [vec![], vec![], vec![], vec![]]; - for (i, item) in tpak_rom.iter_mut().enumerate() { - *item = device.transferpaks[i].cart.rom.clone(); - } - std::mem::swap(&mut device.transferpaks, &mut state.transferpaks); - for (i, item) in tpak_rom.iter().enumerate() { - device.transferpaks[i].cart.rom = item.clone(); + device.rdram.mem.clone_from(&state.rdram.mem); + device.rdram.regs = state.rdram.regs; + + std::mem::swap(&mut device.mi, &mut state.mi); + std::mem::swap(&mut device.pi, &mut state.pi); + std::mem::swap(&mut device.vi, &mut state.vi); + std::mem::swap(&mut device.ai, &mut state.ai); + std::mem::swap(&mut device.si, &mut state.si); + std::mem::swap(&mut device.ri, &mut state.ri); + std::mem::swap(&mut device.vru, &mut state.vru); + std::mem::swap(&mut device.cheats, &mut state.cheats); + + let mut tpak_rom = [vec![], vec![], vec![], vec![]]; + for (i, item) in tpak_rom.iter_mut().enumerate() { + *item = device.transferpaks[i].cart.rom.clone(); + } + std::mem::swap(&mut device.transferpaks, &mut state.transferpaks); + for (i, item) in tpak_rom.iter().enumerate() { + device.transferpaks[i].cart.rom = item.clone(); + } + + device::memory::init(device); + device::vi::set_expected_refresh_rate(device); + device::cpu::map_instructions(device); + device::cop0::map_instructions(device); + device::cop1::map_instructions(device); + device::cop2::map_instructions(device); + device::rsp_cpu::map_instructions(device); + + let mut mem_addr = 0x1000; + while mem_addr < 0x2000 { + let data = + u32::from_be_bytes(device.rsp.mem[mem_addr..mem_addr + 4].try_into().unwrap()); + device.rsp.cpu.instructions[(mem_addr & 0xFFF) / 4].func = + device::rsp_cpu::decode_opcode(device, data); + device.rsp.cpu.instructions[(mem_addr & 0xFFF) / 4].opcode = data; + mem_addr += 4; + } + + for line_index in 0..512 { + for i in 0..8 { + device.memory.icache[line_index].instruction[i] = + device::cpu::decode_opcode(device, device.memory.icache[line_index].words[i]); } + } - device::memory::init(device); - device::vi::set_expected_refresh_rate(device); - device::cpu::map_instructions(device); - device::cop0::map_instructions(device); - device::cop1::map_instructions(device); - device::cop2::map_instructions(device); - device::rsp_cpu::map_instructions(device); - - let mut mem_addr = 0x1000; - while mem_addr < 0x2000 { - let data = - u32::from_be_bytes(device.rsp.mem[mem_addr..mem_addr + 4].try_into().unwrap()); - device.rsp.cpu.instructions[(mem_addr & 0xFFF) / 4].func = - device::rsp_cpu::decode_opcode(device, data); - device.rsp.cpu.instructions[(mem_addr & 0xFFF) / 4].opcode = data; - mem_addr += 4; - } - - for line_index in 0..512 { - for i in 0..8 { - device.memory.icache[line_index].instruction[i] = device::cpu::decode_opcode( - device, - device.memory.icache[line_index].words[i], - ); + device::pif::connect_pif_channels(device); + for i in 0..4 { + if let Some(handler) = device.pif.channels[i].pak_handler { + if handler.pak_type == device::controller::PakType::RumblePak { + let rumblepak_handler = device::controller::PakHandler { + read: device::controller::rumble::read, + write: device::controller::rumble::write, + pak_type: device::controller::PakType::RumblePak, + }; + device.pif.channels[i].pak_handler = Some(rumblepak_handler); + } else if handler.pak_type == device::controller::PakType::MemPak { + let mempak_handler = device::controller::PakHandler { + read: device::controller::mempak::read, + write: device::controller::mempak::write, + pak_type: device::controller::PakType::MemPak, + }; + device.pif.channels[i].pak_handler = Some(mempak_handler); + } else if handler.pak_type == device::controller::PakType::TransferPak { + let tpak_handler = device::controller::PakHandler { + read: device::controller::transferpak::read, + write: device::controller::transferpak::write, + pak_type: device::controller::PakType::TransferPak, + }; + device.pif.channels[i].pak_handler = Some(tpak_handler); } } + } - device::pif::connect_pif_channels(device); - for i in 0..4 { - if let Some(handler) = device.pif.channels[i].pak_handler { - if handler.pak_type == device::controller::PakType::RumblePak { - let rumblepak_handler = device::controller::PakHandler { - read: device::controller::rumble::read, - write: device::controller::rumble::write, - pak_type: device::controller::PakType::RumblePak, - }; - device.pif.channels[i].pak_handler = Some(rumblepak_handler); - } else if handler.pak_type == device::controller::PakType::MemPak { - let mempak_handler = device::controller::PakHandler { - read: device::controller::mempak::read, - write: device::controller::mempak::write, - pak_type: device::controller::PakType::MemPak, - }; - device.pif.channels[i].pak_handler = Some(mempak_handler); - } else if handler.pak_type == device::controller::PakType::TransferPak { - let tpak_handler = device::controller::PakHandler { - read: device::controller::transferpak::read, - write: device::controller::transferpak::write, - pak_type: device::controller::PakType::TransferPak, - }; - device.pif.channels[i].pak_handler = Some(tpak_handler); - } - } - } + ui::audio::update_freq(device); + ui::video::load_state(device, state_data.rdp_state.as_ptr()); - ui::audio::update_freq(device); - ui::video::load_state(device, rdp_state.as_ptr()); + retroachievements::set_rdram(device.rdram.mem.as_ptr(), device.rdram.size as usize); + if !state_data.ra_state.is_empty() { + retroachievements::load_state(state_data.ra_state.as_ptr(), state_data.ra_state.len()); + } else { + retroachievements::load_state(std::ptr::null(), 0); + } - retroachievements::set_rdram(device.rdram.mem.as_ptr(), device.rdram.size as usize); - if !ra_state.is_empty() { - retroachievements::load_state(ra_state.as_ptr(), ra_state.len()); - } else { - retroachievements::load_state(std::ptr::null(), 0); - } - - if device.cheats.enabled { - cheats::execute_cheats(device, device.cheats.cheats.clone()); - } + if device.cheats.enabled { + cheats::execute_cheats(device, device.cheats.cheats.clone()); + } + if !rewind { ui::video::onscreen_message( &format!( "Savestate loaded from slot {}", @@ -244,23 +296,17 @@ pub fn load_savestate(device: &mut device::Device) { ), ui::video::MESSAGE_LENGTH_MESSAGE_VERY_SHORT, ); - } else { - ui::video::onscreen_message( - &format!( - "Failed to load savestate from slot {}", - device.ui.storage.save_state_slot - ), - ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, - ); } } else { - ui::video::onscreen_message( + let message = if !rewind { &format!( - "Could not find savestate in slot {}", + "Failed to load savestate from slot {}", device.ui.storage.save_state_slot - ), - ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, - ); + ) + } else { + "Failed to rewind" + }; + ui::video::onscreen_message(message, ui::video::MESSAGE_LENGTH_MESSAGE_SHORT); } } diff --git a/src/ui.rs b/src/ui.rs index 255238a..9e15d99 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -113,6 +113,11 @@ pub fn sdl_hints() { sdl3_sys::everything::SDL_HINT_ANDROID_ALLOW_RECREATE_ACTIVITY, hint.as_ptr(), ); + } +} + +pub fn disable_auto_update_joysticks() { + unsafe { let hint = std::ffi::CString::new("0").unwrap(); sdl3_sys::everything::SDL_SetHint( sdl3_sys::everything::SDL_HINT_AUTO_UPDATE_JOYSTICKS, diff --git a/src/ui/config.rs b/src/ui/config.rs index c600a2d..be3d42a 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -61,6 +61,7 @@ pub struct Emulation { pub overclock: bool, pub disable_expansion_pak: bool, pub usb: bool, + pub rewind: bool, } #[derive(serde::Serialize, serde::Deserialize)] @@ -174,6 +175,7 @@ impl Config { overclock: false, disable_expansion_pak: false, usb: false, + rewind: false, }, rom_dir: std::path::PathBuf::new(), recent_roms: Vec::new(), diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 0f702ee..edf7037 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -175,6 +175,7 @@ fn settings_window(app: &AppWindow, config: &ui::config::Config) { app.set_overclock_n64_cpu(config.emulation.overclock); app.set_disable_expansion_pak(config.emulation.disable_expansion_pak); app.set_emulate_usb(config.emulation.usb); + app.set_rewind(config.emulation.rewind); let combobox_value = match config.video.upscale { 1 => 0, 2 => 1, @@ -446,6 +447,7 @@ pub fn save_settings(app: &AppWindow) { config.emulation.overclock = app.get_overclock_n64_cpu(); config.emulation.disable_expansion_pak = app.get_disable_expansion_pak(); config.emulation.usb = app.get_emulate_usb(); + config.emulation.rewind = app.get_rewind(); let upscale_values = [1, 2, 4, 8]; config.video.upscale = upscale_values[app.get_resolution() as usize]; diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 6041315..a4261b2 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -74,6 +74,7 @@ export component AppWindow inherits Window { in-out property disable_expansion_pak <=> SettingsData.disable_expansion_pak; in-out property resolution <=> SettingsData.resolution; in-out property emulate_usb <=> SettingsData.emulate_usb; + in-out property rewind <=> SettingsData.rewind; in-out property emulate_vru <=> SettingsData.emulate_vru; in-out property rom_dir <=> SettingsData.rom_dir; in-out property controller_enabled <=> ControllerData.controller_enabled; diff --git a/src/ui/gui/settings_page.slint b/src/ui/gui/settings_page.slint index f0e5517..f00aaef 100644 --- a/src/ui/gui/settings_page.slint +++ b/src/ui/gui/settings_page.slint @@ -15,6 +15,7 @@ export global SettingsData { in-out property disable_expansion_pak; in-out property resolution; in-out property emulate_usb; + in-out property rewind; in-out property emulate_vru; in-out property rom_dir; } @@ -112,6 +113,14 @@ export component Settings inherits Page { } } + Switch { + text: @tr("Enable Rewind"); + checked: SettingsData.rewind; + toggled => { + SettingsData.rewind = self.checked; + } + } + Switch { text: @tr("Emulate UNFLoader"); checked: SettingsData.emulate_usb; diff --git a/src/ui/input.rs b/src/ui/input.rs index d1d5f6f..25bd4ae 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -489,6 +489,17 @@ fn handle_hotkeys(keys: u32, last_key_state: u32) { }) }; } + if keys & (1 << L_CBUTTON) != 0 && last_key_state & (1 << L_CBUTTON) == 0 { + unsafe { + sdl3_sys::events::SDL_PushEvent(&mut sdl3_sys::events::SDL_Event { + user: sdl3_sys::events::SDL_UserEvent { + r#type: u32::from(sdl3_sys::events::SDL_EVENT_USER), + code: 5, //load rewind + ..Default::default() + }, + }) + }; + } } pub fn get(ui: &mut ui::Ui, channel: usize, vi_counter: u64) -> InputData { diff --git a/src/ui/video.rs b/src/ui/video.rs index 70a1c34..01daff0 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -175,16 +175,19 @@ pub fn load_state(device: &mut device::Device, rdp_state: *const u8) { } } -pub fn pause_loop(frame_time: f64) { +pub fn pause_loop(ui: &mut ui::Ui, frame_time: f64) { let mut paused = true; let mut frame_advance = false; + let mut pause_counter = 0; while paused && !frame_advance { std::thread::sleep(std::time::Duration::from_secs_f64(frame_time)); + ui::input::get(ui, 0, pause_counter); // to gather hotkey input unsafe { sdl3_sys::events::SDL_PumpEvents() }; retroachievements::do_idle(); let callback = unsafe { rdp_check_callback() }; paused = callback.paused; frame_advance = callback.frame_advance; + pause_counter += 1; } } @@ -194,9 +197,12 @@ pub fn check_callback(device: &mut device::Device) -> (bool, bool) { device.cpu.running = callback.emu_running; if device.netplay.is_none() { if callback.save_state { - device.save_state = true; + device.savestate.save_state = true; } else if callback.load_state { - device.load_state = true; + device.savestate.load_state = true; + } + if callback.load_rewind && device.ui.config.emulation.rewind { + device.savestate.load_rewind = true; } if callback.reset_game { device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] |= device::cop0::COP0_CAUSE_IP4; From 79d2c023e62fb4e95b0712364458802b0f657dae Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 30 May 2026 21:16:15 +0200 Subject: [PATCH 0974/1117] change message length (#992) --- src/savestates.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/savestates.rs b/src/savestates.rs index a3e140e..6dee6de 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -306,7 +306,7 @@ pub fn load_savestate(device: &mut device::Device, rewind: bool) { } else { "Failed to rewind" }; - ui::video::onscreen_message(message, ui::video::MESSAGE_LENGTH_MESSAGE_SHORT); + ui::video::onscreen_message(message, ui::video::MESSAGE_LENGTH_MESSAGE_VERY_SHORT); } } From 5c7170268e3a5170482bb9f62216f8f6aa3fd889 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 31 May 2026 08:37:11 +0200 Subject: [PATCH 0975/1117] Don't store luts in savestate (#993) * use hashmap for tlb * more * more * more * more * more --- Cargo.lock | 1 + Cargo.toml | 1 + src/cheats.rs | 2 +- src/device.rs | 20 ++++---------------- src/device/controller/vru.rs | 7 +++---- src/device/cop0.rs | 3 +++ src/device/tlb.rs | 19 ++++++++++++++++++- src/netplay.rs | 10 +++++----- src/savestates.rs | 8 +++++++- src/ui.rs | 4 ++-- src/ui/config.rs | 5 ++--- src/ui/gui.rs | 4 ++-- src/ui/netplay.rs | 21 ++++++++++----------- src/ui/storage.rs | 8 ++++---- 14 files changed, 63 insertions(+), 50 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fa80975..ad1d790 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2232,6 +2232,7 @@ dependencies = [ "regex", "reqwest", "rfd", + "rustc-hash 2.1.2", "sdl3-image-sys", "sdl3-src", "sdl3-sys", diff --git a/Cargo.toml b/Cargo.toml index 9c54207..e44058b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,6 +25,7 @@ encoding_rs = "0.8" mimalloc = "0.1" regex = "1.11" tokio-tungstenite = "0.29" +rustc-hash = "2.1" futures = "0.3" socket2 = { version = "0.6", features = ["all"] } rand = "0.10" diff --git a/src/cheats.rs b/src/cheats.rs index d053d2d..31cb3a6 100644 --- a/src/cheats.rs +++ b/src/cheats.rs @@ -26,7 +26,7 @@ pub type Cheat = std::collections::BTreeMap>, + cheat_settings: rustc_hash::FxHashMap>, ) { let cheats = serde_json::from_slice::(include_bytes!("../data/cheats.json")) .unwrap() diff --git a/src/device.rs b/src/device.rs index 331493b..70beeef 100644 --- a/src/device.rs +++ b/src/device.rs @@ -16,7 +16,7 @@ const N64_EXTENSIONS_UNCOMPRESSED: [&str; 8] = use rand::{Rng, SeedableRng}; use crate::{cheats, netplay, retroachievements, savestates, ui}; -use std::{collections::HashMap, io::Read}; +use std::io::Read; pub mod ai; pub mod cache; @@ -310,20 +310,8 @@ impl Device { is_event: false, instrs: [cop0::reserved; 32], instrs2: [cop0::reserved; 32], - tlb_lut_w: vec![ - tlb::TlbLut { - address: 0, - cached: false, - }; - 0x100000 - ], - tlb_lut_r: vec![ - tlb::TlbLut { - address: 0, - cached: false, - }; - 0x100000 - ], + tlb_lut_w: vec![], + tlb_lut_r: vec![], tlb_entries: [tlb::TlbEntry { mask: 0, vpn2: 0, @@ -558,7 +546,7 @@ impl Device { word_buffer: [0; 40], words: Vec::new(), talking: false, - word_mappings: HashMap::new(), + word_mappings: rustc_hash::FxHashMap::default(), }, rng: set_rng(), transferpaks: [ diff --git a/src/device/controller/vru.rs b/src/device/controller/vru.rs index 9e2cf8b..e3bf841 100644 --- a/src/device/controller/vru.rs +++ b/src/device/controller/vru.rs @@ -1,7 +1,6 @@ use crate::device; #[cfg(all(feature = "gui", not(target_os = "android")))] use crate::ui; -use std::collections::HashMap; const JCMD_VRU_READ: u8 = 0x09; const JCMD_VRU_WRITE: u8 = 0x0A; @@ -28,7 +27,7 @@ pub struct Vru { pub word_buffer: [u16; 40], pub words: Vec, pub talking: bool, - pub word_mappings: HashMap, + pub word_mappings: rustc_hash::FxHashMap, } pub fn init(device: &mut device::Device) { @@ -186,7 +185,7 @@ pub fn process(device: &mut device::Device, channel: usize) { #[cfg(any(not(feature = "gui"), target_os = "android"))] let index = 0x7FFF; let num_results = if index == 0x7FFF { 0 } else { 1 }; - let data: HashMap = HashMap::from([ + let data: rustc_hash::FxHashMap = rustc_hash::FxHashMap::from_iter([ (0, 0x8000), (2, 0x0F00), (4, 0), // error flags @@ -247,7 +246,7 @@ pub fn vru_talking_event(device: &mut device::Device) { } fn create_word_mappings(device: &mut device::Device) { - device.vru.word_mappings = HashMap::from([ + device.vru.word_mappings = rustc_hash::FxHashMap::from_iter([ ( String::from("03A50024000303CF00A80003036000EA"), String::from("pikachu"), diff --git a/src/device/cop0.rs b/src/device/cop0.rs index 8e55e8d..0dd83d1 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -100,7 +100,9 @@ pub struct Cop0 { pub instrs: [fn(&mut device::Device, u32); 32], #[serde(skip, default = "savestates::default_instructions")] pub instrs2: [fn(&mut device::Device, u32); 32], + #[serde(skip)] pub tlb_lut_r: Vec, + #[serde(skip)] pub tlb_lut_w: Vec, pub tlb_entries: [device::tlb::TlbEntry; 32], pub is_event: bool, @@ -369,6 +371,7 @@ pub fn init(device: &mut device::Device) { ]; map_instructions(device); + device::tlb::init(device); // taken from VR4300 manual device.cpu.cop0.regs[COP0_RANDOM_REG] = 0b00000000000000000000000000011111; diff --git a/src/device/tlb.rs b/src/device/tlb.rs index 70b2104..1c57000 100644 --- a/src/device/tlb.rs +++ b/src/device/tlb.rs @@ -30,6 +30,23 @@ pub struct TlbEntry { pub phys_odd: u64, } +pub fn init(device: &mut device::Device) { + device.cpu.cop0.tlb_lut_r.resize( + 0x100000, + device::tlb::TlbLut { + address: 0, + cached: false, + }, + ); + device.cpu.cop0.tlb_lut_w.resize( + 0x100000, + device::tlb::TlbLut { + address: 0, + cached: false, + }, + ); +} + pub fn read(device: &mut device::Device, index: u64) { if index > 31 { return; @@ -181,7 +198,7 @@ fn tlb_unmap(device: &mut device::Device, index: u64) { } } -fn tlb_map(device: &mut device::Device, index: u64) { +pub fn tlb_map(device: &mut device::Device, index: u64) { let e = &device.cpu.cop0.tlb_entries[index as usize]; if e.v_even != 0 diff --git a/src/netplay.rs b/src/netplay.rs index 24c53d2..63e1b0d 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -38,7 +38,7 @@ pub struct PlayerData { lag: u8, count: u32, pub reg_id: u32, - input_events: std::collections::HashMap, + input_events: rustc_hash::FxHashMap, } struct InputEvent { @@ -310,25 +310,25 @@ pub fn init(peer_addr: std::net::SocketAddr, player_number: u8) -> Netplay { lag: 0, count: 0, reg_id: reg_id[0], - input_events: std::collections::HashMap::new(), + input_events: rustc_hash::FxHashMap::default(), }, PlayerData { lag: 0, count: 0, reg_id: reg_id[1], - input_events: std::collections::HashMap::new(), + input_events: rustc_hash::FxHashMap::default(), }, PlayerData { lag: 0, count: 0, reg_id: reg_id[2], - input_events: std::collections::HashMap::new(), + input_events: rustc_hash::FxHashMap::default(), }, PlayerData { lag: 0, count: 0, reg_id: reg_id[3], - input_events: std::collections::HashMap::new(), + input_events: rustc_hash::FxHashMap::default(), }, ], } diff --git a/src/savestates.rs b/src/savestates.rs index 6dee6de..59156d7 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -97,12 +97,13 @@ pub fn create_savestate(device: &mut device::Device, rewind: bool) { let save_path = device.ui.storage.paths.savestate_file_path.clone(); let device_clone = device.clone_without_ui(); + let saves_clone = device.ui.storage.saves.clone(); let save_state_slot = device.ui.storage.save_state_slot; let rewind_pool = device.savestate.rewind_pool.clone(); tokio::spawn(async move { let mut error = false; if let Ok(device_data) = postcard::to_stdvec(&device_clone) - && let Ok(saves_data) = postcard::to_stdvec(&device_clone.ui.storage.saves) + && let Ok(saves_data) = postcard::to_stdvec(&saves_clone) { if rewind { if let Ok(mut pool) = rewind_pool.lock() { @@ -246,6 +247,11 @@ pub fn load_savestate(device: &mut device::Device, rewind: bool) { } } + device::tlb::init(device); + for i in 0..32 { + device::tlb::tlb_map(device, i); + } + device::pif::connect_pif_channels(device); for i in 0..4 { if let Some(handler) = device.pif.channels[i].pak_handler { diff --git a/src/ui.rs b/src/ui.rs index 9e15d99..0a9aa1f 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -85,7 +85,7 @@ pub struct Usb { pub struct GameSettings { pub overclock: bool, pub disable_expansion_pak: bool, - pub cheats: std::collections::HashMap>, + pub cheats: rustc_hash::FxHashMap>, pub load_savestate_slot: Option, } @@ -259,7 +259,7 @@ impl Ui { write_pending: false, }, romsave: storage::RomSave { - data: std::collections::HashMap::new(), + data: rustc_hash::FxHashMap::default(), write_pending: false, }, }, diff --git a/src/ui/config.rs b/src/ui/config.rs index be3d42a..0b2e7da 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -66,8 +66,7 @@ pub struct Emulation { #[derive(serde::Serialize, serde::Deserialize)] pub struct Cheats { - pub cheats: - std::collections::HashMap>>, + pub cheats: rustc_hash::FxHashMap>>, } #[derive(Default, serde::Serialize, serde::Deserialize)] @@ -109,7 +108,7 @@ impl Cheats { } } Cheats { - cheats: std::collections::HashMap::new(), + cheats: rustc_hash::FxHashMap::default(), } } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index edf7037..636d256 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -72,7 +72,7 @@ fn run_with_path(weak: slint::Weak, path: std::path::PathBuf) { ui::GameSettings { overclock: handle.get_overclock_n64_cpu(), disable_expansion_pak: handle.get_disable_expansion_pak(), - cheats: std::collections::HashMap::new(), // will be filled in later + cheats: rustc_hash::FxHashMap::default(), // will be filled in later load_savestate_slot: None, }, None, @@ -702,7 +702,7 @@ fn open_rom(app: &AppWindow) { ui::GameSettings { overclock, disable_expansion_pak, - cheats: std::collections::HashMap::new(), // will be filled in later + cheats: rustc_hash::FxHashMap::default(), // will be filled in later load_savestate_slot: None, }, None, diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 94bf762..4668759 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -19,7 +19,7 @@ pub struct NetplayRoom { md5: Option, game_name: Option, pub port: Option, - features: Option>, + features: Option>, buffer_target: Option, } @@ -60,9 +60,8 @@ async fn get_local_servers() -> Vec<(String, String)> { broadcast_sock.recv(&mut buffer), ) .await - && let Ok(data) = serde_json::from_slice::>( - &buffer[..result], - ) + && let Ok(data) = + serde_json::from_slice::>(&buffer[..result]) { let mut local_servers = vec![]; for server in data.iter() { @@ -207,7 +206,7 @@ fn setup_create_window( if let Ok(response) = response && let Ok(server) = response - .json::>() + .json::>() .await { let server_url = server.values().next().unwrap(); @@ -427,19 +426,19 @@ fn update_sessions(weak: slint::Weak) { .header("netplay-id", env!("NETPLAY_ID")) .send(); tokio::spawn(async move { - let mut dispatcher_servers = std::collections::HashMap::new(); + let mut dispatcher_servers = rustc_hash::FxHashMap::default(); let response = task.await; if let Ok(response) = response && let Ok(servers) = response - .json::>() + .json::>() .await { dispatcher_servers = servers; } let weak2 = weak.clone(); weak.upgrade_in_event_loop(move |handle| { - let mut servers: std::collections::HashMap = - std::collections::HashMap::new(); + let mut servers: rustc_hash::FxHashMap = + rustc_hash::FxHashMap::default(); let server_names = handle.get_netplay_server_names(); let server_urls = handle.get_netplay_server_urls(); for (i, server_name) in server_names.iter().enumerate() { @@ -529,7 +528,7 @@ fn create_session( .as_millis() .to_string(); let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); - let mut features = std::collections::HashMap::new(); + let mut features = rustc_hash::FxHashMap::default(); if !game_cheats.is_empty() { features.insert("cheats".to_string(), game_cheats); @@ -1126,7 +1125,7 @@ pub fn netplay_window(app: &AppWindow) { ui::GameSettings { overclock: handle.get_overclock_n64_cpu(), disable_expansion_pak: handle.get_disable_expansion_pak(), - cheats: std::collections::HashMap::new(), // not used here + cheats: rustc_hash::FxHashMap::default(), // not used here load_savestate_slot: None, }, write_sender, diff --git a/src/ui/storage.rs b/src/ui/storage.rs index 07c837a..034410b 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -26,19 +26,19 @@ pub struct Paths { // the bool indicates whether the save has been written to // if that is the case, it will be flushed to the disk when the program closes -#[derive(Default, serde::Serialize, serde::Deserialize)] +#[derive(Default, Clone, serde::Serialize, serde::Deserialize)] pub struct Save { pub data: Vec, pub write_pending: bool, } -#[derive(Default, serde::Serialize, serde::Deserialize)] +#[derive(Default, Clone, serde::Serialize, serde::Deserialize)] pub struct RomSave { - pub data: std::collections::HashMap, + pub data: rustc_hash::FxHashMap, pub write_pending: bool, } -#[derive(Default, serde::Serialize, serde::Deserialize)] +#[derive(Default, Clone, serde::Serialize, serde::Deserialize)] pub struct Saves { pub eeprom: Save, pub sram: Save, From 19432f33bab4e9423b2d970e4c9c3bc7cb5b86c4 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 31 May 2026 09:45:02 +0200 Subject: [PATCH 0976/1117] use hashmap for lut (#994) --- src/device.rs | 4 +-- src/device/cop0.rs | 7 ++-- src/device/tlb.rs | 85 +++++++++++++++++++++------------------------- src/savestates.rs | 5 --- 4 files changed, 43 insertions(+), 58 deletions(-) diff --git a/src/device.rs b/src/device.rs index 70beeef..298952e 100644 --- a/src/device.rs +++ b/src/device.rs @@ -310,8 +310,8 @@ impl Device { is_event: false, instrs: [cop0::reserved; 32], instrs2: [cop0::reserved; 32], - tlb_lut_w: vec![], - tlb_lut_r: vec![], + tlb_lut_w: rustc_hash::FxHashMap::default(), + tlb_lut_r: rustc_hash::FxHashMap::default(), tlb_entries: [tlb::TlbEntry { mask: 0, vpn2: 0, diff --git a/src/device/cop0.rs b/src/device/cop0.rs index 0dd83d1..87521bd 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -100,10 +100,8 @@ pub struct Cop0 { pub instrs: [fn(&mut device::Device, u32); 32], #[serde(skip, default = "savestates::default_instructions")] pub instrs2: [fn(&mut device::Device, u32); 32], - #[serde(skip)] - pub tlb_lut_r: Vec, - #[serde(skip)] - pub tlb_lut_w: Vec, + pub tlb_lut_r: rustc_hash::FxHashMap, + pub tlb_lut_w: rustc_hash::FxHashMap, pub tlb_entries: [device::tlb::TlbEntry; 32], pub is_event: bool, } @@ -371,7 +369,6 @@ pub fn init(device: &mut device::Device) { ]; map_instructions(device); - device::tlb::init(device); // taken from VR4300 manual device.cpu.cop0.regs[COP0_RANDOM_REG] = 0b00000000000000000000000000011111; diff --git a/src/device/tlb.rs b/src/device/tlb.rs index 1c57000..4f4d48f 100644 --- a/src/device/tlb.rs +++ b/src/device/tlb.rs @@ -30,23 +30,6 @@ pub struct TlbEntry { pub phys_odd: u64, } -pub fn init(device: &mut device::Device) { - device.cpu.cop0.tlb_lut_r.resize( - 0x100000, - device::tlb::TlbLut { - address: 0, - cached: false, - }, - ); - device.cpu.cop0.tlb_lut_w.resize( - 0x100000, - device::tlb::TlbLut { - address: 0, - cached: false, - }, - ); -} - pub fn read(device: &mut device::Device, index: u64) { if index > 31 { return; @@ -166,15 +149,13 @@ fn tlb_unmap(device: &mut device::Device, index: u64) { if e.v_even != 0 { let mut i = e.start_even; while i < e.end_even { - device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].address = 0; - device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].cached = false; + device.cpu.cop0.tlb_lut_r.remove(&(i >> 12)); i += 0x1000 } if e.d_even != 0 { let mut i = e.start_even; while i < e.end_even { - device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].address = 0; - device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].cached = false; + device.cpu.cop0.tlb_lut_w.remove(&(i >> 12)); i += 0x1000 } } @@ -183,22 +164,20 @@ fn tlb_unmap(device: &mut device::Device, index: u64) { if e.v_odd != 0 { let mut i = e.start_odd; while i < e.end_odd { - device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].address = 0; - device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].cached = false; + device.cpu.cop0.tlb_lut_r.remove(&(i >> 12)); i += 0x1000 } if e.d_odd != 0 { let mut i = e.start_odd; while i < e.end_odd { - device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].address = 0; - device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].cached = false; + device.cpu.cop0.tlb_lut_w.remove(&(i >> 12)); i += 0x1000 } } } } -pub fn tlb_map(device: &mut device::Device, index: u64) { +fn tlb_map(device: &mut device::Device, index: u64) { let e = &device.cpu.cop0.tlb_entries[index as usize]; if e.v_even != 0 @@ -208,17 +187,25 @@ pub fn tlb_map(device: &mut device::Device, index: u64) { { let mut i = e.start_even; while i < e.end_even { - device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].address = - 0x80000000 | (e.phys_even + (i - e.start_even) + 0xFFF); - device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].cached = e.c_even != 2; + device.cpu.cop0.tlb_lut_r.insert( + i >> 12, + device::tlb::TlbLut { + address: 0x80000000 | (e.phys_even + (i - e.start_even) + 0xFFF), + cached: e.c_even != 2, + }, + ); i += 0x1000 } if e.d_even != 0 { let mut i = e.start_even; while i < e.end_even { - device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].address = - 0x80000000 | (e.phys_even + (i - e.start_even) + 0xFFF); - device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].cached = e.c_even != 2; + device.cpu.cop0.tlb_lut_w.insert( + i >> 12, + device::tlb::TlbLut { + address: 0x80000000 | (e.phys_even + (i - e.start_even) + 0xFFF), + cached: e.c_even != 2, + }, + ); i += 0x1000 } } @@ -231,17 +218,25 @@ pub fn tlb_map(device: &mut device::Device, index: u64) { { let mut i = e.start_odd; while i < e.end_odd { - device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].address = - 0x80000000 | (e.phys_odd + (i - e.start_odd) + 0xFFF); - device.cpu.cop0.tlb_lut_r[(i >> 12) as usize].cached = e.c_odd != 2; + device.cpu.cop0.tlb_lut_r.insert( + i >> 12, + device::tlb::TlbLut { + address: 0x80000000 | (e.phys_odd + (i - e.start_odd) + 0xFFF), + cached: e.c_odd != 2, + }, + ); i += 0x1000 } if e.d_odd != 0 { let mut i = e.start_odd; while i < e.end_odd { - device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].address = - 0x80000000 | (e.phys_odd + (i - e.start_odd) + 0xFFF); - device.cpu.cop0.tlb_lut_w[(i >> 12) as usize].cached = e.c_odd != 2; + device.cpu.cop0.tlb_lut_w.insert( + i >> 12, + device::tlb::TlbLut { + address: 0x80000000 | (e.phys_odd + (i - e.start_odd) + 0xFFF), + cached: e.c_odd != 2, + }, + ); i += 0x1000 } } @@ -256,19 +251,17 @@ pub fn get_physical_address( address &= 0xffffffff; if access_type == device::memory::AccessType::Write { - if device.cpu.cop0.tlb_lut_w[(address >> 12) as usize].address != 0 { + if let Some(lut) = device.cpu.cop0.tlb_lut_w.get(&(address >> 12)) { return ( - (device.cpu.cop0.tlb_lut_w[(address >> 12) as usize].address & 0x1FFFF000) - | (address & 0xFFF), - device.cpu.cop0.tlb_lut_w[(address >> 12) as usize].cached, + (lut.address & 0x1FFFF000) | (address & 0xFFF), + lut.cached, false, ); } - } else if device.cpu.cop0.tlb_lut_r[(address >> 12) as usize].address != 0 { + } else if let Some(lut) = device.cpu.cop0.tlb_lut_r.get(&(address >> 12)) { return ( - (device.cpu.cop0.tlb_lut_r[(address >> 12) as usize].address & 0x1FFFF000) - | (address & 0xFFF), - device.cpu.cop0.tlb_lut_r[(address >> 12) as usize].cached, + (lut.address & 0x1FFFF000) | (address & 0xFFF), + lut.cached, false, ); } diff --git a/src/savestates.rs b/src/savestates.rs index 59156d7..e0f2edb 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -247,11 +247,6 @@ pub fn load_savestate(device: &mut device::Device, rewind: bool) { } } - device::tlb::init(device); - for i in 0..32 { - device::tlb::tlb_map(device, i); - } - device::pif::connect_pif_channels(device); for i in 0..4 { if let Some(handler) = device.pif.channels[i].pak_handler { From 4453e66bcf3ff2a18e204c8b3a8e11b011eec757 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 31 May 2026 16:40:40 +0200 Subject: [PATCH 0977/1117] Improve state load time (#995) * load state speed improvements * more * more * more --- parallel-rdp/interface.cpp | 5 +- parallel-rdp/interface.hpp | 2 +- src/device.rs | 50 +++++++------- src/lib.rs | 2 +- src/savestates.rs | 132 ++++++++++++++++++++++--------------- src/ui/video.rs | 4 +- 6 files changed, 109 insertions(+), 86 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 682caf7..5b6d26a 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -702,8 +702,9 @@ void rdp_check_framebuffers(uint32_t address, uint32_t length) { size_t rdp_state_size() { return sizeof(RDP_DEVICE); } -void rdp_save_state(uint8_t *state) { - processor->wait_for_timeline(processor->signal_timeline()); +void rdp_save_state(uint8_t *state, bool rewind) { + if (!rewind) // speed hack for rewind + processor->wait_for_timeline(processor->signal_timeline()); memcpy(state, &rdp_device, sizeof(RDP_DEVICE)); } diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 7de41da..2cc2384 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -61,7 +61,7 @@ uint64_t rdp_process_commands(); void rdp_onscreen_message(const char *message, MESSAGE_LENGTH milliseconds); void rdp_check_framebuffers(uint32_t address, uint32_t length); size_t rdp_state_size(); -void rdp_save_state(uint8_t *state); +void rdp_save_state(uint8_t *state, bool rewind); void rdp_load_state(GFX_INFO _gfx_info, const uint8_t *state); void rdp_set_fps(uint32_t fps, uint32_t vis); diff --git a/src/device.rs b/src/device.rs index 298952e..abf7e25 100644 --- a/src/device.rs +++ b/src/device.rs @@ -255,32 +255,26 @@ pub fn zero_m128i() -> __m128i { } impl Device { - pub fn clone_without_ui(&self) -> Device { - Device { - netplay: None, - ui: ui::Ui::default(), - byte_swap: self.byte_swap, - savestate: self.savestate.clone(), - cpu: self.cpu.clone(), - pif: self.pif.clone(), - cart: self.cart.clone(), - memory: self.memory.clone(), - rsp: self.rsp.clone(), - rdp: self.rdp.clone(), - rdram: self.rdram.clone(), - mi: self.mi.clone(), - pi: self.pi.clone(), - vi: self.vi.clone(), - ai: self.ai.clone(), - si: self.si.clone(), - ri: self.ri.clone(), - rng: self.rng.clone(), - vru: self.vru.clone(), - transferpaks: self.transferpaks.clone(), - cheats: self.cheats.clone(), - } + pub fn clone_state(&mut self, device: &Device) { + self.cpu.clone_from(&device.cpu); + self.pif.clone_from(&device.pif); + self.cart.clone_from(&device.cart); + self.memory.clone_from(&device.memory); + self.rsp.clone_from(&device.rsp); + self.rdp.clone_from(&device.rdp); + self.rdram.clone_from(&device.rdram); + self.mi.clone_from(&device.mi); + self.pi.clone_from(&device.pi); + self.vi.clone_from(&device.vi); + self.ai.clone_from(&device.ai); + self.si.clone_from(&device.si); + self.ri.clone_from(&device.ri); + self.vru.clone_from(&device.vru); + self.transferpaks.clone_from(&device.transferpaks); + self.cheats.clone_from(&device.cheats); } - pub fn new() -> Device { + + pub fn new(with_ui: bool) -> Device { let mut byte_swap: usize = 0; let test: [u8; 4] = [1, 2, 3, 4]; // if the host computer is little endian, that means the RDRAM will be stored as little endian @@ -290,7 +284,11 @@ impl Device { } Device { netplay: None, - ui: ui::Ui::new(), + ui: if with_ui { + ui::Ui::new() + } else { + ui::Ui::default() + }, byte_swap, savestate: savestates::Savestate { save_state: false, diff --git a/src/lib.rs b/src/lib.rs index b263f6e..e051a68 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -137,7 +137,7 @@ pub async fn run(args: Args, arg_count: usize) -> std::io::Result<()> { return Err(Error::other("Savestate slot must be between 0 and 9")); } - let mut device = device::Device::new(); + let mut device = device::Device::new(true); device.ui.config.recent_roms.retain(|x| *x != game); device.ui.config.recent_roms.insert(0, game); diff --git a/src/savestates.rs b/src/savestates.rs index e0f2edb..b836e38 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -5,6 +5,7 @@ use serde::de::{Deserialize, Deserializer, SeqAccess, Visitor}; use serde::ser::{Serialize, SerializeSeq, Serializer}; #[cfg(target_arch = "x86_64")] use std::arch::x86_64::*; +use std::ops::Deref; struct M128iArrayVisitor; @@ -81,35 +82,55 @@ pub struct Savestate { } pub struct SavestateData { - device_data: Vec, - saves_data: Vec, + device: device::Device, + saves: ui::storage::Saves, rdp_state: Vec, ra_state: Vec, } +static DEVICE_CLONE: std::sync::LazyLock> = + std::sync::LazyLock::new(|| std::sync::Mutex::new(device::Device::new(false))); + +static SAVES_CLONE: std::sync::LazyLock> = + std::sync::LazyLock::new(|| std::sync::Mutex::new(ui::storage::Saves::default())); + pub fn create_savestate(device: &mut device::Device, rewind: bool) { + if let Ok(mut device_clone) = DEVICE_CLONE.lock() + && let Ok(mut saves_clone) = SAVES_CLONE.lock() + { + device_clone.clone_state(device); + saves_clone.clone_from(&device.ui.storage.saves); + } else { + ui::video::onscreen_message( + "Failed to create savestate", + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, + ); + return; + } + let mut rdp_state: Vec = vec![0; ui::video::state_size()]; - ui::video::save_state(rdp_state.as_mut_ptr()); + ui::video::save_state(rdp_state.as_mut_ptr(), rewind); let mut ra_state: Vec = vec![0; retroachievements::state_size()]; retroachievements::save_state(ra_state.as_mut_ptr(), ra_state.len()); let save_path = device.ui.storage.paths.savestate_file_path.clone(); - - let device_clone = device.clone_without_ui(); - let saves_clone = device.ui.storage.saves.clone(); let save_state_slot = device.ui.storage.save_state_slot; let rewind_pool = device.savestate.rewind_pool.clone(); - tokio::spawn(async move { + + tokio::task::spawn_blocking(move || { let mut error = false; - if let Ok(device_data) = postcard::to_stdvec(&device_clone) - && let Ok(saves_data) = postcard::to_stdvec(&saves_clone) + + if let Ok(mut device_clone) = DEVICE_CLONE.lock() + && let Ok(saves_clone) = SAVES_CLONE.lock() { if rewind { + let mut state = device::Device::new(false); + std::mem::swap(&mut state, &mut *device_clone); if let Ok(mut pool) = rewind_pool.lock() { pool.push_back(SavestateData { - device_data, - saves_data, + device: state, + saves: saves_clone.clone(), rdp_state, ra_state, }); @@ -118,13 +139,16 @@ pub fn create_savestate(device: &mut device::Device, rewind: bool) { } } } else { - if let Ok(compressed_file) = ui::storage::compress_file(&[ - (&device_data, "device"), - (&saves_data, "saves"), - (&rdp_state, "rdp_state"), - (&ra_state, "ra_state"), - ]) { - if let Err(e) = tokio::fs::write(save_path, compressed_file).await { + if let Ok(device_data) = postcard::to_stdvec(device_clone.deref()) + && let Ok(saves_data) = postcard::to_stdvec(saves_clone.deref()) + && let Ok(compressed_file) = ui::storage::compress_file(&[ + (&device_data, "device"), + (&saves_data, "saves"), + (&rdp_state, "rdp_state"), + (&ra_state, "ra_state"), + ]) + { + if let Err(e) = std::fs::write(save_path, compressed_file) { eprintln!("Error writing savestate: {}", e); error = true; } @@ -136,6 +160,7 @@ pub fn create_savestate(device: &mut device::Device, rewind: bool) { } else { error = true; } + if error { ui::video::onscreen_message( &format!("Failed to create savestate in slot {}", save_state_slot), @@ -171,55 +196,54 @@ pub fn load_savestate(device: &mut device::Device, rewind: bool) { && let Ok(saves_data) = ui::storage::decompress_file(savestate, "saves") && let Ok(rdp_state) = ui::storage::decompress_file(savestate, "rdp_state") && let Ok(ra_state) = ui::storage::decompress_file(savestate, "ra_state") + && let Ok(state) = postcard::from_bytes::(&device_data) + && let Ok(saves) = postcard::from_bytes(&saves_data) { Some(SavestateData { - device_data, - saves_data, + device: state, + saves, rdp_state, ra_state, }) } else { None }; - if let Some(state_data) = state_data - && let Ok(mut state) = postcard::from_bytes::(&state_data.device_data) - && let Ok(saves) = postcard::from_bytes(&state_data.saves_data) - && device.rdram.size == state.rdram.size + + if let Some(mut state) = state_data + && device.rdram.size == state.device.rdram.size { - device.savestate.last_rewind_saved = state.vi.elapsed_time; + device.savestate.last_rewind_saved = state.device.vi.elapsed_time; - device.ui.storage.saves = saves; + std::mem::swap(&mut device.ui.storage.saves, &mut state.saves); - std::mem::swap(&mut device.cpu, &mut state.cpu); - std::mem::swap(&mut device.pif, &mut state.pif); + std::mem::swap(&mut device.cpu, &mut state.device.cpu); + std::mem::swap(&mut device.pif, &mut state.device.pif); - let rom = device.cart.rom.clone(); - std::mem::swap(&mut device.cart, &mut state.cart); - device.cart.rom = rom; + std::mem::swap(&mut device.cart, &mut state.device.cart); + std::mem::swap(&mut device.cart.rom, &mut state.device.cart.rom); // ROM is not included in the savestate - std::mem::swap(&mut device.memory, &mut state.memory); - std::mem::swap(&mut device.rsp, &mut state.rsp); - std::mem::swap(&mut device.rdp, &mut state.rdp); + std::mem::swap(&mut device.memory, &mut state.device.memory); + std::mem::swap(&mut device.rsp, &mut state.device.rsp); + std::mem::swap(&mut device.rdp, &mut state.device.rdp); - device.rdram.mem.clone_from(&state.rdram.mem); - device.rdram.regs = state.rdram.regs; + device.rdram.mem.clone_from(&state.device.rdram.mem); // RDRAM address should not change + std::mem::swap(&mut device.rdram.regs, &mut state.device.rdram.regs); - std::mem::swap(&mut device.mi, &mut state.mi); - std::mem::swap(&mut device.pi, &mut state.pi); - std::mem::swap(&mut device.vi, &mut state.vi); - std::mem::swap(&mut device.ai, &mut state.ai); - std::mem::swap(&mut device.si, &mut state.si); - std::mem::swap(&mut device.ri, &mut state.ri); - std::mem::swap(&mut device.vru, &mut state.vru); - std::mem::swap(&mut device.cheats, &mut state.cheats); + std::mem::swap(&mut device.mi, &mut state.device.mi); + std::mem::swap(&mut device.pi, &mut state.device.pi); + std::mem::swap(&mut device.vi, &mut state.device.vi); + std::mem::swap(&mut device.ai, &mut state.device.ai); + std::mem::swap(&mut device.si, &mut state.device.si); + std::mem::swap(&mut device.ri, &mut state.device.ri); + std::mem::swap(&mut device.vru, &mut state.device.vru); + std::mem::swap(&mut device.cheats, &mut state.device.cheats); - let mut tpak_rom = [vec![], vec![], vec![], vec![]]; - for (i, item) in tpak_rom.iter_mut().enumerate() { - *item = device.transferpaks[i].cart.rom.clone(); - } - std::mem::swap(&mut device.transferpaks, &mut state.transferpaks); - for (i, item) in tpak_rom.iter().enumerate() { - device.transferpaks[i].cart.rom = item.clone(); + std::mem::swap(&mut device.transferpaks, &mut state.device.transferpaks); + for (i, item) in device.transferpaks.iter_mut().enumerate() { + std::mem::swap( + &mut item.cart.rom, + &mut state.device.transferpaks[i].cart.rom, + ); // ROM is not included in the savestate } device::memory::init(device); @@ -276,11 +300,11 @@ pub fn load_savestate(device: &mut device::Device, rewind: bool) { } ui::audio::update_freq(device); - ui::video::load_state(device, state_data.rdp_state.as_ptr()); + ui::video::load_state(device, state.rdp_state.as_ptr()); retroachievements::set_rdram(device.rdram.mem.as_ptr(), device.rdram.size as usize); - if !state_data.ra_state.is_empty() { - retroachievements::load_state(state_data.ra_state.as_ptr(), state_data.ra_state.len()); + if !state.ra_state.is_empty() { + retroachievements::load_state(state.ra_state.as_ptr(), state.ra_state.len()); } else { retroachievements::load_state(std::ptr::null(), 0); } diff --git a/src/ui/video.rs b/src/ui/video.rs index 01daff0..ac9f212 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -161,8 +161,8 @@ pub fn state_size() -> usize { unsafe { rdp_state_size() } } -pub fn save_state(rdp_state: *mut u8) { - unsafe { rdp_save_state(rdp_state) } +pub fn save_state(rdp_state: *mut u8, rewind: bool) { + unsafe { rdp_save_state(rdp_state, rewind) } } pub fn load_state(device: &mut device::Device, rdp_state: *const u8) { From e25818b451c595fbb7ca14bb53fb55c53eec57f7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 31 May 2026 18:22:50 +0200 Subject: [PATCH 0978/1117] keep static device intact (#996) --- src/savestates.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/savestates.rs b/src/savestates.rs index b836e38..cc03bf9 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -121,12 +121,12 @@ pub fn create_savestate(device: &mut device::Device, rewind: bool) { tokio::task::spawn_blocking(move || { let mut error = false; - if let Ok(mut device_clone) = DEVICE_CLONE.lock() + if let Ok(device_clone) = DEVICE_CLONE.lock() && let Ok(saves_clone) = SAVES_CLONE.lock() { if rewind { let mut state = device::Device::new(false); - std::mem::swap(&mut state, &mut *device_clone); + state.clone_state(device_clone.deref()); if let Ok(mut pool) = rewind_pool.lock() { pool.push_back(SavestateData { device: state, From 5175d50aa871a5368c79cb8c9f2b16da07366114 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 31 May 2026 19:49:07 +0200 Subject: [PATCH 0979/1117] save video state before cloning device (#997) --- src/savestates.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/savestates.rs b/src/savestates.rs index cc03bf9..273ab5f 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -95,6 +95,12 @@ static SAVES_CLONE: std::sync::LazyLock> = std::sync::LazyLock::new(|| std::sync::Mutex::new(ui::storage::Saves::default())); pub fn create_savestate(device: &mut device::Device, rewind: bool) { + let mut rdp_state: Vec = vec![0; ui::video::state_size()]; + ui::video::save_state(rdp_state.as_mut_ptr(), rewind); + + let mut ra_state: Vec = vec![0; retroachievements::state_size()]; + retroachievements::save_state(ra_state.as_mut_ptr(), ra_state.len()); + if let Ok(mut device_clone) = DEVICE_CLONE.lock() && let Ok(mut saves_clone) = SAVES_CLONE.lock() { @@ -108,12 +114,6 @@ pub fn create_savestate(device: &mut device::Device, rewind: bool) { return; } - let mut rdp_state: Vec = vec![0; ui::video::state_size()]; - ui::video::save_state(rdp_state.as_mut_ptr(), rewind); - - let mut ra_state: Vec = vec![0; retroachievements::state_size()]; - retroachievements::save_state(ra_state.as_mut_ptr(), ra_state.len()); - let save_path = device.ui.storage.paths.savestate_file_path.clone(); let save_state_slot = device.ui.storage.save_state_slot; let rewind_pool = device.savestate.rewind_pool.clone(); From d968983ceb110cc38cc523059d0e839c2e4ab111 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 31 May 2026 21:29:28 +0200 Subject: [PATCH 0980/1117] Savestate tweaks (#999) * move savestate processing * fix stack overflow * more * more --- parallel-rdp/interface.cpp | 7 +++++-- src/device.rs | 3 ++- src/device/controller.rs | 4 ++-- src/device/rdp.rs | 16 +--------------- src/device/vi.rs | 5 ++--- src/savestates.rs | 24 ++++++++++++++++++++---- 6 files changed, 32 insertions(+), 27 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 5b6d26a..00358d4 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -703,8 +703,11 @@ void rdp_check_framebuffers(uint32_t address, uint32_t length) { size_t rdp_state_size() { return sizeof(RDP_DEVICE); } void rdp_save_state(uint8_t *state, bool rewind) { - if (!rewind) // speed hack for rewind - processor->wait_for_timeline(processor->signal_timeline()); + if (!rewind) { // speed hack for rewind + processor->idle(); + rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); + sync_signal = 0; + } memcpy(state, &rdp_device, sizeof(RDP_DEVICE)); } diff --git a/src/device.rs b/src/device.rs index abf7e25..2dcdcc0 100644 --- a/src/device.rs +++ b/src/device.rs @@ -229,6 +229,7 @@ pub struct Device { #[serde(skip)] pub ui: ui::Ui, pub byte_swap: usize, + pub frame_counter: u64, pub savestate: savestates::Savestate, pub cpu: cpu::Cpu, pub pif: pif::Pif, @@ -290,6 +291,7 @@ impl Device { ui::Ui::default() }, byte_swap, + frame_counter: 0, savestate: savestates::Savestate { save_state: false, load_state: false, @@ -529,7 +531,6 @@ impl Device { count_per_scanline: 0, enable_speed_limiter: true, next_pace_deadline: None, - vi_counter: 0, min_wait_time: std::time::Duration::from_secs(1), frame_time: 0.0, elapsed_time: 0.0, diff --git a/src/device/controller.rs b/src/device/controller.rs index 6a761fd..7827789 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -58,12 +58,12 @@ pub fn process(device: &mut device::Device, channel: usize) { let offset = device.pif.channels[channel].rx_buf.unwrap(); let input = if let Some(netplay) = &mut device.netplay { if netplay.player_number as usize == channel { - let local_input = ui::input::get(&mut device.ui, 0, device.vi.vi_counter); + let local_input = ui::input::get(&mut device.ui, 0, device.frame_counter); netplay::send_input(netplay, local_input); } netplay::get_input(device, channel) } else { - ui::input::get(&mut device.ui, channel, device.vi.vi_counter) + ui::input::get(&mut device.ui, channel, device.frame_counter) }; device.pif.ram[offset..offset + 4].copy_from_slice(&input.data.to_ne_bytes()); diff --git a/src/device/rdp.rs b/src/device/rdp.rs index 4a149cb..3d115f8 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -120,21 +120,7 @@ fn run_rdp(device: &mut device::Device) { device.rdp.regs_dpc[DPC_PIPEBUSY_REG] = 0xFFFFFF; if timer != 0 { - if device.savestate.save_state || device.savestate.save_rewind { - // Right after full sync, good time for save state - let rewind = device.savestate.save_rewind && !device.savestate.save_state; - if rewind { - device.savestate.save_rewind = false; - } - device.savestate.save_state = false; - savestates::create_savestate(device, rewind); - } else if device.savestate.load_state || device.savestate.load_rewind { - // Right after full sync, good time for save state - device.savestate.load_state = false; - let rewind = device.savestate.load_rewind; - device.savestate.load_rewind = false; - savestates::load_savestate(device, rewind); - } + savestates::process_savestates(device); device::events::create_event(device, device::events::EVENT_TYPE_DP, timer) } } diff --git a/src/device/vi.rs b/src/device/vi.rs index 664999f..f0d8fc4 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -26,7 +26,6 @@ pub struct Vi { pub next_pace_deadline: Option, pub count_per_scanline: u64, pub enable_speed_limiter: bool, - pub vi_counter: u64, pub min_wait_time: std::time::Duration, pub frame_time: f64, pub elapsed_time: f64, @@ -152,14 +151,14 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { reset_pace_deadline(device); } - if device.vi.vi_counter.is_multiple_of(device.vi.limit_freq) && device.vi.enable_speed_limiter { + if device.frame_counter.is_multiple_of(device.vi.limit_freq) && device.vi.enable_speed_limiter { speed_limiter(device); } unsafe { sdl3_sys::events::SDL_PumpEvents() }; ui::video::update_screen(); - device.vi.vi_counter += 1; + device.frame_counter += 1; if device.netplay.is_none() && paused { if retroachievements::get_hardcore() { diff --git a/src/savestates.rs b/src/savestates.rs index 273ab5f..4868062 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -94,7 +94,23 @@ static DEVICE_CLONE: std::sync::LazyLock> = static SAVES_CLONE: std::sync::LazyLock> = std::sync::LazyLock::new(|| std::sync::Mutex::new(ui::storage::Saves::default())); -pub fn create_savestate(device: &mut device::Device, rewind: bool) { +pub fn process_savestates(device: &mut device::Device) { + if device.savestate.save_state || device.savestate.save_rewind { + let rewind = device.savestate.save_rewind && !device.savestate.save_state; + if rewind { + device.savestate.save_rewind = false; + } + device.savestate.save_state = false; + create_savestate(device, rewind); + } else if device.savestate.load_state || device.savestate.load_rewind { + device.savestate.load_state = false; + let rewind = device.savestate.load_rewind; + device.savestate.load_rewind = false; + load_savestate(device, rewind); + } +} + +fn create_savestate(device: &mut device::Device, rewind: bool) { let mut rdp_state: Vec = vec![0; ui::video::state_size()]; ui::video::save_state(rdp_state.as_mut_ptr(), rewind); @@ -175,7 +191,7 @@ pub fn create_savestate(device: &mut device::Device, rewind: bool) { }); } -pub fn load_savestate(device: &mut device::Device, rewind: bool) { +fn load_savestate(device: &mut device::Device, rewind: bool) { if retroachievements::get_hardcore() { ui::video::onscreen_message( "Cannot load savestate in RA hardcore mode", @@ -196,11 +212,11 @@ pub fn load_savestate(device: &mut device::Device, rewind: bool) { && let Ok(saves_data) = ui::storage::decompress_file(savestate, "saves") && let Ok(rdp_state) = ui::storage::decompress_file(savestate, "rdp_state") && let Ok(ra_state) = ui::storage::decompress_file(savestate, "ra_state") - && let Ok(state) = postcard::from_bytes::(&device_data) + && let Ok(state) = postcard::from_bytes::>(&device_data) && let Ok(saves) = postcard::from_bytes(&saves_data) { Some(SavestateData { - device: state, + device: *state, saves, rdp_state, ra_state, From cbc973a559848ab20b52fa9498923b9f797c0ba8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 31 May 2026 22:25:28 +0200 Subject: [PATCH 0981/1117] idle RDP before load state (#1000) * idle RDP before load state * more --- build.rs | 1 + parallel-rdp/interface.cpp | 16 +++++++--------- parallel-rdp/interface.hpp | 3 ++- src/savestates.rs | 8 +++++++- src/ui/video.rs | 8 ++++++-- 5 files changed, 23 insertions(+), 13 deletions(-) diff --git a/build.rs b/build.rs index 89f3ead..201a331 100644 --- a/build.rs +++ b/build.rs @@ -204,6 +204,7 @@ fn main() { .allowlist_function("rdp_check_callback") .allowlist_function("rdp_check_framebuffers") .allowlist_function("rdp_state_size") + .allowlist_function("rdp_idle") .allowlist_function("rdp_save_state") .allowlist_function("rdp_load_state") .allowlist_function("rdp_set_fps") diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 00358d4..39c6a7f 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -702,19 +702,17 @@ void rdp_check_framebuffers(uint32_t address, uint32_t length) { size_t rdp_state_size() { return sizeof(RDP_DEVICE); } -void rdp_save_state(uint8_t *state, bool rewind) { - if (!rewind) { // speed hack for rewind - processor->idle(); - rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); - sync_signal = 0; - } +void rdp_idle() { + processor->idle(); + rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); + sync_signal = 0; +} + +void rdp_save_state(uint8_t *state) { memcpy(state, &rdp_device, sizeof(RDP_DEVICE)); } void rdp_load_state(GFX_INFO _gfx_info, const uint8_t *state) { - sync_signal = 0; - rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); - gfx_info = _gfx_info; memcpy(&rdp_device, state, sizeof(RDP_DEVICE)); } diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 2cc2384..310bd7c 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -61,7 +61,8 @@ uint64_t rdp_process_commands(); void rdp_onscreen_message(const char *message, MESSAGE_LENGTH milliseconds); void rdp_check_framebuffers(uint32_t address, uint32_t length); size_t rdp_state_size(); -void rdp_save_state(uint8_t *state, bool rewind); +void rdp_idle(); +void rdp_save_state(uint8_t *state); void rdp_load_state(GFX_INFO _gfx_info, const uint8_t *state); void rdp_set_fps(uint32_t fps, uint32_t vis); diff --git a/src/savestates.rs b/src/savestates.rs index 4868062..9782f46 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -111,8 +111,12 @@ pub fn process_savestates(device: &mut device::Device) { } fn create_savestate(device: &mut device::Device, rewind: bool) { + if !rewind { + // skipped on rewind as a speed hack + ui::video::idle(); // to flush the RDP so the RDRAM is updated + } let mut rdp_state: Vec = vec![0; ui::video::state_size()]; - ui::video::save_state(rdp_state.as_mut_ptr(), rewind); + ui::video::save_state(rdp_state.as_mut_ptr()); let mut ra_state: Vec = vec![0; retroachievements::state_size()]; retroachievements::save_state(ra_state.as_mut_ptr(), ra_state.len()); @@ -228,6 +232,8 @@ fn load_savestate(device: &mut device::Device, rewind: bool) { if let Some(mut state) = state_data && device.rdram.size == state.device.rdram.size { + ui::video::idle(); // to flush the RDP so it doesn't overwrite the RDRAM + device.savestate.last_rewind_saved = state.device.vi.elapsed_time; std::mem::swap(&mut device.ui.storage.saves, &mut state.saves); diff --git a/src/ui/video.rs b/src/ui/video.rs index ac9f212..62d1fb1 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -161,8 +161,12 @@ pub fn state_size() -> usize { unsafe { rdp_state_size() } } -pub fn save_state(rdp_state: *mut u8, rewind: bool) { - unsafe { rdp_save_state(rdp_state, rewind) } +pub fn save_state(rdp_state: *mut u8) { + unsafe { rdp_save_state(rdp_state) } +} + +pub fn idle() { + unsafe { rdp_idle() } } pub fn load_state(device: &mut device::Device, rdp_state: *const u8) { From cd6726d451261295f4723b52151cb3a6de50eb67 Mon Sep 17 00:00:00 2001 From: Connor Welsh Date: Sun, 31 May 2026 17:05:26 -0400 Subject: [PATCH 0982/1117] set application ID (#998) --- src/lib.rs | 8 ++++++++ src/ui.rs | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index e051a68..e19d7f8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -93,6 +93,13 @@ pub struct Args { pub ra_password: Option, } +#[cfg(feature = "gui")] +fn set_app_id() { + if let Err(e) = slint::set_xdg_app_id(ui::APP_ID) { + eprintln!("Could not set application ID: {}", e); + } +} + pub async fn run(args: Args, arg_count: usize) -> std::io::Result<()> { let dirs = ui::get_dirs(); @@ -299,6 +306,7 @@ pub async fn run(args: Args, arg_count: usize) -> std::io::Result<()> { #[cfg(feature = "gui")] { let app = ui::gui::AppWindow::new().unwrap(); + set_app_id(); ui::gui::app_window(&app, false); } } diff --git a/src/ui.rs b/src/ui.rs index 0a9aa1f..ede5ef0 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -17,6 +17,8 @@ pub mod video; #[cfg(all(feature = "gui", not(target_os = "android")))] pub mod vru; +pub const APP_ID: &str = "io.github.gopher64.gopher64"; + pub static WEB_CLIENT: std::sync::LazyLock = std::sync::LazyLock::new(|| { reqwest::Client::builder() .user_agent(format!( @@ -113,6 +115,8 @@ pub fn sdl_hints() { sdl3_sys::everything::SDL_HINT_ANDROID_ALLOW_RECREATE_ACTIVITY, hint.as_ptr(), ); + let app_id = std::ffi::CString::new(APP_ID).unwrap(); + sdl3_sys::everything::SDL_SetHint(sdl3_sys::everything::SDL_HINT_APP_ID, app_id.as_ptr()); } } From 5a5ff40efcabb255d2017ff5ef5e92e6c928cb88 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 1 Jun 2026 11:07:37 +0200 Subject: [PATCH 0983/1117] set_rdram should not be needed (#1001) * set_rdram should not be needed * more --- src/savestates.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/savestates.rs b/src/savestates.rs index 9782f46..800442b 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -248,7 +248,7 @@ fn load_savestate(device: &mut device::Device, rewind: bool) { std::mem::swap(&mut device.rsp, &mut state.device.rsp); std::mem::swap(&mut device.rdp, &mut state.device.rdp); - device.rdram.mem.clone_from(&state.device.rdram.mem); // RDRAM address should not change + device.rdram.mem.copy_from_slice(&state.device.rdram.mem); // RDRAM address should not change std::mem::swap(&mut device.rdram.regs, &mut state.device.rdram.regs); std::mem::swap(&mut device.mi, &mut state.device.mi); @@ -324,7 +324,6 @@ fn load_savestate(device: &mut device::Device, rewind: bool) { ui::audio::update_freq(device); ui::video::load_state(device, state.rdp_state.as_ptr()); - retroachievements::set_rdram(device.rdram.mem.as_ptr(), device.rdram.size as usize); if !state.ra_state.is_empty() { retroachievements::load_state(state.ra_state.as_ptr(), state.ra_state.len()); } else { From eb64a9ad43ffbb29d4c47edb02fe24c56f3936ea Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 1 Jun 2026 13:43:39 +0200 Subject: [PATCH 0984/1117] switch idle command (#1002) * switch idle command * more --- build.rs | 2 +- parallel-rdp/interface.cpp | 4 ++-- parallel-rdp/interface.hpp | 2 +- src/savestates.rs | 4 ++-- src/ui/video.rs | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/build.rs b/build.rs index 201a331..c3093ce 100644 --- a/build.rs +++ b/build.rs @@ -204,7 +204,7 @@ fn main() { .allowlist_function("rdp_check_callback") .allowlist_function("rdp_check_framebuffers") .allowlist_function("rdp_state_size") - .allowlist_function("rdp_idle") + .allowlist_function("rdp_hard_sync") .allowlist_function("rdp_save_state") .allowlist_function("rdp_load_state") .allowlist_function("rdp_set_fps") diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 39c6a7f..de79721 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -702,8 +702,8 @@ void rdp_check_framebuffers(uint32_t address, uint32_t length) { size_t rdp_state_size() { return sizeof(RDP_DEVICE); } -void rdp_idle() { - processor->idle(); +void rdp_hard_sync() { + processor->wait_for_timeline(processor->signal_timeline()); rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); sync_signal = 0; } diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 310bd7c..b9b006a 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -61,7 +61,7 @@ uint64_t rdp_process_commands(); void rdp_onscreen_message(const char *message, MESSAGE_LENGTH milliseconds); void rdp_check_framebuffers(uint32_t address, uint32_t length); size_t rdp_state_size(); -void rdp_idle(); +void rdp_hard_sync(); void rdp_save_state(uint8_t *state); void rdp_load_state(GFX_INFO _gfx_info, const uint8_t *state); void rdp_set_fps(uint32_t fps, uint32_t vis); diff --git a/src/savestates.rs b/src/savestates.rs index 800442b..c483135 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -113,7 +113,7 @@ pub fn process_savestates(device: &mut device::Device) { fn create_savestate(device: &mut device::Device, rewind: bool) { if !rewind { // skipped on rewind as a speed hack - ui::video::idle(); // to flush the RDP so the RDRAM is updated + ui::video::hard_sync(); // to flush the RDP so the RDRAM is updated } let mut rdp_state: Vec = vec![0; ui::video::state_size()]; ui::video::save_state(rdp_state.as_mut_ptr()); @@ -232,7 +232,7 @@ fn load_savestate(device: &mut device::Device, rewind: bool) { if let Some(mut state) = state_data && device.rdram.size == state.device.rdram.size { - ui::video::idle(); // to flush the RDP so it doesn't overwrite the RDRAM + ui::video::hard_sync(); // to flush the RDP so it doesn't overwrite the RDRAM device.savestate.last_rewind_saved = state.device.vi.elapsed_time; diff --git a/src/ui/video.rs b/src/ui/video.rs index 62d1fb1..e7bed84 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -165,8 +165,8 @@ pub fn save_state(rdp_state: *mut u8) { unsafe { rdp_save_state(rdp_state) } } -pub fn idle() { - unsafe { rdp_idle() } +pub fn hard_sync() { + unsafe { rdp_hard_sync() } } pub fn load_state(device: &mut device::Device, rdp_state: *const u8) { From 0a44124c20ede1de2c0406e78c99fb91edb2eb80 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 1 Jun 2026 22:30:31 +0200 Subject: [PATCH 0985/1117] process savestates on swap buffer (#1003) --- src/device/rdp.rs | 3 +-- src/device/vi.rs | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/device/rdp.rs b/src/device/rdp.rs index 3d115f8..fcccb69 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -1,4 +1,4 @@ -use crate::{device, savestates, ui}; +use crate::{device, ui}; pub const DPC_START_REG: usize = 0; pub const DPC_END_REG: usize = 1; @@ -120,7 +120,6 @@ fn run_rdp(device: &mut device::Device) { device.rdp.regs_dpc[DPC_PIPEBUSY_REG] = 0xFFFFFF; if timer != 0 { - savestates::process_savestates(device); device::events::create_event(device, device::events::EVENT_TYPE_DP, timer) } } diff --git a/src/device/vi.rs b/src/device/vi.rs index f0d8fc4..f33c30d 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -1,4 +1,4 @@ -use crate::{cheats, device, netplay, retroachievements, ui}; +use crate::{cheats, device, netplay, retroachievements, savestates, ui}; const VI_STATUS_REG: usize = 0; const VI_ORIGIN_REG: usize = 1; @@ -110,6 +110,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u let current_origin = device.vi.regs[reg as usize]; device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); if current_origin != device.vi.regs[reg as usize] { + savestates::process_savestates(device); let _ = device.ui.video.fps_tx.as_ref().unwrap().try_send(true); } } From 681f8670f59ed374e4bf74bac69a6140bb4a18c7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 5 Jun 2026 09:43:31 +0200 Subject: [PATCH 0986/1117] GGRS netplay (#1004) * update netplay * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more --- Cargo.lock | 1850 +++++++++++++++-- Cargo.toml | 5 +- data/translations/de/LC_MESSAGES/gopher64.po | 138 +- data/translations/es/LC_MESSAGES/gopher64.po | 138 +- data/translations/fr/LC_MESSAGES/gopher64.po | 138 +- data/translations/gopher64.pot | 118 +- data/translations/ja/LC_MESSAGES/gopher64.po | 138 +- data/translations/nl/LC_MESSAGES/gopher64.po | 138 +- .../pt_BR/LC_MESSAGES/gopher64.po | 138 +- data/translations/ru/LC_MESSAGES/gopher64.po | 138 +- src/device.rs | 10 +- src/device/cart/rom.rs | 2 +- src/device/controller.rs | 10 +- src/device/controller/rumble.rs | 2 +- src/device/pif.rs | 4 +- src/device/vi.rs | 42 +- src/lib.rs | 28 +- src/netplay.rs | 622 +++--- src/savestates.rs | 56 +- src/ui/android.rs | 11 +- src/ui/audio.rs | 6 + src/ui/gui.rs | 14 +- src/ui/gui/appwindow.slint | 52 +- src/ui/gui/netplay_create.slint | 69 +- src/ui/gui/netplay_join.slint | 23 +- src/ui/gui/netplay_page.slint | 12 +- src/ui/gui/netplay_wait.slint | 28 +- src/ui/input.rs | 1 + src/ui/netplay.rs | 1276 ++++-------- src/ui/storage.rs | 18 +- 30 files changed, 3143 insertions(+), 2082 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ad1d790..5c6159b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -69,7 +69,7 @@ checksum = "d5d552169ef018149966ed139bb0311c6947b3343e9140d1b9f88d69da9528fd" dependencies = [ "accesskit", "accesskit_atspi_common", - "async-channel", + "async-channel 2.5.0", "async-executor", "async-task", "atspi", @@ -113,17 +113,52 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common 0.1.7", + "generic-array", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher 0.4.4", + "cpufeatures 0.2.17", +] + [[package]] name = "aes" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1fc76eaeac4c9164506c466d4ffdd8ec9d0c5bf57ee97177c4d8eceb3a0e138" dependencies = [ - "cipher", + "cipher 0.5.2", "cpubits", "cpufeatures 0.3.0", ] +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes 0.8.4", + "cipher 0.4.4", + "ctr", + "ghash", + "subtle", +] + [[package]] name = "ahash" version = "0.8.12" @@ -177,7 +212,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289" dependencies = [ "android-properties", - "bitflags 2.11.1", + "bitflags 2.12.1", "cc", "cesu8", "jni 0.21.1", @@ -198,7 +233,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd" dependencies = [ "android-properties", - "bitflags 2.11.1", + "bitflags 2.12.1", "cc", "jni 0.22.4", "libc", @@ -307,6 +342,15 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" +[[package]] +name = "arc-swap" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a3a1fd6f75306b68087b831f025c712524bcb19aad54e557b1129cfa0a2b207" +dependencies = [ + "rustversion", +] + [[package]] name = "arg_enum_proc_macro" version = "0.3.4" @@ -354,18 +398,68 @@ dependencies = [ "libloading", ] +[[package]] +name = "asn1-rs" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" +dependencies = [ + "asn1-rs-derive", + "asn1-rs-impl", + "displaydoc", + "nom 7.1.3", + "num-traits", + "rusticata-macros", + "thiserror 1.0.69", + "time", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "asn1-rs-impl" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "async-broadcast" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ - "event-listener", + "event-listener 5.4.1", "event-listener-strategy", "futures-core", "pin-project-lite", ] +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + [[package]] name = "async-channel" version = "2.5.0" @@ -378,6 +472,19 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-compat" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ba85bc55464dcbf728b56d97e119d673f4cf9062be330a9a26f3acf504a590" +dependencies = [ + "futures-core", + "futures-io", + "once_cell", + "pin-project-lite", + "tokio", +] + [[package]] name = "async-executor" version = "1.14.0" @@ -392,6 +499,21 @@ dependencies = [ "slab", ] +[[package]] +name = "async-global-executor" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" +dependencies = [ + "async-channel 2.5.0", + "async-executor", + "async-io", + "async-lock", + "blocking", + "futures-lite", + "once_cell", +] + [[package]] name = "async-io" version = "2.6.0" @@ -416,7 +538,7 @@ version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" dependencies = [ - "event-listener", + "event-listener 5.4.1", "event-listener-strategy", "pin-project-lite", ] @@ -427,14 +549,14 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" dependencies = [ - "async-channel", + "async-channel 2.5.0", "async-io", "async-lock", "async-signal", "async-task", "blocking", "cfg-if", - "event-listener", + "event-listener 5.4.1", "futures-lite", "rustix 1.1.4", ] @@ -468,12 +590,51 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "async-std" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c8e079a4ab67ae52b7403632e4618815d6db36d2a010cfe41b02c1b1578f93b" +dependencies = [ + "async-channel 1.9.0", + "async-global-executor", + "async-io", + "async-lock", + "crossbeam-utils", + "futures-channel", + "futures-core", + "futures-io", + "futures-lite", + "gloo-timers 0.3.0", + "kv-log-macro", + "log", + "memchr", + "once_cell", + "pin-project-lite", + "pin-utils", + "slab", + "wasm-bindgen-futures", +] + [[package]] name = "async-task" version = "4.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" +[[package]] +name = "async-tls" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ae3c9eba89d472a0e4fe1dea433df78fbbe63d2b764addaf2ba3a6bde89a5e" +dependencies = [ + "futures-core", + "futures-io", + "rustls 0.21.12", + "rustls-pemfile", + "webpki-roots", +] + [[package]] name = "async-trait" version = "0.1.89" @@ -485,6 +646,34 @@ dependencies = [ "syn", ] +[[package]] +name = "async-tungstenite" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc405d38be14342132609f06f02acaf825ddccfe76c4824a69281e0458ebd4" +dependencies = [ + "async-std", + "async-tls", + "atomic-waker", + "futures-core", + "futures-io", + "futures-task", + "log", + "pin-project-lite", + "tungstenite 0.28.0", +] + +[[package]] +name = "async_io_stream" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" +dependencies = [ + "futures", + "pharos", + "rustc_version", +] + [[package]] name = "atomic-polyfill" version = "1.0.3" @@ -598,12 +787,39 @@ dependencies = [ "arrayvec", ] +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64ct" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + [[package]] name = "bincode" version = "2.0.1" @@ -620,7 +836,7 @@ version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "cexpr", "clang-sys", "itertools 0.13.0", @@ -630,7 +846,7 @@ dependencies = [ "quote", "regex", "rustc-hash 2.1.2", - "shlex", + "shlex 1.3.0", "syn", ] @@ -655,6 +871,16 @@ version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" +[[package]] +name = "bitfield-rle" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "215d5574bfd0d6d9243a9c741690f0b7ee8a0f39d3195283779793ed46d984e1" +dependencies = [ + "anyhow", + "varinteger", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -663,9 +889,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a" dependencies = [ "serde_core", ] @@ -704,6 +930,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "block-padding" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +dependencies = [ + "generic-array", +] + [[package]] name = "block-padding" version = "0.4.2" @@ -737,7 +972,7 @@ version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" dependencies = [ - "async-channel", + "async-channel 2.5.0", "async-task", "futures-io", "futures-lite", @@ -772,6 +1007,29 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" +[[package]] +name = "bytecheck" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0caa33a2c0edca0419d15ac723dff03f1956f7978329b1e3b5fdaaaed9d3ca8b" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "rancor", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89385e82b5d1821d2219e0b095efa2cc1f246cbf99080f3be46a1a85c0d392d9" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "bytemuck" version = "1.25.0" @@ -825,7 +1083,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "log", "polling", "rustix 0.38.44", @@ -839,7 +1097,7 @@ version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dbf9978365bac10f54d1d4b04f7ce4427e51f71d61f2fe15e3fed5166474df7" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "polling", "rustix 1.1.4", "slab", @@ -870,25 +1128,46 @@ dependencies = [ "wayland-client", ] +[[package]] +name = "cbc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +dependencies = [ + "cipher 0.4.4", +] + [[package]] name = "cbc" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce2dc9ee5f88d11e0beb842c88b33c8a5cf0d1329c4b19494af42b07dbfe8896" dependencies = [ - "cipher", + "cipher 0.5.2", ] [[package]] name = "cc" -version = "1.2.62" +version = "1.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" dependencies = [ "find-msvc-tools", "jobserver", "libc", - "shlex", + "shlex 2.0.1", +] + +[[package]] +name = "ccm" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae3c82e4355234767756212c570e29833699ab63e6ffd161887314cc5b43847" +dependencies = [ + "aead", + "cipher 0.4.4", + "ctr", + "subtle", ] [[package]] @@ -927,6 +1206,17 @@ dependencies = [ "libc", ] +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if", + "cipher 0.4.4", + "cpufeatures 0.2.17", +] + [[package]] name = "chacha20" version = "0.10.0" @@ -939,10 +1229,23 @@ dependencies = [ ] [[package]] -name = "chrono" -version = "0.4.44" +name = "chacha20poly1305" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +dependencies = [ + "aead", + "chacha20 0.9.1", + "cipher 0.4.4", + "poly1305", + "zeroize", +] + +[[package]] +name = "chrono" +version = "0.4.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "iana-time-zone", "js-sys", @@ -951,6 +1254,17 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common 0.1.7", + "inout 0.1.4", + "zeroize", +] + [[package]] name = "cipher" version = "0.5.2" @@ -958,7 +1272,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" dependencies = [ "crypto-common 0.2.2", - "inout", + "inout 0.2.2", ] [[package]] @@ -1041,9 +1355,9 @@ dependencies = [ [[package]] name = "cmov" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f88a43d011fc4a6876cb7344703e297c71dda42494fee094d5f7c76bf13f746" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" [[package]] name = "cobs" @@ -1117,6 +1431,12 @@ dependencies = [ "syn", ] +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + [[package]] name = "const-oid" version = "0.10.2" @@ -1208,7 +1528,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "core-foundation 0.10.1", "libc", ] @@ -1252,6 +1572,21 @@ dependencies = [ "libc", ] +[[package]] +name = "crc" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853" + [[package]] name = "crc32fast" version = "1.5.0" @@ -1307,6 +1642,18 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + [[package]] name = "crypto-common" version = "0.1.7" @@ -1314,6 +1661,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", + "rand_core 0.6.4", "typenum", ] @@ -1335,6 +1683,15 @@ dependencies = [ "dtor", ] +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher 0.4.4", +] + [[package]] name = "ctutils" version = "0.4.2" @@ -1350,6 +1707,32 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures 0.2.17", + "curve25519-dalek-derive", + "fiat-crypto", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "data-encoding" version = "2.11.0" @@ -1368,6 +1751,31 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac6b926516df9c60bfa16e107b21086399f8285a44ca9711344b9e553c5146e2" +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid 0.9.6", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "der-parser" +version = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" +dependencies = [ + "asn1-rs", + "displaydoc", + "nom 7.1.3", + "num-bigint", + "num-traits", + "rusticata-macros", +] + [[package]] name = "deranged" version = "0.5.8" @@ -1418,7 +1826,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", + "const-oid 0.9.6", "crypto-common 0.1.7", + "subtle", ] [[package]] @@ -1428,7 +1838,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ "block-buffer 0.12.0", - "const-oid", + "const-oid 0.10.2", "crypto-common 0.2.2", "ctutils", "zeroize", @@ -1482,7 +1892,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -1535,7 +1945,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "bytemuck", "drm-ffi", "drm-fourcc", @@ -1569,18 +1979,89 @@ dependencies = [ "linux-raw-sys 0.9.4", ] +[[package]] +name = "dtls" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f016db07b91e9d79cc60a152c163d3f0ce2d4c0173cb3964de3526aab6e07fa" +dependencies = [ + "aes 0.8.4", + "aes-gcm", + "async-trait", + "bytecheck", + "byteorder", + "cbc 0.1.2", + "ccm", + "chacha20poly1305", + "der-parser", + "hmac 0.12.1", + "log", + "p256", + "p384", + "portable-atomic", + "rand 0.9.4", + "rand_core 0.6.4", + "rcgen", + "ring", + "rkyv", + "rustls 0.23.40", + "sec1", + "sha1 0.10.6", + "sha2 0.10.9", + "thiserror 1.0.69", + "tokio", + "webrtc-util", + "x25519-dalek", + "x509-parser", +] + [[package]] name = "dtor" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edf234dd1594d6dd434a8fb8cada51ddbbc593e40e4a01556a0b31c62da2775b" +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + [[package]] name = "either" version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array", + "group", + "hkdf", + "pem-rfc7468", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + [[package]] name = "embedded-io" version = "0.4.0" @@ -1680,6 +2161,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + [[package]] name = "event-listener" version = "5.4.1" @@ -1697,7 +2184,7 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ - "event-listener", + "event-listener 5.4.1", "pin-project-lite", ] @@ -1755,7 +2242,7 @@ version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "727c5dd9d601f3f4ea133b8a6ba37d37ca67ed59781675dc1c9c9f1701e0d197" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "bytemuck", "fnv", "glow 0.17.0", @@ -1770,13 +2257,29 @@ dependencies = [ "wgpu", ] +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + [[package]] name = "field-offset" version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" dependencies = [ - "memoffset", + "memoffset 0.9.1", "rustc_version", ] @@ -2009,6 +2512,16 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +[[package]] +name = "futures-timer" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af43fadb8a98512d547e37b4e92e0ced13e205c061b87b4623eff01d918d6968" +dependencies = [ + "gloo-timers 0.4.0", + "send_wrapper", +] + [[package]] name = "futures-util" version = "0.3.32" @@ -2034,6 +2547,7 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", + "zeroize", ] [[package]] @@ -2094,6 +2608,32 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "ggrs" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "777d9da4dfd802a272f1795a7a1887d6078fd31487e7e68d689596c4c5298046" +dependencies = [ + "bincode 1.3.3", + "bitfield-rle", + "instant", + "js-sys", + "parking_lot", + "rand 0.8.6", + "serde", + "tracing", +] + +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug", + "polyval", +] + [[package]] name = "gif" version = "0.14.2" @@ -2121,6 +2661,30 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +[[package]] +name = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "gloo-timers" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "482ce8a491a501da4cd806bd190275363d674f2845005c6ddbd5d3e1dd54495d" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + [[package]] name = "glow" version = "0.16.0" @@ -2151,7 +2715,7 @@ version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "cfg_aliases", "cgl", "dispatch2", @@ -2224,7 +2788,9 @@ dependencies = [ "encoding_rs", "fatfs", "futures", + "ggrs", "jni 0.22.4", + "matchbox_socket", "mimalloc", "open", "postcard", @@ -2242,10 +2808,9 @@ dependencies = [ "serde-big-array", "serde_json", "sevenz-rust2", - "sha2", + "sha2 0.11.0", "slint", "slint-build", - "socket2", "spin_sleep", "tokio", "tokio-tungstenite", @@ -2273,7 +2838,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "gpu-descriptor-types", "hashbrown 0.15.5", ] @@ -2284,7 +2849,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", ] [[package]] @@ -2293,6 +2858,17 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b40ca9252762c466af32d0b1002e91e4e1bc5398f77455e55474deb466355ff5" +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + [[package]] name = "h2" version = "0.4.14" @@ -2330,7 +2906,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9da2e5ae821f6e96664977bf974d6d6a2d6682f9ccee23e62ec1d134246845f9" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "bytemuck", "core_maths", "read-fonts", @@ -2422,6 +2998,24 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac 0.12.1", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + [[package]] name = "hmac" version = "0.13.0" @@ -2487,9 +3081,9 @@ dependencies = [ [[package]] name = "hyper" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb92f162bf56536459fc83c79b974bb12837acfed43d6bc370a7916d0ae15ecc" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" dependencies = [ "atomic-waker", "bytes", @@ -2515,7 +3109,7 @@ dependencies = [ "http", "hyper", "hyper-util", - "rustls", + "rustls 0.23.40", "tokio", "tokio-rustls", "tower-service", @@ -2543,7 +3137,7 @@ version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "futures-channel", "futures-util", @@ -2554,7 +3148,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2", + "socket2 0.6.4", "system-configuration", "tokio", "tower-service", @@ -2591,7 +3185,7 @@ dependencies = [ "i-slint-core", "i-slint-renderer-femtovg", "input", - "nix", + "nix 0.30.1", "xkbcommon", ] @@ -2707,7 +3301,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89e4a57afd78d8a1f599a78781dc1413af68545b2bc5ba5e143ecf022c75d5f3" dependencies = [ "auto_enums", - "bitflags 2.11.1", + "bitflags 2.12.1", "cfg-if", "chrono", "clru", @@ -3082,13 +3676,23 @@ dependencies = [ "serde_core", ] +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "block-padding 0.3.3", + "generic-array", +] + [[package]] name = "inout" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" dependencies = [ - "block-padding", + "block-padding 0.4.2", "hybrid-array", ] @@ -3098,7 +3702,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "input-sys", "libc", "log", @@ -3111,6 +3715,15 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36eee07d8e02bd95bf52b2e642cf13d33701b94c6e4b04fbf1d1fb07e9cb19e7" +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + [[package]] name = "integer-sqrt" version = "0.1.5" @@ -3120,6 +3733,27 @@ dependencies = [ "num-traits", ] +[[package]] +name = "interceptor" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f73f4fdb971cab2d599cbdc2ccf0c6ea8fb27347b871ed14c65ce2353dbe75b" +dependencies = [ + "async-trait", + "bytes", + "futures", + "log", + "portable-atomic", + "rand 0.9.4", + "rtcp", + "rtp", + "thiserror 1.0.69", + "tokio", + "waitgroup", + "webrtc-srtp", + "webrtc-util", +] + [[package]] name = "interpolate_name" version = "0.2.4" @@ -3299,7 +3933,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "serde", "unicode-segmentation", ] @@ -3333,6 +3967,15 @@ dependencies = [ "smallvec", ] +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -3404,10 +4047,10 @@ version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "libc", "plain", - "redox_syscall 0.8.0", + "redox_syscall 0.8.1", ] [[package]] @@ -3482,9 +4125,12 @@ dependencies = [ [[package]] name = "log" -version = "0.4.30" +version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5" +checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" +dependencies = [ + "value-bag", +] [[package]] name = "loop9" @@ -3538,11 +4184,11 @@ dependencies = [ [[package]] name = "lzma-rust2" -version = "0.16.3" +version = "0.16.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e9ceaec84b54518262de7cf06b8b43e83c808349960f1610b21b0bfc9640f20" +checksum = "ce716bf1a316f47a280fc76295f6495b5bea4752bca01c3b3885e101b1c23c02" dependencies = [ - "sha2", + "sha2 0.11.0", ] [[package]] @@ -3554,6 +4200,50 @@ dependencies = [ "libc", ] +[[package]] +name = "matchbox_protocol" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "867e83a984f369eabc682318eec2db410aef1dbb5399cb1890e6659dfa9b7449" +dependencies = [ + "cfg-if", + "derive_more", + "serde", + "uuid 1.23.2", +] + +[[package]] +name = "matchbox_socket" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ee21421327e145fab424cadb542bef9f745a8938b9eb8c81d3286e98f18be9" +dependencies = [ + "async-compat", + "async-trait", + "async-tungstenite", + "bytes", + "cfg-if", + "derive_more", + "futures", + "futures-channel", + "futures-timer", + "futures-util", + "js-sys", + "log", + "matchbox_protocol", + "once_cell", + "serde", + "serde-wasm-bindgen", + "serde_json", + "thiserror 2.0.18", + "tokio-util", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webrtc", + "ws_stream_wasm", +] + [[package]] name = "maybe-rayon" version = "0.1.1" @@ -3564,6 +4254,16 @@ dependencies = [ "rayon", ] +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest 0.10.7", +] + [[package]] name = "memchr" version = "2.8.1" @@ -3579,6 +4279,15 @@ dependencies = [ "libc", ] +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + [[package]] name = "memoffset" version = "0.9.1" @@ -3594,7 +4303,7 @@ version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block", "core-graphics-types 0.1.3", "foreign-types 0.5.0", @@ -3609,7 +4318,7 @@ version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7047791b5bc903b8cd963014b355f71dc9864a9a0b727057676c1dcae5cbc15" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block", "core-graphics-types 0.2.0", "foreign-types 0.5.0", @@ -3689,6 +4398,26 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "munge" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e17401f259eba956ca16491461b6e8f72913a0a114e39736ce404410f915a0c" +dependencies = [ + "munge_macro", +] + +[[package]] +name = "munge_macro" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4568f25ccbd45ab5d5603dc34318c1ec56b117531781260002151b8530a9f931" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "naga" version = "28.0.0" @@ -3697,7 +4426,7 @@ checksum = "618f667225063219ddfc61251087db8a9aec3c3f0950c916b614e403486f1135" dependencies = [ "arrayvec", "bit-set", - "bitflags 2.11.1", + "bitflags 2.12.1", "cfg-if", "cfg_aliases", "codespan-reporting", @@ -3744,7 +4473,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "jni-sys 0.3.1", "log", "ndk-sys 0.5.0+25.2.9519653", @@ -3758,7 +4487,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "jni-sys 0.3.1", "log", "ndk-sys 0.6.0+11769913", @@ -3797,13 +4526,26 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", + "memoffset 0.7.1", + "pin-utils", +] + [[package]] name = "nix" version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "cfg-if", "cfg_aliases", "libc", @@ -3962,7 +4704,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -3978,7 +4720,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -3999,7 +4741,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -4012,7 +4754,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -4034,7 +4776,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -4046,7 +4788,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -4057,7 +4799,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "dispatch2", "objc2 0.6.4", ] @@ -4068,7 +4810,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "dispatch2", "objc2 0.6.4", "objc2-core-foundation", @@ -4115,7 +4857,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", @@ -4127,7 +4869,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", @@ -4146,7 +4888,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.5.1", "dispatch", "libc", @@ -4159,7 +4901,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.6.2", "objc2 0.6.4", "objc2-core-foundation", @@ -4171,7 +4913,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "objc2 0.6.4", "objc2-core-foundation", ] @@ -4194,7 +4936,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -4206,7 +4948,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -4217,7 +4959,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -4230,7 +4972,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "objc2 0.6.4", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -4253,7 +4995,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.5.1", "objc2 0.5.2", "objc2-cloud-kit 0.2.2", @@ -4274,7 +5016,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.6.2", "objc2 0.6.4", "objc2-core-foundation", @@ -4299,13 +5041,22 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", "objc2-foundation 0.2.2", ] +[[package]] +name = "oid-registry" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" +dependencies = [ + "asn1-rs", +] + [[package]] name = "once_cell" version = "1.21.4" @@ -4322,6 +5073,12 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + [[package]] name = "open" version = "5.3.5" @@ -4339,7 +5096,7 @@ version = "0.10.80" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a45fa2aa886c42762255da344f0a0d313e254066c46aad76f300c3d3da62d967" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "cfg-if", "foreign-types 0.3.2", "libc", @@ -4430,6 +5187,30 @@ dependencies = [ "ttf-parser", ] +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2 0.10.9", +] + +[[package]] +name = "p384" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2 0.10.9", +] + [[package]] name = "parking" version = "2.2.1" @@ -4517,7 +5298,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "112d82ceb8c5bf524d9af484d4e4970c9fd5a0cc15ba14ad93dccd28873b0629" dependencies = [ "digest 0.11.3", - "hmac", + "hmac 0.13.0", +] + +[[package]] +name = "pem" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" +dependencies = [ + "base64 0.22.1", + "serde_core", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", ] [[package]] @@ -4526,6 +5326,16 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" +[[package]] +name = "pharos" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" +dependencies = [ + "futures", + "rustc_version", +] + [[package]] name = "pico-args" version = "0.5.0" @@ -4581,6 +5391,16 @@ dependencies = [ "futures-io", ] +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + [[package]] name = "pkg-config" version = "0.3.33" @@ -4612,7 +5432,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "crc32fast", "fdeflate", "flate2", @@ -4639,6 +5459,17 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures 0.2.17", + "opaque-debug", + "universal-hash", +] + [[package]] name = "polycool" version = "0.4.0" @@ -4648,6 +5479,18 @@ dependencies = [ "arrayvec", ] +[[package]] +name = "polyval" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +dependencies = [ + "cfg-if", + "cpufeatures 0.2.17", + "opaque-debug", + "universal-hash", +] + [[package]] name = "portable-atomic" version = "1.13.1" @@ -4727,6 +5570,15 @@ dependencies = [ "syn", ] +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + [[package]] name = "proc-macro-crate" version = "3.5.0" @@ -4764,13 +5616,33 @@ dependencies = [ "syn", ] +[[package]] +name = "ptr_meta" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9a0cf95a1196af61d4f1cbdab967179516d9a4a4312af1f31948f8f6224a79" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "pulldown-cmark" version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "getopts", "memchr", "pulldown-cmark-escape", @@ -4835,13 +5707,33 @@ version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" +[[package]] +name = "rancor" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a063ea72381527c2a0561da9c80000ef822bdd7c3241b1cc1b12100e3df081ee" +dependencies = [ + "ptr_meta", +] + +[[package]] +name = "rand" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + [[package]] name = "rand" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" dependencies = [ - "rand_chacha", + "rand_chacha 0.9.0", "rand_core 0.9.5", ] @@ -4851,9 +5743,20 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" dependencies = [ - "chacha20", + "chacha20 0.10.0", "getrandom 0.4.2", "rand_core 0.10.1", + "serde", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", ] [[package]] @@ -4866,6 +5769,15 @@ dependencies = [ "rand_core 0.9.5", ] +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.17", +] + [[package]] name = "rand_core" version = "0.9.5" @@ -4915,7 +5827,7 @@ dependencies = [ "paste", "profiling", "rand 0.9.4", - "rand_chacha", + "rand_chacha 0.9.0", "simd_helpers", "thiserror 2.0.18", "v_frame", @@ -4975,6 +5887,20 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "rcgen" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2" +dependencies = [ + "pem", + "ring", + "rustls-pki-types", + "time", + "x509-parser", + "yasna", +] + [[package]] name = "read-fonts" version = "0.37.0" @@ -5001,16 +5927,16 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", ] [[package]] name = "redox_syscall" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c7591fa2c6b601dfcfe5f043f65a1c39fcdf50efefcd7f1572e538c1f4b398d" +checksum = "5b44b894f2a6e36457d665d1e08c3866add6ed5e70050c1b4ba8a8ddedb02ce7" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", ] [[package]] @@ -5053,6 +5979,15 @@ version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +[[package]] +name = "rend" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cadadef317c2f20755a64d7fdc48f9e7178ee6b0e1f7fce33fa60f1d68a276e6" +dependencies = [ + "bytecheck", +] + [[package]] name = "renderdoc-sys" version = "1.1.0" @@ -5065,7 +6000,7 @@ version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "encoding_rs", "futures-core", @@ -5116,6 +6051,16 @@ dependencies = [ "zune-jpeg", ] +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac 0.12.1", + "subtle", +] + [[package]] name = "rfd" version = "0.17.2" @@ -5166,6 +6111,36 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rkyv" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73389e0c99e664f919275ab5b5b0471391fe9a8de61e1dff9b1eaf56a90f16e3" +dependencies = [ + "bytecheck", + "bytes", + "hashbrown 0.17.1", + "indexmap", + "munge", + "ptr_meta", + "rancor", + "rend", + "rkyv_derive", + "tinyvec", + "uuid 1.23.2", +] + +[[package]] +name = "rkyv_derive" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d2ed0b54125315fb36bd021e82d314d1c126548f871634b483f46b31d13cac6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "rowan" version = "0.16.1" @@ -5206,6 +6181,32 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "rtcp" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb22f1cc99aea8152fdae6a4bc52a9caddf4bd1ff083d897c1f9f279956177e8" +dependencies = [ + "bytes", + "thiserror 1.0.69", + "webrtc-util", +] + +[[package]] +name = "rtp" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8d41f3565d9add11caabe7c61745517f4ef511c168a6aa2b59ce4c701802cde" +dependencies = [ + "bytes", + "memchr", + "portable-atomic", + "rand 0.9.4", + "serde", + "thiserror 1.0.69", + "webrtc-util", +] + [[package]] name = "rustc-hash" version = "1.1.0" @@ -5227,13 +6228,22 @@ dependencies = [ "semver", ] +[[package]] +name = "rusticata-macros" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" +dependencies = [ + "nom 7.1.3", +] + [[package]] name = "rustix" version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "errno", "libc", "linux-raw-sys 0.4.15", @@ -5246,13 +6256,25 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "errno", "libc", "linux-raw-sys 0.12.1", "windows-sys 0.61.2", ] +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki 0.101.7", + "sct", +] + [[package]] name = "rustls" version = "0.23.40" @@ -5260,12 +6282,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" dependencies = [ "once_cell", + "ring", "rustls-pki-types", - "rustls-webpki", + "rustls-webpki 0.103.13", "subtle", "zeroize", ] +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + [[package]] name = "rustls-pki-types" version = "1.14.1" @@ -5275,6 +6307,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustls-webpki" version = "0.103.13" @@ -5298,7 +6340,7 @@ version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "bytemuck", "core_maths", "log", @@ -5352,6 +6394,16 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "sctk-adwaita" version = "0.10.1" @@ -5419,13 +6471,39 @@ dependencies = [ "sdl3-ttf-src", ] +[[package]] +name = "sdp" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22c3b0257608d7de4de4c4ea650ccc2e6e3e45e3cd80039fcdee768bcb449253" +dependencies = [ + "rand 0.9.4", + "substring", + "thiserror 1.0.69", + "url", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + [[package]] name = "security-framework" version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -5448,6 +6526,12 @@ version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + [[package]] name = "serde" version = "1.0.228" @@ -5467,6 +6551,17 @@ dependencies = [ "serde", ] +[[package]] +name = "serde-wasm-bindgen" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + [[package]] name = "serde_core" version = "1.0.228" @@ -5538,15 +6633,15 @@ version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbbd24232798280d6bc896e3429a3469174de008ec8b1b591a96618b46664195" dependencies = [ - "aes", + "aes 0.9.1", "bzip2", - "cbc", + "cbc 0.2.1", "crc32fast", "getrandom 0.4.2", "js-sys", "lzma-rust2", "ppmd-rust", - "sha2", + "sha2 0.11.0", "wasm-bindgen", ] @@ -5572,6 +6667,17 @@ dependencies = [ "digest 0.11.3", ] +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures 0.2.17", + "digest 0.10.7", +] + [[package]] name = "sha2" version = "0.11.0" @@ -5589,6 +6695,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + [[package]] name = "signal-hook-registry" version = "1.4.8" @@ -5599,6 +6711,16 @@ dependencies = [ "libc", ] +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + [[package]] name = "simd-adler32" version = "0.3.9" @@ -5668,7 +6790,7 @@ version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a71c01d325d40b1031dee67d251a5e0132e79e2a9ec272149a4f4a0d4b8b3be" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "skia-bindings", "windows 0.62.2", ] @@ -5758,7 +6880,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "calloop 0.13.0", "calloop-wayland-source 0.3.0", "cursor-icon", @@ -5783,7 +6905,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "calloop 0.14.4", "calloop-wayland-source 0.4.1", "cursor-icon", @@ -5855,6 +6977,16 @@ dependencies = [ "syn", ] +[[package]] +name = "socket2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + [[package]] name = "socket2" version = "0.6.4" @@ -5929,7 +7061,17 @@ version = "0.3.0+sdk-1.3.268.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", ] [[package]] @@ -5980,6 +7122,34 @@ dependencies = [ "syn", ] +[[package]] +name = "stun" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e0fd33c04d4617df42c9c84c698511c59f59869629fb7a193067eec41bce347" +dependencies = [ + "base64 0.22.1", + "crc", + "lazy_static", + "md-5", + "rand 0.9.4", + "ring", + "subtle", + "thiserror 1.0.69", + "tokio", + "url", + "webrtc-util", +] + +[[package]] +name = "substring" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ee6433ecef213b2e72f587ef64a2f5943e7cd16fbd82dbe8bc07486c534c86" +dependencies = [ + "autocfg", +] + [[package]] name = "subtle" version = "2.6.1" @@ -6056,7 +7226,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -6183,11 +7353,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", + "itoa", "js-sys", "num-conv", "powerfmt", "serde_core", "time-core", + "time-macros", ] [[package]] @@ -6196,6 +7368,16 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" +[[package]] +name = "time-macros" +version = "0.2.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tiny-skia" version = "0.11.4" @@ -6295,9 +7477,10 @@ dependencies = [ "bytes", "libc", "mio", + "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.6.4", "tokio-macros", "windows-sys 0.61.2", ] @@ -6329,7 +7512,7 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls", + "rustls 0.23.40", "tokio", ] @@ -6342,7 +7525,7 @@ dependencies = [ "futures-util", "log", "tokio", - "tungstenite", + "tungstenite 0.29.0", ] [[package]] @@ -6353,6 +7536,7 @@ checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", + "futures-io", "futures-sink", "pin-project-lite", "tokio", @@ -6455,7 +7639,7 @@ version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "bytes", "futures-util", "http", @@ -6526,6 +7710,23 @@ dependencies = [ "core_maths", ] +[[package]] +name = "tungstenite" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442" +dependencies = [ + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand 0.9.4", + "sha1 0.10.6", + "thiserror 2.0.18", + "utf-8", +] + [[package]] name = "tungstenite" version = "0.29.0" @@ -6542,13 +7743,34 @@ dependencies = [ "thiserror 2.0.18", ] +[[package]] +name = "turn" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6a8b8ac3543b2a8eb0b28c7ac3d5f2db6221e057f3b3ae47cf7637b1333a5c3" +dependencies = [ + "async-trait", + "base64 0.22.1", + "futures", + "log", + "md-5", + "portable-atomic", + "rand 0.9.4", + "ring", + "stun", + "thiserror 1.0.69", + "tokio", + "tokio-util", + "webrtc-util", +] + [[package]] name = "typed-index-collections" version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "898160f1dfd383b4e92e17f0512a7d62f3c51c44937b23b6ffc3a1614a8eaccd" dependencies = [ - "bincode", + "bincode 2.0.1", "serde", ] @@ -6560,9 +7782,9 @@ checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e" [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "udev" @@ -6582,7 +7804,7 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" dependencies = [ - "memoffset", + "memoffset 0.9.1", "tempfile", "windows-sys 0.61.2", ] @@ -6637,9 +7859,9 @@ checksum = "383ad40bb927465ec0ce7720e033cb4ca06912855fc35db31b5755d0de75b1ee" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-vo" @@ -6659,6 +7881,16 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common 0.1.7", + "subtle", +] + [[package]] name = "untrusted" version = "0.9.0" @@ -6689,7 +7921,7 @@ version = "0.47.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d46cf96c5f498d36b7a9693bc6a7075c0bb9303189d61b2249b0dc3d309c07de" dependencies = [ - "base64", + "base64 0.22.1", "data-url", "flate2", "fontdb", @@ -6711,6 +7943,12 @@ dependencies = [ "xmlwriter", ] +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + [[package]] name = "utf8_iter" version = "1.0.4" @@ -6734,10 +7972,11 @@ dependencies = [ [[package]] name = "uuid" -version = "1.23.1" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "d258b83ceec21034727ecee8c382cfa6c3e133699b0742c64571814fb420c9f7" dependencies = [ + "getrandom 0.4.2", "js-sys", "serde_core", "wasm-bindgen", @@ -6754,6 +7993,18 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "value-bag" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba6f5989077681266825251a52748b8c1d8a4ad098cc37e440103d0ea717fc0" + +[[package]] +name = "varinteger" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ea29db9f94ff08bb619656b8120878f280526f71dc88b5262c958a510181812" + [[package]] name = "vcpkg" version = "0.2.15" @@ -6789,6 +8040,15 @@ dependencies = [ "syn", ] +[[package]] +name = "waitgroup" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1f50000a783467e6c0200f9d10642f4bc424e39efc1b770203e88b488f79292" +dependencies = [ + "atomic-waker", +] + [[package]] name = "walkdir" version = "2.5.0" @@ -6915,7 +8175,7 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "hashbrown 0.15.5", "indexmap", "semver", @@ -6941,7 +8201,7 @@ version = "0.31.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "rustix 1.1.4", "wayland-backend", "wayland-scanner", @@ -6953,7 +8213,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "cursor-icon", "wayland-backend", ] @@ -6975,7 +8235,7 @@ version = "0.32.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "563a85523cade2429938e790815fd7319062103b9f4a2dc806e9b53b95982d8f" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "wayland-backend", "wayland-client", "wayland-scanner", @@ -6987,7 +8247,7 @@ version = "20250721.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -7000,7 +8260,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e9567599ef23e09b8dad6e429e5738d4509dfc46b3b21f32841a304d16b29c8" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -7013,7 +8273,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b6d8cf1eb2c1c31ed1f5643c88a6e53538129d4af80030c8cabd1f9fa884d91" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -7026,7 +8286,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -7092,6 +8352,194 @@ dependencies = [ "web-sys", ] +[[package]] +name = "webpki" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki-roots" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +dependencies = [ + "webpki", +] + +[[package]] +name = "webrtc" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ba06986c4fcfbbb4b490abe4b88887b0ac9de0d3eb0aae36f3254e38d6ecdd1" +dependencies = [ + "arc-swap", + "async-trait", + "bytes", + "dtls", + "hex", + "interceptor", + "lazy_static", + "log", + "portable-atomic", + "rand 0.9.4", + "rcgen", + "regex", + "ring", + "rtcp", + "rtp", + "sdp", + "serde", + "serde_json", + "sha2 0.10.9", + "smol_str 0.2.2", + "stun", + "thiserror 1.0.69", + "tokio", + "turn", + "unicase", + "url", + "waitgroup", + "webrtc-data", + "webrtc-ice", + "webrtc-mdns", + "webrtc-media", + "webrtc-sctp", + "webrtc-srtp", + "webrtc-util", +] + +[[package]] +name = "webrtc-data" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7ca42127ee64bcb71da36d151e6f87b12488c5f14c4f379e73d2d52a8e54aa0" +dependencies = [ + "bytes", + "log", + "portable-atomic", + "thiserror 1.0.69", + "tokio", + "webrtc-sctp", + "webrtc-util", +] + +[[package]] +name = "webrtc-ice" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23ede72a36e5dda685814c389b2b34ac60b3ed000a81789e93626e27180eb785" +dependencies = [ + "arc-swap", + "async-trait", + "crc", + "log", + "portable-atomic", + "rand 0.9.4", + "serde", + "serde_json", + "stun", + "thiserror 1.0.69", + "tokio", + "turn", + "url", + "uuid 1.23.2", + "waitgroup", + "webrtc-mdns", + "webrtc-util", +] + +[[package]] +name = "webrtc-mdns" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b62bc8d3fb5024bc6ffde5f4aad2127ce17f8359dbc6f70208a324a12e44677" +dependencies = [ + "log", + "socket2 0.5.10", + "thiserror 1.0.69", + "tokio", + "webrtc-util", +] + +[[package]] +name = "webrtc-media" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9a28290bd0cdda196f8bf5c6f7dddaef18cc913ee0702cd1ea237bad203e337" +dependencies = [ + "byteorder", + "bytes", + "rand 0.9.4", + "rtp", + "thiserror 1.0.69", +] + +[[package]] +name = "webrtc-sctp" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ea6633bf951b3fd71eba3244731c8d0814f6a80300620a4370cad2983a5a42f" +dependencies = [ + "arc-swap", + "async-trait", + "bytes", + "crc", + "log", + "portable-atomic", + "rand 0.9.4", + "thiserror 1.0.69", + "tokio", + "webrtc-util", +] + +[[package]] +name = "webrtc-srtp" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e437f74b04f42049192e25cbb33c21c86be308875e6afe14cf8e28d1ffa35ac" +dependencies = [ + "aead", + "aes 0.8.4", + "aes-gcm", + "byteorder", + "bytes", + "ctr", + "hmac 0.12.1", + "log", + "rtcp", + "rtp", + "sha1 0.10.6", + "subtle", + "thiserror 1.0.69", + "tokio", + "webrtc-util", +] + +[[package]] +name = "webrtc-util" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b65c1e0143a43d40f69e1d8c2ffc8734e379b49c06d45892ea4104c388bf9ead" +dependencies = [ + "async-trait", + "bitflags 1.3.2", + "bytes", + "ipnet", + "lazy_static", + "log", + "nix 0.26.4", + "portable-atomic", + "rand 0.9.4", + "thiserror 1.0.69", + "tokio", + "winapi", +] + [[package]] name = "weezl" version = "0.1.12" @@ -7105,7 +8553,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9cb534d5ffd109c7d1135f34cdae29e60eab94855a625dcfe1705f8bc7ad79f" dependencies = [ "arrayvec", - "bitflags 2.11.1", + "bitflags 2.12.1", "bytemuck", "cfg-if", "cfg_aliases", @@ -7137,7 +8585,7 @@ dependencies = [ "arrayvec", "bit-set", "bit-vec", - "bitflags 2.11.1", + "bitflags 2.12.1", "bytemuck", "cfg_aliases", "document-features", @@ -7197,7 +8645,7 @@ dependencies = [ "arrayvec", "ash", "bit-set", - "bitflags 2.11.1", + "bitflags 2.12.1", "block", "bytemuck", "cfg-if", @@ -7241,13 +8689,29 @@ version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e18308757e594ed2cd27dddbb16a139c42a683819d32a2e0b1b0167552f5840c" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "bytemuck", "js-sys", "log", "web-sys", ] +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + [[package]] name = "winapi-util" version = "0.1.11" @@ -7257,6 +8721,12 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + [[package]] name = "windows" version = "0.61.3" @@ -7773,7 +9243,7 @@ dependencies = [ "ahash", "android-activity 0.6.1", "atomic-waker", - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.5.1", "bytemuck", "calloop 0.13.0", @@ -7905,7 +9375,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.11.1", + "bitflags 2.12.1", "indexmap", "log", "serde", @@ -7954,6 +9424,25 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" +[[package]] +name = "ws_stream_wasm" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c173014acad22e83f16403ee360115b38846fe754e735c5d9d3803fe70c6abc" +dependencies = [ + "async_io_stream", + "futures", + "js-sys", + "log", + "pharos", + "rustc_version", + "send_wrapper", + "thiserror 2.0.18", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "x11-clipboard" version = "0.9.3" @@ -7996,6 +9485,36 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" +[[package]] +name = "x25519-dalek" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +dependencies = [ + "curve25519-dalek", + "rand_core 0.6.4", + "serde", + "zeroize", +] + +[[package]] +name = "x509-parser" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" +dependencies = [ + "asn1-rs", + "data-encoding", + "der-parser", + "lazy_static", + "nom 7.1.3", + "oid-registry", + "ring", + "rusticata-macros", + "thiserror 1.0.69", + "time", +] + [[package]] name = "xattr" version = "1.6.1" @@ -8029,7 +9548,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "dlib", "log", "once_cell", @@ -8060,6 +9579,15 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a5a4b21e1a62b67a2970e6831bc091d7b87e119e7f9791aef9702e3bef04448" +[[package]] +name = "yasna" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" +dependencies = [ + "time", +] + [[package]] name = "yazi" version = "0.2.1" @@ -8079,9 +9607,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -8102,9 +9630,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.15.0" +version = "5.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3bcbf15c8708d7fc1be0c993622e0a5cbd5e8b52bfa40afa4c3e0cd8d724ac1" +checksum = "eee682d202a77e4a9f3b2c2bdf48a7b28af5c08c34ddf66f98c93e5e39464285" dependencies = [ "async-broadcast", "async-executor", @@ -8116,7 +9644,7 @@ dependencies = [ "async-trait", "blocking", "enumflags2", - "event-listener", + "event-listener 5.4.1", "futures-core", "futures-lite", "hex", @@ -8127,7 +9655,7 @@ dependencies = [ "serde_repr", "tracing", "uds_windows", - "uuid 1.23.1", + "uuid 1.23.2", "windows-sys 0.61.2", "winnow 1.0.3", "zbus_macros", @@ -8161,9 +9689,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.15.0" +version = "5.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51fa5406ad9175a8c825a931f8cf347116b531b3634fcb0b627c290f1f2516ff" +checksum = "adf1bd45a81a103745b1757754762a26e8cd01e4532e4d6c8ec431624b80d1d6" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -8205,18 +9733,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.49" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bce33a6288fa3f072a8c2c7d0f2fdbb90e28298f0135c1f99b96c3db2efcc60b" +checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.49" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd425244944f4ab65ccff928e7323354c5a018c75838362fdce749dfad2ee1e" +checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" dependencies = [ "proc-macro2", "quote", @@ -8249,6 +9777,20 @@ name = "zeroize" version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "zerotrie" @@ -8291,14 +9833,14 @@ version = "8.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d04a6b5381502aa6087c94c669499eb1602eb9c5e8198e534de571f7154809b" dependencies = [ - "aes", + "aes 0.9.1", "bzip2", "constant_time_eq", "crc32fast", "deflate64", "flate2", "getrandom 0.4.2", - "hmac", + "hmac 0.13.0", "indexmap", "lzma-rust2", "memchr", @@ -8390,9 +9932,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.11.0" +version = "5.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c1567a6ec68df868cbbfde844cfc6d81649fe5109a62b116b19fabd53e618ee" +checksum = "a192a0bde63360d77a7523c833d4b4ce6070a927e2c53246e4c540b1a3e27be0" dependencies = [ "endi", "enumflags2", @@ -8404,9 +9946,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.11.0" +version = "5.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d5b780599bbde114e39d9a0799577fad1ced5105d38515745f7b3099d8ceda" +checksum = "90bc6cde9c01c511074be97f7ccb6c19d0da89e3f8662e812e999dcfd4638737" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -8417,9 +9959,9 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "3.3.1" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d464f5733ffa07a3164d656f18533caace9d0638596721355d73256a410d691" +checksum = "1e8535915cfa75547e559d8c68e8139909a4aeee076831e4ef7fc59d8172c4d6" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index e44058b..7a7ed7c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,10 +25,11 @@ encoding_rs = "0.8" mimalloc = "0.1" regex = "1.11" tokio-tungstenite = "0.29" +matchbox_socket = "0.14" +ggrs = { version = "0.12", features = ["sync-send"] } rustc-hash = "2.1" futures = "0.3" -socket2 = { version = "0.6", features = ["all"] } -rand = "0.10" +rand = { version = "0.10", features = ["serde"] } fatfs = "0.3" semver = "1.0" postcard = { version = "1.1", features = ["use-std"] } diff --git a/data/translations/de/LC_MESSAGES/gopher64.po b/data/translations/de/LC_MESSAGES/gopher64.po index 18c0e7f..fcc6ed1 100644 --- a/data/translations/de/LC_MESSAGES/gopher64.po +++ b/data/translations/de/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-30 16:03+0000\n" +"POT-Creation-Date: 2026-06-04 13:13+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: German\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Spenden (über GitHub)" -#: src/ui/gui/appwindow.slint:152 +#: src/ui/gui/appwindow.slint:145 msgctxt "Menu" msgid "Local Game" msgstr "Lokales Spiel" -#: src/ui/gui/appwindow.slint:156 +#: src/ui/gui/appwindow.slint:149 msgctxt "Menu" msgid "Controller Config" msgstr "Controller-Konfiguration" -#: src/ui/gui/appwindow.slint:160 +#: src/ui/gui/appwindow.slint:153 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:157 msgctxt "Menu" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:161 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:165 msgctxt "Menu" msgid "Settings" msgstr "Einstellungen" -#: src/ui/gui/appwindow.slint:176 +#: src/ui/gui/appwindow.slint:169 msgctxt "Menu" msgid "About" msgstr "Über" @@ -192,47 +192,42 @@ msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "Netplay: Sitzung erstellen" -#: src/ui/gui/netplay_create.slint:23 +#: src/ui/gui/netplay_create.slint:22 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "Sitzungsname:" -#: src/ui/gui/netplay_create.slint:27 +#: src/ui/gui/netplay_create.slint:26 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "Sitzungsname eingeben" -#: src/ui/gui/netplay_create.slint:37 +#: src/ui/gui/netplay_create.slint:36 msgctxt "NetplayCreate" msgid "Password (Optional):" msgstr "Passwort (optional):" -#: src/ui/gui/netplay_create.slint:41 +#: src/ui/gui/netplay_create.slint:40 msgctxt "NetplayCreate" msgid "Enter session password" msgstr "Sitzungspasswort eingeben" -#: src/ui/gui/netplay_create.slint:52 +#: src/ui/gui/netplay_create.slint:51 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "Spielername:" -#: src/ui/gui/netplay_create.slint:56 +#: src/ui/gui/netplay_create.slint:55 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "Spielername eingeben" #: src/ui/gui/netplay_create.slint:66 msgctxt "NetplayCreate" -msgid "Server:" -msgstr "Server:" - -#: src/ui/gui/netplay_create.slint:86 -msgctxt "NetplayCreate" msgid "Select ROM" msgstr "ROM auswählen" -#: src/ui/gui/netplay_create.slint:102 +#: src/ui/gui/netplay_create.slint:82 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." @@ -240,21 +235,16 @@ msgstr "" "Für dieses Spiel sind Cheats aktiviert. Cheats werden mit anderen Spielern " "synchronisiert." -#: src/ui/gui/netplay_create.slint:112 +#: src/ui/gui/netplay_create.slint:91 msgctxt "NetplayCreate" msgid "Create Session" msgstr "Sitzung erstellen" -#: src/ui/gui/netplay_create.slint:132 +#: src/ui/gui/netplay_create.slint:105 msgctxt "NetplayCreate" msgid "Cancel" msgstr "Abbrechen" -#: src/ui/gui/netplay_create.slint:155 -msgctxt "CustomServerDialog" -msgid "Enter a custom server URL" -msgstr "Eigene Server-URL eingeben" - #: src/ui/gui/netplay_join.slint:7 msgctxt "NetplayJoin" msgid "Netplay: Join Session" @@ -275,152 +265,142 @@ msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "Passwort (falls erforderlich)" -#: src/ui/gui/netplay_join.slint:41 -msgctxt "NetplayJoin" -msgid "Custom Server URL (optional):" -msgstr "Eigene Server-URL (optional):" - -#: src/ui/gui/netplay_join.slint:53 +#: src/ui/gui/netplay_join.slint:42 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "ROM auswählen" -#: src/ui/gui/netplay_join.slint:68 +#: src/ui/gui/netplay_join.slint:57 msgctxt "NetplayJoin" msgid "Refreshing session list, please wait..." msgstr "Sitzungsliste wird aktualisiert, bitte warten …" -#: src/ui/gui/netplay_join.slint:73 +#: src/ui/gui/netplay_join.slint:62 msgctxt "NetplayJoin" msgid "Click on a session below to select it" msgstr "Auf eine Sitzung klicken um diese auszuwählen" -#: src/ui/gui/netplay_join.slint:78 +#: src/ui/gui/netplay_join.slint:67 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." msgstr "Keine Sitzungen verfügbar. Bitte aktualisieren, um erneut zu prüfen." -#: src/ui/gui/netplay_join.slint:84 -msgctxt "NetplayJoin" -msgid "Server" -msgstr "Server" - -#: src/ui/gui/netplay_join.slint:85 +#: src/ui/gui/netplay_join.slint:73 msgctxt "NetplayJoin" msgid "Session Name" msgstr "Sitzungsname" -#: src/ui/gui/netplay_join.slint:86 +#: src/ui/gui/netplay_join.slint:74 msgctxt "NetplayJoin" msgid "Game Name" msgstr "Spielname" -#: src/ui/gui/netplay_join.slint:87 +#: src/ui/gui/netplay_join.slint:75 msgctxt "NetplayJoin" msgid "Password" msgstr "Passwort" -#: src/ui/gui/netplay_join.slint:88 +#: src/ui/gui/netplay_join.slint:76 msgctxt "NetplayJoin" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/netplay_join.slint:102 +#: src/ui/gui/netplay_join.slint:90 msgctxt "NetplayJoin" msgid "Refresh Session List" msgstr "Sitzungsliste aktualisieren" -#: src/ui/gui/netplay_join.slint:119 +#: src/ui/gui/netplay_join.slint:105 msgctxt "NetplayJoin" msgid "Join Session" msgstr "Sitzung beitreten" -#: src/ui/gui/netplay_join.slint:132 +#: src/ui/gui/netplay_join.slint:117 msgctxt "NetplayJoin" msgid "Cancel" msgstr "Abbrechen" -#: src/ui/gui/netplay_page.slint:37 +#: src/ui/gui/netplay_page.slint:31 msgctxt "Netplay" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/netplay_page.slint:45 +#: src/ui/gui/netplay_page.slint:39 msgctxt "Netplay" msgid "Create Session" msgstr "Sitzung erstellen" -#: src/ui/gui/netplay_page.slint:56 +#: src/ui/gui/netplay_page.slint:50 msgctxt "Netplay" msgid "Join Session" msgstr "Sitzung beitreten" -#: src/ui/gui/netplay_page.slint:70 +#: src/ui/gui/netplay_page.slint:64 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "Netplay-Discord-Kanal" -#: src/ui/gui/netplay_page.slint:77 +#: src/ui/gui/netplay_page.slint:71 msgctxt "Netplay" msgid "Provide Feedback" msgstr "Feedback geben" -#: src/ui/gui/netplay_wait.slint:15 +#: src/ui/gui/netplay_wait.slint:14 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay: Warteraum" -#: src/ui/gui/netplay_wait.slint:27 +#: src/ui/gui/netplay_wait.slint:26 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Sitzungsname:" -#: src/ui/gui/netplay_wait.slint:33 +#: src/ui/gui/netplay_wait.slint:32 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Spielname:" -#: src/ui/gui/netplay_wait.slint:39 -msgctxt "NetplayWait" -msgid "Ping:" -msgstr "Ping:" - -#: src/ui/gui/netplay_wait.slint:48 +#: src/ui/gui/netplay_wait.slint:42 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Spieler 1:" -#: src/ui/gui/netplay_wait.slint:52 +#: src/ui/gui/netplay_wait.slint:46 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Spieler 2:" -#: src/ui/gui/netplay_wait.slint:58 +#: src/ui/gui/netplay_wait.slint:52 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Spieler 3:" -#: src/ui/gui/netplay_wait.slint:62 +#: src/ui/gui/netplay_wait.slint:56 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Spieler 4:" -#: src/ui/gui/netplay_wait.slint:76 +#: src/ui/gui/netplay_wait.slint:70 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Chatnachricht eingeben" -#: src/ui/gui/netplay_wait.slint:87 +#: src/ui/gui/netplay_wait.slint:81 msgctxt "NetplayWait" msgid "Send Message" msgstr "Nachricht senden" -#: src/ui/gui/netplay_wait.slint:105 +#: src/ui/gui/netplay_wait.slint:98 +msgctxt "NetplayWait" +msgid "Local Input Delay:" +msgstr "Lokale Eingabeverzögerung:" + +#: src/ui/gui/netplay_wait.slint:115 msgctxt "NetplayWait" msgid "Start Game" msgstr "Spiel starten" -#: src/ui/gui/netplay_wait.slint:113 +#: src/ui/gui/netplay_wait.slint:123 msgctxt "NetplayWait" msgid "Cancel" msgstr "Abbrechen" @@ -555,6 +535,26 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "Was möchten Sie sagen?" +#~ msgctxt "NetplayCreate" +#~ msgid "Server:" +#~ msgstr "Server:" + +#~ msgctxt "CustomServerDialog" +#~ msgid "Enter a custom server URL" +#~ msgstr "Eigene Server-URL eingeben" + +#~ msgctxt "NetplayJoin" +#~ msgid "Custom Server URL (optional):" +#~ msgstr "Eigene Server-URL (optional):" + +#~ msgctxt "NetplayJoin" +#~ msgid "Server" +#~ msgstr "Server" + +#~ msgctxt "NetplayWait" +#~ msgid "Ping:" +#~ msgstr "Ping:" + #~ msgctxt "NetplayCreate" #~ msgid "Creating server, please wait...This may take about 30 seconds." #~ msgstr "" diff --git a/data/translations/es/LC_MESSAGES/gopher64.po b/data/translations/es/LC_MESSAGES/gopher64.po index c975dbd..b8fb3bb 100644 --- a/data/translations/es/LC_MESSAGES/gopher64.po +++ b/data/translations/es/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-30 16:03+0000\n" +"POT-Creation-Date: 2026-06-04 13:13+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: Gemini\n" "Language-Team: Spanish (Spain)\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Donar (a través de GitHub)" -#: src/ui/gui/appwindow.slint:152 +#: src/ui/gui/appwindow.slint:145 msgctxt "Menu" msgid "Local Game" msgstr "Juego local" -#: src/ui/gui/appwindow.slint:156 +#: src/ui/gui/appwindow.slint:149 msgctxt "Menu" msgid "Controller Config" msgstr "Config. del mando" -#: src/ui/gui/appwindow.slint:160 +#: src/ui/gui/appwindow.slint:153 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:157 msgctxt "Menu" msgid "Cheats" msgstr "Trucos" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:161 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:165 msgctxt "Menu" msgid "Settings" msgstr "Ajustes" -#: src/ui/gui/appwindow.slint:176 +#: src/ui/gui/appwindow.slint:169 msgctxt "Menu" msgid "About" msgstr "Acerca de" @@ -192,47 +192,42 @@ msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "Netplay: Crear sesión" -#: src/ui/gui/netplay_create.slint:23 +#: src/ui/gui/netplay_create.slint:22 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "Nombre de la sesión:" -#: src/ui/gui/netplay_create.slint:27 +#: src/ui/gui/netplay_create.slint:26 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "Introduce el nombre de la sesión" -#: src/ui/gui/netplay_create.slint:37 +#: src/ui/gui/netplay_create.slint:36 msgctxt "NetplayCreate" msgid "Password (Optional):" msgstr "Contraseña (Opcional):" -#: src/ui/gui/netplay_create.slint:41 +#: src/ui/gui/netplay_create.slint:40 msgctxt "NetplayCreate" msgid "Enter session password" msgstr "Introduce la contraseña" -#: src/ui/gui/netplay_create.slint:52 +#: src/ui/gui/netplay_create.slint:51 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "Nombre del jugador:" -#: src/ui/gui/netplay_create.slint:56 +#: src/ui/gui/netplay_create.slint:55 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "Introduce tu nombre" #: src/ui/gui/netplay_create.slint:66 msgctxt "NetplayCreate" -msgid "Server:" -msgstr "Servidor:" - -#: src/ui/gui/netplay_create.slint:86 -msgctxt "NetplayCreate" msgid "Select ROM" msgstr "Seleccionar ROM" -#: src/ui/gui/netplay_create.slint:102 +#: src/ui/gui/netplay_create.slint:82 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." @@ -240,21 +235,16 @@ msgstr "" "Este juego tiene trucos activados. Los trucos se sincronizarán con los otros " "jugadores." -#: src/ui/gui/netplay_create.slint:112 +#: src/ui/gui/netplay_create.slint:91 msgctxt "NetplayCreate" msgid "Create Session" msgstr "Crear sesión" -#: src/ui/gui/netplay_create.slint:132 +#: src/ui/gui/netplay_create.slint:105 msgctxt "NetplayCreate" msgid "Cancel" msgstr "Cancelar" -#: src/ui/gui/netplay_create.slint:155 -msgctxt "CustomServerDialog" -msgid "Enter a custom server URL" -msgstr "Introduce la URL de servidor personalizado" - #: src/ui/gui/netplay_join.slint:7 msgctxt "NetplayJoin" msgid "Netplay: Join Session" @@ -275,152 +265,142 @@ msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "Contraseña (si es necesaria)" -#: src/ui/gui/netplay_join.slint:41 -msgctxt "NetplayJoin" -msgid "Custom Server URL (optional):" -msgstr "URL de servidor personalizado (opcional):" - -#: src/ui/gui/netplay_join.slint:53 +#: src/ui/gui/netplay_join.slint:42 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "Seleccionar ROM" -#: src/ui/gui/netplay_join.slint:68 +#: src/ui/gui/netplay_join.slint:57 msgctxt "NetplayJoin" msgid "Refreshing session list, please wait..." msgstr "Actualizando lista de sesiones, espera..." -#: src/ui/gui/netplay_join.slint:73 +#: src/ui/gui/netplay_join.slint:62 msgctxt "NetplayJoin" msgid "Click on a session below to select it" msgstr "Pulsa una sesión para seleccionarla" -#: src/ui/gui/netplay_join.slint:78 +#: src/ui/gui/netplay_join.slint:67 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." msgstr "No hay sesiones disponibles. Actualiza para comprobar de nuevo." -#: src/ui/gui/netplay_join.slint:84 -msgctxt "NetplayJoin" -msgid "Server" -msgstr "Servidor" - -#: src/ui/gui/netplay_join.slint:85 +#: src/ui/gui/netplay_join.slint:73 msgctxt "NetplayJoin" msgid "Session Name" msgstr "Nombre de la sesión" -#: src/ui/gui/netplay_join.slint:86 +#: src/ui/gui/netplay_join.slint:74 msgctxt "NetplayJoin" msgid "Game Name" msgstr "Nombre del juego" -#: src/ui/gui/netplay_join.slint:87 +#: src/ui/gui/netplay_join.slint:75 msgctxt "NetplayJoin" msgid "Password" msgstr "Contraseña" -#: src/ui/gui/netplay_join.slint:88 +#: src/ui/gui/netplay_join.slint:76 msgctxt "NetplayJoin" msgid "Cheats" msgstr "Trucos" -#: src/ui/gui/netplay_join.slint:102 +#: src/ui/gui/netplay_join.slint:90 msgctxt "NetplayJoin" msgid "Refresh Session List" msgstr "Actualizar lista" -#: src/ui/gui/netplay_join.slint:119 +#: src/ui/gui/netplay_join.slint:105 msgctxt "NetplayJoin" msgid "Join Session" msgstr "Unirse a la sesión" -#: src/ui/gui/netplay_join.slint:132 +#: src/ui/gui/netplay_join.slint:117 msgctxt "NetplayJoin" msgid "Cancel" msgstr "Cancelar" -#: src/ui/gui/netplay_page.slint:37 +#: src/ui/gui/netplay_page.slint:31 msgctxt "Netplay" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/netplay_page.slint:45 +#: src/ui/gui/netplay_page.slint:39 msgctxt "Netplay" msgid "Create Session" msgstr "Crear sesión" -#: src/ui/gui/netplay_page.slint:56 +#: src/ui/gui/netplay_page.slint:50 msgctxt "Netplay" msgid "Join Session" msgstr "Unirse a la sesión" -#: src/ui/gui/netplay_page.slint:70 +#: src/ui/gui/netplay_page.slint:64 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "Canal de Discord de Netplay" -#: src/ui/gui/netplay_page.slint:77 +#: src/ui/gui/netplay_page.slint:71 msgctxt "Netplay" msgid "Provide Feedback" msgstr "Enviar comentarios" -#: src/ui/gui/netplay_wait.slint:15 +#: src/ui/gui/netplay_wait.slint:14 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay: Sala de espera" -#: src/ui/gui/netplay_wait.slint:27 +#: src/ui/gui/netplay_wait.slint:26 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Nombre de la sesión:" -#: src/ui/gui/netplay_wait.slint:33 +#: src/ui/gui/netplay_wait.slint:32 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Nombre del juego:" -#: src/ui/gui/netplay_wait.slint:39 -msgctxt "NetplayWait" -msgid "Ping:" -msgstr "Latencia (Ping):" - -#: src/ui/gui/netplay_wait.slint:48 +#: src/ui/gui/netplay_wait.slint:42 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Jugador 1:" -#: src/ui/gui/netplay_wait.slint:52 +#: src/ui/gui/netplay_wait.slint:46 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Jugador 2:" -#: src/ui/gui/netplay_wait.slint:58 +#: src/ui/gui/netplay_wait.slint:52 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Jugador 3:" -#: src/ui/gui/netplay_wait.slint:62 +#: src/ui/gui/netplay_wait.slint:56 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Jugador 4:" -#: src/ui/gui/netplay_wait.slint:76 +#: src/ui/gui/netplay_wait.slint:70 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Escribe un mensaje en el chat" -#: src/ui/gui/netplay_wait.slint:87 +#: src/ui/gui/netplay_wait.slint:81 msgctxt "NetplayWait" msgid "Send Message" msgstr "Enviar mensaje" -#: src/ui/gui/netplay_wait.slint:105 +#: src/ui/gui/netplay_wait.slint:98 +msgctxt "NetplayWait" +msgid "Local Input Delay:" +msgstr "Retardo de entrada local:" + +#: src/ui/gui/netplay_wait.slint:115 msgctxt "NetplayWait" msgid "Start Game" msgstr "Iniciar juego" -#: src/ui/gui/netplay_wait.slint:113 +#: src/ui/gui/netplay_wait.slint:123 msgctxt "NetplayWait" msgid "Cancel" msgstr "Cancelar" @@ -555,6 +535,26 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "¿Qué te gustaría decir?" +#~ msgctxt "NetplayCreate" +#~ msgid "Server:" +#~ msgstr "Servidor:" + +#~ msgctxt "CustomServerDialog" +#~ msgid "Enter a custom server URL" +#~ msgstr "Introduce la URL de servidor personalizado" + +#~ msgctxt "NetplayJoin" +#~ msgid "Custom Server URL (optional):" +#~ msgstr "URL de servidor personalizado (opcional):" + +#~ msgctxt "NetplayJoin" +#~ msgid "Server" +#~ msgstr "Servidor" + +#~ msgctxt "NetplayWait" +#~ msgid "Ping:" +#~ msgstr "Latencia (Ping):" + #~ msgctxt "NetplayCreate" #~ msgid "Creating server, please wait...This may take about 30 seconds." #~ msgstr "Creando servidor, espera... Puede tardar unos 30 segundos." diff --git a/data/translations/fr/LC_MESSAGES/gopher64.po b/data/translations/fr/LC_MESSAGES/gopher64.po index 4952a37..91a03e2 100644 --- a/data/translations/fr/LC_MESSAGES/gopher64.po +++ b/data/translations/fr/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-30 16:03+0000\n" +"POT-Creation-Date: 2026-06-04 13:13+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: French (France)\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Faire un don (via GitHub)" -#: src/ui/gui/appwindow.slint:152 +#: src/ui/gui/appwindow.slint:145 msgctxt "Menu" msgid "Local Game" msgstr "Jeu local" -#: src/ui/gui/appwindow.slint:156 +#: src/ui/gui/appwindow.slint:149 msgctxt "Menu" msgid "Controller Config" msgstr "Configuration manette" -#: src/ui/gui/appwindow.slint:160 +#: src/ui/gui/appwindow.slint:153 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:157 msgctxt "Menu" msgid "Cheats" msgstr "Triche" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:161 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:165 msgctxt "Menu" msgid "Settings" msgstr "Paramètres" -#: src/ui/gui/appwindow.slint:176 +#: src/ui/gui/appwindow.slint:169 msgctxt "Menu" msgid "About" msgstr "À propos" @@ -192,47 +192,42 @@ msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "Netplay : créer une session" -#: src/ui/gui/netplay_create.slint:23 +#: src/ui/gui/netplay_create.slint:22 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "Nom de la session :" -#: src/ui/gui/netplay_create.slint:27 +#: src/ui/gui/netplay_create.slint:26 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "Saisir le nom de la session" -#: src/ui/gui/netplay_create.slint:37 +#: src/ui/gui/netplay_create.slint:36 msgctxt "NetplayCreate" msgid "Password (Optional):" msgstr "Mot de passe (facultatif) :" -#: src/ui/gui/netplay_create.slint:41 +#: src/ui/gui/netplay_create.slint:40 msgctxt "NetplayCreate" msgid "Enter session password" msgstr "Saisir le mot de passe de la session" -#: src/ui/gui/netplay_create.slint:52 +#: src/ui/gui/netplay_create.slint:51 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "Nom du joueur :" -#: src/ui/gui/netplay_create.slint:56 +#: src/ui/gui/netplay_create.slint:55 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "Saisir le nom du joueur" #: src/ui/gui/netplay_create.slint:66 msgctxt "NetplayCreate" -msgid "Server:" -msgstr "Serveur :" - -#: src/ui/gui/netplay_create.slint:86 -msgctxt "NetplayCreate" msgid "Select ROM" msgstr "Sélectionner une ROM" -#: src/ui/gui/netplay_create.slint:102 +#: src/ui/gui/netplay_create.slint:82 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." @@ -240,21 +235,16 @@ msgstr "" "La triche est activée pour ce jeu. Elle sera synchronisée avec les autres " "joueurs." -#: src/ui/gui/netplay_create.slint:112 +#: src/ui/gui/netplay_create.slint:91 msgctxt "NetplayCreate" msgid "Create Session" msgstr "Créer la session" -#: src/ui/gui/netplay_create.slint:132 +#: src/ui/gui/netplay_create.slint:105 msgctxt "NetplayCreate" msgid "Cancel" msgstr "Annuler" -#: src/ui/gui/netplay_create.slint:155 -msgctxt "CustomServerDialog" -msgid "Enter a custom server URL" -msgstr "Saisir l'URL personnalisée du serveur" - #: src/ui/gui/netplay_join.slint:7 msgctxt "NetplayJoin" msgid "Netplay: Join Session" @@ -275,153 +265,143 @@ msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "Mot de passe (si requis)" -#: src/ui/gui/netplay_join.slint:41 -msgctxt "NetplayJoin" -msgid "Custom Server URL (optional):" -msgstr "URL personnalisée du serveur (facultatif) :" - -#: src/ui/gui/netplay_join.slint:53 +#: src/ui/gui/netplay_join.slint:42 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "Sélectionner une ROM" -#: src/ui/gui/netplay_join.slint:68 +#: src/ui/gui/netplay_join.slint:57 msgctxt "NetplayJoin" msgid "Refreshing session list, please wait..." msgstr "Actualisation de la liste des sessions, veuillez patienter…" -#: src/ui/gui/netplay_join.slint:73 +#: src/ui/gui/netplay_join.slint:62 msgctxt "NetplayJoin" msgid "Click on a session below to select it" msgstr "Cliquez sur une session ci-dessous pour la sélectionner" -#: src/ui/gui/netplay_join.slint:78 +#: src/ui/gui/netplay_join.slint:67 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." msgstr "" "Aucune session disponible. Veuillez actualiser pour vérifier à nouveau." -#: src/ui/gui/netplay_join.slint:84 -msgctxt "NetplayJoin" -msgid "Server" -msgstr "Serveur" - -#: src/ui/gui/netplay_join.slint:85 +#: src/ui/gui/netplay_join.slint:73 msgctxt "NetplayJoin" msgid "Session Name" msgstr "Nom de la session" -#: src/ui/gui/netplay_join.slint:86 +#: src/ui/gui/netplay_join.slint:74 msgctxt "NetplayJoin" msgid "Game Name" msgstr "Nom du jeu" -#: src/ui/gui/netplay_join.slint:87 +#: src/ui/gui/netplay_join.slint:75 msgctxt "NetplayJoin" msgid "Password" msgstr "Mot de passe" -#: src/ui/gui/netplay_join.slint:88 +#: src/ui/gui/netplay_join.slint:76 msgctxt "NetplayJoin" msgid "Cheats" msgstr "Triche" -#: src/ui/gui/netplay_join.slint:102 +#: src/ui/gui/netplay_join.slint:90 msgctxt "NetplayJoin" msgid "Refresh Session List" msgstr "Actualiser la liste" -#: src/ui/gui/netplay_join.slint:119 +#: src/ui/gui/netplay_join.slint:105 msgctxt "NetplayJoin" msgid "Join Session" msgstr "Rejoindre la session" -#: src/ui/gui/netplay_join.slint:132 +#: src/ui/gui/netplay_join.slint:117 msgctxt "NetplayJoin" msgid "Cancel" msgstr "Annuler" -#: src/ui/gui/netplay_page.slint:37 +#: src/ui/gui/netplay_page.slint:31 msgctxt "Netplay" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/netplay_page.slint:45 +#: src/ui/gui/netplay_page.slint:39 msgctxt "Netplay" msgid "Create Session" msgstr "Créer une session" -#: src/ui/gui/netplay_page.slint:56 +#: src/ui/gui/netplay_page.slint:50 msgctxt "Netplay" msgid "Join Session" msgstr "Rejoindre une session" -#: src/ui/gui/netplay_page.slint:70 +#: src/ui/gui/netplay_page.slint:64 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "Salon Discord Netplay" -#: src/ui/gui/netplay_page.slint:77 +#: src/ui/gui/netplay_page.slint:71 msgctxt "Netplay" msgid "Provide Feedback" msgstr "Donner votre avis" -#: src/ui/gui/netplay_wait.slint:15 +#: src/ui/gui/netplay_wait.slint:14 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay : salle d'attente" -#: src/ui/gui/netplay_wait.slint:27 +#: src/ui/gui/netplay_wait.slint:26 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Nom de la session :" -#: src/ui/gui/netplay_wait.slint:33 +#: src/ui/gui/netplay_wait.slint:32 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Nom du jeu :" -#: src/ui/gui/netplay_wait.slint:39 -msgctxt "NetplayWait" -msgid "Ping:" -msgstr "Ping :" - -#: src/ui/gui/netplay_wait.slint:48 +#: src/ui/gui/netplay_wait.slint:42 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Joueur 1 :" -#: src/ui/gui/netplay_wait.slint:52 +#: src/ui/gui/netplay_wait.slint:46 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Joueur 2 :" -#: src/ui/gui/netplay_wait.slint:58 +#: src/ui/gui/netplay_wait.slint:52 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Joueur 3 :" -#: src/ui/gui/netplay_wait.slint:62 +#: src/ui/gui/netplay_wait.slint:56 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Joueur 4 :" -#: src/ui/gui/netplay_wait.slint:76 +#: src/ui/gui/netplay_wait.slint:70 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Saisir un message" -#: src/ui/gui/netplay_wait.slint:87 +#: src/ui/gui/netplay_wait.slint:81 msgctxt "NetplayWait" msgid "Send Message" msgstr "Envoyer" -#: src/ui/gui/netplay_wait.slint:105 +#: src/ui/gui/netplay_wait.slint:98 +msgctxt "NetplayWait" +msgid "Local Input Delay:" +msgstr "Délai d'entrée local :" + +#: src/ui/gui/netplay_wait.slint:115 msgctxt "NetplayWait" msgid "Start Game" msgstr "Lancer la partie" -#: src/ui/gui/netplay_wait.slint:113 +#: src/ui/gui/netplay_wait.slint:123 msgctxt "NetplayWait" msgid "Cancel" msgstr "Annuler" @@ -556,6 +536,26 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "Que souhaitez-vous dire ?" +#~ msgctxt "NetplayCreate" +#~ msgid "Server:" +#~ msgstr "Serveur :" + +#~ msgctxt "CustomServerDialog" +#~ msgid "Enter a custom server URL" +#~ msgstr "Saisir l'URL personnalisée du serveur" + +#~ msgctxt "NetplayJoin" +#~ msgid "Custom Server URL (optional):" +#~ msgstr "URL personnalisée du serveur (facultatif) :" + +#~ msgctxt "NetplayJoin" +#~ msgid "Server" +#~ msgstr "Serveur" + +#~ msgctxt "NetplayWait" +#~ msgid "Ping:" +#~ msgstr "Ping :" + #~ msgctxt "NetplayCreate" #~ msgid "Creating server, please wait...This may take about 30 seconds." #~ msgstr "" diff --git a/data/translations/gopher64.pot b/data/translations/gopher64.pot index fc298e6..e261d47 100644 --- a/data/translations/gopher64.pot +++ b/data/translations/gopher64.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-05-30 16:03+0000\n" +"POT-Creation-Date: 2026-06-04 13:13+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "" -#: src/ui/gui/appwindow.slint:152 +#: src/ui/gui/appwindow.slint:145 msgctxt "Menu" msgid "Local Game" msgstr "" -#: src/ui/gui/appwindow.slint:156 +#: src/ui/gui/appwindow.slint:149 msgctxt "Menu" msgid "Controller Config" msgstr "" -#: src/ui/gui/appwindow.slint:160 +#: src/ui/gui/appwindow.slint:153 msgctxt "Menu" msgid "Netplay" msgstr "" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:157 msgctxt "Menu" msgid "Cheats" msgstr "" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:161 msgctxt "Menu" msgid "RetroAchievements" msgstr "" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:165 msgctxt "Menu" msgid "Settings" msgstr "" -#: src/ui/gui/appwindow.slint:176 +#: src/ui/gui/appwindow.slint:169 msgctxt "Menu" msgid "About" msgstr "" @@ -192,67 +192,57 @@ msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "" -#: src/ui/gui/netplay_create.slint:23 +#: src/ui/gui/netplay_create.slint:22 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "" -#: src/ui/gui/netplay_create.slint:27 +#: src/ui/gui/netplay_create.slint:26 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "" -#: src/ui/gui/netplay_create.slint:37 +#: src/ui/gui/netplay_create.slint:36 msgctxt "NetplayCreate" msgid "Password (Optional):" msgstr "" -#: src/ui/gui/netplay_create.slint:41 +#: src/ui/gui/netplay_create.slint:40 msgctxt "NetplayCreate" msgid "Enter session password" msgstr "" -#: src/ui/gui/netplay_create.slint:52 +#: src/ui/gui/netplay_create.slint:51 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "" -#: src/ui/gui/netplay_create.slint:56 +#: src/ui/gui/netplay_create.slint:55 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "" #: src/ui/gui/netplay_create.slint:66 msgctxt "NetplayCreate" -msgid "Server:" -msgstr "" - -#: src/ui/gui/netplay_create.slint:86 -msgctxt "NetplayCreate" msgid "Select ROM" msgstr "" -#: src/ui/gui/netplay_create.slint:102 +#: src/ui/gui/netplay_create.slint:82 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." msgstr "" -#: src/ui/gui/netplay_create.slint:112 +#: src/ui/gui/netplay_create.slint:91 msgctxt "NetplayCreate" msgid "Create Session" msgstr "" -#: src/ui/gui/netplay_create.slint:132 +#: src/ui/gui/netplay_create.slint:105 msgctxt "NetplayCreate" msgid "Cancel" msgstr "" -#: src/ui/gui/netplay_create.slint:155 -msgctxt "CustomServerDialog" -msgid "Enter a custom server URL" -msgstr "" - #: src/ui/gui/netplay_join.slint:7 msgctxt "NetplayJoin" msgid "Netplay: Join Session" @@ -273,152 +263,142 @@ msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "" -#: src/ui/gui/netplay_join.slint:41 -msgctxt "NetplayJoin" -msgid "Custom Server URL (optional):" -msgstr "" - -#: src/ui/gui/netplay_join.slint:53 +#: src/ui/gui/netplay_join.slint:42 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "" -#: src/ui/gui/netplay_join.slint:68 +#: src/ui/gui/netplay_join.slint:57 msgctxt "NetplayJoin" msgid "Refreshing session list, please wait..." msgstr "" -#: src/ui/gui/netplay_join.slint:73 +#: src/ui/gui/netplay_join.slint:62 msgctxt "NetplayJoin" msgid "Click on a session below to select it" msgstr "" -#: src/ui/gui/netplay_join.slint:78 +#: src/ui/gui/netplay_join.slint:67 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." msgstr "" -#: src/ui/gui/netplay_join.slint:84 -msgctxt "NetplayJoin" -msgid "Server" -msgstr "" - -#: src/ui/gui/netplay_join.slint:85 +#: src/ui/gui/netplay_join.slint:73 msgctxt "NetplayJoin" msgid "Session Name" msgstr "" -#: src/ui/gui/netplay_join.slint:86 +#: src/ui/gui/netplay_join.slint:74 msgctxt "NetplayJoin" msgid "Game Name" msgstr "" -#: src/ui/gui/netplay_join.slint:87 +#: src/ui/gui/netplay_join.slint:75 msgctxt "NetplayJoin" msgid "Password" msgstr "" -#: src/ui/gui/netplay_join.slint:88 +#: src/ui/gui/netplay_join.slint:76 msgctxt "NetplayJoin" msgid "Cheats" msgstr "" -#: src/ui/gui/netplay_join.slint:102 +#: src/ui/gui/netplay_join.slint:90 msgctxt "NetplayJoin" msgid "Refresh Session List" msgstr "" -#: src/ui/gui/netplay_join.slint:119 +#: src/ui/gui/netplay_join.slint:105 msgctxt "NetplayJoin" msgid "Join Session" msgstr "" -#: src/ui/gui/netplay_join.slint:132 +#: src/ui/gui/netplay_join.slint:117 msgctxt "NetplayJoin" msgid "Cancel" msgstr "" -#: src/ui/gui/netplay_page.slint:37 +#: src/ui/gui/netplay_page.slint:31 msgctxt "Netplay" msgid "Netplay" msgstr "" -#: src/ui/gui/netplay_page.slint:45 +#: src/ui/gui/netplay_page.slint:39 msgctxt "Netplay" msgid "Create Session" msgstr "" -#: src/ui/gui/netplay_page.slint:56 +#: src/ui/gui/netplay_page.slint:50 msgctxt "Netplay" msgid "Join Session" msgstr "" -#: src/ui/gui/netplay_page.slint:70 +#: src/ui/gui/netplay_page.slint:64 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "" -#: src/ui/gui/netplay_page.slint:77 +#: src/ui/gui/netplay_page.slint:71 msgctxt "Netplay" msgid "Provide Feedback" msgstr "" -#: src/ui/gui/netplay_wait.slint:15 +#: src/ui/gui/netplay_wait.slint:14 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "" -#: src/ui/gui/netplay_wait.slint:27 +#: src/ui/gui/netplay_wait.slint:26 msgctxt "NetplayWait" msgid "Session Name:" msgstr "" -#: src/ui/gui/netplay_wait.slint:33 +#: src/ui/gui/netplay_wait.slint:32 msgctxt "NetplayWait" msgid "Game Name:" msgstr "" -#: src/ui/gui/netplay_wait.slint:39 -msgctxt "NetplayWait" -msgid "Ping:" -msgstr "" - -#: src/ui/gui/netplay_wait.slint:48 +#: src/ui/gui/netplay_wait.slint:42 msgctxt "NetplayWait" msgid "Player 1:" msgstr "" -#: src/ui/gui/netplay_wait.slint:52 +#: src/ui/gui/netplay_wait.slint:46 msgctxt "NetplayWait" msgid "Player 2:" msgstr "" -#: src/ui/gui/netplay_wait.slint:58 +#: src/ui/gui/netplay_wait.slint:52 msgctxt "NetplayWait" msgid "Player 3:" msgstr "" -#: src/ui/gui/netplay_wait.slint:62 +#: src/ui/gui/netplay_wait.slint:56 msgctxt "NetplayWait" msgid "Player 4:" msgstr "" -#: src/ui/gui/netplay_wait.slint:76 +#: src/ui/gui/netplay_wait.slint:70 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "" -#: src/ui/gui/netplay_wait.slint:87 +#: src/ui/gui/netplay_wait.slint:81 msgctxt "NetplayWait" msgid "Send Message" msgstr "" -#: src/ui/gui/netplay_wait.slint:105 +#: src/ui/gui/netplay_wait.slint:98 +msgctxt "NetplayWait" +msgid "Local Input Delay:" +msgstr "" + +#: src/ui/gui/netplay_wait.slint:115 msgctxt "NetplayWait" msgid "Start Game" msgstr "" -#: src/ui/gui/netplay_wait.slint:113 +#: src/ui/gui/netplay_wait.slint:123 msgctxt "NetplayWait" msgid "Cancel" msgstr "" diff --git a/data/translations/ja/LC_MESSAGES/gopher64.po b/data/translations/ja/LC_MESSAGES/gopher64.po index 24c2075..de66b35 100644 --- a/data/translations/ja/LC_MESSAGES/gopher64.po +++ b/data/translations/ja/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-30 16:03+0000\n" +"POT-Creation-Date: 2026-06-04 13:13+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Japanese\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "GitHubで寄付" -#: src/ui/gui/appwindow.slint:152 +#: src/ui/gui/appwindow.slint:145 msgctxt "Menu" msgid "Local Game" msgstr "ローカルゲーム" -#: src/ui/gui/appwindow.slint:156 +#: src/ui/gui/appwindow.slint:149 msgctxt "Menu" msgid "Controller Config" msgstr "コントローラー設定" -#: src/ui/gui/appwindow.slint:160 +#: src/ui/gui/appwindow.slint:153 msgctxt "Menu" msgid "Netplay" msgstr "ネットプレイ" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:157 msgctxt "Menu" msgid "Cheats" msgstr "チート" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:161 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:165 msgctxt "Menu" msgid "Settings" msgstr "設定" -#: src/ui/gui/appwindow.slint:176 +#: src/ui/gui/appwindow.slint:169 msgctxt "Menu" msgid "About" msgstr "バージョン情報" @@ -192,67 +192,57 @@ msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "ネットプレイ:セッション作成" -#: src/ui/gui/netplay_create.slint:23 +#: src/ui/gui/netplay_create.slint:22 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "セッション名:" -#: src/ui/gui/netplay_create.slint:27 +#: src/ui/gui/netplay_create.slint:26 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "セッション名を入力" -#: src/ui/gui/netplay_create.slint:37 +#: src/ui/gui/netplay_create.slint:36 msgctxt "NetplayCreate" msgid "Password (Optional):" msgstr "パスワード(任意):" -#: src/ui/gui/netplay_create.slint:41 +#: src/ui/gui/netplay_create.slint:40 msgctxt "NetplayCreate" msgid "Enter session password" msgstr "セッションのパスワードを入力" -#: src/ui/gui/netplay_create.slint:52 +#: src/ui/gui/netplay_create.slint:51 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "プレイヤー名:" -#: src/ui/gui/netplay_create.slint:56 +#: src/ui/gui/netplay_create.slint:55 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "プレイヤー名を入力" #: src/ui/gui/netplay_create.slint:66 msgctxt "NetplayCreate" -msgid "Server:" -msgstr "サーバー:" - -#: src/ui/gui/netplay_create.slint:86 -msgctxt "NetplayCreate" msgid "Select ROM" msgstr "ROMを選択" -#: src/ui/gui/netplay_create.slint:102 +#: src/ui/gui/netplay_create.slint:82 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." msgstr "このゲームではチートが有効です。チートは他のプレイヤーと同期されます。" -#: src/ui/gui/netplay_create.slint:112 +#: src/ui/gui/netplay_create.slint:91 msgctxt "NetplayCreate" msgid "Create Session" msgstr "セッションを作成" -#: src/ui/gui/netplay_create.slint:132 +#: src/ui/gui/netplay_create.slint:105 msgctxt "NetplayCreate" msgid "Cancel" msgstr "キャンセル" -#: src/ui/gui/netplay_create.slint:155 -msgctxt "CustomServerDialog" -msgid "Enter a custom server URL" -msgstr "カスタムサーバーURLを入力" - #: src/ui/gui/netplay_join.slint:7 msgctxt "NetplayJoin" msgid "Netplay: Join Session" @@ -273,152 +263,142 @@ msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "パスワード(必要な場合)" -#: src/ui/gui/netplay_join.slint:41 -msgctxt "NetplayJoin" -msgid "Custom Server URL (optional):" -msgstr "カスタムサーバーURL(任意):" - -#: src/ui/gui/netplay_join.slint:53 +#: src/ui/gui/netplay_join.slint:42 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "ROMを選択" -#: src/ui/gui/netplay_join.slint:68 +#: src/ui/gui/netplay_join.slint:57 msgctxt "NetplayJoin" msgid "Refreshing session list, please wait..." msgstr "セッション一覧を更新しています。しばらくお待ちください…" -#: src/ui/gui/netplay_join.slint:73 +#: src/ui/gui/netplay_join.slint:62 msgctxt "NetplayJoin" msgid "Click on a session below to select it" msgstr "下の一覧からセッションをクリックして選択" -#: src/ui/gui/netplay_join.slint:78 +#: src/ui/gui/netplay_join.slint:67 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." msgstr "利用できるセッションがありません。更新して再度確認してください。" -#: src/ui/gui/netplay_join.slint:84 -msgctxt "NetplayJoin" -msgid "Server" -msgstr "サーバー" - -#: src/ui/gui/netplay_join.slint:85 +#: src/ui/gui/netplay_join.slint:73 msgctxt "NetplayJoin" msgid "Session Name" msgstr "セッション名" -#: src/ui/gui/netplay_join.slint:86 +#: src/ui/gui/netplay_join.slint:74 msgctxt "NetplayJoin" msgid "Game Name" msgstr "ゲーム名" -#: src/ui/gui/netplay_join.slint:87 +#: src/ui/gui/netplay_join.slint:75 msgctxt "NetplayJoin" msgid "Password" msgstr "パスワード" -#: src/ui/gui/netplay_join.slint:88 +#: src/ui/gui/netplay_join.slint:76 msgctxt "NetplayJoin" msgid "Cheats" msgstr "チート" -#: src/ui/gui/netplay_join.slint:102 +#: src/ui/gui/netplay_join.slint:90 msgctxt "NetplayJoin" msgid "Refresh Session List" msgstr "セッション一覧を更新" -#: src/ui/gui/netplay_join.slint:119 +#: src/ui/gui/netplay_join.slint:105 msgctxt "NetplayJoin" msgid "Join Session" msgstr "セッションに参加" -#: src/ui/gui/netplay_join.slint:132 +#: src/ui/gui/netplay_join.slint:117 msgctxt "NetplayJoin" msgid "Cancel" msgstr "キャンセル" -#: src/ui/gui/netplay_page.slint:37 +#: src/ui/gui/netplay_page.slint:31 msgctxt "Netplay" msgid "Netplay" msgstr "ネットプレイ" -#: src/ui/gui/netplay_page.slint:45 +#: src/ui/gui/netplay_page.slint:39 msgctxt "Netplay" msgid "Create Session" msgstr "セッションを作成" -#: src/ui/gui/netplay_page.slint:56 +#: src/ui/gui/netplay_page.slint:50 msgctxt "Netplay" msgid "Join Session" msgstr "セッションに参加" -#: src/ui/gui/netplay_page.slint:70 +#: src/ui/gui/netplay_page.slint:64 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "ネットプレイ用Discordチャンネル" -#: src/ui/gui/netplay_page.slint:77 +#: src/ui/gui/netplay_page.slint:71 msgctxt "Netplay" msgid "Provide Feedback" msgstr "フィードバックを送る" -#: src/ui/gui/netplay_wait.slint:15 +#: src/ui/gui/netplay_wait.slint:14 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "ネットプレイ:待機室" -#: src/ui/gui/netplay_wait.slint:27 +#: src/ui/gui/netplay_wait.slint:26 msgctxt "NetplayWait" msgid "Session Name:" msgstr "セッション名:" -#: src/ui/gui/netplay_wait.slint:33 +#: src/ui/gui/netplay_wait.slint:32 msgctxt "NetplayWait" msgid "Game Name:" msgstr "ゲーム名:" -#: src/ui/gui/netplay_wait.slint:39 -msgctxt "NetplayWait" -msgid "Ping:" -msgstr "Ping:" - -#: src/ui/gui/netplay_wait.slint:48 +#: src/ui/gui/netplay_wait.slint:42 msgctxt "NetplayWait" msgid "Player 1:" msgstr "プレイヤー1:" -#: src/ui/gui/netplay_wait.slint:52 +#: src/ui/gui/netplay_wait.slint:46 msgctxt "NetplayWait" msgid "Player 2:" msgstr "プレイヤー2:" -#: src/ui/gui/netplay_wait.slint:58 +#: src/ui/gui/netplay_wait.slint:52 msgctxt "NetplayWait" msgid "Player 3:" msgstr "プレイヤー3:" -#: src/ui/gui/netplay_wait.slint:62 +#: src/ui/gui/netplay_wait.slint:56 msgctxt "NetplayWait" msgid "Player 4:" msgstr "プレイヤー4:" -#: src/ui/gui/netplay_wait.slint:76 +#: src/ui/gui/netplay_wait.slint:70 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "チャットメッセージを入力" -#: src/ui/gui/netplay_wait.slint:87 +#: src/ui/gui/netplay_wait.slint:81 msgctxt "NetplayWait" msgid "Send Message" msgstr "送信" -#: src/ui/gui/netplay_wait.slint:105 +#: src/ui/gui/netplay_wait.slint:98 +msgctxt "NetplayWait" +msgid "Local Input Delay:" +msgstr "ローカル入力遅延:" + +#: src/ui/gui/netplay_wait.slint:115 msgctxt "NetplayWait" msgid "Start Game" msgstr "ゲーム開始" -#: src/ui/gui/netplay_wait.slint:113 +#: src/ui/gui/netplay_wait.slint:123 msgctxt "NetplayWait" msgid "Cancel" msgstr "キャンセル" @@ -553,6 +533,26 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "何と言いますか?" +#~ msgctxt "NetplayCreate" +#~ msgid "Server:" +#~ msgstr "サーバー:" + +#~ msgctxt "CustomServerDialog" +#~ msgid "Enter a custom server URL" +#~ msgstr "カスタムサーバーURLを入力" + +#~ msgctxt "NetplayJoin" +#~ msgid "Custom Server URL (optional):" +#~ msgstr "カスタムサーバーURL(任意):" + +#~ msgctxt "NetplayJoin" +#~ msgid "Server" +#~ msgstr "サーバー" + +#~ msgctxt "NetplayWait" +#~ msgid "Ping:" +#~ msgstr "Ping:" + #~ msgctxt "NetplayCreate" #~ msgid "Creating server, please wait...This may take about 30 seconds." #~ msgstr "" diff --git a/data/translations/nl/LC_MESSAGES/gopher64.po b/data/translations/nl/LC_MESSAGES/gopher64.po index 17ee82d..3a1cffd 100644 --- a/data/translations/nl/LC_MESSAGES/gopher64.po +++ b/data/translations/nl/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-30 16:03+0000\n" +"POT-Creation-Date: 2026-06-04 13:13+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Dutch (Netherlands)\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Doneren (via GitHub)" -#: src/ui/gui/appwindow.slint:152 +#: src/ui/gui/appwindow.slint:145 msgctxt "Menu" msgid "Local Game" msgstr "Lokaal spel" -#: src/ui/gui/appwindow.slint:156 +#: src/ui/gui/appwindow.slint:149 msgctxt "Menu" msgid "Controller Config" msgstr "Controllerconfiguratie" -#: src/ui/gui/appwindow.slint:160 +#: src/ui/gui/appwindow.slint:153 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:157 msgctxt "Menu" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:161 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:165 msgctxt "Menu" msgid "Settings" msgstr "Instellingen" -#: src/ui/gui/appwindow.slint:176 +#: src/ui/gui/appwindow.slint:169 msgctxt "Menu" msgid "About" msgstr "Over" @@ -192,47 +192,42 @@ msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "Netplay: sessie aanmaken" -#: src/ui/gui/netplay_create.slint:23 +#: src/ui/gui/netplay_create.slint:22 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "Sessienaam:" -#: src/ui/gui/netplay_create.slint:27 +#: src/ui/gui/netplay_create.slint:26 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "Sessienaam invoeren" -#: src/ui/gui/netplay_create.slint:37 +#: src/ui/gui/netplay_create.slint:36 msgctxt "NetplayCreate" msgid "Password (Optional):" msgstr "Wachtwoord (optioneel):" -#: src/ui/gui/netplay_create.slint:41 +#: src/ui/gui/netplay_create.slint:40 msgctxt "NetplayCreate" msgid "Enter session password" msgstr "Sessiewachtwoord invoeren" -#: src/ui/gui/netplay_create.slint:52 +#: src/ui/gui/netplay_create.slint:51 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "Spelernaam:" -#: src/ui/gui/netplay_create.slint:56 +#: src/ui/gui/netplay_create.slint:55 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "Spelernaam invoeren" #: src/ui/gui/netplay_create.slint:66 msgctxt "NetplayCreate" -msgid "Server:" -msgstr "Server:" - -#: src/ui/gui/netplay_create.slint:86 -msgctxt "NetplayCreate" msgid "Select ROM" msgstr "ROM selecteren" -#: src/ui/gui/netplay_create.slint:102 +#: src/ui/gui/netplay_create.slint:82 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." @@ -240,21 +235,16 @@ msgstr "" "Voor dit spel zijn cheats ingeschakeld. Cheats worden gesynchroniseerd met " "andere spelers." -#: src/ui/gui/netplay_create.slint:112 +#: src/ui/gui/netplay_create.slint:91 msgctxt "NetplayCreate" msgid "Create Session" msgstr "Sessie aanmaken" -#: src/ui/gui/netplay_create.slint:132 +#: src/ui/gui/netplay_create.slint:105 msgctxt "NetplayCreate" msgid "Cancel" msgstr "Annuleren" -#: src/ui/gui/netplay_create.slint:155 -msgctxt "CustomServerDialog" -msgid "Enter a custom server URL" -msgstr "Aangepaste server-URL invoeren" - #: src/ui/gui/netplay_join.slint:7 msgctxt "NetplayJoin" msgid "Netplay: Join Session" @@ -275,152 +265,142 @@ msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "Wachtwoord (indien vereist)" -#: src/ui/gui/netplay_join.slint:41 -msgctxt "NetplayJoin" -msgid "Custom Server URL (optional):" -msgstr "Aangepaste server-URL (optioneel):" - -#: src/ui/gui/netplay_join.slint:53 +#: src/ui/gui/netplay_join.slint:42 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "ROM selecteren" -#: src/ui/gui/netplay_join.slint:68 +#: src/ui/gui/netplay_join.slint:57 msgctxt "NetplayJoin" msgid "Refreshing session list, please wait..." msgstr "Sessielijst wordt vernieuwd, even geduld…" -#: src/ui/gui/netplay_join.slint:73 +#: src/ui/gui/netplay_join.slint:62 msgctxt "NetplayJoin" msgid "Click on a session below to select it" msgstr "Klik hieronder op een sessie om die te selecteren" -#: src/ui/gui/netplay_join.slint:78 +#: src/ui/gui/netplay_join.slint:67 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." msgstr "Geen sessies beschikbaar. Vernieuw om opnieuw te controleren." -#: src/ui/gui/netplay_join.slint:84 -msgctxt "NetplayJoin" -msgid "Server" -msgstr "Server" - -#: src/ui/gui/netplay_join.slint:85 +#: src/ui/gui/netplay_join.slint:73 msgctxt "NetplayJoin" msgid "Session Name" msgstr "Sessienaam" -#: src/ui/gui/netplay_join.slint:86 +#: src/ui/gui/netplay_join.slint:74 msgctxt "NetplayJoin" msgid "Game Name" msgstr "Spelnaam" -#: src/ui/gui/netplay_join.slint:87 +#: src/ui/gui/netplay_join.slint:75 msgctxt "NetplayJoin" msgid "Password" msgstr "Wachtwoord" -#: src/ui/gui/netplay_join.slint:88 +#: src/ui/gui/netplay_join.slint:76 msgctxt "NetplayJoin" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/netplay_join.slint:102 +#: src/ui/gui/netplay_join.slint:90 msgctxt "NetplayJoin" msgid "Refresh Session List" msgstr "Sessielijst vernieuwen" -#: src/ui/gui/netplay_join.slint:119 +#: src/ui/gui/netplay_join.slint:105 msgctxt "NetplayJoin" msgid "Join Session" msgstr "Deelnemen aan sessie" -#: src/ui/gui/netplay_join.slint:132 +#: src/ui/gui/netplay_join.slint:117 msgctxt "NetplayJoin" msgid "Cancel" msgstr "Annuleren" -#: src/ui/gui/netplay_page.slint:37 +#: src/ui/gui/netplay_page.slint:31 msgctxt "Netplay" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/netplay_page.slint:45 +#: src/ui/gui/netplay_page.slint:39 msgctxt "Netplay" msgid "Create Session" msgstr "Sessie aanmaken" -#: src/ui/gui/netplay_page.slint:56 +#: src/ui/gui/netplay_page.slint:50 msgctxt "Netplay" msgid "Join Session" msgstr "Deelnemen aan sessie" -#: src/ui/gui/netplay_page.slint:70 +#: src/ui/gui/netplay_page.slint:64 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "Netplay-Discordkanaal" -#: src/ui/gui/netplay_page.slint:77 +#: src/ui/gui/netplay_page.slint:71 msgctxt "Netplay" msgid "Provide Feedback" msgstr "Feedback geven" -#: src/ui/gui/netplay_wait.slint:15 +#: src/ui/gui/netplay_wait.slint:14 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay: wachtruimte" -#: src/ui/gui/netplay_wait.slint:27 +#: src/ui/gui/netplay_wait.slint:26 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Sessienaam:" -#: src/ui/gui/netplay_wait.slint:33 +#: src/ui/gui/netplay_wait.slint:32 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Spelnaam:" -#: src/ui/gui/netplay_wait.slint:39 -msgctxt "NetplayWait" -msgid "Ping:" -msgstr "Ping:" - -#: src/ui/gui/netplay_wait.slint:48 +#: src/ui/gui/netplay_wait.slint:42 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Speler 1:" -#: src/ui/gui/netplay_wait.slint:52 +#: src/ui/gui/netplay_wait.slint:46 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Speler 2:" -#: src/ui/gui/netplay_wait.slint:58 +#: src/ui/gui/netplay_wait.slint:52 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Speler 3:" -#: src/ui/gui/netplay_wait.slint:62 +#: src/ui/gui/netplay_wait.slint:56 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Speler 4:" -#: src/ui/gui/netplay_wait.slint:76 +#: src/ui/gui/netplay_wait.slint:70 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Chatbericht invoeren" -#: src/ui/gui/netplay_wait.slint:87 +#: src/ui/gui/netplay_wait.slint:81 msgctxt "NetplayWait" msgid "Send Message" msgstr "Bericht verzenden" -#: src/ui/gui/netplay_wait.slint:105 +#: src/ui/gui/netplay_wait.slint:98 +msgctxt "NetplayWait" +msgid "Local Input Delay:" +msgstr "Lokale invoervertraging:" + +#: src/ui/gui/netplay_wait.slint:115 msgctxt "NetplayWait" msgid "Start Game" msgstr "Spel starten" -#: src/ui/gui/netplay_wait.slint:113 +#: src/ui/gui/netplay_wait.slint:123 msgctxt "NetplayWait" msgid "Cancel" msgstr "Annuleren" @@ -555,6 +535,26 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "Wat wil je zeggen?" +#~ msgctxt "NetplayCreate" +#~ msgid "Server:" +#~ msgstr "Server:" + +#~ msgctxt "CustomServerDialog" +#~ msgid "Enter a custom server URL" +#~ msgstr "Aangepaste server-URL invoeren" + +#~ msgctxt "NetplayJoin" +#~ msgid "Custom Server URL (optional):" +#~ msgstr "Aangepaste server-URL (optioneel):" + +#~ msgctxt "NetplayJoin" +#~ msgid "Server" +#~ msgstr "Server" + +#~ msgctxt "NetplayWait" +#~ msgid "Ping:" +#~ msgstr "Ping:" + #~ msgctxt "NetplayCreate" #~ msgid "Creating server, please wait...This may take about 30 seconds." #~ msgstr "" diff --git a/data/translations/pt_BR/LC_MESSAGES/gopher64.po b/data/translations/pt_BR/LC_MESSAGES/gopher64.po index f4188d7..b974282 100644 --- a/data/translations/pt_BR/LC_MESSAGES/gopher64.po +++ b/data/translations/pt_BR/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-05-30 16:03+0000\n" +"POT-Creation-Date: 2026-06-04 13:13+0000\n" "PO-Revision-Date: 2026-05-11 18:11-3000\n" "Last-Translator: EDUARDO CARVALHO \n" "Language-Team: LANGUAGE \n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Doações (via GitHub)" -#: src/ui/gui/appwindow.slint:152 +#: src/ui/gui/appwindow.slint:145 msgctxt "Menu" msgid "Local Game" msgstr "Jogo Local" -#: src/ui/gui/appwindow.slint:156 +#: src/ui/gui/appwindow.slint:149 msgctxt "Menu" msgid "Controller Config" msgstr "Configurar Controle" -#: src/ui/gui/appwindow.slint:160 +#: src/ui/gui/appwindow.slint:153 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:157 msgctxt "Menu" msgid "Cheats" msgstr "Trapaças" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:161 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:165 msgctxt "Menu" msgid "Settings" msgstr "Configurações" -#: src/ui/gui/appwindow.slint:176 +#: src/ui/gui/appwindow.slint:169 msgctxt "Menu" msgid "About" msgstr "Sobre" @@ -192,47 +192,42 @@ msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "Netplay: Criar Sessão" -#: src/ui/gui/netplay_create.slint:23 +#: src/ui/gui/netplay_create.slint:22 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "Nome da Sessão:" -#: src/ui/gui/netplay_create.slint:27 +#: src/ui/gui/netplay_create.slint:26 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "Insira nome da sessão:" -#: src/ui/gui/netplay_create.slint:37 +#: src/ui/gui/netplay_create.slint:36 msgctxt "NetplayCreate" msgid "Password (Optional):" msgstr "Senha: (Opcional):" -#: src/ui/gui/netplay_create.slint:41 +#: src/ui/gui/netplay_create.slint:40 msgctxt "NetplayCreate" msgid "Enter session password" msgstr "Insira a senha da sessão" -#: src/ui/gui/netplay_create.slint:52 +#: src/ui/gui/netplay_create.slint:51 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "Nome de Jogador:" -#: src/ui/gui/netplay_create.slint:56 +#: src/ui/gui/netplay_create.slint:55 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "Insira nome de jogador" #: src/ui/gui/netplay_create.slint:66 msgctxt "NetplayCreate" -msgid "Server:" -msgstr "Servidor:" - -#: src/ui/gui/netplay_create.slint:86 -msgctxt "NetplayCreate" msgid "Select ROM" msgstr "Selecionar ROM" -#: src/ui/gui/netplay_create.slint:102 +#: src/ui/gui/netplay_create.slint:82 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." @@ -240,21 +235,16 @@ msgstr "" "Este jogo tem trapaças habilitadas. As trapaças serão sincronizadas com " "outros jogadores." -#: src/ui/gui/netplay_create.slint:112 +#: src/ui/gui/netplay_create.slint:91 msgctxt "NetplayCreate" msgid "Create Session" msgstr "Criar Sessão" -#: src/ui/gui/netplay_create.slint:132 +#: src/ui/gui/netplay_create.slint:105 msgctxt "NetplayCreate" msgid "Cancel" msgstr "Cancelar" -#: src/ui/gui/netplay_create.slint:155 -msgctxt "CustomServerDialog" -msgid "Enter a custom server URL" -msgstr "Insira a URL personalizada do servidor" - #: src/ui/gui/netplay_join.slint:7 msgctxt "NetplayJoin" msgid "Netplay: Join Session" @@ -275,153 +265,143 @@ msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "Senha (caso obrigatória)" -#: src/ui/gui/netplay_join.slint:41 -msgctxt "NetplayJoin" -msgid "Custom Server URL (optional):" -msgstr "URL Personalizada de Servidor (opcional):" - -#: src/ui/gui/netplay_join.slint:53 +#: src/ui/gui/netplay_join.slint:42 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "Selecionar ROM" -#: src/ui/gui/netplay_join.slint:68 +#: src/ui/gui/netplay_join.slint:57 msgctxt "NetplayJoin" msgid "Refreshing session list, please wait..." msgstr "Recarregando lista de sessões, por favor aguarde..." -#: src/ui/gui/netplay_join.slint:73 +#: src/ui/gui/netplay_join.slint:62 msgctxt "NetplayJoin" msgid "Click on a session below to select it" msgstr "Clique em uma sessão abaixo para selecionar" -#: src/ui/gui/netplay_join.slint:78 +#: src/ui/gui/netplay_join.slint:67 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." msgstr "" "Sem sessões disponíveis. Por favor recarregue para verificar novamente." -#: src/ui/gui/netplay_join.slint:84 -msgctxt "NetplayJoin" -msgid "Server" -msgstr "Servidor" - -#: src/ui/gui/netplay_join.slint:85 +#: src/ui/gui/netplay_join.slint:73 msgctxt "NetplayJoin" msgid "Session Name" msgstr "Nome da Sessão" -#: src/ui/gui/netplay_join.slint:86 +#: src/ui/gui/netplay_join.slint:74 msgctxt "NetplayJoin" msgid "Game Name" msgstr "Nome do Jogo" -#: src/ui/gui/netplay_join.slint:87 +#: src/ui/gui/netplay_join.slint:75 msgctxt "NetplayJoin" msgid "Password" msgstr "Senha" -#: src/ui/gui/netplay_join.slint:88 +#: src/ui/gui/netplay_join.slint:76 msgctxt "NetplayJoin" msgid "Cheats" msgstr "Trapaças" -#: src/ui/gui/netplay_join.slint:102 +#: src/ui/gui/netplay_join.slint:90 msgctxt "NetplayJoin" msgid "Refresh Session List" msgstr "Recarregar Lista de Sessões" -#: src/ui/gui/netplay_join.slint:119 +#: src/ui/gui/netplay_join.slint:105 msgctxt "NetplayJoin" msgid "Join Session" msgstr "Entrar na Sessão" -#: src/ui/gui/netplay_join.slint:132 +#: src/ui/gui/netplay_join.slint:117 msgctxt "NetplayJoin" msgid "Cancel" msgstr "Cancelar" -#: src/ui/gui/netplay_page.slint:37 +#: src/ui/gui/netplay_page.slint:31 msgctxt "Netplay" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/netplay_page.slint:45 +#: src/ui/gui/netplay_page.slint:39 msgctxt "Netplay" msgid "Create Session" msgstr "Criar Sessão" -#: src/ui/gui/netplay_page.slint:56 +#: src/ui/gui/netplay_page.slint:50 msgctxt "Netplay" msgid "Join Session" msgstr "Entrar na Sessão" -#: src/ui/gui/netplay_page.slint:70 +#: src/ui/gui/netplay_page.slint:64 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "Canal de Netplay do Discord" -#: src/ui/gui/netplay_page.slint:77 +#: src/ui/gui/netplay_page.slint:71 msgctxt "Netplay" msgid "Provide Feedback" msgstr "Fornecer Feedback" -#: src/ui/gui/netplay_wait.slint:15 +#: src/ui/gui/netplay_wait.slint:14 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay: Aguardando Sala" -#: src/ui/gui/netplay_wait.slint:27 +#: src/ui/gui/netplay_wait.slint:26 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Nome da Sessão:" -#: src/ui/gui/netplay_wait.slint:33 +#: src/ui/gui/netplay_wait.slint:32 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Nome do Jogo:" -#: src/ui/gui/netplay_wait.slint:39 -msgctxt "NetplayWait" -msgid "Ping:" -msgstr "Ping:" - -#: src/ui/gui/netplay_wait.slint:48 +#: src/ui/gui/netplay_wait.slint:42 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Jogador 1" -#: src/ui/gui/netplay_wait.slint:52 +#: src/ui/gui/netplay_wait.slint:46 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Jogador 2:" -#: src/ui/gui/netplay_wait.slint:58 +#: src/ui/gui/netplay_wait.slint:52 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Jogador 3:" -#: src/ui/gui/netplay_wait.slint:62 +#: src/ui/gui/netplay_wait.slint:56 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Jogador 4:" -#: src/ui/gui/netplay_wait.slint:76 +#: src/ui/gui/netplay_wait.slint:70 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Escrever mensagem no chat" -#: src/ui/gui/netplay_wait.slint:87 +#: src/ui/gui/netplay_wait.slint:81 msgctxt "NetplayWait" msgid "Send Message" msgstr "Enviar Mensagem" -#: src/ui/gui/netplay_wait.slint:105 +#: src/ui/gui/netplay_wait.slint:98 +msgctxt "NetplayWait" +msgid "Local Input Delay:" +msgstr "Atraso de entrada local:" + +#: src/ui/gui/netplay_wait.slint:115 msgctxt "NetplayWait" msgid "Start Game" msgstr "Iniciar jogo" -#: src/ui/gui/netplay_wait.slint:113 +#: src/ui/gui/netplay_wait.slint:123 msgctxt "NetplayWait" msgid "Cancel" msgstr "Cancelar" @@ -556,6 +536,26 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "O que você quer falar?" +#~ msgctxt "NetplayCreate" +#~ msgid "Server:" +#~ msgstr "Servidor:" + +#~ msgctxt "CustomServerDialog" +#~ msgid "Enter a custom server URL" +#~ msgstr "Insira a URL personalizada do servidor" + +#~ msgctxt "NetplayJoin" +#~ msgid "Custom Server URL (optional):" +#~ msgstr "URL Personalizada de Servidor (opcional):" + +#~ msgctxt "NetplayJoin" +#~ msgid "Server" +#~ msgstr "Servidor" + +#~ msgctxt "NetplayWait" +#~ msgid "Ping:" +#~ msgstr "Ping:" + #~ msgctxt "NetplayCreate" #~ msgid "Creating server, please wait...This may take about 30 seconds." #~ msgstr "" diff --git a/data/translations/ru/LC_MESSAGES/gopher64.po b/data/translations/ru/LC_MESSAGES/gopher64.po index d769916..7ddeba6 100644 --- a/data/translations/ru/LC_MESSAGES/gopher64.po +++ b/data/translations/ru/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-30 16:03+0000\n" +"POT-Creation-Date: 2026-06-04 13:13+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Russian\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Пожертвовать (через GitHub)" -#: src/ui/gui/appwindow.slint:152 +#: src/ui/gui/appwindow.slint:145 msgctxt "Menu" msgid "Local Game" msgstr "Локальная игра" -#: src/ui/gui/appwindow.slint:156 +#: src/ui/gui/appwindow.slint:149 msgctxt "Menu" msgid "Controller Config" msgstr "Настройка контроллера" -#: src/ui/gui/appwindow.slint:160 +#: src/ui/gui/appwindow.slint:153 msgctxt "Menu" msgid "Netplay" msgstr "Сетевая игра" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:157 msgctxt "Menu" msgid "Cheats" msgstr "Читы" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:161 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:165 msgctxt "Menu" msgid "Settings" msgstr "Настройки" -#: src/ui/gui/appwindow.slint:176 +#: src/ui/gui/appwindow.slint:169 msgctxt "Menu" msgid "About" msgstr "О программе" @@ -192,68 +192,58 @@ msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "Сетевая игра: Создать сессию" -#: src/ui/gui/netplay_create.slint:23 +#: src/ui/gui/netplay_create.slint:22 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "Имя сессии:" -#: src/ui/gui/netplay_create.slint:27 +#: src/ui/gui/netplay_create.slint:26 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "Введите имя сессии" -#: src/ui/gui/netplay_create.slint:37 +#: src/ui/gui/netplay_create.slint:36 msgctxt "NetplayCreate" msgid "Password (Optional):" msgstr "Пароль (необязательно):" -#: src/ui/gui/netplay_create.slint:41 +#: src/ui/gui/netplay_create.slint:40 msgctxt "NetplayCreate" msgid "Enter session password" msgstr "Введите пароль сессии" -#: src/ui/gui/netplay_create.slint:52 +#: src/ui/gui/netplay_create.slint:51 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "Имя игрока:" -#: src/ui/gui/netplay_create.slint:56 +#: src/ui/gui/netplay_create.slint:55 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "Введите имя игрока" #: src/ui/gui/netplay_create.slint:66 msgctxt "NetplayCreate" -msgid "Server:" -msgstr "Сервер:" - -#: src/ui/gui/netplay_create.slint:86 -msgctxt "NetplayCreate" msgid "Select ROM" msgstr "Выбрать ROM" -#: src/ui/gui/netplay_create.slint:102 +#: src/ui/gui/netplay_create.slint:82 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." msgstr "" "Для этой игры включены читы. Читы будут синхронизированы с другими игроками." -#: src/ui/gui/netplay_create.slint:112 +#: src/ui/gui/netplay_create.slint:91 msgctxt "NetplayCreate" msgid "Create Session" msgstr "Создать сессию" -#: src/ui/gui/netplay_create.slint:132 +#: src/ui/gui/netplay_create.slint:105 msgctxt "NetplayCreate" msgid "Cancel" msgstr "Отмена" -#: src/ui/gui/netplay_create.slint:155 -msgctxt "CustomServerDialog" -msgid "Enter a custom server URL" -msgstr "Введите URL пользовательского сервера" - #: src/ui/gui/netplay_join.slint:7 msgctxt "NetplayJoin" msgid "Netplay: Join Session" @@ -274,152 +264,142 @@ msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "Пароль (если требуется)" -#: src/ui/gui/netplay_join.slint:41 -msgctxt "NetplayJoin" -msgid "Custom Server URL (optional):" -msgstr "URL пользовательского сервера (необязательно):" - -#: src/ui/gui/netplay_join.slint:53 +#: src/ui/gui/netplay_join.slint:42 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "Выбрать ROM" -#: src/ui/gui/netplay_join.slint:68 +#: src/ui/gui/netplay_join.slint:57 msgctxt "NetplayJoin" msgid "Refreshing session list, please wait..." msgstr "Обновление списка сессий, пожалуйста, подождите..." -#: src/ui/gui/netplay_join.slint:73 +#: src/ui/gui/netplay_join.slint:62 msgctxt "NetplayJoin" msgid "Click on a session below to select it" msgstr "Нажмите на сессию ниже, чтобы выбрать её" -#: src/ui/gui/netplay_join.slint:78 +#: src/ui/gui/netplay_join.slint:67 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." msgstr "Нет доступных сессий. Пожалуйста, обновите, чтобы проверить снова." -#: src/ui/gui/netplay_join.slint:84 -msgctxt "NetplayJoin" -msgid "Server" -msgstr "Сервер" - -#: src/ui/gui/netplay_join.slint:85 +#: src/ui/gui/netplay_join.slint:73 msgctxt "NetplayJoin" msgid "Session Name" msgstr "Имя сессии" -#: src/ui/gui/netplay_join.slint:86 +#: src/ui/gui/netplay_join.slint:74 msgctxt "NetplayJoin" msgid "Game Name" msgstr "Название игры" -#: src/ui/gui/netplay_join.slint:87 +#: src/ui/gui/netplay_join.slint:75 msgctxt "NetplayJoin" msgid "Password" msgstr "Пароль" -#: src/ui/gui/netplay_join.slint:88 +#: src/ui/gui/netplay_join.slint:76 msgctxt "NetplayJoin" msgid "Cheats" msgstr "Читы" -#: src/ui/gui/netplay_join.slint:102 +#: src/ui/gui/netplay_join.slint:90 msgctxt "NetplayJoin" msgid "Refresh Session List" msgstr "Обновить список сессий" -#: src/ui/gui/netplay_join.slint:119 +#: src/ui/gui/netplay_join.slint:105 msgctxt "NetplayJoin" msgid "Join Session" msgstr "Присоединиться к сессии" -#: src/ui/gui/netplay_join.slint:132 +#: src/ui/gui/netplay_join.slint:117 msgctxt "NetplayJoin" msgid "Cancel" msgstr "Отмена" -#: src/ui/gui/netplay_page.slint:37 +#: src/ui/gui/netplay_page.slint:31 msgctxt "Netplay" msgid "Netplay" msgstr "Сетевая игра" -#: src/ui/gui/netplay_page.slint:45 +#: src/ui/gui/netplay_page.slint:39 msgctxt "Netplay" msgid "Create Session" msgstr "Создать сессию" -#: src/ui/gui/netplay_page.slint:56 +#: src/ui/gui/netplay_page.slint:50 msgctxt "Netplay" msgid "Join Session" msgstr "Присоединиться к сессии" -#: src/ui/gui/netplay_page.slint:70 +#: src/ui/gui/netplay_page.slint:64 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "Канал Discord для сетевой игры" -#: src/ui/gui/netplay_page.slint:77 +#: src/ui/gui/netplay_page.slint:71 msgctxt "Netplay" msgid "Provide Feedback" msgstr "Оставить отзыв" -#: src/ui/gui/netplay_wait.slint:15 +#: src/ui/gui/netplay_wait.slint:14 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Сетевая игра: Комната ожидания" -#: src/ui/gui/netplay_wait.slint:27 +#: src/ui/gui/netplay_wait.slint:26 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Имя сессии:" -#: src/ui/gui/netplay_wait.slint:33 +#: src/ui/gui/netplay_wait.slint:32 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Название игры:" -#: src/ui/gui/netplay_wait.slint:39 -msgctxt "NetplayWait" -msgid "Ping:" -msgstr "Пинг:" - -#: src/ui/gui/netplay_wait.slint:48 +#: src/ui/gui/netplay_wait.slint:42 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Игрок 1:" -#: src/ui/gui/netplay_wait.slint:52 +#: src/ui/gui/netplay_wait.slint:46 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Игрок 2:" -#: src/ui/gui/netplay_wait.slint:58 +#: src/ui/gui/netplay_wait.slint:52 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Игрок 3:" -#: src/ui/gui/netplay_wait.slint:62 +#: src/ui/gui/netplay_wait.slint:56 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Игрок 4:" -#: src/ui/gui/netplay_wait.slint:76 +#: src/ui/gui/netplay_wait.slint:70 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Введите сообщение чата" -#: src/ui/gui/netplay_wait.slint:87 +#: src/ui/gui/netplay_wait.slint:81 msgctxt "NetplayWait" msgid "Send Message" msgstr "Отправить сообщение" -#: src/ui/gui/netplay_wait.slint:105 +#: src/ui/gui/netplay_wait.slint:98 +msgctxt "NetplayWait" +msgid "Local Input Delay:" +msgstr "Локальная задержка ввода:" + +#: src/ui/gui/netplay_wait.slint:115 msgctxt "NetplayWait" msgid "Start Game" msgstr "Начать игру" -#: src/ui/gui/netplay_wait.slint:113 +#: src/ui/gui/netplay_wait.slint:123 msgctxt "NetplayWait" msgid "Cancel" msgstr "Отмена" @@ -554,6 +534,26 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "Что вы хотите сказать?" +#~ msgctxt "NetplayCreate" +#~ msgid "Server:" +#~ msgstr "Сервер:" + +#~ msgctxt "CustomServerDialog" +#~ msgid "Enter a custom server URL" +#~ msgstr "Введите URL пользовательского сервера" + +#~ msgctxt "NetplayJoin" +#~ msgid "Custom Server URL (optional):" +#~ msgstr "URL пользовательского сервера (необязательно):" + +#~ msgctxt "NetplayJoin" +#~ msgid "Server" +#~ msgstr "Сервер" + +#~ msgctxt "NetplayWait" +#~ msgid "Ping:" +#~ msgstr "Пинг:" + #~ msgctxt "NetplayCreate" #~ msgid "Creating server, please wait...This may take about 30 seconds." #~ msgstr "" diff --git a/src/device.rs b/src/device.rs index 2dcdcc0..37f8b5a 100644 --- a/src/device.rs +++ b/src/device.rs @@ -244,7 +244,6 @@ pub struct Device { pub ai: ai::Ai, pub si: si::Si, pub ri: ri::Ri, - #[serde(skip, default = "set_rng")] pub rng: rand::rngs::Xoshiro256PlusPlus, pub vru: controller::vru::Vru, pub transferpaks: [controller::transferpak::TransferPak; 4], @@ -257,6 +256,7 @@ pub fn zero_m128i() -> __m128i { impl Device { pub fn clone_state(&mut self, device: &Device) { + self.rng.clone_from(&device.rng); self.cpu.clone_from(&device.cpu); self.pif.clone_from(&device.pif); self.cart.clone_from(&device.cart); @@ -275,7 +275,7 @@ impl Device { self.cheats.clone_from(&device.cheats); } - pub fn new(with_ui: bool) -> Device { + pub fn new(with_ui: bool) -> Box { let mut byte_swap: usize = 0; let test: [u8; 4] = [1, 2, 3, 4]; // if the host computer is little endian, that means the RDRAM will be stored as little endian @@ -283,7 +283,7 @@ impl Device { if u32::from_le_bytes(test) == u32::from_ne_bytes(test) { byte_swap = 3; } - Device { + Box::new(Device { netplay: None, ui: if with_ui { ui::Ui::new() @@ -299,7 +299,7 @@ impl Device { load_rewind: false, last_rewind_saved: 0.0, rewind_pool: std::sync::Arc::new(std::sync::Mutex::new( - std::collections::VecDeque::new(), + std::collections::BTreeMap::new(), )), }, cpu: cpu::Cpu { @@ -559,6 +559,6 @@ impl Device { boot: true, enabled: false, }, - } + }) } } diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 51389de..73476d8 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -148,7 +148,7 @@ pub fn init(device: &mut device::Device, rom_file: &[u8]) { } } -fn is_system_pal(country: u8) -> bool { +pub fn is_system_pal(country: u8) -> bool { let pal_codes: [u8; 8] = *b"DFIPSUXY"; for i in pal_codes { if country == i { diff --git a/src/device/controller.rs b/src/device/controller.rs index 7827789..1eda9e5 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -1,4 +1,4 @@ -use crate::{device, netplay, savestates, ui}; +use crate::{device, savestates, ui}; pub mod gbcart; pub mod mempak; @@ -57,11 +57,7 @@ pub fn process(device: &mut device::Device, channel: usize) { JCMD_CONTROLLER_READ => { let offset = device.pif.channels[channel].rx_buf.unwrap(); let input = if let Some(netplay) = &mut device.netplay { - if netplay.player_number as usize == channel { - let local_input = ui::input::get(&mut device.ui, 0, device.frame_counter); - netplay::send_input(netplay, local_input); - } - netplay::get_input(device, channel) + netplay.inputs[channel].0 } else { ui::input::get(&mut device.ui, channel, device.frame_counter) }; @@ -162,7 +158,7 @@ pub fn pak_switch_event(device: &mut device::Device) { if channel.change_pak != PakType::None { //stop rumble if it is on if let Some(netplay) = &device.netplay { - if netplay.player_number as usize == i { + if netplay.player_number == i { device::ui::input::set_rumble(&device.ui, 0, 0); } } else { diff --git a/src/device/controller/rumble.rs b/src/device/controller/rumble.rs index e3bc83c..2d5092f 100644 --- a/src/device/controller/rumble.rs +++ b/src/device/controller/rumble.rs @@ -17,7 +17,7 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us let rumble = device.pif.ram[data + size - 1]; if let Some(netplay) = &device.netplay { - if netplay.player_number as usize == channel { + if netplay.player_number == channel { device::ui::input::set_rumble(&device.ui, 0, rumble); } } else { diff --git a/src/device/pif.rs b/src/device/pif.rs index cb04b10..fbf1f47 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -219,7 +219,7 @@ pub fn process_ram(device: &mut device::Device) { pub fn connect_pif_channels(device: &mut device::Device) { for i in 0..4 { if let Some(netplay) = &device.netplay { - if netplay.player_data[i].reg_id != 0 { + if netplay.connected[i] { device.pif.channels[i].process = Some(device::controller::process); } } else if device.ui.config.input.controller_enabled[i] { @@ -278,7 +278,7 @@ pub fn init(device: &mut device::Device) { for i in 0..4 { if let Some(netplay) = &device.netplay { - if netplay.player_data[i].reg_id != 0 { + if netplay.connected[i] { device.pif.channels[i].pak_handler = Some(default_handler); } } else if device.ui.config.input.controller_enabled[i] { diff --git a/src/device/vi.rs b/src/device/vi.rs index f33c30d..5475a95 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -110,7 +110,15 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u let current_origin = device.vi.regs[reg as usize]; device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); if current_origin != device.vi.regs[reg as usize] { - savestates::process_savestates(device); + if let Some(netplay) = &device.netplay { + device.netplay.as_mut().unwrap().inputs = if netplay.requests.is_empty() { + netplay::process_netplay(device) + } else { + netplay::process_requests(device) + }; + } else { + savestates::process_savestates(device); + } let _ = device.ui.video.fps_tx.as_ref().unwrap().try_send(true); } } @@ -133,15 +141,10 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { retroachievements::do_frame(); - let (mut speed_limiter_toggled, paused) = ui::video::check_callback(device); + let (speed_limiter_toggled, paused) = ui::video::check_callback(device); - if let Some(netplay) = &mut device.netplay { - netplay::send_sync_check(netplay, device.cpu.cop0.regs.as_ref()); - if device.vi.enable_speed_limiter == netplay.fast_forward { - speed_limiter_toggled = true; - device.vi.enable_speed_limiter = !netplay.fast_forward; - } - } else if device.ui.config.emulation.rewind + if device.netplay.is_none() + && device.ui.config.emulation.rewind && device.vi.elapsed_time - device.savestate.last_rewind_saved > 1.0 { device.savestate.save_rewind = true; @@ -152,13 +155,17 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { reset_pace_deadline(device); } - if device.frame_counter.is_multiple_of(device.vi.limit_freq) && device.vi.enable_speed_limiter { + if (device.netplay.is_none() || netplay::pending_frames(device.netplay.as_ref().unwrap()) == 0) + && device.frame_counter.is_multiple_of(device.vi.limit_freq) + && device.vi.enable_speed_limiter + { speed_limiter(device); } unsafe { sdl3_sys::events::SDL_PumpEvents() }; - - ui::video::update_screen(); + if device.netplay.is_none() || netplay::pending_frames(device.netplay.as_ref().unwrap()) == 0 { + ui::video::update_screen(); + } device.frame_counter += 1; if device.netplay.is_none() && paused { @@ -194,9 +201,18 @@ pub fn init(device: &mut device::Device) { fn speed_limiter(device: &mut device::Device) { let mut speed_limiter_toggled = false; - let interval = + let mut interval = std::time::Duration::from_secs_f64(device.vi.frame_time * device.vi.limit_freq as f64); + if let Some(netplay) = &device.netplay { + let ahead = netplay.session.frames_ahead(); + if ahead > 0 { + interval = interval.mul_f64(1.0 + 0.05 * ahead.min(2) as f64); + } else if ahead < 0 { + interval = interval.mul_f64(1.0 - 0.05 * (-ahead).min(2) as f64); + } + } + let now = std::time::Instant::now(); match device.vi.next_pace_deadline { None => { diff --git a/src/lib.rs b/src/lib.rs index e19d7f8..fe0c6d9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -27,10 +27,14 @@ pub struct Args { pub disable_expansion_pak: Option, #[arg(long, value_name = "CHEATS_FILE", hide = true)] pub cheats: Option, - #[arg(long, value_name = "NETPLAY_PEER_ADDR", hide = true)] - pub netplay_peer_addr: Option, + #[arg(long, value_name = "NETPLAY_SERVER_ADDR", hide = true)] + pub netplay_server_addr: Option, #[arg(long, value_name = "NETPLAY_PLAYER_NUMBER", hide = true)] - pub netplay_player_number: Option, + pub netplay_player_number: Option, + #[arg(long, value_name = "NETPLAY_NUMBER_OF_PLAYERS", hide = true)] + pub netplay_number_of_players: Option, + #[arg(long, value_name = "NETPLAY_INPUT_DELAY", hide = true)] + pub netplay_input_delay: Option, #[arg( long, value_name = "PROFILE_NAME", @@ -165,10 +169,18 @@ pub async fn run(args: Args, arg_count: usize) -> std::io::Result<()> { let mut shutdown_tx = None; let mut usb_handle = None; - if let Some(peer_addr) = args.netplay_peer_addr + if let Some(server_addr) = args.netplay_server_addr && let Some(player_number) = args.netplay_player_number + && let Some(number_of_players) = args.netplay_number_of_players + && let Some(input_delay) = args.netplay_input_delay { - device.netplay = Some(netplay::init(peer_addr.parse().unwrap(), player_number)); + device.netplay = Some(netplay::init( + server_addr, + player_number, + number_of_players, + input_delay, + device::cart::rom::is_system_pal(rom_contents[0x3E]), + )); } else { for i in 0..4 { if device.ui.config.input.transfer_pak[i] @@ -195,7 +207,7 @@ pub async fn run(args: Args, arg_count: usize) -> std::io::Result<()> { { let username = args.ra_username.unwrap_or(ra_config.username.clone()); retroachievements::init_client( - if cfg!(ra_hardcore_enabled) { + if cfg!(ra_hardcore_enabled) && device.netplay.is_none() { ra_config.hardcore } else { false @@ -236,9 +248,7 @@ pub async fn run(args: Args, arg_count: usize) -> std::io::Result<()> { #[cfg(not(target_os = "android"))] retroachievements::shutdown_client(); - if device.netplay.is_some() { - netplay::close(&mut device); - } else { + if device.netplay.is_none() { for i in 0..4 { if device.ui.config.input.transfer_pak[i] && !device.ui.config.input.gb_ram_path[i].is_empty() diff --git a/src/netplay.rs b/src/netplay.rs index 63e1b0d..f4970f8 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -1,349 +1,331 @@ -use crate::{device, ui}; -use std::io::{Read, Write}; -//UDP packet formats -const UDP_SEND_KEY_INFO: u8 = 0; -const UDP_RECEIVE_KEY_INFO: u8 = 1; -const UDP_REQUEST_KEY_INFO: u8 = 2; -const UDP_RECEIVE_KEY_INFO_GRATUITOUS: u8 = 3; -const UDP_SYNC_DATA: u8 = 4; +use crate::device; +use crate::savestates; +use crate::ui; +use sha2::digest::Digest; -//TCP packet formats -const TCP_SEND_SAVE: u8 = 1; -//const TCP_RECEIVE_SAVE: u8 = 2; -//const TCP_SEND_SETTINGS: u8 = 3; -//const TCP_RECEIVE_SETTINGS: u8 = 4; -const TCP_REGISTER_PLAYER: u8 = 5; -const TCP_GET_REGISTRATION: u8 = 6; -const TCP_DISCONNECT_NOTICE: u8 = 7; -const TCP_RECEIVE_SAVE_WITH_SIZE: u8 = 8; -const TCP_SEND_RTC: u8 = 64; -const TCP_RECEIVE_RTC: u8 = 128; -const TCP_SEND_RNG: u8 = 65; -const TCP_RECEIVE_RNG: u8 = 129; +pub struct GgrsConfig; +impl ggrs::Config for GgrsConfig { + type Input = ui::input::InputData; + type InputPredictor = ggrs::PredictRepeatLast; + type State = i32; + type Address = matchbox_socket::PeerId; +} -const CS4: u32 = 32; +pub struct MatchboxSocket(matchbox_socket::WebRtcSocket); + +impl ggrs::NonBlockingSocket for MatchboxSocket { + fn send_to(&mut self, msg: &ggrs::Message, addr: &matchbox_socket::PeerId) { + let encoded = postcard::to_stdvec(msg).expect("serialization failed"); + let channel = self.0.get_channel_mut(0).unwrap(); + if channel.config().max_retransmits != Some(0) || channel.config().ordered { + eprintln!("Sending GGRS traffic over reliable channel"); + } + channel.send(encoded.into(), *addr); + } + + fn receive_all_messages(&mut self) -> Vec<(matchbox_socket::PeerId, ggrs::Message)> { + let channel = self.0.get_channel_mut(0).unwrap(); + channel + .receive() + .iter() + .filter_map(|(peer, packet)| { + let msg = postcard::from_bytes::(packet).ok()?; + Some((*peer, msg)) + }) + .collect() + } +} pub struct Netplay { - udp_socket: std::net::UdpSocket, - tcp_stream: std::net::TcpStream, - pub player_number: u8, - pub player_data: [PlayerData; 4], - vi_counter: u32, - status: u8, - buffer_target: u8, - pub fast_forward: bool, + pub session: ggrs::P2PSession, + pub reliable_channel: matchbox_socket::WebRtcChannel, + pub peers: Vec, + pub player_number: usize, + pub connected: [bool; 4], + pub data: std::collections::HashMap>, + pub inputs: Vec<(ui::input::InputData, ggrs::InputStatus)>, + pub requests: std::collections::VecDeque>, } -pub struct PlayerData { - lag: u8, - count: u32, - pub reg_id: u32, - input_events: rustc_hash::FxHashMap, +#[derive(serde::Serialize, serde::Deserialize)] +struct NetplayMessage { + name: String, + data: Vec, } -struct InputEvent { - input: u32, - plugin: u8, +fn send_message(netplay: &mut Netplay, message: NetplayMessage) { + let data = postcard::to_stdvec(&message).unwrap(); + for peer in netplay.peers.iter() { + netplay.reliable_channel.send(data.clone().into(), *peer); + } +} + +fn receive_message(netplay: &mut Netplay, name: &str) -> Vec { + while !netplay.data.contains_key(name) { + let messages = netplay.reliable_channel.receive(); + for (_, data) in messages { + let message = postcard::from_bytes::(&data).unwrap(); + netplay.data.insert(message.name, message.data); + } + std::thread::sleep(std::time::Duration::from_millis(1)); + } + netplay.data.remove(name).unwrap() +} + +fn send_player_number( + channel: &mut matchbox_socket::WebRtcChannel, + peers: Vec, + player_number: usize, +) { + let message = NetplayMessage { + name: "player_number".to_string(), + data: player_number.to_be_bytes().to_vec(), + }; + let data = postcard::to_stdvec(&message).unwrap(); + for peer in peers { + channel.send(data.clone().into(), peer); + } +} + +fn get_player_numbers( + channel: &mut matchbox_socket::WebRtcChannel, + local_player_number: usize, + number_of_peers: usize, +) -> std::collections::BTreeMap> { + let mut player_numbers = std::collections::BTreeMap::new(); + player_numbers.insert(local_player_number, None); + while player_numbers.len() < number_of_peers + 1 { + for (peer, data) in channel.receive() { + let message = postcard::from_bytes::(&data).unwrap(); + if message.name == "player_number" { + player_numbers.insert( + usize::from_be_bytes(message.data.try_into().unwrap()), + Some(peer), + ); + } + } + std::thread::sleep(std::time::Duration::from_millis(1)); + } + player_numbers } pub fn send_rtc(netplay: &mut Netplay, rtc: i64) { - let mut request: Vec = [TCP_SEND_RTC].to_vec(); - let size: u32 = 8; - request.extend_from_slice(&size.to_be_bytes()); - request.extend_from_slice(&rtc.to_be_bytes()); - netplay.tcp_stream.write_all(&request).unwrap(); + let message = NetplayMessage { + name: "rtc".to_string(), + data: rtc.to_be_bytes().to_vec(), + }; + send_message(netplay, message); } pub fn receive_rtc(netplay: &mut Netplay) -> i64 { - let request: Vec = [TCP_RECEIVE_RTC].to_vec(); - netplay.tcp_stream.write_all(&request).unwrap(); - let mut rtc: [u8; 8] = [0; 8]; - netplay.tcp_stream.read_exact(&mut rtc).unwrap(); - i64::from_be_bytes(rtc) + let message = receive_message(netplay, "rtc"); + + i64::from_be_bytes(message.try_into().unwrap()) } pub fn send_rng(netplay: &mut Netplay, seed: u64) { - let mut request: Vec = [TCP_SEND_RNG].to_vec(); - let size: u32 = 8; - request.extend_from_slice(&size.to_be_bytes()); - request.extend_from_slice(&seed.to_be_bytes()); - netplay.tcp_stream.write_all(&request).unwrap(); + let message = NetplayMessage { + name: "rng".to_string(), + data: seed.to_be_bytes().to_vec(), + }; + send_message(netplay, message); } pub fn receive_rng(netplay: &mut Netplay) -> u64 { - let request: Vec = [TCP_RECEIVE_RNG].to_vec(); - netplay.tcp_stream.write_all(&request).unwrap(); - let mut seed: [u8; 8] = [0; 8]; - netplay.tcp_stream.read_exact(&mut seed).unwrap(); - u64::from_be_bytes(seed) + let message = receive_message(netplay, "rng"); + u64::from_be_bytes(message.try_into().unwrap()) } -pub fn send_save(netplay: &mut Netplay, save_type: &str, save_data: &[u8], size: usize) { - let mut request: Vec = [TCP_SEND_SAVE].to_vec(); - request.extend_from_slice(save_type.as_bytes()); - request.push(0); // null terminate string - request.extend_from_slice(&(size as u32).to_be_bytes()); - - if size > 0 { - request.extend_from_slice(save_data); - } - netplay.tcp_stream.write_all(&request).unwrap(); +pub fn send_save(netplay: &mut Netplay, save_type: &str, save_data: &[u8]) { + let message = NetplayMessage { + name: save_type.to_string(), + data: save_data.to_vec(), + }; + send_message(netplay, message); } pub fn receive_save(netplay: &mut Netplay, save_type: &str, save_data: &mut Vec) { - let mut request: Vec = [TCP_RECEIVE_SAVE_WITH_SIZE].to_vec(); - request.extend_from_slice(save_type.as_bytes()); - request.push(0); // null terminate string - netplay.tcp_stream.write_all(&request).unwrap(); - - let mut size: [u8; 4] = [0; 4]; - netplay.tcp_stream.read_exact(&mut size).unwrap(); - let mut response: Vec = vec![0; u32::from_be_bytes(size) as usize]; - netplay.tcp_stream.read_exact(&mut response).unwrap(); - *save_data = response; + let message = receive_message(netplay, save_type); + *save_data = message; } -pub fn send_sync_check(netplay: &mut Netplay, regs: &[u64]) { - if netplay.vi_counter.is_multiple_of(600) { - let mut request: Vec = [UDP_SYNC_DATA].to_vec(); - request.extend_from_slice(&(netplay.vi_counter).to_be_bytes()); - - for item in regs.iter() { - request.extend_from_slice(&(*item as u32).to_be_bytes()); - } - - netplay.udp_socket.send(&request).unwrap(); - } - netplay.vi_counter = netplay.vi_counter.wrapping_add(1); -} - -pub fn send_input(netplay: &Netplay, input: ui::input::InputData) { - let mut request: Vec = [UDP_SEND_KEY_INFO].to_vec(); - request.push(netplay.player_number); - request.extend_from_slice( - &(netplay.player_data[netplay.player_number as usize].count).to_be_bytes(), - ); - request.extend_from_slice(&(input.data).to_be_bytes()); - request.push(input.pak_change_pressed as u8); - netplay.udp_socket.send(&request).unwrap(); -} - -pub fn get_input(device: &mut device::Device, channel: usize) -> ui::input::InputData { - let netplay = device.netplay.as_mut().unwrap(); - let mut input = None; - - let timeout = std::time::Instant::now() + std::time::Duration::from_secs(10); - let mut request_timer = std::time::Instant::now() - std::time::Duration::from_millis(5); - while input.is_none() { - process_incoming(netplay); // we execute process_incoming before request_input so that we send an accurate buffer count - if std::time::Instant::now() > request_timer { - // sends a request packet every 5ms - request_input(netplay, channel); - request_timer = std::time::Instant::now() + std::time::Duration::from_millis(5); - } - input = netplay.player_data[channel] - .input_events - .remove(&netplay.player_data[channel].count); - - if std::time::Instant::now() > timeout { - ui::video::onscreen_message( - "Lost connection to netplay server", - ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, - ); - input = Some(InputEvent { - input: 0, - plugin: 0, - }); - device.cpu.running = false; - } - } - - netplay.fast_forward = netplay.player_data[channel].lag > 0 - && netplay.player_data[channel].input_events.len() as u8 > netplay.buffer_target; - - netplay.player_data[channel].count = netplay.player_data[channel].count.wrapping_add(1); - ui::input::InputData { - data: input.as_ref().unwrap().input, - pak_change_pressed: input.as_ref().unwrap().plugin != 0, - } -} - -fn request_input(netplay: &Netplay, channel: usize) { - let mut request: Vec = [UDP_REQUEST_KEY_INFO].to_vec(); - request.push(channel as u8); //The player we need input for - request.extend_from_slice( - &(netplay.player_data[netplay.player_number as usize].reg_id).to_be_bytes(), - ); - request.extend_from_slice(&(netplay.player_data[channel].count).to_be_bytes()); - request.push(0); //spectator mode - request.push(netplay.player_data[channel].input_events.len() as u8); - netplay.udp_socket.send(&request).unwrap(); -} - -fn process_incoming(netplay: &mut Netplay) { - let mut buf: [u8; 1024] = [0; 1024]; - while netplay.udp_socket.recv(&mut buf).is_ok() { - match buf[0] { - UDP_RECEIVE_KEY_INFO | UDP_RECEIVE_KEY_INFO_GRATUITOUS => { - let player = buf[1] as usize; - //current_status is a status update from the server - //it will let us know if another player has disconnected, or the games have desynced - let current_status = buf[2]; - if buf[0] == UDP_RECEIVE_KEY_INFO { - netplay.player_data[player].lag = buf[3]; - } - if current_status != netplay.status { - if ((current_status & 0x1) ^ (netplay.status & 0x1)) != 0 { - ui::video::onscreen_message( - "Netplay desync detected", - ui::video::MESSAGE_LENGTH_MESSAGE_LONG, - ); - } - for dis in 1..5 { - if ((current_status & (0x1 << dis)) ^ (netplay.status & (0x1 << dis))) != 0 - { - ui::video::onscreen_message( - &format!("Player {dis} disconnected"), - ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, - ); - } - } - netplay.status = current_status; - } - - let mut buffer_offset = 5; - for _i in 0..buf[4] { - let count = u32::from_be_bytes( - buf[buffer_offset..buffer_offset + 4].try_into().unwrap(), - ); - buffer_offset += 4; - - if (count.wrapping_sub(netplay.player_data[player].count)) > (u32::MAX / 2) { - //event doesn't need to be recorded - buffer_offset += 5; - continue; - } - - let input = u32::from_be_bytes( - buf[buffer_offset..buffer_offset + 4].try_into().unwrap(), - ); - buffer_offset += 4; - let plugin = buf[buffer_offset]; - buffer_offset += 1; - let input_event = InputEvent { input, plugin }; - netplay.player_data[player] - .input_events - .insert(count, input_event); - } - } - _ => { - panic!("unknown UDP packet") - } - } - } -} - -pub fn init(peer_addr: std::net::SocketAddr, player_number: u8) -> Netplay { - let udp_socket; - if peer_addr.is_ipv4() { - udp_socket = std::net::UdpSocket::bind((std::net::Ipv4Addr::UNSPECIFIED, 0)) - .expect("couldn't bind to address"); - socket2::SockRef::from(&udp_socket) - .set_tos_v4(CS4 << 2) - .unwrap(); - } else { - udp_socket = std::net::UdpSocket::bind((std::net::Ipv6Addr::UNSPECIFIED, 0)) - .expect("couldn't bind to address"); - #[cfg(not(target_os = "windows"))] - socket2::SockRef::from(&udp_socket) - .set_tclass_v6(CS4 << 2) - .unwrap(); - }; - - udp_socket.connect(peer_addr).unwrap(); - udp_socket.set_nonblocking(true).unwrap(); - - let mut stream = std::net::TcpStream::connect(peer_addr).unwrap(); - - let regid = (player_number + 1) as u32; - let mut request: [u8; 8] = [ - TCP_REGISTER_PLAYER, - player_number, - 0, //plugin/pak - 0, //rawdata - 0, //regid (u32) - 0, //regid (u32) - 0, //regid (u32) - 0, //regid (u32) - ]; - - request[4..8].copy_from_slice(®id.to_be_bytes()); - stream.write_all(&request).unwrap(); - - let mut response: [u8; 2] = [0, 0]; - stream.read_exact(&mut response).unwrap(); - if response[0] != 1 { - panic!("Failed to register player"); - } - let buffer_target = response[1]; - - let request: [u8; 1] = [TCP_GET_REGISTRATION]; - stream.write_all(&request).unwrap(); - let mut response: [u8; 24] = [0; 24]; - stream.read_exact(&mut response).unwrap(); - - let mut reg_id: [u32; 4] = [0; 4]; - for i in 0..4 { - // reg_id of 0 means no player connected - reg_id[i] = u32::from_be_bytes(response[(i * 6)..(i * 6) + 4].try_into().unwrap()); - } - Netplay { - udp_socket, - tcp_stream: stream, - player_number, - vi_counter: 0, - status: 0, - buffer_target, - fast_forward: false, - player_data: [ - PlayerData { - lag: 0, - count: 0, - reg_id: reg_id[0], - input_events: rustc_hash::FxHashMap::default(), - }, - PlayerData { - lag: 0, - count: 0, - reg_id: reg_id[1], - input_events: rustc_hash::FxHashMap::default(), - }, - PlayerData { - lag: 0, - count: 0, - reg_id: reg_id[2], - input_events: rustc_hash::FxHashMap::default(), - }, - PlayerData { - lag: 0, - count: 0, - reg_id: reg_id[3], - input_events: rustc_hash::FxHashMap::default(), - }, - ], - } -} - -pub fn close(device: &mut device::Device) { - let netplay = device.netplay.as_mut().unwrap(); - let regid = (netplay.player_number + 1) as u32; - let mut request: [u8; 5] = [TCP_DISCONNECT_NOTICE, 0, 0, 0, 0]; - request[1..5].copy_from_slice(®id.to_be_bytes()); - - netplay.tcp_stream.write_all(&request).unwrap(); - netplay.tcp_stream.flush().unwrap(); +pub fn pending_frames(netplay: &Netplay) -> usize { netplay - .tcp_stream - .shutdown(std::net::Shutdown::Both) - .unwrap(); + .requests + .iter() + .filter(|r| matches!(r, ggrs::GgrsRequest::AdvanceFrame { .. })) + .count() +} + +pub fn process_requests( + device: &mut device::Device, +) -> Vec<(ui::input::InputData, ggrs::InputStatus)> { + loop { + if let Some(request) = device.netplay.as_mut().unwrap().requests.pop_front() { + match request { + ggrs::GgrsRequest::SaveGameState { cell, frame } => { + savestates::create_savestate(device, true, Some(frame)); + + let mut hasher = sha2::Sha256::new(); + for reg in device.cpu.cop0.regs.as_ref() { + hasher.update(reg.to_be_bytes()); + } + let hash = u128::from_be_bytes(hasher.finalize()[..16].try_into().unwrap()); + cell.save(frame, Some(frame), Some(hash)); + } + ggrs::GgrsRequest::LoadGameState { cell, frame: _ } => { + if let Some(frame) = cell.load() { + savestates::load_savestate(device, true, Some(frame)); + } + } + ggrs::GgrsRequest::AdvanceFrame { inputs } => { + return inputs; + } + } + } else { + let netplay = device.netplay.as_mut().unwrap(); + netplay.session.poll_remote_clients(); + advance_frame(device); + } + } +} + +pub fn process_netplay( + device: &mut device::Device, +) -> Vec<(ui::input::InputData, ggrs::InputStatus)> { + let netplay = device.netplay.as_mut().unwrap(); + + netplay.session.poll_remote_clients(); + for event in netplay.session.events() { + match event { + ggrs::GgrsEvent::Synchronizing { .. } => {} + ggrs::GgrsEvent::Synchronized { .. } => {} + ggrs::GgrsEvent::Disconnected { .. } => { + ui::video::onscreen_message( + "Peer disconnected", + ui::video::MESSAGE_LENGTH_MESSAGE_LONG, + ); + } + ggrs::GgrsEvent::NetworkInterrupted { .. } => { + println!("network interrupted"); + } + ggrs::GgrsEvent::NetworkResumed { .. } => { + println!("network resumed"); + } + ggrs::GgrsEvent::WaitRecommendation { skip_frames } => { + println!("wait recommendation: skip_frames={}", skip_frames); + } + ggrs::GgrsEvent::DesyncDetected { .. } => { + ui::video::onscreen_message( + "Desync detected", + ui::video::MESSAGE_LENGTH_MESSAGE_LONG, + ); + } + } + } + + advance_frame(device); + process_requests(device) +} + +fn advance_frame(device: &mut device::Device) { + let netplay = device.netplay.as_mut().unwrap(); + let local_input = ui::input::get(&mut device.ui, 0, device.frame_counter); + let local_handle = *netplay.session.local_player_handles().first().unwrap(); + netplay + .session + .add_local_input(local_handle, local_input) + .unwrap(); + match netplay.session.advance_frame() { + Ok(requests) => { + netplay.requests.extend(requests); + } + Err(ggrs::GgrsError::PredictionThreshold) => { + println!("prediction threshold reached"); + } + Err(e) => panic!("{e}"), + } +} + +pub fn init( + server_addr: String, + player_number: usize, + number_of_players: usize, + input_delay: usize, + pal: bool, +) -> Netplay { + let (socket, loop_fut) = matchbox_socket::WebRtcSocketBuilder::new(server_addr) + .add_unreliable_channel() + .add_reliable_channel() + .build(); + tokio::spawn(async move { + if let Err(e) = loop_fut.await { + eprintln!("WebRTC loop failed: {}", e); + } + }); + let mut matchbox_socket = MatchboxSocket(socket); + let mut reliable_channel = matchbox_socket.0.take_channel(1).unwrap(); + let now = std::time::Instant::now(); + let timeout = std::time::Duration::from_secs(10); + let mut peers = vec![]; + let mut session_builder = ggrs::SessionBuilder::::new(); + loop { + matchbox_socket.0.update_peers(); + peers = matchbox_socket + .0 + .connected_peers() + .collect::>(); + if peers.len() == number_of_players - 1 { + send_player_number(&mut reliable_channel, peers.clone(), player_number); + let player_numbers = + get_player_numbers(&mut reliable_channel, player_number, peers.len()); + session_builder = session_builder + .with_num_players(number_of_players) + .unwrap() + .with_input_delay(input_delay) + .with_fps(if pal { 50 } else { 60 }) + .unwrap() + .with_desync_detection_mode(ggrs::DesyncDetection::On { interval: 60 }); + for (i, peer) in player_numbers.iter() { + if let Some(peer) = peer { + session_builder = session_builder + .add_player(ggrs::PlayerType::Remote(*peer), *i) + .unwrap(); + } else { + session_builder = session_builder + .add_player(ggrs::PlayerType::Local, *i) + .unwrap(); + } + } + + break; + } + if now.elapsed() > timeout { + break; + } + std::thread::sleep(std::time::Duration::from_millis(10)); + } + let mut session = session_builder.start_p2p_session(matchbox_socket).unwrap(); + + let now = std::time::Instant::now(); + while session.current_state() != ggrs::SessionState::Running && now.elapsed() < timeout { + session.poll_remote_clients(); + std::thread::sleep(std::time::Duration::from_millis(10)); + } + + Netplay { + session, + reliable_channel, + peers, + player_number, + connected: [ + number_of_players > 0, + number_of_players > 1, + number_of_players > 2, + number_of_players > 3, + ], + data: std::collections::HashMap::new(), + inputs: Vec::new(), + requests: std::collections::VecDeque::new(), + } } diff --git a/src/savestates.rs b/src/savestates.rs index c483135..efd90f6 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -78,17 +78,18 @@ pub struct Savestate { pub load_rewind: bool, pub last_rewind_saved: f64, #[serde(skip)] - pub rewind_pool: std::sync::Arc>>, + pub rewind_pool: + std::sync::Arc>>, } pub struct SavestateData { - device: device::Device, + device: Box, saves: ui::storage::Saves, rdp_state: Vec, ra_state: Vec, } -static DEVICE_CLONE: std::sync::LazyLock> = +static DEVICE_CLONE: std::sync::LazyLock>> = std::sync::LazyLock::new(|| std::sync::Mutex::new(device::Device::new(false))); static SAVES_CLONE: std::sync::LazyLock> = @@ -101,16 +102,16 @@ pub fn process_savestates(device: &mut device::Device) { device.savestate.save_rewind = false; } device.savestate.save_state = false; - create_savestate(device, rewind); + create_savestate(device, rewind, None); } else if device.savestate.load_state || device.savestate.load_rewind { device.savestate.load_state = false; let rewind = device.savestate.load_rewind; device.savestate.load_rewind = false; - load_savestate(device, rewind); + load_savestate(device, rewind, None); } } -fn create_savestate(device: &mut device::Device, rewind: bool) { +pub fn create_savestate(device: &mut device::Device, rewind: bool, rewind_frame: Option) { if !rewind { // skipped on rewind as a speed hack ui::video::hard_sync(); // to flush the RDP so the RDRAM is updated @@ -148,14 +149,24 @@ fn create_savestate(device: &mut device::Device, rewind: bool) { let mut state = device::Device::new(false); state.clone_state(device_clone.deref()); if let Ok(mut pool) = rewind_pool.lock() { - pool.push_back(SavestateData { - device: state, - saves: saves_clone.clone(), - rdp_state, - ra_state, - }); + let key = if let Some(key) = rewind_frame { + key + } else if let Some(key) = pool.keys().last() { + key + 1 + } else { + 0 + }; + pool.insert( + key, + SavestateData { + device: state, + saves: saves_clone.clone(), + rdp_state, + ra_state, + }, + ); if pool.len() > 30 { - pool.pop_front(); + pool.pop_first(); } } } else { @@ -195,7 +206,7 @@ fn create_savestate(device: &mut device::Device, rewind: bool) { }); } -fn load_savestate(device: &mut device::Device, rewind: bool) { +pub fn load_savestate(device: &mut device::Device, rewind: bool, rewind_frame: Option) { if retroachievements::get_hardcore() { ui::video::onscreen_message( "Cannot load savestate in RA hardcore mode", @@ -206,7 +217,13 @@ fn load_savestate(device: &mut device::Device, rewind: bool) { let state_data = if rewind { if let Ok(mut pool) = device.savestate.rewind_pool.lock() { - pool.pop_back() + if let Some(rewind_frame) = rewind_frame { + pool.remove(&rewind_frame) + } else if let Some((_key, state)) = pool.pop_last() { + Some(state) + } else { + None + } } else { None } @@ -220,7 +237,7 @@ fn load_savestate(device: &mut device::Device, rewind: bool) { && let Ok(saves) = postcard::from_bytes(&saves_data) { Some(SavestateData { - device: *state, + device: state, saves, rdp_state, ra_state, @@ -232,10 +249,15 @@ fn load_savestate(device: &mut device::Device, rewind: bool) { if let Some(mut state) = state_data && device.rdram.size == state.device.rdram.size { - ui::video::hard_sync(); // to flush the RDP so it doesn't overwrite the RDRAM + if device.netplay.is_none() { + // skipped for netplay as a speed hack + ui::video::hard_sync(); // to flush the RDP so it doesn't overwrite the RDRAM + } device.savestate.last_rewind_saved = state.device.vi.elapsed_time; + std::mem::swap(&mut device.rng, &mut state.device.rng); + std::mem::swap(&mut device.ui.storage.saves, &mut state.saves); std::mem::swap(&mut device.cpu, &mut state.device.cpu); diff --git a/src/ui/android.rs b/src/ui/android.rs index f5b49d3..2c5a251 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -280,10 +280,17 @@ fn start_run_rom_on_jvm( ]; if let Some(netplay) = netplay { - args.push(JString::from_str(env, "--netplay-peer-addr")?); - args.push(JString::from_str(env, &netplay.peer_addr.to_string())?); + args.push(JString::from_str(env, "--netplay-server-addr")?); + args.push(JString::from_str(env, &netplay.server_addr)?); args.push(JString::from_str(env, "--netplay-player-number")?); args.push(JString::from_str(env, &netplay.player_number.to_string())?); + args.push(JString::from_str(env, "--netplay-number-of-players")?); + args.push(JString::from_str( + env, + &netplay.number_of_players.to_string(), + )?); + args.push(JString::from_str(env, "--netplay-input-delay")?); + args.push(JString::from_str(env, &netplay.input_delay.to_string())?); args.push(JString::from_str(env, "--cheats")?); args.push(JString::from_str(env, cheats_path.to_str().unwrap())?); diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 0ab046b..4226872 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -1,4 +1,5 @@ use crate::device; +use crate::netplay; use crate::ui; static ADJUST_LOCKED: std::sync::atomic::AtomicBool = std::sync::atomic::AtomicBool::new(false); @@ -173,6 +174,11 @@ pub fn play_audio(device: &device::Device, dram_addr: usize, length: u64) { if device.ui.audio.audio_stream.is_null() { return; } + if let Some(netplay) = &device.netplay + && netplay::pending_frames(netplay) != 0 + { + return; + } let mut primary_buffer: Vec = vec![0; length as usize / 2]; let mut i = 0; diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 636d256..c7d5268 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -19,8 +19,10 @@ struct GithubData { } pub struct NetplayDevice { - pub peer_addr: std::net::SocketAddr, - pub player_number: u8, + pub server_addr: String, + pub player_number: usize, + pub number_of_players: usize, + pub input_delay: i32, } fn check_latest_version(weak: slint::Weak) { @@ -576,10 +578,14 @@ pub fn run_rom( serde_json::to_writer_pretty(f, &game_settings.cheats).unwrap(); command.args([ - "--netplay-peer-addr", - &netplay_device.peer_addr.to_string(), + "--netplay-server-addr", + &netplay_device.server_addr, "--netplay-player-number", &netplay_device.player_number.to_string(), + "--netplay-number-of-players", + &netplay_device.number_of_players.to_string(), + "--netplay-input-delay", + &netplay_device.input_delay.to_string(), "--cheats", cheats_path.to_str().unwrap(), ]); diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index a4261b2..bc9b219 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -13,7 +13,7 @@ import { CheatsData } from "cheat_page.slint"; import { InputProfileDialog, InputProfileData } from "input_profile.slint"; import { NetplayData } from "netplay_page.slint"; export { VruDialog } from "vru_dialog.slint"; -import { NetplayCreate, CustomServerDialog } from "netplay_create.slint"; +import { NetplayCreate } from "netplay_create.slint"; import { NetplayJoin } from "netplay_join.slint"; import { NetplayWait, NetplayWaitData } from "netplay_wait.slint"; @@ -37,10 +37,9 @@ export component AppWindow inherits Window { callback netplay_begin_game; callback netplay_send_chat_message(string); callback netplay_refresh_sessions; - callback netplay_create_session(string, string, string, string, string, string, string); - callback netplay_get_custom_url; + callback netplay_create_session(string, string, string, string, string, string); callback netplay_select_rom(string); - callback netplay_join_session(string, string, string, string, int); + callback netplay_join_session(string, string, string, string); callback netplay_close; callback cheats_select_rom_clicked(string); callback cheats_clear_clicked; @@ -99,31 +98,25 @@ export component AppWindow inherits Window { in-out property input_dinput <=> InputProfileData.dinput; in-out property show_input_profile <=> InputProfileData.show_input_profile; - in-out property show_netplay_wait_room <=> NetplayData.show_wait_room; - in-out property show_netplay_create_room <=> NetplayData.show_create_room; - in-out property show_netplay_join_room <=> NetplayData.show_join_room; + in-out property show_netplay_wait_session <=> NetplayData.show_wait_session; + in-out property show_netplay_create_session <=> NetplayData.show_create_session; + in-out property show_netplay_join_session <=> NetplayData.show_join_session; - in-out property netplay_server_names <=> NetplayData.server_names; - in-out property netplay_server_urls <=> NetplayData.server_urls; - in-out property netplay_custom_server_url <=> NetplayData.custom_server_url; in-out property netplay_game_name <=> NetplayData.game_name; in-out property netplay_game_hash <=> NetplayData.game_hash; in-out property netplay_game_cheats <=> NetplayData.game_cheats; in-out property netplay_pending_session <=> NetplayData.pending_session; in-out property netplay_rom_path <=> NetplayData.rom_path; - in-out property netplay_peer_addr <=> NetplayData.peer_addr; - in-out property netplay_room_urls <=> NetplayData.room_urls; - in-out property netplay_room_ports <=> NetplayData.room_ports; in-out property netplay_current_session <=> NetplayData.current_session; in-out property netplay_sessions <=> NetplayData.sessions; in-out property netplay_pending_refresh <=> NetplayData.pending_refresh; in-out property netplay_session_name <=> NetplayData.session_name; - in-out property netplay_port <=> NetplayWaitData.port; - in-out property netplay_ping <=> NetplayWaitData.ping; + in-out property netplay_player_name <=> NetplayData.player_name; in-out property netplay_motd <=> NetplayWaitData.motd; in-out property netplay_can_start <=> NetplayWaitData.can_start; in-out property netplay_players <=> NetplayWaitData.players; in-out property netplay_chat_text <=> NetplayWaitData.chat_text; + in-out property netplay_input_delay <=> NetplayWaitData.input_delay; private property popup_message; private property popup_has_close; @@ -225,7 +218,7 @@ export component AppWindow inherits Window { input_profile_creation_button_clicked(); } } - if(side-bar.current-item == 2 && !show_netplay_wait_room && !show_netplay_create_room && !show_netplay_join_room): Netplay { + if(side-bar.current-item == 2 && !show_netplay_wait_session && !show_netplay_create_session && !show_netplay_join_session): Netplay { width: 100%; height: 100%; create_session_button_clicked => { @@ -241,7 +234,7 @@ export component AppWindow inherits Window { netplay_feedback_button_clicked(); } } - if(side-bar.current-item == 2 && show_netplay_wait_room): NetplayWait { + if(side-bar.current-item == 2 && show_netplay_wait_session): NetplayWait { width: 100%; height: 100%; send_chat_message(message) => { @@ -254,23 +247,20 @@ export component AppWindow inherits Window { netplay_close(); } } - if(side-bar.current-item == 2 && show_netplay_create_room && !show_netplay_wait_room): NetplayCreate { + if(side-bar.current-item == 2 && show_netplay_create_session && !show_netplay_wait_session): NetplayCreate { width: 100%; height: 100%; - get_custom_url => { - netplay_get_custom_url(); - } select_rom(rom_dir) => { netplay_select_rom(rom_dir); } - create_session(a, b, c, d, e, f, g) => { - netplay_create_session(a,b,c,d,e,f,g); + create_session(a, b, c, d, e, f) => { + netplay_create_session(a,b,c,d,e,f); } close => { netplay_close(); } } - if(side-bar.current-item == 2 && show_netplay_join_room && !show_netplay_wait_room): NetplayJoin { + if(side-bar.current-item == 2 && show_netplay_join_session && !show_netplay_wait_session): NetplayJoin { width: 100%; height: 100%; refresh_sessions => { @@ -279,8 +269,8 @@ export component AppWindow inherits Window { select_rom(rom_dir) => { netplay_select_rom(rom_dir); } - join_session(a, b, c, d, e) => { - netplay_join_session(a,b,c,d,e); + join_session(a, b, c, d) => { + netplay_join_session(a,b,c,d); } close => { netplay_close(); @@ -371,15 +361,6 @@ export component AppWindow inherits Window { height: content-area.height; width: content-area.width; } - customserverdialog := CustomServerDialog{ - x: content-area.x; - y: content-area.y; - height: content-area.height; - width: content-area.width; - } - } - public function show_custom_server_dialog() { - customserverdialog.show(); } public function show_message(message: string, has_close: bool) { popup_message = message; @@ -394,7 +375,6 @@ export component AppWindow inherits Window { NetplayData.game_name = ""; NetplayData.password = ""; NetplayData.session_name = ""; - NetplayData.custom_server_url = ""; NetplayWaitData.chat_text = ""; NetplayData.pending_session = false; NetplayData.pending_refresh = false; diff --git a/src/ui/gui/netplay_create.slint b/src/ui/gui/netplay_create.slint index 7e8887b..aaf1624 100644 --- a/src/ui/gui/netplay_create.slint +++ b/src/ui/gui/netplay_create.slint @@ -5,9 +5,8 @@ import { Page } from "page.slint"; export component NetplayCreate inherits Page { title: @tr("Netplay: Create Session"); - callback get_custom_url(); callback select_rom(string); - callback create_session(string, string, string, string, string, string, string); + callback create_session(string, string, string, string, string, string); callback close; VerticalBox { @@ -61,25 +60,6 @@ export component NetplayCreate inherits Page { } } - VerticalBox { - Text { - text: @tr("Server:"); - } - - HorizontalBox { - server := ComboBox { - model: NetplayData.server_names; - selected => { - if (self.current-index >= 0) { - if (self.current-value == "Custom") { - get_custom_url(); - } - } - } - } - } - } - HorizontalBox { alignment: center; if NetplayData.game_name == "": Button { @@ -108,18 +88,11 @@ export component NetplayCreate inherits Page { HorizontalBox { alignment: center; Button { - property server_url; text: @tr("Create Session"); enabled: NetplayData.session_name != "" && NetplayData.player_name != "" && NetplayData.game_name != "" && !NetplayData.pending_session; clicked => { NetplayData.pending_session = true; - if (server.current-value == "Custom") { - server_url = "ws://" + NetplayData.custom_server_url; - } else { - server_url = NetplayData.server_urls[server.current-index]; - } create_session( - server_url, NetplayData.session_name, NetplayData.player_name, NetplayData.game_name, @@ -140,43 +113,3 @@ export component NetplayCreate inherits Page { } } } - -export component CustomServerDialog inherits PopupWindow { - close-policy: no-auto-close; - Rectangle { - height:100%; - width: 100%; - background: Palette.background; - VerticalBox { - alignment: center; - HorizontalBox{ - alignment: center; - Text { - text: @tr("Enter a custom server URL"); - } - } - HorizontalBox { - alignment: center; - vertical-stretch: 0; - LineEdit { - vertical-stretch: 0; - text: NetplayData.custom_server_url; - placeholder-text: "example.com:45000"; - preferred-width: 300px; - edited(text) => { - NetplayData.custom_server_url = text; - } - } - } - HorizontalBox{ - alignment: center; - StandardButton { - kind: ok; - clicked() => { - root.close(); - } - } - } - } - } -} diff --git a/src/ui/gui/netplay_join.slint b/src/ui/gui/netplay_join.slint index bf59b08..25fe667 100644 --- a/src/ui/gui/netplay_join.slint +++ b/src/ui/gui/netplay_join.slint @@ -7,7 +7,7 @@ export component NetplayJoin inherits Page { title: @tr("Netplay: Join Session"); callback refresh_sessions(); callback select_rom(string); - callback join_session(string, string, string, string, int); + callback join_session(string, string, string, string); callback close; VerticalBox { @@ -37,18 +37,7 @@ export component NetplayJoin inherits Page { } VerticalBox { - Text { - text: @tr("Custom Server URL (optional):"); - } - - LineEdit { - placeholder-text: "example.com:45000"; - text: NetplayData.custom_server_url; - edited(text) => { - NetplayData.custom_server_url = text; - } - } - + Rectangle {} if NetplayData.game_name == "": Button { text: @tr("Select ROM"); clicked => { @@ -81,7 +70,6 @@ export component NetplayJoin inherits Page { } StandardTableView { columns: [ - { title: @tr("Server") }, { title: @tr("Session Name") }, { title: @tr("Game Name") }, { title: @tr("Password") }, @@ -104,8 +92,6 @@ export component NetplayJoin inherits Page { NetplayData.pending_refresh = true; NetplayData.current_session = -1; NetplayData.sessions = []; - NetplayData.room_urls = []; - NetplayData.room_ports = []; refresh_sessions(); } } @@ -121,11 +107,10 @@ export component NetplayJoin inherits Page { clicked => { NetplayData.pending_session = true; join_session( + NetplayData.sessions[NetplayData.current_session][0].text, NetplayData.player_name, NetplayData.game_hash, - NetplayData.password, - NetplayData.room_urls[NetplayData.current_session], - NetplayData.room_ports[NetplayData.current_session]); + NetplayData.password); } } Button { diff --git a/src/ui/gui/netplay_page.slint b/src/ui/gui/netplay_page.slint index 5b8f140..6709548 100644 --- a/src/ui/gui/netplay_page.slint +++ b/src/ui/gui/netplay_page.slint @@ -6,27 +6,21 @@ import { Page } from "page.slint"; import { State } from "localgame_page.slint"; export global NetplayData { - in-out property <[string]> server_names; - in-out property <[string]> server_urls; in-out property player_name; in-out property game_name; in-out property game_hash; in-out property game_cheats; in-out property rom_path; in-out property password; - in-out property peer_addr; in-out property pending_session; in-out property pending_refresh; in-out property session_name; in-out property <[[StandardListViewItem]]> sessions; - in-out property <[string]> room_urls; - in-out property <[int]> room_ports; in-out property current_session: -1; - in-out property custom_server_url; - in-out property show_wait_room; - in-out property show_create_room; - in-out property show_join_room; + in-out property show_wait_session; + in-out property show_create_session; + in-out property show_join_session; } export component Netplay inherits Page { diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint index defc40c..298bff4 100644 --- a/src/ui/gui/netplay_wait.slint +++ b/src/ui/gui/netplay_wait.slint @@ -1,14 +1,13 @@ -import { VerticalBox, HorizontalBox, TextEdit, LineEdit, Button, GridBox, ScrollView } from "std-widgets.slint"; +import { VerticalBox, HorizontalBox, TextEdit, ComboBox, GroupBox, LineEdit, Button, GridBox, ScrollView } from "std-widgets.slint"; import { NetplayData } from "netplay_page.slint"; import { Page } from "page.slint"; export global NetplayWaitData { in-out property motd; in-out property <[string]> players; - in-out property port; in-out property can_start; in-out property chat_text; - in-out property ping; + in-out property input_delay; } export component NetplayWait inherits Page { @@ -35,11 +34,6 @@ export component NetplayWait inherits Page { horizontal-alignment: center; } - Text { - text: @tr("Ping:") + " " + NetplayWaitData.ping; - horizontal-alignment: center; - } - HorizontalBox { alignment: center; GridBox { @@ -67,7 +61,7 @@ export component NetplayWait inherits Page { TextEdit { read-only: true; - min-height: 120px; + min-height: 110px; text: NetplayWaitData.chat_text; } @@ -98,7 +92,23 @@ export component NetplayWait inherits Page { horizontal-alignment: center; wrap: word-wrap; } + HorizontalBox { + alignment: center; + Text { + text: @tr("Local Input Delay:"); + horizontal-alignment: center; + vertical-alignment: center; + } + ComboBox { + model: ["0", "1", "2", "3", "4", "5", "6", "7", "8"]; + current-index: NetplayWaitData.input_delay; + selected => { + NetplayWaitData.input_delay = self.current-index; + } + + } + } HorizontalBox { alignment: center; Button { diff --git a/src/ui/input.rs b/src/ui/input.rs index 25bd4ae..fec8fe0 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -41,6 +41,7 @@ pub struct Controllers { pub last_key_state: u32, } +#[derive(Default, PartialEq, Copy, Clone, serde::Serialize, serde::Deserialize)] pub struct InputData { pub data: u32, pub pak_change_pressed: bool, diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 4668759..f17ca65 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -1,116 +1,63 @@ use crate::device; use crate::ui; -use crate::ui::gui::{AppWindow, NetplayDevice, open_uri, run_rom, save_settings}; -use futures::{SinkExt, StreamExt, future::join_all}; -use sha2::{Digest, Sha256}; -use slint::{ComponentHandle, Model}; +use crate::ui::gui::{AppWindow, open_uri, run_rom, save_settings}; +use futures::{SinkExt, StreamExt}; +use sha2::digest::Digest; +use slint::ComponentHandle; +use slint::Model; use tokio_tungstenite::tungstenite::Bytes; -use tokio_tungstenite::tungstenite::protocol::Message; +use tokio_tungstenite::tungstenite::Utf8Bytes; +use tokio_tungstenite::tungstenite::protocol::frame::coding::CloseCode; +use tokio_tungstenite::tungstenite::protocol::{CloseFrame, Message}; -const NETPLAY_VERSION: i32 = 17; -const EMU_NAME: &str = "gopher64"; +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +enum MessageType { + RequestCreateSession, + RequestJoinSession, + RequestListSessions, + RequestUpdateSession, + RequestBeginGame, + ResponseBeginGame, + ResponseSession, + ResponseListSessions, + SendChatMessage, + ReceiveChatMessage, + Authenticate, +} -#[derive(serde::Serialize, serde::Deserialize, Clone, Debug)] -pub struct NetplayRoom { - room_name: Option, +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +struct NetplaySession { password: Option, - protected: Option, - #[serde(rename = "MD5")] - md5: Option, game_name: Option, - pub port: Option, - features: Option>, - buffer_target: Option, + motd: Option, + game_checksum: Option, + client_version: Option, + features: Option>, + players: Vec, + server_address: Option, } -#[derive(serde::Serialize, serde::Deserialize, Clone, Debug)] -pub struct NetplayMessage { - #[serde(rename = "type")] - message_type: String, - player_name: Option, - client_sha: Option, - netplay_version: Option, - emulator: Option, - room: Option, - accept: Option, +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +struct NetplayLobbyMessage { + message_type: MessageType, + sessions: std::collections::HashMap, message: Option, - auth: Option, - player_names: Option<[String; 4]>, - #[serde(rename = "authTime")] - auth_time: Option, - rooms: Option>, } -async fn get_local_servers() -> Vec<(String, String)> { - if let Ok(broadcast_sock) = - tokio::net::UdpSocket::bind((std::net::Ipv4Addr::UNSPECIFIED, 0)).await - && broadcast_sock.set_broadcast(true).is_ok() - { - let data: [u8; 1] = [1]; - if let Err(e) = broadcast_sock - .send_to(&data, (std::net::Ipv4Addr::BROADCAST, 45000)) - .await - { - eprintln!("Error sending broadcast: {}", e); - return vec![]; - } - let mut buffer = [0; 1024]; - if let Ok(Ok(result)) = tokio::time::timeout( - std::time::Duration::from_millis(500), - broadcast_sock.recv(&mut buffer), - ) - .await - && let Ok(data) = - serde_json::from_slice::>(&buffer[..result]) - { - let mut local_servers = vec![]; - for server in data.iter() { - local_servers.push((server.0.into(), server.1.into())); - } - local_servers - } else { - vec![] - } - } else { - eprintln!("Error creating netplay broadcast socket"); - vec![] - } -} - -fn populate_server_names(weak: slint::Weak, refresh_sessions: bool) { - let task = ui::WEB_CLIENT - .get("https://dispatch.gopher64.com/getRegions") - .header("netplay-id", env!("NETPLAY_ID")) - .send(); - tokio::spawn(async move { - let (response, local_servers) = tokio::join!(task, get_local_servers()); - let public_servers = if let Ok(response) = response - && let Ok(servers) = response.json::>().await - { - servers - } else { - vec![] - }; - weak.upgrade_in_event_loop(move |handle| { - let server_names: slint::VecModel = slint::VecModel::default(); - let server_urls: slint::VecModel = slint::VecModel::default(); - for local_server in local_servers { - server_names.push(local_server.0.into()); - server_urls.push(local_server.1.into()); - } - for server in public_servers { - server_names.push(server.clone().into()); - server_urls.push(format!("dispatcher:{server}").into()); - } - server_names.push("Custom".into()); - if refresh_sessions { - handle.invoke_netplay_refresh_sessions(); - } - handle.set_netplay_server_names(slint::ModelRc::from(std::rc::Rc::new(server_names))); - handle.set_netplay_server_urls(slint::ModelRc::from(std::rc::Rc::new(server_urls))); - }) - .unwrap(); - }); +pub fn get_auth_token() -> String { + let now_utc = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_millis() + .to_string(); + let hasher: String = sha2::Sha256::new() + .chain_update(&now_utc) + .chain_update(env!("NETPLAY_ID")) + .finalize() + .iter() + .map(|b| format!("{:02x}", b)) + .collect(); + format!("{}|{}", now_utc, hasher) } fn select_rom(weak: slint::Weak, rom_dir: slint::SharedString) { @@ -157,156 +104,101 @@ fn select_rom(weak: slint::Weak, rom_dir: slint::SharedString) { fn setup_create_window( app: &AppWindow, game_settings: ui::GameSettings, - netplay_write_sender: tokio::sync::broadcast::Sender>, - netplay_read_receiver: tokio::sync::broadcast::Receiver>, - netplay_read_sender: tokio::sync::broadcast::Sender>, - netplay_write_receiver: tokio::sync::broadcast::Receiver>, + netplay_write_sender: tokio::sync::broadcast::Sender>, + netplay_read_receiver: tokio::sync::broadcast::Receiver>, + netplay_read_sender: tokio::sync::broadcast::Sender>, + netplay_write_receiver: tokio::sync::broadcast::Receiver>, ) { - populate_server_names(app.as_weak(), false); - let weak = app.as_weak(); - app.on_netplay_get_custom_url(move || { - weak.upgrade_in_event_loop(move |handle| { - handle.invoke_show_custom_server_dialog(); - }) - .unwrap(); - }); - let weak = app.as_weak(); app.on_netplay_create_session( - move |server_url, - session_name, - player_name, - game_name, - game_hash, - game_cheats, - password| { + move |session_name, player_name, game_name, game_hash, game_cheats, password| { let _ = netplay_write_sender.send(None); // close current websocket if any - if server_url.starts_with("dispatcher:") { - weak.upgrade_in_event_loop(move |handle| { - handle.invoke_show_message( - "Creating server, please wait...This may take about 30 seconds.".into(), - false, - ); - }) - .unwrap(); - let task = ui::WEB_CLIENT - .get("https://dispatch.gopher64.com/createServer") - .query(&[("region", server_url.strip_prefix("dispatcher:").unwrap())]) - .header("netplay-id", env!("NETPLAY_ID")) - .send(); - let netplay_read_sender = netplay_read_sender.clone(); - let netplay_write_receiver = netplay_write_receiver.resubscribe(); - let netplay_write_sender = netplay_write_sender.clone(); - let netplay_read_receiver = netplay_read_receiver.resubscribe(); - let game_settings = game_settings.clone(); - let weak = weak.clone(); - let weak_app = weak.clone(); - tokio::spawn(async move { - let response = task.await; + manage_websocket( + netplay_read_sender.clone(), + netplay_write_receiver.resubscribe(), + ); - if let Ok(response) = response - && let Ok(server) = response - .json::>() - .await - { - let server_url = server.values().next().unwrap(); - - manage_websocket( - server_url.to_string(), - netplay_read_sender, - netplay_write_receiver, - weak.clone(), - ); - - create_session( - netplay_write_sender, - netplay_read_receiver, - session_name.to_string(), - player_name.to_string(), - game_name.to_string(), - game_hash.to_string(), - game_cheats.to_string(), - password.to_string(), - game_settings, - weak_app, - ); - } else { - weak.upgrade_in_event_loop(|handle| { - handle.set_netplay_pending_session(false); - handle.invoke_show_message("Server could not be created".into(), true); - }) - .unwrap(); - } - }); - } else { - manage_websocket( - server_url.to_string(), - netplay_read_sender.clone(), - netplay_write_receiver.resubscribe(), - weak.clone(), - ); - - create_session( - netplay_write_sender.clone(), - netplay_read_receiver.resubscribe(), - session_name.to_string(), - player_name.to_string(), - game_name.to_string(), - game_hash.to_string(), - game_cheats.to_string(), - password.to_string(), - game_settings.clone(), - weak.clone(), - ); - } + create_session( + netplay_write_sender.clone(), + netplay_read_receiver.resubscribe(), + session_name.to_string(), + player_name.to_string(), + game_name.to_string(), + game_hash.to_string(), + game_cheats.to_string(), + password.to_string(), + game_settings.clone(), + weak.clone(), + ); }, ); - app.set_show_netplay_create_room(true); + app.set_show_netplay_create_session(true); +} + +async fn do_authentication( + write: &mut futures::stream::SplitSink< + tokio_tungstenite::WebSocketStream< + tokio_tungstenite::MaybeTlsStream, + >, + tokio_tungstenite::tungstenite::Message, + >, +) { + let authenticate = NetplayLobbyMessage { + message_type: MessageType::Authenticate, + sessions: std::collections::HashMap::new(), + message: Some(get_auth_token()), + }; + + write + .send(Message::Binary(Bytes::from( + postcard::to_stdvec(&authenticate).unwrap(), + ))) + .await + .unwrap(); } fn manage_websocket( - server_url: String, - netplay_read_sender: tokio::sync::broadcast::Sender>, - mut netplay_write_receiver: tokio::sync::broadcast::Receiver>, - weak: slint::Weak, + netplay_read_sender: tokio::sync::broadcast::Sender>, + mut netplay_write_receiver: tokio::sync::broadcast::Receiver>, ) { + let server_url = "ws://netplay.gopher64.com:45000"; tokio::spawn(async move { if let Ok(Ok((socket, _response))) = tokio::time::timeout( std::time::Duration::from_secs(2), - tokio_tungstenite::connect_async(server_url.clone()), + tokio_tungstenite::connect_async(server_url), ) .await { - match socket.get_ref() { - tokio_tungstenite::MaybeTlsStream::Plain(stream) => { - let addr = stream.peer_addr().unwrap().to_string(); - weak.upgrade_in_event_loop(move |handle| { - handle.set_netplay_peer_addr(addr.into()); - }) - .unwrap(); - } - _ => unimplemented!(), - } - let (mut write, mut read) = socket.split(); + tokio::spawn(async move { while let Some(Ok(response)) = read.next().await { - if let Ok(message) = serde_json::from_slice(&response.into_data()) { - let _ = netplay_read_sender.send(message); + let decoded_response = + postcard::from_bytes::(&response.into_data()); + match decoded_response { + Ok(message) => { + let _ = netplay_read_sender.send(Some(message)); + } + Err(e) => { + eprintln!("Failed to parse message: {}", e); + } } } }); tokio::spawn(async move { + do_authentication(&mut write).await; loop { match netplay_write_receiver.recv().await { Ok(Some(response)) => { - write + if let Err(e) = write .send(Message::Binary(Bytes::from( - serde_json::to_vec(&response).unwrap(), + postcard::to_stdvec(&response).unwrap(), ))) .await - .unwrap(); + { + eprintln!("Failed to send message: {}", e); + } } Ok(None) => { break; @@ -319,199 +211,36 @@ fn manage_websocket( } } } - write.close().await.unwrap(); + if let Err(e) = write + .send(Message::Close(Some(CloseFrame { + code: CloseCode::Normal, + reason: Utf8Bytes::from(""), + }))) + .await + { + eprintln!("Failed to send close message: {}", e); + } }); } }); } -async fn get_rooms_from_server( - server_name: String, - server_url: String, -) -> ( - Vec>, - Vec, - Vec, +fn update_sessions( + netplay_write_sender: tokio::sync::broadcast::Sender>, ) { - let mut sessions = vec![]; - let mut room_urls = vec![]; - let mut room_ports = vec![]; - if let Ok(Ok((socket, _response))) = tokio::time::timeout( - std::time::Duration::from_secs(2), - tokio_tungstenite::connect_async(&server_url), - ) - .await - { - let (mut write, mut read) = socket.split(); + let request_sessions = NetplayLobbyMessage { + message_type: MessageType::RequestListSessions, + sessions: std::collections::HashMap::new(), + message: None, + }; - let now_utc = std::time::SystemTime::now() - .duration_since(std::time::UNIX_EPOCH) - .unwrap() - .as_millis() - .to_string(); - let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); - let request_rooms = NetplayMessage { - message_type: "request_get_rooms".to_string(), - player_name: None, - client_sha: None, - netplay_version: Some(NETPLAY_VERSION), - player_names: None, - emulator: Some(EMU_NAME.to_string()), - accept: None, - rooms: None, - message: None, - auth_time: Some(now_utc), - auth: Some( - hasher - .finalize() - .iter() - .map(|b| format!("{:02x}", b)) - .collect(), - ), - room: None, - }; - write - .send(Message::Binary(Bytes::from( - serde_json::to_vec(&request_rooms).unwrap(), - ))) - .await - .unwrap(); - - if let Some(Ok(response)) = read.next().await - && let Ok(message) = serde_json::from_slice::(&response.into_data()) - && message.message_type == "reply_get_rooms" - && message.accept.unwrap() == 0 - && let Some(rooms) = message.rooms - { - for room in rooms { - let mut session = vec![]; - room_urls.push(server_url.as_str().into()); - room_ports.push(room.port.unwrap()); - - session.push(slint::StandardListViewItem::from( - slint::SharedString::from(&server_name), - )); - session.push(slint::StandardListViewItem::from( - slint::SharedString::from(room.room_name.unwrap()), - )); - session.push(slint::StandardListViewItem::from( - slint::SharedString::from(room.game_name.unwrap()), - )); - session.push(slint::StandardListViewItem::from( - slint::SharedString::from(if room.protected.unwrap() { - "True" - } else { - "False" - }), - )); - session.push(slint::StandardListViewItem::from( - slint::SharedString::from( - if room.features.unwrap_or_default().contains_key("cheats") { - "True" - } else { - "False" - }, - ), - )); - sessions.push(session); - } - } - } - (sessions, room_urls, room_ports) -} - -fn update_sessions(weak: slint::Weak) { - let task = ui::WEB_CLIENT - .get("https://dispatch.gopher64.com/getServers") - .header("netplay-id", env!("NETPLAY_ID")) - .send(); - tokio::spawn(async move { - let mut dispatcher_servers = rustc_hash::FxHashMap::default(); - let response = task.await; - if let Ok(response) = response - && let Ok(servers) = response - .json::>() - .await - { - dispatcher_servers = servers; - } - let weak2 = weak.clone(); - weak.upgrade_in_event_loop(move |handle| { - let mut servers: rustc_hash::FxHashMap = - rustc_hash::FxHashMap::default(); - let server_names = handle.get_netplay_server_names(); - let server_urls = handle.get_netplay_server_urls(); - for (i, server_name) in server_names.iter().enumerate() { - if server_name == "Custom" { - let custom_server_url = handle.get_netplay_custom_server_url(); - if !custom_server_url.is_empty() { - servers.insert( - "Custom".to_string(), - "ws://".to_string() + &custom_server_url, - ); - } - } else if let Some(url) = server_urls.row_data(i) - && url.starts_with("dispatcher:") - { - continue; - } else { - servers.insert( - server_name.to_string(), - server_urls.row_data(i).unwrap().to_string(), - ); - } - } - servers.extend(dispatcher_servers); - - tokio::spawn(async move { - let mut sessions = vec![]; - let mut room_urls = vec![]; - let mut room_ports = vec![]; - let server_tasks = servers.iter().map(|(server_name, server_url)| { - get_rooms_from_server(server_name.clone(), server_url.clone()) - }); - for (server_sessions, server_room_urls, server_room_ports) in - join_all(server_tasks).await - { - sessions.extend(server_sessions); - room_urls.extend(server_room_urls); - room_ports.extend(server_room_ports); - } - - weak2 - .upgrade_in_event_loop(move |handle| { - let sessions_vec = slint::VecModel::default(); - for session in sessions.iter() { - sessions_vec.push(slint::ModelRc::from(std::rc::Rc::new( - slint::VecModel::from(session.to_vec()), - ))); - } - handle.set_netplay_sessions(slint::ModelRc::from(std::rc::Rc::new( - sessions_vec, - ))); - - handle.set_netplay_room_urls(slint::ModelRc::from(std::rc::Rc::new( - slint::VecModel::from(room_urls.to_vec()), - ))); - - handle.set_netplay_room_ports(slint::ModelRc::from(std::rc::Rc::new( - slint::VecModel::from(room_ports.to_vec()), - ))); - - handle.set_netplay_current_session(-1); - handle.set_netplay_pending_refresh(false); - }) - .unwrap(); - }); - }) - .unwrap(); - }); + netplay_write_sender.send(Some(request_sessions)).unwrap(); } #[allow(clippy::too_many_arguments)] fn create_session( - netplay_write_sender: tokio::sync::broadcast::Sender>, - mut netplay_read_receiver: tokio::sync::broadcast::Receiver>, + netplay_write_sender: tokio::sync::broadcast::Sender>, + mut netplay_read_receiver: tokio::sync::broadcast::Receiver>, session_name: String, player_name: String, game_name: String, @@ -522,13 +251,7 @@ fn create_session( weak_app: slint::Weak, ) { tokio::spawn(async move { - let now_utc = std::time::SystemTime::now() - .duration_since(std::time::UNIX_EPOCH) - .unwrap() - .as_millis() - .to_string(); - let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); - let mut features = rustc_hash::FxHashMap::default(); + let mut features = std::collections::HashMap::default(); if !game_cheats.is_empty() { features.insert("cheats".to_string(), game_cheats); @@ -540,37 +263,27 @@ fn create_session( game_settings.disable_expansion_pak.to_string(), ); - let create_room = NetplayMessage { - message_type: "request_create_room".to_string(), - player_name: Some(player_name), - client_sha: Some(env!("GIT_DESCRIBE").to_string()), - netplay_version: Some(NETPLAY_VERSION), - emulator: Some(EMU_NAME.to_string()), - accept: None, + let session = NetplaySession { + password: if password.is_empty() { + None + } else { + Some(password) + }, + game_name: Some(game_name), + motd: None, + game_checksum: Some(game_hash), + client_version: Some(env!("GIT_DESCRIBE").to_string()), + features: Some(features), + players: vec![player_name], + server_address: None, + }; + let create_session = NetplayLobbyMessage { + message_type: MessageType::RequestCreateSession, + sessions: std::collections::HashMap::from([(session_name, session)]), message: None, - rooms: None, - auth_time: Some(now_utc), - player_names: None, - auth: Some( - hasher - .finalize() - .iter() - .map(|b| format!("{:02x}", b)) - .collect(), - ), - room: Some(NetplayRoom { - room_name: Some(session_name), - password: Some(password), - game_name: Some(game_name), - md5: Some(game_hash), - protected: None, - port: None, - features: Some(features), - buffer_target: None, - }), }; - netplay_write_sender.send(Some(create_room)).unwrap(); + netplay_write_sender.send(Some(create_session)).unwrap(); match tokio::time::timeout( std::time::Duration::from_secs(2), @@ -579,10 +292,11 @@ fn create_session( .await { Ok(Ok(Some(message))) => { - if message.message_type == "reply_create_room" && message.accept.unwrap() == 0 { + if message.message_type == MessageType::ResponseSession && message.message.is_none() + { weak_app .upgrade_in_event_loop(move |handle| { - let session = message.room.as_ref().unwrap(); + let (session_name, session) = message.sessions.iter().next().unwrap(); let features_default = "false".to_string(); let cheats_default = "{}".to_string(); let overclock = session @@ -606,18 +320,16 @@ fn create_session( setup_wait_window( netplay_write_sender, netplay_read_receiver, - session.room_name.as_ref().unwrap().into(), + session.server_address.as_ref().unwrap().clone(), + session_name.into(), session.game_name.as_ref().unwrap().into(), handle.get_netplay_rom_path(), - message.player_name.as_ref().unwrap().into(), - session.port.unwrap(), ui::GameSettings { overclock: overclock.parse().unwrap(), disable_expansion_pak: disable_expansion_pak.parse().unwrap(), cheats: serde_json::from_str(cheats).unwrap(), load_savestate_slot: None, }, - handle.get_netplay_peer_addr(), &handle, ); }) @@ -650,65 +362,228 @@ fn create_session( } fn join_session( - netplay_write_sender: tokio::sync::broadcast::Sender>, - mut netplay_read_receiver: tokio::sync::broadcast::Receiver>, + netplay_write_sender: tokio::sync::broadcast::Sender>, + session_name: String, player_name: String, game_hash: String, password: String, - room_port: i32, - weak_app: slint::Weak, ) { + let session = NetplaySession { + password: Some(password), + game_name: None, + motd: None, + game_checksum: Some(game_hash), + client_version: Some(env!("GIT_DESCRIBE").to_string()), + features: None, + players: vec![player_name], + server_address: None, + }; + let join_session = NetplayLobbyMessage { + message_type: MessageType::RequestJoinSession, + sessions: std::collections::HashMap::from([(session_name, session)]), + message: None, + }; + + netplay_write_sender.send(Some(join_session)).unwrap(); +} + +#[allow(clippy::too_many_arguments)] +fn setup_wait_window( + netplay_write_sender: tokio::sync::broadcast::Sender>, + mut netplay_read_receiver: tokio::sync::broadcast::Receiver>, + server_addr: String, + session_name: slint::SharedString, + game_name: slint::SharedString, + rom_path: slint::SharedString, + game_settings: ui::GameSettings, + app: &AppWindow, +) { + let (mut socket, loop_fut) = matchbox_socket::WebRtcSocketBuilder::new(server_addr.clone()) + .add_unreliable_channel() + .build(); tokio::spawn(async move { - let now_utc = std::time::SystemTime::now() - .duration_since(std::time::UNIX_EPOCH) - .unwrap() - .as_millis() - .to_string(); - let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); + if let Err(e) = loop_fut.await { + eprintln!("WebRTC loop failed: {}", e); + } + }); - let join_room = NetplayMessage { - message_type: "request_join_room".to_string(), - player_name: Some(player_name), - client_sha: Some(env!("GIT_DESCRIBE").to_string()), - netplay_version: Some(NETPLAY_VERSION), - emulator: Some(EMU_NAME.to_string()), - accept: None, - message: None, - rooms: None, - player_names: None, - auth_time: Some(now_utc), - auth: Some( - hasher - .finalize() - .iter() - .map(|b| format!("{:02x}", b)) - .collect(), - ), - room: Some(NetplayRoom { - room_name: None, - password: Some(password), - game_name: None, - md5: Some(game_hash), - protected: None, - port: Some(room_port), - features: None, - buffer_target: None, - }), + app.set_netplay_session_name(session_name); + app.set_netplay_game_name(game_name); + app.set_netplay_rom_path(rom_path); + app.set_netplay_can_start(true); + app.set_netplay_input_delay(2); + + let request_update = NetplayLobbyMessage { + message_type: MessageType::RequestUpdateSession, + sessions: std::collections::HashMap::new(), + message: None, + }; + netplay_write_sender.send(Some(request_update)).unwrap(); + + let sender = netplay_write_sender.clone(); + app.on_netplay_send_chat_message(move |message| { + let send_chat = NetplayLobbyMessage { + message_type: MessageType::SendChatMessage, + sessions: std::collections::HashMap::new(), + message: Some(message.into()), }; + sender.send(Some(send_chat)).unwrap(); + }); - netplay_write_sender.send(Some(join_room)).unwrap(); + let sender = netplay_write_sender.clone(); + app.on_netplay_begin_game(move || { + let begin_game = NetplayLobbyMessage { + message_type: MessageType::RequestBeginGame, + sessions: std::collections::HashMap::new(), + message: None, + }; + sender.send(Some(begin_game)).unwrap(); + }); - match tokio::time::timeout( - std::time::Duration::from_secs(2), - netplay_read_receiver.recv(), - ) - .await - { - Ok(Ok(Some(message))) => { - if message.message_type == "reply_join_room" && message.accept.unwrap() == 0 { - weak_app - .upgrade_in_event_loop(move |handle| { - let session = message.room.as_ref().unwrap(); + let weak_app = app.as_weak(); + tokio::spawn(async move { + loop { + match netplay_read_receiver.recv().await { + Ok(Some(response)) => match response.message_type { + MessageType::ResponseSession => { + weak_app + .upgrade_in_event_loop(move |handle| { + let session = response.sessions.iter().next().unwrap().1; + let player_names = session.players.clone(); + + handle.set_netplay_motd(session.motd.as_ref().unwrap().into()); + + handle.set_netplay_players(slint::ModelRc::from(std::rc::Rc::new( + slint::VecModel::from( + player_names + .iter() + .map(|x| x.into()) + .collect::>(), + ), + ))); + }) + .unwrap(); + } + MessageType::ReceiveChatMessage => { + weak_app + .upgrade_in_event_loop(move |handle| { + let mut chat_text = handle.get_netplay_chat_text(); + chat_text.push_str(&format!("{}\n", response.message.unwrap())); + handle.set_netplay_chat_text(chat_text); + }) + .unwrap(); + } + MessageType::ResponseBeginGame => { + if response.message.is_none() { + let weak_app2 = weak_app.clone(); + weak_app + .upgrade_in_event_loop(move |handle| { + let player_name = handle.get_netplay_player_name(); + let players = handle.get_netplay_players(); + let input_delay = handle.get_netplay_input_delay(); + let player_number = + players.iter().position(|x| x == player_name).unwrap(); + run_rom( + handle.get_netplay_rom_path().as_str().into(), + ui::GameSettings { + overclock: game_settings.overclock, + disable_expansion_pak: game_settings + .disable_expansion_pak, + cheats: game_settings.cheats, + load_savestate_slot: None, + }, + Some(ui::gui::NetplayDevice { + server_addr, + player_number, + number_of_players: players.row_count(), + input_delay, + }), + weak_app2, + ); + handle.invoke_netplay_close(); + }) + .unwrap(); + socket.close(); + return; + } else { + weak_app + .upgrade_in_event_loop(move |handle| { + handle.set_netplay_can_start(true); + + if let Some(message) = response.message { + handle.invoke_show_message(message.into(), true); + } + }) + .unwrap(); + } + } + _ => { + eprintln!("Unknown netplay message type: {:?}", response.message_type); + } + }, + Ok(None) => { + break; + } + Err(tokio::sync::broadcast::error::RecvError::Lagged(_)) => { + panic!("netplay_read_receiver lagged"); + } + Err(tokio::sync::broadcast::error::RecvError::Closed) => { + break; // exit the loop if the receiver is closed + } + } + } + }); + app.set_show_netplay_wait_session(true); + app.set_show_netplay_create_session(false); + app.set_show_netplay_join_session(false); + app.invoke_close_message(); +} + +fn setup_join_window( + app: &AppWindow, + netplay_write_sender: tokio::sync::broadcast::Sender>, + netplay_read_receiver: tokio::sync::broadcast::Receiver>, + netplay_read_sender: tokio::sync::broadcast::Sender>, + netplay_write_receiver: tokio::sync::broadcast::Receiver>, +) { + let _ = netplay_write_sender.send(None); // close current websocket if any + manage_websocket( + netplay_read_sender.clone(), + netplay_write_receiver.resubscribe(), + ); + + app.set_netplay_pending_refresh(true); + + let write_sender = netplay_write_sender.clone(); + app.on_netplay_refresh_sessions(move || { + update_sessions(write_sender.clone()); + }); + + let write_sender = netplay_write_sender.clone(); + app.on_netplay_join_session(move |session_name, player_name, game_hash, password| { + join_session( + write_sender.clone(), + session_name.to_string(), + player_name.to_string(), + game_hash.to_string(), + password.to_string(), + ); + }); + + let weak = app.as_weak(); + let mut read_receiver = netplay_read_receiver.resubscribe(); + let write_sender = netplay_write_sender.clone(); + tokio::spawn(async move { + loop { + match read_receiver.recv().await { + Ok(Some(message)) => { + if message.message_type == MessageType::ResponseSession + && message.message.is_none() + { + let sender = write_sender.clone(); + let receiver = read_receiver.resubscribe(); + weak.upgrade_in_event_loop(move |handle| { + let (session_name, session) = message.sessions.iter().next().unwrap(); let features_default = "false".to_string(); let cheats_default = "{}".to_string(); let overclock = session @@ -730,381 +605,110 @@ fn join_session( .get("cheats") .unwrap_or(&cheats_default); setup_wait_window( - netplay_write_sender, - netplay_read_receiver, - session.room_name.as_ref().unwrap().into(), + sender, + receiver, + session.server_address.as_ref().unwrap().clone(), + session_name.into(), session.game_name.as_ref().unwrap().into(), handle.get_netplay_rom_path(), - message.player_name.as_ref().unwrap().into(), - session.port.unwrap(), ui::GameSettings { overclock: overclock.parse().unwrap(), disable_expansion_pak: disable_expansion_pak.parse().unwrap(), cheats: serde_json::from_str(cheats).unwrap(), load_savestate_slot: None, }, - handle.get_netplay_peer_addr(), &handle, ); }) .unwrap(); - } else { - weak_app - .upgrade_in_event_loop(move |handle| { + return; + } else if message.message_type == MessageType::ResponseListSessions + && message.message.is_none() + { + let mut sessions = vec![]; + for (session_name, remote_session) in message.sessions { + let mut session = vec![]; + + session.push(slint::StandardListViewItem::from( + slint::SharedString::from(session_name), + )); + session.push(slint::StandardListViewItem::from( + slint::SharedString::from(remote_session.game_name.unwrap()), + )); + session.push(slint::StandardListViewItem::from( + slint::SharedString::from(if remote_session.password.is_some() { + "True" + } else { + "False" + }), + )); + session.push(slint::StandardListViewItem::from( + slint::SharedString::from( + if remote_session + .features + .unwrap_or_default() + .contains_key("cheats") + { + "True" + } else { + "False" + }, + ), + )); + sessions.push(session); + } + weak.upgrade_in_event_loop(move |handle| { + let sessions_vec = slint::VecModel::default(); + for session in sessions.iter() { + sessions_vec.push(slint::ModelRc::from(std::rc::Rc::new( + slint::VecModel::from(session.to_vec()), + ))); + } + handle.set_netplay_sessions(slint::ModelRc::from(std::rc::Rc::new( + sessions_vec, + ))); + + handle.set_netplay_current_session(-1); + handle.set_netplay_pending_refresh(false); + }) + .unwrap(); + } else { + weak.upgrade_in_event_loop(move |handle| { handle.set_netplay_pending_session(false); if let Some(message) = message.message { handle.invoke_show_message(message.into(), true); } }) .unwrap(); + } } - } - Ok(Ok(None)) => {} - Ok(Err(err)) => { - panic!("netplay_read_receiver error: {err}"); - } - Err(_) => { - weak_app - .upgrade_in_event_loop(move |handle| { + Ok(None) => { + break; + } + Err(_) => { + weak.upgrade_in_event_loop(move |handle| { handle.set_netplay_pending_session(false); handle.invoke_show_message("Server did not respond".into(), true); }) .unwrap(); - } - } - }); -} - -#[allow(clippy::too_many_arguments)] -fn setup_wait_window( - netplay_write_sender: tokio::sync::broadcast::Sender>, - mut netplay_read_receiver: tokio::sync::broadcast::Receiver>, - session_name: slint::SharedString, - game_name: slint::SharedString, - rom_path: slint::SharedString, - player_name: slint::SharedString, - port: i32, - game_settings: ui::GameSettings, - peer_addr: slint::SharedString, - app: &AppWindow, -) { - let local_player = player_name.clone(); - - let mut socket_addr: std::net::SocketAddr = peer_addr.to_string().parse().unwrap(); - socket_addr.set_port(port as u16); - app.set_netplay_session_name(session_name); - app.set_netplay_game_name(game_name); - app.set_netplay_rom_path(rom_path); - app.set_netplay_port(port); - app.set_netplay_ping("Unknown".into()); - - let sender = netplay_write_sender.clone(); - app.on_netplay_send_chat_message(move |message| { - let send_chat = NetplayMessage { - message_type: "request_chat_message".to_string(), - player_name: Some(player_name.to_string()), - client_sha: None, - netplay_version: None, - player_names: None, - rooms: None, - emulator: None, - accept: None, - message: Some(message.into()), - auth_time: None, - auth: None, - room: Some(NetplayRoom { - room_name: None, - password: None, - game_name: None, - md5: None, - protected: None, - port: Some(port), - features: None, - buffer_target: None, - }), - }; - sender.send(Some(send_chat)).unwrap(); - }); - - let sender = netplay_write_sender.clone(); - app.on_netplay_begin_game(move || { - let begin_game = NetplayMessage { - message_type: "request_begin_game".to_string(), - player_name: None, - client_sha: None, - netplay_version: None, - player_names: None, - rooms: None, - emulator: None, - accept: None, - message: None, - auth_time: None, - auth: None, - room: Some(NetplayRoom { - room_name: None, - password: None, - game_name: None, - md5: None, - protected: None, - port: Some(port), - features: None, - buffer_target: None, - }), - }; - sender.send(Some(begin_game)).unwrap(); - }); - - let motd_message = NetplayMessage { - message_type: "request_motd".to_string(), - player_name: None, - client_sha: None, - netplay_version: None, - emulator: None, - accept: None, - rooms: None, - player_names: None, - message: None, - auth_time: None, - auth: None, - room: None, - }; - - netplay_write_sender.send(Some(motd_message)).unwrap(); - - let ping_message = NetplayMessage { - message_type: "request_ping".to_string(), - player_name: None, - client_sha: None, - netplay_version: None, - emulator: None, - accept: None, - rooms: None, - player_names: None, - message: None, - auth_time: None, - auth: None, - room: None, - }; - - netplay_write_sender - .send(Some(ping_message.clone())) - .unwrap(); - - let weak_app = app.as_weak(); - tokio::spawn(async move { - loop { - match netplay_read_receiver.recv().await { - Ok(Some(response)) => match response.message_type.as_str() { - "reply_ping" => { - if let Some(message) = response.message { - weak_app - .upgrade_in_event_loop(move |handle| { - handle.set_netplay_ping((message + " ms").into()); - }) - .unwrap(); - } - let ping_message = ping_message.clone(); - let ping_writer = netplay_write_sender.clone(); - tokio::spawn(async move { - tokio::time::sleep(std::time::Duration::from_secs(5)).await; - let _ = ping_writer.send(Some(ping_message)); - }); - } - "reply_motd" => { - let request_players = NetplayMessage { - message_type: "request_players".to_string(), - player_name: None, - client_sha: None, - netplay_version: None, - player_names: None, - emulator: None, - rooms: None, - accept: None, - message: None, - auth_time: None, - auth: None, - room: Some(NetplayRoom { - room_name: None, - password: None, - game_name: None, - md5: None, - protected: None, - port: Some(port), - features: None, - buffer_target: None, - }), - }; - netplay_write_sender.send(Some(request_players)).unwrap(); - - weak_app - .upgrade_in_event_loop(move |handle| { - #[allow(clippy::regex_creation_in_loops)] - let re = regex::Regex::new(r"<[^>]*>").unwrap(); - let motd = re - .replace_all(response.message.unwrap().as_str(), "") - .into_owned(); - handle.set_netplay_motd(motd.into()); - }) - .unwrap(); - } - "reply_players" => { - let local_player = local_player.clone(); - weak_app - .upgrade_in_event_loop(move |handle| { - if let Some(player_names) = response.player_names { - if local_player == player_names[0] { - handle.set_netplay_can_start(true); - } else { - handle.set_netplay_can_start(false); - } - - handle.set_netplay_players(slint::ModelRc::from( - std::rc::Rc::new(slint::VecModel::from( - player_names - .iter() - .map(|x| x.into()) - .collect::>(), - )), - )); - } - }) - .unwrap(); - } - "reply_chat_message" => { - weak_app - .upgrade_in_event_loop(move |handle| { - let mut chat_text = handle.get_netplay_chat_text(); - chat_text.push_str(&format!("{}\n", response.message.unwrap())); - handle.set_netplay_chat_text(chat_text); - }) - .unwrap(); - } - "reply_begin_game" => { - if response.accept.unwrap() == 0 { - let weak_app2 = weak_app.clone(); - weak_app - .upgrade_in_event_loop(move |handle| { - let _ = netplay_write_sender.send(None); - - let mut player_number = 4; - let players = handle.get_netplay_players(); - for (i, player) in players.iter().enumerate() { - if player == local_player { - player_number = i; - } - } - if player_number > 3 { - panic!("Could not determine player number"); - } - - run_rom( - handle.get_netplay_rom_path().as_str().into(), - ui::GameSettings { - overclock: game_settings.overclock, - disable_expansion_pak: game_settings - .disable_expansion_pak, - cheats: game_settings.cheats, - load_savestate_slot: None, - }, - Some(NetplayDevice { - peer_addr: socket_addr, - player_number: player_number as u8, - }), - weak_app2, - ); - handle.invoke_netplay_close(); - }) - .unwrap(); - return; - } else { - let local_player = local_player.clone(); - weak_app - .upgrade_in_event_loop(move |handle| { - if let Some(p0) = handle.get_netplay_players().row_data(0) { - if p0 == local_player { - handle.set_netplay_can_start(true); - } else { - handle.set_netplay_can_start(false); - } - } - if let Some(message) = response.message { - handle.invoke_show_message(message.into(), true); - } - }) - .unwrap(); - } - } - _ => { - eprintln!("Unknown netplay message type: {}", response.message_type); - } - }, - Ok(None) => { - break; - } - Err(tokio::sync::broadcast::error::RecvError::Lagged(_)) => { - panic!("netplay_read_receiver lagged"); - } - Err(tokio::sync::broadcast::error::RecvError::Closed) => { - break; // exit the loop if the receiver is closed } } } }); - app.set_show_netplay_wait_room(true); - app.set_show_netplay_create_room(false); - app.set_show_netplay_join_room(false); - app.invoke_close_message(); -} -fn setup_join_window( - app: &AppWindow, - netplay_write_sender: tokio::sync::broadcast::Sender>, - netplay_read_receiver: tokio::sync::broadcast::Receiver>, - netplay_read_sender: tokio::sync::broadcast::Sender>, - netplay_write_receiver: tokio::sync::broadcast::Receiver>, -) { - app.set_netplay_pending_refresh(true); - populate_server_names(app.as_weak(), true); - - let weak = app.as_weak(); - app.on_netplay_refresh_sessions(move || { - update_sessions(weak.clone()); - }); - let weak = app.as_weak(); - app.on_netplay_join_session( - move |player_name, game_hash, password, room_url, room_port| { - let _ = netplay_write_sender.send(None); // close current websocket if any - manage_websocket( - room_url.to_string(), - netplay_read_sender.clone(), - netplay_write_receiver.resubscribe(), - weak.clone(), - ); - - join_session( - netplay_write_sender.clone(), - netplay_read_receiver.resubscribe(), - player_name.to_string(), - game_hash.to_string(), - password.to_string(), - room_port, - weak.clone(), - ); - }, - ); - - app.set_show_netplay_join_room(true); + app.set_show_netplay_join_session(true); + app.invoke_netplay_refresh_sessions(); } pub fn netplay_window(app: &AppWindow) { let (netplay_read_sender, netplay_read_receiver): ( - tokio::sync::broadcast::Sender>, - tokio::sync::broadcast::Receiver>, + tokio::sync::broadcast::Sender>, + tokio::sync::broadcast::Receiver>, ) = tokio::sync::broadcast::channel(5); let (netplay_write_sender, netplay_write_receiver): ( - tokio::sync::broadcast::Sender>, - tokio::sync::broadcast::Receiver>, + tokio::sync::broadcast::Sender>, + tokio::sync::broadcast::Receiver>, ) = tokio::sync::broadcast::channel(5); let weak_app = app.as_weak(); @@ -1170,9 +774,9 @@ pub fn netplay_window(app: &AppWindow) { app.on_netplay_close(move || { weak_app .upgrade_in_event_loop(move |handle| { - handle.set_show_netplay_wait_room(false); - handle.set_show_netplay_create_room(false); - handle.set_show_netplay_join_room(false); + handle.set_show_netplay_wait_session(false); + handle.set_show_netplay_create_session(false); + handle.set_show_netplay_join_session(false); handle.invoke_clear_netplay_data(); handle.invoke_close_message(); }) diff --git a/src/ui/storage.rs b/src/ui/storage.rs index 034410b..637e305 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -243,25 +243,21 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { netplay.as_mut().unwrap(), "eep", &ui.storage.saves.eeprom.data, - ui.storage.saves.eeprom.data.len(), ); netplay::send_save( netplay.as_mut().unwrap(), "sra", &ui.storage.saves.sram.data, - ui.storage.saves.sram.data.len(), ); netplay::send_save( netplay.as_mut().unwrap(), "fla", &ui.storage.saves.flash.data, - ui.storage.saves.flash.data.len(), ); netplay::send_save( netplay.as_mut().unwrap(), "mpk", &ui.storage.saves.mempak.data, - ui.storage.saves.mempak.data.len(), ); let mut compressed_sd = Vec::new(); @@ -270,12 +266,7 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { { compressed_sd = file_data; } - netplay::send_save( - netplay.as_mut().unwrap(), - "img", - &compressed_sd, - compressed_sd.len(), - ); + netplay::send_save(netplay.as_mut().unwrap(), "img", &compressed_sd); let mut compressed_romsave = Vec::new(); if !ui.storage.saves.romsave.data.is_empty() @@ -284,12 +275,7 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { { compressed_romsave = compressed_file_data; } - netplay::send_save( - netplay.as_mut().unwrap(), - "rom", - &compressed_romsave, - compressed_romsave.len(), - ); + netplay::send_save(netplay.as_mut().unwrap(), "rom", &compressed_romsave); } else { netplay::receive_save( netplay.as_mut().unwrap(), From 618e3a32f27d80bbb44624d174a40a04c3c825a3 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 5 Jun 2026 14:16:01 +0200 Subject: [PATCH 0987/1117] netplay error checking (#1005) * netplay error checking * more * more * more * more * more * more * more * more --- data/translations/de/LC_MESSAGES/gopher64.po | 43 ++++---- data/translations/es/LC_MESSAGES/gopher64.po | 43 ++++---- data/translations/fr/LC_MESSAGES/gopher64.po | 43 ++++---- data/translations/gopher64.pot | 43 ++++---- data/translations/ja/LC_MESSAGES/gopher64.po | 43 ++++---- data/translations/nl/LC_MESSAGES/gopher64.po | 43 ++++---- .../pt_BR/LC_MESSAGES/gopher64.po | 43 ++++---- data/translations/ru/LC_MESSAGES/gopher64.po | 43 ++++---- src/device/vi.rs | 16 +-- src/lib.rs | 7 +- src/netplay.rs | 63 +++++++++--- src/savestates.rs | 46 ++++++--- src/ui/gui/appwindow.slint | 2 + src/ui/gui/netplay_wait.slint | 8 ++ src/ui/netplay.rs | 97 +++++++++++++++++-- 15 files changed, 386 insertions(+), 197 deletions(-) diff --git a/data/translations/de/LC_MESSAGES/gopher64.po b/data/translations/de/LC_MESSAGES/gopher64.po index fcc6ed1..4fcff50 100644 --- a/data/translations/de/LC_MESSAGES/gopher64.po +++ b/data/translations/de/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-04 13:13+0000\n" +"POT-Creation-Date: 2026-06-05 12:03+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: German\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Spenden (über GitHub)" -#: src/ui/gui/appwindow.slint:145 +#: src/ui/gui/appwindow.slint:147 msgctxt "Menu" msgid "Local Game" msgstr "Lokales Spiel" -#: src/ui/gui/appwindow.slint:149 +#: src/ui/gui/appwindow.slint:151 msgctxt "Menu" msgid "Controller Config" msgstr "Controller-Konfiguration" -#: src/ui/gui/appwindow.slint:153 +#: src/ui/gui/appwindow.slint:155 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:157 +#: src/ui/gui/appwindow.slint:159 msgctxt "Menu" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/appwindow.slint:161 +#: src/ui/gui/appwindow.slint:163 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:165 +#: src/ui/gui/appwindow.slint:167 msgctxt "Menu" msgid "Settings" msgstr "Einstellungen" -#: src/ui/gui/appwindow.slint:169 +#: src/ui/gui/appwindow.slint:171 msgctxt "Menu" msgid "About" msgstr "Über" @@ -345,62 +345,67 @@ msgctxt "Netplay" msgid "Provide Feedback" msgstr "Feedback geben" -#: src/ui/gui/netplay_wait.slint:14 +#: src/ui/gui/netplay_wait.slint:16 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay: Warteraum" -#: src/ui/gui/netplay_wait.slint:26 +#: src/ui/gui/netplay_wait.slint:28 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Sitzungsname:" -#: src/ui/gui/netplay_wait.slint:32 +#: src/ui/gui/netplay_wait.slint:34 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Spielname:" -#: src/ui/gui/netplay_wait.slint:42 +#: src/ui/gui/netplay_wait.slint:44 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Spieler 1:" -#: src/ui/gui/netplay_wait.slint:46 +#: src/ui/gui/netplay_wait.slint:48 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Spieler 2:" -#: src/ui/gui/netplay_wait.slint:52 +#: src/ui/gui/netplay_wait.slint:54 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Spieler 3:" -#: src/ui/gui/netplay_wait.slint:56 +#: src/ui/gui/netplay_wait.slint:58 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Spieler 4:" -#: src/ui/gui/netplay_wait.slint:70 +#: src/ui/gui/netplay_wait.slint:72 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Chatnachricht eingeben" -#: src/ui/gui/netplay_wait.slint:81 +#: src/ui/gui/netplay_wait.slint:83 msgctxt "NetplayWait" msgid "Send Message" msgstr "Nachricht senden" -#: src/ui/gui/netplay_wait.slint:98 +#: src/ui/gui/netplay_wait.slint:100 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Lokale Eingabeverzögerung:" #: src/ui/gui/netplay_wait.slint:115 msgctxt "NetplayWait" +msgid "Recommended: " +msgstr "Empfohlen: " + +#: src/ui/gui/netplay_wait.slint:123 +msgctxt "NetplayWait" msgid "Start Game" msgstr "Spiel starten" -#: src/ui/gui/netplay_wait.slint:123 +#: src/ui/gui/netplay_wait.slint:131 msgctxt "NetplayWait" msgid "Cancel" msgstr "Abbrechen" diff --git a/data/translations/es/LC_MESSAGES/gopher64.po b/data/translations/es/LC_MESSAGES/gopher64.po index b8fb3bb..88a317a 100644 --- a/data/translations/es/LC_MESSAGES/gopher64.po +++ b/data/translations/es/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-04 13:13+0000\n" +"POT-Creation-Date: 2026-06-05 12:03+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: Gemini\n" "Language-Team: Spanish (Spain)\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Donar (a través de GitHub)" -#: src/ui/gui/appwindow.slint:145 +#: src/ui/gui/appwindow.slint:147 msgctxt "Menu" msgid "Local Game" msgstr "Juego local" -#: src/ui/gui/appwindow.slint:149 +#: src/ui/gui/appwindow.slint:151 msgctxt "Menu" msgid "Controller Config" msgstr "Config. del mando" -#: src/ui/gui/appwindow.slint:153 +#: src/ui/gui/appwindow.slint:155 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:157 +#: src/ui/gui/appwindow.slint:159 msgctxt "Menu" msgid "Cheats" msgstr "Trucos" -#: src/ui/gui/appwindow.slint:161 +#: src/ui/gui/appwindow.slint:163 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:165 +#: src/ui/gui/appwindow.slint:167 msgctxt "Menu" msgid "Settings" msgstr "Ajustes" -#: src/ui/gui/appwindow.slint:169 +#: src/ui/gui/appwindow.slint:171 msgctxt "Menu" msgid "About" msgstr "Acerca de" @@ -345,62 +345,67 @@ msgctxt "Netplay" msgid "Provide Feedback" msgstr "Enviar comentarios" -#: src/ui/gui/netplay_wait.slint:14 +#: src/ui/gui/netplay_wait.slint:16 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay: Sala de espera" -#: src/ui/gui/netplay_wait.slint:26 +#: src/ui/gui/netplay_wait.slint:28 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Nombre de la sesión:" -#: src/ui/gui/netplay_wait.slint:32 +#: src/ui/gui/netplay_wait.slint:34 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Nombre del juego:" -#: src/ui/gui/netplay_wait.slint:42 +#: src/ui/gui/netplay_wait.slint:44 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Jugador 1:" -#: src/ui/gui/netplay_wait.slint:46 +#: src/ui/gui/netplay_wait.slint:48 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Jugador 2:" -#: src/ui/gui/netplay_wait.slint:52 +#: src/ui/gui/netplay_wait.slint:54 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Jugador 3:" -#: src/ui/gui/netplay_wait.slint:56 +#: src/ui/gui/netplay_wait.slint:58 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Jugador 4:" -#: src/ui/gui/netplay_wait.slint:70 +#: src/ui/gui/netplay_wait.slint:72 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Escribe un mensaje en el chat" -#: src/ui/gui/netplay_wait.slint:81 +#: src/ui/gui/netplay_wait.slint:83 msgctxt "NetplayWait" msgid "Send Message" msgstr "Enviar mensaje" -#: src/ui/gui/netplay_wait.slint:98 +#: src/ui/gui/netplay_wait.slint:100 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Retardo de entrada local:" #: src/ui/gui/netplay_wait.slint:115 msgctxt "NetplayWait" +msgid "Recommended: " +msgstr "Recomendado: " + +#: src/ui/gui/netplay_wait.slint:123 +msgctxt "NetplayWait" msgid "Start Game" msgstr "Iniciar juego" -#: src/ui/gui/netplay_wait.slint:123 +#: src/ui/gui/netplay_wait.slint:131 msgctxt "NetplayWait" msgid "Cancel" msgstr "Cancelar" diff --git a/data/translations/fr/LC_MESSAGES/gopher64.po b/data/translations/fr/LC_MESSAGES/gopher64.po index 91a03e2..5f3d8d8 100644 --- a/data/translations/fr/LC_MESSAGES/gopher64.po +++ b/data/translations/fr/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-04 13:13+0000\n" +"POT-Creation-Date: 2026-06-05 12:03+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: French (France)\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Faire un don (via GitHub)" -#: src/ui/gui/appwindow.slint:145 +#: src/ui/gui/appwindow.slint:147 msgctxt "Menu" msgid "Local Game" msgstr "Jeu local" -#: src/ui/gui/appwindow.slint:149 +#: src/ui/gui/appwindow.slint:151 msgctxt "Menu" msgid "Controller Config" msgstr "Configuration manette" -#: src/ui/gui/appwindow.slint:153 +#: src/ui/gui/appwindow.slint:155 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:157 +#: src/ui/gui/appwindow.slint:159 msgctxt "Menu" msgid "Cheats" msgstr "Triche" -#: src/ui/gui/appwindow.slint:161 +#: src/ui/gui/appwindow.slint:163 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:165 +#: src/ui/gui/appwindow.slint:167 msgctxt "Menu" msgid "Settings" msgstr "Paramètres" -#: src/ui/gui/appwindow.slint:169 +#: src/ui/gui/appwindow.slint:171 msgctxt "Menu" msgid "About" msgstr "À propos" @@ -346,62 +346,67 @@ msgctxt "Netplay" msgid "Provide Feedback" msgstr "Donner votre avis" -#: src/ui/gui/netplay_wait.slint:14 +#: src/ui/gui/netplay_wait.slint:16 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay : salle d'attente" -#: src/ui/gui/netplay_wait.slint:26 +#: src/ui/gui/netplay_wait.slint:28 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Nom de la session :" -#: src/ui/gui/netplay_wait.slint:32 +#: src/ui/gui/netplay_wait.slint:34 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Nom du jeu :" -#: src/ui/gui/netplay_wait.slint:42 +#: src/ui/gui/netplay_wait.slint:44 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Joueur 1 :" -#: src/ui/gui/netplay_wait.slint:46 +#: src/ui/gui/netplay_wait.slint:48 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Joueur 2 :" -#: src/ui/gui/netplay_wait.slint:52 +#: src/ui/gui/netplay_wait.slint:54 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Joueur 3 :" -#: src/ui/gui/netplay_wait.slint:56 +#: src/ui/gui/netplay_wait.slint:58 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Joueur 4 :" -#: src/ui/gui/netplay_wait.slint:70 +#: src/ui/gui/netplay_wait.slint:72 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Saisir un message" -#: src/ui/gui/netplay_wait.slint:81 +#: src/ui/gui/netplay_wait.slint:83 msgctxt "NetplayWait" msgid "Send Message" msgstr "Envoyer" -#: src/ui/gui/netplay_wait.slint:98 +#: src/ui/gui/netplay_wait.slint:100 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Délai d'entrée local :" #: src/ui/gui/netplay_wait.slint:115 msgctxt "NetplayWait" +msgid "Recommended: " +msgstr "Recommandé : " + +#: src/ui/gui/netplay_wait.slint:123 +msgctxt "NetplayWait" msgid "Start Game" msgstr "Lancer la partie" -#: src/ui/gui/netplay_wait.slint:123 +#: src/ui/gui/netplay_wait.slint:131 msgctxt "NetplayWait" msgid "Cancel" msgstr "Annuler" diff --git a/data/translations/gopher64.pot b/data/translations/gopher64.pot index e261d47..aed46a1 100644 --- a/data/translations/gopher64.pot +++ b/data/translations/gopher64.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-06-04 13:13+0000\n" +"POT-Creation-Date: 2026-06-05 12:03+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "" -#: src/ui/gui/appwindow.slint:145 +#: src/ui/gui/appwindow.slint:147 msgctxt "Menu" msgid "Local Game" msgstr "" -#: src/ui/gui/appwindow.slint:149 +#: src/ui/gui/appwindow.slint:151 msgctxt "Menu" msgid "Controller Config" msgstr "" -#: src/ui/gui/appwindow.slint:153 +#: src/ui/gui/appwindow.slint:155 msgctxt "Menu" msgid "Netplay" msgstr "" -#: src/ui/gui/appwindow.slint:157 +#: src/ui/gui/appwindow.slint:159 msgctxt "Menu" msgid "Cheats" msgstr "" -#: src/ui/gui/appwindow.slint:161 +#: src/ui/gui/appwindow.slint:163 msgctxt "Menu" msgid "RetroAchievements" msgstr "" -#: src/ui/gui/appwindow.slint:165 +#: src/ui/gui/appwindow.slint:167 msgctxt "Menu" msgid "Settings" msgstr "" -#: src/ui/gui/appwindow.slint:169 +#: src/ui/gui/appwindow.slint:171 msgctxt "Menu" msgid "About" msgstr "" @@ -343,63 +343,68 @@ msgctxt "Netplay" msgid "Provide Feedback" msgstr "" -#: src/ui/gui/netplay_wait.slint:14 +#: src/ui/gui/netplay_wait.slint:16 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "" -#: src/ui/gui/netplay_wait.slint:26 +#: src/ui/gui/netplay_wait.slint:28 msgctxt "NetplayWait" msgid "Session Name:" msgstr "" -#: src/ui/gui/netplay_wait.slint:32 +#: src/ui/gui/netplay_wait.slint:34 msgctxt "NetplayWait" msgid "Game Name:" msgstr "" -#: src/ui/gui/netplay_wait.slint:42 +#: src/ui/gui/netplay_wait.slint:44 msgctxt "NetplayWait" msgid "Player 1:" msgstr "" -#: src/ui/gui/netplay_wait.slint:46 +#: src/ui/gui/netplay_wait.slint:48 msgctxt "NetplayWait" msgid "Player 2:" msgstr "" -#: src/ui/gui/netplay_wait.slint:52 +#: src/ui/gui/netplay_wait.slint:54 msgctxt "NetplayWait" msgid "Player 3:" msgstr "" -#: src/ui/gui/netplay_wait.slint:56 +#: src/ui/gui/netplay_wait.slint:58 msgctxt "NetplayWait" msgid "Player 4:" msgstr "" -#: src/ui/gui/netplay_wait.slint:70 +#: src/ui/gui/netplay_wait.slint:72 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "" -#: src/ui/gui/netplay_wait.slint:81 +#: src/ui/gui/netplay_wait.slint:83 msgctxt "NetplayWait" msgid "Send Message" msgstr "" -#: src/ui/gui/netplay_wait.slint:98 +#: src/ui/gui/netplay_wait.slint:100 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "" #: src/ui/gui/netplay_wait.slint:115 msgctxt "NetplayWait" -msgid "Start Game" +msgid "Recommended: " msgstr "" #: src/ui/gui/netplay_wait.slint:123 msgctxt "NetplayWait" +msgid "Start Game" +msgstr "" + +#: src/ui/gui/netplay_wait.slint:131 +msgctxt "NetplayWait" msgid "Cancel" msgstr "" diff --git a/data/translations/ja/LC_MESSAGES/gopher64.po b/data/translations/ja/LC_MESSAGES/gopher64.po index de66b35..9a9fb29 100644 --- a/data/translations/ja/LC_MESSAGES/gopher64.po +++ b/data/translations/ja/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-04 13:13+0000\n" +"POT-Creation-Date: 2026-06-05 12:03+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Japanese\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "GitHubで寄付" -#: src/ui/gui/appwindow.slint:145 +#: src/ui/gui/appwindow.slint:147 msgctxt "Menu" msgid "Local Game" msgstr "ローカルゲーム" -#: src/ui/gui/appwindow.slint:149 +#: src/ui/gui/appwindow.slint:151 msgctxt "Menu" msgid "Controller Config" msgstr "コントローラー設定" -#: src/ui/gui/appwindow.slint:153 +#: src/ui/gui/appwindow.slint:155 msgctxt "Menu" msgid "Netplay" msgstr "ネットプレイ" -#: src/ui/gui/appwindow.slint:157 +#: src/ui/gui/appwindow.slint:159 msgctxt "Menu" msgid "Cheats" msgstr "チート" -#: src/ui/gui/appwindow.slint:161 +#: src/ui/gui/appwindow.slint:163 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:165 +#: src/ui/gui/appwindow.slint:167 msgctxt "Menu" msgid "Settings" msgstr "設定" -#: src/ui/gui/appwindow.slint:169 +#: src/ui/gui/appwindow.slint:171 msgctxt "Menu" msgid "About" msgstr "バージョン情報" @@ -343,62 +343,67 @@ msgctxt "Netplay" msgid "Provide Feedback" msgstr "フィードバックを送る" -#: src/ui/gui/netplay_wait.slint:14 +#: src/ui/gui/netplay_wait.slint:16 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "ネットプレイ:待機室" -#: src/ui/gui/netplay_wait.slint:26 +#: src/ui/gui/netplay_wait.slint:28 msgctxt "NetplayWait" msgid "Session Name:" msgstr "セッション名:" -#: src/ui/gui/netplay_wait.slint:32 +#: src/ui/gui/netplay_wait.slint:34 msgctxt "NetplayWait" msgid "Game Name:" msgstr "ゲーム名:" -#: src/ui/gui/netplay_wait.slint:42 +#: src/ui/gui/netplay_wait.slint:44 msgctxt "NetplayWait" msgid "Player 1:" msgstr "プレイヤー1:" -#: src/ui/gui/netplay_wait.slint:46 +#: src/ui/gui/netplay_wait.slint:48 msgctxt "NetplayWait" msgid "Player 2:" msgstr "プレイヤー2:" -#: src/ui/gui/netplay_wait.slint:52 +#: src/ui/gui/netplay_wait.slint:54 msgctxt "NetplayWait" msgid "Player 3:" msgstr "プレイヤー3:" -#: src/ui/gui/netplay_wait.slint:56 +#: src/ui/gui/netplay_wait.slint:58 msgctxt "NetplayWait" msgid "Player 4:" msgstr "プレイヤー4:" -#: src/ui/gui/netplay_wait.slint:70 +#: src/ui/gui/netplay_wait.slint:72 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "チャットメッセージを入力" -#: src/ui/gui/netplay_wait.slint:81 +#: src/ui/gui/netplay_wait.slint:83 msgctxt "NetplayWait" msgid "Send Message" msgstr "送信" -#: src/ui/gui/netplay_wait.slint:98 +#: src/ui/gui/netplay_wait.slint:100 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "ローカル入力遅延:" #: src/ui/gui/netplay_wait.slint:115 msgctxt "NetplayWait" +msgid "Recommended: " +msgstr "推奨: " + +#: src/ui/gui/netplay_wait.slint:123 +msgctxt "NetplayWait" msgid "Start Game" msgstr "ゲーム開始" -#: src/ui/gui/netplay_wait.slint:123 +#: src/ui/gui/netplay_wait.slint:131 msgctxt "NetplayWait" msgid "Cancel" msgstr "キャンセル" diff --git a/data/translations/nl/LC_MESSAGES/gopher64.po b/data/translations/nl/LC_MESSAGES/gopher64.po index 3a1cffd..c415cb2 100644 --- a/data/translations/nl/LC_MESSAGES/gopher64.po +++ b/data/translations/nl/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-04 13:13+0000\n" +"POT-Creation-Date: 2026-06-05 12:03+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Dutch (Netherlands)\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Doneren (via GitHub)" -#: src/ui/gui/appwindow.slint:145 +#: src/ui/gui/appwindow.slint:147 msgctxt "Menu" msgid "Local Game" msgstr "Lokaal spel" -#: src/ui/gui/appwindow.slint:149 +#: src/ui/gui/appwindow.slint:151 msgctxt "Menu" msgid "Controller Config" msgstr "Controllerconfiguratie" -#: src/ui/gui/appwindow.slint:153 +#: src/ui/gui/appwindow.slint:155 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:157 +#: src/ui/gui/appwindow.slint:159 msgctxt "Menu" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/appwindow.slint:161 +#: src/ui/gui/appwindow.slint:163 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:165 +#: src/ui/gui/appwindow.slint:167 msgctxt "Menu" msgid "Settings" msgstr "Instellingen" -#: src/ui/gui/appwindow.slint:169 +#: src/ui/gui/appwindow.slint:171 msgctxt "Menu" msgid "About" msgstr "Over" @@ -345,62 +345,67 @@ msgctxt "Netplay" msgid "Provide Feedback" msgstr "Feedback geven" -#: src/ui/gui/netplay_wait.slint:14 +#: src/ui/gui/netplay_wait.slint:16 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay: wachtruimte" -#: src/ui/gui/netplay_wait.slint:26 +#: src/ui/gui/netplay_wait.slint:28 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Sessienaam:" -#: src/ui/gui/netplay_wait.slint:32 +#: src/ui/gui/netplay_wait.slint:34 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Spelnaam:" -#: src/ui/gui/netplay_wait.slint:42 +#: src/ui/gui/netplay_wait.slint:44 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Speler 1:" -#: src/ui/gui/netplay_wait.slint:46 +#: src/ui/gui/netplay_wait.slint:48 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Speler 2:" -#: src/ui/gui/netplay_wait.slint:52 +#: src/ui/gui/netplay_wait.slint:54 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Speler 3:" -#: src/ui/gui/netplay_wait.slint:56 +#: src/ui/gui/netplay_wait.slint:58 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Speler 4:" -#: src/ui/gui/netplay_wait.slint:70 +#: src/ui/gui/netplay_wait.slint:72 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Chatbericht invoeren" -#: src/ui/gui/netplay_wait.slint:81 +#: src/ui/gui/netplay_wait.slint:83 msgctxt "NetplayWait" msgid "Send Message" msgstr "Bericht verzenden" -#: src/ui/gui/netplay_wait.slint:98 +#: src/ui/gui/netplay_wait.slint:100 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Lokale invoervertraging:" #: src/ui/gui/netplay_wait.slint:115 msgctxt "NetplayWait" +msgid "Recommended: " +msgstr "Aanbevolen: " + +#: src/ui/gui/netplay_wait.slint:123 +msgctxt "NetplayWait" msgid "Start Game" msgstr "Spel starten" -#: src/ui/gui/netplay_wait.slint:123 +#: src/ui/gui/netplay_wait.slint:131 msgctxt "NetplayWait" msgid "Cancel" msgstr "Annuleren" diff --git a/data/translations/pt_BR/LC_MESSAGES/gopher64.po b/data/translations/pt_BR/LC_MESSAGES/gopher64.po index b974282..688cb9c 100644 --- a/data/translations/pt_BR/LC_MESSAGES/gopher64.po +++ b/data/translations/pt_BR/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-06-04 13:13+0000\n" +"POT-Creation-Date: 2026-06-05 12:03+0000\n" "PO-Revision-Date: 2026-05-11 18:11-3000\n" "Last-Translator: EDUARDO CARVALHO \n" "Language-Team: LANGUAGE \n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Doações (via GitHub)" -#: src/ui/gui/appwindow.slint:145 +#: src/ui/gui/appwindow.slint:147 msgctxt "Menu" msgid "Local Game" msgstr "Jogo Local" -#: src/ui/gui/appwindow.slint:149 +#: src/ui/gui/appwindow.slint:151 msgctxt "Menu" msgid "Controller Config" msgstr "Configurar Controle" -#: src/ui/gui/appwindow.slint:153 +#: src/ui/gui/appwindow.slint:155 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:157 +#: src/ui/gui/appwindow.slint:159 msgctxt "Menu" msgid "Cheats" msgstr "Trapaças" -#: src/ui/gui/appwindow.slint:161 +#: src/ui/gui/appwindow.slint:163 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:165 +#: src/ui/gui/appwindow.slint:167 msgctxt "Menu" msgid "Settings" msgstr "Configurações" -#: src/ui/gui/appwindow.slint:169 +#: src/ui/gui/appwindow.slint:171 msgctxt "Menu" msgid "About" msgstr "Sobre" @@ -346,62 +346,67 @@ msgctxt "Netplay" msgid "Provide Feedback" msgstr "Fornecer Feedback" -#: src/ui/gui/netplay_wait.slint:14 +#: src/ui/gui/netplay_wait.slint:16 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay: Aguardando Sala" -#: src/ui/gui/netplay_wait.slint:26 +#: src/ui/gui/netplay_wait.slint:28 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Nome da Sessão:" -#: src/ui/gui/netplay_wait.slint:32 +#: src/ui/gui/netplay_wait.slint:34 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Nome do Jogo:" -#: src/ui/gui/netplay_wait.slint:42 +#: src/ui/gui/netplay_wait.slint:44 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Jogador 1" -#: src/ui/gui/netplay_wait.slint:46 +#: src/ui/gui/netplay_wait.slint:48 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Jogador 2:" -#: src/ui/gui/netplay_wait.slint:52 +#: src/ui/gui/netplay_wait.slint:54 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Jogador 3:" -#: src/ui/gui/netplay_wait.slint:56 +#: src/ui/gui/netplay_wait.slint:58 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Jogador 4:" -#: src/ui/gui/netplay_wait.slint:70 +#: src/ui/gui/netplay_wait.slint:72 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Escrever mensagem no chat" -#: src/ui/gui/netplay_wait.slint:81 +#: src/ui/gui/netplay_wait.slint:83 msgctxt "NetplayWait" msgid "Send Message" msgstr "Enviar Mensagem" -#: src/ui/gui/netplay_wait.slint:98 +#: src/ui/gui/netplay_wait.slint:100 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Atraso de entrada local:" #: src/ui/gui/netplay_wait.slint:115 msgctxt "NetplayWait" +msgid "Recommended: " +msgstr "Recomendado: " + +#: src/ui/gui/netplay_wait.slint:123 +msgctxt "NetplayWait" msgid "Start Game" msgstr "Iniciar jogo" -#: src/ui/gui/netplay_wait.slint:123 +#: src/ui/gui/netplay_wait.slint:131 msgctxt "NetplayWait" msgid "Cancel" msgstr "Cancelar" diff --git a/data/translations/ru/LC_MESSAGES/gopher64.po b/data/translations/ru/LC_MESSAGES/gopher64.po index 7ddeba6..78f8ccf 100644 --- a/data/translations/ru/LC_MESSAGES/gopher64.po +++ b/data/translations/ru/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-04 13:13+0000\n" +"POT-Creation-Date: 2026-06-05 12:03+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Russian\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Пожертвовать (через GitHub)" -#: src/ui/gui/appwindow.slint:145 +#: src/ui/gui/appwindow.slint:147 msgctxt "Menu" msgid "Local Game" msgstr "Локальная игра" -#: src/ui/gui/appwindow.slint:149 +#: src/ui/gui/appwindow.slint:151 msgctxt "Menu" msgid "Controller Config" msgstr "Настройка контроллера" -#: src/ui/gui/appwindow.slint:153 +#: src/ui/gui/appwindow.slint:155 msgctxt "Menu" msgid "Netplay" msgstr "Сетевая игра" -#: src/ui/gui/appwindow.slint:157 +#: src/ui/gui/appwindow.slint:159 msgctxt "Menu" msgid "Cheats" msgstr "Читы" -#: src/ui/gui/appwindow.slint:161 +#: src/ui/gui/appwindow.slint:163 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:165 +#: src/ui/gui/appwindow.slint:167 msgctxt "Menu" msgid "Settings" msgstr "Настройки" -#: src/ui/gui/appwindow.slint:169 +#: src/ui/gui/appwindow.slint:171 msgctxt "Menu" msgid "About" msgstr "О программе" @@ -344,62 +344,67 @@ msgctxt "Netplay" msgid "Provide Feedback" msgstr "Оставить отзыв" -#: src/ui/gui/netplay_wait.slint:14 +#: src/ui/gui/netplay_wait.slint:16 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Сетевая игра: Комната ожидания" -#: src/ui/gui/netplay_wait.slint:26 +#: src/ui/gui/netplay_wait.slint:28 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Имя сессии:" -#: src/ui/gui/netplay_wait.slint:32 +#: src/ui/gui/netplay_wait.slint:34 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Название игры:" -#: src/ui/gui/netplay_wait.slint:42 +#: src/ui/gui/netplay_wait.slint:44 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Игрок 1:" -#: src/ui/gui/netplay_wait.slint:46 +#: src/ui/gui/netplay_wait.slint:48 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Игрок 2:" -#: src/ui/gui/netplay_wait.slint:52 +#: src/ui/gui/netplay_wait.slint:54 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Игрок 3:" -#: src/ui/gui/netplay_wait.slint:56 +#: src/ui/gui/netplay_wait.slint:58 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Игрок 4:" -#: src/ui/gui/netplay_wait.slint:70 +#: src/ui/gui/netplay_wait.slint:72 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Введите сообщение чата" -#: src/ui/gui/netplay_wait.slint:81 +#: src/ui/gui/netplay_wait.slint:83 msgctxt "NetplayWait" msgid "Send Message" msgstr "Отправить сообщение" -#: src/ui/gui/netplay_wait.slint:98 +#: src/ui/gui/netplay_wait.slint:100 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Локальная задержка ввода:" #: src/ui/gui/netplay_wait.slint:115 msgctxt "NetplayWait" +msgid "Recommended: " +msgstr "Рекомендуется: " + +#: src/ui/gui/netplay_wait.slint:123 +msgctxt "NetplayWait" msgid "Start Game" msgstr "Начать игру" -#: src/ui/gui/netplay_wait.slint:123 +#: src/ui/gui/netplay_wait.slint:131 msgctxt "NetplayWait" msgid "Cancel" msgstr "Отмена" diff --git a/src/device/vi.rs b/src/device/vi.rs index 5475a95..7ba14f3 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -110,13 +110,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u let current_origin = device.vi.regs[reg as usize]; device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); if current_origin != device.vi.regs[reg as usize] { - if let Some(netplay) = &device.netplay { - device.netplay.as_mut().unwrap().inputs = if netplay.requests.is_empty() { - netplay::process_netplay(device) - } else { - netplay::process_requests(device) - }; - } else { + if device.netplay.is_none() { savestates::process_savestates(device); } let _ = device.ui.video.fps_tx.as_ref().unwrap().try_send(true); @@ -168,6 +162,14 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { } device.frame_counter += 1; + if let Some(netplay) = &device.netplay { + device.netplay.as_mut().unwrap().inputs = if netplay.requests.is_empty() { + netplay::process_netplay(device) + } else { + netplay::process_requests(device) + }; + } + if device.netplay.is_none() && paused { if retroachievements::get_hardcore() { ui::video::onscreen_message( diff --git a/src/lib.rs b/src/lib.rs index fe0c6d9..1accd64 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -174,13 +174,16 @@ pub async fn run(args: Args, arg_count: usize) -> std::io::Result<()> { && let Some(number_of_players) = args.netplay_number_of_players && let Some(input_delay) = args.netplay_input_delay { - device.netplay = Some(netplay::init( + device.netplay = netplay::init( server_addr, player_number, number_of_players, input_delay, device::cart::rom::is_system_pal(rom_contents[0x3E]), - )); + ); + if device.netplay.is_none() { + return Err(Error::other("Failed to connect to netplay server")); + } } else { for i in 0..4 { if device.ui.config.input.transfer_pak[i] diff --git a/src/netplay.rs b/src/netplay.rs index f4970f8..5e85ed9 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -42,7 +42,7 @@ pub struct Netplay { pub peers: Vec, pub player_number: usize, pub connected: [bool; 4], - pub data: std::collections::HashMap>, + pub received_messages: std::collections::VecDeque>, pub inputs: Vec<(ui::input::InputData, ggrs::InputStatus)>, pub requests: std::collections::VecDeque>, } @@ -55,21 +55,42 @@ struct NetplayMessage { fn send_message(netplay: &mut Netplay, message: NetplayMessage) { let data = postcard::to_stdvec(&message).unwrap(); + let chunks = data.chunks(16384).collect::>(); for peer in netplay.peers.iter() { - netplay.reliable_channel.send(data.clone().into(), *peer); + for chunk in chunks.iter() { + netplay.reliable_channel.send(chunk.to_vec().into(), *peer); + } } } fn receive_message(netplay: &mut Netplay, name: &str) -> Vec { - while !netplay.data.contains_key(name) { - let messages = netplay.reliable_channel.receive(); - for (_, data) in messages { - let message = postcard::from_bytes::(&data).unwrap(); - netplay.data.insert(message.name, message.data); + let timeout = std::time::Duration::from_secs(10); + let now = std::time::Instant::now(); + let mut message = vec![]; + loop { + netplay.received_messages.extend( + netplay + .reliable_channel + .receive() + .iter() + .map(|(_, data)| data.to_vec()), + ); + + while !netplay.received_messages.is_empty() { + if let Some(data) = netplay.received_messages.pop_front() { + message.extend(data); + + if let Ok(decoded_message) = postcard::from_bytes::(&message) { + return decoded_message.data; + } + } + } + + if now.elapsed() > timeout { + panic!("Could not receive message for {name}"); } std::thread::sleep(std::time::Duration::from_millis(1)); } - netplay.data.remove(name).unwrap() } fn send_player_number( @@ -94,6 +115,8 @@ fn get_player_numbers( ) -> std::collections::BTreeMap> { let mut player_numbers = std::collections::BTreeMap::new(); player_numbers.insert(local_player_number, None); + let timeout = std::time::Duration::from_secs(10); + let now = std::time::Instant::now(); while player_numbers.len() < number_of_peers + 1 { for (peer, data) in channel.receive() { let message = postcard::from_bytes::(&data).unwrap(); @@ -104,6 +127,9 @@ fn get_player_numbers( ); } } + if now.elapsed() > timeout { + return std::collections::BTreeMap::new(); + } std::thread::sleep(std::time::Duration::from_millis(1)); } player_numbers @@ -253,7 +279,7 @@ pub fn init( number_of_players: usize, input_delay: usize, pal: bool, -) -> Netplay { +) -> Option { let (socket, loop_fut) = matchbox_socket::WebRtcSocketBuilder::new(server_addr) .add_unreliable_channel() .add_reliable_channel() @@ -279,6 +305,10 @@ pub fn init( send_player_number(&mut reliable_channel, peers.clone(), player_number); let player_numbers = get_player_numbers(&mut reliable_channel, player_number, peers.len()); + if player_numbers.len() != number_of_players { + eprintln!("Could not get player numbers"); + return None; + } session_builder = session_builder .with_num_players(number_of_players) .unwrap() @@ -301,19 +331,24 @@ pub fn init( break; } if now.elapsed() > timeout { - break; + eprintln!("Could not connect to netplay peers"); + return None; } std::thread::sleep(std::time::Duration::from_millis(10)); } let mut session = session_builder.start_p2p_session(matchbox_socket).unwrap(); let now = std::time::Instant::now(); - while session.current_state() != ggrs::SessionState::Running && now.elapsed() < timeout { + while session.current_state() != ggrs::SessionState::Running { session.poll_remote_clients(); + if now.elapsed() > timeout { + eprintln!("Could not start netplay session"); + return None; + } std::thread::sleep(std::time::Duration::from_millis(10)); } - Netplay { + Some(Netplay { session, reliable_channel, peers, @@ -324,8 +359,8 @@ pub fn init( number_of_players > 2, number_of_players > 3, ], - data: std::collections::HashMap::new(), inputs: Vec::new(), requests: std::collections::VecDeque::new(), - } + received_messages: std::collections::VecDeque::new(), + }) } diff --git a/src/savestates.rs b/src/savestates.rs index efd90f6..7e7a726 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -216,14 +216,23 @@ pub fn load_savestate(device: &mut device::Device, rewind: bool, rewind_frame: O } let state_data = if rewind { - if let Ok(mut pool) = device.savestate.rewind_pool.lock() { - if let Some(rewind_frame) = rewind_frame { - pool.remove(&rewind_frame) - } else if let Some((_key, state)) = pool.pop_last() { - Some(state) - } else { - None + if let Some(rewind_frame) = rewind_frame { + let timeout = std::time::Duration::from_secs(1); + let now = std::time::Instant::now(); + loop { + if let Ok(mut pool) = device.savestate.rewind_pool.lock() + && pool.contains_key(&rewind_frame) + { + break pool.remove(&rewind_frame); + } + if now.elapsed() > timeout { + break None; + } } + } else if let Ok(mut pool) = device.savestate.rewind_pool.lock() + && let Some((_key, state)) = pool.pop_last() + { + Some(state) } else { None } @@ -366,15 +375,26 @@ pub fn load_savestate(device: &mut device::Device, rewind: bool, rewind_frame: O ); } } else { - let message = if !rewind { - &format!( - "Failed to load savestate from slot {}", - device.ui.storage.save_state_slot + let (message, length) = if !rewind { + ( + format!( + "Failed to load savestate from slot {}", + device.ui.storage.save_state_slot + ), + ui::video::MESSAGE_LENGTH_MESSAGE_VERY_SHORT, + ) + } else if device.netplay.is_none() { + ( + "Failed to rewind".to_string(), + ui::video::MESSAGE_LENGTH_MESSAGE_VERY_SHORT, ) } else { - "Failed to rewind" + ( + "Failed to rollback".to_string(), + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, + ) }; - ui::video::onscreen_message(message, ui::video::MESSAGE_LENGTH_MESSAGE_VERY_SHORT); + ui::video::onscreen_message(&message, length); } } diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index bc9b219..43fba92 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -117,6 +117,8 @@ export component AppWindow inherits Window { in-out property netplay_players <=> NetplayWaitData.players; in-out property netplay_chat_text <=> NetplayWaitData.chat_text; in-out property netplay_input_delay <=> NetplayWaitData.input_delay; + in-out property netplay_recommended_delay <=> NetplayWaitData.recommended_delay; + in-out property netplay_game_pal <=> NetplayWaitData.game_pal; private property popup_message; private property popup_has_close; diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint index 298bff4..0acae03 100644 --- a/src/ui/gui/netplay_wait.slint +++ b/src/ui/gui/netplay_wait.slint @@ -8,6 +8,8 @@ export global NetplayWaitData { in-out property can_start; in-out property chat_text; in-out property input_delay; + in-out property recommended_delay; + in-out property game_pal; } export component NetplayWait inherits Page { @@ -108,6 +110,12 @@ export component NetplayWait inherits Page { } } + + Text { + text: @tr("Recommended: ") + NetplayWaitData.recommended_delay; + horizontal-alignment: center; + vertical-alignment: center; + } } HorizontalBox { alignment: center; diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index f17ca65..abe1fcf 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -67,6 +67,7 @@ fn select_rom(weak: slint::Weak, rom_dir: slint::SharedString) { if let Some(rom_contents) = device::get_rom_contents(&file) { let hash = device::cart::rom::calculate_hash(&rom_contents); let mut game_name = ui::storage::get_game_name(&rom_contents); + let pal = device::cart::rom::is_system_pal(rom_contents[0x3E]); let game_crc = ui::storage::get_game_crc(&rom_contents); let cheats = ui::config::Cheats::new(); let mut parsed_cheats = String::new(); @@ -81,6 +82,7 @@ fn select_rom(weak: slint::Weak, rom_dir: slint::SharedString) { weak.upgrade_in_event_loop(move |handle| { handle.set_netplay_game_name(game_name.into()); + handle.set_netplay_game_pal(pal); handle.set_netplay_game_hash(hash.into()); handle.set_netplay_game_cheats(parsed_cheats.into()); handle.set_netplay_rom_path(file.to_str().unwrap().into()); @@ -108,6 +110,7 @@ fn setup_create_window( netplay_read_receiver: tokio::sync::broadcast::Receiver>, netplay_read_sender: tokio::sync::broadcast::Sender>, netplay_write_receiver: tokio::sync::broadcast::Receiver>, + close_ping_rx: tokio::sync::broadcast::Receiver<()>, ) { let weak = app.as_weak(); app.on_netplay_create_session( @@ -121,6 +124,7 @@ fn setup_create_window( create_session( netplay_write_sender.clone(), netplay_read_receiver.resubscribe(), + close_ping_rx.resubscribe(), session_name.to_string(), player_name.to_string(), game_name.to_string(), @@ -241,6 +245,7 @@ fn update_sessions( fn create_session( netplay_write_sender: tokio::sync::broadcast::Sender>, mut netplay_read_receiver: tokio::sync::broadcast::Receiver>, + close_ping_rx: tokio::sync::broadcast::Receiver<()>, session_name: String, player_name: String, game_name: String, @@ -320,6 +325,7 @@ fn create_session( setup_wait_window( netplay_write_sender, netplay_read_receiver, + close_ping_rx, session.server_address.as_ref().unwrap().clone(), session_name.into(), session.game_name.as_ref().unwrap().into(), @@ -387,10 +393,76 @@ fn join_session( netplay_write_sender.send(Some(join_session)).unwrap(); } +fn update_ping( + server_addr: String, + mut close_ping_rx: tokio::sync::broadcast::Receiver<()>, + weak_app: slint::Weak, +) { + let (mut socket, loop_fut) = matchbox_socket::WebRtcSocketBuilder::new(server_addr) + .add_unreliable_channel() + .build(); + + tokio::spawn(async move { + if let Err(e) = loop_fut.await { + eprintln!("WebRTC loop failed: {}", e); + } + }); + let channel = socket.take_channel(0).unwrap(); + let (mut write, mut read) = channel.split(); + tokio::spawn(async move { + loop { + if close_ping_rx.try_recv().is_ok() { + break; + } + socket.update_peers(); + for peer in socket.connected_peers() { + let now = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_millis(); + let _ = write.send((peer, now.to_be_bytes().to_vec().into())).await; + } + tokio::time::sleep(std::time::Duration::from_secs(1)).await; + } + socket.close(); + }); + tokio::spawn(async move { + let mut pings = vec![]; + while let Some((_, data)) = read.next().await { + let now = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_millis(); + let time = u128::from_be_bytes(data.as_ref().try_into().unwrap()); + let ping = now - time; + pings.push(ping); + if pings.len() > 10 { + // once we have 10 samples, remove the highest 2 and return the next highest + pings.sort(); + pings.truncate(pings.len() - 2); + let ping = *pings.last().unwrap(); + pings.clear(); + weak_app + .upgrade_in_event_loop(move |handle| { + let refresh_rate = if handle.get_netplay_game_pal() { + 50.0 + } else { + 60.0 + }; + let recommendation = (ping as f64 / (1000.0 / refresh_rate)) as i32 + 1; + handle.set_netplay_recommended_delay(recommendation.to_string().into()); + }) + .unwrap(); + } + } + }); +} + #[allow(clippy::too_many_arguments)] fn setup_wait_window( netplay_write_sender: tokio::sync::broadcast::Sender>, mut netplay_read_receiver: tokio::sync::broadcast::Receiver>, + close_ping_rx: tokio::sync::broadcast::Receiver<()>, server_addr: String, session_name: slint::SharedString, game_name: slint::SharedString, @@ -398,14 +470,8 @@ fn setup_wait_window( game_settings: ui::GameSettings, app: &AppWindow, ) { - let (mut socket, loop_fut) = matchbox_socket::WebRtcSocketBuilder::new(server_addr.clone()) - .add_unreliable_channel() - .build(); - tokio::spawn(async move { - if let Err(e) = loop_fut.await { - eprintln!("WebRTC loop failed: {}", e); - } - }); + app.set_netplay_recommended_delay("Calculating...".into()); + update_ping(server_addr.clone(), close_ping_rx, app.as_weak()); app.set_netplay_session_name(session_name); app.set_netplay_game_name(game_name); @@ -503,7 +569,6 @@ fn setup_wait_window( handle.invoke_netplay_close(); }) .unwrap(); - socket.close(); return; } else { weak_app @@ -545,6 +610,7 @@ fn setup_join_window( netplay_read_receiver: tokio::sync::broadcast::Receiver>, netplay_read_sender: tokio::sync::broadcast::Sender>, netplay_write_receiver: tokio::sync::broadcast::Receiver>, + close_ping_rx: tokio::sync::broadcast::Receiver<()>, ) { let _ = netplay_write_sender.send(None); // close current websocket if any manage_websocket( @@ -607,6 +673,7 @@ fn setup_join_window( setup_wait_window( sender, receiver, + close_ping_rx.resubscribe(), session.server_address.as_ref().unwrap().clone(), session_name.into(), session.game_name.as_ref().unwrap().into(), @@ -711,16 +778,23 @@ pub fn netplay_window(app: &AppWindow) { tokio::sync::broadcast::Receiver>, ) = tokio::sync::broadcast::channel(5); + let (close_ping_tx, close_ping_rx): ( + tokio::sync::broadcast::Sender<()>, + tokio::sync::broadcast::Receiver<()>, + ) = tokio::sync::broadcast::channel(5); + let weak_app = app.as_weak(); let write_sender_create = netplay_write_sender.clone(); let read_receiver_create = netplay_read_receiver.resubscribe(); let read_sender_create = netplay_read_sender.clone(); let write_receiver_create = netplay_write_receiver.resubscribe(); + let close_ping_create = close_ping_rx.resubscribe(); app.on_create_session_button_clicked(move || { let write_sender = write_sender_create.clone(); let read_receiver = read_receiver_create.resubscribe(); let read_sender = read_sender_create.clone(); let write_receiver = write_receiver_create.resubscribe(); + let close_ping_rx = close_ping_create.resubscribe(); weak_app .upgrade_in_event_loop(move |handle| { save_settings(&handle); @@ -736,6 +810,7 @@ pub fn netplay_window(app: &AppWindow) { read_receiver, read_sender, write_receiver, + close_ping_rx, ); }) .unwrap(); @@ -744,11 +819,13 @@ pub fn netplay_window(app: &AppWindow) { let weak_app = app.as_weak(); let write_sender_join = netplay_write_sender.clone(); let read_sender_join = netplay_read_sender.clone(); + let close_ping_join = close_ping_rx.resubscribe(); app.on_join_session_button_clicked(move || { let write_sender = write_sender_join.clone(); let read_receiver = netplay_read_receiver.resubscribe(); let read_sender = read_sender_join.clone(); let write_receiver = netplay_write_receiver.resubscribe(); + let close_ping_rx = close_ping_join.resubscribe(); weak_app .upgrade_in_event_loop(move |handle| { save_settings(&handle); @@ -758,6 +835,7 @@ pub fn netplay_window(app: &AppWindow) { read_receiver, read_sender, write_receiver, + close_ping_rx, ); }) .unwrap(); @@ -783,6 +861,7 @@ pub fn netplay_window(app: &AppWindow) { .unwrap(); let _ = write_sender.send(None); // close current websocket if any let _ = read_sender.send(None); // close current receiver if any + let _ = close_ping_tx.send(()); // close ping }); app.on_netplay_discord_button_clicked(move || { From 9140138843e2e292373095f7c4a6f6ac1e801b21 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 5 Jun 2026 17:37:56 +0200 Subject: [PATCH 0988/1117] Don't render frame during roll forward (#1006) * no update check on android * more * more * more * more * more --- src/device/vi.rs | 10 ++-- src/netplay.rs | 119 ++++++++++++++++++++++++----------------------- src/ui/audio.rs | 4 +- src/ui/gui.rs | 7 ++- 4 files changed, 74 insertions(+), 66 deletions(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index 7ba14f3..e98caf5 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -130,7 +130,9 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { cheats::execute_cheats(device, device.cheats.cheats.clone()); } - ui::video::render_frame(); + if !netplay::netplay_in_rollback(device.netplay.as_ref()) { + ui::video::render_frame(); + } let _ = device.ui.video.vis_tx.as_ref().unwrap().try_send(true); retroachievements::do_frame(); @@ -149,15 +151,15 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { reset_pace_deadline(device); } - if (device.netplay.is_none() || netplay::pending_frames(device.netplay.as_ref().unwrap()) == 0) + if !netplay::netplay_in_rollback(device.netplay.as_ref()) && device.frame_counter.is_multiple_of(device.vi.limit_freq) && device.vi.enable_speed_limiter { speed_limiter(device); } - unsafe { sdl3_sys::events::SDL_PumpEvents() }; - if device.netplay.is_none() || netplay::pending_frames(device.netplay.as_ref().unwrap()) == 0 { + if !netplay::netplay_in_rollback(device.netplay.as_ref()) { + unsafe { sdl3_sys::events::SDL_PumpEvents() }; ui::video::update_screen(); } device.frame_counter += 1; diff --git a/src/netplay.rs b/src/netplay.rs index 5e85ed9..bae7dc1 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -42,7 +42,8 @@ pub struct Netplay { pub peers: Vec, pub player_number: usize, pub connected: [bool; 4], - pub received_messages: std::collections::VecDeque>, + pub messages: std::collections::HashMap>, + pub received_data: std::collections::VecDeque>, pub inputs: Vec<(ui::input::InputData, ggrs::InputStatus)>, pub requests: std::collections::VecDeque>, } @@ -68,7 +69,7 @@ fn receive_message(netplay: &mut Netplay, name: &str) -> Vec { let now = std::time::Instant::now(); let mut message = vec![]; loop { - netplay.received_messages.extend( + netplay.received_data.extend( netplay .reliable_channel .receive() @@ -76,15 +77,21 @@ fn receive_message(netplay: &mut Netplay, name: &str) -> Vec { .map(|(_, data)| data.to_vec()), ); - while !netplay.received_messages.is_empty() { - if let Some(data) = netplay.received_messages.pop_front() { + while !netplay.received_data.is_empty() { + if let Some(data) = netplay.received_data.pop_front() { message.extend(data); if let Ok(decoded_message) = postcard::from_bytes::(&message) { - return decoded_message.data; + netplay + .messages + .insert(decoded_message.name, decoded_message.data); + message.clear(); } } } + if let Some(data) = netplay.messages.remove(name) { + return data; + } if now.elapsed() > timeout { panic!("Could not receive message for {name}"); @@ -110,29 +117,17 @@ fn send_player_number( fn get_player_numbers( channel: &mut matchbox_socket::WebRtcChannel, - local_player_number: usize, - number_of_peers: usize, -) -> std::collections::BTreeMap> { - let mut player_numbers = std::collections::BTreeMap::new(); - player_numbers.insert(local_player_number, None); - let timeout = std::time::Duration::from_secs(10); - let now = std::time::Instant::now(); - while player_numbers.len() < number_of_peers + 1 { - for (peer, data) in channel.receive() { - let message = postcard::from_bytes::(&data).unwrap(); - if message.name == "player_number" { - player_numbers.insert( - usize::from_be_bytes(message.data.try_into().unwrap()), - Some(peer), - ); - } + player_numbers: &mut std::collections::BTreeMap>, +) { + for (peer, data) in channel.receive() { + let message = postcard::from_bytes::(&data).unwrap(); + if message.name == "player_number" { + player_numbers.insert( + usize::from_be_bytes(message.data.try_into().unwrap()), + Some(peer), + ); } - if now.elapsed() > timeout { - return std::collections::BTreeMap::new(); - } - std::thread::sleep(std::time::Duration::from_millis(1)); } - player_numbers } pub fn send_rtc(netplay: &mut Netplay, rtc: i64) { @@ -175,7 +170,7 @@ pub fn receive_save(netplay: &mut Netplay, save_type: &str, save_data: &mut Vec< *save_data = message; } -pub fn pending_frames(netplay: &Netplay) -> usize { +fn pending_frames(netplay: &Netplay) -> usize { netplay .requests .iter() @@ -183,6 +178,14 @@ pub fn pending_frames(netplay: &Netplay) -> usize { .count() } +pub fn netplay_in_rollback(netplay: Option<&Netplay>) -> bool { + if let Some(netplay) = netplay { + pending_frames(netplay) != 0 + } else { + false + } +} + pub fn process_requests( device: &mut device::Device, ) -> Vec<(ui::input::InputData, ggrs::InputStatus)> { @@ -293,49 +296,50 @@ pub fn init( let mut reliable_channel = matchbox_socket.0.take_channel(1).unwrap(); let now = std::time::Instant::now(); let timeout = std::time::Duration::from_secs(10); - let mut peers = vec![]; - let mut session_builder = ggrs::SessionBuilder::::new(); + let mut player_numbers = std::collections::BTreeMap::new(); + player_numbers.insert(player_number, None); loop { matchbox_socket.0.update_peers(); - peers = matchbox_socket + let peers = matchbox_socket .0 .connected_peers() .collect::>(); - if peers.len() == number_of_players - 1 { - send_player_number(&mut reliable_channel, peers.clone(), player_number); - let player_numbers = - get_player_numbers(&mut reliable_channel, player_number, peers.len()); - if player_numbers.len() != number_of_players { - eprintln!("Could not get player numbers"); - return None; - } - session_builder = session_builder - .with_num_players(number_of_players) - .unwrap() - .with_input_delay(input_delay) - .with_fps(if pal { 50 } else { 60 }) - .unwrap() - .with_desync_detection_mode(ggrs::DesyncDetection::On { interval: 60 }); - for (i, peer) in player_numbers.iter() { - if let Some(peer) = peer { - session_builder = session_builder - .add_player(ggrs::PlayerType::Remote(*peer), *i) - .unwrap(); - } else { - session_builder = session_builder - .add_player(ggrs::PlayerType::Local, *i) - .unwrap(); - } - } + send_player_number(&mut reliable_channel, peers, player_number); + get_player_numbers(&mut reliable_channel, &mut player_numbers); + if player_numbers.len() == number_of_players { break; } + if now.elapsed() > timeout { eprintln!("Could not connect to netplay peers"); return None; } std::thread::sleep(std::time::Duration::from_millis(10)); } + + let mut session_builder = ggrs::SessionBuilder::::new() + .with_num_players(number_of_players) + .unwrap() + .with_input_delay(input_delay) + .with_fps(if pal { 50 } else { 60 }) + .unwrap() + .with_desync_detection_mode(ggrs::DesyncDetection::On { interval: 60 }); + + let mut peers = vec![]; + for (i, peer) in player_numbers.iter() { + if let Some(peer) = peer { + session_builder = session_builder + .add_player(ggrs::PlayerType::Remote(*peer), *i) + .unwrap(); + peers.push(*peer); + } else { + session_builder = session_builder + .add_player(ggrs::PlayerType::Local, *i) + .unwrap(); + } + } + let mut session = session_builder.start_p2p_session(matchbox_socket).unwrap(); let now = std::time::Instant::now(); @@ -361,6 +365,7 @@ pub fn init( ], inputs: Vec::new(), requests: std::collections::VecDeque::new(), - received_messages: std::collections::VecDeque::new(), + received_data: std::collections::VecDeque::new(), + messages: std::collections::HashMap::new(), }) } diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 4226872..47c5f30 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -174,9 +174,7 @@ pub fn play_audio(device: &device::Device, dram_addr: usize, length: u64) { if device.ui.audio.audio_stream.is_null() { return; } - if let Some(netplay) = &device.netplay - && netplay::pending_frames(netplay) != 0 - { + if netplay::netplay_in_rollback(device.netplay.as_ref()) { return; } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index c7d5268..162067f 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -507,8 +507,11 @@ fn about_window(app: &AppWindow) { }); app.set_version(format!("Version: {}", env!("GIT_DESCRIBE")).into()); - //flatpak and itch.io have their own update checking mechanism - if std::env::var("FLATPAK_ID").is_err() && std::env::var("ITCHIO_APP").is_err() { + //flatpak, itch.io, and android have their own update checking mechanism + if std::env::var("FLATPAK_ID").is_err() + && std::env::var("ITCHIO_APP").is_err() + && cfg!(not(target_os = "android")) + { check_latest_version(app.as_weak()); } } From 077c1f439c7fe5c524087498f36299c2f90d2d16 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 5 Jun 2026 19:21:29 +0200 Subject: [PATCH 0989/1117] is_system_pal (#1007) --- src/device/cart/rom.rs | 6 +++--- src/lib.rs | 2 +- src/ui/netplay.rs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 73476d8..369648e 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -137,7 +137,7 @@ pub fn init(device: &mut device::Device, rom_file: &[u8]) { device.cart.sc64.cfg[device::cart::sc64::SC64_BOOTLOADER_SWITCH as usize] = 1; device.cart.rom = rom_file.to_vec(); - device.cart.pal = is_system_pal(device.cart.rom[0x3E]); + device.cart.pal = is_system_pal(&device.cart.rom); set_cic(device); device.ui.game_hash = calculate_hash(&device.cart.rom); @@ -148,10 +148,10 @@ pub fn init(device: &mut device::Device, rom_file: &[u8]) { } } -pub fn is_system_pal(country: u8) -> bool { +pub fn is_system_pal(rom_contents: &[u8]) -> bool { let pal_codes: [u8; 8] = *b"DFIPSUXY"; for i in pal_codes { - if country == i { + if rom_contents[0x3E] == i { return true; } } diff --git a/src/lib.rs b/src/lib.rs index 1accd64..0ca1027 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -179,7 +179,7 @@ pub async fn run(args: Args, arg_count: usize) -> std::io::Result<()> { player_number, number_of_players, input_delay, - device::cart::rom::is_system_pal(rom_contents[0x3E]), + device::cart::rom::is_system_pal(&rom_contents), ); if device.netplay.is_none() { return Err(Error::other("Failed to connect to netplay server")); diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index abe1fcf..7ee3571 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -67,7 +67,7 @@ fn select_rom(weak: slint::Weak, rom_dir: slint::SharedString) { if let Some(rom_contents) = device::get_rom_contents(&file) { let hash = device::cart::rom::calculate_hash(&rom_contents); let mut game_name = ui::storage::get_game_name(&rom_contents); - let pal = device::cart::rom::is_system_pal(rom_contents[0x3E]); + let pal = device::cart::rom::is_system_pal(&rom_contents); let game_crc = ui::storage::get_game_crc(&rom_contents); let cheats = ui::config::Cheats::new(); let mut parsed_cheats = String::new(); From 19dc966abdc45aaf1985f569c38458a4d9241319 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 5 Jun 2026 23:35:59 +0200 Subject: [PATCH 0990/1117] use different rooms for lobby and game (#1009) --- src/netplay.rs | 9 +++++---- src/ui/netplay.rs | 7 ++++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index bae7dc1..3cb291f 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -283,10 +283,11 @@ pub fn init( input_delay: usize, pal: bool, ) -> Option { - let (socket, loop_fut) = matchbox_socket::WebRtcSocketBuilder::new(server_addr) - .add_unreliable_channel() - .add_reliable_channel() - .build(); + let (socket, loop_fut) = + matchbox_socket::WebRtcSocketBuilder::new(format!("{}/game", server_addr)) + .add_unreliable_channel() + .add_reliable_channel() + .build(); tokio::spawn(async move { if let Err(e) = loop_fut.await { eprintln!("WebRTC loop failed: {}", e); diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 7ee3571..730c233 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -398,9 +398,10 @@ fn update_ping( mut close_ping_rx: tokio::sync::broadcast::Receiver<()>, weak_app: slint::Weak, ) { - let (mut socket, loop_fut) = matchbox_socket::WebRtcSocketBuilder::new(server_addr) - .add_unreliable_channel() - .build(); + let (mut socket, loop_fut) = + matchbox_socket::WebRtcSocketBuilder::new(format!("{}/lobby", server_addr)) + .add_unreliable_channel() + .build(); tokio::spawn(async move { if let Err(e) = loop_fut.await { From c89c5d1cc3c4f03ea3b52bdc519e9fa2d68ef8c8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 6 Jun 2026 08:22:52 +0200 Subject: [PATCH 0991/1117] increase disconnect timeout (#1016) * increase disconnect timeout * more --- src/netplay.rs | 17 ++++++++++++----- src/ui/netplay.rs | 7 +++---- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index 3cb291f..3ec8e8b 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -230,6 +230,7 @@ pub fn process_netplay( ggrs::GgrsEvent::Synchronizing { .. } => {} ggrs::GgrsEvent::Synchronized { .. } => {} ggrs::GgrsEvent::Disconnected { .. } => { + eprintln!("peer disconnected"); ui::video::onscreen_message( "Peer disconnected", ui::video::MESSAGE_LENGTH_MESSAGE_LONG, @@ -245,6 +246,7 @@ pub fn process_netplay( println!("wait recommendation: skip_frames={}", skip_frames); } ggrs::GgrsEvent::DesyncDetected { .. } => { + eprintln!("desync detected"); ui::video::onscreen_message( "Desync detected", ui::video::MESSAGE_LENGTH_MESSAGE_LONG, @@ -283,11 +285,10 @@ pub fn init( input_delay: usize, pal: bool, ) -> Option { - let (socket, loop_fut) = - matchbox_socket::WebRtcSocketBuilder::new(format!("{}/game", server_addr)) - .add_unreliable_channel() - .add_reliable_channel() - .build(); + let (socket, loop_fut) = matchbox_socket::WebRtcSocketBuilder::new(server_addr) + .add_unreliable_channel() + .add_reliable_channel() + .build(); tokio::spawn(async move { if let Err(e) = loop_fut.await { eprintln!("WebRTC loop failed: {}", e); @@ -327,6 +328,12 @@ pub fn init( .unwrap() .with_desync_detection_mode(ggrs::DesyncDetection::On { interval: 60 }); + #[cfg(debug_assertions)] + { + session_builder = + session_builder.with_disconnect_timeout(std::time::Duration::from_secs(10)); + } + let mut peers = vec![]; for (i, peer) in player_numbers.iter() { if let Some(peer) = peer { diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 730c233..7ee3571 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -398,10 +398,9 @@ fn update_ping( mut close_ping_rx: tokio::sync::broadcast::Receiver<()>, weak_app: slint::Weak, ) { - let (mut socket, loop_fut) = - matchbox_socket::WebRtcSocketBuilder::new(format!("{}/lobby", server_addr)) - .add_unreliable_channel() - .build(); + let (mut socket, loop_fut) = matchbox_socket::WebRtcSocketBuilder::new(server_addr) + .add_unreliable_channel() + .build(); tokio::spawn(async move { if let Err(e) = loop_fut.await { From 1d6e4154223df479e37f4d42f0b35561b6f1167c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 6 Jun 2026 11:06:40 +0200 Subject: [PATCH 0992/1117] use wss (#1017) * use wss * more --- Cargo.lock | 3 ++ Cargo.toml | 2 +- src/ui/netplay.rs | 90 +++++++++++++++++++++++++++++++++-------------- 3 files changed, 68 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5c6159b..9c376d5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7524,7 +7524,9 @@ checksum = "8f72a05e828585856dacd553fba484c242c46e391fb0e58917c942ee9202915c" dependencies = [ "futures-util", "log", + "native-tls", "tokio", + "tokio-native-tls", "tungstenite 0.29.0", ] @@ -7738,6 +7740,7 @@ dependencies = [ "http", "httparse", "log", + "native-tls", "rand 0.9.4", "sha1 0.10.6", "thiserror 2.0.18", diff --git a/Cargo.toml b/Cargo.toml index 7a7ed7c..514b83f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,7 +24,7 @@ spin_sleep = "1.3" encoding_rs = "0.8" mimalloc = "0.1" regex = "1.11" -tokio-tungstenite = "0.29" +tokio-tungstenite = { version = "0.29", features = ["native-tls"] } matchbox_socket = "0.14" ggrs = { version = "0.12", features = ["sync-send"] } rustc-hash = "2.1" diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 7ee3571..0a4a8a4 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -44,6 +44,18 @@ struct NetplayLobbyMessage { message: Option, } +#[derive(serde::Serialize, serde::Deserialize)] +enum PingType { + Ping, + Pong, +} + +#[derive(serde::Serialize, serde::Deserialize)] +struct NetplayPingMessage { + message_type: PingType, + timestamp: u128, +} + pub fn get_auth_token() -> String { let now_utc = std::time::SystemTime::now() .duration_since(std::time::UNIX_EPOCH) @@ -166,7 +178,7 @@ fn manage_websocket( netplay_read_sender: tokio::sync::broadcast::Sender>, mut netplay_write_receiver: tokio::sync::broadcast::Receiver>, ) { - let server_url = "ws://netplay.gopher64.com:45000"; + let server_url = "wss://netplay.gopher64.com"; tokio::spawn(async move { if let Ok(Ok((socket, _response))) = tokio::time::timeout( std::time::Duration::from_secs(2), @@ -409,6 +421,7 @@ fn update_ping( }); let channel = socket.take_channel(0).unwrap(); let (mut write, mut read) = channel.split(); + let mut write_clone = write.clone(); tokio::spawn(async move { loop { if close_ping_rx.try_recv().is_ok() { @@ -420,7 +433,12 @@ fn update_ping( .duration_since(std::time::UNIX_EPOCH) .unwrap() .as_millis(); - let _ = write.send((peer, now.to_be_bytes().to_vec().into())).await; + let ping_message = NetplayPingMessage { + message_type: PingType::Ping, + timestamp: now, + }; + let data = postcard::to_stdvec(&ping_message).unwrap(); + let _ = write.send((peer, data.into())).await; } tokio::time::sleep(std::time::Duration::from_secs(1)).await; } @@ -428,31 +446,51 @@ fn update_ping( }); tokio::spawn(async move { let mut pings = vec![]; - while let Some((_, data)) = read.next().await { - let now = std::time::SystemTime::now() - .duration_since(std::time::UNIX_EPOCH) - .unwrap() - .as_millis(); - let time = u128::from_be_bytes(data.as_ref().try_into().unwrap()); - let ping = now - time; - pings.push(ping); - if pings.len() > 10 { - // once we have 10 samples, remove the highest 2 and return the next highest - pings.sort(); - pings.truncate(pings.len() - 2); - let ping = *pings.last().unwrap(); - pings.clear(); - weak_app - .upgrade_in_event_loop(move |handle| { - let refresh_rate = if handle.get_netplay_game_pal() { - 50.0 - } else { - 60.0 + while let Some((peer, data)) = read.next().await { + let decoded_message = postcard::from_bytes::(&data); + match decoded_message { + Ok(message) => match message.message_type { + PingType::Ping => { + let pong_message = NetplayPingMessage { + message_type: PingType::Pong, + timestamp: message.timestamp, }; - let recommendation = (ping as f64 / (1000.0 / refresh_rate)) as i32 + 1; - handle.set_netplay_recommended_delay(recommendation.to_string().into()); - }) - .unwrap(); + let data = postcard::to_stdvec(&pong_message).unwrap(); + let _ = write_clone.send((peer, data.into())).await; + } + PingType::Pong => { + let now = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_millis(); + let ping = now - message.timestamp; + pings.push(ping); + if pings.len() > 10 { + // once we have 10 samples, remove the highest 2 and return the next highest + pings.sort(); + pings.truncate(pings.len() - 2); + let ping = *pings.last().unwrap(); + pings.clear(); + weak_app + .upgrade_in_event_loop(move |handle| { + let refresh_rate = if handle.get_netplay_game_pal() { + 50.0 + } else { + 60.0 + }; + let recommendation = + (ping as f64 / (1000.0 / refresh_rate)) as i32 + 1; + handle.set_netplay_recommended_delay( + recommendation.to_string().into(), + ); + }) + .unwrap(); + } + } + }, + Err(e) => { + eprintln!("Failed to parse message: {}", e); + } } } }); From c7ac333cb75e1f1e750e321b904ab28999a583c9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 6 Jun 2026 11:30:36 +0200 Subject: [PATCH 0993/1117] fix ping calc (#1018) --- src/ui/netplay.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 0a4a8a4..9fc5768 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -463,7 +463,7 @@ fn update_ping( .duration_since(std::time::UNIX_EPOCH) .unwrap() .as_millis(); - let ping = now - message.timestamp; + let ping = (now - message.timestamp) / 2; // calculate one-way latency pings.push(ping); if pings.len() > 10 { // once we have 10 samples, remove the highest 2 and return the next highest From 06dc40fd3e8895cb7d0150ec47a64d51b8623cfa Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 6 Jun 2026 14:22:23 +0200 Subject: [PATCH 0994/1117] change netplay auth (#1019) --- src/ui/netplay.rs | 49 ++++++----------------------------------------- 1 file changed, 6 insertions(+), 43 deletions(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 9fc5768..8344cef 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -2,11 +2,11 @@ use crate::device; use crate::ui; use crate::ui::gui::{AppWindow, open_uri, run_rom, save_settings}; use futures::{SinkExt, StreamExt}; -use sha2::digest::Digest; use slint::ComponentHandle; use slint::Model; use tokio_tungstenite::tungstenite::Bytes; use tokio_tungstenite::tungstenite::Utf8Bytes; +use tokio_tungstenite::tungstenite::client::IntoClientRequest; use tokio_tungstenite::tungstenite::protocol::frame::coding::CloseCode; use tokio_tungstenite::tungstenite::protocol::{CloseFrame, Message}; @@ -22,7 +22,6 @@ enum MessageType { ResponseListSessions, SendChatMessage, ReceiveChatMessage, - Authenticate, } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] @@ -56,22 +55,6 @@ struct NetplayPingMessage { timestamp: u128, } -pub fn get_auth_token() -> String { - let now_utc = std::time::SystemTime::now() - .duration_since(std::time::UNIX_EPOCH) - .unwrap() - .as_millis() - .to_string(); - let hasher: String = sha2::Sha256::new() - .chain_update(&now_utc) - .chain_update(env!("NETPLAY_ID")) - .finalize() - .iter() - .map(|b| format!("{:02x}", b)) - .collect(); - format!("{}|{}", now_utc, hasher) -} - fn select_rom(weak: slint::Weak, rom_dir: slint::SharedString) { let select_rom = ui::gui::select_rom(rom_dir); tokio::spawn(async move { @@ -152,37 +135,18 @@ fn setup_create_window( app.set_show_netplay_create_session(true); } -async fn do_authentication( - write: &mut futures::stream::SplitSink< - tokio_tungstenite::WebSocketStream< - tokio_tungstenite::MaybeTlsStream, - >, - tokio_tungstenite::tungstenite::Message, - >, -) { - let authenticate = NetplayLobbyMessage { - message_type: MessageType::Authenticate, - sessions: std::collections::HashMap::new(), - message: Some(get_auth_token()), - }; - - write - .send(Message::Binary(Bytes::from( - postcard::to_stdvec(&authenticate).unwrap(), - ))) - .await - .unwrap(); -} - fn manage_websocket( netplay_read_sender: tokio::sync::broadcast::Sender>, mut netplay_write_receiver: tokio::sync::broadcast::Receiver>, ) { - let server_url = "wss://netplay.gopher64.com"; + let mut request = "wss://netplay.gopher64.com".into_client_request().unwrap(); + request + .headers_mut() + .insert("Authorization", env!("NETPLAY_ID").parse().unwrap()); tokio::spawn(async move { if let Ok(Ok((socket, _response))) = tokio::time::timeout( std::time::Duration::from_secs(2), - tokio_tungstenite::connect_async(server_url), + tokio_tungstenite::connect_async(request), ) .await { @@ -203,7 +167,6 @@ fn manage_websocket( } }); tokio::spawn(async move { - do_authentication(&mut write).await; loop { match netplay_write_receiver.recv().await { Ok(Some(response)) => { From 3184305c41cafeeae64be5de64503e6b39e97061 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 6 Jun 2026 14:42:13 +0200 Subject: [PATCH 0995/1117] increase disconnect timeout (#1020) --- src/device/vi.rs | 8 ++------ src/netplay.rs | 12 +++++------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index e98caf5..184a909 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -164,12 +164,8 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { } device.frame_counter += 1; - if let Some(netplay) = &device.netplay { - device.netplay.as_mut().unwrap().inputs = if netplay.requests.is_empty() { - netplay::process_netplay(device) - } else { - netplay::process_requests(device) - }; + if device.netplay.is_some() { + device.netplay.as_mut().unwrap().inputs = netplay::process_requests(device); } if device.netplay.is_none() && paused { diff --git a/src/netplay.rs b/src/netplay.rs index 3ec8e8b..ae7781b 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -212,16 +212,13 @@ pub fn process_requests( } } } else { - let netplay = device.netplay.as_mut().unwrap(); - netplay.session.poll_remote_clients(); - advance_frame(device); + // unsafe { sdl3_sys::events::SDL_PumpEvents() }; // so the screen doesn't freeze + return process_netplay(device); } } } -pub fn process_netplay( - device: &mut device::Device, -) -> Vec<(ui::input::InputData, ggrs::InputStatus)> { +fn process_netplay(device: &mut device::Device) -> Vec<(ui::input::InputData, ggrs::InputStatus)> { let netplay = device.netplay.as_mut().unwrap(); netplay.session.poll_remote_clients(); @@ -326,7 +323,8 @@ pub fn init( .with_input_delay(input_delay) .with_fps(if pal { 50 } else { 60 }) .unwrap() - .with_desync_detection_mode(ggrs::DesyncDetection::On { interval: 60 }); + .with_desync_detection_mode(ggrs::DesyncDetection::On { interval: 60 }) + .with_disconnect_timeout(std::time::Duration::from_secs(5)); #[cfg(debug_assertions)] { From 73f145a35c6c8666135caa15fdc37e4ba0c4ace3 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 6 Jun 2026 15:57:53 +0200 Subject: [PATCH 0996/1117] Increase ping sample size from 10 to 12 (#1022) --- src/ui/netplay.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 8344cef..810f697 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -428,8 +428,8 @@ fn update_ping( .as_millis(); let ping = (now - message.timestamp) / 2; // calculate one-way latency pings.push(ping); - if pings.len() > 10 { - // once we have 10 samples, remove the highest 2 and return the next highest + if pings.len() > 12 { + // once we have at least 12 samples, remove the highest 2 and return the next highest pings.sort(); pings.truncate(pings.len() - 2); let ping = *pings.last().unwrap(); From 21238c8e41f10374381c7373d89a095c59f460c0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 6 Jun 2026 21:20:53 +0200 Subject: [PATCH 0997/1117] cleanup if statement (#1023) --- src/netplay.rs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index ae7781b..1e20609 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -324,13 +324,11 @@ pub fn init( .with_fps(if pal { 50 } else { 60 }) .unwrap() .with_desync_detection_mode(ggrs::DesyncDetection::On { interval: 60 }) - .with_disconnect_timeout(std::time::Duration::from_secs(5)); - - #[cfg(debug_assertions)] - { - session_builder = - session_builder.with_disconnect_timeout(std::time::Duration::from_secs(10)); - } + .with_disconnect_timeout(std::time::Duration::from_secs(if cfg!(debug_assertions) { + 10 + } else { + 5 + })); let mut peers = vec![]; for (i, peer) in player_numbers.iter() { From 8b3a1a40f264c86d103c8dc4ed40fa828349d344 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 6 Jun 2026 22:44:30 +0200 Subject: [PATCH 0998/1117] improve tokio setup (#1024) * improve tokio setup * more * more * Revert "more" This reverts commit e0e1db4482bbf1c8a33ddff51bfdb8deee366db8. * more * more --- src/device.rs | 5 ++--- src/lib.rs | 15 +++++++++------ src/main.rs | 4 ++-- src/retroachievements.rs | 23 ++++++++++++++--------- src/ui/android.rs | 4 ++-- src/ui/usb.rs | 16 +++++++++------- 6 files changed, 38 insertions(+), 29 deletions(-) diff --git a/src/device.rs b/src/device.rs index 37f8b5a..21598a6 100644 --- a/src/device.rs +++ b/src/device.rs @@ -47,7 +47,7 @@ pub mod tlb; pub mod unmapped; pub mod vi; -pub async fn run_game( +pub fn run_game( device: &mut Device, rom_contents: &[u8], game_settings: ui::GameSettings, @@ -76,7 +76,6 @@ pub async fn run_game( // must be after video init let (discord_watch_tx, discord_handle) = if ra_config.enabled && device.netplay.is_none() { retroachievements::load_game(rom_contents, rom_contents.len(), ra_config.rich_presence) - .await } else { (None, None) }; @@ -103,7 +102,7 @@ pub async fn run_game( cpu::run(device); - retroachievements::unload_game(discord_watch_tx, discord_handle).await; + retroachievements::unload_game(discord_watch_tx, discord_handle); ui::storage::write_saves(device); ui::input::close(&mut device.ui); diff --git a/src/lib.rs b/src/lib.rs index 0ca1027..cdd78d0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -104,7 +104,7 @@ fn set_app_id() { } } -pub async fn run(args: Args, arg_count: usize) -> std::io::Result<()> { +pub fn run(args: Args, arg_count: usize) -> std::io::Result<()> { let dirs = ui::get_dirs(); std::fs::create_dir_all(&dirs.config_dir)?; @@ -228,7 +228,11 @@ pub async fn run(args: Args, arg_count: usize) -> std::io::Result<()> { tx.send(false).unwrap(); } - rx.await.unwrap(); + let join_handle = std::thread::spawn(move || { + rx.blocking_recv().unwrap(); + }); + join_handle.join().unwrap(); + ra_config } else { retroachievements::RAConfig::default() @@ -244,8 +248,7 @@ pub async fn run(args: Args, arg_count: usize) -> std::io::Result<()> { load_savestate_slot: args.load_state, }, ra_config, - ) - .await; + ); // on Android, the client is shut down in the app_window function #[cfg(not(target_os = "android"))] @@ -266,7 +269,7 @@ pub async fn run(args: Args, arg_count: usize) -> std::io::Result<()> { } } - ui::usb::close(shutdown_tx, usb_handle).await; + ui::usb::close(shutdown_tx, usb_handle); } else if arg_count > 1 { let mut config = ui::config::Config::new(); @@ -330,7 +333,7 @@ pub async fn run(args: Args, arg_count: usize) -> std::io::Result<()> { #[cfg(target_os = "android")] #[unsafe(no_mangle)] -#[tokio::main(worker_threads = 4)] +#[tokio::main] async fn android_main(app: slint::android::AndroidApp) { slint::android::init_with_event_listener(app.clone(), move |event| match event { slint::android::android_activity::PollEvent::Main(main_event) => match main_event { diff --git a/src/main.rs b/src/main.rs index 978f7ce..3a3e522 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,8 +5,8 @@ static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; use clap::Parser; -#[tokio::main(worker_threads = 4)] +#[tokio::main] async fn main() -> std::io::Result<()> { let args = gopher64::Args::parse(); - gopher64::run(args, std::env::args().count()).await + gopher64::run(args, std::env::args().count()) } diff --git a/src/retroachievements.rs b/src/retroachievements.rs index 3f6a59f..0f22541 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -137,7 +137,7 @@ pub extern "C" fn rust_server_call( }); } -pub async fn load_game( +pub fn load_game( rom: &[u8], rom_size: usize, discord_rich_presence: bool, @@ -150,7 +150,10 @@ pub async fn load_game( let tx_ptr = Box::into_raw(Box::new(tx)) as *mut std::ffi::c_void; ra_load_game(rom.as_ptr(), rom_size, tx_ptr); }; - rx.await.unwrap(); + let join_handle = std::thread::spawn(move || { + rx.blocking_recv().unwrap(); + }); + join_handle.join().unwrap(); let mut c_title = std::ptr::null(); let mut c_image_url = std::ptr::null(); @@ -177,7 +180,7 @@ pub async fn load_game( } } -pub async fn unload_game( +pub fn unload_game( discord_watch_tx: Option>, discord_handle: Option>, ) { @@ -185,12 +188,14 @@ pub async fn unload_game( && let Some(discord_watch_tx) = discord_watch_tx { let _ = discord_watch_tx.send(()); - if tokio::time::timeout(std::time::Duration::from_secs(1), &mut discord_handle) - .await - .is_err() - { - discord_handle.abort(); - } + tokio::task::spawn(async move { + if tokio::time::timeout(std::time::Duration::from_secs(1), &mut discord_handle) + .await + .is_err() + { + discord_handle.abort(); + } + }); } unsafe { ra_unload_game() }; } diff --git a/src/ui/android.rs b/src/ui/android.rs index 2c5a251..e16803e 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -158,14 +158,14 @@ fn argv_to_strings(argc: std::ffi::c_int, argv: *mut *mut std::ffi::c_char) -> V } #[unsafe(no_mangle)] -#[tokio::main(worker_threads = 4)] +#[tokio::main] pub async extern "C" fn gopher64_sdl_main( argc: std::ffi::c_int, argv: *mut *mut std::ffi::c_char, ) -> std::ffi::c_int { let raw = argv_to_strings(argc, argv); let args = Args::try_parse_from(raw).unwrap(); - if let Err(err) = run(args, argc as usize).await { + if let Err(err) = run(args, argc as usize) { eprintln!("Error running game: {err:?}"); return 1; } diff --git a/src/ui/usb.rs b/src/ui/usb.rs index 9644d1b..352a622 100644 --- a/src/ui/usb.rs +++ b/src/ui/usb.rs @@ -174,7 +174,7 @@ pub fn init() -> ( ) } -pub async fn close( +pub fn close( shutdown_tx: Option>, usb_handle: Option>, ) { @@ -182,12 +182,14 @@ pub async fn close( && let Some(shutdown_tx) = shutdown_tx { let _ = shutdown_tx.send(()); - if tokio::time::timeout(std::time::Duration::from_secs(1), &mut handle) - .await - .is_err() - { - handle.abort(); - } + tokio::task::spawn(async move { + if tokio::time::timeout(std::time::Duration::from_secs(1), &mut handle) + .await + .is_err() + { + handle.abort(); + } + }); } } From 820c577f5f28fc0c4ef08f1caed2d6bbbe5c2b6a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 7 Jun 2026 08:21:16 +0200 Subject: [PATCH 0999/1117] use tokio::spawn (#1026) --- src/savestates.rs | 91 +++++++++++++++++++++++++---------------------- 1 file changed, 48 insertions(+), 43 deletions(-) diff --git a/src/savestates.rs b/src/savestates.rs index 7e7a726..3f23dec 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -139,57 +139,62 @@ pub fn create_savestate(device: &mut device::Device, rewind: bool, rewind_frame: let save_state_slot = device.ui.storage.save_state_slot; let rewind_pool = device.savestate.rewind_pool.clone(); - tokio::task::spawn_blocking(move || { + tokio::spawn(async move { let mut error = false; - if let Ok(device_clone) = DEVICE_CLONE.lock() - && let Ok(saves_clone) = SAVES_CLONE.lock() - { - if rewind { + if rewind { + if let Ok(device_clone) = DEVICE_CLONE.lock() + && let Ok(saves_clone) = SAVES_CLONE.lock() + && let Ok(mut pool) = rewind_pool.lock() + { let mut state = device::Device::new(false); state.clone_state(device_clone.deref()); - if let Ok(mut pool) = rewind_pool.lock() { - let key = if let Some(key) = rewind_frame { - key - } else if let Some(key) = pool.keys().last() { - key + 1 - } else { - 0 - }; - pool.insert( - key, - SavestateData { - device: state, - saves: saves_clone.clone(), - rdp_state, - ra_state, - }, - ); - if pool.len() > 30 { - pool.pop_first(); - } + let key = if let Some(key) = rewind_frame { + key + } else if let Some(key) = pool.keys().last() { + key + 1 + } else { + 0 + }; + pool.insert( + key, + SavestateData { + device: state, + saves: saves_clone.clone(), + rdp_state, + ra_state, + }, + ); + if pool.len() > 30 { + pool.pop_first(); } } else { - if let Ok(device_data) = postcard::to_stdvec(device_clone.deref()) - && let Ok(saves_data) = postcard::to_stdvec(saves_clone.deref()) - && let Ok(compressed_file) = ui::storage::compress_file(&[ - (&device_data, "device"), - (&saves_data, "saves"), - (&rdp_state, "rdp_state"), - (&ra_state, "ra_state"), - ]) - { - if let Err(e) = std::fs::write(save_path, compressed_file) { - eprintln!("Error writing savestate: {}", e); - error = true; - } - } else { - eprintln!("Error compressing savestate"); - error = true; - } + error = true; } } else { - error = true; + let compressed_file = if let Ok(device_clone) = DEVICE_CLONE.lock() + && let Ok(saves_clone) = SAVES_CLONE.lock() + && let Ok(device_data) = postcard::to_stdvec(device_clone.deref()) + && let Ok(saves_data) = postcard::to_stdvec(saves_clone.deref()) + && let Ok(compressed_file) = ui::storage::compress_file(&[ + (&device_data, "device"), + (&saves_data, "saves"), + (&rdp_state, "rdp_state"), + (&ra_state, "ra_state"), + ]) { + Some(compressed_file) + } else { + None + }; + if let Some(compressed_file) = compressed_file { + if let Err(e) = tokio::fs::write(save_path, compressed_file).await { + eprintln!("Error writing savestate: {}", e); + error = true; + } + } else { + error = true; + eprintln!("Error compressing savestate"); + } } if error { From a7df8d837fcd8339fde2a97888447c12731b49e2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 7 Jun 2026 09:28:09 +0200 Subject: [PATCH 1000/1117] don't count FPS during rollback (#1027) --- src/device/vi.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index 184a909..9515392 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -113,7 +113,9 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u if device.netplay.is_none() { savestates::process_savestates(device); } - let _ = device.ui.video.fps_tx.as_ref().unwrap().try_send(true); + if !netplay::netplay_in_rollback(device.netplay.as_ref()) { + let _ = device.ui.video.fps_tx.as_ref().unwrap().try_send(true); + } } } _ => { @@ -132,8 +134,8 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { if !netplay::netplay_in_rollback(device.netplay.as_ref()) { ui::video::render_frame(); + let _ = device.ui.video.vis_tx.as_ref().unwrap().try_send(true); } - let _ = device.ui.video.vis_tx.as_ref().unwrap().try_send(true); retroachievements::do_frame(); From ba35935d2eda6133358a203f188e5973d4515a81 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 7 Jun 2026 10:44:52 +0200 Subject: [PATCH 1001/1117] Update issue templates (#1029) --- .github/ISSUE_TEMPLATE/bug_report.md | 39 ++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..7f7aa1a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,39 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' +type: Bug + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + +**Smartphone (please complete the following information):** + - Device: [e.g. iPhone6] + - OS: [e.g. iOS8.1] + - Browser [e.g. stock browser, safari] + - Version [e.g. 22] + +**Additional context** +Add any other context about the problem here. From 577741907f03ab888d52c737bb603f3aae09c102 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 7 Jun 2026 11:55:18 +0200 Subject: [PATCH 1002/1117] move speed limiter out of save state (#1030) --- src/device.rs | 29 ++++++++++++++++----- src/device/controller.rs | 2 +- src/device/vi.rs | 56 ++++++++++++++++++---------------------- src/netplay.rs | 2 +- src/ui/audio.rs | 2 +- src/ui/video.rs | 4 +-- 6 files changed, 52 insertions(+), 43 deletions(-) diff --git a/src/device.rs b/src/device.rs index 21598a6..4cc0947 100644 --- a/src/device.rs +++ b/src/device.rs @@ -221,14 +221,27 @@ pub fn get_rom_contents(file_path: &std::path::PathBuf) -> Option> { } } +#[derive(serde::Serialize, serde::Deserialize)] +pub struct SpeedLimiter { + pub limit_freq: u64, + #[serde(skip)] + #[serde(default = "std::time::Instant::now")] + pub limit_freq_check: std::time::Instant, + pub frame_counter: u64, + pub enabled: bool, + pub min_wait_time: std::time::Duration, + #[serde(skip)] + pub next_pace_deadline: Option, +} + #[derive(serde::Serialize, serde::Deserialize)] pub struct Device { #[serde(skip)] pub netplay: Option, #[serde(skip)] pub ui: ui::Ui, + pub speed_limiter: SpeedLimiter, pub byte_swap: usize, - pub frame_counter: u64, pub savestate: savestates::Savestate, pub cpu: cpu::Cpu, pub pif: pif::Pif, @@ -289,8 +302,15 @@ impl Device { } else { ui::Ui::default() }, + speed_limiter: SpeedLimiter { + limit_freq: 2, + limit_freq_check: std::time::Instant::now(), + frame_counter: 0, + enabled: true, + min_wait_time: std::time::Duration::from_secs(1), + next_pace_deadline: None, + }, byte_swap, - frame_counter: 0, savestate: savestates::Savestate { save_state: false, load_state: false, @@ -528,13 +548,8 @@ impl Device { field: 0, delay: 0, count_per_scanline: 0, - enable_speed_limiter: true, - next_pace_deadline: None, - min_wait_time: std::time::Duration::from_secs(1), frame_time: 0.0, elapsed_time: 0.0, - limit_freq: 2, - limit_freq_check: std::time::Instant::now(), }, vru: controller::vru::Vru { status: 0, diff --git a/src/device/controller.rs b/src/device/controller.rs index 1eda9e5..61afd96 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -59,7 +59,7 @@ pub fn process(device: &mut device::Device, channel: usize) { let input = if let Some(netplay) = &mut device.netplay { netplay.inputs[channel].0 } else { - ui::input::get(&mut device.ui, channel, device.frame_counter) + ui::input::get(&mut device.ui, channel, device.speed_limiter.frame_counter) }; device.pif.ram[offset..offset + 4].copy_from_slice(&input.data.to_ne_bytes()); diff --git a/src/device/vi.rs b/src/device/vi.rs index 9515392..2b51244 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -22,17 +22,9 @@ pub struct Vi { pub clock: u64, pub delay: u64, pub field: u32, - #[serde(skip)] - pub next_pace_deadline: Option, pub count_per_scanline: u64, - pub enable_speed_limiter: bool, - pub min_wait_time: std::time::Duration, pub frame_time: f64, pub elapsed_time: f64, - pub limit_freq: u64, - #[serde(skip)] - #[serde(default = "std::time::Instant::now")] - pub limit_freq_check: std::time::Instant, } const MAX_LIMIT_FREQ: u64 = 3; @@ -45,12 +37,10 @@ pub fn set_expected_refresh_rate(device: &mut device::Device) { device.vi.frame_time = 1.0 / expected_refresh_rate; device.vi.delay = (device.cpu.clock_rate as f64 / expected_refresh_rate) as u64; device.vi.count_per_scanline = device.vi.delay / (device.vi.regs[VI_V_SYNC_REG] + 1) as u64; - - reset_pace_deadline(device); } fn reset_pace_deadline(device: &mut device::Device) { - device.vi.next_pace_deadline = None; + device.speed_limiter.next_pace_deadline = None; } fn set_vertical_interrupt(device: &mut device::Device) { @@ -154,8 +144,11 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { } if !netplay::netplay_in_rollback(device.netplay.as_ref()) - && device.frame_counter.is_multiple_of(device.vi.limit_freq) - && device.vi.enable_speed_limiter + && device + .speed_limiter + .frame_counter + .is_multiple_of(device.speed_limiter.limit_freq) + && device.speed_limiter.enabled { speed_limiter(device); } @@ -163,8 +156,8 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { if !netplay::netplay_in_rollback(device.netplay.as_ref()) { unsafe { sdl3_sys::events::SDL_PumpEvents() }; ui::video::update_screen(); + device.speed_limiter.frame_counter += 1; } - device.frame_counter += 1; if device.netplay.is_some() { device.netplay.as_mut().unwrap().inputs = netplay::process_requests(device); @@ -203,8 +196,9 @@ pub fn init(device: &mut device::Device) { fn speed_limiter(device: &mut device::Device) { let mut speed_limiter_toggled = false; - let mut interval = - std::time::Duration::from_secs_f64(device.vi.frame_time * device.vi.limit_freq as f64); + let mut interval = std::time::Duration::from_secs_f64( + device.vi.frame_time * device.speed_limiter.limit_freq as f64, + ); if let Some(netplay) = &device.netplay { let ahead = netplay.session.frames_ahead(); @@ -216,51 +210,51 @@ fn speed_limiter(device: &mut device::Device) { } let now = std::time::Instant::now(); - match device.vi.next_pace_deadline { + match device.speed_limiter.next_pace_deadline { None => { - device.vi.next_pace_deadline = Some(now + interval); + device.speed_limiter.next_pace_deadline = Some(now + interval); speed_limiter_toggled = true; } Some(deadline) => { if now < deadline { let dur = deadline - now; spin_sleep::sleep(dur); - if dur < device.vi.min_wait_time { - device.vi.min_wait_time = dur; + if dur < device.speed_limiter.min_wait_time { + device.speed_limiter.min_wait_time = dur; } } else { //println!("did not sleep"); - device.vi.min_wait_time = std::time::Duration::from_secs(0); + device.speed_limiter.min_wait_time = std::time::Duration::from_secs(0); } let mut next = deadline + interval; let t = std::time::Instant::now(); while next <= t { next += interval; } - device.vi.next_pace_deadline = Some(next); + device.speed_limiter.next_pace_deadline = Some(next); } } - if std::time::Instant::now().duration_since(device.vi.limit_freq_check) + if std::time::Instant::now().duration_since(device.speed_limiter.limit_freq_check) > std::time::Duration::from_secs(1) { if !speed_limiter_toggled { - if device.vi.min_wait_time == std::time::Duration::from_secs(0) - && device.vi.limit_freq < MAX_LIMIT_FREQ + if device.speed_limiter.min_wait_time == std::time::Duration::from_secs(0) + && device.speed_limiter.limit_freq < MAX_LIMIT_FREQ { - device.vi.limit_freq += 1; + device.speed_limiter.limit_freq += 1; reset_pace_deadline(device); - } else if device.vi.min_wait_time + } else if device.speed_limiter.min_wait_time > std::time::Duration::from_secs_f64(device.vi.frame_time) - && device.vi.limit_freq > 1 + && device.speed_limiter.limit_freq > 1 { - device.vi.limit_freq -= 1; + device.speed_limiter.limit_freq -= 1; reset_pace_deadline(device); } } //println!("limit freq: {}", device.vi.limit_freq); - device.vi.min_wait_time = std::time::Duration::from_secs(1); - device.vi.limit_freq_check = std::time::Instant::now(); + device.speed_limiter.min_wait_time = std::time::Duration::from_secs(1); + device.speed_limiter.limit_freq_check = std::time::Instant::now(); } } diff --git a/src/netplay.rs b/src/netplay.rs index 1e20609..3e2a23e 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -258,7 +258,7 @@ fn process_netplay(device: &mut device::Device) -> Vec<(ui::input::InputData, gg fn advance_frame(device: &mut device::Device) { let netplay = device.netplay.as_mut().unwrap(); - let local_input = ui::input::get(&mut device.ui, 0, device.frame_counter); + let local_input = ui::input::get(&mut device.ui, 0, device.speed_limiter.frame_counter); let local_handle = *netplay.session.local_player_handles().first().unwrap(); netplay .session diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 47c5f30..46f8cef 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -203,7 +203,7 @@ pub fn play_audio(device: &device::Device, dram_addr: usize, length: u64) { primary_buffer.len() as i32 * 2, ) }; - } else if device.vi.enable_speed_limiter { + } else if device.speed_limiter.enabled { adjust_audio_frequency(device.ui.audio.audio_stream, 0.0005); } } diff --git a/src/ui/video.rs b/src/ui/video.rs index e7bed84..8bbbed0 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -219,9 +219,9 @@ pub fn check_callback(device: &mut device::Device) -> (bool, bool) { device.cpu.clock_rate, // 1 second ); } - if device.vi.enable_speed_limiter != callback.enable_speedlimiter { + if device.speed_limiter.enabled != callback.enable_speedlimiter { speed_limiter_toggled = true; - device.vi.enable_speed_limiter = callback.enable_speedlimiter; + device.speed_limiter.enabled = callback.enable_speedlimiter; } } From a1a7699516349ba108727a310d87b2b938426baa Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 7 Jun 2026 17:10:49 +0200 Subject: [PATCH 1003/1117] use check_framebuffers (#1031) --- build.rs | 1 - parallel-rdp/interface.cpp | 6 ------ parallel-rdp/interface.hpp | 1 - src/savestates.rs | 7 ++----- src/ui/video.rs | 4 ---- 5 files changed, 2 insertions(+), 17 deletions(-) diff --git a/build.rs b/build.rs index c3093ce..89f3ead 100644 --- a/build.rs +++ b/build.rs @@ -204,7 +204,6 @@ fn main() { .allowlist_function("rdp_check_callback") .allowlist_function("rdp_check_framebuffers") .allowlist_function("rdp_state_size") - .allowlist_function("rdp_hard_sync") .allowlist_function("rdp_save_state") .allowlist_function("rdp_load_state") .allowlist_function("rdp_set_fps") diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index de79721..a18b460 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -702,12 +702,6 @@ void rdp_check_framebuffers(uint32_t address, uint32_t length) { size_t rdp_state_size() { return sizeof(RDP_DEVICE); } -void rdp_hard_sync() { - processor->wait_for_timeline(processor->signal_timeline()); - rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); - sync_signal = 0; -} - void rdp_save_state(uint8_t *state) { memcpy(state, &rdp_device, sizeof(RDP_DEVICE)); } diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index b9b006a..7de41da 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -61,7 +61,6 @@ uint64_t rdp_process_commands(); void rdp_onscreen_message(const char *message, MESSAGE_LENGTH milliseconds); void rdp_check_framebuffers(uint32_t address, uint32_t length); size_t rdp_state_size(); -void rdp_hard_sync(); void rdp_save_state(uint8_t *state); void rdp_load_state(GFX_INFO _gfx_info, const uint8_t *state); void rdp_set_fps(uint32_t fps, uint32_t vis); diff --git a/src/savestates.rs b/src/savestates.rs index 3f23dec..fcd40ed 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -114,7 +114,7 @@ pub fn process_savestates(device: &mut device::Device) { pub fn create_savestate(device: &mut device::Device, rewind: bool, rewind_frame: Option) { if !rewind { // skipped on rewind as a speed hack - ui::video::hard_sync(); // to flush the RDP so the RDRAM is updated + ui::video::check_framebuffers(0, device.rdram.size); // to flush the RDP so the RDRAM is updated } let mut rdp_state: Vec = vec![0; ui::video::state_size()]; ui::video::save_state(rdp_state.as_mut_ptr()); @@ -263,10 +263,7 @@ pub fn load_savestate(device: &mut device::Device, rewind: bool, rewind_frame: O if let Some(mut state) = state_data && device.rdram.size == state.device.rdram.size { - if device.netplay.is_none() { - // skipped for netplay as a speed hack - ui::video::hard_sync(); // to flush the RDP so it doesn't overwrite the RDRAM - } + ui::video::check_framebuffers(0, device.rdram.size); // to flush the RDP so it doesn't overwrite the RDRAM device.savestate.last_rewind_saved = state.device.vi.elapsed_time; diff --git a/src/ui/video.rs b/src/ui/video.rs index 8bbbed0..b5159f1 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -165,10 +165,6 @@ pub fn save_state(rdp_state: *mut u8) { unsafe { rdp_save_state(rdp_state) } } -pub fn hard_sync() { - unsafe { rdp_hard_sync() } -} - pub fn load_state(device: &mut device::Device, rdp_state: *const u8) { let gfx_info = build_gfx_info(device); unsafe { From 1244706b6e6072d8de6db8e5172d47704d49209f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 7 Jun 2026 20:43:58 +0200 Subject: [PATCH 1004/1117] update issue template (#1034) --- .github/ISSUE_TEMPLATE/bug_report.md | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 7f7aa1a..9baed90 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -24,16 +24,10 @@ A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. -**Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Browser [e.g. chrome, safari] - - Version [e.g. 22] - -**Smartphone (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - Browser [e.g. stock browser, safari] - - Version [e.g. 22] +**Device (please complete the following information):** + - OS: [e.g. Windows 11] + - CPU [e.g. Intel i7-1365U] + - GPU [e.g. Nvidia 5060 Ti] **Additional context** Add any other context about the problem here. From d79834eb50d3e5a52be6dede45ba75b373cb0229 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 7 Jun 2026 22:31:26 +0200 Subject: [PATCH 1005/1117] add to rdp state (#1035) * add to rdp state * more * more --- parallel-rdp/interface.cpp | 38 ++++++++++++++++++++++++++++++++++++-- src/savestates.rs | 6 ------ 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index a18b460..49904fe 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -296,7 +296,9 @@ JoystickEvent get_joystick_event() { } static void rdp_new_processor() { - RDP::CommandProcessorFlags flags = 0; + RDP::CommandProcessorFlags flags = + RDP::COMMAND_PROCESSOR_FLAG_HOST_VISIBLE_HIDDEN_RDRAM_BIT | + RDP::COMMAND_PROCESSOR_FLAG_HOST_VISIBLE_TMEM_BIT; if (gfx_info.upscale == 2) { flags |= RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT; @@ -700,15 +702,47 @@ void rdp_check_framebuffers(uint32_t address, uint32_t length) { } } -size_t rdp_state_size() { return sizeof(RDP_DEVICE); } +size_t rdp_state_size() { + return sizeof(RDP_DEVICE) + 0x1000 + processor->get_hidden_rdram_size(); +} void rdp_save_state(uint8_t *state) { memcpy(state, &rdp_device, sizeof(RDP_DEVICE)); + + void *gpu_tmem = processor->get_tmem(); + if (gpu_tmem) { + memcpy(state + sizeof(RDP_DEVICE), gpu_tmem, 0x1000); + } else { + printf("Failed to get tmem\n"); + } + + void *gpu_hidden_rdram = processor->begin_read_hidden_rdram(); + if (gpu_hidden_rdram) { + memcpy(state + sizeof(RDP_DEVICE) + 0x1000, gpu_hidden_rdram, + processor->get_hidden_rdram_size()); + } else { + printf("Failed to get hidden_rdram\n"); + } } void rdp_load_state(GFX_INFO _gfx_info, const uint8_t *state) { gfx_info = _gfx_info; memcpy(&rdp_device, state, sizeof(RDP_DEVICE)); + + void *gpu_tmem = processor->get_tmem(); + if (gpu_tmem) { + memcpy(gpu_tmem, state + sizeof(RDP_DEVICE), 0x1000); + } else { + printf("Failed to get tmem\n"); + } + + void *gpu_hidden_rdram = processor->begin_read_hidden_rdram(); + if (gpu_hidden_rdram) { + memcpy(gpu_hidden_rdram, state + sizeof(RDP_DEVICE) + 0x1000, + processor->get_hidden_rdram_size()); + } else { + printf("Failed to get hidden_rdram\n"); + } } static void push_onscreen_message(void *data) { diff --git a/src/savestates.rs b/src/savestates.rs index fcd40ed..5265055 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -112,10 +112,6 @@ pub fn process_savestates(device: &mut device::Device) { } pub fn create_savestate(device: &mut device::Device, rewind: bool, rewind_frame: Option) { - if !rewind { - // skipped on rewind as a speed hack - ui::video::check_framebuffers(0, device.rdram.size); // to flush the RDP so the RDRAM is updated - } let mut rdp_state: Vec = vec![0; ui::video::state_size()]; ui::video::save_state(rdp_state.as_mut_ptr()); @@ -263,8 +259,6 @@ pub fn load_savestate(device: &mut device::Device, rewind: bool, rewind_frame: O if let Some(mut state) = state_data && device.rdram.size == state.device.rdram.size { - ui::video::check_framebuffers(0, device.rdram.size); // to flush the RDP so it doesn't overwrite the RDRAM - device.savestate.last_rewind_saved = state.device.vi.elapsed_time; std::mem::swap(&mut device.rng, &mut state.device.rng); From 428529045283e7bcc2744274e67e4a2b2e325cca Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 8 Jun 2026 09:32:20 +0200 Subject: [PATCH 1006/1117] update issue template (#1037) --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- .github/ISSUE_TEMPLATE/config.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 .github/ISSUE_TEMPLATE/config.yml diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 9baed90..3d8dfff 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,6 +1,6 @@ --- name: Bug report -about: Create a report to help us improve +about: Bugs only! No feature requests title: '' labels: '' assignees: '' diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..3ba13e0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false From e1d715bc382f4fdab5845689621f28eedc043116 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 8 Jun 2026 10:40:58 +0200 Subject: [PATCH 1007/1117] state updates (#1036) * state updates * more --- parallel-rdp/interface.cpp | 42 ++++++++++++++++++++------------------ src/savestates.rs | 8 ++++++++ 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 49904fe..1cc9edd 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -83,6 +83,9 @@ typedef struct { FrameBufferInfo frame_buffer_info; } RDP_DEVICE; +static void *g_tmem = nullptr; +static void *g_hidden_rdram = nullptr; + typedef struct { uint32_t fps; uint32_t vis; @@ -316,6 +319,14 @@ static void rdp_new_processor() { processor = new RDP::CommandProcessor(wsi->get_device(), gfx_info.RDRAM, 0, gfx_info.RDRAM_SIZE, gfx_info.RDRAM_SIZE / 2, flags); + g_tmem = processor->get_tmem(); + if (!g_tmem) { + printf("Failed to get tmem\n"); + } + g_hidden_rdram = processor->begin_read_hidden_rdram(); + if (!g_hidden_rdram) { + printf("Failed to get hidden_rdram\n"); + } } static ImageHandle create_message_image(Vulkan::Device &device, int width, @@ -426,6 +437,9 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, void rdp_close() { display_fps = false; + g_tmem = nullptr; + g_hidden_rdram = nullptr; + messages = std::queue(); achievement_challenge_indicator_image = Vulkan::ImageHandle(); achievement_progress_indicator_image = Vulkan::ImageHandle(); @@ -709,19 +723,13 @@ size_t rdp_state_size() { void rdp_save_state(uint8_t *state) { memcpy(state, &rdp_device, sizeof(RDP_DEVICE)); - void *gpu_tmem = processor->get_tmem(); - if (gpu_tmem) { - memcpy(state + sizeof(RDP_DEVICE), gpu_tmem, 0x1000); - } else { - printf("Failed to get tmem\n"); + if (g_tmem) { + memcpy(state + sizeof(RDP_DEVICE), g_tmem, 0x1000); } - void *gpu_hidden_rdram = processor->begin_read_hidden_rdram(); - if (gpu_hidden_rdram) { - memcpy(state + sizeof(RDP_DEVICE) + 0x1000, gpu_hidden_rdram, + if (g_hidden_rdram) { + memcpy(state + sizeof(RDP_DEVICE) + 0x1000, g_hidden_rdram, processor->get_hidden_rdram_size()); - } else { - printf("Failed to get hidden_rdram\n"); } } @@ -729,19 +737,13 @@ void rdp_load_state(GFX_INFO _gfx_info, const uint8_t *state) { gfx_info = _gfx_info; memcpy(&rdp_device, state, sizeof(RDP_DEVICE)); - void *gpu_tmem = processor->get_tmem(); - if (gpu_tmem) { - memcpy(gpu_tmem, state + sizeof(RDP_DEVICE), 0x1000); - } else { - printf("Failed to get tmem\n"); + if (g_tmem) { + memcpy(g_tmem, state + sizeof(RDP_DEVICE), 0x1000); } - void *gpu_hidden_rdram = processor->begin_read_hidden_rdram(); - if (gpu_hidden_rdram) { - memcpy(gpu_hidden_rdram, state + sizeof(RDP_DEVICE) + 0x1000, + if (g_hidden_rdram) { + memcpy(g_hidden_rdram, state + sizeof(RDP_DEVICE) + 0x1000, processor->get_hidden_rdram_size()); - } else { - printf("Failed to get hidden_rdram\n"); } } diff --git a/src/savestates.rs b/src/savestates.rs index 5265055..70f45f6 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -112,6 +112,10 @@ pub fn process_savestates(device: &mut device::Device) { } pub fn create_savestate(device: &mut device::Device, rewind: bool, rewind_frame: Option) { + if !rewind { + ui::video::check_framebuffers(0, device.rdram.size); + } + let mut rdp_state: Vec = vec![0; ui::video::state_size()]; ui::video::save_state(rdp_state.as_mut_ptr()); @@ -259,6 +263,10 @@ pub fn load_savestate(device: &mut device::Device, rewind: bool, rewind_frame: O if let Some(mut state) = state_data && device.rdram.size == state.device.rdram.size { + if device.netplay.is_none() { + ui::video::check_framebuffers(0, device.rdram.size); + } + device.savestate.last_rewind_saved = state.device.vi.elapsed_time; std::mem::swap(&mut device.rng, &mut state.device.rng); From 42a4a46dd9184b2bfc1d1fb4a489b81c69767e67 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 8 Jun 2026 10:53:20 +0200 Subject: [PATCH 1008/1117] Fix formatting for device information in bug report (#1038) Updated formatting for CPU and GPU fields in bug report template. --- .github/ISSUE_TEMPLATE/bug_report.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 3d8dfff..25a5289 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -26,8 +26,8 @@ If applicable, add screenshots to help explain your problem. **Device (please complete the following information):** - OS: [e.g. Windows 11] - - CPU [e.g. Intel i7-1365U] - - GPU [e.g. Nvidia 5060 Ti] + - CPU: [e.g. Intel i7-1365U] + - GPU: [e.g. Nvidia 5060 Ti] **Additional context** Add any other context about the problem here. From f69157869810f42ff35f44c6ee46b4ddec1d889b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 8 Jun 2026 15:23:22 +0200 Subject: [PATCH 1009/1117] use idle (#1039) --- build.rs | 1 + parallel-rdp/interface.cpp | 12 +++++++++--- parallel-rdp/interface.hpp | 1 + src/savestates.rs | 4 ++-- src/ui/video.rs | 4 ++++ 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/build.rs b/build.rs index 89f3ead..90d8632 100644 --- a/build.rs +++ b/build.rs @@ -206,6 +206,7 @@ fn main() { .allowlist_function("rdp_state_size") .allowlist_function("rdp_save_state") .allowlist_function("rdp_load_state") + .allowlist_function("rdp_idle") .allowlist_function("rdp_set_fps") .allowlist_function("get_joystick_event") .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 1cc9edd..1a0bee2 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -298,6 +298,12 @@ JoystickEvent get_joystick_event() { return joystick_event; } +void rdp_idle() { + processor->idle(); + sync_signal = 0; + rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); +} + static void rdp_new_processor() { RDP::CommandProcessorFlags flags = RDP::COMMAND_PROCESSOR_FLAG_HOST_VISIBLE_HIDDEN_RDRAM_BIT | @@ -327,6 +333,9 @@ static void rdp_new_processor() { if (!g_hidden_rdram) { printf("Failed to get hidden_rdram\n"); } + + sync_signal = 0; + rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); } static ImageHandle create_message_image(Vulkan::Device &device, int width, @@ -429,9 +438,6 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, achievement_progress_indicator_image = Vulkan::ImageHandle(); fps_image = Vulkan::ImageHandle(); display_fps = false; - - sync_signal = 0; - rdram_dirty.assign(gfx_info.RDRAM_SIZE >> 3, false); } void rdp_close() { diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 7de41da..9d8d23f 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -58,6 +58,7 @@ void rdp_update_screen(); void rdp_render_frame(); CALL_BACK rdp_check_callback(); uint64_t rdp_process_commands(); +void rdp_idle(); void rdp_onscreen_message(const char *message, MESSAGE_LENGTH milliseconds); void rdp_check_framebuffers(uint32_t address, uint32_t length); size_t rdp_state_size(); diff --git a/src/savestates.rs b/src/savestates.rs index 70f45f6..294d880 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -113,7 +113,7 @@ pub fn process_savestates(device: &mut device::Device) { pub fn create_savestate(device: &mut device::Device, rewind: bool, rewind_frame: Option) { if !rewind { - ui::video::check_framebuffers(0, device.rdram.size); + ui::video::idle(); } let mut rdp_state: Vec = vec![0; ui::video::state_size()]; @@ -264,7 +264,7 @@ pub fn load_savestate(device: &mut device::Device, rewind: bool, rewind_frame: O && device.rdram.size == state.device.rdram.size { if device.netplay.is_none() { - ui::video::check_framebuffers(0, device.rdram.size); + ui::video::idle(); } device.savestate.last_rewind_saved = state.device.vi.elapsed_time; diff --git a/src/ui/video.rs b/src/ui/video.rs index b5159f1..5c08a0b 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -165,6 +165,10 @@ pub fn save_state(rdp_state: *mut u8) { unsafe { rdp_save_state(rdp_state) } } +pub fn idle() { + unsafe { rdp_idle() } +} + pub fn load_state(device: &mut device::Device, rdp_state: *const u8) { let gfx_info = build_gfx_info(device); unsafe { From d48423da77ce24d04272dfe8a155c45984201a09 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 8 Jun 2026 16:28:51 +0200 Subject: [PATCH 1010/1117] cargo update (#1040) * cargo update * add cmake for mac * more --- .cargo/config.toml | 1 + Cargo.lock | 188 +++++++++++++++++++++++---------------------- 2 files changed, 98 insertions(+), 91 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 1fe243b..8c295de 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -24,3 +24,4 @@ CC = "clang" CXX = "clang++" AR = "llvm-ar" SDKROOT = "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk" +CMAKE_POLICY_VERSION_MINIMUM = "3.5" # for freetype diff --git a/Cargo.lock b/Cargo.lock index 9c376d5..959943b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -212,7 +212,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289" dependencies = [ "android-properties", - "bitflags 2.12.1", + "bitflags 2.13.0", "cc", "cesu8", "jni 0.21.1", @@ -233,7 +233,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd" dependencies = [ "android-properties", - "bitflags 2.12.1", + "bitflags 2.13.0", "cc", "jni 0.22.4", "libc", @@ -836,7 +836,7 @@ version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -889,9 +889,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.12.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" dependencies = [ "serde_core", ] @@ -1083,7 +1083,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "log", "polling", "rustix 0.38.44", @@ -1097,7 +1097,7 @@ version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dbf9978365bac10f54d1d4b04f7ce4427e51f71d61f2fe15e3fed5166474df7" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "polling", "rustix 1.1.4", "slab", @@ -1528,7 +1528,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "core-foundation 0.10.1", "libc", ] @@ -1892,7 +1892,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -1945,7 +1945,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "bytemuck", "drm-ffi", "drm-fourcc", @@ -2242,7 +2242,7 @@ version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "727c5dd9d601f3f4ea133b8a6ba37d37ca67ed59781675dc1c9c9f1701e0d197" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "bytemuck", "fnv", "glow 0.17.0", @@ -2715,7 +2715,7 @@ version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "cfg_aliases", "cgl", "dispatch2", @@ -2838,7 +2838,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "gpu-descriptor-types", "hashbrown 0.15.5", ] @@ -2849,7 +2849,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", ] [[package]] @@ -2906,7 +2906,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9da2e5ae821f6e96664977bf974d6d6a2d6682f9ccee23e62ec1d134246845f9" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "bytemuck", "core_maths", "read-fonts", @@ -3033,9 +3033,9 @@ checksum = "48ce8546b993eaf241d69ded33b1be6d205dd9857ec879d9d18bd05d3676e144" [[package]] name = "http" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be7462df143984c4598a256ef469b251d7d7f9e271135073e78fc535414f3d0" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" dependencies = [ "bytes", "itoa", @@ -3301,7 +3301,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89e4a57afd78d8a1f599a78781dc1413af68545b2bc5ba5e143ecf022c75d5f3" dependencies = [ "auto_enums", - "bitflags 2.12.1", + "bitflags 2.13.0", "cfg-if", "chrono", "clru", @@ -3660,9 +3660,9 @@ checksum = "09e54e57b4c48b40f7aec75635392b12b3421fa26fe8b4332e63138ed278459c" [[package]] name = "imgref" -version = "1.12.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40fac9d56ed6437b198fddba683305e8e2d651aa42647f00f5ae542e7f5c94a2" +checksum = "89194689a993ab15268672e99e7b0e19da2da3268ac682e8f02d29d4d1434cd7" [[package]] name = "indexmap" @@ -3702,7 +3702,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "input-sys", "libc", "log", @@ -3933,7 +3933,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "serde", "unicode-segmentation", ] @@ -4008,9 +4008,9 @@ checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libfuzzer-sys" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12a681b7dd8ce12bff52488013ba614b869148d54dd79836ab85aafdd53f08d" +checksum = "a9fd2f41a1cba099f79a0b6b6c35656cf7c03351a7bae8ff0f28f25270f929d2" dependencies = [ "arbitrary", "cc", @@ -4047,7 +4047,7 @@ version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "libc", "plain", "redox_syscall 0.8.1", @@ -4303,7 +4303,7 @@ version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block", "core-graphics-types 0.1.3", "foreign-types 0.5.0", @@ -4318,7 +4318,7 @@ version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7047791b5bc903b8cd963014b355f71dc9864a9a0b727057676c1dcae5cbc15" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block", "core-graphics-types 0.2.0", "foreign-types 0.5.0", @@ -4426,7 +4426,7 @@ checksum = "618f667225063219ddfc61251087db8a9aec3c3f0950c916b614e403486f1135" dependencies = [ "arrayvec", "bit-set", - "bitflags 2.12.1", + "bitflags 2.13.0", "cfg-if", "cfg_aliases", "codespan-reporting", @@ -4473,7 +4473,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "jni-sys 0.3.1", "log", "ndk-sys 0.5.0+25.2.9519653", @@ -4487,7 +4487,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "jni-sys 0.3.1", "log", "ndk-sys 0.6.0+11769913", @@ -4545,7 +4545,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "cfg-if", "cfg_aliases", "libc", @@ -4704,7 +4704,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -4720,7 +4720,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -4741,7 +4741,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -4754,7 +4754,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -4776,7 +4776,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -4788,7 +4788,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -4799,7 +4799,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "dispatch2", "objc2 0.6.4", ] @@ -4810,7 +4810,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "dispatch2", "objc2 0.6.4", "objc2-core-foundation", @@ -4857,7 +4857,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", @@ -4869,7 +4869,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", @@ -4888,7 +4888,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.5.1", "dispatch", "libc", @@ -4901,7 +4901,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.6.2", "objc2 0.6.4", "objc2-core-foundation", @@ -4913,7 +4913,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "objc2 0.6.4", "objc2-core-foundation", ] @@ -4936,7 +4936,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -4948,7 +4948,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -4959,7 +4959,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -4972,7 +4972,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "objc2 0.6.4", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -4995,7 +4995,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.5.1", "objc2 0.5.2", "objc2-cloud-kit 0.2.2", @@ -5016,7 +5016,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.6.2", "objc2 0.6.4", "objc2-core-foundation", @@ -5041,7 +5041,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -5096,7 +5096,7 @@ version = "0.10.80" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a45fa2aa886c42762255da344f0a0d313e254066c46aad76f300c3d3da62d967" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "cfg-if", "foreign-types 0.3.2", "libc", @@ -5432,7 +5432,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "crc32fast", "fdeflate", "flate2", @@ -5642,7 +5642,7 @@ version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "getopts", "memchr", "pulldown-cmark-escape", @@ -5927,7 +5927,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", ] [[package]] @@ -5936,7 +5936,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b44b894f2a6e36457d665d1e08c3866add6ed5e70050c1b4ba8a8ddedb02ce7" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", ] [[package]] @@ -6243,7 +6243,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -6256,7 +6256,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys 0.12.1", @@ -6340,7 +6340,7 @@ version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "bytemuck", "core_maths", "log", @@ -6425,50 +6425,56 @@ checksum = "fe273101c7dab94551183212eee9adef1a7bf274d407f0b7bfe72482960ab25c" [[package]] name = "sdl3-image-sys" -version = "0.6.3+SDL-image-3.4.4" +version = "0.6.4+SDL-image-3.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf532fab7cf015de8c55eec6c82db65a964c8874a22c88cead952813db410f90" +checksum = "5a445f781b39a1c1bc751f5f4612191e0402006e35ad5d02d9193281afad1cf4" dependencies = [ "cmake", + "pkg-config", "rpkg-config", "sdl3-image-src", "sdl3-sys", + "vcpkg", ] [[package]] name = "sdl3-src" -version = "3.4.8" +version = "3.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "997bff4c8d3d9d1e846d7ad8caa33e6fe18a07ec9dc474e1efbbb20923d87bd9" +checksum = "ed4dcad85f1657d3424642ca2ed8f9f185212975baefda8972ac606494755a62" [[package]] name = "sdl3-sys" -version = "0.6.5+SDL-3.4.8" +version = "0.6.6+SDL-3.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51ca7a36c908d1d2b6c259d426a5000fbb70e764dcc430f6a373cc151f614f68" +checksum = "04e7f134def04ed72e6f55187c6c29c72f7dab5d359c4be0dd49c9b97fef59c7" dependencies = [ "cc", "cmake", + "pkg-config", "rpkg-config", "sdl3-src", + "vcpkg", ] [[package]] name = "sdl3-ttf-src" -version = "3.2.3" +version = "3.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28923d2ce72ff317d8eb7cec97ddfb8f351c330d7bcbf8c76e91332122c93b3" +checksum = "e8deaa09c46d6aa8e8a81a601eb4685b2a57f2ce8a4ea3c59e8b623b526d1125" [[package]] name = "sdl3-ttf-sys" -version = "0.6.0+SDL-ttf-3.2.2" +version = "0.6.1+SDL-ttf-3.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c30da3dcd7e062f19350b47a532f7629c42801b801687535fd31e8ba2adfd71d" +checksum = "8137096072109d6c834d4cb30b8a617ded4f150c7766757eddc834108bbcefd2" dependencies = [ "cmake", + "pkg-config", "rpkg-config", "sdl3-sys", "sdl3-ttf-src", + "vcpkg", ] [[package]] @@ -6503,7 +6509,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -6790,7 +6796,7 @@ version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a71c01d325d40b1031dee67d251a5e0132e79e2a9ec272149a4f4a0d4b8b3be" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "skia-bindings", "windows 0.62.2", ] @@ -6880,7 +6886,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "calloop 0.13.0", "calloop-wayland-source 0.3.0", "cursor-icon", @@ -6905,7 +6911,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "calloop 0.14.4", "calloop-wayland-source 0.4.1", "cursor-icon", @@ -7061,7 +7067,7 @@ version = "0.3.0+sdk-1.3.268.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", ] [[package]] @@ -7226,7 +7232,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -7641,7 +7647,7 @@ version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "bytes", "futures-util", "http", @@ -8178,7 +8184,7 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "hashbrown 0.15.5", "indexmap", "semver", @@ -8204,7 +8210,7 @@ version = "0.31.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "rustix 1.1.4", "wayland-backend", "wayland-scanner", @@ -8216,7 +8222,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "cursor-icon", "wayland-backend", ] @@ -8238,7 +8244,7 @@ version = "0.32.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "563a85523cade2429938e790815fd7319062103b9f4a2dc806e9b53b95982d8f" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "wayland-backend", "wayland-client", "wayland-scanner", @@ -8250,7 +8256,7 @@ version = "20250721.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -8263,7 +8269,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e9567599ef23e09b8dad6e429e5738d4509dfc46b3b21f32841a304d16b29c8" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -8276,7 +8282,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b6d8cf1eb2c1c31ed1f5643c88a6e53538129d4af80030c8cabd1f9fa884d91" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -8289,7 +8295,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -8556,7 +8562,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9cb534d5ffd109c7d1135f34cdae29e60eab94855a625dcfe1705f8bc7ad79f" dependencies = [ "arrayvec", - "bitflags 2.12.1", + "bitflags 2.13.0", "bytemuck", "cfg-if", "cfg_aliases", @@ -8588,7 +8594,7 @@ dependencies = [ "arrayvec", "bit-set", "bit-vec", - "bitflags 2.12.1", + "bitflags 2.13.0", "bytemuck", "cfg_aliases", "document-features", @@ -8648,7 +8654,7 @@ dependencies = [ "arrayvec", "ash", "bit-set", - "bitflags 2.12.1", + "bitflags 2.13.0", "block", "bytemuck", "cfg-if", @@ -8692,7 +8698,7 @@ version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e18308757e594ed2cd27dddbb16a139c42a683819d32a2e0b1b0167552f5840c" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "bytemuck", "js-sys", "log", @@ -9246,7 +9252,7 @@ dependencies = [ "ahash", "android-activity 0.6.1", "atomic-waker", - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.5.1", "bytemuck", "calloop 0.13.0", @@ -9378,7 +9384,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.12.1", + "bitflags 2.13.0", "indexmap", "log", "serde", @@ -9551,7 +9557,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "dlib", "log", "once_cell", From fce57f8ee2358daa68e0613b8500d07d910a3b38 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 8 Jun 2026 21:19:12 +0200 Subject: [PATCH 1011/1117] move netplay poll (#1042) --- src/device/vi.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index 2b51244..32e8f48 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -122,6 +122,10 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { cheats::execute_cheats(device, device.cheats.cheats.clone()); } + if device.netplay.is_some() { + device.netplay.as_mut().unwrap().inputs = netplay::process_requests(device); + } + if !netplay::netplay_in_rollback(device.netplay.as_ref()) { ui::video::render_frame(); let _ = device.ui.video.vis_tx.as_ref().unwrap().try_send(true); @@ -159,10 +163,6 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { device.speed_limiter.frame_counter += 1; } - if device.netplay.is_some() { - device.netplay.as_mut().unwrap().inputs = netplay::process_requests(device); - } - if device.netplay.is_none() && paused { if retroachievements::get_hardcore() { ui::video::onscreen_message( From 8c4be03ab77660e45e43efe5cc429e3d2e2107f7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 9 Jun 2026 07:21:36 +0200 Subject: [PATCH 1012/1117] Revert "move netplay poll (#1042)" (#1043) This reverts commit fce57f8ee2358daa68e0613b8500d07d910a3b38. --- src/device/vi.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index 32e8f48..2b51244 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -122,10 +122,6 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { cheats::execute_cheats(device, device.cheats.cheats.clone()); } - if device.netplay.is_some() { - device.netplay.as_mut().unwrap().inputs = netplay::process_requests(device); - } - if !netplay::netplay_in_rollback(device.netplay.as_ref()) { ui::video::render_frame(); let _ = device.ui.video.vis_tx.as_ref().unwrap().try_send(true); @@ -163,6 +159,10 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { device.speed_limiter.frame_counter += 1; } + if device.netplay.is_some() { + device.netplay.as_mut().unwrap().inputs = netplay::process_requests(device); + } + if device.netplay.is_none() && paused { if retroachievements::get_hardcore() { ui::video::onscreen_message( From af163dac62173b16cc5493da36abd6d1d00b48f5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 9 Jun 2026 16:10:49 +0200 Subject: [PATCH 1013/1117] Fixed input delay (#1044) * disable rollback * more * more * more * more * more * more --- Cargo.lock | 90 +++++++++++++++++++------------- Cargo.toml | 2 +- parallel-rdp/interface.cpp | 14 ++++- parallel-rdp/interface.hpp | 2 + src/device/vi.rs | 27 ++++------ src/netplay.rs | 98 ++++++++++++++++++++++------------- src/savestates.rs | 4 +- src/ui/audio.rs | 4 -- src/ui/gui.rs | 2 +- src/ui/gui/appwindow.slint | 6 +-- src/ui/gui/netplay_wait.slint | 6 +-- src/ui/netplay.rs | 16 ++++-- src/ui/video.rs | 12 ++++- 13 files changed, 174 insertions(+), 109 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 959943b..0f81167 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2369,7 +2369,7 @@ dependencies = [ "objc2-core-text", "objc2-foundation 0.3.2", "parlance", - "read-fonts", + "read-fonts 0.37.0", "roxmltree", "smallvec", "windows 0.62.2", @@ -2611,8 +2611,7 @@ dependencies = [ [[package]] name = "ggrs" version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "777d9da4dfd802a272f1795a7a1887d6078fd31487e7e68d689596c4c5298046" +source = "git+https://github.com/gschup/ggrs.git#1f14703a5859c2bcb0fa789beab15e80b572775f" dependencies = [ "bincode 1.3.3", "bitfield-rle", @@ -2909,7 +2908,7 @@ dependencies = [ "bitflags 2.13.0", "bytemuck", "core_maths", - "read-fonts", + "read-fonts 0.37.0", "smallvec", ] @@ -3258,7 +3257,7 @@ dependencies = [ "fontique", "htmlparser", "pulldown-cmark", - "skrifa", + "skrifa 0.40.0", ] [[package]] @@ -3285,7 +3284,7 @@ dependencies = [ "resvg", "rowan", "rspolib", - "skrifa", + "skrifa 0.40.0", "smol_str 0.3.6", "strum", "swash", @@ -3327,7 +3326,7 @@ dependencies = [ "rgb", "scoped-tls-hkt", "scopeguard", - "skrifa", + "skrifa 0.40.0", "slab", "strum", "swash", @@ -3407,7 +3406,7 @@ dependencies = [ "pin-weak", "raw-window-handle", "raw-window-metal", - "read-fonts", + "read-fonts 0.37.0", "scoped-tls-hkt", "skia-safe", "softbuffer", @@ -3435,7 +3434,7 @@ dependencies = [ "integer-sqrt", "lyon_path", "num-traits", - "skrifa", + "skrifa 0.40.0", "swash", "zeno", ] @@ -3917,13 +3916,12 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.99" +version = "0.3.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" +checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -4209,7 +4207,7 @@ dependencies = [ "cfg-if", "derive_more", "serde", - "uuid 1.23.2", + "uuid 1.23.3", ] [[package]] @@ -5261,7 +5259,7 @@ dependencies = [ "linebender_resource_handle", "parlance", "parley_data", - "skrifa", + "skrifa 0.40.0", ] [[package]] @@ -5912,6 +5910,16 @@ dependencies = [ "font-types", ] +[[package]] +name = "read-fonts" +version = "0.39.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4ed38b89c2c77ff968c524145ad65fb010f38af5c7a224b53b81d47ac2daa81" +dependencies = [ + "bytemuck", + "font-types", +] + [[package]] name = "redox_syscall" version = "0.4.1" @@ -6127,7 +6135,7 @@ dependencies = [ "rend", "rkyv_derive", "tinyvec", - "uuid 1.23.2", + "uuid 1.23.3", ] [[package]] @@ -6808,7 +6816,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fbdfe3d2475fbd7ddd1f3e5cf8288a30eb3e5f95832829570cd88115a7434ac" dependencies = [ "bytemuck", - "read-fonts", + "read-fonts 0.37.0", +] + +[[package]] +name = "skrifa" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c34617370ae968efb7161bb2beb517d9084659aae19e24b89e3db25b46e4564" +dependencies = [ + "bytemuck", + "read-fonts 0.39.2", ] [[package]] @@ -7174,11 +7192,11 @@ dependencies = [ [[package]] name = "swash" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "842f3cd369c2ba38966204f983eaa5e54a8e84a7d7159ed36ade2b6c335aae64" +checksum = "d1804632b66a35ca2b1d277eb0a138e10f46cb365b9a6d297e876b69ef79de43" dependencies = [ - "skrifa", + "skrifa 0.42.1", "yazi", "zeno", ] @@ -7981,9 +7999,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.23.2" +version = "1.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d258b83ceec21034727ecee8c382cfa6c3e133699b0742c64571814fb420c9f7" +checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" dependencies = [ "getrandom 0.4.2", "js-sys", @@ -8103,9 +8121,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.122" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" +checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" dependencies = [ "cfg-if", "once_cell", @@ -8116,9 +8134,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.72" +version = "0.4.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f" +checksum = "54568702fabf5d4849ce2b90fadfa64168a097eaf4b351ce9df8b687a0086aaf" dependencies = [ "js-sys", "wasm-bindgen", @@ -8126,9 +8144,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.122" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" +checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -8136,9 +8154,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.122" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" +checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" dependencies = [ "bumpalo", "proc-macro2", @@ -8149,9 +8167,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.122" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" +checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" dependencies = [ "unicode-ident", ] @@ -8327,9 +8345,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.99" +version = "0.3.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436" +checksum = "6e0871acf327f283dc6da28a1696cdc64fb355ba9f935d052021fa77f35cce69" dependencies = [ "js-sys", "wasm-bindgen", @@ -8456,7 +8474,7 @@ dependencies = [ "tokio", "turn", "url", - "uuid 1.23.2", + "uuid 1.23.3", "waitgroup", "webrtc-mdns", "webrtc-util", @@ -9424,7 +9442,7 @@ dependencies = [ "indexmap", "kurbo", "log", - "read-fonts", + "read-fonts 0.37.0", ] [[package]] @@ -9664,7 +9682,7 @@ dependencies = [ "serde_repr", "tracing", "uds_windows", - "uuid 1.23.2", + "uuid 1.23.3", "windows-sys 0.61.2", "winnow 1.0.3", "zbus_macros", diff --git a/Cargo.toml b/Cargo.toml index 514b83f..d6f48fe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,7 +26,7 @@ mimalloc = "0.1" regex = "1.11" tokio-tungstenite = { version = "0.29", features = ["native-tls"] } matchbox_socket = "0.14" -ggrs = { version = "0.12", features = ["sync-send"] } +ggrs = { git = "https://github.com/gschup/ggrs.git", features = ["sync-send"] } rustc-hash = "2.1" futures = "0.3" rand = { version = "0.10", features = ["serde"] } diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 1a0bee2..8290e68 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -221,10 +221,18 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { callback.reset_game = true; break; case SDL_SCANCODE_LEFTBRACKET: - callback.lower_volume = true; + if (event->key.mod & SDL_KMOD_ALT) { + callback.decrease_input_delay = true; + } else { + callback.lower_volume = true; + } break; case SDL_SCANCODE_RIGHTBRACKET: - callback.raise_volume = true; + if (event->key.mod & SDL_KMOD_ALT) { + callback.increase_input_delay = true; + } else { + callback.raise_volume = true; + } break; case SDL_SCANCODE_SLASH: callback.frame_advance = true; @@ -697,6 +705,8 @@ CALL_BACK rdp_check_callback() { callback.reset_game = false; callback.lower_volume = false; callback.raise_volume = false; + callback.decrease_input_delay = false; + callback.increase_input_delay = false; callback.frame_advance = false; return return_value; } diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 9d8d23f..8fe9274 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -34,6 +34,8 @@ typedef struct { bool enable_speedlimiter; bool lower_volume; bool raise_volume; + bool decrease_input_delay; + bool increase_input_delay; bool paused; bool frame_advance; uint32_t save_state_slot; diff --git a/src/device/vi.rs b/src/device/vi.rs index 2b51244..0563681 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -103,9 +103,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u if device.netplay.is_none() { savestates::process_savestates(device); } - if !netplay::netplay_in_rollback(device.netplay.as_ref()) { - let _ = device.ui.video.fps_tx.as_ref().unwrap().try_send(true); - } + let _ = device.ui.video.fps_tx.as_ref().unwrap().try_send(true); } } _ => { @@ -122,10 +120,8 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { cheats::execute_cheats(device, device.cheats.cheats.clone()); } - if !netplay::netplay_in_rollback(device.netplay.as_ref()) { - ui::video::render_frame(); - let _ = device.ui.video.vis_tx.as_ref().unwrap().try_send(true); - } + ui::video::render_frame(); + let _ = device.ui.video.vis_tx.as_ref().unwrap().try_send(true); retroachievements::do_frame(); @@ -143,21 +139,18 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { reset_pace_deadline(device); } - if !netplay::netplay_in_rollback(device.netplay.as_ref()) - && device - .speed_limiter - .frame_counter - .is_multiple_of(device.speed_limiter.limit_freq) + if device + .speed_limiter + .frame_counter + .is_multiple_of(device.speed_limiter.limit_freq) && device.speed_limiter.enabled { speed_limiter(device); } - if !netplay::netplay_in_rollback(device.netplay.as_ref()) { - unsafe { sdl3_sys::events::SDL_PumpEvents() }; - ui::video::update_screen(); - device.speed_limiter.frame_counter += 1; - } + unsafe { sdl3_sys::events::SDL_PumpEvents() }; + ui::video::update_screen(); + device.speed_limiter.frame_counter += 1; if device.netplay.is_some() { device.netplay.as_mut().unwrap().inputs = netplay::process_requests(device); diff --git a/src/netplay.rs b/src/netplay.rs index 3e2a23e..047d1ca 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -42,10 +42,12 @@ pub struct Netplay { pub peers: Vec, pub player_number: usize, pub connected: [bool; 4], + pub input_delay: usize, pub messages: std::collections::HashMap>, pub received_data: std::collections::VecDeque>, pub inputs: Vec<(ui::input::InputData, ggrs::InputStatus)>, pub requests: std::collections::VecDeque>, + pub incoming_message: Vec, } #[derive(serde::Serialize, serde::Deserialize)] @@ -64,31 +66,37 @@ fn send_message(netplay: &mut Netplay, message: NetplayMessage) { } } +fn process_reliable_messages(netplay: &mut Netplay) { + netplay.received_data.extend( + netplay + .reliable_channel + .receive() + .iter() + .map(|(_, data)| data.to_vec()), + ); + + while !netplay.received_data.is_empty() { + if let Some(data) = netplay.received_data.pop_front() { + netplay.incoming_message.extend(data); + + if let Ok(decoded_message) = + postcard::from_bytes::(&netplay.incoming_message) + { + netplay + .messages + .insert(decoded_message.name, decoded_message.data); + netplay.incoming_message.clear(); + } + } + } +} + fn receive_message(netplay: &mut Netplay, name: &str) -> Vec { let timeout = std::time::Duration::from_secs(10); let now = std::time::Instant::now(); - let mut message = vec![]; + loop { - netplay.received_data.extend( - netplay - .reliable_channel - .receive() - .iter() - .map(|(_, data)| data.to_vec()), - ); - - while !netplay.received_data.is_empty() { - if let Some(data) = netplay.received_data.pop_front() { - message.extend(data); - - if let Ok(decoded_message) = postcard::from_bytes::(&message) { - netplay - .messages - .insert(decoded_message.name, decoded_message.data); - message.clear(); - } - } - } + process_reliable_messages(netplay); if let Some(data) = netplay.messages.remove(name) { return data; } @@ -170,19 +178,35 @@ pub fn receive_save(netplay: &mut Netplay, save_type: &str, save_data: &mut Vec< *save_data = message; } -fn pending_frames(netplay: &Netplay) -> usize { - netplay - .requests - .iter() - .filter(|r| matches!(r, ggrs::GgrsRequest::AdvanceFrame { .. })) - .count() +pub fn send_input_delay(netplay: &mut Netplay, input_delay: usize) { + let message = NetplayMessage { + name: "input_delay".to_string(), + data: input_delay.to_be_bytes().to_vec(), + }; + send_message(netplay, message); + change_input_delay(netplay, input_delay); } -pub fn netplay_in_rollback(netplay: Option<&Netplay>) -> bool { - if let Some(netplay) = netplay { - pending_frames(netplay) != 0 - } else { - false +fn change_input_delay(netplay: &mut Netplay, input_delay: usize) { + netplay.input_delay = input_delay; + for handle in netplay.session.local_player_handles() { + if let Err(e) = netplay.session.set_input_delay(handle, input_delay) { + eprintln!("Error setting input delay: {}", e); + } else { + ui::video::onscreen_message( + &format!("Input delay: {}", input_delay), + ui::video::MESSAGE_LENGTH_MESSAGE_VERY_SHORT, + ); + } + } +} + +fn check_input_delay(netplay: &mut Netplay) { + if let Some(data) = netplay.messages.remove("input_delay") { + let input_delay = usize::from_be_bytes(data.try_into().unwrap()); + if input_delay != netplay.input_delay { + change_input_delay(netplay, input_delay); + } } } @@ -213,12 +237,12 @@ pub fn process_requests( } } else { // unsafe { sdl3_sys::events::SDL_PumpEvents() }; // so the screen doesn't freeze - return process_netplay(device); + process_netplay(device); } } } -fn process_netplay(device: &mut device::Device) -> Vec<(ui::input::InputData, ggrs::InputStatus)> { +fn process_netplay(device: &mut device::Device) { let netplay = device.netplay.as_mut().unwrap(); netplay.session.poll_remote_clients(); @@ -252,8 +276,9 @@ fn process_netplay(device: &mut device::Device) -> Vec<(ui::input::InputData, gg } } + process_reliable_messages(netplay); + check_input_delay(netplay); advance_frame(device); - process_requests(device) } fn advance_frame(device: &mut device::Device) { @@ -324,6 +349,7 @@ pub fn init( .with_fps(if pal { 50 } else { 60 }) .unwrap() .with_desync_detection_mode(ggrs::DesyncDetection::On { interval: 60 }) + .with_max_prediction_window(0) .with_disconnect_timeout(std::time::Duration::from_secs(if cfg!(debug_assertions) { 10 } else { @@ -357,6 +383,8 @@ pub fn init( } Some(Netplay { + incoming_message: vec![], + input_delay, session, reliable_channel, peers, diff --git a/src/savestates.rs b/src/savestates.rs index 294d880..633b58f 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -263,9 +263,7 @@ pub fn load_savestate(device: &mut device::Device, rewind: bool, rewind_frame: O if let Some(mut state) = state_data && device.rdram.size == state.device.rdram.size { - if device.netplay.is_none() { - ui::video::idle(); - } + ui::video::idle(); device.savestate.last_rewind_saved = state.device.vi.elapsed_time; diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 46f8cef..17c0822 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -1,5 +1,4 @@ use crate::device; -use crate::netplay; use crate::ui; static ADJUST_LOCKED: std::sync::atomic::AtomicBool = std::sync::atomic::AtomicBool::new(false); @@ -174,9 +173,6 @@ pub fn play_audio(device: &device::Device, dram_addr: usize, length: u64) { if device.ui.audio.audio_stream.is_null() { return; } - if netplay::netplay_in_rollback(device.netplay.as_ref()) { - return; - } let mut primary_buffer: Vec = vec![0; length as usize / 2]; let mut i = 0; diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 162067f..8a81c3a 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -22,7 +22,7 @@ pub struct NetplayDevice { pub server_addr: String, pub player_number: usize, pub number_of_players: usize, - pub input_delay: i32, + pub input_delay: usize, } fn check_latest_version(weak: slint::Weak) { diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 43fba92..1606678 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -34,7 +34,7 @@ export component AppWindow inherits Window { callback join_session_button_clicked; callback netplay_discord_button_clicked; callback netplay_feedback_button_clicked; - callback netplay_begin_game; + callback netplay_begin_game(int); callback netplay_send_chat_message(string); callback netplay_refresh_sessions; callback netplay_create_session(string, string, string, string, string, string); @@ -242,8 +242,8 @@ export component AppWindow inherits Window { send_chat_message(message) => { netplay_send_chat_message(message); } - begin_game => { - netplay_begin_game(); + begin_game(a) => { + netplay_begin_game(a); } close => { netplay_close(); diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint index 0acae03..d3f4cd3 100644 --- a/src/ui/gui/netplay_wait.slint +++ b/src/ui/gui/netplay_wait.slint @@ -15,7 +15,7 @@ export global NetplayWaitData { export component NetplayWait inherits Page { title: @tr("Netplay: Waiting Room"); callback send_chat_message(string); - callback begin_game; + callback begin_game(int); callback close; VerticalBox { alignment: start; @@ -94,7 +94,7 @@ export component NetplayWait inherits Page { horizontal-alignment: center; wrap: word-wrap; } - HorizontalBox { + if NetplayData.player_name == NetplayWaitData.players[0]: HorizontalBox { alignment: center; Text { text: @tr("Local Input Delay:"); @@ -124,7 +124,7 @@ export component NetplayWait inherits Page { enabled: NetplayWaitData.can_start; clicked => { NetplayWaitData.can_start = false; - begin_game(); + begin_game(NetplayWaitData.input_delay); } } Button { diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 810f697..d7f4032 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -34,6 +34,7 @@ struct NetplaySession { features: Option>, players: Vec, server_address: Option, + input_delay: Option, } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] @@ -256,6 +257,7 @@ fn create_session( features: Some(features), players: vec![player_name], server_address: None, + input_delay: None, }; let create_session = NetplayLobbyMessage { message_type: MessageType::RequestCreateSession, @@ -358,6 +360,7 @@ fn join_session( features: None, players: vec![player_name], server_address: None, + input_delay: None, }; let join_session = NetplayLobbyMessage { message_type: MessageType::RequestJoinSession, @@ -498,11 +501,11 @@ fn setup_wait_window( }); let sender = netplay_write_sender.clone(); - app.on_netplay_begin_game(move || { + app.on_netplay_begin_game(move |chosen_input_delay| { let begin_game = NetplayLobbyMessage { message_type: MessageType::RequestBeginGame, sessions: std::collections::HashMap::new(), - message: None, + message: Some(chosen_input_delay.to_string()), }; sender.send(Some(begin_game)).unwrap(); }); @@ -547,7 +550,14 @@ fn setup_wait_window( .upgrade_in_event_loop(move |handle| { let player_name = handle.get_netplay_player_name(); let players = handle.get_netplay_players(); - let input_delay = handle.get_netplay_input_delay(); + let input_delay = response + .sessions + .iter() + .next() + .unwrap() + .1 + .input_delay + .unwrap(); let player_number = players.iter().position(|x| x == player_name).unwrap(); run_rom( diff --git a/src/ui/video.rs b/src/ui/video.rs index 5c08a0b..74daf0d 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -1,7 +1,7 @@ #![allow(non_snake_case)] #![allow(non_camel_case_types)] include!(concat!(env!("OUT_DIR"), "/parallel_bindings.rs")); -use crate::{device, retroachievements, ui}; +use crate::{device, netplay, retroachievements, ui}; const PAL_WIDESCREEN_WIDTH: i32 = 512; const PAL_STANDARD_WIDTH: i32 = 384; @@ -243,6 +243,16 @@ pub fn check_callback(device: &mut device::Device) -> (bool, bool) { } else if callback.raise_volume { ui::audio::raise_audio_volume(&mut device.ui); } + + if let Some(netplay) = &mut device.netplay + && netplay.player_number == 0 + { + if callback.decrease_input_delay && netplay.input_delay > 0 { + netplay::send_input_delay(netplay, netplay.input_delay - 1); + } else if callback.increase_input_delay { + netplay::send_input_delay(netplay, netplay.input_delay + 1); + } + } (speed_limiter_toggled, callback.paused) } From 6cc6153abbc1eb27cd185605e92c97bb57cf001b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 9 Jun 2026 16:47:16 +0200 Subject: [PATCH 1014/1117] improve wait room (#1045) --- src/ui/gui/netplay_wait.slint | 7 ++++--- src/ui/netplay.rs | 11 +++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint index d3f4cd3..f4ffc49 100644 --- a/src/ui/gui/netplay_wait.slint +++ b/src/ui/gui/netplay_wait.slint @@ -8,7 +8,7 @@ export global NetplayWaitData { in-out property can_start; in-out property chat_text; in-out property input_delay; - in-out property recommended_delay; + in-out property recommended_delay; in-out property game_pal; } @@ -105,6 +105,7 @@ export component NetplayWait inherits Page { ComboBox { model: ["0", "1", "2", "3", "4", "5", "6", "7", "8"]; current-index: NetplayWaitData.input_delay; + enabled: NetplayWaitData.recommended_delay != 0; selected => { NetplayWaitData.input_delay = self.current-index; } @@ -112,7 +113,7 @@ export component NetplayWait inherits Page { } Text { - text: @tr("Recommended: ") + NetplayWaitData.recommended_delay; + text: @tr("Recommended: ") + (NetplayWaitData.recommended_delay == 0 ? "Calculating..." : NetplayWaitData.recommended_delay); horizontal-alignment: center; vertical-alignment: center; } @@ -121,7 +122,7 @@ export component NetplayWait inherits Page { alignment: center; Button { text: @tr("Start Game"); - enabled: NetplayWaitData.can_start; + enabled: NetplayWaitData.players[0] == NetplayData.player_name && NetplayWaitData.can_start && NetplayWaitData.recommended_delay != 0; clicked => { NetplayWaitData.can_start = false; begin_game(NetplayWaitData.input_delay); diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index d7f4032..63b98e5 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -446,9 +446,11 @@ fn update_ping( }; let recommendation = (ping as f64 / (1000.0 / refresh_rate)) as i32 + 1; - handle.set_netplay_recommended_delay( - recommendation.to_string().into(), - ); + + if handle.get_netplay_recommended_delay() == 0 { + handle.set_netplay_input_delay(recommendation); + } + handle.set_netplay_recommended_delay(recommendation); }) .unwrap(); } @@ -474,14 +476,12 @@ fn setup_wait_window( game_settings: ui::GameSettings, app: &AppWindow, ) { - app.set_netplay_recommended_delay("Calculating...".into()); update_ping(server_addr.clone(), close_ping_rx, app.as_weak()); app.set_netplay_session_name(session_name); app.set_netplay_game_name(game_name); app.set_netplay_rom_path(rom_path); app.set_netplay_can_start(true); - app.set_netplay_input_delay(2); let request_update = NetplayLobbyMessage { message_type: MessageType::RequestUpdateSession, @@ -585,7 +585,6 @@ fn setup_wait_window( weak_app .upgrade_in_event_loop(move |handle| { handle.set_netplay_can_start(true); - if let Some(message) = response.message { handle.invoke_show_message(message.into(), true); } From 0deb1d11fc149742e8553bd1e8fad2bc08ca197d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 9 Jun 2026 18:09:11 +0200 Subject: [PATCH 1015/1117] fix some netplay state (#1046) --- src/ui/gui/appwindow.slint | 3 +++ src/ui/netplay.rs | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 1606678..c3eeed4 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -378,6 +378,9 @@ export component AppWindow inherits Window { NetplayData.password = ""; NetplayData.session_name = ""; NetplayWaitData.chat_text = ""; + NetplayWaitData.input_delay = 0; + NetplayWaitData.recommended_delay = 0; + NetplayWaitData.players = []; NetplayData.pending_session = false; NetplayData.pending_refresh = false; } diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 63b98e5..8d11a7d 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -352,7 +352,11 @@ fn join_session( password: String, ) { let session = NetplaySession { - password: Some(password), + password: if password.is_empty() { + None + } else { + Some(password) + }, game_name: None, motd: None, game_checksum: Some(game_hash), From d589d8bac2645058b36a7e779b25d3b164fa4595 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 9 Jun 2026 18:56:56 +0200 Subject: [PATCH 1016/1117] improve loop management (#1047) * improve loop management * more --- src/ui/netplay.rs | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 8d11a7d..61f0ee9 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -111,7 +111,6 @@ fn setup_create_window( let weak = app.as_weak(); app.on_netplay_create_session( move |session_name, player_name, game_name, game_hash, game_cheats, password| { - let _ = netplay_write_sender.send(None); // close current websocket if any manage_websocket( netplay_read_sender.clone(), netplay_write_receiver.resubscribe(), @@ -394,9 +393,6 @@ fn update_ping( let mut write_clone = write.clone(); tokio::spawn(async move { loop { - if close_ping_rx.try_recv().is_ok() { - break; - } socket.update_peers(); for peer in socket.connected_peers() { let now = std::time::SystemTime::now() @@ -410,7 +406,22 @@ fn update_ping( let data = postcard::to_stdvec(&ping_message).unwrap(); let _ = write.send((peer, data.into())).await; } - tokio::time::sleep(std::time::Duration::from_secs(1)).await; + tokio::select! { + result = close_ping_rx.recv() => { + match result { + Ok(()) => { + break; + } + Err(tokio::sync::broadcast::error::RecvError::Lagged(_)) => { + panic!("close_ping_rx lagged"); + } + Err(tokio::sync::broadcast::error::RecvError::Closed) => { + break; + } + } + } + _ = tokio::time::sleep(std::time::Duration::from_secs(1)) => {} + } } socket.close(); }); @@ -626,7 +637,6 @@ fn setup_join_window( netplay_write_receiver: tokio::sync::broadcast::Receiver>, close_ping_rx: tokio::sync::broadcast::Receiver<()>, ) { - let _ = netplay_write_sender.send(None); // close current websocket if any manage_websocket( netplay_read_sender.clone(), netplay_write_receiver.resubscribe(), From 02d53beeac94c5d9d1c3b275fff2fa713176bdd5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 9 Jun 2026 19:11:49 +0200 Subject: [PATCH 1017/1117] bump ver (#1048) --- Cargo.lock | 14 +++++++------- Cargo.toml | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0f81167..2ada726 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2776,7 +2776,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.22" +version = "1.1.24" dependencies = [ "bindgen", "cc", @@ -5121,9 +5121,9 @@ checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "openssl-src" -version = "300.6.0+3.6.2" +version = "300.6.1+3.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8e8cbfd3a4a8c8f089147fd7aaa33cf8c7450c4d09f8f80698a0cf093abeff4" +checksum = "46eb8fb9fb3b61ce1c0f8a026c4c1a0714d3a9e138e7fbde78753ce2babc3846" dependencies = [ "cc", ] @@ -5960,9 +5960,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.3" +version = "1.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" dependencies = [ "aho-corasick", "memchr", @@ -5983,9 +5983,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rend" diff --git a/Cargo.toml b/Cargo.toml index d6f48fe..fb22266 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.22" +version = "1.1.24" edition = "2024" rust-version = "1.96.0" From 810852997a9fb709f12eb94b3e1ea0de34f1112f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 9 Jun 2026 22:27:12 +0200 Subject: [PATCH 1018/1117] improve ping loop (#1049) --- src/ui/netplay.rs | 109 +++++++++++++++++++++++++++------------------- 1 file changed, 63 insertions(+), 46 deletions(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 61f0ee9..2fa85a9 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -391,6 +391,7 @@ fn update_ping( let channel = socket.take_channel(0).unwrap(); let (mut write, mut read) = channel.split(); let mut write_clone = write.clone(); + let mut close_ping_rx_clone = close_ping_rx.resubscribe(); tokio::spawn(async move { loop { socket.update_peers(); @@ -407,7 +408,7 @@ fn update_ping( let _ = write.send((peer, data.into())).await; } tokio::select! { - result = close_ping_rx.recv() => { + result = close_ping_rx_clone.recv() => { match result { Ok(()) => { break; @@ -423,56 +424,72 @@ fn update_ping( _ = tokio::time::sleep(std::time::Duration::from_secs(1)) => {} } } - socket.close(); }); tokio::spawn(async move { let mut pings = vec![]; - while let Some((peer, data)) = read.next().await { - let decoded_message = postcard::from_bytes::(&data); - match decoded_message { - Ok(message) => match message.message_type { - PingType::Ping => { - let pong_message = NetplayPingMessage { - message_type: PingType::Pong, - timestamp: message.timestamp, - }; - let data = postcard::to_stdvec(&pong_message).unwrap(); - let _ = write_clone.send((peer, data.into())).await; - } - PingType::Pong => { - let now = std::time::SystemTime::now() - .duration_since(std::time::UNIX_EPOCH) - .unwrap() - .as_millis(); - let ping = (now - message.timestamp) / 2; // calculate one-way latency - pings.push(ping); - if pings.len() > 12 { - // once we have at least 12 samples, remove the highest 2 and return the next highest - pings.sort(); - pings.truncate(pings.len() - 2); - let ping = *pings.last().unwrap(); - pings.clear(); - weak_app - .upgrade_in_event_loop(move |handle| { - let refresh_rate = if handle.get_netplay_game_pal() { - 50.0 - } else { - 60.0 - }; - let recommendation = - (ping as f64 / (1000.0 / refresh_rate)) as i32 + 1; - - if handle.get_netplay_recommended_delay() == 0 { - handle.set_netplay_input_delay(recommendation); - } - handle.set_netplay_recommended_delay(recommendation); - }) - .unwrap(); + loop { + tokio::select! { + result = close_ping_rx.recv() => { + match result { + Ok(()) => { + break; + } + Err(tokio::sync::broadcast::error::RecvError::Lagged(_)) => { + panic!("close_ping_rx lagged"); + } + Err(tokio::sync::broadcast::error::RecvError::Closed) => { + break; + } + } + } + Some((peer, data)) = read.next() => { + let decoded_message = postcard::from_bytes::(&data); + match decoded_message { + Ok(message) => match message.message_type { + PingType::Ping => { + let pong_message = NetplayPingMessage { + message_type: PingType::Pong, + timestamp: message.timestamp, + }; + let data = postcard::to_stdvec(&pong_message).unwrap(); + let _ = write_clone.send((peer, data.into())).await; + } + PingType::Pong => { + let now = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_millis(); + let ping = (now - message.timestamp) / 2; // calculate one-way latency + pings.push(ping); + if pings.len() > 12 { + // once we have at least 12 samples, remove the highest 2 and return the next highest + pings.sort(); + pings.truncate(pings.len() - 2); + let ping = *pings.last().unwrap(); + pings.clear(); + weak_app + .upgrade_in_event_loop(move |handle| { + let refresh_rate = if handle.get_netplay_game_pal() { + 50.0 + } else { + 60.0 + }; + let recommendation = + (ping as f64 / (1000.0 / refresh_rate)) as i32 + 1; + + if handle.get_netplay_recommended_delay() == 0 { + handle.set_netplay_input_delay(recommendation); + } + handle.set_netplay_recommended_delay(recommendation); + }) + .unwrap(); + } + } + }, + Err(e) => { + eprintln!("Failed to parse message: {}", e); } } - }, - Err(e) => { - eprintln!("Failed to parse message: {}", e); } } } From 4a63f469bfe5e9f839e5bff9f7c3b1bdd59c8056 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 10 Jun 2026 10:55:51 +0200 Subject: [PATCH 1019/1117] update VI on V_START (#1050) * update VI on V_START * more * more * more * more --- src/device/events.rs | 4 ++- src/device/vi.rs | 59 ++++++++++++++++++++++++++------------------ 2 files changed, 38 insertions(+), 25 deletions(-) diff --git a/src/device/events.rs b/src/device/events.rs index 56a968a..b4769a4 100644 --- a/src/device/events.rs +++ b/src/device/events.rs @@ -15,7 +15,8 @@ pub const EVENT_TYPE_VRU: usize = 10; pub const EVENT_TYPE_PAK: usize = 11; pub const EVENT_TYPE_SAVE: usize = 12; pub const EVENT_TYPE_NMI: usize = 13; -pub const EVENT_TYPE_COUNT: usize = 14; +pub const EVENT_TYPE_UPDATE_SCREEN: usize = 14; +pub const EVENT_TYPE_COUNT: usize = 15; #[derive(PartialEq, Copy, Clone, serde::Serialize, serde::Deserialize)] pub struct Event { @@ -65,6 +66,7 @@ fn get_event_handler(name: usize) -> fn(&mut device::Device) { EVENT_TYPE_PAK => device::controller::pak_switch_event, EVENT_TYPE_SAVE => ui::storage::save_event, EVENT_TYPE_NMI => device::exceptions::reset_event, + EVENT_TYPE_UPDATE_SCREEN => device::vi::update_screen, _ => dummy_event, } } diff --git a/src/device/vi.rs b/src/device/vi.rs index 0563681..0440f39 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -3,14 +3,14 @@ use crate::{cheats, device, netplay, retroachievements, savestates, ui}; const VI_STATUS_REG: usize = 0; const VI_ORIGIN_REG: usize = 1; //const VI_WIDTH_REG: usize = 2; -//const VI_V_INTR_REG: usize = 3; +const VI_V_INTR_REG: usize = 3; const VI_CURRENT_REG: usize = 4; //const VI_BURST_REG: usize = 5; const VI_V_SYNC_REG: usize = 6; const VI_H_SYNC_REG: usize = 7; //const VI_LEAP_REG: usize = 8; //const VI_H_START_REG: usize = 9; -//const VI_V_START_REG: usize = 10; +const VI_V_START_REG: usize = 10; //const VI_V_BURST_REG: usize = 11; //const VI_X_SCALE_REG: usize = 12; //const VI_Y_SCALE_REG: usize = 13; @@ -113,28 +113,11 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) } -pub fn vertical_interrupt_event(device: &mut device::Device) { - device.vi.elapsed_time += device.vi.frame_time; - - if device.cheats.enabled { - cheats::execute_cheats(device, device.cheats.cheats.clone()); - } - +pub fn update_screen(device: &mut device::Device) { ui::video::render_frame(); - let _ = device.ui.video.vis_tx.as_ref().unwrap().try_send(true); - - retroachievements::do_frame(); let (speed_limiter_toggled, paused) = ui::video::check_callback(device); - if device.netplay.is_none() - && device.ui.config.emulation.rewind - && device.vi.elapsed_time - device.savestate.last_rewind_saved > 1.0 - { - device.savestate.save_rewind = true; - device.savestate.last_rewind_saved = device.vi.elapsed_time; - } - if speed_limiter_toggled { reset_pace_deadline(device); } @@ -154,9 +137,7 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { if device.netplay.is_some() { device.netplay.as_mut().unwrap().inputs = netplay::process_requests(device); - } - - if device.netplay.is_none() && paused { + } else if paused { if retroachievements::get_hardcore() { ui::video::onscreen_message( "Cannot pause in RA hardcore mode", @@ -166,6 +147,26 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { ui::video::pause_loop(&mut device.ui, device.vi.frame_time); } } +} + +pub fn vertical_interrupt_event(device: &mut device::Device) { + device.vi.elapsed_time += device.vi.frame_time; + + if device.cheats.enabled { + cheats::execute_cheats(device, device.cheats.cheats.clone()); + } + + let _ = device.ui.video.vis_tx.as_ref().unwrap().try_send(true); + + retroachievements::do_frame(); + + if device.netplay.is_none() + && device.ui.config.emulation.rewind + && device.vi.elapsed_time - device.savestate.last_rewind_saved > 1.0 + { + device.savestate.save_rewind = true; + device.savestate.last_rewind_saved = device.vi.elapsed_time; + } /* toggle vi field if in interlaced mode */ device.vi.field ^= (device.vi.regs[VI_STATUS_REG] >> 6) & 0x1; @@ -176,7 +177,17 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { device, device::events::EVENT_TYPE_VI, device.cpu.next_event_count + device.vi.delay, - ) + ); + + let v_intr = device.vi.regs[VI_V_INTR_REG] & 0x3FF; + let v_start = (device.vi.regs[VI_V_START_REG] >> 16) & 0x3FF; + if v_start > v_intr { + device::events::create_event( + device, + device::events::EVENT_TYPE_UPDATE_SCREEN, + (v_start - v_intr) as u64 * device.vi.count_per_scanline, + ); + } } pub fn init(device: &mut device::Device) { From db21800d9f63221cab68e5b7c81fa0331dd789b1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 10 Jun 2026 12:54:39 +0200 Subject: [PATCH 1020/1117] move rewind check (#1051) * move rewind check * more --- src/device.rs | 1 - src/device/vi.rs | 8 -------- src/savestates.rs | 22 +++++++++++++--------- 3 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/device.rs b/src/device.rs index 4cc0947..c58b2e2 100644 --- a/src/device.rs +++ b/src/device.rs @@ -314,7 +314,6 @@ impl Device { savestate: savestates::Savestate { save_state: false, load_state: false, - save_rewind: false, load_rewind: false, last_rewind_saved: 0.0, rewind_pool: std::sync::Arc::new(std::sync::Mutex::new( diff --git a/src/device/vi.rs b/src/device/vi.rs index 0440f39..470498c 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -160,14 +160,6 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { retroachievements::do_frame(); - if device.netplay.is_none() - && device.ui.config.emulation.rewind - && device.vi.elapsed_time - device.savestate.last_rewind_saved > 1.0 - { - device.savestate.save_rewind = true; - device.savestate.last_rewind_saved = device.vi.elapsed_time; - } - /* toggle vi field if in interlaced mode */ device.vi.field ^= (device.vi.regs[VI_STATUS_REG] >> 6) & 0x1; diff --git a/src/savestates.rs b/src/savestates.rs index 633b58f..5fca84a 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -74,7 +74,6 @@ where pub struct Savestate { pub save_state: bool, pub load_state: bool, - pub save_rewind: bool, pub load_rewind: bool, pub last_rewind_saved: f64, #[serde(skip)] @@ -96,18 +95,23 @@ static SAVES_CLONE: std::sync::LazyLock> = std::sync::LazyLock::new(|| std::sync::Mutex::new(ui::storage::Saves::default())); pub fn process_savestates(device: &mut device::Device) { - if device.savestate.save_state || device.savestate.save_rewind { - let rewind = device.savestate.save_rewind && !device.savestate.save_state; - if rewind { - device.savestate.save_rewind = false; - } + let save_rewind = if device.netplay.is_none() + && device.ui.config.emulation.rewind + && device.vi.elapsed_time - device.savestate.last_rewind_saved > 1.0 + { + device.savestate.last_rewind_saved = device.vi.elapsed_time; + true + } else { + false + }; + + if device.savestate.save_state || save_rewind { + create_savestate(device, !device.savestate.save_state, None); device.savestate.save_state = false; - create_savestate(device, rewind, None); } else if device.savestate.load_state || device.savestate.load_rewind { + load_savestate(device, device.savestate.load_rewind, None); device.savestate.load_state = false; - let rewind = device.savestate.load_rewind; device.savestate.load_rewind = false; - load_savestate(device, rewind, None); } } From 88f00f56388db15fa874301d99ba213f1d46d21e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 10 Jun 2026 14:07:10 +0200 Subject: [PATCH 1021/1117] clean up if statement (#1053) --- src/savestates.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/savestates.rs b/src/savestates.rs index 5fca84a..8bec72e 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -245,12 +245,11 @@ pub fn load_savestate(device: &mut device::Device, rewind: bool, rewind_frame: O } else { None } - } else if let savestate = std::fs::read(&device.ui.storage.paths.savestate_file_path) - && let Ok(savestate) = &savestate - && let Ok(device_data) = ui::storage::decompress_file(savestate, "device") - && let Ok(saves_data) = ui::storage::decompress_file(savestate, "saves") - && let Ok(rdp_state) = ui::storage::decompress_file(savestate, "rdp_state") - && let Ok(ra_state) = ui::storage::decompress_file(savestate, "ra_state") + } else if let Ok(savestate) = std::fs::read(&device.ui.storage.paths.savestate_file_path) + && let Ok(device_data) = ui::storage::decompress_file(&savestate, "device") + && let Ok(saves_data) = ui::storage::decompress_file(&savestate, "saves") + && let Ok(rdp_state) = ui::storage::decompress_file(&savestate, "rdp_state") + && let Ok(ra_state) = ui::storage::decompress_file(&savestate, "ra_state") && let Ok(state) = postcard::from_bytes::>(&device_data) && let Ok(saves) = postcard::from_bytes(&saves_data) { From 72e4a6b94a24f53d212b83331dcb1d8fb312346a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 10 Jun 2026 17:09:07 +0200 Subject: [PATCH 1022/1117] early rollback code (#1054) * some rollback test * more --- src/device/vi.rs | 28 +++++++++++++++++----------- src/netplay.rs | 16 ++++++++++++++++ src/savestates.rs | 4 +++- src/ui/audio.rs | 5 +++++ 4 files changed, 41 insertions(+), 12 deletions(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index 470498c..23c73c3 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -103,7 +103,9 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u if device.netplay.is_none() { savestates::process_savestates(device); } - let _ = device.ui.video.fps_tx.as_ref().unwrap().try_send(true); + if !netplay::in_rollback(device.netplay.as_ref()) { + let _ = device.ui.video.fps_tx.as_ref().unwrap().try_send(true); + } } } _ => { @@ -114,7 +116,9 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } pub fn update_screen(device: &mut device::Device) { - ui::video::render_frame(); + if !netplay::in_rollback(device.netplay.as_ref()) { + ui::video::render_frame(); + } let (speed_limiter_toggled, paused) = ui::video::check_callback(device); @@ -122,18 +126,22 @@ pub fn update_screen(device: &mut device::Device) { reset_pace_deadline(device); } - if device - .speed_limiter - .frame_counter - .is_multiple_of(device.speed_limiter.limit_freq) + if !netplay::in_rollback(device.netplay.as_ref()) + && device + .speed_limiter + .frame_counter + .is_multiple_of(device.speed_limiter.limit_freq) && device.speed_limiter.enabled { speed_limiter(device); } - unsafe { sdl3_sys::events::SDL_PumpEvents() }; - ui::video::update_screen(); - device.speed_limiter.frame_counter += 1; + if !netplay::in_rollback(device.netplay.as_ref()) { + unsafe { sdl3_sys::events::SDL_PumpEvents() }; + ui::video::update_screen(); + device.speed_limiter.frame_counter += 1; + let _ = device.ui.video.vis_tx.as_ref().unwrap().try_send(true); + } if device.netplay.is_some() { device.netplay.as_mut().unwrap().inputs = netplay::process_requests(device); @@ -156,8 +164,6 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { cheats::execute_cheats(device, device.cheats.cheats.clone()); } - let _ = device.ui.video.vis_tx.as_ref().unwrap().try_send(true); - retroachievements::do_frame(); /* toggle vi field if in interlaced mode */ diff --git a/src/netplay.rs b/src/netplay.rs index 047d1ca..4bd2918 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -210,6 +210,22 @@ fn check_input_delay(netplay: &mut Netplay) { } } +fn pending_frames(netplay: &Netplay) -> usize { + netplay + .requests + .iter() + .filter(|r| matches!(r, ggrs::GgrsRequest::AdvanceFrame { .. })) + .count() +} + +pub fn in_rollback(netplay: Option<&Netplay>) -> bool { + if let Some(netplay) = netplay { + pending_frames(netplay) != 0 + } else { + false + } +} + pub fn process_requests( device: &mut device::Device, ) -> Vec<(ui::input::InputData, ggrs::InputStatus)> { diff --git a/src/savestates.rs b/src/savestates.rs index 8bec72e..6664364 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -266,7 +266,9 @@ pub fn load_savestate(device: &mut device::Device, rewind: bool, rewind_frame: O if let Some(mut state) = state_data && device.rdram.size == state.device.rdram.size { - ui::video::idle(); + if device.netplay.is_none() { + ui::video::idle(); + } device.savestate.last_rewind_saved = state.device.vi.elapsed_time; diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 17c0822..b5936dd 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -1,4 +1,5 @@ use crate::device; +use crate::netplay; use crate::ui; static ADJUST_LOCKED: std::sync::atomic::AtomicBool = std::sync::atomic::AtomicBool::new(false); @@ -174,6 +175,10 @@ pub fn play_audio(device: &device::Device, dram_addr: usize, length: u64) { return; } + if netplay::in_rollback(device.netplay.as_ref()) { + return; + } + let mut primary_buffer: Vec = vec![0; length as usize / 2]; let mut i = 0; while i < length as usize / 2 { From aa0bde0999625a22ff912c3dcdd2434c67f6c896 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 11 Jun 2026 07:16:13 +0200 Subject: [PATCH 1023/1117] use tls-vendored (#1056) --- Cargo.lock | 8 ++++---- Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2ada726..5df4b7b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9760,18 +9760,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.50" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" +checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.50" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" +checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index fb22266..e8fd19e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,7 +24,7 @@ spin_sleep = "1.3" encoding_rs = "0.8" mimalloc = "0.1" regex = "1.11" -tokio-tungstenite = { version = "0.29", features = ["native-tls"] } +tokio-tungstenite = { version = "0.29", features = ["native-tls-vendored"] } matchbox_socket = "0.14" ggrs = { git = "https://github.com/gschup/ggrs.git", features = ["sync-send"] } rustc-hash = "2.1" From bfeba94e208ff83969a27ec5e48ae69e2c9dc0de Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 11 Jun 2026 07:29:28 +0200 Subject: [PATCH 1024/1117] show error (#1057) --- src/ui/netplay.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 2fa85a9..380d60b 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -331,11 +331,14 @@ fn create_session( Ok(Err(err)) => { panic!("netplay_read_receiver error: {err}"); } - Err(_) => { + Err(e) => { weak_app .upgrade_in_event_loop(move |handle| { handle.set_netplay_pending_session(false); - handle.invoke_show_message("Server did not respond".into(), true); + handle.invoke_show_message( + format!("Server did not respond: {e}").into(), + true, + ); }) .unwrap(); } @@ -793,10 +796,13 @@ fn setup_join_window( Ok(None) => { break; } - Err(_) => { + Err(e) => { weak.upgrade_in_event_loop(move |handle| { handle.set_netplay_pending_session(false); - handle.invoke_show_message("Server did not respond".into(), true); + handle.invoke_show_message( + format!("Server did not respond: {e}").into(), + true, + ); }) .unwrap(); } From b171d48f87e7558dd0298eb7bcf0079860a86a5c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 11 Jun 2026 07:36:00 +0200 Subject: [PATCH 1025/1117] print errors (#1058) --- src/ui/netplay.rs | 100 +++++++++++++++++++++++++--------------------- 1 file changed, 54 insertions(+), 46 deletions(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 380d60b..26c20a5 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -144,62 +144,70 @@ fn manage_websocket( .headers_mut() .insert("Authorization", env!("NETPLAY_ID").parse().unwrap()); tokio::spawn(async move { - if let Ok(Ok((socket, _response))) = tokio::time::timeout( + match tokio::time::timeout( std::time::Duration::from_secs(2), tokio_tungstenite::connect_async(request), ) .await { - let (mut write, mut read) = socket.split(); + Ok(Ok((socket, _response))) => { + let (mut write, mut read) = socket.split(); - tokio::spawn(async move { - while let Some(Ok(response)) = read.next().await { - let decoded_response = - postcard::from_bytes::(&response.into_data()); - match decoded_response { - Ok(message) => { - let _ = netplay_read_sender.send(Some(message)); - } - Err(e) => { - eprintln!("Failed to parse message: {}", e); - } - } - } - }); - tokio::spawn(async move { - loop { - match netplay_write_receiver.recv().await { - Ok(Some(response)) => { - if let Err(e) = write - .send(Message::Binary(Bytes::from( - postcard::to_stdvec(&response).unwrap(), - ))) - .await - { - eprintln!("Failed to send message: {}", e); + tokio::spawn(async move { + while let Some(Ok(response)) = read.next().await { + let decoded_response = + postcard::from_bytes::(&response.into_data()); + match decoded_response { + Ok(message) => { + let _ = netplay_read_sender.send(Some(message)); + } + Err(e) => { + eprintln!("Failed to parse message: {}", e); } } - Ok(None) => { - break; - } - Err(tokio::sync::broadcast::error::RecvError::Lagged(_)) => { - panic!("netplay_write_receiver lagged"); - } - Err(tokio::sync::broadcast::error::RecvError::Closed) => { - break; // exit the loop if the receiver is closed + } + }); + tokio::spawn(async move { + loop { + match netplay_write_receiver.recv().await { + Ok(Some(response)) => { + if let Err(e) = write + .send(Message::Binary(Bytes::from( + postcard::to_stdvec(&response).unwrap(), + ))) + .await + { + eprintln!("Failed to send message: {}", e); + } + } + Ok(None) => { + break; + } + Err(tokio::sync::broadcast::error::RecvError::Lagged(_)) => { + panic!("netplay_write_receiver lagged"); + } + Err(tokio::sync::broadcast::error::RecvError::Closed) => { + break; // exit the loop if the receiver is closed + } } } - } - if let Err(e) = write - .send(Message::Close(Some(CloseFrame { - code: CloseCode::Normal, - reason: Utf8Bytes::from(""), - }))) - .await - { - eprintln!("Failed to send close message: {}", e); - } - }); + if let Err(e) = write + .send(Message::Close(Some(CloseFrame { + code: CloseCode::Normal, + reason: Utf8Bytes::from(""), + }))) + .await + { + eprintln!("Failed to send close message: {}", e); + } + }); + } + Ok(Err(e)) => { + eprintln!("Failed to connect to netplay: {}", e); + } + Err(e) => { + eprintln!("Failed to connect to netplay: {}", e); + } } }); } From 235a4af0a9af06e43cf95c9e80638edbd4e2c3c4 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 11 Jun 2026 09:38:05 +0200 Subject: [PATCH 1026/1117] check number of peers (#1059) --- src/ui/netplay.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 26c20a5..d9401c3 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -54,6 +54,7 @@ enum PingType { struct NetplayPingMessage { message_type: PingType, timestamp: u128, + num_of_peers: usize, } fn select_rom(weak: slint::Weak, rom_dir: slint::SharedString) { @@ -414,6 +415,7 @@ fn update_ping( let ping_message = NetplayPingMessage { message_type: PingType::Ping, timestamp: now, + num_of_peers: socket.connected_peers().count(), }; let data = postcard::to_stdvec(&ping_message).unwrap(); let _ = write.send((peer, data.into())).await; @@ -461,6 +463,7 @@ fn update_ping( let pong_message = NetplayPingMessage { message_type: PingType::Pong, timestamp: message.timestamp, + num_of_peers: message.num_of_peers, }; let data = postcard::to_stdvec(&pong_message).unwrap(); let _ = write_clone.send((peer, data.into())).await; @@ -472,8 +475,8 @@ fn update_ping( .as_millis(); let ping = (now - message.timestamp) / 2; // calculate one-way latency pings.push(ping); - if pings.len() > 12 { - // once we have at least 12 samples, remove the highest 2 and return the next highest + if pings.len() > message.num_of_peers * 4 { + // once we have enough samples, remove the highest 2 and return the next highest pings.sort(); pings.truncate(pings.len() - 2); let ping = *pings.last().unwrap(); From 397a15349c3b2119d583df00f1290203163679d8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 11 Jun 2026 14:53:00 +0200 Subject: [PATCH 1027/1117] handle close messages (#1060) --- src/ui/netplay.rs | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index d9401c3..1b5e6d7 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -156,15 +156,23 @@ fn manage_websocket( tokio::spawn(async move { while let Some(Ok(response)) = read.next().await { - let decoded_response = - postcard::from_bytes::(&response.into_data()); - match decoded_response { - Ok(message) => { - let _ = netplay_read_sender.send(Some(message)); + match response { + Message::Binary(data) => { + let decoded_response = + postcard::from_bytes::(&data); + match decoded_response { + Ok(message) => { + let _ = netplay_read_sender.send(Some(message)); + } + Err(e) => { + eprintln!("Failed to parse message: {}", e); + } + } } - Err(e) => { - eprintln!("Failed to parse message: {}", e); + Message::Close(_) => { + return; } + _ => {} } } }); From 5f8e3b97603fd523073f40f8737d9d5d5e90f00e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 11 Jun 2026 21:16:06 +0200 Subject: [PATCH 1028/1117] run netplay_close on window close (#1061) * run netplay_close on window close * more --- src/lib.rs | 5 ++++- src/ui/gui.rs | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index cdd78d0..144b1b7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -342,7 +342,10 @@ async fn android_main(app: slint::android::AndroidApp) { && let Some(weak_app_window) = weak_app_window.as_ref() { weak_app_window - .upgrade_in_event_loop(move |handle| ui::gui::save_settings(&handle)) + .upgrade_in_event_loop(move |handle| { + ui::gui::save_settings(&handle); + handle.invoke_netplay_close(); + }) .unwrap(); } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 8a81c3a..e4254e3 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -535,11 +535,15 @@ pub fn app_window(app: &AppWindow, is_android: bool) { let weak_app = app.as_weak(); app.window().on_close_requested(move || { weak_app - .upgrade_in_event_loop(move |handle| save_settings(&handle)) + .upgrade_in_event_loop(move |handle| { + save_settings(&handle); + handle.invoke_netplay_close(); + }) .unwrap(); slint::CloseRequestResponse::HideWindow }); } + app.run().unwrap(); retroachievements::shutdown_client(); } From 65cffbba0c6c597ecc8e290ab0452654f713344a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 12 Jun 2026 07:36:56 +0200 Subject: [PATCH 1029/1117] cap recommendation (#1062) --- src/ui/netplay.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 1b5e6d7..a3118f5 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -497,7 +497,7 @@ fn update_ping( 60.0 }; let recommendation = - (ping as f64 / (1000.0 / refresh_rate)) as i32 + 1; + ((ping as f64 / (1000.0 / refresh_rate)) as i32 + 1).min(8); if handle.get_netplay_recommended_delay() == 0 { handle.set_netplay_input_delay(recommendation); From b2d7a1203372d19cb8e8949a4c08a41cc5f35494 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 12 Jun 2026 09:02:53 +0200 Subject: [PATCH 1030/1117] wait for mesh (#1063) * wait for mesh * more * more --- data/translations/de/LC_MESSAGES/gopher64.po | 47 ++++++++++--------- data/translations/es/LC_MESSAGES/gopher64.po | 47 ++++++++++--------- data/translations/fr/LC_MESSAGES/gopher64.po | 47 ++++++++++--------- data/translations/gopher64.pot | 47 ++++++++++--------- data/translations/ja/LC_MESSAGES/gopher64.po | 47 ++++++++++--------- data/translations/nl/LC_MESSAGES/gopher64.po | 47 ++++++++++--------- .../pt_BR/LC_MESSAGES/gopher64.po | 47 ++++++++++--------- data/translations/ru/LC_MESSAGES/gopher64.po | 47 ++++++++++--------- src/ui/gui/appwindow.slint | 2 + src/ui/gui/netplay_wait.slint | 6 ++- src/ui/netplay.rs | 9 +++- 11 files changed, 222 insertions(+), 171 deletions(-) diff --git a/data/translations/de/LC_MESSAGES/gopher64.po b/data/translations/de/LC_MESSAGES/gopher64.po index 4fcff50..3606da5 100644 --- a/data/translations/de/LC_MESSAGES/gopher64.po +++ b/data/translations/de/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-05 12:03+0000\n" +"POT-Creation-Date: 2026-06-12 06:51+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: German\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Spenden (über GitHub)" -#: src/ui/gui/appwindow.slint:147 +#: src/ui/gui/appwindow.slint:148 msgctxt "Menu" msgid "Local Game" msgstr "Lokales Spiel" -#: src/ui/gui/appwindow.slint:151 +#: src/ui/gui/appwindow.slint:152 msgctxt "Menu" msgid "Controller Config" msgstr "Controller-Konfiguration" -#: src/ui/gui/appwindow.slint:155 +#: src/ui/gui/appwindow.slint:156 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:159 +#: src/ui/gui/appwindow.slint:160 msgctxt "Menu" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/appwindow.slint:163 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:167 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "Settings" msgstr "Einstellungen" -#: src/ui/gui/appwindow.slint:171 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "About" msgstr "Über" @@ -345,67 +345,72 @@ msgctxt "Netplay" msgid "Provide Feedback" msgstr "Feedback geben" -#: src/ui/gui/netplay_wait.slint:16 +#: src/ui/gui/netplay_wait.slint:17 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay: Warteraum" -#: src/ui/gui/netplay_wait.slint:28 +#: src/ui/gui/netplay_wait.slint:29 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Sitzungsname:" -#: src/ui/gui/netplay_wait.slint:34 +#: src/ui/gui/netplay_wait.slint:35 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Spielname:" -#: src/ui/gui/netplay_wait.slint:44 +#: src/ui/gui/netplay_wait.slint:45 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Spieler 1:" -#: src/ui/gui/netplay_wait.slint:48 +#: src/ui/gui/netplay_wait.slint:49 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Spieler 2:" -#: src/ui/gui/netplay_wait.slint:54 +#: src/ui/gui/netplay_wait.slint:55 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Spieler 3:" -#: src/ui/gui/netplay_wait.slint:58 +#: src/ui/gui/netplay_wait.slint:59 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Spieler 4:" -#: src/ui/gui/netplay_wait.slint:72 +#: src/ui/gui/netplay_wait.slint:73 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Chatnachricht eingeben" -#: src/ui/gui/netplay_wait.slint:83 +#: src/ui/gui/netplay_wait.slint:84 msgctxt "NetplayWait" msgid "Send Message" msgstr "Nachricht senden" -#: src/ui/gui/netplay_wait.slint:100 +#: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Lokale Eingabeverzögerung:" -#: src/ui/gui/netplay_wait.slint:115 +#: src/ui/gui/netplay_wait.slint:117 msgctxt "NetplayWait" msgid "Recommended: " msgstr "Empfohlen: " -#: src/ui/gui/netplay_wait.slint:123 +#: src/ui/gui/netplay_wait.slint:126 msgctxt "NetplayWait" msgid "Start Game" msgstr "Spiel starten" -#: src/ui/gui/netplay_wait.slint:131 +#: src/ui/gui/netplay_wait.slint:126 +msgctxt "NetplayWait" +msgid "Waiting for P2P mesh " +msgstr "Warten auf P2P-Mesh " + +#: src/ui/gui/netplay_wait.slint:134 msgctxt "NetplayWait" msgid "Cancel" msgstr "Abbrechen" diff --git a/data/translations/es/LC_MESSAGES/gopher64.po b/data/translations/es/LC_MESSAGES/gopher64.po index 88a317a..943dd63 100644 --- a/data/translations/es/LC_MESSAGES/gopher64.po +++ b/data/translations/es/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-05 12:03+0000\n" +"POT-Creation-Date: 2026-06-12 06:51+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: Gemini\n" "Language-Team: Spanish (Spain)\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Donar (a través de GitHub)" -#: src/ui/gui/appwindow.slint:147 +#: src/ui/gui/appwindow.slint:148 msgctxt "Menu" msgid "Local Game" msgstr "Juego local" -#: src/ui/gui/appwindow.slint:151 +#: src/ui/gui/appwindow.slint:152 msgctxt "Menu" msgid "Controller Config" msgstr "Config. del mando" -#: src/ui/gui/appwindow.slint:155 +#: src/ui/gui/appwindow.slint:156 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:159 +#: src/ui/gui/appwindow.slint:160 msgctxt "Menu" msgid "Cheats" msgstr "Trucos" -#: src/ui/gui/appwindow.slint:163 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:167 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "Settings" msgstr "Ajustes" -#: src/ui/gui/appwindow.slint:171 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "About" msgstr "Acerca de" @@ -345,67 +345,72 @@ msgctxt "Netplay" msgid "Provide Feedback" msgstr "Enviar comentarios" -#: src/ui/gui/netplay_wait.slint:16 +#: src/ui/gui/netplay_wait.slint:17 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay: Sala de espera" -#: src/ui/gui/netplay_wait.slint:28 +#: src/ui/gui/netplay_wait.slint:29 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Nombre de la sesión:" -#: src/ui/gui/netplay_wait.slint:34 +#: src/ui/gui/netplay_wait.slint:35 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Nombre del juego:" -#: src/ui/gui/netplay_wait.slint:44 +#: src/ui/gui/netplay_wait.slint:45 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Jugador 1:" -#: src/ui/gui/netplay_wait.slint:48 +#: src/ui/gui/netplay_wait.slint:49 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Jugador 2:" -#: src/ui/gui/netplay_wait.slint:54 +#: src/ui/gui/netplay_wait.slint:55 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Jugador 3:" -#: src/ui/gui/netplay_wait.slint:58 +#: src/ui/gui/netplay_wait.slint:59 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Jugador 4:" -#: src/ui/gui/netplay_wait.slint:72 +#: src/ui/gui/netplay_wait.slint:73 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Escribe un mensaje en el chat" -#: src/ui/gui/netplay_wait.slint:83 +#: src/ui/gui/netplay_wait.slint:84 msgctxt "NetplayWait" msgid "Send Message" msgstr "Enviar mensaje" -#: src/ui/gui/netplay_wait.slint:100 +#: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Retardo de entrada local:" -#: src/ui/gui/netplay_wait.slint:115 +#: src/ui/gui/netplay_wait.slint:117 msgctxt "NetplayWait" msgid "Recommended: " msgstr "Recomendado: " -#: src/ui/gui/netplay_wait.slint:123 +#: src/ui/gui/netplay_wait.slint:126 msgctxt "NetplayWait" msgid "Start Game" msgstr "Iniciar juego" -#: src/ui/gui/netplay_wait.slint:131 +#: src/ui/gui/netplay_wait.slint:126 +msgctxt "NetplayWait" +msgid "Waiting for P2P mesh " +msgstr "Esperando malla P2P " + +#: src/ui/gui/netplay_wait.slint:134 msgctxt "NetplayWait" msgid "Cancel" msgstr "Cancelar" diff --git a/data/translations/fr/LC_MESSAGES/gopher64.po b/data/translations/fr/LC_MESSAGES/gopher64.po index 5f3d8d8..d53b84a 100644 --- a/data/translations/fr/LC_MESSAGES/gopher64.po +++ b/data/translations/fr/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-05 12:03+0000\n" +"POT-Creation-Date: 2026-06-12 06:51+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: French (France)\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Faire un don (via GitHub)" -#: src/ui/gui/appwindow.slint:147 +#: src/ui/gui/appwindow.slint:148 msgctxt "Menu" msgid "Local Game" msgstr "Jeu local" -#: src/ui/gui/appwindow.slint:151 +#: src/ui/gui/appwindow.slint:152 msgctxt "Menu" msgid "Controller Config" msgstr "Configuration manette" -#: src/ui/gui/appwindow.slint:155 +#: src/ui/gui/appwindow.slint:156 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:159 +#: src/ui/gui/appwindow.slint:160 msgctxt "Menu" msgid "Cheats" msgstr "Triche" -#: src/ui/gui/appwindow.slint:163 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:167 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "Settings" msgstr "Paramètres" -#: src/ui/gui/appwindow.slint:171 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "About" msgstr "À propos" @@ -346,67 +346,72 @@ msgctxt "Netplay" msgid "Provide Feedback" msgstr "Donner votre avis" -#: src/ui/gui/netplay_wait.slint:16 +#: src/ui/gui/netplay_wait.slint:17 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay : salle d'attente" -#: src/ui/gui/netplay_wait.slint:28 +#: src/ui/gui/netplay_wait.slint:29 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Nom de la session :" -#: src/ui/gui/netplay_wait.slint:34 +#: src/ui/gui/netplay_wait.slint:35 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Nom du jeu :" -#: src/ui/gui/netplay_wait.slint:44 +#: src/ui/gui/netplay_wait.slint:45 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Joueur 1 :" -#: src/ui/gui/netplay_wait.slint:48 +#: src/ui/gui/netplay_wait.slint:49 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Joueur 2 :" -#: src/ui/gui/netplay_wait.slint:54 +#: src/ui/gui/netplay_wait.slint:55 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Joueur 3 :" -#: src/ui/gui/netplay_wait.slint:58 +#: src/ui/gui/netplay_wait.slint:59 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Joueur 4 :" -#: src/ui/gui/netplay_wait.slint:72 +#: src/ui/gui/netplay_wait.slint:73 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Saisir un message" -#: src/ui/gui/netplay_wait.slint:83 +#: src/ui/gui/netplay_wait.slint:84 msgctxt "NetplayWait" msgid "Send Message" msgstr "Envoyer" -#: src/ui/gui/netplay_wait.slint:100 +#: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Délai d'entrée local :" -#: src/ui/gui/netplay_wait.slint:115 +#: src/ui/gui/netplay_wait.slint:117 msgctxt "NetplayWait" msgid "Recommended: " msgstr "Recommandé : " -#: src/ui/gui/netplay_wait.slint:123 +#: src/ui/gui/netplay_wait.slint:126 msgctxt "NetplayWait" msgid "Start Game" msgstr "Lancer la partie" -#: src/ui/gui/netplay_wait.slint:131 +#: src/ui/gui/netplay_wait.slint:126 +msgctxt "NetplayWait" +msgid "Waiting for P2P mesh " +msgstr "En attente du maillage P2P " + +#: src/ui/gui/netplay_wait.slint:134 msgctxt "NetplayWait" msgid "Cancel" msgstr "Annuler" diff --git a/data/translations/gopher64.pot b/data/translations/gopher64.pot index aed46a1..59e39f8 100644 --- a/data/translations/gopher64.pot +++ b/data/translations/gopher64.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-06-05 12:03+0000\n" +"POT-Creation-Date: 2026-06-12 06:51+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "" -#: src/ui/gui/appwindow.slint:147 +#: src/ui/gui/appwindow.slint:148 msgctxt "Menu" msgid "Local Game" msgstr "" -#: src/ui/gui/appwindow.slint:151 +#: src/ui/gui/appwindow.slint:152 msgctxt "Menu" msgid "Controller Config" msgstr "" -#: src/ui/gui/appwindow.slint:155 +#: src/ui/gui/appwindow.slint:156 msgctxt "Menu" msgid "Netplay" msgstr "" -#: src/ui/gui/appwindow.slint:159 +#: src/ui/gui/appwindow.slint:160 msgctxt "Menu" msgid "Cheats" msgstr "" -#: src/ui/gui/appwindow.slint:163 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "RetroAchievements" msgstr "" -#: src/ui/gui/appwindow.slint:167 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "Settings" msgstr "" -#: src/ui/gui/appwindow.slint:171 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "About" msgstr "" @@ -343,67 +343,72 @@ msgctxt "Netplay" msgid "Provide Feedback" msgstr "" -#: src/ui/gui/netplay_wait.slint:16 +#: src/ui/gui/netplay_wait.slint:17 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "" -#: src/ui/gui/netplay_wait.slint:28 +#: src/ui/gui/netplay_wait.slint:29 msgctxt "NetplayWait" msgid "Session Name:" msgstr "" -#: src/ui/gui/netplay_wait.slint:34 +#: src/ui/gui/netplay_wait.slint:35 msgctxt "NetplayWait" msgid "Game Name:" msgstr "" -#: src/ui/gui/netplay_wait.slint:44 +#: src/ui/gui/netplay_wait.slint:45 msgctxt "NetplayWait" msgid "Player 1:" msgstr "" -#: src/ui/gui/netplay_wait.slint:48 +#: src/ui/gui/netplay_wait.slint:49 msgctxt "NetplayWait" msgid "Player 2:" msgstr "" -#: src/ui/gui/netplay_wait.slint:54 +#: src/ui/gui/netplay_wait.slint:55 msgctxt "NetplayWait" msgid "Player 3:" msgstr "" -#: src/ui/gui/netplay_wait.slint:58 +#: src/ui/gui/netplay_wait.slint:59 msgctxt "NetplayWait" msgid "Player 4:" msgstr "" -#: src/ui/gui/netplay_wait.slint:72 +#: src/ui/gui/netplay_wait.slint:73 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "" -#: src/ui/gui/netplay_wait.slint:83 +#: src/ui/gui/netplay_wait.slint:84 msgctxt "NetplayWait" msgid "Send Message" msgstr "" -#: src/ui/gui/netplay_wait.slint:100 +#: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "" -#: src/ui/gui/netplay_wait.slint:115 +#: src/ui/gui/netplay_wait.slint:117 msgctxt "NetplayWait" msgid "Recommended: " msgstr "" -#: src/ui/gui/netplay_wait.slint:123 +#: src/ui/gui/netplay_wait.slint:126 msgctxt "NetplayWait" msgid "Start Game" msgstr "" -#: src/ui/gui/netplay_wait.slint:131 +#: src/ui/gui/netplay_wait.slint:126 +msgctxt "NetplayWait" +msgid "Waiting for P2P mesh " +msgstr "" + +#: src/ui/gui/netplay_wait.slint:134 msgctxt "NetplayWait" msgid "Cancel" msgstr "" diff --git a/data/translations/ja/LC_MESSAGES/gopher64.po b/data/translations/ja/LC_MESSAGES/gopher64.po index 9a9fb29..fe8d677 100644 --- a/data/translations/ja/LC_MESSAGES/gopher64.po +++ b/data/translations/ja/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-05 12:03+0000\n" +"POT-Creation-Date: 2026-06-12 06:51+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Japanese\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "GitHubで寄付" -#: src/ui/gui/appwindow.slint:147 +#: src/ui/gui/appwindow.slint:148 msgctxt "Menu" msgid "Local Game" msgstr "ローカルゲーム" -#: src/ui/gui/appwindow.slint:151 +#: src/ui/gui/appwindow.slint:152 msgctxt "Menu" msgid "Controller Config" msgstr "コントローラー設定" -#: src/ui/gui/appwindow.slint:155 +#: src/ui/gui/appwindow.slint:156 msgctxt "Menu" msgid "Netplay" msgstr "ネットプレイ" -#: src/ui/gui/appwindow.slint:159 +#: src/ui/gui/appwindow.slint:160 msgctxt "Menu" msgid "Cheats" msgstr "チート" -#: src/ui/gui/appwindow.slint:163 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:167 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "Settings" msgstr "設定" -#: src/ui/gui/appwindow.slint:171 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "About" msgstr "バージョン情報" @@ -343,67 +343,72 @@ msgctxt "Netplay" msgid "Provide Feedback" msgstr "フィードバックを送る" -#: src/ui/gui/netplay_wait.slint:16 +#: src/ui/gui/netplay_wait.slint:17 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "ネットプレイ:待機室" -#: src/ui/gui/netplay_wait.slint:28 +#: src/ui/gui/netplay_wait.slint:29 msgctxt "NetplayWait" msgid "Session Name:" msgstr "セッション名:" -#: src/ui/gui/netplay_wait.slint:34 +#: src/ui/gui/netplay_wait.slint:35 msgctxt "NetplayWait" msgid "Game Name:" msgstr "ゲーム名:" -#: src/ui/gui/netplay_wait.slint:44 +#: src/ui/gui/netplay_wait.slint:45 msgctxt "NetplayWait" msgid "Player 1:" msgstr "プレイヤー1:" -#: src/ui/gui/netplay_wait.slint:48 +#: src/ui/gui/netplay_wait.slint:49 msgctxt "NetplayWait" msgid "Player 2:" msgstr "プレイヤー2:" -#: src/ui/gui/netplay_wait.slint:54 +#: src/ui/gui/netplay_wait.slint:55 msgctxt "NetplayWait" msgid "Player 3:" msgstr "プレイヤー3:" -#: src/ui/gui/netplay_wait.slint:58 +#: src/ui/gui/netplay_wait.slint:59 msgctxt "NetplayWait" msgid "Player 4:" msgstr "プレイヤー4:" -#: src/ui/gui/netplay_wait.slint:72 +#: src/ui/gui/netplay_wait.slint:73 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "チャットメッセージを入力" -#: src/ui/gui/netplay_wait.slint:83 +#: src/ui/gui/netplay_wait.slint:84 msgctxt "NetplayWait" msgid "Send Message" msgstr "送信" -#: src/ui/gui/netplay_wait.slint:100 +#: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "ローカル入力遅延:" -#: src/ui/gui/netplay_wait.slint:115 +#: src/ui/gui/netplay_wait.slint:117 msgctxt "NetplayWait" msgid "Recommended: " msgstr "推奨: " -#: src/ui/gui/netplay_wait.slint:123 +#: src/ui/gui/netplay_wait.slint:126 msgctxt "NetplayWait" msgid "Start Game" msgstr "ゲーム開始" -#: src/ui/gui/netplay_wait.slint:131 +#: src/ui/gui/netplay_wait.slint:126 +msgctxt "NetplayWait" +msgid "Waiting for P2P mesh " +msgstr "P2Pメッシュ接続待機中 " + +#: src/ui/gui/netplay_wait.slint:134 msgctxt "NetplayWait" msgid "Cancel" msgstr "キャンセル" diff --git a/data/translations/nl/LC_MESSAGES/gopher64.po b/data/translations/nl/LC_MESSAGES/gopher64.po index c415cb2..6d38a76 100644 --- a/data/translations/nl/LC_MESSAGES/gopher64.po +++ b/data/translations/nl/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-05 12:03+0000\n" +"POT-Creation-Date: 2026-06-12 06:51+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Dutch (Netherlands)\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Doneren (via GitHub)" -#: src/ui/gui/appwindow.slint:147 +#: src/ui/gui/appwindow.slint:148 msgctxt "Menu" msgid "Local Game" msgstr "Lokaal spel" -#: src/ui/gui/appwindow.slint:151 +#: src/ui/gui/appwindow.slint:152 msgctxt "Menu" msgid "Controller Config" msgstr "Controllerconfiguratie" -#: src/ui/gui/appwindow.slint:155 +#: src/ui/gui/appwindow.slint:156 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:159 +#: src/ui/gui/appwindow.slint:160 msgctxt "Menu" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/appwindow.slint:163 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:167 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "Settings" msgstr "Instellingen" -#: src/ui/gui/appwindow.slint:171 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "About" msgstr "Over" @@ -345,67 +345,72 @@ msgctxt "Netplay" msgid "Provide Feedback" msgstr "Feedback geven" -#: src/ui/gui/netplay_wait.slint:16 +#: src/ui/gui/netplay_wait.slint:17 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay: wachtruimte" -#: src/ui/gui/netplay_wait.slint:28 +#: src/ui/gui/netplay_wait.slint:29 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Sessienaam:" -#: src/ui/gui/netplay_wait.slint:34 +#: src/ui/gui/netplay_wait.slint:35 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Spelnaam:" -#: src/ui/gui/netplay_wait.slint:44 +#: src/ui/gui/netplay_wait.slint:45 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Speler 1:" -#: src/ui/gui/netplay_wait.slint:48 +#: src/ui/gui/netplay_wait.slint:49 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Speler 2:" -#: src/ui/gui/netplay_wait.slint:54 +#: src/ui/gui/netplay_wait.slint:55 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Speler 3:" -#: src/ui/gui/netplay_wait.slint:58 +#: src/ui/gui/netplay_wait.slint:59 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Speler 4:" -#: src/ui/gui/netplay_wait.slint:72 +#: src/ui/gui/netplay_wait.slint:73 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Chatbericht invoeren" -#: src/ui/gui/netplay_wait.slint:83 +#: src/ui/gui/netplay_wait.slint:84 msgctxt "NetplayWait" msgid "Send Message" msgstr "Bericht verzenden" -#: src/ui/gui/netplay_wait.slint:100 +#: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Lokale invoervertraging:" -#: src/ui/gui/netplay_wait.slint:115 +#: src/ui/gui/netplay_wait.slint:117 msgctxt "NetplayWait" msgid "Recommended: " msgstr "Aanbevolen: " -#: src/ui/gui/netplay_wait.slint:123 +#: src/ui/gui/netplay_wait.slint:126 msgctxt "NetplayWait" msgid "Start Game" msgstr "Spel starten" -#: src/ui/gui/netplay_wait.slint:131 +#: src/ui/gui/netplay_wait.slint:126 +msgctxt "NetplayWait" +msgid "Waiting for P2P mesh " +msgstr "Wachten op P2P-mesh " + +#: src/ui/gui/netplay_wait.slint:134 msgctxt "NetplayWait" msgid "Cancel" msgstr "Annuleren" diff --git a/data/translations/pt_BR/LC_MESSAGES/gopher64.po b/data/translations/pt_BR/LC_MESSAGES/gopher64.po index 688cb9c..a749394 100644 --- a/data/translations/pt_BR/LC_MESSAGES/gopher64.po +++ b/data/translations/pt_BR/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-06-05 12:03+0000\n" +"POT-Creation-Date: 2026-06-12 06:51+0000\n" "PO-Revision-Date: 2026-05-11 18:11-3000\n" "Last-Translator: EDUARDO CARVALHO \n" "Language-Team: LANGUAGE \n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Doações (via GitHub)" -#: src/ui/gui/appwindow.slint:147 +#: src/ui/gui/appwindow.slint:148 msgctxt "Menu" msgid "Local Game" msgstr "Jogo Local" -#: src/ui/gui/appwindow.slint:151 +#: src/ui/gui/appwindow.slint:152 msgctxt "Menu" msgid "Controller Config" msgstr "Configurar Controle" -#: src/ui/gui/appwindow.slint:155 +#: src/ui/gui/appwindow.slint:156 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:159 +#: src/ui/gui/appwindow.slint:160 msgctxt "Menu" msgid "Cheats" msgstr "Trapaças" -#: src/ui/gui/appwindow.slint:163 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:167 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "Settings" msgstr "Configurações" -#: src/ui/gui/appwindow.slint:171 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "About" msgstr "Sobre" @@ -346,67 +346,72 @@ msgctxt "Netplay" msgid "Provide Feedback" msgstr "Fornecer Feedback" -#: src/ui/gui/netplay_wait.slint:16 +#: src/ui/gui/netplay_wait.slint:17 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay: Aguardando Sala" -#: src/ui/gui/netplay_wait.slint:28 +#: src/ui/gui/netplay_wait.slint:29 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Nome da Sessão:" -#: src/ui/gui/netplay_wait.slint:34 +#: src/ui/gui/netplay_wait.slint:35 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Nome do Jogo:" -#: src/ui/gui/netplay_wait.slint:44 +#: src/ui/gui/netplay_wait.slint:45 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Jogador 1" -#: src/ui/gui/netplay_wait.slint:48 +#: src/ui/gui/netplay_wait.slint:49 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Jogador 2:" -#: src/ui/gui/netplay_wait.slint:54 +#: src/ui/gui/netplay_wait.slint:55 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Jogador 3:" -#: src/ui/gui/netplay_wait.slint:58 +#: src/ui/gui/netplay_wait.slint:59 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Jogador 4:" -#: src/ui/gui/netplay_wait.slint:72 +#: src/ui/gui/netplay_wait.slint:73 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Escrever mensagem no chat" -#: src/ui/gui/netplay_wait.slint:83 +#: src/ui/gui/netplay_wait.slint:84 msgctxt "NetplayWait" msgid "Send Message" msgstr "Enviar Mensagem" -#: src/ui/gui/netplay_wait.slint:100 +#: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Atraso de entrada local:" -#: src/ui/gui/netplay_wait.slint:115 +#: src/ui/gui/netplay_wait.slint:117 msgctxt "NetplayWait" msgid "Recommended: " msgstr "Recomendado: " -#: src/ui/gui/netplay_wait.slint:123 +#: src/ui/gui/netplay_wait.slint:126 msgctxt "NetplayWait" msgid "Start Game" msgstr "Iniciar jogo" -#: src/ui/gui/netplay_wait.slint:131 +#: src/ui/gui/netplay_wait.slint:126 +msgctxt "NetplayWait" +msgid "Waiting for P2P mesh " +msgstr "Aguardando malha P2P " + +#: src/ui/gui/netplay_wait.slint:134 msgctxt "NetplayWait" msgid "Cancel" msgstr "Cancelar" diff --git a/data/translations/ru/LC_MESSAGES/gopher64.po b/data/translations/ru/LC_MESSAGES/gopher64.po index 78f8ccf..b1a83dc 100644 --- a/data/translations/ru/LC_MESSAGES/gopher64.po +++ b/data/translations/ru/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-05 12:03+0000\n" +"POT-Creation-Date: 2026-06-12 06:51+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Russian\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Пожертвовать (через GitHub)" -#: src/ui/gui/appwindow.slint:147 +#: src/ui/gui/appwindow.slint:148 msgctxt "Menu" msgid "Local Game" msgstr "Локальная игра" -#: src/ui/gui/appwindow.slint:151 +#: src/ui/gui/appwindow.slint:152 msgctxt "Menu" msgid "Controller Config" msgstr "Настройка контроллера" -#: src/ui/gui/appwindow.slint:155 +#: src/ui/gui/appwindow.slint:156 msgctxt "Menu" msgid "Netplay" msgstr "Сетевая игра" -#: src/ui/gui/appwindow.slint:159 +#: src/ui/gui/appwindow.slint:160 msgctxt "Menu" msgid "Cheats" msgstr "Читы" -#: src/ui/gui/appwindow.slint:163 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:167 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "Settings" msgstr "Настройки" -#: src/ui/gui/appwindow.slint:171 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "About" msgstr "О программе" @@ -344,67 +344,72 @@ msgctxt "Netplay" msgid "Provide Feedback" msgstr "Оставить отзыв" -#: src/ui/gui/netplay_wait.slint:16 +#: src/ui/gui/netplay_wait.slint:17 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Сетевая игра: Комната ожидания" -#: src/ui/gui/netplay_wait.slint:28 +#: src/ui/gui/netplay_wait.slint:29 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Имя сессии:" -#: src/ui/gui/netplay_wait.slint:34 +#: src/ui/gui/netplay_wait.slint:35 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Название игры:" -#: src/ui/gui/netplay_wait.slint:44 +#: src/ui/gui/netplay_wait.slint:45 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Игрок 1:" -#: src/ui/gui/netplay_wait.slint:48 +#: src/ui/gui/netplay_wait.slint:49 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Игрок 2:" -#: src/ui/gui/netplay_wait.slint:54 +#: src/ui/gui/netplay_wait.slint:55 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Игрок 3:" -#: src/ui/gui/netplay_wait.slint:58 +#: src/ui/gui/netplay_wait.slint:59 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Игрок 4:" -#: src/ui/gui/netplay_wait.slint:72 +#: src/ui/gui/netplay_wait.slint:73 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Введите сообщение чата" -#: src/ui/gui/netplay_wait.slint:83 +#: src/ui/gui/netplay_wait.slint:84 msgctxt "NetplayWait" msgid "Send Message" msgstr "Отправить сообщение" -#: src/ui/gui/netplay_wait.slint:100 +#: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Локальная задержка ввода:" -#: src/ui/gui/netplay_wait.slint:115 +#: src/ui/gui/netplay_wait.slint:117 msgctxt "NetplayWait" msgid "Recommended: " msgstr "Рекомендуется: " -#: src/ui/gui/netplay_wait.slint:123 +#: src/ui/gui/netplay_wait.slint:126 msgctxt "NetplayWait" msgid "Start Game" msgstr "Начать игру" -#: src/ui/gui/netplay_wait.slint:131 +#: src/ui/gui/netplay_wait.slint:126 +msgctxt "NetplayWait" +msgid "Waiting for P2P mesh " +msgstr "Ожидание P2P-сети " + +#: src/ui/gui/netplay_wait.slint:134 msgctxt "NetplayWait" msgid "Cancel" msgstr "Отмена" diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index c3eeed4..3785be9 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -119,6 +119,7 @@ export component AppWindow inherits Window { in-out property netplay_input_delay <=> NetplayWaitData.input_delay; in-out property netplay_recommended_delay <=> NetplayWaitData.recommended_delay; in-out property netplay_game_pal <=> NetplayWaitData.game_pal; + in-out property netplay_connected_peers_count <=> NetplayWaitData.connected_peers_count; private property popup_message; private property popup_has_close; @@ -381,6 +382,7 @@ export component AppWindow inherits Window { NetplayWaitData.input_delay = 0; NetplayWaitData.recommended_delay = 0; NetplayWaitData.players = []; + NetplayWaitData.connected_peers_count = 0; NetplayData.pending_session = false; NetplayData.pending_refresh = false; } diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint index f4ffc49..5887bcd 100644 --- a/src/ui/gui/netplay_wait.slint +++ b/src/ui/gui/netplay_wait.slint @@ -10,6 +10,7 @@ export global NetplayWaitData { in-out property input_delay; in-out property recommended_delay; in-out property game_pal; + in-out property connected_peers_count; } export component NetplayWait inherits Page { @@ -121,8 +122,9 @@ export component NetplayWait inherits Page { HorizontalBox { alignment: center; Button { - text: @tr("Start Game"); - enabled: NetplayWaitData.players[0] == NetplayData.player_name && NetplayWaitData.can_start && NetplayWaitData.recommended_delay != 0; + property mesh_complete: NetplayWaitData.players.length == (NetplayWaitData.connected_peers_count + 1); + text: mesh_complete ? @tr("Start Game") : @tr("Waiting for P2P mesh ") + (NetplayWaitData.connected_peers_count + 1) + "/" + NetplayWaitData.players.length; + enabled: NetplayWaitData.players[0] == NetplayData.player_name && NetplayWaitData.can_start && NetplayWaitData.recommended_delay != 0 && mesh_complete; clicked => { NetplayWaitData.can_start = false; begin_game(NetplayWaitData.input_delay); diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index a3118f5..f793df0 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -412,9 +412,16 @@ fn update_ping( let (mut write, mut read) = channel.split(); let mut write_clone = write.clone(); let mut close_ping_rx_clone = close_ping_rx.resubscribe(); + let weak_app_clone = weak_app.clone(); tokio::spawn(async move { loop { socket.update_peers(); + let peers_count = socket.connected_peers().count(); + weak_app_clone + .upgrade_in_event_loop(move |handle| { + handle.set_netplay_connected_peers_count(peers_count as i32); + }) + .unwrap(); for peer in socket.connected_peers() { let now = std::time::SystemTime::now() .duration_since(std::time::UNIX_EPOCH) @@ -423,7 +430,7 @@ fn update_ping( let ping_message = NetplayPingMessage { message_type: PingType::Ping, timestamp: now, - num_of_peers: socket.connected_peers().count(), + num_of_peers: peers_count, }; let data = postcard::to_stdvec(&ping_message).unwrap(); let _ = write.send((peer, data.into())).await; From 4cc85d595f06049cccd971f9c7196cf67195f584 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 12 Jun 2026 15:34:21 +0200 Subject: [PATCH 1031/1117] pass channel to ggrs (#1064) * pass channel to ggrs * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more --- src/lib.rs | 3 +- src/netplay.rs | 72 +++++++++++++++++++++++++++++----------- src/retroachievements.rs | 3 +- 3 files changed, 54 insertions(+), 24 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 144b1b7..584e013 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -228,10 +228,9 @@ pub fn run(args: Args, arg_count: usize) -> std::io::Result<()> { tx.send(false).unwrap(); } - let join_handle = std::thread::spawn(move || { + tokio::task::block_in_place(move || { rx.blocking_recv().unwrap(); }); - join_handle.join().unwrap(); ra_config } else { diff --git a/src/netplay.rs b/src/netplay.rs index 4bd2918..ecb5cdc 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -11,21 +11,24 @@ impl ggrs::Config for GgrsConfig { type Address = matchbox_socket::PeerId; } -pub struct MatchboxSocket(matchbox_socket::WebRtcSocket); +static DISCONNECTED_PEERS: std::sync::LazyLock< + std::sync::Mutex>, +> = std::sync::LazyLock::new(|| std::sync::Mutex::new(rustc_hash::FxHashSet::default())); -impl ggrs::NonBlockingSocket for MatchboxSocket { +pub struct MatchboxChannel(matchbox_socket::WebRtcChannel); + +impl ggrs::NonBlockingSocket for MatchboxChannel { fn send_to(&mut self, msg: &ggrs::Message, addr: &matchbox_socket::PeerId) { let encoded = postcard::to_stdvec(msg).expect("serialization failed"); - let channel = self.0.get_channel_mut(0).unwrap(); - if channel.config().max_retransmits != Some(0) || channel.config().ordered { - eprintln!("Sending GGRS traffic over reliable channel"); + if let Err(_) = self.0.try_send(encoded.into(), *addr) + && let Ok(mut disconnected_peers) = DISCONNECTED_PEERS.lock() + { + disconnected_peers.insert(*addr); } - channel.send(encoded.into(), *addr); } fn receive_all_messages(&mut self) -> Vec<(matchbox_socket::PeerId, ggrs::Message)> { - let channel = self.0.get_channel_mut(0).unwrap(); - channel + self.0 .receive() .iter() .filter_map(|(peer, packet)| { @@ -61,7 +64,12 @@ fn send_message(netplay: &mut Netplay, message: NetplayMessage) { let chunks = data.chunks(16384).collect::>(); for peer in netplay.peers.iter() { for chunk in chunks.iter() { - netplay.reliable_channel.send(chunk.to_vec().into(), *peer); + if let Err(e) = netplay + .reliable_channel + .try_send(chunk.to_vec().into(), *peer) + { + eprintln!("Failed to send message: {}", e); + } } } } @@ -86,6 +94,7 @@ fn process_reliable_messages(netplay: &mut Netplay) { .messages .insert(decoded_message.name, decoded_message.data); netplay.incoming_message.clear(); + check_input_delay(netplay); } } } @@ -119,7 +128,9 @@ fn send_player_number( }; let data = postcard::to_stdvec(&message).unwrap(); for peer in peers { - channel.send(data.clone().into(), peer); + if let Err(e) = channel.try_send(data.clone().into(), peer) { + eprintln!("Failed to send message: {}", e); + } } } @@ -226,6 +237,23 @@ pub fn in_rollback(netplay: Option<&Netplay>) -> bool { } } +fn process_disconnected_peers(netplay: &mut Netplay) { + if let Ok(mut disconnected_peers) = DISCONNECTED_PEERS.lock() { + for addr in disconnected_peers.drain() { + for handle in netplay.session.handles_by_address(addr) { + if let Err(e) = netplay.session.disconnect_player(handle) { + eprintln!("Error disconnecting player: {}", e); + } else { + ui::video::onscreen_message( + &format!("Player {} disconnected", handle + 1), + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, + ); + } + } + } + } +} + pub fn process_requests( device: &mut device::Device, ) -> Vec<(ui::input::InputData, ggrs::InputStatus)> { @@ -260,6 +288,7 @@ pub fn process_requests( fn process_netplay(device: &mut device::Device) { let netplay = device.netplay.as_mut().unwrap(); + process_disconnected_peers(netplay); netplay.session.poll_remote_clients(); for event in netplay.session.events() { @@ -267,9 +296,8 @@ fn process_netplay(device: &mut device::Device) { ggrs::GgrsEvent::Synchronizing { .. } => {} ggrs::GgrsEvent::Synchronized { .. } => {} ggrs::GgrsEvent::Disconnected { .. } => { - eprintln!("peer disconnected"); ui::video::onscreen_message( - "Peer disconnected", + "Lost connection to peer", ui::video::MESSAGE_LENGTH_MESSAGE_LONG, ); } @@ -293,7 +321,6 @@ fn process_netplay(device: &mut device::Device) { } process_reliable_messages(netplay); - check_input_delay(netplay); advance_frame(device); } @@ -323,7 +350,7 @@ pub fn init( input_delay: usize, pal: bool, ) -> Option { - let (socket, loop_fut) = matchbox_socket::WebRtcSocketBuilder::new(server_addr) + let (mut socket, loop_fut) = matchbox_socket::WebRtcSocketBuilder::new(server_addr) .add_unreliable_channel() .add_reliable_channel() .build(); @@ -332,16 +359,16 @@ pub fn init( eprintln!("WebRTC loop failed: {}", e); } }); - let mut matchbox_socket = MatchboxSocket(socket); - let mut reliable_channel = matchbox_socket.0.take_channel(1).unwrap(); + + let matchbox_channel = MatchboxChannel(socket.take_channel(0).unwrap()); + let mut reliable_channel = socket.take_channel(1).unwrap(); let now = std::time::Instant::now(); let timeout = std::time::Duration::from_secs(10); let mut player_numbers = std::collections::BTreeMap::new(); player_numbers.insert(player_number, None); loop { - matchbox_socket.0.update_peers(); - let peers = matchbox_socket - .0 + socket.update_peers(); + let peers = socket .connected_peers() .collect::>(); @@ -386,7 +413,12 @@ pub fn init( } } - let mut session = session_builder.start_p2p_session(matchbox_socket).unwrap(); + if matchbox_channel.0.config().max_retransmits != Some(0) || matchbox_channel.0.config().ordered + { + eprintln!("Sending GGRS traffic over reliable channel"); + } + + let mut session = session_builder.start_p2p_session(matchbox_channel).unwrap(); let now = std::time::Instant::now(); while session.current_state() != ggrs::SessionState::Running { diff --git a/src/retroachievements.rs b/src/retroachievements.rs index 0f22541..ee81cbf 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -150,10 +150,9 @@ pub fn load_game( let tx_ptr = Box::into_raw(Box::new(tx)) as *mut std::ffi::c_void; ra_load_game(rom.as_ptr(), rom_size, tx_ptr); }; - let join_handle = std::thread::spawn(move || { + tokio::task::block_in_place(move || { rx.blocking_recv().unwrap(); }); - join_handle.join().unwrap(); let mut c_title = std::ptr::null(); let mut c_image_url = std::ptr::null(); From be74e3358ab9b682f8ecc3fe01220becf6060159 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 12 Jun 2026 16:16:06 +0200 Subject: [PATCH 1032/1117] Use mpsc instead of mutex (#1065) * use mpsc * more * more * more --- src/netplay.rs | 48 +++++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index ecb5cdc..1557276 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -11,24 +11,21 @@ impl ggrs::Config for GgrsConfig { type Address = matchbox_socket::PeerId; } -static DISCONNECTED_PEERS: std::sync::LazyLock< - std::sync::Mutex>, -> = std::sync::LazyLock::new(|| std::sync::Mutex::new(rustc_hash::FxHashSet::default())); - -pub struct MatchboxChannel(matchbox_socket::WebRtcChannel); +pub struct MatchboxChannel { + channel: matchbox_socket::WebRtcChannel, + disconnected_peers: tokio::sync::mpsc::Sender, +} impl ggrs::NonBlockingSocket for MatchboxChannel { fn send_to(&mut self, msg: &ggrs::Message, addr: &matchbox_socket::PeerId) { let encoded = postcard::to_stdvec(msg).expect("serialization failed"); - if let Err(_) = self.0.try_send(encoded.into(), *addr) - && let Ok(mut disconnected_peers) = DISCONNECTED_PEERS.lock() - { - disconnected_peers.insert(*addr); + if self.channel.try_send(encoded.into(), *addr).is_err() { + self.disconnected_peers.try_send(*addr).unwrap(); } } fn receive_all_messages(&mut self) -> Vec<(matchbox_socket::PeerId, ggrs::Message)> { - self.0 + self.channel .receive() .iter() .filter_map(|(peer, packet)| { @@ -51,6 +48,7 @@ pub struct Netplay { pub inputs: Vec<(ui::input::InputData, ggrs::InputStatus)>, pub requests: std::collections::VecDeque>, pub incoming_message: Vec, + pub disconnected_peers: tokio::sync::mpsc::Receiver, } #[derive(serde::Serialize, serde::Deserialize)] @@ -238,17 +236,15 @@ pub fn in_rollback(netplay: Option<&Netplay>) -> bool { } fn process_disconnected_peers(netplay: &mut Netplay) { - if let Ok(mut disconnected_peers) = DISCONNECTED_PEERS.lock() { - for addr in disconnected_peers.drain() { - for handle in netplay.session.handles_by_address(addr) { - if let Err(e) = netplay.session.disconnect_player(handle) { - eprintln!("Error disconnecting player: {}", e); - } else { - ui::video::onscreen_message( - &format!("Player {} disconnected", handle + 1), - ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, - ); - } + while let Ok(addr) = netplay.disconnected_peers.try_recv() { + for handle in netplay.session.handles_by_address(addr) { + if let Err(e) = netplay.session.disconnect_player(handle) { + eprintln!("Error disconnecting player: {}", e); + } else { + ui::video::onscreen_message( + &format!("Player {} disconnected", handle + 1), + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, + ); } } } @@ -360,7 +356,11 @@ pub fn init( } }); - let matchbox_channel = MatchboxChannel(socket.take_channel(0).unwrap()); + let (disconnected_peers_tx, disconnected_peers_rx) = tokio::sync::mpsc::channel(100); + let matchbox_channel = MatchboxChannel { + channel: socket.take_channel(0).unwrap(), + disconnected_peers: disconnected_peers_tx, + }; let mut reliable_channel = socket.take_channel(1).unwrap(); let now = std::time::Instant::now(); let timeout = std::time::Duration::from_secs(10); @@ -413,7 +413,8 @@ pub fn init( } } - if matchbox_channel.0.config().max_retransmits != Some(0) || matchbox_channel.0.config().ordered + if matchbox_channel.channel.config().max_retransmits != Some(0) + || matchbox_channel.channel.config().ordered { eprintln!("Sending GGRS traffic over reliable channel"); } @@ -431,6 +432,7 @@ pub fn init( } Some(Netplay { + disconnected_peers: disconnected_peers_rx, incoming_message: vec![], input_delay, session, From dfa673e6e995e2e8d45752e34b8e56b1869fb26c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 13 Jun 2026 10:00:29 +0200 Subject: [PATCH 1033/1117] add note about input delay (#1066) * add note about input delay * more --- data/translations/de/LC_MESSAGES/gopher64.po | 13 ++++++++++++- data/translations/es/LC_MESSAGES/gopher64.po | 14 +++++++++++++- data/translations/fr/LC_MESSAGES/gopher64.po | 13 ++++++++++++- data/translations/gopher64.pot | 9 ++++++++- data/translations/ja/LC_MESSAGES/gopher64.po | 12 +++++++++++- data/translations/nl/LC_MESSAGES/gopher64.po | 13 ++++++++++++- data/translations/pt_BR/LC_MESSAGES/gopher64.po | 13 ++++++++++++- data/translations/ru/LC_MESSAGES/gopher64.po | 13 ++++++++++++- src/ui/gui/netplay_wait.slint | 2 +- 9 files changed, 93 insertions(+), 9 deletions(-) diff --git a/data/translations/de/LC_MESSAGES/gopher64.po b/data/translations/de/LC_MESSAGES/gopher64.po index 3606da5..2c44eca 100644 --- a/data/translations/de/LC_MESSAGES/gopher64.po +++ b/data/translations/de/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-12 06:51+0000\n" +"POT-Creation-Date: 2026-06-13 07:48+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: German\n" @@ -390,6 +390,17 @@ msgctxt "NetplayWait" msgid "Send Message" msgstr "Nachricht senden" +#: src/ui/gui/netplay_wait.slint:94 +msgctxt "NetplayWait" +msgid "" +"Setting the input delay too low will cause the game to lag.\n" +"You can lower the input delay in-game by pressing Alt+[ and raise it with " +"Alt+]." +msgstr "" +"Eine zu niedrige Eingabeverzögerung führt zu Ruckeln im Spiel.\n" +"Sie können die Eingabeverzögerung im Spiel mit Alt+[ verringern und mit " +"Alt+] erhöhen." + #: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" msgid "Local Input Delay:" diff --git a/data/translations/es/LC_MESSAGES/gopher64.po b/data/translations/es/LC_MESSAGES/gopher64.po index 943dd63..39bdfc0 100644 --- a/data/translations/es/LC_MESSAGES/gopher64.po +++ b/data/translations/es/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-12 06:51+0000\n" +"POT-Creation-Date: 2026-06-13 07:48+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: Gemini\n" "Language-Team: Spanish (Spain)\n" @@ -390,6 +390,18 @@ msgctxt "NetplayWait" msgid "Send Message" msgstr "Enviar mensaje" +#: src/ui/gui/netplay_wait.slint:94 +msgctxt "NetplayWait" +msgid "" +"Setting the input delay too low will cause the game to lag.\n" +"You can lower the input delay in-game by pressing Alt+[ and raise it with " +"Alt+]." +msgstr "" +"Configurar un retardo de entrada demasiado bajo hará que el juego se " +"ralentice.\n" +"Puedes reducir el retardo de entrada en el juego pulsando Alt+[ y " +"aumentarlo con Alt+]." + #: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" msgid "Local Input Delay:" diff --git a/data/translations/fr/LC_MESSAGES/gopher64.po b/data/translations/fr/LC_MESSAGES/gopher64.po index d53b84a..191b08e 100644 --- a/data/translations/fr/LC_MESSAGES/gopher64.po +++ b/data/translations/fr/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-12 06:51+0000\n" +"POT-Creation-Date: 2026-06-13 07:48+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: French (France)\n" @@ -391,6 +391,17 @@ msgctxt "NetplayWait" msgid "Send Message" msgstr "Envoyer" +#: src/ui/gui/netplay_wait.slint:94 +msgctxt "NetplayWait" +msgid "" +"Setting the input delay too low will cause the game to lag.\n" +"You can lower the input delay in-game by pressing Alt+[ and raise it with " +"Alt+]." +msgstr "" +"Régler le délai d'entrée trop bas provoquera des ralentissements.\n" +"Vous pouvez diminuer le délai d'entrée en jeu avec Alt+[ et l'augmenter " +"avec Alt+]." + #: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" msgid "Local Input Delay:" diff --git a/data/translations/gopher64.pot b/data/translations/gopher64.pot index 59e39f8..bc0d732 100644 --- a/data/translations/gopher64.pot +++ b/data/translations/gopher64.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-06-12 06:51+0000\n" +"POT-Creation-Date: 2026-06-13 07:48+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -388,6 +388,13 @@ msgctxt "NetplayWait" msgid "Send Message" msgstr "" +#: src/ui/gui/netplay_wait.slint:94 +msgctxt "NetplayWait" +msgid "" +"Setting the input delay too low will cause the game to lag.\nYou can lower " +"the input delay in-game by pressing Alt+[ and raise it with Alt+]." +msgstr "" + #: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" msgid "Local Input Delay:" diff --git a/data/translations/ja/LC_MESSAGES/gopher64.po b/data/translations/ja/LC_MESSAGES/gopher64.po index fe8d677..8c08f38 100644 --- a/data/translations/ja/LC_MESSAGES/gopher64.po +++ b/data/translations/ja/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-12 06:51+0000\n" +"POT-Creation-Date: 2026-06-13 07:48+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Japanese\n" @@ -388,6 +388,16 @@ msgctxt "NetplayWait" msgid "Send Message" msgstr "送信" +#: src/ui/gui/netplay_wait.slint:94 +msgctxt "NetplayWait" +msgid "" +"Setting the input delay too low will cause the game to lag.\n" +"You can lower the input delay in-game by pressing Alt+[ and raise it with " +"Alt+]." +msgstr "" +"入力遅延を低く設定しすぎるとゲームが遅延します。\n" +"Alt+[ でゲーム内の入力遅延を下げ、Alt+] で上げることができます。" + #: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" msgid "Local Input Delay:" diff --git a/data/translations/nl/LC_MESSAGES/gopher64.po b/data/translations/nl/LC_MESSAGES/gopher64.po index 6d38a76..22b8e37 100644 --- a/data/translations/nl/LC_MESSAGES/gopher64.po +++ b/data/translations/nl/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-12 06:51+0000\n" +"POT-Creation-Date: 2026-06-13 07:48+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Dutch (Netherlands)\n" @@ -390,6 +390,17 @@ msgctxt "NetplayWait" msgid "Send Message" msgstr "Bericht verzenden" +#: src/ui/gui/netplay_wait.slint:94 +msgctxt "NetplayWait" +msgid "" +"Setting the input delay too low will cause the game to lag.\n" +"You can lower the input delay in-game by pressing Alt+[ and raise it with " +"Alt+]." +msgstr "" +"Een te lage invoervertraging zorgt ervoor dat het spel gaat haperen.\n" +"Je kunt de invoervertraging in het spel verlagen met Alt+[ en verhogen met " +"Alt+]." + #: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" msgid "Local Input Delay:" diff --git a/data/translations/pt_BR/LC_MESSAGES/gopher64.po b/data/translations/pt_BR/LC_MESSAGES/gopher64.po index a749394..2cf2522 100644 --- a/data/translations/pt_BR/LC_MESSAGES/gopher64.po +++ b/data/translations/pt_BR/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-06-12 06:51+0000\n" +"POT-Creation-Date: 2026-06-13 07:48+0000\n" "PO-Revision-Date: 2026-05-11 18:11-3000\n" "Last-Translator: EDUARDO CARVALHO \n" "Language-Team: LANGUAGE \n" @@ -391,6 +391,17 @@ msgctxt "NetplayWait" msgid "Send Message" msgstr "Enviar Mensagem" +#: src/ui/gui/netplay_wait.slint:94 +msgctxt "NetplayWait" +msgid "" +"Setting the input delay too low will cause the game to lag.\n" +"You can lower the input delay in-game by pressing Alt+[ and raise it with " +"Alt+]." +msgstr "" +"Definir o atraso de entrada muito baixo causará lag no jogo.\n" +"Você pode diminuir o atraso de entrada no jogo pressionando Alt+[ e " +"aumentá-lo com Alt+]." + #: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" msgid "Local Input Delay:" diff --git a/data/translations/ru/LC_MESSAGES/gopher64.po b/data/translations/ru/LC_MESSAGES/gopher64.po index b1a83dc..37aa747 100644 --- a/data/translations/ru/LC_MESSAGES/gopher64.po +++ b/data/translations/ru/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-12 06:51+0000\n" +"POT-Creation-Date: 2026-06-13 07:48+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Russian\n" @@ -389,6 +389,17 @@ msgctxt "NetplayWait" msgid "Send Message" msgstr "Отправить сообщение" +#: src/ui/gui/netplay_wait.slint:94 +msgctxt "NetplayWait" +msgid "" +"Setting the input delay too low will cause the game to lag.\n" +"You can lower the input delay in-game by pressing Alt+[ and raise it with " +"Alt+]." +msgstr "" +"Слишком низкая задержка ввода вызовет лаги в игре.\n" +"Вы можете уменьшить задержку ввода в игре, нажав Alt+[, и увеличить её с " +"помощью Alt+]." + #: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" msgid "Local Input Delay:" diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint index 5887bcd..9c3397c 100644 --- a/src/ui/gui/netplay_wait.slint +++ b/src/ui/gui/netplay_wait.slint @@ -91,7 +91,7 @@ export component NetplayWait inherits Page { } Text { - text: NetplayWaitData.motd; + text: NetplayData.player_name == NetplayWaitData.players[0] ? @tr("Setting the input delay too low will cause the game to lag.\nYou can lower the input delay in-game by pressing Alt+[ and raise it with Alt+].") : NetplayWaitData.motd; horizontal-alignment: center; wrap: word-wrap; } From 611b56186d6e1a2353744655299ef05c8511a479 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 13 Jun 2026 11:14:43 +0200 Subject: [PATCH 1034/1117] update recommendation formula (#1067) * update recommendation formula * more --- src/ui/netplay.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index f793df0..2acea2a 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -488,11 +488,11 @@ fn update_ping( .duration_since(std::time::UNIX_EPOCH) .unwrap() .as_millis(); - let ping = (now - message.timestamp) / 2; // calculate one-way latency + let ping = (now - message.timestamp) as f64 / 2.0; // calculate one-way latency pings.push(ping); if pings.len() > message.num_of_peers * 4 { // once we have enough samples, remove the highest 2 and return the next highest - pings.sort(); + pings.sort_by(f64::total_cmp); pings.truncate(pings.len() - 2); let ping = *pings.last().unwrap(); pings.clear(); @@ -503,8 +503,9 @@ fn update_ping( } else { 60.0 }; + let latency_frames = (ping / (1000.0 / refresh_rate)).ceil() as i32; let recommendation = - ((ping as f64 / (1000.0 / refresh_rate)) as i32 + 1).min(8); + (latency_frames + 1).min(8); if handle.get_netplay_recommended_delay() == 0 { handle.set_netplay_input_delay(recommendation); From 6cae2ed3acbaa4abcd48557cbef3a84cae1497e0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 13 Jun 2026 11:55:12 +0200 Subject: [PATCH 1035/1117] dont use usize in netplay messages (#1068) --- src/netplay.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index 1557276..b88b203 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -122,7 +122,7 @@ fn send_player_number( ) { let message = NetplayMessage { name: "player_number".to_string(), - data: player_number.to_be_bytes().to_vec(), + data: (player_number as u64).to_be_bytes().to_vec(), }; let data = postcard::to_stdvec(&message).unwrap(); for peer in peers { @@ -140,7 +140,7 @@ fn get_player_numbers( let message = postcard::from_bytes::(&data).unwrap(); if message.name == "player_number" { player_numbers.insert( - usize::from_be_bytes(message.data.try_into().unwrap()), + u64::from_be_bytes(message.data.try_into().unwrap()) as usize, Some(peer), ); } @@ -190,7 +190,7 @@ pub fn receive_save(netplay: &mut Netplay, save_type: &str, save_data: &mut Vec< pub fn send_input_delay(netplay: &mut Netplay, input_delay: usize) { let message = NetplayMessage { name: "input_delay".to_string(), - data: input_delay.to_be_bytes().to_vec(), + data: (input_delay as u64).to_be_bytes().to_vec(), }; send_message(netplay, message); change_input_delay(netplay, input_delay); @@ -212,7 +212,7 @@ fn change_input_delay(netplay: &mut Netplay, input_delay: usize) { fn check_input_delay(netplay: &mut Netplay) { if let Some(data) = netplay.messages.remove("input_delay") { - let input_delay = usize::from_be_bytes(data.try_into().unwrap()); + let input_delay = u64::from_be_bytes(data.try_into().unwrap()) as usize; if input_delay != netplay.input_delay { change_input_delay(netplay, input_delay); } From 74600b4b25fa2b5125721e19d666f5af74e6bd9c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 13 Jun 2026 15:00:12 +0200 Subject: [PATCH 1036/1117] pump sdl events before callbacks (#1069) --- src/device/vi.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index 23c73c3..fdf8144 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -118,6 +118,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u pub fn update_screen(device: &mut device::Device) { if !netplay::in_rollback(device.netplay.as_ref()) { ui::video::render_frame(); + unsafe { sdl3_sys::events::SDL_PumpEvents() }; } let (speed_limiter_toggled, paused) = ui::video::check_callback(device); @@ -137,7 +138,6 @@ pub fn update_screen(device: &mut device::Device) { } if !netplay::in_rollback(device.netplay.as_ref()) { - unsafe { sdl3_sys::events::SDL_PumpEvents() }; ui::video::update_screen(); device.speed_limiter.frame_counter += 1; let _ = device.ui.video.vis_tx.as_ref().unwrap().try_send(true); From 99c4d6dff820221ef6526c42079ce47f665dd093 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 13 Jun 2026 15:07:10 +0200 Subject: [PATCH 1037/1117] average top 3 values (#1070) --- src/ui/netplay.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 2acea2a..4acaa22 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -491,10 +491,9 @@ fn update_ping( let ping = (now - message.timestamp) as f64 / 2.0; // calculate one-way latency pings.push(ping); if pings.len() > message.num_of_peers * 4 { - // once we have enough samples, remove the highest 2 and return the next highest + // once we have enough samples, average the 3 highest values pings.sort_by(f64::total_cmp); - pings.truncate(pings.len() - 2); - let ping = *pings.last().unwrap(); + let ping_avg = pings.iter().rev().take(3).sum::() / 3.0; pings.clear(); weak_app .upgrade_in_event_loop(move |handle| { @@ -503,7 +502,7 @@ fn update_ping( } else { 60.0 }; - let latency_frames = (ping / (1000.0 / refresh_rate)).ceil() as i32; + let latency_frames = (ping_avg / (1000.0 / refresh_rate)).ceil() as i32; let recommendation = (latency_frames + 1).min(8); From ae7bac65d541a1678d9768e018bb26db8b74e223 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 13 Jun 2026 18:28:33 +0200 Subject: [PATCH 1038/1117] use custom ICE server config (#1071) * use custom ICE server config * more * more * more * more * more * more --- src/netplay.rs | 27 ++++++++++++++++++++++++--- src/ui/netplay.rs | 47 +++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 67 insertions(+), 7 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index b88b203..60267da 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -3,6 +3,13 @@ use crate::savestates; use crate::ui; use sha2::digest::Digest; +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +pub struct RtcIceServerConfig { + pub urls: Vec, + pub username: Option, + pub credential: Option, +} + pub struct GgrsConfig; impl ggrs::Config for GgrsConfig { type Input = ui::input::InputData; @@ -346,10 +353,24 @@ pub fn init( input_delay: usize, pal: bool, ) -> Option { - let (mut socket, loop_fut) = matchbox_socket::WebRtcSocketBuilder::new(server_addr) + let mut builder = matchbox_socket::WebRtcSocketBuilder::new(server_addr) .add_unreliable_channel() - .add_reliable_channel() - .build(); + .add_reliable_channel(); + + if let ice_config_path = ui::get_dirs().cache_dir.join("ice_config.json") + && let Ok(ice_config) = std::fs::read(&ice_config_path) + && let Ok(ice_config) = serde_json::from_slice::(&ice_config) + { + builder = builder.ice_server(matchbox_socket::RtcIceServerConfig { + urls: ice_config.urls, + username: ice_config.username, + credential: ice_config.credential, + }); + } else { + eprintln!("Using default ICE config"); + } + + let (mut socket, loop_fut) = builder.build(); tokio::spawn(async move { if let Err(e) = loop_fut.await { eprintln!("WebRTC loop failed: {}", e); diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 4acaa22..01e1f32 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -1,4 +1,5 @@ use crate::device; +use crate::netplay::RtcIceServerConfig; use crate::ui; use crate::ui::gui::{AppWindow, open_uri, run_rom, save_settings}; use futures::{SinkExt, StreamExt}; @@ -35,6 +36,7 @@ struct NetplaySession { players: Vec, server_address: Option, input_delay: Option, + ice_server_config: Option, } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] @@ -274,6 +276,7 @@ fn create_session( players: vec![player_name], server_address: None, input_delay: None, + ice_server_config: None, }; let create_session = NetplayLobbyMessage { message_type: MessageType::RequestCreateSession, @@ -321,6 +324,7 @@ fn create_session( close_ping_rx, session.server_address.as_ref().unwrap().clone(), session_name.into(), + session.ice_server_config.clone(), session.game_name.as_ref().unwrap().into(), handle.get_netplay_rom_path(), ui::GameSettings { @@ -384,6 +388,7 @@ fn join_session( players: vec![player_name], server_address: None, input_delay: None, + ice_server_config: None, }; let join_session = NetplayLobbyMessage { message_type: MessageType::RequestJoinSession, @@ -396,12 +401,22 @@ fn join_session( fn update_ping( server_addr: String, + ice_server_config: Option, mut close_ping_rx: tokio::sync::broadcast::Receiver<()>, weak_app: slint::Weak, ) { - let (mut socket, loop_fut) = matchbox_socket::WebRtcSocketBuilder::new(server_addr) - .add_unreliable_channel() - .build(); + let mut builder = + matchbox_socket::WebRtcSocketBuilder::new(server_addr).add_unreliable_channel(); + if let Some(ice_server_config) = ice_server_config { + builder = builder.ice_server(matchbox_socket::RtcIceServerConfig { + urls: ice_server_config.urls, + username: ice_server_config.username, + credential: ice_server_config.credential, + }); + } else { + eprintln!("Using default ICE config"); + } + let (mut socket, loop_fut) = builder.build(); tokio::spawn(async move { if let Err(e) = loop_fut.await { @@ -525,6 +540,22 @@ fn update_ping( }); } +fn update_ice_config(ice_server_config: Option) { + tokio::spawn(async move { + let ice_config_path = ui::get_dirs().cache_dir.join("ice_config.json"); + if let Some(ice_server_config) = ice_server_config { + tokio::fs::write( + &ice_config_path, + serde_json::to_vec(&ice_server_config).unwrap(), + ) + .await + .unwrap(); + } else { + let _ = tokio::fs::remove_file(&ice_config_path).await; + } + }); +} + #[allow(clippy::too_many_arguments)] fn setup_wait_window( netplay_write_sender: tokio::sync::broadcast::Sender>, @@ -532,12 +563,19 @@ fn setup_wait_window( close_ping_rx: tokio::sync::broadcast::Receiver<()>, server_addr: String, session_name: slint::SharedString, + ice_server_config: Option, game_name: slint::SharedString, rom_path: slint::SharedString, game_settings: ui::GameSettings, app: &AppWindow, ) { - update_ping(server_addr.clone(), close_ping_rx, app.as_weak()); + update_ice_config(ice_server_config.clone()); + update_ping( + server_addr.clone(), + ice_server_config, + close_ping_rx, + app.as_weak(), + ); app.set_netplay_session_name(session_name); app.set_netplay_game_name(game_name); @@ -746,6 +784,7 @@ fn setup_join_window( close_ping_rx.resubscribe(), session.server_address.as_ref().unwrap().clone(), session_name.into(), + session.ice_server_config.clone(), session.game_name.as_ref().unwrap().into(), handle.get_netplay_rom_path(), ui::GameSettings { From d6da1656b8c00a6a2e50e4faa31eacf53d927db0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 13 Jun 2026 19:29:36 +0200 Subject: [PATCH 1039/1117] clean up ICE config (#1072) --- src/lib.rs | 7 ++++++- src/netplay.rs | 8 ++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 584e013..bd49c79 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -169,6 +169,8 @@ pub fn run(args: Args, arg_count: usize) -> std::io::Result<()> { let mut shutdown_tx = None; let mut usb_handle = None; + let ice_config_path = dirs.cache_dir.join("ice_config.json"); + if let Some(server_addr) = args.netplay_server_addr && let Some(player_number) = args.netplay_player_number && let Some(number_of_players) = args.netplay_number_of_players @@ -179,6 +181,7 @@ pub fn run(args: Args, arg_count: usize) -> std::io::Result<()> { player_number, number_of_players, input_delay, + ice_config_path.clone(), device::cart::rom::is_system_pal(&rom_contents), ); if device.netplay.is_none() { @@ -253,7 +256,9 @@ pub fn run(args: Args, arg_count: usize) -> std::io::Result<()> { #[cfg(not(target_os = "android"))] retroachievements::shutdown_client(); - if device.netplay.is_none() { + if device.netplay.is_some() { + netplay::close(ice_config_path); + } else { for i in 0..4 { if device.ui.config.input.transfer_pak[i] && !device.ui.config.input.gb_ram_path[i].is_empty() diff --git a/src/netplay.rs b/src/netplay.rs index 60267da..29d53cc 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -351,14 +351,14 @@ pub fn init( player_number: usize, number_of_players: usize, input_delay: usize, + ice_config_path: std::path::PathBuf, pal: bool, ) -> Option { let mut builder = matchbox_socket::WebRtcSocketBuilder::new(server_addr) .add_unreliable_channel() .add_reliable_channel(); - if let ice_config_path = ui::get_dirs().cache_dir.join("ice_config.json") - && let Ok(ice_config) = std::fs::read(&ice_config_path) + if let Ok(ice_config) = std::fs::read(&ice_config_path) && let Ok(ice_config) = serde_json::from_slice::(&ice_config) { builder = builder.ice_server(matchbox_socket::RtcIceServerConfig { @@ -472,3 +472,7 @@ pub fn init( messages: std::collections::HashMap::new(), }) } + +pub fn close(ice_config_path: std::path::PathBuf) { + let _ = std::fs::remove_file(ice_config_path); +} From 9d2eec173258d3292e4e1f8b9dc11fdbb24294a0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 14 Jun 2026 08:53:05 +0200 Subject: [PATCH 1040/1117] bump version (#1073) --- Cargo.lock | 88 ++++++++++++++++++++++++++---------------------------- Cargo.toml | 2 +- 2 files changed, 43 insertions(+), 47 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5df4b7b..1a068b2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -922,9 +922,9 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ "hybrid-array", "zeroize", @@ -1148,9 +1148,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.63" +version = "1.2.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "dad887fd958be91b5098c0248def011f4523ab786cd411be668777e55063501f" dependencies = [ "find-msvc-tools", "jobserver", @@ -1781,9 +1781,6 @@ name = "deranged" version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" -dependencies = [ - "powerfmt", -] [[package]] name = "derive_more" @@ -1837,7 +1834,7 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ - "block-buffer 0.12.0", + "block-buffer 0.12.1", "const-oid 0.10.2", "crypto-common 0.2.2", "ctutils", @@ -2776,7 +2773,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.24" +version = "1.1.26" dependencies = [ "bindgen", "cc", @@ -3916,9 +3913,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.100" +version = "0.3.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" +checksum = "03d04c30968dffe80775bd4d7fb676131cd04a1fb46d2686dbffbaec2d9dfd31" dependencies = [ "cfg-if", "futures-util", @@ -4264,9 +4261,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4" [[package]] name = "memmap2" @@ -5090,9 +5087,9 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.80" +version = "0.10.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a45fa2aa886c42762255da344f0a0d313e254066c46aad76f300c3d3da62d967" +checksum = "77823a27f0babb03091cb9ed9ef80af3b39dbc82f97e8fa530374b7dafd87a45" dependencies = [ "bitflags 2.13.0", "cfg-if", @@ -5130,9 +5127,9 @@ dependencies = [ [[package]] name = "openssl-sys" -version = "0.9.116" +version = "0.9.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28a22dc7140cda5f096e5e7724a6962ca81a7f8bfd2979f9b18c11af56318c4" +checksum = "b47e7e6bb2c38cd930d25a23b40fa52e068c10e85f3e03a7f5ba5aaca5713695" dependencies = [ "cc", "libc", @@ -6894,9 +6891,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.15.1" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" [[package]] name = "smithay-client-toolkit" @@ -7192,9 +7189,9 @@ dependencies = [ [[package]] name = "swash" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1804632b66a35ca2b1d277eb0a138e10f46cb365b9a6d297e876b69ef79de43" +checksum = "0811b01ca2c4e8718760713911feaf4675c24f94e50530a015ec646cfb622f7c" dependencies = [ "skrifa 0.42.1", "yazi", @@ -7372,12 +7369,11 @@ dependencies = [ [[package]] name = "time" -version = "0.3.47" +version = "0.3.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +checksum = "711a53c2d47bbd818258c498c8dbfe186a2526c631495cfe7e078567f86b8469" dependencies = [ "deranged", - "itoa", "js-sys", "num-conv", "powerfmt", @@ -7388,15 +7384,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.27" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +checksum = "71c652a3727a9cbb9a02f707f530b618ce00d0ccd762009c8c23bd191df3c17d" dependencies = [ "num-conv", "time-core", @@ -8103,9 +8099,9 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.3+wasi-0.2.9" +version = "1.0.4+wasi-0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" dependencies = [ "wit-bindgen 0.57.1", ] @@ -8121,9 +8117,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.123" +version = "0.2.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" +checksum = "8ddb3f79143bced6de84270411622a2699cee572fc0875aeaf1e7867cf9fca1a" dependencies = [ "cfg-if", "once_cell", @@ -8134,9 +8130,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.73" +version = "0.4.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54568702fabf5d4849ce2b90fadfa64168a097eaf4b351ce9df8b687a0086aaf" +checksum = "503b14d284f2c8dac03b819967e155ea753f573586193b2b2c95990cb5d69280" dependencies = [ "js-sys", "wasm-bindgen", @@ -8144,9 +8140,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.123" +version = "0.2.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" +checksum = "4e21a184b13fb19e157296e2c46056aec9092264fab83e4ba59e68c61b323c3d" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -8154,9 +8150,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.123" +version = "0.2.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" +checksum = "fecefd9c35bd935a20fc3fc344b5f29138961e4f47fb03297d88f2587afb5ebd" dependencies = [ "bumpalo", "proc-macro2", @@ -8167,9 +8163,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.123" +version = "0.2.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" +checksum = "23939e44bb9a5d7576fa2b563dc2e136628f1224e88a8deed09e04858b77871f" dependencies = [ "unicode-ident", ] @@ -8345,9 +8341,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.100" +version = "0.3.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0871acf327f283dc6da28a1696cdc64fb355ba9f935d052021fa77f35cce69" +checksum = "a6430a72df5eb332242960fe84b3002a241163998241eb596d4f739b9757061d" dependencies = [ "js-sys", "wasm-bindgen", @@ -9801,18 +9797,18 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" +checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index e8fd19e..4d6a18e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.24" +version = "1.1.26" edition = "2024" rust-version = "1.96.0" From 6d6349c79d6423e86a5394b1f01c1bc8d45fd1ab Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 14 Jun 2026 10:27:11 +0200 Subject: [PATCH 1041/1117] Increase timeout duration from 2 to 3 seconds (#1074) --- src/ui/netplay.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 01e1f32..518b68e 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -287,7 +287,7 @@ fn create_session( netplay_write_sender.send(Some(create_session)).unwrap(); match tokio::time::timeout( - std::time::Duration::from_secs(2), + std::time::Duration::from_secs(3), netplay_read_receiver.recv(), ) .await From d62d4c852a973902f6e092a521d4eac1b921fbbb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 14 Jun 2026 12:50:35 +0200 Subject: [PATCH 1042/1117] Increase timeout duration from 2 to 3 seconds (#1075) --- src/ui/netplay.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 518b68e..00b4d57 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -148,7 +148,7 @@ fn manage_websocket( .insert("Authorization", env!("NETPLAY_ID").parse().unwrap()); tokio::spawn(async move { match tokio::time::timeout( - std::time::Duration::from_secs(2), + std::time::Duration::from_secs(3), tokio_tungstenite::connect_async(request), ) .await From 16224cd5a6129d4246ab904cfd3a579578bf8c13 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 14 Jun 2026 20:28:36 +0200 Subject: [PATCH 1043/1117] use spinbox for latency (#1077) * use spinbox for latency * more * more --- src/netplay.rs | 2 +- src/ui/gui/netplay_wait.slint | 13 +++++++------ src/ui/netplay.rs | 16 +++++++++++----- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index 29d53cc..6bfa42d 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -384,7 +384,7 @@ pub fn init( }; let mut reliable_channel = socket.take_channel(1).unwrap(); let now = std::time::Instant::now(); - let timeout = std::time::Duration::from_secs(10); + let timeout = std::time::Duration::from_secs(30); let mut player_numbers = std::collections::BTreeMap::new(); player_numbers.insert(player_number, None); loop { diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint index 9c3397c..33bac27 100644 --- a/src/ui/gui/netplay_wait.slint +++ b/src/ui/gui/netplay_wait.slint @@ -1,4 +1,4 @@ -import { VerticalBox, HorizontalBox, TextEdit, ComboBox, GroupBox, LineEdit, Button, GridBox, ScrollView } from "std-widgets.slint"; +import { VerticalBox, HorizontalBox, TextEdit, SpinBox, GroupBox, LineEdit, Button, GridBox, ScrollView } from "std-widgets.slint"; import { NetplayData } from "netplay_page.slint"; import { Page } from "page.slint"; @@ -103,12 +103,13 @@ export component NetplayWait inherits Page { vertical-alignment: center; } - ComboBox { - model: ["0", "1", "2", "3", "4", "5", "6", "7", "8"]; - current-index: NetplayWaitData.input_delay; + SpinBox { + minimum: 0; + maximum: 16; + value: NetplayWaitData.input_delay; enabled: NetplayWaitData.recommended_delay != 0; - selected => { - NetplayWaitData.input_delay = self.current-index; + edited => { + NetplayWaitData.input_delay = self.value; } } diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 00b4d57..f8c9dcc 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -25,6 +25,12 @@ enum MessageType { ReceiveChatMessage, } +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +pub struct ServerAddresses { + pub lobby: String, + pub game: String, +} + #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] struct NetplaySession { password: Option, @@ -34,7 +40,7 @@ struct NetplaySession { client_version: Option, features: Option>, players: Vec, - server_address: Option, + server_address: Option, input_delay: Option, ice_server_config: Option, } @@ -519,7 +525,7 @@ fn update_ping( }; let latency_frames = (ping_avg / (1000.0 / refresh_rate)).ceil() as i32; let recommendation = - (latency_frames + 1).min(8); + (latency_frames + 1).min(16); if handle.get_netplay_recommended_delay() == 0 { handle.set_netplay_input_delay(recommendation); @@ -561,7 +567,7 @@ fn setup_wait_window( netplay_write_sender: tokio::sync::broadcast::Sender>, mut netplay_read_receiver: tokio::sync::broadcast::Receiver>, close_ping_rx: tokio::sync::broadcast::Receiver<()>, - server_addr: String, + server_addresses: ServerAddresses, session_name: slint::SharedString, ice_server_config: Option, game_name: slint::SharedString, @@ -571,7 +577,7 @@ fn setup_wait_window( ) { update_ice_config(ice_server_config.clone()); update_ping( - server_addr.clone(), + server_addresses.lobby.clone(), ice_server_config, close_ping_rx, app.as_weak(), @@ -669,7 +675,7 @@ fn setup_wait_window( load_savestate_slot: None, }, Some(ui::gui::NetplayDevice { - server_addr, + server_addr: server_addresses.game.clone(), player_number, number_of_players: players.row_count(), input_delay, From 10d55bd25c58e14ec9619ed7c9add02aab0d8de0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 14 Jun 2026 22:36:54 +0200 Subject: [PATCH 1044/1117] move netplay init (#1078) * move netplay init * more --- parallel-rdp/interface.cpp | 51 +++++++++++++++++++------------------- src/device.rs | 44 +++++++++++++++++++++++++++++--- src/device/cart/rom.rs | 13 ---------- src/lib.rs | 43 +++++++++++++++----------------- src/netplay.rs | 24 ++++++++++++++++-- src/ui/video.rs | 10 ++++---- 6 files changed, 112 insertions(+), 73 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 8290e68..05c1e27 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -622,10 +622,10 @@ static void render_frame(Vulkan::Device &device) { cmd->set_depth_test(false, false); cmd->set_cull_mode(VK_CULL_MODE_NONE); + VkViewport vp = cmd->get_viewport(); // If we don't have an image, we just get a cleared screen in the render // pass. if (image) { - VkViewport vp = cmd->get_viewport(); calculate_viewport(&vp.x, &vp.y, &vp.width, &vp.height, image->get_height() / gfx_info.upscale); @@ -646,33 +646,32 @@ static void render_frame(Vulkan::Device &device) { // The vertices are constants in the shader. // Draws fullscreen quad using oversized triangle. cmd->draw(3); - - if (!messages.empty()) { - Message *message = &messages.front(); - if (!message->image) { - message->image = create_message_image(device, vp.width, message_font, - message->message.c_str()); - SDL_AddTimer(message->milliseconds, pop_message_callback, NULL); - } - cmd->set_texture(0, 0, message->image->get_view(), - Vulkan::StockSampler::NearestClamp); - vp.x = floor(vp.x + (vp.width - message->image->get_width()) / 2); - vp.y = vp.y + vp.height - message->image->get_height(); - vp.height = message->image->get_height(); - vp.width = message->image->get_width(); - cmd->set_viewport(vp); - - cmd->draw(3); - } else if (achievement_progress_indicator_image) { - draw_indicator(cmd, achievement_progress_indicator_image, vp); - } else if (achievement_challenge_indicator_image && - display_challenge_indicator) { - draw_indicator(cmd, achievement_challenge_indicator_image, vp); + } + if (!messages.empty()) { + Message *message = &messages.front(); + if (!message->image) { + message->image = create_message_image(device, vp.width, message_font, + message->message.c_str()); + SDL_AddTimer(message->milliseconds, pop_message_callback, NULL); } + cmd->set_texture(0, 0, message->image->get_view(), + Vulkan::StockSampler::NearestClamp); + vp.x = floor(vp.x + (vp.width - message->image->get_width()) / 2); + vp.y = vp.y + vp.height - message->image->get_height(); + vp.height = message->image->get_height(); + vp.width = message->image->get_width(); + cmd->set_viewport(vp); - if (messages.empty() && display_fps && fps_image) { - draw_fps(cmd, vp); - } + cmd->draw(3); + } else if (achievement_progress_indicator_image) { + draw_indicator(cmd, achievement_progress_indicator_image, vp); + } else if (achievement_challenge_indicator_image && + display_challenge_indicator) { + draw_indicator(cmd, achievement_challenge_indicator_image, vp); + } + + if (messages.empty() && display_fps && fps_image) { + draw_fps(cmd, vp); } cmd->end_render_pass(); diff --git a/src/device.rs b/src/device.rs index c58b2e2..4c03da3 100644 --- a/src/device.rs +++ b/src/device.rs @@ -52,6 +52,7 @@ pub fn run_game( rom_contents: &[u8], game_settings: ui::GameSettings, ra_config: retroachievements::RAConfig, + netplay_config: Option, ) { device.cpu.overclock = game_settings.overclock; if game_settings.disable_expansion_pak { @@ -62,17 +63,35 @@ pub fn run_game( device.savestate.load_state = true; } - init_rng(device); - cart::rom::init(device, rom_contents); // cart needs to come before rdram // rdram pointer is shared with parallel-rdp and retroachievements rdram::init(device); - ui::video::init(device); + ui::video::init(device, netplay_config.is_some()); ui::audio::init(device); ui::input::init(&mut device.ui); + // must be after video init + if let Some(netplay_config) = &netplay_config { + device.netplay = netplay::init( + netplay_config.server_addr.clone(), + netplay_config.player_number, + netplay_config.number_of_players, + netplay_config.input_delay, + netplay_config.ice_config_path.clone(), + cart::rom::is_system_pal(rom_contents), + ); + if device.netplay.is_none() { + ui::input::close(&mut device.ui); + ui::audio::close(&mut device.ui); + ui::video::close(&device.ui); + return; + } + } + + init_rng_rtc(device); + // must be after video init let (discord_watch_tx, discord_handle) = if ra_config.enabled && device.netplay.is_none() { retroachievements::load_game(rom_contents, rom_contents.len(), ra_config.rich_presence) @@ -105,6 +124,11 @@ pub fn run_game( retroachievements::unload_game(discord_watch_tx, discord_handle); ui::storage::write_saves(device); + + if let Some(netplay) = &mut device.netplay { + netplay::close(netplay); + } + ui::input::close(&mut device.ui); ui::audio::close(&mut device.ui); ui::video::close(&device.ui); @@ -114,7 +138,7 @@ fn set_rng() -> rand::rngs::Xoshiro256PlusPlus { rand::rngs::Xoshiro256PlusPlus::try_from_rng(&mut rand::rngs::SysRng).unwrap() } -fn init_rng(device: &mut Device) { +fn init_rng_rtc(device: &mut Device) { let mut rng_seed = set_rng().next_u64(); if let Some(netplay) = &mut device.netplay { if netplay.player_number == 0 { @@ -124,6 +148,18 @@ fn init_rng(device: &mut Device) { } } device.rng = rand::rngs::Xoshiro256PlusPlus::seed_from_u64(rng_seed); + + device.cart.rtc_timestamp = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_secs() as i64; + if let Some(netplay) = &mut device.netplay { + if netplay.player_number == 0 { + netplay::send_rtc(netplay, device.cart.rtc_timestamp); + } else { + device.cart.rtc_timestamp = netplay::receive_rtc(netplay); + } + } } fn swap_rom(contents: Vec) -> Option> { diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 369648e..76f8866 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -1,5 +1,4 @@ use crate::device; -use crate::netplay; use crate::ui; use sha2::{Digest, Sha256}; @@ -122,18 +121,6 @@ pub fn dma_write( } pub fn init(device: &mut device::Device, rom_file: &[u8]) { - device.cart.rtc_timestamp = std::time::SystemTime::now() - .duration_since(std::time::UNIX_EPOCH) - .unwrap() - .as_secs() as i64; - if let Some(netplay) = &mut device.netplay { - if netplay.player_number == 0 { - netplay::send_rtc(netplay, device.cart.rtc_timestamp); - } else { - device.cart.rtc_timestamp = netplay::receive_rtc(netplay); - } - } - device.cart.sc64.cfg[device::cart::sc64::SC64_BOOTLOADER_SWITCH as usize] = 1; device.cart.rom = rom_file.to_vec(); diff --git a/src/lib.rs b/src/lib.rs index bd49c79..a361262 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -169,25 +169,7 @@ pub fn run(args: Args, arg_count: usize) -> std::io::Result<()> { let mut shutdown_tx = None; let mut usb_handle = None; - let ice_config_path = dirs.cache_dir.join("ice_config.json"); - - if let Some(server_addr) = args.netplay_server_addr - && let Some(player_number) = args.netplay_player_number - && let Some(number_of_players) = args.netplay_number_of_players - && let Some(input_delay) = args.netplay_input_delay - { - device.netplay = netplay::init( - server_addr, - player_number, - number_of_players, - input_delay, - ice_config_path.clone(), - device::cart::rom::is_system_pal(&rom_contents), - ); - if device.netplay.is_none() { - return Err(Error::other("Failed to connect to netplay server")); - } - } else { + if args.netplay_server_addr.is_none() { for i in 0..4 { if device.ui.config.input.transfer_pak[i] && !device.ui.config.input.gb_rom_path[i].is_empty() @@ -213,7 +195,7 @@ pub fn run(args: Args, arg_count: usize) -> std::io::Result<()> { { let username = args.ra_username.unwrap_or(ra_config.username.clone()); retroachievements::init_client( - if cfg!(ra_hardcore_enabled) && device.netplay.is_none() { + if cfg!(ra_hardcore_enabled) && args.netplay_server_addr.is_none() { ra_config.hardcore } else { false @@ -240,6 +222,22 @@ pub fn run(args: Args, arg_count: usize) -> std::io::Result<()> { retroachievements::RAConfig::default() }; + let netplay_config = if let Some(server_addr) = args.netplay_server_addr + && let Some(player_number) = args.netplay_player_number + && let Some(number_of_players) = args.netplay_number_of_players + && let Some(input_delay) = args.netplay_input_delay + { + Some(netplay::NetplayConfig { + server_addr, + player_number, + number_of_players, + input_delay, + ice_config_path: dirs.cache_dir.join("ice_config.json"), + }) + } else { + None + }; + device::run_game( &mut device, &rom_contents, @@ -250,15 +248,14 @@ pub fn run(args: Args, arg_count: usize) -> std::io::Result<()> { load_savestate_slot: args.load_state, }, ra_config, + netplay_config, ); // on Android, the client is shut down in the app_window function #[cfg(not(target_os = "android"))] retroachievements::shutdown_client(); - if device.netplay.is_some() { - netplay::close(ice_config_path); - } else { + if device.netplay.is_none() { for i in 0..4 { if device.ui.config.input.transfer_pak[i] && !device.ui.config.input.gb_ram_path[i].is_empty() diff --git a/src/netplay.rs b/src/netplay.rs index 6bfa42d..a0a4594 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -43,6 +43,14 @@ impl ggrs::NonBlockingSocket for MatchboxChannel { } } +pub struct NetplayConfig { + pub server_addr: String, + pub player_number: usize, + pub number_of_players: usize, + pub input_delay: usize, + pub ice_config_path: std::path::PathBuf, +} + pub struct Netplay { pub session: ggrs::P2PSession, pub reliable_channel: matchbox_socket::WebRtcChannel, @@ -56,6 +64,7 @@ pub struct Netplay { pub requests: std::collections::VecDeque>, pub incoming_message: Vec, pub disconnected_peers: tokio::sync::mpsc::Receiver, + pub ice_config_path: std::path::PathBuf, } #[derive(serde::Serialize, serde::Deserialize)] @@ -387,6 +396,12 @@ pub fn init( let timeout = std::time::Duration::from_secs(30); let mut player_numbers = std::collections::BTreeMap::new(); player_numbers.insert(player_number, None); + + ui::video::onscreen_message( + "Connecting to netplay peers...", + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, + ); + loop { socket.update_peers(); let peers = socket @@ -403,6 +418,9 @@ pub fn init( eprintln!("Could not connect to netplay peers"); return None; } + unsafe { sdl3_sys::events::SDL_PumpEvents() }; + ui::video::render_frame(); + ui::video::update_screen(); std::thread::sleep(std::time::Duration::from_millis(10)); } @@ -449,6 +467,7 @@ pub fn init( eprintln!("Could not start netplay session"); return None; } + unsafe { sdl3_sys::events::SDL_PumpEvents() }; std::thread::sleep(std::time::Duration::from_millis(10)); } @@ -470,9 +489,10 @@ pub fn init( requests: std::collections::VecDeque::new(), received_data: std::collections::VecDeque::new(), messages: std::collections::HashMap::new(), + ice_config_path, }) } -pub fn close(ice_config_path: std::path::PathBuf) { - let _ = std::fs::remove_file(ice_config_path); +pub fn close(netplay: &Netplay) { + let _ = std::fs::remove_file(&netplay.ice_config_path); } diff --git a/src/ui/video.rs b/src/ui/video.rs index 74daf0d..e397637 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -10,7 +10,7 @@ const NTSC_WIDESCREEN_WIDTH: i32 = 426; const NTSC_STANDARD_WIDTH: i32 = 320; const NTSC_HEIGHT: i32 = 240; -fn build_gfx_info(device: &mut device::Device) -> GFX_INFO { +fn build_gfx_info(device: &mut device::Device, netplay: bool) -> GFX_INFO { GFX_INFO { RDRAM: device.rdram.mem.as_mut_ptr(), DMEM: device.rsp.mem.as_mut_ptr(), @@ -22,7 +22,7 @@ fn build_gfx_info(device: &mut device::Device) -> GFX_INFO { PAL: device.cart.pal, widescreen: device.ui.config.video.widescreen, fullscreen: device.ui.video.fullscreen, - vsync: if device.netplay.is_none() { + vsync: if !netplay { device.ui.config.video.vsync } else { false @@ -34,7 +34,7 @@ fn build_gfx_info(device: &mut device::Device) -> GFX_INFO { } } -pub fn init(device: &mut device::Device) { +pub fn init(device: &mut device::Device, netplay: bool) { ui::sdl_init(sdl3_sys::init::SDL_INIT_VIDEO); ui::ttf_init(); @@ -99,7 +99,7 @@ pub fn init(device: &mut device::Device) { sdl3_sys::everything::SDL_HideCursor(); } - let gfx_info = build_gfx_info(device); + let gfx_info = build_gfx_info(device, netplay); unsafe { let font_bytes = include_bytes!("../../data/ui/RobotoMono-Regular.ttf"); @@ -170,7 +170,7 @@ pub fn idle() { } pub fn load_state(device: &mut device::Device, rdp_state: *const u8) { - let gfx_info = build_gfx_info(device); + let gfx_info = build_gfx_info(device, device.netplay.is_some()); unsafe { rdp_load_state(gfx_info, rdp_state); for reg in 0..device::vi::VI_REGS_COUNT { From 9b7aeccd48a7230c46146e7251af11d5837f83ad Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 15 Jun 2026 08:53:54 +0200 Subject: [PATCH 1045/1117] close window on user request (#1079) * close window on user request * more * more * more --- src/device.rs | 7 ++----- src/netplay.rs | 44 ++++++++++++++++++++++++-------------------- src/ui/netplay.rs | 5 ++++- 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/src/device.rs b/src/device.rs index 4c03da3..865cd80 100644 --- a/src/device.rs +++ b/src/device.rs @@ -75,11 +75,8 @@ pub fn run_game( // must be after video init if let Some(netplay_config) = &netplay_config { device.netplay = netplay::init( - netplay_config.server_addr.clone(), - netplay_config.player_number, - netplay_config.number_of_players, - netplay_config.input_delay, - netplay_config.ice_config_path.clone(), + device, + netplay_config, cart::rom::is_system_pal(rom_contents), ); if device.netplay.is_none() { diff --git a/src/netplay.rs b/src/netplay.rs index a0a4594..c72d21c 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -356,18 +356,15 @@ fn advance_frame(device: &mut device::Device) { } pub fn init( - server_addr: String, - player_number: usize, - number_of_players: usize, - input_delay: usize, - ice_config_path: std::path::PathBuf, + device: &mut device::Device, + netplay_config: &NetplayConfig, pal: bool, ) -> Option { - let mut builder = matchbox_socket::WebRtcSocketBuilder::new(server_addr) + let mut builder = matchbox_socket::WebRtcSocketBuilder::new(&netplay_config.server_addr) .add_unreliable_channel() .add_reliable_channel(); - if let Ok(ice_config) = std::fs::read(&ice_config_path) + if let Ok(ice_config) = std::fs::read(&netplay_config.ice_config_path) && let Ok(ice_config) = serde_json::from_slice::(&ice_config) { builder = builder.ice_server(matchbox_socket::RtcIceServerConfig { @@ -395,22 +392,23 @@ pub fn init( let now = std::time::Instant::now(); let timeout = std::time::Duration::from_secs(30); let mut player_numbers = std::collections::BTreeMap::new(); - player_numbers.insert(player_number, None); + player_numbers.insert(netplay_config.player_number, None); ui::video::onscreen_message( "Connecting to netplay peers...", ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, ); - loop { + device.cpu.running = true; + while device.cpu.running { socket.update_peers(); let peers = socket .connected_peers() .collect::>(); - send_player_number(&mut reliable_channel, peers, player_number); + send_player_number(&mut reliable_channel, peers, netplay_config.player_number); get_player_numbers(&mut reliable_channel, &mut player_numbers); - if player_numbers.len() == number_of_players { + if player_numbers.len() == netplay_config.number_of_players { break; } @@ -422,12 +420,18 @@ pub fn init( ui::video::render_frame(); ui::video::update_screen(); std::thread::sleep(std::time::Duration::from_millis(10)); + ui::video::check_callback(device); } + if !device.cpu.running { + // user closed the window + return None; + } + device.cpu.running = false; let mut session_builder = ggrs::SessionBuilder::::new() - .with_num_players(number_of_players) + .with_num_players(netplay_config.number_of_players) .unwrap() - .with_input_delay(input_delay) + .with_input_delay(netplay_config.input_delay) .with_fps(if pal { 50 } else { 60 }) .unwrap() .with_desync_detection_mode(ggrs::DesyncDetection::On { interval: 60 }) @@ -474,22 +478,22 @@ pub fn init( Some(Netplay { disconnected_peers: disconnected_peers_rx, incoming_message: vec![], - input_delay, + input_delay: netplay_config.input_delay, session, reliable_channel, peers, - player_number, + player_number: netplay_config.player_number, connected: [ - number_of_players > 0, - number_of_players > 1, - number_of_players > 2, - number_of_players > 3, + netplay_config.number_of_players > 0, + netplay_config.number_of_players > 1, + netplay_config.number_of_players > 2, + netplay_config.number_of_players > 3, ], inputs: Vec::new(), requests: std::collections::VecDeque::new(), received_data: std::collections::VecDeque::new(), messages: std::collections::HashMap::new(), - ice_config_path, + ice_config_path: netplay_config.ice_config_path.clone(), }) } diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index f8c9dcc..397dcc9 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -148,7 +148,10 @@ fn manage_websocket( netplay_read_sender: tokio::sync::broadcast::Sender>, mut netplay_write_receiver: tokio::sync::broadcast::Receiver>, ) { - let mut request = "wss://netplay.gopher64.com".into_client_request().unwrap(); + let mut request = std::env::var("NETPLAY_SERVER_URL") + .unwrap_or("wss://netplay.gopher64.com".to_string()) + .into_client_request() + .unwrap(); request .headers_mut() .insert("Authorization", env!("NETPLAY_ID").parse().unwrap()); From 90e51f5f098e9c296a911c344e642a61ac2b0ba0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 15 Jun 2026 11:44:33 +0200 Subject: [PATCH 1046/1117] setup callbacks at start (#1080) * setup callbacks at start * more * more --- src/ui/gui/appwindow.slint | 6 +- src/ui/gui/netplay_create.slint | 6 +- src/ui/netplay.rs | 305 +++++++++++++++++--------------- 3 files changed, 172 insertions(+), 145 deletions(-) diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 3785be9..245c6b3 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -37,7 +37,7 @@ export component AppWindow inherits Window { callback netplay_begin_game(int); callback netplay_send_chat_message(string); callback netplay_refresh_sessions; - callback netplay_create_session(string, string, string, string, string, string); + callback netplay_create_session(string, string, string, string, string, string, bool, bool); callback netplay_select_rom(string); callback netplay_join_session(string, string, string, string); callback netplay_close; @@ -256,8 +256,8 @@ export component AppWindow inherits Window { select_rom(rom_dir) => { netplay_select_rom(rom_dir); } - create_session(a, b, c, d, e, f) => { - netplay_create_session(a,b,c,d,e,f); + create_session(a, b, c, d, e, f, g, h) => { + netplay_create_session(a,b,c,d,e,f,g,h); } close => { netplay_close(); diff --git a/src/ui/gui/netplay_create.slint b/src/ui/gui/netplay_create.slint index aaf1624..625efa7 100644 --- a/src/ui/gui/netplay_create.slint +++ b/src/ui/gui/netplay_create.slint @@ -6,7 +6,7 @@ import { Page } from "page.slint"; export component NetplayCreate inherits Page { title: @tr("Netplay: Create Session"); callback select_rom(string); - callback create_session(string, string, string, string, string, string); + callback create_session(string, string, string, string, string, string, bool, bool); callback close; VerticalBox { @@ -98,7 +98,9 @@ export component NetplayCreate inherits Page { NetplayData.game_name, NetplayData.game_hash, NetplayData.game_cheats, - NetplayData.password); + NetplayData.password, + SettingsData.overclock_n64_cpu, + SettingsData.disable_expansion_pak); } } Button { diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 397dcc9..543638a 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -108,39 +108,175 @@ fn select_rom(weak: slint::Weak, rom_dir: slint::SharedString) { }); } -fn setup_create_window( +fn setup_callbacks( app: &AppWindow, - game_settings: ui::GameSettings, - netplay_write_sender: tokio::sync::broadcast::Sender>, - netplay_read_receiver: tokio::sync::broadcast::Receiver>, - netplay_read_sender: tokio::sync::broadcast::Sender>, - netplay_write_receiver: tokio::sync::broadcast::Receiver>, - close_ping_rx: tokio::sync::broadcast::Receiver<()>, + netplay_write_sender: &tokio::sync::broadcast::Sender>, + netplay_read_receiver: &tokio::sync::broadcast::Receiver>, + netplay_read_sender: &tokio::sync::broadcast::Sender>, + netplay_write_receiver: &tokio::sync::broadcast::Receiver>, + close_ping_tx: &tokio::sync::broadcast::Sender<()>, + close_ping_rx: &tokio::sync::broadcast::Receiver<()>, ) { let weak = app.as_weak(); + let netplay_write_sender_create_session = netplay_write_sender.clone(); + let netplay_read_receiver_create_session = netplay_read_receiver.resubscribe(); + let netplay_write_receiver_create_session = netplay_write_receiver.resubscribe(); + let netplay_read_sender_create_session = netplay_read_sender.clone(); + let close_ping_tx_create_session = close_ping_tx.clone(); + let close_ping_rx_create_session = close_ping_rx.resubscribe(); app.on_netplay_create_session( - move |session_name, player_name, game_name, game_hash, game_cheats, password| { + move |session_name, + player_name, + game_name, + game_hash, + game_cheats, + password, + overclock, + disable_expansion_pak| { + close_connections( + &netplay_write_sender_create_session, + &netplay_read_sender_create_session, + &close_ping_tx_create_session, + ); manage_websocket( - netplay_read_sender.clone(), - netplay_write_receiver.resubscribe(), + netplay_read_sender_create_session.clone(), + netplay_write_receiver_create_session.resubscribe(), ); create_session( - netplay_write_sender.clone(), - netplay_read_receiver.resubscribe(), - close_ping_rx.resubscribe(), + netplay_write_sender_create_session.clone(), + netplay_read_receiver_create_session.resubscribe(), + close_ping_rx_create_session.resubscribe(), session_name.to_string(), player_name.to_string(), game_name.to_string(), game_hash.to_string(), game_cheats.to_string(), password.to_string(), - game_settings.clone(), + overclock, + disable_expansion_pak, weak.clone(), ); }, ); + let write_sender_chat_message = netplay_write_sender.clone(); + app.on_netplay_send_chat_message(move |message| { + let send_chat = NetplayLobbyMessage { + message_type: MessageType::SendChatMessage, + sessions: std::collections::HashMap::new(), + message: Some(message.into()), + }; + write_sender_chat_message.send(Some(send_chat)).unwrap(); + }); + + let write_sender_begin_game = netplay_write_sender.clone(); + app.on_netplay_begin_game(move |chosen_input_delay| { + let begin_game = NetplayLobbyMessage { + message_type: MessageType::RequestBeginGame, + sessions: std::collections::HashMap::new(), + message: Some(chosen_input_delay.to_string()), + }; + write_sender_begin_game.send(Some(begin_game)).unwrap(); + }); + + let write_sender_refresh_sessions = netplay_write_sender.clone(); + app.on_netplay_refresh_sessions(move || { + update_sessions(write_sender_refresh_sessions.clone()); + }); + + let write_sender_join_session = netplay_write_sender.clone(); + app.on_netplay_join_session(move |session_name, player_name, game_hash, password| { + join_session( + write_sender_join_session.clone(), + session_name.to_string(), + player_name.to_string(), + game_hash.to_string(), + password.to_string(), + ); + }); + + let weak_app = app.as_weak(); + app.on_create_session_button_clicked(move || { + weak_app + .upgrade_in_event_loop(move |handle| { + save_settings(&handle); + setup_create_window(&handle); + }) + .unwrap(); + }); + + let weak_app = app.as_weak(); + let netplay_write_sender_join_session_button = netplay_write_sender.clone(); + let netplay_read_receiver_join_session_button = netplay_read_receiver.resubscribe(); + let netplay_read_sender_join_session_button = netplay_read_sender.clone(); + let netplay_write_receiver_join_session_button = netplay_write_receiver.resubscribe(); + let close_ping_tx_join_session_button = close_ping_tx.clone(); + let close_ping_rx_join_session_button = close_ping_rx.resubscribe(); + app.on_join_session_button_clicked(move || { + let netplay_write_sender = netplay_write_sender_join_session_button.clone(); + let netplay_read_receiver = netplay_read_receiver_join_session_button.resubscribe(); + let netplay_read_sender = netplay_read_sender_join_session_button.clone(); + let netplay_write_receiver = netplay_write_receiver_join_session_button.resubscribe(); + let close_ping_tx = close_ping_tx_join_session_button.clone(); + let close_ping_rx = close_ping_rx_join_session_button.resubscribe(); + weak_app + .upgrade_in_event_loop(move |handle| { + save_settings(&handle); + setup_join_window( + &handle, + netplay_write_sender, + netplay_read_receiver, + netplay_read_sender, + netplay_write_receiver, + close_ping_tx, + close_ping_rx, + ); + }) + .unwrap(); + }); + + let weak_app = app.as_weak(); + app.on_netplay_select_rom(move |rom_dir| { + select_rom(weak_app.clone(), rom_dir); + }); + + let weak_app = app.as_weak(); + let netplay_write_sender = netplay_write_sender.clone(); + let netplay_read_sender = netplay_read_sender.clone(); + let close_ping_tx = close_ping_tx.clone(); + app.on_netplay_close(move || { + weak_app + .upgrade_in_event_loop(move |handle| { + handle.set_show_netplay_wait_session(false); + handle.set_show_netplay_create_session(false); + handle.set_show_netplay_join_session(false); + handle.invoke_clear_netplay_data(); + handle.invoke_close_message(); + }) + .unwrap(); + close_connections(&netplay_write_sender, &netplay_read_sender, &close_ping_tx); + }); + + app.on_netplay_discord_button_clicked(move || { + open_uri("https://discord.gg/JyW6ZgBUyS"); + }); + app.on_netplay_feedback_button_clicked(move || { + open_uri("https://github.com/gopher64/gopher64/discussions/453"); + }); +} + +fn close_connections( + netplay_write_sender: &tokio::sync::broadcast::Sender>, + netplay_read_sender: &tokio::sync::broadcast::Sender>, + close_ping_tx: &tokio::sync::broadcast::Sender<()>, +) { + let _ = netplay_write_sender.send(None); // close current websocket if any + let _ = netplay_read_sender.send(None); // close current receiver if any + let _ = close_ping_tx.send(()); // close ping +} + +fn setup_create_window(app: &AppWindow) { app.set_show_netplay_create_session(true); } @@ -255,7 +391,8 @@ fn create_session( game_hash: String, game_cheats: String, password: String, - game_settings: ui::GameSettings, + overclock: bool, + disable_expansion_pak: bool, weak_app: slint::Weak, ) { tokio::spawn(async move { @@ -265,10 +402,10 @@ fn create_session( features.insert("cheats".to_string(), game_cheats); } - features.insert("overclock".to_string(), game_settings.overclock.to_string()); + features.insert("overclock".to_string(), overclock.to_string()); features.insert( "disable_expansion_pak".to_string(), - game_settings.disable_expansion_pak.to_string(), + disable_expansion_pak.to_string(), ); let session = NetplaySession { @@ -598,26 +735,6 @@ fn setup_wait_window( }; netplay_write_sender.send(Some(request_update)).unwrap(); - let sender = netplay_write_sender.clone(); - app.on_netplay_send_chat_message(move |message| { - let send_chat = NetplayLobbyMessage { - message_type: MessageType::SendChatMessage, - sessions: std::collections::HashMap::new(), - message: Some(message.into()), - }; - sender.send(Some(send_chat)).unwrap(); - }); - - let sender = netplay_write_sender.clone(); - app.on_netplay_begin_game(move |chosen_input_delay| { - let begin_game = NetplayLobbyMessage { - message_type: MessageType::RequestBeginGame, - sessions: std::collections::HashMap::new(), - message: Some(chosen_input_delay.to_string()), - }; - sender.send(Some(begin_game)).unwrap(); - }); - let weak_app = app.as_weak(); tokio::spawn(async move { loop { @@ -728,8 +845,10 @@ fn setup_join_window( netplay_read_receiver: tokio::sync::broadcast::Receiver>, netplay_read_sender: tokio::sync::broadcast::Sender>, netplay_write_receiver: tokio::sync::broadcast::Receiver>, + close_ping_tx: tokio::sync::broadcast::Sender<()>, close_ping_rx: tokio::sync::broadcast::Receiver<()>, ) { + close_connections(&netplay_write_sender, &netplay_read_sender, &close_ping_tx); manage_websocket( netplay_read_sender.clone(), netplay_write_receiver.resubscribe(), @@ -737,22 +856,6 @@ fn setup_join_window( app.set_netplay_pending_refresh(true); - let write_sender = netplay_write_sender.clone(); - app.on_netplay_refresh_sessions(move || { - update_sessions(write_sender.clone()); - }); - - let write_sender = netplay_write_sender.clone(); - app.on_netplay_join_session(move |session_name, player_name, game_hash, password| { - join_session( - write_sender.clone(), - session_name.to_string(), - player_name.to_string(), - game_hash.to_string(), - password.to_string(), - ); - }); - let weak = app.as_weak(); let mut read_receiver = netplay_read_receiver.resubscribe(); let write_sender = netplay_write_sender.clone(); @@ -904,91 +1007,13 @@ pub fn netplay_window(app: &AppWindow) { tokio::sync::broadcast::Receiver<()>, ) = tokio::sync::broadcast::channel(5); - let weak_app = app.as_weak(); - let write_sender_create = netplay_write_sender.clone(); - let read_receiver_create = netplay_read_receiver.resubscribe(); - let read_sender_create = netplay_read_sender.clone(); - let write_receiver_create = netplay_write_receiver.resubscribe(); - let close_ping_create = close_ping_rx.resubscribe(); - app.on_create_session_button_clicked(move || { - let write_sender = write_sender_create.clone(); - let read_receiver = read_receiver_create.resubscribe(); - let read_sender = read_sender_create.clone(); - let write_receiver = write_receiver_create.resubscribe(); - let close_ping_rx = close_ping_create.resubscribe(); - weak_app - .upgrade_in_event_loop(move |handle| { - save_settings(&handle); - setup_create_window( - &handle, - ui::GameSettings { - overclock: handle.get_overclock_n64_cpu(), - disable_expansion_pak: handle.get_disable_expansion_pak(), - cheats: rustc_hash::FxHashMap::default(), // not used here - load_savestate_slot: None, - }, - write_sender, - read_receiver, - read_sender, - write_receiver, - close_ping_rx, - ); - }) - .unwrap(); - }); - - let weak_app = app.as_weak(); - let write_sender_join = netplay_write_sender.clone(); - let read_sender_join = netplay_read_sender.clone(); - let close_ping_join = close_ping_rx.resubscribe(); - app.on_join_session_button_clicked(move || { - let write_sender = write_sender_join.clone(); - let read_receiver = netplay_read_receiver.resubscribe(); - let read_sender = read_sender_join.clone(); - let write_receiver = netplay_write_receiver.resubscribe(); - let close_ping_rx = close_ping_join.resubscribe(); - weak_app - .upgrade_in_event_loop(move |handle| { - save_settings(&handle); - setup_join_window( - &handle, - write_sender, - read_receiver, - read_sender, - write_receiver, - close_ping_rx, - ); - }) - .unwrap(); - }); - - let weak_app = app.as_weak(); - app.on_netplay_select_rom(move |rom_dir| { - select_rom(weak_app.clone(), rom_dir); - }); - - let weak_app = app.as_weak(); - let write_sender = netplay_write_sender.clone(); - let read_sender = netplay_read_sender.clone(); - app.on_netplay_close(move || { - weak_app - .upgrade_in_event_loop(move |handle| { - handle.set_show_netplay_wait_session(false); - handle.set_show_netplay_create_session(false); - handle.set_show_netplay_join_session(false); - handle.invoke_clear_netplay_data(); - handle.invoke_close_message(); - }) - .unwrap(); - let _ = write_sender.send(None); // close current websocket if any - let _ = read_sender.send(None); // close current receiver if any - let _ = close_ping_tx.send(()); // close ping - }); - - app.on_netplay_discord_button_clicked(move || { - open_uri("https://discord.gg/JyW6ZgBUyS"); - }); - app.on_netplay_feedback_button_clicked(move || { - open_uri("https://github.com/gopher64/gopher64/discussions/453"); - }); + setup_callbacks( + app, + &netplay_write_sender, + &netplay_read_receiver, + &netplay_read_sender, + &netplay_write_receiver, + &close_ping_tx, + &close_ping_rx, + ); } From 4929f2cc51b2b2c27873ff7624ae07c1556b0225 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 15 Jun 2026 15:02:29 +0200 Subject: [PATCH 1047/1117] remove highest ping (#1081) --- src/ui/netplay.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 543638a..cd54b7b 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -654,6 +654,7 @@ fn update_ping( if pings.len() > message.num_of_peers * 4 { // once we have enough samples, average the 3 highest values pings.sort_by(f64::total_cmp); + pings.pop(); // Remove highest value to avoid outliers let ping_avg = pings.iter().rev().take(3).sum::() / 3.0; pings.clear(); weak_app From 45963aeea5541ea99a442fa27768ac2201ef1519 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 15 Jun 2026 17:29:51 +0200 Subject: [PATCH 1048/1117] Fix ping recommendation (#1082) * don't block tokio * more * more * more * more * more --- src/device/vi.rs | 1 + src/netplay.rs | 3 +++ src/savestates.rs | 1 + src/ui/gui/netplay_wait.slint | 2 +- src/ui/netplay.rs | 6 ++++-- 5 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index fdf8144..6596ca8 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -221,6 +221,7 @@ fn speed_limiter(device: &mut device::Device) { if now < deadline { let dur = deadline - now; spin_sleep::sleep(dur); + if dur < device.speed_limiter.min_wait_time { device.speed_limiter.min_wait_time = dur; } diff --git a/src/netplay.rs b/src/netplay.rs index c72d21c..ec84955 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -294,6 +294,9 @@ pub fn process_requests( } else { // unsafe { sdl3_sys::events::SDL_PumpEvents() }; // so the screen doesn't freeze process_netplay(device); + if device.netplay.as_ref().unwrap().requests.is_empty() { + std::thread::sleep(std::time::Duration::from_millis(1)); + } } } } diff --git a/src/savestates.rs b/src/savestates.rs index 6664364..87e4de4 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -237,6 +237,7 @@ pub fn load_savestate(device: &mut device::Device, rewind: bool, rewind_frame: O if now.elapsed() > timeout { break None; } + std::thread::sleep(std::time::Duration::from_millis(1)); } } else if let Ok(mut pool) = device.savestate.rewind_pool.lock() && let Some((_key, state)) = pool.pop_last() diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint index 33bac27..73b1c6b 100644 --- a/src/ui/gui/netplay_wait.slint +++ b/src/ui/gui/netplay_wait.slint @@ -105,7 +105,7 @@ export component NetplayWait inherits Page { SpinBox { minimum: 0; - maximum: 16; + maximum: 32; value: NetplayWaitData.input_delay; enabled: NetplayWaitData.recommended_delay != 0; edited => { diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index cd54b7b..925686f 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -649,7 +649,9 @@ fn update_ping( .duration_since(std::time::UNIX_EPOCH) .unwrap() .as_millis(); - let ping = (now - message.timestamp) as f64 / 2.0; // calculate one-way latency + // for lockstep, we need to calculate the two-way latency + // for rollback, this would be the one-way latency (divide by 2) + let ping = (now - message.timestamp) as f64; pings.push(ping); if pings.len() > message.num_of_peers * 4 { // once we have enough samples, average the 3 highest values @@ -666,7 +668,7 @@ fn update_ping( }; let latency_frames = (ping_avg / (1000.0 / refresh_rate)).ceil() as i32; let recommendation = - (latency_frames + 1).min(16); + (latency_frames + 1).min(32); if handle.get_netplay_recommended_delay() == 0 { handle.set_netplay_input_delay(recommendation); From 2ca317d742ac00e75a6f1d30401fe39c585876fb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 15 Jun 2026 17:56:53 +0200 Subject: [PATCH 1049/1117] put rec back (#1083) --- src/ui/netplay.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 925686f..92cc604 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -649,9 +649,7 @@ fn update_ping( .duration_since(std::time::UNIX_EPOCH) .unwrap() .as_millis(); - // for lockstep, we need to calculate the two-way latency - // for rollback, this would be the one-way latency (divide by 2) - let ping = (now - message.timestamp) as f64; + let ping = (now - message.timestamp) as f64 / 2.0; pings.push(ping); if pings.len() > message.num_of_peers * 4 { // once we have enough samples, average the 3 highest values From 19142a30c669a47240f2a2c222e578814904f475 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 15 Jun 2026 19:44:20 +0200 Subject: [PATCH 1050/1117] use unbounded channel (#1084) * use unbounded channel * more --- src/device/cart/sc64.rs | 13 +--- src/device/vi.rs | 4 +- src/netplay.rs | 8 +- src/ui.rs | 16 ++-- src/ui/usb.rs | 157 ++++++++++++++++++++-------------------- src/ui/vru.rs | 4 +- 6 files changed, 97 insertions(+), 105 deletions(-) diff --git a/src/device/cart/sc64.rs b/src/device/cart/sc64.rs index 9281dd9..7603f3c 100644 --- a/src/device/cart/sc64.rs +++ b/src/device/cart/sc64.rs @@ -219,16 +219,9 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u data.data_size & 0xFFFFFF; // length device.cart.sc64.usb_buffer = data.data; // store the data to be read } - Err(err) => { - match err { - tokio::sync::broadcast::error::TryRecvError::Lagged(_) => { - panic!("cart_rx lagged: {err}"); - } - _ => { - device.cart.sc64.regs[SC64_DATA0_REG] = 0; // read_status/type - device.cart.sc64.regs[SC64_DATA1_REG] = 0; // length - } - } + Err(_err) => { + device.cart.sc64.regs[SC64_DATA0_REG] = 0; // read_status/type + device.cart.sc64.regs[SC64_DATA1_REG] = 0; // length } } } else { diff --git a/src/device/vi.rs b/src/device/vi.rs index 6596ca8..bc7a36b 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -104,7 +104,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u savestates::process_savestates(device); } if !netplay::in_rollback(device.netplay.as_ref()) { - let _ = device.ui.video.fps_tx.as_ref().unwrap().try_send(true); + let _ = device.ui.video.fps_tx.as_ref().unwrap().send(true); } } } @@ -140,7 +140,7 @@ pub fn update_screen(device: &mut device::Device) { if !netplay::in_rollback(device.netplay.as_ref()) { ui::video::update_screen(); device.speed_limiter.frame_counter += 1; - let _ = device.ui.video.vis_tx.as_ref().unwrap().try_send(true); + let _ = device.ui.video.vis_tx.as_ref().unwrap().send(true); } if device.netplay.is_some() { diff --git a/src/netplay.rs b/src/netplay.rs index ec84955..f379ae9 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -20,14 +20,14 @@ impl ggrs::Config for GgrsConfig { pub struct MatchboxChannel { channel: matchbox_socket::WebRtcChannel, - disconnected_peers: tokio::sync::mpsc::Sender, + disconnected_peers: tokio::sync::mpsc::UnboundedSender, } impl ggrs::NonBlockingSocket for MatchboxChannel { fn send_to(&mut self, msg: &ggrs::Message, addr: &matchbox_socket::PeerId) { let encoded = postcard::to_stdvec(msg).expect("serialization failed"); if self.channel.try_send(encoded.into(), *addr).is_err() { - self.disconnected_peers.try_send(*addr).unwrap(); + self.disconnected_peers.send(*addr).unwrap(); } } @@ -63,7 +63,7 @@ pub struct Netplay { pub inputs: Vec<(ui::input::InputData, ggrs::InputStatus)>, pub requests: std::collections::VecDeque>, pub incoming_message: Vec, - pub disconnected_peers: tokio::sync::mpsc::Receiver, + pub disconnected_peers: tokio::sync::mpsc::UnboundedReceiver, pub ice_config_path: std::path::PathBuf, } @@ -386,7 +386,7 @@ pub fn init( } }); - let (disconnected_peers_tx, disconnected_peers_rx) = tokio::sync::mpsc::channel(100); + let (disconnected_peers_tx, disconnected_peers_rx) = tokio::sync::mpsc::unbounded_channel(); let matchbox_channel = MatchboxChannel { channel: socket.take_channel(0).unwrap(), disconnected_peers: disconnected_peers_tx, diff --git a/src/ui.rs b/src/ui.rs index ede5ef0..fdb8433 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -68,10 +68,10 @@ pub struct Storage { pub struct Video { pub window: *mut sdl3_sys::video::SDL_Window, pub fullscreen: bool, - pub fps_tx: Option>, - pub fps_rx: Option>, - pub vis_tx: Option>, - pub vis_rx: Option>, + pub fps_tx: Option>, + pub fps_rx: Option>, + pub vis_tx: Option>, + pub vis_rx: Option>, } unsafe impl Send for Video {} @@ -79,8 +79,8 @@ unsafe impl Sync for Video {} #[derive(Default)] pub struct Usb { - pub usb_tx: Option>, - pub cart_rx: Option>, + pub usb_tx: Option>, + pub cart_rx: Option>, } #[derive(Clone)] @@ -191,8 +191,8 @@ impl Ui { pub fn new() -> Ui { let dirs = get_dirs(); - let (fps_tx, fps_rx) = tokio::sync::mpsc::channel(1000); - let (vis_tx, vis_rx) = tokio::sync::mpsc::channel(1000); + let (fps_tx, fps_rx) = tokio::sync::mpsc::unbounded_channel(); + let (vis_tx, vis_rx) = tokio::sync::mpsc::unbounded_channel(); Ui { input: Input { last_polled: 0, diff --git a/src/ui/usb.rs b/src/ui/usb.rs index 352a622..4f2b8e9 100644 --- a/src/ui/usb.rs +++ b/src/ui/usb.rs @@ -11,7 +11,7 @@ pub struct UsbData { pub data_size: u32, } -fn respond_to_handshake(usb_tx: &tokio::sync::broadcast::Sender, data: Vec) { +fn respond_to_handshake(usb_tx: &tokio::sync::mpsc::UnboundedSender, data: Vec) { if let Ok(data) = String::from_utf8(data) && data == "N64" { @@ -29,98 +29,98 @@ fn respond_to_handshake(usb_tx: &tokio::sync::broadcast::Sender, data: async fn handle_connection( conn: tokio::net::TcpStream, mut shutdown_rx: tokio::sync::watch::Receiver<()>, - mut usb_rx: tokio::sync::broadcast::Receiver, - usb_tx: tokio::sync::broadcast::Sender, - cart_tx: tokio::sync::broadcast::Sender, + usb_rx: &mut tokio::sync::mpsc::UnboundedReceiver, + usb_tx: tokio::sync::mpsc::UnboundedSender, + cart_tx: tokio::sync::mpsc::UnboundedSender, ) { let (mut incoming, mut outgoing) = conn.into_split(); let mut shutdown_rx_clone = shutdown_rx.clone(); + + while usb_rx.try_recv().is_ok() {} // drain stale USB messages + tokio::spawn(async move { + let mut incoming_buffer = vec![0u8; 4096]; + let mut data_type: Option = None; + let mut data_size: Option = None; + let mut usb_buffer: Vec = vec![]; loop { tokio::select! { - data = usb_rx.recv() => { - match data { - Ok(data) => { - let mut output: Vec = vec![]; - output.extend_from_slice(&data.data_type.to_be_bytes()); - output.extend_from_slice(&data.data_size.to_be_bytes()); - output.extend_from_slice(&data.data); - if outgoing.write_all(&output).await.is_err() { - break; + result = incoming.read(&mut incoming_buffer) => { + match result { + Ok(0) => { + break; + } + Ok(n) => { + usb_buffer.extend_from_slice(&incoming_buffer[0..n]); + if data_type.is_none() { + if usb_buffer.len() < 4 { + continue; + } else { + data_type = Some(u32::from_be_bytes(usb_buffer[0..4].try_into().unwrap())); + usb_buffer.drain(0..4); + } + } + if data_type.is_some() && data_size.is_none() { + if usb_buffer.len() < 4 { + continue; + } else { + data_size = Some(u32::from_be_bytes(usb_buffer[0..4].try_into().unwrap())); + usb_buffer.drain(0..4); + } + } + if let Some(d_type) = data_type && let Some(d_size) = data_size { + let length = d_size as usize; + if usb_buffer.len() >= length { + let usb_data = UsbData { + data: usb_buffer[0..length].to_vec(), + data_type: d_type, + data_size: d_size, + }; + usb_buffer.drain(0..length); + if usb_data.data_type == DATATYPE_TCPTEST { + respond_to_handshake(&usb_tx,usb_data.data); + } else if usb_data.data_type == DATATYPE_ROMUPLOAD { + panic!("ROM upload not supported"); + } else { + cart_tx.send(usb_data).unwrap(); + } + data_type = None; + data_size = None; + } } } - Err(tokio::sync::broadcast::error::RecvError::Lagged(_)) => { - panic!("usb_rx lagged"); - } - Err(tokio::sync::broadcast::error::RecvError::Closed) => { - break; + Err(_e) => { + break; } } } - _ = shutdown_rx_clone.changed() => { + _ = shutdown_rx.changed() => { break; } } } }); - let mut incoming_buffer = vec![0u8; 4096]; - let mut data_type: Option = None; - let mut data_size: Option = None; - let mut usb_buffer: Vec = vec![]; loop { tokio::select! { - result = incoming.read(&mut incoming_buffer) => { - match result { - Ok(0) => { - break; - } - Ok(n) => { - usb_buffer.extend_from_slice(&incoming_buffer[0..n]); - if data_type.is_none() { - if usb_buffer.len() < 4 { - continue; - } else { - data_type = Some(u32::from_be_bytes(usb_buffer[0..4].try_into().unwrap())); - usb_buffer.drain(0..4); - } - } - if data_type.is_some() && data_size.is_none() { - if usb_buffer.len() < 4 { - continue; - } else { - data_size = Some(u32::from_be_bytes(usb_buffer[0..4].try_into().unwrap())); - usb_buffer.drain(0..4); - } - } - if let Some(d_type) = data_type && let Some(d_size) = data_size { - let length = d_size as usize; - if usb_buffer.len() >= length { - let usb_data = UsbData { - data: usb_buffer[0..length].to_vec(), - data_type: d_type, - data_size: d_size, - }; - usb_buffer.drain(0..length); - if usb_data.data_type == DATATYPE_TCPTEST { - respond_to_handshake(&usb_tx,usb_data.data); - } else if usb_data.data_type == DATATYPE_ROMUPLOAD { - panic!("ROM upload not supported"); - } else { - cart_tx.send(usb_data).unwrap(); - } - data_type = None; - data_size = None; - } + data = usb_rx.recv() => { + match data { + Some(data) => { + let mut output: Vec = vec![]; + output.extend_from_slice(&data.data_type.to_be_bytes()); + output.extend_from_slice(&data.data_size.to_be_bytes()); + output.extend_from_slice(&data.data); + if outgoing.write_all(&output).await.is_err() { + break; } } - Err(_e) => { - break; + None => { + break; } } } - _ = shutdown_rx.changed() => { + _ = shutdown_rx_clone.changed() => { break; } } @@ -133,24 +133,23 @@ pub fn init() -> ( ui::Usb, ) { let (shutdown_tx, mut shutdown_rx) = tokio::sync::watch::channel(()); - let (usb_tx, usb_rx): ( - tokio::sync::broadcast::Sender, - tokio::sync::broadcast::Receiver, - ) = tokio::sync::broadcast::channel(1024); + let (usb_tx, mut usb_rx): ( + tokio::sync::mpsc::UnboundedSender, + tokio::sync::mpsc::UnboundedReceiver, + ) = tokio::sync::mpsc::unbounded_channel(); let (cart_tx, cart_rx): ( - tokio::sync::broadcast::Sender, - tokio::sync::broadcast::Receiver, - ) = tokio::sync::broadcast::channel(1024); + tokio::sync::mpsc::UnboundedSender, + tokio::sync::mpsc::UnboundedReceiver, + ) = tokio::sync::mpsc::unbounded_channel(); let usb_tx_clone = usb_tx.clone(); - let cart_rx_clone = cart_rx.resubscribe(); let handle = tokio::spawn(async move { if let Ok(listener) = tokio::net::TcpListener::bind("localhost:48646").await { loop { tokio::select! { res = listener.accept() => { if let Ok((c,_)) = res { - handle_connection(c,shutdown_rx.clone(),usb_rx.resubscribe(),usb_tx.clone(),cart_tx.clone()).await; + handle_connection(c,shutdown_rx.clone(),&mut usb_rx,usb_tx.clone(),cart_tx.clone()).await; } else { break; } @@ -169,7 +168,7 @@ pub fn init() -> ( Some(handle), ui::Usb { usb_tx: Some(usb_tx_clone), - cart_rx: Some(cart_rx_clone), + cart_rx: Some(cart_rx), }, ) } @@ -193,6 +192,6 @@ pub fn close( } } -pub fn send_to_usb(usb_tx: &tokio::sync::broadcast::Sender, buffer: UsbData) { +pub fn send_to_usb(usb_tx: &tokio::sync::mpsc::UnboundedSender, buffer: UsbData) { usb_tx.send(buffer).unwrap(); } diff --git a/src/ui/vru.rs b/src/ui/vru.rs index 6fcf61b..878063d 100644 --- a/src/ui/vru.rs +++ b/src/ui/vru.rs @@ -7,13 +7,13 @@ pub fn prompt_for_match(words: &[String], frame_time: f64) -> u16 { dedup_words.sort(); dedup_words.dedup(); - let (tx, mut rx) = tokio::sync::mpsc::channel(1); + let (tx, mut rx) = tokio::sync::mpsc::unbounded_channel(); let vru_dialog = gui::VruDialog::new().unwrap(); let vru_dialog_weak = vru_dialog.as_weak(); vru_dialog.on_vru_button_clicked(move |chosen_word| { - tx.try_send(chosen_word.to_string()).unwrap(); + tx.send(chosen_word.to_string()).unwrap(); vru_dialog_weak.unwrap().hide().unwrap(); }); From c290e60af1f4e94f1b83aa3539a6dca09169e2c5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 16 Jun 2026 11:33:27 +0200 Subject: [PATCH 1051/1117] put tokio runtime in dedicated thread (#1086) * put tokio runtime in dedicated thread * more * more * more * more --- Cargo.toml | 2 +- src/lib.rs | 24 +++++++++++++++++++----- src/main.rs | 10 +++++++--- src/retroachievements.rs | 5 ++--- src/ui/android.rs | 9 +++++++-- 5 files changed, 36 insertions(+), 14 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 4d6a18e..1a752bd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde-big-array = "0.5" sha2 = "0.11" -tokio = {version = "1.46", features = ["rt-multi-thread", "macros", "fs", "process"] } +tokio = {version = "1.46", features = ["rt-multi-thread", "fs", "process"] } spin_sleep = "1.3" encoding_rs = "0.8" mimalloc = "0.1" diff --git a/src/lib.rs b/src/lib.rs index a361262..93056ef 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -104,6 +104,19 @@ fn set_app_id() { } } +pub fn create_runtime() -> (tokio::sync::oneshot::Sender<()>, tokio::runtime::Handle) { + let (tx, rx) = std::sync::mpsc::channel(); + let (close_tx, close_rx) = tokio::sync::oneshot::channel::<()>(); + + std::thread::spawn(move || { + let rt = tokio::runtime::Runtime::new().expect("Failed to build runtime"); + tx.send(rt.handle().clone()).unwrap(); + rt.block_on(close_rx).unwrap(); + }); + + (close_tx, rx.recv().unwrap()) +} + pub fn run(args: Args, arg_count: usize) -> std::io::Result<()> { let dirs = ui::get_dirs(); @@ -213,9 +226,7 @@ pub fn run(args: Args, arg_count: usize) -> std::io::Result<()> { tx.send(false).unwrap(); } - tokio::task::block_in_place(move || { - rx.blocking_recv().unwrap(); - }); + rx.blocking_recv().unwrap(); ra_config } else { @@ -334,8 +345,10 @@ pub fn run(args: Args, arg_count: usize) -> std::io::Result<()> { #[cfg(target_os = "android")] #[unsafe(no_mangle)] -#[tokio::main] -async fn android_main(app: slint::android::AndroidApp) { +fn android_main(app: slint::android::AndroidApp) { + let (close_tx, handle) = create_runtime(); + let _guard = handle.enter(); + slint::android::init_with_event_listener(app.clone(), move |event| match event { slint::android::android_activity::PollEvent::Main(main_event) => match main_event { slint::android::android_activity::MainEvent::TerminateWindow { .. } => { @@ -368,6 +381,7 @@ async fn android_main(app: slint::android::AndroidApp) { std::fs::create_dir_all(dirs.data_dir.join("states")).unwrap(); ui::gui::app_window(&app_window, true); + close_tx.send(()).unwrap(); *android::WEAK_SLINT_WINDOW.lock().unwrap() = None; *android::ANDROID_APP.lock().unwrap() = None; } diff --git a/src/main.rs b/src/main.rs index 3a3e522..42f400d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,8 +5,12 @@ static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; use clap::Parser; -#[tokio::main] -async fn main() -> std::io::Result<()> { +fn main() -> std::io::Result<()> { + let (close_tx, handle) = gopher64::create_runtime(); + let _guard = handle.enter(); + let args = gopher64::Args::parse(); - gopher64::run(args, std::env::args().count()) + let result = gopher64::run(args, std::env::args().count()); + close_tx.send(()).unwrap(); + result } diff --git a/src/retroachievements.rs b/src/retroachievements.rs index ee81cbf..5186b28 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -150,9 +150,8 @@ pub fn load_game( let tx_ptr = Box::into_raw(Box::new(tx)) as *mut std::ffi::c_void; ra_load_game(rom.as_ptr(), rom_size, tx_ptr); }; - tokio::task::block_in_place(move || { - rx.blocking_recv().unwrap(); - }); + + rx.blocking_recv().unwrap(); let mut c_title = std::ptr::null(); let mut c_image_url = std::ptr::null(); diff --git a/src/ui/android.rs b/src/ui/android.rs index e16803e..d0efa29 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -1,4 +1,5 @@ use crate::Args; +use crate::create_runtime; use crate::run; use crate::ui; use clap::Parser; @@ -158,17 +159,21 @@ fn argv_to_strings(argc: std::ffi::c_int, argv: *mut *mut std::ffi::c_char) -> V } #[unsafe(no_mangle)] -#[tokio::main] -pub async extern "C" fn gopher64_sdl_main( +pub extern "C" fn gopher64_sdl_main( argc: std::ffi::c_int, argv: *mut *mut std::ffi::c_char, ) -> std::ffi::c_int { + let (close_tx, handle) = create_runtime(); + let _guard = handle.enter(); + let raw = argv_to_strings(argc, argv); let args = Args::try_parse_from(raw).unwrap(); if let Err(err) = run(args, argc as usize) { + close_tx.send(()).unwrap(); eprintln!("Error running game: {err:?}"); return 1; } + close_tx.send(()).unwrap(); 0 } From c261a746a326c9020c592fe614506912919719ed Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 16 Jun 2026 12:43:50 +0200 Subject: [PATCH 1052/1117] enable rollback (#1087) * enable rollback * more --- data/translations/de/LC_MESSAGES/gopher64.po | 16 +++++++------- data/translations/es/LC_MESSAGES/gopher64.po | 22 +++++++++---------- data/translations/fr/LC_MESSAGES/gopher64.po | 20 ++++++++--------- data/translations/gopher64.pot | 16 +++++++------- data/translations/ja/LC_MESSAGES/gopher64.po | 16 +++++++------- data/translations/nl/LC_MESSAGES/gopher64.po | 16 +++++++------- .../pt_BR/LC_MESSAGES/gopher64.po | 20 ++++++++--------- data/translations/ru/LC_MESSAGES/gopher64.po | 16 +++++++------- src/netplay.rs | 2 +- src/ui/gui/netplay_wait.slint | 4 ++-- src/ui/netplay.rs | 2 +- 11 files changed, 75 insertions(+), 75 deletions(-) diff --git a/data/translations/de/LC_MESSAGES/gopher64.po b/data/translations/de/LC_MESSAGES/gopher64.po index 2c44eca..ee30320 100644 --- a/data/translations/de/LC_MESSAGES/gopher64.po +++ b/data/translations/de/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-13 07:48+0000\n" +"POT-Creation-Date: 2026-06-16 10:35+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: German\n" @@ -240,7 +240,7 @@ msgctxt "NetplayCreate" msgid "Create Session" msgstr "Sitzung erstellen" -#: src/ui/gui/netplay_create.slint:105 +#: src/ui/gui/netplay_create.slint:107 msgctxt "NetplayCreate" msgid "Cancel" msgstr "Abbrechen" @@ -393,11 +393,11 @@ msgstr "Nachricht senden" #: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "" -"Setting the input delay too low will cause the game to lag.\n" +"Setting the input delay too low will cause frequent rollbacks.\n" "You can lower the input delay in-game by pressing Alt+[ and raise it with " "Alt+]." msgstr "" -"Eine zu niedrige Eingabeverzögerung führt zu Ruckeln im Spiel.\n" +"Eine zu niedrige Eingabeverzögerung führt zu häufigen Rollbacks.\n" "Sie können die Eingabeverzögerung im Spiel mit Alt+[ verringern und mit " "Alt+] erhöhen." @@ -406,22 +406,22 @@ msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Lokale Eingabeverzögerung:" -#: src/ui/gui/netplay_wait.slint:117 +#: src/ui/gui/netplay_wait.slint:118 msgctxt "NetplayWait" msgid "Recommended: " msgstr "Empfohlen: " -#: src/ui/gui/netplay_wait.slint:126 +#: src/ui/gui/netplay_wait.slint:127 msgctxt "NetplayWait" msgid "Start Game" msgstr "Spiel starten" -#: src/ui/gui/netplay_wait.slint:126 +#: src/ui/gui/netplay_wait.slint:127 msgctxt "NetplayWait" msgid "Waiting for P2P mesh " msgstr "Warten auf P2P-Mesh " -#: src/ui/gui/netplay_wait.slint:134 +#: src/ui/gui/netplay_wait.slint:135 msgctxt "NetplayWait" msgid "Cancel" msgstr "Abbrechen" diff --git a/data/translations/es/LC_MESSAGES/gopher64.po b/data/translations/es/LC_MESSAGES/gopher64.po index 39bdfc0..88f284f 100644 --- a/data/translations/es/LC_MESSAGES/gopher64.po +++ b/data/translations/es/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-13 07:48+0000\n" +"POT-Creation-Date: 2026-06-16 10:35+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: Gemini\n" "Language-Team: Spanish (Spain)\n" @@ -240,7 +240,7 @@ msgctxt "NetplayCreate" msgid "Create Session" msgstr "Crear sesión" -#: src/ui/gui/netplay_create.slint:105 +#: src/ui/gui/netplay_create.slint:107 msgctxt "NetplayCreate" msgid "Cancel" msgstr "Cancelar" @@ -393,36 +393,36 @@ msgstr "Enviar mensaje" #: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "" -"Setting the input delay too low will cause the game to lag.\n" +"Setting the input delay too low will cause frequent rollbacks.\n" "You can lower the input delay in-game by pressing Alt+[ and raise it with " "Alt+]." msgstr "" -"Configurar un retardo de entrada demasiado bajo hará que el juego se " -"ralentice.\n" -"Puedes reducir el retardo de entrada en el juego pulsando Alt+[ y " -"aumentarlo con Alt+]." +"Configurar un retardo de entrada demasiado bajo provocará rollbacks " +"frecuentes.\n" +"Puedes reducir el retardo de entrada en el juego pulsando Alt+[ y aumentarlo " +"con Alt+]." #: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Retardo de entrada local:" -#: src/ui/gui/netplay_wait.slint:117 +#: src/ui/gui/netplay_wait.slint:118 msgctxt "NetplayWait" msgid "Recommended: " msgstr "Recomendado: " -#: src/ui/gui/netplay_wait.slint:126 +#: src/ui/gui/netplay_wait.slint:127 msgctxt "NetplayWait" msgid "Start Game" msgstr "Iniciar juego" -#: src/ui/gui/netplay_wait.slint:126 +#: src/ui/gui/netplay_wait.slint:127 msgctxt "NetplayWait" msgid "Waiting for P2P mesh " msgstr "Esperando malla P2P " -#: src/ui/gui/netplay_wait.slint:134 +#: src/ui/gui/netplay_wait.slint:135 msgctxt "NetplayWait" msgid "Cancel" msgstr "Cancelar" diff --git a/data/translations/fr/LC_MESSAGES/gopher64.po b/data/translations/fr/LC_MESSAGES/gopher64.po index 191b08e..bbf5625 100644 --- a/data/translations/fr/LC_MESSAGES/gopher64.po +++ b/data/translations/fr/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-13 07:48+0000\n" +"POT-Creation-Date: 2026-06-16 10:35+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: French (France)\n" @@ -240,7 +240,7 @@ msgctxt "NetplayCreate" msgid "Create Session" msgstr "Créer la session" -#: src/ui/gui/netplay_create.slint:105 +#: src/ui/gui/netplay_create.slint:107 msgctxt "NetplayCreate" msgid "Cancel" msgstr "Annuler" @@ -394,35 +394,35 @@ msgstr "Envoyer" #: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "" -"Setting the input delay too low will cause the game to lag.\n" +"Setting the input delay too low will cause frequent rollbacks.\n" "You can lower the input delay in-game by pressing Alt+[ and raise it with " "Alt+]." msgstr "" -"Régler le délai d'entrée trop bas provoquera des ralentissements.\n" -"Vous pouvez diminuer le délai d'entrée en jeu avec Alt+[ et l'augmenter " -"avec Alt+]." +"Régler le délai d'entrée trop bas provoquera des rollbacks fréquents.\n" +"Vous pouvez diminuer le délai d'entrée en jeu avec Alt+[ et l'augmenter avec " +"Alt+]." #: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Délai d'entrée local :" -#: src/ui/gui/netplay_wait.slint:117 +#: src/ui/gui/netplay_wait.slint:118 msgctxt "NetplayWait" msgid "Recommended: " msgstr "Recommandé : " -#: src/ui/gui/netplay_wait.slint:126 +#: src/ui/gui/netplay_wait.slint:127 msgctxt "NetplayWait" msgid "Start Game" msgstr "Lancer la partie" -#: src/ui/gui/netplay_wait.slint:126 +#: src/ui/gui/netplay_wait.slint:127 msgctxt "NetplayWait" msgid "Waiting for P2P mesh " msgstr "En attente du maillage P2P " -#: src/ui/gui/netplay_wait.slint:134 +#: src/ui/gui/netplay_wait.slint:135 msgctxt "NetplayWait" msgid "Cancel" msgstr "Annuler" diff --git a/data/translations/gopher64.pot b/data/translations/gopher64.pot index bc0d732..0774bc4 100644 --- a/data/translations/gopher64.pot +++ b/data/translations/gopher64.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-06-13 07:48+0000\n" +"POT-Creation-Date: 2026-06-16 10:37+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -238,7 +238,7 @@ msgctxt "NetplayCreate" msgid "Create Session" msgstr "" -#: src/ui/gui/netplay_create.slint:105 +#: src/ui/gui/netplay_create.slint:107 msgctxt "NetplayCreate" msgid "Cancel" msgstr "" @@ -391,8 +391,8 @@ msgstr "" #: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "" -"Setting the input delay too low will cause the game to lag.\nYou can lower " -"the input delay in-game by pressing Alt+[ and raise it with Alt+]." +"Setting the input delay too low will cause frequent rollbacks.\nYou can " +"lower the input delay in-game by pressing Alt+[ and raise it with Alt+]." msgstr "" #: src/ui/gui/netplay_wait.slint:101 @@ -400,22 +400,22 @@ msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "" -#: src/ui/gui/netplay_wait.slint:117 +#: src/ui/gui/netplay_wait.slint:118 msgctxt "NetplayWait" msgid "Recommended: " msgstr "" -#: src/ui/gui/netplay_wait.slint:126 +#: src/ui/gui/netplay_wait.slint:127 msgctxt "NetplayWait" msgid "Start Game" msgstr "" -#: src/ui/gui/netplay_wait.slint:126 +#: src/ui/gui/netplay_wait.slint:127 msgctxt "NetplayWait" msgid "Waiting for P2P mesh " msgstr "" -#: src/ui/gui/netplay_wait.slint:134 +#: src/ui/gui/netplay_wait.slint:135 msgctxt "NetplayWait" msgid "Cancel" msgstr "" diff --git a/data/translations/ja/LC_MESSAGES/gopher64.po b/data/translations/ja/LC_MESSAGES/gopher64.po index 8c08f38..d3af8e0 100644 --- a/data/translations/ja/LC_MESSAGES/gopher64.po +++ b/data/translations/ja/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-13 07:48+0000\n" +"POT-Creation-Date: 2026-06-16 10:35+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Japanese\n" @@ -238,7 +238,7 @@ msgctxt "NetplayCreate" msgid "Create Session" msgstr "セッションを作成" -#: src/ui/gui/netplay_create.slint:105 +#: src/ui/gui/netplay_create.slint:107 msgctxt "NetplayCreate" msgid "Cancel" msgstr "キャンセル" @@ -391,11 +391,11 @@ msgstr "送信" #: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "" -"Setting the input delay too low will cause the game to lag.\n" +"Setting the input delay too low will cause frequent rollbacks.\n" "You can lower the input delay in-game by pressing Alt+[ and raise it with " "Alt+]." msgstr "" -"入力遅延を低く設定しすぎるとゲームが遅延します。\n" +"入力遅延を低く設定しすぎると頻繁にロールバックが発生します。\n" "Alt+[ でゲーム内の入力遅延を下げ、Alt+] で上げることができます。" #: src/ui/gui/netplay_wait.slint:101 @@ -403,22 +403,22 @@ msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "ローカル入力遅延:" -#: src/ui/gui/netplay_wait.slint:117 +#: src/ui/gui/netplay_wait.slint:118 msgctxt "NetplayWait" msgid "Recommended: " msgstr "推奨: " -#: src/ui/gui/netplay_wait.slint:126 +#: src/ui/gui/netplay_wait.slint:127 msgctxt "NetplayWait" msgid "Start Game" msgstr "ゲーム開始" -#: src/ui/gui/netplay_wait.slint:126 +#: src/ui/gui/netplay_wait.slint:127 msgctxt "NetplayWait" msgid "Waiting for P2P mesh " msgstr "P2Pメッシュ接続待機中 " -#: src/ui/gui/netplay_wait.slint:134 +#: src/ui/gui/netplay_wait.slint:135 msgctxt "NetplayWait" msgid "Cancel" msgstr "キャンセル" diff --git a/data/translations/nl/LC_MESSAGES/gopher64.po b/data/translations/nl/LC_MESSAGES/gopher64.po index 22b8e37..0556946 100644 --- a/data/translations/nl/LC_MESSAGES/gopher64.po +++ b/data/translations/nl/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-13 07:48+0000\n" +"POT-Creation-Date: 2026-06-16 10:35+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Dutch (Netherlands)\n" @@ -240,7 +240,7 @@ msgctxt "NetplayCreate" msgid "Create Session" msgstr "Sessie aanmaken" -#: src/ui/gui/netplay_create.slint:105 +#: src/ui/gui/netplay_create.slint:107 msgctxt "NetplayCreate" msgid "Cancel" msgstr "Annuleren" @@ -393,11 +393,11 @@ msgstr "Bericht verzenden" #: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "" -"Setting the input delay too low will cause the game to lag.\n" +"Setting the input delay too low will cause frequent rollbacks.\n" "You can lower the input delay in-game by pressing Alt+[ and raise it with " "Alt+]." msgstr "" -"Een te lage invoervertraging zorgt ervoor dat het spel gaat haperen.\n" +"Een te lage invoervertraging zorgt voor frequente rollbacks.\n" "Je kunt de invoervertraging in het spel verlagen met Alt+[ en verhogen met " "Alt+]." @@ -406,22 +406,22 @@ msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Lokale invoervertraging:" -#: src/ui/gui/netplay_wait.slint:117 +#: src/ui/gui/netplay_wait.slint:118 msgctxt "NetplayWait" msgid "Recommended: " msgstr "Aanbevolen: " -#: src/ui/gui/netplay_wait.slint:126 +#: src/ui/gui/netplay_wait.slint:127 msgctxt "NetplayWait" msgid "Start Game" msgstr "Spel starten" -#: src/ui/gui/netplay_wait.slint:126 +#: src/ui/gui/netplay_wait.slint:127 msgctxt "NetplayWait" msgid "Waiting for P2P mesh " msgstr "Wachten op P2P-mesh " -#: src/ui/gui/netplay_wait.slint:134 +#: src/ui/gui/netplay_wait.slint:135 msgctxt "NetplayWait" msgid "Cancel" msgstr "Annuleren" diff --git a/data/translations/pt_BR/LC_MESSAGES/gopher64.po b/data/translations/pt_BR/LC_MESSAGES/gopher64.po index 2cf2522..16d76bb 100644 --- a/data/translations/pt_BR/LC_MESSAGES/gopher64.po +++ b/data/translations/pt_BR/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-06-13 07:48+0000\n" +"POT-Creation-Date: 2026-06-16 10:35+0000\n" "PO-Revision-Date: 2026-05-11 18:11-3000\n" "Last-Translator: EDUARDO CARVALHO \n" "Language-Team: LANGUAGE \n" @@ -240,7 +240,7 @@ msgctxt "NetplayCreate" msgid "Create Session" msgstr "Criar Sessão" -#: src/ui/gui/netplay_create.slint:105 +#: src/ui/gui/netplay_create.slint:107 msgctxt "NetplayCreate" msgid "Cancel" msgstr "Cancelar" @@ -394,35 +394,35 @@ msgstr "Enviar Mensagem" #: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "" -"Setting the input delay too low will cause the game to lag.\n" +"Setting the input delay too low will cause frequent rollbacks.\n" "You can lower the input delay in-game by pressing Alt+[ and raise it with " "Alt+]." msgstr "" -"Definir o atraso de entrada muito baixo causará lag no jogo.\n" -"Você pode diminuir o atraso de entrada no jogo pressionando Alt+[ e " -"aumentá-lo com Alt+]." +"Definir o atraso de entrada muito baixo causará rollbacks frequentes.\n" +"Você pode diminuir o atraso de entrada no jogo pressionando Alt+[ e aumentá-" +"lo com Alt+]." #: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Atraso de entrada local:" -#: src/ui/gui/netplay_wait.slint:117 +#: src/ui/gui/netplay_wait.slint:118 msgctxt "NetplayWait" msgid "Recommended: " msgstr "Recomendado: " -#: src/ui/gui/netplay_wait.slint:126 +#: src/ui/gui/netplay_wait.slint:127 msgctxt "NetplayWait" msgid "Start Game" msgstr "Iniciar jogo" -#: src/ui/gui/netplay_wait.slint:126 +#: src/ui/gui/netplay_wait.slint:127 msgctxt "NetplayWait" msgid "Waiting for P2P mesh " msgstr "Aguardando malha P2P " -#: src/ui/gui/netplay_wait.slint:134 +#: src/ui/gui/netplay_wait.slint:135 msgctxt "NetplayWait" msgid "Cancel" msgstr "Cancelar" diff --git a/data/translations/ru/LC_MESSAGES/gopher64.po b/data/translations/ru/LC_MESSAGES/gopher64.po index 37aa747..b5c996b 100644 --- a/data/translations/ru/LC_MESSAGES/gopher64.po +++ b/data/translations/ru/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-13 07:48+0000\n" +"POT-Creation-Date: 2026-06-16 10:35+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Russian\n" @@ -239,7 +239,7 @@ msgctxt "NetplayCreate" msgid "Create Session" msgstr "Создать сессию" -#: src/ui/gui/netplay_create.slint:105 +#: src/ui/gui/netplay_create.slint:107 msgctxt "NetplayCreate" msgid "Cancel" msgstr "Отмена" @@ -392,11 +392,11 @@ msgstr "Отправить сообщение" #: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "" -"Setting the input delay too low will cause the game to lag.\n" +"Setting the input delay too low will cause frequent rollbacks.\n" "You can lower the input delay in-game by pressing Alt+[ and raise it with " "Alt+]." msgstr "" -"Слишком низкая задержка ввода вызовет лаги в игре.\n" +"Слишком низкая задержка ввода приведёт к частым откатам.\n" "Вы можете уменьшить задержку ввода в игре, нажав Alt+[, и увеличить её с " "помощью Alt+]." @@ -405,22 +405,22 @@ msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Локальная задержка ввода:" -#: src/ui/gui/netplay_wait.slint:117 +#: src/ui/gui/netplay_wait.slint:118 msgctxt "NetplayWait" msgid "Recommended: " msgstr "Рекомендуется: " -#: src/ui/gui/netplay_wait.slint:126 +#: src/ui/gui/netplay_wait.slint:127 msgctxt "NetplayWait" msgid "Start Game" msgstr "Начать игру" -#: src/ui/gui/netplay_wait.slint:126 +#: src/ui/gui/netplay_wait.slint:127 msgctxt "NetplayWait" msgid "Waiting for P2P mesh " msgstr "Ожидание P2P-сети " -#: src/ui/gui/netplay_wait.slint:134 +#: src/ui/gui/netplay_wait.slint:135 msgctxt "NetplayWait" msgid "Cancel" msgstr "Отмена" diff --git a/src/netplay.rs b/src/netplay.rs index f379ae9..977b8f4 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -438,7 +438,7 @@ pub fn init( .with_fps(if pal { 50 } else { 60 }) .unwrap() .with_desync_detection_mode(ggrs::DesyncDetection::On { interval: 60 }) - .with_max_prediction_window(0) + .with_max_prediction_window(16) .with_disconnect_timeout(std::time::Duration::from_secs(if cfg!(debug_assertions) { 10 } else { diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint index 73b1c6b..db2e155 100644 --- a/src/ui/gui/netplay_wait.slint +++ b/src/ui/gui/netplay_wait.slint @@ -91,7 +91,7 @@ export component NetplayWait inherits Page { } Text { - text: NetplayData.player_name == NetplayWaitData.players[0] ? @tr("Setting the input delay too low will cause the game to lag.\nYou can lower the input delay in-game by pressing Alt+[ and raise it with Alt+].") : NetplayWaitData.motd; + text: NetplayData.player_name == NetplayWaitData.players[0] ? @tr("Setting the input delay too low will cause frequent rollbacks.\nYou can lower the input delay in-game by pressing Alt+[ and raise it with Alt+].") : NetplayWaitData.motd; horizontal-alignment: center; wrap: word-wrap; } @@ -105,7 +105,7 @@ export component NetplayWait inherits Page { SpinBox { minimum: 0; - maximum: 32; + maximum: 16; value: NetplayWaitData.input_delay; enabled: NetplayWaitData.recommended_delay != 0; edited => { diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 92cc604..9aab429 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -666,7 +666,7 @@ fn update_ping( }; let latency_frames = (ping_avg / (1000.0 / refresh_rate)).ceil() as i32; let recommendation = - (latency_frames + 1).min(32); + (latency_frames + 1).min(16); if handle.get_netplay_recommended_delay() == 0 { handle.set_netplay_input_delay(recommendation); From 27e2b89fcfd090460ec6bbd97d6a850fa3f580a6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 16 Jun 2026 14:48:31 +0200 Subject: [PATCH 1053/1117] re-arrange netplay setup (#1088) * re-arrange netplay setup * more * more * more * more * more * more * more * more --- data/translations/de/LC_MESSAGES/gopher64.po | 6 ++-- data/translations/es/LC_MESSAGES/gopher64.po | 7 ++--- data/translations/fr/LC_MESSAGES/gopher64.po | 6 ++-- data/translations/gopher64.pot | 6 ++-- data/translations/ja/LC_MESSAGES/gopher64.po | 6 ++-- data/translations/nl/LC_MESSAGES/gopher64.po | 6 ++-- .../pt_BR/LC_MESSAGES/gopher64.po | 6 ++-- data/translations/ru/LC_MESSAGES/gopher64.po | 6 ++-- src/netplay.rs | 31 ++++++++++++------- src/savestates.rs | 1 - src/ui/gui/netplay_wait.slint | 4 +-- 11 files changed, 45 insertions(+), 40 deletions(-) diff --git a/data/translations/de/LC_MESSAGES/gopher64.po b/data/translations/de/LC_MESSAGES/gopher64.po index ee30320..5be58e8 100644 --- a/data/translations/de/LC_MESSAGES/gopher64.po +++ b/data/translations/de/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-16 10:35+0000\n" +"POT-Creation-Date: 2026-06-16 12:26+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: German\n" @@ -393,11 +393,11 @@ msgstr "Nachricht senden" #: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "" -"Setting the input delay too low will cause frequent rollbacks.\n" +"Setting the input delay too low will cause the game to lag.\n" "You can lower the input delay in-game by pressing Alt+[ and raise it with " "Alt+]." msgstr "" -"Eine zu niedrige Eingabeverzögerung führt zu häufigen Rollbacks.\n" +"Eine zu niedrige Eingabeverzögerung führt dazu, dass das Spiel laggt.\n" "Sie können die Eingabeverzögerung im Spiel mit Alt+[ verringern und mit " "Alt+] erhöhen." diff --git a/data/translations/es/LC_MESSAGES/gopher64.po b/data/translations/es/LC_MESSAGES/gopher64.po index 88f284f..271cea9 100644 --- a/data/translations/es/LC_MESSAGES/gopher64.po +++ b/data/translations/es/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-16 10:35+0000\n" +"POT-Creation-Date: 2026-06-16 12:26+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: Gemini\n" "Language-Team: Spanish (Spain)\n" @@ -393,12 +393,11 @@ msgstr "Enviar mensaje" #: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "" -"Setting the input delay too low will cause frequent rollbacks.\n" +"Setting the input delay too low will cause the game to lag.\n" "You can lower the input delay in-game by pressing Alt+[ and raise it with " "Alt+]." msgstr "" -"Configurar un retardo de entrada demasiado bajo provocará rollbacks " -"frecuentes.\n" +"Configurar un retardo de entrada demasiado bajo hará que el juego tenga lag.\n" "Puedes reducir el retardo de entrada en el juego pulsando Alt+[ y aumentarlo " "con Alt+]." diff --git a/data/translations/fr/LC_MESSAGES/gopher64.po b/data/translations/fr/LC_MESSAGES/gopher64.po index bbf5625..d60cfeb 100644 --- a/data/translations/fr/LC_MESSAGES/gopher64.po +++ b/data/translations/fr/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-16 10:35+0000\n" +"POT-Creation-Date: 2026-06-16 12:26+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: French (France)\n" @@ -394,11 +394,11 @@ msgstr "Envoyer" #: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "" -"Setting the input delay too low will cause frequent rollbacks.\n" +"Setting the input delay too low will cause the game to lag.\n" "You can lower the input delay in-game by pressing Alt+[ and raise it with " "Alt+]." msgstr "" -"Régler le délai d'entrée trop bas provoquera des rollbacks fréquents.\n" +"Régler un délai d'entrée trop faible fera laguer le jeu.\n" "Vous pouvez diminuer le délai d'entrée en jeu avec Alt+[ et l'augmenter avec " "Alt+]." diff --git a/data/translations/gopher64.pot b/data/translations/gopher64.pot index 0774bc4..7cc41f2 100644 --- a/data/translations/gopher64.pot +++ b/data/translations/gopher64.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-06-16 10:37+0000\n" +"POT-Creation-Date: 2026-06-16 12:26+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -391,8 +391,8 @@ msgstr "" #: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "" -"Setting the input delay too low will cause frequent rollbacks.\nYou can " -"lower the input delay in-game by pressing Alt+[ and raise it with Alt+]." +"Setting the input delay too low will cause the game to lag.\nYou can lower " +"the input delay in-game by pressing Alt+[ and raise it with Alt+]." msgstr "" #: src/ui/gui/netplay_wait.slint:101 diff --git a/data/translations/ja/LC_MESSAGES/gopher64.po b/data/translations/ja/LC_MESSAGES/gopher64.po index d3af8e0..e0cd75b 100644 --- a/data/translations/ja/LC_MESSAGES/gopher64.po +++ b/data/translations/ja/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-16 10:35+0000\n" +"POT-Creation-Date: 2026-06-16 12:26+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Japanese\n" @@ -391,11 +391,11 @@ msgstr "送信" #: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "" -"Setting the input delay too low will cause frequent rollbacks.\n" +"Setting the input delay too low will cause the game to lag.\n" "You can lower the input delay in-game by pressing Alt+[ and raise it with " "Alt+]." msgstr "" -"入力遅延を低く設定しすぎると頻繁にロールバックが発生します。\n" +"入力遅延を低く設定しすぎるとゲームがラグくなります。\n" "Alt+[ でゲーム内の入力遅延を下げ、Alt+] で上げることができます。" #: src/ui/gui/netplay_wait.slint:101 diff --git a/data/translations/nl/LC_MESSAGES/gopher64.po b/data/translations/nl/LC_MESSAGES/gopher64.po index 0556946..1eb03b6 100644 --- a/data/translations/nl/LC_MESSAGES/gopher64.po +++ b/data/translations/nl/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-16 10:35+0000\n" +"POT-Creation-Date: 2026-06-16 12:26+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Dutch (Netherlands)\n" @@ -393,11 +393,11 @@ msgstr "Bericht verzenden" #: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "" -"Setting the input delay too low will cause frequent rollbacks.\n" +"Setting the input delay too low will cause the game to lag.\n" "You can lower the input delay in-game by pressing Alt+[ and raise it with " "Alt+]." msgstr "" -"Een te lage invoervertraging zorgt voor frequente rollbacks.\n" +"Een te lage invoervertraging zorgt ervoor dat het spel gaat laggen.\n" "Je kunt de invoervertraging in het spel verlagen met Alt+[ en verhogen met " "Alt+]." diff --git a/data/translations/pt_BR/LC_MESSAGES/gopher64.po b/data/translations/pt_BR/LC_MESSAGES/gopher64.po index 16d76bb..3035f55 100644 --- a/data/translations/pt_BR/LC_MESSAGES/gopher64.po +++ b/data/translations/pt_BR/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-06-16 10:35+0000\n" +"POT-Creation-Date: 2026-06-16 12:26+0000\n" "PO-Revision-Date: 2026-05-11 18:11-3000\n" "Last-Translator: EDUARDO CARVALHO \n" "Language-Team: LANGUAGE \n" @@ -394,11 +394,11 @@ msgstr "Enviar Mensagem" #: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "" -"Setting the input delay too low will cause frequent rollbacks.\n" +"Setting the input delay too low will cause the game to lag.\n" "You can lower the input delay in-game by pressing Alt+[ and raise it with " "Alt+]." msgstr "" -"Definir o atraso de entrada muito baixo causará rollbacks frequentes.\n" +"Definir o atraso de entrada muito baixo fará o jogo apresentar lag.\n" "Você pode diminuir o atraso de entrada no jogo pressionando Alt+[ e aumentá-" "lo com Alt+]." diff --git a/data/translations/ru/LC_MESSAGES/gopher64.po b/data/translations/ru/LC_MESSAGES/gopher64.po index b5c996b..063bb43 100644 --- a/data/translations/ru/LC_MESSAGES/gopher64.po +++ b/data/translations/ru/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-16 10:35+0000\n" +"POT-Creation-Date: 2026-06-16 12:26+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Russian\n" @@ -392,11 +392,11 @@ msgstr "Отправить сообщение" #: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "" -"Setting the input delay too low will cause frequent rollbacks.\n" +"Setting the input delay too low will cause the game to lag.\n" "You can lower the input delay in-game by pressing Alt+[ and raise it with " "Alt+]." msgstr "" -"Слишком низкая задержка ввода приведёт к частым откатам.\n" +"Слишком низкая задержка ввода приведет к лагам в игре.\n" "Вы можете уменьшить задержку ввода в игре, нажав Alt+[, и увеличить её с " "помощью Alt+]." diff --git a/src/netplay.rs b/src/netplay.rs index 977b8f4..3dbf620 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -283,6 +283,7 @@ pub fn process_requests( cell.save(frame, Some(frame), Some(hash)); } ggrs::GgrsRequest::LoadGameState { cell, frame: _ } => { + eprintln!("Rollback not supported"); if let Some(frame) = cell.load() { savestates::load_savestate(device, true, Some(frame)); } @@ -294,9 +295,6 @@ pub fn process_requests( } else { // unsafe { sdl3_sys::events::SDL_PumpEvents() }; // so the screen doesn't freeze process_netplay(device); - if device.netplay.as_ref().unwrap().requests.is_empty() { - std::thread::sleep(std::time::Duration::from_millis(1)); - } } } } @@ -347,6 +345,13 @@ fn advance_frame(device: &mut device::Device) { .session .add_local_input(local_handle, local_input) .unwrap(); + + // avoid rollback + while netplay.session.current_frame() > netplay.session.confirmed_frame() + && netplay.session.confirmed_frame() != ggrs::NULL_FRAME + { + netplay.session.poll_remote_clients(); + } match netplay.session.advance_frame() { Ok(requests) => { netplay.requests.extend(requests); @@ -386,12 +391,6 @@ pub fn init( } }); - let (disconnected_peers_tx, disconnected_peers_rx) = tokio::sync::mpsc::unbounded_channel(); - let matchbox_channel = MatchboxChannel { - channel: socket.take_channel(0).unwrap(), - disconnected_peers: disconnected_peers_tx, - }; - let mut reliable_channel = socket.take_channel(1).unwrap(); let now = std::time::Instant::now(); let timeout = std::time::Duration::from_secs(30); let mut player_numbers = std::collections::BTreeMap::new(); @@ -409,8 +408,8 @@ pub fn init( .connected_peers() .collect::>(); - send_player_number(&mut reliable_channel, peers, netplay_config.player_number); - get_player_numbers(&mut reliable_channel, &mut player_numbers); + send_player_number(socket.channel_mut(1), peers, netplay_config.player_number); + get_player_numbers(socket.channel_mut(1), &mut player_numbers); if player_numbers.len() == netplay_config.number_of_players { break; } @@ -437,8 +436,9 @@ pub fn init( .with_input_delay(netplay_config.input_delay) .with_fps(if pal { 50 } else { 60 }) .unwrap() - .with_desync_detection_mode(ggrs::DesyncDetection::On { interval: 60 }) + //.with_desync_detection_mode(ggrs::DesyncDetection::On { interval: 60 }) // not compatible with sparse saving mode .with_max_prediction_window(16) + .with_sparse_saving_mode(true) // not using rollback .with_disconnect_timeout(std::time::Duration::from_secs(if cfg!(debug_assertions) { 10 } else { @@ -459,6 +459,13 @@ pub fn init( } } + let (disconnected_peers_tx, disconnected_peers_rx) = tokio::sync::mpsc::unbounded_channel(); + let matchbox_channel = MatchboxChannel { + channel: socket.take_channel(0).unwrap(), + disconnected_peers: disconnected_peers_tx, + }; + let reliable_channel = socket.take_channel(1).unwrap(); + if matchbox_channel.channel.config().max_retransmits != Some(0) || matchbox_channel.channel.config().ordered { diff --git a/src/savestates.rs b/src/savestates.rs index 87e4de4..6664364 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -237,7 +237,6 @@ pub fn load_savestate(device: &mut device::Device, rewind: bool, rewind_frame: O if now.elapsed() > timeout { break None; } - std::thread::sleep(std::time::Duration::from_millis(1)); } } else if let Ok(mut pool) = device.savestate.rewind_pool.lock() && let Some((_key, state)) = pool.pop_last() diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint index db2e155..d49b521 100644 --- a/src/ui/gui/netplay_wait.slint +++ b/src/ui/gui/netplay_wait.slint @@ -91,7 +91,7 @@ export component NetplayWait inherits Page { } Text { - text: NetplayData.player_name == NetplayWaitData.players[0] ? @tr("Setting the input delay too low will cause frequent rollbacks.\nYou can lower the input delay in-game by pressing Alt+[ and raise it with Alt+].") : NetplayWaitData.motd; + text: NetplayData.player_name == NetplayWaitData.players[0] ? @tr("Setting the input delay too low will cause the game to lag.\nYou can lower the input delay in-game by pressing Alt+[ and raise it with Alt+].") : NetplayWaitData.motd; horizontal-alignment: center; wrap: word-wrap; } @@ -104,7 +104,7 @@ export component NetplayWait inherits Page { } SpinBox { - minimum: 0; + minimum: 1; maximum: 16; value: NetplayWaitData.input_delay; enabled: NetplayWaitData.recommended_delay != 0; From be987e1434d8441c3e0e6c12a77e98cf501b31a9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 16 Jun 2026 14:58:16 +0200 Subject: [PATCH 1054/1117] don't spam errors (#1089) --- src/netplay.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index 3dbf620..03193d0 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -254,9 +254,7 @@ pub fn in_rollback(netplay: Option<&Netplay>) -> bool { fn process_disconnected_peers(netplay: &mut Netplay) { while let Ok(addr) = netplay.disconnected_peers.try_recv() { for handle in netplay.session.handles_by_address(addr) { - if let Err(e) = netplay.session.disconnect_player(handle) { - eprintln!("Error disconnecting player: {}", e); - } else { + if netplay.session.disconnect_player(handle).is_ok() { ui::video::onscreen_message( &format!("Player {} disconnected", handle + 1), ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, From 49b8024fbe72ef219c0059e35709438151243e12 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 16 Jun 2026 15:05:58 +0200 Subject: [PATCH 1055/1117] Revert translation changes (#1090) * revert translation changes * more --- data/translations/de/LC_MESSAGES/gopher64.po | 2 +- data/translations/es/LC_MESSAGES/gopher64.po | 7 ++++--- data/translations/fr/LC_MESSAGES/gopher64.po | 6 +++--- data/translations/ja/LC_MESSAGES/gopher64.po | 2 +- data/translations/nl/LC_MESSAGES/gopher64.po | 2 +- data/translations/pt_BR/LC_MESSAGES/gopher64.po | 6 +++--- src/netplay.rs | 1 - 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/data/translations/de/LC_MESSAGES/gopher64.po b/data/translations/de/LC_MESSAGES/gopher64.po index 5be58e8..4c8619e 100644 --- a/data/translations/de/LC_MESSAGES/gopher64.po +++ b/data/translations/de/LC_MESSAGES/gopher64.po @@ -397,7 +397,7 @@ msgid "" "You can lower the input delay in-game by pressing Alt+[ and raise it with " "Alt+]." msgstr "" -"Eine zu niedrige Eingabeverzögerung führt dazu, dass das Spiel laggt.\n" +"Eine zu niedrige Eingabeverzögerung führt zu Ruckeln im Spiel.\n" "Sie können die Eingabeverzögerung im Spiel mit Alt+[ verringern und mit " "Alt+] erhöhen." diff --git a/data/translations/es/LC_MESSAGES/gopher64.po b/data/translations/es/LC_MESSAGES/gopher64.po index 271cea9..4816245 100644 --- a/data/translations/es/LC_MESSAGES/gopher64.po +++ b/data/translations/es/LC_MESSAGES/gopher64.po @@ -397,9 +397,10 @@ msgid "" "You can lower the input delay in-game by pressing Alt+[ and raise it with " "Alt+]." msgstr "" -"Configurar un retardo de entrada demasiado bajo hará que el juego tenga lag.\n" -"Puedes reducir el retardo de entrada en el juego pulsando Alt+[ y aumentarlo " -"con Alt+]." +"Configurar un retardo de entrada demasiado bajo hará que el juego se " +"ralentice.\n" +"Puedes reducir el retardo de entrada en el juego pulsando Alt+[ y " +"aumentarlo con Alt+]." #: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" diff --git a/data/translations/fr/LC_MESSAGES/gopher64.po b/data/translations/fr/LC_MESSAGES/gopher64.po index d60cfeb..38c9073 100644 --- a/data/translations/fr/LC_MESSAGES/gopher64.po +++ b/data/translations/fr/LC_MESSAGES/gopher64.po @@ -398,9 +398,9 @@ msgid "" "You can lower the input delay in-game by pressing Alt+[ and raise it with " "Alt+]." msgstr "" -"Régler un délai d'entrée trop faible fera laguer le jeu.\n" -"Vous pouvez diminuer le délai d'entrée en jeu avec Alt+[ et l'augmenter avec " -"Alt+]." +"Régler le délai d'entrée trop bas provoquera des ralentissements.\n" +"Vous pouvez diminuer le délai d'entrée en jeu avec Alt+[ et l'augmenter " +"avec Alt+]." #: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" diff --git a/data/translations/ja/LC_MESSAGES/gopher64.po b/data/translations/ja/LC_MESSAGES/gopher64.po index e0cd75b..2424485 100644 --- a/data/translations/ja/LC_MESSAGES/gopher64.po +++ b/data/translations/ja/LC_MESSAGES/gopher64.po @@ -395,7 +395,7 @@ msgid "" "You can lower the input delay in-game by pressing Alt+[ and raise it with " "Alt+]." msgstr "" -"入力遅延を低く設定しすぎるとゲームがラグくなります。\n" +"入力遅延を低く設定しすぎるとゲームが遅延します。\n" "Alt+[ でゲーム内の入力遅延を下げ、Alt+] で上げることができます。" #: src/ui/gui/netplay_wait.slint:101 diff --git a/data/translations/nl/LC_MESSAGES/gopher64.po b/data/translations/nl/LC_MESSAGES/gopher64.po index 1eb03b6..473619c 100644 --- a/data/translations/nl/LC_MESSAGES/gopher64.po +++ b/data/translations/nl/LC_MESSAGES/gopher64.po @@ -397,7 +397,7 @@ msgid "" "You can lower the input delay in-game by pressing Alt+[ and raise it with " "Alt+]." msgstr "" -"Een te lage invoervertraging zorgt ervoor dat het spel gaat laggen.\n" +"Een te lage invoervertraging zorgt ervoor dat het spel gaat haperen.\n" "Je kunt de invoervertraging in het spel verlagen met Alt+[ en verhogen met " "Alt+]." diff --git a/data/translations/pt_BR/LC_MESSAGES/gopher64.po b/data/translations/pt_BR/LC_MESSAGES/gopher64.po index 3035f55..1449b0a 100644 --- a/data/translations/pt_BR/LC_MESSAGES/gopher64.po +++ b/data/translations/pt_BR/LC_MESSAGES/gopher64.po @@ -398,9 +398,9 @@ msgid "" "You can lower the input delay in-game by pressing Alt+[ and raise it with " "Alt+]." msgstr "" -"Definir o atraso de entrada muito baixo fará o jogo apresentar lag.\n" -"Você pode diminuir o atraso de entrada no jogo pressionando Alt+[ e aumentá-" -"lo com Alt+]." +"Definir o atraso de entrada muito baixo causará lag no jogo.\n" +"Você pode diminuir o atraso de entrada no jogo pressionando Alt+[ e " +"aumentá-lo com Alt+]." #: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" diff --git a/src/netplay.rs b/src/netplay.rs index 03193d0..6a376a2 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -281,7 +281,6 @@ pub fn process_requests( cell.save(frame, Some(frame), Some(hash)); } ggrs::GgrsRequest::LoadGameState { cell, frame: _ } => { - eprintln!("Rollback not supported"); if let Some(frame) = cell.load() { savestates::load_savestate(device, true, Some(frame)); } From 2b0d8e5423663569fa2efd533b8e1802be4cf530 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 16 Jun 2026 15:34:18 +0200 Subject: [PATCH 1056/1117] skip save states (#1091) * skip save states * more --- data/translations/ru/LC_MESSAGES/gopher64.po | 2 +- src/netplay.rs | 14 ++++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/data/translations/ru/LC_MESSAGES/gopher64.po b/data/translations/ru/LC_MESSAGES/gopher64.po index 063bb43..8a828f6 100644 --- a/data/translations/ru/LC_MESSAGES/gopher64.po +++ b/data/translations/ru/LC_MESSAGES/gopher64.po @@ -396,7 +396,7 @@ msgid "" "You can lower the input delay in-game by pressing Alt+[ and raise it with " "Alt+]." msgstr "" -"Слишком низкая задержка ввода приведет к лагам в игре.\n" +"Слишком низкая задержка ввода вызовет лаги в игре.\n" "Вы можете уменьшить задержку ввода в игре, нажав Alt+[, и увеличить её с " "помощью Alt+]." diff --git a/src/netplay.rs b/src/netplay.rs index 6a376a2..9972dac 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -1,5 +1,4 @@ use crate::device; -use crate::savestates; use crate::ui; use sha2::digest::Digest; @@ -271,7 +270,7 @@ pub fn process_requests( if let Some(request) = device.netplay.as_mut().unwrap().requests.pop_front() { match request { ggrs::GgrsRequest::SaveGameState { cell, frame } => { - savestates::create_savestate(device, true, Some(frame)); + //savestates::create_savestate(device, true, Some(frame)); let mut hasher = sha2::Sha256::new(); for reg in device.cpu.cop0.regs.as_ref() { @@ -280,10 +279,10 @@ pub fn process_requests( let hash = u128::from_be_bytes(hasher.finalize()[..16].try_into().unwrap()); cell.save(frame, Some(frame), Some(hash)); } - ggrs::GgrsRequest::LoadGameState { cell, frame: _ } => { - if let Some(frame) = cell.load() { - savestates::load_savestate(device, true, Some(frame)); - } + ggrs::GgrsRequest::LoadGameState { cell: _, frame: _ } => { + // if let Some(frame) = cell.load() { + // savestates::load_savestate(device, true, Some(frame)); + // } } ggrs::GgrsRequest::AdvanceFrame { inputs } => { return inputs; @@ -433,9 +432,8 @@ pub fn init( .with_input_delay(netplay_config.input_delay) .with_fps(if pal { 50 } else { 60 }) .unwrap() - //.with_desync_detection_mode(ggrs::DesyncDetection::On { interval: 60 }) // not compatible with sparse saving mode + .with_desync_detection_mode(ggrs::DesyncDetection::On { interval: 60 }) .with_max_prediction_window(16) - .with_sparse_saving_mode(true) // not using rollback .with_disconnect_timeout(std::time::Duration::from_secs(if cfg!(debug_assertions) { 10 } else { From b123ed9fa3f2938442c395b847219923926119e5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 16 Jun 2026 16:02:02 +0200 Subject: [PATCH 1057/1117] input delay cannot be less than 1 (#1092) --- src/netplay.rs | 4 ++++ src/ui/video.rs | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/netplay.rs b/src/netplay.rs index 9972dac..56e487c 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -203,6 +203,10 @@ pub fn receive_save(netplay: &mut Netplay, save_type: &str, save_data: &mut Vec< } pub fn send_input_delay(netplay: &mut Netplay, input_delay: usize) { + if input_delay < 1 { + return; + } + let message = NetplayMessage { name: "input_delay".to_string(), data: (input_delay as u64).to_be_bytes().to_vec(), diff --git a/src/ui/video.rs b/src/ui/video.rs index e397637..1de4f3c 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -247,7 +247,7 @@ pub fn check_callback(device: &mut device::Device) -> (bool, bool) { if let Some(netplay) = &mut device.netplay && netplay.player_number == 0 { - if callback.decrease_input_delay && netplay.input_delay > 0 { + if callback.decrease_input_delay { netplay::send_input_delay(netplay, netplay.input_delay - 1); } else if callback.increase_input_delay { netplay::send_input_delay(netplay, netplay.input_delay + 1); From f211eede3bcb59774950899fba402c5dd6bc249c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 16 Jun 2026 16:22:53 +0200 Subject: [PATCH 1058/1117] retry socket creation (#1093) * retry sockey creation * more * more * more * more --- src/netplay.rs | 44 ++++++++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index 56e487c..88c32e2 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -363,6 +363,16 @@ fn advance_frame(device: &mut device::Device) { } } +fn create_socket(builder: matchbox_socket::WebRtcSocketBuilder) -> matchbox_socket::WebRtcSocket { + let (socket, loop_fut) = builder.build(); + tokio::spawn(async move { + if let Err(e) = loop_fut.await { + eprintln!("WebRTC loop failed: {}", e); + } + }); + socket +} + pub fn init( device: &mut device::Device, netplay_config: &NetplayConfig, @@ -384,17 +394,11 @@ pub fn init( eprintln!("Using default ICE config"); } - let (mut socket, loop_fut) = builder.build(); - tokio::spawn(async move { - if let Err(e) = loop_fut.await { - eprintln!("WebRTC loop failed: {}", e); - } - }); + let mut socket = create_socket(builder.clone()); let now = std::time::Instant::now(); - let timeout = std::time::Duration::from_secs(30); + let socket_timeout = std::time::Duration::from_secs_f64(rand::random_range(8.0..10.0)); let mut player_numbers = std::collections::BTreeMap::new(); - player_numbers.insert(netplay_config.player_number, None); ui::video::onscreen_message( "Connecting to netplay peers...", @@ -408,16 +412,23 @@ pub fn init( .connected_peers() .collect::>(); - send_player_number(socket.channel_mut(1), peers, netplay_config.player_number); - get_player_numbers(socket.channel_mut(1), &mut player_numbers); - if player_numbers.len() == netplay_config.number_of_players { - break; + if peers.len() == netplay_config.number_of_players - 1 { + player_numbers.insert(netplay_config.player_number, None); + send_player_number(socket.channel_mut(1), peers, netplay_config.player_number); + get_player_numbers(socket.channel_mut(1), &mut player_numbers); + if player_numbers.len() == netplay_config.number_of_players { + break; + } + } else if now.elapsed() > socket_timeout { + socket.close(); + ui::video::onscreen_message( + "Could not connect to netplay peers, retrying...", + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, + ); + player_numbers.clear(); + socket = create_socket(builder.clone()); } - if now.elapsed() > timeout { - eprintln!("Could not connect to netplay peers"); - return None; - } unsafe { sdl3_sys::events::SDL_PumpEvents() }; ui::video::render_frame(); ui::video::update_screen(); @@ -474,6 +485,7 @@ pub fn init( let mut session = session_builder.start_p2p_session(matchbox_channel).unwrap(); let now = std::time::Instant::now(); + let timeout = std::time::Duration::from_secs(10); while session.current_state() != ggrs::SessionState::Running { session.poll_remote_clients(); if now.elapsed() > timeout { From b1735983205c196a68ec6e393e323524565e9893 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 16 Jun 2026 16:45:04 +0200 Subject: [PATCH 1059/1117] reset timeout (#1094) --- src/netplay.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/netplay.rs b/src/netplay.rs index 88c32e2..2e70558 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -396,7 +396,7 @@ pub fn init( let mut socket = create_socket(builder.clone()); - let now = std::time::Instant::now(); + let mut now = std::time::Instant::now(); let socket_timeout = std::time::Duration::from_secs_f64(rand::random_range(8.0..10.0)); let mut player_numbers = std::collections::BTreeMap::new(); @@ -427,6 +427,7 @@ pub fn init( ); player_numbers.clear(); socket = create_socket(builder.clone()); + now = std::time::Instant::now(); } unsafe { sdl3_sys::events::SDL_PumpEvents() }; From d6d0b6607874a42b2694587379d9f62cda3fcda8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 16 Jun 2026 18:41:13 +0200 Subject: [PATCH 1060/1117] bump version (#1095) --- Cargo.lock | 10 +++++----- Cargo.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1a068b2..9de4ca4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -728,9 +728,9 @@ dependencies = [ [[package]] name = "auto_enums" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65398a2893f41bce5c9259f6e1a4f03fbae40637c1bdc755b4f387f48c613b03" +checksum = "2e4487600931c9a89f8db7ffbdf3fbdd45bb7bd85e26861f659a463cd0dff966" dependencies = [ "derive_utils", "proc-macro2", @@ -2773,7 +2773,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.26" +version = "1.1.28" dependencies = [ "bindgen", "cc", @@ -2867,9 +2867,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "171fefbc92fe4a4de27e0698d6a5b392d6a0e333506bc49133760b3bcf948733" +checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" dependencies = [ "atomic-waker", "bytes", diff --git a/Cargo.toml b/Cargo.toml index 1a752bd..bd03663 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.26" +version = "1.1.28" edition = "2024" rust-version = "1.96.0" From 97a8b63c9ca1b7babf3be0d8a96344447e3f3bfc Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 16 Jun 2026 18:46:57 +0200 Subject: [PATCH 1061/1117] fix disconnect (#1096) --- src/netplay.rs | 54 ++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 28 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index 2e70558..140d088 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -19,15 +19,12 @@ impl ggrs::Config for GgrsConfig { pub struct MatchboxChannel { channel: matchbox_socket::WebRtcChannel, - disconnected_peers: tokio::sync::mpsc::UnboundedSender, } impl ggrs::NonBlockingSocket for MatchboxChannel { fn send_to(&mut self, msg: &ggrs::Message, addr: &matchbox_socket::PeerId) { let encoded = postcard::to_stdvec(msg).expect("serialization failed"); - if self.channel.try_send(encoded.into(), *addr).is_err() { - self.disconnected_peers.send(*addr).unwrap(); - } + let _ = self.channel.try_send(encoded.into(), *addr); } fn receive_all_messages(&mut self) -> Vec<(matchbox_socket::PeerId, ggrs::Message)> { @@ -51,6 +48,7 @@ pub struct NetplayConfig { } pub struct Netplay { + pub disconnected: bool, pub session: ggrs::P2PSession, pub reliable_channel: matchbox_socket::WebRtcChannel, pub peers: Vec, @@ -62,7 +60,6 @@ pub struct Netplay { pub inputs: Vec<(ui::input::InputData, ggrs::InputStatus)>, pub requests: std::collections::VecDeque>, pub incoming_message: Vec, - pub disconnected_peers: tokio::sync::mpsc::UnboundedReceiver, pub ice_config_path: std::path::PathBuf, } @@ -254,19 +251,6 @@ pub fn in_rollback(netplay: Option<&Netplay>) -> bool { } } -fn process_disconnected_peers(netplay: &mut Netplay) { - while let Ok(addr) = netplay.disconnected_peers.try_recv() { - for handle in netplay.session.handles_by_address(addr) { - if netplay.session.disconnect_player(handle).is_ok() { - ui::video::onscreen_message( - &format!("Player {} disconnected", handle + 1), - ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, - ); - } - } - } -} - pub fn process_requests( device: &mut device::Device, ) -> Vec<(ui::input::InputData, ggrs::InputStatus)> { @@ -293,24 +277,21 @@ pub fn process_requests( } } } else { - // unsafe { sdl3_sys::events::SDL_PumpEvents() }; // so the screen doesn't freeze process_netplay(device); } } } -fn process_netplay(device: &mut device::Device) { - let netplay = device.netplay.as_mut().unwrap(); - process_disconnected_peers(netplay); - +fn poll_clients(netplay: &mut Netplay) { netplay.session.poll_remote_clients(); for event in netplay.session.events() { match event { ggrs::GgrsEvent::Synchronizing { .. } => {} ggrs::GgrsEvent::Synchronized { .. } => {} ggrs::GgrsEvent::Disconnected { .. } => { + netplay.disconnected = true; ui::video::onscreen_message( - "Lost connection to peer", + "Lost connection to peers", ui::video::MESSAGE_LENGTH_MESSAGE_LONG, ); } @@ -332,7 +313,12 @@ fn process_netplay(device: &mut device::Device) { } } } +} +fn process_netplay(device: &mut device::Device) { + let netplay = device.netplay.as_mut().unwrap(); + + poll_clients(netplay); process_reliable_messages(netplay); advance_frame(device); } @@ -350,8 +336,22 @@ fn advance_frame(device: &mut device::Device) { while netplay.session.current_frame() > netplay.session.confirmed_frame() && netplay.session.confirmed_frame() != ggrs::NULL_FRAME { - netplay.session.poll_remote_clients(); + poll_clients(netplay); } + + if netplay.disconnected { + netplay.requests.push_back(ggrs::GgrsRequest::AdvanceFrame { + inputs: vec![ + ( + ui::input::InputData::default(), + ggrs::InputStatus::Disconnected + ); + 4 + ], + }); + return; + } + match netplay.session.advance_frame() { Ok(requests) => { netplay.requests.extend(requests); @@ -470,10 +470,8 @@ pub fn init( } } - let (disconnected_peers_tx, disconnected_peers_rx) = tokio::sync::mpsc::unbounded_channel(); let matchbox_channel = MatchboxChannel { channel: socket.take_channel(0).unwrap(), - disconnected_peers: disconnected_peers_tx, }; let reliable_channel = socket.take_channel(1).unwrap(); @@ -498,7 +496,7 @@ pub fn init( } Some(Netplay { - disconnected_peers: disconnected_peers_rx, + disconnected: false, incoming_message: vec![], input_delay: netplay_config.input_delay, session, From 3718d914fd7c092070d7ab3b3eb3957b5f15c761 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 17 Jun 2026 08:58:44 +0200 Subject: [PATCH 1062/1117] try to restore input data from old config (#1097) --- src/ui/config.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/ui/config.rs b/src/ui/config.rs index 0b2e7da..9c13c45 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -136,17 +136,27 @@ impl Config { let dirs = ui::get_dirs(); let file_path = dirs.config_dir.join("config.json"); let config_file = std::fs::read(file_path); + let mut input_data: Option = None; if let Ok(config_file) = config_file { let result = serde_json::from_slice::(config_file.as_ref()); if let Ok(mut result) = result { result.write_to_disk = true; return result; } + + // try to restore input data from old config file + if let Ok(value) = serde_json::from_slice::(&config_file) + && let Some(data) = value.get("input") + && let Ok(data) = serde_json::from_value::(data.clone()) + { + input_data = Some(data); + } } + let mut input_profiles = std::collections::BTreeMap::new(); input_profiles.insert("default".to_string(), ui::input::get_default_profile()); Config { - input: Input { + input: input_data.unwrap_or(Input { input_profile_binding: [ "default".to_string(), "default".to_string(), @@ -160,7 +170,7 @@ impl Config { gb_rom_path: [String::new(), String::new(), String::new(), String::new()], gb_ram_path: [String::new(), String::new(), String::new(), String::new()], emulate_vru: false, - }, + }), video: Video { upscale: 1, ssaa: false, From e3a22bf7d0ecb3781cca1c84978e9f9ac5285bd8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 19 Jun 2026 09:26:39 +0200 Subject: [PATCH 1063/1117] tweak connection times (#1099) * tweak connection times * more * more --- src/netplay.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index 140d088..573eaf0 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -397,11 +397,11 @@ pub fn init( let mut socket = create_socket(builder.clone()); let mut now = std::time::Instant::now(); - let socket_timeout = std::time::Duration::from_secs_f64(rand::random_range(8.0..10.0)); + let socket_timeout = std::time::Duration::from_secs_f64(rand::random_range(6.0..8.0)); let mut player_numbers = std::collections::BTreeMap::new(); ui::video::onscreen_message( - "Connecting to netplay peers...", + "Connecting to netplay peers...\nPlease wait...", ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, ); @@ -422,7 +422,7 @@ pub fn init( } else if now.elapsed() > socket_timeout { socket.close(); ui::video::onscreen_message( - "Could not connect to netplay peers, retrying...", + "Still connecting to netplay peers...\nPlease wait...", ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, ); player_numbers.clear(); From 57327c1f73f78b9e0834659440ae37f56a160ec9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 19 Jun 2026 23:06:05 +0200 Subject: [PATCH 1064/1117] improve netplay startup (#1100) --- src/netplay.rs | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index 573eaf0..afba324 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -129,7 +129,7 @@ fn receive_message(netplay: &mut Netplay, name: &str) -> Vec { fn send_player_number( channel: &mut matchbox_socket::WebRtcChannel, - peers: Vec, + peers: &[matchbox_socket::PeerId], player_number: usize, ) { let message = NetplayMessage { @@ -138,7 +138,7 @@ fn send_player_number( }; let data = postcard::to_stdvec(&message).unwrap(); for peer in peers { - if let Err(e) = channel.try_send(data.clone().into(), peer) { + if let Err(e) = channel.try_send(data.clone().into(), *peer) { eprintln!("Failed to send message: {}", e); } } @@ -363,6 +363,20 @@ fn advance_frame(device: &mut device::Device) { } } +fn verify_peers( + peers: &[matchbox_socket::PeerId], + player_numbers: &std::collections::BTreeMap>, +) -> bool { + for (_, peer) in player_numbers.iter() { + if let Some(peer) = peer + && !peers.contains(peer) + { + return false; + } + } + true +} + fn create_socket(builder: matchbox_socket::WebRtcSocketBuilder) -> matchbox_socket::WebRtcSocket { let (socket, loop_fut) = builder.build(); tokio::spawn(async move { @@ -394,7 +408,9 @@ pub fn init( eprintln!("Using default ICE config"); } - let mut socket = create_socket(builder.clone()); + //matchbox seems to crash if you drop the socket + //so I am storing them in a Vec so they aren't dropped until the function returns + let mut sockets = vec![create_socket(builder.clone())]; let mut now = std::time::Instant::now(); let socket_timeout = std::time::Duration::from_secs_f64(rand::random_range(6.0..8.0)); @@ -407,6 +423,7 @@ pub fn init( device.cpu.running = true; while device.cpu.running { + let socket = sockets.last_mut().unwrap(); socket.update_peers(); let peers = socket .connected_peers() @@ -414,9 +431,11 @@ pub fn init( if peers.len() == netplay_config.number_of_players - 1 { player_numbers.insert(netplay_config.player_number, None); - send_player_number(socket.channel_mut(1), peers, netplay_config.player_number); + send_player_number(socket.channel_mut(1), &peers, netplay_config.player_number); get_player_numbers(socket.channel_mut(1), &mut player_numbers); - if player_numbers.len() == netplay_config.number_of_players { + if player_numbers.len() == netplay_config.number_of_players + && verify_peers(&peers, &player_numbers) + { break; } } else if now.elapsed() > socket_timeout { @@ -426,7 +445,7 @@ pub fn init( ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, ); player_numbers.clear(); - socket = create_socket(builder.clone()); + sockets.push(create_socket(builder.clone())); now = std::time::Instant::now(); } @@ -470,6 +489,7 @@ pub fn init( } } + let socket = sockets.last_mut().unwrap(); let matchbox_channel = MatchboxChannel { channel: socket.take_channel(0).unwrap(), }; From c82edae338c951f6e61762e7e63ba5a331650a65 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 20 Jun 2026 09:58:25 +0200 Subject: [PATCH 1065/1117] show message more frequently (#1101) * show message more frequently * more --- src/netplay.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index afba324..31408a1 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -408,12 +408,13 @@ pub fn init( eprintln!("Using default ICE config"); } - //matchbox seems to crash if you drop the socket + //matchbox seems to crash if you drop the socket right after closing it //so I am storing them in a Vec so they aren't dropped until the function returns let mut sockets = vec![create_socket(builder.clone())]; let mut now = std::time::Instant::now(); - let socket_timeout = std::time::Duration::from_secs_f64(rand::random_range(6.0..8.0)); + let mut message_timer = now; + let socket_timeout = std::time::Duration::from_secs_f64(rand::random_range(8.0..10.0)); let mut player_numbers = std::collections::BTreeMap::new(); ui::video::onscreen_message( @@ -440,13 +441,17 @@ pub fn init( } } else if now.elapsed() > socket_timeout { socket.close(); + player_numbers.clear(); + sockets.push(create_socket(builder.clone())); + now = std::time::Instant::now(); + } + + if message_timer.elapsed() > std::time::Duration::from_secs(4) { ui::video::onscreen_message( "Still connecting to netplay peers...\nPlease wait...", ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, ); - player_numbers.clear(); - sockets.push(create_socket(builder.clone())); - now = std::time::Instant::now(); + message_timer = std::time::Instant::now(); } unsafe { sdl3_sys::events::SDL_PumpEvents() }; From 6f9801a18552f67049788afb5e8e023489241664 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 20 Jun 2026 13:20:11 +0200 Subject: [PATCH 1066/1117] cargo update (#1102) --- Cargo.lock | 185 ++++++----------------------------------------------- 1 file changed, 19 insertions(+), 166 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9de4ca4..407986d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -981,9 +981,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfd1e3f8955a5d7de9fab72fc8373fade9fb8a703968cb200ae3dc6cf08e185a" +checksum = "2f3f6da4992df95bbcd9af42a6c7dcb994498fc9048230405f3b36ff7cd3f145" dependencies = [ "bytes", "cfg_aliases", @@ -1064,9 +1064,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.11.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" [[package]] name = "bzip2" @@ -1148,9 +1148,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.64" +version = "1.2.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad887fd958be91b5098c0248def011f4523ab786cd411be668777e55063501f" +checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96" dependencies = [ "find-msvc-tools", "jobserver", @@ -2591,24 +2591,22 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "js-sys", "libc", "r-efi 6.0.0", "rand_core 0.10.1", - "wasip2", - "wasip3", "wasm-bindgen", ] [[package]] name = "ggrs" version = "0.12.0" -source = "git+https://github.com/gschup/ggrs.git#1f14703a5859c2bcb0fa789beab15e80b572775f" +source = "git+https://github.com/gschup/ggrs.git#6cbcbbfa0bf799a7bf4d8a1f0401ba7a15ae6f4f" dependencies = [ "bincode 1.3.3", "bitfield-rle", @@ -3587,12 +3585,6 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4a2c462a4d927d512f5f882a033ddd62f33a05bb9f230d98f736ac3dc85938f" -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "idna" version = "1.1.0" @@ -3668,8 +3660,6 @@ checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", "hashbrown 0.17.1", - "serde", - "serde_core", ] [[package]] @@ -3977,12 +3967,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "lebe" version = "0.5.3" @@ -5739,7 +5723,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" dependencies = [ "chacha20 0.10.0", - "getrandom 0.4.2", + "getrandom 0.4.3", "rand_core 0.10.1", "serde", ] @@ -6648,7 +6632,7 @@ dependencies = [ "bzip2", "cbc 0.2.1", "crc32fast", - "getrandom 0.4.2", + "getrandom 0.4.3", "js-sys", "lzma-rust2", "ppmd-rust", @@ -7200,9 +7184,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.117" +version = "2.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" dependencies = [ "proc-macro2", "quote", @@ -7292,7 +7276,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.2", + "getrandom 0.4.3", "once_cell", "rustix 1.1.4", "windows-sys 0.61.2", @@ -7999,7 +7983,7 @@ version = "1.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" dependencies = [ - "getrandom 0.4.2", + "getrandom 0.4.3", "js-sys", "serde_core", "wasm-bindgen", @@ -8103,16 +8087,7 @@ version = "1.0.4+wasi-0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", + "wit-bindgen", ] [[package]] @@ -8170,40 +8145,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags 2.13.0", - "hashbrown 0.15.5", - "indexmap", - "semver", -] - [[package]] name = "wayland-backend" version = "0.3.15" @@ -8254,9 +8195,9 @@ dependencies = [ [[package]] name = "wayland-protocols" -version = "0.32.12" +version = "0.32.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "563a85523cade2429938e790815fd7319062103b9f4a2dc806e9b53b95982d8f" +checksum = "23d0c813de3daa2ed6520af85a3bd49b0e722a3078506899aa9686fea58dc4b6" dependencies = [ "bitflags 2.13.0", "wayland-backend", @@ -9334,100 +9275,12 @@ dependencies = [ "version_check", ] -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - [[package]] name = "wit-bindgen" version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags 2.13.0", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - [[package]] name = "write-fonts" version = "0.45.0" @@ -9862,7 +9715,7 @@ dependencies = [ "crc32fast", "deflate64", "flate2", - "getrandom 0.4.2", + "getrandom 0.4.3", "hmac 0.13.0", "indexmap", "lzma-rust2", From d6aa2ddce3c51991a4da20e3037bf59e22fdc8b8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 20 Jun 2026 18:40:56 +0200 Subject: [PATCH 1067/1117] send disconnect notice (#1103) * send disconnect notice * more * more * more * more --- src/netplay.rs | 37 ++++++++++++++++++++++++++++++------- src/ui/gui.rs | 19 ++++++++++++------- 2 files changed, 42 insertions(+), 14 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index 31408a1..d9d362a 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -105,6 +105,7 @@ fn process_reliable_messages(netplay: &mut Netplay) { .insert(decoded_message.name, decoded_message.data); netplay.incoming_message.clear(); check_input_delay(netplay); + check_disconnect(netplay); } } } @@ -235,6 +236,16 @@ fn check_input_delay(netplay: &mut Netplay) { } } +fn check_disconnect(netplay: &mut Netplay) { + if !netplay.disconnected && netplay.messages.remove("disconnect").is_some() { + netplay.disconnected = true; + ui::video::onscreen_message( + "Player disconnected, session has ended", + ui::video::MESSAGE_LENGTH_MESSAGE_LONG, + ); + } +} + fn pending_frames(netplay: &Netplay) -> usize { netplay .requests @@ -289,11 +300,13 @@ fn poll_clients(netplay: &mut Netplay) { ggrs::GgrsEvent::Synchronizing { .. } => {} ggrs::GgrsEvent::Synchronized { .. } => {} ggrs::GgrsEvent::Disconnected { .. } => { - netplay.disconnected = true; - ui::video::onscreen_message( - "Lost connection to peers", - ui::video::MESSAGE_LENGTH_MESSAGE_LONG, - ); + if !netplay.disconnected { + netplay.disconnected = true; + ui::video::onscreen_message( + "Lost connection to peer(s)", + ui::video::MESSAGE_LENGTH_MESSAGE_LONG, + ); + } } ggrs::GgrsEvent::NetworkInterrupted { .. } => { println!("network interrupted"); @@ -333,7 +346,8 @@ fn advance_frame(device: &mut device::Device) { .unwrap(); // avoid rollback - while netplay.session.current_frame() > netplay.session.confirmed_frame() + while !netplay.disconnected + && netplay.session.current_frame() > netplay.session.confirmed_frame() && netplay.session.confirmed_frame() != ggrs::NULL_FRAME { poll_clients(netplay); @@ -542,6 +556,15 @@ pub fn init( }) } -pub fn close(netplay: &Netplay) { +pub fn close(netplay: &mut Netplay) { + if !netplay.disconnected { + let message = NetplayMessage { + name: "disconnect".to_string(), + data: vec![], + }; + send_message(netplay, message); + std::thread::sleep(std::time::Duration::from_millis(200)); // give the message time to be sent + } + let _ = std::fs::remove_file(&netplay.ice_config_path); } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index e4254e3..54fcc57 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -34,13 +34,18 @@ fn check_latest_version(weak: slint::Weak) { if let Ok(response) = response { let data: Result = response.json().await; - let latest_version = if let Ok(data) = data - && let Ok(github_version) = semver::Version::parse(&data.tag_name[1..]) - { - github_version - } else { - eprintln!("Error getting latest version from GitHub"); - semver::Version::parse(env!("CARGO_PKG_VERSION")).unwrap() + let latest_version = match data { + Ok(data) => match semver::Version::parse(&data.tag_name[1..]) { + Ok(github_version) => github_version, + Err(e) => { + eprintln!("Error parsing latest version from GitHub: {}", e); + semver::Version::parse(env!("CARGO_PKG_VERSION")).unwrap() + } + }, + Err(e) => { + eprintln!("Error getting latest version from GitHub: {}", e); + semver::Version::parse(env!("CARGO_PKG_VERSION")).unwrap() + } }; let current_version = semver::Version::parse(env!("CARGO_PKG_VERSION")).unwrap(); if current_version < latest_version { From 2dda5c8706eeee0313195a7b422a55c0435b4fd3 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 21 Jun 2026 10:51:32 +0200 Subject: [PATCH 1068/1117] handle matchbox panics (#1104) --- Cargo.toml | 2 -- src/netplay.rs | 8 ++------ 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index bd03663..35de52f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -61,7 +61,6 @@ slint-build = { version = "1.12", optional = true } cc = { version = "1.2", features = ["parallel"] } [profile.release] -panic = "abort" lto = "thin" strip = true @@ -69,7 +68,6 @@ strip = true inherits = "release" debug = true strip = false -panic = "unwind" [package.metadata.bundle] name = "Gopher64" diff --git a/src/netplay.rs b/src/netplay.rs index d9d362a..c769e1c 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -422,9 +422,7 @@ pub fn init( eprintln!("Using default ICE config"); } - //matchbox seems to crash if you drop the socket right after closing it - //so I am storing them in a Vec so they aren't dropped until the function returns - let mut sockets = vec![create_socket(builder.clone())]; + let mut socket = create_socket(builder.clone()); let mut now = std::time::Instant::now(); let mut message_timer = now; @@ -438,7 +436,6 @@ pub fn init( device.cpu.running = true; while device.cpu.running { - let socket = sockets.last_mut().unwrap(); socket.update_peers(); let peers = socket .connected_peers() @@ -456,7 +453,7 @@ pub fn init( } else if now.elapsed() > socket_timeout { socket.close(); player_numbers.clear(); - sockets.push(create_socket(builder.clone())); + socket = create_socket(builder.clone()); now = std::time::Instant::now(); } @@ -508,7 +505,6 @@ pub fn init( } } - let socket = sockets.last_mut().unwrap(); let matchbox_channel = MatchboxChannel { channel: socket.take_channel(0).unwrap(), }; From f5cda2901fad92b1c08f52b45631b45203b257c9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 21 Jun 2026 16:22:21 +0200 Subject: [PATCH 1069/1117] clear join sessions list (#1105) --- src/ui/gui/appwindow.slint | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 245c6b3..c006bde 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -385,5 +385,7 @@ export component AppWindow inherits Window { NetplayWaitData.connected_peers_count = 0; NetplayData.pending_session = false; NetplayData.pending_refresh = false; + NetplayData.sessions = []; + NetplayData.current_session = -1; } } From 346b0a139d988c8751a015cb5b02f53d7304ef4e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 21 Jun 2026 17:12:19 +0200 Subject: [PATCH 1070/1117] Clarify netplay support (#1106) Updated netplay section to clarify support for P2P connections and added a note to read the netplay guide. --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 714932d..351ebe5 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,9 @@ Keys are mapped according to [these defaults](https://github.com/gopher64/gopher ## netplay -Gopher64 supports netplay (online play with others) via cloud hosted servers. You can also run the [server](https://github.com/gopher64/gopher64-netplay-server) yourself on a LAN. +Gopher64 supports P2P netplay (online play with others). + +Please read the [guide](https://github.com/gopher64/gopher64/wiki/Netplay-Guide) before trying out netplay. ## portable mode From a23ede433b46687b48cb13ae4305ce5a5857d616 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:13:16 +0200 Subject: [PATCH 1071/1117] bump version (#1107) --- Cargo.lock | 14 +++++++------- Cargo.toml | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 407986d..318361e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -370,9 +370,9 @@ checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +checksum = "f02882884d3e1bc524fb12c79f107f6ad0e1cfd498c536ffb494301740995dfe" [[package]] name = "as-raw-xcb-connection" @@ -2771,7 +2771,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.28" +version = "1.1.30" dependencies = [ "bindgen", "cc", @@ -4104,9 +4104,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.32" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" dependencies = [ "value-bag", ] @@ -9732,9 +9732,9 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be3d40e40a133f9c916ee3f9f4fa2d9d63435b5fbe1bfc6d9dae0aa0ada1513" +checksum = "977347db8caa080403f6b6b7c1cda9479a8e869316f7e13a59b19076a40f94e3" [[package]] name = "zmij" diff --git a/Cargo.toml b/Cargo.toml index 35de52f..825becb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.28" +version = "1.1.30" edition = "2024" rust-version = "1.96.0" From e6a260bd6a73043b9bf2e963982de3176922bb51 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 07:00:57 +0200 Subject: [PATCH 1072/1117] Bump actions/checkout from 6 to 7 (#1108) Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v6...v7) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 8 ++++---- .github/workflows/lint.yml | 2 +- .github/workflows/sec.yml | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fff937c..0f1ab38 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -34,7 +34,7 @@ jobs: arch: linux-aarch64 llvm: ARM64 steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: submodules: recursive fetch-depth: 0 @@ -95,7 +95,7 @@ jobs: arch: windows-aarch64 llvm: woa64 steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: submodules: recursive fetch-depth: 0 @@ -163,7 +163,7 @@ jobs: arch: macos-aarch64 llvm: ARM64 steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: submodules: recursive fetch-depth: 0 @@ -229,7 +229,7 @@ jobs: platform: 33 ndk: 29.0.14206865 steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: submodules: recursive fetch-depth: 0 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 8d5c35e..a1cc347 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -17,7 +17,7 @@ jobs: lint-linux: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: submodules: recursive fetch-depth: 0 diff --git a/.github/workflows/sec.yml b/.github/workflows/sec.yml index 8c5d1a6..6f8d19a 100644 --- a/.github/workflows/sec.yml +++ b/.github/workflows/sec.yml @@ -10,7 +10,7 @@ jobs: checks: write runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: submodules: recursive - uses: rustsec/audit-check@v2 From 119e9044a86f366b6718836cb74b2edd13f0c4c0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 23 Jun 2026 07:35:05 +0200 Subject: [PATCH 1073/1117] cargo update (#1111) --- Cargo.lock | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 318361e..b60c194 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2001,7 +2001,7 @@ dependencies = [ "rcgen", "ring", "rkyv", - "rustls 0.23.40", + "rustls 0.23.41", "sec1", "sha1 0.10.6", "sha2 0.10.9", @@ -2606,7 +2606,7 @@ dependencies = [ [[package]] name = "ggrs" version = "0.12.0" -source = "git+https://github.com/gschup/ggrs.git#6cbcbbfa0bf799a7bf4d8a1f0401ba7a15ae6f4f" +source = "git+https://github.com/gschup/ggrs.git#76d48eebf25291bb7adc9c150ac7c1898fa2fe89" dependencies = [ "bincode 1.3.3", "bitfield-rle", @@ -3103,7 +3103,7 @@ dependencies = [ "http", "hyper", "hyper-util", - "rustls 0.23.40", + "rustls 0.23.41", "tokio", "tokio-rustls", "tower-service", @@ -4251,9 +4251,9 @@ checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4" [[package]] name = "memmap2" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" +checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0" dependencies = [ "libc", ] @@ -5667,9 +5667,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.45" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" dependencies = [ "proc-macro2", ] @@ -6266,9 +6266,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.40" +version = "0.23.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" +checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" dependencies = [ "once_cell", "ring", @@ -7353,9 +7353,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.49" +version = "0.3.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711a53c2d47bbd818258c498c8dbfe186a2526c631495cfe7e078567f86b8469" +checksum = "85c17d80feb7334b40c484e45ed1a5273dfd8bfda537c3be2e74a06a6686f327" dependencies = [ "deranged", "js-sys", @@ -7374,9 +7374,9 @@ checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.29" +version = "0.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71c652a3727a9cbb9a02f707f530b618ce00d0ccd762009c8c23bd191df3c17d" +checksum = "dcef1a61bdb119096e153208ec5cbec23944ce8bca13be5c7f60c634f7403935" dependencies = [ "num-conv", "time-core", @@ -7516,7 +7516,7 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.40", + "rustls 0.23.41", "tokio", ] From dee2b85daa8159fa6c0258808ddb9a328c3de41b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 23 Jun 2026 12:27:15 +0200 Subject: [PATCH 1074/1117] use tokio mutex (#1112) * use tokio mutex * more --- src/device.rs | 2 +- src/lib.rs | 16 ++++----- src/savestates.rs | 87 +++++++++++++++++++---------------------------- src/ui/android.rs | 63 +++++++++++----------------------- 4 files changed, 62 insertions(+), 106 deletions(-) diff --git a/src/device.rs b/src/device.rs index 865cd80..7c17ed2 100644 --- a/src/device.rs +++ b/src/device.rs @@ -349,7 +349,7 @@ impl Device { load_state: false, load_rewind: false, last_rewind_saved: 0.0, - rewind_pool: std::sync::Arc::new(std::sync::Mutex::new( + rewind_pool: std::sync::Arc::new(tokio::sync::Mutex::new( std::collections::BTreeMap::new(), )), }, diff --git a/src/lib.rs b/src/lib.rs index 93056ef..1a71f45 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -105,7 +105,7 @@ fn set_app_id() { } pub fn create_runtime() -> (tokio::sync::oneshot::Sender<()>, tokio::runtime::Handle) { - let (tx, rx) = std::sync::mpsc::channel(); + let (tx, mut rx) = tokio::sync::mpsc::unbounded_channel(); let (close_tx, close_rx) = tokio::sync::oneshot::channel::<()>(); std::thread::spawn(move || { @@ -114,7 +114,7 @@ pub fn create_runtime() -> (tokio::sync::oneshot::Sender<()>, tokio::runtime::Ha rt.block_on(close_rx).unwrap(); }); - (close_tx, rx.recv().unwrap()) + (close_tx, rx.blocking_recv().unwrap()) } pub fn run(args: Args, arg_count: usize) -> std::io::Result<()> { @@ -352,9 +352,7 @@ fn android_main(app: slint::android::AndroidApp) { slint::android::init_with_event_listener(app.clone(), move |event| match event { slint::android::android_activity::PollEvent::Main(main_event) => match main_event { slint::android::android_activity::MainEvent::TerminateWindow { .. } => { - if let Ok(weak_app_window) = android::WEAK_SLINT_WINDOW.lock() - && let Some(weak_app_window) = weak_app_window.as_ref() - { + if let Some(weak_app_window) = android::WEAK_SLINT_WINDOW.blocking_lock().as_ref() { weak_app_window .upgrade_in_event_loop(move |handle| { ui::gui::save_settings(&handle); @@ -369,9 +367,9 @@ fn android_main(app: slint::android::AndroidApp) { }) .unwrap(); let app_window = ui::gui::AppWindow::new().unwrap(); - *android::WEAK_SLINT_WINDOW.lock().unwrap() = Some(app_window.as_weak()); + *android::WEAK_SLINT_WINDOW.blocking_lock() = Some(app_window.as_weak()); - *android::ANDROID_APP.lock().unwrap() = Some(app); + *android::ANDROID_APP.blocking_lock() = Some(app); let dirs = ui::get_dirs(); @@ -382,6 +380,6 @@ fn android_main(app: slint::android::AndroidApp) { ui::gui::app_window(&app_window, true); close_tx.send(()).unwrap(); - *android::WEAK_SLINT_WINDOW.lock().unwrap() = None; - *android::ANDROID_APP.lock().unwrap() = None; + *android::WEAK_SLINT_WINDOW.blocking_lock() = None; + *android::ANDROID_APP.blocking_lock() = None; } diff --git a/src/savestates.rs b/src/savestates.rs index 6664364..32f6655 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -78,7 +78,7 @@ pub struct Savestate { pub last_rewind_saved: f64, #[serde(skip)] pub rewind_pool: - std::sync::Arc>>, + std::sync::Arc>>, } pub struct SavestateData { @@ -88,11 +88,11 @@ pub struct SavestateData { ra_state: Vec, } -static DEVICE_CLONE: std::sync::LazyLock>> = - std::sync::LazyLock::new(|| std::sync::Mutex::new(device::Device::new(false))); +static DEVICE_CLONE: std::sync::LazyLock>> = + std::sync::LazyLock::new(|| tokio::sync::Mutex::new(device::Device::new(false))); -static SAVES_CLONE: std::sync::LazyLock> = - std::sync::LazyLock::new(|| std::sync::Mutex::new(ui::storage::Saves::default())); +static SAVES_CLONE: std::sync::LazyLock> = + std::sync::LazyLock::new(|| tokio::sync::Mutex::new(ui::storage::Saves::default())); pub fn process_savestates(device: &mut device::Device) { let save_rewind = if device.netplay.is_none() @@ -126,18 +126,10 @@ pub fn create_savestate(device: &mut device::Device, rewind: bool, rewind_frame: let mut ra_state: Vec = vec![0; retroachievements::state_size()]; retroachievements::save_state(ra_state.as_mut_ptr(), ra_state.len()); - if let Ok(mut device_clone) = DEVICE_CLONE.lock() - && let Ok(mut saves_clone) = SAVES_CLONE.lock() - { - device_clone.clone_state(device); - saves_clone.clone_from(&device.ui.storage.saves); - } else { - ui::video::onscreen_message( - "Failed to create savestate", - ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, - ); - return; - } + DEVICE_CLONE.blocking_lock().clone_state(device); + SAVES_CLONE + .blocking_lock() + .clone_from(&device.ui.storage.saves); let save_path = device.ui.storage.paths.savestate_file_path.clone(); let save_state_slot = device.ui.storage.save_state_slot; @@ -147,39 +139,32 @@ pub fn create_savestate(device: &mut device::Device, rewind: bool, rewind_frame: let mut error = false; if rewind { - if let Ok(device_clone) = DEVICE_CLONE.lock() - && let Ok(saves_clone) = SAVES_CLONE.lock() - && let Ok(mut pool) = rewind_pool.lock() - { - let mut state = device::Device::new(false); - state.clone_state(device_clone.deref()); - let key = if let Some(key) = rewind_frame { - key - } else if let Some(key) = pool.keys().last() { - key + 1 - } else { - 0 - }; - pool.insert( - key, - SavestateData { - device: state, - saves: saves_clone.clone(), - rdp_state, - ra_state, - }, - ); - if pool.len() > 30 { - pool.pop_first(); - } + let mut pool = rewind_pool.lock().await; + let mut state = device::Device::new(false); + state.clone_state(DEVICE_CLONE.lock().await.deref()); + let key = if let Some(key) = rewind_frame { + key + } else if let Some(key) = pool.keys().last() { + key + 1 } else { - error = true; + 0 + }; + pool.insert( + key, + SavestateData { + device: state, + saves: SAVES_CLONE.lock().await.clone(), + rdp_state, + ra_state, + }, + ); + if pool.len() > 30 { + pool.pop_first(); } } else { - let compressed_file = if let Ok(device_clone) = DEVICE_CLONE.lock() - && let Ok(saves_clone) = SAVES_CLONE.lock() - && let Ok(device_data) = postcard::to_stdvec(device_clone.deref()) - && let Ok(saves_data) = postcard::to_stdvec(saves_clone.deref()) + let compressed_file = if let Ok(device_data) = + postcard::to_stdvec(DEVICE_CLONE.lock().await.deref()) + && let Ok(saves_data) = postcard::to_stdvec(SAVES_CLONE.lock().await.deref()) && let Ok(compressed_file) = ui::storage::compress_file(&[ (&device_data, "device"), (&saves_data, "saves"), @@ -229,17 +214,15 @@ pub fn load_savestate(device: &mut device::Device, rewind: bool, rewind_frame: O let timeout = std::time::Duration::from_secs(1); let now = std::time::Instant::now(); loop { - if let Ok(mut pool) = device.savestate.rewind_pool.lock() - && pool.contains_key(&rewind_frame) - { + let mut pool = device.savestate.rewind_pool.blocking_lock(); + if pool.contains_key(&rewind_frame) { break pool.remove(&rewind_frame); } if now.elapsed() > timeout { break None; } } - } else if let Ok(mut pool) = device.savestate.rewind_pool.lock() - && let Some((_key, state)) = pool.pop_last() + } else if let Some((_key, state)) = device.savestate.rewind_pool.blocking_lock().pop_last() { Some(state) } else { diff --git a/src/ui/android.rs b/src/ui/android.rs index d0efa29..cf00549 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -13,15 +13,15 @@ const REQUEST_SELECT_ROM: jint = 1; const CONFIGURE_INPUT_PROFILE: jint = 2; const RUN_ROM: jint = 3; -pub static ANDROID_APP: std::sync::Mutex> = - std::sync::Mutex::new(None); +pub static ANDROID_APP: tokio::sync::Mutex> = + tokio::sync::Mutex::const_new(None); -pub static SELECT_ROM_TX: std::sync::Mutex< +pub static SELECT_ROM_TX: tokio::sync::Mutex< Option>>, -> = std::sync::Mutex::new(None); +> = tokio::sync::Mutex::const_new(None); -pub static WEAK_SLINT_WINDOW: std::sync::Mutex>> = - std::sync::Mutex::new(None); +pub static WEAK_SLINT_WINDOW: tokio::sync::Mutex>> = + tokio::sync::Mutex::const_new(None); bind_java_type! { DocumentsContract => "android.provider.DocumentsContract", @@ -197,9 +197,7 @@ fn start_configure_input_profile_on_jvm( dinput: bool, deadzone: i32, ) -> jni::errors::Result<()> { - if let Ok(app) = ANDROID_APP.lock() - && let Some(app) = app.as_ref() - { + if let Some(app) = ANDROID_APP.blocking_lock().as_ref() { let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; @@ -256,9 +254,7 @@ fn start_run_rom_on_jvm( netplay: Option, weak: slint::Weak, ) -> jni::errors::Result<()> { - if let Ok(app) = ANDROID_APP.lock() - && let Some(app) = app.as_ref() - { + if let Some(app) = ANDROID_APP.blocking_lock().as_ref() { let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; @@ -330,9 +326,7 @@ fn start_run_rom_on_jvm( } fn get_vm() -> Option { - if let Ok(app) = ANDROID_APP.lock() - && let Some(app) = app.as_ref() - { + if let Some(app) = ANDROID_APP.blocking_lock().as_ref() { Some(unsafe { JavaVM::from_raw(app.vm_as_ptr().cast()) }) } else { None @@ -431,9 +425,7 @@ pub fn open_uri(path: &str) { } fn open_uri_on_jvm(env: &mut Env<'_>, path: &str) -> jni::errors::Result<()> { - if let Ok(app) = ANDROID_APP.lock() - && let Some(app) = app.as_ref() - { + if let Some(app) = ANDROID_APP.blocking_lock().as_ref() { let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; @@ -459,12 +451,8 @@ pub async fn select_rom(rom_dir: slint::SharedString) -> Option>(); - if let Ok(mut tx_lock) = SELECT_ROM_TX.lock() { - tx_lock.replace(tx); - } else { - eprintln!("Error locking SELECT_ROM_TX"); - return None; - } + SELECT_ROM_TX.lock().await.replace(tx); + rx.await.unwrap_or(None) } else { eprintln!("Android app not initialized"); @@ -481,9 +469,7 @@ pub async fn select_gb_ram(_player: i32) -> Option { } fn select_rom_on_jvm(env: &mut Env<'_>, rom_dir: String) -> jni::errors::Result<()> { - if let Ok(app) = ANDROID_APP.lock() - && let Some(app) = app.as_ref() - { + if let Some(app) = ANDROID_APP.blocking_lock().as_ref() { let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; @@ -507,9 +493,7 @@ fn select_rom_on_jvm(env: &mut Env<'_>, rom_dir: String) -> jni::errors::Result< } pub fn get_dirs() -> ui::Dirs { - if let Ok(app) = ANDROID_APP.lock() - && let Some(app) = app.as_ref() - { + if let Some(app) = ANDROID_APP.blocking_lock().as_ref() { ui::Dirs { config_dir: app.internal_data_path().unwrap().join("config"), data_dir: app.external_data_path().unwrap().join("data"), @@ -559,9 +543,7 @@ fn get_file_from_uri_on_jvm( env: &mut Env<'_>, path: String, ) -> jni::errors::Result> { - if let Ok(app) = ANDROID_APP.lock() - && let Some(app) = app.as_ref() - { + if let Some(app) = ANDROID_APP.blocking_lock().as_ref() { let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; let path = JString::from_str(env, path)?; @@ -600,8 +582,7 @@ pub extern "system" fn Java_io_github_gopher64_gopher64_SlintActivity_nativeOnAc if result_code == AndroidActivity::RESULT_OK(env)? { match request_code { REQUEST_SELECT_ROM => { - if let Ok(mut tx_lock) = SELECT_ROM_TX.lock() - && let Some(tx) = tx_lock.take() + if let Some(tx) = SELECT_ROM_TX.blocking_lock().take() && !intent_data.is_null() { let result_intent = @@ -612,9 +593,7 @@ pub extern "system" fn Java_io_github_gopher64_gopher64_SlintActivity_nativeOnAc return Ok(()); } - if let Ok(app) = ANDROID_APP.lock() - && let Some(app) = app.as_ref() - { + if let Some(app) = ANDROID_APP.blocking_lock().as_ref() { let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? @@ -635,9 +614,7 @@ pub extern "system" fn Java_io_github_gopher64_gopher64_SlintActivity_nativeOnAc } } CONFIGURE_INPUT_PROFILE => { - if let Ok(weak_app_window) = WEAK_SLINT_WINDOW.lock() - && let Some(weak_app_window) = weak_app_window.as_ref() - { + if let Some(weak_app_window) = WEAK_SLINT_WINDOW.blocking_lock().as_ref() { let config = ui::config::Config::new(); ui::gui::update_input_profiles(&weak_app_window, &config); } @@ -659,9 +636,7 @@ pub extern "system" fn Java_io_github_gopher64_gopher64_SlintActivity_nativeOnAc { let _ = std::fs::remove_file(cheats_path); } - if let Ok(weak_app_window) = WEAK_SLINT_WINDOW.lock() - && let Some(weak_app_window) = weak_app_window.as_ref() - { + if let Some(weak_app_window) = WEAK_SLINT_WINDOW.blocking_lock().as_ref() { weak_app_window .upgrade_in_event_loop(move |handle| { ui::gui::update_recent_roms(&handle, file_path.into()); From 70b9d20c643caf019a560dde6255d8ea7b36807c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 23 Jun 2026 15:57:52 +0200 Subject: [PATCH 1075/1117] fix android build (#1113) * fix android build * more * more --- src/lib.rs | 12 +- src/ui/android.rs | 379 ++++++++++++++++++++++++---------------------- 2 files changed, 204 insertions(+), 187 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 1a71f45..c2855c5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -352,7 +352,9 @@ fn android_main(app: slint::android::AndroidApp) { slint::android::init_with_event_listener(app.clone(), move |event| match event { slint::android::android_activity::PollEvent::Main(main_event) => match main_event { slint::android::android_activity::MainEvent::TerminateWindow { .. } => { - if let Some(weak_app_window) = android::WEAK_SLINT_WINDOW.blocking_lock().as_ref() { + if let Ok(weak_app_window) = android::WEAK_SLINT_WINDOW.lock() + && let Some(weak_app_window) = weak_app_window.as_ref() + { weak_app_window .upgrade_in_event_loop(move |handle| { ui::gui::save_settings(&handle); @@ -367,9 +369,9 @@ fn android_main(app: slint::android::AndroidApp) { }) .unwrap(); let app_window = ui::gui::AppWindow::new().unwrap(); - *android::WEAK_SLINT_WINDOW.blocking_lock() = Some(app_window.as_weak()); + *android::WEAK_SLINT_WINDOW.lock().unwrap() = Some(app_window.as_weak()); - *android::ANDROID_APP.blocking_lock() = Some(app); + *android::ANDROID_APP.lock().unwrap() = Some(app); let dirs = ui::get_dirs(); @@ -380,6 +382,6 @@ fn android_main(app: slint::android::AndroidApp) { ui::gui::app_window(&app_window, true); close_tx.send(()).unwrap(); - *android::WEAK_SLINT_WINDOW.blocking_lock() = None; - *android::ANDROID_APP.blocking_lock() = None; + *android::WEAK_SLINT_WINDOW.lock().unwrap() = None; + *android::ANDROID_APP.lock().unwrap() = None; } diff --git a/src/ui/android.rs b/src/ui/android.rs index cf00549..75765b7 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -13,15 +13,15 @@ const REQUEST_SELECT_ROM: jint = 1; const CONFIGURE_INPUT_PROFILE: jint = 2; const RUN_ROM: jint = 3; -pub static ANDROID_APP: tokio::sync::Mutex> = - tokio::sync::Mutex::const_new(None); +pub static ANDROID_APP: std::sync::Mutex> = + std::sync::Mutex::new(None); pub static SELECT_ROM_TX: tokio::sync::Mutex< Option>>, > = tokio::sync::Mutex::const_new(None); -pub static WEAK_SLINT_WINDOW: tokio::sync::Mutex>> = - tokio::sync::Mutex::const_new(None); +pub static WEAK_SLINT_WINDOW: std::sync::Mutex>> = + std::sync::Mutex::new(None); bind_java_type! { DocumentsContract => "android.provider.DocumentsContract", @@ -182,9 +182,17 @@ pub fn spawn_configure_input_profile( dinput: bool, deadzone: i32, ) { - if let Some(vm) = get_vm() { - if let Err(err) = vm.attach_current_thread(|env| { - start_configure_input_profile_on_jvm(env, profile_name.to_string(), dinput, deadzone) + if let Ok(app) = ANDROID_APP.lock() + && let Some(app) = app.as_ref() + { + if let Err(err) = get_vm(app).attach_current_thread(|env| { + start_configure_input_profile_on_jvm( + env, + app, + profile_name.to_string(), + dinput, + deadzone, + ) }) { eprintln!("JNI error while starting N64Activity: {err:?}"); } @@ -193,43 +201,40 @@ pub fn spawn_configure_input_profile( fn start_configure_input_profile_on_jvm( env: &mut Env<'_>, + app: &slint::android::AndroidApp, profile_name: String, dinput: bool, deadzone: i32, ) -> jni::errors::Result<()> { - if let Some(app) = ANDROID_APP.blocking_lock().as_ref() { - let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; - let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; + let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; + let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; - let package_name = JString::from_str(env, "io.github.gopher64.gopher64")?; - let class_name = JString::from_str(env, "io.github.gopher64.gopher64.N64Activity")?; + let package_name = JString::from_str(env, "io.github.gopher64.gopher64")?; + let class_name = JString::from_str(env, "io.github.gopher64.gopher64.N64Activity")?; - let args_key = JString::from_str(env, "args")?; - let mut args = vec![ - JString::from_str(env, "--configure-input-profile")?, - JString::from_str(env, &profile_name)?, - JString::from_str(env, "--deadzone")?, - JString::from_str(env, &deadzone.to_string())?, - ]; - if dinput { - args.push(JString::from_str(env, "--use-dinput")?); - } - let empty_arg = JString::from_str(env, "")?; - let j_args = JObjectArray::::new(env, args.len(), empty_arg)?; - for (i, arg) in args.iter().enumerate() { - j_args.set_element(env, i, arg)?; - } - let intent = AndroidIntent::new(env)? - .set_class_name(env, &package_name, &class_name)? - .put_extra_string_array(env, &args_key, &j_args)?; - - activity - .as_ref() - .start_activity_for_result(env, &intent, CONFIGURE_INPUT_PROFILE)?; - Ok(()) - } else { - Err(jni::errors::Error::UninitializedJavaVM) + let args_key = JString::from_str(env, "args")?; + let mut args = vec![ + JString::from_str(env, "--configure-input-profile")?, + JString::from_str(env, &profile_name)?, + JString::from_str(env, "--deadzone")?, + JString::from_str(env, &deadzone.to_string())?, + ]; + if dinput { + args.push(JString::from_str(env, "--use-dinput")?); } + let empty_arg = JString::from_str(env, "")?; + let j_args = JObjectArray::::new(env, args.len(), empty_arg)?; + for (i, arg) in args.iter().enumerate() { + j_args.set_element(env, i, arg)?; + } + let intent = AndroidIntent::new(env)? + .set_class_name(env, &package_name, &class_name)? + .put_extra_string_array(env, &args_key, &j_args)?; + + activity + .as_ref() + .start_activity_for_result(env, &intent, CONFIGURE_INPUT_PROFILE)?; + Ok(()) } pub fn run_rom( @@ -238,9 +243,11 @@ pub fn run_rom( netplay: Option, weak: slint::Weak, ) { - if let Some(vm) = get_vm() { - if let Err(err) = vm.attach_current_thread(|env| { - start_run_rom_on_jvm(env, file_path, game_settings, netplay, weak) + if let Ok(app) = ANDROID_APP.lock() + && let Some(app) = app.as_ref() + { + if let Err(err) = get_vm(app).attach_current_thread(|env| { + start_run_rom_on_jvm(env, app, file_path, game_settings, netplay, weak) }) { eprintln!("JNI error while starting N64Activity: {err:?}"); } @@ -249,93 +256,88 @@ pub fn run_rom( fn start_run_rom_on_jvm( env: &mut Env<'_>, + app: &slint::android::AndroidApp, file_path: std::path::PathBuf, game_settings: ui::GameSettings, netplay: Option, weak: slint::Weak, ) -> jni::errors::Result<()> { - if let Some(app) = ANDROID_APP.blocking_lock().as_ref() { - let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; - let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; + let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; + let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; - let package_name = JString::from_str(env, "io.github.gopher64.gopher64")?; - let class_name = JString::from_str(env, "io.github.gopher64.gopher64.N64Activity")?; + let package_name = JString::from_str(env, "io.github.gopher64.gopher64")?; + let class_name = JString::from_str(env, "io.github.gopher64.gopher64.N64Activity")?; - let file_path_key = JString::from_str(env, "file_path")?; - let file_path = file_path.to_str().unwrap(); - let cheats_path_key = JString::from_str(env, "cheats_path")?; - let cheats_path = app - .internal_data_path() - .unwrap() - .join("cache") - .join("cheats.json"); + let file_path_key = JString::from_str(env, "file_path")?; + let file_path = file_path.to_str().unwrap(); + let cheats_path_key = JString::from_str(env, "cheats_path")?; + let cheats_path = app + .internal_data_path() + .unwrap() + .join("cache") + .join("cheats.json"); - let args_key = JString::from_str(env, "args")?; - let mut args = vec![ - JString::from_str(env, file_path)?, - JString::from_str(env, "--fullscreen")?, - JString::from_str(env, "--overclock")?, - JString::from_str(env, &game_settings.overclock.to_string())?, - JString::from_str(env, "--disable-expansion-pak")?, - JString::from_str(env, &game_settings.disable_expansion_pak.to_string())?, - ]; + let args_key = JString::from_str(env, "args")?; + let mut args = vec![ + JString::from_str(env, file_path)?, + JString::from_str(env, "--fullscreen")?, + JString::from_str(env, "--overclock")?, + JString::from_str(env, &game_settings.overclock.to_string())?, + JString::from_str(env, "--disable-expansion-pak")?, + JString::from_str(env, &game_settings.disable_expansion_pak.to_string())?, + ]; - if let Some(netplay) = netplay { - args.push(JString::from_str(env, "--netplay-server-addr")?); - args.push(JString::from_str(env, &netplay.server_addr)?); - args.push(JString::from_str(env, "--netplay-player-number")?); - args.push(JString::from_str(env, &netplay.player_number.to_string())?); - args.push(JString::from_str(env, "--netplay-number-of-players")?); - args.push(JString::from_str( - env, - &netplay.number_of_players.to_string(), - )?); - args.push(JString::from_str(env, "--netplay-input-delay")?); - args.push(JString::from_str(env, &netplay.input_delay.to_string())?); - args.push(JString::from_str(env, "--cheats")?); - args.push(JString::from_str(env, cheats_path.to_str().unwrap())?); + if let Some(netplay) = netplay { + args.push(JString::from_str(env, "--netplay-server-addr")?); + args.push(JString::from_str(env, &netplay.server_addr)?); + args.push(JString::from_str(env, "--netplay-player-number")?); + args.push(JString::from_str(env, &netplay.player_number.to_string())?); + args.push(JString::from_str(env, "--netplay-number-of-players")?); + args.push(JString::from_str( + env, + &netplay.number_of_players.to_string(), + )?); + args.push(JString::from_str(env, "--netplay-input-delay")?); + args.push(JString::from_str(env, &netplay.input_delay.to_string())?); + args.push(JString::from_str(env, "--cheats")?); + args.push(JString::from_str(env, cheats_path.to_str().unwrap())?); - let f = std::fs::File::create(&cheats_path).unwrap(); - serde_json::to_writer_pretty(f, &game_settings.cheats).unwrap(); - } - - let empty_arg = JString::from_str(env, "")?; - let j_args = JObjectArray::::new(env, args.len(), empty_arg)?; - for (i, arg) in args.iter().enumerate() { - j_args.set_element(env, i, arg)?; - } - - let file_path_string = JString::from_str(env, file_path)?; - let cheats_path_string = JString::from_str(env, cheats_path.to_str().unwrap())?; - let intent = AndroidIntent::new(env)? - .set_class_name(env, &package_name, &class_name)? - .put_extra_string(env, &file_path_key, &file_path_string)? - .put_extra_string(env, &cheats_path_key, &cheats_path_string)? - .put_extra_string_array(env, &args_key, &j_args)?; - - weak.upgrade_in_event_loop(move |handle| handle.set_game_running(true)) - .unwrap(); - - activity - .as_ref() - .start_activity_for_result(env, &intent, RUN_ROM)?; - Ok(()) - } else { - Err(jni::errors::Error::UninitializedJavaVM) + let f = std::fs::File::create(&cheats_path).unwrap(); + serde_json::to_writer_pretty(f, &game_settings.cheats).unwrap(); } + + let empty_arg = JString::from_str(env, "")?; + let j_args = JObjectArray::::new(env, args.len(), empty_arg)?; + for (i, arg) in args.iter().enumerate() { + j_args.set_element(env, i, arg)?; + } + + let file_path_string = JString::from_str(env, file_path)?; + let cheats_path_string = JString::from_str(env, cheats_path.to_str().unwrap())?; + let intent = AndroidIntent::new(env)? + .set_class_name(env, &package_name, &class_name)? + .put_extra_string(env, &file_path_key, &file_path_string)? + .put_extra_string(env, &cheats_path_key, &cheats_path_string)? + .put_extra_string_array(env, &args_key, &j_args)?; + + weak.upgrade_in_event_loop(move |handle| handle.set_game_running(true)) + .unwrap(); + + activity + .as_ref() + .start_activity_for_result(env, &intent, RUN_ROM)?; + Ok(()) } -fn get_vm() -> Option { - if let Some(app) = ANDROID_APP.blocking_lock().as_ref() { - Some(unsafe { JavaVM::from_raw(app.vm_as_ptr().cast()) }) - } else { - None - } +fn get_vm(app: &slint::android::AndroidApp) -> JavaVM { + unsafe { JavaVM::from_raw(app.vm_as_ptr().cast()) } } pub fn decode_path(path: &str) -> String { - if let Some(vm) = get_vm() { - match vm.attach_current_thread(|env| decode_path_on_jvm(env, path)) { + if let Ok(app) = ANDROID_APP.lock() + && let Some(app) = app.as_ref() + { + match get_vm(app).attach_current_thread(|env| decode_path_on_jvm(env, path)) { Ok(decoded_path) => decoded_path, Err(err) => { eprintln!("JNI error while decoding path: {err:?}"); @@ -356,8 +358,10 @@ fn decode_path_on_jvm(env: &mut Env<'_>, path: &str) -> jni::errors::Result Vec { - if let Some(vm) = get_vm() { - match vm.attach_current_thread(list_controllers_on_jvm) { + if let Ok(app) = ANDROID_APP.lock() + && let Some(app) = app.as_ref() + { + match get_vm(app).attach_current_thread(list_controllers_on_jvm) { Ok(controllers) => controllers, Err(err) => { eprintln!("JNI error while listing controllers: {err:?}"); @@ -416,48 +420,53 @@ fn list_controllers_on_jvm(env: &mut Env<'_>) -> jni::errors::Result, path: &str) -> jni::errors::Result<()> { - if let Some(app) = ANDROID_APP.blocking_lock().as_ref() { - let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; - let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; +fn open_uri_on_jvm( + env: &mut Env<'_>, + app: &slint::android::AndroidApp, + path: &str, +) -> jni::errors::Result<()> { + let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; + let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; - let uri_string = JString::from_str(env, path)?; - let uri = AndroidUri::parse(env, &uri_string)?; + let uri_string = JString::from_str(env, path)?; + let uri = AndroidUri::parse(env, &uri_string)?; - let action_view = AndroidIntent::ACTION_VIEW(env)?; - let intent = AndroidIntent::with_action(env, &action_view)?.set_data(env, &uri)?; + let action_view = AndroidIntent::ACTION_VIEW(env)?; + let intent = AndroidIntent::with_action(env, &action_view)?.set_data(env, &uri)?; - activity.as_ref().start_activity(env, &intent)?; - Ok(()) - } else { - Err(jni::errors::Error::UninitializedJavaVM) - } + activity.as_ref().start_activity(env, &intent)?; + Ok(()) } pub async fn select_rom(rom_dir: slint::SharedString) -> Option { - if let Some(vm) = get_vm() { - if let Err(err) = - vm.attach_current_thread(|env| select_rom_on_jvm(env, rom_dir.to_string())) + if let Ok(app) = ANDROID_APP.lock() + && let Some(app) = app.as_ref() + { + if let Err(err) = get_vm(app) + .attach_current_thread(|env| select_rom_on_jvm(env, app, rom_dir.to_string())) { eprintln!("JNI error while opening URI: {err:?}"); return None; } - let (tx, rx) = tokio::sync::oneshot::channel::>(); - SELECT_ROM_TX.lock().await.replace(tx); - - rx.await.unwrap_or(None) } else { eprintln!("Android app not initialized"); - None + return None; } + let (tx, rx) = tokio::sync::oneshot::channel::>(); + SELECT_ROM_TX.lock().await.replace(tx); + + rx.await.unwrap_or(None) } pub async fn select_gb_rom(_player: i32) -> Option { @@ -468,32 +477,34 @@ pub async fn select_gb_ram(_player: i32) -> Option { select_rom(slint::SharedString::new()).await } -fn select_rom_on_jvm(env: &mut Env<'_>, rom_dir: String) -> jni::errors::Result<()> { - if let Some(app) = ANDROID_APP.blocking_lock().as_ref() { - let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; - let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; +fn select_rom_on_jvm( + env: &mut Env<'_>, + app: &slint::android::AndroidApp, + rom_dir: String, +) -> jni::errors::Result<()> { + let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; + let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; - let action = AndroidIntent::ACTION_OPEN_DOCUMENT(env)?; - let category = AndroidIntent::CATEGORY_OPENABLE(env)?; - let mime_type = JString::from_str(env, "*/*")?; - let mut intent = AndroidIntent::with_action(env, &action)? - .set_type(env, &mime_type)? - .add_category(env, &category)?; - if !rom_dir.is_empty() { - let start_dir = JString::from_str(env, rom_dir)?; - let extra_initial_uri = DocumentsContract::EXTRA_INITIAL_URI(env)?; - intent = intent.put_extra_string(env, &extra_initial_uri, &start_dir)?; - } - - activity.start_activity_for_result(env, &intent, REQUEST_SELECT_ROM)?; - Ok(()) - } else { - Err(jni::errors::Error::UninitializedJavaVM) + let action = AndroidIntent::ACTION_OPEN_DOCUMENT(env)?; + let category = AndroidIntent::CATEGORY_OPENABLE(env)?; + let mime_type = JString::from_str(env, "*/*")?; + let mut intent = AndroidIntent::with_action(env, &action)? + .set_type(env, &mime_type)? + .add_category(env, &category)?; + if !rom_dir.is_empty() { + let start_dir = JString::from_str(env, rom_dir)?; + let extra_initial_uri = DocumentsContract::EXTRA_INITIAL_URI(env)?; + intent = intent.put_extra_string(env, &extra_initial_uri, &start_dir)?; } + + activity.start_activity_for_result(env, &intent, REQUEST_SELECT_ROM)?; + Ok(()) } pub fn get_dirs() -> ui::Dirs { - if let Some(app) = ANDROID_APP.blocking_lock().as_ref() { + if let Ok(app) = ANDROID_APP.lock() + && let Some(app) = app.as_ref() + { ui::Dirs { config_dir: app.internal_data_path().unwrap().join("config"), data_dir: app.external_data_path().unwrap().join("data"), @@ -524,9 +535,11 @@ pub fn rom_exists(path: &str) -> bool { } pub fn get_file_from_uri(path: &std::path::PathBuf) -> Option { - if let Some(vm) = get_vm() { + if let Ok(app) = ANDROID_APP.lock() + && let Some(app) = app.as_ref() + { let path = path.to_str().unwrap().into(); - match vm.attach_current_thread(|env| get_file_from_uri_on_jvm(env, path)) { + match get_vm(app).attach_current_thread(|env| get_file_from_uri_on_jvm(env, app, path)) { Ok(file) => file, Err(err) => { eprintln!("JNI error while opening URI: {err:?}"); @@ -541,30 +554,26 @@ pub fn get_file_from_uri(path: &std::path::PathBuf) -> Option { fn get_file_from_uri_on_jvm( env: &mut Env<'_>, + app: &slint::android::AndroidApp, path: String, ) -> jni::errors::Result> { - if let Some(app) = ANDROID_APP.blocking_lock().as_ref() { - let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; - let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; - let path = JString::from_str(env, path)?; - let mode = JString::from_str(env, "r")?; - let uri = AndroidUri::parse(env, &path)?; + let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; + let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? }; + let path = JString::from_str(env, path)?; + let mode = JString::from_str(env, "r")?; + let uri = AndroidUri::parse(env, &path)?; - let content_resolver = activity.as_ref().get_content_resolver(env)?; - let parcel_file_descriptor = content_resolver.open_file_descriptor(env, &uri, &mode); - if let Ok(descriptor) = parcel_file_descriptor - && !descriptor.is_null() - { - let owned_fd = unsafe { std::os::fd::OwnedFd::from_raw_fd(descriptor.detach_fd(env)?) }; - let file = std::fs::File::from(owned_fd); - descriptor.close(env)?; - return Ok(Some(file)); - } else { - return Ok(None); - } + let content_resolver = activity.as_ref().get_content_resolver(env)?; + let parcel_file_descriptor = content_resolver.open_file_descriptor(env, &uri, &mode); + if let Ok(descriptor) = parcel_file_descriptor + && !descriptor.is_null() + { + let owned_fd = unsafe { std::os::fd::OwnedFd::from_raw_fd(descriptor.detach_fd(env)?) }; + let file = std::fs::File::from(owned_fd); + descriptor.close(env)?; + return Ok(Some(file)); } else { - eprintln!("Android app not initialized"); - return Err(jni::errors::Error::UninitializedJavaVM); + return Ok(None); } } @@ -593,7 +602,9 @@ pub extern "system" fn Java_io_github_gopher64_gopher64_SlintActivity_nativeOnAc return Ok(()); } - if let Some(app) = ANDROID_APP.blocking_lock().as_ref() { + if let Ok(app) = ANDROID_APP.lock() + && let Some(app) = app.as_ref() + { let raw_activity_global = app.activity_as_ptr() as jni::sys::jobject; let activity = unsafe { env.as_cast_raw::>(&raw_activity_global)? @@ -614,7 +625,9 @@ pub extern "system" fn Java_io_github_gopher64_gopher64_SlintActivity_nativeOnAc } } CONFIGURE_INPUT_PROFILE => { - if let Some(weak_app_window) = WEAK_SLINT_WINDOW.blocking_lock().as_ref() { + if let Ok(weak_app_window) = WEAK_SLINT_WINDOW.lock() + && let Some(weak_app_window) = weak_app_window.as_ref() + { let config = ui::config::Config::new(); ui::gui::update_input_profiles(&weak_app_window, &config); } @@ -636,7 +649,9 @@ pub extern "system" fn Java_io_github_gopher64_gopher64_SlintActivity_nativeOnAc { let _ = std::fs::remove_file(cheats_path); } - if let Some(weak_app_window) = WEAK_SLINT_WINDOW.blocking_lock().as_ref() { + if let Ok(weak_app_window) = WEAK_SLINT_WINDOW.lock() + && let Some(weak_app_window) = weak_app_window.as_ref() + { weak_app_window .upgrade_in_event_loop(move |handle| { ui::gui::update_recent_roms(&handle, file_path.into()); From ba0a21feca9af8a2b69a53cc963e7a7f47f058cb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 23 Jun 2026 16:52:27 +0200 Subject: [PATCH 1076/1117] register tx early (#1114) --- src/ui/android.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ui/android.rs b/src/ui/android.rs index 75765b7..1c3363a 100644 --- a/src/ui/android.rs +++ b/src/ui/android.rs @@ -450,6 +450,9 @@ fn open_uri_on_jvm( } pub async fn select_rom(rom_dir: slint::SharedString) -> Option { + let (tx, rx) = tokio::sync::oneshot::channel::>(); + SELECT_ROM_TX.lock().await.replace(tx); + if let Ok(app) = ANDROID_APP.lock() && let Some(app) = app.as_ref() { @@ -463,8 +466,6 @@ pub async fn select_rom(rom_dir: slint::SharedString) -> Option>(); - SELECT_ROM_TX.lock().await.replace(tx); rx.await.unwrap_or(None) } From cc420013f90a53dd9d52a4fe3c17f97aa8c233f6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 23 Jun 2026 18:37:14 +0200 Subject: [PATCH 1077/1117] add sleep while waiting for state (#1115) * add sleep while waiting for state * more * more --- src/savestates.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/savestates.rs b/src/savestates.rs index 32f6655..21cf91f 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -214,13 +214,18 @@ pub fn load_savestate(device: &mut device::Device, rewind: bool, rewind_frame: O let timeout = std::time::Duration::from_secs(1); let now = std::time::Instant::now(); loop { - let mut pool = device.savestate.rewind_pool.blocking_lock(); - if pool.contains_key(&rewind_frame) { - break pool.remove(&rewind_frame); + if let Some(state) = device + .savestate + .rewind_pool + .blocking_lock() + .remove(&rewind_frame) + { + break Some(state); } if now.elapsed() > timeout { break None; } + std::thread::sleep(std::time::Duration::from_millis(1)); } } else if let Some((_key, state)) = device.savestate.rewind_pool.blocking_lock().pop_last() { From 926338ba627cc888f0d5d852274693f106b9f8eb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 24 Jun 2026 14:52:56 +0200 Subject: [PATCH 1078/1117] fix desync issue (#1116) * fix desync issue * more * more * more * more --- src/netplay.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index c769e1c..5535539 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -278,10 +278,11 @@ pub fn process_requests( let hash = u128::from_be_bytes(hasher.finalize()[..16].try_into().unwrap()); cell.save(frame, Some(frame), Some(hash)); } - ggrs::GgrsRequest::LoadGameState { cell: _, frame: _ } => { - // if let Some(frame) = cell.load() { - // savestates::load_savestate(device, true, Some(frame)); - // } + ggrs::GgrsRequest::LoadGameState { cell, frame: _ } => { + eprintln!("attempting to load game state"); + if let Some(_frame) = cell.load() { + // savestates::load_savestate(device, true, Some(frame)); + } } ggrs::GgrsRequest::AdvanceFrame { inputs } => { return inputs; @@ -338,7 +339,12 @@ fn process_netplay(device: &mut device::Device) { fn advance_frame(device: &mut device::Device) { let netplay = device.netplay.as_mut().unwrap(); - let local_input = ui::input::get(&mut device.ui, 0, device.speed_limiter.frame_counter); + let local_input = if netplay.session.current_frame() > netplay.session.max_prediction() as i32 { + ui::input::get(&mut device.ui, 0, device.speed_limiter.frame_counter) + } else { + //workaround for disabled rollback + ui::input::InputData::default() + }; let local_handle = *netplay.session.local_player_handles().first().unwrap(); netplay .session From 5b5acfdd254f9a1e107963f5da1e98d9d24e6451 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 24 Jun 2026 17:04:14 +0200 Subject: [PATCH 1079/1117] update slint (#1117) * update slint * more --- Cargo.lock | 799 +++++++++++++++---------------------- src/ui/gui/appwindow.slint | 2 +- src/ui/gui/side_bar.slint | 5 + 3 files changed, 325 insertions(+), 481 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b60c194..e92b76a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -20,38 +20,56 @@ checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" [[package]] name = "accesskit" -version = "0.22.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eca13c82f9a5cd813120b2e9b6a5d10532c6e4cd140c295cebd1f770095c8a5" +checksum = "d3b7f7f85a7e5f68090000ed7622545829afd484d210358702ae4cb97dd0c320" +dependencies = [ + "uuid 1.23.3", +] [[package]] name = "accesskit_atspi_common" -version = "0.15.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eb9cc46b7fb6987c4f891f0301b230b29d9e69b4854f060a0cf41fbc407ab77" +checksum = "7e98018dbef3583d751dbb96e07b8728fb99581360e1c3df408af16f4a80b821" dependencies = [ "accesskit", "accesskit_consumer", "atspi-common", + "phf", "serde", "zvariant", ] [[package]] name = "accesskit_consumer" -version = "0.32.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d880a613f29621c90e801feec40f5dd61d837d7e20bf9b67676d45e7364a36" +checksum = "f950720ce064757a1b629caad3a408e8d2c63bb01f29b8a3ff8daa331053ffeb" dependencies = [ "accesskit", "hashbrown 0.16.1", ] [[package]] -name = "accesskit_macos" -version = "0.23.0" +name = "accesskit_ios" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0ddfc3fe3d457d11cc1c4989105986a03583a1d54d0c25053118944b62e100" +checksum = "02ecb52198c7cf5f8d3e9ffc03d2ca0a5c7201926befd96721437829da4c5c6a" +dependencies = [ + "accesskit", + "accesskit_consumer", + "hashbrown 0.16.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", + "objc2-ui-kit 0.2.2", +] + +[[package]] +name = "accesskit_macos" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17cb8b66cef272d48161b02a6317cc2bdd5f98bb0a5e79c68f704a5862aa396b" dependencies = [ "accesskit", "accesskit_consumer", @@ -63,9 +81,9 @@ dependencies = [ [[package]] name = "accesskit_unix" -version = "0.18.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d552169ef018149966ed139bb0311c6947b3343e9140d1b9f88d69da9528fd" +checksum = "5376ba4cc23312587634abb5250b1ce8618f01a55915608209aafd01efb4bf8c" dependencies = [ "accesskit", "accesskit_atspi_common", @@ -81,25 +99,26 @@ dependencies = [ [[package]] name = "accesskit_windows" -version = "0.30.0" +version = "0.33.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d277279d0a3b0c0021dd110b55aa1fe326b09ee2cbc338df28f847c7daf94e25" +checksum = "36e93ac7bf50b964f1cbb75f741629a4e950571baa1ef1274457ab5a80d9bcc2" dependencies = [ "accesskit", "accesskit_consumer", "hashbrown 0.16.1", "static_assertions", - "windows 0.61.3", - "windows-core 0.61.2", + "windows", + "windows-core", ] [[package]] name = "accesskit_winit" -version = "0.30.0" +version = "0.33.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db08dff285306264a1de127ea07bb9e7a1ed71bd8593c168d0731caa782516c9" +checksum = "41fe5862066316f6caaf02cd3aecd54bced25503ac5dbbfd0d03a42bc1246217" dependencies = [ "accesskit", + "accesskit_ios", "accesskit_macos", "accesskit_unix", "accesskit_windows", @@ -852,18 +871,18 @@ dependencies = [ [[package]] name = "bit-set" -version = "0.8.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +checksum = "34ddef2995421ab6a5c779542c81ee77c115206f4ad9d5a8e05f4ff49716a3dd" dependencies = [ "bit-vec", ] [[package]] name = "bit-vec" -version = "0.8.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" +checksum = "b71798fca2c1fe1086445a7258a4bc81e6e49dcd24c8d0dd9a1e57395b603f51" [[package]] name = "bit_field" @@ -905,12 +924,6 @@ dependencies = [ "no_std_io2", ] -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - [[package]] name = "block-buffer" version = "0.10.4" @@ -1219,9 +1232,9 @@ dependencies = [ [[package]] name = "chacha20" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" +checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" dependencies = [ "cfg-if", "cpufeatures 0.3.0", @@ -1251,7 +1264,7 @@ dependencies = [ "js-sys", "num-traits", "wasm-bindgen", - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -1370,9 +1383,9 @@ dependencies = [ [[package]] name = "codespan-reporting" -version = "0.12.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" +checksum = "af491d569909a7e4dee0ad7db7f5341fef5c614d5b8ec8cf765732aba3cff681" dependencies = [ "serde", "termcolor", @@ -1506,7 +1519,7 @@ checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ "bitflags 1.3.2", "core-foundation 0.9.4", - "core-graphics-types 0.1.3", + "core-graphics-types", "foreign-types 0.5.0", "libc", ] @@ -1522,17 +1535,6 @@ dependencies = [ "libc", ] -[[package]] -name = "core-graphics-types" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" -dependencies = [ - "bitflags 2.13.0", - "core-foundation 0.10.1", - "libc", -] - [[package]] name = "core_maths" version = "0.1.1" @@ -2235,14 +2237,14 @@ dependencies = [ [[package]] name = "femtovg" -version = "0.23.2" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727c5dd9d601f3f4ea133b8a6ba37d37ca67ed59781675dc1c9c9f1701e0d197" +checksum = "f43d05da42e81724c16d34a150fb7fda53d3f786e5a94673ee526ff8602f0f6a" dependencies = [ "bitflags 2.13.0", "bytemuck", "fnv", - "glow 0.17.0", + "glow", "imgref", "itertools 0.14.0", "log", @@ -2296,6 +2298,17 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +[[package]] +name = "fixed_decimal" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79c3c892f121fff406e5dd6b28c1b30096b95111c30701a899d4f2b18da6d1bd" +dependencies = [ + "displaydoc", + "smallvec", + "writeable", +] + [[package]] name = "flate2" version = "1.1.9" @@ -2354,11 +2367,11 @@ dependencies = [ [[package]] name = "fontique" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23358480a54a886d51b306718d5ca743fdfe238e5df38ef650f4e72f29c5d9e9" +checksum = "274fa4f0f0a926ae182c7c076c078cce8a38471d15e61a102a02cac984be9813" dependencies = [ - "hashbrown 0.16.1", + "hashbrown 0.17.1", "linebender_resource_handle", "memmap2", "objc2 0.6.4", @@ -2366,11 +2379,11 @@ dependencies = [ "objc2-core-text", "objc2-foundation 0.3.2", "parlance", - "read-fonts 0.37.0", + "read-fonts", "roxmltree", "smallvec", - "windows 0.62.2", - "windows-core 0.62.2", + "windows", + "windows-core", "yeslogic-fontconfig-sys", ] @@ -2554,7 +2567,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" dependencies = [ "rustix 1.1.4", - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -2679,18 +2692,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "glow" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" -dependencies = [ - "js-sys", - "slotmap", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "glow" version = "0.17.0" @@ -2823,7 +2824,7 @@ dependencies = [ "log", "presser", "thiserror 2.0.18", - "windows 0.62.2", + "windows", ] [[package]] @@ -2896,14 +2897,13 @@ dependencies = [ [[package]] name = "harfrust" -version = "0.5.2" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9da2e5ae821f6e96664977bf974d6d6a2d6682f9ccee23e62ec1d134246845f9" +checksum = "d12c7c642d4ce8c2e784b4751a6634bd89583912265add4a679a8882d123fbcd" dependencies = [ "bitflags 2.13.0", "bytemuck", - "core_maths", - "read-fonts 0.37.0", + "read-fonts", "smallvec", ] @@ -2947,6 +2947,9 @@ name = "hashbrown" version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "foldhash 0.2.0", +] [[package]] name = "heapless" @@ -3152,13 +3155,14 @@ dependencies = [ [[package]] name = "i-slint-backend-android-activity" -version = "1.16.1" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a318b5aebc2ad8e6fdbac8588984d9ea2e99a210449954717073d8a246e12fe7" +checksum = "3a69c405bd541532766a2d059ae21c562191881d2394fe112fc97f3aa9708a94" dependencies = [ "android-activity 0.5.2", "android-activity 0.6.1", "android-build", + "i-slint-common", "i-slint-core", "i-slint-renderer-skia", "jni 0.22.4", @@ -3168,9 +3172,9 @@ dependencies = [ [[package]] name = "i-slint-backend-linuxkms" -version = "1.16.1" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3224c3aa9f3ea568daf38389d0f7ace164eda4d6f1851042eb83750ac43e1a65" +checksum = "54e6cb54b264cac4aa4968d6b5d4f4240a89ae8d9153659391ac57b6e4757a9f" dependencies = [ "calloop 0.14.4", "cfg_aliases", @@ -3179,17 +3183,18 @@ dependencies = [ "i-slint-core", "i-slint-renderer-femtovg", "input", - "nix 0.30.1", + "nix 0.31.3", "xkbcommon", ] [[package]] name = "i-slint-backend-selector" -version = "1.16.1" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93c9c4203e0a2c5c396b8f1686160816f73e9b9cadaf3915aa3b888a83448aa" +checksum = "74e252fd16064a10f7a0f105fef01b634cc6b6bebb0331f2cdc6da94e15d326d" dependencies = [ "cfg-if", + "cfg_aliases", "i-slint-backend-android-activity", "i-slint-backend-linuxkms", "i-slint-backend-winit", @@ -3201,9 +3206,9 @@ dependencies = [ [[package]] name = "i-slint-backend-winit" -version = "1.16.1" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4df6ec88d452e3c22e418d20c96bc1ccbc9509e81e6596426d3388bf226a5f9" +checksum = "a66940b16cbc6f6fc14363c8dd220497b503946146408907ecf071fdd6794973" dependencies = [ "accesskit", "accesskit_winit", @@ -3237,29 +3242,33 @@ dependencies = [ "wasm-bindgen", "web-sys", "webbrowser", - "windows 0.62.2", + "windows", "winit", "zbus", ] [[package]] name = "i-slint-common" -version = "1.16.1" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40cae5cd0a81ce044029ac303256e025f98a4c59495b5189fc22b588da094e01" +checksum = "c4be292acd6d591cf376f2338786b0c95faddb79fdbce4ff89f840daf2d7bac4" dependencies = [ "derive_more", "fontique", "htmlparser", + "icu_decimal", + "icu_locale_core", + "icu_provider", "pulldown-cmark", - "skrifa 0.40.0", + "resvg", + "skrifa", ] [[package]] name = "i-slint-compiler" -version = "1.16.1" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7b7f9834faf2a62cc36f01decc7c683e66bb0861b53511723c3da9ad914d9bb" +checksum = "290c2247e87d3653b9b7c3bc1cbe19647b2f93a4b99a40aae6a7140717700d37" dependencies = [ "annotate-snippets", "by_address", @@ -3279,7 +3288,7 @@ dependencies = [ "resvg", "rowan", "rspolib", - "skrifa 0.40.0", + "skrifa", "smol_str 0.3.6", "strum", "swash", @@ -3290,9 +3299,9 @@ dependencies = [ [[package]] name = "i-slint-core" -version = "1.16.1" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e4a57afd78d8a1f599a78781dc1413af68545b2bc5ba5e143ecf022c75d5f3" +checksum = "1b7d306bc9d6fe1d1fd5e775837ec1fa1e41d1c8063789181b7de631bd5db41c" dependencies = [ "auto_enums", "bitflags 2.13.0", @@ -3311,6 +3320,9 @@ dependencies = [ "lyon_geom", "lyon_path", "num-traits", + "objc2 0.6.4", + "objc2-app-kit 0.3.2", + "objc2-foundation 0.3.2", "once_cell", "parley", "pin-project", @@ -3319,9 +3331,8 @@ dependencies = [ "raw-window-handle", "resvg", "rgb", - "scoped-tls-hkt", "scopeguard", - "skrifa 0.40.0", + "skrifa", "slab", "strum", "swash", @@ -3335,13 +3346,14 @@ dependencies = [ "web-sys", "web-time", "wgpu", + "windows", ] [[package]] name = "i-slint-core-macros" -version = "1.16.1" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7931356d5238281e6be994ec15241fb2d9e66359776d53b4bd6b2fdd9c257c6e" +checksum = "4e66e7fc31239ceba98646825614df8148abc30f8326296c4d762008cc22ddff" dependencies = [ "quote", "serde_json", @@ -3350,15 +3362,15 @@ dependencies = [ [[package]] name = "i-slint-renderer-femtovg" -version = "1.16.1" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b28a8f0a7a777e670fbe2af6cbcec4935c37335bc0dab100f73bdc197dfa3a" +checksum = "c1a430c5adbd652119a5d37673b424ce3516903e192d73848919153e503c6d4d" dependencies = [ "cfg-if", "const-field-offset", "derive_more", "femtovg", - "glow 0.17.0", + "glow", "i-slint-common", "i-slint-core", "i-slint-core-macros", @@ -3373,9 +3385,9 @@ dependencies = [ [[package]] name = "i-slint-renderer-skia" -version = "1.16.1" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4030ff9eeb1b99fdf9b47472f3a7a582f3bcb57207c9bc07505dc6998abdcbc" +checksum = "e1c8e1e1351ed5d3b40211b5a6e5a8597cd541726f94b880ed71693bdbe519c4" dependencies = [ "ash", "bytemuck", @@ -3384,14 +3396,12 @@ dependencies = [ "clru", "const-field-offset", "derive_more", - "foreign-types 0.5.0", - "glow 0.17.0", + "glow", "glutin", "i-slint-common", "i-slint-core", "i-slint-core-macros", "lyon_path", - "metal 0.31.0", "objc2 0.6.4", "objc2-app-kit 0.3.2", "objc2-core-foundation", @@ -3401,7 +3411,7 @@ dependencies = [ "pin-weak", "raw-window-handle", "raw-window-metal", - "read-fonts 0.37.0", + "read-fonts", "scoped-tls-hkt", "skia-safe", "softbuffer", @@ -3409,16 +3419,16 @@ dependencies = [ "unicode-segmentation", "vtable", "wgpu", - "windows 0.62.2", - "windows-core 0.62.2", + "windows", + "windows-core", "write-fonts", ] [[package]] name = "i-slint-renderer-software" -version = "1.16.1" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee8a21285f3a81a8e1b1e7c385eefe89bf9487f53fabfd5b238c68bc895d6013" +checksum = "c5b4d1e212e5eed5a2ea7b7c693f152e6a50df84e2305060de13557e4b864d18" dependencies = [ "bytemuck", "clru", @@ -3429,7 +3439,7 @@ dependencies = [ "integer-sqrt", "lyon_path", "num-traits", - "skrifa 0.40.0", + "skrifa", "swash", "zeno", ] @@ -3446,7 +3456,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.62.2", + "windows-core", ] [[package]] @@ -3472,6 +3482,29 @@ dependencies = [ "zerovec", ] +[[package]] +name = "icu_decimal" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "288247df2e32aa776ac54fdd64de552149ac43cb840f2761811f0e8d09719dd4" +dependencies = [ + "displaydoc", + "fixed_decimal", + "icu_decimal_data", + "icu_locale", + "icu_locale_core", + "icu_plurals", + "icu_provider", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_decimal_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f14a5ca9e8af29eef62064f269078424283d90dbaffeac5225addf62aaabc22" + [[package]] name = "icu_locale" version = "2.2.0" @@ -3527,6 +3560,25 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" +[[package]] +name = "icu_plurals" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a50023f1d49ad5c4333380328a0d4a19e4b9d6d842ec06639affd5ba47c8103" +dependencies = [ + "fixed_decimal", + "icu_locale", + "icu_plurals_data", + "icu_provider", + "zerovec", +] + +[[package]] +name = "icu_plurals_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8485497155dc865f901decb93ecc20d3e467df67bfeceb91e3ba34e2b11e8e1d" + [[package]] name = "icu_properties" version = "2.2.0" @@ -3620,7 +3672,7 @@ dependencies = [ "image-webp", "moxcms", "num-traits", - "png 0.18.1", + "png", "qoi", "ravif", "rayon", @@ -3684,9 +3736,9 @@ dependencies = [ [[package]] name = "input" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" +checksum = "f9793345a65d71317763a33066b5d8351f8760dde8d4930fe9e39b5f14a7959d" dependencies = [ "bitflags 2.13.0", "input-sys", @@ -3847,7 +3899,7 @@ dependencies = [ "simd_cesu8", "thiserror 2.0.18", "walkdir", - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -4002,7 +4054,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -4170,15 +4222,6 @@ dependencies = [ "sha2 0.11.0", ] -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - [[package]] name = "matchbox_protocol" version = "0.14.0" @@ -4276,36 +4319,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "metal" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" -dependencies = [ - "bitflags 2.13.0", - "block", - "core-graphics-types 0.1.3", - "foreign-types 0.5.0", - "log", - "objc", - "paste", -] - -[[package]] -name = "metal" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7047791b5bc903b8cd963014b355f71dc9864a9a0b727057676c1dcae5cbc15" -dependencies = [ - "bitflags 2.13.0", - "block", - "core-graphics-types 0.2.0", - "foreign-types 0.5.0", - "log", - "objc", - "paste", -] - [[package]] name = "mimalloc" version = "0.1.52" @@ -4360,9 +4373,9 @@ dependencies = [ [[package]] name = "muda" -version = "0.18.0" +version = "0.19.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b20e2339ef964849496bd6dab1bcd8ceb7a3a5a268dc64c8b84c833e75d66dab" +checksum = "1dd04e60bc0b07438a6771710ee1698f98f6ebbc7f89b61264af1563b8aeb878" dependencies = [ "crossbeam-channel", "dpi", @@ -4372,9 +4385,9 @@ dependencies = [ "objc2-core-foundation", "objc2-foundation 0.3.2", "once_cell", - "png 0.17.16", + "png", "thiserror 2.0.18", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -4399,9 +4412,9 @@ dependencies = [ [[package]] name = "naga" -version = "28.0.0" +version = "29.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "618f667225063219ddfc61251087db8a9aec3c3f0950c916b614e403486f1135" +checksum = "0dd91265cc2454558f659b3b4b9640f0ddb8cc6521277f166b8a8c181c898079" dependencies = [ "arrayvec", "bit-set", @@ -4520,9 +4533,9 @@ dependencies = [ [[package]] name = "nix" -version = "0.30.1" +version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" +checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d" dependencies = [ "bitflags 2.13.0", "cfg-if", @@ -4643,15 +4656,6 @@ dependencies = [ "syn", ] -[[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-sys" version = "0.3.5" @@ -4928,6 +4932,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794" dependencies = [ "bitflags 2.13.0", + "block2 0.6.2", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -5216,7 +5221,7 @@ dependencies = [ "libc", "redox_syscall 0.5.18", "smallvec", - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -5227,27 +5232,27 @@ checksum = "4b6937eda350acc1a5d05872c3cbf99fe78619c269096e2be3d4a350058639d5" [[package]] name = "parley" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6c00ec192e1a402861526eff91a4b4690a2e5a17a4ae2deb772d72b49daf868" +checksum = "6b1cfcf399c774719fb1fa51bc6b91e86bdf003b03202a0902f1827ba6750746" dependencies = [ "fontique", "harfrust", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "icu_normalizer", "icu_properties", "icu_segmenter", "linebender_resource_handle", "parlance", "parley_data", - "skrifa 0.40.0", + "skrifa", ] [[package]] name = "parley_data" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "232313eddc02ac27f015e8f8eeb7facce8a896116df7e3eda1bfd9f600a9a39d" +checksum = "d1d3755e2cc12c0625b0cd2f2773c6a37dd11d1531940c945ade4aeb78f2b145" dependencies = [ "icu_properties", ] @@ -5315,6 +5320,49 @@ dependencies = [ "rustc_version", ] +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_macros", + "phf_shared", + "serde", +] + +[[package]] +name = "phf_generator" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +dependencies = [ + "fastrand", + "phf_shared", +] + +[[package]] +name = "phf_macros" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher", +] + [[package]] name = "pico-args" version = "0.5.0" @@ -5392,19 +5440,6 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" -[[package]] -name = "png" -version = "0.17.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" -dependencies = [ - "bitflags 1.3.2", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide", -] - [[package]] name = "png" version = "0.18.1" @@ -5722,7 +5757,7 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" dependencies = [ - "chacha20 0.10.0", + "chacha20 0.10.1", "getrandom 0.4.3", "rand_core 0.10.1", "serde", @@ -5880,17 +5915,6 @@ dependencies = [ "yasna", ] -[[package]] -name = "read-fonts" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b634fabf032fab15307ffd272149b622260f55974d9fad689292a5d33df02e5" -dependencies = [ - "bytemuck", - "core_maths", - "font-types", -] - [[package]] name = "read-fonts" version = "0.39.2" @@ -6624,9 +6648,9 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbbd24232798280d6bc896e3429a3469174de008ec8b1b591a96618b46664195" +checksum = "081a399c6762c4a9bda9233f502aca74b6ca6a0caaff4d218b12887eac4b6adc" dependencies = [ "aes 0.9.1", "bzip2", @@ -6764,9 +6788,9 @@ checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" [[package]] name = "skia-bindings" -version = "0.90.0" +version = "0.99.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6f96e00735f14a781aac8a6870c862b8cc831df6d8e4ad77ab78e11411b9af" +checksum = "3e2d1c3ebd697c0cbded0145e9204a38fa6b268446051b7196d0a096414ea7f3" dependencies = [ "bindgen", "cc", @@ -6776,28 +6800,18 @@ dependencies = [ "regex", "serde_json", "tar", - "toml 0.9.12+spec-1.1.0", + "toml", ] [[package]] name = "skia-safe" -version = "0.90.0" +version = "0.99.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a71c01d325d40b1031dee67d251a5e0132e79e2a9ec272149a4f4a0d4b8b3be" +checksum = "9f512ac418a64194842dd05566320805dad1c957c521039db2486fd6368865bc" dependencies = [ "bitflags 2.13.0", "skia-bindings", - "windows 0.62.2", -] - -[[package]] -name = "skrifa" -version = "0.40.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fbdfe3d2475fbd7ddd1f3e5cf8288a30eb3e5f95832829570cd88115a7434ac" -dependencies = [ - "bytemuck", - "read-fonts 0.37.0", + "windows", ] [[package]] @@ -6807,7 +6821,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c34617370ae968efb7161bb2beb517d9084659aae19e24b89e3db25b46e4564" dependencies = [ "bytemuck", - "read-fonts 0.39.2", + "read-fonts", ] [[package]] @@ -6818,9 +6832,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "slint" -version = "1.16.1" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d46bc502cc6b113bfd1a7e9a0876532a9454ff4ee905afe09784eaa2ec3f3f33" +checksum = "a54a407d1a0cbaa71d830ae7c236064b171368ea18db3b51ea3f2ce3f19519ee" dependencies = [ "const-field-offset", "i-slint-backend-android-activity", @@ -6841,9 +6855,9 @@ dependencies = [ [[package]] name = "slint-build" -version = "1.16.1" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a73854b9adf81fa1600b46df488ffc3796400e8e9b40d504a94a36b55c8f3d0a" +checksum = "fc34415cacfde72e062d7e9c2bdd764429f5946870647c9f605fb7066a82015c" dependencies = [ "derive_more", "fontique", @@ -6854,9 +6868,9 @@ dependencies = [ [[package]] name = "slint-macros" -version = "1.16.1" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d5884e06072c329da7096ad1367eb83b98c78e5313f7ac90d66f90d4acc62ee" +checksum = "b74e0f959111e906199c743a3d7d59926f9d47823b462f6e6555bf8777275749" dependencies = [ "i-slint-compiler", "proc-macro2", @@ -7062,9 +7076,9 @@ dependencies = [ [[package]] name = "spirv" -version = "0.3.0+sdk-1.3.268.0" +version = "0.4.0+sdk-1.4.341.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" +checksum = "d9571ea910ebd84c86af4b3ed27f9dbdc6ad06f17c5f96146b2b671e2976744f" dependencies = [ "bitflags 2.13.0", ] @@ -7177,7 +7191,7 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0811b01ca2c4e8718760713911feaf4675c24f94e50530a015ec646cfb622f7c" dependencies = [ - "skrifa 0.42.1", + "skrifa", "yazi", "zeno", ] @@ -7248,9 +7262,9 @@ dependencies = [ [[package]] name = "taffy" -version = "0.9.2" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41ba83ebaf2954d31d05d67340fd46cebe99da2b7133b0dd68d70c65473a437b" +checksum = "aea22054047c16c3f34d3ac473a2170be1424b1115b2a3adcf28cfb067c88859" dependencies = [ "arrayvec", "grid", @@ -7407,7 +7421,7 @@ dependencies = [ "bytemuck", "cfg-if", "log", - "png 0.18.1", + "png", "tiny-skia-path 0.12.0", ] @@ -7548,21 +7562,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "toml" -version = "0.9.12+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" -dependencies = [ - "indexmap", - "serde_core", - "serde_spanned", - "toml_datetime 0.7.5+spec-1.1.0", - "toml_parser", - "toml_writer", - "winnow 0.7.15", -] - [[package]] name = "toml" version = "1.1.2+spec-1.1.0" @@ -7572,19 +7571,10 @@ dependencies = [ "indexmap", "serde_core", "serde_spanned", - "toml_datetime 1.1.1+spec-1.1.0", + "toml_datetime", "toml_parser", "toml_writer", - "winnow 1.0.3", -] - -[[package]] -name = "toml_datetime" -version = "0.7.5+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" -dependencies = [ - "serde_core", + "winnow", ] [[package]] @@ -7603,10 +7593,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" dependencies = [ "indexmap", - "toml_datetime 1.1.1+spec-1.1.0", + "toml_datetime", "toml_parser", "toml_writer", - "winnow 1.0.3", + "winnow", ] [[package]] @@ -7615,7 +7605,7 @@ version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow 1.0.3", + "winnow", ] [[package]] @@ -8512,9 +8502,9 @@ checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" [[package]] name = "wgpu" -version = "28.0.0" +version = "29.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9cb534d5ffd109c7d1135f34cdae29e60eab94855a625dcfe1705f8bc7ad79f" +checksum = "bb3feacc458f7bee8bc1737149b42b6c731aa461039a4264a67bb6681646b250" dependencies = [ "arrayvec", "bitflags 2.13.0", @@ -8542,9 +8532,9 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "28.0.1" +version = "29.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d23f4642f53f666adcfd2d3218ab174d1e6681101aef18696b90cbe64d1c10f9" +checksum = "02da3ad1b568337f25513b317870960ef87073ea0945502e44b864b67a8c77b7" dependencies = [ "arrayvec", "bit-set", @@ -8569,53 +8559,53 @@ dependencies = [ "wgpu-core-deps-emscripten", "wgpu-core-deps-windows-linux-android", "wgpu-hal", + "wgpu-naga-bridge", "wgpu-types", ] [[package]] name = "wgpu-core-deps-apple" -version = "28.0.0" +version = "29.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87b7b696b918f337c486bf93142454080a32a37832ba8a31e4f48221890047da" +checksum = "62e51b5447e144b3dbba4feb01f80f4fa21696fa0cd99afb2c3df1affd6fdb28" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-core-deps-emscripten" -version = "28.0.0" +version = "29.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34b251c331f84feac147de3c4aa3aa45112622a95dd7ee1b74384fa0458dbd79" +checksum = "3487cd6293a963bc5c0c0396f6a2192043c50003c07f4efdccbad3d90ec9d819" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-core-deps-windows-linux-android" -version = "28.0.0" +version = "29.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ca976e72b2c9964eb243e281f6ce7f14a514e409920920dcda12ae40febaae" +checksum = "1bfb01076d0aa08b0ba9bd741e178b5cc440f5abe99d9581323a4c8b5d1a1916" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-hal" -version = "28.0.1" +version = "29.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d6cb474beb218824dcc9e1ce679d973f719262789bfb27407da560cac20eeb" +checksum = "31f8e1a9e7a8512f276f7c62e018c7fa8d60954303fed2e5750114332049193f" dependencies = [ "android_system_properties", "arrayvec", "ash", "bit-set", "bitflags 2.13.0", - "block", + "block2 0.6.2", "bytemuck", "cfg-if", "cfg_aliases", - "core-graphics-types 0.2.0", - "glow 0.16.0", + "glow", "glutin_wgl_sys", "gpu-allocator", "gpu-descriptor", @@ -8625,10 +8615,13 @@ dependencies = [ "libc", "libloading", "log", - "metal 0.33.0", "naga", "ndk-sys 0.6.0+11769913", - "objc", + "objc2 0.6.4", + "objc2-core-foundation", + "objc2-foundation 0.3.2", + "objc2-metal 0.3.2", + "objc2-quartz-core 0.3.2", "once_cell", "ordered-float", "parking_lot", @@ -8637,26 +8630,41 @@ dependencies = [ "profiling", "range-alloc", "raw-window-handle", + "raw-window-metal", "renderdoc-sys", "smallvec", "thiserror 2.0.18", "wasm-bindgen", + "wayland-sys", "web-sys", + "wgpu-naga-bridge", + "wgpu-types", + "windows", + "windows-core", + "windows-result", +] + +[[package]] +name = "wgpu-naga-bridge" +version = "29.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59c654c483f058800972c3645e95388a7eca31bf9fe1933bc20e036588a0be02" +dependencies = [ + "naga", "wgpu-types", - "windows 0.62.2", - "windows-core 0.62.2", ] [[package]] name = "wgpu-types" -version = "28.0.0" +version = "29.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e18308757e594ed2cd27dddbb16a139c42a683819d32a2e0b1b0167552f5840c" +checksum = "a9bcc31518a0e9735aefebedb5f7a9ef3ed1c42549c9f4c882fa9060ceaac639" dependencies = [ "bitflags 2.13.0", "bytemuck", "js-sys", "log", + "raw-window-handle", "web-sys", ] @@ -8691,38 +8699,16 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows" -version = "0.61.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" -dependencies = [ - "windows-collections 0.2.0", - "windows-core 0.61.2", - "windows-future 0.2.1", - "windows-link 0.1.3", - "windows-numerics 0.2.0", -] - [[package]] name = "windows" version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" dependencies = [ - "windows-collections 0.3.2", - "windows-core 0.62.2", - "windows-future 0.3.2", - "windows-numerics 0.3.1", -] - -[[package]] -name = "windows-collections" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" -dependencies = [ - "windows-core 0.61.2", + "windows-collections", + "windows-core", + "windows-future", + "windows-numerics", ] [[package]] @@ -8731,20 +8717,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" dependencies = [ - "windows-core 0.62.2", -] - -[[package]] -name = "windows-core" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-link 0.1.3", - "windows-result 0.3.4", - "windows-strings 0.4.2", + "windows-core", ] [[package]] @@ -8755,20 +8728,9 @@ checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement", "windows-interface", - "windows-link 0.2.1", - "windows-result 0.4.1", - "windows-strings 0.5.1", -] - -[[package]] -name = "windows-future" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" -dependencies = [ - "windows-core 0.61.2", - "windows-link 0.1.3", - "windows-threading 0.1.0", + "windows-link", + "windows-result", + "windows-strings", ] [[package]] @@ -8777,9 +8739,9 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" dependencies = [ - "windows-core 0.62.2", - "windows-link 0.2.1", - "windows-threading 0.2.1", + "windows-core", + "windows-link", + "windows-threading", ] [[package]] @@ -8804,36 +8766,20 @@ dependencies = [ "syn", ] -[[package]] -name = "windows-link" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" - [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" -[[package]] -name = "windows-numerics" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" -dependencies = [ - "windows-core 0.61.2", - "windows-link 0.1.3", -] - [[package]] name = "windows-numerics" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" dependencies = [ - "windows-core 0.62.2", - "windows-link 0.2.1", + "windows-core", + "windows-link", ] [[package]] @@ -8842,18 +8788,9 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" dependencies = [ - "windows-link 0.2.1", - "windows-result 0.4.1", - "windows-strings 0.5.1", -] - -[[package]] -name = "windows-result" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" -dependencies = [ - "windows-link 0.1.3", + "windows-link", + "windows-result", + "windows-strings", ] [[package]] @@ -8862,16 +8799,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link 0.2.1", -] - -[[package]] -name = "windows-strings" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" -dependencies = [ - "windows-link 0.1.3", + "windows-link", ] [[package]] @@ -8880,7 +8808,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -8919,22 +8847,13 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.5", -] - [[package]] name = "windows-sys" version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -8976,46 +8895,20 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", + "windows_i686_gnullvm", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] -[[package]] -name = "windows-targets" -version = "0.53.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" -dependencies = [ - "windows-link 0.2.1", - "windows_aarch64_gnullvm 0.53.1", - "windows_aarch64_msvc 0.53.1", - "windows_i686_gnu 0.53.1", - "windows_i686_gnullvm 0.53.1", - "windows_i686_msvc 0.53.1", - "windows_x86_64_gnu 0.53.1", - "windows_x86_64_gnullvm 0.53.1", - "windows_x86_64_msvc 0.53.1", -] - -[[package]] -name = "windows-threading" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" -dependencies = [ - "windows-link 0.1.3", -] - [[package]] name = "windows-threading" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" dependencies = [ - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -9036,12 +8929,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" - [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -9060,12 +8947,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" - [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -9084,24 +8965,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" -[[package]] -name = "windows_i686_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" - [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" - [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -9120,12 +8989,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_i686_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" - [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -9144,12 +9007,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" - [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -9168,12 +9025,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" - [[package]] name = "windows_x86_64_msvc" version = "0.42.2" @@ -9192,12 +9043,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" - [[package]] name = "winit" version = "0.30.13" @@ -9250,12 +9095,6 @@ dependencies = [ "xkbcommon-dl", ] -[[package]] -name = "winnow" -version = "0.7.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" - [[package]] name = "winnow" version = "1.0.3" @@ -9271,7 +9110,7 @@ version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0986a8b1d586b7d3e4fe3d9ea39fb451ae22869dcea4aa109d287a374d866087" dependencies = [ - "toml 1.1.2+spec-1.1.0", + "toml", "version_check", ] @@ -9283,15 +9122,15 @@ checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" [[package]] name = "write-fonts" -version = "0.45.0" +version = "0.48.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12725b0845073e20b04e79b500dbfb465904d7cbd84883a1f1bbd084debc515" +checksum = "cb731d4c4d93eacc69a1ad2f270f905788a98e4a3438267bcafbe08d3431c8d8" dependencies = [ "font-types", "indexmap", "kurbo", "log", - "read-fonts 0.37.0", + "read-fonts", ] [[package]] @@ -9533,7 +9372,7 @@ dependencies = [ "uds_windows", "uuid 1.23.3", "windows-sys 0.61.2", - "winnow 1.0.3", + "winnow", "zbus_macros", "zbus_names", "zvariant", @@ -9585,7 +9424,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d" dependencies = [ "serde", - "winnow 1.0.3", + "winnow", "zvariant", ] @@ -9815,7 +9654,7 @@ dependencies = [ "endi", "enumflags2", "serde", - "winnow 1.0.3", + "winnow", "zvariant_derive", "zvariant_utils", ] @@ -9843,5 +9682,5 @@ dependencies = [ "quote", "serde", "syn", - "winnow 1.0.3", + "winnow", ] diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index c006bde..eedc2bc 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -135,7 +135,7 @@ export component AppWindow inherits Window { min-width: 320px; min-height: 240px; preferred-width: 800px; - preferred-height: 600px; + preferred-height: 650px; title: "Gopher64"; icon: @image-url("../../../data/icon/gopher64.png"); diff --git a/src/ui/gui/side_bar.slint b/src/ui/gui/side_bar.slint index 5d1566c..a31e354 100644 --- a/src/ui/gui/side_bar.slint +++ b/src/ui/gui/side_bar.slint @@ -82,6 +82,11 @@ component SideBarItem inherits Rectangle { } button := SideBarButton { + Tooltip { + Text { + text: root.label; + } + } icon: root.icon; selected: root.selected; has-focus: root.has-focus; From d6b46037b433c8370d6e99ed41d015bf92e1c6ff Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 24 Jun 2026 22:44:38 +0200 Subject: [PATCH 1080/1117] update netplay connection (#1118) --- src/netplay.rs | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index 5535539..190b57a 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -442,17 +442,29 @@ pub fn init( device.cpu.running = true; while device.cpu.running { - socket.update_peers(); - let peers = socket + if socket + .update_peers() + .iter() + .any(|(_, peer_state)| *peer_state == matchbox_socket::PeerState::Disconnected) + { + // if someone has disconnected, reset the timeout + now = std::time::Instant::now(); + } + + let connected_peers = socket .connected_peers() .collect::>(); - if peers.len() == netplay_config.number_of_players - 1 { + if connected_peers.len() == netplay_config.number_of_players - 1 { player_numbers.insert(netplay_config.player_number, None); - send_player_number(socket.channel_mut(1), &peers, netplay_config.player_number); + send_player_number( + socket.channel_mut(1), + &connected_peers, + netplay_config.player_number, + ); get_player_numbers(socket.channel_mut(1), &mut player_numbers); if player_numbers.len() == netplay_config.number_of_players - && verify_peers(&peers, &player_numbers) + && verify_peers(&connected_peers, &player_numbers) { break; } @@ -465,7 +477,10 @@ pub fn init( if message_timer.elapsed() > std::time::Duration::from_secs(4) { ui::video::onscreen_message( - "Still connecting to netplay peers...\nPlease wait...", + &format!( + "Still connecting to {} netplay peer(s)...\nPlease wait...", + netplay_config.number_of_players - player_numbers.len() + ), ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, ); message_timer = std::time::Instant::now(); From 5d090f496b891afb7120b82b834ff5df5e6f55a6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 25 Jun 2026 08:41:33 +0200 Subject: [PATCH 1081/1117] update ggrs (#1119) --- Cargo.lock | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e92b76a..256d8af 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -24,7 +24,7 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3b7f7f85a7e5f68090000ed7622545829afd484d210358702ae4cb97dd0c320" dependencies = [ - "uuid 1.23.3", + "uuid 1.23.4", ] [[package]] @@ -2619,7 +2619,7 @@ dependencies = [ [[package]] name = "ggrs" version = "0.12.0" -source = "git+https://github.com/gschup/ggrs.git#76d48eebf25291bb7adc9c150ac7c1898fa2fe89" +source = "git+https://github.com/gschup/ggrs.git#aa61f9a5f8f8025d70dba5237cce6db8b6da87ea" dependencies = [ "bincode 1.3.3", "bitfield-rle", @@ -3955,9 +3955,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.102" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03d04c30968dffe80775bd4d7fb676131cd04a1fb46d2686dbffbaec2d9dfd31" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" dependencies = [ "cfg-if", "futures-util", @@ -4231,7 +4231,7 @@ dependencies = [ "cfg-if", "derive_more", "serde", - "uuid 1.23.3", + "uuid 1.23.4", ] [[package]] @@ -6140,7 +6140,7 @@ dependencies = [ "rend", "rkyv_derive", "tinyvec", - "uuid 1.23.3", + "uuid 1.23.4", ] [[package]] @@ -7969,9 +7969,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.23.3" +version = "1.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" +checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53" dependencies = [ "getrandom 0.4.3", "js-sys", @@ -8082,9 +8082,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.125" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ddb3f79143bced6de84270411622a2699cee572fc0875aeaf1e7867cf9fca1a" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" dependencies = [ "cfg-if", "once_cell", @@ -8095,9 +8095,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.75" +version = "0.4.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "503b14d284f2c8dac03b819967e155ea753f573586193b2b2c95990cb5d69280" +checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" dependencies = [ "js-sys", "wasm-bindgen", @@ -8105,9 +8105,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.125" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e21a184b13fb19e157296e2c46056aec9092264fab83e4ba59e68c61b323c3d" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -8115,9 +8115,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.125" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fecefd9c35bd935a20fc3fc344b5f29138961e4f47fb03297d88f2587afb5ebd" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" dependencies = [ "bumpalo", "proc-macro2", @@ -8128,9 +8128,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.125" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23939e44bb9a5d7576fa2b563dc2e136628f1224e88a8deed09e04858b77871f" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" dependencies = [ "unicode-ident", ] @@ -8272,9 +8272,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.102" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6430a72df5eb332242960fe84b3002a241163998241eb596d4f739b9757061d" +checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" dependencies = [ "js-sys", "wasm-bindgen", @@ -8401,7 +8401,7 @@ dependencies = [ "tokio", "turn", "url", - "uuid 1.23.3", + "uuid 1.23.4", "waitgroup", "webrtc-mdns", "webrtc-util", @@ -9370,7 +9370,7 @@ dependencies = [ "serde_repr", "tracing", "uds_windows", - "uuid 1.23.3", + "uuid 1.23.4", "windows-sys 0.61.2", "winnow", "zbus_macros", From c97f14980b3641c08e3d0fdc6f2f9bdbfa1913cd Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 25 Jun 2026 14:28:09 +0200 Subject: [PATCH 1082/1117] show proper number of players (#1121) --- src/netplay.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index 190b57a..aa0ed41 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -433,7 +433,8 @@ pub fn init( let mut now = std::time::Instant::now(); let mut message_timer = now; let socket_timeout = std::time::Duration::from_secs_f64(rand::random_range(8.0..10.0)); - let mut player_numbers = std::collections::BTreeMap::new(); + let mut player_numbers = + std::collections::BTreeMap::from([(netplay_config.player_number, None)]); ui::video::onscreen_message( "Connecting to netplay peers...\nPlease wait...", @@ -456,7 +457,6 @@ pub fn init( .collect::>(); if connected_peers.len() == netplay_config.number_of_players - 1 { - player_numbers.insert(netplay_config.player_number, None); send_player_number( socket.channel_mut(1), &connected_peers, @@ -470,7 +470,7 @@ pub fn init( } } else if now.elapsed() > socket_timeout { socket.close(); - player_numbers.clear(); + player_numbers.retain(|_, peer| peer.is_none()); socket = create_socket(builder.clone()); now = std::time::Instant::now(); } From 08e7ec71d9738cb87e1e3733a059bdc46ad56ad4 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 25 Jun 2026 15:09:18 +0200 Subject: [PATCH 1083/1117] clippy fix (#1123) * clippy fix * more --- Cargo.lock | 2 +- src/netplay.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 256d8af..78b9839 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2619,7 +2619,7 @@ dependencies = [ [[package]] name = "ggrs" version = "0.12.0" -source = "git+https://github.com/gschup/ggrs.git#aa61f9a5f8f8025d70dba5237cce6db8b6da87ea" +source = "git+https://github.com/gschup/ggrs.git#d260417700bef25482ba0861587905f643385e14" dependencies = [ "bincode 1.3.3", "bitfield-rle", diff --git a/src/netplay.rs b/src/netplay.rs index aa0ed41..089466b 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -387,7 +387,7 @@ fn verify_peers( peers: &[matchbox_socket::PeerId], player_numbers: &std::collections::BTreeMap>, ) -> bool { - for (_, peer) in player_numbers.iter() { + for peer in player_numbers.values() { if let Some(peer) = peer && !peers.contains(peer) { From a659413090b03b74295c2cc709ff449807253138 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 25 Jun 2026 15:09:55 +0200 Subject: [PATCH 1084/1117] bump ver (#1124) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 78b9839..d26154c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2772,7 +2772,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.30" +version = "1.1.32" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index 825becb..56a68e3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.30" +version = "1.1.32" edition = "2024" rust-version = "1.96.0" From 7a797165fd4f328630795fac0f61235c1048f699 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 26 Jun 2026 09:23:50 +0200 Subject: [PATCH 1085/1117] Fix translation for 'Open Saves Folder' in Portuguese (#1125) --- data/translations/pt_BR/LC_MESSAGES/gopher64.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/translations/pt_BR/LC_MESSAGES/gopher64.po b/data/translations/pt_BR/LC_MESSAGES/gopher64.po index 1449b0a..9da9df7 100644 --- a/data/translations/pt_BR/LC_MESSAGES/gopher64.po +++ b/data/translations/pt_BR/LC_MESSAGES/gopher64.po @@ -180,7 +180,7 @@ msgstr "Abrir ROM" #: src/ui/gui/localgame_page.slint:37 msgctxt "LocalGame" msgid "Open Saves Folder" -msgstr "Abrir Partes de Saves" +msgstr "Abrir Pasta de Saves" #: src/ui/gui/localgame_page.slint:54 msgctxt "LocalGame" From e257ba717bff4e3f99bd1c46d42b767894431501 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 27 Jun 2026 10:19:14 +0200 Subject: [PATCH 1086/1117] update ggrs (#1127) --- Cargo.lock | 9 +++++---- Cargo.toml | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d26154c..b286d28 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -351,9 +351,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" [[package]] name = "arbitrary" @@ -2618,8 +2618,9 @@ dependencies = [ [[package]] name = "ggrs" -version = "0.12.0" -source = "git+https://github.com/gschup/ggrs.git#d260417700bef25482ba0861587905f643385e14" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "672a16c1d778ad2d7a6218700ba0863a9e510e9446b08f3644460a9884aed048" dependencies = [ "bincode 1.3.3", "bitfield-rle", diff --git a/Cargo.toml b/Cargo.toml index 56a68e3..d3a9882 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,7 +26,7 @@ mimalloc = "0.1" regex = "1.11" tokio-tungstenite = { version = "0.29", features = ["native-tls-vendored"] } matchbox_socket = "0.14" -ggrs = { git = "https://github.com/gschup/ggrs.git", features = ["sync-send"] } +ggrs = { version = "0.13", features = ["sync-send"] } rustc-hash = "2.1" futures = "0.3" rand = { version = "0.10", features = ["serde"] } From 0eddf31f92b37b1ff706c479b38bbaafe1c7a9de Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 29 Jun 2026 11:53:00 +0200 Subject: [PATCH 1087/1117] update contributing guidelines (#1130) --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 351ebe5..40d8bbf 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,9 @@ flatpak run --filesystem=host:ro io.github.gopher64.gopher64 /path/to/rom.z64 ## contributing -I am very open to contributions! Please contact me via a GitHub issue or Discord (loganmc10) before doing substantial work on a PR. +I would prefer that people did not submit PRs that are vibe coded and/or co-authored by AI agents. If you are going to submit a PR, and especially if you are going to submit a PR that is AI-assisted, it should be scoped to a single feature/improvement. + +Please contact me via a GitHub issue or Discord (loganmc10) before doing substantial work on a PR. ## license From 01a53ce1c04a08db9d155351f853ab0f561ffab8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 29 Jun 2026 21:37:33 +0200 Subject: [PATCH 1088/1117] use no-intro names in netplay/cheats (#1133) * use no-intro names in netplay/cheats * more * more --- Cargo.lock | 15 +- Cargo.toml | 1 + ...tendo 64 (DB Export) (20260609-194259).xml | 22233 ++++++++++++++++ src/lib.rs | 8 +- src/ui/cheats.rs | 8 +- src/ui/gui.rs | 65 +- src/ui/netplay.rs | 18 +- 7 files changed, 22335 insertions(+), 13 deletions(-) create mode 100644 data/ui/Nintendo - Nintendo 64 (DB Export) (20260609-194259).xml diff --git a/Cargo.lock b/Cargo.lock index b286d28..8979243 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2790,6 +2790,7 @@ dependencies = [ "mimalloc", "open", "postcard", + "quick-xml 0.40.1", "rand 0.10.1", "regex", "reqwest", @@ -5701,6 +5702,16 @@ dependencies = [ "serde", ] +[[package]] +name = "quick-xml" +version = "0.40.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2474bd2e5029e7ccb6abb2ba48cf2383a333851dedf495901544281590c7da7f" +dependencies = [ + "memchr", + "tokio", +] + [[package]] name = "quote" version = "1.0.46" @@ -8255,7 +8266,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c324a910fd86ebdc364a3e61ec1f11737d3b1d6c273c0239ee8ff4bc0d24b4a" dependencies = [ "proc-macro2", - "quick-xml", + "quick-xml 0.39.4", "quote", ] @@ -9435,7 +9446,7 @@ version = "5.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8067892e940ed1727dea64690378601603b31d62dfde019a5335fbb7c0e0ed9" dependencies = [ - "quick-xml", + "quick-xml 0.39.4", "serde", "zbus_names", "zvariant", diff --git a/Cargo.toml b/Cargo.toml index d3a9882..b728c8e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,6 +36,7 @@ postcard = { version = "1.1", features = ["use-std"] } clap = { version = "4.5", features = ["derive"] } reqwest = { version = "0.13", default-features = false, features = ["native-tls-vendored", "charset", "http2", "system-proxy", "json", "query"] } discord-rich-presence = "1.1" +quick-xml = { version = "0.40", features = ["async-tokio"] } [target.'cfg(not(target_os = "android"))'.dependencies] slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "unstable-winit-030", "backend-winit", "renderer-femtovg-wgpu", "accessibility"], optional = true } diff --git a/data/ui/Nintendo - Nintendo 64 (DB Export) (20260609-194259).xml b/data/ui/Nintendo - Nintendo 64 (DB Export) (20260609-194259).xml new file mode 100644 index 0000000..b76ec5d --- /dev/null +++ b/data/ui/Nintendo - Nintendo 64 (DB Export) (20260609-194259).xml @@ -0,0 +1,22233 @@ + +

            + 20260609-194259 + No-Intro + https://www.no-intro.org + Product names used in this file are registered trademarks of their respective owners, with which No-Intro is in no way associated or affiliated. These trademarks of other manufacturers are used solely to identify said products. + Piracy harms consumers as well as legitimate developers, publishers and retailers. No-Intro does not help or encourage users to download or otherwise obtain any of the listed dumps. No-Intro is not in the Console Scene and is not involved in any P2P sharing. +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + + + + +
            + + + + + +
            + + + + + + + + +
            + + + + + + \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index c2855c5..69fbee0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -334,8 +334,10 @@ pub fn run(args: Args, arg_count: usize) -> std::io::Result<()> { #[cfg(feature = "gui")] { let app = ui::gui::AppWindow::new().unwrap(); + let no_intro_map = + std::sync::Arc::new(tokio::sync::Mutex::new(rustc_hash::FxHashMap::default())); set_app_id(); - ui::gui::app_window(&app, false); + ui::gui::app_window(&app, false, no_intro_map); } } @@ -380,7 +382,9 @@ fn android_main(app: slint::android::AndroidApp) { std::fs::create_dir_all(dirs.data_dir.join("saves")).unwrap(); std::fs::create_dir_all(dirs.data_dir.join("states")).unwrap(); - ui::gui::app_window(&app_window, true); + let no_intro_map = + std::sync::Arc::new(tokio::sync::Mutex::new(rustc_hash::FxHashMap::default())); + ui::gui::app_window(&app_window, true, no_intro_map); close_tx.send(()).unwrap(); *android::WEAK_SLINT_WINDOW.lock().unwrap() = None; *android::ANDROID_APP.lock().unwrap() = None; diff --git a/src/ui/cheats.rs b/src/ui/cheats.rs index 7b84d26..dadc73a 100644 --- a/src/ui/cheats.rs +++ b/src/ui/cheats.rs @@ -3,17 +3,21 @@ use crate::ui::gui::AppWindow; use crate::{cheats, device}; use slint::ComponentHandle; -pub fn cheats_window(app: &AppWindow) { +pub fn cheats_window( + app: &AppWindow, + no_intro_map: std::sync::Arc>>, +) { let weak = app.as_weak(); app.on_cheats_select_rom_clicked(move |rom_dir| { let select_rom = ui::gui::select_rom(rom_dir); let weak = weak.clone(); + let no_intro_map = no_intro_map.clone(); tokio::spawn(async move { if let Some(file) = select_rom.await && let Some(rom_contents) = device::get_rom_contents(&file) { let game_crc = ui::storage::get_game_crc(&rom_contents); - let game_name = ui::storage::get_game_name(&rom_contents); + let game_name = ui::gui::get_nointro_name(&rom_contents, no_intro_map).await; weak.upgrade_in_event_loop(move |handle| { handle.set_cheat_game_name(game_name.into()); }) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 54fcc57..60d59f9 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -1,3 +1,4 @@ +use crate::device; use crate::retroachievements; use crate::ui; #[cfg(target_os = "android")] @@ -521,7 +522,16 @@ fn about_window(app: &AppWindow) { } } -pub fn app_window(app: &AppWindow, is_android: bool) { +pub fn app_window( + app: &AppWindow, + is_android: bool, + no_intro_map: std::sync::Arc>>, +) { + let no_intro_map_clone = no_intro_map.clone(); + tokio::spawn(async move { + load_no_intro(no_intro_map_clone).await; + }); + retroachievements::init_client(false, false, false); app.set_is_android(is_android); about_window(app); @@ -532,8 +542,8 @@ pub fn app_window(app: &AppWindow, is_android: bool) { controller_window(app, &config); local_game_window(app, &config); } - ui::netplay::netplay_window(app); - ui::cheats::cheats_window(app); + ui::netplay::netplay_window(app, no_intro_map.clone()); + ui::cheats::cheats_window(app, no_intro_map); #[cfg(not(target_os = "android"))] { @@ -657,6 +667,55 @@ pub fn update_recent_roms(app: &AppWindow, file_path: std::path::PathBuf) { app.set_recent_roms(slint::ModelRc::from(std::rc::Rc::new(recent_roms))); } +pub async fn get_nointro_name( + rom: &[u8], + no_intro_map: std::sync::Arc>>, +) -> String { + let hash = device::cart::rom::calculate_hash(rom).to_lowercase(); + if let Some(name) = no_intro_map.lock().await.get(&hash) { + name.clone() + } else { + ui::storage::get_game_name(rom) + } +} + +async fn load_no_intro( + no_intro_map: std::sync::Arc>>, +) { + let mut reader = quick_xml::Reader::from_str(include_str!( + "../../data/ui/Nintendo - Nintendo 64 (DB Export) (20260609-194259).xml" + )); + let mut buf = Vec::new(); + let mut current_game = String::new(); + let mut map = no_intro_map.lock().await; + loop { + match reader.read_event_into_async(&mut buf).await { + Ok(quick_xml::events::Event::Start(e)) => { + if e.name().as_ref() == b"game" + && let Ok(Some(name_attribute)) = e.try_get_attribute("name") + && let Ok(name) = String::from_utf8(name_attribute.value.into_owned()) + { + current_game = name; + } + } + Ok(quick_xml::events::Event::Empty(e)) => { + if e.name().as_ref() == b"file" + && let Ok(Some(format_attribute)) = e.try_get_attribute("format") + && format_attribute.value.as_ref() == b"BigEndian" + && let Ok(Some(sha256_attribute)) = e.try_get_attribute("sha256") + && let Ok(sha256) = String::from_utf8(sha256_attribute.value.into_owned()) + { + map.insert(sha256.to_lowercase(), current_game.clone()); + } + } + Err(e) => panic!("Error at position {}: {:?}", reader.error_position(), e), + Ok(quick_xml::events::Event::Eof) => break, + _ => (), + } + buf.clear(); + } +} + pub async fn select_rom(rom_dir: slint::SharedString) -> Option { #[cfg(target_os = "android")] return ui::android::select_rom(rom_dir).await; diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 9aab429..3e14dda 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -65,13 +65,17 @@ struct NetplayPingMessage { num_of_peers: usize, } -fn select_rom(weak: slint::Weak, rom_dir: slint::SharedString) { +fn select_rom( + weak: slint::Weak, + rom_dir: slint::SharedString, + no_intro_map: std::sync::Arc>>, +) { let select_rom = ui::gui::select_rom(rom_dir); tokio::spawn(async move { if let Some(file) = select_rom.await { if let Some(rom_contents) = device::get_rom_contents(&file) { let hash = device::cart::rom::calculate_hash(&rom_contents); - let mut game_name = ui::storage::get_game_name(&rom_contents); + let mut game_name = ui::gui::get_nointro_name(&rom_contents, no_intro_map).await; let pal = device::cart::rom::is_system_pal(&rom_contents); let game_crc = ui::storage::get_game_crc(&rom_contents); let cheats = ui::config::Cheats::new(); @@ -108,6 +112,7 @@ fn select_rom(weak: slint::Weak, rom_dir: slint::SharedString) { }); } +#[allow(clippy::too_many_arguments)] fn setup_callbacks( app: &AppWindow, netplay_write_sender: &tokio::sync::broadcast::Sender>, @@ -116,6 +121,7 @@ fn setup_callbacks( netplay_write_receiver: &tokio::sync::broadcast::Receiver>, close_ping_tx: &tokio::sync::broadcast::Sender<()>, close_ping_rx: &tokio::sync::broadcast::Receiver<()>, + no_intro_map: std::sync::Arc>>, ) { let weak = app.as_weak(); let netplay_write_sender_create_session = netplay_write_sender.clone(); @@ -238,7 +244,7 @@ fn setup_callbacks( let weak_app = app.as_weak(); app.on_netplay_select_rom(move |rom_dir| { - select_rom(weak_app.clone(), rom_dir); + select_rom(weak_app.clone(), rom_dir, no_intro_map.clone()); }); let weak_app = app.as_weak(); @@ -992,7 +998,10 @@ fn setup_join_window( app.invoke_netplay_refresh_sessions(); } -pub fn netplay_window(app: &AppWindow) { +pub fn netplay_window( + app: &AppWindow, + no_intro_map: std::sync::Arc>>, +) { let (netplay_read_sender, netplay_read_receiver): ( tokio::sync::broadcast::Sender>, tokio::sync::broadcast::Receiver>, @@ -1016,5 +1025,6 @@ pub fn netplay_window(app: &AppWindow) { &netplay_write_receiver, &close_ping_tx, &close_ping_rx, + no_intro_map, ); } From c8eee9f727d0d58e7fcc9bc18fae111be6840441 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 30 Jun 2026 07:23:38 +0200 Subject: [PATCH 1089/1117] don't copy from db (#1136) --- Cargo.lock | 1 - Cargo.toml | 2 +- src/ui/gui.rs | 10 +++++++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8979243..a825a0e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5709,7 +5709,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2474bd2e5029e7ccb6abb2ba48cf2383a333851dedf495901544281590c7da7f" dependencies = [ "memchr", - "tokio", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index b728c8e..4bb8c32 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,7 +36,7 @@ postcard = { version = "1.1", features = ["use-std"] } clap = { version = "4.5", features = ["derive"] } reqwest = { version = "0.13", default-features = false, features = ["native-tls-vendored", "charset", "http2", "system-proxy", "json", "query"] } discord-rich-presence = "1.1" -quick-xml = { version = "0.40", features = ["async-tokio"] } +quick-xml = "0.40" [target.'cfg(not(target_os = "android"))'.dependencies] slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "unstable-winit-030", "backend-winit", "renderer-femtovg-wgpu", "accessibility"], optional = true } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 60d59f9..a9ca3ee 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -685,11 +685,10 @@ async fn load_no_intro( let mut reader = quick_xml::Reader::from_str(include_str!( "../../data/ui/Nintendo - Nintendo 64 (DB Export) (20260609-194259).xml" )); - let mut buf = Vec::new(); let mut current_game = String::new(); let mut map = no_intro_map.lock().await; loop { - match reader.read_event_into_async(&mut buf).await { + match reader.read_event() { Ok(quick_xml::events::Event::Start(e)) => { if e.name().as_ref() == b"game" && let Ok(Some(name_attribute)) = e.try_get_attribute("name") @@ -698,12 +697,18 @@ async fn load_no_intro( current_game = name; } } + Ok(quick_xml::events::Event::End(e)) => { + if e.name().as_ref() == b"game" { + current_game.clear(); + } + } Ok(quick_xml::events::Event::Empty(e)) => { if e.name().as_ref() == b"file" && let Ok(Some(format_attribute)) = e.try_get_attribute("format") && format_attribute.value.as_ref() == b"BigEndian" && let Ok(Some(sha256_attribute)) = e.try_get_attribute("sha256") && let Ok(sha256) = String::from_utf8(sha256_attribute.value.into_owned()) + && !current_game.is_empty() { map.insert(sha256.to_lowercase(), current_game.clone()); } @@ -712,7 +717,6 @@ async fn load_no_intro( Ok(quick_xml::events::Event::Eof) => break, _ => (), } - buf.clear(); } } From 6e11bc18d609c4043b345f5afe733fbe96c39212 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 30 Jun 2026 07:24:48 +0200 Subject: [PATCH 1090/1117] translation tweaks (#1137) --- data/translations/pt_BR/LC_MESSAGES/gopher64.po | 6 +++--- data/translations/ru/LC_MESSAGES/gopher64.po | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/translations/pt_BR/LC_MESSAGES/gopher64.po b/data/translations/pt_BR/LC_MESSAGES/gopher64.po index 9da9df7..45966de 100644 --- a/data/translations/pt_BR/LC_MESSAGES/gopher64.po +++ b/data/translations/pt_BR/LC_MESSAGES/gopher64.po @@ -10,7 +10,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/ui/gui/about_page.slint:17 msgctxt "NewVersionButton" @@ -200,7 +200,7 @@ msgstr "Nome da Sessão:" #: src/ui/gui/netplay_create.slint:26 msgctxt "NetplayCreate" msgid "Enter session name" -msgstr "Insira nome da sessão:" +msgstr "Insira nome da sessão" #: src/ui/gui/netplay_create.slint:36 msgctxt "NetplayCreate" @@ -364,7 +364,7 @@ msgstr "Nome do Jogo:" #: src/ui/gui/netplay_wait.slint:45 msgctxt "NetplayWait" msgid "Player 1:" -msgstr "Jogador 1" +msgstr "Jogador 1:" #: src/ui/gui/netplay_wait.slint:49 msgctxt "NetplayWait" diff --git a/data/translations/ru/LC_MESSAGES/gopher64.po b/data/translations/ru/LC_MESSAGES/gopher64.po index 8a828f6..f5f938d 100644 --- a/data/translations/ru/LC_MESSAGES/gopher64.po +++ b/data/translations/ru/LC_MESSAGES/gopher64.po @@ -10,7 +10,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: src/ui/gui/about_page.slint:17 msgctxt "NewVersionButton" From ad756cd6bd19cfab9c2a1e4747f1c4dce660e205 Mon Sep 17 00:00:00 2001 From: 999sian <71638559+999sian@users.noreply.github.com> Date: Tue, 30 Jun 2026 10:17:12 +0100 Subject: [PATCH 1091/1117] settings: add a dark/light theme toggle (#1132) * settings: add dark/light theme toggle * i18n: translate theme selector strings * settings: align Resolution and Theme dropdowns in a GridBox --- data/translations/de/LC_MESSAGES/gopher64.po | 62 +++++++++++------ data/translations/es/LC_MESSAGES/gopher64.po | 66 ++++++++++++------- data/translations/fr/LC_MESSAGES/gopher64.po | 66 ++++++++++++------- data/translations/gopher64.pot | 62 +++++++++++------ data/translations/ja/LC_MESSAGES/gopher64.po | 62 +++++++++++------ data/translations/nl/LC_MESSAGES/gopher64.po | 62 +++++++++++------ .../pt_BR/LC_MESSAGES/gopher64.po | 66 ++++++++++++------- data/translations/ru/LC_MESSAGES/gopher64.po | 62 +++++++++++------ src/ui/config.rs | 3 + src/ui/gui.rs | 2 + src/ui/gui/appwindow.slint | 16 +++++ src/ui/gui/settings_page.slint | 42 ++++++++---- 12 files changed, 384 insertions(+), 187 deletions(-) diff --git a/data/translations/de/LC_MESSAGES/gopher64.po b/data/translations/de/LC_MESSAGES/gopher64.po index 4c8619e..b4c9253 100644 --- a/data/translations/de/LC_MESSAGES/gopher64.po +++ b/data/translations/de/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-16 12:26+0000\n" +"POT-Creation-Date: 2026-06-29 10:49+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: German\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Spenden (über GitHub)" -#: src/ui/gui/appwindow.slint:148 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "Local Game" msgstr "Lokales Spiel" -#: src/ui/gui/appwindow.slint:152 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "Controller Config" msgstr "Controller-Konfiguration" -#: src/ui/gui/appwindow.slint:156 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:160 +#: src/ui/gui/appwindow.slint:176 msgctxt "Menu" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:180 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:184 msgctxt "Menu" msgid "Settings" msgstr "Einstellungen" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:188 msgctxt "Menu" msgid "About" msgstr "Über" @@ -486,67 +486,87 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Unterstützte Spiele anzeigen" -#: src/ui/gui/settings_page.slint:24 +#: src/ui/gui/settings_page.slint:25 msgctxt "Settings" msgid "Settings" msgstr "Einstellungen" -#: src/ui/gui/settings_page.slint:35 +#: src/ui/gui/settings_page.slint:36 msgctxt "Settings" msgid "Resolution:" msgstr "Auflösung:" -#: src/ui/gui/settings_page.slint:49 +#: src/ui/gui/settings_page.slint:52 +msgctxt "Settings" +msgid "Theme:" +msgstr "Thema:" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "System" +msgstr "System" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "Dark" +msgstr "Dunkel" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "Light" +msgstr "Hell" + +#: src/ui/gui/settings_page.slint:66 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAA-Herunterskalierung" -#: src/ui/gui/settings_page.slint:57 +#: src/ui/gui/settings_page.slint:74 msgctxt "Settings" msgid "Integer Scaling" msgstr "Pixelgenaue Skalierung" -#: src/ui/gui/settings_page.slint:65 +#: src/ui/gui/settings_page.slint:82 msgctxt "Settings" msgid "Fullscreen" msgstr "Vollbild" -#: src/ui/gui/settings_page.slint:73 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "16:9 (gestreckt)" -#: src/ui/gui/settings_page.slint:81 +#: src/ui/gui/settings_page.slint:98 msgctxt "Settings" msgid "VSync" msgstr "VSync" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:106 msgctxt "Settings" msgid "Apply CRT shader" msgstr "CRT-Shader anwenden" -#: src/ui/gui/settings_page.slint:101 +#: src/ui/gui/settings_page.slint:118 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "N64-CPU übertakten (kann Fehler verursachen)" -#: src/ui/gui/settings_page.slint:109 +#: src/ui/gui/settings_page.slint:126 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Expansion Pak deaktivieren" -#: src/ui/gui/settings_page.slint:117 +#: src/ui/gui/settings_page.slint:134 msgctxt "Settings" msgid "Enable Rewind" msgstr "Rewind aktivieren" -#: src/ui/gui/settings_page.slint:125 +#: src/ui/gui/settings_page.slint:142 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "UNFLoader emulieren" -#: src/ui/gui/settings_page.slint:133 +#: src/ui/gui/settings_page.slint:150 msgctxt "Settings" msgid "Emulate VRU" msgstr "VRU emulieren" diff --git a/data/translations/es/LC_MESSAGES/gopher64.po b/data/translations/es/LC_MESSAGES/gopher64.po index 4816245..577e654 100644 --- a/data/translations/es/LC_MESSAGES/gopher64.po +++ b/data/translations/es/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-16 12:26+0000\n" +"POT-Creation-Date: 2026-06-29 10:49+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: Gemini\n" "Language-Team: Spanish (Spain)\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Donar (a través de GitHub)" -#: src/ui/gui/appwindow.slint:148 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "Local Game" msgstr "Juego local" -#: src/ui/gui/appwindow.slint:152 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "Controller Config" msgstr "Config. del mando" -#: src/ui/gui/appwindow.slint:156 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:160 +#: src/ui/gui/appwindow.slint:176 msgctxt "Menu" msgid "Cheats" msgstr "Trucos" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:180 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:184 msgctxt "Menu" msgid "Settings" msgstr "Ajustes" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:188 msgctxt "Menu" msgid "About" msgstr "Acerca de" @@ -399,8 +399,8 @@ msgid "" msgstr "" "Configurar un retardo de entrada demasiado bajo hará que el juego se " "ralentice.\n" -"Puedes reducir el retardo de entrada en el juego pulsando Alt+[ y " -"aumentarlo con Alt+]." +"Puedes reducir el retardo de entrada en el juego pulsando Alt+[ y aumentarlo " +"con Alt+]." #: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" @@ -487,67 +487,87 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Ver juegos compatibles" -#: src/ui/gui/settings_page.slint:24 +#: src/ui/gui/settings_page.slint:25 msgctxt "Settings" msgid "Settings" msgstr "Ajustes" -#: src/ui/gui/settings_page.slint:35 +#: src/ui/gui/settings_page.slint:36 msgctxt "Settings" msgid "Resolution:" msgstr "Resolución:" -#: src/ui/gui/settings_page.slint:49 +#: src/ui/gui/settings_page.slint:52 +msgctxt "Settings" +msgid "Theme:" +msgstr "Tema:" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "System" +msgstr "Sistema" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "Dark" +msgstr "Oscuro" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "Light" +msgstr "Claro" + +#: src/ui/gui/settings_page.slint:66 msgctxt "Settings" msgid "SSAA downscaling" msgstr "Reducción de escala SSAA" -#: src/ui/gui/settings_page.slint:57 +#: src/ui/gui/settings_page.slint:74 msgctxt "Settings" msgid "Integer Scaling" msgstr "Escalado por enteros" -#: src/ui/gui/settings_page.slint:65 +#: src/ui/gui/settings_page.slint:82 msgctxt "Settings" msgid "Fullscreen" msgstr "Pantalla completa" -#: src/ui/gui/settings_page.slint:73 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Pantalla ancha (estirado)" -#: src/ui/gui/settings_page.slint:81 +#: src/ui/gui/settings_page.slint:98 msgctxt "Settings" msgid "VSync" msgstr "Sincronización vertical (VSync)" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:106 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Aplicar sombreador CRT" -#: src/ui/gui/settings_page.slint:101 +#: src/ui/gui/settings_page.slint:118 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Overclock CPU N64 (puede causar errores)" -#: src/ui/gui/settings_page.slint:109 +#: src/ui/gui/settings_page.slint:126 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Desactivar Expansion Pak" -#: src/ui/gui/settings_page.slint:117 +#: src/ui/gui/settings_page.slint:134 msgctxt "Settings" msgid "Enable Rewind" msgstr "Activar rebobinado" -#: src/ui/gui/settings_page.slint:125 +#: src/ui/gui/settings_page.slint:142 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Emular UNFLoader" -#: src/ui/gui/settings_page.slint:133 +#: src/ui/gui/settings_page.slint:150 msgctxt "Settings" msgid "Emulate VRU" msgstr "Emular VRU" diff --git a/data/translations/fr/LC_MESSAGES/gopher64.po b/data/translations/fr/LC_MESSAGES/gopher64.po index 38c9073..891331e 100644 --- a/data/translations/fr/LC_MESSAGES/gopher64.po +++ b/data/translations/fr/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-16 12:26+0000\n" +"POT-Creation-Date: 2026-06-29 10:49+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: French (France)\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Faire un don (via GitHub)" -#: src/ui/gui/appwindow.slint:148 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "Local Game" msgstr "Jeu local" -#: src/ui/gui/appwindow.slint:152 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "Controller Config" msgstr "Configuration manette" -#: src/ui/gui/appwindow.slint:156 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:160 +#: src/ui/gui/appwindow.slint:176 msgctxt "Menu" msgid "Cheats" msgstr "Triche" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:180 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:184 msgctxt "Menu" msgid "Settings" msgstr "Paramètres" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:188 msgctxt "Menu" msgid "About" msgstr "À propos" @@ -399,8 +399,8 @@ msgid "" "Alt+]." msgstr "" "Régler le délai d'entrée trop bas provoquera des ralentissements.\n" -"Vous pouvez diminuer le délai d'entrée en jeu avec Alt+[ et l'augmenter " -"avec Alt+]." +"Vous pouvez diminuer le délai d'entrée en jeu avec Alt+[ et l'augmenter avec " +"Alt+]." #: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" @@ -487,67 +487,87 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Voir les jeux pris en charge" -#: src/ui/gui/settings_page.slint:24 +#: src/ui/gui/settings_page.slint:25 msgctxt "Settings" msgid "Settings" msgstr "Paramètres" -#: src/ui/gui/settings_page.slint:35 +#: src/ui/gui/settings_page.slint:36 msgctxt "Settings" msgid "Resolution:" msgstr "Résolution :" -#: src/ui/gui/settings_page.slint:49 +#: src/ui/gui/settings_page.slint:52 +msgctxt "Settings" +msgid "Theme:" +msgstr "Thème :" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "System" +msgstr "Système" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "Dark" +msgstr "Sombre" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "Light" +msgstr "Clair" + +#: src/ui/gui/settings_page.slint:66 msgctxt "Settings" msgid "SSAA downscaling" msgstr "Réduction SSAA" -#: src/ui/gui/settings_page.slint:57 +#: src/ui/gui/settings_page.slint:74 msgctxt "Settings" msgid "Integer Scaling" msgstr "Mise à l'échelle par entiers" -#: src/ui/gui/settings_page.slint:65 +#: src/ui/gui/settings_page.slint:82 msgctxt "Settings" msgid "Fullscreen" msgstr "Plein écran" -#: src/ui/gui/settings_page.slint:73 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Écran large (étiré)" -#: src/ui/gui/settings_page.slint:81 +#: src/ui/gui/settings_page.slint:98 msgctxt "Settings" msgid "VSync" msgstr "Synchro verticale" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:106 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Appliquer le filtre CRT" -#: src/ui/gui/settings_page.slint:101 +#: src/ui/gui/settings_page.slint:118 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Surcharger le CPU N64 (risque de bugs)" -#: src/ui/gui/settings_page.slint:109 +#: src/ui/gui/settings_page.slint:126 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Désactiver l'Expansion Pak" -#: src/ui/gui/settings_page.slint:117 +#: src/ui/gui/settings_page.slint:134 msgctxt "Settings" msgid "Enable Rewind" msgstr "Activer le rembobinage" -#: src/ui/gui/settings_page.slint:125 +#: src/ui/gui/settings_page.slint:142 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Émuler UNFLoader" -#: src/ui/gui/settings_page.slint:133 +#: src/ui/gui/settings_page.slint:150 msgctxt "Settings" msgid "Emulate VRU" msgstr "Émuler le VRU" diff --git a/data/translations/gopher64.pot b/data/translations/gopher64.pot index 7cc41f2..c394e52 100644 --- a/data/translations/gopher64.pot +++ b/data/translations/gopher64.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-06-16 12:26+0000\n" +"POT-Creation-Date: 2026-06-29 10:49+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "" -#: src/ui/gui/appwindow.slint:148 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "Local Game" msgstr "" -#: src/ui/gui/appwindow.slint:152 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "Controller Config" msgstr "" -#: src/ui/gui/appwindow.slint:156 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "Netplay" msgstr "" -#: src/ui/gui/appwindow.slint:160 +#: src/ui/gui/appwindow.slint:176 msgctxt "Menu" msgid "Cheats" msgstr "" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:180 msgctxt "Menu" msgid "RetroAchievements" msgstr "" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:184 msgctxt "Menu" msgid "Settings" msgstr "" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:188 msgctxt "Menu" msgid "About" msgstr "" @@ -480,67 +480,87 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "" -#: src/ui/gui/settings_page.slint:24 +#: src/ui/gui/settings_page.slint:25 msgctxt "Settings" msgid "Settings" msgstr "" -#: src/ui/gui/settings_page.slint:35 +#: src/ui/gui/settings_page.slint:36 msgctxt "Settings" msgid "Resolution:" msgstr "" -#: src/ui/gui/settings_page.slint:49 +#: src/ui/gui/settings_page.slint:52 msgctxt "Settings" -msgid "SSAA downscaling" +msgid "Theme:" msgstr "" #: src/ui/gui/settings_page.slint:57 msgctxt "Settings" +msgid "System" +msgstr "" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "Dark" +msgstr "" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "Light" +msgstr "" + +#: src/ui/gui/settings_page.slint:66 +msgctxt "Settings" +msgid "SSAA downscaling" +msgstr "" + +#: src/ui/gui/settings_page.slint:74 +msgctxt "Settings" msgid "Integer Scaling" msgstr "" -#: src/ui/gui/settings_page.slint:65 +#: src/ui/gui/settings_page.slint:82 msgctxt "Settings" msgid "Fullscreen" msgstr "" -#: src/ui/gui/settings_page.slint:73 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "" -#: src/ui/gui/settings_page.slint:81 +#: src/ui/gui/settings_page.slint:98 msgctxt "Settings" msgid "VSync" msgstr "" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:106 msgctxt "Settings" msgid "Apply CRT shader" msgstr "" -#: src/ui/gui/settings_page.slint:101 +#: src/ui/gui/settings_page.slint:118 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "" -#: src/ui/gui/settings_page.slint:109 +#: src/ui/gui/settings_page.slint:126 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "" -#: src/ui/gui/settings_page.slint:117 +#: src/ui/gui/settings_page.slint:134 msgctxt "Settings" msgid "Enable Rewind" msgstr "" -#: src/ui/gui/settings_page.slint:125 +#: src/ui/gui/settings_page.slint:142 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "" -#: src/ui/gui/settings_page.slint:133 +#: src/ui/gui/settings_page.slint:150 msgctxt "Settings" msgid "Emulate VRU" msgstr "" diff --git a/data/translations/ja/LC_MESSAGES/gopher64.po b/data/translations/ja/LC_MESSAGES/gopher64.po index 2424485..ed2c522 100644 --- a/data/translations/ja/LC_MESSAGES/gopher64.po +++ b/data/translations/ja/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-16 12:26+0000\n" +"POT-Creation-Date: 2026-06-29 10:49+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Japanese\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "GitHubで寄付" -#: src/ui/gui/appwindow.slint:148 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "Local Game" msgstr "ローカルゲーム" -#: src/ui/gui/appwindow.slint:152 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "Controller Config" msgstr "コントローラー設定" -#: src/ui/gui/appwindow.slint:156 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "Netplay" msgstr "ネットプレイ" -#: src/ui/gui/appwindow.slint:160 +#: src/ui/gui/appwindow.slint:176 msgctxt "Menu" msgid "Cheats" msgstr "チート" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:180 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:184 msgctxt "Menu" msgid "Settings" msgstr "設定" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:188 msgctxt "Menu" msgid "About" msgstr "バージョン情報" @@ -483,67 +483,87 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "対応ゲームを表示" -#: src/ui/gui/settings_page.slint:24 +#: src/ui/gui/settings_page.slint:25 msgctxt "Settings" msgid "Settings" msgstr "設定" -#: src/ui/gui/settings_page.slint:35 +#: src/ui/gui/settings_page.slint:36 msgctxt "Settings" msgid "Resolution:" msgstr "解像度:" -#: src/ui/gui/settings_page.slint:49 +#: src/ui/gui/settings_page.slint:52 +msgctxt "Settings" +msgid "Theme:" +msgstr "テーマ:" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "System" +msgstr "システム" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "Dark" +msgstr "ダーク" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "Light" +msgstr "ライト" + +#: src/ui/gui/settings_page.slint:66 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAAダウンスケール" -#: src/ui/gui/settings_page.slint:57 +#: src/ui/gui/settings_page.slint:74 msgctxt "Settings" msgid "Integer Scaling" msgstr "整数倍スケーリング" -#: src/ui/gui/settings_page.slint:65 +#: src/ui/gui/settings_page.slint:82 msgctxt "Settings" msgid "Fullscreen" msgstr "全画面表示" -#: src/ui/gui/settings_page.slint:73 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "ワイド画面(伸ばす)" -#: src/ui/gui/settings_page.slint:81 +#: src/ui/gui/settings_page.slint:98 msgctxt "Settings" msgid "VSync" msgstr "垂直同期(VSync)" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:106 msgctxt "Settings" msgid "Apply CRT shader" msgstr "CRTシェーダーを適用" -#: src/ui/gui/settings_page.slint:101 +#: src/ui/gui/settings_page.slint:118 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "N64のCPUをオーバークロック(不具合の原因になることがあります)" -#: src/ui/gui/settings_page.slint:109 +#: src/ui/gui/settings_page.slint:126 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "拡張パックを無効にする" -#: src/ui/gui/settings_page.slint:117 +#: src/ui/gui/settings_page.slint:134 msgctxt "Settings" msgid "Enable Rewind" msgstr "巻き戻しを有効にする" -#: src/ui/gui/settings_page.slint:125 +#: src/ui/gui/settings_page.slint:142 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "UNFLoaderをエミュレート" -#: src/ui/gui/settings_page.slint:133 +#: src/ui/gui/settings_page.slint:150 msgctxt "Settings" msgid "Emulate VRU" msgstr "VRUをエミュレート" diff --git a/data/translations/nl/LC_MESSAGES/gopher64.po b/data/translations/nl/LC_MESSAGES/gopher64.po index 473619c..4d23973 100644 --- a/data/translations/nl/LC_MESSAGES/gopher64.po +++ b/data/translations/nl/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-16 12:26+0000\n" +"POT-Creation-Date: 2026-06-29 10:49+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Dutch (Netherlands)\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Doneren (via GitHub)" -#: src/ui/gui/appwindow.slint:148 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "Local Game" msgstr "Lokaal spel" -#: src/ui/gui/appwindow.slint:152 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "Controller Config" msgstr "Controllerconfiguratie" -#: src/ui/gui/appwindow.slint:156 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:160 +#: src/ui/gui/appwindow.slint:176 msgctxt "Menu" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:180 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:184 msgctxt "Menu" msgid "Settings" msgstr "Instellingen" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:188 msgctxt "Menu" msgid "About" msgstr "Over" @@ -486,67 +486,87 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Ondersteunde spellen bekijken" -#: src/ui/gui/settings_page.slint:24 +#: src/ui/gui/settings_page.slint:25 msgctxt "Settings" msgid "Settings" msgstr "Instellingen" -#: src/ui/gui/settings_page.slint:35 +#: src/ui/gui/settings_page.slint:36 msgctxt "Settings" msgid "Resolution:" msgstr "Resolutie:" -#: src/ui/gui/settings_page.slint:49 +#: src/ui/gui/settings_page.slint:52 +msgctxt "Settings" +msgid "Theme:" +msgstr "Thema:" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "System" +msgstr "Systeem" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "Dark" +msgstr "Donker" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "Light" +msgstr "Licht" + +#: src/ui/gui/settings_page.slint:66 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAA-downscaling" -#: src/ui/gui/settings_page.slint:57 +#: src/ui/gui/settings_page.slint:74 msgctxt "Settings" msgid "Integer Scaling" msgstr "Schalen in hele getallen" -#: src/ui/gui/settings_page.slint:65 +#: src/ui/gui/settings_page.slint:82 msgctxt "Settings" msgid "Fullscreen" msgstr "Volledig scherm" -#: src/ui/gui/settings_page.slint:73 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Breedbeeld (uitgerekt)" -#: src/ui/gui/settings_page.slint:81 +#: src/ui/gui/settings_page.slint:98 msgctxt "Settings" msgid "VSync" msgstr "VSync" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:106 msgctxt "Settings" msgid "Apply CRT shader" msgstr "CRT-shader toepassen" -#: src/ui/gui/settings_page.slint:101 +#: src/ui/gui/settings_page.slint:118 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "N64-CPU overklokken (kan bugs veroorzaken)" -#: src/ui/gui/settings_page.slint:109 +#: src/ui/gui/settings_page.slint:126 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Expansion Pak uitschakelen" -#: src/ui/gui/settings_page.slint:117 +#: src/ui/gui/settings_page.slint:134 msgctxt "Settings" msgid "Enable Rewind" msgstr "Terugspoelen inschakelen" -#: src/ui/gui/settings_page.slint:125 +#: src/ui/gui/settings_page.slint:142 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "UNFLoader emuleren" -#: src/ui/gui/settings_page.slint:133 +#: src/ui/gui/settings_page.slint:150 msgctxt "Settings" msgid "Emulate VRU" msgstr "VRU emuleren" diff --git a/data/translations/pt_BR/LC_MESSAGES/gopher64.po b/data/translations/pt_BR/LC_MESSAGES/gopher64.po index 45966de..f1d32f3 100644 --- a/data/translations/pt_BR/LC_MESSAGES/gopher64.po +++ b/data/translations/pt_BR/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-06-16 12:26+0000\n" +"POT-Creation-Date: 2026-06-29 10:49+0000\n" "PO-Revision-Date: 2026-05-11 18:11-3000\n" "Last-Translator: EDUARDO CARVALHO \n" "Language-Team: LANGUAGE \n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Doações (via GitHub)" -#: src/ui/gui/appwindow.slint:148 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "Local Game" msgstr "Jogo Local" -#: src/ui/gui/appwindow.slint:152 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "Controller Config" msgstr "Configurar Controle" -#: src/ui/gui/appwindow.slint:156 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:160 +#: src/ui/gui/appwindow.slint:176 msgctxt "Menu" msgid "Cheats" msgstr "Trapaças" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:180 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:184 msgctxt "Menu" msgid "Settings" msgstr "Configurações" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:188 msgctxt "Menu" msgid "About" msgstr "Sobre" @@ -399,8 +399,8 @@ msgid "" "Alt+]." msgstr "" "Definir o atraso de entrada muito baixo causará lag no jogo.\n" -"Você pode diminuir o atraso de entrada no jogo pressionando Alt+[ e " -"aumentá-lo com Alt+]." +"Você pode diminuir o atraso de entrada no jogo pressionando Alt+[ e aumentá-" +"lo com Alt+]." #: src/ui/gui/netplay_wait.slint:101 msgctxt "NetplayWait" @@ -487,67 +487,87 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Ver Jogos com Suporte" -#: src/ui/gui/settings_page.slint:24 +#: src/ui/gui/settings_page.slint:25 msgctxt "Settings" msgid "Settings" msgstr "Configurações" -#: src/ui/gui/settings_page.slint:35 +#: src/ui/gui/settings_page.slint:36 msgctxt "Settings" msgid "Resolution:" msgstr "Resolução:" -#: src/ui/gui/settings_page.slint:49 +#: src/ui/gui/settings_page.slint:52 +msgctxt "Settings" +msgid "Theme:" +msgstr "Tema:" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "System" +msgstr "Sistema" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "Dark" +msgstr "Escuro" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "Light" +msgstr "Claro" + +#: src/ui/gui/settings_page.slint:66 msgctxt "Settings" msgid "SSAA downscaling" msgstr "Redução de SSAA" -#: src/ui/gui/settings_page.slint:57 +#: src/ui/gui/settings_page.slint:74 msgctxt "Settings" msgid "Integer Scaling" msgstr "Proporção Íntegra" -#: src/ui/gui/settings_page.slint:65 +#: src/ui/gui/settings_page.slint:82 msgctxt "Settings" msgid "Fullscreen" msgstr "Tela Cheia" -#: src/ui/gui/settings_page.slint:73 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Widescreen (esticar)" -#: src/ui/gui/settings_page.slint:81 +#: src/ui/gui/settings_page.slint:98 msgctxt "Settings" msgid "VSync" msgstr "VSync" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:106 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Aplicar filtro de CRT" -#: src/ui/gui/settings_page.slint:101 +#: src/ui/gui/settings_page.slint:118 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Overclock da CPU do N64 (pode causar bugs)" -#: src/ui/gui/settings_page.slint:109 +#: src/ui/gui/settings_page.slint:126 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Desabilitar Expansion Pak" -#: src/ui/gui/settings_page.slint:117 +#: src/ui/gui/settings_page.slint:134 msgctxt "Settings" msgid "Enable Rewind" msgstr "Habilitar rebobinamento" -#: src/ui/gui/settings_page.slint:125 +#: src/ui/gui/settings_page.slint:142 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Emular UNFLoader" -#: src/ui/gui/settings_page.slint:133 +#: src/ui/gui/settings_page.slint:150 msgctxt "Settings" msgid "Emulate VRU" msgstr "Emular VRU" diff --git a/data/translations/ru/LC_MESSAGES/gopher64.po b/data/translations/ru/LC_MESSAGES/gopher64.po index f5f938d..c8f058a 100644 --- a/data/translations/ru/LC_MESSAGES/gopher64.po +++ b/data/translations/ru/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-16 12:26+0000\n" +"POT-Creation-Date: 2026-06-29 10:49+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Russian\n" @@ -47,37 +47,37 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Пожертвовать (через GitHub)" -#: src/ui/gui/appwindow.slint:148 +#: src/ui/gui/appwindow.slint:164 msgctxt "Menu" msgid "Local Game" msgstr "Локальная игра" -#: src/ui/gui/appwindow.slint:152 +#: src/ui/gui/appwindow.slint:168 msgctxt "Menu" msgid "Controller Config" msgstr "Настройка контроллера" -#: src/ui/gui/appwindow.slint:156 +#: src/ui/gui/appwindow.slint:172 msgctxt "Menu" msgid "Netplay" msgstr "Сетевая игра" -#: src/ui/gui/appwindow.slint:160 +#: src/ui/gui/appwindow.slint:176 msgctxt "Menu" msgid "Cheats" msgstr "Читы" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:180 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:184 msgctxt "Menu" msgid "Settings" msgstr "Настройки" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:188 msgctxt "Menu" msgid "About" msgstr "О программе" @@ -485,67 +485,87 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Просмотреть поддерживаемые игры" -#: src/ui/gui/settings_page.slint:24 +#: src/ui/gui/settings_page.slint:25 msgctxt "Settings" msgid "Settings" msgstr "Настройки" -#: src/ui/gui/settings_page.slint:35 +#: src/ui/gui/settings_page.slint:36 msgctxt "Settings" msgid "Resolution:" msgstr "Разрешение:" -#: src/ui/gui/settings_page.slint:49 +#: src/ui/gui/settings_page.slint:52 +msgctxt "Settings" +msgid "Theme:" +msgstr "Тема:" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "System" +msgstr "Система" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "Dark" +msgstr "Тёмная" + +#: src/ui/gui/settings_page.slint:57 +msgctxt "Settings" +msgid "Light" +msgstr "Светлая" + +#: src/ui/gui/settings_page.slint:66 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAA даунскейлинг" -#: src/ui/gui/settings_page.slint:57 +#: src/ui/gui/settings_page.slint:74 msgctxt "Settings" msgid "Integer Scaling" msgstr "Целочисленное масштабирование" -#: src/ui/gui/settings_page.slint:65 +#: src/ui/gui/settings_page.slint:82 msgctxt "Settings" msgid "Fullscreen" msgstr "Полноэкранный режим" -#: src/ui/gui/settings_page.slint:73 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Широкоэкранный режим (растянуто)" -#: src/ui/gui/settings_page.slint:81 +#: src/ui/gui/settings_page.slint:98 msgctxt "Settings" msgid "VSync" msgstr "Вертикальная синхронизация" -#: src/ui/gui/settings_page.slint:89 +#: src/ui/gui/settings_page.slint:106 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Применить шейдер ЭЛТ" -#: src/ui/gui/settings_page.slint:101 +#: src/ui/gui/settings_page.slint:118 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Разгон процессора N64 (может вызвать ошибки)" -#: src/ui/gui/settings_page.slint:109 +#: src/ui/gui/settings_page.slint:126 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Отключить Expansion Pak" -#: src/ui/gui/settings_page.slint:117 +#: src/ui/gui/settings_page.slint:134 msgctxt "Settings" msgid "Enable Rewind" msgstr "Включить перемотку назад" -#: src/ui/gui/settings_page.slint:125 +#: src/ui/gui/settings_page.slint:142 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Эмулировать UNFLoader" -#: src/ui/gui/settings_page.slint:133 +#: src/ui/gui/settings_page.slint:150 msgctxt "Settings" msgid "Emulate VRU" msgstr "Эмулировать VRU" diff --git a/src/ui/config.rs b/src/ui/config.rs index 9c13c45..6c2713f 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -54,6 +54,8 @@ pub struct Video { pub widescreen: bool, pub vsync: bool, pub crt: bool, + #[serde(default)] + pub theme: i32, } #[derive(Default, serde::Serialize, serde::Deserialize)] @@ -179,6 +181,7 @@ impl Config { widescreen: false, vsync: true, crt: false, + theme: 0, }, emulation: Emulation { overclock: false, diff --git a/src/ui/gui.rs b/src/ui/gui.rs index a9ca3ee..96cf968 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -180,6 +180,7 @@ fn settings_window(app: &AppWindow, config: &ui::config::Config) { app.set_widescreen(config.video.widescreen); app.set_vsync(config.video.vsync); app.set_apply_crt_shader(config.video.crt); + app.set_theme(config.video.theme); app.set_overclock_n64_cpu(config.emulation.overclock); app.set_disable_expansion_pak(config.emulation.disable_expansion_pak); app.set_emulate_usb(config.emulation.usb); @@ -452,6 +453,7 @@ pub fn save_settings(app: &AppWindow) { config.video.widescreen = app.get_widescreen(); config.video.vsync = app.get_vsync(); config.video.crt = app.get_apply_crt_shader(); + config.video.theme = app.get_theme(); config.emulation.overclock = app.get_overclock_n64_cpu(); config.emulation.disable_expansion_pak = app.get_disable_expansion_pak(); config.emulation.usb = app.get_emulate_usb(); diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index eedc2bc..dcc48a4 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -65,6 +65,7 @@ export component AppWindow inherits Window { out property ra_not_logged_in <=> RAData.not_logged_in; in-out property integer_scaling <=> SettingsData.integer_scaling; in-out property ssaa <=> SettingsData.ssaa; + in-out property theme <=> SettingsData.theme; in-out property fullscreen <=> SettingsData.fullscreen; in-out property widescreen <=> SettingsData.widescreen; in-out property vsync <=> SettingsData.vsync; @@ -131,6 +132,21 @@ export component AppWindow inherits Window { private property safe-bottom: root.safe-area-insets.bottom; private property safe-width: root.width - root.safe-left - root.safe-right; private property safe-height: root.height - root.safe-top - root.safe-bottom; + function apply_theme() { + if (root.theme == 1) { + Palette.color-scheme = ColorScheme.dark; + } else if (root.theme == 2) { + Palette.color-scheme = ColorScheme.light; + } else { + Palette.color-scheme = ColorScheme.unknown; + } + } + init => { + apply_theme(); + } + changed theme => { + apply_theme(); + } min-width: 320px; min-height: 240px; diff --git a/src/ui/gui/settings_page.slint b/src/ui/gui/settings_page.slint index f00aaef..653304a 100644 --- a/src/ui/gui/settings_page.slint +++ b/src/ui/gui/settings_page.slint @@ -1,7 +1,7 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { ComboBox, HorizontalBox, VerticalBox, Switch } from "std-widgets.slint"; +import { GridBox, ComboBox, HorizontalBox, VerticalBox, Switch } from "std-widgets.slint"; import { Page } from "page.slint"; export global SettingsData { @@ -14,6 +14,7 @@ export global SettingsData { in-out property overclock_n64_cpu; in-out property disable_expansion_pak; in-out property resolution; + in-out property theme; in-out property emulate_usb; in-out property rewind; in-out property emulate_vru; @@ -29,19 +30,34 @@ export component Settings inherits Page { alignment: center; VerticalBox { alignment: start; - HorizontalBox { - alignment: start; - Text { - text: @tr("Resolution:"); - vertical-alignment: center; - } - - ComboBox { - model: ["1x", "2x", "4x", "8x"]; - current-index: SettingsData.resolution; - selected => { - SettingsData.resolution = self.current-index; + GridBox { + Row { + Text { + text: @tr("Resolution:"); + vertical-alignment: center; } + ComboBox { + model: ["1x", "2x", "4x", "8x"]; + current-index: SettingsData.resolution; + selected => { + SettingsData.resolution = self.current-index; + } + } + Rectangle {} + } + Row { + Text { + text: @tr("Theme:"); + vertical-alignment: center; + } + ComboBox { + model: [@tr("System"), @tr("Dark"), @tr("Light")]; + current-index: SettingsData.theme; + selected => { + SettingsData.theme = self.current-index; + } + } + Rectangle {} } } From 407a1b967c09dd92fb7a4c0183d6c25c97599703 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 30 Jun 2026 11:53:03 +0200 Subject: [PATCH 1092/1117] Re-arrange settings (#1138) * update setting locations * tra --- data/translations/de/LC_MESSAGES/gopher64.po | 76 +++--- data/translations/es/LC_MESSAGES/gopher64.po | 76 +++--- data/translations/fr/LC_MESSAGES/gopher64.po | 76 +++--- data/translations/gopher64.pot | 76 +++--- data/translations/ja/LC_MESSAGES/gopher64.po | 76 +++--- data/translations/nl/LC_MESSAGES/gopher64.po | 76 +++--- .../pt_BR/LC_MESSAGES/gopher64.po | 76 +++--- data/translations/ru/LC_MESSAGES/gopher64.po | 79 ++++--- src/lib.rs | 6 +- src/ui/config.rs | 20 +- src/ui/gui.rs | 9 +- src/ui/gui/settings_page.slint | 216 +++++++++--------- 12 files changed, 480 insertions(+), 382 deletions(-) diff --git a/data/translations/de/LC_MESSAGES/gopher64.po b/data/translations/de/LC_MESSAGES/gopher64.po index b4c9253..1f9c3ca 100644 --- a/data/translations/de/LC_MESSAGES/gopher64.po +++ b/data/translations/de/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-29 10:49+0000\n" +"POT-Creation-Date: 2026-06-30 09:43+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: German\n" @@ -491,86 +491,96 @@ msgctxt "Settings" msgid "Settings" msgstr "Einstellungen" -#: src/ui/gui/settings_page.slint:36 +#: src/ui/gui/settings_page.slint:32 +msgctxt "Settings" +msgid "Game" +msgstr "Spiel" + +#: src/ui/gui/settings_page.slint:38 msgctxt "Settings" msgid "Resolution:" msgstr "Auflösung:" -#: src/ui/gui/settings_page.slint:52 -msgctxt "Settings" -msgid "Theme:" -msgstr "Thema:" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "System" -msgstr "System" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "Dark" -msgstr "Dunkel" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "Light" -msgstr "Hell" - -#: src/ui/gui/settings_page.slint:66 +#: src/ui/gui/settings_page.slint:51 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAA-Herunterskalierung" -#: src/ui/gui/settings_page.slint:74 +#: src/ui/gui/settings_page.slint:59 msgctxt "Settings" msgid "Integer Scaling" msgstr "Pixelgenaue Skalierung" -#: src/ui/gui/settings_page.slint:82 +#: src/ui/gui/settings_page.slint:67 msgctxt "Settings" msgid "Fullscreen" msgstr "Vollbild" -#: src/ui/gui/settings_page.slint:90 +#: src/ui/gui/settings_page.slint:75 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "16:9 (gestreckt)" -#: src/ui/gui/settings_page.slint:98 +#: src/ui/gui/settings_page.slint:83 msgctxt "Settings" msgid "VSync" msgstr "VSync" -#: src/ui/gui/settings_page.slint:106 +#: src/ui/gui/settings_page.slint:91 msgctxt "Settings" msgid "Apply CRT shader" msgstr "CRT-Shader anwenden" -#: src/ui/gui/settings_page.slint:118 +#: src/ui/gui/settings_page.slint:103 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "N64-CPU übertakten (kann Fehler verursachen)" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:111 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Expansion Pak deaktivieren" -#: src/ui/gui/settings_page.slint:134 +#: src/ui/gui/settings_page.slint:119 msgctxt "Settings" msgid "Enable Rewind" msgstr "Rewind aktivieren" -#: src/ui/gui/settings_page.slint:142 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "UNFLoader emulieren" -#: src/ui/gui/settings_page.slint:150 +#: src/ui/gui/settings_page.slint:135 msgctxt "Settings" msgid "Emulate VRU" msgstr "VRU emulieren" +#: src/ui/gui/settings_page.slint:144 +msgctxt "Settings" +msgid "UI" +msgstr "Benutzeroberfläche" + +#: src/ui/gui/settings_page.slint:150 +msgctxt "Settings" +msgid "Theme:" +msgstr "Thema:" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "System" +msgstr "System" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "Dark" +msgstr "Dunkel" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "Light" +msgstr "Hell" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" diff --git a/data/translations/es/LC_MESSAGES/gopher64.po b/data/translations/es/LC_MESSAGES/gopher64.po index 577e654..bdced2e 100644 --- a/data/translations/es/LC_MESSAGES/gopher64.po +++ b/data/translations/es/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-29 10:49+0000\n" +"POT-Creation-Date: 2026-06-30 09:43+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: Gemini\n" "Language-Team: Spanish (Spain)\n" @@ -492,86 +492,96 @@ msgctxt "Settings" msgid "Settings" msgstr "Ajustes" -#: src/ui/gui/settings_page.slint:36 +#: src/ui/gui/settings_page.slint:32 +msgctxt "Settings" +msgid "Game" +msgstr "Juego" + +#: src/ui/gui/settings_page.slint:38 msgctxt "Settings" msgid "Resolution:" msgstr "Resolución:" -#: src/ui/gui/settings_page.slint:52 -msgctxt "Settings" -msgid "Theme:" -msgstr "Tema:" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "System" -msgstr "Sistema" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "Dark" -msgstr "Oscuro" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "Light" -msgstr "Claro" - -#: src/ui/gui/settings_page.slint:66 +#: src/ui/gui/settings_page.slint:51 msgctxt "Settings" msgid "SSAA downscaling" msgstr "Reducción de escala SSAA" -#: src/ui/gui/settings_page.slint:74 +#: src/ui/gui/settings_page.slint:59 msgctxt "Settings" msgid "Integer Scaling" msgstr "Escalado por enteros" -#: src/ui/gui/settings_page.slint:82 +#: src/ui/gui/settings_page.slint:67 msgctxt "Settings" msgid "Fullscreen" msgstr "Pantalla completa" -#: src/ui/gui/settings_page.slint:90 +#: src/ui/gui/settings_page.slint:75 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Pantalla ancha (estirado)" -#: src/ui/gui/settings_page.slint:98 +#: src/ui/gui/settings_page.slint:83 msgctxt "Settings" msgid "VSync" msgstr "Sincronización vertical (VSync)" -#: src/ui/gui/settings_page.slint:106 +#: src/ui/gui/settings_page.slint:91 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Aplicar sombreador CRT" -#: src/ui/gui/settings_page.slint:118 +#: src/ui/gui/settings_page.slint:103 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Overclock CPU N64 (puede causar errores)" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:111 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Desactivar Expansion Pak" -#: src/ui/gui/settings_page.slint:134 +#: src/ui/gui/settings_page.slint:119 msgctxt "Settings" msgid "Enable Rewind" msgstr "Activar rebobinado" -#: src/ui/gui/settings_page.slint:142 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Emular UNFLoader" -#: src/ui/gui/settings_page.slint:150 +#: src/ui/gui/settings_page.slint:135 msgctxt "Settings" msgid "Emulate VRU" msgstr "Emular VRU" +#: src/ui/gui/settings_page.slint:144 +msgctxt "Settings" +msgid "UI" +msgstr "Interfaz" + +#: src/ui/gui/settings_page.slint:150 +msgctxt "Settings" +msgid "Theme:" +msgstr "Tema:" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "System" +msgstr "Sistema" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "Dark" +msgstr "Oscuro" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "Light" +msgstr "Claro" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" diff --git a/data/translations/fr/LC_MESSAGES/gopher64.po b/data/translations/fr/LC_MESSAGES/gopher64.po index 891331e..a028fa4 100644 --- a/data/translations/fr/LC_MESSAGES/gopher64.po +++ b/data/translations/fr/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-29 10:49+0000\n" +"POT-Creation-Date: 2026-06-30 09:43+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: French (France)\n" @@ -492,86 +492,96 @@ msgctxt "Settings" msgid "Settings" msgstr "Paramètres" -#: src/ui/gui/settings_page.slint:36 +#: src/ui/gui/settings_page.slint:32 +msgctxt "Settings" +msgid "Game" +msgstr "Jeu" + +#: src/ui/gui/settings_page.slint:38 msgctxt "Settings" msgid "Resolution:" msgstr "Résolution :" -#: src/ui/gui/settings_page.slint:52 -msgctxt "Settings" -msgid "Theme:" -msgstr "Thème :" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "System" -msgstr "Système" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "Dark" -msgstr "Sombre" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "Light" -msgstr "Clair" - -#: src/ui/gui/settings_page.slint:66 +#: src/ui/gui/settings_page.slint:51 msgctxt "Settings" msgid "SSAA downscaling" msgstr "Réduction SSAA" -#: src/ui/gui/settings_page.slint:74 +#: src/ui/gui/settings_page.slint:59 msgctxt "Settings" msgid "Integer Scaling" msgstr "Mise à l'échelle par entiers" -#: src/ui/gui/settings_page.slint:82 +#: src/ui/gui/settings_page.slint:67 msgctxt "Settings" msgid "Fullscreen" msgstr "Plein écran" -#: src/ui/gui/settings_page.slint:90 +#: src/ui/gui/settings_page.slint:75 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Écran large (étiré)" -#: src/ui/gui/settings_page.slint:98 +#: src/ui/gui/settings_page.slint:83 msgctxt "Settings" msgid "VSync" msgstr "Synchro verticale" -#: src/ui/gui/settings_page.slint:106 +#: src/ui/gui/settings_page.slint:91 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Appliquer le filtre CRT" -#: src/ui/gui/settings_page.slint:118 +#: src/ui/gui/settings_page.slint:103 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Surcharger le CPU N64 (risque de bugs)" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:111 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Désactiver l'Expansion Pak" -#: src/ui/gui/settings_page.slint:134 +#: src/ui/gui/settings_page.slint:119 msgctxt "Settings" msgid "Enable Rewind" msgstr "Activer le rembobinage" -#: src/ui/gui/settings_page.slint:142 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Émuler UNFLoader" -#: src/ui/gui/settings_page.slint:150 +#: src/ui/gui/settings_page.slint:135 msgctxt "Settings" msgid "Emulate VRU" msgstr "Émuler le VRU" +#: src/ui/gui/settings_page.slint:144 +msgctxt "Settings" +msgid "UI" +msgstr "Interface" + +#: src/ui/gui/settings_page.slint:150 +msgctxt "Settings" +msgid "Theme:" +msgstr "Thème :" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "System" +msgstr "Système" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "Dark" +msgstr "Sombre" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "Light" +msgstr "Clair" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" diff --git a/data/translations/gopher64.pot b/data/translations/gopher64.pot index c394e52..8b69df3 100644 --- a/data/translations/gopher64.pot +++ b/data/translations/gopher64.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-06-29 10:49+0000\n" +"POT-Creation-Date: 2026-06-30 09:43+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -485,86 +485,96 @@ msgctxt "Settings" msgid "Settings" msgstr "" -#: src/ui/gui/settings_page.slint:36 +#: src/ui/gui/settings_page.slint:32 +msgctxt "Settings" +msgid "Game" +msgstr "" + +#: src/ui/gui/settings_page.slint:38 msgctxt "Settings" msgid "Resolution:" msgstr "" -#: src/ui/gui/settings_page.slint:52 -msgctxt "Settings" -msgid "Theme:" -msgstr "" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "System" -msgstr "" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "Dark" -msgstr "" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "Light" -msgstr "" - -#: src/ui/gui/settings_page.slint:66 +#: src/ui/gui/settings_page.slint:51 msgctxt "Settings" msgid "SSAA downscaling" msgstr "" -#: src/ui/gui/settings_page.slint:74 +#: src/ui/gui/settings_page.slint:59 msgctxt "Settings" msgid "Integer Scaling" msgstr "" -#: src/ui/gui/settings_page.slint:82 +#: src/ui/gui/settings_page.slint:67 msgctxt "Settings" msgid "Fullscreen" msgstr "" -#: src/ui/gui/settings_page.slint:90 +#: src/ui/gui/settings_page.slint:75 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "" -#: src/ui/gui/settings_page.slint:98 +#: src/ui/gui/settings_page.slint:83 msgctxt "Settings" msgid "VSync" msgstr "" -#: src/ui/gui/settings_page.slint:106 +#: src/ui/gui/settings_page.slint:91 msgctxt "Settings" msgid "Apply CRT shader" msgstr "" -#: src/ui/gui/settings_page.slint:118 +#: src/ui/gui/settings_page.slint:103 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:111 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "" -#: src/ui/gui/settings_page.slint:134 +#: src/ui/gui/settings_page.slint:119 msgctxt "Settings" msgid "Enable Rewind" msgstr "" -#: src/ui/gui/settings_page.slint:142 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "" -#: src/ui/gui/settings_page.slint:150 +#: src/ui/gui/settings_page.slint:135 msgctxt "Settings" msgid "Emulate VRU" msgstr "" +#: src/ui/gui/settings_page.slint:144 +msgctxt "Settings" +msgid "UI" +msgstr "" + +#: src/ui/gui/settings_page.slint:150 +msgctxt "Settings" +msgid "Theme:" +msgstr "" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "System" +msgstr "" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "Dark" +msgstr "" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "Light" +msgstr "" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" diff --git a/data/translations/ja/LC_MESSAGES/gopher64.po b/data/translations/ja/LC_MESSAGES/gopher64.po index ed2c522..558d615 100644 --- a/data/translations/ja/LC_MESSAGES/gopher64.po +++ b/data/translations/ja/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-29 10:49+0000\n" +"POT-Creation-Date: 2026-06-30 09:43+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Japanese\n" @@ -488,86 +488,96 @@ msgctxt "Settings" msgid "Settings" msgstr "設定" -#: src/ui/gui/settings_page.slint:36 +#: src/ui/gui/settings_page.slint:32 +msgctxt "Settings" +msgid "Game" +msgstr "ゲーム" + +#: src/ui/gui/settings_page.slint:38 msgctxt "Settings" msgid "Resolution:" msgstr "解像度:" -#: src/ui/gui/settings_page.slint:52 -msgctxt "Settings" -msgid "Theme:" -msgstr "テーマ:" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "System" -msgstr "システム" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "Dark" -msgstr "ダーク" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "Light" -msgstr "ライト" - -#: src/ui/gui/settings_page.slint:66 +#: src/ui/gui/settings_page.slint:51 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAAダウンスケール" -#: src/ui/gui/settings_page.slint:74 +#: src/ui/gui/settings_page.slint:59 msgctxt "Settings" msgid "Integer Scaling" msgstr "整数倍スケーリング" -#: src/ui/gui/settings_page.slint:82 +#: src/ui/gui/settings_page.slint:67 msgctxt "Settings" msgid "Fullscreen" msgstr "全画面表示" -#: src/ui/gui/settings_page.slint:90 +#: src/ui/gui/settings_page.slint:75 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "ワイド画面(伸ばす)" -#: src/ui/gui/settings_page.slint:98 +#: src/ui/gui/settings_page.slint:83 msgctxt "Settings" msgid "VSync" msgstr "垂直同期(VSync)" -#: src/ui/gui/settings_page.slint:106 +#: src/ui/gui/settings_page.slint:91 msgctxt "Settings" msgid "Apply CRT shader" msgstr "CRTシェーダーを適用" -#: src/ui/gui/settings_page.slint:118 +#: src/ui/gui/settings_page.slint:103 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "N64のCPUをオーバークロック(不具合の原因になることがあります)" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:111 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "拡張パックを無効にする" -#: src/ui/gui/settings_page.slint:134 +#: src/ui/gui/settings_page.slint:119 msgctxt "Settings" msgid "Enable Rewind" msgstr "巻き戻しを有効にする" -#: src/ui/gui/settings_page.slint:142 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "UNFLoaderをエミュレート" -#: src/ui/gui/settings_page.slint:150 +#: src/ui/gui/settings_page.slint:135 msgctxt "Settings" msgid "Emulate VRU" msgstr "VRUをエミュレート" +#: src/ui/gui/settings_page.slint:144 +msgctxt "Settings" +msgid "UI" +msgstr "UI" + +#: src/ui/gui/settings_page.slint:150 +msgctxt "Settings" +msgid "Theme:" +msgstr "テーマ:" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "System" +msgstr "システム" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "Dark" +msgstr "ダーク" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "Light" +msgstr "ライト" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" diff --git a/data/translations/nl/LC_MESSAGES/gopher64.po b/data/translations/nl/LC_MESSAGES/gopher64.po index 4d23973..05634ac 100644 --- a/data/translations/nl/LC_MESSAGES/gopher64.po +++ b/data/translations/nl/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-29 10:49+0000\n" +"POT-Creation-Date: 2026-06-30 09:43+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Dutch (Netherlands)\n" @@ -491,86 +491,96 @@ msgctxt "Settings" msgid "Settings" msgstr "Instellingen" -#: src/ui/gui/settings_page.slint:36 +#: src/ui/gui/settings_page.slint:32 +msgctxt "Settings" +msgid "Game" +msgstr "Spel" + +#: src/ui/gui/settings_page.slint:38 msgctxt "Settings" msgid "Resolution:" msgstr "Resolutie:" -#: src/ui/gui/settings_page.slint:52 -msgctxt "Settings" -msgid "Theme:" -msgstr "Thema:" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "System" -msgstr "Systeem" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "Dark" -msgstr "Donker" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "Light" -msgstr "Licht" - -#: src/ui/gui/settings_page.slint:66 +#: src/ui/gui/settings_page.slint:51 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAA-downscaling" -#: src/ui/gui/settings_page.slint:74 +#: src/ui/gui/settings_page.slint:59 msgctxt "Settings" msgid "Integer Scaling" msgstr "Schalen in hele getallen" -#: src/ui/gui/settings_page.slint:82 +#: src/ui/gui/settings_page.slint:67 msgctxt "Settings" msgid "Fullscreen" msgstr "Volledig scherm" -#: src/ui/gui/settings_page.slint:90 +#: src/ui/gui/settings_page.slint:75 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Breedbeeld (uitgerekt)" -#: src/ui/gui/settings_page.slint:98 +#: src/ui/gui/settings_page.slint:83 msgctxt "Settings" msgid "VSync" msgstr "VSync" -#: src/ui/gui/settings_page.slint:106 +#: src/ui/gui/settings_page.slint:91 msgctxt "Settings" msgid "Apply CRT shader" msgstr "CRT-shader toepassen" -#: src/ui/gui/settings_page.slint:118 +#: src/ui/gui/settings_page.slint:103 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "N64-CPU overklokken (kan bugs veroorzaken)" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:111 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Expansion Pak uitschakelen" -#: src/ui/gui/settings_page.slint:134 +#: src/ui/gui/settings_page.slint:119 msgctxt "Settings" msgid "Enable Rewind" msgstr "Terugspoelen inschakelen" -#: src/ui/gui/settings_page.slint:142 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "UNFLoader emuleren" -#: src/ui/gui/settings_page.slint:150 +#: src/ui/gui/settings_page.slint:135 msgctxt "Settings" msgid "Emulate VRU" msgstr "VRU emuleren" +#: src/ui/gui/settings_page.slint:144 +msgctxt "Settings" +msgid "UI" +msgstr "Interface" + +#: src/ui/gui/settings_page.slint:150 +msgctxt "Settings" +msgid "Theme:" +msgstr "Thema:" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "System" +msgstr "Systeem" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "Dark" +msgstr "Donker" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "Light" +msgstr "Licht" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" diff --git a/data/translations/pt_BR/LC_MESSAGES/gopher64.po b/data/translations/pt_BR/LC_MESSAGES/gopher64.po index f1d32f3..1f4456b 100644 --- a/data/translations/pt_BR/LC_MESSAGES/gopher64.po +++ b/data/translations/pt_BR/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-06-29 10:49+0000\n" +"POT-Creation-Date: 2026-06-30 09:43+0000\n" "PO-Revision-Date: 2026-05-11 18:11-3000\n" "Last-Translator: EDUARDO CARVALHO \n" "Language-Team: LANGUAGE \n" @@ -492,86 +492,96 @@ msgctxt "Settings" msgid "Settings" msgstr "Configurações" -#: src/ui/gui/settings_page.slint:36 +#: src/ui/gui/settings_page.slint:32 +msgctxt "Settings" +msgid "Game" +msgstr "Jogo" + +#: src/ui/gui/settings_page.slint:38 msgctxt "Settings" msgid "Resolution:" msgstr "Resolução:" -#: src/ui/gui/settings_page.slint:52 -msgctxt "Settings" -msgid "Theme:" -msgstr "Tema:" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "System" -msgstr "Sistema" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "Dark" -msgstr "Escuro" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "Light" -msgstr "Claro" - -#: src/ui/gui/settings_page.slint:66 +#: src/ui/gui/settings_page.slint:51 msgctxt "Settings" msgid "SSAA downscaling" msgstr "Redução de SSAA" -#: src/ui/gui/settings_page.slint:74 +#: src/ui/gui/settings_page.slint:59 msgctxt "Settings" msgid "Integer Scaling" msgstr "Proporção Íntegra" -#: src/ui/gui/settings_page.slint:82 +#: src/ui/gui/settings_page.slint:67 msgctxt "Settings" msgid "Fullscreen" msgstr "Tela Cheia" -#: src/ui/gui/settings_page.slint:90 +#: src/ui/gui/settings_page.slint:75 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Widescreen (esticar)" -#: src/ui/gui/settings_page.slint:98 +#: src/ui/gui/settings_page.slint:83 msgctxt "Settings" msgid "VSync" msgstr "VSync" -#: src/ui/gui/settings_page.slint:106 +#: src/ui/gui/settings_page.slint:91 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Aplicar filtro de CRT" -#: src/ui/gui/settings_page.slint:118 +#: src/ui/gui/settings_page.slint:103 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Overclock da CPU do N64 (pode causar bugs)" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:111 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Desabilitar Expansion Pak" -#: src/ui/gui/settings_page.slint:134 +#: src/ui/gui/settings_page.slint:119 msgctxt "Settings" msgid "Enable Rewind" msgstr "Habilitar rebobinamento" -#: src/ui/gui/settings_page.slint:142 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Emular UNFLoader" -#: src/ui/gui/settings_page.slint:150 +#: src/ui/gui/settings_page.slint:135 msgctxt "Settings" msgid "Emulate VRU" msgstr "Emular VRU" +#: src/ui/gui/settings_page.slint:144 +msgctxt "Settings" +msgid "UI" +msgstr "Interface" + +#: src/ui/gui/settings_page.slint:150 +msgctxt "Settings" +msgid "Theme:" +msgstr "Tema:" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "System" +msgstr "Sistema" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "Dark" +msgstr "Escuro" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "Light" +msgstr "Claro" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" diff --git a/data/translations/ru/LC_MESSAGES/gopher64.po b/data/translations/ru/LC_MESSAGES/gopher64.po index c8f058a..bf142c5 100644 --- a/data/translations/ru/LC_MESSAGES/gopher64.po +++ b/data/translations/ru/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-29 10:49+0000\n" +"POT-Creation-Date: 2026-06-30 09:43+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Russian\n" @@ -10,7 +10,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: src/ui/gui/about_page.slint:17 msgctxt "NewVersionButton" @@ -490,86 +491,96 @@ msgctxt "Settings" msgid "Settings" msgstr "Настройки" -#: src/ui/gui/settings_page.slint:36 +#: src/ui/gui/settings_page.slint:32 +msgctxt "Settings" +msgid "Game" +msgstr "Игра" + +#: src/ui/gui/settings_page.slint:38 msgctxt "Settings" msgid "Resolution:" msgstr "Разрешение:" -#: src/ui/gui/settings_page.slint:52 -msgctxt "Settings" -msgid "Theme:" -msgstr "Тема:" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "System" -msgstr "Система" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "Dark" -msgstr "Тёмная" - -#: src/ui/gui/settings_page.slint:57 -msgctxt "Settings" -msgid "Light" -msgstr "Светлая" - -#: src/ui/gui/settings_page.slint:66 +#: src/ui/gui/settings_page.slint:51 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAA даунскейлинг" -#: src/ui/gui/settings_page.slint:74 +#: src/ui/gui/settings_page.slint:59 msgctxt "Settings" msgid "Integer Scaling" msgstr "Целочисленное масштабирование" -#: src/ui/gui/settings_page.slint:82 +#: src/ui/gui/settings_page.slint:67 msgctxt "Settings" msgid "Fullscreen" msgstr "Полноэкранный режим" -#: src/ui/gui/settings_page.slint:90 +#: src/ui/gui/settings_page.slint:75 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Широкоэкранный режим (растянуто)" -#: src/ui/gui/settings_page.slint:98 +#: src/ui/gui/settings_page.slint:83 msgctxt "Settings" msgid "VSync" msgstr "Вертикальная синхронизация" -#: src/ui/gui/settings_page.slint:106 +#: src/ui/gui/settings_page.slint:91 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Применить шейдер ЭЛТ" -#: src/ui/gui/settings_page.slint:118 +#: src/ui/gui/settings_page.slint:103 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Разгон процессора N64 (может вызвать ошибки)" -#: src/ui/gui/settings_page.slint:126 +#: src/ui/gui/settings_page.slint:111 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Отключить Expansion Pak" -#: src/ui/gui/settings_page.slint:134 +#: src/ui/gui/settings_page.slint:119 msgctxt "Settings" msgid "Enable Rewind" msgstr "Включить перемотку назад" -#: src/ui/gui/settings_page.slint:142 +#: src/ui/gui/settings_page.slint:127 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Эмулировать UNFLoader" -#: src/ui/gui/settings_page.slint:150 +#: src/ui/gui/settings_page.slint:135 msgctxt "Settings" msgid "Emulate VRU" msgstr "Эмулировать VRU" +#: src/ui/gui/settings_page.slint:144 +msgctxt "Settings" +msgid "UI" +msgstr "Интерфейс" + +#: src/ui/gui/settings_page.slint:150 +msgctxt "Settings" +msgid "Theme:" +msgstr "Тема:" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "System" +msgstr "Система" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "Dark" +msgstr "Тёмная" + +#: src/ui/gui/settings_page.slint:154 +msgctxt "Settings" +msgid "Light" +msgstr "Светлая" + #: src/ui/gui/vru_dialog.slint:7 msgctxt "VruDialog" msgid "What Would You Like To Say?" diff --git a/src/lib.rs b/src/lib.rs index 69fbee0..c15ee71 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -163,9 +163,9 @@ pub fn run(args: Args, arg_count: usize) -> std::io::Result<()> { let mut device = device::Device::new(true); - device.ui.config.recent_roms.retain(|x| *x != game); - device.ui.config.recent_roms.insert(0, game); - device.ui.config.recent_roms.truncate(5); + device.ui.config.ui.recent_roms.retain(|x| *x != game); + device.ui.config.ui.recent_roms.insert(0, game); + device.ui.config.ui.recent_roms.truncate(5); if args.fullscreen { device.ui.video.fullscreen = true; diff --git a/src/ui/config.rs b/src/ui/config.rs index 6c2713f..57be74b 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -54,8 +54,6 @@ pub struct Video { pub widescreen: bool, pub vsync: bool, pub crt: bool, - #[serde(default)] - pub theme: i32, } #[derive(Default, serde::Serialize, serde::Deserialize)] @@ -71,13 +69,19 @@ pub struct Cheats { pub cheats: rustc_hash::FxHashMap>>, } +#[derive(Default, serde::Serialize, serde::Deserialize)] +pub struct Ui { + pub theme: i32, + pub rom_dir: std::path::PathBuf, + pub recent_roms: Vec, +} + #[derive(Default, serde::Serialize, serde::Deserialize)] pub struct Config { pub input: Input, pub video: Video, pub emulation: Emulation, - pub rom_dir: std::path::PathBuf, - pub recent_roms: Vec, + pub ui: Ui, #[serde(skip)] write_to_disk: bool, } @@ -181,7 +185,6 @@ impl Config { widescreen: false, vsync: true, crt: false, - theme: 0, }, emulation: Emulation { overclock: false, @@ -189,8 +192,11 @@ impl Config { usb: false, rewind: false, }, - rom_dir: std::path::PathBuf::new(), - recent_roms: Vec::new(), + ui: Ui { + theme: 0, + rom_dir: std::path::PathBuf::new(), + recent_roms: Vec::new(), + }, write_to_disk: true, } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 96cf968..6ee8567 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -113,6 +113,7 @@ fn local_game_window(app: &AppWindow, config: &ui::config::Config) { app.set_recent_roms(slint::ModelRc::from(std::rc::Rc::new( slint::VecModel::from( config + .ui .recent_roms .iter() .filter(|x| rom_exists(x)) @@ -180,7 +181,7 @@ fn settings_window(app: &AppWindow, config: &ui::config::Config) { app.set_widescreen(config.video.widescreen); app.set_vsync(config.video.vsync); app.set_apply_crt_shader(config.video.crt); - app.set_theme(config.video.theme); + app.set_theme(config.ui.theme); app.set_overclock_n64_cpu(config.emulation.overclock); app.set_disable_expansion_pak(config.emulation.disable_expansion_pak); app.set_emulate_usb(config.emulation.usb); @@ -194,7 +195,7 @@ fn settings_window(app: &AppWindow, config: &ui::config::Config) { }; app.set_resolution(combobox_value); - if let Some(rom_dir_str) = config.rom_dir.to_str() { + if let Some(rom_dir_str) = config.ui.rom_dir.to_str() { app.set_rom_dir(rom_dir_str.into()); } } @@ -446,14 +447,14 @@ fn controller_window(app: &AppWindow, config: &ui::config::Config) { pub fn save_settings(app: &AppWindow) { let mut config = ui::config::Config::new(); - config.rom_dir = app.get_rom_dir().to_string().into(); + config.ui.rom_dir = app.get_rom_dir().to_string().into(); config.video.integer_scaling = app.get_integer_scaling(); config.video.ssaa = app.get_ssaa(); config.video.fullscreen = app.get_fullscreen(); config.video.widescreen = app.get_widescreen(); config.video.vsync = app.get_vsync(); config.video.crt = app.get_apply_crt_shader(); - config.video.theme = app.get_theme(); + config.ui.theme = app.get_theme(); config.emulation.overclock = app.get_overclock_n64_cpu(); config.emulation.disable_expansion_pak = app.get_disable_expansion_pak(); config.emulation.usb = app.get_emulate_usb(); diff --git a/src/ui/gui/settings_page.slint b/src/ui/gui/settings_page.slint index 653304a..cf2c439 100644 --- a/src/ui/gui/settings_page.slint +++ b/src/ui/gui/settings_page.slint @@ -1,7 +1,7 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { GridBox, ComboBox, HorizontalBox, VerticalBox, Switch } from "std-widgets.slint"; +import { GroupBox, ComboBox, HorizontalBox, VerticalBox, Switch } from "std-widgets.slint"; import { Page } from "page.slint"; export global SettingsData { @@ -24,14 +24,16 @@ export global SettingsData { export component Settings inherits Page { title: @tr("Settings"); - VerticalBox { - alignment: start; - HorizontalBox { - alignment: center; - VerticalBox { - alignment: start; - GridBox { - Row { + HorizontalBox { + alignment: center; + VerticalBox { + alignment: start; + GroupBox { + title: @tr("Game"); + VerticalBox { + alignment: start; + HorizontalBox { + alignment: start; Text { text: @tr("Resolution:"); vertical-alignment: center; @@ -43,9 +45,107 @@ export component Settings inherits Page { SettingsData.resolution = self.current-index; } } - Rectangle {} } - Row { + + Switch { + text: @tr("SSAA downscaling"); + checked: SettingsData.ssaa; + toggled => { + SettingsData.ssaa = self.checked; + } + } + + Switch { + text: @tr("Integer Scaling"); + checked: SettingsData.integer_scaling; + toggled => { + SettingsData.integer_scaling = self.checked; + } + } + + Switch { + text: @tr("Fullscreen"); + checked: SettingsData.fullscreen; + toggled => { + SettingsData.fullscreen = self.checked; + } + } + + Switch { + text: @tr("Widescreen (stretch)"); + checked: SettingsData.widescreen; + toggled => { + SettingsData.widescreen = self.checked; + } + } + + Switch { + text: @tr("VSync"); + checked: SettingsData.vsync; + toggled => { + SettingsData.vsync = self.checked; + } + } + + Switch { + text: @tr("Apply CRT shader"); + checked: SettingsData.apply_crt_shader; + toggled => { + SettingsData.apply_crt_shader = self.checked; + } + } + + Rectangle { + height: 20px; + } + + Switch { + text: @tr("Overclock N64 CPU (may cause bugs)"); + checked: SettingsData.overclock_n64_cpu; + toggled => { + SettingsData.overclock_n64_cpu = self.checked; + } + } + + Switch { + text: @tr("Disable Expansion Pak"); + checked: SettingsData.disable_expansion_pak; + toggled => { + SettingsData.disable_expansion_pak = self.checked; + } + } + + Switch { + text: @tr("Enable Rewind"); + checked: SettingsData.rewind; + toggled => { + SettingsData.rewind = self.checked; + } + } + + Switch { + text: @tr("Emulate UNFLoader"); + checked: SettingsData.emulate_usb; + toggled => { + SettingsData.emulate_usb = self.checked; + } + } + + Switch { + text: @tr("Emulate VRU"); + checked: SettingsData.emulate_vru; + toggled => { + SettingsData.emulate_vru = self.checked; + } + } + } + } + GroupBox { + title: @tr("UI"); + VerticalBox { + alignment: start; + HorizontalBox { + alignment: start; Text { text: @tr("Theme:"); vertical-alignment: center; @@ -57,99 +157,9 @@ export component Settings inherits Page { SettingsData.theme = self.current-index; } } - Rectangle {} } - } - - Switch { - text: @tr("SSAA downscaling"); - checked: SettingsData.ssaa; - toggled => { - SettingsData.ssaa = self.checked; - } - } - - Switch { - text: @tr("Integer Scaling"); - checked: SettingsData.integer_scaling; - toggled => { - SettingsData.integer_scaling = self.checked; - } - } - - Switch { - text: @tr("Fullscreen"); - checked: SettingsData.fullscreen; - toggled => { - SettingsData.fullscreen = self.checked; - } - } - - Switch { - text: @tr("Widescreen (stretch)"); - checked: SettingsData.widescreen; - toggled => { - SettingsData.widescreen = self.checked; - } - } - - Switch { - text: @tr("VSync"); - checked: SettingsData.vsync; - toggled => { - SettingsData.vsync = self.checked; - } - } - - Switch { - text: @tr("Apply CRT shader"); - checked: SettingsData.apply_crt_shader; - toggled => { - SettingsData.apply_crt_shader = self.checked; - } - } - - Rectangle { - height: 20px; - } - - Switch { - text: @tr("Overclock N64 CPU (may cause bugs)"); - checked: SettingsData.overclock_n64_cpu; - toggled => { - SettingsData.overclock_n64_cpu = self.checked; - } - } - - Switch { - text: @tr("Disable Expansion Pak"); - checked: SettingsData.disable_expansion_pak; - toggled => { - SettingsData.disable_expansion_pak = self.checked; - } - } - - Switch { - text: @tr("Enable Rewind"); - checked: SettingsData.rewind; - toggled => { - SettingsData.rewind = self.checked; - } - } - - Switch { - text: @tr("Emulate UNFLoader"); - checked: SettingsData.emulate_usb; - toggled => { - SettingsData.emulate_usb = self.checked; - } - } - - Switch { - text: @tr("Emulate VRU"); - checked: SettingsData.emulate_vru; - toggled => { - SettingsData.emulate_vru = self.checked; + Rectangle { + height: 40px; // so the combobox isn't cut off } } } From da061240af6caf3fd0e913f9c4c9e00311f3e02d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 30 Jun 2026 12:32:43 +0200 Subject: [PATCH 1093/1117] normalize no-intro names (#1139) --- src/ui/gui.rs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 6ee8567..2930486 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -690,14 +690,20 @@ async fn load_no_intro( )); let mut current_game = String::new(); let mut map = no_intro_map.lock().await; + let mut xml_version = quick_xml::XmlVersion::Implicit1_0; loop { match reader.read_event() { + Ok(quick_xml::events::Event::Decl(e)) => { + if let Ok(version) = e.xml_version() { + xml_version = version; + } + } Ok(quick_xml::events::Event::Start(e)) => { if e.name().as_ref() == b"game" && let Ok(Some(name_attribute)) = e.try_get_attribute("name") - && let Ok(name) = String::from_utf8(name_attribute.value.into_owned()) + && let Ok(normalized_value) = name_attribute.normalized_value(xml_version) { - current_game = name; + current_game = normalized_value.into_owned(); } } Ok(quick_xml::events::Event::End(e)) => { @@ -708,12 +714,13 @@ async fn load_no_intro( Ok(quick_xml::events::Event::Empty(e)) => { if e.name().as_ref() == b"file" && let Ok(Some(format_attribute)) = e.try_get_attribute("format") - && format_attribute.value.as_ref() == b"BigEndian" + && let Ok(normalized_value) = format_attribute.normalized_value(xml_version) + && normalized_value.as_ref() == "BigEndian" && let Ok(Some(sha256_attribute)) = e.try_get_attribute("sha256") - && let Ok(sha256) = String::from_utf8(sha256_attribute.value.into_owned()) + && let Ok(normalized_sha256) = sha256_attribute.normalized_value(xml_version) && !current_game.is_empty() { - map.insert(sha256.to_lowercase(), current_game.clone()); + map.insert(normalized_sha256.to_lowercase(), current_game.clone()); } } Err(e) => panic!("Error at position {}: {:?}", reader.error_position(), e), From 8bc765c1a3bcb7e4e59959bf7756dcccbf688030 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 1 Jul 2026 09:34:48 +0200 Subject: [PATCH 1094/1117] match RA branding softcore->casual (#1142) --- retroachievements/retroachievements.c | 2 +- src/ui/gui/appwindow.slint | 2 +- src/ui/gui/retroachievements_page.slint | 4 ++-- src/ui/retroachievements.rs | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index 533fdc0..e52723d 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -159,7 +159,7 @@ void ra_welcome(const char **game_title, const char **game_image_url) { int message_length = snprintf( buffer, sizeof(buffer), "%s\nMode: %s\n", game->title, - rc_client_get_hardcore_enabled(g_client) ? "Hardcore" : "Softcore"); + rc_client_get_hardcore_enabled(g_client) ? "Hardcore" : "Casual"); if (summary.num_core_achievements != 0) { snprintf(buffer + message_length, sizeof(buffer) - message_length, diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index dcc48a4..0b07d14 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -61,7 +61,7 @@ export component AppWindow inherits Window { in-out property ra_challenge <=> RAData.challenge; in-out property ra_leaderboard <=> RAData.leaderboard; in-out property ra_rich_presence <=> RAData.rich_presence; - in-out property ra_softcore_only <=> RAData.ra_softcore_only; + in-out property ra_casual_only <=> RAData.ra_casual_only; out property ra_not_logged_in <=> RAData.not_logged_in; in-out property integer_scaling <=> SettingsData.integer_scaling; in-out property ssaa <=> SettingsData.ssaa; diff --git a/src/ui/gui/retroachievements_page.slint b/src/ui/gui/retroachievements_page.slint index 37de87d..581e39f 100644 --- a/src/ui/gui/retroachievements_page.slint +++ b/src/ui/gui/retroachievements_page.slint @@ -12,7 +12,7 @@ export global RAData { in-out property rich_presence; in-out property ra_logging_in; in-out property ra_show_profile; - in-out property ra_softcore_only; + in-out property ra_casual_only; in-out property ra_username; in-out property ra_password; in-out property current_user_message; @@ -47,7 +47,7 @@ export component RetroAchievements inherits Page { ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard,RAData.rich_presence); } } - if !RAData.ra_softcore_only: Switch { + if !RAData.ra_casual_only: Switch { text: @tr("Hardcore mode"); checked: RAData.hardcore; enabled: RAData.enabled; diff --git a/src/ui/retroachievements.rs b/src/ui/retroachievements.rs index d383553..66c824c 100644 --- a/src/ui/retroachievements.rs +++ b/src/ui/retroachievements.rs @@ -20,7 +20,7 @@ pub fn ra_window(app: &ui::gui::AppWindow) { } if !cfg!(ra_hardcore_enabled) { - app.set_ra_softcore_only(true); + app.set_ra_casual_only(true); } if app.get_ra_enabled() && !app.get_ra_username().is_empty() { From 032bf1acf34c43446f828b0a19a43e8dcb9c7353 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 1 Jul 2026 09:58:17 +0200 Subject: [PATCH 1095/1117] Update contribution guidelines (#1143) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 40d8bbf..f00a8eb 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ flatpak run --filesystem=host:ro io.github.gopher64.gopher64 /path/to/rom.z64 ## contributing -I would prefer that people did not submit PRs that are vibe coded and/or co-authored by AI agents. If you are going to submit a PR, and especially if you are going to submit a PR that is AI-assisted, it should be scoped to a single feature/improvement. +PRs that are vibe coded and/or co-authored by AI agents (Plan/Agent mode) are not permitted. If you are going to submit a PR, it should be scoped to a single feature/improvement. Please contact me via a GitHub issue or Discord (loganmc10) before doing substantial work on a PR. From 3bc7c96191bb4b34eb5d2c61a75cbf3c96a719a7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 2 Jul 2026 10:04:51 +0200 Subject: [PATCH 1096/1117] move input polling (#1145) * move input polling * more * more * more --- parallel-rdp/interface.cpp | 13 ++++++++----- parallel-rdp/wsi_platform.cpp | 2 +- src/device/controller.rs | 2 +- src/device/vi.rs | 1 - src/lib.rs | 2 -- src/netplay.rs | 3 +-- src/ui.rs | 12 ------------ src/ui/input.rs | 7 +------ src/ui/video.rs | 4 +--- 9 files changed, 13 insertions(+), 33 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 05c1e27..47b0977 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -335,11 +335,11 @@ static void rdp_new_processor() { gfx_info.RDRAM_SIZE / 2, flags); g_tmem = processor->get_tmem(); if (!g_tmem) { - printf("Failed to get tmem\n"); + LOGE("Failed to get tmem\n"); } g_hidden_rdram = processor->begin_read_hidden_rdram(); if (!g_hidden_rdram) { - printf("Failed to get hidden_rdram\n"); + LOGE("Failed to get hidden_rdram\n"); } sync_signal = 0; @@ -376,7 +376,7 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, SDL_SyncWindow(window); bool result = SDL_AddEventWatch(sdl_event_filter, nullptr); if (!result) { - printf("Could not add event watch.\n"); + LOGE("Could not add event watch.\n"); return; } @@ -692,7 +692,10 @@ void rdp_update_screen() { if (SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED) { return; } - wsi->end_frame(); + if (!wsi->end_frame()) { + LOGE("End frame failed\n"); + SDL_PumpEvents(); // For Android to trigger pause event + } wsi->begin_frame(); } @@ -787,7 +790,7 @@ uint32_t pixel_size(uint32_t pixel_type, uint32_t area) { case 3: return area * 4; default: - printf("Invalid pixel size: %u\n", pixel_type); + LOGE("Invalid pixel size: %u\n", pixel_type); return 0; } } diff --git a/parallel-rdp/wsi_platform.cpp b/parallel-rdp/wsi_platform.cpp index 89949eb..4e18468 100644 --- a/parallel-rdp/wsi_platform.cpp +++ b/parallel-rdp/wsi_platform.cpp @@ -46,7 +46,7 @@ uint32_t SDL_WSIPlatform::get_surface_height() { bool SDL_WSIPlatform::alive(Vulkan::WSI &wsi) { return true; } -void SDL_WSIPlatform::poll_input() {} +void SDL_WSIPlatform::poll_input() { SDL_PumpEvents(); } void SDL_WSIPlatform::poll_input_async(Granite::InputTrackerHandler *handler) {} diff --git a/src/device/controller.rs b/src/device/controller.rs index 61afd96..fead441 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -59,7 +59,7 @@ pub fn process(device: &mut device::Device, channel: usize) { let input = if let Some(netplay) = &mut device.netplay { netplay.inputs[channel].0 } else { - ui::input::get(&mut device.ui, channel, device.speed_limiter.frame_counter) + ui::input::get(&mut device.ui, channel) }; device.pif.ram[offset..offset + 4].copy_from_slice(&input.data.to_ne_bytes()); diff --git a/src/device/vi.rs b/src/device/vi.rs index bc7a36b..298c90e 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -118,7 +118,6 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u pub fn update_screen(device: &mut device::Device) { if !netplay::in_rollback(device.netplay.as_ref()) { ui::video::render_frame(); - unsafe { sdl3_sys::events::SDL_PumpEvents() }; } let (speed_limiter_toggled, paused) = ui::video::check_callback(device); diff --git a/src/lib.rs b/src/lib.rs index c15ee71..d952185 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -128,8 +128,6 @@ pub fn run(args: Args, arg_count: usize) -> std::io::Result<()> { ui::sdl_hints(); if let Some(game) = args.game { - ui::disable_auto_update_joysticks(); - let file_path = std::path::Path::new(&game).to_path_buf(); let Some(rom_contents) = device::get_rom_contents(&file_path) else { return Err(Error::other(format!( diff --git a/src/netplay.rs b/src/netplay.rs index 089466b..dc56b20 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -340,7 +340,7 @@ fn process_netplay(device: &mut device::Device) { fn advance_frame(device: &mut device::Device) { let netplay = device.netplay.as_mut().unwrap(); let local_input = if netplay.session.current_frame() > netplay.session.max_prediction() as i32 { - ui::input::get(&mut device.ui, 0, device.speed_limiter.frame_counter) + ui::input::get(&mut device.ui, 0) } else { //workaround for disabled rollback ui::input::InputData::default() @@ -486,7 +486,6 @@ pub fn init( message_timer = std::time::Instant::now(); } - unsafe { sdl3_sys::events::SDL_PumpEvents() }; ui::video::render_frame(); ui::video::update_screen(); std::thread::sleep(std::time::Duration::from_millis(10)); diff --git a/src/ui.rs b/src/ui.rs index fdb8433..e673771 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -49,7 +49,6 @@ unsafe impl Sync for Audio {} #[derive(Default)] pub struct Input { pub keyboard_state: *const bool, - pub last_polled: u64, pub controllers: [input::Controllers; 4], } @@ -120,16 +119,6 @@ pub fn sdl_hints() { } } -pub fn disable_auto_update_joysticks() { - unsafe { - let hint = std::ffi::CString::new("0").unwrap(); - sdl3_sys::everything::SDL_SetHint( - sdl3_sys::everything::SDL_HINT_AUTO_UPDATE_JOYSTICKS, - hint.as_ptr(), - ); - } -} - pub fn sdl_init(flag: sdl3_sys::init::SDL_InitFlags) { unsafe { if sdl3_sys::init::SDL_WasInit(flag) == 0 && !sdl3_sys::init::SDL_InitSubSystem(flag) { @@ -195,7 +184,6 @@ impl Ui { let (vis_tx, vis_rx) = tokio::sync::mpsc::unbounded_channel(); Ui { input: Input { - last_polled: 0, controllers: [ input::Controllers { game_controller: std::ptr::null_mut(), diff --git a/src/ui/input.rs b/src/ui/input.rs index fec8fe0..9abc009 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -503,14 +503,9 @@ fn handle_hotkeys(keys: u32, last_key_state: u32) { } } -pub fn get(ui: &mut ui::Ui, channel: usize, vi_counter: u64) -> InputData { +pub fn get(ui: &mut ui::Ui, channel: usize) -> InputData { handle_joystick_events(ui); - if ui.input.last_polled != vi_counter { - ui.input.last_polled = vi_counter; - unsafe { sdl3_sys::joystick::SDL_UpdateJoysticks() }; - } - let profile_name = &ui.config.input.input_profile_binding[channel]; let Some(profile) = ui.config.input.input_profiles.get(profile_name) else { eprintln!("Invalid profile name: {profile_name}"); diff --git a/src/ui/video.rs b/src/ui/video.rs index 1de4f3c..660ed50 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -182,16 +182,14 @@ pub fn load_state(device: &mut device::Device, rdp_state: *const u8) { pub fn pause_loop(ui: &mut ui::Ui, frame_time: f64) { let mut paused = true; let mut frame_advance = false; - let mut pause_counter = 0; while paused && !frame_advance { std::thread::sleep(std::time::Duration::from_secs_f64(frame_time)); - ui::input::get(ui, 0, pause_counter); // to gather hotkey input unsafe { sdl3_sys::events::SDL_PumpEvents() }; + ui::input::get(ui, 0); // to gather hotkey input retroachievements::do_idle(); let callback = unsafe { rdp_check_callback() }; paused = callback.paused; frame_advance = callback.frame_advance; - pause_counter += 1; } } From 1bfb50de8a4dd66f510a091011d50df9bf90e97e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 5 Jul 2026 12:43:23 +0200 Subject: [PATCH 1097/1117] re-arrange input profiles (#1150) --- Cargo.lock | 21 - Cargo.toml | 2 - .../github/gopher64/gopher64/N64Activity.kt | 1 - data/ui/controller.png | Bin 1090302 -> 0 bytes src/lib.rs | 4 +- src/ui.rs | 1 + src/ui/config.rs | 33 +- src/ui/gui.rs | 2 +- src/ui/input.rs | 982 +++--------------- src/ui/input_profile.rs | 929 +++++++++++++++++ src/ui/video.rs | 34 - 11 files changed, 1121 insertions(+), 888 deletions(-) delete mode 100644 data/ui/controller.png create mode 100644 src/ui/input_profile.rs diff --git a/Cargo.lock b/Cargo.lock index a825a0e..4656a47 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2796,7 +2796,6 @@ dependencies = [ "reqwest", "rfd", "rustc-hash 2.1.2", - "sdl3-image-sys", "sdl3-src", "sdl3-sys", "sdl3-ttf-sys", @@ -6441,26 +6440,6 @@ dependencies = [ "tiny-skia 0.11.4", ] -[[package]] -name = "sdl3-image-src" -version = "3.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe273101c7dab94551183212eee9adef1a7bf274d407f0b7bfe72482960ab25c" - -[[package]] -name = "sdl3-image-sys" -version = "0.6.4+SDL-image-3.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a445f781b39a1c1bc751f5f4612191e0402006e35ad5d02d9193281afad1cf4" -dependencies = [ - "cmake", - "pkg-config", - "rpkg-config", - "sdl3-image-src", - "sdl3-sys", - "vcpkg", -] - [[package]] name = "sdl3-src" version = "3.4.10" diff --git a/Cargo.toml b/Cargo.toml index 4bb8c32..ef1c908 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -45,14 +45,12 @@ dirs = "6.0" open = { version = "5.3", optional = true } sdl3-sys = { version = "0.6", features = ["build-from-source-static"] } sdl3-ttf-sys = { version = "0.6", features = ["build-static-vendored", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } -sdl3-image-sys = { version = "0.6", features = ["build-static-vendored"] } [target.'cfg(target_os = "android")'.dependencies] slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "backend-android-activity-06", "accessibility"], optional = true } jni = "0.22" sdl3-sys = { version = "0.6", features = ["build-from-source"] } sdl3-ttf-sys = { version = "0.6", features = ["build-from-source", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } -sdl3-image-sys = { version = "0.6", features = ["build-from-source"] } [build-dependencies] winresource = "0.1" diff --git a/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt b/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt index bcd1a5c..e7e37d4 100644 --- a/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt +++ b/android-project/app/src/main/java/io/github/gopher64/gopher64/N64Activity.kt @@ -24,7 +24,6 @@ class N64Activity : SDLActivity() { override fun getLibraries(): Array = arrayOf( "SDL3", "SDL3_ttf", - "SDL3_image", "gopher64" ) diff --git a/data/ui/controller.png b/data/ui/controller.png deleted file mode 100644 index 9b8c031ef678715437354a3369ab795e3adbd7b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1090302 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⪙-|JxrmoK}+ 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�vX?TmF%h<4Os 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

            i(c3S}G_s#HP=3 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 {aJt+`RG` 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 T*s=) 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�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

              H%`AJs{I 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 z%0A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

              vi$PCFNBcTGDlF8+)Q>CyLGXaBgp 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

              TA{A( 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

              exE`+tZ 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 Y1Dtzi5D12j$N&HU07*qoM6N<$f}J6`xBvhE diff --git a/src/lib.rs b/src/lib.rs index d952185..3e9ffc8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -284,11 +284,11 @@ pub fn run(args: Args, arg_count: usize) -> std::io::Result<()> { let mut config = ui::config::Config::new(); if let Some(profile) = args.configure_input_profile { - ui::input::configure_input_profile( + ui::input_profile::configure_input_profile( &mut config, profile, args.use_dinput, - args.deadzone.unwrap_or(ui::input::DEADZONE_DEFAULT), + args.deadzone.unwrap_or(ui::input_profile::DEADZONE_DEFAULT), ); ui::sdl_close(); diff --git a/src/ui.rs b/src/ui.rs index e673771..408b0df 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -7,6 +7,7 @@ pub mod config; #[cfg(feature = "gui")] pub mod gui; pub mod input; +pub mod input_profile; #[cfg(feature = "gui")] pub mod netplay; #[cfg(feature = "gui")] diff --git a/src/ui/config.rs b/src/ui/config.rs index 57be74b..ccced72 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -1,34 +1,36 @@ use crate::ui; -#[derive(Copy, Clone, serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct InputKeyButton { - pub enabled: bool, pub id: i32, } -#[derive(PartialEq, Copy, Clone, serde::Serialize, serde::Deserialize)] +#[derive(PartialEq, Clone, serde::Serialize, serde::Deserialize)] pub struct InputControllerAxis { - pub enabled: bool, pub id: i32, pub axis: i16, pub initial_state: i16, } -#[derive(Copy, Clone, serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct InputJoystickHat { - pub enabled: bool, pub id: i32, pub direction: u8, } -#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, serde::Serialize, serde::Deserialize)] +pub enum InputItem { + Key(InputKeyButton), + ControllerButton(InputKeyButton), + ControllerAxis(InputControllerAxis), + JoystickButton(InputKeyButton), + JoystickHat(InputJoystickHat), + JoystickAxis(InputControllerAxis), +} + +#[derive(Clone, serde::Serialize, serde::Deserialize)] pub struct InputProfile { - pub keys: [InputKeyButton; ui::input::PROFILE_SIZE], - pub controller_buttons: [InputKeyButton; ui::input::PROFILE_SIZE], - pub controller_axis: [InputControllerAxis; ui::input::PROFILE_SIZE], - pub joystick_buttons: [InputKeyButton; ui::input::PROFILE_SIZE], - pub joystick_hat: [InputJoystickHat; ui::input::PROFILE_SIZE], - pub joystick_axis: [InputControllerAxis; ui::input::PROFILE_SIZE], + pub inputs: [[Option; 2]; ui::input_profile::PROFILE_SIZE], pub dinput: bool, pub deadzone: i32, } @@ -160,7 +162,10 @@ impl Config { } let mut input_profiles = std::collections::BTreeMap::new(); - input_profiles.insert("default".to_string(), ui::input::get_default_profile()); + input_profiles.insert( + "default".to_string(), + ui::input_profile::get_default_profile(), + ); Config { input: input_data.unwrap_or(Input { input_profile_binding: [ diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 2930486..764dc00 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -347,7 +347,7 @@ fn controller_window(app: &AppWindow, config: &ui::config::Config) { app.on_input_profile_button_clicked(move || { weak_app .upgrade_in_event_loop(move |handle| { - handle.set_input_deadzone(ui::input::DEADZONE_DEFAULT); + handle.set_input_deadzone(ui::input_profile::DEADZONE_DEFAULT); handle.set_input_profile_name(String::new().into()); handle.set_input_dinput(false); handle.set_show_input_profile(true); diff --git a/src/ui/input.rs b/src/ui/input.rs index 9abc009..3cd49f1 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -2,34 +2,11 @@ use std::ops::Neg; use crate::ui; -const R_DPAD: usize = 0; -const L_DPAD: usize = 1; -const D_DPAD: usize = 2; -const U_DPAD: usize = 3; -const START_BUTTON: usize = 4; -const Z_TRIG: usize = 5; -const B_BUTTON: usize = 6; -const A_BUTTON: usize = 7; -const R_CBUTTON: usize = 8; -const L_CBUTTON: usize = 9; -const D_CBUTTON: usize = 10; -const U_CBUTTON: usize = 11; -const R_TRIG: usize = 12; -const L_TRIG: usize = 13; -const AXIS_LEFT: usize = 14; -const AXIS_RIGHT: usize = 15; -const AXIS_UP: usize = 16; -const AXIS_DOWN: usize = 17; -const HOTKEY: usize = 18; -pub const PROFILE_SIZE: usize = 19; - const X_AXIS_SHIFT: usize = 16; const Y_AXIS_SHIFT: usize = 24; const MAX_AXIS_VALUE: f64 = 85.0; -pub const DEADZONE_DEFAULT: i32 = 5; - pub const UNKNOWN_CONTROLLER_NAME: &str = "Unknown controller"; #[derive(Default)] @@ -83,196 +60,158 @@ fn normalize_axis_position(axis_position: i16) -> f64 { axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64 } -fn set_axis_from_joystick( +fn set_axis( profile: &ui::config::InputProfile, joystick: *mut sdl3_sys::joystick::SDL_Joystick, -) -> (f64, f64) { - let mut x = 0.0; - let mut y = 0.0; - if profile.joystick_axis[AXIS_LEFT].enabled { - let axis_position = unsafe { - sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_LEFT].id) - }; - if axis_position as isize * profile.joystick_axis[AXIS_LEFT].axis as isize > 0 { - x = normalize_axis_position(axis_position); - } - } - if profile.joystick_axis[AXIS_RIGHT].enabled { - let axis_position = unsafe { - sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_RIGHT].id) - }; - if axis_position as isize * profile.joystick_axis[AXIS_RIGHT].axis as isize > 0 { - x = normalize_axis_position(axis_position); - } - } - if profile.joystick_axis[AXIS_DOWN].enabled { - let axis_position = unsafe { - sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_DOWN].id) - }; - if axis_position as isize * profile.joystick_axis[AXIS_DOWN].axis as isize > 0 { - y = normalize_axis_position(axis_position).neg(); - } - } - if profile.joystick_axis[AXIS_UP].enabled { - let axis_position = unsafe { - sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_UP].id) - }; - if axis_position as isize * profile.joystick_axis[AXIS_UP].axis as isize > 0 { - y = normalize_axis_position(axis_position).neg(); - } - } - (x, y) -} - -fn set_axis_from_controller( - profile: &ui::config::InputProfile, controller: *mut sdl3_sys::gamepad::SDL_Gamepad, -) -> (f64, f64) { - let mut x = 0.0; - let mut y = 0.0; - if profile.controller_axis[AXIS_LEFT].enabled { - let axis_position = unsafe { - sdl3_sys::gamepad::SDL_GetGamepadAxis( - controller, - sdl3_sys::gamepad::SDL_GamepadAxis(profile.controller_axis[AXIS_LEFT].id), - ) - }; - if axis_position as isize * profile.controller_axis[AXIS_LEFT].axis as isize > 0 { - x = normalize_axis_position(axis_position); - } - } - if profile.controller_axis[AXIS_RIGHT].enabled { - let axis_position = unsafe { - sdl3_sys::gamepad::SDL_GetGamepadAxis( - controller, - sdl3_sys::gamepad::SDL_GamepadAxis(profile.controller_axis[AXIS_RIGHT].id), - ) - }; - if axis_position as isize * profile.controller_axis[AXIS_RIGHT].axis as isize > 0 { - x = normalize_axis_position(axis_position); - } - } - if profile.controller_axis[AXIS_DOWN].enabled { - let axis_position = unsafe { - sdl3_sys::gamepad::SDL_GetGamepadAxis( - controller, - sdl3_sys::gamepad::SDL_GamepadAxis(profile.controller_axis[AXIS_DOWN].id), - ) - }; - if axis_position as isize * profile.controller_axis[AXIS_DOWN].axis as isize > 0 { - y = normalize_axis_position(axis_position).neg(); - } - } - if profile.controller_axis[AXIS_UP].enabled { - let axis_position = unsafe { - sdl3_sys::gamepad::SDL_GetGamepadAxis( - controller, - sdl3_sys::gamepad::SDL_GamepadAxis(profile.controller_axis[AXIS_UP].id), - ) - }; - if axis_position as isize * profile.controller_axis[AXIS_UP].axis as isize > 0 { - y = normalize_axis_position(axis_position).neg(); - } - } - (x, y) -} - -fn set_axis_from_keys( - profile: &ui::config::InputProfile, keyboard_state: *const bool, ) -> (f64, f64) { let mut x = 0.0; let mut y = 0.0; - if profile.keys[AXIS_LEFT].enabled - && unsafe { *keyboard_state.offset(profile.keys[AXIS_LEFT].id as isize) } - { - x = -MAX_AXIS_VALUE + let axes = [ + ui::input_profile::AXIS_LEFT, + ui::input_profile::AXIS_RIGHT, + ui::input_profile::AXIS_DOWN, + ui::input_profile::AXIS_UP, + ]; + let mut has_deadzone = false; + for axis in axes { + for input in profile.inputs[axis].iter() { + if !controller.is_null() + && let Some(ui::config::InputItem::ControllerAxis(controller_axis)) = input + { + let axis_position = unsafe { + sdl3_sys::gamepad::SDL_GetGamepadAxis( + controller, + sdl3_sys::gamepad::SDL_GamepadAxis(controller_axis.id), + ) + }; + if axis_position as isize * controller_axis.axis as isize > 0 { + let axis_value = if axis == ui::input_profile::AXIS_LEFT + || axis == ui::input_profile::AXIS_RIGHT + { + &mut x + } else { + &mut y + }; + *axis_value = normalize_axis_position(axis_position); + has_deadzone = true; + } + } else if !joystick.is_null() + && let Some(ui::config::InputItem::JoystickAxis(joystick_axis)) = input + { + let axis_position = + unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, joystick_axis.id) }; + if axis_position as isize * joystick_axis.axis as isize > 0 { + let axis_value = if axis == ui::input_profile::AXIS_LEFT + || axis == ui::input_profile::AXIS_RIGHT + { + &mut x + } else { + &mut y + }; + *axis_value = normalize_axis_position(axis_position); + has_deadzone = true; + } + } else if let Some(ui::config::InputItem::Key(key)) = input + && unsafe { *keyboard_state.offset(key.id as isize) } + { + match axis { + ui::input_profile::AXIS_LEFT => x = -MAX_AXIS_VALUE, + ui::input_profile::AXIS_RIGHT => x = MAX_AXIS_VALUE, + ui::input_profile::AXIS_DOWN => y = MAX_AXIS_VALUE, + ui::input_profile::AXIS_UP => y = -MAX_AXIS_VALUE, + _ => unreachable!(), + } + } + } } - if profile.keys[AXIS_RIGHT].enabled - && unsafe { *keyboard_state.offset(profile.keys[AXIS_RIGHT].id as isize) } - { - x = MAX_AXIS_VALUE - } - if profile.keys[AXIS_DOWN].enabled - && unsafe { *keyboard_state.offset(profile.keys[AXIS_DOWN].id as isize) } - { - y = -MAX_AXIS_VALUE - } - if profile.keys[AXIS_UP].enabled - && unsafe { *keyboard_state.offset(profile.keys[AXIS_UP].id as isize) } - { - y = MAX_AXIS_VALUE + + y = y.neg(); + if has_deadzone { + apply_deadzone(&mut x, &mut y, profile.deadzone); } (x, y) } -fn set_buttons_from_joystick( - profile: &ui::config::InputProfile, - i: usize, +fn is_controller_button_pressed( + input: &Option, joystick: *mut sdl3_sys::joystick::SDL_Joystick, - keys: &mut u32, -) { - let profile_joystick_button = profile.joystick_buttons[i]; - if profile_joystick_button.enabled { - *keys |= (unsafe { - sdl3_sys::joystick::SDL_GetJoystickButton(joystick, profile_joystick_button.id) - } as u32) - << i; - } - - let profile_joystick_hat = profile.joystick_hat[i]; - if profile_joystick_hat.enabled - && (unsafe { sdl3_sys::joystick::SDL_GetJoystickHat(joystick, profile_joystick_hat.id) } - & profile_joystick_hat.direction) - != 0 - { - *keys |= 1 << i; - } - - let profile_joystick_axis = profile.joystick_axis[i]; - if profile_joystick_axis.enabled { - let axis_position = - unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile_joystick_axis.id) }; - if (axis_position as isize * profile_joystick_axis.axis as isize > 0 - || profile_joystick_axis.initial_state != 0) - && axis_position.abs_diff(profile_joystick_axis.initial_state) > (u16::MAX / 4) + controller: *mut sdl3_sys::gamepad::SDL_Gamepad, +) -> bool { + if !controller.is_null() { + if let Some(ui::config::InputItem::ControllerButton(controller_button)) = input + && unsafe { + sdl3_sys::gamepad::SDL_GetGamepadButton( + controller, + sdl3_sys::gamepad::SDL_GamepadButton(controller_button.id), + ) + } { - *keys |= 1 << i; + return true; + } + if let Some(ui::config::InputItem::ControllerAxis(controller_axis)) = input { + let axis_position = unsafe { + sdl3_sys::gamepad::SDL_GetGamepadAxis( + controller, + sdl3_sys::gamepad::SDL_GamepadAxis(controller_axis.id), + ) + }; + if axis_position as isize * controller_axis.axis as isize > 0 + && axis_position.saturating_abs() > i16::MAX / 2 + { + return true; + } + } + } else if !joystick.is_null() { + if let Some(ui::config::InputItem::JoystickButton(joystick_button)) = input + && unsafe { sdl3_sys::joystick::SDL_GetJoystickButton(joystick, joystick_button.id) } + { + return true; + } + if let Some(ui::config::InputItem::JoystickHat(joystick_hat)) = input + && (unsafe { sdl3_sys::joystick::SDL_GetJoystickHat(joystick, joystick_hat.id) } + & joystick_hat.direction) + != 0 + { + return true; + } + if let Some(ui::config::InputItem::JoystickAxis(joystick_axis)) = input { + let axis_position = + unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, joystick_axis.id) }; + if (axis_position as isize * joystick_axis.axis as isize > 0 + || joystick_axis.initial_state != 0) + && axis_position.abs_diff(joystick_axis.initial_state) > (u16::MAX / 4) + { + return true; + } } } + false } -fn set_buttons_from_controller( +fn set_buttons( profile: &ui::config::InputProfile, - i: usize, + joystick: *mut sdl3_sys::joystick::SDL_Joystick, controller: *mut sdl3_sys::gamepad::SDL_Gamepad, - keys: &mut u32, -) { - let profile_controller_button = profile.controller_buttons[i]; - if profile_controller_button.enabled { - *keys |= (unsafe { - sdl3_sys::gamepad::SDL_GetGamepadButton( - controller, - sdl3_sys::gamepad::SDL_GamepadButton(profile_controller_button.id), - ) - } as u32) - << i; - } - - let profile_controller_axis = profile.controller_axis[i]; - if profile_controller_axis.enabled { - let axis_position = unsafe { - sdl3_sys::gamepad::SDL_GetGamepadAxis( - controller, - sdl3_sys::gamepad::SDL_GamepadAxis(profile_controller_axis.id), - ) - }; - if axis_position as isize * profile_controller_axis.axis as isize > 0 - && axis_position.saturating_abs() > i16::MAX / 2 - { - *keys |= 1 << i; + keyboard_state: *const bool, + alt_pressed: bool, +) -> u32 { + let mut keys = 0; + for i in 0..14 { + for input in profile.inputs[i].iter() { + if let Some(ui::config::InputItem::Key(key)) = input + && !alt_pressed + && unsafe { *keyboard_state.offset(key.id as isize) } + { + keys |= 1 << i; + } + if is_controller_button_pressed(input, joystick, controller) { + keys |= 1 << i; + } } } + keys } pub fn set_rumble(ui: &ui::Ui, channel: usize, rumble: u8) { @@ -307,44 +246,12 @@ fn hotkey_pressed( joystick: *mut sdl3_sys::joystick::SDL_Joystick, controller: *mut sdl3_sys::gamepad::SDL_Gamepad, ) -> bool { - let controller_button = profile.controller_buttons[HOTKEY]; - let controller_axis = profile.controller_axis[HOTKEY]; - let joystick_button = profile.joystick_buttons[HOTKEY]; - let joystick_hat = profile.joystick_hat[HOTKEY]; - let joystick_axis = profile.joystick_axis[HOTKEY]; - - let mut pressed = false; - if controller_button.enabled && !controller.is_null() { - pressed = unsafe { - sdl3_sys::gamepad::SDL_GetGamepadButton( - controller, - sdl3_sys::gamepad::SDL_GamepadButton(controller_button.id), - ) - }; - } else if controller_axis.enabled && !controller.is_null() { - let axis_position = unsafe { - sdl3_sys::gamepad::SDL_GetGamepadAxis( - controller, - sdl3_sys::gamepad::SDL_GamepadAxis(controller_axis.id), - ) - }; - pressed = axis_position as isize * controller_axis.axis as isize > 0 - && axis_position.saturating_abs() > i16::MAX / 2 - } else if joystick_button.enabled && !joystick.is_null() { - pressed = - unsafe { sdl3_sys::joystick::SDL_GetJoystickButton(joystick, joystick_button.id) }; - } else if joystick_hat.enabled && !joystick.is_null() { - pressed = (unsafe { sdl3_sys::joystick::SDL_GetJoystickHat(joystick, joystick_hat.id) } - & joystick_hat.direction) - != 0; - } else if joystick_axis.enabled && !joystick.is_null() { - let axis_position = - unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, joystick_axis.id) }; - pressed = (axis_position as isize * joystick_axis.axis as isize > 0 - || joystick_axis.initial_state != 0) - && axis_position.abs_diff(joystick_axis.initial_state) > (u16::MAX / 4) + for input in profile.inputs[ui::input_profile::HOTKEY].iter() { + if is_controller_button_pressed(input, joystick, controller) { + return true; + } } - pressed + false } pub fn get_controller_names() -> Vec { @@ -446,7 +353,9 @@ fn handle_joystick_events(ui: &mut ui::Ui) { } fn handle_hotkeys(keys: u32, last_key_state: u32) { - if keys & (1 << L_TRIG) != 0 && last_key_state & (1 << L_TRIG) == 0 { + if keys & (1 << ui::input_profile::L_TRIG) != 0 + && last_key_state & (1 << ui::input_profile::L_TRIG) == 0 + { unsafe { sdl3_sys::events::SDL_PushEvent(&mut sdl3_sys::events::SDL_Event { user: sdl3_sys::events::SDL_UserEvent { @@ -457,7 +366,9 @@ fn handle_hotkeys(keys: u32, last_key_state: u32) { }) }; } - if keys & (1 << R_TRIG) != 0 && last_key_state & (1 << R_TRIG) == 0 { + if keys & (1 << ui::input_profile::R_TRIG) != 0 + && last_key_state & (1 << ui::input_profile::R_TRIG) == 0 + { unsafe { sdl3_sys::events::SDL_PushEvent(&mut sdl3_sys::events::SDL_Event { user: sdl3_sys::events::SDL_UserEvent { @@ -468,7 +379,9 @@ fn handle_hotkeys(keys: u32, last_key_state: u32) { }) }; } - if keys & (1 << START_BUTTON) != 0 && last_key_state & (1 << START_BUTTON) == 0 { + if keys & (1 << ui::input_profile::START_BUTTON) != 0 + && last_key_state & (1 << ui::input_profile::START_BUTTON) == 0 + { unsafe { sdl3_sys::events::SDL_PushEvent(&mut sdl3_sys::events::SDL_Event { user: sdl3_sys::events::SDL_UserEvent { @@ -479,7 +392,9 @@ fn handle_hotkeys(keys: u32, last_key_state: u32) { }) }; } - if keys & (1 << Z_TRIG) != 0 && last_key_state & (1 << Z_TRIG) == 0 { + if keys & (1 << ui::input_profile::Z_TRIG) != 0 + && last_key_state & (1 << ui::input_profile::Z_TRIG) == 0 + { unsafe { sdl3_sys::events::SDL_PushEvent(&mut sdl3_sys::events::SDL_Event { user: sdl3_sys::events::SDL_UserEvent { @@ -490,7 +405,9 @@ fn handle_hotkeys(keys: u32, last_key_state: u32) { }) }; } - if keys & (1 << L_CBUTTON) != 0 && last_key_state & (1 << L_CBUTTON) == 0 { + if keys & (1 << ui::input_profile::L_CBUTTON) != 0 + && last_key_state & (1 << ui::input_profile::L_CBUTTON) == 0 + { unsafe { sdl3_sys::events::SDL_PushEvent(&mut sdl3_sys::events::SDL_Event { user: sdl3_sys::events::SDL_UserEvent { @@ -514,7 +431,6 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> InputData { pak_change_pressed: false, }; }; - let mut keys = 0; let controller = ui.input.controllers[channel].game_controller; let joystick = ui.input.controllers[channel].joystick; @@ -529,37 +445,15 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> InputData { .offset(i32::from(sdl3_sys::scancode::SDL_SCANCODE_RALT) as isize) }; - for i in 0..14 { - if profile_name != "default" || channel == 0 { - let profile_key = profile.keys[i]; - if profile_key.enabled && !alt_pressed { - keys |= (unsafe { *ui.input.keyboard_state.offset(profile_key.id as isize) } - as u32) - << i; - } - } + let mut keys = set_buttons( + profile, + joystick, + controller, + ui.input.keyboard_state, + alt_pressed, + ); - if !controller.is_null() { - set_buttons_from_controller(profile, i, controller, &mut keys); - } else if !joystick.is_null() { - set_buttons_from_joystick(profile, i, joystick, &mut keys); - } - } - - let mut x: f64 = 0.0; - let mut y: f64 = 0.0; - - if profile_name != "default" || channel == 0 { - (x, y) = set_axis_from_keys(profile, ui.input.keyboard_state); - } - - if !controller.is_null() { - (x, y) = set_axis_from_controller(profile, controller); - apply_deadzone(&mut x, &mut y, profile.deadzone); - } else if !joystick.is_null() { - (x, y) = set_axis_from_joystick(profile, joystick); - apply_deadzone(&mut x, &mut y, profile.deadzone); - } + let (mut x, mut y) = set_axis(profile, joystick, controller, ui.input.keyboard_state); bound_axis(&mut x, &mut y); keys |= (x.round() as i8 as u8 as u32) << X_AXIS_SHIFT; @@ -572,14 +466,20 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> InputData { handle_hotkeys(keys, last_key_state); InputData { data: 0, - pak_change_pressed: keys & (1 << B_BUTTON) != 0, + pak_change_pressed: keys & (1 << ui::input_profile::B_BUTTON) != 0, } } else { - let key = profile.keys[HOTKEY]; + let mut pak_change_pressed = false; + for input in profile.inputs[ui::input_profile::HOTKEY].iter() { + if let Some(ui::config::InputItem::Key(key)) = input + && unsafe { *ui.input.keyboard_state.offset(key.id as isize) } + { + pak_change_pressed = true; + } + } InputData { data: keys, - pak_change_pressed: key.enabled - && unsafe { *ui.input.keyboard_state.offset(key.id as isize) }, + pak_change_pressed, } } } @@ -617,551 +517,7 @@ pub fn clear_bindings(config: &mut ui::config::Config) { } } -fn close_input_profile_window( - open_joysticks: Vec<*mut sdl3_sys::joystick::SDL_Joystick>, - open_controllers: Vec<*mut sdl3_sys::gamepad::SDL_Gamepad>, - renderer: *mut sdl3_sys::render::SDL_Renderer, - text_engine: *mut sdl3_ttf_sys::ttf::TTF_TextEngine, - font: *mut sdl3_ttf_sys::ttf::TTF_Font, - texture: *mut sdl3_sys::render::SDL_Texture, - window: *mut sdl3_sys::video::SDL_Window, -) { - for joystick in open_joysticks { - unsafe { sdl3_sys::joystick::SDL_CloseJoystick(joystick) } - } - for controller in open_controllers { - unsafe { sdl3_sys::gamepad::SDL_CloseGamepad(controller) } - } - - unsafe { - sdl3_sys::render::SDL_DestroyTexture(texture); - sdl3_ttf_sys::ttf::TTF_CloseFont(font); - sdl3_ttf_sys::ttf::TTF_DestroyRendererTextEngine(text_engine); - sdl3_sys::render::SDL_DestroyRenderer(renderer); - sdl3_sys::video::SDL_DestroyWindow(window); - } -} - -pub fn configure_input_profile( - config: &mut ui::config::Config, - profile: String, - dinput: bool, - deadzone: i32, -) { - ui::sdl_init(sdl3_sys::init::SDL_INIT_VIDEO); - ui::sdl_init(sdl3_sys::init::SDL_INIT_GAMEPAD); - ui::ttf_init(); - - if profile == "default" { - eprintln!("Profile name cannot be default"); - return; - } - if profile.is_empty() { - eprintln!("Profile name cannot be empty"); - return; - } - let mut open_joysticks: Vec<*mut sdl3_sys::joystick::SDL_Joystick> = Vec::new(); - let mut open_controllers: Vec<*mut sdl3_sys::gamepad::SDL_Gamepad> = Vec::new(); - - for joystick in get_joysticks().iter() { - if !dinput { - let controller = unsafe { sdl3_sys::gamepad::SDL_OpenGamepad(*joystick) }; - if !controller.is_null() { - open_controllers.push(controller); - } - } else { - let joystick = unsafe { sdl3_sys::joystick::SDL_OpenJoystick(*joystick) }; - if !joystick.is_null() { - open_joysticks.push(joystick); - } - } - } - - let title = std::ffi::CString::new("configure input profile").unwrap(); - let mut window: *mut sdl3_sys::video::SDL_Window = std::ptr::null_mut(); - let mut renderer: *mut sdl3_sys::render::SDL_Renderer = std::ptr::null_mut(); - #[cfg(target_os = "android")] - let window_flags = sdl3_sys::video::SDL_WINDOW_FULLSCREEN; - #[cfg(not(target_os = "android"))] - let window_flags = sdl3_sys::video::SDL_WindowFlags(0); - if !unsafe { - sdl3_sys::render::SDL_CreateWindowAndRenderer( - title.as_ptr(), - 852, - 480, - window_flags, - &mut window, - &mut renderer, - ) - } { - panic!("Could not create window and renderer") - } - if !unsafe { sdl3_sys::video::SDL_ShowWindow(window) } { - panic!("Could not show window") - } - - let key_labels: [(&str, usize); PROFILE_SIZE] = [ - ("A", A_BUTTON), - ("B", B_BUTTON), - ("Start", START_BUTTON), - ("D Up", U_DPAD), - ("D Down", D_DPAD), - ("D Left", L_DPAD), - ("D Right", R_DPAD), - ("C Up", U_CBUTTON), - ("C Down", D_CBUTTON), - ("C Left", L_CBUTTON), - ("C Right", R_CBUTTON), - ("L", L_TRIG), - ("R", R_TRIG), - ("Z", Z_TRIG), - ("Control Stick Up", AXIS_UP), - ("Control Stick Down", AXIS_DOWN), - ("Control Stick Left", AXIS_LEFT), - ("Control Stick Right", AXIS_RIGHT), - ("Hotkey Activator", HOTKEY), - ]; - - let mut new_keys = [ui::config::InputKeyButton { - enabled: false, - id: 0, - }; PROFILE_SIZE]; - let mut new_joystick_buttons = [ui::config::InputKeyButton { - enabled: false, - id: 0, - }; PROFILE_SIZE]; - let mut new_joystick_hat = [ui::config::InputJoystickHat { - enabled: false, - id: 0, - direction: 0, - }; PROFILE_SIZE]; - let mut new_joystick_axis = [ui::config::InputControllerAxis { - enabled: false, - id: 0, - axis: 0, - initial_state: 0, - }; PROFILE_SIZE]; - let mut new_controller_buttons = [ui::config::InputKeyButton { - enabled: false, - id: 0, - }; PROFILE_SIZE]; - let mut new_controller_axis = [ui::config::InputControllerAxis { - enabled: false, - id: 0, - axis: 0, - initial_state: 0, - }; PROFILE_SIZE]; - - let mut last_joystick_axis_result = ui::config::InputControllerAxis { - enabled: false, - id: 0, - axis: 0, - initial_state: 0, - }; - - let image_bytes = include_bytes!("../../data/ui/controller.png"); - let image = unsafe { - sdl3_image_sys::image::IMG_LoadPNG_IO(sdl3_sys::everything::SDL_IOFromConstMem( - image_bytes.as_ptr() as *const std::ffi::c_void, - image_bytes.len(), - )) - }; - let image_texture = unsafe { sdl3_sys::render::SDL_CreateTextureFromSurface(renderer, image) }; - unsafe { sdl3_sys::surface::SDL_DestroySurface(image) }; - let text_engine = unsafe { sdl3_ttf_sys::ttf::TTF_CreateRendererTextEngine(renderer) }; - let font = unsafe { - let font_bytes = include_bytes!("../../data/ui/RobotoMono-Regular.ttf"); - sdl3_ttf_sys::ttf::TTF_OpenFontIO( - sdl3_sys::everything::SDL_IOFromConstMem( - font_bytes.as_ptr() as *const std::ffi::c_void, - font_bytes.len(), - ), - true, - 35.0, - ) - }; - - for (key, value) in key_labels.iter() { - unsafe { - sdl3_sys::events::SDL_PumpEvents(); - sdl3_sys::events::SDL_FlushEvents( - u32::from(sdl3_sys::events::SDL_EVENT_FIRST), - u32::from(sdl3_sys::events::SDL_EVENT_LAST), - ); - } - - let mut key_set = false; - while !key_set { - ui::video::draw_text( - format!("Select binding for: {key}").as_str(), - renderer, - image_texture, - text_engine, - font, - ); - let mut event: sdl3_sys::events::SDL_Event = Default::default(); - while !key_set && unsafe { sdl3_sys::events::SDL_WaitEventTimeout(&mut event, 100) } { - if event.event_type() == sdl3_sys::events::SDL_EVENT_WINDOW_CLOSE_REQUESTED - || (event.event_type() == sdl3_sys::events::SDL_EVENT_KEY_DOWN - && unsafe { event.key.scancode } - == sdl3_sys::scancode::SDL_SCANCODE_AC_BACK) - { - close_input_profile_window( - open_joysticks, - open_controllers, - renderer, - text_engine, - font, - image_texture, - window, - ); - return; - } else if event.event_type() == sdl3_sys::events::SDL_EVENT_KEY_DOWN { - if unsafe { - !event.key.repeat - && event.key.scancode != sdl3_sys::scancode::SDL_SCANCODE_LALT - && event.key.scancode != sdl3_sys::scancode::SDL_SCANCODE_RALT - } { - new_keys[*value] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(unsafe { event.key.scancode }), - }; - key_set = true - } - } else if event.event_type() == sdl3_sys::events::SDL_EVENT_GAMEPAD_BUTTON_DOWN { - if !open_controllers.is_empty() { - new_controller_buttons[*value] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(unsafe { event.gbutton.button }), - }; - key_set = true - } - } else if event.event_type() == sdl3_sys::events::SDL_EVENT_GAMEPAD_AXIS_MOTION { - let axis_value = unsafe { event.gaxis.value }; - let axis = unsafe { event.gaxis.axis }; - if !open_controllers.is_empty() - && axis_value.saturating_abs() > (i16::MAX as i32 * 3 / 4) as i16 - { - let result = ui::config::InputControllerAxis { - enabled: true, - id: axis as i32, - axis: axis_value / axis_value.saturating_abs(), - initial_state: 0, - }; - if result != last_joystick_axis_result { - new_controller_axis[*value] = result; - last_joystick_axis_result = result; - key_set = true - } - } - } else if event.event_type() == sdl3_sys::events::SDL_EVENT_JOYSTICK_BUTTON_DOWN { - if !open_joysticks.is_empty() { - new_joystick_buttons[*value] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(unsafe { event.jbutton.button }), - }; - key_set = true - } - } else if event.event_type() == sdl3_sys::events::SDL_EVENT_JOYSTICK_HAT_MOTION { - let state = unsafe { event.jhat.value }; - let hat = unsafe { event.jhat.hat }; - if !open_joysticks.is_empty() && state != sdl3_sys::joystick::SDL_HAT_CENTERED { - new_joystick_hat[*value] = ui::config::InputJoystickHat { - enabled: true, - id: hat as i32, - direction: state, - }; - key_set = true - } - } else if event.event_type() == sdl3_sys::events::SDL_EVENT_JOYSTICK_AXIS_MOTION { - let axis_value = unsafe { event.jaxis.value }; - let axis = unsafe { event.jaxis.axis }; - - let mut initial_state = 0; - let has_initial_state = unsafe { - sdl3_sys::joystick::SDL_GetJoystickAxisInitialState( - sdl3_sys::joystick::SDL_GetJoystickFromID(event.jaxis.which), - axis as i32, - &mut initial_state, - ) - }; - initial_state = if has_initial_state { - if initial_state < i16::MIN / 2 { - i16::MIN - } else if initial_state > i16::MAX / 2 { - i16::MAX - } else { - 0 - } - } else { - 0 - }; - - if !open_joysticks.is_empty() - && axis_value.abs_diff(initial_state) > (u16::MAX / 4) - { - let result = ui::config::InputControllerAxis { - enabled: true, - id: axis as i32, - axis: axis_value / axis_value.saturating_abs(), - initial_state, - }; - let same_trigger = last_joystick_axis_result.id == result.id - && last_joystick_axis_result.initial_state != 0; - if result != last_joystick_axis_result && !same_trigger { - new_joystick_axis[*value] = result; - last_joystick_axis_result = result; - key_set = true - } - } - } - } - } - ui::video::draw_text( - "Binding set, please wait...", - renderer, - image_texture, - text_engine, - font, - ); - std::thread::sleep(std::time::Duration::from_millis(500)); - } - - close_input_profile_window( - open_joysticks, - open_controllers, - renderer, - text_engine, - font, - image_texture, - window, - ); - - let new_profile = ui::config::InputProfile { - keys: new_keys, - controller_buttons: new_controller_buttons, - controller_axis: new_controller_axis, - joystick_buttons: new_joystick_buttons, - joystick_hat: new_joystick_hat, - joystick_axis: new_joystick_axis, - dinput, - deadzone, - }; - config.input.input_profiles.insert(profile, new_profile); -} - -pub fn get_default_profile() -> ui::config::InputProfile { - let mut default_controller_buttons = [ui::config::InputKeyButton { - enabled: false, - id: 0, - }; PROFILE_SIZE]; - let mut default_controller_axis = [ui::config::InputControllerAxis { - enabled: false, - id: 0, - axis: 0, - initial_state: 0, - }; PROFILE_SIZE]; - let mut default_keys = [ui::config::InputKeyButton { - enabled: false, - id: 0, - }; PROFILE_SIZE]; - default_keys[R_DPAD] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_D), - }; - default_keys[L_DPAD] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_A), - }; - default_keys[D_DPAD] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_S), - }; - default_keys[U_DPAD] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_W), - }; - default_keys[START_BUTTON] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_RETURN), - }; - default_keys[Z_TRIG] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_Z), - }; - default_keys[B_BUTTON] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_LCTRL), - }; - default_keys[A_BUTTON] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_LSHIFT), - }; - default_keys[R_CBUTTON] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_L), - }; - default_keys[L_CBUTTON] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_J), - }; - default_keys[D_CBUTTON] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_K), - }; - default_keys[U_CBUTTON] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_I), - }; - default_keys[R_TRIG] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_C), - }; - default_keys[L_TRIG] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_X), - }; - default_keys[AXIS_LEFT] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_LEFT), - }; - default_keys[AXIS_RIGHT] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_RIGHT), - }; - default_keys[AXIS_UP] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_UP), - }; - default_keys[AXIS_DOWN] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_DOWN), - }; - default_keys[HOTKEY] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_COMMA), - }; - - default_controller_buttons[R_DPAD] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_RIGHT), - }; - default_controller_buttons[L_DPAD] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_LEFT), - }; - default_controller_buttons[D_DPAD] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_DOWN), - }; - default_controller_buttons[U_DPAD] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_UP), - }; - default_controller_buttons[START_BUTTON] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_START), - }; - default_controller_axis[Z_TRIG] = ui::config::InputControllerAxis { - enabled: true, - id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFT_TRIGGER), - axis: 1, - initial_state: 0, - }; - default_controller_buttons[B_BUTTON] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_WEST), - }; - default_controller_buttons[A_BUTTON] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_SOUTH), - }; - default_controller_axis[R_CBUTTON] = ui::config::InputControllerAxis { - enabled: true, - id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTX), - axis: 1, - initial_state: 0, - }; - default_controller_axis[L_CBUTTON] = ui::config::InputControllerAxis { - enabled: true, - id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTX), - axis: -1, - initial_state: 0, - }; - default_controller_axis[D_CBUTTON] = ui::config::InputControllerAxis { - enabled: true, - id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTY), - axis: 1, - initial_state: 0, - }; - default_controller_axis[U_CBUTTON] = ui::config::InputControllerAxis { - enabled: true, - id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTY), - axis: -1, - initial_state: 0, - }; - default_controller_buttons[R_TRIG] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER), - }; - default_controller_buttons[L_TRIG] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_LEFT_SHOULDER), - }; - default_controller_axis[AXIS_LEFT] = ui::config::InputControllerAxis { - enabled: true, - id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTX), - axis: -1, - initial_state: 0, - }; - default_controller_axis[AXIS_RIGHT] = ui::config::InputControllerAxis { - enabled: true, - id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTX), - axis: 1, - initial_state: 0, - }; - default_controller_axis[AXIS_UP] = ui::config::InputControllerAxis { - enabled: true, - id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTY), - axis: -1, - initial_state: 0, - }; - default_controller_axis[AXIS_DOWN] = ui::config::InputControllerAxis { - enabled: true, - id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTY), - axis: 1, - initial_state: 0, - }; - default_controller_buttons[HOTKEY] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_BACK), - }; - - ui::config::InputProfile { - keys: default_keys, - controller_buttons: default_controller_buttons, - controller_axis: default_controller_axis, - joystick_buttons: [ui::config::InputKeyButton { - enabled: false, - id: 0, - }; PROFILE_SIZE], - joystick_hat: [ui::config::InputJoystickHat { - enabled: false, - id: 0, - direction: 0, - }; PROFILE_SIZE], - joystick_axis: [ui::config::InputControllerAxis { - enabled: false, - id: 0, - axis: 0, - initial_state: 0, - }; PROFILE_SIZE], - dinput: false, - deadzone: DEADZONE_DEFAULT, - } -} - -fn get_joysticks() -> Vec { +pub fn get_joysticks() -> Vec { unsafe { sdl3_sys::events::SDL_PumpEvents() }; let mut num_joysticks = 0; let sdl_joysticks = unsafe { sdl3_sys::joystick::SDL_GetJoysticks(&mut num_joysticks) }; diff --git a/src/ui/input_profile.rs b/src/ui/input_profile.rs new file mode 100644 index 0000000..2169e37 --- /dev/null +++ b/src/ui/input_profile.rs @@ -0,0 +1,929 @@ +use crate::ui; + +const R_DPAD: usize = 0; +const L_DPAD: usize = 1; +const D_DPAD: usize = 2; +const U_DPAD: usize = 3; +pub const START_BUTTON: usize = 4; +pub const Z_TRIG: usize = 5; +pub const B_BUTTON: usize = 6; +const A_BUTTON: usize = 7; +const R_CBUTTON: usize = 8; +pub const L_CBUTTON: usize = 9; +const D_CBUTTON: usize = 10; +const U_CBUTTON: usize = 11; +pub const R_TRIG: usize = 12; +pub const L_TRIG: usize = 13; +pub const AXIS_RIGHT: usize = 14; +pub const AXIS_LEFT: usize = 15; +pub const AXIS_DOWN: usize = 16; +pub const AXIS_UP: usize = 17; +pub const HOTKEY: usize = 18; +pub const PROFILE_SIZE: usize = 19; + +pub const DEADZONE_DEFAULT: i32 = 5; + +const GATHER_TIME: usize = 5; + +pub fn configure_input_profile( + config: &mut ui::config::Config, + profile_name: String, + dinput: bool, + deadzone: i32, +) { + ui::sdl_init(sdl3_sys::init::SDL_INIT_VIDEO); + ui::sdl_init(sdl3_sys::init::SDL_INIT_GAMEPAD); + ui::ttf_init(); + + if profile_name == "default" { + eprintln!("Profile name cannot be default"); + return; + } + if profile_name.is_empty() { + eprintln!("Profile name cannot be empty"); + return; + } + + let mut profile = if let Some(profile) = config.input.input_profiles.get(&profile_name) { + profile.clone() + } else { + ui::config::InputProfile { + inputs: [const { [None, None] }; PROFILE_SIZE], + dinput, + deadzone, + } + }; + + let mut open_joysticks: Vec<*mut sdl3_sys::joystick::SDL_Joystick> = Vec::new(); + let mut open_controllers: Vec<*mut sdl3_sys::gamepad::SDL_Gamepad> = Vec::new(); + + for joystick in ui::input::get_joysticks().iter() { + if !dinput { + let controller = unsafe { sdl3_sys::gamepad::SDL_OpenGamepad(*joystick) }; + if !controller.is_null() { + open_controllers.push(controller); + } + } else { + let joystick = unsafe { sdl3_sys::joystick::SDL_OpenJoystick(*joystick) }; + if !joystick.is_null() { + open_joysticks.push(joystick); + } + } + } + + let title = std::ffi::CString::new("configure input profile").unwrap(); + let mut window: *mut sdl3_sys::video::SDL_Window = std::ptr::null_mut(); + let mut renderer: *mut sdl3_sys::render::SDL_Renderer = std::ptr::null_mut(); + #[cfg(target_os = "android")] + let window_flags = sdl3_sys::video::SDL_WINDOW_FULLSCREEN; + #[cfg(not(target_os = "android"))] + let window_flags = sdl3_sys::video::SDL_WindowFlags(0); + if !unsafe { + sdl3_sys::render::SDL_CreateWindowAndRenderer( + title.as_ptr(), + 852, + 480, + window_flags, + &mut window, + &mut renderer, + ) + } { + panic!("Could not create window and renderer") + } + if !unsafe { sdl3_sys::video::SDL_ShowWindow(window) } { + panic!("Could not show window") + } + + let text_engine = unsafe { sdl3_ttf_sys::ttf::TTF_CreateRendererTextEngine(renderer) }; + let font = unsafe { + let font_bytes = include_bytes!("../../data/ui/RobotoMono-Regular.ttf"); + sdl3_ttf_sys::ttf::TTF_OpenFontIO( + sdl3_sys::everything::SDL_IOFromConstMem( + font_bytes.as_ptr() as *const std::ffi::c_void, + font_bytes.len(), + ), + true, + 12.0, + ) + }; + + set_font_size(window, font); + + if draw_profile_screen(window, renderer, text_engine, font, &mut profile, dinput) { + profile.deadzone = deadzone; + profile.dinput = dinput; + config.input.input_profiles.insert(profile_name, profile); + } + + for joystick in open_joysticks { + unsafe { sdl3_sys::joystick::SDL_CloseJoystick(joystick) } + } + for controller in open_controllers { + unsafe { sdl3_sys::gamepad::SDL_CloseGamepad(controller) } + } + + unsafe { + sdl3_ttf_sys::ttf::TTF_CloseFont(font); + sdl3_ttf_sys::ttf::TTF_DestroyRendererTextEngine(text_engine); + sdl3_sys::render::SDL_DestroyRenderer(renderer); + sdl3_sys::video::SDL_DestroyWindow(window); + } +} + +fn set_font_size(window: *mut sdl3_sys::video::SDL_Window, font: *mut sdl3_ttf_sys::ttf::TTF_Font) { + let mut rect: sdl3_sys::rect::SDL_Rect = Default::default(); + unsafe { + sdl3_ttf_sys::ttf::TTF_SetFontSize(font, 12.0); + sdl3_sys::video::SDL_GetWindowSafeArea(window, &mut rect) + }; + let num_rows = PROFILE_SIZE + 2; + let min_row_height = rect.h / num_rows as i32; + while unsafe { sdl3_ttf_sys::ttf::TTF_GetFontLineSkip(font) } < min_row_height { + unsafe { + let font_size = sdl3_ttf_sys::ttf::TTF_GetFontSize(font); + sdl3_ttf_sys::ttf::TTF_SetFontSize(font, font_size + 0.5); + } + } +} + +fn reset_gather(auto_advance: bool) -> (usize, Option) { + if auto_advance { + (GATHER_TIME, Some(std::time::Instant::now())) + } else { + (0, None) + } +} + +fn advance_cursor( + selected: &mut (usize, usize), + auto_advance: &mut bool, +) -> (usize, Option) { + selected.0 += 1; + if selected.0 == PROFILE_SIZE { + *auto_advance = false; + } + reset_gather(*auto_advance) +} + +fn draw_profile_screen( + window: *mut sdl3_sys::video::SDL_Window, + renderer: *mut sdl3_sys::render::SDL_Renderer, + text_engine: *mut sdl3_ttf_sys::ttf::TTF_TextEngine, + font: *mut sdl3_ttf_sys::ttf::TTF_Font, + profile: &mut ui::config::InputProfile, + dinput: bool, +) -> bool { + let mut selected: (usize, usize) = (0, 0); + let mut auto_advance = dinput && !unsafe { sdl3_sys::keyboard::SDL_HasKeyboard() }; + + let (mut gather, mut gather_timer) = reset_gather(auto_advance); + loop { + if let Some(timer) = gather_timer + && timer.elapsed() > std::time::Duration::from_secs(1) + { + gather -= 1; + if gather > 0 { + gather_timer = Some(std::time::Instant::now()); + } else { + (gather, gather_timer) = reset_gather(auto_advance); + } + } + let mut event: sdl3_sys::events::SDL_Event = Default::default(); + + if unsafe { sdl3_sys::events::SDL_WaitEventTimeout(&mut event, 20) } { + match event.event_type() { + sdl3_sys::events::SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED => { + set_font_size(window, font); + } + sdl3_sys::events::SDL_EVENT_WINDOW_CLOSE_REQUESTED => break, + sdl3_sys::events::SDL_EVENT_GAMEPAD_BUTTON_DOWN => { + if gather == 0 { + match sdl3_sys::gamepad::SDL_GamepadButton( + unsafe { event.gbutton.button } as i32 + ) { + sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_DOWN => { + move_down(&mut selected); + } + sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_UP => { + move_up(&mut selected); + } + sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_LEFT => { + move_left(&mut selected); + } + sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_RIGHT => { + move_right(&mut selected); + } + sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_WEST + | sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_NORTH => { + delete_binding(selected, profile); + } + sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_SOUTH + | sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_EAST + if select_or_save(selected, &mut gather, &mut gather_timer) => + { + return true; + } + _ => (), + } + } else if !dinput { + profile.inputs[selected.0][selected.1] = Some( + ui::config::InputItem::ControllerButton(ui::config::InputKeyButton { + id: i32::from(unsafe { event.gbutton.button }), + }), + ); + (gather, gather_timer) = advance_cursor(&mut selected, &mut auto_advance); + } + } + sdl3_sys::events::SDL_EVENT_KEY_DOWN => { + let scancode = unsafe { event.key }.scancode; + if gather == 0 || scancode == sdl3_sys::scancode::SDL_SCANCODE_AC_BACK { + match scancode { + sdl3_sys::scancode::SDL_SCANCODE_AC_BACK => break, + sdl3_sys::scancode::SDL_SCANCODE_DOWN => { + move_down(&mut selected); + } + sdl3_sys::scancode::SDL_SCANCODE_UP => { + move_up(&mut selected); + } + sdl3_sys::scancode::SDL_SCANCODE_LEFT => { + move_left(&mut selected); + } + sdl3_sys::scancode::SDL_SCANCODE_RIGHT => { + move_right(&mut selected); + } + sdl3_sys::scancode::SDL_SCANCODE_DELETE + | sdl3_sys::scancode::SDL_SCANCODE_BACKSPACE => { + delete_binding(selected, profile); + } + sdl3_sys::scancode::SDL_SCANCODE_RETURN + if select_or_save(selected, &mut gather, &mut gather_timer) => + { + return true; + } + _ => (), + } + } else { + if scancode != sdl3_sys::scancode::SDL_SCANCODE_LALT + && scancode != sdl3_sys::scancode::SDL_SCANCODE_RALT + && !unsafe { event.key }.repeat + { + profile.inputs[selected.0][selected.1] = + Some(ui::config::InputItem::Key(ui::config::InputKeyButton { + id: i32::from(scancode), + })); + (gather, gather_timer) = + advance_cursor(&mut selected, &mut auto_advance); + } + } + } + sdl3_sys::events::SDL_EVENT_GAMEPAD_AXIS_MOTION => { + let axis_value = unsafe { event.gaxis }.value; + let axis = unsafe { event.gaxis }.axis; + if !dinput + && gather != 0 + && axis_value.saturating_abs() > (i16::MAX as i32 * 3 / 4) as i16 + { + profile.inputs[selected.0][selected.1] = + Some(ui::config::InputItem::ControllerAxis( + ui::config::InputControllerAxis { + id: i32::from(axis), + axis: axis_value.signum(), + initial_state: 0, + }, + )); + (gather, gather_timer) = advance_cursor(&mut selected, &mut auto_advance); + } + } + sdl3_sys::events::SDL_EVENT_JOYSTICK_BUTTON_DOWN => { + if dinput { + if gather == 0 { + if let Some(ui::config::InputItem::JoystickButton(joystick_button)) = + &profile.inputs[D_DPAD][0] + && joystick_button.id == unsafe { event.jbutton.button } as i32 + { + move_down(&mut selected); + } else if let Some(ui::config::InputItem::JoystickButton( + joystick_button, + )) = &profile.inputs[U_DPAD][0] + && joystick_button.id == unsafe { event.jbutton.button } as i32 + { + move_up(&mut selected); + } else if let Some(ui::config::InputItem::JoystickButton( + joystick_button, + )) = &profile.inputs[L_DPAD][0] + && joystick_button.id == unsafe { event.jbutton.button } as i32 + { + move_left(&mut selected); + } else if let Some(ui::config::InputItem::JoystickButton( + joystick_button, + )) = &profile.inputs[R_DPAD][0] + && joystick_button.id == unsafe { event.jbutton.button } as i32 + { + move_right(&mut selected); + } else if let Some(ui::config::InputItem::JoystickButton( + joystick_button, + )) = &profile.inputs[B_BUTTON][0] + && joystick_button.id == unsafe { event.jbutton.button } as i32 + { + delete_binding(selected, profile); + } else if let Some(ui::config::InputItem::JoystickButton( + joystick_button, + )) = &profile.inputs[A_BUTTON][0] + && joystick_button.id == unsafe { event.jbutton.button } as i32 + && select_or_save(selected, &mut gather, &mut gather_timer) + { + return true; + } + } else { + profile.inputs[selected.0][selected.1] = Some( + ui::config::InputItem::JoystickButton(ui::config::InputKeyButton { + id: i32::from(unsafe { event.jbutton.button }), + }), + ); + (gather, gather_timer) = + advance_cursor(&mut selected, &mut auto_advance); + } + } + } + sdl3_sys::events::SDL_EVENT_JOYSTICK_HAT_MOTION => { + let state = unsafe { event.jhat.value }; + let hat = unsafe { event.jhat.hat }; + if dinput { + if gather == 0 { + if let Some(ui::config::InputItem::JoystickHat(joystick_hat)) = + &profile.inputs[D_DPAD][0] + && joystick_hat.id == hat as i32 + && joystick_hat.direction == state + { + move_down(&mut selected); + } else if let Some(ui::config::InputItem::JoystickHat(joystick_hat)) = + &profile.inputs[U_DPAD][0] + && joystick_hat.id == hat as i32 + && joystick_hat.direction == state + { + move_up(&mut selected); + } else if let Some(ui::config::InputItem::JoystickHat(joystick_hat)) = + &profile.inputs[L_DPAD][0] + && joystick_hat.id == hat as i32 + && joystick_hat.direction == state + { + move_left(&mut selected); + } else if let Some(ui::config::InputItem::JoystickHat(joystick_hat)) = + &profile.inputs[R_DPAD][0] + && joystick_hat.id == hat as i32 + && joystick_hat.direction == state + { + move_right(&mut selected); + } else if let Some(ui::config::InputItem::JoystickHat(joystick_hat)) = + &profile.inputs[B_BUTTON][0] + && joystick_hat.id == hat as i32 + && joystick_hat.direction == state + { + delete_binding(selected, profile); + } else if let Some(ui::config::InputItem::JoystickHat(joystick_hat)) = + &profile.inputs[A_BUTTON][0] + && joystick_hat.id == hat as i32 + && joystick_hat.direction == state + && select_or_save(selected, &mut gather, &mut gather_timer) + { + return true; + } + } else if state != sdl3_sys::joystick::SDL_HAT_CENTERED { + profile.inputs[selected.0][selected.1] = Some( + ui::config::InputItem::JoystickHat(ui::config::InputJoystickHat { + id: hat as i32, + direction: state, + }), + ); + (gather, gather_timer) = + advance_cursor(&mut selected, &mut auto_advance); + } + } + } + sdl3_sys::events::SDL_EVENT_JOYSTICK_AXIS_MOTION => { + let axis_value = unsafe { event.jaxis }.value; + let axis = unsafe { event.jaxis }.axis; + let mut initial_state = 0; + let has_initial_state = unsafe { + sdl3_sys::joystick::SDL_GetJoystickAxisInitialState( + sdl3_sys::joystick::SDL_GetJoystickFromID(event.jaxis.which), + axis as i32, + &mut initial_state, + ) + }; + initial_state = if has_initial_state { + if initial_state < i16::MIN / 2 { + i16::MIN + } else if initial_state > i16::MAX / 2 { + i16::MAX + } else { + 0 + } + } else { + 0 + }; + if dinput && gather != 0 && axis_value.abs_diff(initial_state) > (u16::MAX / 4) + { + profile.inputs[selected.0][selected.1] = Some( + ui::config::InputItem::JoystickAxis(ui::config::InputControllerAxis { + id: i32::from(axis), + axis: axis_value.signum(), + initial_state, + }), + ); + (gather, gather_timer) = advance_cursor(&mut selected, &mut auto_advance); + } + } + _ => (), + } + } + unsafe { + sdl3_sys::everything::SDL_RenderClear(renderer); + let ttf_text = + sdl3_ttf_sys::ttf::TTF_CreateText(text_engine, font, std::ptr::null(), 0); + render_screen(window, renderer, ttf_text, font, profile, selected, gather); + sdl3_ttf_sys::ttf::TTF_DestroyText(ttf_text); + sdl3_sys::render::SDL_RenderPresent(renderer); + } + } + false +} + +fn move_left(selected: &mut (usize, usize)) { + selected.1 = selected.1.saturating_sub(1) +} + +fn move_right(selected: &mut (usize, usize)) { + selected.1 = selected.1.saturating_add(1).min(1) +} + +fn move_up(selected: &mut (usize, usize)) { + selected.0 = selected.0.saturating_sub(1) +} + +fn move_down(selected: &mut (usize, usize)) { + selected.0 = selected.0.saturating_add(1).min(PROFILE_SIZE) +} + +fn delete_binding(selected: (usize, usize), profile: &mut ui::config::InputProfile) { + if selected.0 < PROFILE_SIZE { + profile.inputs[selected.0][selected.1] = None; + } +} + +fn select_or_save( + selected: (usize, usize), + gather: &mut usize, + gather_timer: &mut Option, +) -> bool { + if selected.0 == PROFILE_SIZE { + return true; + } else { + *gather = GATHER_TIME; + *gather_timer = Some(std::time::Instant::now()); + } + false +} + +fn render_screen( + window: *mut sdl3_sys::video::SDL_Window, + renderer: *mut sdl3_sys::render::SDL_Renderer, + ttf_text: *mut sdl3_ttf_sys::ttf::TTF_Text, + font: *mut sdl3_ttf_sys::ttf::TTF_Font, + profile: &ui::config::InputProfile, + selected: (usize, usize), + gather: usize, +) { + let mut rect: sdl3_sys::rect::SDL_Rect = Default::default(); + unsafe { sdl3_sys::video::SDL_GetWindowSafeArea(window, &mut rect) }; + + let row_height = unsafe { sdl3_ttf_sys::ttf::TTF_GetFontLineSkip(font) } as usize; + let key_labels: [&str; PROFILE_SIZE] = [ + "D Right", + "D Left", + "D Down", + "D Up", + "Start", + "Z", + "B", + "A", + "C Right", + "C Left", + "C Down", + "C Up", + "R", + "L", + "Control Stick Right", + "Control Stick Left", + "Control Stick Down", + "Control Stick Up", + "Hotkey Activator", + ]; + + // headers + unsafe { + sdl3_ttf_sys::ttf::TTF_SetFontStyle( + font, + sdl3_ttf_sys::ttf::TTF_STYLE_BOLD | sdl3_ttf_sys::ttf::TTF_STYLE_UNDERLINE, + ); + let c_text = std::ffi::CString::new("Inputs").unwrap(); + sdl3_ttf_sys::ttf::TTF_SetTextString(ttf_text, c_text.as_ptr(), 0); + sdl3_ttf_sys::ttf::TTF_DrawRendererText(ttf_text, rect.x as f32, rect.y as f32); + + let c_text = std::ffi::CString::new("Binding 1").unwrap(); + sdl3_ttf_sys::ttf::TTF_SetTextString(ttf_text, c_text.as_ptr(), 0); + sdl3_ttf_sys::ttf::TTF_DrawRendererText( + ttf_text, + rect.x as f32 + (rect.w / 3) as f32 * 1.0, + rect.y as f32, + ); + + let c_text = std::ffi::CString::new("Binding 2").unwrap(); + sdl3_ttf_sys::ttf::TTF_SetTextString(ttf_text, c_text.as_ptr(), 0); + sdl3_ttf_sys::ttf::TTF_DrawRendererText( + ttf_text, + rect.x as f32 + (rect.w / 3) as f32 * 2.0, + rect.y as f32, + ); + sdl3_ttf_sys::ttf::TTF_SetFontStyle(font, sdl3_ttf_sys::ttf::TTF_STYLE_NORMAL); + } + + for (i, label) in key_labels.iter().enumerate() { + let c_text = std::ffi::CString::new(*label).unwrap(); + unsafe { + sdl3_ttf_sys::ttf::TTF_SetTextString(ttf_text, c_text.as_ptr(), 0); + sdl3_ttf_sys::ttf::TTF_DrawRendererText( + ttf_text, + rect.x as f32, + rect.y as f32 + ((i + 1) * row_height) as f32, + ); + + let binding_1 = + std::ffi::CString::new(get_binding_text(&profile.inputs[i][0])).unwrap(); + sdl3_ttf_sys::ttf::TTF_SetTextString(ttf_text, binding_1.as_ptr(), 0); + draw_binding_text(renderer, ttf_text, rect, row_height, selected, gather, i, 0); + + let binding_2 = + std::ffi::CString::new(get_binding_text(&profile.inputs[i][1])).unwrap(); + sdl3_ttf_sys::ttf::TTF_SetTextString(ttf_text, binding_2.as_ptr(), 0); + draw_binding_text(renderer, ttf_text, rect, row_height, selected, gather, i, 1); + } + } + let c_text = std::ffi::CString::new("Save and Exit").unwrap(); + unsafe { + sdl3_ttf_sys::ttf::TTF_SetFontStyle(font, sdl3_ttf_sys::ttf::TTF_STYLE_BOLD); + sdl3_ttf_sys::ttf::TTF_SetTextString(ttf_text, c_text.as_ptr(), 0); + let (mut text_w, mut text_h) = (0, 0); + sdl3_ttf_sys::ttf::TTF_GetTextSize(ttf_text, &mut text_w, &mut text_h); + + if selected.0 == PROFILE_SIZE { + draw_highlight( + renderer, + rect.x as f32 + (rect.w - text_w) as f32 / 2.0, + rect.y as f32 + ((PROFILE_SIZE + 1) * row_height) as f32, + text_w, + text_h, + ); + } + + sdl3_ttf_sys::ttf::TTF_DrawRendererText( + ttf_text, + rect.x as f32 + (rect.w - text_w) as f32 / 2.0, + rect.y as f32 + ((PROFILE_SIZE + 1) * row_height) as f32, + ); + }; +} + +fn draw_highlight( + renderer: *mut sdl3_sys::render::SDL_Renderer, + x: f32, + y: f32, + text_w: i32, + text_h: i32, +) { + unsafe { + sdl3_sys::render::SDL_SetRenderDrawColor(renderer, 50, 100, 180, 255); + + let highlight = sdl3_sys::rect::SDL_FRect { + x, + y, + w: text_w as f32, + h: text_h as f32, + }; + sdl3_sys::render::SDL_RenderFillRect(renderer, &highlight); + sdl3_sys::render::SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); + } +} + +#[allow(clippy::too_many_arguments)] +fn draw_binding_text( + renderer: *mut sdl3_sys::render::SDL_Renderer, + ttf_text: *mut sdl3_ttf_sys::ttf::TTF_Text, + rect: sdl3_sys::rect::SDL_Rect, + row_height: usize, + selected: (usize, usize), + gather: usize, + i: usize, + binding: usize, +) { + unsafe { + if selected.0 == i && selected.1 == binding { + if gather > 0 { + let gather_text = std::ffi::CString::new(format!("{}...", gather)).unwrap(); + sdl3_ttf_sys::ttf::TTF_SetTextString(ttf_text, gather_text.as_ptr(), 0); + } + let (mut text_w, mut text_h) = (0, 0); + sdl3_ttf_sys::ttf::TTF_GetTextSize(ttf_text, &mut text_w, &mut text_h); + draw_highlight( + renderer, + rect.x as f32 + (rect.w / 3) as f32 * if selected.1 == 0 { 1.0 } else { 2.0 }, + rect.y as f32 + ((i + 1) * row_height) as f32, + text_w, + text_h, + ); + } + sdl3_ttf_sys::ttf::TTF_DrawRendererText( + ttf_text, + rect.x as f32 + (rect.w / 3) as f32 * (binding as f32 + 1.0), + rect.y as f32 + ((i + 1) * row_height) as f32, + ); + } +} + +fn get_binding_text(binding: &Option) -> String { + if let Some(binding) = binding { + match binding { + ui::config::InputItem::Key(key) => { + return unsafe { + std::ffi::CStr::from_ptr(sdl3_sys::keyboard::SDL_GetScancodeName( + sdl3_sys::scancode::SDL_Scancode(key.id), + )) + .to_str() + .unwrap() + .to_string() + }; + } + ui::config::InputItem::ControllerButton(controller_button) => { + return unsafe { + std::ffi::CStr::from_ptr(sdl3_sys::gamepad::SDL_GetGamepadStringForButton( + sdl3_sys::gamepad::SDL_GamepadButton(controller_button.id), + )) + .to_str() + .unwrap() + .to_string() + }; + } + ui::config::InputItem::ControllerAxis(controller_axis) => { + return unsafe { + let axis = + std::ffi::CStr::from_ptr(sdl3_sys::gamepad::SDL_GetGamepadStringForAxis( + sdl3_sys::gamepad::SDL_GamepadAxis(controller_axis.id), + )) + .to_str() + .unwrap() + .to_string(); + let direction = if controller_axis.axis > 0 { "+" } else { "-" }; + format!("{} {}", axis, direction) + }; + } + ui::config::InputItem::JoystickButton(joystick_button) => { + return format!("Joystick Button {}", joystick_button.id); + } + ui::config::InputItem::JoystickHat(joystick_hat) => { + let direction = match joystick_hat.direction { + 1 => "Up", + 2 => "Right", + 4 => "Down", + 8 => "Left", + _ => "Unknown", + }; + return format!("Joystick Hat {} {}", joystick_hat.id, direction); + } + ui::config::InputItem::JoystickAxis(joystick_axis) => { + let direction = if joystick_axis.axis > 0 { "+" } else { "-" }; + return format!("Joystick Axis {} {}", joystick_axis.id, direction); + } + } + } + "(unset)".to_string() +} + +pub fn get_default_profile() -> ui::config::InputProfile { + let mut inputs: [[Option; 2]; PROFILE_SIZE] = + [const { [None, None] }; PROFILE_SIZE]; + + inputs[R_DPAD] = [ + Some(ui::config::InputItem::Key(ui::config::InputKeyButton { + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_D), + })), + Some(ui::config::InputItem::ControllerButton( + ui::config::InputKeyButton { + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_RIGHT), + }, + )), + ]; + inputs[L_DPAD] = [ + Some(ui::config::InputItem::Key(ui::config::InputKeyButton { + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_A), + })), + Some(ui::config::InputItem::ControllerButton( + ui::config::InputKeyButton { + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_LEFT), + }, + )), + ]; + inputs[D_DPAD] = [ + Some(ui::config::InputItem::Key(ui::config::InputKeyButton { + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_S), + })), + Some(ui::config::InputItem::ControllerButton( + ui::config::InputKeyButton { + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_DOWN), + }, + )), + ]; + inputs[U_DPAD] = [ + Some(ui::config::InputItem::Key(ui::config::InputKeyButton { + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_W), + })), + Some(ui::config::InputItem::ControllerButton( + ui::config::InputKeyButton { + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_DPAD_UP), + }, + )), + ]; + inputs[START_BUTTON] = [ + Some(ui::config::InputItem::Key(ui::config::InputKeyButton { + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_RETURN), + })), + Some(ui::config::InputItem::ControllerButton( + ui::config::InputKeyButton { + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_START), + }, + )), + ]; + inputs[Z_TRIG] = [ + Some(ui::config::InputItem::Key(ui::config::InputKeyButton { + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_Z), + })), + Some(ui::config::InputItem::ControllerAxis( + ui::config::InputControllerAxis { + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFT_TRIGGER), + axis: 1, + initial_state: 0, + }, + )), + ]; + inputs[B_BUTTON] = [ + Some(ui::config::InputItem::Key(ui::config::InputKeyButton { + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_LCTRL), + })), + Some(ui::config::InputItem::ControllerButton( + ui::config::InputKeyButton { + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_WEST), + }, + )), + ]; + inputs[A_BUTTON] = [ + Some(ui::config::InputItem::Key(ui::config::InputKeyButton { + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_LSHIFT), + })), + Some(ui::config::InputItem::ControllerButton( + ui::config::InputKeyButton { + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_SOUTH), + }, + )), + ]; + inputs[R_CBUTTON] = [ + Some(ui::config::InputItem::Key(ui::config::InputKeyButton { + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_L), + })), + Some(ui::config::InputItem::ControllerAxis( + ui::config::InputControllerAxis { + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTX), + axis: 1, + initial_state: 0, + }, + )), + ]; + inputs[L_CBUTTON] = [ + Some(ui::config::InputItem::Key(ui::config::InputKeyButton { + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_J), + })), + Some(ui::config::InputItem::ControllerAxis( + ui::config::InputControllerAxis { + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTX), + axis: -1, + initial_state: 0, + }, + )), + ]; + inputs[D_CBUTTON] = [ + Some(ui::config::InputItem::Key(ui::config::InputKeyButton { + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_K), + })), + Some(ui::config::InputItem::ControllerAxis( + ui::config::InputControllerAxis { + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTY), + axis: 1, + initial_state: 0, + }, + )), + ]; + inputs[U_CBUTTON] = [ + Some(ui::config::InputItem::Key(ui::config::InputKeyButton { + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_I), + })), + Some(ui::config::InputItem::ControllerAxis( + ui::config::InputControllerAxis { + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTY), + axis: -1, + initial_state: 0, + }, + )), + ]; + inputs[R_TRIG] = [ + Some(ui::config::InputItem::Key(ui::config::InputKeyButton { + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_C), + })), + Some(ui::config::InputItem::ControllerButton( + ui::config::InputKeyButton { + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER), + }, + )), + ]; + inputs[L_TRIG] = [ + Some(ui::config::InputItem::Key(ui::config::InputKeyButton { + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_X), + })), + Some(ui::config::InputItem::ControllerButton( + ui::config::InputKeyButton { + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_LEFT_SHOULDER), + }, + )), + ]; + inputs[AXIS_LEFT] = [ + Some(ui::config::InputItem::Key(ui::config::InputKeyButton { + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_LEFT), + })), + Some(ui::config::InputItem::ControllerAxis( + ui::config::InputControllerAxis { + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTX), + axis: -1, + initial_state: 0, + }, + )), + ]; + inputs[AXIS_RIGHT] = [ + Some(ui::config::InputItem::Key(ui::config::InputKeyButton { + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_RIGHT), + })), + Some(ui::config::InputItem::ControllerAxis( + ui::config::InputControllerAxis { + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTX), + axis: 1, + initial_state: 0, + }, + )), + ]; + inputs[AXIS_UP] = [ + Some(ui::config::InputItem::Key(ui::config::InputKeyButton { + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_UP), + })), + Some(ui::config::InputItem::ControllerAxis( + ui::config::InputControllerAxis { + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTY), + axis: -1, + initial_state: 0, + }, + )), + ]; + inputs[AXIS_DOWN] = [ + Some(ui::config::InputItem::Key(ui::config::InputKeyButton { + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_DOWN), + })), + Some(ui::config::InputItem::ControllerAxis( + ui::config::InputControllerAxis { + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTY), + axis: 1, + initial_state: 0, + }, + )), + ]; + inputs[HOTKEY] = [ + Some(ui::config::InputItem::Key(ui::config::InputKeyButton { + id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_COMMA), + })), + Some(ui::config::InputItem::ControllerButton( + ui::config::InputKeyButton { + id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_BACK), + }, + )), + ]; + + ui::config::InputProfile { + inputs, + dinput: false, + deadzone: DEADZONE_DEFAULT, + } +} diff --git a/src/ui/video.rs b/src/ui/video.rs index 660ed50..b567196 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -274,37 +274,3 @@ pub fn onscreen_message(message: &str, milliseconds: MESSAGE_LENGTH) { rdp_onscreen_message(c_message.as_ptr(), milliseconds) }; } - -pub fn draw_text( - text: &str, - renderer: *mut sdl3_sys::render::SDL_Renderer, - image_texture: *mut sdl3_sys::render::SDL_Texture, - text_engine: *mut sdl3_ttf_sys::ttf::TTF_TextEngine, - font: *mut sdl3_ttf_sys::ttf::TTF_Font, -) { - unsafe { - let (mut w, mut h) = (0, 0); - sdl3_sys::render::SDL_GetRenderOutputSize(renderer, &mut w, &mut h); - - let c_text = std::ffi::CString::new(text).unwrap(); - let ttf_text = sdl3_ttf_sys::ttf::TTF_CreateText(text_engine, font, c_text.as_ptr(), 0); - - sdl3_sys::everything::SDL_RenderClear(renderer); - let rect = sdl3_sys::rect::SDL_FRect { - x: 0.0, - y: 0.0, - w: w as f32, - h: (h - sdl3_ttf_sys::ttf::TTF_GetFontHeight(font)) as f32, - }; - sdl3_sys::render::SDL_RenderTexture(renderer, image_texture, std::ptr::null(), &rect); - let (mut text_w, mut text_h) = (0, 0); - sdl3_ttf_sys::ttf::TTF_GetTextSize(ttf_text, &mut text_w, &mut text_h); - sdl3_ttf_sys::ttf::TTF_DrawRendererText( - ttf_text, - (w / 2 - text_w / 2) as f32, - (h - text_h) as f32, - ); - sdl3_sys::render::SDL_RenderPresent(renderer); - sdl3_ttf_sys::ttf::TTF_DestroyText(ttf_text); - } -} From f7ad6a4b0d096db1bf8af1df0be88f98915f5b63 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jul 2026 06:34:17 +0200 Subject: [PATCH 1098/1117] Bump rust-toolchain from 1.96.0 to 1.96.1 (#1151) Bumps [rust-toolchain](https://github.com/rust-lang/rust) from 1.96.0 to 1.96.1. - [Release notes](https://github.com/rust-lang/rust/releases) - [Changelog](https://github.com/rust-lang/rust/blob/main/RELEASES.md) - [Commits](https://github.com/rust-lang/rust/compare/1.96.0...1.96.1) --- updated-dependencies: - dependency-name: rust-toolchain dependency-version: 1.96.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- rust-toolchain.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 0f87b448..2d45363 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.96.0" +channel = "1.96.1" From e8a7abffe3cc99b8b9346709d33ec155b6c8bdd9 Mon Sep 17 00:00:00 2001 From: PolygonPrincess <116114153+PolygonPrincess@users.noreply.github.com> Date: Mon, 6 Jul 2026 08:54:51 -0400 Subject: [PATCH 1099/1117] Add cli flag for widescreen (#1152) * Add cli flag for widescreen and enable config fallback * Fix else statement brace spacing and trailing whitespace * Fix trailing whitespace within args.widescreen else statement --- src/lib.rs | 9 +++++++++ src/ui.rs | 2 ++ src/ui/video.rs | 6 +++--- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 3e9ffc8..b3e51ae 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -22,6 +22,8 @@ pub struct Args { #[arg(short, long)] pub fullscreen: bool, #[arg(long)] + pub widescreen: bool, + #[arg(long)] pub overclock: Option, #[arg(long)] pub disable_expansion_pak: Option, @@ -170,6 +172,13 @@ pub fn run(args: Args, arg_count: usize) -> std::io::Result<()> { } else { device.ui.video.fullscreen = device.ui.config.video.fullscreen; } + + if args.widescreen { + device.ui.video.widescreen = true; + } else { + device.ui.video.widescreen = device.ui.config.video.widescreen; + } + let overclock = args .overclock .unwrap_or(device.ui.config.emulation.overclock); diff --git a/src/ui.rs b/src/ui.rs index 408b0df..4e0765b 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -68,6 +68,7 @@ pub struct Storage { pub struct Video { pub window: *mut sdl3_sys::video::SDL_Window, pub fullscreen: bool, + pub widescreen: bool, pub fps_tx: Option>, pub fps_rx: Option>, pub vis_tx: Option>, @@ -267,6 +268,7 @@ impl Ui { video: Video { window: std::ptr::null_mut(), fullscreen: false, + widescreen: false, fps_tx: Some(fps_tx), fps_rx: Some(fps_rx), vis_tx: Some(vis_tx), diff --git a/src/ui/video.rs b/src/ui/video.rs index b567196..2d712b4 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -20,8 +20,8 @@ fn build_gfx_info(device: &mut device::Device, netplay: bool) -> GFX_INFO { DPC_END_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_END_REG], DPC_STATUS_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_STATUS_REG], PAL: device.cart.pal, - widescreen: device.ui.config.video.widescreen, fullscreen: device.ui.video.fullscreen, + widescreen: device.ui.video.widescreen, vsync: if !netplay { device.ui.config.video.vsync } else { @@ -56,14 +56,14 @@ pub fn init(device: &mut device::Device, netplay: bool) { 2 }; if device.cart.pal { - window_width = if device.ui.config.video.widescreen { + window_width = if device.ui.video.widescreen { PAL_WIDESCREEN_WIDTH * scale } else { PAL_STANDARD_WIDTH * scale }; window_height = PAL_HEIGHT * scale; } else { - window_width = if device.ui.config.video.widescreen { + window_width = if device.ui.video.widescreen { NTSC_WIDESCREEN_WIDTH * scale } else { NTSC_STANDARD_WIDTH * scale From 81cc78ce90beeaf46028ffa17dfae75e7f04f5d0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 9 Jul 2026 15:06:49 +0200 Subject: [PATCH 1100/1117] bump crate and rust versions (#1155) --- Cargo.lock | 344 +++++++++++++++++++++++++------------------- Cargo.toml | 6 +- rust-toolchain.toml | 2 +- 3 files changed, 197 insertions(+), 155 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4656a47..6262078 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -363,9 +363,9 @@ checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" [[package]] name = "arc-swap" -version = "1.9.1" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a3a1fd6f75306b68087b831f025c712524bcb19aad54e557b1129cfa0a2b207" +checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b" dependencies = [ "rustversion", ] @@ -389,9 +389,9 @@ checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02882884d3e1bc524fb12c79f107f6ad0e1cfd498c536ffb494301740995dfe" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" [[package]] name = "as-raw-xcb-connection" @@ -864,7 +864,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "shlex 1.3.0", "syn", ] @@ -1077,9 +1077,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "bzip2" @@ -1161,9 +1161,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.65" +version = "1.2.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96" +checksum = "f5d6cac793997bd970000024b2934968efe83b382de4fdcf4fcb46b6ee4ad996" dependencies = [ "find-msvc-tools", "jobserver", @@ -1606,18 +1606,18 @@ checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" [[package]] name = "crossbeam-channel" -version = "0.5.15" +version = "0.5.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +checksum = "d85363c37faeca707aef026efa9f3b34d077bce547e48f770770625c6013679e" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -1625,18 +1625,18 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" [[package]] name = "crunchy" @@ -2189,14 +2189,16 @@ dependencies = [ [[package]] name = "exr" -version = "1.74.0" +version = "1.74.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4300e043a56aa2cb633c01af81ca8f699a321879a7854d3896a0ba89056363be" +checksum = "6be87932f10230a4339ab394edd8e4611fcb72553d8295b4d52ea55249b3daa5" dependencies = [ "bit_field", "half", "lebe", "miniz_oxide", + "num-complex", + "pulp", "rayon-core", "smallvec", "zune-inflate", @@ -2773,7 +2775,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.32" +version = "1.1.34" dependencies = [ "bindgen", "cc", @@ -2790,12 +2792,12 @@ dependencies = [ "mimalloc", "open", "postcard", - "quick-xml 0.40.1", - "rand 0.10.1", + "quick-xml 0.41.0", + "rand 0.10.2", "regex", "reqwest", "rfd", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "sdl3-src", "sdl3-sys", "sdl3-ttf-sys", @@ -3070,9 +3072,9 @@ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "hybrid-array" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" +checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c" dependencies = [ "typenum", ] @@ -3156,9 +3158,9 @@ dependencies = [ [[package]] name = "i-slint-backend-android-activity" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a69c405bd541532766a2d059ae21c562191881d2394fe112fc97f3aa9708a94" +checksum = "9805bcdcbeea6626a0054347ee55d2424e0d5574b563472719d3fc7a11852242" dependencies = [ "android-activity 0.5.2", "android-activity 0.6.1", @@ -3173,9 +3175,9 @@ dependencies = [ [[package]] name = "i-slint-backend-linuxkms" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54e6cb54b264cac4aa4968d6b5d4f4240a89ae8d9153659391ac57b6e4757a9f" +checksum = "68e76f2b13846ca54bba6b8eb3b5454b26879ad987396d0a2d8abedc31a6c469" dependencies = [ "calloop 0.14.4", "cfg_aliases", @@ -3190,9 +3192,9 @@ dependencies = [ [[package]] name = "i-slint-backend-selector" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74e252fd16064a10f7a0f105fef01b634cc6b6bebb0331f2cdc6da94e15d326d" +checksum = "2247a4590a02a466b2f4916cc789dfe66247f6af826f00eb84a2685259a45c1c" dependencies = [ "cfg-if", "cfg_aliases", @@ -3207,9 +3209,9 @@ dependencies = [ [[package]] name = "i-slint-backend-winit" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a66940b16cbc6f6fc14363c8dd220497b503946146408907ecf071fdd6794973" +checksum = "a27c7e8f53418d3017362465367b6612b6e439a68097d627d1b91c94b885f0a6" dependencies = [ "accesskit", "accesskit_winit", @@ -3250,9 +3252,9 @@ dependencies = [ [[package]] name = "i-slint-common" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4be292acd6d591cf376f2338786b0c95faddb79fdbce4ff89f840daf2d7bac4" +checksum = "52e63f8ea55ba21e44567ae67d2b01a4f5d09bb1fab693b1e6c79d96bef9e456" dependencies = [ "derive_more", "fontique", @@ -3267,9 +3269,9 @@ dependencies = [ [[package]] name = "i-slint-compiler" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290c2247e87d3653b9b7c3bc1cbe19647b2f93a4b99a40aae6a7140717700d37" +checksum = "45ea275b15a425c7f2f77481151e1f5f8f1ea83feae580273090ef6b9e192218" dependencies = [ "annotate-snippets", "by_address", @@ -3300,9 +3302,9 @@ dependencies = [ [[package]] name = "i-slint-core" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b7d306bc9d6fe1d1fd5e775837ec1fa1e41d1c8063789181b7de631bd5db41c" +checksum = "4e407dc2bd5385dcbdd9c1cf927213d2e4bacda667545abf8839c60f8290f754" dependencies = [ "auto_enums", "bitflags 2.13.0", @@ -3352,9 +3354,9 @@ dependencies = [ [[package]] name = "i-slint-core-macros" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e66e7fc31239ceba98646825614df8148abc30f8326296c4d762008cc22ddff" +checksum = "3a842640da4c4d0909d25cc5a51e1f9cde02bd48f7fdfa94df10d595d4e3c80a" dependencies = [ "quote", "serde_json", @@ -3363,9 +3365,9 @@ dependencies = [ [[package]] name = "i-slint-renderer-femtovg" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1a430c5adbd652119a5d37673b424ce3516903e192d73848919153e503c6d4d" +checksum = "78d0d99a18d66738b684758fe8460743a0aa0f64a96e05940942231a340085b1" dependencies = [ "cfg-if", "const-field-offset", @@ -3386,9 +3388,9 @@ dependencies = [ [[package]] name = "i-slint-renderer-skia" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1c8e1e1351ed5d3b40211b5a6e5a8597cd541726f94b880ed71693bdbe519c4" +checksum = "7b6eed7f3f0a9a3d3ca6e8b9d4ca233371d989351fdb2a7ab88ec368b99e7b57" dependencies = [ "ash", "bytemuck", @@ -3427,9 +3429,9 @@ dependencies = [ [[package]] name = "i-slint-renderer-software" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5b4d1e212e5eed5a2ea7b7c693f152e6a50df84e2305060de13557e4b864d18" +checksum = "73496f164f8e471877c35e0fadb996dcc674922712abd9c2be2cbe80c58859bd" dependencies = [ "bytemuck", "clru", @@ -3946,11 +3948,11 @@ dependencies = [ [[package]] name = "jobserver" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.3", "libc", ] @@ -4075,14 +4077,14 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" +checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652" dependencies = [ "bitflags 2.13.0", "libc", "plain", - "redox_syscall 0.8.1", + "redox_syscall 0.9.0", ] [[package]] @@ -4216,9 +4218,9 @@ dependencies = [ [[package]] name = "lzma-rust2" -version = "0.16.4" +version = "0.16.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce716bf1a316f47a280fc76295f6495b5bea4752bca01c3b3885e101b1c23c02" +checksum = "ca93e534d1142d1d0dcca6d25fe302508a5dfb40b302802904577725ea0b695b" dependencies = [ "sha2 0.11.0", ] @@ -4289,9 +4291,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.2" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "memmap2" @@ -4413,9 +4415,9 @@ dependencies = [ [[package]] name = "naga" -version = "29.0.3" +version = "29.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd91265cc2454558f659b3b4b9640f0ddb8cc6521277f166b8a8c181c898079" +checksum = "b2bf919621e7975acb27d881bae2fb993e0d45c8e0446e85e6272971e00dc8df" dependencies = [ "arrayvec", "bit-set", @@ -4580,14 +4582,24 @@ checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" [[package]] name = "num-bigint" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367" dependencies = [ "num-integer", "num-traits", ] +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "bytemuck", + "num-traits", +] + [[package]] name = "num-conv" version = "0.2.2" @@ -5066,13 +5078,12 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "open" -version = "5.3.5" +version = "5.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fbaa89d2ddc8473c78a3adf69eea8cffa28c483b8e02a971ef31527cd0fc92c" +checksum = "cd8d3b65c44123a56e0133d2cd06ce4361bd3ca99d41198b2f25e3c3db9b8b4a" dependencies = [ "is-wsl", "libc", - "pathdiff", ] [[package]] @@ -5270,12 +5281,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec" -[[package]] -name = "pathdiff" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" - [[package]] name = "pbkdf2" version = "0.13.0" @@ -5671,10 +5676,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "007d8adb5ddab6f8e3f491ac63566a7d5002cc7ed73901f72057943fa71ae1ae" [[package]] -name = "pxfm" -version = "0.1.29" +name = "pulp" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c5ccf5294c6ccd63a74f1565028353830a9c2f5eb0c682c355c471726a6e3f" +checksum = "046aa45b989642ec2e4717c8e72d677b13edd831a4d3b6cf37d9a3e54912496a" +dependencies = [ + "bytemuck", + "cfg-if", + "libm", + "num-complex", + "paste", + "pulp-wasm-simd-flag", + "raw-cpuid", + "reborrow", + "version_check", +] + +[[package]] +name = "pulp-wasm-simd-flag" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8f70e07b9c3962945a74e59ca1c511bba65b6419468acc217c457d93f3c740" + +[[package]] +name = "pxfm" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea" [[package]] name = "qoi" @@ -5698,14 +5726,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e" dependencies = [ "memchr", - "serde", ] [[package]] name = "quick-xml" -version = "0.40.1" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2474bd2e5029e7ccb6abb2ba48cf2383a333851dedf495901544281590c7da7f" +checksum = "e660451e55124f798a69a5af3f49ccfbefbd41910eefd25caf2393e1f3473ec1" dependencies = [ "memchr", ] @@ -5733,9 +5760,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rancor" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a063ea72381527c2a0561da9c80000ef822bdd7c3241b1cc1b12100e3df081ee" +checksum = "daff8b7b3ccf5f7ba270b3e7a0a4d4c701c5797e38dec27c7e2c3dbb830fed1c" dependencies = [ "ptr_meta", ] @@ -5763,9 +5790,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" dependencies = [ "chacha20 0.10.1", "getrandom 0.4.3", @@ -5873,6 +5900,15 @@ dependencies = [ "rgb", ] +[[package]] +name = "raw-cpuid" +version = "11.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" +dependencies = [ + "bitflags 2.13.0", +] + [[package]] name = "raw-window-handle" version = "0.6.2" @@ -5935,6 +5971,12 @@ dependencies = [ "font-types", ] +[[package]] +name = "reborrow" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03251193000f4bd3b042892be858ee50e8b3719f2b08e5833ac4353724632430" + [[package]] name = "redox_syscall" version = "0.4.1" @@ -5955,9 +5997,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b44b894f2a6e36457d665d1e08c3866add6ed5e70050c1b4ba8a8ddedb02ce7" +checksum = "c5102a6aaa05aa011a238e178e6bca86d2cb56fc9f586d37cb80f5bca6e07759" dependencies = [ "bitflags 2.13.0", ] @@ -5975,9 +6017,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.4" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" +checksum = "2a0e75113e14dc5acb068cd0786884f214f1312650a3d36d269f5c4f3cdee8a2" dependencies = [ "aho-corasick", "memchr", @@ -5987,9 +6029,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "1f388202e4b80542a0921078cc23b6333bcf1409c1e3f86404cae4766a6131db" dependencies = [ "aho-corasick", "memchr", @@ -6004,9 +6046,9 @@ checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rend" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadadef317c2f20755a64d7fdc48f9e7178ee6b0e1f7fce33fa60f1d68a276e6" +checksum = "663ba70707f96e871406fe10d68128412e619b06d1d47cb91c3a4c6501176240" dependencies = [ "bytecheck", ] @@ -6136,9 +6178,9 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.8.16" +version = "0.8.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73389e0c99e664f919275ab5b5b0471391fe9a8de61e1dff9b1eaf56a90f16e3" +checksum = "815cc8a37159a463064825246cadb07961e25cd9885908606f6d08a98d8f8874" dependencies = [ "bytecheck", "bytes", @@ -6155,9 +6197,9 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.8.16" +version = "0.8.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d2ed0b54125315fb36bd021e82d314d1c126548f871634b483f46b31d13cac6" +checksum = "c0ed1a78a1b19d184b0daa629dd9a024573173ec7d485b287cb369fb3607cc1c" dependencies = [ "proc-macro2", "quote", @@ -6238,9 +6280,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustc_version" @@ -6323,9 +6365,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.14.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" +checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046" dependencies = [ "zeroize", ] @@ -6353,9 +6395,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "rustybuzz" @@ -6442,15 +6484,15 @@ dependencies = [ [[package]] name = "sdl3-src" -version = "3.4.10" +version = "3.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed4dcad85f1657d3424642ca2ed8f9f185212975baefda8972ac606494755a62" +checksum = "1f0adb191c684688f845f1dab6f5a2b36428885d01aa3afd7ec32faa3fb0b7ca" [[package]] name = "sdl3-sys" -version = "0.6.6+SDL-3.4.10" +version = "0.6.7+SDL-3.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e7f134def04ed72e6f55187c6c29c72f7dab5d359c4be0dd49c9b97fef59c7" +checksum = "e89cde1ff23eb110e348da9b5be904381235163272a424938a2c99c86ea33041" dependencies = [ "cc", "cmake", @@ -6638,9 +6680,9 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.21.1" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "081a399c6762c4a9bda9233f502aca74b6ca6a0caaff4d218b12887eac4b6adc" +checksum = "0b5d71c87d24cb22976f3f6e6c2c9296ef1f6958394e2b868d56ca01b082798a" dependencies = [ "aes 0.9.1", "bzip2", @@ -6822,9 +6864,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "slint" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a54a407d1a0cbaa71d830ae7c236064b171368ea18db3b51ea3f2ce3f19519ee" +checksum = "ce12038f57f8f3a423564b0c9301a2ab3fda4246e4cbadd6b97acf9124bdc315" dependencies = [ "const-field-offset", "i-slint-backend-android-activity", @@ -6845,9 +6887,9 @@ dependencies = [ [[package]] name = "slint-build" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34415cacfde72e062d7e9c2bdd764429f5946870647c9f605fb7066a82015c" +checksum = "76684c11441f775b10bbc7b0e6b3016a39f17efdd659ffca112f17cfd6bdaed1" dependencies = [ "derive_more", "fontique", @@ -6858,9 +6900,9 @@ dependencies = [ [[package]] name = "slint-macros" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b74e0f959111e906199c743a3d7d59926f9d47823b462f6e6555bf8777275749" +checksum = "9f2a763e72e1e53c496f571d36327e777da1eb0d9e58fceb83890c2a83ee7223" dependencies = [ "i-slint-compiler", "proc-macro2", @@ -7357,9 +7399,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.51" +version = "0.3.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85c17d80feb7334b40c484e45ed1a5273dfd8bfda537c3be2e74a06a6686f327" +checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50" dependencies = [ "deranged", "js-sys", @@ -7378,9 +7420,9 @@ checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.30" +version = "0.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcef1a61bdb119096e153208ec5cbec23944ce8bca13be5c7f60c634f7403935" +checksum = "c431b87111666e491a90baa837f914fb45cd5dc3c268591b0220ff5057f2085f" dependencies = [ "num-conv", "time-core", @@ -8492,9 +8534,9 @@ checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" [[package]] name = "wgpu" -version = "29.0.3" +version = "29.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb3feacc458f7bee8bc1737149b42b6c731aa461039a4264a67bb6681646b250" +checksum = "76e8840e1ba2881d4cbb18d2147627a56af426ff064c0401eb0c8410c6325d07" dependencies = [ "arrayvec", "bitflags 2.13.0", @@ -8522,9 +8564,9 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "29.0.3" +version = "29.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02da3ad1b568337f25513b317870960ef87073ea0945502e44b864b67a8c77b7" +checksum = "2f519832254e56965a9940c4af57dcb75f702b6f6fa4a0b172f685395843a4d7" dependencies = [ "arrayvec", "bit-set", @@ -8555,36 +8597,36 @@ dependencies = [ [[package]] name = "wgpu-core-deps-apple" -version = "29.0.3" +version = "29.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62e51b5447e144b3dbba4feb01f80f4fa21696fa0cd99afb2c3df1affd6fdb28" +checksum = "f5e39e26c4c0e07589e67d18546cf79ff45383659fc72fca4dd293358a0347f3" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-core-deps-emscripten" -version = "29.0.3" +version = "29.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3487cd6293a963bc5c0c0396f6a2192043c50003c07f4efdccbad3d90ec9d819" +checksum = "01e09be551dc939498bdd5f6b2c66e55ab275dad25825267a08605a80fc9f0af" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-core-deps-windows-linux-android" -version = "29.0.3" +version = "29.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb01076d0aa08b0ba9bd741e178b5cc440f5abe99d9581323a4c8b5d1a1916" +checksum = "4e592c1bbef6ad047647ae6e666ebd8cee7a32bb4544d9700ec96cbf73230257" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-hal" -version = "29.0.3" +version = "29.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8e1a9e7a8512f276f7c62e018c7fa8d60954303fed2e5750114332049193f" +checksum = "97ace1c17727311c22a46e4e3faf56ea6de81af99dcc839bdfb54857b94d448d" dependencies = [ "android_system_properties", "arrayvec", @@ -8636,9 +8678,9 @@ dependencies = [ [[package]] name = "wgpu-naga-bridge" -version = "29.0.3" +version = "29.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c654c483f058800972c3645e95388a7eca31bf9fe1933bc20e036588a0be02" +checksum = "95226013f547544b223281cd16a4fb549aa9dcb562adbda0faae4c73ffbbc161" dependencies = [ "naga", "wgpu-types", @@ -8646,9 +8688,9 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "29.0.3" +version = "29.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9bcc31518a0e9735aefebedb5f7a9ef3ed1c42549c9f4c882fa9060ceaac639" +checksum = "84bf84cd9ca8ca45e2b223a3868f1adf9bfc0c66aeac212e76ee7e40fdadf8f5" dependencies = [ "bitflags 2.13.0", "bytemuck", @@ -9335,9 +9377,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.16.0" +version = "5.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee682d202a77e4a9f3b2c2bdf48a7b28af5c08c34ddf66f98c93e5e39464285" +checksum = "a28b97f866896a4be7aefd2b5a8e01bb6773d19a775d54ab28b4d094b9a4480e" dependencies = [ "async-broadcast", "async-executor", @@ -9394,9 +9436,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.16.0" +version = "5.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adf1bd45a81a103745b1757754762a26e8cd01e4532e4d6c8ec431624b80d1d6" +checksum = "5e05ad887425eecf5e8384dc2406a4a9313eb73468712fc1cdea362eb4fe0469" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9409,9 +9451,9 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.3.2" +version = "4.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d" +checksum = "1039ca249fee9559680f3a9f05b55e0761fee51af4f6c1e7d8c1f31e549721d2" dependencies = [ "serde", "winnow", @@ -9420,12 +9462,12 @@ dependencies = [ [[package]] name = "zbus_xml" -version = "5.1.1" +version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8067892e940ed1727dea64690378601603b31d62dfde019a5335fbb7c0e0ed9" +checksum = "59ab0513c0a66a60a8718d5ad712a5094845a20d95b5c1c81e2bd8e904a52b4f" dependencies = [ - "quick-xml 0.39.4", "serde", + "winnow", "zbus_names", "zvariant", ] @@ -9438,18 +9480,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.52" +version = "0.8.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" +checksum = "b7cbbc0a705a0fd05cc3676525980d2bf5a9bc4adac6d6475209a7887cf59d19" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.52" +version = "0.8.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" +checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" dependencies = [ "proc-macro2", "quote", @@ -9561,9 +9603,9 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.6.4" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "977347db8caa080403f6b6b7c1cda9479a8e869316f7e13a59b19076a40f94e3" +checksum = "b142a20ec14a91d5bc708c1dc21b080c550113d8aa77afa29635673a65dd02c5" [[package]] name = "zmij" @@ -9637,9 +9679,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.12.0" +version = "5.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a192a0bde63360d77a7523c833d4b4ce6070a927e2c53246e4c540b1a3e27be0" +checksum = "7cf057bb00bf5c9ad77abb6147b0ca4818236a1858416e9d988e40d6322fefa7" dependencies = [ "endi", "enumflags2", @@ -9651,9 +9693,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.12.0" +version = "5.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc6cde9c01c511074be97f7ccb6c19d0da89e3f8662e812e999dcfd4638737" +checksum = "8118ca6bda77bfc0ab51d660db0c955f2505eef854c9a449435bccb616933b31" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9664,9 +9706,9 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e8535915cfa75547e559d8c68e8139909a4aeee076831e4ef7fc59d8172c4d6" +checksum = "90cb9383f9b45290407a1258b202d3f8f01db719eb60b4e4055c6375af4fc7c7" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index ef1c908..2c4a216 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "gopher64" -version = "1.1.32" +version = "1.1.34" edition = "2024" -rust-version = "1.96.0" +rust-version = "1.97.0" [features] default = ["gui"] @@ -36,7 +36,7 @@ postcard = { version = "1.1", features = ["use-std"] } clap = { version = "4.5", features = ["derive"] } reqwest = { version = "0.13", default-features = false, features = ["native-tls-vendored", "charset", "http2", "system-proxy", "json", "query"] } discord-rich-presence = "1.1" -quick-xml = "0.40" +quick-xml = "0.41" [target.'cfg(not(target_os = "android"))'.dependencies] slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "unstable-winit-030", "backend-winit", "renderer-femtovg-wgpu", "accessibility"], optional = true } diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 2d45363..398f3f0 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.96.1" +channel = "1.97.0" From 282ec6c6c78015d11d4a38aaa35a0942a744949d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 13 Jul 2026 09:17:35 +0200 Subject: [PATCH 1101/1117] add gpu hints on windows (#1158) --- parallel-rdp/interface.cpp | 7 +++++++ src/ui.rs | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 47b0977..0b7ffd2 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -10,6 +10,13 @@ #include #include +#ifdef _WIN32 +extern "C" { +__declspec(dllexport) unsigned long NvOptimusEnablement = 0x00000001; +__declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1; +} +#endif + using namespace Vulkan; #define DP_STATUS_XBUS_DMA 0x01 diff --git a/src/ui.rs b/src/ui.rs index 4e0765b..84211d3 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -106,6 +106,12 @@ pub struct Ui { } pub fn sdl_hints() { + #[cfg(target_os = "linux")] + unsafe { + std::env::set_var("DRI_PRIME", "1"); + std::env::set_var("__NV_PRIME_RENDER_OFFLOAD", "1"); + } + unsafe { let hint = std::ffi::CString::new("1").unwrap(); sdl3_sys::everything::SDL_SetHint( From 67b8f472b3e66d2988c45b3da575fc6067c9ec0a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 13 Jul 2026 12:28:02 +0200 Subject: [PATCH 1102/1117] Remove DRI_PRIME (#1159) Not needed with Vulkan --- src/ui.rs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index 84211d3..36ee8c1 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -106,13 +106,9 @@ pub struct Ui { } pub fn sdl_hints() { - #[cfg(target_os = "linux")] unsafe { - std::env::set_var("DRI_PRIME", "1"); std::env::set_var("__NV_PRIME_RENDER_OFFLOAD", "1"); - } - unsafe { let hint = std::ffi::CString::new("1").unwrap(); sdl3_sys::everything::SDL_SetHint( sdl3_sys::everything::SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, From f113923748508432d57749f89f35ca8720fe9f54 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 14 Jul 2026 09:07:47 +0200 Subject: [PATCH 1103/1117] fix spinbox height (#1160) * fix spinbox height * more --- src/ui/gui/cheat_page.slint | 2 +- src/ui/gui/netplay_wait.slint | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ui/gui/cheat_page.slint b/src/ui/gui/cheat_page.slint index 84f0832..04eeedc 100644 --- a/src/ui/gui/cheat_page.slint +++ b/src/ui/gui/cheat_page.slint @@ -48,6 +48,7 @@ export component Cheats inherits Page { Rectangle { } for data in CheatsData.cheats: VerticalBox { + height: self.min-height; Text { text: data.cheat_name; font-size: 16px; @@ -76,7 +77,6 @@ export component Cheats inherits Page { cheat_toggled(CheatsData.cheat_game_crc,data.cheat_name,item.option,self.checked); } } - Rectangle { } } if CheatsData.cheats.length == 0 && CheatsData.cheat_game_name != "": Text { diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint index d49b521..ec547c4 100644 --- a/src/ui/gui/netplay_wait.slint +++ b/src/ui/gui/netplay_wait.slint @@ -104,6 +104,7 @@ export component NetplayWait inherits Page { } SpinBox { + height: self.min-height; minimum: 1; maximum: 16; value: NetplayWaitData.input_delay; From c38ae12f0a875929ca39650b461ab5c6fa83d626 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 20 Jul 2026 10:49:16 +0200 Subject: [PATCH 1104/1117] update rust (#1167) * update rust * remove cache * more --- .github/workflows/build.yml | 21 +- .github/workflows/lint.yml | 21 +- Cargo.lock | 701 +++++++++++++++++++----------------- Cargo.toml | 4 +- rust-toolchain.toml | 2 +- 5 files changed, 394 insertions(+), 355 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0f1ab38..4e93a68 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -49,17 +49,16 @@ jobs: -d':' -f2 | xargs)" >> $GITHUB_ENV - name: Install SDL Dependencies # https://wiki.libsdl.org/SDL3/README-linux#build-dependencies - uses: awalsh128/cache-apt-pkgs-action@v1 - with: - packages: build-essential git make pkg-config cmake ninja-build - gnome-desktop-testing libasound2-dev libpulse-dev libaudio-dev - libfribidi-dev libjack-dev libsndio-dev libx11-dev libxext-dev - libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev - libxtst-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev - libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev - libudev-dev libthai-dev libpipewire-0.3-dev libwayland-dev - libdecor-0-dev liburing-dev libfontconfig-dev - version: ${{ matrix.target }}-1.0 + run: | + sudo apt-get update && sudo apt-get install -y build-essential git make \ + pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \ + libaudio-dev libfribidi-dev libjack-dev libsndio-dev libx11-dev libxext-dev \ + libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libxtst-dev \ + libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ + libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev libthai-dev libusb-1.0-0-dev \ + libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev libfontconfig-dev + env: + DEBIAN_FRONTEND: noninteractive - name: Install LLVM and Clang uses: KyleMayes/install-llvm-action@v2 with: diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index a1cc347..7b0948f 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -31,17 +31,16 @@ jobs: -d':' -f2 | xargs)" >> $GITHUB_ENV - name: Install SDL Dependencies # https://wiki.libsdl.org/SDL3/README-linux#build-dependencies - uses: awalsh128/cache-apt-pkgs-action@v1 - with: - packages: build-essential git make pkg-config cmake ninja-build - gnome-desktop-testing libasound2-dev libpulse-dev libaudio-dev - libfribidi-dev libjack-dev libsndio-dev libx11-dev libxext-dev - libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev - libxtst-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev - libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev - libudev-dev libthai-dev libpipewire-0.3-dev libwayland-dev - libdecor-0-dev liburing-dev libfontconfig-dev gettext - version: lint-1.0 + run: | + sudo apt-get update && sudo apt-get install -y build-essential git make \ + pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \ + libaudio-dev libfribidi-dev libjack-dev libsndio-dev libx11-dev libxext-dev \ + libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libxtst-dev \ + libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ + libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev libthai-dev libusb-1.0-0-dev \ + libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev libfontconfig-dev gettext + env: + DEBIAN_FRONTEND: noninteractive - name: Install LLVM and Clang uses: KyleMayes/install-llvm-action@v2 with: diff --git a/Cargo.lock b/Cargo.lock index 6262078..0df73f2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -24,14 +24,14 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3b7f7f85a7e5f68090000ed7622545829afd484d210358702ae4cb97dd0c320" dependencies = [ - "uuid 1.23.4", + "uuid 1.24.0", ] [[package]] name = "accesskit_atspi_common" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e98018dbef3583d751dbb96e07b8728fb99581360e1c3df408af16f4a80b821" +checksum = "023da0e5097f46df7092d5280b02efb9bbf8d93298daeced42652463e357d636" dependencies = [ "accesskit", "accesskit_consumer", @@ -43,9 +43,9 @@ dependencies = [ [[package]] name = "accesskit_consumer" -version = "0.37.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950720ce064757a1b629caad3a408e8d2c63bb01f29b8a3ff8daa331053ffeb" +checksum = "5d10a236f96f87d70732e44520046785431ef01d5bcd6b041317bfadd2f88245" dependencies = [ "accesskit", "hashbrown 0.16.1", @@ -53,9 +53,9 @@ dependencies = [ [[package]] name = "accesskit_ios" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02ecb52198c7cf5f8d3e9ffc03d2ca0a5c7201926befd96721437829da4c5c6a" +checksum = "750c4e9f6ce888dfe8a10c0f1b5ceb646a7854fd46579d74919219d1bb314083" dependencies = [ "accesskit", "accesskit_consumer", @@ -67,9 +67,9 @@ dependencies = [ [[package]] name = "accesskit_macos" -version = "0.26.2" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cb8b66cef272d48161b02a6317cc2bdd5f98bb0a5e79c68f704a5862aa396b" +checksum = "ce02dc63b43f0c9296af9ac946312a2dc8814427d7a64d2d600971dac55b6076" dependencies = [ "accesskit", "accesskit_consumer", @@ -81,9 +81,9 @@ dependencies = [ [[package]] name = "accesskit_unix" -version = "0.22.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5376ba4cc23312587634abb5250b1ce8618f01a55915608209aafd01efb4bf8c" +checksum = "03e156ed3802e35eefe894ef2671bc6c889303d8a7e110b5e1b48f504b91362f" dependencies = [ "accesskit", "accesskit_atspi_common", @@ -99,9 +99,9 @@ dependencies = [ [[package]] name = "accesskit_windows" -version = "0.33.1" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36e93ac7bf50b964f1cbb75f741629a4e950571baa1ef1274457ab5a80d9bcc2" +checksum = "106c2b961215864d1c2e703ee63269c25c4e80a577ffb2c1017b9c17dcdf83a1" dependencies = [ "accesskit", "accesskit_consumer", @@ -113,9 +113,9 @@ dependencies = [ [[package]] name = "accesskit_winit" -version = "0.33.1" +version = "0.33.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe5862066316f6caaf02cd3aecd54bced25503ac5dbbfd0d03a42bc1246217" +checksum = "d5b41e63a69f36d9f1f41e70464c7e5f72eee485ef26aab19f0b4f86e6c0a84c" dependencies = [ "accesskit", "accesskit_ios", @@ -231,7 +231,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289" dependencies = [ "android-properties", - "bitflags 2.13.0", + "bitflags 2.13.1", "cc", "cesu8", "jni 0.21.1", @@ -252,7 +252,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd" dependencies = [ "android-properties", - "bitflags 2.13.0", + "bitflags 2.13.1", "cc", "jni 0.22.4", "libc", @@ -261,7 +261,7 @@ dependencies = [ "ndk-context", "ndk-sys 0.6.0+11769913", "num_enum", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] @@ -351,9 +351,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.103" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "arbitrary" @@ -378,7 +378,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -441,7 +441,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "synstructure", ] @@ -453,7 +453,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -588,7 +588,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -656,13 +656,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.89" +version = "0.1.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +checksum = "ae36dc4177970ef04fde5178d3e2429882def40e57a451f919c098f72baa6cec" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.2", ] [[package]] @@ -754,7 +754,7 @@ dependencies = [ "derive_utils", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -778,7 +778,7 @@ dependencies = [ "num-traits", "pastey", "rayon", - "thiserror 2.0.18", + "thiserror 2.0.19", "v_frame", "y4m", ] @@ -855,7 +855,7 @@ version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cexpr", "clang-sys", "itertools 0.13.0", @@ -866,7 +866,7 @@ dependencies = [ "regex", "rustc-hash 2.1.3", "shlex 1.3.0", - "syn", + "syn 2.0.119", ] [[package]] @@ -908,9 +908,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" dependencies = [ "serde_core", ] @@ -994,9 +994,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f3f6da4992df95bbcd9af42a6c7dcb994498fc9048230405f3b36ff7cd3f145" +checksum = "a88b7ea17d208c4193f2c1e6de3c35fe71f98c96982d5ced308bdcc749ff6e1f" dependencies = [ "bytes", "cfg_aliases", @@ -1040,27 +1040,27 @@ checksum = "89385e82b5d1821d2219e0b095efa2cc1f246cbf99080f3be46a1a85c0d392d9" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "bytemuck" -version = "1.25.0" +version = "1.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.10.2" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" +checksum = "f65693059b6b9c588b9f62fed1cedbf0a8b805631457ea162d68f0de186f3de5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1096,7 +1096,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "log", "polling", "rustix 0.38.44", @@ -1110,7 +1110,7 @@ version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dbf9978365bac10f54d1d4b04f7ce4427e51f71d61f2fe15e3fed5166474df7" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "polling", "rustix 1.1.4", "slab", @@ -1161,9 +1161,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.66" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5d6cac793997bd970000024b2934968efe83b382de4fdcf4fcb46b6ee4ad996" +checksum = "c89588d05638b5b4594a3348a2d6c20277e43a7f5c5202b05cc56888475a47b8" dependencies = [ "find-msvc-tools", "jobserver", @@ -1206,9 +1206,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" [[package]] name = "cgl" @@ -1301,9 +1301,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.1" +version = "4.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +checksum = "dd059f9da4f5c36b3787f65d38ccaab1cc315f07b01f89abc8359ee6a8205011" dependencies = [ "clap_builder", "clap_derive", @@ -1311,9 +1311,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "f09628afdcc538b57f3c6341e9c8e9970f18e4a481690a64974d7023bd33548b" dependencies = [ "anstream", "anstyle", @@ -1330,7 +1330,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1378,7 +1378,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" dependencies = [ - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] @@ -1441,7 +1441,7 @@ checksum = "9b5dc851b7ea80cc4f69aa28632385ffd3e0f88014d53db3f2e5a781896ca783" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1732,7 +1732,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1803,7 +1803,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn", + "syn 2.0.119", "unicode-xid", ] @@ -1815,7 +1815,7 @@ checksum = "362f47930db19fe7735f527e6595e4900316b893ebf6d48ad3d31be928d57dd6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1875,7 +1875,7 @@ dependencies = [ "serde_derive", "serde_json", "serde_repr", - "thiserror 2.0.18", + "thiserror 2.0.19", "uuid 0.8.2", ] @@ -1891,7 +1891,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -1905,7 +1905,7 @@ checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1944,7 +1944,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "bytemuck", "drm-ffi", "drm-fourcc", @@ -1998,14 +1998,14 @@ dependencies = [ "p256", "p384", "portable-atomic", - "rand 0.9.4", + "rand 0.9.5", "rand_core 0.6.4", "rcgen", "ring", "rkyv", - "rustls 0.23.41", + "rustls 0.23.42", "sec1", - "sha1 0.10.6", + "sha1 0.10.7", "sha2 0.10.9", "thiserror 1.0.69", "tokio", @@ -2106,7 +2106,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2126,7 +2126,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2189,9 +2189,9 @@ dependencies = [ [[package]] name = "exr" -version = "1.74.1" +version = "1.74.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6be87932f10230a4339ab394edd8e4611fcb72553d8295b4d52ea55249b3daa5" +checksum = "711fe42c9964295e01ee3fba3f9fe0e1d24b98886950d68efe81b1c76e21adf3" dependencies = [ "bit_field", "half", @@ -2206,9 +2206,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" [[package]] name = "fatfs" @@ -2243,7 +2243,7 @@ version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f43d05da42e81724c16d34a150fb7fda53d3f786e5a94673ee526ff8602f0f6a" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "bytemuck", "fnv", "glow", @@ -2355,6 +2355,15 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "font-types" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad67eced03f5504d9cbd3a879b5958b5c54d4e5fd794361c6eb21b05fb703411" +dependencies = [ + "bytemuck", +] + [[package]] name = "fontdb" version = "0.23.0" @@ -2381,7 +2390,7 @@ dependencies = [ "objc2-core-text", "objc2-foundation 0.3.2", "parlance", - "read-fonts", + "read-fonts 0.39.2", "roxmltree", "smallvec", "windows", @@ -2416,7 +2425,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2442,9 +2451,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "a88cf1f829d945f548cf8fec32c61b1f202b6d93b45848602fc02af4b12ad218" dependencies = [ "futures-channel", "futures-core", @@ -2457,9 +2466,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "262590f4fe6afeb0bc83be1daa64e52657fe185690a958af7f3ad0e92085c5ae" dependencies = [ "futures-core", "futures-sink", @@ -2467,15 +2476,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "6754879cc9f2c66f88c6e5c35344bb0bdb0708b0352b1201815667c7eabc7458" dependencies = [ "futures-core", "futures-task", @@ -2484,9 +2493,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a" [[package]] name = "futures-lite" @@ -2503,26 +2512,26 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "e34418ac499d6305c2fb5ad0ed2f6ac998c5f8ca209b4510f7f94242c647e307" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" [[package]] name = "futures-timer" @@ -2536,9 +2545,9 @@ dependencies = [ [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" dependencies = [ "futures-channel", "futures-core", @@ -2629,7 +2638,7 @@ dependencies = [ "instant", "js-sys", "parking_lot", - "rand 0.8.6", + "rand 0.8.7", "serde", "tracing", ] @@ -2713,7 +2722,7 @@ version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cfg_aliases", "cgl", "dispatch2", @@ -2826,7 +2835,7 @@ dependencies = [ "hashbrown 0.16.1", "log", "presser", - "thiserror 2.0.18", + "thiserror 2.0.19", "windows", ] @@ -2836,7 +2845,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "gpu-descriptor-types", "hashbrown 0.15.5", ] @@ -2847,7 +2856,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] @@ -2904,9 +2913,9 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d12c7c642d4ce8c2e784b4751a6634bd89583912265add4a679a8882d123fbcd" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "bytemuck", - "read-fonts", + "read-fonts 0.39.2", "smallvec", ] @@ -3043,9 +3052,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" dependencies = [ "bytes", "http", @@ -3053,9 +3062,9 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2" dependencies = [ "bytes", "futures-core", @@ -3109,7 +3118,7 @@ dependencies = [ "http", "hyper", "hyper-util", - "rustls 0.23.41", + "rustls 0.23.42", "tokio", "tokio-rustls", "tower-service", @@ -3148,7 +3157,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.4", + "socket2 0.6.5", "system-configuration", "tokio", "tower-service", @@ -3264,7 +3273,7 @@ dependencies = [ "icu_provider", "pulldown-cmark", "resvg", - "skrifa", + "skrifa 0.42.1", ] [[package]] @@ -3291,7 +3300,7 @@ dependencies = [ "resvg", "rowan", "rspolib", - "skrifa", + "skrifa 0.42.1", "smol_str 0.3.6", "strum", "swash", @@ -3307,7 +3316,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e407dc2bd5385dcbdd9c1cf927213d2e4bacda667545abf8839c60f8290f754" dependencies = [ "auto_enums", - "bitflags 2.13.0", + "bitflags 2.13.1", "cfg-if", "chrono", "clru", @@ -3335,7 +3344,7 @@ dependencies = [ "resvg", "rgb", "scopeguard", - "skrifa", + "skrifa 0.42.1", "slab", "strum", "swash", @@ -3360,7 +3369,7 @@ checksum = "3a842640da4c4d0909d25cc5a51e1f9cde02bd48f7fdfa94df10d595d4e3c80a" dependencies = [ "quote", "serde_json", - "syn", + "syn 2.0.119", ] [[package]] @@ -3414,7 +3423,7 @@ dependencies = [ "pin-weak", "raw-window-handle", "raw-window-metal", - "read-fonts", + "read-fonts 0.39.2", "scoped-tls-hkt", "skia-safe", "softbuffer", @@ -3442,7 +3451,7 @@ dependencies = [ "integer-sqrt", "lyon_path", "num-traits", - "skrifa", + "skrifa 0.42.1", "swash", "zeno", ] @@ -3743,7 +3752,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9793345a65d71317763a33066b5d8351f8760dde8d4930fe9e39b5f14a7959d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "input-sys", "libc", "log", @@ -3785,7 +3794,7 @@ dependencies = [ "futures", "log", "portable-atomic", - "rand 0.9.4", + "rand 0.9.5", "rtcp", "rtp", "thiserror 1.0.69", @@ -3803,7 +3812,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -3900,7 +3909,7 @@ dependencies = [ "jni-sys 0.4.1", "log", "simd_cesu8", - "thiserror 2.0.18", + "thiserror 2.0.19", "walkdir", "windows-link", ] @@ -3915,7 +3924,7 @@ dependencies = [ "quote", "rustc_version", "simd_cesu8", - "syn", + "syn 2.0.119", ] [[package]] @@ -3943,7 +3952,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" dependencies = [ "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -3973,7 +3982,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "serde", "unicode-segmentation", ] @@ -4081,7 +4090,7 @@ version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "libc", "plain", "redox_syscall 0.9.0", @@ -4192,7 +4201,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7755f08423275157ad1680aaecc9ccb7e0cc633da3240fea2d1522935cc15c72" dependencies = [ "lyon_path", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] @@ -4234,7 +4243,7 @@ dependencies = [ "cfg-if", "derive_more", "serde", - "uuid 1.23.4", + "uuid 1.24.0", ] [[package]] @@ -4260,7 +4269,7 @@ dependencies = [ "serde", "serde-wasm-bindgen", "serde_json", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio-util", "wasm-bindgen", "wasm-bindgen-futures", @@ -4355,9 +4364,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" dependencies = [ "libc", "wasi", @@ -4389,7 +4398,7 @@ dependencies = [ "objc2-foundation 0.3.2", "once_cell", "png", - "thiserror 2.0.18", + "thiserror 2.0.19", "windows-sys 0.61.2", ] @@ -4410,7 +4419,7 @@ checksum = "4568f25ccbd45ab5d5603dc34318c1ec56b117531781260002151b8530a9f931" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -4421,7 +4430,7 @@ checksum = "b2bf919621e7975acb27d881bae2fb993e0d45c8e0446e85e6272971e00dc8df" dependencies = [ "arrayvec", "bit-set", - "bitflags 2.13.0", + "bitflags 2.13.1", "cfg-if", "cfg_aliases", "codespan-reporting", @@ -4435,7 +4444,7 @@ dependencies = [ "once_cell", "rustc-hash 1.1.0", "spirv", - "thiserror 2.0.18", + "thiserror 2.0.19", "unicode-ident", ] @@ -4468,7 +4477,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "jni-sys 0.3.1", "log", "ndk-sys 0.5.0+25.2.9519653", @@ -4482,7 +4491,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "jni-sys 0.3.1", "log", "ndk-sys 0.6.0+11769913", @@ -4540,7 +4549,7 @@ version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cfg-if", "cfg_aliases", "libc", @@ -4614,7 +4623,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -4666,7 +4675,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -4700,7 +4709,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -4716,7 +4725,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -4737,7 +4746,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -4750,7 +4759,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -4772,7 +4781,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -4784,7 +4793,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -4795,7 +4804,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "dispatch2", "objc2 0.6.4", ] @@ -4806,7 +4815,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "dispatch2", "objc2 0.6.4", "objc2-core-foundation", @@ -4853,7 +4862,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", @@ -4865,7 +4874,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", @@ -4884,7 +4893,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.5.1", "dispatch", "libc", @@ -4897,7 +4906,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.6.2", "objc2 0.6.4", "objc2-core-foundation", @@ -4909,7 +4918,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "objc2 0.6.4", "objc2-core-foundation", ] @@ -4932,7 +4941,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -4944,7 +4953,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.6.2", "objc2 0.6.4", "objc2-foundation 0.3.2", @@ -4956,7 +4965,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -4969,7 +4978,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "objc2 0.6.4", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -4992,7 +5001,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.5.1", "objc2 0.5.2", "objc2-cloud-kit 0.2.2", @@ -5013,7 +5022,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.6.2", "objc2 0.6.4", "objc2-core-foundation", @@ -5038,7 +5047,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -5078,9 +5087,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "open" -version = "5.3.6" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd8d3b65c44123a56e0133d2cd06ce4361bd3ca99d41198b2f25e3c3db9b8b4a" +checksum = "a0b3d059e795d52b8a72fef45658620edd4d9c359b338564aa14391ffa511ed5" dependencies = [ "is-wsl", "libc", @@ -5092,7 +5101,7 @@ version = "0.10.81" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77823a27f0babb03091cb9ed9ef80af3b39dbc82f97e8fa530374b7dafd87a45" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cfg-if", "foreign-types 0.3.2", "libc", @@ -5108,7 +5117,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -5257,7 +5266,7 @@ dependencies = [ "linebender_resource_handle", "parlance", "parley_data", - "skrifa", + "skrifa 0.42.1", ] [[package]] @@ -5357,7 +5366,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -5392,7 +5401,7 @@ checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -5452,7 +5461,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "crc32fast", "fdeflate", "flate2", @@ -5513,9 +5522,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +checksum = "3d20d5497ef88037a52ff98267d066e7f11fcc5e99bbfbd58a42336193aacec3" dependencies = [ "critical-section", ] @@ -5587,7 +5596,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn", + "syn 2.0.119", ] [[package]] @@ -5610,9 +5619,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -5633,7 +5642,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4488a4a36b9a4ba6b9334a32a39971f77c1436ec82c38707bce707699cc3bbcb" dependencies = [ "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -5653,7 +5662,7 @@ checksum = "7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -5662,7 +5671,7 @@ version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "getopts", "memchr", "pulldown-cmark-escape", @@ -5739,9 +5748,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.46" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -5769,9 +5778,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" +checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" dependencies = [ "libc", "rand_chacha 0.3.1", @@ -5780,9 +5789,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.5", @@ -5877,10 +5886,10 @@ dependencies = [ "num-traits", "paste", "profiling", - "rand 0.9.4", + "rand 0.9.5", "rand_chacha 0.9.0", "simd_helpers", - "thiserror 2.0.18", + "thiserror 2.0.19", "v_frame", "wasm-bindgen", ] @@ -5906,7 +5915,7 @@ version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] @@ -5968,7 +5977,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4ed38b89c2c77ff968c524145ad65fb010f38af5c7a224b53b81d47ac2daa81" dependencies = [ "bytemuck", - "font-types", + "font-types 0.11.3", +] + +[[package]] +name = "read-fonts" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046a7d674daf459825b32f5062056d6882db0d2f5a479fbd76ccfc870ac18709" +dependencies = [ + "bytemuck", + "font-types 0.12.1", + "once_cell", ] [[package]] @@ -5992,7 +6012,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] @@ -6001,7 +6021,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5102a6aaa05aa011a238e178e6bca86d2cb56fc9f586d37cb80f5bca6e07759" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] @@ -6012,14 +6032,14 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.17", "libredox", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] name = "regex" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0e75113e14dc5acb068cd0786884f214f1312650a3d36d269f5c4f3cdee8a2" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -6029,9 +6049,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.15" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f388202e4b80542a0921078cc23b6333bcf1409c1e3f86404cae4766a6131db" +checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad" dependencies = [ "aho-corasick", "memchr", @@ -6192,7 +6212,7 @@ dependencies = [ "rend", "rkyv_derive", "tinyvec", - "uuid 1.23.4", + "uuid 1.24.0", ] [[package]] @@ -6203,7 +6223,7 @@ checksum = "c0ed1a78a1b19d184b0daa629dd9a024573173ec7d485b287cb369fb3607cc1c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -6266,7 +6286,7 @@ dependencies = [ "bytes", "memchr", "portable-atomic", - "rand 0.9.4", + "rand 0.9.5", "serde", "thiserror 1.0.69", "webrtc-util", @@ -6308,7 +6328,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "errno", "libc", "linux-raw-sys 0.4.15", @@ -6321,7 +6341,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "errno", "libc", "linux-raw-sys 0.12.1", @@ -6342,9 +6362,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.41" +version = "0.23.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" +checksum = "3c54fcab019b409d04215d3a17cb438fd7fbf192ee61461f20f4fe18704bc138" dependencies = [ "once_cell", "ring", @@ -6405,7 +6425,7 @@ version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "bytemuck", "core_maths", "log", @@ -6528,7 +6548,7 @@ version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22c3b0257608d7de4de4c4ea650ccc2e6e3e45e3cd80039fcdee768bcb449253" dependencies = [ - "rand 0.9.4", + "rand 0.9.5", "substring", "thiserror 1.0.69", "url", @@ -6554,7 +6574,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -6585,9 +6605,9 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -6615,29 +6635,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.2", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -6648,13 +6668,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.2", ] [[package]] @@ -6698,9 +6718,9 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +checksum = "a978451301f4db1d02937a4ab3ccce137717b81826e79b7d49ffe3244a13c3b8" dependencies = [ "cfg-if", "cpufeatures 0.2.17", @@ -6774,15 +6794,15 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" [[package]] name = "simd_cesu8" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33" +checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" dependencies = [ "rustc_version", "simdutf8", @@ -6841,7 +6861,7 @@ version = "0.99.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f512ac418a64194842dd05566320805dad1c957c521039db2486fd6368865bc" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "skia-bindings", "windows", ] @@ -6853,7 +6873,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c34617370ae968efb7161bb2beb517d9084659aae19e24b89e3db25b46e4564" dependencies = [ "bytemuck", - "read-fonts", + "read-fonts 0.39.2", +] + +[[package]] +name = "skrifa" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819ab7d62b1d3e72d9d9dea5650bac30424f9111364bb94928dbf5ecad1baa68" +dependencies = [ + "bytemuck", + "read-fonts 0.41.0", ] [[package]] @@ -6931,7 +6961,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "calloop 0.13.0", "calloop-wayland-source 0.3.0", "cursor-icon", @@ -6956,7 +6986,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "calloop 0.14.4", "calloop-wayland-source 0.4.1", "cursor-icon", @@ -6964,7 +6994,7 @@ dependencies = [ "log", "memmap2", "rustix 1.1.4", - "thiserror 2.0.18", + "thiserror 2.0.19", "wayland-backend", "wayland-client", "wayland-csd-frame", @@ -7025,7 +7055,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -7040,9 +7070,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", "windows-sys 0.61.2", @@ -7081,9 +7111,9 @@ dependencies = [ [[package]] name = "spin" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" dependencies = [ "lock_api", ] @@ -7112,7 +7142,7 @@ version = "0.4.0+sdk-1.4.341.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9571ea910ebd84c86af4b3ed27f9dbdc6ad06f17c5f96146b2b671e2976744f" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] @@ -7170,7 +7200,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -7183,7 +7213,7 @@ dependencies = [ "crc", "lazy_static", "md-5", - "rand 0.9.4", + "rand 0.9.5", "ring", "subtle", "thiserror 1.0.69", @@ -7219,20 +7249,31 @@ dependencies = [ [[package]] name = "swash" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0811b01ca2c4e8718760713911feaf4675c24f94e50530a015ec646cfb622f7c" +checksum = "6c2499c2d826531388872b2268718aed907a39bd785ab0dcfe57fab26283f92e" dependencies = [ - "skrifa", + "skrifa 0.44.0", "yazi", "zeno", ] [[package]] name = "syn" -version = "2.0.118" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a207d6d6a2b7fc470b80443726053f18a2481b7e1eee970597051596567987a3" dependencies = [ "proc-macro2", "quote", @@ -7256,7 +7297,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -7277,7 +7318,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -7354,11 +7395,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.18" +version = "2.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" dependencies = [ - "thiserror-impl 2.0.18", + "thiserror-impl 2.0.19", ] [[package]] @@ -7369,18 +7410,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "thiserror-impl" -version = "2.0.18" +version = "2.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.2", ] [[package]] @@ -7505,9 +7546,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" dependencies = [ "tinyvec_macros", ] @@ -7520,9 +7561,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.52.3" +version = "1.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +checksum = "d988bcd52dbe076d3d46903332f58c912b87a2c49b1428419a5845154762ffee" dependencies = [ "bytes", "libc", @@ -7530,20 +7571,20 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.4", + "socket2 0.6.5", "tokio-macros", "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.7.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +checksum = "6328af13490e73a9b4694030fafd93f8c8c6a9dede33e821c3fc63eddf8042ba" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -7562,22 +7603,22 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.41", + "rustls 0.23.42", "tokio", ] [[package]] name = "tokio-tungstenite" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f72a05e828585856dacd553fba484c242c46e391fb0e58917c942ee9202915c" +checksum = "17a073bfed563fa236697a068031408a93cd9522e08abf9933ead3e73411bd71" dependencies = [ "futures-util", "log", "native-tls", "tokio", "tokio-native-tls", - "tungstenite 0.29.0", + "tungstenite 0.30.0", ] [[package]] @@ -7596,9 +7637,9 @@ dependencies = [ [[package]] name = "toml" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +checksum = "53c96ecdfa941c8fc4fcaed14f99ada8ebed502eef533015095a07e3301d4c3c" dependencies = [ "indexmap", "serde_core", @@ -7620,9 +7661,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.12+spec-1.1.0" +version = "0.25.13+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" +checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" dependencies = [ "indexmap", "toml_datetime", @@ -7642,9 +7683,9 @@ dependencies = [ [[package]] name = "toml_writer" -version = "1.1.1+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" [[package]] name = "tower" @@ -7667,7 +7708,7 @@ version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "bytes", "futures-util", "http", @@ -7711,7 +7752,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -7749,17 +7790,17 @@ dependencies = [ "http", "httparse", "log", - "rand 0.9.4", - "sha1 0.10.6", - "thiserror 2.0.18", + "rand 0.9.5", + "sha1 0.10.7", + "thiserror 2.0.19", "utf-8", ] [[package]] name = "tungstenite" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c01152af293afb9c7c2a57e4b559c5620b421f6d133261c60dd2d0cdb38e6b8" +checksum = "e48ac77174b19c110a50ab2128b24215ac9cb40e0e12e093fb602d175c569d22" dependencies = [ "bytes", "data-encoding", @@ -7767,9 +7808,9 @@ dependencies = [ "httparse", "log", "native-tls", - "rand 0.9.4", - "sha1 0.10.6", - "thiserror 2.0.18", + "rand 0.10.2", + "sha1 0.11.0", + "thiserror 2.0.19", ] [[package]] @@ -7784,7 +7825,7 @@ dependencies = [ "log", "md-5", "portable-atomic", - "rand 0.9.4", + "rand 0.9.5", "ring", "stun", "thiserror 1.0.69", @@ -8001,9 +8042,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.23.4" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53" +checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239" dependencies = [ "getrandom 0.4.3", "js-sys", @@ -8024,9 +8065,9 @@ dependencies = [ [[package]] name = "value-bag" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ba6f5989077681266825251a52748b8c1d8a4ad098cc37e440103d0ea717fc0" +checksum = "5dd4ec1eb1d240636e354a30110a1dfcb37047169a4d9bd6d9d3469df574b5c4" [[package]] name = "varinteger" @@ -8066,7 +8107,7 @@ checksum = "482a37f9777480673d3a99c80ac2edc69f92382230440946855fa27ebc47cba6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -8154,7 +8195,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 2.0.119", "wasm-bindgen-shared", ] @@ -8187,7 +8228,7 @@ version = "0.31.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "rustix 1.1.4", "wayland-backend", "wayland-scanner", @@ -8199,7 +8240,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cursor-icon", "wayland-backend", ] @@ -8221,7 +8262,7 @@ version = "0.32.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23d0c813de3daa2ed6520af85a3bd49b0e722a3078506899aa9686fea58dc4b6" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-scanner", @@ -8233,7 +8274,7 @@ version = "20250721.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -8246,7 +8287,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e9567599ef23e09b8dad6e429e5738d4509dfc46b3b21f32841a304d16b29c8" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -8259,7 +8300,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b6d8cf1eb2c1c31ed1f5643c88a6e53538129d4af80030c8cabd1f9fa884d91" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -8272,7 +8313,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -8372,7 +8413,7 @@ dependencies = [ "lazy_static", "log", "portable-atomic", - "rand 0.9.4", + "rand 0.9.5", "rcgen", "regex", "ring", @@ -8425,7 +8466,7 @@ dependencies = [ "crc", "log", "portable-atomic", - "rand 0.9.4", + "rand 0.9.5", "serde", "serde_json", "stun", @@ -8433,7 +8474,7 @@ dependencies = [ "tokio", "turn", "url", - "uuid 1.23.4", + "uuid 1.24.0", "waitgroup", "webrtc-mdns", "webrtc-util", @@ -8460,7 +8501,7 @@ checksum = "a9a28290bd0cdda196f8bf5c6f7dddaef18cc913ee0702cd1ea237bad203e337" dependencies = [ "byteorder", "bytes", - "rand 0.9.4", + "rand 0.9.5", "rtp", "thiserror 1.0.69", ] @@ -8477,7 +8518,7 @@ dependencies = [ "crc", "log", "portable-atomic", - "rand 0.9.4", + "rand 0.9.5", "thiserror 1.0.69", "tokio", "webrtc-util", @@ -8499,7 +8540,7 @@ dependencies = [ "log", "rtcp", "rtp", - "sha1 0.10.6", + "sha1 0.10.7", "subtle", "thiserror 1.0.69", "tokio", @@ -8520,7 +8561,7 @@ dependencies = [ "log", "nix 0.26.4", "portable-atomic", - "rand 0.9.4", + "rand 0.9.5", "thiserror 1.0.69", "tokio", "winapi", @@ -8539,7 +8580,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76e8840e1ba2881d4cbb18d2147627a56af426ff064c0401eb0c8410c6325d07" dependencies = [ "arrayvec", - "bitflags 2.13.0", + "bitflags 2.13.1", "bytemuck", "cfg-if", "cfg_aliases", @@ -8571,7 +8612,7 @@ dependencies = [ "arrayvec", "bit-set", "bit-vec", - "bitflags 2.13.0", + "bitflags 2.13.1", "bytemuck", "cfg_aliases", "document-features", @@ -8586,7 +8627,7 @@ dependencies = [ "raw-window-handle", "rustc-hash 1.1.0", "smallvec", - "thiserror 2.0.18", + "thiserror 2.0.19", "wgpu-core-deps-apple", "wgpu-core-deps-emscripten", "wgpu-core-deps-windows-linux-android", @@ -8632,7 +8673,7 @@ dependencies = [ "arrayvec", "ash", "bit-set", - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.6.2", "bytemuck", "cfg-if", @@ -8665,7 +8706,7 @@ dependencies = [ "raw-window-metal", "renderdoc-sys", "smallvec", - "thiserror 2.0.18", + "thiserror 2.0.19", "wasm-bindgen", "wayland-sys", "web-sys", @@ -8692,7 +8733,7 @@ version = "29.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84bf84cd9ca8ca45e2b223a3868f1adf9bfc0c66aeac212e76ee7e40fdadf8f5" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "bytemuck", "js-sys", "log", @@ -8784,7 +8825,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -8795,7 +8836,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -9084,7 +9125,7 @@ dependencies = [ "ahash", "android-activity 0.6.1", "atomic-waker", - "bitflags 2.13.0", + "bitflags 2.13.1", "block2 0.5.1", "bytemuck", "calloop 0.13.0", @@ -9129,9 +9170,9 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" dependencies = [ "memchr", ] @@ -9158,11 +9199,11 @@ version = "0.48.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb731d4c4d93eacc69a1ad2f270f905788a98e4a3438267bcafbe08d3431c8d8" dependencies = [ - "font-types", + "font-types 0.11.3", "indexmap", "kurbo", "log", - "read-fonts", + "read-fonts 0.39.2", ] [[package]] @@ -9184,7 +9225,7 @@ dependencies = [ "pharos", "rustc_version", "send_wrapper", - "thiserror 2.0.18", + "thiserror 2.0.19", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -9295,7 +9336,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "dlib", "log", "once_cell", @@ -9371,15 +9412,15 @@ checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "synstructure", ] [[package]] name = "zbus" -version = "5.17.0" +version = "5.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28b97f866896a4be7aefd2b5a8e01bb6773d19a775d54ab28b4d094b9a4480e" +checksum = "fe18fb60dc696039e738717b76eaea21e7a4489bbb1885020b43c94236d7e98a" dependencies = [ "async-broadcast", "async-executor", @@ -9402,7 +9443,7 @@ dependencies = [ "serde_repr", "tracing", "uds_windows", - "uuid 1.23.4", + "uuid 1.24.0", "windows-sys 0.61.2", "winnow", "zbus_macros", @@ -9428,7 +9469,7 @@ checksum = "10da05367f3a7b7553c8cdf8fa91aee6b64afebe32b51c95177957efc47ca3a0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "zbus-lockstep", "zbus_xml", "zvariant", @@ -9436,14 +9477,14 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.17.0" +version = "5.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e05ad887425eecf5e8384dc2406a4a9313eb73468712fc1cdea362eb4fe0469" +checksum = "fe96480bed92df2b442a1a30df364e12d08eed03aeb061f2b8dc6afb2be91119" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 2.0.119", "zbus_names", "zvariant", "zvariant_utils", @@ -9451,9 +9492,9 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.3.3" +version = "4.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039ca249fee9559680f3a9f05b55e0761fee51af4f6c1e7d8c1f31e549721d2" +checksum = "d8bf88b4a3ff53e883001e0e0115b297a9d53c31b9c1edd2bfdd853e3428624e" dependencies = [ "serde", "winnow", @@ -9462,9 +9503,9 @@ dependencies = [ [[package]] name = "zbus_xml" -version = "5.2.0" +version = "5.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ab0513c0a66a60a8718d5ad712a5094845a20d95b5c1c81e2bd8e904a52b4f" +checksum = "d1586c021a01ca0a9216dcd874e546382e156a5cbab5fab6cb5f10087e22682a" dependencies = [ "serde", "winnow", @@ -9495,7 +9536,7 @@ checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -9515,7 +9556,7 @@ checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "synstructure", ] @@ -9536,7 +9577,7 @@ checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -9571,7 +9612,7 @@ checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -9609,9 +9650,9 @@ checksum = "b142a20ec14a91d5bc708c1dc21b080c550113d8aa77afa29635673a65dd02c5" [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" [[package]] name = "zopfli" @@ -9679,9 +9720,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.13.0" +version = "5.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cf057bb00bf5c9ad77abb6147b0ca4818236a1858416e9d988e40d6322fefa7" +checksum = "bee2a0bcd2a907786a456fff45aaaaf54c9ba5f50b71ae9ec1a4edd200c94911" dependencies = [ "endi", "enumflags2", @@ -9693,14 +9734,14 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.13.0" +version = "5.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8118ca6bda77bfc0ab51d660db0c955f2505eef854c9a449435bccb616933b31" +checksum = "38a708216a18780796770bfe3f4739c7c83a3e8f789b755534bbbc06e4e23e12" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 2.0.119", "zvariant_utils", ] @@ -9713,6 +9754,6 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn", + "syn 2.0.119", "winnow", ] diff --git a/Cargo.toml b/Cargo.toml index 2c4a216..46e7f95 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "gopher64" version = "1.1.34" edition = "2024" -rust-version = "1.97.0" +rust-version = "1.97.1" [features] default = ["gui"] @@ -24,7 +24,7 @@ spin_sleep = "1.3" encoding_rs = "0.8" mimalloc = "0.1" regex = "1.11" -tokio-tungstenite = { version = "0.29", features = ["native-tls-vendored"] } +tokio-tungstenite = { version = "0.30", features = ["native-tls-vendored"] } matchbox_socket = "0.14" ggrs = { version = "0.13", features = ["sync-send"] } rustc-hash = "2.1" diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 398f3f0..7243604 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.97.0" +channel = "1.97.1" From 6bb3487352f1a61bec0dbf62a84e06a640de51a3 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 20 Jul 2026 16:30:23 +0200 Subject: [PATCH 1105/1117] use obfstr (#1168) * use obfstr * more --- Cargo.lock | 7 +++++++ Cargo.toml | 1 + src/ui/netplay.rs | 7 ++++--- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0df73f2..a82fd05 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2799,6 +2799,7 @@ dependencies = [ "jni 0.22.4", "matchbox_socket", "mimalloc", + "obfstr", "open", "postcard", "quick-xml 0.41.0", @@ -4678,6 +4679,12 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "obfstr" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cf5f1acbf6ef57cef9d127e72c4afd01d6b08692616fd09afad7f7807d6eb78" + [[package]] name = "objc-sys" version = "0.3.5" diff --git a/Cargo.toml b/Cargo.toml index 46e7f95..4be9c39 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,6 +37,7 @@ clap = { version = "4.5", features = ["derive"] } reqwest = { version = "0.13", default-features = false, features = ["native-tls-vendored", "charset", "http2", "system-proxy", "json", "query"] } discord-rich-presence = "1.1" quick-xml = "0.41" +obfstr = "0.4" [target.'cfg(not(target_os = "android"))'.dependencies] slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "unstable-winit-030", "backend-winit", "renderer-femtovg-wgpu", "accessibility"], optional = true } diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 3e14dda..300fdb8 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -294,9 +294,10 @@ fn manage_websocket( .unwrap_or("wss://netplay.gopher64.com".to_string()) .into_client_request() .unwrap(); - request - .headers_mut() - .insert("Authorization", env!("NETPLAY_ID").parse().unwrap()); + request.headers_mut().insert( + "Authorization", + obfstr::obfstr!(env!("NETPLAY_ID")).parse().unwrap(), + ); tokio::spawn(async move { match tokio::time::timeout( std::time::Duration::from_secs(3), From bfab42eccd03b07f4f7a8928e67d14348be3b70c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 23 Jul 2026 16:11:01 -0600 Subject: [PATCH 1106/1117] update rcheevos (#1172) --- retroachievements/rcheevos | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/retroachievements/rcheevos b/retroachievements/rcheevos index e9ca369..2ad0b86 160000 --- a/retroachievements/rcheevos +++ b/retroachievements/rcheevos @@ -1 +1 @@ -Subproject commit e9ca3694c862b61235595176dac4b22677848c93 +Subproject commit 2ad0b8672f68a48148620164510b963039e49eb1 From 7b17343c72ea080c73d329d0e7dfbdc9e8206969 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 3 Aug 2026 08:11:57 -0600 Subject: [PATCH 1107/1117] update netplay id (#1171) --- src/ui/netplay.rs | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 300fdb8..89ba1e9 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -3,6 +3,7 @@ use crate::netplay::RtcIceServerConfig; use crate::ui; use crate::ui::gui::{AppWindow, open_uri, run_rom, save_settings}; use futures::{SinkExt, StreamExt}; +use sha2::digest::Digest; use slint::ComponentHandle; use slint::Model; use tokio_tungstenite::tungstenite::Bytes; @@ -294,10 +295,23 @@ fn manage_websocket( .unwrap_or("wss://netplay.gopher64.com".to_string()) .into_client_request() .unwrap(); - request.headers_mut().insert( - "Authorization", - obfstr::obfstr!(env!("NETPLAY_ID")).parse().unwrap(), - ); + + let mut hasher = sha2::Sha256::new(); + let now = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_millis(); + hasher.update(obfstr::obfstr!(env!("NETPLAY_ID"))); + hasher.update(now.to_string()); + let hash: String = hasher + .finalize() + .iter() + .map(|b| format!("{:02X}", b)) + .collect(); + request + .headers_mut() + .insert("Authorization", format!("{hash}_{now}").parse().unwrap()); + tokio::spawn(async move { match tokio::time::timeout( std::time::Duration::from_secs(3), From e9b0915b877781af9559e7830be13a0536a52c3f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 3 Aug 2026 09:43:27 -0600 Subject: [PATCH 1108/1117] add instructions for input profile (#1179) * add instructions for input profile * update translation files * update translations --- data/translations/de/LC_MESSAGES/gopher64.po | 236 ++++++++++-------- data/translations/es/LC_MESSAGES/gopher64.po | 234 +++++++++-------- data/translations/fr/LC_MESSAGES/gopher64.po | 235 +++++++++-------- data/translations/gopher64.pot | 222 ++++++++-------- data/translations/ja/LC_MESSAGES/gopher64.po | 235 +++++++++-------- data/translations/nl/LC_MESSAGES/gopher64.po | 235 +++++++++-------- .../pt_BR/LC_MESSAGES/gopher64.po | 235 +++++++++-------- data/translations/ru/LC_MESSAGES/gopher64.po | 235 +++++++++-------- src/ui/gui/appwindow.slint | 92 ++++--- src/ui/gui/cheat_page.slint | 17 +- src/ui/gui/controller_page.slint | 9 +- src/ui/gui/input_profile.slint | 18 +- src/ui/gui/localgame_page.slint | 11 +- src/ui/gui/netplay_create.slint | 13 +- src/ui/gui/netplay_join.slint | 22 +- src/ui/gui/netplay_page.slint | 8 +- src/ui/gui/netplay_wait.slint | 15 +- src/ui/gui/pages.slint | 14 +- src/ui/gui/retroachievements_page.slint | 21 +- src/ui/gui/settings_page.slint | 12 +- src/ui/gui/side_bar.slint | 29 +-- 21 files changed, 1220 insertions(+), 928 deletions(-) diff --git a/data/translations/de/LC_MESSAGES/gopher64.po b/data/translations/de/LC_MESSAGES/gopher64.po index 1f9c3ca..0dbef4d 100644 --- a/data/translations/de/LC_MESSAGES/gopher64.po +++ b/data/translations/de/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-30 09:43+0000\n" +"POT-Creation-Date: 2026-08-03 15:22+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: German\n" @@ -47,187 +47,211 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Spenden (über GitHub)" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:177 msgctxt "Menu" msgid "Local Game" msgstr "Lokales Spiel" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:181 msgctxt "Menu" msgid "Controller Config" msgstr "Controller-Konfiguration" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:185 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:176 +#: src/ui/gui/appwindow.slint:189 msgctxt "Menu" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/appwindow.slint:180 +#: src/ui/gui/appwindow.slint:193 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:184 +#: src/ui/gui/appwindow.slint:197 msgctxt "Menu" msgid "Settings" msgstr "Einstellungen" -#: src/ui/gui/appwindow.slint:188 +#: src/ui/gui/appwindow.slint:201 msgctxt "Menu" msgid "About" msgstr "Über" -#: src/ui/gui/cheat_page.slint:15 +#: src/ui/gui/cheat_page.slint:28 msgctxt "Cheats" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/cheat_page.slint:25 +#: src/ui/gui/cheat_page.slint:38 msgctxt "Cheats" msgid "Select ROM" msgstr "ROM auswählen" -#: src/ui/gui/cheat_page.slint:41 +#: src/ui/gui/cheat_page.slint:54 msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Cheats für alle ROMs löschen" -#: src/ui/gui/cheat_page.slint:83 +#: src/ui/gui/cheat_page.slint:96 msgctxt "Cheats" msgid "No Cheats Available" msgstr "Keine Cheats verfügbar" -#: src/ui/gui/controller_page.slint:80 +#: src/ui/gui/controller_page.slint:87 msgctxt "ControllerSettingsGrid" msgid "Enabled" msgstr "Aktiviert" -#: src/ui/gui/controller_page.slint:93 +#: src/ui/gui/controller_page.slint:100 msgctxt "ControllerSettingsGrid" msgid "Transfer Pak" msgstr "Transfer Pak" -#: src/ui/gui/controller_page.slint:107 +#: src/ui/gui/controller_page.slint:114 msgctxt "ControllerSettingsGrid" msgid "Profile" msgstr "Profil" -#: src/ui/gui/controller_page.slint:157 +#: src/ui/gui/controller_page.slint:164 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Controller-Konfiguration" -#: src/ui/gui/controller_page.slint:171 +#: src/ui/gui/controller_page.slint:178 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Eingabeprofil konfigurieren" -#: src/ui/gui/controller_page.slint:180 +#: src/ui/gui/controller_page.slint:187 msgctxt "ControllerConfig" msgid "Controller Settings" msgstr "Controller-Einstellungen" -#: src/ui/gui/controller_page.slint:190 +#: src/ui/gui/controller_page.slint:197 msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "Controller-Zuweisung" -#: src/ui/gui/input_profile.slint:12 +#: src/ui/gui/input_profile.slint:19 msgctxt "InputProfileDialog" msgid "Create/Modify Input Profile" msgstr "Eingabeprofil erstellen/bearbeiten" -#: src/ui/gui/input_profile.slint:25 +#: src/ui/gui/input_profile.slint:32 msgctxt "InputProfileDialog" msgid "Enter profile name to create or modify" msgstr "Profilname zum Erstellen oder Bearbeiten eingeben" -#: src/ui/gui/input_profile.slint:38 +#: src/ui/gui/input_profile.slint:45 msgctxt "InputProfileDialog" msgid "Deadzone Percentage" msgstr "Deadzone Größe in Prozent" -#: src/ui/gui/input_profile.slint:61 +#: src/ui/gui/input_profile.slint:68 msgctxt "InputProfileDialog" msgid "Use DirectInput" msgstr "DirectInput verwenden" -#: src/ui/gui/input_profile.slint:74 +#: src/ui/gui/input_profile.slint:81 msgctxt "InputProfileDialog" msgid "Start Profile Creation Wizard" msgstr "Assistent zur Profilerstellung starten" -#: src/ui/gui/input_profile.slint:82 +#: src/ui/gui/input_profile.slint:90 msgctxt "InputProfileDialog" msgid "Cancel" msgstr "Abbrechen" -#: src/ui/gui/localgame_page.slint:19 +#: src/ui/gui/input_profile.slint:101 +msgctxt "InputProfileDialog" +msgid "" +"When using DirectInput and/or keyboard, navigate the dialog using the arrow " +"keys.\n" +"Press Enter to begin binding a button/axis.\n" +"Press Delete to remove a binding.\n" +"\n" +"When using a PlayStation-style controller, navigate the dialog using the D-" +"pad.\n" +"Press the South/East button to begin binding a button/axis.\n" +"Press the North/West button to remove a binding." +msgstr "" +"Bei Verwendung von DirectInput und/oder Tastatur navigieren Sie im Dialog " +"mit den Pfeiltasten.\n" +"Drücken Sie Enter, um die Belegung einer Taste/Achse zu starten.\n" +"Drücken Sie Entf, um eine Belegung zu entfernen.\n" +"\n" +"Bei Verwendung eines Controllers im PlayStation-Stil navigieren Sie im " +"Dialog mit dem Steuerkreuz.\n" +"Drücken Sie die Süd-/Ost-Taste, um die Belegung einer Taste/Achse zu " +"starten.\n" +"Drücken Sie die Nord-/West-Taste, um eine Belegung zu entfernen." + +#: src/ui/gui/localgame_page.slint:24 msgctxt "LocalGame" msgid "Local Game" msgstr "Lokales Spiel" -#: src/ui/gui/localgame_page.slint:26 +#: src/ui/gui/localgame_page.slint:31 msgctxt "LocalGame" msgid "Open ROM" msgstr "ROM öffnen" -#: src/ui/gui/localgame_page.slint:37 +#: src/ui/gui/localgame_page.slint:42 msgctxt "LocalGame" msgid "Open Saves Folder" msgstr "Speicherordner öffnen" -#: src/ui/gui/localgame_page.slint:54 +#: src/ui/gui/localgame_page.slint:59 msgctxt "LocalGame" msgid "Recent ROMs" msgstr "Zuletzt verwendete ROMs" -#: src/ui/gui/netplay_create.slint:7 +#: src/ui/gui/netplay_create.slint:16 msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "Netplay: Sitzung erstellen" -#: src/ui/gui/netplay_create.slint:22 +#: src/ui/gui/netplay_create.slint:31 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "Sitzungsname:" -#: src/ui/gui/netplay_create.slint:26 +#: src/ui/gui/netplay_create.slint:35 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "Sitzungsname eingeben" -#: src/ui/gui/netplay_create.slint:36 +#: src/ui/gui/netplay_create.slint:45 msgctxt "NetplayCreate" msgid "Password (Optional):" msgstr "Passwort (optional):" -#: src/ui/gui/netplay_create.slint:40 +#: src/ui/gui/netplay_create.slint:49 msgctxt "NetplayCreate" msgid "Enter session password" msgstr "Sitzungspasswort eingeben" -#: src/ui/gui/netplay_create.slint:51 +#: src/ui/gui/netplay_create.slint:60 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "Spielername:" -#: src/ui/gui/netplay_create.slint:55 +#: src/ui/gui/netplay_create.slint:64 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "Spielername eingeben" -#: src/ui/gui/netplay_create.slint:66 +#: src/ui/gui/netplay_create.slint:75 msgctxt "NetplayCreate" msgid "Select ROM" msgstr "ROM auswählen" -#: src/ui/gui/netplay_create.slint:82 +#: src/ui/gui/netplay_create.slint:91 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." @@ -235,162 +259,162 @@ msgstr "" "Für dieses Spiel sind Cheats aktiviert. Cheats werden mit anderen Spielern " "synchronisiert." -#: src/ui/gui/netplay_create.slint:91 +#: src/ui/gui/netplay_create.slint:100 msgctxt "NetplayCreate" msgid "Create Session" msgstr "Sitzung erstellen" -#: src/ui/gui/netplay_create.slint:107 +#: src/ui/gui/netplay_create.slint:117 msgctxt "NetplayCreate" msgid "Cancel" msgstr "Abbrechen" -#: src/ui/gui/netplay_join.slint:7 +#: src/ui/gui/netplay_join.slint:15 msgctxt "NetplayJoin" msgid "Netplay: Join Session" msgstr "Netplay: Sitzung beitreten" -#: src/ui/gui/netplay_join.slint:18 +#: src/ui/gui/netplay_join.slint:26 msgctxt "NetplayJoin" msgid "Player Name (required):" msgstr "Spielername (erforderlich):" -#: src/ui/gui/netplay_join.slint:22 +#: src/ui/gui/netplay_join.slint:30 msgctxt "NetplayJoin" msgid "Enter player name" msgstr "Spielername eingeben" -#: src/ui/gui/netplay_join.slint:31 +#: src/ui/gui/netplay_join.slint:39 msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "Passwort (falls erforderlich)" -#: src/ui/gui/netplay_join.slint:42 +#: src/ui/gui/netplay_join.slint:51 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "ROM auswählen" -#: src/ui/gui/netplay_join.slint:57 +#: src/ui/gui/netplay_join.slint:66 msgctxt "NetplayJoin" msgid "Refreshing session list, please wait..." msgstr "Sitzungsliste wird aktualisiert, bitte warten …" -#: src/ui/gui/netplay_join.slint:62 +#: src/ui/gui/netplay_join.slint:71 msgctxt "NetplayJoin" msgid "Click on a session below to select it" msgstr "Auf eine Sitzung klicken um diese auszuwählen" -#: src/ui/gui/netplay_join.slint:67 +#: src/ui/gui/netplay_join.slint:76 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." msgstr "Keine Sitzungen verfügbar. Bitte aktualisieren, um erneut zu prüfen." -#: src/ui/gui/netplay_join.slint:73 +#: src/ui/gui/netplay_join.slint:82 msgctxt "NetplayJoin" msgid "Session Name" msgstr "Sitzungsname" -#: src/ui/gui/netplay_join.slint:74 +#: src/ui/gui/netplay_join.slint:83 msgctxt "NetplayJoin" msgid "Game Name" msgstr "Spielname" -#: src/ui/gui/netplay_join.slint:75 +#: src/ui/gui/netplay_join.slint:84 msgctxt "NetplayJoin" msgid "Password" msgstr "Passwort" -#: src/ui/gui/netplay_join.slint:76 +#: src/ui/gui/netplay_join.slint:85 msgctxt "NetplayJoin" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/netplay_join.slint:90 +#: src/ui/gui/netplay_join.slint:99 msgctxt "NetplayJoin" msgid "Refresh Session List" msgstr "Sitzungsliste aktualisieren" -#: src/ui/gui/netplay_join.slint:105 +#: src/ui/gui/netplay_join.slint:114 msgctxt "NetplayJoin" msgid "Join Session" msgstr "Sitzung beitreten" -#: src/ui/gui/netplay_join.slint:117 +#: src/ui/gui/netplay_join.slint:127 msgctxt "NetplayJoin" msgid "Cancel" msgstr "Abbrechen" -#: src/ui/gui/netplay_page.slint:31 +#: src/ui/gui/netplay_page.slint:37 msgctxt "Netplay" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/netplay_page.slint:39 +#: src/ui/gui/netplay_page.slint:45 msgctxt "Netplay" msgid "Create Session" msgstr "Sitzung erstellen" -#: src/ui/gui/netplay_page.slint:50 +#: src/ui/gui/netplay_page.slint:56 msgctxt "Netplay" msgid "Join Session" msgstr "Sitzung beitreten" -#: src/ui/gui/netplay_page.slint:64 +#: src/ui/gui/netplay_page.slint:70 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "Netplay-Discord-Kanal" -#: src/ui/gui/netplay_page.slint:71 +#: src/ui/gui/netplay_page.slint:77 msgctxt "Netplay" msgid "Provide Feedback" msgstr "Feedback geben" -#: src/ui/gui/netplay_wait.slint:17 +#: src/ui/gui/netplay_wait.slint:27 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay: Warteraum" -#: src/ui/gui/netplay_wait.slint:29 +#: src/ui/gui/netplay_wait.slint:39 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Sitzungsname:" -#: src/ui/gui/netplay_wait.slint:35 +#: src/ui/gui/netplay_wait.slint:45 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Spielname:" -#: src/ui/gui/netplay_wait.slint:45 +#: src/ui/gui/netplay_wait.slint:55 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Spieler 1:" -#: src/ui/gui/netplay_wait.slint:49 +#: src/ui/gui/netplay_wait.slint:59 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Spieler 2:" -#: src/ui/gui/netplay_wait.slint:55 +#: src/ui/gui/netplay_wait.slint:65 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Spieler 3:" -#: src/ui/gui/netplay_wait.slint:59 +#: src/ui/gui/netplay_wait.slint:69 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Spieler 4:" -#: src/ui/gui/netplay_wait.slint:73 +#: src/ui/gui/netplay_wait.slint:83 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Chatnachricht eingeben" -#: src/ui/gui/netplay_wait.slint:84 +#: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "Send Message" msgstr "Nachricht senden" -#: src/ui/gui/netplay_wait.slint:94 +#: src/ui/gui/netplay_wait.slint:104 msgctxt "NetplayWait" msgid "" "Setting the input delay too low will cause the game to lag.\n" @@ -401,182 +425,182 @@ msgstr "" "Sie können die Eingabeverzögerung im Spiel mit Alt+[ verringern und mit " "Alt+] erhöhen." -#: src/ui/gui/netplay_wait.slint:101 +#: src/ui/gui/netplay_wait.slint:112 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Lokale Eingabeverzögerung:" -#: src/ui/gui/netplay_wait.slint:118 +#: src/ui/gui/netplay_wait.slint:129 msgctxt "NetplayWait" msgid "Recommended: " msgstr "Empfohlen: " -#: src/ui/gui/netplay_wait.slint:127 +#: src/ui/gui/netplay_wait.slint:138 msgctxt "NetplayWait" msgid "Start Game" msgstr "Spiel starten" -#: src/ui/gui/netplay_wait.slint:127 +#: src/ui/gui/netplay_wait.slint:138 msgctxt "NetplayWait" msgid "Waiting for P2P mesh " msgstr "Warten auf P2P-Mesh " -#: src/ui/gui/netplay_wait.slint:135 +#: src/ui/gui/netplay_wait.slint:147 msgctxt "NetplayWait" msgid "Cancel" msgstr "Abbrechen" -#: src/ui/gui/retroachievements_page.slint:19 +#: src/ui/gui/retroachievements_page.slint:25 msgctxt "RAData" msgid "Not currently logged in" msgstr "Derzeit nicht angemeldet" -#: src/ui/gui/retroachievements_page.slint:27 +#: src/ui/gui/retroachievements_page.slint:33 msgctxt "RetroAchievements" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/retroachievements_page.slint:36 +#: src/ui/gui/retroachievements_page.slint:42 msgctxt "RetroAchievements" msgid "Enabled" msgstr "Aktiviert" -#: src/ui/gui/retroachievements_page.slint:51 +#: src/ui/gui/retroachievements_page.slint:58 msgctxt "RetroAchievements" msgid "Hardcore mode" msgstr "Hardcore-Modus" -#: src/ui/gui/retroachievements_page.slint:60 +#: src/ui/gui/retroachievements_page.slint:67 msgctxt "RetroAchievements" msgid "Challenge Indicators" msgstr "Challenge Tipps" -#: src/ui/gui/retroachievements_page.slint:69 +#: src/ui/gui/retroachievements_page.slint:77 msgctxt "RetroAchievements" msgid "Leaderboard Trackers" msgstr "Bestenlisten-Tracker" -#: src/ui/gui/retroachievements_page.slint:78 +#: src/ui/gui/retroachievements_page.slint:87 msgctxt "RetroAchievements" msgid "Discord Rich Presence" msgstr "Rich Presence für Discord" -#: src/ui/gui/retroachievements_page.slint:96 +#: src/ui/gui/retroachievements_page.slint:107 msgctxt "RetroAchievements" msgid "View Profile" msgstr "Profil anzeigen" -#: src/ui/gui/retroachievements_page.slint:106 +#: src/ui/gui/retroachievements_page.slint:118 msgctxt "RetroAchievements" msgid "Username" msgstr "Benutzername" -#: src/ui/gui/retroachievements_page.slint:116 +#: src/ui/gui/retroachievements_page.slint:128 msgctxt "RetroAchievements" msgid "Password" msgstr "Passwort" -#: src/ui/gui/retroachievements_page.slint:125 +#: src/ui/gui/retroachievements_page.slint:138 msgctxt "RetroAchievements" msgid "Login" msgstr "Anmelden" -#: src/ui/gui/retroachievements_page.slint:141 +#: src/ui/gui/retroachievements_page.slint:156 msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Unterstützte Spiele anzeigen" -#: src/ui/gui/settings_page.slint:25 +#: src/ui/gui/settings_page.slint:31 msgctxt "Settings" msgid "Settings" msgstr "Einstellungen" -#: src/ui/gui/settings_page.slint:32 +#: src/ui/gui/settings_page.slint:38 msgctxt "Settings" msgid "Game" msgstr "Spiel" -#: src/ui/gui/settings_page.slint:38 +#: src/ui/gui/settings_page.slint:44 msgctxt "Settings" msgid "Resolution:" msgstr "Auflösung:" -#: src/ui/gui/settings_page.slint:51 +#: src/ui/gui/settings_page.slint:58 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAA-Herunterskalierung" -#: src/ui/gui/settings_page.slint:59 +#: src/ui/gui/settings_page.slint:66 msgctxt "Settings" msgid "Integer Scaling" msgstr "Pixelgenaue Skalierung" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:74 msgctxt "Settings" msgid "Fullscreen" msgstr "Vollbild" -#: src/ui/gui/settings_page.slint:75 +#: src/ui/gui/settings_page.slint:82 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "16:9 (gestreckt)" -#: src/ui/gui/settings_page.slint:83 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "VSync" -#: src/ui/gui/settings_page.slint:91 +#: src/ui/gui/settings_page.slint:98 msgctxt "Settings" msgid "Apply CRT shader" msgstr "CRT-Shader anwenden" -#: src/ui/gui/settings_page.slint:103 +#: src/ui/gui/settings_page.slint:110 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "N64-CPU übertakten (kann Fehler verursachen)" -#: src/ui/gui/settings_page.slint:111 +#: src/ui/gui/settings_page.slint:118 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Expansion Pak deaktivieren" -#: src/ui/gui/settings_page.slint:119 +#: src/ui/gui/settings_page.slint:126 msgctxt "Settings" msgid "Enable Rewind" msgstr "Rewind aktivieren" -#: src/ui/gui/settings_page.slint:127 +#: src/ui/gui/settings_page.slint:134 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "UNFLoader emulieren" -#: src/ui/gui/settings_page.slint:135 +#: src/ui/gui/settings_page.slint:142 msgctxt "Settings" msgid "Emulate VRU" msgstr "VRU emulieren" -#: src/ui/gui/settings_page.slint:144 +#: src/ui/gui/settings_page.slint:152 msgctxt "Settings" msgid "UI" msgstr "Benutzeroberfläche" -#: src/ui/gui/settings_page.slint:150 +#: src/ui/gui/settings_page.slint:158 msgctxt "Settings" msgid "Theme:" msgstr "Thema:" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "System" msgstr "System" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "Dark" msgstr "Dunkel" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "Light" msgstr "Hell" diff --git a/data/translations/es/LC_MESSAGES/gopher64.po b/data/translations/es/LC_MESSAGES/gopher64.po index bdced2e..f412438 100644 --- a/data/translations/es/LC_MESSAGES/gopher64.po +++ b/data/translations/es/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-30 09:43+0000\n" +"POT-Creation-Date: 2026-08-03 15:22+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: Gemini\n" "Language-Team: Spanish (Spain)\n" @@ -47,187 +47,209 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Donar (a través de GitHub)" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:177 msgctxt "Menu" msgid "Local Game" msgstr "Juego local" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:181 msgctxt "Menu" msgid "Controller Config" msgstr "Config. del mando" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:185 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:176 +#: src/ui/gui/appwindow.slint:189 msgctxt "Menu" msgid "Cheats" msgstr "Trucos" -#: src/ui/gui/appwindow.slint:180 +#: src/ui/gui/appwindow.slint:193 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:184 +#: src/ui/gui/appwindow.slint:197 msgctxt "Menu" msgid "Settings" msgstr "Ajustes" -#: src/ui/gui/appwindow.slint:188 +#: src/ui/gui/appwindow.slint:201 msgctxt "Menu" msgid "About" msgstr "Acerca de" -#: src/ui/gui/cheat_page.slint:15 +#: src/ui/gui/cheat_page.slint:28 msgctxt "Cheats" msgid "Cheats" msgstr "Trucos" -#: src/ui/gui/cheat_page.slint:25 +#: src/ui/gui/cheat_page.slint:38 msgctxt "Cheats" msgid "Select ROM" msgstr "Seleccionar ROM" -#: src/ui/gui/cheat_page.slint:41 +#: src/ui/gui/cheat_page.slint:54 msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Borrar trucos de todas las ROMs" -#: src/ui/gui/cheat_page.slint:83 +#: src/ui/gui/cheat_page.slint:96 msgctxt "Cheats" msgid "No Cheats Available" msgstr "No hay trucos disponibles" -#: src/ui/gui/controller_page.slint:80 +#: src/ui/gui/controller_page.slint:87 msgctxt "ControllerSettingsGrid" msgid "Enabled" msgstr "Activado" -#: src/ui/gui/controller_page.slint:93 +#: src/ui/gui/controller_page.slint:100 msgctxt "ControllerSettingsGrid" msgid "Transfer Pak" msgstr "Transfer Pak" -#: src/ui/gui/controller_page.slint:107 +#: src/ui/gui/controller_page.slint:114 msgctxt "ControllerSettingsGrid" msgid "Profile" msgstr "Perfil" -#: src/ui/gui/controller_page.slint:157 +#: src/ui/gui/controller_page.slint:164 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Configuración del mando" -#: src/ui/gui/controller_page.slint:171 +#: src/ui/gui/controller_page.slint:178 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Configurar perfil de entrada" -#: src/ui/gui/controller_page.slint:180 +#: src/ui/gui/controller_page.slint:187 msgctxt "ControllerConfig" msgid "Controller Settings" msgstr "Ajustes del mando" -#: src/ui/gui/controller_page.slint:190 +#: src/ui/gui/controller_page.slint:197 msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "Asignación del mando" -#: src/ui/gui/input_profile.slint:12 +#: src/ui/gui/input_profile.slint:19 msgctxt "InputProfileDialog" msgid "Create/Modify Input Profile" msgstr "Crear/Modificar perfil de entrada" -#: src/ui/gui/input_profile.slint:25 +#: src/ui/gui/input_profile.slint:32 msgctxt "InputProfileDialog" msgid "Enter profile name to create or modify" msgstr "Introduce el nombre del perfil para crear o modificar" -#: src/ui/gui/input_profile.slint:38 +#: src/ui/gui/input_profile.slint:45 msgctxt "InputProfileDialog" msgid "Deadzone Percentage" msgstr "Porcentaje de zona muerta" -#: src/ui/gui/input_profile.slint:61 +#: src/ui/gui/input_profile.slint:68 msgctxt "InputProfileDialog" msgid "Use DirectInput" msgstr "Usar DirectInput" -#: src/ui/gui/input_profile.slint:74 +#: src/ui/gui/input_profile.slint:81 msgctxt "InputProfileDialog" msgid "Start Profile Creation Wizard" msgstr "Iniciar asistente de creación de perfil" -#: src/ui/gui/input_profile.slint:82 +#: src/ui/gui/input_profile.slint:90 msgctxt "InputProfileDialog" msgid "Cancel" msgstr "Cancelar" -#: src/ui/gui/localgame_page.slint:19 +#: src/ui/gui/input_profile.slint:101 +msgctxt "InputProfileDialog" +msgid "" +"When using DirectInput and/or keyboard, navigate the dialog using the arrow " +"keys.\n" +"Press Enter to begin binding a button/axis.\n" +"Press Delete to remove a binding.\n" +"\n" +"When using a PlayStation-style controller, navigate the dialog using the D-" +"pad.\n" +"Press the South/East button to begin binding a button/axis.\n" +"Press the North/West button to remove a binding." +msgstr "" +"Al usar DirectInput y/o el teclado, navegue por el diálogo con las teclas de " +"flecha.\n" +"Pulse Intro para empezar a asignar un botón/eje.\n" +"Pulse Suprimir para quitar una asignación.\n" +"\n" +"Al usar un mando estilo PlayStation, navegue por el diálogo con la cruceta.\n" +"Pulse el botón Sur/Este para empezar a asignar un botón/eje.\n" +"Pulse el botón Norte/Oeste para quitar una asignación." + +#: src/ui/gui/localgame_page.slint:24 msgctxt "LocalGame" msgid "Local Game" msgstr "Juego local" -#: src/ui/gui/localgame_page.slint:26 +#: src/ui/gui/localgame_page.slint:31 msgctxt "LocalGame" msgid "Open ROM" msgstr "Abrir ROM" -#: src/ui/gui/localgame_page.slint:37 +#: src/ui/gui/localgame_page.slint:42 msgctxt "LocalGame" msgid "Open Saves Folder" msgstr "Abrir carpeta de guardados" -#: src/ui/gui/localgame_page.slint:54 +#: src/ui/gui/localgame_page.slint:59 msgctxt "LocalGame" msgid "Recent ROMs" msgstr "ROMs recientes" -#: src/ui/gui/netplay_create.slint:7 +#: src/ui/gui/netplay_create.slint:16 msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "Netplay: Crear sesión" -#: src/ui/gui/netplay_create.slint:22 +#: src/ui/gui/netplay_create.slint:31 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "Nombre de la sesión:" -#: src/ui/gui/netplay_create.slint:26 +#: src/ui/gui/netplay_create.slint:35 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "Introduce el nombre de la sesión" -#: src/ui/gui/netplay_create.slint:36 +#: src/ui/gui/netplay_create.slint:45 msgctxt "NetplayCreate" msgid "Password (Optional):" msgstr "Contraseña (Opcional):" -#: src/ui/gui/netplay_create.slint:40 +#: src/ui/gui/netplay_create.slint:49 msgctxt "NetplayCreate" msgid "Enter session password" msgstr "Introduce la contraseña" -#: src/ui/gui/netplay_create.slint:51 +#: src/ui/gui/netplay_create.slint:60 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "Nombre del jugador:" -#: src/ui/gui/netplay_create.slint:55 +#: src/ui/gui/netplay_create.slint:64 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "Introduce tu nombre" -#: src/ui/gui/netplay_create.slint:66 +#: src/ui/gui/netplay_create.slint:75 msgctxt "NetplayCreate" msgid "Select ROM" msgstr "Seleccionar ROM" -#: src/ui/gui/netplay_create.slint:82 +#: src/ui/gui/netplay_create.slint:91 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." @@ -235,162 +257,162 @@ msgstr "" "Este juego tiene trucos activados. Los trucos se sincronizarán con los otros " "jugadores." -#: src/ui/gui/netplay_create.slint:91 +#: src/ui/gui/netplay_create.slint:100 msgctxt "NetplayCreate" msgid "Create Session" msgstr "Crear sesión" -#: src/ui/gui/netplay_create.slint:107 +#: src/ui/gui/netplay_create.slint:117 msgctxt "NetplayCreate" msgid "Cancel" msgstr "Cancelar" -#: src/ui/gui/netplay_join.slint:7 +#: src/ui/gui/netplay_join.slint:15 msgctxt "NetplayJoin" msgid "Netplay: Join Session" msgstr "Netplay: Unirse a la sesión" -#: src/ui/gui/netplay_join.slint:18 +#: src/ui/gui/netplay_join.slint:26 msgctxt "NetplayJoin" msgid "Player Name (required):" msgstr "Nombre de jugador (requerido):" -#: src/ui/gui/netplay_join.slint:22 +#: src/ui/gui/netplay_join.slint:30 msgctxt "NetplayJoin" msgid "Enter player name" msgstr "Introduce tu nombre" -#: src/ui/gui/netplay_join.slint:31 +#: src/ui/gui/netplay_join.slint:39 msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "Contraseña (si es necesaria)" -#: src/ui/gui/netplay_join.slint:42 +#: src/ui/gui/netplay_join.slint:51 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "Seleccionar ROM" -#: src/ui/gui/netplay_join.slint:57 +#: src/ui/gui/netplay_join.slint:66 msgctxt "NetplayJoin" msgid "Refreshing session list, please wait..." msgstr "Actualizando lista de sesiones, espera..." -#: src/ui/gui/netplay_join.slint:62 +#: src/ui/gui/netplay_join.slint:71 msgctxt "NetplayJoin" msgid "Click on a session below to select it" msgstr "Pulsa una sesión para seleccionarla" -#: src/ui/gui/netplay_join.slint:67 +#: src/ui/gui/netplay_join.slint:76 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." msgstr "No hay sesiones disponibles. Actualiza para comprobar de nuevo." -#: src/ui/gui/netplay_join.slint:73 +#: src/ui/gui/netplay_join.slint:82 msgctxt "NetplayJoin" msgid "Session Name" msgstr "Nombre de la sesión" -#: src/ui/gui/netplay_join.slint:74 +#: src/ui/gui/netplay_join.slint:83 msgctxt "NetplayJoin" msgid "Game Name" msgstr "Nombre del juego" -#: src/ui/gui/netplay_join.slint:75 +#: src/ui/gui/netplay_join.slint:84 msgctxt "NetplayJoin" msgid "Password" msgstr "Contraseña" -#: src/ui/gui/netplay_join.slint:76 +#: src/ui/gui/netplay_join.slint:85 msgctxt "NetplayJoin" msgid "Cheats" msgstr "Trucos" -#: src/ui/gui/netplay_join.slint:90 +#: src/ui/gui/netplay_join.slint:99 msgctxt "NetplayJoin" msgid "Refresh Session List" msgstr "Actualizar lista" -#: src/ui/gui/netplay_join.slint:105 +#: src/ui/gui/netplay_join.slint:114 msgctxt "NetplayJoin" msgid "Join Session" msgstr "Unirse a la sesión" -#: src/ui/gui/netplay_join.slint:117 +#: src/ui/gui/netplay_join.slint:127 msgctxt "NetplayJoin" msgid "Cancel" msgstr "Cancelar" -#: src/ui/gui/netplay_page.slint:31 +#: src/ui/gui/netplay_page.slint:37 msgctxt "Netplay" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/netplay_page.slint:39 +#: src/ui/gui/netplay_page.slint:45 msgctxt "Netplay" msgid "Create Session" msgstr "Crear sesión" -#: src/ui/gui/netplay_page.slint:50 +#: src/ui/gui/netplay_page.slint:56 msgctxt "Netplay" msgid "Join Session" msgstr "Unirse a la sesión" -#: src/ui/gui/netplay_page.slint:64 +#: src/ui/gui/netplay_page.slint:70 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "Canal de Discord de Netplay" -#: src/ui/gui/netplay_page.slint:71 +#: src/ui/gui/netplay_page.slint:77 msgctxt "Netplay" msgid "Provide Feedback" msgstr "Enviar comentarios" -#: src/ui/gui/netplay_wait.slint:17 +#: src/ui/gui/netplay_wait.slint:27 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay: Sala de espera" -#: src/ui/gui/netplay_wait.slint:29 +#: src/ui/gui/netplay_wait.slint:39 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Nombre de la sesión:" -#: src/ui/gui/netplay_wait.slint:35 +#: src/ui/gui/netplay_wait.slint:45 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Nombre del juego:" -#: src/ui/gui/netplay_wait.slint:45 +#: src/ui/gui/netplay_wait.slint:55 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Jugador 1:" -#: src/ui/gui/netplay_wait.slint:49 +#: src/ui/gui/netplay_wait.slint:59 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Jugador 2:" -#: src/ui/gui/netplay_wait.slint:55 +#: src/ui/gui/netplay_wait.slint:65 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Jugador 3:" -#: src/ui/gui/netplay_wait.slint:59 +#: src/ui/gui/netplay_wait.slint:69 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Jugador 4:" -#: src/ui/gui/netplay_wait.slint:73 +#: src/ui/gui/netplay_wait.slint:83 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Escribe un mensaje en el chat" -#: src/ui/gui/netplay_wait.slint:84 +#: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "Send Message" msgstr "Enviar mensaje" -#: src/ui/gui/netplay_wait.slint:94 +#: src/ui/gui/netplay_wait.slint:104 msgctxt "NetplayWait" msgid "" "Setting the input delay too low will cause the game to lag.\n" @@ -402,182 +424,182 @@ msgstr "" "Puedes reducir el retardo de entrada en el juego pulsando Alt+[ y aumentarlo " "con Alt+]." -#: src/ui/gui/netplay_wait.slint:101 +#: src/ui/gui/netplay_wait.slint:112 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Retardo de entrada local:" -#: src/ui/gui/netplay_wait.slint:118 +#: src/ui/gui/netplay_wait.slint:129 msgctxt "NetplayWait" msgid "Recommended: " msgstr "Recomendado: " -#: src/ui/gui/netplay_wait.slint:127 +#: src/ui/gui/netplay_wait.slint:138 msgctxt "NetplayWait" msgid "Start Game" msgstr "Iniciar juego" -#: src/ui/gui/netplay_wait.slint:127 +#: src/ui/gui/netplay_wait.slint:138 msgctxt "NetplayWait" msgid "Waiting for P2P mesh " msgstr "Esperando malla P2P " -#: src/ui/gui/netplay_wait.slint:135 +#: src/ui/gui/netplay_wait.slint:147 msgctxt "NetplayWait" msgid "Cancel" msgstr "Cancelar" -#: src/ui/gui/retroachievements_page.slint:19 +#: src/ui/gui/retroachievements_page.slint:25 msgctxt "RAData" msgid "Not currently logged in" msgstr "Sesión no iniciada" -#: src/ui/gui/retroachievements_page.slint:27 +#: src/ui/gui/retroachievements_page.slint:33 msgctxt "RetroAchievements" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/retroachievements_page.slint:36 +#: src/ui/gui/retroachievements_page.slint:42 msgctxt "RetroAchievements" msgid "Enabled" msgstr "Activado" -#: src/ui/gui/retroachievements_page.slint:51 +#: src/ui/gui/retroachievements_page.slint:58 msgctxt "RetroAchievements" msgid "Hardcore mode" msgstr "Modo Hardcore" -#: src/ui/gui/retroachievements_page.slint:60 +#: src/ui/gui/retroachievements_page.slint:67 msgctxt "RetroAchievements" msgid "Challenge Indicators" msgstr "Indicadores de desafío" -#: src/ui/gui/retroachievements_page.slint:69 +#: src/ui/gui/retroachievements_page.slint:77 msgctxt "RetroAchievements" msgid "Leaderboard Trackers" msgstr "Indicadores de tabla de clasificación" -#: src/ui/gui/retroachievements_page.slint:78 +#: src/ui/gui/retroachievements_page.slint:87 msgctxt "RetroAchievements" msgid "Discord Rich Presence" msgstr "Rich Presence en Discord" -#: src/ui/gui/retroachievements_page.slint:96 +#: src/ui/gui/retroachievements_page.slint:107 msgctxt "RetroAchievements" msgid "View Profile" msgstr "Ver perfil" -#: src/ui/gui/retroachievements_page.slint:106 +#: src/ui/gui/retroachievements_page.slint:118 msgctxt "RetroAchievements" msgid "Username" msgstr "Usuario" -#: src/ui/gui/retroachievements_page.slint:116 +#: src/ui/gui/retroachievements_page.slint:128 msgctxt "RetroAchievements" msgid "Password" msgstr "Contraseña" -#: src/ui/gui/retroachievements_page.slint:125 +#: src/ui/gui/retroachievements_page.slint:138 msgctxt "RetroAchievements" msgid "Login" msgstr "Entrar" -#: src/ui/gui/retroachievements_page.slint:141 +#: src/ui/gui/retroachievements_page.slint:156 msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Ver juegos compatibles" -#: src/ui/gui/settings_page.slint:25 +#: src/ui/gui/settings_page.slint:31 msgctxt "Settings" msgid "Settings" msgstr "Ajustes" -#: src/ui/gui/settings_page.slint:32 +#: src/ui/gui/settings_page.slint:38 msgctxt "Settings" msgid "Game" msgstr "Juego" -#: src/ui/gui/settings_page.slint:38 +#: src/ui/gui/settings_page.slint:44 msgctxt "Settings" msgid "Resolution:" msgstr "Resolución:" -#: src/ui/gui/settings_page.slint:51 +#: src/ui/gui/settings_page.slint:58 msgctxt "Settings" msgid "SSAA downscaling" msgstr "Reducción de escala SSAA" -#: src/ui/gui/settings_page.slint:59 +#: src/ui/gui/settings_page.slint:66 msgctxt "Settings" msgid "Integer Scaling" msgstr "Escalado por enteros" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:74 msgctxt "Settings" msgid "Fullscreen" msgstr "Pantalla completa" -#: src/ui/gui/settings_page.slint:75 +#: src/ui/gui/settings_page.slint:82 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Pantalla ancha (estirado)" -#: src/ui/gui/settings_page.slint:83 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "Sincronización vertical (VSync)" -#: src/ui/gui/settings_page.slint:91 +#: src/ui/gui/settings_page.slint:98 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Aplicar sombreador CRT" -#: src/ui/gui/settings_page.slint:103 +#: src/ui/gui/settings_page.slint:110 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Overclock CPU N64 (puede causar errores)" -#: src/ui/gui/settings_page.slint:111 +#: src/ui/gui/settings_page.slint:118 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Desactivar Expansion Pak" -#: src/ui/gui/settings_page.slint:119 +#: src/ui/gui/settings_page.slint:126 msgctxt "Settings" msgid "Enable Rewind" msgstr "Activar rebobinado" -#: src/ui/gui/settings_page.slint:127 +#: src/ui/gui/settings_page.slint:134 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Emular UNFLoader" -#: src/ui/gui/settings_page.slint:135 +#: src/ui/gui/settings_page.slint:142 msgctxt "Settings" msgid "Emulate VRU" msgstr "Emular VRU" -#: src/ui/gui/settings_page.slint:144 +#: src/ui/gui/settings_page.slint:152 msgctxt "Settings" msgid "UI" msgstr "Interfaz" -#: src/ui/gui/settings_page.slint:150 +#: src/ui/gui/settings_page.slint:158 msgctxt "Settings" msgid "Theme:" msgstr "Tema:" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "System" msgstr "Sistema" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "Dark" msgstr "Oscuro" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "Light" msgstr "Claro" diff --git a/data/translations/fr/LC_MESSAGES/gopher64.po b/data/translations/fr/LC_MESSAGES/gopher64.po index a028fa4..e8431d7 100644 --- a/data/translations/fr/LC_MESSAGES/gopher64.po +++ b/data/translations/fr/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-30 09:43+0000\n" +"POT-Creation-Date: 2026-08-03 15:22+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: French (France)\n" @@ -47,187 +47,210 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Faire un don (via GitHub)" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:177 msgctxt "Menu" msgid "Local Game" msgstr "Jeu local" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:181 msgctxt "Menu" msgid "Controller Config" msgstr "Configuration manette" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:185 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:176 +#: src/ui/gui/appwindow.slint:189 msgctxt "Menu" msgid "Cheats" msgstr "Triche" -#: src/ui/gui/appwindow.slint:180 +#: src/ui/gui/appwindow.slint:193 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:184 +#: src/ui/gui/appwindow.slint:197 msgctxt "Menu" msgid "Settings" msgstr "Paramètres" -#: src/ui/gui/appwindow.slint:188 +#: src/ui/gui/appwindow.slint:201 msgctxt "Menu" msgid "About" msgstr "À propos" -#: src/ui/gui/cheat_page.slint:15 +#: src/ui/gui/cheat_page.slint:28 msgctxt "Cheats" msgid "Cheats" msgstr "Triche" -#: src/ui/gui/cheat_page.slint:25 +#: src/ui/gui/cheat_page.slint:38 msgctxt "Cheats" msgid "Select ROM" msgstr "Sélectionner une ROM" -#: src/ui/gui/cheat_page.slint:41 +#: src/ui/gui/cheat_page.slint:54 msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Effacer la triche pour toutes les ROMs" -#: src/ui/gui/cheat_page.slint:83 +#: src/ui/gui/cheat_page.slint:96 msgctxt "Cheats" msgid "No Cheats Available" msgstr "Aucune triche disponible" -#: src/ui/gui/controller_page.slint:80 +#: src/ui/gui/controller_page.slint:87 msgctxt "ControllerSettingsGrid" msgid "Enabled" msgstr "Activé" -#: src/ui/gui/controller_page.slint:93 +#: src/ui/gui/controller_page.slint:100 msgctxt "ControllerSettingsGrid" msgid "Transfer Pak" msgstr "Transfer Pak" -#: src/ui/gui/controller_page.slint:107 +#: src/ui/gui/controller_page.slint:114 msgctxt "ControllerSettingsGrid" msgid "Profile" msgstr "Profil" -#: src/ui/gui/controller_page.slint:157 +#: src/ui/gui/controller_page.slint:164 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Configuration de la manette" -#: src/ui/gui/controller_page.slint:171 +#: src/ui/gui/controller_page.slint:178 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Configurer le profil d'entrée" -#: src/ui/gui/controller_page.slint:180 +#: src/ui/gui/controller_page.slint:187 msgctxt "ControllerConfig" msgid "Controller Settings" msgstr "Paramètres de la manette" -#: src/ui/gui/controller_page.slint:190 +#: src/ui/gui/controller_page.slint:197 msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "Attribution de la manette" -#: src/ui/gui/input_profile.slint:12 +#: src/ui/gui/input_profile.slint:19 msgctxt "InputProfileDialog" msgid "Create/Modify Input Profile" msgstr "Créer / modifier le profil d'entrée" -#: src/ui/gui/input_profile.slint:25 +#: src/ui/gui/input_profile.slint:32 msgctxt "InputProfileDialog" msgid "Enter profile name to create or modify" msgstr "Saisir le nom du profil à créer ou à modifier" -#: src/ui/gui/input_profile.slint:38 +#: src/ui/gui/input_profile.slint:45 msgctxt "InputProfileDialog" msgid "Deadzone Percentage" msgstr "Pourcentage de zone morte" -#: src/ui/gui/input_profile.slint:61 +#: src/ui/gui/input_profile.slint:68 msgctxt "InputProfileDialog" msgid "Use DirectInput" msgstr "Utiliser DirectInput" -#: src/ui/gui/input_profile.slint:74 +#: src/ui/gui/input_profile.slint:81 msgctxt "InputProfileDialog" msgid "Start Profile Creation Wizard" msgstr "Lancer l'assistant de création de profil" -#: src/ui/gui/input_profile.slint:82 +#: src/ui/gui/input_profile.slint:90 msgctxt "InputProfileDialog" msgid "Cancel" msgstr "Annuler" -#: src/ui/gui/localgame_page.slint:19 +#: src/ui/gui/input_profile.slint:101 +msgctxt "InputProfileDialog" +msgid "" +"When using DirectInput and/or keyboard, navigate the dialog using the arrow " +"keys.\n" +"Press Enter to begin binding a button/axis.\n" +"Press Delete to remove a binding.\n" +"\n" +"When using a PlayStation-style controller, navigate the dialog using the D-" +"pad.\n" +"Press the South/East button to begin binding a button/axis.\n" +"Press the North/West button to remove a binding." +msgstr "" +"Lorsque vous utilisez DirectInput et/ou le clavier, naviguez dans la boîte " +"de dialogue avec les touches fléchées.\n" +"Appuyez sur Entrée pour commencer à assigner un bouton/axe.\n" +"Appuyez sur Suppr pour supprimer une assignation.\n" +"\n" +"Lorsque vous utilisez une manette de style PlayStation, naviguez dans la " +"boîte de dialogue avec la croix directionnelle.\n" +"Appuyez sur le bouton Sud/Est pour commencer à assigner un bouton/axe.\n" +"Appuyez sur le bouton Nord/Ouest pour supprimer une assignation." + +#: src/ui/gui/localgame_page.slint:24 msgctxt "LocalGame" msgid "Local Game" msgstr "Jeu local" -#: src/ui/gui/localgame_page.slint:26 +#: src/ui/gui/localgame_page.slint:31 msgctxt "LocalGame" msgid "Open ROM" msgstr "Ouvrir une ROM" -#: src/ui/gui/localgame_page.slint:37 +#: src/ui/gui/localgame_page.slint:42 msgctxt "LocalGame" msgid "Open Saves Folder" msgstr "Ouvrir le dossier des sauvegardes" -#: src/ui/gui/localgame_page.slint:54 +#: src/ui/gui/localgame_page.slint:59 msgctxt "LocalGame" msgid "Recent ROMs" msgstr "ROMs récentes" -#: src/ui/gui/netplay_create.slint:7 +#: src/ui/gui/netplay_create.slint:16 msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "Netplay : créer une session" -#: src/ui/gui/netplay_create.slint:22 +#: src/ui/gui/netplay_create.slint:31 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "Nom de la session :" -#: src/ui/gui/netplay_create.slint:26 +#: src/ui/gui/netplay_create.slint:35 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "Saisir le nom de la session" -#: src/ui/gui/netplay_create.slint:36 +#: src/ui/gui/netplay_create.slint:45 msgctxt "NetplayCreate" msgid "Password (Optional):" msgstr "Mot de passe (facultatif) :" -#: src/ui/gui/netplay_create.slint:40 +#: src/ui/gui/netplay_create.slint:49 msgctxt "NetplayCreate" msgid "Enter session password" msgstr "Saisir le mot de passe de la session" -#: src/ui/gui/netplay_create.slint:51 +#: src/ui/gui/netplay_create.slint:60 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "Nom du joueur :" -#: src/ui/gui/netplay_create.slint:55 +#: src/ui/gui/netplay_create.slint:64 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "Saisir le nom du joueur" -#: src/ui/gui/netplay_create.slint:66 +#: src/ui/gui/netplay_create.slint:75 msgctxt "NetplayCreate" msgid "Select ROM" msgstr "Sélectionner une ROM" -#: src/ui/gui/netplay_create.slint:82 +#: src/ui/gui/netplay_create.slint:91 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." @@ -235,163 +258,163 @@ msgstr "" "La triche est activée pour ce jeu. Elle sera synchronisée avec les autres " "joueurs." -#: src/ui/gui/netplay_create.slint:91 +#: src/ui/gui/netplay_create.slint:100 msgctxt "NetplayCreate" msgid "Create Session" msgstr "Créer la session" -#: src/ui/gui/netplay_create.slint:107 +#: src/ui/gui/netplay_create.slint:117 msgctxt "NetplayCreate" msgid "Cancel" msgstr "Annuler" -#: src/ui/gui/netplay_join.slint:7 +#: src/ui/gui/netplay_join.slint:15 msgctxt "NetplayJoin" msgid "Netplay: Join Session" msgstr "Netplay : rejoindre une session" -#: src/ui/gui/netplay_join.slint:18 +#: src/ui/gui/netplay_join.slint:26 msgctxt "NetplayJoin" msgid "Player Name (required):" msgstr "Nom du joueur (obligatoire) :" -#: src/ui/gui/netplay_join.slint:22 +#: src/ui/gui/netplay_join.slint:30 msgctxt "NetplayJoin" msgid "Enter player name" msgstr "Saisir le nom du joueur" -#: src/ui/gui/netplay_join.slint:31 +#: src/ui/gui/netplay_join.slint:39 msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "Mot de passe (si requis)" -#: src/ui/gui/netplay_join.slint:42 +#: src/ui/gui/netplay_join.slint:51 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "Sélectionner une ROM" -#: src/ui/gui/netplay_join.slint:57 +#: src/ui/gui/netplay_join.slint:66 msgctxt "NetplayJoin" msgid "Refreshing session list, please wait..." msgstr "Actualisation de la liste des sessions, veuillez patienter…" -#: src/ui/gui/netplay_join.slint:62 +#: src/ui/gui/netplay_join.slint:71 msgctxt "NetplayJoin" msgid "Click on a session below to select it" msgstr "Cliquez sur une session ci-dessous pour la sélectionner" -#: src/ui/gui/netplay_join.slint:67 +#: src/ui/gui/netplay_join.slint:76 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." msgstr "" "Aucune session disponible. Veuillez actualiser pour vérifier à nouveau." -#: src/ui/gui/netplay_join.slint:73 +#: src/ui/gui/netplay_join.slint:82 msgctxt "NetplayJoin" msgid "Session Name" msgstr "Nom de la session" -#: src/ui/gui/netplay_join.slint:74 +#: src/ui/gui/netplay_join.slint:83 msgctxt "NetplayJoin" msgid "Game Name" msgstr "Nom du jeu" -#: src/ui/gui/netplay_join.slint:75 +#: src/ui/gui/netplay_join.slint:84 msgctxt "NetplayJoin" msgid "Password" msgstr "Mot de passe" -#: src/ui/gui/netplay_join.slint:76 +#: src/ui/gui/netplay_join.slint:85 msgctxt "NetplayJoin" msgid "Cheats" msgstr "Triche" -#: src/ui/gui/netplay_join.slint:90 +#: src/ui/gui/netplay_join.slint:99 msgctxt "NetplayJoin" msgid "Refresh Session List" msgstr "Actualiser la liste" -#: src/ui/gui/netplay_join.slint:105 +#: src/ui/gui/netplay_join.slint:114 msgctxt "NetplayJoin" msgid "Join Session" msgstr "Rejoindre la session" -#: src/ui/gui/netplay_join.slint:117 +#: src/ui/gui/netplay_join.slint:127 msgctxt "NetplayJoin" msgid "Cancel" msgstr "Annuler" -#: src/ui/gui/netplay_page.slint:31 +#: src/ui/gui/netplay_page.slint:37 msgctxt "Netplay" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/netplay_page.slint:39 +#: src/ui/gui/netplay_page.slint:45 msgctxt "Netplay" msgid "Create Session" msgstr "Créer une session" -#: src/ui/gui/netplay_page.slint:50 +#: src/ui/gui/netplay_page.slint:56 msgctxt "Netplay" msgid "Join Session" msgstr "Rejoindre une session" -#: src/ui/gui/netplay_page.slint:64 +#: src/ui/gui/netplay_page.slint:70 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "Salon Discord Netplay" -#: src/ui/gui/netplay_page.slint:71 +#: src/ui/gui/netplay_page.slint:77 msgctxt "Netplay" msgid "Provide Feedback" msgstr "Donner votre avis" -#: src/ui/gui/netplay_wait.slint:17 +#: src/ui/gui/netplay_wait.slint:27 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay : salle d'attente" -#: src/ui/gui/netplay_wait.slint:29 +#: src/ui/gui/netplay_wait.slint:39 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Nom de la session :" -#: src/ui/gui/netplay_wait.slint:35 +#: src/ui/gui/netplay_wait.slint:45 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Nom du jeu :" -#: src/ui/gui/netplay_wait.slint:45 +#: src/ui/gui/netplay_wait.slint:55 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Joueur 1 :" -#: src/ui/gui/netplay_wait.slint:49 +#: src/ui/gui/netplay_wait.slint:59 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Joueur 2 :" -#: src/ui/gui/netplay_wait.slint:55 +#: src/ui/gui/netplay_wait.slint:65 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Joueur 3 :" -#: src/ui/gui/netplay_wait.slint:59 +#: src/ui/gui/netplay_wait.slint:69 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Joueur 4 :" -#: src/ui/gui/netplay_wait.slint:73 +#: src/ui/gui/netplay_wait.slint:83 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Saisir un message" -#: src/ui/gui/netplay_wait.slint:84 +#: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "Send Message" msgstr "Envoyer" -#: src/ui/gui/netplay_wait.slint:94 +#: src/ui/gui/netplay_wait.slint:104 msgctxt "NetplayWait" msgid "" "Setting the input delay too low will cause the game to lag.\n" @@ -402,182 +425,182 @@ msgstr "" "Vous pouvez diminuer le délai d'entrée en jeu avec Alt+[ et l'augmenter avec " "Alt+]." -#: src/ui/gui/netplay_wait.slint:101 +#: src/ui/gui/netplay_wait.slint:112 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Délai d'entrée local :" -#: src/ui/gui/netplay_wait.slint:118 +#: src/ui/gui/netplay_wait.slint:129 msgctxt "NetplayWait" msgid "Recommended: " msgstr "Recommandé : " -#: src/ui/gui/netplay_wait.slint:127 +#: src/ui/gui/netplay_wait.slint:138 msgctxt "NetplayWait" msgid "Start Game" msgstr "Lancer la partie" -#: src/ui/gui/netplay_wait.slint:127 +#: src/ui/gui/netplay_wait.slint:138 msgctxt "NetplayWait" msgid "Waiting for P2P mesh " msgstr "En attente du maillage P2P " -#: src/ui/gui/netplay_wait.slint:135 +#: src/ui/gui/netplay_wait.slint:147 msgctxt "NetplayWait" msgid "Cancel" msgstr "Annuler" -#: src/ui/gui/retroachievements_page.slint:19 +#: src/ui/gui/retroachievements_page.slint:25 msgctxt "RAData" msgid "Not currently logged in" msgstr "Non connecté" -#: src/ui/gui/retroachievements_page.slint:27 +#: src/ui/gui/retroachievements_page.slint:33 msgctxt "RetroAchievements" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/retroachievements_page.slint:36 +#: src/ui/gui/retroachievements_page.slint:42 msgctxt "RetroAchievements" msgid "Enabled" msgstr "Activé" -#: src/ui/gui/retroachievements_page.slint:51 +#: src/ui/gui/retroachievements_page.slint:58 msgctxt "RetroAchievements" msgid "Hardcore mode" msgstr "Mode hardcore" -#: src/ui/gui/retroachievements_page.slint:60 +#: src/ui/gui/retroachievements_page.slint:67 msgctxt "RetroAchievements" msgid "Challenge Indicators" msgstr "Indicateurs de défi" -#: src/ui/gui/retroachievements_page.slint:69 +#: src/ui/gui/retroachievements_page.slint:77 msgctxt "RetroAchievements" msgid "Leaderboard Trackers" msgstr "Suivi des classements" -#: src/ui/gui/retroachievements_page.slint:78 +#: src/ui/gui/retroachievements_page.slint:87 msgctxt "RetroAchievements" msgid "Discord Rich Presence" msgstr "Rich Presence Discord" -#: src/ui/gui/retroachievements_page.slint:96 +#: src/ui/gui/retroachievements_page.slint:107 msgctxt "RetroAchievements" msgid "View Profile" msgstr "Voir le profil" -#: src/ui/gui/retroachievements_page.slint:106 +#: src/ui/gui/retroachievements_page.slint:118 msgctxt "RetroAchievements" msgid "Username" msgstr "Nom d'utilisateur" -#: src/ui/gui/retroachievements_page.slint:116 +#: src/ui/gui/retroachievements_page.slint:128 msgctxt "RetroAchievements" msgid "Password" msgstr "Mot de passe" -#: src/ui/gui/retroachievements_page.slint:125 +#: src/ui/gui/retroachievements_page.slint:138 msgctxt "RetroAchievements" msgid "Login" msgstr "Connexion" -#: src/ui/gui/retroachievements_page.slint:141 +#: src/ui/gui/retroachievements_page.slint:156 msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Voir les jeux pris en charge" -#: src/ui/gui/settings_page.slint:25 +#: src/ui/gui/settings_page.slint:31 msgctxt "Settings" msgid "Settings" msgstr "Paramètres" -#: src/ui/gui/settings_page.slint:32 +#: src/ui/gui/settings_page.slint:38 msgctxt "Settings" msgid "Game" msgstr "Jeu" -#: src/ui/gui/settings_page.slint:38 +#: src/ui/gui/settings_page.slint:44 msgctxt "Settings" msgid "Resolution:" msgstr "Résolution :" -#: src/ui/gui/settings_page.slint:51 +#: src/ui/gui/settings_page.slint:58 msgctxt "Settings" msgid "SSAA downscaling" msgstr "Réduction SSAA" -#: src/ui/gui/settings_page.slint:59 +#: src/ui/gui/settings_page.slint:66 msgctxt "Settings" msgid "Integer Scaling" msgstr "Mise à l'échelle par entiers" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:74 msgctxt "Settings" msgid "Fullscreen" msgstr "Plein écran" -#: src/ui/gui/settings_page.slint:75 +#: src/ui/gui/settings_page.slint:82 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Écran large (étiré)" -#: src/ui/gui/settings_page.slint:83 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "Synchro verticale" -#: src/ui/gui/settings_page.slint:91 +#: src/ui/gui/settings_page.slint:98 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Appliquer le filtre CRT" -#: src/ui/gui/settings_page.slint:103 +#: src/ui/gui/settings_page.slint:110 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Surcharger le CPU N64 (risque de bugs)" -#: src/ui/gui/settings_page.slint:111 +#: src/ui/gui/settings_page.slint:118 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Désactiver l'Expansion Pak" -#: src/ui/gui/settings_page.slint:119 +#: src/ui/gui/settings_page.slint:126 msgctxt "Settings" msgid "Enable Rewind" msgstr "Activer le rembobinage" -#: src/ui/gui/settings_page.slint:127 +#: src/ui/gui/settings_page.slint:134 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Émuler UNFLoader" -#: src/ui/gui/settings_page.slint:135 +#: src/ui/gui/settings_page.slint:142 msgctxt "Settings" msgid "Emulate VRU" msgstr "Émuler le VRU" -#: src/ui/gui/settings_page.slint:144 +#: src/ui/gui/settings_page.slint:152 msgctxt "Settings" msgid "UI" msgstr "Interface" -#: src/ui/gui/settings_page.slint:150 +#: src/ui/gui/settings_page.slint:158 msgctxt "Settings" msgid "Theme:" msgstr "Thème :" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "System" msgstr "Système" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "Dark" msgstr "Sombre" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "Light" msgstr "Clair" diff --git a/data/translations/gopher64.pot b/data/translations/gopher64.pot index 8b69df3..e33b039 100644 --- a/data/translations/gopher64.pot +++ b/data/translations/gopher64.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-06-30 09:43+0000\n" +"POT-Creation-Date: 2026-08-03 15:22+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -47,530 +47,540 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:177 msgctxt "Menu" msgid "Local Game" msgstr "" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:181 msgctxt "Menu" msgid "Controller Config" msgstr "" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:185 msgctxt "Menu" msgid "Netplay" msgstr "" -#: src/ui/gui/appwindow.slint:176 +#: src/ui/gui/appwindow.slint:189 msgctxt "Menu" msgid "Cheats" msgstr "" -#: src/ui/gui/appwindow.slint:180 +#: src/ui/gui/appwindow.slint:193 msgctxt "Menu" msgid "RetroAchievements" msgstr "" -#: src/ui/gui/appwindow.slint:184 +#: src/ui/gui/appwindow.slint:197 msgctxt "Menu" msgid "Settings" msgstr "" -#: src/ui/gui/appwindow.slint:188 +#: src/ui/gui/appwindow.slint:201 msgctxt "Menu" msgid "About" msgstr "" -#: src/ui/gui/cheat_page.slint:15 +#: src/ui/gui/cheat_page.slint:28 msgctxt "Cheats" msgid "Cheats" msgstr "" -#: src/ui/gui/cheat_page.slint:25 +#: src/ui/gui/cheat_page.slint:38 msgctxt "Cheats" msgid "Select ROM" msgstr "" -#: src/ui/gui/cheat_page.slint:41 +#: src/ui/gui/cheat_page.slint:54 msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "" -#: src/ui/gui/cheat_page.slint:83 +#: src/ui/gui/cheat_page.slint:96 msgctxt "Cheats" msgid "No Cheats Available" msgstr "" -#: src/ui/gui/controller_page.slint:80 +#: src/ui/gui/controller_page.slint:87 msgctxt "ControllerSettingsGrid" msgid "Enabled" msgstr "" -#: src/ui/gui/controller_page.slint:93 +#: src/ui/gui/controller_page.slint:100 msgctxt "ControllerSettingsGrid" msgid "Transfer Pak" msgstr "" -#: src/ui/gui/controller_page.slint:107 +#: src/ui/gui/controller_page.slint:114 msgctxt "ControllerSettingsGrid" msgid "Profile" msgstr "" -#: src/ui/gui/controller_page.slint:157 +#: src/ui/gui/controller_page.slint:164 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "" -#: src/ui/gui/controller_page.slint:171 +#: src/ui/gui/controller_page.slint:178 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "" -#: src/ui/gui/controller_page.slint:180 +#: src/ui/gui/controller_page.slint:187 msgctxt "ControllerConfig" msgid "Controller Settings" msgstr "" -#: src/ui/gui/controller_page.slint:190 +#: src/ui/gui/controller_page.slint:197 msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "" -#: src/ui/gui/input_profile.slint:12 +#: src/ui/gui/input_profile.slint:19 msgctxt "InputProfileDialog" msgid "Create/Modify Input Profile" msgstr "" -#: src/ui/gui/input_profile.slint:25 +#: src/ui/gui/input_profile.slint:32 msgctxt "InputProfileDialog" msgid "Enter profile name to create or modify" msgstr "" -#: src/ui/gui/input_profile.slint:38 +#: src/ui/gui/input_profile.slint:45 msgctxt "InputProfileDialog" msgid "Deadzone Percentage" msgstr "" -#: src/ui/gui/input_profile.slint:61 +#: src/ui/gui/input_profile.slint:68 msgctxt "InputProfileDialog" msgid "Use DirectInput" msgstr "" -#: src/ui/gui/input_profile.slint:74 +#: src/ui/gui/input_profile.slint:81 msgctxt "InputProfileDialog" msgid "Start Profile Creation Wizard" msgstr "" -#: src/ui/gui/input_profile.slint:82 +#: src/ui/gui/input_profile.slint:90 msgctxt "InputProfileDialog" msgid "Cancel" msgstr "" -#: src/ui/gui/localgame_page.slint:19 +#: src/ui/gui/input_profile.slint:101 +msgctxt "InputProfileDialog" +msgid "" +"When using DirectInput and/or keyboard, navigate the dialog using the arrow " +"keys.\nPress Enter to begin binding a button/axis.\nPress Delete to remove a " +"binding.\n\nWhen using a PlayStation-style controller, navigate the dialog " +"using the D-pad.\nPress the South/East button to begin binding a button/axis." +"\nPress the North/West button to remove a binding." +msgstr "" + +#: src/ui/gui/localgame_page.slint:24 msgctxt "LocalGame" msgid "Local Game" msgstr "" -#: src/ui/gui/localgame_page.slint:26 +#: src/ui/gui/localgame_page.slint:31 msgctxt "LocalGame" msgid "Open ROM" msgstr "" -#: src/ui/gui/localgame_page.slint:37 +#: src/ui/gui/localgame_page.slint:42 msgctxt "LocalGame" msgid "Open Saves Folder" msgstr "" -#: src/ui/gui/localgame_page.slint:54 +#: src/ui/gui/localgame_page.slint:59 msgctxt "LocalGame" msgid "Recent ROMs" msgstr "" -#: src/ui/gui/netplay_create.slint:7 +#: src/ui/gui/netplay_create.slint:16 msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "" -#: src/ui/gui/netplay_create.slint:22 +#: src/ui/gui/netplay_create.slint:31 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "" -#: src/ui/gui/netplay_create.slint:26 +#: src/ui/gui/netplay_create.slint:35 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "" -#: src/ui/gui/netplay_create.slint:36 +#: src/ui/gui/netplay_create.slint:45 msgctxt "NetplayCreate" msgid "Password (Optional):" msgstr "" -#: src/ui/gui/netplay_create.slint:40 +#: src/ui/gui/netplay_create.slint:49 msgctxt "NetplayCreate" msgid "Enter session password" msgstr "" -#: src/ui/gui/netplay_create.slint:51 +#: src/ui/gui/netplay_create.slint:60 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "" -#: src/ui/gui/netplay_create.slint:55 +#: src/ui/gui/netplay_create.slint:64 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "" -#: src/ui/gui/netplay_create.slint:66 +#: src/ui/gui/netplay_create.slint:75 msgctxt "NetplayCreate" msgid "Select ROM" msgstr "" -#: src/ui/gui/netplay_create.slint:82 +#: src/ui/gui/netplay_create.slint:91 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." msgstr "" -#: src/ui/gui/netplay_create.slint:91 +#: src/ui/gui/netplay_create.slint:100 msgctxt "NetplayCreate" msgid "Create Session" msgstr "" -#: src/ui/gui/netplay_create.slint:107 +#: src/ui/gui/netplay_create.slint:117 msgctxt "NetplayCreate" msgid "Cancel" msgstr "" -#: src/ui/gui/netplay_join.slint:7 +#: src/ui/gui/netplay_join.slint:15 msgctxt "NetplayJoin" msgid "Netplay: Join Session" msgstr "" -#: src/ui/gui/netplay_join.slint:18 +#: src/ui/gui/netplay_join.slint:26 msgctxt "NetplayJoin" msgid "Player Name (required):" msgstr "" -#: src/ui/gui/netplay_join.slint:22 +#: src/ui/gui/netplay_join.slint:30 msgctxt "NetplayJoin" msgid "Enter player name" msgstr "" -#: src/ui/gui/netplay_join.slint:31 +#: src/ui/gui/netplay_join.slint:39 msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "" -#: src/ui/gui/netplay_join.slint:42 +#: src/ui/gui/netplay_join.slint:51 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "" -#: src/ui/gui/netplay_join.slint:57 +#: src/ui/gui/netplay_join.slint:66 msgctxt "NetplayJoin" msgid "Refreshing session list, please wait..." msgstr "" -#: src/ui/gui/netplay_join.slint:62 +#: src/ui/gui/netplay_join.slint:71 msgctxt "NetplayJoin" msgid "Click on a session below to select it" msgstr "" -#: src/ui/gui/netplay_join.slint:67 +#: src/ui/gui/netplay_join.slint:76 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." msgstr "" -#: src/ui/gui/netplay_join.slint:73 +#: src/ui/gui/netplay_join.slint:82 msgctxt "NetplayJoin" msgid "Session Name" msgstr "" -#: src/ui/gui/netplay_join.slint:74 +#: src/ui/gui/netplay_join.slint:83 msgctxt "NetplayJoin" msgid "Game Name" msgstr "" -#: src/ui/gui/netplay_join.slint:75 +#: src/ui/gui/netplay_join.slint:84 msgctxt "NetplayJoin" msgid "Password" msgstr "" -#: src/ui/gui/netplay_join.slint:76 +#: src/ui/gui/netplay_join.slint:85 msgctxt "NetplayJoin" msgid "Cheats" msgstr "" -#: src/ui/gui/netplay_join.slint:90 +#: src/ui/gui/netplay_join.slint:99 msgctxt "NetplayJoin" msgid "Refresh Session List" msgstr "" -#: src/ui/gui/netplay_join.slint:105 +#: src/ui/gui/netplay_join.slint:114 msgctxt "NetplayJoin" msgid "Join Session" msgstr "" -#: src/ui/gui/netplay_join.slint:117 +#: src/ui/gui/netplay_join.slint:127 msgctxt "NetplayJoin" msgid "Cancel" msgstr "" -#: src/ui/gui/netplay_page.slint:31 +#: src/ui/gui/netplay_page.slint:37 msgctxt "Netplay" msgid "Netplay" msgstr "" -#: src/ui/gui/netplay_page.slint:39 +#: src/ui/gui/netplay_page.slint:45 msgctxt "Netplay" msgid "Create Session" msgstr "" -#: src/ui/gui/netplay_page.slint:50 +#: src/ui/gui/netplay_page.slint:56 msgctxt "Netplay" msgid "Join Session" msgstr "" -#: src/ui/gui/netplay_page.slint:64 +#: src/ui/gui/netplay_page.slint:70 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "" -#: src/ui/gui/netplay_page.slint:71 +#: src/ui/gui/netplay_page.slint:77 msgctxt "Netplay" msgid "Provide Feedback" msgstr "" -#: src/ui/gui/netplay_wait.slint:17 +#: src/ui/gui/netplay_wait.slint:27 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "" -#: src/ui/gui/netplay_wait.slint:29 +#: src/ui/gui/netplay_wait.slint:39 msgctxt "NetplayWait" msgid "Session Name:" msgstr "" -#: src/ui/gui/netplay_wait.slint:35 +#: src/ui/gui/netplay_wait.slint:45 msgctxt "NetplayWait" msgid "Game Name:" msgstr "" -#: src/ui/gui/netplay_wait.slint:45 +#: src/ui/gui/netplay_wait.slint:55 msgctxt "NetplayWait" msgid "Player 1:" msgstr "" -#: src/ui/gui/netplay_wait.slint:49 +#: src/ui/gui/netplay_wait.slint:59 msgctxt "NetplayWait" msgid "Player 2:" msgstr "" -#: src/ui/gui/netplay_wait.slint:55 +#: src/ui/gui/netplay_wait.slint:65 msgctxt "NetplayWait" msgid "Player 3:" msgstr "" -#: src/ui/gui/netplay_wait.slint:59 +#: src/ui/gui/netplay_wait.slint:69 msgctxt "NetplayWait" msgid "Player 4:" msgstr "" -#: src/ui/gui/netplay_wait.slint:73 +#: src/ui/gui/netplay_wait.slint:83 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "" -#: src/ui/gui/netplay_wait.slint:84 +#: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "Send Message" msgstr "" -#: src/ui/gui/netplay_wait.slint:94 +#: src/ui/gui/netplay_wait.slint:104 msgctxt "NetplayWait" msgid "" "Setting the input delay too low will cause the game to lag.\nYou can lower " "the input delay in-game by pressing Alt+[ and raise it with Alt+]." msgstr "" -#: src/ui/gui/netplay_wait.slint:101 +#: src/ui/gui/netplay_wait.slint:112 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "" -#: src/ui/gui/netplay_wait.slint:118 +#: src/ui/gui/netplay_wait.slint:129 msgctxt "NetplayWait" msgid "Recommended: " msgstr "" -#: src/ui/gui/netplay_wait.slint:127 +#: src/ui/gui/netplay_wait.slint:138 msgctxt "NetplayWait" msgid "Start Game" msgstr "" -#: src/ui/gui/netplay_wait.slint:127 +#: src/ui/gui/netplay_wait.slint:138 msgctxt "NetplayWait" msgid "Waiting for P2P mesh " msgstr "" -#: src/ui/gui/netplay_wait.slint:135 +#: src/ui/gui/netplay_wait.slint:147 msgctxt "NetplayWait" msgid "Cancel" msgstr "" -#: src/ui/gui/retroachievements_page.slint:19 +#: src/ui/gui/retroachievements_page.slint:25 msgctxt "RAData" msgid "Not currently logged in" msgstr "" -#: src/ui/gui/retroachievements_page.slint:27 +#: src/ui/gui/retroachievements_page.slint:33 msgctxt "RetroAchievements" msgid "RetroAchievements" msgstr "" -#: src/ui/gui/retroachievements_page.slint:36 +#: src/ui/gui/retroachievements_page.slint:42 msgctxt "RetroAchievements" msgid "Enabled" msgstr "" -#: src/ui/gui/retroachievements_page.slint:51 +#: src/ui/gui/retroachievements_page.slint:58 msgctxt "RetroAchievements" msgid "Hardcore mode" msgstr "" -#: src/ui/gui/retroachievements_page.slint:60 +#: src/ui/gui/retroachievements_page.slint:67 msgctxt "RetroAchievements" msgid "Challenge Indicators" msgstr "" -#: src/ui/gui/retroachievements_page.slint:69 +#: src/ui/gui/retroachievements_page.slint:77 msgctxt "RetroAchievements" msgid "Leaderboard Trackers" msgstr "" -#: src/ui/gui/retroachievements_page.slint:78 +#: src/ui/gui/retroachievements_page.slint:87 msgctxt "RetroAchievements" msgid "Discord Rich Presence" msgstr "" -#: src/ui/gui/retroachievements_page.slint:96 +#: src/ui/gui/retroachievements_page.slint:107 msgctxt "RetroAchievements" msgid "View Profile" msgstr "" -#: src/ui/gui/retroachievements_page.slint:106 +#: src/ui/gui/retroachievements_page.slint:118 msgctxt "RetroAchievements" msgid "Username" msgstr "" -#: src/ui/gui/retroachievements_page.slint:116 +#: src/ui/gui/retroachievements_page.slint:128 msgctxt "RetroAchievements" msgid "Password" msgstr "" -#: src/ui/gui/retroachievements_page.slint:125 +#: src/ui/gui/retroachievements_page.slint:138 msgctxt "RetroAchievements" msgid "Login" msgstr "" -#: src/ui/gui/retroachievements_page.slint:141 +#: src/ui/gui/retroachievements_page.slint:156 msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "" -#: src/ui/gui/settings_page.slint:25 +#: src/ui/gui/settings_page.slint:31 msgctxt "Settings" msgid "Settings" msgstr "" -#: src/ui/gui/settings_page.slint:32 +#: src/ui/gui/settings_page.slint:38 msgctxt "Settings" msgid "Game" msgstr "" -#: src/ui/gui/settings_page.slint:38 +#: src/ui/gui/settings_page.slint:44 msgctxt "Settings" msgid "Resolution:" msgstr "" -#: src/ui/gui/settings_page.slint:51 +#: src/ui/gui/settings_page.slint:58 msgctxt "Settings" msgid "SSAA downscaling" msgstr "" -#: src/ui/gui/settings_page.slint:59 +#: src/ui/gui/settings_page.slint:66 msgctxt "Settings" msgid "Integer Scaling" msgstr "" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:74 msgctxt "Settings" msgid "Fullscreen" msgstr "" -#: src/ui/gui/settings_page.slint:75 +#: src/ui/gui/settings_page.slint:82 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "" -#: src/ui/gui/settings_page.slint:83 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "" -#: src/ui/gui/settings_page.slint:91 +#: src/ui/gui/settings_page.slint:98 msgctxt "Settings" msgid "Apply CRT shader" msgstr "" -#: src/ui/gui/settings_page.slint:103 +#: src/ui/gui/settings_page.slint:110 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "" -#: src/ui/gui/settings_page.slint:111 +#: src/ui/gui/settings_page.slint:118 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "" -#: src/ui/gui/settings_page.slint:119 +#: src/ui/gui/settings_page.slint:126 msgctxt "Settings" msgid "Enable Rewind" msgstr "" -#: src/ui/gui/settings_page.slint:127 +#: src/ui/gui/settings_page.slint:134 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "" -#: src/ui/gui/settings_page.slint:135 +#: src/ui/gui/settings_page.slint:142 msgctxt "Settings" msgid "Emulate VRU" msgstr "" -#: src/ui/gui/settings_page.slint:144 +#: src/ui/gui/settings_page.slint:152 msgctxt "Settings" msgid "UI" msgstr "" -#: src/ui/gui/settings_page.slint:150 +#: src/ui/gui/settings_page.slint:158 msgctxt "Settings" msgid "Theme:" msgstr "" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "System" msgstr "" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "Dark" msgstr "" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "Light" msgstr "" diff --git a/data/translations/ja/LC_MESSAGES/gopher64.po b/data/translations/ja/LC_MESSAGES/gopher64.po index 558d615..923de1e 100644 --- a/data/translations/ja/LC_MESSAGES/gopher64.po +++ b/data/translations/ja/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-30 09:43+0000\n" +"POT-Creation-Date: 2026-08-03 15:22+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Japanese\n" @@ -47,348 +47,371 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "GitHubで寄付" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:177 msgctxt "Menu" msgid "Local Game" msgstr "ローカルゲーム" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:181 msgctxt "Menu" msgid "Controller Config" msgstr "コントローラー設定" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:185 msgctxt "Menu" msgid "Netplay" msgstr "ネットプレイ" -#: src/ui/gui/appwindow.slint:176 +#: src/ui/gui/appwindow.slint:189 msgctxt "Menu" msgid "Cheats" msgstr "チート" -#: src/ui/gui/appwindow.slint:180 +#: src/ui/gui/appwindow.slint:193 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:184 +#: src/ui/gui/appwindow.slint:197 msgctxt "Menu" msgid "Settings" msgstr "設定" -#: src/ui/gui/appwindow.slint:188 +#: src/ui/gui/appwindow.slint:201 msgctxt "Menu" msgid "About" msgstr "バージョン情報" -#: src/ui/gui/cheat_page.slint:15 +#: src/ui/gui/cheat_page.slint:28 msgctxt "Cheats" msgid "Cheats" msgstr "チート" -#: src/ui/gui/cheat_page.slint:25 +#: src/ui/gui/cheat_page.slint:38 msgctxt "Cheats" msgid "Select ROM" msgstr "ROMを選択" -#: src/ui/gui/cheat_page.slint:41 +#: src/ui/gui/cheat_page.slint:54 msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "すべてのROMのチートをクリア" -#: src/ui/gui/cheat_page.slint:83 +#: src/ui/gui/cheat_page.slint:96 msgctxt "Cheats" msgid "No Cheats Available" msgstr "利用できるチートはありません" -#: src/ui/gui/controller_page.slint:80 +#: src/ui/gui/controller_page.slint:87 msgctxt "ControllerSettingsGrid" msgid "Enabled" msgstr "有効" -#: src/ui/gui/controller_page.slint:93 +#: src/ui/gui/controller_page.slint:100 msgctxt "ControllerSettingsGrid" msgid "Transfer Pak" msgstr "Transfer Pak" -#: src/ui/gui/controller_page.slint:107 +#: src/ui/gui/controller_page.slint:114 msgctxt "ControllerSettingsGrid" msgid "Profile" msgstr "プロファイル" -#: src/ui/gui/controller_page.slint:157 +#: src/ui/gui/controller_page.slint:164 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "コントローラー設定" -#: src/ui/gui/controller_page.slint:171 +#: src/ui/gui/controller_page.slint:178 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "入力プロファイルを設定" -#: src/ui/gui/controller_page.slint:180 +#: src/ui/gui/controller_page.slint:187 msgctxt "ControllerConfig" msgid "Controller Settings" msgstr "コントローラー詳細設定" -#: src/ui/gui/controller_page.slint:190 +#: src/ui/gui/controller_page.slint:197 msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "コントローラー割り当て" -#: src/ui/gui/input_profile.slint:12 +#: src/ui/gui/input_profile.slint:19 msgctxt "InputProfileDialog" msgid "Create/Modify Input Profile" msgstr "入力プロファイルの作成/変更" -#: src/ui/gui/input_profile.slint:25 +#: src/ui/gui/input_profile.slint:32 msgctxt "InputProfileDialog" msgid "Enter profile name to create or modify" msgstr "作成または変更するプロファイル名を入力" -#: src/ui/gui/input_profile.slint:38 +#: src/ui/gui/input_profile.slint:45 msgctxt "InputProfileDialog" msgid "Deadzone Percentage" msgstr "デッドゾーン(%)" -#: src/ui/gui/input_profile.slint:61 +#: src/ui/gui/input_profile.slint:68 msgctxt "InputProfileDialog" msgid "Use DirectInput" msgstr "DirectInputを使用" -#: src/ui/gui/input_profile.slint:74 +#: src/ui/gui/input_profile.slint:81 msgctxt "InputProfileDialog" msgid "Start Profile Creation Wizard" msgstr "プロファイル作成ウィザードを開始" -#: src/ui/gui/input_profile.slint:82 +#: src/ui/gui/input_profile.slint:90 msgctxt "InputProfileDialog" msgid "Cancel" msgstr "キャンセル" -#: src/ui/gui/localgame_page.slint:19 +#: src/ui/gui/input_profile.slint:101 +msgctxt "InputProfileDialog" +msgid "" +"When using DirectInput and/or keyboard, navigate the dialog using the arrow " +"keys.\n" +"Press Enter to begin binding a button/axis.\n" +"Press Delete to remove a binding.\n" +"\n" +"When using a PlayStation-style controller, navigate the dialog using the D-" +"pad.\n" +"Press the South/East button to begin binding a button/axis.\n" +"Press the North/West button to remove a binding." +msgstr "" +"DirectInputおよび/またはキーボードを使用する場合は、矢印キーでダイアログを" +"操作します。\n" +"Enterキーでボタン/軸の割り当てを開始します。\n" +"Deleteキーで割り当てを解除します。\n" +"\n" +"PlayStationスタイルのコントローラーを使用する場合は、方向パッドでダイアログ" +"を操作します。\n" +"下/右ボタンでボタン/軸の割り当てを開始します。\n" +"上/左ボタンで割り当てを解除します。" + +#: src/ui/gui/localgame_page.slint:24 msgctxt "LocalGame" msgid "Local Game" msgstr "ローカルゲーム" -#: src/ui/gui/localgame_page.slint:26 +#: src/ui/gui/localgame_page.slint:31 msgctxt "LocalGame" msgid "Open ROM" msgstr "ROMを開く" -#: src/ui/gui/localgame_page.slint:37 +#: src/ui/gui/localgame_page.slint:42 msgctxt "LocalGame" msgid "Open Saves Folder" msgstr "セーブフォルダーを開く" -#: src/ui/gui/localgame_page.slint:54 +#: src/ui/gui/localgame_page.slint:59 msgctxt "LocalGame" msgid "Recent ROMs" msgstr "最近使ったROM" -#: src/ui/gui/netplay_create.slint:7 +#: src/ui/gui/netplay_create.slint:16 msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "ネットプレイ:セッション作成" -#: src/ui/gui/netplay_create.slint:22 +#: src/ui/gui/netplay_create.slint:31 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "セッション名:" -#: src/ui/gui/netplay_create.slint:26 +#: src/ui/gui/netplay_create.slint:35 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "セッション名を入力" -#: src/ui/gui/netplay_create.slint:36 +#: src/ui/gui/netplay_create.slint:45 msgctxt "NetplayCreate" msgid "Password (Optional):" msgstr "パスワード(任意):" -#: src/ui/gui/netplay_create.slint:40 +#: src/ui/gui/netplay_create.slint:49 msgctxt "NetplayCreate" msgid "Enter session password" msgstr "セッションのパスワードを入力" -#: src/ui/gui/netplay_create.slint:51 +#: src/ui/gui/netplay_create.slint:60 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "プレイヤー名:" -#: src/ui/gui/netplay_create.slint:55 +#: src/ui/gui/netplay_create.slint:64 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "プレイヤー名を入力" -#: src/ui/gui/netplay_create.slint:66 +#: src/ui/gui/netplay_create.slint:75 msgctxt "NetplayCreate" msgid "Select ROM" msgstr "ROMを選択" -#: src/ui/gui/netplay_create.slint:82 +#: src/ui/gui/netplay_create.slint:91 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." msgstr "このゲームではチートが有効です。チートは他のプレイヤーと同期されます。" -#: src/ui/gui/netplay_create.slint:91 +#: src/ui/gui/netplay_create.slint:100 msgctxt "NetplayCreate" msgid "Create Session" msgstr "セッションを作成" -#: src/ui/gui/netplay_create.slint:107 +#: src/ui/gui/netplay_create.slint:117 msgctxt "NetplayCreate" msgid "Cancel" msgstr "キャンセル" -#: src/ui/gui/netplay_join.slint:7 +#: src/ui/gui/netplay_join.slint:15 msgctxt "NetplayJoin" msgid "Netplay: Join Session" msgstr "ネットプレイ:セッションに参加" -#: src/ui/gui/netplay_join.slint:18 +#: src/ui/gui/netplay_join.slint:26 msgctxt "NetplayJoin" msgid "Player Name (required):" msgstr "プレイヤー名(必須):" -#: src/ui/gui/netplay_join.slint:22 +#: src/ui/gui/netplay_join.slint:30 msgctxt "NetplayJoin" msgid "Enter player name" msgstr "プレイヤー名を入力" -#: src/ui/gui/netplay_join.slint:31 +#: src/ui/gui/netplay_join.slint:39 msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "パスワード(必要な場合)" -#: src/ui/gui/netplay_join.slint:42 +#: src/ui/gui/netplay_join.slint:51 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "ROMを選択" -#: src/ui/gui/netplay_join.slint:57 +#: src/ui/gui/netplay_join.slint:66 msgctxt "NetplayJoin" msgid "Refreshing session list, please wait..." msgstr "セッション一覧を更新しています。しばらくお待ちください…" -#: src/ui/gui/netplay_join.slint:62 +#: src/ui/gui/netplay_join.slint:71 msgctxt "NetplayJoin" msgid "Click on a session below to select it" msgstr "下の一覧からセッションをクリックして選択" -#: src/ui/gui/netplay_join.slint:67 +#: src/ui/gui/netplay_join.slint:76 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." msgstr "利用できるセッションがありません。更新して再度確認してください。" -#: src/ui/gui/netplay_join.slint:73 +#: src/ui/gui/netplay_join.slint:82 msgctxt "NetplayJoin" msgid "Session Name" msgstr "セッション名" -#: src/ui/gui/netplay_join.slint:74 +#: src/ui/gui/netplay_join.slint:83 msgctxt "NetplayJoin" msgid "Game Name" msgstr "ゲーム名" -#: src/ui/gui/netplay_join.slint:75 +#: src/ui/gui/netplay_join.slint:84 msgctxt "NetplayJoin" msgid "Password" msgstr "パスワード" -#: src/ui/gui/netplay_join.slint:76 +#: src/ui/gui/netplay_join.slint:85 msgctxt "NetplayJoin" msgid "Cheats" msgstr "チート" -#: src/ui/gui/netplay_join.slint:90 +#: src/ui/gui/netplay_join.slint:99 msgctxt "NetplayJoin" msgid "Refresh Session List" msgstr "セッション一覧を更新" -#: src/ui/gui/netplay_join.slint:105 +#: src/ui/gui/netplay_join.slint:114 msgctxt "NetplayJoin" msgid "Join Session" msgstr "セッションに参加" -#: src/ui/gui/netplay_join.slint:117 +#: src/ui/gui/netplay_join.slint:127 msgctxt "NetplayJoin" msgid "Cancel" msgstr "キャンセル" -#: src/ui/gui/netplay_page.slint:31 +#: src/ui/gui/netplay_page.slint:37 msgctxt "Netplay" msgid "Netplay" msgstr "ネットプレイ" -#: src/ui/gui/netplay_page.slint:39 +#: src/ui/gui/netplay_page.slint:45 msgctxt "Netplay" msgid "Create Session" msgstr "セッションを作成" -#: src/ui/gui/netplay_page.slint:50 +#: src/ui/gui/netplay_page.slint:56 msgctxt "Netplay" msgid "Join Session" msgstr "セッションに参加" -#: src/ui/gui/netplay_page.slint:64 +#: src/ui/gui/netplay_page.slint:70 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "ネットプレイ用Discordチャンネル" -#: src/ui/gui/netplay_page.slint:71 +#: src/ui/gui/netplay_page.slint:77 msgctxt "Netplay" msgid "Provide Feedback" msgstr "フィードバックを送る" -#: src/ui/gui/netplay_wait.slint:17 +#: src/ui/gui/netplay_wait.slint:27 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "ネットプレイ:待機室" -#: src/ui/gui/netplay_wait.slint:29 +#: src/ui/gui/netplay_wait.slint:39 msgctxt "NetplayWait" msgid "Session Name:" msgstr "セッション名:" -#: src/ui/gui/netplay_wait.slint:35 +#: src/ui/gui/netplay_wait.slint:45 msgctxt "NetplayWait" msgid "Game Name:" msgstr "ゲーム名:" -#: src/ui/gui/netplay_wait.slint:45 +#: src/ui/gui/netplay_wait.slint:55 msgctxt "NetplayWait" msgid "Player 1:" msgstr "プレイヤー1:" -#: src/ui/gui/netplay_wait.slint:49 +#: src/ui/gui/netplay_wait.slint:59 msgctxt "NetplayWait" msgid "Player 2:" msgstr "プレイヤー2:" -#: src/ui/gui/netplay_wait.slint:55 +#: src/ui/gui/netplay_wait.slint:65 msgctxt "NetplayWait" msgid "Player 3:" msgstr "プレイヤー3:" -#: src/ui/gui/netplay_wait.slint:59 +#: src/ui/gui/netplay_wait.slint:69 msgctxt "NetplayWait" msgid "Player 4:" msgstr "プレイヤー4:" -#: src/ui/gui/netplay_wait.slint:73 +#: src/ui/gui/netplay_wait.slint:83 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "チャットメッセージを入力" -#: src/ui/gui/netplay_wait.slint:84 +#: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "Send Message" msgstr "送信" -#: src/ui/gui/netplay_wait.slint:94 +#: src/ui/gui/netplay_wait.slint:104 msgctxt "NetplayWait" msgid "" "Setting the input delay too low will cause the game to lag.\n" @@ -398,182 +421,182 @@ msgstr "" "入力遅延を低く設定しすぎるとゲームが遅延します。\n" "Alt+[ でゲーム内の入力遅延を下げ、Alt+] で上げることができます。" -#: src/ui/gui/netplay_wait.slint:101 +#: src/ui/gui/netplay_wait.slint:112 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "ローカル入力遅延:" -#: src/ui/gui/netplay_wait.slint:118 +#: src/ui/gui/netplay_wait.slint:129 msgctxt "NetplayWait" msgid "Recommended: " msgstr "推奨: " -#: src/ui/gui/netplay_wait.slint:127 +#: src/ui/gui/netplay_wait.slint:138 msgctxt "NetplayWait" msgid "Start Game" msgstr "ゲーム開始" -#: src/ui/gui/netplay_wait.slint:127 +#: src/ui/gui/netplay_wait.slint:138 msgctxt "NetplayWait" msgid "Waiting for P2P mesh " msgstr "P2Pメッシュ接続待機中 " -#: src/ui/gui/netplay_wait.slint:135 +#: src/ui/gui/netplay_wait.slint:147 msgctxt "NetplayWait" msgid "Cancel" msgstr "キャンセル" -#: src/ui/gui/retroachievements_page.slint:19 +#: src/ui/gui/retroachievements_page.slint:25 msgctxt "RAData" msgid "Not currently logged in" msgstr "ログインしていません" -#: src/ui/gui/retroachievements_page.slint:27 +#: src/ui/gui/retroachievements_page.slint:33 msgctxt "RetroAchievements" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/retroachievements_page.slint:36 +#: src/ui/gui/retroachievements_page.slint:42 msgctxt "RetroAchievements" msgid "Enabled" msgstr "有効" -#: src/ui/gui/retroachievements_page.slint:51 +#: src/ui/gui/retroachievements_page.slint:58 msgctxt "RetroAchievements" msgid "Hardcore mode" msgstr "ハードコアモード" -#: src/ui/gui/retroachievements_page.slint:60 +#: src/ui/gui/retroachievements_page.slint:67 msgctxt "RetroAchievements" msgid "Challenge Indicators" msgstr "チャレンジ表示" -#: src/ui/gui/retroachievements_page.slint:69 +#: src/ui/gui/retroachievements_page.slint:77 msgctxt "RetroAchievements" msgid "Leaderboard Trackers" msgstr "リーダーボード追跡" -#: src/ui/gui/retroachievements_page.slint:78 +#: src/ui/gui/retroachievements_page.slint:87 msgctxt "RetroAchievements" msgid "Discord Rich Presence" msgstr "Discord のリッチプレゼンス" -#: src/ui/gui/retroachievements_page.slint:96 +#: src/ui/gui/retroachievements_page.slint:107 msgctxt "RetroAchievements" msgid "View Profile" msgstr "プロフィールを表示" -#: src/ui/gui/retroachievements_page.slint:106 +#: src/ui/gui/retroachievements_page.slint:118 msgctxt "RetroAchievements" msgid "Username" msgstr "ユーザー名" -#: src/ui/gui/retroachievements_page.slint:116 +#: src/ui/gui/retroachievements_page.slint:128 msgctxt "RetroAchievements" msgid "Password" msgstr "パスワード" -#: src/ui/gui/retroachievements_page.slint:125 +#: src/ui/gui/retroachievements_page.slint:138 msgctxt "RetroAchievements" msgid "Login" msgstr "ログイン" -#: src/ui/gui/retroachievements_page.slint:141 +#: src/ui/gui/retroachievements_page.slint:156 msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "対応ゲームを表示" -#: src/ui/gui/settings_page.slint:25 +#: src/ui/gui/settings_page.slint:31 msgctxt "Settings" msgid "Settings" msgstr "設定" -#: src/ui/gui/settings_page.slint:32 +#: src/ui/gui/settings_page.slint:38 msgctxt "Settings" msgid "Game" msgstr "ゲーム" -#: src/ui/gui/settings_page.slint:38 +#: src/ui/gui/settings_page.slint:44 msgctxt "Settings" msgid "Resolution:" msgstr "解像度:" -#: src/ui/gui/settings_page.slint:51 +#: src/ui/gui/settings_page.slint:58 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAAダウンスケール" -#: src/ui/gui/settings_page.slint:59 +#: src/ui/gui/settings_page.slint:66 msgctxt "Settings" msgid "Integer Scaling" msgstr "整数倍スケーリング" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:74 msgctxt "Settings" msgid "Fullscreen" msgstr "全画面表示" -#: src/ui/gui/settings_page.slint:75 +#: src/ui/gui/settings_page.slint:82 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "ワイド画面(伸ばす)" -#: src/ui/gui/settings_page.slint:83 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "垂直同期(VSync)" -#: src/ui/gui/settings_page.slint:91 +#: src/ui/gui/settings_page.slint:98 msgctxt "Settings" msgid "Apply CRT shader" msgstr "CRTシェーダーを適用" -#: src/ui/gui/settings_page.slint:103 +#: src/ui/gui/settings_page.slint:110 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "N64のCPUをオーバークロック(不具合の原因になることがあります)" -#: src/ui/gui/settings_page.slint:111 +#: src/ui/gui/settings_page.slint:118 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "拡張パックを無効にする" -#: src/ui/gui/settings_page.slint:119 +#: src/ui/gui/settings_page.slint:126 msgctxt "Settings" msgid "Enable Rewind" msgstr "巻き戻しを有効にする" -#: src/ui/gui/settings_page.slint:127 +#: src/ui/gui/settings_page.slint:134 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "UNFLoaderをエミュレート" -#: src/ui/gui/settings_page.slint:135 +#: src/ui/gui/settings_page.slint:142 msgctxt "Settings" msgid "Emulate VRU" msgstr "VRUをエミュレート" -#: src/ui/gui/settings_page.slint:144 +#: src/ui/gui/settings_page.slint:152 msgctxt "Settings" msgid "UI" msgstr "UI" -#: src/ui/gui/settings_page.slint:150 +#: src/ui/gui/settings_page.slint:158 msgctxt "Settings" msgid "Theme:" msgstr "テーマ:" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "System" msgstr "システム" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "Dark" msgstr "ダーク" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "Light" msgstr "ライト" diff --git a/data/translations/nl/LC_MESSAGES/gopher64.po b/data/translations/nl/LC_MESSAGES/gopher64.po index 05634ac..5327be6 100644 --- a/data/translations/nl/LC_MESSAGES/gopher64.po +++ b/data/translations/nl/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-30 09:43+0000\n" +"POT-Creation-Date: 2026-08-03 15:22+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Dutch (Netherlands)\n" @@ -47,187 +47,210 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Doneren (via GitHub)" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:177 msgctxt "Menu" msgid "Local Game" msgstr "Lokaal spel" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:181 msgctxt "Menu" msgid "Controller Config" msgstr "Controllerconfiguratie" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:185 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:176 +#: src/ui/gui/appwindow.slint:189 msgctxt "Menu" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/appwindow.slint:180 +#: src/ui/gui/appwindow.slint:193 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:184 +#: src/ui/gui/appwindow.slint:197 msgctxt "Menu" msgid "Settings" msgstr "Instellingen" -#: src/ui/gui/appwindow.slint:188 +#: src/ui/gui/appwindow.slint:201 msgctxt "Menu" msgid "About" msgstr "Over" -#: src/ui/gui/cheat_page.slint:15 +#: src/ui/gui/cheat_page.slint:28 msgctxt "Cheats" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/cheat_page.slint:25 +#: src/ui/gui/cheat_page.slint:38 msgctxt "Cheats" msgid "Select ROM" msgstr "ROM selecteren" -#: src/ui/gui/cheat_page.slint:41 +#: src/ui/gui/cheat_page.slint:54 msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Cheats wissen voor alle ROM's" -#: src/ui/gui/cheat_page.slint:83 +#: src/ui/gui/cheat_page.slint:96 msgctxt "Cheats" msgid "No Cheats Available" msgstr "Geen cheats beschikbaar" -#: src/ui/gui/controller_page.slint:80 +#: src/ui/gui/controller_page.slint:87 msgctxt "ControllerSettingsGrid" msgid "Enabled" msgstr "Ingeschakeld" -#: src/ui/gui/controller_page.slint:93 +#: src/ui/gui/controller_page.slint:100 msgctxt "ControllerSettingsGrid" msgid "Transfer Pak" msgstr "Transfer Pak" -#: src/ui/gui/controller_page.slint:107 +#: src/ui/gui/controller_page.slint:114 msgctxt "ControllerSettingsGrid" msgid "Profile" msgstr "Profiel" -#: src/ui/gui/controller_page.slint:157 +#: src/ui/gui/controller_page.slint:164 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Controllerconfiguratie" -#: src/ui/gui/controller_page.slint:171 +#: src/ui/gui/controller_page.slint:178 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Invoerprofiel configureren" -#: src/ui/gui/controller_page.slint:180 +#: src/ui/gui/controller_page.slint:187 msgctxt "ControllerConfig" msgid "Controller Settings" msgstr "Controllerinstellingen" -#: src/ui/gui/controller_page.slint:190 +#: src/ui/gui/controller_page.slint:197 msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "Controllertoewijzing" -#: src/ui/gui/input_profile.slint:12 +#: src/ui/gui/input_profile.slint:19 msgctxt "InputProfileDialog" msgid "Create/Modify Input Profile" msgstr "Invoerprofiel maken/wijzigen" -#: src/ui/gui/input_profile.slint:25 +#: src/ui/gui/input_profile.slint:32 msgctxt "InputProfileDialog" msgid "Enter profile name to create or modify" msgstr "Profielnaam invoeren om aan te maken of te wijzigen" -#: src/ui/gui/input_profile.slint:38 +#: src/ui/gui/input_profile.slint:45 msgctxt "InputProfileDialog" msgid "Deadzone Percentage" msgstr "Dode-zonepercentage" -#: src/ui/gui/input_profile.slint:61 +#: src/ui/gui/input_profile.slint:68 msgctxt "InputProfileDialog" msgid "Use DirectInput" msgstr "DirectInput gebruiken" -#: src/ui/gui/input_profile.slint:74 +#: src/ui/gui/input_profile.slint:81 msgctxt "InputProfileDialog" msgid "Start Profile Creation Wizard" msgstr "Wizard voor profiel maken starten" -#: src/ui/gui/input_profile.slint:82 +#: src/ui/gui/input_profile.slint:90 msgctxt "InputProfileDialog" msgid "Cancel" msgstr "Annuleren" -#: src/ui/gui/localgame_page.slint:19 +#: src/ui/gui/input_profile.slint:101 +msgctxt "InputProfileDialog" +msgid "" +"When using DirectInput and/or keyboard, navigate the dialog using the arrow " +"keys.\n" +"Press Enter to begin binding a button/axis.\n" +"Press Delete to remove a binding.\n" +"\n" +"When using a PlayStation-style controller, navigate the dialog using the D-" +"pad.\n" +"Press the South/East button to begin binding a button/axis.\n" +"Press the North/West button to remove a binding." +msgstr "" +"Bij gebruik van DirectInput en/of het toetsenbord navigeert u door het " +"dialoogvenster met de pijltjestoetsen.\n" +"Druk op Enter om te beginnen met het toewijzen van een knop/as.\n" +"Druk op Delete om een toewijzing te verwijderen.\n" +"\n" +"Bij gebruik van een PlayStation-stijl controller navigeert u door het " +"dialoogvenster met de D-pad.\n" +"Druk op de Zuid/Oost-knop om te beginnen met het toewijzen van een knop/as.\n" +"Druk op de Noord/West-knop om een toewijzing te verwijderen." + +#: src/ui/gui/localgame_page.slint:24 msgctxt "LocalGame" msgid "Local Game" msgstr "Lokaal spel" -#: src/ui/gui/localgame_page.slint:26 +#: src/ui/gui/localgame_page.slint:31 msgctxt "LocalGame" msgid "Open ROM" msgstr "ROM openen" -#: src/ui/gui/localgame_page.slint:37 +#: src/ui/gui/localgame_page.slint:42 msgctxt "LocalGame" msgid "Open Saves Folder" msgstr "Map met opslagen openen" -#: src/ui/gui/localgame_page.slint:54 +#: src/ui/gui/localgame_page.slint:59 msgctxt "LocalGame" msgid "Recent ROMs" msgstr "Recent gebruikte ROM's" -#: src/ui/gui/netplay_create.slint:7 +#: src/ui/gui/netplay_create.slint:16 msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "Netplay: sessie aanmaken" -#: src/ui/gui/netplay_create.slint:22 +#: src/ui/gui/netplay_create.slint:31 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "Sessienaam:" -#: src/ui/gui/netplay_create.slint:26 +#: src/ui/gui/netplay_create.slint:35 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "Sessienaam invoeren" -#: src/ui/gui/netplay_create.slint:36 +#: src/ui/gui/netplay_create.slint:45 msgctxt "NetplayCreate" msgid "Password (Optional):" msgstr "Wachtwoord (optioneel):" -#: src/ui/gui/netplay_create.slint:40 +#: src/ui/gui/netplay_create.slint:49 msgctxt "NetplayCreate" msgid "Enter session password" msgstr "Sessiewachtwoord invoeren" -#: src/ui/gui/netplay_create.slint:51 +#: src/ui/gui/netplay_create.slint:60 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "Spelernaam:" -#: src/ui/gui/netplay_create.slint:55 +#: src/ui/gui/netplay_create.slint:64 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "Spelernaam invoeren" -#: src/ui/gui/netplay_create.slint:66 +#: src/ui/gui/netplay_create.slint:75 msgctxt "NetplayCreate" msgid "Select ROM" msgstr "ROM selecteren" -#: src/ui/gui/netplay_create.slint:82 +#: src/ui/gui/netplay_create.slint:91 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." @@ -235,162 +258,162 @@ msgstr "" "Voor dit spel zijn cheats ingeschakeld. Cheats worden gesynchroniseerd met " "andere spelers." -#: src/ui/gui/netplay_create.slint:91 +#: src/ui/gui/netplay_create.slint:100 msgctxt "NetplayCreate" msgid "Create Session" msgstr "Sessie aanmaken" -#: src/ui/gui/netplay_create.slint:107 +#: src/ui/gui/netplay_create.slint:117 msgctxt "NetplayCreate" msgid "Cancel" msgstr "Annuleren" -#: src/ui/gui/netplay_join.slint:7 +#: src/ui/gui/netplay_join.slint:15 msgctxt "NetplayJoin" msgid "Netplay: Join Session" msgstr "Netplay: deelnemen aan sessie" -#: src/ui/gui/netplay_join.slint:18 +#: src/ui/gui/netplay_join.slint:26 msgctxt "NetplayJoin" msgid "Player Name (required):" msgstr "Spelernaam (verplicht):" -#: src/ui/gui/netplay_join.slint:22 +#: src/ui/gui/netplay_join.slint:30 msgctxt "NetplayJoin" msgid "Enter player name" msgstr "Spelernaam invoeren" -#: src/ui/gui/netplay_join.slint:31 +#: src/ui/gui/netplay_join.slint:39 msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "Wachtwoord (indien vereist)" -#: src/ui/gui/netplay_join.slint:42 +#: src/ui/gui/netplay_join.slint:51 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "ROM selecteren" -#: src/ui/gui/netplay_join.slint:57 +#: src/ui/gui/netplay_join.slint:66 msgctxt "NetplayJoin" msgid "Refreshing session list, please wait..." msgstr "Sessielijst wordt vernieuwd, even geduld…" -#: src/ui/gui/netplay_join.slint:62 +#: src/ui/gui/netplay_join.slint:71 msgctxt "NetplayJoin" msgid "Click on a session below to select it" msgstr "Klik hieronder op een sessie om die te selecteren" -#: src/ui/gui/netplay_join.slint:67 +#: src/ui/gui/netplay_join.slint:76 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." msgstr "Geen sessies beschikbaar. Vernieuw om opnieuw te controleren." -#: src/ui/gui/netplay_join.slint:73 +#: src/ui/gui/netplay_join.slint:82 msgctxt "NetplayJoin" msgid "Session Name" msgstr "Sessienaam" -#: src/ui/gui/netplay_join.slint:74 +#: src/ui/gui/netplay_join.slint:83 msgctxt "NetplayJoin" msgid "Game Name" msgstr "Spelnaam" -#: src/ui/gui/netplay_join.slint:75 +#: src/ui/gui/netplay_join.slint:84 msgctxt "NetplayJoin" msgid "Password" msgstr "Wachtwoord" -#: src/ui/gui/netplay_join.slint:76 +#: src/ui/gui/netplay_join.slint:85 msgctxt "NetplayJoin" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/netplay_join.slint:90 +#: src/ui/gui/netplay_join.slint:99 msgctxt "NetplayJoin" msgid "Refresh Session List" msgstr "Sessielijst vernieuwen" -#: src/ui/gui/netplay_join.slint:105 +#: src/ui/gui/netplay_join.slint:114 msgctxt "NetplayJoin" msgid "Join Session" msgstr "Deelnemen aan sessie" -#: src/ui/gui/netplay_join.slint:117 +#: src/ui/gui/netplay_join.slint:127 msgctxt "NetplayJoin" msgid "Cancel" msgstr "Annuleren" -#: src/ui/gui/netplay_page.slint:31 +#: src/ui/gui/netplay_page.slint:37 msgctxt "Netplay" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/netplay_page.slint:39 +#: src/ui/gui/netplay_page.slint:45 msgctxt "Netplay" msgid "Create Session" msgstr "Sessie aanmaken" -#: src/ui/gui/netplay_page.slint:50 +#: src/ui/gui/netplay_page.slint:56 msgctxt "Netplay" msgid "Join Session" msgstr "Deelnemen aan sessie" -#: src/ui/gui/netplay_page.slint:64 +#: src/ui/gui/netplay_page.slint:70 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "Netplay-Discordkanaal" -#: src/ui/gui/netplay_page.slint:71 +#: src/ui/gui/netplay_page.slint:77 msgctxt "Netplay" msgid "Provide Feedback" msgstr "Feedback geven" -#: src/ui/gui/netplay_wait.slint:17 +#: src/ui/gui/netplay_wait.slint:27 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay: wachtruimte" -#: src/ui/gui/netplay_wait.slint:29 +#: src/ui/gui/netplay_wait.slint:39 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Sessienaam:" -#: src/ui/gui/netplay_wait.slint:35 +#: src/ui/gui/netplay_wait.slint:45 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Spelnaam:" -#: src/ui/gui/netplay_wait.slint:45 +#: src/ui/gui/netplay_wait.slint:55 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Speler 1:" -#: src/ui/gui/netplay_wait.slint:49 +#: src/ui/gui/netplay_wait.slint:59 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Speler 2:" -#: src/ui/gui/netplay_wait.slint:55 +#: src/ui/gui/netplay_wait.slint:65 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Speler 3:" -#: src/ui/gui/netplay_wait.slint:59 +#: src/ui/gui/netplay_wait.slint:69 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Speler 4:" -#: src/ui/gui/netplay_wait.slint:73 +#: src/ui/gui/netplay_wait.slint:83 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Chatbericht invoeren" -#: src/ui/gui/netplay_wait.slint:84 +#: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "Send Message" msgstr "Bericht verzenden" -#: src/ui/gui/netplay_wait.slint:94 +#: src/ui/gui/netplay_wait.slint:104 msgctxt "NetplayWait" msgid "" "Setting the input delay too low will cause the game to lag.\n" @@ -401,182 +424,182 @@ msgstr "" "Je kunt de invoervertraging in het spel verlagen met Alt+[ en verhogen met " "Alt+]." -#: src/ui/gui/netplay_wait.slint:101 +#: src/ui/gui/netplay_wait.slint:112 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Lokale invoervertraging:" -#: src/ui/gui/netplay_wait.slint:118 +#: src/ui/gui/netplay_wait.slint:129 msgctxt "NetplayWait" msgid "Recommended: " msgstr "Aanbevolen: " -#: src/ui/gui/netplay_wait.slint:127 +#: src/ui/gui/netplay_wait.slint:138 msgctxt "NetplayWait" msgid "Start Game" msgstr "Spel starten" -#: src/ui/gui/netplay_wait.slint:127 +#: src/ui/gui/netplay_wait.slint:138 msgctxt "NetplayWait" msgid "Waiting for P2P mesh " msgstr "Wachten op P2P-mesh " -#: src/ui/gui/netplay_wait.slint:135 +#: src/ui/gui/netplay_wait.slint:147 msgctxt "NetplayWait" msgid "Cancel" msgstr "Annuleren" -#: src/ui/gui/retroachievements_page.slint:19 +#: src/ui/gui/retroachievements_page.slint:25 msgctxt "RAData" msgid "Not currently logged in" msgstr "Momenteel niet ingelogd" -#: src/ui/gui/retroachievements_page.slint:27 +#: src/ui/gui/retroachievements_page.slint:33 msgctxt "RetroAchievements" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/retroachievements_page.slint:36 +#: src/ui/gui/retroachievements_page.slint:42 msgctxt "RetroAchievements" msgid "Enabled" msgstr "Ingeschakeld" -#: src/ui/gui/retroachievements_page.slint:51 +#: src/ui/gui/retroachievements_page.slint:58 msgctxt "RetroAchievements" msgid "Hardcore mode" msgstr "Hardcore-modus" -#: src/ui/gui/retroachievements_page.slint:60 +#: src/ui/gui/retroachievements_page.slint:67 msgctxt "RetroAchievements" msgid "Challenge Indicators" msgstr "Challenge-indicatoren" -#: src/ui/gui/retroachievements_page.slint:69 +#: src/ui/gui/retroachievements_page.slint:77 msgctxt "RetroAchievements" msgid "Leaderboard Trackers" msgstr "Leaderboard-trackers" -#: src/ui/gui/retroachievements_page.slint:78 +#: src/ui/gui/retroachievements_page.slint:87 msgctxt "RetroAchievements" msgid "Discord Rich Presence" msgstr "Discord Rich Presence" -#: src/ui/gui/retroachievements_page.slint:96 +#: src/ui/gui/retroachievements_page.slint:107 msgctxt "RetroAchievements" msgid "View Profile" msgstr "Profiel bekijken" -#: src/ui/gui/retroachievements_page.slint:106 +#: src/ui/gui/retroachievements_page.slint:118 msgctxt "RetroAchievements" msgid "Username" msgstr "Gebruikersnaam" -#: src/ui/gui/retroachievements_page.slint:116 +#: src/ui/gui/retroachievements_page.slint:128 msgctxt "RetroAchievements" msgid "Password" msgstr "Wachtwoord" -#: src/ui/gui/retroachievements_page.slint:125 +#: src/ui/gui/retroachievements_page.slint:138 msgctxt "RetroAchievements" msgid "Login" msgstr "Inloggen" -#: src/ui/gui/retroachievements_page.slint:141 +#: src/ui/gui/retroachievements_page.slint:156 msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Ondersteunde spellen bekijken" -#: src/ui/gui/settings_page.slint:25 +#: src/ui/gui/settings_page.slint:31 msgctxt "Settings" msgid "Settings" msgstr "Instellingen" -#: src/ui/gui/settings_page.slint:32 +#: src/ui/gui/settings_page.slint:38 msgctxt "Settings" msgid "Game" msgstr "Spel" -#: src/ui/gui/settings_page.slint:38 +#: src/ui/gui/settings_page.slint:44 msgctxt "Settings" msgid "Resolution:" msgstr "Resolutie:" -#: src/ui/gui/settings_page.slint:51 +#: src/ui/gui/settings_page.slint:58 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAA-downscaling" -#: src/ui/gui/settings_page.slint:59 +#: src/ui/gui/settings_page.slint:66 msgctxt "Settings" msgid "Integer Scaling" msgstr "Schalen in hele getallen" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:74 msgctxt "Settings" msgid "Fullscreen" msgstr "Volledig scherm" -#: src/ui/gui/settings_page.slint:75 +#: src/ui/gui/settings_page.slint:82 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Breedbeeld (uitgerekt)" -#: src/ui/gui/settings_page.slint:83 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "VSync" -#: src/ui/gui/settings_page.slint:91 +#: src/ui/gui/settings_page.slint:98 msgctxt "Settings" msgid "Apply CRT shader" msgstr "CRT-shader toepassen" -#: src/ui/gui/settings_page.slint:103 +#: src/ui/gui/settings_page.slint:110 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "N64-CPU overklokken (kan bugs veroorzaken)" -#: src/ui/gui/settings_page.slint:111 +#: src/ui/gui/settings_page.slint:118 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Expansion Pak uitschakelen" -#: src/ui/gui/settings_page.slint:119 +#: src/ui/gui/settings_page.slint:126 msgctxt "Settings" msgid "Enable Rewind" msgstr "Terugspoelen inschakelen" -#: src/ui/gui/settings_page.slint:127 +#: src/ui/gui/settings_page.slint:134 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "UNFLoader emuleren" -#: src/ui/gui/settings_page.slint:135 +#: src/ui/gui/settings_page.slint:142 msgctxt "Settings" msgid "Emulate VRU" msgstr "VRU emuleren" -#: src/ui/gui/settings_page.slint:144 +#: src/ui/gui/settings_page.slint:152 msgctxt "Settings" msgid "UI" msgstr "Interface" -#: src/ui/gui/settings_page.slint:150 +#: src/ui/gui/settings_page.slint:158 msgctxt "Settings" msgid "Theme:" msgstr "Thema:" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "System" msgstr "Systeem" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "Dark" msgstr "Donker" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "Light" msgstr "Licht" diff --git a/data/translations/pt_BR/LC_MESSAGES/gopher64.po b/data/translations/pt_BR/LC_MESSAGES/gopher64.po index 1f4456b..51a6fb7 100644 --- a/data/translations/pt_BR/LC_MESSAGES/gopher64.po +++ b/data/translations/pt_BR/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-06-30 09:43+0000\n" +"POT-Creation-Date: 2026-08-03 15:22+0000\n" "PO-Revision-Date: 2026-05-11 18:11-3000\n" "Last-Translator: EDUARDO CARVALHO \n" "Language-Team: LANGUAGE \n" @@ -47,187 +47,210 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Doações (via GitHub)" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:177 msgctxt "Menu" msgid "Local Game" msgstr "Jogo Local" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:181 msgctxt "Menu" msgid "Controller Config" msgstr "Configurar Controle" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:185 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:176 +#: src/ui/gui/appwindow.slint:189 msgctxt "Menu" msgid "Cheats" msgstr "Trapaças" -#: src/ui/gui/appwindow.slint:180 +#: src/ui/gui/appwindow.slint:193 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:184 +#: src/ui/gui/appwindow.slint:197 msgctxt "Menu" msgid "Settings" msgstr "Configurações" -#: src/ui/gui/appwindow.slint:188 +#: src/ui/gui/appwindow.slint:201 msgctxt "Menu" msgid "About" msgstr "Sobre" -#: src/ui/gui/cheat_page.slint:15 +#: src/ui/gui/cheat_page.slint:28 msgctxt "Cheats" msgid "Cheats" msgstr "Trapaças" -#: src/ui/gui/cheat_page.slint:25 +#: src/ui/gui/cheat_page.slint:38 msgctxt "Cheats" msgid "Select ROM" msgstr "Selecionar ROM" -#: src/ui/gui/cheat_page.slint:41 +#: src/ui/gui/cheat_page.slint:54 msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Limpar Trapaças para todas as ROMs" -#: src/ui/gui/cheat_page.slint:83 +#: src/ui/gui/cheat_page.slint:96 msgctxt "Cheats" msgid "No Cheats Available" msgstr "Sem trapaças disponíveis" -#: src/ui/gui/controller_page.slint:80 +#: src/ui/gui/controller_page.slint:87 msgctxt "ControllerSettingsGrid" msgid "Enabled" msgstr "Habilitado" -#: src/ui/gui/controller_page.slint:93 +#: src/ui/gui/controller_page.slint:100 msgctxt "ControllerSettingsGrid" msgid "Transfer Pak" msgstr "Transfer Pak" -#: src/ui/gui/controller_page.slint:107 +#: src/ui/gui/controller_page.slint:114 msgctxt "ControllerSettingsGrid" msgid "Profile" msgstr "Perfil" -#: src/ui/gui/controller_page.slint:157 +#: src/ui/gui/controller_page.slint:164 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Configurar Controles" -#: src/ui/gui/controller_page.slint:171 +#: src/ui/gui/controller_page.slint:178 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Configurar Perfil de Controle" -#: src/ui/gui/controller_page.slint:180 +#: src/ui/gui/controller_page.slint:187 msgctxt "ControllerConfig" msgid "Controller Settings" msgstr "Configurações do controle" -#: src/ui/gui/controller_page.slint:190 +#: src/ui/gui/controller_page.slint:197 msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "Atribuição do controle" -#: src/ui/gui/input_profile.slint:12 +#: src/ui/gui/input_profile.slint:19 msgctxt "InputProfileDialog" msgid "Create/Modify Input Profile" msgstr "Criar/Modificar Perfil de Comandos" -#: src/ui/gui/input_profile.slint:25 +#: src/ui/gui/input_profile.slint:32 msgctxt "InputProfileDialog" msgid "Enter profile name to create or modify" msgstr "Insira o nome de perfil para criar ou modificar" -#: src/ui/gui/input_profile.slint:38 +#: src/ui/gui/input_profile.slint:45 msgctxt "InputProfileDialog" msgid "Deadzone Percentage" msgstr "Porcentagem de Zona-morta" -#: src/ui/gui/input_profile.slint:61 +#: src/ui/gui/input_profile.slint:68 msgctxt "InputProfileDialog" msgid "Use DirectInput" msgstr "Usar DirectInput" -#: src/ui/gui/input_profile.slint:74 +#: src/ui/gui/input_profile.slint:81 msgctxt "InputProfileDialog" msgid "Start Profile Creation Wizard" msgstr "Iniciar Assistente de Criação de Perfil" -#: src/ui/gui/input_profile.slint:82 +#: src/ui/gui/input_profile.slint:90 msgctxt "InputProfileDialog" msgid "Cancel" msgstr "Cancelar" -#: src/ui/gui/localgame_page.slint:19 +#: src/ui/gui/input_profile.slint:101 +msgctxt "InputProfileDialog" +msgid "" +"When using DirectInput and/or keyboard, navigate the dialog using the arrow " +"keys.\n" +"Press Enter to begin binding a button/axis.\n" +"Press Delete to remove a binding.\n" +"\n" +"When using a PlayStation-style controller, navigate the dialog using the D-" +"pad.\n" +"Press the South/East button to begin binding a button/axis.\n" +"Press the North/West button to remove a binding." +msgstr "" +"Ao usar DirectInput e/ou o teclado, navegue pelo diálogo usando as teclas de " +"seta.\n" +"Pressione Enter para começar a vincular um botão/eixo.\n" +"Pressione Delete para remover uma vinculação.\n" +"\n" +"Ao usar um controle no estilo PlayStation, navegue pelo diálogo usando o D-" +"pad.\n" +"Pressione o botão Sul/Leste para começar a vincular um botão/eixo.\n" +"Pressione o botão Norte/Oeste para remover uma vinculação." + +#: src/ui/gui/localgame_page.slint:24 msgctxt "LocalGame" msgid "Local Game" msgstr "Jogo Local" -#: src/ui/gui/localgame_page.slint:26 +#: src/ui/gui/localgame_page.slint:31 msgctxt "LocalGame" msgid "Open ROM" msgstr "Abrir ROM" -#: src/ui/gui/localgame_page.slint:37 +#: src/ui/gui/localgame_page.slint:42 msgctxt "LocalGame" msgid "Open Saves Folder" msgstr "Abrir Pasta de Saves" -#: src/ui/gui/localgame_page.slint:54 +#: src/ui/gui/localgame_page.slint:59 msgctxt "LocalGame" msgid "Recent ROMs" msgstr "ROMs Recentes" -#: src/ui/gui/netplay_create.slint:7 +#: src/ui/gui/netplay_create.slint:16 msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "Netplay: Criar Sessão" -#: src/ui/gui/netplay_create.slint:22 +#: src/ui/gui/netplay_create.slint:31 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "Nome da Sessão:" -#: src/ui/gui/netplay_create.slint:26 +#: src/ui/gui/netplay_create.slint:35 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "Insira nome da sessão" -#: src/ui/gui/netplay_create.slint:36 +#: src/ui/gui/netplay_create.slint:45 msgctxt "NetplayCreate" msgid "Password (Optional):" msgstr "Senha: (Opcional):" -#: src/ui/gui/netplay_create.slint:40 +#: src/ui/gui/netplay_create.slint:49 msgctxt "NetplayCreate" msgid "Enter session password" msgstr "Insira a senha da sessão" -#: src/ui/gui/netplay_create.slint:51 +#: src/ui/gui/netplay_create.slint:60 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "Nome de Jogador:" -#: src/ui/gui/netplay_create.slint:55 +#: src/ui/gui/netplay_create.slint:64 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "Insira nome de jogador" -#: src/ui/gui/netplay_create.slint:66 +#: src/ui/gui/netplay_create.slint:75 msgctxt "NetplayCreate" msgid "Select ROM" msgstr "Selecionar ROM" -#: src/ui/gui/netplay_create.slint:82 +#: src/ui/gui/netplay_create.slint:91 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." @@ -235,163 +258,163 @@ msgstr "" "Este jogo tem trapaças habilitadas. As trapaças serão sincronizadas com " "outros jogadores." -#: src/ui/gui/netplay_create.slint:91 +#: src/ui/gui/netplay_create.slint:100 msgctxt "NetplayCreate" msgid "Create Session" msgstr "Criar Sessão" -#: src/ui/gui/netplay_create.slint:107 +#: src/ui/gui/netplay_create.slint:117 msgctxt "NetplayCreate" msgid "Cancel" msgstr "Cancelar" -#: src/ui/gui/netplay_join.slint:7 +#: src/ui/gui/netplay_join.slint:15 msgctxt "NetplayJoin" msgid "Netplay: Join Session" msgstr "Netplay: Entrar na sessão" -#: src/ui/gui/netplay_join.slint:18 +#: src/ui/gui/netplay_join.slint:26 msgctxt "NetplayJoin" msgid "Player Name (required):" msgstr "Nome de Jogador (obrigatório):" -#: src/ui/gui/netplay_join.slint:22 +#: src/ui/gui/netplay_join.slint:30 msgctxt "NetplayJoin" msgid "Enter player name" msgstr "Insira o nome de jogador" -#: src/ui/gui/netplay_join.slint:31 +#: src/ui/gui/netplay_join.slint:39 msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "Senha (caso obrigatória)" -#: src/ui/gui/netplay_join.slint:42 +#: src/ui/gui/netplay_join.slint:51 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "Selecionar ROM" -#: src/ui/gui/netplay_join.slint:57 +#: src/ui/gui/netplay_join.slint:66 msgctxt "NetplayJoin" msgid "Refreshing session list, please wait..." msgstr "Recarregando lista de sessões, por favor aguarde..." -#: src/ui/gui/netplay_join.slint:62 +#: src/ui/gui/netplay_join.slint:71 msgctxt "NetplayJoin" msgid "Click on a session below to select it" msgstr "Clique em uma sessão abaixo para selecionar" -#: src/ui/gui/netplay_join.slint:67 +#: src/ui/gui/netplay_join.slint:76 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." msgstr "" "Sem sessões disponíveis. Por favor recarregue para verificar novamente." -#: src/ui/gui/netplay_join.slint:73 +#: src/ui/gui/netplay_join.slint:82 msgctxt "NetplayJoin" msgid "Session Name" msgstr "Nome da Sessão" -#: src/ui/gui/netplay_join.slint:74 +#: src/ui/gui/netplay_join.slint:83 msgctxt "NetplayJoin" msgid "Game Name" msgstr "Nome do Jogo" -#: src/ui/gui/netplay_join.slint:75 +#: src/ui/gui/netplay_join.slint:84 msgctxt "NetplayJoin" msgid "Password" msgstr "Senha" -#: src/ui/gui/netplay_join.slint:76 +#: src/ui/gui/netplay_join.slint:85 msgctxt "NetplayJoin" msgid "Cheats" msgstr "Trapaças" -#: src/ui/gui/netplay_join.slint:90 +#: src/ui/gui/netplay_join.slint:99 msgctxt "NetplayJoin" msgid "Refresh Session List" msgstr "Recarregar Lista de Sessões" -#: src/ui/gui/netplay_join.slint:105 +#: src/ui/gui/netplay_join.slint:114 msgctxt "NetplayJoin" msgid "Join Session" msgstr "Entrar na Sessão" -#: src/ui/gui/netplay_join.slint:117 +#: src/ui/gui/netplay_join.slint:127 msgctxt "NetplayJoin" msgid "Cancel" msgstr "Cancelar" -#: src/ui/gui/netplay_page.slint:31 +#: src/ui/gui/netplay_page.slint:37 msgctxt "Netplay" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/netplay_page.slint:39 +#: src/ui/gui/netplay_page.slint:45 msgctxt "Netplay" msgid "Create Session" msgstr "Criar Sessão" -#: src/ui/gui/netplay_page.slint:50 +#: src/ui/gui/netplay_page.slint:56 msgctxt "Netplay" msgid "Join Session" msgstr "Entrar na Sessão" -#: src/ui/gui/netplay_page.slint:64 +#: src/ui/gui/netplay_page.slint:70 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "Canal de Netplay do Discord" -#: src/ui/gui/netplay_page.slint:71 +#: src/ui/gui/netplay_page.slint:77 msgctxt "Netplay" msgid "Provide Feedback" msgstr "Fornecer Feedback" -#: src/ui/gui/netplay_wait.slint:17 +#: src/ui/gui/netplay_wait.slint:27 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Netplay: Aguardando Sala" -#: src/ui/gui/netplay_wait.slint:29 +#: src/ui/gui/netplay_wait.slint:39 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Nome da Sessão:" -#: src/ui/gui/netplay_wait.slint:35 +#: src/ui/gui/netplay_wait.slint:45 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Nome do Jogo:" -#: src/ui/gui/netplay_wait.slint:45 +#: src/ui/gui/netplay_wait.slint:55 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Jogador 1:" -#: src/ui/gui/netplay_wait.slint:49 +#: src/ui/gui/netplay_wait.slint:59 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Jogador 2:" -#: src/ui/gui/netplay_wait.slint:55 +#: src/ui/gui/netplay_wait.slint:65 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Jogador 3:" -#: src/ui/gui/netplay_wait.slint:59 +#: src/ui/gui/netplay_wait.slint:69 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Jogador 4:" -#: src/ui/gui/netplay_wait.slint:73 +#: src/ui/gui/netplay_wait.slint:83 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Escrever mensagem no chat" -#: src/ui/gui/netplay_wait.slint:84 +#: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "Send Message" msgstr "Enviar Mensagem" -#: src/ui/gui/netplay_wait.slint:94 +#: src/ui/gui/netplay_wait.slint:104 msgctxt "NetplayWait" msgid "" "Setting the input delay too low will cause the game to lag.\n" @@ -402,182 +425,182 @@ msgstr "" "Você pode diminuir o atraso de entrada no jogo pressionando Alt+[ e aumentá-" "lo com Alt+]." -#: src/ui/gui/netplay_wait.slint:101 +#: src/ui/gui/netplay_wait.slint:112 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Atraso de entrada local:" -#: src/ui/gui/netplay_wait.slint:118 +#: src/ui/gui/netplay_wait.slint:129 msgctxt "NetplayWait" msgid "Recommended: " msgstr "Recomendado: " -#: src/ui/gui/netplay_wait.slint:127 +#: src/ui/gui/netplay_wait.slint:138 msgctxt "NetplayWait" msgid "Start Game" msgstr "Iniciar jogo" -#: src/ui/gui/netplay_wait.slint:127 +#: src/ui/gui/netplay_wait.slint:138 msgctxt "NetplayWait" msgid "Waiting for P2P mesh " msgstr "Aguardando malha P2P " -#: src/ui/gui/netplay_wait.slint:135 +#: src/ui/gui/netplay_wait.slint:147 msgctxt "NetplayWait" msgid "Cancel" msgstr "Cancelar" -#: src/ui/gui/retroachievements_page.slint:19 +#: src/ui/gui/retroachievements_page.slint:25 msgctxt "RAData" msgid "Not currently logged in" msgstr "Não está logado." -#: src/ui/gui/retroachievements_page.slint:27 +#: src/ui/gui/retroachievements_page.slint:33 msgctxt "RetroAchievements" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/retroachievements_page.slint:36 +#: src/ui/gui/retroachievements_page.slint:42 msgctxt "RetroAchievements" msgid "Enabled" msgstr "Habilitado" -#: src/ui/gui/retroachievements_page.slint:51 +#: src/ui/gui/retroachievements_page.slint:58 msgctxt "RetroAchievements" msgid "Hardcore mode" msgstr "Modo Hardcore" -#: src/ui/gui/retroachievements_page.slint:60 +#: src/ui/gui/retroachievements_page.slint:67 msgctxt "RetroAchievements" msgid "Challenge Indicators" msgstr "Indicadores de Desafio" -#: src/ui/gui/retroachievements_page.slint:69 +#: src/ui/gui/retroachievements_page.slint:77 msgctxt "RetroAchievements" msgid "Leaderboard Trackers" msgstr "Rastreadores de Tabela" -#: src/ui/gui/retroachievements_page.slint:78 +#: src/ui/gui/retroachievements_page.slint:87 msgctxt "RetroAchievements" msgid "Discord Rich Presence" msgstr "Rich Presence no Discord" -#: src/ui/gui/retroachievements_page.slint:96 +#: src/ui/gui/retroachievements_page.slint:107 msgctxt "RetroAchievements" msgid "View Profile" msgstr "Ver Perfil" -#: src/ui/gui/retroachievements_page.slint:106 +#: src/ui/gui/retroachievements_page.slint:118 msgctxt "RetroAchievements" msgid "Username" msgstr "Usuário" -#: src/ui/gui/retroachievements_page.slint:116 +#: src/ui/gui/retroachievements_page.slint:128 msgctxt "RetroAchievements" msgid "Password" msgstr "Senha" -#: src/ui/gui/retroachievements_page.slint:125 +#: src/ui/gui/retroachievements_page.slint:138 msgctxt "RetroAchievements" msgid "Login" msgstr "Login" -#: src/ui/gui/retroachievements_page.slint:141 +#: src/ui/gui/retroachievements_page.slint:156 msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Ver Jogos com Suporte" -#: src/ui/gui/settings_page.slint:25 +#: src/ui/gui/settings_page.slint:31 msgctxt "Settings" msgid "Settings" msgstr "Configurações" -#: src/ui/gui/settings_page.slint:32 +#: src/ui/gui/settings_page.slint:38 msgctxt "Settings" msgid "Game" msgstr "Jogo" -#: src/ui/gui/settings_page.slint:38 +#: src/ui/gui/settings_page.slint:44 msgctxt "Settings" msgid "Resolution:" msgstr "Resolução:" -#: src/ui/gui/settings_page.slint:51 +#: src/ui/gui/settings_page.slint:58 msgctxt "Settings" msgid "SSAA downscaling" msgstr "Redução de SSAA" -#: src/ui/gui/settings_page.slint:59 +#: src/ui/gui/settings_page.slint:66 msgctxt "Settings" msgid "Integer Scaling" msgstr "Proporção Íntegra" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:74 msgctxt "Settings" msgid "Fullscreen" msgstr "Tela Cheia" -#: src/ui/gui/settings_page.slint:75 +#: src/ui/gui/settings_page.slint:82 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Widescreen (esticar)" -#: src/ui/gui/settings_page.slint:83 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "VSync" -#: src/ui/gui/settings_page.slint:91 +#: src/ui/gui/settings_page.slint:98 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Aplicar filtro de CRT" -#: src/ui/gui/settings_page.slint:103 +#: src/ui/gui/settings_page.slint:110 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Overclock da CPU do N64 (pode causar bugs)" -#: src/ui/gui/settings_page.slint:111 +#: src/ui/gui/settings_page.slint:118 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Desabilitar Expansion Pak" -#: src/ui/gui/settings_page.slint:119 +#: src/ui/gui/settings_page.slint:126 msgctxt "Settings" msgid "Enable Rewind" msgstr "Habilitar rebobinamento" -#: src/ui/gui/settings_page.slint:127 +#: src/ui/gui/settings_page.slint:134 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Emular UNFLoader" -#: src/ui/gui/settings_page.slint:135 +#: src/ui/gui/settings_page.slint:142 msgctxt "Settings" msgid "Emulate VRU" msgstr "Emular VRU" -#: src/ui/gui/settings_page.slint:144 +#: src/ui/gui/settings_page.slint:152 msgctxt "Settings" msgid "UI" msgstr "Interface" -#: src/ui/gui/settings_page.slint:150 +#: src/ui/gui/settings_page.slint:158 msgctxt "Settings" msgid "Theme:" msgstr "Tema:" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "System" msgstr "Sistema" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "Dark" msgstr "Escuro" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "Light" msgstr "Claro" diff --git a/data/translations/ru/LC_MESSAGES/gopher64.po b/data/translations/ru/LC_MESSAGES/gopher64.po index bf142c5..eece0d2 100644 --- a/data/translations/ru/LC_MESSAGES/gopher64.po +++ b/data/translations/ru/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-06-30 09:43+0000\n" +"POT-Creation-Date: 2026-08-03 15:22+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Russian\n" @@ -48,349 +48,372 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Пожертвовать (через GitHub)" -#: src/ui/gui/appwindow.slint:164 +#: src/ui/gui/appwindow.slint:177 msgctxt "Menu" msgid "Local Game" msgstr "Локальная игра" -#: src/ui/gui/appwindow.slint:168 +#: src/ui/gui/appwindow.slint:181 msgctxt "Menu" msgid "Controller Config" msgstr "Настройка контроллера" -#: src/ui/gui/appwindow.slint:172 +#: src/ui/gui/appwindow.slint:185 msgctxt "Menu" msgid "Netplay" msgstr "Сетевая игра" -#: src/ui/gui/appwindow.slint:176 +#: src/ui/gui/appwindow.slint:189 msgctxt "Menu" msgid "Cheats" msgstr "Читы" -#: src/ui/gui/appwindow.slint:180 +#: src/ui/gui/appwindow.slint:193 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:184 +#: src/ui/gui/appwindow.slint:197 msgctxt "Menu" msgid "Settings" msgstr "Настройки" -#: src/ui/gui/appwindow.slint:188 +#: src/ui/gui/appwindow.slint:201 msgctxt "Menu" msgid "About" msgstr "О программе" -#: src/ui/gui/cheat_page.slint:15 +#: src/ui/gui/cheat_page.slint:28 msgctxt "Cheats" msgid "Cheats" msgstr "Читы" -#: src/ui/gui/cheat_page.slint:25 +#: src/ui/gui/cheat_page.slint:38 msgctxt "Cheats" msgid "Select ROM" msgstr "Выбрать ROM" -#: src/ui/gui/cheat_page.slint:41 +#: src/ui/gui/cheat_page.slint:54 msgctxt "Cheats" msgid "Clear Cheats For All ROMs" msgstr "Очистить читы для всех ROMов" -#: src/ui/gui/cheat_page.slint:83 +#: src/ui/gui/cheat_page.slint:96 msgctxt "Cheats" msgid "No Cheats Available" msgstr "Читы недоступны" -#: src/ui/gui/controller_page.slint:80 +#: src/ui/gui/controller_page.slint:87 msgctxt "ControllerSettingsGrid" msgid "Enabled" msgstr "Включено" -#: src/ui/gui/controller_page.slint:93 +#: src/ui/gui/controller_page.slint:100 msgctxt "ControllerSettingsGrid" msgid "Transfer Pak" msgstr "Transfer Pak" -#: src/ui/gui/controller_page.slint:107 +#: src/ui/gui/controller_page.slint:114 msgctxt "ControllerSettingsGrid" msgid "Profile" msgstr "Профиль" -#: src/ui/gui/controller_page.slint:157 +#: src/ui/gui/controller_page.slint:164 msgctxt "ControllerConfig" msgid "Controller Configuration" msgstr "Настройка контроллера" -#: src/ui/gui/controller_page.slint:171 +#: src/ui/gui/controller_page.slint:178 msgctxt "ControllerConfig" msgid "Configure Input Profile" msgstr "Настроить профиль ввода" -#: src/ui/gui/controller_page.slint:180 +#: src/ui/gui/controller_page.slint:187 msgctxt "ControllerConfig" msgid "Controller Settings" msgstr "Настройки контроллера" -#: src/ui/gui/controller_page.slint:190 +#: src/ui/gui/controller_page.slint:197 msgctxt "ControllerConfig" msgid "Controller Assignment" msgstr "Назначение контроллера" -#: src/ui/gui/input_profile.slint:12 +#: src/ui/gui/input_profile.slint:19 msgctxt "InputProfileDialog" msgid "Create/Modify Input Profile" msgstr "Создать/изменить профиль ввода" -#: src/ui/gui/input_profile.slint:25 +#: src/ui/gui/input_profile.slint:32 msgctxt "InputProfileDialog" msgid "Enter profile name to create or modify" msgstr "Введите имя профиля для создания или изменения" -#: src/ui/gui/input_profile.slint:38 +#: src/ui/gui/input_profile.slint:45 msgctxt "InputProfileDialog" msgid "Deadzone Percentage" msgstr "Процент мёртвой зоны" -#: src/ui/gui/input_profile.slint:61 +#: src/ui/gui/input_profile.slint:68 msgctxt "InputProfileDialog" msgid "Use DirectInput" msgstr "Использовать DirectInput" -#: src/ui/gui/input_profile.slint:74 +#: src/ui/gui/input_profile.slint:81 msgctxt "InputProfileDialog" msgid "Start Profile Creation Wizard" msgstr "Запустить мастер создания профиля" -#: src/ui/gui/input_profile.slint:82 +#: src/ui/gui/input_profile.slint:90 msgctxt "InputProfileDialog" msgid "Cancel" msgstr "Отмена" -#: src/ui/gui/localgame_page.slint:19 +#: src/ui/gui/input_profile.slint:101 +msgctxt "InputProfileDialog" +msgid "" +"When using DirectInput and/or keyboard, navigate the dialog using the arrow " +"keys.\n" +"Press Enter to begin binding a button/axis.\n" +"Press Delete to remove a binding.\n" +"\n" +"When using a PlayStation-style controller, navigate the dialog using the D-" +"pad.\n" +"Press the South/East button to begin binding a button/axis.\n" +"Press the North/West button to remove a binding." +msgstr "" +"При использовании DirectInput и/или клавиатуры перемещайтесь по диалогу с " +"помощью стрелок.\n" +"Нажмите Enter, чтобы начать привязку кнопки/оси.\n" +"Нажмите Delete, чтобы удалить привязку.\n" +"\n" +"При использовании контроллера в стиле PlayStation перемещайтесь по диалогу с " +"помощью крестовины.\n" +"Нажмите кнопку Юг/Восток, чтобы начать привязку кнопки/оси.\n" +"Нажмите кнопку Север/Запад, чтобы удалить привязку." + +#: src/ui/gui/localgame_page.slint:24 msgctxt "LocalGame" msgid "Local Game" msgstr "Локальная игра" -#: src/ui/gui/localgame_page.slint:26 +#: src/ui/gui/localgame_page.slint:31 msgctxt "LocalGame" msgid "Open ROM" msgstr "Открыть ROM" -#: src/ui/gui/localgame_page.slint:37 +#: src/ui/gui/localgame_page.slint:42 msgctxt "LocalGame" msgid "Open Saves Folder" msgstr "Открыть папку сохранений" -#: src/ui/gui/localgame_page.slint:54 +#: src/ui/gui/localgame_page.slint:59 msgctxt "LocalGame" msgid "Recent ROMs" msgstr "Недавние ROMы" -#: src/ui/gui/netplay_create.slint:7 +#: src/ui/gui/netplay_create.slint:16 msgctxt "NetplayCreate" msgid "Netplay: Create Session" msgstr "Сетевая игра: Создать сессию" -#: src/ui/gui/netplay_create.slint:22 +#: src/ui/gui/netplay_create.slint:31 msgctxt "NetplayCreate" msgid "Session Name:" msgstr "Имя сессии:" -#: src/ui/gui/netplay_create.slint:26 +#: src/ui/gui/netplay_create.slint:35 msgctxt "NetplayCreate" msgid "Enter session name" msgstr "Введите имя сессии" -#: src/ui/gui/netplay_create.slint:36 +#: src/ui/gui/netplay_create.slint:45 msgctxt "NetplayCreate" msgid "Password (Optional):" msgstr "Пароль (необязательно):" -#: src/ui/gui/netplay_create.slint:40 +#: src/ui/gui/netplay_create.slint:49 msgctxt "NetplayCreate" msgid "Enter session password" msgstr "Введите пароль сессии" -#: src/ui/gui/netplay_create.slint:51 +#: src/ui/gui/netplay_create.slint:60 msgctxt "NetplayCreate" msgid "Player Name:" msgstr "Имя игрока:" -#: src/ui/gui/netplay_create.slint:55 +#: src/ui/gui/netplay_create.slint:64 msgctxt "NetplayCreate" msgid "Enter player name" msgstr "Введите имя игрока" -#: src/ui/gui/netplay_create.slint:66 +#: src/ui/gui/netplay_create.slint:75 msgctxt "NetplayCreate" msgid "Select ROM" msgstr "Выбрать ROM" -#: src/ui/gui/netplay_create.slint:82 +#: src/ui/gui/netplay_create.slint:91 msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." msgstr "" "Для этой игры включены читы. Читы будут синхронизированы с другими игроками." -#: src/ui/gui/netplay_create.slint:91 +#: src/ui/gui/netplay_create.slint:100 msgctxt "NetplayCreate" msgid "Create Session" msgstr "Создать сессию" -#: src/ui/gui/netplay_create.slint:107 +#: src/ui/gui/netplay_create.slint:117 msgctxt "NetplayCreate" msgid "Cancel" msgstr "Отмена" -#: src/ui/gui/netplay_join.slint:7 +#: src/ui/gui/netplay_join.slint:15 msgctxt "NetplayJoin" msgid "Netplay: Join Session" msgstr "Сетевая игра: Присоединиться к сессии" -#: src/ui/gui/netplay_join.slint:18 +#: src/ui/gui/netplay_join.slint:26 msgctxt "NetplayJoin" msgid "Player Name (required):" msgstr "Имя игрока (обязательно):" -#: src/ui/gui/netplay_join.slint:22 +#: src/ui/gui/netplay_join.slint:30 msgctxt "NetplayJoin" msgid "Enter player name" msgstr "Введите имя игрока" -#: src/ui/gui/netplay_join.slint:31 +#: src/ui/gui/netplay_join.slint:39 msgctxt "NetplayJoin" msgid "Password (if required)" msgstr "Пароль (если требуется)" -#: src/ui/gui/netplay_join.slint:42 +#: src/ui/gui/netplay_join.slint:51 msgctxt "NetplayJoin" msgid "Select ROM" msgstr "Выбрать ROM" -#: src/ui/gui/netplay_join.slint:57 +#: src/ui/gui/netplay_join.slint:66 msgctxt "NetplayJoin" msgid "Refreshing session list, please wait..." msgstr "Обновление списка сессий, пожалуйста, подождите..." -#: src/ui/gui/netplay_join.slint:62 +#: src/ui/gui/netplay_join.slint:71 msgctxt "NetplayJoin" msgid "Click on a session below to select it" msgstr "Нажмите на сессию ниже, чтобы выбрать её" -#: src/ui/gui/netplay_join.slint:67 +#: src/ui/gui/netplay_join.slint:76 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." msgstr "Нет доступных сессий. Пожалуйста, обновите, чтобы проверить снова." -#: src/ui/gui/netplay_join.slint:73 +#: src/ui/gui/netplay_join.slint:82 msgctxt "NetplayJoin" msgid "Session Name" msgstr "Имя сессии" -#: src/ui/gui/netplay_join.slint:74 +#: src/ui/gui/netplay_join.slint:83 msgctxt "NetplayJoin" msgid "Game Name" msgstr "Название игры" -#: src/ui/gui/netplay_join.slint:75 +#: src/ui/gui/netplay_join.slint:84 msgctxt "NetplayJoin" msgid "Password" msgstr "Пароль" -#: src/ui/gui/netplay_join.slint:76 +#: src/ui/gui/netplay_join.slint:85 msgctxt "NetplayJoin" msgid "Cheats" msgstr "Читы" -#: src/ui/gui/netplay_join.slint:90 +#: src/ui/gui/netplay_join.slint:99 msgctxt "NetplayJoin" msgid "Refresh Session List" msgstr "Обновить список сессий" -#: src/ui/gui/netplay_join.slint:105 +#: src/ui/gui/netplay_join.slint:114 msgctxt "NetplayJoin" msgid "Join Session" msgstr "Присоединиться к сессии" -#: src/ui/gui/netplay_join.slint:117 +#: src/ui/gui/netplay_join.slint:127 msgctxt "NetplayJoin" msgid "Cancel" msgstr "Отмена" -#: src/ui/gui/netplay_page.slint:31 +#: src/ui/gui/netplay_page.slint:37 msgctxt "Netplay" msgid "Netplay" msgstr "Сетевая игра" -#: src/ui/gui/netplay_page.slint:39 +#: src/ui/gui/netplay_page.slint:45 msgctxt "Netplay" msgid "Create Session" msgstr "Создать сессию" -#: src/ui/gui/netplay_page.slint:50 +#: src/ui/gui/netplay_page.slint:56 msgctxt "Netplay" msgid "Join Session" msgstr "Присоединиться к сессии" -#: src/ui/gui/netplay_page.slint:64 +#: src/ui/gui/netplay_page.slint:70 msgctxt "Netplay" msgid "Netplay Discord Channel" msgstr "Канал Discord для сетевой игры" -#: src/ui/gui/netplay_page.slint:71 +#: src/ui/gui/netplay_page.slint:77 msgctxt "Netplay" msgid "Provide Feedback" msgstr "Оставить отзыв" -#: src/ui/gui/netplay_wait.slint:17 +#: src/ui/gui/netplay_wait.slint:27 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" msgstr "Сетевая игра: Комната ожидания" -#: src/ui/gui/netplay_wait.slint:29 +#: src/ui/gui/netplay_wait.slint:39 msgctxt "NetplayWait" msgid "Session Name:" msgstr "Имя сессии:" -#: src/ui/gui/netplay_wait.slint:35 +#: src/ui/gui/netplay_wait.slint:45 msgctxt "NetplayWait" msgid "Game Name:" msgstr "Название игры:" -#: src/ui/gui/netplay_wait.slint:45 +#: src/ui/gui/netplay_wait.slint:55 msgctxt "NetplayWait" msgid "Player 1:" msgstr "Игрок 1:" -#: src/ui/gui/netplay_wait.slint:49 +#: src/ui/gui/netplay_wait.slint:59 msgctxt "NetplayWait" msgid "Player 2:" msgstr "Игрок 2:" -#: src/ui/gui/netplay_wait.slint:55 +#: src/ui/gui/netplay_wait.slint:65 msgctxt "NetplayWait" msgid "Player 3:" msgstr "Игрок 3:" -#: src/ui/gui/netplay_wait.slint:59 +#: src/ui/gui/netplay_wait.slint:69 msgctxt "NetplayWait" msgid "Player 4:" msgstr "Игрок 4:" -#: src/ui/gui/netplay_wait.slint:73 +#: src/ui/gui/netplay_wait.slint:83 msgctxt "NetplayWait" msgid "Enter chat message" msgstr "Введите сообщение чата" -#: src/ui/gui/netplay_wait.slint:84 +#: src/ui/gui/netplay_wait.slint:94 msgctxt "NetplayWait" msgid "Send Message" msgstr "Отправить сообщение" -#: src/ui/gui/netplay_wait.slint:94 +#: src/ui/gui/netplay_wait.slint:104 msgctxt "NetplayWait" msgid "" "Setting the input delay too low will cause the game to lag.\n" @@ -401,182 +424,182 @@ msgstr "" "Вы можете уменьшить задержку ввода в игре, нажав Alt+[, и увеличить её с " "помощью Alt+]." -#: src/ui/gui/netplay_wait.slint:101 +#: src/ui/gui/netplay_wait.slint:112 msgctxt "NetplayWait" msgid "Local Input Delay:" msgstr "Локальная задержка ввода:" -#: src/ui/gui/netplay_wait.slint:118 +#: src/ui/gui/netplay_wait.slint:129 msgctxt "NetplayWait" msgid "Recommended: " msgstr "Рекомендуется: " -#: src/ui/gui/netplay_wait.slint:127 +#: src/ui/gui/netplay_wait.slint:138 msgctxt "NetplayWait" msgid "Start Game" msgstr "Начать игру" -#: src/ui/gui/netplay_wait.slint:127 +#: src/ui/gui/netplay_wait.slint:138 msgctxt "NetplayWait" msgid "Waiting for P2P mesh " msgstr "Ожидание P2P-сети " -#: src/ui/gui/netplay_wait.slint:135 +#: src/ui/gui/netplay_wait.slint:147 msgctxt "NetplayWait" msgid "Cancel" msgstr "Отмена" -#: src/ui/gui/retroachievements_page.slint:19 +#: src/ui/gui/retroachievements_page.slint:25 msgctxt "RAData" msgid "Not currently logged in" msgstr "В данный момент не выполнен вход" -#: src/ui/gui/retroachievements_page.slint:27 +#: src/ui/gui/retroachievements_page.slint:33 msgctxt "RetroAchievements" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/retroachievements_page.slint:36 +#: src/ui/gui/retroachievements_page.slint:42 msgctxt "RetroAchievements" msgid "Enabled" msgstr "Включено" -#: src/ui/gui/retroachievements_page.slint:51 +#: src/ui/gui/retroachievements_page.slint:58 msgctxt "RetroAchievements" msgid "Hardcore mode" msgstr "Хардкорный режим" -#: src/ui/gui/retroachievements_page.slint:60 +#: src/ui/gui/retroachievements_page.slint:67 msgctxt "RetroAchievements" msgid "Challenge Indicators" msgstr "Индикаторы испытаний" -#: src/ui/gui/retroachievements_page.slint:69 +#: src/ui/gui/retroachievements_page.slint:77 msgctxt "RetroAchievements" msgid "Leaderboard Trackers" msgstr "Трекеры таблицы лидеров" -#: src/ui/gui/retroachievements_page.slint:78 +#: src/ui/gui/retroachievements_page.slint:87 msgctxt "RetroAchievements" msgid "Discord Rich Presence" msgstr "Расширенный статус Discord" -#: src/ui/gui/retroachievements_page.slint:96 +#: src/ui/gui/retroachievements_page.slint:107 msgctxt "RetroAchievements" msgid "View Profile" msgstr "Просмотреть профиль" -#: src/ui/gui/retroachievements_page.slint:106 +#: src/ui/gui/retroachievements_page.slint:118 msgctxt "RetroAchievements" msgid "Username" msgstr "Имя пользователя" -#: src/ui/gui/retroachievements_page.slint:116 +#: src/ui/gui/retroachievements_page.slint:128 msgctxt "RetroAchievements" msgid "Password" msgstr "Пароль" -#: src/ui/gui/retroachievements_page.slint:125 +#: src/ui/gui/retroachievements_page.slint:138 msgctxt "RetroAchievements" msgid "Login" msgstr "Войти" -#: src/ui/gui/retroachievements_page.slint:141 +#: src/ui/gui/retroachievements_page.slint:156 msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Просмотреть поддерживаемые игры" -#: src/ui/gui/settings_page.slint:25 +#: src/ui/gui/settings_page.slint:31 msgctxt "Settings" msgid "Settings" msgstr "Настройки" -#: src/ui/gui/settings_page.slint:32 +#: src/ui/gui/settings_page.slint:38 msgctxt "Settings" msgid "Game" msgstr "Игра" -#: src/ui/gui/settings_page.slint:38 +#: src/ui/gui/settings_page.slint:44 msgctxt "Settings" msgid "Resolution:" msgstr "Разрешение:" -#: src/ui/gui/settings_page.slint:51 +#: src/ui/gui/settings_page.slint:58 msgctxt "Settings" msgid "SSAA downscaling" msgstr "SSAA даунскейлинг" -#: src/ui/gui/settings_page.slint:59 +#: src/ui/gui/settings_page.slint:66 msgctxt "Settings" msgid "Integer Scaling" msgstr "Целочисленное масштабирование" -#: src/ui/gui/settings_page.slint:67 +#: src/ui/gui/settings_page.slint:74 msgctxt "Settings" msgid "Fullscreen" msgstr "Полноэкранный режим" -#: src/ui/gui/settings_page.slint:75 +#: src/ui/gui/settings_page.slint:82 msgctxt "Settings" msgid "Widescreen (stretch)" msgstr "Широкоэкранный режим (растянуто)" -#: src/ui/gui/settings_page.slint:83 +#: src/ui/gui/settings_page.slint:90 msgctxt "Settings" msgid "VSync" msgstr "Вертикальная синхронизация" -#: src/ui/gui/settings_page.slint:91 +#: src/ui/gui/settings_page.slint:98 msgctxt "Settings" msgid "Apply CRT shader" msgstr "Применить шейдер ЭЛТ" -#: src/ui/gui/settings_page.slint:103 +#: src/ui/gui/settings_page.slint:110 msgctxt "Settings" msgid "Overclock N64 CPU (may cause bugs)" msgstr "Разгон процессора N64 (может вызвать ошибки)" -#: src/ui/gui/settings_page.slint:111 +#: src/ui/gui/settings_page.slint:118 msgctxt "Settings" msgid "Disable Expansion Pak" msgstr "Отключить Expansion Pak" -#: src/ui/gui/settings_page.slint:119 +#: src/ui/gui/settings_page.slint:126 msgctxt "Settings" msgid "Enable Rewind" msgstr "Включить перемотку назад" -#: src/ui/gui/settings_page.slint:127 +#: src/ui/gui/settings_page.slint:134 msgctxt "Settings" msgid "Emulate UNFLoader" msgstr "Эмулировать UNFLoader" -#: src/ui/gui/settings_page.slint:135 +#: src/ui/gui/settings_page.slint:142 msgctxt "Settings" msgid "Emulate VRU" msgstr "Эмулировать VRU" -#: src/ui/gui/settings_page.slint:144 +#: src/ui/gui/settings_page.slint:152 msgctxt "Settings" msgid "UI" msgstr "Интерфейс" -#: src/ui/gui/settings_page.slint:150 +#: src/ui/gui/settings_page.slint:158 msgctxt "Settings" msgid "Theme:" msgstr "Тема:" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "System" msgstr "Система" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "Dark" msgstr "Тёмная" -#: src/ui/gui/settings_page.slint:154 +#: src/ui/gui/settings_page.slint:163 msgctxt "Settings" msgid "Light" msgstr "Светлая" diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 0b07d14..3820bcc 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -1,8 +1,21 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { Palette, StandardButton, VerticalBox, HorizontalBox } from "std-widgets.slint"; -import { LocalGame, ControllerConfig, Netplay, Cheats, RetroAchievements, Settings, About } from "pages.slint"; +import { + Palette, + StandardButton, + VerticalBox, + HorizontalBox, +} from "std-widgets.slint"; +import { + LocalGame, + ControllerConfig, + Netplay, + Cheats, + RetroAchievements, + Settings, + About, +} from "pages.slint"; import { SideBar } from "side_bar.slint"; import { SettingsData } from "settings_page.slint"; import { RAData } from "retroachievements_page.slint"; @@ -12,7 +25,7 @@ import { State } from "localgame_page.slint"; import { CheatsData } from "cheat_page.slint"; import { InputProfileDialog, InputProfileData } from "input_profile.slint"; import { NetplayData } from "netplay_page.slint"; -export { VruDialog } from "vru_dialog.slint"; +export { VruDialog }from "vru_dialog.slint"; import { NetplayCreate } from "netplay_create.slint"; import { NetplayJoin } from "netplay_join.slint"; import { NetplayWait, NetplayWaitData } from "netplay_wait.slint"; @@ -29,7 +42,7 @@ export component AppWindow inherits Window { callback saves_folder_button_clicked; callback input_profile_button_clicked; callback input_profile_creation_button_clicked; - callback transferpak_toggled(int,bool); + callback transferpak_toggled(int, bool); callback create_session_button_clicked; callback join_session_button_clicked; callback netplay_discord_button_clicked; @@ -47,7 +60,7 @@ export component AppWindow inherits Window { callback ra_button_clicked(string); callback ra_games_clicked; callback ra_show_profile_clicked; - callback ra_toggled(bool,bool,bool,bool,bool); + callback ra_toggled(bool, bool, bool, bool, bool); callback controller_window_created; in property version <=> AboutData.version; in property has_update <=> AboutData.has_update; @@ -159,34 +172,34 @@ export component AppWindow inherits Window { portrait: root.is-portrait; title: "Gopher64"; model: [ - { - icon: @image-url("../../../data/ui/icons/local_game.svg"), - label: @tr("Menu" => "Local Game"), - }, - { - icon: @image-url("../../../data/ui/icons/controller.svg"), - label: @tr("Menu" => "Controller Config"), - }, - { - icon: @image-url("../../../data/ui/icons/netplay.svg"), - label: @tr("Menu" => "Netplay"), - }, - { - icon: @image-url("../../../data/ui/icons/cheats.svg"), - label: @tr("Menu" => "Cheats"), - }, - { - icon: @image-url("../../../data/ui/icons/achievements.svg"), - label: @tr("Menu" => "RetroAchievements"), - }, - { - icon: @image-url("../../../data/ui/icons/settings.svg"), - label: @tr("Menu" => "Settings"), - }, - { - icon: @image-url("../../../data/ui/icons/about.svg"), - label: @tr("Menu" => "About"), - }, + { + icon: @image-url("../../../data/ui/icons/local_game.svg"), + label: @tr("Menu" => "Local Game"), + }, + { + icon: @image-url("../../../data/ui/icons/controller.svg"), + label: @tr("Menu" => "Controller Config"), + }, + { + icon: @image-url("../../../data/ui/icons/netplay.svg"), + label: @tr("Menu" => "Netplay"), + }, + { + icon: @image-url("../../../data/ui/icons/cheats.svg"), + label: @tr("Menu" => "Cheats"), + }, + { + icon: @image-url("../../../data/ui/icons/achievements.svg"), + label: @tr("Menu" => "RetroAchievements"), + }, + { + icon: @image-url("../../../data/ui/icons/settings.svg"), + label: @tr("Menu" => "Settings"), + }, + { + icon: @image-url("../../../data/ui/icons/about.svg"), + label: @tr("Menu" => "About"), + }, ]; x: root.safe-left; y: root.is-portrait ? parent.height - root.bar-thickness - root.safe-bottom : root.safe-top; @@ -223,7 +236,7 @@ export component AppWindow inherits Window { input_profile_button_clicked => { input_profile_button_clicked(); } - transferpak_toggled(player,enabled) => { + transferpak_toggled(player, enabled) => { transferpak_toggled(player,enabled); } controller_window_created => { @@ -314,7 +327,7 @@ export component AppWindow inherits Window { ra_button_clicked(password) => { ra_button_clicked(password); } - ra_toggled(enabled,hardcore,challenge,leaderboard,rich_presence) => { + ra_toggled(enabled, hardcore, challenge, leaderboard, rich_presence) => { ra_toggled(enabled,hardcore,challenge,leaderboard,rich_presence); } ra_games_clicked => { @@ -353,18 +366,19 @@ export component AppWindow inherits Window { popup := PopupWindow { close-policy: no-auto-close; Rectangle { - height:100%; + height: 100%; width: 100%; background: Palette.background; VerticalBox { alignment: center; - HorizontalBox{ + HorizontalBox { alignment: center; Text { text: popup_message; } } - if (popup_has_close):HorizontalBox{ + + if (popup_has_close):HorizontalBox { alignment: center; StandardButton { kind: ok; @@ -375,12 +389,14 @@ export component AppWindow inherits Window { } } } + x: content-area.x; y: content-area.y; height: content-area.height; width: content-area.width; } } + public function show_message(message: string, has_close: bool) { popup_message = message; popup_has_close = has_close; diff --git a/src/ui/gui/cheat_page.slint b/src/ui/gui/cheat_page.slint index 04eeedc..ca32448 100644 --- a/src/ui/gui/cheat_page.slint +++ b/src/ui/gui/cheat_page.slint @@ -1,14 +1,27 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { ListView, HorizontalBox, VerticalBox, Button, GroupBox, Switch, CheckBox } from "std-widgets.slint"; +import { + ListView, + HorizontalBox, + VerticalBox, + Button, + GroupBox, + Switch, + CheckBox, +} from "std-widgets.slint"; import { Page } from "page.slint"; import { SettingsData } from "settings_page.slint"; export global CheatsData { in-out property cheat_game_name; in-out property cheat_game_crc; - in-out property <[{cheat_name:string, notes:string, enabled:bool, options:[{option:string, enabled:bool}]}]> cheats; + in-out property <[{ + cheat_name: string, + notes: string, + enabled: bool, + options: [{ option: string, enabled: bool }] + }]> cheats; } export component Cheats inherits Page { diff --git a/src/ui/gui/controller_page.slint b/src/ui/gui/controller_page.slint index 9a4cb6d..b3fe959 100644 --- a/src/ui/gui/controller_page.slint +++ b/src/ui/gui/controller_page.slint @@ -1,7 +1,14 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { Switch, ComboBox, Button, HorizontalBox, VerticalBox, GroupBox } from "std-widgets.slint"; +import { + Switch, + ComboBox, + Button, + HorizontalBox, + VerticalBox, + GroupBox, +} from "std-widgets.slint"; import { Page } from "page.slint"; import { State } from "localgame_page.slint"; diff --git a/src/ui/gui/input_profile.slint b/src/ui/gui/input_profile.slint index 08b676c..7f3ab03 100644 --- a/src/ui/gui/input_profile.slint +++ b/src/ui/gui/input_profile.slint @@ -1,4 +1,11 @@ -import { HorizontalBox, VerticalBox, Button, LineEdit, Switch, Slider } from "std-widgets.slint"; +import { + HorizontalBox, + VerticalBox, + Button, + LineEdit, + Switch, + Slider, +} from "std-widgets.slint"; import { Page } from "page.slint"; export global InputProfileData { @@ -77,6 +84,7 @@ export component InputProfileDialog inherits Page { profile_creation_button_clicked(); } } + Button { vertical-stretch: 0; text: @tr("Cancel"); @@ -85,5 +93,13 @@ export component InputProfileDialog inherits Page { } } } + + HorizontalBox { + Text { + wrap: word-wrap; + horizontal-alignment: center; + text: @tr("When using DirectInput and/or keyboard, navigate the dialog using the arrow keys.\nPress Enter to begin binding a button/axis.\nPress Delete to remove a binding.\n\nWhen using a PlayStation-style controller, navigate the dialog using the D-pad.\nPress the South/East button to begin binding a button/axis.\nPress the North/West button to remove a binding."); + } + } } } diff --git a/src/ui/gui/localgame_page.slint b/src/ui/gui/localgame_page.slint index fb7e9c5..ae77d16 100644 --- a/src/ui/gui/localgame_page.slint +++ b/src/ui/gui/localgame_page.slint @@ -1,14 +1,19 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { Button, HorizontalBox, VerticalBox, GroupBox } from "std-widgets.slint"; +import { + Button, + HorizontalBox, + VerticalBox, + GroupBox, +} from "std-widgets.slint"; import { Page } from "page.slint"; import { AboutData, NewVersionButton } from "about_page.slint"; export global State { in-out property game_running; in-out property is_android; - in-out property <[{a:string, b:string}]> recent_roms; + in-out property <[{ a: string, b: string }]> recent_roms; } export component LocalGame inherits Page { @@ -48,7 +53,7 @@ export component LocalGame inherits Page { } Rectangle { } - if State.recent_roms.length>0:HorizontalBox { + if State.recent_roms.length > 0:HorizontalBox { alignment: center; GroupBox { title: @tr("Recent ROMs"); diff --git a/src/ui/gui/netplay_create.slint b/src/ui/gui/netplay_create.slint index 625efa7..14df865 100644 --- a/src/ui/gui/netplay_create.slint +++ b/src/ui/gui/netplay_create.slint @@ -1,4 +1,13 @@ -import { Palette, StandardButton, LineEdit, HorizontalBox, VerticalBox, Button, ComboBox, ScrollView } from "std-widgets.slint"; +import { + Palette, + StandardButton, + LineEdit, + HorizontalBox, + VerticalBox, + Button, + ComboBox, + ScrollView, +} from "std-widgets.slint"; import { NetplayData } from "netplay_page.slint"; import { SettingsData } from "settings_page.slint"; import { Page } from "page.slint"; @@ -103,6 +112,7 @@ export component NetplayCreate inherits Page { SettingsData.disable_expansion_pak); } } + Button { text: @tr("Cancel"); clicked => { @@ -110,6 +120,7 @@ export component NetplayCreate inherits Page { } } } + Rectangle { } } } diff --git a/src/ui/gui/netplay_join.slint b/src/ui/gui/netplay_join.slint index 25fe667..f51e773 100644 --- a/src/ui/gui/netplay_join.slint +++ b/src/ui/gui/netplay_join.slint @@ -1,4 +1,12 @@ -import { VerticalBox, LineEdit, StandardTableView, HorizontalBox, ComboBox, Button, ScrollView } from "std-widgets.slint"; +import { + VerticalBox, + LineEdit, + StandardTableView, + HorizontalBox, + ComboBox, + Button, + ScrollView, +} from "std-widgets.slint"; import { NetplayData } from "netplay_page.slint"; import { SettingsData } from "settings_page.slint"; import { Page } from "page.slint"; @@ -37,7 +45,8 @@ export component NetplayJoin inherits Page { } VerticalBox { - Rectangle {} + Rectangle { } + if NetplayData.game_name == "": Button { text: @tr("Select ROM"); clicked => { @@ -70,10 +79,10 @@ export component NetplayJoin inherits Page { } StandardTableView { columns: [ - { title: @tr("Session Name") }, - { title: @tr("Game Name") }, - { title: @tr("Password") }, - { title: @tr("Cheats") } + { title: @tr("Session Name") }, + { title: @tr("Game Name") }, + { title: @tr("Password") }, + { title: @tr("Cheats") } ]; rows: NetplayData.sessions; current-row: NetplayData.current_session; @@ -113,6 +122,7 @@ export component NetplayJoin inherits Page { NetplayData.password); } } + Button { text: @tr("Cancel"); clicked => { diff --git a/src/ui/gui/netplay_page.slint b/src/ui/gui/netplay_page.slint index 6709548..678b2cc 100644 --- a/src/ui/gui/netplay_page.slint +++ b/src/ui/gui/netplay_page.slint @@ -1,7 +1,13 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { StandardButton, VerticalBox, HorizontalBox, Button, LineEdit } from "std-widgets.slint"; +import { + StandardButton, + VerticalBox, + HorizontalBox, + Button, + LineEdit, +} from "std-widgets.slint"; import { Page } from "page.slint"; import { State } from "localgame_page.slint"; diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint index ec547c4..bb7159e 100644 --- a/src/ui/gui/netplay_wait.slint +++ b/src/ui/gui/netplay_wait.slint @@ -1,4 +1,14 @@ -import { VerticalBox, HorizontalBox, TextEdit, SpinBox, GroupBox, LineEdit, Button, GridBox, ScrollView } from "std-widgets.slint"; +import { + VerticalBox, + HorizontalBox, + TextEdit, + SpinBox, + GroupBox, + LineEdit, + Button, + GridBox, + ScrollView, +} from "std-widgets.slint"; import { NetplayData } from "netplay_page.slint"; import { Page } from "page.slint"; @@ -95,6 +105,7 @@ export component NetplayWait inherits Page { horizontal-alignment: center; wrap: word-wrap; } + if NetplayData.player_name == NetplayWaitData.players[0]: HorizontalBox { alignment: center; Text { @@ -112,7 +123,6 @@ export component NetplayWait inherits Page { edited => { NetplayWaitData.input_delay = self.value; } - } Text { @@ -132,6 +142,7 @@ export component NetplayWait inherits Page { begin_game(NetplayWaitData.input_delay); } } + Button { text: @tr("Cancel"); clicked => { diff --git a/src/ui/gui/pages.slint b/src/ui/gui/pages.slint index cd337fe..b79c55d 100644 --- a/src/ui/gui/pages.slint +++ b/src/ui/gui/pages.slint @@ -1,7 +1,7 @@ -export { LocalGame } from "localgame_page.slint"; -export { ControllerConfig } from "controller_page.slint"; -export { Netplay } from "netplay_page.slint"; -export { Cheats } from "cheat_page.slint"; -export { RetroAchievements } from "retroachievements_page.slint"; -export { Settings } from "settings_page.slint"; -export { About } from "about_page.slint"; +export { LocalGame }from "localgame_page.slint"; +export { ControllerConfig }from "controller_page.slint"; +export { Netplay }from "netplay_page.slint"; +export { Cheats }from "cheat_page.slint"; +export { RetroAchievements }from "retroachievements_page.slint"; +export { Settings }from "settings_page.slint"; +export { About }from "about_page.slint"; diff --git a/src/ui/gui/retroachievements_page.slint b/src/ui/gui/retroachievements_page.slint index 581e39f..9681f18 100644 --- a/src/ui/gui/retroachievements_page.slint +++ b/src/ui/gui/retroachievements_page.slint @@ -1,7 +1,13 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { LineEdit, Switch, Button, HorizontalBox, VerticalBox } from "std-widgets.slint"; +import { + LineEdit, + Switch, + Button, + HorizontalBox, + VerticalBox, +} from "std-widgets.slint"; import { Page } from "page.slint"; export global RAData { @@ -21,7 +27,7 @@ export global RAData { export component RetroAchievements inherits Page { callback ra_button_clicked(string); - callback ra_toggled(bool,bool,bool,bool,bool); + callback ra_toggled(bool, bool, bool, bool, bool); callback ra_games_clicked; callback ra_show_profile_clicked; title: @tr("RetroAchievements"); @@ -47,6 +53,7 @@ export component RetroAchievements inherits Page { ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard,RAData.rich_presence); } } + if !RAData.ra_casual_only: Switch { text: @tr("Hardcore mode"); checked: RAData.hardcore; @@ -65,6 +72,7 @@ export component RetroAchievements inherits Page { ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard,RAData.rich_presence); } } + Switch { text: @tr("Leaderboard Trackers"); checked: RAData.leaderboard; @@ -74,6 +82,7 @@ export component RetroAchievements inherits Page { ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard,RAData.rich_presence); } } + Switch { text: @tr("Discord Rich Presence"); checked: RAData.rich_presence; @@ -85,12 +94,14 @@ export component RetroAchievements inherits Page { } } } + HorizontalBox { alignment: center; Text { text: RAData.current_user_message; vertical-alignment: center; } + if RAData.ra_show_profile:Button { enabled: RAData.enabled; text: @tr("View Profile"); @@ -99,6 +110,7 @@ export component RetroAchievements inherits Page { } } } + HorizontalBox { alignment: center; username_widget := LineEdit { @@ -108,8 +120,8 @@ export component RetroAchievements inherits Page { edited(text) => { RAData.ra_username = text; } - } + password_widget := LineEdit { enabled: RAData.enabled; input-type: password; @@ -119,6 +131,7 @@ export component RetroAchievements inherits Page { } } } + HorizontalBox { alignment: center; Button { @@ -132,9 +145,11 @@ export component RetroAchievements inherits Page { } } } + Rectangle { height: 20px; } + HorizontalBox { alignment: center; Button { diff --git a/src/ui/gui/settings_page.slint b/src/ui/gui/settings_page.slint index cf2c439..963ad83 100644 --- a/src/ui/gui/settings_page.slint +++ b/src/ui/gui/settings_page.slint @@ -1,7 +1,13 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { GroupBox, ComboBox, HorizontalBox, VerticalBox, Switch } from "std-widgets.slint"; +import { + GroupBox, + ComboBox, + HorizontalBox, + VerticalBox, + Switch, +} from "std-widgets.slint"; import { Page } from "page.slint"; export global SettingsData { @@ -38,6 +44,7 @@ export component Settings inherits Page { text: @tr("Resolution:"); vertical-alignment: center; } + ComboBox { model: ["1x", "2x", "4x", "8x"]; current-index: SettingsData.resolution; @@ -140,6 +147,7 @@ export component Settings inherits Page { } } } + GroupBox { title: @tr("UI"); VerticalBox { @@ -150,6 +158,7 @@ export component Settings inherits Page { text: @tr("Theme:"); vertical-alignment: center; } + ComboBox { model: [@tr("System"), @tr("Dark"), @tr("Light")]; current-index: SettingsData.theme; @@ -158,6 +167,7 @@ export component Settings inherits Page { } } } + Rectangle { height: 40px; // so the combobox isn't cut off } diff --git a/src/ui/gui/side_bar.slint b/src/ui/gui/side_bar.slint index a31e354..377cc2c 100644 --- a/src/ui/gui/side_bar.slint +++ b/src/ui/gui/side_bar.slint @@ -46,20 +46,20 @@ component SideBarButton inherits Rectangle { } states [ - selected when root.selected: { - highlight.opacity: 1; - highlight.background: Palette.accent-background; - icon-display.colorize: Palette.accent-foreground; - } - pressed when touch.pressed && !root.selected: { - highlight.opacity: 0.55; - } - hover when touch.has-hover && !root.selected: { - highlight.opacity: 0.4; - } - focused when root.has-focus && !root.selected: { - highlight.opacity: 0.4; - } + selected when root.selected: { + highlight.opacity: 1; + highlight.background: Palette.accent-background; + icon-display.colorize: Palette.accent-foreground; + } + pressed when touch.pressed && !root.selected: { + highlight.opacity: 0.55; + } + hover when touch.has-hover && !root.selected: { + highlight.opacity: 0.4; + } + focused when root.has-focus && !root.selected: { + highlight.opacity: 0.4; + } ] } @@ -87,6 +87,7 @@ component SideBarItem inherits Rectangle { text: root.label; } } + icon: root.icon; selected: root.selected; has-focus: root.has-focus; From 05fe5b2995710a5278416d728b8513c9f3331258 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 6 Aug 2026 08:14:49 -0600 Subject: [PATCH 1109/1117] cargo update (#1180) --- Cargo.lock | 357 ++++++++++++++++++++++++++--------------------------- 1 file changed, 177 insertions(+), 180 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a82fd05..aae66bf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -155,9 +155,9 @@ dependencies = [ [[package]] name = "aes" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fc76eaeac4c9164506c466d4ffdd8ec9d0c5bf57ee97177c4d8eceb3a0e138" +checksum = "f8eb277bec05f56a0e0591f155a484cbd0f4f07ff2905051a48c72f004f7ed58" dependencies = [ "cipher 0.5.2", "cpubits", @@ -193,9 +193,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -281,9 +281,9 @@ checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" [[package]] name = "android_system_properties" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc" dependencies = [ "libc", ] @@ -462,7 +462,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ - "event-listener 5.4.1", + "event-listener 5.4.2", "event-listener-strategy", "futures-core", "pin-project-lite", @@ -557,7 +557,7 @@ version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" dependencies = [ - "event-listener 5.4.1", + "event-listener 5.4.2", "event-listener-strategy", "pin-project-lite", ] @@ -575,7 +575,7 @@ dependencies = [ "async-task", "blocking", "cfg-if", - "event-listener 5.4.1", + "event-listener 5.4.2", "futures-lite", "rustix 1.1.4", ] @@ -662,7 +662,7 @@ checksum = "ae36dc4177970ef04fde5178d3e2429882def40e57a451f919c098f72baa6cec" dependencies = [ "proc-macro2", "quote", - "syn 3.0.2", + "syn 3.0.3", ] [[package]] @@ -747,14 +747,14 @@ dependencies = [ [[package]] name = "auto_enums" -version = "0.8.9" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e4487600931c9a89f8db7ffbdf3fbdd45bb7bd85e26861f659a463cd0dff966" +checksum = "3091d68264354f211516b91dce6f71046e444fab1867716035f736667243affb" dependencies = [ "derive_utils", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] @@ -1022,9 +1022,9 @@ checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" [[package]] name = "bytecheck" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0caa33a2c0edca0419d15ac723dff03f1956f7978329b1e3b5fdaaaed9d3ca8b" +checksum = "26333eeac754f0ad8a6bcd0eb0ac012156302e4e16b852b72ee399aea4f12c29" dependencies = [ "bytecheck_derive", "ptr_meta", @@ -1034,13 +1034,13 @@ dependencies = [ [[package]] name = "bytecheck_derive" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89385e82b5d1821d2219e0b095efa2cc1f246cbf99080f3be46a1a85c0d392d9" +checksum = "46d07918caa9eeaaf06b7873925c53a61daac173539b4f7715090745e44e4e69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] @@ -1161,9 +1161,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89588d05638b5b4594a3348a2d6c20277e43a7f5c5202b05cc56888475a47b8" +checksum = "5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9" dependencies = [ "find-msvc-tools", "jobserver", @@ -1290,9 +1290,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.8.1" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +checksum = "157a8ba7b480713b56f4c09fd13fc3e0a22a5dfab8097ba61cbc5feef950788a" dependencies = [ "glob", "libc", @@ -1301,9 +1301,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.2" +version = "4.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd059f9da4f5c36b3787f65d38ccaab1cc315f07b01f89abc8359ee6a8205011" +checksum = "301b56658598e48f3648647ac6fc887be7e7108eddfa4e9b63fcf3ec58c0cadf" dependencies = [ "clap_builder", "clap_derive", @@ -1311,9 +1311,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.2" +version = "4.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f09628afdcc538b57f3c6341e9c8e9970f18e4a481690a64974d7023bd33548b" +checksum = "94a65403d1a1bd28f7dc68eb8506e8874808ee5eecb59298de588e2e1407a078" dependencies = [ "anstream", "anstyle", @@ -1323,14 +1323,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.1" +version = "4.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" +checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] @@ -1737,9 +1737,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" +checksum = "4583a4551df46e2792f82ceeac45e850d2e2d5debba0b91f102385cda5b11f06" [[package]] name = "data-url" @@ -1809,13 +1809,13 @@ dependencies = [ [[package]] name = "derive_utils" -version = "0.15.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "362f47930db19fe7735f527e6595e4900316b893ebf6d48ad3d31be928d57dd6" +checksum = "dc05a5d33db20c784f873e84934ad94bb209a090987ac5f62fede2c178234f23" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] @@ -1899,13 +1899,13 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] @@ -1980,9 +1980,9 @@ dependencies = [ [[package]] name = "dtls" -version = "0.17.1" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f016db07b91e9d79cc60a152c163d3f0ce2d4c0173cb3964de3526aab6e07fa" +checksum = "01a431e87fc386bd5e02deb554a013f97bc406e47a7d8e97efb7c6366b980e9c" dependencies = [ "aes 0.8.4", "aes-gcm", @@ -2003,7 +2003,7 @@ dependencies = [ "rcgen", "ring", "rkyv", - "rustls 0.23.42", + "rustls 0.23.43", "sec1", "sha1 0.10.7", "sha2 0.10.9", @@ -2036,9 +2036,9 @@ dependencies = [ [[package]] name = "either" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" [[package]] name = "elliptic-curve" @@ -2168,11 +2168,10 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "event-listener" -version = "5.4.1" +version = "5.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2" dependencies = [ - "concurrent-queue", "parking", "pin-project-lite", ] @@ -2183,7 +2182,7 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ - "event-listener 5.4.1", + "event-listener 5.4.2", "pin-project-lite", ] @@ -2357,9 +2356,9 @@ dependencies = [ [[package]] name = "font-types" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad67eced03f5504d9cbd3a879b5958b5c54d4e5fd794361c6eb21b05fb703411" +checksum = "0a7299a780854a6d391be2ae1c8521c9368471b559dbfd6a8dbd9f407eaff100" dependencies = [ "bytemuck", ] @@ -2419,13 +2418,13 @@ dependencies = [ [[package]] name = "foreign-types-macros" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] @@ -2676,9 +2675,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "gloo-timers" @@ -2802,7 +2801,7 @@ dependencies = [ "obfstr", "open", "postcard", - "quick-xml 0.41.0", + "quick-xml", "rand 0.10.2", "regex", "reqwest", @@ -3043,9 +3042,9 @@ checksum = "48ce8546b993eaf241d69ded33b1be6d205dd9857ec879d9d18bd05d3676e144" [[package]] name = "http" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" +checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0" dependencies = [ "bytes", "itoa", @@ -3082,18 +3081,18 @@ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "hybrid-array" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c" +checksum = "707114b52a152fa7bdb290cd7cd5912d9467273b6d74e21b8d81aca1f8533f6b" dependencies = [ "typenum", ] [[package]] name = "hyper" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" +checksum = "d22053281f852e11534f5198498373cbb59295120a20771d90f7ed1897490a72" dependencies = [ "atomic-waker", "bytes", @@ -3119,7 +3118,7 @@ dependencies = [ "http", "hyper", "hyper-util", - "rustls 0.23.42", + "rustls 0.23.43", "tokio", "tokio-rustls", "tower-service", @@ -3786,9 +3785,9 @@ dependencies = [ [[package]] name = "interceptor" -version = "0.17.1" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f73f4fdb971cab2d599cbdc2ccf0c6ea8fb27347b871ed14c65ce2353dbe75b" +checksum = "88c11a956a48159f7fe539b8198f12b4db9b709ae5f94385b840db38f97fed74" dependencies = [ "async-trait", "bytes", @@ -3829,9 +3828,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.12.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" +checksum = "6a756c3fac73139e83f14c2d742155dd2b78d3ee56597b419a0579b7bdd6dd78" [[package]] name = "is-docker" @@ -4046,9 +4045,9 @@ checksum = "34b357333733e8260735ba5894eb928c02ecc69c78715f01a8019e7fa7f2db4c" [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libfuzzer-sys" @@ -4087,14 +4086,14 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652" +checksum = "2026a5056764a10b2bf5d56488cba40da507f5493a6a429340e2004d9ed085fa" dependencies = [ "bitflags 2.13.1", "libc", "plain", - "redox_syscall 0.9.0", + "redox_syscall 0.9.1", ] [[package]] @@ -4235,6 +4234,12 @@ dependencies = [ "sha2 0.11.0", ] +[[package]] +name = "lzma-rust2" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "243cb2271683c2855cad62142cbf38199db439b1b1e1ccdd5a011342894dd7cc" + [[package]] name = "matchbox_protocol" version = "0.14.0" @@ -5094,9 +5099,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "open" -version = "5.4.0" +version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0b3d059e795d52b8a72fef45658620edd4d9c359b338564aa14391ffa511ed5" +checksum = "f9cfef937e9c486488c7e3d949ae31c0f1d06bdacd75b99c086cb35356e30408" dependencies = [ "is-wsl", "libc", @@ -5654,22 +5659,22 @@ dependencies = [ [[package]] name = "ptr_meta" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9a0cf95a1196af61d4f1cbdab967179516d9a4a4312af1f31948f8f6224a79" +checksum = "743da816b98c921cdbe8628ef7381b76f25ecf4da599fc80aca90eae7ef70cc0" dependencies = [ "ptr_meta_derive", ] [[package]] name = "ptr_meta_derive" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1" +checksum = "1c8d9ca532f185d5d4db7a7c9d51420b452168ea1c2b913953281bd6fe1fcbd0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] @@ -5735,15 +5740,6 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" -[[package]] -name = "quick-xml" -version = "0.39.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e" -dependencies = [ - "memchr", -] - [[package]] name = "quick-xml" version = "0.41.0" @@ -5776,9 +5772,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rancor" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daff8b7b3ccf5f7ba270b3e7a0a4d4c701c5797e38dec27c7e2c3dbb830fed1c" +checksum = "9b534442d0fcdb55d66f373d9cac6d33b6293a2335bc2136dbd06ce0e87d2572" dependencies = [ "ptr_meta", ] @@ -5994,7 +5990,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "046a7d674daf459825b32f5062056d6882db0d2f5a479fbd76ccfc870ac18709" dependencies = [ "bytemuck", - "font-types 0.12.1", + "font-types 0.12.2", "once_cell", ] @@ -6024,9 +6020,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5102a6aaa05aa011a238e178e6bca86d2cb56fc9f586d37cb80f5bca6e07759" +checksum = "07507be7b4a5f9f26eeb41eeaebb1f5a7ff29dfb29739facc21d35bf8b11c21e" dependencies = [ "bitflags 2.13.1", ] @@ -6056,9 +6052,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.16" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -6205,9 +6201,9 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.8.17" +version = "0.8.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "815cc8a37159a463064825246cadb07961e25cd9885908606f6d08a98d8f8874" +checksum = "d9776093b7ca170454ab1406954f7b7d97a57c51dc6c0642957fb2ef25c2d399" dependencies = [ "bytecheck", "bytes", @@ -6224,13 +6220,13 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.8.17" +version = "0.8.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ed1a78a1b19d184b0daa629dd9a024573173ec7d485b287cb369fb3607cc1c" +checksum = "1c25ef604ac7dd839d44d64648952ea23c97866f124ff671b0ed2cf3ad9bb06e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] @@ -6275,9 +6271,9 @@ dependencies = [ [[package]] name = "rtcp" -version = "0.17.1" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb22f1cc99aea8152fdae6a4bc52a9caddf4bd1ff083d897c1f9f279956177e8" +checksum = "adad7f6a501162881032fc84b4bc78ae11f1b30748180b9f5cbe8810bf613aab" dependencies = [ "bytes", "thiserror 1.0.69", @@ -6286,9 +6282,9 @@ dependencies = [ [[package]] name = "rtp" -version = "0.17.1" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8d41f3565d9add11caabe7c61745517f4ef511c168a6aa2b59ce4c701802cde" +checksum = "149329e78ada26b5e174a4c281a7a7e5c8bda6008adc90daddd6f98fce56db29" dependencies = [ "bytes", "memchr", @@ -6369,9 +6365,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.42" +version = "0.23.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c54fcab019b409d04215d3a17cb438fd7fbf192ee61461f20f4fe18704bc138" +checksum = "0283386ce02abc0151e1761d08802dfe86c173b0b494af5cbc086574e453da06" dependencies = [ "once_cell", "ring", @@ -6392,9 +6388,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046" +checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" dependencies = [ "zeroize", ] @@ -6511,15 +6507,15 @@ dependencies = [ [[package]] name = "sdl3-src" -version = "3.4.12" +version = "3.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f0adb191c684688f845f1dab6f5a2b36428885d01aa3afd7ec32faa3fb0b7ca" +checksum = "e75661ac9dbedc58da5ce739e9688be6bf9d5542a282d89e7e29fdb7dcb43936" [[package]] name = "sdl3-sys" -version = "0.6.7+SDL-3.4.12" +version = "0.6.8+SDL-3.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89cde1ff23eb110e348da9b5be904381235163272a424938a2c99c86ea33041" +checksum = "b97e3d18c4994224aec3fb2d3d189f5fc88af0958fb8ed7b569272fde558f033" dependencies = [ "cc", "cmake", @@ -6551,9 +6547,9 @@ dependencies = [ [[package]] name = "sdp" -version = "0.17.1" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22c3b0257608d7de4de4c4ea650ccc2e6e3e45e3cd80039fcdee768bcb449253" +checksum = "66b6eecfa5151edef84d544ff3885dff98e5b5fe97586757a4b5118bde51c958" dependencies = [ "rand 0.9.5", "substring", @@ -6657,7 +6653,7 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 3.0.2", + "syn 3.0.3", ] [[package]] @@ -6681,7 +6677,7 @@ checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn 3.0.2", + "syn 3.0.3", ] [[package]] @@ -6707,17 +6703,17 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.21.3" +version = "0.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5d71c87d24cb22976f3f6e6c2c9296ef1f6958394e2b868d56ca01b082798a" +checksum = "20acd38118edb830eb5a0bfacaf83c687b9995f48d6983cdac3cb18ce1d571cc" dependencies = [ - "aes 0.9.1", + "aes 0.9.2", "bzip2", "cbc 0.2.1", "crc32fast", "getrandom 0.4.3", "js-sys", - "lzma-rust2", + "lzma-rust2 0.18.1", "ppmd-rust", "sha2 0.11.0", "wasm-bindgen", @@ -7212,9 +7208,9 @@ dependencies = [ [[package]] name = "stun" -version = "0.17.1" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e0fd33c04d4617df42c9c84c698511c59f59869629fb7a193067eec41bce347" +checksum = "2e3b8d5ad1dd4c8cd0595440f26521a71dd593cb5873ee8e06b91510b7d97269" dependencies = [ "base64 0.22.1", "crc", @@ -7278,9 +7274,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a207d6d6a2b7fc470b80443726053f18a2481b7e1eee970597051596567987a3" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" dependencies = [ "proc-macro2", "quote", @@ -7428,7 +7424,7 @@ checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" dependencies = [ "proc-macro2", "quote", - "syn 3.0.2", + "syn 3.0.3", ] [[package]] @@ -7447,9 +7443,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.53" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" dependencies = [ "deranged", "js-sys", @@ -7468,9 +7464,9 @@ checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c431b87111666e491a90baa837f914fb45cd5dc3c268591b0220ff5057f2085f" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" dependencies = [ "num-conv", "time-core", @@ -7568,9 +7564,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.53.0" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d988bcd52dbe076d3d46903332f58c912b87a2c49b1428419a5845154762ffee" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "bytes", "libc", @@ -7585,13 +7581,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.7.1" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6328af13490e73a9b4694030fafd93f8c8c6a9dede33e821c3fc63eddf8042ba" +checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] @@ -7610,7 +7606,7 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.42", + "rustls 0.23.43", "tokio", ] @@ -7630,23 +7626,24 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.18" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" dependencies = [ "bytes", "futures-core", "futures-io", "futures-sink", + "libc", "pin-project-lite", "tokio", ] [[package]] name = "toml" -version = "1.1.3+spec-1.1.0" +version = "1.1.4+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53c96ecdfa941c8fc4fcaed14f99ada8ebed502eef533015095a07e3301d4c3c" +checksum = "3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5" dependencies = [ "indexmap", "serde_core", @@ -7681,9 +7678,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" dependencies = [ "winnow", ] @@ -7822,9 +7819,9 @@ dependencies = [ [[package]] name = "turn" -version = "0.17.1" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a8b8ac3543b2a8eb0b28c7ac3d5f2db6221e057f3b3ae47cf7637b1333a5c3" +checksum = "d99249a493335eb44c4d7943a8751b22561a82c9903d8eb2d29780b3927880a7" dependencies = [ "async-trait", "base64 0.22.1", @@ -8072,9 +8069,9 @@ dependencies = [ [[package]] name = "value-bag" -version = "1.13.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dd4ec1eb1d240636e354a30110a1dfcb37047169a4d9bd6d9d3469df574b5c4" +checksum = "068e763e8279de7ab94b6afebded2cb701678af094feb1c12ccb061b4783c1be" [[package]] name = "varinteger" @@ -8217,9 +8214,9 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.15" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2857dd20b54e916ec7253b3d6b4d5c4d7d4ca2c33c2e11c6c76a99bd8744755d" +checksum = "016ccf01d1c58b6f8999612813e17c9b2390f7d70671428869913310f83f54b8" dependencies = [ "cc", "downcast-rs", @@ -8231,9 +8228,9 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.14" +version = "0.31.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144" +checksum = "e3c36a0f861ad76d0901f2800b46321410d9f73f2ea88aac0650d86c32688073" dependencies = [ "bitflags 2.13.1", "rustix 1.1.4", @@ -8329,12 +8326,12 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.10" +version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c324a910fd86ebdc364a3e61ec1f11737d3b1d6c273c0239ee8ff4bc0d24b4a" +checksum = "338e30461b3a2b67d70eb30a6d89f8e0c93a833e07d2ae89085cd070c4a00ac0" dependencies = [ "proc-macro2", - "quick-xml 0.39.4", + "quick-xml", "quote", ] @@ -8372,15 +8369,15 @@ dependencies = [ [[package]] name = "webbrowser" -version = "1.2.1" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc95580916af1e68ff6a7be07446fc5db73ebf71cf092de939bbf5f7e189f72" +checksum = "62c35be770821a214dbc362fc26908c853e776c0004294d0b10b8a6bad582f94" dependencies = [ - "core-foundation 0.10.1", "jni 0.22.4", "log", "ndk-context", "objc2 0.6.4", + "objc2-app-kit 0.3.2", "objc2-foundation 0.3.2", "url", "web-sys", @@ -8407,9 +8404,9 @@ dependencies = [ [[package]] name = "webrtc" -version = "0.17.1" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ba06986c4fcfbbb4b490abe4b88887b0ac9de0d3eb0aae36f3254e38d6ecdd1" +checksum = "baaacdf9d96224d7b6e2872ba065578f38775f7634367e3ac2cc87c7271da433" dependencies = [ "arc-swap", "async-trait", @@ -8449,9 +8446,9 @@ dependencies = [ [[package]] name = "webrtc-data" -version = "0.17.1" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7ca42127ee64bcb71da36d151e6f87b12488c5f14c4f379e73d2d52a8e54aa0" +checksum = "bd470286275809f2fcfcdb1e73ef5f1500be82eff7fe98150ce81b20aad5a2a4" dependencies = [ "bytes", "log", @@ -8464,9 +8461,9 @@ dependencies = [ [[package]] name = "webrtc-ice" -version = "0.17.1" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23ede72a36e5dda685814c389b2b34ac60b3ed000a81789e93626e27180eb785" +checksum = "5b7fd30f52e6fda8664779b84b7904b2553b76fee24d9ca665e774ae32b13f53" dependencies = [ "arc-swap", "async-trait", @@ -8489,9 +8486,9 @@ dependencies = [ [[package]] name = "webrtc-mdns" -version = "0.17.1" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b62bc8d3fb5024bc6ffde5f4aad2127ce17f8359dbc6f70208a324a12e44677" +checksum = "91ffa0ea00c0fae979aafa5db285fec5eeb360e1ea246ebec529ba4e09f8e03e" dependencies = [ "log", "socket2 0.5.10", @@ -8502,9 +8499,9 @@ dependencies = [ [[package]] name = "webrtc-media" -version = "0.17.1" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a28290bd0cdda196f8bf5c6f7dddaef18cc913ee0702cd1ea237bad203e337" +checksum = "26a6c7335bdd03dc023cb9a3bd7966866d969c92c86987b73aa16dfa39c7ca29" dependencies = [ "byteorder", "bytes", @@ -8515,9 +8512,9 @@ dependencies = [ [[package]] name = "webrtc-sctp" -version = "0.17.1" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ea6633bf951b3fd71eba3244731c8d0814f6a80300620a4370cad2983a5a42f" +checksum = "1c4b637f0d8eb96d900ac0f79b3060ddd21ca88dfefa467e96e67ab0016f2574" dependencies = [ "arc-swap", "async-trait", @@ -8533,9 +8530,9 @@ dependencies = [ [[package]] name = "webrtc-srtp" -version = "0.17.1" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e437f74b04f42049192e25cbb33c21c86be308875e6afe14cf8e28d1ffa35ac" +checksum = "45d2b667a0b5d04eebcb7cb22fd51b2af3721f418097b496e72de16386c8d0c3" dependencies = [ "aead", "aes 0.8.4", @@ -8556,9 +8553,9 @@ dependencies = [ [[package]] name = "webrtc-util" -version = "0.17.1" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65c1e0143a43d40f69e1d8c2ffc8734e379b49c06d45892ea4104c388bf9ead" +checksum = "1beae0b4f24969741c26ca282a257dc5823bd9cbe608f7e3ca3775102d323ad9" dependencies = [ "async-trait", "bitflags 1.3.2", @@ -9322,9 +9319,9 @@ dependencies = [ [[package]] name = "xcursor" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b" +checksum = "163b33ed8786455e2fa5d72f554057ce3f3182425434f756cd39c99839d88e23" [[package]] name = "xkbcommon" @@ -9439,7 +9436,7 @@ dependencies = [ "async-trait", "blocking", "enumflags2", - "event-listener 5.4.1", + "event-listener 5.4.2", "futures-core", "futures-lite", "hex", @@ -9528,18 +9525,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.54" +version = "0.8.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7cbbc0a705a0fd05cc3676525980d2bf5a9bc4adac6d6475209a7887cf59d19" +checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.54" +version = "0.8.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" +checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1" dependencies = [ "proc-macro2", "quote", @@ -9628,7 +9625,7 @@ version = "8.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d04a6b5381502aa6087c94c669499eb1602eb9c5e8198e534de571f7154809b" dependencies = [ - "aes 0.9.1", + "aes 0.9.2", "bzip2", "constant_time_eq", "crc32fast", @@ -9637,7 +9634,7 @@ dependencies = [ "getrandom 0.4.3", "hmac 0.13.0", "indexmap", - "lzma-rust2", + "lzma-rust2 0.16.5", "memchr", "pbkdf2", "ppmd-rust", @@ -9651,9 +9648,9 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.6.6" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b142a20ec14a91d5bc708c1dc21b080c550113d8aa77afa29635673a65dd02c5" +checksum = "34b31d188d9d685a4f9c7b46d6e36631b07058d2cfe190267adce54dc230bf12" [[package]] name = "zmij" From efe78e544a96ac6724a2c2651d8f0a62044e7467 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 6 Aug 2026 17:00:08 -0600 Subject: [PATCH 1110/1117] fix some clippy warnings (#1181) --- src/device/cart.rs | 9 ++++----- src/ui/video.rs | 36 ++++++++++++++++++++---------------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/src/device/cart.rs b/src/device/cart.rs index 9084906..56166e3 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -50,25 +50,24 @@ pub fn process(device: &mut device::Device, channel: usize) { match cmd { JCMD_RESET | JCMD_STATUS => { - let eeprom_type; - if device + let eeprom_type = if device .ui .storage .save_type .contains(&ui::storage::SaveTypes::Eeprom16k) { - eeprom_type = JDT_EEPROM_16K; + JDT_EEPROM_16K } else if device .ui .storage .save_type .contains(&ui::storage::SaveTypes::Eeprom4k) { - eeprom_type = JDT_EEPROM_4K; + JDT_EEPROM_4K } else { device.pif.ram[device.pif.channels[channel].rx.unwrap()] |= 0x80; return; - } + }; device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] = eeprom_type as u8; device.pif.ram[device.pif.channels[channel].rx_buf.unwrap() + 1] = diff --git a/src/ui/video.rs b/src/ui/video.rs index 2d712b4..dcfe08c 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -48,28 +48,32 @@ pub fn init(device: &mut device::Device, netplay: bool) { flags |= sdl3_sys::video::SDL_WINDOW_FULLSCREEN; } - let window_width; - let window_height; let scale = if device.ui.config.video.upscale > 1 && !device.ui.config.video.ssaa { device.ui.config.video.upscale as i32 } else { 2 }; - if device.cart.pal { - window_width = if device.ui.video.widescreen { - PAL_WIDESCREEN_WIDTH * scale - } else { - PAL_STANDARD_WIDTH * scale - }; - window_height = PAL_HEIGHT * scale; + + let (window_width, window_height) = if device.cart.pal { + ( + if device.ui.video.widescreen { + PAL_WIDESCREEN_WIDTH * scale + } else { + PAL_STANDARD_WIDTH * scale + }, + PAL_HEIGHT * scale, + ) } else { - window_width = if device.ui.video.widescreen { - NTSC_WIDESCREEN_WIDTH * scale - } else { - NTSC_STANDARD_WIDTH * scale - }; - window_height = NTSC_HEIGHT * scale; - } + ( + if device.ui.video.widescreen { + NTSC_WIDESCREEN_WIDTH * scale + } else { + NTSC_STANDARD_WIDTH * scale + }, + NTSC_HEIGHT * scale, + ) + }; + device.ui.video.window = unsafe { sdl3_sys::video::SDL_CreateWindow(window_title.as_ptr(), window_width, window_height, flags) }; From c2b64adbc7acdbd64a4fc237346187885caf2573 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 12 Aug 2026 19:34:42 +0000 Subject: [PATCH 1111/1117] remove rumble flag, just try to rumble (#1185) --- src/ui.rs | 4 ---- src/ui/input.rs | 28 ---------------------------- 2 files changed, 32 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index 36ee8c1..47bede5 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -192,28 +192,24 @@ impl Ui { input::Controllers { game_controller: std::ptr::null_mut(), joystick: std::ptr::null_mut(), - rumble: false, guid: sdl3_sys::guid::SDL_GUID::default(), last_key_state: 0, }, input::Controllers { game_controller: std::ptr::null_mut(), joystick: std::ptr::null_mut(), - rumble: false, guid: sdl3_sys::guid::SDL_GUID::default(), last_key_state: 0, }, input::Controllers { game_controller: std::ptr::null_mut(), joystick: std::ptr::null_mut(), - rumble: false, guid: sdl3_sys::guid::SDL_GUID::default(), last_key_state: 0, }, input::Controllers { game_controller: std::ptr::null_mut(), joystick: std::ptr::null_mut(), - rumble: false, guid: sdl3_sys::guid::SDL_GUID::default(), last_key_state: 0, }, diff --git a/src/ui/input.rs b/src/ui/input.rs index 3cd49f1..5cab30d 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -11,7 +11,6 @@ pub const UNKNOWN_CONTROLLER_NAME: &str = "Unknown controller"; #[derive(Default)] pub struct Controllers { - pub rumble: bool, pub game_controller: *mut sdl3_sys::gamepad::SDL_Gamepad, pub joystick: *mut sdl3_sys::joystick::SDL_Joystick, pub guid: sdl3_sys::guid::SDL_GUID, @@ -215,9 +214,6 @@ fn set_buttons( } pub fn set_rumble(ui: &ui::Ui, channel: usize, rumble: u8) { - if !ui.input.controllers[channel].rumble { - return; - } let controller = ui.input.controllers[channel].game_controller; let joystick = ui.input.controllers[channel].joystick; if !controller.is_null() { @@ -598,18 +594,6 @@ pub fn init(ui: &mut ui::Ui) { ui.input.controllers[i].game_controller = gamepad; ui.input.controllers[i].guid = unsafe { sdl3_sys::gamepad::SDL_GetGamepadGUIDForID(joystick_id) }; - let properties = - unsafe { sdl3_sys::gamepad::SDL_GetGamepadProperties(gamepad) }; - if properties == 0 { - eprintln!("could not get gamepad properties"); - } - ui.input.controllers[i].rumble = unsafe { - sdl3_sys::properties::SDL_GetBooleanProperty( - properties, - sdl3_sys::gamepad::SDL_PROP_GAMEPAD_CAP_RUMBLE_BOOLEAN, - false, - ) - }; } } else { let joystick = unsafe { sdl3_sys::joystick::SDL_OpenJoystick(joystick_id) }; @@ -619,18 +603,6 @@ pub fn init(ui: &mut ui::Ui) { ui.input.controllers[i].joystick = joystick; ui.input.controllers[i].guid = unsafe { sdl3_sys::joystick::SDL_GetJoystickGUIDForID(joystick_id) }; - let properties = - unsafe { sdl3_sys::joystick::SDL_GetJoystickProperties(joystick) }; - if properties == 0 { - eprintln!("could not get joystick properties"); - } - ui.input.controllers[i].rumble = unsafe { - sdl3_sys::properties::SDL_GetBooleanProperty( - properties, - sdl3_sys::joystick::SDL_PROP_JOYSTICK_CAP_RUMBLE_BOOLEAN, - false, - ) - }; } } } else { From 60582608f1d604cc0fcd4a4ae79f789873f013a8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 19 Aug 2026 13:58:20 +0000 Subject: [PATCH 1112/1117] add VRU word for pirate-sword (#1188) --- src/device/controller/vru.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/device/controller/vru.rs b/src/device/controller/vru.rs index e3bf841..a545dec 100644 --- a/src/device/controller/vru.rs +++ b/src/device/controller/vru.rs @@ -852,6 +852,10 @@ fn create_word_mappings(device: &mut device::Device) { String::from("03B101AA02F10045000303C603FC02D900060390"), String::from("pirate-sword"), ), + ( + String::from("03B101AA02F10045000303C603FC0126030000060390"), + String::from("pirate-sword"), + ), ( String::from("03C301D403FC0126030000060390"), String::from("toy-sword"), From 01ad4b5fe4e31d267d82cdd9bc80e957bb1134c7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 20 Aug 2026 18:39:19 +0000 Subject: [PATCH 1113/1117] update rust (#1190) --- Cargo.lock | 391 +++++++++++++++++++++++--------------------- Cargo.toml | 2 +- rust-toolchain.toml | 2 +- 3 files changed, 203 insertions(+), 192 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index aae66bf..c9f5013 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -24,7 +24,7 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3b7f7f85a7e5f68090000ed7622545829afd484d210358702ae4cb97dd0c320" dependencies = [ - "uuid 1.24.0", + "uuid 1.24.1", ] [[package]] @@ -261,7 +261,7 @@ dependencies = [ "ndk-context", "ndk-sys 0.6.0+11769913", "num_enum", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -656,9 +656,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.91" +version = "0.1.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae36dc4177970ef04fde5178d3e2429882def40e57a451f919c098f72baa6cec" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2", "quote", @@ -778,7 +778,7 @@ dependencies = [ "num-traits", "pastey", "rayon", - "thiserror 2.0.19", + "thiserror 2.0.20", "v_frame", "y4m", ] @@ -1054,13 +1054,13 @@ dependencies = [ [[package]] name = "bytemuck_derive" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f65693059b6b9c588b9f62fed1cedbf0a8b805631457ea162d68f0de186f3de5" +checksum = "fc0e56a716f1e132ff6bf4bdac1c944a3fcdc1cae65f70a4a2a1ac3b401d2d1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] @@ -1161,9 +1161,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.4.0" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9" +checksum = "509591b7bcd67f4ef775afad7662703b4935daaa6ec0e5605cfb1090b32a2b6d" dependencies = [ "find-msvc-tools", "jobserver", @@ -1301,9 +1301,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.5" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301b56658598e48f3648647ac6fc887be7e7108eddfa4e9b63fcf3ec58c0cadf" +checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca" dependencies = [ "clap_builder", "clap_derive", @@ -1311,9 +1311,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.5" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94a65403d1a1bd28f7dc68eb8506e8874808ee5eecb59298de588e2e1407a078" +checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889" dependencies = [ "anstream", "anstyle", @@ -1378,7 +1378,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" dependencies = [ - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -1425,9 +1425,9 @@ dependencies = [ [[package]] name = "const-field-offset" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9713489fbc45a2d113f58d17448c73115d533ed27fd2f2d0e5e5c69663eaf19b" +checksum = "d535c69e75b4e3c69e17205b5b37a91936c54086cecd339b70071500786acb9c" dependencies = [ "const-field-offset-macro", "field-offset", @@ -1435,13 +1435,13 @@ dependencies = [ [[package]] name = "const-field-offset-macro" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b5dc851b7ea80cc4f69aa28632385ffd3e0f88014d53db3f2e5a781896ca783" +checksum = "93d5848843a221ac268cfdd6bfd14e68d5d3dfa79d52c880aafab93f9517fb74" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] @@ -1875,7 +1875,7 @@ dependencies = [ "serde_derive", "serde_json", "serde_repr", - "thiserror 2.0.19", + "thiserror 2.0.20", "uuid 0.8.2", ] @@ -2147,9 +2147,9 @@ dependencies = [ [[package]] name = "error-code" -version = "3.3.2" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" +checksum = "0b5343afd4a8365a643ac588dab4cf234a190c7f6c88c9f6dd6ffe00837661b7" [[package]] name = "euclid" @@ -2295,9 +2295,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" [[package]] name = "fixed_decimal" @@ -2356,9 +2356,9 @@ dependencies = [ [[package]] name = "font-types" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a7299a780854a6d391be2ae1c8521c9368471b559dbfd6a8dbd9f407eaff100" +checksum = "75382bc7392ef10aad10935f92fc3db36d2d4dad0e5d96d8d65e04f89a07ec39" dependencies = [ "bytemuck", ] @@ -2450,9 +2450,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a88cf1f829d945f548cf8fec32c61b1f202b6d93b45848602fc02af4b12ad218" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -2465,9 +2465,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "262590f4fe6afeb0bc83be1daa64e52657fe185690a958af7f3ad0e92085c5ae" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -2475,15 +2475,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6754879cc9f2c66f88c6e5c35344bb0bdb0708b0352b1201815667c7eabc7458" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -2492,9 +2492,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-lite" @@ -2511,26 +2511,26 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] name = "futures-sink" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e34418ac499d6305c2fb5ad0ed2f6ac998c5f8ca209b4510f7f94242c647e307" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-timer" @@ -2544,9 +2544,9 @@ dependencies = [ [[package]] name = "futures-util" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -2835,7 +2835,7 @@ dependencies = [ "hashbrown 0.16.1", "log", "presser", - "thiserror 2.0.19", + "thiserror 2.0.20", "windows", ] @@ -2878,9 +2878,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.15" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" +checksum = "839c0e8a181239723652be9062bb56ca5bf5f64011f73b623f6f4fc59086a228" dependencies = [ "atomic-waker", "bytes", @@ -3062,9 +3062,9 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2" +checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c" dependencies = [ "bytes", "futures-core", @@ -3482,9 +3482,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" dependencies = [ "displaydoc", "potential_utf", @@ -3496,15 +3496,15 @@ dependencies = [ [[package]] name = "icu_decimal" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "288247df2e32aa776ac54fdd64de552149ac43cb840f2761811f0e8d09719dd4" +checksum = "9eb8f655bba2d0c0459e43a5b0e6cd3cd388109898fb3d85d048165e8b0abd08" dependencies = [ "displaydoc", "fixed_decimal", "icu_decimal_data", - "icu_locale", "icu_locale_core", + "icu_locale_fallback", "icu_plurals", "icu_provider", "writeable", @@ -3513,30 +3513,15 @@ dependencies = [ [[package]] name = "icu_decimal_data" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f14a5ca9e8af29eef62064f269078424283d90dbaffeac5225addf62aaabc22" - -[[package]] -name = "icu_locale" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5a396343c7208121dc86e35623d3dfe19814a7613cfd14964994cdc9c9a2e26" -dependencies = [ - "icu_collections", - "icu_locale_core", - "icu_locale_data", - "icu_provider", - "potential_utf", - "tinystr", - "zerovec", -] +checksum = "e4c887fc7d4c297cf3f9436864af9e3dba7f8be9415a6c2a7f392f3b1636298c" [[package]] name = "icu_locale_core" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" dependencies = [ "displaydoc", "litemap", @@ -3547,16 +3532,30 @@ dependencies = [ ] [[package]] -name = "icu_locale_data" -version = "2.2.0" +name = "icu_locale_fallback" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fdcc9ac77c6d74ff5cf6e65ef3181d6af32003b16fce3a77fb451d2f695993" +checksum = "251af8e57c9400e3eb58242fe5b8b1152b2a64fdf4cf632f923c38ccee6f2fa9" +dependencies = [ + "icu_locale_core", + "icu_locale_fallback_data", + "icu_provider", + "potential_utf", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locale_fallback_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "decf2a22ec8fa68f1a0c1129a3f8583f8f8bc24e8b9ccbe98ead99f62a4dc3a8" [[package]] name = "icu_normalizer" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" dependencies = [ "icu_collections", "icu_normalizer_data", @@ -3568,18 +3567,18 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" +checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" [[package]] name = "icu_plurals" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a50023f1d49ad5c4333380328a0d4a19e4b9d6d842ec06639affd5ba47c8103" +checksum = "e475e6766ef87b1d3c1f97be6363995b0bfaeddbc789671615df598a97ff0593" dependencies = [ "fixed_decimal", - "icu_locale", + "icu_locale_fallback", "icu_plurals_data", "icu_provider", "zerovec", @@ -3587,16 +3586,17 @@ dependencies = [ [[package]] name = "icu_plurals_data" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8485497155dc865f901decb93ecc20d3e467df67bfeceb91e3ba34e2b11e8e1d" +checksum = "1251aa39a95e1333888e499b1263e1c196447a28948acf5bdabd82c046f153bf" [[package]] name = "icu_properties" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" dependencies = [ + "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", @@ -3607,15 +3607,15 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" +checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" [[package]] name = "icu_provider" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +checksum = "92a7ed671a6aad807a8651a2e1782a6598fda9ce5185dd8158549e95a91c6428" dependencies = [ "displaydoc", "icu_locale_core", @@ -3630,24 +3630,25 @@ dependencies = [ [[package]] name = "icu_segmenter" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c0794db0b1a86193ac9c48768d0e6c52c54448e0870ad87907d456ee0dac964" +checksum = "82d07aafccd67af15d02512a6adf5896fbc5ed00f2e99b471d2efa14016db3db" dependencies = [ "icu_collections", - "icu_locale", + "icu_locale_fallback", "icu_provider", "icu_segmenter_data", "potential_utf", + "smallvec", "utf8_iter", "zerovec", ] [[package]] name = "icu_segmenter_data" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a2c462a4d927d512f5f882a033ddd62f33a05bb9f230d98f736ac3dc85938f" +checksum = "ae293c039020f9ec10710af98d29ce6aa2051486638b49c9a6409f3b4a9e98ad" [[package]] name = "idna" @@ -3909,7 +3910,7 @@ dependencies = [ "jni-sys 0.4.1", "log", "simd_cesu8", - "thiserror 2.0.19", + "thiserror 2.0.20", "walkdir", "windows-link", ] @@ -3967,9 +3968,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.103" +version = "0.3.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" dependencies = [ "cfg-if", "futures-util", @@ -4086,14 +4087,14 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2026a5056764a10b2bf5d56488cba40da507f5493a6a429340e2004d9ed085fa" +checksum = "28d0a00925a9f930d679b6789b721e3a7f9ed110f41b86d2497caa780c3a070a" dependencies = [ "bitflags 2.13.1", "libc", "plain", - "redox_syscall 0.9.1", + "redox_syscall 0.9.2", ] [[package]] @@ -4147,9 +4148,9 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" [[package]] name = "litrs" @@ -4201,7 +4202,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7755f08423275157ad1680aaecc9ccb7e0cc633da3240fea2d1522935cc15c72" dependencies = [ "lyon_path", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -4236,9 +4237,9 @@ dependencies = [ [[package]] name = "lzma-rust2" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "243cb2271683c2855cad62142cbf38199db439b1b1e1ccdd5a011342894dd7cc" +checksum = "5c1bf3331fb5cf60f2ef15b63361f6cc39492a5d94c096053c395515e17d147f" [[package]] name = "matchbox_protocol" @@ -4249,7 +4250,7 @@ dependencies = [ "cfg-if", "derive_more", "serde", - "uuid 1.24.0", + "uuid 1.24.1", ] [[package]] @@ -4275,7 +4276,7 @@ dependencies = [ "serde", "serde-wasm-bindgen", "serde_json", - "thiserror 2.0.19", + "thiserror 2.0.20", "tokio-util", "wasm-bindgen", "wasm-bindgen-futures", @@ -4404,7 +4405,7 @@ dependencies = [ "objc2-foundation 0.3.2", "once_cell", "png", - "thiserror 2.0.19", + "thiserror 2.0.20", "windows-sys 0.61.2", ] @@ -4450,7 +4451,7 @@ dependencies = [ "once_cell", "rustc-hash 1.1.0", "spirv", - "thiserror 2.0.19", + "thiserror 2.0.20", "unicode-ident", ] @@ -4634,9 +4635,9 @@ dependencies = [ [[package]] name = "num-integer" -version = "0.1.46" +version = "0.1.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" dependencies = [ "num-traits", ] @@ -5457,9 +5458,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "plain" @@ -5534,9 +5535,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d20d5497ef88037a52ff98267d066e7f11fcc5e99bbfbd58a42336193aacec3" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" dependencies = [ "critical-section", ] @@ -5565,9 +5566,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" dependencies = [ "serde_core", "writeable", @@ -5892,7 +5893,7 @@ dependencies = [ "rand 0.9.5", "rand_chacha 0.9.0", "simd_helpers", - "thiserror 2.0.19", + "thiserror 2.0.20", "v_frame", "wasm-bindgen", ] @@ -5990,7 +5991,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "046a7d674daf459825b32f5062056d6882db0d2f5a479fbd76ccfc870ac18709" dependencies = [ "bytemuck", - "font-types 0.12.2", + "font-types 0.12.3", "once_cell", ] @@ -6020,9 +6021,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07507be7b4a5f9f26eeb41eeaebb1f5a7ff29dfb29739facc21d35bf8b11c21e" +checksum = "f1c93da5bb2c5d4e6c0ef7abeead62c89169a0a4882bfb83ac892f2423aea2fe" dependencies = [ "bitflags 2.13.1", ] @@ -6035,7 +6036,7 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.17", "libredox", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -6215,7 +6216,7 @@ dependencies = [ "rend", "rkyv_derive", "tinyvec", - "uuid 1.24.0", + "uuid 1.24.1", ] [[package]] @@ -6372,7 +6373,7 @@ dependencies = [ "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.103.13", + "rustls-webpki 0.103.14", "subtle", "zeroize", ] @@ -6407,9 +6408,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.13" +version = "0.103.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +checksum = "0527518605e68109d875e248ea259b6758801cf165e4b2c2733ae3b51f12535a" dependencies = [ "ring", "rustls-pki-types", @@ -6703,9 +6704,9 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.21.4" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20acd38118edb830eb5a0bfacaf83c687b9995f48d6983cdac3cb18ce1d571cc" +checksum = "cabfe266b357df6e7aa8d0c9bb11eac1fd0ed049f6318455bf55345d9de6c3b5" dependencies = [ "aes 0.9.2", "bzip2", @@ -6713,7 +6714,7 @@ dependencies = [ "crc32fast", "getrandom 0.4.3", "js-sys", - "lzma-rust2 0.18.1", + "lzma-rust2 0.19.0", "ppmd-rust", "sha2 0.11.0", "wasm-bindgen", @@ -6997,7 +6998,7 @@ dependencies = [ "log", "memmap2", "rustix 1.1.4", - "thiserror 2.0.19", + "thiserror 2.0.20", "wayland-backend", "wayland-client", "wayland-csd-frame", @@ -7398,11 +7399,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.19" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ - "thiserror-impl 2.0.19", + "thiserror-impl 2.0.20", ] [[package]] @@ -7418,9 +7419,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.19" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", @@ -7538,9 +7539,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" dependencies = [ "displaydoc", "serde_core", @@ -7796,7 +7797,7 @@ dependencies = [ "log", "rand 0.9.5", "sha1 0.10.7", - "thiserror 2.0.19", + "thiserror 2.0.20", "utf-8", ] @@ -7814,7 +7815,7 @@ dependencies = [ "native-tls", "rand 0.10.2", "sha1 0.11.0", - "thiserror 2.0.19", + "thiserror 2.0.20", ] [[package]] @@ -8046,9 +8047,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.24.0" +version = "1.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239" +checksum = "2cefc03fd367c0c6d4305de1b312cf00248c4114f4a0418ce6a6af769e3b0bd9" dependencies = [ "getrandom 0.4.3", "js-sys", @@ -8159,9 +8160,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" dependencies = [ "cfg-if", "once_cell", @@ -8172,9 +8173,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.76" +version = "0.4.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" +checksum = "6b7777d5cc23d0e91404e53ce2d5e8ec7acae3026b16233dba62cd3246457950" dependencies = [ "js-sys", "wasm-bindgen", @@ -8182,9 +8183,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -8192,9 +8193,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" dependencies = [ "bumpalo", "proc-macro2", @@ -8205,18 +8206,18 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" dependencies = [ "unicode-ident", ] [[package]] name = "wayland-backend" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016ccf01d1c58b6f8999612813e17c9b2390f7d70671428869913310f83f54b8" +checksum = "38a91b4eaddff87b1cd1074985e3713da4af2c49742d1b356b2c01670a67a078" dependencies = [ "cc", "downcast-rs", @@ -8349,9 +8350,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.103" +version = "0.3.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" +checksum = "c435338968042f4f59a557f690a253676d47ce13ceb55d70100e7facf6620a30" dependencies = [ "js-sys", "wasm-bindgen", @@ -8478,7 +8479,7 @@ dependencies = [ "tokio", "turn", "url", - "uuid 1.24.0", + "uuid 1.24.1", "waitgroup", "webrtc-mdns", "webrtc-util", @@ -8631,7 +8632,7 @@ dependencies = [ "raw-window-handle", "rustc-hash 1.1.0", "smallvec", - "thiserror 2.0.19", + "thiserror 2.0.20", "wgpu-core-deps-apple", "wgpu-core-deps-emscripten", "wgpu-core-deps-windows-linux-android", @@ -8710,7 +8711,7 @@ dependencies = [ "raw-window-metal", "renderdoc-sys", "smallvec", - "thiserror 2.0.19", + "thiserror 2.0.20", "wasm-bindgen", "wayland-sys", "web-sys", @@ -9212,9 +9213,9 @@ dependencies = [ [[package]] name = "writeable" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" [[package]] name = "ws_stream_wasm" @@ -9229,7 +9230,7 @@ dependencies = [ "pharos", "rustc_version", "send_wrapper", - "thiserror 2.0.19", + "thiserror 2.0.20", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -9355,9 +9356,9 @@ checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] name = "xml-rs" -version = "0.8.28" +version = "0.8.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" +checksum = "e450f9b2ed1dff33c94c12589a87338689467b9c4f5d8a5710bd09a847d2c8a7" [[package]] name = "xmlwriter" @@ -9422,9 +9423,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.18.0" +version = "5.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe18fb60dc696039e738717b76eaea21e7a4489bbb1885020b43c94236d7e98a" +checksum = "5db4be7c075cb421e4b7ee645541604239bd243ba7c357511f4ff3a74b555907" dependencies = [ "async-broadcast", "async-executor", @@ -9447,7 +9448,7 @@ dependencies = [ "serde_repr", "tracing", "uds_windows", - "uuid 1.24.0", + "uuid 1.24.1", "windows-sys 0.61.2", "winnow", "zbus_macros", @@ -9481,14 +9482,14 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.18.0" +version = "5.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe96480bed92df2b442a1a30df364e12d08eed03aeb061f2b8dc6afb2be91119" +checksum = "2990635d09ade6df1868f72f8cac69a876a90981e8bd3c40b1be413f8dc88f40" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", "zbus_names", "zvariant", "zvariant_utils", @@ -9517,6 +9518,15 @@ dependencies = [ "zvariant", ] +[[package]] +name = "zcheapstr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1afec51604565183aeb5c54c20aeab286120d4e4460f7f76e3e8bb8c0d99473" +dependencies = [ + "serde", +] + [[package]] name = "zeno" version = "0.3.3" @@ -9586,9 +9596,9 @@ dependencies = [ [[package]] name = "zerotrie" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" dependencies = [ "displaydoc", "yoke", @@ -9598,9 +9608,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" dependencies = [ "serde", "yoke", @@ -9610,13 +9620,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.3" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +checksum = "9f212a141d820099d57ffafb9569be9617a6f27d3dc881fbee8fb56642f917a9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] @@ -9700,9 +9710,9 @@ dependencies = [ [[package]] name = "zune-core" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" +checksum = "d56377fd46368984a170bc5aac5567e52ca5da874caa60bea39fcbca78fb658b" [[package]] name = "zune-inflate" @@ -9724,40 +9734,41 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.13.1" +version = "5.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee2a0bcd2a907786a456fff45aaaaf54c9ba5f50b71ae9ec1a4edd200c94911" +checksum = "c1d34c27cc6cdd1f458427519dd6b8612f7b7e3f7b9a0b2355d041dda9869147" dependencies = [ "endi", "enumflags2", "serde", "winnow", + "zcheapstr", "zvariant_derive", "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "5.13.1" +version = "5.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38a708216a18780796770bfe3f4739c7c83a3e8f789b755534bbbc06e4e23e12" +checksum = "864155e69b4352db0c7f374917bf45d1e0c8d17659c8b3dbf9795f3673f8c497" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "3.5.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90cb9383f9b45290407a1258b202d3f8f01db719eb60b4e4055c6375af4fc7c7" +checksum = "bad0294361a320b694a328460dc73add56c306150f5cb6bfafc44446120008a3" dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.119", + "syn 3.0.3", "winnow", ] diff --git a/Cargo.toml b/Cargo.toml index 4be9c39..f233a2e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "gopher64" version = "1.1.34" edition = "2024" -rust-version = "1.97.1" +rust-version = "1.98.0" [features] default = ["gui"] diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 7243604..b73c15e 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.97.1" +channel = "1.98.0" From d078c66469e89e8b23fa4371b0b829f0b126484c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 21 Aug 2026 09:18:38 +0000 Subject: [PATCH 1114/1117] fix libdragon interrupt issue (#1191) --- src/device/cop0.rs | 1 - src/device/exceptions.rs | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/device/cop0.rs b/src/device/cop0.rs index 87521bd..75e48a3 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -236,7 +236,6 @@ fn set_control_registers(device: &mut device::Device, index: u32, mut data: u64) pub fn compare_event(device: &mut device::Device) { device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] |= device::cop0::COP0_CAUSE_IP7; - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] &= !device::cop0::COP0_CAUSE_EXCCODE_MASK; device::events::create_event_at( device, diff --git a/src/device/exceptions.rs b/src/device/exceptions.rs index e11281b..6297507 100644 --- a/src/device/exceptions.rs +++ b/src/device/exceptions.rs @@ -14,8 +14,6 @@ pub fn check_pending_interrupts(device: &mut device::Device) { if device.mi.regs[device::mi::MI_INTR_REG] & device.mi.regs[device::mi::MI_INTR_MASK_REG] != 0 { device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] |= device::cop0::COP0_CAUSE_IP2; - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] &= - !device::cop0::COP0_CAUSE_EXCCODE_MASK; } if (device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] @@ -35,6 +33,7 @@ pub fn check_pending_interrupts(device: &mut device::Device) { } pub fn interrupt_exception(device: &mut device::Device) { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] &= !device::cop0::COP0_CAUSE_EXCCODE_MASK; exception_general(device, 0x180); } From aac8572ee803ead2a66e601f91e72da1552f152b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 21 Aug 2026 09:41:11 +0000 Subject: [PATCH 1115/1117] bump ver (#1192) --- Cargo.lock | 18 +++++++++--------- Cargo.toml | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c9f5013..8b37282 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1161,9 +1161,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.4.3" +version = "1.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "509591b7bcd67f4ef775afad7662703b4935daaa6ec0e5605cfb1090b32a2b6d" +checksum = "0ad534f4357a5264cce5019c989cf66a4f0dc4e0d1b1d15f8aacec0ff7360273" dependencies = [ "find-msvc-tools", "jobserver", @@ -2036,9 +2036,9 @@ dependencies = [ [[package]] name = "either" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "elliptic-curve" @@ -2783,7 +2783,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.34" +version = "1.1.36" dependencies = [ "bindgen", "cc", @@ -3613,9 +3613,9 @@ checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" [[package]] name = "icu_provider" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92a7ed671a6aad807a8651a2e1782a6598fda9ce5185dd8158549e95a91c6428" +checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" dependencies = [ "displaydoc", "icu_locale_core", @@ -9620,9 +9620,9 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f212a141d820099d57ffafb9569be9617a6f27d3dc881fbee8fb56642f917a9" +checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index f233a2e..683dbb3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.34" +version = "1.1.36" edition = "2024" rust-version = "1.98.0" From 1957e8a579a5f5fc45cb5dbbb3d30098d57caf2d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 24 Aug 2026 12:35:05 +0000 Subject: [PATCH 1116/1117] use rustls (#1194) * use rustls * more * more * more * more * more --- Cargo.lock | 300 ++++++++++++++++++++-------------------------- Cargo.toml | 8 +- src/ui.rs | 38 ++++-- src/ui/netplay.rs | 2 + 4 files changed, 170 insertions(+), 178 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8b37282..3cfbd93 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -24,7 +24,7 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3b7f7f85a7e5f68090000ed7622545829afd484d210358702ae4cb97dd0c320" dependencies = [ - "uuid 1.24.1", + "uuid 1.25.0", ] [[package]] @@ -651,7 +651,7 @@ dependencies = [ "futures-io", "rustls 0.21.12", "rustls-pemfile", - "webpki-roots", + "webpki-roots 0.22.6", ] [[package]] @@ -662,7 +662,7 @@ checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -754,7 +754,7 @@ dependencies = [ "derive_utils", "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -981,9 +981,9 @@ dependencies = [ [[package]] name = "blocking" -version = "1.6.2" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +checksum = "a70e4329df6cb94385eed412ec92375c3cdd8a6e502493d1229b6414e4036dfa" dependencies = [ "async-channel 2.5.0", "async-task", @@ -1040,7 +1040,7 @@ checksum = "46d07918caa9eeaaf06b7873925c53a61daac173539b4f7715090745e44e4e69" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -1060,7 +1060,7 @@ checksum = "fc0e56a716f1e132ff6bf4bdac1c944a3fcdc1cae65f70a4a2a1ac3b401d2d1f" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -1330,7 +1330,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -1441,7 +1441,7 @@ checksum = "93d5848843a221ac268cfdd6bfd14e68d5d3dfa79d52c880aafab93f9517fb74" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -1520,7 +1520,7 @@ dependencies = [ "bitflags 1.3.2", "core-foundation 0.9.4", "core-graphics-types", - "foreign-types 0.5.0", + "foreign-types", "libc", ] @@ -1591,9 +1591,9 @@ checksum = "217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853" [[package]] name = "crc32fast" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +checksum = "8498c871161e1742aaa9d52551b2d6ebdd4c3d45a3be423e3728f33b955be550" dependencies = [ "cfg-if", ] @@ -1815,7 +1815,7 @@ checksum = "dc05a5d33db20c784f873e84934ad94bb209a090987ac5f62fede2c178234f23" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -1905,7 +1905,7 @@ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -2356,9 +2356,9 @@ dependencies = [ [[package]] name = "font-types" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75382bc7392ef10aad10935f92fc3db36d2d4dad0e5d96d8d65e04f89a07ec39" +checksum = "e64eb721ca85a34323425f4041adc5d82704d3782d5f8f03793bc012419dce23" dependencies = [ "bytemuck", ] @@ -2397,15 +2397,6 @@ dependencies = [ "yeslogic-fontconfig-sys", ] -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared 0.1.1", -] - [[package]] name = "foreign-types" version = "0.5.0" @@ -2413,7 +2404,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" dependencies = [ "foreign-types-macros", - "foreign-types-shared 0.3.1", + "foreign-types-shared", ] [[package]] @@ -2424,15 +2415,9 @@ checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "foreign-types-shared" version = "0.3.1" @@ -2517,7 +2502,7 @@ checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -2807,6 +2792,7 @@ dependencies = [ "reqwest", "rfd", "rustc-hash 2.1.3", + "rustls 0.23.43", "sdl3-src", "sdl3-sys", "sdl3-ttf-sys", @@ -2821,6 +2807,7 @@ dependencies = [ "spin_sleep", "tokio", "tokio-tungstenite", + "webpki-roots 1.0.9", "winresource", "zip", ] @@ -3124,22 +3111,6 @@ dependencies = [ "tower-service", ] -[[package]] -name = "hyper-tls" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" -dependencies = [ - "bytes", - "http-body-util", - "hyper", - "hyper-util", - "native-tls", - "tokio", - "tokio-native-tls", - "tower-service", -] - [[package]] name = "hyper-util" version = "0.1.20" @@ -4094,7 +4065,7 @@ dependencies = [ "bitflags 2.13.1", "libc", "plain", - "redox_syscall 0.9.2", + "redox_syscall 0.9.3", ] [[package]] @@ -4169,9 +4140,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" dependencies = [ "value-bag", ] @@ -4237,9 +4208,9 @@ dependencies = [ [[package]] name = "lzma-rust2" -version = "0.19.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1bf3331fb5cf60f2ef15b63361f6cc39492a5d94c096053c395515e17d147f" +checksum = "e6effa5c575f68109664a511f378c0e170888e33a426694ee0910a673762bd47" [[package]] name = "matchbox_protocol" @@ -4250,7 +4221,7 @@ dependencies = [ "cfg-if", "derive_more", "serde", - "uuid 1.24.1", + "uuid 1.25.0", ] [[package]] @@ -4455,23 +4426,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "native-tls" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - [[package]] name = "natord" version = "1.0.9" @@ -5100,67 +5054,20 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "open" -version = "5.4.1" +version = "5.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9cfef937e9c486488c7e3d949ae31c0f1d06bdacd75b99c086cb35356e30408" +checksum = "ade3be4664bc1ef537ce133015f04c176b737815c2ba9fd60edf212d6e90dd55" dependencies = [ "is-wsl", "libc", ] -[[package]] -name = "openssl" -version = "0.10.81" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77823a27f0babb03091cb9ed9ef80af3b39dbc82f97e8fa530374b7dafd87a45" -dependencies = [ - "bitflags 2.13.1", - "cfg-if", - "foreign-types 0.3.2", - "libc", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - [[package]] name = "openssl-probe" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" -[[package]] -name = "openssl-src" -version = "300.6.1+3.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46eb8fb9fb3b61ce1c0f8a026c4c1a0714d3a9e138e7fbde78753ce2babc3846" -dependencies = [ - "cc", -] - -[[package]] -name = "openssl-sys" -version = "0.9.117" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b47e7e6bb2c38cd930d25a23b40fa52e068c10e85f3e03a7f5ba5aaca5713695" -dependencies = [ - "cc", - "libc", - "openssl-src", - "pkg-config", - "vcpkg", -] - [[package]] name = "option-ext" version = "0.2.0" @@ -5179,9 +5086,9 @@ dependencies = [ [[package]] name = "ordered-float" -version = "5.3.0" +version = "5.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7d950ca161dc355eaf28f82b11345ed76c6e1f6eb1f4f4479e0323b9e2fbd0e" +checksum = "8c7c9e0d9b23589f26070720bac724174bfec1083e82f7854cdd0267518343c0" dependencies = [ "num-traits", ] @@ -5675,7 +5582,7 @@ checksum = "1c8d9ca532f185d5d4db7a7c9d51420b452168ea1c2b913953281bd6fe1fcbd0" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -5991,7 +5898,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "046a7d674daf459825b32f5062056d6882db0d2f5a479fbd76ccfc870ac18709" dependencies = [ "bytemuck", - "font-types 0.12.3", + "font-types 0.12.4", "once_cell", ] @@ -6021,9 +5928,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1c93da5bb2c5d4e6c0ef7abeead62c89169a0a4882bfb83ac892f2423aea2fe" +checksum = "d678d17679829e73d371e96880897e98fee2ded7acc0a50bdf8af2affa4b2fe5" dependencies = [ "bitflags 2.13.1", ] @@ -6099,21 +6006,21 @@ dependencies = [ "http-body-util", "hyper", "hyper-rustls", - "hyper-tls", "hyper-util", "js-sys", "log", "mime", - "native-tls", "percent-encoding", "pin-project-lite", + "rustls 0.23.43", "rustls-pki-types", + "rustls-platform-verifier", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", "tokio", - "tokio-native-tls", + "tokio-rustls", "tower", "tower-http", "tower-service", @@ -6216,7 +6123,7 @@ dependencies = [ "rend", "rkyv_derive", "tinyvec", - "uuid 1.24.1", + "uuid 1.25.0", ] [[package]] @@ -6227,7 +6134,7 @@ checksum = "1c25ef604ac7dd839d44d64648952ea23c97866f124ff671b0ed2cf3ad9bb06e" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -6373,11 +6280,23 @@ dependencies = [ "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.103.14", + "rustls-webpki 0.103.15", "subtle", "zeroize", ] +[[package]] +name = "rustls-native-certs" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework", +] + [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -6396,6 +6315,33 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-platform-verifier" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0" +dependencies = [ + "core-foundation 0.10.1", + "core-foundation-sys", + "jni 0.22.4", + "log", + "once_cell", + "rustls 0.23.43", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki 0.103.15", + "security-framework", + "security-framework-sys", + "webpki-root-certs", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + [[package]] name = "rustls-webpki" version = "0.101.7" @@ -6408,9 +6354,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.14" +version = "0.103.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0527518605e68109d875e248ea259b6758801cf165e4b2c2733ae3b51f12535a" +checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" dependencies = [ "ring", "rustls-pki-types", @@ -6654,7 +6600,7 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -6678,7 +6624,7 @@ checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -6704,9 +6650,9 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.21.5" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cabfe266b357df6e7aa8d0c9bb11eac1fd0ed049f6318455bf55345d9de6c3b5" +checksum = "c60ac6abbc2cc83e80d7c0c1450a46880272169f392122f439d6be9d99b22c7a" dependencies = [ "aes 0.9.2", "bzip2", @@ -6714,7 +6660,7 @@ dependencies = [ "crc32fast", "getrandom 0.4.3", "js-sys", - "lzma-rust2 0.19.0", + "lzma-rust2 0.20.0", "ppmd-rust", "sha2 0.11.0", "wasm-bindgen", @@ -7275,9 +7221,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f" dependencies = [ "proc-macro2", "quote", @@ -7425,7 +7371,7 @@ checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -7588,17 +7534,7 @@ checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", + "syn 3.0.4", ] [[package]] @@ -7619,10 +7555,12 @@ checksum = "17a073bfed563fa236697a068031408a93cd9522e08abf9933ead3e73411bd71" dependencies = [ "futures-util", "log", - "native-tls", + "rustls 0.23.43", + "rustls-pki-types", "tokio", - "tokio-native-tls", + "tokio-rustls", "tungstenite 0.30.0", + "webpki-roots 0.26.11", ] [[package]] @@ -7812,8 +7750,9 @@ dependencies = [ "http", "httparse", "log", - "native-tls", "rand 0.10.2", + "rustls 0.23.43", + "rustls-pki-types", "sha1 0.11.0", "thiserror 2.0.20", ] @@ -8047,9 +7986,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.24.1" +version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cefc03fd367c0c6d4305de1b312cf00248c4114f4a0418ce6a6af769e3b0bd9" +checksum = "f053576934f05a761a402421fbbe3d425d9366f75f978806a037b3ca481abecc" dependencies = [ "getrandom 0.4.3", "js-sys", @@ -8394,6 +8333,15 @@ dependencies = [ "untrusted", ] +[[package]] +name = "webpki-root-certs" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "webpki-roots" version = "0.22.6" @@ -8403,6 +8351,24 @@ dependencies = [ "webpki", ] +[[package]] +name = "webpki-roots" +version = "0.26.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.9", +] + +[[package]] +name = "webpki-roots" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "webrtc" version = "0.17.2" @@ -8479,7 +8445,7 @@ dependencies = [ "tokio", "turn", "url", - "uuid 1.24.1", + "uuid 1.25.0", "waitgroup", "webrtc-mdns", "webrtc-util", @@ -9448,7 +9414,7 @@ dependencies = [ "serde_repr", "tracing", "uds_windows", - "uuid 1.24.1", + "uuid 1.25.0", "windows-sys 0.61.2", "winnow", "zbus_macros", @@ -9489,7 +9455,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", "zbus_names", "zvariant", "zvariant_utils", @@ -9626,7 +9592,7 @@ checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", ] [[package]] @@ -9756,7 +9722,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.4", "zvariant_utils", ] @@ -9769,6 +9735,6 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 3.0.3", + "syn 3.0.4", "winnow", ] diff --git a/Cargo.toml b/Cargo.toml index 683dbb3..d285299 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ crate-type = ["cdylib", "rlib"] [dependencies] zip = "8.0" -sevenz-rust2 = "0.21" +sevenz-rust2 = "0.22" chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" @@ -24,7 +24,7 @@ spin_sleep = "1.3" encoding_rs = "0.8" mimalloc = "0.1" regex = "1.11" -tokio-tungstenite = { version = "0.30", features = ["native-tls-vendored"] } +tokio-tungstenite = { version = "0.30", features = ["rustls-tls-webpki-roots"] } matchbox_socket = "0.14" ggrs = { version = "0.13", features = ["sync-send"] } rustc-hash = "2.1" @@ -34,10 +34,11 @@ fatfs = "0.3" semver = "1.0" postcard = { version = "1.1", features = ["use-std"] } clap = { version = "4.5", features = ["derive"] } -reqwest = { version = "0.13", default-features = false, features = ["native-tls-vendored", "charset", "http2", "system-proxy", "json", "query"] } +reqwest = { version = "0.13", default-features = false, features = ["rustls-no-provider", "charset", "http2", "system-proxy", "json", "query"] } discord-rich-presence = "1.1" quick-xml = "0.41" obfstr = "0.4" +rustls = { version = "0.23", default-features = false } [target.'cfg(not(target_os = "android"))'.dependencies] slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "unstable-winit-030", "backend-winit", "renderer-femtovg-wgpu", "accessibility"], optional = true } @@ -52,6 +53,7 @@ slint = { version = "1.16", default-features = false, features = ["compat-1-2", jni = "0.22" sdl3-sys = { version = "0.6", features = ["build-from-source"] } sdl3-ttf-sys = { version = "0.6", features = ["build-from-source", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } +webpki-roots = "1.0" [build-dependencies] winresource = "0.1" diff --git a/src/ui.rs b/src/ui.rs index 47bede5..7d97710 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -20,15 +20,37 @@ pub mod vru; pub const APP_ID: &str = "io.github.gopher64.gopher64"; +pub fn install_default_crypto_provider() { + if rustls::crypto::CryptoProvider::get_default().is_none() { + rustls::crypto::ring::default_provider() + .install_default() + .expect("Failed to install default rustls crypto provider"); + } +} + pub static WEB_CLIENT: std::sync::LazyLock = std::sync::LazyLock::new(|| { - reqwest::Client::builder() - .user_agent(format!( - "{}/{}", - env!("CARGO_PKG_NAME"), - env!("GIT_DESCRIBE") - )) - .build() - .unwrap() + install_default_crypto_provider(); + + let mut builder = reqwest::Client::builder(); + + builder = builder.user_agent(format!( + "{}/{}", + env!("CARGO_PKG_NAME"), + env!("GIT_DESCRIBE") + )); + + #[cfg(target_os = "android")] + { + let root_store = rustls::RootCertStore { + roots: webpki_roots::TLS_SERVER_ROOTS.to_vec(), + }; + let tls = rustls::ClientConfig::builder() + .with_root_certificates(root_store) + .with_no_client_auth(); + builder = builder.tls_backend_preconfigured(tls); + } + + builder.build().unwrap() }); #[derive(Default, Clone)] diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 89ba1e9..2519c4b 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -312,6 +312,8 @@ fn manage_websocket( .headers_mut() .insert("Authorization", format!("{hash}_{now}").parse().unwrap()); + ui::install_default_crypto_provider(); + tokio::spawn(async move { match tokio::time::timeout( std::time::Duration::from_secs(3), From 42c44998ffb2b231a424bc7040b669dd4d80062a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 24 Aug 2026 13:10:50 +0000 Subject: [PATCH 1117/1117] update quick-xml (#1195) --- Cargo.lock | 17 +++++++++++++---- Cargo.toml | 2 +- src/ui/gui.rs | 6 +++--- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3cfbd93..39174cb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2786,7 +2786,7 @@ dependencies = [ "obfstr", "open", "postcard", - "quick-xml", + "quick-xml 0.42.0", "rand 0.10.2", "regex", "reqwest", @@ -2865,9 +2865,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.18" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "839c0e8a181239723652be9062bb56ca5bf5f64011f73b623f6f4fc59086a228" +checksum = "ef8e5e5a340588f4452631496976cf8636d4a7ecf600239fdc27615d2530bc16" dependencies = [ "atomic-waker", "bytes", @@ -5657,6 +5657,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "quick-xml" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b1177fdf999d2321d3fb46ff47159d9c1fb9ad66a4879f8c50a0b504615e9b" +dependencies = [ + "memchr", +] + [[package]] name = "quote" version = "1.0.47" @@ -8271,7 +8280,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "338e30461b3a2b67d70eb30a6d89f8e0c93a833e07d2ae89085cd070c4a00ac0" dependencies = [ "proc-macro2", - "quick-xml", + "quick-xml 0.41.0", "quote", ] diff --git a/Cargo.toml b/Cargo.toml index d285299..7ae0e30 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,7 +36,7 @@ postcard = { version = "1.1", features = ["use-std"] } clap = { version = "4.5", features = ["derive"] } reqwest = { version = "0.13", default-features = false, features = ["rustls-no-provider", "charset", "http2", "system-proxy", "json", "query"] } discord-rich-presence = "1.1" -quick-xml = "0.41" +quick-xml = "0.42" obfstr = "0.4" rustls = { version = "0.23", default-features = false } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 764dc00..2fd2928 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -699,7 +699,7 @@ async fn load_no_intro( } } Ok(quick_xml::events::Event::Start(e)) => { - if e.name().as_ref() == b"game" + if e.name().as_ref() == "game" && let Ok(Some(name_attribute)) = e.try_get_attribute("name") && let Ok(normalized_value) = name_attribute.normalized_value(xml_version) { @@ -707,12 +707,12 @@ async fn load_no_intro( } } Ok(quick_xml::events::Event::End(e)) => { - if e.name().as_ref() == b"game" { + if e.name().as_ref() == "game" { current_game.clear(); } } Ok(quick_xml::events::Event::Empty(e)) => { - if e.name().as_ref() == b"file" + if e.name().as_ref() == "file" && let Ok(Some(format_attribute)) = e.try_get_attribute("format") && let Ok(normalized_value) = format_attribute.normalized_value(xml_version) && normalized_value.as_ref() == "BigEndian"

          S&jh1n&JeeMOkU4{=4@cYr6k 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≤FHXCuU9Qce=@vmZ{%9^5??OaVQJ8!4u8-w;yt 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 H^|Jhb<`UPU literal 0 HcmV?d00001 diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 904db02..4e79932 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -97,6 +97,11 @@ static TTF_Font *message_font; static std::queue messages; static uint64_t message_timer; +static TTF_Font *achievement_challenge_indicator_font; +static std::vector achievement_challenge_indicators; +static Vulkan::ImageHandle achievement_challenge_indicator_image; +static Vulkan::ImageHandle achievement_progress_indicator_image; + #define MESSAGE_TIME 3000 // 3 seconds typedef struct { @@ -212,11 +217,14 @@ void rdp_new_processor(GFX_INFO _gfx_info) { } static ImageHandle create_message_image(Vulkan::Device &device, int width, - const char *message) { + TTF_Font *font, const char *message) { + if (strstr(message, "\n")) + width = 0; + SDL_Color fg = {255, 255, 255, 255}; SDL_Color bg = {0, 0, 0, 0}; SDL_Surface *surface = - TTF_RenderText_LCD_Wrapped(message_font, message, 0, fg, bg, width); + TTF_RenderText_LCD_Wrapped(font, message, 0, fg, bg, width); ImageCreateInfo info = ImageCreateInfo::immutable_2d_image( surface->w, surface->h, VK_FORMAT_B8G8R8A8_UNORM, false); ImageInitialData initial_data = {}; @@ -279,7 +287,9 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, message_font = TTF_OpenFontIO(SDL_IOFromConstMem(font, font_size), true, 25.0); - if (!message_font) { + achievement_challenge_indicator_font = + TTF_OpenFontIO(SDL_IOFromConstMem(font, font_size), true, 12.0); + if (!message_font || !achievement_challenge_indicator_font) { rdp_close(); return; } @@ -294,10 +304,16 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, messages = std::queue(); message_timer = 0; + + achievement_challenge_indicators.clear(); + achievement_challenge_indicator_image = Vulkan::ImageHandle(); + achievement_progress_indicator_image = Vulkan::ImageHandle(); } void rdp_close() { messages = std::queue(); + achievement_challenge_indicator_image = Vulkan::ImageHandle(); + achievement_progress_indicator_image = Vulkan::ImageHandle(); if (wsi) wsi->end_frame(); @@ -306,6 +322,10 @@ void rdp_close() { TTF_CloseFont(message_font); message_font = nullptr; } + if (achievement_challenge_indicator_font) { + TTF_CloseFont(achievement_challenge_indicator_font); + achievement_challenge_indicator_font = nullptr; + } if (processor) { delete processor; processor = nullptr; @@ -364,6 +384,20 @@ static void calculate_viewport(float *x, float *y, float *width, float *height, } } +static void draw_indicator(CommandBufferHandle cmd, + Vulkan::ImageHandle indicator_image, + VkViewport &vp) { + cmd->set_texture(0, 0, indicator_image->get_view(), + Vulkan::StockSampler::NearestClamp); + vp.x = vp.x + vp.width - indicator_image->get_width(); + vp.y = vp.y + vp.height - indicator_image->get_height(); + vp.height = indicator_image->get_height(); + vp.width = indicator_image->get_width(); + cmd->set_viewport(vp); + + cmd->draw(3); +} + static void render_frame(Vulkan::Device &device) { RDP::ScanoutOptions options = {}; options.persist_frame_on_invalid_input = true; @@ -437,8 +471,8 @@ static void render_frame(Vulkan::Device &device) { if (!messages.empty()) { Message *message = &messages.front(); if (!message->image) { - message->image = - create_message_image(device, vp.width, message->message.c_str()); + message->image = create_message_image(device, vp.width, message_font, + message->message.c_str()); } cmd->set_texture(0, 0, message->image->get_view(), Vulkan::StockSampler::NearestClamp); @@ -454,6 +488,10 @@ static void render_frame(Vulkan::Device &device) { messages.pop(); message_timer = SDL_GetTicks() + MESSAGE_TIME; } + } else if (achievement_progress_indicator_image) { + draw_indicator(cmd, achievement_progress_indicator_image, vp); + } else if (achievement_challenge_indicator_image) { + draw_indicator(cmd, achievement_challenge_indicator_image, vp); } } @@ -753,3 +791,40 @@ uint64_t rdp_process_commands() { return interrupt_timer; } + +static void update_challenge_indicator() { + std::string message; + for (const auto &achievement_title : achievement_challenge_indicators) { + message += achievement_title; + message += '\n'; + } + achievement_challenge_indicator_image = create_message_image( + wsi->get_device(), 0, achievement_challenge_indicator_font, + message.c_str()); +} + +void achievement_challenge_indicator_add(const char *achievement_title) { + achievement_challenge_indicators.push_back(achievement_title); + update_challenge_indicator(); +} + +void achievement_challenge_indicator_remove(const char *achievement_title) { + std::erase(achievement_challenge_indicators, achievement_title); + if (achievement_challenge_indicators.empty()) { + achievement_challenge_indicator_image = Vulkan::ImageHandle(); + } else { + update_challenge_indicator(); + } +} + +void achievement_progress_add(const char *achievement_title, + const char *progress) { + char message[512]; + snprintf(message, sizeof(message), "%s: %s", achievement_title, progress); + achievement_progress_indicator_image = + create_message_image(wsi->get_device(), 0, message_font, message); +} + +void achievement_progress_remove(const char *achievement_title) { + achievement_progress_indicator_image = Vulkan::ImageHandle(); +} diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 06125dc..51a6a5c 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -51,6 +51,12 @@ size_t rdp_state_size(); void rdp_save_state(uint8_t *state); void rdp_load_state(const uint8_t *state); +void achievement_challenge_indicator_add(const char *achievement_title); +void achievement_challenge_indicator_remove(const char *achievement_title); +void achievement_progress_add(const char *achievement_title, + const char *progress); +void achievement_progress_remove(const char *achievement_title); + #ifdef __cplusplus } #endif diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index 785fd60..c6016eb 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -19,6 +19,7 @@ static const uint8_t *g_dmem = NULL; static size_t g_dmem_size = 0; static bool g_game_loaded = false; static bool g_user_logged_in = false; +static bool g_challenge = false; static const char *g_username = NULL; static const char *g_token = NULL; static char load_game_error_message[512]; @@ -180,7 +181,7 @@ void ra_set_dmem(const uint8_t *dmem, size_t dmem_size) { static void leaderboard_started(const rc_client_leaderboard_t *leaderboard) { char buffer[512]; - snprintf(buffer, sizeof(buffer), "RA leaderboard attempt started: %s", + snprintf(buffer, sizeof(buffer), "Lboard attempt started: %s", leaderboard->title); rdp_onscreen_message(buffer); } @@ -188,7 +189,7 @@ static void leaderboard_started(const rc_client_leaderboard_t *leaderboard) { static void leaderboard_failed(const rc_client_leaderboard_t *leaderboard) { char buffer[512]; - snprintf(buffer, sizeof(buffer), "RA leaderboard attempt failed: %s", + snprintf(buffer, sizeof(buffer), "Lboard attempt failed: %s", leaderboard->title); rdp_onscreen_message(buffer); } @@ -196,7 +197,7 @@ static void leaderboard_failed(const rc_client_leaderboard_t *leaderboard) { static void leaderboard_submitted(const rc_client_leaderboard_t *leaderboard) { char buffer[512]; - snprintf(buffer, sizeof(buffer), "RA leaderboard submitted: %s - %s", + snprintf(buffer, sizeof(buffer), "Lboard submitted: %s - %s", leaderboard->title, leaderboard->tracker_value); rdp_onscreen_message(buffer); } @@ -204,16 +205,7 @@ static void leaderboard_submitted(const rc_client_leaderboard_t *leaderboard) { static void achievement_triggered(const rc_client_achievement_t *achievement) { char buffer[512]; - snprintf(buffer, sizeof(buffer), "RA unlocked: %s", achievement->title); - rdp_onscreen_message(buffer); -} - -static void -achievement_progress_updated(const rc_client_achievement_t *achievement) { - char buffer[512]; - - snprintf(buffer, sizeof(buffer), "RA updated: %s - %s", achievement->title, - achievement->measured_progress); + snprintf(buffer, sizeof(buffer), "Unlocked: %s", achievement->title); rdp_onscreen_message(buffer); } @@ -221,8 +213,8 @@ static void game_completed(rc_client_t *client) { char buffer[512]; const rc_client_game_t *game = rc_client_get_game_info(client); - snprintf(buffer, sizeof(buffer), "RA %s: %s", - rc_client_get_hardcore_enabled(client) ? "mastered" : "completed", + snprintf(buffer, sizeof(buffer), "%s: %s", + rc_client_get_hardcore_enabled(client) ? "Mastered" : "Completed", game->title); rdp_onscreen_message(buffer); } @@ -231,7 +223,7 @@ static void subset_completed(const rc_client_subset_t *subset, rc_client_t *client) { char buffer[512]; - snprintf(buffer, sizeof(buffer), "RA subset %s: %s", + snprintf(buffer, sizeof(buffer), "Subset %s: %s", rc_client_get_hardcore_enabled(client) ? "mastered" : "completed", subset->title); rdp_onscreen_message(buffer); @@ -260,15 +252,23 @@ static void event_handler(const rc_client_event_t *event, rc_client_t *client) { leaderboard_submitted(event->leaderboard); break; case RC_CLIENT_EVENT_ACHIEVEMENT_CHALLENGE_INDICATOR_SHOW: + if (g_challenge) + achievement_challenge_indicator_add(event->achievement->title); break; case RC_CLIENT_EVENT_ACHIEVEMENT_CHALLENGE_INDICATOR_HIDE: + if (g_challenge) + achievement_challenge_indicator_remove(event->achievement->title); break; case RC_CLIENT_EVENT_ACHIEVEMENT_PROGRESS_INDICATOR_SHOW: + achievement_progress_add(event->achievement->title, + event->achievement->measured_progress); break; case RC_CLIENT_EVENT_ACHIEVEMENT_PROGRESS_INDICATOR_HIDE: + achievement_progress_remove(event->achievement->title); break; case RC_CLIENT_EVENT_ACHIEVEMENT_PROGRESS_INDICATOR_UPDATE: - achievement_progress_updated(event->achievement); + achievement_progress_add(event->achievement->title, + event->achievement->measured_progress); break; case RC_CLIENT_EVENT_LEADERBOARD_TRACKER_SHOW: break; @@ -293,7 +293,7 @@ static void event_handler(const rc_client_event_t *event, rc_client_t *client) { } } -void ra_init_client(bool hardcore) { +void ra_init_client(bool hardcore, bool challenge) { // Create the client instance (using a global variable simplifies this // example) g_client = rc_client_create(read_memory, server_call); @@ -309,6 +309,8 @@ void ra_init_client(bool hardcore) { rc_client_set_event_handler(g_client, event_handler); rc_client_set_hardcore_enabled(g_client, hardcore); + + g_challenge = challenge; } bool ra_get_hardcore() { diff --git a/retroachievements/retroachievements.h b/retroachievements/retroachievements.h index f7377b1..23292c5 100644 --- a/retroachievements/retroachievements.h +++ b/retroachievements/retroachievements.h @@ -2,7 +2,7 @@ #include #include -void ra_init_client(bool hardcore); +void ra_init_client(bool hardcore, bool challenge); void ra_shutdown_client(); void ra_welcome(); bool ra_get_hardcore(); diff --git a/src/main.rs b/src/main.rs index 291e2ee..78c3d4f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -106,6 +106,11 @@ struct Args { help = "Enable Hardcore mode for RetroAchievements" )] ra_hardcore: bool, + #[arg( + long = "ra-challenge", + help = "Enable Challenge Indicators for RetroAchievements" + )] + ra_challenge: bool, } #[tokio::main(worker_threads = 4)] @@ -159,9 +164,9 @@ async fn main() -> std::io::Result<()> { }; if cfg!(ra_hardcore_enabled) { - retroachievements::init_client(args.ra_hardcore); + retroachievements::init_client(args.ra_hardcore, args.ra_challenge); } else { - retroachievements::init_client(false); + retroachievements::init_client(false, args.ra_challenge); } let mut shutdown_tx = None; @@ -259,7 +264,7 @@ async fn main() -> std::io::Result<()> { ui::input::bind_input_profile(&mut ui, profile, port); } } else { - retroachievements::init_client(false); + retroachievements::init_client(false, false); gui::app_window(); retroachievements::shutdown_client(); } diff --git a/src/retroachievements.rs b/src/retroachievements.rs index df88c87..8e0aa4b 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -9,6 +9,7 @@ pub struct RAConfig { pub token: String, pub enabled: bool, pub hardcore: bool, + pub challenge: bool, } #[unsafe(no_mangle)] @@ -39,6 +40,7 @@ pub extern "C" fn store_retroachievements_credentials( token: unsafe { std::ffi::CStr::from_ptr(c_token).to_str().unwrap() }.to_string(), enabled: result.enabled, hardcore: result.hardcore, + challenge: result.challenge, } } else { RAConfig { @@ -46,6 +48,7 @@ pub extern "C" fn store_retroachievements_credentials( token: unsafe { std::ffi::CStr::from_ptr(c_token).to_str().unwrap() }.to_string(), enabled: false, hardcore: false, + challenge: false, } }; let f = std::fs::File::create(&file_path).unwrap(); @@ -166,6 +169,7 @@ pub fn ra_window(app: &ui::gui::AppWindow) { app.set_ra_username(result.username.into()); app.set_ra_enabled(result.enabled); app.set_ra_hardcore(result.hardcore); + app.set_ra_challenge(result.challenge); token = result.token; } else { app.set_ra_hardcore(true); @@ -195,7 +199,7 @@ pub fn ra_window(app: &ui::gui::AppWindow) { .unwrap(); }); - app.on_ra_toggled(move |enabled, hardcore| { + app.on_ra_toggled(move |enabled, hardcore, challenge| { let file_path = ui::get_dirs().config_dir.join("retroachievements.json"); let raconfig = if let Ok(ra_config) = std::fs::read(&file_path) && let Ok(result) = serde_json::from_slice::(ra_config.as_ref()) @@ -207,6 +211,7 @@ pub fn ra_window(app: &ui::gui::AppWindow) { token: "".into(), enabled, hardcore, + challenge, } } else { RAConfig { @@ -214,6 +219,7 @@ pub fn ra_window(app: &ui::gui::AppWindow) { token: result.token, enabled, hardcore, + challenge, } } } else { @@ -222,6 +228,7 @@ pub fn ra_window(app: &ui::gui::AppWindow) { token: "".into(), enabled, hardcore, + challenge, } }; let f = std::fs::File::create(&file_path).unwrap(); @@ -262,8 +269,8 @@ pub fn do_idle() { unsafe { ra_do_idle() }; } -pub fn init_client(hardcore: bool) { - unsafe { ra_init_client(hardcore) }; +pub fn init_client(hardcore: bool, challenge: bool) { + unsafe { ra_init_client(hardcore, challenge) }; } pub fn shutdown_client() { diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 718a293..63dcef4 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -31,6 +31,11 @@ pub struct GameSettings { pub load_savestate_slot: Option, } +pub struct RASettings { + pub hardcore: bool, + pub challenge: bool, +} + fn check_latest_version(weak: slint::Weak) { let client = reqwest::Client::builder() .user_agent(env!("CARGO_PKG_NAME")) @@ -325,7 +330,7 @@ pub fn run_rom( file_path: std::path::PathBuf, game_settings: GameSettings, netplay: Option, - ra_hardcore: bool, + ra_settings: RASettings, weak: slint::Weak, ) { tokio::spawn(async move { @@ -359,9 +364,12 @@ pub fn run_rom( "--ra-token", retroachievements::get_token(), ]); - if ra_hardcore { + if ra_settings.hardcore { command.args(["--ra-hardcore"]); } + if ra_settings.challenge { + command.args(["--ra-challenge"]); + } } for i in 0..4 { @@ -425,6 +433,7 @@ fn open_rom(app: &AppWindow) { let overclock = app.get_overclock_n64_cpu(); let disable_expansion_pak = app.get_disable_expansion_pak(); let ra_hardcore = app.get_ra_hardcore(); + let ra_challenge = app.get_ra_challenge(); let weak = app.as_weak(); tokio::spawn(async move { @@ -455,7 +464,10 @@ fn open_rom(app: &AppWindow) { load_savestate_slot: None, }, None, - ra_hardcore, + RASettings { + hardcore: ra_hardcore, + challenge: ra_challenge, + }, weak, ); } diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 5e96712..299526a 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -38,7 +38,7 @@ export component AppWindow inherits Window { callback ra_button_clicked(string); callback ra_games_clicked; callback ra_show_profile_clicked(string); - callback ra_toggled(bool,bool); + callback ra_toggled(bool,bool,bool); in property version <=> AboutData.version; in property has_update <=> AboutData.has_update; in-out property ra_username <=> RAData.ra_username; @@ -48,6 +48,7 @@ export component AppWindow inherits Window { in-out property ra_current_user_message <=> RAData.current_user_message; in-out property ra_enabled <=> RAData.enabled; in-out property ra_hardcore <=> RAData.hardcore; + in-out property ra_challenge <=> RAData.challenge; in-out property integer_scaling <=> SettingsData.integer_scaling; in-out property fullscreen <=> SettingsData.fullscreen; in-out property widescreen <=> SettingsData.widescreen; @@ -134,8 +135,8 @@ export component AppWindow inherits Window { ra_button_clicked(password) => { ra_button_clicked(password); } - ra_toggled(enabled,hardcore) => { - ra_toggled(enabled,hardcore); + ra_toggled(enabled,hardcore,challenge) => { + ra_toggled(enabled,hardcore,challenge); } ra_games_clicked => { ra_games_clicked(); diff --git a/src/ui/gui/retroachievements_page.slint b/src/ui/gui/retroachievements_page.slint index 84f2640..0784f90 100644 --- a/src/ui/gui/retroachievements_page.slint +++ b/src/ui/gui/retroachievements_page.slint @@ -7,6 +7,7 @@ import { Page } from "page.slint"; export global RAData { in-out property enabled; in-out property hardcore; + in-out property challenge; in-out property ra_logging_in; in-out property ra_show_profile; in-out property ra_username; @@ -16,7 +17,7 @@ export global RAData { export component RetroAchievements inherits Page { callback ra_button_clicked(string); - callback ra_toggled(bool,bool); + callback ra_toggled(bool,bool,bool); callback ra_games_clicked; callback ra_show_profile_clicked(string); title: @tr("RetroAchievements"); @@ -37,7 +38,7 @@ export component RetroAchievements inherits Page { RAData.current_user_message = "Not currently logged in"; RAData.ra_show_profile = false; } - ra_toggled(RAData.enabled,RAData.hardcore); + ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge); } } } @@ -49,7 +50,19 @@ export component RetroAchievements inherits Page { enabled: RAData.enabled; toggled => { RAData.hardcore = self.checked; - ra_toggled(RAData.enabled,RAData.hardcore); + ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge); + } + } + } + HorizontalBox { + alignment: center; + CheckBox { + text: @tr("Challenge Indicators"); + checked: RAData.challenge; + enabled: RAData.enabled; + toggled => { + RAData.challenge = self.checked; + ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge); } } } diff --git a/src/ui/input.rs b/src/ui/input.rs index 2f7ee7e..a989a61 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -614,7 +614,7 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, d let text_engine = unsafe { sdl3_ttf_sys::ttf::TTF_CreateRendererTextEngine(renderer) }; let font = unsafe { - let font_bytes = include_bytes!("../../data/Roboto-Regular.ttf"); + let font_bytes = include_bytes!("../../data/RobotoMono-Regular.ttf"); sdl3_ttf_sys::ttf::TTF_OpenFontIO( sdl3_sys::everything::SDL_IOFromConstMem( font_bytes.as_ptr() as *const std::ffi::c_void, diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index dfde901..a142526 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -2,7 +2,7 @@ use crate::device; use crate::ui; use crate::ui::gui::{ AppWindow, CustomNetplayServer, DispatcherDialog, ErrorDialog, GameSettings, GbPaths, - NetplayCreate, NetplayDevice, NetplayJoin, NetplayWait, run_rom, save_settings, + NetplayCreate, NetplayDevice, NetplayJoin, NetplayWait, RASettings, run_rom, save_settings, }; use futures::{SinkExt, StreamExt}; use sha2::{Digest, Sha256}; @@ -1107,7 +1107,10 @@ fn setup_wait_window( peer_addr: socket_addr, player_number: player_number as u8, }), - false, + RASettings { + hardcore: false, + challenge: false, + }, weak_app, ); }) diff --git a/src/ui/video.rs b/src/ui/video.rs index 3208647..74cc61c 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -80,7 +80,7 @@ pub fn init(device: &mut device::Device) { }; unsafe { - let font_bytes = include_bytes!("../../data/Roboto-Regular.ttf"); + let font_bytes = include_bytes!("../../data/RobotoMono-Regular.ttf"); rdp_init( device.ui.video.window as *mut std::ffi::c_void, gfx_info, From 595089187d430d43270e2cecd078c5137332d11d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 13 Apr 2026 13:30:18 +0200 Subject: [PATCH 0754/1117] leaderboard tracker (#740) * leaderboard tracker * more * more * more * more --- parallel-rdp/interface.cpp | 38 +++++++++++++++++++++++-- parallel-rdp/interface.hpp | 2 ++ retroachievements/retroachievements.c | 27 +++++++++++++----- retroachievements/retroachievements.h | 2 +- src/device/vi.rs | 4 +-- src/main.rs | 15 ++++++++-- src/retroachievements.rs | 13 +++++++-- src/ui/gui.rs | 6 ++++ src/ui/gui/appwindow.slint | 7 +++-- src/ui/gui/retroachievements_page.slint | 21 +++++++++++--- src/ui/netplay.rs | 1 + 11 files changed, 111 insertions(+), 25 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 4e79932..f4ad2e0 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -7,6 +7,7 @@ #include #include #include +#include using namespace Vulkan; @@ -101,6 +102,8 @@ static TTF_Font *achievement_challenge_indicator_font; static std::vector achievement_challenge_indicators; static Vulkan::ImageHandle achievement_challenge_indicator_image; static Vulkan::ImageHandle achievement_progress_indicator_image; +static std::map leaderboard_trackers; +static Vulkan::ImageHandle leaderboard_tracker_image; #define MESSAGE_TIME 3000 // 3 seconds @@ -308,12 +311,15 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, achievement_challenge_indicators.clear(); achievement_challenge_indicator_image = Vulkan::ImageHandle(); achievement_progress_indicator_image = Vulkan::ImageHandle(); + leaderboard_trackers.clear(); + leaderboard_tracker_image = Vulkan::ImageHandle(); } void rdp_close() { messages = std::queue(); achievement_challenge_indicator_image = Vulkan::ImageHandle(); achievement_progress_indicator_image = Vulkan::ImageHandle(); + leaderboard_tracker_image = Vulkan::ImageHandle(); if (wsi) wsi->end_frame(); @@ -490,6 +496,8 @@ static void render_frame(Vulkan::Device &device) { } } else if (achievement_progress_indicator_image) { draw_indicator(cmd, achievement_progress_indicator_image, vp); + } else if (leaderboard_tracker_image) { + draw_indicator(cmd, leaderboard_tracker_image, vp); } else if (achievement_challenge_indicator_image) { draw_indicator(cmd, achievement_challenge_indicator_image, vp); } @@ -794,8 +802,9 @@ uint64_t rdp_process_commands() { static void update_challenge_indicator() { std::string message; - for (const auto &achievement_title : achievement_challenge_indicators) { - message += achievement_title; + const auto &v = achievement_challenge_indicators; + for (size_t i = 0; i < std::min(v.size(), 5); ++i) { + message += v[i]; message += '\n'; } achievement_challenge_indicator_image = create_message_image( @@ -803,6 +812,16 @@ static void update_challenge_indicator() { message.c_str()); } +static void update_leaderboard_tracker() { + std::string message; + for (const auto &leaderboard_tracker : leaderboard_trackers) { + message += leaderboard_tracker.second; + message += '\n'; + } + leaderboard_tracker_image = + create_message_image(wsi->get_device(), 0, message_font, message.c_str()); +} + void achievement_challenge_indicator_add(const char *achievement_title) { achievement_challenge_indicators.push_back(achievement_title); update_challenge_indicator(); @@ -828,3 +847,18 @@ void achievement_progress_add(const char *achievement_title, void achievement_progress_remove(const char *achievement_title) { achievement_progress_indicator_image = Vulkan::ImageHandle(); } + +void leaderboard_tracker_add(uint32_t id, const char *display) { + std::string message = display; + leaderboard_trackers[id] = message; + update_leaderboard_tracker(); +} + +void leaderboard_tracker_remove(uint32_t id) { + leaderboard_trackers.erase(id); + if (leaderboard_trackers.empty()) { + leaderboard_tracker_image = Vulkan::ImageHandle(); + } else { + update_leaderboard_tracker(); + } +} diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 51a6a5c..4629067 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -56,6 +56,8 @@ void achievement_challenge_indicator_remove(const char *achievement_title); void achievement_progress_add(const char *achievement_title, const char *progress); void achievement_progress_remove(const char *achievement_title); +void leaderboard_tracker_add(uint32_t id, const char *display); +void leaderboard_tracker_remove(uint32_t id); #ifdef __cplusplus } diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index c6016eb..29432d7 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -20,6 +20,7 @@ static size_t g_dmem_size = 0; static bool g_game_loaded = false; static bool g_user_logged_in = false; static bool g_challenge = false; +static bool g_leaderboard = false; static const char *g_username = NULL; static const char *g_token = NULL; static char load_game_error_message[512]; @@ -181,7 +182,7 @@ void ra_set_dmem(const uint8_t *dmem, size_t dmem_size) { static void leaderboard_started(const rc_client_leaderboard_t *leaderboard) { char buffer[512]; - snprintf(buffer, sizeof(buffer), "Lboard attempt started: %s", + snprintf(buffer, sizeof(buffer), "Leaderboard started: %s", leaderboard->title); rdp_onscreen_message(buffer); } @@ -189,7 +190,7 @@ static void leaderboard_started(const rc_client_leaderboard_t *leaderboard) { static void leaderboard_failed(const rc_client_leaderboard_t *leaderboard) { char buffer[512]; - snprintf(buffer, sizeof(buffer), "Lboard attempt failed: %s", + snprintf(buffer, sizeof(buffer), "Leaderboard failed: %s", leaderboard->title); rdp_onscreen_message(buffer); } @@ -197,7 +198,7 @@ static void leaderboard_failed(const rc_client_leaderboard_t *leaderboard) { static void leaderboard_submitted(const rc_client_leaderboard_t *leaderboard) { char buffer[512]; - snprintf(buffer, sizeof(buffer), "Lboard submitted: %s - %s", + snprintf(buffer, sizeof(buffer), "Leaderboard submitted: %s - %s", leaderboard->title, leaderboard->tracker_value); rdp_onscreen_message(buffer); } @@ -243,13 +244,16 @@ static void event_handler(const rc_client_event_t *event, rc_client_t *client) { achievement_triggered(event->achievement); break; case RC_CLIENT_EVENT_LEADERBOARD_STARTED: - leaderboard_started(event->leaderboard); + if (g_leaderboard) + leaderboard_started(event->leaderboard); break; case RC_CLIENT_EVENT_LEADERBOARD_FAILED: - leaderboard_failed(event->leaderboard); + if (g_leaderboard) + leaderboard_failed(event->leaderboard); break; case RC_CLIENT_EVENT_LEADERBOARD_SUBMITTED: - leaderboard_submitted(event->leaderboard); + if (g_leaderboard) + leaderboard_submitted(event->leaderboard); break; case RC_CLIENT_EVENT_ACHIEVEMENT_CHALLENGE_INDICATOR_SHOW: if (g_challenge) @@ -271,10 +275,18 @@ static void event_handler(const rc_client_event_t *event, rc_client_t *client) { event->achievement->measured_progress); break; case RC_CLIENT_EVENT_LEADERBOARD_TRACKER_SHOW: + if (g_leaderboard) + leaderboard_tracker_add(event->leaderboard_tracker->id, + event->leaderboard_tracker->display); break; case RC_CLIENT_EVENT_LEADERBOARD_TRACKER_HIDE: + if (g_leaderboard) + leaderboard_tracker_remove(event->leaderboard_tracker->id); break; case RC_CLIENT_EVENT_LEADERBOARD_TRACKER_UPDATE: + if (g_leaderboard) + leaderboard_tracker_add(event->leaderboard_tracker->id, + event->leaderboard_tracker->display); break; case RC_CLIENT_EVENT_LEADERBOARD_SCOREBOARD: break; @@ -293,7 +305,7 @@ static void event_handler(const rc_client_event_t *event, rc_client_t *client) { } } -void ra_init_client(bool hardcore, bool challenge) { +void ra_init_client(bool hardcore, bool challenge, bool leaderboard) { // Create the client instance (using a global variable simplifies this // example) g_client = rc_client_create(read_memory, server_call); @@ -311,6 +323,7 @@ void ra_init_client(bool hardcore, bool challenge) { rc_client_set_hardcore_enabled(g_client, hardcore); g_challenge = challenge; + g_leaderboard = leaderboard; } bool ra_get_hardcore() { diff --git a/retroachievements/retroachievements.h b/retroachievements/retroachievements.h index 23292c5..5c2e532 100644 --- a/retroachievements/retroachievements.h +++ b/retroachievements/retroachievements.h @@ -2,7 +2,7 @@ #include #include -void ra_init_client(bool hardcore, bool challenge); +void ra_init_client(bool hardcore, bool challenge, bool leaderboard); void ra_shutdown_client(); void ra_welcome(); bool ra_get_hardcore(); diff --git a/src/device/vi.rs b/src/device/vi.rs index 4d5bdc7..6096b7e 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -128,10 +128,10 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { cheats::execute_cheats(device, device.cheats.cheats.clone()); } - retroachievements::do_frame(); - ui::video::render_frame(); + retroachievements::do_frame(); + let (mut speed_limiter_toggled, paused) = ui::video::check_callback(device); if let Some(netplay) = &mut device.netplay { diff --git a/src/main.rs b/src/main.rs index 78c3d4f..24a0553 100644 --- a/src/main.rs +++ b/src/main.rs @@ -111,6 +111,11 @@ struct Args { help = "Enable Challenge Indicators for RetroAchievements" )] ra_challenge: bool, + #[arg( + long = "ra-leaderboard", + help = "Enable Leaderboard Trackers for RetroAchievements" + )] + ra_leaderboard: bool, } #[tokio::main(worker_threads = 4)] @@ -164,9 +169,13 @@ async fn main() -> std::io::Result<()> { }; if cfg!(ra_hardcore_enabled) { - retroachievements::init_client(args.ra_hardcore, args.ra_challenge); + retroachievements::init_client( + args.ra_hardcore, + args.ra_challenge, + args.ra_leaderboard, + ); } else { - retroachievements::init_client(false, args.ra_challenge); + retroachievements::init_client(false, args.ra_challenge, args.ra_leaderboard); } let mut shutdown_tx = None; @@ -264,7 +273,7 @@ async fn main() -> std::io::Result<()> { ui::input::bind_input_profile(&mut ui, profile, port); } } else { - retroachievements::init_client(false, false); + retroachievements::init_client(false, false, false); gui::app_window(); retroachievements::shutdown_client(); } diff --git a/src/retroachievements.rs b/src/retroachievements.rs index 8e0aa4b..4b2e5a0 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -10,6 +10,7 @@ pub struct RAConfig { pub enabled: bool, pub hardcore: bool, pub challenge: bool, + pub leaderboard: bool, } #[unsafe(no_mangle)] @@ -41,6 +42,7 @@ pub extern "C" fn store_retroachievements_credentials( enabled: result.enabled, hardcore: result.hardcore, challenge: result.challenge, + leaderboard: result.leaderboard, } } else { RAConfig { @@ -49,6 +51,7 @@ pub extern "C" fn store_retroachievements_credentials( enabled: false, hardcore: false, challenge: false, + leaderboard: false, } }; let f = std::fs::File::create(&file_path).unwrap(); @@ -170,6 +173,7 @@ pub fn ra_window(app: &ui::gui::AppWindow) { app.set_ra_enabled(result.enabled); app.set_ra_hardcore(result.hardcore); app.set_ra_challenge(result.challenge); + app.set_ra_leaderboard(result.leaderboard); token = result.token; } else { app.set_ra_hardcore(true); @@ -199,7 +203,7 @@ pub fn ra_window(app: &ui::gui::AppWindow) { .unwrap(); }); - app.on_ra_toggled(move |enabled, hardcore, challenge| { + app.on_ra_toggled(move |enabled, hardcore, challenge, leaderboard| { let file_path = ui::get_dirs().config_dir.join("retroachievements.json"); let raconfig = if let Ok(ra_config) = std::fs::read(&file_path) && let Ok(result) = serde_json::from_slice::(ra_config.as_ref()) @@ -212,6 +216,7 @@ pub fn ra_window(app: &ui::gui::AppWindow) { enabled, hardcore, challenge, + leaderboard, } } else { RAConfig { @@ -220,6 +225,7 @@ pub fn ra_window(app: &ui::gui::AppWindow) { enabled, hardcore, challenge, + leaderboard, } } } else { @@ -229,6 +235,7 @@ pub fn ra_window(app: &ui::gui::AppWindow) { enabled, hardcore, challenge, + leaderboard, } }; let f = std::fs::File::create(&file_path).unwrap(); @@ -269,8 +276,8 @@ pub fn do_idle() { unsafe { ra_do_idle() }; } -pub fn init_client(hardcore: bool, challenge: bool) { - unsafe { ra_init_client(hardcore, challenge) }; +pub fn init_client(hardcore: bool, challenge: bool, leaderboard: bool) { + unsafe { ra_init_client(hardcore, challenge, leaderboard) }; } pub fn shutdown_client() { diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 63dcef4..4009434 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -34,6 +34,7 @@ pub struct GameSettings { pub struct RASettings { pub hardcore: bool, pub challenge: bool, + pub leaderboard: bool, } fn check_latest_version(weak: slint::Weak) { @@ -370,6 +371,9 @@ pub fn run_rom( if ra_settings.challenge { command.args(["--ra-challenge"]); } + if ra_settings.leaderboard { + command.args(["--ra-leaderboard"]); + } } for i in 0..4 { @@ -434,6 +438,7 @@ fn open_rom(app: &AppWindow) { let disable_expansion_pak = app.get_disable_expansion_pak(); let ra_hardcore = app.get_ra_hardcore(); let ra_challenge = app.get_ra_challenge(); + let ra_leaderboard = app.get_ra_leaderboard(); let weak = app.as_weak(); tokio::spawn(async move { @@ -467,6 +472,7 @@ fn open_rom(app: &AppWindow) { RASettings { hardcore: ra_hardcore, challenge: ra_challenge, + leaderboard: ra_leaderboard, }, weak, ); diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 299526a..dc7504f 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -38,7 +38,7 @@ export component AppWindow inherits Window { callback ra_button_clicked(string); callback ra_games_clicked; callback ra_show_profile_clicked(string); - callback ra_toggled(bool,bool,bool); + callback ra_toggled(bool,bool,bool,bool); in property version <=> AboutData.version; in property has_update <=> AboutData.has_update; in-out property ra_username <=> RAData.ra_username; @@ -49,6 +49,7 @@ export component AppWindow inherits Window { in-out property ra_enabled <=> RAData.enabled; in-out property ra_hardcore <=> RAData.hardcore; in-out property ra_challenge <=> RAData.challenge; + in-out property ra_leaderboard <=> RAData.leaderboard; in-out property integer_scaling <=> SettingsData.integer_scaling; in-out property fullscreen <=> SettingsData.fullscreen; in-out property widescreen <=> SettingsData.widescreen; @@ -135,8 +136,8 @@ export component AppWindow inherits Window { ra_button_clicked(password) => { ra_button_clicked(password); } - ra_toggled(enabled,hardcore,challenge) => { - ra_toggled(enabled,hardcore,challenge); + ra_toggled(enabled,hardcore,challenge,leaderboard) => { + ra_toggled(enabled,hardcore,challenge,leaderboard); } ra_games_clicked => { ra_games_clicked(); diff --git a/src/ui/gui/retroachievements_page.slint b/src/ui/gui/retroachievements_page.slint index 0784f90..5095934 100644 --- a/src/ui/gui/retroachievements_page.slint +++ b/src/ui/gui/retroachievements_page.slint @@ -8,6 +8,7 @@ export global RAData { in-out property enabled; in-out property hardcore; in-out property challenge; + in-out property leaderboard; in-out property ra_logging_in; in-out property ra_show_profile; in-out property ra_username; @@ -17,7 +18,7 @@ export global RAData { export component RetroAchievements inherits Page { callback ra_button_clicked(string); - callback ra_toggled(bool,bool,bool); + callback ra_toggled(bool,bool,bool,bool); callback ra_games_clicked; callback ra_show_profile_clicked(string); title: @tr("RetroAchievements"); @@ -38,7 +39,7 @@ export component RetroAchievements inherits Page { RAData.current_user_message = "Not currently logged in"; RAData.ra_show_profile = false; } - ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge); + ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard); } } } @@ -50,7 +51,7 @@ export component RetroAchievements inherits Page { enabled: RAData.enabled; toggled => { RAData.hardcore = self.checked; - ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge); + ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard); } } } @@ -62,7 +63,19 @@ export component RetroAchievements inherits Page { enabled: RAData.enabled; toggled => { RAData.challenge = self.checked; - ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge); + ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard); + } + } + } + HorizontalBox { + alignment: center; + CheckBox { + text: @tr("Leaderboard Trackers"); + checked: RAData.leaderboard; + enabled: RAData.enabled; + toggled => { + RAData.leaderboard = self.checked; + ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard); } } } diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index a142526..7eafc3d 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -1110,6 +1110,7 @@ fn setup_wait_window( RASettings { hardcore: false, challenge: false, + leaderboard: false, }, weak_app, ); From c14b4616124d8aa3a545dc8036d439fc4fd59e33 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 13 Apr 2026 20:39:57 +0200 Subject: [PATCH 0755/1117] more RA (#741) * more RA * more * more --- parallel-rdp/interface.cpp | 17 +++++---- parallel-rdp/interface.hpp | 5 ++- retroachievements/retroachievements.c | 55 +++++++++++++++------------ src/device.rs | 1 + src/main.rs | 1 - src/ui/gui.rs | 13 ++++++- src/ui/input.rs | 2 +- 7 files changed, 55 insertions(+), 39 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index f4ad2e0..20f713a 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -818,8 +818,9 @@ static void update_leaderboard_tracker() { message += leaderboard_tracker.second; message += '\n'; } - leaderboard_tracker_image = - create_message_image(wsi->get_device(), 0, message_font, message.c_str()); + leaderboard_tracker_image = create_message_image( + wsi->get_device(), 0, achievement_challenge_indicator_font, + message.c_str()); } void achievement_challenge_indicator_add(const char *achievement_title) { @@ -838,18 +839,18 @@ void achievement_challenge_indicator_remove(const char *achievement_title) { void achievement_progress_add(const char *achievement_title, const char *progress) { - char message[512]; - snprintf(message, sizeof(message), "%s: %s", achievement_title, progress); + std::string message = std::format("{}: {}", achievement_title, progress); achievement_progress_indicator_image = - create_message_image(wsi->get_device(), 0, message_font, message); + create_message_image(wsi->get_device(), 0, message_font, message.c_str()); } -void achievement_progress_remove(const char *achievement_title) { +void achievement_progress_remove() { achievement_progress_indicator_image = Vulkan::ImageHandle(); } -void leaderboard_tracker_add(uint32_t id, const char *display) { - std::string message = display; +void leaderboard_tracker_add(uint32_t id, const char *title, + const char *display) { + std::string message = std::format("{}: {}", title, display); leaderboard_trackers[id] = message; update_leaderboard_tracker(); } diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 4629067..f1c4aae 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -55,8 +55,9 @@ void achievement_challenge_indicator_add(const char *achievement_title); void achievement_challenge_indicator_remove(const char *achievement_title); void achievement_progress_add(const char *achievement_title, const char *progress); -void achievement_progress_remove(const char *achievement_title); -void leaderboard_tracker_add(uint32_t id, const char *display); +void achievement_progress_remove(); +void leaderboard_tracker_add(uint32_t id, const char *title, + const char *display); void leaderboard_tracker_remove(uint32_t id); #ifdef __cplusplus diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index 29432d7..f9e92f6 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -24,6 +24,7 @@ static bool g_leaderboard = false; static const char *g_username = NULL; static const char *g_token = NULL; static char load_game_error_message[512]; +static rc_client_leaderboard_list_t *g_leaderboard_list = NULL; static uint32_t read_memory(uint32_t address, uint8_t *buffer, uint32_t num_bytes, rc_client_t *client) { @@ -129,6 +130,9 @@ static void load_game_callback(int result, const char *error_message, rc_client_set_hardcore_enabled(client, false); } + g_leaderboard_list = rc_client_create_leaderboard_list( + client, RC_CLIENT_LEADERBOARD_LIST_GROUPING_NONE); + g_game_loaded = true; notify_load_game(userdata); } @@ -179,22 +183,6 @@ void ra_set_dmem(const uint8_t *dmem, size_t dmem_size) { g_dmem_size = dmem_size; } -static void leaderboard_started(const rc_client_leaderboard_t *leaderboard) { - char buffer[512]; - - snprintf(buffer, sizeof(buffer), "Leaderboard started: %s", - leaderboard->title); - rdp_onscreen_message(buffer); -} - -static void leaderboard_failed(const rc_client_leaderboard_t *leaderboard) { - char buffer[512]; - - snprintf(buffer, sizeof(buffer), "Leaderboard failed: %s", - leaderboard->title); - rdp_onscreen_message(buffer); -} - static void leaderboard_submitted(const rc_client_leaderboard_t *leaderboard) { char buffer[512]; @@ -238,18 +226,27 @@ static void server_error(const rc_client_server_error_t *server_error) { rdp_onscreen_message(buffer); } +static const char *get_leaderboard_title(const char *display) { + for (uint32_t i = 0; i < g_leaderboard_list->num_buckets; i++) { + for (uint32_t j = 0; j < g_leaderboard_list->buckets[i].num_leaderboards; + j++) { + if (g_leaderboard_list->buckets[i].leaderboards[j]->tracker_value == + display) { + return g_leaderboard_list->buckets[i].leaderboards[j]->title; + } + } + } + return NULL; +} + static void event_handler(const rc_client_event_t *event, rc_client_t *client) { switch (event->type) { case RC_CLIENT_EVENT_ACHIEVEMENT_TRIGGERED: achievement_triggered(event->achievement); break; case RC_CLIENT_EVENT_LEADERBOARD_STARTED: - if (g_leaderboard) - leaderboard_started(event->leaderboard); break; case RC_CLIENT_EVENT_LEADERBOARD_FAILED: - if (g_leaderboard) - leaderboard_failed(event->leaderboard); break; case RC_CLIENT_EVENT_LEADERBOARD_SUBMITTED: if (g_leaderboard) @@ -268,7 +265,7 @@ static void event_handler(const rc_client_event_t *event, rc_client_t *client) { event->achievement->measured_progress); break; case RC_CLIENT_EVENT_ACHIEVEMENT_PROGRESS_INDICATOR_HIDE: - achievement_progress_remove(event->achievement->title); + achievement_progress_remove(); break; case RC_CLIENT_EVENT_ACHIEVEMENT_PROGRESS_INDICATOR_UPDATE: achievement_progress_add(event->achievement->title, @@ -276,8 +273,10 @@ static void event_handler(const rc_client_event_t *event, rc_client_t *client) { break; case RC_CLIENT_EVENT_LEADERBOARD_TRACKER_SHOW: if (g_leaderboard) - leaderboard_tracker_add(event->leaderboard_tracker->id, - event->leaderboard_tracker->display); + leaderboard_tracker_add( + event->leaderboard_tracker->id, + get_leaderboard_title(event->leaderboard_tracker->display), + event->leaderboard_tracker->display); break; case RC_CLIENT_EVENT_LEADERBOARD_TRACKER_HIDE: if (g_leaderboard) @@ -285,8 +284,10 @@ static void event_handler(const rc_client_event_t *event, rc_client_t *client) { break; case RC_CLIENT_EVENT_LEADERBOARD_TRACKER_UPDATE: if (g_leaderboard) - leaderboard_tracker_add(event->leaderboard_tracker->id, - event->leaderboard_tracker->display); + leaderboard_tracker_add( + event->leaderboard_tracker->id, + get_leaderboard_title(event->leaderboard_tracker->display), + event->leaderboard_tracker->display); break; case RC_CLIENT_EVENT_LEADERBOARD_SCOREBOARD: break; @@ -333,6 +334,10 @@ bool ra_get_hardcore() { } void ra_shutdown_client() { + if (g_leaderboard_list) { + rc_client_destroy_leaderboard_list(g_leaderboard_list); + g_leaderboard_list = NULL; + } if (g_client) { // Release resources associated to the client instance rc_client_destroy(g_client); diff --git a/src/device.rs b/src/device.rs index 66db74c..c489555 100644 --- a/src/device.rs +++ b/src/device.rs @@ -90,6 +90,7 @@ pub fn run_game(device: &mut Device, rom_contents: &[u8], game_settings: ui::gui cpu::run(device); ui::storage::write_saves(device); + retroachievements::shutdown_client(); ui::input::close(&mut device.ui); ui::audio::close(&mut device.ui); ui::video::close(&device.ui); diff --git a/src/main.rs b/src/main.rs index 24a0553..be3cd0f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -224,7 +224,6 @@ async fn main() -> std::io::Result<()> { load_savestate_slot: args.load_state, }, ); - retroachievements::shutdown_client(); if device.netplay.is_some() { netplay::close(&mut device); diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 4009434..fe84e3c 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -234,7 +234,9 @@ fn controller_window( if dinput { command.arg("--use-dinput"); } - command.status().unwrap(); + if !command.status().unwrap().success() { + eprintln!("Failed to configure input profile"); + } let game_ui = ui::Ui::new(); update_input_profiles(&weak_app, &game_ui.config); }); @@ -387,7 +389,14 @@ pub fn run_rom( } } - command.arg(file_path.to_str().unwrap()).status().unwrap(); + if !command + .arg(file_path.to_str().unwrap()) + .status() + .unwrap() + .success() + { + eprintln!("Failed to run game"); + } let _ = std::fs::remove_file(cheats_path.to_str().unwrap()); diff --git a/src/ui/input.rs b/src/ui/input.rs index a989a61..fb95713 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -543,7 +543,7 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, d if !unsafe { sdl3_sys::render::SDL_CreateWindowAndRenderer( title.as_ptr(), - 640, + 852, 480, sdl3_sys::video::SDL_WindowFlags(0), &mut window, From baa14de3f309d8ca4445caad194cc180afd76c23 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 13 Apr 2026 21:22:36 +0200 Subject: [PATCH 0756/1117] show leaderboard and challenge together (#742) --- parallel-rdp/interface.cpp | 52 +++++++++++++++----------------------- 1 file changed, 21 insertions(+), 31 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 20f713a..5769b8c 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -103,7 +103,6 @@ static std::vector achievement_challenge_indicators; static Vulkan::ImageHandle achievement_challenge_indicator_image; static Vulkan::ImageHandle achievement_progress_indicator_image; static std::map leaderboard_trackers; -static Vulkan::ImageHandle leaderboard_tracker_image; #define MESSAGE_TIME 3000 // 3 seconds @@ -309,17 +308,15 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, message_timer = 0; achievement_challenge_indicators.clear(); + leaderboard_trackers.clear(); achievement_challenge_indicator_image = Vulkan::ImageHandle(); achievement_progress_indicator_image = Vulkan::ImageHandle(); - leaderboard_trackers.clear(); - leaderboard_tracker_image = Vulkan::ImageHandle(); } void rdp_close() { messages = std::queue(); achievement_challenge_indicator_image = Vulkan::ImageHandle(); achievement_progress_indicator_image = Vulkan::ImageHandle(); - leaderboard_tracker_image = Vulkan::ImageHandle(); if (wsi) wsi->end_frame(); @@ -496,8 +493,6 @@ static void render_frame(Vulkan::Device &device) { } } else if (achievement_progress_indicator_image) { draw_indicator(cmd, achievement_progress_indicator_image, vp); - } else if (leaderboard_tracker_image) { - draw_indicator(cmd, leaderboard_tracker_image, vp); } else if (achievement_challenge_indicator_image) { draw_indicator(cmd, achievement_challenge_indicator_image, vp); } @@ -802,25 +797,29 @@ uint64_t rdp_process_commands() { static void update_challenge_indicator() { std::string message; + for (const auto &leaderboard_tracker : leaderboard_trackers) { + message += leaderboard_tracker.second; + message += '\n'; + } + + if (!leaderboard_trackers.empty() && + !achievement_challenge_indicators.empty()) { + message += "---\n"; + } + const auto &v = achievement_challenge_indicators; for (size_t i = 0; i < std::min(v.size(), 5); ++i) { message += v[i]; message += '\n'; } - achievement_challenge_indicator_image = create_message_image( - wsi->get_device(), 0, achievement_challenge_indicator_font, - message.c_str()); -} -static void update_leaderboard_tracker() { - std::string message; - for (const auto &leaderboard_tracker : leaderboard_trackers) { - message += leaderboard_tracker.second; - message += '\n'; + if (message.empty()) { + achievement_challenge_indicator_image = Vulkan::ImageHandle(); + } else { + achievement_challenge_indicator_image = create_message_image( + wsi->get_device(), 0, achievement_challenge_indicator_font, + message.c_str()); } - leaderboard_tracker_image = create_message_image( - wsi->get_device(), 0, achievement_challenge_indicator_font, - message.c_str()); } void achievement_challenge_indicator_add(const char *achievement_title) { @@ -830,11 +829,7 @@ void achievement_challenge_indicator_add(const char *achievement_title) { void achievement_challenge_indicator_remove(const char *achievement_title) { std::erase(achievement_challenge_indicators, achievement_title); - if (achievement_challenge_indicators.empty()) { - achievement_challenge_indicator_image = Vulkan::ImageHandle(); - } else { - update_challenge_indicator(); - } + update_challenge_indicator(); } void achievement_progress_add(const char *achievement_title, @@ -850,16 +845,11 @@ void achievement_progress_remove() { void leaderboard_tracker_add(uint32_t id, const char *title, const char *display) { - std::string message = std::format("{}: {}", title, display); - leaderboard_trackers[id] = message; - update_leaderboard_tracker(); + leaderboard_trackers[id] = std::format("{}: {}", title, display); + update_challenge_indicator(); } void leaderboard_tracker_remove(uint32_t id) { leaderboard_trackers.erase(id); - if (leaderboard_trackers.empty()) { - leaderboard_tracker_image = Vulkan::ImageHandle(); - } else { - update_leaderboard_tracker(); - } + update_challenge_indicator(); } From 7725aa2692f7dc4ea8d243404b939a074041780c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 13 Apr 2026 22:38:31 +0200 Subject: [PATCH 0757/1117] RA tweaks (#743) * prevent crash * more * more --- parallel-rdp/interface.cpp | 14 +++++++++++--- retroachievements/retroachievements.c | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 5769b8c..1ad225d 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -103,6 +103,7 @@ static std::vector achievement_challenge_indicators; static Vulkan::ImageHandle achievement_challenge_indicator_image; static Vulkan::ImageHandle achievement_progress_indicator_image; static std::map leaderboard_trackers; +static bool display_challenge_indicator; #define MESSAGE_TIME 3000 // 3 seconds @@ -154,6 +155,9 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { case SDL_SCANCODE_F7: callback.load_state = true; break; + case SDL_SCANCODE_F9: + display_challenge_indicator = !display_challenge_indicator; + break; case SDL_SCANCODE_F12: callback.reset_game = true; break; @@ -307,6 +311,7 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, messages = std::queue(); message_timer = 0; + display_challenge_indicator = true; achievement_challenge_indicators.clear(); leaderboard_trackers.clear(); achievement_challenge_indicator_image = Vulkan::ImageHandle(); @@ -493,7 +498,8 @@ static void render_frame(Vulkan::Device &device) { } } else if (achievement_progress_indicator_image) { draw_indicator(cmd, achievement_progress_indicator_image, vp); - } else if (achievement_challenge_indicator_image) { + } else if (achievement_challenge_indicator_image && + display_challenge_indicator) { draw_indicator(cmd, achievement_challenge_indicator_image, vp); } } @@ -845,8 +851,10 @@ void achievement_progress_remove() { void leaderboard_tracker_add(uint32_t id, const char *title, const char *display) { - leaderboard_trackers[id] = std::format("{}: {}", title, display); - update_challenge_indicator(); + if (title) { + leaderboard_trackers[id] = std::format("{}: {}", title, display); + update_challenge_indicator(); + } } void leaderboard_tracker_remove(uint32_t id) { diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index f9e92f6..ad8aa3e 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -152,7 +152,7 @@ void ra_welcome() { rc_client_get_user_game_summary(g_client, &summary); int message_length = snprintf( - buffer, sizeof(buffer), "RA loaded: %s\nMode: %s\n", game->title, + buffer, sizeof(buffer), "%s\nMode: %s\n", game->title, rc_client_get_hardcore_enabled(g_client) ? "Hardcore" : "Softcore"); if (summary.num_core_achievements != 0) { From d061a856d25d03245bc06598667b5e8533e8d30b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Apr 2026 07:26:44 +0200 Subject: [PATCH 0758/1117] Bump rand from 0.10.0 to 0.10.1 in the cargo group across 1 directory (#744) Bumps the cargo group with 1 update in the / directory: [rand](https://github.com/rust-random/rand). Updates `rand` from 0.10.0 to 0.10.1 - [Release notes](https://github.com/rust-random/rand/releases) - [Changelog](https://github.com/rust-random/rand/blob/master/CHANGELOG.md) - [Commits](https://github.com/rust-random/rand/compare/0.10.0...0.10.1) --- updated-dependencies: - dependency-name: rand dependency-version: 0.10.1 dependency-type: direct:production dependency-group: cargo ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 26bb841..d891598 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2010,7 +2010,7 @@ dependencies = [ "mimalloc", "open", "postcard", - "rand 0.10.0", + "rand 0.10.1", "regex", "reqwest", "rfd", @@ -4276,9 +4276,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc266eb313df6c5c09c1c7b1fbe2510961e5bcd3add930c1e31f7ed9da0feff8" +checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" dependencies = [ "chacha20", "getrandom 0.4.2", From d12f16fe29d2da32121181a3a85ba795b995348c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 15 Apr 2026 12:36:21 +0200 Subject: [PATCH 0759/1117] minor code cleanup (#746) --- src/savestates.rs | 16 +++++----------- src/ui/input.rs | 22 +++++++++++++--------- src/ui/video.rs | 4 ++-- 3 files changed, 20 insertions(+), 22 deletions(-) diff --git a/src/savestates.rs b/src/savestates.rs index 44011b6..3e9a165 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -20,7 +20,7 @@ impl<'de, const N: usize> Visitor<'de> for M128iArrayVisitor { A: SeqAccess<'de>, { let mut arr: [__m128i; N] = [device::zero_m128i(); N]; - for (index, item) in arr.iter_mut().enumerate().take(N) { + for (index, item) in arr.iter_mut().enumerate() { match seq.next_element::()? { Some(value) => *item = unsafe { std::mem::transmute::(value) }, None => return Err(serde::de::Error::invalid_length(index, &self)), @@ -171,28 +171,22 @@ pub fn load_savestate(device: &mut device::Device) { device::pif::connect_pif_channels(device); for i in 0..4 { - if device.pif.channels[i].pak_handler.is_some() { - if device.pif.channels[i].pak_handler.unwrap().pak_type - == device::controller::PakType::RumblePak - { + if let Some(handler) = device.pif.channels[i].pak_handler { + if handler.pak_type == device::controller::PakType::RumblePak { let rumblepak_handler = device::controller::PakHandler { read: device::controller::rumble::read, write: device::controller::rumble::write, pak_type: device::controller::PakType::RumblePak, }; device.pif.channels[i].pak_handler = Some(rumblepak_handler); - } else if device.pif.channels[i].pak_handler.unwrap().pak_type - == device::controller::PakType::MemPak - { + } else if handler.pak_type == device::controller::PakType::MemPak { let mempak_handler = device::controller::PakHandler { read: device::controller::mempak::read, write: device::controller::mempak::write, pak_type: device::controller::PakType::MemPak, }; device.pif.channels[i].pak_handler = Some(mempak_handler); - } else if device.pif.channels[i].pak_handler.unwrap().pak_type - == device::controller::PakType::TransferPak - { + } else if handler.pak_type == device::controller::PakType::TransferPak { let tpak_handler = device::controller::PakHandler { read: device::controller::transferpak::read, write: device::controller::transferpak::write, diff --git a/src/ui/input.rs b/src/ui/input.rs index fb95713..7687167 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -42,7 +42,7 @@ pub struct InputData { } fn bound_axis(x: &mut f64, y: &mut f64) { - let radius = f64::sqrt(70.0 * 70.0 + 70.0 * 70.0); // this is roughly the maxium diagonal distance of the controller + let radius = f64::sqrt(70.0 * 70.0 + 70.0 * 70.0); // this is roughly the maximum diagonal distance of the controller // Calculate the distance from the origin (0, 0) let distance = f64::sqrt((*x) * (*x) + (*y) * (*y)); @@ -73,6 +73,10 @@ fn apply_deadzone(x: &mut f64, y: &mut f64, deadzone: i32) { *y = *y / distance * new_distance; } +fn normalize_axis_position(axis_position: i16) -> f64 { + axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64 +} + fn set_axis_from_joystick( profile: &ui::config::InputProfile, joystick: *mut sdl3_sys::joystick::SDL_Joystick, @@ -84,7 +88,7 @@ fn set_axis_from_joystick( sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_LEFT].id) }; if axis_position as isize * profile.joystick_axis[AXIS_LEFT].axis as isize > 0 { - x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; + x = normalize_axis_position(axis_position); } } if profile.joystick_axis[AXIS_RIGHT].enabled { @@ -92,7 +96,7 @@ fn set_axis_from_joystick( sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_RIGHT].id) }; if axis_position as isize * profile.joystick_axis[AXIS_RIGHT].axis as isize > 0 { - x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; + x = normalize_axis_position(axis_position); } } if profile.joystick_axis[AXIS_DOWN].enabled { @@ -100,7 +104,7 @@ fn set_axis_from_joystick( sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_DOWN].id) }; if axis_position as isize * profile.joystick_axis[AXIS_DOWN].axis as isize > 0 { - y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); + y = normalize_axis_position(axis_position).neg(); } } if profile.joystick_axis[AXIS_UP].enabled { @@ -108,7 +112,7 @@ fn set_axis_from_joystick( sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_UP].id) }; if axis_position as isize * profile.joystick_axis[AXIS_UP].axis as isize > 0 { - y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); + y = normalize_axis_position(axis_position).neg(); } } (x, y) @@ -172,7 +176,7 @@ fn set_axis_from_controller( ) }; if axis_position as isize * profile.controller_axis[AXIS_LEFT].axis as isize > 0 { - x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; + x = normalize_axis_position(axis_position); } } if profile.controller_axis[AXIS_RIGHT].enabled { @@ -183,7 +187,7 @@ fn set_axis_from_controller( ) }; if axis_position as isize * profile.controller_axis[AXIS_RIGHT].axis as isize > 0 { - x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; + x = normalize_axis_position(axis_position); } } if profile.controller_axis[AXIS_DOWN].enabled { @@ -194,7 +198,7 @@ fn set_axis_from_controller( ) }; if axis_position as isize * profile.controller_axis[AXIS_DOWN].axis as isize > 0 { - y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); + y = normalize_axis_position(axis_position).neg(); } } if profile.controller_axis[AXIS_UP].enabled { @@ -205,7 +209,7 @@ fn set_axis_from_controller( ) }; if axis_position as isize * profile.controller_axis[AXIS_UP].axis as isize > 0 { - y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); + y = normalize_axis_position(axis_position).neg(); } } (x, y) diff --git a/src/ui/video.rs b/src/ui/video.rs index 74cc61c..797dac3 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -6,7 +6,7 @@ pub fn init(device: &mut device::Device) { ui::sdl_init(sdl3_sys::init::SDL_INIT_VIDEO); ui::ttf_init(); - let title = std::ffi::CString::new("gopher64").unwrap(); + let window_title = std::ffi::CString::new("gopher64").unwrap(); let mut flags = sdl3_sys::video::SDL_WINDOW_VULKAN | sdl3_sys::video::SDL_WINDOW_RESIZABLE @@ -39,7 +39,7 @@ pub fn init(device: &mut device::Device) { window_height = 240 * scale; } device.ui.video.window = unsafe { - sdl3_sys::video::SDL_CreateWindow(title.as_ptr(), window_width, window_height, flags) + sdl3_sys::video::SDL_CreateWindow(window_title.as_ptr(), window_width, window_height, flags) }; if device.ui.video.window.is_null() { panic!("Could not create window: {}", unsafe { From b40ec6940f86d73cbf336a9c935389875e014c77 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 15 Apr 2026 12:57:52 +0200 Subject: [PATCH 0760/1117] finish up RA support (#745) * finish up RA support * more * capture some corner cases * fix post data * more * more * fix range * more * more * more * more * show in-progress achievements * more * more * more * more --- .github/workflows/build.yml | 2 +- README.md | 14 +++--- parallel-rdp/interface.cpp | 20 ++++++++- parallel-rdp/interface.hpp | 2 +- retroachievements/retroachievements.c | 64 ++++++++++++++++++++++----- retroachievements/retroachievements.h | 8 ++++ src/cheats.rs | 2 +- src/device/controller.rs | 6 +-- src/device/cpu.rs | 1 + src/device/exceptions.rs | 2 +- src/device/vi.rs | 2 +- src/main.rs | 2 + src/netplay.rs | 11 +++-- src/retroachievements.rs | 42 +++++++++--------- src/savestates.rs | 10 ++++- src/ui/audio.rs | 12 ++++- src/ui/video.rs | 12 +++-- 17 files changed, 155 insertions(+), 57 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 38bbf22..2210040 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -150,7 +150,7 @@ jobs: matrix: include: - target: aarch64-apple-darwin - arch: mac-aarch64 + arch: macos-aarch64 llvm: ARM64 steps: - uses: actions/checkout@v6 diff --git a/README.md b/README.md index 12c9ff7..a433769 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ Windows: https://github.com/gopher64/gopher64/releases/latest/download/gopher64-windows-x86_64.exe +MacOS: https://github.com/gopher64/gopher64/releases/latest/download/gopher64-macos-aarch64.zip + Linux: https://flathub.org/apps/io.github.gopher64.gopher64 ## wiki @@ -11,7 +13,7 @@ https://github.com/gopher64/gopher64/wiki ## discord -https://discord.gg/9RGXq8W8JQ +[Discord invite link](https://discord.gg/9RGXq8W8JQ) ## controls @@ -19,7 +21,7 @@ Keys are mapped according to [these defaults](https://github.com/gopher64/gopher ## netplay -Gopher64 supports netplay (online play with others) via cloud hosted servers. You can also run the server (https://github.com/gopher64/gopher64-netplay-server) yourself on a LAN. +Gopher64 supports netplay (online play with others) via cloud hosted servers. You can also run the [server](https://github.com/gopher64/gopher64-netplay-server) yourself on a LAN. ## portable mode @@ -35,8 +37,8 @@ flatpak run --filesystem=host:ro io.github.gopher64.gopher64 /path/to/rom.z64 ## building and usage -1. Linux only: install the SDL3 dependencies: https://wiki.libsdl.org/SDL3/README-linux#build-dependencies -2. Install rust: https://www.rust-lang.org/tools/install +1. Linux only: [install the SDL3 dependencies](https://wiki.libsdl.org/SDL3/README-linux#build-dependencies) +2. [Install rust](https://www.rust-lang.org/tools/install) 3. `git clone --recursive https://github.com/gopher64/gopher64.git` 4. `cd gopher64` 5. `cargo build --release` @@ -48,10 +50,12 @@ I am very open to contributions! Please contact me via a GitHub issue or Discord ## license -Gopher64 is licensed under the GPLv3 license. Many portions of gopher64 have been adapted from mupen64plus and/or ares. The license for mupen64plus can be found here: https://github.com/mupen64plus/mupen64plus-core/blob/master/LICENSES. The license for ares can be found here: https://github.com/ares-emulator/ares/blob/master/LICENSE. +Gopher64 is licensed under the GPLv3 license. Many portions of gopher64 have been adapted from mupen64plus and/or ares. The license for mupen64plus can be found [here](https://github.com/mupen64plus/mupen64plus-core/blob/master/LICENSES). The license for ares can be found [here](https://github.com/ares-emulator/ares/blob/master/LICENSE). ## privacy and code signing policy Free code signing for the Windows release is provided by [SignPath.io](https://about.signpath.io), certificate by [SignPath Foundation](https://signpath.org). During online netplay sessions, the server logs your IP address and basic session information (game title and session name) for operational purposes. No additional personal data is collected or stored. + +If you enable the RetroAchievements feature, some data is sent to their systems. Please see their terms [here](https://retroachievements.org/terms). diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 1ad225d..c932a8c 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -1,4 +1,5 @@ #include "interface.hpp" +#include "../retroachievements/retroachievements.h" #include "rdp_device.hpp" #include "spirv.hpp" #include "spirv_crt.hpp" @@ -155,8 +156,17 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { case SDL_SCANCODE_F7: callback.load_state = true; break; + case SDL_SCANCODE_F8: + if (messages.empty()) + SDL_RunOnMainThread(ra_display_inprogress_achievements, nullptr, true); + break; case SDL_SCANCODE_F9: display_challenge_indicator = !display_challenge_indicator; + rdp_onscreen_message( + std::format("Challenge indicators: {}", + display_challenge_indicator ? "ON" : "OFF") + .c_str(), + false); break; case SDL_SCANCODE_F12: callback.reset_game = true; @@ -566,10 +576,16 @@ void rdp_load_state(const uint8_t *state) { memcpy(&rdp_device, state, sizeof(RDP_DEVICE)); } -void rdp_onscreen_message(const char *message) { +static void push_onscreen_message(void *message) { if (messages.empty()) message_timer = SDL_GetTicks() + MESSAGE_TIME; - messages.push({std::string(message), Vulkan::ImageHandle()}); + messages.push({std::string((const char *)message), Vulkan::ImageHandle()}); +} + +void rdp_onscreen_message(const char *message, bool long_message) { + SDL_RunOnMainThread(push_onscreen_message, (void *)message, true); + if (long_message) + SDL_RunOnMainThread(push_onscreen_message, (void *)message, true); } uint32_t pixel_size(uint32_t pixel_type, uint32_t area) { diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index f1c4aae..da286bf 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -44,7 +44,7 @@ void rdp_update_screen(); void rdp_render_frame(); CALL_BACK rdp_check_callback(); uint64_t rdp_process_commands(); -void rdp_onscreen_message(const char *_message); +void rdp_onscreen_message(const char *message, bool long_message); void rdp_new_processor(GFX_INFO _gfx_info); void rdp_check_framebuffers(uint32_t address, uint32_t length); size_t rdp_state_size(); diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index ad8aa3e..5b20a10 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -7,6 +7,7 @@ #include void rust_server_call(const char *url, const char *post_data, + const char *content_type, rc_client_server_callback_t callback, void *callback_data); void store_retroachievements_credentials(const char *username, @@ -28,7 +29,7 @@ static rc_client_leaderboard_list_t *g_leaderboard_list = NULL; static uint32_t read_memory(uint32_t address, uint8_t *buffer, uint32_t num_bytes, rc_client_t *client) { - if (address + num_bytes >= g_dmem_size) + if (address + num_bytes > g_dmem_size) memset(buffer, 0, num_bytes); else memcpy(buffer, &g_dmem[address], num_bytes); @@ -38,7 +39,8 @@ static uint32_t read_memory(uint32_t address, uint8_t *buffer, static void server_call(const rc_api_request_t *request, rc_client_server_callback_t callback, void *callback_data, rc_client_t *client) { - rust_server_call(request->url, request->post_data, callback, callback_data); + rust_server_call(request->url, request->post_data, request->content_type, + callback, callback_data); } void ra_http_callback(const char *content, size_t content_size, int status_code, @@ -75,6 +77,8 @@ static void login_callback(int result, const char *error_message, "RA login failed: %s", error_message); store_retroachievements_credentials(NULL, NULL, userdata); return; + } else { + memset(load_game_error_message, 0, sizeof(load_game_error_message)); } // Login was successful. Capture the token for future logins so we don't have @@ -94,6 +98,8 @@ const char *ra_get_token() { return g_token; } void ra_logout_user() { g_user_logged_in = false; + g_username = NULL; + g_token = NULL; rc_client_logout(g_client); } @@ -124,6 +130,8 @@ static void load_game_callback(int result, const char *error_message, "RA load failed: %s", error_message); notify_load_game(userdata); return; + } else { + memset(load_game_error_message, 0, sizeof(load_game_error_message)); } if (!rc_client_is_processing_required(client)) { @@ -139,8 +147,7 @@ static void load_game_callback(int result, const char *error_message, void ra_welcome() { if (strlen(load_game_error_message) > 0) { - rdp_onscreen_message(load_game_error_message); - rdp_onscreen_message(load_game_error_message); // show it a bit longer + rdp_onscreen_message(load_game_error_message, true); } if (!g_game_loaded) return; @@ -163,8 +170,7 @@ void ra_welcome() { snprintf(buffer + message_length, sizeof(buffer) - message_length, "Game has no achievements"); } - rdp_onscreen_message(buffer); - rdp_onscreen_message(buffer); // show it a bit longer + rdp_onscreen_message(buffer, true); } void ra_load_game(const uint8_t *rom, size_t rom_size, void *userdata) { @@ -188,14 +194,14 @@ static void leaderboard_submitted(const rc_client_leaderboard_t *leaderboard) { snprintf(buffer, sizeof(buffer), "Leaderboard submitted: %s - %s", leaderboard->title, leaderboard->tracker_value); - rdp_onscreen_message(buffer); + rdp_onscreen_message(buffer, false); } static void achievement_triggered(const rc_client_achievement_t *achievement) { char buffer[512]; snprintf(buffer, sizeof(buffer), "Unlocked: %s", achievement->title); - rdp_onscreen_message(buffer); + rdp_onscreen_message(buffer, false); } static void game_completed(rc_client_t *client) { @@ -205,7 +211,7 @@ static void game_completed(rc_client_t *client) { snprintf(buffer, sizeof(buffer), "%s: %s", rc_client_get_hardcore_enabled(client) ? "Mastered" : "Completed", game->title); - rdp_onscreen_message(buffer); + rdp_onscreen_message(buffer, false); } static void subset_completed(const rc_client_subset_t *subset, @@ -215,7 +221,7 @@ static void subset_completed(const rc_client_subset_t *subset, snprintf(buffer, sizeof(buffer), "Subset %s: %s", rc_client_get_hardcore_enabled(client) ? "mastered" : "completed", subset->title); - rdp_onscreen_message(buffer); + rdp_onscreen_message(buffer, false); } static void server_error(const rc_client_server_error_t *server_error) { @@ -223,10 +229,13 @@ static void server_error(const rc_client_server_error_t *server_error) { snprintf(buffer, sizeof(buffer), "RA server error: %s", server_error->error_message); - rdp_onscreen_message(buffer); + rdp_onscreen_message(buffer, false); } static const char *get_leaderboard_title(const char *display) { + if (g_leaderboard_list == NULL) + return NULL; + for (uint32_t i = 0; i < g_leaderboard_list->num_buckets; i++) { for (uint32_t j = 0; j < g_leaderboard_list->buckets[i].num_leaderboards; j++) { @@ -314,7 +323,6 @@ void ra_init_client(bool hardcore, bool challenge, bool leaderboard) { g_user_logged_in = false; g_dmem = NULL; g_dmem_size = 0; - memset(load_game_error_message, 0, sizeof(load_game_error_message)); // Provide a logging function to simplify debugging rc_client_enable_logging(g_client, RC_CLIENT_LOG_LEVEL_WARN, log_message); @@ -383,3 +391,35 @@ void ra_load_state(const uint8_t *state, size_t state_size) { printf("RetroAchievements: Failed to deserialize progress\n"); } } + +void ra_display_inprogress_achievements(void *userdata) { + if (!g_game_loaded) + return; + + rc_client_achievement_list_t *list = rc_client_create_achievement_list( + g_client, RC_CLIENT_ACHIEVEMENT_CATEGORY_CORE, + RC_CLIENT_ACHIEVEMENT_LIST_GROUPING_LOCK_STATE); + + char buffer[1024] = {0}; + size_t buffer_length = 0; + + for (uint32_t i = 0; i < list->num_buckets; i++) { + if (list->buckets[i].bucket_type == RC_CLIENT_ACHIEVEMENT_BUCKET_LOCKED) { + for (uint32_t j = 0; j < list->buckets[i].num_achievements; j++) { + const rc_client_achievement_t *achievement = + list->buckets[i].achievements[j]; + if (achievement->measured_percent > 0.0f) { + if (buffer_length < sizeof(buffer) - 1) { + buffer_length += snprintf( + buffer + buffer_length, sizeof(buffer) - buffer_length, + "%s: %s\n", achievement->title, achievement->measured_progress); + } + } + } + } + } + if (buffer_length > 0) { + rdp_onscreen_message(buffer, false); + } + rc_client_destroy_achievement_list(list); +} diff --git a/retroachievements/retroachievements.h b/retroachievements/retroachievements.h index 5c2e532..bc1df5a 100644 --- a/retroachievements/retroachievements.h +++ b/retroachievements/retroachievements.h @@ -22,3 +22,11 @@ const char *ra_get_token(); size_t ra_state_size(); void ra_save_state(uint8_t *state, size_t state_size); void ra_load_state(const uint8_t *state, size_t state_size); + +#ifdef __cplusplus +extern "C" { +#endif +void ra_display_inprogress_achievements(void *userdata); +#ifdef __cplusplus +} +#endif diff --git a/src/cheats.rs b/src/cheats.rs index d81b8f9..88cc730 100644 --- a/src/cheats.rs +++ b/src/cheats.rs @@ -71,7 +71,7 @@ pub fn init( if !device.cheats.cheats.is_empty() { device.cheats.enabled = true; - ui::video::onscreen_message(&device.ui, "Cheats enabled"); + ui::video::onscreen_message(&device.ui, "Cheats enabled", false); } } diff --git a/src/device/controller.rs b/src/device/controller.rs index 3b279ff..f8a4134 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -190,21 +190,21 @@ pub fn pak_switch_event(device: &mut device::Device) { write: device::controller::mempak::write, pak_type: new_pak_type, }); - ui::video::onscreen_message(&device.ui, "MemPak selected"); + ui::video::onscreen_message(&device.ui, "MemPak selected", false); } else if new_pak_type == PakType::RumblePak { channel.pak_handler = Some(device::controller::PakHandler { read: device::controller::rumble::read, write: device::controller::rumble::write, pak_type: new_pak_type, }); - ui::video::onscreen_message(&device.ui, "RumblePak selected"); + ui::video::onscreen_message(&device.ui, "RumblePak selected", false); } else if new_pak_type == PakType::TransferPak { channel.pak_handler = Some(device::controller::PakHandler { read: device::controller::transferpak::read, write: device::controller::transferpak::write, pak_type: new_pak_type, }); - ui::video::onscreen_message(&device.ui, "TransferPak selected"); + ui::video::onscreen_message(&device.ui, "TransferPak selected", false); } channel.change_pak = PakType::None; } diff --git a/src/device/cpu.rs b/src/device/cpu.rs index 1b209dc..55f46bd 100644 --- a/src/device/cpu.rs +++ b/src/device/cpu.rs @@ -230,6 +230,7 @@ pub fn init(device: &mut device::Device) { ui::video::onscreen_message( &device.ui, "Overclocking enabled, setting clock rate to 125 MHz", + false, ); 125000000 }; diff --git a/src/device/exceptions.rs b/src/device/exceptions.rs index 7ae8685..215ca7b 100644 --- a/src/device/exceptions.rs +++ b/src/device/exceptions.rs @@ -166,7 +166,7 @@ pub fn reset_event(device: &mut device::Device) { device::pif::reset_pif(device, true); - ui::video::onscreen_message(&device.ui, "Game reset"); + ui::video::onscreen_message(&device.ui, "Game reset", false); } fn exception_general(device: &mut device::Device, vector_offset: u32) { diff --git a/src/device/vi.rs b/src/device/vi.rs index 6096b7e..0c4ec1c 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -151,7 +151,7 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { if device.netplay.is_none() && paused { if retroachievements::get_hardcore() { - ui::video::onscreen_message(&device.ui, "Cannot pause in RA hardcore mode"); + ui::video::onscreen_message(&device.ui, "Cannot pause in RA hardcore mode", false); } else { ui::video::pause_loop(device.vi.frame_time); } diff --git a/src/main.rs b/src/main.rs index be3cd0f..ff78b6e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -207,6 +207,8 @@ async fn main() -> std::io::Result<()> { retroachievements::login_user(username, password, tx); } else if let Some(token) = args.ra_token { retroachievements::login_token_user(username, token, tx); + } else { + tx.send(false).unwrap(); } rx.await.unwrap(); diff --git a/src/netplay.rs b/src/netplay.rs index 589efe2..6c28c86 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -146,7 +146,7 @@ pub fn get_input(device: &mut device::Device, channel: usize) -> ui::input::Inpu .remove(&netplay.player_data[channel].count); if std::time::Instant::now() > timeout { - ui::video::onscreen_message(&device.ui, "Lost connection to netplay server"); + ui::video::onscreen_message(&device.ui, "Lost connection to netplay server", false); input = Some(InputEvent { input: 0, plugin: 0, @@ -191,13 +191,16 @@ fn process_incoming(netplay: &mut Netplay, ui: &ui::Ui) { } if current_status != netplay.status { if ((current_status & 0x1) ^ (netplay.status & 0x1)) != 0 { - ui::video::onscreen_message(ui, "Netplay desync detected"); - ui::video::onscreen_message(ui, "Netplay desync detected"); // queue this message twice to ensure they see it + ui::video::onscreen_message(ui, "Netplay desync detected", true); } for dis in 1..5 { if ((current_status & (0x1 << dis)) ^ (netplay.status & (0x1 << dis))) != 0 { - ui::video::onscreen_message(ui, &format!("Player {dis} disconnected")); + ui::video::onscreen_message( + ui, + &format!("Player {dis} disconnected"), + false, + ); } } netplay.status = current_status; diff --git a/src/retroachievements.rs b/src/retroachievements.rs index 4b2e5a0..e4923fc 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -3,6 +3,17 @@ include!(concat!(env!("OUT_DIR"), "/retroachievements_bindings.rs")); use crate::ui; use slint::ComponentHandle; +static WEB_CLIENT: std::sync::LazyLock = std::sync::LazyLock::new(|| { + reqwest::Client::builder() + .user_agent(format!( + "{}/{}", + env!("CARGO_PKG_NAME"), + env!("GIT_DESCRIBE") + )) + .build() + .unwrap() +}); + #[derive(serde::Serialize, serde::Deserialize)] pub struct RAConfig { pub username: String, @@ -64,33 +75,24 @@ pub extern "C" fn store_retroachievements_credentials( pub extern "C" fn rust_server_call( c_url: *const std::ffi::c_char, c_post_data: *const std::ffi::c_char, + c_content_type: *const std::ffi::c_char, c_callback: *mut std::ffi::c_void, c_callback_data: *mut std::ffi::c_void, ) { - let url = unsafe { std::ffi::CStr::from_ptr(c_url).to_str().unwrap() }; - let client = reqwest::Client::builder() - .user_agent(format!( - "{}/{}", - env!("CARGO_PKG_NAME"), - env!("GIT_DESCRIBE") - )) - .build() - .unwrap(); + let url = unsafe { std::ffi::CStr::from_ptr(c_url).to_str().unwrap() }.to_string(); + let task = if !c_post_data.is_null() { - let post_data = unsafe { std::ffi::CStr::from_ptr(c_post_data).to_str().unwrap() }; - let query_string = - reqwest::Url::parse(&format!("http://nothing.com?{}", post_data)).unwrap(); - client + let post_data = + unsafe { std::ffi::CStr::from_ptr(c_post_data).to_str().unwrap() }.to_string(); + let content_type = + unsafe { std::ffi::CStr::from_ptr(c_content_type).to_str().unwrap() }.to_string(); + WEB_CLIENT .post(url) - .query( - &query_string - .query_pairs() - .into_owned() - .collect::>(), - ) + .body(post_data) + .header(reqwest::header::CONTENT_TYPE, content_type) .send() } else { - client.get(url).send() + WEB_CLIENT.get(url).send() }; let callback = c_callback.addr(); let callback_data = c_callback_data.addr(); diff --git a/src/savestates.rs b/src/savestates.rs index 3e9a165..b68047e 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -96,12 +96,17 @@ pub fn create_savestate(device: &device::Device) { "Savestate created in slot {}", device.ui.storage.save_state_slot ), + false, ); } pub fn load_savestate(device: &mut device::Device) { if retroachievements::get_hardcore() { - ui::video::onscreen_message(&device.ui, "Cannot load savestate in RA hardcore mode"); + ui::video::onscreen_message( + &device.ui, + "Cannot load savestate in RA hardcore mode", + false, + ); return; } let savestate = std::fs::read(&device.ui.storage.paths.savestate_file_path); @@ -217,6 +222,7 @@ pub fn load_savestate(device: &mut device::Device) { "Savestate loaded from slot {}", device.ui.storage.save_state_slot ), + false, ); } else { ui::video::onscreen_message( @@ -225,6 +231,7 @@ pub fn load_savestate(device: &mut device::Device) { "Failed to load savestate from slot {}", device.ui.storage.save_state_slot ), + false, ); } } else { @@ -234,6 +241,7 @@ pub fn load_savestate(device: &mut device::Device) { "Could not find savestate in slot {}", device.ui.storage.save_state_slot ), + false, ); } } diff --git a/src/ui/audio.rs b/src/ui/audio.rs index f916385..38f53b4 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -53,7 +53,11 @@ pub fn lower_audio_volume(ui: &mut ui::Ui) { } sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.audio_stream, ui.audio.gain); } - ui::video::onscreen_message(ui, &format!("Audio volume: {:.0}%", ui.audio.gain * 100.0)); + ui::video::onscreen_message( + ui, + &format!("Audio volume: {:.0}%", ui.audio.gain * 100.0), + false, + ); } pub fn raise_audio_volume(ui: &mut ui::Ui) { @@ -64,7 +68,11 @@ pub fn raise_audio_volume(ui: &mut ui::Ui) { } sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.audio_stream, ui.audio.gain); } - ui::video::onscreen_message(ui, &format!("Audio volume: {:.0}%", ui.audio.gain * 100.0)); + ui::video::onscreen_message( + ui, + &format!("Audio volume: {:.0}%", ui.audio.gain * 100.0), + false, + ); } fn adjust_audio_frequency(device: &device::Device, frequency: f32) { diff --git a/src/ui/video.rs b/src/ui/video.rs index 797dac3..90c1fee 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -183,7 +183,8 @@ pub fn check_callback(device: &mut device::Device) -> (bool, bool) { if device.ui.storage.save_state_slot != callback.save_state_slot { onscreen_message( &device.ui, - &format!("Switching savestate slot to {}", callback.save_state_slot,), + &format!("Switching savestate slot to {}", callback.save_state_slot), + false, ); device.ui.storage.save_state_slot = callback.save_state_slot; device @@ -215,8 +216,13 @@ pub fn check_framebuffers(address: u32, length: u32) { unsafe { rdp_check_framebuffers(address, length) } } -pub fn onscreen_message(_ui: &ui::Ui, message: &str) { - unsafe { rdp_onscreen_message(std::ffi::CString::new(message).unwrap().as_ptr()) }; +pub fn onscreen_message(_ui: &ui::Ui, message: &str, long_message: bool) { + unsafe { + rdp_onscreen_message( + std::ffi::CString::new(message).unwrap().as_ptr(), + long_message, + ) + }; } pub fn draw_text( From 20bad48894d2b4ae51e25ec2e04bde06b17aa0f0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 15 Apr 2026 13:10:15 +0200 Subject: [PATCH 0761/1117] store C strings in vars (#747) --- src/retroachievements.rs | 16 ++++++---------- src/ui/video.rs | 17 ++++++----------- 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/src/retroachievements.rs b/src/retroachievements.rs index e4923fc..a55cf1d 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -293,22 +293,18 @@ pub fn get_hardcore() -> bool { pub fn login_user(username: String, password: String, tx: tokio::sync::oneshot::Sender) { unsafe { let tx_ptr = Box::into_raw(Box::new(tx)) as *mut std::ffi::c_void; - ra_login_user( - std::ffi::CString::new(username).unwrap().as_ptr(), - std::ffi::CString::new(password).unwrap().as_ptr(), - tx_ptr, - ) + let c_username = std::ffi::CString::new(username).unwrap(); + let c_password = std::ffi::CString::new(password).unwrap(); + ra_login_user(c_username.as_ptr(), c_password.as_ptr(), tx_ptr) }; } pub fn login_token_user(username: String, token: String, tx: tokio::sync::oneshot::Sender) { unsafe { let tx_ptr = Box::into_raw(Box::new(tx)) as *mut std::ffi::c_void; - ra_login_token_user( - std::ffi::CString::new(username).unwrap().as_ptr(), - std::ffi::CString::new(token).unwrap().as_ptr(), - tx_ptr, - ) + let c_username = std::ffi::CString::new(username).unwrap(); + let c_token = std::ffi::CString::new(token).unwrap(); + ra_login_token_user(c_username.as_ptr(), c_token.as_ptr(), tx_ptr) }; } diff --git a/src/ui/video.rs b/src/ui/video.rs index 90c1fee..95074b7 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -57,9 +57,10 @@ pub fn init(device: &mut device::Device) { } unsafe { sdl3_sys::everything::SDL_HideCursor(); + let hint = std::ffi::CString::new("1").unwrap(); sdl3_sys::everything::SDL_SetHint( sdl3_sys::everything::SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, - std::ffi::CString::new("1").unwrap().as_ptr(), + hint.as_ptr(), ); } @@ -218,10 +219,8 @@ pub fn check_framebuffers(address: u32, length: u32) { pub fn onscreen_message(_ui: &ui::Ui, message: &str, long_message: bool) { unsafe { - rdp_onscreen_message( - std::ffi::CString::new(message).unwrap().as_ptr(), - long_message, - ) + let c_message = std::ffi::CString::new(message).unwrap(); + rdp_onscreen_message(c_message.as_ptr(), long_message) }; } @@ -235,12 +234,8 @@ pub fn draw_text( let (mut w, mut h) = (0, 0); sdl3_sys::render::SDL_GetRenderOutputSize(renderer, &mut w, &mut h); - let ttf_text = sdl3_ttf_sys::ttf::TTF_CreateText( - text_engine, - font, - std::ffi::CString::new(text).unwrap().as_ptr(), - 0, - ); + let c_text = std::ffi::CString::new(text).unwrap(); + let ttf_text = sdl3_ttf_sys::ttf::TTF_CreateText(text_engine, font, c_text.as_ptr(), 0); sdl3_sys::everything::SDL_RenderClear(renderer); sdl3_ttf_sys::ttf::TTF_DrawRendererText(ttf_text, 20.0, h as f32 / 2.0); From 451d66beee78d25cb009892173219389f5ec0ca4 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 15 Apr 2026 13:25:04 +0200 Subject: [PATCH 0762/1117] video code cleanup (#748) --- src/ui/video.rs | 71 +++++++++++++++++++++++-------------------------- 1 file changed, 34 insertions(+), 37 deletions(-) diff --git a/src/ui/video.rs b/src/ui/video.rs index 95074b7..9109bd0 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -2,6 +2,31 @@ include!(concat!(env!("OUT_DIR"), "/parallel_bindings.rs")); use crate::{device, retroachievements, ui}; +const PAL_WIDESCREEN_WIDTH: i32 = 512; +const PAL_STANDARD_WIDTH: i32 = 384; +const PAL_HEIGHT: i32 = 288; +const NTSC_WIDESCREEN_WIDTH: i32 = 426; +const NTSC_STANDARD_WIDTH: i32 = 320; +const NTSC_HEIGHT: i32 = 240; + +fn build_gfx_info(device: &mut device::Device) -> GFX_INFO { + GFX_INFO { + RDRAM: device.rdram.mem.as_mut_ptr(), + DMEM: device.rsp.mem.as_mut_ptr(), + RDRAM_SIZE: device.rdram.size, + DPC_CURRENT_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_CURRENT_REG as usize], + DPC_START_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_START_REG as usize], + DPC_END_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_END_REG as usize], + DPC_STATUS_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_STATUS_REG as usize], + PAL: device.cart.pal, + widescreen: device.ui.config.video.widescreen, + fullscreen: device.ui.video.fullscreen, + integer_scaling: device.ui.config.video.integer_scaling, + upscale: device.ui.config.video.upscale, + crt: device.ui.config.video.crt, + } +} + pub fn init(device: &mut device::Device) { ui::sdl_init(sdl3_sys::init::SDL_INIT_VIDEO); ui::ttf_init(); @@ -25,18 +50,18 @@ pub fn init(device: &mut device::Device) { }; if device.cart.pal { window_width = if device.ui.config.video.widescreen { - 512 * scale + PAL_WIDESCREEN_WIDTH * scale } else { - 384 * scale + PAL_STANDARD_WIDTH * scale }; - window_height = 288 * scale; + window_height = PAL_HEIGHT * scale; } else { window_width = if device.ui.config.video.widescreen { - 426 * scale + NTSC_WIDESCREEN_WIDTH * scale } else { - 320 * scale + NTSC_STANDARD_WIDTH * scale }; - window_height = 240 * scale; + window_height = NTSC_HEIGHT * scale; } device.ui.video.window = unsafe { sdl3_sys::video::SDL_CreateWindow(window_title.as_ptr(), window_width, window_height, flags) @@ -64,21 +89,7 @@ pub fn init(device: &mut device::Device) { ); } - let gfx_info = GFX_INFO { - RDRAM: device.rdram.mem.as_mut_ptr(), - DMEM: device.rsp.mem.as_mut_ptr(), - RDRAM_SIZE: device.rdram.size, - DPC_CURRENT_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_CURRENT_REG as usize], - DPC_START_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_START_REG as usize], - DPC_END_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_END_REG as usize], - DPC_STATUS_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_STATUS_REG as usize], - PAL: device.cart.pal, - widescreen: device.ui.config.video.widescreen, - fullscreen: device.ui.video.fullscreen, - integer_scaling: device.ui.config.video.integer_scaling, - upscale: device.ui.config.video.upscale, - crt: device.ui.config.video.crt, - }; + let gfx_info = build_gfx_info(device); unsafe { let font_bytes = include_bytes!("../../data/RobotoMono-Regular.ttf"); @@ -116,21 +127,7 @@ pub fn save_state(rdp_state: *mut u8) { } pub fn load_state(device: &mut device::Device, rdp_state: *const u8) { - let gfx_info = GFX_INFO { - RDRAM: device.rdram.mem.as_mut_ptr(), - DMEM: device.rsp.mem.as_mut_ptr(), - RDRAM_SIZE: device.rdram.size, - DPC_CURRENT_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_CURRENT_REG as usize], - DPC_START_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_START_REG as usize], - DPC_END_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_END_REG as usize], - DPC_STATUS_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_STATUS_REG as usize], - PAL: device.cart.pal, - widescreen: device.ui.config.video.widescreen, - fullscreen: device.ui.video.fullscreen, - integer_scaling: device.ui.config.video.integer_scaling, - upscale: device.ui.config.video.upscale, - crt: device.ui.config.video.crt, - }; + let gfx_info = build_gfx_info(device); unsafe { rdp_new_processor(gfx_info); rdp_load_state(rdp_state); @@ -193,7 +190,7 @@ pub fn check_callback(device: &mut device::Device) -> (bool, bool) { .storage .paths .savestate_file_path - .set_extension("state".to_owned() + callback.save_state_slot.to_string().as_str()); + .set_extension(format!("state{}", callback.save_state_slot)); } if callback.lower_volume { ui::audio::lower_audio_volume(&mut device.ui); From d2e47509b24bfe970ec59d39dfc7123199bfe6a1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 15 Apr 2026 13:39:49 +0200 Subject: [PATCH 0763/1117] remove unused param (#749) --- src/cheats.rs | 2 +- src/device/controller.rs | 6 +++--- src/device/cpu.rs | 6 +----- src/device/exceptions.rs | 2 +- src/device/vi.rs | 2 +- src/netplay.rs | 9 ++++----- src/savestates.rs | 10 +--------- src/ui/audio.rs | 2 -- src/ui/video.rs | 3 +-- 9 files changed, 13 insertions(+), 29 deletions(-) diff --git a/src/cheats.rs b/src/cheats.rs index 88cc730..55648ac 100644 --- a/src/cheats.rs +++ b/src/cheats.rs @@ -71,7 +71,7 @@ pub fn init( if !device.cheats.cheats.is_empty() { device.cheats.enabled = true; - ui::video::onscreen_message(&device.ui, "Cheats enabled", false); + ui::video::onscreen_message("Cheats enabled", false); } } diff --git a/src/device/controller.rs b/src/device/controller.rs index f8a4134..322dee6 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -190,21 +190,21 @@ pub fn pak_switch_event(device: &mut device::Device) { write: device::controller::mempak::write, pak_type: new_pak_type, }); - ui::video::onscreen_message(&device.ui, "MemPak selected", false); + ui::video::onscreen_message("MemPak selected", false); } else if new_pak_type == PakType::RumblePak { channel.pak_handler = Some(device::controller::PakHandler { read: device::controller::rumble::read, write: device::controller::rumble::write, pak_type: new_pak_type, }); - ui::video::onscreen_message(&device.ui, "RumblePak selected", false); + ui::video::onscreen_message("RumblePak selected", false); } else if new_pak_type == PakType::TransferPak { channel.pak_handler = Some(device::controller::PakHandler { read: device::controller::transferpak::read, write: device::controller::transferpak::write, pak_type: new_pak_type, }); - ui::video::onscreen_message(&device.ui, "TransferPak selected", false); + ui::video::onscreen_message("TransferPak selected", false); } channel.change_pak = PakType::None; } diff --git a/src/device/cpu.rs b/src/device/cpu.rs index 55f46bd..1cd59eb 100644 --- a/src/device/cpu.rs +++ b/src/device/cpu.rs @@ -227,11 +227,7 @@ pub fn init(device: &mut device::Device) { device.cpu.clock_rate = if !device.cpu.overclock { 93750000 } else { - ui::video::onscreen_message( - &device.ui, - "Overclocking enabled, setting clock rate to 125 MHz", - false, - ); + ui::video::onscreen_message("Overclocking enabled, setting clock rate to 125 MHz", false); 125000000 }; diff --git a/src/device/exceptions.rs b/src/device/exceptions.rs index 215ca7b..38fdc67 100644 --- a/src/device/exceptions.rs +++ b/src/device/exceptions.rs @@ -166,7 +166,7 @@ pub fn reset_event(device: &mut device::Device) { device::pif::reset_pif(device, true); - ui::video::onscreen_message(&device.ui, "Game reset", false); + ui::video::onscreen_message("Game reset", false); } fn exception_general(device: &mut device::Device, vector_offset: u32) { diff --git a/src/device/vi.rs b/src/device/vi.rs index 0c4ec1c..b75723b 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -151,7 +151,7 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { if device.netplay.is_none() && paused { if retroachievements::get_hardcore() { - ui::video::onscreen_message(&device.ui, "Cannot pause in RA hardcore mode", false); + ui::video::onscreen_message("Cannot pause in RA hardcore mode", false); } else { ui::video::pause_loop(device.vi.frame_time); } diff --git a/src/netplay.rs b/src/netplay.rs index 6c28c86..b0a64c5 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -135,7 +135,7 @@ pub fn get_input(device: &mut device::Device, channel: usize) -> ui::input::Inpu let timeout = std::time::Instant::now() + std::time::Duration::from_secs(10); let mut request_timer = std::time::Instant::now() - std::time::Duration::from_millis(5); while input.is_none() { - process_incoming(netplay, &device.ui); // we execute process_incoming before request_input so that we send an accurate buffer count + process_incoming(netplay); // we execute process_incoming before request_input so that we send an accurate buffer count if std::time::Instant::now() > request_timer { // sends a request packet every 5ms request_input(netplay, channel); @@ -146,7 +146,7 @@ pub fn get_input(device: &mut device::Device, channel: usize) -> ui::input::Inpu .remove(&netplay.player_data[channel].count); if std::time::Instant::now() > timeout { - ui::video::onscreen_message(&device.ui, "Lost connection to netplay server", false); + ui::video::onscreen_message("Lost connection to netplay server", false); input = Some(InputEvent { input: 0, plugin: 0, @@ -177,7 +177,7 @@ fn request_input(netplay: &Netplay, channel: usize) { netplay.udp_socket.send(&request).unwrap(); } -fn process_incoming(netplay: &mut Netplay, ui: &ui::Ui) { +fn process_incoming(netplay: &mut Netplay) { let mut buf: [u8; 1024] = [0; 1024]; while let Ok(_incoming) = netplay.udp_socket.recv(&mut buf) { match buf[0] { @@ -191,13 +191,12 @@ fn process_incoming(netplay: &mut Netplay, ui: &ui::Ui) { } if current_status != netplay.status { if ((current_status & 0x1) ^ (netplay.status & 0x1)) != 0 { - ui::video::onscreen_message(ui, "Netplay desync detected", true); + ui::video::onscreen_message("Netplay desync detected", true); } for dis in 1..5 { if ((current_status & (0x1 << dis)) ^ (netplay.status & (0x1 << dis))) != 0 { ui::video::onscreen_message( - ui, &format!("Player {dis} disconnected"), false, ); diff --git a/src/savestates.rs b/src/savestates.rs index b68047e..2e42c2b 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -91,7 +91,6 @@ pub fn create_savestate(device: &device::Device) { tokio::fs::write(save_path, compressed_file).await.unwrap(); }); ui::video::onscreen_message( - &device.ui, &format!( "Savestate created in slot {}", device.ui.storage.save_state_slot @@ -102,11 +101,7 @@ pub fn create_savestate(device: &device::Device) { pub fn load_savestate(device: &mut device::Device) { if retroachievements::get_hardcore() { - ui::video::onscreen_message( - &device.ui, - "Cannot load savestate in RA hardcore mode", - false, - ); + ui::video::onscreen_message("Cannot load savestate in RA hardcore mode", false); return; } let savestate = std::fs::read(&device.ui.storage.paths.savestate_file_path); @@ -217,7 +212,6 @@ pub fn load_savestate(device: &mut device::Device) { } ui::video::onscreen_message( - &device.ui, &format!( "Savestate loaded from slot {}", device.ui.storage.save_state_slot @@ -226,7 +220,6 @@ pub fn load_savestate(device: &mut device::Device) { ); } else { ui::video::onscreen_message( - &device.ui, &format!( "Failed to load savestate from slot {}", device.ui.storage.save_state_slot @@ -236,7 +229,6 @@ pub fn load_savestate(device: &mut device::Device) { } } else { ui::video::onscreen_message( - &device.ui, &format!( "Could not find savestate in slot {}", device.ui.storage.save_state_slot diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 38f53b4..f474f49 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -54,7 +54,6 @@ pub fn lower_audio_volume(ui: &mut ui::Ui) { sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.audio_stream, ui.audio.gain); } ui::video::onscreen_message( - ui, &format!("Audio volume: {:.0}%", ui.audio.gain * 100.0), false, ); @@ -69,7 +68,6 @@ pub fn raise_audio_volume(ui: &mut ui::Ui) { sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.audio_stream, ui.audio.gain); } ui::video::onscreen_message( - ui, &format!("Audio volume: {:.0}%", ui.audio.gain * 100.0), false, ); diff --git a/src/ui/video.rs b/src/ui/video.rs index 9109bd0..56a7c05 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -180,7 +180,6 @@ pub fn check_callback(device: &mut device::Device) -> (bool, bool) { if device.ui.storage.save_state_slot != callback.save_state_slot { onscreen_message( - &device.ui, &format!("Switching savestate slot to {}", callback.save_state_slot), false, ); @@ -214,7 +213,7 @@ pub fn check_framebuffers(address: u32, length: u32) { unsafe { rdp_check_framebuffers(address, length) } } -pub fn onscreen_message(_ui: &ui::Ui, message: &str, long_message: bool) { +pub fn onscreen_message(message: &str, long_message: bool) { unsafe { let c_message = std::ffi::CString::new(message).unwrap(); rdp_onscreen_message(c_message.as_ptr(), long_message) From 40e250386edd51755d8dd2e0543623af6b464c8f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 15 Apr 2026 13:54:27 +0200 Subject: [PATCH 0764/1117] add note about strange char* comparison (#750) * add note about strange char* comparison * more --- retroachievements/retroachievements.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index 5b20a10..603ac93 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -239,6 +239,10 @@ static const char *get_leaderboard_title(const char *display) { for (uint32_t i = 0; i < g_leaderboard_list->num_buckets; i++) { for (uint32_t j = 0; j < g_leaderboard_list->buckets[i].num_leaderboards; j++) { + // this looks like a mistake, but it is intentional. + // Leaderboard trackers don't contain the title, + // but we take advantage of the fact that tracker_value and display point + // to the same char* to find a matching leaderboard. if (g_leaderboard_list->buckets[i].leaderboards[j]->tracker_value == display) { return g_leaderboard_list->buckets[i].leaderboards[j]->title; From 7100750e2dcd910dd036c92ead34c887c6e95da6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 15 Apr 2026 16:02:34 +0200 Subject: [PATCH 0765/1117] show proper error on failed login (#751) * show proper error on failed login * more --- src/retroachievements.rs | 16 +++++++++++++--- src/ui/gui.rs | 5 ++++- src/ui/netplay.rs | 1 + 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/retroachievements.rs b/src/retroachievements.rs index a55cf1d..25571cd 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -313,15 +313,25 @@ pub fn is_user_logged_in() -> bool { } pub fn get_username() -> &'static str { - unsafe { - std::ffi::CStr::from_ptr(ra_get_username()) + let c_username = unsafe { ra_get_username() }; + if c_username.is_null() { + "unknown" + } else { + unsafe { std::ffi::CStr::from_ptr(c_username) } .to_str() .unwrap() } } pub fn get_token() -> &'static str { - unsafe { std::ffi::CStr::from_ptr(ra_get_token()).to_str().unwrap() } + let c_token = unsafe { ra_get_token() }; + if c_token.is_null() { + "unknown" + } else { + unsafe { std::ffi::CStr::from_ptr(c_token) } + .to_str() + .unwrap() + } } pub fn state_size() -> usize { diff --git a/src/ui/gui.rs b/src/ui/gui.rs index fe84e3c..ea7badd 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -32,6 +32,7 @@ pub struct GameSettings { } pub struct RASettings { + pub enabled: bool, pub hardcore: bool, pub challenge: bool, pub leaderboard: bool, @@ -360,7 +361,7 @@ pub fn run_rom( "--cheats", cheats_path.to_str().unwrap(), ]); - } else if retroachievements::is_user_logged_in() { + } else if ra_settings.enabled { command.args([ "--ra-username", retroachievements::get_username(), @@ -445,6 +446,7 @@ fn open_rom(app: &AppWindow) { let overclock = app.get_overclock_n64_cpu(); let disable_expansion_pak = app.get_disable_expansion_pak(); + let ra_enabled = app.get_ra_enabled(); let ra_hardcore = app.get_ra_hardcore(); let ra_challenge = app.get_ra_challenge(); let ra_leaderboard = app.get_ra_leaderboard(); @@ -479,6 +481,7 @@ fn open_rom(app: &AppWindow) { }, None, RASettings { + enabled: ra_enabled, hardcore: ra_hardcore, challenge: ra_challenge, leaderboard: ra_leaderboard, diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 7eafc3d..c341d31 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -1108,6 +1108,7 @@ fn setup_wait_window( player_number: player_number as u8, }), RASettings { + enabled: false, hardcore: false, challenge: false, leaderboard: false, From 093b39b17d556facbc0b663ecaf336f0109106ca Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 15 Apr 2026 19:00:39 +0200 Subject: [PATCH 0766/1117] Improve netplay RA guard (#752) * remove double guard for netplay+RA * more * more --- src/ui/gui.rs | 4 +++- src/ui/netplay.rs | 36 +++++++++++++++++++++++++++++------- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index ea7badd..86a0771 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -31,6 +31,7 @@ pub struct GameSettings { pub load_savestate_slot: Option, } +#[derive(Clone)] pub struct RASettings { pub enabled: bool, pub hardcore: bool, @@ -361,7 +362,8 @@ pub fn run_rom( "--cheats", cheats_path.to_str().unwrap(), ]); - } else if ra_settings.enabled { + } + if ra_settings.enabled { command.args([ "--ra-username", retroachievements::get_username(), diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index c341d31..80aedb8 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -252,6 +252,7 @@ fn show_custom_url_dialog(weak: slint::Weak, server_url: slint::S pub fn setup_create_window( create_window: &NetplayCreate, game_settings: GameSettings, + ra_settings: RASettings, rom_dir: slint::SharedString, weak_app: slint::Weak, ) { @@ -307,6 +308,7 @@ pub fn setup_create_window( let game_settings = game_settings.clone(); let weak = weak.clone(); let weak_app = weak_app.clone(); + let ra_settings = ra_settings.clone(); tokio::spawn(async move { let response = task.await; weak_dialog @@ -338,6 +340,7 @@ pub fn setup_create_window( game_cheats.to_string(), password.to_string(), game_settings, + ra_settings, weak_app, weak.clone(), ); @@ -367,6 +370,7 @@ pub fn setup_create_window( game_cheats.to_string(), password.to_string(), game_settings.clone(), + ra_settings.clone(), weak_app.clone(), weak.clone(), ); @@ -621,6 +625,7 @@ fn create_session( game_cheats: String, password: String, game_settings: GameSettings, + ra_settings: RASettings, weak_app: slint::Weak, weak: slint::Weak, ) { @@ -715,6 +720,7 @@ fn create_session( cheats: serde_json::from_str(cheats).unwrap(), load_savestate_slot: None, }, + ra_settings, handle.get_peer_addr(), weak_app, ); @@ -753,6 +759,7 @@ fn join_session( game_hash: String, password: String, room_port: i32, + ra_settings: RASettings, weak_app: slint::Weak, weak: slint::Weak, ) { @@ -836,6 +843,7 @@ fn join_session( cheats: serde_json::from_str(cheats).unwrap(), load_savestate_slot: None, }, + ra_settings, handle.get_peer_addr(), weak_app, ); @@ -876,6 +884,7 @@ fn setup_wait_window( player_name: slint::SharedString, port: i32, game_settings: GameSettings, + ra_settings: RASettings, peer_addr: slint::SharedString, weak_app: slint::Weak, ) { @@ -1107,12 +1116,7 @@ fn setup_wait_window( peer_addr: socket_addr, player_number: player_number as u8, }), - RASettings { - enabled: false, - hardcore: false, - challenge: false, - leaderboard: false, - }, + ra_settings, weak_app, ); }) @@ -1155,6 +1159,7 @@ fn setup_wait_window( pub fn setup_join_window( join_window: &NetplayJoin, rom_dir: slint::SharedString, + ra_settings: RASettings, weak_app: slint::Weak, ) { let (netplay_read_sender, netplay_read_receiver): ( @@ -1202,6 +1207,7 @@ pub fn setup_join_window( game_hash.to_string(), password.to_string(), room_port, + ra_settings.clone(), weak_app.clone(), weak.clone(), ); @@ -1230,6 +1236,12 @@ pub fn netplay_window(app: &AppWindow, controller_paths: &[Option]) { cheats: std::collections::HashMap::new(), // not used here load_savestate_slot: None, }, + RASettings { + enabled: handle.get_ra_enabled(), + hardcore: handle.get_ra_hardcore(), + challenge: handle.get_ra_challenge(), + leaderboard: handle.get_ra_leaderboard(), + }, handle.get_rom_dir(), weak_app, ); @@ -1247,7 +1259,17 @@ pub fn netplay_window(app: &AppWindow, controller_paths: &[Option]) { .upgrade_in_event_loop(move |handle| { let join_window = NetplayJoin::new().unwrap(); save_settings(&handle, &controller_paths); - setup_join_window(&join_window, handle.get_rom_dir(), weak_app); + setup_join_window( + &join_window, + handle.get_rom_dir(), + RASettings { + enabled: handle.get_ra_enabled(), + hardcore: handle.get_ra_hardcore(), + challenge: handle.get_ra_challenge(), + leaderboard: handle.get_ra_leaderboard(), + }, + weak_app, + ); }) .unwrap(); }); From 8dadbbbf58923616e3f49f568356c4d9ed06c061 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 16 Apr 2026 11:09:09 +0200 Subject: [PATCH 0767/1117] update slint to 1.16.0 (#755) --- Cargo.lock | 479 +++++++++++++++++++++++++++++------------------------ Cargo.toml | 2 +- build.rs | 2 +- 3 files changed, 269 insertions(+), 214 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d891598..536223e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -916,9 +916,9 @@ dependencies = [ [[package]] name = "const-field-offset" -version = "0.1.5" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fcde4ca1211b5a94b573083c472ee19e86b19a441913f66e1cc5c41daf0255" +checksum = "9713489fbc45a2d113f58d17448c73115d533ed27fd2f2d0e5e5c69663eaf19b" dependencies = [ "const-field-offset-macro", "field-offset", @@ -926,9 +926,9 @@ dependencies = [ [[package]] name = "const-field-offset-macro" -version = "0.1.5" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5387f5bbc9e9e6c96436ea125afa12614cebf8ac67f49abc08c1e7a891466c90" +checksum = "9b5dc851b7ea80cc4f69aa28632385ffd3e0f88014d53db3f2e5a781896ca783" dependencies = [ "proc-macro2", "quote", @@ -1607,6 +1607,15 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "font-types" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b38ad915f6dadd993ced50848a8291a543bd41ca62bc10740d5e64e2ab4cfd7" +dependencies = [ + "bytemuck", +] + [[package]] name = "fontdb" version = "0.23.0" @@ -1616,40 +1625,28 @@ dependencies = [ "log", "slotmap", "tinyvec", - "ttf-parser 0.25.1", -] - -[[package]] -name = "fontdue" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e57e16b3fe8ff4364c0661fdaac543fb38b29ea9bc9c2f45612d90adf931d2b" -dependencies = [ - "hashbrown 0.15.5", - "rayon", - "ttf-parser 0.21.1", + "ttf-parser", ] [[package]] name = "fontique" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bbc252c93499b6d3635d692f892a637db0dbb130ce9b32bf20b28e0dcc470b" +checksum = "23358480a54a886d51b306718d5ca743fdfe238e5df38ef650f4e72f29c5d9e9" dependencies = [ - "bytemuck", "hashbrown 0.16.1", - "icu_locale_core", "linebender_resource_handle", "memmap2", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-text", "objc2-foundation 0.3.2", - "read-fonts", + "parlance", + "read-fonts 0.37.0", "roxmltree", "smallvec", - "windows 0.58.0", - "windows-core 0.58.0", + "windows", + "windows-core", "yeslogic-fontconfig-sys", ] @@ -1919,9 +1916,9 @@ checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "glow" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" +checksum = "29038e1c483364cc6bb3cf78feee1816002e127c331a1eec55a4d202b9e1adb5" dependencies = [ "js-sys", "slotmap", @@ -2032,6 +2029,12 @@ dependencies = [ "zip", ] +[[package]] +name = "grid" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9e2d4c0a8296178d8802098410ca05d86b17a10bb5ab559b3fb404c1f948220" + [[package]] name = "h2" version = "0.4.13" @@ -2064,14 +2067,14 @@ dependencies = [ [[package]] name = "harfrust" -version = "0.3.2" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92c020db12c71d8a12a3fe7607873cade3a01a6287e29d540c8723276221b9d8" +checksum = "9da2e5ae821f6e96664977bf974d6d6a2d6682f9ccee23e62ec1d134246845f9" dependencies = [ "bitflags 2.11.0", "bytemuck", "core_maths", - "read-fonts", + "read-fonts 0.37.0", "smallvec", ] @@ -2096,10 +2099,7 @@ version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ - "allocator-api2", - "equivalent", "foldhash 0.1.5", - "rayon", ] [[package]] @@ -2279,9 +2279,9 @@ dependencies = [ [[package]] name = "i-slint-backend-linuxkms" -version = "1.15.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b8827952ecfbbf76c8cb5bc3388ca9124c34f2b4fe5dffcfe57800d2a484885" +checksum = "580bb55cd14cb12bd9169920661235797f4c8220318d0071e971fce345e28488" dependencies = [ "calloop 0.14.4", "drm", @@ -2299,9 +2299,9 @@ dependencies = [ [[package]] name = "i-slint-backend-selector" -version = "1.15.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce5a7e591a7257096e1f3da1bbb9ad6a140c307d0eee74f008a0b412fdb20dec" +checksum = "0ed4d0e693f83dbe68fea69b8ebebda8b245f34350d83e5f8fd62c0333d938b8" dependencies = [ "cfg-if", "i-slint-backend-linuxkms", @@ -2313,9 +2313,9 @@ dependencies = [ [[package]] name = "i-slint-backend-winit" -version = "1.15.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbbf4789191740f939c9563b8850379122d7b5c1ceb09f9297b50ad53e408787" +checksum = "90f7fddf48d12b366f352f8fb78d59665c490cf279786772f1d1592e143edd0d" dependencies = [ "block2 0.6.2", "cfg-if", @@ -2345,32 +2345,37 @@ dependencies = [ "vtable", "wasm-bindgen", "web-sys", - "windows 0.62.2", + "webbrowser", + "windows", "winit", "zbus", ] [[package]] name = "i-slint-common" -version = "1.15.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7659797fd28d4df3ed275ff95bf730bdf4a88d253f07e1ee8d0032d70138c3a" +checksum = "0f44bc19b68be0295354769bc456ccca1c8cb5a38c4cbb5566b0b3fdb918921b" dependencies = [ + "derive_more", "fontique", - "ttf-parser 0.25.1", + "htmlparser", + "pulldown-cmark", + "skrifa 0.40.0", ] [[package]] name = "i-slint-compiler" -version = "1.15.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a6f358d0d5389869d67cd6ab6f5acf98fe31827264a696593e9687213cff682" +checksum = "dba63c5a2774a878478572a0b48b2af4895323d1dc969432c690362f0ab67d5c" dependencies = [ "annotate-snippets", "by_address", + "data-url", "derive_more", - "fontdue", "i-slint-common", + "icu_normalizer", "image", "itertools 0.14.0", "linked_hash_set", @@ -2383,17 +2388,20 @@ dependencies = [ "resvg", "rowan", "rspolib", + "skrifa 0.40.0", "smol_str 0.3.6", "strum", + "swash", "typed-index-collections", + "unicode-segmentation", "url", ] [[package]] name = "i-slint-core" -version = "1.15.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a95591ff85f8e2ff11c8d26ea8429768c2b77866e0c7e7fd49348f23ad108b5c" +checksum = "8bac8ed92f61140aa03e426b28cd135e252c82891bc1ed88f2f799ba367f21c8" dependencies = [ "auto_enums", "bitflags 2.11.0", @@ -2403,9 +2411,9 @@ dependencies = [ "const-field-offset", "derive_more", "euclid", - "htmlparser", "i-slint-common", "i-slint-core-macros", + "icu_normalizer", "image", "lyon_algorithms", "lyon_extra", @@ -2417,17 +2425,17 @@ dependencies = [ "pin-project", "pin-weak", "portable-atomic", - "pulldown-cmark", "raw-window-handle", "resvg", "rgb", "scoped-tls-hkt", "scopeguard", - "skrifa", + "skrifa 0.40.0", "slab", "strum", + "swash", "sys-locale", - "thiserror 2.0.18", + "taffy", "unicode-linebreak", "unicode-script", "unicode-segmentation", @@ -2439,9 +2447,9 @@ dependencies = [ [[package]] name = "i-slint-core-macros" -version = "1.15.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cc5f2f71682787dd5c6299555c0de635009eb269bbc54d6198e0d225b69fae4" +checksum = "315b38ab2265294fedd11a578468ab146fd579a5765d68d42824a060a4772fc4" dependencies = [ "quote", "serde_json", @@ -2450,13 +2458,14 @@ dependencies = [ [[package]] name = "i-slint-renderer-skia" -version = "1.15.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a64546232c0370f291e65fc92a4f4fc777ea78d5f48467873cb968b1de52e9ab" +checksum = "9cd39e5a129ba4c30d18159c344e756e81d4ea2d0ab3dc5c9834d47339d3e580" dependencies = [ "bytemuck", "cfg-if", "cfg_aliases", + "clru", "const-field-offset", "derive_more", "glow", @@ -2474,33 +2483,33 @@ dependencies = [ "pin-weak", "raw-window-handle", "raw-window-metal", - "read-fonts", + "read-fonts 0.37.0", "scoped-tls-hkt", "skia-safe", "softbuffer", "unicode-segmentation", "vtable", - "windows 0.62.2", + "windows", "write-fonts", ] [[package]] name = "i-slint-renderer-software" -version = "1.15.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a59be6c34935c4f8e41aa67a63518d5c59219c8eeb1d07af420bed8334fa31d7" +checksum = "6a8fa9e24ad40900de052eda07ee1dbbe0d66efcb25742d81296b1ba9d28c9d0" dependencies = [ "bytemuck", "clru", "derive_more", "euclid", - "fontdue", "i-slint-common", "i-slint-core", "integer-sqrt", "lyon_path", "num-traits", - "skrifa", + "skrifa 0.40.0", + "swash", "zeno", ] @@ -2516,7 +2525,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.62.2", + "windows-core", ] [[package]] @@ -2541,6 +2550,21 @@ dependencies = [ "zerovec", ] +[[package]] +name = "icu_locale" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "532b11722e350ab6bf916ba6eb0efe3ee54b932666afec989465f9243fe6dd60" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_locale_data", + "icu_provider", + "potential_utf", + "tinystr", + "zerovec", +] + [[package]] name = "icu_locale_core" version = "2.1.1" @@ -2555,6 +2579,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "icu_locale_data" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c5f1d16b4c3a2642d3a719f18f6b06070ab0aef246a6418130c955ae08aa831" + [[package]] name = "icu_normalizer" version = "2.1.1" @@ -2603,6 +2633,8 @@ checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", "icu_locale_core", + "serde", + "stable_deref_trait", "writeable", "yoke", "zerofrom", @@ -2610,6 +2642,27 @@ dependencies = [ "zerovec", ] +[[package]] +name = "icu_segmenter" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a807a7488f3f758629ae86d99d9d30dce24da2fb2945d74c80a4f4a62c71db73" +dependencies = [ + "icu_collections", + "icu_locale", + "icu_provider", + "icu_segmenter_data", + "potential_utf", + "utf8_iter", + "zerovec", +] + +[[package]] +name = "icu_segmenter_data" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ebbb7321d9e21d25f5660366cb6c08201d0175898a3a6f7a41ee9685af21c80" + [[package]] name = "id-arena" version = "2.3.0" @@ -2931,17 +2984,6 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" -[[package]] -name = "kurbo" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce9729cc38c18d86123ab736fd2e7151763ba226ac2490ec092d1dd148825e32" -dependencies = [ - "arrayvec", - "euclid", - "smallvec", -] - [[package]] name = "kurbo" version = "0.13.0" @@ -3254,9 +3296,9 @@ dependencies = [ [[package]] name = "muda" -version = "0.17.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c1738382f66ed56b3b9c8119e794a2e23148ac8ea214eda86622d4cb9d415a" +checksum = "b20e2339ef964849496bd6dab1bcd8ceb7a3a5a268dc64c8b84c833e75d66dab" dependencies = [ "crossbeam-channel", "dpi", @@ -3869,7 +3911,7 @@ version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b" dependencies = [ - "ttf-parser 0.25.1", + "ttf-parser", ] [[package]] @@ -3879,17 +3921,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] -name = "parley" -version = "0.7.0" +name = "parlance" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ada5338c3a9794af7342e6f765b6e78740db37378aced034d7bf72c96b94ed94" +checksum = "4b6937eda350acc1a5d05872c3cbf99fe78619c269096e2be3d4a350058639d5" + +[[package]] +name = "parley" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6c00ec192e1a402861526eff91a4b4690a2e5a17a4ae2deb772d72b49daf868" dependencies = [ "fontique", "harfrust", "hashbrown 0.16.1", + "icu_normalizer", + "icu_properties", + "icu_segmenter", "linebender_resource_handle", - "skrifa", - "swash", + "parlance", + "parley_data", + "skrifa 0.40.0", +] + +[[package]] +name = "parley_data" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "232313eddc02ac27f015e8f8eeb7facce8a896116df7e3eda1bfd9f600a9a39d" +dependencies = [ + "icu_properties", ] [[package]] @@ -4067,6 +4128,8 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ + "serde_core", + "writeable", "zerovec", ] @@ -4107,7 +4170,7 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.25.8+spec-1.1.0", + "toml_edit", ] [[package]] @@ -4403,10 +4466,20 @@ name = "read-fonts" version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6717cf23b488adf64b9d711329542ba34de147df262370221940dfabc2c91358" +dependencies = [ + "bytemuck", + "font-types 0.10.1", +] + +[[package]] +name = "read-fonts" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b634fabf032fab15307ffd272149b622260f55974d9fad689292a5d33df02e5" dependencies = [ "bytemuck", "core_maths", - "font-types", + "font-types 0.11.3", ] [[package]] @@ -4519,9 +4592,9 @@ dependencies = [ [[package]] name = "resvg" -version = "0.46.0" +version = "0.47.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b563218631706d614e23059436526d005b50ab5f2d506b55a17eb65c5eb83419" +checksum = "9be183ad6a216aa96f33e4c8033b0988b8b3ea6fd2359d19af5bac4643fd8e81" dependencies = [ "gif", "image-webp", @@ -4529,7 +4602,7 @@ dependencies = [ "pico-args", "rgb", "svgtypes", - "tiny-skia", + "tiny-skia 0.12.0", "usvg", "zune-jpeg", ] @@ -4763,7 +4836,7 @@ dependencies = [ "core_maths", "log", "smallvec", - "ttf-parser 0.25.1", + "ttf-parser", "unicode-bidi-mirroring", "unicode-ccc", "unicode-properties", @@ -4822,7 +4895,7 @@ dependencies = [ "log", "memmap2", "smithay-client-toolkit 0.19.2", - "tiny-skia", + "tiny-skia 0.11.4", ] [[package]] @@ -5112,7 +5185,7 @@ checksum = "6a71c01d325d40b1031dee67d251a5e0132e79e2a9ec272149a4f4a0d4b8b3be" dependencies = [ "bitflags 2.11.0", "skia-bindings", - "windows 0.62.2", + "windows", ] [[package]] @@ -5122,7 +5195,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c31071dedf532758ecf3fed987cdb4bd9509f900e026ab684b4ecb81ea49841" dependencies = [ "bytemuck", - "read-fonts", + "read-fonts 0.35.0", +] + +[[package]] +name = "skrifa" +version = "0.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fbdfe3d2475fbd7ddd1f3e5cf8288a30eb3e5f95832829570cd88115a7434ac" +dependencies = [ + "bytemuck", + "read-fonts 0.37.0", ] [[package]] @@ -5133,9 +5216,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "slint" -version = "1.15.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d25b87d458205e79efb30545cae083aec2ccb1b192c46a55ae6d54403cdacb33" +checksum = "364a1e8fae7f1969224acc59ba729f06aeaf808123796389eae458c396119ef0" dependencies = [ "const-field-offset", "i-slint-backend-selector", @@ -5153,22 +5236,22 @@ dependencies = [ [[package]] name = "slint-build" -version = "1.15.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "064ef470cc8ab046319db94d0727f080fbd05322d07d774eb6de607d97defb8d" +checksum = "ec94124d27a1b691fd8613c653bae47ece44cb469af11ce0edf645acf458ae61" dependencies = [ "derive_more", "fontique", "i-slint-compiler", "spin_on", - "toml_edit 0.24.1+spec-1.1.0", + "toml_edit", ] [[package]] name = "slint-macros" -version = "1.15.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ecc09bbc42c780d5b7ed7d41f7573dfd67343e11cdac27c07b88a8f933958e6" +checksum = "c2f2659f0896ccf5921a1b0af835c4d5285a3292bfcf36cb9bf9e4fbcbe874fc" dependencies = [ "i-slint-compiler", "proc-macro2", @@ -5386,18 +5469,18 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "strum" -version = "0.27.2" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" +checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd" dependencies = [ "strum_macros", ] [[package]] name = "strum_macros" -version = "0.27.2" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664" dependencies = [ "heck", "proc-macro2", @@ -5417,17 +5500,17 @@ version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "695b5790b3131dafa99b3bbfd25a216edb3d216dad9ca208d4657bfb8f2abc3d" dependencies = [ - "kurbo 0.13.0", + "kurbo", "siphasher", ] [[package]] name = "swash" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47846491253e976bdd07d0f9cc24b7daf24720d11309302ccbbc6e6b6e53550a" +checksum = "842f3cd369c2ba38966204f983eaa5e54a8e84a7d7159ed36ade2b6c335aae64" dependencies = [ - "skrifa", + "skrifa 0.37.0", "yazi", "zeno", ] @@ -5496,6 +5579,18 @@ dependencies = [ "libc", ] +[[package]] +name = "taffy" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41ba83ebaf2954d31d05d67340fd46cebe99da2b7133b0dd68d70c65473a437b" +dependencies = [ + "arrayvec", + "grid", + "serde", + "slotmap", +] + [[package]] name = "tar" version = "0.4.45" @@ -5611,8 +5706,22 @@ dependencies = [ "bytemuck", "cfg-if", "log", - "png 0.17.16", - "tiny-skia-path", + "tiny-skia-path 0.11.4", +] + +[[package]] +name = "tiny-skia" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47ffee5eaaf5527f630fb0e356b90ebdec84d5d18d937c5e440350f88c5a91ea" +dependencies = [ + "arrayref", + "arrayvec", + "bytemuck", + "cfg-if", + "log", + "png 0.18.1", + "tiny-skia-path 0.12.0", ] [[package]] @@ -5626,6 +5735,17 @@ dependencies = [ "strict-num", ] +[[package]] +name = "tiny-skia-path" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edca365c3faccca67d06593c5980fa6c57687de727a03131735bb85f01fdeeb9" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] + [[package]] name = "tiny-xlib" version = "0.2.4" @@ -5774,19 +5894,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "toml_edit" -version = "0.24.1+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01f2eadbbc6b377a847be05f60791ef1058d9f696ecb51d2c07fe911d8569d8e" -dependencies = [ - "indexmap", - "toml_datetime 0.7.5+spec-1.1.0", - "toml_parser", - "toml_writer", - "winnow 0.7.15", -] - [[package]] name = "toml_edit" version = "0.25.8+spec-1.1.0" @@ -5796,6 +5903,7 @@ dependencies = [ "indexmap", "toml_datetime 1.1.0+spec-1.1.0", "toml_parser", + "toml_writer", "winnow 1.0.0", ] @@ -5897,12 +6005,6 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" -[[package]] -name = "ttf-parser" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8" - [[package]] name = "ttf-parser" version = "0.25.1" @@ -6071,16 +6173,16 @@ dependencies = [ [[package]] name = "usvg" -version = "0.46.0" +version = "0.47.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e419dff010bb12512b0ae9e3d2f318dfbdf0167fde7eb05465134d4e8756076f" +checksum = "d46cf96c5f498d36b7a9693bc6a7075c0bb9303189d61b2249b0dc3d309c07de" dependencies = [ "base64", "data-url", "flate2", "fontdb", "imagesize", - "kurbo 0.13.0", + "kurbo", "log", "pico-args", "roxmltree", @@ -6089,7 +6191,8 @@ dependencies = [ "siphasher", "strict-num", "svgtypes", - "tiny-skia-path", + "tiny-skia-path 0.12.0", + "ttf-parser", "unicode-bidi", "unicode-script", "unicode-vo", @@ -6138,9 +6241,9 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vtable" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "753be81c38dff787d177b5939af1fa16f72f0d0d21a6b7d74ae56e29cd26f2a6" +checksum = "5ea953f65593feb5287b022b83c35046d1ff49c7417b6f5851a079d8a231fe31" dependencies = [ "const-field-offset", "portable-atomic", @@ -6150,9 +6253,9 @@ dependencies = [ [[package]] name = "vtable-macro" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cfcf6171aa2b0f85718ca5888ca32f6edf61d1849f8e4b3786ad890e5b68f68" +checksum = "482a37f9777480673d3a99c80ac2edc69f92382230440946855fa27ebc47cba6" dependencies = [ "proc-macro2", "quote", @@ -6450,6 +6553,22 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webbrowser" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe985f41e291eecef5e5c0770a18d28390addb03331c043964d9e916453d6f16" +dependencies = [ + "core-foundation 0.10.1", + "jni 0.22.4", + "log", + "ndk-context", + "objc2 0.6.4", + "objc2-foundation 0.3.2", + "url", + "web-sys", +] + [[package]] name = "webpki-root-certs" version = "1.0.6" @@ -6474,16 +6593,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "windows" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" -dependencies = [ - "windows-core 0.58.0", - "windows-targets 0.52.6", -] - [[package]] name = "windows" version = "0.62.2" @@ -6491,7 +6600,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" dependencies = [ "windows-collections", - "windows-core 0.62.2", + "windows-core", "windows-future", "windows-numerics", ] @@ -6502,20 +6611,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" dependencies = [ - "windows-core 0.62.2", -] - -[[package]] -name = "windows-core" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" -dependencies = [ - "windows-implement 0.58.0", - "windows-interface 0.58.0", - "windows-result 0.2.0", - "windows-strings 0.1.0", - "windows-targets 0.52.6", + "windows-core", ] [[package]] @@ -6524,11 +6620,11 @@ version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-implement 0.60.2", - "windows-interface 0.59.3", + "windows-implement", + "windows-interface", "windows-link", - "windows-result 0.4.1", - "windows-strings 0.5.1", + "windows-result", + "windows-strings", ] [[package]] @@ -6537,22 +6633,11 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" dependencies = [ - "windows-core 0.62.2", + "windows-core", "windows-link", "windows-threading", ] -[[package]] -name = "windows-implement" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "windows-implement" version = "0.60.2" @@ -6564,17 +6649,6 @@ dependencies = [ "syn", ] -[[package]] -name = "windows-interface" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "windows-interface" version = "0.59.3" @@ -6598,7 +6672,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" dependencies = [ - "windows-core 0.62.2", + "windows-core", "windows-link", ] @@ -6609,17 +6683,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" dependencies = [ "windows-link", - "windows-result 0.4.1", - "windows-strings 0.5.1", -] - -[[package]] -name = "windows-result" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" -dependencies = [ - "windows-targets 0.52.6", + "windows-result", + "windows-strings", ] [[package]] @@ -6631,16 +6696,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-strings" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" -dependencies = [ - "windows-result 0.2.0", - "windows-targets 0.52.6", -] - [[package]] name = "windows-strings" version = "0.5.1" @@ -7126,15 +7181,15 @@ dependencies = [ [[package]] name = "write-fonts" -version = "0.43.0" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "886614b5ce857341226aa091f3c285e450683894acaaa7887f366c361efef79d" +checksum = "f12725b0845073e20b04e79b500dbfb465904d7cbd84883a1f1bbd084debc515" dependencies = [ - "font-types", + "font-types 0.11.3", "indexmap", - "kurbo 0.12.0", + "kurbo", "log", - "read-fonts", + "read-fonts 0.37.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 7dd31f3..618197c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde-big-array = "0.5" -slint = { version = "1.15", default-features = false, features = ["compat-1-2", "std", "backend-winit", "renderer-skia"] } +slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "backend-winit", "renderer-skia"] } open = "5.3" sha2 = "0.11" sdl3-sys = { version = "0.6", features = ["build-from-source-static"] } diff --git a/build.rs b/build.rs index 7b2051d..2cbcdf5 100644 --- a/build.rs +++ b/build.rs @@ -3,7 +3,7 @@ fn main() { println!("cargo::rerun-if-changed=retroachievements"); println!("cargo::rerun-if-changed=src/compat"); - let slint_config = slint_build::CompilerConfiguration::new().with_style("cosmic".into()); + let slint_config = slint_build::CompilerConfiguration::new(); slint_build::compile_with_config("src/ui/gui/appwindow.slint", slint_config).unwrap(); let mut simd_build = cc::Build::new(); From 8196b52289524b310bfff179f51259ee446a48a4 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 16 Apr 2026 11:56:57 +0200 Subject: [PATCH 0768/1117] Fix MBC30 support (#756) --- src/device/controller/gbcart.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index 107ec1b..414b3a2 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -110,7 +110,7 @@ fn write_mbc3( if address < 0x2000 { cart.ram_enabled = value & 0xf == 0xa; } else if address < 0x4000 { - let bank = value & 0x7f; + let bank = value & if cart.ram.len() > 32768 { 0xff } else { 0x7f }; cart.rom_bank = bank as u32; if cart.rom_bank == 0 { cart.rom_bank = 1; From 83fab4c638c77ccf153d25560417ea506608fa69 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 16 Apr 2026 12:38:45 +0200 Subject: [PATCH 0769/1117] MBC30 support (#757) --- src/device/controller/gbcart.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index 414b3a2..b559683 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -110,7 +110,7 @@ fn write_mbc3( if address < 0x2000 { cart.ram_enabled = value & 0xf == 0xa; } else if address < 0x4000 { - let bank = value & if cart.ram.len() > 32768 { 0xff } else { 0x7f }; + let bank = value & if cart.rom.len() > 2097152 { 0xff } else { 0x7f }; cart.rom_bank = bank as u32; if cart.rom_bank == 0 { cart.rom_bank = 1; @@ -182,7 +182,7 @@ fn read_mbc3( return; } if cart.ram_bank < 0x8 { - if cart.ram_bank > 3 { + if cart.ram_bank > 3 && cart.ram.len() <= 32768 { for i in 0..size { pif_ram[data + i] = 0; } From e24a9a812694a5418e878a6489511a5f2a29b731 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 16 Apr 2026 13:31:17 +0200 Subject: [PATCH 0770/1117] cleaner fix for MBC30 issue (#758) * cleaner fix for MBC30 issue * more --- src/device/controller/gbcart.rs | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index b559683..a2e4b4c 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -182,16 +182,12 @@ fn read_mbc3( return; } if cart.ram_bank < 0x8 { - if cart.ram_bank > 3 && cart.ram.len() <= 32768 { - for i in 0..size { - pif_ram[data + i] = 0; - } - } else { - let banked_address = address - 0xA000 + (cart.ram_bank * 0x2000); - pif_ram[data..data + size].copy_from_slice( - &cart.ram[banked_address as usize..banked_address as usize + size], - ); - } + let banked_address = address - 0xA000 + (cart.ram_bank * 0x2000); + pif_ram[data..data + size].copy_from_slice( + cart.ram + .get(banked_address as usize..banked_address as usize + size) + .unwrap_or(&vec![0; size]), + ); } else { let latch = match cart.ram_bank { 0x8 => cart.latch_second, From d4a90155f96f0f195c870cd7e428add1ccb009d4 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 16 Apr 2026 15:21:01 +0200 Subject: [PATCH 0771/1117] Rust 1.95.0 (#759) --- Cargo.lock | 591 +++++++++++++++++++++----------------------- Cargo.toml | 2 +- rust-toolchain.toml | 2 +- 3 files changed, 285 insertions(+), 310 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 536223e..0808dfb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -88,7 +88,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd" dependencies = [ "android-properties", - "bitflags 2.11.0", + "bitflags 2.11.1", "cc", "jni 0.22.4", "libc", @@ -117,9 +117,9 @@ dependencies = [ [[package]] name = "annotate-snippets" -version = "0.12.13" +version = "0.12.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74fc7650eedcb2fee505aad48491529e408f0e854c2d9f63eb86c1361b9b3f93" +checksum = "92570a3f9c98e7e84df84b71d0965ac99b1871fcd75a3773a3bd1bad13f64cf7" dependencies = [ "anstyle", "memchr", @@ -324,9 +324,9 @@ dependencies = [ [[package]] name = "async-signal" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" +checksum = "52b5aaafa020cf5053a01f2a60e8ff5dccf550f0f77ec54a4e47285ac2bab485" dependencies = [ "async-io", "async-lock", @@ -435,9 +435,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.16.2" +version = "1.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a054912289d18629dc78375ba2c3726a3afe3ff71b4edba9dedfca0e3446d1fc" +checksum = "0ec6fb3fe69024a75fa7e1bfb48aa6cf59706a101658ea01bfd33b2b248a038f" dependencies = [ "aws-lc-sys", "zeroize", @@ -445,9 +445,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.39.0" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa7e52a4c5c547c741610a2c6f123f3881e409b714cd27e6798ef020c514f0a" +checksum = "f50037ee5e1e41e7b8f9d161680a725bd1626cb6f8c7e901f91f942850852fe7" dependencies = [ "cc", "cmake", @@ -477,7 +477,7 @@ version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cexpr", "clang-sys", "itertools 0.13.0", @@ -486,7 +486,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "rustc-hash 2.1.1", + "rustc-hash 2.1.2", "shlex", "syn", ] @@ -505,20 +505,20 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" +checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" dependencies = [ "serde_core", ] [[package]] name = "bitstream-io" -version = "4.9.0" +version = "4.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60d4bd9d1db2c6bdf285e223a7fa369d5ce98ec767dec949c6ca62863ce61757" +checksum = "7eff00be299a18769011411c9def0d827e8f2d7bf0c3dbf53633147a8867fd1f" dependencies = [ - "core2", + "no_std_io2", ] [[package]] @@ -660,7 +660,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "log", "polling", "rustix 0.38.44", @@ -674,7 +674,7 @@ version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dbf9978365bac10f54d1d4b04f7ce4427e51f71d61f2fe15e3fed5166474df7" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "polling", "rustix 1.1.4", "slab", @@ -716,9 +716,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.57" +version = "1.2.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a0dd1ca384932ff3641c8718a02769f1698e7563dc6974ffd03346116310423" +checksum = "43c5703da9466b66a946814e1adf53ea2c90f10063b86290cc9eb67ce3478a20" dependencies = [ "find-msvc-tools", "jobserver", @@ -770,7 +770,7 @@ checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" dependencies = [ "cfg-if", "cpufeatures 0.3.0", - "rand_core 0.10.0", + "rand_core 0.10.1", ] [[package]] @@ -809,9 +809,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.0" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" +checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" dependencies = [ "clap_builder", "clap_derive", @@ -831,9 +831,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.0" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a" +checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" dependencies = [ "heck", "proc-macro2", @@ -867,9 +867,9 @@ dependencies = [ [[package]] name = "cmake" -version = "0.1.57" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" +checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" dependencies = [ "cc", ] @@ -1020,15 +1020,6 @@ dependencies = [ "libc", ] -[[package]] -name = "core2" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" -dependencies = [ - "memchr", -] - [[package]] name = "core_maths" version = "0.1.1" @@ -1264,7 +1255,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -1308,7 +1299,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "drm-ffi", "drm-fourcc", @@ -1491,9 +1482,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.3.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" [[package]] name = "fatfs" @@ -1598,15 +1589,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" -[[package]] -name = "font-types" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39a654f404bbcbd48ea58c617c2993ee91d1cb63727a37bf2323a4edeed1b8c5" -dependencies = [ - "bytemuck", -] - [[package]] name = "font-types" version = "0.11.3" @@ -1642,7 +1624,7 @@ dependencies = [ "objc2-core-text", "objc2-foundation 0.3.2", "parlance", - "read-fonts 0.37.0", + "read-fonts", "roxmltree", "smallvec", "windows", @@ -1799,7 +1781,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce852e998d3ca5e4a97014fb31c940dc5ef344ec7d364984525fd11e8a547e6a" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "drm", "drm-fourcc", "gbm-sys", @@ -1881,7 +1863,7 @@ dependencies = [ "js-sys", "libc", "r-efi 6.0.0", - "rand_core 0.10.0", + "rand_core 0.10.1", "wasip2", "wasip3", "wasm-bindgen", @@ -1889,9 +1871,9 @@ dependencies = [ [[package]] name = "gif" -version = "0.14.1" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5df2ba84018d80c213569363bdcd0c64e6933c67fe4c1d60ecf822971a3c35e" +checksum = "ee8cfcc411d9adbbaba82fb72661cc1bcca13e8bba98b364e62b2dba8f960159" dependencies = [ "color_quant", "weezl", @@ -1932,7 +1914,7 @@ version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cfg_aliases", "cgl", "dispatch2", @@ -2071,10 +2053,10 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9da2e5ae821f6e96664977bf974d6d6a2d6682f9ccee23e62ec1d134246845f9" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "core_maths", - "read-fonts 0.37.0", + "read-fonts", "smallvec", ] @@ -2113,6 +2095,12 @@ dependencies = [ "foldhash 0.2.0", ] +[[package]] +name = "hashbrown" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" + [[package]] name = "heapless" version = "0.7.17" @@ -2207,18 +2195,18 @@ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "hybrid-array" -version = "0.4.8" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8655f91cd07f2b9d0c24137bd650fe69617773435ee5ec83022377777ce65ef1" +checksum = "3944cf8cf766b40e2a1a333ee5e9b563f854d5fa49d6a8ca2764e97c6eddb214" dependencies = [ "typenum", ] [[package]] name = "hyper" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" +checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" dependencies = [ "atomic-waker", "bytes", @@ -2230,7 +2218,6 @@ dependencies = [ "httparse", "itoa", "pin-project-lite", - "pin-utils", "smallvec", "tokio", "want", @@ -2238,15 +2225,14 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.7" +version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ "http", "hyper", "hyper-util", "rustls", - "rustls-pki-types", "tokio", "tokio-rustls", "tower-service", @@ -2361,7 +2347,7 @@ dependencies = [ "fontique", "htmlparser", "pulldown-cmark", - "skrifa 0.40.0", + "skrifa", ] [[package]] @@ -2388,7 +2374,7 @@ dependencies = [ "resvg", "rowan", "rspolib", - "skrifa 0.40.0", + "skrifa", "smol_str 0.3.6", "strum", "swash", @@ -2404,7 +2390,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8bac8ed92f61140aa03e426b28cd135e252c82891bc1ed88f2f799ba367f21c8" dependencies = [ "auto_enums", - "bitflags 2.11.0", + "bitflags 2.11.1", "cfg-if", "chrono", "clru", @@ -2430,7 +2416,7 @@ dependencies = [ "rgb", "scoped-tls-hkt", "scopeguard", - "skrifa 0.40.0", + "skrifa", "slab", "strum", "swash", @@ -2483,7 +2469,7 @@ dependencies = [ "pin-weak", "raw-window-handle", "raw-window-metal", - "read-fonts 0.37.0", + "read-fonts", "scoped-tls-hkt", "skia-safe", "softbuffer", @@ -2508,7 +2494,7 @@ dependencies = [ "integer-sqrt", "lyon_path", "num-traits", - "skrifa 0.40.0", + "skrifa", "swash", "zeno", ] @@ -2539,12 +2525,13 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" dependencies = [ "displaydoc", "potential_utf", + "utf8_iter", "yoke", "zerofrom", "zerovec", @@ -2552,9 +2539,9 @@ dependencies = [ [[package]] name = "icu_locale" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "532b11722e350ab6bf916ba6eb0efe3ee54b932666afec989465f9243fe6dd60" +checksum = "d5a396343c7208121dc86e35623d3dfe19814a7613cfd14964994cdc9c9a2e26" dependencies = [ "icu_collections", "icu_locale_core", @@ -2567,9 +2554,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" dependencies = [ "displaydoc", "litemap", @@ -2581,15 +2568,15 @@ dependencies = [ [[package]] name = "icu_locale_data" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c5f1d16b4c3a2642d3a719f18f6b06070ab0aef246a6418130c955ae08aa831" +checksum = "d5fdcc9ac77c6d74ff5cf6e65ef3181d6af32003b16fce3a77fb451d2f695993" [[package]] name = "icu_normalizer" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" dependencies = [ "icu_collections", "icu_normalizer_data", @@ -2601,15 +2588,15 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" [[package]] name = "icu_properties" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" dependencies = [ "icu_collections", "icu_locale_core", @@ -2621,15 +2608,15 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" [[package]] name = "icu_provider" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" dependencies = [ "displaydoc", "icu_locale_core", @@ -2644,9 +2631,9 @@ dependencies = [ [[package]] name = "icu_segmenter" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a807a7488f3f758629ae86d99d9d30dce24da2fb2945d74c80a4f4a62c71db73" +checksum = "5c0794db0b1a86193ac9c48768d0e6c52c54448e0870ad87907d456ee0dac964" dependencies = [ "icu_collections", "icu_locale", @@ -2659,9 +2646,9 @@ dependencies = [ [[package]] name = "icu_segmenter_data" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ebbb7321d9e21d25f5660366cb6c08201d0175898a3a6f7a41ee9685af21c80" +checksum = "e4a2c462a4d927d512f5f882a033ddd62f33a05bb9f230d98f736ac3dc85938f" [[package]] name = "id-arena" @@ -2738,12 +2725,12 @@ checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" [[package]] name = "indexmap" -version = "2.13.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.16.1", + "hashbrown 0.17.0", "serde", "serde_core", ] @@ -2764,7 +2751,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "input-sys", "libc", "log", @@ -2773,9 +2760,9 @@ dependencies = [ [[package]] name = "input-sys" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd4f5b4d1c00331c5245163aacfe5f20be75b564c7112d45893d4ae038119eb0" +checksum = "36eee07d8e02bd95bf52b2e642cf13d33701b94c6e4b04fbf1d1fb07e9cb19e7" [[package]] name = "integer-sqrt" @@ -2816,9 +2803,9 @@ checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" [[package]] name = "iri-string" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e7418f59cc01c88316161279a7f665217ae316b388e58a0d10e29f54f1e5eb" +checksum = "25e659a4bb38e810ebc252e53b5814ff908a8c58c2a9ce2fae1bbec24cbf4e20" dependencies = [ "memchr", "serde", @@ -2959,10 +2946,12 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.91" +version = "0.3.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" +checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca" dependencies = [ + "cfg-if", + "futures-util", "once_cell", "wasm-bindgen", ] @@ -2973,7 +2962,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "serde", "unicode-segmentation", ] @@ -3021,9 +3010,9 @@ checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" -version = "0.2.183" +version = "0.2.185" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" +checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f" [[package]] name = "libfuzzer-sys" @@ -3063,14 +3052,14 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ddbf48fd451246b1f8c2610bd3b4ac0cc6e149d89832867093ab69a17194f08" +checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "libc", "plain", - "redox_syscall 0.7.3", + "redox_syscall 0.7.4", ] [[package]] @@ -3124,9 +3113,9 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" [[package]] name = "lock_api" @@ -3275,9 +3264,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" +checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" dependencies = [ "libc", "wasi", @@ -3325,7 +3314,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "jni-sys 0.3.1", "log", "ndk-sys", @@ -3361,12 +3350,21 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cfg-if", "cfg_aliases", "libc", ] +[[package]] +name = "no_std_io2" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b51ed7824b6e07d354605f4abb3d9d300350701299da96642ee084f5ce631550" +dependencies = [ + "memchr", +] + [[package]] name = "nom" version = "7.1.3" @@ -3502,7 +3500,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -3518,7 +3516,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -3539,7 +3537,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -3552,7 +3550,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -3574,7 +3572,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -3586,7 +3584,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -3597,7 +3595,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "dispatch2", "objc2 0.6.4", ] @@ -3608,7 +3606,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "dispatch2", "objc2 0.6.4", "objc2-core-foundation", @@ -3655,7 +3653,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", @@ -3667,7 +3665,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", @@ -3686,7 +3684,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "dispatch", "libc", @@ -3699,7 +3697,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.6.2", "objc2 0.6.4", "objc2-core-foundation", @@ -3711,7 +3709,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "objc2 0.6.4", "objc2-core-foundation", ] @@ -3734,7 +3732,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -3746,7 +3744,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -3757,7 +3755,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -3770,7 +3768,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "objc2 0.6.4", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -3793,7 +3791,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "objc2 0.5.2", "objc2-cloud-kit 0.2.2", @@ -3814,7 +3812,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.6.2", "objc2 0.6.4", "objc2-core-foundation", @@ -3839,7 +3837,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -3941,7 +3939,7 @@ dependencies = [ "linebender_resource_handle", "parlance", "parley_data", - "skrifa 0.40.0", + "skrifa", ] [[package]] @@ -4044,9 +4042,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" [[package]] name = "plain" @@ -4073,7 +4071,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "crc32fast", "fdeflate", "flate2", @@ -4124,9 +4122,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" dependencies = [ "serde_core", "writeable", @@ -4207,7 +4205,7 @@ version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c3a14896dfa883796f1cb410461aef38810ea05f2b2c33c5aded3649095fdad" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "getopts", "memchr", "pulldown-cmark-escape", @@ -4261,7 +4259,7 @@ dependencies = [ "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash 2.1.1", + "rustc-hash 2.1.2", "rustls", "socket2", "thiserror 2.0.18", @@ -4280,9 +4278,9 @@ dependencies = [ "bytes", "getrandom 0.3.4", "lru-slab", - "rand 0.9.2", + "rand 0.9.4", "ring", - "rustc-hash 2.1.1", + "rustc-hash 2.1.2", "rustls", "rustls-pki-types", "slab", @@ -4329,9 +4327,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.9.2" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" dependencies = [ "rand_chacha", "rand_core 0.9.5", @@ -4345,7 +4343,7 @@ checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" dependencies = [ "chacha20", "getrandom 0.4.2", - "rand_core 0.10.0", + "rand_core 0.10.1", ] [[package]] @@ -4369,9 +4367,9 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c8d0fd677905edcbeedbf2edb6494d676f0e98d54d5cf9bda0b061cb8fb8aba" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" [[package]] name = "rav1e" @@ -4400,7 +4398,7 @@ dependencies = [ "num-traits", "paste", "profiling", - "rand 0.9.2", + "rand 0.9.4", "rand_chacha", "simd_helpers", "thiserror 2.0.18", @@ -4443,9 +4441,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" dependencies = [ "either", "rayon-core", @@ -4461,16 +4459,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "read-fonts" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717cf23b488adf64b9d711329542ba34de147df262370221940dfabc2c91358" -dependencies = [ - "bytemuck", - "font-types 0.10.1", -] - [[package]] name = "read-fonts" version = "0.37.0" @@ -4479,7 +4467,7 @@ checksum = "7b634fabf032fab15307ffd272149b622260f55974d9fad689292a5d33df02e5" dependencies = [ "bytemuck", "core_maths", - "font-types 0.11.3", + "font-types", ] [[package]] @@ -4497,16 +4485,16 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", ] [[package]] name = "redox_syscall" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce70a74e890531977d37e532c34d45e9055d2409ed08ddba14529471ed0be16" +checksum = "f450ad9c3b1da563fb6948a8e0fb0fb9269711c9c73d9ea1de5058c79c8d643a" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", ] [[package]] @@ -4705,9 +4693,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" [[package]] name = "rustc_version" @@ -4724,7 +4712,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "errno", "libc", "linux-raw-sys 0.4.15", @@ -4737,7 +4725,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "errno", "libc", "linux-raw-sys 0.12.1", @@ -4746,9 +4734,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.37" +version = "0.23.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" +checksum = "69f9466fb2c14ea04357e91413efb882e2a6d4a406e625449bc0a5d360d53a21" dependencies = [ "aws-lc-rs", "once_cell", @@ -4809,9 +4797,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" -version = "0.103.10" +version = "0.103.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef" +checksum = "8279bb85272c9f10811ae6a6c547ff594d6a7f3c6c6b02ee9726d1d0dcfcdd06" dependencies = [ "aws-lc-rs", "ring", @@ -4831,7 +4819,7 @@ version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "core_maths", "log", @@ -4900,15 +4888,15 @@ dependencies = [ [[package]] name = "sdl3-src" -version = "3.4.2" +version = "3.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8cdee3a2e98fa6c01aff481da8b61594b40bf7dbc98fd0356c1e123661da3e7" +checksum = "d98f1cdcc5eb877ad663216c3133bfa5af469628c9573b3d2364e584efe19ab0" [[package]] name = "sdl3-sys" -version = "0.6.1+SDL-3.4.2" +version = "0.6.3+SDL-3.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d73fc820b0b6b9bd0557de7b799ec9da1ca4f35fcd1cb42f7ceb85e640d1477" +checksum = "c7adc59563535710602c8e7035297fd73d2506c0c61677f40aeb8917c0e86a01" dependencies = [ "cc", "cmake", @@ -4940,7 +4928,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -4959,9 +4947,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.27" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "serde" @@ -5028,9 +5016,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876ac351060d4f882bb1032b6369eb0aef79ad9df1ea8bc404874d8cc3d0cd98" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" dependencies = [ "serde_core", ] @@ -5116,9 +5104,9 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" +checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" [[package]] name = "simd_cesu8" @@ -5183,21 +5171,11 @@ version = "0.90.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a71c01d325d40b1031dee67d251a5e0132e79e2a9ec272149a4f4a0d4b8b3be" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "skia-bindings", "windows", ] -[[package]] -name = "skrifa" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c31071dedf532758ecf3fed987cdb4bd9509f900e026ab684b4ecb81ea49841" -dependencies = [ - "bytemuck", - "read-fonts 0.35.0", -] - [[package]] name = "skrifa" version = "0.40.0" @@ -5205,7 +5183,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fbdfe3d2475fbd7ddd1f3e5cf8288a30eb3e5f95832829570cd88115a7434ac" dependencies = [ "bytemuck", - "read-fonts 0.37.0", + "read-fonts", ] [[package]] @@ -5280,7 +5258,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "calloop 0.13.0", "calloop-wayland-source 0.3.0", "cursor-icon", @@ -5305,7 +5283,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "calloop 0.14.4", "calloop-wayland-source 0.4.1", "cursor-icon", @@ -5510,7 +5488,7 @@ version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "842f3cd369c2ba38966204f983eaa5e54a8e84a7d7159ed36ade2b6c335aae64" dependencies = [ - "skrifa 0.37.0", + "skrifa", "yazi", "zeno", ] @@ -5564,7 +5542,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -5761,9 +5739,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" dependencies = [ "displaydoc", "serde_core", @@ -5787,9 +5765,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.50.0" +version = "1.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" +checksum = "a91135f59b1cbf38c91e73cf3386fca9bb77915c45ce2771460c9d92f0f3d776" dependencies = [ "bytes", "libc", @@ -5802,9 +5780,9 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.6.1" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" dependencies = [ "proc-macro2", "quote", @@ -5863,17 +5841,17 @@ dependencies = [ [[package]] name = "toml" -version = "1.1.0+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8195ca05e4eb728f4ba94f3e3291661320af739c4e43779cbdfae82ab239fcc" +checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" dependencies = [ "indexmap", "serde_core", "serde_spanned", - "toml_datetime 1.1.0+spec-1.1.0", + "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", "toml_writer", - "winnow 1.0.0", + "winnow 1.0.1", ] [[package]] @@ -5887,40 +5865,40 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "1.1.0+spec-1.1.0" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97251a7c317e03ad83774a8752a7e81fb6067740609f75ea2b585b569a59198f" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" dependencies = [ "serde_core", ] [[package]] name = "toml_edit" -version = "0.25.8+spec-1.1.0" +version = "0.25.11+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16bff38f1d86c47f9ff0647e6838d7bb362522bdf44006c7068c2b1e606f1f3c" +checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" dependencies = [ "indexmap", - "toml_datetime 1.1.0+spec-1.1.0", + "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", "toml_writer", - "winnow 1.0.0", + "winnow 1.0.1", ] [[package]] name = "toml_parser" -version = "1.1.0+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2334f11ee363607eb04df9b8fc8a13ca1715a72ba8662a26ac285c98aabb4011" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow 1.0.0", + "winnow 1.0.1", ] [[package]] name = "toml_writer" -version = "1.1.0+spec-1.1.0" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d282ade6016312faf3e41e57ebbba0c073e4056dab1232ab1cb624199648f8ed" +checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" [[package]] name = "tower" @@ -5943,7 +5921,7 @@ version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "bytes", "futures-util", "http", @@ -6025,7 +6003,7 @@ dependencies = [ "http", "httparse", "log", - "rand 0.9.2", + "rand 0.9.4", "sha1", "thiserror 2.0.18", ] @@ -6125,9 +6103,9 @@ checksum = "383ad40bb927465ec0ce7720e033cb4ca06912855fc35db31b5755d0de75b1ee" [[package]] name = "unicode-segmentation" -version = "1.13.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da36089a805484bcccfffe0739803392c8298778a2d2f09febf76fac5ad9025b" +checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" [[package]] name = "unicode-vo" @@ -6213,9 +6191,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.22.0" +version = "1.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37" +checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" dependencies = [ "js-sys", "serde_core", @@ -6307,9 +6285,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.114" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" +checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89" dependencies = [ "cfg-if", "once_cell", @@ -6320,23 +6298,19 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.64" +version = "0.4.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9c5522b3a28661442748e09d40924dfb9ca614b21c00d3fd135720e48b67db8" +checksum = "f371d383f2fb139252e0bfac3b81b265689bf45b6874af544ffa4c975ac1ebf8" dependencies = [ - "cfg-if", - "futures-util", "js-sys", - "once_cell", "wasm-bindgen", - "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.114" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" +checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6344,9 +6318,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.114" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" +checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904" dependencies = [ "bumpalo", "proc-macro2", @@ -6357,9 +6331,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.114" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" +checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129" dependencies = [ "unicode-ident", ] @@ -6392,7 +6366,7 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "hashbrown 0.15.5", "indexmap", "semver", @@ -6400,9 +6374,9 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa75f400b7f719bcd68b3f47cd939ba654cedeef690f486db71331eec4c6a406" +checksum = "2857dd20b54e916ec7253b3d6b4d5c4d7d4ca2c33c2e11c6c76a99bd8744755d" dependencies = [ "cc", "downcast-rs", @@ -6414,11 +6388,11 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.13" +version = "0.31.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab51d9f7c071abeee76007e2b742499e535148035bb835f97aaed1338cf516c3" +checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "rustix 1.1.4", "wayland-backend", "wayland-scanner", @@ -6430,16 +6404,16 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cursor-icon", "wayland-backend", ] [[package]] name = "wayland-cursor" -version = "0.31.13" +version = "0.31.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b3298683470fbdc6ca40151dfc48c8f2fd4c41a26e13042f801f85002384091" +checksum = "4a52d18780be9b1314328a3de5f930b73d2200112e3849ca6cb11822793fb34d" dependencies = [ "rustix 1.1.4", "wayland-client", @@ -6448,11 +6422,11 @@ dependencies = [ [[package]] name = "wayland-protocols" -version = "0.32.11" +version = "0.32.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b23b5df31ceff1328f06ac607591d5ba360cf58f90c8fad4ac8d3a55a3c4aec7" +checksum = "563a85523cade2429938e790815fd7319062103b9f4a2dc806e9b53b95982d8f" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "wayland-backend", "wayland-client", "wayland-scanner", @@ -6464,7 +6438,7 @@ version = "20250721.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -6473,11 +6447,11 @@ dependencies = [ [[package]] name = "wayland-protocols-misc" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "429b99200febaf95d4f4e46deff6fe4382bcff3280ee16a41cf887b3c3364984" +checksum = "6e9567599ef23e09b8dad6e429e5738d4509dfc46b3b21f32841a304d16b29c8" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -6486,11 +6460,11 @@ dependencies = [ [[package]] name = "wayland-protocols-plasma" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d392fc283a87774afc9beefcd6f931582bb97fe0e6ced0b306a62cb1d026527c" +checksum = "2b6d8cf1eb2c1c31ed1f5643c88a6e53538129d4af80030c8cabd1f9fa884d91" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -6499,11 +6473,11 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78248e4cc0eff8163370ba5c158630dcae1f3497a586b826eca2ef5f348d6235" +checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -6512,9 +6486,9 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.9" +version = "0.31.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c86287151a309799b821ca709b7345a048a2956af05957c89cb824ab919fa4e3" +checksum = "9c324a910fd86ebdc364a3e61ec1f11737d3b1d6c273c0239ee8ff4bc0d24b4a" dependencies = [ "proc-macro2", "quick-xml", @@ -6523,9 +6497,9 @@ dependencies = [ [[package]] name = "wayland-sys" -version = "0.31.10" +version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374f6b70e8e0d6bf9461a32988fd553b59ff630964924dad6e4a4eb6bd538d17" +checksum = "d8eab23fefc9e41f8e841df4a9c707e8a8c4ed26e944ef69297184de2785e3be" dependencies = [ "dlib", "log", @@ -6535,9 +6509,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.91" +version = "0.3.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9" +checksum = "4f2dfbb17949fa2088e5d39408c48368947b86f7834484e87b73de55bc14d97d" dependencies = [ "js-sys", "wasm-bindgen", @@ -6571,9 +6545,9 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "804f18a4ac2676ffb4e8b5b5fa9ae38af06df08162314f96a68d2a363e21a8ca" +checksum = "f31141ce3fc3e300ae89b78c0dd67f9708061d1d2eda54b8209346fd6be9a92c" dependencies = [ "rustls-pki-types", ] @@ -7020,7 +6994,7 @@ dependencies = [ "ahash", "android-activity", "atomic-waker", - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "bytemuck", "calloop 0.13.0", @@ -7074,9 +7048,9 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a90e88e4667264a994d34e6d1ab2d26d398dcdca8b7f52bec8668957517fc7d8" +checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" dependencies = [ "memchr", ] @@ -7087,7 +7061,7 @@ version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0986a8b1d586b7d3e4fe3d9ea39fb451ae22869dcea4aa109d287a374d866087" dependencies = [ - "toml 1.1.0+spec-1.1.0", + "toml 1.1.2+spec-1.1.0", "version_check", ] @@ -7149,7 +7123,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.11.0", + "bitflags 2.11.1", "indexmap", "log", "serde", @@ -7185,18 +7159,18 @@ version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f12725b0845073e20b04e79b500dbfb465904d7cbd84883a1f1bbd084debc515" dependencies = [ - "font-types 0.11.3", + "font-types", "indexmap", "kurbo", "log", - "read-fonts 0.37.0", + "read-fonts", ] [[package]] name = "writeable" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" [[package]] name = "x11-clipboard" @@ -7273,7 +7247,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "dlib", "log", "once_cell", @@ -7323,9 +7297,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -7334,9 +7308,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", @@ -7413,18 +7387,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.47" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efbb2a062be311f2ba113ce66f697a4dc589f85e78a4aea276200804cea0ed87" +checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.47" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e8bc7269b54418e7aeeef514aa68f8690b8c0489a06b0136e5f57c4c5ccab89" +checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" dependencies = [ "proc-macro2", "quote", @@ -7433,18 +7407,18 @@ dependencies = [ [[package]] name = "zerofrom" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", @@ -7460,20 +7434,21 @@ checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" [[package]] name = "zerotrie" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" dependencies = [ "displaydoc", "yoke", "zerofrom", + "zerovec", ] [[package]] name = "zerovec" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" dependencies = [ "serde", "yoke", @@ -7483,9 +7458,9 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", @@ -7494,9 +7469,9 @@ dependencies = [ [[package]] name = "zip" -version = "8.4.0" +version = "8.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7756d0206d058333667493c4014f545f4b9603c4330ccd6d9b3f86dcab59f7d9" +checksum = "dcab981e19633ebcf0b001ddd37dd802996098bc1864f90b7c5d970ce76c1d59" dependencies = [ "aes", "bzip2", @@ -7588,9 +7563,9 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.5.14" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7a1c0af6e5d8d1363f4994b7a091ccf963d8b694f7da5b0b9cceb82da2c0a6" +checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296" dependencies = [ "zune-core", ] diff --git a/Cargo.toml b/Cargo.toml index 618197c..668d6d8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "gopher64" version = "1.1.16" edition = "2024" -rust-version = "1.94.1" +rust-version = "1.95.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 9cf4a67..f25b5b1 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.94.1" +channel = "1.95.0" From bb056a77f4d8b3c84dfe119479005de76bdf9564 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 16 Apr 2026 15:56:35 +0200 Subject: [PATCH 0772/1117] bump version (#760) --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0808dfb..6f8cf69 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1976,7 +1976,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.16" +version = "1.1.17" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index 668d6d8..e937085 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.16" +version = "1.1.17" edition = "2024" rust-version = "1.95.0" From be117214c314b7f72a76290c8e9717275eaa92e9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 17 Apr 2026 08:48:47 +0200 Subject: [PATCH 0773/1117] Update README with notable features of Gopher64 (#761) Added features list for Gopher64 emulator --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index a433769..62f8f20 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,14 @@ # gopher64 +Gopher64 is a cross-platform N64 emulator. Some notable features: +* Netplay +* Homebrew support +* Upscaling +* CRT shader +* Emulate CPU overclocking +* Cheats +* Savestates +* RetroAchievements + ## download Windows: https://github.com/gopher64/gopher64/releases/latest/download/gopher64-windows-x86_64.exe From cb87f79710d995db346534d9d0ddd368508515c5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 17 Apr 2026 08:56:53 +0200 Subject: [PATCH 0774/1117] writeback GB ram files (#762) --- data/entitlements_prod.plist | 2 +- src/main.rs | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/data/entitlements_prod.plist b/data/entitlements_prod.plist index 45b3615..3f51898 100644 --- a/data/entitlements_prod.plist +++ b/data/entitlements_prod.plist @@ -12,7 +12,7 @@ com.apple.security.device.bluetooth - com.apple.security.files.user-selected.read-only + com.apple.security.files.user-selected.read-write diff --git a/src/main.rs b/src/main.rs index ff78b6e..4da9216 100644 --- a/src/main.rs +++ b/src/main.rs @@ -184,8 +184,8 @@ async fn main() -> std::io::Result<()> { { device.netplay = Some(netplay::init(peer_addr.parse().unwrap(), player_number)); } else { - if let Some(gb_roms) = args.gb_rom - && let Some(gb_rams) = args.gb_ram + if let Some(gb_roms) = &args.gb_rom + && let Some(gb_rams) = &args.gb_ram { for i in 0..4 { if let Some(gb_rom) = gb_roms.get(i) @@ -229,6 +229,12 @@ async fn main() -> std::io::Result<()> { if device.netplay.is_some() { netplay::close(&mut device); + } else if let Some(gb_rams) = &args.gb_ram { + for i in 0..4 { + if let Some(gb_ram) = gb_rams.get(i) { + std::fs::write(gb_ram, &device.transferpaks[i].cart.ram).unwrap(); + } + } } if let Some(shutdown_tx) = &shutdown_tx { ui::usb::close(shutdown_tx); From 28aa8ea28045b48a05d74c028da26e5f78228d23 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 17 Apr 2026 09:27:42 +0200 Subject: [PATCH 0775/1117] use tokio::fs (#763) --- src/main.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 4da9216..ba06bd4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -232,7 +232,9 @@ async fn main() -> std::io::Result<()> { } else if let Some(gb_rams) = &args.gb_ram { for i in 0..4 { if let Some(gb_ram) = gb_rams.get(i) { - std::fs::write(gb_ram, &device.transferpaks[i].cart.ram).unwrap(); + tokio::fs::write(gb_ram, &device.transferpaks[i].cart.ram) + .await + .unwrap(); } } } From a592d0eb843d50366b6d753b2898449260738d0a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 17 Apr 2026 09:59:32 +0200 Subject: [PATCH 0776/1117] remove uses of to_owned (#764) * remove uses of to_owned * more * more --- build.rs | 5 ++--- src/netplay.rs | 2 +- src/ui/storage.rs | 29 +++++++++++++---------------- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/build.rs b/build.rs index 2cbcdf5..fe85e5b 100644 --- a/build.rs +++ b/build.rs @@ -62,11 +62,10 @@ fn main() { .include("parallel-rdp/parallel-rdp-standalone/vulkan-headers/include") .include("parallel-rdp/parallel-rdp-standalone/util") .include( - std::path::PathBuf::from(std::env::var("DEP_SDL3_OUT_DIR").to_owned().unwrap()) - .join("include"), + std::path::PathBuf::from(std::env::var("DEP_SDL3_OUT_DIR").unwrap()).join("include"), ) .include( - std::path::PathBuf::from(std::env::var("DEP_SDL3_TTF_OUT_DIR").to_owned().unwrap()) + std::path::PathBuf::from(std::env::var("DEP_SDL3_TTF_OUT_DIR").unwrap()) .join("include"), ); diff --git a/src/netplay.rs b/src/netplay.rs index b0a64c5..0f9ce7b 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -85,7 +85,7 @@ pub fn send_save(netplay: &mut Netplay, save_type: &str, save_data: &[u8], size: request.extend_from_slice(&(size as u32).to_be_bytes()); if size > 0 { - request.extend(save_data.to_owned()); + request.extend_from_slice(save_data); } netplay.tcp_stream.write_all(&request).unwrap(); } diff --git a/src/ui/storage.rs b/src/ui/storage.rs index dff4a09..470b077 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -135,13 +135,13 @@ pub fn get_game_crc(rom: &[u8]) -> String { } pub fn get_game_name(rom: &[u8]) -> String { - let mut game_name = "".to_owned(); let header_value = std::str::from_utf8(&rom[0x20..0x34]); if let Ok(header_value) = header_value { let re = regex::Regex::new(r"[^a-zA-Z0-9_ -]").unwrap(); - game_name = re.replace_all(header_value, "").trim().replace('\0', ""); + re.replace_all(header_value, "").trim().replace('\0', "") + } else { + String::new() } - game_name } pub fn init(ui: &mut ui::Ui, rom: &[u8]) { @@ -163,49 +163,46 @@ pub fn init(ui: &mut ui::Ui, rom: &[u8]) { ui.storage .paths .eep_file_path - .push(prefix.to_owned() + "-" + &ui.game_hash + ".eep"); + .push(format!("{}-{}.eep", prefix, ui.game_hash)); ui.storage.paths.sra_file_path.clone_from(&saves_path); ui.storage .paths .sra_file_path - .push(prefix.to_owned() + "-" + &ui.game_hash + ".sra"); + .push(format!("{}-{}.sra", prefix, ui.game_hash)); ui.storage.paths.fla_file_path.clone_from(&saves_path); ui.storage .paths .fla_file_path - .push(prefix.to_owned() + "-" + &ui.game_hash + ".fla"); + .push(format!("{}-{}.fla", prefix, ui.game_hash)); ui.storage.paths.pak_file_path.clone_from(&saves_path); ui.storage .paths .pak_file_path - .push(prefix.to_owned() + "-" + &ui.game_hash + ".mpk"); + .push(format!("{}-{}.mpk", prefix, ui.game_hash)); ui.storage.paths.sdcard_file_path.clone_from(&saves_path); ui.storage .paths .sdcard_file_path - .push(prefix.to_owned() + "-" + &ui.game_hash + ".img"); + .push(format!("{}-{}.img", prefix, ui.game_hash)); ui.storage.paths.romsave_file_path.clone_from(&saves_path); ui.storage .paths .romsave_file_path - .push(prefix.to_owned() + "-" + &ui.game_hash + ".romsave"); + .push(format!("{}-{}.romsave", prefix, ui.game_hash)); ui.storage .paths .savestate_file_path .clone_from(&states_path); - ui.storage.paths.savestate_file_path.push( - prefix.to_owned() - + "-" - + &ui.game_hash - + ".state" - + ui.storage.save_state_slot.to_string().as_str(), - ); + ui.storage.paths.savestate_file_path.push(format!( + "{}-{}.state{}", + prefix, ui.game_hash, ui.storage.save_state_slot + )); } pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { From f8a7153fdd75ef88c3b9ad98d5e7bd1b14458a57 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 17 Apr 2026 15:07:15 +0200 Subject: [PATCH 0777/1117] enable vsync if required (#765) * enable vsync if required * add note * more * more --- parallel-rdp/interface.cpp | 13 +++++++++---- parallel-rdp/interface.hpp | 2 +- src/ui/video.rs | 1 + 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index c932a8c..0f78472 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -254,7 +254,8 @@ static ImageHandle create_message_image(Vulkan::Device &device, int width, } void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, - size_t font_size, uint32_t save_state_slot) { + size_t font_size, uint32_t save_state_slot, + bool netplay_enabled) { memset(&rdp_device, 0, sizeof(RDP_DEVICE)); window = (SDL_Window *)_window; @@ -275,13 +276,17 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, fragment_size = sizeof(plain_fragment_spirv); } - bool window_vsync = 0; wsi = new WSI; wsi_platform = new SDL_WSIPlatform; wsi_platform->set_window(window); wsi->set_platform(wsi_platform); - wsi->set_present_mode(window_vsync ? PresentMode::SyncToVBlank - : PresentMode::UnlockedMaybeTear); + if (netplay_enabled) { + // VK_PRESENT_MODE_MAILBOX_KHR, fallback to VK_PRESENT_MODE_IMMEDIATE_KHR + wsi->set_present_mode(PresentMode::UnlockedMaybeTear); + } else { + // VK_PRESENT_MODE_MAILBOX_KHR, fallback to VK_PRESENT_MODE_FIFO_KHR + wsi->set_present_mode(PresentMode::UnlockedNoTearing); + } wsi->set_backbuffer_srgb(false); Context::SystemHandles handles = {}; if (!::Vulkan::Context::init_loader( diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index da286bf..7182a6b 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -37,7 +37,7 @@ typedef struct { } CALL_BACK; void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, - size_t font_size, uint32_t save_state_slot); + size_t font_size, uint32_t save_state_slot, bool netplay_enabled); void rdp_close(); void rdp_set_vi_register(uint32_t reg, uint32_t value); void rdp_update_screen(); diff --git a/src/ui/video.rs b/src/ui/video.rs index 56a7c05..b67e656 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -99,6 +99,7 @@ pub fn init(device: &mut device::Device) { font_bytes.as_ptr() as *const std::ffi::c_void, font_bytes.len(), device.ui.storage.save_state_slot, + device.netplay.is_some(), ) } } From 8ee10e40adbf4e33ba311be3187e986ae334bcfc Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 18 Apr 2026 08:02:30 +0200 Subject: [PATCH 0778/1117] add provisionprofile (#767) * add provisionprofile * more --- .github/dependabot.yml | 1 + .github/workflows/build.yml | 42 ++++++++++++++--------- .github/workflows/lint.yml | 25 ++++++++------ data/macos/embedded.provisionprofile | Bin 0 -> 12309 bytes data/{ => macos}/entitlements_dev.plist | 0 data/{ => macos}/entitlements_prod.plist | 0 6 files changed, 41 insertions(+), 27 deletions(-) create mode 100644 data/macos/embedded.provisionprofile rename data/{ => macos}/entitlements_dev.plist (100%) rename data/{ => macos}/entitlements_prod.plist (100%) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 4cef5c4..eab84a5 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -8,6 +8,7 @@ updates: directory: "/" schedule: interval: "weekly" + # - package-ecosystem: "cargo" # directory: "/" # schedule: diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2210040..981f958 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,11 +4,11 @@ permissions: on: push: - branches: ["main"] + branches: [ "main" ] tags: - "v*" pull_request: - branches: ["main"] + branches: [ "main" ] env: CARGO_TERM_COLOR: always @@ -40,24 +40,28 @@ jobs: rustflags: "" cache: ${{ github.ref_type != 'tag' }} - name: Set LLVM_VERSION - run: echo "LLVM_VERSION=$(rustc --version --verbose | grep "LLVM version" | cut -d':' -f2 | xargs)" >> $GITHUB_ENV + run: echo "LLVM_VERSION=$(rustc --version --verbose | grep "LLVM version" | cut + -d':' -f2 | xargs)" >> $GITHUB_ENV - name: Install SDL Dependencies # https://wiki.libsdl.org/SDL3/README-linux#build-dependencies uses: awalsh128/cache-apt-pkgs-action@v1 with: - packages: build-essential git make \ - pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \ - libaudio-dev libfribidi-dev libjack-dev libsndio-dev libx11-dev libxext-dev \ - libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libxtst-dev \ - libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ - libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev libthai-dev \ - libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev libfreetype-dev libfontconfig-dev + packages: build-essential git make pkg-config cmake ninja-build + gnome-desktop-testing libasound2-dev libpulse-dev libaudio-dev + libfribidi-dev libjack-dev libsndio-dev libx11-dev libxext-dev + libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev + libxtst-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev + libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev + libudev-dev libthai-dev libpipewire-0.3-dev libwayland-dev + libdecor-0-dev liburing-dev libfreetype-dev libfontconfig-dev version: ${{ matrix.target }}-1.0 - name: Install LLVM and Clang uses: KyleMayes/install-llvm-action@v2 with: version: ${{ env.LLVM_VERSION }} - force-url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-Linux-${{ matrix.llvm }}.tar.xz + force-url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ + env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-Linux-${{ + matrix.llvm }}.tar.xz - name: Build run: | cargo build --release -v --target=${{ matrix.target }} @@ -104,7 +108,9 @@ jobs: uses: KyleMayes/install-llvm-action@v2 with: version: ${{ env.LLVM_VERSION }} - force-url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-${{ matrix.llvm }}.exe + force-url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ + env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-${{ matrix.llvm + }}.exe - name: Build run: | cargo build --release -v --target=${{ matrix.target }} @@ -163,12 +169,15 @@ jobs: rustflags: "" cache: ${{ github.ref_type != 'tag' }} - name: Set LLVM_VERSION - run: echo "LLVM_VERSION=$(rustc --version --verbose | grep "LLVM version" | cut -d':' -f2 | xargs)" >> $GITHUB_ENV + run: echo "LLVM_VERSION=$(rustc --version --verbose | grep "LLVM version" | cut + -d':' -f2 | xargs)" >> $GITHUB_ENV - name: Install LLVM and Clang uses: KyleMayes/install-llvm-action@v2 with: version: ${{ env.LLVM_VERSION }} - force-url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-macOS-${{ matrix.llvm }}.tar.xz + force-url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ + env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-macOS-${{ + matrix.llvm }}.tar.xz - name: Build run: | cargo install cargo-bundle @@ -184,7 +193,7 @@ jobs: - name: Sign Bundle Dev if: ${{ github.ref_type != 'tag' }} run: | - codesign -f --entitlements data/entitlements_dev.plist --deep --timestamp --options runtime -s - target/${{ matrix.target }}/release/bundle/osx/Gopher64.app + codesign -f --entitlements data/macos/entitlements_dev.plist --deep --timestamp --options runtime -s - target/${{ matrix.target }}/release/bundle/osx/Gopher64.app - name: Import Codesign Certs if: ${{ github.ref_type == 'tag' }} uses: apple-actions/import-codesign-certs@v6 @@ -194,7 +203,8 @@ jobs: - name: Sign Bundle Release if: ${{ github.ref_type == 'tag' }} run: | - codesign -f --entitlements data/entitlements_prod.plist --deep --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app + cp data/macos/embedded.provisionprofile target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/embedded.provisionprofile + codesign -f --entitlements data/macos/entitlements_prod.plist --deep --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app zip -r gopher64-${{ matrix.arch }}.zip target/${{ matrix.target }}/release/bundle/osx/Gopher64.app xcrun notarytool submit --wait --apple-id "${{ secrets.APPLE_ID }}" --team-id "${{ secrets.APPLE_DEVELOPER_ID }}" --password "${{ secrets.APPLE_APP_PASSWORD }}" gopher64-${{ matrix.arch }}.zip xcrun stapler staple target/${{ matrix.target }}/release/bundle/osx/Gopher64.app diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 380a46d..cfe8745 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -2,9 +2,9 @@ name: Rust-lint on: push: - branches: ["main"] + branches: [ "main" ] pull_request: - branches: ["main"] + branches: [ "main" ] permissions: contents: read @@ -23,24 +23,27 @@ jobs: with: components: clippy, rustfmt - name: Set LLVM_VERSION - run: echo "LLVM_VERSION=$(rustc --version --verbose | grep "LLVM version" | cut -d':' -f2 | xargs)" >> $GITHUB_ENV + run: echo "LLVM_VERSION=$(rustc --version --verbose | grep "LLVM version" | cut + -d':' -f2 | xargs)" >> $GITHUB_ENV - name: Install SDL Dependencies # https://wiki.libsdl.org/SDL3/README-linux#build-dependencies uses: awalsh128/cache-apt-pkgs-action@v1 with: - packages: build-essential git make \ - pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \ - libaudio-dev libfribidi-dev libjack-dev libsndio-dev libx11-dev libxext-dev \ - libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libxtst-dev \ - libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ - libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev libthai-dev \ - libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev libfreetype-dev libfontconfig-dev + packages: build-essential git make pkg-config cmake ninja-build + gnome-desktop-testing libasound2-dev libpulse-dev libaudio-dev + libfribidi-dev libjack-dev libsndio-dev libx11-dev libxext-dev + libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev + libxtst-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev + libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev + libudev-dev libthai-dev libpipewire-0.3-dev libwayland-dev + libdecor-0-dev liburing-dev libfreetype-dev libfontconfig-dev version: lint-1.0 - name: Install LLVM and Clang uses: KyleMayes/install-llvm-action@v2 with: version: ${{ env.LLVM_VERSION }} - force-url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-Linux-X64.tar.xz + force-url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ + env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-Linux-X64.tar.xz - name: Rustfmt Check uses: actions-rust-lang/rustfmt@v1 - name: Lint diff --git a/data/macos/embedded.provisionprofile b/data/macos/embedded.provisionprofile new file mode 100644 index 0000000000000000000000000000000000000000..b2cd43fad3749d232248bb158fbb91df09872e17 GIT binary patch literal 12309 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 Date: Sat, 18 Apr 2026 10:08:30 +0200 Subject: [PATCH 0779/1117] update MACOSX_DEPLOYMENT_TARGET (#768) --- .github/workflows/build.yml | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 981f958..a1a2384 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -189,7 +189,7 @@ jobs: @executable_path/../Frameworks/libpng16.16.dylib target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/Frameworks/libfreetype.6.dylib env: NETPLAY_ID: ${{ secrets.NETPLAY_ID }} - MACOSX_DEPLOYMENT_TARGET: "15.0" + MACOSX_DEPLOYMENT_TARGET: "15.7" - name: Sign Bundle Dev if: ${{ github.ref_type != 'tag' }} run: | diff --git a/Cargo.toml b/Cargo.toml index e937085..dc45a1e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -58,4 +58,4 @@ identifier = "io.github.gopher64.gopher64" category = "public.app-category.games" icon = ["data/icon/gopher64_128x128.png","data/icon/gopher64_256x256.png","data/icon/gopher64_512x512.png"] osx_frameworks = ["/opt/homebrew/opt/molten-vk/lib/libMoltenVK.dylib","/opt/homebrew/opt/freetype/lib/libfreetype.6.dylib","/opt/homebrew/opt/libpng/lib/libpng16.16.dylib"] -osx_minimum_system_version = "15.0" +osx_minimum_system_version = "15.7" From 5a91d09f9e046846fd9b6204735c1d44f93627a1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 18 Apr 2026 16:48:55 +0200 Subject: [PATCH 0780/1117] improved transferpak setup (#769) * improved transferpak setup * more * more * more --- src/main.rs | 38 +++++----- src/retroachievements.rs | 8 +-- src/ui/cheats.rs | 2 +- src/ui/config.rs | 4 ++ src/ui/gui.rs | 116 +++++++++++++++++-------------- src/ui/gui/appwindow.slint | 6 ++ src/ui/gui/controller_page.slint | 4 ++ src/ui/netplay.rs | 18 ++--- src/ui/vru.rs | 2 +- 9 files changed, 109 insertions(+), 89 deletions(-) diff --git a/src/main.rs b/src/main.rs index ba06bd4..8d6fc06 100644 --- a/src/main.rs +++ b/src/main.rs @@ -30,10 +30,6 @@ struct Args { netplay_peer_addr: Option, #[arg(long, value_name = "NETPLAY_PLAYER_NUMBER", hide = true)] netplay_player_number: Option, - #[arg(long, value_name = "GB_ROM_PATH", hide = true)] - gb_rom: Option>, - #[arg(long, value_name = "GB_RAM_PATH", hide = true)] - gb_ram: Option>, #[arg( long, value_name = "PROFILE_NAME", @@ -184,16 +180,15 @@ async fn main() -> std::io::Result<()> { { device.netplay = Some(netplay::init(peer_addr.parse().unwrap(), player_number)); } else { - if let Some(gb_roms) = &args.gb_rom - && let Some(gb_rams) = &args.gb_ram - { - for i in 0..4 { - if let Some(gb_rom) = gb_roms.get(i) - && let Some(gb_ram) = gb_rams.get(i) - { - device.transferpaks[i].cart.rom = std::fs::read(gb_rom).unwrap(); - device.transferpaks[i].cart.ram = std::fs::read(gb_ram).unwrap(); - } + for i in 0..4 { + if device.ui.config.input.transfer_pak[i] + && !device.ui.config.input.gb_rom_path[i].is_empty() + && !device.ui.config.input.gb_ram_path[i].is_empty() + { + device.transferpaks[i].cart.rom = + std::fs::read(&device.ui.config.input.gb_rom_path[i]).unwrap(); + device.transferpaks[i].cart.ram = + std::fs::read(&device.ui.config.input.gb_ram_path[i]).unwrap(); } } @@ -229,12 +224,17 @@ async fn main() -> std::io::Result<()> { if device.netplay.is_some() { netplay::close(&mut device); - } else if let Some(gb_rams) = &args.gb_ram { + } else { for i in 0..4 { - if let Some(gb_ram) = gb_rams.get(i) { - tokio::fs::write(gb_ram, &device.transferpaks[i].cart.ram) - .await - .unwrap(); + if device.ui.config.input.transfer_pak[i] + && !device.ui.config.input.gb_ram_path[i].is_empty() + { + tokio::fs::write( + &device.ui.config.input.gb_ram_path[i], + &device.transferpaks[i].cart.ram, + ) + .await + .unwrap(); } } } diff --git a/src/retroachievements.rs b/src/retroachievements.rs index 25571cd..764067d 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -213,8 +213,8 @@ pub fn ra_window(app: &ui::gui::AppWindow) { if !enabled { unsafe { ra_logout_user() }; RAConfig { - username: "".into(), - token: "".into(), + username: String::new(), + token: String::new(), enabled, hardcore, challenge, @@ -232,8 +232,8 @@ pub fn ra_window(app: &ui::gui::AppWindow) { } } else { RAConfig { - username: "".into(), - token: "".into(), + username: String::new(), + token: String::new(), enabled, hardcore, challenge, diff --git a/src/ui/cheats.rs b/src/ui/cheats.rs index b55c491..0700180 100644 --- a/src/ui/cheats.rs +++ b/src/ui/cheats.rs @@ -149,7 +149,7 @@ fn clear_cheats(weak: &slint::Weak, clear_name: bool) { > = std::rc::Rc::new(cheats_vec); handle.set_cheats(slint::ModelRc::from(cheats_model)); if clear_name { - handle.set_cheat_game_name("".into()); + handle.set_cheat_game_name(String::new().into()); } }) .unwrap(); diff --git a/src/ui/config.rs b/src/ui/config.rs index 133a7ba..64a819a 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -39,6 +39,8 @@ pub struct Input { pub controller_assignment: [Option; 4], pub controller_enabled: [bool; 4], pub transfer_pak: [bool; 4], + pub gb_rom_path: [String; 4], + pub gb_ram_path: [String; 4], pub emulate_vru: bool, } @@ -140,6 +142,8 @@ impl Config { input_profiles, controller_enabled: [true, false, false, false], transfer_pak: [false, false, false, false], + gb_rom_path: [String::new(), String::new(), String::new(), String::new()], + gb_ram_path: [String::new(), String::new(), String::new(), String::new()], emulate_vru: false, }, video: Video { diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 86a0771..0465a2d 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -18,11 +18,6 @@ pub struct NetplayDevice { pub player_number: u8, } -pub struct GbPaths { - pub rom: [Option; 4], - pub ram: [Option; 4], -} - #[derive(Clone)] pub struct GameSettings { pub overclock: bool, @@ -175,6 +170,22 @@ fn controller_window( std::rc::Rc::new(slint::VecModel::from(config.input.transfer_pak.to_vec())); app.set_transferpak(slint::ModelRc::from(transferpak_enabled_model)); + let gb_rom_paths = slint::VecModel::default(); + for gb_rom_path in config.input.gb_rom_path.iter() { + gb_rom_paths.push(gb_rom_path.into()); + } + let gb_rom_path_model: std::rc::Rc> = + std::rc::Rc::new(gb_rom_paths); + app.set_gb_rom_paths(slint::ModelRc::from(gb_rom_path_model)); + + let gb_ram_paths = slint::VecModel::default(); + for gb_ram_path in config.input.gb_ram_path.iter() { + gb_ram_paths.push(gb_ram_path.into()); + } + let gb_ram_path_model: std::rc::Rc> = + std::rc::Rc::new(gb_ram_paths); + app.set_gb_ram_paths(slint::ModelRc::from(gb_ram_path_model)); + update_input_profiles(&app.as_weak(), config); let controllers = slint::VecModel::default(); @@ -247,6 +258,51 @@ fn controller_window( }); dialog.show().unwrap(); }); + let weak_app2 = app.as_weak(); + app.on_transferpak_toggled(move |player, enabled| { + if enabled { + let select_gb_rom = rfd::AsyncFileDialog::new() + .set_title(format!("GB ROM P{}", player + 1)) + .add_filter("GB ROM files", &["gb", "gbc", "GB", "GBC"]) + .pick_file(); + let select_gb_ram = rfd::AsyncFileDialog::new() + .set_title(format!("GB RAM P{}", player + 1)) + .add_filter("GB RAM files", &["sav", "ram", "srm", "SAV", "RAM", "SRM"]) + .pick_file(); + let weak_app3 = weak_app2.clone(); + tokio::spawn(async move { + if let (Some(gb_rom), Some(gb_ram)) = (select_gb_rom.await, select_gb_ram.await) { + weak_app3 + .upgrade_in_event_loop(move |handle| { + let rom_paths = handle.get_gb_rom_paths(); + let ram_paths = handle.get_gb_ram_paths(); + rom_paths.set_row_data( + player as usize, + gb_rom.path().to_str().unwrap().into(), + ); + ram_paths.set_row_data( + player as usize, + gb_ram.path().to_str().unwrap().into(), + ); + handle.set_gb_rom_paths(rom_paths); + handle.set_gb_ram_paths(ram_paths); + }) + .unwrap(); + } else { + weak_app3 + .upgrade_in_event_loop(move |handle| { + let rom_paths = handle.get_gb_rom_paths(); + let ram_paths = handle.get_gb_ram_paths(); + rom_paths.set_row_data(player as usize, String::new().into()); + ram_paths.set_row_data(player as usize, String::new().into()); + handle.set_gb_rom_paths(rom_paths); + handle.set_gb_ram_paths(ram_paths); + }) + .unwrap(); + } + }); + } + }); } pub fn save_settings(app: &AppWindow, controller_paths: &[Option]) { @@ -267,6 +323,8 @@ pub fn save_settings(app: &AppWindow, controller_paths: &[Option]) { } for (i, transferpak_enabled) in app.get_transferpak().iter().enumerate() { config.input.transfer_pak[i] = transferpak_enabled; + config.input.gb_rom_path[i] = app.get_gb_rom_paths().row_data(i).unwrap().to_string(); + config.input.gb_ram_path[i] = app.get_gb_ram_paths().row_data(i).unwrap().to_string(); } for (i, input_profile_binding) in app.get_selected_profile_binding().iter().enumerate() { config.input.input_profile_binding[i] = app @@ -331,7 +389,6 @@ pub fn app_window() { } pub fn run_rom( - gb_paths: GbPaths, file_path: std::path::PathBuf, game_settings: GameSettings, netplay: Option, @@ -381,17 +438,6 @@ pub fn run_rom( } } - for i in 0..4 { - if gb_paths.rom[i].is_some() && gb_paths.ram[i].is_some() { - command.args([ - "--gb-rom", - gb_paths.rom[i].as_ref().unwrap().to_str().unwrap(), - "--gb-ram", - gb_paths.ram[i].as_ref().unwrap().to_str().unwrap(), - ]); - } - } - if !command .arg(file_path.to_str().unwrap()) .status() @@ -426,25 +472,6 @@ fn open_rom(app: &AppWindow) { .set_title("Select ROM") .add_filter("ROM files", &N64_EXTENSIONS) .pick_file(); - let mut select_gb_rom = [None, None, None, None]; - let mut select_gb_ram = [None, None, None, None]; - - for (i, transfer_pak_enabled) in app.get_transferpak().iter().enumerate() { - if transfer_pak_enabled { - select_gb_rom[i] = Some( - rfd::AsyncFileDialog::new() - .set_title(format!("GB ROM P{}", i + 1)) - .add_filter("GB ROM files", &["gb", "gbc", "GB", "GBC"]) - .pick_file(), - ); - select_gb_ram[i] = Some( - rfd::AsyncFileDialog::new() - .set_title(format!("GB RAM P{}", i + 1)) - .add_filter("GB RAM files", &["sav", "ram", "srm", "SAV", "RAM", "SRM"]) - .pick_file(), - ); - } - } let overclock = app.get_overclock_n64_cpu(); let disable_expansion_pak = app.get_disable_expansion_pak(); @@ -456,24 +483,7 @@ fn open_rom(app: &AppWindow) { let weak = app.as_weak(); tokio::spawn(async move { if let Some(file) = select_rom.await { - let mut gb_rom_path = [None, None, None, None]; - let mut gb_ram_path = [None, None, None, None]; - - for i in 0..4 { - if let (Some(gb_rom), Some(gb_ram)) = - (select_gb_rom[i].as_mut(), select_gb_ram[i].as_mut()) - && let (Some(gb_rom), Some(gb_ram)) = (gb_rom.await, gb_ram.await) - { - gb_rom_path[i] = Some(gb_rom.path().to_path_buf()); - gb_ram_path[i] = Some(gb_ram.path().to_path_buf()); - } - } - run_rom( - GbPaths { - rom: gb_rom_path, - ram: gb_ram_path, - }, file.path().to_path_buf(), GameSettings { overclock, diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index dc7504f..abe1dcd 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -28,6 +28,7 @@ export component AppWindow inherits Window { callback open_rom_button_clicked; callback saves_folder_button_clicked; callback input_profile_button_clicked; + callback transferpak_toggled(int,bool); callback create_session_button_clicked; callback join_session_button_clicked; callback netplay_discord_button_clicked; @@ -63,6 +64,8 @@ export component AppWindow inherits Window { in-out property controller_enabled <=> ControllerData.controller_enabled; in-out property controller_changed <=> ControllerData.controller_changed; in-out property transferpak <=> ControllerData.transferpak; + in-out property gb_rom_paths <=> ControllerData.gb_rom_paths; + in-out property gb_ram_paths <=> ControllerData.gb_ram_paths; in-out property selected_profile_binding <=> ControllerData.selected_profile_binding; in-out property input_profiles <=> ControllerData.input_profiles; in-out property controller_names <=> ControllerData.controller_names; @@ -106,6 +109,9 @@ export component AppWindow inherits Window { input_profile_button_clicked => { input_profile_button_clicked(); } + transferpak_toggled(player,enabled) => { + transferpak_toggled(player,enabled); + } } if(side-bar.current-item == 2): Netplay { create_session_button_clicked => { diff --git a/src/ui/gui/controller_page.slint b/src/ui/gui/controller_page.slint index 47eb3f1..07f705d 100644 --- a/src/ui/gui/controller_page.slint +++ b/src/ui/gui/controller_page.slint @@ -9,6 +9,8 @@ export global ControllerData { in-out property emulate_vru; in-out property <[bool]> controller_enabled; in-out property <[bool]> transferpak; + in-out property <[string]> gb_rom_paths; + in-out property <[string]> gb_ram_paths; in-out property <[int]> selected_profile_binding: [-1, -1, -1, -1]; in-out property <[string]> input_profiles; in-out property <[string]> controller_names; @@ -19,6 +21,7 @@ export global ControllerData { export component ControllerConfig inherits Page { callback input_profile_button_clicked; + callback transferpak_toggled(int,bool); title: @tr("Controller Configuration"); VerticalBox { @@ -83,6 +86,7 @@ export component ControllerConfig inherits Page { checked: ControllerData.transferpak[player]; toggled => { ControllerData.transferpak[player] = self.checked; + transferpak_toggled(player,self.checked); } } } diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 80aedb8..4be507c 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -1,8 +1,8 @@ use crate::device; use crate::ui; use crate::ui::gui::{ - AppWindow, CustomNetplayServer, DispatcherDialog, ErrorDialog, GameSettings, GbPaths, - NetplayCreate, NetplayDevice, NetplayJoin, NetplayWait, RASettings, run_rom, save_settings, + AppWindow, CustomNetplayServer, DispatcherDialog, ErrorDialog, GameSettings, NetplayCreate, + NetplayDevice, NetplayJoin, NetplayWait, RASettings, run_rom, save_settings, }; use futures::{SinkExt, StreamExt}; use sha2::{Digest, Sha256}; @@ -192,7 +192,7 @@ fn select_rom( let mut game_name = ui::storage::get_game_name(&rom_contents); let game_crc = ui::storage::get_game_crc(&rom_contents); let cheats = ui::config::Cheats::new(); - let mut parsed_cheats = "".to_string(); + let mut parsed_cheats = String::new(); if let Some(game_cheats) = cheats.cheats.get(&game_crc) && !game_cheats.is_empty() { @@ -224,10 +224,10 @@ fn select_rom( message_dialog.set_text("Could not read ROM".into()); message_dialog.show().unwrap(); - handle.set_game_name("".into()); - handle.set_game_hash("".into()); - handle.set_game_cheats("".into()); - handle.set_rom_path("".into()); + handle.set_game_name(String::new().into()); + handle.set_game_hash(String::new().into()); + handle.set_game_cheats(String::new().into()); + handle.set_rom_path(String::new().into()); }) .unwrap(); } @@ -1101,10 +1101,6 @@ fn setup_wait_window( } run_rom( - GbPaths { - rom: [None, None, None, None], - ram: [None, None, None, None], - }, handle.get_rom_path().as_str().into(), GameSettings { overclock: game_settings.overclock, diff --git a/src/ui/vru.rs b/src/ui/vru.rs index 486a4f7..7e03a79 100644 --- a/src/ui/vru.rs +++ b/src/ui/vru.rs @@ -20,7 +20,7 @@ pub fn prompt_for_match(words: &[String], frame_time: f64) -> u16 { }); vru_dialog.window().on_close_requested(move || { - tx.try_send("".to_string()).unwrap(); + tx.try_send(String::new()).unwrap(); slint::CloseRequestResponse::HideWindow }); From bc3dd4d39a4ef89ce074c1b7a0ad86dbadbc4d72 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 18 Apr 2026 21:55:37 +0200 Subject: [PATCH 0781/1117] Hotkey for onscreen FPS (#770) * fps counter * more --- build.rs | 1 + parallel-rdp/interface.cpp | 42 ++++++++++++++++++++++++++++++++++++++ parallel-rdp/interface.hpp | 1 + src/device.rs | 2 -- src/device/vi.rs | 17 ++++----------- src/ui.rs | 10 +++++++++ src/ui/video.rs | 29 ++++++++++++++++++++++++++ 7 files changed, 87 insertions(+), 15 deletions(-) diff --git a/build.rs b/build.rs index fe85e5b..ce72218 100644 --- a/build.rs +++ b/build.rs @@ -198,6 +198,7 @@ fn main() { .allowlist_function("rdp_state_size") .allowlist_function("rdp_save_state") .allowlist_function("rdp_load_state") + .allowlist_function("rdp_set_fps") .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) .generate() .expect("Unable to generate bindings"); diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 0f78472..58f57bb 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -75,6 +75,11 @@ typedef struct { FrameBufferInfo frame_buffer_info; } RDP_DEVICE; +typedef struct { + uint32_t fps; + uint32_t vis; +} FPS_DATA; + typedef struct { std::string message; Vulkan::ImageHandle image; @@ -106,6 +111,9 @@ static Vulkan::ImageHandle achievement_progress_indicator_image; static std::map leaderboard_trackers; static bool display_challenge_indicator; +static bool display_fps; +static Vulkan::ImageHandle fps_image; + #define MESSAGE_TIME 3000 // 3 seconds typedef struct { @@ -147,6 +155,9 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { if (gfx_info.fullscreen) callback.emu_running = false; break; + case SDL_SCANCODE_F1: + display_fps = !display_fps; + break; case SDL_SCANCODE_F4: crop_letterbox = !crop_letterbox; break; @@ -331,12 +342,15 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, leaderboard_trackers.clear(); achievement_challenge_indicator_image = Vulkan::ImageHandle(); achievement_progress_indicator_image = Vulkan::ImageHandle(); + fps_image = Vulkan::ImageHandle(); + display_fps = false; } void rdp_close() { messages = std::queue(); achievement_challenge_indicator_image = Vulkan::ImageHandle(); achievement_progress_indicator_image = Vulkan::ImageHandle(); + fps_image = Vulkan::ImageHandle(); if (wsi) wsi->end_frame(); @@ -421,6 +435,18 @@ static void draw_indicator(CommandBufferHandle cmd, cmd->draw(3); } +static void draw_fps(CommandBufferHandle cmd, Vulkan::ImageHandle fps_image, + VkViewport &vp) { + cmd->set_texture(0, 0, fps_image->get_view(), + Vulkan::StockSampler::NearestClamp); + vp.y = vp.y + vp.height - fps_image->get_height(); + vp.height = fps_image->get_height(); + vp.width = fps_image->get_width(); + cmd->set_viewport(vp); + + cmd->draw(3); +} + static void render_frame(Vulkan::Device &device) { RDP::ScanoutOptions options = {}; options.persist_frame_on_invalid_input = true; @@ -517,6 +543,10 @@ static void render_frame(Vulkan::Device &device) { display_challenge_indicator) { draw_indicator(cmd, achievement_challenge_indicator_image, vp); } + + if (messages.empty() && display_fps && fps_image) { + draw_fps(cmd, fps_image, vp); + } } cmd->end_render_pass(); @@ -822,6 +852,18 @@ uint64_t rdp_process_commands() { return interrupt_timer; } +void rdp_set_fps_callback(void *userdata) { + FPS_DATA *data = (FPS_DATA *)userdata; + fps_image = create_message_image( + wsi->get_device(), 0, message_font, + std::format("FPS: {} VI/S: {}", data->fps, data->vis).c_str()); +} + +void rdp_set_fps(uint32_t fps, uint32_t vis) { + FPS_DATA data = {fps, vis}; + SDL_RunOnMainThread(rdp_set_fps_callback, &data, true); +} + static void update_challenge_indicator() { std::string message; for (const auto &leaderboard_tracker : leaderboard_trackers) { diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 7182a6b..28bcb22 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -50,6 +50,7 @@ void rdp_check_framebuffers(uint32_t address, uint32_t length); size_t rdp_state_size(); void rdp_save_state(uint8_t *state); void rdp_load_state(const uint8_t *state); +void rdp_set_fps(uint32_t fps, uint32_t vis); void achievement_challenge_indicator_add(const char *achievement_title); void achievement_challenge_indicator_remove(const char *achievement_title); diff --git a/src/device.rs b/src/device.rs index c489555..26cf8a8 100644 --- a/src/device.rs +++ b/src/device.rs @@ -482,8 +482,6 @@ impl Device { enable_speed_limiter: true, next_pace_deadline: None, vi_counter: 0, - last_origin: 0, - internal_frame_counter: 0, min_wait_time: std::time::Duration::from_secs(1), frame_time: 0.0, limit_freq: 2, diff --git a/src/device/vi.rs b/src/device/vi.rs index b75723b..6a6b90a 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -27,8 +27,6 @@ pub struct Vi { pub count_per_scanline: u64, pub enable_speed_limiter: bool, pub vi_counter: u64, - pub last_origin: u32, - pub internal_frame_counter: u64, pub min_wait_time: std::time::Duration, pub frame_time: f64, pub limit_freq: u64, @@ -110,10 +108,10 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } } VI_ORIGIN_REG => { + let current_origin = device.vi.regs[reg as usize]; device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); - if device.vi.regs[reg as usize] != device.vi.last_origin { - device.vi.last_origin = device.vi.regs[reg as usize]; - device.vi.internal_frame_counter += 1; + if current_origin != device.vi.regs[reg as usize] { + let _ = device.ui.video.fps_tx.try_send(true); } } _ => { @@ -129,6 +127,7 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { } ui::video::render_frame(); + let _ = device.ui.video.vis_tx.try_send(true); retroachievements::do_frame(); @@ -159,14 +158,6 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { unsafe { sdl3_sys::events::SDL_PumpEvents() }; - /* - let vis = if device.cart.pal { 50 } else { 60 }; - if device.vi.vi_counter % vis == 0 { - println!("FPS: {}", device.vi.internal_frame_counter); - device.vi.internal_frame_counter = 0; - } - */ - /* toggle vi field if in interlaced mode */ device.vi.field ^= (device.vi.regs[VI_STATUS_REG as usize] >> 6) & 0x1; diff --git a/src/ui.rs b/src/ui.rs index 19ad343..4b95594 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -36,6 +36,10 @@ pub struct Storage { pub struct Video { pub window: *mut sdl3_sys::video::SDL_Window, pub fullscreen: bool, + pub fps_tx: tokio::sync::mpsc::Sender, + pub fps_rx: Option>, + pub vis_tx: tokio::sync::mpsc::Sender, + pub vis_rx: Option>, } pub struct Usb { @@ -113,6 +117,8 @@ impl Ui { fn construct_ui(joysticks: Vec, with_sdl: bool) -> Ui { let dirs = get_dirs(); + let (fps_tx, fps_rx) = tokio::sync::mpsc::channel(1000); + let (vis_tx, vis_rx) = tokio::sync::mpsc::channel(1000); Ui { input: Input { controllers: [ @@ -190,6 +196,10 @@ impl Ui { video: Video { window: std::ptr::null_mut(), fullscreen: false, + fps_tx, + fps_rx: Some(fps_rx), + vis_tx, + vis_rx: Some(vis_rx), }, usb: Usb { usb_tx: None, diff --git a/src/ui/video.rs b/src/ui/video.rs index b67e656..3cb7e9d 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -102,6 +102,35 @@ pub fn init(device: &mut device::Device) { device.netplay.is_some(), ) } + + fps_counter(&mut device.ui); +} + +fn fps_counter(ui: &mut ui::Ui) { + let mut fps_rx = ui.video.fps_rx.take().unwrap(); + let mut vis_rx = ui.video.vis_rx.take().unwrap(); + tokio::spawn(async move { + loop { + let mut fps: u32 = 0; + let mut vis: u32 = 0; + loop { + match fps_rx.try_recv() { + Ok(_fps_update) => fps += 1, + Err(tokio::sync::mpsc::error::TryRecvError::Empty) => break, + Err(tokio::sync::mpsc::error::TryRecvError::Disconnected) => return, + } + } + loop { + match vis_rx.try_recv() { + Ok(_vis_update) => vis += 1, + Err(tokio::sync::mpsc::error::TryRecvError::Empty) => break, + Err(tokio::sync::mpsc::error::TryRecvError::Disconnected) => return, + } + } + unsafe { rdp_set_fps(fps, vis) }; + tokio::time::sleep(std::time::Duration::from_secs(1)).await; + } + }); } pub fn close(ui: &ui::Ui) { From d856499f59dc90e0dac95dc2f033c56ab826a30b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 19 Apr 2026 07:57:57 +0200 Subject: [PATCH 0782/1117] fix image positioning (#772) * fix image positioning * more --- parallel-rdp/interface.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 58f57bb..71dbf6a 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -422,8 +422,7 @@ static void calculate_viewport(float *x, float *y, float *width, float *height, } static void draw_indicator(CommandBufferHandle cmd, - Vulkan::ImageHandle indicator_image, - VkViewport &vp) { + Vulkan::ImageHandle indicator_image, VkViewport vp) { cmd->set_texture(0, 0, indicator_image->get_view(), Vulkan::StockSampler::NearestClamp); vp.x = vp.x + vp.width - indicator_image->get_width(); @@ -435,8 +434,7 @@ static void draw_indicator(CommandBufferHandle cmd, cmd->draw(3); } -static void draw_fps(CommandBufferHandle cmd, Vulkan::ImageHandle fps_image, - VkViewport &vp) { +static void draw_fps(CommandBufferHandle cmd, VkViewport vp) { cmd->set_texture(0, 0, fps_image->get_view(), Vulkan::StockSampler::NearestClamp); vp.y = vp.y + vp.height - fps_image->get_height(); @@ -545,7 +543,7 @@ static void render_frame(Vulkan::Device &device) { } if (messages.empty() && display_fps && fps_image) { - draw_fps(cmd, fps_image, vp); + draw_fps(cmd, vp); } } @@ -855,13 +853,15 @@ uint64_t rdp_process_commands() { void rdp_set_fps_callback(void *userdata) { FPS_DATA *data = (FPS_DATA *)userdata; fps_image = create_message_image( - wsi->get_device(), 0, message_font, + wsi->get_device(), 0, achievement_challenge_indicator_font, std::format("FPS: {} VI/S: {}", data->fps, data->vis).c_str()); } void rdp_set_fps(uint32_t fps, uint32_t vis) { - FPS_DATA data = {fps, vis}; - SDL_RunOnMainThread(rdp_set_fps_callback, &data, true); + if (display_fps) { + FPS_DATA data = {fps, vis}; + SDL_RunOnMainThread(rdp_set_fps_callback, &data, true); + } } static void update_challenge_indicator() { From 66abd14c3b8573785bae3cfd7aa710aae75b76f8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 19 Apr 2026 14:09:27 +0200 Subject: [PATCH 0783/1117] add small note to netplay join (#773) --- src/ui/gui/netplay_join.slint | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/gui/netplay_join.slint b/src/ui/gui/netplay_join.slint index 5106c24..9b36bcb 100644 --- a/src/ui/gui/netplay_join.slint +++ b/src/ui/gui/netplay_join.slint @@ -27,7 +27,7 @@ export component NetplayJoin inherits Window { HorizontalBox { VerticalBox { Text { - text: @tr("Player Name:"); + text: @tr("Player Name (required):"); } LineEdit { From 805bcba249136bc1ca1511cdca0ee46f00227c94 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 19 Apr 2026 09:00:50 -0600 Subject: [PATCH 0784/1117] run VRU dialog in main thread (#774) * run VRU dialog in main thread * more --- src/ui/cheats.rs | 25 ++++---------------- src/ui/gui.rs | 42 +++++++++++---------------------- src/ui/netplay.rs | 42 ++++++++++++--------------------- src/ui/vru.rs | 59 ++++++++++++++++++++++------------------------- 4 files changed, 60 insertions(+), 108 deletions(-) diff --git a/src/ui/cheats.rs b/src/ui/cheats.rs index 0700180..6b4f4c1 100644 --- a/src/ui/cheats.rs +++ b/src/ui/cheats.rs @@ -77,16 +77,7 @@ pub fn cheats_window(app: &AppWindow) { options, )); } - #[allow(clippy::type_complexity)] - let cheats_model: std::rc::Rc< - slint::VecModel<( - slint::SharedString, - bool, - slint::SharedString, - slint::ModelRc<(bool, slint::SharedString)>, - )>, - > = std::rc::Rc::new(cheats_vec); - handle.set_cheats(slint::ModelRc::from(cheats_model)); + handle.set_cheats(slint::ModelRc::from(std::rc::Rc::new(cheats_vec))); }) .unwrap(); } else { @@ -137,17 +128,9 @@ pub fn cheats_window(app: &AppWindow) { fn clear_cheats(weak: &slint::Weak, clear_name: bool) { weak.upgrade_in_event_loop(move |handle| { - let cheats_vec = slint::VecModel::default(); - #[allow(clippy::type_complexity)] - let cheats_model: std::rc::Rc< - slint::VecModel<( - slint::SharedString, - bool, - slint::SharedString, - slint::ModelRc<(bool, slint::SharedString)>, - )>, - > = std::rc::Rc::new(cheats_vec); - handle.set_cheats(slint::ModelRc::from(cheats_model)); + handle.set_cheats(slint::ModelRc::from(std::rc::Rc::new( + slint::VecModel::default(), + ))); if clear_name { handle.set_cheat_game_name(String::new().into()); } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 0465a2d..e7e5325 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -132,13 +132,10 @@ fn update_input_profiles(weak: &slint::Weak, config: &ui::config::Con for profile in profiles { input_profiles.push(profile.into()); } - let input_profiles_model: std::rc::Rc> = - std::rc::Rc::new(input_profiles); - handle.set_input_profiles(slint::ModelRc::from(input_profiles_model)); + handle.set_input_profiles(slint::ModelRc::from(std::rc::Rc::new(input_profiles))); - let input_profile_binding_model: std::rc::Rc> = - std::rc::Rc::new(profile_bindings); - handle.set_selected_profile_binding(slint::ModelRc::from(input_profile_binding_model)); + handle + .set_selected_profile_binding(slint::ModelRc::from(std::rc::Rc::new(profile_bindings))); // this is a workaround to make the input profile combobox update handle.set_blank_profiles(true); @@ -159,32 +156,27 @@ fn controller_window( controller_names: &Vec, controller_paths: &[Option], ) { - let controller_enabled_model: std::rc::Rc> = std::rc::Rc::new( - slint::VecModel::from(config.input.controller_enabled.to_vec()), - ); app.set_emulate_vru(config.input.emulate_vru); - app.set_controller_enabled(slint::ModelRc::from(controller_enabled_model)); + app.set_controller_enabled(slint::ModelRc::from(std::rc::Rc::new( + slint::VecModel::from(config.input.controller_enabled.to_vec()), + ))); - let transferpak_enabled_model: std::rc::Rc> = - std::rc::Rc::new(slint::VecModel::from(config.input.transfer_pak.to_vec())); - app.set_transferpak(slint::ModelRc::from(transferpak_enabled_model)); + app.set_transferpak(slint::ModelRc::from(std::rc::Rc::new( + slint::VecModel::from(config.input.transfer_pak.to_vec()), + ))); let gb_rom_paths = slint::VecModel::default(); for gb_rom_path in config.input.gb_rom_path.iter() { gb_rom_paths.push(gb_rom_path.into()); } - let gb_rom_path_model: std::rc::Rc> = - std::rc::Rc::new(gb_rom_paths); - app.set_gb_rom_paths(slint::ModelRc::from(gb_rom_path_model)); + app.set_gb_rom_paths(slint::ModelRc::from(std::rc::Rc::new(gb_rom_paths))); let gb_ram_paths = slint::VecModel::default(); for gb_ram_path in config.input.gb_ram_path.iter() { gb_ram_paths.push(gb_ram_path.into()); } - let gb_ram_path_model: std::rc::Rc> = - std::rc::Rc::new(gb_ram_paths); - app.set_gb_ram_paths(slint::ModelRc::from(gb_ram_path_model)); + app.set_gb_ram_paths(slint::ModelRc::from(std::rc::Rc::new(gb_ram_paths))); update_input_profiles(&app.as_weak(), config); @@ -192,9 +184,7 @@ fn controller_window( for controller in controller_names { controllers.push(controller.into()); } - let controller_names_model: std::rc::Rc> = - std::rc::Rc::new(controllers); - app.set_controller_names(slint::ModelRc::from(controller_names_model)); + app.set_controller_names(slint::ModelRc::from(std::rc::Rc::new(controllers))); let controller_changed = slint::VecModel::default(); let selected_controllers = slint::VecModel::default(); @@ -212,13 +202,9 @@ fn controller_window( } controller_changed.push(false); } - let selected_controllers_model: std::rc::Rc> = - std::rc::Rc::new(selected_controllers); - app.set_selected_controller(slint::ModelRc::from(selected_controllers_model)); + app.set_selected_controller(slint::ModelRc::from(std::rc::Rc::new(selected_controllers))); - let controller_changed_model: std::rc::Rc> = - std::rc::Rc::new(controller_changed); - app.set_controller_changed(slint::ModelRc::from(controller_changed_model)); + app.set_controller_changed(slint::ModelRc::from(std::rc::Rc::new(controller_changed))); let weak_app = app.as_weak(); app.on_input_profile_button_clicked(move || { diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 4be507c..a9b00d5 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -159,12 +159,8 @@ fn populate_server_names(weak: slin } server_names.push("Custom".into()); handle.refresh_sessions(); - let server_names_model: std::rc::Rc> = - std::rc::Rc::new(server_names); - let server_urls_model: std::rc::Rc> = - std::rc::Rc::new(server_urls); - handle.set_server_names(slint::ModelRc::from(server_names_model)); - handle.set_server_urls(slint::ModelRc::from(server_urls_model)); + handle.set_server_names(slint::ModelRc::from(std::rc::Rc::new(server_names))); + handle.set_server_urls(slint::ModelRc::from(std::rc::Rc::new(server_urls))); }) .unwrap(); }); @@ -583,26 +579,19 @@ fn update_sessions(weak: slint::Weak) { .upgrade_in_event_loop(move |handle| { let sessions_vec = slint::VecModel::default(); for session in sessions.iter() { - let session_vec = slint::VecModel::from(session.to_vec()); - let session_model: std::rc::Rc< - slint::VecModel, - > = std::rc::Rc::new(session_vec); - sessions_vec.push(slint::ModelRc::from(session_model)); + sessions_vec.push(slint::ModelRc::from(std::rc::Rc::new( + slint::VecModel::from(session.to_vec()), + ))); } - let rooms_model: std::rc::Rc< - slint::VecModel>, - > = std::rc::Rc::new(sessions_vec); - handle.set_sessions(slint::ModelRc::from(rooms_model)); + handle.set_sessions(slint::ModelRc::from(std::rc::Rc::new(sessions_vec))); - let room_urls_vec = slint::VecModel::from(room_urls.to_vec()); - let room_urls_model: std::rc::Rc> = - std::rc::Rc::new(room_urls_vec); - handle.set_room_urls(slint::ModelRc::from(room_urls_model)); + handle.set_room_urls(slint::ModelRc::from(std::rc::Rc::new( + slint::VecModel::from(room_urls.to_vec()), + ))); - let room_ports_vec = slint::VecModel::from(room_ports.to_vec()); - let room_ports_model: std::rc::Rc> = - std::rc::Rc::new(room_ports_vec); - handle.set_room_ports(slint::ModelRc::from(room_ports_model)); + handle.set_room_ports(slint::ModelRc::from(std::rc::Rc::new( + slint::VecModel::from(room_ports.to_vec()), + ))); handle.set_current_session(-1); handle.set_pending_refresh(false); @@ -1067,10 +1056,9 @@ fn setup_wait_window( for player in player_names { players_vec.push(player.into()); } - let players_model: std::rc::Rc< - slint::VecModel, - > = std::rc::Rc::new(players_vec); - handle.set_players(slint::ModelRc::from(players_model)); + handle.set_players(slint::ModelRc::from(std::rc::Rc::new( + players_vec, + ))); } }) .unwrap(); diff --git a/src/ui/vru.rs b/src/ui/vru.rs index 7e03a79..6382a2d 100644 --- a/src/ui/vru.rs +++ b/src/ui/vru.rs @@ -8,43 +8,38 @@ pub fn prompt_for_match(words: &[String], frame_time: f64) -> u16 { dedup_words.dedup(); let (tx, mut rx) = tokio::sync::mpsc::channel(1); - tokio::spawn(async move { - let vru_dialog = gui::VruDialog::new().unwrap(); - let vru_dialog_weak = vru_dialog.as_weak(); - let tx_clicked = tx.clone(); + let vru_dialog = gui::VruDialog::new().unwrap(); + let vru_dialog_weak = vru_dialog.as_weak(); - vru_dialog.on_vru_button_clicked(move |chosen_word| { - tx_clicked.try_send(chosen_word.to_string()).unwrap(); - vru_dialog_weak.unwrap().window().hide().unwrap(); - }); - - vru_dialog.window().on_close_requested(move || { - tx.try_send(String::new()).unwrap(); - slint::CloseRequestResponse::HideWindow - }); - - let words_vec = slint::VecModel::default(); - for word in dedup_words { - words_vec.push(word.into()); - } - let words_model: std::rc::Rc> = - std::rc::Rc::new(words_vec); - vru_dialog.set_words(slint::ModelRc::from(words_model)); - - vru_dialog.run().unwrap(); + vru_dialog.on_vru_button_clicked(move |chosen_word| { + tx.try_send(chosen_word.to_string()).unwrap(); + vru_dialog_weak.unwrap().window().hide().unwrap(); }); - let mut result = rx.try_recv(); - while result.is_err() { - result = rx.try_recv(); - std::thread::sleep(std::time::Duration::from_secs_f64(frame_time)); - unsafe { sdl3_sys::events::SDL_PumpEvents() }; // so the OS doesn't complain about the game window being frozen - retroachievements::do_idle(); + let words_vec = slint::VecModel::default(); + for word in dedup_words { + words_vec.push(word.into()); } - for (i, v) in words.iter().enumerate() { - if *v == *result.as_ref().unwrap() { - return i as u16; + vru_dialog.set_words(slint::ModelRc::from(std::rc::Rc::new(words_vec))); + + let timer = slint::Timer::default(); + timer.start( + slint::TimerMode::Repeated, + std::time::Duration::from_secs_f64(frame_time), + move || { + unsafe { sdl3_sys::events::SDL_PumpEvents() }; // so the OS doesn't complain about the game window being frozen + retroachievements::do_idle(); + }, + ); + + vru_dialog.run().unwrap(); + + if let Ok(result) = rx.try_recv() { + for (i, v) in words.iter().enumerate() { + if *v == result { + return i as u16; + } } } 0x7FFF From 73d895a64a51dc0771f70b699080618bbf85e99e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 19 Apr 2026 10:25:36 -0600 Subject: [PATCH 0785/1117] add vsync option (#776) --- parallel-rdp/interface.cpp | 11 +++++------ parallel-rdp/interface.hpp | 3 ++- src/ui/config.rs | 2 ++ src/ui/gui.rs | 2 ++ src/ui/gui/appwindow.slint | 1 + src/ui/gui/retroachievements_page.slint | 8 ++++---- src/ui/gui/settings_page.slint | 12 ++++++++++++ src/ui/video.rs | 6 +++++- 8 files changed, 33 insertions(+), 12 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 71dbf6a..c94550f 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -265,8 +265,7 @@ static ImageHandle create_message_image(Vulkan::Device &device, int width, } void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, - size_t font_size, uint32_t save_state_slot, - bool netplay_enabled) { + size_t font_size, uint32_t save_state_slot) { memset(&rdp_device, 0, sizeof(RDP_DEVICE)); window = (SDL_Window *)_window; @@ -291,12 +290,12 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, wsi_platform = new SDL_WSIPlatform; wsi_platform->set_window(window); wsi->set_platform(wsi_platform); - if (netplay_enabled) { - // VK_PRESENT_MODE_MAILBOX_KHR, fallback to VK_PRESENT_MODE_IMMEDIATE_KHR - wsi->set_present_mode(PresentMode::UnlockedMaybeTear); - } else { + if (gfx_info.vsync) { // VK_PRESENT_MODE_MAILBOX_KHR, fallback to VK_PRESENT_MODE_FIFO_KHR wsi->set_present_mode(PresentMode::UnlockedNoTearing); + } else { + // VK_PRESENT_MODE_MAILBOX_KHR, fallback to VK_PRESENT_MODE_IMMEDIATE_KHR + wsi->set_present_mode(PresentMode::UnlockedMaybeTear); } wsi->set_backbuffer_srgb(false); Context::SystemHandles handles = {}; diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 28bcb22..2fb70a6 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -18,6 +18,7 @@ typedef struct { bool PAL; bool widescreen; bool fullscreen; + bool vsync; bool integer_scaling; uint32_t upscale; bool crt; @@ -37,7 +38,7 @@ typedef struct { } CALL_BACK; void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, - size_t font_size, uint32_t save_state_slot, bool netplay_enabled); + size_t font_size, uint32_t save_state_slot); void rdp_close(); void rdp_set_vi_register(uint32_t reg, uint32_t value); void rdp_update_screen(); diff --git a/src/ui/config.rs b/src/ui/config.rs index 64a819a..1338d4c 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -50,6 +50,7 @@ pub struct Video { pub integer_scaling: bool, pub fullscreen: bool, pub widescreen: bool, + pub vsync: bool, pub crt: bool, } @@ -151,6 +152,7 @@ impl Config { integer_scaling: false, fullscreen: false, widescreen: false, + vsync: true, crt: false, }, emulation: Emulation { diff --git a/src/ui/gui.rs b/src/ui/gui.rs index e7e5325..5476923 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -92,6 +92,7 @@ fn settings_window(app: &AppWindow, config: &ui::config::Config) { app.set_integer_scaling(config.video.integer_scaling); app.set_fullscreen(config.video.fullscreen); app.set_widescreen(config.video.widescreen); + app.set_vsync(config.video.vsync); app.set_apply_crt_shader(config.video.crt); app.set_overclock_n64_cpu(config.emulation.overclock); app.set_disable_expansion_pak(config.emulation.disable_expansion_pak); @@ -296,6 +297,7 @@ pub fn save_settings(app: &AppWindow, controller_paths: &[Option]) { config.video.integer_scaling = app.get_integer_scaling(); config.video.fullscreen = app.get_fullscreen(); config.video.widescreen = app.get_widescreen(); + config.video.vsync = app.get_vsync(); config.video.crt = app.get_apply_crt_shader(); config.emulation.overclock = app.get_overclock_n64_cpu(); config.emulation.disable_expansion_pak = app.get_disable_expansion_pak(); diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index abe1dcd..881cffa 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -54,6 +54,7 @@ export component AppWindow inherits Window { in-out property integer_scaling <=> SettingsData.integer_scaling; in-out property fullscreen <=> SettingsData.fullscreen; in-out property widescreen <=> SettingsData.widescreen; + in-out property vsync <=> SettingsData.vsync; in-out property apply_crt_shader <=> SettingsData.apply_crt_shader; in-out property overclock_n64_cpu <=> SettingsData.overclock_n64_cpu; in-out property disable_expansion_pak <=> SettingsData.disable_expansion_pak; diff --git a/src/ui/gui/retroachievements_page.slint b/src/ui/gui/retroachievements_page.slint index 5095934..7a34ce1 100644 --- a/src/ui/gui/retroachievements_page.slint +++ b/src/ui/gui/retroachievements_page.slint @@ -26,7 +26,7 @@ export component RetroAchievements inherits Page { VerticalBox { alignment: start; HorizontalBox { - alignment: center; + alignment: start; CheckBox { text: @tr("Enabled"); checked: RAData.enabled; @@ -44,7 +44,7 @@ export component RetroAchievements inherits Page { } } HorizontalBox { - alignment: center; + alignment: start; CheckBox { text: @tr("Hardcore mode"); checked: RAData.hardcore; @@ -56,7 +56,7 @@ export component RetroAchievements inherits Page { } } HorizontalBox { - alignment: center; + alignment: start; CheckBox { text: @tr("Challenge Indicators"); checked: RAData.challenge; @@ -68,7 +68,7 @@ export component RetroAchievements inherits Page { } } HorizontalBox { - alignment: center; + alignment: start; CheckBox { text: @tr("Leaderboard Trackers"); checked: RAData.leaderboard; diff --git a/src/ui/gui/settings_page.slint b/src/ui/gui/settings_page.slint index d8c0617..666b5be 100644 --- a/src/ui/gui/settings_page.slint +++ b/src/ui/gui/settings_page.slint @@ -8,6 +8,7 @@ export global SettingsData { in-out property integer_scaling; in-out property fullscreen; in-out property widescreen; + in-out property vsync; in-out property apply_crt_shader; in-out property overclock_n64_cpu; in-out property disable_expansion_pak; @@ -70,6 +71,17 @@ export component Settings inherits Page { } } + HorizontalBox { + alignment: start; + CheckBox { + text: @tr("VSync"); + checked: SettingsData.vsync; + toggled => { + SettingsData.vsync = self.checked; + } + } + } + HorizontalBox { alignment: start; CheckBox { diff --git a/src/ui/video.rs b/src/ui/video.rs index 3cb7e9d..6de5784 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -21,6 +21,11 @@ fn build_gfx_info(device: &mut device::Device) -> GFX_INFO { PAL: device.cart.pal, widescreen: device.ui.config.video.widescreen, fullscreen: device.ui.video.fullscreen, + vsync: if device.netplay.is_none() { + device.ui.config.video.vsync + } else { + false + }, integer_scaling: device.ui.config.video.integer_scaling, upscale: device.ui.config.video.upscale, crt: device.ui.config.video.crt, @@ -99,7 +104,6 @@ pub fn init(device: &mut device::Device) { font_bytes.as_ptr() as *const std::ffi::c_void, font_bytes.len(), device.ui.storage.save_state_slot, - device.netplay.is_some(), ) } From a488f0d91a1179360298b4b9237f9a82ab1469fb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 19 Apr 2026 10:51:01 -0600 Subject: [PATCH 0786/1117] fix some typos (#777) --- src/ui/gui/netplay_create.slint | 6 +++--- src/ui/gui/netplay_join.slint | 2 +- src/ui/gui/netplay_wait.slint | 2 +- src/ui/gui/settings_page.slint | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ui/gui/netplay_create.slint b/src/ui/gui/netplay_create.slint index bfc92f7..76884a2 100644 --- a/src/ui/gui/netplay_create.slint +++ b/src/ui/gui/netplay_create.slint @@ -25,7 +25,7 @@ export component NetplayCreate inherits Window { } LineEdit { - placeholder_text: @tr("Enter session name"); + placeholder-text: @tr("Enter session name"); edited(text) => { NetplayData.session_name = text; } @@ -38,7 +38,7 @@ export component NetplayCreate inherits Window { } LineEdit { - placeholder_text: @tr("Enter session password"); + placeholder-text: @tr("Enter session password"); edited(text) => { NetplayData.password = text; } @@ -52,7 +52,7 @@ export component NetplayCreate inherits Window { } LineEdit { - placeholder_text: @tr("Enter player name"); + placeholder-text: @tr("Enter player name"); edited(text) => { NetplayData.player_name = text; } diff --git a/src/ui/gui/netplay_join.slint b/src/ui/gui/netplay_join.slint index 9b36bcb..fbf2865 100644 --- a/src/ui/gui/netplay_join.slint +++ b/src/ui/gui/netplay_join.slint @@ -31,7 +31,7 @@ export component NetplayJoin inherits Window { } LineEdit { - placeholder_text: @tr("Enter player name"); + placeholder-text: @tr("Enter player name"); edited(text) => { NetplayData.player_name = text; } diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint index 18dcff2..2460768 100644 --- a/src/ui/gui/netplay_wait.slint +++ b/src/ui/gui/netplay_wait.slint @@ -73,7 +73,7 @@ export component NetplayWait inherits Window { HorizontalBox { chat_message := LineEdit { - placeholder_text: @tr("Enter chat message"); + placeholder-text: @tr("Enter chat message"); key-released(event) => { if (event.text == Key.Return && chat_message.text != "") { send_chat_message(chat_message.text); diff --git a/src/ui/gui/settings_page.slint b/src/ui/gui/settings_page.slint index 666b5be..5145ab9 100644 --- a/src/ui/gui/settings_page.slint +++ b/src/ui/gui/settings_page.slint @@ -63,7 +63,7 @@ export component Settings inherits Page { HorizontalBox { alignment: start; CheckBox { - text: @tr("Widescreen (strech)"); + text: @tr("Widescreen (stretch)"); checked: SettingsData.widescreen; toggled => { SettingsData.widescreen = self.checked; From edb6960d4fee607b770a42807b129a581007c6af Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 19 Apr 2026 15:15:56 -0600 Subject: [PATCH 0787/1117] Make Slint optional (#778) * make slint optional * more * more --- .github/workflows/build.yml | 3 + .github/workflows/lint.yml | 1 + Cargo.toml | 8 ++- build.rs | 28 ++++++--- src/cheats.rs | 20 ++++-- src/device.rs | 2 +- src/device/controller/vru.rs | 7 ++- src/main.rs | 14 +++-- src/retroachievements.rs | 118 +++-------------------------------- src/ui.rs | 14 +++++ src/ui/cheats.rs | 12 +--- src/ui/gui.rs | 14 +---- src/ui/input.rs | 1 + src/ui/netplay.rs | 18 +++--- src/ui/retroachievements.rs | 114 +++++++++++++++++++++++++++++++++ src/ui/vru.rs | 2 +- 16 files changed, 210 insertions(+), 166 deletions(-) create mode 100644 src/ui/retroachievements.rs diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a1a2384..8163103 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -64,6 +64,7 @@ jobs: matrix.llvm }}.tar.xz - name: Build run: | + cargo build --no-default-features -v --target=${{ matrix.target }} cargo build --release -v --target=${{ matrix.target }} mkdir output cp target/${{ matrix.target }}/release/gopher64 output/gopher64-${{ matrix.arch }} @@ -113,6 +114,7 @@ jobs: }}.exe - name: Build run: | + cargo build --no-default-features -v --target=${{ matrix.target }} cargo build --release -v --target=${{ matrix.target }} mkdir output cp target/${{ matrix.target }}/release/gopher64.exe output/gopher64-${{ matrix.arch }}.exe @@ -182,6 +184,7 @@ jobs: run: | cargo install cargo-bundle brew install molten-vk + cargo build --no-default-features -v --target=${{ matrix.target }} cargo bundle --release --target=${{ matrix.target }} --format osx install_name_tool -change /opt/homebrew/opt/freetype/lib/libfreetype.6.dylib \ @executable_path/../Frameworks/libfreetype.6.dylib target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/MacOS/gopher64 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index cfe8745..49ad495 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -49,3 +49,4 @@ jobs: - name: Lint run: | cargo clippy -- -Dwarnings + cargo clippy --no-default-features -- -Dwarnings diff --git a/Cargo.toml b/Cargo.toml index dc45a1e..fa65035 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,9 @@ version = "1.1.17" edition = "2024" rust-version = "1.95.0" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[features] +default = ["gui"] +gui = ["dep:slint", "dep:slint-build"] [dependencies] dirs = "6.0" @@ -14,7 +16,7 @@ chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde-big-array = "0.5" -slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "backend-winit", "renderer-skia"] } +slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "backend-winit", "renderer-skia"], optional = true } open = "5.3" sha2 = "0.11" sdl3-sys = { version = "0.6", features = ["build-from-source-static"] } @@ -38,7 +40,7 @@ reqwest = { version = "0.13", features = ["json", "query"] } [build-dependencies] winresource = "0.1" bindgen = "0.72" -slint-build = "1.12" +slint-build = { version = "1.12", optional = true } cc = { version = "1.2", features = ["parallel"] } [profile.release] diff --git a/build.rs b/build.rs index ce72218..c92a360 100644 --- a/build.rs +++ b/build.rs @@ -3,8 +3,11 @@ fn main() { println!("cargo::rerun-if-changed=retroachievements"); println!("cargo::rerun-if-changed=src/compat"); - let slint_config = slint_build::CompilerConfiguration::new(); - slint_build::compile_with_config("src/ui/gui/appwindow.slint", slint_config).unwrap(); + #[cfg(feature = "gui")] + { + let slint_config = slint_build::CompilerConfiguration::new(); + slint_build::compile_with_config("src/ui/gui/appwindow.slint", slint_config).unwrap(); + } let mut simd_build = cc::Build::new(); let mut volk_build = cc::Build::new(); @@ -143,6 +146,9 @@ fn main() { println!("cargo:rustc-link-search=native={}", runtime_dir); println!("cargo:rustc-link-lib=static=clang_rt.osx"); } + if cfg!(not(feature = "gui")) && os == "linux" { + println!("cargo:rustc-link-lib=dylib=freetype"); + } volk_build.flag("-flto=thin"); rdp_build.flag("-flto=thin"); @@ -155,7 +161,7 @@ fn main() { let out_path = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap()); - let retroachievements_bindings = bindgen::Builder::default() + let mut retroachievements_builder = bindgen::Builder::default() .header("retroachievements/retroachievements.h") .allowlist_function("ra_init_client") .allowlist_function("ra_welcome") @@ -166,15 +172,21 @@ fn main() { .allowlist_function("ra_do_frame") .allowlist_function("ra_do_idle") .allowlist_function("ra_http_callback") - .allowlist_function("ra_logout_user") .allowlist_function("ra_login_user") .allowlist_function("ra_login_token_user") - .allowlist_function("ra_is_user_logged_in") - .allowlist_function("ra_get_username") - .allowlist_function("ra_get_token") .allowlist_function("ra_state_size") .allowlist_function("ra_save_state") - .allowlist_function("ra_load_state") + .allowlist_function("ra_load_state"); + + if cfg!(feature = "gui") { + retroachievements_builder = retroachievements_builder + .allowlist_function("ra_logout_user") + .allowlist_function("ra_is_user_logged_in") + .allowlist_function("ra_get_username") + .allowlist_function("ra_get_token"); + } + + let retroachievements_bindings = retroachievements_builder .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) .generate() .expect("Unable to generate bindings"); diff --git a/src/cheats.rs b/src/cheats.rs index 55648ac..8c60dc3 100644 --- a/src/cheats.rs +++ b/src/cheats.rs @@ -15,16 +15,24 @@ pub struct Cheats { pub enabled: bool, } +#[derive(serde::Serialize, serde::Deserialize, Clone)] +pub struct CheatData { + pub note: String, + pub data: Vec, + pub options: Option>, +} + +pub type Cheat = std::collections::BTreeMap>; + pub fn init( device: &mut device::Device, cheat_settings: std::collections::HashMap>, ) { - let cheats = - serde_json::from_slice::(include_bytes!("../data/cheats.json")) - .unwrap() - .get(&ui::storage::get_game_crc(&device.cart.rom)) - .cloned() - .unwrap_or_default(); + let cheats = serde_json::from_slice::(include_bytes!("../data/cheats.json")) + .unwrap() + .get(&ui::storage::get_game_crc(&device.cart.rom)) + .cloned() + .unwrap_or_default(); let re = regex::Regex::new(r"\?+").unwrap(); for cheat_setting in cheat_settings.iter() { diff --git a/src/device.rs b/src/device.rs index 26cf8a8..9a2c07a 100644 --- a/src/device.rs +++ b/src/device.rs @@ -44,7 +44,7 @@ pub mod tlb; pub mod unmapped; pub mod vi; -pub fn run_game(device: &mut Device, rom_contents: &[u8], game_settings: ui::gui::GameSettings) { +pub fn run_game(device: &mut Device, rom_contents: &[u8], game_settings: ui::GameSettings) { device.cpu.overclock = game_settings.overclock; if game_settings.disable_expansion_pak { device.rdram.size = 0x400000; diff --git a/src/device/controller/vru.rs b/src/device/controller/vru.rs index 68aa98e..f7dfa95 100644 --- a/src/device/controller/vru.rs +++ b/src/device/controller/vru.rs @@ -1,4 +1,6 @@ -use crate::{device, ui}; +use crate::device; +#[cfg(feature = "gui")] +use crate::ui; use std::collections::HashMap; const JCMD_VRU_READ: u8 = 0x09; @@ -179,7 +181,10 @@ pub fn process(device: &mut device::Device, channel: usize) { device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] = 0; } JCMD_VRU_READ => { + #[cfg(feature = "gui")] let index = ui::vru::prompt_for_match(&device.vru.words, device.vi.frame_time); + #[cfg(not(feature = "gui"))] + let index = 0x7FFF; let num_results = if index == 0x7FFF { 0 } else { 1 }; let data: HashMap = HashMap::from([ (0, 0x8000), diff --git a/src/main.rs b/src/main.rs index 8d6fc06..ccc95cc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,11 +11,10 @@ mod savestates; mod ui; use clap::Parser; use std::io::Error; -use ui::gui; /// N64 emulator #[derive(Parser, Debug)] -#[command(author, version, about, long_about = None)] +#[command(author, version, about, long_about = None, arg_required_else_help = if cfg!(feature = "gui") { false } else { true })] struct Args { game: Option, #[arg(short, long)] @@ -214,7 +213,7 @@ async fn main() -> std::io::Result<()> { device::run_game( &mut device, &rom_contents, - ui::gui::GameSettings { + ui::GameSettings { overclock, disable_expansion_pak, cheats, @@ -282,9 +281,12 @@ async fn main() -> std::io::Result<()> { ui::input::bind_input_profile(&mut ui, profile, port); } } else { - retroachievements::init_client(false, false, false); - gui::app_window(); - retroachievements::shutdown_client(); + #[cfg(feature = "gui")] + { + retroachievements::init_client(false, false, false); + ui::gui::app_window(); + retroachievements::shutdown_client(); + } } Ok(()) diff --git a/src/retroachievements.rs b/src/retroachievements.rs index 764067d..e02d541 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -1,7 +1,6 @@ include!(concat!(env!("OUT_DIR"), "/retroachievements_bindings.rs")); use crate::ui; -use slint::ComponentHandle; static WEB_CLIENT: std::sync::LazyLock = std::sync::LazyLock::new(|| { reqwest::Client::builder() @@ -144,115 +143,6 @@ pub extern "C" fn rust_server_call( }); } -fn set_current_user_message(app: &ui::gui::AppWindow, rx: tokio::sync::oneshot::Receiver) { - app.set_ra_current_user_message("Logging in...".into()); - let weak_app = app.as_weak(); - tokio::spawn(async move { - rx.await.unwrap(); - weak_app - .upgrade_in_event_loop(move |handle| { - if is_user_logged_in() { - handle.set_ra_current_user_message( - format!("Logged in as {}", handle.get_ra_username()).into(), - ); - handle.set_ra_show_profile(true); - } else { - handle.set_ra_current_user_message("Login failed".into()); - handle.set_ra_show_profile(false); - } - handle.set_ra_logging_in(false); - }) - .unwrap(); - }); -} - -pub fn ra_window(app: &ui::gui::AppWindow) { - let mut token = String::new(); - if let Ok(ra_config) = std::fs::read(ui::get_dirs().config_dir.join("retroachievements.json")) - && let Ok(result) = serde_json::from_slice::(ra_config.as_ref()) - { - app.set_ra_username(result.username.into()); - app.set_ra_enabled(result.enabled); - app.set_ra_hardcore(result.hardcore); - app.set_ra_challenge(result.challenge); - app.set_ra_leaderboard(result.leaderboard); - token = result.token; - } else { - app.set_ra_hardcore(true); - } - - if app.get_ra_enabled() && !app.get_ra_username().is_empty() { - let (tx, rx) = tokio::sync::oneshot::channel::(); - login_token_user(app.get_ra_username().to_string(), token, tx); - set_current_user_message(app, rx); - } else { - app.set_ra_current_user_message("Not currently logged in".into()); - } - - let weak_app2 = app.as_weak(); - app.on_ra_button_clicked(move |password| { - weak_app2 - .upgrade_in_event_loop(move |handle| { - let (tx, rx) = tokio::sync::oneshot::channel::(); - login_user( - handle.get_ra_username().to_string(), - password.to_string(), - tx, - ); - - set_current_user_message(&handle, rx); - }) - .unwrap(); - }); - - app.on_ra_toggled(move |enabled, hardcore, challenge, leaderboard| { - let file_path = ui::get_dirs().config_dir.join("retroachievements.json"); - let raconfig = if let Ok(ra_config) = std::fs::read(&file_path) - && let Ok(result) = serde_json::from_slice::(ra_config.as_ref()) - { - if !enabled { - unsafe { ra_logout_user() }; - RAConfig { - username: String::new(), - token: String::new(), - enabled, - hardcore, - challenge, - leaderboard, - } - } else { - RAConfig { - username: result.username, - token: result.token, - enabled, - hardcore, - challenge, - leaderboard, - } - } - } else { - RAConfig { - username: String::new(), - token: String::new(), - enabled, - hardcore, - challenge, - leaderboard, - } - }; - let f = std::fs::File::create(&file_path).unwrap(); - serde_json::to_writer_pretty(f, &raconfig).unwrap(); - }); - - app.on_ra_games_clicked(move || { - open::that_detached("https://retroachievements.org/system/2-nintendo-64/games").unwrap(); - }); - - app.on_ra_show_profile_clicked(move |username| { - open::that_detached(format!("https://retroachievements.org/user/{}", username)).unwrap(); - }); -} - pub async fn load_game(rom: &[u8], rom_size: usize) { let (tx, rx) = tokio::sync::oneshot::channel::(); unsafe { @@ -299,6 +189,11 @@ pub fn login_user(username: String, password: String, tx: tokio::sync::oneshot:: }; } +#[cfg(feature = "gui")] +pub fn logout_user() { + unsafe { ra_logout_user() }; +} + pub fn login_token_user(username: String, token: String, tx: tokio::sync::oneshot::Sender) { unsafe { let tx_ptr = Box::into_raw(Box::new(tx)) as *mut std::ffi::c_void; @@ -308,10 +203,12 @@ pub fn login_token_user(username: String, token: String, tx: tokio::sync::onesho }; } +#[cfg(feature = "gui")] pub fn is_user_logged_in() -> bool { unsafe { ra_is_user_logged_in() } } +#[cfg(feature = "gui")] pub fn get_username() -> &'static str { let c_username = unsafe { ra_get_username() }; if c_username.is_null() { @@ -323,6 +220,7 @@ pub fn get_username() -> &'static str { } } +#[cfg(feature = "gui")] pub fn get_token() -> &'static str { let c_token = unsafe { ra_get_token() }; if c_token.is_null() { diff --git a/src/ui.rs b/src/ui.rs index 4b95594..c7e924a 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -1,12 +1,18 @@ pub mod audio; +#[cfg(feature = "gui")] pub mod cheats; pub mod config; +#[cfg(feature = "gui")] pub mod gui; pub mod input; +#[cfg(feature = "gui")] pub mod netplay; +#[cfg(feature = "gui")] +pub mod retroachievements; pub mod storage; pub mod usb; pub mod video; +#[cfg(feature = "gui")] pub mod vru; pub struct Dirs { @@ -47,6 +53,14 @@ pub struct Usb { pub cart_rx: Option>, } +#[derive(Clone)] +pub struct GameSettings { + pub overclock: bool, + pub disable_expansion_pak: bool, + pub cheats: std::collections::HashMap>, + pub load_savestate_slot: Option, +} + pub struct Ui { pub dirs: Dirs, pub config: config::Config, diff --git a/src/ui/cheats.rs b/src/ui/cheats.rs index 6b4f4c1..fa47cbc 100644 --- a/src/ui/cheats.rs +++ b/src/ui/cheats.rs @@ -1,18 +1,10 @@ +use crate::cheats; use crate::device; use crate::ui; use crate::ui::gui::AppWindow; use crate::ui::gui::ErrorDialog; use slint::ComponentHandle; -#[derive(serde::Serialize, serde::Deserialize, Clone)] -pub struct CheatData { - note: String, - pub data: Vec, - pub options: Option>, -} - -pub type Cheats = std::collections::BTreeMap>; - pub fn cheats_window(app: &AppWindow) { let weak = app.as_weak(); app.on_cheats_select_rom_clicked(move |rom_dir| { @@ -38,7 +30,7 @@ pub fn cheats_window(app: &AppWindow) { handle.set_cheat_game_name(game_name.into()); }) .unwrap(); - let cheats: Cheats = + let cheats: cheats::Cheat = serde_json::from_slice(include_bytes!("../../data/cheats.json")).unwrap(); if let Some(cheat) = cheats.get(&game_crc) { let cheat = cheat.clone(); diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 5476923..80c945a 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -18,14 +18,6 @@ pub struct NetplayDevice { pub player_number: u8, } -#[derive(Clone)] -pub struct GameSettings { - pub overclock: bool, - pub disable_expansion_pak: bool, - pub cheats: std::collections::HashMap>, - pub load_savestate_slot: Option, -} - #[derive(Clone)] pub struct RASettings { pub enabled: bool, @@ -358,7 +350,7 @@ fn about_window(app: &AppWindow) { pub fn app_window() { let app = AppWindow::new().unwrap(); about_window(&app); - retroachievements::ra_window(&app); + ui::retroachievements::ra_window(&app); let mut controller_paths; { let game_ui = ui::Ui::new(); @@ -378,7 +370,7 @@ pub fn app_window() { pub fn run_rom( file_path: std::path::PathBuf, - game_settings: GameSettings, + game_settings: ui::GameSettings, netplay: Option, ra_settings: RASettings, weak: slint::Weak, @@ -473,7 +465,7 @@ fn open_rom(app: &AppWindow) { if let Some(file) = select_rom.await { run_rom( file.path().to_path_buf(), - GameSettings { + ui::GameSettings { overclock, disable_expansion_pak, cheats: std::collections::HashMap::new(), // will be filled in later diff --git a/src/ui/input.rs b/src/ui/input.rs index 7687167..af59d65 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -384,6 +384,7 @@ pub fn get_controller_names(game_ui: &ui::Ui) -> Vec { controllers } +#[cfg(feature = "gui")] pub fn get_controller_paths(game_ui: &ui::Ui) -> Vec> { let mut controller_paths: Vec> = vec![]; diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index a9b00d5..9b61c0a 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -1,8 +1,8 @@ use crate::device; use crate::ui; use crate::ui::gui::{ - AppWindow, CustomNetplayServer, DispatcherDialog, ErrorDialog, GameSettings, NetplayCreate, - NetplayDevice, NetplayJoin, NetplayWait, RASettings, run_rom, save_settings, + AppWindow, CustomNetplayServer, DispatcherDialog, ErrorDialog, NetplayCreate, NetplayDevice, + NetplayJoin, NetplayWait, RASettings, run_rom, save_settings, }; use futures::{SinkExt, StreamExt}; use sha2::{Digest, Sha256}; @@ -247,7 +247,7 @@ fn show_custom_url_dialog(weak: slint::Weak, server_url: slint::S pub fn setup_create_window( create_window: &NetplayCreate, - game_settings: GameSettings, + game_settings: ui::GameSettings, ra_settings: RASettings, rom_dir: slint::SharedString, weak_app: slint::Weak, @@ -613,7 +613,7 @@ fn create_session( game_hash: String, game_cheats: String, password: String, - game_settings: GameSettings, + game_settings: ui::GameSettings, ra_settings: RASettings, weak_app: slint::Weak, weak: slint::Weak, @@ -703,7 +703,7 @@ fn create_session( handle.get_rom_path(), message.player_name.as_ref().unwrap().into(), session.port.unwrap(), - GameSettings { + ui::GameSettings { overclock: overclock.parse().unwrap(), disable_expansion_pak: disable_expansion_pak.parse().unwrap(), cheats: serde_json::from_str(cheats).unwrap(), @@ -826,7 +826,7 @@ fn join_session( handle.get_rom_path(), message.player_name.as_ref().unwrap().into(), session.port.unwrap(), - GameSettings { + ui::GameSettings { overclock: overclock.parse().unwrap(), disable_expansion_pak: disable_expansion_pak.parse().unwrap(), cheats: serde_json::from_str(cheats).unwrap(), @@ -872,7 +872,7 @@ fn setup_wait_window( rom_path: slint::SharedString, player_name: slint::SharedString, port: i32, - game_settings: GameSettings, + game_settings: ui::GameSettings, ra_settings: RASettings, peer_addr: slint::SharedString, weak_app: slint::Weak, @@ -1090,7 +1090,7 @@ fn setup_wait_window( run_rom( handle.get_rom_path().as_str().into(), - GameSettings { + ui::GameSettings { overclock: game_settings.overclock, disable_expansion_pak: game_settings.disable_expansion_pak, cheats: game_settings.cheats, @@ -1214,7 +1214,7 @@ pub fn netplay_window(app: &AppWindow, controller_paths: &[Option]) { save_settings(&handle, &controller_paths); setup_create_window( &create_window, - GameSettings { + ui::GameSettings { overclock: handle.get_overclock_n64_cpu(), disable_expansion_pak: handle.get_disable_expansion_pak(), cheats: std::collections::HashMap::new(), // not used here diff --git a/src/ui/retroachievements.rs b/src/ui/retroachievements.rs new file mode 100644 index 0000000..f888038 --- /dev/null +++ b/src/ui/retroachievements.rs @@ -0,0 +1,114 @@ +use crate::retroachievements; +use crate::ui; +use slint::ComponentHandle; + +pub fn ra_window(app: &ui::gui::AppWindow) { + let mut token = String::new(); + if let Ok(ra_config) = std::fs::read(ui::get_dirs().config_dir.join("retroachievements.json")) + && let Ok(result) = + serde_json::from_slice::(ra_config.as_ref()) + { + app.set_ra_username(result.username.into()); + app.set_ra_enabled(result.enabled); + app.set_ra_hardcore(result.hardcore); + app.set_ra_challenge(result.challenge); + app.set_ra_leaderboard(result.leaderboard); + token = result.token; + } else { + app.set_ra_hardcore(true); + } + + if app.get_ra_enabled() && !app.get_ra_username().is_empty() { + let (tx, rx) = tokio::sync::oneshot::channel::(); + retroachievements::login_token_user(app.get_ra_username().to_string(), token, tx); + set_current_user_message(app, rx); + } else { + app.set_ra_current_user_message("Not currently logged in".into()); + } + + let weak_app2 = app.as_weak(); + app.on_ra_button_clicked(move |password| { + weak_app2 + .upgrade_in_event_loop(move |handle| { + let (tx, rx) = tokio::sync::oneshot::channel::(); + retroachievements::login_user( + handle.get_ra_username().to_string(), + password.to_string(), + tx, + ); + + set_current_user_message(&handle, rx); + }) + .unwrap(); + }); + + app.on_ra_toggled(move |enabled, hardcore, challenge, leaderboard| { + let file_path = ui::get_dirs().config_dir.join("retroachievements.json"); + let raconfig = if let Ok(ra_config) = std::fs::read(&file_path) + && let Ok(result) = + serde_json::from_slice::(ra_config.as_ref()) + { + if !enabled { + retroachievements::logout_user(); + retroachievements::RAConfig { + username: String::new(), + token: String::new(), + enabled, + hardcore, + challenge, + leaderboard, + } + } else { + retroachievements::RAConfig { + username: result.username, + token: result.token, + enabled, + hardcore, + challenge, + leaderboard, + } + } + } else { + retroachievements::RAConfig { + username: String::new(), + token: String::new(), + enabled, + hardcore, + challenge, + leaderboard, + } + }; + let f = std::fs::File::create(&file_path).unwrap(); + serde_json::to_writer_pretty(f, &raconfig).unwrap(); + }); + + app.on_ra_games_clicked(move || { + open::that_detached("https://retroachievements.org/system/2-nintendo-64/games").unwrap(); + }); + + app.on_ra_show_profile_clicked(move |username| { + open::that_detached(format!("https://retroachievements.org/user/{}", username)).unwrap(); + }); +} + +fn set_current_user_message(app: &ui::gui::AppWindow, rx: tokio::sync::oneshot::Receiver) { + app.set_ra_current_user_message("Logging in...".into()); + let weak_app = app.as_weak(); + tokio::spawn(async move { + rx.await.unwrap(); + weak_app + .upgrade_in_event_loop(move |handle| { + if retroachievements::is_user_logged_in() { + handle.set_ra_current_user_message( + format!("Logged in as {}", handle.get_ra_username()).into(), + ); + handle.set_ra_show_profile(true); + } else { + handle.set_ra_current_user_message("Login failed".into()); + handle.set_ra_show_profile(false); + } + handle.set_ra_logging_in(false); + }) + .unwrap(); + }); +} diff --git a/src/ui/vru.rs b/src/ui/vru.rs index 6382a2d..aaea147 100644 --- a/src/ui/vru.rs +++ b/src/ui/vru.rs @@ -1,5 +1,5 @@ -use crate::gui; use crate::retroachievements; +use crate::ui::gui; use slint::ComponentHandle; pub fn prompt_for_match(words: &[String], frame_time: f64) -> u16 { From f520aeab82cbca5ea3b09e4f6b24d090965885db Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 19 Apr 2026 23:00:39 -0600 Subject: [PATCH 0788/1117] use tokio process (#779) --- Cargo.lock | 1 + Cargo.toml | 2 +- src/ui/gui.rs | 7 ++++--- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6f8cf69..e428af9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5773,6 +5773,7 @@ dependencies = [ "libc", "mio", "pin-project-lite", + "signal-hook-registry", "socket2", "tokio-macros", "windows-sys 0.61.2", diff --git a/Cargo.toml b/Cargo.toml index fa65035..6f38f67 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,7 @@ sha2 = "0.11" sdl3-sys = { version = "0.6", features = ["build-from-source-static"] } sdl3-ttf-sys = { version = "0.6", features = ["build-from-source-static", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } rfd = "0.17" -tokio = {version = "1.46", features = ["rt-multi-thread", "macros", "fs"] } +tokio = {version = "1.46", features = ["rt-multi-thread", "macros", "fs", "process"] } spin_sleep = "1.3" encoding_rs = "0.8" mimalloc = "0.1" diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 80c945a..fdfb9f5 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -216,7 +216,7 @@ fn controller_window( tokio::spawn(async move { let mut command = - std::process::Command::new(std::env::current_exe().unwrap()); + tokio::process::Command::new(std::env::current_exe().unwrap()); command.args([ "--configure-input-profile", &profile_name, @@ -226,7 +226,7 @@ fn controller_window( if dinput { command.arg("--use-dinput"); } - if !command.status().unwrap().success() { + if !command.status().await.unwrap().success() { eprintln!("Failed to configure input profile"); } let game_ui = ui::Ui::new(); @@ -379,7 +379,7 @@ pub fn run_rom( weak.upgrade_in_event_loop(move |handle| handle.set_game_running(true)) .unwrap(); - let mut command = std::process::Command::new(std::env::current_exe().unwrap()); + let mut command = tokio::process::Command::new(std::env::current_exe().unwrap()); command.args([ "--overclock", &game_settings.overclock.to_string(), @@ -421,6 +421,7 @@ pub fn run_rom( if !command .arg(file_path.to_str().unwrap()) .status() + .await .unwrap() .success() { From 26253b5ed7095cbbff864806b2b2247b9e13231b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 19 Apr 2026 23:14:05 -0600 Subject: [PATCH 0789/1117] just create config (#780) --- src/ui/gui.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index fdfb9f5..b4b1eae 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -229,8 +229,8 @@ fn controller_window( if !command.status().await.unwrap().success() { eprintln!("Failed to configure input profile"); } - let game_ui = ui::Ui::new(); - update_input_profiles(&weak_app, &game_ui.config); + let config = ui::config::Config::new(); + update_input_profiles(&weak_app, &config); }); }) .unwrap(); From 82c02461f80a55eae939902d259ffe8085fc279b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 20 Apr 2026 01:11:09 -0600 Subject: [PATCH 0790/1117] handle file dropping (#781) * handle file dropping * more --- Cargo.lock | 1 + Cargo.toml | 2 +- src/ui/gui.rs | 42 ++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e428af9..8ee2740 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5200,6 +5200,7 @@ checksum = "364a1e8fae7f1969224acc59ba729f06aeaf808123796389eae458c396119ef0" dependencies = [ "const-field-offset", "i-slint-backend-selector", + "i-slint-backend-winit", "i-slint-common", "i-slint-core", "i-slint-core-macros", diff --git a/Cargo.toml b/Cargo.toml index 6f38f67..eb08bd0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde-big-array = "0.5" -slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "backend-winit", "renderer-skia"], optional = true } +slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "unstable-winit-030", "backend-winit", "renderer-skia"], optional = true } open = "5.3" sha2 = "0.11" sdl3-sys = { version = "0.6", features = ["build-from-source-static"] } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index b4b1eae..ae787c7 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -1,6 +1,7 @@ use crate::retroachievements; use crate::ui; use slint::Model; +use slint::winit_030::WinitWindowAccessor; slint::include_modules!(); @@ -53,12 +54,48 @@ fn check_latest_version(weak: slint::Weak) { }); } +fn file_dropped(app: &AppWindow, controller_paths: &[Option]) { + let weak = app.as_weak(); + let owned_controller_paths = controller_paths.to_owned(); + app.window() + .on_winit_window_event(move |_winit_window, event| { + if let slint::winit_030::winit::event::WindowEvent::DroppedFile(path) = event { + let controller_paths = owned_controller_paths.clone(); + let path = path.clone(); + let weak2 = weak.clone(); + weak.upgrade_in_event_loop(move |handle| { + save_settings(&handle, &controller_paths); + + run_rom( + path, + ui::GameSettings { + overclock: handle.get_overclock_n64_cpu(), + disable_expansion_pak: handle.get_disable_expansion_pak(), + cheats: std::collections::HashMap::new(), // will be filled in later + load_savestate_slot: None, + }, + None, + RASettings { + enabled: handle.get_ra_enabled(), + hardcore: handle.get_ra_hardcore(), + challenge: handle.get_ra_challenge(), + leaderboard: handle.get_ra_leaderboard(), + }, + weak2, + ); + }) + .unwrap(); + } + slint::winit_030::EventResult::Propagate + }); +} + fn local_game_window(app: &AppWindow, controller_paths: &[Option]) { let dirs = ui::get_dirs(); let weak = app.as_weak(); - let controller_paths = controller_paths.to_owned(); + let owned_controller_paths = controller_paths.to_owned(); app.on_open_rom_button_clicked(move || { - let controller_paths = controller_paths.clone(); + let controller_paths = owned_controller_paths.clone(); weak.upgrade_in_event_loop(move |handle| { save_settings(&handle, &controller_paths); open_rom(&handle) @@ -70,6 +107,7 @@ fn local_game_window(app: &AppWindow, controller_paths: &[Option]) { app.on_saves_folder_button_clicked(move || { open::that_detached(saves_path.clone()).unwrap(); }); + file_dropped(app, controller_paths); } fn input_profiles(config: &ui::config::Config) -> Vec { From 8cb57811a62580b44b463dab1f7a60e0162d8fa6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 20 Apr 2026 01:27:29 -0600 Subject: [PATCH 0791/1117] make rfd optional (#782) --- Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index eb08bd0..c408403 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ rust-version = "1.95.0" [features] default = ["gui"] -gui = ["dep:slint", "dep:slint-build"] +gui = ["dep:rfd", "dep:slint", "dep:slint-build"] [dependencies] dirs = "6.0" @@ -21,7 +21,7 @@ open = "5.3" sha2 = "0.11" sdl3-sys = { version = "0.6", features = ["build-from-source-static"] } sdl3-ttf-sys = { version = "0.6", features = ["build-from-source-static", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } -rfd = "0.17" +rfd = {version = "0.17", optional = true } tokio = {version = "1.46", features = ["rt-multi-thread", "macros", "fs", "process"] } spin_sleep = "1.3" encoding_rs = "0.8" From 9e337295cad700da88304fe101f60cc285eef594 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 20 Apr 2026 02:13:15 -0600 Subject: [PATCH 0792/1117] don't launch game if already running (#783) --- src/ui/gui.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index ae787c7..4c6986b 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -64,6 +64,9 @@ fn file_dropped(app: &AppWindow, controller_paths: &[Option]) { let path = path.clone(); let weak2 = weak.clone(); weak.upgrade_in_event_loop(move |handle| { + if handle.get_game_running() { + return; + } save_settings(&handle, &controller_paths); run_rom( From b8c3556df6276e519efe8ffd6a5a9087e57dbb62 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 20 Apr 2026 02:34:27 -0600 Subject: [PATCH 0793/1117] cleanup loop (#784) --- src/ui/gui.rs | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 4c6986b..daa0614 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -223,17 +223,11 @@ fn controller_window( let controller_changed = slint::VecModel::default(); let selected_controllers = slint::VecModel::default(); for selected in config.input.controller_assignment.iter() { - let mut found = false; - for (i, path) in controller_paths.iter().enumerate() { - if selected == path { - selected_controllers.push(i as i32); - found = true; - continue; - } - } - if !found { - selected_controllers.push(0); - } + let selected_index = controller_paths + .iter() + .position(|path| selected == path) + .unwrap_or(0) as i32; + selected_controllers.push(selected_index); controller_changed.push(false); } app.set_selected_controller(slint::ModelRc::from(std::rc::Rc::new(selected_controllers))); From cf3a27cecf59198ff88358b204ba99cbf3ad3594 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 20 Apr 2026 04:27:44 -0600 Subject: [PATCH 0794/1117] Use switch instead of checkbox (#785) --- src/ui/gui/cheat_page.slint | 5 ++--- src/ui/gui/controller_page.slint | 8 ++++---- src/ui/gui/input_profile.slint | 4 ++-- src/ui/gui/retroachievements_page.slint | 10 +++++----- src/ui/gui/settings_page.slint | 18 +++++++++--------- 5 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/ui/gui/cheat_page.slint b/src/ui/gui/cheat_page.slint index 6918af5..5df273a 100644 --- a/src/ui/gui/cheat_page.slint +++ b/src/ui/gui/cheat_page.slint @@ -1,7 +1,7 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { ListView, HorizontalBox, VerticalBox, Button, GroupBox, CheckBox } from "std-widgets.slint"; +import { ListView, HorizontalBox, VerticalBox, Button, GroupBox, Switch, CheckBox } from "std-widgets.slint"; import { Page } from "page.slint"; import { SettingsData } from "settings_page.slint"; @@ -62,8 +62,7 @@ export component Cheats inherits Page { wrap: word-wrap; } - if data.options.length == 0: CheckBox { - text: @tr("Enabled"); + if data.options.length == 0: Switch { checked: data.enabled; toggled => { data.enabled = self.checked; diff --git a/src/ui/gui/controller_page.slint b/src/ui/gui/controller_page.slint index 07f705d..156e10a 100644 --- a/src/ui/gui/controller_page.slint +++ b/src/ui/gui/controller_page.slint @@ -1,7 +1,7 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { CheckBox, ComboBox, Button, HorizontalBox, VerticalBox, GroupBox } from "std-widgets.slint"; +import { Switch, ComboBox, Button, HorizontalBox, VerticalBox, GroupBox } from "std-widgets.slint"; import { Page } from "page.slint"; import { State } from "localgame_page.slint"; @@ -55,7 +55,7 @@ export component ControllerConfig inherits Page { title: @tr("Enabled"); VerticalLayout { alignment: space-between; - for player in [0, 1, 2, 3]: CheckBox { + for player in [0, 1, 2, 3]: Switch { checked: ControllerData.controller_enabled[player]; toggled => { ControllerData.controller_enabled[player] = self.checked; @@ -68,7 +68,7 @@ export component ControllerConfig inherits Page { title: @tr("Emulate VRU"); VerticalLayout { alignment: space-between; - for valid in [false, false, false, true]: CheckBox { + for valid in [false, false, false, true]: Switch { enabled: valid; checked: valid && ControllerData.emulate_vru; toggled => { @@ -82,7 +82,7 @@ export component ControllerConfig inherits Page { title: @tr("Transfer Pak"); VerticalLayout { alignment: space-between; - for player in [0, 1, 2, 3]: CheckBox { + for player in [0, 1, 2, 3]: Switch { checked: ControllerData.transferpak[player]; toggled => { ControllerData.transferpak[player] = self.checked; diff --git a/src/ui/gui/input_profile.slint b/src/ui/gui/input_profile.slint index 941867d..76123a5 100644 --- a/src/ui/gui/input_profile.slint +++ b/src/ui/gui/input_profile.slint @@ -1,4 +1,4 @@ -import { StandardButton, HorizontalBox, VerticalBox, Button, LineEdit, CheckBox, Slider } from "std-widgets.slint"; +import { StandardButton, HorizontalBox, VerticalBox, Button, LineEdit, Switch, Slider } from "std-widgets.slint"; export global InputProfileData { in-out property dinput; @@ -47,7 +47,7 @@ export component InputProfileDialog inherits Window { HorizontalBox { alignment: center; - CheckBox { + Switch { text: @tr("Use DirectInput"); checked: InputProfileData.dinput; toggled => { diff --git a/src/ui/gui/retroachievements_page.slint b/src/ui/gui/retroachievements_page.slint index 7a34ce1..498f323 100644 --- a/src/ui/gui/retroachievements_page.slint +++ b/src/ui/gui/retroachievements_page.slint @@ -1,7 +1,7 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { LineEdit, CheckBox, Button, HorizontalBox, VerticalBox } from "std-widgets.slint"; +import { LineEdit, Switch, Button, HorizontalBox, VerticalBox } from "std-widgets.slint"; import { Page } from "page.slint"; export global RAData { @@ -27,7 +27,7 @@ export component RetroAchievements inherits Page { alignment: start; HorizontalBox { alignment: start; - CheckBox { + Switch { text: @tr("Enabled"); checked: RAData.enabled; toggled => { @@ -45,7 +45,7 @@ export component RetroAchievements inherits Page { } HorizontalBox { alignment: start; - CheckBox { + Switch { text: @tr("Hardcore mode"); checked: RAData.hardcore; enabled: RAData.enabled; @@ -57,7 +57,7 @@ export component RetroAchievements inherits Page { } HorizontalBox { alignment: start; - CheckBox { + Switch { text: @tr("Challenge Indicators"); checked: RAData.challenge; enabled: RAData.enabled; @@ -69,7 +69,7 @@ export component RetroAchievements inherits Page { } HorizontalBox { alignment: start; - CheckBox { + Switch { text: @tr("Leaderboard Trackers"); checked: RAData.leaderboard; enabled: RAData.enabled; diff --git a/src/ui/gui/settings_page.slint b/src/ui/gui/settings_page.slint index 5145ab9..0ad1f83 100644 --- a/src/ui/gui/settings_page.slint +++ b/src/ui/gui/settings_page.slint @@ -1,7 +1,7 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { ComboBox, HorizontalBox, VerticalBox, CheckBox } from "std-widgets.slint"; +import { ComboBox, HorizontalBox, VerticalBox, Switch } from "std-widgets.slint"; import { Page } from "page.slint"; export global SettingsData { @@ -40,7 +40,7 @@ export component Settings inherits Page { HorizontalBox { alignment: start; - CheckBox { + Switch { text: @tr("Integer Scaling"); checked: SettingsData.integer_scaling; toggled => { @@ -51,7 +51,7 @@ export component Settings inherits Page { HorizontalBox { alignment: start; - CheckBox { + Switch { text: @tr("Fullscreen (Esc closes game)"); checked: SettingsData.fullscreen; toggled => { @@ -62,7 +62,7 @@ export component Settings inherits Page { HorizontalBox { alignment: start; - CheckBox { + Switch { text: @tr("Widescreen (stretch)"); checked: SettingsData.widescreen; toggled => { @@ -73,7 +73,7 @@ export component Settings inherits Page { HorizontalBox { alignment: start; - CheckBox { + Switch { text: @tr("VSync"); checked: SettingsData.vsync; toggled => { @@ -84,7 +84,7 @@ export component Settings inherits Page { HorizontalBox { alignment: start; - CheckBox { + Switch { text: @tr("Apply CRT shader"); checked: SettingsData.apply_crt_shader; toggled => { @@ -99,7 +99,7 @@ export component Settings inherits Page { HorizontalBox { alignment: start; - CheckBox { + Switch { text: @tr("Overclock N64 CPU (may cause bugs)"); checked: SettingsData.overclock_n64_cpu; toggled => { @@ -110,7 +110,7 @@ export component Settings inherits Page { HorizontalBox { alignment: start; - CheckBox { + Switch { text: @tr("Disable Expansion Pak"); checked: SettingsData.disable_expansion_pak; toggled => { @@ -121,7 +121,7 @@ export component Settings inherits Page { HorizontalBox { alignment: start; - CheckBox { + Switch { text: @tr("Emulate UNFLoader"); checked: SettingsData.emulate_usb; toggled => { From 048d1d662fcca5c7a2cc7a103c1213f86f9fafed Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 20 Apr 2026 08:53:40 -0600 Subject: [PATCH 0795/1117] Track recent roms (#786) * track recent roms * more * more * more * more * more * more * more * more * more * more * more * more * more * more --- src/device.rs | 15 ++- src/main.rs | 5 + src/ui/config.rs | 2 + src/ui/gui.rs | 200 +++++++++++++++++++++++--------- src/ui/gui/appwindow.slint | 5 + src/ui/gui/cheat_page.slint | 2 +- src/ui/gui/localgame_page.slint | 21 +++- src/ui/netplay.rs | 12 +- src/ui/vru.rs | 13 ++- 9 files changed, 204 insertions(+), 71 deletions(-) diff --git a/src/device.rs b/src/device.rs index 9a2c07a..830f3da 100644 --- a/src/device.rs +++ b/src/device.rs @@ -140,7 +140,11 @@ fn swap_rom(contents: Vec) -> Option> { pub fn get_rom_contents(file_path: &std::path::Path) -> Option> { let mut contents = vec![]; - if file_path.extension().unwrap().eq_ignore_ascii_case("zip") { + if file_path + .extension() + .unwrap_or_default() + .eq_ignore_ascii_case("zip") + { let zip_file = fs::File::open(file_path).unwrap(); let mut archive = zip::ZipArchive::new(zip_file).unwrap(); for i in 0..archive.len() { @@ -157,7 +161,11 @@ pub fn get_rom_contents(file_path: &std::path::Path) -> Option> { break; } } - } else if file_path.extension().unwrap().eq_ignore_ascii_case("7z") { + } else if file_path + .extension() + .unwrap_or_default() + .eq_ignore_ascii_case("7z") + { let mut archive = sevenz_rust2::ArchiveReader::open(file_path, sevenz_rust2::Password::empty()).unwrap(); @@ -182,7 +190,8 @@ pub fn get_rom_contents(file_path: &std::path::Path) -> Option> { ) .expect("ok"); } else { - contents = fs::read(file_path).expect("Should have been able to read the file"); + contents = fs::read(file_path) + .unwrap_or_else(|_| panic!("Could not read ROM file: {}", file_path.display())); } if contents.is_empty() { diff --git a/src/main.rs b/src/main.rs index ccc95cc..4a25bd4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -138,6 +138,11 @@ async fn main() -> std::io::Result<()> { } let mut device = device::Device::new(); + + device.ui.config.recent_roms.retain(|x| *x != game); + device.ui.config.recent_roms.insert(0, game); + device.ui.config.recent_roms.truncate(5); + if args.fullscreen { device.ui.video.fullscreen = true; } else { diff --git a/src/ui/config.rs b/src/ui/config.rs index 1338d4c..26a5c06 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -73,6 +73,7 @@ pub struct Config { pub video: Video, pub emulation: Emulation, pub rom_dir: std::path::PathBuf, + pub recent_roms: Vec, } impl Drop for Cheats { @@ -161,6 +162,7 @@ impl Config { usb: false, }, rom_dir: std::path::PathBuf::new(), + recent_roms: Vec::new(), } } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index daa0614..0bca1c6 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -54,47 +54,88 @@ fn check_latest_version(weak: slint::Weak) { }); } +fn run_with_path( + weak: slint::Weak, + path: std::path::PathBuf, + controller_paths: &[Option], +) { + let controller_paths = controller_paths.to_owned(); + let weak2 = weak.clone(); + weak.upgrade_in_event_loop(move |handle| { + if handle.get_game_running() { + return; + } + save_settings(&handle, &controller_paths); + + run_rom( + path, + ui::GameSettings { + overclock: handle.get_overclock_n64_cpu(), + disable_expansion_pak: handle.get_disable_expansion_pak(), + cheats: std::collections::HashMap::new(), // will be filled in later + load_savestate_slot: None, + }, + None, + RASettings { + enabled: handle.get_ra_enabled(), + hardcore: handle.get_ra_hardcore(), + challenge: handle.get_ra_challenge(), + leaderboard: handle.get_ra_leaderboard(), + }, + weak2, + ); + }) + .unwrap(); +} + fn file_dropped(app: &AppWindow, controller_paths: &[Option]) { let weak = app.as_weak(); - let owned_controller_paths = controller_paths.to_owned(); + let controller_paths = controller_paths.to_owned(); app.window() .on_winit_window_event(move |_winit_window, event| { if let slint::winit_030::winit::event::WindowEvent::DroppedFile(path) = event { - let controller_paths = owned_controller_paths.clone(); - let path = path.clone(); - let weak2 = weak.clone(); - weak.upgrade_in_event_loop(move |handle| { - if handle.get_game_running() { - return; - } - save_settings(&handle, &controller_paths); - - run_rom( - path, - ui::GameSettings { - overclock: handle.get_overclock_n64_cpu(), - disable_expansion_pak: handle.get_disable_expansion_pak(), - cheats: std::collections::HashMap::new(), // will be filled in later - load_savestate_slot: None, - }, - None, - RASettings { - enabled: handle.get_ra_enabled(), - hardcore: handle.get_ra_hardcore(), - challenge: handle.get_ra_challenge(), - leaderboard: handle.get_ra_leaderboard(), - }, - weak2, - ); - }) - .unwrap(); + run_with_path(weak.clone(), path.to_path_buf(), &controller_paths); } slint::winit_030::EventResult::Propagate }); } -fn local_game_window(app: &AppWindow, controller_paths: &[Option]) { +fn local_game_window( + app: &AppWindow, + config: &ui::config::Config, + controller_paths: &[Option], +) { let dirs = ui::get_dirs(); + + app.set_recent_roms(slint::ModelRc::from(std::rc::Rc::new( + slint::VecModel::from( + config + .recent_roms + .iter() + .filter(|x| { + if let Ok(exists) = std::fs::exists(x) + && exists + { + true + } else { + false + } + }) + .map(|x| { + ( + x.into(), + std::path::Path::new(x) + .file_name() + .unwrap() + .to_str() + .unwrap() + .into(), + ) + }) + .collect::>(), + ), + ))); + let weak = app.as_weak(); let owned_controller_paths = controller_paths.to_owned(); app.on_open_rom_button_clicked(move || { @@ -106,6 +147,20 @@ fn local_game_window(app: &AppWindow, controller_paths: &[Option]) { .unwrap(); }); + let weak = app.as_weak(); + let owned_controller_paths = controller_paths.to_owned(); + app.on_recent_rom_button_clicked(move |rom| { + let controller_paths = owned_controller_paths.clone(); + weak.upgrade_in_event_loop(move |handle| { + run_with_path( + handle.as_weak(), + std::path::PathBuf::from(rom.to_string()), + &controller_paths, + ); + }) + .unwrap(); + }); + let saves_path = dirs.data_dir.join("saves"); app.on_saves_folder_button_clicked(move || { open::that_detached(saves_path.clone()).unwrap(); @@ -162,11 +217,14 @@ fn update_input_profiles(weak: &slint::Weak, config: &ui::config::Con profile_bindings.push(position.unwrap() as i32); } - let input_profiles = slint::VecModel::default(); - for profile in profiles { - input_profiles.push(profile.into()); - } - handle.set_input_profiles(slint::ModelRc::from(std::rc::Rc::new(input_profiles))); + handle.set_input_profiles(slint::ModelRc::from(std::rc::Rc::new( + slint::VecModel::from( + profiles + .iter() + .map(|x| x.into()) + .collect::>(), + ), + ))); handle .set_selected_profile_binding(slint::ModelRc::from(std::rc::Rc::new(profile_bindings))); @@ -187,7 +245,7 @@ fn update_input_profiles(weak: &slint::Weak, config: &ui::config::Con fn controller_window( app: &AppWindow, config: &ui::config::Config, - controller_names: &Vec, + controller_names: &[String], controller_paths: &[Option], ) { app.set_emulate_vru(config.input.emulate_vru); @@ -200,25 +258,38 @@ fn controller_window( slint::VecModel::from(config.input.transfer_pak.to_vec()), ))); - let gb_rom_paths = slint::VecModel::default(); - for gb_rom_path in config.input.gb_rom_path.iter() { - gb_rom_paths.push(gb_rom_path.into()); - } - app.set_gb_rom_paths(slint::ModelRc::from(std::rc::Rc::new(gb_rom_paths))); + app.set_gb_rom_paths(slint::ModelRc::from(std::rc::Rc::new( + slint::VecModel::from( + config + .input + .gb_rom_path + .iter() + .map(|x| x.into()) + .collect::>(), + ), + ))); - let gb_ram_paths = slint::VecModel::default(); - for gb_ram_path in config.input.gb_ram_path.iter() { - gb_ram_paths.push(gb_ram_path.into()); - } - app.set_gb_ram_paths(slint::ModelRc::from(std::rc::Rc::new(gb_ram_paths))); + app.set_gb_ram_paths(slint::ModelRc::from(std::rc::Rc::new( + slint::VecModel::from( + config + .input + .gb_ram_path + .iter() + .map(|x| x.into()) + .collect::>(), + ), + ))); update_input_profiles(&app.as_weak(), config); - let controllers = slint::VecModel::default(); - for controller in controller_names { - controllers.push(controller.into()); - } - app.set_controller_names(slint::ModelRc::from(std::rc::Rc::new(controllers))); + app.set_controller_names(slint::ModelRc::from(std::rc::Rc::new( + slint::VecModel::from( + controller_names + .iter() + .map(|x| x.into()) + .collect::>(), + ), + ))); let controller_changed = slint::VecModel::default(); let selected_controllers = slint::VecModel::default(); @@ -395,8 +466,8 @@ pub fn app_window() { controller_paths.insert(0, None); settings_window(&app, &game_ui.config); controller_window(&app, &game_ui.config, &controller_names, &controller_paths); + local_game_window(&app, &game_ui.config, &controller_paths); } - local_game_window(&app, &controller_paths); ui::netplay::netplay_window(&app, &controller_paths); ui::cheats::cheats_window(&app); app.run().unwrap(); @@ -453,13 +524,14 @@ pub fn run_rom( } } - if !command + let success = command .arg(file_path.to_str().unwrap()) .status() .await .unwrap() - .success() - { + .success(); + + if !success { eprintln!("Failed to run game"); } @@ -469,6 +541,24 @@ pub fn run_rom( if let Some(rom_dir) = file_path.parent().unwrap().to_str() { handle.set_rom_dir(rom_dir.into()); } + if success { + let recent_roms = slint::VecModel::default(); + recent_roms.push(( + file_path.to_str().unwrap().into(), + file_path.file_name().unwrap().to_str().unwrap().into(), + )); + + for rom in handle.get_recent_roms().iter() { + if rom.0 != file_path.to_str().unwrap() + && recent_roms.row_count() < 5 + && let Ok(exists) = std::fs::exists(&rom.0) + && exists + { + recent_roms.push(rom); + } + } + handle.set_recent_roms(slint::ModelRc::from(std::rc::Rc::new(recent_roms))); + } handle.set_game_running(false); }) .unwrap(); diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 881cffa..d49ec45 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -22,6 +22,7 @@ export component AppWindow inherits Window { callback wiki_button_clicked; callback discord_button_clicked; callback newversion_button_clicked; + callback recent_rom_button_clicked(string); callback patreon_button_clicked; callback github_sponsors_button_clicked; callback source_code_button_clicked; @@ -72,6 +73,7 @@ export component AppWindow inherits Window { in-out property controller_names <=> ControllerData.controller_names; in-out property selected_controller <=> ControllerData.selected_controller; in-out property game_running <=> State.game_running; + in-out property recent_roms <=> State.recent_roms; in-out property blank_profiles <=> ControllerData.blank_profiles; in-out property cheat_game_name <=> CheatsData.cheat_game_name; in-out property cheat_game_crc <=> CheatsData.cheat_game_crc; @@ -105,6 +107,9 @@ export component AppWindow inherits Window { newversion_button_clicked => { newversion_button_clicked(); } + recent_rom_button_clicked(rom) => { + recent_rom_button_clicked(rom); + } } if(side-bar.current-item == 1): ControllerConfig { input_profile_button_clicked => { diff --git a/src/ui/gui/cheat_page.slint b/src/ui/gui/cheat_page.slint index 5df273a..04cf9bb 100644 --- a/src/ui/gui/cheat_page.slint +++ b/src/ui/gui/cheat_page.slint @@ -69,7 +69,7 @@ export component Cheats inherits Page { cheat_toggled(CheatsData.cheat_game_crc,data.cheat_name,"",self.checked); } } - for item[index] in data.options: CheckBox { + for item in data.options: CheckBox { text: item.option; enabled: !data.enabled || (data.enabled && item.enabled); checked: item.enabled; diff --git a/src/ui/gui/localgame_page.slint b/src/ui/gui/localgame_page.slint index 556fb1f..4ade531 100644 --- a/src/ui/gui/localgame_page.slint +++ b/src/ui/gui/localgame_page.slint @@ -1,18 +1,20 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT -import { Button, HorizontalBox, VerticalBox } from "std-widgets.slint"; +import { Button, HorizontalBox, VerticalBox, GroupBox } from "std-widgets.slint"; import { Page } from "page.slint"; import { AboutData, NewVersionButton } from "about_page.slint"; export global State { in-out property game_running; + in-out property <[{a:string, b:string}]> recent_roms; } export component LocalGame inherits Page { callback open_rom_button_clicked; callback saves_folder_button_clicked; callback newversion_button_clicked; + callback recent_rom_button_clicked(string); title: @tr("Local Game"); VerticalBox { @@ -44,5 +46,22 @@ export component LocalGame inherits Page { } } Rectangle { } + + if State.recent_roms.length>0:HorizontalBox { + alignment: center; + GroupBox { + title: @tr("Recent ROMs"); + VerticalLayout { + alignment: space-between; + for rom in State.recent_roms: Button { + text: rom.b; + enabled: !State.game_running; + clicked => { + recent_rom_button_clicked(rom.a); + } + } + } + } + } } } diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 9b61c0a..d90e074 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -1051,13 +1051,13 @@ fn setup_wait_window( handle.set_can_start(false); } - let players_vec: slint::VecModel = - slint::VecModel::default(); - for player in player_names { - players_vec.push(player.into()); - } handle.set_players(slint::ModelRc::from(std::rc::Rc::new( - players_vec, + slint::VecModel::from( + player_names + .iter() + .map(|x| x.into()) + .collect::>(), + ), ))); } }) diff --git a/src/ui/vru.rs b/src/ui/vru.rs index aaea147..ee649ac 100644 --- a/src/ui/vru.rs +++ b/src/ui/vru.rs @@ -17,11 +17,14 @@ pub fn prompt_for_match(words: &[String], frame_time: f64) -> u16 { vru_dialog_weak.unwrap().window().hide().unwrap(); }); - let words_vec = slint::VecModel::default(); - for word in dedup_words { - words_vec.push(word.into()); - } - vru_dialog.set_words(slint::ModelRc::from(std::rc::Rc::new(words_vec))); + vru_dialog.set_words(slint::ModelRc::from(std::rc::Rc::new( + slint::VecModel::from( + dedup_words + .iter() + .map(|x| x.into()) + .collect::>(), + ), + ))); let timer = slint::Timer::default(); timer.start( From 779ef9fe777449d10c104c567237341fa8762b96 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 20 Apr 2026 11:27:09 -0600 Subject: [PATCH 0796/1117] update fullscreen note (#787) --- src/ui/gui/settings_page.slint | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/gui/settings_page.slint b/src/ui/gui/settings_page.slint index 0ad1f83..32c3277 100644 --- a/src/ui/gui/settings_page.slint +++ b/src/ui/gui/settings_page.slint @@ -52,7 +52,7 @@ export component Settings inherits Page { HorizontalBox { alignment: start; Switch { - text: @tr("Fullscreen (Esc closes game)"); + text: @tr("Fullscreen"); checked: SettingsData.fullscreen; toggled => { SettingsData.fullscreen = self.checked; From 412f9287817c1811ac11af90fd734a793273a77e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 20 Apr 2026 14:53:42 -0600 Subject: [PATCH 0797/1117] improve function order (#788) * improve function order * more --- build.rs | 1 + retroachievements/retroachievements.c | 9 +++++++++ retroachievements/retroachievements.h | 1 + src/device.rs | 3 ++- src/main.rs | 1 + src/retroachievements.rs | 4 ++++ 6 files changed, 18 insertions(+), 1 deletion(-) diff --git a/build.rs b/build.rs index c92a360..8d6e099 100644 --- a/build.rs +++ b/build.rs @@ -168,6 +168,7 @@ fn main() { .allowlist_function("ra_shutdown_client") .allowlist_function("ra_get_hardcore") .allowlist_function("ra_load_game") + .allowlist_function("ra_unload_game") .allowlist_function("ra_set_dmem") .allowlist_function("ra_do_frame") .allowlist_function("ra_do_idle") diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index 603ac93..b8ff96e 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -98,6 +98,7 @@ const char *ra_get_token() { return g_token; } void ra_logout_user() { g_user_logged_in = false; + g_game_loaded = false; g_username = NULL; g_token = NULL; rc_client_logout(g_client); @@ -184,6 +185,14 @@ void ra_load_game(const uint8_t *rom, size_t rom_size, void *userdata) { userdata); } +void ra_unload_game() { + if (!g_game_loaded) + return; + + rc_client_unload_game(g_client); + g_game_loaded = false; +} + void ra_set_dmem(const uint8_t *dmem, size_t dmem_size) { g_dmem = dmem; g_dmem_size = dmem_size; diff --git a/retroachievements/retroachievements.h b/retroachievements/retroachievements.h index bc1df5a..5b28287 100644 --- a/retroachievements/retroachievements.h +++ b/retroachievements/retroachievements.h @@ -7,6 +7,7 @@ void ra_shutdown_client(); void ra_welcome(); bool ra_get_hardcore(); void ra_load_game(const uint8_t *rom, size_t rom_size, void *userdata); +void ra_unload_game(); void ra_set_dmem(const uint8_t *dmem, size_t dmem_size); void ra_do_frame(); void ra_do_idle(); diff --git a/src/device.rs b/src/device.rs index 830f3da..7b00360 100644 --- a/src/device.rs +++ b/src/device.rs @@ -89,8 +89,9 @@ pub fn run_game(device: &mut Device, rom_contents: &[u8], game_settings: ui::Gam cpu::run(device); + retroachievements::unload_game(); + ui::storage::write_saves(device); - retroachievements::shutdown_client(); ui::input::close(&mut device.ui); ui::audio::close(&mut device.ui); ui::video::close(&device.ui); diff --git a/src/main.rs b/src/main.rs index 4a25bd4..6de811d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -225,6 +225,7 @@ async fn main() -> std::io::Result<()> { load_savestate_slot: args.load_state, }, ); + retroachievements::shutdown_client(); if device.netplay.is_some() { netplay::close(&mut device); diff --git a/src/retroachievements.rs b/src/retroachievements.rs index e02d541..b65bc30 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -152,6 +152,10 @@ pub async fn load_game(rom: &[u8], rom_size: usize) { rx.await.unwrap(); } +pub fn unload_game() { + unsafe { ra_unload_game() }; +} + pub fn welcome() { unsafe { ra_welcome() }; } From 224bd2df1dd2138438c539ed88293be7ed685d39 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 21 Apr 2026 04:57:41 -0600 Subject: [PATCH 0798/1117] clean up RA variables (#789) * clean up RA variables * more * more * more * more * more * more * more * more * more * more * more * more * more --- build.rs | 1 - retroachievements/retroachievements.c | 112 ++++++++---------------- retroachievements/retroachievements.h | 1 - src/main.rs | 19 ++-- src/retroachievements.rs | 31 +++---- src/ui/gui.rs | 4 +- src/ui/gui/appwindow.slint | 6 +- src/ui/gui/retroachievements_page.slint | 4 +- src/ui/retroachievements.rs | 14 +-- 9 files changed, 77 insertions(+), 115 deletions(-) diff --git a/build.rs b/build.rs index 8d6e099..557a371 100644 --- a/build.rs +++ b/build.rs @@ -182,7 +182,6 @@ fn main() { if cfg!(feature = "gui") { retroachievements_builder = retroachievements_builder .allowlist_function("ra_logout_user") - .allowlist_function("ra_is_user_logged_in") .allowlist_function("ra_get_username") .allowlist_function("ra_get_token"); } diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index b8ff96e..1588629 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -18,13 +18,8 @@ void notify_load_game(void *userdata); static rc_client_t *g_client = NULL; static const uint8_t *g_dmem = NULL; static size_t g_dmem_size = 0; -static bool g_game_loaded = false; -static bool g_user_logged_in = false; static bool g_challenge = false; static bool g_leaderboard = false; -static const char *g_username = NULL; -static const char *g_token = NULL; -static char load_game_error_message[512]; static rc_client_leaderboard_list_t *g_leaderboard_list = NULL; static uint32_t read_memory(uint32_t address, uint8_t *buffer, @@ -73,42 +68,31 @@ static void login_callback(int result, const char *error_message, rc_client_t *client, void *userdata) { // If not successful, just report the error and bail. if (result != RC_OK) { - snprintf(load_game_error_message, sizeof(load_game_error_message), - "RA login failed: %s", error_message); store_retroachievements_credentials(NULL, NULL, userdata); return; - } else { - memset(load_game_error_message, 0, sizeof(load_game_error_message)); } // Login was successful. Capture the token for future logins so we don't have // to store the password anywhere. const rc_client_user_t *user = rc_client_get_user_info(client); store_retroachievements_credentials(user->username, user->token, userdata); - - g_username = user->username; - g_token = user->token; - g_user_logged_in = true; } -bool ra_is_user_logged_in() { return g_user_logged_in; } - -const char *ra_get_username() { return g_username; } -const char *ra_get_token() { return g_token; } - -void ra_logout_user() { - g_user_logged_in = false; - g_game_loaded = false; - g_username = NULL; - g_token = NULL; - rc_client_logout(g_client); +const char *ra_get_username() { + const rc_client_user_t *user = rc_client_get_user_info(g_client); + return user ? user->username : NULL; } +const char *ra_get_token() { + const rc_client_user_t *user = rc_client_get_user_info(g_client); + return user ? user->token : NULL; +} + +void ra_logout_user() { rc_client_logout(g_client); } void ra_login_user(const char *username, const char *password, void *userdata) { // This will generate an HTTP payload and call the server_call chain above. // Eventually, login_callback will be called to let us know if the login was // successful. - g_user_logged_in = false; rc_client_begin_login_with_password(g_client, username, password, login_callback, userdata); } @@ -118,7 +102,6 @@ void ra_login_token_user(const char *username, const char *token, // This is exactly the same functionality as // rc_client_begin_login_with_password, but uses the token captured from the // first login instead of a password. Note that it uses the same callback. - g_user_logged_in = false; rc_client_begin_login_with_token(g_client, username, token, login_callback, userdata); } @@ -127,12 +110,8 @@ static void load_game_callback(int result, const char *error_message, rc_client_t *client, void *userdata) { if (result != RC_OK) { rc_client_set_hardcore_enabled(client, false); - snprintf(load_game_error_message, sizeof(load_game_error_message), - "RA load failed: %s", error_message); notify_load_game(userdata); return; - } else { - memset(load_game_error_message, 0, sizeof(load_game_error_message)); } if (!rc_client_is_processing_required(client)) { @@ -142,20 +121,29 @@ static void load_game_callback(int result, const char *error_message, g_leaderboard_list = rc_client_create_leaderboard_list( client, RC_CLIENT_LEADERBOARD_LIST_GROUPING_NONE); - g_game_loaded = true; notify_load_game(userdata); } void ra_welcome() { - if (strlen(load_game_error_message) > 0) { - rdp_onscreen_message(load_game_error_message, true); - } - if (!g_game_loaded) + if (!g_client) return; char buffer[512]; + if (!rc_client_get_user_info(g_client)) { + snprintf(buffer, sizeof(buffer), "RA login failed"); + rdp_onscreen_message(buffer, true); + return; + } + const rc_client_game_t *game = rc_client_get_game_info(g_client); + + if (!game) { + snprintf(buffer, sizeof(buffer), "RA load failed"); + rdp_onscreen_message(buffer, true); + return; + } + rc_client_user_game_summary_t summary; rc_client_get_user_game_summary(g_client, &summary); @@ -175,22 +163,17 @@ void ra_welcome() { } void ra_load_game(const uint8_t *rom, size_t rom_size, void *userdata) { - if (!g_user_logged_in) { - notify_load_game(userdata); - return; - } - rc_client_begin_identify_and_load_game(g_client, RC_CONSOLE_NINTENDO_64, NULL, rom, rom_size, load_game_callback, userdata); } void ra_unload_game() { - if (!g_game_loaded) - return; - + if (g_leaderboard_list) { + rc_client_destroy_leaderboard_list(g_leaderboard_list); + g_leaderboard_list = NULL; + } rc_client_unload_game(g_client); - g_game_loaded = false; } void ra_set_dmem(const uint8_t *dmem, size_t dmem_size) { @@ -332,8 +315,6 @@ void ra_init_client(bool hardcore, bool challenge, bool leaderboard) { // Create the client instance (using a global variable simplifies this // example) g_client = rc_client_create(read_memory, server_call); - g_game_loaded = false; - g_user_logged_in = false; g_dmem = NULL; g_dmem_size = 0; @@ -348,17 +329,9 @@ void ra_init_client(bool hardcore, bool challenge, bool leaderboard) { g_leaderboard = leaderboard; } -bool ra_get_hardcore() { - if (!g_user_logged_in) - return false; - return rc_client_get_hardcore_enabled(g_client); -} +bool ra_get_hardcore() { return rc_client_get_hardcore_enabled(g_client); } void ra_shutdown_client() { - if (g_leaderboard_list) { - rc_client_destroy_leaderboard_list(g_leaderboard_list); - g_leaderboard_list = NULL; - } if (g_client) { // Release resources associated to the client instance rc_client_destroy(g_client); @@ -366,30 +339,16 @@ void ra_shutdown_client() { } } -void ra_do_frame() { - if (!g_game_loaded) - return; +void ra_do_frame() { rc_client_do_frame(g_client); } - rc_client_do_frame(g_client); -} +void ra_do_idle() { rc_client_idle(g_client); } -void ra_do_idle() { - if (!g_game_loaded) - return; - - rc_client_idle(g_client); -} - -size_t ra_state_size() { - if (!g_game_loaded) - return 0; - - return rc_client_progress_size(g_client); -} +size_t ra_state_size() { return rc_client_progress_size(g_client); } void ra_save_state(uint8_t *state, size_t state_size) { - if (!g_game_loaded) + if (!rc_client_is_game_loaded(g_client)) return; + if (rc_client_serialize_progress_sized(g_client, state, state_size) != RC_OK) { printf("RetroAchievements: Failed to serialize progress\n"); @@ -397,8 +356,9 @@ void ra_save_state(uint8_t *state, size_t state_size) { } void ra_load_state(const uint8_t *state, size_t state_size) { - if (!g_game_loaded) + if (!rc_client_is_game_loaded(g_client)) return; + if (rc_client_deserialize_progress_sized(g_client, state, state_size) != RC_OK) { printf("RetroAchievements: Failed to deserialize progress\n"); @@ -406,7 +366,7 @@ void ra_load_state(const uint8_t *state, size_t state_size) { } void ra_display_inprogress_achievements(void *userdata) { - if (!g_game_loaded) + if (!rc_client_is_game_loaded(g_client)) return; rc_client_achievement_list_t *list = rc_client_create_achievement_list( diff --git a/retroachievements/retroachievements.h b/retroachievements/retroachievements.h index 5b28287..4d4fe40 100644 --- a/retroachievements/retroachievements.h +++ b/retroachievements/retroachievements.h @@ -17,7 +17,6 @@ void ra_logout_user(); void ra_login_user(const char *username, const char *password, void *userdata); void ra_login_token_user(const char *username, const char *token, void *userdata); -bool ra_is_user_logged_in(); const char *ra_get_username(); const char *ra_get_token(); size_t ra_state_size(); diff --git a/src/main.rs b/src/main.rs index 6de811d..a9b327c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -168,15 +168,6 @@ async fn main() -> std::io::Result<()> { .unwrap_or_default() }; - if cfg!(ra_hardcore_enabled) { - retroachievements::init_client( - args.ra_hardcore, - args.ra_challenge, - args.ra_leaderboard, - ); - } else { - retroachievements::init_client(false, args.ra_challenge, args.ra_leaderboard); - } let mut shutdown_tx = None; if let Some(peer_addr) = args.netplay_peer_addr @@ -201,6 +192,16 @@ async fn main() -> std::io::Result<()> { } if let Some(username) = args.ra_username { + retroachievements::init_client( + if cfg!(ra_hardcore_enabled) { + args.ra_hardcore + } else { + false + }, + args.ra_challenge, + args.ra_leaderboard, + ); + let (tx, rx) = tokio::sync::oneshot::channel::(); if let Some(password) = args.ra_password { retroachievements::login_user(username, password, tx); diff --git a/src/retroachievements.rs b/src/retroachievements.rs index b65bc30..154a542 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -208,31 +208,32 @@ pub fn login_token_user(username: String, token: String, tx: tokio::sync::onesho } #[cfg(feature = "gui")] -pub fn is_user_logged_in() -> bool { - unsafe { ra_is_user_logged_in() } -} - -#[cfg(feature = "gui")] -pub fn get_username() -> &'static str { +pub fn get_username() -> Option { let c_username = unsafe { ra_get_username() }; if c_username.is_null() { - "unknown" + None } else { - unsafe { std::ffi::CStr::from_ptr(c_username) } - .to_str() - .unwrap() + Some( + unsafe { std::ffi::CStr::from_ptr(c_username) } + .to_str() + .unwrap() + .to_string(), + ) } } #[cfg(feature = "gui")] -pub fn get_token() -> &'static str { +pub fn get_token() -> Option { let c_token = unsafe { ra_get_token() }; if c_token.is_null() { - "unknown" + None } else { - unsafe { std::ffi::CStr::from_ptr(c_token) } - .to_str() - .unwrap() + Some( + unsafe { std::ffi::CStr::from_ptr(c_token) } + .to_str() + .unwrap() + .to_string(), + ) } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 0bca1c6..607a9ae 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -509,9 +509,9 @@ pub fn run_rom( if ra_settings.enabled { command.args([ "--ra-username", - retroachievements::get_username(), + &retroachievements::get_username().unwrap_or("unknown".into()), "--ra-token", - retroachievements::get_token(), + &retroachievements::get_token().unwrap_or("unknown".into()), ]); if ra_settings.hardcore { command.args(["--ra-hardcore"]); diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index d49ec45..422d523 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -39,7 +39,7 @@ export component AppWindow inherits Window { callback cheat_toggled(string, string, string, bool); callback ra_button_clicked(string); callback ra_games_clicked; - callback ra_show_profile_clicked(string); + callback ra_show_profile_clicked; callback ra_toggled(bool,bool,bool,bool); in property version <=> AboutData.version; in property has_update <=> AboutData.has_update; @@ -154,8 +154,8 @@ export component AppWindow inherits Window { ra_games_clicked => { ra_games_clicked(); } - ra_show_profile_clicked(username) => { - ra_show_profile_clicked(username); + ra_show_profile_clicked => { + ra_show_profile_clicked(); } } if(side-bar.current-item == 5): Settings { } diff --git a/src/ui/gui/retroachievements_page.slint b/src/ui/gui/retroachievements_page.slint index 498f323..a73f7b8 100644 --- a/src/ui/gui/retroachievements_page.slint +++ b/src/ui/gui/retroachievements_page.slint @@ -20,7 +20,7 @@ export component RetroAchievements inherits Page { callback ra_button_clicked(string); callback ra_toggled(bool,bool,bool,bool); callback ra_games_clicked; - callback ra_show_profile_clicked(string); + callback ra_show_profile_clicked; title: @tr("RetroAchievements"); VerticalBox { @@ -89,7 +89,7 @@ export component RetroAchievements inherits Page { enabled: RAData.enabled; text: @tr("View Profile"); clicked => { - ra_show_profile_clicked(RAData.ra_username); + ra_show_profile_clicked(); } } } diff --git a/src/ui/retroachievements.rs b/src/ui/retroachievements.rs index f888038..2645131 100644 --- a/src/ui/retroachievements.rs +++ b/src/ui/retroachievements.rs @@ -86,8 +86,12 @@ pub fn ra_window(app: &ui::gui::AppWindow) { open::that_detached("https://retroachievements.org/system/2-nintendo-64/games").unwrap(); }); - app.on_ra_show_profile_clicked(move |username| { - open::that_detached(format!("https://retroachievements.org/user/{}", username)).unwrap(); + app.on_ra_show_profile_clicked(move || { + open::that_detached(format!( + "https://retroachievements.org/user/{}", + retroachievements::get_username().unwrap_or_default() + )) + .unwrap(); }); } @@ -98,10 +102,8 @@ fn set_current_user_message(app: &ui::gui::AppWindow, rx: tokio::sync::oneshot:: rx.await.unwrap(); weak_app .upgrade_in_event_loop(move |handle| { - if retroachievements::is_user_logged_in() { - handle.set_ra_current_user_message( - format!("Logged in as {}", handle.get_ra_username()).into(), - ); + if let Some(username) = retroachievements::get_username() { + handle.set_ra_current_user_message(format!("Logged in as {}", username).into()); handle.set_ra_show_profile(true); } else { handle.set_ra_current_user_message("Login failed".into()); From bdd12352e139097f13f14ddcb222df05a6abce77 Mon Sep 17 00:00:00 2001 From: Danny Kirkham Date: Tue, 21 Apr 2026 17:23:10 +0100 Subject: [PATCH 0799/1117] Enable accessibility features (#791) --- Cargo.lock | 333 ++++++++++++++++++++++++++++++++++++++++++++++++----- Cargo.toml | 2 +- 2 files changed, 302 insertions(+), 33 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8ee2740..70f31b2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,6 +18,95 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" +[[package]] +name = "accesskit" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eca13c82f9a5cd813120b2e9b6a5d10532c6e4cd140c295cebd1f770095c8a5" + +[[package]] +name = "accesskit_atspi_common" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eb9cc46b7fb6987c4f891f0301b230b29d9e69b4854f060a0cf41fbc407ab77" +dependencies = [ + "accesskit", + "accesskit_consumer", + "atspi-common", + "serde", + "zvariant", +] + +[[package]] +name = "accesskit_consumer" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d880a613f29621c90e801feec40f5dd61d837d7e20bf9b67676d45e7364a36" +dependencies = [ + "accesskit", + "hashbrown 0.16.1", +] + +[[package]] +name = "accesskit_macos" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0ddfc3fe3d457d11cc1c4989105986a03583a1d54d0c25053118944b62e100" +dependencies = [ + "accesskit", + "accesskit_consumer", + "hashbrown 0.16.1", + "objc2 0.5.2", + "objc2-app-kit 0.2.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "accesskit_unix" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5d552169ef018149966ed139bb0311c6947b3343e9140d1b9f88d69da9528fd" +dependencies = [ + "accesskit", + "accesskit_atspi_common", + "async-channel", + "async-executor", + "async-task", + "atspi", + "futures-lite", + "futures-util", + "serde", + "zbus", +] + +[[package]] +name = "accesskit_windows" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d277279d0a3b0c0021dd110b55aa1fe326b09ee2cbc338df28f847c7daf94e25" +dependencies = [ + "accesskit", + "accesskit_consumer", + "hashbrown 0.16.1", + "static_assertions", + "windows 0.61.3", + "windows-core 0.61.2", +] + +[[package]] +name = "accesskit_winit" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db08dff285306264a1de127ea07bb9e7a1ed71bd8593c168d0731caa782516c9" +dependencies = [ + "accesskit", + "accesskit_macos", + "accesskit_unix", + "accesskit_windows", + "raw-window-handle", + "winit", +] + [[package]] name = "adler2" version = "2.0.1" @@ -372,6 +461,43 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +[[package]] +name = "atspi" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c77886257be21c9cd89a4ae7e64860c6f0eefca799bb79127913052bd0eefb3d" +dependencies = [ + "atspi-common", + "atspi-proxies", +] + +[[package]] +name = "atspi-common" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20c5617155740c98003016429ad13fe43ce7a77b007479350a9f8bf95a29f63d" +dependencies = [ + "enumflags2", + "serde", + "static_assertions", + "zbus", + "zbus-lockstep", + "zbus-lockstep-macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "atspi-proxies" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2230e48787ed3eb4088996eab66a32ca20c0b67bbd4fd6cdfe79f04f1f04c9fc" +dependencies = [ + "atspi-common", + "serde", + "zbus", +] + [[package]] name = "auto_enums" version = "0.8.8" @@ -783,7 +909,7 @@ dependencies = [ "js-sys", "num-traits", "wasm-bindgen", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -1627,8 +1753,8 @@ dependencies = [ "read-fonts", "roxmltree", "smallvec", - "windows", - "windows-core", + "windows 0.62.2", + "windows-core 0.62.2", "yeslogic-fontconfig-sys", ] @@ -1814,7 +1940,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" dependencies = [ "rustix 1.1.4", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -2303,6 +2429,8 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90f7fddf48d12b366f352f8fb78d59665c490cf279786772f1d1592e143edd0d" dependencies = [ + "accesskit", + "accesskit_winit", "block2 0.6.2", "cfg-if", "cfg_aliases", @@ -2332,7 +2460,7 @@ dependencies = [ "wasm-bindgen", "web-sys", "webbrowser", - "windows", + "windows 0.62.2", "winit", "zbus", ] @@ -2475,7 +2603,7 @@ dependencies = [ "softbuffer", "unicode-segmentation", "vtable", - "windows", + "windows 0.62.2", "write-fonts", ] @@ -2511,7 +2639,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core", + "windows-core 0.62.2", ] [[package]] @@ -2890,7 +3018,7 @@ dependencies = [ "simd_cesu8", "thiserror 2.0.18", "walkdir", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -3031,7 +3159,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -4239,6 +4367,16 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" +[[package]] +name = "quick-xml" +version = "0.38.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" +dependencies = [ + "memchr", + "serde", +] + [[package]] name = "quick-xml" version = "0.39.2" @@ -5173,7 +5311,7 @@ checksum = "6a71c01d325d40b1031dee67d251a5e0132e79e2a9ec272149a4f4a0d4b8b3be" dependencies = [ "bitflags 2.11.1", "skia-bindings", - "windows", + "windows 0.62.2", ] [[package]] @@ -5431,6 +5569,12 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + [[package]] name = "strict-num" version = "0.1.1" @@ -6493,7 +6637,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c324a910fd86ebdc364a3e61ec1f11737d3b1d6c273c0239ee8ff4bc0d24b4a" dependencies = [ "proc-macro2", - "quick-xml", + "quick-xml 0.39.2", "quote", ] @@ -6569,16 +6713,38 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "windows" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections 0.2.0", + "windows-core 0.61.2", + "windows-future 0.2.1", + "windows-link 0.1.3", + "windows-numerics 0.2.0", +] + [[package]] name = "windows" version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" dependencies = [ - "windows-collections", - "windows-core", - "windows-future", - "windows-numerics", + "windows-collections 0.3.2", + "windows-core 0.62.2", + "windows-future 0.3.2", + "windows-numerics 0.3.1", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core 0.61.2", ] [[package]] @@ -6587,7 +6753,20 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" dependencies = [ - "windows-core", + "windows-core 0.62.2", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", ] [[package]] @@ -6598,9 +6777,20 @@ checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement", "windows-interface", - "windows-link", - "windows-result", - "windows-strings", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", + "windows-threading 0.1.0", ] [[package]] @@ -6609,9 +6799,9 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" dependencies = [ - "windows-core", - "windows-link", - "windows-threading", + "windows-core 0.62.2", + "windows-link 0.2.1", + "windows-threading 0.2.1", ] [[package]] @@ -6636,20 +6826,36 @@ dependencies = [ "syn", ] +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", +] + [[package]] name = "windows-numerics" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" dependencies = [ - "windows-core", - "windows-link", + "windows-core 0.62.2", + "windows-link 0.2.1", ] [[package]] @@ -6658,9 +6864,18 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" dependencies = [ - "windows-link", - "windows-result", - "windows-strings", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", ] [[package]] @@ -6669,7 +6884,16 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link", + "windows-link 0.2.1", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", ] [[package]] @@ -6678,7 +6902,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -6732,7 +6956,7 @@ version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -6787,7 +7011,7 @@ version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows-link", + "windows-link 0.2.1", "windows_aarch64_gnullvm 0.53.1", "windows_aarch64_msvc 0.53.1", "windows_i686_gnu 0.53.1", @@ -6798,13 +7022,22 @@ dependencies = [ "windows_x86_64_msvc 0.53.1", ] +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link 0.1.3", +] + [[package]] name = "windows-threading" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -7355,6 +7588,30 @@ dependencies = [ "zvariant", ] +[[package]] +name = "zbus-lockstep" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6998de05217a084b7578728a9443d04ea4cd80f2a0839b8d78770b76ccd45863" +dependencies = [ + "zbus_xml", + "zvariant", +] + +[[package]] +name = "zbus-lockstep-macros" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10da05367f3a7b7553c8cdf8fa91aee6b64afebe32b51c95177957efc47ca3a0" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "zbus-lockstep", + "zbus_xml", + "zvariant", +] + [[package]] name = "zbus_macros" version = "5.14.0" @@ -7381,6 +7638,18 @@ dependencies = [ "zvariant", ] +[[package]] +name = "zbus_xml" +version = "5.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "441a0064125265655bccc3a6af6bef56814d9277ac83fce48b1cd7e160b80eac" +dependencies = [ + "quick-xml 0.38.4", + "serde", + "zbus_names", + "zvariant", +] + [[package]] name = "zeno" version = "0.3.3" diff --git a/Cargo.toml b/Cargo.toml index c408403..b55e329 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde-big-array = "0.5" -slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "unstable-winit-030", "backend-winit", "renderer-skia"], optional = true } +slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "unstable-winit-030", "backend-winit", "renderer-skia", "accessibility"], optional = true } open = "5.3" sha2 = "0.11" sdl3-sys = { version = "0.6", features = ["build-from-source-static"] } From c4771f91e0ac69dd44d643497c546e61b8fab14c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 21 Apr 2026 14:35:14 -0600 Subject: [PATCH 0800/1117] print error to screen (#793) * print error to screen * mmore --- retroachievements/retroachievements.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index 1588629..228e06c 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -68,6 +68,8 @@ static void login_callback(int result, const char *error_message, rc_client_t *client, void *userdata) { // If not successful, just report the error and bail. if (result != RC_OK) { + if (client && !rc_client_get_userdata(client)) + rc_client_set_userdata(client, strdup(error_message)); store_retroachievements_credentials(NULL, NULL, userdata); return; } @@ -109,6 +111,8 @@ void ra_login_token_user(const char *username, const char *token, static void load_game_callback(int result, const char *error_message, rc_client_t *client, void *userdata) { if (result != RC_OK) { + if (client && !rc_client_get_userdata(client)) + rc_client_set_userdata(client, strdup(error_message)); rc_client_set_hardcore_enabled(client, false); notify_load_game(userdata); return; @@ -130,20 +134,17 @@ void ra_welcome() { char buffer[512]; - if (!rc_client_get_user_info(g_client)) { - snprintf(buffer, sizeof(buffer), "RA login failed"); + char *error_message = rc_client_get_userdata(g_client); + if (error_message) { + snprintf(buffer, sizeof(buffer), "RA Error: %s", error_message); rdp_onscreen_message(buffer, true); + free(error_message); + rc_client_set_userdata(g_client, NULL); return; } const rc_client_game_t *game = rc_client_get_game_info(g_client); - if (!game) { - snprintf(buffer, sizeof(buffer), "RA load failed"); - rdp_onscreen_message(buffer, true); - return; - } - rc_client_user_game_summary_t summary; rc_client_get_user_game_summary(g_client, &summary); From 03f83fe917e0d679c6b460f2e403753cc4edbc3d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 22 Apr 2026 01:08:54 -0600 Subject: [PATCH 0801/1117] fix git version with shallow clones (#794) * fix git version with shallow clones * more --- Cargo.lock | 2 +- Cargo.toml | 2 +- build.rs | 22 +++++++++++++++++----- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 70f31b2..73d16b2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2102,7 +2102,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.17" +version = "1.1.16" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index b55e329..456c672 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.17" +version = "1.1.16" edition = "2024" rust-version = "1.95.0" diff --git a/build.rs b/build.rs index 557a371..bf7ebb7 100644 --- a/build.rs +++ b/build.rs @@ -277,12 +277,24 @@ fn main() { .compile("simd"); } - let git_output = std::process::Command::new("git") - .args(["describe", "--always", "--dirty"]) - .output() - .unwrap(); + let mut git_output = std::process::Command::new("git"); + git_output.args(["describe", "--dirty"]); - let git_describe = String::from_utf8(git_output.stdout).unwrap(); + let git_describe = if let Ok(git_output) = git_output.output() + && git_output.status.success() + { + String::from_utf8(git_output.stdout).unwrap() + } else if let Ok(git_output) = git_output.args(["--always"]).output() + && git_output.status.success() + { + format!( + "v{}-{}", + env!("CARGO_PKG_VERSION"), + String::from_utf8(git_output.stdout).unwrap() + ) + } else { + panic!("Failed to get git describe"); + }; println!("cargo:rustc-env=GIT_DESCRIBE={git_describe}"); println!("cargo:rerun-if-env-changed=NETPLAY_ID"); From 6eb3367f1b1637b842eb3d5615701d1c9d97acdf Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 22 Apr 2026 01:32:22 -0600 Subject: [PATCH 0802/1117] don't show hardcore switch if it is not enabled (#795) --- src/ui/gui/appwindow.slint | 1 + src/ui/gui/retroachievements_page.slint | 3 ++- src/ui/retroachievements.rs | 4 ++++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 422d523..04cd7bd 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -52,6 +52,7 @@ export component AppWindow inherits Window { in-out property ra_hardcore <=> RAData.hardcore; in-out property ra_challenge <=> RAData.challenge; in-out property ra_leaderboard <=> RAData.leaderboard; + in-out property ra_softcore_only <=> RAData.ra_softcore_only; in-out property integer_scaling <=> SettingsData.integer_scaling; in-out property fullscreen <=> SettingsData.fullscreen; in-out property widescreen <=> SettingsData.widescreen; diff --git a/src/ui/gui/retroachievements_page.slint b/src/ui/gui/retroachievements_page.slint index a73f7b8..a55f5d1 100644 --- a/src/ui/gui/retroachievements_page.slint +++ b/src/ui/gui/retroachievements_page.slint @@ -11,6 +11,7 @@ export global RAData { in-out property leaderboard; in-out property ra_logging_in; in-out property ra_show_profile; + in-out property ra_softcore_only; in-out property ra_username; in-out property ra_password; in-out property current_user_message; @@ -43,7 +44,7 @@ export component RetroAchievements inherits Page { } } } - HorizontalBox { + if !RAData.ra_softcore_only:HorizontalBox { alignment: start; Switch { text: @tr("Hardcore mode"); diff --git a/src/ui/retroachievements.rs b/src/ui/retroachievements.rs index 2645131..55d1dcd 100644 --- a/src/ui/retroachievements.rs +++ b/src/ui/retroachievements.rs @@ -18,6 +18,10 @@ pub fn ra_window(app: &ui::gui::AppWindow) { app.set_ra_hardcore(true); } + if !cfg!(ra_hardcore_enabled) { + app.set_ra_softcore_only(true); + } + if app.get_ra_enabled() && !app.get_ra_username().is_empty() { let (tx, rx) = tokio::sync::oneshot::channel::(); retroachievements::login_token_user(app.get_ra_username().to_string(), token, tx); From 3b145909e8640010f0c85ef9e737f3a51f67fa72 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 23 Apr 2026 00:57:03 -0600 Subject: [PATCH 0803/1117] show more detailed version in --version (#797) --- src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index a9b327c..c6d1dd0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,7 +14,7 @@ use std::io::Error; /// N64 emulator #[derive(Parser, Debug)] -#[command(author, version, about, long_about = None, arg_required_else_help = if cfg!(feature = "gui") { false } else { true })] +#[command(author, version=env!("GIT_DESCRIBE"), about, long_about = None, arg_required_else_help = if cfg!(feature = "gui") { false } else { true })] struct Args { game: Option, #[arg(short, long)] From ca4a20f52403bb14f819db53f1cb161d41894666 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 23 Apr 2026 03:02:02 -0600 Subject: [PATCH 0804/1117] update cargo to v1.1.17 (#798) --- Cargo.lock | 96 +++++++++++++++++++++++++++++++----------------------- Cargo.toml | 2 +- 2 files changed, 56 insertions(+), 42 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 73d16b2..50bd6af 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1254,10 +1254,13 @@ dependencies = [ ] [[package]] -name = "ctor-lite" -version = "0.1.2" +name = "ctor" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e162d0c2e2068eb736b71e5597eff0b9944e6b973cd9f37b6a288ab9bf20e300" +checksum = "83cf0d42651b16c6dfe68685716d18480d18a9c39c62d76e8cf3eb6ed5d8bcbf" +dependencies = [ + "dtor", +] [[package]] name = "cursor-icon" @@ -1459,6 +1462,12 @@ dependencies = [ "linux-raw-sys 0.9.4", ] +[[package]] +name = "dtor" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edf234dd1594d6dd434a8fb8cada51ddbbc593e40e4a01556a0b31c62da2775b" + [[package]] name = "dunce" version = "1.0.5" @@ -2102,7 +2111,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.16" +version = "1.1.17" dependencies = [ "bindgen", "cc", @@ -2139,9 +2148,9 @@ dependencies = [ [[package]] name = "grid" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9e2d4c0a8296178d8802098410ca05d86b17a10bb5ab559b3fb404c1f948220" +checksum = "b40ca9252762c466af32d0b1002e91e4e1bc5398f77455e55474deb466355ff5" [[package]] name = "h2" @@ -3132,9 +3141,9 @@ checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" [[package]] name = "libbz2-rs-sys" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" +checksum = "b3a6a8c165077efc8f3a971534c50ea6a1a18b329ef4a66e897a7e3a1494565f" [[package]] name = "libc" @@ -3170,12 +3179,11 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libmimalloc-sys" -version = "0.1.44" +version = "0.1.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "667f4fec20f29dfc6bc7357c582d91796c169ad7e2fce709468aefeb2c099870" +checksum = "2d1eacfa31c33ec25e873c136ba5669f00f9866d0688bea7be4d3f7e43067df6" dependencies = [ "cc", - "libc", ] [[package]] @@ -3361,9 +3369,9 @@ dependencies = [ [[package]] name = "mimalloc" -version = "0.1.48" +version = "0.1.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1ee66a4b64c74f4ef288bcbb9192ad9c3feaad75193129ac8509af543894fd8" +checksum = "b3627c4272df786b9260cabaa46aec1d59c93ede723d4c3ef646c503816b0640" dependencies = [ "libmimalloc-sys", ] @@ -3990,9 +3998,9 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "open" -version = "5.3.3" +version = "5.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43bb73a7fa3799b198970490a51174027ba0d4ec504b03cd08caf513d40024bc" +checksum = "9f3bab717c29a857abf75fcef718d441ec7cb2725f937343c734740a985d37fd" dependencies = [ "is-wsl", "libc", @@ -4013,9 +4021,9 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "orbclient" -version = "0.3.51" +version = "0.3.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59aed3b33578edcfa1bc96a321d590d31832b6ad55a26f0313362ce687e9abd6" +checksum = "12c6933ddbbd16539a7672e697bb8d41ac3a4e99ac43eeb40c07236bd7fcb2dd" dependencies = [ "libc", "libredox", @@ -4348,9 +4356,9 @@ checksum = "007d8adb5ddab6f8e3f491ac63566a7d5002cc7ed73901f72057943fa71ae1ae" [[package]] name = "pxfm" -version = "0.1.28" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a041e753da8b807c9255f28de81879c78c876392ff2469cde94799b2896b9d" +checksum = "e0c5ccf5294c6ccd63a74f1565028353830a9c2f5eb0c682c355c471726a6e3f" [[package]] name = "qoi" @@ -4872,9 +4880,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.38" +version = "0.23.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f9466fb2c14ea04357e91413efb882e2a6d4a406e625449bc0a5d360d53a21" +checksum = "7c2c118cb077cca2822033836dfb1b975355dfb784b5e8da48f7b6c5db74e60e" dependencies = [ "aws-lc-rs", "once_cell", @@ -4935,9 +4943,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" -version = "0.103.12" +version = "0.103.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8279bb85272c9f10811ae6a6c547ff594d6a7f3c6c6b02ee9726d1d0dcfcdd06" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" dependencies = [ "aws-lc-rs", "ring", @@ -5871,12 +5879,12 @@ dependencies = [ [[package]] name = "tiny-xlib" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0324504befd01cab6e0c994f34b2ffa257849ee019d3fb3b64fb2c858887d89e" +checksum = "a90a0ca3ee6a69f2ad28fd11621a4c3f03b371f366be500b64df260c4ffbafb4" dependencies = [ "as-raw-xcb-connection", - "ctor-lite", + "ctor", "libloading", "pkg-config", "tracing", @@ -5910,9 +5918,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.52.0" +version = "1.52.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a91135f59b1cbf38c91e73cf3386fca9bb77915c45ce2771460c9d92f0f3d776" +checksum = "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6" dependencies = [ "bytes", "libc", @@ -5997,7 +6005,7 @@ dependencies = [ "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", "toml_writer", - "winnow 1.0.1", + "winnow 1.0.2", ] [[package]] @@ -6028,7 +6036,7 @@ dependencies = [ "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", "toml_writer", - "winnow 1.0.1", + "winnow 1.0.2", ] [[package]] @@ -6037,7 +6045,7 @@ version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow 1.0.1", + "winnow 1.0.2", ] [[package]] @@ -6172,9 +6180,9 @@ checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e" [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" [[package]] name = "udev" @@ -6413,11 +6421,11 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.2+wasi-0.2.9" +version = "1.0.3+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.57.1", ] [[package]] @@ -6426,7 +6434,7 @@ version = "0.4.0+wasi-0.3.0-rc-2026-01-06" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.51.0", ] [[package]] @@ -6675,9 +6683,9 @@ dependencies = [ [[package]] name = "webbrowser" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe985f41e291eecef5e5c0770a18d28390addb03331c043964d9e916453d6f16" +checksum = "0fc95580916af1e68ff6a7be07446fc5db73ebf71cf092de939bbf5f7e189f72" dependencies = [ "core-foundation 0.10.1", "jni 0.22.4", @@ -7283,9 +7291,9 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" +checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0" dependencies = [ "memchr", ] @@ -7309,6 +7317,12 @@ dependencies = [ "wit-bindgen-rust-macro", ] +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + [[package]] name = "wit-bindgen-core" version = "0.51.0" diff --git a/Cargo.toml b/Cargo.toml index 456c672..b55e329 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.16" +version = "1.1.17" edition = "2024" rust-version = "1.95.0" From 47098f60dd9b3a6bb867638590427199c48e34b9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 23 Apr 2026 10:00:15 -0600 Subject: [PATCH 0805/1117] use timer for message lengths (#799) * use timer for message lengths * more * more * more * more * more * more --- parallel-rdp/interface.cpp | 49 +++++++++++++++------------ parallel-rdp/interface.hpp | 8 ++++- retroachievements/retroachievements.c | 16 ++++----- src/cheats.rs | 2 +- src/device/controller.rs | 15 ++++++-- src/device/cpu.rs | 5 ++- src/device/exceptions.rs | 2 +- src/device/vi.rs | 5 ++- src/netplay.rs | 12 +++++-- src/savestates.rs | 13 ++++--- src/ui/audio.rs | 4 +-- src/ui/video.rs | 7 ++-- 12 files changed, 87 insertions(+), 51 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index c94550f..c3f85d0 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -82,6 +82,7 @@ typedef struct { typedef struct { std::string message; + uint64_t milliseconds; Vulkan::ImageHandle image; } Message; @@ -102,7 +103,6 @@ uint64_t sync_signal; static TTF_Font *message_font; static std::queue messages; -static uint64_t message_timer; static TTF_Font *achievement_challenge_indicator_font; static std::vector achievement_challenge_indicators; @@ -114,8 +114,6 @@ static bool display_challenge_indicator; static bool display_fps; static Vulkan::ImageHandle fps_image; -#define MESSAGE_TIME 3000 // 3 seconds - typedef struct { float SourceSize[4]; float OutputSize[4]; @@ -169,7 +167,7 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { break; case SDL_SCANCODE_F8: if (messages.empty()) - SDL_RunOnMainThread(ra_display_inprogress_achievements, nullptr, true); + SDL_RunOnMainThread(ra_display_inprogress_achievements, nullptr, false); break; case SDL_SCANCODE_F9: display_challenge_indicator = !display_challenge_indicator; @@ -177,7 +175,7 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { std::format("Challenge indicators: {}", display_challenge_indicator ? "ON" : "OFF") .c_str(), - false); + MESSAGE_SHORT); break; case SDL_SCANCODE_F12: callback.reset_game = true; @@ -334,7 +332,6 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, crop_letterbox = false; messages = std::queue(); - message_timer = 0; display_challenge_indicator = true; achievement_challenge_indicators.clear(); @@ -444,6 +441,13 @@ static void draw_fps(CommandBufferHandle cmd, VkViewport vp) { cmd->draw(3); } +static void pop_message(void *userdata) { messages.pop(); } +static uint32_t pop_message_callback(void *userdata, SDL_TimerID timerID, + uint32_t interval) { + SDL_RunOnMainThread(pop_message, NULL, false); + return 0; +} + static void render_frame(Vulkan::Device &device) { RDP::ScanoutOptions options = {}; options.persist_frame_on_invalid_input = true; @@ -519,6 +523,7 @@ static void render_frame(Vulkan::Device &device) { if (!message->image) { message->image = create_message_image(device, vp.width, message_font, message->message.c_str()); + SDL_AddTimer(message->milliseconds, pop_message_callback, NULL); } cmd->set_texture(0, 0, message->image->get_view(), Vulkan::StockSampler::NearestClamp); @@ -529,11 +534,6 @@ static void render_frame(Vulkan::Device &device) { cmd->set_viewport(vp); cmd->draw(3); - - if (SDL_GetTicks() > message_timer) { - messages.pop(); - message_timer = SDL_GetTicks() + MESSAGE_TIME; - } } else if (achievement_progress_indicator_image) { draw_indicator(cmd, achievement_progress_indicator_image, vp); } else if (achievement_challenge_indicator_image && @@ -608,16 +608,18 @@ void rdp_load_state(const uint8_t *state) { memcpy(&rdp_device, state, sizeof(RDP_DEVICE)); } -static void push_onscreen_message(void *message) { - if (messages.empty()) - message_timer = SDL_GetTicks() + MESSAGE_TIME; - messages.push({std::string((const char *)message), Vulkan::ImageHandle()}); +static void push_onscreen_message(void *data) { + Message *message = (Message *)data; + messages.push(*message); + delete message; } -void rdp_onscreen_message(const char *message, bool long_message) { - SDL_RunOnMainThread(push_onscreen_message, (void *)message, true); - if (long_message) - SDL_RunOnMainThread(push_onscreen_message, (void *)message, true); +void rdp_onscreen_message(const char *message, MESSAGE_LENGTH milliseconds) { + Message *data = new Message; + data->message = message; + data->milliseconds = static_cast(milliseconds); + data->image = Vulkan::ImageHandle(); + SDL_RunOnMainThread(push_onscreen_message, data, false); } uint32_t pixel_size(uint32_t pixel_type, uint32_t area) { @@ -849,17 +851,20 @@ uint64_t rdp_process_commands() { return interrupt_timer; } -void rdp_set_fps_callback(void *userdata) { +static void rdp_set_fps_callback(void *userdata) { FPS_DATA *data = (FPS_DATA *)userdata; fps_image = create_message_image( wsi->get_device(), 0, achievement_challenge_indicator_font, std::format("FPS: {} VI/S: {}", data->fps, data->vis).c_str()); + delete data; } void rdp_set_fps(uint32_t fps, uint32_t vis) { if (display_fps) { - FPS_DATA data = {fps, vis}; - SDL_RunOnMainThread(rdp_set_fps_callback, &data, true); + FPS_DATA *data = new FPS_DATA; + data->fps = fps; + data->vis = vis; + SDL_RunOnMainThread(rdp_set_fps_callback, data, false); } } diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 2fb70a6..7ab6569 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -37,6 +37,12 @@ typedef struct { uint32_t save_state_slot; } CALL_BACK; +typedef enum { + MESSAGE_VERY_SHORT = 500, + MESSAGE_SHORT = 3000, + MESSAGE_LONG = 6000, +} MESSAGE_LENGTH; + void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, size_t font_size, uint32_t save_state_slot); void rdp_close(); @@ -45,7 +51,7 @@ void rdp_update_screen(); void rdp_render_frame(); CALL_BACK rdp_check_callback(); uint64_t rdp_process_commands(); -void rdp_onscreen_message(const char *message, bool long_message); +void rdp_onscreen_message(const char *message, MESSAGE_LENGTH milliseconds); void rdp_new_processor(GFX_INFO _gfx_info); void rdp_check_framebuffers(uint32_t address, uint32_t length); size_t rdp_state_size(); diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index 228e06c..2c7a3c9 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -137,7 +137,7 @@ void ra_welcome() { char *error_message = rc_client_get_userdata(g_client); if (error_message) { snprintf(buffer, sizeof(buffer), "RA Error: %s", error_message); - rdp_onscreen_message(buffer, true); + rdp_onscreen_message(buffer, MESSAGE_LONG); free(error_message); rc_client_set_userdata(g_client, NULL); return; @@ -160,7 +160,7 @@ void ra_welcome() { snprintf(buffer + message_length, sizeof(buffer) - message_length, "Game has no achievements"); } - rdp_onscreen_message(buffer, true); + rdp_onscreen_message(buffer, MESSAGE_LONG); } void ra_load_game(const uint8_t *rom, size_t rom_size, void *userdata) { @@ -187,14 +187,14 @@ static void leaderboard_submitted(const rc_client_leaderboard_t *leaderboard) { snprintf(buffer, sizeof(buffer), "Leaderboard submitted: %s - %s", leaderboard->title, leaderboard->tracker_value); - rdp_onscreen_message(buffer, false); + rdp_onscreen_message(buffer, MESSAGE_SHORT); } static void achievement_triggered(const rc_client_achievement_t *achievement) { char buffer[512]; snprintf(buffer, sizeof(buffer), "Unlocked: %s", achievement->title); - rdp_onscreen_message(buffer, false); + rdp_onscreen_message(buffer, MESSAGE_SHORT); } static void game_completed(rc_client_t *client) { @@ -204,7 +204,7 @@ static void game_completed(rc_client_t *client) { snprintf(buffer, sizeof(buffer), "%s: %s", rc_client_get_hardcore_enabled(client) ? "Mastered" : "Completed", game->title); - rdp_onscreen_message(buffer, false); + rdp_onscreen_message(buffer, MESSAGE_SHORT); } static void subset_completed(const rc_client_subset_t *subset, @@ -214,7 +214,7 @@ static void subset_completed(const rc_client_subset_t *subset, snprintf(buffer, sizeof(buffer), "Subset %s: %s", rc_client_get_hardcore_enabled(client) ? "mastered" : "completed", subset->title); - rdp_onscreen_message(buffer, false); + rdp_onscreen_message(buffer, MESSAGE_SHORT); } static void server_error(const rc_client_server_error_t *server_error) { @@ -222,7 +222,7 @@ static void server_error(const rc_client_server_error_t *server_error) { snprintf(buffer, sizeof(buffer), "RA server error: %s", server_error->error_message); - rdp_onscreen_message(buffer, false); + rdp_onscreen_message(buffer, MESSAGE_SHORT); } static const char *get_leaderboard_title(const char *display) { @@ -393,7 +393,7 @@ void ra_display_inprogress_achievements(void *userdata) { } } if (buffer_length > 0) { - rdp_onscreen_message(buffer, false); + rdp_onscreen_message(buffer, MESSAGE_SHORT); } rc_client_destroy_achievement_list(list); } diff --git a/src/cheats.rs b/src/cheats.rs index 8c60dc3..fd704b4 100644 --- a/src/cheats.rs +++ b/src/cheats.rs @@ -79,7 +79,7 @@ pub fn init( if !device.cheats.cheats.is_empty() { device.cheats.enabled = true; - ui::video::onscreen_message("Cheats enabled", false); + ui::video::onscreen_message("Cheats enabled", ui::video::MESSAGE_LENGTH_MESSAGE_SHORT); } } diff --git a/src/device/controller.rs b/src/device/controller.rs index 322dee6..5d49922 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -190,21 +190,30 @@ pub fn pak_switch_event(device: &mut device::Device) { write: device::controller::mempak::write, pak_type: new_pak_type, }); - ui::video::onscreen_message("MemPak selected", false); + ui::video::onscreen_message( + "MemPak selected", + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, + ); } else if new_pak_type == PakType::RumblePak { channel.pak_handler = Some(device::controller::PakHandler { read: device::controller::rumble::read, write: device::controller::rumble::write, pak_type: new_pak_type, }); - ui::video::onscreen_message("RumblePak selected", false); + ui::video::onscreen_message( + "RumblePak selected", + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, + ); } else if new_pak_type == PakType::TransferPak { channel.pak_handler = Some(device::controller::PakHandler { read: device::controller::transferpak::read, write: device::controller::transferpak::write, pak_type: new_pak_type, }); - ui::video::onscreen_message("TransferPak selected", false); + ui::video::onscreen_message( + "TransferPak selected", + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, + ); } channel.change_pak = PakType::None; } diff --git a/src/device/cpu.rs b/src/device/cpu.rs index 1cd59eb..ae6028f 100644 --- a/src/device/cpu.rs +++ b/src/device/cpu.rs @@ -227,7 +227,10 @@ pub fn init(device: &mut device::Device) { device.cpu.clock_rate = if !device.cpu.overclock { 93750000 } else { - ui::video::onscreen_message("Overclocking enabled, setting clock rate to 125 MHz", false); + ui::video::onscreen_message( + "Overclocking enabled, setting clock rate to 125 MHz", + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, + ); 125000000 }; diff --git a/src/device/exceptions.rs b/src/device/exceptions.rs index 38fdc67..f244fa7 100644 --- a/src/device/exceptions.rs +++ b/src/device/exceptions.rs @@ -166,7 +166,7 @@ pub fn reset_event(device: &mut device::Device) { device::pif::reset_pif(device, true); - ui::video::onscreen_message("Game reset", false); + ui::video::onscreen_message("Game reset", ui::video::MESSAGE_LENGTH_MESSAGE_SHORT); } fn exception_general(device: &mut device::Device, vector_offset: u32) { diff --git a/src/device/vi.rs b/src/device/vi.rs index 6a6b90a..d04d813 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -150,7 +150,10 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { if device.netplay.is_none() && paused { if retroachievements::get_hardcore() { - ui::video::onscreen_message("Cannot pause in RA hardcore mode", false); + ui::video::onscreen_message( + "Cannot pause in RA hardcore mode", + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, + ); } else { ui::video::pause_loop(device.vi.frame_time); } diff --git a/src/netplay.rs b/src/netplay.rs index 0f9ce7b..95e7c9a 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -146,7 +146,10 @@ pub fn get_input(device: &mut device::Device, channel: usize) -> ui::input::Inpu .remove(&netplay.player_data[channel].count); if std::time::Instant::now() > timeout { - ui::video::onscreen_message("Lost connection to netplay server", false); + ui::video::onscreen_message( + "Lost connection to netplay server", + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, + ); input = Some(InputEvent { input: 0, plugin: 0, @@ -191,14 +194,17 @@ fn process_incoming(netplay: &mut Netplay) { } if current_status != netplay.status { if ((current_status & 0x1) ^ (netplay.status & 0x1)) != 0 { - ui::video::onscreen_message("Netplay desync detected", true); + ui::video::onscreen_message( + "Netplay desync detected", + ui::video::MESSAGE_LENGTH_MESSAGE_LONG, + ); } for dis in 1..5 { if ((current_status & (0x1 << dis)) ^ (netplay.status & (0x1 << dis))) != 0 { ui::video::onscreen_message( &format!("Player {dis} disconnected"), - false, + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, ); } } diff --git a/src/savestates.rs b/src/savestates.rs index 2e42c2b..74cc27a 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -95,13 +95,16 @@ pub fn create_savestate(device: &device::Device) { "Savestate created in slot {}", device.ui.storage.save_state_slot ), - false, + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, ); } pub fn load_savestate(device: &mut device::Device) { if retroachievements::get_hardcore() { - ui::video::onscreen_message("Cannot load savestate in RA hardcore mode", false); + ui::video::onscreen_message( + "Cannot load savestate in RA hardcore mode", + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, + ); return; } let savestate = std::fs::read(&device.ui.storage.paths.savestate_file_path); @@ -216,7 +219,7 @@ pub fn load_savestate(device: &mut device::Device) { "Savestate loaded from slot {}", device.ui.storage.save_state_slot ), - false, + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, ); } else { ui::video::onscreen_message( @@ -224,7 +227,7 @@ pub fn load_savestate(device: &mut device::Device) { "Failed to load savestate from slot {}", device.ui.storage.save_state_slot ), - false, + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, ); } } else { @@ -233,7 +236,7 @@ pub fn load_savestate(device: &mut device::Device) { "Could not find savestate in slot {}", device.ui.storage.save_state_slot ), - false, + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, ); } } diff --git a/src/ui/audio.rs b/src/ui/audio.rs index f474f49..ee20b11 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -55,7 +55,7 @@ pub fn lower_audio_volume(ui: &mut ui::Ui) { } ui::video::onscreen_message( &format!("Audio volume: {:.0}%", ui.audio.gain * 100.0), - false, + ui::video::MESSAGE_LENGTH_MESSAGE_VERY_SHORT, ); } @@ -69,7 +69,7 @@ pub fn raise_audio_volume(ui: &mut ui::Ui) { } ui::video::onscreen_message( &format!("Audio volume: {:.0}%", ui.audio.gain * 100.0), - false, + ui::video::MESSAGE_LENGTH_MESSAGE_VERY_SHORT, ); } diff --git a/src/ui/video.rs b/src/ui/video.rs index 6de5784..409264a 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -1,4 +1,5 @@ #![allow(non_snake_case)] +#![allow(non_camel_case_types)] include!(concat!(env!("OUT_DIR"), "/parallel_bindings.rs")); use crate::{device, retroachievements, ui}; @@ -215,7 +216,7 @@ pub fn check_callback(device: &mut device::Device) -> (bool, bool) { if device.ui.storage.save_state_slot != callback.save_state_slot { onscreen_message( &format!("Switching savestate slot to {}", callback.save_state_slot), - false, + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, ); device.ui.storage.save_state_slot = callback.save_state_slot; device @@ -247,10 +248,10 @@ pub fn check_framebuffers(address: u32, length: u32) { unsafe { rdp_check_framebuffers(address, length) } } -pub fn onscreen_message(message: &str, long_message: bool) { +pub fn onscreen_message(message: &str, milliseconds: MESSAGE_LENGTH) { unsafe { let c_message = std::ffi::CString::new(message).unwrap(); - rdp_onscreen_message(c_message.as_ptr(), long_message) + rdp_onscreen_message(c_message.as_ptr(), milliseconds) }; } From 0a884e85df3712993523c79bc7c0ace1ddc1a91d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 23 Apr 2026 11:32:53 -0600 Subject: [PATCH 0806/1117] Fix macos sandboxing (#800) * Fix macos sandboxing * more * more * more * more * more * more * more --- .github/workflows/build.yml | 16 ++++++--- Cargo.lock | 51 ++++++++++++++------------- Cargo.toml | 2 +- data/macos/embedded.provisionprofile | Bin 12309 -> 0 bytes data/macos/entitlements_child.plist | 10 ++++++ src/ui/gui.rs | 25 +++++++++++-- 6 files changed, 70 insertions(+), 34 deletions(-) delete mode 100644 data/macos/embedded.provisionprofile create mode 100644 data/macos/entitlements_child.plist diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8163103..eabddf0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -64,7 +64,6 @@ jobs: matrix.llvm }}.tar.xz - name: Build run: | - cargo build --no-default-features -v --target=${{ matrix.target }} cargo build --release -v --target=${{ matrix.target }} mkdir output cp target/${{ matrix.target }}/release/gopher64 output/gopher64-${{ matrix.arch }} @@ -114,7 +113,6 @@ jobs: }}.exe - name: Build run: | - cargo build --no-default-features -v --target=${{ matrix.target }} cargo build --release -v --target=${{ matrix.target }} mkdir output cp target/${{ matrix.target }}/release/gopher64.exe output/gopher64-${{ matrix.arch }}.exe @@ -184,10 +182,14 @@ jobs: run: | cargo install cargo-bundle brew install molten-vk - cargo build --no-default-features -v --target=${{ matrix.target }} + cargo build --release --no-default-features -v --target=${{ matrix.target }} + mv target/${{ matrix.target }}/release/gopher64 target/${{ matrix.target }}/release/gopher64-cli cargo bundle --release --target=${{ matrix.target }} --format osx + cp target/${{ matrix.target }}/release/gopher64-cli target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/MacOS/gopher64-cli install_name_tool -change /opt/homebrew/opt/freetype/lib/libfreetype.6.dylib \ @executable_path/../Frameworks/libfreetype.6.dylib target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/MacOS/gopher64 + install_name_tool -change /opt/homebrew/opt/freetype/lib/libfreetype.6.dylib \ + @executable_path/../Frameworks/libfreetype.6.dylib target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/MacOS/gopher64-cli install_name_tool -change /opt/homebrew/opt/libpng/lib/libpng16.16.dylib \ @executable_path/../Frameworks/libpng16.16.dylib target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/Frameworks/libfreetype.6.dylib env: @@ -206,8 +208,12 @@ jobs: - name: Sign Bundle Release if: ${{ github.ref_type == 'tag' }} run: | - cp data/macos/embedded.provisionprofile target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/embedded.provisionprofile - codesign -f --entitlements data/macos/entitlements_prod.plist --deep --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app + codesign -f --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/Frameworks/libpng16.16.dylib + codesign -f --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/Frameworks/libfreetype.6.dylib + codesign -f --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/Frameworks/libMoltenVK.dylib + codesign -f --entitlements data/macos/entitlements_prod.plist --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/MacOS/gopher64 + codesign -f --entitlements data/macos/entitlements_child.plist --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/MacOS/gopher64-cli + codesign -f --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app zip -r gopher64-${{ matrix.arch }}.zip target/${{ matrix.target }}/release/bundle/osx/Gopher64.app xcrun notarytool submit --wait --apple-id "${{ secrets.APPLE_ID }}" --team-id "${{ secrets.APPLE_DEVELOPER_ID }}" --password "${{ secrets.APPLE_APP_PASSWORD }}" gopher64-${{ matrix.arch }}.zip xcrun stapler staple target/${{ matrix.target }}/release/bundle/osx/Gopher64.app diff --git a/Cargo.lock b/Cargo.lock index 50bd6af..daaec90 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2111,7 +2111,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.17" +version = "1.1.18" dependencies = [ "bindgen", "cc", @@ -2400,11 +2400,12 @@ dependencies = [ [[package]] name = "i-slint-backend-linuxkms" -version = "1.16.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "580bb55cd14cb12bd9169920661235797f4c8220318d0071e971fce345e28488" +checksum = "3224c3aa9f3ea568daf38389d0f7ace164eda4d6f1851042eb83750ac43e1a65" dependencies = [ "calloop 0.14.4", + "cfg_aliases", "drm", "gbm", "glutin", @@ -2420,9 +2421,9 @@ dependencies = [ [[package]] name = "i-slint-backend-selector" -version = "1.16.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ed4d0e693f83dbe68fea69b8ebebda8b245f34350d83e5f8fd62c0333d938b8" +checksum = "f93c9c4203e0a2c5c396b8f1686160816f73e9b9cadaf3915aa3b888a83448aa" dependencies = [ "cfg-if", "i-slint-backend-linuxkms", @@ -2434,9 +2435,9 @@ dependencies = [ [[package]] name = "i-slint-backend-winit" -version = "1.16.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f7fddf48d12b366f352f8fb78d59665c490cf279786772f1d1592e143edd0d" +checksum = "f4df6ec88d452e3c22e418d20c96bc1ccbc9509e81e6596426d3388bf226a5f9" dependencies = [ "accesskit", "accesskit_winit", @@ -2476,9 +2477,9 @@ dependencies = [ [[package]] name = "i-slint-common" -version = "1.16.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f44bc19b68be0295354769bc456ccca1c8cb5a38c4cbb5566b0b3fdb918921b" +checksum = "40cae5cd0a81ce044029ac303256e025f98a4c59495b5189fc22b588da094e01" dependencies = [ "derive_more", "fontique", @@ -2489,9 +2490,9 @@ dependencies = [ [[package]] name = "i-slint-compiler" -version = "1.16.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dba63c5a2774a878478572a0b48b2af4895323d1dc969432c690362f0ab67d5c" +checksum = "a7b7f9834faf2a62cc36f01decc7c683e66bb0861b53511723c3da9ad914d9bb" dependencies = [ "annotate-snippets", "by_address", @@ -2522,9 +2523,9 @@ dependencies = [ [[package]] name = "i-slint-core" -version = "1.16.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bac8ed92f61140aa03e426b28cd135e252c82891bc1ed88f2f799ba367f21c8" +checksum = "89e4a57afd78d8a1f599a78781dc1413af68545b2bc5ba5e143ecf022c75d5f3" dependencies = [ "auto_enums", "bitflags 2.11.1", @@ -2570,9 +2571,9 @@ dependencies = [ [[package]] name = "i-slint-core-macros" -version = "1.16.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "315b38ab2265294fedd11a578468ab146fd579a5765d68d42824a060a4772fc4" +checksum = "7931356d5238281e6be994ec15241fb2d9e66359776d53b4bd6b2fdd9c257c6e" dependencies = [ "quote", "serde_json", @@ -2581,9 +2582,9 @@ dependencies = [ [[package]] name = "i-slint-renderer-skia" -version = "1.16.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cd39e5a129ba4c30d18159c344e756e81d4ea2d0ab3dc5c9834d47339d3e580" +checksum = "d4030ff9eeb1b99fdf9b47472f3a7a582f3bcb57207c9bc07505dc6998abdcbc" dependencies = [ "bytemuck", "cfg-if", @@ -2618,9 +2619,9 @@ dependencies = [ [[package]] name = "i-slint-renderer-software" -version = "1.16.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8fa9e24ad40900de052eda07ee1dbbe0d66efcb25742d81296b1ba9d28c9d0" +checksum = "ee8a21285f3a81a8e1b1e7c385eefe89bf9487f53fabfd5b238c68bc895d6013" dependencies = [ "bytemuck", "clru", @@ -5340,9 +5341,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "slint" -version = "1.16.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "364a1e8fae7f1969224acc59ba729f06aeaf808123796389eae458c396119ef0" +checksum = "d46bc502cc6b113bfd1a7e9a0876532a9454ff4ee905afe09784eaa2ec3f3f33" dependencies = [ "const-field-offset", "i-slint-backend-selector", @@ -5361,9 +5362,9 @@ dependencies = [ [[package]] name = "slint-build" -version = "1.16.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec94124d27a1b691fd8613c653bae47ece44cb469af11ce0edf645acf458ae61" +checksum = "a73854b9adf81fa1600b46df488ffc3796400e8e9b40d504a94a36b55c8f3d0a" dependencies = [ "derive_more", "fontique", @@ -5374,9 +5375,9 @@ dependencies = [ [[package]] name = "slint-macros" -version = "1.16.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2f2659f0896ccf5921a1b0af835c4d5285a3292bfcf36cb9bf9e4fbcbe874fc" +checksum = "6d5884e06072c329da7096ad1367eb83b98c78e5313f7ac90d66f90d4acc62ee" dependencies = [ "i-slint-compiler", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index b55e329..04be9dc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.17" +version = "1.1.18" edition = "2024" rust-version = "1.95.0" diff --git a/data/macos/embedded.provisionprofile b/data/macos/embedded.provisionprofile deleted file mode 100644 index b2cd43fad3749d232248bb158fbb91df09872e17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12309 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 + + + + com.apple.security.app-sandbox + + com.apple.security.inherit + + + diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 607a9ae..d53c257 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -321,8 +321,17 @@ fn controller_window( let deadzone = handle.get_deadzone(); tokio::spawn(async move { - let mut command = - tokio::process::Command::new(std::env::current_exe().unwrap()); + let cli_path = std::env::current_exe() + .unwrap() + .parent() + .unwrap() + .join(format!("{}-cli", env!("CARGO_PKG_NAME"))); + let cmd_path = if cfg!(target_os = "macos") && cli_path.exists() { + cli_path + } else { + std::env::current_exe().unwrap() + }; + let mut command = tokio::process::Command::new(cmd_path); command.args([ "--configure-input-profile", &profile_name, @@ -485,7 +494,17 @@ pub fn run_rom( weak.upgrade_in_event_loop(move |handle| handle.set_game_running(true)) .unwrap(); - let mut command = tokio::process::Command::new(std::env::current_exe().unwrap()); + let cli_path = std::env::current_exe() + .unwrap() + .parent() + .unwrap() + .join(format!("{}-cli", env!("CARGO_PKG_NAME"))); + let cmd_path = if cfg!(target_os = "macos") && cli_path.exists() { + cli_path + } else { + std::env::current_exe().unwrap() + }; + let mut command = tokio::process::Command::new(cmd_path); command.args([ "--overclock", &game_settings.overclock.to_string(), From 6c2ae4dc5a3f8ffe2e16ad45de8119e32885fc2b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 23 Apr 2026 12:01:01 -0600 Subject: [PATCH 0807/1117] update mac signing command (#801) --- .github/workflows/build.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index eabddf0..1c125bd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -211,9 +211,8 @@ jobs: codesign -f --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/Frameworks/libpng16.16.dylib codesign -f --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/Frameworks/libfreetype.6.dylib codesign -f --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/Frameworks/libMoltenVK.dylib - codesign -f --entitlements data/macos/entitlements_prod.plist --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/MacOS/gopher64 codesign -f --entitlements data/macos/entitlements_child.plist --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/MacOS/gopher64-cli - codesign -f --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app + codesign -f --entitlements data/macos/entitlements_prod.plist --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app zip -r gopher64-${{ matrix.arch }}.zip target/${{ matrix.target }}/release/bundle/osx/Gopher64.app xcrun notarytool submit --wait --apple-id "${{ secrets.APPLE_ID }}" --team-id "${{ secrets.APPLE_DEVELOPER_ID }}" --password "${{ secrets.APPLE_APP_PASSWORD }}" gopher64-${{ matrix.arch }}.zip xcrun stapler staple target/${{ matrix.target }}/release/bundle/osx/Gopher64.app From b267b832481b5d96a5dd8fa8331f7fb233d6eac2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 24 Apr 2026 02:23:28 -0600 Subject: [PATCH 0808/1117] upload to itch.io (#802) --- .github/workflows/build.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1c125bd..3c96d66 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -75,6 +75,15 @@ jobs: name: gopher64-${{ matrix.arch }} path: output/gopher64-${{ matrix.arch }} archive: false + - name: Setup butler + if: ${{ github.ref_type == 'tag' }} + uses: remarkablegames/setup-butler@v2 + - name: Upload to itch.io + if: ${{ github.ref_type == 'tag' }} + run: | + butler push output/gopher64-${{ matrix.arch }} loganmc10/gopher64:${{ matrix.arch }} --userversion ${GITHUB_REF_NAME#v} + env: + BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }} build-windows: runs-on: ${{ matrix.os }} @@ -148,6 +157,15 @@ jobs: path: output-signed/gopher64-${{ matrix.arch }}.exe archive: false overwrite: true + - name: Setup butler + if: ${{ github.ref_type == 'tag' }} + uses: remarkablegames/setup-butler@v2 + - name: Upload to itch.io + if: ${{ github.ref_type == 'tag' }} + run: | + butler push output-signed/gopher64-${{ matrix.arch }}.exe loganmc10/gopher64:${{ matrix.arch }} --userversion ${GITHUB_REF_NAME#v} + env: + BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }} build-macos: runs-on: macos-15 @@ -221,3 +239,12 @@ jobs: with: name: gopher64-${{ matrix.arch }} path: target/${{ matrix.target }}/release/bundle/osx + - name: Setup butler + if: ${{ github.ref_type == 'tag' }} + uses: remarkablegames/setup-butler@v2 + - name: Upload to itch.io + if: ${{ github.ref_type == 'tag' }} + run: | + butler push target/${{ matrix.target }}/release/bundle/osx/Gopher64.app loganmc10/gopher64:${{ matrix.arch }} --userversion ${GITHUB_REF_NAME#v} + env: + BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }} From a233c72dad13bb01a4c5297b4dbf42cf4fa7de4a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 24 Apr 2026 02:54:47 -0600 Subject: [PATCH 0809/1117] add itch.io link (#803) --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 62f8f20..c26e8e4 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,8 @@ Gopher64 is a cross-platform N64 emulator. Some notable features: ## download + + Windows: https://github.com/gopher64/gopher64/releases/latest/download/gopher64-windows-x86_64.exe MacOS: https://github.com/gopher64/gopher64/releases/latest/download/gopher64-macos-aarch64.zip From ae4e7cb01f6d78f54890d133a074e13cc849dee9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 24 Apr 2026 14:12:24 -0600 Subject: [PATCH 0810/1117] Update download links (#804) --- README.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c26e8e4..f5fa442 100644 --- a/README.md +++ b/README.md @@ -13,11 +13,16 @@ Gopher64 is a cross-platform N64 emulator. Some notable features: -Windows: https://github.com/gopher64/gopher64/releases/latest/download/gopher64-windows-x86_64.exe +Windows: +* Standalone executable: [gopher64-windows-x86_64.exe](https://github.com/gopher64/gopher64/releases/latest/download/gopher64-windows-x86_64.exe) -MacOS: https://github.com/gopher64/gopher64/releases/latest/download/gopher64-macos-aarch64.zip +MacOS: +* App Bundle: [gopher64-macos-aarch64.zip](https://github.com/gopher64/gopher64/releases/latest/download/gopher64-macos-aarch64.zip) +* Homebrew: `brew install --cask gopher64` -Linux: https://flathub.org/apps/io.github.gopher64.gopher64 +Linux: +* Standalone executable: [gopher64-linux-x86_64](https://github.com/gopher64/gopher64/releases/latest/download/gopher64-linux-x86_64) +* Flatpak: `flatpak install flathub io.github.gopher64.gopher64` ## wiki From 65c63dfc5d70a4f8fe05c2f3cb4a0e1a1b67a3aa Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 24 Apr 2026 23:15:47 -0600 Subject: [PATCH 0811/1117] Always set user agent (#805) * Always set user agent * more --- src/retroachievements.rs | 15 ++------------- src/ui.rs | 11 +++++++++++ src/ui/gui.rs | 6 +----- src/ui/netplay.rs | 6 +++--- 4 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/retroachievements.rs b/src/retroachievements.rs index 154a542..7fdd7e0 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -2,17 +2,6 @@ include!(concat!(env!("OUT_DIR"), "/retroachievements_bindings.rs")); use crate::ui; -static WEB_CLIENT: std::sync::LazyLock = std::sync::LazyLock::new(|| { - reqwest::Client::builder() - .user_agent(format!( - "{}/{}", - env!("CARGO_PKG_NAME"), - env!("GIT_DESCRIBE") - )) - .build() - .unwrap() -}); - #[derive(serde::Serialize, serde::Deserialize)] pub struct RAConfig { pub username: String, @@ -85,13 +74,13 @@ pub extern "C" fn rust_server_call( unsafe { std::ffi::CStr::from_ptr(c_post_data).to_str().unwrap() }.to_string(); let content_type = unsafe { std::ffi::CStr::from_ptr(c_content_type).to_str().unwrap() }.to_string(); - WEB_CLIENT + ui::WEB_CLIENT .post(url) .body(post_data) .header(reqwest::header::CONTENT_TYPE, content_type) .send() } else { - WEB_CLIENT.get(url).send() + ui::WEB_CLIENT.get(url).send() }; let callback = c_callback.addr(); let callback_data = c_callback_data.addr(); diff --git a/src/ui.rs b/src/ui.rs index c7e924a..1ba7c64 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -15,6 +15,17 @@ pub mod video; #[cfg(feature = "gui")] pub mod vru; +pub static WEB_CLIENT: std::sync::LazyLock = std::sync::LazyLock::new(|| { + reqwest::Client::builder() + .user_agent(format!( + "{}/{}", + env!("CARGO_PKG_NAME"), + env!("GIT_DESCRIBE") + )) + .build() + .unwrap() +}); + pub struct Dirs { pub config_dir: std::path::PathBuf, pub data_dir: std::path::PathBuf, diff --git a/src/ui/gui.rs b/src/ui/gui.rs index d53c257..c09d65e 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -28,11 +28,7 @@ pub struct RASettings { } fn check_latest_version(weak: slint::Weak) { - let client = reqwest::Client::builder() - .user_agent(env!("CARGO_PKG_NAME")) - .build() - .unwrap(); - let task = client + let task = ui::WEB_CLIENT .get("https://api.github.com/repos/gopher64/gopher64/releases/latest") .send(); tokio::spawn(async move { diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index d90e074..e9f4fc2 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -109,7 +109,7 @@ impl NetplayPages for NetplayJoin { } fn populate_server_names(weak: slint::Weak) { - let task = reqwest::Client::new() + let task = ui::WEB_CLIENT .get("https://dispatch.gopher64.com/getRegions") .header("netplay-id", env!("NETPLAY_ID")) .send(); @@ -292,7 +292,7 @@ pub fn setup_create_window( let weak_dialog = message_dialog.as_weak(); message_dialog.show().unwrap(); - let task = reqwest::Client::new() + let task = ui::WEB_CLIENT .get("https://dispatch.gopher64.com/createServer") .query(&[("region", server_url.strip_prefix("dispatcher:").unwrap())]) .header("netplay-id", env!("NETPLAY_ID")) @@ -448,7 +448,7 @@ fn show_netplay_error(message: String) { } fn update_sessions(weak: slint::Weak) { - let task = reqwest::Client::new() + let task = ui::WEB_CLIENT .get("https://dispatch.gopher64.com/getServers") .header("netplay-id", env!("NETPLAY_ID")) .send(); From 5e6a7731f4675d30136fae8bffc9ca5fe298b67d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 24 Apr 2026 23:22:58 -0600 Subject: [PATCH 0812/1117] update to 1.1.19 (#806) * update to 1.1.19 * more --- .github/workflows/build.yml | 2 +- Cargo.lock | 22 +++++++++++----------- Cargo.toml | 4 ++-- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3c96d66..630e9ca 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -212,7 +212,7 @@ jobs: @executable_path/../Frameworks/libpng16.16.dylib target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/Frameworks/libfreetype.6.dylib env: NETPLAY_ID: ${{ secrets.NETPLAY_ID }} - MACOSX_DEPLOYMENT_TARGET: "15.7" + MACOSX_DEPLOYMENT_TARGET: "15.0" - name: Sign Bundle Dev if: ${{ github.ref_type != 'tag' }} run: | diff --git a/Cargo.lock b/Cargo.lock index daaec90..f896dd9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -842,9 +842,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.60" +version = "1.2.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43c5703da9466b66a946814e1adf53ea2c90f10063b86290cc9eb67ce3478a20" +checksum = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d" dependencies = [ "find-msvc-tools", "jobserver", @@ -1270,9 +1270,9 @@ checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" [[package]] name = "data-encoding" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" +checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" [[package]] name = "data-url" @@ -2111,7 +2111,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.18" +version = "1.1.19" dependencies = [ "bindgen", "cc", @@ -2330,9 +2330,9 @@ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "hybrid-array" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3944cf8cf766b40e2a1a333ee5e9b563f854d5fa49d6a8ca2764e97c6eddb214" +checksum = "08d46837a0ed51fe95bd3b05de33cd64a1ee88fc797477ca48446872504507c5" dependencies = [ "typenum", ] @@ -3148,9 +3148,9 @@ checksum = "b3a6a8c165077efc8f3a971534c50ea6a1a18b329ef4a66e897a7e3a1494565f" [[package]] name = "libc" -version = "0.2.185" +version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libfuzzer-sys" @@ -4907,9 +4907,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.14.0" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" +checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" dependencies = [ "web-time", "zeroize", diff --git a/Cargo.toml b/Cargo.toml index 04be9dc..7aced01 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.18" +version = "1.1.19" edition = "2024" rust-version = "1.95.0" @@ -60,4 +60,4 @@ identifier = "io.github.gopher64.gopher64" category = "public.app-category.games" icon = ["data/icon/gopher64_128x128.png","data/icon/gopher64_256x256.png","data/icon/gopher64_512x512.png"] osx_frameworks = ["/opt/homebrew/opt/molten-vk/lib/libMoltenVK.dylib","/opt/homebrew/opt/freetype/lib/libfreetype.6.dylib","/opt/homebrew/opt/libpng/lib/libpng16.16.dylib"] -osx_minimum_system_version = "15.7" +osx_minimum_system_version = "15.0" From 212557610b1a723af0c1110fa0011302743e90a4 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 24 Apr 2026 23:53:30 -0600 Subject: [PATCH 0813/1117] use bash shell (#807) --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 630e9ca..de95073 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -162,6 +162,7 @@ jobs: uses: remarkablegames/setup-butler@v2 - name: Upload to itch.io if: ${{ github.ref_type == 'tag' }} + shell: bash run: | butler push output-signed/gopher64-${{ matrix.arch }}.exe loganmc10/gopher64:${{ matrix.arch }} --userversion ${GITHUB_REF_NAME#v} env: From 47dd6d61b04bdcf8a7e07147abef746f95b78024 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 25 Apr 2026 03:20:56 -0600 Subject: [PATCH 0814/1117] update setup-butler (#808) --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index de95073..a436cdf 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -77,7 +77,7 @@ jobs: archive: false - name: Setup butler if: ${{ github.ref_type == 'tag' }} - uses: remarkablegames/setup-butler@v2 + uses: remarkablegames/setup-butler@v3 - name: Upload to itch.io if: ${{ github.ref_type == 'tag' }} run: | @@ -159,7 +159,7 @@ jobs: overwrite: true - name: Setup butler if: ${{ github.ref_type == 'tag' }} - uses: remarkablegames/setup-butler@v2 + uses: remarkablegames/setup-butler@v3 - name: Upload to itch.io if: ${{ github.ref_type == 'tag' }} shell: bash @@ -242,7 +242,7 @@ jobs: path: target/${{ matrix.target }}/release/bundle/osx - name: Setup butler if: ${{ github.ref_type == 'tag' }} - uses: remarkablegames/setup-butler@v2 + uses: remarkablegames/setup-butler@v3 - name: Upload to itch.io if: ${{ github.ref_type == 'tag' }} run: | From c1e73320b1a0ee6baa8c2e82839ace9d908d8987 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 25 Apr 2026 08:05:28 -0600 Subject: [PATCH 0815/1117] adjust audio buffer management (#809) * adjust audio buffer management * more * more --- src/device/ai.rs | 2 ++ src/ui/audio.rs | 91 +++++++++++++++++++++++++----------------------- 2 files changed, 49 insertions(+), 44 deletions(-) diff --git a/src/device/ai.rs b/src/device/ai.rs index 873d296..84c4a6c 100644 --- a/src/device/ai.rs +++ b/src/device/ai.rs @@ -87,6 +87,7 @@ fn fifo_push(device: &mut device::Device) { device.ai.regs[AI_STATUS_REG as usize] |= AI_STATUS_BUSY; do_dma(device); + ui::audio::resume_game_audio(&mut device.ui); } } @@ -101,6 +102,7 @@ fn fifo_pop(device: &mut device::Device) { } else { device.ai.regs[AI_STATUS_REG as usize] &= !AI_STATUS_BUSY; device.ai.delayed_carry = false; + ui::audio::pause_game_audio(&mut device.ui); } } diff --git a/src/ui/audio.rs b/src/ui/audio.rs index ee20b11..e457668 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -6,6 +6,25 @@ pub fn init(ui: &mut ui::Ui, frequency: u64) { init_game_audio(ui, frequency); } +unsafe extern "C" fn audio_callback( + _userdata: *mut std::ffi::c_void, + audio_stream: *mut sdl3_sys::audio::SDL_AudioStream, + additional_amount: i32, + _total_amount: i32, +) { + if additional_amount > 0 { + unsafe { + sdl3_sys::audio::SDL_PutAudioStreamData( + audio_stream, + vec![0; additional_amount as usize].as_ptr() as *const std::ffi::c_void, + additional_amount, + ) + }; + + adjust_audio_frequency(audio_stream, -0.0005); + } +} + pub fn init_game_audio(ui: &mut ui::Ui, frequency: u64) { let game_audio_spec = sdl3_sys::audio::SDL_AudioSpec { format: sdl3_sys::audio::SDL_AUDIO_S16LE, @@ -26,9 +45,14 @@ pub fn init_game_audio(ui: &mut ui::Ui, frequency: u64) { } if !unsafe { sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.audio_stream, ui.audio.gain) - && sdl3_sys::audio::SDL_ResumeAudioStreamDevice(ui.audio.audio_stream) + && sdl3_sys::audio::SDL_PauseAudioStreamDevice(ui.audio.audio_stream) + && sdl3_sys::audio::SDL_SetAudioStreamGetCallback( + ui.audio.audio_stream, + Some(audio_callback), + std::ptr::null_mut(), + ) } { - panic!("Could not resume audio stream"); + panic!("Could not initialize audio stream"); } } @@ -36,6 +60,18 @@ pub fn close(ui: &mut ui::Ui) { close_game_audio(ui); } +pub fn resume_game_audio(ui: &mut ui::Ui) { + unsafe { + sdl3_sys::audio::SDL_ResumeAudioStreamDevice(ui.audio.audio_stream); + } +} + +pub fn pause_game_audio(ui: &mut ui::Ui) { + unsafe { + sdl3_sys::audio::SDL_PauseAudioStreamDevice(ui.audio.audio_stream); + } +} + pub fn close_game_audio(ui: &mut ui::Ui) { unsafe { if !ui.audio.audio_stream.is_null() { @@ -73,22 +109,18 @@ pub fn raise_audio_volume(ui: &mut ui::Ui) { ); } -fn adjust_audio_frequency(device: &device::Device, frequency: f32) { - if !device.vi.enable_speed_limiter { - return; - } - +fn adjust_audio_frequency(audio_stream: *mut sdl3_sys::audio::SDL_AudioStream, frequency: f32) { unsafe { - let current_ratio = - sdl3_sys::everything::SDL_GetAudioStreamFrequencyRatio(device.ui.audio.audio_stream); + let current_ratio = sdl3_sys::everything::SDL_GetAudioStreamFrequencyRatio(audio_stream); sdl3_sys::everything::SDL_SetAudioStreamFrequencyRatio( - device.ui.audio.audio_stream, + audio_stream, (current_ratio + frequency).clamp(0.995, 1.005), ); + /* println!( "Adjusted audio frequency ratio to {}", - sdl3_sys::everything::SDL_GetAudioStreamFrequencyRatio(device.ui.audio.audio_stream) + sdl3_sys::everything::SDL_GetAudioStreamFrequencyRatio(audio_stream) ); */ } @@ -116,44 +148,15 @@ pub fn play_audio(device: &device::Device, dram_addr: usize, length: u64) { unsafe { sdl3_sys::audio::SDL_GetAudioStreamQueued(device.ui.audio.audio_stream) } as f64; let samples_per_frame = device.ai.freq as f64 * device.vi.frame_time * 4.0; let max_latency = samples_per_frame * 8.0; - - if audio_queued < samples_per_frame { - let silence_buffer: Vec = vec![0; samples_per_frame as usize & !3]; - if !unsafe { - sdl3_sys::audio::SDL_PutAudioStreamData( - device.ui.audio.audio_stream, - silence_buffer.as_ptr() as *const std::ffi::c_void, - silence_buffer.len() as i32, - ) - } { - panic!("Could not play audio"); - } - /* - println!( - "Audio underrun: queued {} samples, expected at least {} samples", - audio_queued, samples_per_frame - ); - */ - adjust_audio_frequency(device, -0.0005); - } - if audio_queued < max_latency { - if !unsafe { + unsafe { sdl3_sys::audio::SDL_PutAudioStreamData( device.ui.audio.audio_stream, primary_buffer.as_ptr() as *const std::ffi::c_void, primary_buffer.len() as i32 * 2, ) - } { - panic!("Could not play audio"); - } - } else { - /* - println!( - "Audio overrun: queued {} samples, expected at most {} samples", - audio_queued, max_latency - ); - */ - adjust_audio_frequency(device, 0.0005); + }; + } else if device.vi.enable_speed_limiter { + adjust_audio_frequency(device.ui.audio.audio_stream, 0.0005); } } From fe42efadfa4ff495c833a88398dfd8a026f7d36d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 25 Apr 2026 09:05:54 -0600 Subject: [PATCH 0816/1117] limit frequent audio adjustments (#810) --- src/ui/audio.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/ui/audio.rs b/src/ui/audio.rs index e457668..3a2bcca 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -1,6 +1,8 @@ use crate::device; use crate::ui; +static ADJUST_LOCKED: std::sync::atomic::AtomicBool = std::sync::atomic::AtomicBool::new(false); + pub fn init(ui: &mut ui::Ui, frequency: u64) { ui::sdl_init(sdl3_sys::init::SDL_INIT_AUDIO); init_game_audio(ui, frequency); @@ -109,8 +111,24 @@ pub fn raise_audio_volume(ui: &mut ui::Ui) { ); } +unsafe extern "C" fn lock_callback( + _userdata: *mut std::ffi::c_void, + _id: sdl3_sys::timer::SDL_TimerID, + _interval: u32, +) -> u32 { + ADJUST_LOCKED.store(false, std::sync::atomic::Ordering::Relaxed); + 0 +} + fn adjust_audio_frequency(audio_stream: *mut sdl3_sys::audio::SDL_AudioStream, frequency: f32) { + if ADJUST_LOCKED.load(std::sync::atomic::Ordering::Relaxed) { + return; + } + + ADJUST_LOCKED.store(true, std::sync::atomic::Ordering::Relaxed); + unsafe { + sdl3_sys::timer::SDL_AddTimer(1000, Some(lock_callback), std::ptr::null_mut()); let current_ratio = sdl3_sys::everything::SDL_GetAudioStreamFrequencyRatio(audio_stream); sdl3_sys::everything::SDL_SetAudioStreamFrequencyRatio( audio_stream, From 511d8461c2e4972ad9b62e03dfb3a22a1dcf865a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 26 Apr 2026 09:46:12 -0600 Subject: [PATCH 0817/1117] add note about modifying profile (#812) --- src/ui/gui/input_profile.slint | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/gui/input_profile.slint b/src/ui/gui/input_profile.slint index 76123a5..8b4e494 100644 --- a/src/ui/gui/input_profile.slint +++ b/src/ui/gui/input_profile.slint @@ -7,7 +7,7 @@ export global InputProfileData { } export component InputProfileDialog inherits Window { - title: @tr("Create Input Profile"); + title: @tr("Create/Modify Input Profile"); callback profile_creation_button_clicked; in-out property dinput <=> InputProfileData.dinput; in-out property profile_name <=> InputProfileData.profile_name; @@ -15,7 +15,7 @@ export component InputProfileDialog inherits Window { VerticalBox { HorizontalBox { LineEdit { - placeholder-text: @tr("Enter profile name"); + placeholder-text: @tr("Enter profile name to create or modify"); preferred-width: 300px; edited(text) => { InputProfileData.profile_name = text; From ca00ee1a42d0b34ee87b85ecff997502184fff96 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Apr 2026 05:59:33 +0200 Subject: [PATCH 0818/1117] Bump apple-actions/import-codesign-certs from 6 to 7 (#814) Bumps [apple-actions/import-codesign-certs](https://github.com/apple-actions/import-codesign-certs) from 6 to 7. - [Release notes](https://github.com/apple-actions/import-codesign-certs/releases) - [Commits](https://github.com/apple-actions/import-codesign-certs/compare/v6...v7) --- updated-dependencies: - dependency-name: apple-actions/import-codesign-certs dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a436cdf..e605132 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -220,7 +220,7 @@ jobs: codesign -f --entitlements data/macos/entitlements_dev.plist --deep --timestamp --options runtime -s - target/${{ matrix.target }}/release/bundle/osx/Gopher64.app - name: Import Codesign Certs if: ${{ github.ref_type == 'tag' }} - uses: apple-actions/import-codesign-certs@v6 + uses: apple-actions/import-codesign-certs@v7 with: p12-file-base64: ${{ secrets.APPLE_CERTIFICATES_FILE_BASE64 }} p12-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }} From b2ef544513649a740c8a630eb87969e1f7e3bb4d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 27 Apr 2026 08:38:20 -0600 Subject: [PATCH 0819/1117] handle controller reconnection (#815) --- build.rs | 1 + parallel-rdp/interface.cpp | 30 +++++++++++++++-- parallel-rdp/interface.hpp | 7 ++++ src/device/controller.rs | 4 +-- src/ui.rs | 4 +++ src/ui/input.rs | 69 +++++++++++++++++++++++++++++++++++--- 6 files changed, 106 insertions(+), 9 deletions(-) diff --git a/build.rs b/build.rs index bf7ebb7..b8408b2 100644 --- a/build.rs +++ b/build.rs @@ -211,6 +211,7 @@ fn main() { .allowlist_function("rdp_save_state") .allowlist_function("rdp_load_state") .allowlist_function("rdp_set_fps") + .allowlist_function("get_joystick_event") .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) .generate() .expect("Unable to generate bindings"); diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index c3f85d0..f85880b 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -98,8 +98,8 @@ static GFX_INFO gfx_info; static const uint32_t *fragment_spirv; static size_t fragment_size; -std::vector rdram_dirty; -uint64_t sync_signal; +static std::vector rdram_dirty; +static uint64_t sync_signal; static TTF_Font *message_font; static std::queue messages; @@ -114,6 +114,8 @@ static bool display_challenge_indicator; static bool display_fps; static Vulkan::ImageHandle fps_image; +static std::queue joystick_events; + typedef struct { float SourceSize[4]; float OutputSize[4]; @@ -125,6 +127,12 @@ static const unsigned cmd_len_lut[64] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; +static void add_joystick_event(void *userdata) { + JoystickEvent *joystick_event = (JoystickEvent *)userdata; + joystick_events.push(*joystick_event); + delete joystick_event; +} + bool sdl_event_filter(void *userdata, SDL_Event *event) { if (event->type == SDL_EVENT_WINDOW_CLOSE_REQUESTED) { callback.paused = false; @@ -209,11 +217,29 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { default: break; } + } else if (event->type == SDL_EVENT_JOYSTICK_ADDED) { + JoystickEvent *joystick_event = new JoystickEvent; + joystick_event->joystick_id = event->jdevice.which; + joystick_event->connected = true; + SDL_RunOnMainThread(add_joystick_event, joystick_event, false); + } else if (event->type == SDL_EVENT_JOYSTICK_REMOVED) { + JoystickEvent *joystick_event = new JoystickEvent; + joystick_event->joystick_id = event->jdevice.which; + joystick_event->connected = false; + SDL_RunOnMainThread(add_joystick_event, joystick_event, false); } return 0; } +JoystickEvent get_joystick_event() { + if (joystick_events.empty()) + return JoystickEvent{0, false}; + JoystickEvent joystick_event = joystick_events.front(); + joystick_events.pop(); + return joystick_event; +} + void rdp_new_processor(GFX_INFO _gfx_info) { gfx_info = _gfx_info; diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 7ab6569..f29563c 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -37,6 +37,11 @@ typedef struct { uint32_t save_state_slot; } CALL_BACK; +typedef struct { + uint32_t joystick_id; + bool connected; +} JoystickEvent; + typedef enum { MESSAGE_VERY_SHORT = 500, MESSAGE_SHORT = 3000, @@ -59,6 +64,8 @@ void rdp_save_state(uint8_t *state); void rdp_load_state(const uint8_t *state); void rdp_set_fps(uint32_t fps, uint32_t vis); +JoystickEvent get_joystick_event(); + void achievement_challenge_indicator_add(const char *achievement_title); void achievement_challenge_indicator_remove(const char *achievement_title); void achievement_progress_add(const char *achievement_title, diff --git a/src/device/controller.rs b/src/device/controller.rs index 5d49922..9f7b82e 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -58,12 +58,12 @@ pub fn process(device: &mut device::Device, channel: usize) { let offset = device.pif.channels[channel].rx_buf.unwrap(); let input = if let Some(netplay) = &mut device.netplay { if netplay.player_number as usize == channel { - let local_input = ui::input::get(&device.ui, 0); + let local_input = ui::input::get(&mut device.ui, 0); netplay::send_input(netplay, local_input); } netplay::get_input(device, channel) } else { - ui::input::get(&device.ui, channel) + ui::input::get(&mut device.ui, channel) }; device.pif.ram[offset..offset + 4].copy_from_slice(&input.data.to_ne_bytes()); diff --git a/src/ui.rs b/src/ui.rs index 1ba7c64..02eb4ba 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -151,21 +151,25 @@ impl Ui { game_controller: std::ptr::null_mut(), joystick: std::ptr::null_mut(), rumble: false, + guid: sdl3_sys::guid::SDL_GUID::default(), }, input::Controllers { game_controller: std::ptr::null_mut(), joystick: std::ptr::null_mut(), rumble: false, + guid: sdl3_sys::guid::SDL_GUID::default(), }, input::Controllers { game_controller: std::ptr::null_mut(), joystick: std::ptr::null_mut(), rumble: false, + guid: sdl3_sys::guid::SDL_GUID::default(), }, input::Controllers { game_controller: std::ptr::null_mut(), joystick: std::ptr::null_mut(), rumble: false, + guid: sdl3_sys::guid::SDL_GUID::default(), }, ], keyboard_state: std::ptr::null_mut(), diff --git a/src/ui/input.rs b/src/ui/input.rs index af59d65..cd878f4 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -34,6 +34,7 @@ pub struct Controllers { pub rumble: bool, pub game_controller: *mut sdl3_sys::gamepad::SDL_Gamepad, pub joystick: *mut sdl3_sys::joystick::SDL_Joystick, + pub guid: sdl3_sys::guid::SDL_GUID, } pub struct InputData { @@ -400,9 +401,59 @@ pub fn get_controller_paths(game_ui: &ui::Ui) -> Vec> { controller_paths } -pub fn get(ui: &ui::Ui, channel: usize) -> InputData { - let profile_name = ui.config.input.input_profile_binding[channel].clone(); - let profile = ui.config.input.input_profiles.get(&profile_name).unwrap(); +fn handle_joystick_events(ui: &mut ui::Ui) { + let joystick_event = unsafe { ui::video::get_joystick_event() }; + if joystick_event.joystick_id != 0 { + let joystick_id = sdl3_sys::joystick::SDL_JoystickID(joystick_event.joystick_id); + for (i, controller) in ui.input.controllers.iter_mut().enumerate() { + if joystick_event.connected { + let profile = ui + .config + .input + .input_profiles + .get(&ui.config.input.input_profile_binding[i]) + .unwrap(); + if profile.dinput { + if controller.joystick.is_null() + && controller.guid + == unsafe { sdl3_sys::joystick::SDL_GetJoystickGUIDForID(joystick_id) } + { + controller.joystick = + unsafe { sdl3_sys::joystick::SDL_OpenJoystick(joystick_id) }; + } + } else { + if controller.game_controller.is_null() + && controller.guid + == unsafe { sdl3_sys::gamepad::SDL_GetGamepadGUIDForID(joystick_id) } + { + controller.game_controller = + unsafe { sdl3_sys::gamepad::SDL_OpenGamepad(joystick_id) }; + } + } + } else { + if !controller.joystick.is_null() + && controller.joystick + == unsafe { sdl3_sys::joystick::SDL_GetJoystickFromID(joystick_id) } + { + unsafe { sdl3_sys::joystick::SDL_CloseJoystick(controller.joystick) }; + controller.joystick = std::ptr::null_mut(); + } else if !controller.game_controller.is_null() + && controller.game_controller + == unsafe { sdl3_sys::gamepad::SDL_GetGamepadFromID(joystick_id) } + { + unsafe { sdl3_sys::gamepad::SDL_CloseGamepad(controller.game_controller) }; + controller.game_controller = std::ptr::null_mut(); + } + } + } + } +} + +pub fn get(ui: &mut ui::Ui, channel: usize) -> InputData { + handle_joystick_events(ui); + + let profile_name = &ui.config.input.input_profile_binding[channel]; + let profile = ui.config.input.input_profiles.get(profile_name).unwrap(); let mut keys = 0; let controller = ui.input.controllers[channel].game_controller; let joystick = ui.input.controllers[channel].joystick; @@ -990,8 +1041,12 @@ pub fn init(ui: &mut ui::Ui) { } if joystick_id != 0 { - let profile_name = ui.config.input.input_profile_binding[i].clone(); - let profile = ui.config.input.input_profiles.get(&profile_name).unwrap(); + let profile = ui + .config + .input + .input_profiles + .get(&ui.config.input.input_profile_binding[i]) + .unwrap(); if !profile.dinput { let gamepad = unsafe { sdl3_sys::gamepad::SDL_OpenGamepad(joystick_id) }; @@ -999,6 +1054,8 @@ pub fn init(ui: &mut ui::Ui) { println!("could not connect gamepad: {}", u32::from(joystick_id)) } else { ui.input.controllers[i].game_controller = gamepad; + ui.input.controllers[i].guid = + unsafe { sdl3_sys::gamepad::SDL_GetGamepadGUIDForID(joystick_id) }; let properties = unsafe { sdl3_sys::gamepad::SDL_GetGamepadProperties(gamepad) }; if properties == 0 { @@ -1018,6 +1075,8 @@ pub fn init(ui: &mut ui::Ui) { println!("could not connect joystick: {}", u32::from(joystick_id)) } else { ui.input.controllers[i].joystick = joystick; + ui.input.controllers[i].guid = + unsafe { sdl3_sys::joystick::SDL_GetJoystickGUIDForID(joystick_id) }; let properties = unsafe { sdl3_sys::joystick::SDL_GetJoystickProperties(joystick) }; if properties == 0 { From e860b96bd8a9d4887d6949bcc9665210988e8954 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 28 Apr 2026 00:37:59 -0600 Subject: [PATCH 0820/1117] Controller code cleanup (#816) * controller hotkeys * more * more * more * more * more --- src/device/controller.rs | 6 ++-- src/ui/input.rs | 75 ++++++++-------------------------------- 2 files changed, 17 insertions(+), 64 deletions(-) diff --git a/src/device/controller.rs b/src/device/controller.rs index 9f7b82e..10b4c18 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -191,7 +191,7 @@ pub fn pak_switch_event(device: &mut device::Device) { pak_type: new_pak_type, }); ui::video::onscreen_message( - "MemPak selected", + &format!("P{} MemPak selected", i + 1), ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, ); } else if new_pak_type == PakType::RumblePak { @@ -201,7 +201,7 @@ pub fn pak_switch_event(device: &mut device::Device) { pak_type: new_pak_type, }); ui::video::onscreen_message( - "RumblePak selected", + &format!("P{} RumblePak selected", i + 1), ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, ); } else if new_pak_type == PakType::TransferPak { @@ -211,7 +211,7 @@ pub fn pak_switch_event(device: &mut device::Device) { pak_type: new_pak_type, }); ui::video::onscreen_message( - "TransferPak selected", + &format!("P{} TransferPak selected", i + 1), ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, ); } diff --git a/src/ui/input.rs b/src/ui/input.rs index cd878f4..9dca6dc 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -119,50 +119,6 @@ fn set_axis_from_joystick( (x, y) } -fn get_axis_from_i32(axis: i32) -> sdl3_sys::gamepad::SDL_GamepadAxis { - match axis { - 0 => sdl3_sys::gamepad::SDL_GamepadAxis::LEFTX, - 1 => sdl3_sys::gamepad::SDL_GamepadAxis::LEFTY, - 2 => sdl3_sys::gamepad::SDL_GamepadAxis::RIGHTX, - 3 => sdl3_sys::gamepad::SDL_GamepadAxis::RIGHTY, - 4 => sdl3_sys::gamepad::SDL_GamepadAxis::LEFT_TRIGGER, - 5 => sdl3_sys::gamepad::SDL_GamepadAxis::RIGHT_TRIGGER, - _ => panic!("Invalid axis"), - } -} - -fn get_button_from_i32(button: i32) -> sdl3_sys::gamepad::SDL_GamepadButton { - match button { - 0 => sdl3_sys::gamepad::SDL_GamepadButton::SOUTH, - 1 => sdl3_sys::gamepad::SDL_GamepadButton::EAST, - 2 => sdl3_sys::gamepad::SDL_GamepadButton::WEST, - 3 => sdl3_sys::gamepad::SDL_GamepadButton::NORTH, - 4 => sdl3_sys::gamepad::SDL_GamepadButton::BACK, - 5 => sdl3_sys::gamepad::SDL_GamepadButton::GUIDE, - 6 => sdl3_sys::gamepad::SDL_GamepadButton::START, - 7 => sdl3_sys::gamepad::SDL_GamepadButton::LEFT_STICK, - 8 => sdl3_sys::gamepad::SDL_GamepadButton::RIGHT_STICK, - 9 => sdl3_sys::gamepad::SDL_GamepadButton::LEFT_SHOULDER, - 10 => sdl3_sys::gamepad::SDL_GamepadButton::RIGHT_SHOULDER, - 11 => sdl3_sys::gamepad::SDL_GamepadButton::DPAD_UP, - 12 => sdl3_sys::gamepad::SDL_GamepadButton::DPAD_DOWN, - 13 => sdl3_sys::gamepad::SDL_GamepadButton::DPAD_LEFT, - 14 => sdl3_sys::gamepad::SDL_GamepadButton::DPAD_RIGHT, - 15 => sdl3_sys::gamepad::SDL_GamepadButton::MISC1, - 16 => sdl3_sys::gamepad::SDL_GamepadButton::RIGHT_PADDLE1, - 17 => sdl3_sys::gamepad::SDL_GamepadButton::LEFT_PADDLE1, - 18 => sdl3_sys::gamepad::SDL_GamepadButton::RIGHT_PADDLE2, - 19 => sdl3_sys::gamepad::SDL_GamepadButton::LEFT_PADDLE2, - 20 => sdl3_sys::gamepad::SDL_GamepadButton::TOUCHPAD, - 21 => sdl3_sys::gamepad::SDL_GamepadButton::MISC2, - 22 => sdl3_sys::gamepad::SDL_GamepadButton::MISC3, - 23 => sdl3_sys::gamepad::SDL_GamepadButton::MISC4, - 24 => sdl3_sys::gamepad::SDL_GamepadButton::MISC5, - 25 => sdl3_sys::gamepad::SDL_GamepadButton::MISC6, - _ => panic!("Invalid button"), - } -} - fn set_axis_from_controller( profile: &ui::config::InputProfile, controller: *mut sdl3_sys::gamepad::SDL_Gamepad, @@ -173,7 +129,7 @@ fn set_axis_from_controller( let axis_position = unsafe { sdl3_sys::gamepad::SDL_GetGamepadAxis( controller, - get_axis_from_i32(profile.controller_axis[AXIS_LEFT].id), + sdl3_sys::gamepad::SDL_GamepadAxis(profile.controller_axis[AXIS_LEFT].id), ) }; if axis_position as isize * profile.controller_axis[AXIS_LEFT].axis as isize > 0 { @@ -184,7 +140,7 @@ fn set_axis_from_controller( let axis_position = unsafe { sdl3_sys::gamepad::SDL_GetGamepadAxis( controller, - get_axis_from_i32(profile.controller_axis[AXIS_RIGHT].id), + sdl3_sys::gamepad::SDL_GamepadAxis(profile.controller_axis[AXIS_RIGHT].id), ) }; if axis_position as isize * profile.controller_axis[AXIS_RIGHT].axis as isize > 0 { @@ -195,7 +151,7 @@ fn set_axis_from_controller( let axis_position = unsafe { sdl3_sys::gamepad::SDL_GetGamepadAxis( controller, - get_axis_from_i32(profile.controller_axis[AXIS_DOWN].id), + sdl3_sys::gamepad::SDL_GamepadAxis(profile.controller_axis[AXIS_DOWN].id), ) }; if axis_position as isize * profile.controller_axis[AXIS_DOWN].axis as isize > 0 { @@ -206,7 +162,7 @@ fn set_axis_from_controller( let axis_position = unsafe { sdl3_sys::gamepad::SDL_GetGamepadAxis( controller, - get_axis_from_i32(profile.controller_axis[AXIS_UP].id), + sdl3_sys::gamepad::SDL_GamepadAxis(profile.controller_axis[AXIS_UP].id), ) }; if axis_position as isize * profile.controller_axis[AXIS_UP].axis as isize > 0 { @@ -291,7 +247,7 @@ fn set_buttons_from_controller( *keys |= (unsafe { sdl3_sys::gamepad::SDL_GetGamepadButton( controller, - get_button_from_i32(profile_controller_button.id), + sdl3_sys::gamepad::SDL_GamepadButton(profile_controller_button.id), ) } as u32) << i; @@ -302,7 +258,7 @@ fn set_buttons_from_controller( let axis_position = unsafe { sdl3_sys::gamepad::SDL_GetGamepadAxis( controller, - get_axis_from_i32(profile_controller_axis.id), + sdl3_sys::gamepad::SDL_GamepadAxis(profile_controller_axis.id), ) }; if axis_position as isize * profile_controller_axis.axis as isize > 0 @@ -356,7 +312,7 @@ fn change_paks( pressed = unsafe { sdl3_sys::gamepad::SDL_GetGamepadButton( controller, - get_button_from_i32(controller_button.id), + sdl3_sys::gamepad::SDL_GamepadButton(controller_button.id), ) }; } else if joystick_button.enabled && !joystick.is_null() { @@ -695,8 +651,7 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, d ); std::thread::sleep(std::time::Duration::from_millis(100)); while unsafe { sdl3_sys::events::SDL_PollEvent(&mut event) } { - let event_type = unsafe { event.r#type }; - if event_type == u32::from(sdl3_sys::events::SDL_EVENT_WINDOW_CLOSE_REQUESTED) { + if event.event_type() == sdl3_sys::events::SDL_EVENT_WINDOW_CLOSE_REQUESTED { close_input_profile_window( open_joysticks, open_controllers, @@ -706,7 +661,7 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, d window, ); return; - } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_KEY_DOWN) { + } else if event.event_type() == sdl3_sys::events::SDL_EVENT_KEY_DOWN { if unsafe { !event.key.repeat && event.key.scancode != sdl3_sys::scancode::SDL_SCANCODE_LALT @@ -718,7 +673,7 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, d }; key_set = true } - } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_GAMEPAD_BUTTON_DOWN) { + } else if event.event_type() == sdl3_sys::events::SDL_EVENT_GAMEPAD_BUTTON_DOWN { if !open_controllers.is_empty() { new_controller_buttons[*value] = ui::config::InputKeyButton { enabled: true, @@ -726,7 +681,7 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, d }; key_set = true } - } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_GAMEPAD_AXIS_MOTION) { + } else if event.event_type() == sdl3_sys::events::SDL_EVENT_GAMEPAD_AXIS_MOTION { let axis_value = unsafe { event.gaxis.value }; let axis = unsafe { event.gaxis.axis }; if !open_controllers.is_empty() @@ -743,8 +698,7 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, d key_set = true } } - } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_JOYSTICK_BUTTON_DOWN) - { + } else if event.event_type() == sdl3_sys::events::SDL_EVENT_JOYSTICK_BUTTON_DOWN { if !open_joysticks.is_empty() { new_joystick_buttons[*value] = ui::config::InputKeyButton { enabled: true, @@ -752,7 +706,7 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, d }; key_set = true } - } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_JOYSTICK_HAT_MOTION) { + } else if event.event_type() == sdl3_sys::events::SDL_EVENT_JOYSTICK_HAT_MOTION { let state = unsafe { event.jhat.value }; let hat = unsafe { event.jhat.hat }; if !open_joysticks.is_empty() && state != sdl3_sys::joystick::SDL_HAT_CENTERED { @@ -763,8 +717,7 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, d }; key_set = true } - } else if event_type == u32::from(sdl3_sys::events::SDL_EVENT_JOYSTICK_AXIS_MOTION) - { + } else if event.event_type() == sdl3_sys::events::SDL_EVENT_JOYSTICK_AXIS_MOTION { let axis_value = unsafe { event.jaxis.value }; let axis = unsafe { event.jaxis.axis }; if !open_joysticks.is_empty() From b88f041bd8137c4f794498339b8f9b1905918c65 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 1 May 2026 17:42:07 +0200 Subject: [PATCH 0821/1117] don't check for update inside itch app (#817) --- src/ui/gui.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index c09d65e..ad14631 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -453,7 +453,9 @@ fn about_window(app: &AppWindow) { open::that_detached("https://github.com/gopher64/gopher64/releases/latest").unwrap(); }); app.set_version(format!("Version: {}", env!("GIT_DESCRIBE")).into()); - if std::env::var("FLATPAK_ID").is_err() { + + //flatpak and itch.io have their own update checking mechanism + if std::env::var("FLATPAK_ID").is_err() && std::env::var("ITCHIO_APP").is_err() { check_latest_version(app.as_weak()); } } From 8c7d3d4893411a67a7354a8fc641f0ca36c1927b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 1 May 2026 20:44:14 +0200 Subject: [PATCH 0822/1117] protect against null ptr dereference (#819) * protect against null ptr dereference * more --- src/ui.rs | 10 ++++++---- src/ui/input.rs | 44 ++++++++++++++++++++------------------------ src/ui/video.rs | 28 ++++++++++++++++++---------- 3 files changed, 44 insertions(+), 38 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index 02eb4ba..6cdbeca 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -99,13 +99,15 @@ impl Drop for Ui { pub fn sdl_init(flag: sdl3_sys::init::SDL_InitFlags) { unsafe { if sdl3_sys::init::SDL_WasInit(flag) == 0 && !sdl3_sys::init::SDL_InitSubSystem(flag) { - let err = std::ffi::CStr::from_ptr(sdl3_sys::error::SDL_GetError()) - .to_str() - .unwrap(); + let err = sdl3_sys::error::SDL_GetError(); panic!( "Could not initialize SDL subsystem: {}, {}", u32::from(flag), - err + if err.is_null() { + "Unknown error" + } else { + std::ffi::CStr::from_ptr(err).to_str().unwrap() + } ); } } diff --git a/src/ui/input.rs b/src/ui/input.rs index 9dca6dc..44f891d 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -332,10 +332,12 @@ pub fn get_controller_names(game_ui: &ui::Ui) -> Vec { let mut controllers: Vec = vec![]; for joystick in game_ui.input.joysticks.iter() { - let name = unsafe { - std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickNameForID(*joystick)) - }; - controllers.push(name.to_string_lossy().to_string()); + let name = unsafe { sdl3_sys::joystick::SDL_GetJoystickNameForID(*joystick) }; + controllers.push(if name.is_null() { + "Unknown controller".to_string() + } else { + unsafe { std::ffi::CStr::from_ptr(name).to_str().unwrap() }.to_string() + }); } controllers @@ -346,12 +348,12 @@ pub fn get_controller_paths(game_ui: &ui::Ui) -> Vec> { let mut controller_paths: Vec> = vec![]; for joystick in game_ui.input.joysticks.iter() { - let path = unsafe { - std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickPathForID(*joystick)) - .to_string_lossy() - .to_string() - }; - controller_paths.push(Some(path)); + let path = unsafe { sdl3_sys::joystick::SDL_GetJoystickPathForID(*joystick) }; + controller_paths.push(if path.is_null() { + None + } else { + Some(unsafe { std::ffi::CStr::from_ptr(path).to_str().unwrap() }.to_string()) + }); } controller_paths @@ -470,13 +472,12 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> InputData { pub fn assign_controller(ui: &mut ui::Ui, controller: i32, port: usize) { if controller < ui.input.joysticks.len() as i32 { let path = unsafe { - std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickPathForID( - ui.input.joysticks[controller as usize], - )) - .to_string_lossy() - .to_string() + sdl3_sys::joystick::SDL_GetJoystickPathForID(ui.input.joysticks[controller as usize]) }; - ui.config.input.controller_assignment[port - 1] = Some(path); + if !path.is_null() { + ui.config.input.controller_assignment[port - 1] = + Some(unsafe { std::ffi::CStr::from_ptr(path).to_str().unwrap().to_string() }); + } } else { println!("Invalid controller number") } @@ -977,14 +978,9 @@ pub fn init(ui: &mut ui::Ui) { let assigned_path = controller_assignment.as_ref().unwrap(); for joystick in ui.input.joysticks.iter() { - let path = unsafe { - std::ffi::CStr::from_ptr(sdl3_sys::joystick::SDL_GetJoystickPathForID( - *joystick, - )) - .to_string_lossy() - .to_string() - }; - if path == *assigned_path + let path = unsafe { sdl3_sys::joystick::SDL_GetJoystickPathForID(*joystick) }; + if !path.is_null() + && unsafe { std::ffi::CStr::from_ptr(path).to_str().unwrap() } == *assigned_path && unsafe { sdl3_sys::joystick::SDL_GetJoystickFromID(*joystick) }.is_null() && unsafe { sdl3_sys::gamepad::SDL_GetGamepadFromID(*joystick) }.is_null() { diff --git a/src/ui/video.rs b/src/ui/video.rs index 409264a..2bd5386 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -73,18 +73,26 @@ pub fn init(device: &mut device::Device) { sdl3_sys::video::SDL_CreateWindow(window_title.as_ptr(), window_width, window_height, flags) }; if device.ui.video.window.is_null() { - panic!("Could not create window: {}", unsafe { - std::ffi::CStr::from_ptr(sdl3_sys::error::SDL_GetError()) - .to_str() - .unwrap() - }); + let err = sdl3_sys::error::SDL_GetError(); + panic!( + "Could not create window: {}", + if err.is_null() { + "Unknown error" + } else { + unsafe { std::ffi::CStr::from_ptr(err).to_str().unwrap() } + } + ); } if !unsafe { sdl3_sys::video::SDL_ShowWindow(device.ui.video.window) } { - panic!("Could not show window: {}", unsafe { - std::ffi::CStr::from_ptr(sdl3_sys::error::SDL_GetError()) - .to_str() - .unwrap() - }); + let err = sdl3_sys::error::SDL_GetError(); + panic!( + "Could not show window: {}", + if err.is_null() { + "Unknown error" + } else { + unsafe { std::ffi::CStr::from_ptr(err).to_str().unwrap() } + } + ); } unsafe { sdl3_sys::everything::SDL_HideCursor(); From df8d7d9ff0c43b7bb13e962733b91715bbba4104 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 1 May 2026 21:32:08 +0200 Subject: [PATCH 0823/1117] allow single controller mpk files (#820) --- src/device.rs | 1 + src/device/cart.rs | 4 ---- src/device/cart/sc64.rs | 4 ---- src/device/cart/sram.rs | 16 ++-------------- src/device/controller/mempak.rs | 11 ++++++----- src/ui/storage.rs | 7 +++++++ 6 files changed, 16 insertions(+), 27 deletions(-) diff --git a/src/device.rs b/src/device.rs index 7b00360..fad89f5 100644 --- a/src/device.rs +++ b/src/device.rs @@ -82,6 +82,7 @@ pub fn run_game(device: &mut Device, rom_contents: &[u8], game_settings: ui::Gam ui::storage::init(&mut device.ui, &device.cart.rom); ui::storage::load_saves(&mut device.ui, &mut device.netplay); + ui::storage::format_saves(device); if !retroachievements::get_hardcore() { cheats::init(device, game_settings.cheats); diff --git a/src/device/cart.rs b/src/device/cart.rs index b6bb0f2..2933309 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -130,8 +130,6 @@ pub fn format_eeprom(device: &mut device::Device) { fn eeprom_read_block(device: &mut device::Device, block: usize, offset: usize) { let address = device.pif.ram[block] as usize * EEPROM_BLOCK_SIZE; - format_eeprom(device); - device.pif.ram[offset..offset + EEPROM_BLOCK_SIZE].copy_from_slice( &device.ui.storage.saves.eeprom.data[address..address + EEPROM_BLOCK_SIZE], ); @@ -140,8 +138,6 @@ fn eeprom_read_block(device: &mut device::Device, block: usize, offset: usize) { fn eeprom_write_block(device: &mut device::Device, block: usize, offset: usize, status: usize) { let address = device.pif.ram[block] as usize * EEPROM_BLOCK_SIZE; - format_eeprom(device); - device.ui.storage.saves.eeprom.data[address..address + EEPROM_BLOCK_SIZE] .copy_from_slice(&device.pif.ram[offset..offset + EEPROM_BLOCK_SIZE]); diff --git a/src/device/cart/sc64.rs b/src/device/cart/sc64.rs index e19f2c0..32b78ce 100644 --- a/src/device/cart/sc64.rs +++ b/src/device/cart/sc64.rs @@ -376,7 +376,6 @@ pub fn read_mem( _access_size: device::memory::AccessSize, ) -> u32 { if address & 0x2000 != 0 { - device::cart::format_eeprom(device); let masked_address = address as usize & SC64_EEPROM_MASK; u32::from_be_bytes( device.ui.storage.saves.eeprom.data[masked_address..masked_address + 4] @@ -395,7 +394,6 @@ pub fn read_mem( pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u32) { if address & 0x2000 != 0 { - device::cart::format_eeprom(device); let masked_address = address as usize & SC64_EEPROM_MASK; let mut data = u32::from_be_bytes( device.ui.storage.saves.eeprom.data[masked_address..masked_address + 4] @@ -427,7 +425,6 @@ pub fn dma_read( ) -> u64 { dram_addr &= device::rdram::RDRAM_MASK as u32; let buffer = if cart_addr & 0x2000 != 0 { - device::cart::format_eeprom(device); cart_addr &= SC64_EEPROM_MASK as u32; ui::storage::schedule_save(device, ui::storage::SaveTypes::Eeprom4k); &mut device.ui.storage.saves.eeprom.data @@ -459,7 +456,6 @@ pub fn dma_write( ) -> u64 { dram_addr &= device::rdram::RDRAM_MASK as u32; let buffer = if cart_addr & 0x2000 != 0 { - device::cart::format_eeprom(device); cart_addr &= SC64_EEPROM_MASK as u32; &device.ui.storage.saves.eeprom.data } else { diff --git a/src/device/cart/sram.rs b/src/device/cart/sram.rs index ef17f8c..4e82bec 100644 --- a/src/device/cart/sram.rs +++ b/src/device/cart/sram.rs @@ -28,13 +28,13 @@ pub struct Flashram { pub silicon_id: [u32; 2], } -fn format_sram(device: &mut device::Device) { +pub fn format_sram(device: &mut device::Device) { if device.ui.storage.saves.sram.data.len() < SRAM_SIZE { device.ui.storage.saves.sram.data.resize(SRAM_SIZE, 0xFF) } } -fn format_flash(device: &mut device::Device) { +pub fn format_flash(device: &mut device::Device) { if device.ui.storage.saves.flash.data.len() < FLASHRAM_SIZE { device .ui @@ -49,8 +49,6 @@ fn format_flash(device: &mut device::Device) { fn read_mem_sram(device: &mut device::Device, address: u64) -> u32 { let masked_address = address as usize & SRAM_MASK; - format_sram(device); - u32::from_be_bytes( device.ui.storage.saves.sram.data[masked_address..masked_address + 4] .try_into() @@ -96,8 +94,6 @@ pub fn read_mem( fn write_mem_sram(device: &mut device::Device, address: u64, value: u32, mask: u32) { let masked_address = address as usize & SRAM_MASK; - format_sram(device); - let mut data = u32::from_be_bytes( device.ui.storage.saves.sram.data[masked_address..masked_address + 4] .try_into() @@ -116,7 +112,6 @@ fn write_mem_flash(device: &mut device::Device, address: u64, value: u32, mask: device.cart.flashram.status = (value & mask) & 0xff; } else if (address & 0x1ffff) == 0x10000 { /* set command */ - format_flash(device); flashram_command(device, value & mask); } else { /* other accesses are not implemented */ @@ -148,8 +143,6 @@ fn dma_read_sram(device: &mut device::Device, mut cart_addr: u32, mut dram_addr: let mut i = dram_addr; let mut j = cart_addr; - format_sram(device); - while i < dram_addr + length { *device .ui @@ -171,8 +164,6 @@ fn dma_read_sram(device: &mut device::Device, mut cart_addr: u32, mut dram_addr: } fn dma_read_flash(device: &mut device::Device, cart_addr: u32, dram_addr: u32, length: u32) { - format_flash(device); - if (cart_addr & 0x1ffff) == 0x00000 && length == 128 && device.cart.flashram.mode == FlashramMode::PageProgram @@ -217,8 +208,6 @@ fn dma_write_sram( let mut i = dram_addr; let mut j = cart_addr; - format_sram(device); - while i < dram_addr + length { *device .rdram @@ -266,7 +255,6 @@ fn dma_write_flash( } else if (cart_addr & 0x1ffff) < 0x10000 && device.cart.flashram.mode == FlashramMode::ReadArray { - format_flash(device); /* adjust flashram address before starting DMA. */ if device.cart.flashram.silicon_id[1] == MX29L1100_ID || device.cart.flashram.silicon_id[1] == MX29L0000_ID diff --git a/src/device/controller/mempak.rs b/src/device/controller/mempak.rs index 55eab6d..75e920e 100644 --- a/src/device/controller/mempak.rs +++ b/src/device/controller/mempak.rs @@ -4,7 +4,7 @@ use crate::ui; pub const MEMPAK_SIZE: usize = 0x8000; const MPK_PAGE_SIZE: usize = 256; -fn format_mempak(device: &mut device::Device) { +pub fn format_mempak(device: &mut device::Device) { if device.ui.storage.saves.mempak.data.len() < MEMPAK_SIZE * 4 { device .ui @@ -43,6 +43,11 @@ fn format_mempak(device: &mut device::Device) { ]; for i in 0..4 { let offset = i * MEMPAK_SIZE; + if device.ui.storage.saves.mempak.data[offset..offset + MEMPAK_SIZE] != [0; MEMPAK_SIZE] + { + // don't overwrite existing data + continue; + } /* Fill Page 0 with pre-initialized content */ device.ui.storage.saves.mempak.data[offset..offset + MPK_PAGE_SIZE] @@ -77,8 +82,6 @@ fn format_mempak(device: &mut device::Device) { pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usize, size: usize) { if (address as usize) < MEMPAK_SIZE { - format_mempak(device); - let offset = (channel * MEMPAK_SIZE) + address as usize; device.pif.ram[data..data + size] .copy_from_slice(&device.ui.storage.saves.mempak.data[offset..offset + size]) @@ -91,8 +94,6 @@ pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usi pub fn write(device: &mut device::Device, channel: usize, address: u16, data: usize, size: usize) { if (address as usize) < MEMPAK_SIZE { - format_mempak(device); - let offset = (channel * MEMPAK_SIZE) + address as usize; device.ui.storage.saves.mempak.data[offset..offset + size] .copy_from_slice(&device.pif.ram[data..data + size]); diff --git a/src/ui/storage.rs b/src/ui/storage.rs index 470b077..ed65e8f 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -322,6 +322,13 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { } } +pub fn format_saves(device: &mut device::Device) { + device::cart::format_eeprom(device); + device::cart::sram::format_sram(device); + device::cart::sram::format_flash(device); + device::controller::mempak::format_mempak(device); +} + pub fn decompress_file(input: &[u8], name: &str) -> Vec { let mut decompressed_file = Vec::new(); { From b86c5daa2ce5ec39e9d84a45ccee73e5b6b7f667 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 2 May 2026 09:04:42 +0200 Subject: [PATCH 0824/1117] add controller hotkeys (#821) * add controller hotkeys * more * more * more * more * more * more --- parallel-rdp/interface.cpp | 39 +++++++++++++++-- src/ui.rs | 4 ++ src/ui/input.rs | 89 +++++++++++++++++++++++++++++++------- 3 files changed, 113 insertions(+), 19 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index f85880b..3924483 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -54,6 +54,12 @@ enum vi_registers { VI_REGS_COUNT }; +enum user_event_codes { + USER_EVENT_SAVE_STATE = 1, + USER_EVENT_LOAD_STATE = 2, + USER_EVENT_EXIT_GAME = 3, +}; + typedef struct { uint32_t depthbuffer_address; uint32_t framebuffer_address; @@ -140,6 +146,7 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { } else if (event->type == SDL_EVENT_WINDOW_RESIZED && callback.emu_running) { wsi_platform->do_resize(); } else if (event->type == SDL_EVENT_KEY_DOWN && !event->key.repeat) { + SDL_Event user_event; switch (event->key.scancode) { case SDL_SCANCODE_RETURN: if (event->key.mod & SDL_KMOD_ALT) { @@ -158,8 +165,12 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { } break; case SDL_SCANCODE_ESCAPE: - if (gfx_info.fullscreen) - callback.emu_running = false; + if (gfx_info.fullscreen) { + SDL_zero(user_event); + user_event.type = SDL_EVENT_USER; + user_event.user.code = USER_EVENT_EXIT_GAME; + SDL_PushEvent(&user_event); + } break; case SDL_SCANCODE_F1: display_fps = !display_fps; @@ -168,10 +179,16 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { crop_letterbox = !crop_letterbox; break; case SDL_SCANCODE_F5: - callback.save_state = true; + SDL_zero(user_event); + user_event.type = SDL_EVENT_USER; + user_event.user.code = USER_EVENT_SAVE_STATE; + SDL_PushEvent(&user_event); break; case SDL_SCANCODE_F7: - callback.load_state = true; + SDL_zero(user_event); + user_event.type = SDL_EVENT_USER; + user_event.user.code = USER_EVENT_LOAD_STATE; + SDL_PushEvent(&user_event); break; case SDL_SCANCODE_F8: if (messages.empty()) @@ -217,6 +234,20 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { default: break; } + } else if (event->type == SDL_EVENT_USER) { + switch (event->user.code) { + case USER_EVENT_SAVE_STATE: + callback.save_state = true; + break; + case USER_EVENT_LOAD_STATE: + callback.load_state = true; + break; + case USER_EVENT_EXIT_GAME: + callback.emu_running = false; + break; + default: + break; + } } else if (event->type == SDL_EVENT_JOYSTICK_ADDED) { JoystickEvent *joystick_event = new JoystickEvent; joystick_event->joystick_id = event->jdevice.which; diff --git a/src/ui.rs b/src/ui.rs index 6cdbeca..cf6a34c 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -154,24 +154,28 @@ impl Ui { joystick: std::ptr::null_mut(), rumble: false, guid: sdl3_sys::guid::SDL_GUID::default(), + last_key_state: 0, }, input::Controllers { game_controller: std::ptr::null_mut(), joystick: std::ptr::null_mut(), rumble: false, guid: sdl3_sys::guid::SDL_GUID::default(), + last_key_state: 0, }, input::Controllers { game_controller: std::ptr::null_mut(), joystick: std::ptr::null_mut(), rumble: false, guid: sdl3_sys::guid::SDL_GUID::default(), + last_key_state: 0, }, input::Controllers { game_controller: std::ptr::null_mut(), joystick: std::ptr::null_mut(), rumble: false, guid: sdl3_sys::guid::SDL_GUID::default(), + last_key_state: 0, }, ], keyboard_state: std::ptr::null_mut(), diff --git a/src/ui/input.rs b/src/ui/input.rs index 44f891d..59514ef 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -20,7 +20,7 @@ const AXIS_LEFT: usize = 14; const AXIS_RIGHT: usize = 15; const AXIS_UP: usize = 16; const AXIS_DOWN: usize = 17; -const CHANGE_PAK: usize = 18; +const HOTKEY: usize = 18; pub const PROFILE_SIZE: usize = 19; const X_AXIS_SHIFT: usize = 16; @@ -35,6 +35,7 @@ pub struct Controllers { pub game_controller: *mut sdl3_sys::gamepad::SDL_Gamepad, pub joystick: *mut sdl3_sys::joystick::SDL_Joystick, pub guid: sdl3_sys::guid::SDL_GUID, + pub last_key_state: u32, } pub struct InputData { @@ -296,16 +297,16 @@ pub fn set_rumble(ui: &ui::Ui, channel: usize, rumble: u8) { } } -fn change_paks( +fn hotkey_pressed( profile: &ui::config::InputProfile, joystick: *mut sdl3_sys::joystick::SDL_Joystick, controller: *mut sdl3_sys::gamepad::SDL_Gamepad, - keyboard_state: *const bool, ) -> bool { - let controller_button = profile.controller_buttons[CHANGE_PAK]; - let joystick_button = profile.joystick_buttons[CHANGE_PAK]; - let joystick_hat = profile.joystick_hat[CHANGE_PAK]; - let key = profile.keys[CHANGE_PAK]; + let controller_button = profile.controller_buttons[HOTKEY]; + let controller_axis = profile.controller_axis[HOTKEY]; + let joystick_button = profile.joystick_buttons[HOTKEY]; + let joystick_hat = profile.joystick_hat[HOTKEY]; + let joystick_axis = profile.joystick_axis[HOTKEY]; let mut pressed = false; if controller_button.enabled && !controller.is_null() { @@ -315,6 +316,15 @@ fn change_paks( sdl3_sys::gamepad::SDL_GamepadButton(controller_button.id), ) }; + } else if controller_axis.enabled { + let axis_position = unsafe { + sdl3_sys::gamepad::SDL_GetGamepadAxis( + controller, + sdl3_sys::gamepad::SDL_GamepadAxis(controller_axis.id), + ) + }; + pressed = axis_position as isize * controller_axis.axis as isize > 0 + && axis_position.saturating_abs() > i16::MAX / 2 } else if joystick_button.enabled && !joystick.is_null() { pressed = unsafe { sdl3_sys::joystick::SDL_GetJoystickButton(joystick, joystick_button.id) }; @@ -322,8 +332,11 @@ fn change_paks( pressed = (unsafe { sdl3_sys::joystick::SDL_GetJoystickHat(joystick, joystick_hat.id) } & joystick_hat.direction) != 0; - } else if key.enabled { - pressed = unsafe { *keyboard_state.offset(key.id as isize) }; + } else if joystick_axis.enabled { + let axis_position = + unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, joystick_axis.id) }; + pressed = axis_position as isize * joystick_axis.axis as isize > 0 + && axis_position.saturating_abs() > i16::MAX / 2 } pressed } @@ -407,6 +420,39 @@ fn handle_joystick_events(ui: &mut ui::Ui) { } } +fn handle_hotkeys(keys: u32, last_key_state: u32) { + if keys & (1 << L_TRIG) != 0 && last_key_state & (1 << L_TRIG) == 0 { + let mut event = sdl3_sys::events::SDL_Event { + user: sdl3_sys::events::SDL_UserEvent { + r#type: u32::from(sdl3_sys::events::SDL_EVENT_USER), + code: 1, //save state + ..Default::default() + }, + }; + unsafe { sdl3_sys::events::SDL_PushEvent(&mut event) }; + } + if keys & (1 << R_TRIG) != 0 && last_key_state & (1 << R_TRIG) == 0 { + let mut event = sdl3_sys::events::SDL_Event { + user: sdl3_sys::events::SDL_UserEvent { + r#type: u32::from(sdl3_sys::events::SDL_EVENT_USER), + code: 2, //load state + ..Default::default() + }, + }; + unsafe { sdl3_sys::events::SDL_PushEvent(&mut event) }; + } + if keys & (1 << START_BUTTON) != 0 && last_key_state & (1 << START_BUTTON) == 0 { + let mut event = sdl3_sys::events::SDL_Event { + user: sdl3_sys::events::SDL_UserEvent { + r#type: u32::from(sdl3_sys::events::SDL_EVENT_USER), + code: 3, //exit game + ..Default::default() + }, + }; + unsafe { sdl3_sys::events::SDL_PushEvent(&mut event) }; + } +} + pub fn get(ui: &mut ui::Ui, channel: usize) -> InputData { handle_joystick_events(ui); @@ -463,9 +509,22 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> InputData { keys |= (x.round() as i8 as u8 as u32) << X_AXIS_SHIFT; keys |= (y.round() as i8 as u8 as u32) << Y_AXIS_SHIFT; - InputData { - data: keys, - pak_change_pressed: change_paks(profile, joystick, controller, ui.input.keyboard_state), + let last_key_state = ui.input.controllers[channel].last_key_state; + ui.input.controllers[channel].last_key_state = keys; + + if hotkey_pressed(profile, joystick, controller) { + handle_hotkeys(keys, last_key_state); + InputData { + data: 0, + pak_change_pressed: keys & (1 << B_BUTTON) != 0, + } + } else { + let key = profile.keys[HOTKEY]; + InputData { + data: keys, + pak_change_pressed: key.enabled + && unsafe { *ui.input.keyboard_state.offset(key.id as isize) }, + } } } @@ -588,7 +647,7 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, d ("Control Stick Down", AXIS_DOWN), ("Control Stick Left", AXIS_LEFT), ("Control Stick Right", AXIS_RIGHT), - ("Change Pak", CHANGE_PAK), + ("Hotkey Activator", HOTKEY), ]; let mut new_keys = [ui::config::InputKeyButton { @@ -850,7 +909,7 @@ pub fn get_default_profile() -> ui::config::InputProfile { enabled: true, id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_DOWN), }; - default_keys[CHANGE_PAK] = ui::config::InputKeyButton { + default_keys[HOTKEY] = ui::config::InputKeyButton { enabled: true, id: i32::from(sdl3_sys::scancode::SDL_SCANCODE_COMMA), }; @@ -936,7 +995,7 @@ pub fn get_default_profile() -> ui::config::InputProfile { id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTY), axis: 1, }; - default_controller_buttons[CHANGE_PAK] = ui::config::InputKeyButton { + default_controller_buttons[HOTKEY] = ui::config::InputKeyButton { enabled: true, id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_BUTTON_BACK), }; From abacaddf8a19a73d3c19d7e1644f069af3b65514 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 2 May 2026 17:06:56 +0200 Subject: [PATCH 0825/1117] avoid crash on missing GB files (#822) * avoid crash on missing GB files * more * more --- src/main.rs | 14 +++++++------- src/ui/gui.rs | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main.rs b/src/main.rs index c6d1dd0..294a1a8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -179,11 +179,11 @@ async fn main() -> std::io::Result<()> { if device.ui.config.input.transfer_pak[i] && !device.ui.config.input.gb_rom_path[i].is_empty() && !device.ui.config.input.gb_ram_path[i].is_empty() + && let Ok(rom) = std::fs::read(&device.ui.config.input.gb_rom_path[i]) + && let Ok(ram) = std::fs::read(&device.ui.config.input.gb_ram_path[i]) { - device.transferpaks[i].cart.rom = - std::fs::read(&device.ui.config.input.gb_rom_path[i]).unwrap(); - device.transferpaks[i].cart.ram = - std::fs::read(&device.ui.config.input.gb_ram_path[i]).unwrap(); + device.transferpaks[i].cart.rom = rom; + device.transferpaks[i].cart.ram = ram; } } @@ -234,13 +234,13 @@ async fn main() -> std::io::Result<()> { for i in 0..4 { if device.ui.config.input.transfer_pak[i] && !device.ui.config.input.gb_ram_path[i].is_empty() + && !device.transferpaks[i].cart.ram.is_empty() { - tokio::fs::write( + let _ = tokio::fs::write( &device.ui.config.input.gb_ram_path[i], &device.transferpaks[i].cart.ram, ) - .await - .unwrap(); + .await; } } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index ad14631..e23b8ee 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -210,7 +210,7 @@ fn update_input_profiles(weak: &slint::Weak, config: &ui::config::Con let position = profiles .iter() .position(|profile| *profile == currently_selected); - profile_bindings.push(position.unwrap() as i32); + profile_bindings.push(position.unwrap_or(0) as i32); } handle.set_input_profiles(slint::ModelRc::from(std::rc::Rc::new( From b865538d6e3bbe658e1bab103171c087c65649ea Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 2 May 2026 17:59:51 +0200 Subject: [PATCH 0826/1117] avoid panic with invalid cheat (#823) * avoid panic with invalid cheat * more * more --- src/cheats.rs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/cheats.rs b/src/cheats.rs index fd704b4..6010532 100644 --- a/src/cheats.rs +++ b/src/cheats.rs @@ -48,7 +48,8 @@ pub fn init( { option_value = Some(found_option_value.to_string()); } else { - panic!("Cheat option: {option} not found"); + println!("Cheat option: {option} not found"); + continue; } } @@ -65,13 +66,19 @@ pub fn init( } let mut split = result.split_whitespace(); let first_part = u32::from_str_radix(split.next().unwrap(), 16).unwrap(); - decoded_cheat.push(DecodedCheat { - code_type: (first_part >> 24) as u8, - address: first_part & 0x00FFFFFF, - data: u16::from_str_radix(split.next().unwrap(), 16).unwrap(), - }); + if let Ok(data) = u16::from_str_radix(split.next().unwrap(), 16) { + decoded_cheat.push(DecodedCheat { + code_type: (first_part >> 24) as u8, + address: first_part & 0x00FFFFFF, + data, + }) + } else { + println!("Could not parse data for: {}", cheat_setting.0); + }; + } + if !decoded_cheat.is_empty() { + device.cheats.cheats.push(decoded_cheat); } - device.cheats.cheats.push(decoded_cheat); } else { println!("Could not find cheat: {}", cheat_setting.0); } From 9cc6d484931600d7053b6304b42278394b760525 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 2 May 2026 22:13:59 +0200 Subject: [PATCH 0827/1117] ensure file dialog order for transferpak (#824) * ensure file dialog order for transferpak * more --- src/ui/gui.rs | 75 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 47 insertions(+), 28 deletions(-) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index e23b8ee..421ef62 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -238,6 +238,18 @@ fn update_input_profiles(weak: &slint::Weak, config: &ui::config::Con .unwrap(); } +fn clear_gb_paths(weak: &slint::Weak, player: i32) { + weak.upgrade_in_event_loop(move |handle| { + let rom_paths = handle.get_gb_rom_paths(); + let ram_paths = handle.get_gb_ram_paths(); + rom_paths.set_row_data(player as usize, String::new().into()); + ram_paths.set_row_data(player as usize, String::new().into()); + handle.set_gb_rom_paths(rom_paths); + handle.set_gb_ram_paths(ram_paths); + }) + .unwrap(); +} + fn controller_window( app: &AppWindow, config: &ui::config::Config, @@ -355,40 +367,47 @@ fn controller_window( .set_title(format!("GB ROM P{}", player + 1)) .add_filter("GB ROM files", &["gb", "gbc", "GB", "GBC"]) .pick_file(); - let select_gb_ram = rfd::AsyncFileDialog::new() - .set_title(format!("GB RAM P{}", player + 1)) - .add_filter("GB RAM files", &["sav", "ram", "srm", "SAV", "RAM", "SRM"]) - .pick_file(); + let weak_app3 = weak_app2.clone(); tokio::spawn(async move { - if let (Some(gb_rom), Some(gb_ram)) = (select_gb_rom.await, select_gb_ram.await) { + if let Some(gb_rom) = select_gb_rom.await { + let weak_app4 = weak_app3.clone(); weak_app3 - .upgrade_in_event_loop(move |handle| { - let rom_paths = handle.get_gb_rom_paths(); - let ram_paths = handle.get_gb_ram_paths(); - rom_paths.set_row_data( - player as usize, - gb_rom.path().to_str().unwrap().into(), - ); - ram_paths.set_row_data( - player as usize, - gb_ram.path().to_str().unwrap().into(), - ); - handle.set_gb_rom_paths(rom_paths); - handle.set_gb_ram_paths(ram_paths); + .upgrade_in_event_loop(move |_handle| { + let select_gb_ram = rfd::AsyncFileDialog::new() + .set_title(format!("GB RAM P{}", player + 1)) + .add_filter( + "GB RAM files", + &["sav", "ram", "srm", "SAV", "RAM", "SRM"], + ) + .pick_file(); + + tokio::spawn(async move { + if let Some(gb_ram) = select_gb_ram.await { + weak_app4 + .upgrade_in_event_loop(move |handle| { + let rom_paths = handle.get_gb_rom_paths(); + let ram_paths = handle.get_gb_ram_paths(); + rom_paths.set_row_data( + player as usize, + gb_rom.path().to_str().unwrap().into(), + ); + ram_paths.set_row_data( + player as usize, + gb_ram.path().to_str().unwrap().into(), + ); + handle.set_gb_rom_paths(rom_paths); + handle.set_gb_ram_paths(ram_paths); + }) + .unwrap(); + } else { + clear_gb_paths(&weak_app4, player); + } + }); }) .unwrap(); } else { - weak_app3 - .upgrade_in_event_loop(move |handle| { - let rom_paths = handle.get_gb_rom_paths(); - let ram_paths = handle.get_gb_ram_paths(); - rom_paths.set_row_data(player as usize, String::new().into()); - ram_paths.set_row_data(player as usize, String::new().into()); - handle.set_gb_rom_paths(rom_paths); - handle.set_gb_ram_paths(ram_paths); - }) - .unwrap(); + clear_gb_paths(&weak_app3, player); } }); } From b754891d45a9d0de4ae8ca3f37b01f7b8a35b7db Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 3 May 2026 07:18:28 +0200 Subject: [PATCH 0828/1117] ensure audio is playing (#826) * ensure audio is playing * more --- src/device.rs | 2 +- src/device/ai.rs | 6 +++--- src/savestates.rs | 2 +- src/ui/audio.rs | 22 +++++++++++++--------- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/device.rs b/src/device.rs index fad89f5..ba314aa 100644 --- a/src/device.rs +++ b/src/device.rs @@ -62,7 +62,7 @@ pub fn run_game(device: &mut Device, rom_contents: &[u8], game_settings: ui::Gam rdram::init(device); ui::video::init(device); - ui::audio::init(&mut device.ui, device.ai.freq); + ui::audio::init(device); ui::input::init(&mut device.ui); // must be after video init diff --git a/src/device/ai.rs b/src/device/ai.rs index 84c4a6c..9027f76 100644 --- a/src/device/ai.rs +++ b/src/device/ai.rs @@ -3,12 +3,12 @@ use crate::{device, ui}; const AI_DRAM_ADDR_REG: u32 = 0; const AI_LEN_REG: u32 = 1; // const AI_CONTROL_REG: u32 = 2; -const AI_STATUS_REG: u32 = 3; +pub const AI_STATUS_REG: u32 = 3; const AI_DACRATE_REG: u32 = 4; // const AI_BITRATE_REG: u32 = 5; pub const AI_REGS_COUNT: u32 = 6; -const AI_STATUS_BUSY: u32 = 0x40000000; +pub const AI_STATUS_BUSY: u32 = 0x40000000; const AI_STATUS_FULL: u32 = 0x80000000; #[derive(serde::Serialize, serde::Deserialize)] @@ -148,7 +148,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u if device.ai.regs[reg as usize] != value & mask { device.ai.freq = device.vi.clock / (1 + (value & mask)) as u64; ui::audio::close_game_audio(&mut device.ui); - ui::audio::init_game_audio(&mut device.ui, device.ai.freq) + ui::audio::init_game_audio(device) } device::memory::masked_write_32(&mut device.ai.regs[reg as usize], value, mask) } diff --git a/src/savestates.rs b/src/savestates.rs index 74cc27a..3dc7692 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -201,7 +201,7 @@ pub fn load_savestate(device: &mut device::Device) { } ui::audio::close_game_audio(&mut device.ui); - ui::audio::init_game_audio(&mut device.ui, device.ai.freq); + ui::audio::init_game_audio(device); ui::video::load_state(device, rdp_state.as_ptr()); if !ra_state.is_empty() { diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 3a2bcca..08a4800 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -3,9 +3,9 @@ use crate::ui; static ADJUST_LOCKED: std::sync::atomic::AtomicBool = std::sync::atomic::AtomicBool::new(false); -pub fn init(ui: &mut ui::Ui, frequency: u64) { +pub fn init(device: &mut device::Device) { ui::sdl_init(sdl3_sys::init::SDL_INIT_AUDIO); - init_game_audio(ui, frequency); + init_game_audio(device); } unsafe extern "C" fn audio_callback( @@ -27,14 +27,14 @@ unsafe extern "C" fn audio_callback( } } -pub fn init_game_audio(ui: &mut ui::Ui, frequency: u64) { +pub fn init_game_audio(device: &mut device::Device) { let game_audio_spec = sdl3_sys::audio::SDL_AudioSpec { format: sdl3_sys::audio::SDL_AUDIO_S16LE, - freq: frequency as i32, + freq: device.ai.freq as i32, channels: 2, }; - ui.audio.audio_stream = unsafe { + device.ui.audio.audio_stream = unsafe { sdl3_sys::audio::SDL_OpenAudioDeviceStream( sdl3_sys::audio::SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, &game_audio_spec, @@ -42,20 +42,24 @@ pub fn init_game_audio(ui: &mut ui::Ui, frequency: u64) { std::ptr::null_mut(), ) }; - if ui.audio.audio_stream.is_null() { + if device.ui.audio.audio_stream.is_null() { panic!("Could not create audio stream"); } if !unsafe { - sdl3_sys::audio::SDL_SetAudioStreamGain(ui.audio.audio_stream, ui.audio.gain) - && sdl3_sys::audio::SDL_PauseAudioStreamDevice(ui.audio.audio_stream) + sdl3_sys::audio::SDL_SetAudioStreamGain(device.ui.audio.audio_stream, device.ui.audio.gain) && sdl3_sys::audio::SDL_SetAudioStreamGetCallback( - ui.audio.audio_stream, + device.ui.audio.audio_stream, Some(audio_callback), std::ptr::null_mut(), ) } { panic!("Could not initialize audio stream"); } + if device.ai.regs[device::ai::AI_STATUS_REG as usize] & device::ai::AI_STATUS_BUSY != 0 { + resume_game_audio(&mut device.ui); + } else { + pause_game_audio(&mut device.ui); + } } pub fn close(ui: &mut ui::Ui) { From 9ed8d835c080389f9428119327c3a678064c092e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 3 May 2026 07:49:07 +0200 Subject: [PATCH 0829/1117] add merge_group to workflow (#828) --- .github/workflows/build.yml | 1 + .github/workflows/lint.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e605132..8abbbb1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,6 +9,7 @@ on: - "v*" pull_request: branches: [ "main" ] + merge_group: env: CARGO_TERM_COLOR: always diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 49ad495..7f5fe13 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -5,6 +5,7 @@ on: branches: [ "main" ] pull_request: branches: [ "main" ] + merge_group: permissions: contents: read From 801cc1bc74e678e94bf1d6dfe50d28c916e8d5b5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 3 May 2026 07:49:27 +0200 Subject: [PATCH 0830/1117] cargo update (#827) --- Cargo.lock | 322 ++++++++++++++++++++--------------------------------- Cargo.toml | 2 +- 2 files changed, 122 insertions(+), 202 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f896dd9..4785044 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -115,13 +115,13 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aes" -version = "0.8.4" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +checksum = "66bd29a732b644c0431c6140f370d097879203d79b80c94a6747ba0872adaef8" dependencies = [ - "cfg-if", "cipher", - "cpufeatures 0.2.17", + "cpubits", + "cpufeatures 0.3.0", ] [[package]] @@ -179,7 +179,7 @@ dependencies = [ "android-properties", "bitflags 2.11.1", "cc", - "jni 0.22.4", + "jni", "libc", "log", "ndk", @@ -663,15 +663,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" dependencies = [ "hybrid-array", + "zeroize", ] [[package]] name = "block-padding" -version = "0.3.3" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +checksum = "710f1dd022ef4e93f8a438b4ba958de7f64308434fa6a87104481645cc30068b" dependencies = [ - "generic-array", + "hybrid-array", ] [[package]] @@ -833,9 +834,9 @@ dependencies = [ [[package]] name = "cbc" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +checksum = "98db6aeaef0eeef2c1e3ce9a27b739218825dae116076352ac3777076aa22225" dependencies = [ "cipher", ] @@ -852,12 +853,6 @@ dependencies = [ "shlex", ] -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - [[package]] name = "cexpr" version = "0.6.0" @@ -914,11 +909,11 @@ dependencies = [ [[package]] name = "cipher" -version = "0.4.4" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +checksum = "e34d8227fe1ba289043aeb13792056ff80fd6de1a9f49137a5f499de8e8c78ea" dependencies = [ - "crypto-common 0.1.7", + "crypto-common 0.2.1", "inout", ] @@ -1000,6 +995,12 @@ dependencies = [ "cc", ] +[[package]] +name = "cmov" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f88a43d011fc4a6876cb7344703e297c71dda42494fee094d5f7c76bf13f746" + [[package]] name = "cobs" version = "0.3.0" @@ -1161,6 +1162,12 @@ version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636" +[[package]] +name = "cpubits" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae" + [[package]] name = "cpufeatures" version = "0.2.17" @@ -1262,6 +1269,15 @@ dependencies = [ "dtor", ] +[[package]] +name = "ctutils" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" +dependencies = [ + "cmov", +] + [[package]] name = "cursor-icon" version = "1.2.0" @@ -1337,7 +1353,6 @@ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", "crypto-common 0.1.7", - "subtle", ] [[package]] @@ -1349,6 +1364,8 @@ dependencies = [ "block-buffer 0.12.0", "const-oid", "crypto-common 0.2.1", + "ctutils", + "zeroize", ] [[package]] @@ -1635,23 +1652,9 @@ dependencies = [ [[package]] name = "fax" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab" -dependencies = [ - "fax_derive", -] - -[[package]] -name = "fax_derive" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] +checksum = "caf1079563223d5d59d83c85886a56e586cfd5c1a26292e971a0fa266531ac5a" [[package]] name = "fdeflate" @@ -2276,11 +2279,11 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hmac" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" dependencies = [ - "digest 0.10.7", + "digest 0.11.2", ] [[package]] @@ -2807,9 +2810,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" dependencies = [ "icu_normalizer", "icu_properties", @@ -2857,9 +2860,9 @@ checksum = "09e54e57b4c48b40f7aec75635392b12b3421fa26fe8b4332e63138ed278459c" [[package]] name = "imgref" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" +checksum = "40fac9d56ed6437b198fddba683305e8e2d651aa42647f00f5ae542e7f5c94a2" [[package]] name = "indexmap" @@ -2875,12 +2878,12 @@ dependencies = [ [[package]] name = "inout" -version = "0.1.4" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" dependencies = [ "block-padding", - "generic-array", + "hybrid-array", ] [[package]] @@ -2998,22 +3001,6 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" -[[package]] -name = "jni" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" -dependencies = [ - "cesu8", - "cfg-if", - "combine", - "jni-sys 0.3.1", - "log", - "thiserror 1.0.69", - "walkdir", - "windows-sys 0.45.0", -] - [[package]] name = "jni" version = "0.22.4" @@ -3084,9 +3071,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.95" +version = "0.3.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca" +checksum = "a1840c94c045fbcf8ba2812c95db44499f7c64910a912551aaaa541decebcacf" dependencies = [ "cfg-if", "futures-util", @@ -4022,9 +4009,9 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "orbclient" -version = "0.3.53" +version = "0.3.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12c6933ddbbd16539a7672e697bb8d41ac3a4e99ac43eeb40c07236bd7fcb2dd" +checksum = "a570f6bca41d29acb2139229a7c873ec99bc9a313bd10804081d89bfac8ff329" dependencies = [ "libc", "libredox", @@ -4108,11 +4095,11 @@ checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" [[package]] name = "pbkdf2" -version = "0.12.2" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +checksum = "112d82ceb8c5bf524d9af484d4e4970c9fd5a0cc15ba14ad93dccd28873b0629" dependencies = [ - "digest 0.10.7", + "digest 0.11.2", "hmac", ] @@ -4376,16 +4363,6 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" -[[package]] -name = "quick-xml" -version = "0.38.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "quick-xml" version = "0.39.2" @@ -4393,6 +4370,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "958f21e8e7ceb5a1aa7fa87fab28e7c75976e0bfe7e23ff069e0a260f894067d" dependencies = [ "memchr", + "serde", ] [[package]] @@ -4686,9 +4664,9 @@ checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "reqwest" -version = "0.13.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" +checksum = "62e0021ea2c22aed41653bc7e1419abb2c97e038ff2c33d0e1309e49a97deec0" dependencies = [ "base64", "bytes", @@ -4881,9 +4859,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.39" +version = "0.23.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c2c118cb077cca2822033836dfb1b975355dfb784b5e8da48f7b6c5db74e60e" +checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" dependencies = [ "aws-lc-rs", "once_cell", @@ -4917,13 +4895,13 @@ dependencies = [ [[package]] name = "rustls-platform-verifier" -version = "0.6.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" +checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0" dependencies = [ "core-foundation 0.10.1", "core-foundation-sys", - "jni 0.21.1", + "jni", "log", "once_cell", "rustls", @@ -5035,15 +5013,15 @@ dependencies = [ [[package]] name = "sdl3-src" -version = "3.4.4" +version = "3.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98f1cdcc5eb877ad663216c3133bfa5af469628c9573b3d2364e584efe19ab0" +checksum = "997bff4c8d3d9d1e846d7ad8caa33e6fe18a07ec9dc474e1efbbb20923d87bd9" [[package]] name = "sdl3-sys" -version = "0.6.3+SDL-3.4.4" +version = "0.6.5+SDL-3.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7adc59563535710602c8e7035297fd73d2506c0c61677f40aeb8917c0e86a01" +checksum = "51ca7a36c908d1d2b6c259d426a5000fbb70e764dcc430f6a373cc151f614f68" dependencies = [ "cc", "cmake", @@ -5184,9 +5162,9 @@ dependencies = [ [[package]] name = "sevenz-rust2" -version = "0.20.2" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29225600349ef74beda5a9fffb36ac660a24613c0bde9315d0c49be1d51e9c24" +checksum = "dbbd24232798280d6bc896e3429a3469174de008ec8b1b591a96618b46664195" dependencies = [ "aes", "bzip2", @@ -5196,7 +5174,7 @@ dependencies = [ "js-sys", "lzma-rust2", "ppmd-rust", - "sha2 0.10.9", + "sha2 0.11.0", "wasm-bindgen", ] @@ -5211,6 +5189,17 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "sha1" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "digest 0.11.2", +] + [[package]] name = "sha2" version = "0.10.9" @@ -6159,7 +6148,7 @@ dependencies = [ "httparse", "log", "rand 0.9.4", - "sha1", + "sha1 0.10.6", "thiserror 2.0.18", ] @@ -6440,9 +6429,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.118" +version = "0.2.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89" +checksum = "df52b6d9b87e0c74c9edfa1eb2d9bf85e5d63515474513aa50fa181b3c4f5db1" dependencies = [ "cfg-if", "once_cell", @@ -6453,9 +6442,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.68" +version = "0.4.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f371d383f2fb139252e0bfac3b81b265689bf45b6874af544ffa4c975ac1ebf8" +checksum = "af934872acec734c2d80e6617bbb5ff4f12b052dd8e6332b0817bce889516084" dependencies = [ "js-sys", "wasm-bindgen", @@ -6463,9 +6452,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.118" +version = "0.2.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed" +checksum = "78b1041f495fb322e64aca85f5756b2172e35cd459376e67f2a6c9dffcedb103" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6473,9 +6462,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.118" +version = "0.2.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904" +checksum = "9dcd0ff20416988a18ac686d4d4d0f6aae9ebf08a389ff5d29012b05af2a1b41" dependencies = [ "bumpalo", "proc-macro2", @@ -6486,9 +6475,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.118" +version = "0.2.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129" +checksum = "49757b3c82ebf16c57d69365a142940b384176c24df52a087fb748e2085359ea" dependencies = [ "unicode-ident", ] @@ -6646,7 +6635,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c324a910fd86ebdc364a3e61ec1f11737d3b1d6c273c0239ee8ff4bc0d24b4a" dependencies = [ "proc-macro2", - "quick-xml 0.39.2", + "quick-xml", "quote", ] @@ -6664,9 +6653,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.95" +version = "0.3.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f2dfbb17949fa2088e5d39408c48368947b86f7834484e87b73de55bc14d97d" +checksum = "2eadbac71025cd7b0834f20d1fe8472e8495821b4e9801eb0a60bd1f19827602" dependencies = [ "js-sys", "wasm-bindgen", @@ -6689,7 +6678,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fc95580916af1e68ff6a7be07446fc5db73ebf71cf092de939bbf5f7e189f72" dependencies = [ "core-foundation 0.10.1", - "jni 0.22.4", + "jni", "log", "ndk-context", "objc2 0.6.4", @@ -6914,15 +6903,6 @@ dependencies = [ "windows-link 0.2.1", ] -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - [[package]] name = "windows-sys" version = "0.48.0" @@ -6968,21 +6948,6 @@ dependencies = [ "windows-link 0.2.1", ] -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - [[package]] name = "windows-targets" version = "0.48.5" @@ -7049,12 +7014,6 @@ dependencies = [ "windows-link 0.2.1", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -7073,12 +7032,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -7097,12 +7050,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -7133,12 +7080,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -7157,12 +7098,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -7181,12 +7116,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -7205,12 +7134,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -7286,9 +7209,6 @@ name = "winnow" version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" -dependencies = [ - "memchr", -] [[package]] name = "winnow" @@ -7536,9 +7456,9 @@ checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5" [[package]] name = "yeslogic-fontconfig-sys" -version = "6.0.0" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "503a066b4c037c440169d995b869046827dbc71263f6e8f3be6d77d4f3229dbd" +checksum = "1d8b8abf912b9a29ff112e1671c97c33636903d13a69712037190e6805af4f76" dependencies = [ "dlib", "once_cell", @@ -7570,9 +7490,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.14.0" +version = "5.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca82f95dbd3943a40a53cfded6c2d0a2ca26192011846a1810c4256ef92c60bc" +checksum = "c3bcbf15c8708d7fc1be0c993622e0a5cbd5e8b52bfa40afa4c3e0cd8d724ac1" dependencies = [ "async-broadcast", "async-executor", @@ -7597,7 +7517,7 @@ dependencies = [ "uds_windows", "uuid", "windows-sys 0.61.2", - "winnow 0.7.15", + "winnow 1.0.2", "zbus_macros", "zbus_names", "zvariant", @@ -7629,9 +7549,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.14.0" +version = "5.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897e79616e84aac4b2c46e9132a4f63b93105d54fe8c0e8f6bffc21fa8d49222" +checksum = "51fa5406ad9175a8c825a931f8cf347116b531b3634fcb0b627c290f1f2516ff" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -7644,22 +7564,22 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.3.1" +version = "4.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffd8af6d5b78619bab301ff3c560a5bd22426150253db278f164d6cf3b72c50f" +checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d" dependencies = [ "serde", - "winnow 0.7.15", + "winnow 1.0.2", "zvariant", ] [[package]] name = "zbus_xml" -version = "5.1.0" +version = "5.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "441a0064125265655bccc3a6af6bef56814d9277ac83fce48b1cd7e160b80eac" +checksum = "a8067892e940ed1727dea64690378601603b31d62dfde019a5335fbb7c0e0ed9" dependencies = [ - "quick-xml 0.38.4", + "quick-xml", "serde", "zbus_names", "zvariant", @@ -7755,9 +7675,9 @@ dependencies = [ [[package]] name = "zip" -version = "8.5.1" +version = "8.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcab981e19633ebcf0b001ddd37dd802996098bc1864f90b7c5d970ce76c1d59" +checksum = "2d04a6b5381502aa6087c94c669499eb1602eb9c5e8198e534de571f7154809b" dependencies = [ "aes", "bzip2", @@ -7772,7 +7692,7 @@ dependencies = [ "memchr", "pbkdf2", "ppmd-rust", - "sha1", + "sha1 0.11.0", "time", "typed-path", "zeroize", @@ -7858,23 +7778,23 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.10.0" +version = "5.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5708299b21903bbe348e94729f22c49c55d04720a004aa350f1f9c122fd2540b" +checksum = "c4db0ecb8987cf5e92653c57c098f7f0e39a03112edb796f4fe089fb7eaa14ff" dependencies = [ "endi", "enumflags2", "serde", - "winnow 0.7.15", + "winnow 1.0.2", "zvariant_derive", "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "5.10.0" +version = "5.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b59b012ebe9c46656f9cc08d8da8b4c726510aef12559da3e5f1bf72780752c" +checksum = "5b949b639ab1b4bed763aa7481ba0e368af68d8b55532f8ed4bec86a59f2ca98" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -7885,13 +7805,13 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "3.3.0" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f75c23a64ef8f40f13a6989991e643554d9bef1d682a281160cf0c1bc389c5e9" +checksum = "6d464f5733ffa07a3164d656f18533caace9d0638596721355d73256a410d691" dependencies = [ "proc-macro2", "quote", "serde", "syn", - "winnow 0.7.15", + "winnow 1.0.2", ] diff --git a/Cargo.toml b/Cargo.toml index 7aced01..7148454 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ gui = ["dep:rfd", "dep:slint", "dep:slint-build"] [dependencies] dirs = "6.0" zip = "8.0" -sevenz-rust2 = "0.20" +sevenz-rust2 = "0.21" chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" From 01863a70a8b3ff528d4ffce612c765da199bc47e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 3 May 2026 09:50:13 +0200 Subject: [PATCH 0831/1117] avoid some controller crashes (#830) * avoid some controller crashes * more * more --- src/ui/input.rs | 53 +++++++++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/src/ui/input.rs b/src/ui/input.rs index 59514ef..d12f795 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -378,27 +378,32 @@ fn handle_joystick_events(ui: &mut ui::Ui) { let joystick_id = sdl3_sys::joystick::SDL_JoystickID(joystick_event.joystick_id); for (i, controller) in ui.input.controllers.iter_mut().enumerate() { if joystick_event.connected { - let profile = ui + if let Some(profile) = ui .config .input .input_profiles .get(&ui.config.input.input_profile_binding[i]) - .unwrap(); - if profile.dinput { - if controller.joystick.is_null() - && controller.guid - == unsafe { sdl3_sys::joystick::SDL_GetJoystickGUIDForID(joystick_id) } - { - controller.joystick = - unsafe { sdl3_sys::joystick::SDL_OpenJoystick(joystick_id) }; - } - } else { - if controller.game_controller.is_null() - && controller.guid - == unsafe { sdl3_sys::gamepad::SDL_GetGamepadGUIDForID(joystick_id) } - { - controller.game_controller = - unsafe { sdl3_sys::gamepad::SDL_OpenGamepad(joystick_id) }; + { + if profile.dinput { + if controller.joystick.is_null() + && controller.guid + == unsafe { + sdl3_sys::joystick::SDL_GetJoystickGUIDForID(joystick_id) + } + { + controller.joystick = + unsafe { sdl3_sys::joystick::SDL_OpenJoystick(joystick_id) }; + } + } else { + if controller.game_controller.is_null() + && controller.guid + == unsafe { + sdl3_sys::gamepad::SDL_GetGamepadGUIDForID(joystick_id) + } + { + controller.game_controller = + unsafe { sdl3_sys::gamepad::SDL_OpenGamepad(joystick_id) }; + } } } } else { @@ -457,7 +462,12 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> InputData { handle_joystick_events(ui); let profile_name = &ui.config.input.input_profile_binding[channel]; - let profile = ui.config.input.input_profiles.get(profile_name).unwrap(); + let Some(profile) = ui.config.input.input_profiles.get(profile_name) else { + return InputData { + data: 0, + pak_change_pressed: false, + }; + }; let mut keys = 0; let controller = ui.input.controllers[channel].game_controller; let joystick = ui.input.controllers[channel].joystick; @@ -1048,14 +1058,13 @@ pub fn init(ui: &mut ui::Ui) { } } - if joystick_id != 0 { - let profile = ui + if joystick_id != 0 + && let Some(profile) = ui .config .input .input_profiles .get(&ui.config.input.input_profile_binding[i]) - .unwrap(); - + { if !profile.dinput { let gamepad = unsafe { sdl3_sys::gamepad::SDL_OpenGamepad(joystick_id) }; if gamepad.is_null() { From 3d6ca17a9ae9c8e2f0a3e850e45a7dc17ce7d19d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 3 May 2026 15:11:08 +0200 Subject: [PATCH 0832/1117] more crash protection (#831) --- src/savestates.rs | 6 ++++-- src/ui/gui.rs | 16 +++++----------- src/ui/input.rs | 4 ++-- src/ui/storage.rs | 10 +++++++--- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/savestates.rs b/src/savestates.rs index 3dc7692..c174fc8 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -113,8 +113,10 @@ pub fn load_savestate(device: &mut device::Device) { let save_bytes = ui::storage::decompress_file(savestate, "saves"); let rdp_state = ui::storage::decompress_file(savestate, "rdp_state"); let ra_state = ui::storage::decompress_file(savestate, "ra_state"); - if let Ok(state) = postcard::from_bytes::(&device_bytes) { - device.ui.storage.saves = postcard::from_bytes(&save_bytes).unwrap(); + if let Ok(state) = postcard::from_bytes::(&device_bytes) + && let Ok(saves) = postcard::from_bytes(&save_bytes) + { + device.ui.storage.saves = saves; device.cpu = state.cpu; device.pif = state.pif; diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 421ef62..f54c427 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -36,8 +36,10 @@ fn check_latest_version(weak: slint::Weak) { if let Ok(response) = response { let data: Result = response.json().await; - let latest_version = if let Ok(data) = data { - semver::Version::parse(&data.tag_name[1..]).unwrap() + let latest_version = if let Ok(data) = data + && let Ok(github_version) = semver::Version::parse(&data.tag_name[1..]) + { + github_version } else { semver::Version::parse(env!("CARGO_PKG_VERSION")).unwrap() }; @@ -108,15 +110,7 @@ fn local_game_window( config .recent_roms .iter() - .filter(|x| { - if let Ok(exists) = std::fs::exists(x) - && exists - { - true - } else { - false - } - }) + .filter(|x| std::fs::exists(x).unwrap_or(false)) .map(|x| { ( x.into(), diff --git a/src/ui/input.rs b/src/ui/input.rs index d12f795..4b3ced7 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -316,7 +316,7 @@ fn hotkey_pressed( sdl3_sys::gamepad::SDL_GamepadButton(controller_button.id), ) }; - } else if controller_axis.enabled { + } else if controller_axis.enabled && !controller.is_null() { let axis_position = unsafe { sdl3_sys::gamepad::SDL_GetGamepadAxis( controller, @@ -332,7 +332,7 @@ fn hotkey_pressed( pressed = (unsafe { sdl3_sys::joystick::SDL_GetJoystickHat(joystick, joystick_hat.id) } & joystick_hat.direction) != 0; - } else if joystick_axis.enabled { + } else if joystick_axis.enabled && !joystick.is_null() { let axis_position = unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, joystick_axis.id) }; pressed = axis_position as isize * joystick_axis.axis as isize > 0 diff --git a/src/ui/storage.rs b/src/ui/storage.rs index ed65e8f..31a8d62 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -228,8 +228,10 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { ui.storage.saves.sdcard.data = sdcard; } let romsave = std::fs::read(&ui.storage.paths.romsave_file_path); - if let Ok(romsave) = romsave { - ui.storage.saves.romsave.data = postcard::from_bytes(romsave.as_ref()).unwrap(); + if let Ok(romsave) = romsave + && let Ok(romsave_data) = postcard::from_bytes(romsave.as_ref()) + { + ui.storage.saves.romsave.data = romsave_data; } } @@ -316,7 +318,9 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { netplay::receive_save(netplay.as_mut().unwrap(), "rom", &mut compressed_romsave); if !compressed_romsave.is_empty() { let romsave_bytes = decompress_file(&compressed_romsave, "save"); - ui.storage.saves.romsave.data = postcard::from_bytes(&romsave_bytes).unwrap(); + if let Ok(romsave_data) = postcard::from_bytes(&romsave_bytes) { + ui.storage.saves.romsave.data = romsave_data; + } } } } From 17f3f2dc63fbc2418d6833a76329f6c60a930ff3 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 3 May 2026 15:59:59 +0200 Subject: [PATCH 0833/1117] more crash protection (#833) * more crash protection * more --- src/savestates.rs | 19 ++++++++-------- src/ui/storage.rs | 56 ++++++++++++++++++++++++++++------------------- 2 files changed, 44 insertions(+), 31 deletions(-) diff --git a/src/savestates.rs b/src/savestates.rs index c174fc8..15edd99 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -86,10 +86,11 @@ pub fn create_savestate(device: &device::Device) { (&ra_state, "ra_state"), ]; let save_path = device.ui.storage.paths.savestate_file_path.clone(); - let compressed_file = ui::storage::compress_file(data); - tokio::spawn(async move { - tokio::fs::write(save_path, compressed_file).await.unwrap(); - }); + if let Ok(compressed_file) = ui::storage::compress_file(data) { + tokio::spawn(async move { + tokio::fs::write(save_path, compressed_file).await.unwrap(); + }); + } ui::video::onscreen_message( &format!( "Savestate created in slot {}", @@ -109,11 +110,11 @@ pub fn load_savestate(device: &mut device::Device) { } let savestate = std::fs::read(&device.ui.storage.paths.savestate_file_path); if let Ok(savestate) = &savestate { - let device_bytes = ui::storage::decompress_file(savestate, "device"); - let save_bytes = ui::storage::decompress_file(savestate, "saves"); - let rdp_state = ui::storage::decompress_file(savestate, "rdp_state"); - let ra_state = ui::storage::decompress_file(savestate, "ra_state"); - if let Ok(state) = postcard::from_bytes::(&device_bytes) + if let Ok(device_bytes) = ui::storage::decompress_file(savestate, "device") + && let Ok(save_bytes) = ui::storage::decompress_file(savestate, "saves") + && let Ok(rdp_state) = ui::storage::decompress_file(savestate, "rdp_state") + && let Ok(ra_state) = ui::storage::decompress_file(savestate, "ra_state") + && let Ok(state) = postcard::from_bytes::(&device_bytes) && let Ok(saves) = postcard::from_bytes(&save_bytes) { device.ui.storage.saves = saves; diff --git a/src/ui/storage.rs b/src/ui/storage.rs index 31a8d62..f1a1384 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -263,8 +263,10 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { ); let mut compressed_sd = Vec::new(); - if !ui.storage.saves.sdcard.data.is_empty() { - compressed_sd = compress_file(&[(&ui.storage.saves.sdcard.data, "save")]); + if !ui.storage.saves.sdcard.data.is_empty() + && let Ok(file_data) = compress_file(&[(&ui.storage.saves.sdcard.data, "save")]) + { + compressed_sd = file_data; } netplay::send_save( netplay.as_mut().unwrap(), @@ -274,11 +276,13 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { ); let mut compressed_romsave = Vec::new(); - if !ui.storage.saves.romsave.data.is_empty() { - compressed_romsave = compress_file(&[( + if !ui.storage.saves.romsave.data.is_empty() + && let Ok(file_data) = compress_file(&[( &postcard::to_stdvec(&ui.storage.saves.romsave.data).unwrap(), "save", - )]); + )]) + { + compressed_romsave = file_data; } netplay::send_save( netplay.as_mut().unwrap(), @@ -310,17 +314,19 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { let mut compressed_sd = Vec::new(); netplay::receive_save(netplay.as_mut().unwrap(), "img", &mut compressed_sd); - if !compressed_sd.is_empty() { - ui.storage.saves.sdcard.data = decompress_file(&compressed_sd, "save"); + if !compressed_sd.is_empty() + && let Ok(file_data) = decompress_file(&compressed_sd, "save") + { + ui.storage.saves.sdcard.data = file_data; } let mut compressed_romsave = Vec::new(); netplay::receive_save(netplay.as_mut().unwrap(), "rom", &mut compressed_romsave); - if !compressed_romsave.is_empty() { - let romsave_bytes = decompress_file(&compressed_romsave, "save"); - if let Ok(romsave_data) = postcard::from_bytes(&romsave_bytes) { - ui.storage.saves.romsave.data = romsave_data; - } + if !compressed_romsave.is_empty() + && let Ok(romsave_bytes) = decompress_file(&compressed_romsave, "save") + && let Ok(romsave_data) = postcard::from_bytes(&romsave_bytes) + { + ui.storage.saves.romsave.data = romsave_data; } } } @@ -333,33 +339,39 @@ pub fn format_saves(device: &mut device::Device) { device::controller::mempak::format_mempak(device); } -pub fn decompress_file(input: &[u8], name: &str) -> Vec { +pub fn decompress_file(input: &[u8], name: &str) -> Result, zip::result::ZipError> { let mut decompressed_file = Vec::new(); { - let mut reader = zip::ZipArchive::new(std::io::Cursor::new(input)).unwrap(); - let mut file = reader.by_name(name).unwrap(); - file.read_to_end(&mut decompressed_file).unwrap(); + if let Ok(mut reader) = zip::ZipArchive::new(std::io::Cursor::new(input)) + && let Ok(mut file) = reader.by_name(name) + && let Ok(_) = file.read_to_end(&mut decompressed_file) + { + return Ok(decompressed_file); + } } - decompressed_file + Err(zip::result::ZipError::FileNotFound) } -pub fn compress_file(data: &[(&[u8], &str)]) -> Vec { +pub fn compress_file(data: &[(&[u8], &str)]) -> Result, zip::result::ZipError> { let mut compressed_file = Vec::new(); { let mut writer = zip::ZipWriter::new(std::io::Cursor::new(&mut compressed_file)); for item in data { - writer + if writer .start_file( item.1, zip::write::SimpleFileOptions::default() .compression_method(zip::CompressionMethod::Zstd) .compression_level(Some(1)), ) - .unwrap(); - writer.write_all(item.0).unwrap(); + .is_err() + || writer.write_all(item.0).is_err() + { + return Err(zip::result::ZipError::FileNotFound); + } } } - compressed_file + Ok(compressed_file) } fn writeback_sdcard(device: &mut device::Device) { From 12280bb35b3377107bcccbcadcb33be9fa5f5293 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 3 May 2026 16:02:17 +0200 Subject: [PATCH 0834/1117] more crash protection (#832) * more crash protection * more * more --- src/ui/config.rs | 14 +++++++---- src/ui/gui.rs | 29 +++++++++++++++++------ src/ui/input.rs | 9 +++---- src/ui/netplay.rs | 47 +++++++++++++++++++++---------------- src/ui/retroachievements.rs | 20 +++++++++++----- src/ui/storage.rs | 9 ++++--- 6 files changed, 84 insertions(+), 44 deletions(-) diff --git a/src/ui/config.rs b/src/ui/config.rs index 26a5c06..10c086a 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -85,8 +85,11 @@ impl Drop for Cheats { fn write_cheats(cheats: &Cheats) { let dirs = ui::get_dirs(); let file_path = dirs.config_dir.join("cheats.json"); - let f = std::fs::File::create(file_path).unwrap(); - serde_json::to_writer_pretty(f, &cheats).unwrap(); + if let Ok(f) = std::fs::File::create(file_path) + && let Err(e) = serde_json::to_writer_pretty(f, &cheats) + { + eprintln!("Error writing cheats: {}", e); + } } impl Cheats { @@ -115,8 +118,11 @@ impl Drop for Config { fn write_config(config: &Config) { let dirs = ui::get_dirs(); let file_path = dirs.config_dir.join("config.json"); - let f = std::fs::File::create(file_path).unwrap(); - serde_json::to_writer_pretty(f, &config).unwrap(); + if let Ok(f) = std::fs::File::create(file_path) + && let Err(e) = serde_json::to_writer_pretty(f, &config) + { + eprintln!("Error writing config: {}", e); + } } impl Config { diff --git a/src/ui/gui.rs b/src/ui/gui.rs index f54c427..8a75d4a 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -153,7 +153,9 @@ fn local_game_window( let saves_path = dirs.data_dir.join("saves"); app.on_saves_folder_button_clicked(move || { - open::that_detached(saves_path.clone()).unwrap(); + if let Err(e) = open::that_detached(saves_path.clone()) { + eprintln!("Error opening saves folder: {}", e); + } }); file_dropped(app, controller_paths); } @@ -448,22 +450,35 @@ pub fn save_settings(app: &AppWindow, controller_paths: &[Option]) { fn about_window(app: &AppWindow) { app.on_wiki_button_clicked(move || { - open::that_detached("https://github.com/gopher64/gopher64/wiki").unwrap(); + if let Err(e) = open::that_detached("https://github.com/gopher64/gopher64/wiki") { + eprintln!("Error opening wiki: {}", e); + } }); app.on_discord_button_clicked(move || { - open::that_detached("https://discord.gg/9RGXq8W8JQ").unwrap(); + if let Err(e) = open::that_detached("https://discord.gg/9RGXq8W8JQ") { + eprintln!("Error opening Discord: {}", e); + } }); app.on_patreon_button_clicked(move || { - open::that_detached("https://patreon.com/loganmc10").unwrap(); + if let Err(e) = open::that_detached("https://patreon.com/loganmc10") { + eprintln!("Error opening Patreon: {}", e); + } }); app.on_github_sponsors_button_clicked(move || { - open::that_detached("https://github.com/sponsors/loganmc10").unwrap(); + if let Err(e) = open::that_detached("https://github.com/sponsors/loganmc10") { + eprintln!("Error opening GitHub Sponsors: {}", e); + } }); app.on_source_code_button_clicked(move || { - open::that_detached("https://github.com/gopher64/gopher64").unwrap(); + if let Err(e) = open::that_detached("https://github.com/gopher64/gopher64") { + eprintln!("Error opening source code: {}", e); + } }); app.on_newversion_button_clicked(move || { - open::that_detached("https://github.com/gopher64/gopher64/releases/latest").unwrap(); + if let Err(e) = open::that_detached("https://github.com/gopher64/gopher64/releases/latest") + { + eprintln!("Error opening new version: {}", e); + } }); app.set_version(format!("Version: {}", env!("GIT_DESCRIBE")).into()); diff --git a/src/ui/input.rs b/src/ui/input.rs index 4b3ced7..2296dbc 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -1041,15 +1041,16 @@ pub fn init(ui: &mut ui::Ui) { } for i in 0..4 { - let controller_assignment = &ui.config.input.controller_assignment[i]; - if controller_assignment.is_some() && ui.config.input.controller_enabled[i] { + if let Some(controller_assignment) = &ui.config.input.controller_assignment[i] + && ui.config.input.controller_enabled[i] + { let mut joystick_id = sdl3_sys::everything::SDL_JoystickID(0); - let assigned_path = controller_assignment.as_ref().unwrap(); for joystick in ui.input.joysticks.iter() { let path = unsafe { sdl3_sys::joystick::SDL_GetJoystickPathForID(*joystick) }; if !path.is_null() - && unsafe { std::ffi::CStr::from_ptr(path).to_str().unwrap() } == *assigned_path + && unsafe { std::ffi::CStr::from_ptr(path).to_str().unwrap() } + == controller_assignment && unsafe { sdl3_sys::joystick::SDL_GetJoystickFromID(*joystick) }.is_null() && unsafe { sdl3_sys::gamepad::SDL_GetGamepadFromID(*joystick) }.is_null() { diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index e9f4fc2..5f050c5 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -116,25 +116,27 @@ fn populate_server_names(weak: slin tokio::spawn(async move { let mut local_servers: Vec<(String, String)> = vec![]; - let broadcast_sock = tokio::net::UdpSocket::bind((std::net::Ipv4Addr::UNSPECIFIED, 0)) - .await - .unwrap(); - broadcast_sock.set_broadcast(true).unwrap(); - let data: [u8; 1] = [1]; - let _ = broadcast_sock - .send_to(&data, (std::net::Ipv4Addr::BROADCAST, 45000)) - .await; - let mut buffer = [0; 1024]; - if let Ok(Ok(result)) = tokio::time::timeout( - std::time::Duration::from_millis(200), - broadcast_sock.recv(&mut buffer), - ) - .await + if let Ok(broadcast_sock) = + tokio::net::UdpSocket::bind((std::net::Ipv4Addr::UNSPECIFIED, 0)).await + && let Ok(_) = broadcast_sock.set_broadcast(true) { - let data: std::collections::HashMap = - serde_json::from_slice(&buffer[..result]).unwrap(); - for server in data.iter() { - local_servers.push((server.0.into(), server.1.into())); + let data: [u8; 1] = [1]; + let _ = broadcast_sock + .send_to(&data, (std::net::Ipv4Addr::BROADCAST, 45000)) + .await; + let mut buffer = [0; 1024]; + if let Ok(Ok(result)) = tokio::time::timeout( + std::time::Duration::from_millis(200), + broadcast_sock.recv(&mut buffer), + ) + .await + && let Ok(data) = serde_json::from_slice::>( + &buffer[..result], + ) + { + for server in data.iter() { + local_servers.push((server.0.into(), server.1.into())); + } } } @@ -1259,9 +1261,14 @@ pub fn netplay_window(app: &AppWindow, controller_paths: &[Option]) { }); app.on_netplay_discord_button_clicked(move || { - open::that_detached("https://discord.gg/JyW6ZgBUyS").unwrap(); + if let Err(e) = open::that_detached("https://discord.gg/JyW6ZgBUyS") { + eprintln!("Error opening Discord: {}", e); + } }); app.on_netplay_feedback_button_clicked(move || { - open::that_detached("https://github.com/gopher64/gopher64/discussions/453").unwrap(); + if let Err(e) = open::that_detached("https://github.com/gopher64/gopher64/discussions/453") + { + eprintln!("Error opening feedback: {}", e); + } }); } diff --git a/src/ui/retroachievements.rs b/src/ui/retroachievements.rs index 55d1dcd..1d052a4 100644 --- a/src/ui/retroachievements.rs +++ b/src/ui/retroachievements.rs @@ -82,20 +82,28 @@ pub fn ra_window(app: &ui::gui::AppWindow) { leaderboard, } }; - let f = std::fs::File::create(&file_path).unwrap(); - serde_json::to_writer_pretty(f, &raconfig).unwrap(); + if let Ok(f) = std::fs::File::create(&file_path) + && let Err(e) = serde_json::to_writer_pretty(f, &raconfig) + { + eprintln!("Error writing RA config: {}", e); + } }); app.on_ra_games_clicked(move || { - open::that_detached("https://retroachievements.org/system/2-nintendo-64/games").unwrap(); + if let Err(e) = + open::that_detached("https://retroachievements.org/system/2-nintendo-64/games") + { + eprintln!("Error opening games: {}", e); + } }); app.on_ra_show_profile_clicked(move || { - open::that_detached(format!( + if let Err(e) = open::that_detached(format!( "https://retroachievements.org/user/{}", retroachievements::get_username().unwrap_or_default() - )) - .unwrap(); + )) { + eprintln!("Error opening profile: {}", e); + } }); } diff --git a/src/ui/storage.rs b/src/ui/storage.rs index f1a1384..fde493b 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -49,8 +49,9 @@ pub struct Saves { } fn get_save_type(rom: &[u8], game_id: &str) -> Vec { - let header_type = std::str::from_utf8(rom[0x3C..0x3E].try_into().unwrap()); - if header_type.is_ok() && header_type.unwrap() == "ED" { + if let Ok(header_type) = std::str::from_utf8(rom[0x3C..0x3E].try_into().unwrap()) + && header_type == "ED" + { let save_type = rom[0x3F] >> 4; match save_type { 0 => return vec![], @@ -509,6 +510,8 @@ fn write_save(ui: &mut ui::Ui, save_type: SaveTypes) { let save_data = data.clone(); let save_path = path.to_path_buf(); tokio::spawn(async move { - tokio::fs::write(save_path, save_data).await.unwrap(); + if let Err(e) = tokio::fs::write(save_path, save_data).await { + eprintln!("Error writing save: {}", e); + } }); } From 1184d3d77aedbaa569453549c8de04490b1da173 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 3 May 2026 16:22:50 +0200 Subject: [PATCH 0835/1117] better error message (#834) --- src/savestates.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/savestates.rs b/src/savestates.rs index 15edd99..8f9ee13 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -88,7 +88,9 @@ pub fn create_savestate(device: &device::Device) { let save_path = device.ui.storage.paths.savestate_file_path.clone(); if let Ok(compressed_file) = ui::storage::compress_file(data) { tokio::spawn(async move { - tokio::fs::write(save_path, compressed_file).await.unwrap(); + if let Err(e) = tokio::fs::write(save_path, compressed_file).await { + eprintln!("Error writing savestate: {}", e); + } }); } ui::video::onscreen_message( From 90052257bb37d479666e7a1c56387e733fb7033a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 4 May 2026 09:49:38 +0200 Subject: [PATCH 0836/1117] Use eprintln (#835) * use eprintln * more * more --- src/cheats.rs | 4 ++-- src/device/controller.rs | 2 +- src/device/controller/gbcart.rs | 2 +- src/device/controller/transferpak.rs | 6 +++--- src/main.rs | 7 ++++--- src/ui/input.rs | 18 +++++++++--------- src/ui/netplay.rs | 9 ++++++--- 7 files changed, 26 insertions(+), 22 deletions(-) diff --git a/src/cheats.rs b/src/cheats.rs index 6010532..0622292 100644 --- a/src/cheats.rs +++ b/src/cheats.rs @@ -73,14 +73,14 @@ pub fn init( data, }) } else { - println!("Could not parse data for: {}", cheat_setting.0); + eprintln!("Could not parse data for: {}", cheat_setting.0); }; } if !decoded_cheat.is_empty() { device.cheats.cheats.push(decoded_cheat); } } else { - println!("Could not find cheat: {}", cheat_setting.0); + eprintln!("Could not find cheat: {}", cheat_setting.0); } } diff --git a/src/device/controller.rs b/src/device/controller.rs index 10b4c18..87db1d2 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -95,7 +95,7 @@ pub fn process(device: &mut device::Device, channel: usize) { device.pif.channels[channel].rx_buf.unwrap(), channel, ), - _ => println!("unknown controller command {cmd}"), + _ => eprintln!("unknown controller command {cmd}"), } } diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index a2e4b4c..f935dc5 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -227,7 +227,7 @@ fn write_mbc5( } else if address < 0x6000 { cart.ram_bank = (value & 0xf) as u16; } else if address < 0xa000 { - println!("Unknown MBC5 write address {address:x}"); + eprintln!("Unknown MBC5 write address {address:x}"); } else if (0xa000..0xc000).contains(&address) { if !cart.ram_enabled { return; diff --git a/src/device/controller/transferpak.rs b/src/device/controller/transferpak.rs index ea647a5..2e60a4a 100644 --- a/src/device/controller/transferpak.rs +++ b/src/device/controller/transferpak.rs @@ -61,7 +61,7 @@ pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usi ); } _ => { - println!("unknown transfer pak read {:x}", address >> 12); + eprintln!("unknown transfer pak read {:x}", address >> 12); } } } @@ -84,7 +84,7 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us } pak.enabled = true; } - _ => println!("unknown transfer pak value"), + _ => eprintln!("unknown transfer pak value"), } return; } @@ -127,7 +127,7 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us ); } _ => { - println!("unknown transfer pak write {:x}", address >> 12); + eprintln!("unknown transfer pak write {:x}", address >> 12); } } } diff --git a/src/main.rs b/src/main.rs index 294a1a8..a262f87 100644 --- a/src/main.rs +++ b/src/main.rs @@ -235,12 +235,13 @@ async fn main() -> std::io::Result<()> { if device.ui.config.input.transfer_pak[i] && !device.ui.config.input.gb_ram_path[i].is_empty() && !device.transferpaks[i].cart.ram.is_empty() - { - let _ = tokio::fs::write( + && let Err(e) = tokio::fs::write( &device.ui.config.input.gb_ram_path[i], &device.transferpaks[i].cart.ram, ) - .await; + .await + { + eprintln!("Error writing GB RAM: {}", e); } } } diff --git a/src/ui/input.rs b/src/ui/input.rs index 2296dbc..4b950ee 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -548,7 +548,7 @@ pub fn assign_controller(ui: &mut ui::Ui, controller: i32, port: usize) { Some(unsafe { std::ffi::CStr::from_ptr(path).to_str().unwrap().to_string() }); } } else { - println!("Invalid controller number") + eprintln!("Invalid controller number") } } @@ -556,7 +556,7 @@ pub fn bind_input_profile(ui: &mut ui::Ui, profile: String, port: usize) { if ui.config.input.input_profiles.contains_key(&profile) { ui.config.input.input_profile_binding[port - 1] = profile; } else { - println!("Invalid profile name") + eprintln!("Invalid profile name") } } @@ -595,11 +595,11 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, d ui::ttf_init(); if profile == "default" { - println!("Profile name cannot be default"); + eprintln!("Profile name cannot be default"); return; } if profile.is_empty() { - println!("Profile name cannot be empty"); + eprintln!("Profile name cannot be empty"); return; } let mut open_joysticks: Vec<*mut sdl3_sys::joystick::SDL_Joystick> = Vec::new(); @@ -1069,7 +1069,7 @@ pub fn init(ui: &mut ui::Ui) { if !profile.dinput { let gamepad = unsafe { sdl3_sys::gamepad::SDL_OpenGamepad(joystick_id) }; if gamepad.is_null() { - println!("could not connect gamepad: {}", u32::from(joystick_id)) + eprintln!("could not connect gamepad: {}", u32::from(joystick_id)) } else { ui.input.controllers[i].game_controller = gamepad; ui.input.controllers[i].guid = @@ -1077,7 +1077,7 @@ pub fn init(ui: &mut ui::Ui) { let properties = unsafe { sdl3_sys::gamepad::SDL_GetGamepadProperties(gamepad) }; if properties == 0 { - println!("could not get gamepad properties"); + eprintln!("could not get gamepad properties"); } ui.input.controllers[i].rumble = unsafe { sdl3_sys::properties::SDL_GetBooleanProperty( @@ -1090,7 +1090,7 @@ pub fn init(ui: &mut ui::Ui) { } else { let joystick = unsafe { sdl3_sys::joystick::SDL_OpenJoystick(joystick_id) }; if joystick.is_null() { - println!("could not connect joystick: {}", u32::from(joystick_id)) + eprintln!("could not connect joystick: {}", u32::from(joystick_id)) } else { ui.input.controllers[i].joystick = joystick; ui.input.controllers[i].guid = @@ -1098,7 +1098,7 @@ pub fn init(ui: &mut ui::Ui) { let properties = unsafe { sdl3_sys::joystick::SDL_GetJoystickProperties(joystick) }; if properties == 0 { - println!("could not get joystick properties"); + eprintln!("could not get joystick properties"); } ui.input.controllers[i].rumble = unsafe { sdl3_sys::properties::SDL_GetBooleanProperty( @@ -1110,7 +1110,7 @@ pub fn init(ui: &mut ui::Ui) { } } } else { - println!("Could not bind assigned controller"); + eprintln!("Could not bind assigned controller"); } } } diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 5f050c5..d7b6472 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -121,9 +121,12 @@ fn populate_server_names(weak: slin && let Ok(_) = broadcast_sock.set_broadcast(true) { let data: [u8; 1] = [1]; - let _ = broadcast_sock + if let Err(e) = broadcast_sock .send_to(&data, (std::net::Ipv4Addr::BROADCAST, 45000)) - .await; + .await + { + eprintln!("Error sending broadcast: {}", e); + } let mut buffer = [0; 1024]; if let Ok(Ok(result)) = tokio::time::timeout( std::time::Duration::from_millis(200), @@ -1126,7 +1129,7 @@ fn setup_wait_window( } } _ => { - println!("Unknown netplay message type: {}", response.message_type); + eprintln!("Unknown netplay message type: {}", response.message_type); } }, Err(tokio::sync::broadcast::error::RecvError::Lagged(_)) => { From 883852a82849a0a13fa7d731d76dd1549f2cfea1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 4 May 2026 10:36:50 +0200 Subject: [PATCH 0837/1117] more error messages (#836) --- src/cheats.rs | 2 +- src/savestates.rs | 2 ++ src/ui/gui.rs | 1 + src/ui/input.rs | 3 +++ src/ui/netplay.rs | 2 ++ 5 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/cheats.rs b/src/cheats.rs index 0622292..571cb01 100644 --- a/src/cheats.rs +++ b/src/cheats.rs @@ -48,7 +48,7 @@ pub fn init( { option_value = Some(found_option_value.to_string()); } else { - println!("Cheat option: {option} not found"); + eprintln!("Cheat option: {option} not found"); continue; } } diff --git a/src/savestates.rs b/src/savestates.rs index 8f9ee13..9120d5a 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -92,6 +92,8 @@ pub fn create_savestate(device: &device::Device) { eprintln!("Error writing savestate: {}", e); } }); + } else { + eprintln!("Error compressing savestate"); } ui::video::onscreen_message( &format!( diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 8a75d4a..e69c403 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -41,6 +41,7 @@ fn check_latest_version(weak: slint::Weak) { { github_version } else { + eprintln!("Error getting latest version from GitHub"); semver::Version::parse(env!("CARGO_PKG_VERSION")).unwrap() }; let current_version = semver::Version::parse(env!("CARGO_PKG_VERSION")).unwrap(); diff --git a/src/ui/input.rs b/src/ui/input.rs index 4b950ee..43d5d48 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -463,6 +463,7 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> InputData { let profile_name = &ui.config.input.input_profile_binding[channel]; let Some(profile) = ui.config.input.input_profiles.get(profile_name) else { + eprintln!("Invalid profile name: {profile_name}"); return InputData { data: 0, pak_change_pressed: false, @@ -546,6 +547,8 @@ pub fn assign_controller(ui: &mut ui::Ui, controller: i32, port: usize) { if !path.is_null() { ui.config.input.controller_assignment[port - 1] = Some(unsafe { std::ffi::CStr::from_ptr(path).to_str().unwrap().to_string() }); + } else { + eprintln!("Invalid controller path for controller {controller}"); } } else { eprintln!("Invalid controller number") diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index d7b6472..006e6ab 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -141,6 +141,8 @@ fn populate_server_names(weak: slin local_servers.push((server.0.into(), server.1.into())); } } + } else { + eprintln!("Error creating netplay broadcast socket"); } let response = task.await; From f45f951af88944b8acfc1a9c2b5334f0be69f8d1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 4 May 2026 10:59:20 +0200 Subject: [PATCH 0838/1117] fast forward controller hotkey (#837) * fast forward controller hotkey * more --- parallel-rdp/interface.cpp | 9 +++++- src/ui/input.rs | 56 ++++++++++++++++++++++++-------------- 2 files changed, 43 insertions(+), 22 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 3924483..9eceaea 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -58,6 +58,7 @@ enum user_event_codes { USER_EVENT_SAVE_STATE = 1, USER_EVENT_LOAD_STATE = 2, USER_EVENT_EXIT_GAME = 3, + USER_EVENT_FAST_FORWARD = 4, }; typedef struct { @@ -156,7 +157,10 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { break; case SDL_SCANCODE_F: if (event->key.mod & SDL_KMOD_ALT) { - callback.enable_speedlimiter = !callback.enable_speedlimiter; + SDL_zero(user_event); + user_event.type = SDL_EVENT_USER; + user_event.user.code = USER_EVENT_FAST_FORWARD; + SDL_PushEvent(&user_event); } break; case SDL_SCANCODE_P: @@ -245,6 +249,9 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { case USER_EVENT_EXIT_GAME: callback.emu_running = false; break; + case USER_EVENT_FAST_FORWARD: + callback.enable_speedlimiter = !callback.enable_speedlimiter; + break; default: break; } diff --git a/src/ui/input.rs b/src/ui/input.rs index 43d5d48..76afe03 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -427,34 +427,48 @@ fn handle_joystick_events(ui: &mut ui::Ui) { fn handle_hotkeys(keys: u32, last_key_state: u32) { if keys & (1 << L_TRIG) != 0 && last_key_state & (1 << L_TRIG) == 0 { - let mut event = sdl3_sys::events::SDL_Event { - user: sdl3_sys::events::SDL_UserEvent { - r#type: u32::from(sdl3_sys::events::SDL_EVENT_USER), - code: 1, //save state - ..Default::default() - }, + unsafe { + sdl3_sys::events::SDL_PushEvent(&mut sdl3_sys::events::SDL_Event { + user: sdl3_sys::events::SDL_UserEvent { + r#type: u32::from(sdl3_sys::events::SDL_EVENT_USER), + code: 1, //save state + ..Default::default() + }, + }) }; - unsafe { sdl3_sys::events::SDL_PushEvent(&mut event) }; } if keys & (1 << R_TRIG) != 0 && last_key_state & (1 << R_TRIG) == 0 { - let mut event = sdl3_sys::events::SDL_Event { - user: sdl3_sys::events::SDL_UserEvent { - r#type: u32::from(sdl3_sys::events::SDL_EVENT_USER), - code: 2, //load state - ..Default::default() - }, + unsafe { + sdl3_sys::events::SDL_PushEvent(&mut sdl3_sys::events::SDL_Event { + user: sdl3_sys::events::SDL_UserEvent { + r#type: u32::from(sdl3_sys::events::SDL_EVENT_USER), + code: 2, //load state + ..Default::default() + }, + }) }; - unsafe { sdl3_sys::events::SDL_PushEvent(&mut event) }; } if keys & (1 << START_BUTTON) != 0 && last_key_state & (1 << START_BUTTON) == 0 { - let mut event = sdl3_sys::events::SDL_Event { - user: sdl3_sys::events::SDL_UserEvent { - r#type: u32::from(sdl3_sys::events::SDL_EVENT_USER), - code: 3, //exit game - ..Default::default() - }, + unsafe { + sdl3_sys::events::SDL_PushEvent(&mut sdl3_sys::events::SDL_Event { + user: sdl3_sys::events::SDL_UserEvent { + r#type: u32::from(sdl3_sys::events::SDL_EVENT_USER), + code: 3, //exit game + ..Default::default() + }, + }) + }; + } + if keys & (1 << Z_TRIG) != 0 && last_key_state & (1 << Z_TRIG) == 0 { + unsafe { + sdl3_sys::events::SDL_PushEvent(&mut sdl3_sys::events::SDL_Event { + user: sdl3_sys::events::SDL_UserEvent { + r#type: u32::from(sdl3_sys::events::SDL_EVENT_USER), + code: 4, //fast forward + ..Default::default() + }, + }) }; - unsafe { sdl3_sys::events::SDL_PushEvent(&mut event) }; } } From a4f635265b151752aab05cde007b065b689b1875 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 4 May 2026 13:52:46 +0200 Subject: [PATCH 0839/1117] guards around postcard (#838) --- src/savestates.rs | 42 ++++++++++++++++++++++++------------------ src/ui/storage.rs | 45 ++++++++++++++++++++++----------------------- 2 files changed, 46 insertions(+), 41 deletions(-) diff --git a/src/savestates.rs b/src/savestates.rs index 9120d5a..75ec56d 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -76,32 +76,38 @@ pub fn create_savestate(device: &device::Device) { let mut ra_state: Vec = vec![0; retroachievements::state_size()]; retroachievements::save_state(ra_state.as_mut_ptr(), ra_state.len()); - let data: &[(&[u8], &str)] = &[ - (&postcard::to_stdvec(device).unwrap(), "device"), - ( - &postcard::to_stdvec(&device.ui.storage.saves).unwrap(), - "saves", - ), - (&rdp_state, "rdp_state"), - (&ra_state, "ra_state"), - ]; let save_path = device.ui.storage.paths.savestate_file_path.clone(); - if let Ok(compressed_file) = ui::storage::compress_file(data) { + + if let Ok(device_data) = postcard::to_stdvec(device) + && let Ok(saves_data) = postcard::to_stdvec(&device.ui.storage.saves) + && let Ok(compressed_file) = ui::storage::compress_file(&[ + (&device_data, "device"), + (&saves_data, "saves"), + (&rdp_state, "rdp_state"), + (&ra_state, "ra_state"), + ]) + { tokio::spawn(async move { if let Err(e) = tokio::fs::write(save_path, compressed_file).await { eprintln!("Error writing savestate: {}", e); } }); + ui::video::onscreen_message( + &format!( + "Savestate created in slot {}", + device.ui.storage.save_state_slot + ), + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, + ); } else { - eprintln!("Error compressing savestate"); + ui::video::onscreen_message( + &format!( + "Failed to create savestate in slot {}", + device.ui.storage.save_state_slot + ), + ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, + ); } - ui::video::onscreen_message( - &format!( - "Savestate created in slot {}", - device.ui.storage.save_state_slot - ), - ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, - ); } pub fn load_savestate(device: &mut device::Device) { diff --git a/src/ui/storage.rs b/src/ui/storage.rs index fde493b..f2e832e 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -278,12 +278,10 @@ pub fn load_saves(ui: &mut ui::Ui, netplay: &mut Option) { let mut compressed_romsave = Vec::new(); if !ui.storage.saves.romsave.data.is_empty() - && let Ok(file_data) = compress_file(&[( - &postcard::to_stdvec(&ui.storage.saves.romsave.data).unwrap(), - "save", - )]) + && let Ok(file_data) = postcard::to_stdvec(&ui.storage.saves.romsave.data) + && let Ok(compressed_file_data) = compress_file(&[(&file_data, "save")]) { - compressed_romsave = file_data; + compressed_romsave = compressed_file_data; } netplay::send_save( netplay.as_mut().unwrap(), @@ -471,44 +469,45 @@ pub fn schedule_save(device: &mut device::Device, save_type: SaveTypes) { } fn write_save(ui: &mut ui::Ui, save_type: SaveTypes) { - let path: &std::path::Path; - let data: &Vec; - let rom_save_data: Vec; + let save_path: std::path::PathBuf; + let save_data: Vec; match save_type { SaveTypes::Eeprom4k | SaveTypes::Eeprom16k => { - path = ui.storage.paths.eep_file_path.as_ref(); - data = ui.storage.saves.eeprom.data.as_ref(); + save_path = ui.storage.paths.eep_file_path.clone(); + save_data = ui.storage.saves.eeprom.data.clone(); ui.storage.saves.eeprom.write_pending = false; } SaveTypes::Sram => { - path = ui.storage.paths.sra_file_path.as_ref(); - data = ui.storage.saves.sram.data.as_ref(); + save_path = ui.storage.paths.sra_file_path.clone(); + save_data = ui.storage.saves.sram.data.clone(); ui.storage.saves.sram.write_pending = false; } SaveTypes::Flash => { - path = ui.storage.paths.fla_file_path.as_ref(); - data = ui.storage.saves.flash.data.as_ref(); + save_path = ui.storage.paths.fla_file_path.clone(); + save_data = ui.storage.saves.flash.data.clone(); ui.storage.saves.flash.write_pending = false; } SaveTypes::Mempak => { - path = ui.storage.paths.pak_file_path.as_ref(); - data = ui.storage.saves.mempak.data.as_ref(); + save_path = ui.storage.paths.pak_file_path.clone(); + save_data = ui.storage.saves.mempak.data.clone(); ui.storage.saves.mempak.write_pending = false; } SaveTypes::Sdcard => { - path = ui.storage.paths.sdcard_file_path.as_ref(); - data = ui.storage.saves.sdcard.data.as_ref(); + save_path = ui.storage.paths.sdcard_file_path.clone(); + save_data = ui.storage.saves.sdcard.data.clone(); ui.storage.saves.sdcard.write_pending = false; } SaveTypes::Romsave => { - path = ui.storage.paths.romsave_file_path.as_ref(); - rom_save_data = postcard::to_stdvec(&ui.storage.saves.romsave.data).unwrap(); - data = rom_save_data.as_ref(); + save_path = ui.storage.paths.romsave_file_path.clone(); ui.storage.saves.romsave.write_pending = false; + if let Ok(rom_save) = postcard::to_stdvec(&ui.storage.saves.romsave.data) { + save_data = rom_save; + } else { + eprintln!("Error serializing rom save data"); + return; + }; } } - let save_data = data.clone(); - let save_path = path.to_path_buf(); tokio::spawn(async move { if let Err(e) = tokio::fs::write(save_path, save_data).await { eprintln!("Error writing save: {}", e); From 945d456f9c82c98fbf8eeb0af633160a7ddff599 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 4 May 2026 14:52:25 +0200 Subject: [PATCH 0840/1117] disable fps display on close (#839) * disable fps display on close * another check --- parallel-rdp/interface.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 9eceaea..e884a55 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -407,6 +407,8 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font, } void rdp_close() { + display_fps = false; + messages = std::queue(); achievement_challenge_indicator_image = Vulkan::ImageHandle(); achievement_progress_indicator_image = Vulkan::ImageHandle(); @@ -917,6 +919,10 @@ uint64_t rdp_process_commands() { static void rdp_set_fps_callback(void *userdata) { FPS_DATA *data = (FPS_DATA *)userdata; + if (!wsi) { + delete data; + return; + } fps_image = create_message_image( wsi->get_device(), 0, achievement_challenge_indicator_font, std::format("FPS: {} VI/S: {}", data->fps, data->vis).c_str()); From 172d10d7cb95089e694bc9fa4948fc165d14ef80 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 6 May 2026 09:44:39 +0200 Subject: [PATCH 0841/1117] update controllers when clicking on controller config (#841) * update controllers when clicking on controller config * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more --- src/device.rs | 2 +- src/main.rs | 43 +++++---- src/ui.rs | 36 +------ src/ui/gui.rs | 160 ++++++++++++++++--------------- src/ui/gui/appwindow.slint | 6 +- src/ui/gui/controller_page.slint | 9 +- src/ui/input.rs | 73 +++++++++----- src/ui/netplay.rs | 10 +- src/ui/video.rs | 2 + 9 files changed, 175 insertions(+), 166 deletions(-) diff --git a/src/device.rs b/src/device.rs index ba314aa..36c21c5 100644 --- a/src/device.rs +++ b/src/device.rs @@ -207,7 +207,7 @@ pub fn get_rom_contents(file_path: &std::path::Path) -> Option> { pub struct Device { #[serde(skip)] pub netplay: Option, - #[serde(skip, default = "ui::Ui::default")] + #[serde(skip, default = "ui::Ui::new")] pub ui: ui::Ui, pub byte_swap: usize, pub save_state: bool, diff --git a/src/main.rs b/src/main.rs index a262f87..e0b558e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -249,10 +249,10 @@ async fn main() -> std::io::Result<()> { ui::usb::close(shutdown_tx); } } else if std::env::args().count() > 1 { - let mut ui = ui::Ui::new(); + let mut config = ui::config::Config::new(); if args.clear_input_bindings { - ui::input::clear_bindings(&mut ui); + ui::input::clear_bindings(&mut config); return Ok(()); } if let Some(port) = args.port @@ -260,34 +260,35 @@ async fn main() -> std::io::Result<()> { { return Err(Error::other("Port must be between 1 and 4")); } - if args.list_controllers { - let controllers = ui::input::get_controller_names(&ui); - for (i, controller) in controllers.iter().enumerate() { - println!("Controller {i}: {controller}"); - } - return Ok(()); - } if let Some(profile) = args.configure_input_profile { ui::input::configure_input_profile( - &mut ui, + &mut config, profile, args.use_dinput, args.deadzone.unwrap_or(ui::input::DEADZONE_DEFAULT), ); return Ok(()); } - if let Some(assign_controller) = args.assign_controller { - let Some(port) = args.port else { - return Err(Error::other("Must specify port number")); - }; - ui::input::assign_controller(&mut ui, assign_controller, port); - } - if let Some(profile) = args.bind_input_profile { - let Some(port) = args.port else { - return Err(Error::other("Must specify port number")); - }; - ui::input::bind_input_profile(&mut ui, profile, port); + if args.list_controllers { + let controllers = ui::input::get_controller_names(); + for (i, controller) in controllers.iter().enumerate() { + println!("Controller {i}: {controller}"); + } + } else { + if let Some(assign_controller) = args.assign_controller { + let Some(port) = args.port else { + return Err(Error::other("Must specify port number")); + }; + ui::input::assign_controller(&mut config, assign_controller - 1, port); + } + if let Some(profile) = args.bind_input_profile { + let Some(port) = args.port else { + return Err(Error::other("Must specify port number")); + }; + ui::input::bind_input_profile(&mut config, profile, port); + } } + unsafe { sdl3_sys::init::SDL_Quit() }; } else { #[cfg(feature = "gui")] { diff --git a/src/ui.rs b/src/ui.rs index cf6a34c..d4dd832 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -38,7 +38,6 @@ pub struct Audio { } pub struct Input { - pub joysticks: Vec, pub keyboard_state: *const bool, pub controllers: [input::Controllers; 4], } @@ -77,7 +76,6 @@ pub struct Ui { pub config: config::Config, pub game_id: String, pub game_hash: String, - pub with_sdl: bool, pub audio: Audio, pub input: Input, pub storage: Storage, @@ -85,17 +83,6 @@ pub struct Ui { pub usb: Usb, } -impl Drop for Ui { - fn drop(&mut self) { - if self.with_sdl { - unsafe { - sdl3_ttf_sys::ttf::TTF_Quit(); - sdl3_sys::init::SDL_Quit(); - } - } - } -} - pub fn sdl_init(flag: sdl3_sys::init::SDL_InitFlags) { unsafe { if sdl3_sys::init::SDL_WasInit(flag) == 0 && !sdl3_sys::init::SDL_InitSubSystem(flag) { @@ -141,7 +128,7 @@ pub fn get_dirs() -> Dirs { } impl Ui { - fn construct_ui(joysticks: Vec, with_sdl: bool) -> Ui { + pub fn new() -> Ui { let dirs = get_dirs(); let (fps_tx, fps_rx) = tokio::sync::mpsc::channel(1000); @@ -179,7 +166,6 @@ impl Ui { }, ], keyboard_state: std::ptr::null_mut(), - joysticks, }, storage: Storage { save_state_slot: 0, @@ -241,26 +227,6 @@ impl Ui { cart_rx: None, }, dirs, - with_sdl, } } - - pub fn default() -> Ui { - Self::construct_ui(vec![], false) - } - - pub fn new() -> Ui { - sdl_init(sdl3_sys::init::SDL_INIT_GAMEPAD); - let mut num_joysticks = 0; - let joysticks = unsafe { sdl3_sys::joystick::SDL_GetJoysticks(&mut num_joysticks) }; - if joysticks.is_null() { - panic!("Could not get joystick list"); - } - let mut joystick_vec = vec![]; - for i in 0..num_joysticks { - joystick_vec.push(unsafe { *joysticks.add(i as usize) }); - } - unsafe { sdl3_sys::stdinc::SDL_free(joysticks as *mut std::ffi::c_void) } - Self::construct_ui(joystick_vec, true) - } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index e69c403..322a2c1 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -53,18 +53,13 @@ fn check_latest_version(weak: slint::Weak) { }); } -fn run_with_path( - weak: slint::Weak, - path: std::path::PathBuf, - controller_paths: &[Option], -) { - let controller_paths = controller_paths.to_owned(); +fn run_with_path(weak: slint::Weak, path: std::path::PathBuf) { let weak2 = weak.clone(); weak.upgrade_in_event_loop(move |handle| { if handle.get_game_running() { return; } - save_settings(&handle, &controller_paths); + save_settings(&handle); run_rom( path, @@ -87,23 +82,18 @@ fn run_with_path( .unwrap(); } -fn file_dropped(app: &AppWindow, controller_paths: &[Option]) { +fn file_dropped(app: &AppWindow) { let weak = app.as_weak(); - let controller_paths = controller_paths.to_owned(); app.window() .on_winit_window_event(move |_winit_window, event| { if let slint::winit_030::winit::event::WindowEvent::DroppedFile(path) = event { - run_with_path(weak.clone(), path.to_path_buf(), &controller_paths); + run_with_path(weak.clone(), path.to_path_buf()); } slint::winit_030::EventResult::Propagate }); } -fn local_game_window( - app: &AppWindow, - config: &ui::config::Config, - controller_paths: &[Option], -) { +fn local_game_window(app: &AppWindow, config: &ui::config::Config) { let dirs = ui::get_dirs(); app.set_recent_roms(slint::ModelRc::from(std::rc::Rc::new( @@ -128,26 +118,18 @@ fn local_game_window( ))); let weak = app.as_weak(); - let owned_controller_paths = controller_paths.to_owned(); app.on_open_rom_button_clicked(move || { - let controller_paths = owned_controller_paths.clone(); weak.upgrade_in_event_loop(move |handle| { - save_settings(&handle, &controller_paths); + save_settings(&handle); open_rom(&handle) }) .unwrap(); }); let weak = app.as_weak(); - let owned_controller_paths = controller_paths.to_owned(); app.on_recent_rom_button_clicked(move |rom| { - let controller_paths = owned_controller_paths.clone(); weak.upgrade_in_event_loop(move |handle| { - run_with_path( - handle.as_weak(), - std::path::PathBuf::from(rom.to_string()), - &controller_paths, - ); + run_with_path(handle.as_weak(), std::path::PathBuf::from(rom.to_string())); }) .unwrap(); }); @@ -158,7 +140,7 @@ fn local_game_window( eprintln!("Error opening saves folder: {}", e); } }); - file_dropped(app, controller_paths); + file_dropped(app); } fn input_profiles(config: &ui::config::Config) -> Vec { @@ -195,7 +177,6 @@ fn settings_window(app: &AppWindow, config: &ui::config::Config) { fn update_input_profiles(weak: &slint::Weak, config: &ui::config::Config) { let profiles = input_profiles(config); let config_bindings = config.input.input_profile_binding.clone(); - let weak2 = weak.clone(); weak.upgrade_in_event_loop(move |handle| { let profile_bindings = slint::VecModel::default(); for (i, input_profile_binding) in handle.get_selected_profile_binding().iter().enumerate() { @@ -221,16 +202,6 @@ fn update_input_profiles(weak: &slint::Weak, config: &ui::config::Con handle .set_selected_profile_binding(slint::ModelRc::from(std::rc::Rc::new(profile_bindings))); - - // this is a workaround to make the input profile combobox update - handle.set_blank_profiles(true); - slint::Timer::single_shot(std::time::Duration::from_millis(200), move || { - weak2 - .upgrade_in_event_loop(move |handle| { - handle.set_blank_profiles(false); - }) - .unwrap(); - }); }) .unwrap(); } @@ -247,12 +218,7 @@ fn clear_gb_paths(weak: &slint::Weak, player: i32) { .unwrap(); } -fn controller_window( - app: &AppWindow, - config: &ui::config::Config, - controller_names: &[String], - controller_paths: &[Option], -) { +fn controller_window(app: &AppWindow, config: &ui::config::Config) { app.set_emulate_vru(config.input.emulate_vru); app.set_controller_enabled(slint::ModelRc::from(std::rc::Rc::new( @@ -287,28 +253,66 @@ fn controller_window( update_input_profiles(&app.as_weak(), config); - app.set_controller_names(slint::ModelRc::from(std::rc::Rc::new( - slint::VecModel::from( - controller_names - .iter() - .map(|x| x.into()) - .collect::>(), - ), + app.set_controller_changed(slint::ModelRc::from(std::rc::Rc::new( + slint::VecModel::from(vec![false, false, false, false]), ))); - let controller_changed = slint::VecModel::default(); - let selected_controllers = slint::VecModel::default(); - for selected in config.input.controller_assignment.iter() { - let selected_index = controller_paths - .iter() - .position(|path| selected == path) - .unwrap_or(0) as i32; - selected_controllers.push(selected_index); - controller_changed.push(false); - } - app.set_selected_controller(slint::ModelRc::from(std::rc::Rc::new(selected_controllers))); + let config_controller_assignment = config.input.controller_assignment.clone(); + let weak_app = app.as_weak(); + app.on_controller_window_created(move || { + let controller_assignment = config_controller_assignment.clone(); + weak_app + .upgrade_in_event_loop(move |handle| { + let mut current_selected_paths = vec![None; 4]; + for (i, selected_controller) in handle.get_selected_controller().iter().enumerate() + { + current_selected_paths[i] = handle + .get_controller_paths() + .row_data(selected_controller as usize); + } - app.set_controller_changed(slint::ModelRc::from(std::rc::Rc::new(controller_changed))); + let controller_names = ui::input::get_controller_names(); + handle.set_controller_names(slint::ModelRc::from(std::rc::Rc::new( + slint::VecModel::from( + controller_names + .iter() + .map(|x| x.into()) + .collect::>(), + ), + ))); + + let controller_paths = ui::input::get_controller_paths(); + handle.set_controller_paths(slint::ModelRc::from(std::rc::Rc::new( + slint::VecModel::from( + controller_paths + .iter() + .map(|x| x.into()) + .collect::>(), + ), + ))); + + let selected_controllers = slint::VecModel::default(); + for i in 0..4 { + let assigned_path = + if let Some(current_selected_path) = ¤t_selected_paths[i] { + current_selected_path.to_string() + } else if let Some(config_assigned_path) = &controller_assignment[i] { + config_assigned_path.to_string() + } else { + String::new() + }; + let selected_index = controller_paths + .iter() + .position(|controller_path| assigned_path == *controller_path) + .unwrap_or(0) as i32; + selected_controllers.push(selected_index); + } + handle.set_selected_controller(slint::ModelRc::from(std::rc::Rc::new( + selected_controllers, + ))); + }) + .unwrap(); + }); let weak_app = app.as_weak(); app.on_input_profile_button_clicked(move || { @@ -411,7 +415,7 @@ fn controller_window( }); } -pub fn save_settings(app: &AppWindow, controller_paths: &[Option]) { +pub fn save_settings(app: &AppWindow) { let mut config = ui::config::Config::new(); config.video.integer_scaling = app.get_integer_scaling(); config.video.fullscreen = app.get_fullscreen(); @@ -443,8 +447,16 @@ pub fn save_settings(app: &AppWindow, controller_paths: &[Option]) { for (i, selected_controller) in app.get_selected_controller().iter().enumerate() { if app.get_controller_changed().row_data(i).unwrap_or(false) { - config.input.controller_assignment[i] = - controller_paths[selected_controller as usize].clone(); + let controller_path = app + .get_controller_paths() + .row_data(selected_controller as usize) + .unwrap() + .to_string(); + if controller_path.is_empty() { + config.input.controller_assignment[i] = None; + } else { + config.input.controller_assignment[i] = Some(controller_path); + } } } } @@ -493,21 +505,17 @@ pub fn app_window() { let app = AppWindow::new().unwrap(); about_window(&app); ui::retroachievements::ra_window(&app); - let mut controller_paths; { - let game_ui = ui::Ui::new(); - let mut controller_names = ui::input::get_controller_names(&game_ui); - controller_names.insert(0, "None".into()); - controller_paths = ui::input::get_controller_paths(&game_ui); - controller_paths.insert(0, None); - settings_window(&app, &game_ui.config); - controller_window(&app, &game_ui.config, &controller_names, &controller_paths); - local_game_window(&app, &game_ui.config, &controller_paths); + let config = ui::config::Config::new(); + settings_window(&app, &config); + controller_window(&app, &config); + local_game_window(&app, &config); } - ui::netplay::netplay_window(&app, &controller_paths); + ui::netplay::netplay_window(&app); ui::cheats::cheats_window(&app); app.run().unwrap(); - save_settings(&app, &controller_paths); + save_settings(&app); + unsafe { sdl3_sys::init::SDL_Quit() }; } pub fn run_rom( diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 04cd7bd..a6ab7af 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -41,6 +41,7 @@ export component AppWindow inherits Window { callback ra_games_clicked; callback ra_show_profile_clicked; callback ra_toggled(bool,bool,bool,bool); + callback controller_window_created; in property version <=> AboutData.version; in property has_update <=> AboutData.has_update; in-out property ra_username <=> RAData.ra_username; @@ -72,10 +73,10 @@ export component AppWindow inherits Window { in-out property selected_profile_binding <=> ControllerData.selected_profile_binding; in-out property input_profiles <=> ControllerData.input_profiles; in-out property controller_names <=> ControllerData.controller_names; + in-out property controller_paths <=> ControllerData.controller_paths; in-out property selected_controller <=> ControllerData.selected_controller; in-out property game_running <=> State.game_running; in-out property recent_roms <=> State.recent_roms; - in-out property blank_profiles <=> ControllerData.blank_profiles; in-out property cheat_game_name <=> CheatsData.cheat_game_name; in-out property cheat_game_crc <=> CheatsData.cheat_game_crc; in-out property cheats <=> CheatsData.cheats; @@ -119,6 +120,9 @@ export component AppWindow inherits Window { transferpak_toggled(player,enabled) => { transferpak_toggled(player,enabled); } + controller_window_created => { + controller_window_created(); + } } if(side-bar.current-item == 2): Netplay { create_session_button_clicked => { diff --git a/src/ui/gui/controller_page.slint b/src/ui/gui/controller_page.slint index 156e10a..9a0e1a6 100644 --- a/src/ui/gui/controller_page.slint +++ b/src/ui/gui/controller_page.slint @@ -14,16 +14,21 @@ export global ControllerData { in-out property <[int]> selected_profile_binding: [-1, -1, -1, -1]; in-out property <[string]> input_profiles; in-out property <[string]> controller_names; + in-out property <[string]> controller_paths; in-out property <[int]> selected_controller; in-out property <[bool]> controller_changed; - in-out property blank_profiles; } export component ControllerConfig inherits Page { callback input_profile_button_clicked; callback transferpak_toggled(int,bool); + callback controller_window_created; title: @tr("Controller Configuration"); + init => { + controller_window_created(); + } + VerticalBox { alignment: start; HorizontalBox { @@ -92,7 +97,7 @@ export component ControllerConfig inherits Page { } } - if !ControllerData.blank_profiles: GroupBox { + GroupBox { title: @tr("Profile"); horizontal-stretch: 0.25; VerticalLayout { diff --git a/src/ui/input.rs b/src/ui/input.rs index 76afe03..23bd1fc 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -341,10 +341,10 @@ fn hotkey_pressed( pressed } -pub fn get_controller_names(game_ui: &ui::Ui) -> Vec { +pub fn get_controller_names() -> Vec { let mut controllers: Vec = vec![]; - for joystick in game_ui.input.joysticks.iter() { + for joystick in get_joysticks().iter() { let name = unsafe { sdl3_sys::joystick::SDL_GetJoystickNameForID(*joystick) }; controllers.push(if name.is_null() { "Unknown controller".to_string() @@ -352,22 +352,24 @@ pub fn get_controller_names(game_ui: &ui::Ui) -> Vec { unsafe { std::ffi::CStr::from_ptr(name).to_str().unwrap() }.to_string() }); } + controllers.insert(0, "None".into()); controllers } #[cfg(feature = "gui")] -pub fn get_controller_paths(game_ui: &ui::Ui) -> Vec> { - let mut controller_paths: Vec> = vec![]; +pub fn get_controller_paths() -> Vec { + let mut controller_paths: Vec = vec![]; - for joystick in game_ui.input.joysticks.iter() { + for joystick in get_joysticks().iter() { let path = unsafe { sdl3_sys::joystick::SDL_GetJoystickPathForID(*joystick) }; controller_paths.push(if path.is_null() { - None + String::new() } else { - Some(unsafe { std::ffi::CStr::from_ptr(path).to_str().unwrap() }.to_string()) + unsafe { std::ffi::CStr::from_ptr(path).to_str().unwrap() }.to_string() }); } + controller_paths.insert(0, String::new()); controller_paths } @@ -553,13 +555,15 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> InputData { } } -pub fn assign_controller(ui: &mut ui::Ui, controller: i32, port: usize) { - if controller < ui.input.joysticks.len() as i32 { - let path = unsafe { - sdl3_sys::joystick::SDL_GetJoystickPathForID(ui.input.joysticks[controller as usize]) - }; +pub fn assign_controller(config: &mut ui::config::Config, controller: i32, port: usize) { + let joysticks = get_joysticks(); + if controller < 0 { + config.input.controller_assignment[port - 1] = None; + } else if controller < joysticks.len() as i32 { + let path = + unsafe { sdl3_sys::joystick::SDL_GetJoystickPathForID(joysticks[controller as usize]) }; if !path.is_null() { - ui.config.input.controller_assignment[port - 1] = + config.input.controller_assignment[port - 1] = Some(unsafe { std::ffi::CStr::from_ptr(path).to_str().unwrap().to_string() }); } else { eprintln!("Invalid controller path for controller {controller}"); @@ -569,18 +573,18 @@ pub fn assign_controller(ui: &mut ui::Ui, controller: i32, port: usize) { } } -pub fn bind_input_profile(ui: &mut ui::Ui, profile: String, port: usize) { - if ui.config.input.input_profiles.contains_key(&profile) { - ui.config.input.input_profile_binding[port - 1] = profile; +pub fn bind_input_profile(config: &mut ui::config::Config, profile: String, port: usize) { + if config.input.input_profiles.contains_key(&profile) { + config.input.input_profile_binding[port - 1] = profile; } else { eprintln!("Invalid profile name") } } -pub fn clear_bindings(ui: &mut ui::Ui) { +pub fn clear_bindings(config: &mut ui::config::Config) { for i in 0..4 { - ui.config.input.controller_assignment[i] = None; - ui.config.input.input_profile_binding[i] = "default".to_string(); + config.input.controller_assignment[i] = None; + config.input.input_profile_binding[i] = "default".to_string(); } } @@ -604,10 +608,17 @@ fn close_input_profile_window( sdl3_ttf_sys::ttf::TTF_DestroyRendererTextEngine(text_engine); sdl3_sys::render::SDL_DestroyRenderer(renderer); sdl3_sys::video::SDL_DestroyWindow(window); + sdl3_ttf_sys::ttf::TTF_Quit(); + sdl3_sys::init::SDL_Quit(); } } -pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, deadzone: i32) { +pub fn configure_input_profile( + config: &mut ui::config::Config, + profile: String, + dinput: bool, + deadzone: i32, +) { ui::sdl_init(sdl3_sys::init::SDL_INIT_VIDEO); ui::ttf_init(); @@ -622,7 +633,7 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, d let mut open_joysticks: Vec<*mut sdl3_sys::joystick::SDL_Joystick> = Vec::new(); let mut open_controllers: Vec<*mut sdl3_sys::gamepad::SDL_Gamepad> = Vec::new(); - for joystick in ui.input.joysticks.iter() { + for joystick in get_joysticks().iter() { if !dinput { let controller = unsafe { sdl3_sys::gamepad::SDL_OpenGamepad(*joystick) }; if !controller.is_null() { @@ -847,7 +858,7 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool, d dinput, deadzone, }; - ui.config.input.input_profiles.insert(profile, new_profile); + config.input.input_profiles.insert(profile, new_profile); } pub fn get_default_profile() -> ui::config::InputProfile { @@ -1050,6 +1061,22 @@ pub fn get_default_profile() -> ui::config::InputProfile { } } +fn get_joysticks() -> Vec { + ui::sdl_init(sdl3_sys::init::SDL_INIT_GAMEPAD); + unsafe { sdl3_sys::events::SDL_PumpEvents() }; + let mut num_joysticks = 0; + let sdl_joysticks = unsafe { sdl3_sys::joystick::SDL_GetJoysticks(&mut num_joysticks) }; + if !sdl_joysticks.is_null() { + let parts = + unsafe { std::slice::from_raw_parts(sdl_joysticks, num_joysticks as usize) }.to_vec(); + unsafe { sdl3_sys::stdinc::SDL_free(sdl_joysticks as *mut std::ffi::c_void) }; + parts + } else { + eprintln!("Could not get joysticks"); + vec![] + } +} + pub fn init(ui: &mut ui::Ui) { ui.input.keyboard_state = unsafe { sdl3_sys::keyboard::SDL_GetKeyboardState(std::ptr::null_mut()) }; @@ -1063,7 +1090,7 @@ pub fn init(ui: &mut ui::Ui) { { let mut joystick_id = sdl3_sys::everything::SDL_JoystickID(0); - for joystick in ui.input.joysticks.iter() { + for joystick in get_joysticks().iter() { let path = unsafe { sdl3_sys::joystick::SDL_GetJoystickPathForID(*joystick) }; if !path.is_null() && unsafe { std::ffi::CStr::from_ptr(path).to_str().unwrap() } diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 006e6ab..889c7a7 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -1208,17 +1208,15 @@ pub fn setup_join_window( join_window.show().unwrap(); } -pub fn netplay_window(app: &AppWindow, controller_paths: &[Option]) { +pub fn netplay_window(app: &AppWindow) { let weak_create = app.as_weak(); let weak_app = app.as_weak(); - let controller_paths_create = controller_paths.to_owned(); app.on_create_session_button_clicked(move || { - let controller_paths = controller_paths_create.clone(); let weak_app = weak_app.clone(); weak_create .upgrade_in_event_loop(move |handle| { let create_window = NetplayCreate::new().unwrap(); - save_settings(&handle, &controller_paths); + save_settings(&handle); setup_create_window( &create_window, ui::GameSettings { @@ -1242,14 +1240,12 @@ pub fn netplay_window(app: &AppWindow, controller_paths: &[Option]) { let weak_join = app.as_weak(); let weak_app = app.as_weak(); - let controller_paths_join = controller_paths.to_owned(); app.on_join_session_button_clicked(move || { - let controller_paths = controller_paths_join.clone(); let weak_app = weak_app.clone(); weak_join .upgrade_in_event_loop(move |handle| { let join_window = NetplayJoin::new().unwrap(); - save_settings(&handle, &controller_paths); + save_settings(&handle); setup_join_window( &join_window, handle.get_rom_dir(), diff --git a/src/ui/video.rs b/src/ui/video.rs index 2bd5386..b8f0eb3 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -150,6 +150,8 @@ pub fn close(ui: &ui::Ui) { unsafe { rdp_close(); sdl3_sys::video::SDL_DestroyWindow(ui.video.window); + sdl3_ttf_sys::ttf::TTF_Quit(); + sdl3_sys::init::SDL_Quit(); } } From 323e8cf1f0ff0f62523d4e9319ddb6574d60b158 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 6 May 2026 10:59:05 +0200 Subject: [PATCH 0842/1117] move sdl quit calls (#842) * move sdl quit calls * more --- src/main.rs | 4 +++- src/ui.rs | 7 +++++++ src/ui/gui.rs | 1 - src/ui/input.rs | 2 -- src/ui/video.rs | 2 -- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main.rs b/src/main.rs index e0b558e..c488057 100644 --- a/src/main.rs +++ b/src/main.rs @@ -267,6 +267,8 @@ async fn main() -> std::io::Result<()> { args.use_dinput, args.deadzone.unwrap_or(ui::input::DEADZONE_DEFAULT), ); + + ui::sdl_close(); return Ok(()); } if args.list_controllers { @@ -288,7 +290,6 @@ async fn main() -> std::io::Result<()> { ui::input::bind_input_profile(&mut config, profile, port); } } - unsafe { sdl3_sys::init::SDL_Quit() }; } else { #[cfg(feature = "gui")] { @@ -298,5 +299,6 @@ async fn main() -> std::io::Result<()> { } } + ui::sdl_close(); Ok(()) } diff --git a/src/ui.rs b/src/ui.rs index d4dd832..6df498e 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -108,6 +108,13 @@ pub fn ttf_init() { } } +pub fn sdl_close() { + unsafe { + sdl3_ttf_sys::ttf::TTF_Quit(); + sdl3_sys::init::SDL_Quit(); + } +} + pub fn get_dirs() -> Dirs { let exe_path = std::env::current_exe().unwrap(); let portable_dir = exe_path.parent(); diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 322a2c1..f45e57b 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -515,7 +515,6 @@ pub fn app_window() { ui::cheats::cheats_window(&app); app.run().unwrap(); save_settings(&app); - unsafe { sdl3_sys::init::SDL_Quit() }; } pub fn run_rom( diff --git a/src/ui/input.rs b/src/ui/input.rs index 23bd1fc..4bcad52 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -608,8 +608,6 @@ fn close_input_profile_window( sdl3_ttf_sys::ttf::TTF_DestroyRendererTextEngine(text_engine); sdl3_sys::render::SDL_DestroyRenderer(renderer); sdl3_sys::video::SDL_DestroyWindow(window); - sdl3_ttf_sys::ttf::TTF_Quit(); - sdl3_sys::init::SDL_Quit(); } } diff --git a/src/ui/video.rs b/src/ui/video.rs index b8f0eb3..2bd5386 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -150,8 +150,6 @@ pub fn close(ui: &ui::Ui) { unsafe { rdp_close(); sdl3_sys::video::SDL_DestroyWindow(ui.video.window); - sdl3_ttf_sys::ttf::TTF_Quit(); - sdl3_sys::init::SDL_Quit(); } } From 172867527b3cf3a8f554e8ff53c6e2e0df567cd5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 6 May 2026 11:52:13 +0200 Subject: [PATCH 0843/1117] add option for SSAA (#843) --- parallel-rdp/interface.cpp | 18 ++++++++++++++++++ parallel-rdp/interface.hpp | 1 + src/ui/config.rs | 2 ++ src/ui/gui.rs | 2 ++ src/ui/gui/appwindow.slint | 1 + src/ui/gui/settings_page.slint | 12 ++++++++++++ src/ui/video.rs | 3 ++- 7 files changed, 38 insertions(+), 1 deletion(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index e884a55..61ee412 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -298,6 +298,8 @@ void rdp_new_processor(GFX_INFO _gfx_info) { } else if (gfx_info.upscale == 8) { flags |= RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT; flags |= RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_8X_BIT; + } else { + gfx_info.upscale = 1; } processor = new RDP::CommandProcessor(wsi->get_device(), gfx_info.RDRAM, 0, @@ -519,6 +521,22 @@ static void render_frame(Vulkan::Device &device) { options.persist_frame_on_invalid_input = true; options.blend_previous_frame = true; options.upscale_deinterlacing = false; + if (gfx_info.ssaa) { + switch (gfx_info.upscale) { + case 2: + options.downscale_steps = 1; + break; + case 4: + options.downscale_steps = 2; + break; + case 8: + options.downscale_steps = 3; + break; + default: + options.downscale_steps = 0; + break; + } + } if (crop_letterbox && gfx_info.widescreen) { options.crop_rect.enable = true; diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index f29563c..d19e010 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -21,6 +21,7 @@ typedef struct { bool vsync; bool integer_scaling; uint32_t upscale; + bool ssaa; bool crt; } GFX_INFO; diff --git a/src/ui/config.rs b/src/ui/config.rs index 10c086a..47c74f9 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -47,6 +47,7 @@ pub struct Input { #[derive(serde::Serialize, serde::Deserialize)] pub struct Video { pub upscale: u32, + pub ssaa: bool, pub integer_scaling: bool, pub fullscreen: bool, pub widescreen: bool, @@ -156,6 +157,7 @@ impl Config { }, video: Video { upscale: 1, + ssaa: false, integer_scaling: false, fullscreen: false, widescreen: false, diff --git a/src/ui/gui.rs b/src/ui/gui.rs index f45e57b..49902f4 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -153,6 +153,7 @@ fn input_profiles(config: &ui::config::Config) -> Vec { fn settings_window(app: &AppWindow, config: &ui::config::Config) { app.set_integer_scaling(config.video.integer_scaling); + app.set_ssaa(config.video.ssaa); app.set_fullscreen(config.video.fullscreen); app.set_widescreen(config.video.widescreen); app.set_vsync(config.video.vsync); @@ -418,6 +419,7 @@ fn controller_window(app: &AppWindow, config: &ui::config::Config) { pub fn save_settings(app: &AppWindow) { let mut config = ui::config::Config::new(); config.video.integer_scaling = app.get_integer_scaling(); + config.video.ssaa = app.get_ssaa(); config.video.fullscreen = app.get_fullscreen(); config.video.widescreen = app.get_widescreen(); config.video.vsync = app.get_vsync(); diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index a6ab7af..0d3b16d 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -55,6 +55,7 @@ export component AppWindow inherits Window { in-out property ra_leaderboard <=> RAData.leaderboard; in-out property ra_softcore_only <=> RAData.ra_softcore_only; in-out property integer_scaling <=> SettingsData.integer_scaling; + in-out property ssaa <=> SettingsData.ssaa; in-out property fullscreen <=> SettingsData.fullscreen; in-out property widescreen <=> SettingsData.widescreen; in-out property vsync <=> SettingsData.vsync; diff --git a/src/ui/gui/settings_page.slint b/src/ui/gui/settings_page.slint index 32c3277..6b2cd6c 100644 --- a/src/ui/gui/settings_page.slint +++ b/src/ui/gui/settings_page.slint @@ -6,6 +6,7 @@ import { Page } from "page.slint"; export global SettingsData { in-out property integer_scaling; + in-out property ssaa; in-out property fullscreen; in-out property widescreen; in-out property vsync; @@ -38,6 +39,17 @@ export component Settings inherits Page { } } + HorizontalBox { + alignment: start; + Switch { + text: @tr("SSAA downscaling"); + checked: SettingsData.ssaa; + toggled => { + SettingsData.ssaa = self.checked; + } + } + } + HorizontalBox { alignment: start; Switch { diff --git a/src/ui/video.rs b/src/ui/video.rs index 2bd5386..62837eb 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -29,6 +29,7 @@ fn build_gfx_info(device: &mut device::Device) -> GFX_INFO { }, integer_scaling: device.ui.config.video.integer_scaling, upscale: device.ui.config.video.upscale, + ssaa: device.ui.config.video.ssaa, crt: device.ui.config.video.crt, } } @@ -49,7 +50,7 @@ pub fn init(device: &mut device::Device) { let window_width; let window_height; - let scale = if device.ui.config.video.upscale > 1 { + let scale = if device.ui.config.video.upscale > 1 && !device.ui.config.video.ssaa { device.ui.config.video.upscale as i32 } else { 2 From 7015d44da7ec645a8d9a7b451f07d3bb123bc974 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 6 May 2026 13:05:48 +0200 Subject: [PATCH 0844/1117] fix ghost image with SSAA (#844) --- parallel-rdp/interface.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 61ee412..78dc89d 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -519,8 +519,8 @@ static uint32_t pop_message_callback(void *userdata, SDL_TimerID timerID, static void render_frame(Vulkan::Device &device) { RDP::ScanoutOptions options = {}; options.persist_frame_on_invalid_input = true; - options.blend_previous_frame = true; - options.upscale_deinterlacing = false; + options.blend_previous_frame = !gfx_info.ssaa; + options.upscale_deinterlacing = gfx_info.ssaa; if (gfx_info.ssaa) { switch (gfx_info.upscale) { case 2: From 6d4d5468f932a53fe4fa9dd9106102044d472fa5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 6 May 2026 13:17:28 +0200 Subject: [PATCH 0845/1117] save rom dir (#845) --- src/ui/gui.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 49902f4..dfb7665 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -418,6 +418,7 @@ fn controller_window(app: &AppWindow, config: &ui::config::Config) { pub fn save_settings(app: &AppWindow) { let mut config = ui::config::Config::new(); + config.rom_dir = app.get_rom_dir().to_string().into(); config.video.integer_scaling = app.get_integer_scaling(); config.video.ssaa = app.get_ssaa(); config.video.fullscreen = app.get_fullscreen(); From a69a74bf379ea87b62c48987ca824fcea2aa05cf Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 6 May 2026 13:57:04 +0200 Subject: [PATCH 0846/1117] cleanup some if statements (#846) --- src/netplay.rs | 2 +- src/ui/cheats.rs | 5 +---- src/ui/gui.rs | 8 ++------ src/ui/netplay.rs | 7 ++----- src/ui/storage.rs | 2 +- 5 files changed, 7 insertions(+), 17 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index 95e7c9a..24c53d2 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -182,7 +182,7 @@ fn request_input(netplay: &Netplay, channel: usize) { fn process_incoming(netplay: &mut Netplay) { let mut buf: [u8; 1024] = [0; 1024]; - while let Ok(_incoming) = netplay.udp_socket.recv(&mut buf) { + while netplay.udp_socket.recv(&mut buf).is_ok() { match buf[0] { UDP_RECEIVE_KEY_INFO | UDP_RECEIVE_KEY_INFO_GRATUITOUS => { let player = buf[1] as usize; diff --git a/src/ui/cheats.rs b/src/ui/cheats.rs index fa47cbc..dcafb41 100644 --- a/src/ui/cheats.rs +++ b/src/ui/cheats.rs @@ -8,10 +8,7 @@ use slint::ComponentHandle; pub fn cheats_window(app: &AppWindow) { let weak = app.as_weak(); app.on_cheats_select_rom_clicked(move |rom_dir| { - let select_rom = if !rom_dir.is_empty() - && let Ok(exists) = std::fs::exists(&rom_dir) - && exists - { + let select_rom = if !rom_dir.is_empty() && std::fs::exists(&rom_dir).unwrap_or(false) { rfd::AsyncFileDialog::new().set_directory(rom_dir) } else { rfd::AsyncFileDialog::new() diff --git a/src/ui/gui.rs b/src/ui/gui.rs index dfb7665..ad1a31f 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -607,8 +607,7 @@ pub fn run_rom( for rom in handle.get_recent_roms().iter() { if rom.0 != file_path.to_str().unwrap() && recent_roms.row_count() < 5 - && let Ok(exists) = std::fs::exists(&rom.0) - && exists + && std::fs::exists(&rom.0).unwrap_or(false) { recent_roms.push(rom); } @@ -623,10 +622,7 @@ pub fn run_rom( fn open_rom(app: &AppWindow) { let rom_dir = app.get_rom_dir(); - let select_rom = if !rom_dir.is_empty() - && let Ok(exists) = std::fs::exists(&rom_dir) - && exists - { + let select_rom = if !rom_dir.is_empty() && std::fs::exists(&rom_dir).unwrap_or(false) { rfd::AsyncFileDialog::new().set_directory(rom_dir) } else { rfd::AsyncFileDialog::new() diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 889c7a7..8f5d6d1 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -118,7 +118,7 @@ fn populate_server_names(weak: slin if let Ok(broadcast_sock) = tokio::net::UdpSocket::bind((std::net::Ipv4Addr::UNSPECIFIED, 0)).await - && let Ok(_) = broadcast_sock.set_broadcast(true) + && broadcast_sock.set_broadcast(true).is_ok() { let data: [u8; 1] = [1]; if let Err(e) = broadcast_sock @@ -177,10 +177,7 @@ fn select_rom( weak: slint::Weak, rom_dir: slint::SharedString, ) { - let select_rom = if !rom_dir.is_empty() - && let Ok(exists) = std::fs::exists(&rom_dir) - && exists - { + let select_rom = if !rom_dir.is_empty() && std::fs::exists(&rom_dir).unwrap_or(false) { rfd::AsyncFileDialog::new().set_directory(rom_dir) } else { rfd::AsyncFileDialog::new() diff --git a/src/ui/storage.rs b/src/ui/storage.rs index f2e832e..cf87d56 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -343,7 +343,7 @@ pub fn decompress_file(input: &[u8], name: &str) -> Result, zip::result: { if let Ok(mut reader) = zip::ZipArchive::new(std::io::Cursor::new(input)) && let Ok(mut file) = reader.by_name(name) - && let Ok(_) = file.read_to_end(&mut decompressed_file) + && file.read_to_end(&mut decompressed_file).is_ok() { return Ok(decompressed_file); } From 61532f7b459aed751da4489d1f050ab909e1d0c5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 6 May 2026 22:09:21 +0200 Subject: [PATCH 0847/1117] move sdl init (#848) * move sdl init * more * more * more * more --- src/main.rs | 56 +++++++++++++++++++++++++++---------------------- src/ui/gui.rs | 2 ++ src/ui/input.rs | 4 +++- 3 files changed, 36 insertions(+), 26 deletions(-) diff --git a/src/main.rs b/src/main.rs index c488057..03294af 100644 --- a/src/main.rs +++ b/src/main.rs @@ -251,15 +251,6 @@ async fn main() -> std::io::Result<()> { } else if std::env::args().count() > 1 { let mut config = ui::config::Config::new(); - if args.clear_input_bindings { - ui::input::clear_bindings(&mut config); - return Ok(()); - } - if let Some(port) = args.port - && !(1..=4).contains(&port) - { - return Err(Error::other("Port must be between 1 and 4")); - } if let Some(profile) = args.configure_input_profile { ui::input::configure_input_profile( &mut config, @@ -270,24 +261,39 @@ async fn main() -> std::io::Result<()> { ui::sdl_close(); return Ok(()); - } - if args.list_controllers { - let controllers = ui::input::get_controller_names(); - for (i, controller) in controllers.iter().enumerate() { - println!("Controller {i}: {controller}"); - } } else { - if let Some(assign_controller) = args.assign_controller { - let Some(port) = args.port else { - return Err(Error::other("Must specify port number")); - }; - ui::input::assign_controller(&mut config, assign_controller - 1, port); + if args.clear_input_bindings { + ui::input::clear_bindings(&mut config); + return Ok(()); } - if let Some(profile) = args.bind_input_profile { - let Some(port) = args.port else { - return Err(Error::other("Must specify port number")); - }; - ui::input::bind_input_profile(&mut config, profile, port); + if let Some(port) = args.port + && !(1..=4).contains(&port) + { + return Err(Error::other("Port must be between 1 and 4")); + } + + ui::sdl_init(sdl3_sys::init::SDL_INIT_GAMEPAD); + + if args.list_controllers { + let controllers = ui::input::get_controller_names(); + for (i, controller) in controllers.iter().enumerate() { + println!("Controller {i}: {controller}"); + } + } else { + if let Some(assign_controller) = args.assign_controller { + let Some(port) = args.port else { + ui::sdl_close(); + return Err(Error::other("Must specify port number")); + }; + ui::input::assign_controller(&mut config, assign_controller - 1, port); + } + if let Some(profile) = args.bind_input_profile { + let Some(port) = args.port else { + ui::sdl_close(); + return Err(Error::other("Must specify port number")); + }; + ui::input::bind_input_profile(&mut config, profile, port); + } } } } else { diff --git a/src/ui/gui.rs b/src/ui/gui.rs index ad1a31f..9ef1a96 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -220,6 +220,8 @@ fn clear_gb_paths(weak: &slint::Weak, player: i32) { } fn controller_window(app: &AppWindow, config: &ui::config::Config) { + ui::sdl_init(sdl3_sys::init::SDL_INIT_GAMEPAD); + app.set_emulate_vru(config.input.emulate_vru); app.set_controller_enabled(slint::ModelRc::from(std::rc::Rc::new( diff --git a/src/ui/input.rs b/src/ui/input.rs index 4bcad52..5d9a3f0 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -618,6 +618,7 @@ pub fn configure_input_profile( deadzone: i32, ) { ui::sdl_init(sdl3_sys::init::SDL_INIT_VIDEO); + ui::sdl_init(sdl3_sys::init::SDL_INIT_GAMEPAD); ui::ttf_init(); if profile == "default" { @@ -1060,7 +1061,6 @@ pub fn get_default_profile() -> ui::config::InputProfile { } fn get_joysticks() -> Vec { - ui::sdl_init(sdl3_sys::init::SDL_INIT_GAMEPAD); unsafe { sdl3_sys::events::SDL_PumpEvents() }; let mut num_joysticks = 0; let sdl_joysticks = unsafe { sdl3_sys::joystick::SDL_GetJoysticks(&mut num_joysticks) }; @@ -1076,6 +1076,8 @@ fn get_joysticks() -> Vec { } pub fn init(ui: &mut ui::Ui) { + ui::sdl_init(sdl3_sys::init::SDL_INIT_GAMEPAD); + ui.input.keyboard_state = unsafe { sdl3_sys::keyboard::SDL_GetKeyboardState(std::ptr::null_mut()) }; if ui.input.keyboard_state.is_null() { From f793eb06becc8a5e63a7cccc8ff7a46599ae7179 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 7 May 2026 08:49:49 +0200 Subject: [PATCH 0848/1117] bump to 1.1.20 (#849) --- Cargo.lock | 116 ++++++++++++++++++++++++----------------------------- Cargo.toml | 2 +- 2 files changed, 54 insertions(+), 64 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4785044..0eb2335 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -206,9 +206,9 @@ dependencies = [ [[package]] name = "annotate-snippets" -version = "0.12.15" +version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92570a3f9c98e7e84df84b71d0965ac99b1871fcd75a3773a3bd1bad13f64cf7" +checksum = "f211a51805bc641f3ad5b7664c77d2547af685cc33b4cd8d31964027a46f13f1" dependencies = [ "anstyle", "memchr", @@ -1357,9 +1357,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4850db49bf08e663084f7fb5c87d202ef91a3907271aff24a94eb97ff039153c" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ "block-buffer 0.12.0", "const-oid", @@ -2114,7 +2114,7 @@ dependencies = [ [[package]] name = "gopher64" -version = "1.1.19" +version = "1.1.20" dependencies = [ "bindgen", "cc", @@ -2157,9 +2157,9 @@ checksum = "b40ca9252762c466af32d0b1002e91e4e1bc5398f77455e55474deb466355ff5" [[package]] name = "h2" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" +checksum = "171fefbc92fe4a4de27e0698d6a5b392d6a0e333506bc49133760b3bcf948733" dependencies = [ "atomic-waker", "bytes", @@ -2283,7 +2283,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" dependencies = [ - "digest 0.11.2", + "digest 0.11.3", ] [[package]] @@ -2942,16 +2942,6 @@ version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" -[[package]] -name = "iri-string" -version = "0.7.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25e659a4bb38e810ebc252e53b5814ff908a8c58c2a9ce2fae1bbec24cbf4e20" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "is-docker" version = "0.2.0" @@ -3071,9 +3061,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.97" +version = "0.3.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1840c94c045fbcf8ba2812c95db44499f7c64910a912551aaaa541decebcacf" +checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" dependencies = [ "cfg-if", "futures-util", @@ -3183,7 +3173,7 @@ dependencies = [ "bitflags 2.11.1", "libc", "plain", - "redox_syscall 0.7.4", + "redox_syscall 0.7.5", ] [[package]] @@ -3273,9 +3263,9 @@ checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" [[package]] name = "lyon_algorithms" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9815fac08e6fd96733a11dce4f9d15a3f338e96a2e2311ee21e1b738efc2bc0f" +checksum = "8575c0d003ae459399623c4def180c63b77f343b1a7fee64f249b349e7699a31" dependencies = [ "lyon_path", "num-traits", @@ -3482,9 +3472,9 @@ dependencies = [ [[package]] name = "no_std_io2" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b51ed7824b6e07d354605f4abb3d9d300350701299da96642ee084f5ce631550" +checksum = "418abd1b6d34fbf6cae440dc874771b0525a604428704c76e48b29a5e67b8003" dependencies = [ "memchr", ] @@ -4099,7 +4089,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "112d82ceb8c5bf524d9af484d4e4970c9fd5a0cc15ba14ad93dccd28873b0629" dependencies = [ - "digest 0.11.2", + "digest 0.11.3", "hmac", ] @@ -4117,18 +4107,18 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" [[package]] name = "pin-project" -version = "1.1.11" +version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" +checksum = "cbf0d9e68100b3a7989b4901972f265cd542e560a3a8a724e1e20322f4d06ce9" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.11" +version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" +checksum = "a990e22f43e84855daf260dded30524ef4a9021cc7541c26540500a50b624389" dependencies = [ "proc-macro2", "quote", @@ -4306,18 +4296,18 @@ dependencies = [ [[package]] name = "profiling" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" +checksum = "3d595e54a326bc53c1c197b32d295e14b169e3cfeaa8dc82b529f947fba6bcf5" dependencies = [ "profiling-procmacros", ] [[package]] name = "profiling-procmacros" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" +checksum = "4488a4a36b9a4ba6b9334a32a39971f77c1436ec82c38707bce707699cc3bbcb" dependencies = [ "quote", "syn", @@ -4365,9 +4355,9 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quick-xml" -version = "0.39.2" +version = "0.39.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958f21e8e7ceb5a1aa7fa87fab28e7c75976e0bfe7e23ff069e0a260f894067d" +checksum = "721da970c312655cde9b4ffe0547f20a8494866a4af5ff51f18b7c633d0c870b" dependencies = [ "memchr", "serde", @@ -4615,9 +4605,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f450ad9c3b1da563fb6948a8e0fb0fb9269711c9c73d9ea1de5058c79c8d643a" +checksum = "4666a1a60d8412eab19d94f6d13dcc9cea0a5ef4fdf6a5db306537413c661b1b" dependencies = [ "bitflags 2.11.1", ] @@ -5197,7 +5187,7 @@ checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214" dependencies = [ "cfg-if", "cpufeatures 0.3.0", - "digest 0.11.2", + "digest 0.11.3", ] [[package]] @@ -5219,7 +5209,7 @@ checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" dependencies = [ "cfg-if", "cpufeatures 0.3.0", - "digest 0.11.2", + "digest 0.11.3", ] [[package]] @@ -5280,9 +5270,9 @@ dependencies = [ [[package]] name = "siphasher" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" [[package]] name = "skia-bindings" @@ -5908,9 +5898,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.52.1" +version = "1.52.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6" +checksum = "110a78583f19d5cdb2c5ccf321d1290344e71313c6c37d43520d386027d18386" dependencies = [ "bytes", "libc", @@ -6061,20 +6051,20 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.8" +version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" +checksum = "68d6fdd9f81c2819c9a8b0e0cd91660e7746a8e6ea2ba7c6b2b057985f6bcb51" dependencies = [ "bitflags 2.11.1", "bytes", "futures-util", "http", "http-body", - "iri-string", "pin-project-lite", "tower", "tower-layer", "tower-service", + "url", ] [[package]] @@ -6429,9 +6419,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.120" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df52b6d9b87e0c74c9edfa1eb2d9bf85e5d63515474513aa50fa181b3c4f5db1" +checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" dependencies = [ "cfg-if", "once_cell", @@ -6442,9 +6432,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.70" +version = "0.4.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af934872acec734c2d80e6617bbb5ff4f12b052dd8e6332b0817bce889516084" +checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" dependencies = [ "js-sys", "wasm-bindgen", @@ -6452,9 +6442,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.120" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b1041f495fb322e64aca85f5756b2172e35cd459376e67f2a6c9dffcedb103" +checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6462,9 +6452,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.120" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dcd0ff20416988a18ac686d4d4d0f6aae9ebf08a389ff5d29012b05af2a1b41" +checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" dependencies = [ "bumpalo", "proc-macro2", @@ -6475,9 +6465,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.120" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49757b3c82ebf16c57d69365a142940b384176c24df52a087fb748e2085359ea" +checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" dependencies = [ "unicode-ident", ] @@ -6653,9 +6643,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.97" +version = "0.3.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eadbac71025cd7b0834f20d1fe8472e8495821b4e9801eb0a60bd1f19827602" +checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" dependencies = [ "js-sys", "wasm-bindgen", @@ -7778,9 +7768,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.10.1" +version = "5.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4db0ecb8987cf5e92653c57c098f7f0e39a03112edb796f4fe089fb7eaa14ff" +checksum = "1c1567a6ec68df868cbbfde844cfc6d81649fe5109a62b116b19fabd53e618ee" dependencies = [ "endi", "enumflags2", @@ -7792,9 +7782,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.10.1" +version = "5.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b949b639ab1b4bed763aa7481ba0e368af68d8b55532f8ed4bec86a59f2ca98" +checksum = "c7d5b780599bbde114e39d9a0799577fad1ced5105d38515745f7b3099d8ceda" dependencies = [ "proc-macro-crate", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index 7148454..9bb2e2a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "1.1.19" +version = "1.1.20" edition = "2024" rust-version = "1.95.0" From 13be114823364068ace5225e2060314bc68301fb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 8 May 2026 09:36:16 +0200 Subject: [PATCH 0849/1117] look for bin in compressed files (#851) * look for bin in compressed files * more * more * more * more * more * more * more --- src/device.rs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/device.rs b/src/device.rs index 36c21c5..ecf8d7c 100644 --- a/src/device.rs +++ b/src/device.rs @@ -10,6 +10,9 @@ include!(concat!(env!("OUT_DIR"), "/simd_bindings.rs")); #[cfg(target_arch = "x86_64")] use std::arch::x86_64::*; +const N64_EXTENSIONS_UNCOMPRESSED: [&str; 8] = + ["n64", "v64", "z64", "bin", "N64", "V64", "Z64", "BIN"]; + use rand::{Rng, SeedableRng}; use crate::{cheats, netplay, retroachievements, ui}; @@ -151,13 +154,9 @@ pub fn get_rom_contents(file_path: &std::path::Path) -> Option> { let mut archive = zip::ZipArchive::new(zip_file).unwrap(); for i in 0..archive.len() { let mut file = archive.by_index(i).unwrap(); - let extension = file - .enclosed_name() - .unwrap() - .extension() - .unwrap() - .to_ascii_lowercase(); - if extension == "z64" || extension == "n64" || extension == "v64" { + if let Some(extension) = file.enclosed_name().unwrap().extension() + && N64_EXTENSIONS_UNCOMPRESSED.contains(&extension.to_str().unwrap()) + { file.read_to_end(&mut contents) .expect("could not read zip file"); break; @@ -175,9 +174,9 @@ pub fn get_rom_contents(file_path: &std::path::Path) -> Option> { archive .for_each_entries( &mut |entry: &sevenz_rust2::ArchiveEntry, reader: &mut dyn std::io::Read| { - let name = entry.name().to_ascii_lowercase(); if !found - && (name.ends_with("z64") || name.ends_with("n64") || name.ends_with("v64")) + && let Some(extension) = std::path::PathBuf::from(entry.name()).extension() + && N64_EXTENSIONS_UNCOMPRESSED.contains(&extension.to_str().unwrap()) { reader .read_to_end(&mut contents) From c44ab9602c209ff6584c83383eed1817808aca53 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 8 May 2026 16:03:13 +0200 Subject: [PATCH 0850/1117] GBC RTC support (#853) * GBC RTC support * more * more * more * more * more * more --- src/device.rs | 30 +++--- src/device/ai.rs | 44 ++++----- src/device/cart/rom.rs | 4 +- src/device/cart/sc64.rs | 101 +++++++++---------- src/device/cart/sram.rs | 2 +- src/device/controller/gbcart.rs | 131 +++++++++++++++---------- src/device/controller/transferpak.rs | 4 +- src/device/cop0.rs | 135 +++++++++++++------------- src/device/cop1.rs | 88 +++++------------ src/device/cop2.rs | 28 ++---- src/device/cpu.rs | 3 +- src/device/cpu_instructions.rs | 32 +++--- src/device/events.rs | 2 +- src/device/exceptions.rs | 86 +++++++--------- src/device/mi.rs | 70 +++++++------- src/device/pi.rs | 90 ++++++++--------- src/device/pif.rs | 2 +- src/device/rdp.rs | 85 ++++++++-------- src/device/rdram.rs | 37 ++++--- src/device/ri.rs | 24 ++--- src/device/rsp_cpu.rs | 17 ++-- src/device/rsp_interface.rs | 140 +++++++++++++-------------- src/device/rsp_su_instructions.rs | 59 +++++------ src/device/si.rs | 30 +++--- src/device/tlb.rs | 48 +++++---- src/device/vi.rs | 61 ++++++------ src/ui/audio.rs | 2 +- src/ui/video.rs | 15 ++- 28 files changed, 643 insertions(+), 727 deletions(-) diff --git a/src/device.rs b/src/device.rs index ecf8d7c..1cb9d28 100644 --- a/src/device.rs +++ b/src/device.rs @@ -252,8 +252,8 @@ impl Device { load_state: false, cpu: cpu::Cpu { cop0: cop0::Cop0 { - regs: [0; cop0::COP0_REGS_COUNT as usize], - reg_write_masks: [0; cop0::COP0_REGS_COUNT as usize], + regs: [0; cop0::COP0_REGS_COUNT], + reg_write_masks: [0; cop0::COP0_REGS_COUNT], reg_latch: 0, is_event: false, instrs: [cop0::reserved; 32], @@ -357,9 +357,9 @@ impl Device { rtc_timestamp: 0, rtc: cart::AfRtc { control: 0x0200 }, sc64: cart::sc64::Sc64 { - regs: [0; cart::sc64::SC64_REGS_COUNT as usize], + regs: [0; cart::sc64::SC64_REGS_COUNT], regs_locked: true, - cfg: [0; cart::sc64::SC64_CFG_COUNT as usize], + cfg: [0; cart::sc64::SC64_CFG_COUNT], sector: 0, buffer: vec![0; 8192], writeback_sector: vec![0; 256], @@ -395,7 +395,7 @@ impl Device { rdram: rdram::Rdram { mem: vec![], size: 0x800000, - regs: [[0; rdram::RDRAM_REGS_COUNT as usize]; 4], + regs: [[0; rdram::RDRAM_REGS_COUNT]; 4], }, rsp: rsp_interface::Rsp { cpu: rsp_cpu::Cpu { @@ -440,8 +440,8 @@ impl Device { instrs: [rsp_su_instructions::reserved; 64], vec_instrs: [rsp_vu_instructions::reserved; 64], }, - regs: [0; rsp_interface::SP_REGS_COUNT as usize], - regs2: [0; rsp_interface::SP_REGS2_COUNT as usize], + regs: [0; rsp_interface::SP_REGS_COUNT], + regs2: [0; rsp_interface::SP_REGS2_COUNT], mem: [0; 0x2000], last_status_value: 0, run_after_dma: false, @@ -453,19 +453,19 @@ impl Device { }; 2], }, rdp: rdp::Rdp { - regs_dpc: [0; rdp::DPC_REGS_COUNT as usize], - regs_dps: [0; rdp::DPS_REGS_COUNT as usize], + regs_dpc: [0; rdp::DPC_REGS_COUNT], + regs_dps: [0; rdp::DPS_REGS_COUNT], wait_frozen: false, last_status_value: 0, }, mi: mi::Mi { - regs: [0; mi::MI_REGS_COUNT as usize], + regs: [0; mi::MI_REGS_COUNT], }, pi: pi::Pi { - regs: [0; pi::PI_REGS_COUNT as usize], + regs: [0; pi::PI_REGS_COUNT], }, ai: ai::Ai { - regs: [0; ai::AI_REGS_COUNT as usize], + regs: [0; ai::AI_REGS_COUNT], last_read: 0, freq: 33600, delayed_carry: false, @@ -476,15 +476,15 @@ impl Device { }; 2], }, si: si::Si { - regs: [0; si::SI_REGS_COUNT as usize], + regs: [0; si::SI_REGS_COUNT], dma_dir: si::DmaDir::None, }, ri: ri::Ri { - regs: [0; ri::RI_REGS_COUNT as usize], + regs: [0; ri::RI_REGS_COUNT], ram_init: false, }, vi: vi::Vi { - regs: [0; vi::VI_REGS_COUNT as usize], + regs: [0; vi::VI_REGS_COUNT], clock: 0, field: 0, delay: 0, diff --git a/src/device/ai.rs b/src/device/ai.rs index 9027f76..6b31019 100644 --- a/src/device/ai.rs +++ b/src/device/ai.rs @@ -1,19 +1,19 @@ use crate::{device, ui}; -const AI_DRAM_ADDR_REG: u32 = 0; -const AI_LEN_REG: u32 = 1; -// const AI_CONTROL_REG: u32 = 2; -pub const AI_STATUS_REG: u32 = 3; -const AI_DACRATE_REG: u32 = 4; -// const AI_BITRATE_REG: u32 = 5; -pub const AI_REGS_COUNT: u32 = 6; +const AI_DRAM_ADDR_REG: usize = 0; +const AI_LEN_REG: usize = 1; +// const AI_CONTROL_REG: usize = 2; +pub const AI_STATUS_REG: usize = 3; +const AI_DACRATE_REG: usize = 4; +// const AI_BITRATE_REG: usize = 5; +pub const AI_REGS_COUNT: usize = 6; pub const AI_STATUS_BUSY: u32 = 0x40000000; const AI_STATUS_FULL: u32 = 0x80000000; #[derive(serde::Serialize, serde::Deserialize)] pub struct Ai { - pub regs: [u32; AI_REGS_COUNT as usize], + pub regs: [u32; AI_REGS_COUNT], pub fifo: [AiDma; 2], pub last_read: u64, pub delayed_carry: bool, @@ -38,7 +38,7 @@ fn get_remaining_dma_length(device: &device::Device) -> u64 { } let remaining_dma_duration = - next_ai_event.unwrap().count - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize]; + next_ai_event.unwrap().count - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG]; let dma_length = remaining_dma_duration * device.ai.fifo[0].length / device.ai.fifo[0].duration; dma_length & !7 @@ -46,7 +46,7 @@ fn get_remaining_dma_length(device: &device::Device) -> u64 { fn get_dma_duration(device: &device::Device) -> u64 { let bytes_per_sample = 4; /* XXX: assume 16bit stereo - should depends on bitrate instead */ - let length = (device.ai.regs[AI_LEN_REG as usize] & !7) as u64; + let length = (device.ai.regs[AI_LEN_REG] & !7) as u64; (length * device.cpu.clock_rate) / (bytes_per_sample * device.ai.freq) } @@ -73,18 +73,18 @@ fn do_dma(device: &mut device::Device) { fn fifo_push(device: &mut device::Device) { let duration = get_dma_duration(device); - if (device.ai.regs[AI_STATUS_REG as usize] & AI_STATUS_BUSY) != 0 { + if (device.ai.regs[AI_STATUS_REG] & AI_STATUS_BUSY) != 0 { device.ai.fifo[1].address = - device.ai.regs[AI_DRAM_ADDR_REG as usize] as u64 & device::rdram::RDRAM_MASK as u64; - device.ai.fifo[1].length = (device.ai.regs[AI_LEN_REG as usize] & !7) as u64; + device.ai.regs[AI_DRAM_ADDR_REG] as u64 & device::rdram::RDRAM_MASK as u64; + device.ai.fifo[1].length = (device.ai.regs[AI_LEN_REG] & !7) as u64; device.ai.fifo[1].duration = duration; - device.ai.regs[AI_STATUS_REG as usize] |= AI_STATUS_FULL; + device.ai.regs[AI_STATUS_REG] |= AI_STATUS_FULL; } else { device.ai.fifo[0].address = - device.ai.regs[AI_DRAM_ADDR_REG as usize] as u64 & device::rdram::RDRAM_MASK as u64; - device.ai.fifo[0].length = (device.ai.regs[AI_LEN_REG as usize] & !7) as u64; + device.ai.regs[AI_DRAM_ADDR_REG] as u64 & device::rdram::RDRAM_MASK as u64; + device.ai.fifo[0].length = (device.ai.regs[AI_LEN_REG] & !7) as u64; device.ai.fifo[0].duration = duration; - device.ai.regs[AI_STATUS_REG as usize] |= AI_STATUS_BUSY; + device.ai.regs[AI_STATUS_REG] |= AI_STATUS_BUSY; do_dma(device); ui::audio::resume_game_audio(&mut device.ui); @@ -92,15 +92,15 @@ fn fifo_push(device: &mut device::Device) { } fn fifo_pop(device: &mut device::Device) { - if device.ai.regs[AI_STATUS_REG as usize] & AI_STATUS_FULL != 0 { + if device.ai.regs[AI_STATUS_REG] & AI_STATUS_FULL != 0 { device.ai.fifo[0].address = device.ai.fifo[1].address; device.ai.fifo[0].length = device.ai.fifo[1].length; device.ai.fifo[0].duration = device.ai.fifo[1].duration; - device.ai.regs[AI_STATUS_REG as usize] &= !AI_STATUS_FULL; + device.ai.regs[AI_STATUS_REG] &= !AI_STATUS_FULL; do_dma(device); } else { - device.ai.regs[AI_STATUS_REG as usize] &= !AI_STATUS_BUSY; + device.ai.regs[AI_STATUS_REG] &= !AI_STATUS_BUSY; device.ai.delayed_carry = false; ui::audio::pause_game_audio(&mut device.ui); } @@ -112,7 +112,7 @@ pub fn read_regs( _access_size: device::memory::AccessSize, ) -> u32 { let reg = (address & 0xFFFF) >> 2; - let return_value = match reg as u32 { + let return_value = match reg as usize { AI_LEN_REG => { let value = get_remaining_dma_length(device); if value < device.ai.last_read { @@ -136,7 +136,7 @@ pub fn read_regs( pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { let reg = (address & 0xFFFF) >> 2; - match reg as u32 { + match reg as usize { AI_LEN_REG => { device::memory::masked_write_32(&mut device.ai.regs[reg as usize], value, mask); if device.ai.regs[reg as usize] != 0 { diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 375fddf..de92d2b 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -42,7 +42,7 @@ pub fn read_mem( device::cop0::add_cycles(device, cycles); // well known cart ROM oddity, if a read is perfomed while PI_STATUS_IO_BUSY is set, the latched value is returned rather than the data at the specified address - if device.pi.regs[device::pi::PI_STATUS_REG as usize] & device::pi::PI_STATUS_IO_BUSY != 0 { + if device.pi.regs[device::pi::PI_STATUS_REG] & device::pi::PI_STATUS_IO_BUSY != 0 { device.cart.latch } else { let masked_address = address as usize & CART_MASK; @@ -69,7 +69,7 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 device.cart.latch = value & mask; - device.pi.regs[device::pi::PI_STATUS_REG as usize] |= device::pi::PI_STATUS_IO_BUSY; + device.pi.regs[device::pi::PI_STATUS_REG] |= device::pi::PI_STATUS_IO_BUSY; let cycles = device::pi::calculate_cycles(device, 1, 4); device::events::create_event(device, device::events::EVENT_TYPE_PI, cycles); diff --git a/src/device/cart/sc64.rs b/src/device/cart/sc64.rs index 32b78ce..a66b9b6 100644 --- a/src/device/cart/sc64.rs +++ b/src/device/cart/sc64.rs @@ -3,19 +3,19 @@ use crate::ui; pub const SDCARD_SIZE: usize = 0x4000000; -const SC64_SCR_REG: u32 = 0; -const SC64_DATA0_REG: u32 = 1; -const SC64_DATA1_REG: u32 = 2; -const SC64_IDENTIFIER_REG: u32 = 3; -const SC64_KEY_REG: u32 = 4; -//const SC64_IRQ_REG: u32 = 5; -//const SC64_AUX_REG: u32 = 6; -pub const SC64_REGS_COUNT: u32 = 7; +const SC64_SCR_REG: usize = 0; +const SC64_DATA0_REG: usize = 1; +const SC64_DATA1_REG: usize = 2; +const SC64_IDENTIFIER_REG: usize = 3; +const SC64_KEY_REG: usize = 4; +//const SC64_IRQ_REG: usize = 5; +//const SC64_AUX_REG: usize = 6; +pub const SC64_REGS_COUNT: usize = 7; pub const SC64_BOOTLOADER_SWITCH: u32 = 0; pub const SC64_ROM_WRITE_ENABLE: u32 = 1; pub const SC64_SAVE_TYPE: u32 = 6; -pub const SC64_CFG_COUNT: u32 = 15; +pub const SC64_CFG_COUNT: usize = 15; const SC64_BUFFER_MASK: usize = 0x1FFF; const SC64_EEPROM_MASK: usize = 0xFFF; @@ -23,9 +23,9 @@ const SC64_EEPROM_MASK: usize = 0xFFF; #[derive(serde::Serialize, serde::Deserialize)] pub struct Sc64 { pub buffer: Vec, - pub regs: [u32; SC64_REGS_COUNT as usize], + pub regs: [u32; SC64_REGS_COUNT], pub regs_locked: bool, - pub cfg: [u32; SC64_CFG_COUNT as usize], + pub cfg: [u32; SC64_CFG_COUNT], pub sector: u32, pub writeback_sector: Vec, pub usb_buffer: Vec, @@ -49,7 +49,7 @@ pub fn read_regs( return 0; } let reg = (address & 0xFFFF) >> 2; - match reg as u32 { + match reg as usize { SC64_SCR_REG | SC64_DATA0_REG | SC64_DATA1_REG => device.cart.sc64.regs[reg as usize], SC64_IDENTIFIER_REG => 0x53437632, _ => panic!("unknown read reg {reg} address {address:#x}"), @@ -58,12 +58,12 @@ pub fn read_regs( pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { let reg = (address & 0xFFFF) >> 2; - match reg as u32 { + match reg as usize { SC64_KEY_REG => { device::memory::masked_write_32(&mut device.cart.sc64.regs[reg as usize], value, mask); - if device.cart.sc64.regs[SC64_KEY_REG as usize] == 0x4F434B5F { + if device.cart.sc64.regs[SC64_KEY_REG] == 0x4F434B5F { device.cart.sc64.regs_locked = false; - } else if device.cart.sc64.regs[SC64_KEY_REG as usize] == 0xFFFFFFFF { + } else if device.cart.sc64.regs[SC64_KEY_REG] == 0xFFFFFFFF { device.cart.sc64.regs_locked = true; } } @@ -81,22 +81,22 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u match char::from_u32(value & mask).unwrap() { 'V' => { // get version - device.cart.sc64.regs[SC64_DATA0_REG as usize] = (2 << 16) | 20; - device.cart.sc64.regs[SC64_DATA1_REG as usize] = 2; + device.cart.sc64.regs[SC64_DATA0_REG] = (2 << 16) | 20; + device.cart.sc64.regs[SC64_DATA1_REG] = 2; } 'c' => { // get config - device.cart.sc64.regs[SC64_DATA1_REG as usize] = device.cart.sc64.cfg - [device.cart.sc64.regs[SC64_DATA0_REG as usize] as usize] + device.cart.sc64.regs[SC64_DATA1_REG] = + device.cart.sc64.cfg[device.cart.sc64.regs[SC64_DATA0_REG] as usize] } 'C' => { // set config - if device.cart.sc64.regs[SC64_DATA0_REG as usize] == SC64_SAVE_TYPE { + if device.cart.sc64.regs[SC64_DATA0_REG] == SC64_SAVE_TYPE { // if save type is being written, we are probably booting a game using the flash cart menu // we shouldn't write saves to disk in this case (they are written to the SD card) device.ui.storage.saves.write_to_disk = false; device.ui.storage.save_type = - match device.cart.sc64.regs[SC64_DATA1_REG as usize] { + match device.cart.sc64.regs[SC64_DATA1_REG] { 0 => { vec![] } @@ -115,20 +115,20 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u _ => { panic!( "unknown sc64 save type: {}", - device.cart.sc64.regs[SC64_DATA1_REG as usize] + device.cart.sc64.regs[SC64_DATA1_REG] ) } } } std::mem::swap( &mut device.cart.sc64.cfg - [device.cart.sc64.regs[SC64_DATA0_REG as usize] as usize], - &mut device.cart.sc64.regs[SC64_DATA1_REG as usize], + [device.cart.sc64.regs[SC64_DATA0_REG] as usize], + &mut device.cart.sc64.regs[SC64_DATA1_REG], ); } 'i' => { // sd card operation - match device.cart.sc64.regs[SC64_DATA1_REG as usize] { + match device.cart.sc64.regs[SC64_DATA1_REG] { 0 => { //Init SD card } 1 => { //Deinit SD card @@ -136,23 +136,21 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u _ => { panic!( "unknown sc64 sd card operation: {}", - device.cart.sc64.regs[SC64_DATA1_REG as usize] + device.cart.sc64.regs[SC64_DATA1_REG] ) } } } 'I' => { // set sd sector - device.cart.sc64.sector = device.cart.sc64.regs[SC64_DATA0_REG as usize]; + device.cart.sc64.sector = device.cart.sc64.regs[SC64_DATA0_REG]; } 's' => { format_sdcard(device); // read sd card - let address = - device.cart.sc64.regs[SC64_DATA0_REG as usize] as u64 & 0x1FFFFFFF; + let address = device.cart.sc64.regs[SC64_DATA0_REG] as u64 & 0x1FFFFFFF; let offset = (device.cart.sc64.sector * 512) as usize; - let length = - (device.cart.sc64.regs[SC64_DATA1_REG as usize] * 512) as usize; + let length = (device.cart.sc64.regs[SC64_DATA1_REG] * 512) as usize; let mut i = 0; while i < length { @@ -182,11 +180,9 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u 'S' => { format_sdcard(device); // write sd card - let address = - device.cart.sc64.regs[SC64_DATA0_REG as usize] as u64 & 0x1FFFFFFF; + let address = device.cart.sc64.regs[SC64_DATA0_REG] as u64 & 0x1FFFFFFF; let offset = (device.cart.sc64.sector * 512) as usize; - let length = - (device.cart.sc64.regs[SC64_DATA1_REG as usize] * 512) as usize; + let length = (device.cart.sc64.regs[SC64_DATA1_REG] * 512) as usize; let mut i = 0; while i < length { @@ -211,16 +207,15 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u ui::storage::schedule_save(device, ui::storage::SaveTypes::Sdcard); } 'U' => { - device.cart.sc64.regs[SC64_DATA0_REG as usize] = 0; + device.cart.sc64.regs[SC64_DATA0_REG] = 0; } 'u' => { // used to notify the game that there is data to read if let Some(cart_rx) = device.ui.usb.cart_rx.as_mut() { match cart_rx.try_recv() { Ok(data) => { - device.cart.sc64.regs[SC64_DATA0_REG as usize] = - data.data_type & 0xFF; // read_status/type - device.cart.sc64.regs[SC64_DATA1_REG as usize] = + device.cart.sc64.regs[SC64_DATA0_REG] = data.data_type & 0xFF; // read_status/type + device.cart.sc64.regs[SC64_DATA1_REG] = data.data_size & 0xFFFFFF; // length device.cart.sc64.usb_buffer = data.data; // store the data to be read } @@ -230,23 +225,21 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u panic!("cart_rx lagged: {err}"); } _ => { - device.cart.sc64.regs[SC64_DATA0_REG as usize] = 0; // read_status/type - device.cart.sc64.regs[SC64_DATA1_REG as usize] = 0; // length + device.cart.sc64.regs[SC64_DATA0_REG] = 0; // read_status/type + device.cart.sc64.regs[SC64_DATA1_REG] = 0; // length } } } } } else { - device.cart.sc64.regs[SC64_DATA0_REG as usize] = 0; // read_status/type - device.cart.sc64.regs[SC64_DATA1_REG as usize] = 0; // length + device.cart.sc64.regs[SC64_DATA0_REG] = 0; // read_status/type + device.cart.sc64.regs[SC64_DATA1_REG] = 0; // length } } 'M' => { // Send data from from flashcart to USB - let address = - device.cart.sc64.regs[SC64_DATA0_REG as usize] as u64 & 0x1FFFFFFF; - let length = - device.cart.sc64.regs[SC64_DATA1_REG as usize] as usize & 0xFFFFFF; + let address = device.cart.sc64.regs[SC64_DATA0_REG] as u64 & 0x1FFFFFFF; + let length = device.cart.sc64.regs[SC64_DATA1_REG] as usize & 0xFFFFFF; if let Some(usb_tx) = device.ui.usb.usb_tx.as_mut() { let mut usb_buffer = vec![0; length]; @@ -297,18 +290,16 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u usb_tx, ui::usb::UsbData { data: usb_buffer, - data_type: device.cart.sc64.regs[SC64_DATA1_REG as usize] >> 24, - data_size: device.cart.sc64.regs[SC64_DATA1_REG as usize] - & 0xFFFFFF, + data_type: device.cart.sc64.regs[SC64_DATA1_REG] >> 24, + data_size: device.cart.sc64.regs[SC64_DATA1_REG] & 0xFFFFFF, }, ); } } 'm' => { // Receive data from USB to flashcart - let address = - device.cart.sc64.regs[SC64_DATA0_REG as usize] as u64 & 0x1FFFFFFF; - let length = device.cart.sc64.regs[SC64_DATA1_REG as usize] as usize; + let address = device.cart.sc64.regs[SC64_DATA0_REG] as u64 & 0x1FFFFFFF; + let length = device.cart.sc64.regs[SC64_DATA1_REG] as usize; let mut i = 0; @@ -338,11 +329,11 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u } 'w' => { // SD card writeback pending - device.cart.sc64.regs[SC64_DATA0_REG as usize] = 0; + device.cart.sc64.regs[SC64_DATA0_REG] = 0; } 'W' => { let writeback_sectors_address = - device.cart.sc64.regs[SC64_DATA0_REG as usize] as u64; + device.cart.sc64.regs[SC64_DATA0_REG] as u64; for i in 0..256 { device.cart.sc64.writeback_sector[i] = device::memory::data_read( device, diff --git a/src/device/cart/sram.rs b/src/device/cart/sram.rs index 4e82bec..f3b2246 100644 --- a/src/device/cart/sram.rs +++ b/src/device/cart/sram.rs @@ -131,7 +131,7 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 write_mem_flash(device, address, value, mask) } - device.pi.regs[device::pi::PI_STATUS_REG as usize] |= device::pi::PI_STATUS_IO_BUSY; + device.pi.regs[device::pi::PI_STATUS_REG] |= device::pi::PI_STATUS_IO_BUSY; let cycles = device::pi::calculate_cycles(device, 2, 4); device::events::create_event(device, device::events::EVENT_TYPE_PI, cycles); diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index f935dc5..e3be818 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -1,5 +1,12 @@ use crate::device; +const MBC3_RTC_SECONDS: usize = 0; +const MBC3_RTC_MINUTES: usize = 1; +const MBC3_RTC_HOURS: usize = 2; +const MBC3_RTC_DAYS_L: usize = 3; +const MBC3_RTC_DAYS_H: usize = 4; +const MBC3_RTC_REGS_COUNT: usize = 5; + #[derive(Default, serde::Serialize, serde::Deserialize)] pub struct GbCart { pub enabled: bool, @@ -11,14 +18,13 @@ pub struct GbCart { pub mbc1_mode: bool, pub ram_bank: u16, pub rom_bank: u32, - pub set_latch: bool, - pub latch_second: u8, - pub latch_minute: u8, - pub latch_hour: u8, - pub latch_day: u16, + pub latch: bool, + pub rtc_regs: [u8; MBC3_RTC_REGS_COUNT], + pub rtc_regs_latch: [u8; MBC3_RTC_REGS_COUNT], + pub last_time: i64, } -#[derive(Default, Copy, Clone, serde::Serialize, serde::Deserialize)] +#[derive(Default, Copy, Clone, PartialEq, serde::Serialize, serde::Deserialize)] pub enum CartType { #[default] None, @@ -28,6 +34,48 @@ pub enum CartType { MBC5RamBatt, } +fn update_rtc_regs(cart: &mut device::controller::gbcart::GbCart, now: i64) { + let mut diff = now - cart.last_time; + cart.last_time = now; + + if diff > 0 { + cart.rtc_regs[MBC3_RTC_SECONDS] += (diff % 60) as u8; + if cart.rtc_regs[MBC3_RTC_SECONDS] >= 60 { + cart.rtc_regs[MBC3_RTC_SECONDS] -= 60; + cart.rtc_regs[MBC3_RTC_MINUTES] += 1; + } + diff /= 60; + + cart.rtc_regs[MBC3_RTC_MINUTES] += (diff % 60) as u8; + if cart.rtc_regs[MBC3_RTC_MINUTES] >= 60 { + cart.rtc_regs[MBC3_RTC_MINUTES] -= 60; + cart.rtc_regs[MBC3_RTC_HOURS] += 1; + } + diff /= 60; + + cart.rtc_regs[MBC3_RTC_HOURS] += (diff % 24) as u8; + if cart.rtc_regs[MBC3_RTC_HOURS] >= 24 { + cart.rtc_regs[MBC3_RTC_HOURS] -= 24; + cart.rtc_regs[MBC3_RTC_DAYS_L] += 1; + } + diff /= 24; + + /* update days counter */ + let days = ((((cart.rtc_regs[MBC3_RTC_DAYS_H] & 0x01) as i64) << 8) + | cart.rtc_regs[MBC3_RTC_DAYS_L] as i64) + + diff; + + cart.rtc_regs[MBC3_RTC_DAYS_L] = (days & 0xff) as u8; + cart.rtc_regs[MBC3_RTC_DAYS_H] = + ((cart.rtc_regs[MBC3_RTC_DAYS_H] & !0x01) as i64 | (days & 0x100)) as u8; + + /* set carry bit if days overflow */ + if days > 511 { + cart.rtc_regs[MBC3_RTC_DAYS_H] |= 0x80; + } + } +} + fn write_mbc1( pif_ram: &[u8], cart: &mut device::controller::gbcart::GbCart, @@ -105,6 +153,7 @@ fn write_mbc3( address: u16, data: usize, size: usize, + now: i64, ) { let value = pif_ram[data + size - 1]; if address < 0x2000 { @@ -118,10 +167,13 @@ fn write_mbc3( } else if address < 0x6000 { cart.ram_bank = (value & 0xf) as u16; } else if address < 0x8000 { - if !cart.set_latch && value != 0 { - // not implemented + if cart.cart_type == CartType::MBC3RamBattRtc { + if !cart.latch && (value & 0x1) != 0 { + update_rtc_regs(cart, now); + cart.rtc_regs_latch = cart.rtc_regs; + } + cart.latch = (value & 0x1) != 0; } - cart.set_latch = value != 0; } else if (0xa000..0xc000).contains(&address) { if !cart.ram_enabled { return; @@ -130,29 +182,8 @@ fn write_mbc3( let banked_address = address - 0xA000 + (cart.ram_bank * 0x2000); cart.ram[banked_address as usize..banked_address as usize + size] .copy_from_slice(&pif_ram[data..data + size]); - } else { - match cart.ram_bank { - 0x8 => { - cart.latch_second = value; - } - 0x9 => { - cart.latch_minute = value; - } - 0xA => { - cart.latch_hour = value; - } - 0xB => { - cart.latch_day &= 0xFF00; - cart.latch_day |= value as u16; - } - 0xC => { - cart.latch_day &= 0x00FF; - cart.latch_day |= (value as u16) << 8; - } - _ => { - panic!("Unsupported ram bank {:x}", cart.ram_bank); - } - } + } else if cart.cart_type == CartType::MBC3RamBattRtc { + cart.rtc_regs[cart.ram_bank as usize - 0x8] = value; } } else { panic!("Unsupported write address {address:x}"); @@ -161,10 +192,11 @@ fn write_mbc3( fn read_mbc3( pif_ram: &mut [u8], - cart: &device::controller::gbcart::GbCart, + cart: &mut device::controller::gbcart::GbCart, address: u16, data: usize, size: usize, + now: i64, ) { if address < 0x4000 { let banked_address = address & 0x3FFF; @@ -188,19 +220,16 @@ fn read_mbc3( .get(banked_address as usize..banked_address as usize + size) .unwrap_or(&vec![0; size]), ); - } else { - let latch = match cart.ram_bank { - 0x8 => cart.latch_second, - 0x9 => cart.latch_minute, - 0xA => cart.latch_hour, - 0xB => cart.latch_day as u8, - 0xC => (cart.latch_day >> 8) as u8, - _ => { - panic!("Unsupported ram bank {:x}", cart.ram_bank); + } else if cart.cart_type == CartType::MBC3RamBattRtc { + if cart.latch { + for i in 0..size { + pif_ram[data + i] = cart.rtc_regs_latch[cart.ram_bank as usize - 0x8]; + } + } else { + update_rtc_regs(cart, now); + for i in 0..size { + pif_ram[data + i] = cart.rtc_regs[cart.ram_bank as usize - 0x8]; } - }; - for i in 0..size { - pif_ram[data + i] = latch; } } } else { @@ -274,10 +303,11 @@ fn read_mbc5( pub fn read( pif_ram: &mut [u8], - cart: &device::controller::gbcart::GbCart, + cart: &mut device::controller::gbcart::GbCart, address: u16, data: usize, size: usize, + now: i64, ) { if !cart.enabled { for i in 0..size { @@ -287,8 +317,8 @@ pub fn read( } match cart.cart_type { CartType::MBC1RamBatt => read_mbc1(pif_ram, cart, address, data, size), - CartType::MBC3RamBatt => read_mbc3(pif_ram, cart, address, data, size), - CartType::MBC3RamBattRtc => read_mbc3(pif_ram, cart, address, data, size), + CartType::MBC3RamBatt => read_mbc3(pif_ram, cart, address, data, size, now), + CartType::MBC3RamBattRtc => read_mbc3(pif_ram, cart, address, data, size, now), CartType::MBC5RamBatt => read_mbc5(pif_ram, cart, address, data, size), _ => panic!("Unsupported cart type"), } @@ -300,14 +330,15 @@ pub fn write( address: u16, data: usize, size: usize, + now: i64, ) { if !cart.enabled { return; } match cart.cart_type { CartType::MBC1RamBatt => write_mbc1(pif_ram, cart, address, data, size), - CartType::MBC3RamBatt => write_mbc3(pif_ram, cart, address, data, size), - CartType::MBC3RamBattRtc => write_mbc3(pif_ram, cart, address, data, size), + CartType::MBC3RamBatt => write_mbc3(pif_ram, cart, address, data, size, now), + CartType::MBC3RamBattRtc => write_mbc3(pif_ram, cart, address, data, size, now), CartType::MBC5RamBatt => write_mbc5(pif_ram, cart, address, data, size), _ => panic!("Unsupported cart type"), } diff --git a/src/device/controller/transferpak.rs b/src/device/controller/transferpak.rs index 2e60a4a..b84d3a4 100644 --- a/src/device/controller/transferpak.rs +++ b/src/device/controller/transferpak.rs @@ -54,10 +54,11 @@ pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usi 0xC..=0xF => { device::controller::gbcart::read( &mut device.pif.ram, - &pak.cart, + &mut pak.cart, 0x4000 * pak.bank + (address & 0x7fff) - 0x4000, data, size, + (device.vi.frame_time * device.vi.vi_counter as f64) as i64, ); } _ => { @@ -124,6 +125,7 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us 0x4000 * pak.bank + (address & 0x7fff) - 0x4000, data, size, + (device.vi.frame_time * device.vi.vi_counter as f64) as i64, ); } _ => { diff --git a/src/device/cop0.rs b/src/device/cop0.rs index 750ea6c..9eb4f9f 100644 --- a/src/device/cop0.rs +++ b/src/device/cop0.rs @@ -1,38 +1,38 @@ use crate::{device, savestates}; -pub const COP0_INDEX_REG: u32 = 0; -const COP0_RANDOM_REG: u32 = 1; -pub const COP0_ENTRYLO0_REG: u32 = 2; -pub const COP0_ENTRYLO1_REG: u32 = 3; -pub const COP0_CONTEXT_REG: u32 = 4; -pub const COP0_PAGEMASK_REG: u32 = 5; -const COP0_WIRED_REG: u32 = 6; -//const COP0_UNUSED_7: u32 = 7; -pub const COP0_BADVADDR_REG: u32 = 8; -pub const COP0_COUNT_REG: u32 = 9; -pub const COP0_ENTRYHI_REG: u32 = 10; -const COP0_COMPARE_REG: u32 = 11; -pub const COP0_STATUS_REG: u32 = 12; -pub const COP0_CAUSE_REG: u32 = 13; -pub const COP0_EPC_REG: u32 = 14; -const COP0_PREVID_REG: u32 = 15; -const COP0_CONFIG_REG: u32 = 16; -pub const COP0_LLADDR_REG: u32 = 17; -//const COP0_WATCHLO_REG: u32 = 18; -//const COP0_WATCHHI_REG: u32 = 19; -pub const COP0_XCONTEXT_REG: u32 = 20; -//const COP0_UNUSED_21: u32 = 21; -//const COP0_UNUSED_22: u32 = 22; -//const COP0_UNUSED_23: u32 = 23; -//const COP0_UNUSED_24: u32 = 24; -//const COP0_UNUSED_25: u32 = 25; -//const COP0_PARITYERR_REG: u32 = 26; -//const COP0_CACHEERR_REG: u32 = 27; -pub const COP0_TAGLO_REG: u32 = 28; -//const COP0_TAGHI_REG: u32 = 29; -pub const COP0_ERROREPC_REG: u32 = 30; -//const COP0_UNUSED_31: u32 = 31; -pub const COP0_REGS_COUNT: u32 = 32; +pub const COP0_INDEX_REG: usize = 0; +const COP0_RANDOM_REG: usize = 1; +pub const COP0_ENTRYLO0_REG: usize = 2; +pub const COP0_ENTRYLO1_REG: usize = 3; +pub const COP0_CONTEXT_REG: usize = 4; +pub const COP0_PAGEMASK_REG: usize = 5; +const COP0_WIRED_REG: usize = 6; +//const COP0_UNUSED_7: usize = 7; +pub const COP0_BADVADDR_REG: usize = 8; +pub const COP0_COUNT_REG: usize = 9; +pub const COP0_ENTRYHI_REG: usize = 10; +const COP0_COMPARE_REG: usize = 11; +pub const COP0_STATUS_REG: usize = 12; +pub const COP0_CAUSE_REG: usize = 13; +pub const COP0_EPC_REG: usize = 14; +const COP0_PREVID_REG: usize = 15; +const COP0_CONFIG_REG: usize = 16; +pub const COP0_LLADDR_REG: usize = 17; +//const COP0_WATCHLO_REG: usize = 18; +//const COP0_WATCHHI_REG: usize = 19; +pub const COP0_XCONTEXT_REG: usize = 20; +//const COP0_UNUSED_21: usize = 21; +//const COP0_UNUSED_22: usize = 22; +//const COP0_UNUSED_23: usize = 23; +//const COP0_UNUSED_24: usize = 24; +//const COP0_UNUSED_25: usize = 25; +//const COP0_PARITYERR_REG: usize = 26; +//const COP0_CACHEERR_REG: usize = 27; +pub const COP0_TAGLO_REG: usize = 28; +//const COP0_TAGHI_REG: usize = 29; +pub const COP0_ERROREPC_REG: usize = 30; +//const COP0_UNUSED_31: usize = 31; +pub const COP0_REGS_COUNT: usize = 32; pub const COP0_STATUS_IE: u64 = 1 << 0; pub const COP0_STATUS_EXL: u64 = 1 << 1; @@ -94,8 +94,8 @@ const COP0_TAGLO_REG_MASK: u64 = 0b00001111111111111111111111000000; #[derive(serde::Serialize, serde::Deserialize)] pub struct Cop0 { pub reg_latch: u64, - pub regs: [u64; COP0_REGS_COUNT as usize], - pub reg_write_masks: [u64; COP0_REGS_COUNT as usize], + pub regs: [u64; COP0_REGS_COUNT], + pub reg_write_masks: [u64; COP0_REGS_COUNT], #[serde(skip, default = "savestates::default_instructions")] pub instrs: [fn(&mut device::Device, u32); 32], #[serde(skip, default = "savestates::default_instructions")] @@ -136,11 +136,11 @@ fn dmtc0(device: &mut device::Device, opcode: u32) { } fn tlbr(device: &mut device::Device, _opcode: u32) { - device::tlb::read(device, device.cpu.cop0.regs[COP0_INDEX_REG as usize]) + device::tlb::read(device, device.cpu.cop0.regs[COP0_INDEX_REG]) } fn tlbwi(device: &mut device::Device, _opcode: u32) { - device::tlb::write(device, device.cpu.cop0.regs[COP0_INDEX_REG as usize]) + device::tlb::write(device, device.cpu.cop0.regs[COP0_INDEX_REG]) } fn tlbwr(device: &mut device::Device, _opcode: u32) { @@ -153,12 +153,12 @@ fn tlbp(device: &mut device::Device, _opcode: u32) { } fn eret(device: &mut device::Device, _opcode: u32) { - if device.cpu.cop0.regs[COP0_STATUS_REG as usize] & COP0_STATUS_ERL != 0 { - device.cpu.pc = device.cpu.cop0.regs[COP0_ERROREPC_REG as usize]; - device.cpu.cop0.regs[COP0_STATUS_REG as usize] &= !COP0_STATUS_ERL + if device.cpu.cop0.regs[COP0_STATUS_REG] & COP0_STATUS_ERL != 0 { + device.cpu.pc = device.cpu.cop0.regs[COP0_ERROREPC_REG]; + device.cpu.cop0.regs[COP0_STATUS_REG] &= !COP0_STATUS_ERL } else { - device.cpu.pc = device.cpu.cop0.regs[COP0_EPC_REG as usize]; - device.cpu.cop0.regs[COP0_STATUS_REG as usize] &= !COP0_STATUS_EXL + device.cpu.pc = device.cpu.cop0.regs[COP0_EPC_REG]; + device.cpu.cop0.regs[COP0_STATUS_REG] &= !COP0_STATUS_EXL } device.cpu.branch_state.state = device::cpu::State::Exception; device.cpu.llbit = false; @@ -184,7 +184,7 @@ pub fn reserved(device: &mut device::Device, _opcode: u32) { pub fn emux_xdetect(_device: &mut device::Device, _opcode: u32) {} fn get_control_registers(device: &device::Device, index: u32) -> u64 { - match index { + match index as usize { COP0_COUNT_REG => device.cpu.cop0.regs[index as usize] >> 1, COP0_RANDOM_REG => set_random_register(device), 7 | 21 | 22 | 23 | 24 | 25 | 31 => device.cpu.cop0.reg_latch, @@ -194,22 +194,18 @@ fn get_control_registers(device: &device::Device, index: u32) -> u64 { fn set_control_registers(device: &mut device::Device, index: u32, mut data: u64) { device.cpu.cop0.reg_latch = data; - match index { + match index as usize { COP0_COUNT_REG => { data &= 0xFFFFFFFF; data <<= 1; - device::events::translate_events( - device, - device.cpu.cop0.regs[COP0_COUNT_REG as usize], - data, - ); - device.cpu.cop0.regs[COP0_COUNT_REG as usize] = data; + device::events::translate_events(device, device.cpu.cop0.regs[COP0_COUNT_REG], data); + device.cpu.cop0.regs[COP0_COUNT_REG] = data; return; } - COP0_WIRED_REG => device.cpu.cop0.regs[COP0_RANDOM_REG as usize] = 31, + COP0_WIRED_REG => device.cpu.cop0.regs[COP0_RANDOM_REG] = 31, COP0_COMPARE_REG => { data &= 0xFFFFFFFF; - let current_count = (device.cpu.cop0.regs[COP0_COUNT_REG as usize] >> 1) & 0xFFFFFFFF; + let current_count = (device.cpu.cop0.regs[COP0_COUNT_REG] >> 1) & 0xFFFFFFFF; let mut compare_event_diff = (data as u32).wrapping_sub(current_count as u32); if compare_event_diff == 0 { @@ -221,7 +217,7 @@ fn set_control_registers(device: &mut device::Device, index: u32, mut data: u64) device::events::EVENT_TYPE_COMPARE, (compare_event_diff as u64) << 1, ); - device.cpu.cop0.regs[COP0_CAUSE_REG as usize] &= !COP0_CAUSE_IP7; + device.cpu.cop0.regs[COP0_CAUSE_REG] &= !COP0_CAUSE_IP7; } COP0_STATUS_REG if data & COP0_STATUS_FR != device.cpu.cop0.regs[index as usize] & COP0_STATUS_FR => @@ -239,9 +235,8 @@ fn set_control_registers(device: &mut device::Device, index: u32, mut data: u64) } pub fn compare_event(device: &mut device::Device) { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] |= device::cop0::COP0_CAUSE_IP7; - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= - !device::cop0::COP0_CAUSE_EXCCODE_MASK; + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] |= device::cop0::COP0_CAUSE_IP7; + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] &= !device::cop0::COP0_CAUSE_EXCCODE_MASK; device::events::create_event_at( device, @@ -252,17 +247,17 @@ pub fn compare_event(device: &mut device::Device) { } fn set_random_register(device: &device::Device) -> u64 { - if device.cpu.cop0.regs[COP0_WIRED_REG as usize] > 31 { - (u64::MAX - device.cpu.cop0.regs[COP0_COUNT_REG as usize]) & 0x3F + if device.cpu.cop0.regs[COP0_WIRED_REG] > 31 { + (u64::MAX - device.cpu.cop0.regs[COP0_COUNT_REG]) & 0x3F } else { - (u64::MAX - device.cpu.cop0.regs[COP0_COUNT_REG as usize]) - % (32 - device.cpu.cop0.regs[COP0_WIRED_REG as usize]) - + device.cpu.cop0.regs[COP0_WIRED_REG as usize] + (u64::MAX - device.cpu.cop0.regs[COP0_COUNT_REG]) + % (32 - device.cpu.cop0.regs[COP0_WIRED_REG]) + + device.cpu.cop0.regs[COP0_WIRED_REG] } } pub fn add_cycles(device: &mut device::Device, cycles: u64) { - device.cpu.cop0.regs[COP0_COUNT_REG as usize] += cycles // COUNT_REG is shifted right 1 bit when read by MFC0 + device.cpu.cop0.regs[COP0_COUNT_REG] += cycles // COUNT_REG is shifted right 1 bit when read by MFC0 } pub fn map_instructions(device: &mut device::Device) { @@ -376,14 +371,14 @@ pub fn init(device: &mut device::Device) { map_instructions(device); // taken from VR4300 manual - device.cpu.cop0.regs[COP0_RANDOM_REG as usize] = 0b00000000000000000000000000011111; - device.cpu.cop0.regs[COP0_CONFIG_REG as usize] = 0b01110000000001101110010001100000; - device.cpu.cop0.regs[COP0_STATUS_REG as usize] = 0b00000000010000000000000000000100; - device.cpu.cop0.regs[COP0_PREVID_REG as usize] = 0b00000000000000000000101100100010; - device.cpu.cop0.regs[COP0_EPC_REG as usize] = 0b11111111111111111111111111111111; - device.cpu.cop0.regs[COP0_ERROREPC_REG as usize] = 0b11111111111111111111111111111111; - device.cpu.cop0.regs[COP0_BADVADDR_REG as usize] = 0xFFFFFFFF; - device.cpu.cop0.regs[COP0_CONTEXT_REG as usize] = 0x7FFFF0; + device.cpu.cop0.regs[COP0_RANDOM_REG] = 0b00000000000000000000000000011111; + device.cpu.cop0.regs[COP0_CONFIG_REG] = 0b01110000000001101110010001100000; + device.cpu.cop0.regs[COP0_STATUS_REG] = 0b00000000010000000000000000000100; + device.cpu.cop0.regs[COP0_PREVID_REG] = 0b00000000000000000000101100100010; + device.cpu.cop0.regs[COP0_EPC_REG] = 0b11111111111111111111111111111111; + device.cpu.cop0.regs[COP0_ERROREPC_REG] = 0b11111111111111111111111111111111; + device.cpu.cop0.regs[COP0_BADVADDR_REG] = 0xFFFFFFFF; + device.cpu.cop0.regs[COP0_CONTEXT_REG] = 0x7FFFF0; device::events::create_event(device, device::events::EVENT_TYPE_COMPARE, u32::MAX as u64) } diff --git a/src/device/cop1.rs b/src/device/cop1.rs index 01f53d2..9bc6e2a 100644 --- a/src/device/cop1.rs +++ b/src/device/cop1.rs @@ -47,9 +47,7 @@ pub struct Cop1 { } pub fn lwc1(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU1 == 0 { return unusable(device, opcode); } @@ -79,9 +77,7 @@ pub fn lwc1(device: &mut device::Device, opcode: u32) { } pub fn ldc1(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU1 == 0 { return unusable(device, opcode); } @@ -118,9 +114,7 @@ pub fn ldc1(device: &mut device::Device, opcode: u32) { } pub fn swc1(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU1 == 0 { return unusable(device, opcode); } @@ -145,9 +139,7 @@ pub fn swc1(device: &mut device::Device, opcode: u32) { } pub fn sdc1(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU1 == 0 { return unusable(device, opcode); } @@ -181,9 +173,7 @@ pub fn sdc1(device: &mut device::Device, opcode: u32) { } fn mfc1(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU1 == 0 { return unusable(device, opcode); } @@ -193,9 +183,7 @@ fn mfc1(device: &mut device::Device, opcode: u32) { } fn dmfc1(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU1 == 0 { return unusable(device, opcode); } @@ -205,9 +193,7 @@ fn dmfc1(device: &mut device::Device, opcode: u32) { } fn cfc1(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU1 == 0 { return unusable(device, opcode); } @@ -217,9 +203,7 @@ fn cfc1(device: &mut device::Device, opcode: u32) { } fn dcfc1(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU1 == 0 { return unusable(device, opcode); } @@ -229,9 +213,7 @@ fn dcfc1(device: &mut device::Device, opcode: u32) { } fn mtc1(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU1 == 0 { return unusable(device, opcode); } @@ -247,9 +229,7 @@ fn mtc1(device: &mut device::Device, opcode: u32) { } fn dmtc1(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU1 == 0 { return unusable(device, opcode); } @@ -260,9 +240,7 @@ fn dmtc1(device: &mut device::Device, opcode: u32) { } fn ctc1(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU1 == 0 { return unusable(device, opcode); } @@ -274,9 +252,7 @@ fn ctc1(device: &mut device::Device, opcode: u32) { } fn dctc1(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU1 == 0 { return unusable(device, opcode); } @@ -286,9 +262,7 @@ fn dctc1(device: &mut device::Device, opcode: u32) { } fn execute_cop1_b(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU1 == 0 { return unusable(device, opcode); } @@ -296,9 +270,7 @@ fn execute_cop1_b(device: &mut device::Device, opcode: u32) { } fn execute_cop1_s(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU1 == 0 { return unusable(device, opcode); } @@ -306,9 +278,7 @@ fn execute_cop1_s(device: &mut device::Device, opcode: u32) { } fn execute_cop1_d(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU1 == 0 { return unusable(device, opcode); } @@ -316,9 +286,7 @@ fn execute_cop1_d(device: &mut device::Device, opcode: u32) { } fn execute_cop1_l(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU1 == 0 { return unusable(device, opcode); } @@ -326,9 +294,7 @@ fn execute_cop1_l(device: &mut device::Device, opcode: u32) { } fn execute_cop1_w(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU1 == 0 { return unusable(device, opcode); } @@ -340,9 +306,7 @@ fn unusable(device: &mut device::Device, _opcode: u32) { } pub fn reserved(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU1 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU1 == 0 { return unusable(device, opcode); } @@ -406,9 +370,7 @@ fn set_control_registers_fpu(device: &mut device::Device, index: u32, data: u32) pub fn set_fpr_single(device: &mut device::Device, index: usize, value: f32, clear_high: bool) { let bytes = value.to_ne_bytes(); - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_FR - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_FR == 0 { device.cpu.cop1.fgr32[index] = bytes; } else { let bytes_lo = bytes; @@ -422,9 +384,7 @@ pub fn set_fpr_single(device: &mut device::Device, index: usize, value: f32, cle } pub fn get_fpr_single(device: &device::Device, index: usize) -> f32 { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_FR - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_FR == 0 { f32::from_ne_bytes(device.cpu.cop1.fgr32[index]) } else { f32::from_ne_bytes(device.cpu.cop1.fgr64[index][0..4].try_into().unwrap()) @@ -433,9 +393,7 @@ pub fn get_fpr_single(device: &device::Device, index: usize) -> f32 { pub fn set_fpr_double(device: &mut device::Device, index: usize, value: f64) { let bytes = value.to_ne_bytes(); - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_FR - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_FR == 0 { device.cpu.cop1.fgr32[index & !1] = bytes[0..4].try_into().unwrap(); device.cpu.cop1.fgr32[(index & !1) + 1] = bytes[4..8].try_into().unwrap(); } else { @@ -444,9 +402,7 @@ pub fn set_fpr_double(device: &mut device::Device, index: usize, value: f64) { } pub fn get_fpr_double(device: &device::Device, index: usize) -> f64 { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_FR - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_FR == 0 { let bytes_lo = device.cpu.cop1.fgr32[index & !1]; let bytes_hi = device.cpu.cop1.fgr32[(index & !1) + 1]; f64::from_ne_bytes([bytes_lo, bytes_hi].concat().try_into().unwrap()) diff --git a/src/device/cop2.rs b/src/device/cop2.rs index 92e3c7a..0f6a884 100644 --- a/src/device/cop2.rs +++ b/src/device/cop2.rs @@ -8,9 +8,7 @@ pub struct Cop2 { } fn mfc2(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU2 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU2 == 0 { return unusable(device, opcode); } device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] = @@ -18,18 +16,14 @@ fn mfc2(device: &mut device::Device, opcode: u32) { } fn dmfc2(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU2 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU2 == 0 { return unusable(device, opcode); } device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] = device.cpu.cop2.reg_latch } fn cfc2(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU2 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU2 == 0 { return unusable(device, opcode); } device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] = @@ -37,27 +31,21 @@ fn cfc2(device: &mut device::Device, opcode: u32) { } fn mtc2(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU2 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU2 == 0 { return unusable(device, opcode); } device.cpu.cop2.reg_latch = device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] } fn dmtc2(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU2 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU2 == 0 { return unusable(device, opcode); } device.cpu.cop2.reg_latch = device.cpu.gpr[device::cpu_instructions::rt(opcode) as usize] } fn ctc2(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU2 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU2 == 0 { return unusable(device, opcode); } @@ -65,9 +53,7 @@ fn ctc2(device: &mut device::Device, opcode: u32) { } pub fn reserved(device: &mut device::Device, opcode: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_CU2 - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_CU2 == 0 { return unusable(device, opcode); } diff --git a/src/device/cpu.rs b/src/device/cpu.rs index ae6028f..46c86f0 100644 --- a/src/device/cpu.rs +++ b/src/device/cpu.rs @@ -300,8 +300,7 @@ pub fn run(device: &mut device::Device) { State::Exception => device.cpu.branch_state.state = State::Step, } device::cop0::add_cycles(device, 1); - if device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] > device.cpu.next_event_count - { + if device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG] > device.cpu.next_event_count { device::events::trigger_event(device) } } diff --git a/src/device/cpu_instructions.rs b/src/device/cpu_instructions.rs index 4843f2b..c8d1f41 100644 --- a/src/device/cpu_instructions.rs +++ b/src/device/cpu_instructions.rs @@ -56,7 +56,7 @@ pub fn check_relative_idle_loop(device: &mut device::Device, opcode: u32) { device::memory::AccessSize::Word, ) == 0 { - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] = device.cpu.next_event_count + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG] = device.cpu.next_event_count } } @@ -68,7 +68,7 @@ fn check_absolute_idle_loop(device: &mut device::Device, target: u64) { device::memory::AccessSize::Word, ) == 0 { - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] = device.cpu.next_event_count + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG] = device.cpu.next_event_count } } @@ -647,17 +647,17 @@ pub fn cache(device: &mut device::Device, opcode: u32) { valid = 1 } device::memory::masked_write_64( - &mut device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize], + &mut device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG], valid << 7, 0x80, ); device::memory::masked_write_64( - &mut device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize], + &mut device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG], 0, 0x40, ); device::memory::masked_write_64( - &mut device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize], + &mut device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG], (device.memory.icache[icache_line].tag >> 4) as u64, 0xFFFFF00, ) @@ -665,10 +665,9 @@ pub fn cache(device: &mut device::Device, opcode: u32) { 0x08 => { //icache store tag device.memory.icache[icache_line].valid = - (device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize] & 0x80) >> 7 != 0; + (device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG] & 0x80) >> 7 != 0; device.memory.icache[icache_line].tag = - ((device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize] & 0xFFFFF00) << 4) - as u32 + ((device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG] & 0xFFFFF00) << 4) as u32 } 0x10 => { //icache hit invalidate @@ -704,17 +703,17 @@ pub fn cache(device: &mut device::Device, opcode: u32) { dirty = 1 } device::memory::masked_write_64( - &mut device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize], + &mut device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG], valid << 7, 0x80, ); device::memory::masked_write_64( - &mut device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize], + &mut device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG], dirty << 6, 0x40, ); device::memory::masked_write_64( - &mut device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize], + &mut device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG], (device.memory.dcache[dcache_line].tag >> 4) as u64, 0xFFFFF00, ) @@ -722,12 +721,11 @@ pub fn cache(device: &mut device::Device, opcode: u32) { 0x09 => { //dcache index store tag device.memory.dcache[dcache_line].valid = - (device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize] & 0x80) >> 7 != 0; + (device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG] & 0x80) >> 7 != 0; device.memory.dcache[dcache_line].dirty = - (device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize] & 0x40) >> 6 != 0; + (device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG] & 0x40) >> 6 != 0; device.memory.dcache[dcache_line].tag = - ((device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG as usize] & 0xFFFFF00) << 4) - as u32 + ((device.cpu.cop0.regs[device::cop0::COP0_TAGLO_REG] & 0xFFFFF00) << 4) as u32 } 0x0D => { //dcache create dirty exclusive @@ -787,7 +785,7 @@ pub fn ll(device: &mut device::Device, opcode: u32) { cached, ) as i32); device.cpu.llbit = true; - device.cpu.cop0.regs[device::cop0::COP0_LLADDR_REG as usize] = phys_address >> 4 + device.cpu.cop0.regs[device::cop0::COP0_LLADDR_REG] = phys_address >> 4 } pub fn lld(device: &mut device::Device, opcode: u32) { @@ -816,7 +814,7 @@ pub fn lld(device: &mut device::Device, opcode: u32) { device.cpu.gpr[rt(opcode) as usize] = ((w[0] as u64) << 32) | (w[1]) as u64; device.cpu.llbit = true; - device.cpu.cop0.regs[device::cop0::COP0_LLADDR_REG as usize] = phys_address >> 4 + device.cpu.cop0.regs[device::cop0::COP0_LLADDR_REG] = phys_address >> 4 } pub fn ld(device: &mut device::Device, opcode: u32) { diff --git a/src/device/events.rs b/src/device/events.rs index 49d853b..56a968a 100644 --- a/src/device/events.rs +++ b/src/device/events.rs @@ -26,7 +26,7 @@ pub struct Event { pub fn create_event(device: &mut device::Device, name: usize, when: u64) { device.cpu.events[name] = Event { enabled: true, - count: device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + when, + count: device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG] + when, }; set_next_event(device); } diff --git a/src/device/exceptions.rs b/src/device/exceptions.rs index f244fa7..e11281b 100644 --- a/src/device/exceptions.rs +++ b/src/device/exceptions.rs @@ -2,7 +2,7 @@ use crate::device; use crate::ui; pub fn check_pending_interrupts(device: &mut device::Device) { - if (device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] + if (device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & (device::cop0::COP0_STATUS_IE | device::cop0::COP0_STATUS_EXL | device::cop0::COP0_STATUS_ERL)) @@ -12,17 +12,14 @@ pub fn check_pending_interrupts(device: &mut device::Device) { return; } - if device.mi.regs[device::mi::MI_INTR_REG as usize] - & device.mi.regs[device::mi::MI_INTR_MASK_REG as usize] - != 0 - { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] |= device::cop0::COP0_CAUSE_IP2; - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= + if device.mi.regs[device::mi::MI_INTR_REG] & device.mi.regs[device::mi::MI_INTR_MASK_REG] != 0 { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] |= device::cop0::COP0_CAUSE_IP2; + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] &= !device::cop0::COP0_CAUSE_EXCCODE_MASK; } - if (device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] - & device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] + if (device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] + & device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] & device::cop0::COP0_CAUSE_IP_MASK) == 0 { @@ -42,43 +39,37 @@ pub fn interrupt_exception(device: &mut device::Device) { } pub fn floating_point_exception(device: &mut device::Device) { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = - device::cop0::COP0_CAUSE_EXCCODE_FPE; + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] = device::cop0::COP0_CAUSE_EXCCODE_FPE; exception_general(device, 0x180) } pub fn trap_exception(device: &mut device::Device) { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = - device::cop0::COP0_CAUSE_EXCCODE_TR; + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] = device::cop0::COP0_CAUSE_EXCCODE_TR; exception_general(device, 0x180) } pub fn syscall_exception(device: &mut device::Device) { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = - device::cop0::COP0_CAUSE_EXCCODE_SYS; + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] = device::cop0::COP0_CAUSE_EXCCODE_SYS; exception_general(device, 0x180) } pub fn break_exception(device: &mut device::Device) { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = - device::cop0::COP0_CAUSE_EXCCODE_BP; + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] = device::cop0::COP0_CAUSE_EXCCODE_BP; exception_general(device, 0x180) } pub fn reserved_exception(device: &mut device::Device, cop: u64) { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = - device::cop0::COP0_CAUSE_EXCCODE_RI | cop; + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] = device::cop0::COP0_CAUSE_EXCCODE_RI | cop; exception_general(device, 0x180) } pub fn cop_unusable_exception(device: &mut device::Device, cop: u64) { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = - device::cop0::COP0_CAUSE_EXCCODE_CPU | cop; + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] = device::cop0::COP0_CAUSE_EXCCODE_CPU | cop; exception_general(device, 0x180) } @@ -89,31 +80,29 @@ pub fn tlb_miss_exception( access_type: device::memory::AccessType, ) { if access_type == device::memory::AccessType::Read { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = - device::cop0::COP0_CAUSE_EXCCODE_TLBL + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] = device::cop0::COP0_CAUSE_EXCCODE_TLBL } else { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = - device::cop0::COP0_CAUSE_EXCCODE_TLBS + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] = device::cop0::COP0_CAUSE_EXCCODE_TLBS } - device.cpu.cop0.regs[device::cop0::COP0_BADVADDR_REG as usize] = address; + device.cpu.cop0.regs[device::cop0::COP0_BADVADDR_REG] = address; device::memory::masked_write_64( - &mut device.cpu.cop0.regs[device::cop0::COP0_CONTEXT_REG as usize], + &mut device.cpu.cop0.regs[device::cop0::COP0_CONTEXT_REG], address >> 9, device::cop0::COP0_CONTEXT_BADVPN2_MASK, ); device::memory::masked_write_64( - &mut device.cpu.cop0.regs[device::cop0::COP0_XCONTEXT_REG as usize], + &mut device.cpu.cop0.regs[device::cop0::COP0_XCONTEXT_REG], address >> 9, device::cop0::COP0_XCONTEXT_BADVPN2_MASK, ); device::memory::masked_write_64( - &mut device.cpu.cop0.regs[device::cop0::COP0_XCONTEXT_REG as usize], + &mut device.cpu.cop0.regs[device::cop0::COP0_XCONTEXT_REG], address >> 31, device::cop0::COP0_XCONTEXT_REGION_MASK, ); device::memory::masked_write_64( - &mut device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize], + &mut device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG], address, 0xFFFFE000, ); @@ -124,7 +113,7 @@ pub fn tlb_miss_exception( if address & !3 >= i.start_even && address & !3 <= i.end_even { valid = i.v_even != 0; if valid && access_type == device::memory::AccessType::Write && i.d_even == 0 { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] = device::cop0::COP0_CAUSE_EXCCODE_MOD; valid = false; } @@ -133,7 +122,7 @@ pub fn tlb_miss_exception( if address & !3 >= i.start_odd && address & !3 <= i.end_odd { valid = i.v_odd != 0; if valid && access_type == device::memory::AccessType::Write && i.d_odd == 0 { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] = + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] = device::cop0::COP0_CAUSE_EXCCODE_MOD; valid = false; } @@ -141,8 +130,7 @@ pub fn tlb_miss_exception( } } - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_EXL - == 0 + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_EXL == 0 && valid { vector_offset = 0; @@ -152,17 +140,17 @@ pub fn tlb_miss_exception( } pub fn reset_event(device: &mut device::Device) { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= !device::cop0::COP0_CAUSE_IP4; + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] &= !device::cop0::COP0_CAUSE_IP4; - device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] |= device::cop0::COP0_STATUS_ERL + device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] |= device::cop0::COP0_STATUS_ERL | device::cop0::COP0_STATUS_SR | device::cop0::COP0_STATUS_BEV; - device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] &= !device::cop0::COP0_STATUS_TS; + device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] &= !device::cop0::COP0_STATUS_TS; - device.cpu.cop0.regs[device::cop0::COP0_ERROREPC_REG as usize] = device.cpu.pc; + device.cpu.cop0.regs[device::cop0::COP0_ERROREPC_REG] = device.cpu.pc; device.cpu.pc = 0xBFC00000; device.cpu.branch_state.state = device::cpu::State::Step; - device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] = 0; + device.rsp.regs2[device::rsp_interface::SP_PC_REG] = 0; device::pif::reset_pif(device, true); @@ -170,25 +158,19 @@ pub fn reset_event(device: &mut device::Device) { } fn exception_general(device: &mut device::Device, vector_offset: u32) { - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_EXL - == 0 - { - device.cpu.cop0.regs[device::cop0::COP0_EPC_REG as usize] = device.cpu.pc; + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_EXL == 0 { + device.cpu.cop0.regs[device::cop0::COP0_EPC_REG] = device.cpu.pc; if device::cpu::in_delay_slot(device) { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] |= - device::cop0::COP0_CAUSE_BD; - device.cpu.cop0.regs[device::cop0::COP0_EPC_REG as usize] -= 4; + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] |= device::cop0::COP0_CAUSE_BD; + device.cpu.cop0.regs[device::cop0::COP0_EPC_REG] -= 4; } else { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= - !device::cop0::COP0_CAUSE_BD; + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] &= !device::cop0::COP0_CAUSE_BD; } } - device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] |= device::cop0::COP0_STATUS_EXL; + device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] |= device::cop0::COP0_STATUS_EXL; - if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG as usize] & device::cop0::COP0_STATUS_BEV - == 0 - { + if device.cpu.cop0.regs[device::cop0::COP0_STATUS_REG] & device::cop0::COP0_STATUS_BEV == 0 { device.cpu.pc = device::cpu_instructions::se32((0x80000000 + vector_offset) as i32); } else { device.cpu.pc = device::cpu_instructions::se32((0xBFC00200 + vector_offset) as i32); diff --git a/src/device/mi.rs b/src/device/mi.rs index 66ed9f3..4373fd9 100644 --- a/src/device/mi.rs +++ b/src/device/mi.rs @@ -1,10 +1,10 @@ use crate::device; -pub const MI_INIT_MODE_REG: u32 = 0; -const MI_VERSION_REG: u32 = 1; -pub const MI_INTR_REG: u32 = 2; -pub const MI_INTR_MASK_REG: u32 = 3; -pub const MI_REGS_COUNT: u32 = 4; +pub const MI_INIT_MODE_REG: usize = 0; +const MI_VERSION_REG: usize = 1; +pub const MI_INTR_REG: usize = 2; +pub const MI_INTR_MASK_REG: usize = 3; +pub const MI_REGS_COUNT: usize = 4; /* read */ pub const MI_INTR_SP: u32 = 1 << 0; @@ -46,7 +46,7 @@ pub const MI_INIT_LENGTH_MASK: u32 = 0b1111111; #[derive(serde::Serialize, serde::Deserialize)] pub struct Mi { - pub regs: [u32; MI_REGS_COUNT as usize], + pub regs: [u32; MI_REGS_COUNT], } pub fn read_regs( @@ -60,46 +60,45 @@ pub fn read_regs( pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { let reg = (address & 0xFFFF) >> 2; - match reg as u32 { + match reg as usize { MI_INIT_MODE_REG => update_init_mode(device, value), MI_INTR_MASK_REG => update_intr_mask(device, value), _ => device::memory::masked_write_32(&mut device.mi.regs[reg as usize], value, mask), } - if device.mi.regs[MI_INTR_REG as usize] & device.mi.regs[MI_INTR_MASK_REG as usize] == 0 { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= - !device::cop0::COP0_CAUSE_IP2; + if device.mi.regs[MI_INTR_REG] & device.mi.regs[MI_INTR_MASK_REG] == 0 { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] &= !device::cop0::COP0_CAUSE_IP2; } device::exceptions::check_pending_interrupts(device) } fn update_init_mode(device: &mut device::Device, w: u32) { - device.mi.regs[MI_INIT_MODE_REG as usize] &= !MI_INIT_LENGTH_MASK; - device.mi.regs[MI_INIT_MODE_REG as usize] |= w & MI_INIT_LENGTH_MASK; + device.mi.regs[MI_INIT_MODE_REG] &= !MI_INIT_LENGTH_MASK; + device.mi.regs[MI_INIT_MODE_REG] |= w & MI_INIT_LENGTH_MASK; if w & MI_CLR_INIT != 0 { for i in 0..(0x3F00000 >> 16) { device.memory.memory_map_write[i] = device::rdram::write_mem; } - device.mi.regs[MI_INIT_MODE_REG as usize] &= !MI_INIT_MODE + device.mi.regs[MI_INIT_MODE_REG] &= !MI_INIT_MODE } if w & MI_SET_INIT != 0 { for i in 0..(0x3F00000 >> 16) { device.memory.memory_map_write[i] = device::rdram::write_mem_repeat; } - device.mi.regs[MI_INIT_MODE_REG as usize] |= MI_INIT_MODE + device.mi.regs[MI_INIT_MODE_REG] |= MI_INIT_MODE } if w & MI_CLR_EBUS != 0 { - device.mi.regs[MI_INIT_MODE_REG as usize] &= !MI_EBUS_MODE + device.mi.regs[MI_INIT_MODE_REG] &= !MI_EBUS_MODE } if w & MI_SET_EBUS != 0 { - device.mi.regs[MI_INIT_MODE_REG as usize] |= MI_EBUS_MODE + device.mi.regs[MI_INIT_MODE_REG] |= MI_EBUS_MODE } if w & MI_CLR_RDRAM != 0 { - device.mi.regs[MI_INIT_MODE_REG as usize] &= !MI_RDRAM_MODE + device.mi.regs[MI_INIT_MODE_REG] &= !MI_RDRAM_MODE } if w & MI_SET_RDRAM != 0 { - device.mi.regs[MI_INIT_MODE_REG as usize] |= MI_RDRAM_MODE + device.mi.regs[MI_INIT_MODE_REG] |= MI_RDRAM_MODE } if w & MI_CLR_DP_INTR != 0 { @@ -109,57 +108,56 @@ fn update_init_mode(device: &mut device::Device, w: u32) { fn update_intr_mask(device: &mut device::Device, w: u32) { if w & MI_CLR_SP != 0 { - device.mi.regs[MI_INTR_MASK_REG as usize] &= !MI_INTR_SP + device.mi.regs[MI_INTR_MASK_REG] &= !MI_INTR_SP } if w & MI_SET_SP != 0 { - device.mi.regs[MI_INTR_MASK_REG as usize] |= MI_INTR_SP + device.mi.regs[MI_INTR_MASK_REG] |= MI_INTR_SP } if w & MI_CLR_SI != 0 { - device.mi.regs[MI_INTR_MASK_REG as usize] &= !MI_INTR_SI + device.mi.regs[MI_INTR_MASK_REG] &= !MI_INTR_SI } if w & MI_SET_SI != 0 { - device.mi.regs[MI_INTR_MASK_REG as usize] |= MI_INTR_SI + device.mi.regs[MI_INTR_MASK_REG] |= MI_INTR_SI } if w & MI_CLR_AI != 0 { - device.mi.regs[MI_INTR_MASK_REG as usize] &= !MI_INTR_AI + device.mi.regs[MI_INTR_MASK_REG] &= !MI_INTR_AI } if w & MI_SET_AI != 0 { - device.mi.regs[MI_INTR_MASK_REG as usize] |= MI_INTR_AI + device.mi.regs[MI_INTR_MASK_REG] |= MI_INTR_AI } if w & MI_CLR_VI != 0 { - device.mi.regs[MI_INTR_MASK_REG as usize] &= !MI_INTR_VI + device.mi.regs[MI_INTR_MASK_REG] &= !MI_INTR_VI } if w & MI_SET_VI != 0 { - device.mi.regs[MI_INTR_MASK_REG as usize] |= MI_INTR_VI + device.mi.regs[MI_INTR_MASK_REG] |= MI_INTR_VI } if w & MI_CLR_PI != 0 { - device.mi.regs[MI_INTR_MASK_REG as usize] &= !MI_INTR_PI + device.mi.regs[MI_INTR_MASK_REG] &= !MI_INTR_PI } if w & MI_SET_PI != 0 { - device.mi.regs[MI_INTR_MASK_REG as usize] |= MI_INTR_PI + device.mi.regs[MI_INTR_MASK_REG] |= MI_INTR_PI } if w & MI_CLR_DP != 0 { - device.mi.regs[MI_INTR_MASK_REG as usize] &= !MI_INTR_DP + device.mi.regs[MI_INTR_MASK_REG] &= !MI_INTR_DP } if w & MI_SET_DP != 0 { - device.mi.regs[MI_INTR_MASK_REG as usize] |= MI_INTR_DP + device.mi.regs[MI_INTR_MASK_REG] |= MI_INTR_DP } } pub fn clear_rcp_interrupt(device: &mut device::Device, interrupt: u32) { - device.mi.regs[MI_INTR_REG as usize] &= !interrupt; + device.mi.regs[MI_INTR_REG] &= !interrupt; - if device.mi.regs[MI_INTR_REG as usize] & device.mi.regs[MI_INTR_MASK_REG as usize] == 0 { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= - !device::cop0::COP0_CAUSE_IP2; + if device.mi.regs[MI_INTR_REG] & device.mi.regs[MI_INTR_MASK_REG] == 0 { + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] &= !device::cop0::COP0_CAUSE_IP2; } } pub fn set_rcp_interrupt(device: &mut device::Device, interrupt: u32) { - device.mi.regs[MI_INTR_REG as usize] |= interrupt; + device.mi.regs[MI_INTR_REG] |= interrupt; device::exceptions::check_pending_interrupts(device) } pub fn init(device: &mut device::Device) { - device.mi.regs[MI_VERSION_REG as usize] = 0x02020102 + device.mi.regs[MI_VERSION_REG] = 0x02020102 } diff --git a/src/device/pi.rs b/src/device/pi.rs index 8de8c2f..90a918a 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -2,21 +2,21 @@ use crate::device; use crate::ui; use rand::Rng; -const PI_DRAM_ADDR_REG: u32 = 0; -const PI_CART_ADDR_REG: u32 = 1; -const PI_RD_LEN_REG: u32 = 2; -const PI_WR_LEN_REG: u32 = 3; -pub const PI_STATUS_REG: u32 = 4; -const PI_BSD_DOM1_LAT_REG: u32 = 5; -const PI_BSD_DOM1_PWD_REG: u32 = 6; -const PI_BSD_DOM1_PGS_REG: u32 = 7; -const PI_BSD_DOM1_RLS_REG: u32 = 8; -const PI_BSD_DOM2_LAT_REG: u32 = 9; -const PI_BSD_DOM2_PWD_REG: u32 = 10; -const PI_BSD_DOM2_PGS_REG: u32 = 11; -const PI_BSD_DOM2_RLS_REG: u32 = 12; -//const UNKNOWN_REG: u32 = 13; //LibDragon -pub const PI_REGS_COUNT: u32 = 14; +const PI_DRAM_ADDR_REG: usize = 0; +const PI_CART_ADDR_REG: usize = 1; +const PI_RD_LEN_REG: usize = 2; +const PI_WR_LEN_REG: usize = 3; +pub const PI_STATUS_REG: usize = 4; +const PI_BSD_DOM1_LAT_REG: usize = 5; +const PI_BSD_DOM1_PWD_REG: usize = 6; +const PI_BSD_DOM1_PGS_REG: usize = 7; +const PI_BSD_DOM1_RLS_REG: usize = 8; +const PI_BSD_DOM2_LAT_REG: usize = 9; +const PI_BSD_DOM2_PWD_REG: usize = 10; +const PI_BSD_DOM2_PGS_REG: usize = 11; +const PI_BSD_DOM2_RLS_REG: usize = 12; +//const UNKNOWN_REG: usize = 13; //LibDragon +pub const PI_REGS_COUNT: usize = 14; /* PI_STATUS - read */ const PI_STATUS_DMA_BUSY: u32 = 1 << 0; @@ -30,7 +30,7 @@ const PI_STATUS_CLR_INTR: u32 = 1 << 1; #[derive(serde::Serialize, serde::Deserialize)] pub struct Pi { - pub regs: [u32; PI_REGS_COUNT as usize], + pub regs: [u32; PI_REGS_COUNT], } struct PiHandler { @@ -45,7 +45,7 @@ pub fn read_regs( ) -> u32 { device::cop0::add_cycles(device, 20); let reg = (address & 0xFFFF) >> 2; - match reg as u32 { + match reg as usize { PI_WR_LEN_REG | PI_RD_LEN_REG => 0x7F, PI_CART_ADDR_REG => device.pi.regs[reg as usize] & 0xFFFFFFFE, PI_DRAM_ADDR_REG => device.pi.regs[reg as usize] & 0xFFFFFE, @@ -54,11 +54,11 @@ pub fn read_regs( } fn dma_read(device: &mut device::Device) { - let handler = get_handler(device.pi.regs[PI_CART_ADDR_REG as usize]); + let handler = get_handler(device.pi.regs[PI_CART_ADDR_REG]); - let cart_addr = device.pi.regs[PI_CART_ADDR_REG as usize] & !1; - let dram_addr = device.pi.regs[PI_DRAM_ADDR_REG as usize] & 0xFFFFFE; - let mut length = (device.pi.regs[PI_RD_LEN_REG as usize] & 0xFFFFFF) + 1; + let cart_addr = device.pi.regs[PI_CART_ADDR_REG] & !1; + let dram_addr = device.pi.regs[PI_DRAM_ADDR_REG] & 0xFFFFFE; + let mut length = (device.pi.regs[PI_RD_LEN_REG] & 0xFFFFFF) + 1; /* PI seems to treat the first 128 bytes differently, see https://n64brew.dev/wiki/Peripheral_Interface#Unaligned_DMA_transfer */ if length >= 0x7f && (length & 1) != 0 { @@ -70,20 +70,18 @@ fn dma_read(device: &mut device::Device) { device::events::create_event(device, device::events::EVENT_TYPE_PI, cycles); /* Update PI_DRAM_ADDR_REG and PI_CART_ADDR_REG */ - device.pi.regs[PI_DRAM_ADDR_REG as usize] = - (device.pi.regs[PI_DRAM_ADDR_REG as usize] + length + 7) & !7; - device.pi.regs[PI_CART_ADDR_REG as usize] = - (device.pi.regs[PI_CART_ADDR_REG as usize] + length + 1) & !1; + device.pi.regs[PI_DRAM_ADDR_REG] = (device.pi.regs[PI_DRAM_ADDR_REG] + length + 7) & !7; + device.pi.regs[PI_CART_ADDR_REG] = (device.pi.regs[PI_CART_ADDR_REG] + length + 1) & !1; - device.pi.regs[PI_STATUS_REG as usize] |= PI_STATUS_DMA_BUSY + device.pi.regs[PI_STATUS_REG] |= PI_STATUS_DMA_BUSY } fn dma_write(device: &mut device::Device) { - let handler = get_handler(device.pi.regs[PI_CART_ADDR_REG as usize]); + let handler = get_handler(device.pi.regs[PI_CART_ADDR_REG]); - let cart_addr = device.pi.regs[PI_CART_ADDR_REG as usize] & !1; - let dram_addr = device.pi.regs[PI_DRAM_ADDR_REG as usize] & 0xFFFFFE; - let mut length = (device.pi.regs[PI_WR_LEN_REG as usize] & 0xFFFFFF) + 1; + let cart_addr = device.pi.regs[PI_CART_ADDR_REG] & !1; + let dram_addr = device.pi.regs[PI_DRAM_ADDR_REG] & 0xFFFFFE; + let mut length = (device.pi.regs[PI_WR_LEN_REG] & 0xFFFFFF) + 1; /* PI seems to treat the first 128 bytes differently, see https://n64brew.dev/wiki/Peripheral_Interface#Unaligned_DMA_transfer */ if length >= 0x7f && (length & 1) != 0 { @@ -101,12 +99,10 @@ fn dma_write(device: &mut device::Device) { device::events::create_event(device, device::events::EVENT_TYPE_PI, cycles); /* Update PI_DRAM_ADDR_REG and PI_CART_ADDR_REG */ - device.pi.regs[PI_DRAM_ADDR_REG as usize] = - (device.pi.regs[PI_DRAM_ADDR_REG as usize] + length + 7) & !7; - device.pi.regs[PI_CART_ADDR_REG as usize] = - (device.pi.regs[PI_CART_ADDR_REG as usize] + length + 1) & !1; + device.pi.regs[PI_DRAM_ADDR_REG] = (device.pi.regs[PI_DRAM_ADDR_REG] + length + 7) & !7; + device.pi.regs[PI_CART_ADDR_REG] = (device.pi.regs[PI_CART_ADDR_REG] + length + 1) & !1; - device.pi.regs[PI_STATUS_REG as usize] |= PI_STATUS_DMA_BUSY + device.pi.regs[PI_STATUS_REG] |= PI_STATUS_DMA_BUSY } fn get_handler(address: u32) -> PiHandler { @@ -138,7 +134,7 @@ fn get_handler(address: u32) -> PiHandler { pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { let reg = (address & 0xFFFF) >> 2; - match reg as u32 { + match reg as usize { PI_RD_LEN_REG => { device::memory::masked_write_32(&mut device.pi.regs[reg as usize], value, mask); device::pi::dma_read(device) @@ -153,7 +149,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u device::mi::clear_rcp_interrupt(device, device::mi::MI_INTR_PI); } if value & mask & PI_STATUS_RESET != 0 { - device.pi.regs[PI_STATUS_REG as usize] = 0 + device.pi.regs[PI_STATUS_REG] = 0 } } PI_BSD_DOM1_LAT_REG | PI_BSD_DOM1_PWD_REG | PI_BSD_DOM2_LAT_REG | PI_BSD_DOM2_PWD_REG => { @@ -179,15 +175,15 @@ pub fn calculate_cycles(device: &mut device::Device, domain: i32, length: u32) - let page_size_base: f64 = 2.0; if domain == 1 { - latency = (device.pi.regs[PI_BSD_DOM1_LAT_REG as usize] + 1) as f64; - pulse_width = (device.pi.regs[PI_BSD_DOM1_PWD_REG as usize] + 1) as f64; - release = (device.pi.regs[PI_BSD_DOM1_RLS_REG as usize] + 1) as f64; - page_size = page_size_base.powf((device.pi.regs[PI_BSD_DOM1_PGS_REG as usize] + 2) as f64); + latency = (device.pi.regs[PI_BSD_DOM1_LAT_REG] + 1) as f64; + pulse_width = (device.pi.regs[PI_BSD_DOM1_PWD_REG] + 1) as f64; + release = (device.pi.regs[PI_BSD_DOM1_RLS_REG] + 1) as f64; + page_size = page_size_base.powf((device.pi.regs[PI_BSD_DOM1_PGS_REG] + 2) as f64); } else if domain == 2 { - latency = (device.pi.regs[PI_BSD_DOM2_LAT_REG as usize] + 1) as f64; - pulse_width = (device.pi.regs[PI_BSD_DOM2_PWD_REG as usize] + 1) as f64; - release = (device.pi.regs[PI_BSD_DOM2_RLS_REG as usize] + 1) as f64; - page_size = page_size_base.powf((device.pi.regs[PI_BSD_DOM2_PGS_REG as usize] + 2) as f64); + latency = (device.pi.regs[PI_BSD_DOM2_LAT_REG] + 1) as f64; + pulse_width = (device.pi.regs[PI_BSD_DOM2_PWD_REG] + 1) as f64; + release = (device.pi.regs[PI_BSD_DOM2_RLS_REG] + 1) as f64; + page_size = page_size_base.powf((device.pi.regs[PI_BSD_DOM2_PGS_REG] + 2) as f64); } else { panic!("unknown pi dma") } @@ -201,8 +197,8 @@ pub fn calculate_cycles(device: &mut device::Device, domain: i32, length: u32) - } pub fn dma_event(device: &mut device::Device) { - device.pi.regs[PI_STATUS_REG as usize] &= !(PI_STATUS_DMA_BUSY | PI_STATUS_IO_BUSY); - device.pi.regs[PI_STATUS_REG as usize] |= PI_STATUS_INTERRUPT; + device.pi.regs[PI_STATUS_REG] &= !(PI_STATUS_DMA_BUSY | PI_STATUS_IO_BUSY); + device.pi.regs[PI_STATUS_REG] |= PI_STATUS_INTERRUPT; device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_PI) } diff --git a/src/device/pif.rs b/src/device/pif.rs index af05ef6..e36fb7e 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -68,7 +68,7 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 device.si.dma_dir = device::si::DmaDir::Write; device::events::create_event(device, device::events::EVENT_TYPE_SI, 3200); //based on https://github.com/rasky/n64-systembench - device.si.regs[device::si::SI_STATUS_REG as usize] |= + device.si.regs[device::si::SI_STATUS_REG] |= device::si::SI_STATUS_DMA_BUSY | device::si::SI_STATUS_IO_BUSY } diff --git a/src/device/rdp.rs b/src/device/rdp.rs index 7b8164e..d066ff2 100644 --- a/src/device/rdp.rs +++ b/src/device/rdp.rs @@ -1,20 +1,20 @@ use crate::{device, savestates, ui}; -pub const DPC_START_REG: u32 = 0; -pub const DPC_END_REG: u32 = 1; -pub const DPC_CURRENT_REG: u32 = 2; -pub const DPC_STATUS_REG: u32 = 3; -const DPC_CLOCK_REG: u32 = 4; -const DPC_BUFBUSY_REG: u32 = 5; -const DPC_PIPEBUSY_REG: u32 = 6; -const DPC_TMEM_REG: u32 = 7; -pub const DPC_REGS_COUNT: u32 = 8; +pub const DPC_START_REG: usize = 0; +pub const DPC_END_REG: usize = 1; +pub const DPC_CURRENT_REG: usize = 2; +pub const DPC_STATUS_REG: usize = 3; +const DPC_CLOCK_REG: usize = 4; +const DPC_BUFBUSY_REG: usize = 5; +const DPC_PIPEBUSY_REG: usize = 6; +const DPC_TMEM_REG: usize = 7; +pub const DPC_REGS_COUNT: usize = 8; -//const DPS_TBIST_REG: u32 = 0; -//const DPS_TEST_MODE_REG: u32 = 1; -//const DPS_BUFTEST_ADDR_REG: u32 = 2; -//const DPS_BUFTEST_DATA_REG: u32 = 3; -pub const DPS_REGS_COUNT: u32 = 4; +//const DPS_TBIST_REG: usize = 0; +//const DPS_TEST_MODE_REG: usize = 1; +//const DPS_BUFTEST_ADDR_REG: usize = 2; +//const DPS_BUFTEST_DATA_REG: usize = 3; +pub const DPS_REGS_COUNT: usize = 4; /* DPC status - read */ const DPC_STATUS_XBUS_DMEM_DMA: u32 = 1 << 0; @@ -42,8 +42,8 @@ const DPC_CLR_CLOCK_CTR: u32 = 1 << 9; #[derive(serde::Serialize, serde::Deserialize)] pub struct Rdp { - pub regs_dpc: [u32; DPC_REGS_COUNT as usize], - pub regs_dps: [u32; DPS_REGS_COUNT as usize], + pub regs_dpc: [u32; DPC_REGS_COUNT], + pub regs_dps: [u32; DPS_REGS_COUNT], pub wait_frozen: bool, pub last_status_value: u32, } @@ -57,7 +57,7 @@ pub fn read_regs_dpc( device::cop0::add_cycles(device, 20); } let reg = (address & 0xFFFF) >> 2; - match reg as u32 { + match reg as usize { DPC_STATUS_REG => { let value = device.rdp.regs_dpc[reg as usize] & (DPC_STATUS_PIPE_BUSY | DPC_STATUS_CMD_BUSY); @@ -80,18 +80,18 @@ pub fn read_regs_dpc( pub fn write_regs_dpc(device: &mut device::Device, address: u64, value: u32, mask: u32) { let reg = (address & 0xFFFF) >> 2; - match reg as u32 { + match reg as usize { DPC_CURRENT_REG | DPC_CLOCK_REG | DPC_BUFBUSY_REG | DPC_PIPEBUSY_REG | DPC_TMEM_REG => {} DPC_STATUS_REG => update_dpc_status(device, value & mask), DPC_START_REG => { - if (device.rdp.regs_dpc[DPC_STATUS_REG as usize] & DPC_STATUS_START_VALID) == 0 { + if (device.rdp.regs_dpc[DPC_STATUS_REG] & DPC_STATUS_START_VALID) == 0 { device::memory::masked_write_32( &mut device.rdp.regs_dpc[reg as usize], value & 0xFFFFF8, mask, ) } - device.rdp.regs_dpc[DPC_STATUS_REG as usize] |= DPC_STATUS_START_VALID + device.rdp.regs_dpc[DPC_STATUS_REG] |= DPC_STATUS_START_VALID } DPC_END_REG => { device::memory::masked_write_32( @@ -99,12 +99,11 @@ pub fn write_regs_dpc(device: &mut device::Device, address: u64, value: u32, mas value & 0xFFFFF8, mask, ); - if (device.rdp.regs_dpc[DPC_STATUS_REG as usize] & DPC_STATUS_START_VALID) != 0 { - device.rdp.regs_dpc[DPC_CURRENT_REG as usize] = - device.rdp.regs_dpc[DPC_START_REG as usize]; - device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !DPC_STATUS_START_VALID + if (device.rdp.regs_dpc[DPC_STATUS_REG] & DPC_STATUS_START_VALID) != 0 { + device.rdp.regs_dpc[DPC_CURRENT_REG] = device.rdp.regs_dpc[DPC_START_REG]; + device.rdp.regs_dpc[DPC_STATUS_REG] &= !DPC_STATUS_START_VALID } - if device.rdp.regs_dpc[DPC_STATUS_REG as usize] & DPC_STATUS_FREEZE == 0 { + if device.rdp.regs_dpc[DPC_STATUS_REG] & DPC_STATUS_FREEZE == 0 { run_rdp(device) } else { device.rdp.wait_frozen = true; @@ -116,9 +115,9 @@ pub fn write_regs_dpc(device: &mut device::Device, address: u64, value: u32, mas fn run_rdp(device: &mut device::Device) { let timer = ui::video::process_rdp_list(); - device.rdp.regs_dpc[DPC_STATUS_REG as usize] |= + device.rdp.regs_dpc[DPC_STATUS_REG] |= DPC_STATUS_START_GCLK | DPC_STATUS_PIPE_BUSY | DPC_STATUS_CMD_BUSY; - device.rdp.regs_dpc[DPC_PIPEBUSY_REG as usize] = 0xFFFFFF; + device.rdp.regs_dpc[DPC_PIPEBUSY_REG] = 0xFFFFFF; if timer != 0 { if device.save_state { @@ -154,59 +153,59 @@ pub fn write_regs_dps(device: &mut device::Device, address: u64, value: u32, mas fn update_dpc_status(device: &mut device::Device, w: u32) { /* clear / set xbus_dmem_dma */ if w & DPC_CLR_XBUS_DMEM_DMA != 0 { - device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !DPC_STATUS_XBUS_DMEM_DMA + device.rdp.regs_dpc[DPC_STATUS_REG] &= !DPC_STATUS_XBUS_DMEM_DMA } if w & DPC_SET_XBUS_DMEM_DMA != 0 { - device.rdp.regs_dpc[DPC_STATUS_REG as usize] |= DPC_STATUS_XBUS_DMEM_DMA + device.rdp.regs_dpc[DPC_STATUS_REG] |= DPC_STATUS_XBUS_DMEM_DMA } /* clear / set freeze */ if w & DPC_CLR_FREEZE != 0 { - device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !DPC_STATUS_FREEZE; + device.rdp.regs_dpc[DPC_STATUS_REG] &= !DPC_STATUS_FREEZE; if device.rdp.wait_frozen { run_rdp(device); device.rdp.wait_frozen = false; } } if w & DPC_SET_FREEZE != 0 { - device.rdp.regs_dpc[DPC_STATUS_REG as usize] |= DPC_STATUS_FREEZE; + device.rdp.regs_dpc[DPC_STATUS_REG] |= DPC_STATUS_FREEZE; } /* clear / set flush */ if w & DPC_CLR_FLUSH != 0 { - device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !DPC_STATUS_FLUSH + device.rdp.regs_dpc[DPC_STATUS_REG] &= !DPC_STATUS_FLUSH } if w & DPC_SET_FLUSH != 0 { - device.rdp.regs_dpc[DPC_STATUS_REG as usize] |= DPC_STATUS_FLUSH + device.rdp.regs_dpc[DPC_STATUS_REG] |= DPC_STATUS_FLUSH } if w & DPC_CLR_TMEM_CTR != 0 { - device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !DPC_STATUS_TMEM_BUSY; - device.rdp.regs_dpc[DPC_TMEM_REG as usize] = 0 + device.rdp.regs_dpc[DPC_STATUS_REG] &= !DPC_STATUS_TMEM_BUSY; + device.rdp.regs_dpc[DPC_TMEM_REG] = 0 } if w & DPC_CLR_PIPE_CTR != 0 { - device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !DPC_STATUS_PIPE_BUSY; - device.rdp.regs_dpc[DPC_PIPEBUSY_REG as usize] = 0 + device.rdp.regs_dpc[DPC_STATUS_REG] &= !DPC_STATUS_PIPE_BUSY; + device.rdp.regs_dpc[DPC_PIPEBUSY_REG] = 0 } if w & DPC_CLR_CMD_CTR != 0 { - device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= !DPC_STATUS_CMD_BUSY; - device.rdp.regs_dpc[DPC_BUFBUSY_REG as usize] = 0 + device.rdp.regs_dpc[DPC_STATUS_REG] &= !DPC_STATUS_CMD_BUSY; + device.rdp.regs_dpc[DPC_BUFBUSY_REG] = 0 } /* clear clock counter */ if w & DPC_CLR_CLOCK_CTR != 0 { - device.rdp.regs_dpc[DPC_CLOCK_REG as usize] = 0 + device.rdp.regs_dpc[DPC_CLOCK_REG] = 0 } } pub fn init(device: &mut device::Device) { - device.rdp.regs_dpc[DPC_STATUS_REG as usize] |= + device.rdp.regs_dpc[DPC_STATUS_REG] |= DPC_STATUS_START_GCLK | DPC_STATUS_PIPE_BUSY | DPC_STATUS_CBUF_READY; - device.rdp.regs_dpc[DPC_PIPEBUSY_REG as usize] = 0xFFFFFF; + device.rdp.regs_dpc[DPC_PIPEBUSY_REG] = 0xFFFFFF; } pub fn rdp_interrupt_event(device: &mut device::Device) { - device.rdp.regs_dpc[DPC_STATUS_REG as usize] &= + device.rdp.regs_dpc[DPC_STATUS_REG] &= !(DPC_STATUS_START_GCLK | DPC_STATUS_PIPE_BUSY | DPC_STATUS_CMD_BUSY); device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_DP) diff --git a/src/device/rdram.rs b/src/device/rdram.rs index 4947800..8114fd2 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -3,17 +3,17 @@ use crate::retroachievements; use crate::ui; use std::alloc::{Layout, alloc_zeroed}; -//const RDRAM_CONFIG_REG: u32 = 0; -//const RDRAM_DEVICE_ID_REG: u32 = 1; -//const RDRAM_DELAY_REG: u32 = 2; -const RDRAM_MODE_REG: u32 = 3; -//const RDRAM_REF_INTERVAL_REG: u32 = 4; -//const RDRAM_REF_ROW_REG: u32 = 5; -//const RDRAM_RAS_INTERVAL_REG: u32 = 6; -//const RDRAM_MIN_INTERVAL_REG: u32 = 7; -//const RDRAM_ADDR_SELECT_REG: u32 = 8; -//const RDRAM_DEVICE_MANUF_REG: u32 = 9; -pub const RDRAM_REGS_COUNT: u32 = 10; +//const RDRAM_CONFIG_REG: usize = 0; +//const RDRAM_DEVICE_ID_REG: usize = 1; +//const RDRAM_DELAY_REG: usize = 2; +const RDRAM_MODE_REG: usize = 3; +//const RDRAM_REF_INTERVAL_REG: usize = 4; +//const RDRAM_REF_ROW_REG: usize = 5; +//const RDRAM_RAS_INTERVAL_REG: usize = 6; +//const RDRAM_MIN_INTERVAL_REG: usize = 7; +//const RDRAM_ADDR_SELECT_REG: usize = 8; +//const RDRAM_DEVICE_MANUF_REG: usize = 9; +pub const RDRAM_REGS_COUNT: usize = 10; pub const RDRAM_MASK: usize = 0xFFFFFF; @@ -21,7 +21,7 @@ pub const RDRAM_MASK: usize = 0xFFFFFF; pub struct Rdram { pub mem: Vec, pub size: u32, - pub regs: [[u32; RDRAM_REGS_COUNT as usize]; 4], + pub regs: [[u32; RDRAM_REGS_COUNT]; 4], } pub fn read_mem_fast( @@ -91,9 +91,8 @@ pub fn write_mem_repeat(device: &mut device::Device, address: u64, value: u32, m panic!("RDRAM write_mem_repeat called with mask {:#x}", mask); } - let repeat_length = (device.mi.regs[device::mi::MI_INIT_MODE_REG as usize] - & device::mi::MI_INIT_LENGTH_MASK) - + 1; + let repeat_length = + (device.mi.regs[device::mi::MI_INIT_MODE_REG] & device::mi::MI_INIT_LENGTH_MASK) + 1; if !repeat_length.is_multiple_of(4) { panic!( @@ -113,7 +112,7 @@ pub fn write_mem_repeat(device: &mut device::Device, address: u64, value: u32, m .copy_from_slice(&value.to_ne_bytes()); } - device.mi.regs[device::mi::MI_INIT_MODE_REG as usize] &= !device::mi::MI_INIT_MODE; + device.mi.regs[device::mi::MI_INIT_MODE_REG] &= !device::mi::MI_INIT_MODE; for i in 0..(0x3F00000 >> 16) { device.memory.memory_map_write[i] = device::rdram::write_mem; } @@ -127,7 +126,7 @@ pub fn read_regs( device::cop0::add_cycles(device, 20); let chip_id = (address >> 13) & 3; let reg = (address & 0x3FF) >> 2; - match reg as u32 { + match reg as usize { RDRAM_MODE_REG => device.pi.regs[reg as usize] ^ 0xc0c0c0c0, 0x80 => 0x00000000, //Row, needed for libdragon _ => device.rdram.regs[chip_id as usize][reg as usize], @@ -169,8 +168,8 @@ pub fn init(device: &mut device::Device) { .unwrap_or(&mut [0; 4]) .copy_from_slice(&device.rdram.size.to_ne_bytes()); - device.ri.regs[device::ri::RI_MODE_REG as usize] = 0x0e; - device.ri.regs[device::ri::RI_CONFIG_REG as usize] = 0x40; + device.ri.regs[device::ri::RI_MODE_REG] = 0x0e; + device.ri.regs[device::ri::RI_CONFIG_REG] = 0x40; } pub fn rdram_calculate_cycles(length: u64) -> u64 { diff --git a/src/device/ri.rs b/src/device/ri.rs index f501a91..3bc1ecf 100644 --- a/src/device/ri.rs +++ b/src/device/ri.rs @@ -1,18 +1,18 @@ use crate::device; -pub const RI_MODE_REG: u32 = 0; -pub const RI_CONFIG_REG: u32 = 1; -//const RI_CURRENT_LOAD_REG: u32 = 2; -pub const RI_SELECT_REG: u32 = 3; -pub const RI_REFRESH_REG: u32 = 4; -//const RI_LATENCY_REG: u32 = 5; -//const RI_ERROR_REG: u32 = 6; -//const RI_WERROR_REG: u32 = 7; -pub const RI_REGS_COUNT: u32 = 8; +pub const RI_MODE_REG: usize = 0; +pub const RI_CONFIG_REG: usize = 1; +//const RI_CURRENT_LOAD_REG: usize = 2; +pub const RI_SELECT_REG: usize = 3; +pub const RI_REFRESH_REG: usize = 4; +//const RI_LATENCY_REG: usize = 5; +//const RI_ERROR_REG: usize = 6; +//const RI_WERROR_REG: usize = 7; +pub const RI_REGS_COUNT: usize = 8; #[derive(serde::Serialize, serde::Deserialize)] pub struct Ri { - pub regs: [u32; RI_REGS_COUNT as usize], + pub regs: [u32; RI_REGS_COUNT], pub ram_init: bool, } @@ -23,7 +23,7 @@ pub fn read_regs( ) -> u32 { device::cop0::add_cycles(device, 20); let reg = (address & 0xFFFF) >> 2; - match reg as u32 { + match reg as usize { RI_SELECT_REG => { if !device.ri.ram_init { device::cop0::add_cycles(device, device.cpu.clock_rate / 2); // hack, simulate RDRAM initialization @@ -38,7 +38,7 @@ pub fn read_regs( pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { let reg = (address & 0xFFFF) >> 2; - if reg as u32 == RI_SELECT_REG { + if reg as usize == RI_SELECT_REG { device.ri.ram_init = false; } device::memory::masked_write_32(&mut device.ri.regs[reg as usize], value, mask); diff --git a/src/device/rsp_cpu.rs b/src/device/rsp_cpu.rs index 7e382a6..21d67f5 100644 --- a/src/device/rsp_cpu.rs +++ b/src/device/rsp_cpu.rs @@ -132,48 +132,47 @@ pub fn run(device: &mut device::Device) -> u64 { device.rsp.cpu.gpr[0] = 0; // gpr 0 is read only let instruction = device.rsp.cpu.instructions - [(device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] / 4) as usize]; + [(device.rsp.regs2[device::rsp_interface::SP_PC_REG] / 4) as usize]; (instruction.func)(device, instruction.opcode); match device.rsp.cpu.branch_state.state { device::cpu::State::Step => { - device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] += 4; + device.rsp.regs2[device::rsp_interface::SP_PC_REG] += 4; if device.rsp.cpu.broken { break; } } device::cpu::State::Take => { - device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] += 4; + device.rsp.regs2[device::rsp_interface::SP_PC_REG] += 4; device.rsp.cpu.branch_state.state = device::cpu::State::DelaySlotTaken } device::cpu::State::NotTaken => { - device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] += 4; + device.rsp.regs2[device::rsp_interface::SP_PC_REG] += 4; device.rsp.cpu.branch_state.state = device::cpu::State::DelaySlotNotTaken } device::cpu::State::DelaySlotTaken => { - device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] = - device.rsp.cpu.branch_state.pc; + device.rsp.regs2[device::rsp_interface::SP_PC_REG] = device.rsp.cpu.branch_state.pc; device.rsp.cpu.branch_state.state = device::cpu::State::Step; if device.rsp.cpu.broken { break; } } device::cpu::State::DelaySlotNotTaken => { - device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] += 4; + device.rsp.regs2[device::rsp_interface::SP_PC_REG] += 4; device.rsp.cpu.branch_state.state = device::cpu::State::Step; if device.rsp.cpu.broken { break; } } device::cpu::State::Discard => { - device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] += 8; + device.rsp.regs2[device::rsp_interface::SP_PC_REG] += 8; device.rsp.cpu.branch_state.state = device::cpu::State::Step } device::cpu::State::Exception => { device.rsp.cpu.branch_state.state = device::cpu::State::Step } } - device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] &= 0xFFC; + device.rsp.regs2[device::rsp_interface::SP_PC_REG] &= 0xFFC; if device.rsp.cpu.instruction_type == device.rsp.cpu.last_instruction_type { device.rsp.cpu.cycle_counter += 1; diff --git a/src/device/rsp_interface.rs b/src/device/rsp_interface.rs index 64377e3..a5e0a00 100644 --- a/src/device/rsp_interface.rs +++ b/src/device/rsp_interface.rs @@ -1,19 +1,19 @@ use crate::device; use crate::ui; -const SP_MEM_ADDR_REG: u32 = 0; -const SP_DRAM_ADDR_REG: u32 = 1; -const SP_RD_LEN_REG: u32 = 2; -const SP_WR_LEN_REG: u32 = 3; -pub const SP_STATUS_REG: u32 = 4; -const SP_DMA_FULL_REG: u32 = 5; -const SP_DMA_BUSY_REG: u32 = 6; -const SP_SEMAPHORE_REG: u32 = 7; -pub const SP_REGS_COUNT: u32 = 8; +const SP_MEM_ADDR_REG: usize = 0; +const SP_DRAM_ADDR_REG: usize = 1; +const SP_RD_LEN_REG: usize = 2; +const SP_WR_LEN_REG: usize = 3; +pub const SP_STATUS_REG: usize = 4; +const SP_DMA_FULL_REG: usize = 5; +const SP_DMA_BUSY_REG: usize = 6; +const SP_SEMAPHORE_REG: usize = 7; +pub const SP_REGS_COUNT: usize = 8; -pub const SP_PC_REG: u32 = 0; -//const SP_IBIST_REG: u32 = 1; -pub const SP_REGS2_COUNT: u32 = 2; +pub const SP_PC_REG: usize = 0; +//const SP_IBIST_REG: usize = 1; +pub const SP_REGS2_COUNT: usize = 2; /* SP_STATUS - read */ pub const SP_STATUS_HALT: u32 = 1 << 0; @@ -79,8 +79,8 @@ pub struct RspDma { #[derive(serde::Serialize, serde::Deserialize)] pub struct Rsp { pub cpu: device::rsp_cpu::Cpu, - pub regs: [u32; SP_REGS_COUNT as usize], - pub regs2: [u32; SP_REGS2_COUNT as usize], + pub regs: [u32; SP_REGS_COUNT], + pub regs2: [u32; SP_REGS2_COUNT], #[serde(with = "serde_big_array::BigArray")] pub mem: [u8; 0x2000], pub fifo: [RspDma; 2], @@ -204,10 +204,10 @@ fn do_dma(device: &mut device::Device, dma: RspDma) { j += 1; } } - device.rsp.regs[SP_MEM_ADDR_REG as usize] = (mem_addr & 0xfff) + (dma.memaddr & 0x1000); - device.rsp.regs[SP_DRAM_ADDR_REG as usize] = dram_addr; - device.rsp.regs[SP_RD_LEN_REG as usize] = 0xff8; - device.rsp.regs[SP_WR_LEN_REG as usize] = 0xff8; + device.rsp.regs[SP_MEM_ADDR_REG] = (mem_addr & 0xfff) + (dma.memaddr & 0x1000); + device.rsp.regs[SP_DRAM_ADDR_REG] = dram_addr; + device.rsp.regs[SP_RD_LEN_REG] = 0xff8; + device.rsp.regs[SP_WR_LEN_REG] = 0xff8; device::events::create_event( device, @@ -217,52 +217,52 @@ fn do_dma(device: &mut device::Device, dma: RspDma) { } fn fifo_push(device: &mut device::Device, dir: DmaDir) { - if device.rsp.regs[SP_DMA_FULL_REG as usize] != 0 { + if device.rsp.regs[SP_DMA_FULL_REG] != 0 { panic!("RSP DMA already full") } device.rsp.cpu.sync_point = true; - if device.rsp.regs[SP_DMA_BUSY_REG as usize] != 0 { + if device.rsp.regs[SP_DMA_BUSY_REG] != 0 { device.rsp.fifo[1].dir = dir; if dir == DmaDir::Read { - device.rsp.fifo[1].length = device.rsp.regs[SP_WR_LEN_REG as usize] + device.rsp.fifo[1].length = device.rsp.regs[SP_WR_LEN_REG] } else { - device.rsp.fifo[1].length = device.rsp.regs[SP_RD_LEN_REG as usize] + device.rsp.fifo[1].length = device.rsp.regs[SP_RD_LEN_REG] } - device.rsp.fifo[1].memaddr = device.rsp.regs[SP_MEM_ADDR_REG as usize]; - device.rsp.fifo[1].dramaddr = device.rsp.regs[SP_DRAM_ADDR_REG as usize]; - device.rsp.regs[SP_DMA_FULL_REG as usize] = 1; - device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_DMA_FULL + device.rsp.fifo[1].memaddr = device.rsp.regs[SP_MEM_ADDR_REG]; + device.rsp.fifo[1].dramaddr = device.rsp.regs[SP_DRAM_ADDR_REG]; + device.rsp.regs[SP_DMA_FULL_REG] = 1; + device.rsp.regs[SP_STATUS_REG] |= SP_STATUS_DMA_FULL } else { device.rsp.fifo[0].dir = dir; if dir == DmaDir::Read { - device.rsp.fifo[0].length = device.rsp.regs[SP_WR_LEN_REG as usize] + device.rsp.fifo[0].length = device.rsp.regs[SP_WR_LEN_REG] } else { - device.rsp.fifo[0].length = device.rsp.regs[SP_RD_LEN_REG as usize] + device.rsp.fifo[0].length = device.rsp.regs[SP_RD_LEN_REG] } - device.rsp.fifo[0].memaddr = device.rsp.regs[SP_MEM_ADDR_REG as usize]; - device.rsp.fifo[0].dramaddr = device.rsp.regs[SP_DRAM_ADDR_REG as usize]; - device.rsp.regs[SP_DMA_BUSY_REG as usize] = 1; - device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_DMA_BUSY; + device.rsp.fifo[0].memaddr = device.rsp.regs[SP_MEM_ADDR_REG]; + device.rsp.fifo[0].dramaddr = device.rsp.regs[SP_DRAM_ADDR_REG]; + device.rsp.regs[SP_DMA_BUSY_REG] = 1; + device.rsp.regs[SP_STATUS_REG] |= SP_STATUS_DMA_BUSY; do_dma(device, device.rsp.fifo[0]) } } pub fn fifo_pop(device: &mut device::Device) { - if device.rsp.regs[SP_DMA_FULL_REG as usize] != 0 { + if device.rsp.regs[SP_DMA_FULL_REG] != 0 { device.rsp.fifo[0].dir = device.rsp.fifo[1].dir; device.rsp.fifo[0].length = device.rsp.fifo[1].length; device.rsp.fifo[0].memaddr = device.rsp.fifo[1].memaddr; device.rsp.fifo[0].dramaddr = device.rsp.fifo[1].dramaddr; - device.rsp.regs[SP_DMA_FULL_REG as usize] = 0; - device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_DMA_FULL; + device.rsp.regs[SP_DMA_FULL_REG] = 0; + device.rsp.regs[SP_STATUS_REG] &= !SP_STATUS_DMA_FULL; do_dma(device, device.rsp.fifo[0]) } else { - device.rsp.regs[SP_DMA_BUSY_REG as usize] = 0; - device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_DMA_BUSY; + device.rsp.regs[SP_DMA_BUSY_REG] = 0; + device.rsp.regs[SP_STATUS_REG] &= !SP_STATUS_DMA_BUSY; if device.rsp.run_after_dma { device.rsp.run_after_dma = false; do_task(device); @@ -279,7 +279,7 @@ pub fn read_regs( device::cop0::add_cycles(device, 20); } let reg = (address & 0xFFFF) >> 2; - match reg as u32 { + match reg as usize { SP_STATUS_REG => { let value = device.rsp.regs[reg as usize] & (SP_STATUS_SIG0 @@ -311,7 +311,7 @@ pub fn read_regs( pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { let reg = (address & 0xFFFF) >> 2; - match reg as u32 { + match reg as usize { SP_STATUS_REG => update_sp_status(device, value), SP_RD_LEN_REG => { device::memory::masked_write_32(&mut device.rsp.regs[reg as usize], value, mask); @@ -339,7 +339,7 @@ pub fn read_regs2( pub fn write_regs2(device: &mut device::Device, address: u64, value: u32, mask: u32) { let reg = (address & 0xFFFF) >> 2; - match reg as u32 { + match reg as usize { SP_PC_REG => { device::memory::masked_write_32( &mut device.rsp.regs2[reg as usize], @@ -352,20 +352,20 @@ pub fn write_regs2(device: &mut device::Device, address: u64, value: u32, mask: } fn update_sp_status(device: &mut device::Device, w: u32) { - let was_halted = device.rsp.regs[SP_STATUS_REG as usize] & SP_STATUS_HALT != 0; + let was_halted = device.rsp.regs[SP_STATUS_REG] & SP_STATUS_HALT != 0; /* clear / set halt */ if w & SP_CLR_HALT != 0 && w & SP_SET_HALT == 0 { - device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_HALT + device.rsp.regs[SP_STATUS_REG] &= !SP_STATUS_HALT } if w & SP_SET_HALT != 0 && w & SP_CLR_HALT == 0 { device::events::remove_event(device, device::events::EVENT_TYPE_SP); - device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_HALT + device.rsp.regs[SP_STATUS_REG] |= SP_STATUS_HALT } /* clear broke */ if w & SP_CLR_BROKE != 0 { - device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_BROKE + device.rsp.regs[SP_STATUS_REG] &= !SP_STATUS_BROKE } /* clear SP interrupt */ @@ -379,85 +379,85 @@ fn update_sp_status(device: &mut device::Device, w: u32) { /* clear / set single step */ if w & SP_CLR_SSTEP != 0 && w & SP_SET_SSTEP == 0 { - device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_SSTEP + device.rsp.regs[SP_STATUS_REG] &= !SP_STATUS_SSTEP } if w & SP_SET_SSTEP != 0 && w & SP_CLR_SSTEP == 0 { - device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_SSTEP + device.rsp.regs[SP_STATUS_REG] |= SP_STATUS_SSTEP } /* clear / set interrupt on break */ if w & SP_CLR_INTR_BREAK != 0 && w & SP_SET_INTR_BREAK == 0 { - device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_INTR_BREAK + device.rsp.regs[SP_STATUS_REG] &= !SP_STATUS_INTR_BREAK } if w & SP_SET_INTR_BREAK != 0 && w & SP_CLR_INTR_BREAK == 0 { - device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_INTR_BREAK + device.rsp.regs[SP_STATUS_REG] |= SP_STATUS_INTR_BREAK } /* clear / set signal 0 */ if w & SP_CLR_SIG0 != 0 && w & SP_SET_SIG0 == 0 { - device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_SIG0 + device.rsp.regs[SP_STATUS_REG] &= !SP_STATUS_SIG0 } if w & SP_SET_SIG0 != 0 && w & SP_CLR_SIG0 == 0 { - device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_SIG0 + device.rsp.regs[SP_STATUS_REG] |= SP_STATUS_SIG0 } /* clear / set signal 1 */ if w & SP_CLR_SIG1 != 0 && w & SP_SET_SIG1 == 0 { - device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_SIG1 + device.rsp.regs[SP_STATUS_REG] &= !SP_STATUS_SIG1 } if w & SP_SET_SIG1 != 0 && w & SP_CLR_SIG1 == 0 { - device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_SIG1 + device.rsp.regs[SP_STATUS_REG] |= SP_STATUS_SIG1 } /* clear / set signal 2 */ if w & SP_CLR_SIG2 != 0 && w & SP_SET_SIG2 == 0 { - device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_SIG2 + device.rsp.regs[SP_STATUS_REG] &= !SP_STATUS_SIG2 } if w & SP_SET_SIG2 != 0 && w & SP_CLR_SIG2 == 0 { - device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_SIG2 + device.rsp.regs[SP_STATUS_REG] |= SP_STATUS_SIG2 } /* clear / set signal 3 */ if w & SP_CLR_SIG3 != 0 && w & SP_SET_SIG3 == 0 { - device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_SIG3 + device.rsp.regs[SP_STATUS_REG] &= !SP_STATUS_SIG3 } if w & SP_SET_SIG3 != 0 && w & SP_CLR_SIG3 == 0 { - device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_SIG3 + device.rsp.regs[SP_STATUS_REG] |= SP_STATUS_SIG3 } /* clear / set signal 4 */ if w & SP_CLR_SIG4 != 0 && w & SP_SET_SIG4 == 0 { - device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_SIG4 + device.rsp.regs[SP_STATUS_REG] &= !SP_STATUS_SIG4 } if w & SP_SET_SIG4 != 0 && w & SP_CLR_SIG4 == 0 { - device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_SIG4 + device.rsp.regs[SP_STATUS_REG] |= SP_STATUS_SIG4 } /* clear / set signal 5 */ if w & SP_CLR_SIG5 != 0 && w & SP_SET_SIG5 == 0 { - device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_SIG5 + device.rsp.regs[SP_STATUS_REG] &= !SP_STATUS_SIG5 } if w & SP_SET_SIG5 != 0 && w & SP_CLR_SIG5 == 0 { - device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_SIG5 + device.rsp.regs[SP_STATUS_REG] |= SP_STATUS_SIG5 } /* clear / set signal 6 */ if w & SP_CLR_SIG6 != 0 && w & SP_SET_SIG6 == 0 { - device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_SIG6 + device.rsp.regs[SP_STATUS_REG] &= !SP_STATUS_SIG6 } if w & SP_SET_SIG6 != 0 && w & SP_CLR_SIG6 == 0 { - device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_SIG6 + device.rsp.regs[SP_STATUS_REG] |= SP_STATUS_SIG6 } /* clear / set signal 7 */ if w & SP_CLR_SIG7 != 0 && w & SP_SET_SIG7 == 0 { - device.rsp.regs[SP_STATUS_REG as usize] &= !SP_STATUS_SIG7 + device.rsp.regs[SP_STATUS_REG] &= !SP_STATUS_SIG7 } if w & SP_SET_SIG7 != 0 && w & SP_CLR_SIG7 == 0 { - device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_SIG7 + device.rsp.regs[SP_STATUS_REG] |= SP_STATUS_SIG7 } - if device.rsp.regs[SP_STATUS_REG as usize] & SP_STATUS_HALT == 0 && was_halted { + if device.rsp.regs[SP_STATUS_REG] & SP_STATUS_HALT == 0 && was_halted { device.rsp.cpu.broken = false; device.rsp.cpu.halted = false; do_task(device); @@ -468,7 +468,7 @@ fn do_task(device: &mut device::Device) { device.rsp.cpu.sync_point = false; device.rsp.last_status_value = 0; device.rdp.last_status_value = 0; - if device.rsp.regs[SP_DMA_BUSY_REG as usize] == 1 { + if device.rsp.regs[SP_DMA_BUSY_REG] == 1 { device.rsp.run_after_dma = true } else { let timer = device::rsp_cpu::run(device); @@ -479,21 +479,21 @@ fn do_task(device: &mut device::Device) { pub fn rsp_event(device: &mut device::Device) { if device.rsp.cpu.broken { - device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_HALT | SP_STATUS_BROKE; + device.rsp.regs[SP_STATUS_REG] |= SP_STATUS_HALT | SP_STATUS_BROKE; - if device.rsp.regs[SP_STATUS_REG as usize] & SP_STATUS_INTR_BREAK != 0 { + if device.rsp.regs[SP_STATUS_REG] & SP_STATUS_INTR_BREAK != 0 { device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_SP) } return; } if device.rsp.cpu.halted { - device.rsp.regs[SP_STATUS_REG as usize] |= SP_STATUS_HALT; + device.rsp.regs[SP_STATUS_REG] |= SP_STATUS_HALT; return; } do_task(device) } pub fn init(device: &mut device::Device) { - device.rsp.regs[SP_STATUS_REG as usize] = 1; + device.rsp.regs[SP_STATUS_REG] = 1; device::rsp_cpu::init(device); } diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index 2a2311a..4afc4c9 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -183,23 +183,22 @@ pub fn j(device: &mut device::Device, opcode: u32) { return; } device.rsp.cpu.branch_state.state = device::cpu::State::Take; - device.rsp.cpu.branch_state.pc = - (device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + 4) & 0xF0000000 - | ((opcode & 0x3FFFFFF) << 2) + device.rsp.cpu.branch_state.pc = (device.rsp.regs2[device::rsp_interface::SP_PC_REG] + 4) + & 0xF0000000 + | ((opcode & 0x3FFFFFF) << 2) } pub fn jal(device: &mut device::Device, opcode: u32) { if device::rsp_cpu::in_delay_slot_taken(device) { device.rsp.cpu.gpr[31] = (device.rsp.cpu.branch_state.pc + 4) & 0xFFF } else { - device.rsp.cpu.gpr[31] = - (device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + 8) & 0xFFF + device.rsp.cpu.gpr[31] = (device.rsp.regs2[device::rsp_interface::SP_PC_REG] + 8) & 0xFFF } if !device::rsp_cpu::in_delay_slot_taken(device) { device.rsp.cpu.branch_state.state = device::cpu::State::Take; - device.rsp.cpu.branch_state.pc = - (device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + 4) & 0xF0000000 - | ((opcode & 0x3FFFFFF) << 2) + device.rsp.cpu.branch_state.pc = (device.rsp.regs2[device::rsp_interface::SP_PC_REG] + 4) + & 0xF0000000 + | ((opcode & 0x3FFFFFF) << 2) } else if !device::rsp_cpu::in_delay_slot(device) { device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; } @@ -208,8 +207,7 @@ pub fn jal(device: &mut device::Device, opcode: u32) { pub fn beq(device: &mut device::Device, opcode: u32) { if device.rsp.cpu.gpr[rs(opcode) as usize] == device.rsp.cpu.gpr[rt(opcode) as usize] { device.rsp.cpu.branch_state.state = device::cpu::State::Take; - device.rsp.cpu.branch_state.pc = device.rsp.regs2 - [device::rsp_interface::SP_PC_REG as usize] + device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG] .wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { @@ -220,8 +218,7 @@ pub fn beq(device: &mut device::Device, opcode: u32) { pub fn bne(device: &mut device::Device, opcode: u32) { if device.rsp.cpu.gpr[rs(opcode) as usize] != device.rsp.cpu.gpr[rt(opcode) as usize] { device.rsp.cpu.branch_state.state = device::cpu::State::Take; - device.rsp.cpu.branch_state.pc = device.rsp.regs2 - [device::rsp_interface::SP_PC_REG as usize] + device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG] .wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { @@ -232,8 +229,7 @@ pub fn bne(device: &mut device::Device, opcode: u32) { pub fn blez(device: &mut device::Device, opcode: u32) { if device.rsp.cpu.gpr[rs(opcode) as usize] as i32 <= 0 { device.rsp.cpu.branch_state.state = device::cpu::State::Take; - device.rsp.cpu.branch_state.pc = device.rsp.regs2 - [device::rsp_interface::SP_PC_REG as usize] + device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG] .wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { @@ -244,8 +240,7 @@ pub fn blez(device: &mut device::Device, opcode: u32) { pub fn bgtz(device: &mut device::Device, opcode: u32) { if device.rsp.cpu.gpr[rs(opcode) as usize] as i32 > 0 { device.rsp.cpu.branch_state.state = device::cpu::State::Take; - device.rsp.cpu.branch_state.pc = device.rsp.regs2 - [device::rsp_interface::SP_PC_REG as usize] + device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG] .wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { @@ -485,7 +480,7 @@ pub fn jalr(device: &mut device::Device, opcode: u32) { device.rsp.cpu.gpr[rd(opcode) as usize] = (device.rsp.cpu.branch_state.pc + 4) & 0xFFF } else { device.rsp.cpu.gpr[rd(opcode) as usize] = - (device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + 8) & 0xFFF + (device.rsp.regs2[device::rsp_interface::SP_PC_REG] + 8) & 0xFFF } } @@ -547,8 +542,7 @@ pub fn sltu(device: &mut device::Device, opcode: u32) { pub fn bltz(device: &mut device::Device, opcode: u32) { if (device.rsp.cpu.gpr[rs(opcode) as usize] as i32) < 0 { device.rsp.cpu.branch_state.state = device::cpu::State::Take; - device.rsp.cpu.branch_state.pc = device.rsp.regs2 - [device::rsp_interface::SP_PC_REG as usize] + device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG] .wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { @@ -559,8 +553,7 @@ pub fn bltz(device: &mut device::Device, opcode: u32) { pub fn bgez(device: &mut device::Device, opcode: u32) { if device.rsp.cpu.gpr[rs(opcode) as usize] as i32 >= 0 { device.rsp.cpu.branch_state.state = device::cpu::State::Take; - device.rsp.cpu.branch_state.pc = device.rsp.regs2 - [device::rsp_interface::SP_PC_REG as usize] + device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG] .wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { @@ -571,34 +564,30 @@ pub fn bgez(device: &mut device::Device, opcode: u32) { pub fn bltzal(device: &mut device::Device, opcode: u32) { if (device.rsp.cpu.gpr[rs(opcode) as usize] as i32) < 0 { device.rsp.cpu.branch_state.state = device::cpu::State::Take; - device.rsp.cpu.branch_state.pc = device.rsp.regs2 - [device::rsp_interface::SP_PC_REG as usize] + device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG] .wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; } - device.rsp.cpu.gpr[31] = - (device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + 8) & 0xFFF + device.rsp.cpu.gpr[31] = (device.rsp.regs2[device::rsp_interface::SP_PC_REG] + 8) & 0xFFF } pub fn bgezal(device: &mut device::Device, opcode: u32) { if (device.rsp.cpu.gpr[rs(opcode) as usize] as i32) >= 0 { device.rsp.cpu.branch_state.state = device::cpu::State::Take; - device.rsp.cpu.branch_state.pc = device.rsp.regs2 - [device::rsp_interface::SP_PC_REG as usize] + device.rsp.cpu.branch_state.pc = device.rsp.regs2[device::rsp_interface::SP_PC_REG] .wrapping_add(se16(imm(opcode) as i16) << 2) + 4; } else { device.rsp.cpu.branch_state.state = device::cpu::State::NotTaken; } - device.rsp.cpu.gpr[31] = - (device.rsp.regs2[device::rsp_interface::SP_PC_REG as usize] + 8) & 0xFFF + device.rsp.cpu.gpr[31] = (device.rsp.regs2[device::rsp_interface::SP_PC_REG] + 8) & 0xFFF } pub fn mfc0(device: &mut device::Device, opcode: u32) { device.rsp.cpu.cycle_counter += 2; - if rd(opcode) < device::rsp_interface::SP_REGS_COUNT { + if rd(opcode) < device::rsp_interface::SP_REGS_COUNT as u32 { device.rsp.cpu.gpr[rt(opcode) as usize] = device::rsp_interface::read_regs( device, (rd(opcode) << 2) as u64, @@ -607,14 +596,14 @@ pub fn mfc0(device: &mut device::Device, opcode: u32) { } else { device.rsp.cpu.gpr[rt(opcode) as usize] = device::rdp::read_regs_dpc( device, - ((rd(opcode) - device::rsp_interface::SP_REGS_COUNT) << 2) as u64, + ((rd(opcode) - device::rsp_interface::SP_REGS_COUNT as u32) << 2) as u64, device::memory::AccessSize::Word, ) } } pub fn mtc0(device: &mut device::Device, opcode: u32) { - if rd(opcode) < device::rsp_interface::SP_REGS_COUNT { + if rd(opcode) < device::rsp_interface::SP_REGS_COUNT as u32 { device::rsp_interface::write_regs( device, (rd(opcode) << 2) as u64, @@ -624,15 +613,15 @@ pub fn mtc0(device: &mut device::Device, opcode: u32) { } else { device::rdp::write_regs_dpc( device, - ((rd(opcode) - device::rsp_interface::SP_REGS_COUNT) << 2) as u64, + ((rd(opcode) - device::rsp_interface::SP_REGS_COUNT as u32) << 2) as u64, device.rsp.cpu.gpr[rt(opcode) as usize], 0xFFFFFFFF, ) } - if rd(opcode) == device::rsp_interface::SP_STATUS_REG + if rd(opcode) as usize == device::rsp_interface::SP_STATUS_REG && device.rsp.cpu.gpr[rt(opcode) as usize] & device::rsp_interface::SP_SET_HALT != 0 { - device.rsp.regs[device::rsp_interface::SP_STATUS_REG as usize] &= + device.rsp.regs[device::rsp_interface::SP_STATUS_REG] &= !device::rsp_interface::SP_STATUS_HALT; // set halt when event happens device.rsp.cpu.halted = true // the RSP can halt itself by setting SP_SET_HALT } diff --git a/src/device/si.rs b/src/device/si.rs index 79e109f..d6830a5 100644 --- a/src/device/si.rs +++ b/src/device/si.rs @@ -2,14 +2,14 @@ use crate::device; use crate::ui; use rand::Rng; -const SI_DRAM_ADDR_REG: u32 = 0; -const SI_PIF_ADDR_RD64B_REG: u32 = 1; -//const SI_R2_REG: u32 = 2; -//const SI_R3_REG: u32 = 3; -const SI_PIF_ADDR_WR64B_REG: u32 = 4; -//const SI_R5_REG: u32 = 5; -pub const SI_STATUS_REG: u32 = 6; -pub const SI_REGS_COUNT: u32 = 7; +const SI_DRAM_ADDR_REG: usize = 0; +const SI_PIF_ADDR_RD64B_REG: usize = 1; +//const SI_R2_REG: usize = 2; +//const SI_R3_REG: usize = 3; +const SI_PIF_ADDR_WR64B_REG: usize = 4; +//const SI_R5_REG: usize = 5; +pub const SI_STATUS_REG: usize = 6; +pub const SI_REGS_COUNT: usize = 7; pub const SI_STATUS_DMA_BUSY: u32 = 1 << 0; pub const SI_STATUS_IO_BUSY: u32 = 1 << 1; @@ -25,7 +25,7 @@ pub enum DmaDir { #[derive(serde::Serialize, serde::Deserialize)] pub struct Si { - pub regs: [u32; SI_REGS_COUNT as usize], + pub regs: [u32; SI_REGS_COUNT], pub dma_dir: DmaDir, } @@ -47,7 +47,7 @@ fn dma_read(device: &mut device::Device) { let duration = device::pif::update_pif_ram(device); - device.si.regs[SI_STATUS_REG as usize] |= SI_STATUS_DMA_BUSY; + device.si.regs[SI_STATUS_REG] |= SI_STATUS_DMA_BUSY; let length = duration + randomize_interrupt_time(&mut device.rng); @@ -59,7 +59,7 @@ fn dma_write(device: &mut device::Device) { copy_pif_rdram(device); - device.si.regs[SI_STATUS_REG as usize] |= SI_STATUS_DMA_BUSY; + device.si.regs[SI_STATUS_REG] |= SI_STATUS_DMA_BUSY; let length = 6000 + randomize_interrupt_time(&mut device.rng); //based on https://github.com/rasky/n64-systembench @@ -68,7 +68,7 @@ fn dma_write(device: &mut device::Device) { pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { let reg = (address & 0xFFFF) >> 2; - match reg as u32 { + match reg as usize { SI_STATUS_REG => { device.si.regs[reg as usize] &= !SI_STATUS_INTERRUPT; device::mi::clear_rcp_interrupt(device, device::mi::MI_INTR_SI) @@ -81,7 +81,7 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u //rdram is in native endian format, and pif memory is in big endian format fn copy_pif_rdram(device: &mut device::Device) { - let dram_addr = device.si.regs[SI_DRAM_ADDR_REG as usize] as usize & device::rdram::RDRAM_MASK; + let dram_addr = device.si.regs[SI_DRAM_ADDR_REG] as usize & device::rdram::RDRAM_MASK; if device.si.dma_dir == DmaDir::Write { let mut i = 0; while i < device::pif::PIF_RAM_SIZE { @@ -125,8 +125,8 @@ pub fn dma_event(device: &mut device::Device) { panic!("si dma unknown") } device.si.dma_dir = DmaDir::None; - device.si.regs[SI_STATUS_REG as usize] &= !(SI_STATUS_DMA_BUSY | SI_STATUS_IO_BUSY); - device.si.regs[SI_STATUS_REG as usize] |= SI_STATUS_INTERRUPT; + device.si.regs[SI_STATUS_REG] &= !(SI_STATUS_DMA_BUSY | SI_STATUS_IO_BUSY); + device.si.regs[SI_STATUS_REG] |= SI_STATUS_INTERRUPT; device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_SI) } diff --git a/src/device/tlb.rs b/src/device/tlb.rs index b6e58db..70b2104 100644 --- a/src/device/tlb.rs +++ b/src/device/tlb.rs @@ -34,22 +34,22 @@ pub fn read(device: &mut device::Device, index: u64) { if index > 31 { return; } - device.cpu.cop0.regs[device::cop0::COP0_PAGEMASK_REG as usize] = + device.cpu.cop0.regs[device::cop0::COP0_PAGEMASK_REG] = device.cpu.cop0.tlb_entries[index as usize].mask << 13; - device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] = + device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG] = ((device.cpu.cop0.tlb_entries[index as usize].region as u64) << 62) | (device.cpu.cop0.tlb_entries[index as usize].vpn2 << 13) | (device.cpu.cop0.tlb_entries[index as usize].asid) as u64; - device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO0_REG as usize] = + device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO0_REG] = (device.cpu.cop0.tlb_entries[index as usize].pfn_even << 6) | (device.cpu.cop0.tlb_entries[index as usize].c_even << 3) as u64 | (device.cpu.cop0.tlb_entries[index as usize].d_even << 2) as u64 | (device.cpu.cop0.tlb_entries[index as usize].v_even << 1) as u64 | (device.cpu.cop0.tlb_entries[index as usize].g) as u64; - device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO1_REG as usize] = + device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO1_REG] = (device.cpu.cop0.tlb_entries[index as usize].pfn_odd << 6) | (device.cpu.cop0.tlb_entries[index as usize].c_odd << 3) as u64 | (device.cpu.cop0.tlb_entries[index as usize].d_odd << 2) as u64 @@ -64,37 +64,37 @@ pub fn write(device: &mut device::Device, index: u64) { tlb_unmap(device, index); device.cpu.cop0.tlb_entries[index as usize].g = (device.cpu.cop0.regs - [device::cop0::COP0_ENTRYLO0_REG as usize] - & device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO1_REG as usize] + [device::cop0::COP0_ENTRYLO0_REG] + & device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO1_REG] & 1) as u8; device.cpu.cop0.tlb_entries[index as usize].pfn_even = - (device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO0_REG as usize] >> 6) & 0xFFFFF; + (device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO0_REG] >> 6) & 0xFFFFF; device.cpu.cop0.tlb_entries[index as usize].pfn_odd = - (device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO1_REG as usize] >> 6) & 0xFFFFF; + (device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO1_REG] >> 6) & 0xFFFFF; device.cpu.cop0.tlb_entries[index as usize].c_even = - ((device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO0_REG as usize] >> 3) & 7) as u8; + ((device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO0_REG] >> 3) & 7) as u8; device.cpu.cop0.tlb_entries[index as usize].c_odd = - ((device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO1_REG as usize] >> 3) & 7) as u8; + ((device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO1_REG] >> 3) & 7) as u8; device.cpu.cop0.tlb_entries[index as usize].d_even = - ((device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO0_REG as usize] >> 2) & 1) as u8; + ((device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO0_REG] >> 2) & 1) as u8; device.cpu.cop0.tlb_entries[index as usize].d_odd = - ((device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO1_REG as usize] >> 2) & 1) as u8; + ((device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO1_REG] >> 2) & 1) as u8; device.cpu.cop0.tlb_entries[index as usize].v_even = - ((device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO0_REG as usize] >> 1) & 1) as u8; + ((device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO0_REG] >> 1) & 1) as u8; device.cpu.cop0.tlb_entries[index as usize].v_odd = - ((device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO1_REG as usize] >> 1) & 1) as u8; + ((device.cpu.cop0.regs[device::cop0::COP0_ENTRYLO1_REG] >> 1) & 1) as u8; device.cpu.cop0.tlb_entries[index as usize].asid = - device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] as u8; + device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG] as u8; device.cpu.cop0.tlb_entries[index as usize].mask = - (device.cpu.cop0.regs[device::cop0::COP0_PAGEMASK_REG as usize] >> 13) & 0xFFF; + (device.cpu.cop0.regs[device::cop0::COP0_PAGEMASK_REG] >> 13) & 0xFFF; device.cpu.cop0.tlb_entries[index as usize].vpn2 = - (device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] >> 13) & 0x7FFFFFF; + (device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG] >> 13) & 0x7FFFFFF; device.cpu.cop0.tlb_entries[index as usize].region = - (device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] >> 62) as u8; + (device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG] >> 62) as u8; device.cpu.cop0.tlb_entries[index as usize].mask &= 0b101010101010; device.cpu.cop0.tlb_entries[index as usize].mask |= @@ -125,22 +125,20 @@ pub fn write(device: &mut device::Device, index: u64) { } pub fn probe(device: &mut device::Device) { - device.cpu.cop0.regs[device::cop0::COP0_INDEX_REG as usize] = 0x80000000; // set probe failure + device.cpu.cop0.regs[device::cop0::COP0_INDEX_REG] = 0x80000000; // set probe failure for (pos, e) in device.cpu.cop0.tlb_entries.iter().enumerate() { if e.vpn2 & !e.mask - != ((device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] >> 13) & 0x7FFFFFF) - & !e.mask + != ((device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG] >> 13) & 0x7FFFFFF) & !e.mask { continue; } - if e.region != (device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] >> 62) as u8 { + if e.region != (device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG] >> 62) as u8 { continue; } - if e.g == 0 && e.asid != device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG as usize] as u8 - { + if e.g == 0 && e.asid != device.cpu.cop0.regs[device::cop0::COP0_ENTRYHI_REG] as u8 { continue; } - device.cpu.cop0.regs[device::cop0::COP0_INDEX_REG as usize] = pos as u64; + device.cpu.cop0.regs[device::cop0::COP0_INDEX_REG] = pos as u64; break; } } diff --git a/src/device/vi.rs b/src/device/vi.rs index d04d813..fde8f50 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -1,24 +1,24 @@ use crate::{cheats, device, netplay, retroachievements, ui}; -const VI_STATUS_REG: u32 = 0; -const VI_ORIGIN_REG: u32 = 1; -//const VI_WIDTH_REG: u32 = 2; -//const VI_V_INTR_REG: u32 = 3; -const VI_CURRENT_REG: u32 = 4; -//const VI_BURST_REG: u32 = 5; -const VI_V_SYNC_REG: u32 = 6; -const VI_H_SYNC_REG: u32 = 7; -//const VI_LEAP_REG: u32 = 8; -//const VI_H_START_REG: u32 = 9; -//const VI_V_START_REG: u32 = 10; -//const VI_V_BURST_REG: u32 = 11; -//const VI_X_SCALE_REG: u32 = 12; -//const VI_Y_SCALE_REG: u32 = 13; -pub const VI_REGS_COUNT: u32 = 14; +const VI_STATUS_REG: usize = 0; +const VI_ORIGIN_REG: usize = 1; +//const VI_WIDTH_REG: usize = 2; +//const VI_V_INTR_REG: usize = 3; +const VI_CURRENT_REG: usize = 4; +//const VI_BURST_REG: usize = 5; +const VI_V_SYNC_REG: usize = 6; +const VI_H_SYNC_REG: usize = 7; +//const VI_LEAP_REG: usize = 8; +//const VI_H_START_REG: usize = 9; +//const VI_V_START_REG: usize = 10; +//const VI_V_BURST_REG: usize = 11; +//const VI_X_SCALE_REG: usize = 12; +//const VI_Y_SCALE_REG: usize = 13; +pub const VI_REGS_COUNT: usize = 14; #[derive(serde::Serialize, serde::Deserialize)] pub struct Vi { - pub regs: [u32; VI_REGS_COUNT as usize], + pub regs: [u32; VI_REGS_COUNT], pub clock: u64, pub delay: u64, pub field: u32, @@ -39,13 +39,12 @@ const MAX_LIMIT_FREQ: u64 = 3; pub fn set_expected_refresh_rate(device: &mut device::Device) { let expected_refresh_rate = device.vi.clock as f64 - / (device.vi.regs[VI_V_SYNC_REG as usize] + 1) as f64 - / ((device.vi.regs[VI_H_SYNC_REG as usize] & 0xFFF) + 1) as f64 + / (device.vi.regs[VI_V_SYNC_REG] + 1) as f64 + / ((device.vi.regs[VI_H_SYNC_REG] & 0xFFF) + 1) as f64 * 2.0; device.vi.frame_time = 1.0 / expected_refresh_rate; device.vi.delay = (device.cpu.clock_rate as f64 / expected_refresh_rate) as u64; - device.vi.count_per_scanline = - device.vi.delay / (device.vi.regs[VI_V_SYNC_REG as usize] + 1) as u64; + device.vi.count_per_scanline = device.vi.delay / (device.vi.regs[VI_V_SYNC_REG] + 1) as u64; reset_pace_deadline(device); } @@ -62,19 +61,19 @@ fn set_vertical_interrupt(device: &mut device::Device) { fn set_current_line(device: &mut device::Device) { if let Some(next_vi) = device::events::get_event(device, device::events::EVENT_TYPE_VI) { - device.vi.regs[VI_CURRENT_REG as usize] = ((device.vi.delay.saturating_sub( - next_vi.count - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize], - )) / device.vi.count_per_scanline) as u32; + device.vi.regs[VI_CURRENT_REG] = + ((device.vi.delay.saturating_sub( + next_vi.count - device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG], + )) / device.vi.count_per_scanline) as u32; // wrap around VI_CURRENT_REG if needed - if device.vi.regs[VI_CURRENT_REG as usize] >= device.vi.regs[VI_V_SYNC_REG as usize] { - device.vi.regs[VI_CURRENT_REG as usize] -= device.vi.regs[VI_V_SYNC_REG as usize] + if device.vi.regs[VI_CURRENT_REG] >= device.vi.regs[VI_V_SYNC_REG] { + device.vi.regs[VI_CURRENT_REG] -= device.vi.regs[VI_V_SYNC_REG] } } /* update current field */ - device.vi.regs[VI_CURRENT_REG as usize] = - (device.vi.regs[VI_CURRENT_REG as usize] & !1) | device.vi.field; - ui::video::set_register(VI_CURRENT_REG, device.vi.regs[VI_CURRENT_REG as usize]) + device.vi.regs[VI_CURRENT_REG] = (device.vi.regs[VI_CURRENT_REG] & !1) | device.vi.field; + ui::video::set_register(VI_CURRENT_REG as u32, device.vi.regs[VI_CURRENT_REG]) } pub fn read_regs( @@ -83,7 +82,7 @@ pub fn read_regs( _access_size: device::memory::AccessSize, ) -> u32 { let reg = (address & 0xFFFF) >> 2; - if reg as u32 == VI_CURRENT_REG { + if reg as usize == VI_CURRENT_REG { set_current_line(device) } device::cop0::add_cycles(device, 20); @@ -92,7 +91,7 @@ pub fn read_regs( pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u32) { let reg = (address & 0xFFFF) >> 2; - match reg as u32 { + match reg as usize { VI_CURRENT_REG => device::mi::clear_rcp_interrupt(device, device::mi::MI_INTR_VI), VI_V_SYNC_REG => { if device.vi.regs[reg as usize] != value & mask { @@ -162,7 +161,7 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { unsafe { sdl3_sys::events::SDL_PumpEvents() }; /* toggle vi field if in interlaced mode */ - device.vi.field ^= (device.vi.regs[VI_STATUS_REG as usize] >> 6) & 0x1; + device.vi.field ^= (device.vi.regs[VI_STATUS_REG] >> 6) & 0x1; device::mi::set_rcp_interrupt(device, device::mi::MI_INTR_VI); diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 08a4800..4141645 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -55,7 +55,7 @@ pub fn init_game_audio(device: &mut device::Device) { } { panic!("Could not initialize audio stream"); } - if device.ai.regs[device::ai::AI_STATUS_REG as usize] & device::ai::AI_STATUS_BUSY != 0 { + if device.ai.regs[device::ai::AI_STATUS_REG] & device::ai::AI_STATUS_BUSY != 0 { resume_game_audio(&mut device.ui); } else { pause_game_audio(&mut device.ui); diff --git a/src/ui/video.rs b/src/ui/video.rs index 62837eb..0769ded 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -15,10 +15,10 @@ fn build_gfx_info(device: &mut device::Device) -> GFX_INFO { RDRAM: device.rdram.mem.as_mut_ptr(), DMEM: device.rsp.mem.as_mut_ptr(), RDRAM_SIZE: device.rdram.size, - DPC_CURRENT_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_CURRENT_REG as usize], - DPC_START_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_START_REG as usize], - DPC_END_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_END_REG as usize], - DPC_STATUS_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_STATUS_REG as usize], + DPC_CURRENT_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_CURRENT_REG], + DPC_START_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_START_REG], + DPC_END_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_END_REG], + DPC_STATUS_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_STATUS_REG], PAL: device.cart.pal, widescreen: device.ui.config.video.widescreen, fullscreen: device.ui.video.fullscreen, @@ -176,7 +176,7 @@ pub fn load_state(device: &mut device::Device, rdp_state: *const u8) { rdp_new_processor(gfx_info); rdp_load_state(rdp_state); for reg in 0..device::vi::VI_REGS_COUNT { - rdp_set_vi_register(reg, device.vi.regs[reg as usize]) + rdp_set_vi_register(reg as u32, device.vi.regs[reg]) } } } @@ -205,9 +205,8 @@ pub fn check_callback(device: &mut device::Device) -> (bool, bool) { device.load_state = true; } if callback.reset_game { - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] |= - device::cop0::COP0_CAUSE_IP4; - device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG as usize] &= + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] |= device::cop0::COP0_CAUSE_IP4; + device.cpu.cop0.regs[device::cop0::COP0_CAUSE_REG] &= !device::cop0::COP0_CAUSE_EXCCODE_MASK; device::events::create_event( From 86304018dd5c6665160293ef15704d893810b35e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 8 May 2026 16:36:23 +0200 Subject: [PATCH 0851/1117] remove un-needed window() (#854) * remove un-needed window() * more --- src/ui/cheats.rs | 2 +- src/ui/gui.rs | 2 +- src/ui/netplay.rs | 14 +++++++------- src/ui/vru.rs | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/ui/cheats.rs b/src/ui/cheats.rs index dcafb41..0bfc710 100644 --- a/src/ui/cheats.rs +++ b/src/ui/cheats.rs @@ -78,7 +78,7 @@ pub fn cheats_window(app: &AppWindow) { let message_dialog = ErrorDialog::new().unwrap(); let weak_dialog = message_dialog.as_weak(); message_dialog.on_close_clicked(move || { - weak_dialog.unwrap().window().hide().unwrap(); + weak_dialog.unwrap().hide().unwrap(); }); message_dialog.set_text("Could not read ROM".into()); message_dialog.show().unwrap(); diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 9ef1a96..6943117 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -327,10 +327,10 @@ fn controller_window(app: &AppWindow, config: &ui::config::Config) { let weak_app = weak_app.clone(); weak_dialog .upgrade_in_event_loop(move |handle| { - handle.hide().unwrap(); let profile_name = handle.get_profile_name(); let dinput = handle.get_dinput(); let deadzone = handle.get_deadzone(); + handle.hide().unwrap(); tokio::spawn(async move { let cli_path = std::env::current_exe() diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 8f5d6d1..15f5b66 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -219,7 +219,7 @@ fn select_rom( let message_dialog = ErrorDialog::new().unwrap(); let weak_dialog = message_dialog.as_weak(); message_dialog.on_close_clicked(move || { - weak_dialog.unwrap().window().hide().unwrap(); + weak_dialog.unwrap().hide().unwrap(); }); message_dialog.set_text("Could not read ROM".into()); message_dialog.show().unwrap(); @@ -244,7 +244,7 @@ fn show_custom_url_dialog(weak: slint::Weak, server_url: slint::S handle.set_custom_server_url(server_url.clone()); }) .unwrap(); - weak_dialog.unwrap().window().hide().unwrap(); + weak_dialog.unwrap().hide().unwrap(); }); url_dialog.show().unwrap(); } @@ -313,7 +313,7 @@ pub fn setup_create_window( let response = task.await; weak_dialog .upgrade_in_event_loop(move |handle| { - handle.window().hide().unwrap(); + handle.hide().unwrap(); }) .unwrap(); if let Ok(response) = response @@ -445,7 +445,7 @@ fn show_netplay_error(message: String) { let message_dialog = ErrorDialog::new().unwrap(); let weak_dialog = message_dialog.as_weak(); message_dialog.on_close_clicked(move || { - weak_dialog.unwrap().window().hide().unwrap(); + weak_dialog.unwrap().hide().unwrap(); }); message_dialog.set_text(message.into()); message_dialog.show().unwrap(); @@ -717,7 +717,7 @@ fn create_session( handle.get_peer_addr(), weak_app, ); - handle.window().hide().unwrap(); + handle.hide().unwrap(); }) .unwrap(); } else { @@ -840,7 +840,7 @@ fn join_session( handle.get_peer_addr(), weak_app, ); - handle.window().hide().unwrap(); + handle.hide().unwrap(); }) .unwrap(); } else { @@ -1078,7 +1078,6 @@ fn setup_wait_window( "reply_begin_game" => { if response.accept.unwrap() == 0 { weak.upgrade_in_event_loop(move |handle| { - handle.window().hide().unwrap(); let _ = netplay_write_sender.send(None); let mut player_number = 4; @@ -1107,6 +1106,7 @@ fn setup_wait_window( ra_settings, weak_app, ); + handle.hide().unwrap(); }) .unwrap(); return; diff --git a/src/ui/vru.rs b/src/ui/vru.rs index ee649ac..6fcf61b 100644 --- a/src/ui/vru.rs +++ b/src/ui/vru.rs @@ -14,7 +14,7 @@ pub fn prompt_for_match(words: &[String], frame_time: f64) -> u16 { vru_dialog.on_vru_button_clicked(move |chosen_word| { tx.try_send(chosen_word.to_string()).unwrap(); - vru_dialog_weak.unwrap().window().hide().unwrap(); + vru_dialog_weak.unwrap().hide().unwrap(); }); vru_dialog.set_words(slint::ModelRc::from(std::rc::Rc::new( From 1f6b5754402078eca92a4542ee150cf133a832d7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 8 May 2026 22:05:25 +0200 Subject: [PATCH 0852/1117] move gb time into variable (#855) * move gb time into variable * more --- src/device.rs | 1 + src/device/cart.rs | 3 +-- src/device/controller/gbcart.rs | 23 ++++++++++------------- src/device/controller/transferpak.rs | 4 ++-- src/device/vi.rs | 2 ++ 5 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/device.rs b/src/device.rs index 1cb9d28..3f7157d 100644 --- a/src/device.rs +++ b/src/device.rs @@ -494,6 +494,7 @@ impl Device { vi_counter: 0, min_wait_time: std::time::Duration::from_secs(1), frame_time: 0.0, + elapsed_time: 0.0, limit_freq: 2, limit_freq_check: std::time::Instant::now(), }, diff --git a/src/device/cart.rs b/src/device/cart.rs index 2933309..1e405b1 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -147,8 +147,7 @@ fn eeprom_write_block(device: &mut device::Device, block: usize, offset: usize, } fn time2data(device: &mut device::Device, offset: usize) { - let timestamp = - device.cart.rtc_timestamp + (device.vi.frame_time * device.vi.vi_counter as f64) as i64; + let timestamp = device.cart.rtc_timestamp + device.vi.elapsed_time as i64; let now = chrono::DateTime::from_timestamp(timestamp, 0).unwrap(); device.pif.ram[offset] = byte2bcd(now.second()); diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index e3be818..0d1ae27 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -21,6 +21,7 @@ pub struct GbCart { pub latch: bool, pub rtc_regs: [u8; MBC3_RTC_REGS_COUNT], pub rtc_regs_latch: [u8; MBC3_RTC_REGS_COUNT], + pub current_time: i64, pub last_time: i64, } @@ -34,9 +35,9 @@ pub enum CartType { MBC5RamBatt, } -fn update_rtc_regs(cart: &mut device::controller::gbcart::GbCart, now: i64) { - let mut diff = now - cart.last_time; - cart.last_time = now; +fn update_rtc_regs(cart: &mut device::controller::gbcart::GbCart) { + let mut diff = cart.current_time - cart.last_time; + cart.last_time = cart.current_time; if diff > 0 { cart.rtc_regs[MBC3_RTC_SECONDS] += (diff % 60) as u8; @@ -153,7 +154,6 @@ fn write_mbc3( address: u16, data: usize, size: usize, - now: i64, ) { let value = pif_ram[data + size - 1]; if address < 0x2000 { @@ -169,7 +169,7 @@ fn write_mbc3( } else if address < 0x8000 { if cart.cart_type == CartType::MBC3RamBattRtc { if !cart.latch && (value & 0x1) != 0 { - update_rtc_regs(cart, now); + update_rtc_regs(cart); cart.rtc_regs_latch = cart.rtc_regs; } cart.latch = (value & 0x1) != 0; @@ -196,7 +196,6 @@ fn read_mbc3( address: u16, data: usize, size: usize, - now: i64, ) { if address < 0x4000 { let banked_address = address & 0x3FFF; @@ -226,7 +225,7 @@ fn read_mbc3( pif_ram[data + i] = cart.rtc_regs_latch[cart.ram_bank as usize - 0x8]; } } else { - update_rtc_regs(cart, now); + update_rtc_regs(cart); for i in 0..size { pif_ram[data + i] = cart.rtc_regs[cart.ram_bank as usize - 0x8]; } @@ -307,7 +306,6 @@ pub fn read( address: u16, data: usize, size: usize, - now: i64, ) { if !cart.enabled { for i in 0..size { @@ -317,8 +315,8 @@ pub fn read( } match cart.cart_type { CartType::MBC1RamBatt => read_mbc1(pif_ram, cart, address, data, size), - CartType::MBC3RamBatt => read_mbc3(pif_ram, cart, address, data, size, now), - CartType::MBC3RamBattRtc => read_mbc3(pif_ram, cart, address, data, size, now), + CartType::MBC3RamBatt => read_mbc3(pif_ram, cart, address, data, size), + CartType::MBC3RamBattRtc => read_mbc3(pif_ram, cart, address, data, size), CartType::MBC5RamBatt => read_mbc5(pif_ram, cart, address, data, size), _ => panic!("Unsupported cart type"), } @@ -330,15 +328,14 @@ pub fn write( address: u16, data: usize, size: usize, - now: i64, ) { if !cart.enabled { return; } match cart.cart_type { CartType::MBC1RamBatt => write_mbc1(pif_ram, cart, address, data, size), - CartType::MBC3RamBatt => write_mbc3(pif_ram, cart, address, data, size, now), - CartType::MBC3RamBattRtc => write_mbc3(pif_ram, cart, address, data, size, now), + CartType::MBC3RamBatt => write_mbc3(pif_ram, cart, address, data, size), + CartType::MBC3RamBattRtc => write_mbc3(pif_ram, cart, address, data, size), CartType::MBC5RamBatt => write_mbc5(pif_ram, cart, address, data, size), _ => panic!("Unsupported cart type"), } diff --git a/src/device/controller/transferpak.rs b/src/device/controller/transferpak.rs index b84d3a4..dea6cd5 100644 --- a/src/device/controller/transferpak.rs +++ b/src/device/controller/transferpak.rs @@ -52,13 +52,13 @@ pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usi } } 0xC..=0xF => { + pak.cart.current_time = device.vi.elapsed_time as i64; device::controller::gbcart::read( &mut device.pif.ram, &mut pak.cart, 0x4000 * pak.bank + (address & 0x7fff) - 0x4000, data, size, - (device.vi.frame_time * device.vi.vi_counter as f64) as i64, ); } _ => { @@ -119,13 +119,13 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us } } 0xC..=0xF => { + pak.cart.current_time = device.vi.elapsed_time as i64; device::controller::gbcart::write( &device.pif.ram, &mut pak.cart, 0x4000 * pak.bank + (address & 0x7fff) - 0x4000, data, size, - (device.vi.frame_time * device.vi.vi_counter as f64) as i64, ); } _ => { diff --git a/src/device/vi.rs b/src/device/vi.rs index fde8f50..9cc072a 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -29,6 +29,7 @@ pub struct Vi { pub vi_counter: u64, pub min_wait_time: std::time::Duration, pub frame_time: f64, + pub elapsed_time: f64, pub limit_freq: u64, #[serde(skip)] #[serde(default = "std::time::Instant::now")] @@ -146,6 +147,7 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { ui::video::update_screen(); device.vi.vi_counter += 1; + device.vi.elapsed_time += device.vi.frame_time; if device.netplay.is_none() && paused { if retroachievements::get_hardcore() { From 455365a71d8f9376eed16b9b6df7bf35128df37b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 9 May 2026 08:35:00 +0200 Subject: [PATCH 0853/1117] move sdl hint (#856) --- src/main.rs | 3 +++ src/ui.rs | 10 ++++++++++ src/ui/video.rs | 5 ----- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main.rs b/src/main.rs index 03294af..4cd1194 100644 --- a/src/main.rs +++ b/src/main.rs @@ -121,6 +121,9 @@ async fn main() -> std::io::Result<()> { std::fs::create_dir_all(dirs.cache_dir)?; std::fs::create_dir_all(dirs.data_dir.join("saves"))?; std::fs::create_dir_all(dirs.data_dir.join("states"))?; + + ui::sdl_hints(); + let args = Args::parse(); if let Some(game) = args.game { let file_path = std::path::Path::new(&game); diff --git a/src/ui.rs b/src/ui.rs index 6df498e..4d8992a 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -83,6 +83,16 @@ pub struct Ui { pub usb: Usb, } +pub fn sdl_hints() { + unsafe { + let hint = std::ffi::CString::new("1").unwrap(); + sdl3_sys::everything::SDL_SetHint( + sdl3_sys::everything::SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, + hint.as_ptr(), + ); + } +} + pub fn sdl_init(flag: sdl3_sys::init::SDL_InitFlags) { unsafe { if sdl3_sys::init::SDL_WasInit(flag) == 0 && !sdl3_sys::init::SDL_InitSubSystem(flag) { diff --git a/src/ui/video.rs b/src/ui/video.rs index 0769ded..e5838ab 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -97,11 +97,6 @@ pub fn init(device: &mut device::Device) { } unsafe { sdl3_sys::everything::SDL_HideCursor(); - let hint = std::ffi::CString::new("1").unwrap(); - sdl3_sys::everything::SDL_SetHint( - sdl3_sys::everything::SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, - hint.as_ptr(), - ); } let gfx_info = build_gfx_info(device); From 2b72c24dbefcbc3e4a868f9f51754ddecbd6159e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 9 May 2026 09:57:25 +0200 Subject: [PATCH 0854/1117] GB RTC saving (#857) * GB RTC saving * GB RTC saving * GB RTC saving * GB RTC saving * GB RTC saving * GB RTC saving * GB RTC saving * GB RTC saving * GB RTC saving * more --- src/device/controller/gbcart.rs | 114 ++++++++++++++++++++++++--- src/device/controller/transferpak.rs | 4 +- src/main.rs | 14 ++-- 3 files changed, 112 insertions(+), 20 deletions(-) diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index 0d1ae27..593fc1e 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -1,5 +1,6 @@ use crate::device; +use std::io::Write; const MBC3_RTC_SECONDS: usize = 0; const MBC3_RTC_MINUTES: usize = 1; const MBC3_RTC_HOURS: usize = 2; @@ -21,7 +22,7 @@ pub struct GbCart { pub latch: bool, pub rtc_regs: [u8; MBC3_RTC_REGS_COUNT], pub rtc_regs_latch: [u8; MBC3_RTC_REGS_COUNT], - pub current_time: i64, + pub rtc_timestamp: i64, pub last_time: i64, } @@ -35,9 +36,98 @@ pub enum CartType { MBC5RamBatt, } -fn update_rtc_regs(cart: &mut device::controller::gbcart::GbCart) { - let mut diff = cart.current_time - cart.last_time; - cart.last_time = cart.current_time; +pub fn init(gb_cart: &mut device::controller::gbcart::GbCart, rom: &[u8], ram: &[u8]) { + gb_cart.rom = rom.to_vec(); + let offset; + match ram.len() % 8192 { + 44 => { + offset = ram.len() - 44; + gb_cart.ram = ram[..ram.len() - 44].to_vec(); + gb_cart.rtc_timestamp = + i32::from_le_bytes(ram[offset + 40..offset + 44].try_into().unwrap()) as i64; + } + 48 => { + offset = ram.len() - 48; + gb_cart.ram = ram[..ram.len() - 48].to_vec(); + gb_cart.rtc_timestamp = + i64::from_le_bytes(ram[offset + 40..offset + 48].try_into().unwrap()); + } + _ => { + gb_cart.ram = ram.to_vec(); + return; + } + } + + gb_cart.rtc_regs[MBC3_RTC_SECONDS] = + u32::from_le_bytes(ram[offset..offset + 4].try_into().unwrap()) as u8; + gb_cart.rtc_regs[MBC3_RTC_MINUTES] = + u32::from_le_bytes(ram[offset + 4..offset + 8].try_into().unwrap()) as u8; + gb_cart.rtc_regs[MBC3_RTC_HOURS] = + u32::from_le_bytes(ram[offset + 8..offset + 12].try_into().unwrap()) as u8; + gb_cart.rtc_regs[MBC3_RTC_DAYS_L] = + u32::from_le_bytes(ram[offset + 12..offset + 16].try_into().unwrap()) as u8; + gb_cart.rtc_regs[MBC3_RTC_DAYS_H] = + u32::from_le_bytes(ram[offset + 16..offset + 20].try_into().unwrap()) as u8; + + gb_cart.rtc_regs_latch[MBC3_RTC_SECONDS] = + u32::from_le_bytes(ram[offset + 20..offset + 24].try_into().unwrap()) as u8; + gb_cart.rtc_regs_latch[MBC3_RTC_MINUTES] = + u32::from_le_bytes(ram[offset + 24..offset + 28].try_into().unwrap()) as u8; + gb_cart.rtc_regs_latch[MBC3_RTC_HOURS] = + u32::from_le_bytes(ram[offset + 28..offset + 32].try_into().unwrap()) as u8; + gb_cart.rtc_regs_latch[MBC3_RTC_DAYS_L] = + u32::from_le_bytes(ram[offset + 32..offset + 36].try_into().unwrap()) as u8; + gb_cart.rtc_regs_latch[MBC3_RTC_DAYS_H] = + u32::from_le_bytes(ram[offset + 36..offset + 40].try_into().unwrap()) as u8; +} + +pub fn save( + gb_cart: &mut device::controller::gbcart::GbCart, + elapsed_time: i64, + ram_path: &std::string::String, +) { + update_rtc_regs(gb_cart, elapsed_time); + + if let Ok(file) = std::fs::File::create(ram_path) { + let mut f = std::io::BufWriter::new(file); + f.write_all(&gb_cart.ram).unwrap(); + + if gb_cart.cart_type == CartType::MBC3RamBattRtc { + f.write_all(&(gb_cart.rtc_regs[MBC3_RTC_SECONDS] as u32).to_le_bytes()) + .unwrap(); + f.write_all(&(gb_cart.rtc_regs[MBC3_RTC_MINUTES] as u32).to_le_bytes()) + .unwrap(); + f.write_all(&(gb_cart.rtc_regs[MBC3_RTC_HOURS] as u32).to_le_bytes()) + .unwrap(); + f.write_all(&(gb_cart.rtc_regs[MBC3_RTC_DAYS_L] as u32).to_le_bytes()) + .unwrap(); + f.write_all(&(gb_cart.rtc_regs[MBC3_RTC_DAYS_H] as u32).to_le_bytes()) + .unwrap(); + + f.write_all(&(gb_cart.rtc_regs_latch[MBC3_RTC_SECONDS] as u32).to_le_bytes()) + .unwrap(); + f.write_all(&(gb_cart.rtc_regs_latch[MBC3_RTC_MINUTES] as u32).to_le_bytes()) + .unwrap(); + f.write_all(&(gb_cart.rtc_regs_latch[MBC3_RTC_HOURS] as u32).to_le_bytes()) + .unwrap(); + f.write_all(&(gb_cart.rtc_regs_latch[MBC3_RTC_DAYS_L] as u32).to_le_bytes()) + .unwrap(); + f.write_all(&(gb_cart.rtc_regs_latch[MBC3_RTC_DAYS_H] as u32).to_le_bytes()) + .unwrap(); + + let timestamp = gb_cart.rtc_timestamp.saturating_add(elapsed_time); + f.write_all(×tamp.to_le_bytes()).unwrap(); + + f.flush().unwrap(); + } + } else { + eprintln!("Error saving TransferPak RAM to {ram_path}"); + } +} + +fn update_rtc_regs(cart: &mut device::controller::gbcart::GbCart, elapsed_time: i64) { + let mut diff = elapsed_time - cart.last_time; + cart.last_time = elapsed_time; if diff > 0 { cart.rtc_regs[MBC3_RTC_SECONDS] += (diff % 60) as u8; @@ -154,6 +244,7 @@ fn write_mbc3( address: u16, data: usize, size: usize, + elapsed_time: i64, ) { let value = pif_ram[data + size - 1]; if address < 0x2000 { @@ -169,7 +260,7 @@ fn write_mbc3( } else if address < 0x8000 { if cart.cart_type == CartType::MBC3RamBattRtc { if !cart.latch && (value & 0x1) != 0 { - update_rtc_regs(cart); + update_rtc_regs(cart, elapsed_time); cart.rtc_regs_latch = cart.rtc_regs; } cart.latch = (value & 0x1) != 0; @@ -196,6 +287,7 @@ fn read_mbc3( address: u16, data: usize, size: usize, + elapsed_time: i64, ) { if address < 0x4000 { let banked_address = address & 0x3FFF; @@ -225,7 +317,7 @@ fn read_mbc3( pif_ram[data + i] = cart.rtc_regs_latch[cart.ram_bank as usize - 0x8]; } } else { - update_rtc_regs(cart); + update_rtc_regs(cart, elapsed_time); for i in 0..size { pif_ram[data + i] = cart.rtc_regs[cart.ram_bank as usize - 0x8]; } @@ -306,6 +398,7 @@ pub fn read( address: u16, data: usize, size: usize, + elapsed_time: i64, ) { if !cart.enabled { for i in 0..size { @@ -315,8 +408,8 @@ pub fn read( } match cart.cart_type { CartType::MBC1RamBatt => read_mbc1(pif_ram, cart, address, data, size), - CartType::MBC3RamBatt => read_mbc3(pif_ram, cart, address, data, size), - CartType::MBC3RamBattRtc => read_mbc3(pif_ram, cart, address, data, size), + CartType::MBC3RamBatt => read_mbc3(pif_ram, cart, address, data, size, elapsed_time), + CartType::MBC3RamBattRtc => read_mbc3(pif_ram, cart, address, data, size, elapsed_time), CartType::MBC5RamBatt => read_mbc5(pif_ram, cart, address, data, size), _ => panic!("Unsupported cart type"), } @@ -328,14 +421,15 @@ pub fn write( address: u16, data: usize, size: usize, + elapsed_time: i64, ) { if !cart.enabled { return; } match cart.cart_type { CartType::MBC1RamBatt => write_mbc1(pif_ram, cart, address, data, size), - CartType::MBC3RamBatt => write_mbc3(pif_ram, cart, address, data, size), - CartType::MBC3RamBattRtc => write_mbc3(pif_ram, cart, address, data, size), + CartType::MBC3RamBatt => write_mbc3(pif_ram, cart, address, data, size, elapsed_time), + CartType::MBC3RamBattRtc => write_mbc3(pif_ram, cart, address, data, size, elapsed_time), CartType::MBC5RamBatt => write_mbc5(pif_ram, cart, address, data, size), _ => panic!("Unsupported cart type"), } diff --git a/src/device/controller/transferpak.rs b/src/device/controller/transferpak.rs index dea6cd5..2505532 100644 --- a/src/device/controller/transferpak.rs +++ b/src/device/controller/transferpak.rs @@ -52,13 +52,13 @@ pub fn read(device: &mut device::Device, channel: usize, address: u16, data: usi } } 0xC..=0xF => { - pak.cart.current_time = device.vi.elapsed_time as i64; device::controller::gbcart::read( &mut device.pif.ram, &mut pak.cart, 0x4000 * pak.bank + (address & 0x7fff) - 0x4000, data, size, + device.vi.elapsed_time as i64, ); } _ => { @@ -119,13 +119,13 @@ pub fn write(device: &mut device::Device, channel: usize, address: u16, data: us } } 0xC..=0xF => { - pak.cart.current_time = device.vi.elapsed_time as i64; device::controller::gbcart::write( &device.pif.ram, &mut pak.cart, 0x4000 * pak.bank + (address & 0x7fff) - 0x4000, data, size, + device.vi.elapsed_time as i64, ); } _ => { diff --git a/src/main.rs b/src/main.rs index 4cd1194..7c7153c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -185,8 +185,7 @@ async fn main() -> std::io::Result<()> { && let Ok(rom) = std::fs::read(&device.ui.config.input.gb_rom_path[i]) && let Ok(ram) = std::fs::read(&device.ui.config.input.gb_ram_path[i]) { - device.transferpaks[i].cart.rom = rom; - device.transferpaks[i].cart.ram = ram; + device::controller::gbcart::init(&mut device.transferpaks[i].cart, &rom, &ram); } } @@ -238,13 +237,12 @@ async fn main() -> std::io::Result<()> { if device.ui.config.input.transfer_pak[i] && !device.ui.config.input.gb_ram_path[i].is_empty() && !device.transferpaks[i].cart.ram.is_empty() - && let Err(e) = tokio::fs::write( - &device.ui.config.input.gb_ram_path[i], - &device.transferpaks[i].cart.ram, - ) - .await { - eprintln!("Error writing GB RAM: {}", e); + device::controller::gbcart::save( + &mut device.transferpaks[i].cart, + device.vi.elapsed_time as i64, + &device.ui.config.input.gb_ram_path[i], + ); } } } From 55bf63210ae882ccacbd2888e10ec540cebc6bd0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 9 May 2026 15:12:20 +0200 Subject: [PATCH 0855/1117] Don't save timestamp to GB save (#860) * use real time for GB RTC * more * more * more --- src/device/controller/gbcart.rs | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index 593fc1e..a22424c 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -22,8 +22,7 @@ pub struct GbCart { pub latch: bool, pub rtc_regs: [u8; MBC3_RTC_REGS_COUNT], pub rtc_regs_latch: [u8; MBC3_RTC_REGS_COUNT], - pub rtc_timestamp: i64, - pub last_time: i64, + pub last_elapsed_time: i64, } #[derive(Default, Copy, Clone, PartialEq, serde::Serialize, serde::Deserialize)] @@ -43,14 +42,10 @@ pub fn init(gb_cart: &mut device::controller::gbcart::GbCart, rom: &[u8], ram: & 44 => { offset = ram.len() - 44; gb_cart.ram = ram[..ram.len() - 44].to_vec(); - gb_cart.rtc_timestamp = - i32::from_le_bytes(ram[offset + 40..offset + 44].try_into().unwrap()) as i64; } 48 => { offset = ram.len() - 48; gb_cart.ram = ram[..ram.len() - 48].to_vec(); - gb_cart.rtc_timestamp = - i64::from_le_bytes(ram[offset + 40..offset + 48].try_into().unwrap()); } _ => { gb_cart.ram = ram.to_vec(); @@ -115,8 +110,8 @@ pub fn save( f.write_all(&(gb_cart.rtc_regs_latch[MBC3_RTC_DAYS_H] as u32).to_le_bytes()) .unwrap(); - let timestamp = gb_cart.rtc_timestamp.saturating_add(elapsed_time); - f.write_all(×tamp.to_le_bytes()).unwrap(); + let max = ((i32::MAX as i64) << 32) | (i32::MAX as i64); + f.write_all(&max.to_le_bytes()).unwrap(); f.flush().unwrap(); } @@ -126,8 +121,8 @@ pub fn save( } fn update_rtc_regs(cart: &mut device::controller::gbcart::GbCart, elapsed_time: i64) { - let mut diff = elapsed_time - cart.last_time; - cart.last_time = elapsed_time; + let mut diff = elapsed_time - cart.last_elapsed_time; + cart.last_elapsed_time = elapsed_time; if diff > 0 { cart.rtc_regs[MBC3_RTC_SECONDS] += (diff % 60) as u8; @@ -157,8 +152,8 @@ fn update_rtc_regs(cart: &mut device::controller::gbcart::GbCart, elapsed_time: + diff; cart.rtc_regs[MBC3_RTC_DAYS_L] = (days & 0xff) as u8; - cart.rtc_regs[MBC3_RTC_DAYS_H] = - ((cart.rtc_regs[MBC3_RTC_DAYS_H] & !0x01) as i64 | (days & 0x100)) as u8; + cart.rtc_regs[MBC3_RTC_DAYS_H] &= !0x01; + cart.rtc_regs[MBC3_RTC_DAYS_H] |= ((days >> 8) & 1) as u8; /* set carry bit if days overflow */ if days > 511 { From 7fae21d7ac8acfcb6dd4b292453d4a6b640f7d93 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 9 May 2026 15:47:55 +0200 Subject: [PATCH 0856/1117] Use SDL_GetJoystickAxisInitialState (#858) * add initial_state to input profile * more * more * more * more * more * more * more * more * more --- src/ui/config.rs | 1 + src/ui/input.rs | 97 +++++++++++++++++++++++++++++++++--------------- 2 files changed, 68 insertions(+), 30 deletions(-) diff --git a/src/ui/config.rs b/src/ui/config.rs index 47c74f9..2b51543 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -11,6 +11,7 @@ pub struct InputControllerAxis { pub enabled: bool, pub id: i32, pub axis: i16, + pub initial_state: i16, } #[derive(Copy, Clone, serde::Serialize, serde::Deserialize)] diff --git a/src/ui/input.rs b/src/ui/input.rs index 5d9a3f0..40a9ed0 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -229,8 +229,9 @@ fn set_buttons_from_joystick( if profile_joystick_axis.enabled { let axis_position = unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile_joystick_axis.id) }; - if axis_position as isize * profile_joystick_axis.axis as isize > 0 - && axis_position.saturating_abs() > i16::MAX / 2 + if (axis_position as isize * profile_joystick_axis.axis as isize > 0 + || profile_joystick_axis.initial_state != 0) + && axis_position.abs_diff(profile_joystick_axis.initial_state) > (u16::MAX / 4) { *keys |= 1 << i; } @@ -335,8 +336,9 @@ fn hotkey_pressed( } else if joystick_axis.enabled && !joystick.is_null() { let axis_position = unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, joystick_axis.id) }; - pressed = axis_position as isize * joystick_axis.axis as isize > 0 - && axis_position.saturating_abs() > i16::MAX / 2 + pressed = (axis_position as isize * joystick_axis.axis as isize > 0 + || joystick_axis.initial_state != 0) + && axis_position.abs_diff(joystick_axis.initial_state) > (u16::MAX / 4) } pressed } @@ -704,6 +706,7 @@ pub fn configure_input_profile( enabled: false, id: 0, axis: 0, + initial_state: 0, }; PROFILE_SIZE]; let mut new_controller_buttons = [ui::config::InputKeyButton { enabled: false, @@ -713,12 +716,14 @@ pub fn configure_input_profile( enabled: false, id: 0, axis: 0, + initial_state: 0, }; PROFILE_SIZE]; let mut last_joystick_axis_result = ui::config::InputControllerAxis { enabled: false, id: 0, axis: 0, + initial_state: 0, }; let text_engine = unsafe { sdl3_ttf_sys::ttf::TTF_CreateRendererTextEngine(renderer) }; @@ -735,8 +740,12 @@ pub fn configure_input_profile( }; for (key, value) in key_labels.iter() { - let mut event: sdl3_sys::events::SDL_Event = Default::default(); - while unsafe { sdl3_sys::events::SDL_PollEvent(&mut event) } {} // clear events + unsafe { + sdl3_sys::events::SDL_FlushEvents( + u32::from(sdl3_sys::events::SDL_EVENT_FIRST), + u32::from(sdl3_sys::events::SDL_EVENT_LAST), + ); + } let mut key_set = false; while !key_set { @@ -746,8 +755,8 @@ pub fn configure_input_profile( text_engine, font, ); - std::thread::sleep(std::time::Duration::from_millis(100)); - while unsafe { sdl3_sys::events::SDL_PollEvent(&mut event) } { + let mut event: sdl3_sys::events::SDL_Event = Default::default(); + while !key_set && unsafe { sdl3_sys::events::SDL_WaitEventTimeout(&mut event, 100) } { if event.event_type() == sdl3_sys::events::SDL_EVENT_WINDOW_CLOSE_REQUESTED { close_input_profile_window( open_joysticks, @@ -771,23 +780,20 @@ pub fn configure_input_profile( key_set = true } } else if event.event_type() == sdl3_sys::events::SDL_EVENT_GAMEPAD_BUTTON_DOWN { - if !open_controllers.is_empty() { - new_controller_buttons[*value] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(unsafe { event.gbutton.button }), - }; - key_set = true - } + new_controller_buttons[*value] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(unsafe { event.gbutton.button }), + }; + key_set = true } else if event.event_type() == sdl3_sys::events::SDL_EVENT_GAMEPAD_AXIS_MOTION { let axis_value = unsafe { event.gaxis.value }; let axis = unsafe { event.gaxis.axis }; - if !open_controllers.is_empty() - && axis_value.saturating_abs() > (i16::MAX as i32 * 3 / 4) as i16 - { + if axis_value.saturating_abs() > (i16::MAX as i32 * 3 / 4) as i16 { let result = ui::config::InputControllerAxis { enabled: true, id: axis as i32, axis: axis_value / axis_value.saturating_abs(), + initial_state: 0, }; if result != last_joystick_axis_result { new_controller_axis[*value] = result; @@ -796,17 +802,15 @@ pub fn configure_input_profile( } } } else if event.event_type() == sdl3_sys::events::SDL_EVENT_JOYSTICK_BUTTON_DOWN { - if !open_joysticks.is_empty() { - new_joystick_buttons[*value] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(unsafe { event.jbutton.button }), - }; - key_set = true - } + new_joystick_buttons[*value] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(unsafe { event.jbutton.button }), + }; + key_set = true } else if event.event_type() == sdl3_sys::events::SDL_EVENT_JOYSTICK_HAT_MOTION { let state = unsafe { event.jhat.value }; let hat = unsafe { event.jhat.hat }; - if !open_joysticks.is_empty() && state != sdl3_sys::joystick::SDL_HAT_CENTERED { + if state != sdl3_sys::joystick::SDL_HAT_CENTERED { new_joystick_hat[*value] = ui::config::InputJoystickHat { enabled: true, id: hat as i32, @@ -817,15 +821,37 @@ pub fn configure_input_profile( } else if event.event_type() == sdl3_sys::events::SDL_EVENT_JOYSTICK_AXIS_MOTION { let axis_value = unsafe { event.jaxis.value }; let axis = unsafe { event.jaxis.axis }; - if !open_joysticks.is_empty() - && axis_value.saturating_abs() > (i16::MAX as i32 * 3 / 4) as i16 - { + + let mut initial_state = 0; + let has_initial_state = unsafe { + sdl3_sys::joystick::SDL_GetJoystickAxisInitialState( + sdl3_sys::joystick::SDL_GetJoystickFromID(event.jaxis.which), + axis as i32, + &mut initial_state, + ) + }; + initial_state = if has_initial_state { + if initial_state < i16::MIN / 2 { + i16::MIN + } else if initial_state > i16::MAX / 2 { + i16::MAX + } else { + 0 + } + } else { + 0 + }; + + if axis_value.abs_diff(initial_state) > (u16::MAX / 4) { let result = ui::config::InputControllerAxis { enabled: true, id: axis as i32, axis: axis_value / axis_value.saturating_abs(), + initial_state, }; - if result != last_joystick_axis_result { + let same_trigger = last_joystick_axis_result.id == result.id + && last_joystick_axis_result.initial_state != 0; + if result != last_joystick_axis_result && !same_trigger { new_joystick_axis[*value] = result; last_joystick_axis_result = result; key_set = true @@ -869,6 +895,7 @@ pub fn get_default_profile() -> ui::config::InputProfile { enabled: false, id: 0, axis: 0, + initial_state: 0, }; PROFILE_SIZE]; let mut default_keys = [ui::config::InputKeyButton { enabled: false, @@ -975,6 +1002,7 @@ pub fn get_default_profile() -> ui::config::InputProfile { enabled: true, id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFT_TRIGGER), axis: 1, + initial_state: 0, }; default_controller_buttons[B_BUTTON] = ui::config::InputKeyButton { enabled: true, @@ -988,21 +1016,25 @@ pub fn get_default_profile() -> ui::config::InputProfile { enabled: true, id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTX), axis: 1, + initial_state: 0, }; default_controller_axis[L_CBUTTON] = ui::config::InputControllerAxis { enabled: true, id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTX), axis: -1, + initial_state: 0, }; default_controller_axis[D_CBUTTON] = ui::config::InputControllerAxis { enabled: true, id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTY), axis: 1, + initial_state: 0, }; default_controller_axis[U_CBUTTON] = ui::config::InputControllerAxis { enabled: true, id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_RIGHTY), axis: -1, + initial_state: 0, }; default_controller_buttons[R_TRIG] = ui::config::InputKeyButton { enabled: true, @@ -1016,21 +1048,25 @@ pub fn get_default_profile() -> ui::config::InputProfile { enabled: true, id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTX), axis: -1, + initial_state: 0, }; default_controller_axis[AXIS_RIGHT] = ui::config::InputControllerAxis { enabled: true, id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTX), axis: 1, + initial_state: 0, }; default_controller_axis[AXIS_UP] = ui::config::InputControllerAxis { enabled: true, id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTY), axis: -1, + initial_state: 0, }; default_controller_axis[AXIS_DOWN] = ui::config::InputControllerAxis { enabled: true, id: i32::from(sdl3_sys::gamepad::SDL_GAMEPAD_AXIS_LEFTY), axis: 1, + initial_state: 0, }; default_controller_buttons[HOTKEY] = ui::config::InputKeyButton { enabled: true, @@ -1054,6 +1090,7 @@ pub fn get_default_profile() -> ui::config::InputProfile { enabled: false, id: 0, axis: 0, + initial_state: 0, }; PROFILE_SIZE], dinput: false, deadzone: DEADZONE_DEFAULT, From a7cbf866e8831e8896a09216559c06f3f823f983 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 9 May 2026 19:05:38 +0200 Subject: [PATCH 0857/1117] pump events before flush (#862) --- src/ui/input.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ui/input.rs b/src/ui/input.rs index 40a9ed0..1af6d3c 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -741,6 +741,7 @@ pub fn configure_input_profile( for (key, value) in key_labels.iter() { unsafe { + sdl3_sys::events::SDL_PumpEvents(); sdl3_sys::events::SDL_FlushEvents( u32::from(sdl3_sys::events::SDL_EVENT_FIRST), u32::from(sdl3_sys::events::SDL_EVENT_LAST), From 5b3b8265e521387dd5c2aa8aa5fb932170f5b193 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 9 May 2026 20:02:18 +0200 Subject: [PATCH 0858/1117] set offset using let match (#863) --- src/device/controller/gbcart.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/device/controller/gbcart.rs b/src/device/controller/gbcart.rs index a22424c..8ee0cc5 100644 --- a/src/device/controller/gbcart.rs +++ b/src/device/controller/gbcart.rs @@ -37,21 +37,20 @@ pub enum CartType { pub fn init(gb_cart: &mut device::controller::gbcart::GbCart, rom: &[u8], ram: &[u8]) { gb_cart.rom = rom.to_vec(); - let offset; - match ram.len() % 8192 { + let offset = match ram.len() % 8192 { 44 => { - offset = ram.len() - 44; gb_cart.ram = ram[..ram.len() - 44].to_vec(); + ram.len() - 44 } 48 => { - offset = ram.len() - 48; gb_cart.ram = ram[..ram.len() - 48].to_vec(); + ram.len() - 48 } _ => { gb_cart.ram = ram.to_vec(); return; } - } + }; gb_cart.rtc_regs[MBC3_RTC_SECONDS] = u32::from_le_bytes(ram[offset..offset + 4].try_into().unwrap()) as u8; From fe23e4bad97d90c0ea69a60e8e22f7371f3730e1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 9 May 2026 20:58:29 +0200 Subject: [PATCH 0859/1117] put default profile first (#864) --- src/ui/gui.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 6943117..ab8bfda 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -148,6 +148,12 @@ fn input_profiles(config: &ui::config::Config) -> Vec { for key in config.input.input_profiles.keys() { profiles.push(key.clone()) } + + // make sure default profile is always first + if let Some(pos) = profiles.iter().position(|x| x == "default") { + let default_profile = profiles.remove(pos); + profiles.insert(0, default_profile); + } profiles } From a5b7561c5138b7fb7194cc791c92aed887ae3d8f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 10 May 2026 11:28:48 +0200 Subject: [PATCH 0860/1117] clean up read_cart_word (#865) * clean up read_cart_word * more * more --- src/device/cart/rom.rs | 44 +++++++++++++++--------------------------- 1 file changed, 16 insertions(+), 28 deletions(-) diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index de92d2b..7fc0991 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -6,22 +6,14 @@ use sha2::{Digest, Sha256}; pub const CART_MASK: usize = 0xFFFFFFF; fn read_cart_word(device: &device::Device, address: usize) -> u32 { - let mut data: [u8; 4] = [0; 4]; - for i in 0..4 { - if let Some(value) = device - .ui - .storage - .saves - .romsave - .data - .get(&(address as u32 + i)) - { - data[i as usize] = *value; - } else { - data[i as usize] = *device.cart.rom.get(address + i as usize).unwrap_or(&0); - } - } - u32::from_be_bytes(data) + let romsave = &device.ui.storage.saves.romsave.data; + let rom = &device.cart.rom; + u32::from_be_bytes(std::array::from_fn(|i| { + romsave + .get(&((address + i) as u32)) + .copied() + .unwrap_or_else(|| *rom.get(address + i).unwrap_or(&0)) + })) } pub fn read_mem_fast( @@ -113,19 +105,15 @@ pub fn dma_write( let mut i = dram_addr; let mut j = cart_addr; while i < dram_addr + length { - if let Some(value) = device.ui.storage.saves.romsave.data.get(&j) { - *device - .rdram - .mem - .get_mut(i as usize ^ device.byte_swap) - .unwrap_or(&mut 0) = *value; + *device + .rdram + .mem + .get_mut(i as usize ^ device.byte_swap) + .unwrap_or(&mut 0) = if let Some(value) = device.ui.storage.saves.romsave.data.get(&j) { + *value } else { - *device - .rdram - .mem - .get_mut(i as usize ^ device.byte_swap) - .unwrap_or(&mut 0) = *device.cart.rom.get(j as usize).unwrap_or(&0); - } + *device.cart.rom.get(j as usize).unwrap_or(&0) + }; i += 1; j += 1; } From 5596dad11176e85e279aba741a706a88a417d1ce Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 10 May 2026 15:08:13 +0200 Subject: [PATCH 0861/1117] improve some translation wrappers (#866) --- src/ui/gui/appwindow.slint | 5 +++-- src/ui/gui/netplay_create.slint | 2 +- src/ui/gui/netplay_join.slint | 12 ++++++------ src/ui/gui/netplay_wait.slint | 8 ++++---- src/ui/gui/retroachievements_page.slint | 3 ++- src/ui/retroachievements.rs | 2 +- 6 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 0d3b16d..e3af450 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -54,6 +54,7 @@ export component AppWindow inherits Window { in-out property ra_challenge <=> RAData.challenge; in-out property ra_leaderboard <=> RAData.leaderboard; in-out property ra_softcore_only <=> RAData.ra_softcore_only; + out property ra_not_logged_in <=> RAData.not_logged_in; in-out property integer_scaling <=> SettingsData.integer_scaling; in-out property ssaa <=> SettingsData.ssaa; in-out property fullscreen <=> SettingsData.fullscreen; @@ -83,12 +84,12 @@ export component AppWindow inherits Window { in-out property cheats <=> CheatsData.cheats; preferred-width: 700px; preferred-height: 500px; - title: @tr("Gopher64"); + title: "Gopher64"; icon: @image-url("../../../data/icon/gopher64.png"); HorizontalLayout { side-bar := SideBar { - title: @tr("Gopher64"); + title: "Gopher64"; model: [ @tr("Menu" => "Local Game"), @tr("Menu" => "Controller Config"), diff --git a/src/ui/gui/netplay_create.slint b/src/ui/gui/netplay_create.slint index 76884a2..da20480 100644 --- a/src/ui/gui/netplay_create.slint +++ b/src/ui/gui/netplay_create.slint @@ -125,6 +125,6 @@ export component NetplayCreate inherits Window { export component DispatcherDialog inherits Dialog { title: @tr("Creating Server"); Text { - text: "Creating server, please wait...This may take about 30 seconds."; + text: @tr("Creating server, please wait...This may take about 30 seconds."); } } diff --git a/src/ui/gui/netplay_join.slint b/src/ui/gui/netplay_join.slint index fbf2865..b73c888 100644 --- a/src/ui/gui/netplay_join.slint +++ b/src/ui/gui/netplay_join.slint @@ -44,7 +44,7 @@ export component NetplayJoin inherits Window { } LineEdit { - placeholder-text: @tr("example.com:45000"); + placeholder-text: "example.com:45000"; text: NetplayData.custom_server_url; edited(text) => { NetplayData.custom_server_url = text; @@ -70,11 +70,11 @@ export component NetplayJoin inherits Window { } StandardTableView { columns: [ - { title: "Server" }, - { title: "Session Name" }, - { title: "Game Name" }, - { title: "Password" }, - { title: "Cheats" } + { title: @tr("Server") }, + { title: @tr("Session Name") }, + { title: @tr("Game Name") }, + { title: @tr("Password") }, + { title: @tr("Cheats") } ]; rows: NetplayData.sessions; current-row: NetplayData.current_session; diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint index 2460768..2d70058 100644 --- a/src/ui/gui/netplay_wait.slint +++ b/src/ui/gui/netplay_wait.slint @@ -47,21 +47,21 @@ export component NetplayWait inherits Window { GridBox { Row { Text { - text: "Player 1: " + players[0]; + text: @tr("Player 1: ") + players[0]; } Text { - text: "Player 2: " + players[1]; + text: @tr("Player 2: ") + players[1]; } } Row { Text { - text: "Player 3: " + players[2]; + text: @tr("Player 3: ") + players[2]; } Text { - text: "Player 4: " + players[3]; + text: @tr("Player 4: ") + players[3]; } } } diff --git a/src/ui/gui/retroachievements_page.slint b/src/ui/gui/retroachievements_page.slint index a55f5d1..0bb4763 100644 --- a/src/ui/gui/retroachievements_page.slint +++ b/src/ui/gui/retroachievements_page.slint @@ -15,6 +15,7 @@ export global RAData { in-out property ra_username; in-out property ra_password; in-out property current_user_message; + out property not_logged_in: @tr("Not currently logged in"); } export component RetroAchievements inherits Page { @@ -37,7 +38,7 @@ export component RetroAchievements inherits Page { RAData.ra_username = ""; username_widget.text = ""; password_widget.text = ""; - RAData.current_user_message = "Not currently logged in"; + RAData.current_user_message = RAData.not_logged_in; RAData.ra_show_profile = false; } ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard); diff --git a/src/ui/retroachievements.rs b/src/ui/retroachievements.rs index 1d052a4..82aacf4 100644 --- a/src/ui/retroachievements.rs +++ b/src/ui/retroachievements.rs @@ -27,7 +27,7 @@ pub fn ra_window(app: &ui::gui::AppWindow) { retroachievements::login_token_user(app.get_ra_username().to_string(), token, tx); set_current_user_message(app, rx); } else { - app.set_ra_current_user_message("Not currently logged in".into()); + app.set_ra_current_user_message(app.get_ra_not_logged_in()); } let weak_app2 = app.as_weak(); From 0659da24fa126c78ff38e744ca7fa89df39f4950 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 10 May 2026 16:24:34 +0200 Subject: [PATCH 0862/1117] bundle AI generated spanish translation (#867) * bundle AI generated spanish translation * more * more * more * more * more * more * more --- .github/workflows/build.yml | 19 +- .github/workflows/lint.yml | 15 +- build.rs | 3 +- data/translations/README.md | 6 + data/translations/es/LC_MESSAGES/gopher64.po | 542 +++++++++++++++++++ data/translations/gopher64.pot | 539 ++++++++++++++++++ 6 files changed, 1111 insertions(+), 13 deletions(-) create mode 100644 data/translations/README.md create mode 100644 data/translations/es/LC_MESSAGES/gopher64.po create mode 100644 data/translations/gopher64.pot diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8abbbb1..4e158e0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,11 +4,11 @@ permissions: on: push: - branches: [ "main" ] + branches: ["main"] tags: - "v*" pull_request: - branches: [ "main" ] + branches: ["main"] merge_group: env: @@ -41,7 +41,8 @@ jobs: rustflags: "" cache: ${{ github.ref_type != 'tag' }} - name: Set LLVM_VERSION - run: echo "LLVM_VERSION=$(rustc --version --verbose | grep "LLVM version" | cut + run: + echo "LLVM_VERSION=$(rustc --version --verbose | grep "LLVM version" | cut -d':' -f2 | xargs)" >> $GITHUB_ENV - name: Install SDL Dependencies # https://wiki.libsdl.org/SDL3/README-linux#build-dependencies @@ -60,7 +61,8 @@ jobs: uses: KyleMayes/install-llvm-action@v2 with: version: ${{ env.LLVM_VERSION }} - force-url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ + force-url: + https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-Linux-${{ matrix.llvm }}.tar.xz - name: Build @@ -118,7 +120,8 @@ jobs: uses: KyleMayes/install-llvm-action@v2 with: version: ${{ env.LLVM_VERSION }} - force-url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ + force-url: + https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-${{ matrix.llvm }}.exe - name: Build @@ -189,13 +192,15 @@ jobs: rustflags: "" cache: ${{ github.ref_type != 'tag' }} - name: Set LLVM_VERSION - run: echo "LLVM_VERSION=$(rustc --version --verbose | grep "LLVM version" | cut + run: + echo "LLVM_VERSION=$(rustc --version --verbose | grep "LLVM version" | cut -d':' -f2 | xargs)" >> $GITHUB_ENV - name: Install LLVM and Clang uses: KyleMayes/install-llvm-action@v2 with: version: ${{ env.LLVM_VERSION }} - force-url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ + force-url: + https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-macOS-${{ matrix.llvm }}.tar.xz - name: Build diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 7f5fe13..b6829f7 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -2,9 +2,9 @@ name: Rust-lint on: push: - branches: [ "main" ] + branches: ["main"] pull_request: - branches: [ "main" ] + branches: ["main"] merge_group: permissions: @@ -24,7 +24,8 @@ jobs: with: components: clippy, rustfmt - name: Set LLVM_VERSION - run: echo "LLVM_VERSION=$(rustc --version --verbose | grep "LLVM version" | cut + run: + echo "LLVM_VERSION=$(rustc --version --verbose | grep "LLVM version" | cut -d':' -f2 | xargs)" >> $GITHUB_ENV - name: Install SDL Dependencies # https://wiki.libsdl.org/SDL3/README-linux#build-dependencies @@ -37,17 +38,21 @@ jobs: libxtst-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev libthai-dev libpipewire-0.3-dev libwayland-dev - libdecor-0-dev liburing-dev libfreetype-dev libfontconfig-dev + libdecor-0-dev liburing-dev libfreetype-dev libfontconfig-dev gettext version: lint-1.0 - name: Install LLVM and Clang uses: KyleMayes/install-llvm-action@v2 with: version: ${{ env.LLVM_VERSION }} - force-url: https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ + force-url: + https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-Linux-X64.tar.xz - name: Rustfmt Check uses: actions-rust-lang/rustfmt@v1 - name: Lint run: | + cargo install slint-tr-extractor cargo clippy -- -Dwarnings cargo clippy --no-default-features -- -Dwarnings + find -name \*.slint | xargs slint-tr-extractor -o /tmp/translations.pot + msgcmp --use-untranslated /tmp/translations.pot data/translations/gopher64.pot diff --git a/build.rs b/build.rs index b8408b2..c7040bb 100644 --- a/build.rs +++ b/build.rs @@ -5,7 +5,8 @@ fn main() { #[cfg(feature = "gui")] { - let slint_config = slint_build::CompilerConfiguration::new(); + let slint_config = slint_build::CompilerConfiguration::new() + .with_bundled_translations("data/translations"); slint_build::compile_with_config("src/ui/gui/appwindow.slint", slint_config).unwrap(); } diff --git a/data/translations/README.md b/data/translations/README.md new file mode 100644 index 0000000..b262a51 --- /dev/null +++ b/data/translations/README.md @@ -0,0 +1,6 @@ +# Adding translations to Gopher64 +1. Copy and modify the `gopher64.pot` file in this directory with your translations. +2. Rename it to `gopher64.po` and put it here: +`data/translations//LC_MESSAGES/gopher64.po` + +See [here](https://docs.slint.dev/latest/docs/slint/guide/development/translations/#translating-strings) for more details on creating a .po file. diff --git a/data/translations/es/LC_MESSAGES/gopher64.po b/data/translations/es/LC_MESSAGES/gopher64.po new file mode 100644 index 0000000..e9761b9 --- /dev/null +++ b/data/translations/es/LC_MESSAGES/gopher64.po @@ -0,0 +1,542 @@ +# gopher64 - Spanish Translation +msgid "" +msgstr "" +"Project-Id-Version: gopher64\n" +"POT-Creation-Date: 2026-05-10 13:12+0000\n" +"PO-Revision-Date: 2026-05-10 15:15+0000\n" +"Last-Translator: Gemini\n" +"Language-Team: Spanish\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/ui/gui/about_page.slint:17 +msgctxt "NewVersionButton" +msgid "New version available! Click here to download" +msgstr "¡Nueva versión disponible! Haz clic aquí para descargar" + +#: src/ui/gui/about_page.slint:33 +msgctxt "About" +msgid "About" +msgstr "Acerca de" + +#: src/ui/gui/about_page.slint:40 +msgctxt "About" +msgid "Wiki" +msgstr "Wiki" + +#: src/ui/gui/about_page.slint:50 +msgctxt "About" +msgid "Discord Server" +msgstr "Servidor de Discord" + +#: src/ui/gui/about_page.slint:60 +msgctxt "About" +msgid "Source Code" +msgstr "Código fuente" + +#: src/ui/gui/about_page.slint:70 +msgctxt "About" +msgid "Donate (via Patreon)" +msgstr "Donar (vía Patreon)" + +#: src/ui/gui/about_page.slint:77 +msgctxt "About" +msgid "Donate (via GitHub)" +msgstr "Donar (vía GitHub)" + +#: src/ui/gui/cheat_page.slint:15 +msgctxt "Cheats" +msgid "Cheats" +msgstr "Trucos" + +#: src/ui/gui/cheat_page.slint:25 +msgctxt "Cheats" +msgid "Select ROM" +msgstr "Seleccionar ROM" + +#: src/ui/gui/cheat_page.slint:41 +msgctxt "Cheats" +msgid "Clear Cheats For All ROMs" +msgstr "Borrar trucos de todas las ROM" + +#: src/ui/gui/cheat_page.slint:86 +msgctxt "Cheats" +msgid "No Cheats Available" +msgstr "No hay trucos disponibles" + +#: src/ui/gui/controller_page.slint:26 +msgctxt "ControllerConfig" +msgid "Controller Configuration" +msgstr "Configuración del mando" + +#: src/ui/gui/controller_page.slint:37 +msgctxt "ControllerConfig" +msgid "Configure Input Profile" +msgstr "Configurar perfil de entrada" + +#: src/ui/gui/controller_page.slint:49 +msgctxt "ControllerConfig" +msgid "Port" +msgstr "Puerto" + +#: src/ui/gui/controller_page.slint:60 +msgctxt "ControllerConfig" +msgid "Enabled" +msgstr "Activado" + +#: src/ui/gui/controller_page.slint:73 +msgctxt "ControllerConfig" +msgid "Emulate VRU" +msgstr "Emular VRU" + +#: src/ui/gui/controller_page.slint:87 +msgctxt "ControllerConfig" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:101 +msgctxt "ControllerConfig" +msgid "Profile" +msgstr "Perfil" + +#: src/ui/gui/controller_page.slint:117 +msgctxt "ControllerConfig" +msgid "Controller" +msgstr "Mando" + +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "Crear/Modificar perfil de entrada" + +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "Introduce el nombre del perfil para crear o modificar" + +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "Porcentaje de zona muerta" + +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "Usar DirectInput" + +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "Iniciar asistente de creación de perfil" + +#: src/ui/gui/localgame_page.slint:18 +msgctxt "LocalGame" +msgid "Local Game" +msgstr "Juego local" + +#: src/ui/gui/localgame_page.slint:25 +msgctxt "LocalGame" +msgid "Open ROM" +msgstr "Abrir ROM" + +#: src/ui/gui/localgame_page.slint:36 +msgctxt "LocalGame" +msgid "Open Saves Folder" +msgstr "Abrir carpeta de guardados" + +#: src/ui/gui/localgame_page.slint:53 +msgctxt "LocalGame" +msgid "Recent ROMs" +msgstr "ROM recientes" + +#: src/ui/gui/netplay_page.slint:33 +msgctxt "Netplay" +msgid "Netplay" +msgstr "Netplay" + +#: src/ui/gui/netplay_page.slint:40 +msgctxt "Netplay" +msgid "Create Session" +msgstr "Crear sesión" + +#: src/ui/gui/netplay_page.slint:50 +msgctxt "Netplay" +msgid "Join Session" +msgstr "Unirse a sesión" + +#: src/ui/gui/netplay_page.slint:64 +msgctxt "Netplay" +msgid "Netplay Discord Channel" +msgstr "Canal de Discord de Netplay" + +#: src/ui/gui/netplay_page.slint:71 +msgctxt "Netplay" +msgid "Provide Feedback" +msgstr "Enviar comentarios" + +#: src/ui/gui/netplay_page.slint:82 +msgctxt "CustomNetplayServer" +msgid "Custom Netplay Server" +msgstr "Servidor Netplay personalizado" + +#: src/ui/gui/settings_page.slint:22 +msgctxt "Settings" +msgid "Settings" +msgstr "Ajustes" + +#: src/ui/gui/settings_page.slint:29 +msgctxt "Settings" +msgid "Resolution:" +msgstr "Resolución:" + +#: src/ui/gui/settings_page.slint:45 +msgctxt "Settings" +msgid "SSAA downscaling" +msgstr "Reducción de escala SSAA" + +#: src/ui/gui/settings_page.slint:56 +msgctxt "Settings" +msgid "Integer Scaling" +msgstr "Escalado de enteros" + +#: src/ui/gui/settings_page.slint:67 +msgctxt "Settings" +msgid "Fullscreen" +msgstr "Pantalla completa" + +#: src/ui/gui/settings_page.slint:78 +msgctxt "Settings" +msgid "Widescreen (stretch)" +msgstr "Pantalla ancha (estirado)" + +#: src/ui/gui/settings_page.slint:89 +msgctxt "Settings" +msgid "VSync" +msgstr "Sincronización vertical (VSync)" + +#: src/ui/gui/settings_page.slint:100 +msgctxt "Settings" +msgid "Apply CRT shader" +msgstr "Aplicar sombreador CRT" + +#: src/ui/gui/settings_page.slint:115 +msgctxt "Settings" +msgid "Overclock N64 CPU (may cause bugs)" +msgstr "Overclock CPU N64 (puede causar errores)" + +#: src/ui/gui/settings_page.slint:126 +msgctxt "Settings" +msgid "Disable Expansion Pak" +msgstr "Desactivar Expansion Pak" + +#: src/ui/gui/settings_page.slint:137 +msgctxt "Settings" +msgid "Emulate UNFLoader" +msgstr "Emular UNFLoader" + +#: src/ui/gui/vru_dialog.slint:7 +msgctxt "VruDialog" +msgid "What Would You Like To Say?" +msgstr "¿Qué te gustaría decir?" + +#: src/ui/gui/appwindow.slint:94 +msgctxt "Menu" +msgid "Local Game" +msgstr "Juego local" + +#: src/ui/gui/appwindow.slint:95 +msgctxt "Menu" +msgid "Controller Config" +msgstr "Config. del mando" + +#: src/ui/gui/appwindow.slint:96 +msgctxt "Menu" +msgid "Netplay" +msgstr "Netplay" + +#: src/ui/gui/appwindow.slint:97 +msgctxt "Menu" +msgid "Cheats" +msgstr "Trucos" + +#: src/ui/gui/appwindow.slint:98 +msgctxt "Menu" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/appwindow.slint:99 +msgctxt "Menu" +msgid "Settings" +msgstr "Ajustes" + +#: src/ui/gui/appwindow.slint:100 +msgctxt "Menu" +msgid "About" +msgstr "Acerca de" + +#: src/ui/gui/appwindow.slint:194 +msgctxt "ErrorDialog" +msgid "Error" +msgstr "Error" + +#: src/ui/gui/netplay_create.slint:5 +msgctxt "NetplayCreate" +msgid "Netplay: Create Session" +msgstr "Netplay: Crear sesión" + +#: src/ui/gui/netplay_create.slint:24 +msgctxt "NetplayCreate" +msgid "Session Name:" +msgstr "Nombre de la sesión:" + +#: src/ui/gui/netplay_create.slint:28 +msgctxt "NetplayCreate" +msgid "Enter session name" +msgstr "Introduce el nombre de la sesión" + +#: src/ui/gui/netplay_create.slint:37 +msgctxt "NetplayCreate" +msgid "Password (Optional):" +msgstr "Contraseña (Opcional):" + +#: src/ui/gui/netplay_create.slint:41 +msgctxt "NetplayCreate" +msgid "Enter session password" +msgstr "Introduce la contraseña" + +#: src/ui/gui/netplay_create.slint:51 +msgctxt "NetplayCreate" +msgid "Player Name:" +msgstr "Nombre del jugador:" + +#: src/ui/gui/netplay_create.slint:55 +msgctxt "NetplayCreate" +msgid "Enter player name" +msgstr "Introduce tu nombre" + +#: src/ui/gui/netplay_create.slint:64 +msgctxt "NetplayCreate" +msgid "Server:" +msgstr "Servidor:" + +#: src/ui/gui/netplay_create.slint:82 +msgctxt "NetplayCreate" +msgid "Select ROM" +msgstr "Seleccionar ROM" + +#: src/ui/gui/netplay_create.slint:97 +msgctxt "NetplayCreate" +msgid "" +"This game has cheats enabled. Cheats will be synchronized with other players." +msgstr "" +"Este juego tiene trucos activados. Los trucos se sincronizarán con los otros jugadores." + +#: src/ui/gui/netplay_create.slint:103 +msgctxt "NetplayCreate" +msgid "Create Session" +msgstr "Crear sesión" + +#: src/ui/gui/netplay_create.slint:126 +msgctxt "DispatcherDialog" +msgid "Creating Server" +msgstr "Creando servidor" + +#: src/ui/gui/netplay_create.slint:128 +msgctxt "DispatcherDialog" +msgid "Creating server, please wait...This may take about 30 seconds." +msgstr "Creando servidor, espera... Puede tardar unos 30 segundos." + +#: src/ui/gui/netplay_join.slint:5 +msgctxt "NetplayJoin" +msgid "Netplay: Join Session" +msgstr "Netplay: Unirse a la sesión" + +#: src/ui/gui/netplay_join.slint:30 +msgctxt "NetplayJoin" +msgid "Player Name (required):" +msgstr "Nombre de jugador (requerido):" + +#: src/ui/gui/netplay_join.slint:34 +msgctxt "NetplayJoin" +msgid "Enter player name" +msgstr "Introduce tu nombre" + +#: src/ui/gui/netplay_join.slint:43 +msgctxt "NetplayJoin" +msgid "Custom Server URL (optional):" +msgstr "URL de servidor personalizado (opcional):" + +#: src/ui/gui/netplay_join.slint:57 +msgctxt "NetplayJoin" +msgid "Refreshing session list, please wait..." +msgstr "Actualizando lista de sesiones, espera..." + +#: src/ui/gui/netplay_join.slint:62 +msgctxt "NetplayJoin" +msgid "Click on a session below to select it" +msgstr "Haz clic en una sesión para seleccionarla" + +#: src/ui/gui/netplay_join.slint:67 +msgctxt "NetplayJoin" +msgid "" +"No sessions available. Please refresh to check again." +msgstr "" +"No hay sesiones disponibles. Refresca para comprobar de nuevo." + +#: src/ui/gui/netplay_join.slint:73 +msgctxt "NetplayJoin" +msgid "Server" +msgstr "Servidor" + +#: src/ui/gui/netplay_join.slint:74 +msgctxt "NetplayJoin" +msgid "Session Name" +msgstr "Nombre de la sesión" + +#: src/ui/gui/netplay_join.slint:75 +msgctxt "NetplayJoin" +msgid "Game Name" +msgstr "Nombre del juego" + +#: src/ui/gui/netplay_join.slint:76 +msgctxt "NetplayJoin" +msgid "Password" +msgstr "Contraseña" + +#: src/ui/gui/netplay_join.slint:77 +msgctxt "NetplayJoin" +msgid "Cheats" +msgstr "Trucos" + +#: src/ui/gui/netplay_join.slint:91 +msgctxt "NetplayJoin" +msgid "Refresh Session List" +msgstr "Actualizar lista" + +#: src/ui/gui/netplay_join.slint:105 +msgctxt "NetplayJoin" +msgid "Password (if required)" +msgstr "Contraseña (si es necesaria)" + +#: src/ui/gui/netplay_join.slint:112 +msgctxt "NetplayJoin" +msgid "Select ROM" +msgstr "Seleccionar ROM" + +#: src/ui/gui/netplay_join.slint:125 +msgctxt "NetplayJoin" +msgid "Join Session" +msgstr "Unirse a la sesión" + +#: src/ui/gui/netplay_wait.slint:14 +msgctxt "NetplayWait" +msgid "Netplay: Waiting Room" +msgstr "Netplay: Sala de espera" + +#: src/ui/gui/netplay_wait.slint:31 +msgctxt "NetplayWait" +msgid "Session Name: " +msgstr "Nombre de sesión: " + +#: src/ui/gui/netplay_wait.slint:37 +msgctxt "NetplayWait" +msgid "Game Name: " +msgstr "Nombre del juego: " + +#: src/ui/gui/netplay_wait.slint:43 +msgctxt "NetplayWait" +msgid "Ping: " +msgstr "Latencia (Ping): " + +#: src/ui/gui/netplay_wait.slint:50 +msgctxt "NetplayWait" +msgid "Player 1: " +msgstr "Jugador 1: " + +#: src/ui/gui/netplay_wait.slint:54 +msgctxt "NetplayWait" +msgid "Player 2: " +msgstr "Jugador 2: " + +#: src/ui/gui/netplay_wait.slint:60 +msgctxt "NetplayWait" +msgid "Player 3: " +msgstr "Jugador 3: " + +#: src/ui/gui/netplay_wait.slint:64 +msgctxt "NetplayWait" +msgid "Player 4: " +msgstr "Jugador 4: " + +#: src/ui/gui/netplay_wait.slint:76 +msgctxt "NetplayWait" +msgid "Enter chat message" +msgstr "Escribe un mensaje" + +#: src/ui/gui/netplay_wait.slint:87 +msgctxt "NetplayWait" +msgid "Send Message" +msgstr "Enviar mensaje" + +#: src/ui/gui/netplay_wait.slint:102 +msgctxt "NetplayWait" +msgid "Start Game" +msgstr "Iniciar juego" + +#: src/ui/gui/retroachievements_page.slint:18 +msgctxt "RAData" +msgid "Not currently logged in" +msgstr "Sesión no iniciada" + +#: src/ui/gui/retroachievements_page.slint:26 +msgctxt "RetroAchievements" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/retroachievements_page.slint:33 +msgctxt "RetroAchievements" +msgid "Enabled" +msgstr "Activado" + +#: src/ui/gui/retroachievements_page.slint:51 +msgctxt "RetroAchievements" +msgid "Hardcore mode" +msgstr "Modo Hardcore" + +#: src/ui/gui/retroachievements_page.slint:63 +msgctxt "RetroAchievements" +msgid "Challenge Indicators" +msgstr "Indicadores de desafío" + +#: src/ui/gui/retroachievements_page.slint:75 +msgctxt "RetroAchievements" +msgid "Leaderboard Trackers" +msgstr "Seguimiento de clasificación" + +#: src/ui/gui/retroachievements_page.slint:92 +msgctxt "RetroAchievements" +msgid "View Profile" +msgstr "Ver perfil" + +#: src/ui/gui/retroachievements_page.slint:102 +msgctxt "RetroAchievements" +msgid "Username" +msgstr "Usuario" + +#: src/ui/gui/retroachievements_page.slint:112 +msgctxt "RetroAchievements" +msgid "Password" +msgstr "Contraseña" + +#: src/ui/gui/retroachievements_page.slint:121 +msgctxt "RetroAchievements" +msgid "Login" +msgstr "Entrar" + +#: src/ui/gui/retroachievements_page.slint:137 +msgctxt "RetroAchievements" +msgid "View Supported Games" +msgstr "Ver juegos compatibles" diff --git a/data/translations/gopher64.pot b/data/translations/gopher64.pot new file mode 100644 index 0000000..7ea07e3 --- /dev/null +++ b/data/translations/gopher64.pot @@ -0,0 +1,539 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2026-05-10 13:23+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: src/ui/gui/about_page.slint:17 +msgctxt "NewVersionButton" +msgid "New version available! Click here to download" +msgstr "" + +#: src/ui/gui/about_page.slint:33 +msgctxt "About" +msgid "About" +msgstr "" + +#: src/ui/gui/about_page.slint:40 +msgctxt "About" +msgid "Wiki" +msgstr "" + +#: src/ui/gui/about_page.slint:50 +msgctxt "About" +msgid "Discord Server" +msgstr "" + +#: src/ui/gui/about_page.slint:60 +msgctxt "About" +msgid "Source Code" +msgstr "" + +#: src/ui/gui/about_page.slint:70 +msgctxt "About" +msgid "Donate (via Patreon)" +msgstr "" + +#: src/ui/gui/about_page.slint:77 +msgctxt "About" +msgid "Donate (via GitHub)" +msgstr "" + +#: src/ui/gui/cheat_page.slint:15 +msgctxt "Cheats" +msgid "Cheats" +msgstr "" + +#: src/ui/gui/cheat_page.slint:25 +msgctxt "Cheats" +msgid "Select ROM" +msgstr "" + +#: src/ui/gui/cheat_page.slint:41 +msgctxt "Cheats" +msgid "Clear Cheats For All ROMs" +msgstr "" + +#: src/ui/gui/cheat_page.slint:86 +msgctxt "Cheats" +msgid "No Cheats Available" +msgstr "" + +#: src/ui/gui/controller_page.slint:26 +msgctxt "ControllerConfig" +msgid "Controller Configuration" +msgstr "" + +#: src/ui/gui/controller_page.slint:37 +msgctxt "ControllerConfig" +msgid "Configure Input Profile" +msgstr "" + +#: src/ui/gui/controller_page.slint:49 +msgctxt "ControllerConfig" +msgid "Port" +msgstr "" + +#: src/ui/gui/controller_page.slint:60 +msgctxt "ControllerConfig" +msgid "Enabled" +msgstr "" + +#: src/ui/gui/controller_page.slint:73 +msgctxt "ControllerConfig" +msgid "Emulate VRU" +msgstr "" + +#: src/ui/gui/controller_page.slint:87 +msgctxt "ControllerConfig" +msgid "Transfer Pak" +msgstr "" + +#: src/ui/gui/controller_page.slint:101 +msgctxt "ControllerConfig" +msgid "Profile" +msgstr "" + +#: src/ui/gui/controller_page.slint:117 +msgctxt "ControllerConfig" +msgid "Controller" +msgstr "" + +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "" + +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "" + +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "" + +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "" + +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "" + +#: src/ui/gui/localgame_page.slint:18 +msgctxt "LocalGame" +msgid "Local Game" +msgstr "" + +#: src/ui/gui/localgame_page.slint:25 +msgctxt "LocalGame" +msgid "Open ROM" +msgstr "" + +#: src/ui/gui/localgame_page.slint:36 +msgctxt "LocalGame" +msgid "Open Saves Folder" +msgstr "" + +#: src/ui/gui/localgame_page.slint:53 +msgctxt "LocalGame" +msgid "Recent ROMs" +msgstr "" + +#: src/ui/gui/netplay_page.slint:33 +msgctxt "Netplay" +msgid "Netplay" +msgstr "" + +#: src/ui/gui/netplay_page.slint:40 +msgctxt "Netplay" +msgid "Create Session" +msgstr "" + +#: src/ui/gui/netplay_page.slint:50 +msgctxt "Netplay" +msgid "Join Session" +msgstr "" + +#: src/ui/gui/netplay_page.slint:64 +msgctxt "Netplay" +msgid "Netplay Discord Channel" +msgstr "" + +#: src/ui/gui/netplay_page.slint:71 +msgctxt "Netplay" +msgid "Provide Feedback" +msgstr "" + +#: src/ui/gui/netplay_page.slint:82 +msgctxt "CustomNetplayServer" +msgid "Custom Netplay Server" +msgstr "" + +#: src/ui/gui/settings_page.slint:22 +msgctxt "Settings" +msgid "Settings" +msgstr "" + +#: src/ui/gui/settings_page.slint:29 +msgctxt "Settings" +msgid "Resolution:" +msgstr "" + +#: src/ui/gui/settings_page.slint:45 +msgctxt "Settings" +msgid "SSAA downscaling" +msgstr "" + +#: src/ui/gui/settings_page.slint:56 +msgctxt "Settings" +msgid "Integer Scaling" +msgstr "" + +#: src/ui/gui/settings_page.slint:67 +msgctxt "Settings" +msgid "Fullscreen" +msgstr "" + +#: src/ui/gui/settings_page.slint:78 +msgctxt "Settings" +msgid "Widescreen (stretch)" +msgstr "" + +#: src/ui/gui/settings_page.slint:89 +msgctxt "Settings" +msgid "VSync" +msgstr "" + +#: src/ui/gui/settings_page.slint:100 +msgctxt "Settings" +msgid "Apply CRT shader" +msgstr "" + +#: src/ui/gui/settings_page.slint:115 +msgctxt "Settings" +msgid "Overclock N64 CPU (may cause bugs)" +msgstr "" + +#: src/ui/gui/settings_page.slint:126 +msgctxt "Settings" +msgid "Disable Expansion Pak" +msgstr "" + +#: src/ui/gui/settings_page.slint:137 +msgctxt "Settings" +msgid "Emulate UNFLoader" +msgstr "" + +#: src/ui/gui/vru_dialog.slint:7 +msgctxt "VruDialog" +msgid "What Would You Like To Say?" +msgstr "" + +#: src/ui/gui/appwindow.slint:94 +msgctxt "Menu" +msgid "Local Game" +msgstr "" + +#: src/ui/gui/appwindow.slint:95 +msgctxt "Menu" +msgid "Controller Config" +msgstr "" + +#: src/ui/gui/appwindow.slint:96 +msgctxt "Menu" +msgid "Netplay" +msgstr "" + +#: src/ui/gui/appwindow.slint:97 +msgctxt "Menu" +msgid "Cheats" +msgstr "" + +#: src/ui/gui/appwindow.slint:98 +msgctxt "Menu" +msgid "RetroAchievements" +msgstr "" + +#: src/ui/gui/appwindow.slint:99 +msgctxt "Menu" +msgid "Settings" +msgstr "" + +#: src/ui/gui/appwindow.slint:100 +msgctxt "Menu" +msgid "About" +msgstr "" + +#: src/ui/gui/appwindow.slint:194 +msgctxt "ErrorDialog" +msgid "Error" +msgstr "" + +#: src/ui/gui/netplay_create.slint:5 +msgctxt "NetplayCreate" +msgid "Netplay: Create Session" +msgstr "" + +#: src/ui/gui/netplay_create.slint:24 +msgctxt "NetplayCreate" +msgid "Session Name:" +msgstr "" + +#: src/ui/gui/netplay_create.slint:28 +msgctxt "NetplayCreate" +msgid "Enter session name" +msgstr "" + +#: src/ui/gui/netplay_create.slint:37 +msgctxt "NetplayCreate" +msgid "Password (Optional):" +msgstr "" + +#: src/ui/gui/netplay_create.slint:41 +msgctxt "NetplayCreate" +msgid "Enter session password" +msgstr "" + +#: src/ui/gui/netplay_create.slint:51 +msgctxt "NetplayCreate" +msgid "Player Name:" +msgstr "" + +#: src/ui/gui/netplay_create.slint:55 +msgctxt "NetplayCreate" +msgid "Enter player name" +msgstr "" + +#: src/ui/gui/netplay_create.slint:64 +msgctxt "NetplayCreate" +msgid "Server:" +msgstr "" + +#: src/ui/gui/netplay_create.slint:82 +msgctxt "NetplayCreate" +msgid "Select ROM" +msgstr "" + +#: src/ui/gui/netplay_create.slint:97 +msgctxt "NetplayCreate" +msgid "" +"This game has cheats enabled. Cheats will be synchronized with other players." +msgstr "" + +#: src/ui/gui/netplay_create.slint:103 +msgctxt "NetplayCreate" +msgid "Create Session" +msgstr "" + +#: src/ui/gui/netplay_create.slint:126 +msgctxt "DispatcherDialog" +msgid "Creating Server" +msgstr "" + +#: src/ui/gui/netplay_create.slint:128 +msgctxt "DispatcherDialog" +msgid "Creating server, please wait...This may take about 30 seconds." +msgstr "" + +#: src/ui/gui/netplay_join.slint:5 +msgctxt "NetplayJoin" +msgid "Netplay: Join Session" +msgstr "" + +#: src/ui/gui/netplay_join.slint:30 +msgctxt "NetplayJoin" +msgid "Player Name (required):" +msgstr "" + +#: src/ui/gui/netplay_join.slint:34 +msgctxt "NetplayJoin" +msgid "Enter player name" +msgstr "" + +#: src/ui/gui/netplay_join.slint:43 +msgctxt "NetplayJoin" +msgid "Custom Server URL (optional):" +msgstr "" + +#: src/ui/gui/netplay_join.slint:57 +msgctxt "NetplayJoin" +msgid "Refreshing session list, please wait..." +msgstr "" + +#: src/ui/gui/netplay_join.slint:62 +msgctxt "NetplayJoin" +msgid "Click on a session below to select it" +msgstr "" + +#: src/ui/gui/netplay_join.slint:67 +msgctxt "NetplayJoin" +msgid "No sessions available. Please refresh to check again." +msgstr "" + +#: src/ui/gui/netplay_join.slint:73 +msgctxt "NetplayJoin" +msgid "Server" +msgstr "" + +#: src/ui/gui/netplay_join.slint:74 +msgctxt "NetplayJoin" +msgid "Session Name" +msgstr "" + +#: src/ui/gui/netplay_join.slint:75 +msgctxt "NetplayJoin" +msgid "Game Name" +msgstr "" + +#: src/ui/gui/netplay_join.slint:76 +msgctxt "NetplayJoin" +msgid "Password" +msgstr "" + +#: src/ui/gui/netplay_join.slint:77 +msgctxt "NetplayJoin" +msgid "Cheats" +msgstr "" + +#: src/ui/gui/netplay_join.slint:91 +msgctxt "NetplayJoin" +msgid "Refresh Session List" +msgstr "" + +#: src/ui/gui/netplay_join.slint:105 +msgctxt "NetplayJoin" +msgid "Password (if required)" +msgstr "" + +#: src/ui/gui/netplay_join.slint:112 +msgctxt "NetplayJoin" +msgid "Select ROM" +msgstr "" + +#: src/ui/gui/netplay_join.slint:125 +msgctxt "NetplayJoin" +msgid "Join Session" +msgstr "" + +#: src/ui/gui/netplay_wait.slint:14 +msgctxt "NetplayWait" +msgid "Netplay: Waiting Room" +msgstr "" + +#: src/ui/gui/netplay_wait.slint:31 +msgctxt "NetplayWait" +msgid "Session Name: " +msgstr "" + +#: src/ui/gui/netplay_wait.slint:37 +msgctxt "NetplayWait" +msgid "Game Name: " +msgstr "" + +#: src/ui/gui/netplay_wait.slint:43 +msgctxt "NetplayWait" +msgid "Ping: " +msgstr "" + +#: src/ui/gui/netplay_wait.slint:50 +msgctxt "NetplayWait" +msgid "Player 1: " +msgstr "" + +#: src/ui/gui/netplay_wait.slint:54 +msgctxt "NetplayWait" +msgid "Player 2: " +msgstr "" + +#: src/ui/gui/netplay_wait.slint:60 +msgctxt "NetplayWait" +msgid "Player 3: " +msgstr "" + +#: src/ui/gui/netplay_wait.slint:64 +msgctxt "NetplayWait" +msgid "Player 4: " +msgstr "" + +#: src/ui/gui/netplay_wait.slint:76 +msgctxt "NetplayWait" +msgid "Enter chat message" +msgstr "" + +#: src/ui/gui/netplay_wait.slint:87 +msgctxt "NetplayWait" +msgid "Send Message" +msgstr "" + +#: src/ui/gui/netplay_wait.slint:102 +msgctxt "NetplayWait" +msgid "Start Game" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:18 +msgctxt "RAData" +msgid "Not currently logged in" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:26 +msgctxt "RetroAchievements" +msgid "RetroAchievements" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:33 +msgctxt "RetroAchievements" +msgid "Enabled" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:51 +msgctxt "RetroAchievements" +msgid "Hardcore mode" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:63 +msgctxt "RetroAchievements" +msgid "Challenge Indicators" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:75 +msgctxt "RetroAchievements" +msgid "Leaderboard Trackers" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:92 +msgctxt "RetroAchievements" +msgid "View Profile" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:102 +msgctxt "RetroAchievements" +msgid "Username" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:112 +msgctxt "RetroAchievements" +msgid "Password" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:121 +msgctxt "RetroAchievements" +msgid "Login" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:137 +msgctxt "RetroAchievements" +msgid "View Supported Games" +msgstr "" From 493f08afaf98c5dd4d05bc611ffeda2119853119 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 10 May 2026 20:44:18 +0200 Subject: [PATCH 0863/1117] remove some spaces from translation strings (#868) --- .github/workflows/lint.yml | 1 + data/translations/es/LC_MESSAGES/gopher64.po | 28 ++++++++++---------- data/translations/gopher64.pot | 16 +++++------ src/ui/gui/netplay_wait.slint | 14 +++++----- 4 files changed, 30 insertions(+), 29 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index b6829f7..da38b9f 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -56,3 +56,4 @@ jobs: cargo clippy --no-default-features -- -Dwarnings find -name \*.slint | xargs slint-tr-extractor -o /tmp/translations.pot msgcmp --use-untranslated /tmp/translations.pot data/translations/gopher64.pot + find data/translations -name "*.po" | xargs -I {} msgcmp {} data/translations/gopher64.pot diff --git a/data/translations/es/LC_MESSAGES/gopher64.po b/data/translations/es/LC_MESSAGES/gopher64.po index e9761b9..dc79279 100644 --- a/data/translations/es/LC_MESSAGES/gopher64.po +++ b/data/translations/es/LC_MESSAGES/gopher64.po @@ -438,38 +438,38 @@ msgstr "Netplay: Sala de espera" #: src/ui/gui/netplay_wait.slint:31 msgctxt "NetplayWait" -msgid "Session Name: " -msgstr "Nombre de sesión: " +msgid "Session Name:" +msgstr "Nombre de sesión:" #: src/ui/gui/netplay_wait.slint:37 msgctxt "NetplayWait" -msgid "Game Name: " -msgstr "Nombre del juego: " +msgid "Game Name:" +msgstr "Nombre del juego:" #: src/ui/gui/netplay_wait.slint:43 msgctxt "NetplayWait" -msgid "Ping: " -msgstr "Latencia (Ping): " +msgid "Ping:" +msgstr "Latencia (Ping):" #: src/ui/gui/netplay_wait.slint:50 msgctxt "NetplayWait" -msgid "Player 1: " -msgstr "Jugador 1: " +msgid "Player 1:" +msgstr "Jugador 1:" #: src/ui/gui/netplay_wait.slint:54 msgctxt "NetplayWait" -msgid "Player 2: " -msgstr "Jugador 2: " +msgid "Player 2:" +msgstr "Jugador 2:" #: src/ui/gui/netplay_wait.slint:60 msgctxt "NetplayWait" -msgid "Player 3: " -msgstr "Jugador 3: " +msgid "Player 3:" +msgstr "Jugador 3:" #: src/ui/gui/netplay_wait.slint:64 msgctxt "NetplayWait" -msgid "Player 4: " -msgstr "Jugador 4: " +msgid "Player 4:" +msgstr "Jugador 4:" #: src/ui/gui/netplay_wait.slint:76 msgctxt "NetplayWait" diff --git a/data/translations/gopher64.pot b/data/translations/gopher64.pot index 7ea07e3..fb72415 100644 --- a/data/translations/gopher64.pot +++ b/data/translations/gopher64.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-05-10 13:23+0000\n" +"POT-Creation-Date: 2026-05-10 18:36+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -435,37 +435,37 @@ msgstr "" #: src/ui/gui/netplay_wait.slint:31 msgctxt "NetplayWait" -msgid "Session Name: " +msgid "Session Name:" msgstr "" #: src/ui/gui/netplay_wait.slint:37 msgctxt "NetplayWait" -msgid "Game Name: " +msgid "Game Name:" msgstr "" #: src/ui/gui/netplay_wait.slint:43 msgctxt "NetplayWait" -msgid "Ping: " +msgid "Ping:" msgstr "" #: src/ui/gui/netplay_wait.slint:50 msgctxt "NetplayWait" -msgid "Player 1: " +msgid "Player 1:" msgstr "" #: src/ui/gui/netplay_wait.slint:54 msgctxt "NetplayWait" -msgid "Player 2: " +msgid "Player 2:" msgstr "" #: src/ui/gui/netplay_wait.slint:60 msgctxt "NetplayWait" -msgid "Player 3: " +msgid "Player 3:" msgstr "" #: src/ui/gui/netplay_wait.slint:64 msgctxt "NetplayWait" -msgid "Player 4: " +msgid "Player 4:" msgstr "" #: src/ui/gui/netplay_wait.slint:76 diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint index 2d70058..946fea2 100644 --- a/src/ui/gui/netplay_wait.slint +++ b/src/ui/gui/netplay_wait.slint @@ -28,40 +28,40 @@ export component NetplayWait inherits Window { VerticalBox { Text { - text: @tr("Session Name: ") + NetplayData.session_name; + text: @tr("Session Name:") + " " + NetplayData.session_name; font-size: 15px; horizontal-alignment: center; } Text { - text: @tr("Game Name: ") + NetplayData.game_name; + text: @tr("Game Name:") + " " + NetplayData.game_name; font-size: 15px; horizontal-alignment: center; } Text { - text: @tr("Ping: ") + NetplayWaitData.ping; + text: @tr("Ping:") + " " + NetplayWaitData.ping; horizontal-alignment: center; } GridBox { Row { Text { - text: @tr("Player 1: ") + players[0]; + text: @tr("Player 1:") + " " + players[0]; } Text { - text: @tr("Player 2: ") + players[1]; + text: @tr("Player 2:") + " " + players[1]; } } Row { Text { - text: @tr("Player 3: ") + players[2]; + text: @tr("Player 3:") + " " + players[2]; } Text { - text: @tr("Player 4: ") + players[3]; + text: @tr("Player 4:") + " " + players[3]; } } } From 27ffedbdee9bc56e4af003a6156007c218319798 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 11 May 2026 07:35:22 +0200 Subject: [PATCH 0864/1117] es changes (#870) --- data/translations/es/LC_MESSAGES/gopher64.po | 32 ++++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/data/translations/es/LC_MESSAGES/gopher64.po b/data/translations/es/LC_MESSAGES/gopher64.po index dc79279..f8bb63f 100644 --- a/data/translations/es/LC_MESSAGES/gopher64.po +++ b/data/translations/es/LC_MESSAGES/gopher64.po @@ -3,10 +3,10 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" "POT-Creation-Date: 2026-05-10 13:12+0000\n" -"PO-Revision-Date: 2026-05-10 15:15+0000\n" +"PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: Gemini\n" -"Language-Team: Spanish\n" -"Language: es\n" +"Language-Team: Spanish (Spain)\n" +"Language: es_ES\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -15,7 +15,7 @@ msgstr "" #: src/ui/gui/about_page.slint:17 msgctxt "NewVersionButton" msgid "New version available! Click here to download" -msgstr "¡Nueva versión disponible! Haz clic aquí para descargar" +msgstr "¡Nueva versión disponible! Pulsa aquí para descargar" #: src/ui/gui/about_page.slint:33 msgctxt "About" @@ -40,12 +40,12 @@ msgstr "Código fuente" #: src/ui/gui/about_page.slint:70 msgctxt "About" msgid "Donate (via Patreon)" -msgstr "Donar (vía Patreon)" +msgstr "Donar (a través de Patreon)" #: src/ui/gui/about_page.slint:77 msgctxt "About" msgid "Donate (via GitHub)" -msgstr "Donar (vía GitHub)" +msgstr "Donar (a través de GitHub)" #: src/ui/gui/cheat_page.slint:15 msgctxt "Cheats" @@ -60,7 +60,7 @@ msgstr "Seleccionar ROM" #: src/ui/gui/cheat_page.slint:41 msgctxt "Cheats" msgid "Clear Cheats For All ROMs" -msgstr "Borrar trucos de todas las ROM" +msgstr "Borrar trucos de todas las ROMs" #: src/ui/gui/cheat_page.slint:86 msgctxt "Cheats" @@ -150,7 +150,7 @@ msgstr "Abrir carpeta de guardados" #: src/ui/gui/localgame_page.slint:53 msgctxt "LocalGame" msgid "Recent ROMs" -msgstr "ROM recientes" +msgstr "ROMs recientes" #: src/ui/gui/netplay_page.slint:33 msgctxt "Netplay" @@ -165,7 +165,7 @@ msgstr "Crear sesión" #: src/ui/gui/netplay_page.slint:50 msgctxt "Netplay" msgid "Join Session" -msgstr "Unirse a sesión" +msgstr "Unirse a la sesión" #: src/ui/gui/netplay_page.slint:64 msgctxt "Netplay" @@ -180,7 +180,7 @@ msgstr "Enviar comentarios" #: src/ui/gui/netplay_page.slint:82 msgctxt "CustomNetplayServer" msgid "Custom Netplay Server" -msgstr "Servidor Netplay personalizado" +msgstr "Servidor de Netplay personalizado" #: src/ui/gui/settings_page.slint:22 msgctxt "Settings" @@ -200,7 +200,7 @@ msgstr "Reducción de escala SSAA" #: src/ui/gui/settings_page.slint:56 msgctxt "Settings" msgid "Integer Scaling" -msgstr "Escalado de enteros" +msgstr "Escalado por enteros" #: src/ui/gui/settings_page.slint:67 msgctxt "Settings" @@ -377,14 +377,14 @@ msgstr "Actualizando lista de sesiones, espera..." #: src/ui/gui/netplay_join.slint:62 msgctxt "NetplayJoin" msgid "Click on a session below to select it" -msgstr "Haz clic en una sesión para seleccionarla" +msgstr "Pulsa una sesión para seleccionarla" #: src/ui/gui/netplay_join.slint:67 msgctxt "NetplayJoin" msgid "" "No sessions available. Please refresh to check again." msgstr "" -"No hay sesiones disponibles. Refresca para comprobar de nuevo." +"No hay sesiones disponibles. Actualiza para comprobar de nuevo." #: src/ui/gui/netplay_join.slint:73 msgctxt "NetplayJoin" @@ -439,7 +439,7 @@ msgstr "Netplay: Sala de espera" #: src/ui/gui/netplay_wait.slint:31 msgctxt "NetplayWait" msgid "Session Name:" -msgstr "Nombre de sesión:" +msgstr "Nombre de la sesión:" #: src/ui/gui/netplay_wait.slint:37 msgctxt "NetplayWait" @@ -474,7 +474,7 @@ msgstr "Jugador 4:" #: src/ui/gui/netplay_wait.slint:76 msgctxt "NetplayWait" msgid "Enter chat message" -msgstr "Escribe un mensaje" +msgstr "Escribe un mensaje en el chat" #: src/ui/gui/netplay_wait.slint:87 msgctxt "NetplayWait" @@ -514,7 +514,7 @@ msgstr "Indicadores de desafío" #: src/ui/gui/retroachievements_page.slint:75 msgctxt "RetroAchievements" msgid "Leaderboard Trackers" -msgstr "Seguimiento de clasificación" +msgstr "Indicadores de tabla de clasificación" #: src/ui/gui/retroachievements_page.slint:92 msgctxt "RetroAchievements" From b55a0319711b42182f0b6032329a7d91e49bdd66 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 11 May 2026 12:26:40 +0200 Subject: [PATCH 0865/1117] Update translation readme (#871) --- data/translations/README.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/data/translations/README.md b/data/translations/README.md index b262a51..43f8c22 100644 --- a/data/translations/README.md +++ b/data/translations/README.md @@ -3,4 +3,24 @@ 2. Rename it to `gopher64.po` and put it here: `data/translations//LC_MESSAGES/gopher64.po` -See [here](https://docs.slint.dev/latest/docs/slint/guide/development/translations/#translating-strings) for more details on creating a .po file. +See [here](https://docs.slint.dev/latest/docs/slint/guide/development/translations/#translating-strings) for more details on creating a .po file. I recommend using a program like [poedit](https://poedit.com) to create the .po file from the template. + +--- + +For example, in the .pot file you will see: +``` +#: src/ui/gui/about_page.slint:17 +msgctxt "NewVersionButton" +msgid "New version available! Click here to download" +msgstr "" +``` + +A translation will look something like this: +``` +#: src/ui/gui/about_page.slint:17 +msgctxt "NewVersionButton" +msgid "New version available! Click here to download" +msgstr "Nova versão disponível! Clique aqui para baixar" +``` + +The only line you modify is the `msgstr`. The `msgctxt` and `msgid` need to remain unchanged. From a8ae9dbc6a79e47f2cdcee2697cd3fbc76212f82 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 11 May 2026 13:41:45 +0200 Subject: [PATCH 0866/1117] Add more starter translations (#872) * Add more starter translations * more --- build.rs | 1 + data/translations/de/LC_MESSAGES/gopher64.po | 543 ++++++++++++++++++ data/translations/fr/LC_MESSAGES/gopher64.po | 544 +++++++++++++++++++ data/translations/ja/LC_MESSAGES/gopher64.po | 542 ++++++++++++++++++ data/translations/nl/LC_MESSAGES/gopher64.po | 543 ++++++++++++++++++ src/ui/gui/input_profile.slint | 2 +- 6 files changed, 2174 insertions(+), 1 deletion(-) create mode 100644 data/translations/de/LC_MESSAGES/gopher64.po create mode 100644 data/translations/fr/LC_MESSAGES/gopher64.po create mode 100644 data/translations/ja/LC_MESSAGES/gopher64.po create mode 100644 data/translations/nl/LC_MESSAGES/gopher64.po diff --git a/build.rs b/build.rs index c7040bb..b7e7d1a 100644 --- a/build.rs +++ b/build.rs @@ -2,6 +2,7 @@ fn main() { println!("cargo::rerun-if-changed=parallel-rdp"); println!("cargo::rerun-if-changed=retroachievements"); println!("cargo::rerun-if-changed=src/compat"); + println!("cargo::rerun-if-changed=data/translations"); #[cfg(feature = "gui")] { diff --git a/data/translations/de/LC_MESSAGES/gopher64.po b/data/translations/de/LC_MESSAGES/gopher64.po new file mode 100644 index 0000000..5ff6403 --- /dev/null +++ b/data/translations/de/LC_MESSAGES/gopher64.po @@ -0,0 +1,543 @@ +# gopher64 - German Translation +msgid "" +msgstr "" +"Project-Id-Version: gopher64\n" +"POT-Creation-Date: 2026-05-10 18:36+0000\n" +"PO-Revision-Date: 2026-05-11 12:00+0000\n" +"Last-Translator: \n" +"Language-Team: German\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/ui/gui/about_page.slint:17 +msgctxt "NewVersionButton" +msgid "New version available! Click here to download" +msgstr "Neue Version verfügbar! Zum Herunterladen hier klicken" + +#: src/ui/gui/about_page.slint:33 +msgctxt "About" +msgid "About" +msgstr "Über" + +#: src/ui/gui/about_page.slint:40 +msgctxt "About" +msgid "Wiki" +msgstr "Wiki" + +#: src/ui/gui/about_page.slint:50 +msgctxt "About" +msgid "Discord Server" +msgstr "Discord-Server" + +#: src/ui/gui/about_page.slint:60 +msgctxt "About" +msgid "Source Code" +msgstr "Quellcode" + +#: src/ui/gui/about_page.slint:70 +msgctxt "About" +msgid "Donate (via Patreon)" +msgstr "Spenden (über Patreon)" + +#: src/ui/gui/about_page.slint:77 +msgctxt "About" +msgid "Donate (via GitHub)" +msgstr "Spenden (über GitHub)" + +#: src/ui/gui/cheat_page.slint:15 +msgctxt "Cheats" +msgid "Cheats" +msgstr "Cheats" + +#: src/ui/gui/cheat_page.slint:25 +msgctxt "Cheats" +msgid "Select ROM" +msgstr "ROM auswählen" + +#: src/ui/gui/cheat_page.slint:41 +msgctxt "Cheats" +msgid "Clear Cheats For All ROMs" +msgstr "Cheats für alle ROMs löschen" + +#: src/ui/gui/cheat_page.slint:86 +msgctxt "Cheats" +msgid "No Cheats Available" +msgstr "Keine Cheats verfügbar" + +#: src/ui/gui/controller_page.slint:26 +msgctxt "ControllerConfig" +msgid "Controller Configuration" +msgstr "Controller-Konfiguration" + +#: src/ui/gui/controller_page.slint:37 +msgctxt "ControllerConfig" +msgid "Configure Input Profile" +msgstr "Eingabeprofil konfigurieren" + +#: src/ui/gui/controller_page.slint:49 +msgctxt "ControllerConfig" +msgid "Port" +msgstr "Port" + +#: src/ui/gui/controller_page.slint:60 +msgctxt "ControllerConfig" +msgid "Enabled" +msgstr "Aktiviert" + +#: src/ui/gui/controller_page.slint:73 +msgctxt "ControllerConfig" +msgid "Emulate VRU" +msgstr "VRU emulieren" + +#: src/ui/gui/controller_page.slint:87 +msgctxt "ControllerConfig" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:101 +msgctxt "ControllerConfig" +msgid "Profile" +msgstr "Profil" + +#: src/ui/gui/controller_page.slint:117 +msgctxt "ControllerConfig" +msgid "Controller" +msgstr "Controller" + +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "Eingabeprofil erstellen/bearbeiten" + +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "Profilname zum Erstellen oder Bearbeiten eingeben" + +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "Totzonen-Prozentsatz" + +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "DirectInput verwenden" + +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "Assistent zur Profilerstellung starten" + +#: src/ui/gui/localgame_page.slint:18 +msgctxt "LocalGame" +msgid "Local Game" +msgstr "Lokales Spiel" + +#: src/ui/gui/localgame_page.slint:25 +msgctxt "LocalGame" +msgid "Open ROM" +msgstr "ROM öffnen" + +#: src/ui/gui/localgame_page.slint:36 +msgctxt "LocalGame" +msgid "Open Saves Folder" +msgstr "Speicherordner öffnen" + +#: src/ui/gui/localgame_page.slint:53 +msgctxt "LocalGame" +msgid "Recent ROMs" +msgstr "Zuletzt verwendete ROMs" + +#: src/ui/gui/netplay_page.slint:33 +msgctxt "Netplay" +msgid "Netplay" +msgstr "Netplay" + +#: src/ui/gui/netplay_page.slint:40 +msgctxt "Netplay" +msgid "Create Session" +msgstr "Sitzung erstellen" + +#: src/ui/gui/netplay_page.slint:50 +msgctxt "Netplay" +msgid "Join Session" +msgstr "Sitzung beitreten" + +#: src/ui/gui/netplay_page.slint:64 +msgctxt "Netplay" +msgid "Netplay Discord Channel" +msgstr "Netplay-Discord-Kanal" + +#: src/ui/gui/netplay_page.slint:71 +msgctxt "Netplay" +msgid "Provide Feedback" +msgstr "Feedback geben" + +#: src/ui/gui/netplay_page.slint:82 +msgctxt "CustomNetplayServer" +msgid "Custom Netplay Server" +msgstr "Benutzerdefinierter Netplay-Server" + +#: src/ui/gui/settings_page.slint:22 +msgctxt "Settings" +msgid "Settings" +msgstr "Einstellungen" + +#: src/ui/gui/settings_page.slint:29 +msgctxt "Settings" +msgid "Resolution:" +msgstr "Auflösung:" + +#: src/ui/gui/settings_page.slint:45 +msgctxt "Settings" +msgid "SSAA downscaling" +msgstr "SSAA-Herunterskalierung" + +#: src/ui/gui/settings_page.slint:56 +msgctxt "Settings" +msgid "Integer Scaling" +msgstr "Pixelgenaue Skalierung" + +#: src/ui/gui/settings_page.slint:67 +msgctxt "Settings" +msgid "Fullscreen" +msgstr "Vollbild" + +#: src/ui/gui/settings_page.slint:78 +msgctxt "Settings" +msgid "Widescreen (stretch)" +msgstr "Breitbild (gestreckt)" + +#: src/ui/gui/settings_page.slint:89 +msgctxt "Settings" +msgid "VSync" +msgstr "VSync" + +#: src/ui/gui/settings_page.slint:100 +msgctxt "Settings" +msgid "Apply CRT shader" +msgstr "CRT-Shader anwenden" + +#: src/ui/gui/settings_page.slint:115 +msgctxt "Settings" +msgid "Overclock N64 CPU (may cause bugs)" +msgstr "N64-CPU übertakten (kann Fehler verursachen)" + +#: src/ui/gui/settings_page.slint:126 +msgctxt "Settings" +msgid "Disable Expansion Pak" +msgstr "Erweiterungspaket deaktivieren" + +#: src/ui/gui/settings_page.slint:137 +msgctxt "Settings" +msgid "Emulate UNFLoader" +msgstr "UNFLoader emulieren" + +#: src/ui/gui/vru_dialog.slint:7 +msgctxt "VruDialog" +msgid "What Would You Like To Say?" +msgstr "Was möchten Sie sagen?" + +#: src/ui/gui/appwindow.slint:94 +msgctxt "Menu" +msgid "Local Game" +msgstr "Lokales Spiel" + +#: src/ui/gui/appwindow.slint:95 +msgctxt "Menu" +msgid "Controller Config" +msgstr "Controller-Konfiguration" + +#: src/ui/gui/appwindow.slint:96 +msgctxt "Menu" +msgid "Netplay" +msgstr "Netplay" + +#: src/ui/gui/appwindow.slint:97 +msgctxt "Menu" +msgid "Cheats" +msgstr "Cheats" + +#: src/ui/gui/appwindow.slint:98 +msgctxt "Menu" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/appwindow.slint:99 +msgctxt "Menu" +msgid "Settings" +msgstr "Einstellungen" + +#: src/ui/gui/appwindow.slint:100 +msgctxt "Menu" +msgid "About" +msgstr "Über" + +#: src/ui/gui/appwindow.slint:194 +msgctxt "ErrorDialog" +msgid "Error" +msgstr "Fehler" + +#: src/ui/gui/netplay_create.slint:5 +msgctxt "NetplayCreate" +msgid "Netplay: Create Session" +msgstr "Netplay: Sitzung erstellen" + +#: src/ui/gui/netplay_create.slint:24 +msgctxt "NetplayCreate" +msgid "Session Name:" +msgstr "Sitzungsname:" + +#: src/ui/gui/netplay_create.slint:28 +msgctxt "NetplayCreate" +msgid "Enter session name" +msgstr "Sitzungsname eingeben" + +#: src/ui/gui/netplay_create.slint:37 +msgctxt "NetplayCreate" +msgid "Password (Optional):" +msgstr "Passwort (optional):" + +#: src/ui/gui/netplay_create.slint:41 +msgctxt "NetplayCreate" +msgid "Enter session password" +msgstr "Sitzungspasswort eingeben" + +#: src/ui/gui/netplay_create.slint:51 +msgctxt "NetplayCreate" +msgid "Player Name:" +msgstr "Spielername:" + +#: src/ui/gui/netplay_create.slint:55 +msgctxt "NetplayCreate" +msgid "Enter player name" +msgstr "Spielername eingeben" + +#: src/ui/gui/netplay_create.slint:64 +msgctxt "NetplayCreate" +msgid "Server:" +msgstr "Server:" + +#: src/ui/gui/netplay_create.slint:82 +msgctxt "NetplayCreate" +msgid "Select ROM" +msgstr "ROM auswählen" + +#: src/ui/gui/netplay_create.slint:97 +msgctxt "NetplayCreate" +msgid "" +"This game has cheats enabled. Cheats will be synchronized with other players." +msgstr "" +"Für dieses Spiel sind Cheats aktiviert. Cheats werden mit anderen Spielern " +"synchronisiert." + +#: src/ui/gui/netplay_create.slint:103 +msgctxt "NetplayCreate" +msgid "Create Session" +msgstr "Sitzung erstellen" + +#: src/ui/gui/netplay_create.slint:126 +msgctxt "DispatcherDialog" +msgid "Creating Server" +msgstr "Server wird erstellt" + +#: src/ui/gui/netplay_create.slint:128 +msgctxt "DispatcherDialog" +msgid "Creating server, please wait...This may take about 30 seconds." +msgstr "" +"Server wird erstellt, bitte warten … Dies kann etwa 30 Sekunden dauern." + +#: src/ui/gui/netplay_join.slint:5 +msgctxt "NetplayJoin" +msgid "Netplay: Join Session" +msgstr "Netplay: Sitzung beitreten" + +#: src/ui/gui/netplay_join.slint:30 +msgctxt "NetplayJoin" +msgid "Player Name (required):" +msgstr "Spielername (erforderlich):" + +#: src/ui/gui/netplay_join.slint:34 +msgctxt "NetplayJoin" +msgid "Enter player name" +msgstr "Spielername eingeben" + +#: src/ui/gui/netplay_join.slint:43 +msgctxt "NetplayJoin" +msgid "Custom Server URL (optional):" +msgstr "Eigene Server-URL (optional):" + +#: src/ui/gui/netplay_join.slint:57 +msgctxt "NetplayJoin" +msgid "Refreshing session list, please wait..." +msgstr "Sitzungsliste wird aktualisiert, bitte warten …" + +#: src/ui/gui/netplay_join.slint:62 +msgctxt "NetplayJoin" +msgid "Click on a session below to select it" +msgstr "Zum Auswählen unten auf eine Sitzung klicken" + +#: src/ui/gui/netplay_join.slint:67 +msgctxt "NetplayJoin" +msgid "No sessions available. Please refresh to check again." +msgstr "" +"Keine Sitzungen verfügbar. Bitte aktualisieren, um erneut zu prüfen." + +#: src/ui/gui/netplay_join.slint:73 +msgctxt "NetplayJoin" +msgid "Server" +msgstr "Server" + +#: src/ui/gui/netplay_join.slint:74 +msgctxt "NetplayJoin" +msgid "Session Name" +msgstr "Sitzungsname" + +#: src/ui/gui/netplay_join.slint:75 +msgctxt "NetplayJoin" +msgid "Game Name" +msgstr "Spielname" + +#: src/ui/gui/netplay_join.slint:76 +msgctxt "NetplayJoin" +msgid "Password" +msgstr "Passwort" + +#: src/ui/gui/netplay_join.slint:77 +msgctxt "NetplayJoin" +msgid "Cheats" +msgstr "Cheats" + +#: src/ui/gui/netplay_join.slint:91 +msgctxt "NetplayJoin" +msgid "Refresh Session List" +msgstr "Sitzungsliste aktualisieren" + +#: src/ui/gui/netplay_join.slint:105 +msgctxt "NetplayJoin" +msgid "Password (if required)" +msgstr "Passwort (falls erforderlich)" + +#: src/ui/gui/netplay_join.slint:112 +msgctxt "NetplayJoin" +msgid "Select ROM" +msgstr "ROM auswählen" + +#: src/ui/gui/netplay_join.slint:125 +msgctxt "NetplayJoin" +msgid "Join Session" +msgstr "Sitzung beitreten" + +#: src/ui/gui/netplay_wait.slint:14 +msgctxt "NetplayWait" +msgid "Netplay: Waiting Room" +msgstr "Netplay: Warteraum" + +#: src/ui/gui/netplay_wait.slint:31 +msgctxt "NetplayWait" +msgid "Session Name:" +msgstr "Sitzungsname:" + +#: src/ui/gui/netplay_wait.slint:37 +msgctxt "NetplayWait" +msgid "Game Name:" +msgstr "Spielname:" + +#: src/ui/gui/netplay_wait.slint:43 +msgctxt "NetplayWait" +msgid "Ping:" +msgstr "Ping:" + +#: src/ui/gui/netplay_wait.slint:50 +msgctxt "NetplayWait" +msgid "Player 1:" +msgstr "Spieler 1:" + +#: src/ui/gui/netplay_wait.slint:54 +msgctxt "NetplayWait" +msgid "Player 2:" +msgstr "Spieler 2:" + +#: src/ui/gui/netplay_wait.slint:60 +msgctxt "NetplayWait" +msgid "Player 3:" +msgstr "Spieler 3:" + +#: src/ui/gui/netplay_wait.slint:64 +msgctxt "NetplayWait" +msgid "Player 4:" +msgstr "Spieler 4:" + +#: src/ui/gui/netplay_wait.slint:76 +msgctxt "NetplayWait" +msgid "Enter chat message" +msgstr "Chatnachricht eingeben" + +#: src/ui/gui/netplay_wait.slint:87 +msgctxt "NetplayWait" +msgid "Send Message" +msgstr "Nachricht senden" + +#: src/ui/gui/netplay_wait.slint:102 +msgctxt "NetplayWait" +msgid "Start Game" +msgstr "Spiel starten" + +#: src/ui/gui/retroachievements_page.slint:18 +msgctxt "RAData" +msgid "Not currently logged in" +msgstr "Derzeit nicht angemeldet" + +#: src/ui/gui/retroachievements_page.slint:26 +msgctxt "RetroAchievements" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/retroachievements_page.slint:33 +msgctxt "RetroAchievements" +msgid "Enabled" +msgstr "Aktiviert" + +#: src/ui/gui/retroachievements_page.slint:51 +msgctxt "RetroAchievements" +msgid "Hardcore mode" +msgstr "Hardcore-Modus" + +#: src/ui/gui/retroachievements_page.slint:63 +msgctxt "RetroAchievements" +msgid "Challenge Indicators" +msgstr "Challenge-Anzeigen" + +#: src/ui/gui/retroachievements_page.slint:75 +msgctxt "RetroAchievements" +msgid "Leaderboard Trackers" +msgstr "Bestenlisten-Tracker" + +#: src/ui/gui/retroachievements_page.slint:92 +msgctxt "RetroAchievements" +msgid "View Profile" +msgstr "Profil anzeigen" + +#: src/ui/gui/retroachievements_page.slint:102 +msgctxt "RetroAchievements" +msgid "Username" +msgstr "Benutzername" + +#: src/ui/gui/retroachievements_page.slint:112 +msgctxt "RetroAchievements" +msgid "Password" +msgstr "Passwort" + +#: src/ui/gui/retroachievements_page.slint:121 +msgctxt "RetroAchievements" +msgid "Login" +msgstr "Anmelden" + +#: src/ui/gui/retroachievements_page.slint:137 +msgctxt "RetroAchievements" +msgid "View Supported Games" +msgstr "Unterstützte Spiele anzeigen" diff --git a/data/translations/fr/LC_MESSAGES/gopher64.po b/data/translations/fr/LC_MESSAGES/gopher64.po new file mode 100644 index 0000000..fd9f310 --- /dev/null +++ b/data/translations/fr/LC_MESSAGES/gopher64.po @@ -0,0 +1,544 @@ +# gopher64 - French (France) Translation +msgid "" +msgstr "" +"Project-Id-Version: gopher64\n" +"POT-Creation-Date: 2026-05-10 18:36+0000\n" +"PO-Revision-Date: 2026-05-11 12:00+0000\n" +"Last-Translator: \n" +"Language-Team: French (France)\n" +"Language: fr_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: src/ui/gui/about_page.slint:17 +msgctxt "NewVersionButton" +msgid "New version available! Click here to download" +msgstr "Nouvelle version disponible ! Cliquez ici pour télécharger" + +#: src/ui/gui/about_page.slint:33 +msgctxt "About" +msgid "About" +msgstr "À propos" + +#: src/ui/gui/about_page.slint:40 +msgctxt "About" +msgid "Wiki" +msgstr "Wiki" + +#: src/ui/gui/about_page.slint:50 +msgctxt "About" +msgid "Discord Server" +msgstr "Serveur Discord" + +#: src/ui/gui/about_page.slint:60 +msgctxt "About" +msgid "Source Code" +msgstr "Code source" + +#: src/ui/gui/about_page.slint:70 +msgctxt "About" +msgid "Donate (via Patreon)" +msgstr "Faire un don (via Patreon)" + +#: src/ui/gui/about_page.slint:77 +msgctxt "About" +msgid "Donate (via GitHub)" +msgstr "Faire un don (via GitHub)" + +#: src/ui/gui/cheat_page.slint:15 +msgctxt "Cheats" +msgid "Cheats" +msgstr "Triche" + +#: src/ui/gui/cheat_page.slint:25 +msgctxt "Cheats" +msgid "Select ROM" +msgstr "Sélectionner une ROM" + +#: src/ui/gui/cheat_page.slint:41 +msgctxt "Cheats" +msgid "Clear Cheats For All ROMs" +msgstr "Effacer la triche pour toutes les ROMs" + +#: src/ui/gui/cheat_page.slint:86 +msgctxt "Cheats" +msgid "No Cheats Available" +msgstr "Aucune triche disponible" + +#: src/ui/gui/controller_page.slint:26 +msgctxt "ControllerConfig" +msgid "Controller Configuration" +msgstr "Configuration de la manette" + +#: src/ui/gui/controller_page.slint:37 +msgctxt "ControllerConfig" +msgid "Configure Input Profile" +msgstr "Configurer le profil d'entrée" + +#: src/ui/gui/controller_page.slint:49 +msgctxt "ControllerConfig" +msgid "Port" +msgstr "Port" + +#: src/ui/gui/controller_page.slint:60 +msgctxt "ControllerConfig" +msgid "Enabled" +msgstr "Activé" + +#: src/ui/gui/controller_page.slint:73 +msgctxt "ControllerConfig" +msgid "Emulate VRU" +msgstr "Émuler le VRU" + +#: src/ui/gui/controller_page.slint:87 +msgctxt "ControllerConfig" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:101 +msgctxt "ControllerConfig" +msgid "Profile" +msgstr "Profil" + +#: src/ui/gui/controller_page.slint:117 +msgctxt "ControllerConfig" +msgid "Controller" +msgstr "Manette" + +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "Créer / modifier le profil d'entrée" + +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "Saisir le nom du profil à créer ou à modifier" + +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "Pourcentage de zone morte" + +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "Utiliser DirectInput" + +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "Lancer l'assistant de création de profil" + +#: src/ui/gui/localgame_page.slint:18 +msgctxt "LocalGame" +msgid "Local Game" +msgstr "Jeu local" + +#: src/ui/gui/localgame_page.slint:25 +msgctxt "LocalGame" +msgid "Open ROM" +msgstr "Ouvrir une ROM" + +#: src/ui/gui/localgame_page.slint:36 +msgctxt "LocalGame" +msgid "Open Saves Folder" +msgstr "Ouvrir le dossier des sauvegardes" + +#: src/ui/gui/localgame_page.slint:53 +msgctxt "LocalGame" +msgid "Recent ROMs" +msgstr "ROMs récentes" + +#: src/ui/gui/netplay_page.slint:33 +msgctxt "Netplay" +msgid "Netplay" +msgstr "Netplay" + +#: src/ui/gui/netplay_page.slint:40 +msgctxt "Netplay" +msgid "Create Session" +msgstr "Créer une session" + +#: src/ui/gui/netplay_page.slint:50 +msgctxt "Netplay" +msgid "Join Session" +msgstr "Rejoindre une session" + +#: src/ui/gui/netplay_page.slint:64 +msgctxt "Netplay" +msgid "Netplay Discord Channel" +msgstr "Salon Discord Netplay" + +#: src/ui/gui/netplay_page.slint:71 +msgctxt "Netplay" +msgid "Provide Feedback" +msgstr "Donner votre avis" + +#: src/ui/gui/netplay_page.slint:82 +msgctxt "CustomNetplayServer" +msgid "Custom Netplay Server" +msgstr "Serveur Netplay personnalisé" + +#: src/ui/gui/settings_page.slint:22 +msgctxt "Settings" +msgid "Settings" +msgstr "Paramètres" + +#: src/ui/gui/settings_page.slint:29 +msgctxt "Settings" +msgid "Resolution:" +msgstr "Résolution :" + +#: src/ui/gui/settings_page.slint:45 +msgctxt "Settings" +msgid "SSAA downscaling" +msgstr "Réduction SSAA" + +#: src/ui/gui/settings_page.slint:56 +msgctxt "Settings" +msgid "Integer Scaling" +msgstr "Mise à l'échelle par entiers" + +#: src/ui/gui/settings_page.slint:67 +msgctxt "Settings" +msgid "Fullscreen" +msgstr "Plein écran" + +#: src/ui/gui/settings_page.slint:78 +msgctxt "Settings" +msgid "Widescreen (stretch)" +msgstr "Écran large (étiré)" + +#: src/ui/gui/settings_page.slint:89 +msgctxt "Settings" +msgid "VSync" +msgstr "Synchro verticale" + +#: src/ui/gui/settings_page.slint:100 +msgctxt "Settings" +msgid "Apply CRT shader" +msgstr "Appliquer le filtre CRT" + +#: src/ui/gui/settings_page.slint:115 +msgctxt "Settings" +msgid "Overclock N64 CPU (may cause bugs)" +msgstr "Surcharger le CPU N64 (risque de bugs)" + +#: src/ui/gui/settings_page.slint:126 +msgctxt "Settings" +msgid "Disable Expansion Pak" +msgstr "Désactiver l'Expansion Pak" + +#: src/ui/gui/settings_page.slint:137 +msgctxt "Settings" +msgid "Emulate UNFLoader" +msgstr "Émuler UNFLoader" + +#: src/ui/gui/vru_dialog.slint:7 +msgctxt "VruDialog" +msgid "What Would You Like To Say?" +msgstr "Que souhaitez-vous dire ?" + +#: src/ui/gui/appwindow.slint:94 +msgctxt "Menu" +msgid "Local Game" +msgstr "Jeu local" + +#: src/ui/gui/appwindow.slint:95 +msgctxt "Menu" +msgid "Controller Config" +msgstr "Configuration manette" + +#: src/ui/gui/appwindow.slint:96 +msgctxt "Menu" +msgid "Netplay" +msgstr "Netplay" + +#: src/ui/gui/appwindow.slint:97 +msgctxt "Menu" +msgid "Cheats" +msgstr "Triche" + +#: src/ui/gui/appwindow.slint:98 +msgctxt "Menu" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/appwindow.slint:99 +msgctxt "Menu" +msgid "Settings" +msgstr "Paramètres" + +#: src/ui/gui/appwindow.slint:100 +msgctxt "Menu" +msgid "About" +msgstr "À propos" + +#: src/ui/gui/appwindow.slint:194 +msgctxt "ErrorDialog" +msgid "Error" +msgstr "Erreur" + +#: src/ui/gui/netplay_create.slint:5 +msgctxt "NetplayCreate" +msgid "Netplay: Create Session" +msgstr "Netplay : créer une session" + +#: src/ui/gui/netplay_create.slint:24 +msgctxt "NetplayCreate" +msgid "Session Name:" +msgstr "Nom de la session :" + +#: src/ui/gui/netplay_create.slint:28 +msgctxt "NetplayCreate" +msgid "Enter session name" +msgstr "Saisir le nom de la session" + +#: src/ui/gui/netplay_create.slint:37 +msgctxt "NetplayCreate" +msgid "Password (Optional):" +msgstr "Mot de passe (facultatif) :" + +#: src/ui/gui/netplay_create.slint:41 +msgctxt "NetplayCreate" +msgid "Enter session password" +msgstr "Saisir le mot de passe de la session" + +#: src/ui/gui/netplay_create.slint:51 +msgctxt "NetplayCreate" +msgid "Player Name:" +msgstr "Nom du joueur :" + +#: src/ui/gui/netplay_create.slint:55 +msgctxt "NetplayCreate" +msgid "Enter player name" +msgstr "Saisir le nom du joueur" + +#: src/ui/gui/netplay_create.slint:64 +msgctxt "NetplayCreate" +msgid "Server:" +msgstr "Serveur :" + +#: src/ui/gui/netplay_create.slint:82 +msgctxt "NetplayCreate" +msgid "Select ROM" +msgstr "Sélectionner une ROM" + +#: src/ui/gui/netplay_create.slint:97 +msgctxt "NetplayCreate" +msgid "" +"This game has cheats enabled. Cheats will be synchronized with other players." +msgstr "" +"La triche est activée pour ce jeu. Elle sera synchronisée avec les autres " +"joueurs." + +#: src/ui/gui/netplay_create.slint:103 +msgctxt "NetplayCreate" +msgid "Create Session" +msgstr "Créer la session" + +#: src/ui/gui/netplay_create.slint:126 +msgctxt "DispatcherDialog" +msgid "Creating Server" +msgstr "Création du serveur" + +#: src/ui/gui/netplay_create.slint:128 +msgctxt "DispatcherDialog" +msgid "Creating server, please wait...This may take about 30 seconds." +msgstr "" +"Création du serveur, veuillez patienter… Cela peut prendre environ " +"30 secondes." + +#: src/ui/gui/netplay_join.slint:5 +msgctxt "NetplayJoin" +msgid "Netplay: Join Session" +msgstr "Netplay : rejoindre une session" + +#: src/ui/gui/netplay_join.slint:30 +msgctxt "NetplayJoin" +msgid "Player Name (required):" +msgstr "Nom du joueur (obligatoire) :" + +#: src/ui/gui/netplay_join.slint:34 +msgctxt "NetplayJoin" +msgid "Enter player name" +msgstr "Saisir le nom du joueur" + +#: src/ui/gui/netplay_join.slint:43 +msgctxt "NetplayJoin" +msgid "Custom Server URL (optional):" +msgstr "URL personnalisée du serveur (facultatif) :" + +#: src/ui/gui/netplay_join.slint:57 +msgctxt "NetplayJoin" +msgid "Refreshing session list, please wait..." +msgstr "Actualisation de la liste des sessions, veuillez patienter…" + +#: src/ui/gui/netplay_join.slint:62 +msgctxt "NetplayJoin" +msgid "Click on a session below to select it" +msgstr "Cliquez sur une session ci-dessous pour la sélectionner" + +#: src/ui/gui/netplay_join.slint:67 +msgctxt "NetplayJoin" +msgid "No sessions available. Please refresh to check again." +msgstr "" +"Aucune session disponible. Veuillez actualiser pour vérifier à nouveau." + +#: src/ui/gui/netplay_join.slint:73 +msgctxt "NetplayJoin" +msgid "Server" +msgstr "Serveur" + +#: src/ui/gui/netplay_join.slint:74 +msgctxt "NetplayJoin" +msgid "Session Name" +msgstr "Nom de la session" + +#: src/ui/gui/netplay_join.slint:75 +msgctxt "NetplayJoin" +msgid "Game Name" +msgstr "Nom du jeu" + +#: src/ui/gui/netplay_join.slint:76 +msgctxt "NetplayJoin" +msgid "Password" +msgstr "Mot de passe" + +#: src/ui/gui/netplay_join.slint:77 +msgctxt "NetplayJoin" +msgid "Cheats" +msgstr "Triche" + +#: src/ui/gui/netplay_join.slint:91 +msgctxt "NetplayJoin" +msgid "Refresh Session List" +msgstr "Actualiser la liste" + +#: src/ui/gui/netplay_join.slint:105 +msgctxt "NetplayJoin" +msgid "Password (if required)" +msgstr "Mot de passe (si requis)" + +#: src/ui/gui/netplay_join.slint:112 +msgctxt "NetplayJoin" +msgid "Select ROM" +msgstr "Sélectionner une ROM" + +#: src/ui/gui/netplay_join.slint:125 +msgctxt "NetplayJoin" +msgid "Join Session" +msgstr "Rejoindre la session" + +#: src/ui/gui/netplay_wait.slint:14 +msgctxt "NetplayWait" +msgid "Netplay: Waiting Room" +msgstr "Netplay : salle d'attente" + +#: src/ui/gui/netplay_wait.slint:31 +msgctxt "NetplayWait" +msgid "Session Name:" +msgstr "Nom de la session :" + +#: src/ui/gui/netplay_wait.slint:37 +msgctxt "NetplayWait" +msgid "Game Name:" +msgstr "Nom du jeu :" + +#: src/ui/gui/netplay_wait.slint:43 +msgctxt "NetplayWait" +msgid "Ping:" +msgstr "Ping :" + +#: src/ui/gui/netplay_wait.slint:50 +msgctxt "NetplayWait" +msgid "Player 1:" +msgstr "Joueur 1 :" + +#: src/ui/gui/netplay_wait.slint:54 +msgctxt "NetplayWait" +msgid "Player 2:" +msgstr "Joueur 2 :" + +#: src/ui/gui/netplay_wait.slint:60 +msgctxt "NetplayWait" +msgid "Player 3:" +msgstr "Joueur 3 :" + +#: src/ui/gui/netplay_wait.slint:64 +msgctxt "NetplayWait" +msgid "Player 4:" +msgstr "Joueur 4 :" + +#: src/ui/gui/netplay_wait.slint:76 +msgctxt "NetplayWait" +msgid "Enter chat message" +msgstr "Saisir un message" + +#: src/ui/gui/netplay_wait.slint:87 +msgctxt "NetplayWait" +msgid "Send Message" +msgstr "Envoyer" + +#: src/ui/gui/netplay_wait.slint:102 +msgctxt "NetplayWait" +msgid "Start Game" +msgstr "Lancer la partie" + +#: src/ui/gui/retroachievements_page.slint:18 +msgctxt "RAData" +msgid "Not currently logged in" +msgstr "Non connecté" + +#: src/ui/gui/retroachievements_page.slint:26 +msgctxt "RetroAchievements" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/retroachievements_page.slint:33 +msgctxt "RetroAchievements" +msgid "Enabled" +msgstr "Activé" + +#: src/ui/gui/retroachievements_page.slint:51 +msgctxt "RetroAchievements" +msgid "Hardcore mode" +msgstr "Mode hardcore" + +#: src/ui/gui/retroachievements_page.slint:63 +msgctxt "RetroAchievements" +msgid "Challenge Indicators" +msgstr "Indicateurs de défi" + +#: src/ui/gui/retroachievements_page.slint:75 +msgctxt "RetroAchievements" +msgid "Leaderboard Trackers" +msgstr "Suivi des classements" + +#: src/ui/gui/retroachievements_page.slint:92 +msgctxt "RetroAchievements" +msgid "View Profile" +msgstr "Voir le profil" + +#: src/ui/gui/retroachievements_page.slint:102 +msgctxt "RetroAchievements" +msgid "Username" +msgstr "Nom d'utilisateur" + +#: src/ui/gui/retroachievements_page.slint:112 +msgctxt "RetroAchievements" +msgid "Password" +msgstr "Mot de passe" + +#: src/ui/gui/retroachievements_page.slint:121 +msgctxt "RetroAchievements" +msgid "Login" +msgstr "Connexion" + +#: src/ui/gui/retroachievements_page.slint:137 +msgctxt "RetroAchievements" +msgid "View Supported Games" +msgstr "Voir les jeux pris en charge" diff --git a/data/translations/ja/LC_MESSAGES/gopher64.po b/data/translations/ja/LC_MESSAGES/gopher64.po new file mode 100644 index 0000000..08e2744 --- /dev/null +++ b/data/translations/ja/LC_MESSAGES/gopher64.po @@ -0,0 +1,542 @@ +# gopher64 - Japanese Translation +msgid "" +msgstr "" +"Project-Id-Version: gopher64\n" +"POT-Creation-Date: 2026-05-10 18:36+0000\n" +"PO-Revision-Date: 2026-05-11 12:00+0000\n" +"Last-Translator: \n" +"Language-Team: Japanese\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: src/ui/gui/about_page.slint:17 +msgctxt "NewVersionButton" +msgid "New version available! Click here to download" +msgstr "新しいバージョンがあります。クリックしてダウンロード" + +#: src/ui/gui/about_page.slint:33 +msgctxt "About" +msgid "About" +msgstr "バージョン情報" + +#: src/ui/gui/about_page.slint:40 +msgctxt "About" +msgid "Wiki" +msgstr "Wiki" + +#: src/ui/gui/about_page.slint:50 +msgctxt "About" +msgid "Discord Server" +msgstr "Discordサーバー" + +#: src/ui/gui/about_page.slint:60 +msgctxt "About" +msgid "Source Code" +msgstr "ソースコード" + +#: src/ui/gui/about_page.slint:70 +msgctxt "About" +msgid "Donate (via Patreon)" +msgstr "Patreonで寄付" + +#: src/ui/gui/about_page.slint:77 +msgctxt "About" +msgid "Donate (via GitHub)" +msgstr "GitHubで寄付" + +#: src/ui/gui/cheat_page.slint:15 +msgctxt "Cheats" +msgid "Cheats" +msgstr "チート" + +#: src/ui/gui/cheat_page.slint:25 +msgctxt "Cheats" +msgid "Select ROM" +msgstr "ROMを選択" + +#: src/ui/gui/cheat_page.slint:41 +msgctxt "Cheats" +msgid "Clear Cheats For All ROMs" +msgstr "すべてのROMのチートをクリア" + +#: src/ui/gui/cheat_page.slint:86 +msgctxt "Cheats" +msgid "No Cheats Available" +msgstr "利用できるチートはありません" + +#: src/ui/gui/controller_page.slint:26 +msgctxt "ControllerConfig" +msgid "Controller Configuration" +msgstr "コントローラー設定" + +#: src/ui/gui/controller_page.slint:37 +msgctxt "ControllerConfig" +msgid "Configure Input Profile" +msgstr "入力プロファイルを設定" + +#: src/ui/gui/controller_page.slint:49 +msgctxt "ControllerConfig" +msgid "Port" +msgstr "ポート" + +#: src/ui/gui/controller_page.slint:60 +msgctxt "ControllerConfig" +msgid "Enabled" +msgstr "有効" + +#: src/ui/gui/controller_page.slint:73 +msgctxt "ControllerConfig" +msgid "Emulate VRU" +msgstr "VRUをエミュレート" + +#: src/ui/gui/controller_page.slint:87 +msgctxt "ControllerConfig" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:101 +msgctxt "ControllerConfig" +msgid "Profile" +msgstr "プロファイル" + +#: src/ui/gui/controller_page.slint:117 +msgctxt "ControllerConfig" +msgid "Controller" +msgstr "コントローラー" + +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "入力プロファイルの作成/変更" + +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "作成または変更するプロファイル名を入力" + +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "デッドゾーン(%)" + +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "DirectInputを使用" + +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "プロファイル作成ウィザードを開始" + +#: src/ui/gui/localgame_page.slint:18 +msgctxt "LocalGame" +msgid "Local Game" +msgstr "ローカルゲーム" + +#: src/ui/gui/localgame_page.slint:25 +msgctxt "LocalGame" +msgid "Open ROM" +msgstr "ROMを開く" + +#: src/ui/gui/localgame_page.slint:36 +msgctxt "LocalGame" +msgid "Open Saves Folder" +msgstr "セーブフォルダーを開く" + +#: src/ui/gui/localgame_page.slint:53 +msgctxt "LocalGame" +msgid "Recent ROMs" +msgstr "最近使ったROM" + +#: src/ui/gui/netplay_page.slint:33 +msgctxt "Netplay" +msgid "Netplay" +msgstr "ネットプレイ" + +#: src/ui/gui/netplay_page.slint:40 +msgctxt "Netplay" +msgid "Create Session" +msgstr "セッションを作成" + +#: src/ui/gui/netplay_page.slint:50 +msgctxt "Netplay" +msgid "Join Session" +msgstr "セッションに参加" + +#: src/ui/gui/netplay_page.slint:64 +msgctxt "Netplay" +msgid "Netplay Discord Channel" +msgstr "ネットプレイ用Discordチャンネル" + +#: src/ui/gui/netplay_page.slint:71 +msgctxt "Netplay" +msgid "Provide Feedback" +msgstr "フィードバックを送る" + +#: src/ui/gui/netplay_page.slint:82 +msgctxt "CustomNetplayServer" +msgid "Custom Netplay Server" +msgstr "カスタムネットプレイサーバー" + +#: src/ui/gui/settings_page.slint:22 +msgctxt "Settings" +msgid "Settings" +msgstr "設定" + +#: src/ui/gui/settings_page.slint:29 +msgctxt "Settings" +msgid "Resolution:" +msgstr "解像度:" + +#: src/ui/gui/settings_page.slint:45 +msgctxt "Settings" +msgid "SSAA downscaling" +msgstr "SSAAダウンスケール" + +#: src/ui/gui/settings_page.slint:56 +msgctxt "Settings" +msgid "Integer Scaling" +msgstr "整数倍スケーリング" + +#: src/ui/gui/settings_page.slint:67 +msgctxt "Settings" +msgid "Fullscreen" +msgstr "全画面表示" + +#: src/ui/gui/settings_page.slint:78 +msgctxt "Settings" +msgid "Widescreen (stretch)" +msgstr "ワイド画面(伸ばす)" + +#: src/ui/gui/settings_page.slint:89 +msgctxt "Settings" +msgid "VSync" +msgstr "垂直同期(VSync)" + +#: src/ui/gui/settings_page.slint:100 +msgctxt "Settings" +msgid "Apply CRT shader" +msgstr "CRTシェーダーを適用" + +#: src/ui/gui/settings_page.slint:115 +msgctxt "Settings" +msgid "Overclock N64 CPU (may cause bugs)" +msgstr "N64のCPUをオーバークロック(不具合の原因になることがあります)" + +#: src/ui/gui/settings_page.slint:126 +msgctxt "Settings" +msgid "Disable Expansion Pak" +msgstr "拡張パックを無効にする" + +#: src/ui/gui/settings_page.slint:137 +msgctxt "Settings" +msgid "Emulate UNFLoader" +msgstr "UNFLoaderをエミュレート" + +#: src/ui/gui/vru_dialog.slint:7 +msgctxt "VruDialog" +msgid "What Would You Like To Say?" +msgstr "何と言いますか?" + +#: src/ui/gui/appwindow.slint:94 +msgctxt "Menu" +msgid "Local Game" +msgstr "ローカルゲーム" + +#: src/ui/gui/appwindow.slint:95 +msgctxt "Menu" +msgid "Controller Config" +msgstr "コントローラー設定" + +#: src/ui/gui/appwindow.slint:96 +msgctxt "Menu" +msgid "Netplay" +msgstr "ネットプレイ" + +#: src/ui/gui/appwindow.slint:97 +msgctxt "Menu" +msgid "Cheats" +msgstr "チート" + +#: src/ui/gui/appwindow.slint:98 +msgctxt "Menu" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/appwindow.slint:99 +msgctxt "Menu" +msgid "Settings" +msgstr "設定" + +#: src/ui/gui/appwindow.slint:100 +msgctxt "Menu" +msgid "About" +msgstr "バージョン情報" + +#: src/ui/gui/appwindow.slint:194 +msgctxt "ErrorDialog" +msgid "Error" +msgstr "エラー" + +#: src/ui/gui/netplay_create.slint:5 +msgctxt "NetplayCreate" +msgid "Netplay: Create Session" +msgstr "ネットプレイ:セッション作成" + +#: src/ui/gui/netplay_create.slint:24 +msgctxt "NetplayCreate" +msgid "Session Name:" +msgstr "セッション名:" + +#: src/ui/gui/netplay_create.slint:28 +msgctxt "NetplayCreate" +msgid "Enter session name" +msgstr "セッション名を入力" + +#: src/ui/gui/netplay_create.slint:37 +msgctxt "NetplayCreate" +msgid "Password (Optional):" +msgstr "パスワード(任意):" + +#: src/ui/gui/netplay_create.slint:41 +msgctxt "NetplayCreate" +msgid "Enter session password" +msgstr "セッションのパスワードを入力" + +#: src/ui/gui/netplay_create.slint:51 +msgctxt "NetplayCreate" +msgid "Player Name:" +msgstr "プレイヤー名:" + +#: src/ui/gui/netplay_create.slint:55 +msgctxt "NetplayCreate" +msgid "Enter player name" +msgstr "プレイヤー名を入力" + +#: src/ui/gui/netplay_create.slint:64 +msgctxt "NetplayCreate" +msgid "Server:" +msgstr "サーバー:" + +#: src/ui/gui/netplay_create.slint:82 +msgctxt "NetplayCreate" +msgid "Select ROM" +msgstr "ROMを選択" + +#: src/ui/gui/netplay_create.slint:97 +msgctxt "NetplayCreate" +msgid "" +"This game has cheats enabled. Cheats will be synchronized with other players." +msgstr "" +"このゲームではチートが有効です。チートは他のプレイヤーと同期されます。" + +#: src/ui/gui/netplay_create.slint:103 +msgctxt "NetplayCreate" +msgid "Create Session" +msgstr "セッションを作成" + +#: src/ui/gui/netplay_create.slint:126 +msgctxt "DispatcherDialog" +msgid "Creating Server" +msgstr "サーバーを作成中" + +#: src/ui/gui/netplay_create.slint:128 +msgctxt "DispatcherDialog" +msgid "Creating server, please wait...This may take about 30 seconds." +msgstr "" +"サーバーを作成しています。しばらくお待ちください… 最大約30秒かかることがあります。" + +#: src/ui/gui/netplay_join.slint:5 +msgctxt "NetplayJoin" +msgid "Netplay: Join Session" +msgstr "ネットプレイ:セッションに参加" + +#: src/ui/gui/netplay_join.slint:30 +msgctxt "NetplayJoin" +msgid "Player Name (required):" +msgstr "プレイヤー名(必須):" + +#: src/ui/gui/netplay_join.slint:34 +msgctxt "NetplayJoin" +msgid "Enter player name" +msgstr "プレイヤー名を入力" + +#: src/ui/gui/netplay_join.slint:43 +msgctxt "NetplayJoin" +msgid "Custom Server URL (optional):" +msgstr "カスタムサーバーURL(任意):" + +#: src/ui/gui/netplay_join.slint:57 +msgctxt "NetplayJoin" +msgid "Refreshing session list, please wait..." +msgstr "セッション一覧を更新しています。しばらくお待ちください…" + +#: src/ui/gui/netplay_join.slint:62 +msgctxt "NetplayJoin" +msgid "Click on a session below to select it" +msgstr "下の一覧からセッションをクリックして選択" + +#: src/ui/gui/netplay_join.slint:67 +msgctxt "NetplayJoin" +msgid "No sessions available. Please refresh to check again." +msgstr "" +"利用できるセッションがありません。更新して再度確認してください。" + +#: src/ui/gui/netplay_join.slint:73 +msgctxt "NetplayJoin" +msgid "Server" +msgstr "サーバー" + +#: src/ui/gui/netplay_join.slint:74 +msgctxt "NetplayJoin" +msgid "Session Name" +msgstr "セッション名" + +#: src/ui/gui/netplay_join.slint:75 +msgctxt "NetplayJoin" +msgid "Game Name" +msgstr "ゲーム名" + +#: src/ui/gui/netplay_join.slint:76 +msgctxt "NetplayJoin" +msgid "Password" +msgstr "パスワード" + +#: src/ui/gui/netplay_join.slint:77 +msgctxt "NetplayJoin" +msgid "Cheats" +msgstr "チート" + +#: src/ui/gui/netplay_join.slint:91 +msgctxt "NetplayJoin" +msgid "Refresh Session List" +msgstr "セッション一覧を更新" + +#: src/ui/gui/netplay_join.slint:105 +msgctxt "NetplayJoin" +msgid "Password (if required)" +msgstr "パスワード(必要な場合)" + +#: src/ui/gui/netplay_join.slint:112 +msgctxt "NetplayJoin" +msgid "Select ROM" +msgstr "ROMを選択" + +#: src/ui/gui/netplay_join.slint:125 +msgctxt "NetplayJoin" +msgid "Join Session" +msgstr "セッションに参加" + +#: src/ui/gui/netplay_wait.slint:14 +msgctxt "NetplayWait" +msgid "Netplay: Waiting Room" +msgstr "ネットプレイ:待機室" + +#: src/ui/gui/netplay_wait.slint:31 +msgctxt "NetplayWait" +msgid "Session Name:" +msgstr "セッション名:" + +#: src/ui/gui/netplay_wait.slint:37 +msgctxt "NetplayWait" +msgid "Game Name:" +msgstr "ゲーム名:" + +#: src/ui/gui/netplay_wait.slint:43 +msgctxt "NetplayWait" +msgid "Ping:" +msgstr "Ping:" + +#: src/ui/gui/netplay_wait.slint:50 +msgctxt "NetplayWait" +msgid "Player 1:" +msgstr "プレイヤー1:" + +#: src/ui/gui/netplay_wait.slint:54 +msgctxt "NetplayWait" +msgid "Player 2:" +msgstr "プレイヤー2:" + +#: src/ui/gui/netplay_wait.slint:60 +msgctxt "NetplayWait" +msgid "Player 3:" +msgstr "プレイヤー3:" + +#: src/ui/gui/netplay_wait.slint:64 +msgctxt "NetplayWait" +msgid "Player 4:" +msgstr "プレイヤー4:" + +#: src/ui/gui/netplay_wait.slint:76 +msgctxt "NetplayWait" +msgid "Enter chat message" +msgstr "チャットメッセージを入力" + +#: src/ui/gui/netplay_wait.slint:87 +msgctxt "NetplayWait" +msgid "Send Message" +msgstr "送信" + +#: src/ui/gui/netplay_wait.slint:102 +msgctxt "NetplayWait" +msgid "Start Game" +msgstr "ゲーム開始" + +#: src/ui/gui/retroachievements_page.slint:18 +msgctxt "RAData" +msgid "Not currently logged in" +msgstr "ログインしていません" + +#: src/ui/gui/retroachievements_page.slint:26 +msgctxt "RetroAchievements" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/retroachievements_page.slint:33 +msgctxt "RetroAchievements" +msgid "Enabled" +msgstr "有効" + +#: src/ui/gui/retroachievements_page.slint:51 +msgctxt "RetroAchievements" +msgid "Hardcore mode" +msgstr "ハードコアモード" + +#: src/ui/gui/retroachievements_page.slint:63 +msgctxt "RetroAchievements" +msgid "Challenge Indicators" +msgstr "チャレンジ表示" + +#: src/ui/gui/retroachievements_page.slint:75 +msgctxt "RetroAchievements" +msgid "Leaderboard Trackers" +msgstr "リーダーボード追跡" + +#: src/ui/gui/retroachievements_page.slint:92 +msgctxt "RetroAchievements" +msgid "View Profile" +msgstr "プロフィールを表示" + +#: src/ui/gui/retroachievements_page.slint:102 +msgctxt "RetroAchievements" +msgid "Username" +msgstr "ユーザー名" + +#: src/ui/gui/retroachievements_page.slint:112 +msgctxt "RetroAchievements" +msgid "Password" +msgstr "パスワード" + +#: src/ui/gui/retroachievements_page.slint:121 +msgctxt "RetroAchievements" +msgid "Login" +msgstr "ログイン" + +#: src/ui/gui/retroachievements_page.slint:137 +msgctxt "RetroAchievements" +msgid "View Supported Games" +msgstr "対応ゲームを表示" diff --git a/data/translations/nl/LC_MESSAGES/gopher64.po b/data/translations/nl/LC_MESSAGES/gopher64.po new file mode 100644 index 0000000..4f7c707 --- /dev/null +++ b/data/translations/nl/LC_MESSAGES/gopher64.po @@ -0,0 +1,543 @@ +# gopher64 - Dutch (Netherlands) Translation +msgid "" +msgstr "" +"Project-Id-Version: gopher64\n" +"POT-Creation-Date: 2026-05-10 18:36+0000\n" +"PO-Revision-Date: 2026-05-11 12:00+0000\n" +"Last-Translator: \n" +"Language-Team: Dutch (Netherlands)\n" +"Language: nl_NL\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/ui/gui/about_page.slint:17 +msgctxt "NewVersionButton" +msgid "New version available! Click here to download" +msgstr "Nieuwe versie beschikbaar! Klik hier om te downloaden" + +#: src/ui/gui/about_page.slint:33 +msgctxt "About" +msgid "About" +msgstr "Over" + +#: src/ui/gui/about_page.slint:40 +msgctxt "About" +msgid "Wiki" +msgstr "Wiki" + +#: src/ui/gui/about_page.slint:50 +msgctxt "About" +msgid "Discord Server" +msgstr "Discord-server" + +#: src/ui/gui/about_page.slint:60 +msgctxt "About" +msgid "Source Code" +msgstr "Broncode" + +#: src/ui/gui/about_page.slint:70 +msgctxt "About" +msgid "Donate (via Patreon)" +msgstr "Doneren (via Patreon)" + +#: src/ui/gui/about_page.slint:77 +msgctxt "About" +msgid "Donate (via GitHub)" +msgstr "Doneren (via GitHub)" + +#: src/ui/gui/cheat_page.slint:15 +msgctxt "Cheats" +msgid "Cheats" +msgstr "Cheats" + +#: src/ui/gui/cheat_page.slint:25 +msgctxt "Cheats" +msgid "Select ROM" +msgstr "ROM selecteren" + +#: src/ui/gui/cheat_page.slint:41 +msgctxt "Cheats" +msgid "Clear Cheats For All ROMs" +msgstr "Cheats wissen voor alle ROM's" + +#: src/ui/gui/cheat_page.slint:86 +msgctxt "Cheats" +msgid "No Cheats Available" +msgstr "Geen cheats beschikbaar" + +#: src/ui/gui/controller_page.slint:26 +msgctxt "ControllerConfig" +msgid "Controller Configuration" +msgstr "Controllerconfiguratie" + +#: src/ui/gui/controller_page.slint:37 +msgctxt "ControllerConfig" +msgid "Configure Input Profile" +msgstr "Invoerprofiel configureren" + +#: src/ui/gui/controller_page.slint:49 +msgctxt "ControllerConfig" +msgid "Port" +msgstr "Poort" + +#: src/ui/gui/controller_page.slint:60 +msgctxt "ControllerConfig" +msgid "Enabled" +msgstr "Ingeschakeld" + +#: src/ui/gui/controller_page.slint:73 +msgctxt "ControllerConfig" +msgid "Emulate VRU" +msgstr "VRU emuleren" + +#: src/ui/gui/controller_page.slint:87 +msgctxt "ControllerConfig" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:101 +msgctxt "ControllerConfig" +msgid "Profile" +msgstr "Profiel" + +#: src/ui/gui/controller_page.slint:117 +msgctxt "ControllerConfig" +msgid "Controller" +msgstr "Controller" + +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "Invoerprofiel maken/wijzigen" + +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "Profielnaam invoeren om aan te maken of te wijzigen" + +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "Dode-zonepercentage" + +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "DirectInput gebruiken" + +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "Wizard voor profiel maken starten" + +#: src/ui/gui/localgame_page.slint:18 +msgctxt "LocalGame" +msgid "Local Game" +msgstr "Lokaal spel" + +#: src/ui/gui/localgame_page.slint:25 +msgctxt "LocalGame" +msgid "Open ROM" +msgstr "ROM openen" + +#: src/ui/gui/localgame_page.slint:36 +msgctxt "LocalGame" +msgid "Open Saves Folder" +msgstr "Map met opslagen openen" + +#: src/ui/gui/localgame_page.slint:53 +msgctxt "LocalGame" +msgid "Recent ROMs" +msgstr "Recent gebruikte ROM's" + +#: src/ui/gui/netplay_page.slint:33 +msgctxt "Netplay" +msgid "Netplay" +msgstr "Netplay" + +#: src/ui/gui/netplay_page.slint:40 +msgctxt "Netplay" +msgid "Create Session" +msgstr "Sessie aanmaken" + +#: src/ui/gui/netplay_page.slint:50 +msgctxt "Netplay" +msgid "Join Session" +msgstr "Deelnemen aan sessie" + +#: src/ui/gui/netplay_page.slint:64 +msgctxt "Netplay" +msgid "Netplay Discord Channel" +msgstr "Netplay-Discordkanaal" + +#: src/ui/gui/netplay_page.slint:71 +msgctxt "Netplay" +msgid "Provide Feedback" +msgstr "Feedback geven" + +#: src/ui/gui/netplay_page.slint:82 +msgctxt "CustomNetplayServer" +msgid "Custom Netplay Server" +msgstr "Aangepaste Netplay-server" + +#: src/ui/gui/settings_page.slint:22 +msgctxt "Settings" +msgid "Settings" +msgstr "Instellingen" + +#: src/ui/gui/settings_page.slint:29 +msgctxt "Settings" +msgid "Resolution:" +msgstr "Resolutie:" + +#: src/ui/gui/settings_page.slint:45 +msgctxt "Settings" +msgid "SSAA downscaling" +msgstr "SSAA-downscaling" + +#: src/ui/gui/settings_page.slint:56 +msgctxt "Settings" +msgid "Integer Scaling" +msgstr "Schalen in hele getallen" + +#: src/ui/gui/settings_page.slint:67 +msgctxt "Settings" +msgid "Fullscreen" +msgstr "Volledig scherm" + +#: src/ui/gui/settings_page.slint:78 +msgctxt "Settings" +msgid "Widescreen (stretch)" +msgstr "Breedbeeld (uitgerekt)" + +#: src/ui/gui/settings_page.slint:89 +msgctxt "Settings" +msgid "VSync" +msgstr "VSync" + +#: src/ui/gui/settings_page.slint:100 +msgctxt "Settings" +msgid "Apply CRT shader" +msgstr "CRT-shader toepassen" + +#: src/ui/gui/settings_page.slint:115 +msgctxt "Settings" +msgid "Overclock N64 CPU (may cause bugs)" +msgstr "N64-CPU overklokken (kan bugs veroorzaken)" + +#: src/ui/gui/settings_page.slint:126 +msgctxt "Settings" +msgid "Disable Expansion Pak" +msgstr "Expansion Pak uitschakelen" + +#: src/ui/gui/settings_page.slint:137 +msgctxt "Settings" +msgid "Emulate UNFLoader" +msgstr "UNFLoader emuleren" + +#: src/ui/gui/vru_dialog.slint:7 +msgctxt "VruDialog" +msgid "What Would You Like To Say?" +msgstr "Wat wil je zeggen?" + +#: src/ui/gui/appwindow.slint:94 +msgctxt "Menu" +msgid "Local Game" +msgstr "Lokaal spel" + +#: src/ui/gui/appwindow.slint:95 +msgctxt "Menu" +msgid "Controller Config" +msgstr "Controllerconfiguratie" + +#: src/ui/gui/appwindow.slint:96 +msgctxt "Menu" +msgid "Netplay" +msgstr "Netplay" + +#: src/ui/gui/appwindow.slint:97 +msgctxt "Menu" +msgid "Cheats" +msgstr "Cheats" + +#: src/ui/gui/appwindow.slint:98 +msgctxt "Menu" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/appwindow.slint:99 +msgctxt "Menu" +msgid "Settings" +msgstr "Instellingen" + +#: src/ui/gui/appwindow.slint:100 +msgctxt "Menu" +msgid "About" +msgstr "Over" + +#: src/ui/gui/appwindow.slint:194 +msgctxt "ErrorDialog" +msgid "Error" +msgstr "Fout" + +#: src/ui/gui/netplay_create.slint:5 +msgctxt "NetplayCreate" +msgid "Netplay: Create Session" +msgstr "Netplay: sessie aanmaken" + +#: src/ui/gui/netplay_create.slint:24 +msgctxt "NetplayCreate" +msgid "Session Name:" +msgstr "Sessienaam:" + +#: src/ui/gui/netplay_create.slint:28 +msgctxt "NetplayCreate" +msgid "Enter session name" +msgstr "Sessienaam invoeren" + +#: src/ui/gui/netplay_create.slint:37 +msgctxt "NetplayCreate" +msgid "Password (Optional):" +msgstr "Wachtwoord (optioneel):" + +#: src/ui/gui/netplay_create.slint:41 +msgctxt "NetplayCreate" +msgid "Enter session password" +msgstr "Sessiewachtwoord invoeren" + +#: src/ui/gui/netplay_create.slint:51 +msgctxt "NetplayCreate" +msgid "Player Name:" +msgstr "Spelernaam:" + +#: src/ui/gui/netplay_create.slint:55 +msgctxt "NetplayCreate" +msgid "Enter player name" +msgstr "Spelernaam invoeren" + +#: src/ui/gui/netplay_create.slint:64 +msgctxt "NetplayCreate" +msgid "Server:" +msgstr "Server:" + +#: src/ui/gui/netplay_create.slint:82 +msgctxt "NetplayCreate" +msgid "Select ROM" +msgstr "ROM selecteren" + +#: src/ui/gui/netplay_create.slint:97 +msgctxt "NetplayCreate" +msgid "" +"This game has cheats enabled. Cheats will be synchronized with other players." +msgstr "" +"Voor dit spel zijn cheats ingeschakeld. Cheats worden gesynchroniseerd met " +"andere spelers." + +#: src/ui/gui/netplay_create.slint:103 +msgctxt "NetplayCreate" +msgid "Create Session" +msgstr "Sessie aanmaken" + +#: src/ui/gui/netplay_create.slint:126 +msgctxt "DispatcherDialog" +msgid "Creating Server" +msgstr "Server wordt aangemaakt" + +#: src/ui/gui/netplay_create.slint:128 +msgctxt "DispatcherDialog" +msgid "Creating server, please wait...This may take about 30 seconds." +msgstr "" +"Server wordt aangemaakt, even geduld… Dit kan ongeveer 30 seconden duren." + +#: src/ui/gui/netplay_join.slint:5 +msgctxt "NetplayJoin" +msgid "Netplay: Join Session" +msgstr "Netplay: deelnemen aan sessie" + +#: src/ui/gui/netplay_join.slint:30 +msgctxt "NetplayJoin" +msgid "Player Name (required):" +msgstr "Spelernaam (verplicht):" + +#: src/ui/gui/netplay_join.slint:34 +msgctxt "NetplayJoin" +msgid "Enter player name" +msgstr "Spelernaam invoeren" + +#: src/ui/gui/netplay_join.slint:43 +msgctxt "NetplayJoin" +msgid "Custom Server URL (optional):" +msgstr "Aangepaste server-URL (optioneel):" + +#: src/ui/gui/netplay_join.slint:57 +msgctxt "NetplayJoin" +msgid "Refreshing session list, please wait..." +msgstr "Sessielijst wordt vernieuwd, even geduld…" + +#: src/ui/gui/netplay_join.slint:62 +msgctxt "NetplayJoin" +msgid "Click on a session below to select it" +msgstr "Klik hieronder op een sessie om die te selecteren" + +#: src/ui/gui/netplay_join.slint:67 +msgctxt "NetplayJoin" +msgid "No sessions available. Please refresh to check again." +msgstr "" +"Geen sessies beschikbaar. Vernieuw om opnieuw te controleren." + +#: src/ui/gui/netplay_join.slint:73 +msgctxt "NetplayJoin" +msgid "Server" +msgstr "Server" + +#: src/ui/gui/netplay_join.slint:74 +msgctxt "NetplayJoin" +msgid "Session Name" +msgstr "Sessienaam" + +#: src/ui/gui/netplay_join.slint:75 +msgctxt "NetplayJoin" +msgid "Game Name" +msgstr "Spelnaam" + +#: src/ui/gui/netplay_join.slint:76 +msgctxt "NetplayJoin" +msgid "Password" +msgstr "Wachtwoord" + +#: src/ui/gui/netplay_join.slint:77 +msgctxt "NetplayJoin" +msgid "Cheats" +msgstr "Cheats" + +#: src/ui/gui/netplay_join.slint:91 +msgctxt "NetplayJoin" +msgid "Refresh Session List" +msgstr "Sessielijst vernieuwen" + +#: src/ui/gui/netplay_join.slint:105 +msgctxt "NetplayJoin" +msgid "Password (if required)" +msgstr "Wachtwoord (indien vereist)" + +#: src/ui/gui/netplay_join.slint:112 +msgctxt "NetplayJoin" +msgid "Select ROM" +msgstr "ROM selecteren" + +#: src/ui/gui/netplay_join.slint:125 +msgctxt "NetplayJoin" +msgid "Join Session" +msgstr "Deelnemen aan sessie" + +#: src/ui/gui/netplay_wait.slint:14 +msgctxt "NetplayWait" +msgid "Netplay: Waiting Room" +msgstr "Netplay: wachtruimte" + +#: src/ui/gui/netplay_wait.slint:31 +msgctxt "NetplayWait" +msgid "Session Name:" +msgstr "Sessienaam:" + +#: src/ui/gui/netplay_wait.slint:37 +msgctxt "NetplayWait" +msgid "Game Name:" +msgstr "Spelnaam:" + +#: src/ui/gui/netplay_wait.slint:43 +msgctxt "NetplayWait" +msgid "Ping:" +msgstr "Ping:" + +#: src/ui/gui/netplay_wait.slint:50 +msgctxt "NetplayWait" +msgid "Player 1:" +msgstr "Speler 1:" + +#: src/ui/gui/netplay_wait.slint:54 +msgctxt "NetplayWait" +msgid "Player 2:" +msgstr "Speler 2:" + +#: src/ui/gui/netplay_wait.slint:60 +msgctxt "NetplayWait" +msgid "Player 3:" +msgstr "Speler 3:" + +#: src/ui/gui/netplay_wait.slint:64 +msgctxt "NetplayWait" +msgid "Player 4:" +msgstr "Speler 4:" + +#: src/ui/gui/netplay_wait.slint:76 +msgctxt "NetplayWait" +msgid "Enter chat message" +msgstr "Chatbericht invoeren" + +#: src/ui/gui/netplay_wait.slint:87 +msgctxt "NetplayWait" +msgid "Send Message" +msgstr "Bericht verzenden" + +#: src/ui/gui/netplay_wait.slint:102 +msgctxt "NetplayWait" +msgid "Start Game" +msgstr "Spel starten" + +#: src/ui/gui/retroachievements_page.slint:18 +msgctxt "RAData" +msgid "Not currently logged in" +msgstr "Momenteel niet ingelogd" + +#: src/ui/gui/retroachievements_page.slint:26 +msgctxt "RetroAchievements" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/retroachievements_page.slint:33 +msgctxt "RetroAchievements" +msgid "Enabled" +msgstr "Ingeschakeld" + +#: src/ui/gui/retroachievements_page.slint:51 +msgctxt "RetroAchievements" +msgid "Hardcore mode" +msgstr "Hardcore-modus" + +#: src/ui/gui/retroachievements_page.slint:63 +msgctxt "RetroAchievements" +msgid "Challenge Indicators" +msgstr "Challenge-indicatoren" + +#: src/ui/gui/retroachievements_page.slint:75 +msgctxt "RetroAchievements" +msgid "Leaderboard Trackers" +msgstr "Leaderboard-trackers" + +#: src/ui/gui/retroachievements_page.slint:92 +msgctxt "RetroAchievements" +msgid "View Profile" +msgstr "Profiel bekijken" + +#: src/ui/gui/retroachievements_page.slint:102 +msgctxt "RetroAchievements" +msgid "Username" +msgstr "Gebruikersnaam" + +#: src/ui/gui/retroachievements_page.slint:112 +msgctxt "RetroAchievements" +msgid "Password" +msgstr "Wachtwoord" + +#: src/ui/gui/retroachievements_page.slint:121 +msgctxt "RetroAchievements" +msgid "Login" +msgstr "Inloggen" + +#: src/ui/gui/retroachievements_page.slint:137 +msgctxt "RetroAchievements" +msgid "View Supported Games" +msgstr "Ondersteunde spellen bekijken" diff --git a/src/ui/gui/input_profile.slint b/src/ui/gui/input_profile.slint index 8b4e494..e0ca28f 100644 --- a/src/ui/gui/input_profile.slint +++ b/src/ui/gui/input_profile.slint @@ -16,7 +16,7 @@ export component InputProfileDialog inherits Window { HorizontalBox { LineEdit { placeholder-text: @tr("Enter profile name to create or modify"); - preferred-width: 300px; + preferred-width: 400px; edited(text) => { InputProfileData.profile_name = text; } From f9637420098e3cf3e6b5996de5f72ad0b7f9985f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 11 May 2026 17:42:15 +0200 Subject: [PATCH 0867/1117] put back checks for proper type of controller (#873) --- src/ui/input.rs | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/src/ui/input.rs b/src/ui/input.rs index 1af6d3c..09a0733 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -781,15 +781,19 @@ pub fn configure_input_profile( key_set = true } } else if event.event_type() == sdl3_sys::events::SDL_EVENT_GAMEPAD_BUTTON_DOWN { - new_controller_buttons[*value] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(unsafe { event.gbutton.button }), - }; - key_set = true + if !open_controllers.is_empty() { + new_controller_buttons[*value] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(unsafe { event.gbutton.button }), + }; + key_set = true + } } else if event.event_type() == sdl3_sys::events::SDL_EVENT_GAMEPAD_AXIS_MOTION { let axis_value = unsafe { event.gaxis.value }; let axis = unsafe { event.gaxis.axis }; - if axis_value.saturating_abs() > (i16::MAX as i32 * 3 / 4) as i16 { + if !open_controllers.is_empty() + && axis_value.saturating_abs() > (i16::MAX as i32 * 3 / 4) as i16 + { let result = ui::config::InputControllerAxis { enabled: true, id: axis as i32, @@ -803,15 +807,17 @@ pub fn configure_input_profile( } } } else if event.event_type() == sdl3_sys::events::SDL_EVENT_JOYSTICK_BUTTON_DOWN { - new_joystick_buttons[*value] = ui::config::InputKeyButton { - enabled: true, - id: i32::from(unsafe { event.jbutton.button }), - }; - key_set = true + if !open_joysticks.is_empty() { + new_joystick_buttons[*value] = ui::config::InputKeyButton { + enabled: true, + id: i32::from(unsafe { event.jbutton.button }), + }; + key_set = true + } } else if event.event_type() == sdl3_sys::events::SDL_EVENT_JOYSTICK_HAT_MOTION { let state = unsafe { event.jhat.value }; let hat = unsafe { event.jhat.hat }; - if state != sdl3_sys::joystick::SDL_HAT_CENTERED { + if !open_joysticks.is_empty() && state != sdl3_sys::joystick::SDL_HAT_CENTERED { new_joystick_hat[*value] = ui::config::InputJoystickHat { enabled: true, id: hat as i32, @@ -843,7 +849,9 @@ pub fn configure_input_profile( 0 }; - if axis_value.abs_diff(initial_state) > (u16::MAX / 4) { + if !open_joysticks.is_empty() + && axis_value.abs_diff(initial_state) > (u16::MAX / 4) + { let result = ui::config::InputControllerAxis { enabled: true, id: axis as i32, From 5368ae3d3761d53c915bf1bf7812ff1c57302ee1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 12 May 2026 07:46:04 +0200 Subject: [PATCH 0868/1117] German translation updates (#874) --- data/translations/de/LC_MESSAGES/gopher64.po | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/data/translations/de/LC_MESSAGES/gopher64.po b/data/translations/de/LC_MESSAGES/gopher64.po index 5ff6403..d33f7e4 100644 --- a/data/translations/de/LC_MESSAGES/gopher64.po +++ b/data/translations/de/LC_MESSAGES/gopher64.po @@ -95,7 +95,7 @@ msgstr "VRU emulieren" #: src/ui/gui/controller_page.slint:87 msgctxt "ControllerConfig" msgid "Transfer Pak" -msgstr "Transfer Pak" +msgstr "Pak übertragen" #: src/ui/gui/controller_page.slint:101 msgctxt "ControllerConfig" @@ -120,7 +120,7 @@ msgstr "Profilname zum Erstellen oder Bearbeiten eingeben" #: src/ui/gui/input_profile.slint:29 msgctxt "InputProfileDialog" msgid "Deadzone Percentage" -msgstr "Totzonen-Prozentsatz" +msgstr "Deadzone Größe in Prozent" #: src/ui/gui/input_profile.slint:51 msgctxt "InputProfileDialog" @@ -210,7 +210,7 @@ msgstr "Vollbild" #: src/ui/gui/settings_page.slint:78 msgctxt "Settings" msgid "Widescreen (stretch)" -msgstr "Breitbild (gestreckt)" +msgstr "16:9 (gestreckt)" #: src/ui/gui/settings_page.slint:89 msgctxt "Settings" @@ -230,7 +230,7 @@ msgstr "N64-CPU übertakten (kann Fehler verursachen)" #: src/ui/gui/settings_page.slint:126 msgctxt "Settings" msgid "Disable Expansion Pak" -msgstr "Erweiterungspaket deaktivieren" +msgstr "Expansion Pak deaktivieren" #: src/ui/gui/settings_page.slint:137 msgctxt "Settings" @@ -379,7 +379,7 @@ msgstr "Sitzungsliste wird aktualisiert, bitte warten …" #: src/ui/gui/netplay_join.slint:62 msgctxt "NetplayJoin" msgid "Click on a session below to select it" -msgstr "Zum Auswählen unten auf eine Sitzung klicken" +msgstr "Auf eine Sitzung klicken um diese auszuwählen" #: src/ui/gui/netplay_join.slint:67 msgctxt "NetplayJoin" @@ -510,7 +510,7 @@ msgstr "Hardcore-Modus" #: src/ui/gui/retroachievements_page.slint:63 msgctxt "RetroAchievements" msgid "Challenge Indicators" -msgstr "Challenge-Anzeigen" +msgstr "Challenge Tipps" #: src/ui/gui/retroachievements_page.slint:75 msgctxt "RetroAchievements" From 034b39bec5accad939f2910c13765f3f21b0b655 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 12 May 2026 08:48:33 +0200 Subject: [PATCH 0869/1117] Add Brazilian Portuguese translation (#875) * Add Brazilian Portuguese translation" * fix typo * couple more fixes --- .../pt_BR/LC_MESSAGES/gopher64.po | 539 ++++++++++++++++++ 1 file changed, 539 insertions(+) create mode 100644 data/translations/pt_BR/LC_MESSAGES/gopher64.po diff --git a/data/translations/pt_BR/LC_MESSAGES/gopher64.po b/data/translations/pt_BR/LC_MESSAGES/gopher64.po new file mode 100644 index 0000000..94ecfc5 --- /dev/null +++ b/data/translations/pt_BR/LC_MESSAGES/gopher64.po @@ -0,0 +1,539 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2026-05-11 18:10-3000\n" +"PO-Revision-Date: 2026-05-11 18:11-3000\n" +"Last-Translator: EDUARDO CARVALHO \n" +"Language-Team: LANGUAGE \n" +"Language: Brazilian Portuguese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: src/ui/gui/about_page.slint:17 +msgctxt "NewVersionButton" +msgid "New version available! Click here to download" +msgstr "Nova versão disponível! Clique aqui para baixar" + +#: src/ui/gui/about_page.slint:33 +msgctxt "About" +msgid "About" +msgstr "Sobre" + +#: src/ui/gui/about_page.slint:40 +msgctxt "About" +msgid "Wiki" +msgstr "Wiki" + +#: src/ui/gui/about_page.slint:50 +msgctxt "About" +msgid "Discord Server" +msgstr "Servidor do Discord" + +#: src/ui/gui/about_page.slint:60 +msgctxt "About" +msgid "Source Code" +msgstr "Código Fonte" + +#: src/ui/gui/about_page.slint:70 +msgctxt "About" +msgid "Donate (via Patreon)" +msgstr "Doações (via Patreon)" + +#: src/ui/gui/about_page.slint:77 +msgctxt "About" +msgid "Donate (via GitHub)" +msgstr "Doações (via GitHub)" + +#: src/ui/gui/cheat_page.slint:15 +msgctxt "Cheats" +msgid "Cheats" +msgstr "Trapaças" + +#: src/ui/gui/cheat_page.slint:25 +msgctxt "Cheats" +msgid "Select ROM" +msgstr "Selecionar ROM" + +#: src/ui/gui/cheat_page.slint:41 +msgctxt "Cheats" +msgid "Clear Cheats For All ROMs" +msgstr "Limpar Trapaças para todas as ROMs" + +#: src/ui/gui/cheat_page.slint:86 +msgctxt "Cheats" +msgid "No Cheats Available" +msgstr "Sem trapaças disponíveis" + +#: src/ui/gui/controller_page.slint:26 +msgctxt "ControllerConfig" +msgid "Controller Configuration" +msgstr "Configurar Controles" + +#: src/ui/gui/controller_page.slint:37 +msgctxt "ControllerConfig" +msgid "Configure Input Profile" +msgstr "Configurar Perfil de Controle" + +#: src/ui/gui/controller_page.slint:49 +msgctxt "ControllerConfig" +msgid "Port" +msgstr "Entrada" + +#: src/ui/gui/controller_page.slint:60 +msgctxt "ControllerConfig" +msgid "Enabled" +msgstr "Habilitado" + +#: src/ui/gui/controller_page.slint:73 +msgctxt "ControllerConfig" +msgid "Emulate VRU" +msgstr "Emular VRU" + +#: src/ui/gui/controller_page.slint:87 +msgctxt "ControllerConfig" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:101 +msgctxt "ControllerConfig" +msgid "Profile" +msgstr "Perfil" + +#: src/ui/gui/controller_page.slint:117 +msgctxt "ControllerConfig" +msgid "Controller" +msgstr "Controle" + +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "Criar/Modificar Perfil de Comandos" + +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "Insira o nome de perfil para criar ou modificar" + +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "Porcentagem de Zona-morta" + +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "Usar DirectInput" + +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "Iniciar Assistente de Criação de Perfil" + +#: src/ui/gui/localgame_page.slint:18 +msgctxt "LocalGame" +msgid "Local Game" +msgstr "Jogo Local" + +#: src/ui/gui/localgame_page.slint:25 +msgctxt "LocalGame" +msgid "Open ROM" +msgstr "Abrir ROM" + +#: src/ui/gui/localgame_page.slint:36 +msgctxt "LocalGame" +msgid "Open Saves Folder" +msgstr "Abrir Partes de Saves" + +#: src/ui/gui/localgame_page.slint:53 +msgctxt "LocalGame" +msgid "Recent ROMs" +msgstr "ROMs Recentes" + +#: src/ui/gui/netplay_page.slint:33 +msgctxt "Netplay" +msgid "Netplay" +msgstr "Netplay" + +#: src/ui/gui/netplay_page.slint:40 +msgctxt "Netplay" +msgid "Create Session" +msgstr "Criar Sessão" + +#: src/ui/gui/netplay_page.slint:50 +msgctxt "Netplay" +msgid "Join Session" +msgstr "Entrar na Sessão" + +#: src/ui/gui/netplay_page.slint:64 +msgctxt "Netplay" +msgid "Netplay Discord Channel" +msgstr "Canal de Netplay do Discord" + +#: src/ui/gui/netplay_page.slint:71 +msgctxt "Netplay" +msgid "Provide Feedback" +msgstr "Fornecer Feedback" + +#: src/ui/gui/netplay_page.slint:82 +msgctxt "CustomNetplayServer" +msgid "Custom Netplay Server" +msgstr "Servidor de Netplay Personalizado" + +#: src/ui/gui/settings_page.slint:22 +msgctxt "Settings" +msgid "Settings" +msgstr "Configurações" + +#: src/ui/gui/settings_page.slint:29 +msgctxt "Settings" +msgid "Resolution:" +msgstr "Resolução:" + +#: src/ui/gui/settings_page.slint:45 +msgctxt "Settings" +msgid "SSAA downscaling" +msgstr "Redução de SSAA" + +#: src/ui/gui/settings_page.slint:56 +msgctxt "Settings" +msgid "Integer Scaling" +msgstr "Proporção Íntegra" + +#: src/ui/gui/settings_page.slint:67 +msgctxt "Settings" +msgid "Fullscreen" +msgstr "Tela Cheia" + +#: src/ui/gui/settings_page.slint:78 +msgctxt "Settings" +msgid "Widescreen (stretch)" +msgstr "Widescreen (esticar)" + +#: src/ui/gui/settings_page.slint:89 +msgctxt "Settings" +msgid "VSync" +msgstr "VSync" + +#: src/ui/gui/settings_page.slint:100 +msgctxt "Settings" +msgid "Apply CRT shader" +msgstr "Aplicar filtro de CRT" + +#: src/ui/gui/settings_page.slint:115 +msgctxt "Settings" +msgid "Overclock N64 CPU (may cause bugs)" +msgstr "Overclock da CPU do N64 (pode causar bugs)" + +#: src/ui/gui/settings_page.slint:126 +msgctxt "Settings" +msgid "Disable Expansion Pak" +msgstr "Desabilitar Expansion Pak" + +#: src/ui/gui/settings_page.slint:137 +msgctxt "Settings" +msgid "Emulate UNFLoader" +msgstr "Emular UNFLoader" + +#: src/ui/gui/vru_dialog.slint:7 +msgctxt "VruDialog" +msgid "What Would You Like To Say?" +msgstr "O que você quer falar?" + +#: src/ui/gui/appwindow.slint:94 +msgctxt "Menu" +msgid "Local Game" +msgstr "Jogo Local" + +#: src/ui/gui/appwindow.slint:95 +msgctxt "Menu" +msgid "Controller Config" +msgstr "Configurar Controle" + +#: src/ui/gui/appwindow.slint:96 +msgctxt "Menu" +msgid "Netplay" +msgstr "Netplay" + +#: src/ui/gui/appwindow.slint:97 +msgctxt "Menu" +msgid "Cheats" +msgstr "Trapaças" + +#: src/ui/gui/appwindow.slint:98 +msgctxt "Menu" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/appwindow.slint:99 +msgctxt "Menu" +msgid "Settings" +msgstr "Configurações" + +#: src/ui/gui/appwindow.slint:100 +msgctxt "Menu" +msgid "About" +msgstr "Sobre" + +#: src/ui/gui/appwindow.slint:194 +msgctxt "ErrorDialog" +msgid "Error" +msgstr "Erro" + +#: src/ui/gui/netplay_create.slint:5 +msgctxt "NetplayCreate" +msgid "Netplay: Create Session" +msgstr "Netplay: Criar Sessão" + +#: src/ui/gui/netplay_create.slint:24 +msgctxt "NetplayCreate" +msgid "Session Name:" +msgstr "Nome da Sessão:" + +#: src/ui/gui/netplay_create.slint:28 +msgctxt "NetplayCreate" +msgid "Enter session name" +msgstr "Insira nome da sessão:" + +#: src/ui/gui/netplay_create.slint:37 +msgctxt "NetplayCreate" +msgid "Password (Optional):" +msgstr "Senha: (Opcional):" + +#: src/ui/gui/netplay_create.slint:41 +msgctxt "NetplayCreate" +msgid "Enter session password" +msgstr "Insira a senha da sessão" + +#: src/ui/gui/netplay_create.slint:51 +msgctxt "NetplayCreate" +msgid "Player Name:" +msgstr "Nome de Jogador:" + +#: src/ui/gui/netplay_create.slint:55 +msgctxt "NetplayCreate" +msgid "Enter player name" +msgstr "Insira nome de jogador" + +#: src/ui/gui/netplay_create.slint:64 +msgctxt "NetplayCreate" +msgid "Server:" +msgstr "Servidor:" + +#: src/ui/gui/netplay_create.slint:82 +msgctxt "NetplayCreate" +msgid "Select ROM" +msgstr "Selecionar ROM" + +#: src/ui/gui/netplay_create.slint:97 +msgctxt "NetplayCreate" +msgid "" +"This game has cheats enabled. Cheats will be synchronized with other players." +msgstr "Este jogo tem trapaças habilitadas. As trapaças serão sincronizadas com outros jogadores." + +#: src/ui/gui/netplay_create.slint:103 +msgctxt "NetplayCreate" +msgid "Create Session" +msgstr "Criar Sessão" + +#: src/ui/gui/netplay_create.slint:126 +msgctxt "DispatcherDialog" +msgid "Creating Server" +msgstr "Criando Servidor" + +#: src/ui/gui/netplay_create.slint:128 +msgctxt "DispatcherDialog" +msgid "Creating server, please wait...This may take about 30 seconds." +msgstr "Criando servidor, por favor aguarde...Isto poderá levar até 30 segundos." + +#: src/ui/gui/netplay_join.slint:5 +msgctxt "NetplayJoin" +msgid "Netplay: Join Session" +msgstr "Netplay: Entrar na sessão" + +#: src/ui/gui/netplay_join.slint:30 +msgctxt "NetplayJoin" +msgid "Player Name (required):" +msgstr "Nome de Jogador (obrigatório):" + +#: src/ui/gui/netplay_join.slint:34 +msgctxt "NetplayJoin" +msgid "Enter player name" +msgstr "Insira o nome de jogador" + +#: src/ui/gui/netplay_join.slint:43 +msgctxt "NetplayJoin" +msgid "Custom Server URL (optional):" +msgstr "URL Personalizada de Servidor (opcional):" + +#: src/ui/gui/netplay_join.slint:57 +msgctxt "NetplayJoin" +msgid "Refreshing session list, please wait..." +msgstr "Recarregando lista de sessões, por favor aguarde..." + +#: src/ui/gui/netplay_join.slint:62 +msgctxt "NetplayJoin" +msgid "Click on a session below to select it" +msgstr "Clique em uma sessão abaixo para selecionar" + +#: src/ui/gui/netplay_join.slint:67 +msgctxt "NetplayJoin" +msgid "No sessions available. Please refresh to check again." +msgstr "Sem sessões disponíveis. Por favor recarregue para verificar novamente." + +#: src/ui/gui/netplay_join.slint:73 +msgctxt "NetplayJoin" +msgid "Server" +msgstr "Servidor" + +#: src/ui/gui/netplay_join.slint:74 +msgctxt "NetplayJoin" +msgid "Session Name" +msgstr "Nome da Sessão" + +#: src/ui/gui/netplay_join.slint:75 +msgctxt "NetplayJoin" +msgid "Game Name" +msgstr "Nome do Jogo" + +#: src/ui/gui/netplay_join.slint:76 +msgctxt "NetplayJoin" +msgid "Password" +msgstr "Senha" + +#: src/ui/gui/netplay_join.slint:77 +msgctxt "NetplayJoin" +msgid "Cheats" +msgstr "Trapaças" + +#: src/ui/gui/netplay_join.slint:91 +msgctxt "NetplayJoin" +msgid "Refresh Session List" +msgstr "Recarregar Lista de Sessões" + +#: src/ui/gui/netplay_join.slint:105 +msgctxt "NetplayJoin" +msgid "Password (if required)" +msgstr "Senha (caso obrigatória)" + +#: src/ui/gui/netplay_join.slint:112 +msgctxt "NetplayJoin" +msgid "Select ROM" +msgstr "Selecionar ROM" + +#: src/ui/gui/netplay_join.slint:125 +msgctxt "NetplayJoin" +msgid "Join Session" +msgstr "Entrar na Sessão" + +#: src/ui/gui/netplay_wait.slint:14 +msgctxt "NetplayWait" +msgid "Netplay: Waiting Room" +msgstr "Netplay: Aguardando Sala" + +#: src/ui/gui/netplay_wait.slint:31 +msgctxt "NetplayWait" +msgid "Session Name:" +msgstr "Nome da Sessão:" + +#: src/ui/gui/netplay_wait.slint:37 +msgctxt "NetplayWait" +msgid "Game Name:" +msgstr "Nome do Jogo:" + +#: src/ui/gui/netplay_wait.slint:43 +msgctxt "NetplayWait" +msgid "Ping:" +msgstr "Ping:" + +#: src/ui/gui/netplay_wait.slint:50 +msgctxt "NetplayWait" +msgid "Player 1:" +msgstr "Jogador 1" + +#: src/ui/gui/netplay_wait.slint:54 +msgctxt "NetplayWait" +msgid "Player 2:" +msgstr "Jogador 2:" + +#: src/ui/gui/netplay_wait.slint:60 +msgctxt "NetplayWait" +msgid "Player 3:" +msgstr "Jogador 3:" + +#: src/ui/gui/netplay_wait.slint:64 +msgctxt "NetplayWait" +msgid "Player 4:" +msgstr "Jogador 4:" + +#: src/ui/gui/netplay_wait.slint:76 +msgctxt "NetplayWait" +msgid "Enter chat message" +msgstr "Escrever mensagem no chat" + +#: src/ui/gui/netplay_wait.slint:87 +msgctxt "NetplayWait" +msgid "Send Message" +msgstr "Enviar Mensagem" + +#: src/ui/gui/netplay_wait.slint:102 +msgctxt "NetplayWait" +msgid "Start Game" +msgstr "Iniciar jogo" + +#: src/ui/gui/retroachievements_page.slint:18 +msgctxt "RAData" +msgid "Not currently logged in" +msgstr "Não está logado." + +#: src/ui/gui/retroachievements_page.slint:26 +msgctxt "RetroAchievements" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/retroachievements_page.slint:33 +msgctxt "RetroAchievements" +msgid "Enabled" +msgstr "Habilitado" + +#: src/ui/gui/retroachievements_page.slint:51 +msgctxt "RetroAchievements" +msgid "Hardcore mode" +msgstr "Modo Hardcore" + +#: src/ui/gui/retroachievements_page.slint:63 +msgctxt "RetroAchievements" +msgid "Challenge Indicators" +msgstr "Indicadores de Desafio" + +#: src/ui/gui/retroachievements_page.slint:75 +msgctxt "RetroAchievements" +msgid "Leaderboard Trackers" +msgstr "Rastreadores de Tabela" + +#: src/ui/gui/retroachievements_page.slint:92 +msgctxt "RetroAchievements" +msgid "View Profile" +msgstr "Ver Perfil" + +#: src/ui/gui/retroachievements_page.slint:102 +msgctxt "RetroAchievements" +msgid "Username" +msgstr "Usuário" + +#: src/ui/gui/retroachievements_page.slint:112 +msgctxt "RetroAchievements" +msgid "Password" +msgstr "Senha" + +#: src/ui/gui/retroachievements_page.slint:121 +msgctxt "RetroAchievements" +msgid "Login" +msgstr "Login" + +#: src/ui/gui/retroachievements_page.slint:137 +msgctxt "RetroAchievements" +msgid "View Supported Games" +msgstr "Ver Jogos com Suporte" From 1ab8987f2d84ec7f46eec1020662da57b7c80a96 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 12 May 2026 08:55:01 +0200 Subject: [PATCH 0870/1117] Update lint.yml to include fetch-depth option (#876) Add fetch-depth option to checkout step in lint workflow. --- .github/workflows/lint.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index da38b9f..00b9f1d 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -20,8 +20,10 @@ jobs: - uses: actions/checkout@v6 with: submodules: recursive + fetch-depth: 0 - uses: actions-rust-lang/setup-rust-toolchain@v1 with: + rustflags: "" components: clippy, rustfmt - name: Set LLVM_VERSION run: From 6496288c4eff74a9af03b390db4a3e15faf3f896 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 12 May 2026 10:11:46 +0200 Subject: [PATCH 0871/1117] don't reallocate rdram during load state (#877) * don't reallocate rdram during load state * more --- src/savestates.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/savestates.rs b/src/savestates.rs index 75ec56d..2d5b409 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -126,6 +126,7 @@ pub fn load_savestate(device: &mut device::Device) { && let Ok(ra_state) = ui::storage::decompress_file(savestate, "ra_state") && let Ok(state) = postcard::from_bytes::(&device_bytes) && let Ok(saves) = postcard::from_bytes(&save_bytes) + && device.rdram.size == state.rdram.size { device.ui.storage.saves = saves; @@ -139,7 +140,10 @@ pub fn load_savestate(device: &mut device::Device) { device.memory = state.memory; device.rsp = state.rsp; device.rdp = state.rdp; - device.rdram = state.rdram; + + device.rdram.mem.clone_from(&state.rdram.mem); + device.rdram.regs = state.rdram.regs; + device.mi = state.mi; device.pi = state.pi; device.vi = state.vi; @@ -217,6 +221,7 @@ pub fn load_savestate(device: &mut device::Device) { ui::audio::init_game_audio(device); ui::video::load_state(device, rdp_state.as_ptr()); + retroachievements::set_dmem(device.rdram.mem.as_ptr(), device.rdram.size as usize); if !ra_state.is_empty() { retroachievements::load_state(ra_state.as_ptr(), ra_state.len()); } else { From e7071047e369dc1e2a23de0285880ed2cfaafc18 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 12 May 2026 12:22:44 +0200 Subject: [PATCH 0872/1117] Add Russian translation (#878) --- data/translations/ru/LC_MESSAGES/gopher64.po | 542 +++++++++++++++++++ 1 file changed, 542 insertions(+) create mode 100644 data/translations/ru/LC_MESSAGES/gopher64.po diff --git a/data/translations/ru/LC_MESSAGES/gopher64.po b/data/translations/ru/LC_MESSAGES/gopher64.po new file mode 100644 index 0000000..85e1f6b --- /dev/null +++ b/data/translations/ru/LC_MESSAGES/gopher64.po @@ -0,0 +1,542 @@ +# gopher64 - Russian Translation +msgid "" +msgstr "" +"Project-Id-Version: gopher64\n" +"POT-Creation-Date: 2026-05-10 18:36+0000\n" +"PO-Revision-Date: 2026-05-11 12:00+0000\n" +"Last-Translator: \n" +"Language-Team: Russian\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/ui/gui/about_page.slint:17 +msgctxt "NewVersionButton" +msgid "New version available! Click here to download" +msgstr "Доступна новая версия! Нажмите здесь для загрузки" + +#: src/ui/gui/about_page.slint:33 +msgctxt "About" +msgid "About" +msgstr "О программе" + +#: src/ui/gui/about_page.slint:40 +msgctxt "About" +msgid "Wiki" +msgstr "Вики" + +#: src/ui/gui/about_page.slint:50 +msgctxt "About" +msgid "Discord Server" +msgstr "Сервер Discord" + +#: src/ui/gui/about_page.slint:60 +msgctxt "About" +msgid "Source Code" +msgstr "Исходный код" + +#: src/ui/gui/about_page.slint:70 +msgctxt "About" +msgid "Donate (via Patreon)" +msgstr "Пожертвовать (через Patreon)" + +#: src/ui/gui/about_page.slint:77 +msgctxt "About" +msgid "Donate (via GitHub)" +msgstr "Пожертвовать (через GitHub)" + +#: src/ui/gui/cheat_page.slint:15 +msgctxt "Cheats" +msgid "Cheats" +msgstr "Читы" + +#: src/ui/gui/cheat_page.slint:25 +msgctxt "Cheats" +msgid "Select ROM" +msgstr "Выбрать ROM" + +#: src/ui/gui/cheat_page.slint:41 +msgctxt "Cheats" +msgid "Clear Cheats For All ROMs" +msgstr "Очистить читы для всех ROMов" + +#: src/ui/gui/cheat_page.slint:86 +msgctxt "Cheats" +msgid "No Cheats Available" +msgstr "Читы недоступны" + +#: src/ui/gui/controller_page.slint:26 +msgctxt "ControllerConfig" +msgid "Controller Configuration" +msgstr "Настройка контроллера" + +#: src/ui/gui/controller_page.slint:37 +msgctxt "ControllerConfig" +msgid "Configure Input Profile" +msgstr "Настроить профиль ввода" + +#: src/ui/gui/controller_page.slint:49 +msgctxt "ControllerConfig" +msgid "Port" +msgstr "Порт" + +#: src/ui/gui/controller_page.slint:60 +msgctxt "ControllerConfig" +msgid "Enabled" +msgstr "Включено" + +#: src/ui/gui/controller_page.slint:73 +msgctxt "ControllerConfig" +msgid "Emulate VRU" +msgstr "Эмулировать VRU" + +#: src/ui/gui/controller_page.slint:87 +msgctxt "ControllerConfig" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:101 +msgctxt "ControllerConfig" +msgid "Profile" +msgstr "Профиль" + +#: src/ui/gui/controller_page.slint:117 +msgctxt "ControllerConfig" +msgid "Controller" +msgstr "Контроллер" + +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "Создать/изменить профиль ввода" + +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "Введите имя профиля для создания или изменения" + +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "Процент мёртвой зоны" + +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "Использовать DirectInput" + +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "Запустить мастер создания профиля" + +#: src/ui/gui/localgame_page.slint:18 +msgctxt "LocalGame" +msgid "Local Game" +msgstr "Локальная игра" + +#: src/ui/gui/localgame_page.slint:25 +msgctxt "LocalGame" +msgid "Open ROM" +msgstr "Открыть ROM" + +#: src/ui/gui/localgame_page.slint:36 +msgctxt "LocalGame" +msgid "Open Saves Folder" +msgstr "Открыть папку сохранений" + +#: src/ui/gui/localgame_page.slint:53 +msgctxt "LocalGame" +msgid "Recent ROMs" +msgstr "Недавние ROMы" + +#: src/ui/gui/netplay_page.slint:33 +msgctxt "Netplay" +msgid "Netplay" +msgstr "Сетевая игра" + +#: src/ui/gui/netplay_page.slint:40 +msgctxt "Netplay" +msgid "Create Session" +msgstr "Создать сессию" + +#: src/ui/gui/netplay_page.slint:50 +msgctxt "Netplay" +msgid "Join Session" +msgstr "Присоединиться к сессии" + +#: src/ui/gui/netplay_page.slint:64 +msgctxt "Netplay" +msgid "Netplay Discord Channel" +msgstr "Канал Discord для сетевой игры" + +#: src/ui/gui/netplay_page.slint:71 +msgctxt "Netplay" +msgid "Provide Feedback" +msgstr "Оставить отзыв" + +#: src/ui/gui/netplay_page.slint:82 +msgctxt "CustomNetplayServer" +msgid "Custom Netplay Server" +msgstr "Пользовательский сервер сетевой игры" + +#: src/ui/gui/settings_page.slint:22 +msgctxt "Settings" +msgid "Settings" +msgstr "Настройки" + +#: src/ui/gui/settings_page.slint:29 +msgctxt "Settings" +msgid "Resolution:" +msgstr "Разрешение:" + +#: src/ui/gui/settings_page.slint:45 +msgctxt "Settings" +msgid "SSAA downscaling" +msgstr "SSAA даунскейлинг" + +#: src/ui/gui/settings_page.slint:56 +msgctxt "Settings" +msgid "Integer Scaling" +msgstr "Целочисленное масштабирование" + +#: src/ui/gui/settings_page.slint:67 +msgctxt "Settings" +msgid "Fullscreen" +msgstr "Полноэкранный режим" + +#: src/ui/gui/settings_page.slint:78 +msgctxt "Settings" +msgid "Widescreen (stretch)" +msgstr "Широкоэкранный режим (растянуто)" + +#: src/ui/gui/settings_page.slint:89 +msgctxt "Settings" +msgid "VSync" +msgstr "Вертикальная синхронизация" + +#: src/ui/gui/settings_page.slint:100 +msgctxt "Settings" +msgid "Apply CRT shader" +msgstr "Применить шейдер ЭЛТ" + +#: src/ui/gui/settings_page.slint:115 +msgctxt "Settings" +msgid "Overclock N64 CPU (may cause bugs)" +msgstr "Разгон процессора N64 (может вызвать ошибки)" + +#: src/ui/gui/settings_page.slint:126 +msgctxt "Settings" +msgid "Disable Expansion Pak" +msgstr "Отключить Expansion Pak" + +#: src/ui/gui/settings_page.slint:137 +msgctxt "Settings" +msgid "Emulate UNFLoader" +msgstr "Эмулировать UNFLoader" + +#: src/ui/gui/vru_dialog.slint:7 +msgctxt "VruDialog" +msgid "What Would You Like To Say?" +msgstr "Что вы хотите сказать?" + +#: src/ui/gui/appwindow.slint:94 +msgctxt "Menu" +msgid "Local Game" +msgstr "Локальная игра" + +#: src/ui/gui/appwindow.slint:95 +msgctxt "Menu" +msgid "Controller Config" +msgstr "Настройка контроллера" + +#: src/ui/gui/appwindow.slint:96 +msgctxt "Menu" +msgid "Netplay" +msgstr "Сетевая игра" + +#: src/ui/gui/appwindow.slint:97 +msgctxt "Menu" +msgid "Cheats" +msgstr "Читы" + +#: src/ui/gui/appwindow.slint:98 +msgctxt "Menu" +msgid "RetroAchievements" +msgstr "Ретро-достижения" + +#: src/ui/gui/appwindow.slint:99 +msgctxt "Menu" +msgid "Settings" +msgstr "Настройки" + +#: src/ui/gui/appwindow.slint:100 +msgctxt "Menu" +msgid "About" +msgstr "О программе" + +#: src/ui/gui/appwindow.slint:194 +msgctxt "ErrorDialog" +msgid "Error" +msgstr "Ошибка" + +#: src/ui/gui/netplay_create.slint:5 +msgctxt "NetplayCreate" +msgid "Netplay: Create Session" +msgstr "Сетевая игра: Создать сессию" + +#: src/ui/gui/netplay_create.slint:24 +msgctxt "NetplayCreate" +msgid "Session Name:" +msgstr "Имя сессии:" + +#: src/ui/gui/netplay_create.slint:28 +msgctxt "NetplayCreate" +msgid "Enter session name" +msgstr "Введите имя сессии" + +#: src/ui/gui/netplay_create.slint:37 +msgctxt "NetplayCreate" +msgid "Password (Optional):" +msgstr "Пароль (необязательно):" + +#: src/ui/gui/netplay_create.slint:41 +msgctxt "NetplayCreate" +msgid "Enter session password" +msgstr "Введите пароль сессии" + +#: src/ui/gui/netplay_create.slint:51 +msgctxt "NetplayCreate" +msgid "Player Name:" +msgstr "Имя игрока:" + +#: src/ui/gui/netplay_create.slint:55 +msgctxt "NetplayCreate" +msgid "Enter player name" +msgstr "Введите имя игрока" + +#: src/ui/gui/netplay_create.slint:64 +msgctxt "NetplayCreate" +msgid "Server:" +msgstr "Сервер:" + +#: src/ui/gui/netplay_create.slint:82 +msgctxt "NetplayCreate" +msgid "Select ROM" +msgstr "Выбрать ROM" + +#: src/ui/gui/netplay_create.slint:97 +msgctxt "NetplayCreate" +msgid "" +"This game has cheats enabled. Cheats will be synchronized with other players." +msgstr "" +"Для этой игры включены читы. Читы будут синхронизированы с другими игроками." + +#: src/ui/gui/netplay_create.slint:103 +msgctxt "NetplayCreate" +msgid "Create Session" +msgstr "Создать сессию" + +#: src/ui/gui/netplay_create.slint:126 +msgctxt "DispatcherDialog" +msgid "Creating Server" +msgstr "Создание сервера" + +#: src/ui/gui/netplay_create.slint:128 +msgctxt "DispatcherDialog" +msgid "Creating server, please wait...This may take about 30 seconds." +msgstr "" +"Создание сервера, пожалуйста, подождите... Это может занять около 30 секунд." + +#: src/ui/gui/netplay_join.slint:5 +msgctxt "NetplayJoin" +msgid "Netplay: Join Session" +msgstr "Сетевая игра: Присоединиться к сессии" + +#: src/ui/gui/netplay_join.slint:30 +msgctxt "NetplayJoin" +msgid "Player Name (required):" +msgstr "Имя игрока (обязательно):" + +#: src/ui/gui/netplay_join.slint:34 +msgctxt "NetplayJoin" +msgid "Enter player name" +msgstr "Введите имя игрока" + +#: src/ui/gui/netplay_join.slint:43 +msgctxt "NetplayJoin" +msgid "Custom Server URL (optional):" +msgstr "URL пользовательского сервера (необязательно):" + +#: src/ui/gui/netplay_join.slint:57 +msgctxt "NetplayJoin" +msgid "Refreshing session list, please wait..." +msgstr "Обновление списка сессий, пожалуйста, подождите..." + +#: src/ui/gui/netplay_join.slint:62 +msgctxt "NetplayJoin" +msgid "Click on a session below to select it" +msgstr "Нажмите на сессию ниже, чтобы выбрать её" + +#: src/ui/gui/netplay_join.slint:67 +msgctxt "NetplayJoin" +msgid "No sessions available. Please refresh to check again." +msgstr "" +"Нет доступных сессий. Пожалуйста, обновите, чтобы проверить снова." + +#: src/ui/gui/netplay_join.slint:73 +msgctxt "NetplayJoin" +msgid "Server" +msgstr "Сервер" + +#: src/ui/gui/netplay_join.slint:74 +msgctxt "NetplayJoin" +msgid "Session Name" +msgstr "Имя сессии" + +#: src/ui/gui/netplay_join.slint:75 +msgctxt "NetplayJoin" +msgid "Game Name" +msgstr "Название игры" + +#: src/ui/gui/netplay_join.slint:76 +msgctxt "NetplayJoin" +msgid "Password" +msgstr "Пароль" + +#: src/ui/gui/netplay_join.slint:77 +msgctxt "NetplayJoin" +msgid "Cheats" +msgstr "Читы" + +#: src/ui/gui/netplay_join.slint:91 +msgctxt "NetplayJoin" +msgid "Refresh Session List" +msgstr "Обновить список сессий" + +#: src/ui/gui/netplay_join.slint:105 +msgctxt "NetplayJoin" +msgid "Password (if required)" +msgstr "Пароль (если требуется)" + +#: src/ui/gui/netplay_join.slint:112 +msgctxt "NetplayJoin" +msgid "Select ROM" +msgstr "Выбрать ROM" + +#: src/ui/gui/netplay_join.slint:125 +msgctxt "NetplayJoin" +msgid "Join Session" +msgstr "Присоединиться к сессии" + +#: src/ui/gui/netplay_wait.slint:14 +msgctxt "NetplayWait" +msgid "Netplay: Waiting Room" +msgstr "Сетевая игра: Комната ожидания" + +#: src/ui/gui/netplay_wait.slint:31 +msgctxt "NetplayWait" +msgid "Session Name:" +msgstr "Имя сессии:" + +#: src/ui/gui/netplay_wait.slint:37 +msgctxt "NetplayWait" +msgid "Game Name:" +msgstr "Название игры:" + +#: src/ui/gui/netplay_wait.slint:43 +msgctxt "NetplayWait" +msgid "Ping:" +msgstr "Пинг:" + +#: src/ui/gui/netplay_wait.slint:50 +msgctxt "NetplayWait" +msgid "Player 1:" +msgstr "Игрок 1:" + +#: src/ui/gui/netplay_wait.slint:54 +msgctxt "NetplayWait" +msgid "Player 2:" +msgstr "Игрок 2:" + +#: src/ui/gui/netplay_wait.slint:60 +msgctxt "NetplayWait" +msgid "Player 3:" +msgstr "Игрок 3:" + +#: src/ui/gui/netplay_wait.slint:64 +msgctxt "NetplayWait" +msgid "Player 4:" +msgstr "Игрок 4:" + +#: src/ui/gui/netplay_wait.slint:76 +msgctxt "NetplayWait" +msgid "Enter chat message" +msgstr "Введите сообщение чата" + +#: src/ui/gui/netplay_wait.slint:87 +msgctxt "NetplayWait" +msgid "Send Message" +msgstr "Отправить сообщение" + +#: src/ui/gui/netplay_wait.slint:102 +msgctxt "NetplayWait" +msgid "Start Game" +msgstr "Начать игру" + +#: src/ui/gui/retroachievements_page.slint:18 +msgctxt "RAData" +msgid "Not currently logged in" +msgstr "В данный момент не выполнен вход" + +#: src/ui/gui/retroachievements_page.slint:26 +msgctxt "RetroAchievements" +msgid "RetroAchievements" +msgstr "Ретро-достижения" + +#: src/ui/gui/retroachievements_page.slint:33 +msgctxt "RetroAchievements" +msgid "Enabled" +msgstr "Включено" + +#: src/ui/gui/retroachievements_page.slint:51 +msgctxt "RetroAchievements" +msgid "Hardcore mode" +msgstr "Хардкорный режим" + +#: src/ui/gui/retroachievements_page.slint:63 +msgctxt "RetroAchievements" +msgid "Challenge Indicators" +msgstr "Индикаторы испытаний" + +#: src/ui/gui/retroachievements_page.slint:75 +msgctxt "RetroAchievements" +msgid "Leaderboard Trackers" +msgstr "Трекеры таблицы лидеров" + +#: src/ui/gui/retroachievements_page.slint:92 +msgctxt "RetroAchievements" +msgid "View Profile" +msgstr "Просмотреть профиль" + +#: src/ui/gui/retroachievements_page.slint:102 +msgctxt "RetroAchievements" +msgid "Username" +msgstr "Имя пользователя" + +#: src/ui/gui/retroachievements_page.slint:112 +msgctxt "RetroAchievements" +msgid "Password" +msgstr "Пароль" + +#: src/ui/gui/retroachievements_page.slint:121 +msgctxt "RetroAchievements" +msgid "Login" +msgstr "Войти" + +#: src/ui/gui/retroachievements_page.slint:137 +msgctxt "RetroAchievements" +msgid "View Supported Games" +msgstr "Просмотреть поддерживаемые игры" \ No newline at end of file From b792ebbd45e3d91047c08a82cdd5708329fa0b97 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 12 May 2026 12:26:41 +0200 Subject: [PATCH 0873/1117] Change German translation for 'Transfer Pak' (#879) --- data/translations/de/LC_MESSAGES/gopher64.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/translations/de/LC_MESSAGES/gopher64.po b/data/translations/de/LC_MESSAGES/gopher64.po index d33f7e4..b8a712c 100644 --- a/data/translations/de/LC_MESSAGES/gopher64.po +++ b/data/translations/de/LC_MESSAGES/gopher64.po @@ -95,7 +95,7 @@ msgstr "VRU emulieren" #: src/ui/gui/controller_page.slint:87 msgctxt "ControllerConfig" msgid "Transfer Pak" -msgstr "Pak übertragen" +msgstr "Transfer Pak" #: src/ui/gui/controller_page.slint:101 msgctxt "ControllerConfig" From d7c912b53ece281df1a2b5b39c4e946410e70b00 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 12 May 2026 13:16:28 +0200 Subject: [PATCH 0874/1117] Update russian translation (#880) --- data/translations/ru/LC_MESSAGES/gopher64.po | 1082 +++++++++--------- 1 file changed, 541 insertions(+), 541 deletions(-) diff --git a/data/translations/ru/LC_MESSAGES/gopher64.po b/data/translations/ru/LC_MESSAGES/gopher64.po index 85e1f6b..fcba18c 100644 --- a/data/translations/ru/LC_MESSAGES/gopher64.po +++ b/data/translations/ru/LC_MESSAGES/gopher64.po @@ -1,542 +1,542 @@ -# gopher64 - Russian Translation -msgid "" -msgstr "" -"Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-10 18:36+0000\n" -"PO-Revision-Date: 2026-05-11 12:00+0000\n" -"Last-Translator: \n" -"Language-Team: Russian\n" -"Language: ru\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: src/ui/gui/about_page.slint:17 -msgctxt "NewVersionButton" -msgid "New version available! Click here to download" -msgstr "Доступна новая версия! Нажмите здесь для загрузки" - -#: src/ui/gui/about_page.slint:33 -msgctxt "About" -msgid "About" -msgstr "О программе" - -#: src/ui/gui/about_page.slint:40 -msgctxt "About" -msgid "Wiki" -msgstr "Вики" - -#: src/ui/gui/about_page.slint:50 -msgctxt "About" -msgid "Discord Server" -msgstr "Сервер Discord" - -#: src/ui/gui/about_page.slint:60 -msgctxt "About" -msgid "Source Code" -msgstr "Исходный код" - -#: src/ui/gui/about_page.slint:70 -msgctxt "About" -msgid "Donate (via Patreon)" -msgstr "Пожертвовать (через Patreon)" - -#: src/ui/gui/about_page.slint:77 -msgctxt "About" -msgid "Donate (via GitHub)" -msgstr "Пожертвовать (через GitHub)" - -#: src/ui/gui/cheat_page.slint:15 -msgctxt "Cheats" -msgid "Cheats" -msgstr "Читы" - -#: src/ui/gui/cheat_page.slint:25 -msgctxt "Cheats" -msgid "Select ROM" -msgstr "Выбрать ROM" - -#: src/ui/gui/cheat_page.slint:41 -msgctxt "Cheats" -msgid "Clear Cheats For All ROMs" -msgstr "Очистить читы для всех ROMов" - -#: src/ui/gui/cheat_page.slint:86 -msgctxt "Cheats" -msgid "No Cheats Available" -msgstr "Читы недоступны" - -#: src/ui/gui/controller_page.slint:26 -msgctxt "ControllerConfig" -msgid "Controller Configuration" -msgstr "Настройка контроллера" - -#: src/ui/gui/controller_page.slint:37 -msgctxt "ControllerConfig" -msgid "Configure Input Profile" -msgstr "Настроить профиль ввода" - -#: src/ui/gui/controller_page.slint:49 -msgctxt "ControllerConfig" -msgid "Port" -msgstr "Порт" - -#: src/ui/gui/controller_page.slint:60 -msgctxt "ControllerConfig" -msgid "Enabled" -msgstr "Включено" - -#: src/ui/gui/controller_page.slint:73 -msgctxt "ControllerConfig" -msgid "Emulate VRU" -msgstr "Эмулировать VRU" - -#: src/ui/gui/controller_page.slint:87 -msgctxt "ControllerConfig" -msgid "Transfer Pak" -msgstr "Transfer Pak" - -#: src/ui/gui/controller_page.slint:101 -msgctxt "ControllerConfig" -msgid "Profile" -msgstr "Профиль" - -#: src/ui/gui/controller_page.slint:117 -msgctxt "ControllerConfig" -msgid "Controller" -msgstr "Контроллер" - -#: src/ui/gui/input_profile.slint:10 -msgctxt "InputProfileDialog" -msgid "Create/Modify Input Profile" -msgstr "Создать/изменить профиль ввода" - -#: src/ui/gui/input_profile.slint:18 -msgctxt "InputProfileDialog" -msgid "Enter profile name to create or modify" -msgstr "Введите имя профиля для создания или изменения" - -#: src/ui/gui/input_profile.slint:29 -msgctxt "InputProfileDialog" -msgid "Deadzone Percentage" -msgstr "Процент мёртвой зоны" - -#: src/ui/gui/input_profile.slint:51 -msgctxt "InputProfileDialog" -msgid "Use DirectInput" -msgstr "Использовать DirectInput" - -#: src/ui/gui/input_profile.slint:61 -msgctxt "InputProfileDialog" -msgid "Start Profile Creation Wizard" -msgstr "Запустить мастер создания профиля" - -#: src/ui/gui/localgame_page.slint:18 -msgctxt "LocalGame" -msgid "Local Game" -msgstr "Локальная игра" - -#: src/ui/gui/localgame_page.slint:25 -msgctxt "LocalGame" -msgid "Open ROM" -msgstr "Открыть ROM" - -#: src/ui/gui/localgame_page.slint:36 -msgctxt "LocalGame" -msgid "Open Saves Folder" -msgstr "Открыть папку сохранений" - -#: src/ui/gui/localgame_page.slint:53 -msgctxt "LocalGame" -msgid "Recent ROMs" -msgstr "Недавние ROMы" - -#: src/ui/gui/netplay_page.slint:33 -msgctxt "Netplay" -msgid "Netplay" -msgstr "Сетевая игра" - -#: src/ui/gui/netplay_page.slint:40 -msgctxt "Netplay" -msgid "Create Session" -msgstr "Создать сессию" - -#: src/ui/gui/netplay_page.slint:50 -msgctxt "Netplay" -msgid "Join Session" -msgstr "Присоединиться к сессии" - -#: src/ui/gui/netplay_page.slint:64 -msgctxt "Netplay" -msgid "Netplay Discord Channel" -msgstr "Канал Discord для сетевой игры" - -#: src/ui/gui/netplay_page.slint:71 -msgctxt "Netplay" -msgid "Provide Feedback" -msgstr "Оставить отзыв" - -#: src/ui/gui/netplay_page.slint:82 -msgctxt "CustomNetplayServer" -msgid "Custom Netplay Server" -msgstr "Пользовательский сервер сетевой игры" - -#: src/ui/gui/settings_page.slint:22 -msgctxt "Settings" -msgid "Settings" -msgstr "Настройки" - -#: src/ui/gui/settings_page.slint:29 -msgctxt "Settings" -msgid "Resolution:" -msgstr "Разрешение:" - -#: src/ui/gui/settings_page.slint:45 -msgctxt "Settings" -msgid "SSAA downscaling" -msgstr "SSAA даунскейлинг" - -#: src/ui/gui/settings_page.slint:56 -msgctxt "Settings" -msgid "Integer Scaling" -msgstr "Целочисленное масштабирование" - -#: src/ui/gui/settings_page.slint:67 -msgctxt "Settings" -msgid "Fullscreen" -msgstr "Полноэкранный режим" - -#: src/ui/gui/settings_page.slint:78 -msgctxt "Settings" -msgid "Widescreen (stretch)" -msgstr "Широкоэкранный режим (растянуто)" - -#: src/ui/gui/settings_page.slint:89 -msgctxt "Settings" -msgid "VSync" -msgstr "Вертикальная синхронизация" - -#: src/ui/gui/settings_page.slint:100 -msgctxt "Settings" -msgid "Apply CRT shader" -msgstr "Применить шейдер ЭЛТ" - -#: src/ui/gui/settings_page.slint:115 -msgctxt "Settings" -msgid "Overclock N64 CPU (may cause bugs)" -msgstr "Разгон процессора N64 (может вызвать ошибки)" - -#: src/ui/gui/settings_page.slint:126 -msgctxt "Settings" -msgid "Disable Expansion Pak" -msgstr "Отключить Expansion Pak" - -#: src/ui/gui/settings_page.slint:137 -msgctxt "Settings" -msgid "Emulate UNFLoader" -msgstr "Эмулировать UNFLoader" - -#: src/ui/gui/vru_dialog.slint:7 -msgctxt "VruDialog" -msgid "What Would You Like To Say?" -msgstr "Что вы хотите сказать?" - -#: src/ui/gui/appwindow.slint:94 -msgctxt "Menu" -msgid "Local Game" -msgstr "Локальная игра" - -#: src/ui/gui/appwindow.slint:95 -msgctxt "Menu" -msgid "Controller Config" -msgstr "Настройка контроллера" - -#: src/ui/gui/appwindow.slint:96 -msgctxt "Menu" -msgid "Netplay" -msgstr "Сетевая игра" - -#: src/ui/gui/appwindow.slint:97 -msgctxt "Menu" -msgid "Cheats" -msgstr "Читы" - -#: src/ui/gui/appwindow.slint:98 -msgctxt "Menu" -msgid "RetroAchievements" -msgstr "Ретро-достижения" - -#: src/ui/gui/appwindow.slint:99 -msgctxt "Menu" -msgid "Settings" -msgstr "Настройки" - -#: src/ui/gui/appwindow.slint:100 -msgctxt "Menu" -msgid "About" -msgstr "О программе" - -#: src/ui/gui/appwindow.slint:194 -msgctxt "ErrorDialog" -msgid "Error" -msgstr "Ошибка" - -#: src/ui/gui/netplay_create.slint:5 -msgctxt "NetplayCreate" -msgid "Netplay: Create Session" -msgstr "Сетевая игра: Создать сессию" - -#: src/ui/gui/netplay_create.slint:24 -msgctxt "NetplayCreate" -msgid "Session Name:" -msgstr "Имя сессии:" - -#: src/ui/gui/netplay_create.slint:28 -msgctxt "NetplayCreate" -msgid "Enter session name" -msgstr "Введите имя сессии" - -#: src/ui/gui/netplay_create.slint:37 -msgctxt "NetplayCreate" -msgid "Password (Optional):" -msgstr "Пароль (необязательно):" - -#: src/ui/gui/netplay_create.slint:41 -msgctxt "NetplayCreate" -msgid "Enter session password" -msgstr "Введите пароль сессии" - -#: src/ui/gui/netplay_create.slint:51 -msgctxt "NetplayCreate" -msgid "Player Name:" -msgstr "Имя игрока:" - -#: src/ui/gui/netplay_create.slint:55 -msgctxt "NetplayCreate" -msgid "Enter player name" -msgstr "Введите имя игрока" - -#: src/ui/gui/netplay_create.slint:64 -msgctxt "NetplayCreate" -msgid "Server:" -msgstr "Сервер:" - -#: src/ui/gui/netplay_create.slint:82 -msgctxt "NetplayCreate" -msgid "Select ROM" -msgstr "Выбрать ROM" - -#: src/ui/gui/netplay_create.slint:97 -msgctxt "NetplayCreate" -msgid "" -"This game has cheats enabled. Cheats will be synchronized with other players." -msgstr "" -"Для этой игры включены читы. Читы будут синхронизированы с другими игроками." - -#: src/ui/gui/netplay_create.slint:103 -msgctxt "NetplayCreate" -msgid "Create Session" -msgstr "Создать сессию" - -#: src/ui/gui/netplay_create.slint:126 -msgctxt "DispatcherDialog" -msgid "Creating Server" -msgstr "Создание сервера" - -#: src/ui/gui/netplay_create.slint:128 -msgctxt "DispatcherDialog" -msgid "Creating server, please wait...This may take about 30 seconds." -msgstr "" -"Создание сервера, пожалуйста, подождите... Это может занять около 30 секунд." - -#: src/ui/gui/netplay_join.slint:5 -msgctxt "NetplayJoin" -msgid "Netplay: Join Session" -msgstr "Сетевая игра: Присоединиться к сессии" - -#: src/ui/gui/netplay_join.slint:30 -msgctxt "NetplayJoin" -msgid "Player Name (required):" -msgstr "Имя игрока (обязательно):" - -#: src/ui/gui/netplay_join.slint:34 -msgctxt "NetplayJoin" -msgid "Enter player name" -msgstr "Введите имя игрока" - -#: src/ui/gui/netplay_join.slint:43 -msgctxt "NetplayJoin" -msgid "Custom Server URL (optional):" -msgstr "URL пользовательского сервера (необязательно):" - -#: src/ui/gui/netplay_join.slint:57 -msgctxt "NetplayJoin" -msgid "Refreshing session list, please wait..." -msgstr "Обновление списка сессий, пожалуйста, подождите..." - -#: src/ui/gui/netplay_join.slint:62 -msgctxt "NetplayJoin" -msgid "Click on a session below to select it" -msgstr "Нажмите на сессию ниже, чтобы выбрать её" - -#: src/ui/gui/netplay_join.slint:67 -msgctxt "NetplayJoin" -msgid "No sessions available. Please refresh to check again." -msgstr "" -"Нет доступных сессий. Пожалуйста, обновите, чтобы проверить снова." - -#: src/ui/gui/netplay_join.slint:73 -msgctxt "NetplayJoin" -msgid "Server" -msgstr "Сервер" - -#: src/ui/gui/netplay_join.slint:74 -msgctxt "NetplayJoin" -msgid "Session Name" -msgstr "Имя сессии" - -#: src/ui/gui/netplay_join.slint:75 -msgctxt "NetplayJoin" -msgid "Game Name" -msgstr "Название игры" - -#: src/ui/gui/netplay_join.slint:76 -msgctxt "NetplayJoin" -msgid "Password" -msgstr "Пароль" - -#: src/ui/gui/netplay_join.slint:77 -msgctxt "NetplayJoin" -msgid "Cheats" -msgstr "Читы" - -#: src/ui/gui/netplay_join.slint:91 -msgctxt "NetplayJoin" -msgid "Refresh Session List" -msgstr "Обновить список сессий" - -#: src/ui/gui/netplay_join.slint:105 -msgctxt "NetplayJoin" -msgid "Password (if required)" -msgstr "Пароль (если требуется)" - -#: src/ui/gui/netplay_join.slint:112 -msgctxt "NetplayJoin" -msgid "Select ROM" -msgstr "Выбрать ROM" - -#: src/ui/gui/netplay_join.slint:125 -msgctxt "NetplayJoin" -msgid "Join Session" -msgstr "Присоединиться к сессии" - -#: src/ui/gui/netplay_wait.slint:14 -msgctxt "NetplayWait" -msgid "Netplay: Waiting Room" -msgstr "Сетевая игра: Комната ожидания" - -#: src/ui/gui/netplay_wait.slint:31 -msgctxt "NetplayWait" -msgid "Session Name:" -msgstr "Имя сессии:" - -#: src/ui/gui/netplay_wait.slint:37 -msgctxt "NetplayWait" -msgid "Game Name:" -msgstr "Название игры:" - -#: src/ui/gui/netplay_wait.slint:43 -msgctxt "NetplayWait" -msgid "Ping:" -msgstr "Пинг:" - -#: src/ui/gui/netplay_wait.slint:50 -msgctxt "NetplayWait" -msgid "Player 1:" -msgstr "Игрок 1:" - -#: src/ui/gui/netplay_wait.slint:54 -msgctxt "NetplayWait" -msgid "Player 2:" -msgstr "Игрок 2:" - -#: src/ui/gui/netplay_wait.slint:60 -msgctxt "NetplayWait" -msgid "Player 3:" -msgstr "Игрок 3:" - -#: src/ui/gui/netplay_wait.slint:64 -msgctxt "NetplayWait" -msgid "Player 4:" -msgstr "Игрок 4:" - -#: src/ui/gui/netplay_wait.slint:76 -msgctxt "NetplayWait" -msgid "Enter chat message" -msgstr "Введите сообщение чата" - -#: src/ui/gui/netplay_wait.slint:87 -msgctxt "NetplayWait" -msgid "Send Message" -msgstr "Отправить сообщение" - -#: src/ui/gui/netplay_wait.slint:102 -msgctxt "NetplayWait" -msgid "Start Game" -msgstr "Начать игру" - -#: src/ui/gui/retroachievements_page.slint:18 -msgctxt "RAData" -msgid "Not currently logged in" -msgstr "В данный момент не выполнен вход" - -#: src/ui/gui/retroachievements_page.slint:26 -msgctxt "RetroAchievements" -msgid "RetroAchievements" -msgstr "Ретро-достижения" - -#: src/ui/gui/retroachievements_page.slint:33 -msgctxt "RetroAchievements" -msgid "Enabled" -msgstr "Включено" - -#: src/ui/gui/retroachievements_page.slint:51 -msgctxt "RetroAchievements" -msgid "Hardcore mode" -msgstr "Хардкорный режим" - -#: src/ui/gui/retroachievements_page.slint:63 -msgctxt "RetroAchievements" -msgid "Challenge Indicators" -msgstr "Индикаторы испытаний" - -#: src/ui/gui/retroachievements_page.slint:75 -msgctxt "RetroAchievements" -msgid "Leaderboard Trackers" -msgstr "Трекеры таблицы лидеров" - -#: src/ui/gui/retroachievements_page.slint:92 -msgctxt "RetroAchievements" -msgid "View Profile" -msgstr "Просмотреть профиль" - -#: src/ui/gui/retroachievements_page.slint:102 -msgctxt "RetroAchievements" -msgid "Username" -msgstr "Имя пользователя" - -#: src/ui/gui/retroachievements_page.slint:112 -msgctxt "RetroAchievements" -msgid "Password" -msgstr "Пароль" - -#: src/ui/gui/retroachievements_page.slint:121 -msgctxt "RetroAchievements" -msgid "Login" -msgstr "Войти" - -#: src/ui/gui/retroachievements_page.slint:137 -msgctxt "RetroAchievements" -msgid "View Supported Games" +# gopher64 - Russian Translation +msgid "" +msgstr "" +"Project-Id-Version: gopher64\n" +"POT-Creation-Date: 2026-05-10 18:36+0000\n" +"PO-Revision-Date: 2026-05-11 12:00+0000\n" +"Last-Translator: \n" +"Language-Team: Russian\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/ui/gui/about_page.slint:17 +msgctxt "NewVersionButton" +msgid "New version available! Click here to download" +msgstr "Доступна новая версия! Нажмите здесь для загрузки" + +#: src/ui/gui/about_page.slint:33 +msgctxt "About" +msgid "About" +msgstr "О программе" + +#: src/ui/gui/about_page.slint:40 +msgctxt "About" +msgid "Wiki" +msgstr "Вики" + +#: src/ui/gui/about_page.slint:50 +msgctxt "About" +msgid "Discord Server" +msgstr "Сервер Discord" + +#: src/ui/gui/about_page.slint:60 +msgctxt "About" +msgid "Source Code" +msgstr "Исходный код" + +#: src/ui/gui/about_page.slint:70 +msgctxt "About" +msgid "Donate (via Patreon)" +msgstr "Пожертвовать (через Patreon)" + +#: src/ui/gui/about_page.slint:77 +msgctxt "About" +msgid "Donate (via GitHub)" +msgstr "Пожертвовать (через GitHub)" + +#: src/ui/gui/cheat_page.slint:15 +msgctxt "Cheats" +msgid "Cheats" +msgstr "Читы" + +#: src/ui/gui/cheat_page.slint:25 +msgctxt "Cheats" +msgid "Select ROM" +msgstr "Выбрать ROM" + +#: src/ui/gui/cheat_page.slint:41 +msgctxt "Cheats" +msgid "Clear Cheats For All ROMs" +msgstr "Очистить читы для всех ROMов" + +#: src/ui/gui/cheat_page.slint:86 +msgctxt "Cheats" +msgid "No Cheats Available" +msgstr "Читы недоступны" + +#: src/ui/gui/controller_page.slint:26 +msgctxt "ControllerConfig" +msgid "Controller Configuration" +msgstr "Настройка контроллера" + +#: src/ui/gui/controller_page.slint:37 +msgctxt "ControllerConfig" +msgid "Configure Input Profile" +msgstr "Настроить профиль ввода" + +#: src/ui/gui/controller_page.slint:49 +msgctxt "ControllerConfig" +msgid "Port" +msgstr "Порт" + +#: src/ui/gui/controller_page.slint:60 +msgctxt "ControllerConfig" +msgid "Enabled" +msgstr "Включено" + +#: src/ui/gui/controller_page.slint:73 +msgctxt "ControllerConfig" +msgid "Emulate VRU" +msgstr "Эмулировать VRU" + +#: src/ui/gui/controller_page.slint:87 +msgctxt "ControllerConfig" +msgid "Transfer Pak" +msgstr "Transfer Pak" + +#: src/ui/gui/controller_page.slint:101 +msgctxt "ControllerConfig" +msgid "Profile" +msgstr "Профиль" + +#: src/ui/gui/controller_page.slint:117 +msgctxt "ControllerConfig" +msgid "Controller" +msgstr "Контроллер" + +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "Создать/изменить профиль ввода" + +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "Введите имя профиля для создания или изменения" + +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "Процент мёртвой зоны" + +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "Использовать DirectInput" + +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "Запустить мастер создания профиля" + +#: src/ui/gui/localgame_page.slint:18 +msgctxt "LocalGame" +msgid "Local Game" +msgstr "Локальная игра" + +#: src/ui/gui/localgame_page.slint:25 +msgctxt "LocalGame" +msgid "Open ROM" +msgstr "Открыть ROM" + +#: src/ui/gui/localgame_page.slint:36 +msgctxt "LocalGame" +msgid "Open Saves Folder" +msgstr "Открыть папку сохранений" + +#: src/ui/gui/localgame_page.slint:53 +msgctxt "LocalGame" +msgid "Recent ROMs" +msgstr "Недавние ROMы" + +#: src/ui/gui/netplay_page.slint:33 +msgctxt "Netplay" +msgid "Netplay" +msgstr "Сетевая игра" + +#: src/ui/gui/netplay_page.slint:40 +msgctxt "Netplay" +msgid "Create Session" +msgstr "Создать сессию" + +#: src/ui/gui/netplay_page.slint:50 +msgctxt "Netplay" +msgid "Join Session" +msgstr "Присоединиться к сессии" + +#: src/ui/gui/netplay_page.slint:64 +msgctxt "Netplay" +msgid "Netplay Discord Channel" +msgstr "Канал Discord для сетевой игры" + +#: src/ui/gui/netplay_page.slint:71 +msgctxt "Netplay" +msgid "Provide Feedback" +msgstr "Оставить отзыв" + +#: src/ui/gui/netplay_page.slint:82 +msgctxt "CustomNetplayServer" +msgid "Custom Netplay Server" +msgstr "Пользовательский сервер сетевой игры" + +#: src/ui/gui/settings_page.slint:22 +msgctxt "Settings" +msgid "Settings" +msgstr "Настройки" + +#: src/ui/gui/settings_page.slint:29 +msgctxt "Settings" +msgid "Resolution:" +msgstr "Разрешение:" + +#: src/ui/gui/settings_page.slint:45 +msgctxt "Settings" +msgid "SSAA downscaling" +msgstr "SSAA даунскейлинг" + +#: src/ui/gui/settings_page.slint:56 +msgctxt "Settings" +msgid "Integer Scaling" +msgstr "Целочисленное масштабирование" + +#: src/ui/gui/settings_page.slint:67 +msgctxt "Settings" +msgid "Fullscreen" +msgstr "Полноэкранный режим" + +#: src/ui/gui/settings_page.slint:78 +msgctxt "Settings" +msgid "Widescreen (stretch)" +msgstr "Широкоэкранный режим (растянуто)" + +#: src/ui/gui/settings_page.slint:89 +msgctxt "Settings" +msgid "VSync" +msgstr "Вертикальная синхронизация" + +#: src/ui/gui/settings_page.slint:100 +msgctxt "Settings" +msgid "Apply CRT shader" +msgstr "Применить шейдер ЭЛТ" + +#: src/ui/gui/settings_page.slint:115 +msgctxt "Settings" +msgid "Overclock N64 CPU (may cause bugs)" +msgstr "Разгон процессора N64 (может вызвать ошибки)" + +#: src/ui/gui/settings_page.slint:126 +msgctxt "Settings" +msgid "Disable Expansion Pak" +msgstr "Отключить Expansion Pak" + +#: src/ui/gui/settings_page.slint:137 +msgctxt "Settings" +msgid "Emulate UNFLoader" +msgstr "Эмулировать UNFLoader" + +#: src/ui/gui/vru_dialog.slint:7 +msgctxt "VruDialog" +msgid "What Would You Like To Say?" +msgstr "Что вы хотите сказать?" + +#: src/ui/gui/appwindow.slint:94 +msgctxt "Menu" +msgid "Local Game" +msgstr "Локальная игра" + +#: src/ui/gui/appwindow.slint:95 +msgctxt "Menu" +msgid "Controller Config" +msgstr "Настройка контроллера" + +#: src/ui/gui/appwindow.slint:96 +msgctxt "Menu" +msgid "Netplay" +msgstr "Сетевая игра" + +#: src/ui/gui/appwindow.slint:97 +msgctxt "Menu" +msgid "Cheats" +msgstr "Читы" + +#: src/ui/gui/appwindow.slint:98 +msgctxt "Menu" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/appwindow.slint:99 +msgctxt "Menu" +msgid "Settings" +msgstr "Настройки" + +#: src/ui/gui/appwindow.slint:100 +msgctxt "Menu" +msgid "About" +msgstr "О программе" + +#: src/ui/gui/appwindow.slint:194 +msgctxt "ErrorDialog" +msgid "Error" +msgstr "Ошибка" + +#: src/ui/gui/netplay_create.slint:5 +msgctxt "NetplayCreate" +msgid "Netplay: Create Session" +msgstr "Сетевая игра: Создать сессию" + +#: src/ui/gui/netplay_create.slint:24 +msgctxt "NetplayCreate" +msgid "Session Name:" +msgstr "Имя сессии:" + +#: src/ui/gui/netplay_create.slint:28 +msgctxt "NetplayCreate" +msgid "Enter session name" +msgstr "Введите имя сессии" + +#: src/ui/gui/netplay_create.slint:37 +msgctxt "NetplayCreate" +msgid "Password (Optional):" +msgstr "Пароль (необязательно):" + +#: src/ui/gui/netplay_create.slint:41 +msgctxt "NetplayCreate" +msgid "Enter session password" +msgstr "Введите пароль сессии" + +#: src/ui/gui/netplay_create.slint:51 +msgctxt "NetplayCreate" +msgid "Player Name:" +msgstr "Имя игрока:" + +#: src/ui/gui/netplay_create.slint:55 +msgctxt "NetplayCreate" +msgid "Enter player name" +msgstr "Введите имя игрока" + +#: src/ui/gui/netplay_create.slint:64 +msgctxt "NetplayCreate" +msgid "Server:" +msgstr "Сервер:" + +#: src/ui/gui/netplay_create.slint:82 +msgctxt "NetplayCreate" +msgid "Select ROM" +msgstr "Выбрать ROM" + +#: src/ui/gui/netplay_create.slint:97 +msgctxt "NetplayCreate" +msgid "" +"This game has cheats enabled. Cheats will be synchronized with other players." +msgstr "" +"Для этой игры включены читы. Читы будут синхронизированы с другими игроками." + +#: src/ui/gui/netplay_create.slint:103 +msgctxt "NetplayCreate" +msgid "Create Session" +msgstr "Создать сессию" + +#: src/ui/gui/netplay_create.slint:126 +msgctxt "DispatcherDialog" +msgid "Creating Server" +msgstr "Создание сервера" + +#: src/ui/gui/netplay_create.slint:128 +msgctxt "DispatcherDialog" +msgid "Creating server, please wait...This may take about 30 seconds." +msgstr "" +"Создание сервера, пожалуйста, подождите... Это может занять около 30 секунд." + +#: src/ui/gui/netplay_join.slint:5 +msgctxt "NetplayJoin" +msgid "Netplay: Join Session" +msgstr "Сетевая игра: Присоединиться к сессии" + +#: src/ui/gui/netplay_join.slint:30 +msgctxt "NetplayJoin" +msgid "Player Name (required):" +msgstr "Имя игрока (обязательно):" + +#: src/ui/gui/netplay_join.slint:34 +msgctxt "NetplayJoin" +msgid "Enter player name" +msgstr "Введите имя игрока" + +#: src/ui/gui/netplay_join.slint:43 +msgctxt "NetplayJoin" +msgid "Custom Server URL (optional):" +msgstr "URL пользовательского сервера (необязательно):" + +#: src/ui/gui/netplay_join.slint:57 +msgctxt "NetplayJoin" +msgid "Refreshing session list, please wait..." +msgstr "Обновление списка сессий, пожалуйста, подождите..." + +#: src/ui/gui/netplay_join.slint:62 +msgctxt "NetplayJoin" +msgid "Click on a session below to select it" +msgstr "Нажмите на сессию ниже, чтобы выбрать её" + +#: src/ui/gui/netplay_join.slint:67 +msgctxt "NetplayJoin" +msgid "No sessions available. Please refresh to check again." +msgstr "" +"Нет доступных сессий. Пожалуйста, обновите, чтобы проверить снова." + +#: src/ui/gui/netplay_join.slint:73 +msgctxt "NetplayJoin" +msgid "Server" +msgstr "Сервер" + +#: src/ui/gui/netplay_join.slint:74 +msgctxt "NetplayJoin" +msgid "Session Name" +msgstr "Имя сессии" + +#: src/ui/gui/netplay_join.slint:75 +msgctxt "NetplayJoin" +msgid "Game Name" +msgstr "Название игры" + +#: src/ui/gui/netplay_join.slint:76 +msgctxt "NetplayJoin" +msgid "Password" +msgstr "Пароль" + +#: src/ui/gui/netplay_join.slint:77 +msgctxt "NetplayJoin" +msgid "Cheats" +msgstr "Читы" + +#: src/ui/gui/netplay_join.slint:91 +msgctxt "NetplayJoin" +msgid "Refresh Session List" +msgstr "Обновить список сессий" + +#: src/ui/gui/netplay_join.slint:105 +msgctxt "NetplayJoin" +msgid "Password (if required)" +msgstr "Пароль (если требуется)" + +#: src/ui/gui/netplay_join.slint:112 +msgctxt "NetplayJoin" +msgid "Select ROM" +msgstr "Выбрать ROM" + +#: src/ui/gui/netplay_join.slint:125 +msgctxt "NetplayJoin" +msgid "Join Session" +msgstr "Присоединиться к сессии" + +#: src/ui/gui/netplay_wait.slint:14 +msgctxt "NetplayWait" +msgid "Netplay: Waiting Room" +msgstr "Сетевая игра: Комната ожидания" + +#: src/ui/gui/netplay_wait.slint:31 +msgctxt "NetplayWait" +msgid "Session Name:" +msgstr "Имя сессии:" + +#: src/ui/gui/netplay_wait.slint:37 +msgctxt "NetplayWait" +msgid "Game Name:" +msgstr "Название игры:" + +#: src/ui/gui/netplay_wait.slint:43 +msgctxt "NetplayWait" +msgid "Ping:" +msgstr "Пинг:" + +#: src/ui/gui/netplay_wait.slint:50 +msgctxt "NetplayWait" +msgid "Player 1:" +msgstr "Игрок 1:" + +#: src/ui/gui/netplay_wait.slint:54 +msgctxt "NetplayWait" +msgid "Player 2:" +msgstr "Игрок 2:" + +#: src/ui/gui/netplay_wait.slint:60 +msgctxt "NetplayWait" +msgid "Player 3:" +msgstr "Игрок 3:" + +#: src/ui/gui/netplay_wait.slint:64 +msgctxt "NetplayWait" +msgid "Player 4:" +msgstr "Игрок 4:" + +#: src/ui/gui/netplay_wait.slint:76 +msgctxt "NetplayWait" +msgid "Enter chat message" +msgstr "Введите сообщение чата" + +#: src/ui/gui/netplay_wait.slint:87 +msgctxt "NetplayWait" +msgid "Send Message" +msgstr "Отправить сообщение" + +#: src/ui/gui/netplay_wait.slint:102 +msgctxt "NetplayWait" +msgid "Start Game" +msgstr "Начать игру" + +#: src/ui/gui/retroachievements_page.slint:18 +msgctxt "RAData" +msgid "Not currently logged in" +msgstr "В данный момент не выполнен вход" + +#: src/ui/gui/retroachievements_page.slint:26 +msgctxt "RetroAchievements" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/retroachievements_page.slint:33 +msgctxt "RetroAchievements" +msgid "Enabled" +msgstr "Включено" + +#: src/ui/gui/retroachievements_page.slint:51 +msgctxt "RetroAchievements" +msgid "Hardcore mode" +msgstr "Хардкорный режим" + +#: src/ui/gui/retroachievements_page.slint:63 +msgctxt "RetroAchievements" +msgid "Challenge Indicators" +msgstr "Индикаторы испытаний" + +#: src/ui/gui/retroachievements_page.slint:75 +msgctxt "RetroAchievements" +msgid "Leaderboard Trackers" +msgstr "Трекеры таблицы лидеров" + +#: src/ui/gui/retroachievements_page.slint:92 +msgctxt "RetroAchievements" +msgid "View Profile" +msgstr "Просмотреть профиль" + +#: src/ui/gui/retroachievements_page.slint:102 +msgctxt "RetroAchievements" +msgid "Username" +msgstr "Имя пользователя" + +#: src/ui/gui/retroachievements_page.slint:112 +msgctxt "RetroAchievements" +msgid "Password" +msgstr "Пароль" + +#: src/ui/gui/retroachievements_page.slint:121 +msgctxt "RetroAchievements" +msgid "Login" +msgstr "Войти" + +#: src/ui/gui/retroachievements_page.slint:137 +msgctxt "RetroAchievements" +msgid "View Supported Games" msgstr "Просмотреть поддерживаемые игры" \ No newline at end of file From 06052b729bc953aa7a82646892c0e46b40690eae Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 12 May 2026 13:55:42 +0200 Subject: [PATCH 0875/1117] add missing newline (#881) --- data/translations/ru/LC_MESSAGES/gopher64.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/translations/ru/LC_MESSAGES/gopher64.po b/data/translations/ru/LC_MESSAGES/gopher64.po index fcba18c..80c4a6b 100644 --- a/data/translations/ru/LC_MESSAGES/gopher64.po +++ b/data/translations/ru/LC_MESSAGES/gopher64.po @@ -539,4 +539,4 @@ msgstr "Войти" #: src/ui/gui/retroachievements_page.slint:137 msgctxt "RetroAchievements" msgid "View Supported Games" -msgstr "Просмотреть поддерживаемые игры" \ No newline at end of file +msgstr "Просмотреть поддерживаемые игры" From c1dc4fe589f32980d1f7afb62c26b2cb95e8e07c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 13 May 2026 10:03:15 +0200 Subject: [PATCH 0876/1117] automatically attach assets to release (#884) * automatically attach assets to release * more --- .github/workflows/build.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4e158e0..b766775 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -255,3 +255,22 @@ jobs: butler push target/${{ matrix.target }}/release/bundle/osx/Gopher64.app loganmc10/gopher64:${{ matrix.arch }} --userversion ${GITHUB_REF_NAME#v} env: BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }} + + collect-artifacts: + name: Collect release artifacts + needs: [build-linux, build-windows, build-macos] + if: github.ref_type == 'tag' + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Download all workflow artifacts + uses: actions/download-artifact@v8 + with: + skip-decompress: true + path: release-artifacts + - name: Add files to release + uses: softprops/action-gh-release@v3 + with: + draft: true + files: release-artifacts/* From 9846c2243c370cca51731117b6222fd093320fc9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 13 May 2026 14:48:18 +0200 Subject: [PATCH 0877/1117] fix typo in RAM name (#885) --- build.rs | 2 +- retroachievements/retroachievements.c | 18 +++++++++--------- retroachievements/retroachievements.h | 2 +- src/device/cart/rom.rs | 2 +- src/device/rdram.rs | 2 +- src/retroachievements.rs | 4 ++-- src/savestates.rs | 2 +- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/build.rs b/build.rs index b7e7d1a..34ed1b6 100644 --- a/build.rs +++ b/build.rs @@ -171,7 +171,7 @@ fn main() { .allowlist_function("ra_get_hardcore") .allowlist_function("ra_load_game") .allowlist_function("ra_unload_game") - .allowlist_function("ra_set_dmem") + .allowlist_function("ra_set_rdram") .allowlist_function("ra_do_frame") .allowlist_function("ra_do_idle") .allowlist_function("ra_http_callback") diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index 2c7a3c9..7f9b017 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -16,18 +16,18 @@ void store_retroachievements_credentials(const char *username, void notify_load_game(void *userdata); static rc_client_t *g_client = NULL; -static const uint8_t *g_dmem = NULL; -static size_t g_dmem_size = 0; +static const uint8_t *g_rdram = NULL; +static size_t g_rdram_size = 0; static bool g_challenge = false; static bool g_leaderboard = false; static rc_client_leaderboard_list_t *g_leaderboard_list = NULL; static uint32_t read_memory(uint32_t address, uint8_t *buffer, uint32_t num_bytes, rc_client_t *client) { - if (address + num_bytes > g_dmem_size) + if (address + num_bytes > g_rdram_size) memset(buffer, 0, num_bytes); else - memcpy(buffer, &g_dmem[address], num_bytes); + memcpy(buffer, &g_rdram[address], num_bytes); return num_bytes; } @@ -177,9 +177,9 @@ void ra_unload_game() { rc_client_unload_game(g_client); } -void ra_set_dmem(const uint8_t *dmem, size_t dmem_size) { - g_dmem = dmem; - g_dmem_size = dmem_size; +void ra_set_rdram(const uint8_t *rdram, size_t rdram_size) { + g_rdram = rdram; + g_rdram_size = rdram_size; } static void leaderboard_submitted(const rc_client_leaderboard_t *leaderboard) { @@ -316,8 +316,8 @@ void ra_init_client(bool hardcore, bool challenge, bool leaderboard) { // Create the client instance (using a global variable simplifies this // example) g_client = rc_client_create(read_memory, server_call); - g_dmem = NULL; - g_dmem_size = 0; + g_rdram = NULL; + g_rdram_size = 0; // Provide a logging function to simplify debugging rc_client_enable_logging(g_client, RC_CLIENT_LOG_LEVEL_WARN, log_message); diff --git a/retroachievements/retroachievements.h b/retroachievements/retroachievements.h index 4d4fe40..cee9ca0 100644 --- a/retroachievements/retroachievements.h +++ b/retroachievements/retroachievements.h @@ -8,7 +8,7 @@ void ra_welcome(); bool ra_get_hardcore(); void ra_load_game(const uint8_t *rom, size_t rom_size, void *userdata); void ra_unload_game(); -void ra_set_dmem(const uint8_t *dmem, size_t dmem_size); +void ra_set_rdram(const uint8_t *rdram, size_t rdram_size); void ra_do_frame(); void ra_do_idle(); void ra_http_callback(const char *content, size_t content_size, int status_code, diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index 7fc0991..bded4f6 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -33,7 +33,7 @@ pub fn read_mem( let cycles = device::pi::calculate_cycles(device, 1, 4); device::cop0::add_cycles(device, cycles); - // well known cart ROM oddity, if a read is perfomed while PI_STATUS_IO_BUSY is set, the latched value is returned rather than the data at the specified address + // well known cart ROM oddity, if a read is performed while PI_STATUS_IO_BUSY is set, the latched value is returned rather than the data at the specified address if device.pi.regs[device::pi::PI_STATUS_REG] & device::pi::PI_STATUS_IO_BUSY != 0 { device.cart.latch } else { diff --git a/src/device/rdram.rs b/src/device/rdram.rs index 8114fd2..a2e0496 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -151,7 +151,7 @@ pub fn init(device: &mut device::Device) { device.rdram.mem = unsafe { Vec::from_raw_parts(ptr, device.rdram.size as usize, device.rdram.size as usize) }; - retroachievements::set_dmem(device.rdram.mem.as_ptr(), device.rdram.size as usize); + retroachievements::set_rdram(device.rdram.mem.as_ptr(), device.rdram.size as usize); // hack, skip RDRAM initialization device diff --git a/src/retroachievements.rs b/src/retroachievements.rs index 7fdd7e0..f46ab51 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -149,8 +149,8 @@ pub fn welcome() { unsafe { ra_welcome() }; } -pub fn set_dmem(dmem: *const u8, dmem_size: usize) { - unsafe { ra_set_dmem(dmem, dmem_size) }; +pub fn set_rdram(rdram: *const u8, rdram_size: usize) { + unsafe { ra_set_rdram(rdram, rdram_size) }; } pub fn do_frame() { diff --git a/src/savestates.rs b/src/savestates.rs index 2d5b409..3a23a2a 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -221,7 +221,7 @@ pub fn load_savestate(device: &mut device::Device) { ui::audio::init_game_audio(device); ui::video::load_state(device, rdp_state.as_ptr()); - retroachievements::set_dmem(device.rdram.mem.as_ptr(), device.rdram.size as usize); + retroachievements::set_rdram(device.rdram.mem.as_ptr(), device.rdram.size as usize); if !ra_state.is_empty() { retroachievements::load_state(ra_state.as_ptr(), ra_state.len()); } else { From 40a29d927fe89718ec6a041a94cb28468ce5ace7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 14 May 2026 10:34:42 +0200 Subject: [PATCH 0878/1117] shorten some messages (#887) --- src/device/controller.rs | 2 +- src/savestates.rs | 4 ++-- src/ui/video.rs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/device/controller.rs b/src/device/controller.rs index 87db1d2..1fd76eb 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -76,7 +76,7 @@ pub fn process(device: &mut device::Device, channel: usize) { device::events::create_event( device, device::events::EVENT_TYPE_PAK, - device.cpu.clock_rate, // 1 second + device.cpu.clock_rate / 2, // 500ms ) } } diff --git a/src/savestates.rs b/src/savestates.rs index 3a23a2a..41a91cf 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -97,7 +97,7 @@ pub fn create_savestate(device: &device::Device) { "Savestate created in slot {}", device.ui.storage.save_state_slot ), - ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, + ui::video::MESSAGE_LENGTH_MESSAGE_VERY_SHORT, ); } else { ui::video::onscreen_message( @@ -237,7 +237,7 @@ pub fn load_savestate(device: &mut device::Device) { "Savestate loaded from slot {}", device.ui.storage.save_state_slot ), - ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, + ui::video::MESSAGE_LENGTH_MESSAGE_VERY_SHORT, ); } else { ui::video::onscreen_message( diff --git a/src/ui/video.rs b/src/ui/video.rs index e5838ab..165ec6b 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -219,7 +219,7 @@ pub fn check_callback(device: &mut device::Device) -> (bool, bool) { if device.ui.storage.save_state_slot != callback.save_state_slot { onscreen_message( &format!("Switching savestate slot to {}", callback.save_state_slot), - ui::video::MESSAGE_LENGTH_MESSAGE_SHORT, + ui::video::MESSAGE_LENGTH_MESSAGE_VERY_SHORT, ); device.ui.storage.save_state_slot = callback.save_state_slot; device From 8341ef5731487ee53406c82a6c9e309c22f044ae Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 14 May 2026 16:30:36 +0200 Subject: [PATCH 0879/1117] Add Discord Rich Presence (#888) * add rich presence * more * more * more * more * more * more * more * more * more * update translations * more --- Cargo.lock | 27 ++- Cargo.toml | 1 + build.rs | 4 +- data/translations/de/LC_MESSAGES/gopher64.po | 176 +++++++++-------- data/translations/es/LC_MESSAGES/gopher64.po | 182 ++++++++--------- data/translations/fr/LC_MESSAGES/gopher64.po | 177 +++++++++-------- data/translations/gopher64.pot | 163 ++++++++-------- data/translations/ja/LC_MESSAGES/gopher64.po | 182 ++++++++--------- data/translations/nl/LC_MESSAGES/gopher64.po | 176 +++++++++-------- .../pt_BR/LC_MESSAGES/gopher64.po | 183 +++++++++--------- data/translations/ru/LC_MESSAGES/gopher64.po | 176 +++++++++-------- retroachievements/retroachievements.c | 25 +++ retroachievements/retroachievements.h | 3 + src/device/cart.rs | 4 +- src/device/cart/rom.rs | 6 +- src/main.rs | 20 +- src/retroachievements.rs | 110 ++++++++++- src/ui/gui.rs | 7 + src/ui/gui/appwindow.slint | 7 +- src/ui/gui/retroachievements_page.slint | 23 ++- src/ui/netplay.rs | 20 +- src/ui/retroachievements.rs | 72 +++---- src/ui/usb.rs | 17 +- 23 files changed, 1014 insertions(+), 747 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0eb2335..4c8c6ba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1389,6 +1389,21 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "discord-rich-presence" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90c55d69cab17c19677ce3a5f8face993a9e6eaf847fecac3547f3a3ff4a2494" +dependencies = [ + "log", + "serde", + "serde_derive", + "serde_json", + "serde_repr", + "thiserror 2.0.18", + "uuid 0.8.2", +] + [[package]] name = "dispatch" version = "0.2.0" @@ -2121,6 +2136,7 @@ dependencies = [ "chrono", "clap", "dirs", + "discord-rich-presence", "encoding_rs", "fatfs", "futures", @@ -6323,6 +6339,15 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom 0.2.17", +] + [[package]] name = "uuid" version = "1.23.1" @@ -7505,7 +7530,7 @@ dependencies = [ "serde_repr", "tracing", "uds_windows", - "uuid", + "uuid 1.23.1", "windows-sys 0.61.2", "winnow 1.0.2", "zbus_macros", diff --git a/Cargo.toml b/Cargo.toml index 9bb2e2a..cd799b0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,6 +36,7 @@ semver = "1.0" postcard = { version = "1.1", features = ["use-std"] } clap = { version = "4.5", features = ["derive"] } reqwest = { version = "0.13", features = ["json", "query"] } +discord-rich-presence = "1.1" [build-dependencies] winresource = "0.1" diff --git a/build.rs b/build.rs index 34ed1b6..5f53053 100644 --- a/build.rs +++ b/build.rs @@ -179,7 +179,9 @@ fn main() { .allowlist_function("ra_login_token_user") .allowlist_function("ra_state_size") .allowlist_function("ra_save_state") - .allowlist_function("ra_load_state"); + .allowlist_function("ra_load_state") + .allowlist_function("ra_get_game_info") + .allowlist_function("ra_get_rich_presence"); if cfg!(feature = "gui") { retroachievements_builder = retroachievements_builder diff --git a/data/translations/de/LC_MESSAGES/gopher64.po b/data/translations/de/LC_MESSAGES/gopher64.po index b8a712c..9330d32 100644 --- a/data/translations/de/LC_MESSAGES/gopher64.po +++ b/data/translations/de/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-10 18:36+0000\n" +"POT-Creation-Date: 2026-05-14 13:42+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: German\n" @@ -107,31 +107,6 @@ msgctxt "ControllerConfig" msgid "Controller" msgstr "Controller" -#: src/ui/gui/input_profile.slint:10 -msgctxt "InputProfileDialog" -msgid "Create/Modify Input Profile" -msgstr "Eingabeprofil erstellen/bearbeiten" - -#: src/ui/gui/input_profile.slint:18 -msgctxt "InputProfileDialog" -msgid "Enter profile name to create or modify" -msgstr "Profilname zum Erstellen oder Bearbeiten eingeben" - -#: src/ui/gui/input_profile.slint:29 -msgctxt "InputProfileDialog" -msgid "Deadzone Percentage" -msgstr "Deadzone Größe in Prozent" - -#: src/ui/gui/input_profile.slint:51 -msgctxt "InputProfileDialog" -msgid "Use DirectInput" -msgstr "DirectInput verwenden" - -#: src/ui/gui/input_profile.slint:61 -msgctxt "InputProfileDialog" -msgid "Start Profile Creation Wizard" -msgstr "Assistent zur Profilerstellung starten" - #: src/ui/gui/localgame_page.slint:18 msgctxt "LocalGame" msgid "Local Game" @@ -242,42 +217,42 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "Was möchten Sie sagen?" -#: src/ui/gui/appwindow.slint:94 +#: src/ui/gui/appwindow.slint:95 msgctxt "Menu" msgid "Local Game" msgstr "Lokales Spiel" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:96 msgctxt "Menu" msgid "Controller Config" msgstr "Controller-Konfiguration" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:97 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:98 msgctxt "Menu" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:99 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:100 msgctxt "Menu" msgid "Settings" msgstr "Einstellungen" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:101 msgctxt "Menu" msgid "About" msgstr "Über" -#: src/ui/gui/appwindow.slint:194 +#: src/ui/gui/appwindow.slint:195 msgctxt "ErrorDialog" msgid "Error" msgstr "Fehler" @@ -384,8 +359,7 @@ msgstr "Auf eine Sitzung klicken um diese auszuwählen" #: src/ui/gui/netplay_join.slint:67 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." -msgstr "" -"Keine Sitzungen verfügbar. Bitte aktualisieren, um erneut zu prüfen." +msgstr "Keine Sitzungen verfügbar. Bitte aktualisieren, um erneut zu prüfen." #: src/ui/gui/netplay_join.slint:73 msgctxt "NetplayJoin" @@ -432,6 +406,66 @@ msgctxt "NetplayJoin" msgid "Join Session" msgstr "Sitzung beitreten" +#: src/ui/gui/retroachievements_page.slint:19 +msgctxt "RAData" +msgid "Not currently logged in" +msgstr "Derzeit nicht angemeldet" + +#: src/ui/gui/retroachievements_page.slint:27 +msgctxt "RetroAchievements" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/retroachievements_page.slint:34 +msgctxt "RetroAchievements" +msgid "Enabled" +msgstr "Aktiviert" + +#: src/ui/gui/retroachievements_page.slint:52 +msgctxt "RetroAchievements" +msgid "Hardcore mode" +msgstr "Hardcore-Modus" + +#: src/ui/gui/retroachievements_page.slint:64 +msgctxt "RetroAchievements" +msgid "Challenge Indicators" +msgstr "Challenge Tipps" + +#: src/ui/gui/retroachievements_page.slint:76 +msgctxt "RetroAchievements" +msgid "Leaderboard Trackers" +msgstr "Bestenlisten-Tracker" + +#: src/ui/gui/retroachievements_page.slint:88 +msgctxt "RetroAchievements" +msgid "Discord Rich Presence" +msgstr "Rich Presence für Discord" + +#: src/ui/gui/retroachievements_page.slint:105 +msgctxt "RetroAchievements" +msgid "View Profile" +msgstr "Profil anzeigen" + +#: src/ui/gui/retroachievements_page.slint:115 +msgctxt "RetroAchievements" +msgid "Username" +msgstr "Benutzername" + +#: src/ui/gui/retroachievements_page.slint:125 +msgctxt "RetroAchievements" +msgid "Password" +msgstr "Passwort" + +#: src/ui/gui/retroachievements_page.slint:134 +msgctxt "RetroAchievements" +msgid "Login" +msgstr "Anmelden" + +#: src/ui/gui/retroachievements_page.slint:150 +msgctxt "RetroAchievements" +msgid "View Supported Games" +msgstr "Unterstützte Spiele anzeigen" + #: src/ui/gui/netplay_wait.slint:14 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" @@ -487,57 +521,27 @@ msgctxt "NetplayWait" msgid "Start Game" msgstr "Spiel starten" -#: src/ui/gui/retroachievements_page.slint:18 -msgctxt "RAData" -msgid "Not currently logged in" -msgstr "Derzeit nicht angemeldet" +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "Eingabeprofil erstellen/bearbeiten" -#: src/ui/gui/retroachievements_page.slint:26 -msgctxt "RetroAchievements" -msgid "RetroAchievements" -msgstr "RetroAchievements" +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "Profilname zum Erstellen oder Bearbeiten eingeben" -#: src/ui/gui/retroachievements_page.slint:33 -msgctxt "RetroAchievements" -msgid "Enabled" -msgstr "Aktiviert" +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "Deadzone Größe in Prozent" -#: src/ui/gui/retroachievements_page.slint:51 -msgctxt "RetroAchievements" -msgid "Hardcore mode" -msgstr "Hardcore-Modus" +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "DirectInput verwenden" -#: src/ui/gui/retroachievements_page.slint:63 -msgctxt "RetroAchievements" -msgid "Challenge Indicators" -msgstr "Challenge Tipps" - -#: src/ui/gui/retroachievements_page.slint:75 -msgctxt "RetroAchievements" -msgid "Leaderboard Trackers" -msgstr "Bestenlisten-Tracker" - -#: src/ui/gui/retroachievements_page.slint:92 -msgctxt "RetroAchievements" -msgid "View Profile" -msgstr "Profil anzeigen" - -#: src/ui/gui/retroachievements_page.slint:102 -msgctxt "RetroAchievements" -msgid "Username" -msgstr "Benutzername" - -#: src/ui/gui/retroachievements_page.slint:112 -msgctxt "RetroAchievements" -msgid "Password" -msgstr "Passwort" - -#: src/ui/gui/retroachievements_page.slint:121 -msgctxt "RetroAchievements" -msgid "Login" -msgstr "Anmelden" - -#: src/ui/gui/retroachievements_page.slint:137 -msgctxt "RetroAchievements" -msgid "View Supported Games" -msgstr "Unterstützte Spiele anzeigen" +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "Assistent zur Profilerstellung starten" diff --git a/data/translations/es/LC_MESSAGES/gopher64.po b/data/translations/es/LC_MESSAGES/gopher64.po index f8bb63f..5ded824 100644 --- a/data/translations/es/LC_MESSAGES/gopher64.po +++ b/data/translations/es/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-10 13:12+0000\n" +"POT-Creation-Date: 2026-05-14 13:42+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: Gemini\n" "Language-Team: Spanish (Spain)\n" @@ -107,31 +107,6 @@ msgctxt "ControllerConfig" msgid "Controller" msgstr "Mando" -#: src/ui/gui/input_profile.slint:10 -msgctxt "InputProfileDialog" -msgid "Create/Modify Input Profile" -msgstr "Crear/Modificar perfil de entrada" - -#: src/ui/gui/input_profile.slint:18 -msgctxt "InputProfileDialog" -msgid "Enter profile name to create or modify" -msgstr "Introduce el nombre del perfil para crear o modificar" - -#: src/ui/gui/input_profile.slint:29 -msgctxt "InputProfileDialog" -msgid "Deadzone Percentage" -msgstr "Porcentaje de zona muerta" - -#: src/ui/gui/input_profile.slint:51 -msgctxt "InputProfileDialog" -msgid "Use DirectInput" -msgstr "Usar DirectInput" - -#: src/ui/gui/input_profile.slint:61 -msgctxt "InputProfileDialog" -msgid "Start Profile Creation Wizard" -msgstr "Iniciar asistente de creación de perfil" - #: src/ui/gui/localgame_page.slint:18 msgctxt "LocalGame" msgid "Local Game" @@ -242,42 +217,42 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "¿Qué te gustaría decir?" -#: src/ui/gui/appwindow.slint:94 +#: src/ui/gui/appwindow.slint:95 msgctxt "Menu" msgid "Local Game" msgstr "Juego local" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:96 msgctxt "Menu" msgid "Controller Config" msgstr "Config. del mando" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:97 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:98 msgctxt "Menu" msgid "Cheats" msgstr "Trucos" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:99 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:100 msgctxt "Menu" msgid "Settings" msgstr "Ajustes" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:101 msgctxt "Menu" msgid "About" msgstr "Acerca de" -#: src/ui/gui/appwindow.slint:194 +#: src/ui/gui/appwindow.slint:195 msgctxt "ErrorDialog" msgid "Error" msgstr "Error" @@ -332,7 +307,8 @@ msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." msgstr "" -"Este juego tiene trucos activados. Los trucos se sincronizarán con los otros jugadores." +"Este juego tiene trucos activados. Los trucos se sincronizarán con los otros " +"jugadores." #: src/ui/gui/netplay_create.slint:103 msgctxt "NetplayCreate" @@ -381,10 +357,8 @@ msgstr "Pulsa una sesión para seleccionarla" #: src/ui/gui/netplay_join.slint:67 msgctxt "NetplayJoin" -msgid "" -"No sessions available. Please refresh to check again." -msgstr "" -"No hay sesiones disponibles. Actualiza para comprobar de nuevo." +msgid "No sessions available. Please refresh to check again." +msgstr "No hay sesiones disponibles. Actualiza para comprobar de nuevo." #: src/ui/gui/netplay_join.slint:73 msgctxt "NetplayJoin" @@ -431,6 +405,66 @@ msgctxt "NetplayJoin" msgid "Join Session" msgstr "Unirse a la sesión" +#: src/ui/gui/retroachievements_page.slint:19 +msgctxt "RAData" +msgid "Not currently logged in" +msgstr "Sesión no iniciada" + +#: src/ui/gui/retroachievements_page.slint:27 +msgctxt "RetroAchievements" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/retroachievements_page.slint:34 +msgctxt "RetroAchievements" +msgid "Enabled" +msgstr "Activado" + +#: src/ui/gui/retroachievements_page.slint:52 +msgctxt "RetroAchievements" +msgid "Hardcore mode" +msgstr "Modo Hardcore" + +#: src/ui/gui/retroachievements_page.slint:64 +msgctxt "RetroAchievements" +msgid "Challenge Indicators" +msgstr "Indicadores de desafío" + +#: src/ui/gui/retroachievements_page.slint:76 +msgctxt "RetroAchievements" +msgid "Leaderboard Trackers" +msgstr "Indicadores de tabla de clasificación" + +#: src/ui/gui/retroachievements_page.slint:88 +msgctxt "RetroAchievements" +msgid "Discord Rich Presence" +msgstr "Rich Presence en Discord" + +#: src/ui/gui/retroachievements_page.slint:105 +msgctxt "RetroAchievements" +msgid "View Profile" +msgstr "Ver perfil" + +#: src/ui/gui/retroachievements_page.slint:115 +msgctxt "RetroAchievements" +msgid "Username" +msgstr "Usuario" + +#: src/ui/gui/retroachievements_page.slint:125 +msgctxt "RetroAchievements" +msgid "Password" +msgstr "Contraseña" + +#: src/ui/gui/retroachievements_page.slint:134 +msgctxt "RetroAchievements" +msgid "Login" +msgstr "Entrar" + +#: src/ui/gui/retroachievements_page.slint:150 +msgctxt "RetroAchievements" +msgid "View Supported Games" +msgstr "Ver juegos compatibles" + #: src/ui/gui/netplay_wait.slint:14 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" @@ -486,57 +520,27 @@ msgctxt "NetplayWait" msgid "Start Game" msgstr "Iniciar juego" -#: src/ui/gui/retroachievements_page.slint:18 -msgctxt "RAData" -msgid "Not currently logged in" -msgstr "Sesión no iniciada" +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "Crear/Modificar perfil de entrada" -#: src/ui/gui/retroachievements_page.slint:26 -msgctxt "RetroAchievements" -msgid "RetroAchievements" -msgstr "RetroAchievements" +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "Introduce el nombre del perfil para crear o modificar" -#: src/ui/gui/retroachievements_page.slint:33 -msgctxt "RetroAchievements" -msgid "Enabled" -msgstr "Activado" +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "Porcentaje de zona muerta" -#: src/ui/gui/retroachievements_page.slint:51 -msgctxt "RetroAchievements" -msgid "Hardcore mode" -msgstr "Modo Hardcore" +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "Usar DirectInput" -#: src/ui/gui/retroachievements_page.slint:63 -msgctxt "RetroAchievements" -msgid "Challenge Indicators" -msgstr "Indicadores de desafío" - -#: src/ui/gui/retroachievements_page.slint:75 -msgctxt "RetroAchievements" -msgid "Leaderboard Trackers" -msgstr "Indicadores de tabla de clasificación" - -#: src/ui/gui/retroachievements_page.slint:92 -msgctxt "RetroAchievements" -msgid "View Profile" -msgstr "Ver perfil" - -#: src/ui/gui/retroachievements_page.slint:102 -msgctxt "RetroAchievements" -msgid "Username" -msgstr "Usuario" - -#: src/ui/gui/retroachievements_page.slint:112 -msgctxt "RetroAchievements" -msgid "Password" -msgstr "Contraseña" - -#: src/ui/gui/retroachievements_page.slint:121 -msgctxt "RetroAchievements" -msgid "Login" -msgstr "Entrar" - -#: src/ui/gui/retroachievements_page.slint:137 -msgctxt "RetroAchievements" -msgid "View Supported Games" -msgstr "Ver juegos compatibles" +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "Iniciar asistente de creación de perfil" diff --git a/data/translations/fr/LC_MESSAGES/gopher64.po b/data/translations/fr/LC_MESSAGES/gopher64.po index fd9f310..7714cbe 100644 --- a/data/translations/fr/LC_MESSAGES/gopher64.po +++ b/data/translations/fr/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-10 18:36+0000\n" +"POT-Creation-Date: 2026-05-14 13:42+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: French (France)\n" @@ -107,31 +107,6 @@ msgctxt "ControllerConfig" msgid "Controller" msgstr "Manette" -#: src/ui/gui/input_profile.slint:10 -msgctxt "InputProfileDialog" -msgid "Create/Modify Input Profile" -msgstr "Créer / modifier le profil d'entrée" - -#: src/ui/gui/input_profile.slint:18 -msgctxt "InputProfileDialog" -msgid "Enter profile name to create or modify" -msgstr "Saisir le nom du profil à créer ou à modifier" - -#: src/ui/gui/input_profile.slint:29 -msgctxt "InputProfileDialog" -msgid "Deadzone Percentage" -msgstr "Pourcentage de zone morte" - -#: src/ui/gui/input_profile.slint:51 -msgctxt "InputProfileDialog" -msgid "Use DirectInput" -msgstr "Utiliser DirectInput" - -#: src/ui/gui/input_profile.slint:61 -msgctxt "InputProfileDialog" -msgid "Start Profile Creation Wizard" -msgstr "Lancer l'assistant de création de profil" - #: src/ui/gui/localgame_page.slint:18 msgctxt "LocalGame" msgid "Local Game" @@ -242,42 +217,42 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "Que souhaitez-vous dire ?" -#: src/ui/gui/appwindow.slint:94 +#: src/ui/gui/appwindow.slint:95 msgctxt "Menu" msgid "Local Game" msgstr "Jeu local" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:96 msgctxt "Menu" msgid "Controller Config" msgstr "Configuration manette" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:97 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:98 msgctxt "Menu" msgid "Cheats" msgstr "Triche" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:99 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:100 msgctxt "Menu" msgid "Settings" msgstr "Paramètres" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:101 msgctxt "Menu" msgid "About" msgstr "À propos" -#: src/ui/gui/appwindow.slint:194 +#: src/ui/gui/appwindow.slint:195 msgctxt "ErrorDialog" msgid "Error" msgstr "Erreur" @@ -349,8 +324,8 @@ msgstr "Création du serveur" msgctxt "DispatcherDialog" msgid "Creating server, please wait...This may take about 30 seconds." msgstr "" -"Création du serveur, veuillez patienter… Cela peut prendre environ " -"30 secondes." +"Création du serveur, veuillez patienter… Cela peut prendre environ 30 " +"secondes." #: src/ui/gui/netplay_join.slint:5 msgctxt "NetplayJoin" @@ -433,6 +408,66 @@ msgctxt "NetplayJoin" msgid "Join Session" msgstr "Rejoindre la session" +#: src/ui/gui/retroachievements_page.slint:19 +msgctxt "RAData" +msgid "Not currently logged in" +msgstr "Non connecté" + +#: src/ui/gui/retroachievements_page.slint:27 +msgctxt "RetroAchievements" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/retroachievements_page.slint:34 +msgctxt "RetroAchievements" +msgid "Enabled" +msgstr "Activé" + +#: src/ui/gui/retroachievements_page.slint:52 +msgctxt "RetroAchievements" +msgid "Hardcore mode" +msgstr "Mode hardcore" + +#: src/ui/gui/retroachievements_page.slint:64 +msgctxt "RetroAchievements" +msgid "Challenge Indicators" +msgstr "Indicateurs de défi" + +#: src/ui/gui/retroachievements_page.slint:76 +msgctxt "RetroAchievements" +msgid "Leaderboard Trackers" +msgstr "Suivi des classements" + +#: src/ui/gui/retroachievements_page.slint:88 +msgctxt "RetroAchievements" +msgid "Discord Rich Presence" +msgstr "Rich Presence Discord" + +#: src/ui/gui/retroachievements_page.slint:105 +msgctxt "RetroAchievements" +msgid "View Profile" +msgstr "Voir le profil" + +#: src/ui/gui/retroachievements_page.slint:115 +msgctxt "RetroAchievements" +msgid "Username" +msgstr "Nom d'utilisateur" + +#: src/ui/gui/retroachievements_page.slint:125 +msgctxt "RetroAchievements" +msgid "Password" +msgstr "Mot de passe" + +#: src/ui/gui/retroachievements_page.slint:134 +msgctxt "RetroAchievements" +msgid "Login" +msgstr "Connexion" + +#: src/ui/gui/retroachievements_page.slint:150 +msgctxt "RetroAchievements" +msgid "View Supported Games" +msgstr "Voir les jeux pris en charge" + #: src/ui/gui/netplay_wait.slint:14 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" @@ -488,57 +523,27 @@ msgctxt "NetplayWait" msgid "Start Game" msgstr "Lancer la partie" -#: src/ui/gui/retroachievements_page.slint:18 -msgctxt "RAData" -msgid "Not currently logged in" -msgstr "Non connecté" +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "Créer / modifier le profil d'entrée" -#: src/ui/gui/retroachievements_page.slint:26 -msgctxt "RetroAchievements" -msgid "RetroAchievements" -msgstr "RetroAchievements" +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "Saisir le nom du profil à créer ou à modifier" -#: src/ui/gui/retroachievements_page.slint:33 -msgctxt "RetroAchievements" -msgid "Enabled" -msgstr "Activé" +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "Pourcentage de zone morte" -#: src/ui/gui/retroachievements_page.slint:51 -msgctxt "RetroAchievements" -msgid "Hardcore mode" -msgstr "Mode hardcore" +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "Utiliser DirectInput" -#: src/ui/gui/retroachievements_page.slint:63 -msgctxt "RetroAchievements" -msgid "Challenge Indicators" -msgstr "Indicateurs de défi" - -#: src/ui/gui/retroachievements_page.slint:75 -msgctxt "RetroAchievements" -msgid "Leaderboard Trackers" -msgstr "Suivi des classements" - -#: src/ui/gui/retroachievements_page.slint:92 -msgctxt "RetroAchievements" -msgid "View Profile" -msgstr "Voir le profil" - -#: src/ui/gui/retroachievements_page.slint:102 -msgctxt "RetroAchievements" -msgid "Username" -msgstr "Nom d'utilisateur" - -#: src/ui/gui/retroachievements_page.slint:112 -msgctxt "RetroAchievements" -msgid "Password" -msgstr "Mot de passe" - -#: src/ui/gui/retroachievements_page.slint:121 -msgctxt "RetroAchievements" -msgid "Login" -msgstr "Connexion" - -#: src/ui/gui/retroachievements_page.slint:137 -msgctxt "RetroAchievements" -msgid "View Supported Games" -msgstr "Voir les jeux pris en charge" +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "Lancer l'assistant de création de profil" diff --git a/data/translations/gopher64.pot b/data/translations/gopher64.pot index fb72415..ffb8520 100644 --- a/data/translations/gopher64.pot +++ b/data/translations/gopher64.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-05-10 18:36+0000\n" +"POT-Creation-Date: 2026-05-14 13:42+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -107,31 +107,6 @@ msgctxt "ControllerConfig" msgid "Controller" msgstr "" -#: src/ui/gui/input_profile.slint:10 -msgctxt "InputProfileDialog" -msgid "Create/Modify Input Profile" -msgstr "" - -#: src/ui/gui/input_profile.slint:18 -msgctxt "InputProfileDialog" -msgid "Enter profile name to create or modify" -msgstr "" - -#: src/ui/gui/input_profile.slint:29 -msgctxt "InputProfileDialog" -msgid "Deadzone Percentage" -msgstr "" - -#: src/ui/gui/input_profile.slint:51 -msgctxt "InputProfileDialog" -msgid "Use DirectInput" -msgstr "" - -#: src/ui/gui/input_profile.slint:61 -msgctxt "InputProfileDialog" -msgid "Start Profile Creation Wizard" -msgstr "" - #: src/ui/gui/localgame_page.slint:18 msgctxt "LocalGame" msgid "Local Game" @@ -242,42 +217,42 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "" -#: src/ui/gui/appwindow.slint:94 +#: src/ui/gui/appwindow.slint:95 msgctxt "Menu" msgid "Local Game" msgstr "" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:96 msgctxt "Menu" msgid "Controller Config" msgstr "" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:97 msgctxt "Menu" msgid "Netplay" msgstr "" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:98 msgctxt "Menu" msgid "Cheats" msgstr "" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:99 msgctxt "Menu" msgid "RetroAchievements" msgstr "" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:100 msgctxt "Menu" msgid "Settings" msgstr "" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:101 msgctxt "Menu" msgid "About" msgstr "" -#: src/ui/gui/appwindow.slint:194 +#: src/ui/gui/appwindow.slint:195 msgctxt "ErrorDialog" msgid "Error" msgstr "" @@ -428,6 +403,66 @@ msgctxt "NetplayJoin" msgid "Join Session" msgstr "" +#: src/ui/gui/retroachievements_page.slint:19 +msgctxt "RAData" +msgid "Not currently logged in" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:27 +msgctxt "RetroAchievements" +msgid "RetroAchievements" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:34 +msgctxt "RetroAchievements" +msgid "Enabled" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:52 +msgctxt "RetroAchievements" +msgid "Hardcore mode" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:64 +msgctxt "RetroAchievements" +msgid "Challenge Indicators" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:76 +msgctxt "RetroAchievements" +msgid "Leaderboard Trackers" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:88 +msgctxt "RetroAchievements" +msgid "Discord Rich Presence" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:105 +msgctxt "RetroAchievements" +msgid "View Profile" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:115 +msgctxt "RetroAchievements" +msgid "Username" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:125 +msgctxt "RetroAchievements" +msgid "Password" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:134 +msgctxt "RetroAchievements" +msgid "Login" +msgstr "" + +#: src/ui/gui/retroachievements_page.slint:150 +msgctxt "RetroAchievements" +msgid "View Supported Games" +msgstr "" + #: src/ui/gui/netplay_wait.slint:14 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" @@ -483,57 +518,27 @@ msgctxt "NetplayWait" msgid "Start Game" msgstr "" -#: src/ui/gui/retroachievements_page.slint:18 -msgctxt "RAData" -msgid "Not currently logged in" +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" msgstr "" -#: src/ui/gui/retroachievements_page.slint:26 -msgctxt "RetroAchievements" -msgid "RetroAchievements" +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" msgstr "" -#: src/ui/gui/retroachievements_page.slint:33 -msgctxt "RetroAchievements" -msgid "Enabled" +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" msgstr "" -#: src/ui/gui/retroachievements_page.slint:51 -msgctxt "RetroAchievements" -msgid "Hardcore mode" +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" msgstr "" -#: src/ui/gui/retroachievements_page.slint:63 -msgctxt "RetroAchievements" -msgid "Challenge Indicators" -msgstr "" - -#: src/ui/gui/retroachievements_page.slint:75 -msgctxt "RetroAchievements" -msgid "Leaderboard Trackers" -msgstr "" - -#: src/ui/gui/retroachievements_page.slint:92 -msgctxt "RetroAchievements" -msgid "View Profile" -msgstr "" - -#: src/ui/gui/retroachievements_page.slint:102 -msgctxt "RetroAchievements" -msgid "Username" -msgstr "" - -#: src/ui/gui/retroachievements_page.slint:112 -msgctxt "RetroAchievements" -msgid "Password" -msgstr "" - -#: src/ui/gui/retroachievements_page.slint:121 -msgctxt "RetroAchievements" -msgid "Login" -msgstr "" - -#: src/ui/gui/retroachievements_page.slint:137 -msgctxt "RetroAchievements" -msgid "View Supported Games" +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" msgstr "" diff --git a/data/translations/ja/LC_MESSAGES/gopher64.po b/data/translations/ja/LC_MESSAGES/gopher64.po index 08e2744..a86a1b2 100644 --- a/data/translations/ja/LC_MESSAGES/gopher64.po +++ b/data/translations/ja/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-10 18:36+0000\n" +"POT-Creation-Date: 2026-05-14 13:42+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Japanese\n" @@ -107,31 +107,6 @@ msgctxt "ControllerConfig" msgid "Controller" msgstr "コントローラー" -#: src/ui/gui/input_profile.slint:10 -msgctxt "InputProfileDialog" -msgid "Create/Modify Input Profile" -msgstr "入力プロファイルの作成/変更" - -#: src/ui/gui/input_profile.slint:18 -msgctxt "InputProfileDialog" -msgid "Enter profile name to create or modify" -msgstr "作成または変更するプロファイル名を入力" - -#: src/ui/gui/input_profile.slint:29 -msgctxt "InputProfileDialog" -msgid "Deadzone Percentage" -msgstr "デッドゾーン(%)" - -#: src/ui/gui/input_profile.slint:51 -msgctxt "InputProfileDialog" -msgid "Use DirectInput" -msgstr "DirectInputを使用" - -#: src/ui/gui/input_profile.slint:61 -msgctxt "InputProfileDialog" -msgid "Start Profile Creation Wizard" -msgstr "プロファイル作成ウィザードを開始" - #: src/ui/gui/localgame_page.slint:18 msgctxt "LocalGame" msgid "Local Game" @@ -242,42 +217,42 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "何と言いますか?" -#: src/ui/gui/appwindow.slint:94 +#: src/ui/gui/appwindow.slint:95 msgctxt "Menu" msgid "Local Game" msgstr "ローカルゲーム" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:96 msgctxt "Menu" msgid "Controller Config" msgstr "コントローラー設定" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:97 msgctxt "Menu" msgid "Netplay" msgstr "ネットプレイ" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:98 msgctxt "Menu" msgid "Cheats" msgstr "チート" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:99 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:100 msgctxt "Menu" msgid "Settings" msgstr "設定" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:101 msgctxt "Menu" msgid "About" msgstr "バージョン情報" -#: src/ui/gui/appwindow.slint:194 +#: src/ui/gui/appwindow.slint:195 msgctxt "ErrorDialog" msgid "Error" msgstr "エラー" @@ -331,8 +306,7 @@ msgstr "ROMを選択" msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." -msgstr "" -"このゲームではチートが有効です。チートは他のプレイヤーと同期されます。" +msgstr "このゲームではチートが有効です。チートは他のプレイヤーと同期されます。" #: src/ui/gui/netplay_create.slint:103 msgctxt "NetplayCreate" @@ -348,7 +322,8 @@ msgstr "サーバーを作成中" msgctxt "DispatcherDialog" msgid "Creating server, please wait...This may take about 30 seconds." msgstr "" -"サーバーを作成しています。しばらくお待ちください… 最大約30秒かかることがあります。" +"サーバーを作成しています。しばらくお待ちください… 最大約30秒かかることがあり" +"ます。" #: src/ui/gui/netplay_join.slint:5 msgctxt "NetplayJoin" @@ -383,8 +358,7 @@ msgstr "下の一覧からセッションをクリックして選択" #: src/ui/gui/netplay_join.slint:67 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." -msgstr "" -"利用できるセッションがありません。更新して再度確認してください。" +msgstr "利用できるセッションがありません。更新して再度確認してください。" #: src/ui/gui/netplay_join.slint:73 msgctxt "NetplayJoin" @@ -431,6 +405,66 @@ msgctxt "NetplayJoin" msgid "Join Session" msgstr "セッションに参加" +#: src/ui/gui/retroachievements_page.slint:19 +msgctxt "RAData" +msgid "Not currently logged in" +msgstr "ログインしていません" + +#: src/ui/gui/retroachievements_page.slint:27 +msgctxt "RetroAchievements" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/retroachievements_page.slint:34 +msgctxt "RetroAchievements" +msgid "Enabled" +msgstr "有効" + +#: src/ui/gui/retroachievements_page.slint:52 +msgctxt "RetroAchievements" +msgid "Hardcore mode" +msgstr "ハードコアモード" + +#: src/ui/gui/retroachievements_page.slint:64 +msgctxt "RetroAchievements" +msgid "Challenge Indicators" +msgstr "チャレンジ表示" + +#: src/ui/gui/retroachievements_page.slint:76 +msgctxt "RetroAchievements" +msgid "Leaderboard Trackers" +msgstr "リーダーボード追跡" + +#: src/ui/gui/retroachievements_page.slint:88 +msgctxt "RetroAchievements" +msgid "Discord Rich Presence" +msgstr "Discord のリッチプレゼンス" + +#: src/ui/gui/retroachievements_page.slint:105 +msgctxt "RetroAchievements" +msgid "View Profile" +msgstr "プロフィールを表示" + +#: src/ui/gui/retroachievements_page.slint:115 +msgctxt "RetroAchievements" +msgid "Username" +msgstr "ユーザー名" + +#: src/ui/gui/retroachievements_page.slint:125 +msgctxt "RetroAchievements" +msgid "Password" +msgstr "パスワード" + +#: src/ui/gui/retroachievements_page.slint:134 +msgctxt "RetroAchievements" +msgid "Login" +msgstr "ログイン" + +#: src/ui/gui/retroachievements_page.slint:150 +msgctxt "RetroAchievements" +msgid "View Supported Games" +msgstr "対応ゲームを表示" + #: src/ui/gui/netplay_wait.slint:14 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" @@ -486,57 +520,27 @@ msgctxt "NetplayWait" msgid "Start Game" msgstr "ゲーム開始" -#: src/ui/gui/retroachievements_page.slint:18 -msgctxt "RAData" -msgid "Not currently logged in" -msgstr "ログインしていません" +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "入力プロファイルの作成/変更" -#: src/ui/gui/retroachievements_page.slint:26 -msgctxt "RetroAchievements" -msgid "RetroAchievements" -msgstr "RetroAchievements" +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "作成または変更するプロファイル名を入力" -#: src/ui/gui/retroachievements_page.slint:33 -msgctxt "RetroAchievements" -msgid "Enabled" -msgstr "有効" +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "デッドゾーン(%)" -#: src/ui/gui/retroachievements_page.slint:51 -msgctxt "RetroAchievements" -msgid "Hardcore mode" -msgstr "ハードコアモード" +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "DirectInputを使用" -#: src/ui/gui/retroachievements_page.slint:63 -msgctxt "RetroAchievements" -msgid "Challenge Indicators" -msgstr "チャレンジ表示" - -#: src/ui/gui/retroachievements_page.slint:75 -msgctxt "RetroAchievements" -msgid "Leaderboard Trackers" -msgstr "リーダーボード追跡" - -#: src/ui/gui/retroachievements_page.slint:92 -msgctxt "RetroAchievements" -msgid "View Profile" -msgstr "プロフィールを表示" - -#: src/ui/gui/retroachievements_page.slint:102 -msgctxt "RetroAchievements" -msgid "Username" -msgstr "ユーザー名" - -#: src/ui/gui/retroachievements_page.slint:112 -msgctxt "RetroAchievements" -msgid "Password" -msgstr "パスワード" - -#: src/ui/gui/retroachievements_page.slint:121 -msgctxt "RetroAchievements" -msgid "Login" -msgstr "ログイン" - -#: src/ui/gui/retroachievements_page.slint:137 -msgctxt "RetroAchievements" -msgid "View Supported Games" -msgstr "対応ゲームを表示" +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "プロファイル作成ウィザードを開始" diff --git a/data/translations/nl/LC_MESSAGES/gopher64.po b/data/translations/nl/LC_MESSAGES/gopher64.po index 4f7c707..d0d654b 100644 --- a/data/translations/nl/LC_MESSAGES/gopher64.po +++ b/data/translations/nl/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-10 18:36+0000\n" +"POT-Creation-Date: 2026-05-14 13:42+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Dutch (Netherlands)\n" @@ -107,31 +107,6 @@ msgctxt "ControllerConfig" msgid "Controller" msgstr "Controller" -#: src/ui/gui/input_profile.slint:10 -msgctxt "InputProfileDialog" -msgid "Create/Modify Input Profile" -msgstr "Invoerprofiel maken/wijzigen" - -#: src/ui/gui/input_profile.slint:18 -msgctxt "InputProfileDialog" -msgid "Enter profile name to create or modify" -msgstr "Profielnaam invoeren om aan te maken of te wijzigen" - -#: src/ui/gui/input_profile.slint:29 -msgctxt "InputProfileDialog" -msgid "Deadzone Percentage" -msgstr "Dode-zonepercentage" - -#: src/ui/gui/input_profile.slint:51 -msgctxt "InputProfileDialog" -msgid "Use DirectInput" -msgstr "DirectInput gebruiken" - -#: src/ui/gui/input_profile.slint:61 -msgctxt "InputProfileDialog" -msgid "Start Profile Creation Wizard" -msgstr "Wizard voor profiel maken starten" - #: src/ui/gui/localgame_page.slint:18 msgctxt "LocalGame" msgid "Local Game" @@ -242,42 +217,42 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "Wat wil je zeggen?" -#: src/ui/gui/appwindow.slint:94 +#: src/ui/gui/appwindow.slint:95 msgctxt "Menu" msgid "Local Game" msgstr "Lokaal spel" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:96 msgctxt "Menu" msgid "Controller Config" msgstr "Controllerconfiguratie" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:97 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:98 msgctxt "Menu" msgid "Cheats" msgstr "Cheats" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:99 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:100 msgctxt "Menu" msgid "Settings" msgstr "Instellingen" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:101 msgctxt "Menu" msgid "About" msgstr "Over" -#: src/ui/gui/appwindow.slint:194 +#: src/ui/gui/appwindow.slint:195 msgctxt "ErrorDialog" msgid "Error" msgstr "Fout" @@ -384,8 +359,7 @@ msgstr "Klik hieronder op een sessie om die te selecteren" #: src/ui/gui/netplay_join.slint:67 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." -msgstr "" -"Geen sessies beschikbaar. Vernieuw om opnieuw te controleren." +msgstr "Geen sessies beschikbaar. Vernieuw om opnieuw te controleren." #: src/ui/gui/netplay_join.slint:73 msgctxt "NetplayJoin" @@ -432,6 +406,66 @@ msgctxt "NetplayJoin" msgid "Join Session" msgstr "Deelnemen aan sessie" +#: src/ui/gui/retroachievements_page.slint:19 +msgctxt "RAData" +msgid "Not currently logged in" +msgstr "Momenteel niet ingelogd" + +#: src/ui/gui/retroachievements_page.slint:27 +msgctxt "RetroAchievements" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/retroachievements_page.slint:34 +msgctxt "RetroAchievements" +msgid "Enabled" +msgstr "Ingeschakeld" + +#: src/ui/gui/retroachievements_page.slint:52 +msgctxt "RetroAchievements" +msgid "Hardcore mode" +msgstr "Hardcore-modus" + +#: src/ui/gui/retroachievements_page.slint:64 +msgctxt "RetroAchievements" +msgid "Challenge Indicators" +msgstr "Challenge-indicatoren" + +#: src/ui/gui/retroachievements_page.slint:76 +msgctxt "RetroAchievements" +msgid "Leaderboard Trackers" +msgstr "Leaderboard-trackers" + +#: src/ui/gui/retroachievements_page.slint:88 +msgctxt "RetroAchievements" +msgid "Discord Rich Presence" +msgstr "Discord Rich Presence" + +#: src/ui/gui/retroachievements_page.slint:105 +msgctxt "RetroAchievements" +msgid "View Profile" +msgstr "Profiel bekijken" + +#: src/ui/gui/retroachievements_page.slint:115 +msgctxt "RetroAchievements" +msgid "Username" +msgstr "Gebruikersnaam" + +#: src/ui/gui/retroachievements_page.slint:125 +msgctxt "RetroAchievements" +msgid "Password" +msgstr "Wachtwoord" + +#: src/ui/gui/retroachievements_page.slint:134 +msgctxt "RetroAchievements" +msgid "Login" +msgstr "Inloggen" + +#: src/ui/gui/retroachievements_page.slint:150 +msgctxt "RetroAchievements" +msgid "View Supported Games" +msgstr "Ondersteunde spellen bekijken" + #: src/ui/gui/netplay_wait.slint:14 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" @@ -487,57 +521,27 @@ msgctxt "NetplayWait" msgid "Start Game" msgstr "Spel starten" -#: src/ui/gui/retroachievements_page.slint:18 -msgctxt "RAData" -msgid "Not currently logged in" -msgstr "Momenteel niet ingelogd" +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "Invoerprofiel maken/wijzigen" -#: src/ui/gui/retroachievements_page.slint:26 -msgctxt "RetroAchievements" -msgid "RetroAchievements" -msgstr "RetroAchievements" +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "Profielnaam invoeren om aan te maken of te wijzigen" -#: src/ui/gui/retroachievements_page.slint:33 -msgctxt "RetroAchievements" -msgid "Enabled" -msgstr "Ingeschakeld" +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "Dode-zonepercentage" -#: src/ui/gui/retroachievements_page.slint:51 -msgctxt "RetroAchievements" -msgid "Hardcore mode" -msgstr "Hardcore-modus" +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "DirectInput gebruiken" -#: src/ui/gui/retroachievements_page.slint:63 -msgctxt "RetroAchievements" -msgid "Challenge Indicators" -msgstr "Challenge-indicatoren" - -#: src/ui/gui/retroachievements_page.slint:75 -msgctxt "RetroAchievements" -msgid "Leaderboard Trackers" -msgstr "Leaderboard-trackers" - -#: src/ui/gui/retroachievements_page.slint:92 -msgctxt "RetroAchievements" -msgid "View Profile" -msgstr "Profiel bekijken" - -#: src/ui/gui/retroachievements_page.slint:102 -msgctxt "RetroAchievements" -msgid "Username" -msgstr "Gebruikersnaam" - -#: src/ui/gui/retroachievements_page.slint:112 -msgctxt "RetroAchievements" -msgid "Password" -msgstr "Wachtwoord" - -#: src/ui/gui/retroachievements_page.slint:121 -msgctxt "RetroAchievements" -msgid "Login" -msgstr "Inloggen" - -#: src/ui/gui/retroachievements_page.slint:137 -msgctxt "RetroAchievements" -msgid "View Supported Games" -msgstr "Ondersteunde spellen bekijken" +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "Wizard voor profiel maken starten" diff --git a/data/translations/pt_BR/LC_MESSAGES/gopher64.po b/data/translations/pt_BR/LC_MESSAGES/gopher64.po index 94ecfc5..e1bbb71 100644 --- a/data/translations/pt_BR/LC_MESSAGES/gopher64.po +++ b/data/translations/pt_BR/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-05-11 18:10-3000\n" +"POT-Creation-Date: 2026-05-14 13:42+0000\n" "PO-Revision-Date: 2026-05-11 18:11-3000\n" "Last-Translator: EDUARDO CARVALHO \n" "Language-Team: LANGUAGE \n" @@ -107,31 +107,6 @@ msgctxt "ControllerConfig" msgid "Controller" msgstr "Controle" -#: src/ui/gui/input_profile.slint:10 -msgctxt "InputProfileDialog" -msgid "Create/Modify Input Profile" -msgstr "Criar/Modificar Perfil de Comandos" - -#: src/ui/gui/input_profile.slint:18 -msgctxt "InputProfileDialog" -msgid "Enter profile name to create or modify" -msgstr "Insira o nome de perfil para criar ou modificar" - -#: src/ui/gui/input_profile.slint:29 -msgctxt "InputProfileDialog" -msgid "Deadzone Percentage" -msgstr "Porcentagem de Zona-morta" - -#: src/ui/gui/input_profile.slint:51 -msgctxt "InputProfileDialog" -msgid "Use DirectInput" -msgstr "Usar DirectInput" - -#: src/ui/gui/input_profile.slint:61 -msgctxt "InputProfileDialog" -msgid "Start Profile Creation Wizard" -msgstr "Iniciar Assistente de Criação de Perfil" - #: src/ui/gui/localgame_page.slint:18 msgctxt "LocalGame" msgid "Local Game" @@ -242,42 +217,42 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "O que você quer falar?" -#: src/ui/gui/appwindow.slint:94 +#: src/ui/gui/appwindow.slint:95 msgctxt "Menu" msgid "Local Game" msgstr "Jogo Local" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:96 msgctxt "Menu" msgid "Controller Config" msgstr "Configurar Controle" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:97 msgctxt "Menu" msgid "Netplay" msgstr "Netplay" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:98 msgctxt "Menu" msgid "Cheats" msgstr "Trapaças" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:99 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:100 msgctxt "Menu" msgid "Settings" msgstr "Configurações" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:101 msgctxt "Menu" msgid "About" msgstr "Sobre" -#: src/ui/gui/appwindow.slint:194 +#: src/ui/gui/appwindow.slint:195 msgctxt "ErrorDialog" msgid "Error" msgstr "Erro" @@ -331,7 +306,9 @@ msgstr "Selecionar ROM" msgctxt "NetplayCreate" msgid "" "This game has cheats enabled. Cheats will be synchronized with other players." -msgstr "Este jogo tem trapaças habilitadas. As trapaças serão sincronizadas com outros jogadores." +msgstr "" +"Este jogo tem trapaças habilitadas. As trapaças serão sincronizadas com " +"outros jogadores." #: src/ui/gui/netplay_create.slint:103 msgctxt "NetplayCreate" @@ -346,7 +323,8 @@ msgstr "Criando Servidor" #: src/ui/gui/netplay_create.slint:128 msgctxt "DispatcherDialog" msgid "Creating server, please wait...This may take about 30 seconds." -msgstr "Criando servidor, por favor aguarde...Isto poderá levar até 30 segundos." +msgstr "" +"Criando servidor, por favor aguarde...Isto poderá levar até 30 segundos." #: src/ui/gui/netplay_join.slint:5 msgctxt "NetplayJoin" @@ -381,7 +359,8 @@ msgstr "Clique em uma sessão abaixo para selecionar" #: src/ui/gui/netplay_join.slint:67 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." -msgstr "Sem sessões disponíveis. Por favor recarregue para verificar novamente." +msgstr "" +"Sem sessões disponíveis. Por favor recarregue para verificar novamente." #: src/ui/gui/netplay_join.slint:73 msgctxt "NetplayJoin" @@ -428,6 +407,66 @@ msgctxt "NetplayJoin" msgid "Join Session" msgstr "Entrar na Sessão" +#: src/ui/gui/retroachievements_page.slint:19 +msgctxt "RAData" +msgid "Not currently logged in" +msgstr "Não está logado." + +#: src/ui/gui/retroachievements_page.slint:27 +msgctxt "RetroAchievements" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/retroachievements_page.slint:34 +msgctxt "RetroAchievements" +msgid "Enabled" +msgstr "Habilitado" + +#: src/ui/gui/retroachievements_page.slint:52 +msgctxt "RetroAchievements" +msgid "Hardcore mode" +msgstr "Modo Hardcore" + +#: src/ui/gui/retroachievements_page.slint:64 +msgctxt "RetroAchievements" +msgid "Challenge Indicators" +msgstr "Indicadores de Desafio" + +#: src/ui/gui/retroachievements_page.slint:76 +msgctxt "RetroAchievements" +msgid "Leaderboard Trackers" +msgstr "Rastreadores de Tabela" + +#: src/ui/gui/retroachievements_page.slint:88 +msgctxt "RetroAchievements" +msgid "Discord Rich Presence" +msgstr "Rich Presence no Discord" + +#: src/ui/gui/retroachievements_page.slint:105 +msgctxt "RetroAchievements" +msgid "View Profile" +msgstr "Ver Perfil" + +#: src/ui/gui/retroachievements_page.slint:115 +msgctxt "RetroAchievements" +msgid "Username" +msgstr "Usuário" + +#: src/ui/gui/retroachievements_page.slint:125 +msgctxt "RetroAchievements" +msgid "Password" +msgstr "Senha" + +#: src/ui/gui/retroachievements_page.slint:134 +msgctxt "RetroAchievements" +msgid "Login" +msgstr "Login" + +#: src/ui/gui/retroachievements_page.slint:150 +msgctxt "RetroAchievements" +msgid "View Supported Games" +msgstr "Ver Jogos com Suporte" + #: src/ui/gui/netplay_wait.slint:14 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" @@ -483,57 +522,27 @@ msgctxt "NetplayWait" msgid "Start Game" msgstr "Iniciar jogo" -#: src/ui/gui/retroachievements_page.slint:18 -msgctxt "RAData" -msgid "Not currently logged in" -msgstr "Não está logado." +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "Criar/Modificar Perfil de Comandos" -#: src/ui/gui/retroachievements_page.slint:26 -msgctxt "RetroAchievements" -msgid "RetroAchievements" -msgstr "RetroAchievements" +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "Insira o nome de perfil para criar ou modificar" -#: src/ui/gui/retroachievements_page.slint:33 -msgctxt "RetroAchievements" -msgid "Enabled" -msgstr "Habilitado" +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "Porcentagem de Zona-morta" -#: src/ui/gui/retroachievements_page.slint:51 -msgctxt "RetroAchievements" -msgid "Hardcore mode" -msgstr "Modo Hardcore" +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "Usar DirectInput" -#: src/ui/gui/retroachievements_page.slint:63 -msgctxt "RetroAchievements" -msgid "Challenge Indicators" -msgstr "Indicadores de Desafio" - -#: src/ui/gui/retroachievements_page.slint:75 -msgctxt "RetroAchievements" -msgid "Leaderboard Trackers" -msgstr "Rastreadores de Tabela" - -#: src/ui/gui/retroachievements_page.slint:92 -msgctxt "RetroAchievements" -msgid "View Profile" -msgstr "Ver Perfil" - -#: src/ui/gui/retroachievements_page.slint:102 -msgctxt "RetroAchievements" -msgid "Username" -msgstr "Usuário" - -#: src/ui/gui/retroachievements_page.slint:112 -msgctxt "RetroAchievements" -msgid "Password" -msgstr "Senha" - -#: src/ui/gui/retroachievements_page.slint:121 -msgctxt "RetroAchievements" -msgid "Login" -msgstr "Login" - -#: src/ui/gui/retroachievements_page.slint:137 -msgctxt "RetroAchievements" -msgid "View Supported Games" -msgstr "Ver Jogos com Suporte" +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "Iniciar Assistente de Criação de Perfil" diff --git a/data/translations/ru/LC_MESSAGES/gopher64.po b/data/translations/ru/LC_MESSAGES/gopher64.po index 80c4a6b..424495e 100644 --- a/data/translations/ru/LC_MESSAGES/gopher64.po +++ b/data/translations/ru/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-10 18:36+0000\n" +"POT-Creation-Date: 2026-05-14 13:42+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Russian\n" @@ -107,31 +107,6 @@ msgctxt "ControllerConfig" msgid "Controller" msgstr "Контроллер" -#: src/ui/gui/input_profile.slint:10 -msgctxt "InputProfileDialog" -msgid "Create/Modify Input Profile" -msgstr "Создать/изменить профиль ввода" - -#: src/ui/gui/input_profile.slint:18 -msgctxt "InputProfileDialog" -msgid "Enter profile name to create or modify" -msgstr "Введите имя профиля для создания или изменения" - -#: src/ui/gui/input_profile.slint:29 -msgctxt "InputProfileDialog" -msgid "Deadzone Percentage" -msgstr "Процент мёртвой зоны" - -#: src/ui/gui/input_profile.slint:51 -msgctxt "InputProfileDialog" -msgid "Use DirectInput" -msgstr "Использовать DirectInput" - -#: src/ui/gui/input_profile.slint:61 -msgctxt "InputProfileDialog" -msgid "Start Profile Creation Wizard" -msgstr "Запустить мастер создания профиля" - #: src/ui/gui/localgame_page.slint:18 msgctxt "LocalGame" msgid "Local Game" @@ -242,42 +217,42 @@ msgctxt "VruDialog" msgid "What Would You Like To Say?" msgstr "Что вы хотите сказать?" -#: src/ui/gui/appwindow.slint:94 +#: src/ui/gui/appwindow.slint:95 msgctxt "Menu" msgid "Local Game" msgstr "Локальная игра" -#: src/ui/gui/appwindow.slint:95 +#: src/ui/gui/appwindow.slint:96 msgctxt "Menu" msgid "Controller Config" msgstr "Настройка контроллера" -#: src/ui/gui/appwindow.slint:96 +#: src/ui/gui/appwindow.slint:97 msgctxt "Menu" msgid "Netplay" msgstr "Сетевая игра" -#: src/ui/gui/appwindow.slint:97 +#: src/ui/gui/appwindow.slint:98 msgctxt "Menu" msgid "Cheats" msgstr "Читы" -#: src/ui/gui/appwindow.slint:98 +#: src/ui/gui/appwindow.slint:99 msgctxt "Menu" msgid "RetroAchievements" msgstr "RetroAchievements" -#: src/ui/gui/appwindow.slint:99 +#: src/ui/gui/appwindow.slint:100 msgctxt "Menu" msgid "Settings" msgstr "Настройки" -#: src/ui/gui/appwindow.slint:100 +#: src/ui/gui/appwindow.slint:101 msgctxt "Menu" msgid "About" msgstr "О программе" -#: src/ui/gui/appwindow.slint:194 +#: src/ui/gui/appwindow.slint:195 msgctxt "ErrorDialog" msgid "Error" msgstr "Ошибка" @@ -383,8 +358,7 @@ msgstr "Нажмите на сессию ниже, чтобы выбрать е #: src/ui/gui/netplay_join.slint:67 msgctxt "NetplayJoin" msgid "No sessions available. Please refresh to check again." -msgstr "" -"Нет доступных сессий. Пожалуйста, обновите, чтобы проверить снова." +msgstr "Нет доступных сессий. Пожалуйста, обновите, чтобы проверить снова." #: src/ui/gui/netplay_join.slint:73 msgctxt "NetplayJoin" @@ -431,6 +405,66 @@ msgctxt "NetplayJoin" msgid "Join Session" msgstr "Присоединиться к сессии" +#: src/ui/gui/retroachievements_page.slint:19 +msgctxt "RAData" +msgid "Not currently logged in" +msgstr "В данный момент не выполнен вход" + +#: src/ui/gui/retroachievements_page.slint:27 +msgctxt "RetroAchievements" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/retroachievements_page.slint:34 +msgctxt "RetroAchievements" +msgid "Enabled" +msgstr "Включено" + +#: src/ui/gui/retroachievements_page.slint:52 +msgctxt "RetroAchievements" +msgid "Hardcore mode" +msgstr "Хардкорный режим" + +#: src/ui/gui/retroachievements_page.slint:64 +msgctxt "RetroAchievements" +msgid "Challenge Indicators" +msgstr "Индикаторы испытаний" + +#: src/ui/gui/retroachievements_page.slint:76 +msgctxt "RetroAchievements" +msgid "Leaderboard Trackers" +msgstr "Трекеры таблицы лидеров" + +#: src/ui/gui/retroachievements_page.slint:88 +msgctxt "RetroAchievements" +msgid "Discord Rich Presence" +msgstr "Расширенный статус Discord" + +#: src/ui/gui/retroachievements_page.slint:105 +msgctxt "RetroAchievements" +msgid "View Profile" +msgstr "Просмотреть профиль" + +#: src/ui/gui/retroachievements_page.slint:115 +msgctxt "RetroAchievements" +msgid "Username" +msgstr "Имя пользователя" + +#: src/ui/gui/retroachievements_page.slint:125 +msgctxt "RetroAchievements" +msgid "Password" +msgstr "Пароль" + +#: src/ui/gui/retroachievements_page.slint:134 +msgctxt "RetroAchievements" +msgid "Login" +msgstr "Войти" + +#: src/ui/gui/retroachievements_page.slint:150 +msgctxt "RetroAchievements" +msgid "View Supported Games" +msgstr "Просмотреть поддерживаемые игры" + #: src/ui/gui/netplay_wait.slint:14 msgctxt "NetplayWait" msgid "Netplay: Waiting Room" @@ -486,57 +520,27 @@ msgctxt "NetplayWait" msgid "Start Game" msgstr "Начать игру" -#: src/ui/gui/retroachievements_page.slint:18 -msgctxt "RAData" -msgid "Not currently logged in" -msgstr "В данный момент не выполнен вход" +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "Создать/изменить профиль ввода" -#: src/ui/gui/retroachievements_page.slint:26 -msgctxt "RetroAchievements" -msgid "RetroAchievements" -msgstr "RetroAchievements" +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "Введите имя профиля для создания или изменения" -#: src/ui/gui/retroachievements_page.slint:33 -msgctxt "RetroAchievements" -msgid "Enabled" -msgstr "Включено" +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "Процент мёртвой зоны" -#: src/ui/gui/retroachievements_page.slint:51 -msgctxt "RetroAchievements" -msgid "Hardcore mode" -msgstr "Хардкорный режим" +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "Использовать DirectInput" -#: src/ui/gui/retroachievements_page.slint:63 -msgctxt "RetroAchievements" -msgid "Challenge Indicators" -msgstr "Индикаторы испытаний" - -#: src/ui/gui/retroachievements_page.slint:75 -msgctxt "RetroAchievements" -msgid "Leaderboard Trackers" -msgstr "Трекеры таблицы лидеров" - -#: src/ui/gui/retroachievements_page.slint:92 -msgctxt "RetroAchievements" -msgid "View Profile" -msgstr "Просмотреть профиль" - -#: src/ui/gui/retroachievements_page.slint:102 -msgctxt "RetroAchievements" -msgid "Username" -msgstr "Имя пользователя" - -#: src/ui/gui/retroachievements_page.slint:112 -msgctxt "RetroAchievements" -msgid "Password" -msgstr "Пароль" - -#: src/ui/gui/retroachievements_page.slint:121 -msgctxt "RetroAchievements" -msgid "Login" -msgstr "Войти" - -#: src/ui/gui/retroachievements_page.slint:137 -msgctxt "RetroAchievements" -msgid "View Supported Games" -msgstr "Просмотреть поддерживаемые игры" +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "Запустить мастер создания профиля" diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index 7f9b017..b06d81b 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -22,6 +22,8 @@ static bool g_challenge = false; static bool g_leaderboard = false; static rc_client_leaderboard_list_t *g_leaderboard_list = NULL; +static char g_rich_presence_buffer[512]; + static uint32_t read_memory(uint32_t address, uint8_t *buffer, uint32_t num_bytes, rc_client_t *client) { if (address + num_bytes > g_rdram_size) @@ -144,6 +146,9 @@ void ra_welcome() { } const rc_client_game_t *game = rc_client_get_game_info(g_client); + if (!game) { + return; + } rc_client_user_game_summary_t summary; rc_client_get_user_game_summary(g_client, &summary); @@ -163,6 +168,17 @@ void ra_welcome() { rdp_onscreen_message(buffer, MESSAGE_LONG); } +void ra_get_game_info(const char **game_title, const char **game_image_url) { + const rc_client_game_t *game = rc_client_get_game_info(g_client); + if (!game) { + *game_title = NULL; + *game_image_url = NULL; + return; + } + *game_title = game->title; + *game_image_url = game->badge_url; +} + void ra_load_game(const uint8_t *rom, size_t rom_size, void *userdata) { rc_client_begin_identify_and_load_game(g_client, RC_CONSOLE_NINTENDO_64, NULL, rom, rom_size, load_game_callback, @@ -344,6 +360,15 @@ void ra_do_frame() { rc_client_do_frame(g_client); } void ra_do_idle() { rc_client_idle(g_client); } +const char *ra_get_rich_presence() { + size_t size = rc_client_get_rich_presence_message( + g_client, g_rich_presence_buffer, sizeof(g_rich_presence_buffer)); + if (size == 0) { + return NULL; + } + return g_rich_presence_buffer; +} + size_t ra_state_size() { return rc_client_progress_size(g_client); } void ra_save_state(uint8_t *state, size_t state_size) { diff --git a/retroachievements/retroachievements.h b/retroachievements/retroachievements.h index cee9ca0..4fb0690 100644 --- a/retroachievements/retroachievements.h +++ b/retroachievements/retroachievements.h @@ -23,6 +23,9 @@ size_t ra_state_size(); void ra_save_state(uint8_t *state, size_t state_size); void ra_load_state(const uint8_t *state, size_t state_size); +const char *ra_get_rich_presence(); +void ra_get_game_info(const char **game_title, const char **game_image_url); + #ifdef __cplusplus extern "C" { #endif diff --git a/src/device/cart.rs b/src/device/cart.rs index 1e405b1..c8db89f 100644 --- a/src/device/cart.rs +++ b/src/device/cart.rs @@ -148,7 +148,9 @@ fn eeprom_write_block(device: &mut device::Device, block: usize, offset: usize, fn time2data(device: &mut device::Device, offset: usize) { let timestamp = device.cart.rtc_timestamp + device.vi.elapsed_time as i64; - let now = chrono::DateTime::from_timestamp(timestamp, 0).unwrap(); + let now = chrono::DateTime::from_timestamp(timestamp, 0) + .unwrap() + .with_timezone(&chrono::Local); device.pif.ram[offset] = byte2bcd(now.second()); device.pif.ram[offset + 1] = byte2bcd(now.minute()); diff --git a/src/device/cart/rom.rs b/src/device/cart/rom.rs index bded4f6..94f2c1e 100644 --- a/src/device/cart/rom.rs +++ b/src/device/cart/rom.rs @@ -122,8 +122,10 @@ pub fn dma_write( } pub fn init(device: &mut device::Device, rom_file: &[u8]) { - let now: chrono::DateTime = chrono::Local::now(); - device.cart.rtc_timestamp = now.naive_local().and_utc().timestamp(); + device.cart.rtc_timestamp = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_secs() as i64; if let Some(netplay) = &mut device.netplay { if netplay.player_number == 0 { netplay::send_rtc(netplay, device.cart.rtc_timestamp); diff --git a/src/main.rs b/src/main.rs index 7c7153c..9c7ca5b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -111,6 +111,8 @@ struct Args { help = "Enable Leaderboard Trackers for RetroAchievements" )] ra_leaderboard: bool, + #[arg(long = "discord-rich-presence", help = "Enable Discord Rich Presence")] + discord_rich_presence: bool, } #[tokio::main(worker_threads = 4)] @@ -172,6 +174,7 @@ async fn main() -> std::io::Result<()> { }; let mut shutdown_tx = None; + let mut usb_handle = None; if let Some(peer_addr) = args.netplay_peer_addr && let Some(player_number) = args.netplay_player_number @@ -190,7 +193,7 @@ async fn main() -> std::io::Result<()> { } if device.ui.config.emulation.usb { - (shutdown_tx, device.ui.usb) = ui::usb::init(); + (shutdown_tx, usb_handle, device.ui.usb) = ui::usb::init(); } if let Some(username) = args.ra_username { @@ -217,7 +220,13 @@ async fn main() -> std::io::Result<()> { } } - retroachievements::load_game(&rom_contents, rom_contents.len()).await; + let (discord_watch_tx, discord_handle) = retroachievements::load_game( + &rom_contents, + rom_contents.len(), + args.discord_rich_presence, + ) + .await; + device::run_game( &mut device, &rom_contents, @@ -228,7 +237,8 @@ async fn main() -> std::io::Result<()> { load_savestate_slot: args.load_state, }, ); - retroachievements::shutdown_client(); + + retroachievements::shutdown_client(discord_watch_tx, discord_handle).await; if device.netplay.is_some() { netplay::close(&mut device); @@ -247,7 +257,7 @@ async fn main() -> std::io::Result<()> { } } if let Some(shutdown_tx) = &shutdown_tx { - ui::usb::close(shutdown_tx); + ui::usb::close(shutdown_tx, usb_handle).await; } } else if std::env::args().count() > 1 { let mut config = ui::config::Config::new(); @@ -302,7 +312,7 @@ async fn main() -> std::io::Result<()> { { retroachievements::init_client(false, false, false); ui::gui::app_window(); - retroachievements::shutdown_client(); + retroachievements::shutdown_client(None, None).await; } } diff --git a/src/retroachievements.rs b/src/retroachievements.rs index f46ab51..6bd5848 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -2,6 +2,8 @@ include!(concat!(env!("OUT_DIR"), "/retroachievements_bindings.rs")); use crate::ui; +use discord_rich_presence::DiscordIpc; + #[derive(serde::Serialize, serde::Deserialize)] pub struct RAConfig { pub username: String, @@ -10,6 +12,7 @@ pub struct RAConfig { pub hardcore: bool, pub challenge: bool, pub leaderboard: bool, + pub rich_presence: bool, } #[unsafe(no_mangle)] @@ -42,6 +45,7 @@ pub extern "C" fn store_retroachievements_credentials( hardcore: result.hardcore, challenge: result.challenge, leaderboard: result.leaderboard, + rich_presence: result.rich_presence, } } else { RAConfig { @@ -51,6 +55,7 @@ pub extern "C" fn store_retroachievements_credentials( hardcore: false, challenge: false, leaderboard: false, + rich_presence: false, } }; let f = std::fs::File::create(&file_path).unwrap(); @@ -132,13 +137,42 @@ pub extern "C" fn rust_server_call( }); } -pub async fn load_game(rom: &[u8], rom_size: usize) { +pub async fn load_game( + rom: &[u8], + rom_size: usize, + discord_rich_presence: bool, +) -> ( + Option>, + Option>, +) { let (tx, rx) = tokio::sync::oneshot::channel::(); unsafe { let tx_ptr = Box::into_raw(Box::new(tx)) as *mut std::ffi::c_void; ra_load_game(rom.as_ptr(), rom_size, tx_ptr); }; rx.await.unwrap(); + let mut c_title = std::ptr::null(); + let mut c_image_url = std::ptr::null(); + unsafe { ra_get_game_info(&mut c_title, &mut c_image_url) }; + if !discord_rich_presence || c_title.is_null() || c_image_url.is_null() { + (None, None) + } else { + let (discord_watch_tx, discord_watch_rx) = tokio::sync::watch::channel(()); + ( + Some(discord_watch_tx), + Some(init_rich_presence( + discord_watch_rx, + unsafe { std::ffi::CStr::from_ptr(c_title) } + .to_str() + .unwrap() + .to_string(), + unsafe { std::ffi::CStr::from_ptr(c_image_url) } + .to_str() + .unwrap() + .to_string(), + )), + ) + } } pub fn unload_game() { @@ -149,6 +183,20 @@ pub fn welcome() { unsafe { ra_welcome() }; } +pub fn get_rich_presence() -> Option { + let c_rich_presence = unsafe { ra_get_rich_presence() }; + if c_rich_presence.is_null() { + None + } else { + Some( + unsafe { std::ffi::CStr::from_ptr(c_rich_presence) } + .to_str() + .unwrap() + .to_string(), + ) + } +} + pub fn set_rdram(rdram: *const u8, rdram_size: usize) { unsafe { ra_set_rdram(rdram, rdram_size) }; } @@ -165,7 +213,16 @@ pub fn init_client(hardcore: bool, challenge: bool, leaderboard: bool) { unsafe { ra_init_client(hardcore, challenge, leaderboard) }; } -pub fn shutdown_client() { +pub async fn shutdown_client( + discord_watch_tx: Option>, + discord_handle: Option>, +) { + if let Some(discord_handle) = discord_handle + && let Some(discord_watch_tx) = discord_watch_tx + { + let _ = discord_watch_tx.send(()); + discord_handle.await.unwrap(); + } unsafe { ra_shutdown_client() }; } @@ -237,3 +294,52 @@ pub fn save_state(state: *mut u8, state_size: usize) { pub fn load_state(state: *const u8, state_size: usize) { unsafe { ra_load_state(state, state_size) }; } + +pub fn init_rich_presence( + mut discord_watch_rx: tokio::sync::watch::Receiver<()>, + game_title: String, + game_image_url: String, +) -> tokio::task::JoinHandle<()> { + tokio::spawn(async move { + let mut client = discord_rich_presence::DiscordIpcClient::new("1395482226463870986"); + let timestamps = discord_rich_presence::activity::Timestamps::new().start( + std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_secs() as i64, + ); + + if let Err(e) = client.connect() { + eprintln!("Failed to connect to Discord: {e}"); + return; + } + loop { + tokio::select! { + _ = discord_watch_rx.changed() => { + if let Err(e) = client.clear_activity() { + eprintln!("Failed to clear Discord activity: {e}"); + } + if let Err(e) = client.close() { + eprintln!("Failed to close Discord: {e}"); + } + return; + } + _ = tokio::time::sleep(std::time::Duration::from_secs(10)) => { + if let Some(rich_presence) = get_rich_presence() + && let Err(e) = client.set_activity( + discord_rich_presence::activity::Activity::new() + .details(game_title.clone()) + .state(rich_presence) + .assets( + discord_rich_presence::activity::Assets::new() + .small_image(game_image_url.clone()), + ).timestamps(timestamps.clone()), + ) + { + eprintln!("Failed to set Discord activity: {e}"); + } + } + } + } + }) +} diff --git a/src/ui/gui.rs b/src/ui/gui.rs index ab8bfda..b4e08cf 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -25,6 +25,7 @@ pub struct RASettings { pub hardcore: bool, pub challenge: bool, pub leaderboard: bool, + pub rich_presence: bool, } fn check_latest_version(weak: slint::Weak) { @@ -75,6 +76,7 @@ fn run_with_path(weak: slint::Weak, path: std::path::PathBuf) { hardcore: handle.get_ra_hardcore(), challenge: handle.get_ra_challenge(), leaderboard: handle.get_ra_leaderboard(), + rich_presence: handle.get_ra_rich_presence(), }, weak2, ); @@ -586,6 +588,9 @@ pub fn run_rom( if ra_settings.leaderboard { command.args(["--ra-leaderboard"]); } + if ra_settings.rich_presence { + command.args(["--discord-rich-presence"]); + } } let success = command @@ -645,6 +650,7 @@ fn open_rom(app: &AppWindow) { let ra_hardcore = app.get_ra_hardcore(); let ra_challenge = app.get_ra_challenge(); let ra_leaderboard = app.get_ra_leaderboard(); + let ra_rich_presence = app.get_ra_rich_presence(); let weak = app.as_weak(); tokio::spawn(async move { @@ -663,6 +669,7 @@ fn open_rom(app: &AppWindow) { hardcore: ra_hardcore, challenge: ra_challenge, leaderboard: ra_leaderboard, + rich_presence: ra_rich_presence, }, weak, ); diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index e3af450..b8f28d5 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -40,7 +40,7 @@ export component AppWindow inherits Window { callback ra_button_clicked(string); callback ra_games_clicked; callback ra_show_profile_clicked; - callback ra_toggled(bool,bool,bool,bool); + callback ra_toggled(bool,bool,bool,bool,bool); callback controller_window_created; in property version <=> AboutData.version; in property has_update <=> AboutData.has_update; @@ -53,6 +53,7 @@ export component AppWindow inherits Window { in-out property ra_hardcore <=> RAData.hardcore; in-out property ra_challenge <=> RAData.challenge; in-out property ra_leaderboard <=> RAData.leaderboard; + in-out property ra_rich_presence <=> RAData.rich_presence; in-out property ra_softcore_only <=> RAData.ra_softcore_only; out property ra_not_logged_in <=> RAData.not_logged_in; in-out property integer_scaling <=> SettingsData.integer_scaling; @@ -155,8 +156,8 @@ export component AppWindow inherits Window { ra_button_clicked(password) => { ra_button_clicked(password); } - ra_toggled(enabled,hardcore,challenge,leaderboard) => { - ra_toggled(enabled,hardcore,challenge,leaderboard); + ra_toggled(enabled,hardcore,challenge,leaderboard,rich_presence) => { + ra_toggled(enabled,hardcore,challenge,leaderboard,rich_presence); } ra_games_clicked => { ra_games_clicked(); diff --git a/src/ui/gui/retroachievements_page.slint b/src/ui/gui/retroachievements_page.slint index 0bb4763..4f98e13 100644 --- a/src/ui/gui/retroachievements_page.slint +++ b/src/ui/gui/retroachievements_page.slint @@ -9,6 +9,7 @@ export global RAData { in-out property hardcore; in-out property challenge; in-out property leaderboard; + in-out property rich_presence; in-out property ra_logging_in; in-out property ra_show_profile; in-out property ra_softcore_only; @@ -20,7 +21,7 @@ export global RAData { export component RetroAchievements inherits Page { callback ra_button_clicked(string); - callback ra_toggled(bool,bool,bool,bool); + callback ra_toggled(bool,bool,bool,bool,bool); callback ra_games_clicked; callback ra_show_profile_clicked; title: @tr("RetroAchievements"); @@ -41,7 +42,7 @@ export component RetroAchievements inherits Page { RAData.current_user_message = RAData.not_logged_in; RAData.ra_show_profile = false; } - ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard); + ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard,RAData.rich_presence); } } } @@ -53,7 +54,7 @@ export component RetroAchievements inherits Page { enabled: RAData.enabled; toggled => { RAData.hardcore = self.checked; - ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard); + ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard,RAData.rich_presence); } } } @@ -65,7 +66,7 @@ export component RetroAchievements inherits Page { enabled: RAData.enabled; toggled => { RAData.challenge = self.checked; - ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard); + ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard,RAData.rich_presence); } } } @@ -77,7 +78,19 @@ export component RetroAchievements inherits Page { enabled: RAData.enabled; toggled => { RAData.leaderboard = self.checked; - ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard); + ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard,RAData.rich_presence); + } + } + } + HorizontalBox { + alignment: start; + Switch { + text: @tr("Discord Rich Presence"); + checked: RAData.rich_presence; + enabled: RAData.enabled; + toggled => { + RAData.rich_presence = self.checked; + ra_toggled(RAData.enabled,RAData.hardcore,RAData.challenge,RAData.leaderboard,RAData.rich_presence); } } } diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 15f5b66..4707aab 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -507,7 +507,11 @@ fn update_sessions(weak: slint::Weak) { { let (mut write, mut read) = socket.split(); - let now_utc = chrono::Utc::now().timestamp_millis().to_string(); + let now_utc = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_millis() + .to_string(); let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); let request_rooms = NetplayMessage { message_type: "request_get_rooms".to_string(), @@ -623,7 +627,11 @@ fn create_session( weak: slint::Weak, ) { tokio::spawn(async move { - let now_utc = chrono::Utc::now().timestamp_millis().to_string(); + let now_utc = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_millis() + .to_string(); let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); let mut features = std::collections::HashMap::new(); @@ -757,7 +765,11 @@ fn join_session( weak: slint::Weak, ) { tokio::spawn(async move { - let now_utc = chrono::Utc::now().timestamp_millis().to_string(); + let now_utc = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_millis() + .to_string(); let hasher = Sha256::new().chain_update(&now_utc).chain_update(EMU_NAME); let join_room = NetplayMessage { @@ -1227,6 +1239,7 @@ pub fn netplay_window(app: &AppWindow) { hardcore: handle.get_ra_hardcore(), challenge: handle.get_ra_challenge(), leaderboard: handle.get_ra_leaderboard(), + rich_presence: handle.get_ra_rich_presence(), }, handle.get_rom_dir(), weak_app, @@ -1251,6 +1264,7 @@ pub fn netplay_window(app: &AppWindow) { hardcore: handle.get_ra_hardcore(), challenge: handle.get_ra_challenge(), leaderboard: handle.get_ra_leaderboard(), + rich_presence: handle.get_ra_rich_presence(), }, weak_app, ); diff --git a/src/ui/retroachievements.rs b/src/ui/retroachievements.rs index 82aacf4..81dc5c5 100644 --- a/src/ui/retroachievements.rs +++ b/src/ui/retroachievements.rs @@ -13,6 +13,7 @@ pub fn ra_window(app: &ui::gui::AppWindow) { app.set_ra_hardcore(result.hardcore); app.set_ra_challenge(result.challenge); app.set_ra_leaderboard(result.leaderboard); + app.set_ra_rich_presence(result.rich_presence); token = result.token; } else { app.set_ra_hardcore(true); @@ -46,14 +47,36 @@ pub fn ra_window(app: &ui::gui::AppWindow) { .unwrap(); }); - app.on_ra_toggled(move |enabled, hardcore, challenge, leaderboard| { - let file_path = ui::get_dirs().config_dir.join("retroachievements.json"); - let raconfig = if let Ok(ra_config) = std::fs::read(&file_path) - && let Ok(result) = - serde_json::from_slice::(ra_config.as_ref()) - { - if !enabled { - retroachievements::logout_user(); + app.on_ra_toggled( + move |enabled, hardcore, challenge, leaderboard, rich_presence| { + let file_path = ui::get_dirs().config_dir.join("retroachievements.json"); + let raconfig = if let Ok(ra_config) = std::fs::read(&file_path) + && let Ok(result) = + serde_json::from_slice::(ra_config.as_ref()) + { + if !enabled { + retroachievements::logout_user(); + retroachievements::RAConfig { + username: String::new(), + token: String::new(), + enabled, + hardcore, + challenge, + leaderboard, + rich_presence, + } + } else { + retroachievements::RAConfig { + username: result.username, + token: result.token, + enabled, + hardcore, + challenge, + leaderboard, + rich_presence, + } + } + } else { retroachievements::RAConfig { username: String::new(), token: String::new(), @@ -61,33 +84,16 @@ pub fn ra_window(app: &ui::gui::AppWindow) { hardcore, challenge, leaderboard, + rich_presence, } - } else { - retroachievements::RAConfig { - username: result.username, - token: result.token, - enabled, - hardcore, - challenge, - leaderboard, - } + }; + if let Ok(f) = std::fs::File::create(&file_path) + && let Err(e) = serde_json::to_writer_pretty(f, &raconfig) + { + eprintln!("Error writing RA config: {}", e); } - } else { - retroachievements::RAConfig { - username: String::new(), - token: String::new(), - enabled, - hardcore, - challenge, - leaderboard, - } - }; - if let Ok(f) = std::fs::File::create(&file_path) - && let Err(e) = serde_json::to_writer_pretty(f, &raconfig) - { - eprintln!("Error writing RA config: {}", e); - } - }); + }, + ); app.on_ra_games_clicked(move || { if let Err(e) = diff --git a/src/ui/usb.rs b/src/ui/usb.rs index 97d71e6..11c0986 100644 --- a/src/ui/usb.rs +++ b/src/ui/usb.rs @@ -127,7 +127,11 @@ async fn handle_connection( } } -pub fn init() -> (Option>, ui::Usb) { +pub fn init() -> ( + Option>, + Option>, + ui::Usb, +) { let (shutdown_tx, mut shutdown_rx) = tokio::sync::watch::channel(()); let (usb_tx, usb_rx): ( tokio::sync::broadcast::Sender, @@ -140,7 +144,7 @@ pub fn init() -> (Option>, ui::Usb) { let usb_tx_clone = usb_tx.clone(); let cart_rx_clone = cart_rx.resubscribe(); - tokio::spawn(async move { + let handle = tokio::spawn(async move { let listener = tokio::net::TcpListener::bind("localhost:64000") .await .unwrap(); @@ -162,6 +166,7 @@ pub fn init() -> (Option>, ui::Usb) { }); ( Some(shutdown_tx), + Some(handle), ui::Usb { usb_tx: Some(usb_tx_clone), cart_rx: Some(cart_rx_clone), @@ -169,8 +174,14 @@ pub fn init() -> (Option>, ui::Usb) { ) } -pub fn close(shutdown_tx: &tokio::sync::watch::Sender<()>) { +pub async fn close( + shutdown_tx: &tokio::sync::watch::Sender<()>, + usb_handle: Option>, +) { let _ = shutdown_tx.send(()); + if let Some(handle) = usb_handle { + handle.await.unwrap(); + } } pub fn send_to_usb(usb_tx: &tokio::sync::broadcast::Sender, buffer: UsbData) { From 8c331c25eb73c02f6ce852e2820d78dfe0bda392 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 14 May 2026 17:16:53 +0200 Subject: [PATCH 0880/1117] Sort translation files (#889) * Sort translation files * more --- .github/workflows/lint.yml | 3 +- data/translations/de/LC_MESSAGES/gopher64.po | 398 +++++++++--------- data/translations/es/LC_MESSAGES/gopher64.po | 398 +++++++++--------- data/translations/fr/LC_MESSAGES/gopher64.po | 398 +++++++++--------- data/translations/gopher64.pot | 374 ++++++++-------- data/translations/ja/LC_MESSAGES/gopher64.po | 398 +++++++++--------- data/translations/nl/LC_MESSAGES/gopher64.po | 398 +++++++++--------- .../pt_BR/LC_MESSAGES/gopher64.po | 398 +++++++++--------- data/translations/ru/LC_MESSAGES/gopher64.po | 398 +++++++++--------- 9 files changed, 1582 insertions(+), 1581 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 00b9f1d..8df5167 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -56,6 +56,7 @@ jobs: cargo install slint-tr-extractor cargo clippy -- -Dwarnings cargo clippy --no-default-features -- -Dwarnings - find -name \*.slint | xargs slint-tr-extractor -o /tmp/translations.pot + find -name \*.slint | sort | xargs slint-tr-extractor -o /tmp/translations.pot msgcmp --use-untranslated /tmp/translations.pot data/translations/gopher64.pot + msgcmp --use-untranslated data/translations/gopher64.pot /tmp/translations.pot find data/translations -name "*.po" | xargs -I {} msgcmp {} data/translations/gopher64.pot diff --git a/data/translations/de/LC_MESSAGES/gopher64.po b/data/translations/de/LC_MESSAGES/gopher64.po index 9330d32..d164013 100644 --- a/data/translations/de/LC_MESSAGES/gopher64.po +++ b/data/translations/de/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-14 13:42+0000\n" +"POT-Creation-Date: 2026-05-14 14:53+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: German\n" @@ -47,6 +47,46 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Spenden (über GitHub)" +#: src/ui/gui/appwindow.slint:95 +msgctxt "Menu" +msgid "Local Game" +msgstr "Lokales Spiel" + +#: src/ui/gui/appwindow.slint:96 +msgctxt "Menu" +msgid "Controller Config" +msgstr "Controller-Konfiguration" + +#: src/ui/gui/appwindow.slint:97 +msgctxt "Menu" +msgid "Netplay" +msgstr "Netplay" + +#: src/ui/gui/appwindow.slint:98 +msgctxt "Menu" +msgid "Cheats" +msgstr "Cheats" + +#: src/ui/gui/appwindow.slint:99 +msgctxt "Menu" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/appwindow.slint:100 +msgctxt "Menu" +msgid "Settings" +msgstr "Einstellungen" + +#: src/ui/gui/appwindow.slint:101 +msgctxt "Menu" +msgid "About" +msgstr "Über" + +#: src/ui/gui/appwindow.slint:195 +msgctxt "ErrorDialog" +msgid "Error" +msgstr "Fehler" + #: src/ui/gui/cheat_page.slint:15 msgctxt "Cheats" msgid "Cheats" @@ -107,6 +147,31 @@ msgctxt "ControllerConfig" msgid "Controller" msgstr "Controller" +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "Eingabeprofil erstellen/bearbeiten" + +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "Profilname zum Erstellen oder Bearbeiten eingeben" + +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "Deadzone Größe in Prozent" + +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "DirectInput verwenden" + +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "Assistent zur Profilerstellung starten" + #: src/ui/gui/localgame_page.slint:18 msgctxt "LocalGame" msgid "Local Game" @@ -127,136 +192,6 @@ msgctxt "LocalGame" msgid "Recent ROMs" msgstr "Zuletzt verwendete ROMs" -#: src/ui/gui/netplay_page.slint:33 -msgctxt "Netplay" -msgid "Netplay" -msgstr "Netplay" - -#: src/ui/gui/netplay_page.slint:40 -msgctxt "Netplay" -msgid "Create Session" -msgstr "Sitzung erstellen" - -#: src/ui/gui/netplay_page.slint:50 -msgctxt "Netplay" -msgid "Join Session" -msgstr "Sitzung beitreten" - -#: src/ui/gui/netplay_page.slint:64 -msgctxt "Netplay" -msgid "Netplay Discord Channel" -msgstr "Netplay-Discord-Kanal" - -#: src/ui/gui/netplay_page.slint:71 -msgctxt "Netplay" -msgid "Provide Feedback" -msgstr "Feedback geben" - -#: src/ui/gui/netplay_page.slint:82 -msgctxt "CustomNetplayServer" -msgid "Custom Netplay Server" -msgstr "Benutzerdefinierter Netplay-Server" - -#: src/ui/gui/settings_page.slint:22 -msgctxt "Settings" -msgid "Settings" -msgstr "Einstellungen" - -#: src/ui/gui/settings_page.slint:29 -msgctxt "Settings" -msgid "Resolution:" -msgstr "Auflösung:" - -#: src/ui/gui/settings_page.slint:45 -msgctxt "Settings" -msgid "SSAA downscaling" -msgstr "SSAA-Herunterskalierung" - -#: src/ui/gui/settings_page.slint:56 -msgctxt "Settings" -msgid "Integer Scaling" -msgstr "Pixelgenaue Skalierung" - -#: src/ui/gui/settings_page.slint:67 -msgctxt "Settings" -msgid "Fullscreen" -msgstr "Vollbild" - -#: src/ui/gui/settings_page.slint:78 -msgctxt "Settings" -msgid "Widescreen (stretch)" -msgstr "16:9 (gestreckt)" - -#: src/ui/gui/settings_page.slint:89 -msgctxt "Settings" -msgid "VSync" -msgstr "VSync" - -#: src/ui/gui/settings_page.slint:100 -msgctxt "Settings" -msgid "Apply CRT shader" -msgstr "CRT-Shader anwenden" - -#: src/ui/gui/settings_page.slint:115 -msgctxt "Settings" -msgid "Overclock N64 CPU (may cause bugs)" -msgstr "N64-CPU übertakten (kann Fehler verursachen)" - -#: src/ui/gui/settings_page.slint:126 -msgctxt "Settings" -msgid "Disable Expansion Pak" -msgstr "Expansion Pak deaktivieren" - -#: src/ui/gui/settings_page.slint:137 -msgctxt "Settings" -msgid "Emulate UNFLoader" -msgstr "UNFLoader emulieren" - -#: src/ui/gui/vru_dialog.slint:7 -msgctxt "VruDialog" -msgid "What Would You Like To Say?" -msgstr "Was möchten Sie sagen?" - -#: src/ui/gui/appwindow.slint:95 -msgctxt "Menu" -msgid "Local Game" -msgstr "Lokales Spiel" - -#: src/ui/gui/appwindow.slint:96 -msgctxt "Menu" -msgid "Controller Config" -msgstr "Controller-Konfiguration" - -#: src/ui/gui/appwindow.slint:97 -msgctxt "Menu" -msgid "Netplay" -msgstr "Netplay" - -#: src/ui/gui/appwindow.slint:98 -msgctxt "Menu" -msgid "Cheats" -msgstr "Cheats" - -#: src/ui/gui/appwindow.slint:99 -msgctxt "Menu" -msgid "RetroAchievements" -msgstr "RetroAchievements" - -#: src/ui/gui/appwindow.slint:100 -msgctxt "Menu" -msgid "Settings" -msgstr "Einstellungen" - -#: src/ui/gui/appwindow.slint:101 -msgctxt "Menu" -msgid "About" -msgstr "Über" - -#: src/ui/gui/appwindow.slint:195 -msgctxt "ErrorDialog" -msgid "Error" -msgstr "Fehler" - #: src/ui/gui/netplay_create.slint:5 msgctxt "NetplayCreate" msgid "Netplay: Create Session" @@ -406,6 +341,91 @@ msgctxt "NetplayJoin" msgid "Join Session" msgstr "Sitzung beitreten" +#: src/ui/gui/netplay_page.slint:33 +msgctxt "Netplay" +msgid "Netplay" +msgstr "Netplay" + +#: src/ui/gui/netplay_page.slint:40 +msgctxt "Netplay" +msgid "Create Session" +msgstr "Sitzung erstellen" + +#: src/ui/gui/netplay_page.slint:50 +msgctxt "Netplay" +msgid "Join Session" +msgstr "Sitzung beitreten" + +#: src/ui/gui/netplay_page.slint:64 +msgctxt "Netplay" +msgid "Netplay Discord Channel" +msgstr "Netplay-Discord-Kanal" + +#: src/ui/gui/netplay_page.slint:71 +msgctxt "Netplay" +msgid "Provide Feedback" +msgstr "Feedback geben" + +#: src/ui/gui/netplay_page.slint:82 +msgctxt "CustomNetplayServer" +msgid "Custom Netplay Server" +msgstr "Benutzerdefinierter Netplay-Server" + +#: src/ui/gui/netplay_wait.slint:14 +msgctxt "NetplayWait" +msgid "Netplay: Waiting Room" +msgstr "Netplay: Warteraum" + +#: src/ui/gui/netplay_wait.slint:31 +msgctxt "NetplayWait" +msgid "Session Name:" +msgstr "Sitzungsname:" + +#: src/ui/gui/netplay_wait.slint:37 +msgctxt "NetplayWait" +msgid "Game Name:" +msgstr "Spielname:" + +#: src/ui/gui/netplay_wait.slint:43 +msgctxt "NetplayWait" +msgid "Ping:" +msgstr "Ping:" + +#: src/ui/gui/netplay_wait.slint:50 +msgctxt "NetplayWait" +msgid "Player 1:" +msgstr "Spieler 1:" + +#: src/ui/gui/netplay_wait.slint:54 +msgctxt "NetplayWait" +msgid "Player 2:" +msgstr "Spieler 2:" + +#: src/ui/gui/netplay_wait.slint:60 +msgctxt "NetplayWait" +msgid "Player 3:" +msgstr "Spieler 3:" + +#: src/ui/gui/netplay_wait.slint:64 +msgctxt "NetplayWait" +msgid "Player 4:" +msgstr "Spieler 4:" + +#: src/ui/gui/netplay_wait.slint:76 +msgctxt "NetplayWait" +msgid "Enter chat message" +msgstr "Chatnachricht eingeben" + +#: src/ui/gui/netplay_wait.slint:87 +msgctxt "NetplayWait" +msgid "Send Message" +msgstr "Nachricht senden" + +#: src/ui/gui/netplay_wait.slint:102 +msgctxt "NetplayWait" +msgid "Start Game" +msgstr "Spiel starten" + #: src/ui/gui/retroachievements_page.slint:19 msgctxt "RAData" msgid "Not currently logged in" @@ -466,82 +486,62 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Unterstützte Spiele anzeigen" -#: src/ui/gui/netplay_wait.slint:14 -msgctxt "NetplayWait" -msgid "Netplay: Waiting Room" -msgstr "Netplay: Warteraum" +#: src/ui/gui/settings_page.slint:22 +msgctxt "Settings" +msgid "Settings" +msgstr "Einstellungen" -#: src/ui/gui/netplay_wait.slint:31 -msgctxt "NetplayWait" -msgid "Session Name:" -msgstr "Sitzungsname:" +#: src/ui/gui/settings_page.slint:29 +msgctxt "Settings" +msgid "Resolution:" +msgstr "Auflösung:" -#: src/ui/gui/netplay_wait.slint:37 -msgctxt "NetplayWait" -msgid "Game Name:" -msgstr "Spielname:" +#: src/ui/gui/settings_page.slint:45 +msgctxt "Settings" +msgid "SSAA downscaling" +msgstr "SSAA-Herunterskalierung" -#: src/ui/gui/netplay_wait.slint:43 -msgctxt "NetplayWait" -msgid "Ping:" -msgstr "Ping:" +#: src/ui/gui/settings_page.slint:56 +msgctxt "Settings" +msgid "Integer Scaling" +msgstr "Pixelgenaue Skalierung" -#: src/ui/gui/netplay_wait.slint:50 -msgctxt "NetplayWait" -msgid "Player 1:" -msgstr "Spieler 1:" +#: src/ui/gui/settings_page.slint:67 +msgctxt "Settings" +msgid "Fullscreen" +msgstr "Vollbild" -#: src/ui/gui/netplay_wait.slint:54 -msgctxt "NetplayWait" -msgid "Player 2:" -msgstr "Spieler 2:" +#: src/ui/gui/settings_page.slint:78 +msgctxt "Settings" +msgid "Widescreen (stretch)" +msgstr "16:9 (gestreckt)" -#: src/ui/gui/netplay_wait.slint:60 -msgctxt "NetplayWait" -msgid "Player 3:" -msgstr "Spieler 3:" +#: src/ui/gui/settings_page.slint:89 +msgctxt "Settings" +msgid "VSync" +msgstr "VSync" -#: src/ui/gui/netplay_wait.slint:64 -msgctxt "NetplayWait" -msgid "Player 4:" -msgstr "Spieler 4:" +#: src/ui/gui/settings_page.slint:100 +msgctxt "Settings" +msgid "Apply CRT shader" +msgstr "CRT-Shader anwenden" -#: src/ui/gui/netplay_wait.slint:76 -msgctxt "NetplayWait" -msgid "Enter chat message" -msgstr "Chatnachricht eingeben" +#: src/ui/gui/settings_page.slint:115 +msgctxt "Settings" +msgid "Overclock N64 CPU (may cause bugs)" +msgstr "N64-CPU übertakten (kann Fehler verursachen)" -#: src/ui/gui/netplay_wait.slint:87 -msgctxt "NetplayWait" -msgid "Send Message" -msgstr "Nachricht senden" +#: src/ui/gui/settings_page.slint:126 +msgctxt "Settings" +msgid "Disable Expansion Pak" +msgstr "Expansion Pak deaktivieren" -#: src/ui/gui/netplay_wait.slint:102 -msgctxt "NetplayWait" -msgid "Start Game" -msgstr "Spiel starten" +#: src/ui/gui/settings_page.slint:137 +msgctxt "Settings" +msgid "Emulate UNFLoader" +msgstr "UNFLoader emulieren" -#: src/ui/gui/input_profile.slint:10 -msgctxt "InputProfileDialog" -msgid "Create/Modify Input Profile" -msgstr "Eingabeprofil erstellen/bearbeiten" - -#: src/ui/gui/input_profile.slint:18 -msgctxt "InputProfileDialog" -msgid "Enter profile name to create or modify" -msgstr "Profilname zum Erstellen oder Bearbeiten eingeben" - -#: src/ui/gui/input_profile.slint:29 -msgctxt "InputProfileDialog" -msgid "Deadzone Percentage" -msgstr "Deadzone Größe in Prozent" - -#: src/ui/gui/input_profile.slint:51 -msgctxt "InputProfileDialog" -msgid "Use DirectInput" -msgstr "DirectInput verwenden" - -#: src/ui/gui/input_profile.slint:61 -msgctxt "InputProfileDialog" -msgid "Start Profile Creation Wizard" -msgstr "Assistent zur Profilerstellung starten" +#: src/ui/gui/vru_dialog.slint:7 +msgctxt "VruDialog" +msgid "What Would You Like To Say?" +msgstr "Was möchten Sie sagen?" diff --git a/data/translations/es/LC_MESSAGES/gopher64.po b/data/translations/es/LC_MESSAGES/gopher64.po index 5ded824..a862e46 100644 --- a/data/translations/es/LC_MESSAGES/gopher64.po +++ b/data/translations/es/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-14 13:42+0000\n" +"POT-Creation-Date: 2026-05-14 14:53+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: Gemini\n" "Language-Team: Spanish (Spain)\n" @@ -47,6 +47,46 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Donar (a través de GitHub)" +#: src/ui/gui/appwindow.slint:95 +msgctxt "Menu" +msgid "Local Game" +msgstr "Juego local" + +#: src/ui/gui/appwindow.slint:96 +msgctxt "Menu" +msgid "Controller Config" +msgstr "Config. del mando" + +#: src/ui/gui/appwindow.slint:97 +msgctxt "Menu" +msgid "Netplay" +msgstr "Netplay" + +#: src/ui/gui/appwindow.slint:98 +msgctxt "Menu" +msgid "Cheats" +msgstr "Trucos" + +#: src/ui/gui/appwindow.slint:99 +msgctxt "Menu" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/appwindow.slint:100 +msgctxt "Menu" +msgid "Settings" +msgstr "Ajustes" + +#: src/ui/gui/appwindow.slint:101 +msgctxt "Menu" +msgid "About" +msgstr "Acerca de" + +#: src/ui/gui/appwindow.slint:195 +msgctxt "ErrorDialog" +msgid "Error" +msgstr "Error" + #: src/ui/gui/cheat_page.slint:15 msgctxt "Cheats" msgid "Cheats" @@ -107,6 +147,31 @@ msgctxt "ControllerConfig" msgid "Controller" msgstr "Mando" +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "Crear/Modificar perfil de entrada" + +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "Introduce el nombre del perfil para crear o modificar" + +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "Porcentaje de zona muerta" + +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "Usar DirectInput" + +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "Iniciar asistente de creación de perfil" + #: src/ui/gui/localgame_page.slint:18 msgctxt "LocalGame" msgid "Local Game" @@ -127,136 +192,6 @@ msgctxt "LocalGame" msgid "Recent ROMs" msgstr "ROMs recientes" -#: src/ui/gui/netplay_page.slint:33 -msgctxt "Netplay" -msgid "Netplay" -msgstr "Netplay" - -#: src/ui/gui/netplay_page.slint:40 -msgctxt "Netplay" -msgid "Create Session" -msgstr "Crear sesión" - -#: src/ui/gui/netplay_page.slint:50 -msgctxt "Netplay" -msgid "Join Session" -msgstr "Unirse a la sesión" - -#: src/ui/gui/netplay_page.slint:64 -msgctxt "Netplay" -msgid "Netplay Discord Channel" -msgstr "Canal de Discord de Netplay" - -#: src/ui/gui/netplay_page.slint:71 -msgctxt "Netplay" -msgid "Provide Feedback" -msgstr "Enviar comentarios" - -#: src/ui/gui/netplay_page.slint:82 -msgctxt "CustomNetplayServer" -msgid "Custom Netplay Server" -msgstr "Servidor de Netplay personalizado" - -#: src/ui/gui/settings_page.slint:22 -msgctxt "Settings" -msgid "Settings" -msgstr "Ajustes" - -#: src/ui/gui/settings_page.slint:29 -msgctxt "Settings" -msgid "Resolution:" -msgstr "Resolución:" - -#: src/ui/gui/settings_page.slint:45 -msgctxt "Settings" -msgid "SSAA downscaling" -msgstr "Reducción de escala SSAA" - -#: src/ui/gui/settings_page.slint:56 -msgctxt "Settings" -msgid "Integer Scaling" -msgstr "Escalado por enteros" - -#: src/ui/gui/settings_page.slint:67 -msgctxt "Settings" -msgid "Fullscreen" -msgstr "Pantalla completa" - -#: src/ui/gui/settings_page.slint:78 -msgctxt "Settings" -msgid "Widescreen (stretch)" -msgstr "Pantalla ancha (estirado)" - -#: src/ui/gui/settings_page.slint:89 -msgctxt "Settings" -msgid "VSync" -msgstr "Sincronización vertical (VSync)" - -#: src/ui/gui/settings_page.slint:100 -msgctxt "Settings" -msgid "Apply CRT shader" -msgstr "Aplicar sombreador CRT" - -#: src/ui/gui/settings_page.slint:115 -msgctxt "Settings" -msgid "Overclock N64 CPU (may cause bugs)" -msgstr "Overclock CPU N64 (puede causar errores)" - -#: src/ui/gui/settings_page.slint:126 -msgctxt "Settings" -msgid "Disable Expansion Pak" -msgstr "Desactivar Expansion Pak" - -#: src/ui/gui/settings_page.slint:137 -msgctxt "Settings" -msgid "Emulate UNFLoader" -msgstr "Emular UNFLoader" - -#: src/ui/gui/vru_dialog.slint:7 -msgctxt "VruDialog" -msgid "What Would You Like To Say?" -msgstr "¿Qué te gustaría decir?" - -#: src/ui/gui/appwindow.slint:95 -msgctxt "Menu" -msgid "Local Game" -msgstr "Juego local" - -#: src/ui/gui/appwindow.slint:96 -msgctxt "Menu" -msgid "Controller Config" -msgstr "Config. del mando" - -#: src/ui/gui/appwindow.slint:97 -msgctxt "Menu" -msgid "Netplay" -msgstr "Netplay" - -#: src/ui/gui/appwindow.slint:98 -msgctxt "Menu" -msgid "Cheats" -msgstr "Trucos" - -#: src/ui/gui/appwindow.slint:99 -msgctxt "Menu" -msgid "RetroAchievements" -msgstr "RetroAchievements" - -#: src/ui/gui/appwindow.slint:100 -msgctxt "Menu" -msgid "Settings" -msgstr "Ajustes" - -#: src/ui/gui/appwindow.slint:101 -msgctxt "Menu" -msgid "About" -msgstr "Acerca de" - -#: src/ui/gui/appwindow.slint:195 -msgctxt "ErrorDialog" -msgid "Error" -msgstr "Error" - #: src/ui/gui/netplay_create.slint:5 msgctxt "NetplayCreate" msgid "Netplay: Create Session" @@ -405,6 +340,91 @@ msgctxt "NetplayJoin" msgid "Join Session" msgstr "Unirse a la sesión" +#: src/ui/gui/netplay_page.slint:33 +msgctxt "Netplay" +msgid "Netplay" +msgstr "Netplay" + +#: src/ui/gui/netplay_page.slint:40 +msgctxt "Netplay" +msgid "Create Session" +msgstr "Crear sesión" + +#: src/ui/gui/netplay_page.slint:50 +msgctxt "Netplay" +msgid "Join Session" +msgstr "Unirse a la sesión" + +#: src/ui/gui/netplay_page.slint:64 +msgctxt "Netplay" +msgid "Netplay Discord Channel" +msgstr "Canal de Discord de Netplay" + +#: src/ui/gui/netplay_page.slint:71 +msgctxt "Netplay" +msgid "Provide Feedback" +msgstr "Enviar comentarios" + +#: src/ui/gui/netplay_page.slint:82 +msgctxt "CustomNetplayServer" +msgid "Custom Netplay Server" +msgstr "Servidor de Netplay personalizado" + +#: src/ui/gui/netplay_wait.slint:14 +msgctxt "NetplayWait" +msgid "Netplay: Waiting Room" +msgstr "Netplay: Sala de espera" + +#: src/ui/gui/netplay_wait.slint:31 +msgctxt "NetplayWait" +msgid "Session Name:" +msgstr "Nombre de la sesión:" + +#: src/ui/gui/netplay_wait.slint:37 +msgctxt "NetplayWait" +msgid "Game Name:" +msgstr "Nombre del juego:" + +#: src/ui/gui/netplay_wait.slint:43 +msgctxt "NetplayWait" +msgid "Ping:" +msgstr "Latencia (Ping):" + +#: src/ui/gui/netplay_wait.slint:50 +msgctxt "NetplayWait" +msgid "Player 1:" +msgstr "Jugador 1:" + +#: src/ui/gui/netplay_wait.slint:54 +msgctxt "NetplayWait" +msgid "Player 2:" +msgstr "Jugador 2:" + +#: src/ui/gui/netplay_wait.slint:60 +msgctxt "NetplayWait" +msgid "Player 3:" +msgstr "Jugador 3:" + +#: src/ui/gui/netplay_wait.slint:64 +msgctxt "NetplayWait" +msgid "Player 4:" +msgstr "Jugador 4:" + +#: src/ui/gui/netplay_wait.slint:76 +msgctxt "NetplayWait" +msgid "Enter chat message" +msgstr "Escribe un mensaje en el chat" + +#: src/ui/gui/netplay_wait.slint:87 +msgctxt "NetplayWait" +msgid "Send Message" +msgstr "Enviar mensaje" + +#: src/ui/gui/netplay_wait.slint:102 +msgctxt "NetplayWait" +msgid "Start Game" +msgstr "Iniciar juego" + #: src/ui/gui/retroachievements_page.slint:19 msgctxt "RAData" msgid "Not currently logged in" @@ -465,82 +485,62 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Ver juegos compatibles" -#: src/ui/gui/netplay_wait.slint:14 -msgctxt "NetplayWait" -msgid "Netplay: Waiting Room" -msgstr "Netplay: Sala de espera" +#: src/ui/gui/settings_page.slint:22 +msgctxt "Settings" +msgid "Settings" +msgstr "Ajustes" -#: src/ui/gui/netplay_wait.slint:31 -msgctxt "NetplayWait" -msgid "Session Name:" -msgstr "Nombre de la sesión:" +#: src/ui/gui/settings_page.slint:29 +msgctxt "Settings" +msgid "Resolution:" +msgstr "Resolución:" -#: src/ui/gui/netplay_wait.slint:37 -msgctxt "NetplayWait" -msgid "Game Name:" -msgstr "Nombre del juego:" +#: src/ui/gui/settings_page.slint:45 +msgctxt "Settings" +msgid "SSAA downscaling" +msgstr "Reducción de escala SSAA" -#: src/ui/gui/netplay_wait.slint:43 -msgctxt "NetplayWait" -msgid "Ping:" -msgstr "Latencia (Ping):" +#: src/ui/gui/settings_page.slint:56 +msgctxt "Settings" +msgid "Integer Scaling" +msgstr "Escalado por enteros" -#: src/ui/gui/netplay_wait.slint:50 -msgctxt "NetplayWait" -msgid "Player 1:" -msgstr "Jugador 1:" +#: src/ui/gui/settings_page.slint:67 +msgctxt "Settings" +msgid "Fullscreen" +msgstr "Pantalla completa" -#: src/ui/gui/netplay_wait.slint:54 -msgctxt "NetplayWait" -msgid "Player 2:" -msgstr "Jugador 2:" +#: src/ui/gui/settings_page.slint:78 +msgctxt "Settings" +msgid "Widescreen (stretch)" +msgstr "Pantalla ancha (estirado)" -#: src/ui/gui/netplay_wait.slint:60 -msgctxt "NetplayWait" -msgid "Player 3:" -msgstr "Jugador 3:" +#: src/ui/gui/settings_page.slint:89 +msgctxt "Settings" +msgid "VSync" +msgstr "Sincronización vertical (VSync)" -#: src/ui/gui/netplay_wait.slint:64 -msgctxt "NetplayWait" -msgid "Player 4:" -msgstr "Jugador 4:" +#: src/ui/gui/settings_page.slint:100 +msgctxt "Settings" +msgid "Apply CRT shader" +msgstr "Aplicar sombreador CRT" -#: src/ui/gui/netplay_wait.slint:76 -msgctxt "NetplayWait" -msgid "Enter chat message" -msgstr "Escribe un mensaje en el chat" +#: src/ui/gui/settings_page.slint:115 +msgctxt "Settings" +msgid "Overclock N64 CPU (may cause bugs)" +msgstr "Overclock CPU N64 (puede causar errores)" -#: src/ui/gui/netplay_wait.slint:87 -msgctxt "NetplayWait" -msgid "Send Message" -msgstr "Enviar mensaje" +#: src/ui/gui/settings_page.slint:126 +msgctxt "Settings" +msgid "Disable Expansion Pak" +msgstr "Desactivar Expansion Pak" -#: src/ui/gui/netplay_wait.slint:102 -msgctxt "NetplayWait" -msgid "Start Game" -msgstr "Iniciar juego" +#: src/ui/gui/settings_page.slint:137 +msgctxt "Settings" +msgid "Emulate UNFLoader" +msgstr "Emular UNFLoader" -#: src/ui/gui/input_profile.slint:10 -msgctxt "InputProfileDialog" -msgid "Create/Modify Input Profile" -msgstr "Crear/Modificar perfil de entrada" - -#: src/ui/gui/input_profile.slint:18 -msgctxt "InputProfileDialog" -msgid "Enter profile name to create or modify" -msgstr "Introduce el nombre del perfil para crear o modificar" - -#: src/ui/gui/input_profile.slint:29 -msgctxt "InputProfileDialog" -msgid "Deadzone Percentage" -msgstr "Porcentaje de zona muerta" - -#: src/ui/gui/input_profile.slint:51 -msgctxt "InputProfileDialog" -msgid "Use DirectInput" -msgstr "Usar DirectInput" - -#: src/ui/gui/input_profile.slint:61 -msgctxt "InputProfileDialog" -msgid "Start Profile Creation Wizard" -msgstr "Iniciar asistente de creación de perfil" +#: src/ui/gui/vru_dialog.slint:7 +msgctxt "VruDialog" +msgid "What Would You Like To Say?" +msgstr "¿Qué te gustaría decir?" diff --git a/data/translations/fr/LC_MESSAGES/gopher64.po b/data/translations/fr/LC_MESSAGES/gopher64.po index 7714cbe..71b7e0e 100644 --- a/data/translations/fr/LC_MESSAGES/gopher64.po +++ b/data/translations/fr/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-14 13:42+0000\n" +"POT-Creation-Date: 2026-05-14 14:53+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: French (France)\n" @@ -47,6 +47,46 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Faire un don (via GitHub)" +#: src/ui/gui/appwindow.slint:95 +msgctxt "Menu" +msgid "Local Game" +msgstr "Jeu local" + +#: src/ui/gui/appwindow.slint:96 +msgctxt "Menu" +msgid "Controller Config" +msgstr "Configuration manette" + +#: src/ui/gui/appwindow.slint:97 +msgctxt "Menu" +msgid "Netplay" +msgstr "Netplay" + +#: src/ui/gui/appwindow.slint:98 +msgctxt "Menu" +msgid "Cheats" +msgstr "Triche" + +#: src/ui/gui/appwindow.slint:99 +msgctxt "Menu" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/appwindow.slint:100 +msgctxt "Menu" +msgid "Settings" +msgstr "Paramètres" + +#: src/ui/gui/appwindow.slint:101 +msgctxt "Menu" +msgid "About" +msgstr "À propos" + +#: src/ui/gui/appwindow.slint:195 +msgctxt "ErrorDialog" +msgid "Error" +msgstr "Erreur" + #: src/ui/gui/cheat_page.slint:15 msgctxt "Cheats" msgid "Cheats" @@ -107,6 +147,31 @@ msgctxt "ControllerConfig" msgid "Controller" msgstr "Manette" +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "Créer / modifier le profil d'entrée" + +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "Saisir le nom du profil à créer ou à modifier" + +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "Pourcentage de zone morte" + +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "Utiliser DirectInput" + +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "Lancer l'assistant de création de profil" + #: src/ui/gui/localgame_page.slint:18 msgctxt "LocalGame" msgid "Local Game" @@ -127,136 +192,6 @@ msgctxt "LocalGame" msgid "Recent ROMs" msgstr "ROMs récentes" -#: src/ui/gui/netplay_page.slint:33 -msgctxt "Netplay" -msgid "Netplay" -msgstr "Netplay" - -#: src/ui/gui/netplay_page.slint:40 -msgctxt "Netplay" -msgid "Create Session" -msgstr "Créer une session" - -#: src/ui/gui/netplay_page.slint:50 -msgctxt "Netplay" -msgid "Join Session" -msgstr "Rejoindre une session" - -#: src/ui/gui/netplay_page.slint:64 -msgctxt "Netplay" -msgid "Netplay Discord Channel" -msgstr "Salon Discord Netplay" - -#: src/ui/gui/netplay_page.slint:71 -msgctxt "Netplay" -msgid "Provide Feedback" -msgstr "Donner votre avis" - -#: src/ui/gui/netplay_page.slint:82 -msgctxt "CustomNetplayServer" -msgid "Custom Netplay Server" -msgstr "Serveur Netplay personnalisé" - -#: src/ui/gui/settings_page.slint:22 -msgctxt "Settings" -msgid "Settings" -msgstr "Paramètres" - -#: src/ui/gui/settings_page.slint:29 -msgctxt "Settings" -msgid "Resolution:" -msgstr "Résolution :" - -#: src/ui/gui/settings_page.slint:45 -msgctxt "Settings" -msgid "SSAA downscaling" -msgstr "Réduction SSAA" - -#: src/ui/gui/settings_page.slint:56 -msgctxt "Settings" -msgid "Integer Scaling" -msgstr "Mise à l'échelle par entiers" - -#: src/ui/gui/settings_page.slint:67 -msgctxt "Settings" -msgid "Fullscreen" -msgstr "Plein écran" - -#: src/ui/gui/settings_page.slint:78 -msgctxt "Settings" -msgid "Widescreen (stretch)" -msgstr "Écran large (étiré)" - -#: src/ui/gui/settings_page.slint:89 -msgctxt "Settings" -msgid "VSync" -msgstr "Synchro verticale" - -#: src/ui/gui/settings_page.slint:100 -msgctxt "Settings" -msgid "Apply CRT shader" -msgstr "Appliquer le filtre CRT" - -#: src/ui/gui/settings_page.slint:115 -msgctxt "Settings" -msgid "Overclock N64 CPU (may cause bugs)" -msgstr "Surcharger le CPU N64 (risque de bugs)" - -#: src/ui/gui/settings_page.slint:126 -msgctxt "Settings" -msgid "Disable Expansion Pak" -msgstr "Désactiver l'Expansion Pak" - -#: src/ui/gui/settings_page.slint:137 -msgctxt "Settings" -msgid "Emulate UNFLoader" -msgstr "Émuler UNFLoader" - -#: src/ui/gui/vru_dialog.slint:7 -msgctxt "VruDialog" -msgid "What Would You Like To Say?" -msgstr "Que souhaitez-vous dire ?" - -#: src/ui/gui/appwindow.slint:95 -msgctxt "Menu" -msgid "Local Game" -msgstr "Jeu local" - -#: src/ui/gui/appwindow.slint:96 -msgctxt "Menu" -msgid "Controller Config" -msgstr "Configuration manette" - -#: src/ui/gui/appwindow.slint:97 -msgctxt "Menu" -msgid "Netplay" -msgstr "Netplay" - -#: src/ui/gui/appwindow.slint:98 -msgctxt "Menu" -msgid "Cheats" -msgstr "Triche" - -#: src/ui/gui/appwindow.slint:99 -msgctxt "Menu" -msgid "RetroAchievements" -msgstr "RetroAchievements" - -#: src/ui/gui/appwindow.slint:100 -msgctxt "Menu" -msgid "Settings" -msgstr "Paramètres" - -#: src/ui/gui/appwindow.slint:101 -msgctxt "Menu" -msgid "About" -msgstr "À propos" - -#: src/ui/gui/appwindow.slint:195 -msgctxt "ErrorDialog" -msgid "Error" -msgstr "Erreur" - #: src/ui/gui/netplay_create.slint:5 msgctxt "NetplayCreate" msgid "Netplay: Create Session" @@ -408,6 +343,91 @@ msgctxt "NetplayJoin" msgid "Join Session" msgstr "Rejoindre la session" +#: src/ui/gui/netplay_page.slint:33 +msgctxt "Netplay" +msgid "Netplay" +msgstr "Netplay" + +#: src/ui/gui/netplay_page.slint:40 +msgctxt "Netplay" +msgid "Create Session" +msgstr "Créer une session" + +#: src/ui/gui/netplay_page.slint:50 +msgctxt "Netplay" +msgid "Join Session" +msgstr "Rejoindre une session" + +#: src/ui/gui/netplay_page.slint:64 +msgctxt "Netplay" +msgid "Netplay Discord Channel" +msgstr "Salon Discord Netplay" + +#: src/ui/gui/netplay_page.slint:71 +msgctxt "Netplay" +msgid "Provide Feedback" +msgstr "Donner votre avis" + +#: src/ui/gui/netplay_page.slint:82 +msgctxt "CustomNetplayServer" +msgid "Custom Netplay Server" +msgstr "Serveur Netplay personnalisé" + +#: src/ui/gui/netplay_wait.slint:14 +msgctxt "NetplayWait" +msgid "Netplay: Waiting Room" +msgstr "Netplay : salle d'attente" + +#: src/ui/gui/netplay_wait.slint:31 +msgctxt "NetplayWait" +msgid "Session Name:" +msgstr "Nom de la session :" + +#: src/ui/gui/netplay_wait.slint:37 +msgctxt "NetplayWait" +msgid "Game Name:" +msgstr "Nom du jeu :" + +#: src/ui/gui/netplay_wait.slint:43 +msgctxt "NetplayWait" +msgid "Ping:" +msgstr "Ping :" + +#: src/ui/gui/netplay_wait.slint:50 +msgctxt "NetplayWait" +msgid "Player 1:" +msgstr "Joueur 1 :" + +#: src/ui/gui/netplay_wait.slint:54 +msgctxt "NetplayWait" +msgid "Player 2:" +msgstr "Joueur 2 :" + +#: src/ui/gui/netplay_wait.slint:60 +msgctxt "NetplayWait" +msgid "Player 3:" +msgstr "Joueur 3 :" + +#: src/ui/gui/netplay_wait.slint:64 +msgctxt "NetplayWait" +msgid "Player 4:" +msgstr "Joueur 4 :" + +#: src/ui/gui/netplay_wait.slint:76 +msgctxt "NetplayWait" +msgid "Enter chat message" +msgstr "Saisir un message" + +#: src/ui/gui/netplay_wait.slint:87 +msgctxt "NetplayWait" +msgid "Send Message" +msgstr "Envoyer" + +#: src/ui/gui/netplay_wait.slint:102 +msgctxt "NetplayWait" +msgid "Start Game" +msgstr "Lancer la partie" + #: src/ui/gui/retroachievements_page.slint:19 msgctxt "RAData" msgid "Not currently logged in" @@ -468,82 +488,62 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Voir les jeux pris en charge" -#: src/ui/gui/netplay_wait.slint:14 -msgctxt "NetplayWait" -msgid "Netplay: Waiting Room" -msgstr "Netplay : salle d'attente" +#: src/ui/gui/settings_page.slint:22 +msgctxt "Settings" +msgid "Settings" +msgstr "Paramètres" -#: src/ui/gui/netplay_wait.slint:31 -msgctxt "NetplayWait" -msgid "Session Name:" -msgstr "Nom de la session :" +#: src/ui/gui/settings_page.slint:29 +msgctxt "Settings" +msgid "Resolution:" +msgstr "Résolution :" -#: src/ui/gui/netplay_wait.slint:37 -msgctxt "NetplayWait" -msgid "Game Name:" -msgstr "Nom du jeu :" +#: src/ui/gui/settings_page.slint:45 +msgctxt "Settings" +msgid "SSAA downscaling" +msgstr "Réduction SSAA" -#: src/ui/gui/netplay_wait.slint:43 -msgctxt "NetplayWait" -msgid "Ping:" -msgstr "Ping :" +#: src/ui/gui/settings_page.slint:56 +msgctxt "Settings" +msgid "Integer Scaling" +msgstr "Mise à l'échelle par entiers" -#: src/ui/gui/netplay_wait.slint:50 -msgctxt "NetplayWait" -msgid "Player 1:" -msgstr "Joueur 1 :" +#: src/ui/gui/settings_page.slint:67 +msgctxt "Settings" +msgid "Fullscreen" +msgstr "Plein écran" -#: src/ui/gui/netplay_wait.slint:54 -msgctxt "NetplayWait" -msgid "Player 2:" -msgstr "Joueur 2 :" +#: src/ui/gui/settings_page.slint:78 +msgctxt "Settings" +msgid "Widescreen (stretch)" +msgstr "Écran large (étiré)" -#: src/ui/gui/netplay_wait.slint:60 -msgctxt "NetplayWait" -msgid "Player 3:" -msgstr "Joueur 3 :" +#: src/ui/gui/settings_page.slint:89 +msgctxt "Settings" +msgid "VSync" +msgstr "Synchro verticale" -#: src/ui/gui/netplay_wait.slint:64 -msgctxt "NetplayWait" -msgid "Player 4:" -msgstr "Joueur 4 :" +#: src/ui/gui/settings_page.slint:100 +msgctxt "Settings" +msgid "Apply CRT shader" +msgstr "Appliquer le filtre CRT" -#: src/ui/gui/netplay_wait.slint:76 -msgctxt "NetplayWait" -msgid "Enter chat message" -msgstr "Saisir un message" +#: src/ui/gui/settings_page.slint:115 +msgctxt "Settings" +msgid "Overclock N64 CPU (may cause bugs)" +msgstr "Surcharger le CPU N64 (risque de bugs)" -#: src/ui/gui/netplay_wait.slint:87 -msgctxt "NetplayWait" -msgid "Send Message" -msgstr "Envoyer" +#: src/ui/gui/settings_page.slint:126 +msgctxt "Settings" +msgid "Disable Expansion Pak" +msgstr "Désactiver l'Expansion Pak" -#: src/ui/gui/netplay_wait.slint:102 -msgctxt "NetplayWait" -msgid "Start Game" -msgstr "Lancer la partie" +#: src/ui/gui/settings_page.slint:137 +msgctxt "Settings" +msgid "Emulate UNFLoader" +msgstr "Émuler UNFLoader" -#: src/ui/gui/input_profile.slint:10 -msgctxt "InputProfileDialog" -msgid "Create/Modify Input Profile" -msgstr "Créer / modifier le profil d'entrée" - -#: src/ui/gui/input_profile.slint:18 -msgctxt "InputProfileDialog" -msgid "Enter profile name to create or modify" -msgstr "Saisir le nom du profil à créer ou à modifier" - -#: src/ui/gui/input_profile.slint:29 -msgctxt "InputProfileDialog" -msgid "Deadzone Percentage" -msgstr "Pourcentage de zone morte" - -#: src/ui/gui/input_profile.slint:51 -msgctxt "InputProfileDialog" -msgid "Use DirectInput" -msgstr "Utiliser DirectInput" - -#: src/ui/gui/input_profile.slint:61 -msgctxt "InputProfileDialog" -msgid "Start Profile Creation Wizard" -msgstr "Lancer l'assistant de création de profil" +#: src/ui/gui/vru_dialog.slint:7 +msgctxt "VruDialog" +msgid "What Would You Like To Say?" +msgstr "Que souhaitez-vous dire ?" diff --git a/data/translations/gopher64.pot b/data/translations/gopher64.pot index ffb8520..16574dd 100644 --- a/data/translations/gopher64.pot +++ b/data/translations/gopher64.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-05-14 13:42+0000\n" +"POT-Creation-Date: 2026-05-14 14:53+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -47,6 +47,46 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "" +#: src/ui/gui/appwindow.slint:95 +msgctxt "Menu" +msgid "Local Game" +msgstr "" + +#: src/ui/gui/appwindow.slint:96 +msgctxt "Menu" +msgid "Controller Config" +msgstr "" + +#: src/ui/gui/appwindow.slint:97 +msgctxt "Menu" +msgid "Netplay" +msgstr "" + +#: src/ui/gui/appwindow.slint:98 +msgctxt "Menu" +msgid "Cheats" +msgstr "" + +#: src/ui/gui/appwindow.slint:99 +msgctxt "Menu" +msgid "RetroAchievements" +msgstr "" + +#: src/ui/gui/appwindow.slint:100 +msgctxt "Menu" +msgid "Settings" +msgstr "" + +#: src/ui/gui/appwindow.slint:101 +msgctxt "Menu" +msgid "About" +msgstr "" + +#: src/ui/gui/appwindow.slint:195 +msgctxt "ErrorDialog" +msgid "Error" +msgstr "" + #: src/ui/gui/cheat_page.slint:15 msgctxt "Cheats" msgid "Cheats" @@ -107,6 +147,31 @@ msgctxt "ControllerConfig" msgid "Controller" msgstr "" +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "" + +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "" + +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "" + +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "" + +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "" + #: src/ui/gui/localgame_page.slint:18 msgctxt "LocalGame" msgid "Local Game" @@ -127,136 +192,6 @@ msgctxt "LocalGame" msgid "Recent ROMs" msgstr "" -#: src/ui/gui/netplay_page.slint:33 -msgctxt "Netplay" -msgid "Netplay" -msgstr "" - -#: src/ui/gui/netplay_page.slint:40 -msgctxt "Netplay" -msgid "Create Session" -msgstr "" - -#: src/ui/gui/netplay_page.slint:50 -msgctxt "Netplay" -msgid "Join Session" -msgstr "" - -#: src/ui/gui/netplay_page.slint:64 -msgctxt "Netplay" -msgid "Netplay Discord Channel" -msgstr "" - -#: src/ui/gui/netplay_page.slint:71 -msgctxt "Netplay" -msgid "Provide Feedback" -msgstr "" - -#: src/ui/gui/netplay_page.slint:82 -msgctxt "CustomNetplayServer" -msgid "Custom Netplay Server" -msgstr "" - -#: src/ui/gui/settings_page.slint:22 -msgctxt "Settings" -msgid "Settings" -msgstr "" - -#: src/ui/gui/settings_page.slint:29 -msgctxt "Settings" -msgid "Resolution:" -msgstr "" - -#: src/ui/gui/settings_page.slint:45 -msgctxt "Settings" -msgid "SSAA downscaling" -msgstr "" - -#: src/ui/gui/settings_page.slint:56 -msgctxt "Settings" -msgid "Integer Scaling" -msgstr "" - -#: src/ui/gui/settings_page.slint:67 -msgctxt "Settings" -msgid "Fullscreen" -msgstr "" - -#: src/ui/gui/settings_page.slint:78 -msgctxt "Settings" -msgid "Widescreen (stretch)" -msgstr "" - -#: src/ui/gui/settings_page.slint:89 -msgctxt "Settings" -msgid "VSync" -msgstr "" - -#: src/ui/gui/settings_page.slint:100 -msgctxt "Settings" -msgid "Apply CRT shader" -msgstr "" - -#: src/ui/gui/settings_page.slint:115 -msgctxt "Settings" -msgid "Overclock N64 CPU (may cause bugs)" -msgstr "" - -#: src/ui/gui/settings_page.slint:126 -msgctxt "Settings" -msgid "Disable Expansion Pak" -msgstr "" - -#: src/ui/gui/settings_page.slint:137 -msgctxt "Settings" -msgid "Emulate UNFLoader" -msgstr "" - -#: src/ui/gui/vru_dialog.slint:7 -msgctxt "VruDialog" -msgid "What Would You Like To Say?" -msgstr "" - -#: src/ui/gui/appwindow.slint:95 -msgctxt "Menu" -msgid "Local Game" -msgstr "" - -#: src/ui/gui/appwindow.slint:96 -msgctxt "Menu" -msgid "Controller Config" -msgstr "" - -#: src/ui/gui/appwindow.slint:97 -msgctxt "Menu" -msgid "Netplay" -msgstr "" - -#: src/ui/gui/appwindow.slint:98 -msgctxt "Menu" -msgid "Cheats" -msgstr "" - -#: src/ui/gui/appwindow.slint:99 -msgctxt "Menu" -msgid "RetroAchievements" -msgstr "" - -#: src/ui/gui/appwindow.slint:100 -msgctxt "Menu" -msgid "Settings" -msgstr "" - -#: src/ui/gui/appwindow.slint:101 -msgctxt "Menu" -msgid "About" -msgstr "" - -#: src/ui/gui/appwindow.slint:195 -msgctxt "ErrorDialog" -msgid "Error" -msgstr "" - #: src/ui/gui/netplay_create.slint:5 msgctxt "NetplayCreate" msgid "Netplay: Create Session" @@ -403,6 +338,91 @@ msgctxt "NetplayJoin" msgid "Join Session" msgstr "" +#: src/ui/gui/netplay_page.slint:33 +msgctxt "Netplay" +msgid "Netplay" +msgstr "" + +#: src/ui/gui/netplay_page.slint:40 +msgctxt "Netplay" +msgid "Create Session" +msgstr "" + +#: src/ui/gui/netplay_page.slint:50 +msgctxt "Netplay" +msgid "Join Session" +msgstr "" + +#: src/ui/gui/netplay_page.slint:64 +msgctxt "Netplay" +msgid "Netplay Discord Channel" +msgstr "" + +#: src/ui/gui/netplay_page.slint:71 +msgctxt "Netplay" +msgid "Provide Feedback" +msgstr "" + +#: src/ui/gui/netplay_page.slint:82 +msgctxt "CustomNetplayServer" +msgid "Custom Netplay Server" +msgstr "" + +#: src/ui/gui/netplay_wait.slint:14 +msgctxt "NetplayWait" +msgid "Netplay: Waiting Room" +msgstr "" + +#: src/ui/gui/netplay_wait.slint:31 +msgctxt "NetplayWait" +msgid "Session Name:" +msgstr "" + +#: src/ui/gui/netplay_wait.slint:37 +msgctxt "NetplayWait" +msgid "Game Name:" +msgstr "" + +#: src/ui/gui/netplay_wait.slint:43 +msgctxt "NetplayWait" +msgid "Ping:" +msgstr "" + +#: src/ui/gui/netplay_wait.slint:50 +msgctxt "NetplayWait" +msgid "Player 1:" +msgstr "" + +#: src/ui/gui/netplay_wait.slint:54 +msgctxt "NetplayWait" +msgid "Player 2:" +msgstr "" + +#: src/ui/gui/netplay_wait.slint:60 +msgctxt "NetplayWait" +msgid "Player 3:" +msgstr "" + +#: src/ui/gui/netplay_wait.slint:64 +msgctxt "NetplayWait" +msgid "Player 4:" +msgstr "" + +#: src/ui/gui/netplay_wait.slint:76 +msgctxt "NetplayWait" +msgid "Enter chat message" +msgstr "" + +#: src/ui/gui/netplay_wait.slint:87 +msgctxt "NetplayWait" +msgid "Send Message" +msgstr "" + +#: src/ui/gui/netplay_wait.slint:102 +msgctxt "NetplayWait" +msgid "Start Game" +msgstr "" + #: src/ui/gui/retroachievements_page.slint:19 msgctxt "RAData" msgid "Not currently logged in" @@ -463,82 +483,62 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "" -#: src/ui/gui/netplay_wait.slint:14 -msgctxt "NetplayWait" -msgid "Netplay: Waiting Room" +#: src/ui/gui/settings_page.slint:22 +msgctxt "Settings" +msgid "Settings" msgstr "" -#: src/ui/gui/netplay_wait.slint:31 -msgctxt "NetplayWait" -msgid "Session Name:" +#: src/ui/gui/settings_page.slint:29 +msgctxt "Settings" +msgid "Resolution:" msgstr "" -#: src/ui/gui/netplay_wait.slint:37 -msgctxt "NetplayWait" -msgid "Game Name:" +#: src/ui/gui/settings_page.slint:45 +msgctxt "Settings" +msgid "SSAA downscaling" msgstr "" -#: src/ui/gui/netplay_wait.slint:43 -msgctxt "NetplayWait" -msgid "Ping:" +#: src/ui/gui/settings_page.slint:56 +msgctxt "Settings" +msgid "Integer Scaling" msgstr "" -#: src/ui/gui/netplay_wait.slint:50 -msgctxt "NetplayWait" -msgid "Player 1:" +#: src/ui/gui/settings_page.slint:67 +msgctxt "Settings" +msgid "Fullscreen" msgstr "" -#: src/ui/gui/netplay_wait.slint:54 -msgctxt "NetplayWait" -msgid "Player 2:" +#: src/ui/gui/settings_page.slint:78 +msgctxt "Settings" +msgid "Widescreen (stretch)" msgstr "" -#: src/ui/gui/netplay_wait.slint:60 -msgctxt "NetplayWait" -msgid "Player 3:" +#: src/ui/gui/settings_page.slint:89 +msgctxt "Settings" +msgid "VSync" msgstr "" -#: src/ui/gui/netplay_wait.slint:64 -msgctxt "NetplayWait" -msgid "Player 4:" +#: src/ui/gui/settings_page.slint:100 +msgctxt "Settings" +msgid "Apply CRT shader" msgstr "" -#: src/ui/gui/netplay_wait.slint:76 -msgctxt "NetplayWait" -msgid "Enter chat message" +#: src/ui/gui/settings_page.slint:115 +msgctxt "Settings" +msgid "Overclock N64 CPU (may cause bugs)" msgstr "" -#: src/ui/gui/netplay_wait.slint:87 -msgctxt "NetplayWait" -msgid "Send Message" +#: src/ui/gui/settings_page.slint:126 +msgctxt "Settings" +msgid "Disable Expansion Pak" msgstr "" -#: src/ui/gui/netplay_wait.slint:102 -msgctxt "NetplayWait" -msgid "Start Game" +#: src/ui/gui/settings_page.slint:137 +msgctxt "Settings" +msgid "Emulate UNFLoader" msgstr "" -#: src/ui/gui/input_profile.slint:10 -msgctxt "InputProfileDialog" -msgid "Create/Modify Input Profile" -msgstr "" - -#: src/ui/gui/input_profile.slint:18 -msgctxt "InputProfileDialog" -msgid "Enter profile name to create or modify" -msgstr "" - -#: src/ui/gui/input_profile.slint:29 -msgctxt "InputProfileDialog" -msgid "Deadzone Percentage" -msgstr "" - -#: src/ui/gui/input_profile.slint:51 -msgctxt "InputProfileDialog" -msgid "Use DirectInput" -msgstr "" - -#: src/ui/gui/input_profile.slint:61 -msgctxt "InputProfileDialog" -msgid "Start Profile Creation Wizard" +#: src/ui/gui/vru_dialog.slint:7 +msgctxt "VruDialog" +msgid "What Would You Like To Say?" msgstr "" diff --git a/data/translations/ja/LC_MESSAGES/gopher64.po b/data/translations/ja/LC_MESSAGES/gopher64.po index a86a1b2..6ddf13b 100644 --- a/data/translations/ja/LC_MESSAGES/gopher64.po +++ b/data/translations/ja/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-14 13:42+0000\n" +"POT-Creation-Date: 2026-05-14 14:53+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Japanese\n" @@ -47,6 +47,46 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "GitHubで寄付" +#: src/ui/gui/appwindow.slint:95 +msgctxt "Menu" +msgid "Local Game" +msgstr "ローカルゲーム" + +#: src/ui/gui/appwindow.slint:96 +msgctxt "Menu" +msgid "Controller Config" +msgstr "コントローラー設定" + +#: src/ui/gui/appwindow.slint:97 +msgctxt "Menu" +msgid "Netplay" +msgstr "ネットプレイ" + +#: src/ui/gui/appwindow.slint:98 +msgctxt "Menu" +msgid "Cheats" +msgstr "チート" + +#: src/ui/gui/appwindow.slint:99 +msgctxt "Menu" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/appwindow.slint:100 +msgctxt "Menu" +msgid "Settings" +msgstr "設定" + +#: src/ui/gui/appwindow.slint:101 +msgctxt "Menu" +msgid "About" +msgstr "バージョン情報" + +#: src/ui/gui/appwindow.slint:195 +msgctxt "ErrorDialog" +msgid "Error" +msgstr "エラー" + #: src/ui/gui/cheat_page.slint:15 msgctxt "Cheats" msgid "Cheats" @@ -107,6 +147,31 @@ msgctxt "ControllerConfig" msgid "Controller" msgstr "コントローラー" +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "入力プロファイルの作成/変更" + +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "作成または変更するプロファイル名を入力" + +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "デッドゾーン(%)" + +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "DirectInputを使用" + +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "プロファイル作成ウィザードを開始" + #: src/ui/gui/localgame_page.slint:18 msgctxt "LocalGame" msgid "Local Game" @@ -127,136 +192,6 @@ msgctxt "LocalGame" msgid "Recent ROMs" msgstr "最近使ったROM" -#: src/ui/gui/netplay_page.slint:33 -msgctxt "Netplay" -msgid "Netplay" -msgstr "ネットプレイ" - -#: src/ui/gui/netplay_page.slint:40 -msgctxt "Netplay" -msgid "Create Session" -msgstr "セッションを作成" - -#: src/ui/gui/netplay_page.slint:50 -msgctxt "Netplay" -msgid "Join Session" -msgstr "セッションに参加" - -#: src/ui/gui/netplay_page.slint:64 -msgctxt "Netplay" -msgid "Netplay Discord Channel" -msgstr "ネットプレイ用Discordチャンネル" - -#: src/ui/gui/netplay_page.slint:71 -msgctxt "Netplay" -msgid "Provide Feedback" -msgstr "フィードバックを送る" - -#: src/ui/gui/netplay_page.slint:82 -msgctxt "CustomNetplayServer" -msgid "Custom Netplay Server" -msgstr "カスタムネットプレイサーバー" - -#: src/ui/gui/settings_page.slint:22 -msgctxt "Settings" -msgid "Settings" -msgstr "設定" - -#: src/ui/gui/settings_page.slint:29 -msgctxt "Settings" -msgid "Resolution:" -msgstr "解像度:" - -#: src/ui/gui/settings_page.slint:45 -msgctxt "Settings" -msgid "SSAA downscaling" -msgstr "SSAAダウンスケール" - -#: src/ui/gui/settings_page.slint:56 -msgctxt "Settings" -msgid "Integer Scaling" -msgstr "整数倍スケーリング" - -#: src/ui/gui/settings_page.slint:67 -msgctxt "Settings" -msgid "Fullscreen" -msgstr "全画面表示" - -#: src/ui/gui/settings_page.slint:78 -msgctxt "Settings" -msgid "Widescreen (stretch)" -msgstr "ワイド画面(伸ばす)" - -#: src/ui/gui/settings_page.slint:89 -msgctxt "Settings" -msgid "VSync" -msgstr "垂直同期(VSync)" - -#: src/ui/gui/settings_page.slint:100 -msgctxt "Settings" -msgid "Apply CRT shader" -msgstr "CRTシェーダーを適用" - -#: src/ui/gui/settings_page.slint:115 -msgctxt "Settings" -msgid "Overclock N64 CPU (may cause bugs)" -msgstr "N64のCPUをオーバークロック(不具合の原因になることがあります)" - -#: src/ui/gui/settings_page.slint:126 -msgctxt "Settings" -msgid "Disable Expansion Pak" -msgstr "拡張パックを無効にする" - -#: src/ui/gui/settings_page.slint:137 -msgctxt "Settings" -msgid "Emulate UNFLoader" -msgstr "UNFLoaderをエミュレート" - -#: src/ui/gui/vru_dialog.slint:7 -msgctxt "VruDialog" -msgid "What Would You Like To Say?" -msgstr "何と言いますか?" - -#: src/ui/gui/appwindow.slint:95 -msgctxt "Menu" -msgid "Local Game" -msgstr "ローカルゲーム" - -#: src/ui/gui/appwindow.slint:96 -msgctxt "Menu" -msgid "Controller Config" -msgstr "コントローラー設定" - -#: src/ui/gui/appwindow.slint:97 -msgctxt "Menu" -msgid "Netplay" -msgstr "ネットプレイ" - -#: src/ui/gui/appwindow.slint:98 -msgctxt "Menu" -msgid "Cheats" -msgstr "チート" - -#: src/ui/gui/appwindow.slint:99 -msgctxt "Menu" -msgid "RetroAchievements" -msgstr "RetroAchievements" - -#: src/ui/gui/appwindow.slint:100 -msgctxt "Menu" -msgid "Settings" -msgstr "設定" - -#: src/ui/gui/appwindow.slint:101 -msgctxt "Menu" -msgid "About" -msgstr "バージョン情報" - -#: src/ui/gui/appwindow.slint:195 -msgctxt "ErrorDialog" -msgid "Error" -msgstr "エラー" - #: src/ui/gui/netplay_create.slint:5 msgctxt "NetplayCreate" msgid "Netplay: Create Session" @@ -405,6 +340,91 @@ msgctxt "NetplayJoin" msgid "Join Session" msgstr "セッションに参加" +#: src/ui/gui/netplay_page.slint:33 +msgctxt "Netplay" +msgid "Netplay" +msgstr "ネットプレイ" + +#: src/ui/gui/netplay_page.slint:40 +msgctxt "Netplay" +msgid "Create Session" +msgstr "セッションを作成" + +#: src/ui/gui/netplay_page.slint:50 +msgctxt "Netplay" +msgid "Join Session" +msgstr "セッションに参加" + +#: src/ui/gui/netplay_page.slint:64 +msgctxt "Netplay" +msgid "Netplay Discord Channel" +msgstr "ネットプレイ用Discordチャンネル" + +#: src/ui/gui/netplay_page.slint:71 +msgctxt "Netplay" +msgid "Provide Feedback" +msgstr "フィードバックを送る" + +#: src/ui/gui/netplay_page.slint:82 +msgctxt "CustomNetplayServer" +msgid "Custom Netplay Server" +msgstr "カスタムネットプレイサーバー" + +#: src/ui/gui/netplay_wait.slint:14 +msgctxt "NetplayWait" +msgid "Netplay: Waiting Room" +msgstr "ネットプレイ:待機室" + +#: src/ui/gui/netplay_wait.slint:31 +msgctxt "NetplayWait" +msgid "Session Name:" +msgstr "セッション名:" + +#: src/ui/gui/netplay_wait.slint:37 +msgctxt "NetplayWait" +msgid "Game Name:" +msgstr "ゲーム名:" + +#: src/ui/gui/netplay_wait.slint:43 +msgctxt "NetplayWait" +msgid "Ping:" +msgstr "Ping:" + +#: src/ui/gui/netplay_wait.slint:50 +msgctxt "NetplayWait" +msgid "Player 1:" +msgstr "プレイヤー1:" + +#: src/ui/gui/netplay_wait.slint:54 +msgctxt "NetplayWait" +msgid "Player 2:" +msgstr "プレイヤー2:" + +#: src/ui/gui/netplay_wait.slint:60 +msgctxt "NetplayWait" +msgid "Player 3:" +msgstr "プレイヤー3:" + +#: src/ui/gui/netplay_wait.slint:64 +msgctxt "NetplayWait" +msgid "Player 4:" +msgstr "プレイヤー4:" + +#: src/ui/gui/netplay_wait.slint:76 +msgctxt "NetplayWait" +msgid "Enter chat message" +msgstr "チャットメッセージを入力" + +#: src/ui/gui/netplay_wait.slint:87 +msgctxt "NetplayWait" +msgid "Send Message" +msgstr "送信" + +#: src/ui/gui/netplay_wait.slint:102 +msgctxt "NetplayWait" +msgid "Start Game" +msgstr "ゲーム開始" + #: src/ui/gui/retroachievements_page.slint:19 msgctxt "RAData" msgid "Not currently logged in" @@ -465,82 +485,62 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "対応ゲームを表示" -#: src/ui/gui/netplay_wait.slint:14 -msgctxt "NetplayWait" -msgid "Netplay: Waiting Room" -msgstr "ネットプレイ:待機室" +#: src/ui/gui/settings_page.slint:22 +msgctxt "Settings" +msgid "Settings" +msgstr "設定" -#: src/ui/gui/netplay_wait.slint:31 -msgctxt "NetplayWait" -msgid "Session Name:" -msgstr "セッション名:" +#: src/ui/gui/settings_page.slint:29 +msgctxt "Settings" +msgid "Resolution:" +msgstr "解像度:" -#: src/ui/gui/netplay_wait.slint:37 -msgctxt "NetplayWait" -msgid "Game Name:" -msgstr "ゲーム名:" +#: src/ui/gui/settings_page.slint:45 +msgctxt "Settings" +msgid "SSAA downscaling" +msgstr "SSAAダウンスケール" -#: src/ui/gui/netplay_wait.slint:43 -msgctxt "NetplayWait" -msgid "Ping:" -msgstr "Ping:" +#: src/ui/gui/settings_page.slint:56 +msgctxt "Settings" +msgid "Integer Scaling" +msgstr "整数倍スケーリング" -#: src/ui/gui/netplay_wait.slint:50 -msgctxt "NetplayWait" -msgid "Player 1:" -msgstr "プレイヤー1:" +#: src/ui/gui/settings_page.slint:67 +msgctxt "Settings" +msgid "Fullscreen" +msgstr "全画面表示" -#: src/ui/gui/netplay_wait.slint:54 -msgctxt "NetplayWait" -msgid "Player 2:" -msgstr "プレイヤー2:" +#: src/ui/gui/settings_page.slint:78 +msgctxt "Settings" +msgid "Widescreen (stretch)" +msgstr "ワイド画面(伸ばす)" -#: src/ui/gui/netplay_wait.slint:60 -msgctxt "NetplayWait" -msgid "Player 3:" -msgstr "プレイヤー3:" +#: src/ui/gui/settings_page.slint:89 +msgctxt "Settings" +msgid "VSync" +msgstr "垂直同期(VSync)" -#: src/ui/gui/netplay_wait.slint:64 -msgctxt "NetplayWait" -msgid "Player 4:" -msgstr "プレイヤー4:" +#: src/ui/gui/settings_page.slint:100 +msgctxt "Settings" +msgid "Apply CRT shader" +msgstr "CRTシェーダーを適用" -#: src/ui/gui/netplay_wait.slint:76 -msgctxt "NetplayWait" -msgid "Enter chat message" -msgstr "チャットメッセージを入力" +#: src/ui/gui/settings_page.slint:115 +msgctxt "Settings" +msgid "Overclock N64 CPU (may cause bugs)" +msgstr "N64のCPUをオーバークロック(不具合の原因になることがあります)" -#: src/ui/gui/netplay_wait.slint:87 -msgctxt "NetplayWait" -msgid "Send Message" -msgstr "送信" +#: src/ui/gui/settings_page.slint:126 +msgctxt "Settings" +msgid "Disable Expansion Pak" +msgstr "拡張パックを無効にする" -#: src/ui/gui/netplay_wait.slint:102 -msgctxt "NetplayWait" -msgid "Start Game" -msgstr "ゲーム開始" +#: src/ui/gui/settings_page.slint:137 +msgctxt "Settings" +msgid "Emulate UNFLoader" +msgstr "UNFLoaderをエミュレート" -#: src/ui/gui/input_profile.slint:10 -msgctxt "InputProfileDialog" -msgid "Create/Modify Input Profile" -msgstr "入力プロファイルの作成/変更" - -#: src/ui/gui/input_profile.slint:18 -msgctxt "InputProfileDialog" -msgid "Enter profile name to create or modify" -msgstr "作成または変更するプロファイル名を入力" - -#: src/ui/gui/input_profile.slint:29 -msgctxt "InputProfileDialog" -msgid "Deadzone Percentage" -msgstr "デッドゾーン(%)" - -#: src/ui/gui/input_profile.slint:51 -msgctxt "InputProfileDialog" -msgid "Use DirectInput" -msgstr "DirectInputを使用" - -#: src/ui/gui/input_profile.slint:61 -msgctxt "InputProfileDialog" -msgid "Start Profile Creation Wizard" -msgstr "プロファイル作成ウィザードを開始" +#: src/ui/gui/vru_dialog.slint:7 +msgctxt "VruDialog" +msgid "What Would You Like To Say?" +msgstr "何と言いますか?" diff --git a/data/translations/nl/LC_MESSAGES/gopher64.po b/data/translations/nl/LC_MESSAGES/gopher64.po index d0d654b..2162354 100644 --- a/data/translations/nl/LC_MESSAGES/gopher64.po +++ b/data/translations/nl/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-14 13:42+0000\n" +"POT-Creation-Date: 2026-05-14 14:53+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Dutch (Netherlands)\n" @@ -47,6 +47,46 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Doneren (via GitHub)" +#: src/ui/gui/appwindow.slint:95 +msgctxt "Menu" +msgid "Local Game" +msgstr "Lokaal spel" + +#: src/ui/gui/appwindow.slint:96 +msgctxt "Menu" +msgid "Controller Config" +msgstr "Controllerconfiguratie" + +#: src/ui/gui/appwindow.slint:97 +msgctxt "Menu" +msgid "Netplay" +msgstr "Netplay" + +#: src/ui/gui/appwindow.slint:98 +msgctxt "Menu" +msgid "Cheats" +msgstr "Cheats" + +#: src/ui/gui/appwindow.slint:99 +msgctxt "Menu" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/appwindow.slint:100 +msgctxt "Menu" +msgid "Settings" +msgstr "Instellingen" + +#: src/ui/gui/appwindow.slint:101 +msgctxt "Menu" +msgid "About" +msgstr "Over" + +#: src/ui/gui/appwindow.slint:195 +msgctxt "ErrorDialog" +msgid "Error" +msgstr "Fout" + #: src/ui/gui/cheat_page.slint:15 msgctxt "Cheats" msgid "Cheats" @@ -107,6 +147,31 @@ msgctxt "ControllerConfig" msgid "Controller" msgstr "Controller" +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "Invoerprofiel maken/wijzigen" + +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "Profielnaam invoeren om aan te maken of te wijzigen" + +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "Dode-zonepercentage" + +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "DirectInput gebruiken" + +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "Wizard voor profiel maken starten" + #: src/ui/gui/localgame_page.slint:18 msgctxt "LocalGame" msgid "Local Game" @@ -127,136 +192,6 @@ msgctxt "LocalGame" msgid "Recent ROMs" msgstr "Recent gebruikte ROM's" -#: src/ui/gui/netplay_page.slint:33 -msgctxt "Netplay" -msgid "Netplay" -msgstr "Netplay" - -#: src/ui/gui/netplay_page.slint:40 -msgctxt "Netplay" -msgid "Create Session" -msgstr "Sessie aanmaken" - -#: src/ui/gui/netplay_page.slint:50 -msgctxt "Netplay" -msgid "Join Session" -msgstr "Deelnemen aan sessie" - -#: src/ui/gui/netplay_page.slint:64 -msgctxt "Netplay" -msgid "Netplay Discord Channel" -msgstr "Netplay-Discordkanaal" - -#: src/ui/gui/netplay_page.slint:71 -msgctxt "Netplay" -msgid "Provide Feedback" -msgstr "Feedback geven" - -#: src/ui/gui/netplay_page.slint:82 -msgctxt "CustomNetplayServer" -msgid "Custom Netplay Server" -msgstr "Aangepaste Netplay-server" - -#: src/ui/gui/settings_page.slint:22 -msgctxt "Settings" -msgid "Settings" -msgstr "Instellingen" - -#: src/ui/gui/settings_page.slint:29 -msgctxt "Settings" -msgid "Resolution:" -msgstr "Resolutie:" - -#: src/ui/gui/settings_page.slint:45 -msgctxt "Settings" -msgid "SSAA downscaling" -msgstr "SSAA-downscaling" - -#: src/ui/gui/settings_page.slint:56 -msgctxt "Settings" -msgid "Integer Scaling" -msgstr "Schalen in hele getallen" - -#: src/ui/gui/settings_page.slint:67 -msgctxt "Settings" -msgid "Fullscreen" -msgstr "Volledig scherm" - -#: src/ui/gui/settings_page.slint:78 -msgctxt "Settings" -msgid "Widescreen (stretch)" -msgstr "Breedbeeld (uitgerekt)" - -#: src/ui/gui/settings_page.slint:89 -msgctxt "Settings" -msgid "VSync" -msgstr "VSync" - -#: src/ui/gui/settings_page.slint:100 -msgctxt "Settings" -msgid "Apply CRT shader" -msgstr "CRT-shader toepassen" - -#: src/ui/gui/settings_page.slint:115 -msgctxt "Settings" -msgid "Overclock N64 CPU (may cause bugs)" -msgstr "N64-CPU overklokken (kan bugs veroorzaken)" - -#: src/ui/gui/settings_page.slint:126 -msgctxt "Settings" -msgid "Disable Expansion Pak" -msgstr "Expansion Pak uitschakelen" - -#: src/ui/gui/settings_page.slint:137 -msgctxt "Settings" -msgid "Emulate UNFLoader" -msgstr "UNFLoader emuleren" - -#: src/ui/gui/vru_dialog.slint:7 -msgctxt "VruDialog" -msgid "What Would You Like To Say?" -msgstr "Wat wil je zeggen?" - -#: src/ui/gui/appwindow.slint:95 -msgctxt "Menu" -msgid "Local Game" -msgstr "Lokaal spel" - -#: src/ui/gui/appwindow.slint:96 -msgctxt "Menu" -msgid "Controller Config" -msgstr "Controllerconfiguratie" - -#: src/ui/gui/appwindow.slint:97 -msgctxt "Menu" -msgid "Netplay" -msgstr "Netplay" - -#: src/ui/gui/appwindow.slint:98 -msgctxt "Menu" -msgid "Cheats" -msgstr "Cheats" - -#: src/ui/gui/appwindow.slint:99 -msgctxt "Menu" -msgid "RetroAchievements" -msgstr "RetroAchievements" - -#: src/ui/gui/appwindow.slint:100 -msgctxt "Menu" -msgid "Settings" -msgstr "Instellingen" - -#: src/ui/gui/appwindow.slint:101 -msgctxt "Menu" -msgid "About" -msgstr "Over" - -#: src/ui/gui/appwindow.slint:195 -msgctxt "ErrorDialog" -msgid "Error" -msgstr "Fout" - #: src/ui/gui/netplay_create.slint:5 msgctxt "NetplayCreate" msgid "Netplay: Create Session" @@ -406,6 +341,91 @@ msgctxt "NetplayJoin" msgid "Join Session" msgstr "Deelnemen aan sessie" +#: src/ui/gui/netplay_page.slint:33 +msgctxt "Netplay" +msgid "Netplay" +msgstr "Netplay" + +#: src/ui/gui/netplay_page.slint:40 +msgctxt "Netplay" +msgid "Create Session" +msgstr "Sessie aanmaken" + +#: src/ui/gui/netplay_page.slint:50 +msgctxt "Netplay" +msgid "Join Session" +msgstr "Deelnemen aan sessie" + +#: src/ui/gui/netplay_page.slint:64 +msgctxt "Netplay" +msgid "Netplay Discord Channel" +msgstr "Netplay-Discordkanaal" + +#: src/ui/gui/netplay_page.slint:71 +msgctxt "Netplay" +msgid "Provide Feedback" +msgstr "Feedback geven" + +#: src/ui/gui/netplay_page.slint:82 +msgctxt "CustomNetplayServer" +msgid "Custom Netplay Server" +msgstr "Aangepaste Netplay-server" + +#: src/ui/gui/netplay_wait.slint:14 +msgctxt "NetplayWait" +msgid "Netplay: Waiting Room" +msgstr "Netplay: wachtruimte" + +#: src/ui/gui/netplay_wait.slint:31 +msgctxt "NetplayWait" +msgid "Session Name:" +msgstr "Sessienaam:" + +#: src/ui/gui/netplay_wait.slint:37 +msgctxt "NetplayWait" +msgid "Game Name:" +msgstr "Spelnaam:" + +#: src/ui/gui/netplay_wait.slint:43 +msgctxt "NetplayWait" +msgid "Ping:" +msgstr "Ping:" + +#: src/ui/gui/netplay_wait.slint:50 +msgctxt "NetplayWait" +msgid "Player 1:" +msgstr "Speler 1:" + +#: src/ui/gui/netplay_wait.slint:54 +msgctxt "NetplayWait" +msgid "Player 2:" +msgstr "Speler 2:" + +#: src/ui/gui/netplay_wait.slint:60 +msgctxt "NetplayWait" +msgid "Player 3:" +msgstr "Speler 3:" + +#: src/ui/gui/netplay_wait.slint:64 +msgctxt "NetplayWait" +msgid "Player 4:" +msgstr "Speler 4:" + +#: src/ui/gui/netplay_wait.slint:76 +msgctxt "NetplayWait" +msgid "Enter chat message" +msgstr "Chatbericht invoeren" + +#: src/ui/gui/netplay_wait.slint:87 +msgctxt "NetplayWait" +msgid "Send Message" +msgstr "Bericht verzenden" + +#: src/ui/gui/netplay_wait.slint:102 +msgctxt "NetplayWait" +msgid "Start Game" +msgstr "Spel starten" + #: src/ui/gui/retroachievements_page.slint:19 msgctxt "RAData" msgid "Not currently logged in" @@ -466,82 +486,62 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Ondersteunde spellen bekijken" -#: src/ui/gui/netplay_wait.slint:14 -msgctxt "NetplayWait" -msgid "Netplay: Waiting Room" -msgstr "Netplay: wachtruimte" +#: src/ui/gui/settings_page.slint:22 +msgctxt "Settings" +msgid "Settings" +msgstr "Instellingen" -#: src/ui/gui/netplay_wait.slint:31 -msgctxt "NetplayWait" -msgid "Session Name:" -msgstr "Sessienaam:" +#: src/ui/gui/settings_page.slint:29 +msgctxt "Settings" +msgid "Resolution:" +msgstr "Resolutie:" -#: src/ui/gui/netplay_wait.slint:37 -msgctxt "NetplayWait" -msgid "Game Name:" -msgstr "Spelnaam:" +#: src/ui/gui/settings_page.slint:45 +msgctxt "Settings" +msgid "SSAA downscaling" +msgstr "SSAA-downscaling" -#: src/ui/gui/netplay_wait.slint:43 -msgctxt "NetplayWait" -msgid "Ping:" -msgstr "Ping:" +#: src/ui/gui/settings_page.slint:56 +msgctxt "Settings" +msgid "Integer Scaling" +msgstr "Schalen in hele getallen" -#: src/ui/gui/netplay_wait.slint:50 -msgctxt "NetplayWait" -msgid "Player 1:" -msgstr "Speler 1:" +#: src/ui/gui/settings_page.slint:67 +msgctxt "Settings" +msgid "Fullscreen" +msgstr "Volledig scherm" -#: src/ui/gui/netplay_wait.slint:54 -msgctxt "NetplayWait" -msgid "Player 2:" -msgstr "Speler 2:" +#: src/ui/gui/settings_page.slint:78 +msgctxt "Settings" +msgid "Widescreen (stretch)" +msgstr "Breedbeeld (uitgerekt)" -#: src/ui/gui/netplay_wait.slint:60 -msgctxt "NetplayWait" -msgid "Player 3:" -msgstr "Speler 3:" +#: src/ui/gui/settings_page.slint:89 +msgctxt "Settings" +msgid "VSync" +msgstr "VSync" -#: src/ui/gui/netplay_wait.slint:64 -msgctxt "NetplayWait" -msgid "Player 4:" -msgstr "Speler 4:" +#: src/ui/gui/settings_page.slint:100 +msgctxt "Settings" +msgid "Apply CRT shader" +msgstr "CRT-shader toepassen" -#: src/ui/gui/netplay_wait.slint:76 -msgctxt "NetplayWait" -msgid "Enter chat message" -msgstr "Chatbericht invoeren" +#: src/ui/gui/settings_page.slint:115 +msgctxt "Settings" +msgid "Overclock N64 CPU (may cause bugs)" +msgstr "N64-CPU overklokken (kan bugs veroorzaken)" -#: src/ui/gui/netplay_wait.slint:87 -msgctxt "NetplayWait" -msgid "Send Message" -msgstr "Bericht verzenden" +#: src/ui/gui/settings_page.slint:126 +msgctxt "Settings" +msgid "Disable Expansion Pak" +msgstr "Expansion Pak uitschakelen" -#: src/ui/gui/netplay_wait.slint:102 -msgctxt "NetplayWait" -msgid "Start Game" -msgstr "Spel starten" +#: src/ui/gui/settings_page.slint:137 +msgctxt "Settings" +msgid "Emulate UNFLoader" +msgstr "UNFLoader emuleren" -#: src/ui/gui/input_profile.slint:10 -msgctxt "InputProfileDialog" -msgid "Create/Modify Input Profile" -msgstr "Invoerprofiel maken/wijzigen" - -#: src/ui/gui/input_profile.slint:18 -msgctxt "InputProfileDialog" -msgid "Enter profile name to create or modify" -msgstr "Profielnaam invoeren om aan te maken of te wijzigen" - -#: src/ui/gui/input_profile.slint:29 -msgctxt "InputProfileDialog" -msgid "Deadzone Percentage" -msgstr "Dode-zonepercentage" - -#: src/ui/gui/input_profile.slint:51 -msgctxt "InputProfileDialog" -msgid "Use DirectInput" -msgstr "DirectInput gebruiken" - -#: src/ui/gui/input_profile.slint:61 -msgctxt "InputProfileDialog" -msgid "Start Profile Creation Wizard" -msgstr "Wizard voor profiel maken starten" +#: src/ui/gui/vru_dialog.slint:7 +msgctxt "VruDialog" +msgid "What Would You Like To Say?" +msgstr "Wat wil je zeggen?" diff --git a/data/translations/pt_BR/LC_MESSAGES/gopher64.po b/data/translations/pt_BR/LC_MESSAGES/gopher64.po index e1bbb71..63fd66c 100644 --- a/data/translations/pt_BR/LC_MESSAGES/gopher64.po +++ b/data/translations/pt_BR/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-05-14 13:42+0000\n" +"POT-Creation-Date: 2026-05-14 14:53+0000\n" "PO-Revision-Date: 2026-05-11 18:11-3000\n" "Last-Translator: EDUARDO CARVALHO \n" "Language-Team: LANGUAGE \n" @@ -47,6 +47,46 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Doações (via GitHub)" +#: src/ui/gui/appwindow.slint:95 +msgctxt "Menu" +msgid "Local Game" +msgstr "Jogo Local" + +#: src/ui/gui/appwindow.slint:96 +msgctxt "Menu" +msgid "Controller Config" +msgstr "Configurar Controle" + +#: src/ui/gui/appwindow.slint:97 +msgctxt "Menu" +msgid "Netplay" +msgstr "Netplay" + +#: src/ui/gui/appwindow.slint:98 +msgctxt "Menu" +msgid "Cheats" +msgstr "Trapaças" + +#: src/ui/gui/appwindow.slint:99 +msgctxt "Menu" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/appwindow.slint:100 +msgctxt "Menu" +msgid "Settings" +msgstr "Configurações" + +#: src/ui/gui/appwindow.slint:101 +msgctxt "Menu" +msgid "About" +msgstr "Sobre" + +#: src/ui/gui/appwindow.slint:195 +msgctxt "ErrorDialog" +msgid "Error" +msgstr "Erro" + #: src/ui/gui/cheat_page.slint:15 msgctxt "Cheats" msgid "Cheats" @@ -107,6 +147,31 @@ msgctxt "ControllerConfig" msgid "Controller" msgstr "Controle" +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "Criar/Modificar Perfil de Comandos" + +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "Insira o nome de perfil para criar ou modificar" + +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "Porcentagem de Zona-morta" + +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "Usar DirectInput" + +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "Iniciar Assistente de Criação de Perfil" + #: src/ui/gui/localgame_page.slint:18 msgctxt "LocalGame" msgid "Local Game" @@ -127,136 +192,6 @@ msgctxt "LocalGame" msgid "Recent ROMs" msgstr "ROMs Recentes" -#: src/ui/gui/netplay_page.slint:33 -msgctxt "Netplay" -msgid "Netplay" -msgstr "Netplay" - -#: src/ui/gui/netplay_page.slint:40 -msgctxt "Netplay" -msgid "Create Session" -msgstr "Criar Sessão" - -#: src/ui/gui/netplay_page.slint:50 -msgctxt "Netplay" -msgid "Join Session" -msgstr "Entrar na Sessão" - -#: src/ui/gui/netplay_page.slint:64 -msgctxt "Netplay" -msgid "Netplay Discord Channel" -msgstr "Canal de Netplay do Discord" - -#: src/ui/gui/netplay_page.slint:71 -msgctxt "Netplay" -msgid "Provide Feedback" -msgstr "Fornecer Feedback" - -#: src/ui/gui/netplay_page.slint:82 -msgctxt "CustomNetplayServer" -msgid "Custom Netplay Server" -msgstr "Servidor de Netplay Personalizado" - -#: src/ui/gui/settings_page.slint:22 -msgctxt "Settings" -msgid "Settings" -msgstr "Configurações" - -#: src/ui/gui/settings_page.slint:29 -msgctxt "Settings" -msgid "Resolution:" -msgstr "Resolução:" - -#: src/ui/gui/settings_page.slint:45 -msgctxt "Settings" -msgid "SSAA downscaling" -msgstr "Redução de SSAA" - -#: src/ui/gui/settings_page.slint:56 -msgctxt "Settings" -msgid "Integer Scaling" -msgstr "Proporção Íntegra" - -#: src/ui/gui/settings_page.slint:67 -msgctxt "Settings" -msgid "Fullscreen" -msgstr "Tela Cheia" - -#: src/ui/gui/settings_page.slint:78 -msgctxt "Settings" -msgid "Widescreen (stretch)" -msgstr "Widescreen (esticar)" - -#: src/ui/gui/settings_page.slint:89 -msgctxt "Settings" -msgid "VSync" -msgstr "VSync" - -#: src/ui/gui/settings_page.slint:100 -msgctxt "Settings" -msgid "Apply CRT shader" -msgstr "Aplicar filtro de CRT" - -#: src/ui/gui/settings_page.slint:115 -msgctxt "Settings" -msgid "Overclock N64 CPU (may cause bugs)" -msgstr "Overclock da CPU do N64 (pode causar bugs)" - -#: src/ui/gui/settings_page.slint:126 -msgctxt "Settings" -msgid "Disable Expansion Pak" -msgstr "Desabilitar Expansion Pak" - -#: src/ui/gui/settings_page.slint:137 -msgctxt "Settings" -msgid "Emulate UNFLoader" -msgstr "Emular UNFLoader" - -#: src/ui/gui/vru_dialog.slint:7 -msgctxt "VruDialog" -msgid "What Would You Like To Say?" -msgstr "O que você quer falar?" - -#: src/ui/gui/appwindow.slint:95 -msgctxt "Menu" -msgid "Local Game" -msgstr "Jogo Local" - -#: src/ui/gui/appwindow.slint:96 -msgctxt "Menu" -msgid "Controller Config" -msgstr "Configurar Controle" - -#: src/ui/gui/appwindow.slint:97 -msgctxt "Menu" -msgid "Netplay" -msgstr "Netplay" - -#: src/ui/gui/appwindow.slint:98 -msgctxt "Menu" -msgid "Cheats" -msgstr "Trapaças" - -#: src/ui/gui/appwindow.slint:99 -msgctxt "Menu" -msgid "RetroAchievements" -msgstr "RetroAchievements" - -#: src/ui/gui/appwindow.slint:100 -msgctxt "Menu" -msgid "Settings" -msgstr "Configurações" - -#: src/ui/gui/appwindow.slint:101 -msgctxt "Menu" -msgid "About" -msgstr "Sobre" - -#: src/ui/gui/appwindow.slint:195 -msgctxt "ErrorDialog" -msgid "Error" -msgstr "Erro" - #: src/ui/gui/netplay_create.slint:5 msgctxt "NetplayCreate" msgid "Netplay: Create Session" @@ -407,6 +342,91 @@ msgctxt "NetplayJoin" msgid "Join Session" msgstr "Entrar na Sessão" +#: src/ui/gui/netplay_page.slint:33 +msgctxt "Netplay" +msgid "Netplay" +msgstr "Netplay" + +#: src/ui/gui/netplay_page.slint:40 +msgctxt "Netplay" +msgid "Create Session" +msgstr "Criar Sessão" + +#: src/ui/gui/netplay_page.slint:50 +msgctxt "Netplay" +msgid "Join Session" +msgstr "Entrar na Sessão" + +#: src/ui/gui/netplay_page.slint:64 +msgctxt "Netplay" +msgid "Netplay Discord Channel" +msgstr "Canal de Netplay do Discord" + +#: src/ui/gui/netplay_page.slint:71 +msgctxt "Netplay" +msgid "Provide Feedback" +msgstr "Fornecer Feedback" + +#: src/ui/gui/netplay_page.slint:82 +msgctxt "CustomNetplayServer" +msgid "Custom Netplay Server" +msgstr "Servidor de Netplay Personalizado" + +#: src/ui/gui/netplay_wait.slint:14 +msgctxt "NetplayWait" +msgid "Netplay: Waiting Room" +msgstr "Netplay: Aguardando Sala" + +#: src/ui/gui/netplay_wait.slint:31 +msgctxt "NetplayWait" +msgid "Session Name:" +msgstr "Nome da Sessão:" + +#: src/ui/gui/netplay_wait.slint:37 +msgctxt "NetplayWait" +msgid "Game Name:" +msgstr "Nome do Jogo:" + +#: src/ui/gui/netplay_wait.slint:43 +msgctxt "NetplayWait" +msgid "Ping:" +msgstr "Ping:" + +#: src/ui/gui/netplay_wait.slint:50 +msgctxt "NetplayWait" +msgid "Player 1:" +msgstr "Jogador 1" + +#: src/ui/gui/netplay_wait.slint:54 +msgctxt "NetplayWait" +msgid "Player 2:" +msgstr "Jogador 2:" + +#: src/ui/gui/netplay_wait.slint:60 +msgctxt "NetplayWait" +msgid "Player 3:" +msgstr "Jogador 3:" + +#: src/ui/gui/netplay_wait.slint:64 +msgctxt "NetplayWait" +msgid "Player 4:" +msgstr "Jogador 4:" + +#: src/ui/gui/netplay_wait.slint:76 +msgctxt "NetplayWait" +msgid "Enter chat message" +msgstr "Escrever mensagem no chat" + +#: src/ui/gui/netplay_wait.slint:87 +msgctxt "NetplayWait" +msgid "Send Message" +msgstr "Enviar Mensagem" + +#: src/ui/gui/netplay_wait.slint:102 +msgctxt "NetplayWait" +msgid "Start Game" +msgstr "Iniciar jogo" + #: src/ui/gui/retroachievements_page.slint:19 msgctxt "RAData" msgid "Not currently logged in" @@ -467,82 +487,62 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Ver Jogos com Suporte" -#: src/ui/gui/netplay_wait.slint:14 -msgctxt "NetplayWait" -msgid "Netplay: Waiting Room" -msgstr "Netplay: Aguardando Sala" +#: src/ui/gui/settings_page.slint:22 +msgctxt "Settings" +msgid "Settings" +msgstr "Configurações" -#: src/ui/gui/netplay_wait.slint:31 -msgctxt "NetplayWait" -msgid "Session Name:" -msgstr "Nome da Sessão:" +#: src/ui/gui/settings_page.slint:29 +msgctxt "Settings" +msgid "Resolution:" +msgstr "Resolução:" -#: src/ui/gui/netplay_wait.slint:37 -msgctxt "NetplayWait" -msgid "Game Name:" -msgstr "Nome do Jogo:" +#: src/ui/gui/settings_page.slint:45 +msgctxt "Settings" +msgid "SSAA downscaling" +msgstr "Redução de SSAA" -#: src/ui/gui/netplay_wait.slint:43 -msgctxt "NetplayWait" -msgid "Ping:" -msgstr "Ping:" +#: src/ui/gui/settings_page.slint:56 +msgctxt "Settings" +msgid "Integer Scaling" +msgstr "Proporção Íntegra" -#: src/ui/gui/netplay_wait.slint:50 -msgctxt "NetplayWait" -msgid "Player 1:" -msgstr "Jogador 1" +#: src/ui/gui/settings_page.slint:67 +msgctxt "Settings" +msgid "Fullscreen" +msgstr "Tela Cheia" -#: src/ui/gui/netplay_wait.slint:54 -msgctxt "NetplayWait" -msgid "Player 2:" -msgstr "Jogador 2:" +#: src/ui/gui/settings_page.slint:78 +msgctxt "Settings" +msgid "Widescreen (stretch)" +msgstr "Widescreen (esticar)" -#: src/ui/gui/netplay_wait.slint:60 -msgctxt "NetplayWait" -msgid "Player 3:" -msgstr "Jogador 3:" +#: src/ui/gui/settings_page.slint:89 +msgctxt "Settings" +msgid "VSync" +msgstr "VSync" -#: src/ui/gui/netplay_wait.slint:64 -msgctxt "NetplayWait" -msgid "Player 4:" -msgstr "Jogador 4:" +#: src/ui/gui/settings_page.slint:100 +msgctxt "Settings" +msgid "Apply CRT shader" +msgstr "Aplicar filtro de CRT" -#: src/ui/gui/netplay_wait.slint:76 -msgctxt "NetplayWait" -msgid "Enter chat message" -msgstr "Escrever mensagem no chat" +#: src/ui/gui/settings_page.slint:115 +msgctxt "Settings" +msgid "Overclock N64 CPU (may cause bugs)" +msgstr "Overclock da CPU do N64 (pode causar bugs)" -#: src/ui/gui/netplay_wait.slint:87 -msgctxt "NetplayWait" -msgid "Send Message" -msgstr "Enviar Mensagem" +#: src/ui/gui/settings_page.slint:126 +msgctxt "Settings" +msgid "Disable Expansion Pak" +msgstr "Desabilitar Expansion Pak" -#: src/ui/gui/netplay_wait.slint:102 -msgctxt "NetplayWait" -msgid "Start Game" -msgstr "Iniciar jogo" +#: src/ui/gui/settings_page.slint:137 +msgctxt "Settings" +msgid "Emulate UNFLoader" +msgstr "Emular UNFLoader" -#: src/ui/gui/input_profile.slint:10 -msgctxt "InputProfileDialog" -msgid "Create/Modify Input Profile" -msgstr "Criar/Modificar Perfil de Comandos" - -#: src/ui/gui/input_profile.slint:18 -msgctxt "InputProfileDialog" -msgid "Enter profile name to create or modify" -msgstr "Insira o nome de perfil para criar ou modificar" - -#: src/ui/gui/input_profile.slint:29 -msgctxt "InputProfileDialog" -msgid "Deadzone Percentage" -msgstr "Porcentagem de Zona-morta" - -#: src/ui/gui/input_profile.slint:51 -msgctxt "InputProfileDialog" -msgid "Use DirectInput" -msgstr "Usar DirectInput" - -#: src/ui/gui/input_profile.slint:61 -msgctxt "InputProfileDialog" -msgid "Start Profile Creation Wizard" -msgstr "Iniciar Assistente de Criação de Perfil" +#: src/ui/gui/vru_dialog.slint:7 +msgctxt "VruDialog" +msgid "What Would You Like To Say?" +msgstr "O que você quer falar?" diff --git a/data/translations/ru/LC_MESSAGES/gopher64.po b/data/translations/ru/LC_MESSAGES/gopher64.po index 424495e..29f4f0a 100644 --- a/data/translations/ru/LC_MESSAGES/gopher64.po +++ b/data/translations/ru/LC_MESSAGES/gopher64.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: gopher64\n" -"POT-Creation-Date: 2026-05-14 13:42+0000\n" +"POT-Creation-Date: 2026-05-14 14:53+0000\n" "PO-Revision-Date: 2026-05-11 12:00+0000\n" "Last-Translator: \n" "Language-Team: Russian\n" @@ -47,6 +47,46 @@ msgctxt "About" msgid "Donate (via GitHub)" msgstr "Пожертвовать (через GitHub)" +#: src/ui/gui/appwindow.slint:95 +msgctxt "Menu" +msgid "Local Game" +msgstr "Локальная игра" + +#: src/ui/gui/appwindow.slint:96 +msgctxt "Menu" +msgid "Controller Config" +msgstr "Настройка контроллера" + +#: src/ui/gui/appwindow.slint:97 +msgctxt "Menu" +msgid "Netplay" +msgstr "Сетевая игра" + +#: src/ui/gui/appwindow.slint:98 +msgctxt "Menu" +msgid "Cheats" +msgstr "Читы" + +#: src/ui/gui/appwindow.slint:99 +msgctxt "Menu" +msgid "RetroAchievements" +msgstr "RetroAchievements" + +#: src/ui/gui/appwindow.slint:100 +msgctxt "Menu" +msgid "Settings" +msgstr "Настройки" + +#: src/ui/gui/appwindow.slint:101 +msgctxt "Menu" +msgid "About" +msgstr "О программе" + +#: src/ui/gui/appwindow.slint:195 +msgctxt "ErrorDialog" +msgid "Error" +msgstr "Ошибка" + #: src/ui/gui/cheat_page.slint:15 msgctxt "Cheats" msgid "Cheats" @@ -107,6 +147,31 @@ msgctxt "ControllerConfig" msgid "Controller" msgstr "Контроллер" +#: src/ui/gui/input_profile.slint:10 +msgctxt "InputProfileDialog" +msgid "Create/Modify Input Profile" +msgstr "Создать/изменить профиль ввода" + +#: src/ui/gui/input_profile.slint:18 +msgctxt "InputProfileDialog" +msgid "Enter profile name to create or modify" +msgstr "Введите имя профиля для создания или изменения" + +#: src/ui/gui/input_profile.slint:29 +msgctxt "InputProfileDialog" +msgid "Deadzone Percentage" +msgstr "Процент мёртвой зоны" + +#: src/ui/gui/input_profile.slint:51 +msgctxt "InputProfileDialog" +msgid "Use DirectInput" +msgstr "Использовать DirectInput" + +#: src/ui/gui/input_profile.slint:61 +msgctxt "InputProfileDialog" +msgid "Start Profile Creation Wizard" +msgstr "Запустить мастер создания профиля" + #: src/ui/gui/localgame_page.slint:18 msgctxt "LocalGame" msgid "Local Game" @@ -127,136 +192,6 @@ msgctxt "LocalGame" msgid "Recent ROMs" msgstr "Недавние ROMы" -#: src/ui/gui/netplay_page.slint:33 -msgctxt "Netplay" -msgid "Netplay" -msgstr "Сетевая игра" - -#: src/ui/gui/netplay_page.slint:40 -msgctxt "Netplay" -msgid "Create Session" -msgstr "Создать сессию" - -#: src/ui/gui/netplay_page.slint:50 -msgctxt "Netplay" -msgid "Join Session" -msgstr "Присоединиться к сессии" - -#: src/ui/gui/netplay_page.slint:64 -msgctxt "Netplay" -msgid "Netplay Discord Channel" -msgstr "Канал Discord для сетевой игры" - -#: src/ui/gui/netplay_page.slint:71 -msgctxt "Netplay" -msgid "Provide Feedback" -msgstr "Оставить отзыв" - -#: src/ui/gui/netplay_page.slint:82 -msgctxt "CustomNetplayServer" -msgid "Custom Netplay Server" -msgstr "Пользовательский сервер сетевой игры" - -#: src/ui/gui/settings_page.slint:22 -msgctxt "Settings" -msgid "Settings" -msgstr "Настройки" - -#: src/ui/gui/settings_page.slint:29 -msgctxt "Settings" -msgid "Resolution:" -msgstr "Разрешение:" - -#: src/ui/gui/settings_page.slint:45 -msgctxt "Settings" -msgid "SSAA downscaling" -msgstr "SSAA даунскейлинг" - -#: src/ui/gui/settings_page.slint:56 -msgctxt "Settings" -msgid "Integer Scaling" -msgstr "Целочисленное масштабирование" - -#: src/ui/gui/settings_page.slint:67 -msgctxt "Settings" -msgid "Fullscreen" -msgstr "Полноэкранный режим" - -#: src/ui/gui/settings_page.slint:78 -msgctxt "Settings" -msgid "Widescreen (stretch)" -msgstr "Широкоэкранный режим (растянуто)" - -#: src/ui/gui/settings_page.slint:89 -msgctxt "Settings" -msgid "VSync" -msgstr "Вертикальная синхронизация" - -#: src/ui/gui/settings_page.slint:100 -msgctxt "Settings" -msgid "Apply CRT shader" -msgstr "Применить шейдер ЭЛТ" - -#: src/ui/gui/settings_page.slint:115 -msgctxt "Settings" -msgid "Overclock N64 CPU (may cause bugs)" -msgstr "Разгон процессора N64 (может вызвать ошибки)" - -#: src/ui/gui/settings_page.slint:126 -msgctxt "Settings" -msgid "Disable Expansion Pak" -msgstr "Отключить Expansion Pak" - -#: src/ui/gui/settings_page.slint:137 -msgctxt "Settings" -msgid "Emulate UNFLoader" -msgstr "Эмулировать UNFLoader" - -#: src/ui/gui/vru_dialog.slint:7 -msgctxt "VruDialog" -msgid "What Would You Like To Say?" -msgstr "Что вы хотите сказать?" - -#: src/ui/gui/appwindow.slint:95 -msgctxt "Menu" -msgid "Local Game" -msgstr "Локальная игра" - -#: src/ui/gui/appwindow.slint:96 -msgctxt "Menu" -msgid "Controller Config" -msgstr "Настройка контроллера" - -#: src/ui/gui/appwindow.slint:97 -msgctxt "Menu" -msgid "Netplay" -msgstr "Сетевая игра" - -#: src/ui/gui/appwindow.slint:98 -msgctxt "Menu" -msgid "Cheats" -msgstr "Читы" - -#: src/ui/gui/appwindow.slint:99 -msgctxt "Menu" -msgid "RetroAchievements" -msgstr "RetroAchievements" - -#: src/ui/gui/appwindow.slint:100 -msgctxt "Menu" -msgid "Settings" -msgstr "Настройки" - -#: src/ui/gui/appwindow.slint:101 -msgctxt "Menu" -msgid "About" -msgstr "О программе" - -#: src/ui/gui/appwindow.slint:195 -msgctxt "ErrorDialog" -msgid "Error" -msgstr "Ошибка" - #: src/ui/gui/netplay_create.slint:5 msgctxt "NetplayCreate" msgid "Netplay: Create Session" @@ -405,6 +340,91 @@ msgctxt "NetplayJoin" msgid "Join Session" msgstr "Присоединиться к сессии" +#: src/ui/gui/netplay_page.slint:33 +msgctxt "Netplay" +msgid "Netplay" +msgstr "Сетевая игра" + +#: src/ui/gui/netplay_page.slint:40 +msgctxt "Netplay" +msgid "Create Session" +msgstr "Создать сессию" + +#: src/ui/gui/netplay_page.slint:50 +msgctxt "Netplay" +msgid "Join Session" +msgstr "Присоединиться к сессии" + +#: src/ui/gui/netplay_page.slint:64 +msgctxt "Netplay" +msgid "Netplay Discord Channel" +msgstr "Канал Discord для сетевой игры" + +#: src/ui/gui/netplay_page.slint:71 +msgctxt "Netplay" +msgid "Provide Feedback" +msgstr "Оставить отзыв" + +#: src/ui/gui/netplay_page.slint:82 +msgctxt "CustomNetplayServer" +msgid "Custom Netplay Server" +msgstr "Пользовательский сервер сетевой игры" + +#: src/ui/gui/netplay_wait.slint:14 +msgctxt "NetplayWait" +msgid "Netplay: Waiting Room" +msgstr "Сетевая игра: Комната ожидания" + +#: src/ui/gui/netplay_wait.slint:31 +msgctxt "NetplayWait" +msgid "Session Name:" +msgstr "Имя сессии:" + +#: src/ui/gui/netplay_wait.slint:37 +msgctxt "NetplayWait" +msgid "Game Name:" +msgstr "Название игры:" + +#: src/ui/gui/netplay_wait.slint:43 +msgctxt "NetplayWait" +msgid "Ping:" +msgstr "Пинг:" + +#: src/ui/gui/netplay_wait.slint:50 +msgctxt "NetplayWait" +msgid "Player 1:" +msgstr "Игрок 1:" + +#: src/ui/gui/netplay_wait.slint:54 +msgctxt "NetplayWait" +msgid "Player 2:" +msgstr "Игрок 2:" + +#: src/ui/gui/netplay_wait.slint:60 +msgctxt "NetplayWait" +msgid "Player 3:" +msgstr "Игрок 3:" + +#: src/ui/gui/netplay_wait.slint:64 +msgctxt "NetplayWait" +msgid "Player 4:" +msgstr "Игрок 4:" + +#: src/ui/gui/netplay_wait.slint:76 +msgctxt "NetplayWait" +msgid "Enter chat message" +msgstr "Введите сообщение чата" + +#: src/ui/gui/netplay_wait.slint:87 +msgctxt "NetplayWait" +msgid "Send Message" +msgstr "Отправить сообщение" + +#: src/ui/gui/netplay_wait.slint:102 +msgctxt "NetplayWait" +msgid "Start Game" +msgstr "Начать игру" + #: src/ui/gui/retroachievements_page.slint:19 msgctxt "RAData" msgid "Not currently logged in" @@ -465,82 +485,62 @@ msgctxt "RetroAchievements" msgid "View Supported Games" msgstr "Просмотреть поддерживаемые игры" -#: src/ui/gui/netplay_wait.slint:14 -msgctxt "NetplayWait" -msgid "Netplay: Waiting Room" -msgstr "Сетевая игра: Комната ожидания" +#: src/ui/gui/settings_page.slint:22 +msgctxt "Settings" +msgid "Settings" +msgstr "Настройки" -#: src/ui/gui/netplay_wait.slint:31 -msgctxt "NetplayWait" -msgid "Session Name:" -msgstr "Имя сессии:" +#: src/ui/gui/settings_page.slint:29 +msgctxt "Settings" +msgid "Resolution:" +msgstr "Разрешение:" -#: src/ui/gui/netplay_wait.slint:37 -msgctxt "NetplayWait" -msgid "Game Name:" -msgstr "Название игры:" +#: src/ui/gui/settings_page.slint:45 +msgctxt "Settings" +msgid "SSAA downscaling" +msgstr "SSAA даунскейлинг" -#: src/ui/gui/netplay_wait.slint:43 -msgctxt "NetplayWait" -msgid "Ping:" -msgstr "Пинг:" +#: src/ui/gui/settings_page.slint:56 +msgctxt "Settings" +msgid "Integer Scaling" +msgstr "Целочисленное масштабирование" -#: src/ui/gui/netplay_wait.slint:50 -msgctxt "NetplayWait" -msgid "Player 1:" -msgstr "Игрок 1:" +#: src/ui/gui/settings_page.slint:67 +msgctxt "Settings" +msgid "Fullscreen" +msgstr "Полноэкранный режим" -#: src/ui/gui/netplay_wait.slint:54 -msgctxt "NetplayWait" -msgid "Player 2:" -msgstr "Игрок 2:" +#: src/ui/gui/settings_page.slint:78 +msgctxt "Settings" +msgid "Widescreen (stretch)" +msgstr "Широкоэкранный режим (растянуто)" -#: src/ui/gui/netplay_wait.slint:60 -msgctxt "NetplayWait" -msgid "Player 3:" -msgstr "Игрок 3:" +#: src/ui/gui/settings_page.slint:89 +msgctxt "Settings" +msgid "VSync" +msgstr "Вертикальная синхронизация" -#: src/ui/gui/netplay_wait.slint:64 -msgctxt "NetplayWait" -msgid "Player 4:" -msgstr "Игрок 4:" +#: src/ui/gui/settings_page.slint:100 +msgctxt "Settings" +msgid "Apply CRT shader" +msgstr "Применить шейдер ЭЛТ" -#: src/ui/gui/netplay_wait.slint:76 -msgctxt "NetplayWait" -msgid "Enter chat message" -msgstr "Введите сообщение чата" +#: src/ui/gui/settings_page.slint:115 +msgctxt "Settings" +msgid "Overclock N64 CPU (may cause bugs)" +msgstr "Разгон процессора N64 (может вызвать ошибки)" -#: src/ui/gui/netplay_wait.slint:87 -msgctxt "NetplayWait" -msgid "Send Message" -msgstr "Отправить сообщение" +#: src/ui/gui/settings_page.slint:126 +msgctxt "Settings" +msgid "Disable Expansion Pak" +msgstr "Отключить Expansion Pak" -#: src/ui/gui/netplay_wait.slint:102 -msgctxt "NetplayWait" -msgid "Start Game" -msgstr "Начать игру" +#: src/ui/gui/settings_page.slint:137 +msgctxt "Settings" +msgid "Emulate UNFLoader" +msgstr "Эмулировать UNFLoader" -#: src/ui/gui/input_profile.slint:10 -msgctxt "InputProfileDialog" -msgid "Create/Modify Input Profile" -msgstr "Создать/изменить профиль ввода" - -#: src/ui/gui/input_profile.slint:18 -msgctxt "InputProfileDialog" -msgid "Enter profile name to create or modify" -msgstr "Введите имя профиля для создания или изменения" - -#: src/ui/gui/input_profile.slint:29 -msgctxt "InputProfileDialog" -msgid "Deadzone Percentage" -msgstr "Процент мёртвой зоны" - -#: src/ui/gui/input_profile.slint:51 -msgctxt "InputProfileDialog" -msgid "Use DirectInput" -msgstr "Использовать DirectInput" - -#: src/ui/gui/input_profile.slint:61 -msgctxt "InputProfileDialog" -msgid "Start Profile Creation Wizard" -msgstr "Запустить мастер создания профиля" +#: src/ui/gui/vru_dialog.slint:7 +msgctxt "VruDialog" +msgid "What Would You Like To Say?" +msgstr "Что вы хотите сказать?" From d17c577ccd74b9c8a686247dca3864e0e685a0f4 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 14 May 2026 21:55:42 +0200 Subject: [PATCH 0881/1117] use port 48646 for UNFloader (#890) --- src/ui/usb.rs | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/ui/usb.rs b/src/ui/usb.rs index 11c0986..1e0a14f 100644 --- a/src/ui/usb.rs +++ b/src/ui/usb.rs @@ -145,23 +145,23 @@ pub fn init() -> ( let usb_tx_clone = usb_tx.clone(); let cart_rx_clone = cart_rx.resubscribe(); let handle = tokio::spawn(async move { - let listener = tokio::net::TcpListener::bind("localhost:64000") - .await - .unwrap(); - - loop { - tokio::select! { - res = listener.accept() => { - if let Ok((c,_)) = res { - handle_connection(c,shutdown_rx.clone(),usb_rx.resubscribe(),usb_tx.clone(),cart_tx.clone()).await; - } else { + if let Ok(listener) = tokio::net::TcpListener::bind("localhost:48646").await { + loop { + tokio::select! { + res = listener.accept() => { + if let Ok((c,_)) = res { + handle_connection(c,shutdown_rx.clone(),usb_rx.resubscribe(),usb_tx.clone(),cart_tx.clone()).await; + } else { + break; + } + } + _ = shutdown_rx.changed() => { break; } } - _ = shutdown_rx.changed() => { - break; - } } + } else { + eprintln!("Could not bind to port 48646"); } }); ( From 3a301c517deb470042d9bdc2d3940dfec7dafbab Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 15 May 2026 08:58:19 +0200 Subject: [PATCH 0882/1117] shorten message (#891) --- parallel-rdp/interface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 78dc89d..9b158fa 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -204,7 +204,7 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { std::format("Challenge indicators: {}", display_challenge_indicator ? "ON" : "OFF") .c_str(), - MESSAGE_SHORT); + MESSAGE_VERY_SHORT); break; case SDL_SCANCODE_F12: callback.reset_game = true; From c8f485cd93c117444babcd5c6956caa8b5c5c5bf Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 15 May 2026 13:18:48 +0200 Subject: [PATCH 0883/1117] Build clib (#893) * Build clib * more * more * more * linker * more * more * more * more * more * more --- .github/workflows/build.yml | 8 - Cargo.lock | 610 +++++++++++++++++++++++++++++++----- Cargo.toml | 9 +- build.rs | 6 - src/lib.rs | 317 +++++++++++++++++++ src/main.rs | 314 +------------------ 6 files changed, 863 insertions(+), 401 deletions(-) create mode 100644 src/lib.rs diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b766775..cc7359a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -211,12 +211,6 @@ jobs: mv target/${{ matrix.target }}/release/gopher64 target/${{ matrix.target }}/release/gopher64-cli cargo bundle --release --target=${{ matrix.target }} --format osx cp target/${{ matrix.target }}/release/gopher64-cli target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/MacOS/gopher64-cli - install_name_tool -change /opt/homebrew/opt/freetype/lib/libfreetype.6.dylib \ - @executable_path/../Frameworks/libfreetype.6.dylib target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/MacOS/gopher64 - install_name_tool -change /opt/homebrew/opt/freetype/lib/libfreetype.6.dylib \ - @executable_path/../Frameworks/libfreetype.6.dylib target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/MacOS/gopher64-cli - install_name_tool -change /opt/homebrew/opt/libpng/lib/libpng16.16.dylib \ - @executable_path/../Frameworks/libpng16.16.dylib target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/Frameworks/libfreetype.6.dylib env: NETPLAY_ID: ${{ secrets.NETPLAY_ID }} MACOSX_DEPLOYMENT_TARGET: "15.0" @@ -233,8 +227,6 @@ jobs: - name: Sign Bundle Release if: ${{ github.ref_type == 'tag' }} run: | - codesign -f --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/Frameworks/libpng16.16.dylib - codesign -f --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/Frameworks/libfreetype.6.dylib codesign -f --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/Frameworks/libMoltenVK.dylib codesign -f --entitlements data/macos/entitlements_child.plist --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app/Contents/MacOS/gopher64-cli codesign -f --entitlements data/macos/entitlements_prod.plist --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/release/bundle/osx/Gopher64.app diff --git a/Cargo.lock b/Cargo.lock index 4c8c6ba..70f20c3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -315,6 +315,15 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "ash" +version = "0.38.0+1.3.281" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" +dependencies = [ + "libloading", +] + [[package]] name = "async-broadcast" version = "0.7.2" @@ -552,18 +561,18 @@ dependencies = [ [[package]] name = "avif-serialize" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "375082f007bd67184fb9c0374614b29f9aaa604ec301635f72338bb65386a53d" +checksum = "e7178fe5f7d460b13895ebb9dcb28a3a6216d2df2574a0806cb51b555d297f38" dependencies = [ "arrayvec", ] [[package]] name = "aws-lc-rs" -version = "1.16.3" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ec6fb3fe69024a75fa7e1bfb48aa6cf59706a101658ea01bfd33b2b248a038f" +checksum = "5ec2f1fc3ec205783a5da9a7e6c1509cc69dedf09a1949e412c1e18469326d00" dependencies = [ "aws-lc-sys", "zeroize", @@ -571,9 +580,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.40.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f50037ee5e1e41e7b8f9d161680a725bd1626cb6f8c7e901f91f942850852fe7" +checksum = "1a2f9779ce85b93ab6170dd940ad0169b5766ff848247aff13bb788b832fe3f4" dependencies = [ "cc", "cmake", @@ -617,6 +626,21 @@ dependencies = [ "syn", ] +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + [[package]] name = "bit_field" version = "0.10.3" @@ -647,6 +671,12 @@ dependencies = [ "no_std_io2", ] +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + [[package]] name = "block-buffer" version = "0.10.4" @@ -843,9 +873,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.61" +version = "1.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d" +checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" dependencies = [ "find-msvc-tools", "jobserver", @@ -1010,6 +1040,17 @@ dependencies = [ "thiserror 2.0.18", ] +[[package]] +name = "codespan-reporting" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" +dependencies = [ + "serde", + "termcolor", + "unicode-width", +] + [[package]] name = "color_quant" version = "1.1.0" @@ -1131,7 +1172,7 @@ checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ "bitflags 1.3.2", "core-foundation 0.9.4", - "core-graphics-types", + "core-graphics-types 0.1.3", "foreign-types", "libc", ] @@ -1147,6 +1188,17 @@ dependencies = [ "libc", ] +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.11.1", + "core-foundation 0.10.1", + "libc", +] + [[package]] name = "core_maths" version = "0.1.1" @@ -1442,6 +1494,15 @@ dependencies = [ "libloading", ] +[[package]] +name = "document-features" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + [[package]] name = "downcast-rs" version = "1.2.1" @@ -1680,6 +1741,27 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "femtovg" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "727c5dd9d601f3f4ea133b8a6ba37d37ca67ed59781675dc1c9c9f1701e0d197" +dependencies = [ + "bitflags 2.11.1", + "bytemuck", + "fnv", + "glow 0.17.0", + "imgref", + "itertools 0.14.0", + "log", + "rgb", + "slotmap", + "swash", + "wasm-bindgen", + "web-sys", + "wgpu", +] + [[package]] name = "field-offset" version = "0.3.6" @@ -1692,13 +1774,12 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.27" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db" +checksum = "5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759" dependencies = [ "cfg-if", "libc", - "libredox", ] [[package]] @@ -1928,28 +2009,6 @@ dependencies = [ "slab", ] -[[package]] -name = "gbm" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce852e998d3ca5e4a97014fb31c940dc5ef344ec7d364984525fd11e8a547e6a" -dependencies = [ - "bitflags 2.11.1", - "drm", - "drm-fourcc", - "gbm-sys", - "libc", -] - -[[package]] -name = "gbm-sys" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c13a5f2acc785d8fb6bf6b7ab6bfb0ef5dad4f4d97e8e70bb8e470722312f76f" -dependencies = [ - "libc", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -2049,6 +2108,18 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +[[package]] +name = "glow" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "glow" version = "0.17.0" @@ -2165,6 +2236,40 @@ dependencies = [ "zip", ] +[[package]] +name = "gpu-allocator" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51255ea7cfaadb6c5f1528d43e92a82acb2b96c43365989a28b2d44ee38f8795" +dependencies = [ + "ash", + "hashbrown 0.16.1", + "log", + "presser", + "thiserror 2.0.18", + "windows 0.62.2", +] + +[[package]] +name = "gpu-descriptor" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" +dependencies = [ + "bitflags 2.11.1", + "gpu-descriptor-types", + "hashbrown 0.15.5", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" +dependencies = [ + "bitflags 2.11.1", +] + [[package]] name = "grid" version = "1.0.1" @@ -2198,6 +2303,7 @@ checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ "cfg-if", "crunchy", + "num-traits", "zerocopy", ] @@ -2251,9 +2357,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" [[package]] name = "heapless" @@ -2293,6 +2399,12 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hexf-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" + [[package]] name = "hmac" version = "0.13.0" @@ -2349,9 +2461,9 @@ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "hybrid-array" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d46837a0ed51fe95bd3b05de33cd64a1ee88fc797477ca48446872504507c5" +checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" dependencies = [ "typenum", ] @@ -2426,15 +2538,11 @@ dependencies = [ "calloop 0.14.4", "cfg_aliases", "drm", - "gbm", - "glutin", "i-slint-common", "i-slint-core", - "i-slint-renderer-skia", + "i-slint-renderer-femtovg", "input", - "memmap2", "nix", - "raw-window-handle", "xkbcommon", ] @@ -2450,6 +2558,7 @@ dependencies = [ "i-slint-common", "i-slint-core", "i-slint-core-macros", + "i-slint-renderer-femtovg", ] [[package]] @@ -2471,6 +2580,7 @@ dependencies = [ "i-slint-common", "i-slint-core", "i-slint-core-macros", + "i-slint-renderer-femtovg", "i-slint-renderer-skia", "lyon_path", "muda", @@ -2586,6 +2696,7 @@ dependencies = [ "wasm-bindgen", "web-sys", "web-time", + "wgpu", ] [[package]] @@ -2599,24 +2710,50 @@ dependencies = [ "syn", ] +[[package]] +name = "i-slint-renderer-femtovg" +version = "1.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b28a8f0a7a777e670fbe2af6cbcec4935c37335bc0dab100f73bdc197dfa3a" +dependencies = [ + "cfg-if", + "const-field-offset", + "derive_more", + "femtovg", + "glow 0.17.0", + "i-slint-common", + "i-slint-core", + "i-slint-core-macros", + "imgref", + "lyon_path", + "pin-weak", + "rgb", + "wasm-bindgen", + "web-sys", + "wgpu", +] + [[package]] name = "i-slint-renderer-skia" version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4030ff9eeb1b99fdf9b47472f3a7a582f3bcb57207c9bc07505dc6998abdcbc" dependencies = [ + "ash", "bytemuck", "cfg-if", "cfg_aliases", "clru", "const-field-offset", "derive_more", - "glow", + "foreign-types", + "glow 0.17.0", "glutin", "i-slint-common", "i-slint-core", "i-slint-core-macros", "lyon_path", + "metal 0.31.0", "objc2 0.6.4", "objc2-app-kit 0.3.2", "objc2-core-foundation", @@ -2630,9 +2767,12 @@ dependencies = [ "scoped-tls-hkt", "skia-safe", "softbuffer", + "spin_on", "unicode-segmentation", "vtable", + "wgpu", "windows 0.62.2", + "windows-core 0.62.2", "write-fonts", ] @@ -2887,7 +3027,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.17.0", + "hashbrown 0.17.1", "serde", "serde_core", ] @@ -3098,6 +3238,17 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "khronos-egl" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" +dependencies = [ + "libc", + "libloading", + "pkg-config", +] + [[package]] name = "khronos_api" version = "3.1.0" @@ -3106,12 +3257,13 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] name = "kurbo" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7564e90fe3c0d5771e1f0bc95322b21baaeaa0d9213fa6a0b61c99f8b17b3bfb" +checksum = "4b60dfc32f652b926df6192e55525b16d186c69d47876c3ead4da5cc9f8450e2" dependencies = [ "arrayvec", "euclid", + "polycool", "smallvec", ] @@ -3135,9 +3287,9 @@ checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" [[package]] name = "libbz2-rs-sys" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3a6a8c165077efc8f3a971534c50ea6a1a18b329ef4a66e897a7e3a1494565f" +checksum = "f8fc329e1457d97a9d58a4e2ca49e3be572431a7e096008efc2e3a3c19d428f4" [[package]] name = "libc" @@ -3247,6 +3399,12 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" +[[package]] +name = "litrs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" + [[package]] name = "lock_api" version = "0.4.14" @@ -3327,6 +3485,15 @@ dependencies = [ "sha2 0.10.9", ] +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + [[package]] name = "maybe-rayon" version = "0.1.1" @@ -3361,6 +3528,36 @@ dependencies = [ "autocfg", ] +[[package]] +name = "metal" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" +dependencies = [ + "bitflags 2.11.1", + "block", + "core-graphics-types 0.1.3", + "foreign-types", + "log", + "objc", + "paste", +] + +[[package]] +name = "metal" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7047791b5bc903b8cd963014b355f71dc9864a9a0b727057676c1dcae5cbc15" +dependencies = [ + "bitflags 2.11.1", + "block", + "core-graphics-types 0.2.0", + "foreign-types", + "log", + "objc", + "paste", +] + [[package]] name = "mimalloc" version = "0.1.50" @@ -3432,6 +3629,32 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "naga" +version = "28.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "618f667225063219ddfc61251087db8a9aec3c3f0950c916b614e403486f1135" +dependencies = [ + "arrayvec", + "bit-set", + "bitflags 2.11.1", + "cfg-if", + "cfg_aliases", + "codespan-reporting", + "half", + "hashbrown 0.16.1", + "hexf-parse", + "indexmap", + "libm", + "log", + "num-traits", + "once_cell", + "rustc-hash 1.1.0", + "spirv", + "thiserror 2.0.18", + "unicode-ident", +] + [[package]] name = "natord" version = "1.0.9" @@ -3599,6 +3822,15 @@ dependencies = [ "syn", ] +[[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-sys" version = "0.3.5" @@ -3992,9 +4224,9 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "open" -version = "5.3.4" +version = "5.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3bab717c29a857abf75fcef718d441ec7cb2725f937343c734740a985d37fd" +checksum = "2fbaa89d2ddc8473c78a3adf69eea8cffa28c483b8e02a971ef31527cd0fc92c" dependencies = [ "is-wsl", "libc", @@ -4023,6 +4255,15 @@ dependencies = [ "libredox", ] +[[package]] +name = "ordered-float" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7d950ca161dc355eaf28f82b11345ed76c6e1f6eb1f4f4479e0323b9e2fbd0e" +dependencies = [ + "num-traits", +] + [[package]] name = "ordered-stream" version = "0.2.0" @@ -4048,6 +4289,29 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.5.18", + "smallvec", + "windows-link 0.2.1", +] + [[package]] name = "parlance" version = "0.1.0" @@ -4123,18 +4387,18 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" [[package]] name = "pin-project" -version = "1.1.12" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf0d9e68100b3a7989b4901972f265cd542e560a3a8a724e1e20322f4d06ce9" +checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.12" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a990e22f43e84855daf260dded30524ef4a9021cc7541c26540500a50b624389" +checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" dependencies = [ "proc-macro2", "quote", @@ -4228,6 +4492,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" +[[package]] +name = "polycool" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50596ddc09eb5ad5f75cacd40209568e66df71baf86e1499a0e99c4cff12a5a6" +dependencies = [ + "arrayvec", +] + [[package]] name = "portable-atomic" version = "1.13.1" @@ -4237,6 +4510,15 @@ dependencies = [ "critical-section", ] +[[package]] +name = "portable-atomic-util" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" +dependencies = [ + "portable-atomic", +] + [[package]] name = "postcard" version = "1.1.3" @@ -4282,6 +4564,12 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "presser" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" + [[package]] name = "prettyplease" version = "0.2.37" @@ -4371,9 +4659,9 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quick-xml" -version = "0.39.3" +version = "0.39.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721da970c312655cde9b4ffe0547f20a8494866a4af5ff51f18b7c633d0c870b" +checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e" dependencies = [ "memchr", "serde", @@ -4502,6 +4790,12 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" +[[package]] +name = "range-alloc" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca45419789ae5a7899559e9512e58ca889e41f04f1f2445e9f4b290ceccd1d08" + [[package]] name = "rav1e" version = "0.8.1" @@ -4668,6 +4962,12 @@ version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +[[package]] +name = "renderdoc-sys" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" + [[package]] name = "reqwest" version = "0.13.3" @@ -5346,6 +5646,7 @@ dependencies = [ "i-slint-common", "i-slint-core", "i-slint-core-macros", + "i-slint-renderer-femtovg", "i-slint-renderer-software", "num-traits", "once_cell", @@ -5516,7 +5817,6 @@ checksum = "aac18da81ebbf05109ab275b157c22a653bb3c12cf884450179942f81bcbf6c3" dependencies = [ "as-raw-xcb-connection", "bytemuck", - "drm", "fastrand", "js-sys", "memmap2", @@ -5567,6 +5867,15 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "spirv" +version = "0.3.0+sdk-1.3.268.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" +dependencies = [ + "bitflags 2.11.1", +] + [[package]] name = "stable_deref_trait" version = "1.2.1" @@ -5742,6 +6051,15 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + [[package]] name = "text-size" version = "1.1.1" @@ -5914,9 +6232,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.52.2" +version = "1.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "110a78583f19d5cdb2c5ccf321d1290344e71313c6c37d43520d386027d18386" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" dependencies = [ "bytes", "libc", @@ -6001,7 +6319,7 @@ dependencies = [ "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", "toml_writer", - "winnow 1.0.2", + "winnow 1.0.3", ] [[package]] @@ -6032,7 +6350,7 @@ dependencies = [ "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", "toml_writer", - "winnow 1.0.2", + "winnow 1.0.3", ] [[package]] @@ -6041,7 +6359,7 @@ version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow 1.0.2", + "winnow 1.0.3", ] [[package]] @@ -6717,6 +7035,156 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" +[[package]] +name = "wgpu" +version = "28.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9cb534d5ffd109c7d1135f34cdae29e60eab94855a625dcfe1705f8bc7ad79f" +dependencies = [ + "arrayvec", + "bitflags 2.11.1", + "bytemuck", + "cfg-if", + "cfg_aliases", + "document-features", + "hashbrown 0.16.1", + "js-sys", + "log", + "naga", + "parking_lot", + "portable-atomic", + "profiling", + "raw-window-handle", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "28.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d23f4642f53f666adcfd2d3218ab174d1e6681101aef18696b90cbe64d1c10f9" +dependencies = [ + "arrayvec", + "bit-set", + "bit-vec", + "bitflags 2.11.1", + "bytemuck", + "cfg_aliases", + "document-features", + "hashbrown 0.16.1", + "indexmap", + "log", + "naga", + "once_cell", + "parking_lot", + "portable-atomic", + "profiling", + "raw-window-handle", + "rustc-hash 1.1.0", + "smallvec", + "thiserror 2.0.18", + "wgpu-core-deps-apple", + "wgpu-core-deps-emscripten", + "wgpu-core-deps-windows-linux-android", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core-deps-apple" +version = "28.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87b7b696b918f337c486bf93142454080a32a37832ba8a31e4f48221890047da" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-core-deps-emscripten" +version = "28.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b251c331f84feac147de3c4aa3aa45112622a95dd7ee1b74384fa0458dbd79" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-core-deps-windows-linux-android" +version = "28.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ca976e72b2c9964eb243e281f6ce7f14a514e409920920dcda12ae40febaae" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-hal" +version = "28.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d6cb474beb218824dcc9e1ce679d973f719262789bfb27407da560cac20eeb" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set", + "bitflags 2.11.1", + "block", + "bytemuck", + "cfg-if", + "cfg_aliases", + "core-graphics-types 0.2.0", + "glow 0.16.0", + "glutin_wgl_sys", + "gpu-allocator", + "gpu-descriptor", + "hashbrown 0.16.1", + "js-sys", + "khronos-egl", + "libc", + "libloading", + "log", + "metal 0.33.0", + "naga", + "ndk-sys", + "objc", + "once_cell", + "ordered-float", + "parking_lot", + "portable-atomic", + "portable-atomic-util", + "profiling", + "range-alloc", + "raw-window-handle", + "renderdoc-sys", + "smallvec", + "thiserror 2.0.18", + "wasm-bindgen", + "web-sys", + "wgpu-types", + "windows 0.62.2", + "windows-core 0.62.2", +] + +[[package]] +name = "wgpu-types" +version = "28.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e18308757e594ed2cd27dddbb16a139c42a683819d32a2e0b1b0167552f5840c" +dependencies = [ + "bitflags 2.11.1", + "bytemuck", + "js-sys", + "log", + "web-sys", +] + [[package]] name = "winapi-util" version = "0.1.11" @@ -7227,9 +7695,9 @@ checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" [[package]] name = "winnow" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0" +checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" dependencies = [ "memchr", ] @@ -7532,7 +8000,7 @@ dependencies = [ "uds_windows", "uuid 1.23.1", "windows-sys 0.61.2", - "winnow 1.0.2", + "winnow 1.0.3", "zbus_macros", "zbus_names", "zvariant", @@ -7584,7 +8052,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d" dependencies = [ "serde", - "winnow 1.0.2", + "winnow 1.0.3", "zvariant", ] @@ -7628,9 +8096,9 @@ dependencies = [ [[package]] name = "zerofrom" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" dependencies = [ "zerofrom-derive", ] @@ -7800,7 +8268,7 @@ dependencies = [ "endi", "enumflags2", "serde", - "winnow 1.0.2", + "winnow 1.0.3", "zvariant_derive", "zvariant_utils", ] @@ -7828,5 +8296,5 @@ dependencies = [ "quote", "serde", "syn", - "winnow 1.0.2", + "winnow 1.0.3", ] diff --git a/Cargo.toml b/Cargo.toml index cd799b0..9a32088 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,9 @@ rust-version = "1.95.0" default = ["gui"] gui = ["dep:rfd", "dep:slint", "dep:slint-build"] +[lib] +crate-type = ["cdylib", "rlib"] + [dependencies] dirs = "6.0" zip = "8.0" @@ -16,11 +19,11 @@ chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde-big-array = "0.5" -slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "unstable-winit-030", "backend-winit", "renderer-skia", "accessibility"], optional = true } +slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "unstable-winit-030", "backend-winit", "renderer-femtovg-wgpu", "accessibility"], optional = true } open = "5.3" sha2 = "0.11" sdl3-sys = { version = "0.6", features = ["build-from-source-static"] } -sdl3-ttf-sys = { version = "0.6", features = ["build-from-source-static", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } +sdl3-ttf-sys = { version = "0.6", features = ["build-static-vendored", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } rfd = {version = "0.17", optional = true } tokio = {version = "1.46", features = ["rt-multi-thread", "macros", "fs", "process"] } spin_sleep = "1.3" @@ -60,5 +63,5 @@ name = "Gopher64" identifier = "io.github.gopher64.gopher64" category = "public.app-category.games" icon = ["data/icon/gopher64_128x128.png","data/icon/gopher64_256x256.png","data/icon/gopher64_512x512.png"] -osx_frameworks = ["/opt/homebrew/opt/molten-vk/lib/libMoltenVK.dylib","/opt/homebrew/opt/freetype/lib/libfreetype.6.dylib","/opt/homebrew/opt/libpng/lib/libpng16.16.dylib"] +osx_frameworks = ["/opt/homebrew/opt/molten-vk/lib/libMoltenVK.dylib"] osx_minimum_system_version = "15.0" diff --git a/build.rs b/build.rs index 5f53053..b1876fd 100644 --- a/build.rs +++ b/build.rs @@ -135,9 +135,6 @@ fn main() { .compile() .unwrap(); } else if os == "macos" { - println!("cargo:rustc-link-search=native=/opt/homebrew/opt/freetype/lib"); - println!("cargo:rustc-link-lib=dylib=freetype"); - let output = std::process::Command::new("clang") .args(["--print-runtime-dir"]) .output() @@ -148,9 +145,6 @@ fn main() { println!("cargo:rustc-link-search=native={}", runtime_dir); println!("cargo:rustc-link-lib=static=clang_rt.osx"); } - if cfg!(not(feature = "gui")) && os == "linux" { - println!("cargo:rustc-link-lib=dylib=freetype"); - } volk_build.flag("-flto=thin"); rdp_build.flag("-flto=thin"); diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..e824cc0 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,317 @@ +#![deny(warnings)] + +mod cheats; +mod device; +mod netplay; +mod retroachievements; +mod savestates; +mod ui; +use clap::Parser; +use std::io::Error; + +/// N64 emulator +#[derive(Parser, Debug)] +#[command(author, version=env!("GIT_DESCRIBE"), about, long_about = None, arg_required_else_help = if cfg!(feature = "gui") { false } else { true })] +struct Args { + game: Option, + #[arg(short, long)] + fullscreen: bool, + #[arg(long)] + overclock: Option, + #[arg(long)] + disable_expansion_pak: Option, + #[arg(long, value_name = "CHEATS_FILE", hide = true)] + cheats: Option, + #[arg(long, value_name = "NETPLAY_PEER_ADDR", hide = true)] + netplay_peer_addr: Option, + #[arg(long, value_name = "NETPLAY_PLAYER_NUMBER", hide = true)] + netplay_player_number: Option, + #[arg( + long, + value_name = "PROFILE_NAME", + help = "Create a new input profile (keyboard/gamepad mappings)" + )] + configure_input_profile: Option, + #[arg(long, help = "Use DirectInput when configuring a new input profile")] + use_dinput: bool, + #[arg( + long, + value_name = "DEADZONE_PERCENTAGE", + help = "Used along with --configure-input-profile to set the deadzone for analog sticks" + )] + deadzone: Option, + #[arg( + long, + value_name = "PROFILE_NAME", + help = "Must also specify --port. Used to bind a previously created profile to a port" + )] + bind_input_profile: Option, + #[arg( + long, + help = "Lists connected controllers which can be used in --assign-controller" + )] + list_controllers: bool, + #[arg( + long, + value_name = "CONTROLLER_NUMBER", + help = "Must also specify --port. Used to assign a controller listed in --list-controllers to a port" + )] + assign_controller: Option, + #[arg( + long, + value_name = "PORT", + help = "Valid values: 1-4. To be used alongside --bind-input-profile and --assign-controller" + )] + port: Option, + #[arg( + long, + help = "Clear all input profile bindings and controller assignments" + )] + clear_input_bindings: bool, + #[arg( + long, + value_name = "SLOT", + help = "Load savestate from slot 0-9 when starting the game" + )] + load_state: Option, + #[arg( + long = "ra-username", + value_name = "USERNAME", + help = "Username for RetroAchievements" + )] + ra_username: Option, + #[arg( + long = "ra-token", + value_name = "TOKEN", + help = "Token for RetroAchievements", + hide = true + )] + ra_token: Option, + #[arg( + long = "ra-password", + value_name = "PASSWORD", + help = "Password for RetroAchievements" + )] + ra_password: Option, + #[arg( + long = "ra-hardcore", + help = "Enable Hardcore mode for RetroAchievements" + )] + ra_hardcore: bool, + #[arg( + long = "ra-challenge", + help = "Enable Challenge Indicators for RetroAchievements" + )] + ra_challenge: bool, + #[arg( + long = "ra-leaderboard", + help = "Enable Leaderboard Trackers for RetroAchievements" + )] + ra_leaderboard: bool, + #[arg(long = "discord-rich-presence", help = "Enable Discord Rich Presence")] + discord_rich_presence: bool, +} + +pub async fn run() -> std::io::Result<()> { + let dirs = ui::get_dirs(); + + std::fs::create_dir_all(dirs.config_dir)?; + std::fs::create_dir_all(dirs.cache_dir)?; + std::fs::create_dir_all(dirs.data_dir.join("saves"))?; + std::fs::create_dir_all(dirs.data_dir.join("states"))?; + + ui::sdl_hints(); + + let args = Args::parse(); + if let Some(game) = args.game { + let file_path = std::path::Path::new(&game); + let Some(rom_contents) = device::get_rom_contents(file_path) else { + return Err(Error::other(format!( + "Could not read ROM file: {}", + file_path.display() + ))); + }; + + if let Some(slot) = args.load_state + && slot > 9 + { + return Err(Error::other("Savestate slot must be between 0 and 9")); + } + + let mut device = device::Device::new(); + + device.ui.config.recent_roms.retain(|x| *x != game); + device.ui.config.recent_roms.insert(0, game); + device.ui.config.recent_roms.truncate(5); + + if args.fullscreen { + device.ui.video.fullscreen = true; + } else { + device.ui.video.fullscreen = device.ui.config.video.fullscreen; + } + let overclock = args + .overclock + .unwrap_or(device.ui.config.emulation.overclock); + let disable_expansion_pak = args + .disable_expansion_pak + .unwrap_or(device.ui.config.emulation.disable_expansion_pak); + let cheats = if let Some(cheats_file) = args.cheats + && let Ok(data) = std::fs::read(cheats_file) + && let Ok(cheats) = serde_json::from_slice(&data) + { + cheats + } else { + let game_crc = ui::storage::get_game_crc(&rom_contents); + ui::config::Cheats::new() + .cheats + .get(&game_crc) + .cloned() + .unwrap_or_default() + }; + + let mut shutdown_tx = None; + let mut usb_handle = None; + + if let Some(peer_addr) = args.netplay_peer_addr + && let Some(player_number) = args.netplay_player_number + { + device.netplay = Some(netplay::init(peer_addr.parse().unwrap(), player_number)); + } else { + for i in 0..4 { + if device.ui.config.input.transfer_pak[i] + && !device.ui.config.input.gb_rom_path[i].is_empty() + && !device.ui.config.input.gb_ram_path[i].is_empty() + && let Ok(rom) = std::fs::read(&device.ui.config.input.gb_rom_path[i]) + && let Ok(ram) = std::fs::read(&device.ui.config.input.gb_ram_path[i]) + { + device::controller::gbcart::init(&mut device.transferpaks[i].cart, &rom, &ram); + } + } + + if device.ui.config.emulation.usb { + (shutdown_tx, usb_handle, device.ui.usb) = ui::usb::init(); + } + + if let Some(username) = args.ra_username { + retroachievements::init_client( + if cfg!(ra_hardcore_enabled) { + args.ra_hardcore + } else { + false + }, + args.ra_challenge, + args.ra_leaderboard, + ); + + let (tx, rx) = tokio::sync::oneshot::channel::(); + if let Some(password) = args.ra_password { + retroachievements::login_user(username, password, tx); + } else if let Some(token) = args.ra_token { + retroachievements::login_token_user(username, token, tx); + } else { + tx.send(false).unwrap(); + } + + rx.await.unwrap(); + } + } + + let (discord_watch_tx, discord_handle) = retroachievements::load_game( + &rom_contents, + rom_contents.len(), + args.discord_rich_presence, + ) + .await; + + device::run_game( + &mut device, + &rom_contents, + ui::GameSettings { + overclock, + disable_expansion_pak, + cheats, + load_savestate_slot: args.load_state, + }, + ); + + retroachievements::shutdown_client(discord_watch_tx, discord_handle).await; + + if device.netplay.is_some() { + netplay::close(&mut device); + } else { + for i in 0..4 { + if device.ui.config.input.transfer_pak[i] + && !device.ui.config.input.gb_ram_path[i].is_empty() + && !device.transferpaks[i].cart.ram.is_empty() + { + device::controller::gbcart::save( + &mut device.transferpaks[i].cart, + device.vi.elapsed_time as i64, + &device.ui.config.input.gb_ram_path[i], + ); + } + } + } + if let Some(shutdown_tx) = &shutdown_tx { + ui::usb::close(shutdown_tx, usb_handle).await; + } + } else if std::env::args().count() > 1 { + let mut config = ui::config::Config::new(); + + if let Some(profile) = args.configure_input_profile { + ui::input::configure_input_profile( + &mut config, + profile, + args.use_dinput, + args.deadzone.unwrap_or(ui::input::DEADZONE_DEFAULT), + ); + + ui::sdl_close(); + return Ok(()); + } else { + if args.clear_input_bindings { + ui::input::clear_bindings(&mut config); + return Ok(()); + } + if let Some(port) = args.port + && !(1..=4).contains(&port) + { + return Err(Error::other("Port must be between 1 and 4")); + } + + ui::sdl_init(sdl3_sys::init::SDL_INIT_GAMEPAD); + + if args.list_controllers { + let controllers = ui::input::get_controller_names(); + for (i, controller) in controllers.iter().enumerate() { + println!("Controller {i}: {controller}"); + } + } else { + if let Some(assign_controller) = args.assign_controller { + let Some(port) = args.port else { + ui::sdl_close(); + return Err(Error::other("Must specify port number")); + }; + ui::input::assign_controller(&mut config, assign_controller - 1, port); + } + if let Some(profile) = args.bind_input_profile { + let Some(port) = args.port else { + ui::sdl_close(); + return Err(Error::other("Must specify port number")); + }; + ui::input::bind_input_profile(&mut config, profile, port); + } + } + } + } else { + #[cfg(feature = "gui")] + { + retroachievements::init_client(false, false, false); + ui::gui::app_window(); + retroachievements::shutdown_client(None, None).await; + } + } + + ui::sdl_close(); + Ok(()) +} diff --git a/src/main.rs b/src/main.rs index 9c7ca5b..e275fc0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,319 +3,7 @@ #[global_allocator] static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; -mod cheats; -mod device; -mod netplay; -mod retroachievements; -mod savestates; -mod ui; -use clap::Parser; -use std::io::Error; - -/// N64 emulator -#[derive(Parser, Debug)] -#[command(author, version=env!("GIT_DESCRIBE"), about, long_about = None, arg_required_else_help = if cfg!(feature = "gui") { false } else { true })] -struct Args { - game: Option, - #[arg(short, long)] - fullscreen: bool, - #[arg(long)] - overclock: Option, - #[arg(long)] - disable_expansion_pak: Option, - #[arg(long, value_name = "CHEATS_FILE", hide = true)] - cheats: Option, - #[arg(long, value_name = "NETPLAY_PEER_ADDR", hide = true)] - netplay_peer_addr: Option, - #[arg(long, value_name = "NETPLAY_PLAYER_NUMBER", hide = true)] - netplay_player_number: Option, - #[arg( - long, - value_name = "PROFILE_NAME", - help = "Create a new input profile (keyboard/gamepad mappings)" - )] - configure_input_profile: Option, - #[arg(long, help = "Use DirectInput when configuring a new input profile")] - use_dinput: bool, - #[arg( - long, - value_name = "DEADZONE_PERCENTAGE", - help = "Used along with --configure-input-profile to set the deadzone for analog sticks" - )] - deadzone: Option, - #[arg( - long, - value_name = "PROFILE_NAME", - help = "Must also specify --port. Used to bind a previously created profile to a port" - )] - bind_input_profile: Option, - #[arg( - long, - help = "Lists connected controllers which can be used in --assign-controller" - )] - list_controllers: bool, - #[arg( - long, - value_name = "CONTROLLER_NUMBER", - help = "Must also specify --port. Used to assign a controller listed in --list-controllers to a port" - )] - assign_controller: Option, - #[arg( - long, - value_name = "PORT", - help = "Valid values: 1-4. To be used alongside --bind-input-profile and --assign-controller" - )] - port: Option, - #[arg( - long, - help = "Clear all input profile bindings and controller assignments" - )] - clear_input_bindings: bool, - #[arg( - long, - value_name = "SLOT", - help = "Load savestate from slot 0-9 when starting the game" - )] - load_state: Option, - #[arg( - long = "ra-username", - value_name = "USERNAME", - help = "Username for RetroAchievements" - )] - ra_username: Option, - #[arg( - long = "ra-token", - value_name = "TOKEN", - help = "Token for RetroAchievements", - hide = true - )] - ra_token: Option, - #[arg( - long = "ra-password", - value_name = "PASSWORD", - help = "Password for RetroAchievements" - )] - ra_password: Option, - #[arg( - long = "ra-hardcore", - help = "Enable Hardcore mode for RetroAchievements" - )] - ra_hardcore: bool, - #[arg( - long = "ra-challenge", - help = "Enable Challenge Indicators for RetroAchievements" - )] - ra_challenge: bool, - #[arg( - long = "ra-leaderboard", - help = "Enable Leaderboard Trackers for RetroAchievements" - )] - ra_leaderboard: bool, - #[arg(long = "discord-rich-presence", help = "Enable Discord Rich Presence")] - discord_rich_presence: bool, -} - #[tokio::main(worker_threads = 4)] async fn main() -> std::io::Result<()> { - let dirs = ui::get_dirs(); - - std::fs::create_dir_all(dirs.config_dir)?; - std::fs::create_dir_all(dirs.cache_dir)?; - std::fs::create_dir_all(dirs.data_dir.join("saves"))?; - std::fs::create_dir_all(dirs.data_dir.join("states"))?; - - ui::sdl_hints(); - - let args = Args::parse(); - if let Some(game) = args.game { - let file_path = std::path::Path::new(&game); - let Some(rom_contents) = device::get_rom_contents(file_path) else { - return Err(Error::other(format!( - "Could not read ROM file: {}", - file_path.display() - ))); - }; - - if let Some(slot) = args.load_state - && slot > 9 - { - return Err(Error::other("Savestate slot must be between 0 and 9")); - } - - let mut device = device::Device::new(); - - device.ui.config.recent_roms.retain(|x| *x != game); - device.ui.config.recent_roms.insert(0, game); - device.ui.config.recent_roms.truncate(5); - - if args.fullscreen { - device.ui.video.fullscreen = true; - } else { - device.ui.video.fullscreen = device.ui.config.video.fullscreen; - } - let overclock = args - .overclock - .unwrap_or(device.ui.config.emulation.overclock); - let disable_expansion_pak = args - .disable_expansion_pak - .unwrap_or(device.ui.config.emulation.disable_expansion_pak); - let cheats = if let Some(cheats_file) = args.cheats - && let Ok(data) = std::fs::read(cheats_file) - && let Ok(cheats) = serde_json::from_slice(&data) - { - cheats - } else { - let game_crc = ui::storage::get_game_crc(&rom_contents); - ui::config::Cheats::new() - .cheats - .get(&game_crc) - .cloned() - .unwrap_or_default() - }; - - let mut shutdown_tx = None; - let mut usb_handle = None; - - if let Some(peer_addr) = args.netplay_peer_addr - && let Some(player_number) = args.netplay_player_number - { - device.netplay = Some(netplay::init(peer_addr.parse().unwrap(), player_number)); - } else { - for i in 0..4 { - if device.ui.config.input.transfer_pak[i] - && !device.ui.config.input.gb_rom_path[i].is_empty() - && !device.ui.config.input.gb_ram_path[i].is_empty() - && let Ok(rom) = std::fs::read(&device.ui.config.input.gb_rom_path[i]) - && let Ok(ram) = std::fs::read(&device.ui.config.input.gb_ram_path[i]) - { - device::controller::gbcart::init(&mut device.transferpaks[i].cart, &rom, &ram); - } - } - - if device.ui.config.emulation.usb { - (shutdown_tx, usb_handle, device.ui.usb) = ui::usb::init(); - } - - if let Some(username) = args.ra_username { - retroachievements::init_client( - if cfg!(ra_hardcore_enabled) { - args.ra_hardcore - } else { - false - }, - args.ra_challenge, - args.ra_leaderboard, - ); - - let (tx, rx) = tokio::sync::oneshot::channel::(); - if let Some(password) = args.ra_password { - retroachievements::login_user(username, password, tx); - } else if let Some(token) = args.ra_token { - retroachievements::login_token_user(username, token, tx); - } else { - tx.send(false).unwrap(); - } - - rx.await.unwrap(); - } - } - - let (discord_watch_tx, discord_handle) = retroachievements::load_game( - &rom_contents, - rom_contents.len(), - args.discord_rich_presence, - ) - .await; - - device::run_game( - &mut device, - &rom_contents, - ui::GameSettings { - overclock, - disable_expansion_pak, - cheats, - load_savestate_slot: args.load_state, - }, - ); - - retroachievements::shutdown_client(discord_watch_tx, discord_handle).await; - - if device.netplay.is_some() { - netplay::close(&mut device); - } else { - for i in 0..4 { - if device.ui.config.input.transfer_pak[i] - && !device.ui.config.input.gb_ram_path[i].is_empty() - && !device.transferpaks[i].cart.ram.is_empty() - { - device::controller::gbcart::save( - &mut device.transferpaks[i].cart, - device.vi.elapsed_time as i64, - &device.ui.config.input.gb_ram_path[i], - ); - } - } - } - if let Some(shutdown_tx) = &shutdown_tx { - ui::usb::close(shutdown_tx, usb_handle).await; - } - } else if std::env::args().count() > 1 { - let mut config = ui::config::Config::new(); - - if let Some(profile) = args.configure_input_profile { - ui::input::configure_input_profile( - &mut config, - profile, - args.use_dinput, - args.deadzone.unwrap_or(ui::input::DEADZONE_DEFAULT), - ); - - ui::sdl_close(); - return Ok(()); - } else { - if args.clear_input_bindings { - ui::input::clear_bindings(&mut config); - return Ok(()); - } - if let Some(port) = args.port - && !(1..=4).contains(&port) - { - return Err(Error::other("Port must be between 1 and 4")); - } - - ui::sdl_init(sdl3_sys::init::SDL_INIT_GAMEPAD); - - if args.list_controllers { - let controllers = ui::input::get_controller_names(); - for (i, controller) in controllers.iter().enumerate() { - println!("Controller {i}: {controller}"); - } - } else { - if let Some(assign_controller) = args.assign_controller { - let Some(port) = args.port else { - ui::sdl_close(); - return Err(Error::other("Must specify port number")); - }; - ui::input::assign_controller(&mut config, assign_controller - 1, port); - } - if let Some(profile) = args.bind_input_profile { - let Some(port) = args.port else { - ui::sdl_close(); - return Err(Error::other("Must specify port number")); - }; - ui::input::bind_input_profile(&mut config, profile, port); - } - } - } - } else { - #[cfg(feature = "gui")] - { - retroachievements::init_client(false, false, false); - ui::gui::app_window(); - retroachievements::shutdown_client(None, None).await; - } - } - - ui::sdl_close(); - Ok(()) + gopher64::run().await } From 93bf103f03348aec7cae8b6856acdf35da726cc5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 15 May 2026 14:36:11 +0200 Subject: [PATCH 0884/1117] move around RA code (#894) * move around RA code * more * more * more --- build.rs | 1 - retroachievements/retroachievements.c | 20 +++++++++--------- retroachievements/retroachievements.h | 3 +-- src/device.rs | 12 ++++++++--- src/lib.rs | 15 +++++--------- src/retroachievements.rs | 30 +++++++++++++-------------- 6 files changed, 39 insertions(+), 42 deletions(-) diff --git a/build.rs b/build.rs index b1876fd..550847d 100644 --- a/build.rs +++ b/build.rs @@ -174,7 +174,6 @@ fn main() { .allowlist_function("ra_state_size") .allowlist_function("ra_save_state") .allowlist_function("ra_load_state") - .allowlist_function("ra_get_game_info") .allowlist_function("ra_get_rich_presence"); if cfg!(feature = "gui") { diff --git a/retroachievements/retroachievements.c b/retroachievements/retroachievements.c index b06d81b..bb00cc3 100644 --- a/retroachievements/retroachievements.c +++ b/retroachievements/retroachievements.c @@ -130,9 +130,12 @@ static void load_game_callback(int result, const char *error_message, notify_load_game(userdata); } -void ra_welcome() { - if (!g_client) +void ra_welcome(const char **game_title, const char **game_image_url) { + if (!g_client) { + *game_title = NULL; + *game_image_url = NULL; return; + } char buffer[512]; @@ -142,11 +145,16 @@ void ra_welcome() { rdp_onscreen_message(buffer, MESSAGE_LONG); free(error_message); rc_client_set_userdata(g_client, NULL); + + *game_title = NULL; + *game_image_url = NULL; return; } const rc_client_game_t *game = rc_client_get_game_info(g_client); if (!game) { + *game_title = NULL; + *game_image_url = NULL; return; } @@ -166,15 +174,7 @@ void ra_welcome() { "Game has no achievements"); } rdp_onscreen_message(buffer, MESSAGE_LONG); -} -void ra_get_game_info(const char **game_title, const char **game_image_url) { - const rc_client_game_t *game = rc_client_get_game_info(g_client); - if (!game) { - *game_title = NULL; - *game_image_url = NULL; - return; - } *game_title = game->title; *game_image_url = game->badge_url; } diff --git a/retroachievements/retroachievements.h b/retroachievements/retroachievements.h index 4fb0690..1d8693a 100644 --- a/retroachievements/retroachievements.h +++ b/retroachievements/retroachievements.h @@ -4,7 +4,7 @@ void ra_init_client(bool hardcore, bool challenge, bool leaderboard); void ra_shutdown_client(); -void ra_welcome(); +void ra_welcome(const char **game_title, const char **game_image_url); bool ra_get_hardcore(); void ra_load_game(const uint8_t *rom, size_t rom_size, void *userdata); void ra_unload_game(); @@ -24,7 +24,6 @@ void ra_save_state(uint8_t *state, size_t state_size); void ra_load_state(const uint8_t *state, size_t state_size); const char *ra_get_rich_presence(); -void ra_get_game_info(const char **game_title, const char **game_image_url); #ifdef __cplusplus extern "C" { diff --git a/src/device.rs b/src/device.rs index 3f7157d..1abf32a 100644 --- a/src/device.rs +++ b/src/device.rs @@ -47,7 +47,12 @@ pub mod tlb; pub mod unmapped; pub mod vi; -pub fn run_game(device: &mut Device, rom_contents: &[u8], game_settings: ui::GameSettings) { +pub async fn run_game( + device: &mut Device, + rom_contents: &[u8], + game_settings: ui::GameSettings, + discord_rich_presence: bool, +) { device.cpu.overclock = game_settings.overclock; if game_settings.disable_expansion_pak { device.rdram.size = 0x400000; @@ -69,7 +74,8 @@ pub fn run_game(device: &mut Device, rom_contents: &[u8], game_settings: ui::Gam ui::input::init(&mut device.ui); // must be after video init - retroachievements::welcome(); + let (discord_watch_tx, discord_handle) = + retroachievements::load_game(rom_contents, rom_contents.len(), discord_rich_presence).await; mi::init(device); pif::init(device); @@ -93,7 +99,7 @@ pub fn run_game(device: &mut Device, rom_contents: &[u8], game_settings: ui::Gam cpu::run(device); - retroachievements::unload_game(); + retroachievements::unload_game(discord_watch_tx, discord_handle).await; ui::storage::write_saves(device); ui::input::close(&mut device.ui); diff --git a/src/lib.rs b/src/lib.rs index e824cc0..bbc5db3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -216,13 +216,6 @@ pub async fn run() -> std::io::Result<()> { } } - let (discord_watch_tx, discord_handle) = retroachievements::load_game( - &rom_contents, - rom_contents.len(), - args.discord_rich_presence, - ) - .await; - device::run_game( &mut device, &rom_contents, @@ -232,9 +225,11 @@ pub async fn run() -> std::io::Result<()> { cheats, load_savestate_slot: args.load_state, }, - ); + args.discord_rich_presence, + ) + .await; - retroachievements::shutdown_client(discord_watch_tx, discord_handle).await; + retroachievements::shutdown_client(); if device.netplay.is_some() { netplay::close(&mut device); @@ -308,7 +303,7 @@ pub async fn run() -> std::io::Result<()> { { retroachievements::init_client(false, false, false); ui::gui::app_window(); - retroachievements::shutdown_client(None, None).await; + retroachievements::shutdown_client(); } } diff --git a/src/retroachievements.rs b/src/retroachievements.rs index 6bd5848..765735e 100644 --- a/src/retroachievements.rs +++ b/src/retroachievements.rs @@ -151,9 +151,11 @@ pub async fn load_game( ra_load_game(rom.as_ptr(), rom_size, tx_ptr); }; rx.await.unwrap(); + let mut c_title = std::ptr::null(); let mut c_image_url = std::ptr::null(); - unsafe { ra_get_game_info(&mut c_title, &mut c_image_url) }; + unsafe { ra_welcome(&mut c_title, &mut c_image_url) }; + if !discord_rich_presence || c_title.is_null() || c_image_url.is_null() { (None, None) } else { @@ -175,14 +177,19 @@ pub async fn load_game( } } -pub fn unload_game() { +pub async fn unload_game( + discord_watch_tx: Option>, + discord_handle: Option>, +) { + if let Some(discord_handle) = discord_handle + && let Some(discord_watch_tx) = discord_watch_tx + { + let _ = discord_watch_tx.send(()); + discord_handle.await.unwrap(); + } unsafe { ra_unload_game() }; } -pub fn welcome() { - unsafe { ra_welcome() }; -} - pub fn get_rich_presence() -> Option { let c_rich_presence = unsafe { ra_get_rich_presence() }; if c_rich_presence.is_null() { @@ -213,16 +220,7 @@ pub fn init_client(hardcore: bool, challenge: bool, leaderboard: bool) { unsafe { ra_init_client(hardcore, challenge, leaderboard) }; } -pub async fn shutdown_client( - discord_watch_tx: Option>, - discord_handle: Option>, -) { - if let Some(discord_handle) = discord_handle - && let Some(discord_watch_tx) = discord_watch_tx - { - let _ = discord_watch_tx.send(()); - discord_handle.await.unwrap(); - } +pub fn shutdown_client() { unsafe { ra_shutdown_client() }; } From 03be98b571f89bd255bec6cba3c4e5b829ae80f7 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 15 May 2026 16:10:23 +0200 Subject: [PATCH 0885/1117] build android lib (#895) * build android lib * more * more * more * more --- .github/workflows/build.yml | 32 +++++++++++++++++++++++++++++++- .github/workflows/lint.yml | 2 +- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cc7359a..e1631ca 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -55,7 +55,7 @@ jobs: libxtst-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev libthai-dev libpipewire-0.3-dev libwayland-dev - libdecor-0-dev liburing-dev libfreetype-dev libfontconfig-dev + libdecor-0-dev liburing-dev libfontconfig-dev version: ${{ matrix.target }}-1.0 - name: Install LLVM and Clang uses: KyleMayes/install-llvm-action@v2 @@ -248,6 +248,36 @@ jobs: env: BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }} + build-android: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-24.04 + target: aarch64-linux-android + ndk-version: r27d + steps: + - uses: actions/checkout@v6 + with: + submodules: recursive + fetch-depth: 0 + - uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + target: ${{ matrix.target }} + rustflags: "" + cache: ${{ github.ref_type != 'tag' }} + - uses: nttld/setup-ndk@v1 + id: setup-ndk + with: + ndk-version: ${{ matrix.ndk-version }} + - name: Build + run: | + cargo install cargo-ndk + cargo ndk -t ${{ matrix.target }} build --lib --no-default-features + env: + LIBCLANG_PATH: ${{ steps.setup-ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/musl/lib + collect-artifacts: name: Collect release artifacts needs: [build-linux, build-windows, build-macos] diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 8df5167..8d5c35e 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -40,7 +40,7 @@ jobs: libxtst-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev libthai-dev libpipewire-0.3-dev libwayland-dev - libdecor-0-dev liburing-dev libfreetype-dev libfontconfig-dev gettext + libdecor-0-dev liburing-dev libfontconfig-dev gettext version: lint-1.0 - name: Install LLVM and Clang uses: KyleMayes/install-llvm-action@v2 From eda3dda6135d6a8075a9b1756c824235e30efa41 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 15 May 2026 19:44:04 +0200 Subject: [PATCH 0886/1117] error if cheats cannot be read (#896) --- src/lib.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index bbc5db3..5fe400f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -155,11 +155,14 @@ pub async fn run() -> std::io::Result<()> { let disable_expansion_pak = args .disable_expansion_pak .unwrap_or(device.ui.config.emulation.disable_expansion_pak); - let cheats = if let Some(cheats_file) = args.cheats - && let Ok(data) = std::fs::read(cheats_file) - && let Ok(cheats) = serde_json::from_slice(&data) - { - cheats + let cheats = if let Some(cheats_file) = args.cheats { + if let Ok(data) = std::fs::read(cheats_file) + && let Ok(cheats) = serde_json::from_slice(&data) + { + cheats + } else { + return Err(Error::other("Could not read cheats file")); + } } else { let game_crc = ui::storage::get_game_crc(&rom_contents); ui::config::Cheats::new() From 04b15fee2fd66058870963daec3074b082db0f3b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 15 May 2026 20:05:20 +0200 Subject: [PATCH 0887/1117] fail early if cheats cannot be read (#897) --- src/lib.rs | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 5fe400f..acad6b1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -132,6 +132,23 @@ pub async fn run() -> std::io::Result<()> { ))); }; + let cheats = if let Some(cheats_file) = args.cheats { + if let Ok(data) = std::fs::read(cheats_file) + && let Ok(cheats) = serde_json::from_slice(&data) + { + cheats + } else { + return Err(Error::other("Could not read cheats file")); + } + } else { + let game_crc = ui::storage::get_game_crc(&rom_contents); + ui::config::Cheats::new() + .cheats + .get(&game_crc) + .cloned() + .unwrap_or_default() + }; + if let Some(slot) = args.load_state && slot > 9 { @@ -155,22 +172,6 @@ pub async fn run() -> std::io::Result<()> { let disable_expansion_pak = args .disable_expansion_pak .unwrap_or(device.ui.config.emulation.disable_expansion_pak); - let cheats = if let Some(cheats_file) = args.cheats { - if let Ok(data) = std::fs::read(cheats_file) - && let Ok(cheats) = serde_json::from_slice(&data) - { - cheats - } else { - return Err(Error::other("Could not read cheats file")); - } - } else { - let game_crc = ui::storage::get_game_crc(&rom_contents); - ui::config::Cheats::new() - .cheats - .get(&game_crc) - .cloned() - .unwrap_or_default() - }; let mut shutdown_tx = None; let mut usb_handle = None; From 2005fb14215a9b86e203559efb61c5bbbf4ab047 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 16 May 2026 20:46:00 +0200 Subject: [PATCH 0888/1117] don't update window when minimized (#898) --- parallel-rdp/interface.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 9b158fa..417ae57 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -645,6 +645,9 @@ void rdp_render_frame() { } void rdp_update_screen() { + if (SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED) { + return; + } wsi->end_frame(); wsi->begin_frame(); } From 069c64ab085b5cbc8337652792ff66e5270c1126 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 16 May 2026 22:09:19 +0200 Subject: [PATCH 0889/1117] build apk (#899) * build apk * more * more * more * more * more * more * more * more * more --- .github/workflows/build.yml | 15 +-- Cargo.lock | 183 +++++++++++++++++++++++++++++++++--- Cargo.toml | 23 ++++- src/lib.rs | 14 +++ src/ui/cheats.rs | 158 ++++++++++++++++--------------- src/ui/gui.rs | 129 +++++++++++++------------ src/ui/netplay.rs | 38 ++++++-- 7 files changed, 396 insertions(+), 164 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e1631ca..85bfa14 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -256,7 +256,7 @@ jobs: include: - os: ubuntu-24.04 target: aarch64-linux-android - ndk-version: r27d + ndk-version: 27.3.13750724 steps: - uses: actions/checkout@v6 with: @@ -267,16 +267,17 @@ jobs: target: ${{ matrix.target }} rustflags: "" cache: ${{ github.ref_type != 'tag' }} - - uses: nttld/setup-ndk@v1 - id: setup-ndk + - name: Setup Android SDK + uses: android-actions/setup-android@v4 with: - ndk-version: ${{ matrix.ndk-version }} + packages: build-tools;37.0.0 platforms;android-30 platforms;android-36 ndk;${{ matrix.ndk-version }} - name: Build run: | - cargo install cargo-ndk - cargo ndk -t ${{ matrix.target }} build --lib --no-default-features + cargo install cargo-apk + cargo apk build --target aarch64-linux-android --lib env: - LIBCLANG_PATH: ${{ steps.setup-ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/musl/lib + LIBCLANG_PATH: ${{ env.ANDROID_HOME }}/ndk/${{ matrix.ndk-version }}/toolchains/llvm/prebuilt/linux-x86_64/musl/lib + BINDGEN_EXTRA_CLANG_ARGS: --sysroot=${{ env.ANDROID_HOME }}/ndk/${{ matrix.ndk-version }}/toolchains/llvm/prebuilt/linux-x86_64/sysroot collect-artifacts: name: Collect release artifacts diff --git a/Cargo.lock b/Cargo.lock index 70f20c3..fd681f1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -170,6 +170,27 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" +[[package]] +name = "android-activity" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289" +dependencies = [ + "android-properties", + "bitflags 2.11.1", + "cc", + "cesu8", + "jni 0.21.1", + "jni-sys 0.3.1", + "libc", + "log", + "ndk 0.8.0", + "ndk-context", + "ndk-sys 0.5.0+25.2.9519653", + "num_enum", + "thiserror 1.0.69", +] + [[package]] name = "android-activity" version = "0.6.1" @@ -179,16 +200,25 @@ dependencies = [ "android-properties", "bitflags 2.11.1", "cc", - "jni", + "jni 0.22.4", "libc", "log", - "ndk", + "ndk 0.9.0", "ndk-context", - "ndk-sys", + "ndk-sys 0.6.0+11769913", "num_enum", "thiserror 2.0.18", ] +[[package]] +name = "android-build" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cac4c64175d504608cf239756339c07f6384a476f97f20a7043f92920b0b8fd" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "android-properties" version = "0.2.2" @@ -883,6 +913,12 @@ dependencies = [ "shlex", ] +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + [[package]] name = "cexpr" version = "0.6.0" @@ -2529,6 +2565,22 @@ dependencies = [ "windows-registry", ] +[[package]] +name = "i-slint-backend-android-activity" +version = "1.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a318b5aebc2ad8e6fdbac8588984d9ea2e99a210449954717073d8a246e12fe7" +dependencies = [ + "android-activity 0.5.2", + "android-activity 0.6.1", + "android-build", + "i-slint-core", + "i-slint-renderer-skia", + "jni 0.22.4", + "ndk 0.9.0", + "raw-window-handle", +] + [[package]] name = "i-slint-backend-linuxkms" version = "1.16.1" @@ -2553,6 +2605,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f93c9c4203e0a2c5c396b8f1686160816f73e9b9cadaf3915aa3b888a83448aa" dependencies = [ "cfg-if", + "i-slint-backend-android-activity", "i-slint-backend-linuxkms", "i-slint-backend-winit", "i-slint-common", @@ -3147,6 +3200,22 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys 0.3.1", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + [[package]] name = "jni" version = "0.22.4" @@ -3287,9 +3356,9 @@ checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" [[package]] name = "libbz2-rs-sys" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8fc329e1457d97a9d58a4e2ca49e3be572431a7e096008efc2e3a3c19d428f4" +checksum = "34b357333733e8260735ba5894eb928c02ecc69c78715f01a8019e7fa7f2db4c" [[package]] name = "libc" @@ -3661,6 +3730,20 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "308d96db8debc727c3fd9744aac51751243420e46edf401010908da7f8d5e57c" +[[package]] +name = "ndk" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" +dependencies = [ + "bitflags 2.11.1", + "jni-sys 0.3.1", + "log", + "ndk-sys 0.5.0+25.2.9519653", + "num_enum", + "thiserror 1.0.69", +] + [[package]] name = "ndk" version = "0.9.0" @@ -3670,7 +3753,7 @@ dependencies = [ "bitflags 2.11.1", "jni-sys 0.3.1", "log", - "ndk-sys", + "ndk-sys 0.6.0+11769913", "num_enum", "raw-window-handle", "thiserror 1.0.69", @@ -3682,6 +3765,15 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" +[[package]] +name = "ndk-sys" +version = "0.5.0+25.2.9519653" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" +dependencies = [ + "jni-sys 0.3.1", +] + [[package]] name = "ndk-sys" version = "0.6.0+11769913" @@ -5207,7 +5299,7 @@ checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0" dependencies = [ "core-foundation 0.10.1", "core-foundation-sys", - "jni", + "jni 0.22.4", "log", "once_cell", "rustls", @@ -5641,6 +5733,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d46bc502cc6b113bfd1a7e9a0876532a9454ff4ee905afe09784eaa2ec3f3f33" dependencies = [ "const-field-offset", + "i-slint-backend-android-activity", "i-slint-backend-selector", "i-slint-backend-winit", "i-slint-common", @@ -5820,7 +5913,7 @@ dependencies = [ "fastrand", "js-sys", "memmap2", - "ndk", + "ndk 0.9.0", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", @@ -7011,7 +7104,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fc95580916af1e68ff6a7be07446fc5db73ebf71cf092de939bbf5f7e189f72" dependencies = [ "core-foundation 0.10.1", - "jni", + "jni 0.22.4", "log", "ndk-context", "objc2 0.6.4", @@ -7152,7 +7245,7 @@ dependencies = [ "log", "metal 0.33.0", "naga", - "ndk-sys", + "ndk-sys 0.6.0+11769913", "objc", "once_cell", "ordered-float", @@ -7386,6 +7479,15 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -7431,6 +7533,21 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -7497,6 +7614,12 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -7515,6 +7638,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -7533,6 +7662,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -7563,6 +7698,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -7581,6 +7722,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -7599,6 +7746,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -7617,6 +7770,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -7642,7 +7801,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6755fa58a9f8350bd1e472d4c3fcc25f824ec358933bba33306d0b63df5978d" dependencies = [ "ahash", - "android-activity", + "android-activity 0.6.1", "atomic-waker", "bitflags 2.11.1", "block2 0.5.1", @@ -7657,7 +7816,7 @@ dependencies = [ "js-sys", "libc", "memmap2", - "ndk", + "ndk 0.9.0", "objc2 0.5.2", "objc2-app-kit 0.2.2", "objc2-foundation 0.2.2", diff --git a/Cargo.toml b/Cargo.toml index 9a32088..b282df7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,12 +19,10 @@ chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde-big-array = "0.5" -slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "unstable-winit-030", "backend-winit", "renderer-femtovg-wgpu", "accessibility"], optional = true } open = "5.3" sha2 = "0.11" sdl3-sys = { version = "0.6", features = ["build-from-source-static"] } sdl3-ttf-sys = { version = "0.6", features = ["build-static-vendored", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } -rfd = {version = "0.17", optional = true } tokio = {version = "1.46", features = ["rt-multi-thread", "macros", "fs", "process"] } spin_sleep = "1.3" encoding_rs = "0.8" @@ -41,6 +39,13 @@ clap = { version = "4.5", features = ["derive"] } reqwest = { version = "0.13", features = ["json", "query"] } discord-rich-presence = "1.1" +[target.'cfg(not(target_os = "android"))'.dependencies] +slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "unstable-winit-030", "backend-winit", "renderer-femtovg-wgpu", "accessibility"], optional = true } +rfd = {version = "0.17", optional = true } + +[target.'cfg(target_os = "android")'.dependencies] +slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "backend-android-activity-06", "accessibility"], optional = true } + [build-dependencies] winresource = "0.1" bindgen = "0.72" @@ -65,3 +70,17 @@ category = "public.app-category.games" icon = ["data/icon/gopher64_128x128.png","data/icon/gopher64_256x256.png","data/icon/gopher64_512x512.png"] osx_frameworks = ["/opt/homebrew/opt/molten-vk/lib/libMoltenVK.dylib"] osx_minimum_system_version = "15.0" + +[package.metadata.android] +package = "io.github.gopher64.gopher64" +build_targets = ["aarch64-linux-android"] +apk_name = "Gopher64" + +[package.metadata.android.sdk] +min_sdk_version = 34 +target_sdk_version = 36 + +[[package.metadata.android.uses_feature]] +name = "android.hardware.vulkan.version" +required = true +version = 0x401000 diff --git a/src/lib.rs b/src/lib.rs index acad6b1..61213b0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -314,3 +314,17 @@ pub async fn run() -> std::io::Result<()> { ui::sdl_close(); Ok(()) } + +#[cfg(target_os = "android")] +#[unsafe(no_mangle)] +fn android_main(app: slint::android::AndroidApp) { + slint::android::init(app).unwrap(); + + // ... rest of your code ... + slint::slint! { + export component MainWindow inherits Window { + Text { text: "Hello World"; } + } + } + MainWindow::new().unwrap().run().unwrap(); +} diff --git a/src/ui/cheats.rs b/src/ui/cheats.rs index 0bfc710..a94553f 100644 --- a/src/ui/cheats.rs +++ b/src/ui/cheats.rs @@ -1,92 +1,96 @@ -use crate::cheats; -use crate::device; use crate::ui; use crate::ui::gui::AppWindow; +#[cfg(not(target_os = "android"))] use crate::ui::gui::ErrorDialog; +#[cfg(not(target_os = "android"))] +use crate::{cheats, device}; use slint::ComponentHandle; pub fn cheats_window(app: &AppWindow) { - let weak = app.as_weak(); - app.on_cheats_select_rom_clicked(move |rom_dir| { - let select_rom = if !rom_dir.is_empty() && std::fs::exists(&rom_dir).unwrap_or(false) { - rfd::AsyncFileDialog::new().set_directory(rom_dir) - } else { - rfd::AsyncFileDialog::new() - } - .set_title("Select ROM") - .add_filter("ROM files", &ui::gui::N64_EXTENSIONS) - .pick_file(); - let weak = weak.clone(); - tokio::spawn(async move { - if let Some(file) = select_rom.await - && let Some(rom_contents) = device::get_rom_contents(file.path()) - { - let game_crc = ui::storage::get_game_crc(&rom_contents); - let game_name = ui::storage::get_game_name(&rom_contents); - weak.upgrade_in_event_loop(move |handle| { - handle.set_cheat_game_name(game_name.into()); - }) - .unwrap(); - let cheats: cheats::Cheat = - serde_json::from_slice(include_bytes!("../../data/cheats.json")).unwrap(); - if let Some(cheat) = cheats.get(&game_crc) { - let cheat = cheat.clone(); + #[cfg(not(target_os = "android"))] + { + let weak = app.as_weak(); + app.on_cheats_select_rom_clicked(move |rom_dir| { + let select_rom = if !rom_dir.is_empty() && std::fs::exists(&rom_dir).unwrap_or(false) { + rfd::AsyncFileDialog::new().set_directory(rom_dir) + } else { + rfd::AsyncFileDialog::new() + } + .set_title("Select ROM") + .add_filter("ROM files", &ui::gui::N64_EXTENSIONS) + .pick_file(); + let weak = weak.clone(); + tokio::spawn(async move { + if let Some(file) = select_rom.await + && let Some(rom_contents) = device::get_rom_contents(file.path()) + { + let game_crc = ui::storage::get_game_crc(&rom_contents); + let game_name = ui::storage::get_game_name(&rom_contents); weak.upgrade_in_event_loop(move |handle| { - let cheat_settings = ui::config::Cheats::new(); - let game_cheats = cheat_settings.cheats.get(&game_crc).cloned(); - handle.set_cheat_game_crc(game_crc.into()); - let cheats_vec = slint::VecModel::default(); - for item in cheat.iter() { - let mut cheat_enabled = false; - if let Some(game_cheat) = game_cheats.as_ref() - && game_cheat.contains_key(item.0) - { - cheat_enabled = true; - } - let options_vec = slint::VecModel::default(); - if let Some(options) = item.1.options.as_ref() { - for option in options.iter() { - let mut option_enabled = false; - if let Some(game_cheat) = game_cheats.as_ref() - && game_cheat.contains_key(item.0) - && let Some(opt) = game_cheat.get(item.0) - && let Some(opt) = opt - && opt == option.0 - { - option_enabled = true; - } - options_vec.push((option_enabled, option.0.into())); - } - } - let options = slint::ModelRc::from(std::rc::Rc::new(options_vec)); - cheats_vec.push(( - item.0.clone().into(), - cheat_enabled, - item.1.clone().note.into(), - options, - )); - } - handle.set_cheats(slint::ModelRc::from(std::rc::Rc::new(cheats_vec))); + handle.set_cheat_game_name(game_name.into()); }) .unwrap(); + let cheats: cheats::Cheat = + serde_json::from_slice(include_bytes!("../../data/cheats.json")).unwrap(); + if let Some(cheat) = cheats.get(&game_crc) { + let cheat = cheat.clone(); + weak.upgrade_in_event_loop(move |handle| { + let cheat_settings = ui::config::Cheats::new(); + let game_cheats = cheat_settings.cheats.get(&game_crc).cloned(); + handle.set_cheat_game_crc(game_crc.into()); + let cheats_vec = slint::VecModel::default(); + for item in cheat.iter() { + let mut cheat_enabled = false; + if let Some(game_cheat) = game_cheats.as_ref() + && game_cheat.contains_key(item.0) + { + cheat_enabled = true; + } + let options_vec = slint::VecModel::default(); + if let Some(options) = item.1.options.as_ref() { + for option in options.iter() { + let mut option_enabled = false; + if let Some(game_cheat) = game_cheats.as_ref() + && game_cheat.contains_key(item.0) + && let Some(opt) = game_cheat.get(item.0) + && let Some(opt) = opt + && opt == option.0 + { + option_enabled = true; + } + options_vec.push((option_enabled, option.0.into())); + } + } + let options = slint::ModelRc::from(std::rc::Rc::new(options_vec)); + cheats_vec.push(( + item.0.clone().into(), + cheat_enabled, + item.1.clone().note.into(), + options, + )); + } + handle.set_cheats(slint::ModelRc::from(std::rc::Rc::new(cheats_vec))); + }) + .unwrap(); + } else { + clear_cheats(&weak, false); + } } else { - clear_cheats(&weak, false); + clear_cheats(&weak, true); + weak.upgrade_in_event_loop(move |_handle| { + let message_dialog = ErrorDialog::new().unwrap(); + let weak_dialog = message_dialog.as_weak(); + message_dialog.on_close_clicked(move || { + weak_dialog.unwrap().hide().unwrap(); + }); + message_dialog.set_text("Could not read ROM".into()); + message_dialog.show().unwrap(); + }) + .unwrap(); } - } else { - clear_cheats(&weak, true); - weak.upgrade_in_event_loop(move |_handle| { - let message_dialog = ErrorDialog::new().unwrap(); - let weak_dialog = message_dialog.as_weak(); - message_dialog.on_close_clicked(move || { - weak_dialog.unwrap().hide().unwrap(); - }); - message_dialog.set_text("Could not read ROM".into()); - message_dialog.show().unwrap(); - }) - .unwrap(); - } + }); }); - }); + } let weak = app.as_weak(); app.on_cheats_clear_clicked(move || { diff --git a/src/ui/gui.rs b/src/ui/gui.rs index b4e08cf..ec2b34a 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -1,10 +1,12 @@ use crate::retroachievements; use crate::ui; use slint::Model; +#[cfg(not(target_os = "android"))] use slint::winit_030::WinitWindowAccessor; slint::include_modules!(); +#[cfg(not(target_os = "android"))] pub const N64_EXTENSIONS: [&str; 12] = [ "n64", "v64", "z64", "7z", "zip", "bin", "N64", "V64", "Z64", "7Z", "ZIP", "BIN", ]; @@ -84,6 +86,7 @@ fn run_with_path(weak: slint::Weak, path: std::path::PathBuf) { .unwrap(); } +#[cfg(not(target_os = "android"))] fn file_dropped(app: &AppWindow) { let weak = app.as_weak(); app.window() @@ -119,14 +122,17 @@ fn local_game_window(app: &AppWindow, config: &ui::config::Config) { ), ))); - let weak = app.as_weak(); - app.on_open_rom_button_clicked(move || { - weak.upgrade_in_event_loop(move |handle| { - save_settings(&handle); - open_rom(&handle) - }) - .unwrap(); - }); + #[cfg(not(target_os = "android"))] + { + let weak = app.as_weak(); + app.on_open_rom_button_clicked(move || { + weak.upgrade_in_event_loop(move |handle| { + save_settings(&handle); + open_rom(&handle) + }) + .unwrap(); + }); + } let weak = app.as_weak(); app.on_recent_rom_button_clicked(move |rom| { @@ -142,6 +148,7 @@ fn local_game_window(app: &AppWindow, config: &ui::config::Config) { eprintln!("Error opening saves folder: {}", e); } }); + #[cfg(not(target_os = "android"))] file_dropped(app); } @@ -215,6 +222,7 @@ fn update_input_profiles(weak: &slint::Weak, config: &ui::config::Con .unwrap(); } +#[cfg(not(target_os = "android"))] fn clear_gb_paths(weak: &slint::Weak, player: i32) { weak.upgrade_in_event_loop(move |handle| { let rom_paths = handle.get_gb_rom_paths(); @@ -372,58 +380,62 @@ fn controller_window(app: &AppWindow, config: &ui::config::Config) { }); dialog.show().unwrap(); }); - let weak_app2 = app.as_weak(); - app.on_transferpak_toggled(move |player, enabled| { - if enabled { - let select_gb_rom = rfd::AsyncFileDialog::new() - .set_title(format!("GB ROM P{}", player + 1)) - .add_filter("GB ROM files", &["gb", "gbc", "GB", "GBC"]) - .pick_file(); - let weak_app3 = weak_app2.clone(); - tokio::spawn(async move { - if let Some(gb_rom) = select_gb_rom.await { - let weak_app4 = weak_app3.clone(); - weak_app3 - .upgrade_in_event_loop(move |_handle| { - let select_gb_ram = rfd::AsyncFileDialog::new() - .set_title(format!("GB RAM P{}", player + 1)) - .add_filter( - "GB RAM files", - &["sav", "ram", "srm", "SAV", "RAM", "SRM"], - ) - .pick_file(); + #[cfg(not(target_os = "android"))] + { + let weak_app2 = app.as_weak(); + app.on_transferpak_toggled(move |player, enabled| { + if enabled { + let select_gb_rom = rfd::AsyncFileDialog::new() + .set_title(format!("GB ROM P{}", player + 1)) + .add_filter("GB ROM files", &["gb", "gbc", "GB", "GBC"]) + .pick_file(); - tokio::spawn(async move { - if let Some(gb_ram) = select_gb_ram.await { - weak_app4 - .upgrade_in_event_loop(move |handle| { - let rom_paths = handle.get_gb_rom_paths(); - let ram_paths = handle.get_gb_ram_paths(); - rom_paths.set_row_data( - player as usize, - gb_rom.path().to_str().unwrap().into(), - ); - ram_paths.set_row_data( - player as usize, - gb_ram.path().to_str().unwrap().into(), - ); - handle.set_gb_rom_paths(rom_paths); - handle.set_gb_ram_paths(ram_paths); - }) - .unwrap(); - } else { - clear_gb_paths(&weak_app4, player); - } - }); - }) - .unwrap(); - } else { - clear_gb_paths(&weak_app3, player); - } - }); - } - }); + let weak_app3 = weak_app2.clone(); + tokio::spawn(async move { + if let Some(gb_rom) = select_gb_rom.await { + let weak_app4 = weak_app3.clone(); + weak_app3 + .upgrade_in_event_loop(move |_handle| { + let select_gb_ram = rfd::AsyncFileDialog::new() + .set_title(format!("GB RAM P{}", player + 1)) + .add_filter( + "GB RAM files", + &["sav", "ram", "srm", "SAV", "RAM", "SRM"], + ) + .pick_file(); + + tokio::spawn(async move { + if let Some(gb_ram) = select_gb_ram.await { + weak_app4 + .upgrade_in_event_loop(move |handle| { + let rom_paths = handle.get_gb_rom_paths(); + let ram_paths = handle.get_gb_ram_paths(); + rom_paths.set_row_data( + player as usize, + gb_rom.path().to_str().unwrap().into(), + ); + ram_paths.set_row_data( + player as usize, + gb_ram.path().to_str().unwrap().into(), + ); + handle.set_gb_rom_paths(rom_paths); + handle.set_gb_ram_paths(ram_paths); + }) + .unwrap(); + } else { + clear_gb_paths(&weak_app4, player); + } + }); + }) + .unwrap(); + } else { + clear_gb_paths(&weak_app3, player); + } + }); + } + }); + } } pub fn save_settings(app: &AppWindow) { @@ -633,6 +645,7 @@ pub fn run_rom( }); } +#[cfg(not(target_os = "android"))] fn open_rom(app: &AppWindow) { let rom_dir = app.get_rom_dir(); let select_rom = if !rom_dir.is_empty() && std::fs::exists(&rom_dir).unwrap_or(false) { diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 4707aab..113c769 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -1,3 +1,4 @@ +#[cfg(not(target_os = "android"))] use crate::device; use crate::ui; use crate::ui::gui::{ @@ -47,9 +48,13 @@ pub struct NetplayMessage { trait NetplayPages { fn set_server_names(&self, names: slint::ModelRc); fn set_server_urls(&self, urls: slint::ModelRc); + #[cfg(not(target_os = "android"))] fn set_game_name(&self, game_name: slint::SharedString); + #[cfg(not(target_os = "android"))] fn set_game_hash(&self, game_hash: slint::SharedString); + #[cfg(not(target_os = "android"))] fn set_game_cheats(&self, game_cheats: slint::SharedString); + #[cfg(not(target_os = "android"))] fn set_rom_path(&self, rom_path: slint::SharedString); fn set_peer_addr(&self, peer_addr: slint::SharedString); fn refresh_sessions(&self) { @@ -64,15 +69,19 @@ impl NetplayPages for NetplayCreate { fn set_server_urls(&self, urls: slint::ModelRc) { self.set_server_urls(urls); } + #[cfg(not(target_os = "android"))] fn set_game_name(&self, game_name: slint::SharedString) { self.set_game_name(game_name); } + #[cfg(not(target_os = "android"))] fn set_game_hash(&self, game_hash: slint::SharedString) { self.set_game_hash(game_hash); } + #[cfg(not(target_os = "android"))] fn set_game_cheats(&self, game_cheats: slint::SharedString) { self.set_game_cheats(game_cheats); } + #[cfg(not(target_os = "android"))] fn set_rom_path(&self, rom_path: slint::SharedString) { self.set_rom_path(rom_path); } @@ -91,15 +100,19 @@ impl NetplayPages for NetplayJoin { fn refresh_sessions(&self) { self.invoke_refresh_session(); } + #[cfg(not(target_os = "android"))] fn set_game_name(&self, game_name: slint::SharedString) { self.set_game_name(game_name); } + #[cfg(not(target_os = "android"))] fn set_game_hash(&self, game_hash: slint::SharedString) { self.set_game_hash(game_hash); } + #[cfg(not(target_os = "android"))] fn set_game_cheats(&self, game_cheats: slint::SharedString) { self.set_game_cheats(game_cheats); } + #[cfg(not(target_os = "android"))] fn set_rom_path(&self, rom_path: slint::SharedString) { self.set_rom_path(rom_path); } @@ -173,6 +186,7 @@ fn populate_server_names(weak: slin }); } +#[cfg(not(target_os = "android"))] fn select_rom( weak: slint::Weak, rom_dir: slint::SharedString, @@ -276,10 +290,14 @@ pub fn setup_create_window( }) .unwrap(); }); - let weak = create_window.as_weak(); - create_window.on_select_rom(move |rom_dir| { - select_rom(weak.clone(), rom_dir); - }); + + #[cfg(not(target_os = "android"))] + { + let weak = create_window.as_weak(); + create_window.on_select_rom(move |rom_dir| { + select_rom(weak.clone(), rom_dir); + }); + } let weak = create_window.as_weak(); create_window.on_create_session( @@ -1175,10 +1193,14 @@ pub fn setup_join_window( join_window.set_pending_refresh(true); join_window.set_rom_dir(rom_dir); populate_server_names(join_window.as_weak()); - let weak = join_window.as_weak(); - join_window.on_select_rom(move |rom_dir| { - select_rom(weak.clone(), rom_dir); - }); + + #[cfg(not(target_os = "android"))] + { + let weak = join_window.as_weak(); + join_window.on_select_rom(move |rom_dir| { + select_rom(weak.clone(), rom_dir); + }); + } let sender = netplay_write_sender.clone(); join_window.window().on_close_requested(move || { From 38fdc24a49759a49e642c87958ab1dc224760492 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 17 May 2026 11:00:57 +0200 Subject: [PATCH 0890/1117] Use cargo-ndk for env (#900) * Use cargo-ndk for env * Update build.yml --- .github/workflows/build.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 85bfa14..c92081a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -273,11 +273,9 @@ jobs: packages: build-tools;37.0.0 platforms;android-30 platforms;android-36 ndk;${{ matrix.ndk-version }} - name: Build run: | - cargo install cargo-apk - cargo apk build --target aarch64-linux-android --lib - env: - LIBCLANG_PATH: ${{ env.ANDROID_HOME }}/ndk/${{ matrix.ndk-version }}/toolchains/llvm/prebuilt/linux-x86_64/musl/lib - BINDGEN_EXTRA_CLANG_ARGS: --sysroot=${{ env.ANDROID_HOME }}/ndk/${{ matrix.ndk-version }}/toolchains/llvm/prebuilt/linux-x86_64/sysroot + cargo install cargo-apk cargo-ndk + source <(cargo ndk-env --target ${{ matrix.target }}) + cargo apk build --target ${{ matrix.target }} --lib collect-artifacts: name: Collect release artifacts From 8fea9ef212426ca61b99d5ae0a236f5ce689bc00 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 17 May 2026 11:51:50 +0200 Subject: [PATCH 0891/1117] update ndk (#901) --- .github/workflows/build.yml | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c92081a..50db303 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -256,7 +256,7 @@ jobs: include: - os: ubuntu-24.04 target: aarch64-linux-android - ndk-version: 27.3.13750724 + ndk-version: 29.0.14206865 steps: - uses: actions/checkout@v6 with: @@ -270,7 +270,7 @@ jobs: - name: Setup Android SDK uses: android-actions/setup-android@v4 with: - packages: build-tools;37.0.0 platforms;android-30 platforms;android-36 ndk;${{ matrix.ndk-version }} + packages: build-tools;37.0.0 platforms;android-35 ndk;${{ matrix.ndk-version }} - name: Build run: | cargo install cargo-apk cargo-ndk diff --git a/Cargo.toml b/Cargo.toml index b282df7..db78186 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -78,7 +78,7 @@ apk_name = "Gopher64" [package.metadata.android.sdk] min_sdk_version = 34 -target_sdk_version = 36 +target_sdk_version = 35 [[package.metadata.android.uses_feature]] name = "android.hardware.vulkan.version" From 78cb758a26dc8e74fc5c5ca3409ca092d4124463 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 17 May 2026 15:40:14 +0200 Subject: [PATCH 0892/1117] Add LIBCLANG_PATH to build workflow (#902) --- .github/workflows/build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 50db303..35f3c52 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -276,6 +276,8 @@ jobs: cargo install cargo-apk cargo-ndk source <(cargo ndk-env --target ${{ matrix.target }}) cargo apk build --target ${{ matrix.target }} --lib + env: + LIBCLANG_PATH: ${{ env.ANDROID_HOME }}/ndk/${{ matrix.ndk-version }}/toolchains/llvm/prebuilt/linux-x86_64/musl/lib collect-artifacts: name: Collect release artifacts From 8c53de9cc77738b25a1f20007ea9f103dc7c36b3 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 17 May 2026 16:11:29 +0200 Subject: [PATCH 0893/1117] Don't set NDK version (#903) * Set ANDROID_NDK_ROOT * Update build.yml --- .github/workflows/build.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 35f3c52..b0e3e27 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -256,7 +256,6 @@ jobs: include: - os: ubuntu-24.04 target: aarch64-linux-android - ndk-version: 29.0.14206865 steps: - uses: actions/checkout@v6 with: @@ -270,14 +269,12 @@ jobs: - name: Setup Android SDK uses: android-actions/setup-android@v4 with: - packages: build-tools;37.0.0 platforms;android-35 ndk;${{ matrix.ndk-version }} + packages: build-tools;37.0.0 platforms;android-35 - name: Build run: | cargo install cargo-apk cargo-ndk source <(cargo ndk-env --target ${{ matrix.target }}) cargo apk build --target ${{ matrix.target }} --lib - env: - LIBCLANG_PATH: ${{ env.ANDROID_HOME }}/ndk/${{ matrix.ndk-version }}/toolchains/llvm/prebuilt/linux-x86_64/musl/lib collect-artifacts: name: Collect release artifacts From e3b63908de1baaf5a8cb3cb80d8c9cb637e063dd Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 17 May 2026 16:43:37 +0200 Subject: [PATCH 0894/1117] show controller during config (#904) --- Cargo.lock | 19 +++++++++++++++++++ Cargo.toml | 1 + data/controller.png | Bin 0 -> 1090302 bytes src/ui/input.rs | 22 +++++++++++++++++++++- src/ui/video.rs | 14 +++++++++++++- 5 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 data/controller.png diff --git a/Cargo.lock b/Cargo.lock index fd681f1..abdb3e8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2254,6 +2254,7 @@ dependencies = [ "regex", "reqwest", "rfd", + "sdl3-image-sys", "sdl3-sys", "sdl3-ttf-sys", "semver", @@ -5409,6 +5410,24 @@ dependencies = [ "tiny-skia 0.11.4", ] +[[package]] +name = "sdl3-image-src" +version = "3.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe273101c7dab94551183212eee9adef1a7bf274d407f0b7bfe72482960ab25c" + +[[package]] +name = "sdl3-image-sys" +version = "0.6.3+SDL-image-3.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf532fab7cf015de8c55eec6c82db65a964c8874a22c88cead952813db410f90" +dependencies = [ + "cmake", + "rpkg-config", + "sdl3-image-src", + "sdl3-sys", +] + [[package]] name = "sdl3-src" version = "3.4.8" diff --git a/Cargo.toml b/Cargo.toml index db78186..5e6ceb7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,6 +23,7 @@ open = "5.3" sha2 = "0.11" sdl3-sys = { version = "0.6", features = ["build-from-source-static"] } sdl3-ttf-sys = { version = "0.6", features = ["build-static-vendored", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] } +sdl3-image-sys = { version = "0.6", features = ["build-static-vendored"] } tokio = {version = "1.46", features = ["rt-multi-thread", "macros", "fs", "process"] } spin_sleep = "1.3" encoding_rs = "0.8" diff --git a/data/controller.png b/data/controller.png new file mode 100644 index 0000000000000000000000000000000000000000..9b8c031ef678715437354a3369ab795e3adbd7b8 GIT binary patch literal 1090302 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⪙-|JxrmoK}+ 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 z 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�%yzdJy1Ve^d>-U_ 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ҩ>c+ZsOxwug!S{)CZ7QK-s9TPx7!W@| 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

        YzU|R;9N>M~p>KGj&Br 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%0DkT?6IdD+BI#^OApHos9xO2Z1 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 XA@pE|HNZeAKo{L|7d^+mC{mLX-9a7a<*inw9 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

      dW_FWUXraMo}tQ?I|`TZ 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%0AOl@q*AW;IXl;SyzXN>} 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 z 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 \ No newline at end of file diff --git a/data/icon.ico b/data/icon.ico deleted file mode 100644 index c5e7317962f61efe91737f6af163f2993748e61d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99353 zcmV)bK&ig~00966000000096X0OJM$09F7106;(h0096X04PEL067N%05C8B0096X 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

      }w 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 OeI9%Lhi`R%^8W*Eakjqz literal 0 HcmV?d00001 diff --git a/src/device.rs b/src/device.rs index 658d7f5..2134ae3 100644 --- a/src/device.rs +++ b/src/device.rs @@ -1,4 +1,5 @@ use crate::ui; +use std::collections::HashMap; use std::fs; use std::io::Read; @@ -33,6 +34,7 @@ pub mod sram; pub mod tlb; pub mod unmapped; pub mod vi; +pub mod vru; pub fn run_game(file_path: &std::path::Path, device: &mut Device, fullscreen: bool) { let rom_contents = get_rom_contents(file_path); @@ -48,6 +50,9 @@ pub fn run_game(file_path: &std::path::Path, device: &mut Device, fullscreen: bo mi::init(device); pif::init(device); + if device.ui.config.input.emulate_vru { + vru::init(device); + } memory::init(device); rsp_interface::init(device); rdp::init(device); @@ -157,6 +162,7 @@ pub struct Device { si: si::Si, ri: ri::Ri, flashram: sram::Flashram, + pub vru: vru::Vru, } impl Device { @@ -395,6 +401,19 @@ impl Device { silicon_id: [sram::FLASHRAM_TYPE_ID, sram::MX29L1100_ID], mode: sram::FlashramMode::ReadArray, }, + vru: vru::Vru { + status: 0, + voice_state: 0, + load_offset: 0, + voice_init: 0, + word_buffer: [0; 40], + words: Vec::new(), + talking: false, + word_mappings: HashMap::new(), + window_notifier: None, + word_receiver: None, + gui_ctx: None, + }, } } } diff --git a/src/device/controller.rs b/src/device/controller.rs index b4fd019..d68cc71 100644 --- a/src/device/controller.rs +++ b/src/device/controller.rs @@ -1,22 +1,16 @@ use crate::device; use crate::ui; -const JCMD_STATUS: u8 = 0x00; -const JCMD_CONTROLLER_READ: u8 = 0x01; +pub const JCMD_STATUS: u8 = 0x00; +pub const JCMD_CONTROLLER_READ: u8 = 0x01; const JCMD_PAK_READ: u8 = 0x02; const JCMD_PAK_WRITE: u8 = 0x03; -//const JCMD_VRU_READ: u8 = 0x09; -//const JCMD_VRU_WRITE: u8 = 0x0A; -//const JCMD_VRU_READ_STATUS: u8 = 0x0B; -//const JCMD_VRU_WRITE_CONFIG: u8 = 0x0C; -//const JCMD_VRU_WRITE_INIT: u8 = 0x0D; -const JCMD_RESET: u8 = 0xff; +pub const JCMD_RESET: u8 = 0xff; //const JDT_NONE: u16 = 0x0000; const JDT_JOY_ABS_COUNTERS: u16 = 0x0001; /* joystick with absolute coordinates */ //const JDT_JOY_REL_COUNTERS: u16 = 0x0002; /* joystick with relative coordinates (= mouse) */ const JDT_JOY_PORT: u16 = 0x0004; /* has port for external paks */ -//const JDT_VRU: u16 = 0x0100; /* VRU */ const PAK_CHUNK_SIZE: usize = 0x20; const CONT_STATUS_PAK_NOT_PRESENT: u8 = 0; const CONT_STATUS_PAK_PRESENT: u8 = 1; @@ -80,9 +74,9 @@ pub fn pak_read_block( if handler.is_some() { (handler.unwrap().read)(device, channel, address, data, PAK_CHUNK_SIZE); - device.pif.ram[dcrc] = pak_data_crc(device, data, PAK_CHUNK_SIZE) + device.pif.ram[dcrc] = data_crc(device, data, PAK_CHUNK_SIZE) } else { - device.pif.ram[dcrc] = !pak_data_crc(device, data, PAK_CHUNK_SIZE) + device.pif.ram[dcrc] = !data_crc(device, data, PAK_CHUNK_SIZE) } } @@ -99,13 +93,13 @@ pub fn pak_write_block( if handler.is_some() { (handler.unwrap().write)(device, channel, address, data, PAK_CHUNK_SIZE); - device.pif.ram[dcrc] = pak_data_crc(device, data, PAK_CHUNK_SIZE) + device.pif.ram[dcrc] = data_crc(device, data, PAK_CHUNK_SIZE) } else { - device.pif.ram[dcrc] = !pak_data_crc(device, data, PAK_CHUNK_SIZE) + device.pif.ram[dcrc] = !data_crc(device, data, PAK_CHUNK_SIZE) } } -pub fn pak_data_crc(device: &device::Device, data_offset: usize, size: usize) -> u8 { +pub fn data_crc(device: &device::Device, data_offset: usize, size: usize) -> u8 { let mut i = 0; let mut crc = 0; diff --git a/src/device/events.rs b/src/device/events.rs index 774a55e..12e64fd 100644 --- a/src/device/events.rs +++ b/src/device/events.rs @@ -11,6 +11,7 @@ pub enum EventType { InterruptCheck, SPDma, Compare, + Vru, Count, } diff --git a/src/device/pif.rs b/src/device/pif.rs index f400648..c00d7c9 100644 --- a/src/device/pif.rs +++ b/src/device/pif.rs @@ -235,6 +235,10 @@ pub fn init(device: &mut device::Device) { device.pif.channels[i].process = Some(device::controller::process); } } + if device.ui.config.input.emulate_vru { + device.pif.channels[3].pak_handler = None; + device.pif.channels[3].process = Some(device::vru::process); + } device.pif.channels[4].process = Some(device::cart::process) } diff --git a/src/device/vi.rs b/src/device/vi.rs index 43cb8e3..f29c1d7 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -169,6 +169,6 @@ pub fn speed_limiter(device: &device::Device) { let dur = outcome.wait_time_from(governor::clock::DefaultClock::default().now()); spin_sleep::sleep(dur); - device.vi.limiter.as_ref().unwrap().check().unwrap(); + let _ = device.vi.limiter.as_ref().unwrap().check(); } } diff --git a/src/device/vru.rs b/src/device/vru.rs new file mode 100644 index 0000000..7bc14c6 --- /dev/null +++ b/src/device/vru.rs @@ -0,0 +1,2997 @@ +use crate::{device, ui}; +use eframe::egui; +use std::collections::HashMap; + +const JCMD_VRU_READ: u8 = 0x09; +const JCMD_VRU_WRITE: u8 = 0x0A; +const JCMD_VRU_READ_STATUS: u8 = 0x0B; +const JCMD_VRU_WRITE_CONFIG: u8 = 0x0C; +const JCMD_VRU_WRITE_INIT: u8 = 0x0D; + +const VOICE_STATUS_READY: u8 = 0x00; +const VOICE_STATUS_START: u8 = 0x01; +//const VOICE_STATUS_CANCEL: u8 = 0x03; +const VOICE_STATUS_BUSY: u8 = 0x05; +//const VOICE_STATUS_END: u8 = 0x07; + +const JDT_VRU: u16 = 0x0100; /* VRU */ +const CONT_FLAVOR: u16 = JDT_VRU; + +pub struct Vru { + pub status: u8, + pub voice_state: u8, + pub load_offset: u8, + pub voice_init: u8, + pub word_buffer: [u16; 40], + pub words: Vec, + pub talking: bool, + pub word_mappings: HashMap, + pub window_notifier: Option>>, + pub word_receiver: Option>, + pub gui_ctx: Option, +} + +pub fn init(device: &mut device::Device) { + reset_vru(device); + create_word_mappings(device); +} + +pub fn reset_vru(device: &mut device::Device) { + device.vru.status = 0x00; + if device.cart.rom[0x3E] == /* Japan */ 0x4A || device.cart.rom[0x3E] == /* Demo */ 0x00 { + device.vru.voice_state = VOICE_STATUS_READY; + } else { + device.vru.voice_state = VOICE_STATUS_START; + } + device.vru.load_offset = 0; + device.vru.voice_init = 1; + device.vru.word_buffer = [0; 40]; +} + +fn set_status(device: &mut device::Device, channel: usize) { + if device.vru.voice_init == 2 { + /* words have been loaded, we can change the state from READY to START */ + device.vru.voice_state = VOICE_STATUS_START; + device.vru.voice_init = 1; + } else if device.vru.talking && (device.vru.voice_state == VOICE_STATUS_START) { + /* On Densha de Go, if the player is talking for more than ~2.5 seconds, the input is ignored */ + device.vru.voice_state = VOICE_STATUS_BUSY; + device.vru.status = 0; /* setting the status to 0 tells the game to check the voice_status */ + } else if !device.vru.talking && (device.vru.voice_state == VOICE_STATUS_BUSY) { + device.vru.voice_state = VOICE_STATUS_READY; + device.vru.status = 0; /* setting the status to 0 tells the game to check the voice_status */ + } + + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] = CONT_FLAVOR as u8; + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap() + 1] = (CONT_FLAVOR >> 8) as u8; + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap() + 2] = device.vru.status; +} + +pub fn process(device: &mut device::Device, channel: usize) { + let cmd = device.pif.ram[device.pif.channels[channel].tx_buf.unwrap()]; + + match cmd { + device::controller::JCMD_RESET => { + reset_vru(device); + + set_status(device, channel); + } + device::controller::JCMD_STATUS => { + set_status(device, channel); + } + device::controller::JCMD_CONTROLLER_READ => {} + JCMD_VRU_READ_STATUS => { + if device.vru.voice_init > 0 { + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] = + device.vru.voice_state; + } else { + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] = 0; + } + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap() + 1] = 0; + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap() + 2] = + device::controller::data_crc( + device, + device.pif.channels[channel].rx_buf.unwrap(), + 2, + ); + + if device.vru.load_offset > 0 { + let mut offset = 0; + while device.vru.word_buffer[offset] == 0 && offset < 40 { + offset += 1; + } + if offset == 40 { + panic!("Empty JCMD_VRU_READ_STATUS."); + } else if device.vru.word_buffer[offset] == 3 { + offset += 3; + let mut length = device.vru.word_buffer[offset]; + if device.cart.rom[0x3E] == /* Japan */ 0x4A + || device.cart.rom[0x3E] == /* Demo */ 0x00 + { + offset -= 1; + length = 0; + while device.vru.word_buffer[offset + length as usize] != 0 { + length += 1; + } + let mut data = Vec::new(); + for i in 0..length { + data.extend(device.vru.word_buffer[offset + i as usize].to_be_bytes()); + } + if device.cart.rom[0x3E] == /* Japan */ 0x4A { + let (res, _enc, errors) = encoding_rs::SHIFT_JIS.decode(&data); + if errors { + panic!("Failed to decode Japanese word {:X?}", data); + } else { + device.vru.words.push(res.to_string()); + } + } else { + let decoded: Result = + String::from_utf8(data); + if let Ok(result) = decoded { + device.vru.words.push(result) + } else { + panic!("Could not decode VRU word") + } + } + } else { + offset += 1; + + let mut data = String::new(); + for i in 0..length { + data.push_str(&format!( + "{:04X}", + device.vru.word_buffer[offset + i as usize] + )) + } + let word = device.vru.word_mappings.get(&data); + if let Some(result) = word { + device.vru.words.push(result.clone()); + } else { + panic!("Unknown VRU word {}", data); + } + } + } else { + panic!("Unknown command in JCMD_VRU_READ_STATUS."); + } + device.vru.load_offset = 0; + } + device.vru.status = 1; + } + JCMD_VRU_WRITE_CONFIG => { + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] = + device::controller::data_crc( + device, + device.pif.channels[channel].tx_buf.unwrap() + 3, + 4, + ); + if device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] == 0x4E { + device.vru.talking = true; + device.vru.voice_init = 2; + device::events::create_event( + device, + device::events::EventType::Vru, + device.cpu.cop0.regs[device::cop0::COP0_COUNT_REG as usize] + + (device.cpu.clock_rate * 2), // 2 seconds + vru_talking_event, + ) + } else if device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] == 0xEF { + device.vru.talking = false; + device::events::remove_event(device, device::events::EventType::Vru); + } else if device.pif.ram[device.pif.channels[channel].tx_buf.unwrap() + 3] == 0x2 { + device.vru.voice_init = 0; + device.vru.words.clear(); + } + device.vru.status = 0; /* status is always set to 0 after a write */ + } + JCMD_VRU_WRITE_INIT => { + let offset = device.pif.channels[channel].tx_buf.unwrap() + 1; + if u16::from_ne_bytes(device.pif.ram[offset..offset + 2].try_into().unwrap()) == 0 { + device.vru.talking = false; + device::events::remove_event(device, device::events::EventType::Vru); + } + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] = 0; + } + JCMD_VRU_READ => { + let index = if device.vru.window_notifier.is_some() { + ui::vru::prompt_for_match( + &device.vru.words, + device.vru.window_notifier.as_ref().unwrap(), + device.vru.word_receiver.as_ref().unwrap(), + device.vru.gui_ctx.as_ref().unwrap(), + ) + } else { + 0x7FFF + }; + let num_results = if index == 0x7FFF { 0 } else { 1 }; + let data: HashMap = HashMap::from([ + (0, 0x8000), + (2, 0x0F00), + (4, 0), // error flags + (6, num_results), // number of results + (8, 0xBB8), // mic level + (10, 0xBB8), // voice level + (12, 0x8004), // voice length + (14, index), // match 1 + (16, 0), // match 1 errors + (18, 0x7FFF), // match 2 + (20, 0), // match 2 errors + (22, 0x7FFF), // match 3 + (24, 0), // match 3 errors + (26, 0x7FFF), // match 4 + (28, 0), // match 4 errors + (30, 0x7FFF), // match 5 + (32, 0), // match 5 errors + (34, 0x0040), + ]); + for (key, value) in data { + let offset = device.pif.channels[channel].rx_buf.unwrap() + key; + device.pif.ram[offset..offset + 2].copy_from_slice(&value.to_ne_bytes()); + } + + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap() + 36] = + device::controller::data_crc( + device, + device.pif.channels[channel].rx_buf.unwrap(), + 36, + ); + + device.vru.voice_state = VOICE_STATUS_START; + } + JCMD_VRU_WRITE => { + device.pif.ram[device.pif.channels[channel].rx_buf.unwrap()] = + device::controller::data_crc( + device, + device.pif.channels[channel].tx_buf.unwrap() + 3, + 20, + ); + if device.vru.load_offset == 0 { + device.vru.word_buffer = [0; 40]; + } + for i in 0..10 { + let offset = device.pif.channels[channel].tx_buf.unwrap() + 3 + (i * 2); + device.vru.word_buffer[device.vru.load_offset as usize] = + u16::from_ne_bytes(device.pif.ram[offset..offset + 2].try_into().unwrap()); + device.vru.load_offset += 1; + } + device.vru.status = 0; /* status is always set to 0 after a write */ + } + _ => panic!("unknown VRU command {}", cmd), + } +} + +pub fn vru_talking_event(device: &mut device::Device) { + device.vru.talking = false +} + +pub fn create_word_mappings(device: &mut device::Device) { + device.vru.word_mappings = HashMap::from([ + ( + String::from("03A50024000303CF00A80003036000EA"), + String::from("pikachu"), + ), + ( + String::from("03A50045000303CF00A80003036000EA"), + String::from("pikachu"), + ), + ( + String::from("03A50024000303C900450003036000EA"), + String::from("pikachu"), + ), + ( + String::from("03A8018F000303CF00A80003036000EA"), + String::from("pikachu"), + ), + ( + String::from("03B101B0000303CF00A80003036000EA"), + String::from("pikachu"), + ), + ( + String::from("03CF00A80003036000EA"), + String::from("pikachu"), + ), + ( + String::from("03A80066000303CF00A80003036000F900EA"), + String::from("pikachu"), + ), + ( + String::from("03A50024000303CF00A80003035D001200F900EA"), + String::from("pikachu"), + ), + ( + String::from("040801740024"), + String::from("hey!"), + ), + ( + String::from("03CF00C603360405000F0234"), + String::from("come-here"), + ), + ( + String::from("0369004803FC0318018F"), + String::from("this-way"), + ), + ( + String::from("039C010B000603900006037B01B0"), + String::from("good-bye"), + ), + ( + String::from("039900A80006037B01B0"), + String::from("good-bye"), + ), + ( + String::from("03F900090309009F02E2018F000303BD0234"), + String::from("see-you-later"), + ), + ( + String::from("037B01B00006037B01B0"), + String::from("bye-bye"), + ), + ( + String::from("03FC000303C30255000303C6"), + String::from("start"), + ), + ( + String::from("02E2006903FC000303B402E2018F"), + String::from("lets-play"), + ), + ( + String::from("040B00C002EB0213"), + String::from("hello"), + ), + ( + String::from("043B0213000303AB00A5034803FC006903FC00A503270024"), + String::from("open-sesame"), + ), + ( + String::from("043B0213000303A80063034803FC006903FC00A503270024"), + String::from("open-sesame"), + ), + ( + String::from("039F01FE00990318018F"), + String::from("go-away"), + ), + ( + String::from("039C010B00060390033302D603390042035A"), + String::from("good-morning"), + ), + ( + String::from("039900A5033302D603390042035A"), + String::from("good-morning"), + ), + ( + String::from("042F01AD033603FC023A0024"), + String::from("im-sorry"), + ), + ( + String::from("042F01AD033603FC012602F10024"), + String::from("im-sorry"), + ), + ( + String::from("03FC023A0024"), + String::from("sorry"), + ), + ( + String::from("03FC012602F10024"), + String::from("sorry"), + ), + ( + String::from("042F01B00003036000ED03DB030C00EA"), + String::from("i-choose-you"), + ), + ( + String::from("04080174030C00EA000303A50024000303CF00A80003036000EA"), + String::from("hey-you-pikachu"), + ), + ( + String::from("03A50024000303CF00A8000303A50024000303CF00A80003036000EA"), + String::from("pika-pikachu"), + ), + ( + String::from("03A50024000303CF00A8000303A50024000303CF00A8000303A50024"), + String::from("pika-pika-pi"), + ), + ( + String::from("03A50024000303A50024000303CF00A80003036000EA"), + String::from("pi-pikachu"), + ), + ( + String::from("03A50024000303A50024000303CF00A8000303A50024"), + String::from("pi-pika-pi"), + ), + ( + String::from("03A50024000303D8000303CF00C9"), + String::from("pikka"), + ), + ( + String::from("03A50024000303CF00A8"), + String::from("pika"), + ), + ( + String::from("03A50024000303CF00A8000303A50024000303CF00A8"), + String::from("pikapika"), + ), + ( + String::from("03A503030024000303CF00A8"), + String::from("pi-ka"), + ), + ( + String::from("03A50024000303CF00C9000303CF00C9"), + String::from("pi-ka-ka-"), + ), + ( + String::from("03A50024000303CF00A8000303CF00A8000303A50024"), + String::from("pi-kakapi-"), + ), + ( + String::from("037E02F10042035A036C0087000303C604050297"), + String::from("bring-that-here"), + ), + ( + String::from("039F0213000603960066000303B70045000303C6"), + String::from("go-get-it"), + ), + ( + String::from("0393004803E70045000303C6000303C000E703270024"), + String::from("give-it-to-me"), + ), + ( + String::from("0393004203270027036C0087000303C6"), + String::from("gimme-that"), + ), + ( + String::from("03F600C603480006038702370402014D000303D8"), + String::from("thundershock"), + ), + ( + String::from("03F600C603480006038702340006037B020A02EE000303C6"), + String::from("thunderbolt"), + ), + ( + String::from("03F600C60348000603870234"), + String::from("thunder"), + ), + ( + String::from("03F600C6033F0234"), + String::from("thunder"), + ), + ( + String::from("0432009F02E20066000303D8000303C602F10045000303D802F40087000303C6"), + String::from("electric-rat"), + ), + ( + String::from("0426001B02E20066000303D8000303C602F10045000303D802F40087000303C6"), + String::from("electric-rat"), + ), + ( + String::from("0432009F02E20066000303C602F10045000303D802F40087000303C6"), + String::from("electric-rat"), + ), + ( + String::from("042F01A40408018F000303B7030C00EA"), + String::from("i-hate-you"), + ), + ( + String::from("03A202F4018F000303C600060366014D0006037E"), + String::from("great-job"), + ), + ( + String::from("036C0087000303C3031B00AB03DE000603A202F4018F000303C6"), + String::from("that-was-great"), + ), + ( + String::from("0309023703FC0213000303C9030C00EA000303C6"), + String::from("youre-so-cute"), + ), + ( + String::from("03BD00A202F1004803ED0045000303D8"), + String::from("terrific"), + ), + ( + String::from("037500C9000303BD023703F002F10024"), + String::from("butterfree"), + ), + ( + String::from("043200C603360006037E02F4005D02E500A8"), + String::from("ambrella"), + ), + ( + String::from("037B01CE035A0006037B01CE035A"), + String::from("boing-boing"), + ), + ( + String::from("043801290348000303C000ED036C00A5033C0066000303D803FC000303C603FC000303BA018F00060366"), + String::from("on-to-the-next-stage!"), + ), + ( + String::from("042F0087000303AB009F02EE"), + String::from("apple"), + ), + ( + String::from("043200A8000303AB009F02EE"), + String::from("apple"), + ), + ( + String::from("0426000C0087000303B402EE"), + String::from("apple"), + ), + ( + String::from("03A202F10021033C0087000303AB009F02EE"), + String::from("green-apple"), + ), + ( + String::from("0372018F000303D8000303BA0087000303AB009F02EE"), + String::from("baked-apple"), + ), + ( + String::from("039F020A02EE0006038700A5033C0087000303AB009F02EE"), + String::from("golden-apple"), + ), + ( + String::from("03A5002400030360"), + String::from("peach"), + ), + ( + String::from("03FC000303C602FD012C00060372029D0024"), + String::from("strawberry"), + ), + ( + String::from("03FC000303BD0225012C00060372029D0024"), + String::from("strawberry"), + ), + ( + String::from("02F4008A03DE00060372029D0024"), + String::from("raspberry"), + ), + ( + String::from("02F4008A03FC0006037E02F10024"), + String::from("raspberry"), + ), + ( + String::from("037500A5033C0084033F00A8"), + String::from("banana"), + ), + ( + String::from("036F0042033C0084033F00C9"), + String::from("banana"), + ), + ( + String::from("037500C6033C0084033F00A8"), + String::from("banana"), + ), + ( + String::from("03CC0087000303C6000303BA018602EE"), + String::from("cattail"), + ), + ( + String::from("032101A702EE00060390040B02340006037E"), + String::from("wild-herb"), + ), + ( + String::from("03D502D60348"), + String::from("corn"), + ), + ( + String::from("03B1014D000303B4000303D502D60348"), + String::from("popcorn"), + ), + ( + String::from("03AB00C60336000303B4000303C900420348"), + String::from("pumpkin"), + ), + ( + String::from("03AB00C60336000303C900420348"), + String::from("pumpkin"), + ), + ( + String::from("03AB00C6035A000303CF00A50348"), + String::from("pumpkin"), + ), + ( + String::from("03C00273033F00A8000303B4"), + String::from("turnip"), + ), + ( + String::from("03C0027303390045000303B4"), + String::from("turnip"), + ), + ( + String::from("03CC00870006036F004500060366"), + String::from("cabbage"), + ), + ( + String::from("03CC008102F700A8000303C6"), + String::from("carrot"), + ), + ( + String::from("03CC02A300A8000303C6"), + String::from("carrot"), + ), + ( + String::from("043200C60339030900A50348"), + String::from("onion"), + ), + ( + String::from("043200A5033F00A50348"), + String::from("onion"), + ), + ( + String::from("043501080339030900A50348"), + String::from("onion"), + ), + ( + String::from("03FC031500240006037500C9000303BA018F0006038D0213"), + String::from("sweet-potato"), + ), + ( + String::from("03FC03150024000303C6000303AB00A8000303C3016E0006038D0213"), + String::from("sweet-potato"), + ), + ( + String::from("03FC03150024000303B4000303BA018F0006038700A8"), + String::from("sweet-potato"), + ), + ( + String::from("0411014D000303C603FC03150024000303C6000303AB00C9000303BA018F0006038D0213"), + String::from("hot-sweet-potato"), + ), + ( + String::from("03FC032A005D02DF002703F002FA00EA000303C6"), + String::from("smelly-fruit"), + ), + ( + String::from("03FC000303B70045000303C9002703F002FA00EA000303C6"), + String::from("sticky-fruit"), + ), + ( + String::from("02FD021603FC000303BD00A80006039003F002FA00EA000303C6"), + String::from("roasted-fruit"), + ), + ( + String::from("0321012302EE033F00A8000303C6"), + String::from("walnut"), + ), + ( + String::from("03D802F40087000303D50321012302EE033F00A8000303C6"), + String::from("cracked-walnut"), + ), + ( + String::from("03FC000303B101B0000303C900270402005D02EE"), + String::from("spiky-shell"), + ), + ( + String::from("03FC000303B101AD033900270402005D02EE"), + String::from("spiny-shell"), + ), + ( + String::from("0360006903FC033F00A8000303C6"), + String::from("chestnut"), + ), + ( + String::from("036F002400030360033F00C9000303C6"), + String::from("beach-nut"), + ), + ( + String::from("03D50213000303CF00A5033F00C9000303C6"), + String::from("coconut"), + ), + ( + String::from("042C018F000303D502D60348"), + String::from("acorn"), + ), + ( + String::from("03C3021603FC000303BD00A800060384018F000303D502D60348"), + String::from("toasted-acorn"), + ), + ( + String::from("03F002EB01950042034E018F000303D502D60348"), + String::from("flying-acorn"), + ), + ( + String::from("042C018F000303D502D60348000303C3014D000303B4"), + String::from("acorn-top"), + ), + ( + String::from("036600C603360006037B0216040202FA00E70336"), + String::from("jumbo-shroom"), + ), + ( + String::from("02FD021603FC000303BD00A8000603900006036600A503360006037B0213"), + String::from("roasted-jumbo"), + ), + ( + String::from("039002F1002103270027040202FA00E70336"), + String::from("dreamy-shroom"), + ), + ( + String::from("03C602F700CC03F0009F02EE000303C3014D000303B4"), + String::from("truffle-top"), + ), + ( + String::from("037E02E800ED040202FA00E70336"), + String::from("blue-shroom"), + ), + ( + String::from("0411014D000303C6040202FA00E70336"), + String::from("hot-shroom"), + ), + ( + String::from("02F4006600060390040202FA00E70336"), + String::from("red-shroom"), + ), + ( + String::from("03FC00C603390027040202FA00E70336"), + String::from("sunny-shroom"), + ), + ( + String::from("032D00CC040202FA00E70336"), + String::from("mushroom"), + ), + ( + String::from("0411014D000303C6032D00CC040202FA00E70336"), + String::from("hot-mushroom"), + ), + ( + String::from("02EB01B0000303C60006037500C002EE0006037E"), + String::from("light-bulb"), + ), + ( + String::from("02EB01B0000303C600060378010202EE0006037E"), + String::from("light-bulb"), + ), + ( + String::from("03CF00C9000303B4000303CC018F000303D8"), + String::from("cupcake"), + ), + ( + String::from("03840174002703DB0024"), + String::from("daisy"), + ), + ( + String::from("03A50045000303C000E70339030900A8"), + String::from("petunia"), + ), + ( + String::from("03C000E102E500A8000303B4"), + String::from("tulip"), + ), + ( + String::from("03C000E102DF0045000303B4"), + String::from("tulip"), + ), + ( + String::from("03840084034800060387009F02EB019B00A50348"), + String::from("dandelion"), + ), + ( + String::from("03840084034800060381001B02EB019B00A50348"), + String::from("dandelion"), + ), + ( + String::from("037E02E800EA00060372005D02EE"), + String::from("bluebell"), + ), + ( + String::from("03FC000303CF00C60348000303D80006037E02EB015003FC00A50336"), + String::from("skunk-blossom"), + ), + ( + String::from("03FC00C6034803F002EB01DD0234"), + String::from("sunflower"), + ), + ( + String::from("02DF003C02DF0024"), + String::from("lily"), + ), + ( + String::from("02FD021603DE0006037500C900060390"), + String::from("rose-bud"), + ), + ( + String::from("02F400660006039002FD021603DE"), + String::from("red-rose"), + ), + ( + String::from("0375009F02E800E70348"), + String::from("balloon"), + ), + ( + String::from("03B10213000303CC018F00060381004803FC000303D8"), + String::from("poke-disc"), + ), + ( + String::from("036F0024000303600006037B012302EE"), + String::from("beach-ball"), + ), + ( + String::from("0321012C000303BD02190042035A000303CC00840348"), + String::from("watering-can"), + ), + ( + String::from("0321012C000303BD02190042035A0006036600C9000603A2"), + String::from("watering-jug"), + ), + ( + String::from("0306005D02EB02130006037B012302EE"), + String::from("yellow-ball"), + ), + ( + String::from("03600255000303D5020A02EE"), + String::from("charcoal"), + ), + ( + String::from("02DF002703F004110315004803FC009F02EE"), + String::from("leaf-whistle"), + ), + ( + String::from("041102520333014A03390045000303CF00A8"), + String::from("harmonica"), + ), + ( + String::from("03C602F700C60336000303A80066"), + String::from("trumpet"), + ), + ( + String::from("03C602FA01080336000303AB00A8000303C6"), + String::from("trumpet"), + ), + ( + String::from("037500A5033C0084033F00A8000303A5000F009F02EE"), + String::from("banana-peel"), + ), + ( + String::from("032A018F0006039900AB03F002100348"), + String::from("megaphone"), + ), + ( + String::from("039F020A02EE00060390000303D501CE0348"), + String::from("gold-coin"), + ), + ( + String::from("0360014D000303CF009F02E500A8000303C6000303D501CE0348"), + String::from("chocolate-coin"), + ), + ( + String::from("0402014D000303D802E500A8000303C6000303D501CE0348"), + String::from("chocolate-coin"), + ), + ( + String::from("03F9003C02EE03EA0234000303D501CE0348"), + String::from("silver-coin"), + ), + ( + String::from("03D5014D000303AB0234000303D501CE0348"), + String::from("copper-coin"), + ), + ( + String::from("02FA00EA0006036F0024"), + String::from("ruby"), + ), + ( + String::from("03FC008A03F001AA0300"), + String::from("sapphire"), + ), + ( + String::from("03FC008A03F0019B0234"), + String::from("sapphire"), + ), + ( + String::from("03C30213000303A8008A03DE"), + String::from("topaz"), + ), + ( + String::from("02F40066000603900333025500060375009F02EE"), + String::from("red-marble"), + ), + ( + String::from("037E02E800E70333025500060375009F02EE"), + String::from("blue-marble"), + ), + ( + String::from("0306005D02EB02100333025500060375009F02EE"), + String::from("yellow-marble"), + ), + ( + String::from("02FA00EA0006036F001E02F10042035A"), + String::from("ruby-ring"), + ), + ( + String::from("037B014D00060387009F02EE000303CC0087000303B402F10042035A"), + String::from("bottle-cap-ring"), + ), + ( + String::from("03B101AA02F700A8000303C603FC02D900060390"), + String::from("pirate-sword"), + ), + ( + String::from("03B101AA02F10045000303C603FC02D900060390"), + String::from("pirate-sword"), + ), + ( + String::from("03C301D403FC0126030000060390"), + String::from("toy-sword"), + ), + ( + String::from("037502340006039003F00069036C0234"), + String::from("bird-feather"), + ), + ( + String::from("037B020A02EE000303C6"), + String::from("bolt"), + ), + ( + String::from("032A0087000603A203390045000303C6"), + String::from("magnet"), + ), + ( + String::from("032A018F000603A203390045000303C6"), + String::from("magnet"), + ), + ( + String::from("0333025500060375009F02EE"), + String::from("marble"), + ), + ( + String::from("03D802F4018F000303C6"), + String::from("crate"), + ), + ( + String::from("03D50255000603900006037B02D9000603900006037B014D000303D803FC"), + String::from("cardboard-box"), + ), + ( + String::from("03CF00A503360405000F0234"), + String::from("come-here"), + ), + ( + String::from("043B021603EA022804050297"), + String::from("over-here"), + ), + ( + String::from("040B009F02EB0213"), + String::from("hello"), + ), + ( + String::from("039C010B00060390034501950024000303C6"), + String::from("good-night"), + ), + ( + String::from("039900A5034501B0000303C6"), + String::from("good-night"), + ), + ( + String::from("03F6018C035A000303C9030C00EA"), + String::from("thank-you"), + ), + ( + String::from("038A00ED03FC00C6033603F30042035A"), + String::from("do-something"), + ), + ( + String::from("02DF004803FC00A50348000303BD00A503270024"), + String::from("listen-to-me"), + ), + ( + String::from("03A500090024000303CF00A8"), + String::from("pi-ka"), + ), + ( + String::from("039F0213000603930045000303BD00A8000303C6"), + String::from("go-get-it"), + ), + ( + String::from("036C0087000303C603FC03F001AD0348"), + String::from("thats-fine"), + ), + ( + String::from("043B0213000303CC01740024"), + String::from("ok"), + ), + ( + String::from("04020276"), + String::from("sure"), + ), + ( + String::from("02FD01B0000303C6"), + String::from("right"), + ), + ( + String::from("02E2006903FC0006038A00ED036C0087000303C6"), + String::from("lets-do-that"), + ), + ( + String::from("0345014D000303C6036C0087000303C3031B00C60348"), + String::from("not-that-one"), + ), + ( + String::from("036C0087000303C603DE02FD0129035A"), + String::from("thats-wrong"), + ), + ( + String::from("0372008700060390000303B10213000303CC018C0333014A0348"), + String::from("bad-pokemon"), + ), + ( + String::from("038D02100348000303C60006038A00ED036C0087000303C6"), + String::from("dont-do-that"), + ), + ( + String::from("042900420348000303CF021C0066000303D8000303C6"), + String::from("incorrect"), + ), + ( + String::from("03CF00C9000303BD00A8000303C301F2000303C6"), + String::from("cut-it-out"), + ), + ( + String::from("03450213"), + String::from("no"), + ), + ( + String::from("0318018F0006038700A80006039F0213"), + String::from("way-to-go"), + ), + ( + String::from("03F002EB01DD0234"), + String::from("flower"), + ), + ( + String::from("038400840348000303C603FC"), + String::from("dance"), + ), + ( + String::from("03F602FD01F80045000303C6"), + String::from("throw-it"), + ), + ( + String::from("03C3015003F90045000303C6"), + String::from("toss-it"), + ), + ( + String::from("030C00EA000303CC008403390024000303C6036C0087000303C6"), + String::from("you-can-eat-that"), + ), + ( + String::from("03BA019203FC000303B70045000303C6"), + String::from("taste-it"), + ), + ( + String::from("041101F503DB0045000303C6000303BA019203FC000303C6"), + String::from("hows-it-taste?"), + ), + ( + String::from("041101F503DB0045000303C603FC032A005D02EE"), + String::from("hows-it-smell?"), + ), + ( + String::from("041101F503DB0045000303C603FC01EF034800060390"), + String::from("hows-it-sound?"), + ), + ( + String::from("0411031B00A8000303C60006038700AB03DB0045000303C60006038A00EA"), + String::from("what-does-it-do?"), + ), + ( + String::from("03B402E201830411031B00A8000303C6"), + String::from("play-what?"), + ), + ( + String::from("03C602FD01950045000303C6"), + String::from("try-it"), + ), + ( + String::from("03B402E201740045000303C6"), + String::from("play-it"), + ), + ( + String::from("039002FD014D000303A50045000303C6"), + String::from("drop-it"), + ), + ( + String::from("03A80066000303CF00A80003036000EA"), + String::from("pikachu"), + ), + ( + String::from("030C00EA000303CC00840348000303BA019203FC000303B70045000303C6"), + String::from("you-can-taste-it"), + ), + ( + String::from("041101F503DB0045000303C603FC01EF0348"), + String::from("hows-it-sound?"), + ), + ( + String::from("03AE010B000303C6036C0087000303C6000603720087000303D8"), + String::from("put-that-back"), + ), + ( + String::from("03FC000303BA018003150048036C03270024"), + String::from("stay-with-me"), + ), + ( + String::from("03FC000303BA01770087000303C6033301A4041101F503FC"), + String::from("stay-at-my-house"), + ), + ( + String::from("03F90009030C00E102E2018F000303BD0234"), + String::from("see-you-later"), + ), + ( + String::from("03F90009030C00EA"), + String::from("see-you"), + ), + ( + String::from("037B01B0"), + String::from("bye"), + ), + ( + String::from("0411031B00A8000303BD0219030900A80006038A00CF0042035A"), + String::from("what-are-you-doing?"), + ), + ( + String::from("0411031B00A8000303C603FC00C9000303B4"), + String::from("whats-up?"), + ), + ( + String::from("0411031B00A8000303C603FC00C9000303B4036C02B8"), + String::from("whats-up-there?"), + ), + ( + String::from("042F0087000303AB009F02EE"), + String::from("apple"), + ), + ( + String::from("033C006903EA0231033301AD034800060390"), + String::from("never-mind"), + ), + ( + String::from("039C010B00060390034501B0000303C6"), + String::from("good-night"), + ), + ( + String::from("03F60084035A000303C9030C00EA"), + String::from("thank-you"), + ), + ( + String::from("04290045000303C603DE02F700C603390042035100990318018F"), + String::from("its-running-away"), + ), + ( + String::from("03F002EB01DD02340006037500C900060390"), + String::from("flower-bud"), + ), + ( + String::from("03BA008700060393030902190045000303C6"), + String::from("tag-youre-it"), + ), + ( + String::from("039F01FE00BA0318018F"), + String::from("go-away"), + ), + ( + String::from("02E8010B000303D5021603EA0237036C02B8"), + String::from("look-over-there"), + ), + ( + String::from("04290045000303C603FC021603EA0237036C02B8"), + String::from("its-over-there"), + ), + ( + String::from("02DF003C02DF0024"), + String::from("lily"), + ), + ( + String::from("03FC00C6034803F002EB01DD0234"), + String::from("sunflower"), + ), + ( + String::from("03FC000303CF00C60348000303D80006037E02EB015003FC014A0336"), + String::from("skunk-blossom"), + ), + ( + String::from("03FC000303C602FD016E00060372029D0024"), + String::from("strawberry"), + ), + ( + String::from("02F4008A03FC000303B402F10024"), + String::from("raspberry"), + ), + ( + String::from("0438012C0006038100480402"), + String::from("oddish"), + ), + ( + String::from("03A202E800E70336"), + String::from("gloom"), + ), + ( + String::from("03EA01A702EE000303B402E800E70336"), + String::from("vileplume"), + ), + ( + String::from("042F01AD033603FC02BE0024"), + String::from("im-sorry"), + ), + ( + String::from("03FC02BE0024"), + String::from("sorry"), + ), + ( + String::from("03CC0084033F00A50348"), + String::from("cannon"), + ), + ( + String::from("03810045000603930045000303C301F2000303C6"), + String::from("dig-it-out"), + ), + ( + String::from("03810045000603A2036C017A0234"), + String::from("dig-there"), + ), + ( + String::from("03810045000603A2"), + String::from("dig"), + ), + ( + String::from("03AE010202EE"), + String::from("pull"), + ), + ( + String::from("033F00C9000303C6"), + String::from("nut"), + ), + ( + String::from("03780108033C0084033F00C9"), + String::from("banana"), + ), + ( + String::from("03C602F4006903E4023400030360006903FC000303C6"), + String::from("treasure-chest"), + ), + ( + String::from("03C602F4006903E40234"), + String::from("treasure"), + ), + ( + String::from("0372029D002400060390000303C602F4006903E40234"), + String::from("buried-treasure"), + ), + ( + String::from("0408005D02EB0213"), + String::from("hello"), + ), + ( + String::from("042F01A702E500CC03E7030C00EA"), + String::from("i-love-you"), + ), + ( + String::from("04080084035701290348"), + String::from("hang-on"), + ), + ( + String::from("03C602F40066000603660234"), + String::from("treasure"), + ), + ( + String::from("03960066000303C602EB015003FC000303C6"), + String::from("get-lost"), + ), + ( + String::from("03A50024000303CF00BD040B00A8"), + String::from("pikka"), + ), + ( + String::from("03A500090024000303CF00C9"), + String::from("pi-ka"), + ), + ( + String::from("0375009C041101AD034800060381030C00EA"), + String::from("behind-you"), + ), + ( + String::from("036F0018041101AD03480006036600EA"), + String::from("behind-you"), + ), + ( + String::from("041101EF032A006303390024"), + String::from("how-many?"), + ), + ( + String::from("041101EF032A0063033900150258036C02B8"), + String::from("how-many-are-there?"), + ), + ( + String::from("03B1020A02DF001503180087000603A2"), + String::from("poliwag"), + ), + ( + String::from("03B1014402DF001503180087000603A2"), + String::from("poliwag"), + ), + ( + String::from("03B1020A02DF0015031B022B02EE"), + String::from("poliwhirl"), + ), + ( + String::from("03FC000303D5031B0234000303BD009F02EE"), + String::from("squirtle"), + ), + ( + String::from("0396008A03FC000303C602DF0024"), + String::from("gastly"), + ), + ( + String::from("041101290348000303BD0234"), + String::from("haunter"), + ), + ( + String::from("02FD0129035A"), + String::from("wrong"), + ), + ( + String::from("036C0087000303C603DE02FD0129035A"), + String::from("thats-wrong"), + ), + ( + String::from("03D503150045000303C6"), + String::from("quit"), + ), + ( + String::from("03CF00C9000303B700450006038D01F2000303C6"), + String::from("cut-it-out"), + ), + ( + String::from("03CF00A503270297"), + String::from("c-mere"), + ), + ( + String::from("03CF00A5033604050297"), + String::from("come-here"), + ), + ( + String::from("02E8010B000303D5021603EA022804050297"), + String::from("look-over-here"), + ), + ( + String::from("02E8010B000303D501F2000303C6"), + String::from("look-out"), + ), + ( + String::from("0321012C0003036001F2000303C6"), + String::from("watch-out"), + ), + ( + String::from("036C02B8"), + String::from("there"), + ), + ( + String::from("03FC03150042035A034501F2"), + String::from("swing-now"), + ), + ( + String::from("03FC03150042035A"), + String::from("swing"), + ), + ( + String::from("039F020D02FD01B0000303C6"), + String::from("go-right"), + ), + ( + String::from("02FD01B0000303C6"), + String::from("right"), + ), + ( + String::from("03F00258036C022E02FD01B0000303C6"), + String::from("farther-right"), + ), + ( + String::from("039F020A02E2006903F0000303C6"), + String::from("go-left"), + ), + ( + String::from("02E2006903F0000303C6"), + String::from("left"), + ), + ( + String::from("03F00258036C022B02E2006903F0000303C6"), + String::from("farther-left"), + ), + ( + String::from("03FC000303C3014D000303B4"), + String::from("stop"), + ), + ( + String::from("03FC000303C3014D000303B4034501F2"), + String::from("stop-now"), + ), + ( + String::from("03FC000303C3014D000303B4036C02B8"), + String::from("stop-there"), + ), + ( + String::from("03FC000303A50042033F00A202FD01EF034800060390"), + String::from("spin-around"), + ), + ( + String::from("02FD012903570318018F"), + String::from("wrong-way"), + ), + ( + String::from("03BD0231033F00A202FD01EF034800060390"), + String::from("turn-around"), + ), + ( + String::from("03720087000303CF00C9000303B4"), + String::from("back-up"), + ), + ( + String::from("03C90024000303B40006039F01F80042035A"), + String::from("keep-going"), + ), + ( + String::from("03FC000303C602F4018F00060387009C0408006600060390"), + String::from("straight-ahead"), + ), + ( + String::from("037500C002EE0006037500AB03FC02D9"), + String::from("bulbasaur"), + ), + ( + String::from("03E70021033F00AB03FC02D9"), + String::from("venusaur"), + ), + ( + String::from("03FC02EB0213000303B10213000303D8"), + String::from("slowpoke"), + ), + ( + String::from("03FC000303D5031B0234000303BD009F02EE"), + String::from("squirtle"), + ), + ( + String::from("03600252032A00840348000603870234"), + String::from("charmander"), + ), + ( + String::from("03C903060087000303BD0234000303A50024"), + String::from("caterpie"), + ), + ( + String::from("02EB014D000303B402F700AB03FC"), + String::from("lapras"), + ), + ( + String::from("02E20087000303B402F700AB03FC"), + String::from("lapras"), + ), + ( + String::from("03C302130006039900A8000303A50024"), + String::from("togepi"), + ), + ( + String::from("03C30213000603930045000303A500090024"), + String::from("togepi"), + ), + ( + String::from("03A500420339030F012C0006038700A8"), + String::from("pinata"), + ), + ( + String::from("03A500210339030F014D000303BD00A8"), + String::from("pinata"), + ), + ( + String::from("02DF004803F900420348000303BD00A503270024"), + String::from("listen-to-me"), + ), + ( + String::from("03F002FA00EA000303C6"), + String::from("fruit"), + ), + ( + String::from("03450213000303C6000303A8008700060390"), + String::from("notepad"), + ), + ( + String::from("042900420348000603A202F1002400060381000F00A50348000303C603FC"), + String::from("ingredients"), + ), + ( + String::from("02F4006903FC00A8000303A50024"), + String::from("recipe"), + ), + ( + String::from("02F4006903F90045000303A50024"), + String::from("recipe"), + ), + ( + String::from("0411014D000303C603FC03150024000303AB00C9000303BA018F0006038D0213"), + String::from("hot-sweet-potato"), + ), + ( + String::from("0411014D000303C603FC03150024000303B4000303BA018F0006038D0213"), + String::from("hot-sweet-potato"), + ), + ( + String::from("03D200E102EE"), + String::from("cool"), + ), + ( + String::from("03F001AD0348"), + String::from("fine"), + ), + ( + String::from("0309023703FC0213000303C9030C00EA000303C6"), + String::from("youre-so-cute"), + ), + ( + String::from("0393004803E70045000303C6000303C000E703270024"), + String::from("give-it-to-me"), + ), + ( + String::from("0393004203270027036C0087000303C6"), + String::from("gimme-that"), + ), + ( + String::from("03F602FD01F80045000303C6"), + String::from("throw-it"), + ), + ( + String::from("03FC000303C000EA000303A5004500060390"), + String::from("stupid"), + ), + ( + String::from("02E20066000303C603FC000303B402E2018F"), + String::from("lets-play"), + ), + ( + String::from("039C0108033302D603390042035A"), + String::from("good-morning"), + ), + ( + String::from("0318018F000303CF00C9000303B4"), + String::from("wake-up"), + ), + ( + String::from("03960066000303BD00C9000303B4"), + String::from("get-up"), + ), + ( + String::from("04260024000303CF00A5034803DE"), + String::from("ekans"), + ), + ( + String::from("042C0066000303CF00A5034803DE"), + String::from("ekans"), + ), + ( + String::from("037E02F10042034B0045000303C604050297"), + String::from("bring-it-here"), + ), + ( + String::from("030C00EA000303CF00A503390024000303C6036C0087000303C6"), + String::from("you-can-eat-that"), + ), + ( + String::from("03BA019203FC000303BD00A8000303C6"), + String::from("taste-it"), + ), + ( + String::from("04260024000303B70045000303C6"), + String::from("eat-it"), + ), + ( + String::from("032A0087000603A2033F00A8000303C6"), + String::from("magnet"), + ), + ( + String::from("03D501CE0348"), + String::from("coin"), + ), + ( + String::from("036600D5009F02EE"), + String::from("jewel"), + ), + ( + String::from("0333025500060375009F02EE"), + String::from("marble"), + ), + ( + String::from("03B101AA02F10045000303C603FC01"), + String::from("pirate-sword"), + ), + ( + String::from("039C0108034501B0000303C6"), + String::from("good-night"), + ), + ( + String::from("03D50315004803DE000303C301AD0336"), + String::from("quiz-time"), + ), + ( + String::from("03B7002703E70024"), + String::from("tv"), + ), + ( + String::from("042F01B0000303D503150045000303C6"), + String::from("i-quit"), + ), + ( + String::from("042F01AD03360006038700C60348"), + String::from("im-done"), + ), + ( + String::from("030C00EA000303CF00A50348000303B402E2018F"), + String::from("you-can-play"), + ), + ( + String::from("03150024000303CF00A50348000303B402E2018F"), + String::from("we-can-play"), + ), + ( + String::from("0372008700060390"), + String::from("bad"), + ), + ( + String::from("0345014D000303C90045000303C3012F03F0"), + String::from("knock-it-off"), + ), + ( + String::from("03450213000303B402E201740042035A"), + String::from("no-playing"), + ), + ( + String::from("03FC000303C3014D000303B4000303B402E201740042035A"), + String::from("stop-playing"), + ), + ( + String::from("042F01AD03360345014D000303C6000303B402E201740042035A"), + String::from("im-not-playing"), + ), + ( + String::from("03D503150045000303C6"), + String::from("quit"), + ), + ( + String::from("03FC000303C3014D000303B4036C0087000303C6"), + String::from("stop-that"), + ), + ( + String::from("03D802DF002103390045000303BD00C9000303B4"), + String::from("clean-it-up"), + ), + ( + String::from("03AE010B000303B70045000303BD00990318018F"), + String::from("put-it-away"), + ), + ( + String::from("03D802DF0021033F00C9000303B4"), + String::from("clean-up"), + ), + ( + String::from("03D802DF00210348036C0087000303BD00C9000303B4"), + String::from("clean-that-up"), + ), + ( + String::from("03B70048040200EA"), + String::from("tissue"), + ), + ( + String::from("037500C002EE0006037500AB03FC02D9"), + String::from("bulbasaur"), + ), + ( + String::from("042F01B303E7002703FC02D9"), + String::from("ivysaur"), + ), + ( + String::from("042F01B303EA00AB03FC02D9"), + String::from("ivysaur"), + ), + ( + String::from("03E70021033F00AB03FC02D9"), + String::from("venusaur"), + ), + ( + String::from("03600252032A00840348000603870234"), + String::from("charmander"), + ), + ( + String::from("036002520327001B02DF0009030900A50348"), + String::from("charmeleon"), + ), + ( + String::from("0360025803DE025500060390"), + String::from("charizard"), + ), + ( + String::from("0360024000AB03DE025500060390"), + String::from("charizard"), + ), + ( + String::from("03FC000303D5031B0234000303BD009F02EE"), + String::from("squirtle"), + ), + ( + String::from("03210255000303BD0234000303BD009F02EE"), + String::from("wartortle"), + ), + ( + String::from("03210255000303C302D9000303BD009F02EE"), + String::from("wartortle"), + ), + ( + String::from("037E02E2008A03FC000303C301D403FC"), + String::from("blastoise"), + ), + ( + String::from("03CC0087000303BD0234000303A50024"), + String::from("caterpie"), + ), + ( + String::from("032A0066000303BD00A8000303B1014D00060390"), + String::from("metapod"), + ), + ( + String::from("037500C9000303BD023703F002F10024"), + String::from("butterfree"), + ), + ( + String::from("0315002400060387009F02EE"), + String::from("weedle"), + ), + ( + String::from("03D2010B000303D200E7033F00A8"), + String::from("kakuna"), + ), + ( + String::from("03C90045000303D200E7033F00A8"), + String::from("kakuna"), + ), + ( + String::from("036F00240006039002F1003C02EE"), + String::from("beedrill"), + ), + ( + String::from("036F00240006039002F7009F02EE"), + String::from("beedrill"), + ), + ( + String::from("03A5004500060366014D000303C6"), + String::from("pidgeot"), + ), + ( + String::from("02F40087000303BD00A8000303BD00A8"), + String::from("rattata"), + ), + ( + String::from("02F700A8000303BA00870006038700A8"), + String::from("rattata"), + ), + ( + String::from("02F40087000303BA00870006038700A8"), + String::from("rattata"), + ), + ( + String::from("02F40087000303B70045000303CC018F000303C6"), + String::from("raticate"), + ), + ( + String::from("03FC000303A502880213"), + String::from("spearow"), + ), + ( + String::from("03ED02880213"), + String::from("fearow"), + ), + ( + String::from("04260024000303CF00A5034803DE"), + String::from("ekans"), + ), + ( + String::from("042C0066000303CF00A5034803DE"), + String::from("ekans"), + ), + ( + String::from("043802550006037B014D000303D8"), + String::from("arbok"), + ), + ( + String::from("03A50024000303CF00A80003036000EA"), + String::from("pikachu"), + ), + ( + String::from("02FD01B00003036000EA"), + String::from("raichu"), + ), + ( + String::from("03FC00840348040202FA00EA"), + String::from("sandshrew"), + ), + ( + String::from("03FC0084034803FC02E2008A0402"), + String::from("sandslash"), + ), + ( + String::from("0339004500060387021F00A5034803ED0021032A018602EE"), + String::from("nidoran-female"), + ), + ( + String::from("033900450006038D020D02F700A5034803ED0021032A017A009F02EE"), + String::from("nidoran-female"), + ), + ( + String::from("033900450006038702190021033F00A8"), + String::from("nidorina"), + ), + ( + String::from("033900240006038D0213000303D5031500210348"), + String::from("nidoqueen"), + ), + ( + String::from("033900450006038D020D02F700A50348032A018602EE"), + String::from("nidoran-male"), + ), + ( + String::from("0339004500060387021F00A50348032A017A009F02EE"), + String::from("nidoran-male"), + ), + ( + String::from("033900450006038D02BE002103450213"), + String::from("nidorino"), + ), + ( + String::from("033900240006038D020D02F1002103450213"), + String::from("nidorino"), + ), + ( + String::from("033900240006038D0213000303C90042035A"), + String::from("nidoking"), + ), + ( + String::from("03D802E2006903F0008102F10024"), + String::from("clefairy"), + ), + ( + String::from("03D802E500AB03F0008102F10024"), + String::from("clefairy"), + ), + ( + String::from("03D802E2006903F0018F00060375009F02EE"), + String::from("clefable"), + ), + ( + String::from("03D802E500AB03F0018F00060375009F02EE"), + String::from("clefable"), + ), + ( + String::from("03EA009F02EE000303A50045000303D803FC"), + String::from("vulpix"), + ), + ( + String::from("034501AD0348000303BA018602EE03DE"), + String::from("ninetales"), + ), + ( + String::from("03630045000603A202DF0024000303AB00CC03F0"), + String::from("jigglypuff"), + ), + ( + String::from("0363004500060399009F02DF0024000303AB00CC03F0"), + String::from("jigglypuff"), + ), + ( + String::from("03150045000603A202DF0024000303BD00CC03F0"), + String::from("wigglytuff"), + ), + ( + String::from("03DE00EA000603720087000303C6"), + String::from("zubat"), + ), + ( + String::from("039F020A02EE000603720087000303C6"), + String::from("golbat"), + ), + ( + String::from("0438012C0006038100480402"), + String::from("oddish"), + ), + ( + String::from("03A202E800E70336"), + String::from("gloom"), + ), + ( + String::from("03EA01A702EE000303B402E800E70336"), + String::from("vileplume"), + ), + ( + String::from("03B1024000AB03FC"), + String::from("paras"), + ), + ( + String::from("03A802A300AB03FC"), + String::from("paras"), + ), + ( + String::from("03B1024000AB03FC0066000303D8000303C6"), + String::from("parasect"), + ), + ( + String::from("03A802A300AB03FC0066000303D8000303C6"), + String::from("parasect"), + ), + ( + String::from("03EA006303450210033C0087000303C6"), + String::from("venonat"), + ), + ( + String::from("03EA0063034502100333012F03F6"), + String::from("venomoth"), + ), + ( + String::from("03810045000603A202E500A8000303C6"), + String::from("diglett"), + ), + ( + String::from("0327001501F503F6"), + String::from("meowth"), + ), + ( + String::from("03AB023703E400A50348"), + String::from("persian"), + ), + ( + String::from("03FC01B00006038700C9000303D8"), + String::from("psyduck"), + ), + ( + String::from("039C010202EE0006038700C9000303D8"), + String::from("golduck"), + ), + ( + String::from("032A0084035A000303C90024"), + String::from("mankey"), + ), + ( + String::from("03B402FD01AD032A018F000303B4"), + String::from("primeape"), + ), + ( + String::from("03A202FD020A02EB01B3036C"), + String::from("growlithe"), + ), + ( + String::from("03A202FD01E902DF0048036C"), + String::from("growlithe"), + ), + ( + String::from("04380255000303CC018C034501AD0348"), + String::from("arcanine"), + ), + ( + String::from("04380255000303CF00A5034501AD0348"), + String::from("arcanine"), + ), + ( + String::from("03B1020A02DF001503180087000603A2"), + String::from("poliwag"), + ), + ( + String::from("03B1020A02DF0015031B022B02EE"), + String::from("poliwhirl"), + ), + ( + String::from("03B1020A02DF001E02F4008A03F6"), + String::from("poliwrath"), + ), + ( + String::from("03B1014402DF001E02F4008A03F6"), + String::from("poliwrath"), + ), + ( + String::from("042F00870006037E02F700A8"), + String::from("abra"), + ), + ( + String::from("03CF00A80006038400870006037E02F700A8"), + String::from("kadabra"), + ), + ( + String::from("042F007E02E500A8000303CF00AB03DE00840336"), + String::from("alakazam"), + ), + ( + String::from("032D00A800030360014D000303B4"), + String::from("machop"), + ), + ( + String::from("032D00A8000303600213000303D8"), + String::from("machoke"), + ), + ( + String::from("032D00A80003036000840336000303B4"), + String::from("machamp"), + ), + ( + String::from("0372005D02EE03FC000303B402FD01F2000303C6"), + String::from("bellsprout"), + ), + ( + String::from("03BA0063033F00A8000303CF00C002EE"), + String::from("tentacool"), + ), + ( + String::from("03BA0063033F00A8000303D802FA00E102EE"), + String::from("tentacruel"), + ), + ( + String::from("03630009030F02130006038A00EA00060390"), + String::from("geodude"), + ), + ( + String::from("03A202F4008A03EA009F02E50234"), + String::from("graveler"), + ), + ( + String::from("03A202F4008A03EA02E50234"), + String::from("graveler"), + ), + ( + String::from("039F020A02E500A50336"), + String::from("golem"), + ), + ( + String::from("039F014402EE0336"), + String::from("golem"), + ), + ( + String::from("03B1021003390024000303BD00A8"), + String::from("ponyta"), + ), + ( + String::from("03B1021003390024000303C3016E"), + String::from("ponyta"), + ), + ( + String::from("02F40087000303A5004500060384008A0402"), + String::from("rapidash"), + ), + ( + String::from("03FC02EB0213000303B10213000303D8"), + String::from("slowpoke"), + ), + ( + String::from("03FC02EB02130006037E02FD0213"), + String::from("slowbro"), + ), + ( + String::from("032A0087000603A2033F00A5033301B0000303C6"), + String::from("magnemite"), + ), + ( + String::from("032A0087000603A2033F00A8000303C3014A0348"), + String::from("magneton"), + ), + ( + String::from("0008"), + String::from("farfetch"), + ), + ( + String::from("038D02130006039002F100150213"), + String::from("dodrio"), + ), + ( + String::from("03F9001B02EE"), + String::from("seel"), + ), + ( + String::from("038A00EA0006039F014A035A"), + String::from("dewgong"), + ), + ( + String::from("038A00EA0006039F014A0348"), + String::from("dewgong"), + ), + ( + String::from("03A202FD01AD032D0234"), + String::from("grimer"), + ), + ( + String::from("032D00C9000303D8"), + String::from("muk"), + ), + ( + String::from("0402005D02EE000603870234"), + String::from("shellder"), + ), + ( + String::from("03D802EB01D403FC000303BD0234"), + String::from("cloyster"), + ), + ( + String::from("0396008A03FC000303C602DF00"), + String::from("gastly"), + ), + ( + String::from("0396008A03FC02DF0024"), + String::from("gastly"), + ), + ( + String::from("041101290348000303BD0234"), + String::from("haunter"), + ), + ( + String::from("03960084035A0006039F0255"), + String::from("gengar"), + ), + ( + String::from("0396006303480006039F0255"), + String::from("gengar"), + ), + ( + String::from("0438014A03390045000303D803FC"), + String::from("onix"), + ), + ( + String::from("039002FD01F503DB0024"), + String::from("drowzee"), + ), + ( + String::from("039002FD021603DB0024"), + String::from("drowzee"), + ), + ( + String::from("04050045000303B403450213"), + String::from("hypno"), + ), + ( + String::from("03D802F400870006036F00"), + String::from("krabby"), + ), + ( + String::from("03C90042035A02E50234"), + String::from("kingler"), + ), + ( + String::from("03EA020A02EE000303C302D90006037E"), + String::from("voltorb"), + ), + ( + String::from("0426001B02E20066000303D8000303C602FD021300060390"), + String::from("electrode"), + ), + ( + String::from("0432009F02E20066000303D8000303C602FD021300060390"), + String::from("electrode"), + ), + ( + String::from("042C0066000603A203DE000303C9030C00EA000303C6"), + String::from("exeggcute"), + ), + ( + String::from("042C0066000603A203DE0066000303C9030C00EA000303C302D9"), + String::from("exeggutor"), + ), + ( + String::from("042C0066000603A203FC00A8000303C9030C00EA000603870234"), + String::from("exeggutor"), + ), + ( + String::from("03C9030C00EA0006037B02100348"), + String::from("cubone"), + ), + ( + String::from("032A02A9020403180087000303D8"), + String::from("marowak"), + ), + ( + String::from("03330246020403180087000303D8"), + String::from("marowak"), + ), + ( + String::from("04050045000303C603330210034802DF0024"), + String::from("hitmonlee"), + ), + ( + String::from("04050045000303C60333014A034802DF0024"), + String::from("hitmonlee"), + ), + ( + String::from("04050045000303C60333021003480003036000840348"), + String::from("hitmonchan"), + ), + ( + String::from("02DF0045000303C90024000303BD00A5035A"), + String::from("lickitung"), + ), + ( + String::from("02DF0045000303C90045000303BD00A5035A"), + String::from("lickitung"), + ), + ( + String::from("02DF0045000303C90045000303C00108035A"), + String::from("lickitung"), + ), + ( + String::from("03D5015003ED0042035A"), + String::from("koffing"), + ), + ( + String::from("0315002703DB0042035A"), + String::from("weezing"), + ), + ( + String::from("02FD01A4041102D60348"), + String::from("rhyhorn"), + ), + ( + String::from("02FD01B00006038D01290348"), + String::from("rhydon"), + ), + ( + String::from("03600084034803F90024"), + String::from("chansey"), + ), + ( + String::from("03BA0084034800060366005D02E500A8"), + String::from("tangela"), + ), + ( + String::from("03BA018C034800060396005D02E500A8"), + String::from("tangela"), + ), + ( + String::from("03CC018C035A0006039900AB03FC000303D5014A0348"), + String::from("kangaskhan"), + ), + ( + String::from("041102DC03F90024"), + String::from("horsea"), + ), + ( + String::from("03F900240006039002F700A8"), + String::from("seadra"), + ), + ( + String::from("039F020A02EE0006038100210348"), + String::from("goldeen"), + ), + ( + String::from("03F90024000303C90042035A"), + String::from("seaking"), + ), + ( + String::from("03FC000303C3023A030C00EA"), + String::from("staryu"), + ), + ( + String::from("03FC000303C3025203270024"), + String::from("starmie"), + ), + ( + String::from("0327004803FC000303BD0231033301AD0336"), + String::from("mr.mime"), + ), + ( + String::from("03FC01B3036C0234"), + String::from("scyther"), + ), + ( + String::from("03630042035A000303D803FC"), + String::from("jynx"), + ), + ( + String::from("0426001B02E20066000303D8000303BD00A80006037500CC03DE"), + String::from("electabuzz"), + ), + ( + String::from("0432009F02E20066000303D8000303BD00A80006037500CC03DE"), + String::from("electabuzz"), + ), + ( + String::from("032A0087000603A203330255"), + String::from("magmar"), + ), + ( + String::from("03A50042034803FC0234"), + String::from("pinsir"), + ), + ( + String::from("03C3020D02FD012F03FC"), + String::from("tauros"), + ), + ( + String::from("03C30246021603FC"), + String::from("tauros"), + ), + ( + String::from("032A0087000603630045000303D50255000303B4"), + String::from("magikarp"), + ), + ( + String::from("039602A300A80006038D015003FC"), + String::from("gyarados"), + ), + ( + String::from("039602A300A80006038D021603FC"), + String::from("gyarados"), + ), + ( + String::from("02EB014D000303B402F700AB03FC"), + String::from("lapras"), + ), + ( + String::from("02E20087000303B402F700AB03FC"), + String::from("lapras"), + ), + ( + String::from("03810045000303C30213"), + String::from("ditto"), + ), + ( + String::from("0426002703E70024"), + String::from("eevee"), + ), + ( + String::from("03EA018F000303B102BE0015014A0348"), + String::from("vaporeon"), + ), + ( + String::from("03EA00A8000303B102BE000F00A50348"), + String::from("vaporeon"), + ), + ( + String::from("0366020A02EE000303B70015014A0348"), + String::from("jolteon"), + ), + ( + String::from("03F002E2029D0015014A0348"), + String::from("flareon"), + ), + ( + String::from("03B1020D02F100240006039F014A0348"), + String::from("porygon"), + ), + ( + String::from("03B1020D02F100240006039900A50348"), + String::from("porygon"), + ), + ( + String::from("043B0210032D00C6034501B0000303C6"), + String::from("omanyte"), + ), + ( + String::from("04380129032D00A5034501B0000303C6"), + String::from("omanyte"), + ), + ( + String::from("043B0210032D00CC03FC000303C30255"), + String::from("omastar"), + ), + ( + String::from("04380129032D00AB03FC000303C30255"), + String::from("omastar"), + ), + ( + String::from("03CF00C90006037800EA0006038D0213"), + String::from("kabuto"), + ), + ( + String::from("03D5012C0006037800EA000303C3014D000303B403FC"), + String::from("kabutops"), + ), + ( + String::from("03D5012C0006037500A8000303C3014D000303B403FC"), + String::from("kabutops"), + ), + ( + String::from("03D5012C0006037500A8000303C3015003FC"), + String::from("kabutops"), + ), + ( + String::from("042C02A90213000603840087000303D8000303BD00C002EE"), + String::from("aerodactyl"), + ), + ( + String::from("03FC034502D002E20087000303D803FC"), + String::from("snorlax"), + ), + ( + String::from("04380255000303B70045000303D200E703450213"), + String::from("articuno"), + ), + ( + String::from("03DE0087000303B40006038D015003FC"), + String::from("zapdos"), + ), + ( + String::from("03DE0087000303B40006038D021603FC"), + String::from("zapdos"), + ), + ( + String::from("0333020A02EE000303C602F4006903FC"), + String::from("moltres"), + ), + ( + String::from("039002F700A8000303B7002103390024"), + String::from("dratini"), + ), + ( + String::from("039002F400870006039900A5033C02B8"), + String::from("dragonair"), + ), + ( + String::from("039002F400870006039900A5034501B0000303C6"), + String::from("dragonite"), + ), + ( + String::from("0327030C00EA000303C000EA"), + String::from("mewtwo"), + ), + ( + String::from("0327030C00EA"), + String::from("mew"), + ), + ( + String::from("03C3014D000303AB00AB03EA000603630045000603A202DF0024000303AB00AB03F0"), + String::from("top-of-jigglypuff"), + ), + ( + String::from("03C302130006039900A8000303A50024"), + String::from("togepi"), + ), + ( + String::from("03C302130006039C010B000303A50024"), + String::from("togepi"), + ), + ( + String::from("03C30213000603930045000303A500090024"), + String::from("togepi"), + ), + ( + String::from("03B1014402DF001503180087000603A2"), + String::from("poliwag"), + ), + ( + String::from("03150024000303A50042034800060372005D02EE"), + String::from("weepinbell"), + ), + ( + String::from("03E70045000303D8000303C602F1002400060372005D02EE"), + String::from("victreebel"), + ), + ( + String::from("03BA0063033F00A8000303D200E102EE"), + String::from("tentacool"), + ), + ( + String::from("038700C9000603A2000303C602F100150213"), + String::from("dugtrio"), + ), + ( + String::from("03A50045000603630024"), + String::from("pidgey"), + ), + ( + String::from("038D02130006038A00DB0213"), + String::from("doduo"), + ), + ( + String::from("03A50045000603660213000303C30213"), + String::from("pidgeotto"), + ), + ( + String::from("03CF00C9000303D200E7033F00A8"), + String::from("kakuna"), + ), + ( + String::from("03BA00630348000303BD00A8000303D200E102EE"), + String::from("tentacool"), + ), + ( + String::from("03CC018C035A00060396008A03FC000303D5014A0348"), + String::from("kangaskhan"), + ), + ( + String::from("043B0210032D00AB03FC000303C30255"), + String::from("omastar"), + ), + ( + String::from("03CF00A80006037800EA000303C3014D000303B403FC"), + String::from("kabutops"), + ), + ( + String::from("036C0087000303C603FC02FD01B0000303C6"), + String::from("thats-right"), + ), + ( + String::from("036C0087000303C603FC0006039C010B00060390"), + String::from("thats-good"), + ), + ( + String::from("036C0087000303C3031B00C60348"), + String::from("that-one"), + ), + ( + String::from("036C008A03FC03F001AD0348"), + String::from("thats-fine"), + ), + ( + String::from("036C0087000303C603DE03F001AD0348"), + String::from("thats-fine"), + ), + ( + String::from("03CF021C0066000303D8000303C6"), + String::from("correct"), + ), + ( + String::from("03CF00A202F40066000303D8000303C6"), + String::from("correct"), + ), + ( + String::from("036F0042035A0006039F0213"), + String::from("bingo"), + ), + ( + String::from("03D5012302DF0045000303C6"), + String::from("call-it"), + ), + ( + String::from("02E2006903FC000303B402E2018F"), + String::from("lets-play"), + ), + ( + String::from("02FD0129035A"), + String::from("wrong"), + ), + ( + String::from("0372008700060390000303A50024000303CF00A80003036000EA"), + String::from("bad-pikachu"), + ), + ( + String::from("0327004803FC"), + String::from("miss"), + ), + ( + String::from("038D02100348000303C6000303D5012302DF0045000303C6"), + String::from("dont-call-it"), + ), + ( + String::from("041101F503FC"), + String::from("house"), + ), + ( + String::from("041102100336"), + String::from("home"), + ), + ( + String::from("03EA00A202F1004500060381000F00C60348"), + String::from("viridian"), + ), + ( + String::from("03EA00A202F1004500060381000F00C6034803F002C400AB03FC000303C6"), + String::from("viridian-forest"), + ), + ( + String::from("043B0213000303CF0234"), + String::from("ochre"), + ), + ( + String::from("043B0213000303CF0225031E010B0006039003DE"), + String::from("ochre-woods"), + ), + ( + String::from("043B0213000303CF023703ED004803FF0042035A0411020A02EE"), + String::from("ochre-fishing-hole"), + ), + ( + String::from("03FC000303B402F10042035A02DF002703F0"), + String::from("springleaf"), + ), + ( + String::from("03FC000303B402F10042035A02DF002703F003ED000F00C002EE00060390"), + String::from("springleaf-field"), + ), + ( + String::from("0438014402E500AB03EA01AD0348"), + String::from("olivine"), + ), + ( + String::from("0438014402E500AB03EA01AD034802E2018F000303D8"), + String::from("olivine-lake"), + ), + ( + String::from("0438014402E500AB03EA01AD034803ED004803FF0042035A0411020A02EE"), + String::from("olivine-fishing-hole"), + ), + ( + String::from("03D502130006037B012302EE000303C6"), + String::from("cobalt"), + ), + ( + String::from("03D502130006037B012302EE000303C301A702E500C6034800060390"), + String::from("cobalt-island"), + ), + ( + String::from("03D502130006037E03ED004803FF0042035A0411020A02EE"), + String::from("cobalt-fishing-hole"), + ), + ( + String::from("03D5021603FC000303C6"), + String::from("coast"), + ), + ( + String::from("03D502130006037B012302EE000303C6000303D5021603FC000303C6"), + String::from("cobalt-coast"), + ), + ( + String::from("03FC000303A80069040200C002EE000303C602F4018C03390042035A"), + String::from("special-training"), + ), + ( + String::from("03BD0231033F00A8000303B4"), + String::from("turnip"), + ), + ( + String::from("03BD02310348000303B4"), + String::from("turnip"), + ), + ( + String::from("03FC03150024000303C6000303AB00A8000303BA018F0006038D0213"), + String::from("sweet-potato"), + ), + ( + String::from("0411014D000303C603FC03150024000303C6000303AE010B000303BA018F0006038D0213"), + String::from("hot-sweet-potato"), + ), + ( + String::from("03D501470300000603900006037B02D9000603900006037B014D000303D803FC"), + String::from("cardboard-box"), + ), + ( + String::from("04080084034B00420348036C02B8"), + String::from("hang-in-there"), + ), + ( + String::from("03AE010202EE"), + String::from("pull"), + ), + ( + String::from("02F1001B02DF0045000303B700420348"), + String::from("reel-it-in"), + ), + ( + String::from("034501F2"), + String::from("now"), + ), + ( + String::from("03CC00870003035D0045000303C6"), + String::from("catch-it"), + ), + ( + String::from("03960066000303B70045000303C6"), + String::from("get-it"), + ), + ( + String::from("03AE010202DF0045000303C6"), + String::from("pull-it"), + ), + ( + String::from("03AE010202EE04110255000603870234"), + String::from("pull-harder"), + ), + ( + String::from("02E20066000303B70045000303C60006039F0213"), + String::from("let-it-go"), + ), + ( + String::from("02F1003C02DF002703F90045000303C6"), + String::from("release-it"), + ), + ( + String::from("02E500C6034800030360"), + String::from("lunch"), + ), + ( + String::from("03FC033C0087000303D8"), + String::from("snack"), + ), + ( + String::from("02E2006903F90024000303C6"), + String::from("lets-eat"), + ), + ( + String::from("03CF00C9000303B4000303CC018F000303D8"), + String::from("cupcake"), + ), + ( + String::from("042F019B00C6034800060387023703FC000303BA0084034800060390"), + String::from("i-understand"), + ), + ( + String::from("042F01B0000603930045000303B70045000303C6"), + String::from("i-get-it"), + ), + ( + String::from("0411032101B0"), + String::from("why?"), + ), + ( + String::from("041101F2000303CF00C60336"), + String::from("how-come?"), + ), + ( + String::from("039C010B0006037B01B0"), + String::from("good-bye"), + ), + ( + String::from("03BA018F000303D8000303CC02B8"), + String::from("take-care"), + ), + ( + String::from("042F019B009F02EE0327004803F9030C00EA"), + String::from("ill-miss-you"), + ), + ( + String::from("0438016502EE0327004803F9030C00EA"), + String::from("ill-miss-you"), + ), + ( + String::from("03FC000303C3014D000303B4036C0087000303C6"), + String::from("stop-that"), + ), + ( + String::from("03D503150045000303C6"), + String::from("quit"), + ), + ( + String::from("03CF00C9000303B70045000303C301F2000303C6"), + String::from("cut-it-out"), + ), + ( + String::from("03CF00A503330129034802E20066000303C603DE0006039F0213"), + String::from("c-mon-lets-go"), + ), + ( + String::from("02E20066000303C603DE0006039F0213"), + String::from("lets-go"), + ), + ( + String::from("031B0225012F03F0"), + String::from("we-re-off"), + ), + ( + String::from("03BA008700060393030902190045000303C6"), + String::from("tag-youre-it"), + ), + ( + String::from("03CF00C9000303B70045000303C301F2000303C6"), + String::from("cut-it-out"), + ), + ( + String::from("0411031B00A8000303C603FC02FD0129035A"), + String::from("whats-wrong?"), + ), + ( + String::from("0411031B00A8000303B7004803F90045000303C6"), + String::from("what-is-it?"), + ), + ( + String::from("03CF00C603330129034802E20066000303C603DE0006039F0213"), + String::from("c-mon-lets-go!"), + ), + ( + String::from("031502970006039F01F80042035A034501F2"), + String::from("were-going-now"), + ), + ( + String::from("02E20066000303C603FC000303600066000303C90045000303C301F2000303C6"), + String::from("lets-check-it-out"), + ), + ( + String::from("03F600C6033F02370402014D000303D8"), + String::from("thundershock"), + ), + ( + String::from("03F600C6033F02340006037B020A02EE000303C6"), + String::from("thunderbolt"), + ), + ( + String::from("043801290339030300420348"), + String::from("onion"), + ), + ( + String::from("03FC02DF0024000303B4000303C301B0000303C6"), + String::from("sleep-tight"), + ), + ( + String::from("03F90009030C00EA000303C000E7033302460213"), + String::from("see-you-tomorrow"), + ), + ( + String::from("03F90009030C00CF00420348036C00C6033302D603390042035A"), + String::from("see-you-in-the-morning"), + ), + ( + String::from("039F0213000303BD00C6033302460213"), + String::from("go-tomorrow"), + ), + ( + String::from("02FD014D000303D8"), + String::from("rock"), + ), + ( + String::from("03F9004803DE023703FC"), + String::from("scissors"), + ), + ( + String::from("03A8018F000303AB0234"), + String::from("paper"), + ), + ( + String::from("0381002A000303B10255000303C6"), + String::from("depart"), + ), + ( + String::from("02F10006038100EA03DE00030384002A000303B10255000303C6"), + String::from("reduced-depart"), + ), + ( + String::from("03D5012F035D0063034800030381002A000303B10255000303C6"), + String::from("caution-depart"), + ), + ( + String::from("02DF03FC03BD023A000603D8000303B700060381002A000303B10255000303C6"), + String::from("restricted-depart"), + ), + ( + String::from("03B1008A03FC0042035A"), + String::from("passing"), + ), + ( + String::from("03FC000303C3014D000303AB0042035A"), + String::from("stopping"), + ), + ( + String::from("031E02DC03390042035A"), + String::from("warning"), + ), + ( + String::from("03AB02FA021603F9000900060390"), + String::from("proceed"), + ), + ( + String::from("02F10006038100EA03DE00060390"), + String::from("reduced"), + ), + ( + String::from("03D5012F035D00630348"), + String::from("caution"), + ), + ( + String::from("02DF03FC03BD023A000603D8000303B700060390"), + String::from("restricted"), + ), + ( + String::from("042C0066000603A203FC000303AB021C005A03DE"), + String::from("express"), + ), + ( + String::from("02E50042032A002A000303C6"), + String::from("limit"), + ), + ( + String::from("03450213000602E50042032A002A000303C6"), + String::from("no-limit"), + ), + ( + String::from("03B7005A0348"), + String::from("ten"), + ), + ( + String::from("03E7002A03F6000303B700090348"), + String::from("fifteen"), + ), + ( + String::from("03C30318004B0339038A0024"), + String::from("twenty"), + ), + ( + String::from("03C30318004B0339038A002403EA019E03EA"), + String::from("twenty-five"), + ), + ( + String::from("036C02AC03BA0027"), + String::from("thirty"), + ), + ( + String::from("036C02AC03BA002703EA019E03EA"), + String::from("thirty-five"), + ), + ( + String::from("03EA02D6000603900048"), + String::from("forty"), + ), + ( + String::from("03EA02D600060390004803EA019E03EA"), + String::from("forty-five"), + ), + ( + String::from("03F3005A03F0000303B70042"), + String::from("fifty"), + ), + ( + String::from("03F3005A03F0000303B7004203EA019E03EA"), + String::from("fifty-five"), + ), + ( + String::from("03F9002A000303D803FC000303C00009"), + String::from("sixty"), + ), + ( + String::from("03F9002A000303D803FC000303C0000903EA019E03EA"), + String::from("sixty-five"), + ), + ( + String::from("03FC004B036C00630348000303B70009"), + String::from("seventy"), + ), + ( + String::from("03FC004B036C00630348000303B7000903EA019E03EA"), + String::from("seventy-five"), + ), + ( + String::from("042C018C03B70009"), + String::from("eighty"), + ), + ( + String::from("042C018C03B7000903EA019E03EA"), + String::from("eighty-five"), + ), + ( + String::from("034501A103480006038A0048"), + String::from("ninety"), + ), + ( + String::from("034501A103480006038A004803EA019E03EA"), + String::from("ninety-five"), + ), + ( + String::from("031B00C60348040B00BD0348038702F100060390"), + String::from("one-hundred"), + ), + ( + String::from("031B00C60348021303F001AD03E7"), + String::from("one-oh-five"), + ), + ( + String::from("031B00C60348000303B7005A0348"), + String::from("one-ten"), + ), + ( + String::from("031B00C60348000303E7002A03F6000303B700090348"), + String::from("one-fifteen"), + ), + ( + String::from("031B00C60348000303C303180348000303B70024"), + String::from("one-twenty"), + ), + ( + String::from("031B00C60348000303C303180348000303B7002403EA019E03EA"), + String::from("one-twenty-five"), + ), + ( + String::from("82B582E382C182CF82C282B582F182B182A4"), + String::from("depart"), + ), + ( + String::from("82B582E382C182CF82C282B082F182BB82AD"), + String::from("reduced-depart"), + ), + ( + String::from("82B582E382C182CF82C282BF82E382A482A2"), + String::from("caution-depart"), + ), + ( + String::from("82B582E382C182CF82C282AF82A282A982A2"), + String::from("restricted-depart"), + ), + ]); +} diff --git a/src/main.rs b/src/main.rs index 0a4bc05..0d8940f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -126,7 +126,7 @@ fn main() { eframe::run_native( "gopher64", options, - Box::new(|_cc| Ok(Box::new(ui::gui::GopherEguiApp::new()))), + Box::new(|cc| Ok(Box::new(ui::gui::GopherEguiApp::new(cc)))), ) .unwrap(); } diff --git a/src/ui.rs b/src/ui.rs index ab15778..9c657b2 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -4,6 +4,7 @@ pub mod gui; pub mod input; pub mod storage; pub mod video; +pub mod vru; pub struct Ui { pub controllers: [input::Controllers; 4], diff --git a/src/ui/config.rs b/src/ui/config.rs index 82839da..ff28747 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -16,6 +16,7 @@ pub struct Input { pub input_profile_binding: [String; 4], pub controller_assignment: [Option; 4], pub controller_enabled: [bool; 4], + pub emulate_vru: bool, } #[derive(serde::Serialize, serde::Deserialize)] pub struct Video { @@ -42,6 +43,7 @@ impl Config { controller_assignment: [None, None, None, None], input_profiles, controller_enabled: [true, false, false, false], + emulate_vru: false, }, video: Video { upscale: false }, } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index faa2c8a..eb99948 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -11,6 +11,11 @@ pub struct GopherEguiApp { input_profiles: Vec, controller_enabled: [bool; 4], upscale: bool, + emulate_vru: bool, + show_vru_dialog: bool, + vru_window_receiver: Option>>, + vru_word_notifier: Option>, + vru_word_list: Vec, } fn get_input_profiles(game_ui: &ui::Ui) -> Vec { @@ -33,7 +38,9 @@ fn get_controllers(game_ui: &ui::Ui) -> Vec { } impl GopherEguiApp { - pub fn new() -> GopherEguiApp { + pub fn new(cc: &eframe::CreationContext<'_>) -> GopherEguiApp { + add_japanese_font(&cc.egui_ctx); + let game_ui = ui::Ui::new(); let joystick_subsystem = game_ui.joystick_subsystem.as_ref().unwrap(); let num_joysticks = joystick_subsystem.num_joysticks().unwrap(); @@ -67,6 +74,11 @@ impl GopherEguiApp { input_profiles: get_input_profiles(&game_ui), controller_enabled: game_ui.config.input.controller_enabled, upscale: game_ui.config.video.upscale, + emulate_vru: game_ui.config.input.emulate_vru, + show_vru_dialog: false, + vru_window_receiver: None, + vru_word_notifier: None, + vru_word_list: Vec::new(), } } } @@ -77,6 +89,7 @@ fn save_config( selected_profile: [String; 4], controller_enabled: [bool; 4], upscale: bool, + emulate_vru: bool, ) { let joystick_subsystem = game_ui.joystick_subsystem.as_ref().unwrap(); for (pos, item) in selected_controller.iter().enumerate() { @@ -96,6 +109,7 @@ fn save_config( game_ui.config.input.controller_enabled = controller_enabled; game_ui.config.video.upscale = upscale; + game_ui.config.input.emulate_vru = emulate_vru; } impl Drop for GopherEguiApp { @@ -107,6 +121,7 @@ impl Drop for GopherEguiApp { self.selected_profile.clone(), self.controller_enabled, self.upscale, + self.emulate_vru, ); } } @@ -155,6 +170,24 @@ impl eframe::App for GopherEguiApp { let selected_profile = self.selected_profile.clone(); let controller_enabled = self.controller_enabled; let upscale = self.upscale; + let emulate_vru = self.emulate_vru; + + let (vru_window_notifier, vru_window_receiver): ( + std::sync::mpsc::Sender>, + std::sync::mpsc::Receiver>, + ) = std::sync::mpsc::channel(); + + let (vru_word_notifier, vru_word_receiver): ( + std::sync::mpsc::Sender, + std::sync::mpsc::Receiver, + ) = std::sync::mpsc::channel(); + + if emulate_vru { + self.vru_window_receiver = Some(vru_window_receiver); + self.vru_word_notifier = Some(vru_word_notifier); + } + + let gui_ctx = ctx.clone(); execute(async move { let file = task.await; @@ -174,7 +207,13 @@ impl eframe::App for GopherEguiApp { selected_profile, controller_enabled, upscale, + emulate_vru, ); + if emulate_vru { + device.vru.window_notifier = Some(vru_window_notifier); + device.vru.word_receiver = Some(vru_word_receiver); + device.vru.gui_ctx = Some(gui_ctx); + } device::run_game(std::path::Path::new(file.path()), &mut device, false); let _ = std::fs::remove_file(running_file.clone()); } @@ -194,7 +233,7 @@ impl eframe::App for GopherEguiApp { ui.add_space(32.0); ui.label("Controller Config:"); - egui::Grid::new("some_unique_id").show(ui, |ui| { + egui::Grid::new("controller_config").show(ui, |ui| { ui.label("Port"); ui.label("Enabled"); ui.label("Profile"); @@ -242,12 +281,82 @@ impl eframe::App for GopherEguiApp { }); ui.add_space(32.0); ui.checkbox(&mut self.upscale, "High-Res Graphics"); + ui.checkbox( + &mut self.emulate_vru, + "Emulate VRU (connects VRU to controller port 4)", + ); ui.add_space(32.0); ui.label(format!("Version: {}", env!("CARGO_PKG_VERSION"))); }); + + if self.emulate_vru && self.vru_window_receiver.is_some() { + let result = self.vru_window_receiver.as_ref().unwrap().try_recv(); + if result.is_ok() { + self.show_vru_dialog = true; + self.vru_word_list = result.unwrap(); + } + } + + if self.show_vru_dialog { + ctx.show_viewport_immediate( + egui::ViewportId::from_hash_of("vru_dialog"), + egui::ViewportBuilder::default() + .with_title("What would you like to say?") + .with_always_on_top(), + |ctx, class| { + assert!( + class == egui::ViewportClass::Immediate, + "This egui backend doesn't support multiple viewports" + ); + egui::CentralPanel::default().show(ctx, |ui| { + egui::Grid::new("vru_words").show(ui, |ui| { + for (i, v) in self.vru_word_list.iter().enumerate() { + if i % 5 == 0 { + ui.end_row(); + } + if ui.button((*v).to_string()).clicked() { + self.vru_word_notifier + .as_ref() + .unwrap() + .send(v.clone()) + .unwrap(); + self.show_vru_dialog = false; + } + } + }); + }); + + if ctx.input(|i| i.viewport().close_requested()) { + self.vru_word_notifier + .as_ref() + .unwrap() + .send(String::from("")) + .unwrap(); + self.show_vru_dialog = false; + } + }, + ); + } } } fn execute + Send + 'static>(f: F) { std::thread::spawn(move || futures::executor::block_on(f)); } + +fn add_japanese_font(ctx: &egui::Context) { + ctx.add_font(epaint::text::FontInsert::new( + "japanese_font", + egui::FontData::from_static(include_bytes!("../../data/NotoSansJP-Regular.ttf")), + vec![ + epaint::text::InsertFontFamily { + family: egui::FontFamily::Proportional, + priority: egui::epaint::text::FontPriority::Lowest, + }, + epaint::text::InsertFontFamily { + family: egui::FontFamily::Monospace, + priority: egui::epaint::text::FontPriority::Lowest, + }, + ], + )); +} diff --git a/src/ui/vru.rs b/src/ui/vru.rs new file mode 100644 index 0000000..5d44f9c --- /dev/null +++ b/src/ui/vru.rs @@ -0,0 +1,28 @@ +use eframe::egui; + +use crate::ui; + +pub fn prompt_for_match( + words: &[String], + window_notifier: &std::sync::mpsc::Sender>, + word_index_notifier: &std::sync::mpsc::Receiver, + gui_ctx: &egui::Context, +) -> u16 { + let mut dedup_words = words.to_owned(); + dedup_words.sort(); + dedup_words.dedup(); + window_notifier.send(dedup_words).unwrap(); + gui_ctx.request_repaint(); // this is so the window pops up right away + let mut result = word_index_notifier.try_recv(); + while result.is_err() { + result = word_index_notifier.try_recv(); + std::thread::sleep(std::time::Duration::from_secs_f64(1.0 / 60.0)); + ui::video::update_screen(); // so the OS doesn't complain about the game window being frozen + } + for (i, v) in words.iter().enumerate() { + if *v == *result.as_ref().unwrap() { + return i as u16; + } + } + 0x7FFF +} From 9a76bcd303b53cb67efa11c7cfe56fc598f4e937 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 9 Jan 2025 10:38:34 +0100 Subject: [PATCH 0167/1117] Bump to 0.1.15 (#116) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 0d6b99e..9a23574 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.14" +version = "0.1.15" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From a47801b9cb1f73c305ca99e9002a4ba855f7807d Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 9 Jan 2025 16:11:48 +0100 Subject: [PATCH 0168/1117] Minor changes to boot latest LibDragon ROMs (#117) --- src/device/pi.rs | 3 ++- src/device/rdram.rs | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/device/pi.rs b/src/device/pi.rs index dcbf518..f3dc713 100644 --- a/src/device/pi.rs +++ b/src/device/pi.rs @@ -13,7 +13,8 @@ const PI_BSD_DOM2_LAT_REG: u32 = 9; const PI_BSD_DOM2_PWD_REG: u32 = 10; const PI_BSD_DOM2_PGS_REG: u32 = 11; const PI_BSD_DOM2_RLS_REG: u32 = 12; -pub const PI_REGS_COUNT: u32 = 13; +//const UNKNOWN_REG: u32 = 13; //LibDragon +pub const PI_REGS_COUNT: u32 = 14; /* PI_STATUS - read */ const PI_STATUS_DMA_BUSY: u32 = 1 << 0; diff --git a/src/device/rdram.rs b/src/device/rdram.rs index 79a9418..83bb125 100644 --- a/src/device/rdram.rs +++ b/src/device/rdram.rs @@ -57,10 +57,11 @@ pub fn write_mem(device: &mut device::Device, address: u64, value: u32, mask: u3 pub fn read_regs( _device: &mut device::Device, - _address: u64, + address: u64, _access_size: device::memory::AccessSize, ) -> u32 { - panic!("rdram read reg"); + println!("Warning: read from RDRAM reg {:#x}", address); + 0 } pub fn write_regs(_device: &mut device::Device, _address: u64, _value: u32, _mask: u32) { From b2d2089d9590077627ec3407bce8a0f599ebc315 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 9 Jan 2025 18:39:39 +0100 Subject: [PATCH 0169/1117] Remove un-needed entry in Cargo.toml (#119) --- Cargo.toml | 1 - src/ui/gui.rs | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 9a23574..6606a68 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,6 @@ chrono = "0.4" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" eframe = "0.30" -epaint = "0.30" rfd = "0.15" sha2 = "0.10" rusttype = "0.9" diff --git a/src/ui/gui.rs b/src/ui/gui.rs index eb99948..e978371 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -345,15 +345,15 @@ fn execute + Send + 'static>(f: F) { } fn add_japanese_font(ctx: &egui::Context) { - ctx.add_font(epaint::text::FontInsert::new( + ctx.add_font(eframe::epaint::text::FontInsert::new( "japanese_font", egui::FontData::from_static(include_bytes!("../../data/NotoSansJP-Regular.ttf")), vec![ - epaint::text::InsertFontFamily { + eframe::epaint::text::InsertFontFamily { family: egui::FontFamily::Proportional, priority: egui::epaint::text::FontPriority::Lowest, }, - epaint::text::InsertFontFamily { + eframe::epaint::text::InsertFontFamily { family: egui::FontFamily::Monospace, priority: egui::epaint::text::FontPriority::Lowest, }, From c54356e6f4d29014ad11bb0f7901d2fcd873f06f Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 9 Jan 2025 21:10:03 +0100 Subject: [PATCH 0170/1117] Fix VRU demo encoding (#120) --- src/device/vru.rs | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/src/device/vru.rs b/src/device/vru.rs index 7bc14c6..5f738a0 100644 --- a/src/device/vru.rs +++ b/src/device/vru.rs @@ -117,21 +117,12 @@ pub fn process(device: &mut device::Device, channel: usize) { for i in 0..length { data.extend(device.vru.word_buffer[offset + i as usize].to_be_bytes()); } - if device.cart.rom[0x3E] == /* Japan */ 0x4A { - let (res, _enc, errors) = encoding_rs::SHIFT_JIS.decode(&data); - if errors { - panic!("Failed to decode Japanese word {:X?}", data); - } else { - device.vru.words.push(res.to_string()); - } + + let (res, _enc, errors) = encoding_rs::SHIFT_JIS.decode(&data); + if errors { + panic!("Failed to decode Japanese word {:X?}", data); } else { - let decoded: Result = - String::from_utf8(data); - if let Ok(result) = decoded { - device.vru.words.push(result) - } else { - panic!("Could not decode VRU word") - } + device.vru.words.push(res.to_string()); } } else { offset += 1; From a731b870da17787653a231810bf2b6799015953b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 10 Jan 2025 09:26:40 +0100 Subject: [PATCH 0171/1117] add portable mode (#122) * add portable mode * readme * more * more * more --- README.md | 4 ++++ src/device.rs | 13 ++++++++---- src/main.rs | 49 +++++++++++++++++++++++++++++++++++------- src/ui.rs | 7 ++---- src/ui/gui.rs | 54 +++++++++++++++++++++++++++++++---------------- src/ui/input.rs | 5 ++++- src/ui/storage.rs | 9 ++------ 7 files changed, 98 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index 3f35990..ac05753 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,10 @@ You can create you own mappings by running `./gopher64 --configure-input-profile In order to use a controller (for example, an Xbox controller), run `./gopher64 --list-controllers` to get a list of attached controllers, and then assign it by doing `./gopher64 --assign-controller --port 1` +## portable mode + +If you would like to keep all the game data in the same folder as executable, you just need to create a file called "portable.txt" in the same directory as the executable. + ## contributing I am very open to contributions! Please reach out to me via a GitHub issue, or via discord (loganmc10) before doing substantial work on a PR. diff --git a/src/device.rs b/src/device.rs index 2134ae3..c4cd5c2 100644 --- a/src/device.rs +++ b/src/device.rs @@ -36,7 +36,12 @@ pub mod unmapped; pub mod vi; pub mod vru; -pub fn run_game(file_path: &std::path::Path, device: &mut Device, fullscreen: bool) { +pub fn run_game( + file_path: &std::path::Path, + data_dir: std::path::PathBuf, + device: &mut Device, + fullscreen: bool, +) { let rom_contents = get_rom_contents(file_path); cart_rom::init(device, rom_contents); // cart needs to come before rdram @@ -59,7 +64,7 @@ pub fn run_game(file_path: &std::path::Path, device: &mut Device, fullscreen: bo vi::init(device); cpu::init(device); - ui::storage::init(&mut device.ui); + ui::storage::init(&mut device.ui, data_dir); ui::storage::load_saves(&mut device.ui); cart_rom::load_rom_save(device); @@ -166,7 +171,7 @@ pub struct Device { } impl Device { - pub fn new() -> Device { + pub fn new(config_dir: std::path::PathBuf) -> Device { let mut byte_swap: usize = 0; let test: [u8; 4] = [1, 2, 3, 4]; // if the host computer is little endian, that means the RDRAM will be stored as little endian @@ -175,7 +180,7 @@ impl Device { byte_swap = 3; } Device { - ui: ui::Ui::new(), + ui: ui::Ui::new(config_dir), byte_swap, cpu: cpu::Cpu { cop0: cop0::Cop0 { diff --git a/src/main.rs b/src/main.rs index 0d8940f..137ea65 100644 --- a/src/main.rs +++ b/src/main.rs @@ -54,18 +54,47 @@ struct Args { } fn main() { - let config_dir = dirs::config_dir().unwrap().join("gopher64"); - let cache_dir = dirs::cache_dir().unwrap().join("gopher64"); + let exe_path = std::env::current_exe().unwrap(); + let portable_dir = exe_path.parent(); + let portable = portable_dir.unwrap().join("portable.txt").exists(); + let config_dir; + let cache_dir; + let data_dir; + if portable { + config_dir = portable_dir.unwrap().join("portable_data").join("config"); + cache_dir = portable_dir.unwrap().join("portable_data").join("cache"); + data_dir = portable_dir.unwrap().join("portable_data").join("data"); + } else { + config_dir = dirs::config_dir().unwrap().join("gopher64"); + cache_dir = dirs::cache_dir().unwrap().join("gopher64"); + data_dir = dirs::data_dir().unwrap().join("gopher64"); + }; - let _ = std::fs::create_dir_all(config_dir.clone()); - let _ = std::fs::create_dir_all(cache_dir.clone()); - let _ = std::fs::remove_file(cache_dir.clone().join("game_running")); + let mut result = std::fs::create_dir_all(config_dir.clone()); + if result.is_err() { + panic!("could not create config dir: {}", result.err().unwrap()) + } + result = std::fs::create_dir_all(cache_dir.clone()); + if result.is_err() { + panic!("could not create cache dir: {}", result.err().unwrap()) + } + result = std::fs::create_dir_all(data_dir.clone().join("saves")); + if result.is_err() { + panic!("could not create data dir: {}", result.err().unwrap()) + } + let running_file = cache_dir.join("game_running"); + if running_file.exists() { + result = std::fs::remove_file(running_file); + if result.is_err() { + panic!("could not remove running file: {}", result.err().unwrap()) + } + } let args = Args::parse(); let args_as_strings: Vec = std::env::args().collect(); let args_count = args_as_strings.len(); if args_count > 1 { - let mut device = device::Device::new(); + let mut device = device::Device::new(config_dir); if args.clear_input_bindings { ui::input::clear_bindings(&mut device.ui); @@ -116,7 +145,7 @@ fn main() { if args.game.is_some() { let file_path = std::path::Path::new(args.game.as_ref().unwrap()); - device::run_game(file_path, &mut device, args.fullscreen); + device::run_game(file_path, data_dir, &mut device, args.fullscreen); } } else { let options = eframe::NativeOptions { @@ -126,7 +155,11 @@ fn main() { eframe::run_native( "gopher64", options, - Box::new(|cc| Ok(Box::new(ui::gui::GopherEguiApp::new(cc)))), + Box::new(|cc| { + Ok(Box::new(ui::gui::GopherEguiApp::new( + cc, config_dir, cache_dir, data_dir, + ))) + }), ) .unwrap(); } diff --git a/src/ui.rs b/src/ui.rs index 9c657b2..79aba8f 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -37,17 +37,14 @@ fn write_config(ui: &Ui) { } impl Ui { - pub fn new() -> Ui { + pub fn new(config_dir: std::path::PathBuf) -> Ui { let sdl_context = sdl2::init().unwrap(); let video_subsystem = sdl_context.video().unwrap(); let audio_subsystem = sdl_context.audio().unwrap(); let joystick_subsystem = sdl_context.joystick().unwrap(); let controller_subsystem = sdl_context.game_controller().unwrap(); - let config_file_path = dirs::config_dir() - .unwrap() - .join("gopher64") - .join("config.json"); + let config_file_path = config_dir.join("config.json"); let config_file = std::fs::read(config_file_path.clone()); let mut config_map = config::Config::new(); if config_file.is_ok() { diff --git a/src/ui/gui.rs b/src/ui/gui.rs index e978371..58f9b7a 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -3,6 +3,9 @@ use crate::ui; use eframe::egui; pub struct GopherEguiApp { + config_dir: std::path::PathBuf, + cache_dir: std::path::PathBuf, + data_dir: std::path::PathBuf, configure_profile: bool, profile_name: String, controllers: Vec, @@ -38,10 +41,14 @@ fn get_controllers(game_ui: &ui::Ui) -> Vec { } impl GopherEguiApp { - pub fn new(cc: &eframe::CreationContext<'_>) -> GopherEguiApp { + pub fn new( + cc: &eframe::CreationContext<'_>, + config_dir: std::path::PathBuf, + cache_dir: std::path::PathBuf, + data_dir: std::path::PathBuf, + ) -> GopherEguiApp { add_japanese_font(&cc.egui_ctx); - - let game_ui = ui::Ui::new(); + let game_ui = ui::Ui::new(config_dir.clone()); let joystick_subsystem = game_ui.joystick_subsystem.as_ref().unwrap(); let num_joysticks = joystick_subsystem.num_joysticks().unwrap(); let mut guids: Vec = vec![]; @@ -66,6 +73,9 @@ impl GopherEguiApp { } } GopherEguiApp { + cache_dir: cache_dir.clone(), + config_dir: config_dir.clone(), + data_dir: data_dir.clone(), configure_profile: false, profile_name: "".to_string(), selected_profile: game_ui.config.input.input_profile_binding.clone(), @@ -114,7 +124,7 @@ fn save_config( impl Drop for GopherEguiApp { fn drop(&mut self) { - let mut game_ui = ui::Ui::new(); + let mut game_ui = ui::Ui::new(self.config_dir.clone()); save_config( &mut game_ui, self.selected_controller, @@ -140,8 +150,9 @@ impl eframe::App for GopherEguiApp { ui.horizontal(|ui| { if ui.button("Configure Profile").clicked() { let profile_name = self.profile_name.clone(); + let config_dir = self.config_dir.clone(); execute(async { - let mut game_ui = ui::Ui::new(); + let mut game_ui = ui::Ui::new(config_dir); ui::input::configure_input_profile(&mut game_ui, profile_name); }); self.configure_profile = false; @@ -171,6 +182,9 @@ impl eframe::App for GopherEguiApp { let controller_enabled = self.controller_enabled; let upscale = self.upscale; let emulate_vru = self.emulate_vru; + let config_dir = self.config_dir.clone(); + let cache_dir = self.cache_dir.clone(); + let data_dir = self.data_dir.clone(); let (vru_window_notifier, vru_window_receiver): ( std::sync::mpsc::Sender>, @@ -192,15 +206,15 @@ impl eframe::App for GopherEguiApp { let file = task.await; if let Some(file) = file { - let running_file = dirs::cache_dir() - .unwrap() - .join("gopher64") - .join("game_running"); + let running_file = cache_dir.join("game_running"); if running_file.exists() { return; } - let _ = std::fs::File::create(running_file.clone()); - let mut device = device::Device::new(); + let result = std::fs::File::create(running_file.clone()); + if result.is_err() { + panic!("could not create running file: {}", result.err().unwrap()) + } + let mut device = device::Device::new(config_dir); save_config( &mut device.ui, selected_controller, @@ -214,18 +228,22 @@ impl eframe::App for GopherEguiApp { device.vru.word_receiver = Some(vru_word_receiver); device.vru.gui_ctx = Some(gui_ctx); } - device::run_game(std::path::Path::new(file.path()), &mut device, false); - let _ = std::fs::remove_file(running_file.clone()); + device::run_game( + std::path::Path::new(file.path()), + data_dir, + &mut device, + false, + ); + let result = std::fs::remove_file(running_file.clone()); + if result.is_err() { + panic!("could not remove running file: {}", result.err().unwrap()) + } } }); } if ui.button("Configure Input Profile").clicked() { - let running_file = dirs::cache_dir() - .unwrap() - .join("gopher64") - .join("game_running"); - if running_file.exists() { + if self.cache_dir.join("game_running").exists() { return; } self.configure_profile = true; diff --git a/src/ui/input.rs b/src/ui/input.rs index 173b057..b17879b 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -541,7 +541,10 @@ pub fn init(ui: &mut ui::Ui) { .unwrap() .open(joystick_index); if joystick_result.is_err() { - println!("could not connect joystick") + println!( + "could not connect joystick: {}", + joystick_result.err().unwrap() + ) } else { ui.controllers[i].joystick = Some(joystick_result.unwrap()); } diff --git a/src/ui/storage.rs b/src/ui/storage.rs index f708230..fadb2ca 100644 --- a/src/ui/storage.rs +++ b/src/ui/storage.rs @@ -86,16 +86,11 @@ pub fn get_save_type(game_id: &str) -> Vec { } } -pub fn init(ui: &mut ui::Ui) { +pub fn init(ui: &mut ui::Ui, data_dir: std::path::PathBuf) { let id = ui.game_id.as_str(); ui.save_type = get_save_type(id); - let base_path = dirs::data_dir().unwrap().join("gopher64").join("saves"); - - let result = std::fs::create_dir_all(base_path.clone()); - if result.is_err() { - panic!("could not create save dir") - } + let base_path = data_dir.join("saves"); ui.paths.eep_file_path.clone_from(&base_path); ui.paths From e71d5a1b2dfd7fcd3f5b36fbbaf43cb047519c32 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 10 Jan 2025 11:16:09 +0100 Subject: [PATCH 0172/1117] add build flags for aarch64 (#123) --- .cargo/config.toml | 3 +++ Cargo.toml | 2 +- build.rs | 25 ++++++++++++++++--------- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 5135434..40eddf6 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,2 +1,5 @@ [target.'cfg(target_arch = "x86_64")'] rustflags = ["-C", "target-cpu=x86-64-v3"] + +[target.'cfg(target_arch = "aarch64")'] +rustflags = ["-C", "target-cpu=cortex-a76"] diff --git a/Cargo.toml b/Cargo.toml index 6606a68..b62d9fb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,7 +30,7 @@ features = ["static-link","bundled"] [build-dependencies] winres = "0.1" -cc = { version = "1.0", features = ["parallel"] } +cc = { version = "1.2", features = ["parallel"] } [profile.release] lto = true diff --git a/build.rs b/build.rs index a374871..70a2e6e 100644 --- a/build.rs +++ b/build.rs @@ -52,11 +52,15 @@ fn main() { .include("parallel-rdp/parallel-rdp-standalone/util") .includes(std::env::var("DEP_SDL2_INCLUDE")); - #[cfg(target_os = "windows")] - { - #[cfg(target_arch = "x86_64")] - { + let os = std::env::var("CARGO_CFG_TARGET_OS").unwrap(); + let arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap(); + if os == "windows" { + if arch == "x86_64" { build.flag("/arch:AVX2"); + } else if arch == "aarch64" { + build.flag("/arch:armv8.2"); + } else { + panic!("unknown arch") } build.flag("-DVK_USE_PLATFORM_WIN32_KHR"); @@ -64,13 +68,16 @@ fn main() { .set_icon("data/icon.ico") .compile() .unwrap(); - } - #[cfg(any(target_os = "linux", target_os = "macos"))] - { - #[cfg(target_arch = "x86_64")] - { + } else if os == "linux" || os == "macos" { + if arch == "x86_64" { build.flag("-march=x86-64-v3"); + } else if arch == "aarch64" { + build.flag("-march=armv8.2-a"); + } else { + panic!("unknown arch") } + } else { + panic!("unknown OS") } build.compile("parallel-rdp"); From 9a3a56d0c62c3aefbb03f138dc9f9da6aa42476e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 11 Jan 2025 14:34:16 +0100 Subject: [PATCH 0173/1117] RSP cleanup (#124) --- src/device/rsp_su_instructions.rs | 36 +++++++++---------- src/device/rsp_vu_instructions.rs | 57 +++++++++++++------------------ 2 files changed, 41 insertions(+), 52 deletions(-) diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index 64b95e2..5671db8 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -39,7 +39,7 @@ pub fn sign_extend_7bit_offset(offset: u8, shift_amount: u32) -> u32 { (((soffset) as i32) as u32) << shift_amount } -pub fn modify_vpr_byte(vpr: &mut u128, value: u8, element: u8) { +pub fn modify_vpr_byte(vpr: &mut u128, element: u8, value: u8) { let pos = 15 - (element & 15); let mask = 0xFF << (pos * 8); *vpr &= !mask; @@ -51,7 +51,7 @@ pub fn get_vpr_byte(vpr: u128, element: u8) -> u8 { (vpr >> (pos * 8)) as u8 } -pub fn modify_vpr_element(vpr: &mut u128, value: u16, element: u8) { +pub fn modify_vpr_element(vpr: &mut u128, element: u8, value: u16) { let pos = 7 - (element & 7); let mask = 0xFFFF << (pos * 16); *vpr &= !mask; @@ -522,14 +522,14 @@ pub fn cfc2(device: &mut device::Device, opcode: u32) { pub fn mtc2(device: &mut device::Device, opcode: u32) { modify_vpr_byte( &mut device.rsp.cpu.vpr[rd(opcode) as usize], - (device.rsp.cpu.gpr[rt(opcode) as usize] >> 8) as u8, velement(opcode), + (device.rsp.cpu.gpr[rt(opcode) as usize] >> 8) as u8, ); if velement(opcode) != 15 { modify_vpr_byte( &mut device.rsp.cpu.vpr[rd(opcode) as usize], - device.rsp.cpu.gpr[rt(opcode) as usize] as u8, velement(opcode) + 1, + device.rsp.cpu.gpr[rt(opcode) as usize] as u8, ); } } @@ -591,8 +591,8 @@ pub fn lbv(device: &mut device::Device, opcode: u32) { let element = velement(opcode); modify_vpr_byte( &mut device.rsp.cpu.vpr[rt(opcode) as usize], - device.rsp.mem[(address & 0xFFF) as usize], element, + device.rsp.mem[(address & 0xFFF) as usize], ); } @@ -605,8 +605,8 @@ pub fn lsv(device: &mut device::Device, opcode: u32) { while element < end { modify_vpr_byte( &mut device.rsp.cpu.vpr[rt(opcode) as usize], - device.rsp.mem[(address & 0xFFF) as usize], element, + device.rsp.mem[(address & 0xFFF) as usize], ); address += 1; element += 1; @@ -622,8 +622,8 @@ pub fn llv(device: &mut device::Device, opcode: u32) { while element < end { modify_vpr_byte( &mut device.rsp.cpu.vpr[rt(opcode) as usize], - device.rsp.mem[(address & 0xFFF) as usize], element, + device.rsp.mem[(address & 0xFFF) as usize], ); address += 1; element += 1; @@ -639,8 +639,8 @@ pub fn ldv(device: &mut device::Device, opcode: u32) { while element < end { modify_vpr_byte( &mut device.rsp.cpu.vpr[rt(opcode) as usize], - device.rsp.mem[(address & 0xFFF) as usize], element, + device.rsp.mem[(address & 0xFFF) as usize], ); address += 1; element += 1; @@ -656,8 +656,8 @@ pub fn lqv(device: &mut device::Device, opcode: u32) { while element < end { modify_vpr_byte( &mut device.rsp.cpu.vpr[rt(opcode) as usize], - device.rsp.mem[(address & 0xFFF) as usize], element, + device.rsp.mem[(address & 0xFFF) as usize], ); address += 1; element += 1; @@ -673,8 +673,8 @@ pub fn lrv(device: &mut device::Device, opcode: u32) { while element < 16 { modify_vpr_byte( &mut device.rsp.cpu.vpr[rt(opcode) as usize], - device.rsp.mem[(address & 0xFFF) as usize], element, + device.rsp.mem[(address & 0xFFF) as usize], ); address += 1; element += 1; @@ -691,10 +691,10 @@ pub fn lpv(device: &mut device::Device, opcode: u32) { while offset < 8 { modify_vpr_element( &mut device.rsp.cpu.vpr[rt(opcode) as usize], + offset, (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(offset)) & 15) as u32)) & 0xFFF) as usize] as u16) << 8, - offset, ); offset += 1; } @@ -710,10 +710,10 @@ pub fn luv(device: &mut device::Device, opcode: u32) { while offset < 8 { modify_vpr_element( &mut device.rsp.cpu.vpr[rt(opcode) as usize], + offset, (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(offset)) & 15) as u32)) & 0xFFF) as usize] as u16) << 7, - offset, ); offset += 1; } @@ -729,10 +729,10 @@ pub fn lhv(device: &mut device::Device, opcode: u32) { while offset < 8 { modify_vpr_element( &mut device.rsp.cpu.vpr[rt(opcode) as usize], + offset, (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(offset * 2)) & 15) as u32)) & 0xFFF) as usize] as u16) << 7, - offset, ); offset += 1; } @@ -751,25 +751,25 @@ pub fn lfv(device: &mut device::Device, opcode: u32) { while offset < 4 { modify_vpr_element( &mut tmp, + offset, (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(offset * 4)) & 15) as u32)) & 0xFFF) as usize] as u16) << 7, - offset, ); modify_vpr_element( &mut tmp, + offset + 4, (device.rsp.mem[((address .wrapping_add(((index.wrapping_add(offset * 4).wrapping_add(8)) & 15) as u32)) & 0xFFF) as usize] as u16) << 7, - offset + 4, ); offset += 1; } offset = start; while offset < end { let value = get_vpr_byte(tmp, offset); - modify_vpr_byte(&mut device.rsp.cpu.vpr[rt(opcode) as usize], value, offset); + modify_vpr_byte(&mut device.rsp.cpu.vpr[rt(opcode) as usize], offset, value); offset += 1; } } @@ -788,8 +788,8 @@ pub fn ltv(device: &mut device::Device, opcode: u32) { while i < 8 { modify_vpr_byte( &mut device.rsp.cpu.vpr[(vtbase + vtoff) as usize], - device.rsp.mem[(address & 0xFFF) as usize], i * 2, + device.rsp.mem[(address & 0xFFF) as usize], ); address += 1; if address == begin + 16 { @@ -797,8 +797,8 @@ pub fn ltv(device: &mut device::Device, opcode: u32) { } modify_vpr_byte( &mut device.rsp.cpu.vpr[(vtbase + vtoff) as usize], - device.rsp.mem[(address & 0xFFF) as usize], i * 2 + 1, + device.rsp.mem[(address & 0xFFF) as usize], ); address += 1; if address == begin + 16 { diff --git a/src/device/rsp_vu_instructions.rs b/src/device/rsp_vu_instructions.rs index 214456c..3108cb0 100644 --- a/src/device/rsp_vu_instructions.rs +++ b/src/device/rsp_vu_instructions.rs @@ -1,4 +1,5 @@ use crate::device; +use crate::device::rsp_su_instructions::{get_vpr_element, modify_vpr_element}; use std::arch::x86_64::*; pub fn vt(opcode: u32) -> u32 { @@ -58,18 +59,6 @@ pub fn s_clip(x: i64, bits: u32) -> i64 { ((((x as u64) & m) ^ b).wrapping_sub(b)) as i64 } -pub fn modify_vpr_element(vpr: &mut u128, value: u16, element: u8) { - let pos = 7 - (element & 7); - let mask = 0xFFFF << (pos * 16); - *vpr &= !mask; - *vpr |= (value as u128) << (pos * 16); -} - -pub fn get_vpr_element(vpr: u128, element: u8) -> u16 { - let pos = 7 - (element & 7); - (vpr >> (pos * 16)) as u16 -} - pub fn vte(device: &device::Device, vt: u32, index: usize) -> __m128i { unsafe { _mm_shuffle_epi8( @@ -195,13 +184,13 @@ pub fn vrndp(device: &mut device::Device, opcode: u32) { if acc >= 0 { acc = s_clip(acc + (product as i64), 48) } - modify_vpr_element(acch, (acc >> 32) as u16, n); - modify_vpr_element(accm, (acc >> 16) as u16, n); - modify_vpr_element(accl, acc as u16, n); + modify_vpr_element(acch, n, (acc >> 32) as u16); + modify_vpr_element(accm, n, (acc >> 16) as u16); + modify_vpr_element(accl, n, acc as u16); modify_vpr_element( &mut device.rsp.cpu.vpr[vd(opcode) as usize], - clamp_signed_64(acc >> 16) as u16, n, + clamp_signed_64(acc >> 16) as u16, ); n += 1; @@ -228,13 +217,13 @@ pub fn vmulq(device: &mut device::Device, opcode: u32) { if product < 0 { product += 31; } - modify_vpr_element(acch, (product >> 16) as u16, n); - modify_vpr_element(accm, (product) as u16, n); - modify_vpr_element(accl, 0, n); + modify_vpr_element(acch, n, (product >> 16) as u16); + modify_vpr_element(accm, n, (product) as u16); + modify_vpr_element(accl, n, 0); modify_vpr_element( &mut device.rsp.cpu.vpr[vd(opcode) as usize], - (clamp_signed_32(product >> 1) & !15) as u16, n, + (clamp_signed_32(product >> 1) & !15) as u16, ); n += 1; } @@ -458,13 +447,13 @@ pub fn vrndn(device: &mut device::Device, opcode: u32) { if acc < 0 { acc = s_clip(acc + (product as i64), 48) } - modify_vpr_element(acch, (acc >> 32) as u16, n); - modify_vpr_element(accm, (acc >> 16) as u16, n); - modify_vpr_element(accl, acc as u16, n); + modify_vpr_element(acch, n, (acc >> 32) as u16); + modify_vpr_element(accm, n, (acc >> 16) as u16); + modify_vpr_element(accl, n, acc as u16); modify_vpr_element( &mut device.rsp.cpu.vpr[vd(opcode) as usize], - clamp_signed_64(acc >> 16) as u16, n, + clamp_signed_64(acc >> 16) as u16, ); n += 1; @@ -484,12 +473,12 @@ pub fn vmacq(device: &mut device::Device, opcode: u32) { } else if product >= 32 && (product & (1 << 5)) == 0 { product -= 32 } - modify_vpr_element(acch, (product >> 16) as u16, n); - modify_vpr_element(accm, (product) as u16, n); + modify_vpr_element(acch, n, (product >> 16) as u16); + modify_vpr_element(accm, n, (product) as u16); modify_vpr_element( &mut device.rsp.cpu.vpr[vd(opcode) as usize], - (clamp_signed_32(product >> 1) & !15) as u16, n, + (clamp_signed_32(product >> 1) & !15) as u16, ); n += 1; } @@ -1266,8 +1255,8 @@ pub fn vrcp(device: &mut device::Device, opcode: u32) { device.rsp.cpu.accl = vte; modify_vpr_element( &mut device.rsp.cpu.vpr[vd(opcode) as usize], - result as u16, de(opcode) as u8, + result as u16, ); } @@ -1302,8 +1291,8 @@ pub fn vrcpl(device: &mut device::Device, opcode: u32) { device.rsp.cpu.accl = vte; modify_vpr_element( &mut device.rsp.cpu.vpr[vd(opcode) as usize], - result as u16, de(opcode) as u8, + result as u16, ); } @@ -1316,8 +1305,8 @@ pub fn vrcph(device: &mut device::Device, opcode: u32) { get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16; modify_vpr_element( &mut device.rsp.cpu.vpr[vd(opcode) as usize], - device.rsp.cpu.divout as u16, de(opcode) as u8, + device.rsp.cpu.divout as u16, ); } @@ -1329,8 +1318,8 @@ pub fn vmov(device: &mut device::Device, opcode: u32) { ); modify_vpr_element( &mut device.rsp.cpu.vpr[vd(opcode) as usize], - value, de(opcode) as u8, + value, ); device.rsp.cpu.accl = vte; } @@ -1362,8 +1351,8 @@ pub fn vrsq(device: &mut device::Device, opcode: u32) { device.rsp.cpu.accl = vte; modify_vpr_element( &mut device.rsp.cpu.vpr[vd(opcode) as usize], - result as u16, de(opcode) as u8, + result as u16, ); } @@ -1399,8 +1388,8 @@ pub fn vrsql(device: &mut device::Device, opcode: u32) { device.rsp.cpu.accl = vte; modify_vpr_element( &mut device.rsp.cpu.vpr[vd(opcode) as usize], - result as u16, de(opcode) as u8, + result as u16, ); } @@ -1413,8 +1402,8 @@ pub fn vrsqh(device: &mut device::Device, opcode: u32) { get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16; modify_vpr_element( &mut device.rsp.cpu.vpr[vd(opcode) as usize], - device.rsp.cpu.divout as u16, de(opcode) as u8, + device.rsp.cpu.divout as u16, ); } From 90c9bfbf09b2f9cc1759ed779869d585ce13a6ca Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 11 Jan 2025 14:46:13 +0100 Subject: [PATCH 0174/1117] More RSP Cleanup (#125) --- src/device/rsp_vu_instructions.rs | 35 ++++++------------------------- 1 file changed, 6 insertions(+), 29 deletions(-) diff --git a/src/device/rsp_vu_instructions.rs b/src/device/rsp_vu_instructions.rs index 3108cb0..948a797 100644 --- a/src/device/rsp_vu_instructions.rs +++ b/src/device/rsp_vu_instructions.rs @@ -23,34 +23,11 @@ pub fn de(opcode: u32) -> u32 { } pub fn clamp_signed_32(value: i32) -> i16 { - if value < -32768 { - return -32768; - } - if value > 32767 { - return 32767; - } - value as i16 + return value.clamp(-32768, 32767) as i16; } pub fn clamp_signed_64(value: i64) -> i16 { - if value < -32768 { - return -32768; - } - if value > 32767 { - return 32767; - } - value as i16 -} - -pub fn count_leading_zeros(value: u32) -> u32 { - let mut index = 31; - while index >= 0 { - if (value >> index) & 1 != 0 { - break; - } - index -= 1; - } - (31 - index) as u32 + return value.clamp(-32768, 32767) as i16; } pub fn s_clip(x: i64, bits: u32) -> i64 { @@ -1244,7 +1221,7 @@ pub fn vrcp(device: &mut device::Device, opcode: u32) { } else if input == -32768 { result = 0xffff0000 } else { - let shift = count_leading_zeros(data as u32); + let shift = (data as u32).leading_zeros(); let index = (((data as u64) << shift) & 0x7fc00000) >> 22; result = device.rsp.cpu.reciprocals[index as usize] as u32; result = (0x10000 | result) << 14; @@ -1280,7 +1257,7 @@ pub fn vrcpl(device: &mut device::Device, opcode: u32) { } else if input == -32768 { result = 0xffff0000 } else { - let shift = count_leading_zeros(data as u32); + let shift = (data as u32).leading_zeros(); let index = (((data as u64) << shift) & 0x7fc00000) >> 22; result = device.rsp.cpu.reciprocals[index as usize] as u32; result = (0x10000 | result) << 14; @@ -1339,7 +1316,7 @@ pub fn vrsq(device: &mut device::Device, opcode: u32) { } else if input == -32768 { result = 0xffff0000 } else { - let shift = count_leading_zeros(data as u32); + let shift = (data as u32).leading_zeros(); let index = (((data as u64) << shift) & 0x7fc00000) as u32 >> 22; result = (device.rsp.cpu.inverse_square_roots[((index & 0x1fe) | (shift & 1)) as usize]) as u32; @@ -1376,7 +1353,7 @@ pub fn vrsql(device: &mut device::Device, opcode: u32) { } else if input == -32768 { result = 0xffff0000 } else { - let shift = count_leading_zeros(data as u32); + let shift = (data as u32).leading_zeros(); let index = (((data as u64) << shift) & 0x7fc00000) as u32 >> 22; result = (device.rsp.cpu.inverse_square_roots[((index & 0x1fe) | (shift & 1)) as usize]) as u32; From 63b8b79dd7e096b8c5bc7a051c50c2f927c56d48 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 11 Jan 2025 14:48:57 +0100 Subject: [PATCH 0175/1117] More RSP cleanup --- src/device/rsp_su_instructions.rs | 31 +++++++++---------------------- src/device/rsp_vu_instructions.rs | 22 ++++++---------------- 2 files changed, 15 insertions(+), 38 deletions(-) diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index 5671db8..12eaf2a 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -508,7 +508,7 @@ pub fn cfc2(device: &mut device::Device, opcode: u32) { lo = &mut device.rsp.cpu.vce; } _ => { - panic!("unknown ctc2") + panic!("unknown cfc2") } } @@ -687,8 +687,7 @@ pub fn lpv(device: &mut device::Device, opcode: u32) { let index = ((address & 7) as u8).wrapping_sub(velement(opcode)); address &= !7; - let mut offset: u8 = 0; - while offset < 8 { + for offset in 0..8 { modify_vpr_element( &mut device.rsp.cpu.vpr[rt(opcode) as usize], offset, @@ -696,7 +695,6 @@ pub fn lpv(device: &mut device::Device, opcode: u32) { & 0xFFF) as usize] as u16) << 8, ); - offset += 1; } } @@ -706,8 +704,7 @@ pub fn luv(device: &mut device::Device, opcode: u32) { let index = ((address & 7) as u8).wrapping_sub(velement(opcode)); address &= !7; - let mut offset: u8 = 0; - while offset < 8 { + for offset in 0..8 { modify_vpr_element( &mut device.rsp.cpu.vpr[rt(opcode) as usize], offset, @@ -715,7 +712,6 @@ pub fn luv(device: &mut device::Device, opcode: u32) { & 0xFFF) as usize] as u16) << 7, ); - offset += 1; } } @@ -725,8 +721,7 @@ pub fn lhv(device: &mut device::Device, opcode: u32) { let index = ((address & 7) as u8).wrapping_sub(velement(opcode)); address &= !7; - let mut offset: u8 = 0; - while offset < 8 { + for offset in 0..8 { modify_vpr_element( &mut device.rsp.cpu.vpr[rt(opcode) as usize], offset, @@ -734,7 +729,6 @@ pub fn lhv(device: &mut device::Device, opcode: u32) { & 0xFFF) as usize] as u16) << 7, ); - offset += 1; } } @@ -784,8 +778,7 @@ pub fn ltv(device: &mut device::Device, opcode: u32) { address = begin + (((velement(opcode)) as u32 + (address & 8)) & 15); let vtbase = rt(opcode) & !7; let mut vtoff = (velement(opcode)) as u32 >> 1; - let mut i = 0; - while i < 8 { + for i in 0..8 { modify_vpr_byte( &mut device.rsp.cpu.vpr[(vtbase + vtoff) as usize], i * 2, @@ -805,7 +798,6 @@ pub fn ltv(device: &mut device::Device, opcode: u32) { address = begin } vtoff = (vtoff + 1) & 7; - i += 1; } } @@ -934,13 +926,11 @@ pub fn shv(device: &mut device::Device, opcode: u32) { let element = velement(opcode); let index = (address & 7) as u8; address &= !7; - let mut offset = 0; - while offset < 8 { + for offset in 0..8 { let byte_val = element + offset * 2; let value = (get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], byte_val) << 1) | (get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], byte_val + 1) >> 7); device.rsp.mem[((address + ((index + offset * 2) & 15) as u32) & 0xFFF) as usize] = value; - offset += 1; } } @@ -949,8 +939,7 @@ pub fn sfv(device: &mut device::Device, opcode: u32) { .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 4)); let base = address & 7; address &= !7; - let element = velement(opcode); - let elements = match element { + let elements = match velement(opcode) { 0 | 15 => [0, 1, 2, 3], 1 => [6, 7, 4, 5], 4 => [1, 2, 3, 0], @@ -967,12 +956,10 @@ pub fn sfv(device: &mut device::Device, opcode: u32) { } }; let mut offset = 0; - let mut i = 0; - while i < 4 { + for element in elements { device.rsp.mem[((address + ((base + offset) & 15)) & 0xFFF) as usize] = - (get_vpr_element(device.rsp.cpu.vpr[rt(opcode) as usize], elements[i]) >> 7) as u8; + (get_vpr_element(device.rsp.cpu.vpr[rt(opcode) as usize], element) >> 7) as u8; offset += 4; - i += 1; } } diff --git a/src/device/rsp_vu_instructions.rs b/src/device/rsp_vu_instructions.rs index 948a797..3d64a43 100644 --- a/src/device/rsp_vu_instructions.rs +++ b/src/device/rsp_vu_instructions.rs @@ -23,11 +23,11 @@ pub fn de(opcode: u32) -> u32 { } pub fn clamp_signed_32(value: i32) -> i16 { - return value.clamp(-32768, 32767) as i16; + value.clamp(-32768, 32767) as i16 } pub fn clamp_signed_64(value: i64) -> i16 { - return value.clamp(-32768, 32767) as i16; + value.clamp(-32768, 32767) as i16 } pub fn s_clip(x: i64, bits: u32) -> i64 { @@ -144,8 +144,7 @@ pub fn vrndp(device: &mut device::Device, opcode: u32) { let accm: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accm) }; let accl: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accl) }; - let mut n = 0; - while n < 8 { + for n in 0..8 { let mut product = get_vpr_element(vte, n) as i16 as i32; if vs(opcode) & 1 != 0 { product <<= 16 @@ -169,8 +168,6 @@ pub fn vrndp(device: &mut device::Device, opcode: u32) { n, clamp_signed_64(acc >> 16) as u16, ); - - n += 1; } } @@ -186,8 +183,7 @@ pub fn vmulq(device: &mut device::Device, opcode: u32) { let accm: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accm) }; let accl: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accl) }; - let mut n = 0; - while n < 8 { + for n in 0..8 { let mut product = (get_vpr_element(device.rsp.cpu.vpr[vs(opcode) as usize], n) as i16 as i32) .wrapping_mul(get_vpr_element(vte, n) as i16 as i32); @@ -202,7 +198,6 @@ pub fn vmulq(device: &mut device::Device, opcode: u32) { n, (clamp_signed_32(product >> 1) & !15) as u16, ); - n += 1; } } @@ -407,8 +402,7 @@ pub fn vrndn(device: &mut device::Device, opcode: u32) { let accm: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accm) }; let accl: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accl) }; - let mut n = 0; - while n < 8 { + for n in 0..8 { let mut product = get_vpr_element(vte, n) as i16 as i32; if vs(opcode) & 1 != 0 { product <<= 16 @@ -432,8 +426,6 @@ pub fn vrndn(device: &mut device::Device, opcode: u32) { n, clamp_signed_64(acc >> 16) as u16, ); - - n += 1; } } @@ -441,8 +433,7 @@ pub fn vmacq(device: &mut device::Device, opcode: u32) { let acch: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.acch) }; let accm: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accm) }; - let mut n = 0; - while n < 8 { + for n in 0..8 { let mut product = ((get_vpr_element(*acch, n) as i32) << 16) | (get_vpr_element(*accm, n) as i32); if product < 0 && (product & (1 << 5)) == 0 { @@ -457,7 +448,6 @@ pub fn vmacq(device: &mut device::Device, opcode: u32) { n, (clamp_signed_32(product >> 1) & !15) as u16, ); - n += 1; } } From e821626f2b1ae9dbb93e7e5bef160d24e599fee0 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 11 Jan 2025 17:06:41 +0100 Subject: [PATCH 0176/1117] Bump to 0.1.16 (#126) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index b62d9fb..1b3e22e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.15" +version = "0.1.16" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From 5d00eccb19b7543d7f473c35389a228864eb406c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 11 Jan 2025 18:18:01 +0100 Subject: [PATCH 0177/1117] Use bindgen for FFI interface (#127) * Use bindgen for FFI interface * use allow list --- Cargo.toml | 1 + build.rs | 24 +++++++++++++++ parallel-rdp/interface.cpp | 62 +++++++++++++++++++------------------- parallel-rdp/interface.hpp | 1 - src/ui/video.rs | 55 ++++++++++----------------------- 5 files changed, 72 insertions(+), 71 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 1b3e22e..cc13439 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,6 +30,7 @@ features = ["static-link","bundled"] [build-dependencies] winres = "0.1" +bindgen = "0.71" cc = { version = "1.2", features = ["parallel"] } [profile.release] diff --git a/build.rs b/build.rs index 70a2e6e..b7f726b 100644 --- a/build.rs +++ b/build.rs @@ -81,4 +81,28 @@ fn main() { } build.compile("parallel-rdp"); + + let parallel_bindings = bindgen::Builder::default() + // The input header we would like to generate + // bindings for. + .header("parallel-rdp/interface.hpp") + .allowlist_function("rdp_init") + .allowlist_function("rdp_close") + .allowlist_function("rdp_set_vi_register") + .allowlist_function("rdp_update_screen") + .allowlist_function("rdp_process_commands") + .allowlist_function("rdp_full_sync") + // Tell cargo to invalidate the built crate whenever any of the + // included header files changed. + .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) + // Finish the builder and generate the bindings. + .generate() + // Unwrap the Result and panic on failure. + .expect("Unable to generate bindings"); + + // Write the bindings to the $OUT_DIR/bindings.rs file. + let out_path = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap()); + parallel_bindings + .write_to_file(out_path.join("parallel_bindings.rs")) + .expect("Couldn't write bindings!"); } diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 5dda251..41eb9ec 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -132,6 +132,37 @@ static const unsigned cmd_len_lut[64] = { 1, }; +int sdl_event_filter(void *userdata, SDL_Event *event) +{ + if (event->type == SDL_WINDOWEVENT) + { + switch (event->window.event) + { + case SDL_WINDOWEVENT_CLOSE: + emu_running = false; + break; + case SDL_WINDOWEVENT_RESIZED: + wsi_platform->do_resize(); + break; + default: + break; + } + } + else if (fullscreen && event->type == SDL_KEYDOWN) + { + switch (event->key.keysym.scancode) + { + case SDL_SCANCODE_ESCAPE: + emu_running = false; + break; + default: + break; + } + } + + return 0; +} + void rdp_init(void *_window, GFX_INFO _gfx_info, bool _fullscreen, bool _upscale) { window = (SDL_Window *)_window; @@ -198,37 +229,6 @@ void rdp_close() } } -int sdl_event_filter(void *userdata, SDL_Event *event) -{ - if (event->type == SDL_WINDOWEVENT) - { - switch (event->window.event) - { - case SDL_WINDOWEVENT_CLOSE: - emu_running = false; - break; - case SDL_WINDOWEVENT_RESIZED: - wsi_platform->do_resize(); - break; - default: - break; - } - } - else if (fullscreen && event->type == SDL_KEYDOWN) - { - switch (event->key.keysym.scancode) - { - case SDL_SCANCODE_ESCAPE: - emu_running = false; - break; - default: - break; - } - } - - return 0; -} - static void calculate_viewport(float *x, float *y, float *width, float *height) { bool window_widescreen = false; diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index a14a8dc..928d3ea 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -29,7 +29,6 @@ extern "C" bool rdp_update_screen(); uint64_t rdp_process_commands(); void rdp_full_sync(); - int sdl_event_filter(void *userdata, SDL_Event *event); #ifdef __cplusplus } diff --git a/src/ui/video.rs b/src/ui/video.rs index dbf0276..17ff6b2 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -1,30 +1,7 @@ +#![allow(non_snake_case)] +include!(concat!(env!("OUT_DIR"), "/parallel_bindings.rs")); use crate::device; -#[repr(C)] -pub struct GfxInfo { - pub rdram: *mut u8, - pub dmem: *mut u8, - pub rdram_size: u32, - pub dpc_current_reg: *mut u32, - pub dpc_start_reg: *mut u32, - pub dpc_end_reg: *mut u32, - pub dpc_status_reg: *mut u32, - pub vi_h_start_reg: *mut u32, - pub vi_v_start_reg: *mut u32, - pub vi_x_scale_reg: *mut u32, - pub vi_y_scale_reg: *mut u32, - pub vi_width_reg: *mut u32, -} - -unsafe extern "C" { - pub fn rdp_init(window: usize, gfx_info: GfxInfo, fullscreen: bool, upscale: bool); - pub fn rdp_close(); - pub fn rdp_update_screen() -> bool; - pub fn rdp_set_vi_register(reg: u32, value: u32); - pub fn rdp_process_commands() -> u64; - pub fn rdp_full_sync(); -} - pub fn init(device: &mut device::Device, fullscreen: bool) { let mut builder = device .ui @@ -42,24 +19,24 @@ pub fn init(device: &mut device::Device, fullscreen: bool) { } device.ui.window = Some(builder.build().unwrap()); - let gfx_info = GfxInfo { - rdram: device.rdram.mem.as_mut_ptr(), - dmem: device.rsp.mem.as_mut_ptr(), - rdram_size: device.rdram.size, - dpc_current_reg: &mut device.rdp.regs_dpc[device::rdp::DPC_CURRENT_REG as usize], - dpc_start_reg: &mut device.rdp.regs_dpc[device::rdp::DPC_START_REG as usize], - dpc_end_reg: &mut device.rdp.regs_dpc[device::rdp::DPC_END_REG as usize], - dpc_status_reg: &mut device.rdp.regs_dpc[device::rdp::DPC_STATUS_REG as usize], - vi_h_start_reg: &mut device.vi.regs[device::vi::VI_H_START_REG as usize], - vi_v_start_reg: &mut device.vi.regs[device::vi::VI_V_START_REG as usize], - vi_x_scale_reg: &mut device.vi.regs[device::vi::VI_X_SCALE_REG as usize], - vi_y_scale_reg: &mut device.vi.regs[device::vi::VI_Y_SCALE_REG as usize], - vi_width_reg: &mut device.vi.regs[device::vi::VI_WIDTH_REG as usize], + let gfx_info = GFX_INFO { + RDRAM: device.rdram.mem.as_mut_ptr(), + DMEM: device.rsp.mem.as_mut_ptr(), + RDRAM_SIZE: device.rdram.size, + DPC_CURRENT_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_CURRENT_REG as usize], + DPC_START_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_START_REG as usize], + DPC_END_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_END_REG as usize], + DPC_STATUS_REG: &mut device.rdp.regs_dpc[device::rdp::DPC_STATUS_REG as usize], + VI_H_START_REG: &mut device.vi.regs[device::vi::VI_H_START_REG as usize], + VI_V_START_REG: &mut device.vi.regs[device::vi::VI_V_START_REG as usize], + VI_X_SCALE_REG: &mut device.vi.regs[device::vi::VI_X_SCALE_REG as usize], + VI_Y_SCALE_REG: &mut device.vi.regs[device::vi::VI_Y_SCALE_REG as usize], + VI_WIDTH_REG: &mut device.vi.regs[device::vi::VI_WIDTH_REG as usize], }; unsafe { rdp_init( - device.ui.window.as_mut().unwrap().raw() as usize, + device.ui.window.as_mut().unwrap().raw() as *mut std::ffi::c_void, gfx_info, fullscreen, device.ui.config.video.upscale, From 9058cd17152bd0a5790f9cc1481fe9748525bda5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 12 Jan 2025 09:20:06 +0100 Subject: [PATCH 0178/1117] aarch64 support (#128) * First step for aarch64 * more * more * more * more * more * more * more * more * more * more * more * more * more * more * more * test with cpp * more * more * more * more * more * more * more * more --- .github/workflows/build.yml | 37 +- build.rs | 69 +- src/compat/aarch64.c | 5 + src/compat/aarch64.rs | 4 + src/compat/sse2neon.h | 9417 +++++++++++++++++++++++++++++ src/device.rs | 31 +- src/device/cop1.rs | 29 +- src/device/rsp_cpu.rs | 21 +- src/device/rsp_su_instructions.rs | 7 +- src/device/rsp_vu_instructions.rs | 431 +- 10 files changed, 9694 insertions(+), 357 deletions(-) create mode 100644 src/compat/aarch64.c create mode 100644 src/compat/aarch64.rs create mode 100644 src/compat/sse2neon.h diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 06f20f8..6876275 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,8 +12,9 @@ env: jobs: build-linux: runs-on: ubuntu-latest - env: - TARGET: x86_64-unknown-linux-gnu + strategy: + matrix: + target: [x86_64-unknown-linux-gnu] steps: - uses: actions/checkout@v4 with: @@ -23,53 +24,57 @@ jobs: sudo apt -y install libsdl2-dev - uses: actions-rust-lang/setup-rust-toolchain@v1 with: + target: ${{ matrix.target }} rustflags: "" - name: Build run: | - cargo build --release -v --target=${{ env.TARGET }} + cargo build --release -v --target=${{ matrix.target }} - name: Upload file uses: actions/upload-artifact@v4 with: - name: gopher64-linux - path: target/${{ env.TARGET }}/release/gopher64 + name: gopher64-${{ matrix.target }} + path: target/${{ matrix.target }}/release/gopher64 build-windows: runs-on: windows-latest - env: - TARGET: x86_64-pc-windows-msvc + strategy: + matrix: + target: [x86_64-pc-windows-msvc] steps: - uses: actions/checkout@v4 with: submodules: recursive - uses: actions-rust-lang/setup-rust-toolchain@v1 with: + target: ${{ matrix.target }} rustflags: "" - name: Build run: | - cargo build --release -v --target=${{ env.TARGET }} + cargo build --release -v --target=${{ matrix.target }} - name: Upload file uses: actions/upload-artifact@v4 with: - name: gopher64-windows - path: target/${{ env.TARGET }}/release/gopher64.exe + name: gopher64-${{ matrix.target }} + path: target/${{ matrix.target }}/release/gopher64.exe build-macos: runs-on: macos-latest - env: - TARGET: x86_64-apple-darwin + strategy: + matrix: + target: [x86_64-apple-darwin, aarch64-apple-darwin] steps: - uses: actions/checkout@v4 with: submodules: recursive - uses: actions-rust-lang/setup-rust-toolchain@v1 with: - target: ${{ env.TARGET }} + target: ${{ matrix.target }} rustflags: "" - name: Build run: | - cargo build --release -v --target=${{ env.TARGET }} + cargo build --release -v --target=${{ matrix.target }} - name: Upload file uses: actions/upload-artifact@v4 with: - name: gopher64-mac - path: target/${{ env.TARGET }}/release/gopher64 + name: gopher64-${{ matrix.target }} + path: target/${{ matrix.target }}/release/gopher64 diff --git a/build.rs b/build.rs index b7f726b..726ecdb 100644 --- a/build.rs +++ b/build.rs @@ -1,6 +1,7 @@ fn main() { println!("cargo::rerun-if-changed=parallel-rdp"); + let mut simd_build = cc::Build::new(); let mut build = cc::Build::new(); build .cpp(true) @@ -54,11 +55,12 @@ fn main() { let os = std::env::var("CARGO_CFG_TARGET_OS").unwrap(); let arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap(); + let mut simd_header = ""; if os == "windows" { if arch == "x86_64" { build.flag("/arch:AVX2"); } else if arch == "aarch64" { - build.flag("/arch:armv8.2"); + panic!("unsupported platform") } else { panic!("unknown arch") } @@ -73,6 +75,9 @@ fn main() { build.flag("-march=x86-64-v3"); } else if arch == "aarch64" { build.flag("-march=armv8.2-a"); + simd_build.flag("-march=armv8.2-a"); + simd_build.file("src/compat/aarch64.c"); + simd_header = "src/compat/sse2neon.h"; } else { panic!("unknown arch") } @@ -82,9 +87,9 @@ fn main() { build.compile("parallel-rdp"); + let out_path = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap()); + let parallel_bindings = bindgen::Builder::default() - // The input header we would like to generate - // bindings for. .header("parallel-rdp/interface.hpp") .allowlist_function("rdp_init") .allowlist_function("rdp_close") @@ -92,17 +97,63 @@ fn main() { .allowlist_function("rdp_update_screen") .allowlist_function("rdp_process_commands") .allowlist_function("rdp_full_sync") - // Tell cargo to invalidate the built crate whenever any of the - // included header files changed. .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) - // Finish the builder and generate the bindings. .generate() - // Unwrap the Result and panic on failure. .expect("Unable to generate bindings"); - // Write the bindings to the $OUT_DIR/bindings.rs file. - let out_path = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap()); parallel_bindings .write_to_file(out_path.join("parallel_bindings.rs")) .expect("Couldn't write bindings!"); + + if arch == "aarch64" { + let simd_bindings = bindgen::Builder::default() + .header(simd_header) + .allowlist_function("_mm_setzero_si128") + .allowlist_function("_mm_set_epi8") + .allowlist_function("_mm_movemask_epi8") + .allowlist_function("_mm_shuffle_epi8") + .allowlist_function("_mm_packs_epi16") + .allowlist_function("_mm_set_epi16") + .allowlist_function("_mm_cmpeq_epi8") + .allowlist_function("_mm_and_si128") + .allowlist_function("_mm_set1_epi8") + .allowlist_function("_mm_mullo_epi16") + .allowlist_function("_mm_cmpeq_epi16") + .allowlist_function("_mm_srli_epi16") + .allowlist_function("_mm_add_epi16") + .allowlist_function("_mm_slli_epi16") + .allowlist_function("_mm_mulhi_epi16") + .allowlist_function("_mm_srai_epi16") + .allowlist_function("_mm_andnot_si128") + .allowlist_function("_mm_or_si128") + .allowlist_function("_mm_mulhi_epu16") + .allowlist_function("_mm_sub_epi16") + .allowlist_function("_mm_unpacklo_epi16") + .allowlist_function("_mm_unpackhi_epi16") + .allowlist_function("_mm_packs_epi32") + .allowlist_function("_mm_adds_epu16") + .allowlist_function("_mm_cmpgt_epi16") + .allowlist_function("_mm_blendv_epi8") + .allowlist_function("_mm_min_epi16") + .allowlist_function("_mm_max_epi16") + .allowlist_function("_mm_subs_epi16") + .allowlist_function("_mm_adds_epi16") + .allowlist_function("_mm_xor_si128") + .allowlist_function("_mm_cmplt_epi16") + .allowlist_function("_mm_subs_epu16") + .allowlist_function("_mm_set1_epi32") + .blocklist_type("__m128i") + .wrap_static_fns(true) + .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) + .generate() + .expect("Unable to generate bindings"); + + simd_bindings + .write_to_file(out_path.join("simd_bindings.rs")) + .expect("Couldn't write bindings!"); + + simd_build.file(std::env::temp_dir().join("bindgen").join("extern.c")); + simd_build.include("."); + simd_build.compile("simd"); + } } diff --git a/src/compat/aarch64.c b/src/compat/aarch64.c new file mode 100644 index 0000000..6f0a517 --- /dev/null +++ b/src/compat/aarch64.c @@ -0,0 +1,5 @@ +#include "src/compat/sse2neon.h" + +// Static wrappers + +__m128i _mm_srli_epi16__extern(__m128i __a, int __imm8) { return _mm_srli_epi16(__a, __imm8); } diff --git a/src/compat/aarch64.rs b/src/compat/aarch64.rs new file mode 100644 index 0000000..102d9fe --- /dev/null +++ b/src/compat/aarch64.rs @@ -0,0 +1,4 @@ +unsafe extern "C" { + #[link_name = "_mm_srli_epi16__extern"] + pub fn _mm_srli_epi16(__a: __m128i, __imm8: ::std::os::raw::c_int) -> __m128i; +} diff --git a/src/compat/sse2neon.h b/src/compat/sse2neon.h new file mode 100644 index 0000000..79b90fe --- /dev/null +++ b/src/compat/sse2neon.h @@ -0,0 +1,9417 @@ +#ifndef SSE2NEON_H +#define SSE2NEON_H + +/* + * sse2neon is freely redistributable under the MIT License. + * + * Copyright (c) 2015-2024 SSE2NEON Contributors. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +// This header file provides a simple API translation layer +// between SSE intrinsics to their corresponding Arm/Aarch64 NEON versions +// +// Contributors to this work are: +// John W. Ratcliff +// Brandon Rowlett +// Ken Fast +// Eric van Beurden +// Alexander Potylitsin +// Hasindu Gamaarachchi +// Jim Huang +// Mark Cheng +// Malcolm James MacLeod +// Devin Hussey (easyaspi314) +// Sebastian Pop +// Developer Ecosystem Engineering +// Danila Kutenin +// François Turban (JishinMaster) +// Pei-Hsuan Hung +// Yang-Hao Yuan +// Syoyo Fujita +// Brecht Van Lommel +// Jonathan Hue +// Cuda Chen +// Aymen Qader +// Anthony Roberts +// Sean Luchen + +/* Tunable configurations */ + +/* Enable precise implementation of math operations + * This would slow down the computation a bit, but gives consistent result with + * x86 SSE. (e.g. would solve a hole or NaN pixel in the rendering result) + */ +/* _mm_min|max_ps|ss|pd|sd */ +#ifndef SSE2NEON_PRECISE_MINMAX +#define SSE2NEON_PRECISE_MINMAX (0) +#endif +/* _mm_rcp_ps */ +#ifndef SSE2NEON_PRECISE_DIV +#define SSE2NEON_PRECISE_DIV (0) +#endif +/* _mm_sqrt_ps and _mm_rsqrt_ps */ +#ifndef SSE2NEON_PRECISE_SQRT +#define SSE2NEON_PRECISE_SQRT (0) +#endif +/* _mm_dp_pd */ +#ifndef SSE2NEON_PRECISE_DP +#define SSE2NEON_PRECISE_DP (0) +#endif + +/* Enable inclusion of windows.h on MSVC platforms + * This makes _mm_clflush functional on windows, as there is no builtin. + */ +#ifndef SSE2NEON_INCLUDE_WINDOWS_H +#define SSE2NEON_INCLUDE_WINDOWS_H (0) +#endif + +/* compiler specific definitions */ +#if defined(__GNUC__) || defined(__clang__) +#pragma push_macro("FORCE_INLINE") +#pragma push_macro("ALIGN_STRUCT") +#define FORCE_INLINE static inline __attribute__((always_inline)) +#define ALIGN_STRUCT(x) __attribute__((aligned(x))) +#define _sse2neon_likely(x) __builtin_expect(!!(x), 1) +#define _sse2neon_unlikely(x) __builtin_expect(!!(x), 0) +#elif defined(_MSC_VER) +#if _MSVC_TRADITIONAL +#error Using the traditional MSVC preprocessor is not supported! Use /Zc:preprocessor instead. +#endif +#ifndef FORCE_INLINE +#define FORCE_INLINE static inline +#endif +#ifndef ALIGN_STRUCT +#define ALIGN_STRUCT(x) __declspec(align(x)) +#endif +#define _sse2neon_likely(x) (x) +#define _sse2neon_unlikely(x) (x) +#else +#pragma message("Macro name collisions may happen with unsupported compilers.") +#endif + +#if !defined(__clang__) && defined(__GNUC__) && __GNUC__ < 10 +#warning "GCC versions earlier than 10 are not supported." +#endif + +#if defined(__OPTIMIZE__) && !defined(SSE2NEON_SUPPRESS_WARNINGS) +#warning \ + "Report any potential compiler optimization issues when using SSE2NEON. See the 'Optimization' section at https://github.com/DLTcollab/sse2neon." +#endif + +/* C language does not allow initializing a variable with a function call. */ +#ifdef __cplusplus +#define _sse2neon_const static const +#else +#define _sse2neon_const const +#endif + +#include +#include +#include +#include + +FORCE_INLINE double sse2neon_recast_u64_f64(uint64_t u64) +{ + double f64; + memcpy(&f64, &u64, sizeof(uint64_t)); + return f64; +} +FORCE_INLINE int64_t sse2neon_recast_f64_s64(double f64) +{ + int64_t i64; + memcpy(&i64, &f64, sizeof(uint64_t)); + return i64; +} + +#if defined(_WIN32) && !defined(__MINGW32__) +/* Definitions for _mm_{malloc,free} are provided by from MSVC. */ +#define SSE2NEON_ALLOC_DEFINED +#endif + +/* If using MSVC */ +#ifdef _MSC_VER +#include +#if SSE2NEON_INCLUDE_WINDOWS_H +#include +#include +#endif + +#if !defined(__cplusplus) +#error SSE2NEON only supports C++ compilation with this compiler +#endif + +#ifdef SSE2NEON_ALLOC_DEFINED +#include +#endif + +#if (defined(_M_AMD64) || defined(__x86_64__)) || \ + (defined(_M_ARM64) || defined(__arm64__)) +#define SSE2NEON_HAS_BITSCAN64 +#endif +#endif + +#if defined(__GNUC__) || defined(__clang__) +#define _sse2neon_define0(type, s, body) \ + __extension__({ \ + type _a = (s); \ + body \ + }) +#define _sse2neon_define1(type, s, body) \ + __extension__({ \ + type _a = (s); \ + body \ + }) +#define _sse2neon_define2(type, a, b, body) \ + __extension__({ \ + type _a = (a), _b = (b); \ + body \ + }) +#define _sse2neon_return(ret) (ret) +#else +#define _sse2neon_define0(type, a, body) [=](type _a) { body }(a) +#define _sse2neon_define1(type, a, body) [](type _a) { body }(a) +#define _sse2neon_define2(type, a, b, body) \ + [](type _a, type _b) { body }((a), (b)) +#define _sse2neon_return(ret) return ret +#endif + +#define _sse2neon_init(...) \ + { \ + __VA_ARGS__ \ + } + +/* Compiler barrier */ +#if defined(_MSC_VER) && !defined(__clang__) +#define SSE2NEON_BARRIER() _ReadWriteBarrier() +#else +#define SSE2NEON_BARRIER() \ + do { \ + __asm__ __volatile__("" ::: "memory"); \ + (void) 0; \ + } while (0) +#endif + +/* Memory barriers + * __atomic_thread_fence does not include a compiler barrier; instead, + * the barrier is part of __atomic_load/__atomic_store's "volatile-like" + * semantics. + */ +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) +#include +#endif + +FORCE_INLINE void _sse2neon_smp_mb(void) +{ + SSE2NEON_BARRIER(); +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !defined(__STDC_NO_ATOMICS__) + atomic_thread_fence(memory_order_seq_cst); +#elif defined(__GNUC__) || defined(__clang__) + __atomic_thread_fence(__ATOMIC_SEQ_CST); +#else /* MSVC */ + __dmb(_ARM64_BARRIER_ISH); +#endif +} + +/* Architecture-specific build options */ +/* FIXME: #pragma GCC push_options is only available on GCC */ +#if defined(__GNUC__) +#if defined(__arm__) && __ARM_ARCH == 7 +/* According to ARM C Language Extensions Architecture specification, + * __ARM_NEON is defined to a value indicating the Advanced SIMD (NEON) + * architecture supported. + */ +#if !defined(__ARM_NEON) || !defined(__ARM_NEON__) +#error "You must enable NEON instructions (e.g. -mfpu=neon) to use SSE2NEON." +#endif +#if !defined(__clang__) +#pragma GCC push_options +#pragma GCC target("fpu=neon") +#endif +#elif defined(__aarch64__) || defined(_M_ARM64) +#if !defined(__clang__) && !defined(_MSC_VER) +#pragma GCC push_options +#pragma GCC target("+simd") +#endif +#elif __ARM_ARCH == 8 +#if !defined(__ARM_NEON) || !defined(__ARM_NEON__) +#error \ + "You must enable NEON instructions (e.g. -mfpu=neon-fp-armv8) to use SSE2NEON." +#endif +#if !defined(__clang__) && !defined(_MSC_VER) +#pragma GCC push_options +#endif +#else +#error \ + "Unsupported target. Must be either ARMv7-A+NEON or ARMv8-A \ +(you could try setting target explicitly with -march or -mcpu)" +#endif +#endif + +#include +#if (!defined(__aarch64__) && !defined(_M_ARM64)) && (__ARM_ARCH == 8) +#if defined __has_include && __has_include() +#include +#endif +#endif + +/* Apple Silicon cache lines are double of what is commonly used by Intel, AMD + * and other Arm microarchitectures use. + * From sysctl -a on Apple M1: + * hw.cachelinesize: 128 + */ +#if defined(__APPLE__) && (defined(__aarch64__) || defined(__arm64__)) +#define SSE2NEON_CACHELINE_SIZE 128 +#else +#define SSE2NEON_CACHELINE_SIZE 64 +#endif + +/* Rounding functions require either Aarch64 instructions or libm fallback */ +#if !defined(__aarch64__) && !defined(_M_ARM64) +#include +#endif + +/* On ARMv7, some registers, such as PMUSERENR and PMCCNTR, are read-only + * or even not accessible in user mode. + * To write or access to these registers in user mode, + * we have to perform syscall instead. + */ +#if (!defined(__aarch64__) && !defined(_M_ARM64)) +#include +#endif + +/* "__has_builtin" can be used to query support for built-in functions + * provided by gcc/clang and other compilers that support it. + */ +#ifndef __has_builtin /* GCC prior to 10 or non-clang compilers */ +/* Compatibility with gcc <= 9 */ +#if defined(__GNUC__) && (__GNUC__ <= 9) +#define __has_builtin(x) HAS##x +#define HAS__builtin_popcount 1 +#define HAS__builtin_popcountll 1 + +// __builtin_shuffle introduced in GCC 4.7.0 +#if (__GNUC__ >= 5) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) +#define HAS__builtin_shuffle 1 +#else +#define HAS__builtin_shuffle 0 +#endif + +#define HAS__builtin_shufflevector 0 +#define HAS__builtin_nontemporal_store 0 +#else +#define __has_builtin(x) 0 +#endif +#endif + +/** + * MACRO for shuffle parameter for _mm_shuffle_ps(). + * Argument fp3 is a digit[0123] that represents the fp from argument "b" + * of mm_shuffle_ps that will be placed in fp3 of result. fp2 is the same + * for fp2 in result. fp1 is a digit[0123] that represents the fp from + * argument "a" of mm_shuffle_ps that will be places in fp1 of result. + * fp0 is the same for fp0 of result. + */ +#define _MM_SHUFFLE(fp3, fp2, fp1, fp0) \ + (((fp3) << 6) | ((fp2) << 4) | ((fp1) << 2) | ((fp0))) + +/** + * MACRO for shuffle parameter for _mm_shuffle_pd(). + * Argument fp1 is a digit[01] that represents the fp from argument "b" + * of mm_shuffle_pd that will be placed in fp1 of result. + * fp0 is a digit[01] that represents the fp from argument "a" of mm_shuffle_pd + * that will be placed in fp0 of result. + */ +#define _MM_SHUFFLE2(fp1, fp0) (((fp1) << 1) | (fp0)) + +#if __has_builtin(__builtin_shufflevector) +#define _sse2neon_shuffle(type, a, b, ...) \ + __builtin_shufflevector(a, b, __VA_ARGS__) +#elif __has_builtin(__builtin_shuffle) +#define _sse2neon_shuffle(type, a, b, ...) \ + __extension__({ \ + type tmp = {__VA_ARGS__}; \ + __builtin_shuffle(a, b, tmp); \ + }) +#endif + +#ifdef _sse2neon_shuffle +#define vshuffle_s16(a, b, ...) _sse2neon_shuffle(int16x4_t, a, b, __VA_ARGS__) +#define vshuffleq_s16(a, b, ...) _sse2neon_shuffle(int16x8_t, a, b, __VA_ARGS__) +#define vshuffle_s32(a, b, ...) _sse2neon_shuffle(int32x2_t, a, b, __VA_ARGS__) +#define vshuffleq_s32(a, b, ...) _sse2neon_shuffle(int32x4_t, a, b, __VA_ARGS__) +#define vshuffle_s64(a, b, ...) _sse2neon_shuffle(int64x1_t, a, b, __VA_ARGS__) +#define vshuffleq_s64(a, b, ...) _sse2neon_shuffle(int64x2_t, a, b, __VA_ARGS__) +#endif + +/* Rounding mode macros. */ +#define _MM_FROUND_TO_NEAREST_INT 0x00 +#define _MM_FROUND_TO_NEG_INF 0x01 +#define _MM_FROUND_TO_POS_INF 0x02 +#define _MM_FROUND_TO_ZERO 0x03 +#define _MM_FROUND_CUR_DIRECTION 0x04 +#define _MM_FROUND_NO_EXC 0x08 +#define _MM_FROUND_RAISE_EXC 0x00 +#define _MM_FROUND_NINT (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_RAISE_EXC) +#define _MM_FROUND_FLOOR (_MM_FROUND_TO_NEG_INF | _MM_FROUND_RAISE_EXC) +#define _MM_FROUND_CEIL (_MM_FROUND_TO_POS_INF | _MM_FROUND_RAISE_EXC) +#define _MM_FROUND_TRUNC (_MM_FROUND_TO_ZERO | _MM_FROUND_RAISE_EXC) +#define _MM_FROUND_RINT (_MM_FROUND_CUR_DIRECTION | _MM_FROUND_RAISE_EXC) +#define _MM_FROUND_NEARBYINT (_MM_FROUND_CUR_DIRECTION | _MM_FROUND_NO_EXC) +#define _MM_ROUND_NEAREST 0x0000 +#define _MM_ROUND_DOWN 0x2000 +#define _MM_ROUND_UP 0x4000 +#define _MM_ROUND_TOWARD_ZERO 0x6000 +/* Flush zero mode macros. */ +#define _MM_FLUSH_ZERO_MASK 0x8000 +#define _MM_FLUSH_ZERO_ON 0x8000 +#define _MM_FLUSH_ZERO_OFF 0x0000 +/* Denormals are zeros mode macros. */ +#define _MM_DENORMALS_ZERO_MASK 0x0040 +#define _MM_DENORMALS_ZERO_ON 0x0040 +#define _MM_DENORMALS_ZERO_OFF 0x0000 + +/* indicate immediate constant argument in a given range */ +#define __constrange(a, b) const + +/* A few intrinsics accept traditional data types like ints or floats, but + * most operate on data types that are specific to SSE. + * If a vector type ends in d, it contains doubles, and if it does not have + * a suffix, it contains floats. An integer vector type can contain any type + * of integer, from chars to shorts to unsigned long longs. + */ +typedef int64x1_t __m64; +typedef float32x4_t __m128; /* 128-bit vector containing 4 floats */ +// On ARM 32-bit architecture, the float64x2_t is not supported. +// The data type __m128d should be represented in a different way for related +// intrinsic conversion. +#if defined(__aarch64__) || defined(_M_ARM64) +typedef float64x2_t __m128d; /* 128-bit vector containing 2 doubles */ +#else +typedef float32x4_t __m128d; +#endif +typedef int64x2_t __m128i; /* 128-bit vector containing integers */ + +// Some intrinsics operate on unaligned data types. +typedef int16_t ALIGN_STRUCT(1) unaligned_int16_t; +typedef int32_t ALIGN_STRUCT(1) unaligned_int32_t; +typedef int64_t ALIGN_STRUCT(1) unaligned_int64_t; + +// __int64 is defined in the Intrinsics Guide which maps to different datatype +// in different data model +#if !(defined(_WIN32) || defined(_WIN64) || defined(__int64)) +#if (defined(__x86_64__) || defined(__i386__)) +#define __int64 long long +#else +#define __int64 int64_t +#endif +#endif + +/* type-safe casting between types */ + +#define vreinterpretq_m128_f16(x) vreinterpretq_f32_f16(x) +#define vreinterpretq_m128_f32(x) (x) +#define vreinterpretq_m128_f64(x) vreinterpretq_f32_f64(x) + +#define vreinterpretq_m128_u8(x) vreinterpretq_f32_u8(x) +#define vreinterpretq_m128_u16(x) vreinterpretq_f32_u16(x) +#define vreinterpretq_m128_u32(x) vreinterpretq_f32_u32(x) +#define vreinterpretq_m128_u64(x) vreinterpretq_f32_u64(x) + +#define vreinterpretq_m128_s8(x) vreinterpretq_f32_s8(x) +#define vreinterpretq_m128_s16(x) vreinterpretq_f32_s16(x) +#define vreinterpretq_m128_s32(x) vreinterpretq_f32_s32(x) +#define vreinterpretq_m128_s64(x) vreinterpretq_f32_s64(x) + +#define vreinterpretq_f16_m128(x) vreinterpretq_f16_f32(x) +#define vreinterpretq_f32_m128(x) (x) +#define vreinterpretq_f64_m128(x) vreinterpretq_f64_f32(x) + +#define vreinterpretq_u8_m128(x) vreinterpretq_u8_f32(x) +#define vreinterpretq_u16_m128(x) vreinterpretq_u16_f32(x) +#define vreinterpretq_u32_m128(x) vreinterpretq_u32_f32(x) +#define vreinterpretq_u64_m128(x) vreinterpretq_u64_f32(x) + +#define vreinterpretq_s8_m128(x) vreinterpretq_s8_f32(x) +#define vreinterpretq_s16_m128(x) vreinterpretq_s16_f32(x) +#define vreinterpretq_s32_m128(x) vreinterpretq_s32_f32(x) +#define vreinterpretq_s64_m128(x) vreinterpretq_s64_f32(x) + +#define vreinterpretq_m128i_s8(x) vreinterpretq_s64_s8(x) +#define vreinterpretq_m128i_s16(x) vreinterpretq_s64_s16(x) +#define vreinterpretq_m128i_s32(x) vreinterpretq_s64_s32(x) +#define vreinterpretq_m128i_s64(x) (x) + +#define vreinterpretq_m128i_u8(x) vreinterpretq_s64_u8(x) +#define vreinterpretq_m128i_u16(x) vreinterpretq_s64_u16(x) +#define vreinterpretq_m128i_u32(x) vreinterpretq_s64_u32(x) +#define vreinterpretq_m128i_u64(x) vreinterpretq_s64_u64(x) + +#define vreinterpretq_f32_m128i(x) vreinterpretq_f32_s64(x) +#define vreinterpretq_f64_m128i(x) vreinterpretq_f64_s64(x) + +#define vreinterpretq_s8_m128i(x) vreinterpretq_s8_s64(x) +#define vreinterpretq_s16_m128i(x) vreinterpretq_s16_s64(x) +#define vreinterpretq_s32_m128i(x) vreinterpretq_s32_s64(x) +#define vreinterpretq_s64_m128i(x) (x) + +#define vreinterpretq_u8_m128i(x) vreinterpretq_u8_s64(x) +#define vreinterpretq_u16_m128i(x) vreinterpretq_u16_s64(x) +#define vreinterpretq_u32_m128i(x) vreinterpretq_u32_s64(x) +#define vreinterpretq_u64_m128i(x) vreinterpretq_u64_s64(x) + +#define vreinterpret_m64_s8(x) vreinterpret_s64_s8(x) +#define vreinterpret_m64_s16(x) vreinterpret_s64_s16(x) +#define vreinterpret_m64_s32(x) vreinterpret_s64_s32(x) +#define vreinterpret_m64_s64(x) (x) + +#define vreinterpret_m64_u8(x) vreinterpret_s64_u8(x) +#define vreinterpret_m64_u16(x) vreinterpret_s64_u16(x) +#define vreinterpret_m64_u32(x) vreinterpret_s64_u32(x) +#define vreinterpret_m64_u64(x) vreinterpret_s64_u64(x) + +#define vreinterpret_m64_f16(x) vreinterpret_s64_f16(x) +#define vreinterpret_m64_f32(x) vreinterpret_s64_f32(x) +#define vreinterpret_m64_f64(x) vreinterpret_s64_f64(x) + +#define vreinterpret_u8_m64(x) vreinterpret_u8_s64(x) +#define vreinterpret_u16_m64(x) vreinterpret_u16_s64(x) +#define vreinterpret_u32_m64(x) vreinterpret_u32_s64(x) +#define vreinterpret_u64_m64(x) vreinterpret_u64_s64(x) + +#define vreinterpret_s8_m64(x) vreinterpret_s8_s64(x) +#define vreinterpret_s16_m64(x) vreinterpret_s16_s64(x) +#define vreinterpret_s32_m64(x) vreinterpret_s32_s64(x) +#define vreinterpret_s64_m64(x) (x) + +#define vreinterpret_f32_m64(x) vreinterpret_f32_s64(x) + +#if defined(__aarch64__) || defined(_M_ARM64) +#define vreinterpretq_m128d_s32(x) vreinterpretq_f64_s32(x) +#define vreinterpretq_m128d_s64(x) vreinterpretq_f64_s64(x) + +#define vreinterpretq_m128d_u64(x) vreinterpretq_f64_u64(x) + +#define vreinterpretq_m128d_f32(x) vreinterpretq_f64_f32(x) +#define vreinterpretq_m128d_f64(x) (x) + +#define vreinterpretq_s64_m128d(x) vreinterpretq_s64_f64(x) + +#define vreinterpretq_u32_m128d(x) vreinterpretq_u32_f64(x) +#define vreinterpretq_u64_m128d(x) vreinterpretq_u64_f64(x) + +#define vreinterpretq_f64_m128d(x) (x) +#define vreinterpretq_f32_m128d(x) vreinterpretq_f32_f64(x) +#else +#define vreinterpretq_m128d_s32(x) vreinterpretq_f32_s32(x) +#define vreinterpretq_m128d_s64(x) vreinterpretq_f32_s64(x) + +#define vreinterpretq_m128d_u32(x) vreinterpretq_f32_u32(x) +#define vreinterpretq_m128d_u64(x) vreinterpretq_f32_u64(x) + +#define vreinterpretq_m128d_f32(x) (x) + +#define vreinterpretq_s64_m128d(x) vreinterpretq_s64_f32(x) + +#define vreinterpretq_u32_m128d(x) vreinterpretq_u32_f32(x) +#define vreinterpretq_u64_m128d(x) vreinterpretq_u64_f32(x) + +#define vreinterpretq_f32_m128d(x) (x) +#endif + +// A struct is defined in this header file called 'SIMDVec' which can be used +// by applications which attempt to access the contents of an __m128 struct +// directly. It is important to note that accessing the __m128 struct directly +// is bad coding practice by Microsoft: @see: +// https://learn.microsoft.com/en-us/cpp/cpp/m128 +// +// However, some legacy source code may try to access the contents of an __m128 +// struct directly so the developer can use the SIMDVec as an alias for it. Any +// casting must be done manually by the developer, as you cannot cast or +// otherwise alias the base NEON data type for intrinsic operations. +// +// union intended to allow direct access to an __m128 variable using the names +// that the MSVC compiler provides. This union should really only be used when +// trying to access the members of the vector as integer values. GCC/clang +// allow native access to the float members through a simple array access +// operator (in C since 4.6, in C++ since 4.8). +// +// Ideally direct accesses to SIMD vectors should not be used since it can cause +// a performance hit. If it really is needed however, the original __m128 +// variable can be aliased with a pointer to this union and used to access +// individual components. The use of this union should be hidden behind a macro +// that is used throughout the codebase to access the members instead of always +// declaring this type of variable. +typedef union ALIGN_STRUCT(16) SIMDVec { + float m128_f32[4]; // as floats - DON'T USE. Added for convenience. + int8_t m128_i8[16]; // as signed 8-bit integers. + int16_t m128_i16[8]; // as signed 16-bit integers. + int32_t m128_i32[4]; // as signed 32-bit integers. + int64_t m128_i64[2]; // as signed 64-bit integers. + uint8_t m128_u8[16]; // as unsigned 8-bit integers. + uint16_t m128_u16[8]; // as unsigned 16-bit integers. + uint32_t m128_u32[4]; // as unsigned 32-bit integers. + uint64_t m128_u64[2]; // as unsigned 64-bit integers. +} SIMDVec; + +// casting using SIMDVec +#define vreinterpretq_nth_u64_m128i(x, n) (((SIMDVec *) &x)->m128_u64[n]) +#define vreinterpretq_nth_u32_m128i(x, n) (((SIMDVec *) &x)->m128_u32[n]) +#define vreinterpretq_nth_u8_m128i(x, n) (((SIMDVec *) &x)->m128_u8[n]) + +/* SSE macros */ +#define _MM_GET_FLUSH_ZERO_MODE _sse2neon_mm_get_flush_zero_mode +#define _MM_SET_FLUSH_ZERO_MODE _sse2neon_mm_set_flush_zero_mode +#define _MM_GET_DENORMALS_ZERO_MODE _sse2neon_mm_get_denormals_zero_mode +#define _MM_SET_DENORMALS_ZERO_MODE _sse2neon_mm_set_denormals_zero_mode + +// Function declaration +// SSE +FORCE_INLINE unsigned int _MM_GET_ROUNDING_MODE(void); +FORCE_INLINE __m128 _mm_move_ss(__m128, __m128); +FORCE_INLINE __m128 _mm_or_ps(__m128, __m128); +FORCE_INLINE __m128 _mm_set_ps1(float); +FORCE_INLINE __m128 _mm_setzero_ps(void); +// SSE2 +FORCE_INLINE __m128i _mm_and_si128(__m128i, __m128i); +FORCE_INLINE __m128i _mm_castps_si128(__m128); +FORCE_INLINE __m128i _mm_cmpeq_epi32(__m128i, __m128i); +FORCE_INLINE __m128i _mm_cvtps_epi32(__m128); +FORCE_INLINE __m128d _mm_move_sd(__m128d, __m128d); +FORCE_INLINE __m128i _mm_or_si128(__m128i, __m128i); +FORCE_INLINE __m128i _mm_set_epi32(int, int, int, int); +FORCE_INLINE __m128i _mm_set_epi64x(int64_t, int64_t); +FORCE_INLINE __m128d _mm_set_pd(double, double); +FORCE_INLINE __m128i _mm_set1_epi32(int); +FORCE_INLINE __m128i _mm_setzero_si128(void); +// SSE4.1 +FORCE_INLINE __m128d _mm_ceil_pd(__m128d); +FORCE_INLINE __m128 _mm_ceil_ps(__m128); +FORCE_INLINE __m128d _mm_floor_pd(__m128d); +FORCE_INLINE __m128 _mm_floor_ps(__m128); +FORCE_INLINE __m128d _mm_round_pd(__m128d, int); +FORCE_INLINE __m128 _mm_round_ps(__m128, int); +// SSE4.2 +FORCE_INLINE uint32_t _mm_crc32_u8(uint32_t, uint8_t); + +/* Backwards compatibility for compilers with lack of specific type support */ + +// Older gcc does not define vld1q_u8_x4 type +#if defined(__GNUC__) && !defined(__clang__) && \ + ((__GNUC__ <= 13 && defined(__arm__)) || \ + (__GNUC__ == 10 && __GNUC_MINOR__ < 3 && defined(__aarch64__)) || \ + (__GNUC__ <= 9 && defined(__aarch64__))) +FORCE_INLINE uint8x16x4_t _sse2neon_vld1q_u8_x4(const uint8_t *p) +{ + uint8x16x4_t ret; + ret.val[0] = vld1q_u8(p + 0); + ret.val[1] = vld1q_u8(p + 16); + ret.val[2] = vld1q_u8(p + 32); + ret.val[3] = vld1q_u8(p + 48); + return ret; +} +#else +// Wraps vld1q_u8_x4 +FORCE_INLINE uint8x16x4_t _sse2neon_vld1q_u8_x4(const uint8_t *p) +{ + return vld1q_u8_x4(p); +} +#endif + +#if !defined(__aarch64__) && !defined(_M_ARM64) +/* emulate vaddv u8 variant */ +FORCE_INLINE uint8_t _sse2neon_vaddv_u8(uint8x8_t v8) +{ + const uint64x1_t v1 = vpaddl_u32(vpaddl_u16(vpaddl_u8(v8))); + return vget_lane_u8(vreinterpret_u8_u64(v1), 0); +} +#else +// Wraps vaddv_u8 +FORCE_INLINE uint8_t _sse2neon_vaddv_u8(uint8x8_t v8) +{ + return vaddv_u8(v8); +} +#endif + +#if !defined(__aarch64__) && !defined(_M_ARM64) +/* emulate vaddvq u8 variant */ +FORCE_INLINE uint8_t _sse2neon_vaddvq_u8(uint8x16_t a) +{ + uint8x8_t tmp = vpadd_u8(vget_low_u8(a), vget_high_u8(a)); + uint8_t res = 0; + for (int i = 0; i < 8; ++i) + res += tmp[i]; + return res; +} +#else +// Wraps vaddvq_u8 +FORCE_INLINE uint8_t _sse2neon_vaddvq_u8(uint8x16_t a) +{ + return vaddvq_u8(a); +} +#endif + +#if !defined(__aarch64__) && !defined(_M_ARM64) +/* emulate vaddvq u16 variant */ +FORCE_INLINE uint16_t _sse2neon_vaddvq_u16(uint16x8_t a) +{ + uint32x4_t m = vpaddlq_u16(a); + uint64x2_t n = vpaddlq_u32(m); + uint64x1_t o = vget_low_u64(n) + vget_high_u64(n); + + return vget_lane_u32((uint32x2_t) o, 0); +} +#else +// Wraps vaddvq_u16 +FORCE_INLINE uint16_t _sse2neon_vaddvq_u16(uint16x8_t a) +{ + return vaddvq_u16(a); +} +#endif + +/* Function Naming Conventions + * The naming convention of SSE intrinsics is straightforward. A generic SSE + * intrinsic function is given as follows: + * _mm__ + * + * The parts of this format are given as follows: + * 1. describes the operation performed by the intrinsic + * 2. identifies the data type of the function's primary arguments + * + * This last part, , is a little complicated. It identifies the + * content of the input values, and can be set to any of the following values: + * + ps - vectors contain floats (ps stands for packed single-precision) + * + pd - vectors contain doubles (pd stands for packed double-precision) + * + epi8/epi16/epi32/epi64 - vectors contain 8-bit/16-bit/32-bit/64-bit + * signed integers + * + epu8/epu16/epu32/epu64 - vectors contain 8-bit/16-bit/32-bit/64-bit + * unsigned integers + * + si128 - unspecified 128-bit vector or 256-bit vector + * + m128/m128i/m128d - identifies input vector types when they are different + * than the type of the returned vector + * + * For example, _mm_setzero_ps. The _mm implies that the function returns + * a 128-bit vector. The _ps at the end implies that the argument vectors + * contain floats. + * + * A complete example: Byte Shuffle - pshufb (_mm_shuffle_epi8) + * // Set packed 16-bit integers. 128 bits, 8 short, per 16 bits + * __m128i v_in = _mm_setr_epi16(1, 2, 3, 4, 5, 6, 7, 8); + * // Set packed 8-bit integers + * // 128 bits, 16 chars, per 8 bits + * __m128i v_perm = _mm_setr_epi8(1, 0, 2, 3, 8, 9, 10, 11, + * 4, 5, 12, 13, 6, 7, 14, 15); + * // Shuffle packed 8-bit integers + * __m128i v_out = _mm_shuffle_epi8(v_in, v_perm); // pshufb + */ + +/* Constants for use with _mm_prefetch. */ +enum _mm_hint { + _MM_HINT_NTA = 0, /* load data to L1 and L2 cache, mark it as NTA */ + _MM_HINT_T0 = 1, /* load data to L1 and L2 cache */ + _MM_HINT_T1 = 2, /* load data to L2 cache only */ + _MM_HINT_T2 = 3, /* load data to L2 cache only, mark it as NTA */ +}; + +// The bit field mapping to the FPCR(floating-point control register) +typedef struct { + uint16_t res0; + uint8_t res1 : 6; + uint8_t bit22 : 1; + uint8_t bit23 : 1; + uint8_t bit24 : 1; + uint8_t res2 : 7; +#if defined(__aarch64__) || defined(_M_ARM64) + uint32_t res3; +#endif +} fpcr_bitfield; + +// Takes the upper 64 bits of a and places it in the low end of the result +// Takes the lower 64 bits of b and places it into the high end of the result. +FORCE_INLINE __m128 _mm_shuffle_ps_1032(__m128 a, __m128 b) +{ + float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); + float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(a32, b10)); +} + +// takes the lower two 32-bit values from a and swaps them and places in high +// end of result takes the higher two 32 bit values from b and swaps them and +// places in low end of result. +FORCE_INLINE __m128 _mm_shuffle_ps_2301(__m128 a, __m128 b) +{ + float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); + float32x2_t b23 = vrev64_f32(vget_high_f32(vreinterpretq_f32_m128(b))); + return vreinterpretq_m128_f32(vcombine_f32(a01, b23)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_0321(__m128 a, __m128 b) +{ + float32x2_t a21 = vget_high_f32( + vextq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 3)); + float32x2_t b03 = vget_low_f32( + vextq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b), 3)); + return vreinterpretq_m128_f32(vcombine_f32(a21, b03)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_2103(__m128 a, __m128 b) +{ + float32x2_t a03 = vget_low_f32( + vextq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 3)); + float32x2_t b21 = vget_high_f32( + vextq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b), 3)); + return vreinterpretq_m128_f32(vcombine_f32(a03, b21)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_1010(__m128 a, __m128 b) +{ + float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); + float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(a10, b10)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_1001(__m128 a, __m128 b) +{ + float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); + float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(a01, b10)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_0101(__m128 a, __m128 b) +{ + float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); + float32x2_t b01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(b))); + return vreinterpretq_m128_f32(vcombine_f32(a01, b01)); +} + +// keeps the low 64 bits of b in the low and puts the high 64 bits of a in the +// high +FORCE_INLINE __m128 _mm_shuffle_ps_3210(__m128 a, __m128 b) +{ + float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); + float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(a10, b32)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_0011(__m128 a, __m128 b) +{ + float32x2_t a11 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(a)), 1); + float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); + return vreinterpretq_m128_f32(vcombine_f32(a11, b00)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_0022(__m128 a, __m128 b) +{ + float32x2_t a22 = + vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(a)), 0); + float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); + return vreinterpretq_m128_f32(vcombine_f32(a22, b00)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_2200(__m128 a, __m128 b) +{ + float32x2_t a00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(a)), 0); + float32x2_t b22 = + vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(b)), 0); + return vreinterpretq_m128_f32(vcombine_f32(a00, b22)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_3202(__m128 a, __m128 b) +{ + float32_t a0 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); + float32x2_t a22 = + vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(a)), 0); + float32x2_t a02 = vset_lane_f32(a0, a22, 1); /* TODO: use vzip ?*/ + float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(a02, b32)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_1133(__m128 a, __m128 b) +{ + float32x2_t a33 = + vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(a)), 1); + float32x2_t b11 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 1); + return vreinterpretq_m128_f32(vcombine_f32(a33, b11)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_2010(__m128 a, __m128 b) +{ + float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); + float32_t b2 = vgetq_lane_f32(vreinterpretq_f32_m128(b), 2); + float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); + float32x2_t b20 = vset_lane_f32(b2, b00, 1); + return vreinterpretq_m128_f32(vcombine_f32(a10, b20)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_2001(__m128 a, __m128 b) +{ + float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); + float32_t b2 = vgetq_lane_f32(b, 2); + float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); + float32x2_t b20 = vset_lane_f32(b2, b00, 1); + return vreinterpretq_m128_f32(vcombine_f32(a01, b20)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_2032(__m128 a, __m128 b) +{ + float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); + float32_t b2 = vgetq_lane_f32(b, 2); + float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); + float32x2_t b20 = vset_lane_f32(b2, b00, 1); + return vreinterpretq_m128_f32(vcombine_f32(a32, b20)); +} + +// For MSVC, we check only if it is ARM64, as every single ARM64 processor +// supported by WoA has crypto extensions. If this changes in the future, +// this can be verified via the runtime-only method of: +// IsProcessorFeaturePresent(PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE) +#if (defined(_M_ARM64) && !defined(__clang__)) || \ + (defined(__ARM_FEATURE_CRYPTO) && \ + (defined(__aarch64__) || __has_builtin(__builtin_arm_crypto_vmullp64))) +// Wraps vmull_p64 +FORCE_INLINE uint64x2_t _sse2neon_vmull_p64(uint64x1_t _a, uint64x1_t _b) +{ + poly64_t a = vget_lane_p64(vreinterpret_p64_u64(_a), 0); + poly64_t b = vget_lane_p64(vreinterpret_p64_u64(_b), 0); +#if defined(_MSC_VER) && !defined(__clang__) + __n64 a1 = {a}, b1 = {b}; + return vreinterpretq_u64_p128(vmull_p64(a1, b1)); +#else + return vreinterpretq_u64_p128(vmull_p64(a, b)); +#endif +} +#else // ARMv7 polyfill +// ARMv7/some A64 lacks vmull_p64, but it has vmull_p8. +// +// vmull_p8 calculates 8 8-bit->16-bit polynomial multiplies, but we need a +// 64-bit->128-bit polynomial multiply. +// +// It needs some work and is somewhat slow, but it is still faster than all +// known scalar methods. +// +// Algorithm adapted to C from +// https://www.workofard.com/2017/07/ghash-for-low-end-cores/, which is adapted +// from "Fast Software Polynomial Multiplication on ARM Processors Using the +// NEON Engine" by Danilo Camara, Conrado Gouvea, Julio Lopez and Ricardo Dahab +// (https://hal.inria.fr/hal-01506572) +static uint64x2_t _sse2neon_vmull_p64(uint64x1_t _a, uint64x1_t _b) +{ + poly8x8_t a = vreinterpret_p8_u64(_a); + poly8x8_t b = vreinterpret_p8_u64(_b); + + // Masks + uint8x16_t k48_32 = vcombine_u8(vcreate_u8(0x0000ffffffffffff), + vcreate_u8(0x00000000ffffffff)); + uint8x16_t k16_00 = vcombine_u8(vcreate_u8(0x000000000000ffff), + vcreate_u8(0x0000000000000000)); + + // Do the multiplies, rotating with vext to get all combinations + uint8x16_t d = vreinterpretq_u8_p16(vmull_p8(a, b)); // D = A0 * B0 + uint8x16_t e = + vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 1))); // E = A0 * B1 + uint8x16_t f = + vreinterpretq_u8_p16(vmull_p8(vext_p8(a, a, 1), b)); // F = A1 * B0 + uint8x16_t g = + vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 2))); // G = A0 * B2 + uint8x16_t h = + vreinterpretq_u8_p16(vmull_p8(vext_p8(a, a, 2), b)); // H = A2 * B0 + uint8x16_t i = + vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 3))); // I = A0 * B3 + uint8x16_t j = + vreinterpretq_u8_p16(vmull_p8(vext_p8(a, a, 3), b)); // J = A3 * B0 + uint8x16_t k = + vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 4))); // L = A0 * B4 + + // Add cross products + uint8x16_t l = veorq_u8(e, f); // L = E + F + uint8x16_t m = veorq_u8(g, h); // M = G + H + uint8x16_t n = veorq_u8(i, j); // N = I + J + + // Interleave. Using vzip1 and vzip2 prevents Clang from emitting TBL + // instructions. +#if defined(__aarch64__) + uint8x16_t lm_p0 = vreinterpretq_u8_u64( + vzip1q_u64(vreinterpretq_u64_u8(l), vreinterpretq_u64_u8(m))); + uint8x16_t lm_p1 = vreinterpretq_u8_u64( + vzip2q_u64(vreinterpretq_u64_u8(l), vreinterpretq_u64_u8(m))); + uint8x16_t nk_p0 = vreinterpretq_u8_u64( + vzip1q_u64(vreinterpretq_u64_u8(n), vreinterpretq_u64_u8(k))); + uint8x16_t nk_p1 = vreinterpretq_u8_u64( + vzip2q_u64(vreinterpretq_u64_u8(n), vreinterpretq_u64_u8(k))); +#else + uint8x16_t lm_p0 = vcombine_u8(vget_low_u8(l), vget_low_u8(m)); + uint8x16_t lm_p1 = vcombine_u8(vget_high_u8(l), vget_high_u8(m)); + uint8x16_t nk_p0 = vcombine_u8(vget_low_u8(n), vget_low_u8(k)); + uint8x16_t nk_p1 = vcombine_u8(vget_high_u8(n), vget_high_u8(k)); +#endif + // t0 = (L) (P0 + P1) << 8 + // t1 = (M) (P2 + P3) << 16 + uint8x16_t t0t1_tmp = veorq_u8(lm_p0, lm_p1); + uint8x16_t t0t1_h = vandq_u8(lm_p1, k48_32); + uint8x16_t t0t1_l = veorq_u8(t0t1_tmp, t0t1_h); + + // t2 = (N) (P4 + P5) << 24 + // t3 = (K) (P6 + P7) << 32 + uint8x16_t t2t3_tmp = veorq_u8(nk_p0, nk_p1); + uint8x16_t t2t3_h = vandq_u8(nk_p1, k16_00); + uint8x16_t t2t3_l = veorq_u8(t2t3_tmp, t2t3_h); + + // De-interleave +#if defined(__aarch64__) + uint8x16_t t0 = vreinterpretq_u8_u64( + vuzp1q_u64(vreinterpretq_u64_u8(t0t1_l), vreinterpretq_u64_u8(t0t1_h))); + uint8x16_t t1 = vreinterpretq_u8_u64( + vuzp2q_u64(vreinterpretq_u64_u8(t0t1_l), vreinterpretq_u64_u8(t0t1_h))); + uint8x16_t t2 = vreinterpretq_u8_u64( + vuzp1q_u64(vreinterpretq_u64_u8(t2t3_l), vreinterpretq_u64_u8(t2t3_h))); + uint8x16_t t3 = vreinterpretq_u8_u64( + vuzp2q_u64(vreinterpretq_u64_u8(t2t3_l), vreinterpretq_u64_u8(t2t3_h))); +#else + uint8x16_t t1 = vcombine_u8(vget_high_u8(t0t1_l), vget_high_u8(t0t1_h)); + uint8x16_t t0 = vcombine_u8(vget_low_u8(t0t1_l), vget_low_u8(t0t1_h)); + uint8x16_t t3 = vcombine_u8(vget_high_u8(t2t3_l), vget_high_u8(t2t3_h)); + uint8x16_t t2 = vcombine_u8(vget_low_u8(t2t3_l), vget_low_u8(t2t3_h)); +#endif + // Shift the cross products + uint8x16_t t0_shift = vextq_u8(t0, t0, 15); // t0 << 8 + uint8x16_t t1_shift = vextq_u8(t1, t1, 14); // t1 << 16 + uint8x16_t t2_shift = vextq_u8(t2, t2, 13); // t2 << 24 + uint8x16_t t3_shift = vextq_u8(t3, t3, 12); // t3 << 32 + + // Accumulate the products + uint8x16_t cross1 = veorq_u8(t0_shift, t1_shift); + uint8x16_t cross2 = veorq_u8(t2_shift, t3_shift); + uint8x16_t mix = veorq_u8(d, cross1); + uint8x16_t r = veorq_u8(mix, cross2); + return vreinterpretq_u64_u8(r); +} +#endif // ARMv7 polyfill + +// C equivalent: +// __m128i _mm_shuffle_epi32_default(__m128i a, +// __constrange(0, 255) int imm) { +// __m128i ret; +// ret[0] = a[imm & 0x3]; ret[1] = a[(imm >> 2) & 0x3]; +// ret[2] = a[(imm >> 4) & 0x03]; ret[3] = a[(imm >> 6) & 0x03]; +// return ret; +// } +#define _mm_shuffle_epi32_default(a, imm) \ + vreinterpretq_m128i_s32(vsetq_lane_s32( \ + vgetq_lane_s32(vreinterpretq_s32_m128i(a), ((imm) >> 6) & 0x3), \ + vsetq_lane_s32( \ + vgetq_lane_s32(vreinterpretq_s32_m128i(a), ((imm) >> 4) & 0x3), \ + vsetq_lane_s32(vgetq_lane_s32(vreinterpretq_s32_m128i(a), \ + ((imm) >> 2) & 0x3), \ + vmovq_n_s32(vgetq_lane_s32( \ + vreinterpretq_s32_m128i(a), (imm) & (0x3))), \ + 1), \ + 2), \ + 3)) + +// Takes the upper 64 bits of a and places it in the low end of the result +// Takes the lower 64 bits of a and places it into the high end of the result. +FORCE_INLINE __m128i _mm_shuffle_epi_1032(__m128i a) +{ + int32x2_t a32 = vget_high_s32(vreinterpretq_s32_m128i(a)); + int32x2_t a10 = vget_low_s32(vreinterpretq_s32_m128i(a)); + return vreinterpretq_m128i_s32(vcombine_s32(a32, a10)); +} + +// takes the lower two 32-bit values from a and swaps them and places in low end +// of result takes the higher two 32 bit values from a and swaps them and places +// in high end of result. +FORCE_INLINE __m128i _mm_shuffle_epi_2301(__m128i a) +{ + int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); + int32x2_t a23 = vrev64_s32(vget_high_s32(vreinterpretq_s32_m128i(a))); + return vreinterpretq_m128i_s32(vcombine_s32(a01, a23)); +} + +// rotates the least significant 32 bits into the most significant 32 bits, and +// shifts the rest down +FORCE_INLINE __m128i _mm_shuffle_epi_0321(__m128i a) +{ + return vreinterpretq_m128i_s32( + vextq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(a), 1)); +} + +// rotates the most significant 32 bits into the least significant 32 bits, and +// shifts the rest up +FORCE_INLINE __m128i _mm_shuffle_epi_2103(__m128i a) +{ + return vreinterpretq_m128i_s32( + vextq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(a), 3)); +} + +// gets the lower 64 bits of a, and places it in the upper 64 bits +// gets the lower 64 bits of a and places it in the lower 64 bits +FORCE_INLINE __m128i _mm_shuffle_epi_1010(__m128i a) +{ + int32x2_t a10 = vget_low_s32(vreinterpretq_s32_m128i(a)); + return vreinterpretq_m128i_s32(vcombine_s32(a10, a10)); +} + +// gets the lower 64 bits of a, swaps the 0 and 1 elements, and places it in the +// lower 64 bits gets the lower 64 bits of a, and places it in the upper 64 bits +FORCE_INLINE __m128i _mm_shuffle_epi_1001(__m128i a) +{ + int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); + int32x2_t a10 = vget_low_s32(vreinterpretq_s32_m128i(a)); + return vreinterpretq_m128i_s32(vcombine_s32(a01, a10)); +} + +// gets the lower 64 bits of a, swaps the 0 and 1 elements and places it in the +// upper 64 bits gets the lower 64 bits of a, swaps the 0 and 1 elements, and +// places it in the lower 64 bits +FORCE_INLINE __m128i _mm_shuffle_epi_0101(__m128i a) +{ + int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); + return vreinterpretq_m128i_s32(vcombine_s32(a01, a01)); +} + +FORCE_INLINE __m128i _mm_shuffle_epi_2211(__m128i a) +{ + int32x2_t a11 = vdup_lane_s32(vget_low_s32(vreinterpretq_s32_m128i(a)), 1); + int32x2_t a22 = vdup_lane_s32(vget_high_s32(vreinterpretq_s32_m128i(a)), 0); + return vreinterpretq_m128i_s32(vcombine_s32(a11, a22)); +} + +FORCE_INLINE __m128i _mm_shuffle_epi_0122(__m128i a) +{ + int32x2_t a22 = vdup_lane_s32(vget_high_s32(vreinterpretq_s32_m128i(a)), 0); + int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); + return vreinterpretq_m128i_s32(vcombine_s32(a22, a01)); +} + +FORCE_INLINE __m128i _mm_shuffle_epi_3332(__m128i a) +{ + int32x2_t a32 = vget_high_s32(vreinterpretq_s32_m128i(a)); + int32x2_t a33 = vdup_lane_s32(vget_high_s32(vreinterpretq_s32_m128i(a)), 1); + return vreinterpretq_m128i_s32(vcombine_s32(a32, a33)); +} + +#if defined(__aarch64__) || defined(_M_ARM64) +#define _mm_shuffle_epi32_splat(a, imm) \ + vreinterpretq_m128i_s32(vdupq_laneq_s32(vreinterpretq_s32_m128i(a), (imm))) +#else +#define _mm_shuffle_epi32_splat(a, imm) \ + vreinterpretq_m128i_s32( \ + vdupq_n_s32(vgetq_lane_s32(vreinterpretq_s32_m128i(a), (imm)))) +#endif + +// NEON does not support a general purpose permute intrinsic. +// Shuffle single-precision (32-bit) floating-point elements in a using the +// control in imm8, and store the results in dst. +// +// C equivalent: +// __m128 _mm_shuffle_ps_default(__m128 a, __m128 b, +// __constrange(0, 255) int imm) { +// __m128 ret; +// ret[0] = a[imm & 0x3]; ret[1] = a[(imm >> 2) & 0x3]; +// ret[2] = b[(imm >> 4) & 0x03]; ret[3] = b[(imm >> 6) & 0x03]; +// return ret; +// } +// +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_ps +#define _mm_shuffle_ps_default(a, b, imm) \ + vreinterpretq_m128_f32(vsetq_lane_f32( \ + vgetq_lane_f32(vreinterpretq_f32_m128(b), ((imm) >> 6) & 0x3), \ + vsetq_lane_f32( \ + vgetq_lane_f32(vreinterpretq_f32_m128(b), ((imm) >> 4) & 0x3), \ + vsetq_lane_f32( \ + vgetq_lane_f32(vreinterpretq_f32_m128(a), ((imm) >> 2) & 0x3), \ + vmovq_n_f32( \ + vgetq_lane_f32(vreinterpretq_f32_m128(a), (imm) & (0x3))), \ + 1), \ + 2), \ + 3)) + +// Shuffle 16-bit integers in the low 64 bits of a using the control in imm8. +// Store the results in the low 64 bits of dst, with the high 64 bits being +// copied from a to dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shufflelo_epi16 +#define _mm_shufflelo_epi16_function(a, imm) \ + _sse2neon_define1( \ + __m128i, a, int16x8_t ret = vreinterpretq_s16_m128i(_a); \ + int16x4_t lowBits = vget_low_s16(ret); \ + ret = vsetq_lane_s16(vget_lane_s16(lowBits, (imm) & (0x3)), ret, 0); \ + ret = vsetq_lane_s16(vget_lane_s16(lowBits, ((imm) >> 2) & 0x3), ret, \ + 1); \ + ret = vsetq_lane_s16(vget_lane_s16(lowBits, ((imm) >> 4) & 0x3), ret, \ + 2); \ + ret = vsetq_lane_s16(vget_lane_s16(lowBits, ((imm) >> 6) & 0x3), ret, \ + 3); \ + _sse2neon_return(vreinterpretq_m128i_s16(ret));) + +// Shuffle 16-bit integers in the high 64 bits of a using the control in imm8. +// Store the results in the high 64 bits of dst, with the low 64 bits being +// copied from a to dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shufflehi_epi16 +#define _mm_shufflehi_epi16_function(a, imm) \ + _sse2neon_define1( \ + __m128i, a, int16x8_t ret = vreinterpretq_s16_m128i(_a); \ + int16x4_t highBits = vget_high_s16(ret); \ + ret = vsetq_lane_s16(vget_lane_s16(highBits, (imm) & (0x3)), ret, 4); \ + ret = vsetq_lane_s16(vget_lane_s16(highBits, ((imm) >> 2) & 0x3), ret, \ + 5); \ + ret = vsetq_lane_s16(vget_lane_s16(highBits, ((imm) >> 4) & 0x3), ret, \ + 6); \ + ret = vsetq_lane_s16(vget_lane_s16(highBits, ((imm) >> 6) & 0x3), ret, \ + 7); \ + _sse2neon_return(vreinterpretq_m128i_s16(ret));) + +/* MMX */ + +//_mm_empty is a no-op on arm +FORCE_INLINE void _mm_empty(void) {} + +/* SSE */ + +// Add packed single-precision (32-bit) floating-point elements in a and b, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_ps +FORCE_INLINE __m128 _mm_add_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_f32( + vaddq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Add the lower single-precision (32-bit) floating-point element in a and b, +// store the result in the lower element of dst, and copy the upper 3 packed +// elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_ss +FORCE_INLINE __m128 _mm_add_ss(__m128 a, __m128 b) +{ + float32_t b0 = vgetq_lane_f32(vreinterpretq_f32_m128(b), 0); + float32x4_t value = vsetq_lane_f32(b0, vdupq_n_f32(0), 0); + // the upper values in the result must be the remnants of . + return vreinterpretq_m128_f32(vaddq_f32(a, value)); +} + +// Compute the bitwise AND of packed single-precision (32-bit) floating-point +// elements in a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_and_ps +FORCE_INLINE __m128 _mm_and_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_s32( + vandq_s32(vreinterpretq_s32_m128(a), vreinterpretq_s32_m128(b))); +} + +// Compute the bitwise NOT of packed single-precision (32-bit) floating-point +// elements in a and then AND with b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_andnot_ps +FORCE_INLINE __m128 _mm_andnot_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_s32( + vbicq_s32(vreinterpretq_s32_m128(b), + vreinterpretq_s32_m128(a))); // *NOTE* argument swap +} + +// Average packed unsigned 16-bit integers in a and b, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_avg_pu16 +FORCE_INLINE __m64 _mm_avg_pu16(__m64 a, __m64 b) +{ + return vreinterpret_m64_u16( + vrhadd_u16(vreinterpret_u16_m64(a), vreinterpret_u16_m64(b))); +} + +// Average packed unsigned 8-bit integers in a and b, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_avg_pu8 +FORCE_INLINE __m64 _mm_avg_pu8(__m64 a, __m64 b) +{ + return vreinterpret_m64_u8( + vrhadd_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// for equality, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_ps +FORCE_INLINE __m128 _mm_cmpeq_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32( + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b for equality, store the result in the lower element of dst, and copy the +// upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_ss +FORCE_INLINE __m128 _mm_cmpeq_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpeq_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// for greater-than-or-equal, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpge_ps +FORCE_INLINE __m128 _mm_cmpge_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32( + vcgeq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b for greater-than-or-equal, store the result in the lower element of dst, +// and copy the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpge_ss +FORCE_INLINE __m128 _mm_cmpge_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpge_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// for greater-than, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_ps +FORCE_INLINE __m128 _mm_cmpgt_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32( + vcgtq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b for greater-than, store the result in the lower element of dst, and copy +// the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_ss +FORCE_INLINE __m128 _mm_cmpgt_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpgt_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// for less-than-or-equal, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmple_ps +FORCE_INLINE __m128 _mm_cmple_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32( + vcleq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b for less-than-or-equal, store the result in the lower element of dst, and +// copy the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmple_ss +FORCE_INLINE __m128 _mm_cmple_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmple_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// for less-than, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_ps +FORCE_INLINE __m128 _mm_cmplt_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32( + vcltq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b for less-than, store the result in the lower element of dst, and copy the +// upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_ss +FORCE_INLINE __m128 _mm_cmplt_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmplt_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// for not-equal, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpneq_ps +FORCE_INLINE __m128 _mm_cmpneq_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32(vmvnq_u32( + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b for not-equal, store the result in the lower element of dst, and copy the +// upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpneq_ss +FORCE_INLINE __m128 _mm_cmpneq_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpneq_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// for not-greater-than-or-equal, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnge_ps +FORCE_INLINE __m128 _mm_cmpnge_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32(vmvnq_u32( + vcgeq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b for not-greater-than-or-equal, store the result in the lower element of +// dst, and copy the upper 3 packed elements from a to the upper elements of +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnge_ss +FORCE_INLINE __m128 _mm_cmpnge_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpnge_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// for not-greater-than, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpngt_ps +FORCE_INLINE __m128 _mm_cmpngt_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32(vmvnq_u32( + vcgtq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b for not-greater-than, store the result in the lower element of dst, and +// copy the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpngt_ss +FORCE_INLINE __m128 _mm_cmpngt_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpngt_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// for not-less-than-or-equal, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnle_ps +FORCE_INLINE __m128 _mm_cmpnle_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32(vmvnq_u32( + vcleq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b for not-less-than-or-equal, store the result in the lower element of dst, +// and copy the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnle_ss +FORCE_INLINE __m128 _mm_cmpnle_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpnle_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// for not-less-than, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnlt_ps +FORCE_INLINE __m128 _mm_cmpnlt_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32(vmvnq_u32( + vcltq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b for not-less-than, store the result in the lower element of dst, and copy +// the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnlt_ss +FORCE_INLINE __m128 _mm_cmpnlt_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpnlt_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// to see if neither is NaN, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpord_ps +// +// See also: +// http://stackoverflow.com/questions/8627331/what-does-ordered-unordered-comparison-mean +// http://stackoverflow.com/questions/29349621/neon-isnanval-intrinsics +FORCE_INLINE __m128 _mm_cmpord_ps(__m128 a, __m128 b) +{ + // Note: NEON does not have ordered compare builtin + // Need to compare a eq a and b eq b to check for NaN + // Do AND of results to get final + uint32x4_t ceqaa = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); + uint32x4_t ceqbb = + vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_u32(vandq_u32(ceqaa, ceqbb)); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b to see if neither is NaN, store the result in the lower element of dst, and +// copy the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpord_ss +FORCE_INLINE __m128 _mm_cmpord_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpord_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// to see if either is NaN, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpunord_ps +FORCE_INLINE __m128 _mm_cmpunord_ps(__m128 a, __m128 b) +{ + uint32x4_t f32a = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); + uint32x4_t f32b = + vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_u32(vmvnq_u32(vandq_u32(f32a, f32b))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b to see if either is NaN, store the result in the lower element of dst, and +// copy the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpunord_ss +FORCE_INLINE __m128 _mm_cmpunord_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpunord_ps(a, b)); +} + +// Compare the lower single-precision (32-bit) floating-point element in a and b +// for equality, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comieq_ss +FORCE_INLINE int _mm_comieq_ss(__m128 a, __m128 b) +{ + uint32x4_t a_eq_b = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); + return vgetq_lane_u32(a_eq_b, 0) & 0x1; +} + +// Compare the lower single-precision (32-bit) floating-point element in a and b +// for greater-than-or-equal, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comige_ss +FORCE_INLINE int _mm_comige_ss(__m128 a, __m128 b) +{ + uint32x4_t a_ge_b = + vcgeq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); + return vgetq_lane_u32(a_ge_b, 0) & 0x1; +} + +// Compare the lower single-precision (32-bit) floating-point element in a and b +// for greater-than, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comigt_ss +FORCE_INLINE int _mm_comigt_ss(__m128 a, __m128 b) +{ + uint32x4_t a_gt_b = + vcgtq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); + return vgetq_lane_u32(a_gt_b, 0) & 0x1; +} + +// Compare the lower single-precision (32-bit) floating-point element in a and b +// for less-than-or-equal, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comile_ss +FORCE_INLINE int _mm_comile_ss(__m128 a, __m128 b) +{ + uint32x4_t a_le_b = + vcleq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); + return vgetq_lane_u32(a_le_b, 0) & 0x1; +} + +// Compare the lower single-precision (32-bit) floating-point element in a and b +// for less-than, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comilt_ss +FORCE_INLINE int _mm_comilt_ss(__m128 a, __m128 b) +{ + uint32x4_t a_lt_b = + vcltq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); + return vgetq_lane_u32(a_lt_b, 0) & 0x1; +} + +// Compare the lower single-precision (32-bit) floating-point element in a and b +// for not-equal, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comineq_ss +FORCE_INLINE int _mm_comineq_ss(__m128 a, __m128 b) +{ + return !_mm_comieq_ss(a, b); +} + +// Convert packed signed 32-bit integers in b to packed single-precision +// (32-bit) floating-point elements, store the results in the lower 2 elements +// of dst, and copy the upper 2 packed elements from a to the upper elements of +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvt_pi2ps +FORCE_INLINE __m128 _mm_cvt_pi2ps(__m128 a, __m64 b) +{ + return vreinterpretq_m128_f32( + vcombine_f32(vcvt_f32_s32(vreinterpret_s32_m64(b)), + vget_high_f32(vreinterpretq_f32_m128(a)))); +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 32-bit integers, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvt_ps2pi +FORCE_INLINE __m64 _mm_cvt_ps2pi(__m128 a) +{ +#if (defined(__aarch64__) || defined(_M_ARM64)) || \ + defined(__ARM_FEATURE_DIRECTED_ROUNDING) + return vreinterpret_m64_s32( + vget_low_s32(vcvtnq_s32_f32(vrndiq_f32(vreinterpretq_f32_m128(a))))); +#else + return vreinterpret_m64_s32(vcvt_s32_f32(vget_low_f32( + vreinterpretq_f32_m128(_mm_round_ps(a, _MM_FROUND_CUR_DIRECTION))))); +#endif +} + +// Convert the signed 32-bit integer b to a single-precision (32-bit) +// floating-point element, store the result in the lower element of dst, and +// copy the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvt_si2ss +FORCE_INLINE __m128 _mm_cvt_si2ss(__m128 a, int b) +{ + return vreinterpretq_m128_f32( + vsetq_lane_f32((float) b, vreinterpretq_f32_m128(a), 0)); +} + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 32-bit integer, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvt_ss2si +FORCE_INLINE int _mm_cvt_ss2si(__m128 a) +{ +#if (defined(__aarch64__) || defined(_M_ARM64)) || \ + defined(__ARM_FEATURE_DIRECTED_ROUNDING) + return vgetq_lane_s32(vcvtnq_s32_f32(vrndiq_f32(vreinterpretq_f32_m128(a))), + 0); +#else + float32_t data = vgetq_lane_f32( + vreinterpretq_f32_m128(_mm_round_ps(a, _MM_FROUND_CUR_DIRECTION)), 0); + return (int32_t) data; +#endif +} + +// Convert packed 16-bit integers in a to packed single-precision (32-bit) +// floating-point elements, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpi16_ps +FORCE_INLINE __m128 _mm_cvtpi16_ps(__m64 a) +{ + return vreinterpretq_m128_f32( + vcvtq_f32_s32(vmovl_s16(vreinterpret_s16_m64(a)))); +} + +// Convert packed 32-bit integers in b to packed single-precision (32-bit) +// floating-point elements, store the results in the lower 2 elements of dst, +// and copy the upper 2 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpi32_ps +FORCE_INLINE __m128 _mm_cvtpi32_ps(__m128 a, __m64 b) +{ + return vreinterpretq_m128_f32( + vcombine_f32(vcvt_f32_s32(vreinterpret_s32_m64(b)), + vget_high_f32(vreinterpretq_f32_m128(a)))); +} + +// Convert packed signed 32-bit integers in a to packed single-precision +// (32-bit) floating-point elements, store the results in the lower 2 elements +// of dst, then convert the packed signed 32-bit integers in b to +// single-precision (32-bit) floating-point element, and store the results in +// the upper 2 elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpi32x2_ps +FORCE_INLINE __m128 _mm_cvtpi32x2_ps(__m64 a, __m64 b) +{ + return vreinterpretq_m128_f32(vcvtq_f32_s32( + vcombine_s32(vreinterpret_s32_m64(a), vreinterpret_s32_m64(b)))); +} + +// Convert the lower packed 8-bit integers in a to packed single-precision +// (32-bit) floating-point elements, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpi8_ps +FORCE_INLINE __m128 _mm_cvtpi8_ps(__m64 a) +{ + return vreinterpretq_m128_f32(vcvtq_f32_s32( + vmovl_s16(vget_low_s16(vmovl_s8(vreinterpret_s8_m64(a)))))); +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 16-bit integers, and store the results in dst. Note: this intrinsic +// will generate 0x7FFF, rather than 0x8000, for input values between 0x7FFF and +// 0x7FFFFFFF. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtps_pi16 +FORCE_INLINE __m64 _mm_cvtps_pi16(__m128 a) +{ + return vreinterpret_m64_s16( + vqmovn_s32(vreinterpretq_s32_m128i(_mm_cvtps_epi32(a)))); +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 32-bit integers, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtps_pi32 +#define _mm_cvtps_pi32(a) _mm_cvt_ps2pi(a) + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 8-bit integers, and store the results in lower 4 elements of dst. +// Note: this intrinsic will generate 0x7F, rather than 0x80, for input values +// between 0x7F and 0x7FFFFFFF. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtps_pi8 +FORCE_INLINE __m64 _mm_cvtps_pi8(__m128 a) +{ + return vreinterpret_m64_s8(vqmovn_s16( + vcombine_s16(vreinterpret_s16_m64(_mm_cvtps_pi16(a)), vdup_n_s16(0)))); +} + +// Convert packed unsigned 16-bit integers in a to packed single-precision +// (32-bit) floating-point elements, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpu16_ps +FORCE_INLINE __m128 _mm_cvtpu16_ps(__m64 a) +{ + return vreinterpretq_m128_f32( + vcvtq_f32_u32(vmovl_u16(vreinterpret_u16_m64(a)))); +} + +// Convert the lower packed unsigned 8-bit integers in a to packed +// single-precision (32-bit) floating-point elements, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpu8_ps +FORCE_INLINE __m128 _mm_cvtpu8_ps(__m64 a) +{ + return vreinterpretq_m128_f32(vcvtq_f32_u32( + vmovl_u16(vget_low_u16(vmovl_u8(vreinterpret_u8_m64(a)))))); +} + +// Convert the signed 32-bit integer b to a single-precision (32-bit) +// floating-point element, store the result in the lower element of dst, and +// copy the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi32_ss +#define _mm_cvtsi32_ss(a, b) _mm_cvt_si2ss(a, b) + +// Convert the signed 64-bit integer b to a single-precision (32-bit) +// floating-point element, store the result in the lower element of dst, and +// copy the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64_ss +FORCE_INLINE __m128 _mm_cvtsi64_ss(__m128 a, int64_t b) +{ + return vreinterpretq_m128_f32( + vsetq_lane_f32((float) b, vreinterpretq_f32_m128(a), 0)); +} + +// Copy the lower single-precision (32-bit) floating-point element of a to dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtss_f32 +FORCE_INLINE float _mm_cvtss_f32(__m128 a) +{ + return vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); +} + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 32-bit integer, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtss_si32 +#define _mm_cvtss_si32(a) _mm_cvt_ss2si(a) + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 64-bit integer, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtss_si64 +FORCE_INLINE int64_t _mm_cvtss_si64(__m128 a) +{ +#if (defined(__aarch64__) || defined(_M_ARM64)) || \ + defined(__ARM_FEATURE_DIRECTED_ROUNDING) + return (int64_t) vgetq_lane_f32(vrndiq_f32(vreinterpretq_f32_m128(a)), 0); +#else + float32_t data = vgetq_lane_f32( + vreinterpretq_f32_m128(_mm_round_ps(a, _MM_FROUND_CUR_DIRECTION)), 0); + return (int64_t) data; +#endif +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 32-bit integers with truncation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtt_ps2pi +FORCE_INLINE __m64 _mm_cvtt_ps2pi(__m128 a) +{ + return vreinterpret_m64_s32( + vget_low_s32(vcvtq_s32_f32(vreinterpretq_f32_m128(a)))); +} + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 32-bit integer with truncation, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtt_ss2si +FORCE_INLINE int _mm_cvtt_ss2si(__m128 a) +{ + return vgetq_lane_s32(vcvtq_s32_f32(vreinterpretq_f32_m128(a)), 0); +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 32-bit integers with truncation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttps_pi32 +#define _mm_cvttps_pi32(a) _mm_cvtt_ps2pi(a) + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 32-bit integer with truncation, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttss_si32 +#define _mm_cvttss_si32(a) _mm_cvtt_ss2si(a) + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 64-bit integer with truncation, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttss_si64 +FORCE_INLINE int64_t _mm_cvttss_si64(__m128 a) +{ + return (int64_t) vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); +} + +// Divide packed single-precision (32-bit) floating-point elements in a by +// packed elements in b, and store the results in dst. +// Due to ARMv7-A NEON's lack of a precise division intrinsic, we implement +// division by multiplying a by b's reciprocal before using the Newton-Raphson +// method to approximate the results. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_div_ps +FORCE_INLINE __m128 _mm_div_ps(__m128 a, __m128 b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128_f32( + vdivq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#else + float32x4_t recip = vrecpeq_f32(vreinterpretq_f32_m128(b)); + recip = vmulq_f32(recip, vrecpsq_f32(recip, vreinterpretq_f32_m128(b))); + // Additional Netwon-Raphson iteration for accuracy + recip = vmulq_f32(recip, vrecpsq_f32(recip, vreinterpretq_f32_m128(b))); + return vreinterpretq_m128_f32(vmulq_f32(vreinterpretq_f32_m128(a), recip)); +#endif +} + +// Divide the lower single-precision (32-bit) floating-point element in a by the +// lower single-precision (32-bit) floating-point element in b, store the result +// in the lower element of dst, and copy the upper 3 packed elements from a to +// the upper elements of dst. +// Warning: ARMv7-A does not produce the same result compared to Intel and not +// IEEE-compliant. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_div_ss +FORCE_INLINE __m128 _mm_div_ss(__m128 a, __m128 b) +{ + float32_t value = + vgetq_lane_f32(vreinterpretq_f32_m128(_mm_div_ps(a, b)), 0); + return vreinterpretq_m128_f32( + vsetq_lane_f32(value, vreinterpretq_f32_m128(a), 0)); +} + +// Extract a 16-bit integer from a, selected with imm8, and store the result in +// the lower element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_pi16 +#define _mm_extract_pi16(a, imm) \ + (int32_t) vget_lane_u16(vreinterpret_u16_m64(a), (imm)) + +// Free aligned memory that was allocated with _mm_malloc. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_free +#if !defined(SSE2NEON_ALLOC_DEFINED) +FORCE_INLINE void _mm_free(void *addr) +{ +#if defined(_WIN32) + _aligned_free(addr); +#else + free(addr); +#endif +} +#endif + +FORCE_INLINE uint64_t _sse2neon_get_fpcr(void) +{ + uint64_t value; +#if defined(_MSC_VER) && !defined(__clang__) + value = _ReadStatusReg(ARM64_FPCR); +#else + __asm__ __volatile__("mrs %0, FPCR" : "=r"(value)); /* read */ +#endif + return value; +} + +FORCE_INLINE void _sse2neon_set_fpcr(uint64_t value) +{ +#if defined(_MSC_VER) && !defined(__clang__) + _WriteStatusReg(ARM64_FPCR, value); +#else + __asm__ __volatile__("msr FPCR, %0" ::"r"(value)); /* write */ +#endif +} + +// Macro: Get the flush zero bits from the MXCSR control and status register. +// The flush zero may contain any of the following flags: _MM_FLUSH_ZERO_ON or +// _MM_FLUSH_ZERO_OFF +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_MM_GET_FLUSH_ZERO_MODE +FORCE_INLINE unsigned int _sse2neon_mm_get_flush_zero_mode(void) +{ + union { + fpcr_bitfield field; +#if defined(__aarch64__) || defined(_M_ARM64) + uint64_t value; +#else + uint32_t value; +#endif + } r; + +#if defined(__aarch64__) || defined(_M_ARM64) + r.value = _sse2neon_get_fpcr(); +#else + __asm__ __volatile__("vmrs %0, FPSCR" : "=r"(r.value)); /* read */ +#endif + + return r.field.bit24 ? _MM_FLUSH_ZERO_ON : _MM_FLUSH_ZERO_OFF; +} + +// Macro: Get the rounding mode bits from the MXCSR control and status register. +// The rounding mode may contain any of the following flags: _MM_ROUND_NEAREST, +// _MM_ROUND_DOWN, _MM_ROUND_UP, _MM_ROUND_TOWARD_ZERO +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_MM_GET_ROUNDING_MODE +FORCE_INLINE unsigned int _MM_GET_ROUNDING_MODE(void) +{ + switch (fegetround()) { + case FE_TONEAREST: + return _MM_ROUND_NEAREST; + case FE_DOWNWARD: + return _MM_ROUND_DOWN; + case FE_UPWARD: + return _MM_ROUND_UP; + case FE_TOWARDZERO: + return _MM_ROUND_TOWARD_ZERO; + default: + // fegetround() must return _MM_ROUND_NEAREST, _MM_ROUND_DOWN, + // _MM_ROUND_UP, _MM_ROUND_TOWARD_ZERO on success. all the other error + // cases we treat them as FE_TOWARDZERO (truncate). + return _MM_ROUND_TOWARD_ZERO; + } +} + +// Copy a to dst, and insert the 16-bit integer i into dst at the location +// specified by imm8. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_insert_pi16 +#define _mm_insert_pi16(a, b, imm) \ + vreinterpret_m64_s16(vset_lane_s16((b), vreinterpret_s16_m64(a), (imm))) + +// Load 128-bits (composed of 4 packed single-precision (32-bit) floating-point +// elements) from memory into dst. mem_addr must be aligned on a 16-byte +// boundary or a general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_ps +FORCE_INLINE __m128 _mm_load_ps(const float *p) +{ + return vreinterpretq_m128_f32(vld1q_f32(p)); +} + +// Load a single-precision (32-bit) floating-point element from memory into all +// elements of dst. +// +// dst[31:0] := MEM[mem_addr+31:mem_addr] +// dst[63:32] := MEM[mem_addr+31:mem_addr] +// dst[95:64] := MEM[mem_addr+31:mem_addr] +// dst[127:96] := MEM[mem_addr+31:mem_addr] +// +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_ps1 +#define _mm_load_ps1 _mm_load1_ps + +// Load a single-precision (32-bit) floating-point element from memory into the +// lower of dst, and zero the upper 3 elements. mem_addr does not need to be +// aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_ss +FORCE_INLINE __m128 _mm_load_ss(const float *p) +{ + return vreinterpretq_m128_f32(vsetq_lane_f32(*p, vdupq_n_f32(0), 0)); +} + +// Load a single-precision (32-bit) floating-point element from memory into all +// elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load1_ps +FORCE_INLINE __m128 _mm_load1_ps(const float *p) +{ + return vreinterpretq_m128_f32(vld1q_dup_f32(p)); +} + +// Load 2 single-precision (32-bit) floating-point elements from memory into the +// upper 2 elements of dst, and copy the lower 2 elements from a to dst. +// mem_addr does not need to be aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadh_pi +FORCE_INLINE __m128 _mm_loadh_pi(__m128 a, __m64 const *p) +{ + return vreinterpretq_m128_f32( + vcombine_f32(vget_low_f32(a), vld1_f32((const float32_t *) p))); +} + +// Load 2 single-precision (32-bit) floating-point elements from memory into the +// lower 2 elements of dst, and copy the upper 2 elements from a to dst. +// mem_addr does not need to be aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadl_pi +FORCE_INLINE __m128 _mm_loadl_pi(__m128 a, __m64 const *p) +{ + return vreinterpretq_m128_f32( + vcombine_f32(vld1_f32((const float32_t *) p), vget_high_f32(a))); +} + +// Load 4 single-precision (32-bit) floating-point elements from memory into dst +// in reverse order. mem_addr must be aligned on a 16-byte boundary or a +// general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadr_ps +FORCE_INLINE __m128 _mm_loadr_ps(const float *p) +{ + float32x4_t v = vrev64q_f32(vld1q_f32(p)); + return vreinterpretq_m128_f32(vextq_f32(v, v, 2)); +} + +// Load 128-bits (composed of 4 packed single-precision (32-bit) floating-point +// elements) from memory into dst. mem_addr does not need to be aligned on any +// particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_ps +FORCE_INLINE __m128 _mm_loadu_ps(const float *p) +{ + // for neon, alignment doesn't matter, so _mm_load_ps and _mm_loadu_ps are + // equivalent for neon + return vreinterpretq_m128_f32(vld1q_f32(p)); +} + +// Load unaligned 16-bit integer from memory into the first element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_si16 +FORCE_INLINE __m128i _mm_loadu_si16(const void *p) +{ + return vreinterpretq_m128i_s16( + vsetq_lane_s16(*(const unaligned_int16_t *) p, vdupq_n_s16(0), 0)); +} + +// Load unaligned 64-bit integer from memory into the first element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_si64 +FORCE_INLINE __m128i _mm_loadu_si64(const void *p) +{ + return vreinterpretq_m128i_s64( + vsetq_lane_s64(*(const unaligned_int64_t *) p, vdupq_n_s64(0), 0)); +} + +// Allocate size bytes of memory, aligned to the alignment specified in align, +// and return a pointer to the allocated memory. _mm_free should be used to free +// memory that is allocated with _mm_malloc. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_malloc +#if !defined(SSE2NEON_ALLOC_DEFINED) +FORCE_INLINE void *_mm_malloc(size_t size, size_t align) +{ + void *ptr; + if (align == 1) + return malloc(size); + if (align == 2 || (sizeof(void *) == 8 && align == 4)) + align = sizeof(void *); +#if defined(_WIN32) + ptr = _aligned_malloc(size, align); + if (ptr) + return ptr; +#else + if (!posix_memalign(&ptr, align, size)) + return ptr; +#endif + return NULL; +} +#endif + +// Conditionally store 8-bit integer elements from a into memory using mask +// (elements are not stored when the highest bit is not set in the corresponding +// element) and a non-temporal memory hint. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskmove_si64 +FORCE_INLINE void _mm_maskmove_si64(__m64 a, __m64 mask, char *mem_addr) +{ + int8x8_t shr_mask = vshr_n_s8(vreinterpret_s8_m64(mask), 7); + __m128 b = _mm_load_ps((const float *) mem_addr); + int8x8_t masked = + vbsl_s8(vreinterpret_u8_s8(shr_mask), vreinterpret_s8_m64(a), + vreinterpret_s8_u64(vget_low_u64(vreinterpretq_u64_m128(b)))); + vst1_s8((int8_t *) mem_addr, masked); +} + +// Conditionally store 8-bit integer elements from a into memory using mask +// (elements are not stored when the highest bit is not set in the corresponding +// element) and a non-temporal memory hint. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_maskmovq +#define _m_maskmovq(a, mask, mem_addr) _mm_maskmove_si64(a, mask, mem_addr) + +// Compare packed signed 16-bit integers in a and b, and store packed maximum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_pi16 +FORCE_INLINE __m64 _mm_max_pi16(__m64 a, __m64 b) +{ + return vreinterpret_m64_s16( + vmax_s16(vreinterpret_s16_m64(a), vreinterpret_s16_m64(b))); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b, +// and store packed maximum values in dst. dst does not follow the IEEE Standard +// for Floating-Point Arithmetic (IEEE 754) maximum value when inputs are NaN or +// signed-zero values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_ps +FORCE_INLINE __m128 _mm_max_ps(__m128 a, __m128 b) +{ +#if SSE2NEON_PRECISE_MINMAX + float32x4_t _a = vreinterpretq_f32_m128(a); + float32x4_t _b = vreinterpretq_f32_m128(b); + return vreinterpretq_m128_f32(vbslq_f32(vcgtq_f32(_a, _b), _a, _b)); +#else + return vreinterpretq_m128_f32( + vmaxq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#endif +} + +// Compare packed unsigned 8-bit integers in a and b, and store packed maximum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_pu8 +FORCE_INLINE __m64 _mm_max_pu8(__m64 a, __m64 b) +{ + return vreinterpret_m64_u8( + vmax_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b, store the maximum value in the lower element of dst, and copy the upper 3 +// packed elements from a to the upper element of dst. dst does not follow the +// IEEE Standard for Floating-Point Arithmetic (IEEE 754) maximum value when +// inputs are NaN or signed-zero values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_ss +FORCE_INLINE __m128 _mm_max_ss(__m128 a, __m128 b) +{ + float32_t value = vgetq_lane_f32(_mm_max_ps(a, b), 0); + return vreinterpretq_m128_f32( + vsetq_lane_f32(value, vreinterpretq_f32_m128(a), 0)); +} + +// Compare packed signed 16-bit integers in a and b, and store packed minimum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_pi16 +FORCE_INLINE __m64 _mm_min_pi16(__m64 a, __m64 b) +{ + return vreinterpret_m64_s16( + vmin_s16(vreinterpret_s16_m64(a), vreinterpret_s16_m64(b))); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b, +// and store packed minimum values in dst. dst does not follow the IEEE Standard +// for Floating-Point Arithmetic (IEEE 754) minimum value when inputs are NaN or +// signed-zero values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_ps +FORCE_INLINE __m128 _mm_min_ps(__m128 a, __m128 b) +{ +#if SSE2NEON_PRECISE_MINMAX + float32x4_t _a = vreinterpretq_f32_m128(a); + float32x4_t _b = vreinterpretq_f32_m128(b); + return vreinterpretq_m128_f32(vbslq_f32(vcltq_f32(_a, _b), _a, _b)); +#else + return vreinterpretq_m128_f32( + vminq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#endif +} + +// Compare packed unsigned 8-bit integers in a and b, and store packed minimum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_pu8 +FORCE_INLINE __m64 _mm_min_pu8(__m64 a, __m64 b) +{ + return vreinterpret_m64_u8( + vmin_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b, store the minimum value in the lower element of dst, and copy the upper 3 +// packed elements from a to the upper element of dst. dst does not follow the +// IEEE Standard for Floating-Point Arithmetic (IEEE 754) minimum value when +// inputs are NaN or signed-zero values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_ss +FORCE_INLINE __m128 _mm_min_ss(__m128 a, __m128 b) +{ + float32_t value = vgetq_lane_f32(_mm_min_ps(a, b), 0); + return vreinterpretq_m128_f32( + vsetq_lane_f32(value, vreinterpretq_f32_m128(a), 0)); +} + +// Move the lower single-precision (32-bit) floating-point element from b to the +// lower element of dst, and copy the upper 3 packed elements from a to the +// upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_move_ss +FORCE_INLINE __m128 _mm_move_ss(__m128 a, __m128 b) +{ + return vreinterpretq_m128_f32( + vsetq_lane_f32(vgetq_lane_f32(vreinterpretq_f32_m128(b), 0), + vreinterpretq_f32_m128(a), 0)); +} + +// Move the upper 2 single-precision (32-bit) floating-point elements from b to +// the lower 2 elements of dst, and copy the upper 2 elements from a to the +// upper 2 elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movehl_ps +FORCE_INLINE __m128 _mm_movehl_ps(__m128 a, __m128 b) +{ +#if defined(aarch64__) + return vreinterpretq_m128_u64( + vzip2q_u64(vreinterpretq_u64_m128(b), vreinterpretq_u64_m128(a))); +#else + float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); + float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(b32, a32)); +#endif +} + +// Move the lower 2 single-precision (32-bit) floating-point elements from b to +// the upper 2 elements of dst, and copy the lower 2 elements from a to the +// lower 2 elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movelh_ps +FORCE_INLINE __m128 _mm_movelh_ps(__m128 __A, __m128 __B) +{ + float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(__A)); + float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(__B)); + return vreinterpretq_m128_f32(vcombine_f32(a10, b10)); +} + +// Create mask from the most significant bit of each 8-bit element in a, and +// store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movemask_pi8 +FORCE_INLINE int _mm_movemask_pi8(__m64 a) +{ + uint8x8_t input = vreinterpret_u8_m64(a); +#if defined(__aarch64__) || defined(_M_ARM64) + static const int8_t shift[8] = {0, 1, 2, 3, 4, 5, 6, 7}; + uint8x8_t tmp = vshr_n_u8(input, 7); + return vaddv_u8(vshl_u8(tmp, vld1_s8(shift))); +#else + // Refer the implementation of `_mm_movemask_epi8` + uint16x4_t high_bits = vreinterpret_u16_u8(vshr_n_u8(input, 7)); + uint32x2_t paired16 = + vreinterpret_u32_u16(vsra_n_u16(high_bits, high_bits, 7)); + uint8x8_t paired32 = + vreinterpret_u8_u32(vsra_n_u32(paired16, paired16, 14)); + return vget_lane_u8(paired32, 0) | ((int) vget_lane_u8(paired32, 4) << 4); +#endif +} + +// Set each bit of mask dst based on the most significant bit of the +// corresponding packed single-precision (32-bit) floating-point element in a. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movemask_ps +FORCE_INLINE int _mm_movemask_ps(__m128 a) +{ + uint32x4_t input = vreinterpretq_u32_m128(a); +#if defined(__aarch64__) || defined(_M_ARM64) + static const int32_t shift[4] = {0, 1, 2, 3}; + uint32x4_t tmp = vshrq_n_u32(input, 31); + return vaddvq_u32(vshlq_u32(tmp, vld1q_s32(shift))); +#else + // Uses the exact same method as _mm_movemask_epi8, see that for details. + // Shift out everything but the sign bits with a 32-bit unsigned shift + // right. + uint64x2_t high_bits = vreinterpretq_u64_u32(vshrq_n_u32(input, 31)); + // Merge the two pairs together with a 64-bit unsigned shift right + add. + uint8x16_t paired = + vreinterpretq_u8_u64(vsraq_n_u64(high_bits, high_bits, 31)); + // Extract the result. + return vgetq_lane_u8(paired, 0) | (vgetq_lane_u8(paired, 8) << 2); +#endif +} + +// Multiply packed single-precision (32-bit) floating-point elements in a and b, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_ps +FORCE_INLINE __m128 _mm_mul_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_f32( + vmulq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Multiply the lower single-precision (32-bit) floating-point element in a and +// b, store the result in the lower element of dst, and copy the upper 3 packed +// elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_ss +FORCE_INLINE __m128 _mm_mul_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_mul_ps(a, b)); +} + +// Multiply the packed unsigned 16-bit integers in a and b, producing +// intermediate 32-bit integers, and store the high 16 bits of the intermediate +// integers in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mulhi_pu16 +FORCE_INLINE __m64 _mm_mulhi_pu16(__m64 a, __m64 b) +{ + return vreinterpret_m64_u16(vshrn_n_u32( + vmull_u16(vreinterpret_u16_m64(a), vreinterpret_u16_m64(b)), 16)); +} + +// Compute the bitwise OR of packed single-precision (32-bit) floating-point +// elements in a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_or_ps +FORCE_INLINE __m128 _mm_or_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_s32( + vorrq_s32(vreinterpretq_s32_m128(a), vreinterpretq_s32_m128(b))); +} + +// Average packed unsigned 8-bit integers in a and b, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pavgb +#define _m_pavgb(a, b) _mm_avg_pu8(a, b) + +// Average packed unsigned 16-bit integers in a and b, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pavgw +#define _m_pavgw(a, b) _mm_avg_pu16(a, b) + +// Extract a 16-bit integer from a, selected with imm8, and store the result in +// the lower element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pextrw +#define _m_pextrw(a, imm) _mm_extract_pi16(a, imm) + +// Copy a to dst, and insert the 16-bit integer i into dst at the location +// specified by imm8. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=m_pinsrw +#define _m_pinsrw(a, i, imm) _mm_insert_pi16(a, i, imm) + +// Compare packed signed 16-bit integers in a and b, and store packed maximum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pmaxsw +#define _m_pmaxsw(a, b) _mm_max_pi16(a, b) + +// Compare packed unsigned 8-bit integers in a and b, and store packed maximum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pmaxub +#define _m_pmaxub(a, b) _mm_max_pu8(a, b) + +// Compare packed signed 16-bit integers in a and b, and store packed minimum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pminsw +#define _m_pminsw(a, b) _mm_min_pi16(a, b) + +// Compare packed unsigned 8-bit integers in a and b, and store packed minimum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pminub +#define _m_pminub(a, b) _mm_min_pu8(a, b) + +// Create mask from the most significant bit of each 8-bit element in a, and +// store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pmovmskb +#define _m_pmovmskb(a) _mm_movemask_pi8(a) + +// Multiply the packed unsigned 16-bit integers in a and b, producing +// intermediate 32-bit integers, and store the high 16 bits of the intermediate +// integers in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pmulhuw +#define _m_pmulhuw(a, b) _mm_mulhi_pu16(a, b) + +// Fetch the line of data from memory that contains address p to a location in +// the cache hierarchy specified by the locality hint i. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_prefetch +FORCE_INLINE void _mm_prefetch(char const *p, int i) +{ + (void) i; +#if defined(_MSC_VER) && !defined(__clang__) + switch (i) { + case _MM_HINT_NTA: + __prefetch2(p, 1); + break; + case _MM_HINT_T0: + __prefetch2(p, 0); + break; + case _MM_HINT_T1: + __prefetch2(p, 2); + break; + case _MM_HINT_T2: + __prefetch2(p, 4); + break; + } +#else + switch (i) { + case _MM_HINT_NTA: + __builtin_prefetch(p, 0, 0); + break; + case _MM_HINT_T0: + __builtin_prefetch(p, 0, 3); + break; + case _MM_HINT_T1: + __builtin_prefetch(p, 0, 2); + break; + case _MM_HINT_T2: + __builtin_prefetch(p, 0, 1); + break; + } +#endif +} + +// Compute the absolute differences of packed unsigned 8-bit integers in a and +// b, then horizontally sum each consecutive 8 differences to produce four +// unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low +// 16 bits of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=m_psadbw +#define _m_psadbw(a, b) _mm_sad_pu8(a, b) + +// Shuffle 16-bit integers in a using the control in imm8, and store the results +// in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pshufw +#define _m_pshufw(a, imm) _mm_shuffle_pi16(a, imm) + +// Compute the approximate reciprocal of packed single-precision (32-bit) +// floating-point elements in a, and store the results in dst. The maximum +// relative error for this approximation is less than 1.5*2^-12. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_rcp_ps +FORCE_INLINE __m128 _mm_rcp_ps(__m128 in) +{ + float32x4_t recip = vrecpeq_f32(vreinterpretq_f32_m128(in)); + recip = vmulq_f32(recip, vrecpsq_f32(recip, vreinterpretq_f32_m128(in))); +#if SSE2NEON_PRECISE_DIV + // Additional Netwon-Raphson iteration for accuracy + recip = vmulq_f32(recip, vrecpsq_f32(recip, vreinterpretq_f32_m128(in))); +#endif + return vreinterpretq_m128_f32(recip); +} + +// Compute the approximate reciprocal of the lower single-precision (32-bit) +// floating-point element in a, store the result in the lower element of dst, +// and copy the upper 3 packed elements from a to the upper elements of dst. The +// maximum relative error for this approximation is less than 1.5*2^-12. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_rcp_ss +FORCE_INLINE __m128 _mm_rcp_ss(__m128 a) +{ + return _mm_move_ss(a, _mm_rcp_ps(a)); +} + +// Compute the approximate reciprocal square root of packed single-precision +// (32-bit) floating-point elements in a, and store the results in dst. The +// maximum relative error for this approximation is less than 1.5*2^-12. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_rsqrt_ps +FORCE_INLINE __m128 _mm_rsqrt_ps(__m128 in) +{ + float32x4_t out = vrsqrteq_f32(vreinterpretq_f32_m128(in)); + + // Generate masks for detecting whether input has any 0.0f/-0.0f + // (which becomes positive/negative infinity by IEEE-754 arithmetic rules). + const uint32x4_t pos_inf = vdupq_n_u32(0x7F800000); + const uint32x4_t neg_inf = vdupq_n_u32(0xFF800000); + const uint32x4_t has_pos_zero = + vceqq_u32(pos_inf, vreinterpretq_u32_f32(out)); + const uint32x4_t has_neg_zero = + vceqq_u32(neg_inf, vreinterpretq_u32_f32(out)); + + out = vmulq_f32( + out, vrsqrtsq_f32(vmulq_f32(vreinterpretq_f32_m128(in), out), out)); +#if SSE2NEON_PRECISE_SQRT + // Additional Netwon-Raphson iteration for accuracy + out = vmulq_f32( + out, vrsqrtsq_f32(vmulq_f32(vreinterpretq_f32_m128(in), out), out)); +#endif + + // Set output vector element to infinity/negative-infinity if + // the corresponding input vector element is 0.0f/-0.0f. + out = vbslq_f32(has_pos_zero, (float32x4_t) pos_inf, out); + out = vbslq_f32(has_neg_zero, (float32x4_t) neg_inf, out); + + return vreinterpretq_m128_f32(out); +} + +// Compute the approximate reciprocal square root of the lower single-precision +// (32-bit) floating-point element in a, store the result in the lower element +// of dst, and copy the upper 3 packed elements from a to the upper elements of +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_rsqrt_ss +FORCE_INLINE __m128 _mm_rsqrt_ss(__m128 in) +{ + return vsetq_lane_f32(vgetq_lane_f32(_mm_rsqrt_ps(in), 0), in, 0); +} + +// Compute the absolute differences of packed unsigned 8-bit integers in a and +// b, then horizontally sum each consecutive 8 differences to produce four +// unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low +// 16 bits of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sad_pu8 +FORCE_INLINE __m64 _mm_sad_pu8(__m64 a, __m64 b) +{ + uint64x1_t t = vpaddl_u32(vpaddl_u16( + vpaddl_u8(vabd_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))))); + return vreinterpret_m64_u16( + vset_lane_u16((int) vget_lane_u64(t, 0), vdup_n_u16(0), 0)); +} + +// Macro: Set the flush zero bits of the MXCSR control and status register to +// the value in unsigned 32-bit integer a. The flush zero may contain any of the +// following flags: _MM_FLUSH_ZERO_ON or _MM_FLUSH_ZERO_OFF +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_MM_SET_FLUSH_ZERO_MODE +FORCE_INLINE void _sse2neon_mm_set_flush_zero_mode(unsigned int flag) +{ + // AArch32 Advanced SIMD arithmetic always uses the Flush-to-zero setting, + // regardless of the value of the FZ bit. + union { + fpcr_bitfield field; +#if defined(__aarch64__) || defined(_M_ARM64) + uint64_t value; +#else + uint32_t value; +#endif + } r; + +#if defined(__aarch64__) || defined(_M_ARM64) + r.value = _sse2neon_get_fpcr(); +#else + __asm__ __volatile__("vmrs %0, FPSCR" : "=r"(r.value)); /* read */ +#endif + + r.field.bit24 = (flag & _MM_FLUSH_ZERO_MASK) == _MM_FLUSH_ZERO_ON; + +#if defined(__aarch64__) || defined(_M_ARM64) + _sse2neon_set_fpcr(r.value); +#else + __asm__ __volatile__("vmsr FPSCR, %0" ::"r"(r)); /* write */ +#endif +} + +// Set packed single-precision (32-bit) floating-point elements in dst with the +// supplied values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_ps +FORCE_INLINE __m128 _mm_set_ps(float w, float z, float y, float x) +{ + float ALIGN_STRUCT(16) data[4] = {x, y, z, w}; + return vreinterpretq_m128_f32(vld1q_f32(data)); +} + +// Broadcast single-precision (32-bit) floating-point value a to all elements of +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_ps1 +FORCE_INLINE __m128 _mm_set_ps1(float _w) +{ + return vreinterpretq_m128_f32(vdupq_n_f32(_w)); +} + +// Macro: Set the rounding mode bits of the MXCSR control and status register to +// the value in unsigned 32-bit integer a. The rounding mode may contain any of +// the following flags: _MM_ROUND_NEAREST, _MM_ROUND_DOWN, _MM_ROUND_UP, +// _MM_ROUND_TOWARD_ZERO +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_MM_SET_ROUNDING_MODE +FORCE_INLINE void _MM_SET_ROUNDING_MODE(int rounding) +{ + switch (rounding) { + case _MM_ROUND_NEAREST: + rounding = FE_TONEAREST; + break; + case _MM_ROUND_DOWN: + rounding = FE_DOWNWARD; + break; + case _MM_ROUND_UP: + rounding = FE_UPWARD; + break; + case _MM_ROUND_TOWARD_ZERO: + rounding = FE_TOWARDZERO; + break; + default: + // rounding must be _MM_ROUND_NEAREST, _MM_ROUND_DOWN, _MM_ROUND_UP, + // _MM_ROUND_TOWARD_ZERO. all the other invalid values we treat them as + // FE_TOWARDZERO (truncate). + rounding = FE_TOWARDZERO; + } + fesetround(rounding); +} + +// Copy single-precision (32-bit) floating-point element a to the lower element +// of dst, and zero the upper 3 elements. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_ss +FORCE_INLINE __m128 _mm_set_ss(float a) +{ + return vreinterpretq_m128_f32(vsetq_lane_f32(a, vdupq_n_f32(0), 0)); +} + +// Broadcast single-precision (32-bit) floating-point value a to all elements of +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_ps +FORCE_INLINE __m128 _mm_set1_ps(float _w) +{ + return vreinterpretq_m128_f32(vdupq_n_f32(_w)); +} + +// Set the MXCSR control and status register with the value in unsigned 32-bit +// integer a. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setcsr +// FIXME: _mm_setcsr() implementation supports changing the rounding mode only. +FORCE_INLINE void _mm_setcsr(unsigned int a) +{ + _MM_SET_ROUNDING_MODE(a); +} + +// Get the unsigned 32-bit value of the MXCSR control and status register. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_getcsr +// FIXME: _mm_getcsr() implementation supports reading the rounding mode only. +FORCE_INLINE unsigned int _mm_getcsr(void) +{ + return _MM_GET_ROUNDING_MODE(); +} + +// Set packed single-precision (32-bit) floating-point elements in dst with the +// supplied values in reverse order. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_ps +FORCE_INLINE __m128 _mm_setr_ps(float w, float z, float y, float x) +{ + float ALIGN_STRUCT(16) data[4] = {w, z, y, x}; + return vreinterpretq_m128_f32(vld1q_f32(data)); +} + +// Return vector of type __m128 with all elements set to zero. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setzero_ps +FORCE_INLINE __m128 _mm_setzero_ps(void) +{ + return vreinterpretq_m128_f32(vdupq_n_f32(0)); +} + +// Shuffle 16-bit integers in a using the control in imm8, and store the results +// in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_pi16 +#ifdef _sse2neon_shuffle +#define _mm_shuffle_pi16(a, imm) \ + vreinterpret_m64_s16(vshuffle_s16( \ + vreinterpret_s16_m64(a), vreinterpret_s16_m64(a), (imm & 0x3), \ + ((imm >> 2) & 0x3), ((imm >> 4) & 0x3), ((imm >> 6) & 0x3))) +#else +#define _mm_shuffle_pi16(a, imm) \ + _sse2neon_define1( \ + __m64, a, int16x4_t ret; \ + ret = vmov_n_s16( \ + vget_lane_s16(vreinterpret_s16_m64(_a), (imm) & (0x3))); \ + ret = vset_lane_s16( \ + vget_lane_s16(vreinterpret_s16_m64(_a), ((imm) >> 2) & 0x3), ret, \ + 1); \ + ret = vset_lane_s16( \ + vget_lane_s16(vreinterpret_s16_m64(_a), ((imm) >> 4) & 0x3), ret, \ + 2); \ + ret = vset_lane_s16( \ + vget_lane_s16(vreinterpret_s16_m64(_a), ((imm) >> 6) & 0x3), ret, \ + 3); \ + _sse2neon_return(vreinterpret_m64_s16(ret));) +#endif + +// Perform a serializing operation on all store-to-memory instructions that were +// issued prior to this instruction. Guarantees that every store instruction +// that precedes, in program order, is globally visible before any store +// instruction which follows the fence in program order. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sfence +FORCE_INLINE void _mm_sfence(void) +{ + _sse2neon_smp_mb(); +} + +// Perform a serializing operation on all load-from-memory and store-to-memory +// instructions that were issued prior to this instruction. Guarantees that +// every memory access that precedes, in program order, the memory fence +// instruction is globally visible before any memory instruction which follows +// the fence in program order. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mfence +FORCE_INLINE void _mm_mfence(void) +{ + _sse2neon_smp_mb(); +} + +// Perform a serializing operation on all load-from-memory instructions that +// were issued prior to this instruction. Guarantees that every load instruction +// that precedes, in program order, is globally visible before any load +// instruction which follows the fence in program order. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_lfence +FORCE_INLINE void _mm_lfence(void) +{ + _sse2neon_smp_mb(); +} + +// FORCE_INLINE __m128 _mm_shuffle_ps(__m128 a, __m128 b, __constrange(0,255) +// int imm) +#ifdef _sse2neon_shuffle +#define _mm_shuffle_ps(a, b, imm) \ + __extension__({ \ + float32x4_t _input1 = vreinterpretq_f32_m128(a); \ + float32x4_t _input2 = vreinterpretq_f32_m128(b); \ + float32x4_t _shuf = \ + vshuffleq_s32(_input1, _input2, (imm) & (0x3), ((imm) >> 2) & 0x3, \ + (((imm) >> 4) & 0x3) + 4, (((imm) >> 6) & 0x3) + 4); \ + vreinterpretq_m128_f32(_shuf); \ + }) +#else // generic +#define _mm_shuffle_ps(a, b, imm) \ + _sse2neon_define2( \ + __m128, a, b, __m128 ret; switch (imm) { \ + case _MM_SHUFFLE(1, 0, 3, 2): \ + ret = _mm_shuffle_ps_1032(_a, _b); \ + break; \ + case _MM_SHUFFLE(2, 3, 0, 1): \ + ret = _mm_shuffle_ps_2301(_a, _b); \ + break; \ + case _MM_SHUFFLE(0, 3, 2, 1): \ + ret = _mm_shuffle_ps_0321(_a, _b); \ + break; \ + case _MM_SHUFFLE(2, 1, 0, 3): \ + ret = _mm_shuffle_ps_2103(_a, _b); \ + break; \ + case _MM_SHUFFLE(1, 0, 1, 0): \ + ret = _mm_movelh_ps(_a, _b); \ + break; \ + case _MM_SHUFFLE(1, 0, 0, 1): \ + ret = _mm_shuffle_ps_1001(_a, _b); \ + break; \ + case _MM_SHUFFLE(0, 1, 0, 1): \ + ret = _mm_shuffle_ps_0101(_a, _b); \ + break; \ + case _MM_SHUFFLE(3, 2, 1, 0): \ + ret = _mm_shuffle_ps_3210(_a, _b); \ + break; \ + case _MM_SHUFFLE(0, 0, 1, 1): \ + ret = _mm_shuffle_ps_0011(_a, _b); \ + break; \ + case _MM_SHUFFLE(0, 0, 2, 2): \ + ret = _mm_shuffle_ps_0022(_a, _b); \ + break; \ + case _MM_SHUFFLE(2, 2, 0, 0): \ + ret = _mm_shuffle_ps_2200(_a, _b); \ + break; \ + case _MM_SHUFFLE(3, 2, 0, 2): \ + ret = _mm_shuffle_ps_3202(_a, _b); \ + break; \ + case _MM_SHUFFLE(3, 2, 3, 2): \ + ret = _mm_movehl_ps(_b, _a); \ + break; \ + case _MM_SHUFFLE(1, 1, 3, 3): \ + ret = _mm_shuffle_ps_1133(_a, _b); \ + break; \ + case _MM_SHUFFLE(2, 0, 1, 0): \ + ret = _mm_shuffle_ps_2010(_a, _b); \ + break; \ + case _MM_SHUFFLE(2, 0, 0, 1): \ + ret = _mm_shuffle_ps_2001(_a, _b); \ + break; \ + case _MM_SHUFFLE(2, 0, 3, 2): \ + ret = _mm_shuffle_ps_2032(_a, _b); \ + break; \ + default: \ + ret = _mm_shuffle_ps_default(_a, _b, (imm)); \ + break; \ + } _sse2neon_return(ret);) +#endif + +// Compute the square root of packed single-precision (32-bit) floating-point +// elements in a, and store the results in dst. +// Due to ARMv7-A NEON's lack of a precise square root intrinsic, we implement +// square root by multiplying input in with its reciprocal square root before +// using the Newton-Raphson method to approximate the results. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sqrt_ps +FORCE_INLINE __m128 _mm_sqrt_ps(__m128 in) +{ +#if (defined(__aarch64__) || defined(_M_ARM64)) && !SSE2NEON_PRECISE_SQRT + return vreinterpretq_m128_f32(vsqrtq_f32(vreinterpretq_f32_m128(in))); +#else + float32x4_t recip = vrsqrteq_f32(vreinterpretq_f32_m128(in)); + + // Test for vrsqrteq_f32(0) -> positive infinity case. + // Change to zero, so that s * 1/sqrt(s) result is zero too. + const uint32x4_t pos_inf = vdupq_n_u32(0x7F800000); + const uint32x4_t div_by_zero = + vceqq_u32(pos_inf, vreinterpretq_u32_f32(recip)); + recip = vreinterpretq_f32_u32( + vandq_u32(vmvnq_u32(div_by_zero), vreinterpretq_u32_f32(recip))); + + recip = vmulq_f32( + vrsqrtsq_f32(vmulq_f32(recip, recip), vreinterpretq_f32_m128(in)), + recip); + // Additional Netwon-Raphson iteration for accuracy + recip = vmulq_f32( + vrsqrtsq_f32(vmulq_f32(recip, recip), vreinterpretq_f32_m128(in)), + recip); + + // sqrt(s) = s * 1/sqrt(s) + return vreinterpretq_m128_f32(vmulq_f32(vreinterpretq_f32_m128(in), recip)); +#endif +} + +// Compute the square root of the lower single-precision (32-bit) floating-point +// element in a, store the result in the lower element of dst, and copy the +// upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sqrt_ss +FORCE_INLINE __m128 _mm_sqrt_ss(__m128 in) +{ + float32_t value = + vgetq_lane_f32(vreinterpretq_f32_m128(_mm_sqrt_ps(in)), 0); + return vreinterpretq_m128_f32( + vsetq_lane_f32(value, vreinterpretq_f32_m128(in), 0)); +} + +// Store 128-bits (composed of 4 packed single-precision (32-bit) floating-point +// elements) from a into memory. mem_addr must be aligned on a 16-byte boundary +// or a general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_ps +FORCE_INLINE void _mm_store_ps(float *p, __m128 a) +{ + vst1q_f32(p, vreinterpretq_f32_m128(a)); +} + +// Store the lower single-precision (32-bit) floating-point element from a into +// 4 contiguous elements in memory. mem_addr must be aligned on a 16-byte +// boundary or a general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_ps1 +FORCE_INLINE void _mm_store_ps1(float *p, __m128 a) +{ + float32_t a0 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); + vst1q_f32(p, vdupq_n_f32(a0)); +} + +// Store the lower single-precision (32-bit) floating-point element from a into +// memory. mem_addr does not need to be aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_ss +FORCE_INLINE void _mm_store_ss(float *p, __m128 a) +{ + vst1q_lane_f32(p, vreinterpretq_f32_m128(a), 0); +} + +// Store the lower single-precision (32-bit) floating-point element from a into +// 4 contiguous elements in memory. mem_addr must be aligned on a 16-byte +// boundary or a general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store1_ps +#define _mm_store1_ps _mm_store_ps1 + +// Store the upper 2 single-precision (32-bit) floating-point elements from a +// into memory. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeh_pi +FORCE_INLINE void _mm_storeh_pi(__m64 *p, __m128 a) +{ + *p = vreinterpret_m64_f32(vget_high_f32(a)); +} + +// Store the lower 2 single-precision (32-bit) floating-point elements from a +// into memory. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storel_pi +FORCE_INLINE void _mm_storel_pi(__m64 *p, __m128 a) +{ + *p = vreinterpret_m64_f32(vget_low_f32(a)); +} + +// Store 4 single-precision (32-bit) floating-point elements from a into memory +// in reverse order. mem_addr must be aligned on a 16-byte boundary or a +// general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storer_ps +FORCE_INLINE void _mm_storer_ps(float *p, __m128 a) +{ + float32x4_t tmp = vrev64q_f32(vreinterpretq_f32_m128(a)); + float32x4_t rev = vextq_f32(tmp, tmp, 2); + vst1q_f32(p, rev); +} + +// Store 128-bits (composed of 4 packed single-precision (32-bit) floating-point +// elements) from a into memory. mem_addr does not need to be aligned on any +// particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_ps +FORCE_INLINE void _mm_storeu_ps(float *p, __m128 a) +{ + vst1q_f32(p, vreinterpretq_f32_m128(a)); +} + +// Stores 16-bits of integer data a at the address p. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_si16 +FORCE_INLINE void _mm_storeu_si16(void *p, __m128i a) +{ + vst1q_lane_s16((int16_t *) p, vreinterpretq_s16_m128i(a), 0); +} + +// Stores 64-bits of integer data a at the address p. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_si64 +FORCE_INLINE void _mm_storeu_si64(void *p, __m128i a) +{ + vst1q_lane_s64((int64_t *) p, vreinterpretq_s64_m128i(a), 0); +} + +// Store 64-bits of integer data from a into memory using a non-temporal memory +// hint. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_pi +FORCE_INLINE void _mm_stream_pi(__m64 *p, __m64 a) +{ + vst1_s64((int64_t *) p, vreinterpret_s64_m64(a)); +} + +// Store 128-bits (composed of 4 packed single-precision (32-bit) floating- +// point elements) from a into memory using a non-temporal memory hint. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_ps +FORCE_INLINE void _mm_stream_ps(float *p, __m128 a) +{ +#if __has_builtin(__builtin_nontemporal_store) + __builtin_nontemporal_store(a, (float32x4_t *) p); +#else + vst1q_f32(p, vreinterpretq_f32_m128(a)); +#endif +} + +// Subtract packed single-precision (32-bit) floating-point elements in b from +// packed single-precision (32-bit) floating-point elements in a, and store the +// results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_ps +FORCE_INLINE __m128 _mm_sub_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_f32( + vsubq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Subtract the lower single-precision (32-bit) floating-point element in b from +// the lower single-precision (32-bit) floating-point element in a, store the +// result in the lower element of dst, and copy the upper 3 packed elements from +// a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_ss +FORCE_INLINE __m128 _mm_sub_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_sub_ps(a, b)); +} + +// Macro: Transpose the 4x4 matrix formed by the 4 rows of single-precision +// (32-bit) floating-point elements in row0, row1, row2, and row3, and store the +// transposed matrix in these vectors (row0 now contains column 0, etc.). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=MM_TRANSPOSE4_PS +#define _MM_TRANSPOSE4_PS(row0, row1, row2, row3) \ + do { \ + float32x4x2_t ROW01 = vtrnq_f32(row0, row1); \ + float32x4x2_t ROW23 = vtrnq_f32(row2, row3); \ + row0 = vcombine_f32(vget_low_f32(ROW01.val[0]), \ + vget_low_f32(ROW23.val[0])); \ + row1 = vcombine_f32(vget_low_f32(ROW01.val[1]), \ + vget_low_f32(ROW23.val[1])); \ + row2 = vcombine_f32(vget_high_f32(ROW01.val[0]), \ + vget_high_f32(ROW23.val[0])); \ + row3 = vcombine_f32(vget_high_f32(ROW01.val[1]), \ + vget_high_f32(ROW23.val[1])); \ + } while (0) + +// according to the documentation, these intrinsics behave the same as the +// non-'u' versions. We'll just alias them here. +#define _mm_ucomieq_ss _mm_comieq_ss +#define _mm_ucomige_ss _mm_comige_ss +#define _mm_ucomigt_ss _mm_comigt_ss +#define _mm_ucomile_ss _mm_comile_ss +#define _mm_ucomilt_ss _mm_comilt_ss +#define _mm_ucomineq_ss _mm_comineq_ss + +// Return vector of type __m128i with undefined elements. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_undefined_si128 +FORCE_INLINE __m128i _mm_undefined_si128(void) +{ +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wuninitialized" +#endif + __m128i a; +#if defined(_MSC_VER) + a = _mm_setzero_si128(); +#endif + return a; +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic pop +#endif +} + +// Return vector of type __m128 with undefined elements. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_undefined_ps +FORCE_INLINE __m128 _mm_undefined_ps(void) +{ +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wuninitialized" +#endif + __m128 a; +#if defined(_MSC_VER) + a = _mm_setzero_ps(); +#endif + return a; +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic pop +#endif +} + +// Unpack and interleave single-precision (32-bit) floating-point elements from +// the high half a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_ps +FORCE_INLINE __m128 _mm_unpackhi_ps(__m128 a, __m128 b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128_f32( + vzip2q_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#else + float32x2_t a1 = vget_high_f32(vreinterpretq_f32_m128(a)); + float32x2_t b1 = vget_high_f32(vreinterpretq_f32_m128(b)); + float32x2x2_t result = vzip_f32(a1, b1); + return vreinterpretq_m128_f32(vcombine_f32(result.val[0], result.val[1])); +#endif +} + +// Unpack and interleave single-precision (32-bit) floating-point elements from +// the low half of a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_ps +FORCE_INLINE __m128 _mm_unpacklo_ps(__m128 a, __m128 b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128_f32( + vzip1q_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#else + float32x2_t a1 = vget_low_f32(vreinterpretq_f32_m128(a)); + float32x2_t b1 = vget_low_f32(vreinterpretq_f32_m128(b)); + float32x2x2_t result = vzip_f32(a1, b1); + return vreinterpretq_m128_f32(vcombine_f32(result.val[0], result.val[1])); +#endif +} + +// Compute the bitwise XOR of packed single-precision (32-bit) floating-point +// elements in a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_xor_ps +FORCE_INLINE __m128 _mm_xor_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_s32( + veorq_s32(vreinterpretq_s32_m128(a), vreinterpretq_s32_m128(b))); +} + +/* SSE2 */ + +// Add packed 16-bit integers in a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_epi16 +FORCE_INLINE __m128i _mm_add_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vaddq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Add packed 32-bit integers in a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_epi32 +FORCE_INLINE __m128i _mm_add_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vaddq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Add packed 64-bit integers in a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_epi64 +FORCE_INLINE __m128i _mm_add_epi64(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s64( + vaddq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); +} + +// Add packed 8-bit integers in a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_epi8 +FORCE_INLINE __m128i _mm_add_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vaddq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Add packed double-precision (64-bit) floating-point elements in a and b, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_pd +FORCE_INLINE __m128d _mm_add_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64( + vaddq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + double c[2]; + c[0] = a0 + b0; + c[1] = a1 + b1; + return vld1q_f32((float32_t *) c); +#endif +} + +// Add the lower double-precision (64-bit) floating-point element in a and b, +// store the result in the lower element of dst, and copy the upper element from +// a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_sd +FORCE_INLINE __m128d _mm_add_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return _mm_move_sd(a, _mm_add_pd(a, b)); +#else + double a0, a1, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double c[2]; + c[0] = a0 + b0; + c[1] = a1; + return vld1q_f32((float32_t *) c); +#endif +} + +// Add 64-bit integers a and b, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_si64 +FORCE_INLINE __m64 _mm_add_si64(__m64 a, __m64 b) +{ + return vreinterpret_m64_s64( + vadd_s64(vreinterpret_s64_m64(a), vreinterpret_s64_m64(b))); +} + +// Add packed signed 16-bit integers in a and b using saturation, and store the +// results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_adds_epi16 +FORCE_INLINE __m128i _mm_adds_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vqaddq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Add packed signed 8-bit integers in a and b using saturation, and store the +// results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_adds_epi8 +FORCE_INLINE __m128i _mm_adds_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vqaddq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Add packed unsigned 16-bit integers in a and b using saturation, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_adds_epu16 +FORCE_INLINE __m128i _mm_adds_epu16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vqaddq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); +} + +// Add packed unsigned 8-bit integers in a and b using saturation, and store the +// results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_adds_epu8 +FORCE_INLINE __m128i _mm_adds_epu8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vqaddq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); +} + +// Compute the bitwise AND of packed double-precision (64-bit) floating-point +// elements in a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_and_pd +FORCE_INLINE __m128d _mm_and_pd(__m128d a, __m128d b) +{ + return vreinterpretq_m128d_s64( + vandq_s64(vreinterpretq_s64_m128d(a), vreinterpretq_s64_m128d(b))); +} + +// Compute the bitwise AND of 128 bits (representing integer data) in a and b, +// and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_and_si128 +FORCE_INLINE __m128i _mm_and_si128(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vandq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Compute the bitwise NOT of packed double-precision (64-bit) floating-point +// elements in a and then AND with b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_andnot_pd +FORCE_INLINE __m128d _mm_andnot_pd(__m128d a, __m128d b) +{ + // *NOTE* argument swap + return vreinterpretq_m128d_s64( + vbicq_s64(vreinterpretq_s64_m128d(b), vreinterpretq_s64_m128d(a))); +} + +// Compute the bitwise NOT of 128 bits (representing integer data) in a and then +// AND with b, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_andnot_si128 +FORCE_INLINE __m128i _mm_andnot_si128(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vbicq_s32(vreinterpretq_s32_m128i(b), + vreinterpretq_s32_m128i(a))); // *NOTE* argument swap +} + +// Average packed unsigned 16-bit integers in a and b, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_avg_epu16 +FORCE_INLINE __m128i _mm_avg_epu16(__m128i a, __m128i b) +{ + return (__m128i) vrhaddq_u16(vreinterpretq_u16_m128i(a), + vreinterpretq_u16_m128i(b)); +} + +// Average packed unsigned 8-bit integers in a and b, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_avg_epu8 +FORCE_INLINE __m128i _mm_avg_epu8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vrhaddq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); +} + +// Shift a left by imm8 bytes while shifting in zeros, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_bslli_si128 +#define _mm_bslli_si128(a, imm) _mm_slli_si128(a, imm) + +// Shift a right by imm8 bytes while shifting in zeros, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_bsrli_si128 +#define _mm_bsrli_si128(a, imm) _mm_srli_si128(a, imm) + +// Cast vector of type __m128d to type __m128. This intrinsic is only used for +// compilation and does not generate any instructions, thus it has zero latency. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castpd_ps +FORCE_INLINE __m128 _mm_castpd_ps(__m128d a) +{ + return vreinterpretq_m128_s64(vreinterpretq_s64_m128d(a)); +} + +// Cast vector of type __m128d to type __m128i. This intrinsic is only used for +// compilation and does not generate any instructions, thus it has zero latency. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castpd_si128 +FORCE_INLINE __m128i _mm_castpd_si128(__m128d a) +{ + return vreinterpretq_m128i_s64(vreinterpretq_s64_m128d(a)); +} + +// Cast vector of type __m128 to type __m128d. This intrinsic is only used for +// compilation and does not generate any instructions, thus it has zero latency. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castps_pd +FORCE_INLINE __m128d _mm_castps_pd(__m128 a) +{ + return vreinterpretq_m128d_s32(vreinterpretq_s32_m128(a)); +} + +// Cast vector of type __m128 to type __m128i. This intrinsic is only used for +// compilation and does not generate any instructions, thus it has zero latency. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castps_si128 +FORCE_INLINE __m128i _mm_castps_si128(__m128 a) +{ + return vreinterpretq_m128i_s32(vreinterpretq_s32_m128(a)); +} + +// Cast vector of type __m128i to type __m128d. This intrinsic is only used for +// compilation and does not generate any instructions, thus it has zero latency. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castsi128_pd +FORCE_INLINE __m128d _mm_castsi128_pd(__m128i a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64(vreinterpretq_f64_m128i(a)); +#else + return vreinterpretq_m128d_f32(vreinterpretq_f32_m128i(a)); +#endif +} + +// Cast vector of type __m128i to type __m128. This intrinsic is only used for +// compilation and does not generate any instructions, thus it has zero latency. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castsi128_ps +FORCE_INLINE __m128 _mm_castsi128_ps(__m128i a) +{ + return vreinterpretq_m128_s32(vreinterpretq_s32_m128i(a)); +} + +// Invalidate and flush the cache line that contains p from all levels of the +// cache hierarchy. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_clflush +#if defined(__APPLE__) +#include +#endif +FORCE_INLINE void _mm_clflush(void const *p) +{ + (void) p; + + /* sys_icache_invalidate is supported since macOS 10.5. + * However, it does not work on non-jailbroken iOS devices, although the + * compilation is successful. + */ +#if defined(__APPLE__) + sys_icache_invalidate((void *) (uintptr_t) p, SSE2NEON_CACHELINE_SIZE); +#elif defined(__GNUC__) || defined(__clang__) + uintptr_t ptr = (uintptr_t) p; + __builtin___clear_cache((char *) ptr, + (char *) ptr + SSE2NEON_CACHELINE_SIZE); +#elif (_MSC_VER) && SSE2NEON_INCLUDE_WINDOWS_H + FlushInstructionCache(GetCurrentProcess(), p, SSE2NEON_CACHELINE_SIZE); +#endif +} + +// Compare packed 16-bit integers in a and b for equality, and store the results +// in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_epi16 +FORCE_INLINE __m128i _mm_cmpeq_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vceqq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Compare packed 32-bit integers in a and b for equality, and store the results +// in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_epi32 +FORCE_INLINE __m128i _mm_cmpeq_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u32( + vceqq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Compare packed 8-bit integers in a and b for equality, and store the results +// in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_epi8 +FORCE_INLINE __m128i _mm_cmpeq_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vceqq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// for equality, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_pd +FORCE_INLINE __m128d _mm_cmpeq_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_u64( + vceqq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + // (a == b) -> (a_lo == b_lo) && (a_hi == b_hi) + uint32x4_t cmp = + vceqq_u32(vreinterpretq_u32_m128d(a), vreinterpretq_u32_m128d(b)); + uint32x4_t swapped = vrev64q_u32(cmp); + return vreinterpretq_m128d_u32(vandq_u32(cmp, swapped)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b for equality, store the result in the lower element of dst, and copy the +// upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_sd +FORCE_INLINE __m128d _mm_cmpeq_sd(__m128d a, __m128d b) +{ + return _mm_move_sd(a, _mm_cmpeq_pd(a, b)); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// for greater-than-or-equal, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpge_pd +FORCE_INLINE __m128d _mm_cmpge_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_u64( + vcgeq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + uint64_t d[2]; + d[0] = a0 >= b0 ? ~UINT64_C(0) : UINT64_C(0); + d[1] = a1 >= b1 ? ~UINT64_C(0) : UINT64_C(0); + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b for greater-than-or-equal, store the result in the lower element of dst, +// and copy the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpge_sd +FORCE_INLINE __m128d _mm_cmpge_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return _mm_move_sd(a, _mm_cmpge_pd(a, b)); +#else + // expand "_mm_cmpge_pd()" to reduce unnecessary operations + double a0, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + uint64_t a1 = vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + uint64_t d[2]; + d[0] = a0 >= b0 ? ~UINT64_C(0) : UINT64_C(0); + d[1] = a1; + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare packed signed 16-bit integers in a and b for greater-than, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_epi16 +FORCE_INLINE __m128i _mm_cmpgt_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vcgtq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Compare packed signed 32-bit integers in a and b for greater-than, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_epi32 +FORCE_INLINE __m128i _mm_cmpgt_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u32( + vcgtq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Compare packed signed 8-bit integers in a and b for greater-than, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_epi8 +FORCE_INLINE __m128i _mm_cmpgt_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vcgtq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// for greater-than, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_pd +FORCE_INLINE __m128d _mm_cmpgt_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_u64( + vcgtq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + uint64_t d[2]; + d[0] = a0 > b0 ? ~UINT64_C(0) : UINT64_C(0); + d[1] = a1 > b1 ? ~UINT64_C(0) : UINT64_C(0); + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b for greater-than, store the result in the lower element of dst, and copy +// the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_sd +FORCE_INLINE __m128d _mm_cmpgt_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return _mm_move_sd(a, _mm_cmpgt_pd(a, b)); +#else + // expand "_mm_cmpge_pd()" to reduce unnecessary operations + double a0, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + uint64_t a1 = vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + uint64_t d[2]; + d[0] = a0 > b0 ? ~UINT64_C(0) : UINT64_C(0); + d[1] = a1; + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// for less-than-or-equal, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmple_pd +FORCE_INLINE __m128d _mm_cmple_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_u64( + vcleq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + uint64_t d[2]; + d[0] = a0 <= b0 ? ~UINT64_C(0) : UINT64_C(0); + d[1] = a1 <= b1 ? ~UINT64_C(0) : UINT64_C(0); + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b for less-than-or-equal, store the result in the lower element of dst, and +// copy the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmple_sd +FORCE_INLINE __m128d _mm_cmple_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return _mm_move_sd(a, _mm_cmple_pd(a, b)); +#else + // expand "_mm_cmpge_pd()" to reduce unnecessary operations + double a0, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + uint64_t a1 = vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + uint64_t d[2]; + d[0] = a0 <= b0 ? ~UINT64_C(0) : UINT64_C(0); + d[1] = a1; + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare packed signed 16-bit integers in a and b for less-than, and store the +// results in dst. Note: This intrinsic emits the pcmpgtw instruction with the +// order of the operands switched. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_epi16 +FORCE_INLINE __m128i _mm_cmplt_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vcltq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Compare packed signed 32-bit integers in a and b for less-than, and store the +// results in dst. Note: This intrinsic emits the pcmpgtd instruction with the +// order of the operands switched. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_epi32 +FORCE_INLINE __m128i _mm_cmplt_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u32( + vcltq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Compare packed signed 8-bit integers in a and b for less-than, and store the +// results in dst. Note: This intrinsic emits the pcmpgtb instruction with the +// order of the operands switched. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_epi8 +FORCE_INLINE __m128i _mm_cmplt_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vcltq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// for less-than, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_pd +FORCE_INLINE __m128d _mm_cmplt_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_u64( + vcltq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + uint64_t d[2]; + d[0] = a0 < b0 ? ~UINT64_C(0) : UINT64_C(0); + d[1] = a1 < b1 ? ~UINT64_C(0) : UINT64_C(0); + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b for less-than, store the result in the lower element of dst, and copy the +// upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_sd +FORCE_INLINE __m128d _mm_cmplt_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return _mm_move_sd(a, _mm_cmplt_pd(a, b)); +#else + double a0, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + uint64_t a1 = vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + uint64_t d[2]; + d[0] = a0 < b0 ? ~UINT64_C(0) : UINT64_C(0); + d[1] = a1; + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// for not-equal, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpneq_pd +FORCE_INLINE __m128d _mm_cmpneq_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_s32(vmvnq_s32(vreinterpretq_s32_u64( + vceqq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))))); +#else + // (a == b) -> (a_lo == b_lo) && (a_hi == b_hi) + uint32x4_t cmp = + vceqq_u32(vreinterpretq_u32_m128d(a), vreinterpretq_u32_m128d(b)); + uint32x4_t swapped = vrev64q_u32(cmp); + return vreinterpretq_m128d_u32(vmvnq_u32(vandq_u32(cmp, swapped))); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b for not-equal, store the result in the lower element of dst, and copy the +// upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpneq_sd +FORCE_INLINE __m128d _mm_cmpneq_sd(__m128d a, __m128d b) +{ + return _mm_move_sd(a, _mm_cmpneq_pd(a, b)); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// for not-greater-than-or-equal, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnge_pd +FORCE_INLINE __m128d _mm_cmpnge_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_u64(veorq_u64( + vcgeq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b)), + vdupq_n_u64(UINT64_MAX))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + uint64_t d[2]; + d[0] = !(a0 >= b0) ? ~UINT64_C(0) : UINT64_C(0); + d[1] = !(a1 >= b1) ? ~UINT64_C(0) : UINT64_C(0); + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b for not-greater-than-or-equal, store the result in the lower element of +// dst, and copy the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnge_sd +FORCE_INLINE __m128d _mm_cmpnge_sd(__m128d a, __m128d b) +{ + return _mm_move_sd(a, _mm_cmpnge_pd(a, b)); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// for not-greater-than, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_cmpngt_pd +FORCE_INLINE __m128d _mm_cmpngt_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_u64(veorq_u64( + vcgtq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b)), + vdupq_n_u64(UINT64_MAX))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + uint64_t d[2]; + d[0] = !(a0 > b0) ? ~UINT64_C(0) : UINT64_C(0); + d[1] = !(a1 > b1) ? ~UINT64_C(0) : UINT64_C(0); + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b for not-greater-than, store the result in the lower element of dst, and +// copy the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpngt_sd +FORCE_INLINE __m128d _mm_cmpngt_sd(__m128d a, __m128d b) +{ + return _mm_move_sd(a, _mm_cmpngt_pd(a, b)); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// for not-less-than-or-equal, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnle_pd +FORCE_INLINE __m128d _mm_cmpnle_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_u64(veorq_u64( + vcleq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b)), + vdupq_n_u64(UINT64_MAX))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + uint64_t d[2]; + d[0] = !(a0 <= b0) ? ~UINT64_C(0) : UINT64_C(0); + d[1] = !(a1 <= b1) ? ~UINT64_C(0) : UINT64_C(0); + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b for not-less-than-or-equal, store the result in the lower element of dst, +// and copy the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnle_sd +FORCE_INLINE __m128d _mm_cmpnle_sd(__m128d a, __m128d b) +{ + return _mm_move_sd(a, _mm_cmpnle_pd(a, b)); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// for not-less-than, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnlt_pd +FORCE_INLINE __m128d _mm_cmpnlt_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_u64(veorq_u64( + vcltq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b)), + vdupq_n_u64(UINT64_MAX))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + uint64_t d[2]; + d[0] = !(a0 < b0) ? ~UINT64_C(0) : UINT64_C(0); + d[1] = !(a1 < b1) ? ~UINT64_C(0) : UINT64_C(0); + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b for not-less-than, store the result in the lower element of dst, and copy +// the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnlt_sd +FORCE_INLINE __m128d _mm_cmpnlt_sd(__m128d a, __m128d b) +{ + return _mm_move_sd(a, _mm_cmpnlt_pd(a, b)); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// to see if neither is NaN, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpord_pd +FORCE_INLINE __m128d _mm_cmpord_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + // Excluding NaNs, any two floating point numbers can be compared. + uint64x2_t not_nan_a = + vceqq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(a)); + uint64x2_t not_nan_b = + vceqq_f64(vreinterpretq_f64_m128d(b), vreinterpretq_f64_m128d(b)); + return vreinterpretq_m128d_u64(vandq_u64(not_nan_a, not_nan_b)); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + uint64_t d[2]; + d[0] = (a0 == a0 && b0 == b0) ? ~UINT64_C(0) : UINT64_C(0); + d[1] = (a1 == a1 && b1 == b1) ? ~UINT64_C(0) : UINT64_C(0); + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b to see if neither is NaN, store the result in the lower element of dst, and +// copy the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpord_sd +FORCE_INLINE __m128d _mm_cmpord_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return _mm_move_sd(a, _mm_cmpord_pd(a, b)); +#else + double a0, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + uint64_t a1 = vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + uint64_t d[2]; + d[0] = (a0 == a0 && b0 == b0) ? ~UINT64_C(0) : UINT64_C(0); + d[1] = a1; + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// to see if either is NaN, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpunord_pd +FORCE_INLINE __m128d _mm_cmpunord_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + // Two NaNs are not equal in comparison operation. + uint64x2_t not_nan_a = + vceqq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(a)); + uint64x2_t not_nan_b = + vceqq_f64(vreinterpretq_f64_m128d(b), vreinterpretq_f64_m128d(b)); + return vreinterpretq_m128d_s32( + vmvnq_s32(vreinterpretq_s32_u64(vandq_u64(not_nan_a, not_nan_b)))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + uint64_t d[2]; + d[0] = (a0 == a0 && b0 == b0) ? UINT64_C(0) : ~UINT64_C(0); + d[1] = (a1 == a1 && b1 == b1) ? UINT64_C(0) : ~UINT64_C(0); + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b to see if either is NaN, store the result in the lower element of dst, and +// copy the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpunord_sd +FORCE_INLINE __m128d _mm_cmpunord_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return _mm_move_sd(a, _mm_cmpunord_pd(a, b)); +#else + double a0, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + uint64_t a1 = vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + uint64_t d[2]; + d[0] = (a0 == a0 && b0 == b0) ? UINT64_C(0) : ~UINT64_C(0); + d[1] = a1; + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point element in a and b +// for greater-than-or-equal, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comige_sd +FORCE_INLINE int _mm_comige_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vgetq_lane_u64(vcgeq_f64(a, b), 0) & 0x1; +#else + double a0, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + return a0 >= b0; +#endif +} + +// Compare the lower double-precision (64-bit) floating-point element in a and b +// for greater-than, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comigt_sd +FORCE_INLINE int _mm_comigt_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vgetq_lane_u64(vcgtq_f64(a, b), 0) & 0x1; +#else + double a0, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + + return a0 > b0; +#endif +} + +// Compare the lower double-precision (64-bit) floating-point element in a and b +// for less-than-or-equal, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comile_sd +FORCE_INLINE int _mm_comile_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vgetq_lane_u64(vcleq_f64(a, b), 0) & 0x1; +#else + double a0, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + + return a0 <= b0; +#endif +} + +// Compare the lower double-precision (64-bit) floating-point element in a and b +// for less-than, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comilt_sd +FORCE_INLINE int _mm_comilt_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vgetq_lane_u64(vcltq_f64(a, b), 0) & 0x1; +#else + double a0, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + + return a0 < b0; +#endif +} + +// Compare the lower double-precision (64-bit) floating-point element in a and b +// for equality, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comieq_sd +FORCE_INLINE int _mm_comieq_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vgetq_lane_u64(vceqq_f64(a, b), 0) & 0x1; +#else + uint32x4_t a_not_nan = + vceqq_u32(vreinterpretq_u32_m128d(a), vreinterpretq_u32_m128d(a)); + uint32x4_t b_not_nan = + vceqq_u32(vreinterpretq_u32_m128d(b), vreinterpretq_u32_m128d(b)); + uint32x4_t a_and_b_not_nan = vandq_u32(a_not_nan, b_not_nan); + uint32x4_t a_eq_b = + vceqq_u32(vreinterpretq_u32_m128d(a), vreinterpretq_u32_m128d(b)); + uint64x2_t and_results = vandq_u64(vreinterpretq_u64_u32(a_and_b_not_nan), + vreinterpretq_u64_u32(a_eq_b)); + return vgetq_lane_u64(and_results, 0) & 0x1; +#endif +} + +// Compare the lower double-precision (64-bit) floating-point element in a and b +// for not-equal, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comineq_sd +FORCE_INLINE int _mm_comineq_sd(__m128d a, __m128d b) +{ + return !_mm_comieq_sd(a, b); +} + +// Convert packed signed 32-bit integers in a to packed double-precision +// (64-bit) floating-point elements, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi32_pd +FORCE_INLINE __m128d _mm_cvtepi32_pd(__m128i a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64( + vcvtq_f64_s64(vmovl_s32(vget_low_s32(vreinterpretq_s32_m128i(a))))); +#else + double a0 = (double) vgetq_lane_s32(vreinterpretq_s32_m128i(a), 0); + double a1 = (double) vgetq_lane_s32(vreinterpretq_s32_m128i(a), 1); + return _mm_set_pd(a1, a0); +#endif +} + +// Convert packed signed 32-bit integers in a to packed single-precision +// (32-bit) floating-point elements, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi32_ps +FORCE_INLINE __m128 _mm_cvtepi32_ps(__m128i a) +{ + return vreinterpretq_m128_f32(vcvtq_f32_s32(vreinterpretq_s32_m128i(a))); +} + +// Convert packed double-precision (64-bit) floating-point elements in a to +// packed 32-bit integers, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpd_epi32 +FORCE_INLINE __m128i _mm_cvtpd_epi32(__m128d a) +{ +// vrnd32xq_f64 not supported on clang +#if defined(__ARM_FEATURE_FRINT) && !defined(__clang__) + float64x2_t rounded = vrnd32xq_f64(vreinterpretq_f64_m128d(a)); + int64x2_t integers = vcvtq_s64_f64(rounded); + return vreinterpretq_m128i_s32( + vcombine_s32(vmovn_s64(integers), vdup_n_s32(0))); +#else + __m128d rnd = _mm_round_pd(a, _MM_FROUND_CUR_DIRECTION); + double d0, d1; + d0 = sse2neon_recast_u64_f64( + vgetq_lane_u64(vreinterpretq_u64_m128d(rnd), 0)); + d1 = sse2neon_recast_u64_f64( + vgetq_lane_u64(vreinterpretq_u64_m128d(rnd), 1)); + return _mm_set_epi32(0, 0, (int32_t) d1, (int32_t) d0); +#endif +} + +// Convert packed double-precision (64-bit) floating-point elements in a to +// packed 32-bit integers, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpd_pi32 +FORCE_INLINE __m64 _mm_cvtpd_pi32(__m128d a) +{ + __m128d rnd = _mm_round_pd(a, _MM_FROUND_CUR_DIRECTION); + double d0, d1; + d0 = sse2neon_recast_u64_f64( + vgetq_lane_u64(vreinterpretq_u64_m128d(rnd), 0)); + d1 = sse2neon_recast_u64_f64( + vgetq_lane_u64(vreinterpretq_u64_m128d(rnd), 1)); + int32_t ALIGN_STRUCT(16) data[2] = {(int32_t) d0, (int32_t) d1}; + return vreinterpret_m64_s32(vld1_s32(data)); +} + +// Convert packed double-precision (64-bit) floating-point elements in a to +// packed single-precision (32-bit) floating-point elements, and store the +// results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpd_ps +FORCE_INLINE __m128 _mm_cvtpd_ps(__m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + float32x2_t tmp = vcvt_f32_f64(vreinterpretq_f64_m128d(a)); + return vreinterpretq_m128_f32(vcombine_f32(tmp, vdup_n_f32(0))); +#else + double a0, a1; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + return _mm_set_ps(0, 0, (float) a1, (float) a0); +#endif +} + +// Convert packed signed 32-bit integers in a to packed double-precision +// (64-bit) floating-point elements, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpi32_pd +FORCE_INLINE __m128d _mm_cvtpi32_pd(__m64 a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64( + vcvtq_f64_s64(vmovl_s32(vreinterpret_s32_m64(a)))); +#else + double a0 = (double) vget_lane_s32(vreinterpret_s32_m64(a), 0); + double a1 = (double) vget_lane_s32(vreinterpret_s32_m64(a), 1); + return _mm_set_pd(a1, a0); +#endif +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 32-bit integers, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtps_epi32 +// *NOTE*. The default rounding mode on SSE is 'round to even', which ARMv7-A +// does not support! It is supported on ARMv8-A however. +FORCE_INLINE __m128i _mm_cvtps_epi32(__m128 a) +{ +#if defined(__ARM_FEATURE_FRINT) + return vreinterpretq_m128i_s32(vcvtq_s32_f32(vrnd32xq_f32(a))); +#elif (defined(__aarch64__) || defined(_M_ARM64)) || \ + defined(__ARM_FEATURE_DIRECTED_ROUNDING) + switch (_MM_GET_ROUNDING_MODE()) { + case _MM_ROUND_NEAREST: + return vreinterpretq_m128i_s32(vcvtnq_s32_f32(a)); + case _MM_ROUND_DOWN: + return vreinterpretq_m128i_s32(vcvtmq_s32_f32(a)); + case _MM_ROUND_UP: + return vreinterpretq_m128i_s32(vcvtpq_s32_f32(a)); + default: // _MM_ROUND_TOWARD_ZERO + return vreinterpretq_m128i_s32(vcvtq_s32_f32(a)); + } +#else + float *f = (float *) &a; + switch (_MM_GET_ROUNDING_MODE()) { + case _MM_ROUND_NEAREST: { + uint32x4_t signmask = vdupq_n_u32(0x80000000); + float32x4_t half = vbslq_f32(signmask, vreinterpretq_f32_m128(a), + vdupq_n_f32(0.5f)); /* +/- 0.5 */ + int32x4_t r_normal = vcvtq_s32_f32(vaddq_f32( + vreinterpretq_f32_m128(a), half)); /* round to integer: [a + 0.5]*/ + int32x4_t r_trunc = vcvtq_s32_f32( + vreinterpretq_f32_m128(a)); /* truncate to integer: [a] */ + int32x4_t plusone = vreinterpretq_s32_u32(vshrq_n_u32( + vreinterpretq_u32_s32(vnegq_s32(r_trunc)), 31)); /* 1 or 0 */ + int32x4_t r_even = vbicq_s32(vaddq_s32(r_trunc, plusone), + vdupq_n_s32(1)); /* ([a] + {0,1}) & ~1 */ + float32x4_t delta = vsubq_f32( + vreinterpretq_f32_m128(a), + vcvtq_f32_s32(r_trunc)); /* compute delta: delta = (a - [a]) */ + uint32x4_t is_delta_half = + vceqq_f32(delta, half); /* delta == +/- 0.5 */ + return vreinterpretq_m128i_s32( + vbslq_s32(is_delta_half, r_even, r_normal)); + } + case _MM_ROUND_DOWN: + return _mm_set_epi32(floorf(f[3]), floorf(f[2]), floorf(f[1]), + floorf(f[0])); + case _MM_ROUND_UP: + return _mm_set_epi32(ceilf(f[3]), ceilf(f[2]), ceilf(f[1]), + ceilf(f[0])); + default: // _MM_ROUND_TOWARD_ZERO + return _mm_set_epi32((int32_t) f[3], (int32_t) f[2], (int32_t) f[1], + (int32_t) f[0]); + } +#endif +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed double-precision (64-bit) floating-point elements, and store the +// results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtps_pd +FORCE_INLINE __m128d _mm_cvtps_pd(__m128 a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64( + vcvt_f64_f32(vget_low_f32(vreinterpretq_f32_m128(a)))); +#else + double a0 = (double) vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); + double a1 = (double) vgetq_lane_f32(vreinterpretq_f32_m128(a), 1); + return _mm_set_pd(a1, a0); +#endif +} + +// Copy the lower double-precision (64-bit) floating-point element of a to dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsd_f64 +FORCE_INLINE double _mm_cvtsd_f64(__m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return (double) vgetq_lane_f64(vreinterpretq_f64_m128d(a), 0); +#else + double _a = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + return _a; +#endif +} + +// Convert the lower double-precision (64-bit) floating-point element in a to a +// 32-bit integer, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsd_si32 +FORCE_INLINE int32_t _mm_cvtsd_si32(__m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return (int32_t) vgetq_lane_f64(vrndiq_f64(vreinterpretq_f64_m128d(a)), 0); +#else + __m128d rnd = _mm_round_pd(a, _MM_FROUND_CUR_DIRECTION); + double ret = sse2neon_recast_u64_f64( + vgetq_lane_u64(vreinterpretq_u64_m128d(rnd), 0)); + return (int32_t) ret; +#endif +} + +// Convert the lower double-precision (64-bit) floating-point element in a to a +// 64-bit integer, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsd_si64 +FORCE_INLINE int64_t _mm_cvtsd_si64(__m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return (int64_t) vgetq_lane_f64(vrndiq_f64(vreinterpretq_f64_m128d(a)), 0); +#else + __m128d rnd = _mm_round_pd(a, _MM_FROUND_CUR_DIRECTION); + double ret = sse2neon_recast_u64_f64( + vgetq_lane_u64(vreinterpretq_u64_m128d(rnd), 0)); + return (int64_t) ret; +#endif +} + +// Convert the lower double-precision (64-bit) floating-point element in a to a +// 64-bit integer, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsd_si64x +#define _mm_cvtsd_si64x _mm_cvtsd_si64 + +// Convert the lower double-precision (64-bit) floating-point element in b to a +// single-precision (32-bit) floating-point element, store the result in the +// lower element of dst, and copy the upper 3 packed elements from a to the +// upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsd_ss +FORCE_INLINE __m128 _mm_cvtsd_ss(__m128 a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128_f32(vsetq_lane_f32( + vget_lane_f32(vcvt_f32_f64(vreinterpretq_f64_m128d(b)), 0), + vreinterpretq_f32_m128(a), 0)); +#else + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + return vreinterpretq_m128_f32( + vsetq_lane_f32((float) b0, vreinterpretq_f32_m128(a), 0)); +#endif +} + +// Copy the lower 32-bit integer in a to dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi128_si32 +FORCE_INLINE int _mm_cvtsi128_si32(__m128i a) +{ + return vgetq_lane_s32(vreinterpretq_s32_m128i(a), 0); +} + +// Copy the lower 64-bit integer in a to dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi128_si64 +FORCE_INLINE int64_t _mm_cvtsi128_si64(__m128i a) +{ + return vgetq_lane_s64(vreinterpretq_s64_m128i(a), 0); +} + +// Copy the lower 64-bit integer in a to dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi128_si64x +#define _mm_cvtsi128_si64x(a) _mm_cvtsi128_si64(a) + +// Convert the signed 32-bit integer b to a double-precision (64-bit) +// floating-point element, store the result in the lower element of dst, and +// copy the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi32_sd +FORCE_INLINE __m128d _mm_cvtsi32_sd(__m128d a, int32_t b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64( + vsetq_lane_f64((double) b, vreinterpretq_f64_m128d(a), 0)); +#else + int64_t _b = sse2neon_recast_f64_s64((double) b); + return vreinterpretq_m128d_s64( + vsetq_lane_s64(_b, vreinterpretq_s64_m128d(a), 0)); +#endif +} + +// Copy the lower 64-bit integer in a to dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi128_si64x +#define _mm_cvtsi128_si64x(a) _mm_cvtsi128_si64(a) + +// Copy 32-bit integer a to the lower elements of dst, and zero the upper +// elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi32_si128 +FORCE_INLINE __m128i _mm_cvtsi32_si128(int a) +{ + return vreinterpretq_m128i_s32(vsetq_lane_s32(a, vdupq_n_s32(0), 0)); +} + +// Convert the signed 64-bit integer b to a double-precision (64-bit) +// floating-point element, store the result in the lower element of dst, and +// copy the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64_sd +FORCE_INLINE __m128d _mm_cvtsi64_sd(__m128d a, int64_t b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64( + vsetq_lane_f64((double) b, vreinterpretq_f64_m128d(a), 0)); +#else + int64_t _b = sse2neon_recast_f64_s64((double) b); + return vreinterpretq_m128d_s64( + vsetq_lane_s64(_b, vreinterpretq_s64_m128d(a), 0)); +#endif +} + +// Copy 64-bit integer a to the lower element of dst, and zero the upper +// element. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64_si128 +FORCE_INLINE __m128i _mm_cvtsi64_si128(int64_t a) +{ + return vreinterpretq_m128i_s64(vsetq_lane_s64(a, vdupq_n_s64(0), 0)); +} + +// Copy 64-bit integer a to the lower element of dst, and zero the upper +// element. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64x_si128 +#define _mm_cvtsi64x_si128(a) _mm_cvtsi64_si128(a) + +// Convert the signed 64-bit integer b to a double-precision (64-bit) +// floating-point element, store the result in the lower element of dst, and +// copy the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64x_sd +#define _mm_cvtsi64x_sd(a, b) _mm_cvtsi64_sd(a, b) + +// Convert the lower single-precision (32-bit) floating-point element in b to a +// double-precision (64-bit) floating-point element, store the result in the +// lower element of dst, and copy the upper element from a to the upper element +// of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtss_sd +FORCE_INLINE __m128d _mm_cvtss_sd(__m128d a, __m128 b) +{ + double d = (double) vgetq_lane_f32(vreinterpretq_f32_m128(b), 0); +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64( + vsetq_lane_f64(d, vreinterpretq_f64_m128d(a), 0)); +#else + return vreinterpretq_m128d_s64(vsetq_lane_s64( + sse2neon_recast_f64_s64(d), vreinterpretq_s64_m128d(a), 0)); +#endif +} + +// Convert packed double-precision (64-bit) floating-point elements in a to +// packed 32-bit integers with truncation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttpd_epi32 +FORCE_INLINE __m128i _mm_cvttpd_epi32(__m128d a) +{ + double a0, a1; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + return _mm_set_epi32(0, 0, (int32_t) a1, (int32_t) a0); +} + +// Convert packed double-precision (64-bit) floating-point elements in a to +// packed 32-bit integers with truncation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttpd_pi32 +FORCE_INLINE __m64 _mm_cvttpd_pi32(__m128d a) +{ + double a0, a1; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + int32_t ALIGN_STRUCT(16) data[2] = {(int32_t) a0, (int32_t) a1}; + return vreinterpret_m64_s32(vld1_s32(data)); +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 32-bit integers with truncation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttps_epi32 +FORCE_INLINE __m128i _mm_cvttps_epi32(__m128 a) +{ + return vreinterpretq_m128i_s32(vcvtq_s32_f32(vreinterpretq_f32_m128(a))); +} + +// Convert the lower double-precision (64-bit) floating-point element in a to a +// 32-bit integer with truncation, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttsd_si32 +FORCE_INLINE int32_t _mm_cvttsd_si32(__m128d a) +{ + double _a = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + return (int32_t) _a; +} + +// Convert the lower double-precision (64-bit) floating-point element in a to a +// 64-bit integer with truncation, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttsd_si64 +FORCE_INLINE int64_t _mm_cvttsd_si64(__m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vgetq_lane_s64(vcvtq_s64_f64(vreinterpretq_f64_m128d(a)), 0); +#else + double _a = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + return (int64_t) _a; +#endif +} + +// Convert the lower double-precision (64-bit) floating-point element in a to a +// 64-bit integer with truncation, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttsd_si64x +#define _mm_cvttsd_si64x(a) _mm_cvttsd_si64(a) + +// Divide packed double-precision (64-bit) floating-point elements in a by +// packed elements in b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_div_pd +FORCE_INLINE __m128d _mm_div_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64( + vdivq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + double c[2]; + c[0] = a0 / b0; + c[1] = a1 / b1; + return vld1q_f32((float32_t *) c); +#endif +} + +// Divide the lower double-precision (64-bit) floating-point element in a by the +// lower double-precision (64-bit) floating-point element in b, store the result +// in the lower element of dst, and copy the upper element from a to the upper +// element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_div_sd +FORCE_INLINE __m128d _mm_div_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + float64x2_t tmp = + vdivq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b)); + return vreinterpretq_m128d_f64( + vsetq_lane_f64(vgetq_lane_f64(vreinterpretq_f64_m128d(a), 1), tmp, 1)); +#else + return _mm_move_sd(a, _mm_div_pd(a, b)); +#endif +} + +// Extract a 16-bit integer from a, selected with imm8, and store the result in +// the lower element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_epi16 +// FORCE_INLINE int _mm_extract_epi16(__m128i a, __constrange(0,8) int imm) +#define _mm_extract_epi16(a, imm) \ + vgetq_lane_u16(vreinterpretq_u16_m128i(a), (imm)) + +// Copy a to dst, and insert the 16-bit integer i into dst at the location +// specified by imm8. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_insert_epi16 +// FORCE_INLINE __m128i _mm_insert_epi16(__m128i a, int b, +// __constrange(0,8) int imm) +#define _mm_insert_epi16(a, b, imm) \ + vreinterpretq_m128i_s16( \ + vsetq_lane_s16((b), vreinterpretq_s16_m128i(a), (imm))) + +// Load 128-bits (composed of 2 packed double-precision (64-bit) floating-point +// elements) from memory into dst. mem_addr must be aligned on a 16-byte +// boundary or a general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_pd +FORCE_INLINE __m128d _mm_load_pd(const double *p) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64(vld1q_f64(p)); +#else + const float *fp = (const float *) p; + float ALIGN_STRUCT(16) data[4] = {fp[0], fp[1], fp[2], fp[3]}; + return vreinterpretq_m128d_f32(vld1q_f32(data)); +#endif +} + +// Load a double-precision (64-bit) floating-point element from memory into both +// elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_pd1 +#define _mm_load_pd1 _mm_load1_pd + +// Load a double-precision (64-bit) floating-point element from memory into the +// lower of dst, and zero the upper element. mem_addr does not need to be +// aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_sd +FORCE_INLINE __m128d _mm_load_sd(const double *p) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64(vsetq_lane_f64(*p, vdupq_n_f64(0), 0)); +#else + const float *fp = (const float *) p; + float ALIGN_STRUCT(16) data[4] = {fp[0], fp[1], 0, 0}; + return vreinterpretq_m128d_f32(vld1q_f32(data)); +#endif +} + +// Load 128-bits of integer data from memory into dst. mem_addr must be aligned +// on a 16-byte boundary or a general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_si128 +FORCE_INLINE __m128i _mm_load_si128(const __m128i *p) +{ + return vreinterpretq_m128i_s32(vld1q_s32((const int32_t *) p)); +} + +// Load a double-precision (64-bit) floating-point element from memory into both +// elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load1_pd +FORCE_INLINE __m128d _mm_load1_pd(const double *p) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64(vld1q_dup_f64(p)); +#else + return vreinterpretq_m128d_s64(vdupq_n_s64(*(const int64_t *) p)); +#endif +} + +// Load a double-precision (64-bit) floating-point element from memory into the +// upper element of dst, and copy the lower element from a to dst. mem_addr does +// not need to be aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadh_pd +FORCE_INLINE __m128d _mm_loadh_pd(__m128d a, const double *p) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64( + vcombine_f64(vget_low_f64(vreinterpretq_f64_m128d(a)), vld1_f64(p))); +#else + return vreinterpretq_m128d_f32(vcombine_f32( + vget_low_f32(vreinterpretq_f32_m128d(a)), vld1_f32((const float *) p))); +#endif +} + +// Load 64-bit integer from memory into the first element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadl_epi64 +FORCE_INLINE __m128i _mm_loadl_epi64(__m128i const *p) +{ + /* Load the lower 64 bits of the value pointed to by p into the + * lower 64 bits of the result, zeroing the upper 64 bits of the result. + */ + return vreinterpretq_m128i_s32( + vcombine_s32(vld1_s32((int32_t const *) p), vcreate_s32(0))); +} + +// Load a double-precision (64-bit) floating-point element from memory into the +// lower element of dst, and copy the upper element from a to dst. mem_addr does +// not need to be aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadl_pd +FORCE_INLINE __m128d _mm_loadl_pd(__m128d a, const double *p) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64( + vcombine_f64(vld1_f64(p), vget_high_f64(vreinterpretq_f64_m128d(a)))); +#else + return vreinterpretq_m128d_f32( + vcombine_f32(vld1_f32((const float *) p), + vget_high_f32(vreinterpretq_f32_m128d(a)))); +#endif +} + +// Load 2 double-precision (64-bit) floating-point elements from memory into dst +// in reverse order. mem_addr must be aligned on a 16-byte boundary or a +// general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadr_pd +FORCE_INLINE __m128d _mm_loadr_pd(const double *p) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + float64x2_t v = vld1q_f64(p); + return vreinterpretq_m128d_f64(vextq_f64(v, v, 1)); +#else + int64x2_t v = vld1q_s64((const int64_t *) p); + return vreinterpretq_m128d_s64(vextq_s64(v, v, 1)); +#endif +} + +// Loads two double-precision from unaligned memory, floating-point values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_pd +FORCE_INLINE __m128d _mm_loadu_pd(const double *p) +{ + return _mm_load_pd(p); +} + +// Load 128-bits of integer data from memory into dst. mem_addr does not need to +// be aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_si128 +FORCE_INLINE __m128i _mm_loadu_si128(const __m128i *p) +{ + return vreinterpretq_m128i_s32(vld1q_s32((const unaligned_int32_t *) p)); +} + +// Load unaligned 32-bit integer from memory into the first element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_si32 +FORCE_INLINE __m128i _mm_loadu_si32(const void *p) +{ + return vreinterpretq_m128i_s32( + vsetq_lane_s32(*(const unaligned_int32_t *) p, vdupq_n_s32(0), 0)); +} + +// Multiply packed signed 16-bit integers in a and b, producing intermediate +// signed 32-bit integers. Horizontally add adjacent pairs of intermediate +// 32-bit integers, and pack the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_madd_epi16 +FORCE_INLINE __m128i _mm_madd_epi16(__m128i a, __m128i b) +{ + int32x4_t low = vmull_s16(vget_low_s16(vreinterpretq_s16_m128i(a)), + vget_low_s16(vreinterpretq_s16_m128i(b))); +#if defined(__aarch64__) || defined(_M_ARM64) + int32x4_t high = + vmull_high_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b)); + + return vreinterpretq_m128i_s32(vpaddq_s32(low, high)); +#else + int32x4_t high = vmull_s16(vget_high_s16(vreinterpretq_s16_m128i(a)), + vget_high_s16(vreinterpretq_s16_m128i(b))); + + int32x2_t low_sum = vpadd_s32(vget_low_s32(low), vget_high_s32(low)); + int32x2_t high_sum = vpadd_s32(vget_low_s32(high), vget_high_s32(high)); + + return vreinterpretq_m128i_s32(vcombine_s32(low_sum, high_sum)); +#endif +} + +// Conditionally store 8-bit integer elements from a into memory using mask +// (elements are not stored when the highest bit is not set in the corresponding +// element) and a non-temporal memory hint. mem_addr does not need to be aligned +// on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskmoveu_si128 +FORCE_INLINE void _mm_maskmoveu_si128(__m128i a, __m128i mask, char *mem_addr) +{ + int8x16_t shr_mask = vshrq_n_s8(vreinterpretq_s8_m128i(mask), 7); + __m128 b = _mm_load_ps((const float *) mem_addr); + int8x16_t masked = + vbslq_s8(vreinterpretq_u8_s8(shr_mask), vreinterpretq_s8_m128i(a), + vreinterpretq_s8_m128(b)); + vst1q_s8((int8_t *) mem_addr, masked); +} + +// Compare packed signed 16-bit integers in a and b, and store packed maximum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epi16 +FORCE_INLINE __m128i _mm_max_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vmaxq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Compare packed unsigned 8-bit integers in a and b, and store packed maximum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epu8 +FORCE_INLINE __m128i _mm_max_epu8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vmaxq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b, +// and store packed maximum values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_pd +FORCE_INLINE __m128d _mm_max_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) +#if SSE2NEON_PRECISE_MINMAX + float64x2_t _a = vreinterpretq_f64_m128d(a); + float64x2_t _b = vreinterpretq_f64_m128d(b); + return vreinterpretq_m128d_f64(vbslq_f64(vcgtq_f64(_a, _b), _a, _b)); +#else + return vreinterpretq_m128d_f64( + vmaxq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#endif +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + int64_t d[2]; + d[0] = a0 > b0 ? sse2neon_recast_f64_s64(a0) : sse2neon_recast_f64_s64(b0); + d[1] = a1 > b1 ? sse2neon_recast_f64_s64(a1) : sse2neon_recast_f64_s64(b1); + + return vreinterpretq_m128d_s64(vld1q_s64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b, store the maximum value in the lower element of dst, and copy the upper +// element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_sd +FORCE_INLINE __m128d _mm_max_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return _mm_move_sd(a, _mm_max_pd(a, b)); +#else + double a0, a1, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double c[2] = {a0 > b0 ? a0 : b0, a1}; + return vreinterpretq_m128d_f32(vld1q_f32((float32_t *) c)); +#endif +} + +// Compare packed signed 16-bit integers in a and b, and store packed minimum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_epi16 +FORCE_INLINE __m128i _mm_min_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vminq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Compare packed unsigned 8-bit integers in a and b, and store packed minimum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_epu8 +FORCE_INLINE __m128i _mm_min_epu8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vminq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b, +// and store packed minimum values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_pd +FORCE_INLINE __m128d _mm_min_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) +#if SSE2NEON_PRECISE_MINMAX + float64x2_t _a = vreinterpretq_f64_m128d(a); + float64x2_t _b = vreinterpretq_f64_m128d(b); + return vreinterpretq_m128d_f64(vbslq_f64(vcltq_f64(_a, _b), _a, _b)); +#else + return vreinterpretq_m128d_f64( + vminq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#endif +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + int64_t d[2]; + d[0] = a0 < b0 ? sse2neon_recast_f64_s64(a0) : sse2neon_recast_f64_s64(b0); + d[1] = a1 < b1 ? sse2neon_recast_f64_s64(a1) : sse2neon_recast_f64_s64(b1); + return vreinterpretq_m128d_s64(vld1q_s64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b, store the minimum value in the lower element of dst, and copy the upper +// element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_sd +FORCE_INLINE __m128d _mm_min_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return _mm_move_sd(a, _mm_min_pd(a, b)); +#else + double a0, a1, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double c[2] = {a0 < b0 ? a0 : b0, a1}; + return vreinterpretq_m128d_f32(vld1q_f32((float32_t *) c)); +#endif +} + +// Copy the lower 64-bit integer in a to the lower element of dst, and zero the +// upper element. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_move_epi64 +FORCE_INLINE __m128i _mm_move_epi64(__m128i a) +{ + return vreinterpretq_m128i_s64( + vsetq_lane_s64(0, vreinterpretq_s64_m128i(a), 1)); +} + +// Move the lower double-precision (64-bit) floating-point element from b to the +// lower element of dst, and copy the upper element from a to the upper element +// of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_move_sd +FORCE_INLINE __m128d _mm_move_sd(__m128d a, __m128d b) +{ + return vreinterpretq_m128d_f32( + vcombine_f32(vget_low_f32(vreinterpretq_f32_m128d(b)), + vget_high_f32(vreinterpretq_f32_m128d(a)))); +} + +// Create mask from the most significant bit of each 8-bit element in a, and +// store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movemask_epi8 +FORCE_INLINE int _mm_movemask_epi8(__m128i a) +{ + // Use increasingly wide shifts+adds to collect the sign bits + // together. + // Since the widening shifts would be rather confusing to follow in little + // endian, everything will be illustrated in big endian order instead. This + // has a different result - the bits would actually be reversed on a big + // endian machine. + + // Starting input (only half the elements are shown): + // 89 ff 1d c0 00 10 99 33 + uint8x16_t input = vreinterpretq_u8_m128i(a); + + // Shift out everything but the sign bits with an unsigned shift right. + // + // Bytes of the vector:: + // 89 ff 1d c0 00 10 99 33 + // \ \ \ \ \ \ \ \ high_bits = (uint16x4_t)(input >> 7) + // | | | | | | | | + // 01 01 00 01 00 00 01 00 + // + // Bits of first important lane(s): + // 10001001 (89) + // \______ + // | + // 00000001 (01) + uint16x8_t high_bits = vreinterpretq_u16_u8(vshrq_n_u8(input, 7)); + + // Merge the even lanes together with a 16-bit unsigned shift right + add. + // 'xx' represents garbage data which will be ignored in the final result. + // In the important bytes, the add functions like a binary OR. + // + // 01 01 00 01 00 00 01 00 + // \_ | \_ | \_ | \_ | paired16 = (uint32x4_t)(input + (input >> 7)) + // \| \| \| \| + // xx 03 xx 01 xx 00 xx 02 + // + // 00000001 00000001 (01 01) + // \_______ | + // \| + // xxxxxxxx xxxxxx11 (xx 03) + uint32x4_t paired16 = + vreinterpretq_u32_u16(vsraq_n_u16(high_bits, high_bits, 7)); + + // Repeat with a wider 32-bit shift + add. + // xx 03 xx 01 xx 00 xx 02 + // \____ | \____ | paired32 = (uint64x1_t)(paired16 + (paired16 >> + // 14)) + // \| \| + // xx xx xx 0d xx xx xx 02 + // + // 00000011 00000001 (03 01) + // \\_____ || + // '----.\|| + // xxxxxxxx xxxx1101 (xx 0d) + uint64x2_t paired32 = + vreinterpretq_u64_u32(vsraq_n_u32(paired16, paired16, 14)); + + // Last, an even wider 64-bit shift + add to get our result in the low 8 bit + // lanes. xx xx xx 0d xx xx xx 02 + // \_________ | paired64 = (uint8x8_t)(paired32 + (paired32 >> + // 28)) + // \| + // xx xx xx xx xx xx xx d2 + // + // 00001101 00000010 (0d 02) + // \ \___ | | + // '---. \| | + // xxxxxxxx 11010010 (xx d2) + uint8x16_t paired64 = + vreinterpretq_u8_u64(vsraq_n_u64(paired32, paired32, 28)); + + // Extract the low 8 bits from each 64-bit lane with 2 8-bit extracts. + // xx xx xx xx xx xx xx d2 + // || return paired64[0] + // d2 + // Note: Little endian would return the correct value 4b (01001011) instead. + return vgetq_lane_u8(paired64, 0) | ((int) vgetq_lane_u8(paired64, 8) << 8); +} + +// Set each bit of mask dst based on the most significant bit of the +// corresponding packed double-precision (64-bit) floating-point element in a. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movemask_pd +FORCE_INLINE int _mm_movemask_pd(__m128d a) +{ + uint64x2_t input = vreinterpretq_u64_m128d(a); + uint64x2_t high_bits = vshrq_n_u64(input, 63); + return (int) (vgetq_lane_u64(high_bits, 0) | + (vgetq_lane_u64(high_bits, 1) << 1)); +} + +// Copy the lower 64-bit integer in a to dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movepi64_pi64 +FORCE_INLINE __m64 _mm_movepi64_pi64(__m128i a) +{ + return vreinterpret_m64_s64(vget_low_s64(vreinterpretq_s64_m128i(a))); +} + +// Copy the 64-bit integer a to the lower element of dst, and zero the upper +// element. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movpi64_epi64 +FORCE_INLINE __m128i _mm_movpi64_epi64(__m64 a) +{ + return vreinterpretq_m128i_s64( + vcombine_s64(vreinterpret_s64_m64(a), vdup_n_s64(0))); +} + +// Multiply the low unsigned 32-bit integers from each packed 64-bit element in +// a and b, and store the unsigned 64-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_epu32 +FORCE_INLINE __m128i _mm_mul_epu32(__m128i a, __m128i b) +{ + // vmull_u32 upcasts instead of masking, so we downcast. + uint32x2_t a_lo = vmovn_u64(vreinterpretq_u64_m128i(a)); + uint32x2_t b_lo = vmovn_u64(vreinterpretq_u64_m128i(b)); + return vreinterpretq_m128i_u64(vmull_u32(a_lo, b_lo)); +} + +// Multiply packed double-precision (64-bit) floating-point elements in a and b, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_pd +FORCE_INLINE __m128d _mm_mul_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64( + vmulq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + double c[2]; + c[0] = a0 * b0; + c[1] = a1 * b1; + return vld1q_f32((float32_t *) c); +#endif +} + +// Multiply the lower double-precision (64-bit) floating-point element in a and +// b, store the result in the lower element of dst, and copy the upper element +// from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_mul_sd +FORCE_INLINE __m128d _mm_mul_sd(__m128d a, __m128d b) +{ + return _mm_move_sd(a, _mm_mul_pd(a, b)); +} + +// Multiply the low unsigned 32-bit integers from a and b, and store the +// unsigned 64-bit result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_su32 +FORCE_INLINE __m64 _mm_mul_su32(__m64 a, __m64 b) +{ + return vreinterpret_m64_u64(vget_low_u64( + vmull_u32(vreinterpret_u32_m64(a), vreinterpret_u32_m64(b)))); +} + +// Multiply the packed signed 16-bit integers in a and b, producing intermediate +// 32-bit integers, and store the high 16 bits of the intermediate integers in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mulhi_epi16 +FORCE_INLINE __m128i _mm_mulhi_epi16(__m128i a, __m128i b) +{ + /* FIXME: issue with large values because of result saturation */ + // int16x8_t ret = vqdmulhq_s16(vreinterpretq_s16_m128i(a), + // vreinterpretq_s16_m128i(b)); /* =2*a*b */ return + // vreinterpretq_m128i_s16(vshrq_n_s16(ret, 1)); + int16x4_t a3210 = vget_low_s16(vreinterpretq_s16_m128i(a)); + int16x4_t b3210 = vget_low_s16(vreinterpretq_s16_m128i(b)); + int32x4_t ab3210 = vmull_s16(a3210, b3210); /* 3333222211110000 */ + int16x4_t a7654 = vget_high_s16(vreinterpretq_s16_m128i(a)); + int16x4_t b7654 = vget_high_s16(vreinterpretq_s16_m128i(b)); + int32x4_t ab7654 = vmull_s16(a7654, b7654); /* 7777666655554444 */ + uint16x8x2_t r = + vuzpq_u16(vreinterpretq_u16_s32(ab3210), vreinterpretq_u16_s32(ab7654)); + return vreinterpretq_m128i_u16(r.val[1]); +} + +// Multiply the packed unsigned 16-bit integers in a and b, producing +// intermediate 32-bit integers, and store the high 16 bits of the intermediate +// integers in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mulhi_epu16 +FORCE_INLINE __m128i _mm_mulhi_epu16(__m128i a, __m128i b) +{ + uint16x4_t a3210 = vget_low_u16(vreinterpretq_u16_m128i(a)); + uint16x4_t b3210 = vget_low_u16(vreinterpretq_u16_m128i(b)); + uint32x4_t ab3210 = vmull_u16(a3210, b3210); +#if defined(__aarch64__) || defined(_M_ARM64) + uint32x4_t ab7654 = + vmull_high_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b)); + uint16x8_t r = vuzp2q_u16(vreinterpretq_u16_u32(ab3210), + vreinterpretq_u16_u32(ab7654)); + return vreinterpretq_m128i_u16(r); +#else + uint16x4_t a7654 = vget_high_u16(vreinterpretq_u16_m128i(a)); + uint16x4_t b7654 = vget_high_u16(vreinterpretq_u16_m128i(b)); + uint32x4_t ab7654 = vmull_u16(a7654, b7654); + uint16x8x2_t r = + vuzpq_u16(vreinterpretq_u16_u32(ab3210), vreinterpretq_u16_u32(ab7654)); + return vreinterpretq_m128i_u16(r.val[1]); +#endif +} + +// Multiply the packed 16-bit integers in a and b, producing intermediate 32-bit +// integers, and store the low 16 bits of the intermediate integers in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mullo_epi16 +FORCE_INLINE __m128i _mm_mullo_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vmulq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Compute the bitwise OR of packed double-precision (64-bit) floating-point +// elements in a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_or_pd +FORCE_INLINE __m128d _mm_or_pd(__m128d a, __m128d b) +{ + return vreinterpretq_m128d_s64( + vorrq_s64(vreinterpretq_s64_m128d(a), vreinterpretq_s64_m128d(b))); +} + +// Compute the bitwise OR of 128 bits (representing integer data) in a and b, +// and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_or_si128 +FORCE_INLINE __m128i _mm_or_si128(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vorrq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Convert packed signed 16-bit integers from a and b to packed 8-bit integers +// using signed saturation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_packs_epi16 +FORCE_INLINE __m128i _mm_packs_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vcombine_s8(vqmovn_s16(vreinterpretq_s16_m128i(a)), + vqmovn_s16(vreinterpretq_s16_m128i(b)))); +} + +// Convert packed signed 32-bit integers from a and b to packed 16-bit integers +// using signed saturation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_packs_epi32 +FORCE_INLINE __m128i _mm_packs_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vcombine_s16(vqmovn_s32(vreinterpretq_s32_m128i(a)), + vqmovn_s32(vreinterpretq_s32_m128i(b)))); +} + +// Convert packed signed 16-bit integers from a and b to packed 8-bit integers +// using unsigned saturation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_packus_epi16 +FORCE_INLINE __m128i _mm_packus_epi16(const __m128i a, const __m128i b) +{ + return vreinterpretq_m128i_u8( + vcombine_u8(vqmovun_s16(vreinterpretq_s16_m128i(a)), + vqmovun_s16(vreinterpretq_s16_m128i(b)))); +} + +// Pause the processor. This is typically used in spin-wait loops and depending +// on the x86 processor typical values are in the 40-100 cycle range. The +// 'yield' instruction isn't a good fit because it's effectively a nop on most +// Arm cores. Experience with several databases has shown has shown an 'isb' is +// a reasonable approximation. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_pause +FORCE_INLINE void _mm_pause(void) +{ +#if defined(_MSC_VER) && !defined(__clang__) + __isb(_ARM64_BARRIER_SY); +#else + __asm__ __volatile__("isb\n"); +#endif +} + +// Compute the absolute differences of packed unsigned 8-bit integers in a and +// b, then horizontally sum each consecutive 8 differences to produce two +// unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low +// 16 bits of 64-bit elements in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sad_epu8 +FORCE_INLINE __m128i _mm_sad_epu8(__m128i a, __m128i b) +{ + uint16x8_t t = vpaddlq_u8(vabdq_u8((uint8x16_t) a, (uint8x16_t) b)); + return vreinterpretq_m128i_u64(vpaddlq_u32(vpaddlq_u16(t))); +} + +// Set packed 16-bit integers in dst with the supplied values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_epi16 +FORCE_INLINE __m128i _mm_set_epi16(short i7, + short i6, + short i5, + short i4, + short i3, + short i2, + short i1, + short i0) +{ + int16_t ALIGN_STRUCT(16) data[8] = {i0, i1, i2, i3, i4, i5, i6, i7}; + return vreinterpretq_m128i_s16(vld1q_s16(data)); +} + +// Set packed 32-bit integers in dst with the supplied values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_epi32 +FORCE_INLINE __m128i _mm_set_epi32(int i3, int i2, int i1, int i0) +{ + int32_t ALIGN_STRUCT(16) data[4] = {i0, i1, i2, i3}; + return vreinterpretq_m128i_s32(vld1q_s32(data)); +} + +// Set packed 64-bit integers in dst with the supplied values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_epi64 +FORCE_INLINE __m128i _mm_set_epi64(__m64 i1, __m64 i2) +{ + return _mm_set_epi64x(vget_lane_s64(i1, 0), vget_lane_s64(i2, 0)); +} + +// Set packed 64-bit integers in dst with the supplied values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_epi64x +FORCE_INLINE __m128i _mm_set_epi64x(int64_t i1, int64_t i2) +{ + return vreinterpretq_m128i_s64( + vcombine_s64(vcreate_s64(i2), vcreate_s64(i1))); +} + +// Set packed 8-bit integers in dst with the supplied values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_epi8 +FORCE_INLINE __m128i _mm_set_epi8(signed char b15, + signed char b14, + signed char b13, + signed char b12, + signed char b11, + signed char b10, + signed char b9, + signed char b8, + signed char b7, + signed char b6, + signed char b5, + signed char b4, + signed char b3, + signed char b2, + signed char b1, + signed char b0) +{ + int8_t ALIGN_STRUCT(16) data[16] = { + (int8_t) b0, (int8_t) b1, (int8_t) b2, (int8_t) b3, + (int8_t) b4, (int8_t) b5, (int8_t) b6, (int8_t) b7, + (int8_t) b8, (int8_t) b9, (int8_t) b10, (int8_t) b11, + (int8_t) b12, (int8_t) b13, (int8_t) b14, (int8_t) b15}; + return (__m128i) vld1q_s8(data); +} + +// Set packed double-precision (64-bit) floating-point elements in dst with the +// supplied values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_pd +FORCE_INLINE __m128d _mm_set_pd(double e1, double e0) +{ + double ALIGN_STRUCT(16) data[2] = {e0, e1}; +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64(vld1q_f64((float64_t *) data)); +#else + return vreinterpretq_m128d_f32(vld1q_f32((float32_t *) data)); +#endif +} + +// Broadcast double-precision (64-bit) floating-point value a to all elements of +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_pd1 +#define _mm_set_pd1 _mm_set1_pd + +// Copy double-precision (64-bit) floating-point element a to the lower element +// of dst, and zero the upper element. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_sd +FORCE_INLINE __m128d _mm_set_sd(double a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64(vsetq_lane_f64(a, vdupq_n_f64(0), 0)); +#else + return _mm_set_pd(0, a); +#endif +} + +// Broadcast 16-bit integer a to all elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_epi16 +FORCE_INLINE __m128i _mm_set1_epi16(short w) +{ + return vreinterpretq_m128i_s16(vdupq_n_s16(w)); +} + +// Broadcast 32-bit integer a to all elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_epi32 +FORCE_INLINE __m128i _mm_set1_epi32(int _i) +{ + return vreinterpretq_m128i_s32(vdupq_n_s32(_i)); +} + +// Broadcast 64-bit integer a to all elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_epi64 +FORCE_INLINE __m128i _mm_set1_epi64(__m64 _i) +{ + return vreinterpretq_m128i_s64(vdupq_lane_s64(_i, 0)); +} + +// Broadcast 64-bit integer a to all elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_epi64x +FORCE_INLINE __m128i _mm_set1_epi64x(int64_t _i) +{ + return vreinterpretq_m128i_s64(vdupq_n_s64(_i)); +} + +// Broadcast 8-bit integer a to all elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_epi8 +FORCE_INLINE __m128i _mm_set1_epi8(signed char w) +{ + return vreinterpretq_m128i_s8(vdupq_n_s8(w)); +} + +// Broadcast double-precision (64-bit) floating-point value a to all elements of +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_pd +FORCE_INLINE __m128d _mm_set1_pd(double d) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64(vdupq_n_f64(d)); +#else + int64_t _d = sse2neon_recast_f64_s64(d); + return vreinterpretq_m128d_s64(vdupq_n_s64(_d)); +#endif +} + +// Set packed 16-bit integers in dst with the supplied values in reverse order. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_epi16 +FORCE_INLINE __m128i _mm_setr_epi16(short w0, + short w1, + short w2, + short w3, + short w4, + short w5, + short w6, + short w7) +{ + int16_t ALIGN_STRUCT(16) data[8] = {w0, w1, w2, w3, w4, w5, w6, w7}; + return vreinterpretq_m128i_s16(vld1q_s16((int16_t *) data)); +} + +// Set packed 32-bit integers in dst with the supplied values in reverse order. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_epi32 +FORCE_INLINE __m128i _mm_setr_epi32(int i3, int i2, int i1, int i0) +{ + int32_t ALIGN_STRUCT(16) data[4] = {i3, i2, i1, i0}; + return vreinterpretq_m128i_s32(vld1q_s32(data)); +} + +// Set packed 64-bit integers in dst with the supplied values in reverse order. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_epi64 +FORCE_INLINE __m128i _mm_setr_epi64(__m64 e1, __m64 e0) +{ + return vreinterpretq_m128i_s64(vcombine_s64(e1, e0)); +} + +// Set packed 8-bit integers in dst with the supplied values in reverse order. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_epi8 +FORCE_INLINE __m128i _mm_setr_epi8(signed char b0, + signed char b1, + signed char b2, + signed char b3, + signed char b4, + signed char b5, + signed char b6, + signed char b7, + signed char b8, + signed char b9, + signed char b10, + signed char b11, + signed char b12, + signed char b13, + signed char b14, + signed char b15) +{ + int8_t ALIGN_STRUCT(16) data[16] = { + (int8_t) b0, (int8_t) b1, (int8_t) b2, (int8_t) b3, + (int8_t) b4, (int8_t) b5, (int8_t) b6, (int8_t) b7, + (int8_t) b8, (int8_t) b9, (int8_t) b10, (int8_t) b11, + (int8_t) b12, (int8_t) b13, (int8_t) b14, (int8_t) b15}; + return (__m128i) vld1q_s8(data); +} + +// Set packed double-precision (64-bit) floating-point elements in dst with the +// supplied values in reverse order. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_pd +FORCE_INLINE __m128d _mm_setr_pd(double e1, double e0) +{ + return _mm_set_pd(e0, e1); +} + +// Return vector of type __m128d with all elements set to zero. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setzero_pd +FORCE_INLINE __m128d _mm_setzero_pd(void) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64(vdupq_n_f64(0)); +#else + return vreinterpretq_m128d_f32(vdupq_n_f32(0)); +#endif +} + +// Return vector of type __m128i with all elements set to zero. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setzero_si128 +FORCE_INLINE __m128i _mm_setzero_si128(void) +{ + return vreinterpretq_m128i_s32(vdupq_n_s32(0)); +} + +// Shuffle 32-bit integers in a using the control in imm8, and store the results +// in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_epi32 +// FORCE_INLINE __m128i _mm_shuffle_epi32(__m128i a, +// __constrange(0,255) int imm) +#if defined(_sse2neon_shuffle) +#define _mm_shuffle_epi32(a, imm) \ + __extension__({ \ + int32x4_t _input = vreinterpretq_s32_m128i(a); \ + int32x4_t _shuf = \ + vshuffleq_s32(_input, _input, (imm) & (0x3), ((imm) >> 2) & 0x3, \ + ((imm) >> 4) & 0x3, ((imm) >> 6) & 0x3); \ + vreinterpretq_m128i_s32(_shuf); \ + }) +#else // generic +#define _mm_shuffle_epi32(a, imm) \ + _sse2neon_define1( \ + __m128i, a, __m128i ret; switch (imm) { \ + case _MM_SHUFFLE(1, 0, 3, 2): \ + ret = _mm_shuffle_epi_1032(_a); \ + break; \ + case _MM_SHUFFLE(2, 3, 0, 1): \ + ret = _mm_shuffle_epi_2301(_a); \ + break; \ + case _MM_SHUFFLE(0, 3, 2, 1): \ + ret = _mm_shuffle_epi_0321(_a); \ + break; \ + case _MM_SHUFFLE(2, 1, 0, 3): \ + ret = _mm_shuffle_epi_2103(_a); \ + break; \ + case _MM_SHUFFLE(1, 0, 1, 0): \ + ret = _mm_shuffle_epi_1010(_a); \ + break; \ + case _MM_SHUFFLE(1, 0, 0, 1): \ + ret = _mm_shuffle_epi_1001(_a); \ + break; \ + case _MM_SHUFFLE(0, 1, 0, 1): \ + ret = _mm_shuffle_epi_0101(_a); \ + break; \ + case _MM_SHUFFLE(2, 2, 1, 1): \ + ret = _mm_shuffle_epi_2211(_a); \ + break; \ + case _MM_SHUFFLE(0, 1, 2, 2): \ + ret = _mm_shuffle_epi_0122(_a); \ + break; \ + case _MM_SHUFFLE(3, 3, 3, 2): \ + ret = _mm_shuffle_epi_3332(_a); \ + break; \ + case _MM_SHUFFLE(0, 0, 0, 0): \ + ret = _mm_shuffle_epi32_splat(_a, 0); \ + break; \ + case _MM_SHUFFLE(1, 1, 1, 1): \ + ret = _mm_shuffle_epi32_splat(_a, 1); \ + break; \ + case _MM_SHUFFLE(2, 2, 2, 2): \ + ret = _mm_shuffle_epi32_splat(_a, 2); \ + break; \ + case _MM_SHUFFLE(3, 3, 3, 3): \ + ret = _mm_shuffle_epi32_splat(_a, 3); \ + break; \ + default: \ + ret = _mm_shuffle_epi32_default(_a, (imm)); \ + break; \ + } _sse2neon_return(ret);) +#endif + +// Shuffle double-precision (64-bit) floating-point elements using the control +// in imm8, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_pd +#ifdef _sse2neon_shuffle +#define _mm_shuffle_pd(a, b, imm8) \ + vreinterpretq_m128d_s64( \ + vshuffleq_s64(vreinterpretq_s64_m128d(a), vreinterpretq_s64_m128d(b), \ + imm8 & 0x1, ((imm8 & 0x2) >> 1) + 2)) +#else +#define _mm_shuffle_pd(a, b, imm8) \ + _mm_castsi128_pd(_mm_set_epi64x( \ + vgetq_lane_s64(vreinterpretq_s64_m128d(b), (imm8 & 0x2) >> 1), \ + vgetq_lane_s64(vreinterpretq_s64_m128d(a), imm8 & 0x1))) +#endif + +// FORCE_INLINE __m128i _mm_shufflehi_epi16(__m128i a, +// __constrange(0,255) int imm) +#if defined(_sse2neon_shuffle) +#define _mm_shufflehi_epi16(a, imm) \ + __extension__({ \ + int16x8_t _input = vreinterpretq_s16_m128i(a); \ + int16x8_t _shuf = \ + vshuffleq_s16(_input, _input, 0, 1, 2, 3, ((imm) & (0x3)) + 4, \ + (((imm) >> 2) & 0x3) + 4, (((imm) >> 4) & 0x3) + 4, \ + (((imm) >> 6) & 0x3) + 4); \ + vreinterpretq_m128i_s16(_shuf); \ + }) +#else // generic +#define _mm_shufflehi_epi16(a, imm) _mm_shufflehi_epi16_function((a), (imm)) +#endif + +// FORCE_INLINE __m128i _mm_shufflelo_epi16(__m128i a, +// __constrange(0,255) int imm) +#if defined(_sse2neon_shuffle) +#define _mm_shufflelo_epi16(a, imm) \ + __extension__({ \ + int16x8_t _input = vreinterpretq_s16_m128i(a); \ + int16x8_t _shuf = vshuffleq_s16( \ + _input, _input, ((imm) & (0x3)), (((imm) >> 2) & 0x3), \ + (((imm) >> 4) & 0x3), (((imm) >> 6) & 0x3), 4, 5, 6, 7); \ + vreinterpretq_m128i_s16(_shuf); \ + }) +#else // generic +#define _mm_shufflelo_epi16(a, imm) _mm_shufflelo_epi16_function((a), (imm)) +#endif + +// Shift packed 16-bit integers in a left by count while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sll_epi16 +FORCE_INLINE __m128i _mm_sll_epi16(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (_sse2neon_unlikely(c & ~15)) + return _mm_setzero_si128(); + + int16x8_t vc = vdupq_n_s16((int16_t) c); + return vreinterpretq_m128i_s16(vshlq_s16(vreinterpretq_s16_m128i(a), vc)); +} + +// Shift packed 32-bit integers in a left by count while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sll_epi32 +FORCE_INLINE __m128i _mm_sll_epi32(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (_sse2neon_unlikely(c & ~31)) + return _mm_setzero_si128(); + + int32x4_t vc = vdupq_n_s32((int32_t) c); + return vreinterpretq_m128i_s32(vshlq_s32(vreinterpretq_s32_m128i(a), vc)); +} + +// Shift packed 64-bit integers in a left by count while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sll_epi64 +FORCE_INLINE __m128i _mm_sll_epi64(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (_sse2neon_unlikely(c & ~63)) + return _mm_setzero_si128(); + + int64x2_t vc = vdupq_n_s64((int64_t) c); + return vreinterpretq_m128i_s64(vshlq_s64(vreinterpretq_s64_m128i(a), vc)); +} + +// Shift packed 16-bit integers in a left by imm8 while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_slli_epi16 +FORCE_INLINE __m128i _mm_slli_epi16(__m128i a, int imm) +{ + if (_sse2neon_unlikely(imm & ~15)) + return _mm_setzero_si128(); + return vreinterpretq_m128i_s16( + vshlq_s16(vreinterpretq_s16_m128i(a), vdupq_n_s16(imm))); +} + +// Shift packed 32-bit integers in a left by imm8 while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_slli_epi32 +FORCE_INLINE __m128i _mm_slli_epi32(__m128i a, int imm) +{ + if (_sse2neon_unlikely(imm & ~31)) + return _mm_setzero_si128(); + return vreinterpretq_m128i_s32( + vshlq_s32(vreinterpretq_s32_m128i(a), vdupq_n_s32(imm))); +} + +// Shift packed 64-bit integers in a left by imm8 while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_slli_epi64 +FORCE_INLINE __m128i _mm_slli_epi64(__m128i a, int imm) +{ + if (_sse2neon_unlikely(imm & ~63)) + return _mm_setzero_si128(); + return vreinterpretq_m128i_s64( + vshlq_s64(vreinterpretq_s64_m128i(a), vdupq_n_s64(imm))); +} + +// Shift a left by imm8 bytes while shifting in zeros, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_slli_si128 +#define _mm_slli_si128(a, imm) \ + _sse2neon_define1( \ + __m128i, a, int8x16_t ret; \ + if (_sse2neon_unlikely(imm == 0)) ret = vreinterpretq_s8_m128i(_a); \ + else if (_sse2neon_unlikely((imm) & ~15)) ret = vdupq_n_s8(0); \ + else ret = vextq_s8(vdupq_n_s8(0), vreinterpretq_s8_m128i(_a), \ + ((imm <= 0 || imm > 15) ? 0 : (16 - imm))); \ + _sse2neon_return(vreinterpretq_m128i_s8(ret));) + +// Compute the square root of packed double-precision (64-bit) floating-point +// elements in a, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sqrt_pd +FORCE_INLINE __m128d _mm_sqrt_pd(__m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64(vsqrtq_f64(vreinterpretq_f64_m128d(a))); +#else + double a0, a1; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double _a0 = sqrt(a0); + double _a1 = sqrt(a1); + return _mm_set_pd(_a1, _a0); +#endif +} + +// Compute the square root of the lower double-precision (64-bit) floating-point +// element in b, store the result in the lower element of dst, and copy the +// upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sqrt_sd +FORCE_INLINE __m128d _mm_sqrt_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return _mm_move_sd(a, _mm_sqrt_pd(b)); +#else + double _a, _b; + _a = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + _b = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + return _mm_set_pd(_a, sqrt(_b)); +#endif +} + +// Shift packed 16-bit integers in a right by count while shifting in sign bits, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sra_epi16 +FORCE_INLINE __m128i _mm_sra_epi16(__m128i a, __m128i count) +{ + int64_t c = vgetq_lane_s64(count, 0); + if (_sse2neon_unlikely(c & ~15)) + return _mm_cmplt_epi16(a, _mm_setzero_si128()); + return vreinterpretq_m128i_s16( + vshlq_s16((int16x8_t) a, vdupq_n_s16((int) -c))); +} + +// Shift packed 32-bit integers in a right by count while shifting in sign bits, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sra_epi32 +FORCE_INLINE __m128i _mm_sra_epi32(__m128i a, __m128i count) +{ + int64_t c = vgetq_lane_s64(count, 0); + if (_sse2neon_unlikely(c & ~31)) + return _mm_cmplt_epi32(a, _mm_setzero_si128()); + return vreinterpretq_m128i_s32( + vshlq_s32((int32x4_t) a, vdupq_n_s32((int) -c))); +} + +// Shift packed 16-bit integers in a right by imm8 while shifting in sign +// bits, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srai_epi16 +FORCE_INLINE __m128i _mm_srai_epi16(__m128i a, int imm) +{ + const int count = (imm & ~15) ? 15 : imm; + return (__m128i) vshlq_s16((int16x8_t) a, vdupq_n_s16(-count)); +} + +// Shift packed 32-bit integers in a right by imm8 while shifting in sign bits, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srai_epi32 +// FORCE_INLINE __m128i _mm_srai_epi32(__m128i a, __constrange(0,255) int imm) +#define _mm_srai_epi32(a, imm) \ + _sse2neon_define0( \ + __m128i, a, __m128i ret; if (_sse2neon_unlikely((imm) == 0)) { \ + ret = _a; \ + } else if (_sse2neon_likely(0 < (imm) && (imm) < 32)) { \ + ret = vreinterpretq_m128i_s32( \ + vshlq_s32(vreinterpretq_s32_m128i(_a), vdupq_n_s32(-(imm)))); \ + } else { \ + ret = vreinterpretq_m128i_s32( \ + vshrq_n_s32(vreinterpretq_s32_m128i(_a), 31)); \ + } _sse2neon_return(ret);) + +// Shift packed 16-bit integers in a right by count while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srl_epi16 +FORCE_INLINE __m128i _mm_srl_epi16(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (_sse2neon_unlikely(c & ~15)) + return _mm_setzero_si128(); + + int16x8_t vc = vdupq_n_s16(-(int16_t) c); + return vreinterpretq_m128i_u16(vshlq_u16(vreinterpretq_u16_m128i(a), vc)); +} + +// Shift packed 32-bit integers in a right by count while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srl_epi32 +FORCE_INLINE __m128i _mm_srl_epi32(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (_sse2neon_unlikely(c & ~31)) + return _mm_setzero_si128(); + + int32x4_t vc = vdupq_n_s32(-(int32_t) c); + return vreinterpretq_m128i_u32(vshlq_u32(vreinterpretq_u32_m128i(a), vc)); +} + +// Shift packed 64-bit integers in a right by count while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srl_epi64 +FORCE_INLINE __m128i _mm_srl_epi64(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (_sse2neon_unlikely(c & ~63)) + return _mm_setzero_si128(); + + int64x2_t vc = vdupq_n_s64(-(int64_t) c); + return vreinterpretq_m128i_u64(vshlq_u64(vreinterpretq_u64_m128i(a), vc)); +} + +// Shift packed 16-bit integers in a right by imm8 while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srli_epi16 +#define _mm_srli_epi16(a, imm) \ + _sse2neon_define0( \ + __m128i, a, __m128i ret; if (_sse2neon_unlikely((imm) & ~15)) { \ + ret = _mm_setzero_si128(); \ + } else { \ + ret = vreinterpretq_m128i_u16( \ + vshlq_u16(vreinterpretq_u16_m128i(_a), vdupq_n_s16(-(imm)))); \ + } _sse2neon_return(ret);) + +// Shift packed 32-bit integers in a right by imm8 while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srli_epi32 +// FORCE_INLINE __m128i _mm_srli_epi32(__m128i a, __constrange(0,255) int imm) +#define _mm_srli_epi32(a, imm) \ + _sse2neon_define0( \ + __m128i, a, __m128i ret; if (_sse2neon_unlikely((imm) & ~31)) { \ + ret = _mm_setzero_si128(); \ + } else { \ + ret = vreinterpretq_m128i_u32( \ + vshlq_u32(vreinterpretq_u32_m128i(_a), vdupq_n_s32(-(imm)))); \ + } _sse2neon_return(ret);) + +// Shift packed 64-bit integers in a right by imm8 while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srli_epi64 +#define _mm_srli_epi64(a, imm) \ + _sse2neon_define0( \ + __m128i, a, __m128i ret; if (_sse2neon_unlikely((imm) & ~63)) { \ + ret = _mm_setzero_si128(); \ + } else { \ + ret = vreinterpretq_m128i_u64( \ + vshlq_u64(vreinterpretq_u64_m128i(_a), vdupq_n_s64(-(imm)))); \ + } _sse2neon_return(ret);) + +// Shift a right by imm8 bytes while shifting in zeros, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srli_si128 +#define _mm_srli_si128(a, imm) \ + _sse2neon_define1( \ + __m128i, a, int8x16_t ret; \ + if (_sse2neon_unlikely((imm) & ~15)) ret = vdupq_n_s8(0); \ + else ret = vextq_s8(vreinterpretq_s8_m128i(_a), vdupq_n_s8(0), \ + (imm > 15 ? 0 : imm)); \ + _sse2neon_return(vreinterpretq_m128i_s8(ret));) + +// Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point +// elements) from a into memory. mem_addr must be aligned on a 16-byte boundary +// or a general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_pd +FORCE_INLINE void _mm_store_pd(double *mem_addr, __m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + vst1q_f64((float64_t *) mem_addr, vreinterpretq_f64_m128d(a)); +#else + vst1q_f32((float32_t *) mem_addr, vreinterpretq_f32_m128d(a)); +#endif +} + +// Store the lower double-precision (64-bit) floating-point element from a into +// 2 contiguous elements in memory. mem_addr must be aligned on a 16-byte +// boundary or a general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_pd1 +FORCE_INLINE void _mm_store_pd1(double *mem_addr, __m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + float64x1_t a_low = vget_low_f64(vreinterpretq_f64_m128d(a)); + vst1q_f64((float64_t *) mem_addr, + vreinterpretq_f64_m128d(vcombine_f64(a_low, a_low))); +#else + float32x2_t a_low = vget_low_f32(vreinterpretq_f32_m128d(a)); + vst1q_f32((float32_t *) mem_addr, + vreinterpretq_f32_m128d(vcombine_f32(a_low, a_low))); +#endif +} + +// Store the lower double-precision (64-bit) floating-point element from a into +// memory. mem_addr does not need to be aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_store_sd +FORCE_INLINE void _mm_store_sd(double *mem_addr, __m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + vst1_f64((float64_t *) mem_addr, vget_low_f64(vreinterpretq_f64_m128d(a))); +#else + vst1_u64((uint64_t *) mem_addr, vget_low_u64(vreinterpretq_u64_m128d(a))); +#endif +} + +// Store 128-bits of integer data from a into memory. mem_addr must be aligned +// on a 16-byte boundary or a general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_si128 +FORCE_INLINE void _mm_store_si128(__m128i *p, __m128i a) +{ + vst1q_s32((int32_t *) p, vreinterpretq_s32_m128i(a)); +} + +// Store the lower double-precision (64-bit) floating-point element from a into +// 2 contiguous elements in memory. mem_addr must be aligned on a 16-byte +// boundary or a general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#expand=9,526,5601&text=_mm_store1_pd +#define _mm_store1_pd _mm_store_pd1 + +// Store the upper double-precision (64-bit) floating-point element from a into +// memory. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeh_pd +FORCE_INLINE void _mm_storeh_pd(double *mem_addr, __m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + vst1_f64((float64_t *) mem_addr, vget_high_f64(vreinterpretq_f64_m128d(a))); +#else + vst1_f32((float32_t *) mem_addr, vget_high_f32(vreinterpretq_f32_m128d(a))); +#endif +} + +// Store 64-bit integer from the first element of a into memory. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storel_epi64 +FORCE_INLINE void _mm_storel_epi64(__m128i *a, __m128i b) +{ + vst1_u64((uint64_t *) a, vget_low_u64(vreinterpretq_u64_m128i(b))); +} + +// Store the lower double-precision (64-bit) floating-point element from a into +// memory. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storel_pd +FORCE_INLINE void _mm_storel_pd(double *mem_addr, __m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + vst1_f64((float64_t *) mem_addr, vget_low_f64(vreinterpretq_f64_m128d(a))); +#else + vst1_f32((float32_t *) mem_addr, vget_low_f32(vreinterpretq_f32_m128d(a))); +#endif +} + +// Store 2 double-precision (64-bit) floating-point elements from a into memory +// in reverse order. mem_addr must be aligned on a 16-byte boundary or a +// general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storer_pd +FORCE_INLINE void _mm_storer_pd(double *mem_addr, __m128d a) +{ + float32x4_t f = vreinterpretq_f32_m128d(a); + _mm_store_pd(mem_addr, vreinterpretq_m128d_f32(vextq_f32(f, f, 2))); +} + +// Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point +// elements) from a into memory. mem_addr does not need to be aligned on any +// particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_pd +FORCE_INLINE void _mm_storeu_pd(double *mem_addr, __m128d a) +{ + _mm_store_pd(mem_addr, a); +} + +// Store 128-bits of integer data from a into memory. mem_addr does not need to +// be aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_si128 +FORCE_INLINE void _mm_storeu_si128(__m128i *p, __m128i a) +{ + vst1q_s32((int32_t *) p, vreinterpretq_s32_m128i(a)); +} + +// Store 32-bit integer from the first element of a into memory. mem_addr does +// not need to be aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_si32 +FORCE_INLINE void _mm_storeu_si32(void *p, __m128i a) +{ + vst1q_lane_s32((int32_t *) p, vreinterpretq_s32_m128i(a), 0); +} + +// Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point +// elements) from a into memory using a non-temporal memory hint. mem_addr must +// be aligned on a 16-byte boundary or a general-protection exception may be +// generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_pd +FORCE_INLINE void _mm_stream_pd(double *p, __m128d a) +{ +#if __has_builtin(__builtin_nontemporal_store) + __builtin_nontemporal_store(a, (__m128d *) p); +#elif defined(__aarch64__) || defined(_M_ARM64) + vst1q_f64(p, vreinterpretq_f64_m128d(a)); +#else + vst1q_s64((int64_t *) p, vreinterpretq_s64_m128d(a)); +#endif +} + +// Store 128-bits of integer data from a into memory using a non-temporal memory +// hint. mem_addr must be aligned on a 16-byte boundary or a general-protection +// exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_si128 +FORCE_INLINE void _mm_stream_si128(__m128i *p, __m128i a) +{ +#if __has_builtin(__builtin_nontemporal_store) + __builtin_nontemporal_store(a, p); +#else + vst1q_s64((int64_t *) p, vreinterpretq_s64_m128i(a)); +#endif +} + +// Store 32-bit integer a into memory using a non-temporal hint to minimize +// cache pollution. If the cache line containing address mem_addr is already in +// the cache, the cache will be updated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_si32 +FORCE_INLINE void _mm_stream_si32(int *p, int a) +{ + vst1q_lane_s32((int32_t *) p, vdupq_n_s32(a), 0); +} + +// Store 64-bit integer a into memory using a non-temporal hint to minimize +// cache pollution. If the cache line containing address mem_addr is already in +// the cache, the cache will be updated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_si64 +FORCE_INLINE void _mm_stream_si64(__int64 *p, __int64 a) +{ + vst1_s64((int64_t *) p, vdup_n_s64((int64_t) a)); +} + +// Subtract packed 16-bit integers in b from packed 16-bit integers in a, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_epi16 +FORCE_INLINE __m128i _mm_sub_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vsubq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Subtract packed 32-bit integers in b from packed 32-bit integers in a, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_epi32 +FORCE_INLINE __m128i _mm_sub_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vsubq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Subtract packed 64-bit integers in b from packed 64-bit integers in a, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_epi64 +FORCE_INLINE __m128i _mm_sub_epi64(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s64( + vsubq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); +} + +// Subtract packed 8-bit integers in b from packed 8-bit integers in a, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_epi8 +FORCE_INLINE __m128i _mm_sub_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vsubq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Subtract packed double-precision (64-bit) floating-point elements in b from +// packed double-precision (64-bit) floating-point elements in a, and store the +// results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_sub_pd +FORCE_INLINE __m128d _mm_sub_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64( + vsubq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + double c[2]; + c[0] = a0 - b0; + c[1] = a1 - b1; + return vld1q_f32((float32_t *) c); +#endif +} + +// Subtract the lower double-precision (64-bit) floating-point element in b from +// the lower double-precision (64-bit) floating-point element in a, store the +// result in the lower element of dst, and copy the upper element from a to the +// upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_sd +FORCE_INLINE __m128d _mm_sub_sd(__m128d a, __m128d b) +{ + return _mm_move_sd(a, _mm_sub_pd(a, b)); +} + +// Subtract 64-bit integer b from 64-bit integer a, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_si64 +FORCE_INLINE __m64 _mm_sub_si64(__m64 a, __m64 b) +{ + return vreinterpret_m64_s64( + vsub_s64(vreinterpret_s64_m64(a), vreinterpret_s64_m64(b))); +} + +// Subtract packed signed 16-bit integers in b from packed 16-bit integers in a +// using saturation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_subs_epi16 +FORCE_INLINE __m128i _mm_subs_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vqsubq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Subtract packed signed 8-bit integers in b from packed 8-bit integers in a +// using saturation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_subs_epi8 +FORCE_INLINE __m128i _mm_subs_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vqsubq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Subtract packed unsigned 16-bit integers in b from packed unsigned 16-bit +// integers in a using saturation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_subs_epu16 +FORCE_INLINE __m128i _mm_subs_epu16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vqsubq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); +} + +// Subtract packed unsigned 8-bit integers in b from packed unsigned 8-bit +// integers in a using saturation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_subs_epu8 +FORCE_INLINE __m128i _mm_subs_epu8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vqsubq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); +} + +#define _mm_ucomieq_sd _mm_comieq_sd +#define _mm_ucomige_sd _mm_comige_sd +#define _mm_ucomigt_sd _mm_comigt_sd +#define _mm_ucomile_sd _mm_comile_sd +#define _mm_ucomilt_sd _mm_comilt_sd +#define _mm_ucomineq_sd _mm_comineq_sd + +// Return vector of type __m128d with undefined elements. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_undefined_pd +FORCE_INLINE __m128d _mm_undefined_pd(void) +{ +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wuninitialized" +#endif + __m128d a; +#if defined(_MSC_VER) && !defined(__clang__) + a = _mm_setzero_pd(); +#endif + return a; +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic pop +#endif +} + +// Unpack and interleave 16-bit integers from the high half of a and b, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_epi16 +FORCE_INLINE __m128i _mm_unpackhi_epi16(__m128i a, __m128i b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128i_s16( + vzip2q_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +#else + int16x4_t a1 = vget_high_s16(vreinterpretq_s16_m128i(a)); + int16x4_t b1 = vget_high_s16(vreinterpretq_s16_m128i(b)); + int16x4x2_t result = vzip_s16(a1, b1); + return vreinterpretq_m128i_s16(vcombine_s16(result.val[0], result.val[1])); +#endif +} + +// Unpack and interleave 32-bit integers from the high half of a and b, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_epi32 +FORCE_INLINE __m128i _mm_unpackhi_epi32(__m128i a, __m128i b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128i_s32( + vzip2q_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +#else + int32x2_t a1 = vget_high_s32(vreinterpretq_s32_m128i(a)); + int32x2_t b1 = vget_high_s32(vreinterpretq_s32_m128i(b)); + int32x2x2_t result = vzip_s32(a1, b1); + return vreinterpretq_m128i_s32(vcombine_s32(result.val[0], result.val[1])); +#endif +} + +// Unpack and interleave 64-bit integers from the high half of a and b, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_epi64 +FORCE_INLINE __m128i _mm_unpackhi_epi64(__m128i a, __m128i b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128i_s64( + vzip2q_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); +#else + int64x1_t a_h = vget_high_s64(vreinterpretq_s64_m128i(a)); + int64x1_t b_h = vget_high_s64(vreinterpretq_s64_m128i(b)); + return vreinterpretq_m128i_s64(vcombine_s64(a_h, b_h)); +#endif +} + +// Unpack and interleave 8-bit integers from the high half of a and b, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_epi8 +FORCE_INLINE __m128i _mm_unpackhi_epi8(__m128i a, __m128i b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128i_s8( + vzip2q_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +#else + int8x8_t a1 = + vreinterpret_s8_s16(vget_high_s16(vreinterpretq_s16_m128i(a))); + int8x8_t b1 = + vreinterpret_s8_s16(vget_high_s16(vreinterpretq_s16_m128i(b))); + int8x8x2_t result = vzip_s8(a1, b1); + return vreinterpretq_m128i_s8(vcombine_s8(result.val[0], result.val[1])); +#endif +} + +// Unpack and interleave double-precision (64-bit) floating-point elements from +// the high half of a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_pd +FORCE_INLINE __m128d _mm_unpackhi_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64( + vzip2q_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + return vreinterpretq_m128d_s64( + vcombine_s64(vget_high_s64(vreinterpretq_s64_m128d(a)), + vget_high_s64(vreinterpretq_s64_m128d(b)))); +#endif +} + +// Unpack and interleave 16-bit integers from the low half of a and b, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_epi16 +FORCE_INLINE __m128i _mm_unpacklo_epi16(__m128i a, __m128i b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128i_s16( + vzip1q_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +#else + int16x4_t a1 = vget_low_s16(vreinterpretq_s16_m128i(a)); + int16x4_t b1 = vget_low_s16(vreinterpretq_s16_m128i(b)); + int16x4x2_t result = vzip_s16(a1, b1); + return vreinterpretq_m128i_s16(vcombine_s16(result.val[0], result.val[1])); +#endif +} + +// Unpack and interleave 32-bit integers from the low half of a and b, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_epi32 +FORCE_INLINE __m128i _mm_unpacklo_epi32(__m128i a, __m128i b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128i_s32( + vzip1q_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +#else + int32x2_t a1 = vget_low_s32(vreinterpretq_s32_m128i(a)); + int32x2_t b1 = vget_low_s32(vreinterpretq_s32_m128i(b)); + int32x2x2_t result = vzip_s32(a1, b1); + return vreinterpretq_m128i_s32(vcombine_s32(result.val[0], result.val[1])); +#endif +} + +// Unpack and interleave 64-bit integers from the low half of a and b, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_epi64 +FORCE_INLINE __m128i _mm_unpacklo_epi64(__m128i a, __m128i b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128i_s64( + vzip1q_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); +#else + int64x1_t a_l = vget_low_s64(vreinterpretq_s64_m128i(a)); + int64x1_t b_l = vget_low_s64(vreinterpretq_s64_m128i(b)); + return vreinterpretq_m128i_s64(vcombine_s64(a_l, b_l)); +#endif +} + +// Unpack and interleave 8-bit integers from the low half of a and b, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_epi8 +FORCE_INLINE __m128i _mm_unpacklo_epi8(__m128i a, __m128i b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128i_s8( + vzip1q_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +#else + int8x8_t a1 = vreinterpret_s8_s16(vget_low_s16(vreinterpretq_s16_m128i(a))); + int8x8_t b1 = vreinterpret_s8_s16(vget_low_s16(vreinterpretq_s16_m128i(b))); + int8x8x2_t result = vzip_s8(a1, b1); + return vreinterpretq_m128i_s8(vcombine_s8(result.val[0], result.val[1])); +#endif +} + +// Unpack and interleave double-precision (64-bit) floating-point elements from +// the low half of a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_pd +FORCE_INLINE __m128d _mm_unpacklo_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64( + vzip1q_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + return vreinterpretq_m128d_s64( + vcombine_s64(vget_low_s64(vreinterpretq_s64_m128d(a)), + vget_low_s64(vreinterpretq_s64_m128d(b)))); +#endif +} + +// Compute the bitwise XOR of packed double-precision (64-bit) floating-point +// elements in a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_xor_pd +FORCE_INLINE __m128d _mm_xor_pd(__m128d a, __m128d b) +{ + return vreinterpretq_m128d_s64( + veorq_s64(vreinterpretq_s64_m128d(a), vreinterpretq_s64_m128d(b))); +} + +// Compute the bitwise XOR of 128 bits (representing integer data) in a and b, +// and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_xor_si128 +FORCE_INLINE __m128i _mm_xor_si128(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + veorq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +/* SSE3 */ + +// Alternatively add and subtract packed double-precision (64-bit) +// floating-point elements in a to/from packed elements in b, and store the +// results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_addsub_pd +FORCE_INLINE __m128d _mm_addsub_pd(__m128d a, __m128d b) +{ + _sse2neon_const __m128d mask = _mm_set_pd(1.0f, -1.0f); +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64(vfmaq_f64(vreinterpretq_f64_m128d(a), + vreinterpretq_f64_m128d(b), + vreinterpretq_f64_m128d(mask))); +#else + return _mm_add_pd(_mm_mul_pd(b, mask), a); +#endif +} + +// Alternatively add and subtract packed single-precision (32-bit) +// floating-point elements in a to/from packed elements in b, and store the +// results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=addsub_ps +FORCE_INLINE __m128 _mm_addsub_ps(__m128 a, __m128 b) +{ + _sse2neon_const __m128 mask = _mm_setr_ps(-1.0f, 1.0f, -1.0f, 1.0f); +#if (defined(__aarch64__) || defined(_M_ARM64)) || \ + defined(__ARM_FEATURE_FMA) /* VFPv4+ */ + return vreinterpretq_m128_f32(vfmaq_f32(vreinterpretq_f32_m128(a), + vreinterpretq_f32_m128(mask), + vreinterpretq_f32_m128(b))); +#else + return _mm_add_ps(_mm_mul_ps(b, mask), a); +#endif +} + +// Horizontally add adjacent pairs of double-precision (64-bit) floating-point +// elements in a and b, and pack the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_pd +FORCE_INLINE __m128d _mm_hadd_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64( + vpaddq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + double c[] = {a0 + a1, b0 + b1}; + return vreinterpretq_m128d_u64(vld1q_u64((uint64_t *) c)); +#endif +} + +// Horizontally add adjacent pairs of single-precision (32-bit) floating-point +// elements in a and b, and pack the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_ps +FORCE_INLINE __m128 _mm_hadd_ps(__m128 a, __m128 b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128_f32( + vpaddq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#else + float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); + float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); + float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); + float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32( + vcombine_f32(vpadd_f32(a10, a32), vpadd_f32(b10, b32))); +#endif +} + +// Horizontally subtract adjacent pairs of double-precision (64-bit) +// floating-point elements in a and b, and pack the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsub_pd +FORCE_INLINE __m128d _mm_hsub_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + float64x2_t _a = vreinterpretq_f64_m128d(a); + float64x2_t _b = vreinterpretq_f64_m128d(b); + return vreinterpretq_m128d_f64( + vsubq_f64(vuzp1q_f64(_a, _b), vuzp2q_f64(_a, _b))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + double c[] = {a0 - a1, b0 - b1}; + return vreinterpretq_m128d_u64(vld1q_u64((uint64_t *) c)); +#endif +} + +// Horizontally subtract adjacent pairs of single-precision (32-bit) +// floating-point elements in a and b, and pack the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsub_ps +FORCE_INLINE __m128 _mm_hsub_ps(__m128 _a, __m128 _b) +{ + float32x4_t a = vreinterpretq_f32_m128(_a); + float32x4_t b = vreinterpretq_f32_m128(_b); +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128_f32( + vsubq_f32(vuzp1q_f32(a, b), vuzp2q_f32(a, b))); +#else + float32x4x2_t c = vuzpq_f32(a, b); + return vreinterpretq_m128_f32(vsubq_f32(c.val[0], c.val[1])); +#endif +} + +// Load 128-bits of integer data from unaligned memory into dst. This intrinsic +// may perform better than _mm_loadu_si128 when the data crosses a cache line +// boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_lddqu_si128 +#define _mm_lddqu_si128 _mm_loadu_si128 + +// Load a double-precision (64-bit) floating-point element from memory into both +// elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loaddup_pd +#define _mm_loaddup_pd _mm_load1_pd + +// Duplicate the low double-precision (64-bit) floating-point element from a, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movedup_pd +FORCE_INLINE __m128d _mm_movedup_pd(__m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64( + vdupq_laneq_f64(vreinterpretq_f64_m128d(a), 0)); +#else + return vreinterpretq_m128d_u64( + vdupq_n_u64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0))); +#endif +} + +// Duplicate odd-indexed single-precision (32-bit) floating-point elements +// from a, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movehdup_ps +FORCE_INLINE __m128 _mm_movehdup_ps(__m128 a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128_f32( + vtrn2q_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a))); +#elif defined(_sse2neon_shuffle) + return vreinterpretq_m128_f32(vshuffleq_s32( + vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 1, 1, 3, 3)); +#else + float32_t a1 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 1); + float32_t a3 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 3); + float ALIGN_STRUCT(16) data[4] = {a1, a1, a3, a3}; + return vreinterpretq_m128_f32(vld1q_f32(data)); +#endif +} + +// Duplicate even-indexed single-precision (32-bit) floating-point elements +// from a, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_moveldup_ps +FORCE_INLINE __m128 _mm_moveldup_ps(__m128 a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128_f32( + vtrn1q_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a))); +#elif defined(_sse2neon_shuffle) + return vreinterpretq_m128_f32(vshuffleq_s32( + vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 0, 0, 2, 2)); +#else + float32_t a0 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); + float32_t a2 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 2); + float ALIGN_STRUCT(16) data[4] = {a0, a0, a2, a2}; + return vreinterpretq_m128_f32(vld1q_f32(data)); +#endif +} + +/* SSSE3 */ + +// Compute the absolute value of packed signed 16-bit integers in a, and store +// the unsigned results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_epi16 +FORCE_INLINE __m128i _mm_abs_epi16(__m128i a) +{ + return vreinterpretq_m128i_s16(vabsq_s16(vreinterpretq_s16_m128i(a))); +} + +// Compute the absolute value of packed signed 32-bit integers in a, and store +// the unsigned results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_epi32 +FORCE_INLINE __m128i _mm_abs_epi32(__m128i a) +{ + return vreinterpretq_m128i_s32(vabsq_s32(vreinterpretq_s32_m128i(a))); +} + +// Compute the absolute value of packed signed 8-bit integers in a, and store +// the unsigned results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_epi8 +FORCE_INLINE __m128i _mm_abs_epi8(__m128i a) +{ + return vreinterpretq_m128i_s8(vabsq_s8(vreinterpretq_s8_m128i(a))); +} + +// Compute the absolute value of packed signed 16-bit integers in a, and store +// the unsigned results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_pi16 +FORCE_INLINE __m64 _mm_abs_pi16(__m64 a) +{ + return vreinterpret_m64_s16(vabs_s16(vreinterpret_s16_m64(a))); +} + +// Compute the absolute value of packed signed 32-bit integers in a, and store +// the unsigned results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_pi32 +FORCE_INLINE __m64 _mm_abs_pi32(__m64 a) +{ + return vreinterpret_m64_s32(vabs_s32(vreinterpret_s32_m64(a))); +} + +// Compute the absolute value of packed signed 8-bit integers in a, and store +// the unsigned results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_pi8 +FORCE_INLINE __m64 _mm_abs_pi8(__m64 a) +{ + return vreinterpret_m64_s8(vabs_s8(vreinterpret_s8_m64(a))); +} + +// Concatenate 16-byte blocks in a and b into a 32-byte temporary result, shift +// the result right by imm8 bytes, and store the low 16 bytes in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_alignr_epi8 +#if defined(__GNUC__) && !defined(__clang__) +#define _mm_alignr_epi8(a, b, imm) \ + __extension__({ \ + uint8x16_t _a = vreinterpretq_u8_m128i(a); \ + uint8x16_t _b = vreinterpretq_u8_m128i(b); \ + __m128i ret; \ + if (_sse2neon_unlikely((imm) & ~31)) \ + ret = vreinterpretq_m128i_u8(vdupq_n_u8(0)); \ + else if (imm >= 16) \ + ret = _mm_srli_si128(a, imm >= 16 ? imm - 16 : 0); \ + else \ + ret = \ + vreinterpretq_m128i_u8(vextq_u8(_b, _a, imm < 16 ? imm : 0)); \ + ret; \ + }) + +#else +#define _mm_alignr_epi8(a, b, imm) \ + _sse2neon_define2( \ + __m128i, a, b, uint8x16_t __a = vreinterpretq_u8_m128i(_a); \ + uint8x16_t __b = vreinterpretq_u8_m128i(_b); __m128i ret; \ + if (_sse2neon_unlikely((imm) & ~31)) ret = \ + vreinterpretq_m128i_u8(vdupq_n_u8(0)); \ + else if (imm >= 16) ret = \ + _mm_srli_si128(_a, imm >= 16 ? imm - 16 : 0); \ + else ret = \ + vreinterpretq_m128i_u8(vextq_u8(__b, __a, imm < 16 ? imm : 0)); \ + _sse2neon_return(ret);) + +#endif + +// Concatenate 8-byte blocks in a and b into a 16-byte temporary result, shift +// the result right by imm8 bytes, and store the low 8 bytes in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_alignr_pi8 +#define _mm_alignr_pi8(a, b, imm) \ + _sse2neon_define2( \ + __m64, a, b, __m64 ret; if (_sse2neon_unlikely((imm) >= 16)) { \ + ret = vreinterpret_m64_s8(vdup_n_s8(0)); \ + } else { \ + uint8x8_t tmp_low; \ + uint8x8_t tmp_high; \ + if ((imm) >= 8) { \ + const int idx = (imm) - 8; \ + tmp_low = vreinterpret_u8_m64(_a); \ + tmp_high = vdup_n_u8(0); \ + ret = vreinterpret_m64_u8(vext_u8(tmp_low, tmp_high, idx)); \ + } else { \ + const int idx = (imm); \ + tmp_low = vreinterpret_u8_m64(_b); \ + tmp_high = vreinterpret_u8_m64(_a); \ + ret = vreinterpret_m64_u8(vext_u8(tmp_low, tmp_high, idx)); \ + } \ + } _sse2neon_return(ret);) + +// Horizontally add adjacent pairs of 16-bit integers in a and b, and pack the +// signed 16-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_epi16 +FORCE_INLINE __m128i _mm_hadd_epi16(__m128i _a, __m128i _b) +{ + int16x8_t a = vreinterpretq_s16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128i_s16(vpaddq_s16(a, b)); +#else + return vreinterpretq_m128i_s16( + vcombine_s16(vpadd_s16(vget_low_s16(a), vget_high_s16(a)), + vpadd_s16(vget_low_s16(b), vget_high_s16(b)))); +#endif +} + +// Horizontally add adjacent pairs of 32-bit integers in a and b, and pack the +// signed 32-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_epi32 +FORCE_INLINE __m128i _mm_hadd_epi32(__m128i _a, __m128i _b) +{ + int32x4_t a = vreinterpretq_s32_m128i(_a); + int32x4_t b = vreinterpretq_s32_m128i(_b); +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128i_s32(vpaddq_s32(a, b)); +#else + return vreinterpretq_m128i_s32( + vcombine_s32(vpadd_s32(vget_low_s32(a), vget_high_s32(a)), + vpadd_s32(vget_low_s32(b), vget_high_s32(b)))); +#endif +} + +// Horizontally add adjacent pairs of 16-bit integers in a and b, and pack the +// signed 16-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_pi16 +FORCE_INLINE __m64 _mm_hadd_pi16(__m64 a, __m64 b) +{ + return vreinterpret_m64_s16( + vpadd_s16(vreinterpret_s16_m64(a), vreinterpret_s16_m64(b))); +} + +// Horizontally add adjacent pairs of 32-bit integers in a and b, and pack the +// signed 32-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_pi32 +FORCE_INLINE __m64 _mm_hadd_pi32(__m64 a, __m64 b) +{ + return vreinterpret_m64_s32( + vpadd_s32(vreinterpret_s32_m64(a), vreinterpret_s32_m64(b))); +} + +// Horizontally add adjacent pairs of signed 16-bit integers in a and b using +// saturation, and pack the signed 16-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadds_epi16 +FORCE_INLINE __m128i _mm_hadds_epi16(__m128i _a, __m128i _b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + int16x8_t a = vreinterpretq_s16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); + return vreinterpretq_s64_s16( + vqaddq_s16(vuzp1q_s16(a, b), vuzp2q_s16(a, b))); +#else + int32x4_t a = vreinterpretq_s32_m128i(_a); + int32x4_t b = vreinterpretq_s32_m128i(_b); + // Interleave using vshrn/vmovn + // [a0|a2|a4|a6|b0|b2|b4|b6] + // [a1|a3|a5|a7|b1|b3|b5|b7] + int16x8_t ab0246 = vcombine_s16(vmovn_s32(a), vmovn_s32(b)); + int16x8_t ab1357 = vcombine_s16(vshrn_n_s32(a, 16), vshrn_n_s32(b, 16)); + // Saturated add + return vreinterpretq_m128i_s16(vqaddq_s16(ab0246, ab1357)); +#endif +} + +// Horizontally add adjacent pairs of signed 16-bit integers in a and b using +// saturation, and pack the signed 16-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadds_pi16 +FORCE_INLINE __m64 _mm_hadds_pi16(__m64 _a, __m64 _b) +{ + int16x4_t a = vreinterpret_s16_m64(_a); + int16x4_t b = vreinterpret_s16_m64(_b); +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpret_s64_s16(vqadd_s16(vuzp1_s16(a, b), vuzp2_s16(a, b))); +#else + int16x4x2_t res = vuzp_s16(a, b); + return vreinterpret_s64_s16(vqadd_s16(res.val[0], res.val[1])); +#endif +} + +// Horizontally subtract adjacent pairs of 16-bit integers in a and b, and pack +// the signed 16-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsub_epi16 +FORCE_INLINE __m128i _mm_hsub_epi16(__m128i _a, __m128i _b) +{ + int16x8_t a = vreinterpretq_s16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128i_s16( + vsubq_s16(vuzp1q_s16(a, b), vuzp2q_s16(a, b))); +#else + int16x8x2_t c = vuzpq_s16(a, b); + return vreinterpretq_m128i_s16(vsubq_s16(c.val[0], c.val[1])); +#endif +} + +// Horizontally subtract adjacent pairs of 32-bit integers in a and b, and pack +// the signed 32-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsub_epi32 +FORCE_INLINE __m128i _mm_hsub_epi32(__m128i _a, __m128i _b) +{ + int32x4_t a = vreinterpretq_s32_m128i(_a); + int32x4_t b = vreinterpretq_s32_m128i(_b); +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128i_s32( + vsubq_s32(vuzp1q_s32(a, b), vuzp2q_s32(a, b))); +#else + int32x4x2_t c = vuzpq_s32(a, b); + return vreinterpretq_m128i_s32(vsubq_s32(c.val[0], c.val[1])); +#endif +} + +// Horizontally subtract adjacent pairs of 16-bit integers in a and b, and pack +// the signed 16-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsub_pi16 +FORCE_INLINE __m64 _mm_hsub_pi16(__m64 _a, __m64 _b) +{ + int16x4_t a = vreinterpret_s16_m64(_a); + int16x4_t b = vreinterpret_s16_m64(_b); +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpret_m64_s16(vsub_s16(vuzp1_s16(a, b), vuzp2_s16(a, b))); +#else + int16x4x2_t c = vuzp_s16(a, b); + return vreinterpret_m64_s16(vsub_s16(c.val[0], c.val[1])); +#endif +} + +// Horizontally subtract adjacent pairs of 32-bit integers in a and b, and pack +// the signed 32-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_hsub_pi32 +FORCE_INLINE __m64 _mm_hsub_pi32(__m64 _a, __m64 _b) +{ + int32x2_t a = vreinterpret_s32_m64(_a); + int32x2_t b = vreinterpret_s32_m64(_b); +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpret_m64_s32(vsub_s32(vuzp1_s32(a, b), vuzp2_s32(a, b))); +#else + int32x2x2_t c = vuzp_s32(a, b); + return vreinterpret_m64_s32(vsub_s32(c.val[0], c.val[1])); +#endif +} + +// Horizontally subtract adjacent pairs of signed 16-bit integers in a and b +// using saturation, and pack the signed 16-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsubs_epi16 +FORCE_INLINE __m128i _mm_hsubs_epi16(__m128i _a, __m128i _b) +{ + int16x8_t a = vreinterpretq_s16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128i_s16( + vqsubq_s16(vuzp1q_s16(a, b), vuzp2q_s16(a, b))); +#else + int16x8x2_t c = vuzpq_s16(a, b); + return vreinterpretq_m128i_s16(vqsubq_s16(c.val[0], c.val[1])); +#endif +} + +// Horizontally subtract adjacent pairs of signed 16-bit integers in a and b +// using saturation, and pack the signed 16-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsubs_pi16 +FORCE_INLINE __m64 _mm_hsubs_pi16(__m64 _a, __m64 _b) +{ + int16x4_t a = vreinterpret_s16_m64(_a); + int16x4_t b = vreinterpret_s16_m64(_b); +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpret_m64_s16(vqsub_s16(vuzp1_s16(a, b), vuzp2_s16(a, b))); +#else + int16x4x2_t c = vuzp_s16(a, b); + return vreinterpret_m64_s16(vqsub_s16(c.val[0], c.val[1])); +#endif +} + +// Vertically multiply each unsigned 8-bit integer from a with the corresponding +// signed 8-bit integer from b, producing intermediate signed 16-bit integers. +// Horizontally add adjacent pairs of intermediate signed 16-bit integers, +// and pack the saturated results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maddubs_epi16 +FORCE_INLINE __m128i _mm_maddubs_epi16(__m128i _a, __m128i _b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + uint8x16_t a = vreinterpretq_u8_m128i(_a); + int8x16_t b = vreinterpretq_s8_m128i(_b); + int16x8_t tl = vmulq_s16(vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(a))), + vmovl_s8(vget_low_s8(b))); + int16x8_t th = vmulq_s16(vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(a))), + vmovl_s8(vget_high_s8(b))); + return vreinterpretq_m128i_s16( + vqaddq_s16(vuzp1q_s16(tl, th), vuzp2q_s16(tl, th))); +#else + // This would be much simpler if x86 would choose to zero extend OR sign + // extend, not both. This could probably be optimized better. + uint16x8_t a = vreinterpretq_u16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); + + // Zero extend a + int16x8_t a_odd = vreinterpretq_s16_u16(vshrq_n_u16(a, 8)); + int16x8_t a_even = vreinterpretq_s16_u16(vbicq_u16(a, vdupq_n_u16(0xff00))); + + // Sign extend by shifting left then shifting right. + int16x8_t b_even = vshrq_n_s16(vshlq_n_s16(b, 8), 8); + int16x8_t b_odd = vshrq_n_s16(b, 8); + + // multiply + int16x8_t prod1 = vmulq_s16(a_even, b_even); + int16x8_t prod2 = vmulq_s16(a_odd, b_odd); + + // saturated add + return vreinterpretq_m128i_s16(vqaddq_s16(prod1, prod2)); +#endif +} + +// Vertically multiply each unsigned 8-bit integer from a with the corresponding +// signed 8-bit integer from b, producing intermediate signed 16-bit integers. +// Horizontally add adjacent pairs of intermediate signed 16-bit integers, and +// pack the saturated results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maddubs_pi16 +FORCE_INLINE __m64 _mm_maddubs_pi16(__m64 _a, __m64 _b) +{ + uint16x4_t a = vreinterpret_u16_m64(_a); + int16x4_t b = vreinterpret_s16_m64(_b); + + // Zero extend a + int16x4_t a_odd = vreinterpret_s16_u16(vshr_n_u16(a, 8)); + int16x4_t a_even = vreinterpret_s16_u16(vand_u16(a, vdup_n_u16(0xff))); + + // Sign extend by shifting left then shifting right. + int16x4_t b_even = vshr_n_s16(vshl_n_s16(b, 8), 8); + int16x4_t b_odd = vshr_n_s16(b, 8); + + // multiply + int16x4_t prod1 = vmul_s16(a_even, b_even); + int16x4_t prod2 = vmul_s16(a_odd, b_odd); + + // saturated add + return vreinterpret_m64_s16(vqadd_s16(prod1, prod2)); +} + +// Multiply packed signed 16-bit integers in a and b, producing intermediate +// signed 32-bit integers. Shift right by 15 bits while rounding up, and store +// the packed 16-bit integers in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mulhrs_epi16 +FORCE_INLINE __m128i _mm_mulhrs_epi16(__m128i a, __m128i b) +{ + // Has issues due to saturation + // return vreinterpretq_m128i_s16(vqrdmulhq_s16(a, b)); + + // Multiply + int32x4_t mul_lo = vmull_s16(vget_low_s16(vreinterpretq_s16_m128i(a)), + vget_low_s16(vreinterpretq_s16_m128i(b))); + int32x4_t mul_hi = vmull_s16(vget_high_s16(vreinterpretq_s16_m128i(a)), + vget_high_s16(vreinterpretq_s16_m128i(b))); + + // Rounding narrowing shift right + // narrow = (int16_t)((mul + 16384) >> 15); + int16x4_t narrow_lo = vrshrn_n_s32(mul_lo, 15); + int16x4_t narrow_hi = vrshrn_n_s32(mul_hi, 15); + + // Join together + return vreinterpretq_m128i_s16(vcombine_s16(narrow_lo, narrow_hi)); +} + +// Multiply packed signed 16-bit integers in a and b, producing intermediate +// signed 32-bit integers. Truncate each intermediate integer to the 18 most +// significant bits, round by adding 1, and store bits [16:1] to dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mulhrs_pi16 +FORCE_INLINE __m64 _mm_mulhrs_pi16(__m64 a, __m64 b) +{ + int32x4_t mul_extend = + vmull_s16((vreinterpret_s16_m64(a)), (vreinterpret_s16_m64(b))); + + // Rounding narrowing shift right + return vreinterpret_m64_s16(vrshrn_n_s32(mul_extend, 15)); +} + +// Shuffle packed 8-bit integers in a according to shuffle control mask in the +// corresponding 8-bit element of b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_epi8 +FORCE_INLINE __m128i _mm_shuffle_epi8(__m128i a, __m128i b) +{ + int8x16_t tbl = vreinterpretq_s8_m128i(a); // input a + uint8x16_t idx = vreinterpretq_u8_m128i(b); // input b + uint8x16_t idx_masked = + vandq_u8(idx, vdupq_n_u8(0x8F)); // avoid using meaningless bits +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128i_s8(vqtbl1q_s8(tbl, idx_masked)); +#elif defined(__GNUC__) + int8x16_t ret; + // %e and %f represent the even and odd D registers + // respectively. + __asm__ __volatile__( + "vtbl.8 %e[ret], {%e[tbl], %f[tbl]}, %e[idx]\n" + "vtbl.8 %f[ret], {%e[tbl], %f[tbl]}, %f[idx]\n" + : [ret] "=&w"(ret) + : [tbl] "w"(tbl), [idx] "w"(idx_masked)); + return vreinterpretq_m128i_s8(ret); +#else + // use this line if testing on aarch64 + int8x8x2_t a_split = {vget_low_s8(tbl), vget_high_s8(tbl)}; + return vreinterpretq_m128i_s8( + vcombine_s8(vtbl2_s8(a_split, vget_low_u8(idx_masked)), + vtbl2_s8(a_split, vget_high_u8(idx_masked)))); +#endif +} + +// Shuffle packed 8-bit integers in a according to shuffle control mask in the +// corresponding 8-bit element of b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_pi8 +FORCE_INLINE __m64 _mm_shuffle_pi8(__m64 a, __m64 b) +{ + const int8x8_t controlMask = + vand_s8(vreinterpret_s8_m64(b), vdup_n_s8((int8_t) (0x1 << 7 | 0x07))); + int8x8_t res = vtbl1_s8(vreinterpret_s8_m64(a), controlMask); + return vreinterpret_m64_s8(res); +} + +// Negate packed 16-bit integers in a when the corresponding signed +// 16-bit integer in b is negative, and store the results in dst. +// Element in dst are zeroed out when the corresponding element +// in b is zero. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_epi16 +FORCE_INLINE __m128i _mm_sign_epi16(__m128i _a, __m128i _b) +{ + int16x8_t a = vreinterpretq_s16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFFFF : 0 + uint16x8_t ltMask = vreinterpretq_u16_s16(vshrq_n_s16(b, 15)); + // (b == 0) ? 0xFFFF : 0 +#if defined(__aarch64__) || defined(_M_ARM64) + int16x8_t zeroMask = vreinterpretq_s16_u16(vceqzq_s16(b)); +#else + int16x8_t zeroMask = vreinterpretq_s16_u16(vceqq_s16(b, vdupq_n_s16(0))); +#endif + + // bitwise select either a or negative 'a' (vnegq_s16(a) equals to negative + // 'a') based on ltMask + int16x8_t masked = vbslq_s16(ltMask, vnegq_s16(a), a); + // res = masked & (~zeroMask) + int16x8_t res = vbicq_s16(masked, zeroMask); + return vreinterpretq_m128i_s16(res); +} + +// Negate packed 32-bit integers in a when the corresponding signed +// 32-bit integer in b is negative, and store the results in dst. +// Element in dst are zeroed out when the corresponding element +// in b is zero. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_epi32 +FORCE_INLINE __m128i _mm_sign_epi32(__m128i _a, __m128i _b) +{ + int32x4_t a = vreinterpretq_s32_m128i(_a); + int32x4_t b = vreinterpretq_s32_m128i(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFFFFFFFF : 0 + uint32x4_t ltMask = vreinterpretq_u32_s32(vshrq_n_s32(b, 31)); + + // (b == 0) ? 0xFFFFFFFF : 0 +#if defined(__aarch64__) || defined(_M_ARM64) + int32x4_t zeroMask = vreinterpretq_s32_u32(vceqzq_s32(b)); +#else + int32x4_t zeroMask = vreinterpretq_s32_u32(vceqq_s32(b, vdupq_n_s32(0))); +#endif + + // bitwise select either a or negative 'a' (vnegq_s32(a) equals to negative + // 'a') based on ltMask + int32x4_t masked = vbslq_s32(ltMask, vnegq_s32(a), a); + // res = masked & (~zeroMask) + int32x4_t res = vbicq_s32(masked, zeroMask); + return vreinterpretq_m128i_s32(res); +} + +// Negate packed 8-bit integers in a when the corresponding signed +// 8-bit integer in b is negative, and store the results in dst. +// Element in dst are zeroed out when the corresponding element +// in b is zero. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_epi8 +FORCE_INLINE __m128i _mm_sign_epi8(__m128i _a, __m128i _b) +{ + int8x16_t a = vreinterpretq_s8_m128i(_a); + int8x16_t b = vreinterpretq_s8_m128i(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFF : 0 + uint8x16_t ltMask = vreinterpretq_u8_s8(vshrq_n_s8(b, 7)); + + // (b == 0) ? 0xFF : 0 +#if defined(__aarch64__) || defined(_M_ARM64) + int8x16_t zeroMask = vreinterpretq_s8_u8(vceqzq_s8(b)); +#else + int8x16_t zeroMask = vreinterpretq_s8_u8(vceqq_s8(b, vdupq_n_s8(0))); +#endif + + // bitwise select either a or negative 'a' (vnegq_s8(a) return negative 'a') + // based on ltMask + int8x16_t masked = vbslq_s8(ltMask, vnegq_s8(a), a); + // res = masked & (~zeroMask) + int8x16_t res = vbicq_s8(masked, zeroMask); + + return vreinterpretq_m128i_s8(res); +} + +// Negate packed 16-bit integers in a when the corresponding signed 16-bit +// integer in b is negative, and store the results in dst. Element in dst are +// zeroed out when the corresponding element in b is zero. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_pi16 +FORCE_INLINE __m64 _mm_sign_pi16(__m64 _a, __m64 _b) +{ + int16x4_t a = vreinterpret_s16_m64(_a); + int16x4_t b = vreinterpret_s16_m64(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFFFF : 0 + uint16x4_t ltMask = vreinterpret_u16_s16(vshr_n_s16(b, 15)); + + // (b == 0) ? 0xFFFF : 0 +#if defined(__aarch64__) || defined(_M_ARM64) + int16x4_t zeroMask = vreinterpret_s16_u16(vceqz_s16(b)); +#else + int16x4_t zeroMask = vreinterpret_s16_u16(vceq_s16(b, vdup_n_s16(0))); +#endif + + // bitwise select either a or negative 'a' (vneg_s16(a) return negative 'a') + // based on ltMask + int16x4_t masked = vbsl_s16(ltMask, vneg_s16(a), a); + // res = masked & (~zeroMask) + int16x4_t res = vbic_s16(masked, zeroMask); + + return vreinterpret_m64_s16(res); +} + +// Negate packed 32-bit integers in a when the corresponding signed 32-bit +// integer in b is negative, and store the results in dst. Element in dst are +// zeroed out when the corresponding element in b is zero. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_pi32 +FORCE_INLINE __m64 _mm_sign_pi32(__m64 _a, __m64 _b) +{ + int32x2_t a = vreinterpret_s32_m64(_a); + int32x2_t b = vreinterpret_s32_m64(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFFFFFFFF : 0 + uint32x2_t ltMask = vreinterpret_u32_s32(vshr_n_s32(b, 31)); + + // (b == 0) ? 0xFFFFFFFF : 0 +#if defined(__aarch64__) || defined(_M_ARM64) + int32x2_t zeroMask = vreinterpret_s32_u32(vceqz_s32(b)); +#else + int32x2_t zeroMask = vreinterpret_s32_u32(vceq_s32(b, vdup_n_s32(0))); +#endif + + // bitwise select either a or negative 'a' (vneg_s32(a) return negative 'a') + // based on ltMask + int32x2_t masked = vbsl_s32(ltMask, vneg_s32(a), a); + // res = masked & (~zeroMask) + int32x2_t res = vbic_s32(masked, zeroMask); + + return vreinterpret_m64_s32(res); +} + +// Negate packed 8-bit integers in a when the corresponding signed 8-bit integer +// in b is negative, and store the results in dst. Element in dst are zeroed out +// when the corresponding element in b is zero. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_pi8 +FORCE_INLINE __m64 _mm_sign_pi8(__m64 _a, __m64 _b) +{ + int8x8_t a = vreinterpret_s8_m64(_a); + int8x8_t b = vreinterpret_s8_m64(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFF : 0 + uint8x8_t ltMask = vreinterpret_u8_s8(vshr_n_s8(b, 7)); + + // (b == 0) ? 0xFF : 0 +#if defined(__aarch64__) || defined(_M_ARM64) + int8x8_t zeroMask = vreinterpret_s8_u8(vceqz_s8(b)); +#else + int8x8_t zeroMask = vreinterpret_s8_u8(vceq_s8(b, vdup_n_s8(0))); +#endif + + // bitwise select either a or negative 'a' (vneg_s8(a) return negative 'a') + // based on ltMask + int8x8_t masked = vbsl_s8(ltMask, vneg_s8(a), a); + // res = masked & (~zeroMask) + int8x8_t res = vbic_s8(masked, zeroMask); + + return vreinterpret_m64_s8(res); +} + +/* SSE4.1 */ + +// Blend packed 16-bit integers from a and b using control mask imm8, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blend_epi16 +// FORCE_INLINE __m128i _mm_blend_epi16(__m128i a, __m128i b, +// __constrange(0,255) int imm) +#define _mm_blend_epi16(a, b, imm) \ + _sse2neon_define2( \ + __m128i, a, b, \ + const uint16_t _mask[8] = \ + _sse2neon_init(((imm) & (1 << 0)) ? (uint16_t) - 1 : 0x0, \ + ((imm) & (1 << 1)) ? (uint16_t) - 1 : 0x0, \ + ((imm) & (1 << 2)) ? (uint16_t) - 1 : 0x0, \ + ((imm) & (1 << 3)) ? (uint16_t) - 1 : 0x0, \ + ((imm) & (1 << 4)) ? (uint16_t) - 1 : 0x0, \ + ((imm) & (1 << 5)) ? (uint16_t) - 1 : 0x0, \ + ((imm) & (1 << 6)) ? (uint16_t) - 1 : 0x0, \ + ((imm) & (1 << 7)) ? (uint16_t) - 1 : 0x0); \ + uint16x8_t _mask_vec = vld1q_u16(_mask); \ + uint16x8_t __a = vreinterpretq_u16_m128i(_a); \ + uint16x8_t __b = vreinterpretq_u16_m128i(_b); _sse2neon_return( \ + vreinterpretq_m128i_u16(vbslq_u16(_mask_vec, __b, __a)));) + +// Blend packed double-precision (64-bit) floating-point elements from a and b +// using control mask imm8, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blend_pd +#define _mm_blend_pd(a, b, imm) \ + _sse2neon_define2( \ + __m128d, a, b, \ + const uint64_t _mask[2] = \ + _sse2neon_init(((imm) & (1 << 0)) ? ~UINT64_C(0) : UINT64_C(0), \ + ((imm) & (1 << 1)) ? ~UINT64_C(0) : UINT64_C(0)); \ + uint64x2_t _mask_vec = vld1q_u64(_mask); \ + uint64x2_t __a = vreinterpretq_u64_m128d(_a); \ + uint64x2_t __b = vreinterpretq_u64_m128d(_b); _sse2neon_return( \ + vreinterpretq_m128d_u64(vbslq_u64(_mask_vec, __b, __a)));) + +// Blend packed single-precision (32-bit) floating-point elements from a and b +// using mask, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blend_ps +FORCE_INLINE __m128 _mm_blend_ps(__m128 _a, __m128 _b, const char imm8) +{ + const uint32_t + ALIGN_STRUCT(16) data[4] = {((imm8) & (1 << 0)) ? UINT32_MAX : 0, + ((imm8) & (1 << 1)) ? UINT32_MAX : 0, + ((imm8) & (1 << 2)) ? UINT32_MAX : 0, + ((imm8) & (1 << 3)) ? UINT32_MAX : 0}; + uint32x4_t mask = vld1q_u32(data); + float32x4_t a = vreinterpretq_f32_m128(_a); + float32x4_t b = vreinterpretq_f32_m128(_b); + return vreinterpretq_m128_f32(vbslq_f32(mask, b, a)); +} + +// Blend packed 8-bit integers from a and b using mask, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blendv_epi8 +FORCE_INLINE __m128i _mm_blendv_epi8(__m128i _a, __m128i _b, __m128i _mask) +{ + // Use a signed shift right to create a mask with the sign bit + uint8x16_t mask = + vreinterpretq_u8_s8(vshrq_n_s8(vreinterpretq_s8_m128i(_mask), 7)); + uint8x16_t a = vreinterpretq_u8_m128i(_a); + uint8x16_t b = vreinterpretq_u8_m128i(_b); + return vreinterpretq_m128i_u8(vbslq_u8(mask, b, a)); +} + +// Blend packed double-precision (64-bit) floating-point elements from a and b +// using mask, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blendv_pd +FORCE_INLINE __m128d _mm_blendv_pd(__m128d _a, __m128d _b, __m128d _mask) +{ + uint64x2_t mask = + vreinterpretq_u64_s64(vshrq_n_s64(vreinterpretq_s64_m128d(_mask), 63)); +#if defined(__aarch64__) || defined(_M_ARM64) + float64x2_t a = vreinterpretq_f64_m128d(_a); + float64x2_t b = vreinterpretq_f64_m128d(_b); + return vreinterpretq_m128d_f64(vbslq_f64(mask, b, a)); +#else + uint64x2_t a = vreinterpretq_u64_m128d(_a); + uint64x2_t b = vreinterpretq_u64_m128d(_b); + return vreinterpretq_m128d_u64(vbslq_u64(mask, b, a)); +#endif +} + +// Blend packed single-precision (32-bit) floating-point elements from a and b +// using mask, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blendv_ps +FORCE_INLINE __m128 _mm_blendv_ps(__m128 _a, __m128 _b, __m128 _mask) +{ + // Use a signed shift right to create a mask with the sign bit + uint32x4_t mask = + vreinterpretq_u32_s32(vshrq_n_s32(vreinterpretq_s32_m128(_mask), 31)); + float32x4_t a = vreinterpretq_f32_m128(_a); + float32x4_t b = vreinterpretq_f32_m128(_b); + return vreinterpretq_m128_f32(vbslq_f32(mask, b, a)); +} + +// Round the packed double-precision (64-bit) floating-point elements in a up +// to an integer value, and store the results as packed double-precision +// floating-point elements in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_ceil_pd +FORCE_INLINE __m128d _mm_ceil_pd(__m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64(vrndpq_f64(vreinterpretq_f64_m128d(a))); +#else + double a0, a1; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + return _mm_set_pd(ceil(a1), ceil(a0)); +#endif +} + +// Round the packed single-precision (32-bit) floating-point elements in a up to +// an integer value, and store the results as packed single-precision +// floating-point elements in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_ceil_ps +FORCE_INLINE __m128 _mm_ceil_ps(__m128 a) +{ +#if (defined(__aarch64__) || defined(_M_ARM64)) || \ + defined(__ARM_FEATURE_DIRECTED_ROUNDING) + return vreinterpretq_m128_f32(vrndpq_f32(vreinterpretq_f32_m128(a))); +#else + float *f = (float *) &a; + return _mm_set_ps(ceilf(f[3]), ceilf(f[2]), ceilf(f[1]), ceilf(f[0])); +#endif +} + +// Round the lower double-precision (64-bit) floating-point element in b up to +// an integer value, store the result as a double-precision floating-point +// element in the lower element of dst, and copy the upper element from a to the +// upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_ceil_sd +FORCE_INLINE __m128d _mm_ceil_sd(__m128d a, __m128d b) +{ + return _mm_move_sd(a, _mm_ceil_pd(b)); +} + +// Round the lower single-precision (32-bit) floating-point element in b up to +// an integer value, store the result as a single-precision floating-point +// element in the lower element of dst, and copy the upper 3 packed elements +// from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_ceil_ss +FORCE_INLINE __m128 _mm_ceil_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_ceil_ps(b)); +} + +// Compare packed 64-bit integers in a and b for equality, and store the results +// in dst +FORCE_INLINE __m128i _mm_cmpeq_epi64(__m128i a, __m128i b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128i_u64( + vceqq_u64(vreinterpretq_u64_m128i(a), vreinterpretq_u64_m128i(b))); +#else + // ARMv7 lacks vceqq_u64 + // (a == b) -> (a_lo == b_lo) && (a_hi == b_hi) + uint32x4_t cmp = + vceqq_u32(vreinterpretq_u32_m128i(a), vreinterpretq_u32_m128i(b)); + uint32x4_t swapped = vrev64q_u32(cmp); + return vreinterpretq_m128i_u32(vandq_u32(cmp, swapped)); +#endif +} + +// Sign extend packed 16-bit integers in a to packed 32-bit integers, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi16_epi32 +FORCE_INLINE __m128i _mm_cvtepi16_epi32(__m128i a) +{ + return vreinterpretq_m128i_s32( + vmovl_s16(vget_low_s16(vreinterpretq_s16_m128i(a)))); +} + +// Sign extend packed 16-bit integers in a to packed 64-bit integers, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi16_epi64 +FORCE_INLINE __m128i _mm_cvtepi16_epi64(__m128i a) +{ + int16x8_t s16x8 = vreinterpretq_s16_m128i(a); /* xxxx xxxx xxxx 0B0A */ + int32x4_t s32x4 = vmovl_s16(vget_low_s16(s16x8)); /* 000x 000x 000B 000A */ + int64x2_t s64x2 = vmovl_s32(vget_low_s32(s32x4)); /* 0000 000B 0000 000A */ + return vreinterpretq_m128i_s64(s64x2); +} + +// Sign extend packed 32-bit integers in a to packed 64-bit integers, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi32_epi64 +FORCE_INLINE __m128i _mm_cvtepi32_epi64(__m128i a) +{ + return vreinterpretq_m128i_s64( + vmovl_s32(vget_low_s32(vreinterpretq_s32_m128i(a)))); +} + +// Sign extend packed 8-bit integers in a to packed 16-bit integers, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi8_epi16 +FORCE_INLINE __m128i _mm_cvtepi8_epi16(__m128i a) +{ + int8x16_t s8x16 = vreinterpretq_s8_m128i(a); /* xxxx xxxx xxxx DCBA */ + int16x8_t s16x8 = vmovl_s8(vget_low_s8(s8x16)); /* 0x0x 0x0x 0D0C 0B0A */ + return vreinterpretq_m128i_s16(s16x8); +} + +// Sign extend packed 8-bit integers in a to packed 32-bit integers, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi8_epi32 +FORCE_INLINE __m128i _mm_cvtepi8_epi32(__m128i a) +{ + int8x16_t s8x16 = vreinterpretq_s8_m128i(a); /* xxxx xxxx xxxx DCBA */ + int16x8_t s16x8 = vmovl_s8(vget_low_s8(s8x16)); /* 0x0x 0x0x 0D0C 0B0A */ + int32x4_t s32x4 = vmovl_s16(vget_low_s16(s16x8)); /* 000D 000C 000B 000A */ + return vreinterpretq_m128i_s32(s32x4); +} + +// Sign extend packed 8-bit integers in the low 8 bytes of a to packed 64-bit +// integers, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi8_epi64 +FORCE_INLINE __m128i _mm_cvtepi8_epi64(__m128i a) +{ + int8x16_t s8x16 = vreinterpretq_s8_m128i(a); /* xxxx xxxx xxxx xxBA */ + int16x8_t s16x8 = vmovl_s8(vget_low_s8(s8x16)); /* 0x0x 0x0x 0x0x 0B0A */ + int32x4_t s32x4 = vmovl_s16(vget_low_s16(s16x8)); /* 000x 000x 000B 000A */ + int64x2_t s64x2 = vmovl_s32(vget_low_s32(s32x4)); /* 0000 000B 0000 000A */ + return vreinterpretq_m128i_s64(s64x2); +} + +// Zero extend packed unsigned 16-bit integers in a to packed 32-bit integers, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu16_epi32 +FORCE_INLINE __m128i _mm_cvtepu16_epi32(__m128i a) +{ + return vreinterpretq_m128i_u32( + vmovl_u16(vget_low_u16(vreinterpretq_u16_m128i(a)))); +} + +// Zero extend packed unsigned 16-bit integers in a to packed 64-bit integers, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu16_epi64 +FORCE_INLINE __m128i _mm_cvtepu16_epi64(__m128i a) +{ + uint16x8_t u16x8 = vreinterpretq_u16_m128i(a); /* xxxx xxxx xxxx 0B0A */ + uint32x4_t u32x4 = vmovl_u16(vget_low_u16(u16x8)); /* 000x 000x 000B 000A */ + uint64x2_t u64x2 = vmovl_u32(vget_low_u32(u32x4)); /* 0000 000B 0000 000A */ + return vreinterpretq_m128i_u64(u64x2); +} + +// Zero extend packed unsigned 32-bit integers in a to packed 64-bit integers, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu32_epi64 +FORCE_INLINE __m128i _mm_cvtepu32_epi64(__m128i a) +{ + return vreinterpretq_m128i_u64( + vmovl_u32(vget_low_u32(vreinterpretq_u32_m128i(a)))); +} + +// Zero extend packed unsigned 8-bit integers in a to packed 16-bit integers, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu8_epi16 +FORCE_INLINE __m128i _mm_cvtepu8_epi16(__m128i a) +{ + uint8x16_t u8x16 = vreinterpretq_u8_m128i(a); /* xxxx xxxx HGFE DCBA */ + uint16x8_t u16x8 = vmovl_u8(vget_low_u8(u8x16)); /* 0H0G 0F0E 0D0C 0B0A */ + return vreinterpretq_m128i_u16(u16x8); +} + +// Zero extend packed unsigned 8-bit integers in a to packed 32-bit integers, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu8_epi32 +FORCE_INLINE __m128i _mm_cvtepu8_epi32(__m128i a) +{ + uint8x16_t u8x16 = vreinterpretq_u8_m128i(a); /* xxxx xxxx xxxx DCBA */ + uint16x8_t u16x8 = vmovl_u8(vget_low_u8(u8x16)); /* 0x0x 0x0x 0D0C 0B0A */ + uint32x4_t u32x4 = vmovl_u16(vget_low_u16(u16x8)); /* 000D 000C 000B 000A */ + return vreinterpretq_m128i_u32(u32x4); +} + +// Zero extend packed unsigned 8-bit integers in the low 8 bytes of a to packed +// 64-bit integers, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu8_epi64 +FORCE_INLINE __m128i _mm_cvtepu8_epi64(__m128i a) +{ + uint8x16_t u8x16 = vreinterpretq_u8_m128i(a); /* xxxx xxxx xxxx xxBA */ + uint16x8_t u16x8 = vmovl_u8(vget_low_u8(u8x16)); /* 0x0x 0x0x 0x0x 0B0A */ + uint32x4_t u32x4 = vmovl_u16(vget_low_u16(u16x8)); /* 000x 000x 000B 000A */ + uint64x2_t u64x2 = vmovl_u32(vget_low_u32(u32x4)); /* 0000 000B 0000 000A */ + return vreinterpretq_m128i_u64(u64x2); +} + +// Conditionally multiply the packed double-precision (64-bit) floating-point +// elements in a and b using the high 4 bits in imm8, sum the four products, and +// conditionally store the sum in dst using the low 4 bits of imm8. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_dp_pd +FORCE_INLINE __m128d _mm_dp_pd(__m128d a, __m128d b, const int imm) +{ + // Generate mask value from constant immediate bit value + const int64_t bit0Mask = imm & 0x01 ? UINT64_MAX : 0; + const int64_t bit1Mask = imm & 0x02 ? UINT64_MAX : 0; +#if !SSE2NEON_PRECISE_DP + const int64_t bit4Mask = imm & 0x10 ? UINT64_MAX : 0; + const int64_t bit5Mask = imm & 0x20 ? UINT64_MAX : 0; +#endif + // Conditional multiplication +#if !SSE2NEON_PRECISE_DP + __m128d mul = _mm_mul_pd(a, b); + const __m128d mulMask = + _mm_castsi128_pd(_mm_set_epi64x(bit5Mask, bit4Mask)); + __m128d tmp = _mm_and_pd(mul, mulMask); +#else +#if defined(__aarch64__) || defined(_M_ARM64) + double d0 = (imm & 0x10) ? vgetq_lane_f64(vreinterpretq_f64_m128d(a), 0) * + vgetq_lane_f64(vreinterpretq_f64_m128d(b), 0) + : 0; + double d1 = (imm & 0x20) ? vgetq_lane_f64(vreinterpretq_f64_m128d(a), 1) * + vgetq_lane_f64(vreinterpretq_f64_m128d(b), 1) + : 0; +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + double d0 = (imm & 0x10) ? a0 * b0 : 0; + double d1 = (imm & 0x20) ? a1 * b1 : 0; +#endif + __m128d tmp = _mm_set_pd(d1, d0); +#endif + // Sum the products +#if defined(__aarch64__) || defined(_M_ARM64) + double sum = vpaddd_f64(vreinterpretq_f64_m128d(tmp)); +#else + double _tmp0 = sse2neon_recast_u64_f64( + vgetq_lane_u64(vreinterpretq_u64_m128d(tmp), 0)); + double _tmp1 = sse2neon_recast_u64_f64( + vgetq_lane_u64(vreinterpretq_u64_m128d(tmp), 1)); + double sum = _tmp0 + _tmp1; +#endif + // Conditionally store the sum + const __m128d sumMask = + _mm_castsi128_pd(_mm_set_epi64x(bit1Mask, bit0Mask)); + __m128d res = _mm_and_pd(_mm_set_pd1(sum), sumMask); + return res; +} + +// Conditionally multiply the packed single-precision (32-bit) floating-point +// elements in a and b using the high 4 bits in imm8, sum the four products, +// and conditionally store the sum in dst using the low 4 bits of imm. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_dp_ps +FORCE_INLINE __m128 _mm_dp_ps(__m128 a, __m128 b, const int imm) +{ + float32x4_t elementwise_prod = _mm_mul_ps(a, b); + +#if defined(__aarch64__) || defined(_M_ARM64) + /* shortcuts */ + if (imm == 0xFF) { + return _mm_set1_ps(vaddvq_f32(elementwise_prod)); + } + + if ((imm & 0x0F) == 0x0F) { + if (!(imm & (1 << 4))) + elementwise_prod = vsetq_lane_f32(0.0f, elementwise_prod, 0); + if (!(imm & (1 << 5))) + elementwise_prod = vsetq_lane_f32(0.0f, elementwise_prod, 1); + if (!(imm & (1 << 6))) + elementwise_prod = vsetq_lane_f32(0.0f, elementwise_prod, 2); + if (!(imm & (1 << 7))) + elementwise_prod = vsetq_lane_f32(0.0f, elementwise_prod, 3); + + return _mm_set1_ps(vaddvq_f32(elementwise_prod)); + } +#endif + + float s = 0.0f; + + if (imm & (1 << 4)) + s += vgetq_lane_f32(elementwise_prod, 0); + if (imm & (1 << 5)) + s += vgetq_lane_f32(elementwise_prod, 1); + if (imm & (1 << 6)) + s += vgetq_lane_f32(elementwise_prod, 2); + if (imm & (1 << 7)) + s += vgetq_lane_f32(elementwise_prod, 3); + + const float32_t res[4] = { + (imm & 0x1) ? s : 0.0f, + (imm & 0x2) ? s : 0.0f, + (imm & 0x4) ? s : 0.0f, + (imm & 0x8) ? s : 0.0f, + }; + return vreinterpretq_m128_f32(vld1q_f32(res)); +} + +// Extract a 32-bit integer from a, selected with imm8, and store the result in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_epi32 +// FORCE_INLINE int _mm_extract_epi32(__m128i a, __constrange(0,4) int imm) +#define _mm_extract_epi32(a, imm) \ + vgetq_lane_s32(vreinterpretq_s32_m128i(a), (imm)) + +// Extract a 64-bit integer from a, selected with imm8, and store the result in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_epi64 +// FORCE_INLINE __int64 _mm_extract_epi64(__m128i a, __constrange(0,2) int imm) +#define _mm_extract_epi64(a, imm) \ + vgetq_lane_s64(vreinterpretq_s64_m128i(a), (imm)) + +// Extract an 8-bit integer from a, selected with imm8, and store the result in +// the lower element of dst. FORCE_INLINE int _mm_extract_epi8(__m128i a, +// __constrange(0,16) int imm) +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_epi8 +#define _mm_extract_epi8(a, imm) vgetq_lane_u8(vreinterpretq_u8_m128i(a), (imm)) + +// Extracts the selected single-precision (32-bit) floating-point from a. +// FORCE_INLINE int _mm_extract_ps(__m128 a, __constrange(0,4) int imm) +#define _mm_extract_ps(a, imm) vgetq_lane_s32(vreinterpretq_s32_m128(a), (imm)) + +// Round the packed double-precision (64-bit) floating-point elements in a down +// to an integer value, and store the results as packed double-precision +// floating-point elements in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_floor_pd +FORCE_INLINE __m128d _mm_floor_pd(__m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128d_f64(vrndmq_f64(vreinterpretq_f64_m128d(a))); +#else + double a0, a1; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + return _mm_set_pd(floor(a1), floor(a0)); +#endif +} + +// Round the packed single-precision (32-bit) floating-point elements in a down +// to an integer value, and store the results as packed single-precision +// floating-point elements in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_floor_ps +FORCE_INLINE __m128 _mm_floor_ps(__m128 a) +{ +#if (defined(__aarch64__) || defined(_M_ARM64)) || \ + defined(__ARM_FEATURE_DIRECTED_ROUNDING) + return vreinterpretq_m128_f32(vrndmq_f32(vreinterpretq_f32_m128(a))); +#else + float *f = (float *) &a; + return _mm_set_ps(floorf(f[3]), floorf(f[2]), floorf(f[1]), floorf(f[0])); +#endif +} + +// Round the lower double-precision (64-bit) floating-point element in b down to +// an integer value, store the result as a double-precision floating-point +// element in the lower element of dst, and copy the upper element from a to the +// upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_floor_sd +FORCE_INLINE __m128d _mm_floor_sd(__m128d a, __m128d b) +{ + return _mm_move_sd(a, _mm_floor_pd(b)); +} + +// Round the lower single-precision (32-bit) floating-point element in b down to +// an integer value, store the result as a single-precision floating-point +// element in the lower element of dst, and copy the upper 3 packed elements +// from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_floor_ss +FORCE_INLINE __m128 _mm_floor_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_floor_ps(b)); +} + +// Copy a to dst, and insert the 32-bit integer i into dst at the location +// specified by imm8. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_insert_epi32 +// FORCE_INLINE __m128i _mm_insert_epi32(__m128i a, int b, +// __constrange(0,4) int imm) +#define _mm_insert_epi32(a, b, imm) \ + vreinterpretq_m128i_s32( \ + vsetq_lane_s32((b), vreinterpretq_s32_m128i(a), (imm))) + +// Copy a to dst, and insert the 64-bit integer i into dst at the location +// specified by imm8. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_insert_epi64 +// FORCE_INLINE __m128i _mm_insert_epi64(__m128i a, __int64 b, +// __constrange(0,2) int imm) +#define _mm_insert_epi64(a, b, imm) \ + vreinterpretq_m128i_s64( \ + vsetq_lane_s64((b), vreinterpretq_s64_m128i(a), (imm))) + +// Copy a to dst, and insert the lower 8-bit integer from i into dst at the +// location specified by imm8. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_insert_epi8 +// FORCE_INLINE __m128i _mm_insert_epi8(__m128i a, int b, +// __constrange(0,16) int imm) +#define _mm_insert_epi8(a, b, imm) \ + vreinterpretq_m128i_s8(vsetq_lane_s8((b), vreinterpretq_s8_m128i(a), (imm))) + +// Copy a to tmp, then insert a single-precision (32-bit) floating-point +// element from b into tmp using the control in imm8. Store tmp to dst using +// the mask in imm8 (elements are zeroed out when the corresponding bit is set). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=insert_ps +#define _mm_insert_ps(a, b, imm8) \ + _sse2neon_define2( \ + __m128, a, b, \ + float32x4_t tmp1 = \ + vsetq_lane_f32(vgetq_lane_f32(_b, (imm8 >> 6) & 0x3), \ + vreinterpretq_f32_m128(_a), 0); \ + float32x4_t tmp2 = \ + vsetq_lane_f32(vgetq_lane_f32(tmp1, 0), \ + vreinterpretq_f32_m128(_a), ((imm8 >> 4) & 0x3)); \ + const uint32_t data[4] = \ + _sse2neon_init(((imm8) & (1 << 0)) ? UINT32_MAX : 0, \ + ((imm8) & (1 << 1)) ? UINT32_MAX : 0, \ + ((imm8) & (1 << 2)) ? UINT32_MAX : 0, \ + ((imm8) & (1 << 3)) ? UINT32_MAX : 0); \ + uint32x4_t mask = vld1q_u32(data); \ + float32x4_t all_zeros = vdupq_n_f32(0); \ + \ + _sse2neon_return(vreinterpretq_m128_f32( \ + vbslq_f32(mask, all_zeros, vreinterpretq_f32_m128(tmp2))));) + +// Compare packed signed 32-bit integers in a and b, and store packed maximum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epi32 +FORCE_INLINE __m128i _mm_max_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vmaxq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Compare packed signed 8-bit integers in a and b, and store packed maximum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epi8 +FORCE_INLINE __m128i _mm_max_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vmaxq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Compare packed unsigned 16-bit integers in a and b, and store packed maximum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epu16 +FORCE_INLINE __m128i _mm_max_epu16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vmaxq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); +} + +// Compare packed unsigned 32-bit integers in a and b, and store packed maximum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epu32 +FORCE_INLINE __m128i _mm_max_epu32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u32( + vmaxq_u32(vreinterpretq_u32_m128i(a), vreinterpretq_u32_m128i(b))); +} + +// Compare packed signed 32-bit integers in a and b, and store packed minimum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_epi32 +FORCE_INLINE __m128i _mm_min_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vminq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Compare packed signed 8-bit integers in a and b, and store packed minimum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_epi8 +FORCE_INLINE __m128i _mm_min_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vminq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Compare packed unsigned 16-bit integers in a and b, and store packed minimum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_epu16 +FORCE_INLINE __m128i _mm_min_epu16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vminq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); +} + +// Compare packed unsigned 32-bit integers in a and b, and store packed minimum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epu32 +FORCE_INLINE __m128i _mm_min_epu32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u32( + vminq_u32(vreinterpretq_u32_m128i(a), vreinterpretq_u32_m128i(b))); +} + +// Horizontally compute the minimum amongst the packed unsigned 16-bit integers +// in a, store the minimum and index in dst, and zero the remaining bits in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_minpos_epu16 +FORCE_INLINE __m128i _mm_minpos_epu16(__m128i a) +{ + __m128i dst; + uint16_t min, idx = 0; +#if defined(__aarch64__) || defined(_M_ARM64) + // Find the minimum value + min = vminvq_u16(vreinterpretq_u16_m128i(a)); + + // Get the index of the minimum value + static const uint16_t idxv[] = {0, 1, 2, 3, 4, 5, 6, 7}; + uint16x8_t minv = vdupq_n_u16(min); + uint16x8_t cmeq = vceqq_u16(minv, vreinterpretq_u16_m128i(a)); + idx = vminvq_u16(vornq_u16(vld1q_u16(idxv), cmeq)); +#else + // Find the minimum value + __m64 tmp; + tmp = vreinterpret_m64_u16( + vmin_u16(vget_low_u16(vreinterpretq_u16_m128i(a)), + vget_high_u16(vreinterpretq_u16_m128i(a)))); + tmp = vreinterpret_m64_u16( + vpmin_u16(vreinterpret_u16_m64(tmp), vreinterpret_u16_m64(tmp))); + tmp = vreinterpret_m64_u16( + vpmin_u16(vreinterpret_u16_m64(tmp), vreinterpret_u16_m64(tmp))); + min = vget_lane_u16(vreinterpret_u16_m64(tmp), 0); + // Get the index of the minimum value + int i; + for (i = 0; i < 8; i++) { + if (min == vgetq_lane_u16(vreinterpretq_u16_m128i(a), 0)) { + idx = (uint16_t) i; + break; + } + a = _mm_srli_si128(a, 2); + } +#endif + // Generate result + dst = _mm_setzero_si128(); + dst = vreinterpretq_m128i_u16( + vsetq_lane_u16(min, vreinterpretq_u16_m128i(dst), 0)); + dst = vreinterpretq_m128i_u16( + vsetq_lane_u16(idx, vreinterpretq_u16_m128i(dst), 1)); + return dst; +} + +// Compute the sum of absolute differences (SADs) of quadruplets of unsigned +// 8-bit integers in a compared to those in b, and store the 16-bit results in +// dst. Eight SADs are performed using one quadruplet from b and eight +// quadruplets from a. One quadruplet is selected from b starting at on the +// offset specified in imm8. Eight quadruplets are formed from sequential 8-bit +// integers selected from a starting at the offset specified in imm8. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mpsadbw_epu8 +FORCE_INLINE __m128i _mm_mpsadbw_epu8(__m128i a, __m128i b, const int imm) +{ + uint8x16_t _a, _b; + + switch (imm & 0x4) { + case 0: + // do nothing + _a = vreinterpretq_u8_m128i(a); + break; + case 4: + _a = vreinterpretq_u8_u32(vextq_u32(vreinterpretq_u32_m128i(a), + vreinterpretq_u32_m128i(a), 1)); + break; + default: +#if defined(__GNUC__) || defined(__clang__) + __builtin_unreachable(); +#elif defined(_MSC_VER) + __assume(0); +#endif + break; + } + + switch (imm & 0x3) { + case 0: + _b = vreinterpretq_u8_u32( + vdupq_n_u32(vgetq_lane_u32(vreinterpretq_u32_m128i(b), 0))); + break; + case 1: + _b = vreinterpretq_u8_u32( + vdupq_n_u32(vgetq_lane_u32(vreinterpretq_u32_m128i(b), 1))); + break; + case 2: + _b = vreinterpretq_u8_u32( + vdupq_n_u32(vgetq_lane_u32(vreinterpretq_u32_m128i(b), 2))); + break; + case 3: + _b = vreinterpretq_u8_u32( + vdupq_n_u32(vgetq_lane_u32(vreinterpretq_u32_m128i(b), 3))); + break; + default: +#if defined(__GNUC__) || defined(__clang__) + __builtin_unreachable(); +#elif defined(_MSC_VER) + __assume(0); +#endif + break; + } + + int16x8_t c04, c15, c26, c37; + uint8x8_t low_b = vget_low_u8(_b); + c04 = vreinterpretq_s16_u16(vabdl_u8(vget_low_u8(_a), low_b)); + uint8x16_t _a_1 = vextq_u8(_a, _a, 1); + c15 = vreinterpretq_s16_u16(vabdl_u8(vget_low_u8(_a_1), low_b)); + uint8x16_t _a_2 = vextq_u8(_a, _a, 2); + c26 = vreinterpretq_s16_u16(vabdl_u8(vget_low_u8(_a_2), low_b)); + uint8x16_t _a_3 = vextq_u8(_a, _a, 3); + c37 = vreinterpretq_s16_u16(vabdl_u8(vget_low_u8(_a_3), low_b)); +#if defined(__aarch64__) || defined(_M_ARM64) + // |0|4|2|6| + c04 = vpaddq_s16(c04, c26); + // |1|5|3|7| + c15 = vpaddq_s16(c15, c37); + + int32x4_t trn1_c = + vtrn1q_s32(vreinterpretq_s32_s16(c04), vreinterpretq_s32_s16(c15)); + int32x4_t trn2_c = + vtrn2q_s32(vreinterpretq_s32_s16(c04), vreinterpretq_s32_s16(c15)); + return vreinterpretq_m128i_s16(vpaddq_s16(vreinterpretq_s16_s32(trn1_c), + vreinterpretq_s16_s32(trn2_c))); +#else + int16x4_t c01, c23, c45, c67; + c01 = vpadd_s16(vget_low_s16(c04), vget_low_s16(c15)); + c23 = vpadd_s16(vget_low_s16(c26), vget_low_s16(c37)); + c45 = vpadd_s16(vget_high_s16(c04), vget_high_s16(c15)); + c67 = vpadd_s16(vget_high_s16(c26), vget_high_s16(c37)); + + return vreinterpretq_m128i_s16( + vcombine_s16(vpadd_s16(c01, c23), vpadd_s16(c45, c67))); +#endif +} + +// Multiply the low signed 32-bit integers from each packed 64-bit element in +// a and b, and store the signed 64-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_epi32 +FORCE_INLINE __m128i _mm_mul_epi32(__m128i a, __m128i b) +{ + // vmull_s32 upcasts instead of masking, so we downcast. + int32x2_t a_lo = vmovn_s64(vreinterpretq_s64_m128i(a)); + int32x2_t b_lo = vmovn_s64(vreinterpretq_s64_m128i(b)); + return vreinterpretq_m128i_s64(vmull_s32(a_lo, b_lo)); +} + +// Multiply the packed 32-bit integers in a and b, producing intermediate 64-bit +// integers, and store the low 32 bits of the intermediate integers in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mullo_epi32 +FORCE_INLINE __m128i _mm_mullo_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vmulq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Convert packed signed 32-bit integers from a and b to packed 16-bit integers +// using unsigned saturation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_packus_epi32 +FORCE_INLINE __m128i _mm_packus_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vcombine_u16(vqmovun_s32(vreinterpretq_s32_m128i(a)), + vqmovun_s32(vreinterpretq_s32_m128i(b)))); +} + +// Round the packed double-precision (64-bit) floating-point elements in a using +// the rounding parameter, and store the results as packed double-precision +// floating-point elements in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_round_pd +FORCE_INLINE __m128d _mm_round_pd(__m128d a, int rounding) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + switch (rounding) { + case (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC): + return vreinterpretq_m128d_f64(vrndnq_f64(vreinterpretq_f64_m128d(a))); + case (_MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC): + return _mm_floor_pd(a); + case (_MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC): + return _mm_ceil_pd(a); + case (_MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC): + return vreinterpretq_m128d_f64(vrndq_f64(vreinterpretq_f64_m128d(a))); + default: //_MM_FROUND_CUR_DIRECTION + return vreinterpretq_m128d_f64(vrndiq_f64(vreinterpretq_f64_m128d(a))); + } +#else + double *v_double = (double *) &a; + + if (rounding == (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC) || + (rounding == _MM_FROUND_CUR_DIRECTION && + _MM_GET_ROUNDING_MODE() == _MM_ROUND_NEAREST)) { + double res[2], tmp; + for (int i = 0; i < 2; i++) { + tmp = (v_double[i] < 0) ? -v_double[i] : v_double[i]; + double roundDown = floor(tmp); // Round down value + double roundUp = ceil(tmp); // Round up value + double diffDown = tmp - roundDown; + double diffUp = roundUp - tmp; + if (diffDown < diffUp) { + /* If it's closer to the round down value, then use it */ + res[i] = roundDown; + } else if (diffDown > diffUp) { + /* If it's closer to the round up value, then use it */ + res[i] = roundUp; + } else { + /* If it's equidistant between round up and round down value, + * pick the one which is an even number */ + double half = roundDown / 2; + if (half != floor(half)) { + /* If the round down value is odd, return the round up value + */ + res[i] = roundUp; + } else { + /* If the round up value is odd, return the round down value + */ + res[i] = roundDown; + } + } + res[i] = (v_double[i] < 0) ? -res[i] : res[i]; + } + return _mm_set_pd(res[1], res[0]); + } else if (rounding == (_MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC) || + (rounding == _MM_FROUND_CUR_DIRECTION && + _MM_GET_ROUNDING_MODE() == _MM_ROUND_DOWN)) { + return _mm_floor_pd(a); + } else if (rounding == (_MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC) || + (rounding == _MM_FROUND_CUR_DIRECTION && + _MM_GET_ROUNDING_MODE() == _MM_ROUND_UP)) { + return _mm_ceil_pd(a); + } + return _mm_set_pd(v_double[1] > 0 ? floor(v_double[1]) : ceil(v_double[1]), + v_double[0] > 0 ? floor(v_double[0]) : ceil(v_double[0])); +#endif +} + +// Round the packed single-precision (32-bit) floating-point elements in a using +// the rounding parameter, and store the results as packed single-precision +// floating-point elements in dst. +// software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_round_ps +FORCE_INLINE __m128 _mm_round_ps(__m128 a, int rounding) +{ +#if (defined(__aarch64__) || defined(_M_ARM64)) || \ + defined(__ARM_FEATURE_DIRECTED_ROUNDING) + switch (rounding) { + case (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC): + return vreinterpretq_m128_f32(vrndnq_f32(vreinterpretq_f32_m128(a))); + case (_MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC): + return _mm_floor_ps(a); + case (_MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC): + return _mm_ceil_ps(a); + case (_MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC): + return vreinterpretq_m128_f32(vrndq_f32(vreinterpretq_f32_m128(a))); + default: //_MM_FROUND_CUR_DIRECTION + return vreinterpretq_m128_f32(vrndiq_f32(vreinterpretq_f32_m128(a))); + } +#else + float *v_float = (float *) &a; + + if (rounding == (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC) || + (rounding == _MM_FROUND_CUR_DIRECTION && + _MM_GET_ROUNDING_MODE() == _MM_ROUND_NEAREST)) { + uint32x4_t signmask = vdupq_n_u32(0x80000000); + float32x4_t half = vbslq_f32(signmask, vreinterpretq_f32_m128(a), + vdupq_n_f32(0.5f)); /* +/- 0.5 */ + int32x4_t r_normal = vcvtq_s32_f32(vaddq_f32( + vreinterpretq_f32_m128(a), half)); /* round to integer: [a + 0.5]*/ + int32x4_t r_trunc = vcvtq_s32_f32( + vreinterpretq_f32_m128(a)); /* truncate to integer: [a] */ + int32x4_t plusone = vreinterpretq_s32_u32(vshrq_n_u32( + vreinterpretq_u32_s32(vnegq_s32(r_trunc)), 31)); /* 1 or 0 */ + int32x4_t r_even = vbicq_s32(vaddq_s32(r_trunc, plusone), + vdupq_n_s32(1)); /* ([a] + {0,1}) & ~1 */ + float32x4_t delta = vsubq_f32( + vreinterpretq_f32_m128(a), + vcvtq_f32_s32(r_trunc)); /* compute delta: delta = (a - [a]) */ + uint32x4_t is_delta_half = + vceqq_f32(delta, half); /* delta == +/- 0.5 */ + return vreinterpretq_m128_f32( + vcvtq_f32_s32(vbslq_s32(is_delta_half, r_even, r_normal))); + } else if (rounding == (_MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC) || + (rounding == _MM_FROUND_CUR_DIRECTION && + _MM_GET_ROUNDING_MODE() == _MM_ROUND_DOWN)) { + return _mm_floor_ps(a); + } else if (rounding == (_MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC) || + (rounding == _MM_FROUND_CUR_DIRECTION && + _MM_GET_ROUNDING_MODE() == _MM_ROUND_UP)) { + return _mm_ceil_ps(a); + } + return _mm_set_ps(v_float[3] > 0 ? floorf(v_float[3]) : ceilf(v_float[3]), + v_float[2] > 0 ? floorf(v_float[2]) : ceilf(v_float[2]), + v_float[1] > 0 ? floorf(v_float[1]) : ceilf(v_float[1]), + v_float[0] > 0 ? floorf(v_float[0]) : ceilf(v_float[0])); +#endif +} + +// Round the lower double-precision (64-bit) floating-point element in b using +// the rounding parameter, store the result as a double-precision floating-point +// element in the lower element of dst, and copy the upper element from a to the +// upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_round_sd +FORCE_INLINE __m128d _mm_round_sd(__m128d a, __m128d b, int rounding) +{ + return _mm_move_sd(a, _mm_round_pd(b, rounding)); +} + +// Round the lower single-precision (32-bit) floating-point element in b using +// the rounding parameter, store the result as a single-precision floating-point +// element in the lower element of dst, and copy the upper 3 packed elements +// from a to the upper elements of dst. Rounding is done according to the +// rounding[3:0] parameter, which can be one of: +// (_MM_FROUND_TO_NEAREST_INT |_MM_FROUND_NO_EXC) // round to nearest, and +// suppress exceptions +// (_MM_FROUND_TO_NEG_INF |_MM_FROUND_NO_EXC) // round down, and +// suppress exceptions +// (_MM_FROUND_TO_POS_INF |_MM_FROUND_NO_EXC) // round up, and suppress +// exceptions +// (_MM_FROUND_TO_ZERO |_MM_FROUND_NO_EXC) // truncate, and suppress +// exceptions _MM_FROUND_CUR_DIRECTION // use MXCSR.RC; see +// _MM_SET_ROUNDING_MODE +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_round_ss +FORCE_INLINE __m128 _mm_round_ss(__m128 a, __m128 b, int rounding) +{ + return _mm_move_ss(a, _mm_round_ps(b, rounding)); +} + +// Load 128-bits of integer data from memory into dst using a non-temporal +// memory hint. mem_addr must be aligned on a 16-byte boundary or a +// general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_load_si128 +FORCE_INLINE __m128i _mm_stream_load_si128(__m128i *p) +{ +#if __has_builtin(__builtin_nontemporal_store) + return __builtin_nontemporal_load(p); +#else + return vreinterpretq_m128i_s64(vld1q_s64((int64_t *) p)); +#endif +} + +// Compute the bitwise NOT of a and then AND with a 128-bit vector containing +// all 1's, and return 1 if the result is zero, otherwise return 0. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_test_all_ones +FORCE_INLINE int _mm_test_all_ones(__m128i a) +{ + return (uint64_t) (vgetq_lane_s64(a, 0) & vgetq_lane_s64(a, 1)) == + ~(uint64_t) 0; +} + +// Compute the bitwise AND of 128 bits (representing integer data) in a and +// mask, and return 1 if the result is zero, otherwise return 0. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_test_all_zeros +FORCE_INLINE int _mm_test_all_zeros(__m128i a, __m128i mask) +{ + int64x2_t a_and_mask = + vandq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(mask)); + return !(vgetq_lane_s64(a_and_mask, 0) | vgetq_lane_s64(a_and_mask, 1)); +} + +// Compute the bitwise AND of 128 bits (representing integer data) in a and +// mask, and set ZF to 1 if the result is zero, otherwise set ZF to 0. Compute +// the bitwise NOT of a and then AND with mask, and set CF to 1 if the result is +// zero, otherwise set CF to 0. Return 1 if both the ZF and CF values are zero, +// otherwise return 0. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_test_mix_ones_zero +// Note: Argument names may be wrong in the Intel intrinsics guide. +FORCE_INLINE int _mm_test_mix_ones_zeros(__m128i a, __m128i mask) +{ + uint64x2_t v = vreinterpretq_u64_m128i(a); + uint64x2_t m = vreinterpretq_u64_m128i(mask); + + // find ones (set-bits) and zeros (clear-bits) under clip mask + uint64x2_t ones = vandq_u64(m, v); + uint64x2_t zeros = vbicq_u64(m, v); + + // If both 128-bit variables are populated (non-zero) then return 1. + // For comparison purposes, first compact each var down to 32-bits. + uint32x2_t reduced = vpmax_u32(vqmovn_u64(ones), vqmovn_u64(zeros)); + + // if folding minimum is non-zero then both vars must be non-zero + return (vget_lane_u32(vpmin_u32(reduced, reduced), 0) != 0); +} + +// Compute the bitwise AND of 128 bits (representing integer data) in a and b, +// and set ZF to 1 if the result is zero, otherwise set ZF to 0. Compute the +// bitwise NOT of a and then AND with b, and set CF to 1 if the result is zero, +// otherwise set CF to 0. Return the CF value. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_testc_si128 +FORCE_INLINE int _mm_testc_si128(__m128i a, __m128i b) +{ + int64x2_t s64 = + vbicq_s64(vreinterpretq_s64_m128i(b), vreinterpretq_s64_m128i(a)); + return !(vgetq_lane_s64(s64, 0) | vgetq_lane_s64(s64, 1)); +} + +// Compute the bitwise AND of 128 bits (representing integer data) in a and b, +// and set ZF to 1 if the result is zero, otherwise set ZF to 0. Compute the +// bitwise NOT of a and then AND with b, and set CF to 1 if the result is zero, +// otherwise set CF to 0. Return 1 if both the ZF and CF values are zero, +// otherwise return 0. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_testnzc_si128 +#define _mm_testnzc_si128(a, b) _mm_test_mix_ones_zeros(a, b) + +// Compute the bitwise AND of 128 bits (representing integer data) in a and b, +// and set ZF to 1 if the result is zero, otherwise set ZF to 0. Compute the +// bitwise NOT of a and then AND with b, and set CF to 1 if the result is zero, +// otherwise set CF to 0. Return the ZF value. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_testz_si128 +FORCE_INLINE int _mm_testz_si128(__m128i a, __m128i b) +{ + int64x2_t s64 = + vandq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b)); + return !(vgetq_lane_s64(s64, 0) | vgetq_lane_s64(s64, 1)); +} + +/* SSE4.2 */ + +static const uint16_t ALIGN_STRUCT(16) _sse2neon_cmpestr_mask16b[8] = { + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, +}; +static const uint8_t ALIGN_STRUCT(16) _sse2neon_cmpestr_mask8b[16] = { + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, +}; + +/* specify the source data format */ +#define _SIDD_UBYTE_OPS 0x00 /* unsigned 8-bit characters */ +#define _SIDD_UWORD_OPS 0x01 /* unsigned 16-bit characters */ +#define _SIDD_SBYTE_OPS 0x02 /* signed 8-bit characters */ +#define _SIDD_SWORD_OPS 0x03 /* signed 16-bit characters */ + +/* specify the comparison operation */ +#define _SIDD_CMP_EQUAL_ANY 0x00 /* compare equal any: strchr */ +#define _SIDD_CMP_RANGES 0x04 /* compare ranges */ +#define _SIDD_CMP_EQUAL_EACH 0x08 /* compare equal each: strcmp */ +#define _SIDD_CMP_EQUAL_ORDERED 0x0C /* compare equal ordered */ + +/* specify the polarity */ +#define _SIDD_POSITIVE_POLARITY 0x00 +#define _SIDD_MASKED_POSITIVE_POLARITY 0x20 +#define _SIDD_NEGATIVE_POLARITY 0x10 /* negate results */ +#define _SIDD_MASKED_NEGATIVE_POLARITY \ + 0x30 /* negate results only before end of string */ + +/* specify the output selection in _mm_cmpXstri */ +#define _SIDD_LEAST_SIGNIFICANT 0x00 +#define _SIDD_MOST_SIGNIFICANT 0x40 + +/* specify the output selection in _mm_cmpXstrm */ +#define _SIDD_BIT_MASK 0x00 +#define _SIDD_UNIT_MASK 0x40 + +/* Pattern Matching for C macros. + * https://github.com/pfultz2/Cloak/wiki/C-Preprocessor-tricks,-tips,-and-idioms + */ + +/* catenate */ +#define SSE2NEON_PRIMITIVE_CAT(a, ...) a##__VA_ARGS__ +#define SSE2NEON_CAT(a, b) SSE2NEON_PRIMITIVE_CAT(a, b) + +#define SSE2NEON_IIF(c) SSE2NEON_PRIMITIVE_CAT(SSE2NEON_IIF_, c) +/* run the 2nd parameter */ +#define SSE2NEON_IIF_0(t, ...) __VA_ARGS__ +/* run the 1st parameter */ +#define SSE2NEON_IIF_1(t, ...) t + +#define SSE2NEON_COMPL(b) SSE2NEON_PRIMITIVE_CAT(SSE2NEON_COMPL_, b) +#define SSE2NEON_COMPL_0 1 +#define SSE2NEON_COMPL_1 0 + +#define SSE2NEON_DEC(x) SSE2NEON_PRIMITIVE_CAT(SSE2NEON_DEC_, x) +#define SSE2NEON_DEC_1 0 +#define SSE2NEON_DEC_2 1 +#define SSE2NEON_DEC_3 2 +#define SSE2NEON_DEC_4 3 +#define SSE2NEON_DEC_5 4 +#define SSE2NEON_DEC_6 5 +#define SSE2NEON_DEC_7 6 +#define SSE2NEON_DEC_8 7 +#define SSE2NEON_DEC_9 8 +#define SSE2NEON_DEC_10 9 +#define SSE2NEON_DEC_11 10 +#define SSE2NEON_DEC_12 11 +#define SSE2NEON_DEC_13 12 +#define SSE2NEON_DEC_14 13 +#define SSE2NEON_DEC_15 14 +#define SSE2NEON_DEC_16 15 + +/* detection */ +#define SSE2NEON_CHECK_N(x, n, ...) n +#define SSE2NEON_CHECK(...) SSE2NEON_CHECK_N(__VA_ARGS__, 0, ) +#define SSE2NEON_PROBE(x) x, 1, + +#define SSE2NEON_NOT(x) SSE2NEON_CHECK(SSE2NEON_PRIMITIVE_CAT(SSE2NEON_NOT_, x)) +#define SSE2NEON_NOT_0 SSE2NEON_PROBE(~) + +#define SSE2NEON_BOOL(x) SSE2NEON_COMPL(SSE2NEON_NOT(x)) +#define SSE2NEON_IF(c) SSE2NEON_IIF(SSE2NEON_BOOL(c)) + +#define SSE2NEON_EAT(...) +#define SSE2NEON_EXPAND(...) __VA_ARGS__ +#define SSE2NEON_WHEN(c) SSE2NEON_IF(c)(SSE2NEON_EXPAND, SSE2NEON_EAT) + +/* recursion */ +/* deferred expression */ +#define SSE2NEON_EMPTY() +#define SSE2NEON_DEFER(id) id SSE2NEON_EMPTY() +#define SSE2NEON_OBSTRUCT(...) __VA_ARGS__ SSE2NEON_DEFER(SSE2NEON_EMPTY)() +#define SSE2NEON_EXPAND(...) __VA_ARGS__ + +#define SSE2NEON_EVAL(...) \ + SSE2NEON_EVAL1(SSE2NEON_EVAL1(SSE2NEON_EVAL1(__VA_ARGS__))) +#define SSE2NEON_EVAL1(...) \ + SSE2NEON_EVAL2(SSE2NEON_EVAL2(SSE2NEON_EVAL2(__VA_ARGS__))) +#define SSE2NEON_EVAL2(...) \ + SSE2NEON_EVAL3(SSE2NEON_EVAL3(SSE2NEON_EVAL3(__VA_ARGS__))) +#define SSE2NEON_EVAL3(...) __VA_ARGS__ + +#define SSE2NEON_REPEAT(count, macro, ...) \ + SSE2NEON_WHEN(count) \ + (SSE2NEON_OBSTRUCT(SSE2NEON_REPEAT_INDIRECT)()( \ + SSE2NEON_DEC(count), macro, \ + __VA_ARGS__) SSE2NEON_OBSTRUCT(macro)(SSE2NEON_DEC(count), \ + __VA_ARGS__)) +#define SSE2NEON_REPEAT_INDIRECT() SSE2NEON_REPEAT + +#define SSE2NEON_SIZE_OF_byte 8 +#define SSE2NEON_NUMBER_OF_LANES_byte 16 +#define SSE2NEON_SIZE_OF_word 16 +#define SSE2NEON_NUMBER_OF_LANES_word 8 + +#define SSE2NEON_COMPARE_EQUAL_THEN_FILL_LANE(i, type) \ + mtx[i] = vreinterpretq_m128i_##type(vceqq_##type( \ + vdupq_n_##type(vgetq_lane_##type(vreinterpretq_##type##_m128i(b), i)), \ + vreinterpretq_##type##_m128i(a))); + +#define SSE2NEON_FILL_LANE(i, type) \ + vec_b[i] = \ + vdupq_n_##type(vgetq_lane_##type(vreinterpretq_##type##_m128i(b), i)); + +#define PCMPSTR_RANGES(a, b, mtx, data_type_prefix, type_prefix, size, \ + number_of_lanes, byte_or_word) \ + do { \ + SSE2NEON_CAT( \ + data_type_prefix, \ + SSE2NEON_CAT(size, \ + SSE2NEON_CAT(x, SSE2NEON_CAT(number_of_lanes, _t)))) \ + vec_b[number_of_lanes]; \ + __m128i mask = SSE2NEON_IIF(byte_or_word)( \ + vreinterpretq_m128i_u16(vdupq_n_u16(0xff)), \ + vreinterpretq_m128i_u32(vdupq_n_u32(0xffff))); \ + SSE2NEON_EVAL(SSE2NEON_REPEAT(number_of_lanes, SSE2NEON_FILL_LANE, \ + SSE2NEON_CAT(type_prefix, size))) \ + for (int i = 0; i < number_of_lanes; i++) { \ + mtx[i] = SSE2NEON_CAT(vreinterpretq_m128i_u, \ + size)(SSE2NEON_CAT(vbslq_u, size)( \ + SSE2NEON_CAT(vreinterpretq_u, \ + SSE2NEON_CAT(size, _m128i))(mask), \ + SSE2NEON_CAT(vcgeq_, SSE2NEON_CAT(type_prefix, size))( \ + vec_b[i], \ + SSE2NEON_CAT( \ + vreinterpretq_, \ + SSE2NEON_CAT(type_prefix, \ + SSE2NEON_CAT(size, _m128i(a))))), \ + SSE2NEON_CAT(vcleq_, SSE2NEON_CAT(type_prefix, size))( \ + vec_b[i], \ + SSE2NEON_CAT( \ + vreinterpretq_, \ + SSE2NEON_CAT(type_prefix, \ + SSE2NEON_CAT(size, _m128i(a))))))); \ + } \ + } while (0) + +#define PCMPSTR_EQ(a, b, mtx, size, number_of_lanes) \ + do { \ + SSE2NEON_EVAL(SSE2NEON_REPEAT(number_of_lanes, \ + SSE2NEON_COMPARE_EQUAL_THEN_FILL_LANE, \ + SSE2NEON_CAT(u, size))) \ + } while (0) + +#define SSE2NEON_CMP_EQUAL_ANY_IMPL(type) \ + static int _sse2neon_cmp_##type##_equal_any(__m128i a, int la, __m128i b, \ + int lb) \ + { \ + __m128i mtx[16]; \ + PCMPSTR_EQ(a, b, mtx, SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ + SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, type)); \ + return SSE2NEON_CAT( \ + _sse2neon_aggregate_equal_any_, \ + SSE2NEON_CAT( \ + SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ + SSE2NEON_CAT(x, SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, \ + type))))(la, lb, mtx); \ + } + +#define SSE2NEON_CMP_RANGES_IMPL(type, data_type, us, byte_or_word) \ + static int _sse2neon_cmp_##us##type##_ranges(__m128i a, int la, __m128i b, \ + int lb) \ + { \ + __m128i mtx[16]; \ + PCMPSTR_RANGES( \ + a, b, mtx, data_type, us, SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ + SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, type), byte_or_word); \ + return SSE2NEON_CAT( \ + _sse2neon_aggregate_ranges_, \ + SSE2NEON_CAT( \ + SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ + SSE2NEON_CAT(x, SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, \ + type))))(la, lb, mtx); \ + } + +#define SSE2NEON_CMP_EQUAL_ORDERED_IMPL(type) \ + static int _sse2neon_cmp_##type##_equal_ordered(__m128i a, int la, \ + __m128i b, int lb) \ + { \ + __m128i mtx[16]; \ + PCMPSTR_EQ(a, b, mtx, SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ + SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, type)); \ + return SSE2NEON_CAT( \ + _sse2neon_aggregate_equal_ordered_, \ + SSE2NEON_CAT( \ + SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ + SSE2NEON_CAT(x, \ + SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, type))))( \ + SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, type), la, lb, mtx); \ + } + +static int _sse2neon_aggregate_equal_any_8x16(int la, int lb, __m128i mtx[16]) +{ + int res = 0; + int m = (1 << la) - 1; + uint8x8_t vec_mask = vld1_u8(_sse2neon_cmpestr_mask8b); + uint8x8_t t_lo = vtst_u8(vdup_n_u8(m & 0xff), vec_mask); + uint8x8_t t_hi = vtst_u8(vdup_n_u8(m >> 8), vec_mask); + uint8x16_t vec = vcombine_u8(t_lo, t_hi); + for (int j = 0; j < lb; j++) { + mtx[j] = vreinterpretq_m128i_u8( + vandq_u8(vec, vreinterpretq_u8_m128i(mtx[j]))); + mtx[j] = vreinterpretq_m128i_u8( + vshrq_n_u8(vreinterpretq_u8_m128i(mtx[j]), 7)); + int tmp = _sse2neon_vaddvq_u8(vreinterpretq_u8_m128i(mtx[j])) ? 1 : 0; + res |= (tmp << j); + } + return res; +} + +static int _sse2neon_aggregate_equal_any_16x8(int la, int lb, __m128i mtx[16]) +{ + int res = 0; + int m = (1 << la) - 1; + uint16x8_t vec = + vtstq_u16(vdupq_n_u16(m), vld1q_u16(_sse2neon_cmpestr_mask16b)); + for (int j = 0; j < lb; j++) { + mtx[j] = vreinterpretq_m128i_u16( + vandq_u16(vec, vreinterpretq_u16_m128i(mtx[j]))); + mtx[j] = vreinterpretq_m128i_u16( + vshrq_n_u16(vreinterpretq_u16_m128i(mtx[j]), 15)); + int tmp = _sse2neon_vaddvq_u16(vreinterpretq_u16_m128i(mtx[j])) ? 1 : 0; + res |= (tmp << j); + } + return res; +} + +/* clang-format off */ +#define SSE2NEON_GENERATE_CMP_EQUAL_ANY(prefix) \ + prefix##IMPL(byte) \ + prefix##IMPL(word) +/* clang-format on */ + +SSE2NEON_GENERATE_CMP_EQUAL_ANY(SSE2NEON_CMP_EQUAL_ANY_) + +static int _sse2neon_aggregate_ranges_16x8(int la, int lb, __m128i mtx[16]) +{ + int res = 0; + int m = (1 << la) - 1; + uint16x8_t vec = + vtstq_u16(vdupq_n_u16(m), vld1q_u16(_sse2neon_cmpestr_mask16b)); + for (int j = 0; j < lb; j++) { + mtx[j] = vreinterpretq_m128i_u16( + vandq_u16(vec, vreinterpretq_u16_m128i(mtx[j]))); + mtx[j] = vreinterpretq_m128i_u16( + vshrq_n_u16(vreinterpretq_u16_m128i(mtx[j]), 15)); + __m128i tmp = vreinterpretq_m128i_u32( + vshrq_n_u32(vreinterpretq_u32_m128i(mtx[j]), 16)); + uint32x4_t vec_res = vandq_u32(vreinterpretq_u32_m128i(mtx[j]), + vreinterpretq_u32_m128i(tmp)); +#if defined(__aarch64__) || defined(_M_ARM64) + int t = vaddvq_u32(vec_res) ? 1 : 0; +#else + uint64x2_t sumh = vpaddlq_u32(vec_res); + int t = vgetq_lane_u64(sumh, 0) + vgetq_lane_u64(sumh, 1); +#endif + res |= (t << j); + } + return res; +} + +static int _sse2neon_aggregate_ranges_8x16(int la, int lb, __m128i mtx[16]) +{ + int res = 0; + int m = (1 << la) - 1; + uint8x8_t vec_mask = vld1_u8(_sse2neon_cmpestr_mask8b); + uint8x8_t t_lo = vtst_u8(vdup_n_u8(m & 0xff), vec_mask); + uint8x8_t t_hi = vtst_u8(vdup_n_u8(m >> 8), vec_mask); + uint8x16_t vec = vcombine_u8(t_lo, t_hi); + for (int j = 0; j < lb; j++) { + mtx[j] = vreinterpretq_m128i_u8( + vandq_u8(vec, vreinterpretq_u8_m128i(mtx[j]))); + mtx[j] = vreinterpretq_m128i_u8( + vshrq_n_u8(vreinterpretq_u8_m128i(mtx[j]), 7)); + __m128i tmp = vreinterpretq_m128i_u16( + vshrq_n_u16(vreinterpretq_u16_m128i(mtx[j]), 8)); + uint16x8_t vec_res = vandq_u16(vreinterpretq_u16_m128i(mtx[j]), + vreinterpretq_u16_m128i(tmp)); + int t = _sse2neon_vaddvq_u16(vec_res) ? 1 : 0; + res |= (t << j); + } + return res; +} + +#define SSE2NEON_CMP_RANGES_IS_BYTE 1 +#define SSE2NEON_CMP_RANGES_IS_WORD 0 + +/* clang-format off */ +#define SSE2NEON_GENERATE_CMP_RANGES(prefix) \ + prefix##IMPL(byte, uint, u, prefix##IS_BYTE) \ + prefix##IMPL(byte, int, s, prefix##IS_BYTE) \ + prefix##IMPL(word, uint, u, prefix##IS_WORD) \ + prefix##IMPL(word, int, s, prefix##IS_WORD) +/* clang-format on */ + +SSE2NEON_GENERATE_CMP_RANGES(SSE2NEON_CMP_RANGES_) + +#undef SSE2NEON_CMP_RANGES_IS_BYTE +#undef SSE2NEON_CMP_RANGES_IS_WORD + +static int _sse2neon_cmp_byte_equal_each(__m128i a, int la, __m128i b, int lb) +{ + uint8x16_t mtx = + vceqq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b)); + int m0 = (la < lb) ? 0 : ((1 << la) - (1 << lb)); + int m1 = 0x10000 - (1 << la); + int tb = 0x10000 - (1 << lb); + uint8x8_t vec_mask, vec0_lo, vec0_hi, vec1_lo, vec1_hi; + uint8x8_t tmp_lo, tmp_hi, res_lo, res_hi; + vec_mask = vld1_u8(_sse2neon_cmpestr_mask8b); + vec0_lo = vtst_u8(vdup_n_u8(m0), vec_mask); + vec0_hi = vtst_u8(vdup_n_u8(m0 >> 8), vec_mask); + vec1_lo = vtst_u8(vdup_n_u8(m1), vec_mask); + vec1_hi = vtst_u8(vdup_n_u8(m1 >> 8), vec_mask); + tmp_lo = vtst_u8(vdup_n_u8(tb), vec_mask); + tmp_hi = vtst_u8(vdup_n_u8(tb >> 8), vec_mask); + + res_lo = vbsl_u8(vec0_lo, vdup_n_u8(0), vget_low_u8(mtx)); + res_hi = vbsl_u8(vec0_hi, vdup_n_u8(0), vget_high_u8(mtx)); + res_lo = vbsl_u8(vec1_lo, tmp_lo, res_lo); + res_hi = vbsl_u8(vec1_hi, tmp_hi, res_hi); + res_lo = vand_u8(res_lo, vec_mask); + res_hi = vand_u8(res_hi, vec_mask); + + int res = _sse2neon_vaddv_u8(res_lo) + (_sse2neon_vaddv_u8(res_hi) << 8); + return res; +} + +static int _sse2neon_cmp_word_equal_each(__m128i a, int la, __m128i b, int lb) +{ + uint16x8_t mtx = + vceqq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b)); + int m0 = (la < lb) ? 0 : ((1 << la) - (1 << lb)); + int m1 = 0x100 - (1 << la); + int tb = 0x100 - (1 << lb); + uint16x8_t vec_mask = vld1q_u16(_sse2neon_cmpestr_mask16b); + uint16x8_t vec0 = vtstq_u16(vdupq_n_u16(m0), vec_mask); + uint16x8_t vec1 = vtstq_u16(vdupq_n_u16(m1), vec_mask); + uint16x8_t tmp = vtstq_u16(vdupq_n_u16(tb), vec_mask); + mtx = vbslq_u16(vec0, vdupq_n_u16(0), mtx); + mtx = vbslq_u16(vec1, tmp, mtx); + mtx = vandq_u16(mtx, vec_mask); + return _sse2neon_vaddvq_u16(mtx); +} + +#define SSE2NEON_AGGREGATE_EQUAL_ORDER_IS_UBYTE 1 +#define SSE2NEON_AGGREGATE_EQUAL_ORDER_IS_UWORD 0 + +#define SSE2NEON_AGGREGATE_EQUAL_ORDER_IMPL(size, number_of_lanes, data_type) \ + static int _sse2neon_aggregate_equal_ordered_##size##x##number_of_lanes( \ + int bound, int la, int lb, __m128i mtx[16]) \ + { \ + int res = 0; \ + int m1 = SSE2NEON_IIF(data_type)(0x10000, 0x100) - (1 << la); \ + uint##size##x8_t vec_mask = SSE2NEON_IIF(data_type)( \ + vld1_u##size(_sse2neon_cmpestr_mask##size##b), \ + vld1q_u##size(_sse2neon_cmpestr_mask##size##b)); \ + uint##size##x##number_of_lanes##_t vec1 = SSE2NEON_IIF(data_type)( \ + vcombine_u##size(vtst_u##size(vdup_n_u##size(m1), vec_mask), \ + vtst_u##size(vdup_n_u##size(m1 >> 8), vec_mask)), \ + vtstq_u##size(vdupq_n_u##size(m1), vec_mask)); \ + uint##size##x##number_of_lanes##_t vec_minusone = vdupq_n_u##size(-1); \ + uint##size##x##number_of_lanes##_t vec_zero = vdupq_n_u##size(0); \ + for (int j = 0; j < lb; j++) { \ + mtx[j] = vreinterpretq_m128i_u##size(vbslq_u##size( \ + vec1, vec_minusone, vreinterpretq_u##size##_m128i(mtx[j]))); \ + } \ + for (int j = lb; j < bound; j++) { \ + mtx[j] = vreinterpretq_m128i_u##size( \ + vbslq_u##size(vec1, vec_minusone, vec_zero)); \ + } \ + unsigned SSE2NEON_IIF(data_type)(char, short) *ptr = \ + (unsigned SSE2NEON_IIF(data_type)(char, short) *) mtx; \ + for (int i = 0; i < bound; i++) { \ + int val = 1; \ + for (int j = 0, k = i; j < bound - i && k < bound; j++, k++) \ + val &= ptr[k * bound + j]; \ + res += val << i; \ + } \ + return res; \ + } + +/* clang-format off */ +#define SSE2NEON_GENERATE_AGGREGATE_EQUAL_ORDER(prefix) \ + prefix##IMPL(8, 16, prefix##IS_UBYTE) \ + prefix##IMPL(16, 8, prefix##IS_UWORD) +/* clang-format on */ + +SSE2NEON_GENERATE_AGGREGATE_EQUAL_ORDER(SSE2NEON_AGGREGATE_EQUAL_ORDER_) + +#undef SSE2NEON_AGGREGATE_EQUAL_ORDER_IS_UBYTE +#undef SSE2NEON_AGGREGATE_EQUAL_ORDER_IS_UWORD + +/* clang-format off */ +#define SSE2NEON_GENERATE_CMP_EQUAL_ORDERED(prefix) \ + prefix##IMPL(byte) \ + prefix##IMPL(word) +/* clang-format on */ + +SSE2NEON_GENERATE_CMP_EQUAL_ORDERED(SSE2NEON_CMP_EQUAL_ORDERED_) + +#define SSE2NEON_CMPESTR_LIST \ + _(CMP_UBYTE_EQUAL_ANY, cmp_byte_equal_any) \ + _(CMP_UWORD_EQUAL_ANY, cmp_word_equal_any) \ + _(CMP_SBYTE_EQUAL_ANY, cmp_byte_equal_any) \ + _(CMP_SWORD_EQUAL_ANY, cmp_word_equal_any) \ + _(CMP_UBYTE_RANGES, cmp_ubyte_ranges) \ + _(CMP_UWORD_RANGES, cmp_uword_ranges) \ + _(CMP_SBYTE_RANGES, cmp_sbyte_ranges) \ + _(CMP_SWORD_RANGES, cmp_sword_ranges) \ + _(CMP_UBYTE_EQUAL_EACH, cmp_byte_equal_each) \ + _(CMP_UWORD_EQUAL_EACH, cmp_word_equal_each) \ + _(CMP_SBYTE_EQUAL_EACH, cmp_byte_equal_each) \ + _(CMP_SWORD_EQUAL_EACH, cmp_word_equal_each) \ + _(CMP_UBYTE_EQUAL_ORDERED, cmp_byte_equal_ordered) \ + _(CMP_UWORD_EQUAL_ORDERED, cmp_word_equal_ordered) \ + _(CMP_SBYTE_EQUAL_ORDERED, cmp_byte_equal_ordered) \ + _(CMP_SWORD_EQUAL_ORDERED, cmp_word_equal_ordered) + +enum { +#define _(name, func_suffix) name, + SSE2NEON_CMPESTR_LIST +#undef _ +}; +typedef int (*cmpestr_func_t)(__m128i a, int la, __m128i b, int lb); +static cmpestr_func_t _sse2neon_cmpfunc_table[] = { +#define _(name, func_suffix) _sse2neon_##func_suffix, + SSE2NEON_CMPESTR_LIST +#undef _ +}; + +FORCE_INLINE int _sse2neon_sido_negative(int res, int lb, int imm8, int bound) +{ + switch (imm8 & 0x30) { + case _SIDD_NEGATIVE_POLARITY: + res ^= 0xffffffff; + break; + case _SIDD_MASKED_NEGATIVE_POLARITY: + res ^= (1 << lb) - 1; + break; + default: + break; + } + + return res & ((bound == 8) ? 0xFF : 0xFFFF); +} + +FORCE_INLINE int _sse2neon_clz(unsigned int x) +{ +#if defined(_MSC_VER) && !defined(__clang__) + unsigned long cnt = 0; + if (_BitScanReverse(&cnt, x)) + return 31 - cnt; + return 32; +#else + return x != 0 ? __builtin_clz(x) : 32; +#endif +} + +FORCE_INLINE int _sse2neon_ctz(unsigned int x) +{ +#if defined(_MSC_VER) && !defined(__clang__) + unsigned long cnt = 0; + if (_BitScanForward(&cnt, x)) + return cnt; + return 32; +#else + return x != 0 ? __builtin_ctz(x) : 32; +#endif +} + +FORCE_INLINE int _sse2neon_ctzll(unsigned long long x) +{ +#ifdef _MSC_VER + unsigned long cnt; +#if defined(SSE2NEON_HAS_BITSCAN64) + if (_BitScanForward64(&cnt, x)) + return (int) (cnt); +#else + if (_BitScanForward(&cnt, (unsigned long) (x))) + return (int) cnt; + if (_BitScanForward(&cnt, (unsigned long) (x >> 32))) + return (int) (cnt + 32); +#endif /* SSE2NEON_HAS_BITSCAN64 */ + return 64; +#else /* assume GNU compatible compilers */ + return x != 0 ? __builtin_ctzll(x) : 64; +#endif +} + +#define SSE2NEON_MIN(x, y) (x) < (y) ? (x) : (y) + +#define SSE2NEON_CMPSTR_SET_UPPER(var, imm) \ + const int var = (imm & 0x01) ? 8 : 16 + +#define SSE2NEON_CMPESTRX_LEN_PAIR(a, b, la, lb) \ + int tmp1 = la ^ (la >> 31); \ + la = tmp1 - (la >> 31); \ + int tmp2 = lb ^ (lb >> 31); \ + lb = tmp2 - (lb >> 31); \ + la = SSE2NEON_MIN(la, bound); \ + lb = SSE2NEON_MIN(lb, bound) + +// Compare all pairs of character in string a and b, +// then aggregate the result. +// As the only difference of PCMPESTR* and PCMPISTR* is the way to calculate the +// length of string, we use SSE2NEON_CMP{I,E}STRX_GET_LEN to get the length of +// string a and b. +#define SSE2NEON_COMP_AGG(a, b, la, lb, imm8, IE) \ + SSE2NEON_CMPSTR_SET_UPPER(bound, imm8); \ + SSE2NEON_##IE##_LEN_PAIR(a, b, la, lb); \ + int r2 = (_sse2neon_cmpfunc_table[imm8 & 0x0f])(a, la, b, lb); \ + r2 = _sse2neon_sido_negative(r2, lb, imm8, bound) + +#define SSE2NEON_CMPSTR_GENERATE_INDEX(r2, bound, imm8) \ + return (r2 == 0) ? bound \ + : ((imm8 & 0x40) ? (31 - _sse2neon_clz(r2)) \ + : _sse2neon_ctz(r2)) + +#define SSE2NEON_CMPSTR_GENERATE_MASK(dst) \ + __m128i dst = vreinterpretq_m128i_u8(vdupq_n_u8(0)); \ + if (imm8 & 0x40) { \ + if (bound == 8) { \ + uint16x8_t tmp = vtstq_u16(vdupq_n_u16(r2), \ + vld1q_u16(_sse2neon_cmpestr_mask16b)); \ + dst = vreinterpretq_m128i_u16(vbslq_u16( \ + tmp, vdupq_n_u16(-1), vreinterpretq_u16_m128i(dst))); \ + } else { \ + uint8x16_t vec_r2 = \ + vcombine_u8(vdup_n_u8(r2), vdup_n_u8(r2 >> 8)); \ + uint8x16_t tmp = \ + vtstq_u8(vec_r2, vld1q_u8(_sse2neon_cmpestr_mask8b)); \ + dst = vreinterpretq_m128i_u8( \ + vbslq_u8(tmp, vdupq_n_u8(-1), vreinterpretq_u8_m128i(dst))); \ + } \ + } else { \ + if (bound == 16) { \ + dst = vreinterpretq_m128i_u16( \ + vsetq_lane_u16(r2 & 0xffff, vreinterpretq_u16_m128i(dst), 0)); \ + } else { \ + dst = vreinterpretq_m128i_u8( \ + vsetq_lane_u8(r2 & 0xff, vreinterpretq_u8_m128i(dst), 0)); \ + } \ + } \ + return dst + +// Compare packed strings in a and b with lengths la and lb using the control +// in imm8, and returns 1 if b did not contain a null character and the +// resulting mask was zero, and 0 otherwise. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestra +FORCE_INLINE int _mm_cmpestra(__m128i a, + int la, + __m128i b, + int lb, + const int imm8) +{ + int lb_cpy = lb; + SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPESTRX); + return !r2 & (lb_cpy > bound); +} + +// Compare packed strings in a and b with lengths la and lb using the control in +// imm8, and returns 1 if the resulting mask was non-zero, and 0 otherwise. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestrc +FORCE_INLINE int _mm_cmpestrc(__m128i a, + int la, + __m128i b, + int lb, + const int imm8) +{ + SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPESTRX); + return r2 != 0; +} + +// Compare packed strings in a and b with lengths la and lb using the control +// in imm8, and store the generated index in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestri +FORCE_INLINE int _mm_cmpestri(__m128i a, + int la, + __m128i b, + int lb, + const int imm8) +{ + SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPESTRX); + SSE2NEON_CMPSTR_GENERATE_INDEX(r2, bound, imm8); +} + +// Compare packed strings in a and b with lengths la and lb using the control +// in imm8, and store the generated mask in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestrm +FORCE_INLINE __m128i +_mm_cmpestrm(__m128i a, int la, __m128i b, int lb, const int imm8) +{ + SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPESTRX); + SSE2NEON_CMPSTR_GENERATE_MASK(dst); +} + +// Compare packed strings in a and b with lengths la and lb using the control in +// imm8, and returns bit 0 of the resulting bit mask. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestro +FORCE_INLINE int _mm_cmpestro(__m128i a, + int la, + __m128i b, + int lb, + const int imm8) +{ + SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPESTRX); + return r2 & 1; +} + +// Compare packed strings in a and b with lengths la and lb using the control in +// imm8, and returns 1 if any character in a was null, and 0 otherwise. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestrs +FORCE_INLINE int _mm_cmpestrs(__m128i a, + int la, + __m128i b, + int lb, + const int imm8) +{ + (void) a; + (void) b; + (void) lb; + SSE2NEON_CMPSTR_SET_UPPER(bound, imm8); + return la <= (bound - 1); +} + +// Compare packed strings in a and b with lengths la and lb using the control in +// imm8, and returns 1 if any character in b was null, and 0 otherwise. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestrz +FORCE_INLINE int _mm_cmpestrz(__m128i a, + int la, + __m128i b, + int lb, + const int imm8) +{ + (void) a; + (void) b; + (void) la; + SSE2NEON_CMPSTR_SET_UPPER(bound, imm8); + return lb <= (bound - 1); +} + +#define SSE2NEON_CMPISTRX_LENGTH(str, len, imm8) \ + do { \ + if (imm8 & 0x01) { \ + uint16x8_t equal_mask_##str = \ + vceqq_u16(vreinterpretq_u16_m128i(str), vdupq_n_u16(0)); \ + uint8x8_t res_##str = vshrn_n_u16(equal_mask_##str, 4); \ + uint64_t matches_##str = \ + vget_lane_u64(vreinterpret_u64_u8(res_##str), 0); \ + len = _sse2neon_ctzll(matches_##str) >> 3; \ + } else { \ + uint16x8_t equal_mask_##str = vreinterpretq_u16_u8( \ + vceqq_u8(vreinterpretq_u8_m128i(str), vdupq_n_u8(0))); \ + uint8x8_t res_##str = vshrn_n_u16(equal_mask_##str, 4); \ + uint64_t matches_##str = \ + vget_lane_u64(vreinterpret_u64_u8(res_##str), 0); \ + len = _sse2neon_ctzll(matches_##str) >> 2; \ + } \ + } while (0) + +#define SSE2NEON_CMPISTRX_LEN_PAIR(a, b, la, lb) \ + int la, lb; \ + do { \ + SSE2NEON_CMPISTRX_LENGTH(a, la, imm8); \ + SSE2NEON_CMPISTRX_LENGTH(b, lb, imm8); \ + } while (0) + +// Compare packed strings with implicit lengths in a and b using the control in +// imm8, and returns 1 if b did not contain a null character and the resulting +// mask was zero, and 0 otherwise. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistra +FORCE_INLINE int _mm_cmpistra(__m128i a, __m128i b, const int imm8) +{ + SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPISTRX); + return !r2 & (lb >= bound); +} + +// Compare packed strings with implicit lengths in a and b using the control in +// imm8, and returns 1 if the resulting mask was non-zero, and 0 otherwise. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistrc +FORCE_INLINE int _mm_cmpistrc(__m128i a, __m128i b, const int imm8) +{ + SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPISTRX); + return r2 != 0; +} + +// Compare packed strings with implicit lengths in a and b using the control in +// imm8, and store the generated index in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistri +FORCE_INLINE int _mm_cmpistri(__m128i a, __m128i b, const int imm8) +{ + SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPISTRX); + SSE2NEON_CMPSTR_GENERATE_INDEX(r2, bound, imm8); +} + +// Compare packed strings with implicit lengths in a and b using the control in +// imm8, and store the generated mask in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistrm +FORCE_INLINE __m128i _mm_cmpistrm(__m128i a, __m128i b, const int imm8) +{ + SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPISTRX); + SSE2NEON_CMPSTR_GENERATE_MASK(dst); +} + +// Compare packed strings with implicit lengths in a and b using the control in +// imm8, and returns bit 0 of the resulting bit mask. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistro +FORCE_INLINE int _mm_cmpistro(__m128i a, __m128i b, const int imm8) +{ + SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPISTRX); + return r2 & 1; +} + +// Compare packed strings with implicit lengths in a and b using the control in +// imm8, and returns 1 if any character in a was null, and 0 otherwise. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistrs +FORCE_INLINE int _mm_cmpistrs(__m128i a, __m128i b, const int imm8) +{ + (void) b; + SSE2NEON_CMPSTR_SET_UPPER(bound, imm8); + int la; + SSE2NEON_CMPISTRX_LENGTH(a, la, imm8); + return la <= (bound - 1); +} + +// Compare packed strings with implicit lengths in a and b using the control in +// imm8, and returns 1 if any character in b was null, and 0 otherwise. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistrz +FORCE_INLINE int _mm_cmpistrz(__m128i a, __m128i b, const int imm8) +{ + (void) a; + SSE2NEON_CMPSTR_SET_UPPER(bound, imm8); + int lb; + SSE2NEON_CMPISTRX_LENGTH(b, lb, imm8); + return lb <= (bound - 1); +} + +// Compares the 2 signed 64-bit integers in a and the 2 signed 64-bit integers +// in b for greater than. +FORCE_INLINE __m128i _mm_cmpgt_epi64(__m128i a, __m128i b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return vreinterpretq_m128i_u64( + vcgtq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); +#else + return vreinterpretq_m128i_s64(vshrq_n_s64( + vqsubq_s64(vreinterpretq_s64_m128i(b), vreinterpretq_s64_m128i(a)), + 63)); +#endif +} + +// Starting with the initial value in crc, accumulates a CRC32 value for +// unsigned 16-bit integer v, and stores the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_crc32_u16 +FORCE_INLINE uint32_t _mm_crc32_u16(uint32_t crc, uint16_t v) +{ +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) + __asm__ __volatile__("crc32ch %w[c], %w[c], %w[v]\n\t" + : [c] "+r"(crc) + : [v] "r"(v)); +#elif ((__ARM_ARCH == 8) && defined(__ARM_FEATURE_CRC32)) || \ + (defined(_M_ARM64) && !defined(__clang__)) + crc = __crc32ch(crc, v); +#else + crc = _mm_crc32_u8(crc, v & 0xff); + crc = _mm_crc32_u8(crc, (v >> 8) & 0xff); +#endif + return crc; +} + +// Starting with the initial value in crc, accumulates a CRC32 value for +// unsigned 32-bit integer v, and stores the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_crc32_u32 +FORCE_INLINE uint32_t _mm_crc32_u32(uint32_t crc, uint32_t v) +{ +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) + __asm__ __volatile__("crc32cw %w[c], %w[c], %w[v]\n\t" + : [c] "+r"(crc) + : [v] "r"(v)); +#elif ((__ARM_ARCH == 8) && defined(__ARM_FEATURE_CRC32)) || \ + (defined(_M_ARM64) && !defined(__clang__)) + crc = __crc32cw(crc, v); +#else + crc = _mm_crc32_u16(crc, v & 0xffff); + crc = _mm_crc32_u16(crc, (v >> 16) & 0xffff); +#endif + return crc; +} + +// Starting with the initial value in crc, accumulates a CRC32 value for +// unsigned 64-bit integer v, and stores the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_crc32_u64 +FORCE_INLINE uint64_t _mm_crc32_u64(uint64_t crc, uint64_t v) +{ +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) + __asm__ __volatile__("crc32cx %w[c], %w[c], %x[v]\n\t" + : [c] "+r"(crc) + : [v] "r"(v)); +#elif (defined(_M_ARM64) && !defined(__clang__)) + crc = __crc32cd((uint32_t) crc, v); +#else + crc = _mm_crc32_u32((uint32_t) (crc), v & 0xffffffff); + crc = _mm_crc32_u32((uint32_t) (crc), (v >> 32) & 0xffffffff); +#endif + return crc; +} + +// Starting with the initial value in crc, accumulates a CRC32 value for +// unsigned 8-bit integer v, and stores the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_crc32_u8 +FORCE_INLINE uint32_t _mm_crc32_u8(uint32_t crc, uint8_t v) +{ +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) + __asm__ __volatile__("crc32cb %w[c], %w[c], %w[v]\n\t" + : [c] "+r"(crc) + : [v] "r"(v)); +#elif ((__ARM_ARCH == 8) && defined(__ARM_FEATURE_CRC32)) || \ + (defined(_M_ARM64) && !defined(__clang__)) + crc = __crc32cb(crc, v); +#else + crc ^= v; +#if defined(__ARM_FEATURE_CRYPTO) + // Adapted from: https://mary.rs/lab/crc32/ + // Barrent reduction + uint64x2_t orig = + vcombine_u64(vcreate_u64((uint64_t) (crc) << 24), vcreate_u64(0x0)); + uint64x2_t tmp = orig; + + // Polynomial P(x) of CRC32C + uint64_t p = 0x105EC76F1; + // Barrett Reduction (in bit-reflected form) constant mu_{64} = \lfloor + // 2^{64} / P(x) \rfloor = 0x11f91caf6 + uint64_t mu = 0x1dea713f1; + + // Multiply by mu_{64} + tmp = _sse2neon_vmull_p64(vget_low_u64(tmp), vcreate_u64(mu)); + // Divide by 2^{64} (mask away the unnecessary bits) + tmp = + vandq_u64(tmp, vcombine_u64(vcreate_u64(0xFFFFFFFF), vcreate_u64(0x0))); + // Multiply by P(x) (shifted left by 1 for alignment reasons) + tmp = _sse2neon_vmull_p64(vget_low_u64(tmp), vcreate_u64(p)); + // Subtract original from result + tmp = veorq_u64(tmp, orig); + + // Extract the 'lower' (in bit-reflected sense) 32 bits + crc = vgetq_lane_u32(vreinterpretq_u32_u64(tmp), 1); +#else // Fall back to the generic table lookup approach + // Adapted from: https://create.stephan-brumme.com/crc32/ + // Apply half-byte comparison algorithm for the best ratio between + // performance and lookup table. + + // The lookup table just needs to store every 16th entry + // of the standard look-up table. + static const uint32_t crc32_half_byte_tbl[] = { + 0x00000000, 0x105ec76f, 0x20bd8ede, 0x30e349b1, 0x417b1dbc, 0x5125dad3, + 0x61c69362, 0x7198540d, 0x82f63b78, 0x92a8fc17, 0xa24bb5a6, 0xb21572c9, + 0xc38d26c4, 0xd3d3e1ab, 0xe330a81a, 0xf36e6f75, + }; + + crc = (crc >> 4) ^ crc32_half_byte_tbl[crc & 0x0F]; + crc = (crc >> 4) ^ crc32_half_byte_tbl[crc & 0x0F]; +#endif +#endif + return crc; +} + +/* AES */ + +#if !defined(__ARM_FEATURE_CRYPTO) && (!defined(_M_ARM64) || defined(__clang__)) +/* clang-format off */ +#define SSE2NEON_AES_SBOX(w) \ + { \ + w(0x63), w(0x7c), w(0x77), w(0x7b), w(0xf2), w(0x6b), w(0x6f), \ + w(0xc5), w(0x30), w(0x01), w(0x67), w(0x2b), w(0xfe), w(0xd7), \ + w(0xab), w(0x76), w(0xca), w(0x82), w(0xc9), w(0x7d), w(0xfa), \ + w(0x59), w(0x47), w(0xf0), w(0xad), w(0xd4), w(0xa2), w(0xaf), \ + w(0x9c), w(0xa4), w(0x72), w(0xc0), w(0xb7), w(0xfd), w(0x93), \ + w(0x26), w(0x36), w(0x3f), w(0xf7), w(0xcc), w(0x34), w(0xa5), \ + w(0xe5), w(0xf1), w(0x71), w(0xd8), w(0x31), w(0x15), w(0x04), \ + w(0xc7), w(0x23), w(0xc3), w(0x18), w(0x96), w(0x05), w(0x9a), \ + w(0x07), w(0x12), w(0x80), w(0xe2), w(0xeb), w(0x27), w(0xb2), \ + w(0x75), w(0x09), w(0x83), w(0x2c), w(0x1a), w(0x1b), w(0x6e), \ + w(0x5a), w(0xa0), w(0x52), w(0x3b), w(0xd6), w(0xb3), w(0x29), \ + w(0xe3), w(0x2f), w(0x84), w(0x53), w(0xd1), w(0x00), w(0xed), \ + w(0x20), w(0xfc), w(0xb1), w(0x5b), w(0x6a), w(0xcb), w(0xbe), \ + w(0x39), w(0x4a), w(0x4c), w(0x58), w(0xcf), w(0xd0), w(0xef), \ + w(0xaa), w(0xfb), w(0x43), w(0x4d), w(0x33), w(0x85), w(0x45), \ + w(0xf9), w(0x02), w(0x7f), w(0x50), w(0x3c), w(0x9f), w(0xa8), \ + w(0x51), w(0xa3), w(0x40), w(0x8f), w(0x92), w(0x9d), w(0x38), \ + w(0xf5), w(0xbc), w(0xb6), w(0xda), w(0x21), w(0x10), w(0xff), \ + w(0xf3), w(0xd2), w(0xcd), w(0x0c), w(0x13), w(0xec), w(0x5f), \ + w(0x97), w(0x44), w(0x17), w(0xc4), w(0xa7), w(0x7e), w(0x3d), \ + w(0x64), w(0x5d), w(0x19), w(0x73), w(0x60), w(0x81), w(0x4f), \ + w(0xdc), w(0x22), w(0x2a), w(0x90), w(0x88), w(0x46), w(0xee), \ + w(0xb8), w(0x14), w(0xde), w(0x5e), w(0x0b), w(0xdb), w(0xe0), \ + w(0x32), w(0x3a), w(0x0a), w(0x49), w(0x06), w(0x24), w(0x5c), \ + w(0xc2), w(0xd3), w(0xac), w(0x62), w(0x91), w(0x95), w(0xe4), \ + w(0x79), w(0xe7), w(0xc8), w(0x37), w(0x6d), w(0x8d), w(0xd5), \ + w(0x4e), w(0xa9), w(0x6c), w(0x56), w(0xf4), w(0xea), w(0x65), \ + w(0x7a), w(0xae), w(0x08), w(0xba), w(0x78), w(0x25), w(0x2e), \ + w(0x1c), w(0xa6), w(0xb4), w(0xc6), w(0xe8), w(0xdd), w(0x74), \ + w(0x1f), w(0x4b), w(0xbd), w(0x8b), w(0x8a), w(0x70), w(0x3e), \ + w(0xb5), w(0x66), w(0x48), w(0x03), w(0xf6), w(0x0e), w(0x61), \ + w(0x35), w(0x57), w(0xb9), w(0x86), w(0xc1), w(0x1d), w(0x9e), \ + w(0xe1), w(0xf8), w(0x98), w(0x11), w(0x69), w(0xd9), w(0x8e), \ + w(0x94), w(0x9b), w(0x1e), w(0x87), w(0xe9), w(0xce), w(0x55), \ + w(0x28), w(0xdf), w(0x8c), w(0xa1), w(0x89), w(0x0d), w(0xbf), \ + w(0xe6), w(0x42), w(0x68), w(0x41), w(0x99), w(0x2d), w(0x0f), \ + w(0xb0), w(0x54), w(0xbb), w(0x16) \ + } +#define SSE2NEON_AES_RSBOX(w) \ + { \ + w(0x52), w(0x09), w(0x6a), w(0xd5), w(0x30), w(0x36), w(0xa5), \ + w(0x38), w(0xbf), w(0x40), w(0xa3), w(0x9e), w(0x81), w(0xf3), \ + w(0xd7), w(0xfb), w(0x7c), w(0xe3), w(0x39), w(0x82), w(0x9b), \ + w(0x2f), w(0xff), w(0x87), w(0x34), w(0x8e), w(0x43), w(0x44), \ + w(0xc4), w(0xde), w(0xe9), w(0xcb), w(0x54), w(0x7b), w(0x94), \ + w(0x32), w(0xa6), w(0xc2), w(0x23), w(0x3d), w(0xee), w(0x4c), \ + w(0x95), w(0x0b), w(0x42), w(0xfa), w(0xc3), w(0x4e), w(0x08), \ + w(0x2e), w(0xa1), w(0x66), w(0x28), w(0xd9), w(0x24), w(0xb2), \ + w(0x76), w(0x5b), w(0xa2), w(0x49), w(0x6d), w(0x8b), w(0xd1), \ + w(0x25), w(0x72), w(0xf8), w(0xf6), w(0x64), w(0x86), w(0x68), \ + w(0x98), w(0x16), w(0xd4), w(0xa4), w(0x5c), w(0xcc), w(0x5d), \ + w(0x65), w(0xb6), w(0x92), w(0x6c), w(0x70), w(0x48), w(0x50), \ + w(0xfd), w(0xed), w(0xb9), w(0xda), w(0x5e), w(0x15), w(0x46), \ + w(0x57), w(0xa7), w(0x8d), w(0x9d), w(0x84), w(0x90), w(0xd8), \ + w(0xab), w(0x00), w(0x8c), w(0xbc), w(0xd3), w(0x0a), w(0xf7), \ + w(0xe4), w(0x58), w(0x05), w(0xb8), w(0xb3), w(0x45), w(0x06), \ + w(0xd0), w(0x2c), w(0x1e), w(0x8f), w(0xca), w(0x3f), w(0x0f), \ + w(0x02), w(0xc1), w(0xaf), w(0xbd), w(0x03), w(0x01), w(0x13), \ + w(0x8a), w(0x6b), w(0x3a), w(0x91), w(0x11), w(0x41), w(0x4f), \ + w(0x67), w(0xdc), w(0xea), w(0x97), w(0xf2), w(0xcf), w(0xce), \ + w(0xf0), w(0xb4), w(0xe6), w(0x73), w(0x96), w(0xac), w(0x74), \ + w(0x22), w(0xe7), w(0xad), w(0x35), w(0x85), w(0xe2), w(0xf9), \ + w(0x37), w(0xe8), w(0x1c), w(0x75), w(0xdf), w(0x6e), w(0x47), \ + w(0xf1), w(0x1a), w(0x71), w(0x1d), w(0x29), w(0xc5), w(0x89), \ + w(0x6f), w(0xb7), w(0x62), w(0x0e), w(0xaa), w(0x18), w(0xbe), \ + w(0x1b), w(0xfc), w(0x56), w(0x3e), w(0x4b), w(0xc6), w(0xd2), \ + w(0x79), w(0x20), w(0x9a), w(0xdb), w(0xc0), w(0xfe), w(0x78), \ + w(0xcd), w(0x5a), w(0xf4), w(0x1f), w(0xdd), w(0xa8), w(0x33), \ + w(0x88), w(0x07), w(0xc7), w(0x31), w(0xb1), w(0x12), w(0x10), \ + w(0x59), w(0x27), w(0x80), w(0xec), w(0x5f), w(0x60), w(0x51), \ + w(0x7f), w(0xa9), w(0x19), w(0xb5), w(0x4a), w(0x0d), w(0x2d), \ + w(0xe5), w(0x7a), w(0x9f), w(0x93), w(0xc9), w(0x9c), w(0xef), \ + w(0xa0), w(0xe0), w(0x3b), w(0x4d), w(0xae), w(0x2a), w(0xf5), \ + w(0xb0), w(0xc8), w(0xeb), w(0xbb), w(0x3c), w(0x83), w(0x53), \ + w(0x99), w(0x61), w(0x17), w(0x2b), w(0x04), w(0x7e), w(0xba), \ + w(0x77), w(0xd6), w(0x26), w(0xe1), w(0x69), w(0x14), w(0x63), \ + w(0x55), w(0x21), w(0x0c), w(0x7d) \ + } +/* clang-format on */ + +/* X Macro trick. See https://en.wikipedia.org/wiki/X_Macro */ +#define SSE2NEON_AES_H0(x) (x) +static const uint8_t _sse2neon_sbox[256] = SSE2NEON_AES_SBOX(SSE2NEON_AES_H0); +static const uint8_t _sse2neon_rsbox[256] = SSE2NEON_AES_RSBOX(SSE2NEON_AES_H0); +#undef SSE2NEON_AES_H0 + +/* x_time function and matrix multiply function */ +#if !defined(__aarch64__) && !defined(_M_ARM64) +#define SSE2NEON_XT(x) (((x) << 1) ^ ((((x) >> 7) & 1) * 0x1b)) +#define SSE2NEON_MULTIPLY(x, y) \ + (((y & 1) * x) ^ ((y >> 1 & 1) * SSE2NEON_XT(x)) ^ \ + ((y >> 2 & 1) * SSE2NEON_XT(SSE2NEON_XT(x))) ^ \ + ((y >> 3 & 1) * SSE2NEON_XT(SSE2NEON_XT(SSE2NEON_XT(x)))) ^ \ + ((y >> 4 & 1) * SSE2NEON_XT(SSE2NEON_XT(SSE2NEON_XT(SSE2NEON_XT(x)))))) +#endif + +// In the absence of crypto extensions, implement aesenc using regular NEON +// intrinsics instead. See: +// https://www.workofard.com/2017/01/accelerated-aes-for-the-arm64-linux-kernel/ +// https://www.workofard.com/2017/07/ghash-for-low-end-cores/ and +// for more information. +FORCE_INLINE __m128i _mm_aesenc_si128(__m128i a, __m128i RoundKey) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + static const uint8_t shift_rows[] = { + 0x0, 0x5, 0xa, 0xf, 0x4, 0x9, 0xe, 0x3, + 0x8, 0xd, 0x2, 0x7, 0xc, 0x1, 0x6, 0xb, + }; + static const uint8_t ror32by8[] = { + 0x1, 0x2, 0x3, 0x0, 0x5, 0x6, 0x7, 0x4, + 0x9, 0xa, 0xb, 0x8, 0xd, 0xe, 0xf, 0xc, + }; + + uint8x16_t v; + uint8x16_t w = vreinterpretq_u8_m128i(a); + + /* shift rows */ + w = vqtbl1q_u8(w, vld1q_u8(shift_rows)); + + /* sub bytes */ + // Here, we separate the whole 256-bytes table into 4 64-bytes tables, and + // look up each of the table. After each lookup, we load the next table + // which locates at the next 64-bytes. In the meantime, the index in the + // table would be smaller than it was, so the index parameters of + // `vqtbx4q_u8()` need to be added the same constant as the loaded tables. + v = vqtbl4q_u8(_sse2neon_vld1q_u8_x4(_sse2neon_sbox), w); + // 'w-0x40' equals to 'vsubq_u8(w, vdupq_n_u8(0x40))' + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x40), w - 0x40); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x80), w - 0x80); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0xc0), w - 0xc0); + + /* mix columns */ + w = (v << 1) ^ (uint8x16_t) (((int8x16_t) v >> 7) & 0x1b); + w ^= (uint8x16_t) vrev32q_u16((uint16x8_t) v); + w ^= vqtbl1q_u8(v ^ w, vld1q_u8(ror32by8)); + + /* add round key */ + return vreinterpretq_m128i_u8(w) ^ RoundKey; + +#else /* ARMv7-A implementation for a table-based AES */ +#define SSE2NEON_AES_B2W(b0, b1, b2, b3) \ + (((uint32_t) (b3) << 24) | ((uint32_t) (b2) << 16) | \ + ((uint32_t) (b1) << 8) | (uint32_t) (b0)) +// multiplying 'x' by 2 in GF(2^8) +#define SSE2NEON_AES_F2(x) ((x << 1) ^ (((x >> 7) & 1) * 0x011b /* WPOLY */)) +// multiplying 'x' by 3 in GF(2^8) +#define SSE2NEON_AES_F3(x) (SSE2NEON_AES_F2(x) ^ x) +#define SSE2NEON_AES_U0(p) \ + SSE2NEON_AES_B2W(SSE2NEON_AES_F2(p), p, p, SSE2NEON_AES_F3(p)) +#define SSE2NEON_AES_U1(p) \ + SSE2NEON_AES_B2W(SSE2NEON_AES_F3(p), SSE2NEON_AES_F2(p), p, p) +#define SSE2NEON_AES_U2(p) \ + SSE2NEON_AES_B2W(p, SSE2NEON_AES_F3(p), SSE2NEON_AES_F2(p), p) +#define SSE2NEON_AES_U3(p) \ + SSE2NEON_AES_B2W(p, p, SSE2NEON_AES_F3(p), SSE2NEON_AES_F2(p)) + + // this generates a table containing every possible permutation of + // shift_rows() and sub_bytes() with mix_columns(). + static const uint32_t ALIGN_STRUCT(16) aes_table[4][256] = { + SSE2NEON_AES_SBOX(SSE2NEON_AES_U0), + SSE2NEON_AES_SBOX(SSE2NEON_AES_U1), + SSE2NEON_AES_SBOX(SSE2NEON_AES_U2), + SSE2NEON_AES_SBOX(SSE2NEON_AES_U3), + }; +#undef SSE2NEON_AES_B2W +#undef SSE2NEON_AES_F2 +#undef SSE2NEON_AES_F3 +#undef SSE2NEON_AES_U0 +#undef SSE2NEON_AES_U1 +#undef SSE2NEON_AES_U2 +#undef SSE2NEON_AES_U3 + + uint32_t x0 = _mm_cvtsi128_si32(a); // get a[31:0] + uint32_t x1 = + _mm_cvtsi128_si32(_mm_shuffle_epi32(a, 0x55)); // get a[63:32] + uint32_t x2 = + _mm_cvtsi128_si32(_mm_shuffle_epi32(a, 0xAA)); // get a[95:64] + uint32_t x3 = + _mm_cvtsi128_si32(_mm_shuffle_epi32(a, 0xFF)); // get a[127:96] + + // finish the modulo addition step in mix_columns() + __m128i out = _mm_set_epi32( + (aes_table[0][x3 & 0xff] ^ aes_table[1][(x0 >> 8) & 0xff] ^ + aes_table[2][(x1 >> 16) & 0xff] ^ aes_table[3][x2 >> 24]), + (aes_table[0][x2 & 0xff] ^ aes_table[1][(x3 >> 8) & 0xff] ^ + aes_table[2][(x0 >> 16) & 0xff] ^ aes_table[3][x1 >> 24]), + (aes_table[0][x1 & 0xff] ^ aes_table[1][(x2 >> 8) & 0xff] ^ + aes_table[2][(x3 >> 16) & 0xff] ^ aes_table[3][x0 >> 24]), + (aes_table[0][x0 & 0xff] ^ aes_table[1][(x1 >> 8) & 0xff] ^ + aes_table[2][(x2 >> 16) & 0xff] ^ aes_table[3][x3 >> 24])); + + return _mm_xor_si128(out, RoundKey); +#endif +} + +// Perform one round of an AES decryption flow on data (state) in a using the +// round key in RoundKey, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesdec_si128 +FORCE_INLINE __m128i _mm_aesdec_si128(__m128i a, __m128i RoundKey) +{ +#if defined(__aarch64__) + static const uint8_t inv_shift_rows[] = { + 0x0, 0xd, 0xa, 0x7, 0x4, 0x1, 0xe, 0xb, + 0x8, 0x5, 0x2, 0xf, 0xc, 0x9, 0x6, 0x3, + }; + static const uint8_t ror32by8[] = { + 0x1, 0x2, 0x3, 0x0, 0x5, 0x6, 0x7, 0x4, + 0x9, 0xa, 0xb, 0x8, 0xd, 0xe, 0xf, 0xc, + }; + + uint8x16_t v; + uint8x16_t w = vreinterpretq_u8_m128i(a); + + // inverse shift rows + w = vqtbl1q_u8(w, vld1q_u8(inv_shift_rows)); + + // inverse sub bytes + v = vqtbl4q_u8(_sse2neon_vld1q_u8_x4(_sse2neon_rsbox), w); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0x40), w - 0x40); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0x80), w - 0x80); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0xc0), w - 0xc0); + + // inverse mix columns + // multiplying 'v' by 4 in GF(2^8) + w = (v << 1) ^ (uint8x16_t) (((int8x16_t) v >> 7) & 0x1b); + w = (w << 1) ^ (uint8x16_t) (((int8x16_t) w >> 7) & 0x1b); + v ^= w; + v ^= (uint8x16_t) vrev32q_u16((uint16x8_t) w); + + w = (v << 1) ^ (uint8x16_t) (((int8x16_t) v >> 7) & + 0x1b); // multiplying 'v' by 2 in GF(2^8) + w ^= (uint8x16_t) vrev32q_u16((uint16x8_t) v); + w ^= vqtbl1q_u8(v ^ w, vld1q_u8(ror32by8)); + + // add round key + return vreinterpretq_m128i_u8(w) ^ RoundKey; + +#else /* ARMv7-A NEON implementation */ + /* FIXME: optimized for NEON */ + uint8_t i, e, f, g, h, v[4][4]; + uint8_t *_a = (uint8_t *) &a; + for (i = 0; i < 16; ++i) { + v[((i / 4) + (i % 4)) % 4][i % 4] = _sse2neon_rsbox[_a[i]]; + } + + // inverse mix columns + for (i = 0; i < 4; ++i) { + e = v[i][0]; + f = v[i][1]; + g = v[i][2]; + h = v[i][3]; + + v[i][0] = SSE2NEON_MULTIPLY(e, 0x0e) ^ SSE2NEON_MULTIPLY(f, 0x0b) ^ + SSE2NEON_MULTIPLY(g, 0x0d) ^ SSE2NEON_MULTIPLY(h, 0x09); + v[i][1] = SSE2NEON_MULTIPLY(e, 0x09) ^ SSE2NEON_MULTIPLY(f, 0x0e) ^ + SSE2NEON_MULTIPLY(g, 0x0b) ^ SSE2NEON_MULTIPLY(h, 0x0d); + v[i][2] = SSE2NEON_MULTIPLY(e, 0x0d) ^ SSE2NEON_MULTIPLY(f, 0x09) ^ + SSE2NEON_MULTIPLY(g, 0x0e) ^ SSE2NEON_MULTIPLY(h, 0x0b); + v[i][3] = SSE2NEON_MULTIPLY(e, 0x0b) ^ SSE2NEON_MULTIPLY(f, 0x0d) ^ + SSE2NEON_MULTIPLY(g, 0x09) ^ SSE2NEON_MULTIPLY(h, 0x0e); + } + + return vreinterpretq_m128i_u8(vld1q_u8((uint8_t *) v)) ^ RoundKey; +#endif +} + +// Perform the last round of an AES encryption flow on data (state) in a using +// the round key in RoundKey, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesenclast_si128 +FORCE_INLINE __m128i _mm_aesenclast_si128(__m128i a, __m128i RoundKey) +{ +#if defined(__aarch64__) + static const uint8_t shift_rows[] = { + 0x0, 0x5, 0xa, 0xf, 0x4, 0x9, 0xe, 0x3, + 0x8, 0xd, 0x2, 0x7, 0xc, 0x1, 0x6, 0xb, + }; + + uint8x16_t v; + uint8x16_t w = vreinterpretq_u8_m128i(a); + + // shift rows + w = vqtbl1q_u8(w, vld1q_u8(shift_rows)); + + // sub bytes + v = vqtbl4q_u8(_sse2neon_vld1q_u8_x4(_sse2neon_sbox), w); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x40), w - 0x40); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x80), w - 0x80); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0xc0), w - 0xc0); + + // add round key + return vreinterpretq_m128i_u8(v) ^ RoundKey; + +#else /* ARMv7-A implementation */ + uint8_t v[16] = { + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 0)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 5)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 10)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 15)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 4)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 9)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 14)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 3)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 8)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 13)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 2)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 7)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 12)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 1)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 6)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 11)], + }; + + return vreinterpretq_m128i_u8(vld1q_u8(v)) ^ RoundKey; +#endif +} + +// Perform the last round of an AES decryption flow on data (state) in a using +// the round key in RoundKey, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesdeclast_si128 +FORCE_INLINE __m128i _mm_aesdeclast_si128(__m128i a, __m128i RoundKey) +{ +#if defined(__aarch64__) + static const uint8_t inv_shift_rows[] = { + 0x0, 0xd, 0xa, 0x7, 0x4, 0x1, 0xe, 0xb, + 0x8, 0x5, 0x2, 0xf, 0xc, 0x9, 0x6, 0x3, + }; + + uint8x16_t v; + uint8x16_t w = vreinterpretq_u8_m128i(a); + + // inverse shift rows + w = vqtbl1q_u8(w, vld1q_u8(inv_shift_rows)); + + // inverse sub bytes + v = vqtbl4q_u8(_sse2neon_vld1q_u8_x4(_sse2neon_rsbox), w); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0x40), w - 0x40); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0x80), w - 0x80); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0xc0), w - 0xc0); + + // add round key + return vreinterpretq_m128i_u8(v) ^ RoundKey; + +#else /* ARMv7-A NEON implementation */ + /* FIXME: optimized for NEON */ + uint8_t v[4][4]; + uint8_t *_a = (uint8_t *) &a; + for (int i = 0; i < 16; ++i) { + v[((i / 4) + (i % 4)) % 4][i % 4] = _sse2neon_rsbox[_a[i]]; + } + + return vreinterpretq_m128i_u8(vld1q_u8((uint8_t *) v)) ^ RoundKey; +#endif +} + +// Perform the InvMixColumns transformation on a and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesimc_si128 +FORCE_INLINE __m128i _mm_aesimc_si128(__m128i a) +{ +#if defined(__aarch64__) + static const uint8_t ror32by8[] = { + 0x1, 0x2, 0x3, 0x0, 0x5, 0x6, 0x7, 0x4, + 0x9, 0xa, 0xb, 0x8, 0xd, 0xe, 0xf, 0xc, + }; + uint8x16_t v = vreinterpretq_u8_m128i(a); + uint8x16_t w; + + // multiplying 'v' by 4 in GF(2^8) + w = (v << 1) ^ (uint8x16_t) (((int8x16_t) v >> 7) & 0x1b); + w = (w << 1) ^ (uint8x16_t) (((int8x16_t) w >> 7) & 0x1b); + v ^= w; + v ^= (uint8x16_t) vrev32q_u16((uint16x8_t) w); + + // multiplying 'v' by 2 in GF(2^8) + w = (v << 1) ^ (uint8x16_t) (((int8x16_t) v >> 7) & 0x1b); + w ^= (uint8x16_t) vrev32q_u16((uint16x8_t) v); + w ^= vqtbl1q_u8(v ^ w, vld1q_u8(ror32by8)); + return vreinterpretq_m128i_u8(w); + +#else /* ARMv7-A NEON implementation */ + uint8_t i, e, f, g, h, v[4][4]; + vst1q_u8((uint8_t *) v, vreinterpretq_u8_m128i(a)); + for (i = 0; i < 4; ++i) { + e = v[i][0]; + f = v[i][1]; + g = v[i][2]; + h = v[i][3]; + + v[i][0] = SSE2NEON_MULTIPLY(e, 0x0e) ^ SSE2NEON_MULTIPLY(f, 0x0b) ^ + SSE2NEON_MULTIPLY(g, 0x0d) ^ SSE2NEON_MULTIPLY(h, 0x09); + v[i][1] = SSE2NEON_MULTIPLY(e, 0x09) ^ SSE2NEON_MULTIPLY(f, 0x0e) ^ + SSE2NEON_MULTIPLY(g, 0x0b) ^ SSE2NEON_MULTIPLY(h, 0x0d); + v[i][2] = SSE2NEON_MULTIPLY(e, 0x0d) ^ SSE2NEON_MULTIPLY(f, 0x09) ^ + SSE2NEON_MULTIPLY(g, 0x0e) ^ SSE2NEON_MULTIPLY(h, 0x0b); + v[i][3] = SSE2NEON_MULTIPLY(e, 0x0b) ^ SSE2NEON_MULTIPLY(f, 0x0d) ^ + SSE2NEON_MULTIPLY(g, 0x09) ^ SSE2NEON_MULTIPLY(h, 0x0e); + } + + return vreinterpretq_m128i_u8(vld1q_u8((uint8_t *) v)); +#endif +} + +// Assist in expanding the AES cipher key by computing steps towards generating +// a round key for encryption cipher using data from a and an 8-bit round +// constant specified in imm8, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aeskeygenassist_si128 +// +// Emits the Advanced Encryption Standard (AES) instruction aeskeygenassist. +// This instruction generates a round key for AES encryption. See +// https://kazakov.life/2017/11/01/cryptocurrency-mining-on-ios-devices/ +// for details. +FORCE_INLINE __m128i _mm_aeskeygenassist_si128(__m128i a, const int rcon) +{ +#if defined(__aarch64__) + uint8x16_t _a = vreinterpretq_u8_m128i(a); + uint8x16_t v = vqtbl4q_u8(_sse2neon_vld1q_u8_x4(_sse2neon_sbox), _a); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x40), _a - 0x40); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x80), _a - 0x80); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0xc0), _a - 0xc0); + + uint32x4_t v_u32 = vreinterpretq_u32_u8(v); + uint32x4_t ror_v = vorrq_u32(vshrq_n_u32(v_u32, 8), vshlq_n_u32(v_u32, 24)); + uint32x4_t ror_xor_v = veorq_u32(ror_v, vdupq_n_u32(rcon)); + + return vreinterpretq_m128i_u32(vtrn2q_u32(v_u32, ror_xor_v)); + +#else /* ARMv7-A NEON implementation */ + uint32_t X1 = _mm_cvtsi128_si32(_mm_shuffle_epi32(a, 0x55)); + uint32_t X3 = _mm_cvtsi128_si32(_mm_shuffle_epi32(a, 0xFF)); + for (int i = 0; i < 4; ++i) { + ((uint8_t *) &X1)[i] = _sse2neon_sbox[((uint8_t *) &X1)[i]]; + ((uint8_t *) &X3)[i] = _sse2neon_sbox[((uint8_t *) &X3)[i]]; + } + return _mm_set_epi32(((X3 >> 8) | (X3 << 24)) ^ rcon, X3, + ((X1 >> 8) | (X1 << 24)) ^ rcon, X1); +#endif +} +#undef SSE2NEON_AES_SBOX +#undef SSE2NEON_AES_RSBOX + +#if defined(__aarch64__) +#undef SSE2NEON_XT +#undef SSE2NEON_MULTIPLY +#endif + +#else /* __ARM_FEATURE_CRYPTO */ +// Implements equivalent of 'aesenc' by combining AESE (with an empty key) and +// AESMC and then manually applying the real key as an xor operation. This +// unfortunately means an additional xor op; the compiler should be able to +// optimize this away for repeated calls however. See +// https://blog.michaelbrase.com/2018/05/08/emulating-x86-aes-intrinsics-on-armv8-a +// for more details. +FORCE_INLINE __m128i _mm_aesenc_si128(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8(veorq_u8( + vaesmcq_u8(vaeseq_u8(vreinterpretq_u8_m128i(a), vdupq_n_u8(0))), + vreinterpretq_u8_m128i(b))); +} + +// Perform one round of an AES decryption flow on data (state) in a using the +// round key in RoundKey, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesdec_si128 +FORCE_INLINE __m128i _mm_aesdec_si128(__m128i a, __m128i RoundKey) +{ + return vreinterpretq_m128i_u8(veorq_u8( + vaesimcq_u8(vaesdq_u8(vreinterpretq_u8_m128i(a), vdupq_n_u8(0))), + vreinterpretq_u8_m128i(RoundKey))); +} + +// Perform the last round of an AES encryption flow on data (state) in a using +// the round key in RoundKey, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesenclast_si128 +FORCE_INLINE __m128i _mm_aesenclast_si128(__m128i a, __m128i RoundKey) +{ + return _mm_xor_si128(vreinterpretq_m128i_u8(vaeseq_u8( + vreinterpretq_u8_m128i(a), vdupq_n_u8(0))), + RoundKey); +} + +// Perform the last round of an AES decryption flow on data (state) in a using +// the round key in RoundKey, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesdeclast_si128 +FORCE_INLINE __m128i _mm_aesdeclast_si128(__m128i a, __m128i RoundKey) +{ + return vreinterpretq_m128i_u8( + veorq_u8(vaesdq_u8(vreinterpretq_u8_m128i(a), vdupq_n_u8(0)), + vreinterpretq_u8_m128i(RoundKey))); +} + +// Perform the InvMixColumns transformation on a and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesimc_si128 +FORCE_INLINE __m128i _mm_aesimc_si128(__m128i a) +{ + return vreinterpretq_m128i_u8(vaesimcq_u8(vreinterpretq_u8_m128i(a))); +} + +// Assist in expanding the AES cipher key by computing steps towards generating +// a round key for encryption cipher using data from a and an 8-bit round +// constant specified in imm8, and store the result in dst." +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aeskeygenassist_si128 +FORCE_INLINE __m128i _mm_aeskeygenassist_si128(__m128i a, const int rcon) +{ + // AESE does ShiftRows and SubBytes on A + uint8x16_t u8 = vaeseq_u8(vreinterpretq_u8_m128i(a), vdupq_n_u8(0)); + +#if !defined(_MSC_VER) || defined(__clang__) + uint8x16_t dest = { + // Undo ShiftRows step from AESE and extract X1 and X3 + u8[0x4], u8[0x1], u8[0xE], u8[0xB], // SubBytes(X1) + u8[0x1], u8[0xE], u8[0xB], u8[0x4], // ROT(SubBytes(X1)) + u8[0xC], u8[0x9], u8[0x6], u8[0x3], // SubBytes(X3) + u8[0x9], u8[0x6], u8[0x3], u8[0xC], // ROT(SubBytes(X3)) + }; + uint32x4_t r = {0, (unsigned) rcon, 0, (unsigned) rcon}; + return vreinterpretq_m128i_u8(dest) ^ vreinterpretq_m128i_u32(r); +#else + // We have to do this hack because MSVC is strictly adhering to the CPP + // standard, in particular C++03 8.5.1 sub-section 15, which states that + // unions must be initialized by their first member type. + + // As per the Windows ARM64 ABI, it is always little endian, so this works + __n128 dest{ + ((uint64_t) u8.n128_u8[0x4] << 0) | ((uint64_t) u8.n128_u8[0x1] << 8) | + ((uint64_t) u8.n128_u8[0xE] << 16) | + ((uint64_t) u8.n128_u8[0xB] << 24) | + ((uint64_t) u8.n128_u8[0x1] << 32) | + ((uint64_t) u8.n128_u8[0xE] << 40) | + ((uint64_t) u8.n128_u8[0xB] << 48) | + ((uint64_t) u8.n128_u8[0x4] << 56), + ((uint64_t) u8.n128_u8[0xC] << 0) | ((uint64_t) u8.n128_u8[0x9] << 8) | + ((uint64_t) u8.n128_u8[0x6] << 16) | + ((uint64_t) u8.n128_u8[0x3] << 24) | + ((uint64_t) u8.n128_u8[0x9] << 32) | + ((uint64_t) u8.n128_u8[0x6] << 40) | + ((uint64_t) u8.n128_u8[0x3] << 48) | + ((uint64_t) u8.n128_u8[0xC] << 56)}; + + dest.n128_u32[1] = dest.n128_u32[1] ^ rcon; + dest.n128_u32[3] = dest.n128_u32[3] ^ rcon; + + return dest; +#endif +} +#endif + +/* Others */ + +// Perform a carry-less multiplication of two 64-bit integers, selected from a +// and b according to imm8, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_clmulepi64_si128 +FORCE_INLINE __m128i _mm_clmulepi64_si128(__m128i _a, __m128i _b, const int imm) +{ + uint64x2_t a = vreinterpretq_u64_m128i(_a); + uint64x2_t b = vreinterpretq_u64_m128i(_b); + switch (imm & 0x11) { + case 0x00: + return vreinterpretq_m128i_u64( + _sse2neon_vmull_p64(vget_low_u64(a), vget_low_u64(b))); + case 0x01: + return vreinterpretq_m128i_u64( + _sse2neon_vmull_p64(vget_high_u64(a), vget_low_u64(b))); + case 0x10: + return vreinterpretq_m128i_u64( + _sse2neon_vmull_p64(vget_low_u64(a), vget_high_u64(b))); + case 0x11: + return vreinterpretq_m128i_u64( + _sse2neon_vmull_p64(vget_high_u64(a), vget_high_u64(b))); + default: + abort(); + } +} + +FORCE_INLINE unsigned int _sse2neon_mm_get_denormals_zero_mode(void) +{ + union { + fpcr_bitfield field; +#if defined(__aarch64__) || defined(_M_ARM64) + uint64_t value; +#else + uint32_t value; +#endif + } r; + +#if defined(__aarch64__) || defined(_M_ARM64) + r.value = _sse2neon_get_fpcr(); +#else + __asm__ __volatile__("vmrs %0, FPSCR" : "=r"(r.value)); /* read */ +#endif + + return r.field.bit24 ? _MM_DENORMALS_ZERO_ON : _MM_DENORMALS_ZERO_OFF; +} + +// Count the number of bits set to 1 in unsigned 32-bit integer a, and +// return that count in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_popcnt_u32 +FORCE_INLINE int _mm_popcnt_u32(unsigned int a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) +#if __has_builtin(__builtin_popcount) + return __builtin_popcount(a); +#elif defined(_MSC_VER) + return _CountOneBits(a); +#else + return (int) vaddlv_u8(vcnt_u8(vcreate_u8((uint64_t) a))); +#endif +#else + uint32_t count = 0; + uint8x8_t input_val, count8x8_val; + uint16x4_t count16x4_val; + uint32x2_t count32x2_val; + + input_val = vld1_u8((uint8_t *) &a); + count8x8_val = vcnt_u8(input_val); + count16x4_val = vpaddl_u8(count8x8_val); + count32x2_val = vpaddl_u16(count16x4_val); + + vst1_u32(&count, count32x2_val); + return count; +#endif +} + +// Count the number of bits set to 1 in unsigned 64-bit integer a, and +// return that count in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_popcnt_u64 +FORCE_INLINE int64_t _mm_popcnt_u64(uint64_t a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) +#if __has_builtin(__builtin_popcountll) + return __builtin_popcountll(a); +#elif defined(_MSC_VER) + return _CountOneBits64(a); +#else + return (int64_t) vaddlv_u8(vcnt_u8(vcreate_u8(a))); +#endif +#else + uint64_t count = 0; + uint8x8_t input_val, count8x8_val; + uint16x4_t count16x4_val; + uint32x2_t count32x2_val; + uint64x1_t count64x1_val; + + input_val = vld1_u8((uint8_t *) &a); + count8x8_val = vcnt_u8(input_val); + count16x4_val = vpaddl_u8(count8x8_val); + count32x2_val = vpaddl_u16(count16x4_val); + count64x1_val = vpaddl_u32(count32x2_val); + vst1_u64(&count, count64x1_val); + return count; +#endif +} + +FORCE_INLINE void _sse2neon_mm_set_denormals_zero_mode(unsigned int flag) +{ + // AArch32 Advanced SIMD arithmetic always uses the Flush-to-zero setting, + // regardless of the value of the FZ bit. + union { + fpcr_bitfield field; +#if defined(__aarch64__) || defined(_M_ARM64) + uint64_t value; +#else + uint32_t value; +#endif + } r; + +#if defined(__aarch64__) || defined(_M_ARM64) + r.value = _sse2neon_get_fpcr(); +#else + __asm__ __volatile__("vmrs %0, FPSCR" : "=r"(r.value)); /* read */ +#endif + + r.field.bit24 = (flag & _MM_DENORMALS_ZERO_MASK) == _MM_DENORMALS_ZERO_ON; + +#if defined(__aarch64__) || defined(_M_ARM64) + _sse2neon_set_fpcr(r.value); +#else + __asm__ __volatile__("vmsr FPSCR, %0" ::"r"(r)); /* write */ +#endif +} + +// Return the current 64-bit value of the processor's time-stamp counter. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=rdtsc +FORCE_INLINE uint64_t _rdtsc(void) +{ +#if defined(__aarch64__) || defined(_M_ARM64) + uint64_t val; + + /* According to ARM DDI 0487F.c, from Armv8.0 to Armv8.5 inclusive, the + * system counter is at least 56 bits wide; from Armv8.6, the counter + * must be 64 bits wide. So the system counter could be less than 64 + * bits wide and it is attributed with the flag 'cap_user_time_short' + * is true. + */ +#if defined(_MSC_VER) && !defined(__clang__) + val = _ReadStatusReg(ARM64_SYSREG(3, 3, 14, 0, 2)); +#else + __asm__ __volatile__("mrs %0, cntvct_el0" : "=r"(val)); +#endif + + return val; +#else + uint32_t pmccntr, pmuseren, pmcntenset; + // Read the user mode Performance Monitoring Unit (PMU) + // User Enable Register (PMUSERENR) access permissions. + __asm__ __volatile__("mrc p15, 0, %0, c9, c14, 0" : "=r"(pmuseren)); + if (pmuseren & 1) { // Allows reading PMUSERENR for user mode code. + __asm__ __volatile__("mrc p15, 0, %0, c9, c12, 1" : "=r"(pmcntenset)); + if (pmcntenset & 0x80000000UL) { // Is it counting? + __asm__ __volatile__("mrc p15, 0, %0, c9, c13, 0" : "=r"(pmccntr)); + // The counter is set up to count every 64th cycle + return (uint64_t) (pmccntr) << 6; + } + } + + // Fallback to syscall as we can't enable PMUSERENR in user mode. + struct timeval tv; + gettimeofday(&tv, NULL); + return (uint64_t) (tv.tv_sec) * 1000000 + tv.tv_usec; +#endif +} + +#if defined(__GNUC__) || defined(__clang__) +#pragma pop_macro("ALIGN_STRUCT") +#pragma pop_macro("FORCE_INLINE") +#endif + +#if defined(__GNUC__) && !defined(__clang__) +#pragma GCC pop_options +#endif + +#endif diff --git a/src/device.rs b/src/device.rs index c4cd5c2..cab9254 100644 --- a/src/device.rs +++ b/src/device.rs @@ -1,3 +1,15 @@ +#![allow(non_camel_case_types)] +#![allow(improper_ctypes)] + +#[cfg(target_arch = "aarch64")] +#[derive(Copy, Clone)] +#[allow(dead_code)] +pub struct __m128i(std::arch::aarch64::int64x2_t); +#[cfg(target_arch = "aarch64")] +include!(concat!(env!("OUT_DIR"), "/simd_bindings.rs")); +#[cfg(target_arch = "x86_64")] +use std::arch::x86_64::*; + use crate::ui; use std::collections::HashMap; use std::fs; @@ -228,6 +240,7 @@ impl Device { cop1: cop1::Cop1 { fcr0: 0, fcr31: 0, + #[cfg(target_arch = "x86_64")] flush_mode: 0, fgr32: [[0; 4]; 32], fgr64: [[0; 8]; 32], @@ -334,15 +347,15 @@ impl Device { divdp: false, divin: 0, divout: 0, - shuffle: unsafe { [std::arch::x86_64::_mm_setzero_si128(); 16] }, - vcol: unsafe { std::arch::x86_64::_mm_setzero_si128() }, - vcoh: unsafe { std::arch::x86_64::_mm_setzero_si128() }, - vccl: unsafe { std::arch::x86_64::_mm_setzero_si128() }, - vcch: unsafe { std::arch::x86_64::_mm_setzero_si128() }, - vce: unsafe { std::arch::x86_64::_mm_setzero_si128() }, - accl: unsafe { std::arch::x86_64::_mm_setzero_si128() }, - accm: unsafe { std::arch::x86_64::_mm_setzero_si128() }, - acch: unsafe { std::arch::x86_64::_mm_setzero_si128() }, + shuffle: unsafe { [_mm_setzero_si128(); 16] }, + vcol: unsafe { _mm_setzero_si128() }, + vcoh: unsafe { _mm_setzero_si128() }, + vccl: unsafe { _mm_setzero_si128() }, + vcch: unsafe { _mm_setzero_si128() }, + vce: unsafe { _mm_setzero_si128() }, + accl: unsafe { _mm_setzero_si128() }, + accm: unsafe { _mm_setzero_si128() }, + acch: unsafe { _mm_setzero_si128() }, special_instrs: [rsp_su_instructions::reserved; 64], regimm_instrs: [rsp_su_instructions::reserved; 32], cop0_instrs: [rsp_su_instructions::reserved; 32], diff --git a/src/device/cop1.rs b/src/device/cop1.rs index eb6c7f7..387f0ae 100644 --- a/src/device/cop1.rs +++ b/src/device/cop1.rs @@ -17,6 +17,7 @@ use crate::device; //const FCR31_CAUSE_INVALID_BIT: u32 = 1 << 16; const FCR31_CAUSE_UNIMP_BIT: u32 = 1 << 17; pub const FCR31_CMP_BIT: u32 = 1 << 23; +#[cfg(target_arch = "x86_64")] const FCR31_FS_BIT: u32 = 1 << 24; const FCR31_CAUSE_MASK: u32 = 0b00000000000000111111000000000000; @@ -26,6 +27,7 @@ const FCR31_WRITE_MASK: u32 = 0b00000001100000111111111111111111; pub struct Cop1 { pub fcr0: u32, pub fcr31: u32, + #[cfg(target_arch = "x86_64")] pub flush_mode: u32, pub fgr32: [[u8; 4]; 32], pub fgr64: [[u8; 8]; 32], @@ -367,21 +369,24 @@ pub fn set_control_registers_fpu(device: &mut device::Device, index: u32, data: device::exceptions::floating_point_exception(device) } - unsafe { - let flush_mode; - if (device.cpu.cop1.fcr31 & 2) != 0 { - if (device.cpu.cop1.fcr31 & FCR31_FS_BIT) != 0 { - flush_mode = std::arch::x86_64::_MM_FLUSH_ZERO_OFF + #[cfg(target_arch = "x86_64")] + { + unsafe { + let flush_mode; + if (device.cpu.cop1.fcr31 & 2) != 0 { + if (device.cpu.cop1.fcr31 & FCR31_FS_BIT) != 0 { + flush_mode = std::arch::x86_64::_MM_FLUSH_ZERO_OFF + } else { + flush_mode = std::arch::x86_64::_MM_FLUSH_ZERO_ON; + } } else { flush_mode = std::arch::x86_64::_MM_FLUSH_ZERO_ON; } - } else { - flush_mode = std::arch::x86_64::_MM_FLUSH_ZERO_ON; - } - if flush_mode != device.cpu.cop1.flush_mode { - #[allow(deprecated)] - std::arch::x86_64::_MM_SET_FLUSH_ZERO_MODE(flush_mode); - device.cpu.cop1.flush_mode = flush_mode; + if flush_mode != device.cpu.cop1.flush_mode { + #[allow(deprecated)] + std::arch::x86_64::_MM_SET_FLUSH_ZERO_MODE(flush_mode); + device.cpu.cop1.flush_mode = flush_mode; + } } } } diff --git a/src/device/rsp_cpu.rs b/src/device/rsp_cpu.rs index 9bd52bf..5539cee 100644 --- a/src/device/rsp_cpu.rs +++ b/src/device/rsp_cpu.rs @@ -1,4 +1,9 @@ +#[cfg(target_arch = "aarch64")] +use device::__m128i; +#[cfg(target_arch = "aarch64")] +include!(concat!(env!("OUT_DIR"), "/simd_bindings.rs")); use crate::device; +#[cfg(target_arch = "x86_64")] use std::arch::x86_64::*; pub struct BranchState { @@ -33,14 +38,14 @@ pub struct Cpu { pub vpr: [u128; 32], pub reciprocals: [u16; 512], pub inverse_square_roots: [u16; 512], - pub vcol: std::arch::x86_64::__m128i, - pub vcoh: std::arch::x86_64::__m128i, - pub vccl: std::arch::x86_64::__m128i, - pub vcch: std::arch::x86_64::__m128i, - pub vce: std::arch::x86_64::__m128i, - pub accl: std::arch::x86_64::__m128i, - pub accm: std::arch::x86_64::__m128i, - pub acch: std::arch::x86_64::__m128i, + pub vcol: __m128i, + pub vcoh: __m128i, + pub vccl: __m128i, + pub vcch: __m128i, + pub vce: __m128i, + pub accl: __m128i, + pub accm: __m128i, + pub acch: __m128i, pub divdp: bool, pub divin: i16, pub divout: i16, diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index 12eaf2a..ba9b802 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -1,4 +1,9 @@ +#[cfg(target_arch = "aarch64")] +use device::__m128i; +#[cfg(target_arch = "aarch64")] +include!(concat!(env!("OUT_DIR"), "/simd_bindings.rs")); use crate::device; +#[cfg(target_arch = "x86_64")] use std::arch::x86_64::*; pub fn rd(opcode: u32) -> u32 { @@ -574,7 +579,7 @@ pub fn ctc2(device: &mut device::Device, opcode: u32) { ), _mm_setzero_si128(), ); - *hi = std::arch::x86_64::_mm_cmpeq_epi8( + *hi = _mm_cmpeq_epi8( _mm_and_si128( _mm_set1_epi8(!(device.rsp.cpu.gpr[rt(opcode) as usize] >> 8) as i8), mask, diff --git a/src/device/rsp_vu_instructions.rs b/src/device/rsp_vu_instructions.rs index 3d64a43..3cb5504 100644 --- a/src/device/rsp_vu_instructions.rs +++ b/src/device/rsp_vu_instructions.rs @@ -1,5 +1,12 @@ +#[cfg(target_arch = "aarch64")] +use device::__m128i; +#[cfg(target_arch = "aarch64")] +include!(concat!(env!("OUT_DIR"), "/simd_bindings.rs")); +#[cfg(target_arch = "aarch64")] +include!("../compat/aarch64.rs"); use crate::device; use crate::device::rsp_su_instructions::{get_vpr_element, modify_vpr_element}; +#[cfg(target_arch = "x86_64")] use std::arch::x86_64::*; pub fn vt(opcode: u32) -> u32 { @@ -39,9 +46,7 @@ pub fn s_clip(x: i64, bits: u32) -> i64 { pub fn vte(device: &device::Device, vt: u32, index: usize) -> __m128i { unsafe { _mm_shuffle_epi8( - std::mem::transmute::( - device.rsp.cpu.vpr[vt as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vt as usize]), device.rsp.cpu.shuffle[index], ) } @@ -52,9 +57,7 @@ pub fn vmulf(device: &mut device::Device, opcode: u32) { let (mut lo, mut hi, mut round, mut sign1, sign2, neq, eq, neg); unsafe { lo = _mm_mullo_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); round = _mm_cmpeq_epi16(_mm_setzero_si128(), _mm_setzero_si128()); @@ -62,9 +65,7 @@ pub fn vmulf(device: &mut device::Device, opcode: u32) { lo = _mm_add_epi16(lo, lo); round = _mm_slli_epi16(round, 15); hi = _mm_mulhi_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); sign2 = _mm_srli_epi16(lo, 15); @@ -72,9 +73,7 @@ pub fn vmulf(device: &mut device::Device, opcode: u32) { sign1 = _mm_add_epi16(sign1, sign2); hi = _mm_slli_epi16(hi, 1); neq = _mm_cmpeq_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); device.rsp.cpu.accm = _mm_add_epi16(hi, sign1); @@ -82,10 +81,8 @@ pub fn vmulf(device: &mut device::Device, opcode: u32) { eq = _mm_and_si128(neq, neg); device.rsp.cpu.acch = _mm_andnot_si128(neq, neg); - device.rsp.cpu.vpr[vd(opcode) as usize] = std::mem::transmute::< - std::arch::x86_64::__m128i, - u128, - >(_mm_add_epi16(device.rsp.cpu.accm, eq)); + device.rsp.cpu.vpr[vd(opcode) as usize] = + std::mem::transmute::<__m128i, u128>(_mm_add_epi16(device.rsp.cpu.accm, eq)); } } @@ -94,9 +91,7 @@ pub fn vmulu(device: &mut device::Device, opcode: u32) { let (mut lo, mut hi, mut round, mut sign1, sign2, neq, neg); unsafe { lo = _mm_mullo_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); round = _mm_cmpeq_epi16(_mm_setzero_si128(), _mm_setzero_si128()); @@ -104,9 +99,7 @@ pub fn vmulu(device: &mut device::Device, opcode: u32) { lo = _mm_add_epi16(lo, lo); round = _mm_slli_epi16(round, 15); hi = _mm_mulhi_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); sign2 = _mm_srli_epi16(lo, 15); @@ -114,9 +107,7 @@ pub fn vmulu(device: &mut device::Device, opcode: u32) { sign1 = _mm_add_epi16(sign1, sign2); hi = _mm_slli_epi16(hi, 1); neq = _mm_cmpeq_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); device.rsp.cpu.accm = _mm_add_epi16(hi, sign1); @@ -125,20 +116,13 @@ pub fn vmulu(device: &mut device::Device, opcode: u32) { device.rsp.cpu.acch = _mm_andnot_si128(neq, neg); hi = _mm_or_si128(device.rsp.cpu.accm, neg); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(_mm_andnot_si128( - device.rsp.cpu.acch, - hi, - )); + std::mem::transmute::<__m128i, u128>(_mm_andnot_si128(device.rsp.cpu.acch, hi)); } } pub fn vrndp(device: &mut device::Device, opcode: u32) { let vte = unsafe { - std::mem::transmute::(vte( - device, - vt(opcode), - ve(opcode) as usize, - )) + std::mem::transmute::<__m128i, u128>(vte(device, vt(opcode), ve(opcode) as usize)) }; let acch: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.acch) }; let accm: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accm) }; @@ -173,11 +157,7 @@ pub fn vrndp(device: &mut device::Device, opcode: u32) { pub fn vmulq(device: &mut device::Device, opcode: u32) { let vte = unsafe { - std::mem::transmute::(vte( - device, - vt(opcode), - ve(opcode) as usize, - )) + std::mem::transmute::<__m128i, u128>(vte(device, vt(opcode), ve(opcode) as usize)) }; let acch: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.acch) }; let accm: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accm) }; @@ -205,15 +185,13 @@ pub fn vmudl(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_mulhi_epu16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); device.rsp.cpu.accm = _mm_setzero_si128(); device.rsp.cpu.acch = _mm_setzero_si128(); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(device.rsp.cpu.accl); + std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); } } @@ -222,28 +200,22 @@ pub fn vmudm(device: &mut device::Device, opcode: u32) { let (sign, vta); unsafe { device.rsp.cpu.accl = _mm_mullo_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); device.rsp.cpu.accm = _mm_mulhi_epu16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); sign = _mm_srai_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), 15, ); vta = _mm_and_si128(vte, sign); device.rsp.cpu.accm = _mm_sub_epi16(device.rsp.cpu.accm, vta); device.rsp.cpu.acch = _mm_srai_epi16(device.rsp.cpu.accm, 15); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(device.rsp.cpu.accm); + std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accm); } } @@ -252,28 +224,22 @@ pub fn vmudn(device: &mut device::Device, opcode: u32) { let (sign, vsa); unsafe { device.rsp.cpu.accl = _mm_mullo_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); device.rsp.cpu.accm = _mm_mulhi_epu16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); sign = _mm_srai_epi16(vte, 15); vsa = _mm_and_si128( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), sign, ); device.rsp.cpu.accm = _mm_sub_epi16(device.rsp.cpu.accm, vsa); device.rsp.cpu.acch = _mm_srai_epi16(device.rsp.cpu.accm, 15); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(device.rsp.cpu.accl); + std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); } } @@ -283,21 +249,17 @@ pub fn vmudh(device: &mut device::Device, opcode: u32) { unsafe { device.rsp.cpu.accl = _mm_setzero_si128(); device.rsp.cpu.accm = _mm_mullo_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); device.rsp.cpu.acch = _mm_mulhi_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); lo = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); hi = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(_mm_packs_epi32(lo, hi)); + std::mem::transmute::<__m128i, u128>(_mm_packs_epi32(lo, hi)); } } @@ -306,15 +268,11 @@ pub fn vmacf(device: &mut device::Device, opcode: u32) { let (mut lo, mut md, mut hi, mut carry, mut omask); unsafe { lo = _mm_mullo_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); hi = _mm_mulhi_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); md = _mm_slli_epi16(hi, 1); @@ -340,7 +298,7 @@ pub fn vmacf(device: &mut device::Device, opcode: u32) { lo = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); hi = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(_mm_packs_epi32(lo, hi)); + std::mem::transmute::<__m128i, u128>(_mm_packs_epi32(lo, hi)); } } @@ -349,15 +307,11 @@ pub fn vmacu(device: &mut device::Device, opcode: u32) { let (mut lo, mut md, mut hi, mut carry, mut omask, mmask, hmask); unsafe { lo = _mm_mullo_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); hi = _mm_mulhi_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); md = _mm_slli_epi16(hi, 1); @@ -386,17 +340,13 @@ pub fn vmacu(device: &mut device::Device, opcode: u32) { omask = _mm_cmpgt_epi16(device.rsp.cpu.acch, _mm_setzero_si128()); md = _mm_andnot_si128(hmask, md); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(_mm_or_si128(omask, md)); + std::mem::transmute::<__m128i, u128>(_mm_or_si128(omask, md)); } } pub fn vrndn(device: &mut device::Device, opcode: u32) { let vte = unsafe { - std::mem::transmute::(vte( - device, - vt(opcode), - ve(opcode) as usize, - )) + std::mem::transmute::<__m128i, u128>(vte(device, vt(opcode), ve(opcode) as usize)) }; let acch: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.acch) }; let accm: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accm) }; @@ -456,9 +406,7 @@ pub fn vmadl(device: &mut device::Device, opcode: u32) { let (mut hi, mut omask, nhi, nmd, shi, smd, cmask, cval); unsafe { hi = _mm_mulhi_epu16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); omask = _mm_adds_epu16(device.rsp.cpu.accl, hi); @@ -478,11 +426,7 @@ pub fn vmadl(device: &mut device::Device, opcode: u32) { cmask = _mm_and_si128(smd, shi); cval = _mm_cmpeq_epi16(nhi, _mm_setzero_si128()); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(_mm_blendv_epi8( - cval, - device.rsp.cpu.accl, - cmask, - )); + std::mem::transmute::<__m128i, u128>(_mm_blendv_epi8(cval, device.rsp.cpu.accl, cmask)); } } @@ -491,21 +435,15 @@ pub fn vmadm(device: &mut device::Device, opcode: u32) { let (mut lo, mut hi, sign, vta, mut omask); unsafe { lo = _mm_mullo_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); hi = _mm_mulhi_epu16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); sign = _mm_srai_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), 15, ); vta = _mm_and_si128(vte, sign); @@ -525,7 +463,7 @@ pub fn vmadm(device: &mut device::Device, opcode: u32) { lo = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); hi = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(_mm_packs_epi32(lo, hi)); + std::mem::transmute::<__m128i, u128>(_mm_packs_epi32(lo, hi)); } } @@ -534,22 +472,16 @@ pub fn vmadn(device: &mut device::Device, opcode: u32) { let (lo, mut hi, sign, vsa, mut omask, nhi, nmd, shi, smd, cmask, cval); unsafe { lo = _mm_mullo_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); hi = _mm_mulhi_epu16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); sign = _mm_srai_epi16(vte, 15); vsa = _mm_and_si128( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), sign, ); hi = _mm_sub_epi16(hi, vsa); @@ -572,11 +504,7 @@ pub fn vmadn(device: &mut device::Device, opcode: u32) { cmask = _mm_and_si128(smd, shi); cval = _mm_cmpeq_epi16(nhi, _mm_setzero_si128()); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(_mm_blendv_epi8( - cval, - device.rsp.cpu.accl, - cmask, - )); + std::mem::transmute::<__m128i, u128>(_mm_blendv_epi8(cval, device.rsp.cpu.accl, cmask)); } } @@ -585,15 +513,11 @@ pub fn vmadh(device: &mut device::Device, opcode: u32) { let (mut lo, mut hi, mut omask); unsafe { lo = _mm_mullo_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); hi = _mm_mulhi_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); omask = _mm_adds_epu16(device.rsp.cpu.accm, lo); @@ -605,7 +529,7 @@ pub fn vmadh(device: &mut device::Device, opcode: u32) { lo = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); hi = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(_mm_packs_epi32(lo, hi)); + std::mem::transmute::<__m128i, u128>(_mm_packs_epi32(lo, hi)); } } @@ -614,27 +538,21 @@ pub fn vadd(device: &mut device::Device, opcode: u32) { let (sum, mut min, max); unsafe { sum = _mm_add_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); device.rsp.cpu.accl = _mm_sub_epi16(sum, device.rsp.cpu.vcol); min = _mm_min_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); max = _mm_max_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); min = _mm_subs_epi16(min, device.rsp.cpu.vcol); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(_mm_adds_epi16(min, max)); + std::mem::transmute::<__m128i, u128>(_mm_adds_epi16(min, max)); device.rsp.cpu.vcol = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); } @@ -647,24 +565,18 @@ pub fn vsub(device: &mut device::Device, opcode: u32) { udiff = _mm_sub_epi16(vte, device.rsp.cpu.vcol); sdiff = _mm_subs_epi16(vte, device.rsp.cpu.vcol); device.rsp.cpu.accl = _mm_sub_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), udiff, ); ov = _mm_cmpgt_epi16(sdiff, udiff); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(_mm_subs_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::<__m128i, u128>(_mm_subs_epi16( + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), sdiff, )); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(_mm_adds_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vd(opcode) as usize], - ), + std::mem::transmute::<__m128i, u128>(_mm_adds_epi16( + std::mem::transmute::(device.rsp.cpu.vpr[vd(opcode) as usize]), ov, )); device.rsp.cpu.vcol = _mm_setzero_si128(); @@ -676,19 +588,13 @@ pub fn vzero(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_add_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(_mm_xor_si128( - std::mem::transmute::( - device.rsp.cpu.vpr[vd(opcode) as usize], - ), - std::mem::transmute::( - device.rsp.cpu.vpr[vd(opcode) as usize], - ), + std::mem::transmute::<__m128i, u128>(_mm_xor_si128( + std::mem::transmute::(device.rsp.cpu.vpr[vd(opcode) as usize]), + std::mem::transmute::(device.rsp.cpu.vpr[vd(opcode) as usize]), )); } } @@ -698,37 +604,27 @@ pub fn vabs(device: &mut device::Device, opcode: u32) { let (vs0, slt); unsafe { vs0 = _mm_cmpeq_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), _mm_setzero_si128(), ); slt = _mm_srai_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), 15, ); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(_mm_andnot_si128(vs0, vte)); + std::mem::transmute::<__m128i, u128>(_mm_andnot_si128(vs0, vte)); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(_mm_xor_si128( - std::mem::transmute::( - device.rsp.cpu.vpr[vd(opcode) as usize], - ), + std::mem::transmute::<__m128i, u128>(_mm_xor_si128( + std::mem::transmute::(device.rsp.cpu.vpr[vd(opcode) as usize]), slt, )); device.rsp.cpu.accl = _mm_sub_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vd(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vd(opcode) as usize]), slt, ); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(_mm_subs_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vd(opcode) as usize], - ), + std::mem::transmute::<__m128i, u128>(_mm_subs_epi16( + std::mem::transmute::(device.rsp.cpu.vpr[vd(opcode) as usize]), slt, )); } @@ -739,22 +635,18 @@ pub fn vaddc(device: &mut device::Device, opcode: u32) { let sum; unsafe { sum = _mm_adds_epu16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); device.rsp.cpu.accl = _mm_add_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); device.rsp.cpu.vcol = _mm_cmpeq_epi16(sum, device.rsp.cpu.accl); device.rsp.cpu.vcol = _mm_cmpeq_epi16(device.rsp.cpu.vcol, _mm_setzero_si128()); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(device.rsp.cpu.accl); + std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); } } @@ -763,47 +655,38 @@ pub fn vsubc(device: &mut device::Device, opcode: u32) { let (equal, udiff, diff0); unsafe { udiff = _mm_subs_epu16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); equal = _mm_cmpeq_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); diff0 = _mm_cmpeq_epi16(udiff, _mm_setzero_si128()); device.rsp.cpu.vcoh = _mm_cmpeq_epi16(equal, _mm_setzero_si128()); device.rsp.cpu.vcol = _mm_andnot_si128(equal, diff0); device.rsp.cpu.accl = _mm_sub_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(device.rsp.cpu.accl); + std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); } } pub fn vsar(device: &mut device::Device, opcode: u32) { match ve(opcode) { 0x8 => { - device.rsp.cpu.vpr[vd(opcode) as usize] = unsafe { - std::mem::transmute::(device.rsp.cpu.acch) - }; + device.rsp.cpu.vpr[vd(opcode) as usize] = + unsafe { std::mem::transmute::<__m128i, u128>(device.rsp.cpu.acch) }; } 0x9 => { - device.rsp.cpu.vpr[vd(opcode) as usize] = unsafe { - std::mem::transmute::(device.rsp.cpu.accm) - }; + device.rsp.cpu.vpr[vd(opcode) as usize] = + unsafe { std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accm) }; } 0xa => { - device.rsp.cpu.vpr[vd(opcode) as usize] = unsafe { - std::mem::transmute::(device.rsp.cpu.accl) - }; + device.rsp.cpu.vpr[vd(opcode) as usize] = + unsafe { std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl) }; } _ => { device.rsp.cpu.vpr[vd(opcode) as usize] = 0; @@ -816,15 +699,11 @@ pub fn vlt(device: &mut device::Device, opcode: u32) { let (mut eq, lt); unsafe { eq = _mm_cmpeq_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); lt = _mm_cmplt_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); eq = _mm_and_si128(device.rsp.cpu.vcoh, eq); @@ -832,16 +711,14 @@ pub fn vlt(device: &mut device::Device, opcode: u32) { device.rsp.cpu.vccl = _mm_or_si128(lt, eq); device.rsp.cpu.accl = _mm_blendv_epi8( vte, - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), device.rsp.cpu.vccl, ); device.rsp.cpu.vcch = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(device.rsp.cpu.accl); + std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); } } @@ -850,24 +727,20 @@ pub fn veq(device: &mut device::Device, opcode: u32) { let eq; unsafe { eq = _mm_cmpeq_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); device.rsp.cpu.vccl = _mm_andnot_si128(device.rsp.cpu.vcoh, eq); device.rsp.cpu.accl = _mm_blendv_epi8( vte, - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), device.rsp.cpu.vccl, ); device.rsp.cpu.vcch = _mm_setzero_si128(); //unverified device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(device.rsp.cpu.accl); + std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); } } @@ -876,9 +749,7 @@ pub fn vne(device: &mut device::Device, opcode: u32) { let (eq, ne); unsafe { eq = _mm_cmpeq_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); ne = _mm_cmpeq_epi16(eq, _mm_setzero_si128()); @@ -886,16 +757,14 @@ pub fn vne(device: &mut device::Device, opcode: u32) { device.rsp.cpu.vccl = _mm_or_si128(device.rsp.cpu.vccl, ne); device.rsp.cpu.accl = _mm_blendv_epi8( vte, - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), device.rsp.cpu.vccl, ); device.rsp.cpu.vcch = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(device.rsp.cpu.accl); + std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); } } @@ -904,15 +773,11 @@ pub fn vge(device: &mut device::Device, opcode: u32) { let (mut eq, gt, es); unsafe { eq = _mm_cmpeq_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); gt = _mm_cmpgt_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); es = _mm_and_si128(device.rsp.cpu.vcoh, device.rsp.cpu.vcol); @@ -920,16 +785,14 @@ pub fn vge(device: &mut device::Device, opcode: u32) { device.rsp.cpu.vccl = _mm_or_si128(gt, eq); device.rsp.cpu.accl = _mm_blendv_epi8( vte, - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), device.rsp.cpu.vccl, ); device.rsp.cpu.vcch = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(device.rsp.cpu.accl); + std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); } } @@ -953,15 +816,11 @@ pub fn vcl(device: &mut device::Device, opcode: u32) { nvt = _mm_xor_si128(vte, device.rsp.cpu.vcol); nvt = _mm_sub_epi16(nvt, device.rsp.cpu.vcol); diff = _mm_sub_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), nvt, ); ncarry = _mm_adds_epu16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); ncarry = _mm_cmpeq_epi16(diff, ncarry); @@ -974,9 +833,7 @@ pub fn vcl(device: &mut device::Device, opcode: u32) { leeq = _mm_or_si128(lec1, lec2); geeq = _mm_subs_epu16( vte, - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), ); geeq = _mm_cmpeq_epi16(geeq, _mm_setzero_si128()); le = _mm_andnot_si128(device.rsp.cpu.vcoh, device.rsp.cpu.vcol); @@ -985,9 +842,7 @@ pub fn vcl(device: &mut device::Device, opcode: u32) { ge = _mm_blendv_epi8(geeq, device.rsp.cpu.vcch, ge); mask = _mm_blendv_epi8(ge, le, device.rsp.cpu.vcol); device.rsp.cpu.accl = _mm_blendv_epi8( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), nvt, mask, ); @@ -997,7 +852,7 @@ pub fn vcl(device: &mut device::Device, opcode: u32) { device.rsp.cpu.vcol = _mm_setzero_si128(); device.rsp.cpu.vce = _mm_setzero_si128(); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(device.rsp.cpu.accl); + std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); } } @@ -1006,18 +861,14 @@ pub fn vch(device: &mut device::Device, opcode: u32) { let (mut nvt, diff, diff0, vtn, mut dlez, dgez, mask); unsafe { device.rsp.cpu.vcol = _mm_xor_si128( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); device.rsp.cpu.vcol = _mm_cmplt_epi16(device.rsp.cpu.vcol, _mm_setzero_si128()); nvt = _mm_xor_si128(vte, device.rsp.cpu.vcol); nvt = _mm_sub_epi16(nvt, device.rsp.cpu.vcol); diff = _mm_sub_epi16( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), nvt, ); diff0 = _mm_cmpeq_epi16(diff, _mm_setzero_si128()); @@ -1037,14 +888,12 @@ pub fn vch(device: &mut device::Device, opcode: u32) { device.rsp.cpu.vcol, ); device.rsp.cpu.accl = _mm_blendv_epi8( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), nvt, mask, ); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(device.rsp.cpu.accl); + std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); } } @@ -1053,24 +902,18 @@ pub fn vcr(device: &mut device::Device, opcode: u32) { let (mut sign, mut dlez, mut dgez, nvt, mask); unsafe { sign = _mm_xor_si128( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); sign = _mm_srai_epi16(sign, 15); dlez = _mm_and_si128( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), sign, ); dlez = _mm_add_epi16(dlez, vte); device.rsp.cpu.vccl = _mm_srai_epi16(dlez, 15); dgez = _mm_or_si128( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), sign, ); dgez = _mm_min_epi16(dgez, vte); @@ -1078,14 +921,12 @@ pub fn vcr(device: &mut device::Device, opcode: u32) { nvt = _mm_xor_si128(vte, sign); mask = _mm_blendv_epi8(device.rsp.cpu.vcch, device.rsp.cpu.vccl, sign); device.rsp.cpu.accl = _mm_blendv_epi8( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), nvt, mask, ); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(device.rsp.cpu.accl); + std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); device.rsp.cpu.vcol = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vce = _mm_setzero_si128(); @@ -1097,15 +938,13 @@ pub fn vmrg(device: &mut device::Device, opcode: u32) { unsafe { device.rsp.cpu.accl = _mm_blendv_epi8( vte, - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), device.rsp.cpu.vccl, ); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(device.rsp.cpu.accl); + std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); } } @@ -1113,13 +952,11 @@ pub fn vand(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_and_si128( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(device.rsp.cpu.accl); + std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); } } @@ -1127,14 +964,12 @@ pub fn vnand(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_and_si128( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); device.rsp.cpu.accl = _mm_xor_si128(device.rsp.cpu.accl, _mm_set1_epi32(-1)); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(device.rsp.cpu.accl); + std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); } } @@ -1142,13 +977,11 @@ pub fn vor(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_or_si128( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(device.rsp.cpu.accl); + std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); } } @@ -1156,14 +989,12 @@ pub fn vnor(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_or_si128( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); device.rsp.cpu.accl = _mm_xor_si128(device.rsp.cpu.accl, _mm_set1_epi32(-1)); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(device.rsp.cpu.accl); + std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); } } @@ -1171,13 +1002,11 @@ pub fn vxor(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_xor_si128( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(device.rsp.cpu.accl); + std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); } } @@ -1185,14 +1014,12 @@ pub fn vnxor(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { device.rsp.cpu.accl = _mm_xor_si128( - std::mem::transmute::( - device.rsp.cpu.vpr[vs(opcode) as usize], - ), + std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), vte, ); device.rsp.cpu.accl = _mm_xor_si128(device.rsp.cpu.accl, _mm_set1_epi32(-1)); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::(device.rsp.cpu.accl); + std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); } } @@ -1280,7 +1107,7 @@ pub fn vrcph(device: &mut device::Device, opcode: u32) { pub fn vmov(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let value = get_vpr_element( - unsafe { std::mem::transmute::(vte) }, + unsafe { std::mem::transmute::<__m128i, u128>(vte) }, de(opcode) as u8, ); modify_vpr_element( From 5f84c18b394f093ee8e4bb5109d3de2b34932d4c Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 12 Jan 2025 18:20:42 +0100 Subject: [PATCH 0179/1117] Build aarch64 for Linux (#129) * linux aarch * more * more * more * more * more * more * more * more * more * more * more --- .cargo/config.toml | 3 +++ .github/workflows/build.yml | 49 ++++++++++++++++++++++++++++++++++--- build.rs | 1 + 3 files changed, 49 insertions(+), 4 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 40eddf6..25c2c32 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -3,3 +3,6 @@ rustflags = ["-C", "target-cpu=x86-64-v3"] [target.'cfg(target_arch = "aarch64")'] rustflags = ["-C", "target-cpu=cortex-a76"] + +[target.aarch64-unknown-linux-gnu] +linker = "aarch64-linux-gnu-gcc" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6876275..73e1f27 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,18 +14,59 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - target: [x86_64-unknown-linux-gnu] + target: [x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu] steps: - uses: actions/checkout@v4 with: submodules: recursive - - name: Install sdl2 headers - run: | - sudo apt -y install libsdl2-dev - uses: actions-rust-lang/setup-rust-toolchain@v1 with: target: ${{ matrix.target }} rustflags: "" + - name: Install SDL2 + if: matrix.target == 'aarch64-unknown-linux-gnu' + run: | + cat < deb822sources + Types: deb + URIs: http://archive.ubuntu.com/ubuntu/ + Suites: noble + Components: main restricted universe + Architectures: amd64 + + Types: deb + URIs: http://security.ubuntu.com/ubuntu/ + Suites: noble-security + Components: main restricted universe + Architectures: amd64 + + Types: deb + URIs: http://archive.ubuntu.com/ubuntu/ + Suites: noble-updates + Components: main restricted universe + Architectures: amd64 + + Types: deb + URIs: http://azure.ports.ubuntu.com/ubuntu-ports/ + Suites: noble + Components: main restricted multiverse universe + Architectures: arm64 + + Types: deb + URIs: http://azure.ports.ubuntu.com/ubuntu-ports/ + Suites: noble-updates + Components: main restricted multiverse universe + Architectures: arm64 + EOF + + sudo mv deb822sources /etc/apt/sources.list.d/ubuntu.sources + sudo dpkg --add-architecture arm64 + sudo apt update + sudo apt -y install libsdl2-dev:arm64 g++-aarch64-linux-gnu + - name: Install SDL2 + if: matrix.target == 'x86_64-unknown-linux-gnu' + run: | + sudo apt update + sudo apt -y install libsdl2-dev - name: Build run: | cargo build --release -v --target=${{ matrix.target }} diff --git a/build.rs b/build.rs index 726ecdb..5764fa7 100644 --- a/build.rs +++ b/build.rs @@ -143,6 +143,7 @@ fn main() { .allowlist_function("_mm_subs_epu16") .allowlist_function("_mm_set1_epi32") .blocklist_type("__m128i") + .blocklist_type("int64x2_t") .wrap_static_fns(true) .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) .generate() From f2812b04346c5ab7f340acf62c073ac7c746f8b9 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 12 Jan 2025 18:31:10 +0100 Subject: [PATCH 0180/1117] Bump to 0.1.17 (#130) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index cc13439..8a65b50 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.16" +version = "0.1.17" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From a013e72fda2d557c82d0f76d22a479010568b09e Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 12 Jan 2025 20:09:15 +0100 Subject: [PATCH 0181/1117] set aarch64 linker from env variable (#131) --- .cargo/config.toml | 3 --- .github/workflows/build.yml | 3 +++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 25c2c32..40eddf6 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -3,6 +3,3 @@ rustflags = ["-C", "target-cpu=x86-64-v3"] [target.'cfg(target_arch = "aarch64")'] rustflags = ["-C", "target-cpu=cortex-a76"] - -[target.aarch64-unknown-linux-gnu] -linker = "aarch64-linux-gnu-gcc" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 73e1f27..92d4134 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -67,6 +67,9 @@ jobs: run: | sudo apt update sudo apt -y install libsdl2-dev + - name: Set aarch64 linker + if: matrix.target == 'aarch64-unknown-linux-gnu' + run: echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV - name: Build run: | cargo build --release -v --target=${{ matrix.target }} From 8fd7688aa786c7b0d241deb77f551f42eec39cee Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sun, 12 Jan 2025 22:17:47 +0100 Subject: [PATCH 0182/1117] remove un-needed var --- build.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/build.rs b/build.rs index 5764fa7..f2410e9 100644 --- a/build.rs +++ b/build.rs @@ -55,7 +55,6 @@ fn main() { let os = std::env::var("CARGO_CFG_TARGET_OS").unwrap(); let arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap(); - let mut simd_header = ""; if os == "windows" { if arch == "x86_64" { build.flag("/arch:AVX2"); @@ -77,7 +76,6 @@ fn main() { build.flag("-march=armv8.2-a"); simd_build.flag("-march=armv8.2-a"); simd_build.file("src/compat/aarch64.c"); - simd_header = "src/compat/sse2neon.h"; } else { panic!("unknown arch") } @@ -107,7 +105,7 @@ fn main() { if arch == "aarch64" { let simd_bindings = bindgen::Builder::default() - .header(simd_header) + .header("src/compat/sse2neon.h") .allowlist_function("_mm_setzero_si128") .allowlist_function("_mm_set_epi8") .allowlist_function("_mm_movemask_epi8") From 21300ab7db8d4725bc2a43089af7f4854e2cd622 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2025 06:49:13 +0100 Subject: [PATCH 0183/1117] Update dirs requirement from 5.0 to 6.0 (#133) --- updated-dependencies: - dependency-name: dirs dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 8a65b50..75cab8b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -dirs = "5.0" +dirs = "6.0" zip = "2.1" governor = "0.8" sevenz-rust = "0.6" From 97e4921b6a61fc3e47c32e7e84c00a29d4cf6cdb Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 13 Jan 2025 09:13:14 +0100 Subject: [PATCH 0184/1117] Don't transmute values in RSP code (#132) * remove transmute * fix * more * more * fix --- build.rs | 3 +- src/compat/aarch64.c | 131 ++++++++ src/compat/aarch64.rs | 28 ++ src/device.rs | 2 +- src/device/rsp_cpu.rs | 2 +- src/device/rsp_su_instructions.rs | 92 +++++- src/device/rsp_vu_instructions.rs | 502 ++++++++---------------------- 7 files changed, 364 insertions(+), 396 deletions(-) diff --git a/build.rs b/build.rs index f2410e9..c204cc9 100644 --- a/build.rs +++ b/build.rs @@ -1,5 +1,6 @@ fn main() { println!("cargo::rerun-if-changed=parallel-rdp"); + println!("cargo::rerun-if-changed=src/compat"); let mut simd_build = cc::Build::new(); let mut build = cc::Build::new(); @@ -75,6 +76,7 @@ fn main() { } else if arch == "aarch64" { build.flag("-march=armv8.2-a"); simd_build.flag("-march=armv8.2-a"); + simd_build.flag("-DSSE2NEON_SUPPRESS_WARNINGS"); simd_build.file("src/compat/aarch64.c"); } else { panic!("unknown arch") @@ -117,7 +119,6 @@ fn main() { .allowlist_function("_mm_set1_epi8") .allowlist_function("_mm_mullo_epi16") .allowlist_function("_mm_cmpeq_epi16") - .allowlist_function("_mm_srli_epi16") .allowlist_function("_mm_add_epi16") .allowlist_function("_mm_slli_epi16") .allowlist_function("_mm_mulhi_epi16") diff --git a/src/compat/aarch64.c b/src/compat/aarch64.c index 6f0a517..4c4e13e 100644 --- a/src/compat/aarch64.c +++ b/src/compat/aarch64.c @@ -3,3 +3,134 @@ // Static wrappers __m128i _mm_srli_epi16__extern(__m128i __a, int __imm8) { return _mm_srli_epi16(__a, __imm8); } + +__m128i _mm_insert_epi8__extern(__m128i __a, int __i, const int __imm8) +{ + switch (__imm8) + { + case 0: + return _mm_insert_epi8(__a, __i, 0); + case 1: + return _mm_insert_epi8(__a, __i, 1); + case 2: + return _mm_insert_epi8(__a, __i, 2); + case 3: + return _mm_insert_epi8(__a, __i, 3); + case 4: + return _mm_insert_epi8(__a, __i, 4); + case 5: + return _mm_insert_epi8(__a, __i, 5); + case 6: + return _mm_insert_epi8(__a, __i, 6); + case 7: + return _mm_insert_epi8(__a, __i, 7); + case 8: + return _mm_insert_epi8(__a, __i, 8); + case 9: + return _mm_insert_epi8(__a, __i, 9); + case 10: + return _mm_insert_epi8(__a, __i, 10); + case 11: + return _mm_insert_epi8(__a, __i, 11); + case 12: + return _mm_insert_epi8(__a, __i, 12); + case 13: + return _mm_insert_epi8(__a, __i, 13); + case 14: + return _mm_insert_epi8(__a, __i, 14); + case 15: + return _mm_insert_epi8(__a, __i, 15); + default: + abort(); + } +} + +int _mm_extract_epi8__extern(__m128i __a, const int __imm8) +{ + switch (__imm8) + { + case 0: + return _mm_extract_epi8(__a, 0); + case 1: + return _mm_extract_epi8(__a, 1); + case 2: + return _mm_extract_epi8(__a, 2); + case 3: + return _mm_extract_epi8(__a, 3); + case 4: + return _mm_extract_epi8(__a, 4); + case 5: + return _mm_extract_epi8(__a, 5); + case 6: + return _mm_extract_epi8(__a, 6); + case 7: + return _mm_extract_epi8(__a, 7); + case 8: + return _mm_extract_epi8(__a, 8); + case 9: + return _mm_extract_epi8(__a, 9); + case 10: + return _mm_extract_epi8(__a, 10); + case 11: + return _mm_extract_epi8(__a, 11); + case 12: + return _mm_extract_epi8(__a, 12); + case 13: + return _mm_extract_epi8(__a, 13); + case 14: + return _mm_extract_epi8(__a, 14); + case 15: + return _mm_extract_epi8(__a, 15); + default: + abort(); + } +} +__m128i _mm_insert_epi16__extern(__m128i __a, int __i, const int __imm8) +{ + switch (__imm8) + { + case 0: + return _mm_insert_epi16(__a, __i, 0); + case 1: + return _mm_insert_epi16(__a, __i, 1); + case 2: + return _mm_insert_epi16(__a, __i, 2); + case 3: + return _mm_insert_epi16(__a, __i, 3); + case 4: + return _mm_insert_epi16(__a, __i, 4); + case 5: + return _mm_insert_epi16(__a, __i, 5); + case 6: + return _mm_insert_epi16(__a, __i, 6); + case 7: + return _mm_insert_epi16(__a, __i, 7); + default: + abort(); + } +} + +int _mm_extract_epi16__extern(__m128i __a, const int __imm8) +{ + switch (__imm8) + { + case 0: + return _mm_extract_epi16(__a, 0); + case 1: + return _mm_extract_epi16(__a, 1); + case 2: + return _mm_extract_epi16(__a, 2); + case 3: + return _mm_extract_epi16(__a, 3); + case 4: + return _mm_extract_epi16(__a, 4); + case 5: + return _mm_extract_epi16(__a, 5); + case 6: + return _mm_extract_epi16(__a, 6); + case 7: + return _mm_extract_epi16(__a, 7); + default: + abort(); + } +} diff --git a/src/compat/aarch64.rs b/src/compat/aarch64.rs index 102d9fe..87869d7 100644 --- a/src/compat/aarch64.rs +++ b/src/compat/aarch64.rs @@ -2,3 +2,31 @@ unsafe extern "C" { #[link_name = "_mm_srli_epi16__extern"] pub fn _mm_srli_epi16(__a: __m128i, __imm8: ::std::os::raw::c_int) -> __m128i; } + +unsafe extern "C" { + #[link_name = "_mm_insert_epi8__extern"] + pub fn _mm_insert_epi8( + __a: __m128i, + __i: ::std::os::raw::c_int, + __imm8: ::std::os::raw::c_int, + ) -> __m128i; +} + +unsafe extern "C" { + #[link_name = "_mm_extract_epi8__extern"] + pub fn _mm_extract_epi8(__a: __m128i, __imm8: ::std::os::raw::c_int) -> ::std::os::raw::c_int; +} + +unsafe extern "C" { + #[link_name = "_mm_insert_epi16__extern"] + pub fn _mm_insert_epi16( + __a: __m128i, + __i: ::std::os::raw::c_int, + __imm8: ::std::os::raw::c_int, + ) -> __m128i; +} + +unsafe extern "C" { + #[link_name = "_mm_extract_epi16__extern"] + pub fn _mm_extract_epi16(__a: __m128i, __imm8: ::std::os::raw::c_int) -> ::std::os::raw::c_int; +} diff --git a/src/device.rs b/src/device.rs index cab9254..7c5aa14 100644 --- a/src/device.rs +++ b/src/device.rs @@ -341,7 +341,7 @@ impl Device { sync_point: false, cycle_counter: 0, gpr: [0; 32], - vpr: [0; 32], + vpr: unsafe { [_mm_setzero_si128(); 32] }, reciprocals: [0; 512], inverse_square_roots: [0; 512], divdp: false, diff --git a/src/device/rsp_cpu.rs b/src/device/rsp_cpu.rs index 5539cee..3d41440 100644 --- a/src/device/rsp_cpu.rs +++ b/src/device/rsp_cpu.rs @@ -35,7 +35,7 @@ pub struct Cpu { pub cycle_counter: u64, pub shuffle: [__m128i; 16], pub gpr: [u32; 32], - pub vpr: [u128; 32], + pub vpr: [__m128i; 32], pub reciprocals: [u16; 512], pub inverse_square_roots: [u16; 512], pub vcol: __m128i, diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index ba9b802..2265464 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -2,6 +2,8 @@ use device::__m128i; #[cfg(target_arch = "aarch64")] include!(concat!(env!("OUT_DIR"), "/simd_bindings.rs")); +#[cfg(target_arch = "aarch64")] +include!("../compat/aarch64.rs"); use crate::device; #[cfg(target_arch = "x86_64")] use std::arch::x86_64::*; @@ -44,28 +46,84 @@ pub fn sign_extend_7bit_offset(offset: u8, shift_amount: u32) -> u32 { (((soffset) as i32) as u32) << shift_amount } -pub fn modify_vpr_byte(vpr: &mut u128, element: u8, value: u8) { - let pos = 15 - (element & 15); - let mask = 0xFF << (pos * 8); - *vpr &= !mask; - *vpr |= (value as u128) << (pos * 8); +pub fn modify_vpr_byte(vpr: &mut __m128i, element: u8, value: u8) { + unsafe { + *vpr = match element & 15 { + 0 => _mm_insert_epi8(*vpr, value as i32, 15), + 1 => _mm_insert_epi8(*vpr, value as i32, 14), + 2 => _mm_insert_epi8(*vpr, value as i32, 13), + 3 => _mm_insert_epi8(*vpr, value as i32, 12), + 4 => _mm_insert_epi8(*vpr, value as i32, 11), + 5 => _mm_insert_epi8(*vpr, value as i32, 10), + 6 => _mm_insert_epi8(*vpr, value as i32, 9), + 7 => _mm_insert_epi8(*vpr, value as i32, 8), + 8 => _mm_insert_epi8(*vpr, value as i32, 7), + 9 => _mm_insert_epi8(*vpr, value as i32, 6), + 10 => _mm_insert_epi8(*vpr, value as i32, 5), + 11 => _mm_insert_epi8(*vpr, value as i32, 4), + 12 => _mm_insert_epi8(*vpr, value as i32, 3), + 13 => _mm_insert_epi8(*vpr, value as i32, 2), + 14 => _mm_insert_epi8(*vpr, value as i32, 1), + 15 => _mm_insert_epi8(*vpr, value as i32, 0), + _ => unreachable!(), + }; + } } -pub fn get_vpr_byte(vpr: u128, element: u8) -> u8 { - let pos = 15 - (element & 15); - (vpr >> (pos * 8)) as u8 +pub fn get_vpr_byte(vpr: __m128i, element: u8) -> u8 { + unsafe { + match element & 15 { + 0 => _mm_extract_epi8(vpr, 15) as u8, + 1 => _mm_extract_epi8(vpr, 14) as u8, + 2 => _mm_extract_epi8(vpr, 13) as u8, + 3 => _mm_extract_epi8(vpr, 12) as u8, + 4 => _mm_extract_epi8(vpr, 11) as u8, + 5 => _mm_extract_epi8(vpr, 10) as u8, + 6 => _mm_extract_epi8(vpr, 9) as u8, + 7 => _mm_extract_epi8(vpr, 8) as u8, + 8 => _mm_extract_epi8(vpr, 7) as u8, + 9 => _mm_extract_epi8(vpr, 6) as u8, + 10 => _mm_extract_epi8(vpr, 5) as u8, + 11 => _mm_extract_epi8(vpr, 4) as u8, + 12 => _mm_extract_epi8(vpr, 3) as u8, + 13 => _mm_extract_epi8(vpr, 2) as u8, + 14 => _mm_extract_epi8(vpr, 1) as u8, + 15 => _mm_extract_epi8(vpr, 0) as u8, + _ => unreachable!(), + } + } } -pub fn modify_vpr_element(vpr: &mut u128, element: u8, value: u16) { - let pos = 7 - (element & 7); - let mask = 0xFFFF << (pos * 16); - *vpr &= !mask; - *vpr |= (value as u128) << (pos * 16); +pub fn modify_vpr_element(vpr: &mut __m128i, element: u8, value: u16) { + unsafe { + *vpr = match element & 7 { + 0 => _mm_insert_epi16(*vpr, value as i32, 7), + 1 => _mm_insert_epi16(*vpr, value as i32, 6), + 2 => _mm_insert_epi16(*vpr, value as i32, 5), + 3 => _mm_insert_epi16(*vpr, value as i32, 4), + 4 => _mm_insert_epi16(*vpr, value as i32, 3), + 5 => _mm_insert_epi16(*vpr, value as i32, 2), + 6 => _mm_insert_epi16(*vpr, value as i32, 1), + 7 => _mm_insert_epi16(*vpr, value as i32, 0), + _ => unreachable!(), + }; + } } -pub fn get_vpr_element(vpr: u128, element: u8) -> u16 { - let pos = 7 - (element & 7); - (vpr >> (pos * 16)) as u16 +pub fn get_vpr_element(vpr: __m128i, element: u8) -> u16 { + unsafe { + match element & 7 { + 0 => _mm_extract_epi16(vpr, 7) as u16, + 1 => _mm_extract_epi16(vpr, 6) as u16, + 2 => _mm_extract_epi16(vpr, 5) as u16, + 3 => _mm_extract_epi16(vpr, 4) as u16, + 4 => _mm_extract_epi16(vpr, 3) as u16, + 5 => _mm_extract_epi16(vpr, 2) as u16, + 6 => _mm_extract_epi16(vpr, 1) as u16, + 7 => _mm_extract_epi16(vpr, 0) as u16, + _ => unreachable!(), + } + } } pub fn j(device: &mut device::Device, opcode: u32) { @@ -745,7 +803,7 @@ pub fn lfv(device: &mut device::Device, opcode: u32) { address &= !7; let start = velement(opcode); let end = std::cmp::min(start + 8, 16); - let mut tmp: u128 = 0; + let mut tmp: __m128i = unsafe { _mm_setzero_si128() }; let mut offset: u8 = 0; while offset < 4 { modify_vpr_element( diff --git a/src/device/rsp_vu_instructions.rs b/src/device/rsp_vu_instructions.rs index 3cb5504..85e44ed 100644 --- a/src/device/rsp_vu_instructions.rs +++ b/src/device/rsp_vu_instructions.rs @@ -46,7 +46,7 @@ pub fn s_clip(x: i64, bits: u32) -> i64 { pub fn vte(device: &device::Device, vt: u32, index: usize) -> __m128i { unsafe { _mm_shuffle_epi8( - std::mem::transmute::(device.rsp.cpu.vpr[vt as usize]), + device.rsp.cpu.vpr[vt as usize], device.rsp.cpu.shuffle[index], ) } @@ -56,33 +56,23 @@ pub fn vmulf(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut lo, mut hi, mut round, mut sign1, sign2, neq, eq, neg); unsafe { - lo = _mm_mullo_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + lo = _mm_mullo_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); round = _mm_cmpeq_epi16(_mm_setzero_si128(), _mm_setzero_si128()); sign1 = _mm_srli_epi16(lo, 15); lo = _mm_add_epi16(lo, lo); round = _mm_slli_epi16(round, 15); - hi = _mm_mulhi_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + hi = _mm_mulhi_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); sign2 = _mm_srli_epi16(lo, 15); device.rsp.cpu.accl = _mm_add_epi16(round, lo); sign1 = _mm_add_epi16(sign1, sign2); hi = _mm_slli_epi16(hi, 1); - neq = _mm_cmpeq_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + neq = _mm_cmpeq_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); device.rsp.cpu.accm = _mm_add_epi16(hi, sign1); neg = _mm_srai_epi16(device.rsp.cpu.accm, 15); eq = _mm_and_si128(neq, neg); device.rsp.cpu.acch = _mm_andnot_si128(neq, neg); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(_mm_add_epi16(device.rsp.cpu.accm, eq)); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_add_epi16(device.rsp.cpu.accm, eq); } } @@ -90,43 +80,31 @@ pub fn vmulu(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut lo, mut hi, mut round, mut sign1, sign2, neq, neg); unsafe { - lo = _mm_mullo_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + lo = _mm_mullo_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); round = _mm_cmpeq_epi16(_mm_setzero_si128(), _mm_setzero_si128()); sign1 = _mm_srli_epi16(lo, 15); lo = _mm_add_epi16(lo, lo); round = _mm_slli_epi16(round, 15); - hi = _mm_mulhi_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + hi = _mm_mulhi_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); sign2 = _mm_srli_epi16(lo, 15); device.rsp.cpu.accl = _mm_add_epi16(round, lo); sign1 = _mm_add_epi16(sign1, sign2); hi = _mm_slli_epi16(hi, 1); - neq = _mm_cmpeq_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + neq = _mm_cmpeq_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); device.rsp.cpu.accm = _mm_add_epi16(hi, sign1); neg = _mm_srai_epi16(device.rsp.cpu.accm, 15); device.rsp.cpu.acch = _mm_andnot_si128(neq, neg); hi = _mm_or_si128(device.rsp.cpu.accm, neg); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(_mm_andnot_si128(device.rsp.cpu.acch, hi)); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_andnot_si128(device.rsp.cpu.acch, hi); } } pub fn vrndp(device: &mut device::Device, opcode: u32) { - let vte = unsafe { - std::mem::transmute::<__m128i, u128>(vte(device, vt(opcode), ve(opcode) as usize)) - }; - let acch: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.acch) }; - let accm: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accm) }; - let accl: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accl) }; + let vte = vte(device, vt(opcode), ve(opcode) as usize); + let acch: &mut __m128i = &mut device.rsp.cpu.acch; + let accm: &mut __m128i = &mut device.rsp.cpu.accm; + let accl: &mut __m128i = &mut device.rsp.cpu.accl; for n in 0..8 { let mut product = get_vpr_element(vte, n) as i16 as i32; @@ -156,12 +134,10 @@ pub fn vrndp(device: &mut device::Device, opcode: u32) { } pub fn vmulq(device: &mut device::Device, opcode: u32) { - let vte = unsafe { - std::mem::transmute::<__m128i, u128>(vte(device, vt(opcode), ve(opcode) as usize)) - }; - let acch: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.acch) }; - let accm: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accm) }; - let accl: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accl) }; + let vte = vte(device, vt(opcode), ve(opcode) as usize); + let acch: &mut __m128i = &mut device.rsp.cpu.acch; + let accm: &mut __m128i = &mut device.rsp.cpu.accm; + let accl: &mut __m128i = &mut device.rsp.cpu.accl; for n in 0..8 { let mut product = (get_vpr_element(device.rsp.cpu.vpr[vs(opcode) as usize], n) as i16 @@ -184,14 +160,10 @@ pub fn vmulq(device: &mut device::Device, opcode: u32) { pub fn vmudl(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { - device.rsp.cpu.accl = _mm_mulhi_epu16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + device.rsp.cpu.accl = _mm_mulhi_epu16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); device.rsp.cpu.accm = _mm_setzero_si128(); device.rsp.cpu.acch = _mm_setzero_si128(); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } @@ -199,23 +171,13 @@ pub fn vmudm(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let (sign, vta); unsafe { - device.rsp.cpu.accl = _mm_mullo_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); - device.rsp.cpu.accm = _mm_mulhi_epu16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); - sign = _mm_srai_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - 15, - ); + device.rsp.cpu.accl = _mm_mullo_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + device.rsp.cpu.accm = _mm_mulhi_epu16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + sign = _mm_srai_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], 15); vta = _mm_and_si128(vte, sign); device.rsp.cpu.accm = _mm_sub_epi16(device.rsp.cpu.accm, vta); device.rsp.cpu.acch = _mm_srai_epi16(device.rsp.cpu.accm, 15); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accm); + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accm; } } @@ -223,23 +185,13 @@ pub fn vmudn(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let (sign, vsa); unsafe { - device.rsp.cpu.accl = _mm_mullo_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); - device.rsp.cpu.accm = _mm_mulhi_epu16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + device.rsp.cpu.accl = _mm_mullo_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + device.rsp.cpu.accm = _mm_mulhi_epu16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); sign = _mm_srai_epi16(vte, 15); - vsa = _mm_and_si128( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - sign, - ); + vsa = _mm_and_si128(device.rsp.cpu.vpr[vs(opcode) as usize], sign); device.rsp.cpu.accm = _mm_sub_epi16(device.rsp.cpu.accm, vsa); device.rsp.cpu.acch = _mm_srai_epi16(device.rsp.cpu.accm, 15); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } @@ -248,18 +200,11 @@ pub fn vmudh(device: &mut device::Device, opcode: u32) { let (lo, hi); unsafe { device.rsp.cpu.accl = _mm_setzero_si128(); - device.rsp.cpu.accm = _mm_mullo_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); - device.rsp.cpu.acch = _mm_mulhi_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + device.rsp.cpu.accm = _mm_mullo_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + device.rsp.cpu.acch = _mm_mulhi_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); lo = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); hi = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(_mm_packs_epi32(lo, hi)); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_packs_epi32(lo, hi); } } @@ -267,14 +212,8 @@ pub fn vmacf(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut lo, mut md, mut hi, mut carry, mut omask); unsafe { - lo = _mm_mullo_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); - hi = _mm_mulhi_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + lo = _mm_mullo_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + hi = _mm_mulhi_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); md = _mm_slli_epi16(hi, 1); carry = _mm_srli_epi16(lo, 15); hi = _mm_srai_epi16(hi, 15); @@ -297,8 +236,7 @@ pub fn vmacf(device: &mut device::Device, opcode: u32) { lo = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); hi = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(_mm_packs_epi32(lo, hi)); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_packs_epi32(lo, hi); } } @@ -306,14 +244,8 @@ pub fn vmacu(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut lo, mut md, mut hi, mut carry, mut omask, mmask, hmask); unsafe { - lo = _mm_mullo_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); - hi = _mm_mulhi_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + lo = _mm_mullo_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + hi = _mm_mulhi_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); md = _mm_slli_epi16(hi, 1); carry = _mm_srli_epi16(lo, 15); hi = _mm_srai_epi16(hi, 15); @@ -339,18 +271,15 @@ pub fn vmacu(device: &mut device::Device, opcode: u32) { md = _mm_or_si128(mmask, device.rsp.cpu.accm); omask = _mm_cmpgt_epi16(device.rsp.cpu.acch, _mm_setzero_si128()); md = _mm_andnot_si128(hmask, md); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(_mm_or_si128(omask, md)); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_or_si128(omask, md); } } pub fn vrndn(device: &mut device::Device, opcode: u32) { - let vte = unsafe { - std::mem::transmute::<__m128i, u128>(vte(device, vt(opcode), ve(opcode) as usize)) - }; - let acch: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.acch) }; - let accm: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accm) }; - let accl: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accl) }; + let vte = vte(device, vt(opcode), ve(opcode) as usize); + let acch: &mut __m128i = &mut device.rsp.cpu.acch; + let accm: &mut __m128i = &mut device.rsp.cpu.accm; + let accl: &mut __m128i = &mut device.rsp.cpu.accl; for n in 0..8 { let mut product = get_vpr_element(vte, n) as i16 as i32; @@ -380,8 +309,8 @@ pub fn vrndn(device: &mut device::Device, opcode: u32) { } pub fn vmacq(device: &mut device::Device, opcode: u32) { - let acch: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.acch) }; - let accm: &mut u128 = unsafe { std::mem::transmute(&mut device.rsp.cpu.accm) }; + let acch: &mut __m128i = &mut device.rsp.cpu.acch; + let accm: &mut __m128i = &mut device.rsp.cpu.accm; for n in 0..8 { let mut product = @@ -405,10 +334,7 @@ pub fn vmadl(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut hi, mut omask, nhi, nmd, shi, smd, cmask, cval); unsafe { - hi = _mm_mulhi_epu16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + hi = _mm_mulhi_epu16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); omask = _mm_adds_epu16(device.rsp.cpu.accl, hi); device.rsp.cpu.accl = _mm_add_epi16(device.rsp.cpu.accl, hi); omask = _mm_cmpeq_epi16(device.rsp.cpu.accl, omask); @@ -425,8 +351,7 @@ pub fn vmadl(device: &mut device::Device, opcode: u32) { smd = _mm_cmpeq_epi16(nhi, nmd); cmask = _mm_and_si128(smd, shi); cval = _mm_cmpeq_epi16(nhi, _mm_setzero_si128()); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(_mm_blendv_epi8(cval, device.rsp.cpu.accl, cmask)); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_blendv_epi8(cval, device.rsp.cpu.accl, cmask); } } @@ -434,18 +359,9 @@ pub fn vmadm(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut lo, mut hi, sign, vta, mut omask); unsafe { - lo = _mm_mullo_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); - hi = _mm_mulhi_epu16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); - sign = _mm_srai_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - 15, - ); + lo = _mm_mullo_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + hi = _mm_mulhi_epu16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + sign = _mm_srai_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], 15); vta = _mm_and_si128(vte, sign); hi = _mm_sub_epi16(hi, vta); omask = _mm_adds_epu16(device.rsp.cpu.accl, lo); @@ -462,8 +378,7 @@ pub fn vmadm(device: &mut device::Device, opcode: u32) { device.rsp.cpu.acch = _mm_sub_epi16(device.rsp.cpu.acch, omask); lo = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); hi = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(_mm_packs_epi32(lo, hi)); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_packs_epi32(lo, hi); } } @@ -471,19 +386,10 @@ pub fn vmadn(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let (lo, mut hi, sign, vsa, mut omask, nhi, nmd, shi, smd, cmask, cval); unsafe { - lo = _mm_mullo_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); - hi = _mm_mulhi_epu16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + lo = _mm_mullo_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + hi = _mm_mulhi_epu16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); sign = _mm_srai_epi16(vte, 15); - vsa = _mm_and_si128( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - sign, - ); + vsa = _mm_and_si128(device.rsp.cpu.vpr[vs(opcode) as usize], sign); hi = _mm_sub_epi16(hi, vsa); omask = _mm_adds_epu16(device.rsp.cpu.accl, lo); device.rsp.cpu.accl = _mm_add_epi16(device.rsp.cpu.accl, lo); @@ -503,8 +409,7 @@ pub fn vmadn(device: &mut device::Device, opcode: u32) { smd = _mm_cmpeq_epi16(nhi, nmd); cmask = _mm_and_si128(smd, shi); cval = _mm_cmpeq_epi16(nhi, _mm_setzero_si128()); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(_mm_blendv_epi8(cval, device.rsp.cpu.accl, cmask)); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_blendv_epi8(cval, device.rsp.cpu.accl, cmask); } } @@ -512,14 +417,8 @@ pub fn vmadh(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut lo, mut hi, mut omask); unsafe { - lo = _mm_mullo_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); - hi = _mm_mulhi_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + lo = _mm_mullo_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + hi = _mm_mulhi_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); omask = _mm_adds_epu16(device.rsp.cpu.accm, lo); device.rsp.cpu.accm = _mm_add_epi16(device.rsp.cpu.accm, lo); omask = _mm_cmpeq_epi16(device.rsp.cpu.accm, omask); @@ -528,8 +427,7 @@ pub fn vmadh(device: &mut device::Device, opcode: u32) { device.rsp.cpu.acch = _mm_add_epi16(device.rsp.cpu.acch, hi); lo = _mm_unpacklo_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); hi = _mm_unpackhi_epi16(device.rsp.cpu.accm, device.rsp.cpu.acch); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(_mm_packs_epi32(lo, hi)); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_packs_epi32(lo, hi); } } @@ -537,22 +435,12 @@ pub fn vadd(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let (sum, mut min, max); unsafe { - sum = _mm_add_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + sum = _mm_add_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); device.rsp.cpu.accl = _mm_sub_epi16(sum, device.rsp.cpu.vcol); - min = _mm_min_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); - max = _mm_max_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + min = _mm_min_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + max = _mm_max_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); min = _mm_subs_epi16(min, device.rsp.cpu.vcol); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(_mm_adds_epi16(min, max)); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_adds_epi16(min, max); device.rsp.cpu.vcol = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); } @@ -564,21 +452,12 @@ pub fn vsub(device: &mut device::Device, opcode: u32) { unsafe { udiff = _mm_sub_epi16(vte, device.rsp.cpu.vcol); sdiff = _mm_subs_epi16(vte, device.rsp.cpu.vcol); - device.rsp.cpu.accl = _mm_sub_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - udiff, - ); + device.rsp.cpu.accl = _mm_sub_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], udiff); ov = _mm_cmpgt_epi16(sdiff, udiff); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(_mm_subs_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - sdiff, - )); + _mm_subs_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], sdiff); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(_mm_adds_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vd(opcode) as usize]), - ov, - )); + _mm_adds_epi16(device.rsp.cpu.vpr[vd(opcode) as usize], ov); device.rsp.cpu.vcol = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); } @@ -587,15 +466,11 @@ pub fn vsub(device: &mut device::Device, opcode: u32) { pub fn vzero(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { - device.rsp.cpu.accl = _mm_add_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, + device.rsp.cpu.accl = _mm_add_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_xor_si128( + device.rsp.cpu.vpr[vd(opcode) as usize], + device.rsp.cpu.vpr[vd(opcode) as usize], ); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(_mm_xor_si128( - std::mem::transmute::(device.rsp.cpu.vpr[vd(opcode) as usize]), - std::mem::transmute::(device.rsp.cpu.vpr[vd(opcode) as usize]), - )); } } @@ -603,30 +478,14 @@ pub fn vabs(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let (vs0, slt); unsafe { - vs0 = _mm_cmpeq_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - _mm_setzero_si128(), - ); - slt = _mm_srai_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - 15, - ); + vs0 = _mm_cmpeq_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], _mm_setzero_si128()); + slt = _mm_srai_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], 15); + device.rsp.cpu.vpr[vd(opcode) as usize] = _mm_andnot_si128(vs0, vte); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(_mm_andnot_si128(vs0, vte)); + _mm_xor_si128(device.rsp.cpu.vpr[vd(opcode) as usize], slt); + device.rsp.cpu.accl = _mm_sub_epi16(device.rsp.cpu.vpr[vd(opcode) as usize], slt); device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(_mm_xor_si128( - std::mem::transmute::(device.rsp.cpu.vpr[vd(opcode) as usize]), - slt, - )); - device.rsp.cpu.accl = _mm_sub_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vd(opcode) as usize]), - slt, - ); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(_mm_subs_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vd(opcode) as usize]), - slt, - )); + _mm_subs_epi16(device.rsp.cpu.vpr[vd(opcode) as usize], slt); } } @@ -634,19 +493,12 @@ pub fn vaddc(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let sum; unsafe { - sum = _mm_adds_epu16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); - device.rsp.cpu.accl = _mm_add_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + sum = _mm_adds_epu16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + device.rsp.cpu.accl = _mm_add_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); device.rsp.cpu.vcol = _mm_cmpeq_epi16(sum, device.rsp.cpu.accl); device.rsp.cpu.vcol = _mm_cmpeq_epi16(device.rsp.cpu.vcol, _mm_setzero_si128()); device.rsp.cpu.vcoh = _mm_setzero_si128(); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } @@ -654,42 +506,29 @@ pub fn vsubc(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let (equal, udiff, diff0); unsafe { - udiff = _mm_subs_epu16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); - equal = _mm_cmpeq_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + udiff = _mm_subs_epu16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + equal = _mm_cmpeq_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); diff0 = _mm_cmpeq_epi16(udiff, _mm_setzero_si128()); device.rsp.cpu.vcoh = _mm_cmpeq_epi16(equal, _mm_setzero_si128()); device.rsp.cpu.vcol = _mm_andnot_si128(equal, diff0); - device.rsp.cpu.accl = _mm_sub_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); + device.rsp.cpu.accl = _mm_sub_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } pub fn vsar(device: &mut device::Device, opcode: u32) { match ve(opcode) { 0x8 => { - device.rsp.cpu.vpr[vd(opcode) as usize] = - unsafe { std::mem::transmute::<__m128i, u128>(device.rsp.cpu.acch) }; + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.acch; } 0x9 => { - device.rsp.cpu.vpr[vd(opcode) as usize] = - unsafe { std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accm) }; + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accm; } 0xa => { - device.rsp.cpu.vpr[vd(opcode) as usize] = - unsafe { std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl) }; + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } _ => { - device.rsp.cpu.vpr[vd(opcode) as usize] = 0; + device.rsp.cpu.vpr[vd(opcode) as usize] = unsafe { _mm_setzero_si128() }; } } } @@ -698,27 +537,20 @@ pub fn vlt(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut eq, lt); unsafe { - eq = _mm_cmpeq_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); - lt = _mm_cmplt_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + eq = _mm_cmpeq_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + lt = _mm_cmplt_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); eq = _mm_and_si128(device.rsp.cpu.vcoh, eq); eq = _mm_and_si128(device.rsp.cpu.vcol, eq); device.rsp.cpu.vccl = _mm_or_si128(lt, eq); device.rsp.cpu.accl = _mm_blendv_epi8( vte, - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), + device.rsp.cpu.vpr[vs(opcode) as usize], device.rsp.cpu.vccl, ); device.rsp.cpu.vcch = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } @@ -726,21 +558,17 @@ pub fn veq(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let eq; unsafe { - eq = _mm_cmpeq_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + eq = _mm_cmpeq_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); device.rsp.cpu.vccl = _mm_andnot_si128(device.rsp.cpu.vcoh, eq); device.rsp.cpu.accl = _mm_blendv_epi8( vte, - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), + device.rsp.cpu.vpr[vs(opcode) as usize], device.rsp.cpu.vccl, ); device.rsp.cpu.vcch = _mm_setzero_si128(); //unverified device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } @@ -748,23 +576,19 @@ pub fn vne(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let (eq, ne); unsafe { - eq = _mm_cmpeq_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + eq = _mm_cmpeq_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); ne = _mm_cmpeq_epi16(eq, _mm_setzero_si128()); device.rsp.cpu.vccl = _mm_and_si128(device.rsp.cpu.vcoh, eq); device.rsp.cpu.vccl = _mm_or_si128(device.rsp.cpu.vccl, ne); device.rsp.cpu.accl = _mm_blendv_epi8( vte, - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), + device.rsp.cpu.vpr[vs(opcode) as usize], device.rsp.cpu.vccl, ); device.rsp.cpu.vcch = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } @@ -772,27 +596,20 @@ pub fn vge(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut eq, gt, es); unsafe { - eq = _mm_cmpeq_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); - gt = _mm_cmpgt_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + eq = _mm_cmpeq_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + gt = _mm_cmpgt_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); es = _mm_and_si128(device.rsp.cpu.vcoh, device.rsp.cpu.vcol); eq = _mm_andnot_si128(es, eq); device.rsp.cpu.vccl = _mm_or_si128(gt, eq); device.rsp.cpu.accl = _mm_blendv_epi8( vte, - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), + device.rsp.cpu.vpr[vs(opcode) as usize], device.rsp.cpu.vccl, ); device.rsp.cpu.vcch = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } @@ -815,14 +632,8 @@ pub fn vcl(device: &mut device::Device, opcode: u32) { unsafe { nvt = _mm_xor_si128(vte, device.rsp.cpu.vcol); nvt = _mm_sub_epi16(nvt, device.rsp.cpu.vcol); - diff = _mm_sub_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - nvt, - ); - ncarry = _mm_adds_epu16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + diff = _mm_sub_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], nvt); + ncarry = _mm_adds_epu16(device.rsp.cpu.vpr[vs(opcode) as usize], vte); ncarry = _mm_cmpeq_epi16(diff, ncarry); nvce = _mm_cmpeq_epi16(device.rsp.cpu.vce, _mm_setzero_si128()); diff0 = _mm_cmpeq_epi16(diff, _mm_setzero_si128()); @@ -831,28 +642,20 @@ pub fn vcl(device: &mut device::Device, opcode: u32) { lec2 = _mm_or_si128(diff0, ncarry); lec2 = _mm_and_si128(device.rsp.cpu.vce, lec2); leeq = _mm_or_si128(lec1, lec2); - geeq = _mm_subs_epu16( - vte, - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - ); + geeq = _mm_subs_epu16(vte, device.rsp.cpu.vpr[vs(opcode) as usize]); geeq = _mm_cmpeq_epi16(geeq, _mm_setzero_si128()); le = _mm_andnot_si128(device.rsp.cpu.vcoh, device.rsp.cpu.vcol); le = _mm_blendv_epi8(device.rsp.cpu.vccl, leeq, le); ge = _mm_or_si128(device.rsp.cpu.vcol, device.rsp.cpu.vcoh); ge = _mm_blendv_epi8(geeq, device.rsp.cpu.vcch, ge); mask = _mm_blendv_epi8(ge, le, device.rsp.cpu.vcol); - device.rsp.cpu.accl = _mm_blendv_epi8( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - nvt, - mask, - ); + device.rsp.cpu.accl = _mm_blendv_epi8(device.rsp.cpu.vpr[vs(opcode) as usize], nvt, mask); device.rsp.cpu.vcch = ge; device.rsp.cpu.vccl = le; device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); device.rsp.cpu.vce = _mm_setzero_si128(); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } @@ -860,17 +663,11 @@ pub fn vch(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut nvt, diff, diff0, vtn, mut dlez, dgez, mask); unsafe { - device.rsp.cpu.vcol = _mm_xor_si128( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + device.rsp.cpu.vcol = _mm_xor_si128(device.rsp.cpu.vpr[vs(opcode) as usize], vte); device.rsp.cpu.vcol = _mm_cmplt_epi16(device.rsp.cpu.vcol, _mm_setzero_si128()); nvt = _mm_xor_si128(vte, device.rsp.cpu.vcol); nvt = _mm_sub_epi16(nvt, device.rsp.cpu.vcol); - diff = _mm_sub_epi16( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - nvt, - ); + diff = _mm_sub_epi16(device.rsp.cpu.vpr[vs(opcode) as usize], nvt); diff0 = _mm_cmpeq_epi16(diff, _mm_setzero_si128()); vtn = _mm_cmplt_epi16(vte, _mm_setzero_si128()); dlez = _mm_cmpgt_epi16(diff, _mm_setzero_si128()); @@ -887,13 +684,8 @@ pub fn vch(device: &mut device::Device, opcode: u32) { device.rsp.cpu.vccl, device.rsp.cpu.vcol, ); - device.rsp.cpu.accl = _mm_blendv_epi8( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - nvt, - mask, - ); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); + device.rsp.cpu.accl = _mm_blendv_epi8(device.rsp.cpu.vpr[vs(opcode) as usize], nvt, mask); + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } @@ -901,32 +693,18 @@ pub fn vcr(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let (mut sign, mut dlez, mut dgez, nvt, mask); unsafe { - sign = _mm_xor_si128( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + sign = _mm_xor_si128(device.rsp.cpu.vpr[vs(opcode) as usize], vte); sign = _mm_srai_epi16(sign, 15); - dlez = _mm_and_si128( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - sign, - ); + dlez = _mm_and_si128(device.rsp.cpu.vpr[vs(opcode) as usize], sign); dlez = _mm_add_epi16(dlez, vte); device.rsp.cpu.vccl = _mm_srai_epi16(dlez, 15); - dgez = _mm_or_si128( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - sign, - ); + dgez = _mm_or_si128(device.rsp.cpu.vpr[vs(opcode) as usize], sign); dgez = _mm_min_epi16(dgez, vte); device.rsp.cpu.vcch = _mm_cmpeq_epi16(dgez, vte); nvt = _mm_xor_si128(vte, sign); mask = _mm_blendv_epi8(device.rsp.cpu.vcch, device.rsp.cpu.vccl, sign); - device.rsp.cpu.accl = _mm_blendv_epi8( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - nvt, - mask, - ); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); + device.rsp.cpu.accl = _mm_blendv_epi8(device.rsp.cpu.vpr[vs(opcode) as usize], nvt, mask); + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; device.rsp.cpu.vcol = _mm_setzero_si128(); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vce = _mm_setzero_si128(); @@ -938,88 +716,63 @@ pub fn vmrg(device: &mut device::Device, opcode: u32) { unsafe { device.rsp.cpu.accl = _mm_blendv_epi8( vte, - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), + device.rsp.cpu.vpr[vs(opcode) as usize], device.rsp.cpu.vccl, ); device.rsp.cpu.vcoh = _mm_setzero_si128(); device.rsp.cpu.vcol = _mm_setzero_si128(); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } pub fn vand(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { - device.rsp.cpu.accl = _mm_and_si128( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); + device.rsp.cpu.accl = _mm_and_si128(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } pub fn vnand(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { - device.rsp.cpu.accl = _mm_and_si128( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + device.rsp.cpu.accl = _mm_and_si128(device.rsp.cpu.vpr[vs(opcode) as usize], vte); device.rsp.cpu.accl = _mm_xor_si128(device.rsp.cpu.accl, _mm_set1_epi32(-1)); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } pub fn vor(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { - device.rsp.cpu.accl = _mm_or_si128( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); + device.rsp.cpu.accl = _mm_or_si128(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } pub fn vnor(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { - device.rsp.cpu.accl = _mm_or_si128( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + device.rsp.cpu.accl = _mm_or_si128(device.rsp.cpu.vpr[vs(opcode) as usize], vte); device.rsp.cpu.accl = _mm_xor_si128(device.rsp.cpu.accl, _mm_set1_epi32(-1)); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } pub fn vxor(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { - device.rsp.cpu.accl = _mm_xor_si128( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); + device.rsp.cpu.accl = _mm_xor_si128(device.rsp.cpu.vpr[vs(opcode) as usize], vte); + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } pub fn vnxor(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); unsafe { - device.rsp.cpu.accl = _mm_xor_si128( - std::mem::transmute::(device.rsp.cpu.vpr[vs(opcode) as usize]), - vte, - ); + device.rsp.cpu.accl = _mm_xor_si128(device.rsp.cpu.vpr[vs(opcode) as usize], vte); device.rsp.cpu.accl = _mm_xor_si128(device.rsp.cpu.accl, _mm_set1_epi32(-1)); - device.rsp.cpu.vpr[vd(opcode) as usize] = - std::mem::transmute::<__m128i, u128>(device.rsp.cpu.accl); + device.rsp.cpu.vpr[vd(opcode) as usize] = device.rsp.cpu.accl; } } @@ -1106,10 +859,7 @@ pub fn vrcph(device: &mut device::Device, opcode: u32) { pub fn vmov(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let value = get_vpr_element( - unsafe { std::mem::transmute::<__m128i, u128>(vte) }, - de(opcode) as u8, - ); + let value = get_vpr_element(vte, de(opcode) as u8); modify_vpr_element( &mut device.rsp.cpu.vpr[vd(opcode) as usize], de(opcode) as u8, From f75636f7e5be0fc6e2f7f602c5767a6cfedf81c3 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 13 Jan 2025 10:16:27 +0100 Subject: [PATCH 0185/1117] Cleanup unsafe functions (#134) * cleanup unsafe blocks * comment out flush mode stuff * remove unsafe from input --- src/compat/aarch64.rs | 8 -- src/device.rs | 4 +- src/device/cop1.rs | 37 ++++---- src/ui/config.rs | 2 +- src/ui/input.rs | 206 +++++++++++++++++++++--------------------- 5 files changed, 125 insertions(+), 132 deletions(-) diff --git a/src/compat/aarch64.rs b/src/compat/aarch64.rs index 87869d7..fb8257a 100644 --- a/src/compat/aarch64.rs +++ b/src/compat/aarch64.rs @@ -1,32 +1,24 @@ unsafe extern "C" { #[link_name = "_mm_srli_epi16__extern"] pub fn _mm_srli_epi16(__a: __m128i, __imm8: ::std::os::raw::c_int) -> __m128i; -} -unsafe extern "C" { #[link_name = "_mm_insert_epi8__extern"] pub fn _mm_insert_epi8( __a: __m128i, __i: ::std::os::raw::c_int, __imm8: ::std::os::raw::c_int, ) -> __m128i; -} -unsafe extern "C" { #[link_name = "_mm_extract_epi8__extern"] pub fn _mm_extract_epi8(__a: __m128i, __imm8: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -unsafe extern "C" { #[link_name = "_mm_insert_epi16__extern"] pub fn _mm_insert_epi16( __a: __m128i, __i: ::std::os::raw::c_int, __imm8: ::std::os::raw::c_int, ) -> __m128i; -} -unsafe extern "C" { #[link_name = "_mm_extract_epi16__extern"] pub fn _mm_extract_epi16(__a: __m128i, __imm8: ::std::os::raw::c_int) -> ::std::os::raw::c_int; } diff --git a/src/device.rs b/src/device.rs index 7c5aa14..8751a38 100644 --- a/src/device.rs +++ b/src/device.rs @@ -240,8 +240,8 @@ impl Device { cop1: cop1::Cop1 { fcr0: 0, fcr31: 0, - #[cfg(target_arch = "x86_64")] - flush_mode: 0, + //#[cfg(target_arch = "x86_64")] + //flush_mode: 0, fgr32: [[0; 4]; 32], fgr64: [[0; 8]; 32], instrs: [cop1::reserved; 32], diff --git a/src/device/cop1.rs b/src/device/cop1.rs index 387f0ae..01239ea 100644 --- a/src/device/cop1.rs +++ b/src/device/cop1.rs @@ -17,8 +17,8 @@ use crate::device; //const FCR31_CAUSE_INVALID_BIT: u32 = 1 << 16; const FCR31_CAUSE_UNIMP_BIT: u32 = 1 << 17; pub const FCR31_CMP_BIT: u32 = 1 << 23; -#[cfg(target_arch = "x86_64")] -const FCR31_FS_BIT: u32 = 1 << 24; +//#[cfg(target_arch = "x86_64")] +//const FCR31_FS_BIT: u32 = 1 << 24; const FCR31_CAUSE_MASK: u32 = 0b00000000000000111111000000000000; const FCR31_ENABLE_MASK: u32 = 0b00000000000000000000111110000000; @@ -27,8 +27,8 @@ const FCR31_WRITE_MASK: u32 = 0b00000001100000111111111111111111; pub struct Cop1 { pub fcr0: u32, pub fcr31: u32, - #[cfg(target_arch = "x86_64")] - pub flush_mode: u32, + //#[cfg(target_arch = "x86_64")] + //pub flush_mode: u32, pub fgr32: [[u8; 4]; 32], pub fgr64: [[u8; 8]; 32], pub instrs: [fn(&mut device::Device, u32); 32], @@ -368,27 +368,28 @@ pub fn set_control_registers_fpu(device: &mut device::Device, index: u32, data: { device::exceptions::floating_point_exception(device) } - + /* #[cfg(target_arch = "x86_64")] { - unsafe { - let flush_mode; - if (device.cpu.cop1.fcr31 & 2) != 0 { - if (device.cpu.cop1.fcr31 & FCR31_FS_BIT) != 0 { - flush_mode = std::arch::x86_64::_MM_FLUSH_ZERO_OFF - } else { - flush_mode = std::arch::x86_64::_MM_FLUSH_ZERO_ON; - } + let flush_mode; + if (device.cpu.cop1.fcr31 & 2) != 0 { + if (device.cpu.cop1.fcr31 & FCR31_FS_BIT) != 0 { + flush_mode = std::arch::x86_64::_MM_FLUSH_ZERO_OFF } else { flush_mode = std::arch::x86_64::_MM_FLUSH_ZERO_ON; } - if flush_mode != device.cpu.cop1.flush_mode { - #[allow(deprecated)] - std::arch::x86_64::_MM_SET_FLUSH_ZERO_MODE(flush_mode); - device.cpu.cop1.flush_mode = flush_mode; - } + } else { + flush_mode = std::arch::x86_64::_MM_FLUSH_ZERO_ON; + } + if flush_mode != device.cpu.cop1.flush_mode { + #[allow(deprecated)] + unsafe { + std::arch::x86_64::_MM_SET_FLUSH_ZERO_MODE(flush_mode) + }; + device.cpu.cop1.flush_mode = flush_mode; } } + */ } _ => { panic!("unknown FCR register") diff --git a/src/ui/config.rs b/src/ui/config.rs index ff28747..6e51b8d 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -6,7 +6,7 @@ pub struct InputProfile { pub controller_buttons: [(bool, i32); 14], pub controller_axis: [(bool, i32, i16); 18], pub joystick_buttons: [(bool, u32); 14], - pub joystick_hat: [(bool, u32, i8); 14], + pub joystick_hat: [(bool, u32, u8); 14], pub joystick_axis: [(bool, u32, i16); 18], } diff --git a/src/ui/input.rs b/src/ui/input.rs index b17879b..9bb91ed 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -78,94 +78,110 @@ pub fn set_axis_from_joystick( (x, y) } +fn get_axis_from_i32(axis: i32) -> sdl2::controller::Axis { + match axis { + 0 => sdl2::controller::Axis::LeftX, + 1 => sdl2::controller::Axis::LeftY, + 2 => sdl2::controller::Axis::RightX, + 3 => sdl2::controller::Axis::RightY, + 4 => sdl2::controller::Axis::TriggerLeft, + 5 => sdl2::controller::Axis::TriggerRight, + _ => panic!("Invalid axis"), + } +} + +fn get_button_from_i32(button: i32) -> sdl2::controller::Button { + match button { + 0 => sdl2::controller::Button::A, + 1 => sdl2::controller::Button::B, + 2 => sdl2::controller::Button::X, + 3 => sdl2::controller::Button::Y, + 4 => sdl2::controller::Button::Back, + 5 => sdl2::controller::Button::Guide, + 6 => sdl2::controller::Button::Start, + 7 => sdl2::controller::Button::LeftStick, + 8 => sdl2::controller::Button::RightStick, + 9 => sdl2::controller::Button::LeftShoulder, + 10 => sdl2::controller::Button::RightShoulder, + 11 => sdl2::controller::Button::DPadUp, + 12 => sdl2::controller::Button::DPadDown, + 13 => sdl2::controller::Button::DPadLeft, + 14 => sdl2::controller::Button::DPadRight, + _ => panic!("Invalid button"), + } +} + pub fn set_axis_from_controller( profile: &ui::config::InputProfile, controller: &sdl2::controller::GameController, ) -> (f64, f64) { - unsafe { - let mut x = 0.0; - let mut y = 0.0; - if profile.controller_axis[AXIS_LEFT].0 { - let axis_position = - controller.axis(std::mem::transmute::( - profile.controller_axis[AXIS_LEFT].1, - )); - if axis_position as isize * profile.controller_axis[AXIS_LEFT].2 as isize > 0 { - x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; - } + let mut x = 0.0; + let mut y = 0.0; + if profile.controller_axis[AXIS_LEFT].0 { + let axis_position = + controller.axis(get_axis_from_i32(profile.controller_axis[AXIS_LEFT].1)); + if axis_position as isize * profile.controller_axis[AXIS_LEFT].2 as isize > 0 { + x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; } - if profile.controller_axis[AXIS_RIGHT].0 { - let axis_position = - controller.axis(std::mem::transmute::( - profile.controller_axis[AXIS_RIGHT].1, - )); - if axis_position as isize * profile.controller_axis[AXIS_RIGHT].2 as isize > 0 { - x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; - } - } - if profile.controller_axis[AXIS_DOWN].0 { - let axis_position = - controller.axis(std::mem::transmute::( - profile.controller_axis[AXIS_DOWN].1, - )); - if axis_position as isize * profile.controller_axis[AXIS_DOWN].2 as isize > 0 { - y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); - } - } - if profile.controller_axis[AXIS_UP].0 { - let axis_position = - controller.axis(std::mem::transmute::( - profile.controller_axis[AXIS_UP].1, - )); - if axis_position as isize * profile.controller_axis[AXIS_UP].2 as isize > 0 { - y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); - } - } - (x, y) } + if profile.controller_axis[AXIS_RIGHT].0 { + let axis_position = + controller.axis(get_axis_from_i32(profile.controller_axis[AXIS_RIGHT].1)); + if axis_position as isize * profile.controller_axis[AXIS_RIGHT].2 as isize > 0 { + x = axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64; + } + } + if profile.controller_axis[AXIS_DOWN].0 { + let axis_position = + controller.axis(get_axis_from_i32(profile.controller_axis[AXIS_DOWN].1)); + if axis_position as isize * profile.controller_axis[AXIS_DOWN].2 as isize > 0 { + y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); + } + } + if profile.controller_axis[AXIS_UP].0 { + let axis_position = controller.axis(get_axis_from_i32(profile.controller_axis[AXIS_UP].1)); + if axis_position as isize * profile.controller_axis[AXIS_UP].2 as isize > 0 { + y = (axis_position as f64 * MAX_AXIS_VALUE / i16::MAX as f64).neg(); + } + } + (x, y) } pub fn set_axis_from_keys( profile: &ui::config::InputProfile, keyboard_state: sdl2::keyboard::KeyboardState, ) -> (f64, f64) { - unsafe { - let mut x = 0.0; - let mut y = 0.0; - if profile.keys[AXIS_LEFT].0 - && keyboard_state - .is_scancode_pressed(std::mem::transmute::( - profile.keys[AXIS_LEFT].1, - )) - { - x = -MAX_AXIS_VALUE - } - if profile.keys[AXIS_RIGHT].0 - && keyboard_state - .is_scancode_pressed(std::mem::transmute::( - profile.keys[AXIS_RIGHT].1, - )) - { - x = MAX_AXIS_VALUE - } - if profile.keys[AXIS_DOWN].0 - && keyboard_state - .is_scancode_pressed(std::mem::transmute::( - profile.keys[AXIS_DOWN].1, - )) - { - y = -MAX_AXIS_VALUE - } - if profile.keys[AXIS_UP].0 - && keyboard_state - .is_scancode_pressed(std::mem::transmute::( - profile.keys[AXIS_UP].1, - )) - { - y = MAX_AXIS_VALUE - } - (x, y) + let mut x = 0.0; + let mut y = 0.0; + if profile.keys[AXIS_LEFT].0 + && keyboard_state.is_scancode_pressed( + sdl2::keyboard::Scancode::from_i32(profile.keys[AXIS_LEFT].1).unwrap(), + ) + { + x = -MAX_AXIS_VALUE } + if profile.keys[AXIS_RIGHT].0 + && keyboard_state.is_scancode_pressed( + sdl2::keyboard::Scancode::from_i32(profile.keys[AXIS_RIGHT].1).unwrap(), + ) + { + x = MAX_AXIS_VALUE + } + if profile.keys[AXIS_DOWN].0 + && keyboard_state.is_scancode_pressed( + sdl2::keyboard::Scancode::from_i32(profile.keys[AXIS_DOWN].1).unwrap(), + ) + { + y = -MAX_AXIS_VALUE + } + if profile.keys[AXIS_UP].0 + && keyboard_state.is_scancode_pressed( + sdl2::keyboard::Scancode::from_i32(profile.keys[AXIS_UP].1).unwrap(), + ) + { + y = MAX_AXIS_VALUE + } + (x, y) } pub fn set_buttons_from_joystick( @@ -182,9 +198,7 @@ pub fn set_buttons_from_joystick( let profile_joystick_hat = profile.joystick_hat[i]; if profile_joystick_hat.0 && joystick.hat(profile_joystick_hat.1).unwrap() - == unsafe { - std::mem::transmute::(profile_joystick_hat.2) - } + == sdl2::joystick::HatState::from_raw(profile_joystick_hat.2) { *keys |= 1 << i; } @@ -208,21 +222,12 @@ pub fn set_buttons_from_controller( ) { let profile_controller_button = profile.controller_buttons[i]; if profile_controller_button.0 { - unsafe { - *keys |= (controller.button(std::mem::transmute::( - profile_controller_button.1, - )) as u32) - << i; - } + *keys |= (controller.button(get_button_from_i32(profile_controller_button.1)) as u32) << i; } let profile_controller_axis = profile.controller_axis[i]; if profile_controller_axis.0 { - let axis_position = unsafe { - controller.axis(std::mem::transmute::( - profile_controller_axis.1, - )) - }; + let axis_position = controller.axis(get_axis_from_i32(profile_controller_axis.1)); if axis_position as isize * profile_controller_axis.2 as isize > 0 && axis_position.saturating_abs() > i16::MAX / 2 { @@ -245,13 +250,10 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> u32 { if profile_name != "default" || channel == 0 { let profile_key = profile.keys[i]; if profile_key.0 { - unsafe { - keys |= (keyboard_state - .is_scancode_pressed(std::mem::transmute::( - profile_key.1, - )) as u32) - << i; - } + keys |= (keyboard_state + .is_scancode_pressed(sdl2::keyboard::Scancode::from_i32(profile_key.1).unwrap()) + as u32) + << i; } } @@ -406,13 +408,11 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String) { key_set = true } sdl2::event::Event::JoyHatMotion { hat_idx, state, .. } => { - new_joystick_hat[*value] = unsafe { - ( - true, - hat_idx as u32, - std::mem::transmute::(state), - ) - }; + new_joystick_hat[*value] = ( + true, + hat_idx as u32, + sdl2::joystick::HatState::to_raw(state), + ); key_set = true } sdl2::event::Event::JoyAxisMotion { From cd106345c9401fabd7a0b9769a1d136fe0fa8672 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 13 Jan 2025 14:58:35 +0100 Subject: [PATCH 0186/1117] use weave deinterlacing (#135) --- parallel-rdp/interface.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 41eb9ec..f2ee075 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -264,6 +264,9 @@ static void calculate_viewport(float *x, float *y, float *width, float *height) static void render_frame(Vulkan::Device &device) { RDP::ScanoutOptions options = {}; + options.persist_frame_on_invalid_input = true; + options.blend_previous_frame = true; + options.upscale_deinterlacing = false; Vulkan::ImageHandle image = processor->scanout(options); // Normally reflection is automated. From d3c26fb359b2d1937784cf932eadc645c3426db8 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 13 Jan 2025 22:21:35 +0100 Subject: [PATCH 0187/1117] Remove loops in RSP code (#136) * Remove loops in RSP cose * more * more * more * more * more --- src/compat/aarch64.c | 61 ++++ src/compat/aarch64.rs | 23 ++ src/device/rsp_su_instructions.rs | 457 ++++++++++++++++++++++-------- src/device/rsp_vu_instructions.rs | 92 +++--- 4 files changed, 471 insertions(+), 162 deletions(-) diff --git a/src/compat/aarch64.c b/src/compat/aarch64.c index 4c4e13e..2edac65 100644 --- a/src/compat/aarch64.c +++ b/src/compat/aarch64.c @@ -85,6 +85,7 @@ int _mm_extract_epi8__extern(__m128i __a, const int __imm8) abort(); } } + __m128i _mm_insert_epi16__extern(__m128i __a, int __i, const int __imm8) { switch (__imm8) @@ -134,3 +135,63 @@ int _mm_extract_epi16__extern(__m128i __a, const int __imm8) abort(); } } + +__m128i _mm_insert_epi32__extern(__m128i __a, int __i, const int __imm8) +{ + switch (__imm8) + { + case 0: + return _mm_insert_epi32(__a, __i, 0); + case 1: + return _mm_insert_epi32(__a, __i, 1); + case 2: + return _mm_insert_epi32(__a, __i, 2); + case 3: + return _mm_insert_epi32(__a, __i, 3); + default: + abort(); + } +} + +int _mm_extract_epi32__extern(__m128i __a, const int __imm8) +{ + switch (__imm8) + { + case 0: + return _mm_extract_epi32(__a, 0); + case 1: + return _mm_extract_epi32(__a, 1); + case 2: + return _mm_extract_epi32(__a, 2); + case 3: + return _mm_extract_epi32(__a, 3); + default: + abort(); + } +} + +__m128i _mm_insert_epi64__extern(__m128i __a, int64_t __i, const int __imm8) +{ + switch (__imm8) + { + case 0: + return _mm_insert_epi64(__a, __i, 0); + case 1: + return _mm_insert_epi64(__a, __i, 1); + default: + abort(); + } +} + +int64_t _mm_extract_epi64__extern(__m128i __a, const int __imm8) +{ + switch (__imm8) + { + case 0: + return _mm_extract_epi64(__a, 0); + case 1: + return _mm_extract_epi64(__a, 1); + default: + abort(); + } +} diff --git a/src/compat/aarch64.rs b/src/compat/aarch64.rs index fb8257a..e00d66d 100644 --- a/src/compat/aarch64.rs +++ b/src/compat/aarch64.rs @@ -21,4 +21,27 @@ unsafe extern "C" { #[link_name = "_mm_extract_epi16__extern"] pub fn _mm_extract_epi16(__a: __m128i, __imm8: ::std::os::raw::c_int) -> ::std::os::raw::c_int; + + #[link_name = "_mm_insert_epi32__extern"] + pub fn _mm_insert_epi32( + __a: __m128i, + __i: ::std::os::raw::c_int, + __imm8: ::std::os::raw::c_int, + ) -> __m128i; + + #[link_name = "_mm_extract_epi32__extern"] + pub fn _mm_extract_epi32(__a: __m128i, __imm8: ::std::os::raw::c_int) -> ::std::os::raw::c_int; + + #[link_name = "_mm_insert_epi64__extern"] + pub fn _mm_insert_epi64( + __a: __m128i, + __i: ::std::os::raw::c_longlong, + __imm8: ::std::os::raw::c_int, + ) -> __m128i; + + #[link_name = "_mm_extract_epi64__extern"] + pub fn _mm_extract_epi64( + __a: __m128i, + __imm8: ::std::os::raw::c_int, + ) -> ::std::os::raw::c_longlong; } diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index 2265464..c14806c 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -46,7 +46,7 @@ pub fn sign_extend_7bit_offset(offset: u8, shift_amount: u32) -> u32 { (((soffset) as i32) as u32) << shift_amount } -pub fn modify_vpr_byte(vpr: &mut __m128i, element: u8, value: u8) { +pub fn modify_vpr8(vpr: &mut __m128i, element: u8, value: u8) { unsafe { *vpr = match element & 15 { 0 => _mm_insert_epi8(*vpr, value as i32, 15), @@ -70,7 +70,7 @@ pub fn modify_vpr_byte(vpr: &mut __m128i, element: u8, value: u8) { } } -pub fn get_vpr_byte(vpr: __m128i, element: u8) -> u8 { +pub fn get_vpr8(vpr: __m128i, element: u8) -> u8 { unsafe { match element & 15 { 0 => _mm_extract_epi8(vpr, 15) as u8, @@ -94,7 +94,7 @@ pub fn get_vpr_byte(vpr: __m128i, element: u8) -> u8 { } } -pub fn modify_vpr_element(vpr: &mut __m128i, element: u8, value: u16) { +pub fn modify_vpr16(vpr: &mut __m128i, element: u8, value: u16) { unsafe { *vpr = match element & 7 { 0 => _mm_insert_epi16(*vpr, value as i32, 7), @@ -110,7 +110,7 @@ pub fn modify_vpr_element(vpr: &mut __m128i, element: u8, value: u16) { } } -pub fn get_vpr_element(vpr: __m128i, element: u8) -> u16 { +pub fn get_vpr16(vpr: __m128i, element: u8) -> u16 { unsafe { match element & 7 { 0 => _mm_extract_epi16(vpr, 7) as u16, @@ -126,6 +126,58 @@ pub fn get_vpr_element(vpr: __m128i, element: u8) -> u16 { } } +pub fn modify_vpr32(vpr: &mut __m128i, element: u8, value: u32) { + unsafe { + *vpr = match element & 3 { + 0 => _mm_insert_epi32(*vpr, value as i32, 3), + 1 => _mm_insert_epi32(*vpr, value as i32, 2), + 2 => _mm_insert_epi32(*vpr, value as i32, 1), + 3 => _mm_insert_epi32(*vpr, value as i32, 0), + _ => unreachable!(), + }; + } +} + +pub fn get_vpr32(vpr: __m128i, element: u8) -> u32 { + unsafe { + match element & 3 { + 0 => _mm_extract_epi32(vpr, 3) as u32, + 1 => _mm_extract_epi32(vpr, 2) as u32, + 2 => _mm_extract_epi32(vpr, 1) as u32, + 3 => _mm_extract_epi32(vpr, 0) as u32, + _ => unreachable!(), + } + } +} + +pub fn modify_vpr64(vpr: &mut __m128i, element: u8, value: u64) { + unsafe { + *vpr = match element & 1 { + 0 => _mm_insert_epi64(*vpr, value as i64, 1), + 1 => _mm_insert_epi64(*vpr, value as i64, 0), + _ => unreachable!(), + }; + } +} + +pub fn get_vpr64(vpr: __m128i, element: u8) -> u64 { + unsafe { + match element & 1 { + 0 => _mm_extract_epi64(vpr, 1) as u64, + 1 => _mm_extract_epi64(vpr, 0) as u64, + _ => unreachable!(), + } + } +} + +pub fn modify_vpr128(vpr: &mut __m128i, value: u128) { + unsafe { *vpr = std::mem::transmute::(value) } +} + +pub fn get_vpr128(vpr: __m128i) -> u128 { + unsafe { std::mem::transmute::<__m128i, u128>(vpr) } +} + pub fn j(device: &mut device::Device, opcode: u32) { if device::rsp_cpu::in_delay_slot_taken(device) { return; @@ -544,8 +596,8 @@ pub fn mtc0(device: &mut device::Device, opcode: u32) { } pub fn mfc2(device: &mut device::Device, opcode: u32) { - let hi = get_vpr_byte(device.rsp.cpu.vpr[rd(opcode) as usize], velement(opcode)); - let lo = get_vpr_byte( + let hi = get_vpr8(device.rsp.cpu.vpr[rd(opcode) as usize], velement(opcode)); + let lo = get_vpr8( device.rsp.cpu.vpr[rd(opcode) as usize], velement(opcode) + 1, ); @@ -583,13 +635,13 @@ pub fn cfc2(device: &mut device::Device, opcode: u32) { } pub fn mtc2(device: &mut device::Device, opcode: u32) { - modify_vpr_byte( + modify_vpr8( &mut device.rsp.cpu.vpr[rd(opcode) as usize], velement(opcode), (device.rsp.cpu.gpr[rt(opcode) as usize] >> 8) as u8, ); if velement(opcode) != 15 { - modify_vpr_byte( + modify_vpr8( &mut device.rsp.cpu.vpr[rd(opcode) as usize], velement(opcode) + 1, device.rsp.cpu.gpr[rt(opcode) as usize] as u8, @@ -652,7 +704,7 @@ pub fn lbv(device: &mut device::Device, opcode: u32) { .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 0)); let element = velement(opcode); - modify_vpr_byte( + modify_vpr8( &mut device.rsp.cpu.vpr[rt(opcode) as usize], element, device.rsp.mem[(address & 0xFFF) as usize], @@ -664,15 +716,25 @@ pub fn lsv(device: &mut device::Device, opcode: u32) { .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 1)); let mut element = velement(opcode); - let end = std::cmp::min(element + 2, 16); - while element < end { - modify_vpr_byte( + + if element % 2 == 0 { + modify_vpr16( &mut device.rsp.cpu.vpr[rt(opcode) as usize], - element, - device.rsp.mem[(address & 0xFFF) as usize], + element / 2, + (device.rsp.mem[(address & 0xFFF) as usize] as u16) << 8 + | (device.rsp.mem[((address + 1) & 0xFFF) as usize] as u16), ); - address += 1; - element += 1; + } else { + let end = std::cmp::min(element + 2, 16); + while element < end { + modify_vpr8( + &mut device.rsp.cpu.vpr[rt(opcode) as usize], + element, + device.rsp.mem[(address & 0xFFF) as usize], + ); + address += 1; + element += 1; + } } } @@ -681,15 +743,27 @@ pub fn llv(device: &mut device::Device, opcode: u32) { .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 2)); let mut element = velement(opcode); - let end = std::cmp::min(element + 4, 16); - while element < end { - modify_vpr_byte( + + if element % 4 == 0 { + modify_vpr32( &mut device.rsp.cpu.vpr[rt(opcode) as usize], - element, - device.rsp.mem[(address & 0xFFF) as usize], + element / 4, + (device.rsp.mem[(address & 0xFFF) as usize] as u32) << (8 * 3) + | (device.rsp.mem[((address + 1) & 0xFFF) as usize] as u32) << (8 * 2) + | (device.rsp.mem[((address + 2) & 0xFFF) as usize] as u32) << 8 + | (device.rsp.mem[((address + 3) & 0xFFF) as usize] as u32), ); - address += 1; - element += 1; + } else { + let end = std::cmp::min(element + 4, 16); + while element < end { + modify_vpr8( + &mut device.rsp.cpu.vpr[rt(opcode) as usize], + element, + device.rsp.mem[(address & 0xFFF) as usize], + ); + address += 1; + element += 1; + } } } @@ -698,15 +772,31 @@ pub fn ldv(device: &mut device::Device, opcode: u32) { .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 3)); let mut element = velement(opcode); - let end = std::cmp::min(element + 8, 16); - while element < end { - modify_vpr_byte( + + if element % 8 == 0 { + modify_vpr64( &mut device.rsp.cpu.vpr[rt(opcode) as usize], - element, - device.rsp.mem[(address & 0xFFF) as usize], + element / 8, + (device.rsp.mem[(address & 0xFFF) as usize] as u64) << (8 * 7) + | (device.rsp.mem[((address + 1) & 0xFFF) as usize] as u64) << (8 * 6) + | (device.rsp.mem[((address + 2) & 0xFFF) as usize] as u64) << (8 * 5) + | (device.rsp.mem[((address + 3) & 0xFFF) as usize] as u64) << (8 * 4) + | (device.rsp.mem[((address + 4) & 0xFFF) as usize] as u64) << (8 * 3) + | (device.rsp.mem[((address + 5) & 0xFFF) as usize] as u64) << (8 * 2) + | (device.rsp.mem[((address + 6) & 0xFFF) as usize] as u64) << 8 + | (device.rsp.mem[((address + 7) & 0xFFF) as usize] as u64), ); - address += 1; - element += 1; + } else { + let end = std::cmp::min(element + 8, 16); + while element < end { + modify_vpr8( + &mut device.rsp.cpu.vpr[rt(opcode) as usize], + element, + device.rsp.mem[(address & 0xFFF) as usize], + ); + address += 1; + element += 1; + } } } @@ -715,15 +805,38 @@ pub fn lqv(device: &mut device::Device, opcode: u32) { .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 4)); let mut element = velement(opcode); - let end = std::cmp::min(16 + element - ((address & 15) as u8), 16); - while element < end { - modify_vpr_byte( + + if element == 0 && address % 16 == 0 { + modify_vpr128( &mut device.rsp.cpu.vpr[rt(opcode) as usize], - element, - device.rsp.mem[(address & 0xFFF) as usize], + (device.rsp.mem[(address & 0xFFF) as usize] as u128) << (8 * 15) + | (device.rsp.mem[((address + 1) & 0xFFF) as usize] as u128) << (8 * 14) + | (device.rsp.mem[((address + 2) & 0xFFF) as usize] as u128) << (8 * 13) + | (device.rsp.mem[((address + 3) & 0xFFF) as usize] as u128) << (8 * 12) + | (device.rsp.mem[((address + 4) & 0xFFF) as usize] as u128) << (8 * 11) + | (device.rsp.mem[((address + 5) & 0xFFF) as usize] as u128) << (8 * 10) + | (device.rsp.mem[((address + 6) & 0xFFF) as usize] as u128) << (8 * 9) + | (device.rsp.mem[((address + 7) & 0xFFF) as usize] as u128) << (8 * 8) + | (device.rsp.mem[((address + 8) & 0xFFF) as usize] as u128) << (8 * 7) + | (device.rsp.mem[((address + 9) & 0xFFF) as usize] as u128) << (8 * 6) + | (device.rsp.mem[((address + 10) & 0xFFF) as usize] as u128) << (8 * 5) + | (device.rsp.mem[((address + 11) & 0xFFF) as usize] as u128) << (8 * 4) + | (device.rsp.mem[((address + 12) & 0xFFF) as usize] as u128) << (8 * 3) + | (device.rsp.mem[((address + 13) & 0xFFF) as usize] as u128) << (8 * 2) + | (device.rsp.mem[((address + 14) & 0xFFF) as usize] as u128) << 8 + | (device.rsp.mem[((address + 15) & 0xFFF) as usize] as u128), ); - address += 1; - element += 1; + } else { + let end = std::cmp::min(16 + element - ((address & 15) as u8), 16); + while element < end { + modify_vpr8( + &mut device.rsp.cpu.vpr[rt(opcode) as usize], + element, + device.rsp.mem[(address & 0xFFF) as usize], + ); + address += 1; + element += 1; + } } } @@ -733,14 +846,36 @@ pub fn lrv(device: &mut device::Device, opcode: u32) { let mut element = 16u8.wrapping_sub(((address & 15) as u8).wrapping_sub(velement(opcode))); address &= !15; - while element < 16 { - modify_vpr_byte( + if element == 0 { + modify_vpr128( &mut device.rsp.cpu.vpr[rt(opcode) as usize], - element, - device.rsp.mem[(address & 0xFFF) as usize], + (device.rsp.mem[(address & 0xFFF) as usize] as u128) << (8 * 15) + | (device.rsp.mem[((address + 1) & 0xFFF) as usize] as u128) << (8 * 14) + | (device.rsp.mem[((address + 2) & 0xFFF) as usize] as u128) << (8 * 13) + | (device.rsp.mem[((address + 3) & 0xFFF) as usize] as u128) << (8 * 12) + | (device.rsp.mem[((address + 4) & 0xFFF) as usize] as u128) << (8 * 11) + | (device.rsp.mem[((address + 5) & 0xFFF) as usize] as u128) << (8 * 10) + | (device.rsp.mem[((address + 6) & 0xFFF) as usize] as u128) << (8 * 9) + | (device.rsp.mem[((address + 7) & 0xFFF) as usize] as u128) << (8 * 8) + | (device.rsp.mem[((address + 8) & 0xFFF) as usize] as u128) << (8 * 7) + | (device.rsp.mem[((address + 9) & 0xFFF) as usize] as u128) << (8 * 6) + | (device.rsp.mem[((address + 10) & 0xFFF) as usize] as u128) << (8 * 5) + | (device.rsp.mem[((address + 11) & 0xFFF) as usize] as u128) << (8 * 4) + | (device.rsp.mem[((address + 12) & 0xFFF) as usize] as u128) << (8 * 3) + | (device.rsp.mem[((address + 13) & 0xFFF) as usize] as u128) << (8 * 2) + | (device.rsp.mem[((address + 14) & 0xFFF) as usize] as u128) << 8 + | (device.rsp.mem[((address + 15) & 0xFFF) as usize] as u128), ); - address += 1; - element += 1; + } else { + while element < 16 { + modify_vpr8( + &mut device.rsp.cpu.vpr[rt(opcode) as usize], + element, + device.rsp.mem[(address & 0xFFF) as usize], + ); + address += 1; + element += 1; + } } } @@ -750,14 +885,34 @@ pub fn lpv(device: &mut device::Device, opcode: u32) { let index = ((address & 7) as u8).wrapping_sub(velement(opcode)); address &= !7; - for offset in 0..8 { - modify_vpr_element( - &mut device.rsp.cpu.vpr[rt(opcode) as usize], - offset, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(offset)) & 15) as u32)) - & 0xFFF) as usize] as u16) - << 8, - ); + unsafe { + device.rsp.cpu.vpr[rt(opcode) as usize] = + _mm_set_epi16( + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(0)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 8, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(1)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 8, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(2)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 8, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(3)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 8, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(4)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 8, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(5)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 8, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(6)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 8, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(7)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 8, + ); } } @@ -767,14 +922,34 @@ pub fn luv(device: &mut device::Device, opcode: u32) { let index = ((address & 7) as u8).wrapping_sub(velement(opcode)); address &= !7; - for offset in 0..8 { - modify_vpr_element( - &mut device.rsp.cpu.vpr[rt(opcode) as usize], - offset, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(offset)) & 15) as u32)) - & 0xFFF) as usize] as u16) - << 7, - ); + unsafe { + device.rsp.cpu.vpr[rt(opcode) as usize] = + _mm_set_epi16( + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(0)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 7, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(1)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 7, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(2)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 7, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(3)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 7, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(4)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 7, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(5)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 7, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(6)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 7, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(7)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 7, + ); } } @@ -784,14 +959,34 @@ pub fn lhv(device: &mut device::Device, opcode: u32) { let index = ((address & 7) as u8).wrapping_sub(velement(opcode)); address &= !7; - for offset in 0..8 { - modify_vpr_element( - &mut device.rsp.cpu.vpr[rt(opcode) as usize], - offset, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(offset * 2)) & 15) as u32)) - & 0xFFF) as usize] as u16) - << 7, - ); + unsafe { + device.rsp.cpu.vpr[rt(opcode) as usize] = + _mm_set_epi16( + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(0)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 7, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(2)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 7, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(4)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 7, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(6)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 7, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(8)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 7, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(10)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 7, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(12)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 7, + (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(14)) & 15) as u32)) + & 0xFFF) as usize] as i16) + << 7, + ); } } @@ -806,14 +1001,14 @@ pub fn lfv(device: &mut device::Device, opcode: u32) { let mut tmp: __m128i = unsafe { _mm_setzero_si128() }; let mut offset: u8 = 0; while offset < 4 { - modify_vpr_element( + modify_vpr16( &mut tmp, offset, (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(offset * 4)) & 15) as u32)) & 0xFFF) as usize] as u16) << 7, ); - modify_vpr_element( + modify_vpr16( &mut tmp, offset + 4, (device.rsp.mem[((address @@ -825,8 +1020,8 @@ pub fn lfv(device: &mut device::Device, opcode: u32) { } offset = start; while offset < end { - let value = get_vpr_byte(tmp, offset); - modify_vpr_byte(&mut device.rsp.cpu.vpr[rt(opcode) as usize], offset, value); + let value = get_vpr8(tmp, offset); + modify_vpr8(&mut device.rsp.cpu.vpr[rt(opcode) as usize], offset, value); offset += 1; } } @@ -842,7 +1037,7 @@ pub fn ltv(device: &mut device::Device, opcode: u32) { let vtbase = rt(opcode) & !7; let mut vtoff = (velement(opcode)) as u32 >> 1; for i in 0..8 { - modify_vpr_byte( + modify_vpr8( &mut device.rsp.cpu.vpr[(vtbase + vtoff) as usize], i * 2, device.rsp.mem[(address & 0xFFF) as usize], @@ -851,7 +1046,7 @@ pub fn ltv(device: &mut device::Device, opcode: u32) { if address == begin + 16 { address = begin } - modify_vpr_byte( + modify_vpr8( &mut device.rsp.cpu.vpr[(vtbase + vtoff) as usize], i * 2 + 1, device.rsp.mem[(address & 0xFFF) as usize], @@ -869,7 +1064,7 @@ pub fn sbv(device: &mut device::Device, opcode: u32) { .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 0)); device.rsp.mem[(address & 0xFFF) as usize] = - get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], velement(opcode)) + get_vpr8(device.rsp.cpu.vpr[rt(opcode) as usize], velement(opcode)) } pub fn ssv(device: &mut device::Device, opcode: u32) { @@ -877,12 +1072,20 @@ pub fn ssv(device: &mut device::Device, opcode: u32) { .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 1)); let mut element = velement(opcode); - let end = element + 2; - while element < end { - device.rsp.mem[(address & 0xFFF) as usize] = - get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], element); - address += 1; - element += 1; + + if element % 2 == 0 { + device.rsp.mem[(address & 0xFFF) as usize..((address + 2) & 0xFFF) as usize] + .copy_from_slice( + &get_vpr16(device.rsp.cpu.vpr[rt(opcode) as usize], element / 2).to_be_bytes(), + ); + } else { + let end = element + 2; + while element < end { + device.rsp.mem[(address & 0xFFF) as usize] = + get_vpr8(device.rsp.cpu.vpr[rt(opcode) as usize], element); + address += 1; + element += 1; + } } } @@ -891,12 +1094,20 @@ pub fn slv(device: &mut device::Device, opcode: u32) { .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 2)); let mut element = velement(opcode); - let end = element + 4; - while element < end { - device.rsp.mem[(address & 0xFFF) as usize] = - get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], element); - address += 1; - element += 1; + + if element % 4 == 0 { + device.rsp.mem[(address & 0xFFF) as usize..((address + 4) & 0xFFF) as usize] + .copy_from_slice( + &get_vpr32(device.rsp.cpu.vpr[rt(opcode) as usize], element / 4).to_be_bytes(), + ); + } else { + let end = element + 4; + while element < end { + device.rsp.mem[(address & 0xFFF) as usize] = + get_vpr8(device.rsp.cpu.vpr[rt(opcode) as usize], element); + address += 1; + element += 1; + } } } @@ -905,12 +1116,20 @@ pub fn sdv(device: &mut device::Device, opcode: u32) { .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 3)); let mut element = velement(opcode); - let end = element + 8; - while element < end { - device.rsp.mem[(address & 0xFFF) as usize] = - get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], element); - address += 1; - element += 1; + + if element % 8 == 0 { + device.rsp.mem[(address & 0xFFF) as usize..((address + 8) & 0xFFF) as usize] + .copy_from_slice( + &get_vpr64(device.rsp.cpu.vpr[rt(opcode) as usize], element / 8).to_be_bytes(), + ); + } else { + let end = element + 8; + while element < end { + device.rsp.mem[(address & 0xFFF) as usize] = + get_vpr8(device.rsp.cpu.vpr[rt(opcode) as usize], element); + address += 1; + element += 1; + } } } @@ -919,12 +1138,18 @@ pub fn sqv(device: &mut device::Device, opcode: u32) { .wrapping_add(sign_extend_7bit_offset(voffset(opcode), 4)); let mut element = velement(opcode); - let end = element + (16 - (address & 15)) as u8; - while element < end { - device.rsp.mem[(address & 0xFFF) as usize] = - get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], element); - address += 1; - element += 1; + + if element == 0 && address % 16 == 0 { + device.rsp.mem[(address & 0xFFF) as usize..((address + 16) & 0xFFF) as usize] + .copy_from_slice(&get_vpr128(device.rsp.cpu.vpr[rt(opcode) as usize]).to_be_bytes()); + } else { + let end = element + (16 - (address & 15)) as u8; + while element < end { + device.rsp.mem[(address & 0xFFF) as usize] = + get_vpr8(device.rsp.cpu.vpr[rt(opcode) as usize], element); + address += 1; + element += 1; + } } } @@ -936,11 +1161,17 @@ pub fn srv(device: &mut device::Device, opcode: u32) { let end = element + (address & 15) as u8; let base = (16 - (address & 15)) as u8; address &= !15; - while element < end { - device.rsp.mem[(address & 0xFFF) as usize] = - get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], element + base); - address += 1; - element += 1; + + if element == 0 && base == 0 { + device.rsp.mem[(address & 0xFFF) as usize..((address + 16) & 0xFFF) as usize] + .copy_from_slice(&get_vpr128(device.rsp.cpu.vpr[rt(opcode) as usize]).to_be_bytes()); + } else { + while element < end { + device.rsp.mem[(address & 0xFFF) as usize] = + get_vpr8(device.rsp.cpu.vpr[rt(opcode) as usize], element + base); + address += 1; + element += 1; + } } } @@ -953,10 +1184,10 @@ pub fn spv(device: &mut device::Device, opcode: u32) { while element < end { if (element & 15) < 8 { device.rsp.mem[(address & 0xFFF) as usize] = - get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], (element & 7) << 1); + get_vpr8(device.rsp.cpu.vpr[rt(opcode) as usize], (element & 7) << 1); } else { device.rsp.mem[(address & 0xFFF) as usize] = - (get_vpr_element(device.rsp.cpu.vpr[rt(opcode) as usize], element) >> 7) as u8; + (get_vpr16(device.rsp.cpu.vpr[rt(opcode) as usize], element) >> 7) as u8; } address += 1; element += 1; @@ -972,10 +1203,10 @@ pub fn suv(device: &mut device::Device, opcode: u32) { while element < end { if (element & 15) < 8 { device.rsp.mem[(address & 0xFFF) as usize] = - (get_vpr_element(device.rsp.cpu.vpr[rt(opcode) as usize], element) >> 7) as u8; + (get_vpr16(device.rsp.cpu.vpr[rt(opcode) as usize], element) >> 7) as u8; } else { device.rsp.mem[(address & 0xFFF) as usize] = - get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], (element & 7) << 1); + get_vpr8(device.rsp.cpu.vpr[rt(opcode) as usize], (element & 7) << 1); } address += 1; element += 1; @@ -991,8 +1222,8 @@ pub fn shv(device: &mut device::Device, opcode: u32) { address &= !7; for offset in 0..8 { let byte_val = element + offset * 2; - let value = (get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], byte_val) << 1) - | (get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], byte_val + 1) >> 7); + let value = (get_vpr8(device.rsp.cpu.vpr[rt(opcode) as usize], byte_val) << 1) + | (get_vpr8(device.rsp.cpu.vpr[rt(opcode) as usize], byte_val + 1) >> 7); device.rsp.mem[((address + ((index + offset * 2) & 15) as u32) & 0xFFF) as usize] = value; } } @@ -1021,7 +1252,7 @@ pub fn sfv(device: &mut device::Device, opcode: u32) { let mut offset = 0; for element in elements { device.rsp.mem[((address + ((base + offset) & 15)) & 0xFFF) as usize] = - (get_vpr_element(device.rsp.cpu.vpr[rt(opcode) as usize], element) >> 7) as u8; + (get_vpr16(device.rsp.cpu.vpr[rt(opcode) as usize], element) >> 7) as u8; offset += 4; } } @@ -1036,7 +1267,7 @@ pub fn swv(device: &mut device::Device, opcode: u32) { address &= !7; while element < end { device.rsp.mem[((address + (base & 15)) & 0xFFF) as usize] = - get_vpr_byte(device.rsp.cpu.vpr[rt(opcode) as usize], element); + get_vpr8(device.rsp.cpu.vpr[rt(opcode) as usize], element); base += 1; element += 1; } @@ -1053,11 +1284,11 @@ pub fn stv(device: &mut device::Device, opcode: u32) { let mut offset = start; while offset < end { device.rsp.mem[((address + (base & 15)) & 0xFFF) as usize] = - get_vpr_byte(device.rsp.cpu.vpr[offset as usize], element); + get_vpr8(device.rsp.cpu.vpr[offset as usize], element); base = base.wrapping_add(1); element += 1; device.rsp.mem[((address + (base & 15)) & 0xFFF) as usize] = - get_vpr_byte(device.rsp.cpu.vpr[offset as usize], element); + get_vpr8(device.rsp.cpu.vpr[offset as usize], element); base = base.wrapping_add(1); element += 1; offset += 1; diff --git a/src/device/rsp_vu_instructions.rs b/src/device/rsp_vu_instructions.rs index 85e44ed..e9f0833 100644 --- a/src/device/rsp_vu_instructions.rs +++ b/src/device/rsp_vu_instructions.rs @@ -5,7 +5,7 @@ include!(concat!(env!("OUT_DIR"), "/simd_bindings.rs")); #[cfg(target_arch = "aarch64")] include!("../compat/aarch64.rs"); use crate::device; -use crate::device::rsp_su_instructions::{get_vpr_element, modify_vpr_element}; +use crate::device::rsp_su_instructions::{get_vpr16, modify_vpr16}; #[cfg(target_arch = "x86_64")] use std::arch::x86_64::*; @@ -107,25 +107,25 @@ pub fn vrndp(device: &mut device::Device, opcode: u32) { let accl: &mut __m128i = &mut device.rsp.cpu.accl; for n in 0..8 { - let mut product = get_vpr_element(vte, n) as i16 as i32; + let mut product = get_vpr16(vte, n) as i16 as i32; if vs(opcode) & 1 != 0 { product <<= 16 } let mut acc = 0; - acc |= get_vpr_element(*acch, n) as i64; + acc |= get_vpr16(*acch, n) as i64; acc <<= 16; - acc |= get_vpr_element(*accm, n) as i64; + acc |= get_vpr16(*accm, n) as i64; acc <<= 16; - acc |= get_vpr_element(*accl, n) as i64; + acc |= get_vpr16(*accl, n) as i64; acc <<= 16; acc >>= 16; if acc >= 0 { acc = s_clip(acc + (product as i64), 48) } - modify_vpr_element(acch, n, (acc >> 32) as u16); - modify_vpr_element(accm, n, (acc >> 16) as u16); - modify_vpr_element(accl, n, acc as u16); - modify_vpr_element( + modify_vpr16(acch, n, (acc >> 32) as u16); + modify_vpr16(accm, n, (acc >> 16) as u16); + modify_vpr16(accl, n, acc as u16); + modify_vpr16( &mut device.rsp.cpu.vpr[vd(opcode) as usize], n, clamp_signed_64(acc >> 16) as u16, @@ -140,16 +140,15 @@ pub fn vmulq(device: &mut device::Device, opcode: u32) { let accl: &mut __m128i = &mut device.rsp.cpu.accl; for n in 0..8 { - let mut product = (get_vpr_element(device.rsp.cpu.vpr[vs(opcode) as usize], n) as i16 - as i32) - .wrapping_mul(get_vpr_element(vte, n) as i16 as i32); + let mut product = (get_vpr16(device.rsp.cpu.vpr[vs(opcode) as usize], n) as i16 as i32) + .wrapping_mul(get_vpr16(vte, n) as i16 as i32); if product < 0 { product += 31; } - modify_vpr_element(acch, n, (product >> 16) as u16); - modify_vpr_element(accm, n, (product) as u16); - modify_vpr_element(accl, n, 0); - modify_vpr_element( + modify_vpr16(acch, n, (product >> 16) as u16); + modify_vpr16(accm, n, (product) as u16); + modify_vpr16(accl, n, 0); + modify_vpr16( &mut device.rsp.cpu.vpr[vd(opcode) as usize], n, (clamp_signed_32(product >> 1) & !15) as u16, @@ -282,25 +281,25 @@ pub fn vrndn(device: &mut device::Device, opcode: u32) { let accl: &mut __m128i = &mut device.rsp.cpu.accl; for n in 0..8 { - let mut product = get_vpr_element(vte, n) as i16 as i32; + let mut product = get_vpr16(vte, n) as i16 as i32; if vs(opcode) & 1 != 0 { product <<= 16 } let mut acc = 0; - acc |= get_vpr_element(*acch, n) as i64; + acc |= get_vpr16(*acch, n) as i64; acc <<= 16; - acc |= get_vpr_element(*accm, n) as i64; + acc |= get_vpr16(*accm, n) as i64; acc <<= 16; - acc |= get_vpr_element(*accl, n) as i64; + acc |= get_vpr16(*accl, n) as i64; acc <<= 16; acc >>= 16; if acc < 0 { acc = s_clip(acc + (product as i64), 48) } - modify_vpr_element(acch, n, (acc >> 32) as u16); - modify_vpr_element(accm, n, (acc >> 16) as u16); - modify_vpr_element(accl, n, acc as u16); - modify_vpr_element( + modify_vpr16(acch, n, (acc >> 32) as u16); + modify_vpr16(accm, n, (acc >> 16) as u16); + modify_vpr16(accl, n, acc as u16); + modify_vpr16( &mut device.rsp.cpu.vpr[vd(opcode) as usize], n, clamp_signed_64(acc >> 16) as u16, @@ -313,16 +312,15 @@ pub fn vmacq(device: &mut device::Device, opcode: u32) { let accm: &mut __m128i = &mut device.rsp.cpu.accm; for n in 0..8 { - let mut product = - ((get_vpr_element(*acch, n) as i32) << 16) | (get_vpr_element(*accm, n) as i32); + let mut product = ((get_vpr16(*acch, n) as i32) << 16) | (get_vpr16(*accm, n) as i32); if product < 0 && (product & (1 << 5)) == 0 { product += 32 } else if product >= 32 && (product & (1 << 5)) == 0 { product -= 32 } - modify_vpr_element(acch, n, (product >> 16) as u16); - modify_vpr_element(accm, n, (product) as u16); - modify_vpr_element( + modify_vpr16(acch, n, (product >> 16) as u16); + modify_vpr16(accm, n, (product) as u16); + modify_vpr16( &mut device.rsp.cpu.vpr[vd(opcode) as usize], n, (clamp_signed_32(product >> 1) & !15) as u16, @@ -779,8 +777,7 @@ pub fn vnxor(device: &mut device::Device, opcode: u32) { pub fn vrcp(device: &mut device::Device, opcode: u32) { let mut result; let vte = vte(device, vt(opcode), ve(opcode) as usize); - let input = - get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32; + let input = get_vpr16(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32; let mask = input >> 31; let mut data = input ^ mask; if input > -32768 { @@ -800,7 +797,7 @@ pub fn vrcp(device: &mut device::Device, opcode: u32) { device.rsp.cpu.divdp = false; device.rsp.cpu.divout = (result >> 16) as i16; device.rsp.cpu.accl = vte; - modify_vpr_element( + modify_vpr16( &mut device.rsp.cpu.vpr[vd(opcode) as usize], de(opcode) as u8, result as u16, @@ -812,10 +809,9 @@ pub fn vrcpl(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let input = if device.rsp.cpu.divdp { ((device.rsp.cpu.divin as i32) << 16) - | get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as u16 - as i32 + | get_vpr16(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as u16 as i32 } else { - get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32 + get_vpr16(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32 }; let mask = input >> 31; let mut data = input ^ mask; @@ -836,7 +832,7 @@ pub fn vrcpl(device: &mut device::Device, opcode: u32) { device.rsp.cpu.divdp = false; device.rsp.cpu.divout = (result >> 16) as i16; device.rsp.cpu.accl = vte; - modify_vpr_element( + modify_vpr16( &mut device.rsp.cpu.vpr[vd(opcode) as usize], de(opcode) as u8, result as u16, @@ -849,8 +845,8 @@ pub fn vrcph(device: &mut device::Device, opcode: u32) { device.rsp.cpu.divdp = true; device.rsp.cpu.divin = - get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16; - modify_vpr_element( + get_vpr16(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16; + modify_vpr16( &mut device.rsp.cpu.vpr[vd(opcode) as usize], de(opcode) as u8, device.rsp.cpu.divout as u16, @@ -859,8 +855,8 @@ pub fn vrcph(device: &mut device::Device, opcode: u32) { pub fn vmov(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); - let value = get_vpr_element(vte, de(opcode) as u8); - modify_vpr_element( + let value = get_vpr16(vte, de(opcode) as u8); + modify_vpr16( &mut device.rsp.cpu.vpr[vd(opcode) as usize], de(opcode) as u8, value, @@ -871,8 +867,7 @@ pub fn vmov(device: &mut device::Device, opcode: u32) { pub fn vrsq(device: &mut device::Device, opcode: u32) { let mut result; let vte = vte(device, vt(opcode), ve(opcode) as usize); - let input = - get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32; + let input = get_vpr16(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32; let mask = input >> 31; let mut data = input ^ mask; if input > -32768 { @@ -893,7 +888,7 @@ pub fn vrsq(device: &mut device::Device, opcode: u32) { device.rsp.cpu.divdp = false; device.rsp.cpu.divout = (result >> 16) as i16; device.rsp.cpu.accl = vte; - modify_vpr_element( + modify_vpr16( &mut device.rsp.cpu.vpr[vd(opcode) as usize], de(opcode) as u8, result as u16, @@ -905,10 +900,9 @@ pub fn vrsql(device: &mut device::Device, opcode: u32) { let vte = vte(device, vt(opcode), ve(opcode) as usize); let input = if device.rsp.cpu.divdp { ((device.rsp.cpu.divin as i32) << 16) - | get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as u16 - as i32 + | get_vpr16(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as u16 as i32 } else { - get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32 + get_vpr16(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16 as i32 }; let mask = input >> 31; let mut data = input ^ mask; @@ -930,7 +924,7 @@ pub fn vrsql(device: &mut device::Device, opcode: u32) { device.rsp.cpu.divdp = false; device.rsp.cpu.divout = (result >> 16) as i16; device.rsp.cpu.accl = vte; - modify_vpr_element( + modify_vpr16( &mut device.rsp.cpu.vpr[vd(opcode) as usize], de(opcode) as u8, result as u16, @@ -943,8 +937,8 @@ pub fn vrsqh(device: &mut device::Device, opcode: u32) { device.rsp.cpu.divdp = true; device.rsp.cpu.divin = - get_vpr_element(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16; - modify_vpr_element( + get_vpr16(device.rsp.cpu.vpr[vt(opcode) as usize], ve(opcode) as u8) as i16; + modify_vpr16( &mut device.rsp.cpu.vpr[vd(opcode) as usize], de(opcode) as u8, device.rsp.cpu.divout as u16, From 9978e28cc3196d44f1e308eafb7149543a13d718 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 13 Jan 2025 22:30:34 +0100 Subject: [PATCH 0188/1117] Bump to 0.1.18 (#137) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 75cab8b..c39a8dc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.17" +version = "0.1.18" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From 344f41cf47c251c90bce0a05624cff8a55c644c1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 13 Jan 2025 22:56:33 +0100 Subject: [PATCH 0189/1117] Add minimum rust version (#138) --- Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.toml b/Cargo.toml index c39a8dc..79b11d7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,6 +2,7 @@ name = "gopher64" version = "0.1.18" edition = "2021" +rust-version = "1.82" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From d9a08f112d09c55978dcfa0d717d0d676d69d8e4 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 14 Jan 2025 09:43:04 +0100 Subject: [PATCH 0190/1117] cleanup rsp code (#140) * cleanup rsp code * more * fix --- src/device/rsp_su_instructions.rs | 208 +++++++++--------------------- 1 file changed, 60 insertions(+), 148 deletions(-) diff --git a/src/device/rsp_su_instructions.rs b/src/device/rsp_su_instructions.rs index c14806c..0081c49 100644 --- a/src/device/rsp_su_instructions.rs +++ b/src/device/rsp_su_instructions.rs @@ -745,13 +745,14 @@ pub fn llv(device: &mut device::Device, opcode: u32) { let mut element = velement(opcode); if element % 4 == 0 { + let mut value = 0; + for i in 0..4 { + value |= (device.rsp.mem[((address + i) & 0xFFF) as usize] as u32) << (8 * (3 - i)); + } modify_vpr32( &mut device.rsp.cpu.vpr[rt(opcode) as usize], element / 4, - (device.rsp.mem[(address & 0xFFF) as usize] as u32) << (8 * 3) - | (device.rsp.mem[((address + 1) & 0xFFF) as usize] as u32) << (8 * 2) - | (device.rsp.mem[((address + 2) & 0xFFF) as usize] as u32) << 8 - | (device.rsp.mem[((address + 3) & 0xFFF) as usize] as u32), + value, ); } else { let end = std::cmp::min(element + 4, 16); @@ -774,17 +775,14 @@ pub fn ldv(device: &mut device::Device, opcode: u32) { let mut element = velement(opcode); if element % 8 == 0 { + let mut value = 0; + for i in 0..8 { + value |= (device.rsp.mem[((address + i) & 0xFFF) as usize] as u64) << (8 * (7 - i)); + } modify_vpr64( &mut device.rsp.cpu.vpr[rt(opcode) as usize], element / 8, - (device.rsp.mem[(address & 0xFFF) as usize] as u64) << (8 * 7) - | (device.rsp.mem[((address + 1) & 0xFFF) as usize] as u64) << (8 * 6) - | (device.rsp.mem[((address + 2) & 0xFFF) as usize] as u64) << (8 * 5) - | (device.rsp.mem[((address + 3) & 0xFFF) as usize] as u64) << (8 * 4) - | (device.rsp.mem[((address + 4) & 0xFFF) as usize] as u64) << (8 * 3) - | (device.rsp.mem[((address + 5) & 0xFFF) as usize] as u64) << (8 * 2) - | (device.rsp.mem[((address + 6) & 0xFFF) as usize] as u64) << 8 - | (device.rsp.mem[((address + 7) & 0xFFF) as usize] as u64), + value, ); } else { let end = std::cmp::min(element + 8, 16); @@ -807,25 +805,11 @@ pub fn lqv(device: &mut device::Device, opcode: u32) { let mut element = velement(opcode); if element == 0 && address % 16 == 0 { - modify_vpr128( - &mut device.rsp.cpu.vpr[rt(opcode) as usize], - (device.rsp.mem[(address & 0xFFF) as usize] as u128) << (8 * 15) - | (device.rsp.mem[((address + 1) & 0xFFF) as usize] as u128) << (8 * 14) - | (device.rsp.mem[((address + 2) & 0xFFF) as usize] as u128) << (8 * 13) - | (device.rsp.mem[((address + 3) & 0xFFF) as usize] as u128) << (8 * 12) - | (device.rsp.mem[((address + 4) & 0xFFF) as usize] as u128) << (8 * 11) - | (device.rsp.mem[((address + 5) & 0xFFF) as usize] as u128) << (8 * 10) - | (device.rsp.mem[((address + 6) & 0xFFF) as usize] as u128) << (8 * 9) - | (device.rsp.mem[((address + 7) & 0xFFF) as usize] as u128) << (8 * 8) - | (device.rsp.mem[((address + 8) & 0xFFF) as usize] as u128) << (8 * 7) - | (device.rsp.mem[((address + 9) & 0xFFF) as usize] as u128) << (8 * 6) - | (device.rsp.mem[((address + 10) & 0xFFF) as usize] as u128) << (8 * 5) - | (device.rsp.mem[((address + 11) & 0xFFF) as usize] as u128) << (8 * 4) - | (device.rsp.mem[((address + 12) & 0xFFF) as usize] as u128) << (8 * 3) - | (device.rsp.mem[((address + 13) & 0xFFF) as usize] as u128) << (8 * 2) - | (device.rsp.mem[((address + 14) & 0xFFF) as usize] as u128) << 8 - | (device.rsp.mem[((address + 15) & 0xFFF) as usize] as u128), - ); + let mut value = 0; + for i in 0..16 { + value |= (device.rsp.mem[((address + i) & 0xFFF) as usize] as u128) << (8 * (15 - i)); + } + modify_vpr128(&mut device.rsp.cpu.vpr[rt(opcode) as usize], value); } else { let end = std::cmp::min(16 + element - ((address & 15) as u8), 16); while element < end { @@ -847,25 +831,11 @@ pub fn lrv(device: &mut device::Device, opcode: u32) { let mut element = 16u8.wrapping_sub(((address & 15) as u8).wrapping_sub(velement(opcode))); address &= !15; if element == 0 { - modify_vpr128( - &mut device.rsp.cpu.vpr[rt(opcode) as usize], - (device.rsp.mem[(address & 0xFFF) as usize] as u128) << (8 * 15) - | (device.rsp.mem[((address + 1) & 0xFFF) as usize] as u128) << (8 * 14) - | (device.rsp.mem[((address + 2) & 0xFFF) as usize] as u128) << (8 * 13) - | (device.rsp.mem[((address + 3) & 0xFFF) as usize] as u128) << (8 * 12) - | (device.rsp.mem[((address + 4) & 0xFFF) as usize] as u128) << (8 * 11) - | (device.rsp.mem[((address + 5) & 0xFFF) as usize] as u128) << (8 * 10) - | (device.rsp.mem[((address + 6) & 0xFFF) as usize] as u128) << (8 * 9) - | (device.rsp.mem[((address + 7) & 0xFFF) as usize] as u128) << (8 * 8) - | (device.rsp.mem[((address + 8) & 0xFFF) as usize] as u128) << (8 * 7) - | (device.rsp.mem[((address + 9) & 0xFFF) as usize] as u128) << (8 * 6) - | (device.rsp.mem[((address + 10) & 0xFFF) as usize] as u128) << (8 * 5) - | (device.rsp.mem[((address + 11) & 0xFFF) as usize] as u128) << (8 * 4) - | (device.rsp.mem[((address + 12) & 0xFFF) as usize] as u128) << (8 * 3) - | (device.rsp.mem[((address + 13) & 0xFFF) as usize] as u128) << (8 * 2) - | (device.rsp.mem[((address + 14) & 0xFFF) as usize] as u128) << 8 - | (device.rsp.mem[((address + 15) & 0xFFF) as usize] as u128), - ); + let mut value = 0; + for i in 0..16 { + value |= (device.rsp.mem[((address + i) & 0xFFF) as usize] as u128) << (8 * (15 - i)); + } + modify_vpr128(&mut device.rsp.cpu.vpr[rt(opcode) as usize], value); } else { while element < 16 { modify_vpr8( @@ -885,35 +855,15 @@ pub fn lpv(device: &mut device::Device, opcode: u32) { let index = ((address & 7) as u8).wrapping_sub(velement(opcode)); address &= !7; - unsafe { - device.rsp.cpu.vpr[rt(opcode) as usize] = - _mm_set_epi16( - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(0)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 8, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(1)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 8, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(2)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 8, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(3)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 8, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(4)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 8, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(5)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 8, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(6)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 8, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(7)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 8, - ); + let mut value = 0; + for i in 0..8 { + value |= (((device.rsp.mem + [((address.wrapping_add(((index.wrapping_add(i)) & 15) as u32)) & 0xFFF) as usize] + as u16) + << 8) as u128) + << (16 * (7 - i)); } + modify_vpr128(&mut device.rsp.cpu.vpr[rt(opcode) as usize], value); } pub fn luv(device: &mut device::Device, opcode: u32) { @@ -922,35 +872,15 @@ pub fn luv(device: &mut device::Device, opcode: u32) { let index = ((address & 7) as u8).wrapping_sub(velement(opcode)); address &= !7; - unsafe { - device.rsp.cpu.vpr[rt(opcode) as usize] = - _mm_set_epi16( - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(0)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 7, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(1)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 7, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(2)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 7, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(3)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 7, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(4)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 7, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(5)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 7, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(6)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 7, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(7)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 7, - ); + let mut value = 0; + for i in 0..8 { + value |= (((device.rsp.mem + [((address.wrapping_add(((index.wrapping_add(i)) & 15) as u32)) & 0xFFF) as usize] + as u16) + << 7) as u128) + << (16 * (7 - i)); } + modify_vpr128(&mut device.rsp.cpu.vpr[rt(opcode) as usize], value); } pub fn lhv(device: &mut device::Device, opcode: u32) { @@ -959,35 +889,15 @@ pub fn lhv(device: &mut device::Device, opcode: u32) { let index = ((address & 7) as u8).wrapping_sub(velement(opcode)); address &= !7; - unsafe { - device.rsp.cpu.vpr[rt(opcode) as usize] = - _mm_set_epi16( - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(0)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 7, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(2)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 7, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(4)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 7, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(6)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 7, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(8)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 7, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(10)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 7, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(12)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 7, - (device.rsp.mem[((address.wrapping_add(((index.wrapping_add(14)) & 15) as u32)) - & 0xFFF) as usize] as i16) - << 7, - ); + let mut value = 0; + for i in 0..8 { + value |= (((device.rsp.mem + [((address.wrapping_add(((index.wrapping_add(i * 2)) & 15) as u32)) & 0xFFF) as usize] + as u16) + << 7) as u128) + << (16 * (7 - i)); } + modify_vpr128(&mut device.rsp.cpu.vpr[rt(opcode) as usize], value); } pub fn lfv(device: &mut device::Device, opcode: u32) { @@ -1074,10 +984,10 @@ pub fn ssv(device: &mut device::Device, opcode: u32) { let mut element = velement(opcode); if element % 2 == 0 { - device.rsp.mem[(address & 0xFFF) as usize..((address + 2) & 0xFFF) as usize] - .copy_from_slice( - &get_vpr16(device.rsp.cpu.vpr[rt(opcode) as usize], element / 2).to_be_bytes(), - ); + let start = (address & 0xFFF) as usize; + device.rsp.mem[start..start + 2].copy_from_slice( + &get_vpr16(device.rsp.cpu.vpr[rt(opcode) as usize], element / 2).to_be_bytes(), + ); } else { let end = element + 2; while element < end { @@ -1096,10 +1006,10 @@ pub fn slv(device: &mut device::Device, opcode: u32) { let mut element = velement(opcode); if element % 4 == 0 { - device.rsp.mem[(address & 0xFFF) as usize..((address + 4) & 0xFFF) as usize] - .copy_from_slice( - &get_vpr32(device.rsp.cpu.vpr[rt(opcode) as usize], element / 4).to_be_bytes(), - ); + let start = (address & 0xFFF) as usize; + device.rsp.mem[start..start + 4].copy_from_slice( + &get_vpr32(device.rsp.cpu.vpr[rt(opcode) as usize], element / 4).to_be_bytes(), + ); } else { let end = element + 4; while element < end { @@ -1118,10 +1028,10 @@ pub fn sdv(device: &mut device::Device, opcode: u32) { let mut element = velement(opcode); if element % 8 == 0 { - device.rsp.mem[(address & 0xFFF) as usize..((address + 8) & 0xFFF) as usize] - .copy_from_slice( - &get_vpr64(device.rsp.cpu.vpr[rt(opcode) as usize], element / 8).to_be_bytes(), - ); + let start = (address & 0xFFF) as usize; + device.rsp.mem[start..start + 8].copy_from_slice( + &get_vpr64(device.rsp.cpu.vpr[rt(opcode) as usize], element / 8).to_be_bytes(), + ); } else { let end = element + 8; while element < end { @@ -1140,7 +1050,8 @@ pub fn sqv(device: &mut device::Device, opcode: u32) { let mut element = velement(opcode); if element == 0 && address % 16 == 0 { - device.rsp.mem[(address & 0xFFF) as usize..((address + 16) & 0xFFF) as usize] + let start = (address & 0xFFF) as usize; + device.rsp.mem[start..start + 16] .copy_from_slice(&get_vpr128(device.rsp.cpu.vpr[rt(opcode) as usize]).to_be_bytes()); } else { let end = element + (16 - (address & 15)) as u8; @@ -1163,7 +1074,8 @@ pub fn srv(device: &mut device::Device, opcode: u32) { address &= !15; if element == 0 && base == 0 { - device.rsp.mem[(address & 0xFFF) as usize..((address + 16) & 0xFFF) as usize] + let start = (address & 0xFFF) as usize; + device.rsp.mem[start..start + 16] .copy_from_slice(&get_vpr128(device.rsp.cpu.vpr[rt(opcode) as usize]).to_be_bytes()); } else { while element < end { From 643338e086a242f0379beae1957eb08449aaf921 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 14 Jan 2025 13:59:47 +0100 Subject: [PATCH 0191/1117] SDL code cleanup (#141) * SDL code cleanup * more --- .github/workflows/build.yml | 10 ++++++---- src/ui/audio.rs | 6 +++--- src/ui/input.rs | 30 +++++++++--------------------- src/ui/video.rs | 2 +- 4 files changed, 19 insertions(+), 29 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 92d4134..dc372f4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -60,13 +60,15 @@ jobs: sudo mv deb822sources /etc/apt/sources.list.d/ubuntu.sources sudo dpkg --add-architecture arm64 - sudo apt update - sudo apt -y install libsdl2-dev:arm64 g++-aarch64-linux-gnu + sudo apt-get update + sudo apt-get -y dist-upgrade + sudo apt-get -y install libsdl2-dev:arm64 g++-aarch64-linux-gnu - name: Install SDL2 if: matrix.target == 'x86_64-unknown-linux-gnu' run: | - sudo apt update - sudo apt -y install libsdl2-dev + sudo apt-get update + sudo apt-get -y dist-upgrade + sudo apt-get -y install libsdl2-dev - name: Set aarch64 linker if: matrix.target == 'aarch64-unknown-linux-gnu' run: echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV diff --git a/src/ui/audio.rs b/src/ui/audio.rs index 96153b8..aa00acd 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -9,16 +9,16 @@ pub fn init(ui: &mut ui::Ui, frequency: u64) { }; ui.audio_device = Some( ui.audio_subsystem - .as_mut() + .as_ref() .unwrap() .open_queue::(None, &desired_spec) .unwrap(), ); - ui.audio_device.as_mut().unwrap().resume(); + ui.audio_device.as_ref().unwrap().resume(); } pub fn play_audio(device: &mut device::Device, dram_addr: usize, length: u64) { - let audio_device = device.ui.audio_device.as_mut().unwrap(); + let audio_device = device.ui.audio_device.as_ref().unwrap(); let mut primary_buffer: Vec = vec![0; length as usize / 2]; let mut i = 0; while i < length as usize / 2 { diff --git a/src/ui/input.rs b/src/ui/input.rs index 9bb91ed..e05f92f 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -237,8 +237,7 @@ pub fn set_buttons_from_controller( } pub fn get(ui: &mut ui::Ui, channel: usize) -> u32 { - let context = ui.sdl_context.as_mut().unwrap(); - let events = context.event_pump().unwrap(); + let events = ui.sdl_context.as_ref().unwrap().event_pump().unwrap(); let keyboard_state = events.keyboard_state(); let profile_name = ui.config.input.input_profile_binding[channel].clone(); @@ -333,10 +332,10 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String) { println!("Profile name cannot be empty"); return; } - let joystick_subsystem = ui.sdl_context.as_ref().unwrap().joystick().unwrap(); + let joystick_subsystem = ui.joystick_subsystem.as_ref().unwrap(); let mut joysticks = vec![]; for i in 0..joystick_subsystem.num_joysticks().unwrap() { - joysticks.push(ui.sdl_context.as_ref().unwrap().joystick().unwrap().open(i)); + joysticks.push(joystick_subsystem.open(i)); } let mut builder = @@ -377,9 +376,9 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String) { let mut new_joystick_axis = [(false, 0u32, 0); 18]; let mut last_axis_result = (false, 0, 0); - let mut event_pump = ui.sdl_context.as_ref().unwrap().event_pump().unwrap(); + let mut events = ui.sdl_context.as_ref().unwrap().event_pump().unwrap(); for (key, value) in key_labels.iter() { - for _event in event_pump.poll_iter() {} // clear events + for _event in events.poll_iter() {} // clear events ui::video::draw_text( format!("Select binding for: {key}").as_str(), @@ -390,7 +389,7 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String) { let mut key_set = false; while !key_set { std::thread::sleep(std::time::Duration::from_millis(100)); - for event in event_pump.poll_iter() { + for event in events.poll_iter() { match event { sdl2::event::Event::Window { win_event: sdl2::event::WindowEvent::Close, @@ -504,6 +503,7 @@ pub fn get_default_profile() -> ui::config::InputProfile { pub fn init(ui: &mut ui::Ui) { let joystick_subsystem = ui.joystick_subsystem.as_ref().unwrap(); + let controller_subsystem = ui.controller_subsystem.as_ref().unwrap(); let mut taken = [false; 4]; for i in 0..4 { let controller_assignment = &ui.config.input.controller_assignment[i]; @@ -521,25 +521,13 @@ pub fn init(ui: &mut ui::Ui) { } if joystick_index < u32::MAX { if ui.config.input.input_profile_binding[i] == "default" { - let controller_result = ui - .sdl_context - .as_ref() - .unwrap() - .game_controller() - .unwrap() - .open(joystick_index); + let controller_result = controller_subsystem.open(joystick_index); if controller_result.is_ok() { ui.controllers[i].game_controller = Some(controller_result.unwrap()); } } if ui.controllers[i].game_controller.is_none() { - let joystick_result = ui - .sdl_context - .as_ref() - .unwrap() - .joystick() - .unwrap() - .open(joystick_index); + let joystick_result = joystick_subsystem.open(joystick_index); if joystick_result.is_err() { println!( "could not connect joystick: {}", diff --git a/src/ui/video.rs b/src/ui/video.rs index 17ff6b2..2d28e97 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -36,7 +36,7 @@ pub fn init(device: &mut device::Device, fullscreen: bool) { unsafe { rdp_init( - device.ui.window.as_mut().unwrap().raw() as *mut std::ffi::c_void, + device.ui.window.as_ref().unwrap().raw() as *mut std::ffi::c_void, gfx_info, fullscreen, device.ui.config.video.upscale, From 7ac6f2adb158f13df4e3a6d3217a2b5dfe526b63 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 14 Jan 2025 14:15:01 +0100 Subject: [PATCH 0192/1117] Github actions fix (#142) --- .github/workflows/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index dc372f4..b8dff26 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,6 +13,7 @@ jobs: build-linux: runs-on: ubuntu-latest strategy: + fail-fast: false matrix: target: [x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu] steps: @@ -84,6 +85,7 @@ jobs: build-windows: runs-on: windows-latest strategy: + fail-fast: false matrix: target: [x86_64-pc-windows-msvc] steps: @@ -106,6 +108,7 @@ jobs: build-macos: runs-on: macos-latest strategy: + fail-fast: false matrix: target: [x86_64-apple-darwin, aarch64-apple-darwin] steps: From 80176766a777e7b6c27a255504cb122b73e23b25 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 14 Jan 2025 15:34:59 +0100 Subject: [PATCH 0193/1117] Fix arm linux builds (#144) --- .github/workflows/build.yml | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b8dff26..9c27cbe 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,31 +31,49 @@ jobs: Types: deb URIs: http://archive.ubuntu.com/ubuntu/ Suites: noble - Components: main restricted universe + Components: main multiverse universe Architectures: amd64 Types: deb URIs: http://security.ubuntu.com/ubuntu/ Suites: noble-security - Components: main restricted universe + Components: main multiverse universe Architectures: amd64 Types: deb URIs: http://archive.ubuntu.com/ubuntu/ Suites: noble-updates - Components: main restricted universe + Components: main multiverse universe Architectures: amd64 Types: deb - URIs: http://azure.ports.ubuntu.com/ubuntu-ports/ + URIs: http://archive.ubuntu.com/ubuntu/ + Suites: noble-backports + Components: main multiverse universe + Architectures: amd64 + + Types: deb + URIs: http://ports.ubuntu.com/ Suites: noble - Components: main restricted multiverse universe + Components: main multiverse universe Architectures: arm64 Types: deb - URIs: http://azure.ports.ubuntu.com/ubuntu-ports/ + URIs: http://ports.ubuntu.com/ + Suites: noble-security + Components: main multiverse universe + Architectures: arm64 + + Types: deb + URIs: http://ports.ubuntu.com/ Suites: noble-updates - Components: main restricted multiverse universe + Components: main multiverse universe + Architectures: arm64 + + Types: deb + URIs: http://ports.ubuntu.com/ + Suites: noble-backports + Components: main multiverse universe Architectures: arm64 EOF From b2c1d88ea4f1e37d03151565633264026eecefe6 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 14 Jan 2025 19:36:59 +0100 Subject: [PATCH 0194/1117] cleanup translate_address func (#145) --- src/device/memory.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/device/memory.rs b/src/device/memory.rs index cc15fd9..d54e979 100644 --- a/src/device/memory.rs +++ b/src/device/memory.rs @@ -56,13 +56,10 @@ pub fn translate_address( address: u64, access_type: AccessType, ) -> (u64, bool, bool) { - let mut cached = false; if (address & 0xc0000000) != 0x80000000 { return device::tlb::get_physical_address(device, address, access_type); - } else if address & 0x20000000 == 0 { - cached = true; } - (address & 0x1FFFFFFF, cached, false) + (address & 0x1FFFFFFF, address & 0x20000000 == 0, false) } pub fn data_read( From c6c21876523ec6ecdeb97242be62a0afb35fab94 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 14 Jan 2025 19:50:35 +0100 Subject: [PATCH 0195/1117] add fullscreen option (#146) * add fullscreen option * fix crash --- parallel-rdp/interface.cpp | 5 ++++- src/ui/config.rs | 6 +++++- src/ui/gui.rs | 10 +++++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index f2ee075..3c09f7d 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -142,7 +142,10 @@ int sdl_event_filter(void *userdata, SDL_Event *event) emu_running = false; break; case SDL_WINDOWEVENT_RESIZED: - wsi_platform->do_resize(); + if (emu_running) + { + wsi_platform->do_resize(); + } break; default: break; diff --git a/src/ui/config.rs b/src/ui/config.rs index 6e51b8d..a209da4 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -21,6 +21,7 @@ pub struct Input { #[derive(serde::Serialize, serde::Deserialize)] pub struct Video { pub upscale: bool, + pub fullscreen: bool, } #[derive(serde::Serialize, serde::Deserialize)] pub struct Config { @@ -45,7 +46,10 @@ impl Config { controller_enabled: [true, false, false, false], emulate_vru: false, }, - video: Video { upscale: false }, + video: Video { + upscale: false, + fullscreen: false, + }, } } } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index 58f9b7a..f6ff47c 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -14,6 +14,7 @@ pub struct GopherEguiApp { input_profiles: Vec, controller_enabled: [bool; 4], upscale: bool, + fullscreen: bool, emulate_vru: bool, show_vru_dialog: bool, vru_window_receiver: Option>>, @@ -84,6 +85,7 @@ impl GopherEguiApp { input_profiles: get_input_profiles(&game_ui), controller_enabled: game_ui.config.input.controller_enabled, upscale: game_ui.config.video.upscale, + fullscreen: game_ui.config.video.fullscreen, emulate_vru: game_ui.config.input.emulate_vru, show_vru_dialog: false, vru_window_receiver: None, @@ -99,6 +101,7 @@ fn save_config( selected_profile: [String; 4], controller_enabled: [bool; 4], upscale: bool, + fullscreen: bool, emulate_vru: bool, ) { let joystick_subsystem = game_ui.joystick_subsystem.as_ref().unwrap(); @@ -118,6 +121,7 @@ fn save_config( game_ui.config.input.input_profile_binding = selected_profile; game_ui.config.input.controller_enabled = controller_enabled; + game_ui.config.video.fullscreen = fullscreen; game_ui.config.video.upscale = upscale; game_ui.config.input.emulate_vru = emulate_vru; } @@ -131,6 +135,7 @@ impl Drop for GopherEguiApp { self.selected_profile.clone(), self.controller_enabled, self.upscale, + self.fullscreen, self.emulate_vru, ); } @@ -181,6 +186,7 @@ impl eframe::App for GopherEguiApp { let selected_profile = self.selected_profile.clone(); let controller_enabled = self.controller_enabled; let upscale = self.upscale; + let fullscreen = self.fullscreen; let emulate_vru = self.emulate_vru; let config_dir = self.config_dir.clone(); let cache_dir = self.cache_dir.clone(); @@ -221,6 +227,7 @@ impl eframe::App for GopherEguiApp { selected_profile, controller_enabled, upscale, + fullscreen, emulate_vru, ); if emulate_vru { @@ -232,7 +239,7 @@ impl eframe::App for GopherEguiApp { std::path::Path::new(file.path()), data_dir, &mut device, - false, + fullscreen, ); let result = std::fs::remove_file(running_file.clone()); if result.is_err() { @@ -299,6 +306,7 @@ impl eframe::App for GopherEguiApp { }); ui.add_space(32.0); ui.checkbox(&mut self.upscale, "High-Res Graphics"); + ui.checkbox(&mut self.fullscreen, "Fullscreen (Esc closes game)"); ui.checkbox( &mut self.emulate_vru, "Emulate VRU (connects VRU to controller port 4)", From be67cb264c5d9dfb36f46b50cf2e0788df2a0315 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 14 Jan 2025 21:08:03 +0100 Subject: [PATCH 0196/1117] Fix linux arm builds (#148) --- .github/workflows/build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9c27cbe..9ac0a7d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -81,7 +81,8 @@ jobs: sudo dpkg --add-architecture arm64 sudo apt-get update sudo apt-get -y dist-upgrade - sudo apt-get -y install libsdl2-dev:arm64 g++-aarch64-linux-gnu + sudo apt-get -y install aptitude + sudo aptitude -y install libsdl2-dev:arm64 g++-aarch64-linux-gnu - name: Install SDL2 if: matrix.target == 'x86_64-unknown-linux-gnu' run: | From 0a10b2c0ba437a830fdbcce0f8703eff496bb241 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 14 Jan 2025 21:42:03 +0100 Subject: [PATCH 0197/1117] use SDL_AddEventWatch --- parallel-rdp/interface.cpp | 2 +- parallel-rdp/interface.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 3c09f7d..61385a1 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -169,7 +169,7 @@ int sdl_event_filter(void *userdata, SDL_Event *event) void rdp_init(void *_window, GFX_INFO _gfx_info, bool _fullscreen, bool _upscale) { window = (SDL_Window *)_window; - SDL_SetEventFilter(sdl_event_filter, nullptr); + SDL_AddEventWatch(sdl_event_filter, nullptr); gfx_info = _gfx_info; fullscreen = _fullscreen; diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 928d3ea..1f7b101 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -23,7 +23,7 @@ extern "C" uint32_t *VI_WIDTH_REG; } GFX_INFO; - void rdp_init(void *_window, GFX_INFO _gfx_info, bool fullscreen, bool _upscale); + void rdp_init(void *_window, GFX_INFO _gfx_info, bool _fullscreen, bool _upscale); void rdp_close(); void rdp_set_vi_register(uint32_t reg, uint32_t value); bool rdp_update_screen(); From b3f8688ba59edf9027cc040bedcbb53329697035 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 14 Jan 2025 21:53:20 +0100 Subject: [PATCH 0198/1117] Bump to 0.1.19 (#149) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 79b11d7..3181308 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gopher64" -version = "0.1.18" +version = "0.1.19" edition = "2021" rust-version = "1.82" From eae81c4623f5711b77ec405edb239aebcb168290 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 14 Jan 2025 23:23:26 +0100 Subject: [PATCH 0199/1117] Add integer scaling option (#150) * Add integer scaling option * more * more * more --- parallel-rdp/interface.cpp | 52 ++++++++++++++++++------------ parallel-rdp/interface.hpp | 2 +- src/ui/config.rs | 2 ++ src/ui/gui.rs | 66 ++++++++++++++++++++++---------------- src/ui/video.rs | 3 +- 5 files changed, 75 insertions(+), 50 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 61385a1..b621c56 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -51,6 +51,7 @@ enum vi_registers }; static bool fullscreen; +static bool integer_scaling; static SDL_Window *window; static RDP::CommandProcessor *processor; static SDL_WSIPlatform *wsi_platform; @@ -166,13 +167,14 @@ int sdl_event_filter(void *userdata, SDL_Event *event) return 0; } -void rdp_init(void *_window, GFX_INFO _gfx_info, bool _fullscreen, bool _upscale) +void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_scaling, bool _fullscreen) { window = (SDL_Window *)_window; SDL_AddEventWatch(sdl_event_filter, nullptr); gfx_info = _gfx_info; fullscreen = _fullscreen; + integer_scaling = _integer_scaling; bool window_vsync = 0; wsi = new WSI; wsi_platform = new SDL_WSIPlatform; @@ -234,34 +236,42 @@ void rdp_close() static void calculate_viewport(float *x, float *y, float *width, float *height) { - bool window_widescreen = false; - int32_t display_width = (window_widescreen ? 854 : 640); - int32_t display_height = 480; + const int32_t display_width = 320; + const int32_t display_height = 240; int w, h; SDL_GetWindowSize(window, &w, &h); - *width = w; - *height = h; - *x = 0; - *y = 0; - int32_t hw = display_height * *width; - int32_t wh = display_width * *height; + if (integer_scaling) + { + // Integer scaling path + int scale_x = w / display_width; + int scale_y = h / display_height; + int scale = (scale_x < scale_y) ? scale_x : scale_y; + if (scale < 1) + scale = 1; - // add letterboxes or pillarboxes if the window has a different aspect ratio - // than the current display mode - if (hw > wh) - { - int32_t w_max = wh / display_height; - *x += (*width - w_max) / 2; - *width = w_max; + // Calculate scaled dimensions + int scaled_width = display_width * scale; + int scaled_height = display_height * scale; + + *width = scaled_width; + *height = scaled_height; } - else if (hw < wh) + else { - int32_t h_max = hw / display_width; - *y += (*height - h_max) / 2; - *height = h_max; + // Regular scaling path - maintain aspect ratio + float scale_x = w / (float)display_width; + float scale_y = h / (float)display_height; + float scale = (scale_x < scale_y) ? scale_x : scale_y; + + *width = display_width * scale; + *height = display_height * scale; } + + // Center the viewport + *x = (w - *width) / 2.0f; + *y = (h - *height) / 2.0f; } static void render_frame(Vulkan::Device &device) diff --git a/parallel-rdp/interface.hpp b/parallel-rdp/interface.hpp index 1f7b101..67075e8 100644 --- a/parallel-rdp/interface.hpp +++ b/parallel-rdp/interface.hpp @@ -23,7 +23,7 @@ extern "C" uint32_t *VI_WIDTH_REG; } GFX_INFO; - void rdp_init(void *_window, GFX_INFO _gfx_info, bool _fullscreen, bool _upscale); + void rdp_init(void *_window, GFX_INFO _gfx_info, bool _upscale, bool _integer_scaling, bool _fullscreen); void rdp_close(); void rdp_set_vi_register(uint32_t reg, uint32_t value); bool rdp_update_screen(); diff --git a/src/ui/config.rs b/src/ui/config.rs index a209da4..b54a7e1 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -21,6 +21,7 @@ pub struct Input { #[derive(serde::Serialize, serde::Deserialize)] pub struct Video { pub upscale: bool, + pub integer_scaling: bool, pub fullscreen: bool, } #[derive(serde::Serialize, serde::Deserialize)] @@ -48,6 +49,7 @@ impl Config { }, video: Video { upscale: false, + integer_scaling: false, fullscreen: false, }, } diff --git a/src/ui/gui.rs b/src/ui/gui.rs index f6ff47c..e635f1b 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -14,6 +14,7 @@ pub struct GopherEguiApp { input_profiles: Vec, controller_enabled: [bool; 4], upscale: bool, + integer_scaling: bool, fullscreen: bool, emulate_vru: bool, show_vru_dialog: bool, @@ -22,6 +23,16 @@ pub struct GopherEguiApp { vru_word_list: Vec, } +struct SaveConfig { + selected_controller: [i32; 4], + selected_profile: [String; 4], + controller_enabled: [bool; 4], + upscale: bool, + integer_scaling: bool, + fullscreen: bool, + emulate_vru: bool, +} + fn get_input_profiles(game_ui: &ui::Ui) -> Vec { let mut profiles = vec![]; for key in game_ui.config.input.input_profiles.keys() { @@ -85,6 +96,7 @@ impl GopherEguiApp { input_profiles: get_input_profiles(&game_ui), controller_enabled: game_ui.config.input.controller_enabled, upscale: game_ui.config.video.upscale, + integer_scaling: game_ui.config.video.integer_scaling, fullscreen: game_ui.config.video.fullscreen, emulate_vru: game_ui.config.input.emulate_vru, show_vru_dialog: false, @@ -95,17 +107,9 @@ impl GopherEguiApp { } } -fn save_config( - game_ui: &mut ui::Ui, - selected_controller: [i32; 4], - selected_profile: [String; 4], - controller_enabled: [bool; 4], - upscale: bool, - fullscreen: bool, - emulate_vru: bool, -) { +fn save_config(game_ui: &mut ui::Ui, save_config_items: SaveConfig) { let joystick_subsystem = game_ui.joystick_subsystem.as_ref().unwrap(); - for (pos, item) in selected_controller.iter().enumerate() { + for (pos, item) in save_config_items.selected_controller.iter().enumerate() { if *item != -1 { game_ui.config.input.controller_assignment[pos] = Some( joystick_subsystem @@ -118,26 +122,28 @@ fn save_config( } } - game_ui.config.input.input_profile_binding = selected_profile; - game_ui.config.input.controller_enabled = controller_enabled; + game_ui.config.input.input_profile_binding = save_config_items.selected_profile; + game_ui.config.input.controller_enabled = save_config_items.controller_enabled; - game_ui.config.video.fullscreen = fullscreen; - game_ui.config.video.upscale = upscale; - game_ui.config.input.emulate_vru = emulate_vru; + game_ui.config.video.upscale = save_config_items.upscale; + game_ui.config.video.integer_scaling = save_config_items.integer_scaling; + game_ui.config.video.fullscreen = save_config_items.fullscreen; + game_ui.config.input.emulate_vru = save_config_items.emulate_vru; } impl Drop for GopherEguiApp { fn drop(&mut self) { let mut game_ui = ui::Ui::new(self.config_dir.clone()); - save_config( - &mut game_ui, - self.selected_controller, - self.selected_profile.clone(), - self.controller_enabled, - self.upscale, - self.fullscreen, - self.emulate_vru, - ); + let save_config_items = SaveConfig { + selected_controller: self.selected_controller, + selected_profile: self.selected_profile.clone(), + controller_enabled: self.controller_enabled, + upscale: self.upscale, + integer_scaling: self.integer_scaling, + fullscreen: self.fullscreen, + emulate_vru: self.emulate_vru, + }; + save_config(&mut game_ui, save_config_items); } } @@ -186,6 +192,7 @@ impl eframe::App for GopherEguiApp { let selected_profile = self.selected_profile.clone(); let controller_enabled = self.controller_enabled; let upscale = self.upscale; + let integer_scaling = self.integer_scaling; let fullscreen = self.fullscreen; let emulate_vru = self.emulate_vru; let config_dir = self.config_dir.clone(); @@ -221,15 +228,18 @@ impl eframe::App for GopherEguiApp { panic!("could not create running file: {}", result.err().unwrap()) } let mut device = device::Device::new(config_dir); - save_config( - &mut device.ui, + + let save_config_items = SaveConfig { selected_controller, selected_profile, controller_enabled, upscale, + integer_scaling, fullscreen, emulate_vru, - ); + }; + save_config(&mut device.ui, save_config_items); + if emulate_vru { device.vru.window_notifier = Some(vru_window_notifier); device.vru.word_receiver = Some(vru_word_receiver); @@ -306,7 +316,9 @@ impl eframe::App for GopherEguiApp { }); ui.add_space(32.0); ui.checkbox(&mut self.upscale, "High-Res Graphics"); + ui.checkbox(&mut self.integer_scaling, "Integer Scaling"); ui.checkbox(&mut self.fullscreen, "Fullscreen (Esc closes game)"); + ui.add_space(32.0); ui.checkbox( &mut self.emulate_vru, "Emulate VRU (connects VRU to controller port 4)", diff --git a/src/ui/video.rs b/src/ui/video.rs index 2d28e97..43cc824 100644 --- a/src/ui/video.rs +++ b/src/ui/video.rs @@ -38,8 +38,9 @@ pub fn init(device: &mut device::Device, fullscreen: bool) { rdp_init( device.ui.window.as_ref().unwrap().raw() as *mut std::ffi::c_void, gfx_info, - fullscreen, device.ui.config.video.upscale, + device.ui.config.video.integer_scaling, + fullscreen, ) } } From 45d05cecf0b7eabfdce2fb7ac93e9bdb96d180ff Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 15 Jan 2025 07:33:31 +0100 Subject: [PATCH 0200/1117] ignore HatState::Centered when configuring input (#151) --- src/ui/input.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/ui/input.rs b/src/ui/input.rs index e05f92f..6639e36 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -407,12 +407,14 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String) { key_set = true } sdl2::event::Event::JoyHatMotion { hat_idx, state, .. } => { - new_joystick_hat[*value] = ( - true, - hat_idx as u32, - sdl2::joystick::HatState::to_raw(state), - ); - key_set = true + if state != sdl2::joystick::HatState::Centered { + new_joystick_hat[*value] = ( + true, + hat_idx as u32, + sdl2::joystick::HatState::to_raw(state), + ); + key_set = true + } } sdl2::event::Event::JoyAxisMotion { axis_idx, From 842c81988fff9b6a7a3ae61538c49652ef85464b Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 15 Jan 2025 18:38:25 +0100 Subject: [PATCH 0201/1117] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index ac05753..81b1ea7 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,10 @@ Options: -V, --version Print version ``` +## discord + +There is no dedicated server at this point, but there is a #gopher64 channel on the simple64 server: https://discord.gg/R2cz7S94vD + ## goals 1. Performance. I want to be able to use this emulator on my laptop. From b581bdcd408a930af98dd15e08523a6e441461ed Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 16 Jan 2025 18:49:46 +0100 Subject: [PATCH 0202/1117] Use GameController API in profile setup (#153) * Use GameController API in profile setup * more * more * more * more * more * more * more --- src/main.rs | 7 +++++ src/ui/config.rs | 1 + src/ui/gui.rs | 12 ++++++-- src/ui/input.rs | 78 +++++++++++++++++++++++++++++++++++++----------- 4 files changed, 78 insertions(+), 20 deletions(-) diff --git a/src/main.rs b/src/main.rs index 137ea65..8d43e1e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -18,6 +18,12 @@ struct Args { help = "Create a new input profile (keyboard/gamepad mappings)." )] configure_input_profile: Option, + #[arg( + short, + long, + help = "Use DirectInput when configuring a new input profile." + )] + use_dinput: bool, #[arg( short, long, @@ -139,6 +145,7 @@ fn main() { ui::input::configure_input_profile( &mut device.ui, args.configure_input_profile.unwrap(), + args.use_dinput, ); return; } diff --git a/src/ui/config.rs b/src/ui/config.rs index b54a7e1..7d8938b 100644 --- a/src/ui/config.rs +++ b/src/ui/config.rs @@ -8,6 +8,7 @@ pub struct InputProfile { pub joystick_buttons: [(bool, u32); 14], pub joystick_hat: [(bool, u32, u8); 14], pub joystick_axis: [(bool, u32, i16); 18], + pub dinput: bool, } #[derive(serde::Serialize, serde::Deserialize)] diff --git a/src/ui/gui.rs b/src/ui/gui.rs index e635f1b..161b801 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -17,6 +17,7 @@ pub struct GopherEguiApp { integer_scaling: bool, fullscreen: bool, emulate_vru: bool, + dinput: bool, show_vru_dialog: bool, vru_window_receiver: Option>>, vru_word_notifier: Option>, @@ -100,6 +101,7 @@ impl GopherEguiApp { fullscreen: game_ui.config.video.fullscreen, emulate_vru: game_ui.config.input.emulate_vru, show_vru_dialog: false, + dinput: false, vru_window_receiver: None, vru_word_notifier: None, vru_word_list: Vec::new(), @@ -158,13 +160,19 @@ impl eframe::App for GopherEguiApp { ui.text_edit_singleline(&mut self.profile_name) .labelled_by(name_label.id); }); + ui.checkbox(&mut self.dinput, "Use DirectInput"); ui.horizontal(|ui| { if ui.button("Configure Profile").clicked() { let profile_name = self.profile_name.clone(); let config_dir = self.config_dir.clone(); - execute(async { + let dinput = self.dinput; + execute(async move { let mut game_ui = ui::Ui::new(config_dir); - ui::input::configure_input_profile(&mut game_ui, profile_name); + ui::input::configure_input_profile( + &mut game_ui, + profile_name, + dinput, + ); }); self.configure_profile = false; if !self.profile_name.is_empty() diff --git a/src/ui/input.rs b/src/ui/input.rs index 6639e36..9534380 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -256,10 +256,10 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> u32 { } } - if joystick.is_some() { - set_buttons_from_joystick(profile, i, joystick.as_ref().unwrap(), &mut keys); - } else if controller.is_some() { + if controller.is_some() { set_buttons_from_controller(profile, i, controller.as_ref().unwrap(), &mut keys); + } else if joystick.is_some() { + set_buttons_from_joystick(profile, i, joystick.as_ref().unwrap(), &mut keys); } } @@ -270,10 +270,10 @@ pub fn get(ui: &mut ui::Ui, channel: usize) -> u32 { (x, y) = set_axis_from_keys(profile, keyboard_state); } - if joystick.is_some() { - (x, y) = set_axis_from_joystick(profile, joystick.as_ref().unwrap()) - } else if controller.is_some() { + if controller.is_some() { (x, y) = set_axis_from_controller(profile, controller.as_ref().unwrap()) + } else if joystick.is_some() { + (x, y) = set_axis_from_joystick(profile, joystick.as_ref().unwrap()) } bound_axis(&mut x, &mut y); @@ -323,7 +323,7 @@ pub fn clear_bindings(ui: &mut ui::Ui) { } } -pub fn configure_input_profile(ui: &mut ui::Ui, profile: String) { +pub fn configure_input_profile(ui: &mut ui::Ui, profile: String, dinput: bool) { if profile == "default" { println!("Profile name cannot be default"); return; @@ -332,10 +332,20 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String) { println!("Profile name cannot be empty"); return; } + let controller_subsystem = ui.controller_subsystem.as_ref().unwrap(); let joystick_subsystem = ui.joystick_subsystem.as_ref().unwrap(); + let mut controllers = vec![]; let mut joysticks = vec![]; for i in 0..joystick_subsystem.num_joysticks().unwrap() { - joysticks.push(joystick_subsystem.open(i)); + if !dinput { + if let Ok(controller) = controller_subsystem.open(i) { + controllers.push(controller); + continue; + } + } + if let Ok(joystick) = joystick_subsystem.open(i) { + joysticks.push(joystick); + } } let mut builder = @@ -374,8 +384,11 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String) { let mut new_joystick_buttons = [(false, 0u32); 14]; let mut new_joystick_hat = [(false, 0u32, 0); 14]; let mut new_joystick_axis = [(false, 0u32, 0); 18]; + let mut new_controller_buttons = [(false, 0i32); 14]; + let mut new_controller_axis = [(false, 0i32, 0); 18]; - let mut last_axis_result = (false, 0, 0); + let mut last_joystick_axis_result = (false, 0, 0); + let mut last_controller_axis_result = (false, 0, 0); let mut events = ui.sdl_context.as_ref().unwrap().event_pump().unwrap(); for (key, value) in key_labels.iter() { for _event in events.poll_iter() {} // clear events @@ -402,12 +415,35 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String) { new_keys[*value] = (true, scancode as i32); key_set = true } + sdl2::event::Event::ControllerButtonDown { button, .. } => { + if !controllers.is_empty() { + new_controller_buttons[*value] = (true, button as i32); + key_set = true + } + } + sdl2::event::Event::ControllerAxisMotion { + axis, + value: axis_value, + .. + } => { + if !controllers.is_empty() && axis_value.saturating_abs() > i16::MAX / 2 { + let result = + (true, axis as i32, axis_value / axis_value.saturating_abs()); + if result != last_controller_axis_result { + new_controller_axis[*value] = result; + last_controller_axis_result = result; + key_set = true + } + } + } sdl2::event::Event::JoyButtonDown { button_idx, .. } => { - new_joystick_buttons[*value] = (true, button_idx as u32); - key_set = true + if !joysticks.is_empty() { + new_joystick_buttons[*value] = (true, button_idx as u32); + key_set = true + } } sdl2::event::Event::JoyHatMotion { hat_idx, state, .. } => { - if state != sdl2::joystick::HatState::Centered { + if !joysticks.is_empty() && state != sdl2::joystick::HatState::Centered { new_joystick_hat[*value] = ( true, hat_idx as u32, @@ -421,15 +457,15 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String) { value: axis_value, .. } => { - if axis_value.saturating_abs() > 24576 { + if !joysticks.is_empty() && axis_value.saturating_abs() > i16::MAX / 2 { let result = ( true, axis_idx as u32, axis_value / axis_value.saturating_abs(), ); - if result != last_axis_result { + if result != last_joystick_axis_result { new_joystick_axis[*value] = result; - last_axis_result = result; + last_joystick_axis_result = result; key_set = true } } @@ -442,11 +478,12 @@ pub fn configure_input_profile(ui: &mut ui::Ui, profile: String) { let new_profile = ui::config::InputProfile { keys: new_keys, - controller_buttons: Default::default(), - controller_axis: Default::default(), + controller_buttons: new_controller_buttons, + controller_axis: new_controller_axis, joystick_buttons: new_joystick_buttons, joystick_hat: new_joystick_hat, joystick_axis: new_joystick_axis, + dinput, }; ui.config.input.input_profiles.insert(profile, new_profile); } @@ -500,6 +537,7 @@ pub fn get_default_profile() -> ui::config::InputProfile { joystick_buttons: Default::default(), joystick_hat: Default::default(), joystick_axis: Default::default(), + dinput: false, } } @@ -522,12 +560,16 @@ pub fn init(ui: &mut ui::Ui) { } } if joystick_index < u32::MAX { - if ui.config.input.input_profile_binding[i] == "default" { + let profile_name = ui.config.input.input_profile_binding[i].clone(); + let profile = ui.config.input.input_profiles.get(&profile_name).unwrap(); + + if !profile.dinput { let controller_result = controller_subsystem.open(joystick_index); if controller_result.is_ok() { ui.controllers[i].game_controller = Some(controller_result.unwrap()); } } + if ui.controllers[i].game_controller.is_none() { let joystick_result = joystick_subsystem.open(joystick_index); if joystick_result.is_err() { From f3d8080a26ae740a99762ec649d3465d3b289452 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Thu, 16 Jan 2025 18:54:44 +0100 Subject: [PATCH 0203/1117] Rumble pak support (#154) * Rumble pak support * more * more * more * more * more * more * more * more --- data/mempak.wav | Bin 0 -> 93164 bytes data/rumblepak.wav | Bin 0 -> 99884 bytes src/device.rs | 9 +- src/device/controller.rs | 57 +++++++++++- src/device/{ => controller}/mempak.rs | 4 + src/device/controller/rumble.rs | 24 +++++ src/device/{ => controller}/vru.rs | 0 src/device/events.rs | 1 + src/device/pif.rs | 8 +- src/ui.rs | 6 ++ src/ui/audio.rs | 50 +++++++++++ src/ui/config.rs | 12 +-- src/ui/input.rs | 121 ++++++++++++++++++++++---- 13 files changed, 257 insertions(+), 35 deletions(-) create mode 100644 data/mempak.wav create mode 100644 data/rumblepak.wav rename src/device/{ => controller}/mempak.rs (97%) create mode 100644 src/device/controller/rumble.rs rename src/device/{ => controller}/vru.rs (100%) diff --git a/data/mempak.wav b/data/mempak.wav new file mode 100644 index 0000000000000000000000000000000000000000..7eb51cf51631b2bd5d3baeae4247c024a0523de5 GIT binary patch literal 93164 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%0DG!DICi_=X0+MBxl#H|h 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 z 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�%yzdJy1Ve^d>-U_ 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ҩ>c+ZsOxwug!S{)CZ7QK-s9TPx7!W@| z2x4pv9cF9jG1vY0>t%w}5v-wkU`hz2rw!TcUvs(hdU}4(XbOLO{6F-wzxNVGq|&Qo zHiI_qAu@@(O)ggnWh$i*m}#d(avv$o$jUyxp>bxOuhB}#16s_{;mTpF@ws`ak1(CTF0=>`S zZT1oG8CPU$2ia^+_m8INz9i|-253S|cFZ_C?*7^Iv4rRHJfrvYnb5d^8TAS=EQxEgFL1YtVJ zU*SY>hz7PsOvO$V~@}kuFG5Xz8 zBxMYbgnXlYVJGupg1!KQqJ#7S-eG!{M&rqt)s{SYhTf%48ivxWW0+eD%#?axK6stngh)?-40yGoitYdXKPkTyvKb zR`U-J#^D}fom13dLo(+H253uRZyY7%K_*;yMS}ygb>v%F`f8deEZdjLt)jKN?H6V; zzs_dQ=+?(~t`b@0%Qi*Tg%7z@d1AUaaAabd7;Do>JXuDPy_){{%{Te0u6DsSTz$_u z%ye*wBVSe6zG&OAZ9^?c{stDWUElQkQ_GJbSizh!ULD6vu;C1CDO@4ZtYjKfhK=K) zfp7)fJ_h|Dp^EgP4`dM8EhB8^F~Ms5E6%uxo4y0D>##e}!lEnr{ATl%bxCo3q!FCP zgp7aVq}}uEzxd>nmvf4)4go06w#5OFV*P3-Sfq@sJhOagX#doyZS=8h+E352J~?U7 zDh4Ml@A8E$$qU7spGx4QLEF9L6w4BB*->TX;iAfl8YH1OUp#F2py~}L>p036b%Y;Q zBoD!@5G>u-#rvZ)M2Js6`v&jFY{3Mg(gS!|{Gi=Bbx8}7d%}wb0n?sQEq6+*X7*XG zt5%u$wLDV;v?Ugj_o#!+YEZe9RZ_iff44X)2GH@nQw&5S0_Pt9b3vQhzSJc#0?s{i zT_n76rd8@uxR-8j{jJd~XrdTMZ1B7z?2?Eq&v>28vt-}^(y zeclX>FbdjbW#?x=27#rK*U(Ri`n}lMWX{AR5W-l|;v5aGa!GKAvx%&N(!7+q&I8WE zYLFbdkV{^%mOw2G2sv!hA3;nD>vdS%=14R6x|C}S;RqX~P!O5M9E9<&Idizb|3~DH zK-9`%OzAb0)kZ}itG zo_5)x1r`)1H%#3z)SOz~qm}v;p6kyfXP?6Efa6Y-B_V5I$_ZtHkl?R_FokTkNibM} zN&s5`FxdlT`BfFyR@`0jDC|$M1I<mSHG65dMrBs07takl;g)fm zJJNs!o7Eyt>4!sxm(M9Qw;5%1?Sko+TFcP<+gp9RCd2e|-&q{D?=7`QR{W!Zu!f5vl5NKpH5qy6AvxNfQ#< z?8C?!p6Su{4)BE&ZF>on`Gn#yU%w5S^&`HL^}jAduLSLqH4mB z+M}6zeN?Dc^P3JDQvg$J$z~(;cQzO|ndCq%>EPz>)`b}j4A>batnpvP4 zaROX;4ZMmrb?m{8;ou@fR>TfOtTN(CG@?*3lD6=QQKD2hl?Jm)N1FS+U+X}` z?91mL16hHK!WfoO>x~@Ns_Fx4TSO*t&1_3brf4=a=o7kX)hk_csBuGR<`EIA+%fCm z+*+|!Rx@joxZN>(MYGs04=x2@2gceN-DZVDqVMdZ z&lqECX4({PscB$AbN$?Yv(%-q&05(^Ua66}JnE3z=P8^uaiGEiu{~nO0Tb>3qvFd5 zp#po?QJ`kx?aQfJEC)>Qe0Uhx=Dxw}FTTfzf<2M&zMLC_7%2d!h#tYCQA$Zq`(P35++IS;#Q?X3ivFe2Bj;8CsZw7 zd7iZWypYa5X)5te{Ft)40^+?0A0Yu_WLHiGhYuf577#CSILiX-c-H)6jk~>FT|Wkm zG*5u3E4-m%q>zTESD`Hzye>fVXAl<|!xkS$V=iXz7{=yaIQCcOnFO7YVcxl6@nTSc z%Wg@hqx84rqEX8?t~MNKyFynKmru)Lp(EV{j#7st&RQ7UKwXKMFr` zEZc>NJ2BBe9bf{5w|>;l(>2uc^%9Ryby25C!8e(}ijIJ-1mErwI2}T}Q(icqRMI~- zO;Cro9B-(n7i`M#Ru|r7oP`g_lgUY~gKdLpTl=hpR$>*Zn!2OsDMT8-NXBdS%3U^c z&!{~bcT;Wzba;&SNHOq$I3aZ70&o+R6nK%szXTG@-MBvnFW}TgZukiE1NMd$BFDWt zVYvlg7o7UWFz5F7^SZjO>{GjyNr_%V|C&-;1X;diC8O@5+cI_JdU|h`oRgDlwXrGy zP#yJRiGZ#~ZwgRYV<8C8jh_gQU<88T_3Zz$@Cic=fk{@azBxiPu1Pk%ee$fkSFLg- z=|6$pbF9)K1tDHEvm+uQb09tKbob+7-Yx8YjHt2Ts1r9yJq21jTz`~3FNlg_PmGQ9 ztjsRl2}u6pv3CQ&rz|i5*&b#HY|?icjXCCpOy;_bN~`T?0Ff4VvqVc*?Z7|Z`SQyn zF-ut1A+);prgRC9P;U@>qx9J?zYM_b@KbpRuIeU67f9SUM=a+Cg&H60<}?%7`32XqjIWUSsY!_Kd?N6$`*`RzjswiO z&88EUSY;O6W=G${T7WyNinANi|EC|~_h2Wmn_Z{KDVuin$8 zQpm8us`M#%gfEmPw=W}82L~^hJUK?czwVSylQm)izA}`_DDU<*wZlek ztiTL=Z^gwGm&4HD4He(4coMc0H;~P$A(Lj6@`tYw%&dzH;RxbOY};-a<_5@PxMv+> z^DX!m9!)r$BMs|OqRUV)iGXTY+~`wDz0)1RB_X~_R6XtNhv3iD=+%S5{N?S$(JA+W z@|#}da!3phK3GF4zN+YU?_ULSVjB+n?@17bk?^E^8BfT-vP-NoJ|7z0dWqO5R8)#3 zq6EwlT2@>(9UR|8Ll?|9(%5XiCQJ9FKrnmOgWXjyYyD+CNzxxo%=(Mh*96M_GKWmx z`iJa=+54n+>`*9}7cTS9nCb!~g>TR0otGx*qe*7h)AgVY9eMRq^1Dw}T1LPZs-@L7 zv4U@l$_-LJPb8K)t8eFNc0RG)F9Dj0YuzpD$+<2u@7OzwE3~|=GWI4?ViojhM zf!S>U-`V#l6N<1RJ~{Y4#-U&EG{IRfqF)e!Povf%kH7im(WC$V?6XH7r5~o#-WOgV zue|c!U;gq2jDZ>!?w=trNe9lIr8%O{FHcFW;_T`kQ{l4YV<7SJ&D_YQX*j<&-Je=y z23bg?RO|p#i=aW%+!eyQsXEhWidb74RbkdOzJ9db?mfe*j%1nll zp8xH0yb7<>w*L0@(ZPdj9iS8E-FE$4`UWVtfMVmsmOp8UR(7#H5H$B0QTF4uzwLm86WV;{im>L@u z0bV$M8j!vGU>kz44PzF0{M`-a;3Szvnvm$W7Z-RR`5w(^$w$)_0p?erV@#Qe@@=#zmY!__(yYETT*K-k3LA$B!otktI- zobfmT+!8IPpG_c;mNTNH$FTA%?0ti4h>?Vc95i?j9>fqs5M#yMdCcmLKRw{BZcg0# z0I2E-2k$xjQP?*#2wv#k-osE`y!%l$`zn+>wNK}^)BhekNMu(-pA%KW!1$9*oF@p9 zmnY6qz1u97yJeC}7rj2F^~fRcD}6U--Ytm8O$O>Ee}{3Shqi$+%-&2g90Fkhi`x&`OrQu?hT!ymSsz3c{Mm)Zu<!Mcr>r+|&m<=lWs0z`p zXOUU@PM^?`+&EiMDVw??W}0cca0U2d3wqc08|9yU_8X8U5z8b}lSUD$1cy&^Kq8R~ zL{bUw$~a?+cM8nXNVAstXZt`qVA`?^g<46gOfP zR2|y)$;d&v*+Q)J1AK)sqpwRQ1Ng1ypQl?U-ol8W?`kvaU&1`E)(XByzq)n0TCe8u z2F&mRQ~z!ZHGLZX_^*HcVR$il{1o~UnKU3k+z>DF zNlPP@+|;?XC}xfNIXG7`4-lYX{sH zS_c<{4$9?hC-7$I1y)RhCB+9D7caTClqg}B7ET9-!cpx5wpU)3MPXcH|7KZp zXt-P=rEd=FDe~}NiZ47xm>UOKC?XKxfaqv+9$7<=_`#!n8hG;okN11v*%MgPC^Crb zoh=&r8*j~m>2{xW+CpNH$?A1Yl`V!^<)a-iUKy)~+suh`J(dp3;DRQRNfMgfLyo33 z;kZZYkh$CHg|W~?=NeYX8-&YFDd*=5$` zo0xrtbBG*8vMI3==?!)Z-G)2a&a?9uaMk9Kb3IRiaru}P>5)acHvk=UH-kjm|7 z;;E{pSoP+-Tk=z5rAWw=+i>DUDEgVEc3R#dg-Dlz={QaO;yE6PLFAe?XHkCVT(i`z zaIDxrWRaisK%LYrsX9uJ`MNsva<5Dq%lWI4^>P^)p}FfK$)=yjUTMCF7B=V%&3cnQ z+Mu(e4O$#{Lr!po{|PT!ELOabc%be+H}QaUZA?1OV`pmr*De8R;<#NZjVj{~V#&+e z%&?Dv$iV|mTA1T1K0WMk1pA#L`wPx&5X$1>zmpdspVy-?ypDC3%e7s7%Ye*)?s8?T zzrAD(|7u+0V9n)jh-ZEmk@)j*@=qFnA#43uPUZR4(s5=1WOJa2PKRvWGn z2c*GJwStJ-`N2TM9iVSFnRA$#OZ}6wWaC0_629n9s)%ci9J8i=Y(xk!1(#=aIr~2K0?b*Mc~-VQpjD_LiU1YCHtVgfBOhZ z0gXA>5gkmFKy!~{UNffRuCVPstUU49!h0lYz_;KN*s|ge^CKEo4+(zB@rZe8+p(L= zhE#|Uu%GbzMy8|ZbhclUXH=rPxl`Ui>}WgKi`7aTfm#z^0bV}Q+ML84a0>$xr`IXH zyoC{I)J-atn8xKcyRt!HF`w-c>;0XzBDGpj)#lgpcsf7;c}le~lnClYg{|mJ3+UlQ zoN1#C%4S7fxKhqbv^ZLHV9~5_`RJdsL}fhoB-5vkZQHceBehy2!5x=|MZQ|UxI^JLjxi8U!;aan*{o zD~HVF@_&@0jpK8&O#(j_`Xgr8V@zeR3(RS6V-FZDGm^!gJtDm;*k14+kgw&chTu0P3Jz`rKp~o6Wipe zUaz!QKX*W36-`}e0Mo4$-B1LS0$+VqiybX(qmp%!|5LNnC~Xh}GQoOzTIO}3m1j-1 zi328@lxQ}?%W8VAzoHd4BfR%gb836$zpW?yhdOkz>S*3X@UwDU85 zbXog@Z4#xb-iQYDE`D*W7inK(g7>x^aP1>6Th%tbQ!n-3dk+6546BNkn`( zOx(yxqgQH|SIJ#FdZY1Sb6hGPe5G#D9JkqrUs*Vp zu9|o^AEA|)B?r(79_;V31*sIk0JKp|0oi>Ow9$6L6M8dU>qNM)52N*@W# z`p}2+pkZxsT15)Eh{*g(p4RIWx&lsNpjy2=E(uh%`GWhZoT)Z#jixpA{dQ|hl{6s@ zgz250=8enUKG)KXbk4-#w5twd3W#QSK6Nfq=ytB!9CxV#&7H7dM8 zO+;Je@3A}kdh8y1-vGHhq;6_4wV0yK%@ePstRS}52;@wBs5D>Q54S}hoA&FVHB}A8 zFOGU+4YjCZ8T8RPm0wQz5*`~2ECgc&o0SQMlXV@$4DLZInFPkz_!43eXJTUvJcQ8U zpYsfSL&8Xfm{WUlPnuI(BcMujMqYez8;GZrtfy zcNH2$&N+OhcSb^K;Aa^9jWKUp-6;VP`>%j~{$@`ziNPfKV_5Id3*~OPP;U*GGrL1li@16lwPn`#YGr5vnYXqJ5{&G7{zu>?EJK7MNr*4}}5)(&F zxRwOY1>g|I!|Xl7af5VhY8Ym>J_9WY9Hm(WThBIxF(JekK#A;7=E&?a9(!)nA*X|% zIGyX_ynOzTOm*Q+3C?2tF}XhVu^?g{THJ*7aMQvm=UJyL4ne{jS~%7AdIpF>)pW-2 z_!!thhsY%Q*to{WI@p0_EUPyIDEbS-F9&um~=xC z3ntxLws0oh`~QbMcLrtzZm0vk<>O$_Jss?$b@Z;3so16Xov+q(TVsgO(&P{=&>(T=9*N$j{kj*`10;F&V?M9btWw_mseY8uRNM+j6Z zxDEpVR-9<01^&}nb_v#*@Slzk@n|*)Ya`48=5VXQj{r1>H{<9mwiK1d)Gx3tTpSy& zU&vl2QF!k0j*hG2@u}V2Z-L(8oGkf4PO4JZxPhc-a0z4|Oj7`VSgd+2M^@*lfm6WD|+`3Xfb)ey*t+vTIy3$(i@v z_pyKCm&J&6FgCs)8fNmBA*{%wAcWU_zpmeuEp2^46cRK2rXpS{{4>;@N*{V*|R|{ z8YbvXuteE4H(OtCX&3 zH|)3y4wUHHUtLjyH$vOrUZ$DxRT|}8X-hhR^w2CCoanxKc9h;0${A%@z#BJ{s}lD@ zu~CtRb5Sy{#0^A9Z`iC9u7HubNfz3}ivIWn5w;$;|LZRLlcB7Xbkpy^Yby-Igr3i4 zXLZZCJWs9^5V6rL4FD6F%LbkZ02Bt@Uy zi&y!#y1OTnJzf9Jkd@gPUsW8zgR}h6t2iSP_NGvTRV*N0)v*1dtZ?DeedCmUAvb%q z&Dtt`gk;jx)3LOZX#wRIdi7Ow9sK{elefa~5dCO@2qx%TZ~FeI`6W=jR3`PT0N8Pk z>3a5@=tkHZobU^dP~OjCXgszH$Z4fTSSezh^Y!}#(@ztB*cwqp`|u znG*A6%-(TDGnXse1aJzbxm>1D1DOJR#+4)!9-3YZD2MuH=h#@)Az^^X$SiI1jzyVa68$U0Km#`B~pQ^k}m-k9pqW0 zx3lBu?E}zo@4J3KJwGiARKYw+&?_68NF*PdC!Bs??my6EI;qiedsq!krl>^@{i!vm z8o<2v+s+jqBVV%m(t5F0BM8o&Up10gAV2CQRw0JNEV&^;Zf5pt{Q}G9j4-qXi-8RH za9jb6t6d=64JUBCjp4-Y4^D+%P{;1=Yv??zFPCA)0IxGaOSkscZBG!$M3 zO>eN-nz)IkBhji3tD8G*Dqbq4GAVda95Pac=FY^YlO~-vFc6_HG5%xkJQ1IjVD_C<)ooZ2Ap@ahcHP|=_)HkRw(g=Dl z*xSZ|eFXl_grV78U^RcV;zqc6aPt6>0knQNIE{S788Vfy{4y92HkdmCsOwoO>!VS@ zsTV*d=mzj~?ZNGFu}R*(d8pkneOVYjY+N`c-|5?UV6xCC>%CyzHxrf_O*obpo@|EE z*%yDB@ZGbSuTTrmxc-1)>ec}mqnf;J$aEkUt4nEH(p4x|*3wUJ{^%n+a)?QT(!hj? z*4lpaG{L~NiQlxyOwu}$Lb0KV&5_FHT6v2+*kG3as-V_ZYb3jGYY>7MR`Bx4 zp~X{-QkUF1XJtrNxQ)kGPPuV^L~J&TyMAa|dAM_U*i^<(+`K3z0;Z8Esg2xSy9x_U>s7E#l zrWfqq7Foi8>w3KKOc;$ZsGq>+QI6 zhH&tPjMqYO84YiB2~%Al%G)FA%j@2CNTkZ_H>SymMSA+7%uE@XBedxEzieMR!B zBzZS^?B~1!*g_}(gh#WSAcBkpLXk*?ZtF;sN2oSZwqqpq;V9<5K^rgVXL7$`9+(dd?` zpcMh~9oqeHK7Y7F=Mkrbu07oXYvPQ#LW^wril}L-ZTmt{pId&Oqwq68M&CL9Qaji! zT=t{MC)Y1^f_`ZX6@kDRn%84;#f^r_?CSXYDG-$1+VKF)ecfxSOq#6bG@UW?vh`DK zN}tTswO~hV-d?-Rr}AI7fov(i>7-_xDrv0K{4dSYG}u97b%ap%w~I1!axfjnG`*ZG znPev(F=1a1fs-3_VfSWa=!o^CW6=gYT6jM2Jth*R_x|H|1<*J(olE!wLYd*OZh!&3sH zv25kE8JU}5-1!Z?yQ@;Gt#1(OY+aRRYo4wUANpON09xhQ*T|1jbj^Q=F8N4`Srng_ zJ~paU9TzDNA{w+Y!EJ%vjN`@RP_YbW^f2wfs%bsj&b$QLR&3o=ie^|MVMK#mj-3GG zmNpvo7Y_?56PYW~AH%5A4k7|YC4w>O-}rZlJivgLmIBxOv17*~dHC}d!|$Tdbz0r4 zawrmVa3W1ADg_z7iB#u-OsG)H6;{2b)5SrfC_WRo>ZOt*5S2 z+Px9tEAv^L{xm+6V6NWz(WUPnU9fw|=J6+ho$P1q@L{aQr-SFpi@~B_Pp9dg;Hq$ogQ*fva+i zRFJu1Pa%D}Y;W>PYo>#K*2&wxJ4UM+@3r$5&_nb$AAQU`9G2-IiMLAya;>mDl1U~g zkcIPNkAmDE*OWt?6(!DsfbyJZZX1^vUP$w1lY-(g875F6zzT0{1CDLkjr43z=bYSx zlfx1;2)sCvxFMPRC}Hx8GeRE;^=f^ZPL-Qp3t)ttJVB>yZPs@5R>M$!FyDSm7w`1} zZ^GZ(X($x6oKBe!PVS47=?Qm1$^4_B_gF2~zE*=bZ_!&P{gd9)@jm^hCbD9B zr5uFxd*-y&%^!dkzrr?qbu(FUI%h!#J&1>S-!0+_$PRbF2BAf84knN>z9B(wBTLsf zSaBT};fA-U7}?4=sO+YNIOaZ}r)=hqz0x9zI{Y3^2HIMkPU?08qbPj#Rz6RuZlBeA8zHqJddc>01qUXr4D|T9X9G zGLc$YR9@Rm*Cp=!_5x<^qqn8#&yMe8WMH^!_JjHHbuyU0C63U4)9dJ)%r|adwv4{6 zYh3IWs#Sc)klq@c=K&Au1bNO8oNBj%|7p}&GiwTXJx`nMuF{4=x_W(MW1Agp!7JV1 zK^6o5D<;kp3V7tcQP9K$y+yPYewGK>a~uzn%k+joDF@lH*H$1a_9572*c|SVA)tV% z*>Q~3v0O+zgoqqrCXdX$s}e={tMPJ79csX@R%)*tJ`k^Ks(5xA*0^(gs+Ghh)Av2Q zgjx9AdvoNWtbh><1fY8>=ZSd0#0TRN7{8NfMHU&zq6ifZsZ?Cp<_*lS`oQhN8=P(R zSI!og+Bz(C-f2P7@6AMY3ZGmZPI-eJL76aqEP z8TWOKFBXu01G>u3GDk1XT%55@uSPCaP5*bAf%&eEs+&9dD*NU&360Y5f__uRH8igt9DM5L zOn!^(%^l0Qus;gaV-PkzuJRj)HTj5KGOy?2;N2@$H|m=fxdbqnZJ#Q08zT{8&=_mI zqI%9$rxM7?(-zb<%)Vh&|8@}8bYurD)!ZOmolUsU4EigaEFc4+(_ z$r{it-a``fMG3jI`~O+{3OKo{v;CYq?(VkZvpYVs<1XuxY}^%zK!Sw?LV`np0EGlE zS|qqrpg@bZA5gp$O0kx&6iR8Kl#c>)_`m1gncdk4jrbzBhLzPN4*EU@c!`BK9L3%D_jM-z(`J57m@0(KeYfhaX)|L;Ll z1dLV}B0=hT$ViOQ4%yjYx&~rq-5#X&5QdtUqPbr|pnev}FE;y!=4Ck87*Xd&#@ z2%}3z^fmje#UYWNA6Phc!Ka_5h})K{Dzqd6fVc8HV@AG>Hbn%DN;bNvhQBOZ5n%av zbT`53aO9+O;c!5(`p4{bCN_3io%3fpU^&A!dr2U?aMUDm%B*Aa=B97!zF~WO{igL% za#_M_)~*R|$Dbv4;=kgrUVn2*hB{%=(df*eT-_!Aae%6Qo0k*|_l@@qBt#j21=a%# zhD2O{8B8L{KIvIN?w)ceoCUoZ4L5)UC{hoQUnfr_wKScZA!D=z-CIhFVAa(+;=Q3( z`x3ymJAoV<| zRT}Rkku8TuAh<3u*uW890@+-O&R8M>2@0-&rIZ`JOOiujnb5=)IkVqR3U>R}2h_^O zn2{{Dlb-xhdaZ&PBS)r?8jtXvh~U(GkeoUU0^PAqm%(OW^EQ7~k@TKWK?$dg0Tczt z!sXJ?736S$hEpUM0xUukp@`*Gf(F2t)0q$;CyxNhS*_LT)I3uToD(@K;9u@ij*kPCyPVg4Ao%DeO5OOZ1`MO) z$ZL>tHs1ZTr{{3Dy{7Uit6;qQMh|c;QMp&DR#hV`G2fL1=PUg0SVvh7ZqwlNyn7wD zPx&hc`72ql%BYWW_jeZ)Yl_qjjW;Q-PvTPqmHs<`Txh}{sPS8-4nChHbrGdt#N{97 zG1ZKIQy==jNda;{aW4kJe~vXUF0A7LNTqeZ$jaJU2#+Vj9b;DRn+*{&t|S9Ya+k;l zX=stY3cO}XL7FBYtdSVma=mEE(YCmsJSb3zndIJL-~~fFcyo3q`q9y!$@24!$VDZ1rbbZ2z(Z8I^xcS^+a;gy9+77jY>7|A2T}(Q7v?& zmCIUgS^%N32*Z@sdM4=aoA`Qq*v&v~lfLdCI1K0_vJO5qYYYeqeE-RA->}Lj>5A`2 zNOcOZ!Io?P*{=zzvl5dYzgJgy+;G*L9jgl3R5ojh7&Dp32l4X;ShdqqNbB|vsXE17 z(Q6Z`4m~H!*4g@Ma<^B}4NS*1WnC(lGsTR#bnJ!h^9HHvmSp4PCKa`*$OFCHzQ`yU z(_!H51>;5uwY~bD&OOIrv@gJi`#g(XAw!|~u*NlG#HO`Qn@;^!)3v~+(q@YvD4=%g zklW|ZKT@68xZw!D%D?V}xR`heaFn%=oLlR!dV@1 z$J~X-YP#1Sx4KK+b;R+<;cXl_k$(^z0E^X7%#jDFOb9MEuqq^7$b`}iQ}p&hUB&Pu zPJkU(V*cBzhjwStld5)4OnT_Xo5KnwRkz~F#H@+dz=Ock!rS-$73j;*c|V&?_QY>I zJ5bH;xPAmIX_6a`U->6O`1*u3{QU#{)U%BoN)HUcc(4P2HyhefRduP-iq6J^tlpu< zNI#lg&_+~2W!D`+b2+OHsWN45g=I)AfE^ZLWqMF^WK8U{M=XBo4bV#fjok1fU9M?E zdcS^POjhIQ9R#Fe)Ln%U|9rgs^-Yf=t}Ca0|VuT4&=2qM(5e%$!o?>GVqJjM{k z=L$NFd==ZAfUv;f@B|{Wlb#FT!`cbQESMsJBwzx#l!4M2Ibw#{MC`h0|DFj}6Au)O z#?w0-KRxUkFT4N>PZIj&1b9w*CGwNu$uvu~W-2&OGzk|`8xpl)OK)1`2D;hnP$u7{AgIV7UalRpsVnqH*Fso#S)rRHZ~Md6PCHJy%X_|avsJ5W~cpQ0VKL-D4q4AJ>w zG+0`TAf${YEH%;?wYzo0X#t`@FV>KYN_VsL#hqwnT9@`9t}1nQZ|{>8G*-iY7im)g zb8ftF8I(+SkOSx_t2($n94lh?$(^#YP^WGzVoGH2WYX@BX*xhWiWm*?u=?No`2`oe zRI1`!6E&*9GDT{ zCmZ1&01aaFy3-yv_2^0nA|I^q6A_2jTTWjG=0dbO%N8d|*Q}{{ty*bUthp6R+py-- z2L`^Ox*IQ^QnSuaa8xRObcVYI+WU9msFake26P8>A@F*nUiS{k?6Qiaqp_2?WP}Ka zGtT?p2T|#yIUAQH=%*jP|0=|)Q}4(Z-k#?vRoujt%d&Vrx}}I8D57e*KMj1`brkGg z4;ZE9(LYQoQTJ)x!c;05V$BkjXlMLSGbL$(gUKvfROtyX;jfT5brM9X^Fg@vx+!-| zd7Vj3gz-QdW3+(&rcNWE{_v@0jDkc$o_2aBOx|w#z*JU7{iKD2whir@M?@xt?I1ww z$Xey^k4S5fP8E__Yi>9>mrcltQak?o*TgyJTrC!Ns%LKK=jlY1wWG=lRFx$~kosJH zQimihG@Bv9@mvb9BGco)ZqDUKOO6dAY?X>PvX;xY0k-YsnL#J?Y;SPUnBK3Ox-jFH z`V$tuS!78C7yFeiVL;%-?p?Jw@;A@sPW@^5Taap?Nq`{L07|}wxpgvS?5u?0VkCl+ zoY)u9iK*k$KK!<87|#)9k?YWCacn;#UeUHtuI#D&F`s*|}xsAHoT~qtnSt z!G@Sui2fch_w`w0wt+!>o}{p4jZt>=CU0#a-xIpp7BCYVnR-o?xNv4 zz$0}WM1&X)oGd1jwgO12*xl!+a`!;O3dtmX%W`mNVXK6L=N>;#pA`!2x|u7}90fnV zY(#Z8F>3i)1&ms(9XzRk)Hj?C7wq}#IS!X(n``5>3q=Or;-78tF7I`1oDaz3taYji z*E6*TTs;akoA@t(Sr26rzPR$rh^#}Fml*o(zBwZXr+#=g7912|;airff7MV#21v5V zSDu?gJ1J>mYEsVE^CaP_53k7}_ADt+<>iS%8BXG`+?1W4mx9f%s&{q$C!+evF|n2F zUw40eFd_$ripY`pF0=zbjs)PLe3`_S*2;9n?;N1}qj9VKKKlXSm-VVK3Z|8e58OSh zhuZ3E4b6_+<9v)9G$dzDoZfaJ;bwQ(nXb2BLzCHO+AVSKA(QNl7kS#y(EF6C@%Jm< zgC*>h`0`%#4qjP957xoFvJ?XCbw`R|Tfa>t%x}JV%{5rV_+9}?az8|*+jjC<{afti zqn0g8y^<@ylFQHW4wIG7V*yK3>Q}(1*zFh<8^|1<1c-Cd`s>67nP61Ru6>IX^dsZ4eLn?ODG)y4 z)B>>Na+}uTN9(4DAehZZ#5y2Li=0xnHt6HUD&+`2SukAj4*3BlxC`)2o66{=#+N9a z=qRVvbwzjX`HFSM0zU-$uDQdo6LBDr)dcU6RSC+B8lKQ7BnfF{v z6KmoigS3Z984U)&`%Vho2}1(9Qf2TSdf30`&kztFhArc--A-iRFA#Ou6<7R?sx*Fi zDYD`}ae8zkAtJ&Vs=YfTixfKe8YMSAN2geS+ii<_^rJBjOgKY*{}`6WD=xlT$;~X( zDe>RYorS(wPrN4!wwUzI**}}hl(mosC#rbPB4&9j4OfY}toTpq$hl#H?RK3wJ3OaP z2SWaWuG9PR?H=%WG=o{R@Ikb47Y! zruyLtSdtimlBE;cmHZ^jgI)OFhccm$MTb5h&h2TR9AFnHl3Q?Z3%1`?sC!>daBr*3 z?wUly(c4U1q8~&g$7np>27Bf1PU(_7UuV-~)i&KJUA|fRpe&kxGHs0cgn6MS^5iV2 z*82F0rO1ze*L+yv%>YLcubZ#vhXSPq_3{Xf3w4AP%z+T!}zyX8WOKfn?4S*e^> z=5<`Jvk&)}9QsQCT)#Y`4a@Adtl8SvYq4AU2B|0cjv9Di_uy~G#?F~O9m%In%V8hN zPYQwi)CietAnFaxKJl+0f~!Q6j9f=21in11&k|K!vOG&v$u`sapjQ%Q&GH25{+nhsUY`KCLT{?!s#;J2UxmvMz&hQRJabZzx;g=Ve zRBuIG(;aSIJc=C*cNXy?_Ct?L1FI@^^zz1^2XaluG!g2Xcsp zrdluPWJ_53iUa@NV5X^uusJPx>BZ#I3NI*SYIVrM-K9^L?*^J|h|$tN=LDl;{Wk;(i9AgAo-!Z52#U(|=> zot^InB`&u-F86xw#eaXj{G~q*ykeT*AVd^mB|_$;wWdv)sS6~P^*&-<<2>Z3QmJo) zgQHaQeW&z4TUuLwyV2v!G*m+DJzrxnficf@YmpFT!^n9Qi>4fqcR{t>r{Q z^g$U3kv@7Yd<9Th=phT)!y+e4P;~OMwRb>JE4X@qztbQA$XrZ(ZdWjIACM{P>D%GQ zF$l2OIiD7e$>DcD|6EVh%8yH>7Ki0#F1RX6o(_euZdbslcU(|%2hR2V>|lc*um@TJQb&SQS}($H%t;=6}#26jP@E) zU>U$T#R}5y4&xBWFb(z>%w{OD25J?q#N6HuZ*8S{A(u3ro|xgrE)Bx&{TyB7kh+I{ zmuXODFMrw%$=&x>g0dqI$QUrMOVE8luj9rXy(Mi~ovA!lHjm5zQl!v5wWq5fcPaH< z;+!~W)^t5kPQE98+uA;Q07Z(My`0?SQ)P`8LjPa7 zdSE0#s#{BZ1L1WzaeVwufB)HewO?b5$TISz!`%I=q9&v>$6$(-aaxkk7j<#HEu+Y) z%07F3gK6r*04xOu7ELwBQ`Uv6yP>gnUx=dm0 z))~@Tow4e$mh}o_LTgHE^`@HLTGcC!Nu4pPHJIxTTdi@acetzqt5p5aynsdVO9dK4+CrO%nB9_fCQd;J@4?=((Z|LckfBa8` zK}1rej`&3Iq>NEVa}ggJ9I~p)fro*qcgeTvU^+%hA_4$0sTFv)tx)@4!zp|RT}@BS zW_06=u+&3URk0KPYy8f15cS|+^cLhX8}ZTW2*O|tu=^uxwS@(M(FGELNT-l?YA8NW z;}itFKXBupC!LJSC9!w3$}@?I{dQqvMKdf*n~r?G zrX%0~bqjT(Hb=flEkJ;LUom7#8sb4oOwtwBi~qNXgr@Ew-z@2h=y|Mu@w}Te#C9)n z1@5Y#)5Sv<#5iIxJAC>XwU3{BKrG{&bjOi-iA)T36CMeoI0Dgv$FF^8$u%BBuhzQ$W(s?>P$>zWpy#klJH$A0bs3v zkGlF*aaAAE#@xf2gg6ju6b_^+ZuhWYv2%@Ya@3QJw_Yn2k0=yk_{&j>&7~47K9>^V zuZ^&(10XC^#vH*>PGil~W$s4?tEu1YP=&+a99WIam|LhoOXY6X>yVZ?O=kMFz_(VG-Vq)w(k&VlbC=cl31)8pCe z&~6WR8AiC&VMzRP;j^MhCJQ@3m`Ly8ieLH&ez?nqF``Yv4-cu}GC%X%vi-(m*+4Qp z^3wCvV;e^WdhWCnrfZubDm6w#Wdz^&$3MD=h)PpK#n9AHdAm(Rg*8b-McZwN`9VR< z6Vi$P02(T1X7QmQg>;0@2+r1Gn+Sm-wywJ;MSU(C+tE!tUqWXYvL3;fYeNugxbE{u zLrbP=1$MDO>-s4KAZu=u_h&y#j~f}a4|uAgW@@fE-~CqIH&|552{^CGkPBviZB|N_^(%S zZ-b5xGnQ&WomXY6@5oR{0F&&ylz8a*0{D5b3v3=2H`bsv%a`Lz)@(ur{B-lR1-*b1 z$CoX`V{TZXc8&JnJTm~G$+XL93->c~ID*}o@kb3{2hY~P#;d|$fS#2}s z#JJodmy3T1VcZ#b# zHXD1I5k?;(*jd07yiIKM|4Xt(^N<*SwX#&2kwt8QP$Cp)6=H`H{CgDu1&BCYk$}&h zy=o1L=5q6h!U`Z9`29<6xM5XQmT+=3TD~Lv4}q`?a%Q(c#lt^jDVfs&Io4_w!wPD5 zzJu@dh+zDo>+TvXgcXfHe(}YAYv|}AK2coc@oR-2HKMS*|7mLRg?#ok$iRbUkaU@c9>ZhNuM4@F4scnAe z_W8G77#ACPfzz(64a^TKk=QHIW{)6{)0$#!TpDT5T005(xYmwu-a@aTkk!R?#j@_Y zqh5LRstn9`yDz%uSsLqji1nMc_DTiMP@JX>Gd5jBcBgHNhJcZD>V?5sYj{Qqae55{ z3NS901}9rc2aSZZrZcH#uqL1t-TgvH=NvesK?TuPyitIDiVvCk-FM&Nm(Xf_X+i^R z;lUZBR@jSn9eRkXI?rlITHU6SIbRw@K$G=|0z!8eJ7~$tBC;$p*I0R2ylyOLvVEOo zRdC;hXF;bvCJA=~+xH&@>;|{VY12+4ez;HmB9wzY3^pb1l#!EX7b4a|M@3h%Auj&I zUyIKMq)+agMg3#|5n7wp#muZaxesO`fda4OdAMI2+l)!-BJ>U z08ZOc!Pk)TyUnvE(aO;WP;a9{P#XVcQ>ny_@k-p{eSaa)#Tu_XlI;LrB5OK4DzJMy zcrGBu*o1Eug(jaF#DMumhmQByOV0>}T|9+S5aCHhoHbUC!jbOeYhf+Ot_15EcOk@* zNVt)rN6Bf-{p>R@87_#!QZ*}vROZ}uvp6G{7e7dd!1x+m4~{Jqz;jjFmG_Y{+m-fd z6NXrqB*AEAJzsbX|5ou=d^Ec7S37s6@ZZc}T(in4b&4$W4;S%0L9ZYq4aNLoYE&@m zri;=bpvH-xb@|3(kuC33!&9hu?xlw; z8dSZjYP;+o3LVP40;0&$Jqc@pPp-Ualnsn4Fv`}${dR!~*$b>ba4RC~i|sk00BzV( zTJi1_$l_ZeM_djzWD`x-q+*MPh?)2g4-C1%O+_I(LwMn19HJsbM*yCq<>04H!SyD$ z9zG7w(vOI)?~N}0WKlG401S@#J)_i_HPec-rc+Rj9eY#b@u%KK_g9Ux<0Q<-r^&#Y z>?JN&(I{f2SFtLL*SC%?eAql@e6PGz^;P31U?w|K}n z(6;6+;mj=ytbCBjb)7dqj82eEzc^0RHbQ5*b33osjJzJ+9@!Dws^n#JKrluWOyMC& z@Oj;dhu2=+0i*!my<6~;?*4)XjK$QMK2K*YBoVtMB4;R>jlGrb(TU zn)o9m^>_kY2_}lSi6}uTc@osgqp_#XYB$hw_sSfU-gAv-*9{KNL0{p)B6_h%Oypn} zl4}m~rTB3#*I?plxMmao?&0BXAI}JHHOFcZ;BPAr)$nspCs*Szaa4SRL;Z;ptZ&Hg zjZW>EWloaQc(2ju1d{IK;;38=;tA>w5KrLFy1o8Qnkcz~ChSS&GRvoxhs#~W+BJ8k7eqO_ zmaL#GpMQ>D|A-e~KFugpbJhKGL%hi1VZA`jRn=yq^d)!-HRbvy0f`9keki0hUiY>w zE?`9Se8ku&3Jf;_jS^9#)(~-mGu%nDD9Chpn1<6@BV=1Y-MH5)3_{I!K+bH;=7z8ufqCV8LIlE;VQIq08Q{wnwi_w@X;bkie?sCf_E zP(df=JC`jB1pUkBpIox_+ajt!=M4!{GAv6=LP>maprf9HWtm(Jb;r!v7?6mg8T>Y2 z+HS5!E$|G$8AB1%iH7ilB5>wJ-5^s^d2kVT&h5R3N{e)&C{HRqm2u{b*1?%m!S|Iz z`jjafl_n)YGE`VJHnw$aECVZ|9p^tlTxu0Df7 z8HwR@t%MkQ#)G!ZoWdlhwQQx%^gDXo-U-ld`Qd(ASed4|3u5EYGlb zS%?-@UI3!X)v}R*9*mP1GmGGWeKB#2>Vm6A^JLkJ?rz!ey)qoN@{@L9#BsDS9p9s4XzdMNf8C~)3@`K3yS>^WoGv=uto<->C&*W`O zBOC>A&*z~?-Z;z8?+^#38gqt0hrlXw)~A`rmd0Q-A74J*Sar=?9u+}pxO9#xVH%p@ z<78R=WTCOIIU+SnA^isP>Tj+7P z>S@@Ll4-KFgvJ#0$b?$H*wK~MISV0J{}4b!7&N43WR&2BEsgfi+yA+sp^(#Obl^t? zfF>Dn+&>;56hQJIcAo^$+yjC_x+)T#btEXj?|0A2z-@=mldqwN`S3MNLY+`?iD8@-O#R?vM_iAq%rgCx2m%@^|U3+c4=_rJg9nl$p_ zxBt^Cv550x1OBEY)v{|W4PLO9(EZpD(gVsXit=TW)2dakR+%1*LK(~t_9iSTOFjXf zp^=nXOnp(k{OtSizffFKSsykX(Xz@ zFSiFMED0BZ&OKWJ+XXhamFx1!RuqIj zZ^rF?xm!D&2ThSozxurE&ld?Cnvvxxj#3a?(5JxPx}&QXSv}T;t8nbVqCLHS0^$?U zH{Xw+K-D6yP&ye1+{z7=#-BT7U4B(i74*-v*ryKL>>VT1vX96GV!vM?Whb**na6pb zqHtoT%Xt(9$nTLszMA7*LHYeGY3;B9tpM0O<$1}dQ=2QAyykKqXx?o$&iftoEk8U6 z-blN$RT(kdaMLpI7G_ox# zX}U(ci3NbyWHpiryyW=E@0&hKaFt03H$J2wWf?jBCYyuqkq?Hna|=Sx<}Dw6bnC60 zfB(Dj`s=apQR!(T*73ZWC_))6bc%p`0#NAKy^({)m56n4` zjGMNMdycRyS=@_`d8~WJ8yWOOE=LJZd+JP|$SSa(c+b(Hc~>287uY4f({EeRNR|;Q z--Lh8vYdI^+4$=HPo0Dw&KQiSX@lhnN{t0Tiy)|p)M0K+xc-wT#|%S~oCv(_z~YC? z)utW-ORUM=%vmQi!rQ_x+)1)VMjvQ`PMPCj8m5Wx_wRFG3x5lgckoz@8(^Rfcir_d zT7j>gStuZT6-aWW2$1AlX;{KI#pWE=*fc|jIblBNR`qG)`miV|2z?|GcN!LN>V+6w zK6Z{8Thl^|jc*f~O#(DlvMd__+Ca|&$z9Lmm$HXmi{IFl##6du0cZM+)gPhp7*kR3 zU=DWcC1^o4Q=yXIuc8b%Nz>_w><>}*yVNC*syo&3gk6=^dGuL)tM>qoYp=l-beT4qCO3} z*QCqU(DE{b03@Pids`ypDSFSD@T*9>btGhKy32*>1-%(d*U00D6%^qqy0U`Dg#08e zSSye3mU7|nNJZXWIqjvHqE6}Qd83Bb_F&=Esz z-b?<8R2s6cI{S(-j#@bMlg-Oaz<^WY&*60^x)iS-b8WnC0nDUgAIYJ`WvKRI zF5pBMJv<)g`xg(WgfPRhMN%3`L4AL3gTuObqc)$%|IA--$pu*sSiWb@Jok*ul{k7$ zEQS9Q$%hfY8{dM?#}DX?WNpwYCK^~Ao_+tz2;u;f(zjULzXWFeMBPsMJBF2;1JH)p z@h$-1hU}c50-irKDozfCJ{WR(6QE2JhMOoCNX8(SjFf^<61D_~A)Fk%P7Z zYCN^W!qw>bE~gNmJbrMrlP}n9?H>Uf&CIRHZOnu4Kp%QYTsYdtRdd~kqfW0nnbvjb zGpS*Xe;}&{;dyzyJT3oZ5uJ9-Ydb@$j#?e$O5uplIx~qM+W!Nbr~{RtD|aWvz}5j0 zRXL{VN`R?mffmFdM|e6k=+{gfAAKavMu^Vh(00?Zk0b<=xhA3V(FNLWiDwVtkF@j? z3;tx9#f(OvI+&yk4ucWWp6y!rJ%av)B^IJJ_qV~p%|(fpQ)OuyJyNSAD>iAxCaQIkZ zxjM7GO0ZSWyam3A1w}Q4*9iuoeEh6QiBYC$Wz#_Yo4Dbw2T=6{(gXR{aQa@n+}Uy&1a zM)0e3Lm$!o7r3i~l&A5BJh~T8&5_^DMMncP^CgzP-V4AQEXjy@9dUsS_L~ll_KVgf z66Yrp6yCh~l*V@!&qAj|pU^f^wk+OdT-wW=(`wklCysN2NGhy9ihsrRuN1U^H32B!>I(`B)4!_co6?!IKi%HhT z9Gh@8*_RXBTb-^&aeO|pw~wG%cr_7Sf3COpUsPA)&A02OV!>E6<_jyMy_cLFOmv-b z>D7mzWlNXhYY#!^)+{GJx`nL}9)J6~#sY>W)?PgJK6@x<@h^t{OYxXcq@*z@9;uhF zy*7@&Kde%T-AuU}{}|4mr|eoZ$Ek75S@i3mG+MAlt%YuCIhUIU(%4ej=;1{g zL9dpNXsahZnzF`6ikJUZPbNS^itHPb+r_}q#L0=VgY-3#53+DQ0xcBTJZv^m^ppY) z1a1yf#M6hxSSk<^Z+fzE;JFSF8J%&033blEz|gSJD9ZE1Li{ep?!{;KT#u&Wdjns6 zg}(aAh{E;T%Z+EpGaBtdxNq}=HZ%i?%H?E587sMYdZ9h-XZ4?R1vk3NEihJl-o9?> za!wh)QQTAly`2#FeXm?`5XlR#9d7)I`njQS`otZ&3&X-|rrb8=E=Xvk{-DDdXxPx?Izap;oV>?nL|85TR65(y-_W{7Ji3fw z2JK|>)cV~%V;Rghv||}6!k*n)mgeJR-#VJ$NJF{0i|-GL!S#VMl*3~^-O8Q!-FIu5 zQu{l3W{JtJ5_s*#gw!eRzPBi?W(bicnGtttgPoF~*cV(@sr+9>oy=L;uxl2W>Mv@t zbr)ME=f!5@E#G|Ofhpi?LPD&KQYvTRwt1Yf>#P3&evXLL85;_Py?fgI2PXPe{&BzQ z0W}&<;SnqV5}g9^^#*|^d*r;K>aBC`zC0;1a$U=h*?_W9ZAz8aAeB_ShLmP#WOp&umTr2@myu@_?12wC36#(*xUFy|10VM<2xV*93}>z zLXo~)9p7$hGrsde+SAj_$YqS*-) z&W9P0nUtU8m7qan8oZ*bj|3@z$aH}uJ?8flb!!_`37?wKc7rs!i;z)wtI#1S)8PQo z3@>p&fd_)YJX@eMaDJJRne;V)lsUc4+N;&(S4avpgOlfJLAcSk1F8CRXI|{E6Q@d> zRd`Xo&P%6}fym1DJoeaI60y&8$SM8ML{^WVuY1nC?9?HVmN#RJF1=sBn z|Dphjcw&y6%Mr0yAWe+~AjZmN0ml<6Aq!6eifw$1L+AW#CKtpZuRkkL&u#}-77Z`C z{cSnZ1#X_q@UIaxrWyzFDXaTzBC_Fw@ew9cG-?#N_|eF)fED2 zb5gC;fCjXfJoM+ zGdGxNj7M#bjtd$Ut)e%9z5)}RS#0|44%V7)cVd0h1P7DVeM*N8!&f%mCTUnfTye(V z|2L~u^nGtHmgf~#UWsQ$mzESRX!TtngrWiw2Nk{#orl-6WGVj<$0VS3imzURKc7n} zC2lvFRs#tL)g0B78mM=QrlXC-B@tM=V%-e0|EaZ(9)<>ujGPt09U0m>qOMCp2bT#1u7-SF*M?!E1vsc z9yGC#IMJ9)-uay5+eY4VG8G_DGOu|>+S?Ka?V2#PJb~NrJ;9VPb?XT|M)`K zNuY@rjT zI;B=i!vkHY)iS^=-f)l=K2>ZSL)}=!Ys#;eJ}jfn#qEELf_VUxKh&H*nh)%4Ww^p> znm9;Gl6D~;0_;X<`XJfUBLu?Lpu)camI$`PTT9-q=G#UhK1nd72Xi+c>DF6Gl=&ev zK(1gwb|~%1pP?6T!X+e&z)D{8uWEf8uUS&=1NMt9B+s~#_!L^GLgVQi!FZ1=moKSQ z@GIR~A3w!+SFlV87#V-zhs zqFVt12M0@DI=y&O?uGnQIV$_-KmYlDoo&cuGLJkfGZ3BM625f!P_@V*F`cxKI^W(%c21Q_4~}tX#X#4tg^3v8*)WO}V0IVa8pS75UB}KD2PneeCkp3@GA$= zZUD7g1-rJthT|51YZ|j_%ZP{&>%^tBHSF;;7x64;FfN;N)s)+({Cr|@3udO!(ZP}{ z1^VtVxMXMwDIj!fq|IepFF0K{7lf!(3T6!iOKV-%7GIJ4nZRJ=Z-5v4I}vZG!V}D7 zPr+j{e7R|Y>wiQ+ky16Be zxmVg@1IXH9Y+SMH4p8Ba`JCxDSHIXNAMLZ`_R&F$(mFUwJ&u2g(9Y;FtGyiWs-wb% z3rnCgvwZ8^s7NXXT}r8om}zr(!of>U3SDze9)EHpN6N48~}VO*Oago-~v&-Bt(Z< zO}040d)hwbQP>xIYRdCdUYqjHl=r86KIK~yC&~!|U=T&t{^$-Bo+k(+ z@GY<$04EC%2bXjb&pIqV?dl{rxly4|#(@Bmm1D|L>4*oea*l3yF{S zEc@K-!v7oHLA4F;ue<;LYeX=-n|4GINRR0igUTm-=7PefC?KEp%)`V6{+e?gzdz#S zhi}rS*&;DF#T5&6XKde6goA}s7V4Ffun`HkhAyF!58wv-_>?&eCT={x)^^rekRpC3 z7JF3F*7ZQYQ#@=yCJ9-q7LU2MC}gRdyr!P}t!Jzd>3N5r)3H6xq6F|TumlLeRU|Nq z5r@TB0>d2`@e)0s&uvupn*)$CB||{248#m#mIF3jq%%)jV1@*wopw}xlOOC!!iwl) zYj5%h?9$M~TX1$+=8ddp=2R=kIy!w-CZplaT$vGzhztvo*d;6^;76BDMX|BYg)TA! zu=U!frCv{^DB;3WXB$K|fqLMmAu8-P1t8pXPj%}9a)%<0O><5(0FT6e!C`24he%G= zr9iaRq~J+dYBx{8VNqP@m7KrbZxR7L41zTnBkhgRKD=W*Y6u}S1=uoKlOX1@WE8ZK zMwc&{ay?V)kotzyJA^Jk%J&v!V1n|~8fz<>_khS0!;=J$I0VB9V($dn1(hi1<8clG zJiD4QHvZCg)>-G0-E&>FdS@=DF6g4#pgOqNFf!XKGzz@4MvdP%Oj(fT&L(tS!jz!% zD3QpeJz+k0I!-%Ey)LgRck%6Ff9}e-VR%j#2>o`>8kmlFFJ&4h9b{glt}NiM(%W;? zcX&vP1*|iTU=yk{^k3akO)L0Tk)|@@!qYtRfWof~QAe9iHG|F2gJ)C1Ykw1mc~aMd zTUUr?U7FyjxzTMHB9KOr9i-L<_EF7AEXa?UIGZ3@FMF6qIPN zk(HU_LE?!niV);Eg0Ya?MVbg`943fD5L@U#M-m+ga|}%=0TeNkP@&T}@Ka_jfsyHS z^fq>*EAXlSQ{w&xr!84hV_3x~%ubmLQ`R3rS zgFBvlatHN2eyVXZH6Qc#e`V27$m^59mDU3sP4<@<<@?qQ!3vV>3@xuE7&6%o3=V?6 zj_^K{PL7-c-C)r0XR3J>=`Mo4h^=l9KEfNfho$yUWNG)h1lE(Y__TU3Y zUse^I#3R&^IxDXB3AzPd)Kd(vPqSpa*kR{28h9IVtV9c@Aq7wAwy|ML(PbB&UoJPy zpMUN{LHzo}CgSz8xFc8o=q92*)+O#H5&}Z%@#1e9CsU_3PDQiR%QC-^<&W}01ZKMq z=`b40I;*ZmeH^wWRU(T}lfrLQ{!pX_tU?Ok9b13m`WR0kXB95IsB&!M8CY7LSS|ig z+!l+@5BO|Rd z1cn57^U=pRE@=lBkG2CNZ6@jB_oY|d%e)SqPq;r16pLGn#ok)Yv1!wzsQ%bvn>WMG z@cVuE&K@Va9xtKL&+sBRp#vDmr5Mg+IBkMNTJ&Hu`UujaBeI97d`^b z#n&y*zmr3gMfCS+>}D(#^o%_ZnUqe5=ufPDF@&rX^z4KeM4Y|IM#_0m?K9K{xFW4m zs0EJD*^PX>6{g}E9^D1NrJ?(P35PEr4NcJ5$G;wqrM;%7Gaq~>spaACj%)UCXPzU% zk)Dq~Mx1ZIRe`m@JO3e$_i`%J`1Mx<0|1@i?a|YFsme)-1(ixgi>((8jk)gX z705Y83s)rMBA(VDfY#5#(Hr#~r%T#cFga)K_iTvzSMCjX6Gl_0p2xoemDhiV-(>@K zoEED1Nd2Dhg#OjTI&kz+=H~Q0DHq5iagInp6>A2$&%r*Jj6|*sQKE0L95l`DjWAvd zkdt~KClM58HDn}aaTDHi9bA{z(m}ia4L#wZ&kh0}y{UN+2?$+61sZRNi6HV{>h-aZ ztG}YlX$ti(K^XdBcpZ;k!I2Y7mZ520zFy=WsjF*0>%qUn%JHL+;V)=siv4S=DM1do zGq2)peL;|&R)*kTPYw)h>hDkE7f`1m(h1TTBB>|9;{5*i_@9kG9L&2n1BrX>8t{Dyxn9nZbcom@newaB*LXOL ze@{K5(igOPZKYP^7fbf`MbW!M2_&+G&$G%9-&Qlu> z2GwM=q!`6OIY_FKSz61nw?+C|1JjX>u=2ixxl``ed9fzydU8Gt?|(9*JT)P@%7Qya zGSftDzb}X~xte?XM zt$fR(V>ccQn8{Et$$V5q^MWRL3&Ri_kA*Bp5Up!LjP-U}(E{!q>EsCr(e_TO6dKnJUp zBX|7*#IyhkRr3oG{C9|YJ>r{yd7qR7x(yPuR+SipeM<#D&=Z#zOOK27upld!uwIs` zfJ~^A!kInw{64364T9VebU9T*iD=crzDH!_U@=3`^>rLqQ5l0g{Bfl0Wg{d z8^CHs-z`^r7A*}h#wrVZ__M~}1e6tj4RdV?F<21>S9v6!)uA)0)tykkJ|l90=eJvS zlqnIG3(W$s-PTd6NJJG@$6{*qi9(?9foDhBD|Ofr_u16!H2zlJ{Fp~VK87#G&!9Yc zp|$kqbH(B#r4rq{-#b2VBb__3cuqmLHUl8+O)!_Z81}2LnQ{ZrChiAR^VhU#5L`>T zV{0B0ECuX&u@crp+8cHvq2O+U1v9GnuoYuv}P1PgF$;MchMRl1`q)Czp14RwcMverTTIiVA$H z8$QJ~b@BL|twGQ1spf!rbj~ShzMNz0;EMSO(gE9SVH>Olw$(1)kOWb>5F2P3K1DWS znY}CoODDmlGmumyj#`SAj3KN2{+{uyPLpqdo3npeo#jt$NaJ-79U^}~w`M>&^EJHD zU?Qt*C{RN-ngR zrbc>#GSKi4+PhKO;v6VwBsPIOQSq~tU308z^QgOV-NDue_s~|D%os&Y?|hR%3K6vm%w*ID+K>Oi0T0SAF*d6uRCkC z)DX*i&+t|L=AzeAAY+qW-m)i{3IgLS;)Td`<~nwEv~SgoA>XF1A}ln^x<@ z>=O|}@eF94HiG}yDYP2S6;rOBa_5vsn(Y%gRCrBb)CAxr!2%)$2@??6$w*|9^d!(s zC!{A;gfheA7blGi(pUwcM$NF&oWeR8_%}Qau@$#Rp6`Nx-c!t`O3_K$f&x5;}ZV-7K;Mr=?sP?6@ z+}i_j8D($0|9;(e{yMf&$zOfig__=ZanPVmEE>>lYXBUWU_yX>Z zx_;P4c1CBMSWhr zQgG$lbvQ+C?$@&P${E1Ulvo!ZU%}f31~!wv?|JQ?jiB<+0^bH$OXOXv>|Wsn8&|e% zmd0WP%>{?PP)6SeR55i_lj!R-#bA>%7vKMLZx?uxKwJJY-IgcXBt|37TRBk57>TRYf{?u)Hng zM%R2ST7Tzm(^L2l(BIlN#QF>*UP_>(6mx=-k^!o))gOIiFWt8o&Ap@csX`X848m@Z zz>t#vh1SPB>cf9rRF;%ZIE0j?OODIq!!LRs0g#LqRKUd8&W03X^;=C`ePmjJ7y{%* zB6@D)lKmb&CCx-UPZ~-P2i9#k{4YJZ;YjKr)N~|5hvqkdUtM0P@O?&shN~+Z z(WMo2wTpiv{_3~AJh^`bt4dtGuLq`jp-ko~aLN*zlf5;Q<4EJ`PSF0!`dBjQ1A6{8^1PhkF~PZhSTe7PuCp|HY;k`udJR5&R0g&PR{pUO%O5e12J_0{?7{#o(XDMa*Ie ztbmO#mh?V*7;N4RB2P|YltlS*>9$%8l&~f(jFi)0kDSO`WGrWH!`!)vXYgOat!!B~ zyE>EU#{Y)d;a|3G+jj1`=gy{Y9kXQjfrQZ1VaINzEVRNY1JMm+YP>IGtGsrjVQ~R0zXY5TfzY=XP9SFKtdM5 z{FbNSs`)%4S7hYzc^IcscH6Wd-`Qu+p)I>islpkX{2PluP2+OX_e!Xd*TE zQ8a;`YzAFK_k(u|WR8o3kHg!|a-Gi35RN&`Z(_bV zL`?)?rmSy$-M+MZd&|{v2>IF;*brjr#xn+b3VnfPmY}V!j3{cUunGhh*|ukF_FiR& zs?IJ;+%9_Z1lrMqc1sadYKr*i$SFOn@}|U-DMP+s?lR|6*}Se>7nIq|Xl_{7$&2#5 zuh|@ZN;@dl3c{P~?9#^AgWZOF(cEb&q;pUO>HV?}Yr{1@Q3QURhfKY|ZCFhuk@C|d z_;f{hGVuw;qF19#41__5ljpC;)!pVy6kP0s36mH-0hnYk=a9(RV6!dsnNl-yu9xzm zhd03{#`^nEUv`euSTT4Fb+ldPU0_w)7yis=?lp!@L--e~gKO3VI3VBUTfEqFlS}H8 zd*%M=9GM`=SMtz+E_lddr`ombuxnKQMICZozJyi2#T{Dv(i=LhgXXX*8he%_7ZUwn zl+l2!nM3VdwEQYHe6dnnD1QH^@zG^*b*V=Lkqfl=>S733A_LI(VKyOP#pEg)3!x?W z7Whn6kPtG$Vmw|yYsXQbe9@g0DA-d=)bJU%XXPs|3j_Yqb#AkEyqTVcwR#Q0S@ptW zJJhDkNMyq<1OSU3He`<6J1RSBk zC?J{@pb31D7F5*P;tp6N7NT|c_?9emb0i{`V{C@=rSa1)t*X>Sp;cZnecH=idp&Jt z1-#yCgacLo@au6TN(6syry#d{Um4NGl{Ehz4$j+r(_6iMtDr}uVQe;yr(aqa>Im@3N{n5H$Vv)4x2w!$}{%WZqr%`ANew8JwRp`q2g8u#! z`ugJdZN$dvTeG7D>YVlpVJ|DByOan3N*Xh?FajBV{tvxH#R4Y25y1UWn_t=}z0l(l=1o>;^>ruEBd67=jIOITj@H9w@$WziV^x!OSsl<}cy?Cut zY!_ITpWJt0SP@Ys)G_Q*bc~uc<}vE&fvv>oTk6?x=?tpN7*TkY>BU|8fXpNB-dMrL z3c7K_hWtPID(|RSp$3Jg2M(wSYpP(7!+x06uCht!1O%>$(lUBv%DtL4WIG*D;BjeN za$-bci(tN~T}TBal#-IWwISDI^GStUp3Fa;Gz1;I9JeEY&oA;F&Wz2mx+>Okj2*;8ljyZc z$l#mX;jwYuUO6rtSoaOWdrbGuvX=0XRrH_BF1t*VTAX?jy_j0O>4qC_m=+cot<7XrBflo?Oqk)8TatchgYR(Ld0|m7B*p6+jW8m1c`>;LMnD>%E-xXvK;LGFPBCv> zr#M>mlTAu*F=$AVJDik)ERgv6%)%T?Q<#;{=U*z|ZSeosiyvZLa;I<6lDRG@OKih4 z$Lx3B?p?58wo7E;TZYC)?Mu8PWi>F$41@FhdakL%%?ek4wqv?xuf(P=4jLYx!Dz9>nIqPS4^dGYRroLM`o=&MTj z<_&C>insonjs284Y6S{9C9+638kZ$f@~9e%57uPh)6&8URNsHvwtRWwMVG`m!z{PV zqW&Li-vQWGdA05L%G!JHZ4FDZC0Tn*-i|YEXE{40Bmn|p1dL>AV8t4GQvm# zG(drt(gN+*7AXB%M(NkGAz>CMP>62+bFOr4IRg^%+qrRU%dvFd_dWAD&ojf=GRI+a z&ZGHq&s2-dHhizpDlaJPQt~g^{q)x}fefEFaM6D?RRRhnR5Q=#8>*@KK=kB}m%8vmk*2d`qS#Ucr>3|w>43J%Ss~IXI;FIco zdKq`&W0Q#Xpv0$1b0#K_fzvfgIep69$w&F1HO)<2^OIOPwiiflKT&xnTU6Ge>OV{L zZs05U+GuAQWmp;G2?+m^OP+eFM9H&4`p+4nJ$&P9%w_diP~k%Cr5pe-zvc8a%n70K zjevvgf%QWg>+uTrmCzAkKuEZHc)|H$ChG9ig85~DvXD)%d^o^pS@Mx z2goCyV`k7nBf^v4I-5WJmhuf@R7FF7{_5)+*GkIvqZq+4}%q0k`Wt94?(-X#_qMG_Ys zP_&OuHUa`f+cn+on_kfh%o4+t(Kd2@X;rx*Zd(b->Z;w+puV6D0lOGTuen6VQU$Ws zcbKd-byY>6R5ttO%=MXy1w)GAjaN6R_QTuODw-jnvu5eVMwqof5rnAg5p)d{E=$MJ$SgV}^L%!by7ysZ1XS4s)%*xmgT;3xeFm9IYCMvkMeb|XgS3PcG|P;dG* znN%#@{i|ioN+tiOCvE}uw~KoBcK_3B@6xuayQ(Xz)pqoxP`Rvo(nr9PZaYLz%IW`y z6BJo~{g3kt>k4y=Z^j4H)X$7dw_TCoYjyna1$WS&z%;uBGN)@ik``sF+)qsVdQ6Sy z&^=}inqFh`XZuV6Mv12e0vxA%8-sMF;I3hjvQ}wi4ieL5g0sZ*67Wnh?IbUBnrpSl zBZ*?`wi}N!`->?R3D7THZJf3w!PAT4M@={MIcF`2hzx@8;^Dt7+VbZ=lgd#y{PnN@ z8_~A4N;*{Ce+}EZ3!11p-(6k#gCbX3UC`7jA@N>$axmH~m-7RiZF>h~vHq~oE(uja z)SS}$?MIEefDq0xZ)Hc~s2L`yPi`AoME_yKhTLb5;9s`{9Iin$1cqYMoLgDM^4-l;Vx z#>&!lv&;I*Ln-6kN&Z8N+sPe3)Q*1%FTdQhbt`Gzy!rn7fq#XR%b!u9GCf>sA@BCk zw{_8{PlWp%;%qFAkR)K7%pm3H3f14IMl)1rBA2`qE@0Fd%+dd#ezs-){1>2G&_zG? z0|<7E`5ZX0LJ1r5(mE|HpJ6kqv17)^j#X`vX9=S+dq#~dtX5cs;Bh=W!P|_nO9GA? z6MbSFQ$H^3ZS}FY8$KSgKdVJGb<50v5y`zzKYh_fwmeVmwsI5-p1~sJS~D5*BVdk5 zq`SMTYjH}Z<77FS-180G_F(=c%5fw8H7%nam$ojnD;!I5%FrUG(vUA5UH)_VyfWExL_Jgl zx$jFfP|F8#?i8urklJ}A!@7SyG;o+G6JvemfWXJbypYWYF~h@gHo)M&`Q5020Gp66+}nx4p5`jJ2!WC$L@R`-2dC;=6X6vn=3mO%-PyaHCIA6pWLib z3r^fZKUk^!sh^Tr{00%53wo>_WsjmE7i^~Y{1CypkMs1LcsfcxDS{9F>YU->*rVhv z$ON5M=e(*1`Xec!ibr0TZKc1R$y2F$lfU%7#p5Jiqn~_nxv`QF{r^e=Yx5}2HMlpd z-arJDh(*9UeF6Mj}MbQ3Htcqw#ktb1dENv0MK3E^0n!GdzxswyBV>e<8*crpSN zK@OSquaUn`zZBV-y$GJ)NLuM@f%j|Z!IE>{iWta^@uN#;ZqM92(mdt*BKcL^J=_w| z$74UWp0!wF5-dB<0Z45I6W5sc_56A%Z~h|#-;wt{^VT|wTb4KfhO4TgX=?;m{3^YjRK_)|Z;ol}+?xSd=bq59+&sLU9vbAL!+0hpvQ zp1x04GH>Zu%K4tcQTa(Z%Cq}AkafLUu8FDDnnbGtXl>-WG?6y0gXGXgxd8A`qvgYx z|3S{f^`j#nV>f46YHO&H3GC)frd{_??EM8~!UU%6#!(YITKnDqdN$4;EbRXsq+LOs z-QVBb-Tg#f?dF#R4svX_$_M;dE%Xw~+(WPKy87QRLU$T{QJlQlM{n)+kS+8oid;h< zOJB7A5&*|@7Y{j}4_+B*9Hi@ikUoX}fD_f4%X*WsD{inC^m={QG54%qtzWb#^XCjO zr$Q#UD*+QD8yc5Epf^kF+|J)gk2p3`hq%yf6O`0U0550Z3R5& zPKFcVFHQff<;83sjC;QU^^Gu4Hm6ObJbG?JV*yuhe3Ae&Gz6|F_QxxLAjIK^369dljrDI8~Gibxu~ayz_3S~NH0kX)jZl$=Bqt+ zu2w7XwTR}BDSZ0Db!CN_-_qt4Y9t(-H*f`b!B~Lj52-A{R8FPT$z58pSx)!@r$M3; zNJWa6$fK?Fxd71R=qcrWmN`q>K*A%mXx3*w+a#M!9S)r-OH5CR4E*eHQl^QRhZeRs z%Xxu0ld2m^4=oVPysz7f(=3NN&781g8E_dW%y7i1RQA(2CH%dW5_^X&67!%-M86wf zf99zj$WlvZjY znE>(T{X-TrzL#^ucqMnsGS$_^XD+3P-M8AvE%3{s{fNv{hHu z1QgVn(08tk_nqq~12q=YBm1HZfDOJb^Q;9kF_Fv%JuH^fdjW+$iwT~VfssB1$~7CA z%{mr9u|d><40LTjLE#m47W`W`{sgmRNL^c5U58jLgo zh5Ud7N_CS#Afcz{M=6Dwm*X1$T>u56gv>@iVi+x$r_3I*gP^ZvaKP|+16s>bH1vo{U%2CprAm!hjF7Lvv#tr3HW`aDga zmn185>vB(}sb774KYb#lQUG}q=xm16c5G=^=yH1kC@MIV1UxQ9no|*L1{j>OHfp=m zP%?Opl|Q!V^7>YN>1XuI9~Rzd9H?gGTY;!$(f7!=7L6SYiFvI9Ixg`zjyMQ2>yFGm zEB9fo07Jy4EUA4Q#RMQC#!|S#2km&WKh5??_j4og!}y;ZiW@nrukQs+LG3tGdTdFq zYwm2;5@Em0Dk(|K|HT!9>l$V+4B8KtwoR%xPnz*O;cc$zVk2&@eKhPr+>9Qzq)w4(pc1K_2qVrJ+D(5y6CHl z#bfjN4*EZ3ZFHqOXqg{4Um*~?Jpw5w0yIx8&U*v0h%T&;wOB2clF4PRbdueT-ssSR zg0bMN&Q*f(G#>`)Eik=UgE;g;!)yhFVdpd2&0Cmxw;fGCZ+g1v&*+L^wiGUAEto2M zO^+E%MyyQP_P@>q$C zROk>XhuSachdHK!3vca~EgJx=v7l$R+8RE3)M~SgE;pGptrD}ORc+Du#TK!Dt6Ak0 znI-Q3>UANhLDJUSEl_f8c94bV60u9hb$EG3tBLDsk)8H$n4c5_zm9$R#?4c>T2cQ+ z>lPSyn~%GB1xQUauex=OZF-O6xFLZ>GI<&8-amHv{-#bE)$Hm`bt5R*NrAQOXz9>p z5w4ckb{_pDcW4DnRKQTfFzL6MDiyQa(%Ch~Aht`bGUp3=sas~2drs1eZBmoOsRNCA zi9_c6%OWXXV6y=gPO(+$vYnC1aCF_PCU+n!G?Y4LryU&&`jkLKE7T6HOkOJ~ua8K~ z{MKVh=J2=RcuQW(Xzu)SETzM-Xg|XdRR)JMouSLw-|#@BiSLY~8B5~uGbmrBSXaZx z`~a;6vuE^U|AMj%^bOc{Q5}NAJf`*?h;b)i*Z2o8J_kYHlDEkY;9iGIh$HK!k~-Vv z;eb`KXTy4OGrgoc`)m);jV5JIPiN=mn5o~%GYTD@#e{2NfNvBAXPxv(X$LtmX6Scv zO+rVxFYcJz$~OsHhu3~yd9ZpP1|}g?Je7gsDfa9=T~93LjXu;znxSbg0>xA5*)_$} zjvi1vRS8rn_4>k0OM(2UtX@!wHH36xd21;ztjO~J2hqnfKYiGc>nAl_8215^2OT4J* z8Zbq$QW$h#c@v{zJzQ)Mf?vabH$=)$c#~!(UJeg}f$`w2KVltO%lBQz~WM zzJ1*~vZf3m$Ak~&DXk%aC6gu^r2n`Yu%1?oU%G3_6wM|105l` zbR#NCYnAbSp!`w_0^Lz_+MMnHmN}HU)+AcfyPxPruDmxbs(3BqstkRx(W zGKvjdR(kW-UxV)DtUY=opGQe75Q|EVGHF2lTbB+31%|X!<&}ZZ(8|uvI&QT~*1og_ z;2E7PZgs*8uc=Zr!E7(^!E2e81RGJ-63-fC|1^NmA%G6)$T5~|l)uEIi;G%MH*0>s zu44;+W_%EK95m0&ufQ>e^&87sSPm^Vebuvz$@Zw~NBajXHU)xE?;>Lbl>EEsb1UTS zh&ljA+e_17wHJE(?xkstzL;;;3KIzx5u|~!yvWrEQz^}zDf95s1Wd-pm&`cJJbiu; zh!TSHr&~fHzRBV6RYQL)UeV-u_miuMl#J)_Dhs{0$!ElBws*vU_ zqod?+Mr#qsLVFEHYhJ4|bWdM&*;2dE#5d18W7eX}me_&F)H1Sx=4rCW%?8gQ(obF# z3e6tS!_bsvWLcC7iv5EIlcu{x)H($|_N;a4Gg_Z6uXC#-?W%w}8m&HcBr~y?EI&|Z zD;GnA;)eJnT^CNB4@j*OVCS6Eghci@mwh`-TrF)L3ev_<|9!&YTdnJChKG`afKCQTplwklJ0 zu1?^H4jDaDv}Wz(djqwv*gK{e4AGF(s2w2gR#n!?(+k|mIcDgn$Su0*)t=Hr3%RrI z?RKHB@gb$9A}V9>)4O6Kop=mCtuxK*L7A68XVj1|0{}mY16C4_xzqbibtg5LEWzIw zSDyiSU6`iy;xwf|Nc~A2p6B2x*ItLWqL@^y8cS}rf@>iVW=m>R-hA<*;3ZUCA= zv+^7IWY85f)0gjGdycHTpo_Z@)RqrkT5HI4fRmA<&&}%$N~JAgQA=_#?2Zh^B!Ded z6h^bukMgg#b%e;Sq?eOJ+K zJkP1EYi-0*%0Rhs>I(x4YzcLbNvbtAg}{D{pLT||1(s}Fr6dLG1vZAyhh73wZLs)y zZr!sqRLkIzje*30!pVb`M9=H%J2`6@Z~>K}yFv!@9arBmty!kvPrdaL`eI7cO`p_x zH0h?F*wEd5bbT1FHjwuy-B0*oS8q{YRA(xW70iP(yh5|YJH3aF{-BIw91Ou3SbwDo zXcqYfz9wNZN2ca9ICr7!=z8-fOP7XX&h5%=iNsN<)U)w;l)laCQFwhSuhQpBdvqbt z&9ew4E+2J7Y~onV{vU>ec)SO0Y;r={fG0K2Ollz@u%_U|fQme@3bm#|9cK@bMeR6Z zLzc1P%#l2l+9t-42tR_R(%5y7gn;_L*IuKa!RFn$DR_H~nqU1{il|=6I(P5d`7kMU zNh1yvadHN#k%@iqgLrnT_~eU#KKf^6BsLTuDt_*3q;)YjO3*x5@n^}7^UuA6{&9t~ zBuk%1+8+mXUGeC>Ij&67oVvN{{(j#~-P8pVl+S;`ym3Y+61Cs~s|o3p;HZ&W zOa{{uy88Tj77(~N$BczT1XpA9zJ?iB!Q(UTg5fjN?wru5V}U=+Y$N*0G5wDNX@8*U zWJ7*fSNJRe?-&Ij&VibWU2Sej*Vl?#GOZ;oXy0x4Z|9EEy~R_>kLi;FDBuCn*{s_x z2=!z(|8%lQ$4{Jk$_hrnV-s~j^+&`sFz~0m(hiytRv5WS6n4BmNVc%!z&-<4I?1$Z!0<~v52`Q0${7Tsy{PAclaAZoJxzF>D)idr0= z_Dn9CjGeu=X^mQ&P=j7XyULc-s&skKnfy3KZcNf^$jC$SNmr~t=TxSr_Q+UhRBMCU zLB1I2#E@7Nv9Ktzv=3hZ=E%6=(IDXsf_^ z?i=hemqx9|gw?bdd*Jrz_Sihx5;hpCBB*K*RMOey5~sH&owrY-_@!6l=aZ0gCXs!QOS-n z11iS@b>EpVpmGV!_}x|O8u?&#n3Kj-IKZXVlvJ3{5&&YT&902cwG$tJW!(MU8~pHC z%jgJdag;rmTllYk-4tzI83yEYXx>kzQA&}+&a;TU8gfNGzhw9Bnm}O^AQ?7`{4*!fvwn!LOPL^;O~~3} zCJA-JZ~mHlrCs9?!7!=BY0-$th;wM91(clHSB6x~H?>X?Ogl(iCXJAq=A1s{7Mpo( z%YyXr`TXi!?&WMYMsI3qRrq`=zp>cm)3?D{w}~WfKV@hPY7VV-3#cSL(1jHAU}CiZ z_4{qTWTGD9aGb%ISmdhO%rKSR4oqbaH9gVvYpC7+19M=b!IdGI{PO%R&o^0zI3b-{Yba#M)pGhFUKa+K1G)&cIUpT(;?ZP4i_X~9o zqsaCKIg8%NTyrC_^DgZKfOYA@)99aeN!%`Bv{Z@94A5T@J7vw<_Ete0v?T?ZvQa^v z?Wcd&^ER>3Z_=Ob-Ak6{DMP6MVA51lWlHmeAo$b_!<-^utTI9Br04pK^vC)939TKQ z3IN>pj|`gmX1j^&;2A9@fz2li#f(5-WsC>Oyr9M}2noGaunKf_!Z^IM^6*0L?E88N zNsINsxF(ZrtQF{@-B6$d6nDAZkizr{b{x>O9UV!;$U8x)4(69lLY`c!Jw+TZ%&b+<~4{9vD&-oxOu5UXXOZ$V{tB8WJ83i`Y@Q~pEQI(4QGTDJb- zehAO^1N9t2-QSW2DjQie1=`?E$zn2@yeE0)6`>VNVHXJWxk}l5`GtWc3tHea>(m*p zt6NoViij#YGdx=_u!t=ylk}6B%rV*QUs9Hr%d&t)85W9-i zoC&B(*3^KS)e%G>KQ9#i%8*o%|D)Zj%a>K?&!or~4A*Vs2Kwkd?X4r0oMGw}gM&|# z_h_T5%-8r_Tpg5GyejUaS;wLvxTVmX>MP})P&>K5+fRVHt_{J+${5s6fV|)fkie2e z`EuFWr4l)K(0&{J6y@x=Hcd*~w!KNe*x7kPr4pw9-Rd%C3{V2$^sf)*a`gY^FT3jE z3|AuNq&Hr4UWPu_Vb3asCV?^`f$B#^1>BN{UaB3B;x$crD1We}+S<@LmfULiEQHrh zgDN~0ZBf8r12C7>PBE+*rdLq!V7vv}ZE5^;%Ti{m>0B=V|sv@Hm+>>G8H^CFEEPzL;ZJ#eAD|(IoI*fH3LP1`n3|_ zdGuMuZS%OpcU6pN!(E8?kw)ZN5+mxj;!yZ%fBo`L%m=t@0L+B4Egp=2&b& zJpPMVtet*11|9pd(j}wLVhUHGl^&^Y1>iT1a!YFBj_eTR;t&9KnaY)^P-E&g0xlUV zSI^f2L@iWGqm0hLlzNT*1YondsOd7mYarF!tpG225Nf5*g4{||1&k@u$uUO>Oe`AM z`g$DXGd9>yvCB4QcG+3yeW4uemSF3ssTd@^2tQ&>I>s81(*c}T$@j4TCu}IR2<+*v zmCC-GK;m6;EIo|WB?D!(Ut@~Oa*DLm6nUnsY13Kbik!0Gv8Mi~tm`m1^6HGHztxea z4edYbq_QW5pKCu2KAsS{v)wjpNf-*J;e|7vv4ob+u~@9LmrT{`Q*whMVKeH}3Zo*m zLvKg}1#!xvH)fOuReD*8;wq#<5hXN=c}}~}E2YoO=by>vs}I++5PuC)bl7YZlxyqO zIQ=ojRT(>Urli(jtT=5YgW3?)84?ebxJQT@zi3V zOc7E`WR7e^#W(Qe{tk^(9tf&i)NMg}uOFm1LK5pTpTHyuh^;621x86oVmsOgUk{3{ z&zy95r!~NramvA&_imv7s31M`b8`RT=P|WH9MW1~w|9FzYsFbzZG!+Q7UTAv0vzMH z!@L!vgz=JGtyo{PC1`z+1*euPyk92}?B7l}|@$jXS?U68d-9r5w?V&707sIo)#eL^7Vs_b0An|*IDp}s4S%p%_})ASR^!jTtt z&f$bA5?FeEsQS5AVz~Q%0HrNTzQ?fQOpVQ0*w5wF>qCLQJ zV}+DQC^Flr@ZkrC7A83Cgy0aEOrV3)h$=#q2`i#F1Vy2x^^(xpO_u^k_H|7+g7)nF zO%F6Z)$|i_I#)GBM?I$SoMGBIX!Oc-THhk;K{>7ArLIab7RKZeiFtHOxeC zG)Q6frzS(Zg%Ixy2!M7+$!n6D* zw#m%u<|s#Ppas}9`mC?dku*+Q6o*K!W5JYbp~V=1zG8Igu%)`W-qP{z-5bEHSr%z* z=m=!UsKoKS9#Q? z?%uVg_LWOLI`8shIPI1`Q&Js{yi5t2lYA-n21VP^E}dr;IZNNZ(ycaj^&V%A9J}13 z^{+f$+Gg%HKuPBh_*j92ceC2w+i5hIy8E9m-9{fMaDHHr86rnYmm2%qCfJiVf)X+lqw-;o zV0MdTFN{MmDMtQWtSYnqj@g@x|788v_*V|)F-NlBPVed24f9pM>+GaY?ChLN&8Tkg zLZmHTU%dP7g3zn{SNVD%Bs{D1h1 z)o%)9ewKWir}vnYA-P@IzKWNb56Bd*WqPYw7gO8S>D9c62=QHhVlTzt90XPUh*i9DX1Lo5T>;7fY~3m;`2g#KZ!%wjiVTI-MD* z!^xpF2Q*c%70^R5UTPeY&0!$f4ImUKxv{h_jef}sv%YK>sqX3+yXN(>JBbaa;TIgp zv3V0m5;{FcUZA6oS1R^hyS}Ulw5={4^q3t!HFqYN%B3G5>qX*_Kq~@XZ{FS}n1KLv zq(cBRk0QII+3x3gf*z2?RJJ1-AY9LoQ|XIu%w*CoSFff;-Fr>ko{^-)Y5J*z(Cuos zy5|?*KLYfeOhklsX|vtMHP{VYhf`X8@{qb92hX6WZK)UUKQ$JiccsoccS9Ue*U^*L zuZ`Vk4qES~M2N~R=$uEut{vzYAUrXnT+n)^_MokEC?*tZLJ2!u)}Ph z8CL{nnB3Yv_W~(j)dJ#(F_*+)k$->RgwtMYl>lAI7}TkTu*MCxoq;+b=929})`}%H zJPgL_NDF;w(-q(kZ-rvXPVk0J%j5rie+9kZO$imnt_&6bV z#ujD*-dT_gI!^5bs&I_|+o>_51dl&VCrDlmolmswzn(@P!g_h#+5mtoM*N1 zM51P9@ogs&!xm+-teJY#nEtlUd@L@Y**T(5pb0g$MIt&Az ztHUvIi>1TlTiPLkInZTMm4zGUn&)@eQqrWr=GpVs#JC%(|A)r{_cUKCPDpe@(iGHt zq(YNW?hXG*CKS2c0trmr0YH*6=IIC1p@5TH-X>78-@#xel>ov{mXIb;_Lc0_p%bPGC?-A4x!MfPnhJ3A|No#f2TM zDnJ45SjL~7-gGY1TQJ7D8?d}g>W;<=gJ&%6VjQH$&*8$J8D98r)^D+31>8^AIjs`| zg16HpV;u?n!h!WGaGPO|6@IR9`>=6XZTrFIOthgIv>Zv35(Ae)SdL5;FAf za?d)6ys?I>ss4?P=hN3=1_o-?**xL`fu<1?<2yt#xt5$9IW= z-pXm^E5t*L4MkaYU!c@oi5as)U78Ib%8XTkTOsBi!%ZP@g|!|`^vxD{eu!IR zszMEo@+0w5zeiB*t6zQfFN&(tPgN?xOlIDfUw#QB#K+RttgZ-j!4{xi5xD#s-Y^;9 z(vOfcMH28^;xy=a(O>7KdY;wofYql&7VujwTzAmLbNl6|lB+Xak#e-0qFavC|7=bE zBv!R0IOpx8|GTp{6q*?fhF%3JjaQQ!&R!Sgfo+JKaLUOY+e`t=9hBJ7qnGJ&me5Hu zfz-qkaJ&|=)l6Ui_(jZH>_{AquF13a3COj(p(k&ur(CrW*&6T?A^zBl$1PBEHa9_8 zsJ03A>%CJbX9Gta(P~W12K<7j9-y#+2^tbS;20pIF{veH(wEAIHSg;|#|nO@2gQ@Qc7%*G}Q8g;TFN%U?=ee085l%kRAQqMv!zmf@?x zkzQT4{fweW!}ktNqT?B{1buc@wvS%x zpAO3|Qby9|wn;h&sg&)>=VhvpT&ZYlRhZgUa&;ozF(Xcz-?_j2bcv=zrBKKHGDAoy zQ%8EEXYOs{a;0)Xhu9z_)7sCJ>*7k4CgD|>q8hmtcuP)!l++irWE{^aGCufP8Pg1i(D2+ETN0Ep<59m?wejx!}_Dd21hmhPL!9r{`4Hwcyt z@ukxBg#u8V8)kK)$MBchfn_=#k|xBhQN4tGc=weGS6@K`il>T1d80_~m4e`$MXvHn zCGsHI9HSpU_SnFa#26;-*!De_aMtemtHA<*N(nj+83&qxNfM<0mVA<)bK{FI^32(| z0(z2~T$h#XI5ZlC%;xS|lsexB5isPyi(B6?td-y())DLurqyiU86#ADM{B_HJaOy0LCgL;TQJ7n zAlN6IFg{oq@j7{(c93?IEsA+KQl2Him%h_(&nY_O*^j7|)$8u>?0m6Op)Uzqa`HBL zCK0q26d`#*r)crWA`*v7xd>EpeJ--4OuttQkOA;8aGhBy9oJ%rfMQ6vYWw@&TZo?C z6_(*{P#Lp79p+BHw)kpXtQX;KSe?&vyc%gB>qG3UJLS{G4N=fm6?@zCqDM1pzGVc? zq(G=gB&(dpyxs%SBadg#-nsL^nAcF$2Mv{5e1^O}WGKSM{_QuI4lQnC|+O;%IomBnt33*vAfLTZ=z9TO$wF~XyaArdn5gA%- zzyZVqy*H8BrU>OcYQa^xmg`nQlX&^%^idvN7_iUnKXzI3FcXk}JZVYDveG!M@BYm) zYVqR(^tZcr`;pm7&@N}}hdl>syi;!|?gp}IF@~I{qWu^TIa7XpqPAmvuwy6@EhJyj zTB42J6aPh=I1`<*t~j~1MCJ;oUlhg`Vd#v0!SJSb&~9%%eag@27hXSuBAqFLQr2AT zHIuowy-D<+TJHI3l29+``JCLUAM-Dyti1dvQy}pos<93S_?zF!U@eM36<|rlB{?s$3!4ZUYNz zW&dyl{Q<+>2|Fpp6o|(^V(hVxqv>GOk>KkXf8ee>f+&=_+A_Qh6wt)Uqi32rTNbS7 z5bFhz<#Tu7D)tqQx$e66i^pDn{qEB08*ijLrG&|vJnC6fEdKpP|Vl}Y3JntN4f<{ z`wxK1)i0r(@juXde5vW(rqAk$C>Foa($_!2K|XLc3Fd_T2GczpXHABgpgIQM$5u+} zR$?3^FkU+u|C)~>@j|!o5D_=LjDDbO8Oj3=E-_hAwhre& z$T2mwqg)<%>8rP-;#O5cCoqXLt>UL&+w+c06jVh(mq)Dfh^k8~I~Q|jZv%o23I>sI z{zF`!Hv0rI3?RTDJ+oXUex0hLw;i0AAW(@K(@^1+CZxeAP^au|doq^`Ur*oF(-XOa zyn2?LFSlT+%?_nD`iT?eLXpMB7je7+h1hQUpmW7wTqUs!WWmy`-OXaqiI8yVS8P%r zn9Bfpzg2GFL6=NuBzaNd7?Ahic^A+}i941C#308!>y^6&}qZGeF>wH4gm>=SYEyTIfju7 z9(OZb*tujg8uWk21I8VTSy(^Btw%3l$D!E;g_rtAWi8nP=Qs8+xnNaCvrNv5E}KQnZSFybTN`bs z&!4yX`R7URf@}Zs7ssXrVDJ`Q>aJb`bQ#>4_jEC67iKQ;P=p%IptO)+w3tY)vy=KN zNq-YfL{lAr(0-pIMx&5y7 z_!s@f+zV|&o78*#(N6(yG^m0e4)O(r&Ov|_U`y3iuBR9r+e4fu>JW-?mLk?cW$Q?G z41E_u?tCmG2s&0YVPe{SR*z}^F!2o&`NGQi;HsI7WD<7;&MV`NI0An}uB3w1zisU9 z{uiv{p5-^a^b+Y>e)B7@JXE$XNT4W2Y$lKViH`FS$wbI?^vYKTlx}%KYQ7f>sojOE zySuCB|DdvmB_ER~+j4XY4y1LQF(!g$OvZut+KPaqu%3!s7Qa zpn#NvxsGHJZ^e?enDm9~Wr_R5QgBa#LK9 zpgEdKg|iXr68bq{4ZOCUzDEU*Nr^!9=1S%}pVOV>SM+^kgzj8)Byoiqh!-a|Yz?5o zQ4?drsgmhH^@hyuwRSCP+hBovGqh}P0deNXVUgiH!YVP>_{rNBIxya1WAju#EHv^Y z;o^=raGBtNInB8E`!NmFHw12;Lrz0#=?@mwAlbo;#7$L~{Abap^KYWW)&KORfLyp0 zl+~vv^y#$8XH3TKcGxRQhq7{WNN(h`a}3T_otGEnwLBF*y^9o1?O2sg4<>{*4c{)- znMgXP@A9FFo;PRRy*p#QAqUSoEO+`+spG!=77`m|6tC_WuV8362dZHF2w126I^&#f ztYEZO!sZ4&J?i7*nYY~A0<(9>qSGeR(=5K()9nVw$Xr>_+->YI_gAGY!xp7=)*n>P zX;z(WhLvjOWSV&#AN}-KqQuIUW?8dm5qVxV?fN8Fp=j>7s8ob5&quC}YTuAe>6o(~ zXnV5R;mphu^`k>8YGgNe)x7z9A1EyvYx;U-CQki5yiDKy`-z&_5JiyCQa4c|Bq z;#Smi!FcuVrX5Vg`drhiu%E^fQQQG&@tIu}8%s~W=ld9Hvcc)W1_vQV&}j4kj_Y9P zxzOg+VgMfONVm%cU^yQ^^T+Y~M-mup@4&rc5o(Q^7v7wiOs)lO>~At@UI3s}q99BF zM+FuQ00A@x^{XF@q|<9r9WIq@4ko!;VaR=VJZ`g33UXSyoJu6EtY4eRujw)owY3a( z8M4|^ZzV->1kGYlNd+M~;4>0vg`}CoQvgL5&%lF%q<}|%T{I1j0MmuYKfQ}q*S(P! zVYERcJb(%f!f4h1X&^jko&cjYB#nu7Sxg$}&`UWbQE--xr{LHI4YAYzW{rzsUPx%< z!Njuwzr$7HcRGIb7gJnPm}L^0c@{b?IN+m=Q@19X2_-WDP1A22QTK? z`wRn-V_AJ!io`BPe-4u>>=0u&?=m34K(e^)phf<8)00iV1x4~dHoX8Fb-#?6gLVlo zY{Q{_f?vm!P}u4{X3cCTcnmVd+QIr`S^GF%kV&!s3%WoihDAOV`0WVHf}h6vJ^Pr0 z|MZx>gy)4$6=wl43MOBKFTQOiR|#Wz7lta?&9@ASG`z&AYgbJi%cI{(r)Ol9PC;H^ zCs%dBuxUc>tlo~Jc`M`U02I1?i{oHHjR8|C_N(OOQ^~+3ncsvAZQ_V1^kJej_F+T_dgziT&yB@uD> zWtX!Pe_Rricy)ZMNblSh);Rewu9Md9+T}x9UGInR7QNu{&psmwXE~vgy2Ofb(dA8h zg%Y=vZ}mqr9pU)7yQ$*d56$W}(AbMcw5EtkqmB2ZIOnQdJ!X|@vR~ISZIVT8n=<_Y z!sE0z3ps1l)?TCD)PIIYpVfu*#plGKQ3qr__NgYRt=9yt#uZ@VeJXd434Y$E^-LeI zXslDFKUn|yQ#AGgliobI-fPI~g8I^*#CS9m&Gtc)%r$J4TZhT|pg-sfwuGjZO8zUL z4BWEc)?^z6HQH&GfEB&+$*@Jw0?_g0AeVF}j351hv7iUum@E{N-3V9;z(Ox>0*unw zO^YTMaae3InC(roo0)OZU}4#<$ggk7v0@`rMTD>N!F)Rt&}Lwq^|*c=`~oO1Ft(Qk zC)ehhSY$I61;$uAn{OTz>9~otr>uINtfemjO8>voApv5`soqB( zDPWLB>&ad8Tq0S%{LRISbL?Cx{Z%x2T1Q7Qoff2(c0rzJd)6<5ff622!HKoa5ssSB zUFsG^T;}{|2zpK)simt!W)!!I4fJ1en_ucS6)i-_H71w#bL2@QDbD#ZeJOc6rwD~$ ztcmAqkvyIU3vA}XfD@uFI95AXujP6zuZ7d=j&X13 z=Q>mp*sJXs2aGw3U}PU$d|O+D>TA0sL|o}7lIH{;_xXHu$GIPHR-JtE$w$+Fr9U&N z0!o{zjU!Wl)zqolk5S6qGL6(%-KH^yR2p@ZL)1FIQl$*9RA^l?xx!biB&mW+s^bgP ze1RTvOX{&M=y_1oOlv-+15pXC$`{lQ|5(Zs+MIkzbD`A|e8sCTRm`ANR=Jp?n6#=# z3zk=&o12ABrwXQ#_RrYuV*~#PwHanKfv|FoL=GDn3Xz{S-BXJgnYv;_CfE4+ct*!2 z54a^+yNTNjp;q)di)BfV^UXQ#UpMhQBk7MMsvMyeZS(x7Yg#W&7qRtX0;Z(L@fU-xdjV=k0a z=G}c^Pz0MYqv--#VmZCM^NA(gxexWV)J9lv4E+FPL!d&Unm{&`>5#=`%-HO&U9SF? zmdjl(@7~RBH~jO*@K0K-Dz6V01>_RXcr2BEiw6XQW*)6e;Fe z+B!omfs#)oa!Dl}Q{v>Zp#1OQr=W^cQTYxlyRQ_X)m8xtA~SgGLL{$WpaE5DFw@il|eK|XrAyRV`7-Bpw`{M`f^001seft z%*u0PCbK-Kbn$Gm zkiIQ(<(0&^Wefe*_16>g%{TvV$~HgDkt_J&q0935STafHD4s|t(8#R(=>5wc&j&7Bw{2@B@(L`X0Z8!{OK#{uP7m}oiA#htA;+gUK1mi=a{$Pm3PMD z{`060=nHe_U$imFlS-Sr@7Ox&Ck^e4H=sk7!w%WvhIYm~LQZmGJHrfZ(y+b)?F^V` z0BbW2DMpY@O*RnyVg&*=R+nm=125c93D^z@btknjh#AiwTYmUH6eA`y zR-v;x=8O=igL{YFTVquw$Sh&Y!Op;)3%`Sj{xA|`ohHU|UuY1%1LQBIEXXCARiXcwyNs#w-20@k@~T&+uU+qqSUnKv6#fyrW13Tb7yVaw$1on^!#WwMEw;$ytlyb_g~ev?FnjI^%SECMBo|e zR<7_Sm8B3@0w=IE6#vnjIljA26e)Z%iQI3IXxz63!3|!PLm^T);-tG>ps17!$T^j0>fPd>w*y z8K?HG1dujFWSkdzHQ8=2_*s5rh=M`3pQaJOkV0PN`vvxo2$vdKmNfDyv5Y6R4=PPY z6=z73IexK6XtoO5&S@K1)q7zNeOH%#uEHmE1q?E-&}bC!U3T((^;3~Tt!Wa#le`~F zY>s;WR|^HUAVB34@I>)x!Nru%z~tcbMrz;M)92zxutew&5!IpOCpc&A+4w4I#p1O! zbNzj@IMZ*xra(3(-`@t~Y`k@ko!?5XEqLb6^~HR1XH|az8}0QeQ>KuWU1UXJxIh;K zMysq#W;Ke*Etfs&6zGj&>+0K%^##nSsM@EAr-4$2K8{as6@rzIL*M!lj;j8=m5jBI z?DMRd=f*s7%vFjUru65j)Az(V=k7V85! z-o=YsTYO8G!m|6IXT~x*Ai0?tikAonEy(Z-;ec^!=P*JB$C zXug?9SCvA=+1jG`kkfuGq8mw=e$h&n(r@>sr%Fr~X<1^_-JLf?eBz4G+fM%~2K-UY z$Ng;v6@BqV&Y(P$_wo%!p)ce6wNw%|9CO`5m|>oC#d0l?2Fn3~R?Q1_g=A!DnJmrB z&X9#AdL>61Tr$@sb1zsFHMY!{X0zC)51%7Y8N?-Zi;TLXceiNCLqEy!70Twsm0Jfn z^2g{mp6>#Jxy)~fA5%LHEC>eK>HNqXGwYpq-hbanWY3qqlSBriBrDdaPRVM$R(_Fh zY1y5-Z5DU>jb%)=}!&#FH zy<6Qxt!v^orT0Dzr>YB#Dk@(E0kG6Gn=z<$tEu&+JQ}p6xD1}L!!fQa_c0|F^QD%l zDw9dY1%7WXwc?B}$CI3Odp40>?o;nvA=IdN$8J5{PrQTCjhA-wbp}!2CF^nJ1n{gl zl06R#Wk4p}ZSPmKN-Zv}gyIhR7vH$X25d2smNR#(CU-irtLD0dP=2vaUjnXRKJ4$S zI7Y@=)u`6PwH?g(bJpj>tI#3RI++0OsT!iXW`7yz+*zm>L;gg}^gG{9)*4Oox+$TU z=PpNua&fhU#G_w+N$rAA4LJ4b{G>_LIhjo6&wFUEUnJy;EmjePQDPZ~qOUCdyHxtD zMAq!t0*18lsfi)9!CF+T_T-ow2saUmw+q!V!kXh)G+83-|4f8XpROzCf2M~U~)~9@wGAv#OMb&2|c`AwEP@U9)jJZX&WeDI-=((;R(b*T46`PmxI7|Zv(Ri7LVE#L zMS0LwVQD>)Bycix5Sdkh12Q46+Gj|7KQnxAQ}H#~LpKvkw^XgpwNWy@BOz4CQm*AE zrG;j3YRysfb>r6J(3WhtbUl5H$p*6`vK9b^%7|K@JbJ_;b%=D6=98-rW&K#&$dV=2 zw6RlwUtv(1m~rlRn9!IX{AEJW1cPJbe|mbJs8nia>Cg=z744)KlEpxWzLTbZPHln} z{N4Ur@b=t$x!kTCS+wUW&_I5t(j;n{+id6e9TKb*slB*`6E=w>rAF}bv@rHu_gl$?sml0yO5!dFfWsyq}1srX9-`#ZS9ka zh1EQswg3K?dY}H922o;6wLp=XZ5>p3OVVWcPtfsKGO_!#&|;Y&rS|c%$4&%CxzlsaO6ZbDYW)P zYJou_v@(BdVA@I8gHCJqwR`PaO2#0kw|dB8z;_YNBtwyK*2!SY$-v0 z`oB^or9r0IbI zwD%}S_4UVh?F#hvZUqhp9w>%N%xZbcN<;!{R4kTp1yTw3y-uEYWGc@f?w#bIzuebJ zr6~ck;|}bl$c5Q~9MPV*O2?nJG%1mYC=eu-awt$tZJ$4I-2CfL^8+D(Yvm?#30RGX z_k8SX0i!80nMD*4i8(6z_xWGv;SWjgxe~Tu?QXfilgYu0VdjsaUk}rSoLl#1m6n-wC=flKWkJg z;?%GyML3{v&d?fRuyP>Z_&w)Mf>**Cg8yKK}-gt@*!TelM+*^37@HqWT z>Nq$YPaMGFJeqkalX*Dl6})fXELD@K%zS#224ftPp~9`X}Z zM)+rUwy7b$L90x8&q98*2!Gy#Df&PgKS)od)r;BvC>=v>%s55@V$ z$f35c4{$qlV2>ND0+uBphr^iZ1W3p*DPt~cMeKHC3EgQ2ghVF<5#=zE@>|kE5swB~ zFIa>>B5&M>=zj(aL@4BiAZ8U+2M~Gj!3Wfv-+V(qNoNNJ$Q9{wyfaQ*4~LFk?B&U1 z9QVj9-%k26lNE-CWS|R0ctYx=Y&QG!p3j{gp$P1N33EVnMqoFKFBJ+e70HY}*G`CO z*H$L9 zx3VwNn{!{~=*84dW}&}y`^R!85lCOqjj`;+7(!ELAId;ie}ccdRBYs5^>p;N6A!a)avC}>yw+aHL1Kwh z3fHXTNfvLKXB9xzKtE;O$l9B1Kyc~VaRHfq2*Q!CE3afLV_x;PkUa(|wIQ;{f;B>ddiWw)$)L-1B*tM6JpK4FKOB1neyu{Av!%Cdths{z_|Ju4Tl2E6@*4( zi4tZ9OvkB4sNU!TzT3O)rcBj$-|Fop-Q7=CL~=#g4P%xD4^K>ALav~9l&_z-=-(S? zUz|B}nT%dR`k&K6|ALYLa9s4K>`T-Q-*qrv%8-8M)z_BQ4wfGahAy!Bm>Tvo$>EZk zckCih-93B0K^s{OBLy~*0Ac3^~E26l>VB!m)$0{Y# zCP_UkthIzNEJOfhzNrlNY%2IlxMNs)Z`=&-@4Pk8ycqYUY@~#}a*Vzi>x0o{y(`mD z|< zoz$&NWV{O^KcEA~z)v9J7#ag(vUXwHf)TesrQ%w8C%YHI_>?I7H>#P>NdP%HXNSCH zz${lsqI#n)oiC8`zqhFwCI&8gA(5cK&OzQ(3bt8BW<4lnRNiT=Asqt%zc+{05VdBs0o z;n5Y1K~v>;H82Vrb;fdcLG2psF; zl?peKJ;7r)?z^qCjQpNX>u_==L~fxMZ|&XUcca&R&{$=9o9smk9l;7xHhCs zLdv4EA=B6cgcI=6uwd1f9!6U zW^^32{@gM^(hFytG-`go_3Rs_hz)`%KRGvOA!`a><$pQBkt(#>eo(&?@_c2nSg?N_ zH88+Wkk>kviIc|!MS8wxA)nG^7febj;U>z$oioC&@bsJl?xMD5e)9R(@4b)u7ZYav z+u_AL%4`NO5|c$WhFPM9n}>l$4SiNq>zH}aFavLo?>leR!9oslB0~Aku?!s*Z`KGC z%Vro$u6fI%5Ltwm&3SL+9IwZ1 zg*>h~n~Mr7VFG(rk@r`SRZS(Zb=o4AWP#biKw?$QHKVMB#%f&$)QA}x&)7rfZJPWm za8g;MleR7$G4;6SEsII@Ol0ZA^#$FWHla>0&JDfWqdBO6BZ>Ku-*~NE8m~708R8k_ zQKDo2@#P4pUw;zBD)e+pwUtraF8SGK)Z4&e6|ncPg8-`k2l!WZxP*>uEpkq3od@RL z4P7N)a4@Tp1JAf)V7X%Xl_{Z0C5WFpSGMX>Sh=niMo#yHbO}vDm!d2X7#`g7Rg+%^ zrfSDKmqbU4*+<)6f_8WtDek%a-;R7z4Y-s(Ki~nMH@)eAv;zJrTz7RHIu~*=NZ_O( zei|fOO9kg<|o(KIgKSNN*5F=RcY?r(?=? zWhBM+H6|S@gMJ{1pt>(F+YhL|q2rKFn6UkTSlJK4y2K(Ul5cE7Dw{r?G`N5}NDXm0 z$Uog)S-lJf5M4d33~n^tMl!7nh)WF#7s>%XlI`owp(?&M^Gx;^nOAb;^WVhZpf0Id80W0H znpgtGeuITI7!=!gC(x&nCLkc8)u?pt$GwddUHZO?2yWE{@7okSjGix2no zybYzvf_Xo^I8WB5+?}d6MF%TuG!Lat+Z99ea3&?H8O>v8^nH2{w_Xg+9r&5_`9Bc#ofS!)2iktrTjvR83}cpUx2=Oaq3 zzAFl;k28sx<4k^HGi)6V3Dk@^9we=aL)kZg8yO|nu*)Yi#Aa)6QHk^tZCkgCoDJG= z_n!Z_yZ{=iB9QjLW&%0;Lhfm}Uza24J(rV>`q*+ijEKRUGq6kQT@h4&-4tst3y{GC zM6YEaBF+);q;0G^5F4$H7}xqDwaRvHW%-WsE#2FDMSuTxoGK#7=tk1X!Tpb{5-h#9 zd{?4*{;)A=D9?W;?kw2@x>$4NgT{Ot62_i5NX?Z)Lz#i*09(u!kiRc3$It&y>jmt^ zuxq(ZA5=cKi!HF7q8TikzwNthy0_5l zd*Vl$S1}*2zX}w!_l9G`)oQ#~#<4yUk$zj;_(Ik=kb5vXU z);3~B+jGESP>97G1x*E=@CM_fn3iz^W0TnqN~%;XOYIV~$THRtlzAs*0?-ZtsPfc2 z_^e_zm8q3x+;U|QD4=i%walyko!GadnWWgM^NPAeO+;MOc;Mo;`wQY_uO>fc zmwwX2D1{cQ2)l?VaacHs5_h>3XLpN&V|_xCw6niyPh%uMfcE(PdPBR>Wb9}$+S~Mc zW7p{$H)dbAoTC!UJU+349*8MCt}{9g>e9)YB&t{+m+?FV81UY`@kVrey5q0m+gK0d zmJ{UJg6dAcuTV450}6B8Yv5srT28bTh!RMaz|XzpJa*epriD7a4ijuft50WjI(I*d|!$;&+_jsXH(JTH4-{;eGo4$`aCnvx4~P z{qVyN;pE{~_QC*pq?diN`y$-=03AQzbbdVyXh}C0^D-Fo`fy|6fBr*#!2TENyt~-0 zp`r6*iB__?xp{tbbL6!M`_=D%PrcI8(sI?FcU-`(6A}f`>ktJ2UP12aZ1(CLk?uJM z+*YlqucdQN0RM50a~wDk8)qF3+-eR(!zhLwK8$Gig!Qta-U=4ify`==#@*b2X?6Gm zXi^90&&ToZBZ;#wyV~15NUb@RN>+aJ+r0m*c>=XsJaN(=bltN<@ZOpydW_4v$bn)KKiP~5~FDHy6t#v z1vJvY-i(um)cu@#{n6%XJ+dXk$iAPmrktLiZywP~5V5&gzLvPKZb? zV*j??a7DQ>oy1B5Nzknje~QpPS_E$hZ?JKm*#tu6tf9ue0+0uy4ex=2a9fMZs$ukx zHUam0iowJAWB8+c2k=Is3jB7Bs4_^-WRKC{u317_+20h(oT!$s~aHZy0c z;0}xZF`SGMyHLd>q#EYq{G1RmyI}c#(nB)qudlrH65J<#nA z_I&9IKq*&+b^yN+vu|b|$YvkN5dWUb8^RsUm2cSb<)PS``d6DMQ`LM`sP#@{GgZUZGKAED%ovlX~MGlCu0bO}tplvA#yB{qrJWY?sJTkYih^g6H9 ztqiGv|1GvCvI-#k^eT?OuM_s|2s5|j7A}nZoU(BW{4b{uYhi4fK(?T2jAT@F#f>Kn zQt6CDE6fzE)ZFtP21Ts}H%!J&RW&Vg{qyJnR!KkRqf7x)WMudO@1jed>!G zdcqFW%=YcaZeUkY(mcDVeF#tfk+@P3^c;QpB3hvo&p&^&{h9F350?R>a@QKyUmJrd zfH8##RMU@~2RmsFsD+7p~@`h8!#;mCn ztsmdir^8t~b#6&daCD7M(xlMzEbpXfF37&+ba6Qxwxsd3cpAejyaNoNm(j>#s3q?> zPBTec~ji;rl~#zQp4lWZbWd$b9nVe-I`6@9O7nys-Xv z{pN*IgJ|+_m;(`5J64YZ;bCw|(!}1>5E_{w6>#2Sl!9r>Vpl7(H^-$^Iy1G%CUq*E zil$!%0<%M*%l-Z^`^jLoC}o@q&BFd=`9)npxUkGfT`fbDobw5PN1#H$5jg>;FtM*@ zAIoMR&O#gTd@k9)18BiWbgiYpKJI{R8&_1~SPdrmpp~e8NDfB1)Ksv_ZkV|u$1l!+ z^?mcr z)<3sx&5_IJ&dokTF3VJ&%TU)rtMf1RCZKU(j<13YzoE}bTE2MviTRn|!~a+H1W8P_ zC&h7f{x)k0k}bq4mhi<*E#2py8J-uPzizXTTY)X(BkiLjTmx@^CJ8v-d{_(zF(6bd zc9M@-{VL*P|Fo0xRNgwQ4VLtG2n=6!D{b3^MMKaTz5+_d)8-syVXqt!LS2JK-?lWL4u zXxYsJiEs`H(NIje;n!R;>g85D0*-|;!+*M$uIwj5px-li|4Ml)f2O(MVDIX>5JdHJ zatXWff^Ml*)+4uFM$YbJ@3^AT5y`dcj1LsY6cjVUnH54?lYC6 z(eO?(mkG>qdJd9p>18<&^Lv|9A{N4~YG8&kbg0q4d=x3ctl1<`WT)4}^#xV@wu2#V z+rgAz@PRN>$Grnw#$FW?{v1Cw)j2Tnd`<}}dt^A65ka{8!D6wHN}ZWbzXizd3i2lF zKR1~?BbkI1mkmX;T%$_D5`VG5Ct?IM$%cHCVz*{)PapRtc?tH|na0QCw_de-_ipk+ zwYG7hRY7S3`StYLW*=kXH$OzG*K+yOhU==v#O-z9d2+$2oEki?7!RMq?uV%)qsBBt zwc$QBPUg3p)l0wt{Lf1-dGq-=Q0NZ3FzC#y!>Z15z}2G(YPv~pPY?SG+kg|6dOOJ@ z;mEdQb8s|0bNGhJThr2u@9zKJ_uK56%qL`H_6{GM$_nXYI|B;XkEM(3`uZBrnq(}t zI!eAt$aM-x!K6Z^_V@eR8xCePB*mO+)yiWn*I$bQpoiG$DCdus!{&P6pO*dUCllcs@SLdLA zkX$yXxy5bCC_Sn)u{cg%0%^jEUG8f`mNt{y)IL9C#UDEW3xs*NTvTT3u;$By2xa5@D7;9%w-n=7h$Yu-) zW3G+b%IW$vm`F;y8a+URvhzNX2gLSK_F~n<(Jz{6nO^mUAb3g9HcIy>O<6p|{& zA=l=ILzLvZ^}QZn>QR_qDUDiRTSznoVPllVNP<%Dc`#;59GH>4x*IN z&S|=*YN#-3*{uV-Lzz29z7z-!N6p#+OT1>St!f+%`I@)^m<7!PnIZWWpnn1GV&WMj z%>pk}$C-Lb%(3J+$MS9B1RV!|4hS25&)^gXWeT*e^R&8_-}E+qgYlJd_Rga^$ZM5P z+uAKrCfe4KklD2`?k5-c6XHa7cS6*XGm;I?C>F?!p#AtmUraS0(JD4b+(She^S~JP z8%zwp7~Wre=STSg__eroQLPt_FG`x4`aGW9E|>q`pRxallTSu9QngLUP+^SPOJDy>0Zs`wIGFyr_I4j*3)2TxoG*Pmexg8DAQM%Qvwl zvrjgUz%-Fr99uGK2@lG2OirYP`QnDO0CMfN0Mu^QW@x6*GOfj06a2T+wBg9!gE@&x754&2X7P(ff_YKvut%s7 zy9P2b$H6T^t=QR>y5!G)e!LC7EK&V3>EfuR>=wZ9^=4xB$*54vINFmR;kQNPiah&f z`^}B-1ynulhk++kNHlXQOGrHaZ=;D3(J}{6cZ8xBRL)MFSS!*bbIRrkD;$YcMOw~{ z$3Hcg#bWp(ysr10%Gm*5Bh;jFs?dau!EN#_BpCFEo_!hWuPb;5Wap`(P+vp(JKX`H z!>;ANH3wAN)6p;yiOC5#Yw!+LJg#aEsN#DE!*BC1`!4q&FL!m_+eva=?3@6ygTxe5 z`RXWe)IUKSzC9;5!a8N$+XZNVXQd{#Ynn{ID+Q+HCmu0>{%OG$_RI8#ZEex>6e_?g zG@67*WyWxqpq6}(T(~hk2ysbV54T}&6+l58T8Uu{(*sg<)|{?_N^=!L5`IMB9%399 z-!R7EhpV&T4^8C=pwi!hwOR1IN-GYNGE|`QN3t>)nlOfS6E9@o7F!5TbQO!Qw4L{( zxzsWLx6nrJXd8=Y9C!H3o=PjY+U}3Xw+%@<3VwC{@GN6d3o%ojhw7>{G>a zjeNHV^sNTxaNRhNq8Nf4$d9x5OuaS2ErsIJVrYRhaGC#qvoHiUFfYNE_GfOT)a0X& zvX94ACRkQ#ygjY3$bdS#D5*}vqG%=&Q@#s}nVoPy+Ts5tBk@YjiU{26J2fSB_jkai z=}f`Jv`XA5A7c~+Gaf0cpY|%go8ooDXP>F!@xQjTknO2V@?6M&1&b0{@{0TKyB7)>9)_#!OH*--a-KZJZx*lJ%HsORIZ)^fd@w{p z$4XzFHx~uC7--BHb6^d^YW7@v(Lpd9u{b+*`3fy#fA+CIq>ea%3AM_Hq!1*|T$<0n z-bDlwxkPGG%cEw(h)e6T4625C=u}7b1+5Bq-6skkUX$Xx)9} zPWA_dYqH@F%bYTQz4+{MIwXdTCM)TiD-aSDT?rAW*>SLYS3Y4WuWXLZ3TH z<%YfcuDLlm%m&Cz11L<(01c?mPKpTQ+;q zG__S~wOu%y>S%?=)J)JbdGCV{#BJ)fkPufYC(dXy9KHsI4kp(x*W~ACft%E}pi8?Z z7CkBhE8Me+;*YA1H(S)FM5F`(PzJvWJ zb4w<3bB5^loJZbEUn^a7H5@}w36kfeL>D~QEpaf}`_>KbTJHcll;`jZCvNg<3?hk1 zD$=X;GHOTS=;P87ld$EGL!#h^ruPo{-2`|!gI^_r_lofP>$yC%T`QGvjvHSFLvzYKD>FK*T7%r?ICf*J(OK&>FKvCCZsPiWHq8 zlmJ|XKrR#tz|n}|y0?IaiAs@<5nF_E3z!?}X>DDWO#ZU9HNrmjMS3XR)(Vt0iB+sG zXFR%;Hl)pxWzYEL%q`oYQEMucN-lCf*JJpn!-IYZCTBDd+8cU~|JWvxQ9_!QiELVt zRG{-qpexCp4Y0aq>8HXzAM_Dr=B;Lc+dVJ|FN$AMeGXji#=|CcT%h`5YN6kRon0K3 zgm8k3hH>?N%}do@;@)2?u6`Z7a(L+oMP^d?y5NuUDa7}4YvlZ}-Xm-lxqs<$3^lS-$rgs-MEeYXI7u@7Q$|jth(y|4!k))@=8mWNp0#r z%&BjKetzfCdRs=PG2~ke_CmWsW9sUD7E13jB@)Jj481{N?X_qu{f9aX9VU-Ce=H74 zX^fEN+Y4<5ow2j~3`#7B3dI7)@|JVYZP~oUKhSA{*#x-WYo|i{;y`=%84yyh;hth{ z#Y*iM36kz`_ryF{OmhgJ8+^LQrwUW^*Za?Zk(4%N)SwNfsd6w^)fvp+_VS>dFRgpf z>BOP$YB9WY5`Mey-~UeMOnojmEaxs9(yD8gBqgC6KKOuXQ?-X^=xGOAcDL!bt`f+V zqNQtARGnt~g1oj$CE5#vXhea?W!dbyT<*C{rj@;#v3koU7-cf{i%o`%&Z^Im5%8D? zU6BzfRl?RYv!e4~=oZ2Py4(X>N6y@cF4KGDMe}B9r%AlAlnZimxjgNSKWSQ(Iz}n9 z4MgBD+eH);r#v9=Z~`PXNrJu19E)lubYO+{+el3*-UQ#~k=g9sr|0u?v)Nm6xpz~i zl}X=8S+e=vccp1%i(h1w_(D6ghAjsRbj-q42dUfUrhuiDo!g;-0|O0U$Nuo6DdHgc zTgyeUbnMfX(e<)G(K^PtQyel~k z(Wv!E@O4c8LQELyp}(f~{2pSg!Vl~faIcj2fbf#*6H{PS_%Hdt*I$1iCs8V6O%x+E zc}3EBQ41m=jJrP_({~h`I4C4@(QB{W4~U5}<{=VbWQfFqg;CRx8xfNtASTP>@MVt9 z6dZ*3Uhm5L{`*IScMS@~Td+K)pfrR36&}%%v-kl--HE((30Taw|Lk?m~gRgL?@F3b>L7 ze68y}ao37lTAPnZ!FzOGNVWfq92|gFXIf%Kg)tAEE$IcDcy!KjGu?TX)7RtVL9?nwCz||PY+#Qe4i$uaN zli8U}XxC&m8`|w>Pp3Zl&eBb@S1ny*VDpZ6bqh3VvD3k9`+lM%H)pnFhco2(2a*eZ^Ll0z8C(7% z$bcxeLT**TAb`Ty#mG$U2D!dt=g!vc+f!n-QjplRF-n#lfUFx65k4&P`i2|da!@EE z#E)~iz&J$O18NuumHS{|oB}DTnpkhp*7R>C&pVUtLIsCaT@ILvZ&T6AtK{%S?=5(1 z-r3|W)WYh9ZDS-V`8izvN<7{V?@lFc*+uznIxy!9dUl}+cm(jN8tY~UXM|SQKtA~4nCNwVFFScl@eD|IJjVx@p8)u zjEI_oVk;>QIpS43S38YV`}&#Hd%r}T8}RTiAqDn{06CjIN<>a(Ph`m9?75e8!MC-b z*peuty+1C~QmwS=@Z7|1<5e~P}{{7&@E$a4`QKYPO`q^#2WlyVK! z>dK%>sR}N>@ATG7JU%GtXbQGF0YeUswE6sokSVJU8^}(dGN2Bs!yA2azq(lyB9nam z4U{@Yz!6@c{&un-rf*NBex4?J0FJO(Q%}v&A{y^{>_w|Xi$GL+Du(SC#x_DfusCxm%=2=%1prPSp-zNMQ~aiZoQt_+Io6x zE9^x2K7B;uiM*YBE|CcClqg{LjYb`E$&FsMLLDaEfxxieAAI<|mtTIF9QN%-0AXt_ zv`bE-hrj?VK;-B4+i=+&hly3`6?ho}eKOrX0&Cvpcj3BnS4WId$lzAT=aqwo$vW6l z{zzq>Hwc5eGMgP)(hBOM5o zxr;b|9yM5PE6TW9&fk}ms%4eV4r{Je*`-Wm^CKg)w_M)yX#f|35!jCjYqOw@q@p!G zTW_~HYU%AitCHkSc-%qXLyuJBG)5>dG@;>{Fk9iq!QsaYd`DZxA8R&DUKksLCHim@ zaY@p)ZVI7T4h>gevUpIbjxX1Y0n$F( zN+6O1EU`nn{B!3H+u?692X2M@nC^w2;qt`sYGwz2D;=%?p@79}FrpTSMZsDU0)MF> z|Cd4u`2hn55S-?|#>0IPfJSgQiO%^`N&&`&f?y6I_YHldkf+uDpe`RI2BXZW@`YeQ zr{1lAEuIP~33aNRc9R6s{>nGx-60~BDzyqFq?Y|YB9r*Ll?pW@Rm-J9_QPQ!vUVT3 zSfJBO<{#2-7SN7V^0lz?^ zbt?3*5Hi@NvRh0H=@}mWjB2m^nmpgtb?wdLF#FSf>=A2e7yp#5{Mnt|+(R*mrQ1LAFC&c`?PzpjuaRUSAc?$sHjHdPZWsMk2;617M! z@n@Abi;-!gWV*^1#MIaK{GiO;B#Cx*B;s38B5O7!ZY^{tm|Vd^E|X|fDZnQM zl+do%wdjRnq1w;D6#_5=G9|g@70W~2TUx?-HP9Rcv@!siBM?aZW>6f?KGVJql zRGCYSR}O|P*QTy^shS=b_n11fREtV(RP-LVx?kmL5(;U#&B73=M%p=f95fHcK%8&T zX%Ht*k-%#>)eV)rK)>Bw;3f{n*J+KLTr$J0vaC%MU_bz2f{xWL6^*@nZQpZpS*tE? zYH?}wQnOOoqy{}xTctYKQ|(NsomNTa$tQ`XtkoL_vy_?%^~&|@6!K>MaX7ERv@h;&8g5l-82v`}s@R$UAdC;7^{Q3*|GlVVZTwKjSfjGE5cbqw&poU6@f#8pVSwrp;U z%(}nyzEYM}2Lif$fB>xT)`WCK!f4$JqZ0fMxLzChokc#CueiDdU}$-5k5?q}4Qw98 zp_bu|13~qj146yW-ed9T$dhB5aI>yQ8}d$RR&?dT;o@Pf&E3%Zpol7{M$aT+LZ-+e zUEYa_L0gjDYM!@h!*Y)zsPwMhxWeUHzHybGF_{?e@(pX|TFHg?sIprQ_WE3l*A=Ys zHA}r_-@$7^vF3d9Gy2JDS#1X88is`p)!|ljNexH$=)Ly(a#=F(v1qWmy{&UUrp_B_ zL*yk-<0g}fa4O>d0f{XW73z&lxWyzUKkb+6b%g{iXM8aCAY%W~57UE@bWCP2NGQ2q zCDg~8Mc!!4BZ{WIDg*cf##*`KeHETQn%&LId@l1 ztWgV6$De#+`)Ta!a7_Sqe0hQDB9xGD6vqRw0DRc03hnd-b zy0%=omeH$48?HUf%N}%q;u;uW|I%~Ol^5nkuz0>>_c>?ejs5+!>e|0v9+Lu9+kf_N z&vG69_zyyO@h5)e?{<&{-$zil!6CJwsTk1)>_zN5f7`R|YsZ|*C7sFbJRlC`cYq&M+tlT@PfC?z_vTt*<*aoWw2 zL8`Oz)J|Bqv}g11@cAWWpxh>e3-W`#1|k^}(GrnJBZ4&p3{5DxM+LrLjM<0OEmbyw z?$ylL)jYX0+_gCY0fJ#Lfr5BUgaV1r97gRK?YAu$+&Mt5yZ6V>#@DP_=9d@@!r11+ zGtaQ4uz-T_BebiEQ3$)%TvX;!h=q()7Dz#`MKAYcby&v$=tMi<5>vdQ+|=k2;th>^ z9_sl;UEk_)L_9;%MSek^W3zdxuk!E(Wm=P1R2JLied9spgC&VdWOs;UasiPCpepdX zL}r^wyYbZGO0hKv|5Z}nl8UkcCP)&sjGbo zuhhBd$cq=UD-1GyR~MrZl*V1!NRXaYO;EZZK?5NcV4W3B)zUKwWTERiJtISX77)l> z5Xi6S)+w;i001Gkf(HBZAy^olho0`#;4Z!)oP>spv3%hZ2%_gRri?fW4RsGKhF=%xy4u3y z?OiRv-KM%Y$dOck<)No>=pZ#R^4zdMDpSjqO(x?=h{&bklFA~7e;{Pv8KHHVP0Pei z#e&stf}1nU6N8_F3v~21wIuaMi@Zsziy7gsVGOFxYL%R{mb6~C zLrTl`+)E4ge0EWZ+&M^Y=k>U$a7IUXbkNld9u0X)%Agu5VF`M)wR!jOP`?%a;`6_` znf~F_D4`Sfvu1Fh4&xzG(78td&%}9Vh>X=1ZeyebV5n-TGq@)%AXJM&QsMT79K)VT zk?rhmGEr6=i~~7{(4t^bCX=w2m!;0mq|juNCfaNadl->CUj7OSXJf{SzRBQr`FY>O z)d{|=(rPs@RIHyQ`q}mUlzY$rn*6}Yhkcf~He5~%*rPg5KINDe5dh2aEk_-lB^OpL zyz8tfF9oFlEE0yqLcj!!&1*Zch~yK6JK#)itzhJ*d$0zc9{;!m6@=sA$|Pf>k#jZh zbdTo7(g*UOq|)Qnwt0xoAhW4dKCOh&z^V=iM&2CMJ_d%&Etj7k9Q^w?-?0CqT$Oi* zsqK~BQ>NW~@bc#F!xGJ)m<(szkmbOPVbBa2xp!=Q&|h zVAFTgInH0<+~ho%PdZ`0Ps1B@qjI9hLOck1mEwjhsb1e#7w;Lbl25C9V2pK4ln_sOqBqZ%HpF3JW{*$UA0C+6iq6DvDx>RVwa?8aQp8_ z8~aR6YL3W?$>wg(oFO;F`VXXr*4syXlZh*=r07!$?$aGNiE4N0eS?sLe4iB?m_uTsAs>ug`)<+I4dIxjLK}DwT znQ?tf(p)sPL~6onimqN6={>47(yf8A4}=v43!x-T*c?TmVNTh`US1+Sr7zeP_U8h* zis^%!VIm^1CpK*eyF(kdK4)w{@#vT_e%y&5jS0}b=eaTu%i|Fz_YjM)MxJ;laksFHnORgJ%i#$V@?q)lR53Ld{zH@-2hm{sj(5O(- zGPgo#^t(dcahJ9xDQ6gAx6O%Amr5xROeH)u*lo1m!hY7zF6pDAPKK&nOFi4B^E#xU zN;0RXvP2%x_vk}v>iQ#JzU{<;@@%Te*WX{L5hLF<%ucJjKFj^Kbwi-!0)w% zhV?+pIp8Um1fUCqn*KUM;Cf_J9Q!daaNJVKO_P#^&%1WRy7 z0R&b!L=M~!0#3i8hpQ={nLF74JE<_ra8H78VHMwi%f|4}0FRz2{o@P;Crcn~R&iMB z6cS}$g+-yyH;;^T4jVcL17ed|66ninARV^C>CwEww-+N;KS9Z0Tlw2mmGw|Sp_Cl5H=t& zg+zN9e`6z z1@Ny9Km+}d=mkt z$2+Yo*O`aEGIp+!YP6R&)?A#YQ5$&#o$R0nD-V#H$|jrj;4xasgi0ByM$TUK_1E{_ z>w(_=U4Q#=-y3pyivemAkJccws#IRB6k?@Z2eA_3KgLR0Q1Vq`0Uw+ji zA$V~ENYxUJ2UIvXz*~bm>ptl~Jv?>j(9p+JWPn}X4|B00X{wNwn=MjWVzx>J=2Su) z%4CA#RELQyD<+OPsX(il&SN%I;{Uv<^d{6cTm}J25hM`k+7LZ$L{dr*h3+~0a6RjB z=}g6LkwQWb&GYCp336f9(UvsGVFxkXkvXht!Qo}gf*fvA#YPcT2NU)iQL#r6IAN+L zjJ+!{bjeIm#?FUC5oQ?Ch)oR!oXygJ4?{EQJFsDJR;Wfb!W5cxx~@Dk)C^TuR#l#N z$t!H^roO(@h77Q536HhrR~$?JWnxt$1JWj!B-+-VkXd2Tlp>%Kf;^dcS0N$JcA3fX z60JNz69FZPXj%XY6sdz^shpzd3SGrrri9CB9G{_p%1JqB8dA$`h%u-$7Y-g z73OYWmpxf{5}L#^81>SoTNyQ-AGGUJE#x_sR3{%i;UINfBA`@m8RVtXvF&7QP4W;v zx;KGdB4Pz935JQ9$u%_Ac6tGJu);Yj?8W?w!|SoyM3;h0%hkX{Ylxxs>>I?&*U8f) zhAA8(TJUv1D1n_-;By=E_+0h(tI?It3Au2Jc-SZyBEomZG$i6$$lKIPAC{#YdoG-NI5XwX6MA|E z$-h~p7gw#UCOg>2y2!$!0!AKUaDB<0kuc&rTBW(1$Sg^vi&A&o4(k;iako_8(^I+S z&C7eAQb-eWr%Rb|5v^VW>vvROS4yh{+9ML;Ovuczy9m&qB)y_oncGX9lV{Tu!}eRa z%e7vZ!-Ru#Ec3{nXRnX{KA#x&~RGurVvrVVHr$S6odGFex7U z-!BHSyKKqZyMhL@40=H=1|pN1!)l{ODI?8YYL~+z`6<$22sxcS?t*z@okmg=D`a<) z=ZDy*%T1K2@^{)*-t$L#E8SE$r>pPKM7W1XJtz)20#gr|A{)BBBeQ$0Y^wjkK^mOM z{MinvYkb}fmF-k-DxjReQ-L0zhie9TJ;@#$b;bG*3|V)J-oGtKa(1b`8*8oj_ou{(|U4Y==m6K7g3%-7x3T(}-0382J~|D%7e z5qo%g44k-zLN8%b{;B^FD} z8fDr6`zvh`2^_rW5-l~9Jfy5mZy!Dmi7_0K=mwxhxVgDjurzM+wIUa;9|E;F-Tw=)7k)ZvpL6jEQALw1c;q?9x>o=6kH{u=}b)=l*bD)eH1J=*8oD7@6Nff{a@aEWdSj=?6 ztgC01Bjj+H#7u*7VV;z`?&qJ%0zsqUtFl=g*hFL34(gdID~LleP|IsEi?a(*cY4Yn z>8c}(0OfsjW9c=l>f9bp#-larn?U4{^>KKW#G6*w%m(pL_sqrarPd<0*A% zJJk7syZb}CCZNwZcHFsrQk~H46~i@YxRa+8dO|{blTGLiC{G5`^>2w?sc3O+*nQ zOenFhhln{4j}Sk|d&g!ETF$0nm0OPx4zb+nv6lvHA^YGE`&-kzAEw~cS?nw#Js%1j zkC#!<{c)wQ>9WpFfpL8M!cLviFIOgKukWS&`oO$Vr`|a+ukvR9*4cV7n5=oxj&ZVn zaLs^0?vbj~6JQmXOFhKlE4W)0yZ5t!>%9zjHPrJd&a2gNFz$Wwpi#BgfLg~B9H>tWqq6YSrxrP;_Ozy-E%g4Pk9tEBTHtr| zbeau;O(|z@!K4ixgugbKg81t$voZ}e{pISuXQ9?txSG^Sw^lE;s1zO` zmN7sq)61Z8YD&s2CY_kNrNHhQxVoR-$gYjC+sN}WkG@CiQ<0b0YxHtuGYpZ?nNG8& z*-xykO)zF^m#O_>z7C}wfH(o}fn}4Jp@30_?HCC(;J6lh9dLSv?f|L!ft`zMEN27g zfs1)TnpOH2h$K!2!NsC33Njj=5QfzNcfWzNUSST>6Hw%u6(5MURt0)6wV?7d67Va1 zJ!?w9M-r9S05?qN?b|Rc1a8>S`aZwv>TY>gt3an?5-GB!N8Xi!L|NRDVK0q13b2wm zPx``^R7??3Mw1oqfy(x_{+HNAmhs7z3*8cnMdF@Zz1ZPgw0fC`F(;m-RI1rvUQfb8T^okC43n=Jx#!sMlt${$^6_)!4%d z%%A^_SLH9REyE(>q4h<05x)LIkfbLX-q0UVU73`4{6dXN5DLgtX{IF!=V6?FBgrgS z(3@05TVOSTFx8@xro^$B$ixJKmDB;hj^3U$>0{@b$0iS6Zf?#Z=_@P$lzkj3X- zv~u~l8HUe3jjvc7g5`6f$i}TLy(cwG%_3uQ`1Eu-w{}SYDVNbhjtSouh*WNWD`WGy$5!d5z0@Ps&iC5J(ffT_5EeO|8b1Jt-(3cER#{)m+ z`f_>K(2%Ulzj8wo{6u2;+{GnRPXVq7G`Ct9cHx1QgDZO3r~7``Pang=BB;~owK0R= zDU~{sk$K%IVJrCVu*y3COutE7O zj6#l|NIZo)L($BuGdBQ%@;PuBz1eRV42ldUCfH3b95l_@dFRnWqwJEWk9xEu*J|6E zK~9bYqkL>&;IVR<{XMmzav7QU{PW7q2P7|-QwO?Ucb^TlH zXBLM9xRO2?89_ZxV5a|1=c=>?~Z3ISzUV?U9jsK0COM8HT3q;77k|>Z@5Ob*M zQyG{m)IK2AAZ7w$=)-nUS#z;+DnzW<^OcIwFKT zakzgfacW);F1qBsQ4!Q~eXnvz%(1OQ0&jT3ZMNf!4=y`QVu$6oZyc zRRxeZ&BW!K7R_totrykx_-7zVl;?My^9VX zVSlZYYBO1poS}QlHVEU?HwUg@b3nl!G2ADOVYnl`}f+|#=a6$rn3DFM?T?!cSsqpEdWR=g^r?}?_5@3DG0GKvh_Ymnr zwWb9r6$L{A>i_yG@AlI|_D?@qw(P>COFP*ssW$#`p~KImD$t_AP6WZhGt)`D5!HvXwO4-K!KbIc7>`g^&g>OuhCan)+`1NPj{kki-` z`Y1!?BQndr=#UQBJJY^-k*(jqa!W>PW>T9c`(PLm!95k@ZI?<#SM{0!AJG|@=0Vce zZqLRQ1$iu8={+Fzp?p0%isa42+DV_%BlE1-l*(;ftqU}rgCMJg=1LeNk8 zp}PNMs7N%z&^C|VGiTJ*C=?;OdW#s~w zP^A#sCKmd8zn`pr1+uDJU$_<(*H+VEtVs|aLapRsqUn*5$CG*QU7!zKWXd*ompZS^ z--r{SN=zZ*)RM|iG|(e>gj`%w8;wIb(7i~%OwK%3l6VIWUm!G?Bn!3{n^@+6B=;ka zz3d1&MyX}p6I}}n3yRmVJDhM!fadyHFc;NFUB&Ks^`@d&ZxFR#{p?rkzMtS82fzrS zcYX;~6QmV!^(3t!G^hFa>FuWvxq>|c z&ObM^FVmj>XZs1Gi>`3PvY;M;CN$~QdRDw#b#2X6qBHN>IJP!|I#r&t6@uP4IP%|2 z;RU=zTwE`(8%Lbb@US4rp(3GdF!_X!e~OuvGf_2_;AX8P~S`(g0C zw7N%E`T1|o>AhbrZIRm?%BY=av|5MEiB+c3Bvnf#uyspj)M-Stx%Y=Xs|pWvlUFJ$ zsUPjR?Gb5{rc3KpP#u(*-2+%WTun;f^ZBL2$G!gJ6x=xJxa<8>iItb24d`FtZVtX| zZ2w`pQEUIzFc%)k#e2Mc)nj#Vn|6QM);?Y2n)iZ*Js@iEYB{u9{Eolo+8roc@NN^I z+ziw=q>%G@mciJ>GfbU4L4*gW-X1V^k46O=4U?a=k)N~kN?8N0AjJfjZ?JOxU$8b(LC=}Y7+AcwMfLzj1aY|vWNj9s=XCAOHweNQgytsF*O z(e|t2uHx=q>gdXibi1zo_=t{&W^wrTSuVBWom7C^XVecYqxrQWzvi0u6F3`Igd#-} zwh4&2bQ6SN`rdK#BQTfO=aEy{9SnJmjkHm-D|ZvUbLrL&p;6L#=n_Y7V9lXfsZpHS zx^kmbmQ?#;2+SvAN4sx%Vl}nwft&m88M5cCZ5p5Zsg9=ZG{AYuLS@YXIW+3X_G0^r z_PHI@#_*ysCu}*ljV+0_LWuTDB=Gf~HpHki~5CfeGd9;>~*wA)At`$IW5@mz|S`b?#WQWWe;31*m8XwvWZ$JieI8$nze9d2PP6vm5cRQ$5o0AGUM3s zoXY~2#y1u*FQzkd|8zNrKVmB+>jsKE0FX{MI2n~4m{c;x10->?Q9KtRp>^CG!FINf zqAD!$mrCXN8lS4DaL|M5#Ig~wRX#AcVR$;Sa%FSz@K$hNkjcY@SD-o+gP8inc*$CM zu#fCox9*xXYYOa1W>|M{nF@}rs_mt1_k|W8H0G4Mq?Y3FkQ?IS9B3@PSj`h;vy5;9 z1i`Yo(4Jc}>uk^$(3Kz<4(Gw9N?`mI$G{R)Yk>MpAtV;{iV;AxdLOBNTW~+hRTFjt zUxZpaH1uoo9_#3)mRGKSr!RQcgixzz#!sd&pCv-2qBX{{e-WDH=RUW?#InAfH?4;D zk8u61r!~Ld3)Og&TP&5r31Da=xdVV2TZLYq@`-*XGF}v#W$goAcEJH+XLOl;=h5!f zJv%i^e~=Kv40?Ens#n1)jMl{6f8Q_Q=Ty_fxU$Mx;xBKD+fzx?7&szsVPEGg9sn>X;3 zCxJ7(Y-y;Ao3dp9y9d%OGQJ_N@|!|yI=myud6IE7jZ3Et1QSOKkjM(adm6`O18Xs9 zL_y*`R1hvk8O&n9Y|vadu>ySnR|IjdqXq+T%0-(pY^{TEYSCud@>v`C2s`(7> zVaoSprum+4^*GbSiyr4|YNYauG#<8k3K~yuVH0YCe9p?Y3<#S>`$cA1zT5UhpF{)a z#6h0IIhsCMC6;=9j6yJ&Q2Lw5Ih+tdV<(r?HI`3YYZ|+{!vicmp5S~7 z{W3_Ak8=FJwiUBB?Gxjsf;uMY(`ahwA#$LwpuLcfPOV|&PpttF34oqzqCjU%Q^nAn z&+h2^GbZf5ptduFV>~KP7^V~4uyH~mY3@)tY-Z+K921cY>uETCv+Af0{e)v|T~TQf4Q!oP@8dVGSP|)5p9pm#51!kC zfpeigQ)orIZ+v{vdPmPE%?rjIz^|~4EseG;Dj8t|m2GGNd-LwyU9hp~DE7BWI<##eFtTP>`^(c)g<8ckZ(m_n`JYu5cmv3X`pS6)6e{R2 z0`=%IILr``9{f3eX8-l-(u+9i)8y4;+|ZQQxs^a30`i0d_5#TmcUoZu^29=_Sb5Y# zZL6GD#AM<3!^5+CdvECNWnrcm#Bj`kjji&j*?>%>JXP-%xP zkZ z*)OjbYV^$YWY(K_?Qk$i{6j-E*|;Jr4{qkk32NlLa>5}}SP2rr>EiK{E#GrgFZ;Ky zwLSC}_U2Mh+oFx>Q{+tJ|D)_X0NX0Bw)5UA>1yx2_w<$}SzEGX$=iuDoIw(2k)4nP z0)#*kAV4TPtTI}llsyYAQ1<$u%+f*`Ewr?BLHB~T(d9qqO0u00O8&Sv9DbThV_nd6)|_rlMN)>TkEWeC zw?cc$U2uoVd2cE~X2hLeV$!(7KTMg)8f-*tLELtr;M!W`t2Inv?S@S7oFORH2?uvS zl(VnHuL=t*uByT|Yq?q~F{>1v7B~u1SS*(DVLXt}-cEe%PvN-|b{dYbmmgCYPrjL} zX75tYzo-LuPKC}$s+V3LV>D_(+eLHat8M{$10_Ft)pi53`t)A83}$;N=mr6jOdw95 zxSY(NJ^QSYktF*lIp&I?1V#+%g`Sy;TjV5m-K-s7Dzn^B&tbhvf%7~l(!;;HzVZraw9MsFMgak@vn$*x7&fqo!8Hq=QMt*W zWhOD3Vk4P-iJS=go2%P0pmP72i zXiLU2&$55J)F_y9;*hQ>)Apn3yD)5Q*_8L;yrVqN+H&NM#ulgU9QzM4STmSK3@vja zeV>?|%<~Uh1olz(gz^2y51Qm2u`WNcJvzBVFY?N?11F3?i*ghW`DxlT)px7I`EXa@ z8DDzDP05^L8c`P-Y58Goc=S5}f`A1AjR=a1li;g>2yU2-W|6XPG)7-IyY!$GQ1TWl zoEdETwMndUSOX9EzpYN z{jDa^&V(!#5?IB-F5-ww+I{e$CnWONfI(4HU|)CR{x*5rlW=FBm1#ry(EIdS${bm} zBHX*JGn9wG6wXoZgJ6=!gOdkJD~D8&wj+1H$Ug5Tg_L)~AH|O@8>uy)5T9W_2z4g2Sh2RfW}^ycO@Hrh-o$iLi^2|@P~dMQFb}|koh+^#01-eFSc!=s$47+s zLyf(BUg^6ynP9WYTj9(_M!6Kqk_?n3MGDwVXKj`0bxOerRGJl){m7tr-yi<)2lmIf z_he6A+uo+_(X_S>1d_YA`of;gyDuldV4b9tQ_R0)Jx?i`Jad>fmJj`mUPoIZD_4XI zaJJl_IGn8)W)p-k>=9WHM+^C`u5jp`odwF1POnX++CQJAk%bn`bLt)A6VFC8(UiHv zoJ!o&V-^o@=+ns^VtLOJ4(xO{{W|B|>HxeXp!*lYEYjvLGZTU--_}4@<1x^Qrc*-) zN4^*|HHV(-1cWmxdfbuE`TZ@WH)McOb$gXKk%Xgx4IrLW1kGeI@Q=v=h{rs~t&D-S zF{fg1N-VZT8ScrrT6-(zEhu)+buuuapb$@ zX(-~cFOv(|hh}t`CzpnS7h;+civ#BYl^9k*GcZYBF|$8TmV5eA)QZpql=D0i%h;mU z&V~I@&Qn+hCu(6@Bo$-?GAW`7(pSN$Fulbd*mt8Cam_jPjHzu8-<)Xc4Y_#l@`k5VejWfgrVB*y3b* z>N9@Bnl!D-$g^h_@0E($Bvvf7E7WR>$xawXW)LYwQ&!|_gkk?ZpQPF6cYl0u`jxCi zsp#?%iNG9U7`}YaI`5=mo=PLEZXW3vc1-R_ivYuy-ZAOY?9E94i)Lu`inAh5n_11Mr~TZo9*>klFEQ05%4+EK%JVR?WIF+(OW2Uc-6`_8!9{Z&a^KjPH@IY;!{}MOsx7#9-pNiy1h`{ccREz< zTCcXNp*ue~teb-L*iC+w8Bq!<1q8i;fSsCwrvSylh?mQd;l92CLZv^f@bD>;A;5DM zd5+B_(RqH>-+!iQ!H%-9BOR0S#R4k0Yy7N9=P&;9mv<`4Ay`?V7iP-rwT*z~t41Oh z%$w(6nD@~) z0cB`2wZ&1r0N2V~2}PV4Cx)>G8d``o8nu7^R1a!KV-u3r*mMX8esa28Q&*fQ=Vv)f zoglv?bFs0{u15#>a;fxJiqGasWOb|328(O>dMo?K{QXO*iQ7x$)IJ!Q$+Waj0K-PDNE(GRztBp!CUWFt;uoZRRfOprgZ>Nk3O z@9*zl*M7=*W&W~92T93w@fN97c;e+gB5x0_2>Q*r^r7DZMaFwjZ&3gn3lf!zElO-B z13(4}hcXG!halIKkjyQU#F{nNty-04&nL^+XAiOusf0R{G_M7$@4k~C2uM7N&KJ&0 zbvTl`R(T*yWu_`u4Kh9)Do4qMp?jF%of;}PgF(bd>>0Y;sJURKj5S(B^nZ~orHSXS zhhZ~~8-@}n#9W(dD)?ofv={?>5QAO1&0@jW$2V7g#PNdEn+sZr35Q#RB9&DFgl8gm zy;!gd;b$cdSEL>s)Ti1v!{T73b@?~@`^keh{DGYny7%6{JpOnyd9a0-Ee+KvFrcb} zv}afmO*u~07$iUv>Ai5&E;gd`z(@@u!p=2tA zxi&3;hqBx%#Z^FIzkSx#AVm1eKw?PK`NAuPJ||3K!q?sYhWX+Oq-`KpjY<=R*0BCD z$BoHZHUoYIKcbuA)iL+-=mTBBm7$O&mthMzLr_>`{Hv(Z+IRLRv!gy5#FzHKjEbbgBdE%DVne%lN{8z$Ec67+Vkx?A)J+ zo=y9zWwXCm)wSv}GOMMQJvMdMc7*0RBHEq|>C(IBIgO458+*4qJNKQxXQe?8f(I06 z!1pCosOD@q`Ggk??GuAmflkX93nP}DKmK+n0}7D*&ad`9?X;J32B}l5j%U}nqH7n! zj&89gQ5vKQ#^AVJr;8_n85IeazjETUaib5-Fu)oP%8m&~0S8vlEO3EY<2}}RK!#_8 zXE=+(;Y&DoUr*W)gL2Ham+VE{;LT(ed;K{1HES_*W575HJO@TnG{sKX9_NM`Plo+Z zzw^|&e2rc>XUhZ(t=wCAw_2?|aBPSFhiq?RPV(MZIRRwv=a`+K@G^v_!l>u4bk9pA zMyutg9%jFpV7F7ZUP#7|^#sLS8{z4xHbQ+F0WM?-K^x(4|IcX$78IaVIOAOZ*GU~# z!6yGAeNZy#V|OC4#KQ~aHfd3$mJbd6oYK_(sK80|3bm$oE&H!ys{d1t`SUNBKR?CZ zNgkHCN(Q;5%<|ZK$fm;5{DvYuF=Zsbs=P1Z%KOjLnJG7JfQYfkt+<%Lx3G&brPw2>{>{g0=lU)%j zmy5}7jtd5_$daBuiB4d4S{Tf4U>p+%P591$0|!lh8f!bXhms3C{dxA&VVOl*l$h=# zzZqa}udsJbbriAeL)1EvNg;O~ZSv%qEE~pDtTW2SX3|D{~FF^3VkYPo;V$FzDgZ-@-RAmi%JzNsl z;KLVSOl$i8Y->UNVY&oC{(+>Q=l>D@_=xfC;%8-vN*VP-{mT>-$XGh154o7E&=EYj zc--}-WhKklf;kSJh#|JY*+bUhb#8mk?RWG$2`Sq)&&DC|;nlTgU)*1M6rodAJJcvt zYLQ6>37t?RH;NcJUo5n>Ney7ZsdtJW^-Ltm{4~UKhu8rlq)$Aohsmgutky!#Dg~p1Zpk6@a$0iZosE<^ozk9 zP6*YxeBp=qJSJ!itI+l#b#qNvph^X@>%Ds}yX>{v)~%^u=`^kpi@`cOrT5RaXtdpN z@IKgvxZ|*F(*z-DADqp^tkdf)*m`Sfy3tbiFh}?xq#~c{5aL-h!3nUtsS!s|M>8A{ zmo(^5W(m&zfSzL!ZHVwpEY z{bKrf{`W|qv@v~(b01{?LhOk*1_dxqIFfTP2@7KZ(>g<}Rz08gmF zGBCA@IssCvW4fnSP~+zY2!OFU5ra3*A%fqW{o9*MZ*pZtw;IZdsM$a{%8jTX4?&{^ zeOjdwCZDpRFbI&Byj%eyF@;7hwdqtj59Cj-luV)oIEP%o^3xK(ug4wQo|LOHisPdi zmoOo4F6}V1h@;{#`xz7#caRGE{Y&O4UCO-7G?h?%6_L4@HQrhnDijRDm8X^DGFUVN z9U$Zqzz)!|E$ZYJkIQ*{P#TZEBkq$(kk#q{35wRK!9gn;O_$NhmauLroOsI?ohOd z)T-OYln!}LYF-!K2y?G%+77g6U4k~o$?mG~jUDrPd60=@hr^ol%jMd~#}wg`|Loj( z&xt4I*hwM#s!k$yJB13m+^!1wiBsOb$tN@SRj9Di+h2i|HqAJOe`vPRdremc zo0VM92Cj2H{VzVmCDhHfhmYy82iJ1dpChe!!|Z%f{ix_O&-{%#t9JT>1Xk~fO6CQf zKtL_*82j6hvZv}7YSjGnT8rwMS6>|}n-_Hffvd1{j0lDl-DN-KeyNoP6)f(2H#fg) zZr9uld;c-r0`1S#tVQas%nQoi69bG&&3CU_)jGFVhjrP&?h5m@d-ckW zi9S7)jYOd{2OneK|26lAZd50ZEqlXmT@zNL2Rj}CAQ=Kf>RT94AsR}-rO{lDHZ^68 z`N&~k`NHTS4lzxiIDGqb5$!1SZR8`efV~5rH3;k*>@`-s0=-`3>m}->CDA6!NL%CV z>%FEqAw-si2S_;s`x>NqNu>LpicG7{0c#fH>J}*~mD+EC&+WahXuT|+20sm-P~6_gZ+!y3HV9{cAI20 z%ry{6L)gEPgRvfLKgAVbMZpcvAYHC?^b%Zx>;ebV42Z{|W4P`Ok9H zGq16?v(HoCzjM>3@V0H4-x1bqubOR^!HmsaGMUYTFq(puvzMkOf^n0V4;W5*V7Ooo z*z7F;q2D{})_Qh=J`zu%*{x~5Z>A-Oaq(cKj60IL?1Fg)!2~M;l}eCR&LGsy0rGxM zTNMIEr7rMaQc1!UK;W3`@RoYaO^+NdgJ~E@a zt+v<+JifjZZ27#a*D&A%O%eKgiOMj#0}uhsoKwb4wckLJ^MC{zv1Vv~!IP zU0W`juS}jJTXao~4|U|u3u&II@4Plxylx$w?PgUqE5@79iG|__!`!KkulK_KXP)ag z>d{qq?emIV^2h~`Zf)p`1;ARN!U-M0oV*USM2&)I1Xk~C0HSZ?o&euY(*l~~x1a&kRgk`cWBoQq5A5qOrWZ6Kc)%rOvBnZnK0DFD@=@Qubg3!!YqL z#E$?ug7t4rgzC)5vl#>72_J6f;oGO}d_ADo&n#w>7jOuLhXFjF+{w--tJ&*DdKk4u z+pV^!H^dZb(nF~x+l_vvQxI4d(zl4hlF&sJ!iOCRfLv9koB%+wN5vAkfPs~9wS|DQ zPKi`clh@d;N`<|raRXn~(A(PmNCu$C?MMv1t)CB6sBV3UjgclQb~Wf8HEAIHu;G48Vl< zLI)fXnYf>?Nx@$RRMI48;h_5RWe(wsctS3_pXste53mQr-BdjtXjaa?N2BFSjB0D6L7HuJY$$VyjiJ$^SCUlj_53% z%CsWswnSggYuj|zZdFQ^_1O|X%j>%gj+DAb+ZS?XF0?N`zEf%yb*x$J$VJ_&x5pu! zOKe+3>p36|ZH0OX>^DOqa&AnyJ_}jrsd0}2jco119HHmT**7*8W1oWr{4>IyLSLma zbs3B?ozYZq+H*#=sY7q*))|cjyFF*nm^uuGnAU76I_$aH)xpt%1`L#OcuAX1-*McK zQR)_H3$v$e5E9=bA)gaQ+y;QDWhr21w*uDtTChQQZs0Wnc$q*%xjH4bxphgc*K)AMmQAQy)v??!(&jd= zI4|_JwxptGTySA8)ZU8cp0%CbPF`S>ESAt=9&aW@LO|x&+47{de=4rZ;#%@V2_P}`K3mIaw26DK`T!C~Y z0ZCs&i>is=+$`Dy;P4e zB1#Lx)|_!pH)IV=_u$u)_C;%>Fi+aGYJpHD^*b(I!&9k+D-W1i>rXE4eIBZ!GMfW< zr&JuJEYeOXO=7h~1RM9H2A!Iru7~l|R9EKWEX}Zk%U_3u#B%yh1msuU0fg0r>JdaYuREoSJ=Cy^Dai78eU`{aT{7@_iADEMb%SbKc(b1KGy{l zgZ!5JFC=f*?-GVjaZeF)=gDD&qmJ*w@-;9NuI9*R>jA>O9CvgR1b{shZ=+h8p0yHg z5pIhsbAoZ4S(W0Ngm4qN#xy0AOSo(Y3oc*07(sK<(P1}3ZH55(U)c1&q6svH_otHA z+0GRu%jkkIw)lhN)gN^DN6W^7b3OYPH9Ej>o~;h6e9;o!YTZd0r=XguM;3$V z4kJIq&>Gu)(@_^3ZNoCw8pObOi@jiRtHS;Zsw%%SBhhQw zf9BOT0o0`_5@avOh2{MbM^4$Q$lWQGMhx>eXBd+te*CEB3d8XFg47}`Z62FhwnDBn z^g)Mlr2+R!oh!|ddpyg!iuCFhQ&i=adjpGFjGaoi%;RHcsYCPZDt#hJt2_%F8pp&Z zn>J-WB0mZ1dkpP{%r|KD#3dU%pbnPFJ=N&w1sfeAm)y7W+J&=Zvj#X6K_2cY1WkZm zNYO_jMpyv1v<{l*Cjjf|j5q-ft`UEME#bn18A%EF8PJCMDuXGqQyA7jgVy*5&MLvj z^_#&?d)>DM;ASzV#v2}Zc5mq(iKGpNgu#KSRA#A326`#e2*EisI={@QWzK%q2&&>K9g@%wM@E{#%y6t;kDw0MR4huYQ9W&a*PPNMwewC z9PS3#MS13|ivXK&Bcz(If+c}4*#OC6Gr>dv#*BsU;F}NccVS3|N&!Gw4#nVUgu@8i zkH;HF%lU%oM046#aQ2B)2u&3Jf8iG36Sx*o4k)}dujL3QGDS7;#cXs%yQ`$?QWmSN zfpKlCe(a>e*u|EWMeEqYxzI2ZP`07*A=}_4uPx{HIjYW^ku-Yz`s-b79a$T#)v5y) zs~3_wjYkS?GC(t1VxD+#SC&>One2{Z33;Z zb>&2)S2GxtSVf@$t;!H|_obB~RjRzL-M7deFeMX*ehvBRLsBsWfek(bja6cU%uojT zssz|yu zKezf;Z(K8~)yN4gb;BqDBa!9jEuFYnom%HcW)kP3U&*tZ{qP~*y^Q_X>;MQh{I1Hb z^lVFDydQRwh&1_O@>zPFO=y*PH)q*}K`T(Qwp%OJ7X!Xg3+NAYUFz1?I=xyArVc@5 zxwb2AObx@vRM=H*Y7{tTGKu2=VVEmT7l7__63p+mSy$C#5LCIQ>LG>#3@ii=hjp>y zQEbD0sdyf}9Sfq#+2uwlW{0a$*7!Slo=txZx7j5KEITt0nyumEC6SMdFt9FB zsJI5LIl#zRL&DrGO-iE4s68o<%M<4o=Uri1mbZ>hj5}x%Ls^HRO*;T>+PvH6gf?xm zw|8y9xHu1+p@sSJ+V7s*SNg70+$I4ud7Bji6(e+NK_&os3ltZKC5O>+>hFnoXR+&s zj#w9&)y+NvtRv4Fj6wk|wMk%G3iS<_ZNTcY4n6F)R)D#6;Ct*J-^~A|D-9w8XeOW> ztji3Yi@EZyqN(5_pPxuZC0ifLp*-~5-qVOjuw`2WWHeW=0H@lhSHRZ6^*J}fpuneM zgY1XUO~;{WJ5;hepk{>}gE;Q97(g+bW*vk}ooa+(v%K!=nx3$k0W>r0x(9_JT&QKM z;6XvC8y3v(t^NW$LawSq*uRt%mbtvh`N>`;wuZi}N~I=c$Sft|3nY zWulN0=|!|ic5X97I)>FGSbw?~oC7kXHMxfDv+7hHr z^uM8#(PgV=KNqa!jk9i_ zb??kzsGcr=dB}>{90oS1P@H1H=lHcK1V9|SJNySgJz-@pTvfg8icP;pRShuBmg zpdR%s=%mA={zuz=lP#2#ADnkXLg`UNR}oj#Zg2}Nb>@qHq5X9#3O)X^>%$CyME zhDX{Wr?;pbOuNAGM1@uW7NHjafg5Ra7{(&=ThRP5uz#{{|8VCjz*RhBBYoyux}VOo z+cR^s)Zb6N>MeGJx?e5Gj=-p|m`JVA!ln7b{sp)4q)ZE=U|_6X;}!{xLa8gNg_@^Y zpHF2rTZATw=k)Sl4|qps584GlcIsPnT!8H4jcoIZER1dGxmrU)XVfQ6dJ*|H#BPWI zdFBhbJR;}<;7dzDPB$0YybU#-=|}Ol@!`Xxf*Z%-5quCNUcbu(fX!w=6%$?*4_LH@qK$owWnqVofRdoM zl>YdQt}StsA*r+J)6}~S4GnWNP(Tu`tkXboP<>#DHcYWZYq+a;nsziSWxZq53N?D1 z3?2hW&LjlX+aaes6PR}I0lPV~R@u;srgk)|Va?uEv)ICg#E`HDnp)I&&wxVe;MVH3 ze#|;S_2B!MqkJFg^N|<+W@ld{%e)YG;+p=*b(Sj)1wDVMdiSaZpT-QJSgukJk<(Fa8BLf_L zj*;tn^zGVKnccE7X3po~TML=z+`g*Xr>7-&Y&i;&DC-yIKNnOVU6u!kyjeAL}5dmu!Q=vDcYoB!Z%?rtsM(>bC zXPZ+p2j`DDjE=bz#Bc4lMy$h=8uuKasvmb#0$!&;#3y@AzG16g6OHwogA=pu2Istm zRKQlXwpfRk={)nC2FHY#V&HqlJnB-EnN1u8HU}qy>J3gl*2g;nQcr8Ot=`dt>l6 z)fJqQxq3p?jK4VF4W|6qW#qx4zTgJ1wa}ePlXuu4`Qd>B>>0?v0j&SEpZ>nDZ)dN< z!ni^nA%Z%9bcTl;%7g6zL8w(pHg+ctUOxau)yh@-+0(ckV`svTZ;WGmFewRjf7qk6 zFloN!`(4KNptM^WY^z1wL%J5-;Im122S{Bf`!)#3v8;olZOWc)0lq@c_pW3o+oK6G z*_r6tzmYw-OCb_D?65{Y+@_LwU35>I%B13n9U_6s!0z~W=T+=~9Hvy-=rv}t)G2@y z*O+t(k6jhN#Mz=AYUGNA{u?uLK9j65epJ~&z5B7ubOu8jY=sv>z#l+nrQ&*ln50c&Q81TIsp_whle zn?2yBe?c39caLw)5D@JNgn&l~6&8@2V+ov>;i9=O#_)7wPc)R^8c}Cm+PKkRj`jj@ z23PjWwVE8v(h1$&A~FBcjIKAD>ZlMy$`k=)MQC@*nrM^f5%BU1)n0q!)J7xvt{7=! zf0RWK#@*%e!3x9%i6AW%SR#y204s0LVxQ?_4}N$k90sz0*hwd?{}T@HMNP3F(ZP_A%n1u)g<7XnBp2vND6a9^C9l6{wlFaN z@4`U`=6X~6QitC<-=GRC^=LhlEoM_LV{)4E1?rAA_8$SapDYUbLaWD;zXtX)hLV~g zm_WJtP2?@|j|^*~W{ZX{Pf5&7bbsw%&P=CD=9b7?Q!a1ZEs}a~OWuf4J z%h4(WFAe*KUEHiHEpc0mes{HK1}}jllP^rcmZlK_zQ&|`g-Z!`%sO?}4fX5{?+%dx zh+xMDZyj#9j%bJXoaRs8H%JV}nvQ}H;~s#IO@ji_ZA@bVvF5@dFB?JQmzbOeIwU&7 z=8!&;V1GbPB82^%`QU@M-hv_c9b`Ux=fG3&$NkHjb1xSq3T3;ONExG#k*+J1KJ4rJ z{PQQC=#%RBR=15&N+^j(De$!L-65C26H>CTM<8O6p@SnlXG$;{PD>ZZXGo}3I9HXn}e zpo9$UVqBMVkBveRjG5I9cliVtzAJ%Z&I>n)(IV~>c1?4~@f*=x9Y)*+;Nh8ZIgSwd z8gqughzuTHF?%RFqDx@A#BqXV_$qK;BV8&hXWqY63?z%R*O5V>27UE zm(1GW<+rF~+SWFz?a=c;%Ov7+T+m{vNfBx{<~$V(tzdT-2oK7A26&~1m-{Tx_0MrQ zRD^!50cUsGw7g=JgBA%>7Q($MK=B^-x5Onw+iex3S^{E&6B0<`Grq!JoK;)&_q10%%%ho{g2J~sRG6_ z1q?mJ{)(kF8E3+tF@G%0o*d!eO=nbH-nCfE z=nP`Zx(jB5H*tbDnZ6I(EEj+uqab}lT&}VXx+0 zVc9*0tHBI{GT3RT*3$vJ$HbT2BX}k*>C~WYIqLm%!5wT9lN;IP5x9x_&V)ch73XfE zMJVKxzP=N3(tugymYUt4By>JOlJV?s(`Wnre3j5$N)AigD*i*&Ureu}f7VOUhV znap9obNyj=`rF0@3a2hBYfc{JvVKuuugE{0U(CK|vf)UK2Y_3AA>7HutRw~GBx-?Y zrBmmgYco6MQ+{2`!T|%Ug41LMpkW8VgP6=8_K8Eex4(GJ?TsrXL(L0xcn2+3b=MIW z$jq|B1wJ-4wgd_W=A*5CUCjUv^n-(fA$t@=g^g+qM^yq>^BW{^!-r6B*Fr=+GV(|2 z^4g}+SaifSu_ngA7*BlVToRe9@VJ#FrNc^|E$=O#GXTi1?@=dLYn!QCqfhB4ZoM=i z1lq^wdDm67{y76St!->JAVplT()eq1b0a)9r5)V7G-uoD5l6j{AA`7pBMSuy!Cw?| zUG5i!Vp2m*Kco6<4|C5cwezl{+xu(FE96SpJxt|mPgjd)_ox5w9HhTI>(Tdz^sU;o z)M6y7GpjRei`3um-nbfZ4I`@1x#8o&+KlK}{}gA9@%emk@U4n% zY;il%FI0CC`-rwxomKnU_0&zZWz<2XtgZXTAAGPCm|ix%_4pMLw%U5$ozJXglrsLh z=kK{VO2byI`PwRVL9LaVi1o&ZoV|>ir7!N@5Eg1Qg2YYpwSi%)#y(zqIh*C#2G&(V z5=BtTcrp_yUwgINC1il!UKB{ri&O0x4f{AI9Zr}Jc!D0`Uj6h4CQ?^K!6IWR5MBaT zVdq{slYoc;zS6YOc$+9{%_;?fPCUDczVy)6x2m?$MXi7w7nOFk4iBf`mtSR~KB`&0 zNc+vrU&8=qXaN8(dzCJDEjJK;nfkzx-oDa@Ok>j3zt-=rF$1xMPOO&XI{{;!7uf#hCBCzem)41hngE-LW+_?gOY6? z-ucYQ?1|**jBj>TU(of9v0m!t+O0#RWnf^{xF)PFt9L<@9bad2D?Z zYsgv|WM9d$B_OffNGX)Ayk2Q4{V+Bb8^-~CH^eB9(Z+@qP{7HApniv=xFdi!;A9D3 zD!y?q47_2(sKV~0hOwHKlBUH4Lk2&9rVU{R1lNV%Mhg#pMwSw+cfdp8co%zeKcj^y zT2N2BN6n`;4XFaEByI>eP%)K8fy*6+T2{T=tIrLD;A5s|sROqQR1#P8^|8D9NQE|5 z*qgGOvYUJ9B>PV8@@p>73FI<5bKsKm(=VzcOPnf0I_p*qU2;Z;&}a}A9-dV7;oee! zzGm(&_11nw#Zz{cM?Nf*+IgT`dT=mLaSlcTYo1+zKS#|X_u!g*m`a^``6tie|?TA*VwJc%{Q8|E>CS7x8Rt&vkEieSagaey~K&IVx>IHeNZ>(z7*oMcxUIxE+b>3dPj2`P-@Z#I=91lx5SHAx0Q{!-AW;n6O zxoE!GD?jYEI!;ha`6>xFoAtA ztPOi2QVd+lpYaPgv)wwNPn8iFFY*<--x$=k>2m<6dYo)zuc(yRLlu=lKOCpzqHsU3 zufm3_O6~Si>6RYL!nFy;Ea_f7k33N%m-YR%|GMJW`smf_feUwoZPf5vw(m=-86(AxzWe zBmplUtF-}mKhx&m@ia}z7h{owgV4?jq6zW0L4%9>ZfywLW?SibhwdUOTpEOrfEuse zV?jsMUwyT||K+NwZwz~2!qj@AAJ&Cb35A=w=EdYW7oO7tOA+b#u6?^=FT9>!{JjDj ziS|VYd&unxb^|#Fwv=8>{-}=~zsM!j>6yshJ}t}~YD`to1@~d$sS)f4S`Wj^6_p@V>eq(+x#0Reus-}KEtZUch zVbjI)K zbDO%OpbqEuo?ih?7{2_>E^sS?wo?vdG_e_)aBbdQyOz4)ncPK}ALtQkwY=Ewv-Tx_ z)%SWOFA2xuVM$J3=*z09s;qqG_Ev#h&d=TpXJrAgm~P_XKyiK39d?bD%vxKw8+cY| zRh#yrVR&cQ3+}AoJ8)_N#un(qVi-NgbB=)cI{FR6wYu|)$Eg-vf{qW5T*hwkmbE>l z01uFxiMc-%G?xf@ z|GoF#6HoLclf{y%Gws2_!R|rwWbr(-Bdb&+SDqbZAhs_*yAsWa$~rK7HJTATylbeZ zdV3XW-Xs6Ley&=pLhz6xAcMbwx_tcFPw&5-{Z8g>Abz5rmknJ4=18IB_dW%NB?uAh z*@qbxoRCR^@1Ba_V~z8}NDs>d(}FV<$xDjlqW<{X{hFVy!lEHuDx77UFo%OT{ zJ|KI4``e59`(LWqXD@2w>-3_&-NZej4QnzgAMp>!blOrUPzwd(K#0vI`o7uEzWEUm zJ~@!=rw-KGsrlV^rSFeFSb$p7H_3nX*%Q|UFpTfMdPM6RG;3^QwKx7_bqFEr=RzET z@IO~w_2!!ezzhGIeIgCeNK~`B=tv+`sjJr@2aiN>pOfCUY{}E4N*&Odm=%}5C_RUWI21I zzo<Ey;)b7BRa30i55 zI2m1j{Q&F7hCU8yukmY5qkcpSm*$cZ)Kt#h2a0zeM=!XoOi~s1ZToTK=L`~o?4Rjvhb|_68GyY(5wTku>Q8rI8ysI6z$wur?!cgf%xG6ai|5a@VrJ+nYzNPu0^K!}4CGcK^vh-)j{&$t*PmLf2@bZ*_UW?3%mHCzP_vs8ZqLCtS#1|(8i1d^CB>l8Jg2) zFNguKDs;#a1*eFtLl_RZfIX4M&6O>E+C;&_hdsI73w{k@rVheP)BhogxzBz-0CaW~ zXlSF;z&8xbHvl$6L?$W4r-e#jx@XLc%mg?e>b(+sU-52O@{$z#Tm7PxqNP17UFVE% zUFnf~CDw^`)W~4V$~BV_SU2xquxP^1{-k(O@uo7w>FE^`uc7_vXZX*4bXwL^)jNf$iE z6%bZWOJM>o2-_%!LG_#ACo(YCFRmHaf3>CDN|scASoRS$`zOnv{`9^~*5y6z+PSdy zWAxw-`=eD|rW$~i6vE`vLZo$a>8QEgJhEgtxd8PTABr4gH+NQanLZzGsr41(KdJ}$ zHq&EdF?&m;bS})GIiRLuXMcQBFZF3}FJ;*F$c624mpE|N?UQGydUtOO!IV9(=jOXR z9YZ4n_LO~S_UM|1IaCc^vIlt6G=i2B_a7PXqd8P?>igVOzEiIpwM{u8M7$tApUa!E z--PfYd_NU{ptLt~9Pl|D@d=mXG{azuqvts?@Hx7spMo#B{Kgyf+i$z>yz|skt4_4dw@H?DS&!t^~X2?%*s#z0X9@A9jH{i ze5pcMkQqfZvv+UyKbKv2VV3<*x7IUz&|!{SNj-4M8C`XmJ3Dnm zl8G{>0-3vueuI-aEkt;jJR#vxea3eMbdlBrYUUJ}jfZXKkWk^a?4~r)*sQ3xIZ@bP zDg=bBahj;KM-*|JBRFW6QJ3)z)gO~meDGrq_Q<*TdL#s;p87YcE_&-Ne^Q`yTKFmr zW3noEKTS(jidXNtPB`VHZgSe8&#i8;h%Yu<0LBQLTge1aH;Q`|R>?>r zLF=+hdc#tw2S`v7Lmi&3!A^RrZAGUP0lHWeCg5CHw`vKMUfLvMJ9T9+7 z2R8J`Yzdg$PG`FQ79|s~56A;C`6E--0UH!3&~>is6i4D!=K);=K$lbMb!JTN@C_5Z z=>#8K7I(&cIQ6gi4*XfDPIEODcz={@<-&fy*B>CZe0~?Qo8aTcv?xSzX8Ci{EOMoe^{ZOV!!)oSGqIP zO@5|yF+)L8os`DcC(X7Zi!i7O}Gb#5oX$_#h6sZ^muZt+j`vJZbLE;w*Ku z0K?q@C-04X3CR_$a^paI zJ~lA$t!nib)ZW_ON{mQH6fRj>V)}emzh}ds&@Sy;DR|^Fj>P)yr#>ez=ShomY$%$E z6;kxJhaP%}{XUexPftR{^xVX_7|3X40JxTwFUm+QOl;qi^XGRzaX$V9Hp2S(9RR1o zFx|uT0bl9~-S zk}meOa{P=!fx2Y#=4**m&urdbR>&k6>B*f4duBxWJ?rL4GH1kLvY~y4KIL5)np3rk z&5SVxOMx%gzWrN7V_XM4Vi*|S5?v%n~OH|!k11ccfKTxhMrS3{Yl@_GI29EVvko;+kr5|GO z+|(4|VyLiSw;Q&`&Bc6{vo&b-Q4_G|hw$jbqH_3-9L3ou?t2+bp+O`PjrUD&!D&#V z$a3_c4h?TJpMz1z?~9^%Ut!r)kWZ(dRC zKw^}(p65NrE&vB~+#PgOG$D20tK?MnTzn|x9c!!T5=Ad^1$nYvFZXNOwOP5;>nL1B8_aMY6Dt_xe_HQNf*E0Jdo1m|}gmsC-9T9O#+0or9UE%0jf1FbUkS6o& z<>Y3`-1FOj=babY)g9DysoS(MLD*I`b(n`e%|K`H(mkCx6483n{*)R59aS@lK3J_s zjV*8=PfgWonw7!Mh8JG}oC2qFD;DAO@$IYQXhf=_pFfgefCser#rf?o`HY&F7JtZQEFk^`9}kY+lWKovK!bG%lkOIhVV~>m*`3d`bS`&$(HIuT zdwXP1b*Cg=IZxjbV#0}@kf5tazwjgWr(`{Ql^j=nVEMwD(S)>?4tZReaGSfnokp&R zE=63Ka$CCYNNZa3)^0^ymG)ZVs?(cWMo?J>fRHmrj6xSJG#>2=`08`9sz5jVA=&Itj5 zDV#s%plBtVGhSTs4!Xp}QK(Z>^IS9L@}`O(P0w@;60xAel~Y8OnF|tP7>Ff`o!!=` zv`5m({?Hd3(*@%%IAz%1I2`n-RNG>DvjsQs>+3BR02vj4YFwa(cNT-=_C2beUXBejGLzOr7dT z3y=&vMHpU+FQOk0>$>Cmc739Ud}Q;@9iED4 zDl03V(SlT7p>10`lx7_xwu=F~#qKVi*Lz+cy-qprri&6nok7sK_h3O4+Xj7{{-JM_ zYdfiP`mJ1A7lv~5rQklBBVPvC*yZC)W*LUASHd*OS*W0M;X={G;adVtBv%ZK$DzOq zUjg69k*sp0faor14kk2ZT)9Tp4A3D5W1FHIh5uetol&fyUJ<4_ZN?lj0sr|JjG=sv zy$wS3)gHy?H+_AcA&4m;9$c<%$N78&IS)SnoLbx#2nWLt{e#Sv7~51*P3OqZ+sVHN2F|#yZ+XTomfFPv zOXtV|d3I-~2)fb1wd@1kU-`Oc+C>U#^)C#fH zJok<}E^3W|CyRhaHv0q$uA>r#X#pJaY34s$W}VDk4|h3uDOmW$$q>j`W*j!?VJtAE zul3HY0rhOEgap|QoH6V)#7pI(JdCCB?W?sf0uXKMs{;co+jo`oCq;>^C{wG`ZAecS zgIsxci{8g?6L`Mu@DBHCUE1Psq$oBTCEXIe`XK<|-I2E@h&s*g{$tF(EXKErx)+ib z1cq`C)|EVEU82_u)pnsb*Y$KiSYk-j_1{K3XL4^H{EdVyF4sHeNRSfi;rO*BnpRvo8Zg_<8?9oJ8* z4_Y<6DSS}6xy93X&h~m85N=|+`q#|pzdE!S#)Xn@oK)tMXV~0|-d^aetjg!t5(WER zaz4BBc}1$!BWqR0b3GbCMcKM&P-u~sX9s0u^zb;MPZQ63FphAiJ0Xr}(?J|zx_>H; zAbqKFmRga$=Kc5I58ZP1+O@GC{Z|-h1&TaHOGiXT`tA%bUO2}IWU}VU$gu0#=2>EO z3E~9)m&6IeS+UQ*0|*rnm?0VXAH*kias!VXBB@CO(3~c1LQ$HZV|0CliP3X77W@bD z^5EdV!nR^o*Q&`B11;ICJXA-mNU47hLd~ZL3EJ(nm$SO{X6f`=V+5eo%V_Z1 zb7L8xmGD3JjBEoGy_uSEC5whQK?{pRaYKNFX>pw*5&kPhdflO`Uqz}(@*<#-q!z8h zZPL$aCsJYCxJs#J6gmmpKd209(Ov9< z2qc$Pa{Ig2T?fBe8oc1WNBPYH2#Q1B$E65I{C3z_1g!kjNkiv{(_-#-8=_A5k0%08{+yuzjOWd>@Q<- zUnr=`X~K~J^ia?#JV(2xyfvDf`ur#23hGjGl;5%`3)l`ts{-DD$3^YLG}o!LmZG5{T6*hW*)~aqVS`Xt{!!d(Lqzi$a-t>n+vqe^0La``_Pxf6w%d zf0TPi+c91=GC&-xNmTrSzL*jb+SlCHW?0QoE91rjK%S^=%bkv6!fMDW$5jPE+QScNp%I(dAy^9f@P^PxzB7|6eSXI zbdgG_VSpTm-8sbg2hLbY$(79F?FGlXC|kL@S-I|C|9bDe-7{osFgKbZ!d2__!rld4 zQke+4$23GrJeuZ9CzkE#KV@0PAcA2mZE9>a6+;1QYiqlDTEMuIxQ%|Gp&B?}VLz+_ zS+1W18k4%=1PD<)?oHrvpi@3lKxV$=W=Hon>dM-N9rPK8&Lov}j9 zHl_X;wQ)fMsyjS5*n<*}?Ske#^5KPJq)tt(wx;0>W`vCxqc^SW>0}Fg*{#&}+C|!? zy#;et0y?l~8}{txmh*0$$JdDG-?%?qP9D5*M51F7r<}O<^#Qp-SBcRIVI(J!Ftjsy zQ~Muc`8Zk8+1YtT``=-q#It{+*n3YqZ9{NQ*$5OC`rg@*j4PoZI~@j@GE2^VEG&)`UdZQxvr%EP_PJi0b~cwc6;=To-~)&AHI z&ZPEidP#rEyyZ-tM*}bI9ewVXpPto6RxOi+g)=f25#Bt&mS*(sC zb~Ejg0i$uy$vUJI0)a2Elj;+2eW=_q1dm}B1yvCqfIT>zhn(_+`CJ~=yv8YK376ND z%!h}AJLd`j7&UT&jq0r3NR8(sq?rd+3M-OBd6Ung%~%w!@$%u%K>$K-l)n_AV;wsm8Ku?T~!mpN;fAU;0-)?4KKy0bWw9%$r?ZHuRyb|NgfQtmwsGfBo8PgM8@c zv74Dasr#+W%T+3MJSI}mE$tR{&_}wNt7%>4hWb<_64_DDFeee)<7b=!sYDJ;=FqJv zMi?8whzS!6Or}{iJXCZigm;LbFlRJb!vamYgY6_+SwvL@MP(JOKrh&T!N%8KGe8h^ z*$+SL-MhA{Yfho?4s>qw%GNSZ-Bh}`le)NDrqwq3C?!lt!#Evt?O1uWyj^Cb?aj=F z7NUdM%vk(VV0mKJK7U{Y8F63)_02&P|A{^4Og5ms-Zn0**~lbj}1@>AULcT$8p&o5{_xRJS*2E!w7bp{>~K4A(EH z7h>80@d3u3mvQkyCG8-Y+!c(89HnbnaRe-ck(dvg7mLjrQw6Mn)rT)h&jX52i=q)0 z{jN(1bX7nzZZ>{rDva_(8kUFYV}~XqcW>MXg5d?h*fq?TVi#eNJ)a{1@%(f9TuDX1 zFmUiyzuhh4S9CwZ$<1O5D>#f6&lEiHA6aIG>MJlXwW;Y)nFS7Styl>}GE$_lg{d-k z#0`83YJHJkQ`~Trz$l%4T(*j-t96ev)*8mmt@VsE)fva}%x&$qfVrvJ29Ed2`Y4#> zv+BPAldJ@Xd(lNRXS(-jCGtQ(q~tX;8C2d{vSs#VCrklq6^VJ&;?tvHWf&UEqDO|5 zQC-{+W4^Lam=%utr%iRUMaEm90Um>Pt^po(3rBLw@CR;^KI9={&jP1a7_NYh4FRoK zyUjXr2wf||K2i>s;j4ok+ki`3PlXsu7bWUZ>h;Aq44%7Nup6YB5|)0!M}3=P>g+II zqZWl{j3Xx{f^#O@8Y~m%(Dw8>U><|PlLGHBuj?-(r|dlDm={y9@#;M0ZmSid5IIh0 z3&roo8e(LfsWzX{S{gXVU8aGoDYddhSBO@}@fNY2>w z77dMub?oJ5L_tCS4xaiB^5)x-ddGk>Gx)fKK4bri>!@7mp(<*5FXQN>-SIO+o=`Zv zF|?O?X72@a=a$~A-xu6ezcq4lJ+tTL4I3ZZ6obKCp#`W9tr|Tn7XWN zMDXsgB*QjIuqh>?zx=@jr$`!{p&DX1M^%gQhzH-@@PK=;)4*H>8?WFCFhC_2Q=-z( z4urRu3qSje@)Qcsh8xbgw2MgjiDiqYGX^EB6qvB8i?5foEgq#h+r8oTWwN#jlZr~A ziY|P);gN0is^NISphH`9;gc6D6w!v`(s6rt!Af}P2`Mr@ZDKwl-StYH9JzuhkyLpF zC7Zl{95Q8VIu~}1&*$|pDehL-4jWHhl)fw!1vh(I=yT}p7416yc;>t03p{h zTd+g?=U`L!;p$R$ML1_OhTYJ^Dhzu*a7J7Vk4PaG!wx-z4inb8JY6U_Ju92&5We44{QswD_I|jCdr+lDCp0&&=+tDg6mhWUU^z< z)rxu{ps4;M=LVQB`AW68QLI%7_cxA@X=uV2u5=>=e#PGgEPR0f`A1Y?8(_4A=a`q@7be<@Z*B-zbAY5 zt^vcczKniRV#s)YrDl|_{?(Ez*n`2D!D^?qC9SR1q*`X!{YO}8tTRY0d5@V_B#(50 zcW(+np}`S>jx;!=tLh_QfX`%OV&$D1HcVll9XZ3?YijRv1(J)yfpf zK|a^A4Q1E8fqJnBBe)`v8Nnb>0M3m~l-UI2V6LAtRjB!Jj#&R;&C|EkEv2z)N?iIW zjXL+3!`7VEI<3>Qwf2ryeVr~_xU&}sE@iz6o0ZacL+r0Js1y!^E)UDOgzl_dp%Tb+ z8X?2)bjdXW z^|#_Xj^cKj@w9#adv1FE{) z8npVe$^=(7+!_xLW$=CBgB=dV8e0Vx=4$2Kc^Kmg7I)3^4t5Fy;f#|e`w#f&!}njS zpx5l*Ogaj-_MD~D+L2%E9evXcJJPPyjvH>tbigXLE?7Z%Y&YynYm?X1jML}mp7r=f zN+wu+=gCtVX?w#t-hj{NTkCz5`Bpob1VFgwCdVfl5*u}{F+Da_^~iB|g(cN4mnN$5 zxN1nBLL1R3wNbmGDxj8Yqff?1X51#eyhhB^*+VVh)9MfG0?ciwPbSTwF`g>^ilZv!QuhV#PGpPgM|WVf~nCl*rKZ-4(447_MS2y@~}7sG%3vU z-kzS)_pQ4olZn^l$5kwb4vH9;{P4p&@1Vb5Lm%E%iUajfm$qR6ETo6BFs#!f^HRBn zM7q#I66xiP<{rLM9G7TB)VGa0199|bfzO#+f4Xh``lH!rv(&6YUz(@H$7Xq(P&r$B%M=t#De}{tlSA2P6 z6Z3WBx6EgIKg>dRxw9cUCqN#Eip^GegS^^$TvSwLfsd?KsyVYWkO%|<+X6qp!cXBt z+qS_0_@JcokNyJ~Fo>u%al#ltCaR7uEC@i@UqT{@&v!^7N8Xi`r{HE$V7Tfp}O7 zJl+(9aXh`xC8!I9oPtO~cW&4)psy<3(7=2OYU4d{ zFN~gZQZqQhDXUF0+pgAsY@EUQeT;(>G8GI4WD8Xb<7HH-0l6yoJ8^N1u?$K;Tyr8Q z#5(%0VyU5n{EGXY7@T#h!Pesr>XOpjr>e3!Tflp`zpmB{%*b`Xj6BuhoosegO&%W0 z+;-xLQYC6eXh?9_@28vOKwXUi(~!3laYF9#yCtu~=PTlK#+bwoxoz6=3?(0wjBh6zIKMY_siiY&WHymy z{E=~8dg(NXhsEY`vq8l$+8Zt{Wef|~f~5waf3z>Gc|C}e@^Gp*kYJYWQ2%MdD|8jr z-hn$JHc7gY@D4P9MiLRVL5PZ`cSk~*!25p}}J>e4sNxp*1hBwc*Y)Os~IALehVf2K&O5?Q^)+(ln<$tC2RzeB22x^&?}Rk+0g z>_;j|Xms<-XF9T(SU@GMlfq8gV7(D0@Ni<{$wO2=k;rH|G@fJ9=5PfN&Y^HI zaRnI$$v{su022$jOctsmL$E$TlR3>o*<@9X4RQv;9psrR=U-eQUHb03Wcw$d3@M~5 zv9-lTfYpGkQYyT)Gs6PC&^^W^m&!uAsIfs8P(B_pc1{QYwBs9J@B%firoju{XVoDf zQ(Wn_ceNS(`nDpu9BHeh?Nt+j%vdLijry=yz2fS*(Bm)K@x-;&^S2!aYdt2MvCv67 zQfCFj;Lf%L_cC|>3>oU&uK?FND8_hdtrFX1VXYO>$Y=NmGt7J72eSWJfh%a2A}^!OQ1BKJ{U$?MB6I09ZEffoSAMNuNz*eUCxi`|1? zF!OLV5?KOE;jq64n_dHVJTz^<8|H#Q!~@Z)vwFz~z2Sah1%b2eP;X!<|NpvG&ytIn z`Q&Y=x82V@m_41HS$VXvUgBlP8owbB9qlhNXALes|L{Y(_`HUmRxE`(b|#I5(Oxj$ zo>6(yo~7a)@y;}PjM0&>uoh@+8|A*BOZrbHiLQfQoVg|t2b6GI;CqOI#P@C5v`3p- zHmych1Lk@Tpntf(<{H{MMBKTOLmZ&d{7@0cnk>dd_`r{UFYa(G@Dq<}@H5-00a2a& zgAZai-%L#KP~LLO5ubiKB)+TrD7&zkX!o@)Xd#-9vx{12YtvQ1c#v7#j6cZ!;Az3{ znTv_&;ceTFVVYsoa|L;dX@cjK@XUS=w>uI%_9Ni2Ih+^YPJMrq8G@*#f!h##r&*WLpDF39HE0yJCf#5(!G%JHJIOvrEK|L^0$F{DqOL&&F`#csiqX?^J>87x*f z=fe-n9SiH}F~w4*qww_8^urHR4?kShE_XruB@jN>h#$|Au;WnJv(p*bC}5nT>mTrFA(9x zq1ghcnA{0|Nlvcv3t?ir9w=|7x2&8Bbs>4pQ707|DaFiFU9j0km!BM6?5{1F>eP{# zJ=vIsYx6_qa`%vHL$Qv4Sa$;d6Ebq+bm4Mf<=!-6$HA|SyD|(*q2U>)=DEvall=0j z_s0?yk%vDuqUgh&5)3=wLukAevMAag-@FID)WCB5{thu142a1Nqcn0Cupw%NH8m2l zCDwRh5m128^l?-?vhI{Dux~eQI7Xq2_rzsp;pkb$2Scv0P6xEcGUr83E()`&<8@>B z%4TMKzYOH$9yiRUvGJK`f~jiK}dvbgr9ih4p#yM^_u;mZa9JaQm5(%%x51U23wyDk98> zWOt^R>`sy7J+Wh#!!U}H_RpCYyqoE(vH}$&k>TwNL|~$l5FXx0yM|cZp-4m?RPoOP zL%=cNR$nxX`-0p4Eo{~TI?z@H`ejr!w-@k9)32e8|nD$b%^=9&Y=?Q9c zX-$v{1JhRdaT@hdDffH^+K!<#Doq|Um+%@=%jeb=BNx-I`qkcAfM!;D?`QVCv19)H z^?`tY{S`jn*g)WFuh$P)hf(V^18KQPs4;1rQnOiJtM)-yoMnTn;i)9LUYwMj0zA>> zDcKb;XLHbZKe#7|BM!k67-&4L6%2xfL11AIPo-ai11n+kC!0(l$N}I+xm^=P+6c?1 z;k6*>zmwNBfLyLGrw@wOo2Su}u5TyTkQ10KWM(_I+o@z0t+K@l;gBOOlPUNTrSRpv zBr-A2H;6OcUgo}(tx29%q_3u~>MniNS<5x=5FQx!T@z_FubmjYo|&`!PT%Y!237W$ zjZac9LE6szBDN|Ms%qKGiG)tr(V<|YBWVpF!Zc6ZlodvLQySnOPy{kcowZ;#nY%VH zU%$6+bo9Ic^$K&p-YllheAX+|$OJyVQVXPM0T@=kcZfmZdNTv;D(}%OY4@=})w~^c zx7;-1-h*EV3yf8=H1wi;ybOHwTXHlS|HE7bjSPryxs`}*1B5@oUqi1JY64t)Ouq*i z$ep>6_h9*qjGdc39r?y!B`%V-jZw-ybx>y2385BUEs=VaZY}Ihl|5Lm&33zhX`-&H z*_D&3)d>%>>iS_!dXcksWS6nlSR6@iZ?;Zq6;??yVwh=@wPl6nq&e#VDr=P>KV1<(a3>&#=P7B~Dgkx7CU zqS)XA123+$KHxtf0vH@iU|Ksk)L{J+D=(=^!vgorn!ScM-p~P#bSVo544Az(f~y>0 zn3r6D`yc=x3o);Fk%Ws{SWp@Cg#@h@`8uRBA=8kRsFg7nI1!5v4EgJAvbs7x?D(|X z#78F-p(;RDES}dQMz1I?@@z=i5|SoSjCRI0``u8OIl=!t^X6OEtzJFh(rA-A8>$efQ)DkR3}H23EcDMDS=mGhlk5mnapBtFaE?n?2MUk~ z#D)8}v<#>f3mw2=LtKVxT80yb9XsA68Ut)b`kgHuRLT~ba~;(o|I7fd);*=FP91NY z?etEpsxwWX{*%m{dub0P;dh?D*$`^JWamgq%|!PriIw>XA2V+p^hxB>iJMF}A}lgQOe49IH-L z>;pD2y)aa;z<%LtUg)m5ej5*hx6K!C_uaHs2(0z%Zw=9o*qJ^6o&)QBuQK=idikP*xAT+AbNn~=kR@$c5dvizg-h6(3M&>s7S>x4R}HL z>p#mJpCr(dznT{B|A{y-bHo-pPjmA>sb@-S3e;@{xnAFvfCVKUb`tRR4yj5Nb-{{> zDz{L`AKSnW&KO6lMBU?Ee{aOWz<^7nln_akgtFTCzNk;o;37(eED~Otj5|774W<1x zuER!I?B|6k}8{u^hLM`^g-s^XCMLv zNkGYXZkQd!9I5P=5O^L5$t}0K=69A5WdbcCR(pm7H87*?fxiQr1{-B@+MYuKST!q$ zDTAQ`j<*H=A)ssq<`d{=**Y|-cK{afKJ%ZQJ4xe^{C@sJB~YnH0WTPpeXUeKw(50@n%0zO3h7dKYPIqX3> zUj(aE*-2g=C39NZJkGAX8Ek1iU<%j#E{?;?#6nHEiEbuD4@W~1un}zQ?{sE37{uxh zUSTC3;CcsG-2wfrZclV~=Zmt!!U7GGQ!|cdCKwx=t3tKoJ!V(k7?Z~^W=5TBw85<( zMLSbxK!oS_uk*jgeEZ;4%a=3%Ic$Gaq|v9e23es8g?MAwr3fPyEVyO}#d{+^-7j!n!DgdI<>i zE<1>csSUEHu&xb ziYgc$t5|I4!Nzxed5Dnt1s_`6PhI*LmtUPRv}^DAT<(r?9^FTD%Q$5c1qV3X=dH!u@S(8*_4kq4N3N263nH_@68 zT4g3_QVcEnzYB#|{3AIwxhlSX9q@>2dG(7IhBo~2%d-tfkiubSGjEbTsafgH6anWP z*DAG1huj?1$n;4#y!r!=Lw&bA3p_9=G$4V4dvE{LU~p%Ws>qyinBgG!=as+XVqi9s z&Aj|F4z6AN%{OnpdE!7$$HN+M74{LoLcS=y0ILl)Eoqe-`FWn699B@-6)BmGnMgGO z-qi#PMjkIU|2vm^F_)w3!Y8_&9*<|4`vK<57p`2ff_XNyC-P7v;#miiqjd_c!V}aP zeM*fcOyXYeNUzuZ=!b8;^%e}YA|=Jc!>nkzg2H9QO%*oHg1+6J~l<*9l&kQl$wi)qa&m z6$IajZNK*&2sB%+(n=>$NeW811@gQ+H!!K!sz0Of_*I76LG zWfE(Y@|ecsn6)UvQwzgK&FJ&Em#=N)sYL13Oa9~6+647{%h3UqMG)p!k*k~eMLyi> znXF}J&WPtz)D`|c%ss!rO)}qQvx{3=qRjUs?$g)+kT*-j21`$!y)mK{n?>44!&JL} z!Mw5H$%(vHMiHJ^+B{~Wz-)>Kl~7NS)CJRKM?S5Aj}?*T=k@Ba#;B=JnN)t2RUJy~ zK5zhn+D^F9EB@d{(YbPC1+XuH^9zIT5p{TYOa#iux?8&cUeOIy+UhF0jy8a6wc`?X zV5nxEBiJbDAB@?rp(p2H@Q7?F7GF!H_>`pdBRp=S&Mz&ROis=*rB?C|F#SD95ZPLv zN?k+FYG=M{Loh19IQ*GAnun))~_We-gZh5WC3na@A^3_*vVQKASYt*6{_{&oT+nvD^a z*eH;Dqk#V-_1vw$3xbBWP9tJ9yMNbfzsL{2RSrC4qa3tCZ1m2iVi4P4%mb|e{f*QZ zi(-4g0FBn6UWs4HMnalG*p$=sE&++SQH<) zwq|&=bnCix_rg5tOEAeg(J9dA1fg|JI!CTbW9iI8U6`!SERVIsThrt?c-4!VuG4^- zSSJV`-=ed(nKb4?0bjH(S$+}d6c+z3AEr}-0|qYj>Se)-l|cS?3dd=MaV2;9Xn0V6 zlJLNwA%&l_;$J3!$|IGC*tq0T%`F!Juv=NVixWtAq`3brrWUz$J^yI!vS5 zVW9kDW*Lz)-$6qCLlzPAHZ~J@iH#5}nG7?x>`!t({K!5F>Ev>YuYKE z6v|muYFW672n9x$NFx+V#JrL^n+3vlbxR%8MCux7v$aiY*0#;hI2Sh}18Qov7}|-? z?N=hkA9^*gF1RtgG57``?t7T)?x(&-_tA4@eLE5Pd}F*`@6$o8aMY~0REo_-5*v(k zi$&q7z2hGKTI|jn1X_VE;i#556%J+H6UyfKP8hr6S5K-6!?i`h6g~^oW0*l0SjGm9 zF}6(0U4%iixomsb7HFN=G2(J)4}-PH$Fm`Rmg0Ej@XGM25ZLH1s8`Yh?t0N5preK> zX3ZsmP|g4#23}YBzThKJt&|r0NNqC3T@&Z+hcsHmVPz_AH-uD#>**K5m*Tfo9^-&} z?uTS<>(F@ANts@^4!$L;s6l9TFh3zDeUzm?eG_NuOTV?h?<~(c+42>C6 zHGlq|F=G}i_=#*tFrUQ9m&OU{>cfw43Z#^M;)I&E={5S0xz^ZVO18AA!{!D>MBX3? zo0Ia0Jn`QqsZv?*BocwqEtD-K0p^t-zqiD69!XN{j+ndLx|-G+(h#qL6}-l#0MM^% z!I5hsVbu%j(2-8HskOb?U`!@-7JVYUCUZ}k6dOxF^EHyRR4=AoAew(`z7b|1FUC1Y z{+3arm|QRk+@G|}r6dq6q(YW-b+fV2MvTmhKQ!O$GBp_j#@4UvOj)Dflv`M`V)>qr z38aELmANamm$~0;ZZ=jM+n!V>Y|*NiiG-ZhX?=~M?KG|5Er)WDDjd^;%)}w4cx2dY zVDn#;;_`7@B4{);YqL~x(wo~z+iGFJA= zWz-}Z3J{FSa6JACNV!m%jmQ5C1dg*U!-JSnsHzt72-7-|s}qnLv8x5+6C^1n8RnnN zVNEhEm8DcO3k6aI74xYi`ArA07N7$I=EkK$TNvsGHC+m`EG;(N4CZnh60{Z!UXdpn z^GmF1TIP_`T3?;epH2q^k(7~H`$yRGzrwxs8w0@*xg-3X-{q_Gku3_S(5N(#mA#{O zEUbs!)}xv4s<0j^w?XR#WFzE0g*m8(DG~F=pudwT0aLF}D52~8kmNaOb7Za81>wFU$bApp3o>KLPUx=cTy`DoqUbsH#(n!fhEaY+;_>8n z(#-T~kws|kjft|;Z30+DV(N*yR1s}JA5(c@L{1UX$Eddlm3^N449Y&|^!EC%IJW;c zfQzwS`5bVpieQ=v7i%DUXL+Yk0vZq6pzj4|{;_7cvXU!fCFj8r&kVMuAiY9ZmWxM> zM-BE2nFO)kh;ETPPPC&a(*1U{KSkntK{(UNUKCstY7*#4ZM>p6@GqdoPzWKz|H)N- z-2FD!Sh>vs21)$SaU2-jD;t0g>K(kXQ{&MjB?jH830tG0QQp9OK(1k?CrAtPSbf_) zGpF8C_**7(0a?Oq504%VHubf!W69#hKa(v<=A$GXilxuFqze+T;(1$`hm$IsFfFvM zZje{;8~KKZ+cX|1g4P1l=gZB^wN0snwALD_svFxRQt@ro0$?c;SIc?T4xY(o;?+20 za%f*L)EfJCMyeZ>30dm-7RQ1VA1I|#GtIC5`k`Frb*{f^5_BqzyWlwM>*hJvH%umXF#v+2fIGJY{Uh~Sjbqe*>S zWm55hW>26oZq!$0bY??~UuS896V0Wx&SI6y+Pn1JDN|tUX;rnMGc-vd)Vc&xUc6Rj zx2~&`)~S4IZ=$NE*Ji68b)=^4SP$~L*UptE60~mOn$bpR{?-&0cAD#__i81zGUNDp zaj?Gi2Oa^aDmtuBflFQn!mOdAsD}u1K>;hWffB|lHwIKFZJa_^WCoENlsc3??lJgt zR+-BqsO4DdPrrwl-nn~3w z_x;m8wq^=EfAZOz_ul&nXsrcm1$VJQD>Cj5lzh02F-T4_Fwo1P9+!={7Ro=Um47KM z7_7S($_{r!pq-T(F6`={SkFn76VCGwbKj*FpcT2<>MIaBV0*T=LUT@4YvumyW!IYoUmR z+2`tj^(hcIxiB8~5fAeQ>1rhaON&h^MZ`>me3Mr!lH(34=G2JDQ4_K_CqkQQL^R4P zGw=gEeP^x8CW85e<-Ky~ED~ven)w3qz9u|kk6WttevpGHl!SC)`vu5%AzC~W+pNPHps0HKulxz(GHiL+Pxr`_27#&x+ zyNuO3AbhiR7{yf`HBw_*r_eV#)M~F%tMZY1RHh(Mr9~m|b+V#Rdl0p%XAO9H31^w^ z=(rK}sV3#6gq*m9Y!IFq}cy?0;7b;5&+=BVk=O zOErc*yOzy(4sqjIB4U2d;XV>aL~f+xu%sfk?#wQF-qWK0gR-g(*({0u-w6gY zuU2QD*CVWwb{rWC+p-OspgNYeD(KqiNq!epr&jx)X7;=fqVQOxIqH^MI!vmnj&%aH zUJ_F~WS?sx`c<3SZ)F~nkvsl3g+-{;x@Y)+BfoB{R}-$+0^d`;8YIXD67&z&m?$8X z8cco1Z8++Ire^Gxna$?Fn_w-%c|hd7bHt6DIpLxyV@1JHW`?5-e`ZeLYglKGM*ROq zo`^D&v1jUz?F1$XVPVPaw9Ft4igYW0YVybCxEY#0f{!hf9qN~JY*d+_MHzNENFnpjP=5J+2{+yZNas zS=~aCnb!2r%;iTv1>a*6NbpUtxZy8+kFf!A-@)G_ey

    YzU|R;9N>M~p>KGj&Br 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%0DkT?6IdD+BI#^OApHos9xO2Z1 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 XA@pE|HNZeAKo{L|7d^+mC{mLX-9a7a<*inw9 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